[
  {
    "path": ".clang-format",
    "content": "---\nAccessModifierOffset: -1\nAlignAfterOpenBracket: Align\nAlignConsecutiveAssignments: false\nAlignConsecutiveDeclarations: false\nAlignEscapedNewlines:  Left\n# AlingOperands: true # Unsupported\nAlignTrailingComments: false\nAllowAllParametersOfDeclarationOnNextLine: false\nAllowShortBlocksOnASingleLine: false\nAllowShortCaseLabelsOnASingleLine: false\nAllowShortFunctionsOnASingleLine: Empty\nAllowShortIfStatementsOnASingleLine: false\nAllowShortLoopsOnASingleLine: false\nAlwaysBreakAfterReturnType: None\nAlwaysBreakBeforeMultilineStrings: true\nAlwaysBreakTemplateDeclarations: true\nBinPackArguments: false\nBinPackParameters: false\nBreakBeforeBinaryOperators: false\nBreakBeforeBraces: Attach\nBreakBeforeInheritanceComma: false\nBreakBeforeTernaryOperators: true\nBreakConstructorInitializers: AfterColon\nBreakStringLiterals: true\nColumnLimit: 100\nCompactNamespaces: false\nConstructorInitializerAllOnOneLineOrOnePerLine: true\nConstructorInitializerIndentWidth: 2\nContinuationIndentWidth: 4\nCpp11BracedListStyle: true\nDerivePointerAlignment: false\nFixNamespaceComments: true\nSortIncludes: true\nIncludeBlocks: Regroup\nIncludeCategories:\n  # Making gtest/gmock show up first\n  - Regex:           '^((<|\")(gtest/|gmock/|folly/portability/(GTest|GMock|GFlags)))'\n    Priority:        -10\nMainIncludeChar: Any\nIncludeIsMainRegex: '(Test)?$'\nIndentCaseLabels: false\nIndentPPDirectives: None\nIndentWidth: 2\nIndentWrappedFunctionNames: false\nKeepEmptyLinesAtTheStartOfBlocks: false\n# LanguageKind: Cpp # Unsupported\nMaxEmptyLinesToKeep: 1\nNamespaceIndentation: None\n# ObjCBinPackProtocolList: Never # Unsupported\nObjCBlockIndentWidth: 2\nObjCSpaceAfterProperty: true\nObjCSpaceBeforeProtocolList: true\nPenaltyBreakAssignment: 5\nPenaltyBreakBeforeFirstCallParameter: 10\nPenaltyBreakComment: 60\nPenaltyBreakFirstLessLess: 20\nPenaltyBreakString: 1000\nPenaltyExcessCharacter: 1000000\nPenaltyReturnTypeOnItsOwnLine: 200\nPointerAlignment: Left\nQualifierAlignment: Left\nReflowComments: true\nSortUsingDeclarations: true\nSpaceAfterCStyleCast: false\nSpaceAfterTemplateKeyword: false\nSpaceBeforeAssignmentOperators: true\n# SpaceBeforeCtorInitializerColon: false # Unsupported\n# SpaceBeforeInheritanceColon: false # Unsupported\nSpaceBeforeParens: ControlStatements\n# SpaceBeforeRangeBasedForLoopColon: true # Unsupported\nSpaceInEmptyParentheses: false\nSpacesBeforeTrailingComments: 1\nSpacesInAngles: false\nSpacesInContainerLiterals: true\nSpacesInCStyleCastParentheses: false\nSpacesInParentheses: false\nSpacesInSquareBrackets: false\nStandard: Cpp11\nTabWidth: 2\nUseTab: Never\n...\n"
  },
  {
    "path": ".claude/CLAUDE.md",
    "content": "# IGL Project Instructions\n\n## Diff Formatting\n\n- Use Markdown formatting in diff summaries, titles, and test plans.\n- Diff titles should start with the relevant backend prefix, e.g., `igl | vulkan |`, `igl | metal |`, `igl | opengl |`. Use `igl | cmake |` for CMake-related changes, `igl | github |` for purely open-source related changes, and `igl |` alone for changes not specific to a single backend.\n- Always add trailing `()` to function and method names mentioned in titles, summaries, test plans, and actual code comments (e.g., `createInstance()`, `enable()`). Do not add `()` to type or class names (e.g., `RenderPipelineState`, `TextureDesc`).\n\n## Coding Style\n\n- Use C++20 designated initializers whenever possible.\n- For NESTED designated initializers that fit on a single line, omit the trailing comma.\n- Prefer `const` for local variables whenever possible. Be aggressive, i.e., the structure `RenderPipelineDesc` can be initialized like that with all the nested fields, including attachments.\n"
  },
  {
    "path": ".cmake-format",
    "content": "{\n  \"_help_parse\": \"Options affecting listfile parsing\",\n  \"parse\": {\n    \"_help_additional_commands\": [\n      \"Specify structure for custom cmake functions\"\n    ],\n    \"additional_commands\": {\n      \"foo\": {\n        \"flags\": [\n          \"BAR\",\n          \"BAZ\"\n        ],\n        \"kwargs\": {\n          \"HEADERS\": \"*\",\n          \"SOURCES\": \"*\",\n          \"DEPENDS\": \"*\"\n        }\n      }\n    },\n    \"_help_override_spec\": [\n      \"Override configurations per-command where available\"\n    ],\n    \"override_spec\": {},\n    \"_help_vartags\": [\n      \"Specify variable tags.\"\n    ],\n    \"vartags\": [],\n    \"_help_proptags\": [\n      \"Specify property tags.\"\n    ],\n    \"proptags\": []\n  },\n  \"_help_format\": \"Options affecting formatting.\",\n  \"format\": {\n    \"_help_disable\": [\n      \"Disable formatting entirely, making cmake-format a no-op\"\n    ],\n    \"disable\": false,\n    \"_help_line_width\": [\n      \"How wide to allow formatted cmake files\"\n    ],\n    \"line_width\": 130,\n    \"_help_tab_size\": [\n      \"How many spaces to tab for indent\"\n    ],\n    \"tab_size\": 2,\n    \"_help_use_tabchars\": [\n      \"If true, lines are indented using tab characters (utf-8\",\n      \"0x09) instead of <tab_size> space characters (utf-8 0x20).\",\n      \"In cases where the layout would require a fractional tab\",\n      \"character, the behavior of the  fractional indentation is\",\n      \"governed by <fractional_tab_policy>\"\n    ],\n    \"use_tabchars\": false,\n    \"_help_fractional_tab_policy\": [\n      \"If <use_tabchars> is True, then the value of this variable\",\n      \"indicates how fractional indentions are handled during\",\n      \"whitespace replacement. If set to 'use-space', fractional\",\n      \"indentation is left as spaces (utf-8 0x20). If set to\",\n      \"`round-up` fractional indentation is replaced with a single\",\n      \"tab character (utf-8 0x09) effectively shifting the column\",\n      \"to the next tabstop\"\n    ],\n    \"fractional_tab_policy\": \"use-space\",\n    \"_help_max_subgroups_hwrap\": [\n      \"If an argument group contains more than this many sub-groups\",\n      \"(parg or kwarg groups) then force it to a vertical layout.\"\n    ],\n    \"max_subgroups_hwrap\": 8,\n    \"_help_max_pargs_hwrap\": [\n      \"If a positional argument group contains more than this many\",\n      \"arguments, then force it to a vertical layout.\"\n    ],\n    \"max_pargs_hwrap\": 8,\n    \"_help_max_rows_cmdline\": [\n      \"If a cmdline positional group consumes more than this many\",\n      \"lines without nesting, then invalidate the layout (and nest)\"\n    ],\n    \"max_rows_cmdline\": 2,\n    \"_help_separate_ctrl_name_with_space\": [\n      \"If true, separate flow control names from their parentheses\",\n      \"with a space\"\n    ],\n    \"separate_ctrl_name_with_space\": false,\n    \"_help_separate_fn_name_with_space\": [\n      \"If true, separate function names from parentheses with a\",\n      \"space\"\n    ],\n    \"separate_fn_name_with_space\": false,\n    \"_help_dangle_parens\": [\n      \"If a statement is wrapped to more than one line, than dangle\",\n      \"the closing parenthesis on its own line.\"\n    ],\n    \"dangle_parens\": false,\n    \"_help_dangle_align\": [\n      \"If the trailing parenthesis must be 'dangled' on its on\",\n      \"line, then align it to this reference: `prefix`: the start\",\n      \"of the statement,  `prefix-indent`: the start of the\",\n      \"statement, plus one indentation  level, `child`: align to\",\n      \"the column of the arguments\"\n    ],\n    \"dangle_align\": \"prefix\",\n    \"_help_min_prefix_chars\": [\n      \"If the statement spelling length (including space and\",\n      \"parenthesis) is smaller than this amount, then force reject\",\n      \"nested layouts.\"\n    ],\n    \"min_prefix_chars\": 4,\n    \"_help_max_prefix_chars\": [\n      \"If the statement spelling length (including space and\",\n      \"parenthesis) is larger than the tab width by more than this\",\n      \"amount, then force reject un-nested layouts.\"\n    ],\n    \"max_prefix_chars\": 10,\n    \"_help_max_lines_hwrap\": [\n      \"If a candidate layout is wrapped horizontally but it exceeds\",\n      \"this many lines, then reject the layout.\"\n    ],\n    \"max_lines_hwrap\": 2,\n    \"_help_line_ending\": [\n      \"What style line endings to use in the output.\"\n    ],\n    \"line_ending\": \"unix\",\n    \"_help_command_case\": [\n      \"Format command names consistently as 'lower' or 'upper' case\"\n    ],\n    \"command_case\": \"canonical\",\n    \"_help_keyword_case\": [\n      \"Format keywords consistently as 'lower' or 'upper' case\"\n    ],\n    \"keyword_case\": \"upper\",\n    \"_help_always_wrap\": [\n      \"A list of command names which should always be wrapped\"\n    ],\n    \"always_wrap\": [],\n    \"_help_enable_sort\": [\n      \"If true, the argument lists which are known to be sortable\",\n      \"will be sorted lexicographicall\"\n    ],\n    \"enable_sort\": true,\n    \"_help_autosort\": [\n      \"If true, the parsers may infer whether or not an argument\",\n      \"list is sortable (without annotation).\"\n    ],\n    \"autosort\": false,\n    \"_help_require_valid_layout\": [\n      \"By default, if cmake-format cannot successfully fit\",\n      \"everything into the desired linewidth it will apply the\",\n      \"last, most agressive attempt that it made. If this flag is\",\n      \"True, however, cmake-format will print error, exit with non-\",\n      \"zero status code, and write-out nothing\"\n    ],\n    \"require_valid_layout\": false,\n    \"_help_layout_passes\": [\n      \"A dictionary mapping layout nodes to a list of wrap\",\n      \"decisions. See the documentation for more information.\"\n    ],\n    \"layout_passes\": {}\n  },\n  \"_help_markup\": \"Options affecting comment reflow and formatting.\",\n  \"markup\": {\n    \"_help_bullet_char\": [\n      \"What character to use for bulleted lists\"\n    ],\n    \"bullet_char\": \"*\",\n    \"_help_enum_char\": [\n      \"What character to use as punctuation after numerals in an\",\n      \"enumerated list\"\n    ],\n    \"enum_char\": \".\",\n    \"_help_first_comment_is_literal\": [\n      \"If comment markup is enabled, don't reflow the first comment\",\n      \"block in each listfile. Use this to preserve formatting of\",\n      \"your copyright/license statements.\"\n    ],\n    \"first_comment_is_literal\": false,\n    \"_help_literal_comment_pattern\": [\n      \"If comment markup is enabled, don't reflow any comment block\",\n      \"which matches this (regex) pattern. Default is `None`\",\n      \"(disabled).\"\n    ],\n    \"literal_comment_pattern\": \".*\",\n    \"_help_fence_pattern\": [\n      \"Regular expression to match preformat fences in comments\",\n      \"default= ``r'^\\\\s*([`~]{3}[`~]*)(.*)$'``\"\n    ],\n    \"fence_pattern\": \"^\\\\s*([`~]{3}[`~]*)(.*)$\",\n    \"_help_ruler_pattern\": [\n      \"Regular expression to match rulers in comments default=\",\n      \"``r'^\\\\s*[^\\\\w\\\\s]{3}.*[^\\\\w\\\\s]{3}$'``\"\n    ],\n    \"ruler_pattern\": \"^\\\\s*[^\\\\w\\\\s]{3}.*[^\\\\w\\\\s]{3}$\",\n    \"_help_explicit_trailing_pattern\": [\n      \"If a comment line matches starts with this pattern then it\",\n      \"is explicitly a trailing comment for the preceeding\",\n      \"argument. Default is '#<'\"\n    ],\n    \"explicit_trailing_pattern\": \"#<\",\n    \"_help_hashruler_min_length\": [\n      \"If a comment line starts with at least this many consecutive\",\n      \"hash characters, then don't lstrip() them off. This allows\",\n      \"for lazy hash rulers where the first hash char is not\",\n      \"separated by space\"\n    ],\n    \"hashruler_min_length\": 10,\n    \"_help_canonicalize_hashrulers\": [\n      \"If true, then insert a space between the first hash char and\",\n      \"remaining hash chars in a hash ruler, and normalize its\",\n      \"length to fill the column\"\n    ],\n    \"canonicalize_hashrulers\": true,\n    \"_help_enable_markup\": [\n      \"enable comment markup parsing and reflow\"\n    ],\n    \"enable_markup\": true\n  },\n  \"_help_lint\": \"Options affecting the linter\",\n  \"lint\": {\n    \"_help_disabled_codes\": [\n      \"a list of lint codes to disable\"\n    ],\n    \"disabled_codes\": [],\n    \"_help_function_pattern\": [\n      \"regular expression pattern describing valid function names\"\n    ],\n    \"function_pattern\": \"[0-9a-z_]+\",\n    \"_help_macro_pattern\": [\n      \"regular expression pattern describing valid macro names\"\n    ],\n    \"macro_pattern\": \"[0-9A-Z_]+\",\n    \"_help_global_var_pattern\": [\n      \"regular expression pattern describing valid names for\",\n      \"variables with global (cache) scope\"\n    ],\n    \"global_var_pattern\": \"[A-Z][0-9A-Z_]+\",\n    \"_help_internal_var_pattern\": [\n      \"regular expression pattern describing valid names for\",\n      \"variables with global scope (but internal semantic)\"\n    ],\n    \"internal_var_pattern\": \"_[A-Z][0-9A-Z_]+\",\n    \"_help_local_var_pattern\": [\n      \"regular expression pattern describing valid names for\",\n      \"variables with local scope\"\n    ],\n    \"local_var_pattern\": \"[a-z][a-z0-9_]+\",\n    \"_help_private_var_pattern\": [\n      \"regular expression pattern describing valid names for\",\n      \"privatedirectory variables\"\n    ],\n    \"private_var_pattern\": \"_[0-9a-z_]+\",\n    \"_help_public_var_pattern\": [\n      \"regular expression pattern describing valid names for public\",\n      \"directory variables\"\n    ],\n    \"public_var_pattern\": \"[A-Z][0-9A-Z_]+\",\n    \"_help_argument_var_pattern\": [\n      \"regular expression pattern describing valid names for\",\n      \"function/macro arguments and loop variables.\"\n    ],\n    \"argument_var_pattern\": \"[a-z][a-z0-9_]+\",\n    \"_help_keyword_pattern\": [\n      \"regular expression pattern describing valid names for\",\n      \"keywords used in functions or macros\"\n    ],\n    \"keyword_pattern\": \"[A-Z][0-9A-Z_]+\",\n    \"_help_max_conditionals_custom_parser\": [\n      \"In the heuristic for C0201, how many conditionals to match\",\n      \"within a loop in before considering the loop a parser.\"\n    ],\n    \"max_conditionals_custom_parser\": 2,\n    \"_help_min_statement_spacing\": [\n      \"Require at least this many newlines between statements\"\n    ],\n    \"min_statement_spacing\": 1,\n    \"_help_max_statement_spacing\": [\n      \"Require no more than this many newlines between statements\"\n    ],\n    \"max_statement_spacing\": 2,\n    \"max_returns\": 6,\n    \"max_branches\": 12,\n    \"max_arguments\": 5,\n    \"max_localvars\": 15,\n    \"max_statements\": 50\n  },\n  \"_help_encode\": \"Options affecting file encoding\",\n  \"encode\": {\n    \"_help_emit_byteorder_mark\": [\n      \"If true, emit the unicode byte-order mark (BOM) at the start\",\n      \"of the file\"\n    ],\n    \"emit_byteorder_mark\": false,\n    \"_help_input_encoding\": [\n      \"Specify the encoding of the input file. Defaults to utf-8\"\n    ],\n    \"input_encoding\": \"utf-8\",\n    \"_help_output_encoding\": [\n      \"Specify the encoding of the output file. Defaults to utf-8.\",\n      \"Note that cmake only claims to support utf-8 so be careful\",\n      \"when using anything else\"\n    ],\n    \"output_encoding\": \"utf-8\"\n  },\n  \"_help_misc\": \"Miscellaneous configurations options.\",\n  \"misc\": {\n    \"_help_per_command\": [\n      \"A dictionary containing any per-command configuration\",\n      \"overrides. Currently only `command_case` is supported.\"\n    ],\n    \"per_command\": {}\n  }\n}\n"
  },
  {
    "path": ".github/pull_request_template.md",
    "content": "Our [contribution guidelines](https://github.com/facebook/igl/blob/main/CONTRIBUTING.md):\n\n## Pull Requests\nWe actively welcome your pull requests. Here's the procedure to submit pull requests to IGL:\n\n1. **Submit an issue describing your proposed changes.**\n2. The repo owner will respond to your issue.\n3. If your proposed changes are accepted, fork the repo and develop & test your changes.\n4. If you've added code that should be tested, add tests (and ensure they do pass).\n5. Verify your changes work as expected on all relevant rendering backends, and also test them when any combination of backends is disabled using the `IGL_WITH_*` CMake options.\n6. If you've changed APIs, update the documentation.\n7. Make sure your code lints (run `clang-format` or use `.clang-format` in Visual Studio).\n8. If you haven't already, complete the Contributor License Agreement (\"CLA\").\n9. Please respect `// @fb-only` comments and do not delete them!\n10. Open a pull request.\n\n## Dependencies\nOne of our design objectives is that IGL itself should have as few dependencies as possible.\nNo new third-party dependencies will be accepted unless they are absolutely critical to the core functionality of IGL.\n\n**Please include a link to the related (and accepted) GitHub issue in this PR!**\n"
  },
  {
    "path": ".github/workflows/c-cpp.yml",
    "content": "name: C/C++ CI\n\non:\n  push:\n    branches: [ \"**\" ]\n  pull_request:\n    branches: [ \"**\" ]\n\n# https://github.com/git-lfs/git-lfs/issues/5749\nenv:\n  GIT_CLONE_PROTECTION_ACTIVE: false\n\njobs:\n  build:\n    name: \"Android (Ubuntu)\"\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          submodules: recursive\n\n      - name: Free up disk space\n        run: |\n          df -h\n          sudo rm -rf /usr/share/dotnet /opt/ghc\n          sudo docker system prune --all --force --volumes\n          sudo apt-get clean -y\n          df -h\n\n      - name: Set up NDK\n        uses: nttld/setup-ndk@v1\n        with:\n          ndk-version: r26b\n\n      - name: Set up JDK\n        uses: actions/setup-java@v5\n        with:\n          java-version: 21\n          distribution: 'oracle'\n\n      - name: Assemble APK debug\n        run: |\n          cd build/android\n          chmod +x ./gradlew\n          ./gradlew assembleDebug\n\n  cmake-build:\n      strategy:\n        fail-fast: false\n        matrix:\n          config:\n          - {\n              name: \"Windows - MSVC 2022\",\n              os: windows-latest,\n              build_type: \"Debug\",\n              cc: \"cl\",\n              cxx: \"cl\",\n              generators: \"Visual Studio 17 2022\",\n              cmake_args: \"-DIGL_WITH_TRACY=ON -DIGL_WITH_TESTS=ON\"\n            }\n          - {\n              name: \"Windows - MSVC 2022 (no OpenGL)\",\n              os: windows-latest,\n              build_type: \"Debug\",\n              cc: \"cl\",\n              cxx: \"cl\",\n              generators: \"Visual Studio 17 2022\",\n              cmake_args: \"-DIGL_WITH_TRACY=ON -DIGL_WITH_TESTS=ON -DIGL_WITH_OPENGL=OFF\"\n            }\n          - {\n              name: \"Ubuntu - Clang\",\n              os: ubuntu-latest,\n              build_type: \"Debug\",\n              cc: \"clang\",\n              cxx: \"clang++\",\n              generators: \"Unix Makefiles\",\n              cmake_args: \"-DIGL_WITH_TRACY=ON\"\n            }\n          - {\n              name: \"Ubuntu - GCC\",\n              os: ubuntu-latest,\n              build_type: \"Debug\",\n              cc: \"gcc\",\n              cxx: \"g++\",\n              generators: \"Unix Makefiles\",\n              # TODO: Fix killing GCC process on Github CI when IGL_WITH_SHELL is ON.\n              cmake_args: \"-DIGL_WITH_TRACY=ON -DIGL_WITH_SHELL=OFF\"\n            }\n# https://github.com/emscripten-core/emscripten/pull/20802#issuecomment-1858114093\n#          - {\n#              name: \"Emscripten (Ubuntu)\",\n#              os: ubuntu-latest,\n#              build_type: \"Debug\",\n#              cc: \"emcc\",\n#              cxx: \"em++\",\n#              generators: \"Ninja\",\n#          }\n#          - {\n#              name: \"macOS - Clang (Xcode)\",\n#              os: macos-latest,\n#              build_type: \"Debug\",\n#              cc: \"clang\",\n#              cxx: \"clang++\",\n#              generators: \"Xcode\",\n#              cmake_args: \"-DIGL_WITH_VULKAN=OFF\"\n#            }\n#          - {\n#              name: \"macOS - Clang (Unix Makefiles)\",\n#              os: macos-latest,\n#              build_type: \"Debug\",\n#              cc: \"clang\",\n#              cxx: \"clang++\",\n#              generators: \"Unix Makefiles\",\n#              cmake_args: \"-DIGL_WITH_VULKAN=OFF\"\n#            }\n      runs-on: ${{ matrix.config.os }}\n\n      steps:\n        - uses: actions/checkout@v6\n          with:\n            submodules: recursive\n\n        - if: startsWith(matrix.config.os, 'windows')\n          run: |\n            git config --system core.longpaths true\n\n        - if: startsWith(matrix.config.name, 'Emscripten')\n          run: |\n            sudo sed -i 's/azure\\.//' /etc/apt/sources.list\n            sudo apt-get update\n            sudo apt-get install -y clang emscripten xorg-dev libxinerama-dev libxcursor-dev libgles2-mesa-dev libegl1-mesa-dev libglfw3-dev libglew-dev libstdc++-12-dev\n\n        - if: startsWith(matrix.config.name, 'Ubuntu' )\n          run: |\n            sudo sed -i 's/azure\\.//' /etc/apt/sources.list\n            sudo apt-get update\n            sudo apt-get install -y clang xorg-dev libxinerama-dev libxcursor-dev libgles2-mesa-dev libegl1-mesa-dev libglfw3-dev libglew-dev libstdc++-12-dev\n\n        - name: Prepare Vulkan SDK\n          uses: jakoch/install-vulkan-sdk-action@v1.2.5\n          with:\n            vulkan_version: 1.4.309.0\n            install_runtime: true\n            cache: true\n            stripdown: true\n\n        - name: Get the number of CPU cores\n          uses: SimenB/github-actions-cpu-cores@v2\n\n        - name: Build\n          shell: bash\n          env:\n            CC:  ${{ matrix.config.cc }}\n            CXX: ${{ matrix.config.cxx }}\n          if: ${{ matrix.config.name  != 'Emscripten (Ubuntu)' }}\n          run: |\n            cmake ${{ env.CMAKE_GENERATOR }} -S \"${{ github.workspace }}\" -B build ${{ matrix.config.cmake_args }}\n            cd build\n            cmake --build . --parallel ${{ steps.cpu-cores.outputs.count }}\n\n        - name: Build Emscripten\n          shell: bash\n          env:\n            CC:  ${{ matrix.config.cc }}\n            CXX: ${{ matrix.config.cxx }}\n          if: ${{ matrix.config.name  == 'Emscripten (Ubuntu)' }}\n          run: |\n            emcmake cmake ${{ env.CMAKE_GENERATOR }} -S \"${{ github.workspace }}\" -B build ${{ matrix.config.cmake_args }}\n            cd build\n            cmake --build . --parallel ${{ steps.cpu-cores.outputs.count }}\n\n  cmake-test-ubuntu:\n      strategy:\n        fail-fast: false\n        matrix:\n          config:\n          - {\n              name: \"Ubuntu - Clang\",\n              os: ubuntu-latest,\n              build_type: \"Debug\",\n              cc: \"clang-16\",\n              cxx: \"clang++-16\",\n              generators: \"Unix Makefiles\",\n            }\n      runs-on: ${{ matrix.config.os }}\n\n      steps:\n        - uses: actions/checkout@v6\n          with:\n            submodules: recursive\n\n        - name: Install Ubuntu packages\n          shell: bash\n          run: |\n            sudo apt-get update\n            sudo apt-get install -y gcc-13 clang-16 xorg-dev libxinerama-dev libxcursor-dev libgles2-mesa-dev libegl1-mesa-dev libglfw3-dev libglew-dev libstdc++-12-dev extra-cmake-modules libxkbcommon-x11-dev wayland-protocols ninja-build\n            sudo apt-get install -y mesa-vulkan-drivers libvulkan1 vulkan-tools vulkan-validationlayers\n            cmake --version\n            vulkaninfo\n\n        - name: Install Vulkan SDK\n          uses: jakoch/install-vulkan-sdk-action@v1.2.5\n          with:\n            vulkan_version: 1.4.309.0\n            install_runtime: true\n            cache: true\n            stripdown: true\n\n        - name: Get the number of CPU cores\n          uses: SimenB/github-actions-cpu-cores@v2\n\n        - name: Check disk space\n          run: df -h\n\n        - name: Build\n          shell: bash\n          env:\n            CC:  ${{ matrix.config.cc }}\n            CXX: ${{ matrix.config.cxx }}\n          run: |\n            cmake ${{ env.CMAKE_GENERATOR }} -S \"${{ github.workspace }}\" -B build ${{ matrix.config.cmake_args }} -DCMAKE_BUILD_TYPE=Debug\n            cd build\n            cmake --build . --target Tiny --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target BasicFramebufferSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target BindGroupSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target ColorSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target DrawInstancedSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target GPUStressSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target HelloWorldSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target ImguiSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target MRTSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target Textured3DCubeSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target TextureViewSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target TinyMeshBindGroupSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target TinyMeshSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target TQSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n            cmake --build . --target YUVColorSession_vulkan --parallel ${{ steps.cpu-cores.outputs.count }}\n\n        - name: Run tests (shell)\n          run: |\n            ls build/shell\n            ./build/shell/BasicFramebufferSession_vulkan  --headless --viewport-size 1600x900 --screenshot-file BasicFramebufferSession.png\n            ./build/shell/BindGroupSession_vulkan         --headless --viewport-size 1600x900 --screenshot-file BindGroupSession.png\n            ./build/shell/ColorSession_vulkan             --headless --viewport-size 1600x900 --screenshot-file ColorSession.png\n            ./build/shell/DrawInstancedSession_vulkan     --headless --viewport-size 1600x900 --screenshot-file DrawInstancedSession.png\n            ./build/shell/GPUStressSession_vulkan         --headless --viewport-size 1600x900 --screenshot-file GPUStressSession.png\n            ./build/shell/HelloWorldSession_vulkan        --headless --viewport-size 1600x900 --screenshot-file HelloWorldSession.png\n            ./build/shell/ImguiSession_vulkan             --headless --viewport-size 1600x900 --screenshot-file ImguiSession.png\n            ./build/shell/MRTSession_vulkan               --headless --viewport-size 1600x900 --screenshot-file MRTSession.png\n            ./build/shell/Textured3DCubeSession_vulkan    --headless --viewport-size 1600x900 --screenshot-file Textured3DCubeSession.png\n            ./build/shell/TextureViewSession_vulkan       --headless --viewport-size 1600x900 --screenshot-file TextureViewSession.png\n            ./build/shell/TinyMeshBindGroupSession_vulkan --headless --viewport-size 1600x900 --screenshot-file TinyMeshBindGroupSession.png\n            ./build/shell/TinyMeshSession_vulkan          --headless --viewport-size 1600x900 --screenshot-file TinyMeshSession.png\n            ./build/shell/TQSession_vulkan                --headless --viewport-size 1600x900 --screenshot-file TQSession.png\n            ./build/shell/YUVColorSession_vulkan          --headless --viewport-size 1600x900 --screenshot-file YUVColorSession.png\n\n        - name: Run tests (desktop)\n          run: |\n            ls build/samples/desktop\n            #./build/samples/desktop/Tiny --headless\n\n        - name: Upload artifacts\n          uses: actions/upload-artifact@v6\n          with:\n            name: Screenshots\n            path: |\n              BasicFramebufferSession.png\n              BindGroupSession.png\n              ColorSession.png\n              DrawInstancedSession.png\n              GPUStressSession.png\n              HelloWorldSession.png\n              ImguiSession.png\n              MRTSession.png\n              Textured3DCubeSession.png\n              TextureViewSession.png\n              TinyMeshBindGroupSession.png\n              TinyMeshSession.png\n              TQSession.png\n              YUVColorSession.png\n            if-no-files-found: error\n            retention-days: 5\n            overwrite: true\n"
  },
  {
    "path": ".github/workflows/cmake-install-test.yml",
    "content": "name: CMake Install Test\n\non:\n  push:\n    branches: [ \"**\" ]\n    paths:\n      - 'CMakeLists.txt'\n      - 'cmake/**'\n      - 'src/**'\n      - 'IGLU/**'\n      - '.github/workflows/cmake-install-test.yml'\n  pull_request:\n    branches: [ \"**\" ]\n    paths:\n      - 'CMakeLists.txt'\n      - 'cmake/**'\n      - 'src/**'\n      - 'IGLU/**'\n      - '.github/workflows/cmake-install-test.yml'\n\n# https://github.com/git-lfs/git-lfs/issues/5749\nenv:\n  GIT_CLONE_PROTECTION_ACTIVE: false\n\njobs:\n  install-test:\n    strategy:\n      fail-fast: false\n      matrix:\n        config:\n        - {\n            name: \"Ubuntu - Clang\",\n            os: ubuntu-latest,\n            build_type: \"Release\",\n            cc: \"clang\",\n            cxx: \"clang++\",\n            generators: \"Unix Makefiles\",\n            cmake_args: \"-DIGL_ENABLE_INSTALL=ON -DIGL_WITH_SAMPLES=OFF -DIGL_WITH_SHELL=OFF -DIGL_WITH_TESTS=OFF\"\n          }\n\n    runs-on: ${{ matrix.config.os }}\n    name: ${{ matrix.config.name }}\n\n    steps:\n      - uses: actions/checkout@v6\n        with:\n          submodules: recursive\n\n      - if: startsWith(matrix.config.os, 'windows')\n        run: |\n          git config --system core.longpaths true\n\n      - if: startsWith(matrix.config.name, 'Ubuntu') && !matrix.config.android\n        run: |\n          sudo sed -i 's/azure\\.//' /etc/apt/sources.list\n          sudo apt-get update\n          sudo apt-get install -y clang xorg-dev libxinerama-dev libxcursor-dev libgles2-mesa-dev libegl1-mesa-dev libglfw3-dev libglew-dev libstdc++-12-dev\n\n      - name: Prepare Vulkan SDK\n        if: ${{ !contains(matrix.config.cmake_args, 'IGL_WITH_VULKAN=OFF') }}\n        uses: jakoch/install-vulkan-sdk-action@v1.1.1\n        with:\n          vulkan_version: 1.4.304.1\n          install_runtime: true\n          cache: true\n          stripdown: true\n\n      - name: Get the number of CPU cores\n        uses: SimenB/github-actions-cpu-cores@v2\n\n      - name: Configure CMake\n        shell: bash\n        env:\n          CC:  ${{ matrix.config.cc }}\n          CXX: ${{ matrix.config.cxx }}\n        run: |\n          # Set up platform-specific CMake arguments\n          CMAKE_PLATFORM_ARGS=\"\"\n          cmake -G \"${{ matrix.config.generators }}\" \\\n            -S \"${{ github.workspace }}\" \\\n            -B build \\\n            -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \\\n            -DCMAKE_INSTALL_PREFIX=\"${{ github.workspace }}/install\" \\\n            $CMAKE_PLATFORM_ARGS \\\n            ${{ matrix.config.cmake_args }}\n\n      - name: Build\n        shell: bash\n        run: |\n          cd build\n          cmake --build . --parallel ${{ steps.cpu-cores.outputs.count }} --config ${{ matrix.config.build_type }}\n\n      - name: Install\n        shell: bash\n        run: |\n          cd build\n          cmake --install . --config ${{ matrix.config.build_type }}\n\n      - name: Verify Installation Structure\n        shell: bash\n        run: |\n          echo \"=== Verifying Installation Structure ===\"\n          \n          # Check install directory exists\n          if [ ! -d \"${{ github.workspace }}/install\" ]; then\n            echo \"ERROR: Install directory not found!\"\n            exit 1\n          fi\n          \n          # Check for library directory\n          if [ ! -d \"${{ github.workspace }}/install/lib\" ]; then\n            echo \"ERROR: lib directory not found!\"\n            exit 1\n          fi\n          \n          # Check for include directory\n          if [ ! -d \"${{ github.workspace }}/install/include\" ]; then\n            echo \"ERROR: include directory not found!\"\n            exit 1\n          fi\n          \n          # Check for CMake config\n          if [ ! -f \"${{ github.workspace }}/install/lib/cmake/IGL/IGLConfig.cmake\" ]; then\n            echo \"ERROR: IGLConfig.cmake not found!\"\n            exit 1\n          fi\n          \n          # List installed files for debugging\n          echo \"=== Installed Libraries ===\"\n          find \"${{ github.workspace }}/install/lib\" -name \"*.a\" -o -name \"*.lib\" -o -name \"*.so\" -o -name \"*.dylib\" -o -name \"*.dll\" || true\n          \n          echo \"=== Installed Headers ===\"\n          find \"${{ github.workspace }}/install/include\" -type d | head -10\n          \n          echo \"=== CMake Config Files ===\"\n          find \"${{ github.workspace }}/install\" -name \"*.cmake\" | head -10\n\n      - name: Test find_package Integration\n        if: ${{ !matrix.config.android && !matrix.config.ios }}\n        shell: bash\n        run: |\n          echo \"=== Testing find_package Integration ===\"\n          \n          # Create test project directory\n          mkdir -p test-project\n          \n          # Create CMakeLists.txt\n          cat > test-project/CMakeLists.txt << 'EOF'\n          cmake_minimum_required(VERSION 3.19)\n          project(IGLInstallTest)\n          \n          # Set C++ standard to match IGL requirements\n          set(CMAKE_CXX_STANDARD 20)\n          set(CMAKE_CXX_STANDARD_REQUIRED ON)\n          \n          # Find IGL\n          find_package(IGL REQUIRED)\n          \n          # Print information\n          message(STATUS \"IGL_FOUND: ${IGL_FOUND}\")\n          message(STATUS \"IGL_VERSION: ${IGL_VERSION}\")\n          \n          # Create test executable\n          add_executable(igl_install_test main.cpp)\n          target_link_libraries(igl_install_test PRIVATE IGL::IGLLibrary)\n          \n          # Test component discovery\n          if(TARGET IGL::IGLOpenGL)\n            message(STATUS \"OpenGL backend available\")\n            target_link_libraries(igl_install_test PRIVATE IGL::IGLOpenGL)\n            target_compile_definitions(igl_install_test PRIVATE HAVE_OPENGL=1)\n          endif()\n          \n          if(TARGET IGL::IGLVulkan)\n            message(STATUS \"Vulkan backend available\") \n            target_link_libraries(igl_install_test PRIVATE IGL::IGLVulkan)\n            target_compile_definitions(igl_install_test PRIVATE HAVE_VULKAN=1)\n          endif()\n          \n          if(TARGET IGL::IGLMetal)\n            message(STATUS \"Metal backend available\")\n            target_link_libraries(igl_install_test PRIVATE IGL::IGLMetal)\n            target_compile_definitions(igl_install_test PRIVATE HAVE_METAL=1)\n          endif()\n          EOF\n          \n          # Create main.cpp\n          cat > test-project/main.cpp << 'EOF'\n          #include <igl/IGL.h>\n          #include <iostream>\n          \n          int main() {\n              std::cout << \"IGL Install Test - SUCCESS!\" << std::endl;\n              std::cout << \"IGL library linking works correctly!\" << std::endl;\n              \n          #ifdef HAVE_OPENGL\n              std::cout << \"OpenGL backend: Available\" << std::endl;\n          #endif\n          \n          #ifdef HAVE_VULKAN\n              std::cout << \"Vulkan backend: Available\" << std::endl;\n          #endif\n          \n          #ifdef HAVE_METAL\n              std::cout << \"Metal backend: Available\" << std::endl;\n          #endif\n              \n              // Test basic IGL functionality\n              auto backendType = igl::BackendType::OpenGL;\n              std::cout << \"IGL BackendType test: \" << static_cast<int>(backendType) << std::endl;\n              \n              return 0;\n          }\n          EOF\n\n      - name: Build Test Project\n        if: ${{ !matrix.config.android && !matrix.config.ios }}\n        shell: bash\n        run: |\n          cd test-project\n          cmake -B build -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} -DCMAKE_PREFIX_PATH=\"${{ github.workspace }}/install\" .\n          cmake --build build --config ${{ matrix.config.build_type }}\n\n      - name: Run Test Executable\n        if: ${{ !matrix.config.android && !matrix.config.ios }}\n        shell: bash\n        run: |\n          cd test-project\n          if [ \"${{ matrix.config.os }}\" = \"windows-latest\" ]; then\n            ./build/${{ matrix.config.build_type }}/igl_install_test.exe\n          else\n            ./build/igl_install_test\n          fi\n\n      - name: Test Install Disabled (Control Test)\n        shell: bash\n        env:\n          CC:  ${{ matrix.config.cc }}\n          CXX: ${{ matrix.config.cxx }}\n        run: |\n          echo \"=== Testing Install Disabled ===\"\n          \n          # Clean and configure without install\n          rm -rf build-control\n          \n          # Create cmake args without the install flag\n          CMAKE_ARGS=\"${{ matrix.config.cmake_args }}\"\n          CMAKE_ARGS_CLEAN=$(echo \"$CMAKE_ARGS\" | sed 's/-DIGL_ENABLE_INSTALL=ON//g')\n          \n          # Set up platform-specific CMake arguments (same as configure step)\n          CMAKE_PLATFORM_ARGS=\"\"\n          cmake -G \"${{ matrix.config.generators }}\" \\\n            -S \"${{ github.workspace }}\" \\\n            -B build-control \\\n            -DCMAKE_BUILD_TYPE=${{ matrix.config.build_type }} \\\n            -DIGL_ENABLE_INSTALL=OFF \\\n            $CMAKE_PLATFORM_ARGS \\\n            $CMAKE_ARGS_CLEAN\n          \n          # Build should succeed\n          cd build-control\n          cmake --build . --parallel ${{ steps.cpu-cores.outputs.count }} --config ${{ matrix.config.build_type }}\n          \n          # Verify no install targets are created\n          if cmake --build . --target install 2>/dev/null; then\n            echo \"WARNING: Install succeeded when it should be disabled\"\n          else\n            echo \"SUCCESS: Install properly disabled\"\n          fi\n\n  # Test that install doesn't break when new targets are added\n  install-backward-compatibility:\n    runs-on: ubuntu-latest\n    name: \"Backward Compatibility Test\"\n    \n    steps:\n      - uses: actions/checkout@v6\n        with:\n          submodules: recursive\n\n      - run: |\n          sudo sed -i 's/azure\\.//' /etc/apt/sources.list\n          sudo apt-get update\n          sudo apt-get install -y clang xorg-dev libxinerama-dev libxcursor-dev libgles2-mesa-dev libegl1-mesa-dev libglfw3-dev libglew-dev libstdc++-12-dev\n\n      - name: Test Default Build (Install Disabled)\n        run: |\n          cmake -B build-default .\n          cmake --build build-default --parallel 2\n          echo \"SUCCESS: Default build works with install code present\"\n\n      - name: Test All Backends Enabled\n        run: |\n          cmake -B build-all \\\n            -DIGL_ENABLE_INSTALL=ON \\\n            -DCMAKE_INSTALL_PREFIX=install-all \\\n            .\n          cmake --build build-all --parallel 2\n          cmake --install build-all\n          \n          # Verify all components are installed\n          find install-all -name \"*.a\" | grep -E \"(IGLLibrary|IGLOpenGL|IGLVulkan|IGLUimgui)\" | wc -l | grep -v \"^0$\"\n          echo \"SUCCESS: All backends install correctly\"\n"
  },
  {
    "path": ".github/workflows/doc-build.yml",
    "content": "name: Doc Build\n\non:\n  push:\n    branches:\n      - main\n    paths:\n      - 'docs/**'\n  pull_request:\n    types: opened\n    branches:\n      - main\n    paths:\n      - 'docs/**'\n\njobs:\n  build_docs_job:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        python-version: [3.6]\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n    - name: Dependencies\n      run: |\n        echo `python3 --version`\n        sudo apt-get install -y python3-sphinx\n        python3 -m pip install --upgrade pip\n        python3 -m pip install setuptools\n      id: build\n    - name: Build the docset\n      run: |\n        cd docs\n        pip install -r requirements.txt\n        make html\n    - name: Get output time\n      run: echo \"The time was ${{ steps.build.outputs.time }}\"\n    - name: Deploy\n      uses: JamesIves/github-pages-deploy-action@v4\n      with:\n        BRANCH: gh-pages # The branch the action should deploy to\n        FOLDER: ./docs/build/html # The folder the action should deploy\n"
  },
  {
    "path": ".gitignore",
    "content": ".idea\n.vscode\n"
  },
  {
    "path": "CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nproject(\"IGL\" CXX C)\n\n# cmake-format: off\noption(IGL_WITH_SAMPLES   \"Enable sample demo apps\"            ON)\n\noption(IGL_WITH_OPENGL    \"Enable IGL/OpenGL\"                  ON)\noption(IGL_WITH_OPENGLES  \"Enable IGL/OpenGL ES\"              OFF)\noption(IGL_WITH_VULKAN    \"Enable IGL/Vulkan\"                  ON)\noption(IGL_WITH_METAL     \"Enable IGL/Metal\"                   ON)\noption(IGL_WITH_WEBGL     \"Enable IGL/WebGL\"                  OFF)\noption(IGL_WITH_D3D12     \"Enable IGL/DirectX 12\"             OFF)\n\noption(IGL_WITH_IGLU      \"Enable IGLU utils\"                  ON)\noption(IGL_WITH_SHELL     \"Enable Shell utils\"                 ON)\noption(IGL_WITH_TESTS     \"Enable IGL tests (gtest)\"          OFF)\noption(IGL_WITH_TRACY     \"Enable Tracy profiler\"             OFF)\noption(IGL_WITH_TRACY_GPU \"Enable Tracy profiler for the GPU\" OFF)\noption(IGL_WITH_OPENXR    \"Enable OpenXR\"                     OFF)\noption(IGL_ENFORCE_LOGS   \"Enable logs in Release builds\"      ON)\n\noption(IGL_DEPLOY_DEPS    \"Deploy dependencies via CMake\"      ON)\n\noption(IGL_ENABLE_INSTALL \"Enable install targets for IGL\"    OFF)\n# cmake-format: on\n\nif(DEFINED ENV{VULKAN_SDK})\n  message(STATUS \"VULKAN_SDK=$ENV{VULKAN_SDK}\")\n  if(NOT EXISTS $ENV{VULKAN_SDK})\n    message(FATAL_ERROR \"$ENV{VULKAN_SDK} does not exist.\")\n  endif()\nendif()\n\nif(IOS)\n  if(IGL_WITH_OPENGL)\n    set(IGL_WITH_OPENGLES ON)\n  endif()\n  set(IGL_WITH_OPENGL OFF)\n  set(IGL_WITH_VULKAN OFF)\n  set(IGL_WITH_WEBGL OFF)\nendif()\n\nif(NOT APPLE)\n  set(IGL_WITH_METAL OFF)\nendif()\n\nif(NOT WIN32)\n  set(IGL_WITH_D3D12 OFF)\nendif()\n\nif(CMAKE_CXX_COMPILER_ID MATCHES \"Clang\")\n  # disable for all targets due to warnings in third-party code\n  add_definitions(-Wno-nullability-completeness)\nelseif(CMAKE_CXX_COMPILER_ID MATCHES \"GNU\")\n  add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-volatile>)\nendif()\n\nif(ANDROID)\n  if(IGL_WITH_OPENGL)\n    set(IGL_WITH_OPENGLES ON)\n  endif()\n  set(IGL_WITH_OPENGL OFF)\n  set(IGL_WITH_VULKAN ON)\n  set(IGL_WITH_WEBGL OFF)\nelseif(UNIX)\n  # disable for all targets due to warnings in third-party code\n  add_compile_options($<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-volatile>)\n  add_definitions(-Wno-attributes)\nendif()\n\nif(EMSCRIPTEN)\n  if(IGL_WITH_OPENXR)\n    message(FATAL_ERROR \"OpenXR is not supported on Emscripten.\")\n  endif()\n  set(IGL_WITH_IGLU ON)\n  set(IGL_WITH_OPENGL OFF)\n  set(IGL_WITH_OPENGLES OFF)\n  set(IGL_WITH_VULKAN OFF)\n  set(IGL_WITH_WEBGL ON)\n  set(IGL_WITH_SHELL OFF) # shell doesn't supported yet\nendif()\n\nset_property(GLOBAL PROPERTY USE_FOLDERS ON)\n\nfunction(igl_set_folder target folder_name)\n  set_property(TARGET ${target} PROPERTY FOLDER ${folder_name})\nendfunction()\n\nfunction(igl_set_cxxstd target cpp_version)\n  set_property(TARGET ${target} PROPERTY CXX_STANDARD ${cpp_version})\n  set_property(TARGET ${target} PROPERTY CXX_STANDARD_REQUIRED ON)\nendfunction()\n\n# cmake-format: off\nmessage(STATUS \"IGL_WITH_SAMPLES   = ${IGL_WITH_SAMPLES}\")\n\nmessage(STATUS \"IGL_WITH_OPENGL    = ${IGL_WITH_OPENGL}\")\nmessage(STATUS \"IGL_WITH_OPENGLES  = ${IGL_WITH_OPENGLES}\")\nmessage(STATUS \"IGL_WITH_VULKAN    = ${IGL_WITH_VULKAN}\")\nmessage(STATUS \"IGL_WITH_METAL     = ${IGL_WITH_METAL}\")\nmessage(STATUS \"IGL_WITH_WEBGL     = ${IGL_WITH_WEBGL}\")\nmessage(STATUS \"IGL_WITH_D3D12     = ${IGL_WITH_D3D12}\")\n\nmessage(STATUS \"IGL_WITH_IGLU      = ${IGL_WITH_IGLU}\")\nmessage(STATUS \"IGL_WITH_SHELL     = ${IGL_WITH_SHELL}\")\nmessage(STATUS \"IGL_WITH_TESTS     = ${IGL_WITH_TESTS}\")\nmessage(STATUS \"IGL_WITH_TRACY     = ${IGL_WITH_TRACY}\")\nmessage(STATUS \"IGL_WITH_TRACY_GPU = ${IGL_WITH_TRACY_GPU}\")\nmessage(STATUS \"IGL_WITH_OPENXR    = ${IGL_WITH_OPENXR}\")\nmessage(STATUS \"IGL_ENFORCE_LOGS   = ${IGL_ENFORCE_LOGS}\")\n\nmessage(STATUS \"IGL_DEPLOY_DEPS    = ${IGL_DEPLOY_DEPS}\")\n# cmake-format: on\n\nif(APPLE)\n  if(IGL_WITH_OPENXR)\n    message(FATAL_ERROR \"OpenXR is not supported on Apple (yet).\")\n  endif()\n  if(NOT (IGL_WITH_OPENGL OR IGL_WITH_VULKAN OR IGL_WITH_OPENGLES OR IGL_WITH_METAL OR IGL_WITH_WEBGL))\n    message(FATAL_ERROR \"At least one rendering backend should be defined (OpenGL, Vulkan or Metal).\")\n  endif()\nelse()\n  if(NOT (IGL_WITH_OPENGL OR IGL_WITH_VULKAN OR IGL_WITH_OPENGLES OR IGL_WITH_WEBGL OR IGL_WITH_D3D12))\n    message(FATAL_ERROR \"At least one rendering backend should be defined (OpenGL, Vulkan, or DirectX 12).\")\n  endif()\nendif()\n\nif(IGL_WITH_SHELL AND (NOT IGL_WITH_IGLU))\n  message(FATAL_ERROR \"IGL_WITH_SHELL requires enabling IGL_WITH_IGLU.\")\nendif()\n\nif(APPLE)\n  enable_language(OBJC)\n  enable_language(OBJCXX)\nendif()\n\nif(NOT DEFINED CMAKE_BUILD_TYPE)\n  set(CMAKE_BUILD_TYPE \"Debug\")\nendif()\n\nmessage(STATUS \"IGL generator : \" ${CMAKE_GENERATOR})\nmessage(STATUS \"IGL build type: \" ${CMAKE_BUILD_TYPE})\n\nset(IGL_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR})\nset(IGL_DEPS_CACHE_FILE \"${IGL_ROOT_DIR}/third-party/.bootstrap-deps.json\")\nfind_package(Python3 COMPONENTS Interpreter)\n\nmessage(STATUS \"IGL_ROOT_DIR = \" ${IGL_ROOT_DIR})\n\n# Enable local \"in-tree\" builds\nif(${CMAKE_CURRENT_SOURCE_DIR} MATCHES \"^.*fbsource.*\")\n  get_filename_component(REPO_ROOT_DIR \"../../../..\" ABSOLUTE)\n  message(STATUS \"REPO_ROOT_DIR = \" ${REPO_ROOT_DIR})\n  include_directories(${REPO_ROOT_DIR})\nendif()\n\n# Enables multithreaded compilation and a conformant preprocessor on visual studio\nif(MSVC)\n  SET(CMAKE_C_FLAGS   \"${CMAKE_C_FLAGS} /MP\")\n  SET(CMAKE_CXX_FLAGS \"${CMAKE_CXX_FLAGS} /MP\")\nendif()\n\nif(IGL_DEPLOY_DEPS)\n  # deploy dependencies during configuration\n  execute_process(COMMAND ${Python3_EXECUTABLE} deploy_deps.py WORKING_DIRECTORY ${IGL_ROOT_DIR} COMMAND_ERROR_IS_FATAL ANY)\n\n  if(NOT EXISTS ${IGL_DEPS_CACHE_FILE})\n    message(FATAL_ERROR \"Cannot deploy dependencies.\")\n  endif()\n\n  # regenerate dependencies when .bootstrap-deps.json is older than bootstrap-deps.json\n  add_custom_command(COMMAND ${Python3_EXECUTABLE} deploy_deps.py OUTPUT ${IGL_DEPS_CACHE_FILE}\n                     DEPENDS \"${IGL_ROOT_DIR}/third-party/bootstrap-deps.json\" WORKING_DIRECTORY ${IGL_ROOT_DIR})\n  add_custom_target(IGLDependencies DEPENDS ${IGL_DEPS_CACHE_FILE})\n\n  igl_set_folder(IGLDependencies \"IGL\")\nendif()\n\nif (NOT IGL_WITH_TRACY AND IGL_WITH_TRACY_GPU)\n  message(FATAL_ERROR \"IGL_WITH_TRACY must be enabled to use Tracy's GPU profiling\")\nendif()\n\n\nif(IGL_WITH_TRACY)\n  add_definitions(\"-DTRACY_ENABLE=1\")\n  add_definitions(\"-DTRACY_VK_USE_SYMBOL_TABLE=1\")\n  add_subdirectory(third-party/deps/src/tracy)\n  igl_set_folder(TracyClient \"third-party\")\nendif()\n\nif(IGL_WITH_OPENXR)\n  add_subdirectory(third-party/deps/src/openxr-sdk)\n  igl_set_folder(openxr_loader \"third-party/OpenXR\")\nendif()\n\nif(WIN32 AND IGL_WITH_D3D12)\n  set(DIRECTX_HEADERS_ROOT \"${IGL_ROOT_DIR}/third-party/deps/src/DirectX-Headers\")\n  if(EXISTS \"${DIRECTX_HEADERS_ROOT}/CMakeLists.txt\")\n    add_subdirectory(\"${DIRECTX_HEADERS_ROOT}\" \"${CMAKE_BINARY_DIR}/DirectX-Headers\")\n    set(DIRECTX_HEADERS_INCLUDE_DIR \"${DIRECTX_HEADERS_ROOT}/include/directx\")\n  else()\n    message(FATAL_ERROR \"DirectX-Headers dependency not found. Run deploy_deps.py to download third-party/deps/src/DirectX-Headers.\")\n  endif()\nendif()\n\nadd_subdirectory(src/igl)\n\nif(IGL_WITH_TRACY)\n  target_compile_definitions(IGLLibrary PUBLIC \"IGL_WITH_TRACY=1\")\n  if(IGL_WITH_TRACY_GPU)\n    target_compile_definitions(IGLLibrary PUBLIC \"IGL_WITH_TRACY_GPU=1\")\n  endif()\nendif()\n\nif(IGL_DEPLOY_DEPS)\n  add_dependencies(IGLLibrary IGLDependencies)\nendif()\n\nif(IGL_ENFORCE_LOGS)\n  target_compile_definitions(IGLLibrary PUBLIC \"IGL_FORCE_ENABLE_LOGS=1\")\nendif()\n\nif(UNIX AND NOT APPLE AND NOT ANDROID AND NOT EMSCRIPTEN)\n  if(IGL_WITH_SAMPLES OR IGL_WITH_SHELL)\n    target_compile_definitions(IGLLibrary PUBLIC \"IGL_PLATFORM_LINUX_USE_EGL=0\")\n  else()\n    target_compile_definitions(IGLLibrary PUBLIC \"IGL_PLATFORM_LINUX_USE_EGL=1\")\n  endif()\nendif()\n\n# in the client code, use IGL_BACKEND_* macros instead of IGL_BACKEND_ENABLE_*\nif(IGL_WITH_OPENGL)\n  target_compile_definitions(IGLLibrary PUBLIC \"IGL_BACKEND_ENABLE_OPENGL=1\")\nendif()\nif(IGL_WITH_OPENGLES OR IGL_WITH_WEBGL)\n  target_compile_definitions(IGLLibrary PUBLIC \"IGL_BACKEND_ENABLE_OPENGL=1\")\nendif()\nif(IGL_WITH_VULKAN)\n  target_compile_definitions(IGLLibrary PUBLIC \"IGL_BACKEND_ENABLE_VULKAN=1\")\nendif()\nif(IGL_WITH_IGLU)\n  target_compile_definitions(IGLLibrary PUBLIC \"IGL_WITH_IGLU=1\")\nendif()\nif(APPLE AND IGL_WITH_METAL)\n  target_compile_definitions(IGLLibrary PUBLIC \"IGL_BACKEND_ENABLE_METAL=1\")\nendif()\nif(WIN32 AND IGL_WITH_D3D12)\n  target_compile_definitions(IGLLibrary PUBLIC \"IGL_BACKEND_ENABLE_D3D12=1\")\nendif()\n\nif(NOT IGL_WITH_VULKAN)\n  target_sources(IGLLibrary PRIVATE \"src/igl/vulkan/util/TextureFormat.cpp\")\nendif()\n\ntarget_compile_definitions(IGLLibrary PUBLIC \"IGL_CMAKE_BUILD=1\")\n\ninclude_directories(.)\n\n# Enable CTest at top-level when tests are requested so `ctest` can discover tests\nif(IGL_WITH_TESTS)\n  include(CTest)\n  enable_testing()\nendif()\n\nif(IGL_WITH_IGLU OR IGL_WITH_SAMPLES)\n  add_library(IGLstb third-party/deps/patches/stb_impl/stb_image.c third-party/deps/patches/stb_impl/stb_image_resize.c\n                     third-party/deps/patches/stb_impl/stb_image_write.c)\n  target_include_directories(IGLstb PUBLIC \"third-party/deps/src/stb\")\n  target_include_directories(IGLstb PUBLIC \"third-party/deps/src\")\n  igl_set_folder(IGLstb \"IGL\")\nendif()\nif (IGL_WITH_IGLU)\n  include_directories(\"third-party/deps/src/imgui\")\n  add_subdirectory(IGLU)\n  if(IGL_WITH_SHELL)\n    include_directories(\"third-party/deps/src/stb\")\n    add_subdirectory(shell)\n  endif()\nendif()\n\nif(IGL_WITH_SAMPLES)\n  if (EMSCRIPTEN)\n    add_subdirectory(samples/wasm)\n  else()\n    include_directories(\"third-party/deps/src\")\n    include_directories(\"third-party/deps/src/bc7enc\")\n    include_directories(\"third-party/deps/src/gli\")\n    include_directories(\"third-party/deps/src/glm\")\n    include_directories(\"third-party/deps/src/stb\")\n    include_directories(\"third-party/deps/src/taskflow\")\n    include_directories(\"third-party/deps/src/3D-Graphics-Rendering-Cookbook\")\n    if(WIN32 OR (UNIX AND NOT APPLE AND NOT ANDROID))\n      # cmake-format: off\n      set(GLFW_BUILD_DOCS     OFF CACHE BOOL \"\")\n      set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL \"\")\n      set(GLFW_BUILD_TESTS    OFF CACHE BOOL \"\")\n      set(GLFW_INSTALL        OFF CACHE BOOL \"\")\n      set(GLFW_VULKAN_STATIC  OFF CACHE BOOL \"\")\n      # cmake-format: on\n      add_subdirectory(third-party/deps/src/glfw)\n      igl_set_folder(update_mappings \"third-party/GLFW3\")\n    endif()\n    if(UNIX AND NOT APPLE AND NOT ANDROID)\n      find_package(OpenGL REQUIRED)\n    endif()\n    add_subdirectory(third-party/deps/src/bc7enc)\n    igl_set_cxxstd(bc7enc 17)\n    add_subdirectory(third-party/deps/src/meshoptimizer)\n    add_subdirectory(third-party/deps/src/tinyobjloader)\n    igl_set_folder(bc7enc \"third-party\")\n    igl_set_folder(meshoptimizer \"third-party\")\n    igl_set_folder(tinyobjloader \"third-party/tinyobjloader\")\n    igl_set_folder(uninstall \"third-party/tinyobjloader\")\n    if(NOT APPLE AND NOT ANDROID)\n      add_subdirectory(samples/desktop)\n      igl_set_folder(glfw \"third-party/GLFW3\")\n    endif()\n  endif()\nendif()\n\nif (IGL_WITH_VULKAN OR IGL_WITH_IGLU OR IGL_WITH_SAMPLES)\n  add_subdirectory(third-party/deps/src/fmt \"fmt\")\n  igl_set_folder(fmt \"third-party\")\nendif()\n\nif (IGL_WITH_IGLU OR IGL_WITH_SAMPLES)\n  set(KTX_FEATURE_DOC OFF CACHE BOOL \"\")\n\n  if (NOT EMSCRIPTEN)\n    set(KTX_FEATURE_GL_UPLOAD OFF CACHE BOOL \"\")\n  endif()\n\n  set(KTX_FEATURE_JNI OFF CACHE BOOL \"\")\n  set(KTX_FEATURE_KTX1 ON CACHE BOOL \"\")\n  set(KTX_FEATURE_KTX2 ON CACHE BOOL \"\")\n  set(KTX_FEATURE_LOADTEST_APPS OFF CACHE BOOL \"\")\n  set(KTX_FEATURE_STATIC_LIBRARY ON CACHE BOOL \"\")\n  set(KTX_FEATURE_TESTS OFF CACHE BOOL \"\")\n  set(KTX_FEATURE_TOOLS OFF CACHE BOOL \"\")\n  set(KTX_FEATURE_VK_UPLOAD OFF CACHE BOOL \"\")\n  add_subdirectory(third-party/deps/src/ktx-software)\n  if(TARGET astcenc-avx2-static)\n    igl_set_folder(astcenc-avx2-static \"third-party/ktx-software\")\n  endif()\n  igl_set_folder(ktx \"third-party/ktx-software\")\n  igl_set_folder(ktx_read \"third-party/ktx-software\")\n  igl_set_folder(ktx_version \"third-party/ktx-software\")\n  igl_set_folder(obj_basisu_cbind \"third-party/ktx-software\")\n  igl_set_folder(objUtil \"third-party/ktx-software\")\nendif()\n\n\nif(IGL_WITH_TRACY)\n  target_link_libraries(IGLLibrary PUBLIC TracyClient)\nendif()\n\nif(IGL_WITH_OPENXR)\n  target_compile_definitions(IGLLibrary PUBLIC \"IGL_WITH_OPENXR=1\")\n  target_link_libraries(IGLLibrary PUBLIC OpenXR::openxr_loader)\n  target_include_directories(IGLLibrary PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/openxr-sdk/include\")\nendif()\n\nif(IGL_ENABLE_INSTALL)\n  include(cmake/install.cmake)\nendif()\n"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "content": "# Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, we as\ncontributors and maintainers pledge to make participation in our project and\nour community a harassment-free experience for everyone, regardless of age, body\nsize, disability, ethnicity, sex characteristics, gender identity and expression,\nlevel of experience, education, socio-economic status, nationality, personal\nappearance, race, religion, or sexual identity and orientation.\n\n## Our Standards\n\nExamples of behavior that contributes to creating a positive environment\ninclude:\n\n* Using welcoming and inclusive language\n* Being respectful of differing viewpoints and experiences\n* Gracefully accepting constructive criticism\n* Focusing on what is best for the community\n* Showing empathy towards other community members\n\nExamples of unacceptable behavior by participants include:\n\n* The use of sexualized language or imagery and unwelcome sexual attention or\n  advances\n* Trolling, insulting/derogatory comments, and personal or political attacks\n* Public or private harassment\n* Publishing others' private information, such as a physical or electronic\n  address, without explicit permission\n* Other conduct which could reasonably be considered inappropriate in a\n  professional setting\n\n## Our Responsibilities\n\nProject maintainers are responsible for clarifying the standards of acceptable\nbehavior and are expected to take appropriate and fair corrective action in\nresponse to any instances of unacceptable behavior.\n\nProject maintainers have the right and responsibility to remove, edit, or\nreject comments, commits, code, wiki edits, issues, and other contributions\nthat are not aligned to this Code of Conduct, or to ban temporarily or\npermanently any contributor for other behaviors that they deem inappropriate,\nthreatening, offensive, or harmful.\n\n## Scope\n\nThis Code of Conduct applies within all project spaces, and it also applies when\nan individual is representing the project or its community in public spaces.\nExamples of representing a project or community include using an official\nproject e-mail address, posting via an official social media account, or acting\nas an appointed representative at an online or offline event. Representation of\na project may be further defined and clarified by project maintainers.\n\n## Enforcement\n\nInstances of abusive, harassing, or otherwise unacceptable behavior may be\nreported by contacting the project team at <opensource-conduct@fb.com>. All\ncomplaints will be reviewed and investigated and will result in a response that\nis deemed necessary and appropriate to the circumstances. The project team is\nobligated to maintain confidentiality with regard to the reporter of an incident.\nFurther details of specific enforcement policies may be posted separately.\n\nProject maintainers who do not follow or enforce the Code of Conduct in good\nfaith may face temporary or permanent repercussions as determined by other\nmembers of the project's leadership.\n\n## Attribution\n\nThis Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,\navailable at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html\n\n[homepage]: https://www.contributor-covenant.org\n\nFor answers to common questions about this code of conduct, see\nhttps://www.contributor-covenant.org/faq\n\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to IGL\nWe want to make contributing to this project as easy and transparent as\npossible.\n\n## Pull Requests\nWe actively welcome your pull requests. Here's the procedure to submit pull requests to IGL:\n\n1. Submit an issue describing your proposed changes.\n2. The repo owner will respond to your issue.\n3. If your proposed changes are accepted, fork the repo and develop & test your changes.\n4. If you've added code that should be tested, add tests (and ensure they do pass).\n5. Verify your changes work as expected on all relevant rendering backends, and also test them when any combination of backends is disabled using the `IGL_WITH_*` CMake options.\n6. If you've changed APIs, update the documentation.\n7. Make sure your code lints (run `clang-format` or use `.clang-format` in Visual Studio).\n8. If you haven't already, complete the Contributor License Agreement (\"CLA\").\n9. Please respect `// @fb-only` comments and do not delete them!\n10. Open a pull request.\n\n## Dependencies\nOne of our design objectives is that IGL itself should have as few dependencies as possible.\nNo new third-party dependencies will be accepted unless they are absolutely critical to the core functionality of IGL.\n\n## Contributor License Agreement (\"CLA\")\nIn order to accept your pull request, we need you to submit a CLA. You only need\nto do this once to work on any of Facebook's open source projects.\n\nComplete your CLA here: <https://code.facebook.com/cla>\n\n## Issues\nWe use GitHub issues to track public bugs. Please ensure your description is\nclear and has sufficient instructions to be able to reproduce the issue.\n\nFacebook has a [bounty program](https://www.facebook.com/whitehat/) for the safe\ndisclosure of security bugs. In those cases, please go through the process\noutlined on that page and do not file a public issue.\n\n## License\nBy contributing to igl, you agree that your contributions will be licensed\nunder the LICENSE file in the root directory of this source tree.\n"
  },
  {
    "path": "IGLU/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nset(PROJECT_NAME \"IGLU\")\n\nmacro(ADD_IGLU_MODULE module)\n  file(GLOB_RECURSE SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${module}/*.cpp ${module}/*.mm)\n  file(GLOB_RECURSE HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${module}/*.h)\n  if((NOT IGL_WITH_OPENGL) AND (NOT IGL_WITH_OPENGLES))\n    list(REMOVE_ITEM SRC_FILES ${module}/OpenGLTextureAccessor.cpp)\n    list(REMOVE_ITEM HEADER_FILES ${module}/OpenGLTextureAccessor.h)\n  endif()\n  if(NOT IGL_WITH_METAL)\n    list(REMOVE_ITEM SRC_FILES ${module}/MetalTextureAccessor.mm)\n    list(REMOVE_ITEM HEADER_FILES ${module}/MetalTextureAccessor.h)\n  endif()\n  add_library(IGLU${module} ${SRC_FILES} ${HEADER_FILES})\n  igl_set_cxxstd(IGLU${module} 20)\n  igl_set_folder(IGLU${module} \"IGL/${PROJECT_NAME}\")\n  target_link_libraries(IGLU${module} PRIVATE IGLLibrary)\n  target_include_directories(IGLU${module} PUBLIC \"${CMAKE_CURRENT_BINARY_DIR}/include\")\n  target_include_directories(IGLU${module} PUBLIC \"${CMAKE_CURRENT_BINARY_DIR}/include_${module}\")\n  target_include_directories(IGLU${module} PUBLIC \"${IGL_ROOT_DIR}\")\nendmacro()\n\nadd_iglu_module(imgui)\nadd_iglu_module(managedUniformBuffer)\nadd_iglu_module(sentinel)\nadd_iglu_module(simple_renderer)\nadd_iglu_module(state_pool)\nadd_iglu_module(shaderCross)\nadd_iglu_module(texture_accessor)\nadd_iglu_module(texture_loader)\nadd_iglu_module(uniform)\n\n# header-only\nadd_library(IGLUsimdtypes INTERFACE)\ntarget_include_directories(IGLUsimdtypes INTERFACE \"simdtypes\")\n\ntarget_link_libraries(IGLUtexture_loader PRIVATE IGLstb)\ntarget_link_libraries(IGLUtexture_loader PRIVATE ktx)\n\nif(IGL_WITH_SHELL)\n  target_link_libraries(IGLUimgui PRIVATE IGLShellShared)\nelse()\n  target_sources(IGLUimgui PRIVATE \"${IGL_ROOT_DIR}/shell/shared/input/InputDispatcher.cpp\")\nendif()\n\n# ImGui\ntarget_sources(IGLUimgui PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/imgui/imgui.cpp\")\ntarget_sources(IGLUimgui PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/imgui/imgui_demo.cpp\")\ntarget_sources(IGLUimgui PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/imgui/imgui_draw.cpp\")\ntarget_sources(IGLUimgui PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/imgui/imgui_tables.cpp\")\ntarget_sources(IGLUimgui PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/imgui/imgui_widgets.cpp\")\ntarget_include_directories(IGLUimgui PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/imgui\")\ntarget_include_directories(IGLUtexture_accessor PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/glew/include\")\n\nif(UNIX)\n  if (CMAKE_C_COMPILER_ID STREQUAL \"GNU\")\n    target_compile_options(IGLUimgui PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-Wno-volatile>)\n  endif()\nendif()\n\n# SPIRV-Cross\n# cmake-format: off\nset(SPIRV_CROSS_SHARED         OFF CACHE BOOL \"\")\nset(SPIRV_CROSS_STATIC         ON  CACHE BOOL \"\")\nset(SPIRV_CROSS_CLI            OFF CACHE BOOL \"\")\nset(SPIRV_CROSS_ENABLE_TESTS   OFF CACHE BOOL \"\")\nset(SPIRV_CROSS_ENABLE_GLSL    ON  CACHE BOOL \"\")\nset(SPIRV_CROSS_ENABLE_HLSL    OFF CACHE BOOL \"\")\nset(SPIRV_CROSS_ENABLE_MSL     ON  CACHE BOOL \"\")\nset(SPIRV_CROSS_ENABLE_CPP     OFF CACHE BOOL \"\")\nset(SPIRV_CROSS_ENABLE_REFLECT OFF CACHE BOOL \"\")\nset(SPIRV_CROSS_SKIP_INSTALL   ON  CACHE BOOL \"\")\n\nadd_subdirectory(${IGL_ROOT_DIR}/third-party/deps/src/SPIRV-Cross \"SPIRV-Cross\")\n\nigl_set_folder(spirv-cross-core \"third-party/spirv-cross/spirv-cross-core\")\nigl_set_folder(spirv-cross-glsl \"third-party/spirv-cross/spirv-cross-glsl\")\nigl_set_folder(spirv-cross-msl  \"third-party/spirv-cross/spirv-cross-msl\")\nigl_set_folder(spirv-cross-util \"third-party/spirv-cross/spirv-cross-util\")\nigl_set_folder(spirv-cross-c    \"third-party/spirv-cross/spirv-cross-c\")\n# cmake-format: on\n\ntarget_include_directories(IGLUshaderCross PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/SPIRV-Cross\" \"${IGL_ROOT_DIR}/third-party/deps/src/glslang\")\ntarget_link_libraries(IGLUshaderCross PRIVATE IGLGlslang IGLUmanagedUniformBuffer spirv-cross-core spirv-cross-glsl spirv-cross-msl spirv-cross-util spirv-cross-c)\n"
  },
  {
    "path": "IGLU/bitmap/BitmapWriter.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/bitmap/BitmapWriter.h>\n\n#include <IGLU/texture_accessor/TextureAccessorFactory.h>\n#include <ostream>\n#include <igl/Common.h>\n\nnamespace igl::iglu {\nnamespace {\n\n#if defined(_MSC_VER)\n#pragma pack(push, 1)\n#endif\n\nstruct BMPHeader {\n  // Bitmap file header\n  uint16_t signature = 0x4D42; // Signature (\"BM\" in ASCII), default value 0x4D42 for BMP format\n  uint32_t fileSize = 0;\n  uint16_t reserved1 = 0;\n  uint16_t reserved2 = 0;\n  uint32_t dataOffset = sizeof(BMPHeader); // Offset to the start of image data\n\n  // DIB header (Bitmap information header)\n  uint32_t headerSize = 40; // Size of the DIB header\n  int32_t imageWidth = 0;\n  int32_t imageHeight = 0;\n  uint16_t colorPlanes = 1; // Number of color planes\n  uint16_t bitsPerPixel = 24;\n  uint32_t compression = 0; // Compression method (initialized to 0 for no compression)\n  uint32_t imageSizeBytes = 0;\n  int32_t horizontalResolution = 0; // Horizontal resolution in pixels per meter\n  int32_t verticalResolution = 0; // Vertical resolution in pixels per meter\n  uint32_t numColors = 0; // Number of colors in the color palette\n  uint32_t importantColors = 0; // Number of important colors used\n}\n#if defined(__GNUC__) || defined(__clang__)\n__attribute__((packed))\n#endif\n;\n\n#if defined(_MSC_VER)\n#pragma pack(pop)\n#endif\n\nstruct BufferOffsets {\n  size_t r;\n  size_t g;\n  size_t b;\n};\n\nBufferOffsets getBufferOffsets(TextureFormat format) {\n  switch (format) {\n  case igl::TextureFormat::RGBA_UNorm8:\n  case igl::TextureFormat::RGBX_UNorm8:\n  case igl::TextureFormat::RGBA_SRGB: {\n    return {.r = 0, .g = 1, .b = 2};\n  }\n\n  case igl::TextureFormat::BGRA_UNorm8:\n  case igl::TextureFormat::BGRA_SRGB: {\n    return {.r = 2, .g = 1, .b = 0};\n  }\n\n  default:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return {.r = 0, .g = 1, .b = 2};\n  }\n}\n\n} // namespace\n\nbool isSupportedBitmapTextureFormat(TextureFormat format) {\n  switch (format) {\n  case igl::TextureFormat::RGBA_UNorm8:\n  case igl::TextureFormat::RGBX_UNorm8:\n  case igl::TextureFormat::RGBA_SRGB:\n  case igl::TextureFormat::BGRA_UNorm8:\n  case igl::TextureFormat::BGRA_SRGB:\n    return true;\n\n  default:\n    return false;\n  }\n}\n\nvoid writeBitmap(std::ostream& stream,\n                 std::shared_ptr<ITexture> texture,\n                 IDevice& device,\n                 bool flipY) {\n  IGL_DEBUG_ASSERT(texture);\n  IGL_DEBUG_ASSERT(texture->getType() == igl::TextureType::TwoD);\n  IGL_DEBUG_ASSERT(isSupportedBitmapTextureFormat(texture->getFormat()));\n\n  const auto textureAccessor =\n      ::iglu::textureaccessor::TextureAccessorFactory::createTextureAccessor(\n          device.getBackendType(), texture, device);\n\n  const igl::CommandQueueDesc desc{};\n  Result result;\n  const auto commandQueue = device.createCommandQueue(desc, &result);\n  if (!IGL_DEBUG_VERIFY(result.isOk()) || !IGL_DEBUG_VERIFY(commandQueue)) {\n    return;\n  }\n\n  textureAccessor->requestBytes(*commandQueue, nullptr);\n\n  const auto& buffer = textureAccessor->getBytes();\n  const auto size = texture->getSize();\n\n  const TextureRangeDesc textureRange = texture->getFullRange();\n  const auto& properties = texture->getProperties();\n  const uint32_t bytesPerRow = properties.getBytesPerRow(textureRange);\n\n  std::vector<uint8_t> imageData;\n  imageData.reserve(size.width * size.height * 3);\n\n  IGL_DEBUG_ASSERT(buffer.size() == size.height * bytesPerRow);\n\n  const auto bufferOffsets = getBufferOffsets(texture->getFormat());\n\n  for (size_t y = 0; y < size.height; ++y) {\n    const size_t row = flipY ? size.height - y - 1 : y;\n    for (size_t byte = 0; byte < bytesPerRow; byte += 4) {\n      const size_t index = row * bytesPerRow + byte;\n      const uint8_t r = buffer[index + bufferOffsets.r];\n      const uint8_t g = buffer[index + bufferOffsets.g];\n      const uint8_t b = buffer[index + bufferOffsets.b];\n\n      imageData.push_back(b);\n      imageData.push_back(g);\n      imageData.push_back(r);\n    }\n  }\n\n  writeBitmap(stream, static_cast<const uint8_t*>(imageData.data()), size.width, size.height);\n}\n\nvoid writeBitmap(std::ostream& stream, const uint8_t* imageData, uint32_t width, uint32_t height) {\n  const uint32_t imageSize = width * height * 3;\n\n  BMPHeader header{\n      .fileSize = static_cast<uint32_t>(sizeof(BMPHeader) + imageSize),\n      .imageWidth = static_cast<int32_t>(width),\n      .imageHeight = static_cast<int32_t>(height),\n      .imageSizeBytes = static_cast<uint32_t>(imageSize),\n  };\n\n  stream.write(reinterpret_cast<const char*>(&header), sizeof(header));\n  stream.write(reinterpret_cast<const char*>(imageData), imageSize);\n}\n\n} // namespace igl::iglu\n"
  },
  {
    "path": "IGLU/bitmap/BitmapWriter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <igl/IGL.h>\n\nnamespace igl::iglu {\n\n// Check if a texture format is supported by the bitmap writer\nbool isSupportedBitmapTextureFormat(TextureFormat format);\n\n// Write the contents of a texture to a bitmap file\nvoid writeBitmap(std::ostream& stream,\n                 std::shared_ptr<ITexture> texture,\n                 IDevice& device,\n                 bool flipY = false);\n\nvoid writeBitmap(std::ostream& stream, const uint8_t* imageData, uint32_t width, uint32_t height);\n\n} // namespace igl::iglu\n"
  },
  {
    "path": "IGLU/command_buffer_allocator/ICommandBufferAllocator.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/command_buffer_allocator/ICommandBufferAllocator.h>\n\n#include <igl/CommandBuffer.h>\n\nnamespace iglu::command_buffer_allocator {\nICommandBufferAllocator::CommandBufferScope::CommandBufferScope(\n    ICommandBufferAllocator& allocator,\n    igl::ICommandBuffer& commandBuffer,\n    bool shouldFinalizeCommandBuffer) noexcept :\n  allocator_(allocator),\n  commandBuffer_(commandBuffer),\n  shouldFinalizeCommandBuffer_(shouldFinalizeCommandBuffer) {}\n\nICommandBufferAllocator::CommandBufferScope::~CommandBufferScope() noexcept {\n  if (shouldFinalizeCommandBuffer_) {\n    allocator_.finalizeCommandBuffer();\n  }\n}\n\nigl::ICommandBuffer& ICommandBufferAllocator::CommandBufferScope::commandBuffer() noexcept {\n  return commandBuffer_;\n}\n\nconst igl::ICommandBuffer& ICommandBufferAllocator::CommandBufferScope::commandBuffer()\n    const noexcept {\n  return commandBuffer_;\n}\n\n} // namespace iglu::command_buffer_allocator\n"
  },
  {
    "path": "IGLU/command_buffer_allocator/ICommandBufferAllocator.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandBuffer.h>\n\nnamespace iglu::command_buffer_allocator {\n\n/**\n * ICommandBuffer Allocator is am interface to allocate Command Buffers and submit them all at once.\n */\nclass ICommandBufferAllocator {\n public:\n  ICommandBufferAllocator() = default;\n  virtual ~ICommandBufferAllocator() = default;\n\n  struct CommandBufferScopeConfig {\n    bool present = false;\n    std::shared_ptr<igl::ITexture> presentTexture = nullptr;\n    bool waitUntilScheduled = false;\n    bool waitUntilCompleted = false;\n    std::string debugName = \"<unknown>\";\n  };\n\n  struct CommandBufferScope {\n   public:\n    ~CommandBufferScope() noexcept;\n\n    static void* operator new(size_t) = delete; // stack allocation only\n\n    [[nodiscard]] igl::ICommandBuffer& commandBuffer() noexcept;\n    [[nodiscard]] const igl::ICommandBuffer& commandBuffer() const noexcept;\n\n   private:\n    friend class ICommandBufferAllocator;\n    CommandBufferScope(ICommandBufferAllocator& allocator,\n                       igl::ICommandBuffer& commandBuffer,\n                       bool shouldFinalizeCommandBuffer) noexcept;\n\n    ICommandBufferAllocator& allocator_;\n    igl::ICommandBuffer& commandBuffer_;\n    bool shouldFinalizeCommandBuffer_ = false;\n  };\n  virtual void createCommandBuffer(const std::string& debugName) noexcept = 0;\n  [[nodiscard]] virtual CommandBufferScope commandBufferScope() noexcept = 0;\n  [[nodiscard]] virtual CommandBufferScope commandBufferScope(\n      ICommandBufferAllocator& allocator,\n      igl::ICommandBuffer& commandBuffer,\n      bool shouldFinalizeCommandBuffer) noexcept {\n    return {allocator, commandBuffer, shouldFinalizeCommandBuffer};\n  }\n  [[nodiscard]] virtual CommandBufferScope commandBufferScope(\n      CommandBufferScopeConfig config) noexcept = 0;\n  virtual void finalizeCommandBuffer() noexcept = 0;\n};\n\n} // namespace iglu::command_buffer_allocator\n"
  },
  {
    "path": "IGLU/imgui/InputListener.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include \"InputListener.h\"\n\n#include \"KeyCodeTranslator.h\"\n// ImGui has a very awkward expectation when it comes to processing inputs and making decisions\n// based on them. This is what it expects clients to do, in order, every frame:\n// 1. Send ImGui all events via the input parameters in ImGuiIO.\n// 2. Call ImGui::NewFrame -- that's when events are processed.\n// 3. Read the output parameters of ImGuiIO to know which events it wants to capture.\n// 4. Forward uncaptured events to other systems.\n//\n// This is an awkward expectation and we currently don't follow it. Instead, we process events\n// before calling ImGui::NewFrame and immediately check whether ImGui wants to capture events, which\n// is one frame old. This can be a source of problems if we have multiple input listeners and\n// depending on how they process inputs.\n\nnamespace iglu::imgui {\n\nInputListener::InputListener(ImGuiContext* context) {\n  context_ = context;\n}\n\nbool InputListener::process(const igl::shell::MouseButtonEvent& event) {\n  makeCurrentContext();\n\n  ImGuiIO& io = ImGui::GetIO();\n  io.MousePos = ImVec2(event.x, event.y);\n  io.MouseDown[event.button] = event.isDown;\n  return io.WantCaptureMouse;\n}\n\nbool InputListener::process(const igl::shell::MouseMotionEvent& event) {\n  makeCurrentContext();\n\n  ImGuiIO& io = ImGui::GetIO();\n  io.MousePos = ImVec2(event.x, event.y);\n  return io.WantCaptureMouse;\n}\n\nbool InputListener::process(const igl::shell::MouseWheelEvent& event) {\n  makeCurrentContext();\n\n  ImGuiIO& io = ImGui::GetIO();\n  io.MouseWheelH = event.dx;\n  io.MouseWheel = event.dy;\n  return io.WantCaptureMouse;\n}\n\nbool InputListener::process(const igl::shell::TouchEvent& event) {\n  makeCurrentContext();\n\n  ImGuiIO& io = ImGui::GetIO();\n  io.MousePos = ImVec2(event.x, event.y);\n  io.MouseDown[0] = event.isDown;\n  return io.WantCaptureMouse;\n}\n\nvoid InputListener::makeCurrentContext() const {\n  ImGui::SetCurrentContext(context_);\n}\n\nbool InputListener::process(const igl::shell::KeyEvent& event) {\n  makeCurrentContext();\n\n  ImGuiIO& io = ImGui::GetIO();\n  ImGuiKey key = keyFromShellKeyEvent(event);\n  if (key != ImGuiKey_None) {\n    io.AddKeyEvent(key, event.isDown);\n  }\n  return io.WantCaptureKeyboard;\n}\n\nbool InputListener::process(const igl::shell::CharEvent& event) {\n  makeCurrentContext();\n\n  ImGuiIO& io = ImGui::GetIO();\n  io.AddInputCharacter(event.character);\n  return io.WantTextInput;\n}\n\n} // namespace iglu::imgui\n"
  },
  {
    "path": "IGLU/imgui/InputListener.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include \"imgui.h\"\n\n#include <shell/shared/input/InputDispatcher.h> // IWYU pragma: export\n#include <shell/shared/input/KeyListener.h>\n#include <shell/shared/input/MouseListener.h>\n\nnamespace iglu::imgui {\n\nclass InputListener : public igl::shell::IMouseListener,\n                      public igl::shell::ITouchListener,\n                      public igl::shell::IKeyListener {\n public:\n  explicit InputListener(ImGuiContext* context);\n  ~InputListener() override = default;\n\n protected:\n  bool process(const igl::shell::MouseButtonEvent& event) override;\n  bool process(const igl::shell::MouseMotionEvent& event) override;\n  bool process(const igl::shell::MouseWheelEvent& event) override;\n  bool process(const igl::shell::TouchEvent& event) override;\n  bool process(const igl::shell::KeyEvent& event) override;\n  bool process(const igl::shell::CharEvent& event) override;\n\n private:\n  ImGuiContext* context_;\n\n  void makeCurrentContext() const;\n};\n\n} // namespace iglu::imgui\n"
  },
  {
    "path": "IGLU/imgui/KeyCodeTranslator.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include \"KeyCodeTranslator.h\"\n\n#include <igl/Config.h>\n\n#if IGL_PLATFORM_APPLE\nnamespace {\nenum KeyModifiers {\n  kVK_Return = 0x24,\n  kVK_Tab = 0x30,\n  kVK_Delete = 0x33,\n  kVK_Escape = 0x35,\n  kVK_Shift = 0x38,\n  kVK_Option = 0x3A,\n  kVK_Control = 0x3B,\n  kVK_RightArrow = 0x7C,\n  kVK_LeftArrow = 0x7B,\n  kVK_DownArrow = 0x7D,\n  kVK_UpArrow = 0x7E,\n  kVK_ForwardDelete = 0x75,\n  kVK_Home = 0x73,\n  kVK_End = 0x77,\n  kVK_PageUp = 0x74,\n  kVK_PageDown = 0x79,\n};\n\n[[maybe_unused]] ImGuiKey keyFromShellKeyEventApple(igl::shell::KeyEvent event) {\n  int keyCode = event.key;\n\n  switch (keyCode) {\n  case kVK_Return:\n    return ImGuiKey_Enter;\n  case kVK_Tab:\n    return ImGuiKey_Tab;\n  case kVK_Delete:\n    return ImGuiKey_Backspace;\n  case kVK_ForwardDelete:\n    return ImGuiKey_Delete;\n  case kVK_Escape:\n    return ImGuiKey_Escape;\n  case kVK_Shift:\n    return ImGuiKey_LeftShift;\n  case kVK_Option:\n    return ImGuiKey_LeftAlt;\n  case kVK_Control:\n    return ImGuiKey_LeftCtrl;\n  case kVK_LeftArrow:\n    return ImGuiKey_LeftArrow;\n  case kVK_RightArrow:\n    return ImGuiKey_RightArrow;\n  case kVK_UpArrow:\n    return ImGuiKey_UpArrow;\n  case kVK_DownArrow:\n    return ImGuiKey_DownArrow;\n  case kVK_Home:\n    return ImGuiKey_Home;\n  case kVK_End:\n    return ImGuiKey_End;\n  case kVK_PageUp:\n    return ImGuiKey_PageUp;\n  case kVK_PageDown:\n    return ImGuiKey_PageDown;\n  default:\n    return ImGuiKey_None;\n  }\n}\n} // namespace\n#endif\n\nnamespace iglu::imgui {\nImGuiKey keyFromShellKeyEvent(igl::shell::KeyEvent event) {\n#if IGL_PLATFORM_APPLE\n  return keyFromShellKeyEventApple(event);\n#else\n  // For non-Apple platforms, return ImGuiKey_None for unmapped keys\n  // to avoid passing invalid key codes to ImGui\n  return ImGuiKey_None;\n#endif\n}\n} // namespace iglu::imgui\n"
  },
  {
    "path": "IGLU/imgui/KeyCodeTranslator.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include \"imgui.h\"\n\n#include <shell/shared/input/KeyListener.h>\n\nnamespace iglu::imgui {\nImGuiKey keyFromShellKeyEvent(igl::shell::KeyEvent event);\n} // namespace iglu::imgui\n"
  },
  {
    "path": "IGLU/imgui/Session.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include \"Session.h\"\n\n#include <IGLU/simple_renderer/Drawable.h>\n#include <IGLU/simple_renderer/Material.h>\n#include <igl/ShaderCreator.h>\n\n// D3D12 FXC precompiled shaders\n#include \"imgui_ps_d3d12_fxc.h\"\n#include \"imgui_vs_d3d12_fxc.h\"\n\nnamespace iglu::imgui {\n\n/* internal renderer -- based on imgui_impl_metal.mm */\n\n#define PLAIN_SHADER_STRINGIFY(...) #__VA_ARGS__\n#define PLAIN_SHADER(...) PLAIN_SHADER_STRINGIFY(__VA_ARGS__)\n\nstatic const char* metalShaderStr() {\n  return PLAIN_SHADER(\n      using namespace metal;\n\n      struct Uniforms { float4x4 projectionMatrix; };\n\n      struct VertexIn {\n        float2 position [[attribute(0)]];\n        float2 texCoords [[attribute(1)]];\n        float4 color [[attribute(2)]];\n      };\n\n      struct VertexOut {\n        float4 position [[position]];\n        float2 texCoords;\n        float4 color;\n      };\n\n      vertex VertexOut vertex_main(VertexIn in [[stage_in]],\n                                   constant Uniforms & uniforms [[buffer(1)]]) {\n        VertexOut out;\n        out.position = uniforms.projectionMatrix * float4(in.position, 0, 1);\n        out.texCoords = in.texCoords;\n        out.color = in.color;\n        return out;\n      }\n\n      fragment half4 fragment_main(VertexOut in [[stage_in]],\n                                   texture2d<half, access::sample> texture [[texture(0)]]) {\n        constexpr sampler linearSampler(\n            coord::normalized, min_filter::linear, mag_filter::linear, mip_filter::linear);\n        half4 texColor = texture.sample(linearSampler, in.texCoords);\n        return half4(in.color) * texColor;\n      }\n\n  );\n}\n\nstatic std::string getOpenGLVertexShaderSource(igl::ShaderVersion shaderVersion) {\n  std::string shader;\n  if (shaderVersion.majorVersion > 1 || shaderVersion.minorVersion > 30 ||\n      shaderVersion.family == igl::ShaderFamily::GlslEs) {\n#if IGL_PLATFORM_MACOSX\n    shader += \"#version 100\\n\";\n#endif\n    shader += \"precision mediump float;\";\n  }\n  shader += PLAIN_SHADER(attribute vec2 position; attribute vec2 texCoords; attribute vec4 color;\n                         uniform mat4 projectionMatrix;\n                         varying vec2 Frag_UV;\n                         varying vec4 Frag_Color;\n                         void main() {\n                           Frag_UV = texCoords;\n                           Frag_Color = color;\n                           gl_Position = projectionMatrix * vec4(position.xy, 0, 1);\n                         });\n\n  return shader;\n}\nstatic const char* getVulkanVertexShaderSource() {\n  return R\"(\nlayout(location = 0) in vec2 position;\nlayout(location = 1) in vec2 texCoords;\nlayout(location = 2) in vec4 col;\n\nlayout (location = 0) out vec4 color;\nlayout (location = 1) out vec2 uv;\n\nlayout(push_constant) uniform PushConstants {\n    mat4 proj;\n} pc;\n\nout gl_PerVertex { vec4 gl_Position; };\n\nvoid main() {\n    color = col;\n    uv = texCoords;\n    gl_Position = pc.proj * vec4(position.xy, 0, 1);\n})\";\n}\n\nstatic std::string getOpenGLFragmentShaderSource(igl::ShaderVersion shaderVersion) {\n  std::string shader;\n  if (shaderVersion.majorVersion > 1 || shaderVersion.minorVersion > 30 ||\n      shaderVersion.family == igl::ShaderFamily::GlslEs) {\n#if IGL_PLATFORM_MACOSX\n    shader += \"#version 100\\n\";\n#endif\n    shader += \"precision mediump float;\";\n  }\n  shader +=\n      PLAIN_SHADER(uniform sampler2D texture; varying vec2 Frag_UV; varying vec4 Frag_Color;\n                   void main() { gl_FragColor = Frag_Color * texture2D(texture, Frag_UV.st); });\n  return shader;\n}\nstatic const char* getVulkanFragmentShaderSource() {\n  return R\"(\nlayout(location = 0) out vec4 fColor;\nlayout(location = 0) in vec4 color;\nlayout(location = 1) in vec2 uv;\n\nlayout (set = 0, binding = 0) uniform sampler2D uTex;\n\nvoid main() {\n  fColor = color * texture(uTex, uv);\n})\";\n}\n\n// Note: D3D12 shader source functions are kept for reference but not used.\n// The D3D12 backend uses pre-compiled binary shaders.\n#if IGL_PLATFORM_WINDOWS\nstatic const char* getD3D12VertexShaderSource() {\n  return R\"(\ncbuffer Uniforms : register(b0) {\n  float4x4 projectionMatrix;\n};\n\nstruct VSInput {\n  float2 position : POSITION;\n  float2 uv : TEXCOORD0;\n  float4 color : COLOR;\n};\n\nstruct PSInput {\n  float4 position : SV_Position;\n  float4 color : COLOR;\n  float2 uv : TEXCOORD0;\n};\n\nPSInput main(VSInput input) {\n  PSInput output;\n  // Column-major multiplication to match the CPU-side matrix format\n  // In HLSL: mul(vector, matrix) treats matrix as column-major\n  output.position = mul(float4(input.position.xy, 0, 1), projectionMatrix);\n  output.color = input.color;\n  output.uv = input.uv;\n  return output;\n})\";\n}\n\nstatic const char* getD3D12FragmentShaderSource() {\n  return R\"(\nstruct PSInput {\n  float4 position : SV_Position;\n  float4 color : COLOR;\n  float2 uv : TEXCOORD0;\n};\n\nTexture2D tex : register(t0);\nSamplerState uSampler : register(s0);\n\nfloat4 main(PSInput input) : SV_Target {\n  return input.color * tex.Sample(uSampler, input.uv);\n})\";\n}\n#endif\n\nstatic std::unique_ptr<igl::IShaderStages> getShaderStagesForBackend(igl::IDevice& device) {\n  igl::Result result;\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan: {\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource(),\n                                                           \"main\",\n                                                           \"Shader Module: imgui::vertex\",\n                                                           getVulkanFragmentShaderSource(),\n                                                           \"main\",\n                                                           \"Shader Module: imgui::fragment\",\n                                                           &result);\n  }\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ABORT(\"IGLSamples not set up for Custom\");\n    return nullptr;\n  case igl::BackendType::Metal: {\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, metalShaderStr(), \"vertex_main\", \"fragment_main\", \"\", &result);\n  }\n  case igl::BackendType::OpenGL: {\n    auto shaderVersion = device.getShaderVersion();\n    const std::string vertexStr = getOpenGLVertexShaderSource(shaderVersion);\n    const std::string fragmentStr = getOpenGLFragmentShaderSource(shaderVersion);\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, vertexStr.c_str(), \"main\", \"\", fragmentStr.c_str(), \"main\", \"\", &result);\n  }\n  case igl::BackendType::D3D12: {\n    return igl::ShaderStagesCreator::fromModuleBinaryInput(device,\n                                                           _tmp_imgui_vs_fxc_cso,\n                                                           _tmp_imgui_vs_fxc_cso_len,\n                                                           \"main\",\n                                                           \"Shader Module: imgui::vertex (D3D12)\",\n                                                           _tmp_imgui_ps_fxc_cso,\n                                                           _tmp_imgui_ps_fxc_cso_len,\n                                                           \"main\",\n                                                           \"Shader Module: imgui::fragment (D3D12)\",\n                                                           &result);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\nnamespace {\nstruct DrawableData {\n  std::shared_ptr<iglu::vertexdata::VertexData> vertexData;\n  std::shared_ptr<iglu::drawable::Drawable> drawable;\n\n  DrawableData(igl::IDevice& device,\n               const std::shared_ptr<igl::IVertexInputState>& inputState,\n               const std::shared_ptr<iglu::material::Material>& material) {\n    IGL_DEBUG_ASSERT(sizeof(ImDrawIdx) == 2,\n                     \"The constants below may not work with the ImGui data.\");\n    const size_t kMaxVertices = (1l << 16);\n    const size_t kMaxVertexBufferSize = kMaxVertices * sizeof(ImDrawVert);\n    const size_t kMaxIndexBufferSize = kMaxVertices * sizeof(ImDrawIdx);\n\n    const igl::BufferDesc vbDesc{.type = igl::BufferDesc::BufferTypeBits::Vertex,\n                                 .data = nullptr,\n                                 .length = kMaxVertexBufferSize,\n                                 .storage = igl::ResourceStorage::Shared,\n                                 .hint = 0,\n                                 .debugName = \"vertex (\" + material->name + \")\"};\n    const igl::BufferDesc ibDesc{.type = igl::BufferDesc::BufferTypeBits::Index,\n                                 .data = nullptr,\n                                 .length = kMaxIndexBufferSize,\n                                 .storage = igl::ResourceStorage::Shared,\n                                 .hint = 0,\n                                 .debugName = \"index (\" + material->name + \")\"};\n\n    iglu::vertexdata::PrimitiveDesc primitiveDesc;\n    primitiveDesc.numEntries = 0;\n\n    vertexData = std::make_shared<iglu::vertexdata::VertexData>(\n        inputState,\n        device.createBuffer(vbDesc, nullptr),\n        device.createBuffer(ibDesc, nullptr),\n        sizeof(ImDrawIdx) == sizeof(uint16_t) ? igl::IndexFormat::UInt16 : igl::IndexFormat::UInt32,\n        primitiveDesc);\n\n    drawable = std::make_shared<iglu::drawable::Drawable>(vertexData, material);\n  }\n};\n} // namespace\n\nclass Session::Renderer {\n public:\n  explicit Renderer(igl::IDevice& device);\n  ~Renderer();\n  Renderer(const Renderer&) = delete;\n  Renderer& operator=(const Renderer&) = delete;\n  Renderer(Renderer&&) = delete;\n  Renderer& operator=(Renderer&&) = delete;\n\n  void newFrame(const igl::FramebufferDesc& desc);\n  void renderDrawData(igl::IDevice& device,\n                      igl::IRenderCommandEncoder& cmdEncoder,\n                      ImDrawData* drawData);\n\n  bool dumpRenderDrawDataInfo{false};\n\n private:\n  std::shared_ptr<igl::IVertexInputState> vertexInputState_;\n  std::shared_ptr<iglu::material::Material> material_;\n  std::vector<DrawableData> drawables_[3]; // list of drawables to be reused every 3 frames\n  size_t nextBufferingIndex_ = 0;\n\n  igl::RenderPipelineDesc renderPipelineDesc_;\n  std::shared_ptr<igl::ITexture> fontTexture_;\n  std::shared_ptr<igl::ISamplerState> linearSampler_;\n};\n\nSession::Renderer::Renderer(igl::IDevice& device) {\n  ImGuiIO& io = ImGui::GetIO();\n  io.BackendRendererName = \"imgui_impl_igl\";\n\n  linearSampler_ = device.createSamplerState(igl::SamplerStateDesc::newLinear(), nullptr);\n\n  { // init fonts\n    unsigned char* pixels = nullptr;\n    int width = 0, height = 0;\n    io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);\n    igl::TextureDesc desc = igl::TextureDesc::new2D(igl::TextureFormat::RGBA_UNorm8,\n                                                    width,\n                                                    height,\n                                                    igl::TextureDesc::TextureUsageBits::Sampled);\n    desc.debugName = \"IGLU/imgui/Session.cpp:Session::Renderer::_fontTexture\";\n    fontTexture_ = device.createTexture(desc, nullptr);\n    fontTexture_->upload(igl::TextureRangeDesc::new2D(0, 0, width, height), pixels);\n\n    io.Fonts->TexID = reinterpret_cast<ImTextureID>(fontTexture_.get());\n  }\n\n  {\n    igl::VertexInputStateDesc inputDesc;\n    inputDesc.numAttributes = 3;\n    inputDesc.attributes[0] = igl::VertexAttribute{\n        .bufferIndex = 0,\n        .format = igl::VertexAttributeFormat::Float2,\n        .offset = offsetof(ImDrawVert, pos),\n        .name = \"position\",\n        .location = 0,\n    };\n    inputDesc.attributes[1] = igl::VertexAttribute{\n        .bufferIndex = 0,\n        .format = igl::VertexAttributeFormat::Float2,\n        .offset = offsetof(ImDrawVert, uv),\n        .name = \"texCoords\",\n        .location = 1,\n    };\n    inputDesc.attributes[2] = igl::VertexAttribute{\n        .bufferIndex = 0,\n        .format = igl::VertexAttributeFormat::UByte4Norm,\n        .offset = offsetof(ImDrawVert, col),\n        .name = \"color\",\n        .location = 2,\n    };\n    inputDesc.numInputBindings = 1;\n    inputDesc.inputBindings[0].stride = sizeof(ImDrawVert);\n    vertexInputState_ = device.createVertexInputState(inputDesc, nullptr);\n  }\n\n  {\n    auto stages = getShaderStagesForBackend(device);\n    auto program = std::make_shared<iglu::material::ShaderProgram>(\n        device, std::move(stages), vertexInputState_);\n\n    material_ = std::make_shared<iglu::material::Material>(device, \"imgui\");\n    material_->setShaderProgram(device, program);\n    material_->cullMode = igl::CullMode::Disabled;\n    material_->blendMode = iglu::material::BlendMode::Translucent();\n\n    // @fb-only\n    // D3D12 and Vulkan use direct slot binding, OpenGL/Metal use named binding\n    const bool usesDirectBinding = (device.getBackendType() == igl::BackendType::Vulkan ||\n                                    device.getBackendType() == igl::BackendType::D3D12);\n    if (!usesDirectBinding) {\n      material_->shaderUniforms().setTexture(\"texture\", fontTexture_.get(), linearSampler_);\n    }\n  }\n}\n\nSession::Renderer::~Renderer() {\n  const ImGuiIO& io = ImGui::GetIO();\n  fontTexture_ = nullptr;\n  io.Fonts->TexID = 0;\n}\n\nvoid Session::Renderer::newFrame(const igl::FramebufferDesc& desc) {\n  IGL_DEBUG_ASSERT(desc.colorAttachments[0].texture);\n  renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n  renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n      desc.colorAttachments[0].texture->getFormat();\n  renderPipelineDesc_.targetDesc.depthAttachmentFormat =\n      desc.depthAttachment.texture ? desc.depthAttachment.texture->getFormat()\n                                   : igl::TextureFormat::Invalid;\n  renderPipelineDesc_.targetDesc.stencilAttachmentFormat =\n      desc.stencilAttachment.texture ? desc.stencilAttachment.texture->getFormat()\n                                     : igl::TextureFormat::Invalid;\n  renderPipelineDesc_.sampleCount = desc.colorAttachments[0].texture->getSamples();\n}\n\nvoid Session::Renderer::renderDrawData(igl::IDevice& device,\n                                       igl::IRenderCommandEncoder& cmdEncoder,\n                                       ImDrawData* drawData) {\n  // Avoid rendering when minimized, scale coordinates for retina displays (screen coordinates !=\n  // framebuffer coordinates)\n  const int fbWidth = (int)(drawData->DisplaySize.x * drawData->FramebufferScale.x);\n  const int fbHeight = (int)(drawData->DisplaySize.y * drawData->FramebufferScale.y);\n\n  if (dumpRenderDrawDataInfo) {\n    // throttle or turn off due to swamping other messages\n    IGL_LOG_INFO(\n        \"ImGui renderDrawData: DisplaySize=(%.1f,%.1f), FramebufferScale=(%.1f,%.1f), fb=(%d,%d), \"\n        \"CmdLists=%d, TotalVtx=%d, TotalIdx=%d\\n\",\n        drawData->DisplaySize.x,\n        drawData->DisplaySize.y,\n        drawData->FramebufferScale.x,\n        drawData->FramebufferScale.y,\n        fbWidth,\n        fbHeight,\n        drawData->CmdListsCount,\n        drawData->TotalVtxCount,\n        drawData->TotalIdxCount);\n  }\n\n  if (fbWidth <= 0 || fbHeight <= 0 || drawData->CmdListsCount == 0) {\n    IGL_LOG_INFO(\"ImGui renderDrawData: Early return (invalid dimensions or no command lists)\\n\");\n    return;\n  }\n\n  cmdEncoder.pushDebugGroupLabel(\"ImGui Rendering\", igl::Color(0, 1, 0));\n\n  const igl::Viewport viewport = {\n      /*.x = */ .x = 0.0,\n      /*.y = */ .y = 0.0,\n      /*.width = */ .width = (drawData->DisplaySize.x * drawData->FramebufferScale.x),\n      /*.height = */ .height = (drawData->DisplaySize.y * drawData->FramebufferScale.y),\n  };\n  cmdEncoder.bindViewport(viewport);\n\n  using namespace iglu::simdtypes;\n  float4x4 orthoProjection{};\n\n  { // setup projection matrix\n    const float l = drawData->DisplayPos.x;\n    const float r = drawData->DisplayPos.x + drawData->DisplaySize.x;\n    const float t = drawData->DisplayPos.y;\n    const float b = drawData->DisplayPos.y + drawData->DisplaySize.y;\n    orthoProjection.columns[0] = float4{2.0f / (r - l), 0.0f, 0.0f, 0.0f};\n    orthoProjection.columns[1] = float4{0.0f, 2.0f / (t - b), 0.0f, 0.0f};\n    orthoProjection.columns[2] = float4{0.0f, 0.0f, -1.0f, 0.0f};\n    orthoProjection.columns[3] = float4{(r + l) / (l - r), (t + b) / (b - t), 0.0f, 1.0f};\n    // D3D12 and Vulkan use direct slot binding, OpenGL/Metal use named binding\n    const bool usesDirectBinding = (device.getBackendType() == igl::BackendType::Vulkan ||\n                                    device.getBackendType() == igl::BackendType::D3D12);\n    if (!usesDirectBinding) {\n      material_->shaderUniforms().setFloat4x4(igl::genNameHandle(\"projectionMatrix\"),\n                                              orthoProjection);\n    }\n  }\n\n  const ImVec2 clipOff = drawData->DisplayPos; // (0,0) unless using multi-viewports\n  const ImVec2 clipScale =\n      drawData->FramebufferScale; // (1,1) unless using retina display which are often (2,2)\n\n  // Since vertex buffers are updated every frame, we must use triple buffering for Metal to work\n  std::vector<DrawableData>& curFrameDrawables = drawables_[nextBufferingIndex_];\n  nextBufferingIndex_ = (nextBufferingIndex_ + 1) % 3;\n\n  const bool isOpenGL = device.getBackendType() == igl::BackendType::OpenGL;\n  const bool isVulkan = device.getBackendType() == igl::BackendType::Vulkan;\n  const bool isD3D12 = device.getBackendType() == igl::BackendType::D3D12;\n  const bool usesDirectBinding = isVulkan || isD3D12;\n\n  ImTextureID lastBoundTextureId = 0;\n\n  for (int n = 0; n < drawData->CmdListsCount; n++) {\n    const ImDrawList* cmdList = drawData->CmdLists[n];\n\n    if (n >= curFrameDrawables.size()) {\n      curFrameDrawables.emplace_back(device, vertexInputState_, material_);\n    }\n    const DrawableData& drawableData = curFrameDrawables[n];\n\n    // Upload vertex/index buffers\n    drawableData.vertexData->vertexBuffer().upload(\n        cmdList->VtxBuffer.Data, {cmdList->VtxBuffer.Size * sizeof(ImDrawVert), 0});\n    drawableData.vertexData->indexBuffer().upload(cmdList->IdxBuffer.Data,\n                                                  {cmdList->IdxBuffer.Size * sizeof(ImDrawIdx), 0});\n\n    for (int cmdI = 0; cmdI < cmdList->CmdBuffer.Size; cmdI++) {\n      const ImDrawCmd cmd = cmdList->CmdBuffer[cmdI];\n      IGL_DEBUG_ASSERT(cmd.UserCallback == nullptr);\n\n      const ImVec2 clipMin((cmd.ClipRect.x - clipOff.x) * clipScale.x,\n                           (cmd.ClipRect.y - clipOff.y) * clipScale.y);\n      const ImVec2 clipMax((cmd.ClipRect.z - clipOff.x) * clipScale.x,\n                           (cmd.ClipRect.w - clipOff.y) * clipScale.y);\n\n      if (clipMax.x <= clipMin.x || clipMax.y <= clipMin.y) {\n        continue;\n      }\n\n      // OpenGL Y-axis goes up (Vulkan and Metal are good)\n      // https://www.saschawillems.de/blog/2019/03/29/flipping-the-vulkan-viewport/\n      const igl::ScissorRect rect{.x = uint32_t(clipMin.x),\n                                  .y = isOpenGL ? uint32_t(viewport.height - clipMax.y)\n                                                : uint32_t(clipMin.y),\n                                  .width = uint32_t(clipMax.x - clipMin.x),\n                                  .height = uint32_t(clipMax.y - clipMin.y)};\n      cmdEncoder.bindScissorRect(rect);\n\n      if (cmd.TextureId != lastBoundTextureId) {\n        lastBoundTextureId = cmd.TextureId;\n        auto* tex = reinterpret_cast<igl::ITexture*>((ImTextureID)(intptr_t)cmd.TextureId);\n        if (usesDirectBinding) {\n          // D3D12 and Vulkan use direct slot binding\n          // @fb-only\n          // Add Vulkan support for texture reflection info in ShaderUniforms so we don't need to\n          // bind the texture directly\n          cmdEncoder.bindTexture(0, igl::BindTarget::kFragment, tex);\n          cmdEncoder.bindSamplerState(0, igl::BindTarget::kFragment, linearSampler_.get());\n        } else {\n          material_->shaderUniforms().setTexture(\n              \"texture\", tex ? tex : fontTexture_.get(), linearSampler_);\n        }\n      }\n\n      drawableData.vertexData->primitiveDesc().numEntries = cmd.ElemCount;\n      drawableData.vertexData->primitiveDesc().offset = cmd.IdxOffset * sizeof(ImDrawIdx);\n\n      drawableData.drawable->draw(device,\n                                  cmdEncoder,\n                                  renderPipelineDesc_,\n                                  usesDirectBinding ? sizeof(orthoProjection) : 0,\n                                  &orthoProjection);\n    }\n  }\n\n  if (isOpenGL) {\n    // disable scissor\n    cmdEncoder.bindScissorRect(igl::ScissorRect());\n  }\n\n  cmdEncoder.popDebugGroupLabel();\n}\n\n/* public API */\n\nSession::Session(igl::IDevice& device,\n                 igl::shell::InputDispatcher& inputDispatcher,\n                 bool needInitializeSession /* = true */) :\n  inputDispatcher_(inputDispatcher) {\n  context_ = ImGui::CreateContext();\n  makeCurrentContext();\n\n  ImGuiStyle& style = ImGui::GetStyle();\n  style.TouchExtraPadding = ImVec2(5, 5); // adjust to make touches more accurate\n\n  if (needInitializeSession) {\n    initialize(device);\n  }\n}\n\nvoid Session::initialize(igl::IDevice& device) {\n  if (!isInitialized_) {\n    inputListener_ = std::make_shared<InputListener>(context_);\n    renderer_ = std::make_unique<Renderer>(device);\n    inputDispatcher_.addMouseListener(inputListener_);\n    inputDispatcher_.addTouchListener(inputListener_);\n    inputDispatcher_.addKeyListener(inputListener_);\n    isInitialized_ = true;\n  }\n}\n\nSession::~Session() {\n  makeCurrentContext();\n\n  inputDispatcher_.removeTouchListener(inputListener_);\n  inputDispatcher_.removeMouseListener(inputListener_);\n  inputDispatcher_.removeKeyListener(inputListener_);\n  renderer_ = nullptr;\n  inputListener_ = nullptr;\n  ImGui::DestroyContext();\n}\n\nvoid Session::beginFrame(const igl::FramebufferDesc& desc, float displayScale) {\n  makeCurrentContext();\n\n  IGL_DEBUG_ASSERT(desc.colorAttachments[0].texture);\n\n  const igl::Size size = desc.colorAttachments[0].texture->getSize();\n\n  ImGuiIO& io = ImGui::GetIO();\n  io.DisplaySize = ImVec2(size.width / displayScale, size.height / displayScale);\n  io.DisplayFramebufferScale = ImVec2(displayScale, displayScale);\n  io.IniFilename = nullptr;\n\n  renderer_->newFrame(desc);\n  ImGui::NewFrame();\n}\n\nvoid Session::endFrame(igl::IDevice& device, igl::IRenderCommandEncoder& cmdEncoder) {\n  makeCurrentContext();\n\n  ImGui::EndFrame();\n  ImGui::Render();\n  renderer_->renderDrawData(device, cmdEncoder, ImGui::GetDrawData());\n}\n\nvoid Session::makeCurrentContext() const {\n  ImGui::SetCurrentContext(context_);\n}\n\nvoid Session::drawFPS(float fps) const {\n  // a nice FPS counter\n  const ImGuiWindowFlags flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize |\n                                 ImGuiWindowFlags_NoSavedSettings |\n                                 ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav |\n                                 ImGuiWindowFlags_NoMove;\n  const ImGuiViewport* v = ImGui::GetMainViewport();\n  IGL_DEBUG_ASSERT(v);\n  ImGui::SetNextWindowPos(\n      {\n          v->WorkPos.x + v->WorkSize.x - 15.0f,\n          v->WorkPos.y + 15.0f,\n      },\n      ImGuiCond_Always,\n      {1.0f, 0.0f});\n  ImGui::SetNextWindowBgAlpha(0.30f);\n  ImGui::SetNextWindowSize(ImVec2(ImGui::CalcTextSize(\"FPS : _______\").x, 0));\n  if (ImGui::Begin(\"##FPS\", nullptr, flags)) {\n    ImGui::Text(\"FPS : %i\", (int)fps);\n    ImGui::Text(\"Ms  : %.1f\", 1000.0 / fps);\n  }\n  ImGui::End();\n}\n\n} // namespace iglu::imgui\n"
  },
  {
    "path": "IGLU/imgui/Session.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include \"imgui.h\"\n\n#include <IGLU/imgui/InputListener.h>\n#include <memory>\n#include <shell/shared/input/InputDispatcher.h>\n#include <igl/CommandBuffer.h>\n#include <igl/Core.h>\n#include <igl/Device.h>\n#include <igl/Framebuffer.h>\n#include <igl/RenderCommandEncoder.h>\n\nnamespace iglu::imgui {\n\nclass Session {\n public:\n  void beginFrame(const igl::FramebufferDesc& desc, float displayScale);\n  void endFrame(igl::IDevice& device, igl::IRenderCommandEncoder& cmdEncoder);\n\n  Session(igl::IDevice& device,\n          igl::shell::InputDispatcher& inputDispatcher,\n          bool needInitializeSession = true);\n  ~Session();\n\n  void initialize(igl::IDevice& device);\n  void drawFPS(float fps) const;\n\n private:\n  class Renderer;\n\n  igl::shell::InputDispatcher& inputDispatcher_;\n  std::shared_ptr<InputListener> inputListener_;\n  ImGuiContext* context_;\n  std::unique_ptr<Renderer> renderer_;\n  bool isInitialized_ = false;\n\n  void makeCurrentContext() const;\n};\n\n} // namespace iglu::imgui\n"
  },
  {
    "path": "IGLU/imgui/compile_shaders.bat",
    "content": "@REM Copyright (c) Meta Platforms, Inc. and affiliates.\n@REM\n@REM This source code is licensed under the MIT license found in the\n@REM LICENSE file in the root directory of this source tree.\n\n@echo off\nREM Compile D3D12 ImGui shaders\n\nset FXC=\"C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.22621.0\\x64\\fxc.exe\"\n\necho Compiling vertex shader...\n%FXC% /T vs_5_0 /E main /Fo imgui_vs_d3d12_fxc.cso imgui_vs_d3d12.hlsl\nif %ERRORLEVEL% NEQ 0 (\n    echo Vertex shader compilation failed!\n    exit /b 1\n)\n\necho Compiling pixel shader...\n%FXC% /T ps_5_0 /E main /Fo imgui_ps_d3d12_fxc.cso imgui_ps_d3d12.hlsl\nif %ERRORLEVEL% NEQ 0 (\n    echo Pixel shader compilation failed!\n    exit /b 1\n)\n\necho Converting to C header files...\npython -c \"import sys; data = open('imgui_vs_d3d12_fxc.cso', 'rb').read(); print('unsigned char _tmp_imgui_vs_fxc_cso[] = {'); print(', '.join(f'0x{b:02x}' for b in data)); print('};'); print(f'unsigned int _tmp_imgui_vs_fxc_cso_len = {len(data)};')\" > imgui_vs_d3d12_fxc.h\n\npython -c \"import sys; data = open('imgui_ps_d3d12_fxc.cso', 'rb').read(); print('unsigned char _tmp_imgui_ps_fxc_cso[] = {'); print(', '.join(f'0x{b:02x}' for b in data)); print('};'); print(f'unsigned int _tmp_imgui_ps_fxc_cso_len = {len(data)};')\" > imgui_ps_d3d12_fxc.h\n\necho Done!\n"
  },
  {
    "path": "IGLU/imgui/compile_shaders.py",
    "content": "#!/usr/bin/env fbpython\n# Copyright (c) Meta Platforms, Inc. and affiliates.\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\"\"\"Compile D3D12 ImGui shaders\"\"\"\n\nimport os\nimport subprocess\nimport sys\n\nFXC = r\"C:\\Program Files (x86)\\Windows Kits\\10\\bin\\10.0.22621.0\\x64\\fxc.exe\"\n\n\ndef compile_shader(shader_file, profile, output_cso):\n    \"\"\"Compile HLSL shader to CSO\"\"\"\n    print(f\"Compiling {shader_file}...\")\n    cmd = [FXC, \"/T\", profile, \"/E\", \"main\", \"/Fo\", output_cso, shader_file]\n    result = subprocess.run(cmd, capture_output=True, text=True)\n    if result.returncode != 0:\n        print(f\"ERROR: {result.stderr}\")\n        return False\n    print(f\"  SUCCESS: {output_cso}\")\n    return True\n\n\ndef cso_to_header(cso_file, header_file, var_name):\n    \"\"\"Convert CSO binary to C header\"\"\"\n    print(f\"Converting {cso_file} to {header_file}...\")\n    with open(cso_file, \"rb\") as f:\n        data = f.read()\n\n    with open(header_file, \"w\") as f:\n        f.write(f\"unsigned char {var_name}[] = {{\\n\")\n        for i in range(0, len(data), 12):\n            chunk = data[i : i + 12]\n            hex_bytes = \", \".join(f\"0x{b:02x}\" for b in chunk)\n            f.write(f\"  {hex_bytes},\\n\")\n        f.write(\"};\\n\")\n        f.write(f\"unsigned int {var_name}_len = {len(data)};\\n\")\n\n    print(f\"  SUCCESS: {header_file} ({len(data)} bytes)\")\n\n\ndef main():\n    os.chdir(os.path.dirname(os.path.abspath(__file__)))\n\n    # Compile vertex shader\n    if not compile_shader(\"imgui_vs_d3d12.hlsl\", \"vs_5_0\", \"imgui_vs_d3d12_fxc.cso\"):\n        return 1\n\n    # Compile pixel shader\n    if not compile_shader(\"imgui_ps_d3d12.hlsl\", \"ps_5_0\", \"imgui_ps_d3d12_fxc.cso\"):\n        return 1\n\n    # Convert to headers\n    cso_to_header(\n        \"imgui_vs_d3d12_fxc.cso\", \"imgui_vs_d3d12_fxc.h\", \"_tmp_imgui_vs_fxc_cso\"\n    )\n    cso_to_header(\n        \"imgui_ps_d3d12_fxc.cso\", \"imgui_ps_d3d12_fxc.h\", \"_tmp_imgui_ps_fxc_cso\"\n    )\n\n    print(\"\\nAll shaders compiled successfully!\")\n    return 0\n\n\nif __name__ == \"__main__\":\n    sys.exit(main())\n"
  },
  {
    "path": "IGLU/imgui/imgui_ps_d3d12.hlsl",
    "content": "struct PSInput {\n  float4 position : SV_Position;\n  float4 color : COLOR;\n  float2 uv : TEXCOORD0;\n};\n\nTexture2D tex : register(t0);\nSamplerState uSampler : register(s0);\n\nfloat4 main(PSInput input) : SV_Target {\n  return input.color * tex.Sample(uSampler, input.uv);\n}\n"
  },
  {
    "path": "IGLU/imgui/imgui_ps_d3d12_fxc.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\nunsigned char _tmp_imgui_ps_fxc_cso[] = {\n    0x44, 0x58, 0x42, 0x43, 0xc7, 0x1a, 0xe2, 0x1a, 0x98, 0xf2, 0xe6, 0x19, 0xb5, 0xee, 0x27, 0x5c,\n    0x23, 0xba, 0x44, 0xe8, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x02, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,\n    0x34, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x00, 0x98, 0x01, 0x00, 0x00,\n    0x40, 0x02, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0xff,\n    0x00, 0x01, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x52, 0x44, 0x31, 0x31, 0x3c, 0x00, 0x00, 0x00,\n    0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,\n    0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,\n    0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,\n    0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x75, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72,\n    0x00, 0x74, 0x65, 0x78, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x28,\n    0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x43,\n    0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00, 0xab, 0xab, 0xab,\n    0x49, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,\n    0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00,\n    0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,\n    0x02, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74,\n    0x69, 0x6f, 0x6e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f,\n    0x52, 0x44, 0x00, 0xab, 0x4f, 0x53, 0x47, 0x4e, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\n    0x08, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x54,\n    0x61, 0x72, 0x67, 0x65, 0x74, 0x00, 0xab, 0xab, 0x53, 0x48, 0x45, 0x58, 0xa0, 0x00, 0x00, 0x00,\n    0x50, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x6a, 0x08, 0x00, 0x01, 0x5a, 0x00, 0x00, 0x03,\n    0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x18, 0x00, 0x04, 0x00, 0x70, 0x10, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x55, 0x55, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00,\n    0x01, 0x00, 0x00, 0x00, 0x62, 0x10, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00,\n    0x65, 0x00, 0x00, 0x03, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02,\n    0x01, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x8b, 0xc2, 0x00, 0x00, 0x80, 0x43, 0x55, 0x15, 0x00,\n    0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00,\n    0x46, 0x7e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x38, 0x00, 0x00, 0x07, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x46, 0x1e, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01,\n    0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\nunsigned int _tmp_imgui_ps_fxc_cso_len = 732;\n"
  },
  {
    "path": "IGLU/imgui/imgui_vs_d3d12.hlsl",
    "content": "cbuffer PushConstants : register(b2) {\n  float4x4 projectionMatrix;\n};\n\nstruct VSInput {\n  float2 position : POSITION;\n  float2 uv : TEXCOORD0;\n  float4 color : COLOR;\n};\n\nstruct PSInput {\n  float4 position : SV_Position;\n  float4 color : COLOR;\n  float2 uv : TEXCOORD0;\n};\n\nPSInput main(VSInput input) {\n  PSInput output;\n  output.position = mul(projectionMatrix, float4(input.position.xy, 0, 1));\n  output.color = input.color;\n  output.uv = input.uv;\n  return output;\n}\n"
  },
  {
    "path": "IGLU/imgui/imgui_vs_d3d12_fxc.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\nunsigned char _tmp_imgui_vs_fxc_cso[] = {\n    0x44, 0x58, 0x42, 0x43, 0x88, 0x6b, 0x5b, 0xc2, 0xa4, 0x0d, 0x87, 0x32, 0x35, 0x37, 0x7f, 0xab,\n    0x1e, 0xce, 0x0b, 0xbf, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x03, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,\n    0x34, 0x00, 0x00, 0x00, 0x50, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x34, 0x02, 0x00, 0x00,\n    0x40, 0x03, 0x00, 0x00, 0x52, 0x44, 0x45, 0x46, 0x14, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\n    0x6c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x05, 0xfe, 0xff,\n    0x00, 0x01, 0x00, 0x00, 0xec, 0x00, 0x00, 0x00, 0x52, 0x44, 0x31, 0x31, 0x3c, 0x00, 0x00, 0x00,\n    0x18, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00,\n    0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,\n    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, 0x75, 0x73, 0x68, 0x43, 0x6f, 0x6e, 0x73,\n    0x74, 0x61, 0x6e, 0x74, 0x73, 0x00, 0xab, 0xab, 0x5c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\n    0x84, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,\n    0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,\n    0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x69,\n    0x6f, 0x6e, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x00, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x34, 0x78,\n    0x34, 0x00, 0xab, 0xab, 0x03, 0x00, 0x03, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0xbd, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66,\n    0x74, 0x20, 0x28, 0x52, 0x29, 0x20, 0x48, 0x4c, 0x53, 0x4c, 0x20, 0x53, 0x68, 0x61, 0x64, 0x65,\n    0x72, 0x20, 0x43, 0x6f, 0x6d, 0x70, 0x69, 0x6c, 0x65, 0x72, 0x20, 0x31, 0x30, 0x2e, 0x31, 0x00,\n    0x49, 0x53, 0x47, 0x4e, 0x68, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,\n    0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00,\n    0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,\n    0x02, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x00, 0x00, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x49, 0x4f, 0x4e,\n    0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f, 0x52, 0x44, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00,\n    0x4f, 0x53, 0x47, 0x4e, 0x6c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,\n    0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00,\n    0x62, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00,\n    0x02, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x00, 0x00, 0x53, 0x56, 0x5f, 0x50, 0x6f, 0x73, 0x69, 0x74,\n    0x69, 0x6f, 0x6e, 0x00, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x00, 0x54, 0x45, 0x58, 0x43, 0x4f, 0x4f,\n    0x52, 0x44, 0x00, 0xab, 0x53, 0x48, 0x45, 0x58, 0x04, 0x01, 0x00, 0x00, 0x50, 0x00, 0x01, 0x00,\n    0x41, 0x00, 0x00, 0x00, 0x6a, 0x08, 0x00, 0x01, 0x59, 0x00, 0x00, 0x04, 0x46, 0x8e, 0x20, 0x00,\n    0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x03, 0x32, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00,\n    0x5f, 0x00, 0x00, 0x03, 0xf2, 0x10, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x04,\n    0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03,\n    0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x03, 0x32, 0x20, 0x10, 0x00,\n    0x02, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x08,\n    0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x15, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x46, 0x8e, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x0a,\n    0xf2, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x0e, 0x10, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xf2, 0x20, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x46, 0x0e, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0x8e, 0x20, 0x00, 0x02, 0x00, 0x00, 0x00,\n    0x03, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0xf2, 0x20, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00,\n    0x46, 0x1e, 0x10, 0x00, 0x02, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x05, 0x32, 0x20, 0x10, 0x00,\n    0x02, 0x00, 0x00, 0x00, 0x46, 0x10, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x01,\n    0x53, 0x54, 0x41, 0x54, 0x94, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\nunsigned int _tmp_imgui_vs_fxc_cso_len = 988;\n"
  },
  {
    "path": "IGLU/managedUniformBuffer/ManagedUniformBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n\n#include <cstdlib>\n#include <igl/Macros.h>\n\n#if defined(IGL_CMAKE_BUILD)\n#include <igl/IGLSafeC.h>\n#else\n#include <secure_lib/secure_string.h>\n#endif\n\n#if IGL_PLATFORM_APPLE\n#include <unistd.h>\n#if IGL_PLATFORM_IOS_SIMULATOR\n#include <mach/mach_init.h>\n#include <mach/mach_types.h>\n#include <mach/vm_map.h>\n#endif\n#endif\n\nnamespace iglu {\nManagedUniformBuffer::ManagedUniformBuffer(igl::IDevice& device,\n                                           const ManagedUniformBufferInfo& info) :\n  uniformInfo(info) {\n  igl::BufferDesc desc;\n  desc.length = info.length;\n\n  if (!IGL_DEBUG_VERIFY(desc.length != 0)) {\n    result.code = igl::Result::Code::ArgumentInvalid;\n    return;\n  }\n\n  // Currently, the OpenGL code path always uses individual uniforms so no need to allocate a\n  // buffer.\n  bool createBuffer = device.getBackendType() != igl::BackendType::OpenGL;\n  // Allocate memory\n  if (device.getBackendType() == igl::BackendType::Metal) {\n#if IGL_PLATFORM_APPLE\n\n    // Metal must be page aligned\n    auto pageSize = getpagesize();\n\n    length_ = desc.length;\n    const int roundVal = 16;\n    // bindBytes requires specific alignment. Algin to 16b is a safe bet.\n    length_ = ((length_ + roundVal - 1) / roundVal) * roundVal;\n    useBindBytes_ = (length_ < pageSize);\n    if (useBindBytes_) {\n      data_ = malloc(length_);\n      createBuffer = false;\n    } else {\n      auto pagesRequired = desc.length / pageSize;\n      if (desc.length % pageSize != 0) {\n        pagesRequired++;\n      }\n      desc.length = pagesRequired * pageSize;\n\n#if IGL_PLATFORM_IOS_SIMULATOR\n      // The simulator will crash if we use memory created with posix_memalign, so we use this\n      // per what documentation says here\n      // https://developer.apple.com/documentation/metal/gpu_selection_in_macos/selecting_device_objects_for_compute_processing?language=objc#3544751\n      vmAllocLength_ = desc.length;\n      kern_return_t err = vm_allocate(\n          (vm_map_t)mach_task_self(), (vm_address_t*)&data_, vmAllocLength_, VM_FLAGS_ANYWHERE);\n      if (err != KERN_SUCCESS) {\n        data_ = nullptr;\n      }\n#else\n      auto failure = posix_memalign(&data_, pageSize, desc.length);\n      if (failure) {\n        data_ = nullptr;\n      }\n#endif\n    }\n\n#endif\n  } else {\n    data_ = malloc(desc.length);\n  }\n  if (data_ == nullptr) {\n    result.code = igl::Result::Code::RuntimeError;\n    return;\n  }\n  if (createBuffer) {\n    desc.data = data_;\n    desc.type = igl::BufferDesc::BufferTypeBits::Uniform;\n    desc.storage = igl::ResourceStorage::Shared;\n\n    if (device.hasFeature(igl::DeviceFeatures::BufferNoCopy)) {\n      desc.type |= igl::BufferDesc::BufferAPIHintBits::NoCopy;\n    }\n    buffer_ = device.createBuffer(desc, &result);\n  }\n}\n\nManagedUniformBuffer::~ManagedUniformBuffer() {\n#if IGL_PLATFORM_IOS_SIMULATOR\n  if (vmAllocLength_) {\n    // if vmAllocLength_ is nonzero it implies we used vm_alloc to allocate the memory\n    vm_deallocate((vm_map_t)mach_task_self(), (vm_address_t)data_, vmAllocLength_);\n  } else {\n#endif\n    free(data_);\n#if IGL_PLATFORM_IOS_SIMULATOR\n  }\n#endif\n}\n\nvoid ManagedUniformBuffer::bind(const igl::IDevice& device,\n                                const igl::IRenderPipelineState& pipelineState,\n                                igl::IRenderCommandEncoder& encoder) {\n  if (device.getBackendType() == igl::BackendType::OpenGL) {\n#if IGL_BACKEND_OPENGL && !IGL_PLATFORM_MACCATALYST\n    for (auto& uniform : uniformInfo.uniforms) {\n      // Since the backend is opengl, getIndexByName's igl::ShaderStage parameter is ignored and\n      // will work when binding vertex/fragment\n      // Might be optimized to use NameHandle\n      uniform.location = pipelineState.getIndexByName(igl::genNameHandle(uniform.name),\n                                                      igl::ShaderStage::Fragment);\n\n      if (uniform.location >= 0) {\n        encoder.bindUniform(uniform, data_);\n      } else {\n        IGL_LOG_ERROR_ONCE(\"The uniform %s was not found in shader\\n\", uniform.name.c_str());\n      }\n    }\n#else\n    IGL_DEBUG_ABORT(\"Should not use OpenGL backend on Mac Catalyst, use Metal instead\\n\");\n#endif\n  } else {\n    if (useBindBytes_) {\n      encoder.bindBytes(uniformInfo.index, igl::BindTarget::kAllGraphics, data_, length_);\n    } else {\n      // Need to ensure the latest data is present in the buffer\n      // TODO: Have callers handle this when data has changed.\n      void* data = data_;\n      if (buffer_->acceptedApiHints() & igl::BufferDesc::BufferAPIHintBits::NoCopy) {\n        data = nullptr;\n      }\n      buffer_->upload(data, {buffer_->getSizeInBytes(), 0});\n      encoder.bindBuffer(uniformInfo.index, buffer_.get());\n    }\n  }\n}\n\nvoid ManagedUniformBuffer::bind(const igl::IDevice& device,\n                                const igl::IComputePipelineState& pipelineState,\n                                igl::IComputeCommandEncoder& encoder) {\n  if (device.getBackendType() == igl::BackendType::OpenGL) {\n    for (auto& uniform : uniformInfo.uniforms) {\n      uniform.location = pipelineState.getIndexByName(igl::genNameHandle(uniform.name));\n      if (uniform.location >= 0) {\n        encoder.bindUniform(uniform, data_);\n      } else {\n        IGL_LOG_ERROR_ONCE(\"The uniform %s was not found in shader\\n\", uniform.name.c_str());\n      }\n    }\n  } else {\n    if (useBindBytes_) {\n      encoder.bindBytes(uniformInfo.index, data_, length_);\n    } else {\n      // Need to ensure the latest data is present in the buffer\n      // TODO: Have callers handle this when data has changed.\n      void* data = data_;\n      if (buffer_->acceptedApiHints() & igl::BufferDesc::BufferAPIHintBits::NoCopy) {\n        data = nullptr;\n      }\n      buffer_->upload(data, {buffer_->getSizeInBytes(), 0});\n      encoder.bindBuffer(static_cast<uint32_t>(uniformInfo.index), buffer_.get());\n    }\n  }\n}\n\nvoid* ManagedUniformBuffer::getData() {\n  return data_;\n}\n\nvoid ManagedUniformBuffer::buildUniformLUT() {\n  uniformLUT_ = std::make_unique<std::unordered_map<std::string, size_t>>();\n  for (size_t i = 0; i < uniformInfo.uniforms.size(); ++i) {\n    auto& uniform = uniformInfo.uniforms[i];\n    uniformLUT_->insert({uniform.name, i});\n  }\n}\n\nstatic int findUniformByName(const std::vector<igl::UniformDesc>& uniforms, const char* name) {\n  for (size_t i = 0; i < uniforms.size(); ++i) {\n    if (strcmp(name, uniforms[i].name.c_str()) == 0) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nint ManagedUniformBuffer::getIndex(const char* name) const {\n  if (uniformLUT_) {\n    auto search = uniformLUT_->find(name);\n    return search != uniformLUT_->end() ? (int)search->second : -1;\n  } else {\n    return findUniformByName(uniformInfo.uniforms, name);\n  }\n}\n\nbool ManagedUniformBuffer::updateData(const char* name, const void* data, size_t dataSize) {\n  IGL_DEBUG_ASSERT(name);\n\n  const int index = getIndex(name);\n\n  if (index >= 0) {\n    auto& uniform = uniformInfo.uniforms[index];\n    if (strcmp(name, uniform.name.c_str()) == 0) {\n      // If dataSize is smaller than the expected size, we will just update as client requested.\n      // This could mean the user knows only a portion of the uniform data needs updating\n      // However, if dataSize is larger than or equal to what we expect for this uniform, we will\n      // only copy data up to the expected data size for this uniform\n      const size_t uniformDataSize = getUniformDataSizeInternal(uniform);\n      if (dataSize > uniformDataSize) {\n        dataSize = uniformDataSize;\n#if IGL_DEBUG\n        IGL_LOG_INFO_ONCE(\n            \"IGLU/ManagedBufferBuffer/updateData: dataSize is larger than expected. This could be \"\n            \"benign. See comments in updateData for more details. \\n\");\n#endif\n      }\n      char* ptr = reinterpret_cast<char*>(data_);\n      checked_memcpy(ptr + uniform.offset, uniformDataSize, data, dataSize);\n      return true;\n    }\n  }\n#ifndef GTEST\n  IGL_DEBUG_ABORT(\"call to updateData: uniform with name %s not found, skipping update\\n\", name);\n#endif\n  return false;\n}\n\nsize_t ManagedUniformBuffer::getUniformDataSize(const char* name) {\n  for (auto& uniform : uniformInfo.uniforms) {\n    if (strcmp(name, uniform.name.c_str()) == 0) {\n      return getUniformDataSizeInternal(uniform);\n    }\n  }\n  return 0;\n}\n\n// return the type of the uniform\n// return igl::UniformType::Invalid if name invalid\nigl::UniformType ManagedUniformBuffer::getUniformType(const char* name) const {\n  auto index = findUniformByName(uniformInfo.uniforms, name);\n  if (index != -1) {\n    const auto& u = uniformInfo.uniforms.at(index);\n    return u.type;\n  }\n  return igl::UniformType::Invalid;\n}\n\nsize_t ManagedUniformBuffer::getUniformDataSizeInternal(igl::UniformDesc& uniform) {\n  const size_t uniformDataSize = uniform.elementStride != 0\n                                     ? uniform.numElements * uniform.elementStride\n                                     : uniform.numElements * igl::sizeForUniformType(uniform.type);\n  return uniformDataSize;\n}\n\n} // namespace iglu\n"
  },
  {
    "path": "IGLU/managedUniformBuffer/ManagedUniformBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/IGL.h>\n\nnamespace iglu {\nstruct ManagedUniformBufferInfo {\n  int index = -1;\n  size_t length = 0;\n  std::vector<igl::UniformDesc> uniforms;\n};\n\nclass ManagedUniformBuffer {\n public:\n  igl::Result result;\n  ManagedUniformBufferInfo uniformInfo;\n  ManagedUniformBuffer(igl::IDevice& device, const ManagedUniformBufferInfo& info);\n  ~ManagedUniformBuffer();\n  // This function takes a chunk of data and use it to update the value of uniform 'name'\n  bool updateData(const char* name, const void* data, size_t dataSize);\n  // This function returns the expected data size for uniform with given name\n  // If uniform has type UniformType::Float3, this function will return\n  // 3 * sizeof(float) if elementStride is zero and return elementStride otherwise\n  // if no uniform with given name exists, the function will return 0\n  size_t getUniformDataSize(const char* name);\n\n  // return the type of the uniform\n  // return igl::UniformType::Invalid if name invalid\n  igl::UniformType getUniformType(const char* name) const;\n\n  void bind(const igl::IDevice& device,\n            const igl::IRenderPipelineState& pipelineState,\n            igl::IRenderCommandEncoder& encoder);\n  void bind(const igl::IDevice& device,\n            const igl::IComputePipelineState& pipelineState,\n            igl::IComputeCommandEncoder& encoder);\n\n  void* getData();\n\n  void buildUniformLUT();\n\n  int getIndex(const char* name) const;\n\n private:\n  size_t getUniformDataSizeInternal(igl::UniformDesc& uniform);\n  void* data_ = nullptr;\n  int length_ = 0;\n  std::shared_ptr<igl::IBuffer> buffer_ = nullptr;\n  std::unique_ptr<std::unordered_map<std::string, size_t>> uniformLUT_ = nullptr;\n#if IGL_PLATFORM_IOS_SIMULATOR\n  /// If we're in the simulator we need to hold onto length so we can deallocate memory buffer\n  /// properly.\n  /// If this is non-zero implies that we used vm alloc to allocate the memory instead of malloc\n  /// since we don't hold onto the device to be able to use in the destructor\n  size_t vmAllocLength_ = 0;\n#endif\n  bool useBindBytes_ = false;\n};\n} // namespace iglu\n"
  },
  {
    "path": "IGLU/sentinel/Assert.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Assert.h>\n\n#define IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert) \\\n  IGL_DEBUG_ASSERT(!(shouldAssert), \"Sentinel implementation should NOT be reached\")\n"
  },
  {
    "path": "IGLU/sentinel/Buffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include <IGLU/sentinel/Buffer.h>\n\n#include <IGLU/sentinel/Assert.h>\n#include <igl/IGL.h>\n\nnamespace iglu::sentinel {\n\nBuffer::Buffer(bool shouldAssert, size_t size) : size_(size), shouldAssert_(shouldAssert) {}\n\nigl::Result Buffer::upload(const void* IGL_NULLABLE /*data*/, const igl::BufferRange& /*range*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return igl::Result(igl::Result::Code::Unimplemented, \"Not Implemented\");\n}\n\nvoid* IGL_NULLABLE Buffer::map(const igl::BufferRange& /*range*/,\n                               igl::Result* IGL_NULLABLE /*outResult*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nvoid Buffer::unmap() {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nigl::BufferDesc::BufferAPIHint Buffer::requestedApiHints() const noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return 0;\n}\n\nigl::BufferDesc::BufferAPIHint Buffer::acceptedApiHints() const noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return 0;\n}\n\nigl::ResourceStorage Buffer::storage() const noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return igl::ResourceStorage::Invalid;\n}\n\nsize_t Buffer::getSizeInBytes() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return size_;\n}\n\nuint64_t Buffer::gpuAddress(size_t /*offset*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return 0;\n}\n\nigl::BufferDesc::BufferType Buffer::getBufferType() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return 0;\n}\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/Buffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h>\n\nnamespace iglu::sentinel {\n\n/**\n * Sentinel Buffer intended for safe use where access to a real buffer is not available.\n * Use cases include returning a reference to a buffer from a raw pointer when a valid buffer is not\n * available.\n * All methods return nullptr, the default value or an error.\n */\nclass Buffer : public igl::IBuffer {\n public:\n  explicit Buffer(bool shouldAssert = true, size_t size = 0);\n\n  [[nodiscard]] igl::Result upload(const void* IGL_NULLABLE data,\n                                   const igl::BufferRange& range) final;\n  void* IGL_NULLABLE map(const igl::BufferRange& range, igl::Result* IGL_NULLABLE outResult) final;\n  void unmap() final;\n  [[nodiscard]] igl::BufferDesc::BufferAPIHint requestedApiHints() const noexcept final;\n  [[nodiscard]] igl::BufferDesc::BufferAPIHint acceptedApiHints() const noexcept final;\n  [[nodiscard]] igl::ResourceStorage storage() const noexcept final;\n  [[nodiscard]] size_t getSizeInBytes() const final;\n  [[nodiscard]] uint64_t gpuAddress(size_t offset = 0) const final;\n  [[nodiscard]] igl::BufferDesc::BufferType getBufferType() const final;\n\n private:\n  size_t size_;\n  [[maybe_unused]] bool shouldAssert_;\n};\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/CommandBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include <IGLU/sentinel/CommandBuffer.h>\n\n#include <IGLU/sentinel/Assert.h>\n#include <igl/IGL.h>\n\nnamespace iglu::sentinel {\n\nCommandBuffer::CommandBuffer(bool shouldAssert) :\n  igl::ICommandBuffer({.debugName = \"SentinelCommandBuffer\"}), shouldAssert_(shouldAssert) {}\n\nstd::unique_ptr<igl::IRenderCommandEncoder> CommandBuffer::createRenderCommandEncoder(\n    const igl::RenderPassDesc& /*renderPass*/,\n    const std::shared_ptr<igl::IFramebuffer>& /*framebuffer*/,\n    const igl::Dependencies& /*dependencies*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::unique_ptr<igl::IComputeCommandEncoder> CommandBuffer::createComputeCommandEncoder() {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nvoid CommandBuffer::present(const std::shared_ptr<igl::ITexture>& /*surface*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid CommandBuffer::waitUntilScheduled() {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid CommandBuffer::waitUntilCompleted() {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid CommandBuffer::pushDebugGroupLabel(const char* /*label*/, const igl::Color& /*color*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid CommandBuffer::popDebugGroupLabel() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid CommandBuffer::copyBuffer(igl::IBuffer& src,\n                               igl::IBuffer& dst,\n                               uint64_t srcOffset,\n                               uint64_t dstOffset,\n                               uint64_t size) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid CommandBuffer::copyTextureToBuffer(igl::ITexture& src,\n                                        igl::IBuffer& dst,\n                                        uint64_t dstOffset,\n                                        uint32_t level,\n                                        uint32_t layer) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/CommandBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandBuffer.h>\n\nnamespace iglu::sentinel {\n\n/**\n * Sentinel CommandBuffer intended for safe use where access to a real command buffer is not\n * available.\n * Use cases include returning a reference to a command buffer from a raw pointer when a\n * valid command buffer is not available.\n * All methods return nullptr, the default value or an error.\n */\nclass CommandBuffer final : public igl::ICommandBuffer {\n public:\n  explicit CommandBuffer(bool shouldAssert = true);\n\n  [[nodiscard]] std::unique_ptr<igl::IRenderCommandEncoder> createRenderCommandEncoder(\n      const igl::RenderPassDesc& /*renderPass*/,\n      const std::shared_ptr<igl::IFramebuffer>& /*framebuffer*/,\n      const igl::Dependencies& /*dependencies*/,\n      igl::Result* IGL_NULLABLE /*outResult*/) final;\n  [[nodiscard]] std::unique_ptr<igl::IComputeCommandEncoder> createComputeCommandEncoder() final;\n  void present(const std::shared_ptr<igl::ITexture>& /*surface*/) const final;\n  void waitUntilScheduled() final;\n  void waitUntilCompleted() final;\n  void pushDebugGroupLabel(const char* IGL_NONNULL /*label*/,\n                           const igl::Color& /*color*/ = igl::Color(1, 1, 1, 1)) const final;\n  void popDebugGroupLabel() const final;\n  void copyBuffer(igl::IBuffer& src,\n                  igl::IBuffer& dst,\n                  uint64_t srcOffset,\n                  uint64_t dstOffset,\n                  uint64_t size) final;\n  void copyTextureToBuffer(igl::ITexture& src,\n                           igl::IBuffer& dst,\n                           uint64_t dstOffset,\n                           uint32_t level,\n                           uint32_t layer) final;\n\n private:\n  [[maybe_unused]] bool shouldAssert_;\n};\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/CommandQueue.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include <IGLU/sentinel/CommandQueue.h>\n\n#include <IGLU/sentinel/Assert.h>\n\nnamespace iglu::sentinel {\n\nCommandQueue::CommandQueue(bool shouldAssert) : shouldAssert_(shouldAssert) {}\n\nstd::shared_ptr<igl::ICommandBuffer> CommandQueue::createCommandBuffer(\n    const igl::CommandBufferDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE\n    /*outResult*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nigl::SubmitHandle CommandQueue::submit(const igl::ICommandBuffer& /*commandBuffer*/,\n                                       bool /*endOfFrame*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return 0;\n}\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/CommandQueue.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandQueue.h>\n\nnamespace iglu::sentinel {\n\n/**\n * Sentinel CommandQueue intended for safe use where access to a real command queue is not\n * available.\n * Use cases include returning a reference to a command queue from a raw pointer when a\n * valid command queue is not available.\n * All methods return nullptr, the default value or an error.\n */\nclass CommandQueue final : public igl::ICommandQueue {\n public:\n  explicit CommandQueue(bool shouldAssert = true);\n\n  [[nodiscard]] std::shared_ptr<igl::ICommandBuffer> createCommandBuffer(\n      const igl::CommandBufferDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) final;\n  igl::SubmitHandle submit(const igl::ICommandBuffer& commandBuffer, bool endOfFrame = false) final;\n\n private:\n  [[maybe_unused]] bool shouldAssert_;\n};\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include <IGLU/sentinel/Device.h>\n\n#include <IGLU/sentinel/Assert.h>\n#include <IGLU/sentinel/PlatformDevice.h>\n#include <igl/IGL.h>\n\nnamespace iglu::sentinel {\n\nDevice::Device(bool shouldAssert) : platformDevice_(shouldAssert), shouldAssert_(shouldAssert) {}\n\nbool Device::hasFeature(igl::DeviceFeatures /*feature*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return false;\n}\n\nbool Device::hasRequirement(igl::DeviceRequirement /*requirement*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return false;\n}\n\nigl::ICapabilities::TextureFormatCapabilities Device::getTextureFormatCapabilities(\n    igl::TextureFormat /*format*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return TextureFormatCapabilityBits::Unsupported;\n}\n\nbool Device::getFeatureLimits(igl::DeviceFeatureLimits /*featureLimits*/,\n                              size_t& /*result*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return false;\n}\n\nigl::ShaderVersion Device::getShaderVersion() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return {};\n}\n\nigl::BackendVersion Device::getBackendVersion() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return {};\n}\n\nstd::shared_ptr<igl::ICommandQueue> Device::createCommandQueue(\n    const igl::CommandQueueDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::unique_ptr<igl::IBuffer> Device::createBuffer(\n    const igl::BufferDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) const noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::IDepthStencilState> Device::createDepthStencilState(\n    const igl::DepthStencilStateDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::ISamplerState> Device::createSamplerState(\n    const igl::SamplerStateDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE\n    /*outResult*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::ITexture> Device::createTexture(const igl::TextureDesc& /*desc*/,\n                                                     igl::Result* IGL_NULLABLE\n                                                     /*outResult*/) const noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::ITexture> Device::createTextureView(\n    std::shared_ptr<igl::ITexture> texture,\n    const igl::TextureViewDesc& desc,\n    igl::Result* IGL_NULLABLE /*outResult*/) const noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::IVertexInputState> Device::createVertexInputState(\n    const igl::VertexInputStateDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::IComputePipelineState> Device::createComputePipeline(\n    const igl::ComputePipelineDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::IRenderPipelineState> Device::createRenderPipeline(\n    const igl::RenderPipelineDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::IShaderModule> Device::createShaderModule(\n    const igl::ShaderModuleDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE\n    /*outResult*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::IFramebuffer> Device::createFramebuffer(\n    const igl::FramebufferDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nconst igl::IPlatformDevice& Device::getPlatformDevice() const noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return platformDevice_;\n}\n\nbool Device::verifyScope() {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return false;\n}\n\nigl::BackendType Device::getBackendType() const {\n  return igl::BackendType::Invalid;\n}\n\nsize_t Device::getCurrentDrawCount() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return 0;\n}\n\nsize_t Device::getShaderCompilationCount() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return 0;\n}\n\nstd::unique_ptr<igl::IShaderLibrary> Device::createShaderLibrary(\n    const igl::ShaderLibraryDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE\n    /*outResult*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nvoid Device::updateSurface(void* IGL_NONNULL /*nativeWindowType*/) {}\nstd::unique_ptr<igl::IShaderStages> Device::createShaderStages(\n    const igl::ShaderStagesDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE\n    /*outResult*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nigl::Holder<igl::BindGroupTextureHandle> Device::createBindGroup(\n    const igl::BindGroupTextureDesc& /*desc*/,\n    const igl::IRenderPipelineState* IGL_NULLABLE /*compatiblePipeline*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n\n  return {};\n}\n\nigl::Holder<igl::BindGroupBufferHandle> Device::createBindGroup(\n    const igl::BindGroupBufferDesc& /*desc*/,\n    igl::Result* IGL_NULLABLE /*outResult*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n\n  return {};\n}\n\nstd::shared_ptr<igl::ITimer> Device::createTimer(\n    igl::Result* IGL_NULLABLE /*outResult*/) const noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n\n  return {};\n}\n\nvoid Device::destroy(igl::BindGroupTextureHandle /*handle*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid Device::destroy(igl::BindGroupBufferHandle /*handle*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid Device::destroy(igl::SamplerHandle /*handle*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/sentinel/PlatformDevice.h>\n#include <igl/Device.h>\n\nnamespace iglu::sentinel {\n\n/**\n * Sentinel Device intended for safe use where access to a real device is not available.\n * Use cases include returning a reference to a device from a raw pointer when a valid device is not\n * available.\n * All methods return nullptr, the default value or an error.\n */\nclass Device final : public igl::IDevice {\n public:\n  explicit Device(bool shouldAssert = true);\n\n  [[nodiscard]] igl::Holder<igl::BindGroupTextureHandle> createBindGroup(\n      const igl::BindGroupTextureDesc& desc,\n      const igl::IRenderPipelineState* IGL_NULLABLE compatiblePipeline,\n      igl::Result* IGL_NULLABLE outResult) final;\n  [[nodiscard]] igl::Holder<igl::BindGroupBufferHandle> createBindGroup(\n      const igl::BindGroupBufferDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) final;\n  void destroy(igl::BindGroupTextureHandle handle) final;\n  void destroy(igl::BindGroupBufferHandle handle) final;\n  void destroy(igl::SamplerHandle handle) final;\n\n  [[nodiscard]] bool hasFeature(igl::DeviceFeatures feature) const final;\n  [[nodiscard]] bool hasRequirement(igl::DeviceRequirement requirement) const final;\n  [[nodiscard]] TextureFormatCapabilities getTextureFormatCapabilities(\n      igl::TextureFormat format) const final;\n  [[nodiscard]] bool getFeatureLimits(igl::DeviceFeatureLimits featureLimits,\n                                      size_t& result) const final;\n  [[nodiscard]] igl::ShaderVersion getShaderVersion() const final;\n  [[nodiscard]] igl::BackendVersion getBackendVersion() const final;\n\n  [[nodiscard]] std::shared_ptr<igl::ICommandQueue> createCommandQueue(\n      const igl::CommandQueueDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) noexcept final;\n  [[nodiscard]] std::unique_ptr<igl::IBuffer> createBuffer(const igl::BufferDesc& desc,\n                                                           igl::Result* IGL_NULLABLE\n                                                               outResult) const noexcept final;\n  [[nodiscard]] std::shared_ptr<igl::IDepthStencilState> createDepthStencilState(\n      const igl::DepthStencilStateDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) const final;\n  [[nodiscard]] std::shared_ptr<igl::ISamplerState> createSamplerState(\n      const igl::SamplerStateDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) const final;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> createTexture(const igl::TextureDesc& desc,\n                                                             igl::Result* IGL_NULLABLE\n                                                                 outResult) const noexcept final;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> createTextureView(\n      std::shared_ptr<igl::ITexture> texture,\n      const igl::TextureViewDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) const noexcept final;\n  [[nodiscard]] std::shared_ptr<igl::IVertexInputState> createVertexInputState(\n      const igl::VertexInputStateDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) const final;\n  [[nodiscard]] std::shared_ptr<igl::IComputePipelineState> createComputePipeline(\n      const igl::ComputePipelineDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) const final;\n  [[nodiscard]] std::shared_ptr<igl::IRenderPipelineState> createRenderPipeline(\n      const igl::RenderPipelineDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) const final;\n  [[nodiscard]] std::shared_ptr<igl::IShaderModule> createShaderModule(\n      const igl::ShaderModuleDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) const final;\n  [[nodiscard]] std::shared_ptr<igl::IFramebuffer> createFramebuffer(\n      const igl::FramebufferDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) final;\n  [[nodiscard]] std::shared_ptr<igl::ITimer> createTimer(\n      igl::Result* IGL_NULLABLE outResult) const noexcept final;\n  [[nodiscard]] const igl::IPlatformDevice& getPlatformDevice() const noexcept final;\n  [[nodiscard]] bool verifyScope() final;\n  [[nodiscard]] igl::BackendType getBackendType() const final;\n  [[nodiscard]] size_t getCurrentDrawCount() const final;\n  [[nodiscard]] size_t getShaderCompilationCount() const final;\n  [[nodiscard]] std::unique_ptr<igl::IShaderLibrary> createShaderLibrary(\n      const igl::ShaderLibraryDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) const final;\n  void updateSurface(void* IGL_NONNULL nativeWindowType) final;\n  [[nodiscard]] std::unique_ptr<igl::IShaderStages> createShaderStages(\n      const igl::ShaderStagesDesc& desc,\n      igl::Result* IGL_NULLABLE outResult) const final;\n  [[nodiscard]] void* IGL_NULLABLE getNativeDevice() const override {\n    return nullptr;\n  }\n\n private:\n  PlatformDevice platformDevice_;\n  [[maybe_unused]] bool shouldAssert_;\n};\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/Framebuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include <IGLU/sentinel/Framebuffer.h>\n\n#include <IGLU/sentinel/Assert.h>\n\nnamespace iglu::sentinel {\n\nFramebuffer::Framebuffer(bool shouldAssert) : shouldAssert_(shouldAssert) {}\n\nstd::vector<size_t> Framebuffer::getColorAttachmentIndices() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return {};\n}\n\nstd::shared_ptr<igl::ITexture> Framebuffer::getColorAttachment(size_t /*index*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::ITexture> Framebuffer::getResolveColorAttachment(size_t /*index*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::ITexture> Framebuffer::getDepthAttachment() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::ITexture> Framebuffer::getResolveDepthAttachment() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nstd::shared_ptr<igl::ITexture> Framebuffer::getStencilAttachment() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return nullptr;\n}\n\nigl::FramebufferMode Framebuffer::getMode() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return igl::FramebufferMode::Mono;\n}\n\nbool Framebuffer::isSwapchainBound() const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return false;\n}\n\nvoid Framebuffer::copyBytesColorAttachment(igl::ICommandQueue& /*cmdQueue*/,\n                                           size_t /*index*/,\n                                           void* /*pixelBytes*/,\n                                           const igl::TextureRangeDesc& /*range*/,\n                                           size_t /*bytesPerRow*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid Framebuffer::copyBytesDepthAttachment(igl::ICommandQueue& /*cmdQueue*/,\n                                           void* /*pixelBytes*/,\n                                           const igl::TextureRangeDesc& /*range*/,\n                                           size_t /*bytesPerRow*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid Framebuffer::copyBytesStencilAttachment(igl::ICommandQueue& /*cmdQueue*/,\n                                             void* /*pixelBytes*/,\n                                             const igl::TextureRangeDesc& /*range*/,\n                                             size_t /*bytesPerRow*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid Framebuffer::copyTextureColorAttachment(igl::ICommandQueue& /*cmdQueue*/,\n                                             size_t /*index*/,\n                                             std::shared_ptr<igl::ITexture> /*destTexture*/,\n                                             const igl::TextureRangeDesc& /*range*/) const {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid Framebuffer::updateDrawable(std::shared_ptr<igl::ITexture> /*texture*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid Framebuffer::updateDrawable(igl::SurfaceTextures /*surfaceTextures*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\nvoid Framebuffer::updateResolveAttachment(std::shared_ptr<igl::ITexture> /*texture*/) {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n}\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/Framebuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Framebuffer.h>\n\nnamespace iglu::sentinel {\n\n/**\n * Sentinel Frambuffer intended for safe use where access to a real framebuffer is not available.\n * Use cases include returning a reference to a framebuffer from a raw pointer when a\n * valid framebuffer is not available.\n * All methods return nullptr, the default value or an error.\n */\nclass Framebuffer : public igl::IFramebuffer {\n public:\n  explicit Framebuffer(bool shouldAssert = true);\n\n  [[nodiscard]] std::vector<size_t> getColorAttachmentIndices() const final;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> getColorAttachment(size_t index) const final;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> getResolveColorAttachment(size_t index) const final;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> getDepthAttachment() const final;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> getResolveDepthAttachment() const final;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> getStencilAttachment() const final;\n  [[nodiscard]] igl::FramebufferMode getMode() const final;\n  [[nodiscard]] bool isSwapchainBound() const final;\n  void copyBytesColorAttachment(igl::ICommandQueue& cmdQueue,\n                                size_t index,\n                                void* pixelBytes,\n                                const igl::TextureRangeDesc& range,\n                                size_t bytesPerRow = 0) const final;\n  void copyBytesDepthAttachment(igl::ICommandQueue& cmdQueue,\n                                void* pixelBytes,\n                                const igl::TextureRangeDesc& range,\n                                size_t bytesPerRow = 0) const final;\n  void copyBytesStencilAttachment(igl::ICommandQueue& cmdQueue,\n                                  void* pixelBytes,\n                                  const igl::TextureRangeDesc& range,\n                                  size_t bytesPerRow = 0) const final;\n  void copyTextureColorAttachment(igl::ICommandQueue& cmdQueue,\n                                  size_t index,\n                                  std::shared_ptr<igl::ITexture> destTexture,\n                                  const igl::TextureRangeDesc& range) const final;\n  void updateDrawable(std::shared_ptr<igl::ITexture> texture) final;\n  void updateDrawable(igl::SurfaceTextures surfaceTextures) final;\n  void updateResolveAttachment(std::shared_ptr<igl::ITexture> texture) final;\n\n private:\n  [[maybe_unused]] bool shouldAssert_;\n};\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/PlatformDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include <IGLU/sentinel/PlatformDevice.h>\n\n#include <IGLU/sentinel/Assert.h>\n\nnamespace iglu::sentinel {\n\nPlatformDevice::PlatformDevice(bool shouldAssert) : shouldAssert_(shouldAssert) {}\n\nbool PlatformDevice::isType(igl::PlatformDeviceType /*t*/) const noexcept {\n  IGLU_SENTINEL_ASSERT_IF_NOT(shouldAssert_);\n  return false;\n}\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/sentinel/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/PlatformDevice.h>\n\nnamespace iglu::sentinel {\n\n/**\n * Sentinel PlatformDevice intended for safe use where access to a real platform device is not\n * available.\n * Use cases include returning a reference to a platform device from a raw pointer when a\n * valid platform device is not available.\n * All methods return nullptr, the default value or an error.\n */\nclass PlatformDevice final : public igl::IPlatformDevice {\n public:\n  explicit PlatformDevice(bool shouldAssert = true);\n  [[nodiscard]] bool isType(igl::PlatformDeviceType t) const noexcept final;\n\n private:\n  [[maybe_unused]] bool shouldAssert_;\n};\n\n} // namespace iglu::sentinel\n"
  },
  {
    "path": "IGLU/shaderCross/ShaderCross.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/shaderCross/ShaderCross.h>\n\n#include <algorithm>\n#include <spirv_glsl.hpp>\n#include <spirv_msl.hpp>\n#include <vector>\n#include <igl/glslang/GlslCompiler.h>\n#include <igl/glslang/GlslangHelpers.h>\n\nnamespace iglu {\n\nShaderCross::ShaderCross(igl::IDevice& device) noexcept : device_(device) {\n  igl::glslang::initializeCompiler();\n}\n\nShaderCross::~ShaderCross() noexcept {\n  igl::glslang::finalizeCompiler();\n}\n\nstd::string ShaderCross::entryPointName(igl::ShaderStage /*stage*/) const noexcept {\n  if (device_.getBackendType() == igl::BackendType::Metal) {\n    return \"main0\";\n  }\n  if (device_.getBackendType() == igl::BackendType::OpenGL) {\n    return \"main\";\n  }\n  return {};\n}\n\nstd::string ShaderCross::crossCompileFromVulkanSource(const char* source,\n                                                      igl::ShaderStage stage,\n                                                      igl::Result* IGL_NULLABLE\n                                                          outResult) const noexcept {\n  if (device_.getBackendType() == igl::BackendType::Vulkan) {\n    return source;\n  }\n\n  // Compile to SPIR-V.\n  std::vector<uint32_t> spirvCode;\n  glslang_resource_t resource{};\n  glslangGetDefaultResource(&resource);\n  const auto result = igl::glslang::compileShader(stage, source, spirvCode, &resource);\n  if (!result.isOk()) {\n    if (outResult) {\n      *outResult = result;\n    }\n    return {};\n  }\n\n  // Cross-compile to MSL.\n  if (device_.getBackendType() == igl::BackendType::Metal) {\n    spirv_cross::CompilerMSL mslCompiler(std::move(spirvCode));\n    spirv_cross::CompilerMSL::Options options;\n#if IGL_PLATFORM_MACOSX\n    options.platform = spirv_cross::CompilerMSL::Options::macOS;\n#else\n    options.platform = spirv_cross::CompilerMSL::Options::iOS;\n#endif\n    options.set_msl_version(2, 2);\n    options.enable_decoration_binding = true;\n    mslCompiler.set_msl_options(options);\n    try {\n      return mslCompiler.compile();\n    } catch (const spirv_cross::CompilerError& e) {\n      if (outResult) {\n        *outResult = igl::Result(igl::Result::Code::RuntimeError, e.what());\n      }\n      return {};\n    }\n  }\n\n  // Cross-compile to GLSL.\n  if (device_.getBackendType() == igl::BackendType::OpenGL) {\n    const auto shaderVersion = device_.getShaderVersion();\n\n    spirv_cross::CompilerGLSL glslCompiler(std::move(spirvCode));\n    spirv_cross::CompilerGLSL::Options options;\n    options.version =\n        static_cast<uint32_t>(shaderVersion.majorVersion * 100) + shaderVersion.minorVersion;\n    options.es = (shaderVersion.family == igl::ShaderFamily::GlslEs);\n    options.emit_push_constant_as_uniform_buffer = true;\n    options.emit_uniform_buffer_as_plain_uniforms = true;\n    options.enable_420pack_extension = device_.hasFeature(igl::DeviceFeatures::ExplicitBindingExt);\n\n    // In multiview mode in IGL, 2 views are always used.\n    const auto& exts = glslCompiler.get_declared_extensions();\n    const auto& caps = glslCompiler.get_declared_capabilities();\n    if (stage == igl::ShaderStage::Vertex &&\n        (std::any_of(std::begin(exts),\n                     std::end(exts),\n                     [](const std::string& ext) { return ext == \"GL_OVR_multiview2\"; }) ||\n         std::any_of(std::begin(caps), std::end(caps), [](const spv::Capability cap) {\n           return cap == spv::Capability::CapabilityMultiView;\n         }))) {\n      options.ovr_multiview_view_count = 2;\n    }\n\n    glslCompiler.set_common_options(options);\n\n    try {\n      return glslCompiler.compile();\n    } catch (const spirv_cross::CompilerError& e) {\n      if (outResult) {\n        *outResult = igl::Result(igl::Result::Code::RuntimeError, e.what());\n      }\n      return {};\n    }\n  }\n\n  if (outResult) {\n    *outResult =\n        igl::Result(igl::Result::Code::Unimplemented, \"Cross-compilation is not implemented.\");\n  }\n  return {};\n}\n\n} // namespace iglu\n"
  },
  {
    "path": "IGLU/shaderCross/ShaderCross.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <igl/IGL.h>\n\nnamespace iglu {\n/// Wrapper for SPIR-V cross compiler to generate IGL-compatible shader sources for different\n/// backends.\nclass ShaderCross final {\n public:\n  explicit ShaderCross(igl::IDevice& device) noexcept;\n  ~ShaderCross() noexcept;\n  ShaderCross(const ShaderCross&) = delete;\n  ShaderCross& operator=(const ShaderCross&) = delete;\n  ShaderCross(ShaderCross&&) = delete;\n  ShaderCross& operator=(ShaderCross&&) = delete;\n\n  [[nodiscard]] std::string entryPointName(igl::ShaderStage stage) const noexcept;\n\n  [[nodiscard]] std::string crossCompileFromVulkanSource(const char* source,\n                                                         igl::ShaderStage stage,\n                                                         igl::Result* IGL_NULLABLE\n                                                             outResult) const noexcept;\n\n private:\n  igl::IDevice& device_;\n};\n} // namespace iglu\n"
  },
  {
    "path": "IGLU/shaderCross/ShaderCrossUniformBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/shaderCross/ShaderCrossUniformBuffer.h>\n\nnamespace iglu {\nnamespace {\n[[nodiscard]] ManagedUniformBufferInfo getSpirvCrossCompatibleManagedUniformBufferInfo(\n    const std::string& uboBlockName,\n    ManagedUniformBufferInfo info) noexcept {\n  for (auto& uniform : info.uniforms) {\n    uniform.name = uboBlockName + \".\" + uniform.name;\n  }\n  return info;\n}\n} // namespace\n\nShaderCrossUniformBuffer::ShaderCrossUniformBuffer(igl::IDevice& device,\n                                                   const std::string& uboBlockName,\n                                                   ManagedUniformBufferInfo info) :\n  ManagedUniformBuffer(\n      device,\n      getSpirvCrossCompatibleManagedUniformBufferInfo(uboBlockName, std::move(info))) {}\n} // namespace iglu\n"
  },
  {
    "path": "IGLU/shaderCross/ShaderCrossUniformBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <string>\n\nnamespace iglu {\n/// Extension for ManagedUniformBuffer that enables OpenGL bindings in the form\n/// they implemented in SPIRV-Cross (UBOs are converted to plain uniforms).\nclass ShaderCrossUniformBuffer : public ManagedUniformBuffer {\n public:\n  ShaderCrossUniformBuffer(igl::IDevice& device,\n                           const std::string& uboBlockName,\n                           ManagedUniformBufferInfo info);\n};\n} // namespace iglu\n"
  },
  {
    "path": "IGLU/simdtypes/SimdTypes.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cassert>\n\n// This would use IGL defines, but we can avoid importing all of IGL by doing this\n#if defined(__APPLE__)\n#include <simd/simd.h>\n#endif // defined(__APPLE__)\n\n/// Polyfill to make it so we don't have to have ifdefs in code\n\nnamespace iglu::simdtypes {\n\n// Use Apple-provided simd if available.\n#if defined(__APPLE__)\n\nusing float4x4 = simd::float4x4;\nusing float3x3 = simd::float3x3;\nusing float3x4 = simd::float3x4;\nusing float2x2 = simd::float2x2;\nusing float4 = simd::float4;\nusing float3 = simd::float3;\nusing float2 = simd::float2;\nusing float1 = simd::float1;\nusing int1 = simd::int1;\nusing int2 = simd::int2;\nusing int3 = simd::int3;\nusing int4 = simd::int4;\nusing bool1 = simd_bool;\n\n#else\n\n// Apple simd is not available, make use custom.\n#if defined(__clang__)\n\nusing float4 = float __attribute__((ext_vector_type(4)));\n\n// simd/vector_types.h\n// Vectors of this type are padded to have the same size and alignment as simd_float4.\nusing float3 = float __attribute__((ext_vector_type(4)));\n\nusing float2 = float __attribute__((ext_vector_type(2)));\nusing float1 = float;\nusing int1 = int;\nusing int2 = int __attribute__((ext_vector_type(2)));\n\n// Vectors of this type are padded to have the same size and alignment as simd_float4.\nusing int3 = int __attribute__((ext_vector_type(4)));\n\nusing int4 = int __attribute__((ext_vector_type(4)));\nusing bool1 = bool;\n\n#elif defined(__GNUC__)\n\nusing float4 = float __attribute__((vector_size(sizeof(float) * 4)));\n\n// simd/vector_types.h\n// Vectors of this type are padded to have the same size and alignment as simd_float4.\nusing float3 = float __attribute__((vector_size(sizeof(float) * 4)));\n\nusing float2 = float __attribute__((vector_size(sizeof(float) * 2)));\nusing float1 = float;\nusing int1 = int;\nusing int2 = int __attribute__((vector_size(sizeof(float) * 2)));\n\n// Vectors of this type are padded to have the same size and alignment as simd_float4.\nusing int3 = int __attribute__((vector_size(sizeof(int) * 4)));\n\nusing int4 = int __attribute__((vector_size(sizeof(float) * 4)));\nusing bool1 = bool;\n\n#else\n\n// Not available clang or GCC vector extensions - create custom structs\n\nstruct float4 final {\n  float x;\n  float y;\n  float z;\n  float w;\n\n  float operator[](const unsigned index) const {\n    assert(index < 4);\n    return (&x)[index];\n  }\n\n  float& operator[](const unsigned index) {\n    assert(index < 4);\n    return (&x)[index];\n  }\n};\nstatic_assert(sizeof(float4) == 4 * sizeof(float));\n\n// simd/vector_types.h\n// Vectors of this type are padded to have the same size and alignment as simd_float4.\nusing float3 = float4;\n\nstruct float2 final {\n  float x;\n  float y;\n\n  float operator[](const unsigned index) const {\n    assert(index < 2);\n    return (&x)[index];\n  }\n\n  float& operator[](const unsigned index) {\n    assert(index < 2);\n    return (&x)[index];\n  }\n};\nstatic_assert(sizeof(float2) == 2 * sizeof(float));\n\nusing float1 = float;\n\nstruct int4 final {\n  int x;\n  int y;\n  int z;\n  int w;\n\n  int operator[](const unsigned index) const {\n    assert(index < 4);\n    return (&x)[index];\n  }\n\n  int& operator[](const unsigned index) {\n    assert(index < 4);\n    return (&x)[index];\n  }\n};\nstatic_assert(sizeof(int4) == 4 * sizeof(int));\n\n// Vectors of this type are padded to have the same size and alignment as simd_int4.\nusing int3 = int4;\n\nstruct int2 final {\n  int x;\n  int y;\n\n  int operator[](const unsigned index) const {\n    assert(index < 2);\n    return (&x)[index];\n  }\n\n  int& operator[](const unsigned index) {\n    assert(index < 2);\n    return (&x)[index];\n  }\n};\nstatic_assert(sizeof(int2) == 2 * sizeof(int));\n\nusing int1 = int;\n\nusing bool1 = bool;\n\n#endif\n\nstruct Float4x4 {\n  float4 columns[4];\n  Float4x4() = default;\n  explicit Float4x4(float val) {\n    columns[0] = float4{val, 0.0, 0.0, 0.0};\n    columns[1] = float4{0.0, val, 0.0, 0.0};\n    columns[2] = float4{0.0, 0.0, val, 0.0};\n    columns[3] = float4{0.0, 0.0, 0.0, val};\n  }\n  explicit Float4x4(float4 diag) {\n    columns[0] = float4{diag[0], 0.0, 0.0, 0.0};\n    columns[1] = float4{0.0, diag[1], 0.0, 0.0};\n    columns[2] = float4{0.0, 0.0, diag[2], 0.0};\n    columns[3] = float4{0.0, 0.0, 0.0, diag[3]};\n  }\n  Float4x4(float4 c0, float4 c1, float4 c2, float4 c3) {\n    columns[0] = c0;\n    columns[1] = c1;\n    columns[2] = c2;\n    columns[3] = c3;\n  }\n  // TODO BE remove this float*\n  explicit Float4x4(const float* vals) {\n    columns[0] = float4{vals[0], vals[1], vals[2], vals[3]};\n    columns[1] = float4{vals[4], vals[5], vals[6], vals[7]};\n    columns[2] = float4{vals[8], vals[9], vals[10], vals[11]};\n    columns[3] = float4{vals[12], vals[13], vals[14], vals[15]};\n  }\n};\n\nstruct Float3x4 {\n  float4 columns[3];\n  Float3x4() = default;\n  explicit Float3x4(float val) {\n    columns[0] = float4{val, 0.0, 0.0, 0.0};\n    columns[1] = float4{0.0, val, 0.0, 0.0};\n    columns[2] = float4{0.0, 0.0, val, 0.0};\n  }\n  explicit Float3x4(float3 diag) {\n    columns[0] = float4{diag[0], 0.0, 0.0, 0.0};\n    columns[1] = float4{0.0, diag[1], 0.0, 0.0};\n    columns[2] = float4{0.0, 0.0, diag[2], 0.0};\n  }\n  Float3x4(float4 c0, float4 c1, float4 c2) {\n    columns[0] = c0;\n    columns[1] = c1;\n    columns[2] = c2;\n  }\n  // TODO BE remove this float*\n  explicit Float3x4(const float* vals) {\n    columns[0] = float4{vals[0], vals[1], vals[2], vals[3]};\n    columns[1] = float4{vals[4], vals[5], vals[6], vals[7]};\n    columns[2] = float4{vals[8], vals[9], vals[10], vals[11]};\n  }\n};\n\nstruct Float3x3 {\n  float3 columns[3];\n  Float3x3() = default;\n  explicit Float3x3(float val) {\n    columns[0] = float3{val, 0.0, 0.0};\n    columns[1] = float3{0.0, val, 0.0};\n    columns[2] = float3{0.0, 0.0, val};\n  }\n  explicit Float3x3(float3 diag) {\n    columns[0] = float3{diag[0], 0.0, 0.0};\n    columns[1] = float3{0.0, diag[1], 0.0};\n    columns[2] = float3{0.0, 0.0, diag[2]};\n  }\n  Float3x3(float3 c0, float3 c1, float3 c2) {\n    columns[0] = c0;\n    columns[1] = c1;\n    columns[2] = c2;\n  }\n};\n\nstruct Float2x2 {\n  float2 columns[2];\n  Float2x2() = default;\n  explicit Float2x2(float val) {\n    columns[0] = float2{val, 0.0};\n    columns[1] = float2{0.0, val};\n  }\n  explicit Float2x2(float2 diag) {\n    columns[0] = float2{diag[0], 0.0};\n    columns[1] = float2{0.0, diag[1]};\n  }\n  Float2x2(float2 c0, float2 c1) {\n    columns[0] = c0;\n    columns[1] = c1;\n  }\n};\n\nusing float4x4 = Float4x4;\nusing float3x4 = Float3x4;\nusing float3x3 = Float3x3;\nusing float2x2 = Float2x2;\n\n#endif // defined(__APPLE__)\n\n} // namespace iglu::simdtypes\n"
  },
  {
    "path": "IGLU/simdtypes/SimdUtilities.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <cmath>\n\nnamespace iglu::simdtypes {\n\n#if defined(__APPLE__)\n\ninline float1 clamp(float1 x, float1 min, float1 max) {\n  return simd_clamp(x, min, max);\n}\n\ninline float1 fract(float1 x) {\n  return simd_fract(x);\n}\n\ninline float4x4 inverse(const float4x4& m) {\n  return simd_inverse(m);\n}\n\n// result = m * v;\ninline float4 multiply(const float4x4& m, const float4& v) {\n  return simd_mul(m, v);\n}\n\n// result = m1 * m2\ninline float4x4 multiply(const float4x4& m1, const float4x4& m2) {\n  return simd_mul(m1, m2);\n}\n\n#else\n\ninline float1 clamp(float1 x, float1 min, float1 max) {\n  if (x < min) {\n    return min;\n  }\n  if (x > max) {\n    return max;\n  }\n  return x;\n}\n\ninline float1 fract(float1 x) {\n  return x - floor(x);\n}\n\ninline float4x4 inverse(const float4x4& m) {\n  float4x4 result{};\n\n  result.columns[0][0] = m.columns[1][1] * m.columns[2][2] * m.columns[3][3] -\n                         m.columns[1][1] * m.columns[2][3] * m.columns[3][2] -\n                         m.columns[2][1] * m.columns[1][2] * m.columns[3][3] +\n                         m.columns[2][1] * m.columns[1][3] * m.columns[3][2] +\n                         m.columns[3][1] * m.columns[1][2] * m.columns[2][3] -\n                         m.columns[3][1] * m.columns[1][3] * m.columns[2][2];\n\n  result.columns[1][0] = -m.columns[1][0] * m.columns[2][2] * m.columns[3][3] +\n                         m.columns[1][0] * m.columns[2][3] * m.columns[3][2] +\n                         m.columns[2][0] * m.columns[1][2] * m.columns[3][3] -\n                         m.columns[2][0] * m.columns[1][3] * m.columns[3][2] -\n                         m.columns[3][0] * m.columns[1][2] * m.columns[2][3] +\n                         m.columns[3][0] * m.columns[1][3] * m.columns[2][2];\n\n  result.columns[2][0] = m.columns[1][0] * m.columns[2][1] * m.columns[3][3] -\n                         m.columns[1][0] * m.columns[2][3] * m.columns[3][1] -\n                         m.columns[2][0] * m.columns[1][1] * m.columns[3][3] +\n                         m.columns[2][0] * m.columns[1][3] * m.columns[3][1] +\n                         m.columns[3][0] * m.columns[1][1] * m.columns[2][3] -\n                         m.columns[3][0] * m.columns[1][3] * m.columns[2][1];\n\n  result.columns[3][0] = -m.columns[1][0] * m.columns[2][1] * m.columns[3][2] +\n                         m.columns[1][0] * m.columns[2][2] * m.columns[3][1] +\n                         m.columns[2][0] * m.columns[1][1] * m.columns[3][2] -\n                         m.columns[2][0] * m.columns[1][2] * m.columns[3][1] -\n                         m.columns[3][0] * m.columns[1][1] * m.columns[2][2] +\n                         m.columns[3][0] * m.columns[1][2] * m.columns[2][1];\n\n  result.columns[0][1] = -m.columns[0][1] * m.columns[2][2] * m.columns[3][3] +\n                         m.columns[0][1] * m.columns[2][3] * m.columns[3][2] +\n                         m.columns[2][1] * m.columns[0][2] * m.columns[3][3] -\n                         m.columns[2][1] * m.columns[0][3] * m.columns[3][2] -\n                         m.columns[3][1] * m.columns[0][2] * m.columns[2][3] +\n                         m.columns[3][1] * m.columns[0][3] * m.columns[2][2];\n\n  result.columns[1][1] = m.columns[0][0] * m.columns[2][2] * m.columns[3][3] -\n                         m.columns[0][0] * m.columns[2][3] * m.columns[3][2] -\n                         m.columns[2][0] * m.columns[0][2] * m.columns[3][3] +\n                         m.columns[2][0] * m.columns[0][3] * m.columns[3][2] +\n                         m.columns[3][0] * m.columns[0][2] * m.columns[2][3] -\n                         m.columns[3][0] * m.columns[0][3] * m.columns[2][2];\n\n  result.columns[2][1] = -m.columns[0][0] * m.columns[2][1] * m.columns[3][3] +\n                         m.columns[0][0] * m.columns[2][3] * m.columns[3][1] +\n                         m.columns[2][0] * m.columns[0][1] * m.columns[3][3] -\n                         m.columns[2][0] * m.columns[0][3] * m.columns[3][1] -\n                         m.columns[3][0] * m.columns[0][1] * m.columns[2][3] +\n                         m.columns[3][0] * m.columns[0][3] * m.columns[2][1];\n\n  result.columns[3][1] = m.columns[0][0] * m.columns[2][1] * m.columns[3][2] -\n                         m.columns[0][0] * m.columns[2][2] * m.columns[3][1] -\n                         m.columns[2][0] * m.columns[0][1] * m.columns[3][2] +\n                         m.columns[2][0] * m.columns[0][2] * m.columns[3][1] +\n                         m.columns[3][0] * m.columns[0][1] * m.columns[2][2] -\n                         m.columns[3][0] * m.columns[0][2] * m.columns[2][1];\n\n  result.columns[0][2] = m.columns[0][1] * m.columns[1][2] * m.columns[3][3] -\n                         m.columns[0][1] * m.columns[1][3] * m.columns[3][2] -\n                         m.columns[1][1] * m.columns[0][2] * m.columns[3][3] +\n                         m.columns[1][1] * m.columns[0][3] * m.columns[3][2] +\n                         m.columns[3][1] * m.columns[0][2] * m.columns[1][3] -\n                         m.columns[3][1] * m.columns[0][3] * m.columns[1][2];\n\n  result.columns[1][2] = -m.columns[0][0] * m.columns[1][2] * m.columns[3][3] +\n                         m.columns[0][0] * m.columns[1][3] * m.columns[3][2] +\n                         m.columns[1][0] * m.columns[0][2] * m.columns[3][3] -\n                         m.columns[1][0] * m.columns[0][3] * m.columns[3][2] -\n                         m.columns[3][0] * m.columns[0][2] * m.columns[1][3] +\n                         m.columns[3][0] * m.columns[0][3] * m.columns[1][2];\n\n  result.columns[2][2] = m.columns[0][0] * m.columns[1][1] * m.columns[3][3] -\n                         m.columns[0][0] * m.columns[1][3] * m.columns[3][1] -\n                         m.columns[1][0] * m.columns[0][1] * m.columns[3][3] +\n                         m.columns[1][0] * m.columns[0][3] * m.columns[3][1] +\n                         m.columns[3][0] * m.columns[0][1] * m.columns[1][3] -\n                         m.columns[3][0] * m.columns[0][3] * m.columns[1][1];\n\n  result.columns[3][2] = -m.columns[0][0] * m.columns[1][1] * m.columns[3][2] +\n                         m.columns[0][0] * m.columns[1][2] * m.columns[3][1] +\n                         m.columns[1][0] * m.columns[0][1] * m.columns[3][2] -\n                         m.columns[1][0] * m.columns[0][2] * m.columns[3][1] -\n                         m.columns[3][0] * m.columns[0][1] * m.columns[1][2] +\n                         m.columns[3][0] * m.columns[0][2] * m.columns[1][1];\n\n  result.columns[0][3] = -m.columns[0][1] * m.columns[1][2] * m.columns[2][3] +\n                         m.columns[0][1] * m.columns[1][3] * m.columns[2][2] +\n                         m.columns[1][1] * m.columns[0][2] * m.columns[2][3] -\n                         m.columns[1][1] * m.columns[0][3] * m.columns[2][2] -\n                         m.columns[2][1] * m.columns[0][2] * m.columns[1][3] +\n                         m.columns[2][1] * m.columns[0][3] * m.columns[1][2];\n\n  result.columns[1][3] = m.columns[0][0] * m.columns[1][2] * m.columns[2][3] -\n                         m.columns[0][0] * m.columns[1][3] * m.columns[2][2] -\n                         m.columns[1][0] * m.columns[0][2] * m.columns[2][3] +\n                         m.columns[1][0] * m.columns[0][3] * m.columns[2][2] +\n                         m.columns[2][0] * m.columns[0][2] * m.columns[1][3] -\n                         m.columns[2][0] * m.columns[0][3] * m.columns[1][2];\n\n  result.columns[2][3] = -m.columns[0][0] * m.columns[1][1] * m.columns[2][3] +\n                         m.columns[0][0] * m.columns[1][3] * m.columns[2][1] +\n                         m.columns[1][0] * m.columns[0][1] * m.columns[2][3] -\n                         m.columns[1][0] * m.columns[0][3] * m.columns[2][1] -\n                         m.columns[2][0] * m.columns[0][1] * m.columns[1][3] +\n                         m.columns[2][0] * m.columns[0][3] * m.columns[1][1];\n\n  result.columns[3][3] = m.columns[0][0] * m.columns[1][1] * m.columns[2][2] -\n                         m.columns[0][0] * m.columns[1][2] * m.columns[2][1] -\n                         m.columns[1][0] * m.columns[0][1] * m.columns[2][2] +\n                         m.columns[1][0] * m.columns[0][2] * m.columns[2][1] +\n                         m.columns[2][0] * m.columns[0][1] * m.columns[1][2] -\n                         m.columns[2][0] * m.columns[0][2] * m.columns[1][1];\n\n  float det = m.columns[0][0] * result.columns[0][0] + m.columns[0][1] * result.columns[1][0] +\n              m.columns[0][2] * result.columns[2][0] + m.columns[0][3] * result.columns[3][0];\n\n  if (det == 0) {\n    return float4x4(1.0);\n  }\n\n  det = 1.0f / det;\n\n  for (auto& column : result.columns) {\n    for (int j = 0; j < 4; j++) {\n      column[j] *= det;\n    }\n  }\n\n  return result;\n}\n\n// result = m * v;\ninline float4 multiply(const float4x4& m, const float4& v) {\n  float4 result;\n  result[0] = m.columns[0][0] * v[0] + m.columns[1][0] * v[1] + m.columns[2][0] * v[2] +\n              m.columns[3][0] * v[3];\n  result[1] = m.columns[0][1] * v[0] + m.columns[1][1] * v[1] + m.columns[2][1] * v[2] +\n              m.columns[3][1] * v[3];\n  result[2] = m.columns[0][2] * v[0] + m.columns[1][2] * v[1] + m.columns[2][2] * v[2] +\n              m.columns[3][2] * v[3];\n  result[3] = m.columns[0][3] * v[0] + m.columns[1][3] * v[1] + m.columns[2][3] * v[2] +\n              m.columns[3][3] * v[3];\n  return result;\n}\n\n// result = m1 * m2\ninline float4x4 multiply(const float4x4& m1, const float4x4& m2) {\n  float4x4 result{};\n  result.columns[0] = multiply(m1, m2.columns[0]);\n  result.columns[1] = multiply(m1, m2.columns[1]);\n  result.columns[2] = multiply(m1, m2.columns[2]);\n  result.columns[3] = multiply(m1, m2.columns[3]);\n  return result;\n}\n#endif\n} // namespace iglu::simdtypes\n"
  },
  {
    "path": "IGLU/simple_renderer/Drawable.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include \"Drawable.h\"\n\n#include <utility>\n\nnamespace iglu::drawable {\n\nDrawable::Drawable(std::shared_ptr<vertexdata::VertexData> vertexData,\n                   std::shared_ptr<material::Material> material) :\n  vertexData_(std::move(vertexData)), material_(std::move(material)) {}\n\nvoid Drawable::draw(igl::IDevice& device,\n                    igl::IRenderCommandEncoder& commandEncoder,\n                    const igl::RenderPipelineDesc& pipelineDesc,\n                    size_t pushConstantsDataSize,\n                    const void* pushConstantsData) {\n  // Assumption: _vertexData and _material are immutable\n  const size_t pipelineDescHash = std::hash<igl::RenderPipelineDesc>()(pipelineDesc);\n  if (!pipelineState_ || pipelineDescHash != lastPipelineDescHash_) {\n    igl::RenderPipelineDesc mutablePipelineDesc = pipelineDesc;\n    vertexData_->populatePipelineDescriptor(mutablePipelineDesc);\n    material_->populatePipelineDescriptor(mutablePipelineDesc);\n\n    pipelineState_ = device.createRenderPipeline(mutablePipelineDesc, nullptr);\n    lastPipelineDescHash_ = pipelineDescHash;\n  }\n\n  commandEncoder.bindRenderPipelineState(pipelineState_);\n\n  material_->bind(device, *pipelineState_, commandEncoder);\n\n  if (pushConstantsData && pushConstantsDataSize) {\n    commandEncoder.bindPushConstants(pushConstantsData, pushConstantsDataSize);\n  }\n\n  vertexData_->draw(commandEncoder);\n}\n\n} // namespace iglu::drawable\n"
  },
  {
    "path": "IGLU/simple_renderer/Drawable.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#pragma once\n\n#include <IGLU/simple_renderer/Material.h>\n#include <IGLU/simple_renderer/VertexData.h>\n#include <memory>\n\nnamespace iglu::drawable {\n\n/// A drawable aggregates all the data and configurations for a single draw call.\n///\nclass Drawable final {\n public:\n  /// Binds all relevant states and issues a draw call on 'commandEncoder'.\n  /// It takes a render pipeline descriptor as input, which is expected to be\n  /// populated with accurate framebuffer information; all other \"draw call\"\n  /// related configurations will be handled internally.\n  void draw(igl::IDevice& device,\n            igl::IRenderCommandEncoder& commandEncoder,\n            const igl::RenderPipelineDesc& pipelineDesc,\n            size_t pushConstantsDataSize = 0,\n            const void* pushConstantsData = nullptr);\n\n  /// A Drawable is \"immutable\" in that there's no API to modify its inputs after\n  /// creation. They're lightweight objects and should be recreated instead of updated.\n  Drawable(std::shared_ptr<vertexdata::VertexData> vertexData,\n           std::shared_ptr<material::Material> material);\n  ~Drawable() = default;\n\n private:\n  std::shared_ptr<vertexdata::VertexData> vertexData_;\n  std::shared_ptr<material::Material> material_;\n\n  std::shared_ptr<igl::IRenderPipelineState> pipelineState_;\n  size_t lastPipelineDescHash_ = 0;\n};\n\n} // namespace iglu::drawable\n"
  },
  {
    "path": "IGLU/simple_renderer/ForwardRenderPass.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include \"ForwardRenderPass.h\"\n\n#include <utility>\n\nnamespace iglu::renderpass {\n\nForwardRenderPass::ForwardRenderPass(igl::IDevice& device) {\n  const igl::CommandQueueDesc desc{};\n  commandQueue_ = device.createCommandQueue(desc, nullptr);\n  backendType_ = device.getBackendType();\n}\n\nvoid ForwardRenderPass::begin(std::shared_ptr<igl::IFramebuffer> target,\n                              const igl::RenderPassDesc* renderPassDescOverride) {\n  IGL_DEBUG_ASSERT(!isActive(), \"Drawing already in progress\");\n\n  framebuffer_ = std::move(target);\n\n  renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n  renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n      framebuffer_->getColorAttachment(0)->getFormat();\n  auto depthAttachment = framebuffer_->getDepthAttachment();\n  renderPipelineDesc_.targetDesc.depthAttachmentFormat =\n      depthAttachment ? depthAttachment->getFormat() : igl::TextureFormat::Invalid;\n  auto stencilAttachment = framebuffer_->getStencilAttachment();\n  renderPipelineDesc_.targetDesc.stencilAttachmentFormat =\n      stencilAttachment ? stencilAttachment->getFormat() : igl::TextureFormat::Invalid;\n\n  igl::RenderPassDesc defaultRenderPassDesc;\n  defaultRenderPassDesc.colorAttachments.resize(1);\n  defaultRenderPassDesc.colorAttachments[0].loadAction = igl::LoadAction::Clear;\n  defaultRenderPassDesc.colorAttachments[0].storeAction = igl::StoreAction::Store;\n  defaultRenderPassDesc.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n  defaultRenderPassDesc.depthAttachment.clearDepth = 1.0f;\n  const igl::RenderPassDesc* finalDesc = renderPassDescOverride ? renderPassDescOverride\n                                                                : &defaultRenderPassDesc;\n\n  const igl::CommandBufferDesc cbDesc;\n  commandBuffer_ = commandQueue_->createCommandBuffer(cbDesc, nullptr);\n  commandEncoder_ =\n      commandBuffer_->createRenderCommandEncoder(*finalDesc, framebuffer_, {}, nullptr);\n}\n\nvoid ForwardRenderPass::draw(drawable::Drawable& drawable, igl::IDevice& device) const {\n  IGL_DEBUG_ASSERT(isActive(), \"Drawing not in progress\");\n  drawable.draw(device, *commandEncoder_, renderPipelineDesc_);\n}\n\nvoid ForwardRenderPass::end(bool shouldPresent) {\n  IGL_DEBUG_ASSERT(isActive(), \"Drawing not in progress\");\n\n  commandEncoder_->endEncoding();\n\n  if (shouldPresent) {\n    commandBuffer_->present(framebuffer_->getColorAttachment(0));\n  }\n\n  commandQueue_->submit(*commandBuffer_);\n\n  commandEncoder_ = nullptr;\n  commandBuffer_ = nullptr;\n  framebuffer_ = nullptr;\n}\n\nvoid ForwardRenderPass::bindViewport(const igl::Viewport& viewport, const igl::Size& surfaceSize) {\n  IGL_DEBUG_ASSERT(isActive(), \"Drawing not in progress\");\n  if (backendType_ == igl::BackendType::Metal) {\n    // In Metal, framebuffer origin is top left but the argument assumes bottom left\n    igl::Viewport flippedViewport = viewport;\n    flippedViewport.y = surfaceSize.height - viewport.y - viewport.height;\n    commandEncoder_->bindViewport(flippedViewport);\n  } else {\n    commandEncoder_->bindViewport(viewport);\n  }\n}\n\nbool ForwardRenderPass::isActive() const {\n  return framebuffer_ != nullptr;\n}\n\nigl::IFramebuffer& ForwardRenderPass::activeTarget() {\n  IGL_DEBUG_ASSERT(isActive(), \"No valid target when not active\");\n  return *framebuffer_;\n}\n\nigl::IRenderCommandEncoder& ForwardRenderPass::activeCommandEncoder() {\n  IGL_DEBUG_ASSERT(isActive(), \"No valid command encoder when not active\");\n  return *commandEncoder_;\n}\n\n} // namespace iglu::renderpass\n"
  },
  {
    "path": "IGLU/simple_renderer/ForwardRenderPass.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#pragma once\n\n#include <IGLU/simple_renderer/Drawable.h>\n#include <memory>\n#include <string>\n#include <vector>\n#include <igl/IGL.h>\n\nnamespace iglu::renderpass {\n\n/// A simple \"render pass\" abstraction that hides low level graphics API details\n/// like command queue, command encoder, render pipeline state and presentation.\n///\n/// An application frame will always have one render pass targeting the \"onscreen\"\n/// framebuffer, but it can have multiple intermediate offscreen render passes.\nclass ForwardRenderPass final {\n public:\n  /// Call before any graphics bind/draw calls to this render pass.\n  void begin(std::shared_ptr<igl::IFramebuffer> target,\n             const igl::RenderPassDesc* renderPassDescOverride = nullptr);\n\n  /// Call once per drawable.\n  void draw(drawable::Drawable& drawable, igl::IDevice& device) const;\n\n  /// Call after all drawing within this render pass is finished. The 'present'\n  /// parameter controls whether to present the target framebuffer and must be set\n  /// to true exactly once per frame, when targeting the \"onscreen\" framebuffer.\n  void end(bool present = false);\n\n  /// Optional. By default, a viewport matching the size of the target framebuffer\n  /// will be used.\n  ///\n  /// [Convention] Framebuffer origin is bottom left corner.\n  void bindViewport(const igl::Viewport& viewport, const igl::Size& surfaceSize);\n\n  //// The render pass is considered active when in between begin() and end() calls.\n  bool isActive() const;\n  igl::IFramebuffer& activeTarget();\n  igl::IRenderCommandEncoder& activeCommandEncoder();\n\n  explicit ForwardRenderPass(igl::IDevice& device);\n  ~ForwardRenderPass() = default;\n\n private:\n  igl::BackendType backendType_;\n\n  std::shared_ptr<igl::ICommandQueue> commandQueue_;\n  std::shared_ptr<igl::IFramebuffer> framebuffer_;\n  igl::RenderPipelineDesc renderPipelineDesc_;\n\n  std::shared_ptr<igl::ICommandBuffer> commandBuffer_;\n  std::unique_ptr<igl::IRenderCommandEncoder> commandEncoder_;\n};\n\n} // namespace iglu::renderpass\n"
  },
  {
    "path": "IGLU/simple_renderer/Material.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include \"Material.h\"\n\n#include <utility>\n\nnamespace iglu::material {\n\nMaterial::Material(igl::IDevice& device, std::string name) : name(std::move(name)) {\n  setDepthTestConfig(device, depthTestConfig_);\n}\n\nstd::shared_ptr<ShaderProgram> Material::shaderProgram() const {\n  return shaderProgram_;\n}\n\nvoid Material::setShaderProgram(igl::IDevice& device,\n                                const std::shared_ptr<ShaderProgram>& program) {\n  shaderProgram_ = program;\n  shaderUniforms_ =\n      std::make_unique<ShaderUniforms>(device, shaderProgram_->renderPipelineReflection());\n}\n\nShaderUniforms& Material::shaderUniforms() const {\n  return *shaderUniforms_;\n}\n\nDepthTestConfig Material::depthTestConfig() const {\n  return depthTestConfig_;\n}\n\nvoid Material::setDepthTestConfig(igl::IDevice& device, const DepthTestConfig& config) {\n  depthTestConfig_ = config;\n\n  igl::DepthStencilStateDesc depthDesc{\n      .compareFunction = (depthTestConfig_ != DepthTestConfig::Disable)\n                             ? igl::CompareFunction::Less\n                             : igl::CompareFunction::AlwaysPass,\n      .isDepthWriteEnabled = (depthTestConfig_ == DepthTestConfig::Enable),\n  };\n  depthState_ = device.createDepthStencilState(depthDesc, nullptr);\n}\n\nvoid Material::populatePipelineDescriptor(igl::RenderPipelineDesc& pipelineDesc) const {\n  // Assumption: 'blendMode' only applies to the first color attachment\n  if (!pipelineDesc.targetDesc.colorAttachments.empty()) {\n    auto& colorAttachment = pipelineDesc.targetDesc.colorAttachments[0];\n    if (blendMode == BlendMode::Opaque()) {\n      colorAttachment.blendEnabled = false;\n    } else {\n      colorAttachment.blendEnabled = true;\n      colorAttachment.srcRGBBlendFactor = blendMode.srcRGB;\n      colorAttachment.dstRGBBlendFactor = blendMode.dstRGB;\n      colorAttachment.rgbBlendOp = blendMode.opRGB;\n      colorAttachment.srcAlphaBlendFactor = blendMode.srcAlpha;\n      colorAttachment.dstAlphaBlendFactor = blendMode.dstAlpha;\n      colorAttachment.alphaBlendOp = blendMode.opAlpha;\n    }\n  }\n\n  pipelineDesc.cullMode = cullMode;\n\n  shaderProgram_->populatePipelineDescriptor(pipelineDesc);\n}\n\nvoid Material::bind(igl::IDevice& device,\n                    igl::IRenderPipelineState& pipelineState,\n                    igl::IRenderCommandEncoder& commandEncoder) {\n  shaderUniforms_->bind(device, pipelineState, commandEncoder);\n  commandEncoder.bindDepthStencilState(depthState_);\n}\n\n} // namespace iglu::material\n"
  },
  {
    "path": "IGLU/simple_renderer/Material.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#pragma once\n\n#include \"ShaderProgram.h\"\n#include \"ShaderUniforms.h\"\n\n#include <string>\n#include <igl/IGL.h>\n\nnamespace iglu::material {\n\nenum class DepthTestConfig {\n  Disable,\n  Enable,\n  EnableNoWrite,\n};\n\n/// Aggregates all blend mode related configurations.\nclass BlendMode {\n public:\n  igl::BlendFactor srcRGB;\n  igl::BlendFactor dstRGB;\n  igl::BlendOp opRGB;\n  igl::BlendFactor srcAlpha;\n  igl::BlendFactor dstAlpha;\n  igl::BlendOp opAlpha;\n\n  BlendMode();\n  BlendMode(igl::BlendFactor src, igl::BlendFactor dst) :\n    BlendMode(src, dst, igl::BlendOp::Add, src, dst, igl::BlendOp::Add) {}\n  BlendMode(igl::BlendFactor srcRGB,\n            igl::BlendFactor dstRGB,\n            igl::BlendOp opRGB,\n            igl::BlendFactor srcAlpha,\n            igl::BlendFactor dstAlpha,\n            igl::BlendOp opAlpha) :\n    srcRGB(srcRGB),\n    dstRGB(dstRGB),\n    opRGB(opRGB),\n    srcAlpha(srcAlpha),\n    dstAlpha(dstAlpha),\n    opAlpha(opAlpha) {}\n\n  static BlendMode Opaque() {\n    return {igl::BlendFactor::One, igl::BlendFactor::Zero};\n  }\n  static BlendMode Translucent() {\n    return {igl::BlendFactor::SrcAlpha,\n            igl::BlendFactor::OneMinusSrcAlpha,\n            igl::BlendOp::Add,\n            igl::BlendFactor::One,\n            igl::BlendFactor::OneMinusSrcAlpha,\n            igl::BlendOp::Add};\n  }\n  static BlendMode Additive() {\n    return {igl::BlendFactor::SrcAlpha, igl::BlendFactor::One};\n  }\n  static BlendMode Premultiplied() {\n    return {igl::BlendFactor::One, igl::BlendFactor::OneMinusSrcAlpha};\n  }\n\n  bool operator==(const BlendMode& other) const {\n    return srcRGB == other.srcRGB && dstRGB == other.dstRGB && opRGB == other.opRGB &&\n           srcAlpha == other.srcAlpha && dstAlpha == other.dstAlpha && opAlpha == other.opAlpha;\n  }\n};\n\n/// Aggregates all configurations that affect how vertex data will be rendered. It also\n/// simplifies render pipeline state manipulation.\n///\n/// A \"material\" is typically associated with artistic inputs to renderable objects. The\n/// shader program and its inputs are the most obvious example of controlling the looks of a\n/// renderable object, but there are other pipeline states that are relevant.\nclass Material final {\n public:\n  std::string name = \"<unnamed>\";\n  BlendMode blendMode = BlendMode::Opaque();\n  igl::CullMode cullMode = igl::CullMode::Back;\n\n  [[nodiscard]] std::shared_ptr<ShaderProgram> shaderProgram() const;\n  void setShaderProgram(igl::IDevice& device, const std::shared_ptr<ShaderProgram>& shaderProgram);\n\n  /// There's a 1-to-1 correspondence between the ShaderProgram and the ShaderUniforms object.\n  /// Don't cache this returned object, as changing the shader program will create a new one.\n  [[nodiscard]] ShaderUniforms& shaderUniforms() const;\n\n  [[nodiscard]] DepthTestConfig depthTestConfig() const;\n  void setDepthTestConfig(igl::IDevice& device, const DepthTestConfig& config);\n\n  /// Populates a pipeline descriptor for drawing using this Material.\n  void populatePipelineDescriptor(igl::RenderPipelineDesc& pipelineDesc) const;\n\n  /// Binds all relevant states in 'encoder' in preparation for drawing.\n  void bind(igl::IDevice& device,\n            igl::IRenderPipelineState& pipelineState,\n            igl::IRenderCommandEncoder& commandEncoder);\n\n  explicit Material(igl::IDevice& device, std::string name = \"<unnamed>\");\n  ~Material() = default;\n\n private:\n  std::shared_ptr<ShaderProgram> shaderProgram_;\n  std::unique_ptr<ShaderUniforms> shaderUniforms_;\n  std::shared_ptr<igl::IDepthStencilState> depthState_;\n  DepthTestConfig depthTestConfig_ = DepthTestConfig::Disable;\n};\n\n} // namespace iglu::material\n"
  },
  {
    "path": "IGLU/simple_renderer/ParametricVertexData.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include \"ParametricVertexData.h\"\n\n#include <array>\n\nnamespace iglu::vertexdata {\n\n// Assumption: <name, location> for OpenGL and Metal, respectively\nstatic const std::pair<const char*, int> kSAttrPosition(\"a_position\", 0);\nstatic const std::pair<const char*, int> kSAttrUv(\"a_uv\", 1);\n\nnamespace Quad {\n\nigl::VertexInputStateDesc inputStateDesc() {\n  igl::VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 2;\n  inputDesc.attributes[0] =\n      {\n          .bufferIndex = 0,\n          .format = igl::VertexAttributeFormat::Float3,\n          .offset = offsetof(VertexPosUv, position),\n          .name = kSAttrPosition.first,\n          .location = kSAttrPosition.second,\n      },\n  inputDesc.attributes[1] = {\n      .bufferIndex = 0,\n      .format = igl::VertexAttributeFormat::Float2,\n      .offset = offsetof(VertexPosUv, uv),\n      .name = kSAttrUv.first,\n      .location = kSAttrUv.second,\n  };\n  inputDesc.numInputBindings = 1;\n  inputDesc.inputBindings[0].stride = sizeof(VertexPosUv);\n  return inputDesc;\n}\n\nstd::shared_ptr<VertexData> create(igl::IDevice& device,\n                                   iglu::simdtypes::float2 posMin,\n                                   iglu::simdtypes::float2 posMax,\n                                   iglu::simdtypes::float2 uvMin,\n                                   iglu::simdtypes::float2 uvMax) {\n  // - UV origin: bottom left\n  // - Vertex layout:\n  // 0 -- 2\n  // |    |\n  // |    |\n  // 1 -- 3\n  const std::array vertexData{\n      VertexPosUv{.position = {posMin[0], posMax[1], 0.0}, .uv = {uvMin[0], uvMax[1]}},\n      VertexPosUv{.position = {posMin[0], posMin[1], 0.0}, .uv = {uvMin[0], uvMin[1]}},\n      VertexPosUv{.position = {posMax[0], posMax[1], 0.0}, .uv = {uvMax[0], uvMax[1]}},\n      VertexPosUv{.position = {posMax[0], posMin[1], 0.0}, .uv = {uvMax[0], uvMin[1]}},\n  };\n  const std::array indexData{uint16_t{0}, uint16_t{1}, uint16_t{2}, uint16_t{3}};\n\n  const igl::BufferDesc vbDesc{.type = igl::BufferDesc::BufferTypeBits::Vertex,\n                               .data = vertexData.data(),\n                               .length = sizeof(VertexPosUv) * vertexData.size()};\n  const igl::BufferDesc ibDesc{.type = igl::BufferDesc::BufferTypeBits::Index,\n                               .data = indexData.data(),\n                               .length = sizeof(uint16_t) * indexData.size()};\n\n  const igl::VertexInputStateDesc inputDesc = inputStateDesc();\n  const std::shared_ptr<igl::IVertexInputState> vertexInput =\n      device.createVertexInputState(inputDesc, nullptr);\n\n  PrimitiveDesc primitiveDesc;\n  primitiveDesc.numEntries = sizeof(indexData) / sizeof(indexData[0]);\n\n  std::shared_ptr<VertexData> vertData =\n      std::make_shared<VertexData>(vertexInput,\n                                   device.createBuffer(vbDesc, nullptr),\n                                   device.createBuffer(ibDesc, nullptr),\n                                   igl::IndexFormat::UInt16,\n                                   primitiveDesc,\n                                   igl::PrimitiveType::TriangleStrip);\n  return vertData;\n}\n\n} // namespace Quad\n\nnamespace RenderToTextureQuad {\n\nigl::VertexInputStateDesc inputStateDesc() {\n  return Quad::inputStateDesc();\n}\n\nstd::shared_ptr<VertexData> create(igl::IDevice& device,\n                                   iglu::simdtypes::float2 posMin,\n                                   iglu::simdtypes::float2 posMax,\n                                   iglu::simdtypes::float2 uvMin,\n                                   iglu::simdtypes::float2 uvMax) {\n  iglu::simdtypes::float2 uvMinAdjusted = uvMin;\n  iglu::simdtypes::float2 uvMaxAdjusted = uvMax;\n\n  // Here's how to think about the conventions that led to this workaround.\n  //\n  // Summary of conventions:\n  // - In OpenGL, all origins (texture, framebuffer, clip) are the bottom left corner.\n  // - In Metal, texture and framebuffer origins are the top left corner.\n  // - The conventions in this library follow OpenGL. For example:\n  //   - This file creates VertexData with UV origin at the bottom left.\n  //   - The first pixel in a texture is expected to be the bottom left.\n  //   - ForwardRenderPass assumes the viewport (framebuffer space) origin is the bottom left.\n  // - We are forced to have our own conventions because the graphics APIs have their own\n  //   conventions that aren't compatible with each other. Furthermore, we must correct for them.\n  //\n  // Correcting for discrepancies across graphics APIs:\n  // - Although we can modify texture content, texture coordinates, viewport and clip space at\n  //   will to handle discrepancies across graphics APIs, none provide a way to alter the origin\n  //   of a framebuffer.\n  // - When a framebuffer color attachment is used a shader program input, things break. Our\n  //   convention is to use bottom left origin for texture data, which matches the origin of OpenGL\n  //   framebuffer; all good. However, in Metal, the origin of framebuffer attachments is top left,\n  //   so our color attachment texture is flipped in relation to textures loaded from images.\n  // - If we followed Metal's coordinate conventions instead, we'd have the same problem but in\n  //   OpenGL. This problem can't be avoided because the APIs don't allow us to compensate for\n  //   our conventions, no matter what they are.\n  //\n  // This workaround doesn't cover use cases like:\n  // - Imported 3D meshes\n  // - Shaders that use a combination of color attachments and image-based textures as input\n  // A general solution to this problem would involve being able to tell shader code about the\n  // orientation of every input texture and a strict set of conventions in shader code to ensure\n  // texture sampling accounts for that information.\n  //\n  // Some external resources I found useful for understanding this issue:\n  // - https://veldrid.dev/articles/backend-differences.html\n  // - http://hacksoflife.blogspot.com/2019/04/keeping-blue-side-up-coordinate.html\n  //\n  if (device.getBackendType() == igl::BackendType::Metal) {\n    uvMinAdjusted[1] = 1.0f - uvMinAdjusted[1];\n    uvMaxAdjusted[1] = 1.0f - uvMaxAdjusted[1];\n  }\n\n  return Quad::create(device, posMin, posMax, uvMinAdjusted, uvMaxAdjusted);\n}\n\n} // namespace RenderToTextureQuad\n\n} // namespace iglu::vertexdata\n"
  },
  {
    "path": "IGLU/simple_renderer/ParametricVertexData.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#pragma once\n\n#include \"VertexData.h\"\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <memory>\n\nnamespace iglu::vertexdata {\n\n// [Convention] UV origin is bottom left and +Y points up.\n\nstruct VertexPosUv {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float2 uv;\n};\n\n/// Simple XY-aligned quad.\nnamespace Quad {\n\n/// Descriptor matching the VertexPosUv type used in 'create'.\nigl::VertexInputStateDesc inputStateDesc();\n\nstd::shared_ptr<VertexData> create(igl::IDevice& device,\n                                   iglu::simdtypes::float2 posMin,\n                                   iglu::simdtypes::float2 posMax,\n                                   iglu::simdtypes::float2 uvMin,\n                                   iglu::simdtypes::float2 uvMax);\n\n} // namespace Quad\n\n/// Simple XY-aligned quad.\n///\n/// Use RenderToTextureQuad instead of Quad if you're rendering to a texture and your results\n/// are flipped on some graphics backends. Use it in one of two ways:\n/// 1. When rendering into a texture in a **full screen** pass\n/// 2. In draw calls where **all** the inputs to your shader program are color attachments\n///\n/// An in-depth explanation of the problem, solution and limitations can be found in the\n/// implementation file.\nnamespace RenderToTextureQuad {\n\n/// Descriptor matching the VertexPosUv type used in 'create'.\nigl::VertexInputStateDesc inputStateDesc();\n\nstd::shared_ptr<VertexData> create(igl::IDevice& device,\n                                   iglu::simdtypes::float2 posMin,\n                                   iglu::simdtypes::float2 posMax,\n                                   iglu::simdtypes::float2 uvMin,\n                                   iglu::simdtypes::float2 uvMax);\n\n} // namespace RenderToTextureQuad\n\n} // namespace iglu::vertexdata\n"
  },
  {
    "path": "IGLU/simple_renderer/ShaderProgram.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include \"ShaderProgram.h\"\n\n#include <utility>\n#include <igl/NameHandle.h>\n\nnamespace iglu::material {\n\n#define CHECK_RESULT(res, outResPtr)              \\\n  if (!res.isOk()) {                              \\\n    if (outResPtr != nullptr) {                   \\\n      *outResPtr = res;                           \\\n    } else {                                      \\\n      IGL_DEBUG_ABORT(\"%s\", res.message.c_str()); \\\n    }                                             \\\n    return;                                       \\\n  }\n\nShaderProgram::ShaderProgram(igl::IDevice& device,\n                             std::shared_ptr<igl::IShaderModule> vertexShader,\n                             std::shared_ptr<igl::IShaderModule> fragmentShader,\n                             std::shared_ptr<igl::IVertexInputState> vis,\n                             igl::Result* outResult) {\n  igl::Result result;\n  shaderStages_ = igl::ShaderStagesCreator::fromRenderModules(\n      device, std::move(vertexShader), std::move(fragmentShader), &result);\n  CHECK_RESULT(result, outResult);\n  init(device, std::move(vis), outResult);\n}\n\nShaderProgram::ShaderProgram(igl::IDevice& device,\n                             std::shared_ptr<igl::IShaderStages> shaderStages,\n                             std::shared_ptr<igl::IVertexInputState> vis,\n                             igl::Result* outResult) :\n  shaderStages_(std::move(shaderStages)) {\n  init(device, std::move(vis), outResult);\n}\n\nvoid ShaderProgram::init(igl::IDevice& device,\n                         std::shared_ptr<igl::IVertexInputState> vis,\n                         igl::Result* outResult) {\n  igl::Result result;\n\n  igl::RenderPipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = shaderStages_;\n  pipelineDesc.vertexInputState = std::move(vis);\n  pipelineDesc.targetDesc.colorAttachments.resize(1);\n  pipelineDesc.targetDesc.colorAttachments[0].textureFormat = igl::TextureFormat::RGBA_UNorm8;\n  auto pipelineState = device.createRenderPipeline(pipelineDesc, &result);\n  CHECK_RESULT(result, outResult);\n  // Note that the check above might early return!\n  reflection_ = pipelineState->renderPipelineReflection();\n}\n\nconst igl::IRenderPipelineReflection& ShaderProgram::renderPipelineReflection() const {\n  return *reflection_;\n}\n\nvoid ShaderProgram::populatePipelineDescriptor(igl::RenderPipelineDesc& pipelineDesc) const {\n  pipelineDesc.shaderStages = shaderStages_;\n  for (const auto& entry : reflection_->allTextures()) {\n    pipelineDesc.fragmentUnitSamplerMap[entry.textureIndex] = igl::genNameHandle(entry.name);\n  }\n}\n\n} // namespace iglu::material\n"
  },
  {
    "path": "IGLU/simple_renderer/ShaderProgram.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#pragma once\n\n#include <memory>\n#include <string>\n#include <igl/IGL.h>\n\nnamespace iglu::material {\n\n/// Aggregates a vertex and a fragment module to extract shader reflection\n/// information that can be used ahead of drawing.\nclass ShaderProgram final {\n public:\n  /// Retrieve shader reflection information. This is particularly useful in\n  /// scenarios where the application can't make fixed assumptions about the\n  /// layout of the uniforms within a shader.\n  [[nodiscard]] const igl::IRenderPipelineReflection& renderPipelineReflection() const;\n\n  /// Populates a pipeline descriptor for drawing using this shader program.\n  void populatePipelineDescriptor(igl::RenderPipelineDesc& pipelineDesc) const;\n\n  ShaderProgram(igl::IDevice& device,\n                std::shared_ptr<igl::IShaderModule> vertexShader,\n                std::shared_ptr<igl::IShaderModule> fragmentShader,\n                std::shared_ptr<igl::IVertexInputState> vis = nullptr,\n                igl::Result* outResult = nullptr);\n  ShaderProgram(igl::IDevice& device,\n                std::shared_ptr<igl::IShaderStages> shaderStages,\n                std::shared_ptr<igl::IVertexInputState> vis = nullptr,\n                igl::Result* outResult = nullptr);\n  ~ShaderProgram() = default;\n\n private:\n  void init(igl::IDevice& device,\n            std::shared_ptr<igl::IVertexInputState> vis,\n            igl::Result* outResult);\n\n  std::shared_ptr<igl::IShaderStages> shaderStages_;\n  std::shared_ptr<igl::IRenderPipelineReflection> reflection_;\n};\n\n} // namespace iglu::material\n"
  },
  {
    "path": "IGLU/simple_renderer/ShaderUniforms.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"ShaderUniforms.h\"\n\n#include <igl/Buffer.h>\n#include <igl/Device.h>\n#include <igl/Uniform.h>\n#if IGL_BACKEND_OPENGL\n// RenderPipelineState.h is included below for OpenGL-specific functionality\n#include <igl/opengl/RenderPipelineState.h>\n#endif\n#if defined(IGL_CMAKE_BUILD)\n#include <igl/IGLSafeC.h>\n#else\n#include <secure_lib/secure_string.h>\n#endif\n\n#include <cstdlib>\n#include <limits>\n#include <memory>\n#include <string>\n\nnamespace {\n\n// For Suballocated uniform buffers, try to allocate at most a buffer of size 64K.\n// We will clamp the size to the limits of the device.\n// For example, on the Quest 2 GPU, maxUniformBufferSize is 64k, so we are using it all.\nconstexpr size_t kMaxSuballocatedBufferSizeBytes = 65536;\n\nuint8_t bindTargetForShaderStage(igl::ShaderStage stage) {\n  switch (stage) {\n  case igl::ShaderStage::Vertex:\n    return igl::BindTarget::kVertex;\n  case igl::ShaderStage::Fragment:\n    return igl::BindTarget::kFragment;\n  case igl::ShaderStage::Compute:\n  default:\n    IGL_DEBUG_ABORT(\"invalid shader stage for rendering: %d\", (int)stage);\n    return 0;\n  }\n}\n\n} // namespace\n\nnamespace iglu::material {\n\nShaderUniforms::ShaderUniforms(igl::IDevice& device,\n                               const igl::IRenderPipelineReflection& reflection,\n                               bool enableSuballocationforVulkan) :\n  device_(device) {\n  bool hasBindBytesFeature = device.hasFeature(igl::DeviceFeatures::BindBytes);\n  size_t bindBytesLimit = 0;\n  if (!device.getFeatureLimits(igl::DeviceFeatureLimits::MaxBindBytesBytes, bindBytesLimit)) {\n    IGL_LOG_ERROR(\"[IGL][Warning] Failed to get MaxBindBytesBytes value. Turning off bind bytes\");\n    hasBindBytesFeature = false;\n  }\n\n  size_t uniformBufferLimit = 0;\n  device.getFeatureLimits(igl::DeviceFeatureLimits::MaxUniformBufferBytes, uniformBufferLimit);\n\n  const bool isSuballocated = enableSuballocationforVulkan &&\n                              device_.getBackendType() == igl::BackendType::Vulkan;\n  for (const igl::BufferArgDesc& iglDesc : reflection.allUniformBuffers()) {\n    const size_t length = iglDesc.bufferDataSize;\n    IGL_DEBUG_ASSERT(length > 0, \"unexpected buffer with size 0\");\n    IGL_DEBUG_ASSERT(length <= kMaxSuballocatedBufferSizeBytes &&\n                         (uniformBufferLimit == 0 || length <= uniformBufferLimit),\n                     \"buffer size exceeds limits\");\n    const size_t bufferAllocationLength =\n        std::min(isSuballocated ? kMaxSuballocatedBufferSizeBytes : length,\n                 uniformBufferLimit != 0 ? uniformBufferLimit : std::numeric_limits<size_t>::max());\n    const std::string vertexBufferPrefix = \"vertexBuffer.\";\n    if (device.getBackendType() == igl::BackendType::Metal &&\n        iglDesc.name.toString().substr(0, vertexBufferPrefix.length()) == vertexBufferPrefix) {\n      continue;\n    }\n\n    bool createBuffer = false;\n    if (device_.getBackendType() == igl::BackendType::OpenGL) {\n      // On OpenGL, create buffers only when dealing with uniform blocks (and not single uniforms)\n      createBuffer = iglDesc.isUniformBlock;\n    } else if (device_.getBackendType() == igl::BackendType::Vulkan) {\n      createBuffer = true;\n    } else if (device_.getBackendType() == igl::BackendType::Metal) {\n      // On Metal, need to create buffers only when data > 4kb\n      createBuffer = !hasBindBytesFeature || length > bindBytesLimit;\n    } else if (device_.getBackendType() == igl::BackendType::D3D12) {\n      // D3D12 does not support bindBytes, always create buffers\n      createBuffer = true;\n    }\n\n    std::shared_ptr<igl::IBuffer> buffer = nullptr;\n    if (createBuffer) {\n      const auto backendType = device_.getBackendType();\n      const igl::BufferDesc desc{\n          .type = igl::BufferDesc::BufferTypeBits::Uniform,\n          .length = bufferAllocationLength,\n          .storage = igl::ResourceStorage::Shared,\n          .hint = static_cast<igl::BufferDesc::BufferAPIHint>(\n              igl::BufferDesc::BufferAPIHintBits::UniformBlock |\n              ((backendType == igl::BackendType::Metal || backendType == igl::BackendType::Vulkan ||\n                backendType == igl::BackendType::D3D12)\n                   ? igl::BufferDesc::BufferAPIHintBits::Ring\n                   : 0)),\n      };\n      buffer = device.createBuffer(desc, nullptr);\n    }\n\n    // All uniform updates will be made to this malloc'ed data block,\n    // which will later be uploaded to the buffer (if using buffer)\n    void* data = malloc(bufferAllocationLength);\n    if (data == nullptr) {\n      continue;\n    }\n    auto allocation = std::make_shared<BufferAllocation>(data, bufferAllocationLength, buffer);\n    allocations_.push_back(allocation);\n\n    std::shared_ptr<BufferDesc> bufferDesc = std::make_shared<BufferDesc>();\n    bufferDesc->iglBufferDesc = iglDesc;\n    bufferDesc->allocation = allocation;\n\n    if (isSuballocated) {\n      bufferDesc->isSuballocated = true;\n      // In Vulkan, Uniform buffers must have offets that are a multiple of\n      // VkPhysicalDeviceLimits::minUniformBufferOffsetAlignment\n      size_t alignement = 0;\n      device.getFeatureLimits(igl::DeviceFeatureLimits::BufferAlignment, alignement);\n\n      // Align the suballocation size to the physical device alignment\n      bufferDesc->suballocationsSize = (length + alignement - 1) & ~(alignement - 1);\n    }\n\n    for (int i = 0; i < static_cast<int>(iglDesc.members.size()); ++i) {\n      const auto& uniformDesc = iglDesc.members[i];\n      const UniformDesc uniform{.iglMemberDesc = uniformDesc, .buffer = bufferDesc};\n      allUniformsByName_.insert({uniformDesc.name, uniform});\n      bufferDesc->uniforms.push_back(uniform);\n      bufferDesc->memberIndices[uniformDesc.name] = i;\n    }\n\n    bufferDescs_.insert({iglDesc.name, std::move(bufferDesc)});\n  }\n\n  for (const igl::TextureArgDesc& iglDesc : reflection.allTextures()) {\n    textureDescs_.push_back(iglDesc);\n    allTexturesByName_[iglDesc.name] = TextureSlot{.texture = nullptr, .rawTexture = nullptr};\n  }\n}\n\nShaderUniforms::~ShaderUniforms() {\n  for (auto& allocation : allocations_) {\n    free(allocation->ptr);\n  }\n}\n\nigl::NameHandle ShaderUniforms::MemoizedQualifiedMemberNameCalculator::getQualifiedMemberName(\n    const igl::NameHandle& /*blockTypeName*/,\n    const igl::NameHandle& blockInstanceName,\n    const igl::NameHandle& memberName) const {\n  const std::pair<igl::NameHandle, igl::NameHandle> key = {blockInstanceName, memberName};\n  auto it = qualifiedMemberNameCache_.find(key);\n  if (it != qualifiedMemberNameCache_.end()) {\n    return it->second;\n  }\n  auto qualifiedMemberName =\n      igl::genNameHandle(blockInstanceName.toString() + \".\" + memberName.toString());\n  qualifiedMemberNameCache_.insert({key, qualifiedMemberName});\n  return qualifiedMemberName;\n}\n\nigl::NameHandle ShaderUniforms::getQualifiedMemberName(const igl::NameHandle& blockTypeName,\n                                                       const igl::NameHandle& blockInstanceName,\n                                                       const igl::NameHandle& memberName) {\n  return memoizedQualifiedMemberNameCalculator_.getQualifiedMemberName(\n      blockTypeName, blockInstanceName, memberName);\n}\n\nstd::vector<std::pair<igl::NameHandle, igl::NameHandle>>\nShaderUniforms::getPossibleBufferAndMemberNames(const igl::NameHandle& blockTypeName,\n                                                const igl::NameHandle& blockInstanceName,\n                                                const igl::NameHandle& memberName) {\n  /**\n    Given an SparkSL/GLSL3 interface block:\n    ```\n      uniform BlockTypeName {\n        float f;\n      } blockInstanceName;\n    ```\n\n    The corresponding Legacy GLSL code:\n    ```\n      struct BlockTypeName {\n        float f;\n      }\n      uniform BlockTypeName blockInstanceName;\n    ```\n\n    The corresponding Metal code:\n    ```\n      struct BlockTypeName {\n        float f;\n      };\n      main(BlockTypeName& blockInstanceName) {\n        ...\n      }\n    ```\n\n    In OpenGL3, the name of the buffer block is `BlockTypeName` and the member name is 'memberName'.\n\n    In legacy OpenGL, we treat each member of the struct an individual uniform, so both the buffer\n    name and member name are `blockInstanceName.f`\n\n    In Metal, the name of the block is `blockInstanceName` and the member name is 'memberName'.\n  */\n  if (device_.getBackendType() == igl::BackendType::Metal) {\n    return {{blockInstanceName, memberName}};\n  } else {\n    if (device_.getBackendType() == igl::BackendType::OpenGL) {\n      auto qualifiedName =\n          ShaderUniforms::getQualifiedMemberName(blockTypeName, blockInstanceName, memberName);\n      return {{blockTypeName, memberName}, {qualifiedName, qualifiedName}};\n    }\n    return {{blockTypeName, memberName}};\n  }\n}\n\nvoid ShaderUniforms::setUniformBytes(const UniformDesc& uniformDesc,\n                                     const void* data,\n                                     size_t elementSize,\n                                     size_t count,\n                                     size_t arrayIndex) {\n  if (arrayIndex + count > uniformDesc.iglMemberDesc.arrayLength) {\n    IGL_LOG_ERROR_ONCE(\"[IGL][Error] Invalid range for uniform %s:  %zu,%zu,%zu\\n\",\n                       uniformDesc.iglMemberDesc.name.c_str(),\n                       arrayIndex,\n                       count,\n                       uniformDesc.iglMemberDesc.arrayLength);\n    return;\n  }\n  auto strongBuffer = uniformDesc.buffer.lock();\n  if (!strongBuffer) {\n    IGL_LOG_ERROR_ONCE(\"[IGL][Error] null uniform buffer %s!\\n\",\n                       uniformDesc.iglMemberDesc.name.c_str());\n    return;\n  }\n\n  uintptr_t subAllocatedOffset = 0;\n  if (strongBuffer->isSuballocated && strongBuffer->currentAllocation >= 0) {\n    subAllocatedOffset = strongBuffer->currentAllocation * strongBuffer->suballocationsSize;\n  }\n  const uintptr_t offset =\n      uniformDesc.iglMemberDesc.offset + elementSize * arrayIndex + subAllocatedOffset;\n\n  auto err = try_checked_memcpy((uint8_t*)strongBuffer->allocation->ptr + offset, // destination\n                                strongBuffer->allocation->size - offset, // max destination size\n                                data, // source\n                                elementSize * count // num bytes to copy\n  );\n  if (err != 0) {\n    IGL_LOG_ERROR_ONCE(\"[IGL][Error] Failed to update uniform buffer\\n\");\n  }\n}\n\nvoid ShaderUniforms::setUniformBytes(const igl::NameHandle& blockTypeName,\n                                     const igl::NameHandle& blockInstanceName,\n                                     const igl::NameHandle& memberName,\n                                     const void* data,\n                                     size_t elementSize,\n                                     size_t count,\n                                     size_t arrayIndex) {\n  auto possibleBufferNames =\n      getPossibleBufferAndMemberNames(blockTypeName, blockInstanceName, memberName);\n\n  for (auto& [bufferName, bufferMemberName] : possibleBufferNames) {\n    auto range = bufferDescs_.equal_range(bufferName);\n    if (range.first == range.second) {\n      continue;\n    }\n\n    for (auto bufferDescIt = range.first; bufferDescIt != range.second; ++bufferDescIt) {\n      auto& bufferDesc = bufferDescIt->second;\n      auto memberIndexIt = bufferDesc->memberIndices.find(bufferMemberName);\n      if (memberIndexIt == bufferDesc->memberIndices.end()) {\n        IGL_LOG_ERROR_ONCE(\n            \"Member %s not found in buffer %s\", bufferMemberName.c_str(), bufferName.c_str());\n        continue;\n      }\n      auto& uniformDesc = bufferDesc->uniforms[memberIndexIt->second];\n      setUniformBytes(uniformDesc, data, elementSize, count, arrayIndex);\n    }\n    return;\n  }\n  IGL_LOG_ERROR_ONCE(\"Buffer block not found: %s\", blockTypeName.c_str());\n}\n\nvoid ShaderUniforms::setUniformBytes(const igl::NameHandle& name,\n                                     const void* data,\n                                     size_t elementSize,\n                                     size_t count,\n                                     size_t arrayIndex) {\n  auto range = allUniformsByName_.equal_range(name);\n  if (range.first == range.second) {\n    IGL_LOG_ERROR_ONCE(\"[IGL][Error] Invalid uniform name: %s\\n\", name.c_str());\n    return;\n  }\n  for (auto it = range.first; it != range.second; ++it) {\n    auto& uniformDesc = it->second;\n    setUniformBytes(uniformDesc, data, elementSize, count, arrayIndex);\n  }\n}\n\nvoid ShaderUniforms::setBool(const igl::NameHandle& uniformName,\n                             const bool& value,\n                             size_t arrayIndex) {\n  setUniformBytes(uniformName, &value, sizeof(bool), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setBool(const igl::NameHandle& blockTypeName,\n                             const igl::NameHandle& blockInstanceName,\n                             const igl::NameHandle& memberName,\n                             const bool& value,\n                             size_t arrayIndex) {\n  setUniformBytes(\n      blockTypeName, blockInstanceName, memberName, &value, sizeof(bool), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setBoolArray(const igl::NameHandle& uniformName,\n                                  const bool* value,\n                                  size_t count,\n                                  size_t arrayIndex) {\n  setUniformBytes(uniformName, value, sizeof(bool), count, arrayIndex);\n}\n\nvoid ShaderUniforms::setBoolArray(const igl::NameHandle& blockTypeName,\n                                  const igl::NameHandle& blockInstanceName,\n                                  const igl::NameHandle& memberName,\n                                  const bool* value,\n                                  size_t count,\n                                  size_t arrayIndex) {\n  setUniformBytes(\n      blockTypeName, blockInstanceName, memberName, value, sizeof(bool), count, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat(const igl::NameHandle& uniformName,\n                              const iglu::simdtypes::float1& value,\n                              size_t arrayIndex) {\n  setUniformBytes(uniformName, &value, sizeof(iglu::simdtypes::float1), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat(const igl::NameHandle& blockTypeName,\n                              const igl::NameHandle& blockInstanceName,\n                              const igl::NameHandle& memberName,\n                              const iglu::simdtypes::float1& value,\n                              size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  &value,\n                  sizeof(iglu::simdtypes::float1),\n                  1,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setFloatArray(const igl::NameHandle& uniformName,\n                                   const iglu::simdtypes::float1* value,\n                                   size_t count,\n                                   size_t arrayIndex) {\n  setUniformBytes(uniformName, value, sizeof(iglu::simdtypes::float1), count, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloatArray(const igl::NameHandle& blockTypeName,\n                                   const igl::NameHandle& blockInstanceName,\n                                   const igl::NameHandle& memberName,\n                                   const iglu::simdtypes::float1* value,\n                                   size_t count,\n                                   size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  value,\n                  sizeof(iglu::simdtypes::float1),\n                  count,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat2(const igl::NameHandle& uniformName,\n                               const iglu::simdtypes::float2& value,\n                               size_t arrayIndex) {\n  setUniformBytes(uniformName, &value, sizeof(iglu::simdtypes::float2), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat2(const igl::NameHandle& blockTypeName,\n                               const igl::NameHandle& blockInstanceName,\n                               const igl::NameHandle& memberName,\n                               const iglu::simdtypes::float2& value,\n                               size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  &value,\n                  sizeof(iglu::simdtypes::float2),\n                  1,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat2Array(const igl::NameHandle& uniformName,\n                                    const iglu::simdtypes::float2* value,\n                                    size_t count,\n                                    size_t arrayIndex) {\n  setUniformBytes(uniformName, value, sizeof(iglu::simdtypes::float2), count, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat2Array(const igl::NameHandle& blockTypeName,\n                                    const igl::NameHandle& blockInstanceName,\n                                    const igl::NameHandle& memberName,\n                                    const iglu::simdtypes::float2* value,\n                                    size_t count,\n                                    size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  value,\n                  sizeof(iglu::simdtypes::float2),\n                  count,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat3(const igl::NameHandle& uniformName,\n                               const iglu::simdtypes::float3& value,\n                               size_t arrayIndex) {\n  setUniformBytes(uniformName, &value, sizeof(float[3]), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat3Array(const igl::NameHandle& uniformName,\n                                    const iglu::simdtypes::float3* value,\n                                    size_t count,\n                                    size_t arrayIndex) {\n  if (device_.getBackendType() == igl::BackendType::Metal) {\n    setUniformBytes(uniformName, value, sizeof(iglu::simdtypes::float3), count, arrayIndex);\n  } else {\n    // simdtypes::float3 is padded to have an extra float.\n    // This code path should not be used for Vulkan. (it should only be used for OpenGL when uniform\n    // blocks are not used).\n    const size_t size = sizeof(float) * 3u * count;\n    IGL_DEBUG_ASSERT(size <= 65536);\n    float* IGL_RESTRICT packedArray = reinterpret_cast<float*>(alloca(size));\n    float* IGL_RESTRICT packedArrayPtr = packedArray;\n    const float* paddedArrayPtr = reinterpret_cast<const float*>(value);\n    for (size_t i = 0; i < count; i++) {\n      for (int j = 0; j < 3; j++) {\n        *packedArrayPtr++ = *paddedArrayPtr++;\n      }\n      paddedArrayPtr++; // padded float\n    }\n    setUniformBytes(uniformName, packedArray, size, 1, arrayIndex);\n  }\n}\n\nvoid ShaderUniforms::setFloat4(const igl::NameHandle& uniformName,\n                               const iglu::simdtypes::float4& value,\n                               size_t arrayIndex) {\n  setUniformBytes(uniformName, &value, sizeof(iglu::simdtypes::float4), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat4(const igl::NameHandle& blockTypeName,\n                               const igl::NameHandle& blockInstanceName,\n                               const igl::NameHandle& memberName,\n                               const iglu::simdtypes::float4& value,\n                               size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  &value,\n                  sizeof(iglu::simdtypes::float4),\n                  1,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat4Array(const igl::NameHandle& uniformName,\n                                    const iglu::simdtypes::float4* value,\n                                    size_t count,\n                                    size_t arrayIndex) {\n  setUniformBytes(uniformName, value, sizeof(iglu::simdtypes::float4), count, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat4Array(const igl::NameHandle& blockTypeName,\n                                    const igl::NameHandle& blockInstanceName,\n                                    const igl::NameHandle& memberName,\n                                    const iglu::simdtypes::float4* value,\n                                    size_t count,\n                                    size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  value,\n                  sizeof(iglu::simdtypes::float4),\n                  count,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat2x2(const igl::NameHandle& uniformName,\n                                 const iglu::simdtypes::float2x2& value,\n                                 size_t arrayIndex) {\n  setUniformBytes(uniformName, &value, sizeof(iglu::simdtypes::float2x2), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat2x2(const igl::NameHandle& blockTypeName,\n                                 const igl::NameHandle& blockInstanceName,\n                                 const igl::NameHandle& memberName,\n                                 const iglu::simdtypes::float2x2& value,\n                                 size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  &value,\n                  sizeof(iglu::simdtypes::float2x2),\n                  1,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat2x2Array(const igl::NameHandle& uniformName,\n                                      const iglu::simdtypes::float2x2* value,\n                                      size_t count,\n                                      size_t arrayIndex) {\n  setUniformBytes(uniformName, value, sizeof(iglu::simdtypes::float2x2), count, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat2x2Array(const igl::NameHandle& blockTypeName,\n                                      const igl::NameHandle& blockInstanceName,\n                                      const igl::NameHandle& memberName,\n                                      const iglu::simdtypes::float2x2* value,\n                                      size_t count,\n                                      size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  value,\n                  sizeof(iglu::simdtypes::float2x2),\n                  count,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat3x3(const igl::NameHandle& uniformName,\n                                 const iglu::simdtypes::float3x3& value,\n                                 size_t arrayIndex) {\n  if (device_.getBackendType() == igl::BackendType::Metal ||\n      device_.getBackendType() == igl::BackendType::Vulkan) {\n    setUniformBytes(uniformName, &value, sizeof(iglu::simdtypes::float3x3), 1, arrayIndex);\n  } else {\n    // simdtypes::float3x3 has an extra float per float-vector.\n    // Remove it so we can send the packed version to OpenGL\n    float packedMatrix[9] = {0.0f};\n    const auto* paddedMatrixPtr = reinterpret_cast<const float*>(&value);\n    float* packedMatrixPtr = packedMatrix;\n    for (int i = 0; i < 3; i++) {\n      for (int j = 0; j < 3; j++) {\n        *packedMatrixPtr++ = *paddedMatrixPtr++;\n      }\n      paddedMatrixPtr++; // padded float\n    }\n    setUniformBytes(uniformName, &packedMatrix, sizeof(packedMatrix), 1, arrayIndex);\n  }\n}\n\nvoid ShaderUniforms::setFloat3x3(const igl::NameHandle& blockTypeName,\n                                 const igl::NameHandle& blockInstanceName,\n                                 const igl::NameHandle& uniformName,\n                                 const iglu::simdtypes::float3x3& value,\n                                 size_t arrayIndex) {\n  const bool isOglBlock = device_.getBackendType() == igl::BackendType::OpenGL &&\n                          bufferDescs_.find(blockTypeName) != bufferDescs_.end();\n  if (device_.getBackendType() == igl::BackendType::Metal ||\n      device_.getBackendType() == igl::BackendType::Vulkan || isOglBlock) {\n    setUniformBytes(blockTypeName,\n                    blockInstanceName,\n                    uniformName,\n                    &value,\n                    sizeof(iglu::simdtypes::float3x3),\n                    1,\n                    arrayIndex);\n  } else {\n    // simdtypes::float3x3 has an extra float per float-vector.\n    // Remove it so we can send the packed version to OpenGL\n    std::array<float, 9> packedMatrix{};\n    const auto* paddedMatrixPtr = reinterpret_cast<const float*>(&value);\n    float* packedMatrixPtr = packedMatrix.data();\n    for (int i = 0; i < 3; i++) {\n      for (int j = 0; j < 3; j++) {\n        *packedMatrixPtr++ = *paddedMatrixPtr++;\n      }\n      paddedMatrixPtr++; // padded float\n    }\n    setUniformBytes(blockTypeName,\n                    blockInstanceName,\n                    uniformName,\n                    &packedMatrix,\n                    sizeof(packedMatrix),\n                    1,\n                    arrayIndex);\n  }\n}\n\nvoid ShaderUniforms::setFloat3x3Array(const igl::NameHandle& uniformName,\n                                      const iglu::simdtypes::float3x3* value,\n                                      size_t count,\n                                      size_t arrayIndex) {\n  if (device_.getBackendType() == igl::BackendType::Metal ||\n      device_.getBackendType() == igl::BackendType::Vulkan) {\n    setUniformBytes(uniformName, value, sizeof(iglu::simdtypes::float3x3), count, arrayIndex);\n  } else {\n    // simdtypes::float3x3 has an extra float per float-vector.\n    // Remove it so we can send the packed version to OpenGL\n    const auto* paddedMatrixPtr = reinterpret_cast<const float*>(value);\n    auto* packedMatrix = new float[9 * count];\n    auto* packedMatrixPtr = packedMatrix;\n    for (int n = 0; n < count; n++) {\n      for (int i = 0; i < 3; i++) {\n        for (int j = 0; j < 3; j++) {\n          *packedMatrixPtr++ = *paddedMatrixPtr++;\n        }\n        paddedMatrixPtr++; // skip over padded float\n      }\n    }\n    setUniformBytes(uniformName, packedMatrix, sizeof(float) * 9, count, arrayIndex);\n    delete[] packedMatrix;\n  }\n}\n\nvoid ShaderUniforms::setFloat3x3Array(const igl::NameHandle& blockTypeName,\n                                      const igl::NameHandle& blockInstanceName,\n                                      const igl::NameHandle& memberName,\n                                      const iglu::simdtypes::float3x3* value,\n                                      size_t count,\n                                      size_t arrayIndex) {\n  auto isOglBlock = device_.getBackendType() == igl::BackendType::OpenGL &&\n                    bufferDescs_.find(blockTypeName) != bufferDescs_.end();\n\n  if (device_.getBackendType() == igl::BackendType::Metal ||\n      device_.getBackendType() == igl::BackendType::Vulkan || isOglBlock) {\n    setUniformBytes(blockTypeName,\n                    blockInstanceName,\n                    memberName,\n                    value,\n                    sizeof(iglu::simdtypes::float3x3),\n                    count,\n                    arrayIndex);\n  } else {\n    // simdtypes::float3x3 has an extra float per float-vector.\n    // Remove it so we can send the packed version to OpenGL\n    const size_t size = sizeof(float) * 9u * count;\n    IGL_DEBUG_ASSERT(size <= 65536);\n    float* IGL_RESTRICT packedMatrix = reinterpret_cast<float*>(alloca(size));\n    float* IGL_RESTRICT packedMatrixPtr = packedMatrix;\n\n    const auto* paddedMatrixPtr = reinterpret_cast<const float*>(value);\n    for (size_t n = 0; n < count; n++) {\n      for (int i = 0; i < 3; i++) {\n        for (int j = 0; j < 3; j++) {\n          *packedMatrixPtr++ = *paddedMatrixPtr++;\n        }\n        paddedMatrixPtr++; // skip over padded float\n      }\n    }\n\n    setUniformBytes(blockTypeName,\n                    blockInstanceName,\n                    memberName,\n                    packedMatrix,\n                    sizeof(float) * 9,\n                    count,\n                    arrayIndex);\n  }\n}\n\nvoid ShaderUniforms::setFloat4x4(const igl::NameHandle& uniformName,\n                                 const iglu::simdtypes::float4x4& value,\n                                 size_t arrayIndex) {\n  setUniformBytes(uniformName, &value, sizeof(iglu::simdtypes::float4x4), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat4x4(const igl::NameHandle& blockTypeName,\n                                 const igl::NameHandle& blockInstanceName,\n                                 const igl::NameHandle& memberName,\n                                 const iglu::simdtypes::float4x4& value,\n                                 size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  &value,\n                  sizeof(iglu::simdtypes::float4x4),\n                  1,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat4x4Array(const igl::NameHandle& uniformName,\n                                      const iglu::simdtypes::float4x4* value,\n                                      size_t count,\n                                      size_t arrayIndex) {\n  setUniformBytes(uniformName, value, sizeof(iglu::simdtypes::float4x4), count, arrayIndex);\n}\n\nvoid ShaderUniforms::setFloat4x4Array(const igl::NameHandle& blockTypeName,\n                                      const igl::NameHandle& blockInstanceName,\n                                      const igl::NameHandle& memberName,\n                                      const iglu::simdtypes::float4x4* value,\n                                      size_t count,\n                                      size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  value,\n                  sizeof(iglu::simdtypes::float4x4),\n                  count,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setInt(const igl::NameHandle& uniformName,\n                            const iglu::simdtypes::int1& value,\n                            size_t arrayIndex) {\n  setUniformBytes(uniformName, &value, sizeof(iglu::simdtypes::int1), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setInt(const igl::NameHandle& blockTypeName,\n                            const igl::NameHandle& blockInstanceName,\n                            const igl::NameHandle& memberName,\n                            const iglu::simdtypes::int1& value,\n                            size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  &value,\n                  sizeof(iglu::simdtypes::int1),\n                  1,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setInt2(const igl::NameHandle& uniformName,\n                             const iglu::simdtypes::int2& value,\n                             size_t arrayIndex) {\n  setUniformBytes(uniformName, &value, sizeof(iglu::simdtypes::int2), 1, arrayIndex);\n}\n\nvoid ShaderUniforms::setInt2(const igl::NameHandle& blockTypeName,\n                             const igl::NameHandle& blockInstanceName,\n                             const igl::NameHandle& memberName,\n                             const iglu::simdtypes::int2& value,\n                             size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  &value,\n                  sizeof(iglu::simdtypes::int2),\n                  1,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setIntArray(const igl::NameHandle& uniformName,\n                                 const iglu::simdtypes::int1* value,\n                                 size_t count,\n                                 size_t arrayIndex) {\n  setUniformBytes(uniformName, value, sizeof(iglu::simdtypes::int1), count, arrayIndex);\n}\n\nvoid ShaderUniforms::setIntArray(const igl::NameHandle& blockTypeName,\n                                 const igl::NameHandle& blockInstanceName,\n                                 const igl::NameHandle& memberName,\n                                 const iglu::simdtypes::int1* value,\n                                 size_t count,\n                                 size_t arrayIndex) {\n  setUniformBytes(blockTypeName,\n                  blockInstanceName,\n                  memberName,\n                  value,\n                  sizeof(iglu::simdtypes::int1),\n                  count,\n                  arrayIndex);\n}\n\nvoid ShaderUniforms::setTexture(const std::string& name,\n                                const std::shared_ptr<igl::ITexture>& value,\n                                const std::shared_ptr<igl::ISamplerState>& sampler,\n                                IGL_MAYBE_UNUSED size_t arrayIndex) {\n  IGL_DEBUG_ASSERT(arrayIndex == 0, \"texture arrays not supported\");\n  auto it = allTexturesByName_.find(name);\n  if (it == allTexturesByName_.end()) {\n    IGL_LOG_ERROR_ONCE(\"[IGL][Error] Invalid texture name: %s\\n\", name.c_str());\n    return;\n  }\n  allTexturesByName_[name] = TextureSlot{.texture = value, .rawTexture = value.get()};\n  allSamplersByName_[name] = SamplerSlot{.sampler = sampler, .rawSampler = sampler.get()};\n}\n\nvoid ShaderUniforms::setTexture(const std::string& name,\n                                igl::ITexture* value,\n                                const std::shared_ptr<igl::ISamplerState>& sampler) {\n  auto it = allTexturesByName_.find(name);\n  if (it == allTexturesByName_.end()) {\n    IGL_LOG_ERROR_ONCE(\"[IGL][Error] Invalid texture name: %s\\n\", name.c_str());\n    return;\n  }\n  allTexturesByName_[name] = TextureSlot{.texture = nullptr, .rawTexture = value}; // non-owning\n  allSamplersByName_[name] = SamplerSlot{.sampler = sampler, .rawSampler = sampler.get()}; // owning\n}\n\nvoid ShaderUniforms::setTexture(const std::string& name,\n                                igl::ITexture* value,\n                                igl::ISamplerState* sampler) {\n  auto it = allTexturesByName_.find(name);\n  if (it == allTexturesByName_.end()) {\n    IGL_LOG_ERROR_ONCE(\"[IGL][Error] Invalid texture name: %s\\n\", name.c_str());\n    return;\n  }\n  allTexturesByName_[name] = TextureSlot{.texture = nullptr, .rawTexture = value}; // non-owning\n  allSamplersByName_[name] = SamplerSlot{.sampler = nullptr, .rawSampler = sampler}; // non-owning\n}\n\n#if IGL_BACKEND_OPENGL\nvoid ShaderUniforms::bindUniformOpenGL(const igl::NameHandle& uniformName,\n                                       const UniformDesc& uniformDesc,\n                                       const igl::IRenderPipelineState& pipelineState,\n                                       igl::IRenderCommandEncoder& encoder) {\n  const igl::BufferArgDesc::BufferMemberDesc& iglMemberDesc = uniformDesc.iglMemberDesc;\n  igl::UniformDesc desc{\n      .location = pipelineState.getIndexByName(uniformName, igl::ShaderStage::Fragment),\n      .type = iglMemberDesc.type,\n      .numElements = iglMemberDesc.arrayLength,\n      .offset = iglMemberDesc.offset,\n      .elementStride = igl::sizeForUniformType(iglMemberDesc.type),\n  };\n\n  if (desc.location >= 0) {\n    auto strongBuffer = uniformDesc.buffer.lock();\n    if (strongBuffer) {\n      // We are binding individual uniforms. Confirm that iglBuffer is null\n      IGL_DEBUG_ASSERT(strongBuffer->allocation->iglBuffer == nullptr);\n      encoder.bindUniform(desc, strongBuffer->allocation->ptr);\n    }\n  } else {\n    IGL_LOG_ERROR_ONCE(\"[IGL][Error] Uniform not found in shader: %s\\n\", uniformName.c_str());\n  }\n}\n#endif\n\nvoid ShaderUniforms::bindBuffer(igl::IDevice& device,\n                                const igl::IRenderPipelineState& pipelineState,\n                                igl::IRenderCommandEncoder& encoder,\n                                BufferDesc* buffer) {\n  if (!buffer) {\n    return;\n  }\n  if (device.getBackendType() == igl::BackendType::OpenGL) {\n#if IGL_BACKEND_OPENGL\n    const auto& uniformName = buffer->iglBufferDesc.name;\n    if (buffer->iglBufferDesc.isUniformBlock) {\n      IGL_DEBUG_ASSERT(buffer->allocation->iglBuffer != nullptr);\n      buffer->allocation->iglBuffer->upload(buffer->allocation->ptr,\n                                            igl::BufferRange(buffer->allocation->size, 0));\n      const auto& glPipelineState =\n          static_cast<const igl::opengl::RenderPipelineState&>(pipelineState);\n      encoder.bindBuffer(glPipelineState.getUniformBlockBindingPoint(uniformName),\n                         buffer->allocation->iglBuffer.get());\n    } else {\n      // not a uniform block\n      IGL_DEBUG_ASSERT(buffer->iglBufferDesc.name == buffer->iglBufferDesc.members[0].name);\n      IGL_DEBUG_ASSERT(buffer->uniforms.size() == 1);\n      IGL_DEBUG_ASSERT(buffer->iglBufferDesc.name == buffer->uniforms[0].iglMemberDesc.name);\n      auto& uniformDesc = buffer->uniforms[0];\n\n      bindUniformOpenGL(uniformName, uniformDesc, pipelineState, encoder);\n    }\n#endif\n  } else {\n    if (buffer->allocation->iglBuffer) {\n      uintptr_t subAllocatedOffset = 0;\n      size_t uploadSize = buffer->allocation->size;\n      if (buffer->isSuballocated && buffer->currentAllocation >= 0) {\n        subAllocatedOffset = buffer->currentAllocation * buffer->suballocationsSize;\n        uploadSize = buffer->suballocationsSize;\n      }\n\n      buffer->allocation->iglBuffer->upload((uint8_t*)buffer->allocation->ptr + subAllocatedOffset,\n                                            igl::BufferRange(uploadSize, subAllocatedOffset));\n      encoder.bindBuffer(buffer->iglBufferDesc.bufferIndex,\n                         buffer->allocation->iglBuffer.get(),\n                         subAllocatedOffset);\n    } else {\n      encoder.bindBytes(buffer->iglBufferDesc.bufferIndex,\n                        bindTargetForShaderStage(buffer->iglBufferDesc.shaderStage),\n                        buffer->allocation->ptr,\n                        buffer->iglBufferDesc.bufferDataSize);\n    }\n  }\n}\n\n// Bind the block which the specified uniform belongs to.\nvoid ShaderUniforms::bind(igl::IDevice& device,\n                          const igl::IRenderPipelineState& pipelineState,\n                          igl::IRenderCommandEncoder& encoder,\n                          const igl::NameHandle& uniformName) {\n  auto range = allUniformsByName_.equal_range(uniformName);\n  if (range.first == range.second) {\n    IGL_LOG_ERROR_ONCE(\"[IGL][Error] Invalid uniform name: %s\\n\", uniformName.c_str());\n    return;\n  }\n\n  for (auto it = range.first; it != range.second; ++it) {\n    auto strongBuffer = it->second.buffer.lock();\n    bindBuffer(device, pipelineState, encoder, strongBuffer.get());\n  }\n}\n\nvoid ShaderUniforms::bind(igl::IDevice& device,\n                          const igl::IRenderPipelineState& pipelineState,\n                          igl::IRenderCommandEncoder& encoder,\n                          const igl::NameHandle& blockName,\n                          const igl::NameHandle& blockInstanceName,\n                          const igl::NameHandle& memberName) {\n  auto possibleBufferNames =\n      getPossibleBufferAndMemberNames(blockName, blockInstanceName, memberName);\n  for (auto& [bufferName, bufferMemberName] : possibleBufferNames) {\n    auto range = bufferDescs_.equal_range(bufferName);\n    for (auto bufferDescIt = range.first; bufferDescIt != range.second; ++bufferDescIt) {\n      bindBuffer(device, pipelineState, encoder, bufferDescIt->second.get());\n    }\n  }\n}\n\nvoid ShaderUniforms::bind(igl::IDevice& device,\n                          const igl::IRenderPipelineState& pipelineState,\n                          igl::IRenderCommandEncoder& encoder) {\n  for (auto& [name, bufferDesc] : bufferDescs_) {\n    bindBuffer(device, pipelineState, encoder, bufferDesc.get());\n  }\n\n  for (auto& textureDesc : textureDescs_) {\n    auto textureIt = allTexturesByName_.find(textureDesc.name);\n    auto samplerIt = allSamplersByName_.find(textureDesc.name);\n    if (textureIt == allTexturesByName_.end() || samplerIt == allSamplersByName_.end()) {\n      IGL_LOG_ERROR_ONCE(\"[IGL][Warning] No texture set for sampler: %s\\n\",\n                         textureDesc.name.c_str());\n      continue;\n    }\n    encoder.bindTexture(textureDesc.textureIndex,\n                        bindTargetForShaderStage(textureDesc.shaderStage),\n                        textureIt->second.rawTexture ? textureIt->second.rawTexture\n                                                     : textureIt->second.texture.get());\n\n    // Assumption: each texture has an associated sampler at the same index in Metal\n    encoder.bindSamplerState(textureDesc.textureIndex,\n                             bindTargetForShaderStage(textureDesc.shaderStage),\n                             samplerIt->second.rawSampler ? samplerIt->second.rawSampler\n                                                          : samplerIt->second.sampler.get());\n  }\n}\n\nigl::Result ShaderUniforms::setSuballocationIndex(const igl::NameHandle& name, int index) {\n  if (device_.getBackendType() != igl::BackendType::Vulkan) {\n    return igl::Result(igl::Result::Code::Unsupported,\n                       \"Suballocation is only available for Vulkan for now\");\n  }\n\n  if (index < 0) {\n    return igl::Result(igl::Result::Code::ArgumentOutOfRange,\n                       \"Invalid argument, index cannot be < 0\");\n  }\n\n  auto range = allUniformsByName_.equal_range(name);\n  if (range.first == range.second) {\n    return igl::Result(igl::Result::Code::RuntimeError,\n                       \"Could not find uniform \" + name.toString());\n  }\n\n  // At least one of the uniforms should be updated\n  bool setIndexSuccess = false;\n\n  for (auto it = range.first; it != range.second; ++it) {\n    auto& uniformDesc = it->second;\n\n    auto strongBuffer = uniformDesc.buffer.lock();\n\n    if (!strongBuffer || !strongBuffer->isSuballocated) {\n      continue;\n    }\n\n    // if index already exists, just update the allocation index\n    if (std::find(strongBuffer->suballocations.begin(),\n                  strongBuffer->suballocations.end(),\n                  index) != strongBuffer->suballocations.end()) {\n      strongBuffer->currentAllocation = index;\n    } else {\n      // Add new allocation\n      // Make sure we have enough space\n      auto currentSize = strongBuffer->suballocations.size() * strongBuffer->suballocationsSize;\n      if (currentSize + strongBuffer->suballocationsSize > strongBuffer->allocation->size) {\n        return igl::Result(igl::Result::Code::ArgumentOutOfRange,\n                           \"Cannot add new suballocation, exceeding buffer size of \" +\n                               std::to_string(strongBuffer->allocation->size));\n      }\n\n      strongBuffer->currentAllocation = index;\n      strongBuffer->suballocations.push_back(index);\n    }\n\n    setIndexSuccess = true;\n  }\n\n  if (setIndexSuccess) {\n    return igl::Result();\n  } else {\n    return igl::Result(igl::Result::Code::RuntimeError,\n                       \"Could not update suballocation index for \" + name.toString());\n  }\n}\n\nbool ShaderUniforms::containsUniform(const igl::NameHandle& blockTypeName,\n                                     const igl::NameHandle& blockInstanceName,\n                                     const igl::NameHandle& memberName) {\n  auto possibleBufferNames =\n      getPossibleBufferAndMemberNames(blockTypeName, blockInstanceName, memberName);\n\n  for (auto& [bufferName, bufferMemberName] : possibleBufferNames) {\n    auto bufferDescIt = bufferDescs_.find(bufferName);\n    if (bufferDescIt == bufferDescs_.end()) {\n      continue;\n    }\n    auto& bufferDesc = bufferDescIt->second;\n    if (bufferDesc->memberIndices.find(bufferMemberName) != bufferDesc->memberIndices.end()) {\n      return true;\n    }\n  }\n  return false;\n}\n} // namespace iglu::material\n"
  },
  {
    "path": "IGLU/simple_renderer/ShaderUniforms.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <memory>\n#include <unordered_map>\n#include <utility>\n#include <vector>\n#include <igl/Common.h>\n#include <igl/IGL.h>\n#include <igl/NameHandle.h>\n#include <igl/Shader.h>\n\nnamespace iglu::material {\n\n/// Handles allocation, updating and binding of shader uniforms. It uses reflection\n/// information to generate the underlying data and provides a simple API to manipulate it.\nclass ShaderUniforms final {\n public:\n  // Setters: use these to update uniforms, individually or in bulk.\n  void setBool(const igl::NameHandle& uniformName, const bool& value, size_t arrayIndex = 0);\n  void setBool(const igl::NameHandle& blockTypeName,\n               const igl::NameHandle& blockInstanceName,\n               const igl::NameHandle& memberName,\n               const bool& value,\n               size_t arrayIndex = 0);\n  void setBoolArray(const igl::NameHandle& uniformName,\n                    const bool* value,\n                    size_t count = 1,\n                    size_t arrayIndex = 0);\n  void setBoolArray(const igl::NameHandle& blockTypeName,\n                    const igl::NameHandle& blockInstanceName,\n                    const igl::NameHandle& memberName,\n                    const bool* value,\n                    size_t count = 1,\n                    size_t arrayIndex = 0);\n\n  void setFloat(const igl::NameHandle& uniformName,\n                const iglu::simdtypes::float1& value,\n                size_t arrayIndex = 0);\n  void setFloat(const igl::NameHandle& blockTypeName,\n                const igl::NameHandle& blockInstanceName,\n                const igl::NameHandle& memberName,\n                const iglu::simdtypes::float1& value,\n                size_t arrayIndex = 0);\n  void setFloatArray(const igl::NameHandle& uniformName,\n                     const iglu::simdtypes::float1* value,\n                     size_t count = 1,\n                     size_t arrayIndex = 0);\n  void setFloatArray(const igl::NameHandle& blockTypeName,\n                     const igl::NameHandle& blockInstanceName,\n                     const igl::NameHandle& memberName,\n                     const iglu::simdtypes::float1* value,\n                     size_t count = 1,\n                     size_t arrayIndex = 0);\n\n  void setFloat2(const igl::NameHandle& uniformName,\n                 const iglu::simdtypes::float2& value,\n                 size_t arrayIndex = 0);\n  void setFloat2(const igl::NameHandle& blockTypeName,\n                 const igl::NameHandle& blockInstanceName,\n                 const igl::NameHandle& memberName,\n                 const iglu::simdtypes::float2& value,\n                 size_t arrayIndex = 0);\n  void setFloat2Array(const igl::NameHandle& uniformName,\n                      const iglu::simdtypes::float2* value,\n                      size_t count = 1,\n                      size_t arrayIndex = 0);\n  void setFloat2Array(const igl::NameHandle& blockTypeName,\n                      const igl::NameHandle& blockInstanceName,\n                      const igl::NameHandle& memberName,\n                      const iglu::simdtypes::float2* value,\n                      size_t count = 1,\n                      size_t arrayIndex = 0);\n\n  void setFloat3(const igl::NameHandle& uniformName,\n                 const iglu::simdtypes::float3& value,\n                 size_t arrayIndex = 0);\n  void setFloat3Array(const igl::NameHandle& uniformName,\n                      const iglu::simdtypes::float3* value,\n                      size_t count = 1,\n                      size_t arrayIndex = 0);\n\n  void setFloat4(const igl::NameHandle& uniformName,\n                 const iglu::simdtypes::float4& value,\n                 size_t arrayIndex = 0);\n  void setFloat4(const igl::NameHandle& blockTypeName,\n                 const igl::NameHandle& blockInstanceName,\n                 const igl::NameHandle& memberName,\n                 const iglu::simdtypes::float4& value,\n                 size_t arrayIndex = 0);\n  void setFloat4Array(const igl::NameHandle& uniformName,\n                      const iglu::simdtypes::float4* value,\n                      size_t count = 1,\n                      size_t arrayIndex = 0);\n  void setFloat4Array(const igl::NameHandle& blockTypeName,\n                      const igl::NameHandle& blockInstanceName,\n                      const igl::NameHandle& memberName,\n                      const iglu::simdtypes::float4* value,\n                      size_t count = 1,\n                      size_t arrayIndex = 0);\n\n  void setFloat2x2(const igl::NameHandle& uniformName,\n                   const iglu::simdtypes::float2x2& value,\n                   size_t arrayIndex = 0);\n  void setFloat2x2(const igl::NameHandle& blockTypeName,\n                   const igl::NameHandle& blockInstanceName,\n                   const igl::NameHandle& memberName,\n                   const iglu::simdtypes::float2x2& value,\n                   size_t arrayIndex = 0);\n  void setFloat2x2Array(const igl::NameHandle& uniformName,\n                        const iglu::simdtypes::float2x2* value,\n                        size_t count = 1,\n                        size_t arrayIndex = 0);\n  void setFloat2x2Array(const igl::NameHandle& blockTypeName,\n                        const igl::NameHandle& blockInstanceName,\n                        const igl::NameHandle& memberName,\n                        const iglu::simdtypes::float2x2* value,\n                        size_t count = 1,\n                        size_t arrayIndex = 0);\n\n  void setFloat3x3(const igl::NameHandle& uniformName,\n                   const iglu::simdtypes::float3x3& value,\n                   size_t arrayIndex = 0);\n  void setFloat3x3(const igl::NameHandle& blockTypeName,\n                   const igl::NameHandle& blockInstanceName,\n                   const igl::NameHandle& uniformName,\n                   const iglu::simdtypes::float3x3& value,\n                   size_t arrayIndex = 0);\n  void setFloat3x3Array(const igl::NameHandle& uniformName,\n                        const iglu::simdtypes::float3x3* value,\n                        size_t count = 1,\n                        size_t arrayIndex = 0);\n  void setFloat3x3Array(const igl::NameHandle& blockTypeName,\n                        const igl::NameHandle& blockInstanceName,\n                        const igl::NameHandle& memberName,\n                        const iglu::simdtypes::float3x3* value,\n                        size_t count = 1,\n                        size_t arrayIndex = 0);\n\n  void setFloat4x4(const igl::NameHandle& uniformName,\n                   const iglu::simdtypes::float4x4& value,\n                   size_t arrayIndex = 0);\n  void setFloat4x4(const igl::NameHandle& blockTypeName,\n                   const igl::NameHandle& blockInstanceName,\n                   const igl::NameHandle& memberName,\n                   const iglu::simdtypes::float4x4& value,\n                   size_t arrayIndex = 0);\n  void setFloat4x4Array(const igl::NameHandle& uniformName,\n                        const iglu::simdtypes::float4x4* value,\n                        size_t count = 1,\n                        size_t arrayIndex = 0);\n  void setFloat4x4Array(const igl::NameHandle& blockTypeName,\n                        const igl::NameHandle& blockInstanceName,\n                        const igl::NameHandle& memberName,\n                        const iglu::simdtypes::float4x4* value,\n                        size_t count = 1,\n                        size_t arrayIndex = 0);\n\n  void setInt(const igl::NameHandle& uniformName,\n              const iglu::simdtypes::int1& value,\n              size_t arrayIndex = 0);\n  void setInt(const igl::NameHandle& blockTypeName,\n              const igl::NameHandle& blockInstanceName,\n              const igl::NameHandle& memberName,\n              const iglu::simdtypes::int1& value,\n              size_t arrayIndex = 0);\n  void setIntArray(const igl::NameHandle& uniformName,\n                   const iglu::simdtypes::int1* value,\n                   size_t count = 1,\n                   size_t arrayIndex = 0);\n  void setIntArray(const igl::NameHandle& blockTypeName,\n                   const igl::NameHandle& blockInstanceName,\n                   const igl::NameHandle& memberName,\n                   const iglu::simdtypes::int1* value,\n                   size_t count = 1,\n                   size_t arrayIndex = 0);\n\n  void setInt2(const igl::NameHandle& uniformName,\n               const iglu::simdtypes::int2& value,\n               size_t arrayIndex = 0);\n  void setInt2(const igl::NameHandle& blockTypeName,\n               const igl::NameHandle& blockInstanceName,\n               const igl::NameHandle& memberName,\n               const iglu::simdtypes::int2& value,\n               size_t arrayIndex = 0);\n\n  void setTexture(const std::string& name,\n                  const std::shared_ptr<igl::ITexture>& value,\n                  const std::shared_ptr<igl::ISamplerState>& sampler,\n                  size_t arrayIndex = 0);\n\n  void setTexture(const std::string& name,\n                  igl::ITexture* value,\n                  const std::shared_ptr<igl::ISamplerState>& sampler);\n\n  void setTexture(const std::string& name, igl::ITexture* value, igl::ISamplerState* sampler);\n\n  /// Binds all relevant states in 'encoder' in preparation for drawing.\n  void bind(igl::IDevice& device,\n            const igl::IRenderPipelineState& pipelineState,\n            igl::IRenderCommandEncoder& encoder);\n\n  void bind(igl::IDevice& device,\n            const igl::IRenderPipelineState& pipelineState,\n            igl::IRenderCommandEncoder& encoder,\n            const igl::NameHandle& uniformName);\n\n  void bind(igl::IDevice& device,\n            const igl::IRenderPipelineState& pipelineState,\n            igl::IRenderCommandEncoder& encoder,\n            const igl::NameHandle& blockName,\n            const igl::NameHandle& blockInstanceName,\n            const igl::NameHandle& memberName);\n\n  /**\n   * Uniform/Storage buffers can be suballocated, for scenarios where\n   * we only want to update a portion of a buffer\n   *\n   * Each allocation has the same size, so we don't need to track\n   * the size per allocation. When setSubAllocationIndex is called followed\n   * by the uniform being updated, it will only update with the offset = index * allocationSize\n   *\n   * @param name The uniform name\n   * @param index The index within the buffer\n   * @return indices whether setting the index was successful or not\n   */\n  igl::Result setSuballocationIndex(const igl::NameHandle& name, int index);\n\n  inline bool containsUniform(const igl::NameHandle& uniformName) const {\n    return allUniformsByName_.count(uniformName) > 0;\n  }\n\n  bool containsUniform(const igl::NameHandle& blockTypeName,\n                       const igl::NameHandle& blockInstanceName,\n                       const igl::NameHandle& memberName);\n\n  class MemoizedQualifiedMemberNameCalculator {\n   public:\n    igl::NameHandle getQualifiedMemberName(const igl::NameHandle& blockTypeName,\n                                           const igl::NameHandle& blockInstanceName,\n                                           const igl::NameHandle& memberName) const;\n\n   private:\n    mutable std::unordered_map<std::pair<igl::NameHandle, igl::NameHandle>, igl::NameHandle>\n        qualifiedMemberNameCache_;\n  };\n\n  igl::NameHandle getQualifiedMemberName(const igl::NameHandle& blockTypeName,\n                                         const igl::NameHandle& blockInstanceName,\n                                         const igl::NameHandle& memberName);\n\n  ShaderUniforms(igl::IDevice& device,\n                 const igl::IRenderPipelineReflection& reflection,\n                 bool enableSuballocationforVulkan = true);\n  ~ShaderUniforms();\n\n private:\n  struct BufferAllocation {\n    void* ptr = nullptr;\n    size_t size = 0;\n    std::shared_ptr<igl::IBuffer> iglBuffer;\n    bool dirty = false;\n\n    BufferAllocation(void* ptr, size_t size, std::shared_ptr<igl::IBuffer> buffer) :\n      ptr(ptr), size(size), iglBuffer(std::move(buffer)) {}\n  };\n\n  struct BufferDesc;\n  struct UniformDesc {\n    igl::BufferArgDesc::BufferMemberDesc iglMemberDesc;\n    std::weak_ptr<BufferDesc> buffer;\n  };\n  struct BufferDesc {\n    igl::BufferArgDesc iglBufferDesc;\n    std::shared_ptr<BufferAllocation> allocation;\n    std::vector<UniformDesc> uniforms;\n    std::unordered_map<igl::NameHandle, int> memberIndices;\n\n    // For suballocation:\n    bool isSuballocated = false;\n    size_t suballocationsSize = 0; // this is a fixed size\n    int currentAllocation = -1; // Which allocation are we updating/binding?\n    std::vector<int> suballocations;\n  };\n\n  igl::IDevice& device_;\n\n  std::vector<std::shared_ptr<BufferAllocation>> allocations_;\n\n  std::unordered_multimap<igl::NameHandle, std::shared_ptr<BufferDesc>> bufferDescs_;\n\n  std::unordered_multimap<igl::NameHandle, UniformDesc> allUniformsByName_;\n\n  MemoizedQualifiedMemberNameCalculator memoizedQualifiedMemberNameCalculator_;\n\n  struct TextureSlot {\n    std::shared_ptr<igl::ITexture> texture;\n    igl::ITexture* rawTexture = nullptr;\n  };\n\n  struct SamplerSlot {\n    std::shared_ptr<igl::ISamplerState> sampler;\n    igl::ISamplerState* rawSampler = nullptr;\n  };\n\n  std::vector<igl::TextureArgDesc> textureDescs_;\n  std::unordered_map<std::string, TextureSlot> allTexturesByName_;\n  std::unordered_map<std::string, SamplerSlot> allSamplersByName_;\n\n  std::vector<std::pair<igl::NameHandle, igl::NameHandle>> getPossibleBufferAndMemberNames(\n      const igl::NameHandle& blockTypeName,\n      const igl::NameHandle& blockInstanceName,\n      const igl::NameHandle& memberName);\n\n  void setUniformBytes(const UniformDesc& uniformDesc,\n                       const void* data,\n                       size_t elementSize,\n                       size_t count,\n                       size_t arrayIndex);\n\n  void setUniformBytes(const igl::NameHandle& blockTypeName,\n                       const igl::NameHandle& blockInstanceName,\n                       const igl::NameHandle& memberName,\n                       const void* data,\n                       size_t elementSize,\n                       size_t count,\n                       size_t arrayIndex);\n\n  void setUniformBytes(const igl::NameHandle& name,\n                       const void* data,\n                       size_t elementSize,\n                       size_t count,\n                       size_t arrayIndex);\n\n  void bindUniformOpenGL(const igl::NameHandle& uniformName,\n                         const UniformDesc& uniformDesc,\n                         const igl::IRenderPipelineState& pipelineState,\n                         igl::IRenderCommandEncoder& encoder);\n\n  void bindBuffer(igl::IDevice& device,\n                  const igl::IRenderPipelineState& pipelineState,\n                  igl::IRenderCommandEncoder& encoder,\n                  BufferDesc* buffer);\n};\n\n} // namespace iglu::material\n"
  },
  {
    "path": "IGLU/simple_renderer/VertexData.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include \"VertexData.h\"\n\n#include <utility>\n\nnamespace iglu::vertexdata {\n\nVertexData::VertexData(std::shared_ptr<igl::IVertexInputState> vis,\n                       std::shared_ptr<igl::IBuffer> vertexBuffer,\n                       std::shared_ptr<igl::IBuffer> indexBuffer,\n                       igl::IndexFormat indexBufferFormat,\n                       const PrimitiveDesc& primitiveDesc,\n                       igl::PrimitiveType topology) :\n  vis_(std::move(vis)),\n  vb_(std::move(vertexBuffer)),\n  ib_(std::move(indexBuffer)),\n  ibFormat_(indexBufferFormat),\n  primitiveDesc_(primitiveDesc),\n  usedBytes_(vb_->getSizeInBytes()),\n  topology_(topology) {}\n\nVertexData::VertexData(igl::IDevice& device,\n                       const std::shared_ptr<igl::IVertexInputState>& vis,\n                       size_t bufferSize) :\n  VertexData(vis,\n             device.createBuffer(igl::BufferDesc{.type = igl::BufferDesc::BufferTypeBits::Vertex,\n                                                 .data = nullptr,\n                                                 .length = bufferSize,\n                                                 .storage = igl::ResourceStorage::Shared},\n                                 nullptr),\n             nullptr,\n             igl::IndexFormat::UInt16,\n             {},\n             igl::PrimitiveType::Point) {\n  usedBytes_ = 0;\n}\n\nvoid VertexData::populatePipelineDescriptor(igl::RenderPipelineDesc& pipelineDesc) const {\n  pipelineDesc.vertexInputState = vis_;\n  pipelineDesc.topology = topology_;\n  pipelineDesc.frontFaceWinding = primitiveDesc_.frontFaceWinding;\n}\n\nbool VertexData::appendData(const void* data, size_t size, size_t numPrimitives) {\n  IGL_DEBUG_ASSERT(vb_);\n\n  if (!vb_) {\n    return false;\n  }\n\n  if (usedBytes_ + size > vb_->getSizeInBytes()) {\n    return false;\n  }\n\n  vb_->upload(data, {size, usedBytes_});\n\n  primitiveDesc_.numEntries += numPrimitives;\n  usedBytes_ += size;\n\n  return true;\n}\n\nvoid VertexData::draw(igl::IRenderCommandEncoder& commandEncoder) {\n  if (primitiveDesc_.numEntries == 0) {\n    return;\n  }\n  // Assumption: we don't need buffer offset\n  if (vb_) {\n    commandEncoder.bindVertexBuffer(0, *vb_);\n  }\n\n  if (ib_) {\n    commandEncoder.bindIndexBuffer(*ib_, ibFormat_, primitiveDesc_.offset);\n    commandEncoder.drawIndexed(primitiveDesc_.numEntries);\n  } else {\n    commandEncoder.draw(primitiveDesc_.numEntries, 1, primitiveDesc_.offset);\n  }\n}\n\nPrimitiveDesc& VertexData::primitiveDesc() {\n  return primitiveDesc_;\n}\n\nstd::shared_ptr<igl::IVertexInputState> VertexData::vertexInputState() {\n  return vis_;\n}\n\n} // namespace iglu::vertexdata\n"
  },
  {
    "path": "IGLU/simple_renderer/VertexData.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#pragma once\n\n#include <memory>\n#include <vector>\n#include <igl/IGL.h>\n\nnamespace iglu::vertexdata {\n\n/// Describes how the underlying APIs should interpret the buffers when drawing.\nstruct PrimitiveDesc {\n  size_t numEntries = 0;\n  size_t offset = 0;\n  igl::WindingMode frontFaceWinding = igl::WindingMode::CounterClockwise;\n};\n\n/// Consolidates all vertex data input in a single place. Also handles binding and drawing.\nclass VertexData final {\n public:\n  /// Preparates some of the rendering pipeline descriptors for this vertex data. Must be called\n  /// before draw().\n  void populatePipelineDescriptor(igl::RenderPipelineDesc& pipelineDesc) const;\n\n  /// Invokes the draw command of the lower level APIs.\n  void draw(igl::IRenderCommandEncoder& commandEncoder);\n\n  PrimitiveDesc& primitiveDesc();\n  std::shared_ptr<igl::IVertexInputState> vertexInputState();\n\n  /// The arguments fully describe the vertex data and how various aspects of\n  /// the rendering pipeline should interpret that data.\n  /// @param vis Describes the layout of all the buffers\n  /// @param vertexBuffer Buffer that contains the actual vertex information.\n  /// @param indexBuffer Optional.\n  /// @param indexBufferFormat 16 or 32-bit format. Ignored when indexBuffer is nullptr.\n  /// @param primitiveDesc Additional information for the internal draw commands.\n  VertexData(std::shared_ptr<igl::IVertexInputState> vis,\n             std::shared_ptr<igl::IBuffer> vertexBuffer,\n             std::shared_ptr<igl::IBuffer> indexBuffer,\n             igl::IndexFormat indexBufferFormat,\n             const PrimitiveDesc& primitiveDesc,\n             igl::PrimitiveType topology = igl::PrimitiveType::Triangle);\n  VertexData(igl::IDevice& device,\n             const std::shared_ptr<igl::IVertexInputState>& vis,\n             size_t bufferSize);\n  ~VertexData() = default;\n\n  /// Appends data to the vertex buffer.\n  /// @param data Pointer to the new data. The memory will be copied.\n  /// @param size Size of the new data.\n  /// @param numPrimitives The number of draw primitives the new data\n  /// corresponds to. The internal PrimitiveDesc will be updated.\n  bool appendData(const void* data, size_t size, size_t numPrimitives);\n\n  igl::IBuffer& indexBuffer() {\n    IGL_DEBUG_ASSERT(ib_);\n    return *ib_;\n  }\n\n  igl::IBuffer& vertexBuffer() {\n    IGL_DEBUG_ASSERT(vb_);\n    return *vb_;\n  }\n\n protected:\n  std::shared_ptr<igl::IVertexInputState> vis_;\n  std::shared_ptr<igl::IBuffer> vb_;\n  std::shared_ptr<igl::IBuffer> ib_;\n  igl::IndexFormat ibFormat_ = igl::IndexFormat::UInt16;\n  PrimitiveDesc primitiveDesc_;\n  size_t usedBytes_ = 0;\n  const igl::PrimitiveType topology_ = igl::PrimitiveType::Triangle;\n};\n\n} // namespace iglu::vertexdata\n"
  },
  {
    "path": "IGLU/state_pool/ComputePipelineStatePool.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/state_pool/ComputePipelineStatePool.h>\n\n#include <igl/Device.h>\n\nnamespace iglu::state_pool {\n\nstd::shared_ptr<igl::IComputePipelineState> ComputePipelineStatePool::createStateObject(\n    igl::IDevice& dev,\n    const igl::ComputePipelineDesc& desc,\n    igl::Result* outResult) {\n  return dev.createComputePipeline(desc, outResult);\n}\n\n} // namespace iglu::state_pool\n"
  },
  {
    "path": "IGLU/state_pool/ComputePipelineStatePool.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/state_pool/StatePool.h>\n#include <igl/ComputePipelineState.h>\n\nnamespace igl {\nclass IDevice;\n} // namespace igl\n\nnamespace iglu::state_pool {\n\nclass ComputePipelineStatePool\n  : public LRUStatePool<igl::ComputePipelineDesc, igl::IComputePipelineState> {\n public:\n private:\n  std::shared_ptr<igl::IComputePipelineState> createStateObject(\n      igl::IDevice& dev,\n      const igl::ComputePipelineDesc& desc,\n      igl::Result* outResult) override;\n};\n\n} // namespace iglu::state_pool\n"
  },
  {
    "path": "IGLU/state_pool/DepthStencilStatePool.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/state_pool/DepthStencilStatePool.h>\n\n#include <igl/Device.h>\n\nnamespace iglu::state_pool {\n\nstd::shared_ptr<igl::IDepthStencilState> DepthStencilStatePool::createStateObject(\n    igl::IDevice& dev,\n    const igl::DepthStencilStateDesc& desc,\n    igl::Result* outResult) {\n  return dev.createDepthStencilState(desc, outResult);\n}\n\n} // namespace iglu::state_pool\n"
  },
  {
    "path": "IGLU/state_pool/DepthStencilStatePool.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/state_pool/StatePool.h>\n#include <igl/DepthStencilState.h>\n\nnamespace igl {\nclass IDevice;\n} // namespace igl\n\nnamespace iglu::state_pool {\n\nclass DepthStencilStatePool\n  : public LRUStatePool<igl::DepthStencilStateDesc, igl::IDepthStencilState> {\n public:\n private:\n  std::shared_ptr<igl::IDepthStencilState> createStateObject(igl::IDevice& dev,\n                                                             const igl::DepthStencilStateDesc& desc,\n                                                             igl::Result* outResult) override;\n};\n\n} // namespace iglu::state_pool\n"
  },
  {
    "path": "IGLU/state_pool/RenderPipelineStatePool.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/state_pool/RenderPipelineStatePool.h>\n\n#include <igl/Device.h>\n\nusing namespace igl;\n\nnamespace iglu::state_pool {\n\n///--------------------------------------\n/// MARK: - RenderPipelineStatePool\n\nstd::shared_ptr<igl::IRenderPipelineState> RenderPipelineStatePool::createStateObject(\n    igl::IDevice& dev,\n    const igl::RenderPipelineDesc& desc,\n    igl::Result* outResult) {\n  return dev.createRenderPipeline(desc, outResult);\n}\n\n///--------------------------------------\n/// MARK: - CountedRenderPipelineStatePool\n\nCountedRenderPipelineStatePool::CountedRenderPipelineStatePool(uint8_t compactDelay) noexcept :\n  compactDelay_(compactDelay) {}\n\nstd::shared_ptr<igl::IRenderPipelineState> CountedRenderPipelineStatePool::getOrCreate(\n    igl::IDevice& dev,\n    const igl::RenderPipelineDesc& desc,\n    igl::Result* outResult) {\n  auto stateIt = cache_.find(desc);\n  if (stateIt != cache_.end()) {\n    Result::setOk(outResult);\n    // Reset the counter, we are using things.\n    stateIt->second.second = 0;\n    return stateIt->second.first;\n  }\n\n  auto state = dev.createRenderPipeline(desc, outResult);\n  if (state) {\n    cache_.emplace(desc, std::make_pair(state, 0));\n    Result::setOk(outResult);\n    return state;\n  }\n  return nullptr;\n}\n\nvoid CountedRenderPipelineStatePool::compact() {\n  auto it = cache_.begin();\n  while (it != cache_.end()) {\n    // Only care about compacting the ones that own uniquely\n    if (it->second.first.use_count() == 1) {\n      auto& itemDelay = it->second.second;\n      itemDelay += 1;\n      if (itemDelay > compactDelay_) {\n        it = cache_.erase(it);\n        continue;\n      }\n    }\n    it++;\n  }\n}\n\n} // namespace iglu::state_pool\n"
  },
  {
    "path": "IGLU/state_pool/RenderPipelineStatePool.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/state_pool/StatePool.h>\n#include <igl/RenderPipelineState.h>\n\nnamespace igl {\nclass IDevice;\n} // namespace igl\n\nnamespace iglu::state_pool {\n\nclass RenderPipelineStatePool\n  : public LRUStatePool<igl::RenderPipelineDesc, igl::IRenderPipelineState> {\n public:\n private:\n  std::shared_ptr<igl::IRenderPipelineState> createStateObject(igl::IDevice& dev,\n                                                               const igl::RenderPipelineDesc& desc,\n                                                               igl::Result* outResult) override;\n};\n\n/// Version of render pipeline state pool that does reference and \"use count\"ing.\n/// Compacts and removes the cached pipeline states on expiration of use, if there\nclass CountedRenderPipelineStatePool final\n  : public IStatePool<igl::RenderPipelineDesc, igl::IRenderPipelineState> {\n public:\n  /// Create pipeline state pool, with a specified delay after which - a given pipeline\n  /// state is no longer being pooled.\n  explicit CountedRenderPipelineStatePool(uint8_t compactDelay) noexcept;\n\n  std::shared_ptr<igl::IRenderPipelineState> getOrCreate(igl::IDevice& dev,\n                                                         const igl::RenderPipelineDesc& desc,\n                                                         igl::Result* outResult) override;\n\n  /// Compact the render pipeline state, triggering deletion of elements in the\n  /// pool that are expired.\n  void compact();\n\n private:\n  const uint8_t compactDelay_;\n  std::unordered_map<igl::RenderPipelineDesc,\n                     std::pair<std::shared_ptr<igl::IRenderPipelineState>, uint32_t>>\n      cache_;\n};\n\n} // namespace iglu::state_pool\n"
  },
  {
    "path": "IGLU/state_pool/StatePool.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <list>\n#include <memory>\n#include <unordered_map>\n#include <utility>\n#include <igl/Common.h>\n\nnamespace igl {\nclass IDevice;\n}\n\nnamespace iglu::state_pool {\n\n///--------------------------------------\n/// MARK: - IStatePool\n\n/// Abstract class that describes a state pool of `TStateObject` objects,\n/// that are created based off of a given `TDescriptor` and cached in a pool.\ntemplate<class TDescriptor, class TStateObject>\nclass IStatePool {\n public:\n  /// Get or create a given state object, given a descriptor.\n  virtual std::shared_ptr<TStateObject> getOrCreate(igl::IDevice& dev,\n                                                    const TDescriptor& desc,\n                                                    igl::Result* outResult) = 0;\n\n  virtual ~IStatePool() = default;\n};\n\n///--------------------------------------\n/// MARK: - LRUStatePool\n\ntemplate<class TDescriptor, class TStateObject>\nclass LRUStatePool : public IStatePool<TDescriptor, TStateObject> {\n public:\n  void setCacheSize(uint32_t maxCacheSize) {\n    maxCacheSize_ = maxCacheSize;\n    while (stateList_.size() >= maxCacheSize_) {\n      deleteLastUsed();\n    }\n  }\n\n  // Implememnts LRU Cache https://www.geeksforgeeks.org/lru-cache-implementation/\n  // Gets or creates a state object and moves the strong reference to it to the beginning of the\n  // pool's queue so it remains in cache longer if frequently used\n  std::shared_ptr<TStateObject> getOrCreate(igl::IDevice& dev,\n                                            const TDescriptor& desc,\n                                            igl::Result* outResult) final {\n    auto it = stateMap_.find(desc);\n    if (it != stateMap_.cend()) {\n      // Cache hit\n      if (it->second != stateList_.begin()) {\n        stateList_.splice(stateList_.begin(), stateList_, it->second);\n      }\n    } else {\n      // Cache miss\n      if (stateList_.size() >= maxCacheSize_) {\n        // If the cache is full delete the last used\n        deleteLastUsed();\n      }\n\n      // Add new element to start of queue\n      auto stateResource = createStateObject(dev, desc, outResult);\n\n      if (!IGL_DEBUG_VERIFY(stateResource != nullptr)) {\n        return nullptr;\n      }\n\n      auto stateDesc = desc; // force r-value c-tor: pair(U1&& x, U2&& y)\n      stateList_.push_front(TStateItem(std::move(stateDesc), std::move(stateResource)));\n      it = stateMap_.insert(std::make_pair(desc, stateList_.begin())).first;\n    }\n\n    return it->second->second;\n  }\n\n private:\n  using TStateItem = std::pair<TDescriptor, std::shared_ptr<TStateObject>>;\n  virtual std::shared_ptr<TStateObject> createStateObject(igl::IDevice& dev,\n                                                          const TDescriptor& desc,\n                                                          igl::Result* outResult) = 0;\n\n  void deleteLastUsed() {\n    auto& last = stateList_.back();\n    auto key = last.first;\n    stateList_.pop_back();\n    stateMap_.erase(key);\n  }\n\n  // Queue to store the values\n  std::list<TStateItem> stateList_;\n\n  // Map to check existance\n  std::unordered_map<TDescriptor, typename std::list<TStateItem>::iterator> stateMap_;\n\n  uint32_t maxCacheSize_ = 1024; // maximum capacity of cache\n};\n\n} // namespace iglu::state_pool\n"
  },
  {
    "path": "IGLU/state_pool/VertexInputStatePool.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/state_pool/VertexInputStatePool.h>\n\n#include <igl/Device.h>\n\nnamespace iglu::state_pool {\n\nstd::shared_ptr<igl::IVertexInputState> VertexInputStatePool::createStateObject(\n    igl::IDevice& dev,\n    const igl::VertexInputStateDesc& desc,\n    igl::Result* outResult) {\n  return dev.createVertexInputState(desc, outResult);\n}\n\n} // namespace iglu::state_pool\n"
  },
  {
    "path": "IGLU/state_pool/VertexInputStatePool.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/state_pool/StatePool.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl {\nclass IDevice;\n} // namespace igl\n\nnamespace iglu::state_pool {\n\nclass VertexInputStatePool\n  : public LRUStatePool<igl::VertexInputStateDesc, igl::IVertexInputState> {\n public:\n private:\n  std::shared_ptr<igl::IVertexInputState> createStateObject(igl::IDevice& dev,\n                                                            const igl::VertexInputStateDesc& desc,\n                                                            igl::Result* outResult) override;\n};\n\n} // namespace iglu::state_pool\n"
  },
  {
    "path": "IGLU/texture_accessor/ITextureAccessor.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandQueue.h>\n#include <igl/IGL.h>\n#include <igl/Texture.h>\n\nnamespace iglu::textureaccessor {\n\nenum class RequestStatus : uint8_t {\n  Ready = 0,\n  NotInitialized,\n  InProgress,\n};\n\n/// Interface for getting CPU access to GPU texture data\nclass ITextureAccessor {\n public:\n  explicit ITextureAccessor(std::shared_ptr<igl::ITexture> texture) :\n    texture_(std::move(texture)) {}\n\n  virtual ~ITextureAccessor() = default;\n\n  // Start reading data from the ITexture GPU resource, to be accessed later\n  // Receive an optional texture an input. It MUST be the same size as previous texture\n  virtual void requestBytes(igl::ICommandQueue& commandQueue,\n                            std::shared_ptr<igl::ITexture> texture = nullptr) = 0;\n\n  // Get the status of the request. Returns RequestStatus::Ready if requestBytes() has finished\n  // reading texture data.\n  virtual RequestStatus getRequestStatus() = 0;\n\n  /**\n    Get the texture bytes read by requestBytes(). If there is an in-progress read, we will\n    synchronously wait for it to complete and then return the data.\n  */\n  virtual std::vector<unsigned char>& getBytes() = 0;\n\n  // copy data into preallocated buffer, returns copied data in bytes\n  virtual size_t copyBytes(unsigned char* ptr, size_t length) = 0;\n\n  // Synchronously read the bytes of the ITexture. This is not recommended; using requestBytes() and\n  // getBytes() is more performant when getBytes() is called later.\n  // Receive an optional texture an input. It MUST be the same size as previous texture\n  std::vector<unsigned char>& requestAndGetBytesSync(\n      igl::ICommandQueue& commandQueue,\n      std::shared_ptr<igl::ITexture> texture = nullptr) {\n    requestBytes(commandQueue, std::move(texture));\n    return getBytes();\n  }\n\n  // Synchronously read the bytes of the ITexture. This is not recommended; using requestBytes() and\n  // copyBytes() is more performant when copyBytes() is called later.\n  // Receive an optional texture an input. It MUST be the same size as previous texture\n\n  size_t requestAndCopyBytesSync(igl::ICommandQueue& commandQueue,\n                                 unsigned char* ptr,\n                                 size_t length,\n                                 std::shared_ptr<igl::ITexture> texture = nullptr) {\n    requestBytes(commandQueue, std::move(texture));\n    return copyBytes(ptr, length);\n  }\n\n  [[nodiscard]] std::shared_ptr<igl::ITexture> getTexture() const {\n    return texture_;\n  }\n\n protected:\n  std::shared_ptr<igl::ITexture> texture_;\n};\n\n} // namespace iglu::textureaccessor\n"
  },
  {
    "path": "IGLU/texture_accessor/MetalTextureAccessor.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include \"ITextureAccessor.h\"\n\n#include <igl/CommandQueue.h>\n#include <igl/Framebuffer.h>\n#include <igl/IGL.h>\n#include <igl/Texture.h>\n\nnamespace iglu::textureaccessor {\n\nclass MetalTextureAccessor : public ITextureAccessor {\n public:\n  MetalTextureAccessor(std::shared_ptr<igl::ITexture> texture, igl::IDevice& device);\n\n  void requestBytes(igl::ICommandQueue& commandQueue,\n                    std::shared_ptr<igl::ITexture> texture = nullptr) override;\n  RequestStatus getRequestStatus() override;\n  std::vector<unsigned char>& getBytes() override;\n  size_t copyBytes(unsigned char* ptr, size_t length) override;\n\n private:\n  std::vector<unsigned char> latestBytesRead_;\n  RequestStatus status_ = RequestStatus::NotInitialized;\n  size_t textureWidth_ = 0;\n  size_t textureHeight_ = 0;\n  size_t textureBytesPerRow_ = 0;\n  size_t textureBytesPerImage_ = 0;\n  std::shared_ptr<igl::IBuffer> readBuffer_ = nullptr;\n  std::shared_ptr<igl::ICommandBuffer> lastRequestCommandBuffer_ = nullptr;\n};\n\n} // namespace iglu::textureaccessor\n"
  },
  {
    "path": "IGLU/texture_accessor/MetalTextureAccessor.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"MetalTextureAccessor.h\"\n\n#include \"ITextureAccessor.h\"\n\n#include <igl/Buffer.h>\n#include <igl/Texture.h>\n#include <igl/metal/Buffer.h>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/Texture.h>\n\n#if defined(IGL_CMAKE_BUILD)\n#include <igl/IGLSafeC.h>\n#else\n#include <secure_lib/secure_string.h>\n#endif\n\nnamespace iglu::textureaccessor {\n\nMetalTextureAccessor::MetalTextureAccessor(std::shared_ptr<igl::ITexture> texture,\n                                           igl::IDevice& device) :\n  ITextureAccessor(std::move(texture)) {\n  auto& iglMetalTexture = static_cast<igl::metal::Texture&>(*texture_);\n  IGL_DEBUG_ASSERT(iglMetalTexture.get() != nullptr);\n\n  const auto dimensions = iglMetalTexture.getDimensions();\n  textureWidth_ = dimensions.width;\n  textureHeight_ = dimensions.height;\n\n  const auto& properties = iglMetalTexture.getProperties();\n  textureBytesPerRow_ = properties.getBytesPerRow(textureWidth_);\n  textureBytesPerImage_ = properties.getBytesPerRange(iglMetalTexture.getFullRange());\n\n  latestBytesRead_.resize(textureBytesPerImage_);\n\n  igl::BufferDesc readBufferDesc;\n  readBufferDesc.storage = igl::ResourceStorage::Shared;\n  readBufferDesc.length = textureBytesPerImage_;\n  igl::Result res;\n  readBuffer_ = device.createBuffer(readBufferDesc, &res);\n  IGL_DEBUG_ASSERT(res.isOk());\n  IGL_DEBUG_ASSERT(static_cast<igl::metal::Buffer&>(*readBuffer_).get() != nullptr);\n}\n\nvoid MetalTextureAccessor::requestBytes(igl::ICommandQueue& commandQueue,\n                                        std::shared_ptr<igl::ITexture> texture) {\n  if (texture) {\n    IGL_DEBUG_ASSERT(textureWidth_ == texture->getDimensions().width &&\n                     textureHeight_ == texture->getDimensions().height);\n    texture_ = std::move(texture);\n  }\n\n  auto metalTexture = static_cast<igl::metal::Texture&>(*texture_).get();\n  IGL_DEBUG_ASSERT(metalTexture != nullptr);\n  auto metalReadBuffer = static_cast<igl::metal::Buffer&>(*readBuffer_).get();\n\n  igl::Result res;\n  const igl::CommandBufferDesc desc;\n  auto iglMtlCommandBuffer = commandQueue.createCommandBuffer(desc, &res);\n  IGL_DEBUG_ASSERT(res.isOk());\n  auto metalCmdBuffer = static_cast<igl::metal::CommandBuffer&>(*iglMtlCommandBuffer).get();\n\n  id<MTLBlitCommandEncoder> blitEncoder = [metalCmdBuffer blitCommandEncoder];\n\n  [blitEncoder copyFromTexture:metalTexture\n                   sourceSlice:0\n                   sourceLevel:0\n                  sourceOrigin:MTLOriginMake(0, 0, 0)\n                    sourceSize:MTLSizeMake(textureWidth_, textureHeight_, 1)\n                      toBuffer:metalReadBuffer\n             destinationOffset:0\n        destinationBytesPerRow:textureBytesPerRow_\n      destinationBytesPerImage:textureBytesPerImage_];\n\n  [blitEncoder endEncoding];\n\n  lastRequestCommandBuffer_ = iglMtlCommandBuffer;\n  status_ = RequestStatus::InProgress;\n\n  [metalCmdBuffer addCompletedHandler:^(id<MTLCommandBuffer> cb) {\n    checked_memcpy_robust(latestBytesRead_.data(),\n                          latestBytesRead_.size(),\n                          metalReadBuffer.contents,\n                          metalReadBuffer.length,\n                          textureBytesPerImage_);\n    status_ = RequestStatus::Ready;\n  }];\n  [metalCmdBuffer commit];\n}\n\nsize_t MetalTextureAccessor::copyBytes(unsigned char* ptr, size_t length) {\n  if (length < latestBytesRead_.size()) {\n    return 0;\n  }\n  const size_t count = latestBytesRead_.size();\n  checked_memcpy_robust(ptr, length, latestBytesRead_.data(), count, count);\n  return count;\n}\n\nRequestStatus MetalTextureAccessor::getRequestStatus() {\n  return status_;\n}\n\nstd::vector<unsigned char>& MetalTextureAccessor::getBytes() {\n  if (status_ == RequestStatus::InProgress) {\n    lastRequestCommandBuffer_->waitUntilCompleted();\n  }\n  return latestBytesRead_;\n}\n\n} // namespace iglu::textureaccessor\n"
  },
  {
    "path": "IGLU/texture_accessor/OpenGLTextureAccessor.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"OpenGLTextureAccessor.h\"\n\n#include \"ITextureAccessor.h\"\n\n#if IGL_BACKEND_OPENGL\n\n#include <igl/Device.h>\n#include <igl/Texture.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/Framebuffer.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/Texture.h>\n\n#if defined(IGL_CMAKE_BUILD)\n#include <igl/IGLSafeC.h>\n#else\n#include <secure_lib/secure_string.h>\n#endif\n\nnamespace iglu::textureaccessor {\n\nOpenGLTextureAccessor::OpenGLTextureAccessor(std::shared_ptr<igl::ITexture> texture,\n                                             igl::IDevice& device) :\n  ITextureAccessor(std::move(texture)) {\n  // glReadPixels requires a that the texture be attached to a framebuffer\n  igl::FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = texture_;\n  frameBuffer_ = device.createFramebuffer(framebufferDesc, nullptr);\n\n  auto& oglTexture = static_cast<igl::opengl::Texture&>(*texture_);\n  const auto dimensions = oglTexture.getDimensions();\n  textureWidth_ = dimensions.width;\n  textureHeight_ = dimensions.height;\n\n  textureBytesPerImage_ = oglTexture.getProperties().getBytesPerRange(oglTexture.getFullRange());\n  latestBytesRead_.resize(textureBytesPerImage_);\n\n  auto& context = oglTexture.getContext();\n  const auto& deviceFeatures = context.deviceFeatures();\n  asyncReadbackSupported_ =\n      deviceFeatures.hasInternalFeature(igl::opengl::InternalFeatures::PixelBufferObject) &&\n      deviceFeatures.hasInternalFeature(igl::opengl::InternalFeatures::Sync) &&\n      deviceFeatures.hasFeature(igl::DeviceFeatures::MapBufferRange);\n\n  if (asyncReadbackSupported_) {\n    // Create PBO and allocate size\n    context.genBuffers((GLsizei)1, &pboId_);\n    context.bindBuffer(GL_PIXEL_PACK_BUFFER, pboId_);\n    context.bufferData(GL_PIXEL_PACK_BUFFER, textureBytesPerImage_, nullptr, GL_DYNAMIC_READ);\n    context.bindBuffer(GL_PIXEL_PACK_BUFFER, 0);\n  }\n}\n\nvoid OpenGLTextureAccessor::requestBytes(igl::ICommandQueue& commandQueue,\n                                         std::shared_ptr<igl::ITexture> texture) {\n  dataCopied_ = false;\n  if (texture) {\n    IGL_DEBUG_ASSERT(textureWidth_ == texture->getDimensions().width &&\n                     textureHeight_ == texture->getDimensions().height);\n    texture_ = std::move(texture);\n    frameBuffer_->updateDrawable(texture_);\n    textureAttached_ = false;\n  }\n\n  if (asyncReadbackSupported_) {\n    auto& glTexture = static_cast<igl::opengl::Texture&>(*texture_);\n    auto& context = glTexture.getContext();\n\n    auto* oglFrameBuffer = static_cast<igl::opengl::Framebuffer*>(&(*frameBuffer_));\n    oglFrameBuffer->bindBuffer();\n\n    oglFrameBuffer->bindBufferForRead();\n    if (!textureAttached_) {\n      igl::opengl::Texture::AttachmentParams params{\n          .face = 0,\n          .mipLevel = 0,\n          .layer = 0,\n          .read = true,\n          .stereo = false,\n      };\n      glTexture.attachAsColor(0u, params);\n      textureAttached_ = true;\n    }\n    const auto& properties = glTexture.getProperties();\n    context.pixelStorei(GL_PACK_ALIGNMENT,\n                        glTexture.getAlignment(properties.getBytesPerRow(textureWidth_)));\n\n    // Start transferring from framebuffer -> PBO\n    context.bindBuffer(GL_PIXEL_PACK_BUFFER, pboId_);\n    context.readPixels(0, 0, textureWidth_, textureHeight_, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);\n    context.bindBuffer(GL_PIXEL_PACK_BUFFER, 0);\n\n    sync_ = context.fenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);\n\n    status_ = RequestStatus::InProgress;\n    return;\n  }\n\n  // Async readback not supported\n  const auto range = igl::TextureRangeDesc::new2D(0, 0, textureWidth_, textureHeight_);\n  frameBuffer_->copyBytesColorAttachment(commandQueue, 0, latestBytesRead_.data(), range);\n\n  dataCopied_ = true;\n  status_ = RequestStatus::Ready;\n}\n\nRequestStatus OpenGLTextureAccessor::getRequestStatus() {\n  if (asyncReadbackSupported_ && status_ == RequestStatus::InProgress) {\n    auto& texture = static_cast<igl::opengl::Texture&>(*texture_);\n    auto& context = texture.getContext();\n    // If a read is in progress, check whether it has completed\n    int result = 0;\n    int valuesLength = 0;\n    context.getSynciv(sync_, GL_SYNC_STATUS, 1, &valuesLength, &result);\n    IGL_DEBUG_ASSERT(valuesLength == 1);\n    status_ = result == GL_SIGNALED ? RequestStatus::Ready : RequestStatus::InProgress;\n    if (status_ == RequestStatus::Ready) {\n      context.deleteSync(sync_);\n      sync_ = nullptr;\n    }\n  }\n  return status_;\n}\n\nstd::vector<unsigned char>& OpenGLTextureAccessor::getBytes() {\n  copyBytes(latestBytesRead_.data(), latestBytesRead_.size());\n  return latestBytesRead_;\n}\n\nsize_t OpenGLTextureAccessor::copyBytes(unsigned char* ptr, size_t length) {\n  if (length < textureBytesPerImage_) {\n    dataCopied_ = false;\n    return 0;\n  }\n\n  if (asyncReadbackSupported_ && status_ != RequestStatus::NotInitialized && !dataCopied_) {\n    auto& texture = static_cast<igl::opengl::Texture&>(*texture_);\n    auto& context = texture.getContext();\n    context.bindBuffer(GL_PIXEL_PACK_BUFFER, pboId_);\n    auto* bytes =\n        context.mapBufferRange(GL_PIXEL_PACK_BUFFER, 0, textureBytesPerImage_, GL_MAP_READ_BIT);\n    if (IGL_DEBUG_VERIFY(bytes)) {\n      checked_memcpy_robust(ptr, length, bytes, textureBytesPerImage_, textureBytesPerImage_);\n      length = textureBytesPerImage_;\n      dataCopied_ = true;\n      status_ = RequestStatus::Ready;\n    } else {\n      dataCopied_ = false;\n      length = 0;\n    }\n    context.unmapBuffer(GL_PIXEL_PACK_BUFFER);\n    context.bindBuffer(GL_PIXEL_PACK_BUFFER, 0);\n    if (sync_ != nullptr) {\n      context.deleteSync(sync_);\n      sync_ = nullptr;\n    }\n  }\n  return length;\n}\n\n} // namespace iglu::textureaccessor\n#endif\n"
  },
  {
    "path": "IGLU/texture_accessor/OpenGLTextureAccessor.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include \"ITextureAccessor.h\"\n\n#include <igl/CommandQueue.h>\n#include <igl/Framebuffer.h>\n#include <igl/IGL.h>\n#include <igl/Texture.h>\n\n#if IGL_BACKEND_OPENGL\n\n#include <igl/opengl/GLIncludes.h>\n\nnamespace iglu::textureaccessor {\n\nclass OpenGLTextureAccessor : public ITextureAccessor {\n public:\n  OpenGLTextureAccessor(std::shared_ptr<igl::ITexture> texture, igl::IDevice& device);\n\n  void requestBytes(igl::ICommandQueue& commandQueue,\n                    std::shared_ptr<igl::ITexture> texture = nullptr) override;\n  RequestStatus getRequestStatus() override;\n  std::vector<unsigned char>& getBytes() override;\n  size_t copyBytes(unsigned char* ptr, size_t length) override;\n\n private:\n  std::vector<unsigned char> latestBytesRead_;\n  RequestStatus status_ = RequestStatus::NotInitialized;\n  std::shared_ptr<igl::IFramebuffer> frameBuffer_;\n  size_t textureWidth_ = 0;\n  size_t textureHeight_ = 0;\n  size_t textureBytesPerImage_ = 0;\n\n  GLuint pboId_ = 0;\n  GLsync sync_ = nullptr;\n  bool dataCopied_ = false;\n  bool asyncReadbackSupported_ = false;\n  bool textureAttached_ = false;\n};\n\n} // namespace iglu::textureaccessor\n#endif\n"
  },
  {
    "path": "IGLU/texture_accessor/TextureAccessorFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"TextureAccessorFactory.h\"\n\n#include \"ITextureAccessor.h\"\n#if IGL_BACKEND_OPENGL\n#include \"OpenGLTextureAccessor.h\"\n#endif\n#if IGL_BACKEND_VULKAN\n#include \"VulkanTextureAccessor.h\"\n#endif\n#include <memory>\n#if IGL_PLATFORM_APPLE\n#include \"MetalTextureAccessor.h\"\n#endif\n\nnamespace iglu::textureaccessor {\n\nstd::unique_ptr<ITextureAccessor> TextureAccessorFactory::createTextureAccessor(\n    igl::BackendType backendType,\n    const std::shared_ptr<igl::ITexture>& texture,\n    igl::IDevice& device) {\n  switch (backendType) {\n#if IGL_BACKEND_OPENGL\n  case igl::BackendType::OpenGL:\n    return std::make_unique<OpenGLTextureAccessor>(texture, device);\n#endif // IGL_BACKEND_OPENGL\n#if IGL_PLATFORM_APPLE\n  case igl::BackendType::Metal:\n    return std::make_unique<MetalTextureAccessor>(texture, device);\n#endif // IGL_PLATFORM_APPLE\n#if IGL_BACKEND_VULKAN\n  case igl::BackendType::Vulkan:\n    return std::make_unique<VulkanTextureAccessor>(texture);\n#endif\n  default:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return nullptr;\n  }\n}\n\n} // namespace iglu::textureaccessor\n"
  },
  {
    "path": "IGLU/texture_accessor/TextureAccessorFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include \"ITextureAccessor.h\"\n\n#include <igl/CommandQueue.h>\n#include <igl/IGL.h>\n#include <igl/Texture.h>\n\nnamespace iglu::textureaccessor {\n\nclass TextureAccessorFactory {\n public:\n  static std::unique_ptr<ITextureAccessor> createTextureAccessor(\n      igl::BackendType backendType,\n      const std::shared_ptr<igl::ITexture>& texture,\n      igl::IDevice& device);\n};\n\n} // namespace iglu::textureaccessor\n"
  },
  {
    "path": "IGLU/texture_accessor/VulkanTextureAccessor.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanTextureAccessor.h\"\n\n#include \"ITextureAccessor.h\"\n#if IGL_BACKEND_VULKAN\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanTexture.h>\n#endif\n\n#if defined(IGL_CMAKE_BUILD)\n#include <igl/IGLSafeC.h>\n#else\n\n#include <cstddef>\n#endif\n\nnamespace iglu::textureaccessor {\n\nVulkanTextureAccessor::VulkanTextureAccessor(std::shared_ptr<igl::ITexture> texture) :\n  ITextureAccessor(std::move(texture)) {\n  assignTexture(texture_);\n}\n\nvoid VulkanTextureAccessor::assignTexture(std::shared_ptr<igl::ITexture> texture) {\n  if (!texture) {\n    return;\n  }\n#if IGL_BACKEND_VULKAN\n  auto* vkTexture = static_cast<igl::vulkan::Texture*>(texture.get());\n  const igl::vulkan::VulkanImage& vkImage = vkTexture->getVulkanTexture().image_;\n  vkImage_ = vkImage.getVkImage();\n  ctx_ = vkImage.ctx_;\n  vkImageAspectFlags_ = vkTexture->getVulkanTexture().imageView_.getVkImageAspectFlags();\n  const auto textureFormatProperties =\n      igl::TextureFormatProperties::fromTextureFormat(texture->getFormat());\n  numBytesRequired_ =\n      static_cast<size_t>(textureFormatProperties.getBytesPerRow(texture->getSize().width) *\n                          textureFormatProperties.getRows(texture->getFullRange()));\n\n  textureWidth_ = texture->getSize().width;\n  textureHeight_ = texture->getSize().height;\n  vkImageFormat_ = vkImage.imageFormat_;\n  vkImageLayout_ = vkImage.imageLayout_;\n  bytesPerRow_ = textureFormatProperties.getBytesPerRow(texture->getSize().width);\n#endif\n  texture_ = std::move(texture);\n}\n\nvoid VulkanTextureAccessor::requestBytes(igl::ICommandQueue& /*commandQueue*/,\n                                         std::shared_ptr<igl::ITexture> texture) {\n  status_ = RequestStatus::InProgress;\n\n  if (texture != nullptr) {\n    assignTexture(texture);\n  }\n\n  if (numBytesRequired_ != latestBytesRead_.size()) {\n    latestBytesRead_.resize(numBytesRequired_);\n  }\n\n  IGL_DEBUG_ASSERT(texture_ != nullptr, \"texture_ is nullptr\");\n\n  status_ = RequestStatus::Ready;\n}\n\nsize_t VulkanTextureAccessor::copyBytes(unsigned char* ptr, size_t length) {\n  if (length < numBytesRequired_) {\n    return 0;\n  }\n#if IGL_BACKEND_VULKAN\n  ctx_->stagingDevice_->getImageData2D(\n      vkImage_,\n      0,\n      0,\n      VkRect2D{VkOffset2D{0, 0}, VkExtent2D{textureWidth_, textureHeight_}},\n      igl::TextureFormatProperties::fromTextureFormat(texture_->getFormat()),\n      vkImageFormat_,\n      vkImageLayout_,\n      VK_IMAGE_ASPECT_COLOR_BIT,\n      ptr,\n      bytesPerRow_,\n      false);\n#endif\n  return numBytesRequired_;\n}\n\nRequestStatus VulkanTextureAccessor::getRequestStatus() {\n  return status_;\n}\n\nstd::vector<unsigned char>& VulkanTextureAccessor::getBytes() {\n  copyBytes(latestBytesRead_.data(), latestBytesRead_.size());\n  return latestBytesRead_;\n}\n\n} // namespace iglu::textureaccessor\n"
  },
  {
    "path": "IGLU/texture_accessor/VulkanTextureAccessor.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include \"ITextureAccessor.h\"\n\n#include <igl/CommandQueue.h>\n#include <igl/IGL.h>\n#include <igl/Texture.h>\n#if IGL_BACKEND_VULKAN\n#include <igl/vulkan/VulkanImage.h>\n#endif\n\nnamespace iglu::textureaccessor {\n\nclass VulkanTextureAccessor : public ITextureAccessor {\n public:\n  explicit VulkanTextureAccessor(std::shared_ptr<igl::ITexture> texture);\n\n  void requestBytes(igl::ICommandQueue& commandQueue,\n                    std::shared_ptr<igl::ITexture> texture = nullptr) override;\n  RequestStatus getRequestStatus() override;\n  std::vector<unsigned char>& getBytes() override;\n  size_t copyBytes(unsigned char* ptr, size_t length) override;\n\n private:\n  void assignTexture(std::shared_ptr<igl::ITexture> texture);\n\n private:\n  std::vector<unsigned char> latestBytesRead_;\n  RequestStatus status_ = RequestStatus::NotInitialized;\n#if IGL_BACKEND_VULKAN\n  const igl::vulkan::VulkanContext* ctx_ = nullptr;\n  VkImage vkImage_ = VK_NULL_HANDLE;\n  VkFormat vkImageFormat_ = VK_FORMAT_UNDEFINED;\n  VkImageLayout vkImageLayout_ = VK_IMAGE_LAYOUT_UNDEFINED;\n  VkImageAspectFlags vkImageAspectFlags_ = 0;\n  uint32_t textureWidth_ = 0;\n  uint32_t textureHeight_ = 0;\n  size_t bytesPerRow_ = 0;\n#endif\n  size_t numBytesRequired_ = 0;\n};\n} // namespace iglu::textureaccessor\n"
  },
  {
    "path": "IGLU/texture_loader/DataReader.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/DataReader.h>\n\nnamespace iglu::textureloader {\n\nstd::optional<DataReader> DataReader::tryCreate(const uint8_t* FOLLY_NONNULL data,\n                                                uint32_t size,\n                                                igl::Result* IGL_NULLABLE outResult) {\n  if (data == nullptr) {\n    igl::Result::setResult(outResult, igl::Result::Code::ArgumentInvalid, \"data is nullptr.\");\n    return {};\n  }\n\n  return DataReader(data, size);\n}\n\nDataReader::DataReader(const uint8_t* FOLLY_NONNULL data, uint32_t size) noexcept :\n  data_(data), size_(size) {}\n\nconst uint8_t* DataReader::data() const noexcept {\n  return data_;\n}\n\nuint32_t DataReader::size() const noexcept {\n  return size_;\n}\n\nconst uint8_t* IGL_NULLABLE DataReader::tryAt(uint32_t offset,\n                                              igl::Result* IGL_NULLABLE outResult) const noexcept {\n  if (!ensureLength(0, offset, outResult)) {\n    return nullptr;\n  }\n  return at(offset);\n}\n\nconst uint8_t* IGL_NONNULL DataReader::at(uint32_t offset) const noexcept {\n  IGL_DEBUG_ASSERT(size_ >= offset);\n  return data_ + offset;\n}\n\nbool DataReader::tryAdvance(uint32_t bytesToAdvance, igl::Result* IGL_NULLABLE outResult) noexcept {\n  if (!ensureLength(bytesToAdvance, 0, outResult)) {\n    return false;\n  }\n  advance(bytesToAdvance);\n  return true;\n}\n\nbool DataReader::ensureLength(uint32_t requestedLength,\n                              uint32_t offset,\n                              igl::Result* IGL_NULLABLE outResult) const noexcept {\n  if (offset > size_ || requestedLength > size_ - offset) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::InvalidOperation, \"data size is too small.\");\n    return false;\n  }\n\n  return true;\n}\n\nvoid DataReader::advance(uint32_t bytesToAdvance) noexcept {\n  IGL_DEBUG_ASSERT(size_ >= bytesToAdvance);\n\n  data_ += bytesToAdvance;\n  size_ -= bytesToAdvance;\n}\n\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/DataReader.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <limits>\n#include <optional>\n#include <igl/Common.h>\n\nnamespace igl {\nclass IDevice;\n} // namespace igl\n\nnamespace iglu::textureloader {\n\n/// Helper class for reading data\nclass DataReader {\n public:\n  static std::optional<DataReader> tryCreate(const uint8_t* IGL_NONNULL data,\n                                             uint32_t size,\n                                             igl::Result* IGL_NULLABLE outResult);\n\n  [[nodiscard]] const uint8_t* IGL_NONNULL data() const noexcept;\n  [[nodiscard]] uint32_t size() const noexcept;\n\n  [[nodiscard]] const uint8_t* IGL_NULLABLE\n  tryAt(uint32_t offset, igl::Result* IGL_NULLABLE outResult) const noexcept;\n  [[nodiscard]] const uint8_t* IGL_NONNULL at(uint32_t offset) const noexcept;\n\n  template<typename T>\n  [[nodiscard]] const T* IGL_NULLABLE tryAs(igl::Result* IGL_NULLABLE outResult) const noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    if (!ensureLength(static_cast<uint32_t>(sizeof(T)), 0, outResult)) {\n      return nullptr;\n    }\n\n    return as<T>();\n  }\n\n  template<typename T>\n  [[nodiscard]] const T* IGL_NONNULL as() const noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    IGL_DEBUG_ASSERT(size_ >= static_cast<uint32_t>(sizeof(T)));\n    return reinterpret_cast<const T*>(data_);\n  }\n\n  template<typename T>\n  [[nodiscard]] const T* IGL_NULLABLE tryAsAt(uint32_t offset,\n                                              igl::Result* IGL_NULLABLE outResult) const noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    if (!ensureLength(static_cast<uint32_t>(sizeof(T)), offset, outResult)) {\n      return nullptr;\n    }\n\n    return asAt<T>(offset);\n  }\n\n  template<typename T>\n  [[nodiscard]] const T* IGL_NONNULL asAt(uint32_t offset) const noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    IGL_DEBUG_ASSERT(size_ >= offset + static_cast<uint32_t>(sizeof(T)));\n    return reinterpret_cast<const T*>(data_ + offset);\n  }\n\n  template<typename T>\n  [[nodiscard]] bool tryRead(T& outValue, igl::Result* IGL_NULLABLE outResult) const noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    if (!ensureLength(static_cast<uint32_t>(sizeof(T)), 0, outResult)) {\n      return false;\n    }\n    outValue = read<T>();\n    return true;\n  }\n\n  template<typename T>\n  [[nodiscard]] const T& read() const noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    return *as<T>();\n  }\n\n  template<typename T>\n  [[nodiscard]] bool tryReadAt(uint32_t offset,\n                               T& outValue,\n                               igl::Result* IGL_NULLABLE outResult) const noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    if (!ensureLength(static_cast<uint32_t>(sizeof(T)), offset, outResult)) {\n      return false;\n    }\n    outValue = readAt<T>(offset);\n    return true;\n  }\n\n  template<typename T>\n  [[nodiscard]] const T& readAt(uint32_t offset) const noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    return *asAt<T>(offset);\n  }\n\n  template<typename T>\n  [[nodiscard]] bool tryAdvance(igl::Result* IGL_NULLABLE outResult) noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    return tryAdvance(static_cast<uint32_t>(sizeof(T)), outResult);\n  }\n  [[nodiscard]] bool tryAdvance(uint32_t bytesToAdvance,\n                                igl::Result* IGL_NULLABLE outResult) noexcept;\n\n  template<typename T>\n  void advance() noexcept {\n    static_assert(sizeof(T) <= std::numeric_limits<uint32_t>::max());\n    advance(static_cast<uint32_t>(sizeof(T)));\n  }\n  void advance(uint32_t bytesToAdvance) noexcept;\n\n private:\n  DataReader(const uint8_t* IGL_NONNULL data, uint32_t size) noexcept;\n  [[nodiscard]] bool ensureLength(uint32_t requestedLength,\n                                  uint32_t offset,\n                                  igl::Result* IGL_NULLABLE outResult) const noexcept;\n\n  // Prevent heap allocation\n  static void* IGL_NONNULL operator new(std::size_t);\n  static void* IGL_NONNULL operator new[](std::size_t);\n\n  const uint8_t* FOLLY_NONNULL data_;\n  uint32_t size_;\n};\n\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/IData.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/IData.h>\n\nnamespace iglu::textureloader {\nnamespace {\nclass ByteData final : public IData {\n public:\n  ByteData(std::unique_ptr<uint8_t[]> data, uint64_t size) noexcept;\n\n  ~ByteData() final = default;\n\n  [[nodiscard]] const uint8_t* IGL_NONNULL data() const noexcept final;\n  [[nodiscard]] uint64_t size() const noexcept final;\n\n  [[nodiscard]] ExtractedData extractData() noexcept final;\n\n private:\n  std::unique_ptr<uint8_t[]> data_;\n  uint64_t size_ = 0;\n};\n\nByteData::ByteData(std::unique_ptr<uint8_t[]> data, uint64_t size) noexcept :\n  data_(std::move(data)), size_(size) {}\n\nconst uint8_t* IGL_NONNULL ByteData::data() const noexcept {\n  IGL_DEBUG_ASSERT(data_ != nullptr);\n  return data_.get();\n}\n\nuint64_t ByteData::size() const noexcept {\n  return size_;\n}\n\nIData::ExtractedData ByteData::extractData() noexcept {\n  return {\n      .data = data_.release(),\n      .size = size_,\n      .deleter = [](void* d) { delete[] reinterpret_cast<uint8_t*>(d); },\n  };\n}\n} // namespace\n\nstd::unique_ptr<IData> IData::tryCreate(std::unique_ptr<uint8_t[]> data,\n                                        uint64_t size,\n                                        igl::Result* IGL_NULLABLE outResult) {\n  if (data == nullptr) {\n    igl::Result::setResult(outResult, igl::Result::Code::ArgumentNull, \"data is nullptr\");\n    return nullptr;\n  }\n\n  if (size == 0u) {\n    igl::Result::setResult(outResult, igl::Result::Code::ArgumentInvalid, \"size is 0\");\n    return nullptr;\n  }\n\n  return std::make_unique<ByteData>(std::move(data), size);\n}\n\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/IData.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/Common.h>\n\nnamespace iglu::textureloader {\n\n/// Interface for accessing data.\nclass IData {\n protected:\n  IData() noexcept = default;\n\n public:\n  using Deleter = void (*)(void*);\n  virtual ~IData() = default;\n\n  static std::unique_ptr<IData> tryCreate(std::unique_ptr<uint8_t[]> data,\n                                          uint64_t size,\n                                          igl::Result* IGL_NULLABLE outResult);\n\n  /// @returns a read-only pointer to the data. May be nullptr.\n  [[nodiscard]] virtual const uint8_t* IGL_NONNULL data() const noexcept = 0;\n  /// @returns the size of the data in bytes.\n  [[nodiscard]] virtual uint64_t size() const noexcept = 0;\n\n  struct ExtractedData {\n    /// Pointer to data. May be nullptr.\n    const void* data = nullptr;\n    /// Size in bytes of the data.\n    uint64_t size = 0u;\n    /// A deleter that can be use to free data. May be nullptr.\n    void (*deleter)(void*) = nullptr;\n  };\n  /// Extracts data from this IData and returns it in an ExtractedData struct. After this method,\n  /// the behavior of data() and size() are undefined.\n  [[nodiscard]] virtual ExtractedData extractData() noexcept;\n};\n\n[[nodiscard]] inline IData::ExtractedData IData::extractData() noexcept {\n  return {\n      .data = const_cast<uint8_t*>(data()),\n      .size = size(),\n  };\n}\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/ITextureLoader.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/ITextureLoader.h>\n\n#include <IGLU/texture_loader/IData.h>\n#include <igl/Device.h>\n#include <igl/IGLSafeC.h>\n\nnamespace iglu::textureloader {\n\n/// Interface for getting CPU access to GPU texture data\nITextureLoader::ITextureLoader(DataReader reader, igl::TextureDesc::TextureUsage usage) noexcept :\n  reader_(reader) {\n  IGL_DEBUG_ASSERT(reader.data() != nullptr && reader.size() > 0);\n  desc_.usage = usage;\n}\n\nigl::TextureDesc& ITextureLoader::mutableDescriptor() noexcept {\n  return desc_;\n}\n\nconst igl::TextureDesc& ITextureLoader::descriptor() const noexcept {\n  return desc_;\n}\n\n[[nodiscard]] uint32_t ITextureLoader::memorySizeInBytes() const noexcept {\n  const auto properties = igl::TextureFormatProperties::fromTextureFormat(desc_.format);\n  const igl::TextureRangeDesc range = {\n      .width = desc_.width,\n      .height = desc_.height,\n      .depth = desc_.depth,\n      .numLayers = desc_.numLayers,\n      .numMipLevels = shouldGenerateMipmaps() ? 1 : desc_.numMipLevels,\n      .numFaces = desc_.type == igl::TextureType::Cube ? 6u : 1u,\n  };\n\n  // If the format is a variable length format, we need to sum up the size of each mip level\n  // as specified in the KTX file\n  if (properties.isVariableLength()) {\n    uint32_t size = 0;\n    for (uint32_t mipLevel = range.mipLevel; mipLevel < (range.mipLevel + range.numMipLevels);\n         mipLevel++) {\n      size += getMemorySizeInBytesFromFile(mipLevel);\n    }\n    return size;\n  }\n\n  return static_cast<uint32_t>(properties.getBytesPerRange(range));\n}\n\nbool ITextureLoader::isSupported(const igl::ICapabilities& capabilities) const noexcept {\n  return isSupported(capabilities, desc_.usage);\n}\n\nbool ITextureLoader::isSupported(const igl::ICapabilities& capabilities,\n                                 igl::TextureDesc::TextureUsage usage) const noexcept {\n  const auto caps = capabilities.getTextureFormatCapabilities(desc_.format);\n\n  const bool isSampled = (usage & igl::TextureDesc::TextureUsageBits::Sampled) != 0;\n  const bool isAttachment = (usage & igl::TextureDesc::TextureUsageBits::Attachment) != 0;\n  const bool isStorage = (usage & igl::TextureDesc::TextureUsageBits::Storage) != 0;\n\n  if (isSampled && isAttachment &&\n      !igl::contains(caps, igl::ICapabilities::TextureFormatCapabilityBits::SampledAttachment)) {\n    return false;\n  } else if (isSampled &&\n             !igl::contains(caps, igl::ICapabilities::TextureFormatCapabilityBits::Sampled)) {\n    return false;\n  } else if (isAttachment &&\n             !igl::contains(caps, igl::ICapabilities::TextureFormatCapabilityBits::Attachment)) {\n    return false;\n  } else if (isStorage &&\n             !igl::contains(caps, igl::ICapabilities::TextureFormatCapabilityBits::Storage)) {\n    return false;\n  }\n\n  return true;\n}\n\nstd::shared_ptr<igl::ITexture> ITextureLoader::create(const igl::IDevice& device,\n                                                      igl::Result* IGL_NULLABLE\n                                                          outResult) const noexcept {\n  return create(device, desc_.format, desc_.usage, outResult);\n}\n\nstd::shared_ptr<igl::ITexture> ITextureLoader::create(const igl::IDevice& device,\n                                                      igl::TextureFormat preferredFormat,\n                                                      igl::Result* IGL_NULLABLE\n                                                          outResult) const noexcept {\n  return create(device, preferredFormat, desc_.usage, outResult);\n}\n\nstd::shared_ptr<igl::ITexture> ITextureLoader::create(const igl::IDevice& device,\n                                                      igl::TextureDesc::TextureUsage usage,\n                                                      igl::Result* IGL_NULLABLE\n                                                          outResult) const noexcept {\n  return create(device, igl::TextureFormat::Invalid, usage, outResult);\n}\n\nstd::shared_ptr<igl::ITexture> ITextureLoader::create(const igl::IDevice& device,\n                                                      igl::TextureFormat preferredFormat,\n                                                      igl::TextureDesc::TextureUsage usage,\n                                                      igl::Result* IGL_NULLABLE\n                                                          outResult) const noexcept {\n  igl::TextureDesc desc = desc_;\n  desc.format = preferredFormat == igl::TextureFormat::Invalid ? desc_.format : preferredFormat;\n  desc.usage = usage;\n  IGL_DEBUG_ASSERT(isSupported(device, usage));\n  return device.createTexture(desc, outResult);\n}\n\nvoid ITextureLoader::upload(igl::ITexture& texture,\n                            igl::Result* IGL_NULLABLE outResult) const noexcept {\n  const auto dimensions = texture.getDimensions();\n  if (texture.getType() != desc_.type ||\n      (desc_.numMipLevels > 1 && texture.getNumMipLevels() != desc_.numMipLevels) ||\n      texture.getNumLayers() != desc_.numLayers || dimensions.width != desc_.width ||\n      dimensions.height != desc_.height || dimensions.depth != desc_.depth ||\n      texture.getFormat() != desc_.format) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::InvalidOperation, \"Texture descriptor mismatch.\");\n    return;\n  }\n\n  uploadInternal(texture, outResult);\n}\n\nstd::unique_ptr<IData> ITextureLoader::load(igl::Result* IGL_NULLABLE outResult) const noexcept {\n  return loadInternal(outResult);\n}\n\nvoid ITextureLoader::loadToExternalMemory(uint8_t* IGL_NONNULL data,\n                                          uint32_t length,\n                                          igl::Result* IGL_NULLABLE outResult) const noexcept {\n  if (data == nullptr) {\n    igl::Result::setResult(outResult, igl::Result::Code::ArgumentNull, \"data is nullptr.\");\n    return;\n  }\n  if (length < memorySizeInBytes()) {\n    igl::Result::setResult(outResult, igl::Result::Code::ArgumentInvalid, \"length is too short.\");\n    return;\n  }\n\n  return loadToExternalMemoryInternal(data, length, outResult);\n}\n\nDataReader& ITextureLoader::reader() noexcept {\n  return reader_;\n}\n\nconst DataReader& ITextureLoader::reader() const noexcept {\n  return reader_;\n}\n\nvoid ITextureLoader::defaultUpload(igl::ITexture& texture,\n                                   igl::Result* IGL_NULLABLE outResult) const noexcept {\n  std::unique_ptr<IData> data;\n\n  if (!canUploadSourceData()) {\n    data = load(outResult);\n    if (!data) {\n      return;\n    }\n  }\n\n  const auto range = shouldGenerateMipmaps() ? texture.getFullRange() : texture.getFullMipRange();\n  auto result = texture.upload(range, data ? data->data() : reader_.data());\n  igl::Result::setResult(outResult, std::move(result));\n}\n\nstd::unique_ptr<IData> ITextureLoader::defaultLoad(\n    igl::Result* IGL_NULLABLE outResult) const noexcept {\n  const uint32_t length = memorySizeInBytes();\n  auto data = std::make_unique<uint8_t[]>(length);\n  if (!data) {\n    igl::Result::setResult(outResult, igl::Result::Code::RuntimeError, \"out of memory.\");\n    return nullptr;\n  }\n\n  loadToExternalMemory(data.get(), length, outResult);\n\n  return IData::tryCreate(std::move(data), length, outResult);\n}\n\nvoid ITextureLoader::defaultLoadToExternalMemory(uint8_t* IGL_NONNULL data,\n                                                 uint32_t length,\n                                                 igl::Result* IGL_NULLABLE\n                                                     outResult) const noexcept {\n  if (reader_.size() != length) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentInvalid, \"length doesn't match reader length.\");\n    return;\n  }\n  checked_memcpy(data, length, reader_.data(), length);\n}\n\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/ITextureLoader.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/DataReader.h>\n#include <IGLU/texture_loader/IData.h>\n#include <igl/Texture.h>\n\nnamespace igl {\nclass ICapabilities;\nclass IDevice;\n} // namespace igl\n\nnamespace iglu::textureloader {\n\n/// Interface for getting CPU access to GPU texture data\nclass ITextureLoader {\n protected:\n  explicit ITextureLoader(\n      DataReader reader,\n      igl::TextureDesc::TextureUsage usage = igl::TextureDesc::TextureUsageBits::Sampled) noexcept;\n\n public:\n  virtual ~ITextureLoader() = default;\n\n  [[nodiscard]] const igl::TextureDesc& descriptor() const noexcept;\n\n  [[nodiscard]] virtual std::vector<uint32_t> mipLevelBytes() const noexcept {\n    return {};\n  }\n\n  [[nodiscard]] uint32_t memorySizeInBytes() const noexcept;\n\n  [[nodiscard]] bool isSupported(const igl::ICapabilities& capabilities) const noexcept;\n  [[nodiscard]] bool isSupported(const igl::ICapabilities& capabilities,\n                                 igl::TextureDesc::TextureUsage usage) const noexcept;\n\n  [[nodiscard]] std::shared_ptr<igl::ITexture> create(const igl::IDevice& device,\n                                                      igl::Result* IGL_NULLABLE\n                                                          outResult) const noexcept;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> create(const igl::IDevice& device,\n                                                      igl::TextureFormat preferredFormat,\n                                                      igl::Result* IGL_NULLABLE\n                                                          outResult) const noexcept;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> create(const igl::IDevice& device,\n                                                      igl::TextureFormat preferredFormat,\n                                                      igl::TextureDesc::TextureUsage usage,\n                                                      igl::Result* IGL_NULLABLE\n                                                          outResult) const noexcept;\n  [[nodiscard]] std::shared_ptr<igl::ITexture> create(const igl::IDevice& device,\n                                                      igl::TextureDesc::TextureUsage usage,\n                                                      igl::Result* IGL_NULLABLE\n                                                          outResult) const noexcept;\n\n  [[nodiscard]] virtual bool canUploadSourceData() const noexcept {\n    return false;\n  }\n  [[nodiscard]] virtual bool canUseExternalMemory() const noexcept {\n    return false;\n  }\n\n  void upload(igl::ITexture& texture, igl::Result* IGL_NULLABLE outResult) const noexcept;\n\n  [[nodiscard]] std::unique_ptr<IData> load(igl::Result* IGL_NULLABLE outResult) const noexcept;\n  void loadToExternalMemory(uint8_t* IGL_NONNULL data,\n                            uint32_t length,\n                            igl::Result* IGL_NULLABLE outResult) const noexcept;\n\n  [[nodiscard]] virtual bool shouldGenerateMipmaps() const noexcept {\n    return desc_.numMipLevels > 1;\n  }\n\n protected:\n  [[nodiscard]] DataReader& reader() noexcept;\n  [[nodiscard]] const DataReader& reader() const noexcept;\n\n  [[nodiscard]] igl::TextureDesc& mutableDescriptor() noexcept;\n\n  virtual void uploadInternal(igl::ITexture& texture,\n                              igl::Result* IGL_NULLABLE outResult) const noexcept {\n    defaultUpload(texture, outResult);\n  }\n\n  [[nodiscard]] virtual std::unique_ptr<IData> loadInternal(\n      igl::Result* IGL_NULLABLE outResult) const noexcept {\n    return defaultLoad(outResult);\n  }\n\n  virtual void loadToExternalMemoryInternal(uint8_t* IGL_NONNULL data,\n                                            uint32_t length,\n                                            igl::Result* IGL_NULLABLE outResult) const noexcept {\n    defaultLoadToExternalMemory(data, length, outResult);\n  }\n\n  [[nodiscard]] virtual size_t getMemorySizeInBytesFromFile(uint32_t miplevel) const noexcept {\n    return 0;\n  }\n\n private:\n  void defaultUpload(igl::ITexture& texture, igl::Result* IGL_NULLABLE outResult) const noexcept;\n  [[nodiscard]] std::unique_ptr<IData> defaultLoad(\n      igl::Result* IGL_NULLABLE outResult) const noexcept;\n  void defaultLoadToExternalMemory(uint8_t* IGL_NONNULL data,\n                                   uint32_t length,\n                                   igl::Result* IGL_NULLABLE outResult) const noexcept;\n\n  igl::TextureDesc desc_;\n  DataReader reader_;\n};\n\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/ITextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/ITextureLoaderFactory.h>\n\nnamespace iglu::textureloader {\n\nbool ITextureLoaderFactory::canCreate(const uint8_t* IGL_NONNULL headerData,\n                                      uint32_t headerLength,\n                                      igl::Result* IGL_NULLABLE outResult) const noexcept {\n  auto maybeReader = DataReader::tryCreate(headerData, headerLength, outResult);\n  if (!maybeReader.has_value()) {\n    return false;\n  }\n\n  return canCreate(*maybeReader, outResult);\n}\n\nbool ITextureLoaderFactory::canCreate(DataReader headerReader,\n                                      igl::Result* IGL_NULLABLE outResult) const noexcept {\n  if (headerReader.data() == nullptr) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentInvalid, \"Reader's data is nullptr.\");\n    return false;\n  }\n  if (headerReader.size() < minHeaderLength()) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentOutOfRange, \"Not enough data for header.\");\n    return false;\n  }\n\n  return canCreateInternal(headerReader, outResult);\n}\n\nstd::unique_ptr<ITextureLoader> ITextureLoaderFactory::tryCreate(const uint8_t* IGL_NONNULL data,\n                                                                 uint32_t length,\n                                                                 igl::Result* IGL_NULLABLE\n                                                                     outResult) const noexcept {\n  return tryCreate(data, length, igl::TextureFormat::Invalid, outResult);\n}\n\nstd::unique_ptr<ITextureLoader> ITextureLoaderFactory::tryCreate(const uint8_t* IGL_NONNULL data,\n                                                                 uint32_t length,\n                                                                 igl::TextureFormat preferredFormat,\n                                                                 igl::Result* IGL_NULLABLE\n                                                                     outResult) const noexcept {\n  auto maybeReader = DataReader::tryCreate(data, length, outResult);\n  if (!maybeReader.has_value()) {\n    return nullptr;\n  }\n\n  return tryCreate(*maybeReader, preferredFormat, outResult);\n}\n\nstd::unique_ptr<ITextureLoader> ITextureLoaderFactory::tryCreate(DataReader reader,\n                                                                 igl::Result* IGL_NULLABLE\n                                                                     outResult) const noexcept {\n  return tryCreate(reader, igl::TextureFormat::Invalid, outResult);\n}\n\nstd::unique_ptr<ITextureLoader> ITextureLoaderFactory::tryCreate(DataReader reader,\n                                                                 igl::TextureFormat preferredFormat,\n                                                                 igl::Result* IGL_NULLABLE\n                                                                     outResult) const noexcept {\n  if (!canCreate(reader, outResult)) {\n    return nullptr;\n  }\n\n  return tryCreateInternal(reader, preferredFormat, outResult);\n}\n\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/ITextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/DataReader.h>\n#include <IGLU/texture_loader/ITextureLoader.h>\n#include <igl/Common.h>\n#include <igl/TextureFormat.h>\n\nnamespace iglu::textureloader {\n\n/// Interface for creating ITextureLoader instances for a specific format.\nclass ITextureLoaderFactory {\n protected:\n  ITextureLoaderFactory() = default;\n\n public:\n  virtual ~ITextureLoaderFactory() = default;\n\n  [[nodiscard]] virtual uint32_t minHeaderLength() const noexcept = 0;\n  [[nodiscard]] virtual uint32_t maxHeaderLength() const noexcept {\n    return minHeaderLength();\n  }\n  [[nodiscard]] bool canCreate(const uint8_t* IGL_NONNULL headerData,\n                               uint32_t headerLength,\n                               igl::Result* IGL_NULLABLE outResult) const noexcept;\n  [[nodiscard]] bool canCreate(DataReader headerReader,\n                               igl::Result* IGL_NULLABLE outResult) const noexcept;\n\n  [[nodiscard]] std::unique_ptr<ITextureLoader> tryCreate(const uint8_t* IGL_NONNULL data,\n                                                          uint32_t length,\n                                                          igl::Result* IGL_NULLABLE\n                                                              outResult) const noexcept;\n  [[nodiscard]] std::unique_ptr<ITextureLoader> tryCreate(const uint8_t* IGL_NONNULL data,\n                                                          uint32_t length,\n                                                          igl::TextureFormat preferredFormat,\n                                                          igl::Result* IGL_NULLABLE\n                                                              outResult) const noexcept;\n  [[nodiscard]] std::unique_ptr<ITextureLoader> tryCreate(DataReader reader,\n                                                          igl::Result* IGL_NULLABLE\n                                                              outResult) const noexcept;\n  [[nodiscard]] std::unique_ptr<ITextureLoader> tryCreate(DataReader reader,\n                                                          igl::TextureFormat preferredFormat,\n                                                          igl::Result* IGL_NULLABLE\n                                                              outResult) const noexcept;\n\n protected:\n  [[nodiscard]] virtual bool canCreateInternal(DataReader headerReader,\n                                               igl::Result* IGL_NULLABLE\n                                                   outResult) const noexcept = 0;\n  [[nodiscard]] virtual std::unique_ptr<ITextureLoader> tryCreateInternal(\n      DataReader reader,\n      igl::TextureFormat preferredFormat,\n      igl::Result* IGL_NULLABLE outResult) const noexcept = 0;\n};\n\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/TextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/TextureLoaderFactory.h>\n\nnamespace iglu::textureloader {\n\nTextureLoaderFactory::TextureLoaderFactory(\n    std::vector<std::unique_ptr<ITextureLoaderFactory>>&& factories) :\n  factories_(std::move(factories)), minHeaderLength_(0), maxHeaderLength_(0) {\n  bool first = true;\n  for (const auto& factory : factories_) {\n    if (first) {\n      minHeaderLength_ = factory->minHeaderLength();\n    } else {\n      minHeaderLength_ = std::min(minHeaderLength_, factory->minHeaderLength());\n    }\n    maxHeaderLength_ = std::max(maxHeaderLength_, factory->maxHeaderLength());\n    first = false;\n  }\n}\n\nuint32_t TextureLoaderFactory::minHeaderLength() const noexcept {\n  return minHeaderLength_;\n}\n\nuint32_t TextureLoaderFactory::maxHeaderLength() const noexcept {\n  return maxHeaderLength_;\n}\n\nbool TextureLoaderFactory::canCreateInternal(DataReader headerReader,\n                                             igl::Result* IGL_NULLABLE outResult) const noexcept {\n  for (const auto& factory : factories_) {\n    if (factory->canCreate(headerReader, nullptr)) {\n      return true;\n    }\n  }\n\n  igl::Result::setResult(outResult, igl::Result::Code::RuntimeError, \"No factory found.\");\n  return false;\n}\n\nstd::unique_ptr<ITextureLoader> TextureLoaderFactory::tryCreateInternal(\n    DataReader reader,\n    igl::TextureFormat preferredFormat,\n    igl::Result* IGL_NULLABLE outResult) const noexcept {\n  for (const auto& factory : factories_) {\n    auto loader = factory->tryCreate(reader, preferredFormat, nullptr);\n    if (loader) {\n      return loader;\n    }\n  }\n  igl::Result::setResult(outResult, igl::Result::Code::RuntimeError, \"No factory found.\");\n  return nullptr;\n}\n\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/TextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/ITextureLoaderFactory.h>\n#include <vector>\n\nnamespace iglu::textureloader {\n\n/// Factory for creating ITextureLoader instances for supported formats.\nclass TextureLoaderFactory : public ITextureLoaderFactory {\n  using Super = ITextureLoaderFactory;\n\n public:\n  explicit TextureLoaderFactory(std::vector<std::unique_ptr<ITextureLoaderFactory>>&& factories);\n  ~TextureLoaderFactory() override = default;\n\n  [[nodiscard]] uint32_t minHeaderLength() const noexcept final;\n  [[nodiscard]] uint32_t maxHeaderLength() const noexcept final;\n\n protected:\n  [[nodiscard]] bool canCreateInternal(DataReader headerReader,\n                                       igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  [[nodiscard]] std::unique_ptr<ITextureLoader> tryCreateInternal(\n      DataReader reader,\n      igl::TextureFormat preferredFormat,\n      igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n private:\n  std::vector<std::unique_ptr<ITextureLoaderFactory>> factories_;\n  uint32_t minHeaderLength_;\n  uint32_t maxHeaderLength_;\n};\n\n} // namespace iglu::textureloader\n"
  },
  {
    "path": "IGLU/texture_loader/ktx/TextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/ktx/TextureLoaderFactory.h>\n\n#include <ktx.h>\n#include <igl/IGLSafeC.h>\n\n// @fb-only\n// @fb-only\n// @fb-only\n\nnamespace iglu::textureloader::ktx {\nnamespace {\n\nstruct KtxDeleter {\n  void operator()(void* p) const {\n    ktxTexture_Destroy(ktxTexture(p));\n  }\n};\n\nclass TextureLoader : public ITextureLoader {\n  using Super = ITextureLoader;\n\n public:\n  TextureLoader(DataReader reader,\n                const igl::TextureRangeDesc& range,\n                igl::TextureFormat format,\n                std::unique_ptr<ktxTexture, KtxDeleter> texture) noexcept;\n\n  [[nodiscard]] bool canUploadSourceData() const noexcept final;\n  [[nodiscard]] bool shouldGenerateMipmaps() const noexcept final;\n\n  [[nodiscard]] size_t getMemorySizeInBytesFromFile(uint32_t miplevel) const noexcept final {\n    // Structure to hold the data for the callback function\n    struct Data {\n      uint32_t mipLevel = 0;\n      ktx_uint64_t size = 0;\n    };\n\n    // Store the mip level in the userData struct\n    Data userData = {\n        .mipLevel = miplevel,\n    };\n\n    // Callback function to iterate over the mip levels and calculate the total size\n    // Passed to the ktxTexture_IterateLevelFaces function\n    PFNKTXITERCB iterCb = [](int miplevel,\n                             int face,\n                             int width,\n                             int height,\n                             int depth,\n                             ktx_uint64_t faceLodSize,\n                             void* pixels,\n                             void* userdata) -> ktx_error_code_e {\n      Data* data = static_cast<Data*>(userdata);\n      data->size += (data->mipLevel == miplevel) ? faceLodSize : 0;\n      return KTX_SUCCESS;\n    };\n    const auto result = ktxTexture_IterateLevelFaces(texture_.get(), iterCb, &userData);\n    if (result == KTX_SUCCESS) {\n      return userData.size;\n    }\n\n    return 0;\n  }\n\n  [[nodiscard]] std::vector<uint32_t> mipLevelBytes() const noexcept override {\n    std::vector<uint32_t> mipLevelBytes;\n    mipLevelBytes.reserve(descriptor().numMipLevels);\n    for (uint32_t i = 0; i < descriptor().numMipLevels; ++i) {\n      mipLevelBytes.push_back(static_cast<uint32_t>(getMemorySizeInBytesFromFile(i)));\n    }\n    return mipLevelBytes;\n  }\n\n private:\n  void uploadInternal(igl::ITexture& texture,\n                      igl::Result* IGL_NULLABLE outResult) const noexcept final;\n  void loadToExternalMemoryInternal(uint8_t* IGL_NONNULL data,\n                                    uint32_t length,\n                                    igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  std::unique_ptr<ktxTexture, KtxDeleter> texture_;\n};\n\nTextureLoader::TextureLoader(DataReader reader,\n                             const igl::TextureRangeDesc& range,\n                             igl::TextureFormat format,\n                             std::unique_ptr<ktxTexture, KtxDeleter> texture) noexcept :\n  Super(reader), texture_(std::move(texture)) {\n  auto& desc = mutableDescriptor();\n  desc.format = format;\n  desc.numLayers = range.numLayers;\n  desc.width = range.width;\n  desc.height = range.height;\n  desc.depth = range.depth;\n  desc.numMipLevels = shouldGenerateMipmaps()\n                          ? igl::TextureDesc::calcNumMipLevels(desc.width, desc.height, desc.depth)\n                          : range.numMipLevels;\n\n  if (range.numFaces == 6u) {\n    desc.type = igl::TextureType::Cube;\n  } else if (desc.depth > 1) {\n    desc.type = igl::TextureType::ThreeD;\n  } else if (desc.numLayers > 1) {\n    desc.type = igl::TextureType::TwoDArray;\n  } else {\n    desc.type = igl::TextureType::TwoD;\n  }\n}\n\nbool TextureLoader::canUploadSourceData() const noexcept {\n  return true;\n}\n\nbool TextureLoader::shouldGenerateMipmaps() const noexcept {\n  return texture_->generateMipmaps;\n}\n\nvoid TextureLoader::uploadInternal(igl::ITexture& texture,\n                                   igl::Result* IGL_NULLABLE outResult) const noexcept {\n  const auto& desc = descriptor();\n\n  size_t offset = 0;\n  for (uint32_t mipLevel = 0; mipLevel < desc.numMipLevels && mipLevel < texture_->numLevels;\n       ++mipLevel) {\n    const auto ktxResult =\n        ktxTexture_GetImageOffset(ktxTexture(texture_.get()), mipLevel, 0, 0, &offset);\n    if (ktxResult != KTX_SUCCESS) {\n      IGL_LOG_ERROR(\n          \"Error getting KTX texture data: %d %s\\n\", ktxResult, ktxErrorString(ktxResult));\n      igl::Result::setResult(\n          outResult, igl::Result::Code::RuntimeError, \"Error getting KTX texture data.\");\n    }\n    texture.upload(texture.getFullRange(mipLevel), texture_->pData + offset);\n  }\n\n  igl::Result::setOk(outResult);\n}\n\nvoid TextureLoader::loadToExternalMemoryInternal(uint8_t* IGL_NONNULL data,\n                                                 uint32_t length,\n                                                 igl::Result* IGL_NULLABLE\n                                                     outResult) const noexcept {\n  const auto& desc = descriptor();\n\n  size_t offsetDestination = 0;\n  size_t offsetSource = 0;\n  for (uint32_t mipLevel = 0; mipLevel < desc.numMipLevels && mipLevel < texture_->numLevels;\n       ++mipLevel) {\n    auto ktxResult =\n        ktxTexture_GetImageOffset(ktxTexture(texture_.get()), mipLevel, 0, 0, &offsetSource);\n    if (ktxResult != KTX_SUCCESS) {\n      IGL_LOG_ERROR(\n          \"Error getting KTX texture data: %d %s\\n\", ktxResult, ktxErrorString(ktxResult));\n      igl::Result::setResult(\n          outResult, igl::Result::Code::RuntimeError, \"Error getting KTX texture data.\");\n    }\n\n    ktx_size_t mipLevelLength = 0;\n// @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n    // @fb-only\n// @fb-only\n      mipLevelLength = ktxTexture_GetImageSize(ktxTexture(texture_.get()), mipLevel);\n// @fb-only\n    // @fb-only\n      // @fb-only\n    // @fb-only\n// @fb-only\n\n    // Naively, we could just check mipmapLength > length - offset. However,\n    // if offset is very large, e.g. size_t(-1), then destination_size - offset\n    // will overflow `size_t` and hence act additive to destination_size.\n    //\n    // To avoid this, we properly compute the available_size and then check that.\n    const size_t availableSize = offsetSource > length ? 0 : length - offsetSource;\n    if (mipLevelLength > availableSize) {\n      igl::Result::setResult(\n          outResult, igl::Result::Code::InvalidOperation, \"data length is too small.\");\n      return;\n    }\n\n    checked_memcpy_offset(\n        data, length, offsetDestination, texture_->pData + offsetSource, mipLevelLength);\n    offsetDestination += mipLevelLength;\n  }\n}\n} // namespace\n\nstd::unique_ptr<ITextureLoader> TextureLoaderFactory::tryCreateInternal(\n    DataReader reader,\n    igl::TextureFormat /*preferredFormat*/,\n    igl::Result* IGL_NULLABLE outResult) const noexcept {\n  const auto range = textureRange(reader);\n  auto result = range.validate();\n  if (!result.isOk()) {\n    igl::Result::setResult(outResult, std::move(result));\n    return nullptr;\n  }\n\n  if (!validate(reader, range, outResult)) {\n    return nullptr;\n  }\n\n  ktxTexture* rawTexture = nullptr;\n  const auto ktxResult = ktxTexture_CreateFromMemory(\n      reader.data(), reader.size(), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &rawTexture);\n\n  if (ktxResult != KTX_SUCCESS || rawTexture == nullptr) {\n    IGL_LOG_ERROR(\"Error loading KTX texture: %d %s\\n\", ktxResult, ktxErrorString(ktxResult));\n    igl::Result::setResult(\n        outResult, igl::Result::Code::RuntimeError, \"Error loading KTX texture.\");\n    if (rawTexture != nullptr) {\n      ktxTexture_Destroy(rawTexture);\n    }\n    return nullptr;\n  }\n\n  auto texture = std::unique_ptr<ktxTexture, KtxDeleter>(rawTexture);\n\n  if (ktxTexture_NeedsTranscoding(rawTexture)) {\n#if IGL_PLATFORM_ANDROID || IGL_PLATFORM_IOS\n    constexpr ktx_transcode_fmt_e transcodeFormat = KTX_TTF_ASTC_4x4_RGBA;\n#else\n    constexpr ktx_transcode_fmt_e transcodeFormat = KTX_TTF_BC7_RGBA;\n#endif\n    const auto transcodingResult =\n        ktxTexture2_TranscodeBasis(reinterpret_cast<ktxTexture2*>(rawTexture), transcodeFormat, 0);\n    if (transcodingResult != KTX_SUCCESS) {\n      IGL_LOG_ERROR(\"Error transcoding KTX texture: %d %s\\n\",\n                    transcodingResult,\n                    ktxErrorString(transcodingResult));\n      igl::Result::setResult(\n          outResult, igl::Result::Code::RuntimeError, \"Error transcoding KTX texture.\");\n      return nullptr;\n    }\n  }\n\n  const auto format = textureFormat(rawTexture);\n  if (format == igl::TextureFormat::Invalid) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::RuntimeError, \"Unsupported KTX texture format.\");\n    return nullptr;\n  }\n\n  if (texture->numFaces == 6u && texture->numLayers > 1u) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::InvalidOperation, \"Texture cube arrays not supported.\");\n    return nullptr;\n  }\n\n  if (texture->numLayers > 1 && texture->baseDepth > 1u) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::InvalidOperation, \"3D texture arrays not supported.\");\n    return nullptr;\n  }\n\n  if (texture->numFaces != 1u && texture->numFaces != 6u) {\n    igl::Result::setResult(outResult, igl::Result::Code::InvalidOperation, \"faces must be 1 or 6.\");\n    return nullptr;\n  }\n\n  if (texture->numFaces == 6u && texture->baseDepth != 1u) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::InvalidOperation, \"depth must be 1 for cube textures.\");\n    return nullptr;\n  }\n\n  if (texture->numFaces == 6u && texture->baseWidth != texture->baseHeight) {\n    igl::Result::setResult(outResult,\n                           igl::Result::Code::InvalidOperation,\n                           \"pixelWidth must match pixelHeight for cube textures.\");\n    return nullptr;\n  }\n\n  return std::make_unique<TextureLoader>(reader, range, format, std::move(texture));\n}\n} // namespace iglu::textureloader::ktx\n"
  },
  {
    "path": "IGLU/texture_loader/ktx/TextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/ITextureLoaderFactory.h>\n\nstruct ktxTexture;\n\nnamespace iglu::textureloader::ktx {\n\n/**\n * @brief ITextureLoaderFactory base class for loading KTX v1 and v2 textures\n */\nclass TextureLoaderFactory : public ITextureLoaderFactory {\n protected:\n  TextureLoaderFactory() noexcept = default;\n  [[nodiscard]] virtual igl::TextureRangeDesc textureRange(DataReader reader) const noexcept = 0;\n\n  [[nodiscard]] virtual bool validate(DataReader reader,\n                                      const igl::TextureRangeDesc& range,\n                                      igl::Result* IGL_NULLABLE outResult) const noexcept = 0;\n\n  [[nodiscard]] virtual igl::TextureFormat textureFormat(\n      const ktxTexture* IGL_NONNULL texture) const noexcept = 0;\n\n private:\n  [[nodiscard]] std::unique_ptr<ITextureLoader> tryCreateInternal(\n      DataReader reader,\n      igl::TextureFormat preferredFormat, // Ignored for KTX textures\n      igl::Result* IGL_NULLABLE outResult) const noexcept final;\n};\n\n} // namespace iglu::textureloader::ktx\n"
  },
  {
    "path": "IGLU/texture_loader/ktx1/Header.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/ktx1/Header.h>\n\n#include <cstring>\n\nnamespace iglu::textureloader::ktx1 {\nnamespace {\nconstexpr const Tag kKtx1FileIdentifier{\n    {0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A}};\n} // namespace\n\nbool Header::tagIsValid() const noexcept {\n  return std::memcmp(tag.data(), kKtx1FileIdentifier.data(), kKtx1FileIdentifier.size()) == 0;\n}\n\n} // namespace iglu::textureloader::ktx1\n"
  },
  {
    "path": "IGLU/texture_loader/ktx1/Header.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <cstdint>\n\nnamespace iglu::textureloader::ktx1 {\n\nusing Tag = std::array<uint8_t, 12>;\n\nstruct Header {\n  Tag tag;\n  uint32_t endianness; // always little Endian\n  uint32_t glType; // For compressed textures, this should always be 0\n  uint32_t glTypeSize; // For compressed textures, this should always be 1\n  uint32_t glFormat;\n  uint32_t glInternalFormat;\n  uint32_t glBaseInternalFormat;\n  uint32_t pixelWidth;\n  uint32_t pixelHeight;\n  uint32_t pixelDepth;\n  uint32_t numberOfArrayElements; // Always 0 for non-array textures\n  uint32_t numberOfFaces; // Always 1 for non cubemap textures\n  uint32_t numberOfMipmapLevels;\n  uint32_t bytesOfKeyValueData; // 0 - extra key-value isn't needed at the moment\n\n  [[nodiscard]] bool tagIsValid() const noexcept;\n};\nstatic_assert(sizeof(Header) == 13 * sizeof(uint32_t) + 12);\n\nconstexpr uint32_t kHeaderLength = static_cast<uint32_t>(sizeof(Header));\n\n} // namespace iglu::textureloader::ktx1\n"
  },
  {
    "path": "IGLU/texture_loader/ktx1/TextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/ktx1/TextureLoaderFactory.h>\n\n#include <IGLU/texture_loader/ktx1/Header.h>\n#include <ktx.h>\n#include <igl/opengl/util/TextureFormat.h>\n\nnamespace iglu::textureloader::ktx1 {\n\nuint32_t TextureLoaderFactory::minHeaderLength() const noexcept {\n  return kHeaderLength;\n}\n\nbool TextureLoaderFactory::canCreateInternal(DataReader headerReader,\n                                             igl::Result* IGL_NULLABLE outResult) const noexcept {\n  if (headerReader.data() == nullptr) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentInvalid, \"Reader's data is nullptr.\");\n    return false;\n  }\n  if (headerReader.size() < kHeaderLength) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentOutOfRange, \"Not enough data for header.\");\n    return false;\n  }\n\n  const Header* header = headerReader.as<Header>();\n  if (!header->tagIsValid()) {\n    igl::Result::setResult(outResult, igl::Result::Code::InvalidOperation, \"Incorrect identifier.\");\n    return false;\n  }\n\n  if (igl::opengl::util::glTextureFormatToTextureFormat(\n          header->glInternalFormat, header->glFormat, header->glType) ==\n      igl::TextureFormat::Invalid) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::InvalidOperation, \"Unrecognized texture format.\");\n    return false;\n  }\n\n  return true;\n}\n\nigl::TextureRangeDesc TextureLoaderFactory::textureRange(DataReader reader) const noexcept {\n  const Header* header = reader.as<Header>();\n  igl::TextureRangeDesc range;\n  range.numMipLevels = std::max(header->numberOfMipmapLevels, 1u);\n  range.numLayers = std::max(header->numberOfArrayElements, 1u);\n  range.numFaces = header->numberOfFaces;\n  range.width = std::max(header->pixelWidth, 1u);\n  range.height = std::max(header->pixelHeight, 1u);\n  range.depth = std::max(header->pixelDepth, 1u);\n  return range;\n}\n\nbool TextureLoaderFactory::validate(DataReader reader,\n                                    const igl::TextureRangeDesc& range,\n                                    igl::Result* IGL_NULLABLE outResult) const noexcept {\n  const Header* header = reader.as<Header>();\n  const uint32_t length = reader.size();\n\n  const auto format = igl::opengl::util::glTextureFormatToTextureFormat(\n      header->glInternalFormat, header->glFormat, header->glType);\n  const auto properties = igl::TextureFormatProperties::fromTextureFormat(format);\n\n  const size_t rangeBytesAsSizeT = properties.getBytesPerRange(range);\n  if (rangeBytesAsSizeT > static_cast<size_t>(length)) {\n    igl::Result::setResult(outResult, igl::Result::Code::InvalidOperation, \"Length is too short.\");\n    return false;\n  }\n  const uint32_t rangeBytes = static_cast<uint32_t>(rangeBytesAsSizeT);\n\n  const uint32_t expectedLength =\n      kHeaderLength + header->bytesOfKeyValueData +\n      header->numberOfMipmapLevels * static_cast<uint32_t>(sizeof(uint32_t)) + rangeBytes;\n\n  if (length < expectedLength) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::InvalidOperation, \"Length shorter than expected length.\");\n    return false;\n  }\n\n  const bool isCubeTexture = header->numberOfFaces == 6u;\n\n  uint32_t offset = kHeaderLength + header->bytesOfKeyValueData;\n  for (size_t mipLevel = 0; mipLevel < range.numMipLevels; ++mipLevel) {\n    uint32_t imageSize = 0;\n    if (!reader.tryReadAt<uint32_t>(offset, imageSize, outResult)) {\n      return false;\n    }\n    const size_t expectedBytes = properties.getBytesPerRange(range.atMipLevel(mipLevel).atFace(0));\n    const size_t expectedCubeBytes = expectedBytes * static_cast<size_t>(6);\n\n    if (imageSize != expectedBytes) {\n      igl::Result::setResult(\n          outResult, igl::Result::Code::InvalidOperation, \"Unexpected image size.\");\n      return false;\n    }\n    offset += 4u;\n    offset += static_cast<uint32_t>(isCubeTexture ? expectedCubeBytes : expectedBytes);\n  }\n\n  return true;\n}\n\nigl::TextureFormat TextureLoaderFactory::textureFormat(const ktxTexture* texture) const noexcept {\n  if (texture->classId == ktxTexture1_c) {\n    const auto* texture1 = reinterpret_cast<const ktxTexture1*>(texture);\n    return igl::opengl::util::glTextureFormatToTextureFormat(\n        texture1->glInternalformat, texture1->glFormat, texture1->glType);\n  }\n\n  return igl::TextureFormat::Invalid;\n}\n\n} // namespace iglu::textureloader::ktx1\n"
  },
  {
    "path": "IGLU/texture_loader/ktx1/TextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/ktx/TextureLoaderFactory.h>\n\nnamespace iglu::textureloader::ktx1 {\n\n/**\n * @brief ITextureLoaderFactory implementation for KTX v1 texture containers\n * @note Texture container format specifications:\n *   https://registry.khronos.org/KTX/specs/1.0/ktxspec.v1.html\n */\nclass TextureLoaderFactory final : public ktx::TextureLoaderFactory {\n public:\n  explicit TextureLoaderFactory() noexcept = default;\n\n  [[nodiscard]] uint32_t minHeaderLength() const noexcept final;\n\n private:\n  [[nodiscard]] bool canCreateInternal(DataReader headerReader,\n                                       igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  [[nodiscard]] igl::TextureRangeDesc textureRange(DataReader reader) const noexcept final;\n\n  [[nodiscard]] bool validate(DataReader reader,\n                              const igl::TextureRangeDesc& range,\n                              igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  [[nodiscard]] igl::TextureFormat textureFormat(\n      const ktxTexture* IGL_NONNULL texture) const noexcept final;\n};\n\n} // namespace iglu::textureloader::ktx1\n"
  },
  {
    "path": "IGLU/texture_loader/ktx2/Header.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/ktx2/Header.h>\n\n#include <cstring>\n\nnamespace iglu::textureloader::ktx2 {\nnamespace {\nconstexpr const Tag kKtx2FileIdentifier{\n    {0xAB, 0x4B, 0x54, 0x58, 0x20, 0x32, 0x30, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A}};\n} // namespace\n\nbool Header::tagIsValid() const noexcept {\n  return std::memcmp(tag.data(), kKtx2FileIdentifier.data(), kKtx2FileIdentifier.size()) == 0;\n}\n\n} // namespace iglu::textureloader::ktx2\n"
  },
  {
    "path": "IGLU/texture_loader/ktx2/Header.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <cstdint>\n\nnamespace iglu::textureloader::ktx2 {\n\nusing Tag = std::array<uint8_t, 12>;\n\nstruct Header {\n  Tag tag;\n  uint32_t vkFormat;\n  uint32_t typeSize;\n  uint32_t pixelWidth;\n  uint32_t pixelHeight;\n  uint32_t pixelDepth;\n  uint32_t layerCount;\n  uint32_t faceCount;\n  uint32_t levelCount;\n  uint32_t supercompressionScheme;\n\n  uint32_t dfdByteOffset;\n  uint32_t dfdByteLength;\n  uint32_t kvdByteOffset;\n  uint32_t kvdByteLength;\n  uint64_t sgdByteOffset;\n  uint64_t sgdByteLength;\n\n  [[nodiscard]] bool tagIsValid() const noexcept;\n};\nstatic_assert(sizeof(Header) == 13 * sizeof(uint32_t) + 2 * sizeof(uint64_t) + 12);\n\nconstexpr uint32_t kHeaderLength = static_cast<uint32_t>(sizeof(Header));\n\n} // namespace iglu::textureloader::ktx2\n"
  },
  {
    "path": "IGLU/texture_loader/ktx2/TextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/ktx2/TextureLoaderFactory.h>\n\n#include <IGLU/texture_loader/ktx2/Header.h>\n#include <ktx.h>\n#include <numeric>\n#include <igl/vulkan/util/TextureFormat.h>\n\n#if IGL_BACKEND_D3D12 && !IGL_BACKEND_VULKAN\n// Provide a fallback for D3D12-only builds where Vulkan support is not compiled in.\nnamespace igl::vulkan::util {\ninline igl::TextureFormat vkTextureFormatToTextureFormat(int32_t /*vkFormat*/) {\n  return igl::TextureFormat::Invalid;\n}\n} // namespace igl::vulkan::util\n#endif\n\n// @fb-only\n// @fb-only\n// @fb-only\n\nnamespace iglu::textureloader::ktx2 {\nnamespace {\ntemplate<typename T>\nT align(T offset, T alignment) {\n  return (offset + (alignment - 1)) & ~(alignment - 1);\n}\n} // namespace\n\nuint32_t TextureLoaderFactory::minHeaderLength() const noexcept {\n  return kHeaderLength;\n}\n\nbool TextureLoaderFactory::canCreateInternal(DataReader headerReader,\n                                             igl::Result* IGL_NULLABLE outResult) const noexcept {\n  if (headerReader.data() == nullptr) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentInvalid, \"Reader's data is nullptr.\");\n    return false;\n  }\n  if (headerReader.size() < kHeaderLength) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentOutOfRange, \"Not enough data for header.\");\n    return false;\n  }\n\n  const Header* header = headerReader.as<Header>();\n  if (!header->tagIsValid()) {\n    igl::Result::setResult(outResult, igl::Result::Code::InvalidOperation, \"Incorrect identifier.\");\n    return false;\n  }\n\n  // vkFormat = 0 means basis universal or some non-Vulkan format.\n  // In either case, we need to process the DFD to understand whether we can really handle the\n  // format or not.\n  if (header->vkFormat != 0 &&\n      igl::vulkan::util::vkTextureFormatToTextureFormat(static_cast<int32_t>(header->vkFormat)) ==\n          igl::TextureFormat::Invalid) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::InvalidOperation, \"Unrecognized texture format.\");\n    return false;\n  }\n\n  return true;\n}\n\nigl::TextureRangeDesc TextureLoaderFactory::textureRange(DataReader reader) const noexcept {\n  const Header* header = reader.as<Header>();\n\n  const igl::TextureRangeDesc range{\n      .width = std::max(header->pixelWidth, 1u),\n      .height = std::max(header->pixelHeight, 1u),\n      .depth = std::max(header->pixelDepth, 1u),\n      .numLayers = std::max(header->layerCount, 1u),\n      .numMipLevels = std::max(header->levelCount, 1u),\n      .numFaces = header->faceCount,\n  };\n\n  return range;\n}\n\nbool TextureLoaderFactory::validate(DataReader reader,\n                                    const igl::TextureRangeDesc& range,\n                                    igl::Result* IGL_NULLABLE outResult) const noexcept {\n  const Header* header = reader.as<Header>();\n  const uint32_t length = reader.size();\n\n  if (header->sgdByteLength > std::numeric_limits<uint32_t>::max()) {\n    igl::Result::setResult(outResult,\n                           igl::Result::Code::InvalidOperation,\n                           \"Super compression global data is too large to fit in uint32_t.\");\n    return false;\n  }\n  const uint32_t sgdByteLength = static_cast<uint32_t>(header->sgdByteLength);\n\n  if (static_cast<uint64_t>(header->dfdByteLength) + static_cast<uint64_t>(header->kvdByteLength) +\n          header->sgdByteLength >\n      static_cast<uint64_t>(length)) {\n    igl::Result::setResult(outResult, igl::Result::Code::InvalidOperation, \"Length is too short.\");\n    return false;\n  }\n\n  if (header->vkFormat != 0u) {\n    const auto format =\n        igl::vulkan::util::vkTextureFormatToTextureFormat(static_cast<int32_t>(header->vkFormat));\n    const auto properties = igl::TextureFormatProperties::fromTextureFormat(format);\n\n    const uint32_t mipLevelAlignment =\n        std::lcm(static_cast<uint32_t>(properties.bytesPerBlock), 4u);\n\n    size_t rangeBytesAsSizeT = 0;\n    for (uint32_t mipLevel = 0; mipLevel < range.numMipLevels; ++mipLevel) {\n      rangeBytesAsSizeT += align(properties.getBytesPerRange(range.atMipLevel(mipLevel)),\n                                 static_cast<size_t>(mipLevelAlignment));\n    }\n\n    if (rangeBytesAsSizeT > length) {\n      igl::Result::setResult(\n          outResult, igl::Result::Code::InvalidOperation, \"Length is too short.\");\n      return false;\n    }\n    const uint32_t rangeBytes = static_cast<uint32_t>(rangeBytesAsSizeT);\n\n    // Mipmap metadata is:\n    //   UInt64 byteOffset\n    //   UInt64 byteLength\n    //   UInt64 uncompressedByteLength\n    const uint32_t mipmapMetadataLength = range.numMipLevels * 24u;\n\n    const uint32_t preSupercompressionMetadataLength =\n        kHeaderLength + mipmapMetadataLength + header->dfdByteLength + header->kvdByteLength;\n\n    const uint32_t metadataLength =\n        sgdByteLength > 0 ? align(preSupercompressionMetadataLength, 8u) + sgdByteLength\n                          : preSupercompressionMetadataLength;\n\n    uint32_t expectedDataOffset = align(metadataLength, mipLevelAlignment);\n\n    const uint32_t expectedLength = expectedDataOffset + rangeBytes;\n    if (length < expectedLength) {\n      igl::Result::setResult(\n          outResult, igl::Result::Code::InvalidOperation, \"Length shorter than expected length.\");\n      return false;\n    }\n\n    for (uint32_t i = 0; i < range.numMipLevels; ++i) {\n      // ktx2 stores actual mip data in 'reverse' order (smallest images to largest) but the\n      // metadata in 'normal' order (largest to smallest). We process the list in the same order the\n      // data is stored to simplify the bookkeeping validation.\n      const uint32_t mipLevel = range.numMipLevels - i - 1;\n\n      const uint32_t offset = kHeaderLength + static_cast<uint32_t>(mipLevel) * 24u;\n      const uint64_t byteOffset = reader.readAt<uint64_t>(offset);\n      const uint64_t byteLength = reader.readAt<uint64_t>(offset + 8u);\n      const uint64_t uncompressedByteLength = reader.readAt<uint64_t>(offset + 16u);\n\n      if (byteLength != uncompressedByteLength && header->supercompressionScheme == 0) {\n        igl::Result::setResult(\n            outResult,\n            igl::Result::Code::InvalidOperation,\n            \"Unexpected difference between byteLength and uncompressedByteLength.\");\n        return false;\n      }\n\n      if (byteOffset != static_cast<uint64_t>(expectedDataOffset)) {\n        igl::Result::setResult(\n            outResult, igl::Result::Code::InvalidOperation, \"Unexpected byteOffset.\");\n        return false;\n      }\n\n      if (static_cast<size_t>(uncompressedByteLength) !=\n          properties.getBytesPerRange(range.atMipLevel(mipLevel))) {\n        igl::Result::setResult(\n            outResult, igl::Result::Code::InvalidOperation, \"Unexpected byteLength.\");\n        return false;\n      }\n\n      expectedDataOffset =\n          align(expectedDataOffset + static_cast<uint32_t>(byteLength), mipLevelAlignment);\n    }\n  }\n\n  return true;\n}\n\nnamespace {\n// @fb-only\n// @fb-only\n// @fb-only\n  // @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n  // @fb-only\n// @fb-only\n// @fb-only\n} // namespace\n\nigl::TextureFormat TextureLoaderFactory::textureFormat(const ktxTexture* texture) const noexcept {\n  if (texture->classId == ktxTexture2_c) {\n// @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n    // @fb-only\n// @fb-only\n      const auto* texture2 = reinterpret_cast<const ktxTexture2*>(texture);\n      return igl::vulkan::util::vkTextureFormatToTextureFormat(\n          static_cast<int32_t>(texture2->vkFormat));\n// @fb-only\n    // @fb-only\n\n    // @fb-only\n    // @fb-only\n\n    // @fb-only\n      // @fb-only\n    // @fb-only\n// @fb-only\n  }\n\n  return igl::TextureFormat::Invalid;\n}\n\n} // namespace iglu::textureloader::ktx2\n"
  },
  {
    "path": "IGLU/texture_loader/ktx2/TextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/ktx/TextureLoaderFactory.h>\n\nnamespace iglu::textureloader::ktx2 {\n\n/**\n * @brief ITextureLoaderFactory implementation for KTX v2 texture containers\n * @note Texture container format specifications:\n *   https://registry.khronos.org/KTX/specs/2.0/ktxspec.v2.html\n */\nclass TextureLoaderFactory final : public ktx::TextureLoaderFactory {\n public:\n  explicit TextureLoaderFactory() noexcept = default;\n\n  [[nodiscard]] uint32_t minHeaderLength() const noexcept final;\n\n private:\n  [[nodiscard]] bool canCreateInternal(DataReader headerReader,\n                                       igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  [[nodiscard]] igl::TextureRangeDesc textureRange(DataReader reader) const noexcept final;\n\n  [[nodiscard]] bool validate(DataReader reader,\n                              const igl::TextureRangeDesc& range,\n                              igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  [[nodiscard]] igl::TextureFormat textureFormat(\n      const ktxTexture* IGL_NONNULL texture) const noexcept final;\n};\n\n} // namespace iglu::textureloader::ktx2\n"
  },
  {
    "path": "IGLU/texture_loader/stb_hdr/Header.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/stb_hdr/Header.h>\n\n#include <cstring>\n\nnamespace iglu::textureloader::stb::hdr {\nnamespace {\nconstexpr const Tag kRadianceFileIdentifier{\n    {'#', '?', 'R', 'A', 'D', 'I', 'A', 'N', 'C', 'E', '\\n'}};\n\nconstexpr const std::array<uint8_t, 7> kRgbeFileIdentifier{{'#', '?', 'R', 'G', 'B', 'E', '\\n'}};\n} // namespace\n\nbool Header::tagIsValid() const noexcept {\n  return std::memcmp(tag.data(), kRadianceFileIdentifier.data(), kRadianceFileIdentifier.size()) ==\n             0 ||\n         std::memcmp(tag.data(), kRgbeFileIdentifier.data(), kRgbeFileIdentifier.size()) == 0;\n}\n\n} // namespace iglu::textureloader::stb::hdr\n"
  },
  {
    "path": "IGLU/texture_loader/stb_hdr/Header.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <cstdint>\n\nnamespace iglu::textureloader::stb::hdr {\n\nusing Tag = std::array<uint8_t, 11>;\n\nstruct Header {\n  Tag tag;\n\n  [[nodiscard]] bool tagIsValid() const noexcept;\n};\nstatic_assert(sizeof(Header) == 11);\n\nconstexpr uint32_t kHeaderLength = static_cast<uint32_t>(sizeof(Header));\n\n} // namespace iglu::textureloader::stb::hdr\n"
  },
  {
    "path": "IGLU/texture_loader/stb_hdr/TextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/stb_hdr/TextureLoaderFactory.h>\n\n#include <IGLU/texture_loader/stb_hdr/Header.h>\n\nnamespace iglu::textureloader::stb::hdr {\n\nTextureLoaderFactory::TextureLoaderFactory() noexcept : image::TextureLoaderFactory(true) {}\n\nuint32_t TextureLoaderFactory::minHeaderLength() const noexcept {\n  return kHeaderLength;\n}\n\nbool TextureLoaderFactory::isIdentifierValid(DataReader headerReader) const noexcept {\n  const Header* header = headerReader.as<Header>();\n  return header->tagIsValid();\n}\n\n} // namespace iglu::textureloader::stb::hdr\n"
  },
  {
    "path": "IGLU/texture_loader/stb_hdr/TextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/stb_image/TextureLoaderFactory.h>\n\nnamespace iglu::textureloader::stb::hdr {\n\n/**\n * @brief ITextureLoaderFactory implementation for Radiance HDR files\n * @note File format specification:\n *   https://radsite.lbl.gov/radiance/refer/filefmts.pdf\n */\n\nclass TextureLoaderFactory final : public image::TextureLoaderFactory {\n public:\n  TextureLoaderFactory() noexcept;\n\n  [[nodiscard]] uint32_t minHeaderLength() const noexcept final;\n\n private:\n  [[nodiscard]] bool isIdentifierValid(DataReader headerReader) const noexcept final;\n};\n\n} // namespace iglu::textureloader::stb::hdr\n"
  },
  {
    "path": "IGLU/texture_loader/stb_image/TextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/stb_image/TextureLoaderFactory.h>\n\n#ifdef WIN32\n#define STBI_MSC_SECURE_CRT\n#endif\n\n// Do not use #define STB_IMAGE_IMPLEMENTATION\n// Instead rely on //arvr/third-party/stb:stb_image to provide the implementation\n#include <stb_image.h>\n\nnamespace iglu::textureloader::stb::image {\nstruct StbImageDeleter {\n  void operator()(void* p) const {\n    stbi_image_free(p);\n  }\n};\n\nnamespace {\nclass StbImageData : public IData {\n public:\n  StbImageData(uint8_t* data, uint64_t size);\n\n  [[nodiscard]] const uint8_t* IGL_NONNULL data() const noexcept final;\n  [[nodiscard]] uint64_t size() const noexcept final;\n\n  [[nodiscard]] ExtractedData extractData() noexcept final;\n\n private:\n  std::unique_ptr<uint8_t, StbImageDeleter> data_;\n  uint64_t size_;\n};\n\nStbImageData::StbImageData(uint8_t* data, uint64_t size) :\n  data_(std::unique_ptr<uint8_t, StbImageDeleter>(data)), size_(size) {}\n\n[[nodiscard]] const uint8_t* IGL_NONNULL StbImageData::data() const noexcept {\n  IGL_DEBUG_ASSERT(data_ != nullptr);\n  return data_.get();\n}\n\n[[nodiscard]] uint64_t StbImageData::size() const noexcept {\n  return size_;\n}\n\nIData::ExtractedData StbImageData::extractData() noexcept {\n  return {\n      .data = data_.release(),\n      .size = size_,\n      .deleter = &stbi_image_free,\n  };\n}\n\nclass TextureLoader : public ITextureLoader {\n  using Super = ITextureLoader;\n\n public:\n  explicit TextureLoader(DataReader reader,\n                         int width,\n                         int height,\n                         bool isFloatFormat,\n                         igl::TextureFormat preferredFormat) noexcept;\n\n  [[nodiscard]] bool canUploadSourceData() const noexcept final;\n  [[nodiscard]] bool shouldGenerateMipmaps() const noexcept final;\n\n private:\n  std::unique_ptr<IData> loadInternal(igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  bool isFloatFormat_;\n};\n\nTextureLoader::TextureLoader(DataReader reader,\n                             int width,\n                             int height,\n                             bool isFloatFormat,\n                             igl::TextureFormat preferredFormat) noexcept :\n  Super(reader), isFloatFormat_(isFloatFormat) {\n  auto& desc = mutableDescriptor();\n  desc.format =\n      preferredFormat != igl::TextureFormat::Invalid\n          ? preferredFormat\n          : (isFloatFormat ? igl::TextureFormat::RGBA_F32 : igl::TextureFormat::RGBA_UNorm8);\n  desc.numLayers = 1;\n  desc.width = static_cast<size_t>(width);\n  desc.height = static_cast<size_t>(height);\n  desc.depth = 1;\n  desc.type = igl::TextureType::TwoD;\n\n  // Floating point mipmaps not always supported\n  desc.numMipLevels = isFloatFormat ? 1\n                                    : igl::TextureDesc::calcNumMipLevels(desc.width, desc.height);\n}\n\nbool TextureLoader::canUploadSourceData() const noexcept {\n  return false;\n}\n\nbool TextureLoader::shouldGenerateMipmaps() const noexcept {\n  return descriptor().numMipLevels > 1;\n}\n\nstd::unique_ptr<IData> TextureLoader::loadInternal(\n    igl::Result* IGL_NULLABLE outResult) const noexcept {\n  const auto r = reader();\n  const int length = r.size() > std::numeric_limits<int>::max() ? std::numeric_limits<int>::max()\n                                                                : static_cast<int>(r.size());\n\n  int x = 0, y = 0, comp = 0;\n  void* data = nullptr;\n  // Pass 4 for desired_channels to force RGBA instead of RGB.\n  if (isFloatFormat_) {\n    data = stbi_loadf_from_memory(r.data(), static_cast<int>(length), &x, &y, &comp, 4);\n  } else {\n    data = stbi_load_from_memory(r.data(), static_cast<int>(length), &x, &y, &comp, 4);\n  }\n  if (data == nullptr) {\n    igl::Result::setResult(outResult, igl::Result::Code::RuntimeError, \"Could not load image daa.\");\n    return nullptr;\n  }\n\n  return std::make_unique<StbImageData>(reinterpret_cast<uint8_t*>(data), memorySizeInBytes());\n}\n} // namespace\n\nTextureLoaderFactory::TextureLoaderFactory(bool isFloatFormat) noexcept :\n  isFloatFormat_(isFloatFormat) {}\n\nbool TextureLoaderFactory::canCreateInternal(DataReader headerReader,\n                                             igl::Result* IGL_NULLABLE outResult) const noexcept {\n  if (!isIdentifierValid(headerReader)) {\n    igl::Result::setResult(outResult, igl::Result::Code::InvalidOperation, \"Incorrect identifier.\");\n    return false;\n  }\n\n  return true;\n}\n\nstd::unique_ptr<ITextureLoader> TextureLoaderFactory::tryCreateInternal(\n    DataReader reader,\n    igl::TextureFormat preferredFormat,\n    igl::Result* IGL_NULLABLE outResult) const noexcept {\n  const int length = reader.size() > std::numeric_limits<int>::max()\n                         ? std::numeric_limits<int>::max()\n                         : static_cast<int>(reader.size());\n\n  int x = 0, y = 0, comp = 0;\n  if (stbi_info_from_memory(reader.data(), length, &x, &y, &comp) == 0) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::InvalidOperation, \"Could not get HDR metadata.\");\n    return nullptr;\n  }\n\n  if (x < 0 || y < 0 || comp < 0 || comp > 4) {\n    igl::Result::setResult(outResult, igl::Result::Code::InvalidOperation, \"Invalid HDR metadata.\");\n    return nullptr;\n  }\n\n  // Ensure the raw decompressed data size won't overflow signed int range when stb_image computes\n  // it internally. PNG depth can be up to 16 bits, making the worst-case raw data size\n  // approximately 2 * x * y * comp + y bytes. stb_image passes this value as int to\n  // stbi_zlib_decode_malloc_guesssize_headerflag, so it must fit within INT_MAX to avoid\n  // sign-extension to a huge size_t in malloc.\n  const auto rawSizeEstimate =\n      static_cast<uint64_t>(x) * static_cast<uint64_t>(y) * static_cast<uint64_t>(comp) * 2 +\n      static_cast<uint64_t>(y);\n  if (rawSizeEstimate > static_cast<uint64_t>(std::numeric_limits<int>::max())) {\n    igl::Result::setResult(outResult, igl::Result::Code::InvalidOperation, \"Image is too large.\");\n    return nullptr;\n  }\n\n  return std::make_unique<TextureLoader>(reader, x, y, isFloatFormat_, preferredFormat);\n}\n\n} // namespace iglu::textureloader::stb::image\n"
  },
  {
    "path": "IGLU/texture_loader/stb_image/TextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/ITextureLoaderFactory.h>\n\nnamespace iglu::textureloader::stb::image {\n\n/**\n * @brief ITextureLoaderFactory base class for loading textures with STB Image\n */\nclass TextureLoaderFactory : public ITextureLoaderFactory {\n protected:\n  explicit TextureLoaderFactory(bool isFloatFormat = false) noexcept;\n\n  [[nodiscard]] virtual bool isIdentifierValid(DataReader headerReader) const noexcept = 0;\n\n private:\n  [[nodiscard]] bool canCreateInternal(DataReader headerReader,\n                                       igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  [[nodiscard]] std::unique_ptr<ITextureLoader> tryCreateInternal(\n      DataReader reader,\n      igl::TextureFormat preferredFormat,\n      igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  bool isFloatFormat_;\n};\n\n} // namespace iglu::textureloader::stb::image\n"
  },
  {
    "path": "IGLU/texture_loader/stb_jpeg/Header.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/stb_jpeg/Header.h>\n\n#include <cstring>\n\nnamespace iglu::textureloader::stb::jpeg {\nnamespace {\nconstexpr const Tag kJpegFileIdentifier{{0xFF, 0xD8, 0xFF}};\n} // namespace\n\nbool Header::tagIsValid() const noexcept {\n  return std::memcmp(tag.data(), kJpegFileIdentifier.data(), kJpegFileIdentifier.size()) == 0;\n}\n\n} // namespace iglu::textureloader::stb::jpeg\n"
  },
  {
    "path": "IGLU/texture_loader/stb_jpeg/Header.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <cstdint>\n\nnamespace iglu::textureloader::stb::jpeg {\n\nusing Tag = std::array<uint8_t, 3>;\n\nstruct Header {\n  Tag tag;\n\n  [[nodiscard]] bool tagIsValid() const noexcept;\n};\nstatic_assert(sizeof(Header) == 3);\n\nconstexpr uint32_t kHeaderLength = static_cast<uint32_t>(sizeof(Header));\n\n} // namespace iglu::textureloader::stb::jpeg\n"
  },
  {
    "path": "IGLU/texture_loader/stb_jpeg/TextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/stb_jpeg/TextureLoaderFactory.h>\n\n#include <IGLU/texture_loader/stb_jpeg/Header.h>\n\nnamespace iglu::textureloader::stb::jpeg {\n\nuint32_t TextureLoaderFactory::minHeaderLength() const noexcept {\n  return kHeaderLength;\n}\n\nbool TextureLoaderFactory::isIdentifierValid(DataReader headerReader) const noexcept {\n  const Header* header = headerReader.as<Header>();\n  return header->tagIsValid();\n}\n\n} // namespace iglu::textureloader::stb::jpeg\n"
  },
  {
    "path": "IGLU/texture_loader/stb_jpeg/TextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/stb_image/TextureLoaderFactory.h>\n\nnamespace iglu::textureloader::stb::jpeg {\n\n/**\n * @brief ITextureLoaderFactory implementation for JPEG files\n */\n\nclass TextureLoaderFactory final : public image::TextureLoaderFactory {\n public:\n  TextureLoaderFactory() noexcept = default;\n\n  [[nodiscard]] uint32_t minHeaderLength() const noexcept final;\n\n private:\n  [[nodiscard]] bool isIdentifierValid(DataReader headerReader) const noexcept final;\n};\n\n} // namespace iglu::textureloader::stb::jpeg\n"
  },
  {
    "path": "IGLU/texture_loader/stb_png/Header.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/stb_png/Header.h>\n\n#include <cstring>\n\nnamespace iglu::textureloader::stb::png {\nnamespace {\nconstexpr const Tag kPngFileIdentifier{{0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a}};\n} // namespace\n\nbool Header::tagIsValid() const noexcept {\n  return std::memcmp(tag.data(), kPngFileIdentifier.data(), kPngFileIdentifier.size()) == 0;\n}\n\n} // namespace iglu::textureloader::stb::png\n"
  },
  {
    "path": "IGLU/texture_loader/stb_png/Header.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <cstdint>\n\nnamespace iglu::textureloader::stb::png {\n\nusing Tag = std::array<uint8_t, 8>;\n\nstruct Header {\n  Tag tag;\n\n  [[nodiscard]] bool tagIsValid() const noexcept;\n};\nstatic_assert(sizeof(Header) == 8);\n\nconstexpr uint32_t kHeaderLength = static_cast<uint32_t>(sizeof(Header));\n\n} // namespace iglu::textureloader::stb::png\n"
  },
  {
    "path": "IGLU/texture_loader/stb_png/TextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/stb_png/TextureLoaderFactory.h>\n\n#include <IGLU/texture_loader/stb_png/Header.h>\n\nnamespace iglu::textureloader::stb::png {\n\nuint32_t TextureLoaderFactory::minHeaderLength() const noexcept {\n  // Require enough bytes for the full minimal PNG structure used by tests:\n  // - 8-byte file signature\n  // - IHDR chunk header + data + CRC\n  // - IDAT chunk header + CRC (empty data)\n  //\n  // This ensures truncated buffers that still contain a valid PNG signature\n  // are rejected early, while minimally valid headers succeed.\n  constexpr uint32_t kMinimalPngHeaderLength = 45u;\n  return kMinimalPngHeaderLength;\n}\n\nbool TextureLoaderFactory::isIdentifierValid(DataReader headerReader) const noexcept {\n  const Header* header = headerReader.as<Header>();\n  return header->tagIsValid();\n}\n\n} // namespace iglu::textureloader::stb::png\n"
  },
  {
    "path": "IGLU/texture_loader/stb_png/TextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/stb_image/TextureLoaderFactory.h>\n\nnamespace iglu::textureloader::stb::png {\n\n/**\n * @brief ITextureLoaderFactory implementation for PNG files\n */\n\nclass TextureLoaderFactory final : public image::TextureLoaderFactory {\n public:\n  TextureLoaderFactory() noexcept = default;\n\n  [[nodiscard]] uint32_t minHeaderLength() const noexcept final;\n\n private:\n  [[nodiscard]] bool isIdentifierValid(DataReader headerReader) const noexcept final;\n};\n\n} // namespace iglu::textureloader::stb::png\n"
  },
  {
    "path": "IGLU/texture_loader/xtc1/Header.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/xtc1/Header.h>\n\n#include <cstring>\n\nnamespace iglu::textureloader::xtc1 {\n\nnamespace {\nconstexpr const Tag kXtc1FileIdentifier{0x49, 0x56, 0x41, 0x4e};\n} // namespace\n\nbool Header::tagIsValid() const noexcept {\n  return std::memcmp(magicTag.data(), kXtc1FileIdentifier.data(), kXtc1FileIdentifier.size()) == 0;\n}\n\n} // namespace iglu::textureloader::xtc1\n"
  },
  {
    "path": "IGLU/texture_loader/xtc1/Header.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <cstdint>\n\nnamespace iglu::textureloader::xtc1 {\n\nusing Tag = std::array<uint8_t, 4>;\n\n// NOLINTNEXTLINE(cppcoreguidelines-pro-type-member-init)\nstruct Header {\n  static constexpr uint32_t kMaxMips = 12;\n  static constexpr uint32_t kVersion = 0x00010002;\n\n  Tag magicTag{0x49, 0x56, 0x41, 0x4e};\n  uint32_t version{kVersion};\n  uint32_t width{0};\n  uint32_t height{0};\n  union {\n    struct {\n      uint32_t numChannels : 3;\n      uint32_t lossless : 1;\n      uint32_t impasto : 1;\n      uint32_t numMips : 4;\n    };\n    uint32_t flags{0};\n  };\n  uint32_t mipSizes[kMaxMips]{};\n  uint32_t padding{0};\n\n  [[nodiscard]] bool tagIsValid() const noexcept;\n};\n\nconstexpr uint32_t kHeaderLength = static_cast<uint32_t>(sizeof(Header));\n\n} // namespace iglu::textureloader::xtc1\n"
  },
  {
    "path": "IGLU/texture_loader/xtc1/TextureLoaderFactory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/texture_loader/xtc1/TextureLoaderFactory.h>\n\n#include <IGLU/texture_loader/xtc1/Header.h>\n#include <cstring>\n#include <memory>\n#if defined(IGL_CMAKE_BUILD)\n#include <igl/IGLSafeC.h>\n#else\n#include <secure_lib/secure_string.h>\n#endif\n\nnamespace iglu::textureloader::xtc1 {\n\n#if !defined(IGL_CMAKE_BUILD)\nnamespace {\n\n// Helper function to determine XTC1 texture format based on number of channels\nigl::TextureFormat getXTC1Format(uint32_t numChannels) {\n  switch (numChannels) {\n  case 1:\n    // @fb-only\n  case 3:\n    // @fb-only\n  case 4:\n    // @fb-only\n  default:\n    return igl::TextureFormat::Invalid;\n  }\n}\n\nclass TextureLoader final : public ITextureLoader {\n public:\n  explicit TextureLoader(DataReader reader) noexcept : ITextureLoader(reader) {\n    const Header* header = this->reader().as<Header>();\n\n    // Determine the appropriate XTC1 compressed format based on number of channels\n    igl::TextureFormat format = getXTC1Format(header->numChannels);\n\n    igl::TextureDesc desc = igl::TextureDesc::new2D(\n        format, header->width, header->height, igl::TextureDesc::TextureUsageBits::Sampled);\n\n    mutableDescriptor() = desc;\n  }\n\n protected:\n  [[nodiscard]] std::unique_ptr<IData> loadInternal(\n      igl::Result* IGL_NULLABLE outResult) const noexcept override {\n    const uint8_t* compressedData = reader().data() + sizeof(Header);\n\n    // Calculate the size of compressed data\n    // For XTC1, each 16x16 block is 128 bytes, but the actual size varies due to variable length\n    // encoding. We use the total file size minus the header size.\n    const uint32_t compressedSize = reader().size() - sizeof(Header);\n\n    // Return the compressed data as-is without decompression\n    auto data = std::make_unique<uint8_t[]>(compressedSize);\n    auto err =\n        try_checked_memcpy((uint8_t*)data.get(), compressedSize, compressedData, compressedSize);\n    if (err != 0) {\n      IGL_LOG_ERROR_ONCE(\"[IGL][Error] Failed to update texture buffer\\n\");\n    }\n\n    return IData::tryCreate(std::move(data), compressedSize, outResult);\n  }\n};\n\n} // namespace\n\nuint32_t TextureLoaderFactory::minHeaderLength() const noexcept {\n  return kHeaderLength;\n}\n\nbool TextureLoaderFactory::canCreateInternal(DataReader headerReader,\n                                             igl::Result* IGL_NULLABLE outResult) const noexcept {\n  if (headerReader.size() < kHeaderLength) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentInvalid, \"Header too small for XTC1 texture\");\n    return false;\n  }\n\n  const Header* header = headerReader.as<Header>();\n  const bool isValid = header->tagIsValid();\n\n  if (!isValid) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentInvalid, \"Invalid XTC1 texture header\");\n  }\n\n  return isValid;\n}\n\nstd::unique_ptr<ITextureLoader> TextureLoaderFactory::tryCreateInternal(\n    DataReader reader,\n    igl::TextureFormat preferredFormat,\n    igl::Result* IGL_NULLABLE outResult) const noexcept {\n  if (reader.size() < kHeaderLength) {\n    igl::Result::setResult(\n        outResult, igl::Result::Code::ArgumentInvalid, \"Data too small for XTC1 texture\");\n    return nullptr;\n  }\n\n  return std::make_unique<TextureLoader>(reader);\n}\n\n#else\n// Stub implementations for open source builds\nuint32_t TextureLoaderFactory::minHeaderLength() const noexcept {\n  return 0;\n}\n\nbool TextureLoaderFactory::canCreateInternal(DataReader headerReader,\n                                             igl::Result* IGL_NULLABLE outResult) const noexcept {\n  igl::Result::setResult(\n      outResult, igl::Result::Code::Unsupported, \"XTC1 texture format not supported in this build\");\n  return false;\n}\n\nstd::unique_ptr<ITextureLoader> TextureLoaderFactory::tryCreateInternal(\n    DataReader reader,\n    igl::TextureFormat preferredFormat,\n    igl::Result* IGL_NULLABLE outResult) const noexcept {\n  igl::Result::setResult(\n      outResult, igl::Result::Code::Unsupported, \"XTC1 texture format not supported in this build\");\n  return nullptr;\n}\n#endif\n\n} // namespace iglu::textureloader::xtc1\n"
  },
  {
    "path": "IGLU/texture_loader/xtc1/TextureLoaderFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/ITextureLoaderFactory.h>\n\nnamespace iglu::textureloader::xtc1 {\n\nclass TextureLoaderFactory final : public ITextureLoaderFactory {\n public:\n  explicit TextureLoaderFactory() noexcept = default;\n\n  [[nodiscard]] uint32_t minHeaderLength() const noexcept final;\n\n private:\n  [[nodiscard]] bool canCreateInternal(DataReader headerReader,\n                                       igl::Result* IGL_NULLABLE outResult) const noexcept final;\n\n  [[nodiscard]] std::unique_ptr<ITextureLoader> tryCreateInternal(\n      DataReader reader,\n      igl::TextureFormat preferredFormat,\n      igl::Result* IGL_NULLABLE outResult) const noexcept final;\n};\n\n} // namespace iglu::textureloader::xtc1\n"
  },
  {
    "path": "IGLU/uniform/Collection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/uniform/Collection.h>\n\n#include <IGLU/uniform/Descriptor.h>\n#include <algorithm>\n\nnamespace iglu::uniform {\n\nvoid Collection::update(const Collection& changes) {\n  for (const auto& [key, value] : changes.descriptors_) {\n    // Update should only modify values already in receiver; catch caller error otherwise\n    IGL_DEBUG_ASSERT(descriptors_.find(key) != descriptors_.cend());\n    IGL_DEBUG_ASSERT(descriptors_.find(key)->second->getType() == value->getType());\n    auto indices = descriptors_[key]->getIndices(); // grab before old desc is nuked\n    descriptors_[key] = value;\n    descriptors_[key]->setIndices(indices); // propagate indices to descriptors\n  }\n}\n\nvoid Collection::set(const igl::NameHandle& name, std::unique_ptr<Descriptor> value) {\n  if (descriptors_.find(name) == descriptors_.cend()) {\n    names_.push_back(name);\n  }\n  descriptors_[name] = std::move(value);\n}\n\nvoid Collection::clear(const igl::NameHandle& name) {\n  names_.erase(std::remove(names_.begin(), names_.end(), name), names_.end());\n  descriptors_.erase(name);\n}\n\nstd::vector<igl::NameHandle> Collection::getNames() const noexcept {\n  IGL_LOG_INFO_ONCE(\"Collection::getNames() is deprecated. Use Collection::names() instead\\n\");\n  std::vector<igl::NameHandle> ret;\n  ret.reserve(descriptors_.size());\n  for (const auto& desc : descriptors_) {\n    ret.push_back(desc.first);\n  }\n  return ret;\n}\n\nbool Collection::contains(const igl::NameHandle& name) const {\n  return descriptors_.find(name) != descriptors_.end();\n}\n\nconst Descriptor& Collection::get(const igl::NameHandle& name) const {\n  auto it = descriptors_.find(name);\n  IGL_DEBUG_ASSERT(descriptors_.cend() != it); // already exists\n  IGL_DEBUG_ASSERT(it->second); // unique_ptr not null\n  return *(it->second);\n}\n\nDescriptor& Collection::get(const igl::NameHandle& name) {\n  return const_cast<Descriptor&>(static_cast<const Collection*>(this)->get(name));\n}\n\nbool Collection::operator==(const Collection& rhs) const noexcept {\n  return descriptors_ == rhs.descriptors_;\n}\n\nbool Collection::operator!=(const Collection& rhs) const noexcept {\n  return !operator==(rhs);\n}\n\n} // namespace iglu::uniform\n"
  },
  {
    "path": "IGLU/uniform/Collection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/uniform/Descriptor.h>\n#include <memory>\n#include <unordered_map>\n#include <igl/Common.h>\n#include <igl/NameHandle.h>\n\nnamespace iglu::uniform {\n\n// Collection\n//\n// Holds a collection of uniform Descriptor instances keyed by igl::NameHandle\n//\n// To submit uniforms to the GPU, use uniform::Encoder.\nstruct Collection {\n public:\n  Collection() = default;\n\n  void update(const Collection& changes);\n\n  // Sets the given uniform value.\n  void set(const igl::NameHandle& name, std::unique_ptr<Descriptor> value);\n  void clear(const igl::NameHandle& name);\n\n  template<typename T>\n  void set(const igl::NameHandle& name, T value) {\n    auto& uniform = getOrCreate<T>(name);\n    *uniform = std::move(value);\n  }\n\n  // Gets the reference of the descriptor with the given name and type.\n  // If a descriptor with that name doesn't exist, a new descriptor with the given\n  // name and type is created.\n  //\n  // ## Implementation Notes\n  //\n  // To implement getOrCreate, we use SFINAE (https://en.cppreference.com/w/cpp/types/enable_if)\n  // to conditionally remove functions from overload resolution based on type traits\n  // and to provide separate function overloads for different type traits:\n  //\n  // 1. for a T type that's *not* a vector\n  // 2. for a T type that's a vector\n  //\n  // ## Appendix: Alternative\n  //\n  // An alternative that doesn't rely on SFINAE trickery:\n  //\n  //   struct Detail {\n  //     template <typename T, bool isSpecialization> struct DescSelector;\n  //\n  //     template <typename T>\n  //     struct DescSelector<T, false> { using Type = DescriptorValue<T>; };\n  //\n  //     template <typename T>\n  //     struct DescSelector<T, true> { using Type = DescriptorVector<typename T::value_type>; };\n  //\n  //     template <typename T, bool B>\n  //     using DescSelector_t = typename DescSelector<T, B>::Type;\n  //   };\n  //\n  //   template<typename T>\n  //   auto& getOrCreate(const igl::NameHandle& name) {\n  //     using Desc = Detail::DescSelector_t<T, IsSpecialization<T, std::vector>::value>;\n  //     auto& uniform = findOrCreate<Desc>(name);\n  //     return uniform;\n  //   }\n\n  // 1. Override for a T type that's *not* a vector\n  template<typename T,\n           std::enable_if_t<!IsSpecialization<T, std::vector>::value, std::nullptr_t> = nullptr>\n  auto& getOrCreate(const igl::NameHandle& name) {\n    using Desc = DescriptorValue<T>;\n    auto& uniform = findOrCreate<Desc>(name);\n    return uniform;\n  }\n\n  // 2. Override for a T type that's a vector\n  template<typename T,\n           std::enable_if_t<IsSpecialization<T, std::vector>::value, std::nullptr_t> = nullptr>\n  auto& getOrCreate(const igl::NameHandle& name) {\n    using Desc = DescriptorVector<typename T::value_type>;\n    auto& uniform = findOrCreate<Desc>(name);\n    return uniform;\n  }\n\n  // Gets the reference of the descriptor with the given name\n  const Descriptor& get(const igl::NameHandle& name) const;\n  Descriptor& get(const igl::NameHandle& name);\n\n  // Checks if the name is in the collection\n  bool contains(const igl::NameHandle& name) const;\n\n  // DEPRECATED: use names() instead\n  // Gets the list of NameHandles\n  [[nodiscard]] std::vector<igl::NameHandle> getNames() const noexcept;\n\n  const std::vector<igl::NameHandle>& names() const noexcept {\n    return names_;\n  }\n\n  bool operator==(const Collection& rhs) const noexcept;\n  bool operator!=(const Collection& rhs) const noexcept;\n\n private:\n  template<typename Desc>\n  Desc& findOrCreate(const igl::NameHandle& name) {\n    auto& entry = descriptors_[name];\n    // Create entry with the type Desc if it doesn't exist\n    if (!entry) {\n      entry = std::make_unique<Desc>();\n      names_.push_back(name);\n    }\n    return static_cast<Desc&>(*entry);\n  }\n\n private:\n  std::unordered_map<igl::NameHandle, std::shared_ptr<Descriptor>> descriptors_;\n  std::vector<igl::NameHandle> names_;\n};\n\n} // namespace iglu::uniform\n"
  },
  {
    "path": "IGLU/uniform/CollectionEncoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/uniform/CollectionEncoder.h>\n\n#include <IGLU/uniform/Collection.h>\n#include <IGLU/uniform/Encoder.h>\n\nnamespace iglu::uniform {\n\nCollectionEncoder::CollectionEncoder(igl::BackendType backendType) : backendType_(backendType) {}\n\nvoid CollectionEncoder::operator()(\n    const Collection& collection,\n    igl::IRenderCommandEncoder& commandEncoder,\n    uint8_t bindTarget,\n    const std::vector<igl::NameHandle>& uniformNames) const noexcept {\n  const Encoder uniformEncoder(backendType_);\n  for (const auto& name : uniformNames) {\n    uniformEncoder(commandEncoder, bindTarget, collection.get(name));\n  }\n}\n\n} // namespace iglu::uniform\n"
  },
  {
    "path": "IGLU/uniform/CollectionEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/Common.h>\n#include <igl/NameHandle.h>\n\nnamespace igl {\nclass IRenderCommandEncoder;\n} // namespace igl\n\nnamespace iglu::uniform {\n\nstruct Collection;\n\n// CollectionEncoder\n//\n// Submits uniforms corresponding to uniformNames in the source collection\n//\nclass CollectionEncoder {\n public:\n  explicit CollectionEncoder(igl::BackendType backendType);\n\n  void operator()(const Collection& collection,\n                  igl::IRenderCommandEncoder& commandEncoder,\n                  uint8_t bindTarget,\n                  const std::vector<igl::NameHandle>& uniformNames) const noexcept;\n\n private:\n  igl::BackendType backendType_;\n};\n\n} // namespace iglu::uniform\n"
  },
  {
    "path": "IGLU/uniform/Descriptor.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/uniform/Descriptor.h>\n\nnamespace iglu::uniform {\n\nDescriptor::Descriptor(igl::UniformType type) : type_(type) {}\n\nigl::UniformType Descriptor::getType() const noexcept {\n  return type_;\n}\n\nint Descriptor::getIndex(igl::ShaderStage stage) const noexcept {\n  return indices_[EnumToValue(stage)];\n}\n\nvoid Descriptor::setIndex(igl::ShaderStage stage, int newValue) noexcept {\n  indices_[EnumToValue(stage)] = newValue;\n}\n\n#if IGL_BACKEND_OPENGL\nvoid Descriptor::toUniformDescriptor(int location, igl::UniformDesc& outDescriptor) const noexcept {\n  outDescriptor.location = location;\n  outDescriptor.offset = 0;\n  outDescriptor.type = type_;\n  outDescriptor.numElements = size();\n  outDescriptor.elementStride = igl::sizeForUniformType(type_);\n}\n#endif\n\n} // namespace iglu::uniform\n"
  },
  {
    "path": "IGLU/uniform/Descriptor.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/uniform/Trait.h>\n#include <glm/glm.hpp>\n#include <memory>\n#include <igl/Buffer.h>\n#include <igl/Common.h>\n#include <igl/Shader.h>\n#include <igl/Uniform.h>\n\nnamespace iglu::uniform {\n\n// ----------------------------------------------------------------------------\n\nnamespace {\n\nenum class Alignment { Packed, Aligned };\n\ntemplate<typename T>\nstruct PackedValue {\n  T value;\n  static_assert(Trait<T>::kPadding == 0, \"!\");\n\n  PackedValue() = default;\n  explicit PackedValue(T v) : value(std::move(v)) {}\n\n  void* data(Alignment /*unused*/) noexcept {\n    return &value;\n  }\n\n  [[nodiscard]] const void* data(Alignment /*unused*/) const noexcept {\n    return &value;\n  }\n};\n\ntemplate<typename T>\nstruct AlignedValue {\n  static_assert(Trait<T>::kPadding > 0, \"Only T types that require padding should be used!\");\n\n  T value;\n  uint8_t padding[Trait<T>::kPadding]; // pads the end of the struct to ensure alignment\n\n  AlignedValue() = default;\n  explicit AlignedValue(T v) : value(std::move(v)) {}\n\n  void* data(Alignment /*unused*/) noexcept {\n    return &value;\n  }\n\n  [[nodiscard]] const void* data(Alignment /*unused*/) const noexcept {\n    return &value;\n  }\n};\n\ntemplate<typename U>\nstruct AlignedElement : AlignedValue<U> {\n  using AlignedValue<U>::AlignedValue;\n};\n\n// glm::mat3 requires padding within each row, not just at the end\n// If aligned data is requested, an update occurs: packed => aligned\ntemplate<>\nstruct AlignedElement<glm::mat3> {\n  using Self = AlignedElement<glm::mat3>;\n  using AlignedMat3 = Trait<glm::mat3>::Aligned;\n\n  glm::mat3 value; // this is the \"source of truth\"\n  mutable AlignedMat3 valueAligned; // padded element shadows value\n  // NOLINTNEXTLINE(clang-diagnostic-unused-member-function)\n  AlignedElement() = default;\n  // NOLINTNEXTLINE(clang-diagnostic-unused-member-function)\n  explicit AlignedElement(glm::mat3 v) : value(v) {}\n\n  // NOLINTNEXTLINE(clang-diagnostic-unused-member-function)\n  void* data(Alignment alignment) noexcept {\n    return const_cast<void*>(static_cast<const Self*>(this)->data(alignment));\n  }\n\n  const void* data(Alignment alignment) const noexcept {\n    if (Alignment::Aligned == alignment) {\n      Trait<glm::mat3>::toAligned(valueAligned, value); // Sync from source of truth\n      return &valueAligned;\n    }\n    IGL_DEBUG_ASSERT(Alignment::Packed == alignment);\n    return &value;\n  }\n};\n\ntemplate<typename U>\nstruct AlignedElementInVector : AlignedValue<U> {\n  using AlignedValue<U>::AlignedValue;\n  AlignedElementInVector& operator=(const U& src) noexcept {\n    this->value = src;\n    return *this;\n  }\n};\n\n// glm::mat3 needs specialization b/c requires padding within each row, not just at the end\ntemplate<>\nstruct AlignedElementInVector<glm::mat3> : PackedValue<typename Trait<glm::mat3>::Aligned> {\n  using PackedValue<typename Trait<glm::mat3>::Aligned>::PackedValue;\n  // NOLINTNEXTLINE(clang-diagnostic-unused-member-function)\n  AlignedElementInVector& operator=(const glm::mat3& src) noexcept {\n    Trait<glm::mat3>::toAligned(this->value, src);\n    return *this;\n  }\n};\n} // namespace\n\n// ----------------------------------------------------------------------------\n\n// Descriptor, DescriptorValue<T>, DescriptorVector<T>\n//\n// These classes are intended to be used to encapsulate simple uniforms. In particular,\n// it's designed for the use case of small uniforms < 4KB (vs uniform buffers/blocks)\n//\n// Descriptor is the base interface so you can hold heterogeneous collections\n// of different uniforms, i.e. a mix of DescriptorValue<T> and DescriptorVector<T>\n// with different T types.\n//\n// To store the actual uniform data, you instantiate one of the following:\n//\n// * DescriptorValue<T> is for single T values.\n// * DescriptorVector<T> is for a vector of T values.\n//\n// To submit this uniform to the GPU, use uniform::Encoder.\nstruct Descriptor {\n protected:\n  explicit Descriptor(igl::UniformType type);\n\n public:\n  virtual ~Descriptor() = default;\n\n  [[nodiscard]] virtual const void* data(Alignment alignment) const noexcept = 0;\n\n  [[nodiscard]] virtual size_t numBytes(Alignment alignment) const noexcept = 0;\n\n  [[nodiscard]] virtual size_t size() const noexcept {\n    return 1;\n  }\n\n  [[nodiscard]] igl::UniformType getType() const noexcept;\n\n  [[nodiscard]] int getIndex(igl::ShaderStage stage) const noexcept;\n  void setIndex(igl::ShaderStage stage, int newValue) noexcept;\n\n  using Indices = std::array<int, 2>;\n  [[nodiscard]] Indices getIndices() const noexcept {\n    return indices_;\n  }\n  void setIndices(Indices indices) noexcept {\n    indices_ = indices;\n  }\n\n  void toUniformDescriptor(int location, igl::UniformDesc& outDescriptor) const noexcept;\n\n private:\n  igl::UniformType type_ = igl::UniformType::Invalid;\n  Indices indices_ = {-1, -1}; // index for each shader stage\n};\n\n// ----------------------------------------------------------------------------\n\n// DescriptorValue<T>\n//\n// DescriptorValue<T> represents a single value uniform\n//\n//   glm::vec4 red(1.0f, 0.0f, 0.0f, 1.0f)\n//   DescriptorValue<glm::vec4> colorUniform(std::move(red));\n//\n// You can access the underlying value using pointer semantics:\n//\n//   glm::vec4& color = *colorUniform;\n//\ntemplate<typename T>\nclass DescriptorValue : public Descriptor {\n  static constexpr bool kNoPadding = (Trait<T>::kPadding == 0);\n\n  template<typename U>\n  using PackedElement = PackedValue<U>;\n\n  using Element = std::conditional_t<kNoPadding, PackedElement<T>, AlignedElement<T>>;\n\n public:\n  using Self = DescriptorValue<T>;\n\n  DescriptorValue() : Descriptor(Trait<T>::kValue) {}\n  explicit DescriptorValue(T value) : Descriptor(Trait<T>::kValue), element_(std::move(value)) {}\n\n  [[nodiscard]] const void* data(Alignment alignment) const noexcept override {\n    return element_.data(alignment);\n  }\n\n  [[nodiscard]] size_t numBytes(Alignment alignment) const noexcept override {\n    IGL_DEBUG_ASSERT(sizeForUniformType(getType()) <= sizeof(Element));\n\n    // NOTE: Any padding required for T to be aligned will be present in Element\n    return sizeof(T) + (Alignment::Packed == alignment ? 0 : Trait<T>::kPadding);\n  }\n\n  const T& operator*() const noexcept {\n    return element_.value;\n  }\n\n  T& operator*() noexcept {\n    return element_.value;\n  }\n\n private:\n  Element element_;\n};\n\n// ----------------------------------------------------------------------------\n\n// DescriptorVector<T>\n//\n// DescriptorVector<T> represents a vector of T values. It provides underlying\n// storage for the data:\n//\n//   size_t numParticles = 10;\n//   std::vector<glm::vec3> colors;\n//   colors.reserve(numParticles);\n//   for(int i = 0; i < numParticles; ++i) {\n//     colors.emplace_back(1.0, 1.0, (float)i/numParticles);\n//   }\n//   DescriptorVector<glm::vec3> particleColors(std::move(colors));\n//\n// You can access the underlying vector using pointer semantics:\n//\n//   std::vector<glm::vec3>& colors = *particleColors;\n//\n// NOTE: DescriptorVector will have a parallel internal std::vector where each\n// element is aligned for T types that require it.\n//\ntemplate<typename T, typename Vector = std::vector<T>>\nclass DescriptorVector : public Descriptor {\n  static constexpr bool kNoPadding = (Trait<T>::kPadding == 0);\n\n  struct PackedContainer {\n    Vector values;\n    PackedContainer() = default;\n    explicit PackedContainer(Vector vec) : values(std::move(vec)) {}\n\n    void* data(Alignment /*unused*/) noexcept {\n      return values.data();\n    }\n\n    [[nodiscard]] const void* data(Alignment /*unused*/) const noexcept {\n      return values.data();\n    }\n\n    [[nodiscard]] size_t elementSize(Alignment /*unused*/) const noexcept {\n      return sizeof(T);\n    }\n  };\n\n  // Contains both packed and aligned vectors\n  // If aligned data is requested, an update occurs: packed => aligned\n  struct DualContainer {\n    Vector values; // this is the \"source of truth\"\n    // padded elements shadow those in values\n    mutable std::vector<AlignedElementInVector<T>> valuesAligned;\n\n    DualContainer() = default;\n    explicit DualContainer(Vector vec) : values(std::move(vec)) {}\n\n    void* data(Alignment /*alignment*/) noexcept {\n      return const_cast<void*>(static_cast<const Self*>(this)->data());\n    }\n\n    const void* data(Alignment alignment) const noexcept {\n      if (Alignment::Aligned == alignment) {\n        // Sync from source of truth\n        const size_t numElements = values.size();\n        valuesAligned.resize(numElements);\n        for (size_t i = 0; i < numElements; ++i) {\n          const auto& src = values[i];\n          auto& dst = valuesAligned[i];\n          dst = src;\n        }\n        return valuesAligned.data();\n      }\n      IGL_DEBUG_ASSERT(Alignment::Packed == alignment);\n      return values.data();\n    }\n\n    size_t elementSize(Alignment alignment) const noexcept {\n      return (Alignment::Packed == alignment ? sizeof(T) : sizeof(AlignedElementInVector<T>));\n    }\n  };\n\n  using Container = std::conditional_t<kNoPadding, PackedContainer, DualContainer>;\n\n public:\n  using Self = DescriptorVector<T>;\n\n  DescriptorVector() : Descriptor(Trait<T>::kValue) {}\n  explicit DescriptorVector(Vector values) :\n    Descriptor(Trait<T>::kValue), container_(std::move(values)) {}\n\n  [[nodiscard]] const void* data(Alignment alignment) const noexcept override {\n    return container_.data(alignment);\n  }\n\n  [[nodiscard]] size_t numBytes(Alignment alignment) const noexcept override {\n    size_t elementSize = container_.elementSize(alignment);\n    IGL_DEBUG_ASSERT(sizeForUniformType(getType()) <= elementSize);\n    return container_.values.size() * elementSize;\n  }\n\n  [[nodiscard]] size_t size() const noexcept override {\n    return container_.values.size();\n  }\n\n  const Vector& operator*() const noexcept {\n    return container_.values;\n  }\n\n  Vector& operator*() noexcept {\n    return container_.values;\n  }\n\n private:\n  Container container_;\n};\n\n// ----------------------------------------------------------------------------\n\n} // namespace iglu::uniform\n"
  },
  {
    "path": "IGLU/uniform/Encoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/uniform/Encoder.h>\n\n#include <IGLU/uniform/Descriptor.h>\n#include <igl/IGL.h> // IWYU pragma: keep\n\nnamespace iglu::uniform {\n\n// ----------------------------------------------------------------------------\n\nnamespace {\n\n#if IGL_BACKEND_OPENGL\nvoid bindRenderUniform(igl::IRenderCommandEncoder& encoder,\n                       int bufferIndex,\n                       const Descriptor& uniform) {\n  // The openGL backend shaders use uniforms instead of uniformBlocks\n  igl::UniformDesc descriptor;\n  uniform.toUniformDescriptor(bufferIndex, descriptor);\n\n  const void* data = uniform.data(Alignment::Packed);\n  encoder.bindUniform(descriptor, data);\n}\n\nvoid bindComputeUniform(igl::IComputeCommandEncoder& encoder,\n                        int bufferIndex,\n                        const Descriptor& uniform) {\n  // The openGL backend shaders use uniforms instead of uniformBlocks\n  igl::UniformDesc descriptor;\n  uniform.toUniformDescriptor(bufferIndex, descriptor);\n\n  const void* data = uniform.data(Alignment::Packed);\n  encoder.bindUniform(descriptor, data);\n}\n#endif\n\nvoid encodeRenderUniform(igl::IRenderCommandEncoder& encoder,\n                         int bufferIndex,\n                         uint8_t bindTarget,\n                         const Descriptor& uniform,\n                         Alignment alignment) {\n  const void* data = uniform.data(alignment);\n  const size_t numBytes = uniform.numBytes(alignment);\n  IGL_DEBUG_ASSERT(numBytes <= 4 * 1024,\n                   \"bindBytes should only be used for uniforms smaller than 4kb\");\n  encoder.bindBytes(bufferIndex, bindTarget, data, static_cast<int>(numBytes));\n}\n\nvoid encodeAlignedCompute(igl::IComputeCommandEncoder& encoder,\n                          int bufferIndex,\n                          const Descriptor& uniform) {\n  const void* data = uniform.data(Alignment::Aligned);\n  const size_t numBytes = uniform.numBytes(Alignment::Aligned);\n  IGL_DEBUG_ASSERT(numBytes <= 4 * 1024,\n                   \"bindBytes should only be used for uniforms smaller than 4kb\");\n  encoder.bindBytes(bufferIndex, data, static_cast<int>(numBytes));\n}\n\n} // namespace\n\n// ----------------------------------------------------------------------------\n\nEncoder::Encoder(igl::BackendType backendType) : backendType_(backendType) {}\n\nvoid Encoder::operator()(igl::IRenderCommandEncoder& encoder,\n                         uint8_t bindTarget,\n                         const Descriptor& uniform) const noexcept {\n  const int bufferIndex =\n      uniform.getIndex(bindTarget == igl::BindTarget::kVertex ? igl::ShaderStage::Vertex\n                                                              : igl::ShaderStage::Fragment);\n  if (!IGL_DEBUG_VERIFY(bufferIndex >= 0)) {\n    return;\n  }\n\n  if (backendType_ == igl::BackendType::OpenGL) {\n#if IGL_BACKEND_OPENGL\n    bindRenderUniform(encoder, bufferIndex, uniform);\n#else\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n#endif\n  } else if (backendType_ == igl::BackendType::Metal) {\n    encodeRenderUniform(encoder, bufferIndex, bindTarget, uniform, Alignment::Aligned);\n  } else if (backendType_ == igl::BackendType::Vulkan) {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  // @fb-only\n    // @fb-only\n  } else {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n}\n\nvoid Encoder::operator()(igl::IComputeCommandEncoder& encoder,\n                         const Descriptor& uniform) const noexcept {\n  const int bufferIndex = uniform.getIndex(igl::ShaderStage::Compute);\n  if (!IGL_DEBUG_VERIFY(bufferIndex >= 0)) {\n    return;\n  }\n\n  if (backendType_ == igl::BackendType::OpenGL) {\n#if IGL_BACKEND_OPENGL\n    bindComputeUniform(encoder, bufferIndex, uniform);\n#else\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n#endif\n  } else if (backendType_ == igl::BackendType::Metal) {\n    encodeAlignedCompute(encoder, bufferIndex, uniform);\n  } else if (backendType_ == igl::BackendType::Vulkan) {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  // @fb-only\n    // @fb-only\n  }\n}\n\n} // namespace iglu::uniform\n"
  },
  {
    "path": "IGLU/uniform/Encoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <igl/CommandBuffer.h>\n#include <igl/Common.h>\n\nnamespace igl {\n\nclass IComputeCommandEncoder;\n} // namespace igl\n\nnamespace iglu::uniform {\n\nstruct Descriptor;\n\n// Encoder submits an uniform described by Descriptor.\n//\n// It handles backend-specific details:\n// * For Metal, it calls igl::IRenderCommandEncoder::bindBytes() or\n// igl::IComputeCommandEncoder::bindBytes()\n// * For OpenGL, it calls igl::RenderCommandEncoder::bindUniform() or\n// igl::IComputeCommandEncoder::bindUniform()\nclass Encoder {\n public:\n  explicit Encoder(igl::BackendType backendType);\n  void operator()(igl::IRenderCommandEncoder& encoder,\n                  uint8_t bindTarget,\n                  const Descriptor& uniform) const noexcept;\n\n  void operator()(igl::IComputeCommandEncoder& encoder, const Descriptor& uniform) const noexcept;\n\n private:\n  igl::BackendType backendType_;\n};\n\n} // namespace iglu::uniform\n"
  },
  {
    "path": "IGLU/uniform/Trait.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <glm/glm.hpp>\n#include <glm/gtc/type_ptr.hpp>\n#include <igl/Buffer.h> // IWYU pragma: keep\n#include <igl/Uniform.h>\n\nnamespace iglu::uniform {\n\n// ----------------------------------------------------------------------------\n\nnamespace {\n\ntemplate<typename Test, template<typename...> class REF>\nstruct IsSpecialization : std::false_type {};\n\ntemplate<template<typename...> class REF, typename... Args>\nstruct IsSpecialization<REF<Args...>, REF> : std::true_type {};\n\n} // namespace\n\n// ----------------------------------------------------------------------------\n\ntemplate<typename T>\nstruct Trait {\n  static constexpr igl::UniformType kValue = igl::UniformType::Invalid;\n  static constexpr size_t kPadding = 0;\n};\ntemplate<>\nstruct Trait<bool> {\n  using Aligned = bool;\n  static constexpr igl::UniformType kValue = igl::UniformType::Boolean;\n  static constexpr size_t kPadding = 0;\n};\ntemplate<>\nstruct Trait<int> {\n  using Aligned = int;\n  static constexpr igl::UniformType kValue = igl::UniformType::Int;\n  static constexpr size_t kPadding = 0;\n};\ntemplate<>\nstruct Trait<glm::ivec2> {\n  using Aligned = glm::ivec2;\n  static constexpr igl::UniformType kValue = igl::UniformType::Int2;\n  static constexpr size_t kPadding = 0;\n};\ntemplate<>\nstruct Trait<glm::ivec3> {\n  using Aligned = glm::ivec4;\n  static constexpr igl::UniformType kValue = igl::UniformType::Int3;\n  static constexpr size_t kPadding = sizeof(Aligned) - sizeof(glm::ivec3);\n};\ntemplate<>\nstruct Trait<glm::ivec4> {\n  using Aligned = glm::ivec4;\n  static constexpr igl::UniformType kValue = igl::UniformType::Int4;\n  static constexpr size_t kPadding = 0;\n};\ntemplate<>\nstruct Trait<float> {\n  using Aligned = float;\n  static constexpr igl::UniformType kValue = igl::UniformType::Float;\n  static constexpr size_t kPadding = 0;\n};\ntemplate<>\nstruct Trait<glm::vec2> {\n  using Aligned = glm::vec2;\n  static constexpr igl::UniformType kValue = igl::UniformType::Float2;\n  static constexpr size_t kPadding = 0;\n};\ntemplate<>\nstruct Trait<glm::vec3> {\n  using Aligned = glm::vec4;\n  static constexpr igl::UniformType kValue = igl::UniformType::Float3;\n  static constexpr size_t kPadding = sizeof(Aligned) - sizeof(glm::vec3);\n};\ntemplate<>\nstruct Trait<glm::vec4> {\n  using Aligned = glm::vec4;\n  static constexpr igl::UniformType kValue = igl::UniformType::Float4;\n  static constexpr size_t kPadding = 0;\n};\ntemplate<>\nstruct Trait<glm::mat2> {\n  using Aligned = glm::mat2;\n  static constexpr igl::UniformType kValue = igl::UniformType::Mat2x2;\n  static constexpr size_t kPadding = 0;\n};\ntemplate<>\nstruct Trait<glm::mat3> {\n  using Aligned = std::array<glm::vec4, 3>; // each row of matrix is 16-byte aligned\n  static_assert(sizeof(Aligned) == 3 * sizeof(glm::vec4), \"Aligned is the wrong size!\");\n  static void toAligned(Aligned& outData, const glm::mat3& src) noexcept {\n    const auto* srcMatrix = static_cast<const float*>(glm::value_ptr(src));\n    for (int i = 0; i < 3; i++) {\n      auto* outRow = static_cast<float*>(glm::value_ptr(outData[i]));\n      for (int j = 0; j < 3; j++) {\n        *outRow++ = *srcMatrix++;\n      }\n    }\n  }\n\n  static constexpr igl::UniformType kValue = igl::UniformType::Mat3x3;\n  static constexpr size_t kPadding = sizeof(Aligned) - sizeof(glm::mat3);\n};\ntemplate<>\nstruct Trait<glm::mat4> {\n  using Aligned = glm::mat4;\n  static constexpr igl::UniformType kValue = igl::UniformType::Mat4x4;\n  static constexpr size_t kPadding = 0;\n};\n\n} // namespace iglu::uniform\n"
  },
  {
    "path": "LICENSE.md",
    "content": "MIT License\n\nCopyright (c) Meta Platforms, Inc. and affiliates.\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## Dependencies\n\n3D-Graphics-Rendering-Cookbook\nhttps://github.com/PacktPublishing/3D-Graphics-Rendering-Cookbook/blob/master/LICENSE\n\nAmazon Lumberyard Bistro\nhttps://developer.nvidia.com/orca/amazon-lumberyard-bistro\nhttps://casual-effects.com/data/\n\nbc7env\nhttps://github.com/richgel999/bc7enc/blob/master/LICENSE\n\nBig Buck Bunny - the Peach open movie project\nhttps://peach.blender.org/about/\n\nBootstrap\nhttps://github.com/corporateshark/bootstrapping/blob/master/LICENSE\n\nColor Checker\nhttps://en.wikipedia.org/wiki/File:Color_Checker.pdf\n\nDamaged Helmet\nhttps://github.com/KhronosGroup/glTF-Sample-Models/blob/master/2.0/DamagedHelmet/README.md\n\nEGL\nhttps://github.com/McNopper/EGL/blob/master/EGL/LICENCE.txt\n\nfmt\nhttps://github.com/fmtlib/fmt/blob/master/LICENSE.rst\n\nglew\nhttps://github.com/nigels-com/glew/blob/master/LICENSE.txt\n\nglfw\nhttps://github.com/glfw/glfw/blob/master/LICENSE.md\n\nglm\nhttps://github.com/g-truc/glm\n\nglslang\nhttps://github.com/KhronosGroup/glslang/blob/main/LICENSE.txt\n\ngoogletest\nhttps://github.com/google/googletest/blob/main/LICENSE\n\nimgui\nhttps://github.com/ocornut/imgui/blob/master/LICENSE.txt\n\nios-cmake\nhttps://github.com/leetal/ios-cmake/blob/master/LICENSE.md\n\nKTX-Software\nhttps://github.com/KhronosGroup/KTX-Software/blob/main/LICENSE.md\n\nLightweightVK\nhttps://github.com/corporateshark/lightweightvk/blob/main/LICENSE.md\n\nMeshoptimizer\nhttps://github.com/zeux/meshoptimizer/blob/master/LICENSE.md\n\nSpark SL\nhttps://github.com/facebook/igl/releases/download/SparkSL/SparkSL.LICENSE\n\nstb\nhttps://github.com/nothings/stb/blob/master/LICENSE\n\ntaskflow\nhttps://github.com/taskflow/taskflow/blob/master/LICENSE\n\ntinyobjloader\nhttps://github.com/tinyobjloader/tinyobjloader/blob/release/LICENSE\n\ntracy\nhttps://github.com/wolfpld/tracy/blob/master/LICENSE\n\nvolk\nhttps://github.com/zeux/volk/blob/master/LICENSE.md\n\nVulkan Memory Allocator\nhttps://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator/blob/master/LICENSE.txt\n"
  },
  {
    "path": "README.md",
    "content": "<div align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/facebook/igl/blob/main/.github/igl-full-color-white.svg?raw=true\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"https://github.com/facebook/igl/blob/main/.github/igl-full-color-black.svg?raw=true\">\n    <img alt=\"IGL Logo\" src=\".github/igl-full-color-black.svg\" width=\"500\">\n  </picture>\n\n  [![Build Status](https://github.com/facebook/igl/actions/workflows/c-cpp.yml/badge.svg)](https://github.com/facebook/igl/actions)\n\n</div>\n\nIntermediate Graphics Library (IGL) is a cross-platform library that commands the GPU. It encapsulates\ncommon GPU functionality with a low-level cross-platform interface. IGL is designed to support multiple\nbackends implemented on top of various graphics APIs (e.g. OpenGL, Metal and Vulkan) with a common interface.\n\nThere are a lot of good options for abstracting GPU API's; each making different trade-offs. We designed IGL around the following priorities:\n\n1. *Low-level, forward-looking API.* IGL embraces modern abstractions (command buffers, state containers, bindless, etc) and is designed to give more control than OpenGL's state machine API. As a result, IGL can have leaner backends for modern API's (e.g. Metal, Vulkan).\n2. *Minimal overhead for C++.* IGL supports new or existing native rendering code without overhead of language interop or the need for other language runtimes.\n3. *Reach + scale in production.* IGL has been globally battle-tested for broad device reliability (especially the long-tail of Android devices as well as Quest 2/3/Pro compatibility for OpenGL/Vulkan) *and* performance-tuned on our apps.\n\n## Supported rendering backends\n\n * Metal 2+\n * OpenGL 2.x (requires [GL_ARB_framebuffer_object](https://registry.khronos.org/OpenGL/extensions/ARB/ARB_framebuffer_object.txt))\n * OpenGL 3.1+\n * OpenGL ES 2.0+\n * Vulkan 1.2\n * WebGL 2.0\n\n## Supported platforms\n\n * Android\n * iOS\n * Linux\n * macOS\n * Windows\n * WebAssembly\n\n## API Support\n\n|                          | Windows                    | Linux                      | macOS                         | iOS                           | Android                            |\n| ------------------------ | -------------------------- | -------------------------- | ----------------------------- | ----------------------------- | ---------------------------------- |\n| Vulkan 1.2               | :heavy_check_mark:         | :heavy_check_mark:         | :heavy_check_mark: (MoltenVK) | :heavy_multiplication_x:      | :heavy_check_mark: (Quest 2/3/Pro) |\n| OpenGL ES 2.0 - 3.0      | :heavy_check_mark: (Angle) | :heavy_check_mark: (Angle) | :heavy_multiplication_x:      | :heavy_check_mark:            | :heavy_check_mark:                 |\n| OpenGL ES 3.1 - 3.2      | :heavy_check_mark: (Angle) | :heavy_check_mark: (Angle) | :heavy_multiplication_x:      | :heavy_multiplication_x:      | :heavy_check_mark:                 |\n| OpenGL 3.1 - 4.6         | :heavy_check_mark:         | :heavy_check_mark:         | :heavy_check_mark:            | :heavy_multiplication_x:      | :heavy_multiplication_x:           |\n| Metal 2                  | :heavy_multiplication_x:   | :heavy_multiplication_x:   | :heavy_check_mark:            | :heavy_check_mark:            | :heavy_multiplication_x:           |\n\n## Build\n\nBefore building, run the deployment scripts:\n\n```\npython3 deploy_content.py\npython3 deploy_deps.py\n\n```\n\nThese scripts download external third-party dependencies. Please check [Dependencies](./LICENSE.md) for the full list.\n\n* Windows\n\n```\ncd build\ncmake .. -G \"Visual Studio 17 2022\"\n```\n\n* Linux\n\n```\nsudo apt-get install clang xorg-dev libxinerama-dev libxcursor-dev libgles2-mesa-dev libegl1-mesa-dev libglfw3-dev libglew-dev libstdc++-12-dev\ncd build\ncmake .. -G \"Unix Makefiles\"\n```\n\n* macOS\n\n```\ncd build\ncmake .. -G \"Xcode\" -DIGL_WITH_VULKAN=OFF\n```\n\n* iOS\n\n```\ncd build\ncmake .. -G Xcode -DCMAKE_TOOLCHAIN_FILE=../third-party/deps/src/ios-cmake/ios.toolchain.cmake -DDEPLOYMENT_TARGET=13.0 -DPLATFORM=OS64\n```\n\n* Android\n\nThe Gradle project is located within the [build/android](./build/android/) folder.\n\n* WebAssembly\n\nPlease install [Emscripten](https://emscripten.org/docs/getting_started/downloads.html) and [Ninja](https://ninja-build.org/).\n\n```\ncd build\nemcmake cmake .. -G Ninja\ncmake --build .\n```\n\n## Screenshots\n\n![image](.github/screenshot01.png)\n\n![image](.github/screenshot02.png)\n\n## License\n\nIGL is released under the MIT license, see [LICENSE.md](./LICENSE.md) for the full text as well as third-party library\nacknowledgements. SparkSL Compiler is released under the SparkSL Compiler License, see [LICENSE](https://github.com/facebook/igl/releases/download/SparkSL/SparkSL.LICENSE) for full text.\n"
  },
  {
    "path": "ROADMAP.md",
    "content": "We deeply appreciate and value the significance of Open Source projects. It is with great pleasure that we would like to share our admiration for your roadmap vision. Should you require additional ideas for areas in which we can contribute, we have prepared a selection that we believe will be of interest to you.\n\nOur plans encompass the following projects:\n\n## IGL Open Source effort:\n* Support SparkSL CLI tools to utilize SparkSL shaders in RenderSessions.\n* Develop new RenderSession examples.\n* Add OpenXR Android project.\n\n## IGL evolution:\n* Implement Queries support.\n* Develop a Synchronization primitives API (addressing dependencies between drawcalls, also known as framegraph).\n* Enable asynchronous loading of resources.\n* Provide a Multi-threading API.\n* Enhance sRGB support.\n* Finish MSAA (Multi-Sample Anti-Aliasing) support.\n* Ensure consistent instrumentation coverage.\n* Achieve consistent resource tracking coverage.\n\n\nFurthermore, we would like to present some ideas for potential supporters:\n\n## How you can help:\n\n* Assist with new API porting, such as DirectX, WebGPU, or any preferred platform of your choice.\n* Contribute to the creation of additional examples, elevating their quality and diversity.\n* Explore fancy projects involving web-based tools and integration with IDEs.\n* Collaborate on the development of an IGL command capture and playback system. Offer expertise in playback on varying backends, providing an added bonus to the functionality.\n\nWe firmly believe that by collaborating on these initiatives, we can collectively foster an environment of growth and advancement in the field of graphics development.\n\nThank you for considering our contributions and for the opportunity to be part of your vision.\n"
  },
  {
    "path": "build/.gitignore",
    "content": "*\n*.*\n!.gitignore\n!android/\n!android/**\nandroid/.gitignore\n"
  },
  {
    "path": "cmake/IGLConfig.cmake.in",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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# IGLConfig.cmake.in - CMake configuration file for IGL\n# This file allows users to find and use IGL with find_package(IGL)\n#\n# This file is still essential even with dynamic target discovery because:\n# 1. It provides the find_package(IGL) interface for users\n# 2. It manages system dependencies (OpenGL, Vulkan, etc.)\n# 3. It validates requested components\n# 4. It creates convenient interface targets like IGL::IGL\n# 5. It works with the dynamically discovered targets from install.cmake\n\n@PACKAGE_INIT@\n\n# Include required CMake modules\ninclude(CMakeFindDependencyMacro)\ninclude(CMakePackageConfigHelpers)\n\n# Try to find optional dependencies (third-party libs were removed from exported targets)\n# These are only needed if user wants to use IGL features that depend on them\n\n# Try to find fmt (optional)\nfind_package(fmt QUIET)\nif(fmt_FOUND)\n  message(STATUS \"IGL: Found fmt library\")\nelse()\n  message(STATUS \"IGL: fmt library not found - some features may not be available\")\nendif()\n\n# Find required system dependencies before including targets\n# These dependencies are needed by the exported targets\n\n# Find required system dependencies before including targets\n# These dependencies are needed by the exported targets\n\n# Find Threads (required by glslang and other components)\nfind_package(Threads REQUIRED)\n\n# Find dependencies based on what targets are actually available\n# This approach is more efficient and only searches for what's needed\n\n# Find dependencies based on what targets are actually available\n\n# Find fmt (commonly used by IGL)\n# find_dependency(fmt QUIET)\n# if(NOT fmt_FOUND)\n#     message(STATUS \"IGL: fmt library not found - using built-in version\")\n# endif()\n\n# Include the targets file first (if it exists)\nif(EXISTS \"${CMAKE_CURRENT_LIST_DIR}/IGLTargets.cmake\")\n  include(\"${CMAKE_CURRENT_LIST_DIR}/IGLTargets.cmake\")\n  set(IGL_TARGETS_AVAILABLE TRUE)\nelse()\n  message(STATUS \"IGL: No library targets available - header-only installation\")\n  set(IGL_TARGETS_AVAILABLE FALSE)\nendif()\n\n# Check which backends are available and find their dependencies (only if targets are available)\nif(IGL_TARGETS_AVAILABLE)\n  if(TARGET IGL::IGLOpenGL)\n    find_package(OpenGL QUIET)\n    if(NOT OpenGL_FOUND)\n      message(STATUS \"IGL: OpenGL not found - IGLOpenGL backend may not work properly\")\n    endif()\n  endif()\n\n  if(TARGET IGL::IGLVulkan)\n    find_package(Vulkan QUIET)\n    if(NOT Vulkan_FOUND)\n      message(STATUS \"IGL: Vulkan SDK not found - IGLVulkan backend may not work properly\")\n    endif()\n  endif()\nendif()\n\n# Find optional dependencies only if explicitly requested\nif(IGL_FIND_COMPONENTS)\n  if(\"Shell\" IN_LIST IGL_FIND_COMPONENTS OR \"samples\" IN_LIST IGL_FIND_COMPONENTS)\n    find_package(glfw3 QUIET)\n    if(NOT glfw3_FOUND)\n      message(STATUS \"IGL: GLFW not found - shell and samples may not be available\")\n    endif()\n  endif()\n\n  if(\"OpenXR\" IN_LIST IGL_FIND_COMPONENTS)\n    find_package(OpenXR QUIET)\n    if(NOT OpenXR_FOUND)\n      message(STATUS \"IGL: OpenXR SDK not found - VR/AR features not available\")\n    endif()\n  endif()\nendif()\n\n# Dynamically discover available components by checking exported targets\nset(IGL_AVAILABLE_COMPONENTS \"\")\n\n# Get all available IGL targets and extract component names\nget_property(available_targets DIRECTORY PROPERTY IMPORTED_TARGETS)\nif(NOT available_targets)\n  # Fallback: get targets from current directory\n  execute_process(COMMAND ${CMAKE_COMMAND} -E echo \"Discovering available IGL targets...\" OUTPUT_QUIET)\nendif()\n\n# Function to extract component name from target\nfunction(extract_component_name target_name result_var)\n  # Remove IGL:: namespace prefix\n  string(REPLACE \"IGL::\" \"\" component_name \"${target_name}\")\n  set(${result_var} \"${component_name}\" PARENT_SCOPE)\nendfunction()\n\n# Check for core and common targets\nset(IGL_EXPECTED_TARGETS\n    \"IGL::IGLLibrary\"\n    \"IGL::IGLOpenGL\"\n    \"IGL::IGLVulkan\"\n    \"IGL::IGLMetal\"\n    \"IGL::IGLGlslang\"\n    \"IGL::IGLstb\"\n    \"IGL::IGLUimgui\"\n    \"IGL::IGLUmanagedUniformBuffer\"\n    \"IGL::IGLUsentinel\"\n    \"IGL::IGLUshaderCross\"\n    \"IGL::IGLUsimple_renderer\"\n    \"IGL::IGLUstate_pool\"\n    \"IGL::IGLUtexture_accessor\"\n    \"IGL::IGLUtexture_loader\"\n    \"IGL::IGLUuniform\"\n    \"IGL::IGLUsimdtypes\")\n\n# Only discover components if targets are available\nif(IGL_TARGETS_AVAILABLE)\n  foreach(expected_target ${IGL_EXPECTED_TARGETS})\n    if(TARGET ${expected_target})\n      extract_component_name(${expected_target} component_name)\n      list(APPEND IGL_AVAILABLE_COMPONENTS ${component_name})\n    endif()\n  endforeach()\nelse()\n  # For header-only installation, mark as having core headers available\n  list(APPEND IGL_AVAILABLE_COMPONENTS \"Headers\")\nendif()\n\n# Check if requested components are available\nif(IGL_FIND_COMPONENTS)\n  foreach(component ${IGL_FIND_COMPONENTS})\n    if(NOT ${component} IN_LIST IGL_AVAILABLE_COMPONENTS)\n      set(IGL_FOUND FALSE)\n      set(IGL_NOT_FOUND_MESSAGE \"Component ${component} is not available\")\n      return()\n    endif()\n  endforeach()\nendif()\n\n# Set up interface targets for convenience (only if targets are available)\nif(IGL_TARGETS_AVAILABLE AND NOT TARGET IGL::IGL)\n  # Create main interface target that includes core library\n  add_library(IGL::IGL INTERFACE IMPORTED)\n\n  # Always link core library if available\n  if(TARGET IGL::IGLLibrary)\n    target_link_libraries(IGL::IGL INTERFACE IGL::IGLLibrary)\n  endif()\n\n  # Dynamically add available backend libraries\n  set(IGL_BACKEND_TARGETS \"IGL::IGLOpenGL\" \"IGL::IGLVulkan\" \"IGL::IGLMetal\")\n  foreach(backend_target ${IGL_BACKEND_TARGETS})\n    if(TARGET ${backend_target})\n      target_link_libraries(IGL::IGL INTERFACE ${backend_target})\n    endif()\n  endforeach()\n\n  # Add commonly used IGLU components to the main target\n  set(IGL_COMMON_IGLU_TARGETS \"IGL::IGLUsimdtypes\" \"IGL::IGLUsentinel\" \"IGL::IGLstb\")\n  foreach(iglu_target ${IGL_COMMON_IGLU_TARGETS})\n    if(TARGET ${iglu_target})\n      target_link_libraries(IGL::IGL INTERFACE ${iglu_target})\n    endif()\n  endforeach()\nelseif(NOT IGL_TARGETS_AVAILABLE)\n  # For header-only installation, create a minimal interface target with just include directories\n  if(NOT TARGET IGL::IGL)\n    add_library(IGL::IGL INTERFACE IMPORTED)\n    set_target_properties(IGL::IGL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES \"${CMAKE_INSTALL_INCLUDEDIR}\")\n    message(STATUS \"IGL: Created header-only interface target IGL::IGL\")\n  endif()\nendif()\n\n# Print information about found IGL\nif(NOT IGL_FIND_QUIETLY)\n  if(IGL_TARGETS_AVAILABLE)\n    message(STATUS \"Found IGL with library targets\")\n  else()\n    message(STATUS \"Found IGL (headers only)\")\n  endif()\n  message(STATUS \"Available components: ${IGL_AVAILABLE_COMPONENTS}\")\nendif()\n\n# Check if all required components were found\nif(IGL_FIND_COMPONENTS)\n  foreach(component ${IGL_FIND_COMPONENTS})\n    if(NOT ${component} IN_LIST IGL_AVAILABLE_COMPONENTS)\n      if(IGL_FIND_REQUIRED_${component})\n        set(IGL_FOUND FALSE)\n        if(NOT IGL_TARGETS_AVAILABLE)\n          set(IGL_NOT_FOUND_MESSAGE \"Required component ${component} is not available (header-only installation)\")\n        else()\n          set(IGL_NOT_FOUND_MESSAGE \"Required component ${component} is not available\")\n        endif()\n        return()\n      endif()\n    endif()\n  endforeach()\nendif()\n\nset(IGL_FOUND TRUE)\n"
  },
  {
    "path": "cmake/install.cmake",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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# IGL Install Configuration\n# This file contains all install logic to minimize changes to original CMake files\n\nif(NOT IGL_ENABLE_INSTALL)\n  return()\nendif()\n\ninclude(GNUInstallDirs)\ninclude(CMakePackageConfigHelpers)\n\nmessage(STATUS \"Configuring IGL install targets...\")\nmessage(STATUS \"Note: fmt target gets special handling to fix PUBLIC_HEADER path conflicts\")\nmessage(STATUS \"  We clear fmt's PUBLIC_HEADER and install headers manually from correct location\")\n\n# Function to fix include directories for install\nfunction(igl_fix_target_includes target_name)\n  if(NOT TARGET ${target_name})\n    return()\n  endif()\n\n  get_target_property(current_includes ${target_name} INTERFACE_INCLUDE_DIRECTORIES)\n  if(current_includes)\n    set(new_includes \"\")\n    foreach(include_dir ${current_includes})\n      # Filter out problematic include directories\n      if(\"${include_dir}\" MATCHES \"${CMAKE_BINARY_DIR}\")\n        # For build directory paths, convert them to build interface only\n        # This prevents them from being included in the install interface\n        list(APPEND new_includes \"$<BUILD_INTERFACE:${include_dir}>\")\n        continue()\n      endif()\n\n      # Convert known paths to generator expressions\n      if(\"${include_dir}\" STREQUAL \"${IGL_ROOT_DIR}/src\")\n        list(APPEND new_includes \"$<BUILD_INTERFACE:${IGL_ROOT_DIR}/src>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\")\n      elseif(\"${include_dir}\" STREQUAL \"${IGL_ROOT_DIR}/third-party/deps/src/glm\")\n        list(APPEND new_includes \"$<BUILD_INTERFACE:${IGL_ROOT_DIR}/third-party/deps/src/glm>\"\n             \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/glm>\")\n      elseif(\"${include_dir}\" STREQUAL \"${CMAKE_SOURCE_DIR}/third-party/deps/src/stb\" OR \"${include_dir}\" STREQUAL\n                                                                                         \"third-party/deps/src/stb\")\n        list(APPEND new_includes \"$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/third-party/deps/src/stb>\"\n             \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/stb>\")\n      elseif(\"${include_dir}\" STREQUAL \"${CMAKE_SOURCE_DIR}/third-party/deps/src\" OR \"${include_dir}\" STREQUAL\n                                                                                     \"third-party/deps/src\")\n        list(APPEND new_includes \"$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/third-party/deps/src>\"\n             \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\")\n      elseif(\"${include_dir}\" STREQUAL \"${CMAKE_SOURCE_DIR}/IGLU/simdtypes\" OR \"${include_dir}\" STREQUAL \"simdtypes\")\n        list(APPEND new_includes \"$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/IGLU/simdtypes>\"\n             \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/IGLU/simdtypes>\")\n      elseif(\"${include_dir}\" STREQUAL \"${IGL_ROOT_DIR}\")\n        # Convert IGL_ROOT_DIR to appropriate interface\n        list(APPEND new_includes \"$<BUILD_INTERFACE:${IGL_ROOT_DIR}>\" \"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>\")\n      else()\n        # For other paths, try to convert them to generator expressions\n        string(REPLACE \"${CMAKE_SOURCE_DIR}/\" \"\" relative_path \"${include_dir}\")\n        string(REPLACE \"${IGL_ROOT_DIR}/\" \"\" relative_path2 \"${include_dir}\")\n\n        if(NOT \"${relative_path}\" STREQUAL \"${include_dir}\")\n          # Path was under CMAKE_SOURCE_DIR, use relative path\n          list(APPEND new_includes \"$<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/${relative_path}>\")\n        elseif(NOT \"${relative_path2}\" STREQUAL \"${include_dir}\")\n          # Path was under IGL_ROOT_DIR, use relative path\n          list(APPEND new_includes \"$<BUILD_INTERFACE:${IGL_ROOT_DIR}/${relative_path2}>\")\n        else()\n          # For other paths, keep as build interface only if not problematic\n          if(NOT \"${include_dir}\" MATCHES \"^${CMAKE_SOURCE_DIR}\" AND NOT \"${include_dir}\" MATCHES \"^${IGL_ROOT_DIR}\")\n            list(APPEND new_includes \"$<BUILD_INTERFACE:${include_dir}>\")\n          endif()\n        endif()\n      endif()\n    endforeach()\n\n    if(new_includes)\n      set_target_properties(${target_name} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES \"${new_includes}\")\n    endif()\n  endif()\nendfunction()\n\n# This function is no longer needed since we preserve all dependencies\n\n# Function to setup install for any target\nfunction(igl_setup_target_install target_name)\n  if(NOT TARGET ${target_name})\n    message(STATUS \"  - Skipping ${target_name}: target not found\")\n    return()\n  endif()\n\n  get_target_property(target_type ${target_name} TYPE)\n\n  # Only process libraries and executables\n  if(NOT target_type MATCHES \"^(STATIC_LIBRARY|SHARED_LIBRARY|MODULE_LIBRARY|INTERFACE_LIBRARY)$\")\n    message(STATUS \"  - Skipping ${target_name}: not a library\")\n    return()\n  endif()\n\n  message(STATUS \"  - Configuring install for: ${target_name}\")\n\n  # Special handling for fmt target - fix PUBLIC_HEADER issues\n  if(\"${target_name}\" STREQUAL \"fmt\")\n    message(STATUS \"    - Applying special handling for fmt target\")\n\n    # Get current PUBLIC_HEADER value for debugging\n    get_target_property(fmt_public_headers ${target_name} PUBLIC_HEADER)\n    message(STATUS \"    - Original PUBLIC_HEADER: ${fmt_public_headers}\")\n\n    # Clear the problematic PUBLIC_HEADER property\n    set_target_properties(${target_name} PROPERTIES PUBLIC_HEADER \"\")\n    message(STATUS \"    - Cleared PUBLIC_HEADER to avoid path conflicts\")\n\n    # We'll install fmt headers manually via igl_install_headers\n  endif()\n\n  # Fix include directories before install\n  igl_fix_target_includes(${target_name})\n\n  # Install the target\n  install(\n    TARGETS ${target_name}\n    EXPORT IGLTargets\n    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}\n    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}\n    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}\n    FRAMEWORK DESTINATION ${CMAKE_INSTALL_LIBDIR}\n    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}\n    INCLUDES\n    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})\n\n  # Set export properties\n  set_target_properties(${target_name} PROPERTIES EXPORT_NAME ${target_name})\n\n  # Create alias if it doesn't exist\n  if(NOT TARGET IGL::${target_name})\n    if(target_type STREQUAL \"INTERFACE_LIBRARY\")\n      add_library(IGL::${target_name} ALIAS ${target_name})\n    else()\n      add_library(IGL::${target_name} ALIAS ${target_name})\n    endif()\n  endif()\n\n  message(STATUS \"  - Successfully configured install for: ${target_name}\")\nendfunction()\n\n# Function to install headers for a directory\nfunction(igl_install_headers source_dir dest_dir)\n  if(EXISTS \"${source_dir}\")\n    install(\n      DIRECTORY \"${source_dir}/\"\n      DESTINATION \"${CMAKE_INSTALL_INCLUDEDIR}/${dest_dir}\"\n      FILES_MATCHING\n      PATTERN \"*.h\"\n      PATTERN \"*.hpp\"\n      PATTERN \"*.inl\"\n      PATTERN \"tests\" EXCLUDE\n      PATTERN \"test\" EXCLUDE\n      PATTERN \".git\" EXCLUDE)\n    message(STATUS \"  - Configured headers install: ${source_dir} -> ${dest_dir}\")\n  endif()\nendfunction()\n\n# Get all targets dynamically\nget_property(ALL_DISCOVERED_TARGETS GLOBAL PROPERTY TARGETS)\n\n# Backup method: If global property doesn't work, try to discover known targets manually\nif(NOT ALL_DISCOVERED_TARGETS)\n  message(STATUS \"Global TARGETS property is empty, trying backup discovery method...\")\n\n  # List of known possible IGL targets that might exist\n  set(POTENTIAL_IGL_TARGETS\n      # Core IGL targets\n      IGLLibrary\n      IGLOpenGL\n      IGLMetal\n      IGLVulkan\n      IGLGlslang\n      IGLstb\n      # IGLU targets\n      IGLUimgui\n      IGLUmanagedUniformBuffer\n      IGLUsentinel\n      IGLUshaderCross\n      IGLUsimple_renderer\n      IGLUstate_pool\n      IGLUtexture_accessor\n      IGLUtexture_loader\n      IGLUuniform\n      IGLUsimdtypes\n      IGLUbitmap\n      # Shell targets\n      IGLShellShared\n      # Third-party core libraries\n      fmt\n      glslang\n      SPIRV\n      spirv-cross-core\n      spirv-cross-glsl\n      spirv-cross-msl\n      spirv-cross-util\n      spirv-cross-c\n      glslang-default-resource-limits\n      # Graphics and media libraries\n      ktx\n      ktx_read\n      ktx_version\n      obj_basisu_cbind\n      objUtil\n      TracyClient\n      bc7enc\n      meshoptimizer\n      tinyobjloader\n      # ASTC encoder variants (for different SIMD instructions)\n      astcenc-native-static\n      astcenc-neon-static\n      astcenc-avx2-static\n      astcenc-sse4.1-static\n      astcenc-sse2-static\n      astcenc-none-static\n      # Additional third-party libraries that might be built\n      glfw\n      glew\n      glew_s\n      zlibstatic)\n\n  # Check which of these targets actually exist\n  foreach(potential_target ${POTENTIAL_IGL_TARGETS})\n    if(TARGET ${potential_target})\n      list(APPEND ALL_DISCOVERED_TARGETS ${potential_target})\n      message(STATUS \"  - Found target: ${potential_target}\")\n    endif()\n  endforeach()\n\n  if(ALL_DISCOVERED_TARGETS)\n    list(LENGTH ALL_DISCOVERED_TARGETS found_count)\n    message(STATUS \"Backup discovery found ${found_count} targets\")\n  else()\n    message(STATUS \"No targets found even with backup method\")\n  endif()\nendif()\n\n# Function to check if a target should be installed\nfunction(should_install_target target_name result_var)\n  if(NOT TARGET ${target_name})\n    set(${result_var} FALSE PARENT_SCOPE)\n    return()\n  endif()\n\n  get_target_property(target_type ${target_name} TYPE)\n\n  # Only consider libraries (skip executables, utilities, tests)\n  if(NOT target_type MATCHES \"^(STATIC_LIBRARY|SHARED_LIBRARY|MODULE_LIBRARY|INTERFACE_LIBRARY)$\")\n    set(${result_var} FALSE PARENT_SCOPE)\n    return()\n  endif()\n\n  # Skip test-related targets\n  if(\"${target_name}\" MATCHES \"[Tt]est|TEST|gtest|benchmark\")\n    set(${result_var} FALSE PARENT_SCOPE)\n    return()\n  endif()\n\n  # Skip CMake internal targets\n  if(\"${target_name}\" MATCHES \"^(cmake_|CMake)\")\n    set(${result_var} FALSE PARENT_SCOPE)\n    return()\n  endif()\n\n  # Skip utility targets that shouldn't be exported\n  if(\"${target_name}\" MATCHES \"^(uninstall|doc|docs|example|sample)\")\n    set(${result_var} FALSE PARENT_SCOPE)\n    return()\n  endif()\n\n  # Always include IGL/IGLU targets (highest priority)\n  if(\"${target_name}\" MATCHES \"^(IGL|IGLU)\")\n    set(${result_var} TRUE PARENT_SCOPE)\n    return()\n  endif()\n\n  # Include known important third-party libraries\n  if(\"${target_name}\" MATCHES\n     \"^(fmt|glslang|SPIRV|spirv-cross|ktx|glfw|glew|TracyClient|astcenc|meshoptimizer|tinyobjloader|bc7enc|stb)\")\n    set(${result_var} TRUE PARENT_SCOPE)\n    return()\n  endif()\n\n  # Include other common third-party targets that might be useful\n  if(\"${target_name}\" MATCHES \"^(zlibstatic|zlib|png|jpeg|freetype)\")\n    set(${result_var} TRUE PARENT_SCOPE)\n    return()\n  endif()\n\n  # For unknown targets, be more permissive - include them unless they're clearly utilities\n  if(NOT \"${target_name}\" MATCHES \"^(build|install|package|doc|example|sample|util|tool)\")\n    set(${result_var} TRUE PARENT_SCOPE)\n    return()\n  endif()\n\n  # By default, don't install\n  set(${result_var} FALSE PARENT_SCOPE)\nendfunction()\n\n# Filter targets that should be installed\nset(ALL_TARGETS \"\")\nset(SKIPPED_TARGETS \"\")\n\nif(NOT ALL_DISCOVERED_TARGETS)\n  message(WARNING \"No targets discovered at all! This might indicate a CMake configuration issue.\")\n  message(STATUS \"Current CMAKE_BINARY_DIR: ${CMAKE_BINARY_DIR}\")\n  message(STATUS \"Current CMAKE_SOURCE_DIR: ${CMAKE_SOURCE_DIR}\")\n  return()\nendif()\n\nforeach(target IN LISTS ALL_DISCOVERED_TARGETS)\n  should_install_target(${target} should_install)\n  if(should_install)\n    list(APPEND ALL_TARGETS ${target})\n    message(STATUS \"  ✓ Will install target: ${target}\")\n  else()\n    list(APPEND SKIPPED_TARGETS ${target})\n    # Only show first few skipped targets to avoid spam\n    list(LENGTH SKIPPED_TARGETS skipped_count)\n    if(skipped_count LESS 10)\n      message(STATUS \"  ✗ Skipping target: ${target}\")\n    endif()\n  endif()\nendforeach()\n\nlist(LENGTH ALL_DISCOVERED_TARGETS total_targets)\nlist(LENGTH ALL_TARGETS installable_targets)\nlist(LENGTH SKIPPED_TARGETS skipped_count)\n\nmessage(STATUS \"Target discovery summary:\")\nmessage(STATUS \"  - Total targets found: ${total_targets}\")\nmessage(STATUS \"  - Targets to install: ${installable_targets}\")\nmessage(STATUS \"  - Targets skipped: ${skipped_count}\")\n\nif(installable_targets EQUAL 0)\n  message(STATUS \"Discovered targets were:\")\n  foreach(target IN LISTS ALL_DISCOVERED_TARGETS)\n    get_target_property(target_type ${target} TYPE)\n    message(STATUS \"  - ${target} (${target_type})\")\n  endforeach()\nendif()\n\n# Track if any targets were actually configured for install\nset(IGL_TARGETS_CONFIGURED FALSE)\n\nforeach(target IN LISTS ALL_TARGETS)\n  if(TARGET ${target})\n    igl_setup_target_install(${target})\n    set(IGL_TARGETS_CONFIGURED TRUE)\n  endif()\nendforeach()\n\n# Check if we have any targets to export\nif(NOT IGL_TARGETS_CONFIGURED)\n  message(WARNING \"No IGL targets were found for installation. This may be due to:\")\n  message(WARNING \"  - All backends disabled (OpenGL, Vulkan, Metal)\")\n  message(WARNING \"  - Missing core library targets\")\n  message(WARNING \"  - Configuration issues\")\n\n  # Still install headers even if no targets are available\n  message(STATUS \"Installing headers only (no library targets available)\")\n  igl_install_headers(\"${CMAKE_SOURCE_DIR}/src/igl\" \"igl\")\n  igl_install_headers(\"${CMAKE_SOURCE_DIR}/IGLU\" \"IGLU\")\n\n  # Create a minimal config file without targets\n  configure_package_config_file(\n    \"${CMAKE_CURRENT_LIST_DIR}/IGLConfig.cmake.in\" \"${CMAKE_CURRENT_BINARY_DIR}/cmake/IGLConfigHeadersOnly.cmake\"\n    INSTALL_DESTINATION \"${CMAKE_INSTALL_LIBDIR}/cmake/IGL\" NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)\n\n  install(FILES \"${CMAKE_CURRENT_BINARY_DIR}/cmake/IGLConfigHeadersOnly.cmake\" DESTINATION \"${CMAKE_INSTALL_LIBDIR}/cmake/IGL\"\n          RENAME \"IGLConfig.cmake\")\n\n  message(STATUS \"IGL header-only install configuration completed.\")\n  return()\nendif()\n\n# Install headers\nigl_install_headers(\"${CMAKE_SOURCE_DIR}/src/igl\" \"igl\")\nigl_install_headers(\"${CMAKE_SOURCE_DIR}/IGLU\" \"IGLU\")\nigl_install_headers(\"${CMAKE_SOURCE_DIR}/third-party/deps/src/glm/glm\" \"glm\")\nigl_install_headers(\"${CMAKE_SOURCE_DIR}/third-party/deps/src/stb\" \"stb\")\n\n# Special handling for fmt headers (since we cleared PUBLIC_HEADER for fmt target)\nif(TARGET fmt)\n  message(STATUS \"Installing fmt headers manually to avoid PUBLIC_HEADER conflicts\")\n\n  # Verify the fmt headers source directory exists\n  set(FMT_HEADERS_SOURCE \"${CMAKE_SOURCE_DIR}/third-party/deps/src/fmt/include/fmt\")\n  if(EXISTS \"${FMT_HEADERS_SOURCE}\")\n    message(STATUS \"  ✓ fmt headers source found: ${FMT_HEADERS_SOURCE}\")\n\n    # Check if args.h specifically exists\n    if(EXISTS \"${FMT_HEADERS_SOURCE}/args.h\")\n      message(STATUS \"  ✓ args.h confirmed at: ${FMT_HEADERS_SOURCE}/args.h\")\n    else()\n      message(STATUS \"  ✗ args.h missing at: ${FMT_HEADERS_SOURCE}/args.h\")\n    endif()\n\n    igl_install_headers(\"${FMT_HEADERS_SOURCE}\" \"fmt\")\n    message(STATUS \"  → fmt headers will be installed to: ${CMAKE_INSTALL_INCLUDEDIR}/fmt\")\n  else()\n    message(WARNING \"fmt headers source directory not found: ${FMT_HEADERS_SOURCE}\")\n  endif()\nelse()\n  message(STATUS \"fmt target not found - skipping manual header installation\")\nendif()\n\n# Platform-specific headers\nif(WIN32)\n  install(FILES \"${CMAKE_SOURCE_DIR}/src/igl/win/LogDefault.h\" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/igl/win)\nendif()\n\nif(ANDROID)\n  install(FILES \"${CMAKE_SOURCE_DIR}/src/igl/android/LogDefault.h\" \"${CMAKE_SOURCE_DIR}/src/igl/android/NativeHWBuffer.h\"\n          DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/igl/android)\nendif()\n\n# Generate CMake config files\nconfigure_package_config_file(\n  \"${CMAKE_CURRENT_LIST_DIR}/IGLConfig.cmake.in\" \"${CMAKE_CURRENT_BINARY_DIR}/cmake/IGLConfig.cmake\"\n  INSTALL_DESTINATION \"${CMAKE_INSTALL_LIBDIR}/cmake/IGL\" NO_SET_AND_CHECK_MACRO NO_CHECK_REQUIRED_COMPONENTS_MACRO)\n\n# Install CMake config files\ninstall(FILES \"${CMAKE_CURRENT_BINARY_DIR}/cmake/IGLConfig.cmake\" DESTINATION \"${CMAKE_INSTALL_LIBDIR}/cmake/IGL\")\n\n# Only install export targets if we have any\nget_property(IGL_EXPORT_TARGETS GLOBAL PROPERTY EXPORT_IGLTargets_TARGETS)\nif(IGL_EXPORT_TARGETS OR IGL_TARGETS_CONFIGURED)\n  install(EXPORT IGLTargets FILE IGLTargets.cmake NAMESPACE IGL:: DESTINATION \"${CMAKE_INSTALL_LIBDIR}/cmake/IGL\")\n  message(STATUS \"Configured install for export with targets: ${IGL_EXPORT_TARGETS}\")\nelse()\n  message(WARNING \"No targets found in IGLTargets export - skipping export installation\")\nendif()\n\nmessage(STATUS \"IGL install configuration completed.\")\n"
  },
  {
    "path": "deploy_content.py",
    "content": "#!/usr/bin/python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\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 os\nimport platform\nimport sys\n\nfolder = \"third-party\"\nscript = os.path.join(folder, \"bootstrap.py\")\njson = os.path.join(folder, \"bootstrap-content.json\")\nbase = os.path.join(folder, \"content\")\n\ntry:\n    os.mkdir(base)\nexcept FileExistsError:\n    pass\n\n# @fb-only\n    # @fb-only\n        # @fb-only\n    # @fb-only\n    # @fb-only\n        # @fb-only\n    # @fb-only\n    # @fb-only\n\nos.system(\n    '\"{}\" {} -b {} --bootstrap-file={}'.format(sys.executable, script, base, json)\n)\n"
  },
  {
    "path": "deploy_deps.py",
    "content": "#!/usr/bin/python3\n# Copyright (c) Meta Platforms, Inc. and affiliates.\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 os\nimport sys\n\nfolder = \"third-party\"\nscript = os.path.join(folder, \"bootstrap.py\")\njson = os.path.join(folder, \"bootstrap-deps.json\")\nbase = os.path.join(folder, \"deps\")\n\nos.system(\n    '\"{}\" {} -b {} --bootstrap-file={} --break-on-first-error'.format(\n        sys.executable, script, base, json\n    )\n)\n"
  },
  {
    "path": "docs/.gitignore",
    "content": "venv/\nbuild/\n"
  },
  {
    "path": "docs/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\nSOURCEDIR     = source\nBUILDDIR      = build\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\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)\n"
  },
  {
    "path": "docs/README.md",
    "content": "<div align=\"center\">\n  <picture>\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://github.com/facebook/igl/blob/main/.github/igl-full-color-white.svg?raw=true\">\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"https://github.com/facebook/igl/blob/main/.github/igl-full-color-black.svg?raw=true\">\n    <img alt=\"IGL Logo\" src=\".github/igl-full-color-black.svg\" width=\"500\">\n  </picture>\n\n  [![Build Status](https://github.com/facebook/igl/actions/workflows/doc-build.yml/badge.svg)](https://github.com/facebook/igl/actions)\n\n</div>\n\nIGL Documentation Source\n========================\n\nThis is the documentation source for [IGL](https://www.github.com/facebook/igl)\n\n## Building the documentation\n\nThe documentation template is based on [Sphinx](https://www.sphinx-doc.org/) and [Furo](https://github.com/pradyunsg/furo)\nand requires [Python](https://www.python.org/) and [virtualenv](https://virtualenv.pypa.io/en/latest/).\n\nThe process described below works on the Mac. Building the documentation on Windows may require significant more work to adjust the version\nof the packages listed in the [requirements.txt](https://github.com/facebook/igl/blob/main/docs/requirements.txt) file.\nThe process of building the documentation on Linux has not been tested.\n\n1. Set up a Python virtual environment using `virtualenv` and activate it:\n```shell-script\nvirtualenv venv\nsource ./venv/bin/activate\n```\n\n2. Once in the virtual environment, install the required Python packages:\n```shell-script\npip install -r requirements.txt\n```\n\n3. Build the website using make.\n```shell-script\nmake html\n```\n\nThe generated website will be output to [docs/build/html](https://github.com/facebook/igl/tree/gh-pages).\n"
  },
  {
    "path": "docs/make.bat",
    "content": "@ECHO OFF\r\n\r\npushd %~dp0\r\n\r\nREM Command file for Sphinx documentation\r\n\r\nif \"%SPHINXBUILD%\" == \"\" (\r\n\tset SPHINXBUILD=sphinx-build\r\n)\r\nset SOURCEDIR=source\r\nset BUILDDIR=build\r\n\r\n%SPHINXBUILD% >NUL 2>NUL\r\nif errorlevel 9009 (\r\n\techo.\r\n\techo.The 'sphinx-build' command was not found. Make sure you have Sphinx\r\n\techo.installed, then set the SPHINXBUILD environment variable to point\r\n\techo.to the full path of the 'sphinx-build' executable. Alternatively you\r\n\techo.may add the Sphinx directory to PATH.\r\n\techo.\r\n\techo.If you don't have Sphinx installed, grab it from\r\n\techo.https://www.sphinx-doc.org/\r\n\texit /b 1\r\n)\r\n\r\nif \"%1\" == \"\" goto help\r\n\r\n%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\r\ngoto end\r\n\r\n:help\r\n%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%\r\n\r\n:end\r\npopd\r\n"
  },
  {
    "path": "docs/requirements.txt",
    "content": "sphinx==5.3.0\nmyst-parser\nfuro\nsphinx-copybutton\nsphinxext-opengraph\nsphinx-favicon\nsphinx-inline-tabs\n"
  },
  {
    "path": "docs/source/_extensions/style.py",
    "content": "from pygments.filters import VisibleWhitespaceFilter\nfrom pygments.lexers.compiled import CppLexer, RustLexer\nfrom pygments.lexers.make import CMakeLexer\nfrom sphinx.highlighting import lexers\n\n\ndef setup(app):\n    \"\"\"Replace tabs with 4 spaces\"\"\"\n    lexers[\"C++\"] = CppLexer()\n    lexers[\"rust\"] = RustLexer()\n    lexers[\"CMake\"] = CMakeLexer()\n\n    ws_filter = VisibleWhitespaceFilter(tabs=\" \", tabsize=4)\n    for lx in lexers.values():\n        lx.add_filter(ws_filter)\n"
  },
  {
    "path": "docs/source/conf.py",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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# @fb-only\n\n# # For the full list of built-in configuration values, see the documentation:\n# https://www.sphinx-doc.org/en/master/usage/configuration.html\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 sys\nfrom os.path import abspath, dirname, join\n\nsys.path.append(abspath(join(dirname(__file__), \"_extensions\")))\nprint(abspath(join(dirname(__file__), \"_extensions\")))\n\n# -- Project information -----------------------------------------------------\n# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information\n\nproject = \"IGL\"\ncopyright = \"2023, Meta\"\nauthor = \"Meta IGL\"\n\n# -- General configuration ---------------------------------------------------\n# https://www.sphinx-doc.org/en/master/usage/configuration.html#general-configuration\n\nextensions = [\n    \"myst_parser\",\n    \"sphinxext.opengraph\",\n    \"sphinx_copybutton\",\n    \"sphinx_favicon\",\n    \"sphinx_inline_tabs\",\n    \"style\",\n    # \"sphinx_literate\",\n]\n\ntemplates_path = [\"_templates\"]\nexclude_patterns = [\"build\", \"Thumbs.db\", \".DS_Store\", \"README.md\", \"venv\", \"tmp\"]\n\nmyst_heading_anchors = 3\n\nmyst_enable_extensions = [\n    \"amsmath\",\n    \"dollarmath\",\n]\n\n# -- Options for HTML output -------------------------------------------------\n# https://www.sphinx-doc.org/en/master/usage/configuration.html#options-for-html-output\n\nhtml_theme = \"furo\"\n\n\nhtml_theme_options = {\n    \"announcement\": \"<em>Important</em> This documentation is a work in progress!\",\n    \"dark_logo\": \"igl-full-color-white.svg\",\n    \"light_logo\": \"igl-full-color-black.svg\",\n    \"sidebar_hide_name\": True,\n    \"navigation_with_keys\": True,\n    \"light_css_variables\": {\n        \"color-brand-primary\": \"#ac2800\",  # or #ac2800\n        \"color-brand-content\": \"#007cac\",  # #05acc8  #0089BD\n    },\n    \"dark_css_variables\": {\n        \"color-brand-primary\": \"#ce5733\",\n        \"color-brand-content\": \"#38a6b9\",  # #05acc8  #0089BD\n    },\n    \"footer_icons\": [\n        {\n            \"name\": \"GitHub\",\n            \"url\": \"https://github.com/facebook/igl\",\n            \"html\": \"\"\"\n                <svg stroke=\"currentColor\" fill=\"currentColor\" stroke-width=\"0\" viewBox=\"0 0 16 16\">\n                    <path fill-rule=\"evenodd\" d=\"M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z\"></path>\n                </svg>\n            \"\"\",\n            \"class\": \"\",\n        },\n    ],\n    \"source_repository\": \"https://github.com/facebook/igl\",\n    \"source_branch\": \"main\",\n    \"source_directory\": \".\",\n    \"top_of_page_button\": None,\n}\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 = [\"images\", \"data\", \"theme\", \"video\"]\n\nhtml_css_files = [\n    \"extra.css\",\n    \"sphinx_literate.css\",\n]\n\n# Syntax highlighting of code blocks\npygments_style = \"sphinx\"\npygments_dark_style = \"monokai\"\n\n# -- Options for sphinx-favicon -----------------------------------------\n\nfavicons = [\n    {\n        \"rel\": \"icon\",\n        \"static-file\": \"favicon/favicon.svg\",\n        \"type\": \"image/svg+xml\",\n    },\n    {\n        \"rel\": \"icon\",\n        \"sizes\": \"16x16\",\n        \"href\": \"favicon/favicon-16x16.png\",\n        \"type\": \"image/png\",\n    },\n    {\n        \"rel\": \"icon\",\n        \"sizes\": \"32x32\",\n        \"href\": \"favicon/favicon-32x32.png\",\n        \"type\": \"image/png\",\n    },\n    {\n        \"rel\": \"apple-touch-icon\",\n        \"sizes\": \"180x180\",\n        \"href\": \"favicon/apple-touch-icon-180x180.png\",\n        \"type\": \"image/png\",\n    },\n]\n"
  },
  {
    "path": "docs/source/data/placeholder",
    "content": "delete this file once this folder has some real data\n"
  },
  {
    "path": "docs/source/getting-started/index.md",
    "content": "Getting started\n===============\n\n```{toctree}\n:maxdepth: 2\n````\n"
  },
  {
    "path": "docs/source/index.md",
    "content": " <!-- IGL documentation master file, created by\n   sphinx-quickstart on Tue May  9 14:48:26 2023.\n   You can adapt this file completely to your liking, but it should at least\n   contain the root `toctree` directive. -->\n\nIntermediate Graphics Library (IGL)\n===================================\n\nIntermediate Graphics Library (IGL) is a cross-platform library that commands the GPU. It encapsulates\ncommon GPU functionality with a low-level cross-platform interface. IGL is designed to support multiple\nbackends implemented on top of various graphics APIs (e.g. OpenGL, Metal and Vulkan) with a common interface.\n\nContents\n========\n\n```{toctree}\n:titlesonly:\n:maxdepth: 2\nintroduction\ngetting-started/index\n```\n\n\n\n\n<!-- Indices and tables\n==================\n\n* :ref:`genindex`\n* :ref:`modindex`\n* :ref:`search` -->\n"
  },
  {
    "path": "docs/source/introduction.md",
    "content": "Introduction\n============\n\nSupported rendering backends\n----------------------------\n\n * Metal 2+\n * OpenGL 2.x (requires [GL_ARB_framebuffer_object](https://registry.khronos.org/OpenGL/extensions/ARB/ARB_framebuffer_object.txt))\n * OpenGL 3.1+\n * OpenGL ES 2.0+\n * Vulkan 1.1 (requires [VK_KHR_buffer_device_address](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_KHR_buffer_device_address.html) and [VK_EXT_descriptor_indexing](https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_indexing.html))\n * WebGL 2.0\n\nSupported platforms\n-------------------\n\n * Android\n * iOS\n * Linux\n * macOS\n * Windows\n * WebAssembly\n"
  },
  {
    "path": "docs/source/theme/extra.css",
    "content": "ul.simple,\nol.simple {\n    padding-left: 1.6rem;\n}\n\nul.simple li:not(:last-child),\nol.simple li:not(:last-child) {\n    margin-bottom: 0.5rem;\n}\n\nbody .with-shadow {\n    box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.25);\n}\n\n@media (prefers-color-scheme: dark) {\nbody[data-theme=\"dark\"] .with-shadow,\nbody:not([data-theme=\"light\"]) .with-shadow {\n    box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.7);\n}\n}\n\nfigcaption {\n    font-style: italic;\n    font-size: 1.0rem;\n}\nfigcaption p {\n    margin-top: 0;\n}\n"
  },
  {
    "path": "docs/source/theme/sphinx_literate.css",
    "content": ".lit-block-wrapper {\n    position: relative;\n}\n\n.lit-block-wrapper .lit-block-footer {\n    text-align: right;\n    font-size: 0.8em;\n    position: absolute;\n    bottom: -0.7em;\n    right: 0.5em;\n    margin-top: 0;\n    color: rgba(0, 0, 0, 0.39);\n    background-color: #3e3d35;\n    border-radius: 0.3em;\n    padding: 0 0.3em;\n}\n\n.lit-block-wrapper .lit-block-footer .lit-name {\n    color: rgba(0, 0, 0, 0.94);\n}\n"
  },
  {
    "path": "docs/source/video/placeholder",
    "content": "delete this file once this folder has some real data\n"
  },
  {
    "path": "getting-started.md",
    "content": "# Examples\n\n1) [Tiny](./samples/desktop/Tiny/Tiny.cpp)\n\nA basic example showing how to render a triangle.\n\n![image](.github/screenshot_Tiny.png)\n\n2) [Tiny_Mesh](./samples/desktop/Tiny/Tiny_Mesh.cpp)\n\nAn intermediate example showing how to render multiple textured meshes and ImGui integration.\n\n![image](.github/screenshot_TinyMesh.png)\n\n3) [Tiny_MeshLarge](./samples/desktop/Tiny/Tiny_MeshLarge.cpp)\n\nA complex example demonstrating most of IGL features and rendering the Lumberyard Bistro mesh. Learn how to draw the rest of the owl.\n\n![image](.github/screenshot01.png)\n\n# RenderSessions\n\nRenderSessions use iglshell functionality that provides platform abstraction and basic application functionality.\nWe provide some basic examples that you can use in your projects\n\n1)  [EmptySession](./shell/renderSessions/EmptySession.cpp)\n\nAn empty session. You can use it as a template for a new project\n\n![image](.github/screenshot_EmptySession.png)\n\n2)  [BasicFramebufferSession](./shell/renderSessions/BasicFramebufferSession.cpp)\n\nA basic session showing how to create a framebuffer\n\n![image](.github/screenshot_BasicFramebufferSession.png)\n\n3)  [HelloWorldSession](./shell/renderSessions/HelloWorldSession.cpp)\n\nA basic session showing how to render a triangle\n\n![image](.github/screenshot_HelloWorldSession.png)\n\n4)  [ColorSession](./shell/renderSessions/ColorSession.cpp)\n\nA basic session showing how to render a textured quad\n\n![image](.github/screenshot_ColorSession.png)\n\n5)  [ImguiSession](./shell/renderSessions/ImguiSession.cpp)\n\nA basic session showing how to use ImGUI with IGL\n\n![image](.github/screenshot_ImguiSession.png)\n\n6)  [MRTSession](./shell/renderSessions/MRTSession.cpp)\n\nA basic session showing how to use multiple render targets feature\n\n![image](.github/screenshot_MRTSession.png)\n\n7)  [Textured3DCubeSession](./shell/renderSessions/Textured3DCubeSession.cpp)\n\nA basic session showing how to use 3D textures\n\n![image](.github/screenshot_Textured3DCubeSession.png)\n\n8)  [TQMultiRenderPassSession](./shell/renderSessions/TQMultiRenderPassSession.cpp)\n\nA basic session showing how to use multiple render passes\n\n![image](.github/screenshot_TQMultiRenderPassSession.png)\n\nAnd many more sessions are coming!\n"
  },
  {
    "path": "samples/android/opengl/java/com/facebook/igl/sample/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.facebook.igl.sample.opengl\">\n  <uses-feature android:glEsVersion=\"0x00030000\"/>\n  <uses-sdk android:minSdkVersion=\"24\" android:targetSdkVersion=\"35\"/>\n  <application\n      android:allowBackup=\"false\"\n      android:fullBackupContent=\"false\"\n      android:label=\"IGL Sample OpenGL\"\n      android:debuggable=\"true\">\n    <activity android:name=\"SampleActivity\"\n              android:theme=\"@android:style/Theme.NoTitleBar.Fullscreen\"\n              android:launchMode=\"singleTask\"\n              android:configChanges=\"orientation|keyboardHidden\"\n              android:exported=\"true\">\n      <intent-filter>\n        <action android:name=\"android.intent.action.MAIN\" />\n        <category android:name=\"android.intent.category.LAUNCHER\" />\n      </intent-filter>\n    </activity>\n  </application>\n</manifest>\n"
  },
  {
    "path": "samples/android/opengl/java/com/facebook/igl/sample/SampleActivity.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\npackage com.facebook.igl.sample.opengl;\n\nimport android.app.Activity;\nimport android.os.Bundle;\n\npublic class SampleActivity extends Activity {\n\n  SampleView mView;\n\n  @Override\n  protected void onCreate(Bundle icicle) {\n    super.onCreate(icicle);\n    mView = new SampleView(getApplication());\n    setContentView(mView);\n  }\n\n  @Override\n  protected void onPause() {\n    super.onPause();\n    mView.onPause();\n  }\n\n  @Override\n  protected void onResume() {\n    super.onResume();\n    mView.onResume();\n  }\n}\n"
  },
  {
    "path": "samples/android/opengl/java/com/facebook/igl/sample/SampleLib.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\npackage com.facebook.igl.sample.opengl;\n\n// Wrapper for our native C++ library, which implements the actual rendering.\npublic class SampleLib {\n\n  static {\n    System.loadLibrary(\"sampleOpenGLJni\");\n  }\n\n  public static native void init();\n\n  public static native void surfaceChanged();\n\n  public static native void render();\n}\n"
  },
  {
    "path": "samples/android/opengl/java/com/facebook/igl/sample/SampleView.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\npackage com.facebook.igl.sample.opengl;\n\nimport android.content.Context;\nimport android.graphics.PixelFormat;\nimport android.opengl.GLSurfaceView;\nimport android.util.Log;\nimport javax.microedition.khronos.egl.EGL10;\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.egl.EGLContext;\nimport javax.microedition.khronos.egl.EGLDisplay;\nimport javax.microedition.khronos.opengles.GL10;\n\n/// Simple view that sets up a GLES 2.0 rendering context\nclass SampleView extends GLSurfaceView {\n  private static String TAG = \"SampleView\";\n\n  public SampleView(Context context) {\n    super(context);\n\n    setEGLContextFactory(new ContextFactory());\n\n    // Set the view to be transluscent since we provide an alpha channel below.\n    this.getHolder().setFormat(PixelFormat.TRANSLUCENT);\n\n    setEGLConfigChooser(new ConfigChooser());\n\n    setRenderer(new Renderer());\n  }\n\n  /// Context factory: handles creating the EGL context for this view with the correct settings.\n  private static class ContextFactory implements GLSurfaceView.EGLContextFactory {\n\n    public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {\n      final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;\n      int[] attrib_list = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE};\n      EGLContext context =\n          egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);\n      checkEglError(\"Error creating EGL context\", egl);\n      return context;\n    }\n\n    public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) {\n      egl.eglDestroyContext(display, context);\n    }\n  }\n\n  private static void checkEglError(String prompt, EGL10 egl) {\n    int error;\n    while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS) {\n      Log.e(TAG, String.format(\"%s: EGL error: 0x%x\", prompt, error));\n    }\n  }\n\n  /// Config chooser: handles specifying the requirements for the EGL config and choosing the\n  // correct one.\n  private static class ConfigChooser implements GLSurfaceView.EGLConfigChooser {\n\n    public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {\n      final int EGL_OPENGL_ES2_BIT = 4;\n      // Set ourselves a strict configuration: RGBA8888, 16-bit depth buffer, no stencil.\n      final int[] configAttribs = {\n        EGL10.EGL_RED_SIZE, 8,\n        EGL10.EGL_GREEN_SIZE, 8,\n        EGL10.EGL_BLUE_SIZE, 8,\n        EGL10.EGL_ALPHA_SIZE, 8,\n        EGL10.EGL_DEPTH_SIZE, 16,\n        EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,\n        EGL10.EGL_NONE\n      };\n\n      int[] numConfigs = new int[1];\n      egl.eglChooseConfig(display, configAttribs, null, 0, numConfigs);\n\n      if (numConfigs[0] <= 0) {\n        throw new IllegalArgumentException(\"Couldn't find an appropriate EGL config\");\n      }\n\n      EGLConfig[] configs = new EGLConfig[1];\n      egl.eglChooseConfig(display, configAttribs, configs, 1, numConfigs);\n\n      return configs[0];\n    }\n  }\n\n  /// Renderer: This class communicates with our JNI library to implement the OpenGL rendering.\n  private static class Renderer implements GLSurfaceView.Renderer {\n\n    public void onSurfaceCreated(GL10 gl, EGLConfig config) {\n      SampleLib.init();\n    }\n\n    public void onSurfaceChanged(GL10 gl, int width, int height) {\n      SampleLib.surfaceChanged();\n    }\n\n    public void onDrawFrame(GL10 gl) {\n      SampleLib.render();\n    }\n  }\n}\n"
  },
  {
    "path": "samples/android/opengl/jni/Jni.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <jni.h>\n\n#include \"TinyRenderer.h\"\n\n#include <memory>\n\nnamespace igl_samples::android {\n\nnamespace {\nstd::unique_ptr<TinyRenderer> renderer;\n} // namespace\n\nextern \"C\" {\nJNIEXPORT void JNICALL Java_com_facebook_igl_sample_opengl_SampleLib_init(JNIEnv* env, jobject obj);\nJNIEXPORT void JNICALL Java_com_facebook_igl_sample_opengl_SampleLib_surfaceChanged(JNIEnv* env,\n                                                                                    jobject obj);\nJNIEXPORT void JNICALL Java_com_facebook_igl_sample_opengl_SampleLib_render(JNIEnv* env,\n                                                                            jobject obj);\n};\n\nJNIEXPORT void JNICALL Java_com_facebook_igl_sample_opengl_SampleLib_init(JNIEnv* /*env*/,\n                                                                          jobject /*obj*/) {\n  renderer = std::make_unique<TinyRenderer>();\n  renderer->init();\n}\n\nJNIEXPORT void JNICALL\nJava_com_facebook_igl_sample_opengl_SampleLib_surfaceChanged(JNIEnv* /*env*/, jobject /*obj*/) {\n  renderer->onSurfacesChanged();\n}\n\nJNIEXPORT void JNICALL Java_com_facebook_igl_sample_opengl_SampleLib_render(JNIEnv* /*env*/,\n                                                                            jobject /*obj*/) {\n  if (renderer != nullptr) {\n    renderer->render();\n  }\n}\n\n} // namespace igl_samples::android\n"
  },
  {
    "path": "samples/android/opengl/jni/TinyRenderer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include \"TinyRenderer.h\"\n\n#include <EGL/egl.h>\n#include <android/log.h>\n#include <memory>\n#include <sstream>\n#include <stdexcept>\n#include <igl/ShaderCreator.h>\n#include <igl/opengl/egl/HWDevice.h>\n#include <igl/opengl/egl/PlatformDevice.h>\n\n#define IGL_SAMPLE_LOG_INFO(...) \\\n  __android_log_print(ANDROID_LOG_INFO, \"libsampleOpenGLJni\", __VA_ARGS__)\n#define IGL_SAMPLE_LOG_ERROR(...) \\\n  __android_log_print(ANDROID_LOG_ERROR, \"libsampleOpenGLJni\", __VA_ARGS__)\n\nnamespace igl_samples::android {\n\nusing namespace igl;\n\nnamespace {\n\nvoid throwOnBadResult(const Result& result) {\n  if (result.code != Result::Code::Ok) {\n    std::stringstream errorMsg;\n    errorMsg << \"IGL error:\\nCode: \" << static_cast<int>(result.code)\n             << \"\\nMessage: \" << result.message;\n    IGL_SAMPLE_LOG_ERROR(\"%s\", errorMsg.str().c_str());\n    throw std::runtime_error(errorMsg.str());\n  }\n}\n\nconst std::string kVertexShader = R\"(\n  precision highp float;\n\n  attribute vec3 position;\n  attribute vec2 uv_in;\n  varying vec2 uv;\n\n  void main() {\n    gl_Position = vec4(position, 1.0);\n    uv = uv_in;\n  }\n)\";\n\nconst std::string kFragmentShader = R\"(\n  precision highp float;\n\n  varying vec2 uv;\n\n  void main() {\n    gl_FragColor = vec4(uv, 0, 1);\n  }\n)\";\n\n} // namespace\n\nvoid TinyRenderer::init() {\n  Result result;\n  { // Initialize the device\n    auto hwDevice = opengl::egl::HWDevice();\n    device_ = hwDevice.create(&result);\n    throwOnBadResult(result);\n  }\n\n  { // Initialize the vertex buffers, index buffers, and shaders\n    struct VertexPosUv {\n      std::array<float, 3> position;\n      std::array<float, 2> uv;\n    };\n    static VertexPosUv vertexData[] = {\n        {.position = {-0.8f, 0.8f, 0.0}, .uv = {0.0, 1.0}},\n        {.position = {0.8f, 0.8f, 0.0}, .uv = {1.0, 1.0}},\n        {.position = {-0.8f, -0.8f, 0.0}, .uv = {0.0, 0.0}},\n        {.position = {0.8f, -0.8f, 0.0}, .uv = {1.0, 0.0}},\n    };\n    static uint16_t indexData[] = {\n        0,\n        1,\n        2,\n        1,\n        3,\n        2,\n    };\n\n    const BufferDesc vertexBufferDesc =\n        BufferDesc{BufferDesc::BufferTypeBits::Vertex, vertexData, sizeof(vertexData)};\n    vertexBuffer_ = device_->createBuffer(vertexBufferDesc, &result);\n    throwOnBadResult(result);\n\n    const BufferDesc indexBufferDesc =\n        BufferDesc{BufferDesc::BufferTypeBits::Index, indexData, sizeof(indexData)};\n    indexBuffer_ = device_->createBuffer(indexBufferDesc, &result);\n    throwOnBadResult(result);\n\n    VertexInputStateDesc vertexInputDesc;\n    vertexInputDesc.numAttributes = 2;\n    vertexInputDesc.attributes[0] = VertexAttribute(\n        0, VertexAttributeFormat::Float3, offsetof(VertexPosUv, position), \"position\");\n    vertexInputDesc.attributes[1] =\n        VertexAttribute(0, VertexAttributeFormat::Float2, offsetof(VertexPosUv, uv), \"uv_in\");\n    vertexInputDesc.numInputBindings = 1;\n    vertexInputDesc.inputBindings[0].stride = sizeof(VertexPosUv);\n    vertexInputState_ = device_->createVertexInputState(vertexInputDesc, &result);\n    throwOnBadResult(result);\n  }\n\n  {\n    shaderStages_ = ShaderStagesCreator::fromModuleStringInput(\n        *device_, kVertexShader.c_str(), \"main\", \"\", kFragmentShader.c_str(), \"main\", \"\", &result);\n    throwOnBadResult(result);\n  }\n\n  { // Initialize command queue\n    const CommandQueueDesc commandQueueDesc = {};\n    commandQueue_ = device_->createCommandQueue(commandQueueDesc, &result);\n    throwOnBadResult(result);\n  }\n\n  { // Set up our render pass descriptor\n    renderPassDesc_.colorAttachments.resize(1);\n    renderPassDesc_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPassDesc_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPassDesc_.colorAttachments[0].clearColor = {0.0, 0.0, 0.5, 1.0};\n  }\n}\n\nvoid TinyRenderer::render() {\n  Result result;\n\n  // Create or update the framebuffer for the current frame\n  auto viewTexture =\n      device_->getPlatformDevice<opengl::egl::PlatformDevice>()->createTextureFromNativeDrawable(\n          &result);\n  throwOnBadResult(result);\n\n  if (framebuffer_ == nullptr) {\n    FramebufferDesc framebufferDesc;\n    framebufferDesc.colorAttachments[0].texture = viewTexture;\n    framebuffer_ = device_->createFramebuffer(framebufferDesc, &result);\n    throwOnBadResult(result);\n  } else {\n    framebuffer_->updateDrawable(viewTexture);\n  }\n\n  // Create pipeline state object if needed\n  if (pipelineState_ == nullptr) {\n    RenderPipelineDesc pipelineDesc;\n    pipelineDesc.vertexInputState = vertexInputState_;\n    pipelineDesc.shaderStages = shaderStages_;\n    pipelineDesc.targetDesc.colorAttachments.resize(1);\n    pipelineDesc.targetDesc.colorAttachments[0].textureFormat = viewTexture->getProperties().format;\n    pipelineDesc.targetDesc.colorAttachments[0].blendEnabled = true;\n    pipelineDesc.targetDesc.colorAttachments[0].rgbBlendOp = BlendOp::Add;\n    pipelineDesc.targetDesc.colorAttachments[0].alphaBlendOp = BlendOp::Add;\n    pipelineDesc.targetDesc.colorAttachments[0].srcRGBBlendFactor = BlendFactor::SrcAlpha;\n    pipelineDesc.targetDesc.colorAttachments[0].srcAlphaBlendFactor = BlendFactor::SrcAlpha;\n    pipelineDesc.targetDesc.colorAttachments[0].dstRGBBlendFactor = BlendFactor::OneMinusSrcAlpha;\n    pipelineDesc.targetDesc.colorAttachments[0].dstAlphaBlendFactor = BlendFactor::OneMinusSrcAlpha;\n\n    pipelineDesc.cullMode = CullMode::Back;\n    pipelineDesc.frontFaceWinding = WindingMode::Clockwise;\n\n    pipelineState_ = device_->createRenderPipeline(pipelineDesc, &result);\n    throwOnBadResult(result);\n  }\n\n  // Create and submit command buffers\n  const CommandBufferDesc commandBufferDesc;\n  const std::shared_ptr<ICommandBuffer> buffer =\n      commandQueue_->createCommandBuffer(commandBufferDesc, &result);\n  throwOnBadResult(result);\n\n  auto cmds = buffer->createRenderCommandEncoder(renderPassDesc_, framebuffer_);\n\n  cmds->bindVertexBuffer(0, *vertexBuffer_);\n  cmds->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n  cmds->bindRenderPipelineState(pipelineState_);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n  buffer->present(viewTexture);\n\n  commandQueue_->submit(*buffer);\n}\n\nvoid TinyRenderer::onSurfacesChanged() {\n  auto* readSurface = eglGetCurrentSurface(EGL_READ);\n  auto* drawSurface = eglGetCurrentSurface(EGL_DRAW);\n\n  Result result;\n  device_->getPlatformDevice<opengl::egl::PlatformDevice>()->updateSurfaces(\n      readSurface, drawSurface, &result);\n  throwOnBadResult(result);\n}\n\n} // namespace igl_samples::android\n"
  },
  {
    "path": "samples/android/opengl/jni/TinyRenderer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <memory>\n#include <igl/IGL.h>\n\nnamespace igl_samples::android {\n\nclass TinyRenderer final {\n public:\n  void init();\n  void render();\n  void onSurfacesChanged();\n\n private:\n  std::unique_ptr<igl::IDevice> device_;\n  std::shared_ptr<igl::ICommandQueue> commandQueue_;\n  std::shared_ptr<igl::IRenderPipelineState> pipelineState_;\n  std::shared_ptr<igl::IVertexInputState> vertexInputState_;\n  std::shared_ptr<igl::IShaderStages> shaderStages_;\n  std::shared_ptr<igl::IBuffer> vertexBuffer_;\n  std::shared_ptr<igl::IBuffer> indexBuffer_;\n  std::shared_ptr<igl::IFramebuffer> framebuffer_;\n  igl::RenderPassDesc renderPassDesc_;\n};\n\n} // namespace igl_samples::android\n"
  },
  {
    "path": "samples/android/vulkan/java/com/facebook/igl/sample/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.facebook.igl.sample.vulkan\">\n  <uses-feature android:glEsVersion=\"0x00030000\"/>\n  <uses-sdk android:minSdkVersion=\"24\" android:targetSdkVersion=\"35\"/>\n  <application\n      android:allowBackup=\"false\"\n      android:fullBackupContent=\"false\"\n      android:label=\"IGL Sample Vulkan\"\n      android:debuggable=\"true\">\n    <activity android:name=\"SampleActivity\"\n              android:theme=\"@android:style/Theme.NoTitleBar.Fullscreen\"\n              android:launchMode=\"singleTask\"\n              android:configChanges=\"orientation|keyboardHidden\"\n              android:exported=\"true\">\n      <!-- Tell NativeActivity the name of the .so -->\n\t\t\t<meta-data android:name=\"android.app.lib_name\" android:value=\"sampleVulkan\" />\n\t\t\t<!-- This filter lets the apk show up as a launchable icon. -->\n\t\t\t<intent-filter>\n\t\t\t\t<action android:name=\"android.intent.action.MAIN\" />\n\t\t\t\t<category android:name=\"android.intent.category.LAUNCHER\" />\n\t\t\t</intent-filter>\n    </activity>\n  </application>\n</manifest>\n"
  },
  {
    "path": "samples/android/vulkan/java/com/facebook/igl/sample/SampleActivity.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\npackage com.facebook.igl.sample.vulkan;\n\nimport android.app.NativeActivity;\nimport android.os.Bundle;\n\npublic class SampleActivity extends NativeActivity {\n\n  @Override\n  protected void onCreate(Bundle savedInstanceState) {\n    super.onCreate(savedInstanceState);\n  }\n\n  static {\n    System.loadLibrary(\"sampleVulkan\");\n  }\n}\n"
  },
  {
    "path": "samples/android/vulkan/jni/Tiny.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <android/log.h>\n#include <android_native_app_glue.h>\n#include <igl/Device.h>\n#include <igl/IGL.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/HWDevice.h>\n#include <igl/vulkan/PlatformDevice.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#define IGL_SAMPLE_LOG_INFO(...) \\\n  __android_log_print(ANDROID_LOG_INFO, \"libsampleVulkanJni\", __VA_ARGS__)\n#define IGL_SAMPLE_LOG_ERROR(...) \\\n  __android_log_print(ANDROID_LOG_ERROR, \"libsampleVulkanJni\", __VA_ARGS__)\n\nnamespace igl_samples::android {\n\nusing namespace igl;\n\nnamespace {\n\nstd::unique_ptr<IDevice> device;\nstd::shared_ptr<ICommandQueue> commandQueue;\nstd::shared_ptr<IFramebuffer> framebuffer;\nRenderPassDesc renderPass;\nstd::shared_ptr<IRenderPipelineState> renderPipelineStateTriangle;\n\nANativeWindow* window;\nuint32_t width, height;\nbool initialized;\n\nconst char* codeVS = R\"(\n#version 460\nlayout (location=0) out vec3 color;\nconst vec2 pos[3] = vec2[3](\n\tvec2(-0.6, -0.4),\n\tvec2( 0.6, -0.4),\n\tvec2( 0.0,  0.6)\n);\nconst vec3 col[3] = vec3[3](\n\tvec3(1.0, 0.0, 0.0),\n\tvec3(0.0, 1.0, 0.0),\n\tvec3(0.0, 0.0, 1.0)\n);\nvoid main() {\n\tgl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\n\tcolor = col[gl_VertexIndex];\n}\n)\";\n\nconst char* codeFS = R\"(\n#version 460\nlayout (location=0) in vec3 color;\nlayout (location=0) out vec4 out_FragColor;\nvoid main() {\n\tout_FragColor = vec4(color, 1.0);\n};\n)\";\n\nvoid initWindow(ANativeWindow* nativeWindow) {\n  // Get the Window first\n  ANativeWindow_acquire(nativeWindow);\n  window = nativeWindow;\n  if (nativeWindow == nullptr) {\n    IGL_SAMPLE_LOG_ERROR(\"ANativeWindow is null\");\n    return;\n  }\n\n  width = ANativeWindow_getWidth(nativeWindow);\n  height = ANativeWindow_getHeight(nativeWindow);\n  IGL_SAMPLE_LOG_INFO(\"window size: [%d, %d]\", width, height);\n}\n\nvoid initIGL() {\n  // create a device\n  const igl::vulkan::VulkanContextConfig ctxConfig;\n  auto ctx = vulkan::HWDevice::createContext(ctxConfig, window);\n  std::vector<HWDeviceDesc> devices =\n      vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(HWDeviceType::IntegratedGpu), nullptr);\n  device = vulkan::HWDevice::create(std::move(ctx), devices[0], (uint32_t)width, (uint32_t)height);\n  IGL_DEBUG_ASSERT(device);\n\n  // Command queue: backed by different types of GPU HW queues\n  CommandQueueDesc desc{};\n  commandQueue = device->createCommandQueue(desc, nullptr);\n\n  renderPass.colorAttachments.emplace_back();\n  renderPass.colorAttachments.back().loadAction = LoadAction::Clear;\n  renderPass.colorAttachments.back().storeAction = StoreAction::Store;\n  renderPass.colorAttachments.back().clearColor = {0.4f, 0.0f, 0.0f, 1.0f};\n  renderPass.depthAttachment.loadAction = LoadAction::DontCare;\n}\n\nvoid createFramebuffer(const std::shared_ptr<ITexture>& nativeDrawable) {\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = nativeDrawable;\n  framebuffer = device->createFramebuffer(framebufferDesc, nullptr);\n  IGL_DEBUG_ASSERT(framebuffer);\n}\n\nvoid createRenderPipeline() {\n  if (renderPipelineStateTriangle) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(framebuffer);\n\n  RenderPipelineDesc desc;\n\n  desc.targetDesc.colorAttachments.resize(1);\n  desc.targetDesc.colorAttachments[0].textureFormat =\n      framebuffer->getColorAttachment(0)->getProperties().format;\n\n  if (framebuffer->getDepthAttachment()) {\n    desc.targetDesc.depthAttachmentFormat =\n        framebuffer->getDepthAttachment()->getProperties().format;\n  }\n\n  desc.shaderStages = ShaderStagesCreator::fromModuleStringInput(\n      *device, codeVS, \"main\", \"\", codeFS, \"main\", \"\", nullptr);\n  renderPipelineStateTriangle = device->createRenderPipeline(desc, nullptr);\n}\n\nstd::shared_ptr<ITexture> getVulkanNativeDrawable() {\n  const auto& vkPlatformDevice = device->getPlatformDevice<igl::vulkan::PlatformDevice>();\n\n  IGL_DEBUG_ASSERT(vkPlatformDevice != nullptr);\n\n  Result ret;\n  std::shared_ptr<ITexture> drawable = vkPlatformDevice->createTextureFromNativeDrawable(&ret);\n\n  IGL_DEBUG_ASSERT(ret.isOk());\n  return drawable;\n}\n\nvoid render() {\n  if (!initialized) {\n    return;\n  }\n\n  auto nativeDrawable = getVulkanNativeDrawable();\n  framebuffer->updateDrawable(nativeDrawable);\n\n  // Command buffers (1-N per thread): create, submit and forget\n  CommandBufferDesc cbDesc;\n  std::shared_ptr<ICommandBuffer> buffer = commandQueue->createCommandBuffer(cbDesc, nullptr);\n\n  const igl::Viewport viewport = {.x = 0.0f,\n                                  .y = 0.0f,\n                                  .width = (float)width,\n                                  .height = (float)height,\n                                  .minDepth = 0.0f,\n                                  .maxDepth = +1.0f};\n  const igl::ScissorRect scissor = {\n      .x = 0, .y = 0, .width = (uint32_t)width, .height = (uint32_t)height};\n\n  // This will clear the framebuffer\n  auto commands = buffer->createRenderCommandEncoder(renderPass, framebuffer);\n\n  commands->bindRenderPipelineState(renderPipelineStateTriangle);\n  commands->bindViewport(viewport);\n  commands->bindScissorRect(scissor);\n\n  // VK_EXT_debug_utils support doesn't exist yet\n  // commands->pushDebugGroupLabel(\"Render Triangle\", igl::Color(1, 0, 0));\n  commands->draw(3, 0, 3);\n  // commands->popDebugGroupLabel();\n  commands->endEncoding();\n\n  buffer->present(nativeDrawable);\n\n  commandQueue->submit(*buffer);\n}\n\nvoid initialize(android_app* app) {\n  if (initialized) {\n    return;\n  }\n\n  initWindow(app->window);\n  initIGL();\n\n  createFramebuffer(getVulkanNativeDrawable());\n  createRenderPipeline();\n  initialized = true;\n}\n} // namespace\n\n// Android NativeActivity functions\nextern \"C\" {\nvoid handleCmd(struct android_app* app, int32_t cmd) {}\nstatic void handleAppCmd(struct android_app* app, int32_t appCmd) {\n  switch (appCmd) {\n  case APP_CMD_SAVE_STATE:\n    break;\n  case APP_CMD_INIT_WINDOW:\n    initialize(app);\n    break;\n  case APP_CMD_TERM_WINDOW:\n    break;\n  case APP_CMD_GAINED_FOCUS:\n    break;\n  case APP_CMD_LOST_FOCUS:\n    break;\n  case APP_CMD_PAUSE:\n  case APP_CMD_DESTROY:\n  case APP_CMD_STOP:\n    // destroy all the Vulkan stuff before closing the window\n    renderPipelineStateTriangle = nullptr;\n    framebuffer = nullptr;\n    device.reset(nullptr);\n    initialized = false;\n    break;\n  }\n}\n\nvoid android_main(struct android_app* app) {\n  app->onAppCmd = handleAppCmd;\n\n  while (app->destroyRequested == 0) {\n    for (;;) {\n      int events = 0;\n      struct android_poll_source* source = nullptr;\n      if (ALooper_pollAll(0, nullptr, &events, (void**)&source) < 0) {\n        break;\n      }\n      if (source != nullptr) {\n        source->process(app, source);\n      }\n    }\n\n    render();\n  }\n}\n}\n\n} // namespace igl_samples::android\n"
  },
  {
    "path": "samples/desktop/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nset(PROJECT_NAME \"IGL Samples\")\n\nif(MSVC)\n  add_definitions(-D_CONSOLE)\nendif()\n\nif(WIN32)\n  add_definitions(\"-DVK_USE_PLATFORM_WIN32_KHR=1\")\n  add_definitions(\"-DNOMINMAX\")\nendif()\n\nmacro(ADD_DEMO app)\n  add_executable(${app} \"Tiny/${app}.cpp\")\n  igl_set_cxxstd(${app} 20)\n  igl_set_folder(${app} ${PROJECT_NAME})\n  target_link_libraries(${app} PUBLIC IGLLibrary)\n  target_link_libraries(${app} PRIVATE bc7enc)\n  target_link_libraries(${app} PRIVATE meshoptimizer)\n  target_link_libraries(${app} PRIVATE tinyobjloader)\n  target_link_libraries(${app} PRIVATE glfw)\n  target_link_libraries(${app} PRIVATE ktx)\n  if(IGL_WITH_IGLU)\n    target_link_libraries(${app} PRIVATE IGLUimgui)\n    target_link_libraries(${app} PRIVATE IGLUsimple_renderer)\n    target_link_libraries(${app} PRIVATE IGLUtexture_loader)\n  endif()\n  if(UNIX)\n    target_link_libraries(${app} PRIVATE EGL)\n  endif()\n  target_link_libraries(${app} PRIVATE IGLstb)\n\n  # For D3D12 builds on Windows, ensure dxil.dll is deployed next to sample\n  # executables so that DXC/DXIL validation and signed DXIL shaders work in\n  # both Debug and Release configurations. This mirrors the behavior used for\n  # render sessions (shell/windows/CMakeLists.txt) and unit tests\n  # (test_all_unittests.bat).\n  if(IGL_WITH_D3D12 AND WIN32 AND MSVC)\n    find_file(DXIL_DLL_FOR_${app}\n      NAMES dxil.dll\n      PATHS\n        \"C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64\"\n        \"C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64\"\n        \"C:/Program Files (x86)/Windows Kits/10/bin/10.0.19041.0/x64\"\n        \"$ENV{WindowsSdkBinPath}/x64\"\n      NO_DEFAULT_PATH\n    )\n    if(DXIL_DLL_FOR_${app})\n      add_custom_command(TARGET ${app} POST_BUILD\n        COMMAND ${CMAKE_COMMAND} -E copy_if_different\n          \"${DXIL_DLL_FOR_${app}}\"\n          \"$<TARGET_FILE_DIR:${app}>/\"\n        COMMENT \"Copying dxil.dll for ${app}\"\n      )\n    endif()\n  endif()\nendmacro()\n\nif(IGL_WITH_OPENGL OR IGL_WITH_VULKAN)\n  add_demo(\"Tiny\")\nendif()\n\nif(IGL_WITH_VULKAN)\n  # this demo app does not work without Vulkan (yet)\n  add_demo(\"Tiny_Mesh\")\nendif()\n\n# Tiny_MeshLarge can run on Vulkan/OpenGL; expose it for D3D12 configs too so the binary is available.\nif(IGL_WITH_OPENGL OR IGL_WITH_VULKAN OR IGL_WITH_D3D12)\n  add_demo(\"Tiny_MeshLarge\")\n\n  target_sources(\n    Tiny_MeshLarge\n    PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/3D-Graphics-Rendering-Cookbook/shared/UtilsCubemap.cpp\")\n  if(NOT IGL_WITH_VULKAN)\n    target_sources(Tiny_MeshLarge PUBLIC \"${IGL_ROOT_DIR}/src/igl/vulkan/util/TextureFormat.cpp\")\n  endif()\nelse()\n  message(STATUS \"Skipping Tiny_MeshLarge: no compatible backend enabled (needs OpenGL/Vulkan/D3D12)\")\nendif()\n"
  },
  {
    "path": "samples/desktop/Tiny/Tiny.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#define GLFW_INCLUDE_NONE\n\n#include <GLFW/glfw3.h>\n#include <igl/Config.h>\n\n#if defined(_XLESS_GLFW_)\n// do nothing\n#elif IGL_PLATFORM_WINDOWS\n#define GLFW_EXPOSE_NATIVE_WIN32\n#define GLFW_EXPOSE_NATIVE_WGL\n#elif IGL_PLATFORM_APPLE\n#define GLFW_EXPOSE_NATIVE_COCOA\n#elif IGL_PLATFORM_LINUX\n#define GLFW_EXPOSE_NATIVE_X11\n#define GLFW_EXPOSE_NATIVE_GLX\n#else\n#error Unsupported OS\n#endif\n\n// NOLINTNEXTLINE(facebook-unused-include-check)\n#include <GLFW/glfw3native.h>\n#include <cstdio>\n#include <stb/stb_image_write.h>\n#include <igl/IGL.h>\n\n#define USE_OPENGL_BACKEND 0\n\n#if IGL_BACKEND_OPENGL && !IGL_BACKEND_VULKAN\n// no IGL/Vulkan was compiled in, switch to IGL/OpenGL\n#undef USE_OPENGL_BACKEND\n#define USE_OPENGL_BACKEND 1\n#endif\n\n// NOLINTBEGIN(facebook-unused-include-check)\n// clang-format off\n#if USE_OPENGL_BACKEND\n  #if IGL_PLATFORM_WINDOWS\n    #include <igl/opengl/wgl/Context.h>\n    #include <igl/opengl/wgl/Device.h>\n    #include <igl/opengl/wgl/HWDevice.h>\n    #include <igl/opengl/wgl/PlatformDevice.h>\n  #elif IGL_PLATFORM_LINUX\n    #include <igl/opengl/glx/Context.h>\n    #include <igl/opengl/glx/Device.h>\n    #include <igl/opengl/glx/HWDevice.h>\n    #include <igl/opengl/glx/PlatformDevice.h>\n  #endif\n#else\n  #include <igl/vulkan/Common.h>\n  #include <igl/vulkan/Device.h>\n  #include <igl/vulkan/HWDevice.h>\n  #include <igl/vulkan/PlatformDevice.h>\n  #include <igl/vulkan/VulkanContext.h>\n#endif // USE_OPENGL_BACKEND\n// clang-format on\n// NOLINTEND(facebook-unused-include-check)\n\n#define ENABLE_MULTIPLE_COLOR_ATTACHMENTS 0\n\n#if ENABLE_MULTIPLE_COLOR_ATTACHMENTS\nstatic const uint32_t kNumColorAttachments = 4;\n#else\nstatic const uint32_t kNumColorAttachments = 1;\n#endif\n\n// NOLINTBEGIN(facebook-unused-include-check)\n#if defined(__cpp_lib_format) && !IGL_PLATFORM_APPLE\n#include <format>\n#define IGL_FORMAT std::format\n#else\n#include <fmt/core.h>\n#define IGL_FORMAT fmt::format\n#endif // __cpp_lib_format\n// NOLINTEND(facebook-unused-include-check)\n\nstatic std::string codeVS = R\"(\n#version 460\nlayout (location=0) out vec3 color;\nconst vec2 pos[3] = vec2[3](\n\tvec2(-0.6, -0.4),\n\tvec2( 0.6, -0.4),\n\tvec2( 0.0,  0.6)\n);\nconst vec3 col[3] = vec3[3](\n\tvec3(1.0, 0.0, 0.0),\n\tvec3(0.0, 1.0, 0.0),\n\tvec3(0.0, 0.0, 1.0)\n);\nvoid main() {\n\tgl_Position = vec4(pos[gl_VertexIndex], 0.0, 1.0);\n\tcolor = col[gl_VertexIndex];\n}\n)\";\n\n#if ENABLE_MULTIPLE_COLOR_ATTACHMENTS\nconst char* codeFS = R\"(\n#version 460\nlayout (location=0) in vec3 color;\nlayout (location=0) out vec4 out_FragColor;\nlayout (location=1) out vec4 out_FragColor1;\n\nvoid main() {\n\tout_FragColor = vec4(color, 1.0);\n\tout_FragColor1 = vec4(1.0, 0.0, 0.0, 1.0);\n};\n)\";\n#else\nconst static char* codeFS = R\"(\n#version 460\nlayout (location=0) in vec3 color;\nlayout (location=0) out vec4 out_FragColor;\nvoid main() {\n\tout_FragColor = vec4(color, 1.0);\n};\n)\";\n#endif\n\nusing namespace igl;\n\nstatic int width = 1024;\nstatic int height = 768;\n\nstatic std::unique_ptr<IDevice> device;\nstatic std::shared_ptr<ICommandQueue> commandQueue;\nstatic RenderPassDesc renderPass;\nstatic std::shared_ptr<IFramebuffer> framebuffer;\nstatic std::shared_ptr<IRenderPipelineState> renderPipelineStateTriangle;\n\nstatic GLFWwindow* initIGL(bool isHeadless, bool enableVulkanValidationLayers) {\n  if (!glfwInit()) {\n    printf(\"glfwInit() failed\");\n    return nullptr;\n  }\n\n#if USE_OPENGL_BACKEND\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);\n  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);\n  glfwWindowHint(GLFW_VISIBLE, true);\n  glfwWindowHint(GLFW_DOUBLEBUFFER, true);\n  glfwWindowHint(GLFW_SRGB_CAPABLE, true);\n  glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API);\n#else\n  glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);\n#endif\n  glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);\n\n#if USE_OPENGL_BACKEND\n  const char* title = \"OpenGL Triangle\";\n#else\n  const char* title = \"Vulkan Triangle\";\n#endif\n\n  GLFWwindow* window = isHeadless ? nullptr\n                                  : glfwCreateWindow(width, height, title, nullptr, nullptr);\n\n  if (window) {\n    glfwSetErrorCallback([](int error, const char* description) {\n      printf(\"GLFW Error (%i): %s\\n\", error, description);\n    });\n\n    glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int, int action, int) {\n      if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {\n        glfwSetWindowShouldClose(window, GLFW_TRUE);\n      }\n    });\n\n    // @lint-ignore CLANGTIDY\n    glfwSetWindowSizeCallback(window, [](GLFWwindow* /*window*/, int w, int h) {\n      width = w;\n      height = h;\n      printf(\"Window resized! width=%d, height=%d\\n\", width, height);\n#if !USE_OPENGL_BACKEND\n      auto* vulkanDevice = static_cast<vulkan::Device*>(device.get());\n      auto& ctx = vulkanDevice->getVulkanContext();\n      ctx.initSwapchain(width, height);\n#endif\n    });\n\n    glfwGetWindowSize(window, &width, &height);\n  }\n\n  // create a device\n  {\n#if USE_OPENGL_BACKEND\n#if IGL_PLATFORM_WINDOWS\n    auto ctx = std::make_unique<igl::opengl::wgl::Context>(GetDC(glfwGetWin32Window(window)),\n                                                           glfwGetWGLContext(window));\n    device = std::make_unique<igl::opengl::wgl::Device>(std::move(ctx));\n#elif IGL_PLATFORM_LINUX\n    auto ctx = std::make_unique<igl::opengl::glx::Context>(\n        nullptr,\n        glfwGetX11Display(),\n        (igl::opengl::glx::GLXDrawable)glfwGetX11Window(window),\n        (igl::opengl::glx::GLXContext)glfwGetGLXContext(window));\n\n    device = std::make_unique<igl::opengl::glx::Device>(std::move(ctx));\n#endif\n#else\n    const igl::vulkan::VulkanContextConfig cfg{\n        .terminateOnValidationError = false,\n        .enableValidation = enableVulkanValidationLayers,\n        .headless = isHeadless,\n    };\n#ifdef _WIN32\n    auto ctx =\n        vulkan::HWDevice::createContext(cfg, window ? (void*)glfwGetWin32Window(window) : nullptr);\n#elif IGL_PLATFORM_APPLE\n    auto ctx =\n        vulkan::HWDevice::createContext(cfg, window ? (void*)glfwGetCocoaWindow(window) : nullptr);\n#elif defined(_XLESS_GLFW_)\n    auto ctx = vulkan::HWDevice::createContext(cfg, nullptr, nullptr);\n#elif IGL_PLATFORM_LINUX\n    auto ctx = vulkan::HWDevice::createContext(\n        cfg, window ? (void*)glfwGetX11Window(window) : nullptr, (void*)glfwGetX11Display());\n#else\n#error Unsupported OS\n#endif\n\n    std::vector<HWDeviceDesc> devices =\n        vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(HWDeviceType::DiscreteGpu), nullptr);\n    if (devices.empty()) {\n      devices = vulkan::HWDevice::queryDevices(\n          *ctx, HWDeviceQueryDesc(HWDeviceType::IntegratedGpu), nullptr);\n    }\n    if (devices.empty() || cfg.headless) {\n      // LavaPipe etc\n      devices = vulkan::HWDevice::queryDevices(\n          *ctx, HWDeviceQueryDesc(HWDeviceType::SoftwareGpu), nullptr);\n    }\n\n    device =\n        vulkan::HWDevice::create(std::move(ctx), devices[0], (uint32_t)width, (uint32_t)height);\n#endif\n    IGL_DEBUG_ASSERT(device);\n  }\n\n  commandQueue = device->createCommandQueue({}, nullptr);\n\n  renderPass.colorAttachments.resize(kNumColorAttachments);\n\n  // first color attachment\n  for (auto i = 0; i < kNumColorAttachments; ++i) {\n    // Generate sparse color attachments by skipping alternate slots\n    if (i & 0x1) {\n      continue;\n    }\n    renderPass.colorAttachments[i] = {\n        .loadAction = LoadAction::Clear,\n        .storeAction = StoreAction::Store,\n        .clearColor = {1.0f, 1.0f, 1.0f, 1.0f},\n    };\n  }\n  renderPass.depthAttachment.loadAction = LoadAction::DontCare;\n\n  return window;\n}\n\nstatic void createRenderPipeline() {\n  if (renderPipelineStateTriangle) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(framebuffer);\n\n  RenderPipelineDesc desc;\n\n  desc.targetDesc.colorAttachments.resize(kNumColorAttachments);\n\n  for (auto i = 0; i < kNumColorAttachments; ++i) {\n    // @fb-only\n    if (framebuffer->getColorAttachment(i)) {\n      desc.targetDesc.colorAttachments[i].textureFormat =\n          framebuffer->getColorAttachment(i)->getFormat();\n    }\n  }\n\n  if (framebuffer->getDepthAttachment()) {\n    desc.targetDesc.depthAttachmentFormat = framebuffer->getDepthAttachment()->getFormat();\n  }\n\n#if USE_OPENGL_BACKEND\n  codeVS = std::regex_replace(codeVS, std::regex(\"gl_VertexIndex\"), \"gl_VertexID\");\n#endif\n\n  desc.shaderStages = ShaderStagesCreator::fromModuleStringInput(\n      *device, codeVS.c_str(), \"main\", \"\", codeFS, \"main\", \"\", nullptr);\n  renderPipelineStateTriangle = device->createRenderPipeline(desc, nullptr);\n  IGL_DEBUG_ASSERT(renderPipelineStateTriangle);\n}\n\nstatic std::shared_ptr<ITexture> getNativeDrawable() {\n  Result ret;\n  std::shared_ptr<ITexture> drawable;\n#if USE_OPENGL_BACKEND\n#if IGL_PLATFORM_WINDOWS\n  const auto& platformDevice = device->getPlatformDevice<opengl::wgl::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n  drawable = platformDevice->createTextureFromNativeDrawable(&ret);\n#elif IGL_PLATFORM_LINUX\n  const auto& platformDevice = device->getPlatformDevice<opengl::glx::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n  drawable = platformDevice->createTextureFromNativeDrawable(width, height, &ret);\n#endif\n#else\n  const auto& platformDevice = device->getPlatformDevice<igl::vulkan::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n  drawable = platformDevice->createTextureFromNativeDrawable(&ret);\n#endif\n  IGL_DEBUG_ASSERT(ret.isOk(), ret.message.c_str());\n  return drawable;\n}\n\nstatic void createFramebuffer(const std::shared_ptr<ITexture>& nativeDrawable) {\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = nativeDrawable;\n\n  for (auto i = 1; i < kNumColorAttachments; ++i) {\n    // Generate sparse color attachments by skipping alternate slots\n    if (i & 0x1) {\n      continue;\n    }\n    const TextureDesc desc = TextureDesc::new2D(\n        nativeDrawable->getFormat(),\n        nativeDrawable->getDimensions().width,\n        nativeDrawable->getDimensions().height,\n        TextureDesc::TextureUsageBits::Attachment | TextureDesc::TextureUsageBits::Sampled,\n        IGL_FORMAT(\"{}C{}\", framebufferDesc.debugName.c_str(), i - 1).c_str());\n\n    framebufferDesc.colorAttachments[i].texture = device->createTexture(desc, nullptr);\n  }\n  framebuffer = device->createFramebuffer(framebufferDesc, nullptr);\n  IGL_DEBUG_ASSERT(framebuffer);\n}\n\nstatic void render(const std::shared_ptr<ITexture>& nativeDrawable) {\n  if (!nativeDrawable) {\n    return;\n  }\n\n  const auto size = framebuffer->getColorAttachment(0)->getSize();\n  if (size.width != width || size.height != height) {\n    createFramebuffer(nativeDrawable);\n  } else {\n    framebuffer->updateDrawable(nativeDrawable);\n  }\n\n  // Command buffers (1-N per thread): create, submit and forget\n  const CommandBufferDesc cbDesc;\n  const std::shared_ptr<ICommandBuffer> buffer = commandQueue->createCommandBuffer(cbDesc, nullptr);\n\n  const igl::Viewport viewport = {.x = 0.0f,\n                                  .y = 0.0f,\n                                  .width = (float)width,\n                                  .height = (float)height,\n                                  .minDepth = 0.0f,\n                                  .maxDepth = +1.0f};\n  const igl::ScissorRect scissor = {\n      .x = 0, .y = 0, .width = (uint32_t)width, .height = (uint32_t)height};\n\n  // This will clear the framebuffer\n  auto commands = buffer->createRenderCommandEncoder(renderPass, framebuffer);\n\n  commands->bindRenderPipelineState(renderPipelineStateTriangle);\n  commands->bindViewport(viewport);\n  commands->bindScissorRect(scissor);\n  commands->pushDebugGroupLabel(\"Render Triangle\", igl::Color(1, 0, 0));\n  commands->draw(3);\n  commands->popDebugGroupLabel();\n  commands->endEncoding();\n\n  buffer->present(nativeDrawable);\n\n  commandQueue->submit(*buffer);\n}\n\nint main(int argc, char* argv[]) {\n  bool isHeadless = false;\n  bool enableVulkanValidationLayers = true;\n\n  for (int i = 1; i < argc; i++) {\n    if (!strcmp(argv[i], \"--headless\")) {\n      isHeadless = true;\n    } else if (!strcmp(argv[i], \"--disable-vulkan-validation-layers\")) {\n      enableVulkanValidationLayers = false;\n    }\n  }\n\n  GLFWwindow* window = initIGL(isHeadless, enableVulkanValidationLayers);\n\n  createFramebuffer(getNativeDrawable());\n  createRenderPipeline();\n\n  // Main loop\n  while (!window || !glfwWindowShouldClose(window)) {\n    render(getNativeDrawable());\n    if (window) {\n      glfwPollEvents();\n    } else {\n      printf(\"We are running headless - breaking after 1 frame\\n\");\n      std::shared_ptr<ITexture> texture = framebuffer->getColorAttachment(0);\n      const Dimensions dim = texture->getDimensions();\n      std::vector<uint8_t> pixelsRGBA(dim.width * dim.height * 4);\n      std::vector<uint8_t> pixelsRGB(dim.width * dim.height * 3);\n      framebuffer->copyBytesColorAttachment(*commandQueue,\n                                            0,\n                                            pixelsRGBA.data(),\n                                            TextureRangeDesc::new2D(0, 0, dim.width, dim.height));\n      if (texture->getFormat() == igl::TextureFormat::BGRA_UNorm8 ||\n          texture->getFormat() == igl::TextureFormat::BGRA_SRGB) {\n        // swap R-B\n        for (uint32_t i = 0; i < pixelsRGBA.size(); i += 4) {\n          std::swap(pixelsRGBA[i + 0], pixelsRGBA[i + 2]);\n        }\n      }\n      // convert to RGB\n      for (uint32_t i = 0; i < pixelsRGB.size() / 3; i++) {\n        pixelsRGB[3 * i + 0] = pixelsRGBA[4 * i + 0];\n        pixelsRGB[3 * i + 1] = pixelsRGBA[4 * i + 1];\n        pixelsRGB[3 * i + 2] = pixelsRGBA[4 * i + 2];\n      }\n      const char* fileName = \"Tiny.png\";\n      IGLLog(IGLLogInfo, \"Writing screenshot to: '%s'\\n\", fileName);\n      stbi_flip_vertically_on_write(1);\n      stbi_write_png(fileName, (int)dim.width, (int)dim.height, 3, pixelsRGB.data(), 0);\n      break;\n    }\n  }\n\n  // destroy all the Vulkan stuff before closing the window\n  renderPipelineStateTriangle = nullptr;\n  framebuffer = nullptr;\n  device.reset(nullptr);\n\n  glfwDestroyWindow(window);\n  glfwTerminate();\n\n  return 0;\n}\n"
  },
  {
    "path": "samples/desktop/Tiny/Tiny_Mesh.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#define GLFW_INCLUDE_NONE\n\n#include <GLFW/glfw3.h>\n#include <igl/Config.h>\n\n#if !defined(_USE_MATH_DEFINES)\n#define _USE_MATH_DEFINES // NOLINT(bugprone-reserved-identifier)\n#endif // _USE_MATH_DEFINES\n#include <cmath>\n#include <cstddef>\n#include <cstdio>\n#include <filesystem>\n\n#if defined(_XLESS_GLFW_)\n// do nothing\n#elif IGL_PLATFORM_WINDOWS\n#define GLFW_EXPOSE_NATIVE_WIN32\n#define GLFW_EXPOSE_NATIVE_WGL\n#elif IGL_PLATFORM_APPLE\n#define GLFW_EXPOSE_NATIVE_COCOA\n#elif IGL_PLATFORM_LINUX\n#define GLFW_EXPOSE_NATIVE_X11\n#define GLFW_EXPOSE_NATIVE_GLX\n#else\n#error Unsupported OS\n#endif\n// NOLINTNEXTLINE(facebook-unused-include-check)\n#include <GLFW/glfw3native.h>\n#include <glm/ext.hpp>\n#include <glm/gtc/random.hpp>\n#include <stb/stb_image.h>\n#include <stb/stb_image_write.h>\n#include <igl/FPSCounter.h>\n#include <igl/IGL.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/HWDevice.h>\n#include <igl/vulkan/PlatformDevice.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#define TINY_TEST_USE_DEPTH_BUFFER 1\n#define TINY_TEST_USE_ASYNC_SCREENSHOTS 1\n\n#define USE_OPENGL_BACKEND 0\n\n#if IGL_BACKEND_OPENGL && !IGL_BACKEND_VULKAN\n// no IGL/Vulkan was compiled in, switch to IGL/OpenGL\n#undef USE_OPENGL_BACKEND\n#define USE_OPENGL_BACKEND 1\n#endif\n\nconstexpr uint32_t kNumCubes = 16;\n\n#if IGL_WITH_IGLU\n#include <IGLU/imgui/Session.h>\n\nnamespace {\n\nstd::unique_ptr<iglu::imgui::Session> imguiSession_;\n\nigl::shell::InputDispatcher inputDispatcher_;\n\n} // namespace\n#endif // IGL_WITH_IGLU\n\nnamespace {\n\nconst char* codeVS = R\"(\nlayout (location=0) in vec3 pos;\nlayout (location=1) in vec3 col;\nlayout (location=2) in vec2 st;\nlayout (location=0) out vec3 color;\nlayout (location=1) out vec2 uv;\n\nlayout (set = 1, binding = 0, std140) uniform UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n} perFrame;\n\nlayout (set = 1, binding = 1, std140) uniform UniformsPerObject {\n  mat4 model;\n} perObject;\n\nvoid main() {\n  mat4 proj = perFrame.proj;\n  mat4 view = perFrame.view;\n  mat4 model = perObject.model;\n  gl_Position = proj * view * model * vec4(pos, 1.0);\n  color = col;\n  uv = st;\n}\n)\";\n\nconst char* codeFS = R\"(\nlayout (location=0) in vec3 color;\nlayout (location=1) in vec2 uv;\nlayout (location=0) out vec4 out_FragColor;\n\nlayout (set = 0, binding = 0) uniform sampler2D uTex0;\nlayout (set = 0, binding = 1) uniform sampler2D uTex1;\n\nvoid main() {\n  vec4 t0 = texture(uTex0, 2.0 * uv);\n  vec4 t1 = texture(uTex1,  uv);\n  out_FragColor = vec4(color * (t0.rgb + t1.rgb), 1.0);\n};\n)\";\n\nusing namespace igl;\nusing glm::mat4;\nusing glm::vec2;\nusing glm::vec3;\nusing glm::vec4;\n\nvec3 axis_[kNumCubes];\n\nGLFWwindow* window_ = nullptr;\nint width_ = 1024;\nint height_ = 768;\nigl::FPSCounter fps_;\nbool saveScreenshot_ = false;\n[[maybe_unused]] igl::SubmitHandle screenshotSubmitHandle_ = {};\n\nconstexpr uint32_t kNumBufferedFrames = 3;\n\nstd::unique_ptr<IDevice> device_;\nstd::shared_ptr<ICommandQueue> commandQueue_;\nRenderPassDesc renderPass_;\nFramebufferDesc framebufferDesc_;\nstd::shared_ptr<IFramebuffer> framebuffer_;\nstd::shared_ptr<IRenderPipelineState> renderPipelineState_Mesh_;\nstd::shared_ptr<IBuffer> vb0_, ib0_; // buffers for vertices and indices\nstd::shared_ptr<IBuffer> screenCopy_;\nstd::vector<std::shared_ptr<IBuffer>> ubPerFrame_, ubPerObject_;\nstd::shared_ptr<IVertexInputState> vertexInput0_;\nstd::shared_ptr<IDepthStencilState> depthStencilState_;\nstd::shared_ptr<ITexture> texture0_, texture1_;\nstd::shared_ptr<ISamplerState> sampler_;\n\nstruct VertexPosUvw {\n  vec3 position;\n  vec3 color;\n  vec2 uv;\n};\n\nstruct UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n};\nstruct UniformsPerObject {\n  mat4 model;\n};\n\nconst float half = 1.0f;\n\n// UV-mapped cube with indices: 24 vertices, 36 indices\nconst VertexPosUvw vertexData0[] = {\n    // top\n    {.position = {-half, -half, +half}, .color = {0.0, 0.0, 1.0}, .uv = {0, 0}}, // 0\n    {.position = {+half, -half, +half}, .color = {1.0, 0.0, 1.0}, .uv = {1, 0}}, // 1\n    {.position = {+half, +half, +half}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 2\n    {.position = {-half, +half, +half}, .color = {0.0, 1.0, 1.0}, .uv = {0, 1}}, // 3\n    // bottom\n    {.position = {-half, -half, -half}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 4\n    {.position = {-half, +half, -half}, .color = {0.0, 1.0, 0.0}, .uv = {0, 1}}, // 5\n    {.position = {+half, +half, -half}, .color = {1.0, 1.0, 0.0}, .uv = {1, 1}}, // 6\n    {.position = {+half, -half, -half}, .color = {1.0, 0.0, 0.0}, .uv = {1, 0}}, // 7\n    // left\n    {.position = {+half, +half, -half}, .color = {1.0, 1.0, 0.0}, .uv = {1, 0}}, // 8\n    {.position = {-half, +half, -half}, .color = {0.0, 1.0, 0.0}, .uv = {0, 0}}, // 9\n    {.position = {-half, +half, +half}, .color = {0.0, 1.0, 1.0}, .uv = {0, 1}}, // 10\n    {.position = {+half, +half, +half}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 11\n    // right\n    {.position = {-half, -half, -half}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 12\n    {.position = {+half, -half, -half}, .color = {1.0, 0.0, 0.0}, .uv = {1, 0}}, // 13\n    {.position = {+half, -half, +half}, .color = {1.0, 0.0, 1.0}, .uv = {1, 1}}, // 14\n    {.position = {-half, -half, +half}, .color = {0.0, 0.0, 1.0}, .uv = {0, 1}}, // 15\n    // front\n    {.position = {+half, -half, -half}, .color = {1.0, 0.0, 0.0}, .uv = {0, 0}}, // 16\n    {.position = {+half, +half, -half}, .color = {1.0, 1.0, 0.0}, .uv = {1, 0}}, // 17\n    {.position = {+half, +half, +half}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 18\n    {.position = {+half, -half, +half}, .color = {1.0, 0.0, 1.0}, .uv = {0, 1}}, // 19\n    // back\n    {.position = {-half, +half, -half}, .color = {0.0, 1.0, 0.0}, .uv = {1, 0}}, // 20\n    {.position = {-half, -half, -half}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 21\n    {.position = {-half, -half, +half}, .color = {0.0, 0.0, 1.0}, .uv = {0, 1}}, // 22\n    {.position = {-half, +half, +half}, .color = {0.0, 1.0, 1.0}, .uv = {1, 1}}, // 23\n};\n\nconst uint16_t indexData[] = {0,  1,  2,  2,  3,  0,  4,  5,  6,  6,  7,  4,\n                              8,  9,  10, 10, 11, 8,  12, 13, 14, 14, 15, 12,\n                              16, 17, 18, 18, 19, 16, 20, 21, 22, 22, 23, 20};\n\nUniformsPerFrame perFrame;\nUniformsPerObject perObject[kNumCubes];\n\nGLFWwindow* initIGL(bool isHeadless, bool enableVulkanValidationLayers) {\n  if (!glfwInit()) {\n    printf(\"glfwInit() failed\");\n    return nullptr;\n  }\n\n  glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);\n  glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);\n  GLFWwindow* window = isHeadless ? nullptr\n                                  : glfwCreateWindow(1280, 1024, \"Vulkan Mesh\", nullptr, nullptr);\n\n  if (!isHeadless && !window) {\n    glfwTerminate();\n    return nullptr;\n  }\n\n  if (window) {\n    glfwSetErrorCallback([](int error, const char* description) {\n      printf(\"GLFW Error (%i): %s\\n\", error, description);\n    });\n\n    glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int, int action, int) {\n      if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {\n        glfwSetWindowShouldClose(window, GLFW_TRUE);\n      }\n      if (key == GLFW_KEY_T && action == GLFW_PRESS) {\n        texture1_.reset();\n      }\n      if (key == GLFW_KEY_C && action == GLFW_PRESS) {\n        saveScreenshot_ = true;\n      }\n    });\n\n    // @lint-ignore CLANGTIDY\n    glfwSetWindowSizeCallback(window, [](GLFWwindow* /*window*/, int width, int height) {\n      printf(\"Window resized! width=%d, height=%d\\n\", width, height);\n      width_ = width;\n      height_ = height;\n#if !USE_OPENGL_BACKEND\n      auto* vulkanDevice = static_cast<vulkan::Device*>(device_.get());\n      auto& ctx = vulkanDevice->getVulkanContext();\n      ctx.initSwapchain(width_, height_);\n#endif\n    });\n\n#if IGL_WITH_IGLU\n    glfwSetCursorPosCallback(window, [](auto* window, double x, double y) {\n      inputDispatcher_.queueEvent(igl::shell::MouseMotionEvent(x, y, 0, 0));\n    });\n    glfwSetMouseButtonCallback(window, [](auto* window, int button, int action, int mods) {\n      double xpos = 0.0, ypos = 0.0;\n      glfwGetCursorPos(window, &xpos, &ypos);\n      using igl::shell::MouseButton;\n      const MouseButton iglButton =\n          (button == GLFW_MOUSE_BUTTON_LEFT)\n              ? MouseButton::Left\n              : (button == GLFW_MOUSE_BUTTON_RIGHT ? MouseButton::Right : MouseButton::Middle);\n      inputDispatcher_.queueEvent(\n          igl::shell::MouseButtonEvent(iglButton, action == GLFW_PRESS, (float)xpos, (float)ypos));\n    });\n#endif // IGL_WITH_IGLU\n\n    glfwGetWindowSize(window, &width_, &height_);\n  }\n\n  // create a device\n  {\n    const igl::vulkan::VulkanContextConfig cfg = {\n        .terminateOnValidationError = true,\n        .enableValidation = enableVulkanValidationLayers,\n        .headless = isHeadless,\n    };\n#ifdef _WIN32\n    auto ctx =\n        vulkan::HWDevice::createContext(cfg, window ? (void*)glfwGetWin32Window(window) : nullptr);\n#elif IGL_PLATFORM_APPLE\n    auto ctx =\n        vulkan::HWDevice::createContext(cfg, window ? (void*)glfwGetCocoaWindow(window) : nullptr);\n#elif defined(_XLESS_GLFW_)\n    auto ctx = vulkan::HWDevice::createContext(cfg, nullptr, nullptr);\n#elif IGL_PLATFORM_LINUX\n    auto ctx = vulkan::HWDevice::createContext(cfg,\n                                               window ? (void*)glfwGetX11Window(window) : nullptr,\n                                               window ? (void*)glfwGetX11Display() : nullptr);\n#else\n#error Unsupported OS\n#endif\n\n    std::vector<HWDeviceDesc> devices =\n        vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(HWDeviceType::DiscreteGpu), nullptr);\n    if (devices.empty()) {\n      devices = vulkan::HWDevice::queryDevices(\n          *ctx, HWDeviceQueryDesc(HWDeviceType::IntegratedGpu), nullptr);\n    }\n    if (devices.empty() || cfg.headless) {\n      // LavaPipe etc\n      devices = vulkan::HWDevice::queryDevices(\n          *ctx, HWDeviceQueryDesc(HWDeviceType::SoftwareGpu), nullptr);\n    }\n    device_ =\n        vulkan::HWDevice::create(std::move(ctx), devices[0], (uint32_t)width_, (uint32_t)height_);\n    IGL_DEBUG_ASSERT(device_);\n  }\n\n  // Vertex buffer, Index buffer and Vertex Input. Buffers are allocated in GPU memory.\n  vb0_ = device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Vertex,\n                                          vertexData0,\n                                          sizeof(vertexData0),\n                                          ResourceStorage::Private,\n                                          0,\n                                          \"Buffer: vertex\"},\n                               nullptr);\n  ib0_ = device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Index,\n                                          indexData,\n                                          sizeof(indexData),\n                                          ResourceStorage::Private,\n                                          0,\n                                          \"Buffer: index\"},\n                               nullptr);\n  screenCopy_ = device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Storage,\n                                                 nullptr,\n                                                 width_ * height_ * sizeof(uint32_t),\n                                                 ResourceStorage::Shared,\n                                                 0,\n                                                 \"Buffer: screen copy\"},\n                                      nullptr);\n\n  // create an Uniform buffers to store uniforms for 2 objects\n  for (uint32_t i = 0; i != kNumBufferedFrames; i++) {\n    ubPerFrame_.push_back(device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Uniform,\n                                                           &perFrame,\n                                                           sizeof(UniformsPerFrame),\n                                                           ResourceStorage::Shared,\n                                                           0,\n                                                           \"Buffer: uniforms (per frame)\"},\n                                                nullptr));\n    ubPerObject_.push_back(device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Uniform,\n                                                            perObject,\n                                                            kNumCubes * sizeof(UniformsPerObject),\n                                                            ResourceStorage::Shared,\n                                                            0,\n                                                            \"Buffer: uniforms (per object)\"},\n                                                 nullptr));\n  }\n\n  {\n    VertexInputStateDesc desc;\n    desc.numAttributes = 3;\n    desc.attributes[0].format = VertexAttributeFormat::Float3;\n    desc.attributes[0].offset = offsetof(VertexPosUvw, position);\n    desc.attributes[0].bufferIndex = 0;\n    desc.attributes[0].location = 0;\n    desc.attributes[1].format = VertexAttributeFormat::Float3;\n    desc.attributes[1].offset = offsetof(VertexPosUvw, color);\n    desc.attributes[1].bufferIndex = 0;\n    desc.attributes[1].location = 1;\n    desc.attributes[2].format = VertexAttributeFormat::Float2;\n    desc.attributes[2].offset = offsetof(VertexPosUvw, uv);\n    desc.attributes[2].bufferIndex = 0;\n    desc.attributes[2].location = 2;\n    desc.numInputBindings = 1;\n    desc.inputBindings[0].stride = sizeof(VertexPosUvw);\n    vertexInput0_ = device_->createVertexInputState(desc, nullptr);\n  }\n\n  {\n    DepthStencilStateDesc desc;\n    desc.isDepthWriteEnabled = true;\n    desc.compareFunction = igl::CompareFunction::Less;\n    depthStencilState_ = device_->createDepthStencilState(desc, nullptr);\n  }\n\n  {\n    const uint32_t texWidth = 256;\n    const uint32_t texHeight = 256;\n    const TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::BGRA_UNorm8,\n                                                texWidth,\n                                                texHeight,\n                                                TextureDesc::TextureUsageBits::Sampled,\n                                                \"XOR pattern\");\n    texture0_ = device_->createTexture(desc, nullptr);\n    std::vector<uint32_t> pixels(texWidth * texHeight);\n    for (uint32_t y = 0; y != texHeight; y++) {\n      for (uint32_t x = 0; x != texWidth; x++) {\n        // create a XOR pattern\n        pixels[y * texWidth + x] = 0xFF000000 + ((x ^ y) << 16) + ((x ^ y) << 8) + (x ^ y);\n      }\n    }\n    texture0_->upload(TextureRangeDesc::new2D(0, 0, texWidth, texHeight), pixels.data());\n  }\n  {\n    using namespace std::filesystem;\n    path dir = current_path();\n    // find IGLU somewhere above our current directory\n    // @fb-only\n    const char* contentFolder = \"third-party/content/src/\";\n    // @fb-only\n    while (dir != current_path().root_path() && !exists(dir / path(contentFolder))) {\n      dir = dir.parent_path();\n    }\n    int32_t texWidth = 0;\n    int32_t texHeight = 0;\n    int32_t channels = 0;\n    uint8_t* pixels = stbi_load(\n        (dir / path(contentFolder) / path(\"bistro/BuildingTextures/wood_polished_01_diff.png\"))\n            .string()\n            .c_str(),\n        &texWidth,\n        &texHeight,\n        &channels,\n        4);\n    IGL_DEBUG_ASSERT(pixels,\n                     \"Cannot load textures. Run `deploy_content.py` before running this app.\");\n    const TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::RGBA_UNorm8,\n                                                texWidth,\n                                                texHeight,\n                                                TextureDesc::TextureUsageBits::Sampled,\n                                                \"wood_polished_01_diff.png\");\n    texture1_ = device_->createTexture(desc, nullptr);\n    texture1_->upload(TextureRangeDesc::new2D(0, 0, texWidth, texHeight), pixels);\n    stbi_image_free(pixels);\n  }\n  {\n    igl::SamplerStateDesc desc = igl::SamplerStateDesc::newLinear();\n    desc.addressModeU = igl::SamplerAddressMode::Repeat;\n    desc.addressModeV = igl::SamplerAddressMode::Repeat;\n    desc.debugName = \"Sampler: linear\";\n    sampler_ = device_->createSamplerState(desc, nullptr);\n  }\n\n  // Command queue: backed by different types of GPU HW queues\n  CommandQueueDesc desc{};\n  commandQueue_ = device_->createCommandQueue(desc, nullptr);\n\n  renderPass_.colorAttachments.push_back({\n      .loadAction = LoadAction::Clear,\n      .storeAction = StoreAction::Store,\n      .clearColor = {1.0f, 0.0f, 0.0f, 1.0f},\n  });\n#if TINY_TEST_USE_DEPTH_BUFFER\n  renderPass_.depthAttachment = {\n      .loadAction = LoadAction::Clear,\n      .storeAction = StoreAction::Store, // save it so we can display it via ImGui\n      .clearDepth = 1.0,\n  };\n#else\n  renderPass_.depthAttachment = {\n      .loadAction = LoadAction::DontCare,\n  };\n#endif // TINY_TEST_USE_DEPTH_BUFFER\n\n  // initialize random rotation axes for all cubes\n  for (auto& axi : axis_) {\n    axi = glm::sphericalRand(1.0f);\n  }\n\n  return window;\n}\n\nvoid createRenderPipeline() {\n  if (renderPipelineState_Mesh_) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(framebuffer_);\n\n  RenderPipelineDesc desc;\n\n  desc.targetDesc.colorAttachments.resize(1);\n  desc.targetDesc.colorAttachments[0].textureFormat =\n      framebuffer_->getColorAttachment(0)->getFormat();\n\n  if (framebuffer_->getDepthAttachment()) {\n    desc.targetDesc.depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat();\n  }\n\n  desc.vertexInputState = vertexInput0_;\n  desc.shaderStages = ShaderStagesCreator::fromModuleStringInput(\n      *device_, codeVS, \"main\", \"\", codeFS, \"main\", \"\", nullptr);\n\n#if !TINY_TEST_USE_DEPTH_BUFFER\n  desc.cullMode = igl::CullMode::Back;\n#endif // TINY_TEST_USE_DEPTH_BUFFER\n\n  desc.frontFaceWinding = igl::WindingMode::Clockwise;\n  desc.debugName = igl::genNameHandle(\"Pipeline: mesh\");\n  renderPipelineState_Mesh_ = device_->createRenderPipeline(desc, nullptr);\n}\n\nstd::shared_ptr<ITexture> getVulkanNativeDrawable() {\n  const auto& vkPlatformDevice = device_->getPlatformDevice<igl::vulkan::PlatformDevice>();\n\n  IGL_DEBUG_ASSERT(vkPlatformDevice != nullptr);\n\n  Result ret;\n  std::shared_ptr<ITexture> drawable = vkPlatformDevice->createTextureFromNativeDrawable(&ret);\n\n  IGL_DEBUG_ASSERT(ret.isOk());\n  return drawable;\n}\n\nstd::shared_ptr<ITexture> getVulkanNativeDepth() {\n  const auto& vkPlatformDevice = device_->getPlatformDevice<igl::vulkan::PlatformDevice>();\n\n  IGL_DEBUG_ASSERT(vkPlatformDevice != nullptr);\n\n  Result ret;\n  std::shared_ptr<ITexture> drawable =\n      vkPlatformDevice->createTextureFromNativeDepth(width_, height_, &ret);\n\n  IGL_DEBUG_ASSERT(ret.isOk());\n  return drawable;\n}\n\nvoid createFramebuffer(const std::shared_ptr<ITexture>& nativeDrawable) {\n  framebufferDesc_.colorAttachments[0].texture = nativeDrawable;\n\n#if TINY_TEST_USE_DEPTH_BUFFER\n  framebufferDesc_.depthAttachment.texture = getVulkanNativeDepth();\n#endif // TINY_TEST_USE_DEPTH_BUFFER\n\n  framebuffer_ = device_->createFramebuffer(framebufferDesc_, nullptr);\n  IGL_DEBUG_ASSERT(framebuffer_);\n}\n\nvoid render(const std::shared_ptr<ITexture>& nativeDrawable, uint32_t frameIndex) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!nativeDrawable) {\n    return;\n  }\n\n#if IGL_WITH_IGLU\n  imguiSession_->beginFrame(framebufferDesc_, 1.0f);\n\n  ImGui::Begin(\"Texture Viewer\", nullptr, ImGuiWindowFlags_AlwaysAutoResize);\n  ImGui::Image(ImTextureID(texture1_.get()), ImVec2(512, 512));\n  ImGui::End();\n\n  inputDispatcher_.processEvents();\n#endif // IGL_WITH_IGLU\n\n  const auto size = framebuffer_->getColorAttachment(0)->getSize();\n  if (size.width != width_ || size.height != height_) {\n    createFramebuffer(nativeDrawable);\n  } else {\n    framebuffer_->updateDrawable(nativeDrawable);\n  }\n\n  // from igl/shell/renderSessions/Textured3DCubeSession.cpp\n  const float fov = float(45.0f * (M_PI / 180.0f));\n  const float aspectRatio = (float)width_ / (float)height_;\n  perFrame.proj = glm::perspectiveLH(fov, aspectRatio, 0.1f, 500.0f);\n  // place a \"camera\" behind the cubes, the distance depends on the total number of cubes\n  perFrame.view =\n      glm::translate(mat4(1.0f), vec3(0.0f, 0.0f, sqrtf(kNumCubes / 16) * 20.0f * half));\n  ubPerFrame_[frameIndex]->upload(&perFrame, igl::BufferRange(sizeof(perFrame)));\n\n  // rotate cubes around random axes\n  for (uint32_t i = 0; i != kNumCubes; i++) {\n    const float direction = powf(-1, (float)(i + 1));\n    const uint32_t cubesInLine = (uint32_t)sqrt(kNumCubes);\n    const vec3 offset = vec3(-1.5f * sqrt(kNumCubes) + 4.0f * (i % cubesInLine),\n                             -1.5f * sqrt(kNumCubes) + 4.0f * (i / cubesInLine),\n                             0);\n    perObject[i].model =\n        glm::rotate(glm::translate(mat4(1.0f), offset), direction * (float)glfwGetTime(), axis_[i]);\n  }\n\n  ubPerObject_[frameIndex]->upload(&perObject, igl::BufferRange(sizeof(perObject)));\n\n  // Command buffers (1-N per thread): create, submit and forget\n  CommandBufferDesc cbDesc;\n  std::shared_ptr<ICommandBuffer> buffer = commandQueue_->createCommandBuffer(cbDesc, nullptr);\n\n  const igl::Viewport viewport = {.x = 0.0f,\n                                  .y = 0.0f,\n                                  .width = (float)width_,\n                                  .height = (float)height_,\n                                  .minDepth = 0.0f,\n                                  .maxDepth = +1.0f};\n  const igl::ScissorRect scissor = {\n      .x = 0, .y = 0, .width = (uint32_t)width_, .height = (uint32_t)height_};\n\n  // This will clear the framebuffer\n  auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  commands->bindRenderPipelineState(renderPipelineState_Mesh_);\n  commands->bindViewport(viewport);\n  commands->bindScissorRect(scissor);\n  commands->pushDebugGroupLabel(\"Render Mesh\", igl::Color(1, 0, 0));\n  commands->bindVertexBuffer(0, *vb0_);\n  commands->bindDepthStencilState(depthStencilState_);\n  commands->bindBuffer(0, ubPerFrame_[frameIndex].get());\n  commands->bindTexture(0, igl::BindTarget::kFragment, texture0_.get());\n  commands->bindTexture(1, igl::BindTarget::kFragment, texture1_.get());\n  commands->bindSamplerState(0, igl::BindTarget::kFragment, sampler_.get());\n  commands->bindSamplerState(1, igl::BindTarget::kFragment, sampler_.get());\n  // Draw 2 cubes: we use uniform buffer to update matrices\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n  for (uint32_t i = 0; i != kNumCubes; i++) {\n    commands->bindBuffer(1, ubPerObject_[frameIndex].get(), i * sizeof(UniformsPerObject));\n    commands->drawIndexed(3u * 6u * 2u);\n  }\n  commands->popDebugGroupLabel();\n#if IGL_WITH_IGLU\n  imguiSession_->drawFPS(fps_.getAverageFPS());\n  imguiSession_->endFrame(*device_, *commands);\n#endif // IGL_WITH_IGLU\n  commands->endEncoding();\n  if (saveScreenshot_) {\n    buffer->copyTextureToBuffer(*nativeDrawable, *screenCopy_, 0);\n  }\n  buffer->present(nativeDrawable);\n\n  auto submitHandle = commandQueue_->submit(*buffer);\n\n  if (auto* pd = device_->getPlatformDevice<igl::vulkan::PlatformDevice>(); saveScreenshot_) {\n    saveScreenshot_ = false;\n#if TINY_TEST_USE_ASYNC_SCREENSHOTS\n    pd->deferredTask(std::packaged_task<void()>([]() {\n                       void* data =\n                           screenCopy_->map(BufferRange(screenCopy_->getSizeInBytes()), nullptr);\n                       stbi_write_bmp(\"screenshot.bmp\", width_, height_, 4, data);\n                       screenCopy_->unmap();\n                       IGL_LOG_INFO(\"Screenshot saved.\\n\");\n                     }),\n                     submitHandle);\n#else\n    // store the submit handle from which we want to capture a screenshot\n    screenshotSubmitHandle_ = submitHandle;\n  } else if (screenshotSubmitHandle_ && // we poll the submit handle every frame until it's ready\n             pd->waitOnSubmitHandle(screenshotSubmitHandle_, 0)) {\n    void* data = screenCopy_->map(BufferRange(screenCopy_->getSizeInBytes()), nullptr);\n    stbi_write_bmp(\"screenshot.bmp\", width_, height_, 4, data);\n    screenCopy_->unmap();\n    screenshotSubmitHandle_ = {};\n    IGL_LOG_INFO(\"Screenshot saved.\\n\");\n#endif // TINY_TEST_USE_ASYNC_SCREENSHOTS\n  }\n}\n\n} // namespace\n\nint main(int argc, char* argv[]) {\n  bool isHeadless = false;\n  bool enableVulkanValidationLayers = true;\n\n  for (int i = 1; i < argc; i++) {\n    if (!strcmp(argv[i], \"--headless\")) {\n      isHeadless = true;\n    } else if (!strcmp(argv[i], \"--disable-vulkan-validation-layers\")) {\n      enableVulkanValidationLayers = false;\n    }\n  }\n\n  window_ = initIGL(isHeadless, enableVulkanValidationLayers);\n\n  createFramebuffer(getVulkanNativeDrawable());\n  createRenderPipeline();\n\n#if IGL_WITH_IGLU\n  imguiSession_ = std::make_unique<iglu::imgui::Session>(*device_, inputDispatcher_);\n#endif // IGL_WITH_IGLU\n\n  double prevTime = glfwGetTime();\n\n  uint32_t frameIndex = 0;\n\n  // Main loop\n  while (!window_ || !glfwWindowShouldClose(window_)) {\n    const double newTime = glfwGetTime();\n    fps_.updateFPS(newTime - prevTime);\n    prevTime = newTime;\n    render(getVulkanNativeDrawable(), frameIndex);\n    frameIndex = (frameIndex + 1) % kNumBufferedFrames;\n    if (window_) {\n      glfwPollEvents();\n    } else {\n      printf(\"We are running headless - breaking after 1 frame\\n\");\n      std::shared_ptr<ITexture> texture = framebuffer_->getColorAttachment(0);\n      const Dimensions dim = texture->getDimensions();\n      std::vector<uint8_t> pixelsRGBA(dim.width * dim.height * 4);\n      std::vector<uint8_t> pixelsRGB(dim.width * dim.height * 3);\n      framebuffer_->copyBytesColorAttachment(*commandQueue_,\n                                             0,\n                                             pixelsRGBA.data(),\n                                             TextureRangeDesc::new2D(0, 0, dim.width, dim.height));\n      if (texture->getFormat() == igl::TextureFormat::BGRA_UNorm8 ||\n          texture->getFormat() == igl::TextureFormat::BGRA_SRGB) {\n        // swap R-B\n        for (uint32_t i = 0; i < pixelsRGBA.size(); i += 4) {\n          std::swap(pixelsRGBA[i + 0], pixelsRGBA[i + 2]);\n        }\n      }\n      // convert to RGB\n      for (uint32_t i = 0; i < pixelsRGB.size() / 3; i++) {\n        pixelsRGB[3 * i + 0] = pixelsRGBA[4 * i + 0];\n        pixelsRGB[3 * i + 1] = pixelsRGBA[4 * i + 1];\n        pixelsRGB[3 * i + 2] = pixelsRGBA[4 * i + 2];\n      }\n      const char* fileName = \"TinyMesh.png\";\n      IGLLog(IGLLogInfo, \"Writing screenshot to: '%s'\\n\", fileName);\n      stbi_flip_vertically_on_write(1);\n      stbi_write_png(fileName, (int)dim.width, (int)dim.height, 3, pixelsRGB.data(), 0);\n      break;\n    }\n  }\n\n#if IGL_WITH_IGLU\n  imguiSession_ = nullptr;\n#endif // IGL_WITH_IGLU\n\n  // destroy all the Vulkan stuff before closing the window\n  vb0_ = nullptr;\n  ib0_ = nullptr;\n  screenCopy_ = nullptr;\n  ubPerFrame_.clear();\n  ubPerObject_.clear();\n  renderPipelineState_Mesh_ = nullptr;\n  texture0_ = nullptr;\n  texture1_ = nullptr;\n  sampler_ = nullptr;\n  framebufferDesc_ = {};\n  framebuffer_ = nullptr;\n  device_.reset(nullptr);\n\n  glfwDestroyWindow(window_);\n  glfwTerminate();\n\n  return 0;\n}\n"
  },
  {
    "path": "samples/desktop/Tiny/Tiny_MeshLarge.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n/*\n * A brief tutorial how to run this beast:\n *\n * 1) Run the script \"deploy_deps.py\" from the IGL root folder.\n * 2) Run the script \"deploy_content.py\" from the IGL root folder.\n * 3) Run this app.\n *\n */\n\n// @fb-only\n\n#define GLFW_INCLUDE_NONE\n\n#if !defined(_USE_MATH_DEFINES)\n#define _USE_MATH_DEFINES\n#endif // _USE_MATH_DEFINES\n#include <Compress.h>\n#include <algorithm>\n#include <cmath>\n#include <cstddef>\n#include <filesystem>\n#include <glm/ext.hpp>\n#include <glm/glm.hpp>\n#include <ktx.h>\n#include <meshoptimizer.h>\n#include <mutex>\n#include <shared/Camera.h>\n#include <shared/UtilsCubemap.h>\n#include <stb/stb_image.h>\n#include <stb/stb_image_resize.h>\n#include <stb/stb_image_write.h>\n#include <taskflow/core/async.hpp>\n#include <thread>\n#include <tiny_obj_loader.h>\n#include <igl/FPSCounter.h>\n#include <igl/IGL.h>\n#include <igl/vulkan/util/TextureFormat.h>\n\n#define USE_TEXTURE_LOADER 0\n#define USE_OPENGL_BACKEND 0\n\n#if IGL_BACKEND_OPENGL && !IGL_BACKEND_VULKAN\n// no IGL/Vulkan was compiled in, switch to IGL/OpenGL\n#undef USE_OPENGL_BACKEND\n#define USE_OPENGL_BACKEND 1\n#endif\n\n#if USE_OPENGL_BACKEND\n// for KTX textures\n#define VK_FORMAT_R32G32B32A32_SFLOAT 109\n#define VK_FORMAT_BC7_UNORM_BLOCK 145\n#endif // USE_OPENGL_BACKEND\n\n#if defined(__cpp_lib_format) && !IGL_PLATFORM_APPLE\n#include <format>\n#define IGL_FORMAT std::format\n#else\n#include <fmt/core.h>\n#define IGL_FORMAT fmt::format\n#endif // __cpp_lib_format\n\n// NOLINTBEGIN(facebook-unused-include-check)\n// clang-format off\n#if USE_OPENGL_BACKEND\n  #include <igl/RenderCommandEncoder.h>\n  #include <igl/opengl/RenderCommandEncoder.h>\n  #include <igl/opengl/RenderPipelineState.h>\n  #if IGL_PLATFORM_WINDOWS\n    #include <igl/opengl/wgl/Context.h>\n    #include <igl/opengl/wgl/Device.h>\n    #include <igl/opengl/wgl/HWDevice.h>\n    #include <igl/opengl/wgl/PlatformDevice.h>\n  #elif IGL_PLATFORM_LINUX\n    #include <igl/opengl/glx/Context.h>\n    #include <igl/opengl/glx/Device.h>\n    #include <igl/opengl/glx/HWDevice.h>\n    #include <igl/opengl/glx/PlatformDevice.h>\n  #endif\n#else\n  #include <igl/vulkan/Common.h>\n  #include <igl/vulkan/Device.h>\n  #include <igl/vulkan/HWDevice.h>\n  #include <igl/vulkan/PlatformDevice.h>\n  #include <igl/vulkan/VulkanContext.h>\n#endif\n// clang-format on\n// NOLINTEND(facebook-unused-include-check)\n\n#include <GLFW/glfw3.h>\n\n// NOLINTBEGIN(facebook-unused-include-check)\n#if defined(_XLESS_GLFW_)\n// do nothing\n#elif defined(_WIN32)\n#define GLFW_EXPOSE_NATIVE_WIN32\n#define GLFW_EXPOSE_NATIVE_WGL\n#elif defined(__APPLE__)\n#define GLFW_EXPOSE_NATIVE_COCOA\n#elif defined(__linux__)\n#define GLFW_EXPOSE_NATIVE_X11\n#define GLFW_EXPOSE_NATIVE_GLX\n#else\n#error Unsupported OS\n#endif\n#include <GLFW/glfw3native.h>\n// NOLINTEND(facebook-unused-include-check)\n\n// @fb-only\n\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n\n#if IGL_WITH_IGLU\n#include <IGLU/imgui/Session.h>\n#endif // IGL_WITH_IGLU\n\n#if USE_TEXTURE_LOADER\n#include <IGLU/texture_loader/ktx1/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/ktx2/TextureLoaderFactory.h>\nstatic_assert(IGL_WITH_IGLU != 0,\n              \"USE_TEXTURE_LOADER can be enabled only together with IGL_WITH_IGLU\");\n#endif // USE_TEXTURE_LOADER\n\nnamespace {\n\nconstexpr uint32_t kMeshCacheVersion = 0xC0DE0009;\n#if USE_OPENGL_BACKEND\nconstexpr bool kEnableCompression = false;\n#else\nconstexpr bool kEnableCompression = true;\nconstexpr bool kPreferIntegratedGPU = false;\n#endif // USE_OPENGL_BACKEND\n\nstd::string contentRootFolder;\n\n#if IGL_WITH_IGLU\nstd::unique_ptr<iglu::imgui::Session> imguiSession;\nigl::shell::InputDispatcher inputDispatcher;\n#endif // IGL_WITH_IGLU\n\n#if USE_TEXTURE_LOADER\nvoid loadKtxTexture(const igl::IDevice& device,\n                    igl::ICommandQueue& commandQueue,\n                    const std::string filename,\n                    std::shared_ptr<igl::ITexture>& texture,\n                    bool generateMipmaps) {\n  igl::Result result;\n  if (!filename.empty() && filename.back() != '2' && std::filesystem::exists(filename + \"2\")) {\n    loadKtxTexture(device, commandQueue, filename + \"2\", texture, generateMipmaps);\n    return;\n  }\n\n  const auto size = std::filesystem::file_size(filename);\n  FILE* file = std::fopen(filename.c_str(), \"rb\");\n  if (!IGL_DEBUG_VERIFY(file)) {\n    return;\n  }\n  std::unique_ptr<uint8_t[]> data = std::make_unique<uint8_t[]>(size);\n\n  std::fread(data.get(), 1, size, file);\n\n  std::fclose(file);\n\n  iglu::textureloader::ktx1::TextureLoaderFactory factory1;\n  iglu::textureloader::ktx2::TextureLoaderFactory factory2;\n  iglu::textureloader::ITextureLoaderFactory* factory =\n      filename.back() == '2' ? static_cast<iglu::textureloader::ITextureLoaderFactory*>(&factory2)\n                             : &factory1;\n\n  auto loader = factory->tryCreate(data.get(), size, &result);\n  if (!IGL_DEBUG_VERIFY(loader && result.isOk())) {\n    return;\n  }\n\n  if (!texture) {\n    IGL_DEBUG_ASSERT(loader->isSupported(device));\n    texture = loader->create(device, &result);\n    if (!IGL_DEBUG_VERIFY(texture && result.isOk())) {\n      return;\n    }\n  }\n  IGL_DEBUG_ASSERT(loader->isSupported(device, texture->getUsage()));\n  loader->upload(*texture, &result);\n  if (IGL_DEBUG_VERIFY(result.isOk())) {\n    if (generateMipmaps) {\n      texture->generateMipmap(commandQueue);\n    }\n  }\n}\n#endif // USE_TEXTURE_LOADER\n\nconst char* kCodeComputeTest = R\"(\nlayout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n\n#ifdef VULKAN\n// kBinding_StorageImages in VulkanContext.cpp\nlayout (set = 3, binding = 6, rgba8) uniform readonly  image2D kTextures2Din[];\nlayout (set = 3, binding = 6, rgba8) uniform writeonly image2D kTextures2Dout[];\n\nlayout(push_constant) uniform PushConstants {\n  uint textureId;\n} pc;\n#else\nlayout (binding = 2, rgba8) uniform readonly  image2D kTextures2Din;\nlayout (binding = 2, rgba8) uniform writeonly image2D kTextures2Dout;\n#endif\n\nvec4 imageLoad2D(ivec2 uv) {\n#ifdef VULKAN\n  return imageLoad(kTextures2Din[pc.textureId], uv);\n#else\n  return imageLoad(kTextures2Din, uv);\n#endif\n}\n\nvoid imageStore2D(ivec2 uv, vec4 data) {\n#ifdef VULKAN\n  imageStore(kTextures2Dout[pc.textureId], uv, data);\n#else\n  imageStore(kTextures2Dout, uv, data);\n#endif\n}\n\nvoid main() {\n   vec4 pixel = imageLoad2D(ivec2(gl_GlobalInvocationID.xy));\n   float luminance = dot(pixel, vec4(0.299, 0.587, 0.114, 0.0)); // https://www.w3.org/TR/AERT/#color-contrast\n   imageStore2D(ivec2(gl_GlobalInvocationID.xy), vec4(vec3(luminance), 1.0));\n}\n)\";\n\nconst char* kCodeFullscreenVS = R\"(\nlayout (location=0) out vec2 uv;\nvoid main() {\n  // generate a triangle covering the entire screen\n  uv = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2);\n#ifdef VULKAN\n  gl_Position = vec4(uv * vec2(2, -2) + vec2(-1, 1), 0.0, 1.0);\n#else\n  gl_Position = vec4(uv * vec2(2, 2) + vec2(-1, -1), 0.0, 1.0);\n#endif\n}\n)\";\n\nconst char* kCodeFullscreenFS = R\"(\nlayout (location=0) in vec2 uv;\nlayout (location=0) out vec4 out_FragColor;\n\n#ifdef VULKAN\nlayout(set = 0, binding = 0) uniform sampler2D texFullScreen;\n#else\nuniform sampler2D texFullScreen;\n#endif\n\nvoid main() {\n  out_FragColor = texture(texFullScreen, uv);\n}\n)\";\n\nconst char* kCodeVS = R\"(\nlayout (location=0) in vec3 pos;\nlayout (location=1) in vec3 normal;\nlayout (location=2) in vec2 uv;\n#ifdef VULKAN\nlayout (location=3) in uint mtlIndex;\n#else\nlayout (location=3) in float mtlIndex;\n#endif\n\nstruct UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n  mat4 light;\n  int bDrawNormals;\n  int bDebugLines;\n  vec2 padding;\n};\n\nstruct UniformsPerObject {\n  mat4 model;\n};\n\nstruct Material {\n   vec4 ambient;\n   vec4 diffuse;\n   int texAmbient;\n   int texDiffuse;\n   int texAlpha;\n   int padding;\n};\n\n#ifdef VULKAN\nlayout(set = 1, binding = 0, std140) uniform PerFrame {\n  UniformsPerFrame perFrame;\n};\n\nlayout(set = 1, binding = 1, std140) uniform PerObject {\n  UniformsPerObject perObject;\n};\n\nlayout(set = 1, binding = 2, std430) readonly buffer Materials {\n  Material mtl[];\n} mat;\n#else\nuniform PerFrame  {\n  UniformsPerFrame perFrame;\n};\nuniform PerObject {\n  UniformsPerObject perObject;\n};\nuniform MeshMaterials {\n  Material materials[132];\n};\n#endif\n\n// output\nstruct PerVertex {\n  vec3 normal;\n  vec2 uv;\n  vec4 shadowCoords;\n};\nlayout (location=0) out PerVertex vtx;\nlayout (location=5) flat out Material mtl;\n//\n\nvoid main() {\n  mat4 proj = perFrame.proj;\n  mat4 view = perFrame.view;\n  mat4 model = perObject.model;\n  mat4 light = perFrame.light;\n#ifdef VULKAN\n  mtl = mat.mtl[uint(mtlIndex)];\n#else\n  mtl = materials[int(mtlIndex)];\n#endif\n  gl_Position = proj * view * model * vec4(pos, 1.0);\n\n  // Compute the normal in world-space\n  mat3 norm_matrix = transpose(inverse(mat3(model)));\n  vtx.normal = normalize(norm_matrix * normal);\n  vtx.uv = uv;\n  vtx.shadowCoords = light * model * vec4(pos, 1.0);\n}\n)\";\n\nconst char* kCodeVS_Wireframe = R\"(\nlayout (location=0) in vec3 pos;\n\nstruct UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n};\n\nstruct UniformsPerObject {\n  mat4 model;\n};\n\n#ifdef VULKAN\nlayout(set = 1, binding = 0, std140)\n#endif\nuniform PerFrame {\n  UniformsPerFrame perFrame;\n};\n#ifdef VULKAN\nlayout(set = 1, binding = 1, std140)\n#endif\nuniform PerObject{\n  UniformsPerObject perObject;\n};\n\nvoid main() {\n  mat4 proj = perFrame.proj;\n  mat4 view = perFrame.view;\n  mat4 model = perObject.model;\n  gl_Position = proj * view * model * vec4(pos, 1.0);\n}\n)\";\n\nconst char* kCodeFS_Wireframe = R\"(\nlayout (location=0) out vec4 out_FragColor;\n\nvoid main() {\n  out_FragColor = vec4(1.0);\n};\n)\";\n\nconst char* kCodeFS = R\"(\nstruct UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n  mat4 light;\n  int bDrawNormals;\n  int bDebugLines;\n  vec2 padding;\n};\n#ifdef VULKAN\nlayout(set = 1, binding = 0, std140)\n#endif\nuniform PerFrame {\n  UniformsPerFrame perFrame;\n};\n\nstruct Material {\n  vec4 ambient;\n  vec4 diffuse;\n  int texAmbient;\n  int texDiffuse;\n  int texAlpha;\n  int padding;\n};\nstruct PerVertex {\n  vec3 normal;\n  vec2 uv;\n  vec4 shadowCoords;\n};\n\nlayout (location=0) in PerVertex vtx;\nlayout (location=5) flat in Material mtl;\n\nlayout (location=0) out vec4 out_FragColor;\n\n#ifdef VULKAN\nlayout(set = 0, binding = 0) uniform sampler2DShadow texShadow;\nlayout(set = 0, binding = 4) uniform samplerCube texSkyboxIrradiance;\n\nvec4 textureBindless2D(uint textureid, vec2 uv) {\n  return texture(sampler2D(kTextures2D[textureid], kSamplers[1]), uv);\n}\n#else\n  layout(binding = 0) uniform sampler2D texShadow;\n  layout(binding = 1) uniform sampler2D texAmbient;\n  layout(binding = 2) uniform sampler2D texDiffuse;\n  layout(binding = 3) uniform sampler2D texAlpha;\n  layout(binding = 4) uniform samplerCube texSkyboxIrradiance;\n#endif // VULKAN\n\nfloat PCF3(vec3 uvw) {\n  float size = 1.0 / float( textureSize(texShadow, 0).x );\n  float shadow = 0.0;\n  for (int v=-1; v<=+1; v++)\n    for (int u=-1; u<=+1; u++)\n#ifdef VULKAN\n      shadow += texture(texShadow, uvw + size * vec3(u, v, 0));\n#else\n      shadow += (uvw.z <= texture(texShadow, uvw.xy + size * vec2(u, v) ).r) ? 1.0 : 0.0;\n#endif\n  return shadow / 9;\n}\n\nfloat shadow(vec4 s) {\n  s = s / s.w;\n  if (s.z > -1.0 && s.z < 1.0) {\n    float depthBias = -0.00005;\n#ifdef VULKAN\n    s.y = 1.0 - s.y;\n#endif\n    float shadowSample = PCF3(vec3(s.x, s.y, s.z + depthBias));\n    return mix(0.3, 1.0, shadowSample);\n  }\n  return 1.0;\n}\n\nvoid main() {\n#ifdef VULKAN\n  vec4 alpha = textureBindless2D(mtl.texAlpha, vtx.uv);\n  if (mtl.texAlpha > 0 && alpha.r < 0.5)\n    discard;\n  vec4 Ka = mtl.ambient * textureBindless2D(mtl.texAmbient, vtx.uv);\n  vec4 Kd = mtl.diffuse * textureBindless2D(mtl.texDiffuse, vtx.uv);\n#else\n  vec4 alpha = texture(texAlpha, vtx.uv);\n  // check it is not a dummy 1x1 texture\n  if (textureSize(texAlpha, 0).x > 1 && alpha.r < 0.5)\n    discard;\n  vec4 Ka = mtl.ambient * texture(texAmbient, vtx.uv);\n  vec4 Kd = mtl.diffuse * texture(texDiffuse, vtx.uv);\n#endif\n  bool drawNormals = perFrame.bDrawNormals > 0;\n  if (Kd.a < 0.5)\n    discard;\n  vec3 n = normalize(vtx.normal);\n  float NdotL1 = clamp(dot(n, normalize(vec3(-1, 1,+1))), 0.0, 1.0);\n  float NdotL2 = clamp(dot(n, normalize(vec3(-1, 1,-1))), 0.0, 1.0);\n  float NdotL = 0.5 * (NdotL1+NdotL2);\n  // IBL diffuse\n  const vec4 f0 = vec4(0.04);\n  vec4 diffuse = texture(texSkyboxIrradiance, n) * Kd * (vec4(1.0) - f0);\n  out_FragColor = drawNormals ?\n    vec4(0.5 * (n+vec3(1.0)), 1.0) :\n    Ka + diffuse * shadow(vtx.shadowCoords);\n};\n)\";\n\nconst char* kShadowVS = R\"(\nlayout (location=0) in vec3 pos;\n\nstruct UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n  mat4 light;\n  int bDrawNormals;\n  int bDebugLines;\n  vec2 padding;\n};\n\nstruct UniformsPerObject {\n  mat4 model;\n};\n\n#ifdef VULKAN\nlayout(set = 1, binding = 0, std140) uniform PerFrame {\n  UniformsPerFrame perFrame;\n};\nlayout(set = 1, binding = 1, std140) uniform PerObject {\n  UniformsPerObject perObject;\n};\n#else\nuniform ShadowFrameUniforms {\n   UniformsPerFrame perFrame;\n};\nuniform ShadowObjectUniforms {\n  UniformsPerObject perObject;\n};\n\n#endif\nvoid main() {\n  mat4 proj = perFrame.proj;\n  mat4 view = perFrame.view;\n  mat4 model = perObject.model;\n  gl_Position = proj * view * model * vec4(pos, 1.0);\n}\n)\";\n\nconst char* kShadowFS = R\"(\nvoid main() {\n};\n)\";\n\nconst char* kSkyboxVS = R\"(\nlayout (location=0) out vec3 textureCoords;\n\nconst vec3 positions[8] = vec3[8](\n\tvec3(-1.0,-1.0, 1.0), vec3( 1.0,-1.0, 1.0), vec3( 1.0, 1.0, 1.0), vec3(-1.0, 1.0, 1.0),\n\tvec3(-1.0,-1.0,-1.0), vec3( 1.0,-1.0,-1.0), vec3( 1.0, 1.0,-1.0), vec3(-1.0, 1.0,-1.0)\n);\n\nconst int indices[36] = int[36](\n\t0, 1, 2, 2, 3, 0, 1, 5, 6, 6, 2, 1, 7, 6, 5, 5, 4, 7, 4, 0, 3, 3, 7, 4, 4, 5, 1, 1, 0, 4, 3, 2, 6, 6, 7, 3\n);\n\nstruct UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n  mat4 light;\n  int bDrawNormals;\n  int bDebugLines;\n  vec2 padding;\n};\n\n#ifdef VULKAN\nlayout(set = 1, binding = 0, std140) uniform PerFrame {\n  UniformsPerFrame perFrame;\n};\n#else\nuniform SkyboxFrameUniforms {\n  UniformsPerFrame perFrame;\n};\n\n#endif\nvoid main() {\n  mat4 proj = perFrame.proj;\n  mat4 view = perFrame.view;\n  // discard translation\n  view = mat4(view[0], view[1], view[2], vec4(0, 0, 0, 1));\n  mat4 transform = proj * view;\n  vec3 pos = positions[indices[gl_VertexIndex]];\n  gl_Position = (transform * vec4(pos, 1.0)).xyww;\n\n  // skybox\n  textureCoords = pos;\n#ifdef VULKAN\n  // Draws the skybox edges. One color per edge\n  const bool drawDebugLines = perFrame.bDebugLines > 0;\n  if (drawDebugLines) {\n      const int[12][2] edgeIndices = {\n          {0,1}, {1,2}, {2,3}, {3,0}, {4,5}, {5,6}, {6,7}, {7,4}, {0,4}, {1,5}, {2,6}, {3,7}\n      };\n\n      const vec4 edgeColors[12] = vec4[12](\n        vec4(  1,   0,   0, 1), vec4(  1,   1,   0, 1), vec4(  0,   1,   0, 1), vec4(  0,   1, 1, 1),\n        vec4(  1,   0,   1, 1), vec4(  0,   0,   1, 1), vec4(  1,   1,   1, 1), vec4(  0,   0, 0, 1),\n        vec4(0.5, 0.7, 0.8, 1), vec4(0.4, 0.4, 0.4, 1), vec4(  1, 0.3, 0.6, 1), vec4(  1, 0.8, 0, 1)\n      );\n\n      uint index = gl_VertexIndex / 3;\n      drawLine(positions[edgeIndices[index][0]],\n                positions[edgeIndices[index][1]],\n                edgeColors[index],\n                edgeColors[index],\n                transform);\n  }\n#endif\n}\n\n)\";\nconst char* kSkyboxFS = R\"(\nlayout (location=0) in vec3 textureCoords;\nlayout (location=0) out vec4 out_FragColor;\n\n#ifdef VULKAN\nlayout(set = 0, binding = 1) uniform samplerCube texSkybox;\n#else\nuniform samplerCube texSkybox;\n#endif\n\nvoid main() {\n  out_FragColor = texture(texSkybox, textureCoords);\n}\n)\";\n\n// @fb-only\n// @fb-only\n// @fb-only\n\nusing namespace igl;\nusing glm::mat4;\nusing glm::vec2;\nusing glm::vec3;\nusing glm::vec4;\n\nint width_ = 1920;\nint height_ = 1080;\nigl::FPSCounter fps_;\n\nconstexpr uint32_t kNumBufferedFrames = 3;\n\nstd::unique_ptr<IDevice> device_;\nstd::shared_ptr<ICommandQueue> commandQueue_;\nRenderPassDesc renderPassOffscreen_;\nRenderPassDesc renderPassMain_;\nRenderPassDesc renderPassShadow_;\nstd::shared_ptr<IFramebuffer> fbMain_; // swapchain\nstd::shared_ptr<IFramebuffer> fbOffscreen_;\nstd::shared_ptr<IFramebuffer> fbShadowMap_;\nstd::shared_ptr<IComputePipelineState> computePipelineState_Grayscale_;\nstd::shared_ptr<IRenderPipelineState> renderPipelineState_Mesh_;\nstd::shared_ptr<IRenderPipelineState> renderPipelineState_MeshWireframe_;\nstd::shared_ptr<IRenderPipelineState> renderPipelineState_Shadow_;\nstd::shared_ptr<IRenderPipelineState> renderPipelineState_Skybox_;\nstd::shared_ptr<IRenderPipelineState> renderPipelineState_Fullscreen_;\nstd::shared_ptr<IBuffer> vb0_, ib0_; // buffers for vertices and indices\nstd::shared_ptr<IBuffer> sbMaterials_; // storage buffer for materials\nstd::vector<std::shared_ptr<IBuffer>> ubPerFrame_, ubPerFrameShadow_, ubPerObject_;\nstd::shared_ptr<IVertexInputState> vertexInput0_;\nstd::shared_ptr<IVertexInputState> vertexInputShadows_;\nstd::shared_ptr<IDepthStencilState> depthStencilState_;\nstd::shared_ptr<IDepthStencilState> depthStencilStateLEqual_;\nstd::shared_ptr<ISamplerState> sampler;\nstd::shared_ptr<ISamplerState> samplerShadow;\nstd::shared_ptr<ITexture> textureDummyWhite_;\n#if USE_OPENGL_BACKEND\nstd::shared_ptr<ITexture> textureDummyBlack_;\n#endif // USE_OPENGL_BACKEND\nstd::shared_ptr<ITexture> skyboxTextureReference_;\nstd::shared_ptr<ITexture> skyboxTextureIrradiance_;\n\n// scene navigation\nCameraPositioner_FirstPerson positioner_(vec3(-100, 40, -47), vec3(0, 35, 0), vec3(0, 1, 0));\nCamera camera(positioner_);\nglm::vec2 mousePos_ = glm::vec2(0.0f);\nbool mousePressed_ = false;\nbool enableComputePass_ = false;\nbool enableWireframe_ = false;\n\nbool isShadowMapDirty_ = true;\n\nstruct VertexData {\n  vec3 position;\n  uint32_t normal{}; // Int_2_10_10_10_REV\n  uint32_t uv{}; // hvec2\n  uint32_t mtlIndex{};\n};\n\nstd::vector<VertexData> vertexData_;\nstd::vector<uint32_t> indexData_;\nstd::vector<uint32_t> shapeVertexCnt_;\n\nstruct UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n  mat4 light;\n  int bDrawNormals = 0;\n  int bDebugLines = 0;\n  vec2 padding;\n} perFrame_;\n\nstruct UniformsPerObject {\n  mat4 model;\n};\n#define MAX_MATERIAL_NAME 128\n\nstruct CachedMaterial {\n  char name[MAX_MATERIAL_NAME] = {};\n  vec3 ambient = vec3(0.0f);\n  vec3 diffuse = vec3(0.0f);\n  char ambient_texname[MAX_MATERIAL_NAME] = {};\n  char diffuse_texname[MAX_MATERIAL_NAME] = {};\n  char alpha_texname[MAX_MATERIAL_NAME] = {};\n};\n\n// this goes into our GLSL shaders\nstruct GPUMaterial {\n  vec4 ambient = vec4(0.0f);\n  vec4 diffuse = vec4(0.0f);\n  uint32_t texAmbient = 0;\n  uint32_t texDiffuse = 0;\n  uint32_t texAlpha = 0;\n  uint32_t padding[1];\n};\n\nstatic_assert(sizeof(GPUMaterial) % 16 == 0);\n\nstd::vector<CachedMaterial> cachedMaterials_;\nstd::vector<GPUMaterial> materials_;\n\nstruct MaterialTextures {\n  std::shared_ptr<ITexture> ambient;\n  std::shared_ptr<ITexture> diffuse;\n  std::shared_ptr<ITexture> alpha;\n};\n\nstd::vector<MaterialTextures> textures_; // same indexing as in materials_\n\nstruct LoadedImage {\n  int w = 0;\n  int h = 0;\n  uint8_t* pixels = nullptr;\n  int channels = 0;\n  std::string debugName;\n  std::string compressedFileName;\n};\n\nstruct LoadedMaterial {\n  size_t idx = 0;\n  LoadedImage ambient;\n  LoadedImage diffuse;\n  LoadedImage alpha;\n};\n\n// file name -> LoadedImage\nstd::mutex imagesCacheMutex_;\nstd::unordered_map<std::string, LoadedImage> imagesCache_; // accessible only from the loader thread\n                                                           // pool (multiple threads)\nstd::unordered_map<std::string, std::shared_ptr<ITexture>> texturesCache_; // accessible only from\n                                                                           // the main thread\nstd::vector<LoadedMaterial> loadedMaterials_;\nstd::mutex loadedMaterialsMutex_;\nstd::atomic<bool> loaderShouldExit_ = false;\nstd::atomic<uint32_t> remainingMaterialsToLoad_ = 0;\nstd::unique_ptr<tf::Executor> loaderPool_ =\n    std::make_unique<tf::Executor>(std::max(2u, std::thread::hardware_concurrency() / 2));\n\nstd::string convertFileName(std::string fileName) {\n  // generate compressed filename\n  const std::string compressedPathPrefix = contentRootFolder;\n\n  if (fileName.find(compressedPathPrefix) == 0) {\n    // remove leading path\n    fileName = fileName.substr(compressedPathPrefix.length());\n  }\n\n  std::replace(fileName.begin(), fileName.end(), ':', '_');\n  std::replace(fileName.begin(), fileName.end(), '.', '_');\n  std::replace(fileName.begin(), fileName.end(), '/', '_');\n  std::replace(fileName.begin(), fileName.end(), '\\\\', '_');\n\n  // return absolute compressed filename\n  return compressedPathPrefix + fileName + \".ktx2\";\n}\n[[maybe_unused]] void stringReplaceAll(std::string& s,\n                                       const std::string& searchString,\n                                       const std::string& replaceString) {\n  size_t pos = 0;\n  while ((pos = s.find(searchString, pos)) != std::string::npos) {\n    s.replace(pos, searchString.length(), replaceString);\n  }\n}\n\nGLFWwindow* initIGL(bool isHeadless, bool enableVulkanValidationLayers) {\n  if (!glfwInit()) {\n    printf(\"glfwInit() failed\");\n    return nullptr;\n  }\n\n#if USE_OPENGL_BACKEND\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 6);\n  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);\n  glfwWindowHint(GLFW_VISIBLE, true);\n  glfwWindowHint(GLFW_DOUBLEBUFFER, true);\n  glfwWindowHint(GLFW_SRGB_CAPABLE, true);\n  glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API);\n  const char* title = \"OpenGL Mesh\";\n#else\n  glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);\n  const char* title = \"Vulkan Mesh\";\n#endif\n  glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);\n\n  GLFWwindow* window = nullptr;\n\n  if (!isHeadless) {\n    // render full screen without overlapping taskbar\n    GLFWmonitor* monitor = glfwGetPrimaryMonitor();\n    const GLFWvidmode* mode = glfwGetVideoMode(monitor);\n\n    int posX = 0;\n    int posY = 0;\n    int width = mode->width;\n    int height = mode->height;\n\n    glfwGetMonitorWorkarea(monitor, &posX, &posY, &width, &height);\n\n    window = glfwCreateWindow(width, height, title, nullptr, nullptr);\n\n    glfwSetWindowPos(window, posX, posY);\n\n    glfwSetErrorCallback([](int error, const char* description) {\n      printf(\"GLFW Error (%i): %s\\n\", error, description);\n    });\n\n    glfwSetCursorPosCallback(window, [](auto* window, double x, double y) {\n      int fbWidth = 0, fbHeight = 0;\n      glfwGetFramebufferSize(window, &fbWidth, &fbHeight);\n      mousePos_ = vec2(x / fbWidth, 1.0f - y / fbHeight);\n#if IGL_WITH_IGLU\n      inputDispatcher.queueEvent(igl::shell::MouseMotionEvent(x, y, 0, 0));\n#endif // IGL_WITH_IGLU\n    });\n\n    glfwSetMouseButtonCallback(window, [](auto* window, int button, int action, int /*mods*/) {\n#if IGL_WITH_IGLU\n      if (!ImGui::GetIO().WantCaptureMouse) {\n#endif // IGL_WITH_IGLU\n        if (button == GLFW_MOUSE_BUTTON_LEFT) {\n          mousePressed_ = (action == GLFW_PRESS);\n        }\n#if IGL_WITH_IGLU\n      } else {\n        // release the mouse\n        mousePressed_ = false;\n      }\n      double xpos = NAN, ypos = NAN;\n      glfwGetCursorPos(window, &xpos, &ypos);\n      using igl::shell::MouseButton;\n      const MouseButton iglButton =\n          (button == GLFW_MOUSE_BUTTON_LEFT)\n              ? MouseButton::Left\n              : (button == GLFW_MOUSE_BUTTON_RIGHT ? MouseButton::Right : MouseButton::Middle);\n      inputDispatcher.queueEvent(\n          igl::shell::MouseButtonEvent(iglButton, action == GLFW_PRESS, (float)xpos, (float)ypos));\n#endif // IGL_WITH_IGLU\n    });\n\n    glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int, int action, int mods) {\n      const bool pressed = action != GLFW_RELEASE;\n      if (key == GLFW_KEY_ESCAPE && pressed) {\n        glfwSetWindowShouldClose(window, GLFW_TRUE);\n      }\n      if (key == GLFW_KEY_N && pressed) {\n        perFrame_.bDrawNormals = (perFrame_.bDrawNormals + 1) % 2;\n      }\n      if (key == GLFW_KEY_C && pressed) {\n        enableComputePass_ = !enableComputePass_;\n      }\n      if (key == GLFW_KEY_T && pressed) {\n        enableWireframe_ = !enableWireframe_;\n      }\n      if (key == GLFW_KEY_ESCAPE && pressed) {\n        glfwSetWindowShouldClose(window, GLFW_TRUE);\n      }\n      if (key == GLFW_KEY_W) {\n        positioner_.movement_.forward_ = pressed;\n      }\n      if (key == GLFW_KEY_S) {\n        positioner_.movement_.backward_ = pressed;\n      }\n      if (key == GLFW_KEY_A) {\n        positioner_.movement_.left_ = pressed;\n      }\n      if (key == GLFW_KEY_D) {\n        positioner_.movement_.right_ = pressed;\n      }\n      if (key == GLFW_KEY_1) {\n        positioner_.movement_.up_ = pressed;\n      }\n      if (key == GLFW_KEY_2) {\n        positioner_.movement_.down_ = pressed;\n      }\n      if (mods & GLFW_MOD_SHIFT) {\n        positioner_.movement_.fastSpeed_ = pressed;\n      }\n      if (key == GLFW_KEY_LEFT_SHIFT || key == GLFW_KEY_RIGHT_SHIFT) {\n        positioner_.movement_.fastSpeed_ = pressed;\n      }\n      if (key == GLFW_KEY_SPACE) {\n        positioner_.setUpVector(vec3(0.0f, 1.0f, 0.0f));\n      }\n      if (key == GLFW_KEY_L && pressed) {\n        perFrame_.bDebugLines = (perFrame_.bDebugLines + 1) % 2;\n      }\n    });\n\n    glfwGetWindowSize(window, &width_, &height_);\n  }\n\n  // create a device\n  {\n    {\n      const Result result;\n#if USE_OPENGL_BACKEND\n#if IGL_PLATFORM_WINDOWS\n      auto ctx = std::make_unique<igl::opengl::wgl::Context>(GetDC(glfwGetWin32Window(window_)),\n                                                             glfwGetWGLContext(window_));\n      device_ = std::make_unique<igl::opengl::wgl::Device>(std::move(ctx));\n#elif IGL_PLATFORM_LINUX\n      auto ctx = std::make_unique<igl::opengl::glx::Context>(\n          nullptr,\n          glfwGetX11Display(),\n          (igl::opengl::glx::GLXDrawable)glfwGetX11Window(window_),\n          (igl::opengl::glx::GLXContext)glfwGetGLXContext(window_));\n      device_ = std::make_unique<igl::opengl::glx::Device>(std::move(ctx));\n\n#endif\n#else\n      const igl::vulkan::VulkanContextConfig cfg = {\n          .terminateOnValidationError = false,\n          .enableValidation = enableVulkanValidationLayers,\n          .enableDescriptorIndexing = true,\n          .headless = isHeadless,\n      };\n#if defined(_XLESS_GLFW_)\n      auto ctx = vulkan::HWDevice::createContext(cfg, nullptr);\n#elif defined(_WIN32)\n      auto ctx = vulkan::HWDevice::createContext(\n          cfg, window ? (void*)glfwGetWin32Window(window) : nullptr);\n\n#elif defined(__APPLE__)\n      auto ctx = vulkan::HWDevice::createContext(\n          cfg, window ? (void*)glfwGetCocoaWindow(window) : nullptr);\n\n#elif defined(__linux__)\n      auto ctx = vulkan::HWDevice::createContext(\n          cfg, window ? (void*)glfwGetX11Window(window) : nullptr, (void*)glfwGetX11Display());\n\n#else\n#error Unsupported OS\n#endif\n      const HWDeviceType hardwareType = kPreferIntegratedGPU ? HWDeviceType::IntegratedGpu\n                                                             : HWDeviceType::DiscreteGpu;\n      std::vector<HWDeviceDesc> devices =\n          vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(hardwareType), nullptr);\n      if (devices.empty()) {\n        const HWDeviceType fallbackHardwareType =\n            !kPreferIntegratedGPU ? HWDeviceType::IntegratedGpu : HWDeviceType::DiscreteGpu;\n        devices =\n            vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(fallbackHardwareType), nullptr);\n      }\n      if (devices.empty() || cfg.headless) {\n        // LavaPipe etc\n        devices = vulkan::HWDevice::queryDevices(\n            *ctx, HWDeviceQueryDesc(HWDeviceType::SoftwareGpu), nullptr);\n      }\n      IGL_DEBUG_ASSERT(!devices.empty(), \"GPU is not found\");\n      device_ =\n          vulkan::HWDevice::create(std::move(ctx), devices[0], (uint32_t)width_, (uint32_t)height_);\n#endif\n      IGL_DEBUG_ASSERT(device_);\n    }\n  }\n\n  return window;\n}\n\nnamespace {\nvoid normalizeName(std::string& name) {\n#if defined(__linux__)\n  std::replace(name.begin(), name.end(), '\\\\', '/');\n#endif\n}\n} // namespace\n\nbool loadAndCache(const char* cacheFileName) {\n  // load 3D model and cache it\n  IGL_LOG_INFO(\"Loading `exterior.obj`... It can take a while in debug builds...\\n\");\n\n  tinyobj::attrib_t attrib;\n  std::vector<tinyobj::shape_t> shapes;\n  std::vector<tinyobj::material_t> materials;\n\n  std::string warn;\n  std::string err;\n\n  const bool ret =\n      tinyobj::LoadObj(&attrib,\n                       &shapes,\n                       &materials,\n                       &warn,\n                       &err,\n                       (contentRootFolder + \"src/bistro/Exterior/exterior.obj\").c_str(),\n                       (contentRootFolder + \"src/bistro/Exterior/\").c_str());\n\n  if (!IGL_DEBUG_VERIFY(ret)) {\n    IGL_DEBUG_ASSERT(ret, \"Did you read the tutorial at the top of this file?\");\n    return false;\n  }\n\n  // loop over shapes as described in https://github.com/tinyobjloader/tinyobjloader\n  std::vector<std::vector<VertexData>> resplitShapes;\n  std::vector<VertexData> shapeData;\n  resplitShapes.resize(materials.size());\n  int prevIndex = shapes[0].mesh.material_ids[0];\n  for (auto& shape : shapes) {\n    size_t index_offset = 0;\n    for (size_t f = 0; f < shape.mesh.num_face_vertices.size(); f++) {\n      IGL_DEBUG_ASSERT(shape.mesh.num_face_vertices[f] == 3);\n\n      for (size_t v = 0; v < 3; v++) {\n        const tinyobj::index_t idx = shape.mesh.indices[index_offset + v];\n\n        const vec3 pos(attrib.vertices[3 * size_t(idx.vertex_index) + 0],\n                       attrib.vertices[3 * size_t(idx.vertex_index) + 1],\n                       attrib.vertices[3 * size_t(idx.vertex_index) + 2]);\n\n        const bool hasNormal = (idx.normal_index >= 0);\n\n        const vec3 normal = hasNormal ? vec3(attrib.normals[3 * size_t(idx.normal_index) + 0],\n                                             attrib.normals[3 * size_t(idx.normal_index) + 1],\n                                             attrib.normals[3 * size_t(idx.normal_index) + 2])\n                                      : vec3(0, 0, 1);\n\n        const bool hasUV = (idx.texcoord_index >= 0);\n\n        const vec2 uv = hasUV ? vec2(attrib.texcoords[2 * size_t(idx.texcoord_index) + 0],\n                                     attrib.texcoords[2 * size_t(idx.texcoord_index) + 1])\n                              : vec2(0);\n\n        const int mtlIndex = shape.mesh.material_ids[f];\n\n        IGL_DEBUG_ASSERT(mtlIndex >= 0 && mtlIndex < materials.size());\n\n        if (prevIndex != mtlIndex) {\n          resplitShapes[prevIndex].insert(\n              resplitShapes[prevIndex].end(), shapeData.begin(), shapeData.end());\n          shapeData.clear();\n          prevIndex = mtlIndex;\n        }\n        vertexData_.push_back({pos,\n                               glm::packSnorm3x10_1x2(vec4(normal, 0)),\n                               glm::packHalf2x16(uv),\n                               (uint32_t)mtlIndex});\n        shapeData.push_back({pos,\n                             glm::packSnorm3x10_1x2(vec4(normal, 0)),\n                             glm::packHalf2x16(uv),\n                             (uint32_t)mtlIndex});\n      }\n      index_offset += 3;\n    }\n  }\n  resplitShapes[prevIndex].insert(\n      resplitShapes[prevIndex].end(), shapeData.begin(), shapeData.end());\n  shapeData.clear();\n  for (auto shape : resplitShapes) {\n    shapeData.insert(shapeData.end(), shape.begin(), shape.end());\n    shapeVertexCnt_.emplace_back((uint32_t)shape.size());\n  }\n\n  // repack the mesh as described in https://github.com/zeux/meshoptimizer\n  {\n    // 1. Generate an index buffer\n    const size_t indexCount = vertexData_.size();\n    std::vector<uint32_t> remap(indexCount);\n    const size_t vertexCount = meshopt_generateVertexRemap(\n        remap.data(), nullptr, indexCount, vertexData_.data(), indexCount, sizeof(VertexData));\n    // 2. Remap vertices\n    std::vector<VertexData> remappedVertices;\n    indexData_.resize(indexCount);\n    remappedVertices.resize(vertexCount);\n    meshopt_remapIndexBuffer(indexData_.data(), nullptr, indexCount, remap.data());\n    meshopt_remapVertexBuffer(\n        remappedVertices.data(), vertexData_.data(), indexCount, sizeof(VertexData), remap.data());\n    vertexData_ = remappedVertices;\n    // 3. Optimize for the GPU vertex cache reuse and overdraw\n    meshopt_optimizeVertexCache(indexData_.data(), indexData_.data(), indexCount, vertexCount);\n    meshopt_optimizeOverdraw(indexData_.data(),\n                             indexData_.data(),\n                             indexCount,\n                             &vertexData_[0].position.x,\n                             vertexCount,\n                             sizeof(VertexData),\n                             1.05f);\n    meshopt_optimizeVertexFetch(vertexData_.data(),\n                                indexData_.data(),\n                                indexCount,\n                                vertexData_.data(),\n                                vertexCount,\n                                sizeof(VertexData));\n  }\n\n  // loop over materials\n  for (auto& m : materials) {\n    CachedMaterial mtl;\n    mtl.ambient = vec3(m.ambient[0], m.ambient[1], m.ambient[2]);\n    mtl.diffuse = vec3(m.diffuse[0], m.diffuse[1], m.diffuse[2]);\n    IGL_DEBUG_ASSERT(m.name.length() < MAX_MATERIAL_NAME);\n    IGL_DEBUG_ASSERT(m.ambient_texname.length() < MAX_MATERIAL_NAME);\n    IGL_DEBUG_ASSERT(m.diffuse_texname.length() < MAX_MATERIAL_NAME);\n    IGL_DEBUG_ASSERT(m.alpha_texname.length() < MAX_MATERIAL_NAME);\n    strcat(mtl.name, m.name.c_str());\n    normalizeName(m.ambient_texname);\n    normalizeName(m.diffuse_texname);\n    normalizeName(m.alpha_texname);\n    strcat(mtl.ambient_texname, m.ambient_texname.c_str());\n    strcat(mtl.diffuse_texname, m.diffuse_texname.c_str());\n    strcat(mtl.alpha_texname, m.alpha_texname.c_str());\n    cachedMaterials_.push_back(mtl);\n  }\n\n  IGL_LOG_INFO(\"Caching mesh...\\n\");\n\n  FILE* cacheFile = fopen(cacheFileName, \"wb\");\n  if (!cacheFile) {\n    return false;\n  }\n  const uint32_t numMaterials = (uint32_t)cachedMaterials_.size();\n  const uint32_t numVertices = (uint32_t)vertexData_.size();\n  const uint32_t numIndices = (uint32_t)indexData_.size();\n  fwrite(&kMeshCacheVersion, sizeof(kMeshCacheVersion), 1, cacheFile);\n  fwrite(&numMaterials, sizeof(numMaterials), 1, cacheFile);\n  fwrite(&numVertices, sizeof(numVertices), 1, cacheFile);\n  fwrite(&numIndices, sizeof(numIndices), 1, cacheFile);\n  fwrite(cachedMaterials_.data(), sizeof(CachedMaterial), numMaterials, cacheFile);\n  fwrite(vertexData_.data(), sizeof(VertexData), numVertices, cacheFile);\n  fwrite(indexData_.data(), sizeof(uint32_t), numIndices, cacheFile);\n  const uint32_t numShapes = (uint32_t)shapeData.size();\n  fwrite(&numShapes, sizeof(numShapes), 1, cacheFile);\n  fwrite(shapeData.data(), sizeof(VertexData), numShapes, cacheFile);\n  const uint32_t numShapeVertices = (uint32_t)shapeVertexCnt_.size();\n  fwrite(&numShapeVertices, sizeof(numShapeVertices), 1, cacheFile);\n  fwrite(shapeVertexCnt_.data(), sizeof(uint32_t), numShapeVertices, cacheFile);\n#if USE_OPENGL_BACKEND\n  vertexData_.clear();\n  vertexData_.assign(shapeData.begin(), shapeData.end());\n#endif\n  return fclose(cacheFile) == 0;\n}\n\nbool loadFromCache(const char* cacheFileName) {\n  FILE* cacheFile = fopen(cacheFileName, \"rb\");\n  IGL_SCOPE_EXIT {\n    if (cacheFile) {\n      fclose(cacheFile);\n    }\n  };\n  if (!cacheFile) {\n    return false;\n  }\n#define CHECK_READ(expected, read) \\\n  if ((read) != (expected)) {      \\\n    return false;                  \\\n  }\n  uint32_t versionProbe = 0;\n  CHECK_READ(1, fread(&versionProbe, sizeof(versionProbe), 1, cacheFile));\n  if (versionProbe != kMeshCacheVersion) {\n    IGL_LOG_INFO(\"Cache file has wrong version id\\n\");\n    return false;\n  }\n  uint32_t numMaterials = 0;\n  uint32_t numVertices = 0;\n  uint32_t numIndices = 0;\n  CHECK_READ(1, fread(&numMaterials, sizeof(numMaterials), 1, cacheFile));\n  CHECK_READ(1, fread(&numVertices, sizeof(numVertices), 1, cacheFile));\n  CHECK_READ(1, fread(&numIndices, sizeof(numIndices), 1, cacheFile));\n  cachedMaterials_.resize(numMaterials);\n  vertexData_.resize(numVertices);\n  indexData_.resize(numIndices);\n  CHECK_READ(numMaterials,\n             fread(cachedMaterials_.data(), sizeof(CachedMaterial), numMaterials, cacheFile));\n#if !USE_OPENGL_BACKEND\n  CHECK_READ(numVertices, fread(vertexData_.data(), sizeof(VertexData), numVertices, cacheFile));\n  CHECK_READ(numIndices, fread(indexData_.data(), sizeof(uint32_t), numIndices, cacheFile));\n#else\n  fseek(cacheFile, sizeof(VertexData) * numVertices + sizeof(uint32_t) * numIndices, SEEK_CUR);\n  CHECK_READ(1, fread(&numVertices, sizeof(numVertices), 1, cacheFile));\n  vertexData_.resize(numVertices);\n  CHECK_READ(numVertices, fread(vertexData_.data(), sizeof(VertexData), numVertices, cacheFile));\n  uint32_t numShapeVertices = 0;\n  CHECK_READ(1, fread(&numShapeVertices, sizeof(numShapeVertices), 1, cacheFile));\n  shapeVertexCnt_.resize(numShapeVertices);\n  CHECK_READ(numShapeVertices,\n             fread(shapeVertexCnt_.data(), sizeof(uint32_t), numShapeVertices, cacheFile));\n#endif\n#undef CHECK_READ\n  return true;\n}\n\nvoid initModel(int numSamplesMSAA) {\n// @fb-only\n  // @fb-only\n      // @fb-only\n// @fb-only\n\n  {\n    const TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::RGBA_UNorm8,\n                                                1,\n                                                1,\n                                                TextureDesc::TextureUsageBits::Sampled,\n                                                \"dummy 1x1 (white)\");\n    textureDummyWhite_ = device_->createTexture(desc, nullptr);\n    const uint32_t pixel = 0xFFFFFFFF;\n    textureDummyWhite_->upload(TextureRangeDesc::new2D(0, 0, 1, 1), &pixel);\n  }\n\n  {\n#if USE_OPENGL_BACKEND\n    {\n      const TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::RGBA_UNorm8,\n                                                  1,\n                                                  1,\n                                                  TextureDesc::TextureUsageBits::Sampled,\n                                                  \"dummy 1x1 (black)\");\n      textureDummyBlack_ = device_->createTexture(desc, nullptr);\n      const uint32_t pixel = 0xFF000000;\n      textureDummyBlack_->upload(TextureRangeDesc::new2D(0, 0, 1, 1), &pixel);\n    }\n\n    const auto bufType = BufferDesc::BufferTypeBits::Uniform;\n    const auto hint = BufferDesc::BufferAPIHintBits::UniformBlock;\n#else\n    const auto bufType = BufferDesc::BufferTypeBits::Uniform;\n    const auto hint = 0;\n#endif\n    // create an Uniform buffers to store uniforms for 2 objects\n    for (uint32_t i = 0; i != kNumBufferedFrames; i++) {\n      ubPerFrame_.push_back(\n          device_->createBuffer(BufferDesc{bufType,\n                                           nullptr,\n                                           sizeof(UniformsPerFrame),\n                                           ResourceStorage::Shared,\n                                           hint,\n                                           \"uniforms (per frame) \" + std::to_string(i)},\n                                nullptr));\n      ubPerFrameShadow_.push_back(\n          device_->createBuffer(BufferDesc{bufType,\n                                           nullptr,\n                                           sizeof(UniformsPerFrame),\n                                           ResourceStorage::Shared,\n                                           hint,\n                                           \"uniforms (per frame shadow) \" + std::to_string(i)},\n                                nullptr));\n      ubPerObject_.push_back(\n          device_->createBuffer(BufferDesc{bufType,\n                                           nullptr,\n                                           sizeof(UniformsPerObject),\n                                           ResourceStorage::Shared,\n                                           hint,\n                                           \"uniforms (per object) \" + std::to_string(i)},\n                                nullptr));\n    }\n  }\n\n  {\n    const VertexInputStateDesc desc = {\n        .numAttributes = 4,\n        .attributes =\n            {\n                {\n                    .format = VertexAttributeFormat::Float3,\n                    .offset = offsetof(VertexData, position),\n                    .name = \"pos\",\n                    .location = 0,\n                },\n                {\n                    .format = VertexAttributeFormat::Int_2_10_10_10_REV,\n                    .offset = offsetof(VertexData, normal),\n                    .name = \"normal\",\n                    .location = 1,\n                },\n                {\n                    .format = VertexAttributeFormat::HalfFloat2,\n                    .offset = offsetof(VertexData, uv),\n                    .name = \"uv\",\n                    .location = 2,\n                },\n                {\n                    .format = VertexAttributeFormat::UInt1,\n                    .offset = offsetof(VertexData, mtlIndex),\n                    .name = \"mtlIndex\",\n                    .location = 3,\n                },\n            },\n        .numInputBindings = 1,\n        .inputBindings = {{.stride = sizeof(VertexData)}},\n    };\n    vertexInput0_ = device_->createVertexInputState(desc, nullptr);\n  }\n\n  {\n    const VertexInputStateDesc desc = {\n        .numAttributes = 1,\n        .attributes = {{\n            .format = VertexAttributeFormat::Float3,\n            .offset = offsetof(VertexData, position),\n            .name = \"pos\",\n            .location = 0,\n        }},\n        .numInputBindings = 1,\n        .inputBindings = {{.stride = sizeof(VertexData)}},\n    };\n    vertexInputShadows_ = device_->createVertexInputState(desc, nullptr);\n  }\n\n  depthStencilState_ = device_->createDepthStencilState(\n      {.compareFunction = igl::CompareFunction::Less, .isDepthWriteEnabled = true}, nullptr);\n\n  depthStencilStateLEqual_ = device_->createDepthStencilState(\n      {.compareFunction = igl::CompareFunction::LessEqual, .isDepthWriteEnabled = true}, nullptr);\n\n  {\n    igl::SamplerStateDesc desc = igl::SamplerStateDesc::newLinear();\n    desc.addressModeU = igl::SamplerAddressMode::Repeat;\n    desc.addressModeV = igl::SamplerAddressMode::Repeat;\n    desc.mipFilter = igl::SamplerMipFilter::Linear;\n    desc.debugName = \"Sampler: linear\";\n    sampler = device_->createSamplerState(desc, nullptr);\n\n    desc.addressModeU = igl::SamplerAddressMode::Clamp;\n    desc.addressModeV = igl::SamplerAddressMode::Clamp;\n    desc.mipFilter = igl::SamplerMipFilter::Disabled;\n    desc.debugName = \"Sampler: shadow\";\n    desc.depthCompareEnabled = true;\n    desc.depthCompareFunction = igl::CompareFunction::LessEqual;\n    samplerShadow = device_->createSamplerState(desc, nullptr);\n  }\n\n  commandQueue_ = device_->createCommandQueue({}, nullptr);\n\n  renderPassOffscreen_.colorAttachments.emplace_back();\n  renderPassOffscreen_.colorAttachments.back().loadAction = LoadAction::Clear;\n  renderPassOffscreen_.colorAttachments.back().storeAction =\n      numSamplesMSAA > 1 ? StoreAction::MsaaResolve : StoreAction::Store;\n  renderPassOffscreen_.colorAttachments.back().clearColor = {0.0f, 0.0f, 0.0f, 1.0f};\n  renderPassOffscreen_.depthAttachment.loadAction = LoadAction::Clear;\n  renderPassOffscreen_.depthAttachment.storeAction = StoreAction::DontCare;\n  renderPassOffscreen_.depthAttachment.clearDepth = 1.0f;\n\n  renderPassMain_.colorAttachments.emplace_back();\n  renderPassMain_.colorAttachments.back().loadAction = LoadAction::Clear;\n  renderPassMain_.colorAttachments.back().storeAction = StoreAction::Store;\n  renderPassMain_.colorAttachments.back().clearColor = {0.0f, 0.0f, 0.0f, 1.0f};\n  renderPassMain_.depthAttachment.loadAction = LoadAction::Clear;\n  renderPassMain_.depthAttachment.storeAction = StoreAction::DontCare;\n  renderPassMain_.depthAttachment.clearDepth = 1.0f;\n\n#if USE_OPENGL_BACKEND\n  renderPassShadow_.colorAttachments.push_back(igl::RenderPassDesc::ColorAttachmentDesc{});\n  renderPassShadow_.colorAttachments.back().loadAction = LoadAction::Clear;\n  renderPassShadow_.colorAttachments.back().storeAction = StoreAction::Store;\n  renderPassShadow_.colorAttachments.back().clearColor = {0.0f, 0.0f, 0.0f, 1.0f};\n#endif\n  renderPassShadow_.depthAttachment.loadAction = LoadAction::Clear;\n  renderPassShadow_.depthAttachment.storeAction = StoreAction::Store;\n  renderPassShadow_.depthAttachment.clearDepth = 1.0f;\n\n  const std::string cacheFileName = contentRootFolder + \"cache.data\";\n\n  if (!loadFromCache(cacheFileName.c_str())) {\n    if (!IGL_DEBUG_VERIFY(loadAndCache(cacheFileName.c_str()))) {\n      IGL_DEBUG_ABORT(\"Cannot load 3D model\");\n    }\n  }\n\n#if USE_OPENGL_BACKEND\n  const uint32_t id = 0;\n#else\n  const uint32_t id = (uint32_t)textureDummyWhite_->getTextureId();\n#endif\n\n  for (const auto& mtl : cachedMaterials_) {\n    materials_.push_back(GPUMaterial{.ambient = vec4(mtl.ambient, 1.0f),\n                                     .diffuse = vec4(mtl.diffuse, 1.0f),\n                                     .texAmbient = id,\n                                     .texDiffuse = id});\n  }\n\n  {\n#if USE_OPENGL_BACKEND\n    const auto bufType = BufferDesc::BufferTypeBits::Uniform;\n    const auto hint = BufferDesc::BufferAPIHintBits::UniformBlock;\n#else\n    const auto bufType = BufferDesc::BufferTypeBits::Storage;\n    const auto hint = 0;\n#endif\n    sbMaterials_ = device_->createBuffer(BufferDesc{bufType,\n                                                    materials_.data(),\n                                                    sizeof(GPUMaterial) * materials_.size(),\n                                                    ResourceStorage::Private,\n                                                    hint,\n                                                    \"materials\"},\n                                         nullptr);\n\n    vb0_ = device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Vertex,\n                                            vertexData_.data(),\n                                            sizeof(VertexData) * vertexData_.size(),\n                                            ResourceStorage::Private,\n                                            hint,\n                                            \"vertex\"},\n                                 nullptr);\n    ib0_ = device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Index,\n                                            indexData_.data(),\n                                            sizeof(uint32_t) * indexData_.size(),\n                                            ResourceStorage::Private,\n                                            hint,\n                                            \"index\"},\n                                 nullptr);\n  }\n}\n\nvoid createComputePipeline() {\n  if (computePipelineState_Grayscale_) {\n    return;\n  }\n\n  ComputePipelineDesc desc;\n#if USE_OPENGL_BACKEND\n  std::string computeCode = std::string(\"#version 460\") + kCodeComputeTest;\n  kCodeComputeTest = computeCode.c_str();\n#endif\n  desc.shaderStages = ShaderStagesCreator::fromModuleStringInput(\n      *device_, kCodeComputeTest, \"main\", \"Shader Module: grayscale (comp)\", nullptr);\n\n  computePipelineState_Grayscale_ = device_->createComputePipeline(desc, nullptr);\n}\n\nvoid createRenderPipelines(int numSamplesMSAA) {\n  if (renderPipelineState_Mesh_) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(fbMain_);\n\n  {\n    RenderPipelineDesc desc;\n\n    desc.targetDesc.colorAttachments.resize(1);\n    desc.targetDesc.colorAttachments[0].textureFormat = fbMain_->getColorAttachment(0)->getFormat();\n\n    if (fbMain_->getDepthAttachment()) {\n      desc.targetDesc.depthAttachmentFormat = fbMain_->getDepthAttachment()->getFormat();\n    }\n\n    desc.vertexInputState = vertexInput0_;\n\n// @fb-only\n    // @fb-only\n      // @fb-only\n          // @fb-only\n           // @fb-only\n           // @fb-only\n           // @fb-only\n      // @fb-only\n      // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n      // @fb-only\n      // @fb-only\n          // @fb-only\n           // @fb-only\n           // @fb-only\n           // @fb-only\n      // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n      // @fb-only\n      // @fb-only\n          // @fb-only\n              // @fb-only\n              // @fb-only\n              // @fb-only\n              // @fb-only\n              // @fb-only\n              // @fb-only\n              // @fb-only\n              // @fb-only\n              // @fb-only\n              // @fb-only\n    // @fb-only\n// @fb-only\n#if USE_OPENGL_BACKEND\n    std::string vsCode = std::string(\"#version 460\") + kCodeVS;\n    kCodeVS = vsCode.c_str();\n    std::string fsCode = std::string(\"#version 460\") + kCodeFS;\n    kCodeFS = fsCode.c_str();\n#endif\n    desc.shaderStages = ShaderStagesCreator::fromModuleStringInput(*device_,\n                                                                   kCodeVS,\n                                                                   \"main\",\n                                                                   \"Shader Module: main (vert)\",\n                                                                   kCodeFS,\n                                                                   \"main\",\n                                                                   \"Shader Module: main (frag)\",\n                                                                   nullptr);\n// @fb-only\n#if USE_OPENGL_BACKEND\n    desc.uniformBlockBindingMap.emplace(\n        0,\n        std::vector<std::pair<igl::NameHandle, igl::NameHandle>>{\n            std::make_pair(IGL_NAMEHANDLE(\"PerFrame\"), igl::NameHandle{})});\n    desc.uniformBlockBindingMap.emplace(\n        1,\n        std::vector<std::pair<igl::NameHandle, igl::NameHandle>>{\n            std::make_pair(IGL_NAMEHANDLE(\"PerObject\"), igl::NameHandle{})});\n    desc.uniformBlockBindingMap.emplace(\n        2,\n        std::vector<std::pair<igl::NameHandle, igl::NameHandle>>{\n            std::make_pair(IGL_NAMEHANDLE(\"MeshMaterials\"), igl::NameHandle{})});\n#endif\n    desc.cullMode = igl::CullMode::Back;\n    desc.frontFaceWinding = igl::WindingMode::CounterClockwise;\n    desc.sampleCount = numSamplesMSAA;\n    desc.debugName = IGL_NAMEHANDLE(\"Pipeline: mesh\");\n#if USE_OPENGL_BACKEND\n    desc.fragmentUnitSamplerMap[0] = IGL_NAMEHANDLE(\"texShadow\");\n    desc.fragmentUnitSamplerMap[1] = IGL_NAMEHANDLE(\"texAmbient\");\n    desc.fragmentUnitSamplerMap[2] = IGL_NAMEHANDLE(\"texDiffuse\");\n    desc.fragmentUnitSamplerMap[3] = IGL_NAMEHANDLE(\"texAlpha\");\n    desc.fragmentUnitSamplerMap[4] = IGL_NAMEHANDLE(\"texSkyboxIrradiance\");\n#endif\n    renderPipelineState_Mesh_ = device_->createRenderPipeline(desc, nullptr);\n    desc.polygonFillMode = igl::PolygonFillMode::Line;\n    desc.vertexInputState = vertexInputShadows_; // positions-only\n#if USE_OPENGL_BACKEND\n    const std::string vsCodeWireframe = std::string(\"#version 460\") + kCodeVS_Wireframe;\n    kCodeVS_Wireframe = vsCodeWireframe.c_str();\n    const std::string fsCodeWireframe = std::string(\"#version 460\") + kCodeFS_Wireframe;\n    kCodeFS_Wireframe = fsCodeWireframe.c_str();\n    desc.fragmentUnitSamplerMap.clear();\n    desc.uniformBlockBindingMap.clear();\n    desc.uniformBlockBindingMap.emplace(\n        0,\n        std::vector<std::pair<igl::NameHandle, igl::NameHandle>>{\n            std::make_pair(IGL_NAMEHANDLE(\"PerFrame\"), igl::NameHandle{})});\n    desc.uniformBlockBindingMap.emplace(\n        1,\n        std::vector<std::pair<igl::NameHandle, igl::NameHandle>>{\n            std::make_pair(IGL_NAMEHANDLE(\"PerObject\"), igl::NameHandle{})});\n#endif\n    desc.shaderStages =\n        ShaderStagesCreator::fromModuleStringInput(*device_,\n                                                   kCodeVS_Wireframe,\n                                                   \"main\",\n                                                   \"Shader Module: main wireframe (vert)\",\n                                                   kCodeFS_Wireframe,\n                                                   \"main\",\n                                                   \"Shader Module: main wireframe (frag)\",\n                                                   nullptr);\n    renderPipelineState_MeshWireframe_ = device_->createRenderPipeline(desc, nullptr);\n  }\n\n  // shadow\n  {\n    RenderPipelineDesc desc;\n    desc.targetDesc.colorAttachments.clear();\n    desc.targetDesc.depthAttachmentFormat = fbShadowMap_->getDepthAttachment()->getFormat();\n    desc.vertexInputState = vertexInputShadows_;\n#if USE_OPENGL_BACKEND\n    std::string vsCode = std::string(\"#version 460\") + kShadowVS;\n    kShadowVS = vsCode.c_str();\n    std::string fsCode = std::string(\"#version 460\") + kShadowFS;\n    kShadowFS = fsCode.c_str();\n#endif\n    desc.shaderStages = ShaderStagesCreator::fromModuleStringInput(*device_,\n                                                                   kShadowVS,\n                                                                   \"main\",\n                                                                   \"Shader Module: shadow (vert)\",\n                                                                   kShadowFS,\n                                                                   \"main\",\n                                                                   \"Shader Module: shadow (frag)\",\n                                                                   nullptr);\n#if USE_OPENGL_BACKEND\n    size_t bindingPoint = 0;\n    desc.uniformBlockBindingMap[bindingPoint++].emplace_back(\n        std::make_pair(IGL_NAMEHANDLE(\"ShadowFrameUniforms\"), igl::NameHandle{}));\n    desc.uniformBlockBindingMap[bindingPoint++].emplace_back(\n        std::make_pair(IGL_NAMEHANDLE(\"ShadowObjectUniforms\"), igl::NameHandle{}));\n#endif\n    desc.cullMode = igl::CullMode::Disabled;\n    desc.debugName = IGL_NAMEHANDLE(\"Pipeline: shadow\");\n    renderPipelineState_Shadow_ = device_->createRenderPipeline(desc, nullptr);\n  }\n\n  // fullscreen\n  {\n    RenderPipelineDesc desc;\n    desc.targetDesc.colorAttachments.resize(1);\n    desc.targetDesc.colorAttachments[0].textureFormat = fbMain_->getColorAttachment(0)->getFormat();\n    if (fbMain_->getDepthAttachment()) {\n      desc.targetDesc.depthAttachmentFormat = fbMain_->getDepthAttachment()->getFormat();\n    }\n#if USE_OPENGL_BACKEND\n    std::string vsCode = std::string(\"#version 460\") + kCodeFullscreenVS;\n    stringReplaceAll(vsCode, \"gl_VertexIndex\", \"gl_VertexID\");\n    kCodeFullscreenVS = vsCode.c_str();\n    std::string fsCode = std::string(\"#version 460\") + kCodeFullscreenFS;\n    kCodeFullscreenFS = fsCode.c_str();\n#endif\n    desc.shaderStages =\n        ShaderStagesCreator::fromModuleStringInput(*device_,\n                                                   kCodeFullscreenVS,\n                                                   \"main\",\n                                                   \"Shader Module: fullscreen (vert)\",\n                                                   kCodeFullscreenFS,\n                                                   \"main\",\n                                                   \"Shader Module: fullscreen (frag)\",\n                                                   nullptr);\n    desc.cullMode = igl::CullMode::Disabled;\n    desc.debugName = IGL_NAMEHANDLE(\"Pipeline: fullscreen\");\n    desc.fragmentUnitSamplerMap[0] = IGL_NAMEHANDLE(\"texFullScreen\");\n    renderPipelineState_Fullscreen_ = device_->createRenderPipeline(desc, nullptr);\n  }\n}\n\nvoid createRenderPipelineSkybox(int numSamplesMSAA) {\n  if (renderPipelineState_Skybox_) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(fbMain_);\n\n  RenderPipelineDesc desc;\n  desc.targetDesc.colorAttachments.resize(1);\n  desc.targetDesc.colorAttachments[0].textureFormat = fbMain_->getColorAttachment(0)->getFormat();\n\n  if (fbMain_->getDepthAttachment()) {\n    desc.targetDesc.depthAttachmentFormat = fbMain_->getDepthAttachment()->getFormat();\n  }\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n        // @fb-only\n         // @fb-only\n         // @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n            // @fb-only\n             // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n            // @fb-only\n  // @fb-only\n// @fb-only\n#if USE_OPENGL_BACKEND\n  std::string vsCode = std::string(\"#version 460\") + kSkyboxVS;\n  stringReplaceAll(vsCode, \"gl_VertexIndex\", \"gl_VertexID\");\n  kSkyboxVS = vsCode.c_str();\n  std::string fsCode = std::string(\"#version 460\") + kSkyboxFS;\n  kSkyboxFS = fsCode.c_str();\n#endif\n  desc.shaderStages = ShaderStagesCreator::fromModuleStringInput(*device_,\n                                                                 kSkyboxVS,\n                                                                 \"main\",\n                                                                 \"Shader Module: skybox (vert)\",\n                                                                 kSkyboxFS,\n                                                                 \"main\",\n                                                                 \"Shader Module: skybox (frag)\",\n                                                                 nullptr);\n// @fb-only\n#if USE_OPENGL_BACKEND\n  size_t bindingPoint = 0;\n  desc.uniformBlockBindingMap[bindingPoint++].emplace_back(\n      std::make_pair(IGL_NAMEHANDLE(\"SkyboxFrameUniforms\"), igl::NameHandle{}));\n#endif\n  desc.cullMode = igl::CullMode::Front;\n  desc.frontFaceWinding = igl::WindingMode::CounterClockwise;\n  desc.sampleCount = numSamplesMSAA;\n  desc.debugName = IGL_NAMEHANDLE(\"Pipeline: skybox\");\n#if USE_OPENGL_BACKEND\n  desc.fragmentUnitSamplerMap[1] = IGL_NAMEHANDLE(\"texSkybox\");\n#endif\n  renderPipelineState_Skybox_ = device_->createRenderPipeline(desc, nullptr);\n}\n\nstd::shared_ptr<ITexture> getNativeDrawable() {\n  IGL_PROFILER_FUNCTION();\n  Result ret;\n  std::shared_ptr<ITexture> drawable;\n#if USE_OPENGL_BACKEND\n#if IGL_PLATFORM_WINDOWS\n  const auto& platformDevice = device_->getPlatformDevice<opengl::wgl::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n  drawable = platformDevice->createTextureFromNativeDrawable(&ret);\n#elif IGL_PLATFORM_LINUX\n  const auto& platformDevice = device_->getPlatformDevice<opengl::glx::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n  drawable = platformDevice->createTextureFromNativeDrawable(width_, height_, &ret);\n#endif\n#else\n  const auto& platformDevice = device_->getPlatformDevice<igl::vulkan::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n  drawable = platformDevice->createTextureFromNativeDrawable(&ret);\n#endif\n  IGL_DEBUG_ASSERT(ret.isOk(), ret.message.c_str());\n  IGL_DEBUG_ASSERT(drawable != nullptr);\n  return drawable;\n}\n\nstd::shared_ptr<ITexture> getNativeDepthDrawable() {\n  IGL_PROFILER_FUNCTION();\n  Result ret;\n  std::shared_ptr<ITexture> drawable;\n#if USE_OPENGL_BACKEND\n#if IGL_PLATFORM_WINDOWS\n  const auto& platformDevice = device_->getPlatformDevice<opengl::wgl::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n  drawable = platformDevice->createTextureFromNativeDepth(width_, height_, &ret);\n#elif IGL_PLATFORM_LINUX\n  const auto& platformDevice = device_->getPlatformDevice<opengl::glx::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n  drawable = platformDevice->createTextureFromNativeDepth(width_, height_, &ret);\n#endif\n#else\n  const auto& platformDevice = device_->getPlatformDevice<igl::vulkan::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n  drawable = platformDevice->createTextureFromNativeDepth(width_, height_, &ret);\n#endif\n  IGL_DEBUG_ASSERT(ret.isOk(), ret.message.c_str());\n  IGL_DEBUG_ASSERT(drawable != nullptr);\n  return drawable;\n}\n\nvoid createFramebuffer(const std::shared_ptr<ITexture>& nativeDrawable) {\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = nativeDrawable;\n  framebufferDesc.depthAttachment.texture = getNativeDepthDrawable();\n  fbMain_ = device_->createFramebuffer(framebufferDesc, nullptr);\n  IGL_DEBUG_ASSERT(fbMain_);\n}\n\nvoid createShadowMap() {\n  const uint32_t w = 4096;\n  const uint32_t h = 4096;\n  auto desc = TextureDesc::new2D(igl::TextureFormat::Z_UNorm16,\n                                 w,\n                                 h,\n                                 TextureDesc::TextureUsageBits::Attachment |\n                                     TextureDesc::TextureUsageBits::Sampled,\n                                 \"Shadow map\");\n  desc.numMipLevels = TextureDesc::calcNumMipLevels(w, h);\n  Result ret;\n  const std::shared_ptr<ITexture> shadowMap = device_->createTexture(desc, &ret);\n  IGL_DEBUG_ASSERT(ret.isOk());\n\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.depthAttachment.texture = shadowMap;\n  fbShadowMap_ = device_->createFramebuffer(framebufferDesc, nullptr);\n  IGL_DEBUG_ASSERT(fbShadowMap_);\n}\n\nvoid createOffscreenFramebuffer(int numSamplesMSAA) {\n  const uint32_t w = width_;\n  const uint32_t h = height_;\n  Result ret;\n  auto descDepth = TextureDesc::new2D(igl::TextureFormat::Z_UNorm24,\n                                      w,\n                                      h,\n                                      TextureDesc::TextureUsageBits::Attachment |\n                                          TextureDesc::TextureUsageBits::Sampled,\n                                      \"Offscreen framebuffer (d)\");\n  descDepth.numMipLevels = TextureDesc::calcNumMipLevels(w, h);\n  if (numSamplesMSAA > 1) {\n    descDepth.usage = TextureDesc::TextureUsageBits::Attachment;\n    descDepth.numSamples = numSamplesMSAA;\n    descDepth.numMipLevels = 1;\n    descDepth.storage = ResourceStorage::Memoryless;\n  }\n  const std::shared_ptr<ITexture> texDepth = device_->createTexture(descDepth, &ret);\n  IGL_DEBUG_ASSERT(ret.isOk());\n\n  TextureDesc::TextureUsage usage =\n      TextureDesc::TextureUsageBits::Attachment | TextureDesc::TextureUsageBits::Sampled;\n  const TextureFormat format = igl::TextureFormat::RGBA_UNorm8;\n#if !USE_OPENGL_BACKEND\n  usage |= TextureDesc::TextureUsageBits::Storage; // compute shader postprocessing\n#endif\n\n  auto descColor = TextureDesc::new2D(format, w, h, usage, \"Offscreen framebuffer (c)\");\n  descColor.numMipLevels = TextureDesc::calcNumMipLevels(w, h);\n  if (numSamplesMSAA > 1) {\n    descColor.usage = TextureDesc::TextureUsageBits::Attachment;\n    descColor.numSamples = numSamplesMSAA;\n    descColor.numMipLevels = 1;\n    descColor.storage = ResourceStorage::Memoryless;\n  }\n  const std::shared_ptr<ITexture> texColor = device_->createTexture(descColor, &ret);\n  IGL_DEBUG_ASSERT(ret.isOk());\n\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = texColor;\n  framebufferDesc.depthAttachment.texture = texDepth;\n  if (numSamplesMSAA > 1) {\n    auto descColorResolve =\n        TextureDesc::new2D(format, w, h, usage, \"Offscreen framebuffer (c - resolve)\");\n    descColorResolve.usage = usage;\n    const std::shared_ptr<ITexture> texResolveColor =\n        device_->createTexture(descColorResolve, &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    framebufferDesc.colorAttachments[0].resolveTexture = texResolveColor;\n  }\n  fbOffscreen_ = device_->createFramebuffer(framebufferDesc, nullptr);\n  IGL_DEBUG_ASSERT(fbOffscreen_);\n}\n\nvoid render(const std::shared_ptr<ITexture>& nativeDrawable,\n            uint32_t frameIndex,\n            int numSamplesMSAA) {\n  IGL_PROFILER_FUNCTION();\n\n  fbMain_->updateDrawable(nativeDrawable);\n\n  // from igl/shell/renderSessions/Textured3DCubeSession.cpp\n  const float fov = float(45.0f * (M_PI / 180.0f));\n  const float aspectRatio = (float)width_ / (float)height_;\n\n  const mat4 shadowProj = glm::perspective(float(60.0f * (M_PI / 180.0f)), 1.0f, 10.0f, 4000.0f);\n  const mat4 shadowView = mat4(vec4(0.772608519f, 0.532385886f, -0.345892131f, 0),\n                               vec4(0, 0.544812560f, 0.838557839f, 0),\n                               vec4(0.634882748f, -0.647876859f, 0.420926809f, 0),\n                               vec4(-58.9244843f, -30.4530792f, -508.410126f, 1.0f));\n#if USE_OPENGL_BACKEND\n  const mat4 scaleBias =\n      mat4(0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.5, 0.5, 0.5, 1.0);\n#else\n  const mat4 scaleBias =\n      mat4(0.5, 0.0, 0.0, 0.0, 0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.5, 0.5, 0.0, 1.0);\n#endif\n\n  perFrame_.proj = glm::perspective(fov, aspectRatio, 0.5f, 500.0f);\n  perFrame_.view = camera.getViewMatrix();\n  perFrame_.light = scaleBias * shadowProj * shadowView;\n\n  ubPerFrame_[frameIndex]->upload(&perFrame_, igl::BufferRange(sizeof(perFrame_), 0));\n\n  {\n    UniformsPerFrame perFrameShadow;\n    perFrameShadow.proj = shadowProj;\n    perFrameShadow.view = shadowView;\n    ubPerFrameShadow_[frameIndex]->upload(&perFrameShadow,\n                                          igl::BufferRange(sizeof(perFrameShadow), 0));\n  }\n\n  UniformsPerObject perObject;\n\n  perObject.model = glm::scale(mat4(1.0f), vec3(0.05f));\n\n  ubPerObject_[frameIndex]->upload(&perObject, igl::BufferRange(sizeof(perObject), 0));\n\n  // Command buffers (1-N per thread): create, submit and forget\n\n  // Pass 1: shadows\n  if (isShadowMapDirty_) {\n    const std::shared_ptr<ICommandBuffer> buffer =\n        commandQueue_->createCommandBuffer(CommandBufferDesc(), nullptr);\n\n    auto commands = buffer->createRenderCommandEncoder(renderPassShadow_, fbShadowMap_);\n\n    commands->bindRenderPipelineState(renderPipelineState_Shadow_);\n    commands->pushDebugGroupLabel(\"Render Shadows\", igl::Color(1, 0, 0));\n    commands->bindDepthStencilState(depthStencilState_);\n    commands->bindVertexBuffer(0, *vb0_);\n#if USE_OPENGL_BACKEND\n    const auto& glPipelineState =\n        static_cast<const igl::opengl::RenderPipelineState*>(renderPipelineState_Shadow_.get());\n    const int ubPerFrameShadowIdx =\n        glPipelineState->getUniformBlockBindingPoint(IGL_NAMEHANDLE((\"ShadowFrameUniforms\")));\n\n    const int ubPerObjectIdx =\n        glPipelineState->getUniformBlockBindingPoint(IGL_NAMEHANDLE((\"ShadowObjectUniforms\")));\n#else\n    const int ubPerFrameShadowIdx = 0;\n    const int ubPerObjectIdx = 1;\n#endif\n    commands->bindBuffer(ubPerFrameShadowIdx, ubPerFrameShadow_[frameIndex].get());\n    commands->bindBuffer(ubPerObjectIdx, ubPerObject_[frameIndex].get());\n\n#if USE_OPENGL_BACKEND\n    int start = 0;\n    for (auto numVertices : shapeVertexCnt_) {\n      commands->draw(numVertices, 1, start);\n      start += numVertices;\n    }\n#else\n    commands->bindIndexBuffer(*ib0_, igl::IndexFormat::UInt32);\n    commands->drawIndexed(indexData_.size());\n#endif\n    commands->popDebugGroupLabel();\n    commands->endEncoding();\n\n    buffer->present(fbShadowMap_->getDepthAttachment());\n\n    commandQueue_->submit(*buffer);\n\n    fbShadowMap_->getDepthAttachment()->generateMipmap(*commandQueue_);\n\n    isShadowMapDirty_ = false;\n  }\n\n  // Pass 2: mesh\n  {\n    const std::shared_ptr<ICommandBuffer> buffer =\n        commandQueue_->createCommandBuffer(CommandBufferDesc(), nullptr);\n\n    // This will clear the framebuffer\n    auto commands = buffer->createRenderCommandEncoder(renderPassOffscreen_, fbOffscreen_);\n    // Scene\n    commands->bindRenderPipelineState(renderPipelineState_Mesh_);\n    commands->pushDebugGroupLabel(\"Render Mesh\", igl::Color(1, 0, 0));\n    commands->bindDepthStencilState(depthStencilState_);\n    commands->bindVertexBuffer(0, *vb0_);\n\n#if USE_OPENGL_BACKEND\n    const auto& glPipelineState =\n        static_cast<const igl::opengl::RenderPipelineState*>(renderPipelineState_Mesh_.get());\n    const int ubPerFrameIdx =\n        glPipelineState->getUniformBlockBindingPoint(IGL_NAMEHANDLE((\"PerFrame\")));\n\n    const int ubPerObjectIdx =\n        glPipelineState->getUniformBlockBindingPoint(IGL_NAMEHANDLE((\"PerObject\")));\n\n    const int sbIdx =\n        glPipelineState->getUniformBlockBindingPoint(IGL_NAMEHANDLE((\"MeshMaterials\")));\n#else\n    const int ubPerFrameIdx = 0;\n    const int ubPerObjectIdx = 1;\n    const int sbIdx = 2;\n#endif\n    commands->bindBuffer(ubPerFrameIdx, ubPerFrame_[frameIndex].get());\n    commands->bindBuffer(ubPerObjectIdx, ubPerObject_[frameIndex].get());\n    commands->bindBuffer(sbIdx, sbMaterials_.get());\n    commands->bindTexture(0, igl::BindTarget::kFragment, fbShadowMap_->getDepthAttachment().get());\n    commands->bindTexture(4, igl::BindTarget::kFragment, skyboxTextureIrradiance_.get());\n    commands->bindSamplerState(0, igl::BindTarget::kFragment, samplerShadow.get());\n    commands->bindSamplerState(1, igl::BindTarget::kFragment, sampler.get());\n    commands->bindSamplerState(2, igl::BindTarget::kFragment, sampler.get());\n    commands->bindSamplerState(3, igl::BindTarget::kFragment, sampler.get());\n    commands->bindSamplerState(4, igl::BindTarget::kFragment, sampler.get());\n\n#if USE_OPENGL_BACKEND\n    commands->bindVertexBuffer(0, *vb0_);\n    int shapeStart = 0;\n    for (auto numVertices : shapeVertexCnt_) {\n      const uint32_t imageIdx = (uint32_t)vertexData_[shapeStart].mtlIndex;\n      const auto ambientTextureReference =\n          strstr(cachedMaterials_[imageIdx].name, \"MASTER_Glass_\") ? textureDummyWhite_\n          : textures_[imageIdx].ambient                            ? textures_[imageIdx].ambient\n                                                                   : textureDummyBlack_;\n      const auto diffuseTextureReference =\n          strstr(cachedMaterials_[imageIdx].name, \"MASTER_Glass_Clean\") ? textureDummyWhite_\n          : textures_[imageIdx].diffuse ? textures_[imageIdx].diffuse\n                                        : textureDummyBlack_;\n      const auto alphaTextureReference = strstr(cachedMaterials_[imageIdx].name, \"MASTER_Glass_\")\n                                             ? textureDummyWhite_\n                                         : textures_[imageIdx].alpha ? textures_[imageIdx].alpha\n                                                                     : textureDummyBlack_;\n\n      commands->bindTexture(1, igl::BindTarget::kFragment, ambientTextureReference.get());\n      commands->bindTexture(2, igl::BindTarget::kFragment, diffuseTextureReference.get());\n      commands->bindTexture(3, igl::BindTarget::kFragment, alphaTextureReference.get());\n      commands->draw(numVertices, 1, shapeStart);\n      if (enableWireframe_) {\n        commands->bindRenderPipelineState(renderPipelineState_MeshWireframe_);\n        commands->bindVertexBuffer(0, *vb0_);\n        commands->draw(numVertices, 1, shapeStart);\n\n        // Bind the non-wireframe pipeline and the vertex buffer\n        commands->bindRenderPipelineState(renderPipelineState_Mesh_);\n        commands->bindVertexBuffer(0, *vb0_);\n      }\n\n      shapeStart += numVertices;\n    }\n#else\n    commands->bindTexture(0, igl::BindTarget::kFragment, fbShadowMap_->getDepthAttachment().get());\n    commands->bindTexture(1, igl::BindTarget::kFragment, skyboxTextureIrradiance_.get());\n    commands->bindSamplerState(0, igl::BindTarget::kFragment, samplerShadow.get());\n    commands->bindSamplerState(1, igl::BindTarget::kFragment, sampler.get());\n    commands->bindIndexBuffer(*ib0_, IndexFormat::UInt32);\n    commands->drawIndexed(indexData_.size());\n    if (enableWireframe_) {\n      commands->bindRenderPipelineState(renderPipelineState_MeshWireframe_);\n      commands->drawIndexed(indexData_.size());\n    }\n#endif\n    commands->popDebugGroupLabel();\n\n    // Skybox\n    commands->bindRenderPipelineState(renderPipelineState_Skybox_);\n    commands->bindTexture(1, igl::BindTarget::kFragment, skyboxTextureReference_.get());\n    commands->bindSamplerState(1, igl::BindTarget::kFragment, sampler.get());\n    commands->pushDebugGroupLabel(\"Render Skybox\", igl::Color(0, 1, 0));\n    commands->bindDepthStencilState(depthStencilStateLEqual_);\n    commands->draw(3u * 6u * 2u);\n    commands->popDebugGroupLabel();\n    commands->endEncoding();\n\n#if !USE_OPENGL_BACKEND\n    buffer->present(fbOffscreen_->getColorAttachment(0));\n#endif\n    commandQueue_->submit(*buffer);\n#if USE_OPENGL_BACKEND\n    if (kNumSamplesMSAA == 1) {\n      fbOffscreen_->getColorAttachment(0)->generateMipmap(*commandQueue_.get());\n    }\n#endif\n  }\n\n  // Pass 3: compute shader post-processing\n  if (enableComputePass_) {\n    const std::shared_ptr<ICommandBuffer> buffer = commandQueue_->createCommandBuffer(\n        CommandBufferDesc{.debugName = \"computeBuffer\"}, nullptr);\n\n    auto commands = buffer->createComputeCommandEncoder();\n    commands->bindComputePipelineState(computePipelineState_Grayscale_);\n    ITexture* tex = numSamplesMSAA > 1 ? fbOffscreen_->getResolveColorAttachment(0).get()\n                                       : fbOffscreen_->getColorAttachment(0).get();\n#if !USE_OPENGL_BACKEND\n    const uint32_t textureId = tex->getTextureId();\n    commands->bindPushConstants(&textureId, sizeof(textureId));\n#endif\n    commands->bindTexture(0, tex);\n    commands->dispatchThreadGroups(igl::Dimensions(width_, height_, 1), igl::Dimensions());\n    commands->endEncoding();\n\n    commandQueue_->submit(*buffer);\n  }\n\n  // Pass 4: render into the swapchain image\n  {\n    const std::shared_ptr<ICommandBuffer> buffer =\n        commandQueue_->createCommandBuffer(CommandBufferDesc(), nullptr);\n\n    // This will clear the framebuffer\n    auto commands = buffer->createRenderCommandEncoder(renderPassMain_, fbMain_);\n    commands->bindRenderPipelineState(renderPipelineState_Fullscreen_);\n    commands->pushDebugGroupLabel(\"Swapchain Output\", igl::Color(1, 0, 0));\n    commands->bindTexture(0,\n                          igl::BindTarget::kFragment,\n                          numSamplesMSAA > 1 ? fbOffscreen_->getResolveColorAttachment(0).get()\n                                             : fbOffscreen_->getColorAttachment(0).get());\n    commands->bindSamplerState(0, igl::BindTarget::kFragment, sampler.get());\n    commands->draw(3);\n    commands->popDebugGroupLabel();\n\n#if IGL_WITH_IGLU\n    imguiSession->endFrame(*device_, *commands);\n#endif // IGL_WITH_IGLU\n\n    commands->endEncoding();\n\n    buffer->present(fbMain_->getColorAttachment(0));\n\n    commandQueue_->submit(*buffer);\n  }\n\n#if !USE_OPENGL_BACKEND\n  fbMain_->getDepthAttachment()->generateMipmap(*commandQueue_);\n#endif\n}\n\nvoid generateCompressedTexture(const LoadedImage& img) {\n  if (loaderShouldExit_.load(std::memory_order_acquire)) {\n    return;\n  }\n\n  printf(\"...compressing texture to %s\\n\", img.compressedFileName.c_str());\n\n  const auto numMipLevels = TextureDesc::calcNumMipLevels(img.w, img.h);\n\n  // Go over all generated mipmap and create a compressed texture\n\n  // Create ktx2 texture hard coded and support only BC7 format\n  ktxTextureCreateInfo createInfo = {\n      .vkFormat = VK_FORMAT_BC7_UNORM_BLOCK,\n      .baseWidth = static_cast<uint32_t>(img.w),\n      .baseHeight = static_cast<uint32_t>(img.h),\n      .baseDepth = 1u,\n      .numDimensions = 2u,\n      .numLevels = numMipLevels,\n      .numLayers = 1u,\n      .numFaces = 1u,\n      .generateMipmaps = KTX_FALSE, // Mipmaps are explicitly provided\n  };\n\n  ktxTexture2* texture = nullptr;\n  auto error = ktxTexture2_Create(&createInfo, KTX_TEXTURE_CREATE_ALLOC_STORAGE, &texture);\n  IGL_DEBUG_ASSERT(error == KTX_SUCCESS);\n\n  IGL_SCOPE_EXIT {\n    ktxTexture_Destroy(ktxTexture(texture));\n  };\n\n  uint32_t w = img.w;\n  uint32_t h = img.h;\n  for (uint32_t i = 0; i < numMipLevels; ++i) {\n    std::vector<uint8_t> destPixels(w * h * img.channels);\n\n    // resize\n    stbir_resize_uint8((const unsigned char*)img.pixels,\n                       (int)img.w,\n                       (int)img.h,\n                       0,\n                       (unsigned char*)destPixels.data(),\n                       w,\n                       h,\n                       0,\n                       (int)img.channels);\n    // compress\n    auto packedImage16 = Compress::getCompressedImage(\n        destPixels.data(), w, h, img.channels, false, &loaderShouldExit_);\n    ktxTexture_SetImageFromMemory(ktxTexture(texture),\n                                  i,\n                                  0,\n                                  0,\n                                  reinterpret_cast<const uint8_t*>(packedImage16.data()),\n                                  sizeof(block16) * packedImage16.size());\n\n    h = h > 1 ? h >> 1 : 1;\n    w = w > 1 ? w >> 1 : 1;\n\n    if (loaderShouldExit_.load(std::memory_order_acquire)) {\n      return;\n    }\n  }\n\n  ktxTexture_WriteToNamedFile(ktxTexture(texture), img.compressedFileName.c_str());\n}\n\nLoadedImage loadImage(const char* fileName, int channels) {\n  if (!fileName || !*fileName) {\n    return {};\n  }\n\n  const std::string debugName = IGL_FORMAT(\"{} ({})\", fileName, channels).c_str();\n\n  {\n    const std::lock_guard lock(imagesCacheMutex_);\n\n    const auto it = imagesCache_.find(debugName);\n\n    if (it != imagesCache_.end()) {\n      IGL_DEBUG_ASSERT(channels == it->second.channels);\n      return it->second;\n    }\n  }\n\n  LoadedImage img;\n  img.compressedFileName = convertFileName(fileName);\n  img.pixels = stbi_load(fileName, &img.w, &img.h, nullptr, channels);\n  img.channels = channels;\n  img.debugName = debugName;\n\n  if ((img.pixels != nullptr) && kEnableCompression && (channels != 1) &&\n      !std::filesystem::exists(img.compressedFileName.c_str())) {\n    generateCompressedTexture(img);\n  }\n\n  const std::lock_guard lock(imagesCacheMutex_);\n\n  imagesCache_[fileName] = img;\n\n  return img;\n}\n\nvoid loadMaterial(size_t i) {\n  static const std::string pathPrefix = contentRootFolder + \"src/bistro/Exterior/\";\n\n  IGL_SCOPE_EXIT {\n    remainingMaterialsToLoad_.fetch_sub(1u, std::memory_order_release);\n  };\n\n#define LOAD_TEX(result, tex, channels)                                                     \\\n  std::string tmp##result = cachedMaterials_[i].tex;                                        \\\n  std::replace(tmp##result.begin(), tmp##result.end(), '\\\\', '/');                          \\\n  const LoadedImage result = std::string(cachedMaterials_[i].tex).empty()                   \\\n                                 ? LoadedImage()                                            \\\n                                 : loadImage((pathPrefix + tmp##result).c_str(), channels); \\\n  if (loaderShouldExit_.load(std::memory_order_acquire)) {                                  \\\n    return;                                                                                 \\\n  }\n\n  LOAD_TEX(ambient, ambient_texname, 4);\n  LOAD_TEX(diffuse, diffuse_texname, 4);\n  LOAD_TEX(alpha, alpha_texname, 1);\n\n#undef LOAD_TEX\n\n  const LoadedMaterial mtl{.idx = i, .ambient = ambient, .diffuse = diffuse, .alpha = alpha};\n\n  if (!mtl.ambient.pixels && !mtl.diffuse.pixels) {\n    // skip missing textures\n    materials_[i].texDiffuse = 0;\n  } else {\n    const std::lock_guard guard(loadedMaterialsMutex_);\n    loadedMaterials_.push_back(mtl);\n    remainingMaterialsToLoad_.fetch_add(1u, std::memory_order_release);\n  }\n}\n\nvoid loadMaterials(bool isHeadless) {\n  stbi_set_flip_vertically_on_load(1);\n\n  textures_.resize(cachedMaterials_.size());\n\n  remainingMaterialsToLoad_ = (uint32_t)cachedMaterials_.size();\n\n  for (size_t i = 0; i != cachedMaterials_.size(); i++) {\n    loaderPool_->silent_async([i]() { loadMaterial(i); });\n  }\n}\n\nvoid loadCubemapTexture(const std::string& fileNameKTX, std::shared_ptr<ITexture>& tex) {\n  if (!std::filesystem::exists(fileNameKTX)) {\n    return;\n  }\n\n#if USE_TEXTURE_LOADER\n  loadKtxTexture(*device_, *commandQueue_, fileNameKTX, tex, !kEnableCompression);\n#else\n  ktxTexture2* texture = nullptr;\n  auto error = ktxTexture2_CreateFromNamedFile(\n      fileNameKTX.c_str(), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &texture);\n  IGL_DEBUG_ASSERT(error == KTX_SUCCESS);\n\n  IGL_SCOPE_EXIT {\n    ktxTexture_Destroy(ktxTexture(texture));\n  };\n\n  if (!IGL_DEBUG_VERIFY(texture->vkFormat == VK_FORMAT_R32G32B32A32_SFLOAT)) {\n    IGL_DEBUG_ABORT(\"Texture format not supported\");\n    return;\n  }\n\n  auto texRefRange = TextureRangeDesc::new2D(\n      0, 0, static_cast<size_t>(texture->baseWidth), static_cast<size_t>(texture->baseHeight));\n\n  // If compression is enabled, upload all mip levels\n  if (kEnableCompression) {\n    texRefRange.numMipLevels = TextureDesc::calcNumMipLevels(texRefRange.width, texRefRange.height);\n  }\n\n  auto desc =\n      TextureDesc::newCube(igl::vulkan::util::vkTextureFormatToTextureFormat(texture->vkFormat),\n                           texRefRange.width,\n                           texRefRange.height,\n                           TextureDesc::TextureUsageBits::Sampled,\n                           fileNameKTX.c_str());\n  desc.numMipLevels = texRefRange.numMipLevels;\n  tex = device_->createTexture(desc, nullptr);\n  IGL_DEBUG_ASSERT(tex);\n  for (uint8_t face = 0; face < 6; ++face) {\n    for (size_t i = 0; i < desc.numMipLevels; ++i) {\n      size_t offset = 0;\n      error = ktxTexture_GetImageOffset(ktxTexture(texture), i, 0, face, &offset);\n      IGL_DEBUG_ASSERT(error == KTX_SUCCESS);\n\n      tex->upload(tex->getCubeFaceRange(face, i), texture->pData + offset);\n    }\n  }\n\n  if (!kEnableCompression) {\n    tex->generateMipmap(*commandQueue_);\n  }\n#endif // IGL_WITH_IGLU\n}\n\nktxTexture2* bitmapToCube(Bitmap& bmp) {\n  IGL_DEBUG_ASSERT(bmp.comp_ == 3); // RGB\n  IGL_DEBUG_ASSERT(bmp.type_ == eBitmapType_Cube);\n  IGL_DEBUG_ASSERT(bmp.fmt_ == eBitmapFormat_Float);\n\n  const int w = bmp.w_;\n  const int h = bmp.h_;\n\n  const auto numMipLevels = TextureDesc::calcNumMipLevels(w, h);\n\n  // Create ktx2 texture\n  // hard coded and support only BC7 format\n  ktxTextureCreateInfo createInfo = {\n      .vkFormat = VK_FORMAT_R32G32B32A32_SFLOAT,\n      .baseWidth = static_cast<uint32_t>(w),\n      .baseHeight = static_cast<uint32_t>(h),\n      .baseDepth = 1u,\n      .numDimensions = 2u,\n      .numLevels = numMipLevels,\n      .numLayers = 1u,\n      .numFaces = 6u,\n      .generateMipmaps = KTX_FALSE, // Mipmaps are explicitly provided\n  };\n\n  ktxTexture2* texture = nullptr;\n  auto error = ktxTexture2_Create(&createInfo, KTX_TEXTURE_CREATE_ALLOC_STORAGE, &texture);\n  IGL_DEBUG_ASSERT(error == KTX_SUCCESS);\n\n  const size_t numFacePixels = static_cast<size_t>(w) * static_cast<size_t>(h);\n\n  const std::unique_ptr<float[]> facePixels =\n      std::make_unique<float[]>(numFacePixels * static_cast<size_t>(4));\n  for (size_t face = 0; face != 6; face++) {\n    float* dst = facePixels.get();\n    const vec3* src = reinterpret_cast<vec3*>(bmp.data_.data()) + face * numFacePixels;\n    for (int y = 0; y != h; y++) {\n      for (int x = 0; x != w; x++) {\n        const vec3& rgb = src[x + y * w];\n        *dst++ = rgb.x;\n        *dst++ = rgb.y;\n        *dst++ = rgb.z;\n        *dst++ = 0.0f;\n      }\n    }\n    ktxTexture_SetImageFromMemory(ktxTexture(texture),\n                                  0,\n                                  0,\n                                  face,\n                                  reinterpret_cast<const uint8_t*>(facePixels.get()),\n                                  sizeof(float) * numFacePixels * static_cast<size_t>(4));\n  }\n\n  return texture;\n}\n\nvoid generateMipmaps(const std::string& outFilename, ktxTexture2* cubemap) {\n  IGL_LOG_INFO(\"Generating mipmaps\");\n\n  const std::unique_ptr<float[]> buffer =\n      std::make_unique<float[]>(static_cast<size_t>(cubemap->baseWidth) *\n                                static_cast<size_t>(cubemap->baseHeight) * static_cast<size_t>(4));\n  auto prevWidth = cubemap->baseWidth;\n  auto prevHeight = cubemap->baseHeight;\n  for (size_t face = 0; face < 6; ++face) {\n    IGL_LOG_INFO(\".\");\n    for (size_t miplevel = 1; miplevel < cubemap->numLevels; ++miplevel) {\n      IGL_LOG_INFO(\":\");\n      const auto width = prevWidth > 1 ? prevWidth >> 1 : 1;\n      const auto height = prevHeight > 1 ? prevWidth >> 1 : 1;\n\n      size_t prevOffset = 0;\n      auto error =\n          ktxTexture_GetImageOffset(ktxTexture(cubemap), miplevel - 1, 0, face, &prevOffset);\n      IGL_DEBUG_ASSERT(error == KTX_SUCCESS);\n\n      stbir_resize_float(reinterpret_cast<const float*>(cubemap->pData + prevOffset),\n                         prevWidth,\n                         prevHeight,\n                         0,\n                         buffer.get(),\n                         width,\n                         height,\n                         0,\n                         4);\n\n      ktxTexture_SetImageFromMemory(ktxTexture(cubemap),\n                                    miplevel,\n                                    0,\n                                    face,\n                                    reinterpret_cast<const uint8_t*>(buffer.get()),\n                                    sizeof(float) * width * height * 4);\n\n      prevWidth = width;\n      prevHeight = height;\n    }\n    prevWidth = cubemap->baseWidth;\n    prevHeight = cubemap->baseHeight;\n  }\n\n  IGL_LOG_INFO(\"\\n\");\n  ktxTexture_WriteToNamedFile(ktxTexture(cubemap), outFilename.c_str());\n}\n\nvoid processCubemap(const std::string& inFilename,\n                    const std::string& outFilenameEnv,\n                    const std::string& outFilenameIrr) {\n  int sourceWidth = 0, sourceHeight = 0;\n  float* pxs = stbi_loadf(inFilename.c_str(), &sourceWidth, &sourceHeight, nullptr, 3);\n  IGL_SCOPE_EXIT {\n    if (pxs) {\n      stbi_image_free(pxs);\n    }\n  };\n\n  if (!IGL_DEBUG_VERIFY(pxs != nullptr)) {\n    IGL_DEBUG_ABORT(\"Did you read the tutorial at the top of Tiny_MeshLarge.cpp?\");\n    return;\n  }\n\n  // Environment map\n  {\n    Bitmap bmp = convertEquirectangularMapToCubeMapFaces(\n        Bitmap(sourceWidth, sourceHeight, 3, eBitmapFormat_Float, pxs));\n    ktxTexture2* cube = bitmapToCube(bmp);\n    generateMipmaps(outFilenameEnv, cube);\n  }\n\n  // Irradiance map\n  {\n    constexpr int dstW = 256;\n    constexpr int dstH = 128;\n\n    std::vector<vec3> out(dstW * dstH);\n    convolveDiffuse((vec3*)pxs, sourceWidth, sourceHeight, dstW, dstH, out.data(), 1024);\n\n    Bitmap bmp = convertEquirectangularMapToCubeMapFaces(\n        Bitmap(dstW, dstH, 3, eBitmapFormat_Float, out.data()));\n    ktxTexture2* cube = bitmapToCube(bmp);\n    generateMipmaps(outFilenameIrr, cube);\n\n    IGL_SCOPE_EXIT {\n      ktxTexture_Destroy(ktxTexture(cube));\n    };\n  }\n}\n\nvoid loadSkyboxTexture() {\n  static const std::string skyboxFileName{\"immenstadter_horn_2k\"};\n  static const std::string skyboxSubdir{\"src/skybox_hdr/\"};\n\n  static const std::string fileNameRefKTX =\n      contentRootFolder + skyboxFileName + \"_ReferenceMap.ktx2\";\n  static const std::string fileNameIrrKTX =\n      contentRootFolder + skyboxFileName + \"_IrradianceMap.ktx2\";\n\n  if (!std::filesystem::exists(fileNameRefKTX) || !std::filesystem::exists(fileNameIrrKTX)) {\n    IGL_LOG_INFO(\"Cubemap in KTX format not found. Extracting from HDR file...\\n\");\n    static const std::string inFilename =\n        contentRootFolder + skyboxSubdir + skyboxFileName + \".hdr\";\n\n    processCubemap(inFilename, fileNameRefKTX, fileNameIrrKTX);\n  }\n\n  loadCubemapTexture(fileNameRefKTX, skyboxTextureReference_);\n  loadCubemapTexture(fileNameIrrKTX, skyboxTextureIrradiance_);\n}\n\nstd::shared_ptr<ITexture> createTexture(const LoadedImage& img) {\n  if (!img.pixels) {\n    return nullptr;\n  }\n\n  const auto it = texturesCache_.find(img.debugName);\n\n  if (it != texturesCache_.end()) {\n    return it->second;\n  }\n\n  igl::TextureFormat fmt = igl::TextureFormat::Invalid;\n  if (img.channels == 1) {\n    fmt = igl::TextureFormat::R_UNorm8;\n  } else if (img.channels == 4) {\n    fmt = kEnableCompression ? igl::TextureFormat::RGBA_BC7_UNORM_4x4\n                             : igl::TextureFormat::RGBA_UNorm8;\n  }\n\n  TextureDesc desc = TextureDesc::new2D(\n      fmt, img.w, img.h, TextureDesc::TextureUsageBits::Sampled, img.debugName.c_str());\n  desc.numMipLevels = TextureDesc::calcNumMipLevels(img.w, img.h);\n  auto tex = device_->createTexture(desc, nullptr);\n\n  if (kEnableCompression && img.channels == 4 &&\n      std::filesystem::exists(img.compressedFileName.c_str())) {\n#if USE_TEXTURE_LOADER\n    loadKtxTexture(*device_, *commandQueue_, img.compressedFileName, tex, false);\n#else\n    // Uploading the texture\n    const auto rangeDesc = TextureRangeDesc::new2D(0, 0, img.w, img.h, 0, desc.numMipLevels);\n    ktxTexture* texture = nullptr;\n    auto error = ktxTexture_CreateFromNamedFile(\n        img.compressedFileName.c_str(), KTX_TEXTURE_CREATE_LOAD_IMAGE_DATA_BIT, &texture);\n    if (IGL_DEBUG_VERIFY_NOT(error != KTX_SUCCESS)) {\n      printf(\"Failed to load %s\\n\", img.compressedFileName.c_str());\n    }\n    IGL_SCOPE_EXIT {\n      ktxTexture_Destroy(ktxTexture(texture));\n    };\n\n    for (size_t i = 0; i < desc.numMipLevels; ++i) {\n      size_t offset = 0;\n      error = ktxTexture_GetImageOffset(ktxTexture(texture), i, 0, 0, &offset);\n      IGL_DEBUG_ASSERT(error == KTX_SUCCESS);\n\n      tex->upload(rangeDesc.atMipLevel(i), texture->pData + offset);\n    }\n#endif // USE_TEXTURE_LOADER\n  } else {\n    tex->upload(TextureRangeDesc::new2D(0, 0, img.w, img.h), img.pixels);\n    tex->generateMipmap(*commandQueue_);\n  }\n  texturesCache_[img.debugName] = tex;\n  return tex;\n}\n\nvoid processLoadedMaterials() {\n  int numLoaded = 0;\n\n  const int kMaxMaterialsPerFrame = 5;\n\n  for (; numLoaded < kMaxMaterialsPerFrame; numLoaded++) {\n    LoadedMaterial mtl;\n\n    {\n      const std::lock_guard guard(loadedMaterialsMutex_);\n      if (loadedMaterials_.empty()) {\n        break;\n      } else {\n        mtl = loadedMaterials_.back();\n        loadedMaterials_.pop_back();\n        remainingMaterialsToLoad_.fetch_sub(1u, std::memory_order_release);\n      }\n    }\n\n    MaterialTextures tex;\n\n    tex.ambient = createTexture(mtl.ambient);\n    tex.diffuse = createTexture(mtl.diffuse);\n    tex.alpha = createTexture(mtl.alpha);\n\n    // update GPU materials\n    textures_[mtl.idx] = tex;\n#if !USE_OPENGL_BACKEND\n    materials_[mtl.idx].texAmbient = tex.ambient ? (uint32_t)tex.ambient->getTextureId() : 0;\n    materials_[mtl.idx].texDiffuse = tex.diffuse ? (uint32_t)tex.diffuse->getTextureId() : 0;\n    materials_[mtl.idx].texAlpha = tex.alpha ? (uint32_t)tex.alpha->getTextureId() : 0;\n    IGL_DEBUG_ASSERT(materials_[mtl.idx].texAmbient >= 0);\n    IGL_DEBUG_ASSERT(materials_[mtl.idx].texDiffuse >= 0);\n    IGL_DEBUG_ASSERT(materials_[mtl.idx].texAlpha >= 0);\n#endif\n  }\n  if (numLoaded) {\n    sbMaterials_->upload(materials_.data(), BufferRange(sizeof(GPUMaterial) * materials_.size()));\n  }\n}\n\n} // namespace\n\nint main(int argc, char* argv[]) {\n  bool isHeadless = false;\n  bool enableVulkanValidationLayers = true;\n\n  for (int i = 1; i < argc; i++) {\n    if (!strcmp(argv[i], \"--headless\")) {\n      isHeadless = true;\n    } else if (!strcmp(argv[i], \"--disable-vulkan-validation-layers\")) {\n      enableVulkanValidationLayers = false;\n    }\n  }\n\n#if defined(IGL_USE_STATIC_LAVAPIPE)\n  const int kNumSamplesMSAA = 1;\n#else\n  const int kNumSamplesMSAA = isHeadless ? 1 : 8;\n#endif\n  // find the content folder\n  {\n    using namespace std::filesystem;\n    path subdir(\"third-party/content/\");\n    // @fb-only\n    path dir = current_path();\n    // find the content somewhere above our current build directory\n    while (dir != current_path().root_path() && !exists(dir / subdir)) {\n      dir = dir.parent_path();\n    }\n    if (!exists(dir / subdir)) {\n      printf(\"Cannot find the content directory. Run `deploy_content.py` before running this app.\");\n      IGL_DEBUG_ASSERT_NOT_REACHED();\n      return EXIT_FAILURE;\n    }\n    contentRootFolder = (dir / subdir).string();\n  }\n\n  GLFWwindow* window = initIGL(isHeadless, enableVulkanValidationLayers);\n  initModel(kNumSamplesMSAA);\n\n  if (kEnableCompression) {\n    printf(\n        \"Compressing textures... It can take a while in debug builds...(needs to be done once)\\n\");\n  }\n\n  loadSkyboxTexture();\n  loadMaterials(isHeadless);\n\n  createFramebuffer(getNativeDrawable());\n  createShadowMap();\n  createOffscreenFramebuffer(kNumSamplesMSAA);\n  createRenderPipelines(kNumSamplesMSAA);\n  createRenderPipelineSkybox(kNumSamplesMSAA);\n  createComputePipeline();\n\n#if IGL_WITH_IGLU\n  imguiSession = std::make_unique<iglu::imgui::Session>(*device_, inputDispatcher);\n#endif // IGL_WITH_IGLU\n\n  // In headless mode, wait for all textures to be loaded before rendering\n  if (isHeadless) {\n    printf(\"Waiting for all textures to load...\\n\");\n    while (remainingMaterialsToLoad_.load(std::memory_order_acquire) > 0) {\n      processLoadedMaterials();\n      std::this_thread::sleep_for(std::chrono::milliseconds(10));\n    }\n    printf(\"All textures loaded.\\n\");\n  }\n\n  double prevTime = glfwGetTime();\n\n  uint32_t frameIndex = 0;\n\n  // Main loop\n  while (!window || !glfwWindowShouldClose(window)) {\n    {\n      FramebufferDesc framebufferDesc;\n      framebufferDesc.colorAttachments[0].texture = getNativeDrawable();\n      framebufferDesc.depthAttachment.texture = getNativeDepthDrawable();\n#if IGL_WITH_IGLU\n      imguiSession->beginFrame(framebufferDesc, 1.0f);\n      ImGui::SetNextWindowCollapsed(true, ImGuiCond_FirstUseEver);\n      ImGui::ShowDemoWindow();\n\n      ImGui::Begin(\"Keyboard hints:\", nullptr, ImGuiWindowFlags_AlwaysAutoResize);\n      ImGui::Text(\"W/S/A/D - camera movement\");\n      ImGui::Text(\"1/2 - camera up/down\");\n      ImGui::Text(\"Shift - fast movement\");\n      ImGui::Text(\"C - toggle compute shader postprocessing\");\n      ImGui::Text(\"N - toggle normals\");\n      ImGui::Text(\"T - toggle wireframe\");\n      ImGui::End();\n\n      if (textures_[1].diffuse) {\n        ImGui::Begin(\"Texture Viewer\", nullptr, ImGuiWindowFlags_AlwaysAutoResize);\n        ImGui::Image(ImTextureID(textures_[1].diffuse.get()), ImVec2(256, 256));\n        ImGui::End();\n      }\n\n      if (const uint32_t num = remainingMaterialsToLoad_.load(std::memory_order_acquire)) {\n        ImGui::SetNextWindowPos(ImVec2(0, 0));\n        ImGui::Begin(\n            \"Loading...\", nullptr, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoInputs);\n        ImGui::ProgressBar(1.0f - float(num) / cachedMaterials_.size(),\n                           ImVec2(ImGui::GetIO().DisplaySize.x, 32));\n        ImGui::End();\n      }\n\n      imguiSession->drawFPS(fps_.getAverageFPS());\n#endif // IGL_WITH_IGLU\n    }\n\n    processLoadedMaterials();\n    const double newTime = glfwGetTime();\n    const double delta = newTime - prevTime;\n    fps_.updateFPS(delta);\n    positioner_.update(delta, mousePos_, mousePressed_);\n    prevTime = newTime;\n#if IGL_WITH_IGLU\n    inputDispatcher.processEvents();\n#endif // IGL_WITH_IGLU\n    render(getNativeDrawable(), frameIndex, kNumSamplesMSAA);\n    frameIndex = (frameIndex + 1) % kNumBufferedFrames;\n    if (window) {\n      glfwPollEvents();\n    } else {\n      printf(\"We are running headless - breaking after 1 frame\\n\");\n      std::shared_ptr<ITexture> texture = fbMain_->getColorAttachment(0);\n      const Dimensions dim = texture->getDimensions();\n      std::vector<uint8_t> pixelsRGBA(dim.width * dim.height * 4);\n      std::vector<uint8_t> pixelsRGB(dim.width * dim.height * 3);\n      fbMain_->copyBytesColorAttachment(*commandQueue_,\n                                        0,\n                                        pixelsRGBA.data(),\n                                        TextureRangeDesc::new2D(0, 0, dim.width, dim.height));\n      if (texture->getFormat() == igl::TextureFormat::BGRA_UNorm8 ||\n          texture->getFormat() == igl::TextureFormat::BGRA_SRGB) {\n        // swap R-B\n        for (uint32_t i = 0; i < pixelsRGBA.size(); i += 4) {\n          std::swap(pixelsRGBA[i + 0], pixelsRGBA[i + 2]);\n        }\n      }\n      // convert to RGB\n      for (uint32_t i = 0; i < pixelsRGB.size() / 3; i++) {\n        pixelsRGB[3 * i + 0] = pixelsRGBA[4 * i + 0];\n        pixelsRGB[3 * i + 1] = pixelsRGBA[4 * i + 1];\n        pixelsRGB[3 * i + 2] = pixelsRGBA[4 * i + 2];\n      }\n      const char* fileName = \"TinyMeshLarge.png\";\n      IGLLog(IGLLogInfo, \"Writing screenshot to: '%s'\\n\", fileName);\n      stbi_flip_vertically_on_write(1);\n      stbi_write_png(fileName, (int)dim.width, (int)dim.height, 3, pixelsRGB.data(), 0);\n      break;\n    }\n  }\n\n  loaderShouldExit_.store(true, std::memory_order_release);\n\n#if IGL_WITH_IGLU\n  imguiSession = nullptr;\n#endif // IGL_WITH_IGLU\n  // destroy all the Vulkan stuff before closing the window\n  vb0_ = nullptr;\n  ib0_ = nullptr;\n  sbMaterials_ = nullptr;\n  ubPerFrame_.clear();\n  ubPerFrameShadow_.clear();\n  ubPerObject_.clear();\n  renderPipelineState_Mesh_ = nullptr;\n  renderPipelineState_MeshWireframe_ = nullptr;\n  renderPipelineState_Shadow_ = nullptr;\n  renderPipelineState_Skybox_ = nullptr;\n  renderPipelineState_Fullscreen_ = nullptr;\n  computePipelineState_Grayscale_ = nullptr;\n  textureDummyWhite_ = nullptr;\n#if USE_OPENGL_BACKEND\n  textureDummyBlack_ = nullptr;\n#endif // USE_OPENGL_BACKEND\n  skyboxTextureReference_ = nullptr;\n  skyboxTextureIrradiance_ = nullptr;\n  textures_.clear();\n  texturesCache_.clear();\n  sampler = nullptr;\n  samplerShadow = nullptr;\n  fbMain_ = nullptr;\n  fbShadowMap_ = nullptr;\n  fbOffscreen_ = nullptr;\n  device_.reset(nullptr);\n\n  glfwDestroyWindow(window);\n  glfwTerminate();\n\n  printf(\"Waiting for the loader thread to exit...\\n\");\n\n  loaderPool_ = nullptr;\n\n  return 0;\n}\n"
  },
  {
    "path": "samples/ios/snapshot_test_support/IGLBytesToUIImage.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import <Foundation/NSObjCRuntime.h>\n#import <igl/IGL.h>\n\n@class UIImage;\n\nNS_ASSUME_NONNULL_BEGIN\n\nextern \"C\" {\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nUIImage* IGLRGBABytesToUIImage(void* bytes, size_t width, size_t height);\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nUIImage* IGLFramebufferToUIImage(const igl::IFramebuffer& framebuffer,\n                                 igl::ICommandQueue& commandQueue,\n                                 size_t width,\n                                 size_t height);\n}\n\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "samples/ios/snapshot_test_support/IGLBytesToUIImage.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import \"IGLBytesToUIImage.h\"\n\n#import <CoreGraphics/CGColorSpace.h>\n#import <CoreGraphics/CGContext.h>\n#import <CoreGraphics/CGDataProvider.h>\n#import <CoreGraphics/CGGeometry.h>\n#import <CoreGraphics/CGImage.h>\n#import <Foundation/NSData.h>\n#import <Foundation/NSException.h>\n#import <UIKit/UIGraphics.h>\n#import <UIKit/UIImage.h>\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nUIImage* IGLRGBABytesToUIImage(void* bytes, size_t width, size_t height) {\n  auto data = [NSData dataWithBytes:bytes length:width * height * 4];\n\n  auto* const colorSpace = CGColorSpaceCreateDeviceRGB();\n  auto* const provider = CGDataProviderCreateWithCFData((__bridge CFDataRef)data);\n  auto* const cgImage = CGImageCreate(width,\n                                      height,\n                                      8,\n                                      32,\n                                      width * 4,\n                                      colorSpace,\n                                      kCGImageAlphaLast,\n                                      provider,\n                                      nullptr,\n                                      NO,\n                                      kCGRenderingIntentDefault);\n  CGColorSpaceRelease(colorSpace);\n  CGDataProviderRelease(provider);\n\n  const CGRect bounds = CGRectMake(0, 0, width, height);\n  UIGraphicsBeginImageContextWithOptions(bounds.size, NO, 0);\n  CGContextRef context = UIGraphicsGetCurrentContext();\n  CGContextSaveGState(context);\n  CGContextDrawImage(context, bounds, cgImage);\n  CGContextRestoreGState(context);\n  UIImage* snapshot = UIGraphicsGetImageFromCurrentImageContext();\n  UIGraphicsEndImageContext();\n\n  CGImageRelease(cgImage);\n\n  return snapshot;\n}\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nUIImage* IGLFramebufferToUIImage(const igl::IFramebuffer& framebuffer,\n                                 igl::ICommandQueue& commandQueue,\n                                 size_t width,\n                                 size_t height) {\n  if (framebuffer.getColorAttachment(0)->getProperties().format !=\n      igl::TextureFormat::RGBA_UNorm8) {\n    NSCAssert(false, @\"Only BGRA texture format is supported\");\n    return nil;\n  }\n\n  auto pixels = std::vector<uint32_t>(width * height);\n  framebuffer.copyBytesColorAttachment(\n      commandQueue, 0, pixels.data(), igl::TextureRangeDesc::new2D(0, 0, width, height));\n\n  return IGLRGBABytesToUIImage(pixels.data(), width, height);\n}\n"
  },
  {
    "path": "samples/ios/snapshot_test_support/IGLSnapshotTestCase.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import <FBServerSnapshotTestCase/FBServerSnapshotTestCase.h>\n\n@interface IGLSnapshotTestCase : FBServerSnapshotTestCase\n\n@end\n"
  },
  {
    "path": "samples/ios/snapshot_test_support/IGLSnapshotTestCase.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import \"IGLSnapshotTestCase.h\"\n\n#import \"IGLBytesToUIImage.h\"\n#import \"TinyRenderable.hpp\"\n\n#import <FBServerSnapshotTestCase/FBServerSnapshotTestCase.h>\n#import <FBServerSnapshotTestCase/FBServerSnapshotTestData.h> // IWYU pragma: keep\n#import <FBServerSnapshotTestCase/FBServerSnapshotTestRecorder.h>\n#import <iglu/kit/Renderable.hpp>\n#import <igl/DebugMacros.h> // IWYU pragma: keep\n#import <igl/IGL.h> // IWYU pragma: keep\n#include <igl/metal/HWDevice.h>\n#include <igl/opengl/ios/HWDevice.h>\n\n@implementation IGLSnapshotTestCase {\n  std::shared_ptr<igl::IDevice> _device;\n  std::shared_ptr<igl::ICommandQueue> _commandQueue;\n  std::shared_ptr<igl::IFramebuffer> _framebuffer;\n  igl::BackendType _backendType;\n  std::shared_ptr<iglu::kit::IRenderable> _renderable;\n}\n\n- (void)setUp {\n  [super setUp];\n\n  _renderable = std::make_shared<iglu::kit::TinyRenderable>();\n  _backendType = igl::BackendType::OpenGL;\n  [self initIGL];\n}\n\n- (void)initIGL {\n  igl::HWDeviceQueryDesc queryDesc(igl::HWDeviceType::DiscreteGpu);\n  if (_backendType == igl::BackendType::Metal) {\n    igl::metal::HWDevice hwDevice;\n    auto hwDevices = hwDevice.queryDevices(queryDesc, nullptr);\n    _device = hwDevice.create(hwDevices[0], nullptr);\n  } else if (_backendType == igl::BackendType::OpenGL) {\n    igl::opengl::ios::HWDevice hwDevice;\n    _device = hwDevice.create(nullptr);\n  }\n\n  igl::Result result;\n  igl::DeviceScope scope(*_device);\n  igl::CommandQueueDesc desc{};\n  _commandQueue = _device->createCommandQueue(desc, &result);\n  IGL_DEBUG_ASSERT(\n      result.isOk(), \"Simple sample create command queue failed: %s\\n\", result.message.c_str());\n}\n\n- (std::shared_ptr<igl::ITexture>)createOrUpdateFramebuffer {\n  IGL_DEBUG_ASSERT(_device->verifyScope());\n\n  auto texDesc = igl::TextureDesc::new2D(\n      igl::TextureFormat::RGBA_UNorm8, 720, 1280, igl::TextureDesc::TextureUsageBits::Attachment);\n  std::shared_ptr<igl::ITexture> targetTexture = _device->createTexture(texDesc, nullptr);\n\n  if (_framebuffer) {\n    _framebuffer->updateDrawable(targetTexture);\n  } else {\n    igl::Result result;\n    igl::FramebufferDesc framebufferDesc;\n    framebufferDesc.colorAttachments[0].texture = targetTexture;\n    _framebuffer = _device->createFramebuffer(framebufferDesc, &result);\n    IGL_DEBUG_ASSERT(result.isOk(), \"Could not create framebuffer %s\\n\", result.message.c_str());\n\n    _renderable->initialize(*_device, *_framebuffer);\n  }\n  return targetTexture;\n}\n\n- (void)render {\n  igl::DeviceScope scope(*_device);\n  auto nativeDrawable = [self createOrUpdateFramebuffer];\n\n  igl::Result result;\n  igl::CommandBufferDesc cbDesc;\n  auto commandBuffer = _commandQueue->createCommandBuffer(cbDesc, &result);\n  IGL_DEBUG_ASSERT(result.isOk(), \"Could not create cmd buffer %s\\n\", result.message.c_str());\n\n  igl::RenderPassDesc renderPass;\n  renderPass.colorAttachments.resize(1);\n  renderPass.colorAttachments[0].loadAction = igl::LoadAction::Clear;\n  renderPass.colorAttachments[0].storeAction = igl::StoreAction::Store;\n  renderPass.colorAttachments[0].clearColor = {1.0, 1.0, 1.0, 1.0};\n\n  auto cmds = commandBuffer->createRenderCommandEncoder(renderPass, _framebuffer);\n  IGL_DEBUG_BUFFER_LABEL_START(commandBuffer, \"draw renderable\");\n  _renderable->submit(*cmds);\n  IGL_DEBUG_BUFFER_LABEL_END(commandBuffer);\n  cmds->endEncoding();\n\n  _commandQueue->submit(*commandBuffer); // Guarantees ordering between command buffers\n}\n\n- (void)testTinySample {\n  [self render];\n\n  auto image = IGLFramebufferToUIImage(*_framebuffer, *_commandQueue, 720, 1280);\n  FBRecordSnapshotData([[FBServerSnapshotTestData alloc] initWithSnapshot:image\n                                                             coverageInfo:nil\n                                                            configuration:nil\n                                                               identifier:nil\n                                                                 metadata:nil]);\n}\n\n@end\n"
  },
  {
    "path": "samples/ios/snapshot_test_support/TinyRenderable.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"TinyRenderable.hpp\"\n\n#include <cstring>\n#include <memory>\n#include <nlohmann/json.hpp>\n#import <simd/vector_types.h>\n#import <igl/IGL.h>\n#import <igl/NameHandle.h>\n\nnamespace {\n\nstd::shared_ptr<igl::ITexture> createCheckerboardTexture(igl::IDevice& device) {\n  const size_t kWidth = 4, kHeight = 4;\n  const uint32_t kData[kWidth][kHeight] = {\n      {0xFF000000, 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF},\n      {0xFF000000, 0xFF000000, 0xFFFFFFFF, 0xFFFFFFFF},\n      {0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0xFF000000},\n      {0xFFFFFFFF, 0xFFFFFFFF, 0xFF000000, 0xFF000000},\n  };\n\n  igl::Result result;\n  const igl::TextureDesc desc =\n      igl::TextureDesc::new2D(igl::TextureFormat::RGBA_UNorm8,\n                              kWidth,\n                              kHeight,\n                              igl::TextureDesc::TextureUsageBits::Sampled);\n  auto texture = device.createTexture(desc, &result);\n  IGL_DEBUG_ASSERT(result.isOk(), \"Create texture failed: %s\\n\", result.message.c_str());\n\n  const auto range = igl::TextureRangeDesc::new2D(0, 0, kWidth, kHeight);\n  texture->upload(range, kData);\n  return texture;\n}\n\nconst char kMSLShaderSource[] =\n    R\"(#include <metal_stdlib>\n  #include <simd/simd.h>\n  #line 0\n  using namespace metal;\n\n  struct VertexIn {\n    float3 position [[attribute(0)]];\n    float2 uv [[attribute(1)]];\n  };\n\n  struct VertexOut {\n    float4 position [[position]];\n    float2 uv;\n  };\n\n  vertex VertexOut vertexShader(\n      uint vid [[vertex_id]],\n      constant VertexIn * vertices [[buffer(0)]]) {\n    VertexOut out;\n    out.position = float4(vertices[vid].position, 1.0);\n    out.uv = vertices[vid].uv;\n    return out;\n  }\n\n  fragment float4 fragmentShader(\n      VertexOut IN [[stage_in]],\n      texture2d<float> diffuseTex [[texture(0)]]) {\n    constexpr sampler linearSampler(\n        mag_filter::linear, min_filter::linear);\n    return diffuseTex.sample(linearSampler, IN.uv);\n  })\";\n// const size_t kMSLShaderSourceLen = sizeof(kMSLShaderSource)/sizeof(kMSLShaderSource[0]) - 1;\n\nconst char kGLSLShaderSourceVertex[] =\n    R\"(#line 0\n  precision highp float;\n\n  attribute vec3 position;\n  attribute vec2 uv_in;\n  varying vec2 uv;\n\n  void main() {\n    gl_Position = vec4(position, 1.0);\n    uv = uv_in;\n  })\";\n// const size_t kGLSLShaderSourceVertexLen =\n// sizeof(kGLSLShaderSourceVertex)/sizeof(kGLSLShaderSourceVertex[0]) - 1;\n\nconst char kGLSLShaderSourceFragment[] =\n    R\"(#line 0\n  precision highp float;\n\n  uniform sampler2D inputImage;\n  varying vec2 uv;\n\n  void main() {\n    gl_FragColor = texture2D(inputImage, uv);\n  })\";\n// const size_t kGLSLShaderSourceFragmentLen =\n// sizeof(kGLSLShaderSourceFragment)/sizeof(kGLSLShaderSourceFragment[0]) - 1;\n\nstd::unique_ptr<igl::IShaderStages> getShaderStagesForBackend(igl::IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    IGL_DEBUG_ABORT(\"IGLSamples not set up for Vulkan\");\n    return nullptr;\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ABORT(\"IGLSamples not set up for Custom\");\n    return nullptr;\n  case igl::BackendType::D3D12:\n    IGL_DEBUG_ABORT(\"IGLSamples not set up for D3D12\");\n    return nullptr;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal: {\n    igl::Result result;\n    auto stages = igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, kMSLShaderSource, \"vertexShader\", \"fragmentShader\", \"\", &result);\n    IGL_DEBUG_ASSERT(result.isOk(), \"Shader stage creation failed: %s\\n\", result.message.c_str());\n    return stages;\n  }\n  case igl::BackendType::OpenGL: {\n    igl::Result result;\n    auto stages = igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                                  kGLSLShaderSourceVertex,\n                                                                  \"main\",\n                                                                  \"\",\n                                                                  kGLSLShaderSourceFragment,\n                                                                  \"main\",\n                                                                  \"\",\n                                                                  &result);\n    IGL_DEBUG_ASSERT(result.isOk(), \"Shader stage creation failed: %s\\n\", result.message.c_str());\n    return stages;\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\nconst size_t kTextureUnit = 0;\n\n} // namespace\n\n// ----------------------------------------------------------------------------\n\nnamespace iglu::kit {\n\nconst nlohmann::json& TinyRenderable::getProperties() const {\n  static const nlohmann::json kJ;\n  //  = {\n  //    \"name\", \"tiny\",\n  //    {\"backends\", {\n  //      {\"opengl\", \"metal\"}\n  //    }},\n  //    {\"snapshot-test\", true},\n  //  };\n\n  return kJ;\n}\n\nvoid TinyRenderable::initialize(igl::IDevice& device, const igl::IFramebuffer& framebuffer) {\n  IGL_DEBUG_ASSERT(device.verifyScope());\n\n  igl::Result result;\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Vertex buffer\n  struct VertexPosUv {\n    simd::float3 position; // SIMD 128b aligned\n    simd::float2 uv; // SIMD 128b aligned\n  };\n\n  const float kMax = 20;\n  const VertexPosUv kVertexData[] = {\n      {.position = {-0.9f, 0.9f, 0.0}, .uv = {0.0, kMax}},\n      {.position = {0.9f, 0.9f, 0.0}, .uv = {kMax, kMax}},\n      {.position = {-0.9f, -0.9f, 0.0}, .uv = {0.0, 0.0}},\n      {.position = {0.9f, -0.9f, 0.0}, .uv = {kMax, 0.0}},\n  };\n\n  const igl::BufferDesc vbDesc =\n      igl::BufferDesc{igl::BufferDesc::BufferTypeBits::Vertex, kVertexData, sizeof(kVertexData)};\n  vertexBuffer_ = device.createBuffer(vbDesc, &result);\n  IGL_DEBUG_ASSERT(result.isOk(), \"create buffer failed: %s\\n\", result.message.c_str());\n\n  // Index buffer\n  const uint16_t kIndexData[] = {0, 1, 2, 1, 3, 2};\n  auto ibDesc =\n      igl::BufferDesc{igl::BufferDesc::BufferTypeBits::Index, kIndexData, sizeof(kIndexData)};\n  indexBuffer_ = device.createBuffer(ibDesc, &result);\n  IGL_DEBUG_ASSERT(result.isOk(), \"create buffer failed: %s\\n\", result.message.c_str());\n\n  // Vertex input state\n  igl::VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 2;\n  inputDesc.attributes[0] = igl::VertexAttribute(\n      0, igl::VertexAttributeFormat::Float3, offsetof(VertexPosUv, position), \"position\", 0);\n  inputDesc.attributes[1] = igl::VertexAttribute(\n      0, igl::VertexAttributeFormat::Float2, offsetof(VertexPosUv, uv), \"uv_in\", 1);\n  inputDesc.numInputBindings = 1;\n  inputDesc.inputBindings[0].stride = sizeof(VertexPosUv);\n  vertexInput_ = device.createVertexInputState(inputDesc, &result);\n  IGL_DEBUG_ASSERT(result.isOk(), \"create vertex state failed: %s\\n\", result.message.c_str());\n\n  // Sampler & Texture\n  igl::SamplerStateDesc samplerDesc;\n  samplerDesc.addressModeU = igl::SamplerAddressMode::Repeat;\n  samplerDesc.addressModeV = igl::SamplerAddressMode::Repeat;\n  samplerDesc.minFilter = samplerDesc.magFilter = igl::SamplerMinMagFilter::Nearest;\n  samplerDesc.magFilter = samplerDesc.magFilter = igl::SamplerMinMagFilter::Nearest;\n  sampler_ = device.createSamplerState(samplerDesc, nullptr);\n  texture_ = createCheckerboardTexture(device);\n\n  igl::RenderPipelineDesc graphicsDesc;\n  graphicsDesc.vertexInputState = vertexInput_;\n  graphicsDesc.shaderStages = shaderStages_;\n  auto indices = framebuffer.getColorAttachmentIndices();\n  IGL_DEBUG_ASSERT(!indices.empty());\n  graphicsDesc.targetDesc.colorAttachments.resize(1);\n  auto textureFormat = framebuffer.getColorAttachment(indices[0])->getProperties().format;\n  graphicsDesc.targetDesc.colorAttachments[0].textureFormat = textureFormat;\n  graphicsDesc.targetDesc.colorAttachments[0].blendEnabled = true;\n  graphicsDesc.targetDesc.colorAttachments[0].rgbBlendOp = igl::BlendOp::Add;\n  graphicsDesc.targetDesc.colorAttachments[0].alphaBlendOp = igl::BlendOp::Add;\n  graphicsDesc.targetDesc.colorAttachments[0].srcRGBBlendFactor = igl::BlendFactor::SrcAlpha;\n  graphicsDesc.targetDesc.colorAttachments[0].srcAlphaBlendFactor = igl::BlendFactor::SrcAlpha;\n  graphicsDesc.targetDesc.colorAttachments[0].dstRGBBlendFactor =\n      igl::BlendFactor::OneMinusSrcAlpha;\n  graphicsDesc.targetDesc.colorAttachments[0].dstAlphaBlendFactor =\n      igl::BlendFactor::OneMinusSrcAlpha;\n\n  graphicsDesc.fragmentUnitSamplerMap[kTextureUnit] = IGL_NAMEHANDLE(\"inputImage\");\n  graphicsDesc.cullMode = igl::CullMode::Back;\n  graphicsDesc.frontFaceWinding = igl::WindingMode::Clockwise;\n\n  pipelineState_ = device.createRenderPipeline(graphicsDesc, &result);\n  IGL_DEBUG_ASSERT(result.isOk(), \"create pipeline failed: %s\\n\", result.message.c_str());\n}\n\nvoid TinyRenderable::update(igl::IDevice& device) {\n  // no-op\n}\n\nvoid TinyRenderable::submit(igl::IRenderCommandEncoder& cmds) {\n  // Draw call 0\n  // clang-format off\n  cmds.bindVertexBuffer(0, *vertexBuffer_);\n  cmds.bindRenderPipelineState(pipelineState_);\n  cmds.bindTexture(kTextureUnit, igl::BindTarget::kFragment, texture_.get());\n  cmds.bindSamplerState(kTextureUnit, igl::BindTarget::kFragment, sampler_.get());\n  cmds.bindIndexBuffer(*indexBuffer_, igl::IndexFormat::UInt16);\n  cmds.drawIndexed(6);\n  // clang-format on\n}\n\n} // namespace iglu::kit\n"
  },
  {
    "path": "samples/ios/snapshot_test_support/TinyRenderable.hpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <iglu/kit/Renderable.hpp>\n#include <igl/Common.h>\n\nnamespace igl {\nclass IRenderPipelineState;\nclass IVertexInputState;\nclass IShaderStages;\nclass IBuffer;\nclass IBuffer;\nclass ITexture;\nclass ISamplerState;\n} // namespace igl\n\nnamespace iglu::kit {\n\nclass TinyRenderable : public IRenderable {\n public:\n  ~TinyRenderable() override = default;\n  [[nodiscard]] const nlohmann::json& getProperties() const override;\n  void initialize(igl::IDevice& device, const igl::IFramebuffer& framebuffer) override;\n  void update(igl::IDevice& device) override;\n  void submit(igl::IRenderCommandEncoder& cmds) override;\n\n private:\n  // PipelineState\n  std::shared_ptr<igl::IRenderPipelineState> pipelineState_;\n  std::shared_ptr<igl::IVertexInputState> vertexInput_;\n  std::shared_ptr<igl::IShaderStages> shaderStages_;\n\n  // Draw data\n  std::shared_ptr<igl::IBuffer> vertexBuffer_;\n  std::shared_ptr<igl::IBuffer> indexBuffer_;\n  std::shared_ptr<igl::ITexture> texture_;\n  std::shared_ptr<igl::ISamplerState> sampler_;\n  // std::shared_ptr<igl::IBuffer> uniformBuffer_;\n};\n\n} // namespace iglu::kit\n"
  },
  {
    "path": "samples/wasm/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nset(PROJECT_NAME \"IGL Samples\")\n\nmacro(ADD_DEMO app shellHTML)\n  add_executable(${app} \"${app}.cpp\" \"Common.cpp\")\n  set(CMAKE_EXECUTABLE_SUFFIX \".html\")\n  igl_set_cxxstd(${app} 20)\n  igl_set_folder(${app} ${PROJECT_NAME})\n  target_link_libraries(${app} PUBLIC IGLLibrary)\n  set_target_properties(\n    ${app}\n    PROPERTIES\n      LINK_FLAGS\n      \"-s USE_WEBGL2=1 -s USE_GLFW=3 -s GL_SUPPORT_AUTOMATIC_ENABLE_EXTENSIONS=1 -s GL_EMULATE_GLES_VERSION_STRING_FORMAT=1 -s ALLOW_MEMORY_GROWTH=1 -s SINGLE_FILE=1 -s LLD_REPORT_UNDEFINED --shell-file ${shellHTML}\"\n  )\n\nendmacro()\n\nadd_demo(\"Tiny_Mesh\" \"${IGL_ROOT_DIR}/samples/wasm/igl.html\")\nadd_demo(\"Triangle\" \"${IGL_ROOT_DIR}/samples/wasm/igl.html\")\n"
  },
  {
    "path": "samples/wasm/Common.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include \"Common.h\"\n\n#include <emscripten/html5.h>\n#include <igl/Common.h>\n\nvoid getRenderingBufferSize(int& width, int& height) {\n  double cssWidth = 0.0;\n  double cssHeight = 0.0;\n  emscripten_get_element_css_size(\"#canvas\", &cssWidth, &cssHeight);\n\n  double devicePixelRatio = emscripten_get_device_pixel_ratio();\n\n  width = cssWidth * devicePixelRatio;\n  height = cssHeight * devicePixelRatio;\n\n  IGL_DEBUG_ASSERT(width > 0 && height > 0, \"zero or negative size\");\n}\n"
  },
  {
    "path": "samples/wasm/Common.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nvoid getRenderingBufferSize(int& width, int& height);\n"
  },
  {
    "path": "samples/wasm/Tiny_Mesh.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <emscripten/html5.h>\n#include <glm/ext.hpp>\n#include <glm/glm.hpp>\n#include <glm/gtc/random.hpp>\n#include <samples/wasm/Common.h>\n#include <igl/FPSCounter.h>\n#include <igl/IGL.h>\n#include <igl/ShaderCreator.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/TextureBufferExternal.h>\n#include <igl/opengl/webgl/Context.h>\n#include <igl/opengl/webgl/Device.h>\n#include <igl/opengl/webgl/PlatformDevice.h>\n\nusing namespace igl;\nusing glm::mat4;\nusing glm::vec2;\nusing glm::vec3;\nusing glm::vec4;\n\nconstexpr uint32_t kNumCubes = 16;\nconstexpr uint32_t kNumBufferedFrames = 3;\nconstexpr const char* codeVS = R\"(#version 300 es\nprecision mediump float;\n\nlayout (location=0) in vec3 pos;\nlayout (location=1) in vec3 col;\nlayout (location=2) in vec2 st;\nout vec3 color;\nout vec2 uv;\n\nlayout(std140) uniform perFrame {\n  mat4 proj;\n  mat4 view;\n};\n\nlayout(std140) uniform perObject {\n  mat4 model;\n};\n\nvoid main() {\n  mat4 proj = proj;\n  mat4 view = view;\n  mat4 model = model;\n  gl_Position = proj * view * model * vec4(pos, 1.0);\n  color = col;\n  uv = st;\n}\n)\";\n\nconstexpr const char* codeFS = R\"(#version 300 es\nprecision mediump float;\n\nin vec3 color;\nin vec2 uv;\nout vec4 out_FragColor;\n\nuniform sampler2D texture0;\nuniform sampler2D texture1;\n\nvoid main() {\n\n  vec4 t0 = texture(texture0, 2.0*uv);\n  vec4 t1 = texture(texture1, uv);\n  out_FragColor = vec4(color * (t0.rgb + t1.rgb), 1.0);\n}\n)\";\n\nvec3 axis_[kNumCubes];\nstd::shared_ptr<igl::opengl::webgl::Device> device_;\nconst char* canvas = \"#canvas\";\nint width_ = 1024;\nint height_ = 768;\nigl::FPSCounter fps_;\n\nstd::shared_ptr<igl::IFramebuffer> framebuffer_;\nstd::shared_ptr<ICommandQueue> commandQueue_;\nRenderPassDesc renderPass_;\nFramebufferDesc framebufferDesc_;\nstd::shared_ptr<IRenderPipelineState> renderPipelineState_Mesh_;\nstd::shared_ptr<IBuffer> vb0_, ib0_;\nstd::vector<std::shared_ptr<IBuffer>> ubPerFrame_, ubPerObject_;\nstd::shared_ptr<IVertexInputState> vertexInput0_;\nstd::shared_ptr<IDepthStencilState> depthStencilState_;\nstd::shared_ptr<ITexture> texture0_, texture1_;\nstd::shared_ptr<ISamplerState> sampler_;\n\nstruct VertexPosUvw {\n  vec3 position;\n  vec3 color;\n  vec2 uv;\n};\n\nstruct UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n};\nstruct alignas(256) UniformsPerObject {\n  mat4 model;\n};\n\nconst float half = 1.0f;\n\n// UV-mapped cube with indices: 24 vertices, 36 indices\nstatic VertexPosUvw vertexData0[] = {\n    // top\n    {{-half, -half, +half}, {0.0, 0.0, 1.0}, {0, 0}}, // 0\n    {{+half, -half, +half}, {1.0, 0.0, 1.0}, {1, 0}}, // 1\n    {{+half, +half, +half}, {1.0, 1.0, 1.0}, {1, 1}}, // 2\n    {{-half, +half, +half}, {0.0, 1.0, 1.0}, {0, 1}}, // 3\n    // bottom\n    {{-half, -half, -half}, {1.0, 1.0, 1.0}, {0, 0}}, // 4\n    {{-half, +half, -half}, {0.0, 1.0, 0.0}, {0, 1}}, // 5\n    {{+half, +half, -half}, {1.0, 1.0, 0.0}, {1, 1}}, // 6\n    {{+half, -half, -half}, {1.0, 0.0, 0.0}, {1, 0}}, // 7\n    // left\n    {{+half, +half, -half}, {1.0, 1.0, 0.0}, {1, 0}}, // 8\n    {{-half, +half, -half}, {0.0, 1.0, 0.0}, {0, 0}}, // 9\n    {{-half, +half, +half}, {0.0, 1.0, 1.0}, {0, 1}}, // 10\n    {{+half, +half, +half}, {1.0, 1.0, 1.0}, {1, 1}}, // 11\n    // right\n    {{-half, -half, -half}, {1.0, 1.0, 1.0}, {0, 0}}, // 12\n    {{+half, -half, -half}, {1.0, 0.0, 0.0}, {1, 0}}, // 13\n    {{+half, -half, +half}, {1.0, 0.0, 1.0}, {1, 1}}, // 14\n    {{-half, -half, +half}, {0.0, 0.0, 1.0}, {0, 1}}, // 15\n    // front\n    {{+half, -half, -half}, {1.0, 0.0, 0.0}, {0, 0}}, // 16\n    {{+half, +half, -half}, {1.0, 1.0, 0.0}, {1, 0}}, // 17\n    {{+half, +half, +half}, {1.0, 1.0, 1.0}, {1, 1}}, // 18\n    {{+half, -half, +half}, {1.0, 0.0, 1.0}, {0, 1}}, // 19\n    // back\n    {{-half, +half, -half}, {0.0, 1.0, 0.0}, {1, 0}}, // 20\n    {{-half, -half, -half}, {1.0, 1.0, 1.0}, {0, 0}}, // 21\n    {{-half, -half, +half}, {0.0, 0.0, 1.0}, {0, 1}}, // 22\n    {{-half, +half, +half}, {0.0, 1.0, 1.0}, {1, 1}}, // 23\n};\n\nstatic uint16_t indexData[] = {0,  1,  2,  2,  3,  0,  4,  5,  6,  6,  7,  4,\n                               8,  9,  10, 10, 11, 8,  12, 13, 14, 14, 15, 12,\n                               16, 17, 18, 18, 19, 16, 20, 21, 22, 22, 23, 20};\n\nUniformsPerFrame perFrame;\nUniformsPerObject perObject[kNumCubes];\n\nstatic std::shared_ptr<ITexture> getNativeDrawable() {\n  Result ret;\n  auto platformDevice = static_cast<igl::IDevice*>(device_.get())\n                            ->getPlatformDevice<igl::opengl::webgl::PlatformDevice>();\n\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n\n  getRenderingBufferSize(width_, height_);\n  std::shared_ptr<ITexture> drawable =\n      platformDevice->createTextureFromNativeDrawable(width_, height_, &ret);\n\n  IGL_DEBUG_ASSERT(ret.isOk(), ret.message.c_str());\n  IGL_DEBUG_ASSERT(drawable != nullptr);\n\n  return drawable;\n}\n\nstatic void createFramebuffer(const std::shared_ptr<ITexture>& nativeDrawable) {\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = nativeDrawable;\n  framebuffer_ = device_->createFramebuffer(framebufferDesc, nullptr);\n\n  IGL_DEBUG_ASSERT(framebuffer_);\n}\n\nbool initialize() {\n  EmscriptenWebGLContextAttributes attrs;\n  emscripten_webgl_init_context_attributes(&attrs);\n  attrs.majorVersion = 3;\n  attrs.minorVersion = 0;\n  attrs.premultipliedAlpha = false;\n  attrs.alpha = false;\n  attrs.powerPreference = EM_WEBGL_POWER_PREFERENCE_DEFAULT;\n  device_ = std::make_unique<igl::opengl::webgl::Device>(\n      std::make_unique<::igl::opengl::webgl::Context>(attrs, canvas));\n\n  auto platformDevice = static_cast<igl::IDevice*>(device_.get())\n                            ->getPlatformDevice<igl::opengl::webgl::PlatformDevice>();\n\n  getRenderingBufferSize(width_, height_);\n\n  igl::TextureDesc depthDesc =\n      igl::TextureDesc::new2D(igl::TextureFormat::Z_UNorm24, width_, height_, 0);\n  depthDesc.usage = igl::TextureDesc::TextureUsageBits::Attachment;\n  depthDesc.storage = igl::ResourceStorage::Private;\n  auto depthTexture = device_->createTexture(depthDesc, nullptr);\n\n  createFramebuffer(getNativeDrawable());\n\n  renderPass_.colorAttachments.resize(1);\n  renderPass_.colorAttachments[0] = igl::RenderPassDesc::ColorAttachmentDesc{};\n  renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n  renderPass_.colorAttachments[0].clearColor = {1.0f, 0.0f, 1.0f, 1.0f};\n  renderPass_.depthAttachment.clearDepth = 1.0;\n\n  renderPass_.depthAttachment.loadAction = LoadAction::DontCare;\n\n  CommandQueueDesc desc{};\n  commandQueue_ = device_->createCommandQueue(desc, nullptr);\n\n  // Vertex buffer, Index buffer and Vertex Input. Buffers are allocated in GPU memory.\n  vb0_ = device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Vertex,\n                                          vertexData0,\n                                          sizeof(vertexData0),\n                                          ResourceStorage::Private,\n                                          0,\n                                          \"Buffer: vertex\"},\n                               nullptr);\n  ib0_ = device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Index,\n                                          indexData,\n                                          sizeof(indexData),\n                                          ResourceStorage::Private,\n                                          0,\n                                          \"Buffer: index\"},\n                               nullptr);\n\n  // create an Uniform buffers to store uniforms for 2 objects\n  for (uint32_t i = 0; i != kNumBufferedFrames; i++) {\n    ubPerFrame_.push_back(\n        device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Uniform,\n                                         &perFrame,\n                                         sizeof(UniformsPerFrame),\n                                         ResourceStorage::Shared,\n                                         BufferDesc::BufferAPIHintBits::UniformBlock,\n                                         \"Buffer: uniforms (per frame)\"},\n                              nullptr));\n\n    ubPerObject_.push_back(\n        device_->createBuffer(BufferDesc{BufferDesc::BufferTypeBits::Uniform,\n                                         perObject,\n                                         kNumCubes * sizeof(UniformsPerObject),\n                                         ResourceStorage::Shared,\n                                         BufferDesc::BufferAPIHintBits::UniformBlock,\n                                         \"Buffer: uniforms (per object)\"},\n                              nullptr));\n  }\n\n  {\n    VertexInputStateDesc desc;\n    desc.numAttributes = 3;\n    desc.attributes[0].format = VertexAttributeFormat::Float3;\n    desc.attributes[0].offset = offsetof(VertexPosUvw, position);\n    desc.attributes[0].bufferIndex = 0;\n    desc.attributes[0].name = \"pos\";\n    desc.attributes[0].location = 0;\n    desc.attributes[1].format = VertexAttributeFormat::Float3;\n    desc.attributes[1].offset = offsetof(VertexPosUvw, color);\n    desc.attributes[1].bufferIndex = 0;\n    desc.attributes[1].name = \"col\";\n    desc.attributes[1].location = 1;\n    desc.attributes[2].format = VertexAttributeFormat::Float2;\n    desc.attributes[2].offset = offsetof(VertexPosUvw, uv);\n    desc.attributes[2].bufferIndex = 0;\n    desc.attributes[2].name = \"st\";\n    desc.attributes[2].location = 2;\n    desc.numInputBindings = 1;\n    desc.inputBindings[0].stride = sizeof(VertexPosUvw);\n    vertexInput0_ = device_->createVertexInputState(desc, nullptr);\n  }\n\n  {\n    DepthStencilStateDesc desc;\n    desc.isDepthWriteEnabled = true;\n    desc.compareFunction = igl::CompareFunction::Less;\n    depthStencilState_ = device_->createDepthStencilState(desc, nullptr);\n  }\n\n  {\n    const uint32_t texWidth = 256;\n    const uint32_t texHeight = 256;\n    const TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::RGBA_UNorm8,\n                                                texWidth,\n                                                texHeight,\n                                                TextureDesc::TextureUsageBits::Sampled,\n                                                \"XOR pattern 1\");\n    texture0_ = device_->createTexture(desc, nullptr);\n    std::vector<uint32_t> pixels(texWidth * texHeight);\n    for (uint32_t y = 0; y != texHeight; y++) {\n      for (uint32_t x = 0; x != texWidth; x++) {\n        // create a XOR pattern 1\n        pixels[y * texWidth + x] = 0xFF000000 + ((x ^ y) << 16) + ((x ^ y) << 8) + (x ^ y);\n      }\n    }\n    texture0_->upload(TextureRangeDesc::new2D(0, 0, texWidth, texHeight), pixels.data());\n  }\n\n  {\n    const uint32_t texWidth = 256;\n    const uint32_t texHeight = 256;\n    const TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::RGBA_UNorm8,\n                                                texWidth,\n                                                texHeight,\n                                                TextureDesc::TextureUsageBits::Sampled,\n                                                \"XOR pattern 2\");\n    texture1_ = device_->createTexture(desc, nullptr);\n    std::vector<uint32_t> pixels(texWidth * texHeight);\n    for (uint32_t y = 0; y != texHeight; y++) {\n      for (uint32_t x = 0; x != texWidth; x++) {\n        // create a XOR pattern 2\n        pixels[y * texWidth + x] = 0x00FF0000 + ((x ^ y) << 16) + ((x ^ y) << 8) + (x ^ y);\n      }\n    }\n    texture1_->upload(TextureRangeDesc::new2D(0, 0, texWidth, texHeight), pixels.data());\n  }\n\n  {\n    igl::SamplerStateDesc desc = igl::SamplerStateDesc::newLinear();\n    desc.addressModeU = igl::SamplerAddressMode::Repeat;\n    desc.addressModeV = igl::SamplerAddressMode::Repeat;\n    desc.debugName = \"Sampler: linear\";\n    sampler_ = device_->createSamplerState(desc, nullptr);\n  }\n\n  // initialize random rotation axes for all cubes\n  for (uint32_t i = 0; i != kNumCubes; i++) {\n    axis_[i] = glm::sphericalRand(1.0f);\n  }\n\n  return true;\n}\n\nstatic void createRenderPipeline() {\n  if (renderPipelineState_Mesh_) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(framebuffer_);\n  RenderPipelineDesc desc;\n\n  desc.targetDesc.colorAttachments.resize(1);\n  desc.targetDesc.colorAttachments[0].textureFormat =\n      framebuffer_->getColorAttachment(0)->getFormat();\n\n  if (framebuffer_->getDepthAttachment()) {\n    desc.targetDesc.depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat();\n  }\n\n  desc.vertexInputState = vertexInput0_;\n  desc.shaderStages = ShaderStagesCreator::fromModuleStringInput(\n      *device_, codeVS, \"main\", \"\", codeFS, \"main\", \"\", nullptr);\n\n  desc.frontFaceWinding = igl::WindingMode::Clockwise;\n  desc.debugName = igl::genNameHandle(\"Pipeline: mesh\");\n  desc.fragmentUnitSamplerMap[0] = IGL_NAMEHANDLE(\"texture0\");\n  desc.fragmentUnitSamplerMap[1] = IGL_NAMEHANDLE(\"texture1\");\n  desc.uniformBlockBindingMap[0] = {std::make_pair(IGL_NAMEHANDLE(\"PerFrame\"), igl::NameHandle{})};\n  desc.uniformBlockBindingMap[1] = {std::make_pair(IGL_NAMEHANDLE(\"PerObject\"), igl::NameHandle{})};\n\n  renderPipelineState_Mesh_ = device_->createRenderPipeline(desc, nullptr);\n}\n\nvoid onDraw(void*) {\n  static uint32_t frameIndex = 0;\n  static float time_ = 0.0f;\n  // from igl/shell/renderSessions/Textured3DCubeSession.cpp\n  const float fov = float(45.0f * (M_PI / 180.0f));\n  const float aspectRatio = (float)width_ / (float)height_;\n  perFrame.proj = glm::perspectiveLH(fov, aspectRatio, 0.1f, 500.0f);\n  // place a \"camera\" behind the cubes, the distance depends on the total number of cubes\n  perFrame.view =\n      glm::translate(mat4(1.0f), vec3(0.0f, 0.0f, sqrtf(kNumCubes / 16) * 20.0f * half));\n  ubPerFrame_[frameIndex]->upload(&perFrame, igl::BufferRange(sizeof(perFrame)));\n\n  // rotate cubes around random axes\n  for (uint32_t i = 0; i != kNumCubes; i++) {\n    const float direction = powf(-1, (float)(i + 1));\n    const uint32_t cubesInLine = (uint32_t)sqrt(kNumCubes);\n    const vec3 offset = vec3(-1.5f * sqrt(kNumCubes) + 4.0f * (i % cubesInLine),\n                             -1.5f * sqrt(kNumCubes) + 4.0f * (i / cubesInLine),\n                             0);\n    perObject[i].model =\n        glm::rotate(glm::translate(mat4(1.0f), offset), direction * time_, axis_[i]);\n  }\n\n  ubPerObject_[frameIndex]->upload(&perObject, igl::BufferRange(sizeof(perObject)));\n\n  // Command buffers (1-N per thread): create, submit and forget\n  CommandBufferDesc cbDesc;\n  std::shared_ptr<ICommandBuffer> buffer = commandQueue_->createCommandBuffer(cbDesc, nullptr);\n\n  const igl::Viewport viewport = {0.0f, 0.0f, (float)width_, (float)height_, 0.0f, +1.0f};\n  const igl::ScissorRect scissor = {0, 0, (uint32_t)width_, (uint32_t)height_};\n\n  // This will clear the framebuffer\n  auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  commands->bindRenderPipelineState(renderPipelineState_Mesh_);\n  commands->bindViewport(viewport);\n  commands->bindScissorRect(scissor);\n  commands->pushDebugGroupLabel(\"Render Mesh\", igl::Color(1, 0, 0));\n  commands->bindVertexBuffer(0, *vb0_);\n  commands->bindDepthStencilState(depthStencilState_);\n  commands->bindBuffer(0, ubPerFrame_[frameIndex].get());\n  commands->bindTexture(0, igl::BindTarget::kFragment, texture0_.get());\n  commands->bindTexture(1, igl::BindTarget::kFragment, texture1_.get());\n  commands->bindSamplerState(0, igl::BindTarget::kFragment, sampler_.get());\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n  // Draw 2 cubes: we use uniform buffer to update matrices\n  for (uint32_t i = 0; i != kNumCubes; i++) {\n    commands->bindBuffer(1, ubPerObject_[frameIndex].get(), i * sizeof(UniformsPerObject));\n    commands->drawIndexed(3u * 6u * 2u);\n  }\n  commands->popDebugGroupLabel();\n  commands->endEncoding();\n\n  buffer->present(getNativeDrawable());\n\n  commandQueue_->submit(*buffer);\n\n  frameIndex = (frameIndex + 1) % kNumBufferedFrames;\n  time_ += 0.001;\n}\n\nint main(int argc, char* argv[]) {\n  if (initialize()) {\n    createRenderPipeline();\n    auto context = static_cast<igl::opengl::webgl::Context*>(&device_->getContext());\n    context->setCanvasBufferSize(width_, height_);\n    emscripten_set_main_loop_arg(onDraw, 0, 0, 1);\n    while (1) {\n      onDraw(0);\n    }\n  }\n  return EXIT_FAILURE; // not reached\n}\n"
  },
  {
    "path": "samples/wasm/Triangle.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#ifndef __EMSCRIPTEN__\n#error Unsupported OS\n#endif\n#include <emscripten/html5.h>\n\n#define GLFW_INCLUDE_NONE\n#include <GLFW/glfw3.h>\n#include <samples/wasm/Common.h>\n#include <igl/IGL.h>\n#include <igl/opengl/webgl/Context.h>\n#include <igl/opengl/webgl/Device.h>\n\nconstexpr const char* codeVS = R\"(#version 300 es\n\nprecision highp float;\n\nout vec3 vColor;\nconst vec2 pos[3] = vec2[3](\n\tvec2(-0.6, -0.4),\n\tvec2( 0.6, -0.4),\n\tvec2( 0.0,  0.6)\n);\nconst vec3 col[3] = vec3[3](\n\tvec3(1.0, 0.0, 0.0),\n\tvec3(0.0, 1.0, 0.0),\n\tvec3(0.0, 0.0, 1.0)\n);\nvoid main() {\n\tgl_Position = vec4(pos[gl_VertexID], 0.0, 1.0);\n\tvColor = col[gl_VertexID];\n}\n)\";\n\nconstexpr const char* codeFS = R\"(#version 300 es\n\nprecision highp float;\n\nin vec3 vColor;\nlayout (location=0) out vec4 oColor;\nvoid main() {\n\toColor = vec4(vColor, 1.0);\n}\n)\";\n\nusing namespace igl;\n\nGLFWwindow* window_ = nullptr;\nint width_ = 0;\nint height_ = 0;\n\nstd::unique_ptr<IDevice> device_;\nstd::shared_ptr<ICommandQueue> commandQueue_;\nRenderPassDesc renderPass_;\nstd::shared_ptr<IFramebuffer> framebuffer_;\nstd::shared_ptr<IRenderPipelineState> renderPipelineState_Triangle_;\n\nstatic bool initWindow(GLFWwindow** outWindow) {\n  if (!glfwInit()) {\n    return false;\n  }\n\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);\n  glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);\n  glfwWindowHint(GLFW_VISIBLE, true);\n  glfwWindowHint(GLFW_DOUBLEBUFFER, true);\n  glfwWindowHint(GLFW_SRGB_CAPABLE, true);\n  glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_API);\n  glfwWindowHint(GLFW_RESIZABLE, GLFW_TRUE);\n\n  getRenderingBufferSize(width_, height_);\n  GLFWwindow* window = glfwCreateWindow(width_, height_, \"WebGL Triangle\", nullptr, nullptr);\n\n  if (!window) {\n    glfwTerminate();\n    return false;\n  }\n\n  glfwSetErrorCallback([](int error, const char* description) {\n    printf(\"GLFW Error (%i): %s\\n\", error, description);\n  });\n\n  glfwSetKeyCallback(window, [](GLFWwindow* window, int key, int, int action, int) {\n    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {\n      glfwSetWindowShouldClose(window, GLFW_TRUE);\n    }\n  });\n\n  // @lint-ignore CLANGTIDY\n  glfwSetWindowSizeCallback(window, [](GLFWwindow* /*window*/, int width, int height) {\n    printf(\"Window resized! width=%d, height=%d\\n\", width, height);\n  });\n\n  if (outWindow) {\n    *outWindow = window;\n  }\n\n  return true;\n}\n\nstatic void initIGL() {\n  // create a device\n  {\n    auto ctx = std::make_unique<igl::opengl::webgl::Context>(\"#canvas\");\n    device_ = std::make_unique<igl::opengl::webgl::Device>(std::move(ctx));\n\n    IGL_DEBUG_ASSERT(device_);\n  }\n\n  // Command queue: backed by different types of GPU HW queues\n  CommandQueueDesc desc{};\n  commandQueue_ = device_->createCommandQueue(desc, nullptr);\n\n  // Color attachment\n  renderPass_.colorAttachments[0] = igl::RenderPassDesc::ColorAttachmentDesc{};\n  renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n  renderPass_.colorAttachments[0].clearColor = {1.0f, 1.0f, 1.0f, 1.0f};\n  renderPass_.depthAttachment.loadAction = LoadAction::DontCare;\n}\n\nstatic void createRenderPipeline() {\n  if (renderPipelineState_Triangle_) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(framebuffer_);\n\n  RenderPipelineDesc desc;\n\n  desc.targetDesc.colorAttachments.resize(1);\n\n  // @fb-only\n  if (framebuffer_->getColorAttachment(0)) {\n    desc.targetDesc.colorAttachments[0].textureFormat =\n        framebuffer_->getColorAttachment(0)->getFormat();\n  }\n\n  if (framebuffer_->getDepthAttachment()) {\n    desc.targetDesc.depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat();\n  }\n\n  desc.shaderStages = ShaderStagesCreator::fromModuleStringInput(\n      *device_, codeVS, \"main\", \"\", codeFS, \"main\", \"\", nullptr);\n  renderPipelineState_Triangle_ = device_->createRenderPipeline(desc, nullptr);\n  IGL_DEBUG_ASSERT(renderPipelineState_Triangle_);\n}\n\nstatic std::shared_ptr<ITexture> getNativeDrawable() {\n  const auto& platformDevice = device_->getPlatformDevice<opengl::webgl::PlatformDevice>();\n  IGL_DEBUG_ASSERT(platformDevice != nullptr);\n\n  getRenderingBufferSize(width_, height_);\n\n  Result ret;\n  std::shared_ptr<ITexture> drawable =\n      platformDevice->createTextureFromNativeDrawable(width_, height_, &ret);\n\n  IGL_DEBUG_ASSERT(ret.isOk(), ret.message.c_str());\n  IGL_DEBUG_ASSERT(drawable != nullptr);\n  return drawable;\n}\n\nstatic void createFramebuffer(const std::shared_ptr<ITexture>& nativeDrawable) {\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = nativeDrawable;\n\n  const TextureDesc desc = TextureDesc::new2D(nativeDrawable->getFormat(),\n                                              nativeDrawable->getDimensions().width,\n                                              nativeDrawable->getDimensions().height,\n                                              TextureDesc::TextureUsageBits::Attachment |\n                                                  TextureDesc::TextureUsageBits::Sampled,\n                                              framebufferDesc.debugName.c_str());\n\n  framebufferDesc.colorAttachments[1].texture = device_->createTexture(desc, nullptr);\n  framebuffer_ = device_->createFramebuffer(framebufferDesc, nullptr);\n  IGL_DEBUG_ASSERT(framebuffer_);\n}\n\nstatic void render(const std::shared_ptr<ITexture>& nativeDrawable) {\n  const auto size = framebuffer_->getColorAttachment(0)->getSize();\n  if (size.width != width_ || size.height != height_) {\n    createFramebuffer(nativeDrawable);\n  } else {\n    framebuffer_->updateDrawable(nativeDrawable);\n  }\n\n  // Command buffers (1-N per thread): create, submit and forget\n  CommandBufferDesc cbDesc;\n  std::shared_ptr<ICommandBuffer> buffer = commandQueue_->createCommandBuffer(cbDesc, nullptr);\n\n  const igl::Viewport viewport = {0.0f, 0.0f, (float)width_, (float)height_, 0.0f, +1.0f};\n  const igl::ScissorRect scissor = {0, 0, (uint32_t)width_, (uint32_t)height_};\n\n  // This will clear the framebuffer\n  auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  commands->bindRenderPipelineState(renderPipelineState_Triangle_);\n  commands->bindViewport(viewport);\n  commands->bindScissorRect(scissor);\n  commands->pushDebugGroupLabel(\"Render Triangle\", igl::Color(1, 0, 0));\n  commands->draw(3, 0, 3);\n  commands->popDebugGroupLabel();\n  commands->endEncoding();\n\n  buffer->present(nativeDrawable);\n\n  commandQueue_->submit(*buffer);\n}\n\nvoid emscriptenMainLoopCallback() {\n  render(getNativeDrawable());\n  glfwPollEvents();\n}\n\nint main(int argc, char* argv[]) {\n  renderPass_.colorAttachments.resize(1);\n  initWindow(&window_);\n  initIGL();\n\n  createFramebuffer(getNativeDrawable());\n  createRenderPipeline();\n\n  // Main loop\n  emscripten_set_main_loop(&emscriptenMainLoopCallback, 0, 1);\n\n  renderPipelineState_Triangle_.reset();\n  framebuffer_.reset();\n  commandQueue_.reset();\n  device_.reset(nullptr);\n\n  glfwDestroyWindow(window_);\n  glfwTerminate();\n\n  return 0;\n}\n"
  },
  {
    "path": "samples/wasm/igl.html",
    "content": "<!doctype html>\n<html lang=\"en-us\" data-theme=\"cupcake\">\n\n<head>\n  <meta charset=\"utf-8\">\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n  <title>IGL WebGL Sample</title>\n  <script src=\"https://cdn.tailwindcss.com\"></script>\n  <link href=\"https://cdn.jsdelivr.net/npm/daisyui@3.3.1/dist/full.css\" rel=\"stylesheet\" type=\"text/css\" />\n</head>\n\n<body>\n  <div class=\"flex justify-center items-center h-screen\">\n    <div class=\"flex justify-center items-center\">\n      <div id=\"spinner-container\"\n        class=\"flex flex-col w-[768px] h-[768px] justify-center items-center border-2 rounded-md\">\n        <span class=\"loading loading-ring loading-lg\"></span>\n        <h5 class=\"text-xl font-medium leading-tight mt-2\">Loading</h5>\n      </div>\n      <div id=\"canvas-container\" class=\"hidden flex flex-col justify-center items-center\">\n        <canvas id=\"canvas\" class=\"w-[768px] h-[768px]\" oncontextmenu=\"event.preventDefault()\" tabindex=-1 />\n      </div>\n      <div class=\"flex flex-col justify-end w-96 h-[768px] form-control ml-8\">\n        <label for=\"resize-canvas\" class=\"label cursor-pointer justify-start\">\n          <input id=\"resize-canvas\" type=\"checkbox\" class=\"checkbox checkbox-primary\" />\n          <span class=\"label-text ml-4\">Resize Canvas</span>\n        </label>\n        <label for=\"hide-pointer\" class=\"label cursor-pointer justify-start\">\n          <input id=\"hide-pointer\" type=\"checkbox\" class=\"checkbox checkbox-primary\"\n            onchange=\"handleHideMousePointer(this)\" />\n          <span class=\"label-text ml-4\">Lock/Hide Mouse Pointer</span>\n        </label>\n        <label for=\"full-screen\" class=\"label cursor-pointer justify-start\">\n          <button class=\"btn btn-primary btn-outline\" onclick=\"handleFullscreen(this)\">Enter fullscreen</button>\n        </label>\n        <label for=\"output\" class=\"block mt-4 text-sm font-medium text-gray-900 dark:text-white\">Output</label>\n        <textarea id=\"output\" rows=\"8\" readonly class=\"textarea textarea-primary rounded-md mt-2 text-xs resize-none\"\n          placeholder=\"\"></textarea>\n      </div>\n    </div>\n  </div>\n\n  <script type='text/javascript'>\n    var canvasContainerElement = document.getElementById('canvas-container');\n    var canvasElement = document.getElementById('canvas');\n    var resizeCanvasCheckbox = document.getElementById('resize-canvas');\n    var spinnerElement = document.getElementById('spinner-container');\n    var hideMousePointerElement = document.getElementById('hide-pointer');\n    var outputElement = document.getElementById('output');\n\n    function output(text) {\n      console.log(text);\n      if (outputElement) {\n        var date = new Date(Date.now())\n        outputElement.value += date.toLocaleDateString(undefined, { year: \"2-digit\", month: \"2-digit\", day: \"2-digit\", hour: \"numeric\", minute: \"numeric\", second: \"numeric\" }) + \": \" + text + \"\\n\";\n        outputElement.scrollTop = outputElement.scrollHeight; // focus on bottom\n      }\n    }\n\n    var Module = {\n      preRun: [],\n      postRun: [],\n      print: (function () {\n        if (outputElement) outputElement.value = ''; // clear browser cache\n        return function (text) {\n          output(text);\n        };\n      })(),\n      printErr: (function () {\n        if (outputElement) outputElement.value = ''; // clear browser cache\n        return function (text) {\n          output(text);\n        };\n      })(),\n      onRuntimeInitialized: function () {\n        output(\"WASM runtime has been initialized.\");\n        canvasContainerElement.classList.remove(\"hidden\");\n        spinnerElement.classList.add(\"hidden\");\n      },\n      canvas: (() => {\n        var canvas = document.getElementById('canvas');\n\n        // As a default initial behavior, pop up an alert when webgl context is lost. To make your\n        // application robust, you may want to override this behavior before shipping!\n        // See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2\n        // output(\"Add event listener to canvas\")\n        canvas.addEventListener(\"webglcontextlost\", (e) => {\n          output('WebGL context lost. You will need to reload the page.');\n          e.preventDefault();\n        }, false);\n\n        return canvas;\n      })(),\n      totalDependencies: 0,\n      monitorRunDependencies: (left) => {\n        Module.totalDependencies = Math.max(Module.totalDependencies, left);\n        output(`${Module.totalDependencies - left}/${Module.totalDependencies} dependencies loaded`);\n      }\n    };\n    window.onerror = () => {\n      Module.print('Exception thrown, see JavaScript console');\n      spinnerElement.classList.add(\"hidden\");\n      canvasContainerElement.classList.add(\"hidden\");\n    };\n\n    window.addEventListener(\"fullscreenchange\", (event) => {\n      if (!resizeCanvasCheckbox.checked) {\n        return;\n      }\n\n      let classNamesToRemove = [];\n      canvasElement.classList.forEach((value, key, listObj) => {\n        if (value.match(/[w|h]-[[0-9]+px]/)) {\n          classNamesToRemove.push(value);\n        }\n      });\n      for (let className of classNamesToRemove) {\n        canvasElement.classList.remove(className);\n      }\n\n      if (document.fullscreenElement) {\n        Module.print(`Enter fullscreen width=${window.screen.width} height=${window.screen.height}`);\n        canvasElement.classList.add(`w-[${window.screen.width}px]`);\n        canvasElement.classList.add(`h-[${window.screen.height}px]`);\n      } else {\n        Module.print(\"Exit fullscreen\");\n        canvasElement.classList.add(\"w-[768px]\");\n        canvasElement.classList.add(\"h-[768px]\");\n      }\n    });\n\n    function handleHideMousePointer(checkElement) {\n      Module.print('Hide Mouse Pointer: ' + checkElement.checked);\n      if (checkElement.checked) {\n        canvasContainerElement.classList.add(\"cursor-none\");\n      } else {\n        canvasContainerElement.classList.remove(\"cursor-none\");\n      }\n    }\n\n    function handleFullscreen() {\n      canvasContainerElement.requestFullscreen();\n    }\n  </script>\n  {{{ SCRIPT }}}\n</body>\n\n</html>\n"
  },
  {
    "path": "shell/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nset(PROJECT_NAME \"Shell\")\n\nif(WIN32)\n  add_definitions(\"-DNOMINMAX\")\n  add_definitions(\"-D_USE_MATH_DEFINES=1\")\nendif()\n\nfile(GLOB SHELL_SHARED_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     shared/fileLoader/*.cpp\n     shared/imageLoader/*.cpp\n     shared/extension/*.cpp\n     shared/input/*.cpp\n     shared/platform/*.cpp\n     shared/renderSession/*.cpp\n     shared/netservice/*.cpp)\n\nif(APPLE)\n  file(GLOB SHELL_FILELOADER_PLATFORM_SRC LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n       shared/fileLoader/apple/*.cpp)\nelseif(ANDROID)\n  file(GLOB SHELL_FILELOADER_PLATFORM_SRC LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n       shared/fileLoader/android/*.cpp)\nelseif(UNIX AND NOT APPLE)\n  file(GLOB SHELL_FILELOADER_PLATFORM_SRC LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n       shared/fileLoader/linux/*.cpp)\nelseif(WIN32)\n  file(GLOB SHELL_FILELOADER_PLATFORM_SRC LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n       shared/fileLoader/win/*.cpp)\nelse()\n  set(SHELL_FILELOADER_PLATFORM_SRC)\nendif()\n\nlist(APPEND SHELL_SHARED_SRC_FILES ${SHELL_FILELOADER_PLATFORM_SRC})\nfile(GLOB SHELL_SHARED_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     shared/fileLoader/*.h shared/imageLoader/*.h shared/extension/*.h shared/input/*.h shared/platform/*.h shared/renderSession/*.h shared/netservice/*.h)\n\nadd_library(IGLShellShared ${SHELL_SHARED_SRC_FILES} ${SHELL_SHARED_HEADER_FILES})\n\ntarget_include_directories(IGLShellShared PUBLIC \"${CMAKE_CURRENT_BINARY_DIR}/include_renderSessions\")\ntarget_include_directories(IGLShellShared PUBLIC \"${CMAKE_CURRENT_BINARY_DIR}/include_shared\")\n\ntarget_link_libraries(IGLShellShared PUBLIC fmt)\ntarget_link_libraries(IGLShellShared PUBLIC IGLLibrary)\ntarget_link_libraries(IGLShellShared PUBLIC IGLUimgui)\ntarget_link_libraries(IGLShellShared PUBLIC IGLUmanagedUniformBuffer)\ntarget_link_libraries(IGLShellShared PUBLIC IGLUsimdtypes)\ntarget_link_libraries(IGLShellShared PUBLIC IGLUsimple_renderer)\ntarget_link_libraries(IGLShellShared PUBLIC IGLUshaderCross)\ntarget_link_libraries(IGLShellShared PUBLIC IGLUtexture_accessor)\ntarget_link_libraries(IGLShellShared PUBLIC IGLUtexture_loader)\ntarget_link_libraries(IGLShellShared PUBLIC IGLUuniform)\ntarget_link_libraries(IGLShellShared PUBLIC IGLstb)\n\nigl_set_folder(IGLShellShared \"IGL\")\nigl_set_cxxstd(IGLShellShared 20)\n\nif(WIN32 OR UNIX AND NOT APPLE AND NOT ANDROID)\n  add_subdirectory(windows)\nendif()\n\nif(APPLE)\n  if(IOS)\n    add_subdirectory(ios)\n  else()\n    add_subdirectory(mac)\n  endif()\nendif()\n\nif(ANDROID)\n  set(android_jni)\n  add_subdirectory(android)\nendif()\n\nif(IGL_WITH_OPENXR)\n  add_subdirectory(openxr)\nendif()\n\nmacro(ADD_SHELL_SESSION target libs)\n  set(shell_srcs apps/SessionApp.cpp renderSessions/${target}.cpp renderSessions/${target}.h)\n  add_shell_session_with_srcs(${target} \"${shell_srcs}\" \"${libs}\")\nendmacro()\n\nmacro(ADD_SHELL_SESSION_OPENXR_SIM target libs)\n  set(shell_srcs apps/SessionApp.cpp renderSessions/${target}.cpp renderSessions/${target}.h)\n  if(WIN32)\n    if(IGL_WITH_VULKAN)\n      set(compile_defs \"USE_VULKAN_BACKEND\" \"XR_USE_PLATFORM_WIN32\" \"XR_USE_GRAPHICS_API_VULKAN\")\n      add_shell_session_backend_openxr_sim(${target} vulkan \"${shell_srcs}\" \"${libs}\" \"${compile_defs}\")\n    endif()\n    if(IGL_WITH_OPENGL)\n      set(compile_defs \"USE_OPENGL_BACKEND\" \"XR_USE_PLATFORM_WIN32\" \"XR_USE_GRAPHICS_API_OPENGL\")\n      add_shell_session_backend_openxr_sim(${target} opengl \"${shell_srcs}\" \"${libs}\" \"${compile_defs}\")\n    endif()\n    if(IGL_WITH_OPENGLES)\n      message(FATAL_ERROR \"OpenGL ES for Windows OpenXR is not supported\")\n    endif()\n  endif()\nendmacro()\n\nif(IGL_WITH_SAMPLES)\n  add_shell_session(BasicFramebufferSession \"\")\n  add_shell_session(BindGroupSession \"\")\n  add_shell_session(BindlessBufferSession \"\")\n  add_shell_session(BufferMappingSession \"\")\n  add_shell_session(CheckerboardMipmapSession \"\")\n  add_shell_session(ColorSession \"\")\n  add_shell_session(CopyOperationsSession \"\")\n  add_shell_session(DepthBiasSession \"\")\n  add_shell_session(DrawInstancedSession \"\")\n  add_shell_session(EmptySession \"\")\n  add_shell_session(FireworksSession \"\")\n  add_shell_session(GPUStressSession \"\")\n  add_shell_session(GPUTimerSession \"\")\n  add_shell_session(HelloWorldSession \"\")\n  add_shell_session(ImguiSession \"\")\n  add_shell_session(MeshShaderTriangleSession \"\")\n  add_shell_session(MRTSession \"\")\n  add_shell_session(MultiDrawIndexedIndirectSession \"\")\n  add_shell_session(ScissorTestSession \"\")\n  add_shell_session(StencilOutlineSession \"\")\n  add_shell_session(Textured3DCubeSession \"\")\n  add_shell_session(TextureViewSession \"\")\n  add_shell_session(TinyMeshBindGroupSession \"\")\n  add_shell_session(TinyMeshSession \"\")\n  add_shell_session(TQMultiRenderPassSession \"\")\n  add_shell_session(TQSession \"\")\n  add_shell_session(WireframeSession \"\")\n  add_shell_session(YUVColorSession \"\")\n  if(IGL_WITH_OPENXR)\n    if(ANDROID)\n      add_shell_session(HelloOpenXRSession \"\")\n      add_shell_session(HandsOpenXRSession \"\")\n    endif()\n    if(WIN32)\n      add_shell_session_openxr_sim(HelloOpenXRSession \"\")\n    endif()\n  endif()\nendif()\n\nif(IGL_WITH_OPENXR AND ANDROID)\n  set(IGL_OPENXR_RENDER_SESSION CACHE STRING \"Textured3DCubeSession\")\n  if(DEFINED ENV{ANDROID_NDK})\n    cmake_path(SET NDK_PATH $ENV{ANDROID_NDK})\n  elseif(DEFINED ENV{NDK_ROOT})\n    cmake_path(SET NDK_PATH $ENV{NDK_ROOT})\n  else()\n    message(FATAL_ERROR \"Android NDK not found, check environment variables ANDROID_NDK and NDK_ROOT\")\n  endif()\n  if(IGL_WITH_VULKAN)\n    add_library(openxr-vulkan-Jni SHARED\n      openxr/mobile/XrApp.cpp\n      openxr/mobile/AndroidMain.cpp\n      \"${NDK_PATH}/sources/android/native_app_glue/android_native_app_glue.c\")\n    target_include_directories(openxr-vulkan-Jni PRIVATE \"${NDK_PATH}/sources/android/native_app_glue\")\n    target_link_libraries(openxr-vulkan-Jni PRIVATE IGLShellShared IGLShellOpenXR_AndroidVulkan ${IGL_OPENXR_RENDER_SESSION})\n    target_compile_definitions(openxr-vulkan-Jni PRIVATE \"USE_VULKAN_BACKEND\" \"XR_USE_PLATFORM_ANDROID\" \"XR_USE_GRAPHICS_API_VULKAN\")\n  endif()\n  if(IGL_WITH_OPENGLES)\n    add_library(openxr-gles-Jni SHARED\n      openxr/mobile/XrApp.cpp\n      openxr/mobile/AndroidMain.cpp\n      \"${NDK_PATH}/sources/android/native_app_glue/android_native_app_glue.c\")\n    target_include_directories(openxr-gles-Jni PRIVATE \"${NDK_PATH}/sources/android/native_app_glue\")\n    target_link_libraries(openxr-gles-Jni PRIVATE IGLShellShared IGLShellOpenXR_AndroidOpenGLES ${IGL_OPENXR_RENDER_SESSION})\n    target_compile_definitions(openxr-gles-Jni PRIVATE \"USE_OPENGL_BACKEND\" \"XR_USE_PLATFORM_ANDROID\" \"XR_USE_GRAPHICS_API_OPENGL_ES\")\n  endif()\nendif()\n"
  },
  {
    "path": "shell/android/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nset(PROJECT_NAME \"Android\")\n\nfile(GLOB PLATFORM_SHARED_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../shared/imageLoader/android/*.cpp ../shared/imageWriter/android/*.cpp ../shared/imageWriter/stb/*.cpp ../shared/fileLoader/android/*.cpp\n     ../shared/platform/android/*.cpp)\nfile(GLOB PLATFORM_SHARED_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../shared/imageLoader/android/*.h ../shared/imageWriter/android/*.h ../shared/fileLoader/android/*.h\n     ../shared/platform/android/*.h)\n\nadd_library(IGLShellPlatform ${PLATFORM_SHARED_SRC_FILES} ${PLATFORM_SHARED_HEADER_FILES})\n\ntarget_link_libraries(IGLShellPlatform PUBLIC IGLLibrary)\n\ntarget_include_directories(IGLShellPlatform PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src\")\n\nigl_set_folder(IGLShellPlatform \"IGL\")\nigl_set_cxxstd(IGLShellPlatform 20)\n\nfind_library(log-lib log)\nfind_library(android-lib android)\n\nfunction(ADD_SHELL_SESSION_WITH_SRCS target srcs libs)\n  file(GLOB PLATFORM_SHELL_SRC_FILES LIST_DIRECTORIES false ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/jni/*.cpp)\n\n  add_library(${target} SHARED ${srcs} \"${PLATFORM_SHELL_SRC_FILES}\")\n  target_compile_definitions(${target} PRIVATE \"IGL_SHELL_SESSION=${target}\")\n\n  target_link_libraries(${target} PUBLIC ${libs})\n  target_link_libraries(${target} PUBLIC IGLShellShared)\n  target_link_libraries(${target} PUBLIC IGLShellPlatform)\n  target_link_libraries(${target} PUBLIC ${log-lib})\n  target_link_libraries(${target} PUBLIC ${android-lib})\nendfunction()\n"
  },
  {
    "path": "shell/android/java/com/facebook/igl/sample/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          package=\"com.facebook.igl.shell\">\n  <uses-sdk android:minSdkVersion=\"29\"\n            android:targetSdkVersion=\"33\"/>\n  <uses-feature android:glEsVersion=\"0x00030000\"/>\n  <application\n      android:allowBackup=\"false\"\n      android:fullBackupContent=\"false\"\n      android:label=\"igl Shell\"\n      android:debuggable=\"true\">\n    <activity android:name=\"SampleActivity\"\n              android:theme=\"@android:style/Theme.NoTitleBar.Fullscreen\"\n              android:launchMode=\"singleTask\"\n              android:configChanges=\"orientation|keyboardHidden\">\n      <intent-filter>\n        <action android:name=\"android.intent.action.MAIN\" />\n        <category android:name=\"android.intent.category.LAUNCHER\" />\n      </intent-filter>\n    </activity>\n  </application>\n</manifest>\n"
  },
  {
    "path": "shell/android/java/com/facebook/igl/sample/SampleActivity.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\npackage com.facebook.igl.shell;\n\nimport android.app.Activity;\nimport android.graphics.Color;\nimport android.os.Bundle;\nimport android.view.Gravity;\nimport android.view.SurfaceView;\nimport android.view.View;\nimport android.view.WindowManager;\nimport android.widget.FrameLayout;\nimport android.widget.LinearLayout;\nimport android.widget.TextView;\n\npublic class SampleActivity extends Activity implements View.OnClickListener {\n  // UI\n  LinearLayout mMainView;\n  LinearLayout mTabBar;\n  FrameLayout mBackendViewFrame;\n\n  // initialize runtime backend configuration / context\n  private int curConfig = 0;\n  private SampleLib.RenderSessionConfig[] mConfigs;\n  private SurfaceView[] mTabViews;\n\n  private final int selectedTabColor = Color.BLUE;\n  private final int unSelectedTabColor = Color.GRAY;\n\n  protected boolean mEnableStencilBuffer = false;\n\n  @Override\n  protected void onCreate(Bundle icicle) {\n    super.onCreate(icicle);\n\n    // Keep screen on during benchmark - prevents the activity from going to sleep\n    getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);\n\n    // configure the mainview\n    mMainView = new LinearLayout(this);\n    mMainView.setOrientation(LinearLayout.VERTICAL);\n\n    // build tab bar from a horizontal linearlayout\n    mTabBar = new LinearLayout(this);\n    mTabBar.setOrientation(LinearLayout.HORIZONTAL);\n    mTabBar.setGravity(Gravity.CENTER);\n    mTabBar.setPadding(10, 5, 10, 5);\n\n    // set up tab and cached sample view for different backend types\n    mBackendViewFrame = new FrameLayout(this);\n    mConfigs = SampleLib.getRenderSessionConfigs();\n    mTabViews = new SurfaceView[mConfigs.length];\n    for (int i = 0; i < mConfigs.length; i++) {\n      // configure and insert tab\n      TextView item = new TextView(this);\n      item.setId(i);\n      item.setText(mConfigs[i].displayName);\n      item.setPadding(20, 0, 20, 0);\n      item.setOnClickListener(this);\n      mTabBar.addView(item);\n\n      // initialize sampleView for each backend type\n      SurfaceView backendView = null;\n      if (mConfigs[i].version.flavor == SampleLib.BackendFlavor.Vulkan) {\n        backendView =\n            new VulkanView(\n                getApplication(),\n                mConfigs[i].version,\n                mConfigs[i].swapchainColorTextureFormat,\n                getIntent());\n      } else if (mConfigs[i].version.flavor == SampleLib.BackendFlavor.OpenGL_ES) {\n        backendView =\n            new SampleView(\n                getApplication(),\n                mConfigs[i].version,\n                mConfigs[i].swapchainColorTextureFormat,\n                mEnableStencilBuffer,\n                getIntent());\n        ((SampleView) backendView).onPause();\n      }\n\n      // set current backend tab as selected\n      if (curConfig == i) {\n        item.setTextColor(selectedTabColor);\n        mBackendViewFrame.addView(backendView);\n      } else {\n        item.setTextColor(unSelectedTabColor);\n      }\n\n      // cache sampleView in map for reference\n      mTabViews[i] = backendView;\n    }\n\n    // setup and display the mainview\n    mMainView.addView(mTabBar);\n    mMainView.addView(mBackendViewFrame);\n    setContentView(mMainView);\n  }\n\n  @Override\n  public void onClick(View view) {\n    int prevConfig = curConfig;\n    for (int i = 0; i < mTabBar.getChildCount(); i++) {\n      TextView item = (TextView) mTabBar.getChildAt(i);\n\n      // if not the selected tab, reset the tab status and skip\n      if (view.getId() != item.getId()) {\n        item.setTextColor(unSelectedTabColor);\n        continue;\n      }\n\n      // reset main view if the selected backend is not the current\n      if (prevConfig != i) {\n        if (mConfigs[prevConfig].version.flavor != SampleLib.BackendFlavor.Vulkan) {\n          ((SampleView) mTabViews[prevConfig]).onPause();\n        }\n        item.setTextColor(selectedTabColor);\n        curConfig = i;\n        mBackendViewFrame.removeAllViews();\n        SurfaceView surfaceView = mTabViews[curConfig];\n        mBackendViewFrame.addView(surfaceView);\n        SampleLib.setActiveBackendVersion(mConfigs[curConfig].version);\n        if (mConfigs[curConfig].version.flavor != SampleLib.BackendFlavor.Vulkan) {\n          ((SampleView) mTabViews[curConfig]).onResume();\n        }\n      }\n    }\n  }\n\n  @Override\n  protected void onPause() {\n    super.onPause();\n    if (mConfigs[curConfig].version.flavor != SampleLib.BackendFlavor.Vulkan) {\n      ((SampleView) mTabViews[curConfig]).onPause();\n    }\n  }\n\n  @Override\n  protected void onResume() {\n    super.onResume();\n    if (mConfigs[curConfig].version.flavor != SampleLib.BackendFlavor.Vulkan) {\n      ((SampleView) mTabViews[curConfig]).onResume();\n    }\n  }\n}\n"
  },
  {
    "path": "shell/android/java/com/facebook/igl/sample/SampleLib.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\npackage com.facebook.igl.shell;\n\nimport android.content.Intent;\nimport android.content.res.AssetManager;\nimport android.view.Surface;\n\n// Wrapper for our native C++ library, which implements the actual rendering.\npublic class SampleLib {\n\n  static {\n    System.loadLibrary(\"sampleJni\");\n  }\n\n  // Must match igl/Common.h\n  public static enum BackendFlavor {\n    Invalid,\n    OpenGL,\n    OpenGL_ES,\n    Metal,\n    Vulkan,\n    // @fb-only\n  }\n\n  // Must match igl/DeviceFeatures.h\n  public static class BackendVersion {\n    BackendFlavor flavor;\n    byte majorVersion;\n    byte minorVersion;\n\n    public BackendVersion(BackendFlavor flavor, byte majorVersion, byte minorVersion) {\n      this.flavor = flavor;\n      this.majorVersion = majorVersion;\n      this.minorVersion = minorVersion;\n    }\n  }\n\n  public static native RenderSessionConfig[] getRenderSessionConfigs();\n\n  public static native void init(\n      BackendVersion backendVersion,\n      int swapchainColorTextureFormat,\n      AssetManager assetManager,\n      Surface surface,\n      Intent intent);\n\n  public static native void setActiveBackendVersion(BackendVersion backendVersion);\n\n  public static native void surfaceChanged(Surface surface, int width, int height);\n\n  public static native boolean render(float displayScale);\n\n  public static native void touchEvent(boolean isDown, float x, float y, float dx, float dy);\n\n  public static native void setClearColorValue(float r, float g, float b, float a);\n\n  public static native boolean isSRGBTextureFormat(int textureFormat);\n\n  public static native void surfaceDestroyed(Surface surface);\n\n  public static class RenderSessionConfig {\n    String displayName;\n    BackendVersion version;\n    int swapchainColorTextureFormat;\n\n    public RenderSessionConfig(\n        String displayName, BackendVersion version, int swapchainColorTextureFormat) {\n      this.displayName = displayName;\n      this.version = version;\n      this.swapchainColorTextureFormat = swapchainColorTextureFormat;\n    }\n  }\n}\n"
  },
  {
    "path": "shell/android/java/com/facebook/igl/sample/SampleView.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\npackage com.facebook.igl.shell;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.graphics.PixelFormat;\nimport android.opengl.EGL15;\nimport android.opengl.GLSurfaceView;\nimport android.util.Log;\nimport android.view.MotionEvent;\nimport java.util.concurrent.CountDownLatch;\nimport javax.microedition.khronos.egl.EGL10;\nimport javax.microedition.khronos.egl.EGLConfig;\nimport javax.microedition.khronos.egl.EGLContext;\nimport javax.microedition.khronos.egl.EGLDisplay;\nimport javax.microedition.khronos.egl.EGLSurface;\nimport javax.microedition.khronos.opengles.GL10;\n\n/// Simple view that sets up a GLES 2.0 rendering context\npublic class SampleView extends GLSurfaceView {\n  private static String TAG = \"SampleView\";\n  private float lastTouchX = 0.0f;\n  private float lastTouchY = 0.0f;\n  private CountDownLatch renderSessionInitLatch = new CountDownLatch(1);\n  private Intent mIntent;\n\n  public SampleView(\n      Context context,\n      SampleLib.BackendVersion backendVersion,\n      int swapchainColorTextureFormat,\n      boolean enableStencilBuffer,\n      Intent intent) {\n    super(context);\n    init(context, backendVersion, swapchainColorTextureFormat, enableStencilBuffer, intent);\n  }\n\n  public SampleView(\n      Context context,\n      SampleLib.BackendVersion backendVersion,\n      int swapchainColorTextureFormat,\n      Intent intent) {\n    super(context);\n    init(context, backendVersion, swapchainColorTextureFormat, false, intent);\n  }\n\n  private void init(\n      Context context,\n      SampleLib.BackendVersion backendVersion,\n      int swapchainColorTextureFormat,\n      boolean enableStencilBuffer,\n      Intent intent) {\n\n    // Uncomment to attach debugging\n    // android.os.Debug.waitForDebugger();\n    mIntent = intent;\n\n    setEGLContextFactory(new ContextFactory(backendVersion));\n\n    // Set the view to be transluscent since we provide an alpha channel below.\n    this.getHolder().setFormat(PixelFormat.TRANSLUCENT);\n\n    setEGLWindowSurfaceFactory(\n        new SurfaceFactory(SampleLib.isSRGBTextureFormat(swapchainColorTextureFormat)));\n\n    setEGLConfigChooser(new ConfigChooser(backendVersion, enableStencilBuffer));\n\n    setRenderer(\n        new Renderer(\n            context, backendVersion, swapchainColorTextureFormat, renderSessionInitLatch, mIntent));\n  }\n\n  public boolean isRenderSessionInitialized() {\n    return renderSessionInitLatch.getCount() == 0;\n  }\n\n  public void awaitRenderSessionInitialization() throws InterruptedException {\n    renderSessionInitLatch.await();\n  }\n\n  @Override\n  public void setBackgroundColor(int color) {\n    int A = (color >> 24) & 0xff;\n    int R = (color >> 16) & 0xff;\n    int G = (color >> 8) & 0xff;\n    int B = (color) & 0xff;\n    SampleLib.setClearColorValue(R, G, B, A);\n  }\n\n  @Override\n  public boolean onTouchEvent(MotionEvent e) {\n    float x = e.getX();\n    float y = e.getY();\n    float dx = x - lastTouchX;\n    float dy = y - lastTouchY;\n\n    lastTouchX = x;\n    lastTouchY = y;\n\n    switch (e.getAction()) {\n      case MotionEvent.ACTION_DOWN:\n        SampleLib.touchEvent(true, x, y, 0, 0);\n        return true;\n\n      case MotionEvent.ACTION_MOVE:\n        SampleLib.touchEvent(true, x, y, dx, dy);\n        return true;\n\n      case MotionEvent.ACTION_UP:\n        SampleLib.touchEvent(false, x, y, 0, 0);\n        return true;\n    }\n\n    return false;\n  }\n\n  /// Context factory: handles creating the EGL context for this view with the correct settings.\n  private static class ContextFactory implements GLSurfaceView.EGLContextFactory {\n\n    private final SampleLib.BackendVersion mBackendVersion;\n\n    public ContextFactory(SampleLib.BackendVersion version) {\n      mBackendVersion = version;\n    }\n\n    public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {\n      final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;\n      int[] attrib_list = {\n        EGL_CONTEXT_CLIENT_VERSION, mBackendVersion.majorVersion, EGL10.EGL_NONE\n      };\n      EGLContext context =\n          egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);\n      checkEglError(\"Error creating EGL context\", egl);\n      return context;\n    }\n\n    public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context) {\n      egl.eglDestroyContext(display, context);\n    }\n  }\n\n  private static void checkEglError(String prompt, EGL10 egl) {\n    int error;\n    while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS) {\n      Log.e(TAG, String.format(\"%s: EGL error: 0x%x\", prompt, error));\n    }\n  }\n\n  private static class SurfaceFactory implements GLSurfaceView.EGLWindowSurfaceFactory {\n    final int EGL_GL_COLORSPACE_KHR = 0x309D;\n    final int EGL_GL_COLORSPACE_SRGB_KHR = 0x3089;\n    final int EGL_GL_COLORSPACE_LINEAR_KHR = 0x308A;\n\n    private boolean mIsSRGBColorSpace;\n\n    SurfaceFactory(boolean isSRGB) {\n      mIsSRGBColorSpace = isSRGB;\n    }\n\n    @Override\n    public EGLSurface createWindowSurface(\n        EGL10 egl10, EGLDisplay eglDisplay, EGLConfig eglConfig, Object nativeWindow) {\n      String eglExtensionString = egl10.eglQueryString(eglDisplay, egl10.EGL_EXTENSIONS);\n      if (!eglExtensionString.contains(\"EGL_KHR_gl_colorspace\")) {\n        return egl10.eglCreateWindowSurface(eglDisplay, eglConfig, nativeWindow, null);\n      }\n      int[] configAttribs = {\n        EGL_GL_COLORSPACE_KHR,\n        (mIsSRGBColorSpace ? EGL_GL_COLORSPACE_SRGB_KHR : EGL_GL_COLORSPACE_LINEAR_KHR),\n        EGL10.EGL_NONE\n      };\n\n      return egl10.eglCreateWindowSurface(eglDisplay, eglConfig, nativeWindow, configAttribs);\n    }\n\n    @Override\n    public void destroySurface(EGL10 egl10, EGLDisplay eglDisplay, EGLSurface eglSurface) {\n      egl10.eglDestroySurface(eglDisplay, eglSurface);\n    }\n  }\n\n  /// Config chooser: handles specifying the requirements for the EGL config and choosing the\n  // correct one.\n  private static class ConfigChooser implements GLSurfaceView.EGLConfigChooser {\n\n    private final SampleLib.BackendVersion mBackendVersion;\n\n    private boolean mEnableStencilBuffer = false;\n\n    public ConfigChooser(SampleLib.BackendVersion version, boolean enableStencilBuffer) {\n      mBackendVersion = version;\n      mEnableStencilBuffer = enableStencilBuffer;\n    }\n\n    public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display) {\n      final int EGL_OPENGL_ES2_BIT = 4;\n\n      // Set ourselves a strict configuration: RGBA8888, 16-bit depth buffer, no stencil.\n      final int[] configAttribs = {\n        EGL10.EGL_RED_SIZE, 8,\n        EGL10.EGL_GREEN_SIZE, 8,\n        EGL10.EGL_BLUE_SIZE, 8,\n        EGL10.EGL_ALPHA_SIZE, 8,\n        EGL10.EGL_DEPTH_SIZE, 16,\n        EGL10.EGL_STENCIL_SIZE, mEnableStencilBuffer ? 8 : 0,\n        EGL10.EGL_RENDERABLE_TYPE,\n            (mBackendVersion.majorVersion == (byte) 3)\n                ? EGL15.EGL_OPENGL_ES3_BIT\n                : EGL_OPENGL_ES2_BIT,\n        EGL10.EGL_NONE\n      };\n\n      int[] numConfigs = new int[1];\n      egl.eglChooseConfig(display, configAttribs, null, 0, numConfigs);\n\n      if (numConfigs[0] <= 0) {\n        throw new IllegalArgumentException(\"Couldn't find an appropriate EGL config\");\n      }\n\n      EGLConfig[] configs = new EGLConfig[1];\n      egl.eglChooseConfig(display, configAttribs, configs, 1, numConfigs);\n\n      return configs[0];\n    }\n  }\n\n  /// Renderer: This class communicates with our JNI library to implement the OpenGL rendering.\n  private static class Renderer implements GLSurfaceView.Renderer {\n    private final Context mContext;\n    private final Intent mIntent;\n    private final SampleLib.BackendVersion mBackendVersion;\n    private final int mSwapchainColorTextureFormat;\n    private CountDownLatch mRenderSessionInitLatch;\n\n    Renderer(\n        Context context,\n        SampleLib.BackendVersion backendVersion,\n        int swapchainColorTextureFormat,\n        CountDownLatch renderSessionInitLatch,\n        Intent intent) {\n      mContext = context;\n      mIntent = intent;\n      mBackendVersion = backendVersion;\n      mSwapchainColorTextureFormat = swapchainColorTextureFormat;\n      mRenderSessionInitLatch = renderSessionInitLatch;\n    }\n\n    public void onSurfaceCreated(GL10 gl, EGLConfig config) {\n      SampleLib.init(\n          mBackendVersion, mSwapchainColorTextureFormat, mContext.getAssets(), null, mIntent);\n\n      // Signal that application has being started.\n      mRenderSessionInitLatch.countDown();\n    }\n\n    public void onSurfaceChanged(GL10 gl, int width, int height) {\n      SampleLib.surfaceChanged(null, width, height);\n    }\n\n    public void onDrawFrame(GL10 gl) {\n      boolean shouldExit = SampleLib.render(mContext.getResources().getDisplayMetrics().density);\n      if (shouldExit) {\n        android.util.Log.i(\n            \"igl\", \"[IGL Benchmark] Java: Benchmark complete, waiting for logs to flush...\");\n        // Give logcat time to flush the final report before killing the process\n        try {\n          Thread.sleep(2000);\n        } catch (InterruptedException e) {\n          // Ignore\n        }\n        android.util.Log.i(\"igl\", \"[IGL Benchmark] Java: Exiting process\");\n        System.exit(0);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "shell/android/java/com/facebook/igl/sample/VulkanView.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\npackage com.facebook.igl.shell;\n\nimport android.content.Context;\nimport android.content.Intent;\nimport android.graphics.PixelFormat;\nimport android.os.Handler;\nimport android.os.Looper;\nimport android.os.Message;\nimport android.util.Log;\nimport android.view.Choreographer;\nimport android.view.MotionEvent;\nimport android.view.Surface;\nimport android.view.SurfaceHolder;\nimport android.view.SurfaceView;\n\n// Simple view that sets up a Vulkan Render view\npublic class VulkanView extends SurfaceView\n    implements SurfaceHolder.Callback2, Choreographer.FrameCallback {\n  private static String TAG = \"VulkanView\";\n  private float lastTouchX = 0.0f;\n  private float lastTouchY = 0.0f;\n  Context mContext;\n  RenderThread mRenderThread;\n  private final SampleLib.BackendVersion mBackendVersion;\n  private final int mSwapchainColorTextureFormat;\n  private Intent mIntent;\n\n  public VulkanView(\n      Context context,\n      SampleLib.BackendVersion backendVersion,\n      int swapchainColorTextureFormat,\n      Intent intent) {\n\n    super(context);\n\n    // Set the view to be translucent since we provide an alpha channel below.\n    this.getHolder().setFormat(PixelFormat.TRANSLUCENT);\n    this.getHolder().addCallback(this);\n\n    mContext = context;\n    mBackendVersion = backendVersion;\n    mSwapchainColorTextureFormat = swapchainColorTextureFormat;\n    mIntent = intent;\n  }\n\n  @Override\n  public boolean onTouchEvent(MotionEvent e) {\n    float x = e.getX();\n    float y = e.getY();\n    float dx = x - lastTouchX;\n    float dy = y - lastTouchY;\n\n    lastTouchX = x;\n    lastTouchY = y;\n\n    switch (e.getAction()) {\n      case MotionEvent.ACTION_DOWN:\n        SampleLib.touchEvent(true, x, y, 0, 0);\n        return true;\n\n      case MotionEvent.ACTION_MOVE:\n        SampleLib.touchEvent(true, x, y, dx, dy);\n        return true;\n\n      case MotionEvent.ACTION_UP:\n        SampleLib.touchEvent(false, x, y, 0, 0);\n        return true;\n    }\n\n    return false;\n  }\n\n  @Override\n  public void surfaceRedrawNeeded(SurfaceHolder surfaceHolder) {}\n\n  @Override\n  public void surfaceCreated(SurfaceHolder surfaceHolder) {\n    // Start rendering on the RenderThread\n    mRenderThread =\n        new RenderThread(mContext, surfaceHolder, mBackendVersion, mSwapchainColorTextureFormat);\n    mRenderThread.setName(\"Vulkan Render Thread\");\n    mRenderThread.start();\n    mRenderThread.waitUntilReady();\n\n    RenderHandler rh = mRenderThread.getHandler();\n    if (rh != null) {\n      rh.sendSurfaceCreated();\n      // start the draw events\n      Choreographer.getInstance().postFrameCallback(this);\n    }\n  }\n\n  @Override\n  public void surfaceChanged(SurfaceHolder surfaceHolder, int format, int width, int height) {\n    RenderHandler rh = mRenderThread.getHandler();\n    if (rh != null) {\n      rh.sendSurfaceChanged(format, width, height);\n    }\n  }\n\n  @Override\n  public void surfaceDestroyed(SurfaceHolder surfaceHolder) {\n    // Stop render thread\n    RenderHandler rh = mRenderThread.getHandler();\n    if (rh != null) {\n      rh.sendShutdown();\n      try {\n        mRenderThread.join();\n      } catch (InterruptedException ie) {\n        // not expected\n        throw new RuntimeException(\"join was interrupted\", ie);\n      }\n    }\n    mRenderThread = null;\n\n    // If the callback was posted, remove it.  Without this, we could get one more\n    // call on doFrame().\n    Choreographer.getInstance().removeFrameCallback(this);\n  }\n\n  /*\n   * Choreographer callback, called near vsync.\n   *\n   * @see android.view.Choreographer.FrameCallback#doFrame(long)\n   */\n  @Override\n  public void doFrame(long frameTimeNanos) {\n    RenderHandler rh = mRenderThread.getHandler();\n    if (rh != null) {\n      Choreographer.getInstance().postFrameCallback(this);\n      rh.sendDoFrame(frameTimeNanos);\n    }\n  }\n\n  // Rendering thread\n  private class RenderThread extends Thread {\n    private Context mContext;\n    private SurfaceHolder mSurfaceHolder;\n    private volatile RenderHandler mHandler;\n\n    private Object mStartLock = new Object();\n    private boolean mReady = false;\n    private final SampleLib.BackendVersion mBackendVersion;\n    private final int mSwapchainColorTextureFormat;\n\n    public RenderThread(\n        Context context,\n        SurfaceHolder surfaceHolder,\n        SampleLib.BackendVersion backendVersion,\n        int swapchainColorTextureformat) {\n      mContext = context;\n      mSurfaceHolder = surfaceHolder;\n      mBackendVersion = backendVersion;\n      mSwapchainColorTextureFormat = swapchainColorTextureformat;\n    }\n\n    public RenderHandler getHandler() {\n      return mHandler;\n    }\n\n    @Override\n    public void run() {\n      Looper.prepare();\n      mHandler = new RenderHandler(this);\n      synchronized (mStartLock) {\n        mReady = true;\n        mStartLock.notify(); // signal waitUntilReady()\n      }\n\n      Looper.loop();\n\n      // surface has been destroyed\n      synchronized (mStartLock) {\n        mReady = false;\n      }\n      Surface surface = mSurfaceHolder.getSurface();\n      SampleLib.surfaceDestroyed(surface);\n    }\n\n    public void waitUntilReady() {\n      synchronized (mStartLock) {\n        while (!mReady) {\n          try {\n            mStartLock.wait();\n          } catch (InterruptedException ie) {\n            /* not expected */\n          }\n        }\n      }\n    }\n\n    public void surfaceCreated() {\n      Log.d(TAG, \"SurfaceCreated\");\n      Surface surface = mSurfaceHolder.getSurface();\n      SampleLib.init(\n          mBackendVersion, mSwapchainColorTextureFormat, mContext.getAssets(), surface, mIntent);\n    }\n\n    public void surfaceChanged(int width, int height) {\n      Surface surface = mSurfaceHolder.getSurface();\n      SampleLib.surfaceChanged(surface, width, height);\n    }\n\n    /** draw frame in response to a vsync event. */\n    private void doFrame(long timeStampNanos) {\n      long diff = System.nanoTime() - timeStampNanos;\n      long max = 16666667l - 2000000; // if we're within 2ms, don't bother\n      if (diff > max) {\n        // too much, drop a frame\n        Log.d(\n            TAG,\n            \"diff is \"\n                + (diff / 1000000.0)\n                + \" ms, max \"\n                + (max / 1000000.0)\n                + \", skipping render\");\n        return;\n      }\n\n      boolean shouldExit = SampleLib.render(mContext.getResources().getDisplayMetrics().density);\n      if (shouldExit) {\n        android.util.Log.i(\n            \"igl\", \"[IGL Benchmark] Java: Benchmark complete, waiting for logs to flush...\");\n        // Give logcat time to flush the final report before killing the process\n        try {\n          Thread.sleep(2000);\n        } catch (InterruptedException e) {\n          // Ignore\n        }\n        android.util.Log.i(\"igl\", \"[IGL Benchmark] Java: Exiting process\");\n        System.exit(0);\n      }\n    }\n\n    private void shutdown() {\n      Log.d(TAG, \"shutdown\");\n      Looper.myLooper().quit();\n    }\n  }\n\n  /**\n   * Handler for RenderThread. Used for messages sent from the UI thread to the render thread.\n   *\n   * <p>The object is created on the render thread, and the various \"send\" methods are called from\n   * the UI thread.\n   */\n  private static class RenderHandler extends Handler {\n    private static final int MSG_SURFACE_CREATED = 0;\n    private static final int MSG_SURFACE_CHANGED = 1;\n    private static final int MSG_DO_FRAME = 2;\n    private static final int MSG_SHUTDOWN = 3;\n\n    private RenderThread mRenderThread;\n\n    public RenderHandler(RenderThread rt) {\n      mRenderThread = rt;\n    }\n\n    public void sendSurfaceCreated() {\n      sendMessage(obtainMessage(RenderHandler.MSG_SURFACE_CREATED));\n    }\n\n    public void sendSurfaceChanged(@SuppressWarnings(\"unused\") int format, int width, int height) {\n      // ignore format\n      sendMessage(obtainMessage(RenderHandler.MSG_SURFACE_CHANGED, width, height));\n    }\n\n    public void sendDoFrame(long frameTimeNanos) {\n      sendMessage(\n          obtainMessage(\n              RenderHandler.MSG_DO_FRAME, (int) (frameTimeNanos >> 32), (int) frameTimeNanos));\n    }\n\n    public void sendShutdown() {\n      sendMessage(obtainMessage(RenderHandler.MSG_SHUTDOWN));\n    }\n\n    @Override // runs on RenderThread\n    public void handleMessage(Message msg) {\n      int what = msg.what;\n      // Log.d(TAG, \"RenderHandler [\" + this + \"]: what=\" + what);\n\n      if (mRenderThread == null) {\n        Log.w(TAG, \"RenderHandler.handleMessage: mRenderThread is null\");\n        return;\n      }\n\n      switch (what) {\n        case MSG_SURFACE_CREATED:\n          mRenderThread.surfaceCreated();\n          break;\n        case MSG_SURFACE_CHANGED:\n          mRenderThread.surfaceChanged(msg.arg1, msg.arg2);\n          break;\n        case MSG_DO_FRAME:\n          long timestamp = (((long) msg.arg1) << 32) | (((long) msg.arg2) & 0xffffffffL);\n          mRenderThread.doFrame(timestamp);\n          break;\n        case MSG_SHUTDOWN:\n          mRenderThread.shutdown();\n          break;\n        default:\n          throw new RuntimeException(\"unknown message \" + what);\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "shell/android/jni/Jni.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include \"TinyRenderer.h\"\n\n#include <android/asset_manager_jni.h>\n#include <android/native_window_jni.h>\n#include <memory>\n#include <shell/shared/renderSession/DefaultRenderSessionFactory.h>\n#include <shell/shared/renderSession/IRenderSessionFactory.h>\n#include <igl/Common.h>\n\nnamespace igl::samples {\n\nnamespace {\n[[maybe_unused]] std::string toString(std::optional<BackendVersion> backendVersion) {\n  if (!backendVersion) {\n    return \"{}\";\n  }\n\n  std::string str;\n  switch (backendVersion->flavor) {\n  case BackendFlavor::Invalid:\n    str = \"Invalid\";\n    break;\n  case BackendFlavor::OpenGL:\n    str = \"OpenGL\";\n    break;\n  case BackendFlavor::OpenGL_ES:\n    str = \"OpenGL_ES\";\n    break;\n  case BackendFlavor::Metal:\n    str = \"Metal\";\n    break;\n  case BackendFlavor::Vulkan:\n    str = \"Vulkan\";\n    break;\n  case BackendFlavor::D3D12:\n    str = \"D3D12\";\n    break;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  }\n\n  str += \" \" + std::to_string(static_cast<int>(backendVersion->majorVersion)) + \" \" +\n         std::to_string(static_cast<int>(backendVersion->minorVersion));\n  return str;\n}\n\n[[maybe_unused]] std::string toString(std::optional<size_t> rendererIndex) {\n  if (!rendererIndex) {\n    return \"{}\";\n  }\n\n  return std::to_string(*rendererIndex);\n}\n\nstd::unique_ptr<shell::IRenderSessionFactory> factory;\nstd::vector<std::unique_ptr<TinyRenderer>> renderers;\nstd::optional<BackendVersion> activeBackendVersion;\n\nconstexpr auto* kBackendFlavorClassName = \"com/facebook/igl/shell/SampleLib$BackendFlavor\";\nconstexpr auto* kBackendVersionClassName = \"com/facebook/igl/shell/SampleLib$BackendVersion\";\nconstexpr auto* kRenderSessionConfigClassName =\n    \"com/facebook/igl/shell/SampleLib$RenderSessionConfig\";\n\nstd::string toTypeSignature(const char* className) {\n  return std::string(\"L\") + className + std::string(\";\");\n}\n\nBackendFlavor toBackendFlavor(JNIEnv* env, jobject jbackendVersion) {\n  auto* jclass = env->GetObjectClass(jbackendVersion);\n  auto* jordinal = env->GetMethodID(jclass, \"ordinal\", \"()I\");\n  const auto ordinal = env->CallIntMethod(jbackendVersion, jordinal);\n  return static_cast<BackendFlavor>(static_cast<int>(ordinal));\n}\n\njobject toJava(JNIEnv* env, BackendFlavor backendFlavor) {\n  jclass jclass = env->FindClass(kBackendFlavorClassName);\n  const std::string returnType = std::string(\"()[\") + toTypeSignature(kBackendFlavorClassName);\n  jmethodID values = env->GetStaticMethodID(jclass, \"values\", returnType.c_str());\n  auto* backendFlavorValues = (jobjectArray)env->CallStaticObjectMethod(jclass, values);\n\n  jobject backendFlavorValue =\n      env->GetObjectArrayElement(backendFlavorValues, static_cast<int>(backendFlavor));\n\n  env->DeleteLocalRef(backendFlavorValues);\n  return backendFlavorValue;\n}\n\nstd::optional<BackendVersion> toBackendVersion(JNIEnv* env, jobject jbackendVersion) {\n  if (!jbackendVersion) {\n    return {};\n  }\n\n  auto* jclass = env->GetObjectClass(jbackendVersion);\n  auto* jflavor =\n      env->GetFieldID(jclass, \"flavor\", toTypeSignature(kBackendFlavorClassName).c_str());\n  auto* jmajorVersion = env->GetFieldID(jclass, \"majorVersion\", \"B\");\n  auto* jminorVersion = env->GetFieldID(jclass, \"minorVersion\", \"B\");\n\n  return BackendVersion{\n      .flavor = toBackendFlavor(env, env->GetObjectField(jbackendVersion, jflavor)),\n      .majorVersion = static_cast<uint8_t>(env->GetByteField(jbackendVersion, jmajorVersion)),\n      .minorVersion = static_cast<uint8_t>(env->GetByteField(jbackendVersion, jminorVersion))};\n}\n\njobject toJava(JNIEnv* env, BackendVersion backendVersion) {\n  jclass jclass = env->FindClass(kBackendVersionClassName);\n  const std::string methodSignature =\n      std::string(\"(\") + toTypeSignature(kBackendFlavorClassName) + \"BB)V\";\n  jmethodID constructor = env->GetMethodID(jclass, \"<init>\", methodSignature.c_str());\n\n  jobject jbackendFlavor = toJava(env, backendVersion.flavor);\n  jobject ret = env->NewObject(jclass,\n                               constructor,\n                               jbackendFlavor,\n                               backendVersion.majorVersion,\n                               backendVersion.minorVersion);\n  env->DeleteLocalRef(jbackendFlavor);\n  return ret;\n}\n\njobject toJava(JNIEnv* env, const shell::RenderSessionConfig& config) {\n  jclass jclass = env->FindClass(kRenderSessionConfigClassName);\n  const std::string methodSignature =\n      std::string(\"(Ljava/lang/String;\") + toTypeSignature(kBackendVersionClassName) + \"I)V\";\n  jmethodID constructor = env->GetMethodID(jclass, \"<init>\", methodSignature.c_str());\n\n  jstring jdisplayName = env->NewStringUTF(config.displayName.c_str());\n  jobject jbackendVersion = toJava(env, config.backendVersion);\n  const jint jswapchainColorTextureFormat = static_cast<int>(config.swapchainColorTextureFormat);\n  jobject ret = env->NewObject(\n      jclass, constructor, jdisplayName, jbackendVersion, jswapchainColorTextureFormat);\n  env->DeleteLocalRef(jdisplayName);\n  env->DeleteLocalRef(jbackendVersion);\n  return ret;\n}\n\njobjectArray toJava(JNIEnv* env, const std::vector<shell::RenderSessionConfig>& configs) {\n  jobjectArray ret = nullptr;\n  auto* jclass = env->FindClass(kRenderSessionConfigClassName);\n  ret = env->NewObjectArray(configs.size(), jclass, nullptr);\n  for (size_t i = 0; i < configs.size(); ++i) {\n    env->SetObjectArrayElement(ret, i, toJava(env, configs[i]));\n  }\n\n  return ret;\n}\n\nstd::optional<size_t> findRendererIndex(std::optional<BackendVersion> backendVersion) {\n  if (!backendVersion) {\n    return {};\n  }\n\n  for (size_t i = 0; i < renderers.size(); ++i) {\n    if (renderers[i]->backendVersion() == backendVersion) {\n      return i;\n    }\n  }\n\n  return {};\n}\n} // namespace\n\nextern \"C\" {\nJNIEXPORT jobjectArray JNICALL\nJava_com_facebook_igl_shell_SampleLib_getRenderSessionConfigs(JNIEnv* env, jobject obj);\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_init(JNIEnv* env,\n                                                                  jobject obj,\n                                                                  jobject jbackendVersion,\n                                                                  jint jswapchainColorTextureFormat,\n                                                                  jobject javaAssetManager,\n                                                                  jobject surface,\n                                                                  jobject intent);\nJNIEXPORT void JNICALL\nJava_com_facebook_igl_shell_SampleLib_setActiveBackendVersion(JNIEnv* env,\n                                                              jobject obj,\n                                                              jobject jbackendVersion);\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_surfaceChanged(JNIEnv* env,\n                                                                            jobject obj,\n                                                                            jobject surface,\n                                                                            jint width,\n                                                                            jint height);\nJNIEXPORT jboolean JNICALL Java_com_facebook_igl_shell_SampleLib_render(JNIEnv* env,\n                                                                        jobject obj,\n                                                                        jfloat displayScale);\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_surfaceDestroyed(JNIEnv* env,\n                                                                              jobject obj,\n                                                                              jobject surface);\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_touchEvent(JNIEnv* env,\n                                                                        jobject obj,\n                                                                        jboolean isDown,\n                                                                        jfloat x,\n                                                                        jfloat y,\n                                                                        jfloat dx,\n                                                                        jfloat dy);\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_setClearColorValue(JNIEnv* env,\n                                                                                jobject obj,\n                                                                                jfloat r,\n                                                                                jfloat g,\n                                                                                jfloat b,\n                                                                                jfloat a);\n\nJNIEXPORT bool JNICALL Java_com_facebook_igl_shell_SampleLib_isSRGBTextureFormat(JNIEnv* env,\n                                                                                 jobject obj,\n                                                                                 int textureFormat);\n};\n\nJNIEXPORT jobjectArray JNICALL\nJava_com_facebook_igl_shell_SampleLib_getRenderSessionConfigs(JNIEnv* env, jobject /*obj*/) {\n  if (!factory) {\n    factory = shell::createDefaultRenderSessionFactory();\n  }\n\n  constexpr igl::TextureFormat kSwapchainColorTextureFormat = igl::TextureFormat::BGRA_SRGB;\n  std::vector<igl::shell::RenderSessionConfig> suggestedConfigs = {\n#if IGL_BACKEND_OPENGL\n      {\n          .displayName = \"OpenGL ES 3\",\n          .backendVersion = {.flavor = igl::BackendFlavor::OpenGL_ES,\n                             .majorVersion = 3,\n                             .minorVersion = 0},\n          .swapchainColorTextureFormat = kSwapchainColorTextureFormat,\n      },\n      {\n          .displayName = \"OpenGL ES 2\",\n          .backendVersion = {.flavor = igl::BackendFlavor::OpenGL_ES,\n                             .majorVersion = 2,\n                             .minorVersion = 0},\n          .swapchainColorTextureFormat = kSwapchainColorTextureFormat,\n      },\n#endif\n#if IGL_BACKEND_VULKAN\n      {\n          .displayName = \"Vulkan\",\n          .backendVersion = {.flavor = igl::BackendFlavor::Vulkan,\n                             .majorVersion = 1,\n                             .minorVersion = 1},\n          .swapchainColorTextureFormat = kSwapchainColorTextureFormat,\n      },\n#endif\n  };\n\n  const auto requestedConfigs =\n      factory->requestedSessionConfigs(shell::ShellType::Android, std::move(suggestedConfigs));\n  return toJava(env, requestedConfigs);\n}\n\n// Helper function to extract all Intent extras as command-line style arguments\n[[maybe_unused]] static std::vector<std::string> extractIntentExtras(JNIEnv* env, jobject intent) {\n  std::vector<std::string> extras;\n  if (!intent) {\n    return extras;\n  }\n\n  // Get Intent class and getExtras method\n  jclass intentClass = env->GetObjectClass(intent);\n  jmethodID getExtrasMethod = env->GetMethodID(intentClass, \"getExtras\", \"()Landroid/os/Bundle;\");\n\n  if (!getExtrasMethod) {\n    IGL_LOG_ERROR(\"Failed to get getExtras method\\n\");\n    return extras;\n  }\n\n  // Get the Bundle containing extras\n  jobject bundle = env->CallObjectMethod(intent, getExtrasMethod);\n  if (!bundle) {\n    IGL_LOG_INFO(\"No extras found in Intent\\n\");\n    return extras;\n  }\n\n  // Get Bundle class and keySet method\n  jclass bundleClass = env->GetObjectClass(bundle);\n  jmethodID keySetMethod = env->GetMethodID(bundleClass, \"keySet\", \"()Ljava/util/Set;\");\n\n  if (!keySetMethod) {\n    IGL_LOG_ERROR(\"Failed to get keySet method\\n\");\n    env->DeleteLocalRef(bundle);\n    return extras;\n  }\n\n  // Get the Set of keys\n  jobject keySet = env->CallObjectMethod(bundle, keySetMethod);\n  if (!keySet) {\n    IGL_LOG_INFO(\"No keys found in Bundle\\n\");\n    env->DeleteLocalRef(bundle);\n    return extras;\n  }\n\n  // Get Set class and iterator method\n  jclass setClass = env->GetObjectClass(keySet);\n  jmethodID iteratorMethod = env->GetMethodID(setClass, \"iterator\", \"()Ljava/util/Iterator;\");\n\n  if (!iteratorMethod) {\n    IGL_LOG_ERROR(\"Failed to get iterator method\\n\");\n    env->DeleteLocalRef(keySet);\n    env->DeleteLocalRef(bundle);\n    return extras;\n  }\n\n  // Get the Iterator\n  jobject iterator = env->CallObjectMethod(keySet, iteratorMethod);\n  if (!iterator) {\n    IGL_LOG_ERROR(\"Failed to get iterator\\n\");\n    env->DeleteLocalRef(keySet);\n    env->DeleteLocalRef(bundle);\n    return extras;\n  }\n\n  // Get Iterator class methods\n  jclass iteratorClass = env->GetObjectClass(iterator);\n  jmethodID hasNextMethod = env->GetMethodID(iteratorClass, \"hasNext\", \"()Z\");\n  jmethodID nextMethod = env->GetMethodID(iteratorClass, \"next\", \"()Ljava/lang/Object;\");\n\n  if (!hasNextMethod || !nextMethod) {\n    IGL_LOG_ERROR(\"Failed to get iterator methods\\n\");\n    env->DeleteLocalRef(iterator);\n    env->DeleteLocalRef(keySet);\n    env->DeleteLocalRef(bundle);\n    return extras;\n  }\n\n  // Get Bundle.get method to retrieve values\n  jmethodID getMethod =\n      env->GetMethodID(bundleClass, \"get\", \"(Ljava/lang/String;)Ljava/lang/Object;\");\n  if (!getMethod) {\n    IGL_LOG_ERROR(\"Failed to get Bundle.get method\\n\");\n    env->DeleteLocalRef(iterator);\n    env->DeleteLocalRef(keySet);\n    env->DeleteLocalRef(bundle);\n    return extras;\n  }\n\n  // Iterate through all keys\n  while (env->CallBooleanMethod(iterator, hasNextMethod)) {\n    jobject keyObj = env->CallObjectMethod(iterator, nextMethod);\n    if (!keyObj) {\n      continue;\n    }\n\n    // Convert key to string\n    jstring keyStr = static_cast<jstring>(keyObj);\n    const char* keyChars = env->GetStringUTFChars(keyStr, nullptr);\n    std::string key(keyChars);\n    env->ReleaseStringUTFChars(keyStr, keyChars);\n\n    // Get the value for this key\n    jobject valueObj = env->CallObjectMethod(bundle, getMethod, keyStr);\n    std::string value;\n\n    if (valueObj) {\n      // Convert value to string (works for most common types)\n      jclass objectClass = env->GetObjectClass(valueObj);\n      jmethodID toStringMethod = env->GetMethodID(objectClass, \"toString\", \"()Ljava/lang/String;\");\n\n      if (toStringMethod) {\n        jstring valueStr = static_cast<jstring>(env->CallObjectMethod(valueObj, toStringMethod));\n        if (valueStr) {\n          const char* valueChars = env->GetStringUTFChars(valueStr, nullptr);\n          value = std::string(valueChars);\n          env->ReleaseStringUTFChars(valueStr, valueChars);\n          env->DeleteLocalRef(valueStr);\n        }\n      }\n      env->DeleteLocalRef(valueObj);\n    } else {\n      value = \"null\";\n    }\n\n    // Add the key as a command-line argument\n    extras.emplace_back(key);\n    // Add the value as a separate argument if it's not empty and not \"null\"\n    if (!value.empty() && value != \"null\") {\n      extras.emplace_back(value);\n    }\n    IGL_LOG_INFO(\"Intent extra: %s = %s\\n\", key.c_str(), value.c_str());\n\n    env->DeleteLocalRef(keyObj);\n  }\n\n  // Clean up local references\n  env->DeleteLocalRef(iterator);\n  env->DeleteLocalRef(keySet);\n  env->DeleteLocalRef(bundle);\n\n  return extras;\n}\n\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_init(JNIEnv* env,\n                                                                  jobject /*obj*/,\n                                                                  jobject jbackendVersion,\n                                                                  jint jtextureFormat,\n                                                                  jobject javaAssetManager,\n                                                                  jobject surface,\n                                                                  jobject intent) {\n  const auto backendVersion = toBackendVersion(env, jbackendVersion);\n  const auto swapchainColorTextureFormat = static_cast<TextureFormat>(jtextureFormat);\n  const auto rendererIndex = findRendererIndex(backendVersion);\n\n  if (backendVersion && !rendererIndex) {\n    auto renderer = std::make_unique<TinyRenderer>();\n    auto cmdLine = extractIntentExtras(env, intent);\n    IGL_LOG_INFO(\"init: creating backend renderer cmd line: %d\\n\", cmdLine.size());\n    for ([[maybe_unused]] const auto& cmd : cmdLine) {\n      IGL_LOG_INFO(\"Param: %s\\n\", cmd.c_str());\n    }\n    renderer->init(AAssetManager_fromJava(env, javaAssetManager),\n                   surface ? ANativeWindow_fromSurface(env, surface) : nullptr,\n                   *factory,\n                   *backendVersion,\n                   swapchainColorTextureFormat,\n                   cmdLine);\n    renderers.emplace_back(std::move(renderer));\n    IGL_LOG_INFO(\"init: creating backend renderer: %s\\n\", toString(backendVersion).c_str());\n  } else if (rendererIndex && backendVersion && backendVersion->flavor == BackendFlavor::Vulkan) {\n    IGL_LOG_INFO(\"init: Updating backend renderer: %s\\n\", toString(backendVersion).c_str());\n    renderers[*rendererIndex]->recreateSwapchain(ANativeWindow_fromSurface(env, surface), true);\n  } else {\n    IGL_LOG_INFO(\"init: no changes: %s\\n\", toString(backendVersion).c_str());\n  }\n\n  activeBackendVersion = backendVersion;\n}\n\n// NOLINTBEGIN(misc-use-internal-linkage)\nJNIEXPORT jboolean JNICALL\nJava_com_facebook_igl_shell_SampleLib_isBackendVersionSupported(JNIEnv* env,\n                                                                jobject /*obj*/,\n                                                                jobject jbackendVersion) {\n  [[maybe_unused]] const auto backendVersion = toBackendVersion(env, jbackendVersion);\n  IGL_LOG_INFO(\"isBackendVersionSupported: %s\\n\", toString(backendVersion).c_str());\n#if IGL_BACKEND_OPENGL\n  if (backendVersion && backendVersion->flavor == BackendFlavor::OpenGL_ES) {\n    return JNI_TRUE;\n  }\n#endif\n#if IGL_BACKEND_VULKAN\n  if (backendVersion && backendVersion->flavor == BackendFlavor::Vulkan) {\n    return JNI_TRUE;\n  }\n#endif\n  return JNI_FALSE;\n}\n// NOLINTEND(misc-use-internal-linkage)\n\nJNIEXPORT void JNICALL\nJava_com_facebook_igl_shell_SampleLib_setActiveBackendVersion(JNIEnv* env,\n                                                              jobject /*obj*/,\n                                                              jobject jbackendVersion) {\n  activeBackendVersion = toBackendVersion(env, jbackendVersion);\n  IGL_LOG_INFO(\"setActiveBackendVersion: %s activeRenderIndex: %s\\n\",\n               toString(activeBackendVersion).c_str(),\n               toString(findRendererIndex(activeBackendVersion)).c_str());\n}\n\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_surfaceChanged(JNIEnv* env,\n                                                                            jobject /*obj*/,\n                                                                            jobject surface,\n                                                                            jint width,\n                                                                            jint height) {\n  const auto activeRendererIndex = findRendererIndex(activeBackendVersion);\n  IGL_LOG_INFO(\"surfaceChanged: %s rendererIndex: %s\\n\",\n               toString(activeBackendVersion).c_str(),\n               toString(activeRendererIndex).c_str());\n  if (!activeRendererIndex) {\n    return;\n  }\n\n  renderers[*activeRendererIndex]->onSurfacesChanged(\n      surface ? ANativeWindow_fromSurface(env, surface) : nullptr, width, height);\n}\n\nJNIEXPORT jboolean JNICALL Java_com_facebook_igl_shell_SampleLib_render(JNIEnv* /*env*/,\n                                                                        jobject /*obj*/,\n                                                                        jfloat displayScale) {\n  const auto activeRendererIndex = findRendererIndex(activeBackendVersion);\n  if (!activeRendererIndex) {\n    return JNI_FALSE;\n  }\n\n  bool shouldExit = renderers[*activeRendererIndex]->render(displayScale);\n  return shouldExit ? JNI_TRUE : JNI_FALSE;\n}\n\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_surfaceDestroyed(JNIEnv* env,\n                                                                              jobject /*obj*/,\n                                                                              jobject surface) {}\n\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_touchEvent(JNIEnv* /*env*/,\n                                                                        jobject /*obj*/,\n                                                                        jboolean isDown,\n                                                                        jfloat x,\n                                                                        jfloat y,\n                                                                        jfloat dx,\n                                                                        jfloat dy) {\n  const auto activeRendererIndex = findRendererIndex(activeBackendVersion);\n  if (!activeRendererIndex) {\n    return;\n  }\n\n  renderers[*activeRendererIndex]->touchEvent(isDown != 0u, x, y, dx, dy);\n}\n\nJNIEXPORT void JNICALL Java_com_facebook_igl_shell_SampleLib_setClearColorValue(JNIEnv* /*env*/,\n                                                                                jobject /*obj*/,\n                                                                                jfloat r,\n                                                                                jfloat g,\n                                                                                jfloat b,\n                                                                                jfloat a) {\n  const auto activeRendererIndex = findRendererIndex(activeBackendVersion);\n  if (!activeRendererIndex) {\n    return;\n  }\n\n  renderers[*activeRendererIndex]->setClearColorValue(r, g, b, a);\n}\n\nJNIEXPORT bool JNICALL\nJava_com_facebook_igl_shell_SampleLib_isSRGBTextureFormat(JNIEnv* env,\n                                                          jobject obj,\n                                                          int textureFormat) {\n  return textureFormat == (int)igl::TextureFormat::RGBA_SRGB ||\n         textureFormat == (int)igl::TextureFormat::BGRA_SRGB;\n}\n\n} // namespace igl::samples\n"
  },
  {
    "path": "shell/android/jni/TinyRenderer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include \"TinyRenderer.h\"\n\n#include <EGL/egl.h>\n#include <android/log.h>\n#include <android/native_window.h>\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/egl/HWDevice.h>\n#include <igl/opengl/egl/PlatformDevice.h>\n#endif\n#include <shell/shared/fileLoader/android/FileLoaderAndroid.h>\n#include <shell/shared/input/InputDispatcher.h>\n#include <shell/shared/platform/DisplayContext.h>\n#include <shell/shared/renderSession/AppParams.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#if IGL_BACKEND_VULKAN\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/HWDevice.h>\n#include <igl/vulkan/VulkanContext.h>\n#endif\n#include <memory>\n#include <sys/system_properties.h>\n#include <unordered_set>\n\nnamespace {\n\n// Helper functions to read Android system properties\nstd::optional<std::string> getAndroidSystemProperty(const char* keyName) noexcept {\n  std::array<char, PROP_VALUE_MAX> value{};\n  int len = __system_property_get(keyName, value.data());\n  if (len > 0) {\n    return std::string(value.data());\n  }\n  return std::nullopt;\n}\n\nstd::optional<bool> getAndroidSystemPropertyBool(const char* keyName) noexcept {\n  auto prop = getAndroidSystemProperty(keyName);\n  if (!prop.has_value()) {\n    return std::nullopt;\n  }\n  const auto& value = prop.value();\n  if (value == \"true\" || value == \"1\") {\n    return true;\n  }\n  if (value == \"false\" || value == \"0\") {\n    return false;\n  }\n  return std::nullopt;\n}\n\nstd::optional<int> getAndroidSystemPropertyInt(const char* keyName) noexcept {\n  auto prop = getAndroidSystemProperty(keyName);\n  if (!prop.has_value()) {\n    return std::nullopt;\n  }\n  try {\n    return std::stoi(prop.value());\n  } catch (...) {\n    return std::nullopt;\n  }\n}\n\nstd::optional<size_t> getAndroidSystemPropertySizeT(const char* keyName) noexcept {\n  auto prop = getAndroidSystemProperty(keyName);\n  if (!prop.has_value()) {\n    return std::nullopt;\n  }\n  try {\n    return std::stoul(prop.value());\n  } catch (...) {\n    return std::nullopt;\n  }\n}\n\n// Read shell parameters from Android system properties\nvoid readShellParamsFromAndroidProps(igl::shell::ShellParams& shellParams,\n                                     const char* prefix) noexcept {\n  std::string prefixStr(prefix);\n  prefixStr += \".\";\n\n  // Read ShellParams\n  auto headless = getAndroidSystemPropertyBool((prefixStr + \"headless\").c_str());\n  if (headless.has_value()) {\n    shellParams.isHeadless = headless.value();\n    if (shellParams.isHeadless && shellParams.screenshotNumber == ~0u) {\n      shellParams.screenshotNumber = 0;\n    }\n  }\n\n  auto disableVulkanValidation =\n      getAndroidSystemPropertyBool((prefixStr + \"disable-vulkan-validation-layers\").c_str());\n  if (disableVulkanValidation.has_value()) {\n    shellParams.enableVulkanValidationLayers = !disableVulkanValidation.value();\n  }\n\n  auto screenshotFile = getAndroidSystemProperty((prefixStr + \"screenshot-file\").c_str());\n  if (screenshotFile.has_value()) {\n    shellParams.screenshotFileName = screenshotFile.value();\n  }\n\n  auto screenshotNumber = getAndroidSystemPropertyInt((prefixStr + \"screenshot-number\").c_str());\n  if (screenshotNumber.has_value()) {\n    shellParams.screenshotNumber = static_cast<uint32_t>(screenshotNumber.value());\n  }\n\n  auto viewportSize = getAndroidSystemProperty((prefixStr + \"viewport-size\").c_str());\n  if (viewportSize.has_value()) {\n    unsigned int w = 0;\n    unsigned int h = 0;\n    if (sscanf(viewportSize.value().c_str(), \"%ux%u\", &w, &h) == 2) {\n      if (w && h) {\n        shellParams.viewportSize = glm::vec2(w, h);\n      }\n    }\n  }\n\n  auto fpsThrottle = getAndroidSystemPropertyInt((prefixStr + \"fps-throttle\").c_str());\n  if (fpsThrottle.has_value()) {\n    shellParams.fpsThrottleMs = static_cast<uint32_t>(fpsThrottle.value());\n  }\n\n  auto fpsThrottleRandom =\n      getAndroidSystemPropertyBool((prefixStr + \"fps-throttle-random\").c_str());\n  if (fpsThrottleRandom.has_value()) {\n    shellParams.fpsThrottleRandom = fpsThrottleRandom.value();\n  }\n\n  auto freezeAtFrame = getAndroidSystemPropertyInt((prefixStr + \"freeze-at-frame\").c_str());\n  if (freezeAtFrame.has_value()) {\n    shellParams.freezeAtFrame = static_cast<uint32_t>(freezeAtFrame.value());\n  }\n\n  // Read BenchmarkRenderSessionParams - always try to read them\n  auto timeout = getAndroidSystemPropertySizeT((prefixStr + \"timeout\").c_str());\n  auto sessions = getAndroidSystemPropertySizeT((prefixStr + \"sessions\").c_str());\n  auto logReporter = getAndroidSystemPropertyBool((prefixStr + \"log-reporter\").c_str());\n  auto offscreenOnly = getAndroidSystemPropertyBool((prefixStr + \"offscreen-only\").c_str());\n  auto benchmark = getAndroidSystemPropertyBool((prefixStr + \"benchmark\").c_str());\n\n  // Read new benchmark parameters\n  auto benchmarkDuration =\n      getAndroidSystemPropertySizeT((prefixStr + \"benchmark-duration\").c_str());\n  auto reportInterval = getAndroidSystemPropertySizeT((prefixStr + \"report-interval\").c_str());\n  auto hiccupMultiplier = getAndroidSystemProperty((prefixStr + \"hiccup-multiplier\").c_str());\n  auto renderBufferSize = getAndroidSystemPropertySizeT((prefixStr + \"render-buffer-size\").c_str());\n\n  // Debug: Log what benchmark properties were found\n  if (benchmark.has_value() || benchmarkDuration.has_value() || reportInterval.has_value()) {\n    __android_log_print(\n        ANDROID_LOG_INFO, \"igl\", \"[IGL Benchmark] System props prefix: %s\\n\", prefixStr.c_str());\n    __android_log_print(\n        ANDROID_LOG_INFO,\n        \"igl\",\n        \"[IGL Benchmark] benchmark=%s, duration=%s, interval=%s\\n\",\n        benchmark.has_value() ? (benchmark.value() ? \"true\" : \"false\") : \"not set\",\n        benchmarkDuration.has_value() ? std::to_string(benchmarkDuration.value()).c_str()\n                                      : \"not set\",\n        reportInterval.has_value() ? std::to_string(reportInterval.value()).c_str() : \"not set\");\n  }\n\n  // Read custom parameters using __system_property_foreach (API 26+)\n  // Custom parameters are any properties under the prefix that are not standard params\n  std::vector<std::pair<std::string, std::string>> customParams;\n\n#if __ANDROID_API__ >= 26\n  // Known standard parameter names to exclude from custom params\n  static const std::unordered_set<std::string> standardParams = {\"headless\",\n                                                                 \"disable-vulkan-validation-layers\",\n                                                                 \"screenshot-file\",\n                                                                 \"screenshot-number\",\n                                                                 \"viewport-size\",\n                                                                 \"fps-throttle\",\n                                                                 \"fps-throttle-random\",\n                                                                 \"freeze-at-frame\",\n                                                                 \"timeout\",\n                                                                 \"sessions\",\n                                                                 \"log-reporter\",\n                                                                 \"offscreen-only\",\n                                                                 \"benchmark\",\n                                                                 \"benchmark-duration\",\n                                                                 \"run-time\",\n                                                                 \"report-interval\",\n                                                                 \"hiccup-multiplier\",\n                                                                 \"render-buffer-size\"};\n\n  struct CallbackData {\n    const std::string& prefix;\n    const std::unordered_set<std::string>& standardParams;\n    std::vector<std::pair<std::string, std::string>>* customParams;\n  };\n\n  CallbackData callbackData{prefixStr, standardParams, &customParams};\n\n  __system_property_foreach(\n      [](const prop_info* pi, void* cookie) {\n        auto* data = reinterpret_cast<CallbackData*>(cookie);\n\n        // Get property name\n        char name[PROP_NAME_MAX];\n        char value[PROP_VALUE_MAX];\n        __system_property_read(pi, name, value);\n\n        std::string propName(name);\n        // Check if property starts with our prefix\n        if (propName.rfind(data->prefix, 0) == 0) {\n          // Extract the key (remove prefix)\n          std::string key = propName.substr(data->prefix.length());\n          // Only add if not empty and not a standard parameter\n          if (!key.empty() && data->standardParams.find(key) == data->standardParams.end()) {\n            data->customParams->emplace_back(key, std::string(value));\n          }\n        }\n      },\n      reinterpret_cast<void*>(&callbackData));\n#endif\n\n  // If any benchmark parameter is set (including custom params), create the benchmark params\n  if (timeout.has_value() || sessions.has_value() || logReporter.has_value() ||\n      offscreenOnly.has_value() || benchmark.has_value() || benchmarkDuration.has_value() ||\n      reportInterval.has_value() || hiccupMultiplier.has_value() || renderBufferSize.has_value() ||\n      !customParams.empty()) {\n    if (!shellParams.benchmarkParams.has_value()) {\n      shellParams.benchmarkParams = igl::shell::BenchmarkRenderSessionParams();\n    }\n\n    if (timeout.has_value()) {\n      shellParams.benchmarkParams->renderSessionTimeoutMs = timeout.value();\n    }\n    if (sessions.has_value()) {\n      shellParams.benchmarkParams->numSessionsToRun = sessions.value();\n    }\n    if (logReporter.has_value()) {\n      shellParams.benchmarkParams->logReporter = logReporter.value();\n    }\n    if (offscreenOnly.has_value()) {\n      shellParams.benchmarkParams->offscreenRenderingOnly = offscreenOnly.value();\n    }\n\n    // Apply new benchmark parameters\n    if (benchmarkDuration.has_value()) {\n      shellParams.benchmarkParams->benchmarkDurationMs = benchmarkDuration.value();\n    }\n    if (reportInterval.has_value()) {\n      shellParams.benchmarkParams->reportIntervalMs = reportInterval.value();\n    }\n    if (hiccupMultiplier.has_value()) {\n      try {\n        shellParams.benchmarkParams->hiccupMultiplier = std::stod(hiccupMultiplier.value());\n      } catch (...) {\n        // Ignore parse errors, keep default\n      }\n    }\n    if (renderBufferSize.has_value()) {\n      shellParams.benchmarkParams->renderTimeBufferSize = renderBufferSize.value();\n    }\n\n    // Add custom parameters\n    for (const auto& [key, value] : customParams) {\n      shellParams.benchmarkParams->customParams.emplace_back(key, value);\n    }\n  }\n}\n\n// Stores the current EGL context when created, and restores it when destroyed.\nstruct ContextGuard {\n  ContextGuard(const igl::IDevice& device) {\n#if IGL_BACKEND_OPENGL\n    backend_ = device.getBackendType();\n    if (backend_ == igl::BackendType::OpenGL) {\n      display_ = eglGetCurrentDisplay();\n      context_ = eglGetCurrentContext();\n      readSurface_ = eglGetCurrentSurface(EGL_READ);\n      drawSurface_ = eglGetCurrentSurface(EGL_DRAW);\n    }\n#endif\n  }\n\n  ~ContextGuard() {\n#if IGL_BACKEND_OPENGL\n    if (backend_ == igl::BackendType::OpenGL) {\n      eglMakeCurrent(display_, readSurface_, drawSurface_, context_);\n    }\n#endif\n  }\n  ContextGuard(const ContextGuard&) = delete;\n  ContextGuard& operator=(const ContextGuard&) = delete;\n  ContextGuard(ContextGuard&&) = delete;\n  ContextGuard& operator=(ContextGuard&&) = delete;\n\n private:\n#if IGL_BACKEND_OPENGL\n  igl::BackendType backend_;\n  EGLDisplay display_;\n  EGLContext context_;\n  EGLSurface readSurface_;\n  EGLSurface drawSurface_;\n#endif\n};\n\n} // namespace\n\nnamespace igl::samples {\n\nusing namespace igl;\n\nvoid TinyRenderer::init(AAssetManager* mgr,\n                        ANativeWindow* nativeWindow,\n                        shell::IRenderSessionFactory& factory,\n                        BackendVersion backendVersion,\n                        TextureFormat swapchainColorTextureFormat,\n                        const std::vector<std::string>& args) {\n  backendVersion_ = backendVersion;\n  nativeWindow_ = nativeWindow;\n  Result result;\n  const igl::HWDeviceQueryDesc queryDesc(HWDeviceType::IntegratedGpu);\n  std::unique_ptr<IDevice> d;\n\n  // Read shell params from Android system properties first\n  readShellParamsFromAndroidProps(shellParams_, factory.getAndroidSystemPropsPrefix());\n\n  // Debug: Log if benchmark params were set\n  if (shellParams_.benchmarkParams.has_value()) {\n    __android_log_print(ANDROID_LOG_INFO,\n                        \"igl\",\n                        \"[IGL Benchmark] benchmarkParams SET after reading props: duration=%zu, \"\n                        \"interval=%zu\\n\",\n                        shellParams_.benchmarkParams->benchmarkDurationMs,\n                        shellParams_.benchmarkParams->reportIntervalMs);\n  } else {\n    __android_log_print(\n        ANDROID_LOG_INFO, \"igl\", \"[IGL Benchmark] benchmarkParams NOT SET after reading props\\n\");\n  }\n\n  // Parse shell params from command line (overrides properties)\n  shell::parseShellParams(args, shellParams_);\n\n  // Debug: Log after command line parsing\n  if (shellParams_.benchmarkParams.has_value()) {\n    __android_log_print(ANDROID_LOG_INFO,\n                        \"igl\",\n                        \"[IGL Benchmark] benchmarkParams SET after parseShellParams: duration=%zu, \"\n                        \"interval=%zu\\n\",\n                        shellParams_.benchmarkParams->benchmarkDurationMs,\n                        shellParams_.benchmarkParams->reportIntervalMs);\n  }\n\n  switch (backendVersion_.flavor) {\n#if IGL_BACKEND_OPENGL\n  case igl::BackendFlavor::OpenGL_ES: {\n    auto hwDevice = opengl::egl::HWDevice();\n    // Decide which backend api to use, default as GLES3\n    d = hwDevice.create(backendVersion_, &result);\n    shellParams_.shouldPresent = false;\n\n    if (shellParams_.isHeadless) {\n      width_ = static_cast<uint32_t>(shellParams_.viewportSize.x);\n      height_ = static_cast<uint32_t>(shellParams_.viewportSize.y);\n    }\n\n    if (swapchainColorTextureFormat == TextureFormat::Invalid) {\n      swapchainColorTextureFormat_ = TextureFormat::RGBA_SRGB;\n    }\n\n    if (!d->hasFeature(DeviceFeatures::SRGB) && !d->hasFeature(DeviceFeatures::SRGBSwapchain)) {\n      swapchainColorTextureFormat_ = TextureFormat::RGBA_UNorm8;\n    }\n\n    break;\n  }\n#endif\n\n#if IGL_BACKEND_VULKAN\n  case igl::BackendFlavor::Vulkan: {\n    IGL_DEBUG_ASSERT(nativeWindow != nullptr);\n    vulkan::VulkanContextConfig config;\n    config.terminateOnValidationError = true;\n    config.requestedSwapChainTextureFormat = swapchainColorTextureFormat;\n    // Don't use headless mode on Android - instead we'll render to offscreen surface\n    config.headless = false;\n\n    auto ctx = vulkan::HWDevice::createContext(config, nativeWindow);\n\n    auto devices =\n        vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(HWDeviceType::Unknown), &result);\n\n    if (!result.isOk()) {\n      __android_log_print(ANDROID_LOG_ERROR, \"igl\", \"Error: %s\\n\", result.message.c_str());\n    }\n    IGL_DEBUG_ASSERT(result.isOk());\n\n    if (shellParams_.isHeadless) {\n      // Use viewport size from shell params for headless mode\n      width_ = static_cast<uint32_t>(shellParams_.viewportSize.x);\n      height_ = static_cast<uint32_t>(shellParams_.viewportSize.y);\n    } else {\n      width_ = static_cast<uint32_t>(ANativeWindow_getWidth(nativeWindow));\n      height_ = static_cast<uint32_t>(ANativeWindow_getHeight(nativeWindow));\n    }\n\n    // https://github.com/gpuweb/gpuweb/issues/4283\n    // Only 49.5% of Android devices support dualSrcBlend.\n    // Android devices that do not support dualSrcBlend primarily use ARM, ImgTec, and Qualcomm\n    // GPUs.\n    // https://vulkan.gpuinfo.org/listdevicescoverage.php?feature=dualSrcBlend&platform=android&option=not\n    igl::vulkan::VulkanFeatures vulkanFeatures(config);\n    vulkanFeatures.vkPhysicalDeviceFeatures2.features.dualSrcBlend = VK_FALSE;\n\n    d = vulkan::HWDevice::create(std::move(ctx),\n                                 devices[0],\n                                 width_, // width\n                                 height_, // height,,\n                                 0,\n                                 nullptr,\n                                 &vulkanFeatures,\n                                 \"TinyRenderer\",\n                                 &result);\n    break;\n  }\n#endif\n\n  default: {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return;\n  }\n  }\n\n  IGL_DEBUG_ASSERT(d != nullptr);\n  // We want to catch failed device creation instead of letting implicitly fail\n  IGL_SOFT_ASSERT(result.isOk());\n  if (d) {\n    platform_ = std::make_shared<igl::shell::PlatformAndroid>(std::move(d));\n    IGL_DEBUG_ASSERT(platform_ != nullptr);\n    static_cast<igl::shell::FileLoaderAndroid&>(platform_->getFileLoader()).setAssetManager(mgr);\n\n    const ContextGuard guard(platform_->getDevice()); // wrap 'session_' operations\n\n    session_ = factory.createRenderSession(platform_);\n\n    session_->setShellParams(shellParams_);\n    IGL_DEBUG_ASSERT(session_ != nullptr);\n    session_->initialize();\n  }\n}\n\nvoid TinyRenderer::recreateSwapchain(ANativeWindow* nativeWindow, bool createSurface) {\n#if IGL_BACKEND_VULKAN\n  nativeWindow_ = nativeWindow;\n  if (!shellParams_.isHeadless) {\n    width_ = static_cast<uint32_t>(ANativeWindow_getWidth(nativeWindow));\n    height_ = static_cast<uint32_t>(ANativeWindow_getHeight(nativeWindow));\n  }\n\n  auto* platformDevice = platform_->getDevice().getPlatformDevice<igl::vulkan::PlatformDevice>();\n  // need clear the cached textures before recreate swap chain.\n  platformDevice->clear();\n\n  auto& vulkanDevice = static_cast<igl::vulkan::Device&>(platform_->getDevice());\n  auto& vkContext = vulkanDevice.getVulkanContext();\n\n  if (createSurface) {\n    vkContext.createSurface(nativeWindow, nullptr);\n  }\n  vkContext.initSwapchain(width_, height_);\n\n  // need release frame buffer when recreate swap chain\n  session_->releaseFramebuffer();\n#endif\n}\n\nbool TinyRenderer::render(float displayScale) {\n  // process user input\n  IGL_DEBUG_ASSERT(platform_ != nullptr);\n  platform_->getInputDispatcher().processEvents();\n\n  // draw\n  Result result;\n  SurfaceTextures surfaceTextures;\n\n  if (shellParams_.isHeadless) {\n    // In headless mode, create offscreen textures instead of native drawable textures\n    auto& device = platform_->getDevice();\n\n    // Create or reuse offscreen color texture\n    if (!offscreenColorTexture_ || offscreenColorTexture_->getSize().width != width_ ||\n        offscreenColorTexture_->getSize().height != height_) {\n      TextureDesc colorTexDesc = TextureDesc::new2D(swapchainColorTextureFormat_,\n                                                    width_,\n                                                    height_,\n                                                    TextureDesc::TextureUsageBits::Attachment |\n                                                        TextureDesc::TextureUsageBits::Sampled);\n      colorTexDesc.storage = ResourceStorage::Private;\n      offscreenColorTexture_ = device.createTexture(colorTexDesc, &result);\n      IGL_DEBUG_ASSERT(result.isOk());\n      IGL_SOFT_ASSERT(result.isOk());\n    }\n\n    // Create or reuse offscreen depth texture\n    if (!offscreenDepthTexture_ || offscreenDepthTexture_->getSize().width != width_ ||\n        offscreenDepthTexture_->getSize().height != height_) {\n      TextureDesc depthTexDesc = TextureDesc::new2D(\n          TextureFormat::Z_UNorm24, width_, height_, TextureDesc::TextureUsageBits::Attachment);\n      depthTexDesc.storage = ResourceStorage::Private;\n      offscreenDepthTexture_ = device.createTexture(depthTexDesc, &result);\n      IGL_DEBUG_ASSERT(result.isOk());\n      IGL_SOFT_ASSERT(result.isOk());\n    }\n\n    surfaceTextures.color = offscreenColorTexture_;\n    surfaceTextures.depth = offscreenDepthTexture_;\n  } else {\n    // Normal mode: create surface textures from native drawable\n    switch (backendVersion_.flavor) {\n#if IGL_BACKEND_OPENGL\n    case igl::BackendFlavor::OpenGL_ES: {\n      auto* platformDevice =\n          platform_->getDevice().getPlatformDevice<opengl::egl::PlatformDevice>();\n      surfaceTextures.color =\n          platformDevice->createTextureFromNativeDrawable(swapchainColorTextureFormat_, &result);\n      surfaceTextures.depth =\n          platformDevice->createTextureFromNativeDepth(igl::TextureFormat::Z_UNorm24, &result);\n      break;\n    }\n#endif\n\n#if IGL_BACKEND_VULKAN\n    case igl::BackendFlavor::Vulkan: {\n      auto* platformDevice = platform_->getDevice().getPlatformDevice<vulkan::PlatformDevice>();\n      surfaceTextures.color = platformDevice->createTextureFromNativeDrawable(&result);\n      surfaceTextures.depth =\n          platformDevice->createTextureFromNativeDepth(width_, height_, &result);\n      break;\n    }\n#endif\n\n    default:\n      Result::setResult(&result, Result::Code::Unsupported, \"Invalid backend\");\n      break;\n    }\n    IGL_DEBUG_ASSERT(result.isOk());\n    IGL_SOFT_ASSERT(result.isOk());\n  }\n\n  const ContextGuard guard(platform_->getDevice()); // wrap 'session_' operations\n\n  platform_->getDevice().setCurrentThread();\n  session_->setPixelsPerPoint(displayScale);\n  session_->runUpdate(std::move(surfaceTextures));\n\n  // Return true if the application should exit (e.g., benchmark timeout)\n  return session_->appParams().exitRequested;\n}\n\nvoid TinyRenderer::onSurfacesChanged(ANativeWindow* /*surface*/, int width, int height) {\n  if (shellParams_.isHeadless) {\n    return;\n  }\n  width_ = static_cast<uint32_t>(width);\n  height_ = static_cast<uint32_t>(height);\n#if IGL_BACKEND_OPENGL\n  if (backendVersion_.flavor == igl::BackendFlavor::OpenGL_ES) {\n    auto* readSurface = eglGetCurrentSurface(EGL_READ);\n    auto* drawSurface = eglGetCurrentSurface(EGL_DRAW);\n\n    IGL_DEBUG_ASSERT(platform_ != nullptr);\n    Result result;\n    platform_->getDevice().getPlatformDevice<opengl::egl::PlatformDevice>()->updateSurfaces(\n        readSurface, drawSurface, &result);\n    IGL_DEBUG_ASSERT(result.isOk());\n    IGL_SOFT_ASSERT(result.isOk());\n  }\n#endif\n\n#if IGL_BACKEND_VULKAN\n  if (backendVersion_.flavor == igl::BackendFlavor::Vulkan) {\n    recreateSwapchain(nativeWindow_, false);\n    platform_->updatePreRotationMatrix();\n  }\n#endif\n}\n\nvoid TinyRenderer::touchEvent(bool isDown, float x, float y, float dx, float dy) {\n  const float scale = platform_->getDisplayContext().pixelsPerPoint;\n  IGL_DEBUG_ASSERT(scale > 0.0f);\n  platform_->getInputDispatcher().queueEvent(\n      igl::shell::TouchEvent(isDown, x / scale, y / scale, dx / scale, dy / scale));\n}\n\nvoid TinyRenderer::setClearColorValue(float r, float g, float b, float a) {\n  shellParams_.clearColorValue = {r, g, b, a};\n}\n\n} // namespace igl::samples\n"
  },
  {
    "path": "shell/android/jni/TinyRenderer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <android/asset_manager.h>\n#include <android/asset_manager_jni.h>\n#include <android/native_window.h>\n#include <android/native_window_jni.h>\n#include <memory>\n#include <shell/shared/platform/android/PlatformAndroid.h>\n#include <shell/shared/renderSession/IRenderSessionFactory.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/IGL.h>\n\nnamespace igl::samples {\n\nclass TinyRenderer final {\n public:\n  void init(AAssetManager* mgr,\n            ANativeWindow* nativeWindow,\n            shell::IRenderSessionFactory& factor,\n            BackendVersion backendVersion,\n            TextureFormat swapchainColorTextureFormat,\n            const std::vector<std::string>& args = {});\n  void recreateSwapchain(ANativeWindow* nativeWindow, bool createSurface); // only for Vulkan\n\n  /// @brief Renders a frame\n  /// @param displayScale The display scale factor\n  /// @return true if the application should exit (e.g., benchmark timeout)\n  bool render(float displayScale);\n\n  void onSurfacesChanged(ANativeWindow* nativeWindow, int width, int height);\n  void touchEvent(bool isDown, float x, float y, float dx, float dy);\n  void setClearColorValue(float r, float g, float b, float a);\n\n  [[nodiscard]] const BackendVersion& backendVersion() const noexcept {\n    return backendVersion_;\n  }\n\n private:\n  BackendVersion backendVersion_;\n  std::shared_ptr<igl::shell::PlatformAndroid> platform_;\n  std::unique_ptr<igl::shell::RenderSession> session_;\n\n  shell::ShellParams shellParams_;\n  uint32_t width_ = 0;\n  uint32_t height_ = 0;\n  TextureFormat swapchainColorTextureFormat_ = TextureFormat::RGBA_UNorm8;\n  ANativeWindow* nativeWindow_ = nullptr;\n\n  // Offscreen textures for headless rendering\n  std::shared_ptr<ITexture> offscreenColorTexture_;\n  std::shared_ptr<ITexture> offscreenDepthTexture_;\n};\n\n} // namespace igl::samples\n"
  },
  {
    "path": "shell/apps/SessionApp.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#if !defined(IGL_SHELL_SESSION)\n#error \"IGL_SHELL_SESSION must be defined\";\n#endif\n\n#if !defined(IGL_CMAKE_BUILD)\n#define IGL_SHELL_PATH <xplat/graphics/igl/public/shell/renderSessions/IGL_SHELL_SESSION.h>\n#else\n#define IGL_SHELL_PATH <shell/renderSessions/IGL_SHELL_SESSION.h>\n#endif // IGL_CMAKE_BUILD\n\n#include IGL_SHELL_PATH\n#include <shell/shared/renderSession/DefaultRenderSessionFactory.h>\n\nnamespace igl::shell {\n\nclass RenderSessionFactory final : public IRenderSessionFactory {\n public:\n  std::unique_ptr<RenderSession> createRenderSession(\n      std::shared_ptr<Platform> platform) noexcept final;\n};\nstd::unique_ptr<IRenderSessionFactory> createDefaultRenderSessionFactory() {\n  return std::make_unique<RenderSessionFactory>();\n}\nstd::unique_ptr<RenderSession> RenderSessionFactory::createRenderSession(\n    std::shared_ptr<Platform> platform) noexcept {\n  return std::make_unique<IGL_SHELL_SESSION>(std::move(platform));\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/ios/AppDelegate.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import <UIKit/UIApplication.h> // IWYU pragma: export\n#import <UIKit/UIResponder.h> // IWYU pragma: export\n#import <UIKit/UITabBarController.h> // IWYU pragma: export\n#import <UIKit/UIWindow.h> // IWYU pragma: export\n\n@interface AppDelegate : UIResponder <UIApplicationDelegate, UITabBarControllerDelegate>\n\n@property (strong, nonatomic) UIWindow* window;\n\n@end\n"
  },
  {
    "path": "shell/ios/AppDelegate.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"AppDelegate.h\"\n\n#include \"RenderSessionFactoryAdapterInternal.hpp\"\n#import \"RenderSessionFactoryProvider.h\" // @donotremove\n#import \"ViewController.h\" // @donotremove\n\n#import <Foundation/NSArray.h>\n#import <Foundation/NSDictionary.h>\n#import <Foundation/NSString.h>\n#import <UIKit/UIColor.h>\n#import <UIKit/UIScreen.h>\n#import <UIKit/UITabBarItem.h>\n#import <UIKit/UIViewController.h>\n#include <vector>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n#include <shell/shared/renderSession/ShellType.h>\n#include <igl/Macros.h>\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/GLIncludes.h>\n#endif\n\n@interface AppDelegate () {\n  RenderSessionFactoryProvider* _factoryProvider;\n}\n- (void)addTab:(igl::shell::RenderSessionConfig)config\n    viewControllers:(NSMutableArray<UIViewController*>*)viewControllers;\n@end\n\n@implementation AppDelegate\n\n@synthesize window = _window;\n\n- (BOOL)application:(UIApplication*)application\n    didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {\n  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];\n  _factoryProvider = [[RenderSessionFactoryProvider alloc] init];\n  NSMutableArray<UIViewController*>* viewControllers = [NSMutableArray array];\n\n  std::vector<igl::shell::RenderSessionConfig> suggestedSessionConfigs = {\n#if IGL_BACKEND_METAL\n      {\n          .displayName = \"Metal\",\n          .backendVersion = {.flavor = igl::BackendFlavor::Metal,\n                             .majorVersion = 3,\n                             .minorVersion = 0},\n          .swapchainColorTextureFormat = igl::TextureFormat::BGRA_SRGB,\n          .depthTextureFormat = igl::TextureFormat::S8_UInt_Z32_UNorm,\n      },\n#endif\n#if IGL_BACKEND_OPENGL\n#if GL_ES_VERSION_3_0\n      {\n          .displayName = \"OpenGL ES 3.0\",\n          .backendVersion = {.flavor = igl::BackendFlavor::OpenGL_ES,\n                             .majorVersion = 3,\n                             .minorVersion = 0},\n          .swapchainColorTextureFormat = igl::TextureFormat::BGRA_SRGB,\n          .depthTextureFormat = igl::TextureFormat::S8_UInt_Z24_UNorm,\n      },\n#endif\n      {\n          .displayName = \"OpenGL ES 2.0\",\n          .backendVersion = {.flavor = igl::BackendFlavor::OpenGL_ES,\n                             .majorVersion = 2,\n                             .minorVersion = 0},\n          .swapchainColorTextureFormat = igl::TextureFormat::BGRA_SRGB,\n          .depthTextureFormat = igl::TextureFormat::S8_UInt_Z24_UNorm,\n      },\n#endif\n// @fb-only\n      // clang-format off\n      // @fb-only\n          // clang-format on\n          // @fb-only\n          // @fb-only\n                             // @fb-only\n                             // @fb-only\n          // @fb-only\n      // @fb-only\n// @fb-only\n  };\n\n  const auto requestedSessionConfigs = _factoryProvider.adapter->factory->requestedSessionConfigs(\n      igl::shell::ShellType::iOS, std::move(suggestedSessionConfigs));\n  for (const auto& sessionConfig : requestedSessionConfigs) {\n    [self addTab:sessionConfig viewControllers:viewControllers];\n  }\n\n  UITabBarController* tabBarController = [[UITabBarController alloc] initWithNibName:nil\n                                                                              bundle:nil];\n  tabBarController.delegate = self;\n  tabBarController.viewControllers = viewControllers;\n  tabBarController.tabBar.translucent = NO;\n  if (@available(iOS 13.0, *)) {\n    tabBarController.tabBar.backgroundColor = UIColor.systemBackgroundColor;\n  }\n\n  self.window.rootViewController = tabBarController;\n  [self.window makeKeyAndVisible];\n\n  return YES;\n}\n\n- (void)addTab:(igl::shell::RenderSessionConfig)config\n    viewControllers:(NSMutableArray<UIViewController*>*)viewControllers {\n  bool supported = false;\n#if IGL_BACKEND_METAL\n  if (config.backendVersion.flavor == igl::BackendFlavor::Metal) {\n    supported = true;\n  }\n#endif\n#if IGL_BACKEND_OPENGL\n  if (config.backendVersion.flavor == igl::BackendFlavor::OpenGL_ES) {\n    supported = true;\n  }\n#endif\n// @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n  if (!IGL_DEBUG_VERIFY(supported)) {\n    return;\n  }\n\n  UIViewController* viewController = [[ViewController alloc] init:config\n                                                  factoryProvider:_factoryProvider\n                                                            frame:self.window.frame];\n  viewController.tabBarItem =\n      [[UITabBarItem alloc] initWithTitle:[NSString stringWithUTF8String:config.displayName.c_str()]\n                                    image:nil\n                                      tag:0];\n  [viewControllers addObject:viewController];\n}\n\n@end\n"
  },
  {
    "path": "shell/ios/BackendVersion.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// NOTE: This is a pure Obj-C compatible header (no C++) to simplify bridging with Swift\n\n#import <Foundation/NSObject.h>\n\n// MUST match igl/Common.h\ntypedef NS_ENUM(NSUInteger, BackendFlavor) {\n  kBackendFlavorInvalid,\n  kBackendFlavorOpenGL,\n  kBackendFlavorOpenGLES,\n  kBackendFlavorMetal,\n  kBackendFlavorVulkan,\n  // @fb-only\n};\n\n@interface BackendVersion : NSObject\n- (instancetype)init:(BackendFlavor)flavor\n        majorVersion:(UInt8)majorVersion\n        minorVersion:(UInt8)minorVersion;\n\n@property (readonly) BackendFlavor flavor;\n@property (readonly) UInt8 majorVersion;\n@property (readonly) UInt8 minorVersion;\n@end\n"
  },
  {
    "path": "shell/ios/BackendVersion.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"BackendVersion.h\"\n\n@implementation BackendVersion {\n  BackendFlavor _flavor;\n  UInt8 _majorVersion;\n  UInt8 _minorVersion;\n}\n\n- (instancetype)init:(BackendFlavor)flavor\n        majorVersion:(UInt8)majorVersion\n        minorVersion:(UInt8)minorVersion {\n  if (self = [super init]) {\n    self->_flavor = flavor;\n    self->_majorVersion = majorVersion;\n    self->_minorVersion = minorVersion;\n  }\n  return self;\n}\n\n- (BackendFlavor)flavor {\n  return _flavor;\n}\n\n- (UInt8)majorVersion {\n  return _majorVersion;\n}\n\n- (UInt8)minorVersion {\n  return _minorVersion;\n}\n\n@end\n"
  },
  {
    "path": "shell/ios/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nset(PROJECT_NAME \"iOS\")\n\nfile(GLOB PLATFORM_SHARED_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../shared/fileLoader/apple/*.mm ../shared/imageWriter/ios/*.mm ../shared/platform/ios/*.mm)\nfile(GLOB PLATFORM_SHARED_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../shared/fileLoader/apple/*.h ../shared/imageWriter/ios/*.h ../shared/platform/ios/*.h)\n\nadd_library(IGLShellPlatform ${PLATFORM_SHARED_SRC_FILES} ${PLATFORM_SHARED_HEADER_FILES})\ntarget_link_libraries(IGLShellPlatform PUBLIC IGLLibrary)\n\nset_target_properties(IGLShellPlatform PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES)\nset_target_properties(IGLShellPlatform PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)\n\ntarget_link_libraries(IGLShellPlatform PUBLIC IGLLibrary)\n\nigl_set_folder(IGLShellPlatform \"IGL\")\nigl_set_cxxstd(IGLShellPlatform 20)\n\nset_target_properties(IGLShellShared PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES)\nset_target_properties(IGLShellShared PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)\n\nfunction(ADD_SHELL_SESSION_WITH_SRCS target srcs libs)\n  file(GLOB PLATFORM_SHELL_SRC_FILES LIST_DIRECTORIES false ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/*.mm\n                                                            ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/*.m)\n  file(GLOB PLATFORM_SHELL_HEADER_FILES LIST_DIRECTORIES false ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/*.h)\n  file(GLOB RESOURCES LIST_DIRECTORIES false ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../resources/images/*.png)\n\n  add_executable(${target} MACOSX_BUNDLE ${srcs} \"${PLATFORM_SHELL_SRC_FILES}\" \"${PLATFORM_SHELL_HEADER_FILES}\" \"${RESOURCES}\")\n  igl_set_folder(${target} \"IGL Shell Sessions\")\n  igl_set_cxxstd(${target} 20)\n  target_compile_definitions(${target} PRIVATE \"IGL_SHELL_SESSION=${target}\")\n  target_link_libraries(${target} PUBLIC ${libs})\n  target_link_libraries(${target} PUBLIC IGLShellShared)\n  target_link_libraries(${target} PUBLIC IGLShellPlatform)\n  set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES)\n  set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)\n  target_link_libraries(\n    ${target}\n    PUBLIC \"-framework AVFoundation\"\n           \"-framework CoreGraphics\"\n           \"-framework CoreMotion\"\n           \"-framework Foundation\"\n           \"-framework Metal\"\n           \"-framework MetalKit\"\n           \"-framework QuartzCore\"\n           \"-framework UIKit\")\n  set_target_properties(\n    ${target}\n    PROPERTIES\n      MACOSX_BUNDLE TRUE\n      MACOSX_BUNDLE_BUNDLE_NAME \"${target}\"\n      MACOSX_BUNDLE_GUI_IDENTIFIER \"com.meta.${target}\"\n      MACOSX_BUNDLE_BUNDLE_VERSION \"1.0.0\"\n      MACOSX_BUNDLE_SHORT_VERSION_STRING \"1.0.0\"\n      RESOURCE \"${RESOURCES}\"\n  )\nendfunction()\n"
  },
  {
    "path": "shell/ios/IglShellPlatformAdapter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// NOTE: This is a pure Obj-C compatible header (no C++) to simplify bridging with Swift\n\n// Opaque wrapper around C++ type\n// NOLINTNEXTLINE(facebook-unused-forward-decls)\ntypedef struct IglShellPlatformAdapter* IglShellPlatformAdapterPtr;\n"
  },
  {
    "path": "shell/ios/IglShellPlatformAdapterInternal.hpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// NOTE: Only include this in the Obj-C++ implementation (.mm) file\n// Use the public header in pure Obj-C files\n\n#include \"IglShellPlatformAdapter.h\"\n\n#include <shell/shared/platform/Platform.h>\n\nstruct IglShellPlatformAdapter {\n  igl::shell::Platform* platform;\n};\n"
  },
  {
    "path": "shell/ios/IglSurfaceTexturesAdapter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// NOTE: This is a pure Obj-C compatible header (no C++) to simplify bridging with Swift\n\n// NOLINTNEXTLINE(facebook-unused-forward-decls)\ntypedef struct IglSurfaceTexturesAdapter* IglSurfacesTextureAdapterPtr;\n"
  },
  {
    "path": "shell/ios/IglSurfaceTexturesAdapterInternal.hpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// NOTE: Only include this in the Obj-C++ implementation (.mm) file\n// Use the public header in pure Obj-C files\n\n#include \"IglSurfaceTexturesAdapter.h\"\n\n#include <igl/Texture.h>\n\nstruct IglSurfaceTexturesAdapter {\n  igl::SurfaceTextures surfaceTextures;\n};\n"
  },
  {
    "path": "shell/ios/RenderSessionController.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// NOTE: This is a pure Obj-C compatible header (no C++) to simplify bridging with Swift\n\n#import \"BackendVersion.h\"\n#import \"IglShellPlatformAdapter.h\"\n#import \"IglSurfaceTexturesAdapter.h\"\n#import \"RenderSessionFactoryProvider.h\"\n\n#import <CoreGraphics/CGGeometry.h>\n#import <Foundation/NSObject.h>\n\ntypedef int IglBackendFlavor;\ntypedef int IglOpenglRenderingAPI;\n\n@protocol IglSurfaceTexturesProvider <NSObject>\n- (IglSurfacesTextureAdapterPtr)createSurfaceTextures;\n@end\n\n@protocol IglShellPlatformAdapter <NSObject>\n- (IglShellPlatformAdapterPtr)adapter;\n@end\n\n@interface RenderSessionController : NSObject <IglShellPlatformAdapter>\n- (instancetype)initWithBackendVersion:(BackendVersion*)backendVersion\n                       factoryProvider:(RenderSessionFactoryProvider*)factoryProvider\n                       surfaceProvider:(id<IglSurfaceTexturesProvider>)provider;\n\n- (void)initializeDevice;\n\n- (void)start;\n- (void)stop;\n- (void)tick;\n- (void)releaseSessionFrameBuffer;\n\n- (void)setFrame:(CGRect)frame;\n@end\n"
  },
  {
    "path": "shell/ios/RenderSessionController.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"RenderSessionController.h\"\n\n#import \"IglShellPlatformAdapterInternal.hpp\"\n#import \"IglSurfaceTexturesAdapterInternal.hpp\"\n#import \"RenderSessionFactoryAdapterInternal.hpp\"\n\n#import <QuartzCore/CADisplayLink.h>\n#import <UIKit/UIKit.h>\n#import <shell/shared/input/InputDispatcher.h>\n#import <igl/IGL.h>\n\n#if IGL_BACKEND_METAL\n#import <Metal/Metal.h>\n#import <igl/metal/HWDevice.h>\n#endif\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/ios/HWDevice.h>\n#endif\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n#include <memory>\n#include <shell/shared/platform/ios/PlatformIos.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n\n@interface RenderSessionController () {\n  igl::BackendVersion _backendVersion;\n  CGRect _frame;\n  CADisplayLink* _renderTimer;\n  std::unique_ptr<igl::shell::RenderSession> _session;\n  std::shared_ptr<igl::shell::Platform> _platform;\n  IglShellPlatformAdapter _platformAdapter;\n  igl::shell::IRenderSessionFactory* _factory;\n  id<IglSurfaceTexturesProvider> _surfaceTexturesProvider;\n}\n- (igl::BackendVersion)toBackendVersion:(BackendVersion*)version;\n@end\n\n@implementation RenderSessionController\n\n- (instancetype)initWithBackendVersion:(BackendVersion*)backendVersion\n                       factoryProvider:(RenderSessionFactoryProvider*)factoryProvider\n                       surfaceProvider:(id<IglSurfaceTexturesProvider>)provider {\n  if (self = [super init]) {\n    self->_backendVersion = [self toBackendVersion:backendVersion];\n    _factory = [factoryProvider adapter]->factory;\n    _frame = CGRectMake(0, 0, 1024, 768); // choose some default\n\n    // @fb-only\n                     // @fb-only\n    _surfaceTexturesProvider = provider;\n  }\n  return self;\n}\n\n- (void)initializeDevice {\n  igl::HWDeviceQueryDesc queryDesc(igl::HWDeviceType::DiscreteGpu);\n  std::unique_ptr<igl::IDevice> device;\n\n  switch (_backendVersion.flavor) {\n  case igl::BackendFlavor::Metal: {\n#if IGL_BACKEND_METAL\n    igl::metal::HWDevice hwDevice;\n    auto hwDevices = hwDevice.queryDevices(queryDesc, nullptr);\n    device = hwDevice.create(hwDevices[0], nullptr);\n#endif\n    break;\n  }\n  case igl::BackendFlavor::OpenGL_ES: {\n#if IGL_BACKEND_OPENGL\n    device = igl::opengl::ios::HWDevice().create(_backendVersion, nullptr);\n#endif\n    break;\n  }\n// @fb-only\n  // @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n  default:\n    IGL_DEBUG_ABORT(\"IGL Samples not set up for backend(%d)\", (int)_backendVersion.flavor);\n    break;\n  }\n\n  _platform = std::make_shared<igl::shell::PlatformIos>(std::move(device));\n  _platformAdapter.platform = _platform.get();\n  _session = _factory->createRenderSession(_platform);\n  IGL_DEBUG_ASSERT(_session, \"createDefaultRenderSession() must return a valid session\");\n  _session->initialize();\n}\n\n// @protocol IglShellPlatformAdapter\n- (IglShellPlatformAdapterPtr)adapter {\n  return &_platformAdapter;\n}\n\n- (void)start {\n  if (_backendVersion.flavor != igl::BackendFlavor::Metal) {\n    // Render at 60hz\n    _renderTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(tick)];\n    [_renderTimer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];\n  }\n}\n\n- (void)stop {\n  [_renderTimer removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];\n  _renderTimer = nullptr;\n}\n\n- (void)tick {\n  igl::DeviceScope scope(_platform->getDevice());\n\n  // @fb-only\n                   // @fb-only\n  IglSurfaceTexturesAdapter* adapter = [_surfaceTexturesProvider createSurfaceTextures];\n  // @fb-only\n                   // @fb-only\n\n  // process user input\n  _platform->getInputDispatcher().processEvents();\n\n  // draw\n  if (_backendVersion.flavor == igl::BackendFlavor::Metal) {\n    _session->setPixelsPerPoint((float)[UIScreen mainScreen].scale);\n  } else if (_backendVersion.flavor == igl::BackendFlavor::OpenGL) {\n    _session->setPixelsPerPoint(1.0f);\n  }\n  _session->update(adapter ? std::move(adapter->surfaceTextures) : igl::SurfaceTextures{});\n}\n\n- (void)releaseSessionFrameBuffer {\n  if (_session) {\n    _session->releaseFramebuffer();\n  }\n}\n\n- (void)setFrame:(CGRect)frame {\n  self->_frame = frame;\n}\n\n- (igl::BackendVersion)toBackendVersion:(BackendVersion*)version {\n  return {.flavor = static_cast<igl::BackendFlavor>(version.flavor),\n          .majorVersion = version.majorVersion,\n          .minorVersion = version.minorVersion};\n}\n\n@end\n"
  },
  {
    "path": "shell/ios/RenderSessionFactoryAdapter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// NOTE: This is a pure Obj-C compatible header (no C++) to simplify bridging with Swift\n\n// Opaque wrapper around C++ type\n// NOLINTNEXTLINE(facebook-unused-forward-decls)\ntypedef struct RenderSessionFactoryAdapter* RenderSessionFactoryAdapterPtr;\n"
  },
  {
    "path": "shell/ios/RenderSessionFactoryAdapterInternal.hpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// NOTE: Only include this in the Obj-C++ implementation (.mm) file\n// Use the public header in pure Obj-C files\n\n#include \"RenderSessionFactoryAdapter.h\"\n\n#include <shell/shared/renderSession/IRenderSessionFactory.h>\n\nstruct RenderSessionFactoryAdapter {\n  igl::shell::IRenderSessionFactory* factory;\n};\n"
  },
  {
    "path": "shell/ios/RenderSessionFactoryProvider.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// NOTE: This is a pure Obj-C compatible header (no C++) to simplify bridging with Swift\n\n#import \"RenderSessionFactoryAdapter.h\"\n\n#import <Foundation/NSObject.h>\n\ntypedef int IglBackendFlavor;\ntypedef int IglOpenglRenderingAPI;\n\n@protocol RenderSessionFactoryAdapter <NSObject>\n- (RenderSessionFactoryAdapterPtr)adapter;\n@end\n\n@interface RenderSessionFactoryProvider : NSObject <RenderSessionFactoryAdapter>\n- (instancetype)init;\n@end\n"
  },
  {
    "path": "shell/ios/RenderSessionFactoryProvider.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"RenderSessionFactoryProvider.h\"\n\n#import \"RenderSessionFactoryAdapterInternal.hpp\"\n\n#include <memory>\n#include <shell/shared/renderSession/DefaultRenderSessionFactory.h>\n\n@interface RenderSessionFactoryProvider () {\n  std::unique_ptr<igl::shell::IRenderSessionFactory> _factory;\n  RenderSessionFactoryAdapter _adapter;\n}\n@end\n\n@implementation RenderSessionFactoryProvider\n\n- (instancetype)init {\n  if (self = [super init]) {\n    _factory = igl::shell::createDefaultRenderSessionFactory();\n    _adapter.factory = _factory.get();\n  }\n  return self;\n}\n\n// @protocol RenderSessionFactoryAdapter\n- (RenderSessionFactoryAdapterPtr)adapter {\n  return &_adapter;\n}\n\n@end\n"
  },
  {
    "path": "shell/ios/View.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import <MetalKit/MetalKit.h>\n#import <UIKit/UIKit.h>\n\n@protocol TouchDelegate <NSObject>\n- (void)touchBegan:(UITouch*)touch;\n- (void)touchEnded:(UITouch*)touch;\n- (void)touchMoved:(UITouch*)touch;\n@end\n\n@protocol ViewSizeChangeDelegate <NSObject>\n- (void)onViewSizeChange;\n@end\n\n@interface BaseView : UIView\n- (instancetype)initWithTouchDelegate:(id<TouchDelegate>)delegate;\n@end\n\n@interface MetalView : MTKView\n- (void)setTouchDelegate:(id<TouchDelegate>)delegate;\n@end\n\n@interface OpenGLView : BaseView\n@property (nonatomic, weak, nullable) id<ViewSizeChangeDelegate> viewSizeChangeDelegate;\n@end\n"
  },
  {
    "path": "shell/ios/View.m",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"View.h\"\n\n#import <QuartzCore/CAMetalLayer.h>\n\n@implementation BaseView {\n  id<TouchDelegate> __weak _delegate;\n}\n\n- (instancetype)initWithTouchDelegate:(id<TouchDelegate>)delegate {\n  if (self = [super init]) {\n    self->_delegate = delegate;\n  }\n  return self;\n}\n\n- (void)touchesBegan:(NSSet<UITouch*>*)touches withEvent:(UIEvent*)event {\n  [self->_delegate touchBegan:touches.anyObject];\n}\n\n- (void)touchesMoved:(NSSet<UITouch*>*)touches withEvent:(nullable UIEvent*)event {\n  [self->_delegate touchMoved:touches.anyObject];\n}\n\n- (void)touchesEnded:(NSSet<UITouch*>*)touches withEvent:(nullable UIEvent*)event {\n  [self->_delegate touchEnded:touches.anyObject];\n}\n\n- (void)touchesCanceled:(NSSet<UITouch*>*)touches withEvent:(nullable UIEvent*)event {\n  [self->_delegate touchEnded:touches.anyObject];\n}\n\n@end\n\n@implementation MetalView {\n  id<TouchDelegate> __weak _touchDelegate;\n}\n\n- (void)setTouchDelegate:(id<TouchDelegate>)delegate {\n  self->_touchDelegate = delegate;\n}\n\n- (void)touchesBegan:(NSSet<UITouch*>*)touches withEvent:(UIEvent*)event {\n  [self->_touchDelegate touchBegan:touches.anyObject];\n}\n\n- (void)touchesMoved:(NSSet<UITouch*>*)touches withEvent:(nullable UIEvent*)event {\n  [self->_touchDelegate touchMoved:touches.anyObject];\n}\n\n- (void)touchesEnded:(NSSet<UITouch*>*)touches withEvent:(nullable UIEvent*)event {\n  [self->_touchDelegate touchEnded:touches.anyObject];\n}\n\n- (void)touchesCanceled:(NSSet<UITouch*>*)touches withEvent:(nullable UIEvent*)event {\n  [self->_touchDelegate touchEnded:touches.anyObject];\n}\n\n+ (Class)layerClass {\n#if TARGET_OS_SIMULATOR\n  if (@available(iOS 13.0, *)) {\n    return [CAMetalLayer class];\n  }\n  return [CALayer class];\n#else\n  return [CAMetalLayer class];\n#endif\n}\n\n@end\n\n@implementation OpenGLView\n@synthesize viewSizeChangeDelegate = _viewSizeChangeDelegate;\n\n- (void)layoutSubviews {\n  [super layoutSubviews];\n  if (self.viewSizeChangeDelegate) {\n    [self.viewSizeChangeDelegate onViewSizeChange];\n  }\n}\n\n+ (Class)layerClass {\n  return [CAEAGLLayer class];\n}\n\n@end\n"
  },
  {
    "path": "shell/ios/ViewController.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"RenderSessionFactoryProvider.h\"\n\n#import <MetalKit/MTKView.h>\n#import <UIKit/UIKit.h>\n#import <shell/shared/renderSession/RenderSessionConfig.h>\n\n@interface ViewController : UIViewController <MTKViewDelegate>\n\n- (instancetype)init:(igl::shell::RenderSessionConfig)config\n     factoryProvider:(RenderSessionFactoryProvider*)factoryProvider\n               frame:(CGRect)frame;\n\n@end\n"
  },
  {
    "path": "shell/ios/ViewController.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"ViewController.h\"\n\n#import \"BackendVersion.h\"\n#import \"IglShellPlatformAdapter.h\"\n#import \"IglShellPlatformAdapterInternal.hpp\" // IWYU pragma: keep\n#import \"IglSurfaceTexturesAdapter.h\"\n#import \"IglSurfaceTexturesAdapterInternal.hpp\" // IWYU pragma: keep\n#import \"RenderSessionController.h\" // IWYU pragma: keep\n#import \"RenderSessionFactoryProvider.h\"\n#import \"View.h\"\n\n#import <shell/shared/input/InputDispatcher.h>\n#include <shell/shared/platform/Platform.h>\n#import <igl/IGL.h> // IWYU pragma: keep\n#include <igl/Texture.h>\n\n#if IGL_BACKEND_METAL\n#import <Metal/Metal.h>\n#include <igl/metal/Device.h>\n#include <igl/metal/Texture.h>\n#endif\n\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/ios/Context.h>\n#include <igl/opengl/ios/PlatformDevice.h>\n#endif\n\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n\n#include <memory>\n#include <shell/shared/input/TouchListener.h>\n#include <shell/shared/platform/ios/PlatformIos.h>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n#include <igl/DeviceFeatures.h>\n\n@interface ViewController () <TouchDelegate, ViewSizeChangeDelegate, IglSurfaceTexturesProvider> {\n  igl::shell::RenderSessionConfig _config;\n  CALayer* _layer;\n  CGRect _frame;\n  id<CAMetalDrawable> _currentDrawable;\n  id<MTLTexture> _depthStencilTexture;\n\n  RenderSessionController* _renderSessionController;\n  IglSurfaceTexturesAdapter _surfaceTexturesAdapter;\n}\n- (BackendVersion*)toBackendVersion:(igl::BackendVersion)iglBackendVersion;\n@end\n\n@implementation ViewController\n\n- (void)drawInMTKView:(nonnull MTKView*)view {\n  _currentDrawable = view.currentDrawable;\n  _depthStencilTexture = view.depthStencilTexture;\n\n  IGL_DEBUG_ASSERT(_renderSessionController);\n  [_renderSessionController tick];\n}\n\n- (void)mtkView:(nonnull MTKView*)view drawableSizeWillChange:(CGSize)size {\n  [_renderSessionController releaseSessionFrameBuffer];\n}\n\n- (void)onViewSizeChange {\n  [_renderSessionController releaseSessionFrameBuffer];\n}\n\n- (instancetype)init:(igl::shell::RenderSessionConfig)config\n     factoryProvider:(RenderSessionFactoryProvider*)factoryProvider\n               frame:(CGRect)frame {\n  if (self = [super initWithNibName:nil bundle:nil]) {\n    self->_config = config;\n    self->_frame = frame;\n    _renderSessionController = [[RenderSessionController alloc]\n        initWithBackendVersion:[self toBackendVersion:config.backendVersion]\n               factoryProvider:factoryProvider\n               surfaceProvider:self];\n  }\n  return self;\n}\n\n- (void)initRenderSessionController {\n  IGL_DEBUG_ASSERT(_renderSessionController);\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n\n  [_renderSessionController initializeDevice];\n}\n\n- (igl::shell::Platform*)platform {\n  IglShellPlatformAdapter* adapter = [_renderSessionController adapter];\n  IGL_DEBUG_ASSERT(adapter);\n  return adapter->platform;\n}\n\n// clang-format off\n- (igl::SurfaceTextures)createSurfaceTexturesInternal {\n  [[maybe_unused]] auto& device = [self platform]->getDevice();\n  switch (_config.backendVersion.flavor) {\n#if IGL_BACKEND_METAL\n  case igl::BackendFlavor::Metal: {\n    auto *platformDevice = device.getPlatformDevice<igl::metal::PlatformDevice>();\n    IGL_DEBUG_ASSERT(platformDevice);\n    return igl::SurfaceTextures{\n        .color = platformDevice->createTextureFromNativeDrawable(_currentDrawable, nullptr),\n        .depth = platformDevice->createTextureFromNativeDepth(_depthStencilTexture, nullptr),\n    };\n  }\n#endif\n\n#if IGL_BACKEND_OPENGL\n  case igl::BackendFlavor::OpenGL_ES: {\n    auto *platformDevice = device.getPlatformDevice<igl::opengl::ios::PlatformDevice>();\n    IGL_DEBUG_ASSERT(platformDevice);\n    return igl::SurfaceTextures{\n        .color = platformDevice->createTextureFromNativeDrawable((CAEAGLLayer*)_layer, nullptr),\n        .depth = platformDevice->createTextureFromNativeDepth((CAEAGLLayer*)_layer, _config.depthTextureFormat, nullptr),\n    };\n  }\n#endif\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n\n  default: {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return igl::SurfaceTextures{};\n  }\n  }\n}\n// clang-format on\n\n// Protocol IglSurfaceTexturesProvider\n- (IglSurfacesTextureAdapterPtr)createSurfaceTextures {\n  _surfaceTexturesAdapter.surfaceTextures = [self createSurfaceTexturesInternal];\n  return &_surfaceTexturesAdapter;\n}\n\n- (void)loadView {\n  switch (_config.backendVersion.flavor) {\n  case igl::BackendFlavor::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    break;\n  case igl::BackendFlavor::Metal: {\n#if IGL_BACKEND_METAL\n    [self initRenderSessionController];\n    auto d = static_cast<igl::metal::Device&>([self platform]->getDevice()).get();\n\n    auto metalView = [[MetalView alloc] initWithFrame:_frame device:d];\n    metalView.colorPixelFormat =\n        igl::metal::Texture::textureFormatToMTLPixelFormat(_config.swapchainColorTextureFormat);\n    metalView.depthStencilPixelFormat = MTLPixelFormatDepth32Float_Stencil8;\n\n    metalView.delegate = self;\n    [metalView setTouchDelegate:self];\n    self.view = metalView;\n    _layer = metalView.layer;\n#endif\n    break;\n  }\n  case igl::BackendFlavor::OpenGL_ES: {\n#if IGL_BACKEND_OPENGL\n    auto openGLView = [[OpenGLView alloc] initWithTouchDelegate:self];\n    openGLView.viewSizeChangeDelegate = self;\n\n    NSString* drawablePropertyColorFormat = kEAGLColorFormatRGBA8;\n\n    switch (_config.swapchainColorTextureFormat) {\n    case igl::TextureFormat::BGRA_UNorm8:\n      drawablePropertyColorFormat = kEAGLColorFormatRGBA8;\n      break;\n\n    case igl::TextureFormat::BGRA_SRGB:\n      drawablePropertyColorFormat = kEAGLColorFormatSRGBA8;\n      break;\n\n    default:\n      break;\n    }\n\n    ((CAEAGLLayer*)openGLView.layer).drawableProperties =\n        [NSDictionary dictionaryWithObjectsAndKeys:drawablePropertyColorFormat,\n                                                   kEAGLDrawablePropertyColorFormat,\n                                                   nil];\n    self.view = openGLView;\n#endif\n    break;\n  }\n  case igl::BackendFlavor::OpenGL:\n    IGL_DEBUG_ABORT(\"IGL Samples not set up for Desktop OpenGL backend\");\n    break;\n  case igl::BackendFlavor::Vulkan:\n    IGL_DEBUG_ABORT(\"IGL Samples not set up for Vulkan backend\");\n    break;\n  case igl::BackendFlavor::D3D12:\n    IGL_DEBUG_ABORT(\"IGL Samples not set up for D3D12 backend\");\n    break;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  }\n}\n\n- (void)viewDidLoad {\n  [super viewDidLoad];\n\n  if (_config.backendVersion.flavor != igl::BackendFlavor::Metal) {\n    _layer = self.view.layer;\n    [self initRenderSessionController];\n  }\n}\n\n- (void)viewWillAppear:(BOOL)animated {\n  [super viewWillAppear:animated];\n  if (_config.backendVersion.flavor != igl::BackendFlavor::Metal) {\n    IGL_DEBUG_ASSERT(_renderSessionController);\n    [_renderSessionController start];\n  }\n}\n\n- (void)viewWillDisappear:(BOOL)animated {\n  [super viewWillDisappear:animated];\n\n  if (_config.backendVersion.flavor != igl::BackendFlavor::Metal) {\n    IGL_DEBUG_ASSERT(_renderSessionController);\n    [_renderSessionController stop];\n  }\n}\n\n- (void)touchBegan:(UITouch*)touch {\n  CGPoint curPoint = [touch locationInView:self.view];\n  CGPoint lastPoint = [touch previousLocationInView:self.view];\n  [self platform]->getInputDispatcher().queueEvent(igl::shell::TouchEvent(\n      true, curPoint.x, curPoint.y, curPoint.x - lastPoint.x, curPoint.y - lastPoint.y));\n}\n\n- (void)touchEnded:(UITouch*)touch {\n  CGPoint curPoint = [touch locationInView:self.view];\n  CGPoint lastPoint = [touch previousLocationInView:self.view];\n  [self platform]->getInputDispatcher().queueEvent(igl::shell::TouchEvent(\n      false, curPoint.x, curPoint.y, curPoint.x - lastPoint.x, curPoint.y - lastPoint.y));\n}\n\n- (void)touchMoved:(UITouch*)touch {\n  CGPoint curPoint = [touch locationInView:self.view];\n  CGPoint lastPoint = [touch previousLocationInView:self.view];\n  [self platform]->getInputDispatcher().queueEvent(igl::shell::TouchEvent(\n      true, curPoint.x, curPoint.y, curPoint.x - lastPoint.x, curPoint.y - lastPoint.y));\n}\n\n- (BackendVersion*)toBackendVersion:(igl::BackendVersion)iglBackendVersion {\n  return [[BackendVersion alloc] init:static_cast<BackendFlavor>(iglBackendVersion.flavor)\n                         majorVersion:iglBackendVersion.majorVersion\n                         minorVersion:iglBackendVersion.minorVersion];\n}\n\n@end\n"
  },
  {
    "path": "shell/ios/main.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"AppDelegate.h\"\n\n#import <Foundation/NSObjCRuntime.h>\n#import <UIKit/UIApplication.h>\n#import <shell/shared/platform/Platform.h>\n\nint main(int argc, char* argv[]) {\n  igl::shell::Platform::initializeCommandLineArgs(argc, argv);\n\n  @autoreleasepool {\n    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n  }\n}\n"
  },
  {
    "path": "shell/mac/AppDelegate.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import <Cocoa/Cocoa.h>\n\n@interface AppDelegate : NSObject <NSApplicationDelegate>\n\n@end\n"
  },
  {
    "path": "shell/mac/AppDelegate.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n// @lint-ignore-every CLANGTIDY NonLocalizedStringChecker\n#import \"AppDelegate.h\"\n\n#import \"ViewController.h\"\n\n#include <shell/shared/renderSession/DefaultRenderSessionFactory.h>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n#import <igl/Common.h> // IWYU pragma: keep\n\nnamespace {\n\n#if IGL_BACKEND_OPENGL\nNSColorSpace* colorSpaceToNSColorSpace(igl::ColorSpace colorSpace) {\n  switch (colorSpace) {\n  case igl::ColorSpace::SRGB_LINEAR:\n    return [NSColorSpace sRGBColorSpace]; // closest thing to linear srgb\n  case igl::ColorSpace::SRGB_NONLINEAR:\n    return [NSColorSpace sRGBColorSpace];\n  case igl::ColorSpace::DISPLAY_P3_NONLINEAR:\n    return [NSColorSpace displayP3ColorSpace];\n  case igl::ColorSpace::DISPLAY_P3_LINEAR:\n    return [NSColorSpace displayP3ColorSpace];\n  case igl::ColorSpace::EXTENDED_SRGB_LINEAR:\n    return [NSColorSpace extendedSRGBColorSpace];\n  case igl::ColorSpace::DCI_P3_NONLINEAR:\n    return [NSColorSpace displayP3ColorSpace];\n  case igl::ColorSpace::ADOBERGB_LINEAR:\n    return [NSColorSpace adobeRGB1998ColorSpace];\n  case igl::ColorSpace::ADOBERGB_NONLINEAR:\n    return [NSColorSpace adobeRGB1998ColorSpace];\n  case igl::ColorSpace::PASS_THROUGH:\n    return nil;\n  case igl::ColorSpace::EXTENDED_SRGB_NONLINEAR:\n    return [NSColorSpace extendedSRGBColorSpace];\n  case igl::ColorSpace::DISPLAY_NATIVE_AMD:\n    return [NSColorSpace deviceRGBColorSpace];\n  case igl::ColorSpace::BT709_LINEAR:\n  case igl::ColorSpace::BT709_NONLINEAR:\n  case igl::ColorSpace::BT2020_LINEAR:\n  case igl::ColorSpace::HDR10_ST2084:\n  case igl::ColorSpace::DOLBYVISION:\n  case igl::ColorSpace::HDR10_HLG:\n  case igl::ColorSpace::BT2020_NONLINEAR:\n  case igl::ColorSpace::BT601_NONLINEAR:\n  case igl::ColorSpace::BT2100_HLG_NONLINEAR:\n  case igl::ColorSpace::BT2100_PQ_NONLINEAR:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return [NSColorSpace sRGBColorSpace];\n  }\n  IGL_UNREACHABLE_RETURN([NSColorSpace sRGBColorSpace]);\n}\n#endif\n} // namespace\n\n@interface AppDelegate ()\n\n@property (weak) IBOutlet NSWindow* window;\n@property NSTabViewController* tabViewController;\n@property std::shared_ptr<igl::shell::IRenderSessionFactory> factory;\n\n- (void)addTab:(igl::shell::RenderSessionWindowConfig)windowConfig\n    sessionConfig:(igl::shell::RenderSessionConfig)sessionConfig\n            frame:(CGRect)frame;\n@end\n\n@implementation AppDelegate\n\n- (void)applicationDidFinishLaunching:(NSNotification*)aNotification {\n  [self setupViewController];\n  [self.window makeKeyAndOrderFront:nil];\n  [self.window makeFirstResponder:self.tabViewController.view];\n}\n\n- (void)setupViewController {\n  self.tabViewController = [[NSTabViewController alloc] init];\n  self.factory = igl::shell::createDefaultRenderSessionFactory();\n\n  igl::shell::RenderSessionWindowConfig suggestedWindowConfig = {\n      .width = 1024,\n      .height = 768,\n      .windowMode = igl::shell::WindowMode::Window,\n  };\n  constexpr auto kColorFramebufferFormat = igl::TextureFormat::BGRA_SRGB;\n  std::vector<igl::shell::RenderSessionConfig> suggestedSessionConfigs = {\n#if IGL_BACKEND_HEADLESS\n      {\n          .displayName = \"Headless\",\n          .backendVersion = {.flavor = igl::BackendFlavor::Invalid,\n                             .majorVersion = 0,\n                             .minorVersion = 0},\n          .swapchainColorTextureFormat = igl::TextureFormat::RGBA_SRGB, // special case that should\n                                                                        // probably go through\n                                                                        // swiftshader instead\n      },\n#endif\n#if IGL_BACKEND_METAL\n      {\n          .displayName = \"Metal\",\n          .backendVersion = {.flavor = igl::BackendFlavor::Metal,\n                             .majorVersion = 3,\n                             .minorVersion = 0},\n          .swapchainColorTextureFormat = kColorFramebufferFormat,\n      },\n#endif\n#if IGL_BACKEND_OPENGL\n      {\n          .displayName = \"OGL 4.1\",\n          .backendVersion = {.flavor = igl::BackendFlavor::OpenGL,\n                             .majorVersion = 4,\n                             .minorVersion = 1},\n          .swapchainColorTextureFormat = kColorFramebufferFormat,\n      },\n      // clang-format off\n      // @fb-only\n          // clang-format on\n          // @fb-only\n          // @fb-only\n                             // @fb-only\n                             // @fb-only\n          // @fb-only\n      // @fb-only\n#endif\n// @fb-only\n         // clang-format off\n      // @fb-only\n          // clang-format on\n          // @fb-only\n          // @fb-only\n                             // @fb-only\n                             // @fb-only\n          // @fb-only\n      // @fb-only\n// @fb-only\n#if IGL_BACKEND_VULKAN\n      {\n#if IGL_USE_STATIC_LAVAPIPE\n          .displayName = \"Vulkan (Lavapipe)\",\n#else\n          .displayName = \"Vulkan\",\n#endif\n          .backendVersion = {.flavor = igl::BackendFlavor::Vulkan,\n                             .majorVersion = 1,\n                             .minorVersion = 1},\n          .swapchainColorTextureFormat = kColorFramebufferFormat,\n      },\n#endif\n  };\n\n  const auto requestedWindowConfig =\n      self.factory->requestedWindowConfig(igl::shell::ShellType::Mac, suggestedWindowConfig);\n\n  IGL_DEBUG_ASSERT(requestedWindowConfig.windowMode == igl::shell::WindowMode::Window ||\n                   requestedWindowConfig.windowMode == igl::shell::WindowMode::MaximizedWindow);\n\n  CGRect frame = requestedWindowConfig.windowMode == igl::shell::WindowMode::Window\n                     ? [self.window frame]\n                     : [[NSScreen mainScreen] frame];\n  if (requestedWindowConfig.windowMode == igl::shell::WindowMode::Window) {\n    frame.size = CGSizeMake(requestedWindowConfig.width, requestedWindowConfig.height);\n  }\n\n  const auto requestedSessionConfigs = self.factory->requestedSessionConfigs(\n      igl::shell::ShellType::Mac, std::move(suggestedSessionConfigs));\n  for (const auto& sessionConfig : requestedSessionConfigs) {\n    [self addTab:requestedWindowConfig sessionConfig:sessionConfig frame:frame];\n  }\n}\n\n- (void)addTab:(igl::shell::RenderSessionWindowConfig)windowConfig\n    sessionConfig:(igl::shell::RenderSessionConfig)sessionConfig\n            frame:(CGRect)frame {\n  ViewController* viewController = nullptr;\n  bool supported = false;\n#if IGL_BACKEND_HEADLESS\n  if (sessionConfig.backendVersion.flavor == igl::BackendFlavor::Invalid) {\n    supported = true;\n  }\n#endif\n#if IGL_BACKEND_METAL\n  if (sessionConfig.backendVersion.flavor == igl::BackendFlavor::Metal) {\n    supported = true;\n  }\n#endif\n#if IGL_BACKEND_OPENGL\n  if (sessionConfig.backendVersion.flavor == igl::BackendFlavor::OpenGL) {\n    supported = true;\n    NSColorSpace* metalColorSpace = colorSpaceToNSColorSpace(viewController.colorSpace);\n    [self.window setColorSpace:metalColorSpace];\n  }\n#endif\n// @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n#if IGL_BACKEND_VULKAN\n  if (sessionConfig.backendVersion.flavor == igl::BackendFlavor::Vulkan) {\n    supported = true;\n  }\n#endif\n  if (!IGL_DEBUG_VERIFY(supported)) {\n    return;\n  }\n\n  NSTabViewItem* tabViewItem = [[NSTabViewItem alloc] initWithIdentifier:nil];\n\n  viewController = [[ViewController alloc] initWithFrame:frame\n                                                 factory:*self.factory\n                                                  config:sessionConfig];\n\n  tabViewItem.viewController = viewController;\n  tabViewItem.label = [NSString stringWithUTF8String:sessionConfig.displayName.c_str()];\n  [self.tabViewController addTabViewItem:tabViewItem];\n\n  self.window.contentViewController = self.tabViewController;\n  [self.window setFrame:viewController.frame display:YES animate:false];\n}\n\n- (void)tearDownViewController {\n  if (self.tabViewController != nil) {\n    for (NSInteger i = 0; i < [[self.tabViewController tabViewItems] count]; ++i) {\n      NSTabViewItem* item = [self.tabViewController tabViewItems][i];\n      ViewController* controller = (ViewController*)item.viewController;\n      [controller teardown];\n    }\n  }\n  self.tabViewController = nil;\n  self.window.contentViewController = nil;\n}\n\n- (IBAction)didClickTearDownViewController:(id)sender {\n  [self tearDownViewController];\n}\n\n- (IBAction)didClickReloadViewController:(id)sender {\n  [self tearDownViewController];\n  [self setupViewController];\n}\n\n- (void)applicationWillTerminate:(NSNotification*)aNotification {\n  // Insert code here to tear down your application\n  [self tearDownViewController];\n}\n\n- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication*)sender {\n  return YES;\n}\n\n@end\n"
  },
  {
    "path": "shell/mac/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nset(PROJECT_NAME \"Mac\")\n\nfile(GLOB PLATFORM_SHARED_SRC_CPP_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../shared/imageWriter/stb/*.cpp ../shared/platform/mac/*.cpp)\nfile(GLOB PLATFORM_SHARED_SRC_OBJC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../shared/fileLoader/apple/*.mm ../shared/imageWriter/mac/*.mm)\nfile(GLOB PLATFORM_SHARED_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../shared/fileLoader/apple/*.h ../shared/imageWriter/mac/*.h ../shared/imageWriter/stb/*.h\n     ../shared/platform/mac/*.h)\n\nadd_library(IGLShellPlatform ${PLATFORM_SHARED_SRC_CPP_FILES} ${PLATFORM_SHARED_SRC_OBJC_FILES} ${PLATFORM_SHARED_HEADER_FILES})\ntarget_link_libraries(IGLShellPlatform PUBLIC IGLLibrary)\n\nigl_set_folder(IGLShellPlatform \"IGL\")\nigl_set_cxxstd(IGLShellPlatform 20)\n\nif(CMAKE_GENERATOR STREQUAL \"Xcode\")\n  set_target_properties(IGLShellShared PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES)\n  set_target_properties(IGLShellShared PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)\n  set_target_properties(IGLShellPlatform PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES)\n  set_target_properties(IGLShellPlatform PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)\nelse()\n  set_source_files_properties(${PLATFORM_SHARED_SRC_OBJC_FILES} PROPERTIES COMPILE_OPTIONS \"-fobjc-arc;-fobjc-weak\")\nendif()\n\nfunction(ADD_SHELL_SESSION_WITH_SRCS target srcs libs)\n  set(XIBFILE ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../resources/mac/Base.lproj/MainMenu.xib)\n  file(GLOB SHELL_SESSION_SRC_FILES LIST_DIRECTORIES false ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/*.mm\n                                                           ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/*.m)\n  file(GLOB SHELL_SESSION_HEADER_FILES LIST_DIRECTORIES false ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/*.h)\n  file(GLOB RESOURCES LIST_DIRECTORIES false ${CMAKE_CURRENT_FUNCTION_LIST_DIR}/../resources/images/*.png)\n\n  add_executable(${target} MACOSX_BUNDLE ${srcs} \"${SHELL_SESSION_SRC_FILES}\" \"${SHELL_SESSION_SHELL_HEADER_FILES}\"\n                                         \"${XIBFILE}\" \"${RESOURCES}\")\n  igl_set_folder(${target} \"IGL Shell Sessions\")\n  igl_set_cxxstd(${target} 20)\n  target_compile_definitions(${target} PRIVATE \"IGL_SHELL_SESSION=${target}\")\n  target_link_libraries(${target} PUBLIC ${libs})\n  target_link_libraries(${target} PUBLIC IGLShellShared)\n  target_link_libraries(${target} PUBLIC IGLShellPlatform)\n  if(CMAKE_GENERATOR STREQUAL \"Xcode\")\n    set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES)\n    set_target_properties(${target} PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)\n  else()\n    set_source_files_properties(${SHELL_SESSION_SRC_FILES} PROPERTIES COMPILE_OPTIONS \"-fobjc-arc;-fobjc-weak\")\n\n    # See https://catfox.life/2022/08/14/compiling-xibs-with-cmake-without-xcode/\n    find_program(IBTOOL ibtool REQUIRED)\n    get_filename_component(XIBFILENAME ${XIBFILE} NAME_WE)\n    add_custom_command(TARGET ${target} POST_BUILD\n            COMMAND ${IBTOOL} --compile ${CMAKE_CURRENT_BINARY_DIR}/${target}.app/Contents/Resources/${XIBFILENAME}.nib ${XIBFILE}\n            COMMENT \"Compiling NIB file ${XIBFILE}.nib\")\n  endif()\n  target_link_libraries(\n    ${target} PUBLIC \"-framework AVFoundation\" \"-framework CoreGraphics\" \"-framework CoreMotion\" \"-framework AppKit\"\n                     \"-framework Metal\" \"-framework MetalKit\" \"-framework OpenGL\" \"-framework QuartzCore\")\n  set_target_properties(${target} PROPERTIES MACOSX_BUNDLE TRUE RESOURCE \"${XIBFILE}\")\n  set_source_files_properties(${RESOURCES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)\nendfunction()\n"
  },
  {
    "path": "shell/mac/GLView.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import <AppKit/AppKit.h>\n\n@interface GLView : NSOpenGLView {\n}\n- (void)startTimer;\n- (void)stopTimer;\n@end\n"
  },
  {
    "path": "shell/mac/GLView.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"GLView.h\"\n\n#import \"AppDelegate.h\"\n#import \"ViewController.h\"\n\n#import <Foundation/Foundation.h>\n\n@interface GLView () {\n  CVDisplayLinkRef _displayLink; // display link for managing rendering thread\n}\n@property (weak) ViewController* viewController;\n@end\n\n@implementation GLView {\n  NSTrackingArea* _trackingArea; // needed for mouseMoved: events\n}\n\n@synthesize viewController = _viewController;\n\n- (id)initWithFrame:(NSRect)frame {\n  if (self = [super initWithFrame:frame]) {\n    [self addFullScreenTrackingArea];\n  }\n  return self;\n}\n\n- (void)addFullScreenTrackingArea {\n  _trackingArea =\n      [[NSTrackingArea alloc] initWithRect:self.bounds\n                                   options:NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved |\n                                           NSTrackingActiveInKeyWindow\n                                     owner:self\n                                  userInfo:nil];\n  [self addTrackingArea:_trackingArea];\n}\n\n- (void)updateTrackingAreas {\n  [self removeTrackingArea:_trackingArea];\n  [self addFullScreenTrackingArea];\n}\n\n- (void)dealloc {\n  CVDisplayLinkRelease(_displayLink);\n}\n\n- (void)prepareOpenGL {\n  [super prepareOpenGL];\n\n  NSApplication* app = [NSApplication sharedApplication];\n  NSWindow* window = [app windows][0];\n  NSTabViewController* tabController = (NSTabViewController*)window.contentViewController;\n  NSTabViewItem* item = tabController.tabViewItems[tabController.selectedTabViewItemIndex];\n\n  ViewController* controller = (ViewController*)item.viewController;\n  self.viewController = controller;\n  [controller initModule];\n\n  [self initTimer];\n  [self startTimer];\n}\n\nstatic CVReturn displayLinkCallback(CVDisplayLinkRef /*displayLink*/,\n                                    const CVTimeStamp* /*now*/,\n                                    const CVTimeStamp* /*outputTime*/,\n                                    CVOptionFlags /*flagsIn*/,\n                                    CVOptionFlags* /*flagsOut*/,\n                                    void* userdata) {\n  // TODO: For some reason, OpenGL is crashing when called from display link thread\n  // so we use setNeedsDisplay for now.\n  [(__bridge GLView*)userdata performSelectorOnMainThread:@selector(invalidateFrame)\n                                               withObject:nil\n                                            waitUntilDone:NO];\n  return kCVReturnSuccess;\n}\n\n- (void)initTimer {\n  // Synchronize buffer swaps with vertical refresh rate\n  GLint swapInt = 1;\n  [[self openGLContext] setValues:&swapInt forParameter:NSOpenGLContextParameterSwapInterval];\n\n  // Create a display link capable of being used with all active displays\n  CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);\n\n  // Set the renderer output callback function\n  CVDisplayLinkSetOutputCallback(_displayLink, &displayLinkCallback, (__bridge void*)self);\n\n  // Set the display link for the current renderer\n  NSOpenGLContext* glContext = [self openGLContext];\n  CGLContextObj cglContext = [glContext CGLContextObj];\n  CGLPixelFormatObj cglPixelFormat = [[glContext pixelFormat] CGLPixelFormatObj];\n  CVDisplayLinkSetCurrentCGDisplayFromOpenGLContext(_displayLink, cglContext, cglPixelFormat);\n}\n\n- (void)startTimer {\n  CVDisplayLinkStart(_displayLink);\n}\n\n- (void)stopTimer {\n  CVDisplayLinkStop(_displayLink);\n}\n\n- (void)invalidateFrame {\n  [self setNeedsDisplay:YES];\n}\n\n- (void)drawRect:(NSRect)bounds {\n  [self.viewController render];\n}\n\n@end\n"
  },
  {
    "path": "shell/mac/HeadlessView.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import <MetalKit/MetalKit.h>\n\n@interface HeadlessView : NSView {\n}\n\n- (void)startTimer;\n- (void)stopTimer;\n- (void)prepareHeadless;\n@end\n"
  },
  {
    "path": "shell/mac/HeadlessView.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"HeadlessView.h\"\n\n#import \"ViewController.h\"\n\n#import <AppKit/NSApplication.h>\n#import <AppKit/NSTabViewController.h>\n#import <AppKit/NSTabViewItem.h>\n#import <AppKit/NSTrackingArea.h>\n#import <AppKit/NSWindow.h>\n#import <CoreVideo/CVDisplayLink.h>\n\n@interface HeadlessView () {\n  CVDisplayLinkRef _displayLink; // display link for managing rendering thread\n  NSTrackingArea* _trackingArea; // needed for mouseMoved: events\n}\n@property (weak) ViewController* viewController;\n@end\n\n@implementation HeadlessView\n\n@synthesize viewController = _viewController;\n\n- (void)dealloc {\n  CVDisplayLinkRelease(_displayLink);\n}\n\n- (void)prepareHeadless {\n  NSApplication* app = [NSApplication sharedApplication];\n  NSWindow* window = [app windows][0];\n  NSTabViewController* tabController = (NSTabViewController*)window.contentViewController;\n  NSTabViewItem* item = tabController.tabViewItems[tabController.selectedTabViewItemIndex];\n\n  ViewController* controller = (ViewController*)item.viewController;\n  self.viewController = controller;\n  [controller initModule];\n\n  [self initTimer];\n  [self startTimer];\n}\n\nstatic CVReturn displayLinkCallback(\n    CVDisplayLinkRef /*displayLink*/, // NOLINT(readability-identifier-naming)\n    const CVTimeStamp* /*now*/,\n    const CVTimeStamp* /*outputTime*/,\n    CVOptionFlags /*flagsIn*/,\n    CVOptionFlags* /*flagsOut*/,\n\n    void* userdata) {\n  auto view = (__bridge HeadlessView*)userdata;\n  [view.viewController performSelectorOnMainThread:@selector(render)\n                                        withObject:nil\n                                     waitUntilDone:YES];\n  return kCVReturnSuccess;\n}\n\n- (void)initTimer {\n  // Create a display link capable of being used with all active displays\n  CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);\n\n  // Set the renderer output callback function\n  CVDisplayLinkSetOutputCallback(_displayLink, &displayLinkCallback, (__bridge void*)self);\n}\n\n- (void)startTimer {\n  CVDisplayLinkStart(_displayLink);\n}\n\n- (void)stopTimer {\n  CVDisplayLinkStop(_displayLink);\n}\n\n- (void)addFullScreenTrackingArea {\n  _trackingArea =\n      [[NSTrackingArea alloc] initWithRect:self.bounds\n                                   options:NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved |\n                                           NSTrackingActiveInKeyWindow\n                                     owner:self\n                                  userInfo:nil];\n  [self addTrackingArea:_trackingArea];\n}\n\n- (void)updateTrackingAreas {\n  [self removeTrackingArea:_trackingArea];\n  [self addFullScreenTrackingArea];\n}\n\n@end\n"
  },
  {
    "path": "shell/mac/MetalView.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import <MetalKit/MetalKit.h>\n\n@interface MetalView : MTKView {\n}\n\n- (void)setViewController:(NSViewController*)newController;\n@end\n"
  },
  {
    "path": "shell/mac/MetalView.m",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"MetalView.h\"\n\n@implementation MetalView {\n  NSTrackingArea* _trackingArea; // needed for mouseMoved: events\n  IBOutlet NSViewController* _viewController;\n}\n\n- (id)initWithFrame:(NSRect)frame device:(nullable id<MTLDevice>)device {\n  if (self = [super initWithFrame:frame device:device]) {\n    [self addFullScreenTrackingArea];\n  }\n  return self;\n}\n\n- (void)setViewController:(NSViewController*)newController {\n  if (_viewController) {\n    NSResponder* _Nullable controllerNextResponder = [_viewController nextResponder];\n    [super setNextResponder:controllerNextResponder];\n    [_viewController setNextResponder:nil];\n  }\n  _viewController = newController;\n  if (newController) {\n    NSResponder* _Nullable ownNextResponder = [self nextResponder];\n    [super setNextResponder:_viewController];\n    [_viewController setNextResponder:ownNextResponder];\n  }\n}\n\n- (void)addFullScreenTrackingArea {\n  _trackingArea =\n      [[NSTrackingArea alloc] initWithRect:self.bounds\n                                   options:NSTrackingMouseEnteredAndExited | NSTrackingMouseMoved |\n                                           NSTrackingActiveInKeyWindow\n                                     owner:self\n                                  userInfo:nil];\n  [self addTrackingArea:_trackingArea];\n}\n\n- (void)updateTrackingAreas {\n  [self removeTrackingArea:_trackingArea];\n  [self addFullScreenTrackingArea];\n}\n\n- (void)setNextResponder:(NSResponder*)newNextResponder {\n  if (_viewController) {\n    [_viewController setNextResponder:newNextResponder];\n    return;\n  }\n  [super setNextResponder:newNextResponder];\n}\n\n- (BOOL)acceptsFirstResponder {\n  return YES;\n}\n\n- (void)keyUp:(NSEvent*)event {\n  if (_viewController) {\n    [_viewController keyUp:event];\n  }\n}\n\n- (void)keyDown:(NSEvent*)event {\n  if (_viewController) {\n    [_viewController keyDown:event];\n  }\n}\n\n@end\n"
  },
  {
    "path": "shell/mac/ViewController.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import <Cocoa/Cocoa.h> // IWYU pragma: keep\n#import <MetalKit/MetalKit.h>\n#import <shell/shared/renderSession/IRenderSessionFactory.h>\n#import <igl/Common.h>\n#import <igl/DeviceFeatures.h>\n\nNS_ASSUME_NONNULL_BEGIN\n@interface ViewController : NSViewController <MTKViewDelegate>\n\n@property (nonatomic) NSView* iglView;\n\n- (instancetype)initWithFrame:(CGRect)frame\n                      factory:(igl::shell::IRenderSessionFactory&)factory\n                       config:(igl::shell::RenderSessionConfig)config;\n\n// Explicitly disable superclass' designated initializers\n- (instancetype)initWithNibName:(nullable NSNibName)nibNameOrNil\n                         bundle:(nullable NSBundle*)nibBundleOrNil NS_UNAVAILABLE;\n- (nullable instancetype)initWithCoder:(NSCoder*)coder NS_UNAVAILABLE;\n\n- (void)initModule;\n- (void)render;\n- (void)teardown;\n- (CGRect)frame;\n- (igl::ColorSpace)colorSpace;\n@end\nNS_ASSUME_NONNULL_END\n"
  },
  {
    "path": "shell/mac/ViewController.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"ViewController.h\"\n\n#import \"GLView.h\"\n#import \"HeadlessView.h\"\n#import \"MetalView.h\"\n// @fb-only\n\n#import <AppKit/NSApplication.h>\n#import <AppKit/NSEvent.h>\n#import <AppKit/NSOpenGL.h>\n#import <AppKit/NSOpenGLView.h>\n#import <AppKit/NSView.h>\n#import <shell/shared/input/InputDispatcher.h>\n#include <shell/shared/platform/Platform.h>\n#import <igl/Common.h>\n#import <igl/IGL.h>\n#if IGL_BACKEND_METAL\n#include <igl/metal/ColorSpace.h>\n#include <igl/metal/HWDevice.h>\n#include <igl/metal/Texture.h>\n#include <igl/metal/macos/Device.h>\n#endif\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/macos/Context.h>\n#include <igl/opengl/macos/HWDevice.h>\n#include <igl/opengl/macos/PlatformDevice.h>\n#endif\n#include <shell/shared/platform/mac/PlatformMac.h>\n#include <shell/shared/renderSession/AppParams.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/ShellParams.h>\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n#if IGL_BACKEND_VULKAN\n#import \"VulkanView.h\"\n\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/HWDevice.h>\n#include <igl/vulkan/VulkanContext.h>\n#endif\n#import <cmath>\n#import <simd/simd.h>\n\nusing namespace igl;\n\n@interface ViewController () {\n  igl::shell::IRenderSessionFactory* _factory;\n  igl::shell::RenderSessionConfig _config;\n  igl::shell::ShellParams _shellParams;\n  CGRect _frame;\n  CVDisplayLinkRef _displayLink; // For OpenGL (via GLView) and opt-in Metal timer rendering\n  id<CAMetalDrawable> _currentDrawable;\n  id<MTLTexture> _depthStencilTexture;\n  std::shared_ptr<igl::shell::Platform> _shellPlatform;\n  std::unique_ptr<igl::shell::RenderSession> _session;\n  float _kMouseSpeed;\n}\n@end\n\n@implementation ViewController\n\n@synthesize iglView = _iglView;\n\n///--------------------------------------\n/// MARK: - Init\n///--------------------------------------\n\n- (instancetype)initWithFrame:(CGRect)frame\n                      factory:(igl::shell::IRenderSessionFactory&)factory\n                       config:(igl::shell::RenderSessionConfig)config {\n  self = [super initWithNibName:nil bundle:nil];\n  if (!self) {\n    return self;\n  }\n\n  self->_config = std::move(config);\n  self->_factory = &factory;\n  self->_shellParams = igl::shell::ShellParams();\n  self->_shellParams.viewportSize.x = frame.size.width;\n  self->_shellParams.viewportSize.y = frame.size.height;\n  self->_frame = frame;\n  self->_kMouseSpeed = 0.05f;\n  self->_currentDrawable = nil;\n  self->_depthStencilTexture = nil;\n\n  return self;\n}\n\n- (void)initModule {\n}\n\n- (void)teardown {\n  if (_session) {\n    _session->teardown();\n  }\n  _session = nullptr;\n  _shellPlatform = nullptr;\n}\n\n- (void)render {\n  if (_session == nullptr) {\n    return;\n  }\n\n  const NSRect contentRect = self.view.frame;\n\n  _shellParams.viewportSize = glm::vec2(contentRect.size.width, contentRect.size.height);\n  _shellParams.viewportScale = self.view.window.backingScaleFactor;\n  _session->setShellParams(_shellParams);\n  // process user input\n  _shellPlatform->getInputDispatcher().processEvents();\n\n  igl::SurfaceTextures surfaceTextures;\n  if (_config.backendVersion.flavor != igl::BackendFlavor::Invalid &&\n      _shellPlatform->getDevicePtr() != nullptr) {\n// @fb-only\n    // @fb-only\n    // @fb-only\n      // @fb-only\n          // @fb-only\n      // @fb-only\n                               // @fb-only\n    // @fb-only\n// @fb-only\n\n    // surface textures\n    surfaceTextures = igl::SurfaceTextures{.color = [self createTextureFromNativeDrawable],\n                                           .depth = [self createTextureFromNativeDepth]};\n    IGL_DEBUG_ASSERT(surfaceTextures.color != nullptr && surfaceTextures.depth != nullptr);\n    const auto& dims = surfaceTextures.color->getDimensions();\n    _shellParams.nativeSurfaceDimensions = glm::ivec2{dims.width, dims.height};\n\n    // update retina scale\n    float pixelsPerPoint = _shellParams.nativeSurfaceDimensions.x / _shellParams.viewportSize.x;\n    _session->setPixelsPerPoint(pixelsPerPoint);\n// @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n    // @fb-only\n// @fb-only\n  }\n\n  // Use runUpdate() which automatically handles benchmark timing, reporting, and expiration\n  _session->runUpdate(std::move(surfaceTextures));\n\n  if (_session->appParams().exitRequested) {\n    [[NSApplication sharedApplication] terminate:nil];\n  }\n}\n\n- (void)loadView {\n  // We don't care about the device type, just\n  // return something that works\n  HWDeviceQueryDesc queryDesc(HWDeviceType::Unknown);\n\n  switch (_config.backendVersion.flavor) {\n  case igl::BackendFlavor::Invalid: {\n    auto headlessView = [[HeadlessView alloc] initWithFrame:_frame];\n    self.view = headlessView;\n\n    // @fb-only\n        // @fb-only\n\n    // Headless platform does not run on a real device\n    _shellPlatform = std::make_shared<igl::shell::PlatformMac>(nullptr);\n\n    [headlessView prepareHeadless];\n    break;\n  }\n\n#if IGL_BACKEND_METAL\n  case igl::BackendFlavor::Metal: {\n    auto hwDevices = metal::HWDevice().queryDevices(queryDesc, nullptr);\n    auto device = metal::HWDevice().create(hwDevices[0], nullptr);\n\n    auto d = static_cast<igl::metal::macos::Device*>(device.get())->get();\n\n    auto metalView = [[MetalView alloc] initWithFrame:_frame device:d];\n    metalView.depthStencilPixelFormat = MTLPixelFormatDepth32Float_Stencil8;\n\n    metalView.delegate = self;\n\n    metalView.colorPixelFormat =\n        metal::Texture::textureFormatToMTLPixelFormat(_config.swapchainColorTextureFormat);\n    metalView.colorspace = metal::colorSpaceToCGColorSpace(_config.swapchainColorSpace);\n\n    metalView.framebufferOnly = NO;\n    [metalView setViewController:self];\n    self.view = metalView;\n    _shellPlatform = std::make_shared<igl::shell::PlatformMac>(std::move(device));\n    break;\n  }\n#endif\n\n#if IGL_BACKEND_OPENGL\n  case igl::BackendFlavor::OpenGL: {\n    const bool enableStencilBuffer =\n        _config.depthTextureFormat == igl::TextureFormat::S8_UInt_Z24_UNorm ||\n        _config.depthTextureFormat == igl::TextureFormat::S_UInt8;\n    const NSOpenGLPixelFormatAttribute stencilSize = enableStencilBuffer ? 8 : 0;\n\n    NSOpenGLPixelFormat* pixelFormat;\n    if (_config.backendVersion.majorVersion == 4 && _config.backendVersion.minorVersion == 1) {\n      static NSOpenGLPixelFormatAttribute attributes[] = {\n          NSOpenGLPFADoubleBuffer,\n          NSOpenGLPFAAllowOfflineRenderers,\n          NSOpenGLPFAMultisample,\n          1,\n          NSOpenGLPFASampleBuffers,\n          1,\n          NSOpenGLPFASamples,\n          4,\n          NSOpenGLPFAColorSize,\n          32,\n          NSOpenGLPFADepthSize,\n          24,\n          NSOpenGLPFAStencilSize,\n          stencilSize,\n          NSOpenGLPFAOpenGLProfile,\n          NSOpenGLProfileVersion4_1Core,\n          0,\n      };\n      pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];\n      IGL_DEBUG_ASSERT(pixelFormat, \"Requested attributes not supported\");\n    } else if (_config.backendVersion.majorVersion == 3 &&\n               _config.backendVersion.minorVersion == 2) {\n      static NSOpenGLPixelFormatAttribute attributes[] = {\n          NSOpenGLPFADoubleBuffer,\n          NSOpenGLPFAAllowOfflineRenderers,\n          NSOpenGLPFAMultisample,\n          1,\n          NSOpenGLPFASampleBuffers,\n          1,\n          NSOpenGLPFASamples,\n          4,\n          NSOpenGLPFAColorSize,\n          32,\n          NSOpenGLPFADepthSize,\n          24,\n          NSOpenGLPFAStencilSize,\n          stencilSize,\n          NSOpenGLPFAOpenGLProfile,\n          NSOpenGLProfileVersion3_2Core,\n          0,\n      };\n      pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];\n    } else if (_config.backendVersion.majorVersion == 2 &&\n               _config.backendVersion.minorVersion == 1) {\n      static NSOpenGLPixelFormatAttribute attributes[] = {\n          NSOpenGLPFADoubleBuffer,\n          NSOpenGLPFAAllowOfflineRenderers,\n          NSOpenGLPFAMultisample,\n          1,\n          NSOpenGLPFASampleBuffers,\n          1,\n          NSOpenGLPFASamples,\n          4,\n          NSOpenGLPFAColorSize,\n          32,\n          NSOpenGLPFADepthSize,\n          24,\n          NSOpenGLPFAStencilSize,\n          stencilSize,\n          NSOpenGLPFAOpenGLProfile,\n          NSOpenGLProfileVersionLegacy,\n          0,\n      };\n      pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];\n    } else {\n      IGL_DEBUG_ABORT(\"Unsupported OpenGL version: %u.%u\\n\",\n                      _config.backendVersion.majorVersion,\n                      _config.backendVersion.minorVersion);\n    }\n    auto openGLView = [[GLView alloc] initWithFrame:_frame pixelFormat:pixelFormat];\n    igl::Result result;\n    auto context = igl::opengl::macos::Context::createContext(openGLView.openGLContext, &result);\n    IGL_DEBUG_ASSERT(result.isOk());\n    _shellPlatform = std::make_shared<igl::shell::PlatformMac>(\n        opengl::macos::HWDevice().createWithContext(std::move(context), nullptr));\n\n    auto& device = _shellPlatform->getDevice();\n    auto* platformDevice = device.getPlatformDevice<igl::opengl::macos::PlatformDevice>();\n    platformDevice->setNativeDrawableTextureFormat(_config.swapchainColorTextureFormat, nullptr);\n    self.view = openGLView;\n    break;\n  }\n#endif\n\n#if IGL_BACKEND_VULKAN\n  case igl::BackendFlavor::Vulkan: {\n    auto vulkanView = [[VulkanView alloc] initWithFrame:_frame];\n\n    self.view = vulkanView;\n\n    // vulkanView.wantsLayer =\n    // YES; // Back the view with a layer created by the makeBackingLayer method.\n\n    igl::vulkan::VulkanContextConfig vulkanContextConfig;\n    vulkanContextConfig.terminateOnValidationError = true;\n\n    vulkanContextConfig.swapChainColorSpace = _config.swapchainColorSpace;\n    vulkanContextConfig.requestedSwapChainTextureFormat = _config.swapchainColorTextureFormat;\n\n    auto context =\n        igl::vulkan::HWDevice::createContext(vulkanContextConfig, (__bridge void*)vulkanView);\n    auto devices = igl::vulkan::HWDevice::queryDevices(\n        *context, igl::HWDeviceQueryDesc(igl::HWDeviceType::DiscreteGpu), nullptr);\n    if (devices.empty()) {\n      devices = igl::vulkan::HWDevice::queryDevices(\n          *context, igl::HWDeviceQueryDesc(igl::HWDeviceType::IntegratedGpu), nullptr);\n    }\n    if (devices.empty()) {\n      devices = igl::vulkan::HWDevice::queryDevices(\n          *context, igl::HWDeviceQueryDesc(igl::HWDeviceType::SoftwareGpu), nullptr);\n    }\n    auto device = igl::vulkan::HWDevice::create(\n        std::move(context), devices[0], 0, 0, 0, nullptr, nullptr, \"IGL Shell\", nullptr);\n\n    _shellPlatform = std::make_shared<igl::shell::PlatformMac>(std::move(device));\n    [vulkanView prepareVulkan:_shellPlatform.get()];\n    break;\n  }\n#endif\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n\n    // @fb-only\n        // @fb-only\n\n    // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n            // @fb-only\n        // @fb-only\n\n    // @fb-only\n\n    // @fb-only\n\n    // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n\n  default: {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    break;\n  }\n  }\n\n  _session = _factory->createRenderSession(_shellPlatform);\n  IGL_DEBUG_ASSERT(_session, \"createDefaultRenderSession() must return a valid session\");\n  // Get initial native surface dimensions\n  _shellParams.nativeSurfaceDimensions = glm::ivec2(2048, 1536);\n  auto args =\n      shell::convertArgvToParams(igl::shell::Platform::argc(), igl::shell::Platform::argv());\n  shell::parseShellParams(args, _shellParams);\n\n  // When timer rendering is opted in, configure the Metal view for external\n  // CVDisplayLink-driven rendering instead of MTKView's internal display link\n  // (which may not fire for non-frontmost apps on macOS).\n  if (_shellParams.useTimerRendering && [self.view isKindOfClass:[MetalView class]]) {\n    MetalView* metalView = (MetalView*)self.view;\n    metalView.enableSetNeedsDisplay = YES;\n    metalView.paused = YES;\n  }\n\n  _session->setShellParams(_shellParams);\n  _session->initialize();\n}\n\nstatic CVReturn metalDisplayLinkCallback(CVDisplayLinkRef /*displayLink*/,\n                                         const CVTimeStamp* /*now*/,\n                                         const CVTimeStamp* /*outputTime*/,\n                                         CVOptionFlags /*flagsIn*/,\n                                         CVOptionFlags* /*flagsOut*/,\n                                         void* userdata) {\n  [(__bridge ViewController*)userdata performSelectorOnMainThread:@selector(triggerMetalRender)\n                                                       withObject:nil\n                                                    waitUntilDone:NO];\n  return kCVReturnSuccess;\n}\n\n- (void)triggerMetalRender {\n  [self.view setNeedsDisplay:YES];\n}\n\n- (void)viewDidAppear {\n  if ([self.view isKindOfClass:[MetalView class]]) {\n    if (_shellParams.useTimerRendering) {\n      // Use a CVDisplayLink to drive Metal rendering, synced to the display refresh\n      // rate. MTKView's internal CVDisplayLink may not fire for non-frontmost apps\n      // (e.g., when launched from automated tools for screenshot capture).\n      CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);\n      CVDisplayLinkSetOutputCallback(_displayLink, &metalDisplayLinkCallback, (__bridge void*)self);\n      CVDisplayLinkStart(_displayLink);\n    } else {\n      MetalView* v = (MetalView*)self.view;\n      v.paused = NO;\n    }\n  } else if ([self.view isKindOfClass:[GLView class]]) {\n    GLView* v = (GLView*)self.view;\n    [v startTimer];\n  }\n  [self.view.window makeFirstResponder:self];\n}\n\n- (void)viewWillDisappear {\n  if ([self.view isKindOfClass:[MetalView class]]) {\n    if (_shellParams.useTimerRendering) {\n      CVDisplayLinkStop(_displayLink);\n      CVDisplayLinkRelease(_displayLink);\n      _displayLink = NULL;\n    } else {\n      MetalView* v = (MetalView*)self.view;\n      v.paused = YES;\n    }\n  } else if ([self.view isKindOfClass:[GLView class]]) {\n    GLView* v = (GLView*)self.view;\n    [v stopTimer];\n  }\n}\n\n- (void)drawInMTKView:(nonnull MTKView*)view {\n  @autoreleasepool {\n    _currentDrawable = view.currentDrawable;\n    _depthStencilTexture = view.depthStencilTexture;\n    [self render];\n    _currentDrawable = nil;\n  }\n}\n\n- (void)mtkView:(nonnull MTKView*)view drawableSizeWillChange:(CGSize)size {\n  _frame.size = size;\n}\n\n- (void)mtkView:(nonnull MTKView*)view drawableSizeDidChange:(CGSize)size {\n}\n\n- (std::shared_ptr<igl::ITexture>)createTextureFromNativeDrawable {\n  switch (_config.backendVersion.flavor) {\n#if IGL_BACKEND_METAL\n  case igl::BackendFlavor::Metal: {\n    auto& device = _shellPlatform->getDevice();\n    auto* platformDevice = device.getPlatformDevice<igl::metal::PlatformDevice>();\n    IGL_DEBUG_ASSERT(platformDevice);\n    IGL_DEBUG_ASSERT(_currentDrawable != nil);\n    auto texture = platformDevice->createTextureFromNativeDrawable(_currentDrawable, nullptr);\n    return texture;\n  }\n#endif\n\n#if IGL_BACKEND_OPENGL\n  case igl::BackendFlavor::OpenGL: {\n    auto& device = _shellPlatform->getDevice();\n    auto* platformDevice = device.getPlatformDevice<igl::opengl::macos::PlatformDevice>();\n    IGL_DEBUG_ASSERT(platformDevice);\n    auto texture = platformDevice->createTextureFromNativeDrawable(nullptr);\n    return texture;\n  }\n#endif\n\n#if IGL_BACKEND_VULKAN\n  case igl::BackendFlavor::Vulkan: {\n    auto& device = _shellPlatform->getDevice();\n    auto* platformDevice = device.getPlatformDevice<igl::vulkan::PlatformDevice>();\n    IGL_DEBUG_ASSERT(platformDevice);\n    auto texture = platformDevice->createTextureFromNativeDrawable(nullptr);\n    return texture;\n  }\n#endif\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n\n  default: {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return nullptr;\n  }\n  }\n}\n\n- (std::shared_ptr<igl::ITexture>)createTextureFromNativeDepth {\n  switch (_config.backendVersion.flavor) {\n#if IGL_BACKEND_METAL\n  case igl::BackendFlavor::Metal: {\n    auto& device = _shellPlatform->getDevice();\n    auto* platformDevice = device.getPlatformDevice<igl::metal::PlatformDevice>();\n    IGL_DEBUG_ASSERT(platformDevice);\n    auto texture = platformDevice->createTextureFromNativeDepth(_depthStencilTexture, nullptr);\n    return texture;\n  }\n#endif\n\n#if IGL_BACKEND_OPENGL\n  case igl::BackendFlavor::OpenGL: {\n    auto& device = _shellPlatform->getDevice();\n    auto* platformDevice = device.getPlatformDevice<igl::opengl::macos::PlatformDevice>();\n    IGL_DEBUG_ASSERT(platformDevice);\n    auto texture = platformDevice->createTextureFromNativeDepth(nullptr);\n    return texture;\n  }\n#endif\n\n#if IGL_BACKEND_VULKAN\n  case igl::BackendFlavor::Vulkan: {\n    auto& device = static_cast<igl::vulkan::Device&>(_shellPlatform->getDevice());\n    auto extents = device.getVulkanContext().getSwapchainExtent();\n    auto* platformDevice =\n        _shellPlatform->getDevice().getPlatformDevice<igl::vulkan::PlatformDevice>();\n\n    IGL_DEBUG_ASSERT(platformDevice);\n    auto texture =\n        platformDevice->createTextureFromNativeDepth(extents.width, extents.height, nullptr);\n    return texture;\n  }\n#endif\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n  // @fb-only\n// @fb-only\n\n  default: {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return nullptr;\n  }\n  }\n}\n\n- (BOOL)acceptsFirstResponder {\n  return YES;\n}\n\n- (NSPoint)locationForEvent:(NSEvent*)event {\n  NSRect contentRect = self.view.frame;\n  NSPoint pos = [event locationInWindow];\n  return NSMakePoint(pos.x, contentRect.size.height - pos.y);\n}\n\nstatic uint32_t getModifiers(NSEvent* event) {\n  uint32_t modifiers = igl::shell::kKeyEventModifierNone;\n  const NSUInteger flags = [event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask;\n\n  if (flags & NSEventModifierFlagShift) {\n    modifiers |= igl::shell::kKeyEventModifierShift;\n  }\n  if (flags & NSEventModifierFlagCapsLock) {\n    modifiers |= igl::shell::kKeyEventModifierCapsLock;\n  }\n  if (flags & NSEventModifierFlagControl) {\n    modifiers |= igl::shell::kKeyEventModifierControl;\n  }\n  if (flags & NSEventModifierFlagOption) {\n    modifiers |= igl::shell::kKeyEventModifierOption;\n  }\n  if (flags & NSEventModifierFlagCommand) {\n    modifiers |= igl::shell::kKeyEventModifierCommand;\n  }\n  if (flags & NSEventModifierFlagNumericPad) {\n    modifiers |= igl::shell::kKeyEventModifierNumLock;\n  }\n  return modifiers;\n}\n\n- (void)keyUp:(NSEvent*)event {\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::KeyEvent(false, event.keyCode, getModifiers(event)));\n}\n\n- (void)keyDown:(NSEvent*)event {\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::KeyEvent(true, event.keyCode, getModifiers(event)));\n  std::string characters([event.characters UTF8String]);\n  for (const auto& c : characters) {\n    _shellPlatform->getInputDispatcher().queueEvent(igl::shell::CharEvent{.character = c});\n  }\n}\n\n- (void)mouseDown:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseButtonEvent(igl::shell::MouseButton::Left, true, curPoint.x, curPoint.y));\n}\n\n- (void)rightMouseDown:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseButtonEvent(igl::shell::MouseButton::Right, true, curPoint.x, curPoint.y));\n}\n\n- (void)otherMouseDown:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseButtonEvent(igl::shell::MouseButton::Middle, true, curPoint.x, curPoint.y));\n}\n\n- (void)mouseUp:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseButtonEvent(igl::shell::MouseButton::Left, false, curPoint.x, curPoint.y));\n}\n\n- (void)rightMouseUp:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseButtonEvent(igl::shell::MouseButton::Right, false, curPoint.x, curPoint.y));\n}\n\n- (void)otherMouseUp:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseButtonEvent(igl::shell::MouseButton::Middle, false, curPoint.x, curPoint.y));\n}\n\n- (void)mouseMoved:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseMotionEvent(curPoint.x, curPoint.y, event.deltaX, event.deltaY));\n}\n\n- (void)mouseDragged:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseMotionEvent(curPoint.x, curPoint.y, event.deltaX, event.deltaY));\n}\n\n- (void)rightMouseDragged:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseMotionEvent(curPoint.x, curPoint.y, event.deltaX, event.deltaY));\n}\n\n- (void)otherMouseDragged:(NSEvent*)event {\n  NSPoint curPoint = [self locationForEvent:event];\n  _shellPlatform->getInputDispatcher().queueEvent(\n      igl::shell::MouseMotionEvent(curPoint.x, curPoint.y, event.deltaX, event.deltaY));\n}\n\n- (void)scrollWheel:(NSEvent*)event {\n  _shellPlatform->getInputDispatcher().queueEvent(igl::shell::MouseWheelEvent(\n      event.scrollingDeltaX * _kMouseSpeed, event.scrollingDeltaY * _kMouseSpeed));\n}\n\n- (CGRect)frame {\n  return _frame;\n}\n\n- (igl::ColorSpace)colorSpace {\n  return _config.swapchainColorSpace;\n}\n\n@end\n"
  },
  {
    "path": "shell/mac/VulkanView.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import <AppKit/AppKit.h>\n#include <memory>\n#include <shell/shared/platform/Platform.h>\n\n@interface VulkanView : NSView {\n}\n- (void)startTimer;\n- (void)stopTimer;\n- (void)prepareVulkan:(igl::shell::Platform*)platform;\n- (void)viewDidChangeBackingProperties;\n- (void)frameDidChange:(NSNotification*)notification;\n- (void)updateSwapchain;\n@end\n"
  },
  {
    "path": "shell/mac/VulkanView.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#import \"VulkanView.h\"\n\n#import \"AppDelegate.h\"\n#import \"ViewController.h\" // IWYU pragma: keep\n\n#import <Foundation/Foundation.h>\n\n#if IGL_BACKEND_VULKAN\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanSwapchain.h>\n#endif\n\n@interface VulkanView () {\n  CVDisplayLinkRef _displayLink; // display link for managing rendering thread\n  igl::shell::Platform* _shellPlatform;\n  IBOutlet NSViewController* _viewController;\n}\n@end\n\n@implementation VulkanView\n\n- (void)dealloc {\n  CVDisplayLinkRelease(_displayLink);\n  _shellPlatform = nullptr;\n}\n\n- (void)prepareVulkan:(igl::shell::Platform*)platform {\n  NSApplication* app = [NSApplication sharedApplication];\n  NSWindow* window = [app windows][0];\n  NSTabViewController* tabController = (NSTabViewController*)window.contentViewController;\n  NSTabViewItem* item = tabController.tabViewItems[tabController.selectedTabViewItemIndex];\n\n  ViewController* controller = (ViewController*)item.viewController;\n  self->_viewController = controller;\n  _shellPlatform = platform;\n  self.postsFrameChangedNotifications = YES;\n\n  [[NSNotificationCenter defaultCenter] addObserver:self\n                                           selector:@selector(frameDidChange:)\n                                               name:NSViewFrameDidChangeNotification\n                                             object:self];\n\n  [controller initModule];\n\n  [self initTimer];\n  [self startTimer];\n}\n\nstatic CVReturn displayLinkCallback(CVDisplayLinkRef /*displayLink*/,\n                                    const CVTimeStamp* /*now*/,\n                                    const CVTimeStamp* /*outputTime*/,\n                                    CVOptionFlags /*flagsIn*/,\n                                    CVOptionFlags* /*flagsOut*/,\n\n                                    void* userdata) {\n  auto view = (__bridge VulkanView*)userdata;\n  [view->_viewController performSelectorOnMainThread:@selector(render)\n                                          withObject:nil\n                                       waitUntilDone:NO];\n  return kCVReturnSuccess;\n}\n\n- (void)initTimer {\n  // Create a display link capable of being used with all active displays\n  CVDisplayLinkCreateWithActiveCGDisplays(&_displayLink);\n\n  // Set the renderer output callback function\n  CVDisplayLinkSetOutputCallback(_displayLink, &displayLinkCallback, (__bridge void*)self);\n}\n\n- (void)startTimer {\n  CVDisplayLinkStart(_displayLink);\n}\n\n- (void)stopTimer {\n  CVDisplayLinkStop(_displayLink);\n}\n\n/** Indicates that the view wants to draw using the backing layer instead of using drawRect:.  */\n- (BOOL)wantsUpdateLayer {\n  return YES;\n}\n\n- (void)viewDidChangeBackingProperties {\n  [self updateSwapchain];\n}\n\n- (void)updateSwapchain {\n  const NSRect contentRect = [self frame];\n  const NSRect imageRect = [self convertRectToBacking:contentRect];\n  const float xscale = imageRect.size.width / contentRect.size.width;\n\n  if (self.layer != nil && xscale != [self.layer contentsScale]) {\n    [self.layer setContentsScale:xscale];\n  }\n\n#if IGL_BACKEND_VULKAN\n  if (_shellPlatform != nullptr) {\n    auto& device = static_cast<igl::vulkan::Device&>(_shellPlatform->getDevice());\n    const igl::vulkan::VulkanContext& vulkanContext = device.getVulkanContext();\n    auto extents = vulkanContext.getSwapchainExtent();\n    if (imageRect.size.width != extents.width || imageRect.size.height != extents.height) {\n      device.getVulkanContext().initSwapchain(imageRect.size.width, imageRect.size.height);\n    }\n  }\n#endif // IGL_BACKEND_VULKAN\n}\n\n- (void)frameDidChange:(NSNotification*)notification {\n  [self updateSwapchain];\n}\n\n/** Returns a Metal-compatible layer. */\n+ (Class)layerClass {\n  return [CAMetalLayer class];\n}\n\n/** If the wantsLayer property is set to YES, this method will be invoked to return a layer\n * instance. */\n- (CALayer*)makeBackingLayer {\n  CALayer* layer = [self.class.layerClass layer];\n  NSScreen* screen = [NSScreen mainScreen];\n  CGFloat factor = [screen backingScaleFactor];\n  layer.contentsScale = factor;\n  return layer;\n}\n\n- (BOOL)acceptsFirstResponder {\n  return YES;\n}\n\n- (void)keyUp:(NSEvent*)event {\n  if (_viewController) {\n    [_viewController keyUp:event];\n  }\n}\n\n- (void)keyDown:(NSEvent*)event {\n  if (_viewController) {\n    [_viewController keyDown:event];\n  }\n}\n\n@end\n"
  },
  {
    "path": "shell/mac/main.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#import <AppKit/NSApplication.h>\n#import <shell/shared/platform/Platform.h>\n\nint main(int argc, char* argv[]) {\n  igl::shell::Platform::initializeCommandLineArgs(argc, argv);\n\n  return NSApplicationMain(argc, (const char**)argv);\n}\n"
  },
  {
    "path": "shell/openxr/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nset(PROJECT_NAME \"IGLShellOpenXR\")\n\nfile(GLOB SHELL_OPENXR_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../openxr/impl/*.cpp\n     ../openxr/*.cpp)\n\nfile(GLOB SHELL_OPENXR_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../openxr/impl/*.h\n     ../openxr/*.h)\n\nmacro(ADD_SHELL_LIBRARY name srcs)\n  set (extra_srcs ${ARGN})\n  add_library(${name} ${srcs} ${extra_srcs})\n\n  target_link_libraries(${name} PUBLIC IGLLibrary)\n\n  target_include_directories(${name} PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/openxr-sdk/src/common\")\n  target_include_directories(${name} PUBLIC \"${CMAKE_CURRENT_BINARY_DIR}/include_shell_openxr\")\n\n  igl_set_folder(${name} \"IGL\")\n  igl_set_cxxstd(${name} 20)\nendmacro()\n\nif(ANDROID)\n  if(IGL_WITH_VULKAN)\n    file(GLOB SHELL_OPENXR_PLATFORM_ANDROID_VULKAN_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n      ../openxr/mobile/vulkan/*.cpp)\n\n    file(GLOB SHELL_OPENXR_PLATFORM_ANDROID_VULKAN_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n      ../openxr/mobile/vulkan/*.h)\n\n    add_shell_library(IGLShellOpenXR_AndroidVulkan\n      ${SHELL_OPENXR_SRC_FILES}\n      ${SHELL_OPENXR_HEADER_FILES}\n      ${SHELL_OPENXR_PLATFORM_ANDROID_VULKAN_SRC_FILES}\n      ${SHELL_OPENXR_PLATFORM_ANDROID_VULKAN_HEADER_FILES})\n    target_compile_definitions(IGLShellOpenXR_AndroidVulkan PRIVATE \"USE_VULKAN_BACKEND\" \"XR_USE_PLATFORM_ANDROID\" \"XR_USE_GRAPHICS_API_VULKAN\")\n  endif()\n  if(IGL_WITH_OPENGLES)\n    file(GLOB SHELL_OPENXR_PLATFORM_ANDROID_GL_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n      ../openxr/mobile/opengl/*.cpp)\n\n    file(GLOB SHELL_OPENXR_PLATFORM_ANDROID_GL_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n      ../openxr/mobile/opengl/*.h)\n\n    add_shell_library(IGLShellOpenXR_AndroidOpenGLES\n      ${SHELL_OPENXR_SRC_FILES}\n      ${SHELL_OPENXR_HEADER_FILES}\n      ${SHELL_OPENXR_PLATFORM_ANDROID_GL_SRC_FILES}\n      ${SHELL_OPENXR_PLATFORM_ANDROID_GL_HEADER_FILES})\n    target_compile_definitions(IGLShellOpenXR_AndroidOpenGLES PRIVATE \"USE_OPENGL_BACKEND\" \"XR_USE_PLATFORM_ANDROID\" \"XR_USE_GRAPHICS_API_OPENGL_ES\")\n  endif()\nendif()\n\nif(WIN32)\n  if(IGL_WITH_VULKAN)\n    file(GLOB SHELL_OPENXR_PLATFORM_ANDROID_VULKAN_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n      ../openxr/mobile/vulkan/*.cpp)\n\n    file(GLOB SHELL_OPENXR_PLATFORM_ANDROID_VULKAN_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n      ../openxr/mobile/vulkan/*.h)\n\n    add_shell_library(IGLShellOpenXR_sim_vulkan\n      ../openxr/mobile/XrApp.cpp\n      ../openxr/mobile/AndroidMain.cpp\n      ${SHELL_OPENXR_SRC_FILES}\n      ${SHELL_OPENXR_HEADER_FILES}\n      ${SHELL_OPENXR_PLATFORM_ANDROID_VULKAN_SRC_FILES}\n      ${SHELL_OPENXR_PLATFORM_ANDROID_VULKAN_HEADER_FILES})\n    igl_set_folder(IGLShellOpenXR_sim_vulkan \"IGL Shell App/vulkan\")\n    target_include_directories(IGLShellOpenXR_sim_vulkan PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/openxr-sdk/src/common\")\n    target_compile_definitions(IGLShellOpenXR_sim_vulkan PRIVATE \"USE_VULKAN_BACKEND\" \"XR_USE_PLATFORM_WIN32\" \"XR_USE_GRAPHICS_API_VULKAN\")\n  endif()\n  if(IGL_WITH_OPENGL)\n    file(GLOB SHELL_OPENXR_PLATFORM_ANDROID_OPENGL_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n      ../openxr/mobile/opengl/*.cpp)\n\n    file(GLOB SHELL_OPENXR_PLATFORM_ANDROID_OPENGL_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n      ../openxr/mobile/opengl/*.h)\n\n    add_shell_library(IGLShellOpenXR_sim_opengl\n      ../openxr/mobile/XrApp.cpp\n      ../openxr/mobile/AndroidMain.cpp\n      ${SHELL_OPENXR_SRC_FILES}\n      ${SHELL_OPENXR_HEADER_FILES}\n      ${SHELL_OPENXR_PLATFORM_ANDROID_OPENGL_SRC_FILES}\n      ${SHELL_OPENXR_PLATFORM_ANDROID_OPENGL_HEADER_FILES})\n    igl_set_folder(IGLShellOpenXR_sim_opengl \"IGL Shell App/opengl\")\n    target_include_directories(IGLShellOpenXR_sim_opengl PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/openxr-sdk/src/common\")\n    target_compile_definitions(IGLShellOpenXR_sim_opengl PRIVATE \"USE_OPENGL_BACKEND\" \"XR_USE_PLATFORM_WIN32\" \"XR_USE_GRAPHICS_API_OPENGL\")\n  endif()\nendif()\n"
  },
  {
    "path": "shell/openxr/XrApp.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <array>\n#include <glm/glm.hpp>\n#include <shell/openxr/XrComposition.h>\n#include <shell/openxr/XrPlatform.h>\n#include <shell/openxr/XrRefreshRate.h>\n#include <string>\n#include <unordered_set>\n#include <vector>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n#include <igl/IGL.h>\n#include <igl/Macros.h>\n\nstruct android_app;\nstruct AAssetManager;\n\n// forward declarations\nnamespace igl::shell::openxr {\nclass XrHands;\nclass XrSwapchainProvider;\nclass XrPassthrough;\nnamespace impl {\nclass XrAppImpl;\n}\n} // namespace igl::shell::openxr\n\nnamespace igl::shell::openxr {\n\nclass XrApp {\n public:\n  XrApp(std::unique_ptr<impl::XrAppImpl>&& impl, bool shouldPresent = true);\n  ~XrApp();\n\n  inline bool initialized() const {\n    return initialized_;\n  }\n\n  struct InitParams {\n    XrRefreshRate::Params refreshRateParams;\n  };\n  bool initialize(const struct android_app* app, const InitParams& params);\n\n  XrInstance instance() const;\n\n  void handleXrEvents();\n  void handleActionView(const std::string& data);\n\n  void update();\n\n  void setNativeWindow(void* win) {\n    nativeWindow_ = win;\n  }\n  void* nativeWindow() const {\n    return nativeWindow_;\n  }\n\n  void setResumed(bool resumed) {\n    resumed_ = resumed;\n  }\n  bool resumed() const {\n    return resumed_;\n  }\n\n  bool sessionActive() const {\n    return sessionActive_;\n  }\n  XrSession session() const;\n\n private:\n  bool checkExtensions();\n  bool createInstance();\n  bool createSystem();\n  bool enumerateViewConfigurations();\n  void enumerateReferenceSpaces();\n  void enumerateBlendModes();\n  void updateSwapchainProviders();\n  void handleSessionStateChanges(XrSessionState state);\n  void createShellSession(std::unique_ptr<igl::IDevice> device, AAssetManager* assetMgr);\n\n  void createSpaces();\n  XrFrameState beginFrame();\n  void render();\n  void endFrame(XrFrameState frameState);\n\n  void updateQuadComposition() noexcept;\n\n  [[nodiscard]] inline bool passthroughSupported() const noexcept;\n  [[nodiscard]] inline bool passthroughEnabled() const noexcept;\n\n  [[nodiscard]] inline bool handTrackingSupported() const noexcept;\n  [[nodiscard]] inline bool handTrackingMeshSupported() const noexcept;\n  [[nodiscard]] inline bool refreshRateExtensionSupported() const noexcept;\n  [[nodiscard]] inline bool instanceCreateInfoAndroidSupported() const noexcept;\n  [[nodiscard]] inline bool alphaBlendCompositionSupported() const noexcept;\n\n  void* nativeWindow_ = nullptr;\n  bool resumed_ = false;\n  bool sessionActive_ = false;\n\n  std::vector<XrExtensionProperties> extensions_;\n  std::vector<const char*> enabledExtensions_;\n\n  XrInstanceProperties instanceProps_ = {\n      .type = XR_TYPE_INSTANCE_PROPERTIES,\n      .next = nullptr,\n  };\n\n  XrSystemHandTrackingPropertiesEXT handTrackingSystemProps_ = {\n      .type = XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT,\n      .next = nullptr,\n  };\n  XrSystemProperties systemProps_ = {\n      .type = XR_TYPE_SYSTEM_PROPERTIES,\n      .next = &handTrackingSystemProps_,\n  };\n\n#if IGL_PLATFORM_ANDROID\n  XrInstanceCreateInfoAndroidKHR instanceCreateInfoAndroid_ = {\n      .type = XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR,\n  };\n#endif // IGL_PLATFORM_ANDROID\n\n  std::unordered_set<std::string> supportedOptionalXrExtensions_;\n\n  XrInstance instance_ = XR_NULL_HANDLE;\n  XrSystemId systemId_ = XR_NULL_SYSTEM_ID;\n  XrSession session_ = XR_NULL_HANDLE;\n\n  bool useSinglePassStereo_ = true;\n  bool additiveBlendingSupported_ = false;\n  bool useQuadLayerComposition_ = false;\n\n  XrViewConfigurationProperties viewConfigProps_ = {.type = XR_TYPE_VIEW_CONFIGURATION_PROPERTIES};\n  std::array<XrViewConfigurationView, XrComposition::kNumViews> viewports_{};\n  std::array<XrView, XrComposition::kNumViews> views_{};\n  std::array<XrPosef, XrComposition::kNumViews> viewStagePoses_{};\n  std::array<glm::mat4, XrComposition::kNumViews> viewTransforms_{};\n  std::array<glm::vec3, XrComposition::kNumViews> cameraPositions_{};\n\n  std::vector<std::unique_ptr<XrComposition>> compositionLayers_;\n\n  XrSpace headSpace_ = XR_NULL_HANDLE;\n  XrSpace currentSpace_ = XR_NULL_HANDLE;\n  bool stageSpaceSupported_ = false;\n\n  std::unique_ptr<XrPassthrough> passthrough_;\n  std::unique_ptr<XrHands> hands_;\n  std::unique_ptr<XrRefreshRate> refreshRate_;\n\n  std::unique_ptr<impl::XrAppImpl> impl_;\n\n  bool initialized_ = false;\n\n  std::shared_ptr<igl::shell::Platform> platform_;\n  std::unique_ptr<igl::shell::RenderSession> renderSession_;\n\n  igl::shell::RenderSessionConfig sessionConfig_;\n  std::unique_ptr<igl::shell::ShellParams> shellParams_;\n};\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrComposition.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/XrComposition.h>\n\n#include <shell/openxr/impl/XrAppImpl.h>\n\nnamespace igl::shell::openxr {\nnamespace {\ninline void copyFov(Fov& dst, const XrFovf& src) {\n  dst.angleLeft = src.angleLeft;\n  dst.angleRight = src.angleRight;\n  dst.angleUp = src.angleUp;\n  dst.angleDown = src.angleDown;\n}\n} // namespace\n\nXrComposition::XrComposition(impl::XrAppImpl& appImpl,\n                             std::shared_ptr<Platform> platform,\n                             XrSession session,\n                             bool useSinglePassStereo) noexcept :\n  appImpl_(appImpl),\n  platform_(std::move(platform)),\n  session_(session),\n  useSinglePassStereo_(useSinglePassStereo) {}\n\nXrComposition::~XrComposition() noexcept = default;\n\nvoid XrComposition::updateSwapchainImageInfo(\n    std::array<impl::SwapchainImageInfo, kNumViews> swapchainImageInfo) noexcept {\n  if (swapchainImageInfo == swapchainImageInfo_) {\n    return;\n  }\n  swapchainImageInfo_ = swapchainImageInfo;\n\n  if (useSinglePassStereo_ && (swapchainImageInfo_[0] != swapchainImageInfo_[1])) {\n    IGL_LOG_ERROR(\"Single pass stereo requires identical swapchain image info.\\n\");\n    swapchainProviders_ = {};\n    return;\n  }\n\n  for (uint32_t i = 0; i < renderPassesCount(); ++i) {\n    swapchainProviders_[i] =\n        std::make_unique<XrSwapchainProvider>(appImpl_.createSwapchainProviderImpl(),\n                                              platform_,\n                                              session_,\n                                              swapchainImageInfo_[i],\n                                              useSinglePassStereo_ ? kNumViews : 1u);\n    if (!swapchainProviders_[i]->initialize()) {\n      swapchainProviders_ = {};\n      return;\n    }\n  }\n}\n\n[[nodiscard]] bool XrComposition::isValid() noexcept {\n  // Need to check only the first swapchain provider.\n  return swapchainProviders_[0] != nullptr;\n}\n\nuint32_t XrComposition::renderPassesCount() noexcept {\n  return useSinglePassStereo_ ? 1u : kNumViews;\n}\n\nSurfaceTextures XrComposition::beginRendering(\n    uint32_t renderPassIndex,\n    const std::array<XrView, kNumViews>& views,\n    const std::array<glm::mat4, kNumViews>& viewTransforms,\n    const std::array<glm::vec3, kNumViews>& cameraPositions,\n    std::vector<ViewParams>& viewParams) noexcept {\n  if (useSinglePassStereo_) {\n    IGL_DEBUG_ASSERT(viewParams.size() == kNumViews);\n    for (uint8_t i = 0; i < kNumViews; ++i) {\n      viewParams[i].viewMatrix = viewTransforms[i];\n      viewParams[i].cameraPosition = cameraPositions[i];\n      viewParams[i].viewIndex = i;\n      copyFov(viewParams[i].fov, views[i].fov);\n    }\n  } else {\n    IGL_DEBUG_ASSERT(viewParams.size() == 1);\n    viewParams[0].viewMatrix = viewTransforms[renderPassIndex];\n    viewParams[0].cameraPosition = cameraPositions[renderPassIndex];\n    viewParams[0].viewIndex = static_cast<uint8_t>(renderPassIndex);\n    copyFov(viewParams[0].fov, views[renderPassIndex].fov);\n  }\n  return swapchainProviders_[renderPassIndex]->getSurfaceTextures();\n}\n\nvoid XrComposition::endRendering(uint32_t renderPassIndex) noexcept {\n  swapchainProviders_[renderPassIndex]->releaseSwapchainImages();\n}\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrComposition.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <cstdint>\n#include <memory>\n#include <shell/openxr/XrPlatform.h>\n#include <shell/openxr/XrSwapchainProvider.h>\n#include <shell/openxr/impl/XrSwapchainProviderImpl.h>\n#include <vector>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/DepthParams.h>\n#include <shell/shared/renderSession/ViewParams.h>\n\nnamespace igl::shell::openxr {\nnamespace impl {\nclass XrAppImpl;\n} // namespace impl\n\nclass XrComposition {\n public:\n  static constexpr uint8_t kNumViews = 2; // 2 for stereo\n\n  XrComposition(impl::XrAppImpl& appImpl,\n                std::shared_ptr<Platform> platform,\n                XrSession session,\n                bool useSinglePassStereo) noexcept;\n  virtual ~XrComposition() noexcept;\n\n  void updateSwapchainImageInfo(\n      std::array<impl::SwapchainImageInfo, kNumViews> swapchainImageInfo) noexcept;\n\n  [[nodiscard]] bool isValid() noexcept;\n\n  [[nodiscard]] uint32_t renderPassesCount() noexcept;\n  [[nodiscard]] SurfaceTextures beginRendering(\n      uint32_t renderPassIndex,\n      const std::array<XrView, kNumViews>& views,\n      const std::array<glm::mat4, kNumViews>& viewTransforms,\n      const std::array<glm::vec3, kNumViews>& cameraPositions,\n      std::vector<ViewParams>& viewParams) noexcept;\n  void endRendering(uint32_t renderPassIndex) noexcept;\n\n  virtual void doComposition(const DepthParams& depthParams,\n                             const std::array<XrView, kNumViews>& views,\n                             const std::array<XrPosef, kNumViews>& viewStagePoses,\n                             XrSpace currentSpace,\n                             XrCompositionLayerFlags compositionFlags,\n                             std::vector<const XrCompositionLayerBaseHeader*>& layers) noexcept = 0;\n\n protected:\n  impl::XrAppImpl& appImpl_;\n  std::shared_ptr<Platform> platform_;\n  // NOLINTNEXTLINE(misc-misplaced-const)\n  const XrSession session_;\n\n  std::array<impl::SwapchainImageInfo, kNumViews> swapchainImageInfo_;\n\n  // If useSinglePassStereo_ is true, only one XrSwapchainProvider is used (with index 0).\n  std::array<std::unique_ptr<XrSwapchainProvider>, kNumViews> swapchainProviders_{};\n\n  const bool useSinglePassStereo_;\n};\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrCompositionProjection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/XrCompositionProjection.h>\n\nnamespace igl::shell::openxr {\n\nXrCompositionProjection::XrCompositionProjection(impl::XrAppImpl& appImpl,\n                                                 std::shared_ptr<Platform> platform,\n                                                 XrSession session,\n                                                 bool useSinglePassStereo) noexcept :\n  XrComposition(appImpl, std::move(platform), session, useSinglePassStereo) {}\n\n// NOLINTNEXTLINE(bugprone-exception-escape)\nvoid XrCompositionProjection::doComposition(\n    const DepthParams& depthParams,\n    const std::array<XrView, kNumViews>& views,\n    const std::array<XrPosef, kNumViews>& viewStagePoses,\n    XrSpace currentSpace,\n    XrCompositionLayerFlags compositionFlags,\n    std::vector<const XrCompositionLayerBaseHeader*>& layers) noexcept {\n  for (uint8_t view = 0; view < kNumViews; ++view) {\n    const auto subImageIndex = useSinglePassStereo_ ? static_cast<uint32_t>(view) : 0u;\n    const auto swapchainProviderIndex = useSinglePassStereo_ ? 0u : static_cast<uint32_t>(view);\n\n    const XrRect2Di imageRect = {{0, 0},\n                                 {\n                                     static_cast<int32_t>(swapchainImageInfo_[view].imageWidth),\n                                     static_cast<int32_t>(swapchainImageInfo_[view].imageHeight),\n                                 }};\n\n    depthInfos_[view] = {.type = XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR,\n                         .next = nullptr,\n                         .subImage =\n                             {\n                                 swapchainProviders_[swapchainProviderIndex]->depthSwapchain(),\n                                 imageRect,\n                                 subImageIndex,\n                             },\n                         .minDepth = depthParams.minDepth,\n                         .maxDepth = depthParams.maxDepth,\n                         .nearZ = depthParams.nearZ,\n                         .farZ = depthParams.farZ};\n\n    projectionViews_[view] = {.type = XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW,\n                              .next = &depthInfos_[view],\n                              .pose = viewStagePoses[view],\n                              .fov = views[view].fov,\n                              .subImage = {\n                                  swapchainProviders_[swapchainProviderIndex]->colorSwapchain(),\n                                  imageRect,\n                                  subImageIndex,\n                              }};\n  }\n\n  projectionLayer_ = {\n      .type = XR_TYPE_COMPOSITION_LAYER_PROJECTION,\n      .next = nullptr,\n      .layerFlags = compositionFlags,\n      .space = currentSpace,\n      .viewCount = static_cast<uint32_t>(kNumViews),\n      .views = projectionViews_.data(),\n  };\n\n  layers.push_back(reinterpret_cast<const XrCompositionLayerBaseHeader*>(&projectionLayer_));\n}\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrCompositionProjection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/openxr/XrComposition.h>\n\nnamespace igl::shell::openxr {\n\nclass XrCompositionProjection final : public XrComposition {\n public:\n  XrCompositionProjection(impl::XrAppImpl& appImpl,\n                          std::shared_ptr<Platform> platform,\n                          XrSession session,\n                          bool useSinglePassStereo) noexcept;\n\n  void doComposition(const DepthParams& depthParams,\n                     const std::array<XrView, kNumViews>& views,\n                     const std::array<XrPosef, kNumViews>& viewStagePoses,\n                     XrSpace currentSpace,\n                     XrCompositionLayerFlags compositionFlags,\n                     std::vector<const XrCompositionLayerBaseHeader*>& layers) noexcept override;\n\n private:\n  std::array<XrCompositionLayerProjectionView, kNumViews> projectionViews_{};\n  std::array<XrCompositionLayerDepthInfoKHR, kNumViews> depthInfos_{};\n  XrCompositionLayerProjection projectionLayer_{};\n};\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrCompositionQuad.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/XrCompositionQuad.h>\n\n#include <igl/RenderPipelineState.h>\n\nnamespace igl::shell::openxr {\nnamespace {\n#ifdef XR_FB_composition_layer_alpha_blend\ninline XrBlendFactorFB iglToOpenXR(BlendFactor factor) noexcept {\n  switch (factor) {\n  case igl::BlendFactor::Zero:\n    return XR_BLEND_FACTOR_ZERO_FB;\n  case igl::BlendFactor::One:\n    return XR_BLEND_FACTOR_ONE_FB;\n  case igl::BlendFactor::SrcAlpha:\n    return XR_BLEND_FACTOR_SRC_ALPHA_FB;\n  case igl::BlendFactor::OneMinusSrcAlpha:\n    return XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB;\n  case igl::BlendFactor::DstAlpha:\n    return XR_BLEND_FACTOR_DST_ALPHA_FB;\n  case igl::BlendFactor::OneMinusDstAlpha:\n    return XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB;\n  default:\n    IGL_DEBUG_ABORT(\"Not supported blend factor (%d)\", static_cast<int>(factor));\n    break;\n  }\n  return XR_BLEND_FACTOR_ZERO_FB;\n}\n#endif // XR_FB_composition_layer_alpha_blend\n} // namespace\n\nXrCompositionQuad::XrCompositionQuad(impl::XrAppImpl& appImpl,\n                                     std::shared_ptr<Platform> platform,\n                                     XrSession session,\n                                     bool useSinglePassStereo,\n                                     bool isAlphaBlendCompositionSupported,\n                                     const QuadLayerInfo& info) noexcept :\n  XrComposition(appImpl, std::move(platform), session, useSinglePassStereo),\n  isAlphaBlendCompositionSupported_(isAlphaBlendCompositionSupported) {\n  updateQuadLayerInfo(info);\n}\n\nvoid XrCompositionQuad::updateQuadLayerInfo(const QuadLayerInfo& info) noexcept {\n  info_ = info;\n\n#ifdef XR_FB_composition_layer_alpha_blend\n  customBlending_ = {.type = XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB,\n                     .next = nullptr,\n                     .srcFactorColor = iglToOpenXR(info.customSrcRGBBlendFactor),\n                     .dstFactorColor = iglToOpenXR(info.customDstRGBBlendFactor),\n                     .srcFactorAlpha = iglToOpenXR(info.customSrcAlphaBlendFactor),\n                     .dstFactorAlpha = iglToOpenXR(info.customDstAlphaBlendFactor)};\n#endif\n}\n\n// NOLINTNEXTLINE(bugprone-exception-escape)\nvoid XrCompositionQuad::doComposition(\n    const DepthParams& /* depthParams */,\n    const std::array<XrView, kNumViews>& /* views */,\n    const std::array<XrPosef, kNumViews>& /* viewStagePoses */,\n    XrSpace currentSpace,\n    XrCompositionLayerFlags compositionFlags,\n    std::vector<const XrCompositionLayerBaseHeader*>& layers) noexcept {\n  compositionFlags |= (info_.blendMode == igl::shell::LayerBlendMode::AlphaBlend)\n                          ? XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT\n                          : 0;\n\n  for (uint8_t view = 0; view < kNumViews; ++view) {\n    const auto subImageIndex = useSinglePassStereo_ ? static_cast<uint32_t>(view) : 0u;\n    const auto swapchainProviderIndex = useSinglePassStereo_ ? 0u : static_cast<uint32_t>(view);\n\n    const XrRect2Di imageRect = {{0, 0},\n                                 {\n                                     static_cast<int32_t>(swapchainImageInfo_[view].imageWidth),\n                                     static_cast<int32_t>(swapchainImageInfo_[view].imageHeight),\n                                 }};\n\n    quadLayers_[view] = {\n        .type = XR_TYPE_COMPOSITION_LAYER_QUAD,\n#ifdef XR_FB_composition_layer_alpha_blend\n        .next = (isAlphaBlendCompositionSupported_ &&\n                 info_.blendMode == igl::shell::LayerBlendMode::Custom)\n                    ? &customBlending_\n                    : nullptr,\n#else\n        .next = nullptr,\n#endif // XR_FB_composition_layer_alpha_blend\n        .layerFlags = compositionFlags,\n        .space = currentSpace,\n        .eyeVisibility = (view == 0) ? XR_EYE_VISIBILITY_LEFT : XR_EYE_VISIBILITY_RIGHT,\n        .subImage =\n            {\n                swapchainProviders_[swapchainProviderIndex]->colorSwapchain(),\n                imageRect,\n                subImageIndex,\n            },\n        .pose = {.orientation = {0.f, 0.f, 0.f, 1.f},\n                 .position = {info_.position.x, info_.position.y, info_.position.z}},\n        .size = {info_.size.x, info_.size.y},\n    };\n\n    layers.push_back(reinterpret_cast<const XrCompositionLayerBaseHeader*>(&quadLayers_[view]));\n  }\n}\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrCompositionQuad.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/openxr/XrComposition.h>\n#include <shell/shared/renderSession/QuadLayerParams.h>\n\nnamespace igl::shell::openxr {\n\nclass XrCompositionQuad final : public XrComposition {\n public:\n  XrCompositionQuad(impl::XrAppImpl& appImpl,\n                    std::shared_ptr<Platform> platform,\n                    XrSession session,\n                    bool useSinglePassStereo,\n                    bool isAlphaBlendCompositionSupported,\n                    const QuadLayerInfo& quadLayerInfo) noexcept;\n\n  void updateQuadLayerInfo(const QuadLayerInfo& info) noexcept;\n\n  void doComposition(const DepthParams& depthParams,\n                     const std::array<XrView, kNumViews>& views,\n                     const std::array<XrPosef, kNumViews>& viewStagePoses,\n                     XrSpace currentSpace,\n                     XrCompositionLayerFlags compositionFlags,\n                     std::vector<const XrCompositionLayerBaseHeader*>& layers) noexcept override;\n\n private:\n#ifdef XR_FB_composition_layer_alpha_blend\n  XrCompositionLayerAlphaBlendFB customBlending_{};\n#endif\n  std::array<XrCompositionLayerQuad, kNumViews> quadLayers_{};\n\n  QuadLayerInfo info_;\n\n  const bool isAlphaBlendCompositionSupported_;\n};\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrHands.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/XrHands.h>\n\n#include <chrono>\n#include <cstdint>\n#include <shell/openxr/XrLog.h>\n#include <igl/Core.h>\n\nnamespace igl::shell::openxr {\n\nnamespace {\ninline glm::quat glmQuatFromXrQuat(const XrQuaternionf& quat) noexcept {\n  return {quat.w, quat.x, quat.y, quat.z};\n}\n\ninline glm::vec4 glmVecFromXrVec(const XrVector4f& vec) noexcept {\n  return {vec.x, vec.y, vec.z, vec.w};\n}\n\ninline glm::vec4 glmVecFromXrVec(const XrVector4sFB& vec) noexcept {\n  return {vec.x, vec.y, vec.z, vec.w};\n}\n\ninline glm::vec3 glmVecFromXrVec(const XrVector3f& vec) noexcept {\n  return {vec.x, vec.y, vec.z};\n}\n\ninline glm::vec2 glmVecFromXrVec(const XrVector2f& vec) noexcept {\n  return {vec.x, vec.y};\n}\n\ninline Pose poseFromXrPose(const XrPosef& pose) noexcept {\n  return Pose{\n      .orientation = glmQuatFromXrQuat(pose.orientation),\n      .position = glmVecFromXrVec(pose.position),\n  };\n}\n\ninline int64_t currentTimeInNs() {\n  const auto now = std::chrono::steady_clock::now();\n  return std::chrono::duration_cast<std::chrono::nanoseconds>(now.time_since_epoch()).count();\n}\n} // namespace\n\nXrHands::XrHands(XrInstance instance, XrSession session, bool handMeshSupported) noexcept :\n  instance_(instance), session_(session), handMeshSupported_(handMeshSupported) {\n  XR_CHECK(xrGetInstanceProcAddr(\n      instance_, \"xrCreateHandTrackerEXT\", (PFN_xrVoidFunction*)(&xrCreateHandTrackerEXT_)));\n  IGL_DEBUG_ASSERT(xrCreateHandTrackerEXT_ != nullptr);\n  XR_CHECK(xrGetInstanceProcAddr(\n      instance_, \"xrDestroyHandTrackerEXT\", (PFN_xrVoidFunction*)(&xrDestroyHandTrackerEXT_)));\n  IGL_DEBUG_ASSERT(xrDestroyHandTrackerEXT_ != nullptr);\n  XR_CHECK(xrGetInstanceProcAddr(\n      instance_, \"xrLocateHandJointsEXT\", (PFN_xrVoidFunction*)(&xrLocateHandJointsEXT_)));\n  IGL_DEBUG_ASSERT(xrLocateHandJointsEXT_ != nullptr);\n\n  if (handMeshSupported) {\n    XR_CHECK(xrGetInstanceProcAddr(\n        instance_, \"xrGetHandMeshFB\", (PFN_xrVoidFunction*)(&xrGetHandMeshFB_)));\n    IGL_DEBUG_ASSERT(xrGetHandMeshFB_ != nullptr);\n  }\n}\n\nXrHands::~XrHands() noexcept {\n  if (leftHandTracker_ != XR_NULL_HANDLE) {\n    xrDestroyHandTrackerEXT_(leftHandTracker_);\n  }\n  if (rightHandTracker_ != XR_NULL_HANDLE) {\n    xrDestroyHandTrackerEXT_(rightHandTracker_);\n  }\n}\n\n// NOLINTNEXTLINE(bugprone-exception-escape)\nconst std::vector<const char*>& XrHands::getExtensions() noexcept {\n  static const std::vector<const char*> kExtensions{\n      XR_EXT_HAND_TRACKING_EXTENSION_NAME,\n      XR_FB_HAND_TRACKING_MESH_EXTENSION_NAME,\n  };\n  return kExtensions;\n}\n\nbool XrHands::initialize() noexcept {\n  std::array<XrHandTrackingDataSourceEXT, 2> dataSources = {\n      XR_HAND_TRACKING_DATA_SOURCE_UNOBSTRUCTED_EXT,\n      XR_HAND_TRACKING_DATA_SOURCE_CONTROLLER_EXT,\n  };\n\n  const XrHandTrackingDataSourceInfoEXT dataSourceInfo{\n      .type = XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT,\n      .requestedDataSourceCount = static_cast<uint32_t>(dataSources.size()),\n      .requestedDataSources = dataSources.data()};\n\n  XrHandTrackerCreateInfoEXT createInfo{\n      .type = XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT,\n      .next = &dataSourceInfo,\n      .hand = XR_HAND_LEFT_EXT,\n      .handJointSet = XR_HAND_JOINT_SET_DEFAULT_EXT,\n  };\n\n  XrResult result(XR_SUCCESS);\n  XR_CHECK(result = xrCreateHandTrackerEXT_(session_, &createInfo, &leftHandTracker_));\n  if (result != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"xrCreateHandTrackerEXT (left hand) failed.\\n\");\n    return false;\n  }\n\n  createInfo.hand = XR_HAND_RIGHT_EXT;\n  XR_CHECK(result = xrCreateHandTrackerEXT_(session_, &createInfo, &rightHandTracker_));\n  if (result != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"xrCreateHandTrackerEXT (right hand) failed.\\n\");\n    return false;\n  }\n\n  return true;\n}\n\nvoid XrHands::updateMeshes(std::array<HandMesh, 2>& handMeshes) noexcept {\n  if (!handMeshSupported_) {\n    return;\n  }\n\n  XrResult result(XR_SUCCESS);\n  XrHandTrackerEXT trackers[] = {leftHandTracker_, rightHandTracker_};\n  for (uint8_t i = 0; i < 2; ++i) {\n    XrHandTrackingMeshFB mesh{XR_TYPE_HAND_TRACKING_MESH_FB};\n    XR_CHECK(result = xrGetHandMeshFB_(trackers[i], &mesh));\n    if (result != XR_SUCCESS) {\n      continue;\n    }\n\n    IGL_DEBUG_ASSERT(mesh.jointCountOutput <= XR_HAND_JOINT_COUNT_EXT);\n    XrPosef jointBindPoses[XR_HAND_JOINT_COUNT_EXT]{};\n    XrHandJointEXT jointParents[XR_HAND_JOINT_COUNT_EXT]{};\n    float jointRadii[XR_HAND_JOINT_COUNT_EXT]{};\n\n    mesh.jointCapacityInput = mesh.jointCountOutput;\n    mesh.vertexCapacityInput = mesh.vertexCountOutput;\n    mesh.indexCapacityInput = mesh.indexCountOutput;\n\n    std::vector<XrVector3f> vertexPositions(mesh.vertexCapacityInput);\n    std::vector<XrVector3f> vertexNormals(mesh.vertexCapacityInput);\n    std::vector<XrVector2f> vertexUVs(mesh.vertexCapacityInput);\n    std::vector<XrVector4sFB> vertexBlendIndices(mesh.vertexCapacityInput);\n    std::vector<XrVector4f> vertexBlendWeights(mesh.vertexCapacityInput);\n\n    handMeshes[i].indices.resize(mesh.indexCapacityInput);\n\n    mesh.jointBindPoses = jointBindPoses;\n    mesh.jointParents = jointParents;\n    mesh.jointRadii = jointRadii;\n    mesh.vertexPositions = vertexPositions.data();\n    mesh.vertexNormals = vertexNormals.data();\n    mesh.vertexUVs = vertexUVs.data();\n    mesh.vertexBlendIndices = vertexBlendIndices.data();\n    mesh.vertexBlendWeights = vertexBlendWeights.data();\n    mesh.indices = handMeshes[i].indices.data();\n\n    XR_CHECK(result = xrGetHandMeshFB_(trackers[i], &mesh));\n    if (result != XR_SUCCESS) {\n      continue;\n    }\n\n    handMeshes[i].vertexCountOutput = mesh.vertexCountOutput;\n    handMeshes[i].indexCountOutput = mesh.indexCountOutput;\n    handMeshes[i].jointCountOutput = mesh.jointCountOutput;\n    handMeshes[i].vertexPositions.reserve(mesh.vertexCountOutput);\n    handMeshes[i].vertexNormals.reserve(mesh.vertexCountOutput);\n    handMeshes[i].vertexUVs.reserve(mesh.vertexCountOutput);\n    handMeshes[i].vertexBlendIndices.reserve(mesh.vertexCountOutput);\n    handMeshes[i].vertexBlendWeights.reserve(mesh.vertexCountOutput);\n    handMeshes[i].jointBindPoses.reserve(mesh.jointCountOutput);\n\n    for (uint32_t j = 0; j < mesh.vertexCountOutput; ++j) {\n      handMeshes[i].vertexPositions.emplace_back(glmVecFromXrVec(mesh.vertexPositions[j]));\n      handMeshes[i].vertexUVs.emplace_back(glmVecFromXrVec(mesh.vertexUVs[j]));\n      handMeshes[i].vertexNormals.emplace_back(glmVecFromXrVec(mesh.vertexNormals[j]));\n      handMeshes[i].vertexBlendIndices.emplace_back(glmVecFromXrVec(mesh.vertexBlendIndices[j]));\n      handMeshes[i].vertexBlendWeights.emplace_back(glmVecFromXrVec(mesh.vertexBlendWeights[j]));\n    }\n\n    for (uint32_t j = 0; j < mesh.jointCountOutput; ++j) {\n      handMeshes[i].jointBindPoses.emplace_back(poseFromXrPose(mesh.jointBindPoses[j]));\n    }\n  }\n}\n\nvoid XrHands::updateTracking(\n    XrSpace currentSpace,\n    std::array<HandTracking, 2>& handTracking) noexcept { // NOLINT(bugprone-exception-escape)\n  XrResult result(XR_SUCCESS);\n  XrHandTrackerEXT trackers[] = {leftHandTracker_, rightHandTracker_};\n  for (uint8_t i = 0; i < 2; ++i) {\n    XrHandJointLocationEXT jointLocations[XR_HAND_JOINT_COUNT_EXT];\n    XrHandJointVelocityEXT jointVelocities[XR_HAND_JOINT_COUNT_EXT];\n\n    XrHandJointVelocitiesEXT velocities{.type = XR_TYPE_HAND_JOINT_VELOCITIES_EXT,\n                                        .next = nullptr,\n                                        .jointCount = XR_HAND_JOINT_COUNT_EXT,\n                                        .jointVelocities = jointVelocities};\n\n    XrHandJointLocationsEXT locations{.type = XR_TYPE_HAND_JOINT_LOCATIONS_EXT,\n                                      .next = &velocities,\n                                      .jointCount = XR_HAND_JOINT_COUNT_EXT,\n                                      .jointLocations = jointLocations};\n\n    XrHandJointsMotionRangeInfoEXT motionRangeInfo{XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT};\n    motionRangeInfo.handJointsMotionRange =\n        XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT;\n\n    const XrHandJointsLocateInfoEXT locateInfo{.type = XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT,\n                                               .next = &motionRangeInfo,\n                                               .baseSpace = currentSpace,\n                                               .time = currentTimeInNs()};\n\n    handTracking[i].jointPose.resize(XR_HAND_JOINT_COUNT_EXT);\n    handTracking[i].jointVelocity.resize(XR_HAND_JOINT_COUNT_EXT);\n    handTracking[i].isJointTracked.resize(XR_HAND_JOINT_COUNT_EXT);\n\n    XR_CHECK(result = xrLocateHandJointsEXT_(trackers[i], &locateInfo, &locations));\n    if (result != XR_SUCCESS) {\n      for (size_t jointIndex = 0; jointIndex < XR_HAND_JOINT_COUNT_EXT; ++jointIndex) {\n        handTracking[i].isJointTracked[jointIndex] = false;\n      }\n      continue;\n    }\n\n    if (!locations.isActive) {\n      for (size_t jointIndex = 0; jointIndex < XR_HAND_JOINT_COUNT_EXT; ++jointIndex) {\n        handTracking[i].isJointTracked[jointIndex] = false;\n      }\n      continue;\n    }\n\n    constexpr XrSpaceLocationFlags isValid =\n        XR_SPACE_LOCATION_ORIENTATION_VALID_BIT | XR_SPACE_LOCATION_POSITION_VALID_BIT;\n    for (size_t jointIndex = 0; jointIndex < XR_HAND_JOINT_COUNT_EXT; ++jointIndex) {\n      if ((jointLocations[jointIndex].locationFlags & isValid) != 0) {\n        handTracking[i].jointPose[jointIndex] = poseFromXrPose(jointLocations[jointIndex].pose);\n        handTracking[i].jointVelocity[jointIndex].linear =\n            glmVecFromXrVec(jointVelocities[jointIndex].linearVelocity);\n        handTracking[i].jointVelocity[jointIndex].angular =\n            glmVecFromXrVec(jointVelocities[jointIndex].angularVelocity);\n        handTracking[i].isJointTracked[jointIndex] = true;\n      } else {\n        handTracking[i].isJointTracked[jointIndex] = false;\n      }\n    }\n  }\n}\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrHands.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <shell/openxr/XrPlatform.h>\n#include <vector>\n#include <shell/shared/renderSession/Hands.h>\n\nnamespace igl::shell::openxr {\n\nclass XrHands final {\n public:\n  XrHands(XrInstance instance, XrSession session, bool handMeshSupported) noexcept;\n  ~XrHands() noexcept;\n  XrHands(const XrHands&) = delete;\n  XrHands& operator=(const XrHands&) = delete;\n  XrHands(XrHands&&) = delete;\n  XrHands& operator=(XrHands&&) = delete;\n\n  [[nodiscard]] static const std::vector<const char*>& getExtensions() noexcept;\n\n  [[nodiscard]] bool initialize() noexcept;\n\n  void updateTracking(XrSpace currentSpace, std::array<HandTracking, 2>& handTracking) noexcept;\n  void updateMeshes(std::array<HandMesh, 2>& handMeshes) noexcept;\n\n private:\n  const XrInstance instance_;\n  const XrSession session_;\n  const bool handMeshSupported_;\n\n  // API\n  PFN_xrCreateHandTrackerEXT xrCreateHandTrackerEXT_ = nullptr;\n  PFN_xrDestroyHandTrackerEXT xrDestroyHandTrackerEXT_ = nullptr;\n  PFN_xrLocateHandJointsEXT xrLocateHandJointsEXT_ = nullptr;\n  PFN_xrGetHandMeshFB xrGetHandMeshFB_ = nullptr;\n\n  XrHandTrackerEXT leftHandTracker_ = XR_NULL_HANDLE;\n  XrHandTrackerEXT rightHandTracker_ = XR_NULL_HANDLE;\n};\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrLog.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"XrLog.h\"\n\n#include <igl/Core.h>\n\nextern XrInstance getXrInstance();\nnamespace igl::shell::openxr {\n#if IGL_DEBUG\nvoid checkXRErrors(XrResult result, const char* function) {\n  if (XR_FAILED(result)) {\n    char errorBuffer[XR_MAX_RESULT_STRING_SIZE + 1] = {};\n    xrResultToString(getXrInstance(), result, errorBuffer);\n    IGL_LOG_ERROR(\"OpenXR error: %s %s\", function, errorBuffer);\n  }\n}\n#endif\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrLog.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <openxr/openxr.h>\n#include <igl/Config.h>\n\nnamespace igl::shell::openxr {\n#if IGL_DEBUG\nvoid checkXRErrors(XrResult result, const char* function);\n#endif\n} // namespace igl::shell::openxr\n\n#if IGL_DEBUG\n#define XR_CHECK(func) igl::shell::openxr::checkXRErrors(func, #func)\n#else\n#define XR_CHECK(func) func\n#endif\n"
  },
  {
    "path": "shell/openxr/XrPassthrough.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/XrPassthrough.h>\n\n#include <shell/openxr/XrLog.h>\n#include <igl/Core.h>\n\nnamespace igl::shell::openxr {\n\nXrPassthrough::XrPassthrough(XrInstance instance, XrSession session) noexcept :\n  instance_(instance), session_(session) {\n  XR_CHECK(xrGetInstanceProcAddr(\n      instance_, \"xrCreatePassthroughFB\", (PFN_xrVoidFunction*)(&xrCreatePassthroughFB_)));\n  XR_CHECK(xrGetInstanceProcAddr(\n      instance_, \"xrDestroyPassthroughFB\", (PFN_xrVoidFunction*)(&xrDestroyPassthroughFB_)));\n  XR_CHECK(xrGetInstanceProcAddr(\n      instance_, \"xrPassthroughStartFB\", (PFN_xrVoidFunction*)(&xrPassthroughStartFB_)));\n  XR_CHECK(xrGetInstanceProcAddr(\n      instance_, \"xrPassthroughPauseFB\", (PFN_xrVoidFunction*)(&xrPassthroughPauseFB_)));\n  XR_CHECK(xrGetInstanceProcAddr(instance_,\n                                 \"xrCreatePassthroughLayerFB\",\n                                 (PFN_xrVoidFunction*)(&xrCreatePassthroughLayerFB_)));\n  XR_CHECK(xrGetInstanceProcAddr(instance_,\n                                 \"xrDestroyPassthroughLayerFB\",\n                                 (PFN_xrVoidFunction*)(&xrDestroyPassthroughLayerFB_)));\n  XR_CHECK(xrGetInstanceProcAddr(instance_,\n                                 \"xrPassthroughLayerSetStyleFB\",\n                                 (PFN_xrVoidFunction*)(&xrPassthroughLayerSetStyleFB_)));\n}\n\nXrPassthrough::~XrPassthrough() noexcept {\n  if (passthroughLayer_ != XR_NULL_HANDLE) {\n    xrDestroyPassthroughLayerFB_(passthroughLayer_);\n  }\n\n  if (passthrough_ != XR_NULL_HANDLE) {\n    xrDestroyPassthroughFB_(passthrough_);\n  }\n}\n\n// NOLINTNEXTLINE(bugprone-exception-escape)\nconst std::vector<const char*>& XrPassthrough::getExtensions() noexcept {\n  static const std::vector<const char*> kExtensions{XR_FB_PASSTHROUGH_EXTENSION_NAME};\n  return kExtensions;\n}\n\nbool XrPassthrough::initialize() noexcept {\n  const XrPassthroughCreateInfoFB passthroughInfo{\n      .type = XR_TYPE_PASSTHROUGH_CREATE_INFO_FB,\n      .next = nullptr,\n      .flags = XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB,\n  };\n\n  XrResult result(XR_SUCCESS);\n  XR_CHECK(result = xrCreatePassthroughFB_(session_, &passthroughInfo, &passthrough_));\n  if (result != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"xrCreatePassthroughFB failed.\\n\");\n    return false;\n  }\n\n  const XrPassthroughLayerCreateInfoFB layerInfo{\n      .type = XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB,\n      .next = nullptr,\n      .passthrough = passthrough_,\n      .flags = XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB,\n      .purpose = XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB,\n  };\n\n  XR_CHECK(result = xrCreatePassthroughLayerFB_(session_, &layerInfo, &passthroughLayer_));\n  if (result != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"xrCreatePassthroughLayerFB failed.\\n\");\n    return false;\n  }\n\n  const XrPassthroughStyleFB style{.type = XR_TYPE_PASSTHROUGH_STYLE_FB,\n                                   .next = nullptr,\n                                   .textureOpacityFactor = 1.0f,\n                                   .edgeColor = {0.0f, 0.0f, 0.0f, 0.0f}};\n\n  XR_CHECK(result = xrPassthroughLayerSetStyleFB_(passthroughLayer_, &style));\n  if (result != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"xrPassthroughLayerSetStyleFB failed.\\n\");\n    return false;\n  }\n\n  compositionLayer_.next = nullptr;\n  compositionLayer_.layerHandle = passthroughLayer_;\n\n  return true;\n}\n\nvoid XrPassthrough::setOpacity(float opacity) noexcept {\n  IGL_DEBUG_ASSERT(opacity >= 0.0f && opacity <= 1.0f);\n\n  if (passthroughLayer_ == XR_NULL_HANDLE || opacity_ == opacity) {\n    return;\n  }\n  opacity_ = opacity;\n  const XrPassthroughStyleFB style{\n      .type = XR_TYPE_PASSTHROUGH_STYLE_FB,\n      .next = nullptr,\n      .textureOpacityFactor = opacity,\n      .edgeColor = {0.0f, 0.0f, 0.0f, 0.0f},\n  };\n  XR_CHECK(xrPassthroughLayerSetStyleFB_(passthroughLayer_, &style));\n}\n\nvoid XrPassthrough::setEnabled(bool enabled) noexcept {\n  if (enabled_ == enabled) {\n    return;\n  }\n  enabled_ = enabled;\n\n  XrResult result(XR_SUCCESS);\n  if (enabled_) {\n    XR_CHECK(result = xrPassthroughStartFB_(passthrough_));\n    if (result != XR_SUCCESS) {\n      IGL_LOG_ERROR(\"xrPassthroughStartFB failed.\\n\");\n    }\n  } else {\n    XR_CHECK(result = xrPassthroughPauseFB_(passthrough_));\n    if (result != XR_SUCCESS) {\n      IGL_LOG_ERROR(\"xrPassthroughPauseFB failed.\\n\");\n    }\n  }\n}\n\nvoid XrPassthrough::injectLayer( // NOLINT(bugprone-exception-escape)\n    std::vector<const XrCompositionLayerBaseHeader*>& layers) noexcept {\n  layers.push_back(reinterpret_cast<const XrCompositionLayerBaseHeader*>(&compositionLayer_));\n}\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrPassthrough.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/openxr/XrPlatform.h>\n#include <vector>\n\nnamespace igl::shell::openxr {\n\nclass XrPassthrough final {\n public:\n  XrPassthrough(XrInstance instance, XrSession session) noexcept;\n  ~XrPassthrough() noexcept;\n  XrPassthrough(const XrPassthrough&) = delete;\n  XrPassthrough& operator=(const XrPassthrough&) = delete;\n  XrPassthrough(XrPassthrough&&) = delete;\n  XrPassthrough& operator=(XrPassthrough&&) = delete;\n\n  [[nodiscard]] static const std::vector<const char*>& getExtensions() noexcept;\n\n  [[nodiscard]] bool initialize() noexcept;\n\n  void setEnabled(bool enabled) noexcept;\n\n  void setOpacity(float opacity) noexcept;\n\n  void injectLayer(std::vector<const XrCompositionLayerBaseHeader*>& layers) noexcept;\n\n private:\n  const XrInstance instance_;\n  const XrSession session_;\n\n  // API\n  PFN_xrCreatePassthroughFB xrCreatePassthroughFB_ = nullptr;\n  PFN_xrDestroyPassthroughFB xrDestroyPassthroughFB_ = nullptr;\n  PFN_xrPassthroughStartFB xrPassthroughStartFB_ = nullptr;\n  PFN_xrPassthroughPauseFB xrPassthroughPauseFB_ = nullptr;\n  PFN_xrCreatePassthroughLayerFB xrCreatePassthroughLayerFB_ = nullptr;\n  PFN_xrDestroyPassthroughLayerFB xrDestroyPassthroughLayerFB_ = nullptr;\n  PFN_xrPassthroughLayerSetStyleFB xrPassthroughLayerSetStyleFB_ = nullptr;\n\n  XrPassthroughFB passthrough_ = XR_NULL_HANDLE;\n  XrPassthroughLayerFB passthroughLayer_ = XR_NULL_HANDLE;\n  XrCompositionLayerPassthroughFB compositionLayer_{XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB};\n\n  bool enabled_ = false;\n  float opacity_ = 1.0f;\n};\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrPlatform.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <igl/Macros.h> // IWYU pragma: export\n\n#if defined(USE_VULKAN_BACKEND) && IGL_BACKEND_VULKAN\n#include <igl/vulkan/Common.h> // IWYU pragma: export\n#endif // defined(USE_VULKAN_BACKEND) && IGL_BACKEND_VULKAN\n\n#if defined(USE_OPENGL_BACKEND) && IGL_BACKEND_OPENGL\n#include <igl/opengl/GLIncludes.h> // IWYU pragma: export\n#endif // defined(USE_OPENGL_BACKEND) && IGL_BACKEND_OPENGL\n\n#if IGL_PLATFORM_ANDROID\n#include <android/native_window_jni.h> // IWYU pragma: export\n#include <jni.h> // IWYU pragma: export\n#if IGL_BACKEND_OPENGL\n#include <EGL/egl.h> // IWYU pragma: export\n#endif // IGL_BACKEND_OPENGL\n#endif // IGL_PLATFORM_ANDROID\n\n#if IGL_PLATFORM_WINDOWS\n#if !defined(WIN32_LEAN_AND_MEAN)\n#define WIN32_LEAN_AND_MEAN\n#endif\n#include <unknwn.h> // IWYU pragma: export\n#include <windows.h> // IWYU pragma: export\n#endif // IGL_PLATFORM_WINDOWS\n\n#include <openxr/openxr.h> // IWYU pragma: export\n#include <openxr/openxr_platform.h> // IWYU pragma: export\n"
  },
  {
    "path": "shell/openxr/XrRefreshRate.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/XrRefreshRate.h>\n\n#include <algorithm>\n#include <shell/openxr/XrLog.h>\n#include <igl/Core.h>\n\nnamespace igl::shell::openxr {\n\nXrRefreshRate::XrRefreshRate(XrInstance instance, XrSession session) noexcept : session_(session) {\n  XR_CHECK(xrGetInstanceProcAddr(\n      instance, \"xrGetDisplayRefreshRateFB\", (PFN_xrVoidFunction*)(&xrGetDisplayRefreshRateFB_)));\n  IGL_DEBUG_ASSERT(xrGetDisplayRefreshRateFB_ != nullptr);\n  XR_CHECK(xrGetInstanceProcAddr(instance,\n                                 \"xrEnumerateDisplayRefreshRatesFB\",\n                                 (PFN_xrVoidFunction*)(&xrEnumerateDisplayRefreshRatesFB_)));\n  IGL_DEBUG_ASSERT(xrEnumerateDisplayRefreshRatesFB_ != nullptr);\n  XR_CHECK(xrGetInstanceProcAddr(instance,\n                                 \"xrRequestDisplayRefreshRateFB\",\n                                 (PFN_xrVoidFunction*)(&xrRequestDisplayRefreshRateFB_)));\n  IGL_DEBUG_ASSERT(xrRequestDisplayRefreshRateFB_ != nullptr);\n}\n\nXrRefreshRate::~XrRefreshRate() noexcept = default;\n\nbool XrRefreshRate::initialize(const Params& params) noexcept {\n  queryCurrentRefreshRate();\n  if (params.refreshRateMode == RefreshRateMode::kUseMaxRefreshRate) {\n    setMaxRefreshRate();\n  } else if (params.refreshRateMode == RefreshRateMode::kUseSpecificRefreshRate) {\n    setRefreshRate(params.desiredSpecificRefreshRate);\n  } else {\n    // Do nothing. Use default refresh rate.\n  }\n\n  querySupportedRefreshRates();\n  return true;\n}\n\n// NOLINTNEXTLINE(bugprone-exception-escape)\nconst std::vector<const char*>& XrRefreshRate::getExtensions() noexcept {\n  static const std::vector<const char*> kExtensions{XR_FB_DISPLAY_REFRESH_RATE_EXTENSION_NAME};\n  return kExtensions;\n}\n\nfloat XrRefreshRate::getCurrentRefreshRate() const noexcept {\n  return currentRefreshRate_;\n}\n\nfloat XrRefreshRate::getMaxRefreshRate() const noexcept {\n  const std::vector<float>& supportedRefreshRates = getSupportedRefreshRates();\n  if (supportedRefreshRates.empty()) {\n    return 0.0f;\n  }\n\n  const float maxRefreshRate = supportedRefreshRates.back();\n  return maxRefreshRate;\n}\n\nbool XrRefreshRate::setRefreshRate(float refreshRate) noexcept {\n  if ((refreshRate == currentRefreshRate_) || !isRefreshRateSupported(refreshRate)) {\n    return false;\n  }\n\n  const XrResult result = xrRequestDisplayRefreshRateFB_(session_, refreshRate);\n  if (result != XR_SUCCESS) {\n    return false;\n  }\n\n  IGL_LOG_INFO(\n      \"setRefreshRate changed from %.2f Hz to %.2f Hz\\n\", currentRefreshRate_, refreshRate);\n  currentRefreshRate_ = refreshRate;\n\n  return true;\n}\n\nvoid XrRefreshRate::setMaxRefreshRate() noexcept {\n  const float maxRefreshRate = getMaxRefreshRate();\n  IGL_LOG_INFO(\"maxRefreshRate = %.2f Hz\\n\", maxRefreshRate);\n  if (maxRefreshRate > 0.0f) {\n    setRefreshRate(maxRefreshRate);\n  }\n}\n\nbool XrRefreshRate::isRefreshRateSupported(float refreshRate) const noexcept {\n  const std::vector<float>& supportedRefreshRates = getSupportedRefreshRates();\n  return std::find(supportedRefreshRates.begin(), supportedRefreshRates.end(), refreshRate) !=\n         supportedRefreshRates.end();\n}\n\nconst std::vector<float>& XrRefreshRate::getSupportedRefreshRates() const noexcept {\n  return supportedRefreshRates_;\n}\n\nvoid XrRefreshRate::queryCurrentRefreshRate() noexcept {\n  const XrResult result = xrGetDisplayRefreshRateFB_(session_, &currentRefreshRate_);\n  if (result == XR_SUCCESS) {\n    IGL_LOG_INFO(\"getCurrentRefreshRate success, current Hz = %.2f.\\n\", currentRefreshRate_);\n  }\n}\n\n// NOLINTNEXTLINE(bugprone-exception-escape)\nvoid XrRefreshRate::querySupportedRefreshRates() noexcept {\n  if (!supportedRefreshRates_.empty()) {\n    return;\n  }\n\n  uint32_t numRefreshRates = 0;\n  XrResult result = xrEnumerateDisplayRefreshRatesFB_(session_, 0, &numRefreshRates, nullptr);\n\n  if ((result == XR_SUCCESS) && (numRefreshRates > 0)) {\n    supportedRefreshRates_.resize(numRefreshRates);\n    result = xrEnumerateDisplayRefreshRatesFB_(\n        session_, numRefreshRates, &numRefreshRates, supportedRefreshRates_.data());\n\n    if (result == XR_SUCCESS) {\n      std::sort(supportedRefreshRates_.begin(), supportedRefreshRates_.end());\n    }\n\n    for (const float refreshRate : supportedRefreshRates_) {\n      (void)refreshRate;\n      IGL_LOG_INFO(\"querySupportedRefreshRates Hz = %.2f.\\n\", refreshRate);\n    }\n  }\n}\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrRefreshRate.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <shell/openxr/XrPlatform.h>\n#include <vector>\n\nnamespace igl::shell::openxr {\n\nclass XrRefreshRate final {\n public:\n  enum RefreshRateMode : uint8_t {\n    kUseDefault = 0,\n    kUseMaxRefreshRate,\n    kUseSpecificRefreshRate,\n  };\n  struct Params {\n    RefreshRateMode refreshRateMode = RefreshRateMode::kUseDefault;\n    float desiredSpecificRefreshRate = 90.0f;\n  };\n\n  XrRefreshRate(XrInstance instance, XrSession session) noexcept;\n  ~XrRefreshRate() noexcept;\n\n  [[nodiscard]] bool initialize(const Params& params) noexcept;\n\n  [[nodiscard]] static const std::vector<const char*>& getExtensions() noexcept;\n\n  [[nodiscard]] float getCurrentRefreshRate() const noexcept;\n  [[nodiscard]] float getMaxRefreshRate() const noexcept;\n\n  bool setRefreshRate(float refreshRate) noexcept;\n  void setMaxRefreshRate() noexcept;\n\n  [[nodiscard]] bool isRefreshRateSupported(float refreshRate) const noexcept;\n  [[nodiscard]] const std::vector<float>& getSupportedRefreshRates() const noexcept;\n\n private:\n  void queryCurrentRefreshRate() noexcept;\n  void querySupportedRefreshRates() noexcept;\n\n  // NOLINTNEXTLINE(misc-misplaced-const)\n  const XrSession session_;\n\n  // API\n  PFN_xrGetDisplayRefreshRateFB xrGetDisplayRefreshRateFB_ = nullptr;\n  PFN_xrEnumerateDisplayRefreshRatesFB xrEnumerateDisplayRefreshRatesFB_ = nullptr;\n  PFN_xrRequestDisplayRefreshRateFB xrRequestDisplayRefreshRateFB_ = nullptr;\n\n  std::vector<float> supportedRefreshRates_;\n  float currentRefreshRate_ = 0.0f;\n};\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrSwapchainProvider.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/XrSwapchainProvider.h>\n\n#include <algorithm>\n#include <cstdint>\n#include <shell/openxr/XrLog.h>\n#include <shell/openxr/impl/XrSwapchainProviderImpl.h>\n#include <igl/Core.h>\n\nnamespace igl::shell::openxr {\nnamespace {\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n[[nodiscard]] int64_t findFormat(const std::vector<int64_t>& sortedSwapchainFormats,\n                                 const std::vector<int64_t>& formats) noexcept {\n  for (const int64_t format : formats) {\n    if (std::binary_search(sortedSwapchainFormats.begin(), sortedSwapchainFormats.end(), format)) {\n      return format;\n    }\n  }\n  return impl::kSwapchainImageInvalidFormat;\n}\n} // namespace\n\nXrSwapchainProvider::XrSwapchainProvider(std::unique_ptr<impl::XrSwapchainProviderImpl>&& impl,\n                                         std::shared_ptr<Platform> platform,\n                                         XrSession session,\n                                         impl::SwapchainImageInfo swapchainImageInfo,\n                                         uint8_t numViews) noexcept :\n  impl_(std::move(impl)),\n  platform_(std::move(platform)),\n  session_(session),\n  swapchainImageInfo_(swapchainImageInfo),\n  numViews_(numViews) {}\n\nXrSwapchainProvider::~XrSwapchainProvider() noexcept {\n  if (colorSwapchain_ != XR_NULL_HANDLE) {\n    xrDestroySwapchain(colorSwapchain_);\n  }\n  if (depthSwapchain_ != XR_NULL_HANDLE) {\n    xrDestroySwapchain(depthSwapchain_);\n  }\n}\n\nbool XrSwapchainProvider::initialize() noexcept {\n  uint32_t numSwapchainFormats = 0;\n  XR_CHECK(xrEnumerateSwapchainFormats(session_, 0, &numSwapchainFormats, nullptr));\n\n  std::vector<int64_t> swapchainFormats(numSwapchainFormats);\n  XR_CHECK(xrEnumerateSwapchainFormats(\n      session_, numSwapchainFormats, &numSwapchainFormats, swapchainFormats.data()));\n  std::sort(swapchainFormats.begin(), swapchainFormats.end());\n\n  swapchainImageInfo_.colorFormat =\n      findFormat(swapchainFormats,\n                 swapchainImageInfo_.colorFormat != impl::kSwapchainImageInvalidFormat\n                     ? std::vector<int64_t>{swapchainImageInfo_.colorFormat}\n                     : impl_->preferredColorFormats());\n  if (swapchainImageInfo_.colorFormat == impl::kSwapchainImageInvalidFormat) {\n    IGL_DEBUG_ABORT(\"No supported color format found\");\n    return false;\n  }\n\n  colorSwapchain_ =\n      createXrSwapchain(XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT, swapchainImageInfo_.colorFormat);\n\n  swapchainImageInfo_.depthFormat =\n      findFormat(swapchainFormats,\n                 swapchainImageInfo_.depthFormat != impl::kSwapchainImageInvalidFormat\n                     ? std::vector<int64_t>{swapchainImageInfo_.depthFormat}\n                     : impl_->preferredDepthFormats());\n  if (swapchainImageInfo_.depthFormat == impl::kSwapchainImageInvalidFormat) {\n    IGL_DEBUG_ABORT(\"No supported depth format found\");\n    return false;\n  }\n\n  depthSwapchain_ = createXrSwapchain(XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,\n                                      swapchainImageInfo_.depthFormat);\n\n  impl_->enumerateImages(\n      platform_->getDevice(), colorSwapchain_, depthSwapchain_, swapchainImageInfo_, numViews_);\n\n  return true;\n}\n\nXrSwapchain XrSwapchainProvider::createXrSwapchain(XrSwapchainUsageFlags extraUsageFlags,\n                                                   int64_t format) noexcept {\n  const XrSwapchainCreateInfo swapChainCreateInfo = {.type = XR_TYPE_SWAPCHAIN_CREATE_INFO,\n                                                     .next = nullptr,\n                                                     .usageFlags = XR_SWAPCHAIN_USAGE_SAMPLED_BIT |\n                                                                   extraUsageFlags,\n                                                     .format = format,\n                                                     .sampleCount = 1,\n                                                     .width = swapchainImageInfo_.imageWidth,\n                                                     .height = swapchainImageInfo_.imageHeight,\n                                                     .faceCount = 1,\n                                                     .arraySize = numViews_,\n                                                     .mipCount = 1};\n\n  XrSwapchain swapchain = nullptr;\n  XR_CHECK(xrCreateSwapchain(session_, &swapChainCreateInfo, &swapchain));\n  IGL_LOG_INFO(\"XrSwapchain created\\n\");\n  IGL_LOG_INFO(\"XrSwapchain image width: %d\\n\", swapchainImageInfo_.imageWidth);\n  IGL_LOG_INFO(\"XrSwapchain image height: %d\\n\", swapchainImageInfo_.imageHeight);\n\n  return swapchain;\n}\n\nSurfaceTextures XrSwapchainProvider::getSurfaceTextures() const noexcept {\n  return impl_->getSurfaceTextures(\n      platform_->getDevice(), colorSwapchain_, depthSwapchain_, swapchainImageInfo_, numViews_);\n}\n\nvoid XrSwapchainProvider::releaseSwapchainImages() const noexcept {\n  const XrSwapchainImageReleaseInfo releaseInfo = {XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO};\n  XR_CHECK(xrReleaseSwapchainImage(colorSwapchain_, &releaseInfo));\n  XR_CHECK(xrReleaseSwapchainImage(depthSwapchain_, &releaseInfo));\n}\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/XrSwapchainProvider.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <shell/openxr/XrPlatform.h>\n#include <shell/openxr/impl/XrSwapchainProviderImpl.h>\n#include <shell/shared/platform/Platform.h>\n#include <igl/Device.h>\n#include <igl/Texture.h>\n\n// forward declarations\n\nnamespace igl::shell::openxr {\n\nclass XrSwapchainProvider {\n public:\n  XrSwapchainProvider(std::unique_ptr<impl::XrSwapchainProviderImpl>&& impl,\n                      std::shared_ptr<Platform> platform,\n                      XrSession session,\n                      impl::SwapchainImageInfo swapchainImageInfo,\n                      uint8_t numViews) noexcept;\n  ~XrSwapchainProvider() noexcept;\n  XrSwapchainProvider(const XrSwapchainProvider&) = delete;\n  XrSwapchainProvider& operator=(const XrSwapchainProvider&) = delete;\n  XrSwapchainProvider(XrSwapchainProvider&&) = delete;\n  XrSwapchainProvider& operator=(XrSwapchainProvider&&) = delete;\n\n  [[nodiscard]] bool initialize() noexcept;\n\n  [[nodiscard]] inline uint32_t currentImageIndex() const noexcept {\n    return currentImageIndex_;\n  }\n\n  [[nodiscard]] SurfaceTextures getSurfaceTextures() const noexcept;\n\n  void releaseSwapchainImages() const noexcept;\n\n  [[nodiscard]] inline XrSwapchain colorSwapchain() const noexcept {\n    return colorSwapchain_;\n  }\n\n  [[nodiscard]] inline XrSwapchain depthSwapchain() const noexcept {\n    return depthSwapchain_;\n  }\n\n private:\n  XrSwapchain createXrSwapchain(XrSwapchainUsageFlags extraUsageFlags, int64_t format) noexcept;\n\n  std::unique_ptr<impl::XrSwapchainProviderImpl> impl_;\n  std::shared_ptr<Platform> platform_;\n  const XrSession session_;\n  impl::SwapchainImageInfo swapchainImageInfo_;\n\n  XrSwapchain colorSwapchain_ = XR_NULL_HANDLE;\n  XrSwapchain depthSwapchain_ = XR_NULL_HANDLE;\n  uint32_t currentImageIndex_ = 0;\n\n  const uint8_t numViews_ =\n      1; // The number of layers of the underlying swapchain image would match numViews_.\n};\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/impl/XrAppImpl.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <shell/openxr/XrPlatform.h>\n#include <vector>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n#include <igl/Device.h>\n\nnamespace igl::shell::openxr::impl {\nclass XrSwapchainProviderImpl;\nclass XrAppImpl {\n public:\n  virtual ~XrAppImpl() = default;\n  [[nodiscard]] virtual RenderSessionConfig suggestedSessionConfig() const = 0;\n  [[nodiscard]] virtual std::vector<const char*> getXrRequiredExtensions() const = 0;\n  [[nodiscard]] virtual std::vector<const char*> getXrOptionalExtensions() const = 0;\n  [[nodiscard]] virtual std::unique_ptr<IDevice> initIGL(XrInstance instance,\n                                                         XrSystemId systemId) = 0;\n  [[nodiscard]] virtual XrSession initXrSession(XrInstance instance,\n                                                XrSystemId systemId,\n                                                IDevice& device,\n                                                const RenderSessionConfig& sessionConfig) = 0;\n  [[nodiscard]] virtual std::unique_ptr<XrSwapchainProviderImpl> createSwapchainProviderImpl()\n      const = 0;\n};\n} // namespace igl::shell::openxr::impl\n"
  },
  {
    "path": "shell/openxr/impl/XrSwapchainProviderImpl.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <shell/openxr/XrPlatform.h>\n#include <vector>\n#include <igl/Device.h>\n#include <igl/Texture.h>\n\nnamespace igl::shell::openxr::impl {\nconstexpr int64_t kSwapchainImageInvalidFormat = -1;\n\nstruct SwapchainImageInfo {\n  int64_t colorFormat = kSwapchainImageInvalidFormat;\n  int64_t depthFormat = kSwapchainImageInvalidFormat;\n  uint32_t imageWidth = 0;\n  uint32_t imageHeight = 0;\n};\n\ninline bool operator==(const SwapchainImageInfo& lhs, const SwapchainImageInfo& rhs) noexcept {\n  return (lhs.colorFormat == rhs.colorFormat && lhs.depthFormat == rhs.depthFormat &&\n          lhs.imageWidth == rhs.imageWidth && lhs.imageHeight == rhs.imageHeight);\n}\n\nclass XrSwapchainProviderImpl {\n public:\n  virtual ~XrSwapchainProviderImpl() noexcept = default;\n\n  [[nodiscard]] virtual std::vector<int64_t> preferredColorFormats() const noexcept = 0;\n  [[nodiscard]] virtual std::vector<int64_t> preferredDepthFormats() const noexcept = 0;\n\n  virtual void enumerateImages(IDevice& device,\n                               XrSwapchain colorSwapchain,\n                               XrSwapchain depthSwapchain,\n                               const SwapchainImageInfo& swapchainImageInfo,\n                               uint8_t numViews) noexcept = 0;\n\n  [[nodiscard]] virtual SurfaceTextures getSurfaceTextures(\n      IDevice& device,\n      XrSwapchain colorSwapchain,\n      XrSwapchain depthSwapchain,\n      const SwapchainImageInfo& swapchainImageInfo,\n      uint8_t numViews) noexcept = 0;\n\n protected:\n  std::vector<std::shared_ptr<ITexture>> colorTextures_;\n  std::vector<std::shared_ptr<ITexture>> depthTextures_;\n};\n} // namespace igl::shell::openxr::impl\n"
  },
  {
    "path": "shell/openxr/mobile/AndroidMain.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/Common.h>\n\n#if IGL_PLATFORM_ANDROID\n#include <android_native_app_glue.h>\n#endif // IGL_PLATFORM_ANDROID\n\n#include <memory>\n#include <string>\n#include <vector>\n// #define ATTACH_DEBUGGER\n\n#ifdef ATTACH_DEBUGGER\n#include <unistd.h>\n#endif\n\n#include <shell/openxr/XrApp.h>\n\n#if defined(USE_VULKAN_BACKEND)\n#include <shell/openxr/mobile/vulkan/XrAppImplVulkan.h>\n#elif defined(USE_OPENGL_BACKEND)\n#include <shell/openxr/mobile/opengl/XrAppImplGLES.h>\n#endif\n\n#if IGL_PLATFORM_WINDOWS\n#include \"ShellScalingApi.h\"\n#endif // IGL_PLATFORM_WINDOWS\n\nstatic XrInstance gInstance;\n\n// This function cannot be declared as `static` due to our Android GitHub builds\n// @lint-ignore CLANGTIDY\nXrInstance getXrInstance() {\n  return gInstance;\n}\n\n#if IGL_PLATFORM_ANDROID\nnamespace {\nstd::vector<std::string> gActionViewQueue;\n} // namespace\n\nextern \"C\" {\nvoid processActionView(JNIEnv* env, jstring data) {\n  if (env == nullptr || data == nullptr) {\n    return;\n  }\n  const jsize stringLength = env->GetStringUTFLength(data);\n  const char* stringChars = env->GetStringUTFChars(data, nullptr);\n  if (stringLength == 0 || stringChars == nullptr) {\n    return;\n  }\n  gActionViewQueue.emplace_back(stringChars, stringLength);\n  env->ReleaseStringUTFChars(data, stringChars);\n}\n\nJNIEXPORT void JNICALL\nJava_com_facebook_igl_shell_openxr_vulkan_MainActivity_onActionView(JNIEnv* env,\n                                                                    jclass /*clazz*/,\n                                                                    jstring data) {\n  processActionView(env, data);\n}\n\nJNIEXPORT void JNICALL\nJava_com_facebook_igl_shell_openxr_gles_MainActivity_onActionView(JNIEnv* env,\n                                                                  jclass /*clazz*/,\n                                                                  jstring data) {\n  processActionView(env, data);\n}\n}\n\nusing namespace igl::shell::openxr;\n\nstatic void handleInitWindow(const struct android_app* app) {\n  auto* xrApp = static_cast<igl::shell::openxr::XrApp*>(app->userData);\n  if (xrApp) {\n    xrApp->setNativeWindow(app->window);\n  }\n}\nstatic void handleTermWindow(const struct android_app* app) {\n  auto* xrApp = static_cast<igl::shell::openxr::XrApp*>(app->userData);\n  if (xrApp) {\n    xrApp->setNativeWindow(nullptr);\n  }\n}\n\nstatic void handleResume(const struct android_app* app) {\n  auto* xrApp = static_cast<igl::shell::openxr::XrApp*>(app->userData);\n  if (xrApp) {\n    xrApp->setResumed(true);\n  }\n}\n\nstatic void handlePause(const struct android_app* app) {\n  auto* xrApp = static_cast<igl::shell::openxr::XrApp*>(app->userData);\n  if (xrApp) {\n    xrApp->setResumed(false);\n  }\n}\n\nstatic void handleDestroy(const struct android_app* app) {\n  auto* xrApp = static_cast<igl::shell::openxr::XrApp*>(app->userData);\n  if (xrApp) {\n    xrApp->setNativeWindow(nullptr);\n  }\n}\n\nstatic void handleAppCmd(struct android_app* app, int32_t appCmd) {\n  switch (appCmd) {\n  case APP_CMD_INIT_WINDOW:\n    IGL_LOG_INFO(\"APP_CMD_INIT_WINDOW\");\n    handleInitWindow(app);\n    break;\n  case APP_CMD_TERM_WINDOW:\n    IGL_LOG_INFO(\"APP_CMD_TERM_WINDOW\");\n    handleTermWindow(app);\n    break;\n  case APP_CMD_RESUME:\n    IGL_LOG_INFO(\"APP_CMD_RESUME\");\n    handleResume(app);\n    break;\n  case APP_CMD_PAUSE:\n    IGL_LOG_INFO(\"APP_CMD_PAUSE\");\n    handlePause(app);\n    break;\n  case APP_CMD_STOP:\n    IGL_LOG_INFO(\"APP_CMD_PAUSE\");\n    break;\n  case APP_CMD_DESTROY:\n    IGL_LOG_INFO(\"APP_CMD_DESTROY\");\n    handleDestroy(app);\n    break;\n  }\n}\n\nvoid android_main(struct android_app* app) {\n  JNIEnv* env = nullptr;\n  app->activity->vm->AttachCurrentThread(&env, nullptr);\n\n#ifdef ATTACH_DEBUGGER\n  sleep(20);\n#endif\n\n#if defined(USE_VULKAN_BACKEND)\n  auto xrApp = std::make_unique<XrApp>(std::make_unique<mobile::XrAppImplVulkan>());\n#elif defined(USE_OPENGL_BACKEND)\n  auto xrApp = std::make_unique<XrApp>(std::make_unique<mobile::XrAppImplGLES>());\n#endif\n  if (!xrApp->initialize(app, {})) {\n    return;\n  }\n\n  gInstance = xrApp->instance();\n\n  app->onAppCmd = handleAppCmd;\n  app->userData = xrApp.get();\n\n  while (app->destroyRequested == 0) {\n    for (;;) {\n      int events = 0;\n      struct android_poll_source* source = nullptr;\n      // If the timeout is zero, returns immediately without blocking.\n      // If the timeout is negative, waits indefinitely until an event appears.\n      const int timeout =\n          (!xrApp->resumed() && !xrApp->sessionActive() && app->destroyRequested == 0) ? -1 : 0;\n      if (ALooper_pollAll(timeout, nullptr, &events, (void**)&source) < 0) {\n        break;\n      }\n      if (source != nullptr) {\n        source->process(app, source);\n      }\n    }\n\n    xrApp->handleXrEvents();\n    if (!xrApp->sessionActive()) {\n      continue;\n    }\n\n    for (const auto& actionView : gActionViewQueue) {\n      xrApp->handleActionView(actionView);\n    }\n    gActionViewQueue.clear();\n\n    xrApp->update();\n  }\n\n  app->activity->vm->DetachCurrentThread();\n}\n#else\n// To run via MetaXR Simulator or Monado.\nint main(int argc, const char* argv[]) {\n#if IGL_PLATFORM_WINDOWS\n  SetProcessDpiAwareness(PROCESS_PER_MONITOR_DPI_AWARE);\n#endif // IGL_PLATFORM_WINDOWS\n\n#if defined(USE_VULKAN_BACKEND)\n  // Do not present running on MetaXR Simulator. It has its own composition and present.\n  auto xrApp = std::make_unique<igl::shell::openxr::XrApp>(\n      std::make_unique<igl::shell::openxr::mobile::XrAppImplVulkan>(), false /* shouldPresent */);\n#elif defined(USE_OPENGL_BACKEND)\n  // Do not present running on MetaXR Simulator. It has its own composition and present.\n  auto xrApp = std::make_unique<igl::shell::openxr::XrApp>(\n      std::make_unique<igl::shell::openxr::mobile::XrAppImplGLES>(), false /* shouldPresent */);\n#endif\n  if (!xrApp->initialize(nullptr, {})) {\n    return 1;\n  }\n\n  gInstance = xrApp->instance();\n  xrApp->setResumed(true);\n\n  for (;;) {\n    xrApp->handleXrEvents();\n    if (!xrApp->sessionActive()) {\n      break;\n    }\n\n    xrApp->update();\n  }\n\n  return 0;\n}\n\n#endif // IGL_PLATFORM_ANDROID\n"
  },
  {
    "path": "shell/openxr/mobile/XrApp.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/XrApp.h>\n\n#include <algorithm>\n#include <array>\n#include <cassert>\n#include <string>\n\n#if IGL_PLATFORM_ANDROID\n#include <android/asset_manager.h>\n// Ignore unused-include-check\n// @lint-ignore CLANGTIDY\n#include <android_native_app_glue.h>\n#endif\n\n#include <glm/gtc/type_ptr.hpp>\n#include <xr_linear.h>\n\n#if IGL_PLATFORM_ANDROID\n#include <shell/shared/fileLoader/android/FileLoaderAndroid.h>\n#include <shell/shared/platform/android/PlatformAndroid.h>\n#endif\n#if IGL_PLATFORM_WINDOWS\n#include <shell/shared/platform/win/PlatformWin.h>\n#endif\n\n#include <shell/openxr/XrCompositionProjection.h>\n#include <shell/openxr/XrCompositionQuad.h>\n#include <shell/openxr/XrHands.h>\n#include <shell/openxr/XrLog.h>\n#include <shell/openxr/XrPassthrough.h>\n#include <shell/openxr/impl/XrAppImpl.h>\n#include <shell/openxr/impl/XrSwapchainProviderImpl.h>\n#include <shell/shared/input/InputDispatcher.h>\n#include <shell/shared/input/IntentListener.h>\n#include <shell/shared/renderSession/AppParams.h>\n#include <shell/shared/renderSession/DefaultRenderSessionFactory.h>\n#include <shell/shared/renderSession/ShellParams.h>\n\n#if !IGL_PLATFORM_ANDROID\nstruct android_app {};\nstruct AAssetManager {};\n#endif\n\nnamespace igl::shell::openxr {\nconstexpr auto kAppName = \"IGL Shell OpenXR\";\nconstexpr auto kEngineName = \"IGL\";\nconstexpr auto kSupportedViewConfigType = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;\n\nXrApp::XrApp(std::unique_ptr<impl::XrAppImpl>&& impl, bool shouldPresent) :\n  impl_(std::move(impl)), shellParams_(std::make_unique<ShellParams>()) {\n  shellParams_->shouldPresent = shouldPresent;\n  viewports_.fill({XR_TYPE_VIEW_CONFIGURATION_VIEW});\n  views_.fill({XR_TYPE_VIEW});\n#ifdef USE_COMPOSITION_LAYER_QUAD\n  useQuadLayerComposition_ = true;\n#endif\n}\n\nXrApp::~XrApp() {\n  if (!initialized_) {\n    return;\n  }\n\n  renderSession_.reset();\n  compositionLayers_.clear();\n  passthrough_.reset();\n  hands_.reset();\n\n  if (currentSpace_ != XR_NULL_HANDLE) {\n    xrDestroySpace(currentSpace_);\n  }\n  if (headSpace_ != XR_NULL_HANDLE) {\n    xrDestroySpace(headSpace_);\n  }\n  if (session_ != XR_NULL_HANDLE) {\n    xrDestroySession(session_);\n  }\n  if (instance_ != XR_NULL_HANDLE) {\n    xrDestroyInstance(instance_);\n  }\n\n  platform_.reset();\n}\n\nXrInstance XrApp::instance() const {\n  return instance_;\n}\n\nXrSession XrApp::session() const {\n  return session_;\n}\n\nbool XrApp::checkExtensions() {\n  PFN_xrEnumerateInstanceExtensionProperties xrEnumerateInstanceExtensionProperties = nullptr;\n  const XrResult result =\n      xrGetInstanceProcAddr(XR_NULL_HANDLE,\n                            \"xrEnumerateInstanceExtensionProperties\",\n                            (PFN_xrVoidFunction*)&xrEnumerateInstanceExtensionProperties);\n  XR_CHECK(result);\n  if (result != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"Failed to get xrEnumerateInstanceExtensionProperties function pointer.\\n\");\n    return false;\n  }\n\n  uint32_t numExtensions = 0;\n  XR_CHECK(xrEnumerateInstanceExtensionProperties(nullptr, 0, &numExtensions, nullptr));\n  IGL_LOG_INFO(\"xrEnumerateInstanceExtensionProperties found %u extension(s).\\n\", numExtensions);\n\n  extensions_.resize(numExtensions, {XR_TYPE_EXTENSION_PROPERTIES});\n\n  XR_CHECK(xrEnumerateInstanceExtensionProperties(\n      nullptr, numExtensions, &numExtensions, extensions_.data()));\n  for (uint32_t i = 0; i < numExtensions; i++) {\n    IGL_LOG_INFO(\"Extension #%d = '%s'.\\n\", i, extensions_[i].extensionName);\n  }\n\n  auto checkExtensionSupported = [this](const char* name) {\n    return std::any_of(std::begin(extensions_),\n                       std::end(extensions_),\n                       [&](const XrExtensionProperties& extension) {\n                         return strcmp(extension.extensionName, name) == 0;\n                       });\n  };\n\n  // Check all required extensions are supported.\n  auto requiredExtensionsImpl = impl_->getXrRequiredExtensions();\n  for (const char* requiredExtension : requiredExtensionsImpl) {\n    if (!checkExtensionSupported(requiredExtension)) {\n      IGL_LOG_ERROR(\"Extension %s is required, but not supported.\\n\", requiredExtension);\n      return false;\n    }\n  }\n\n  auto checkNeedEnableExtension = [this](const char* name) {\n    return std::find_if(std::begin(enabledExtensions_),\n                        std::end(enabledExtensions_),\n                        [&](const char* extensionName) {\n                          return strcmp(extensionName, name) == 0;\n                        }) == std::end(enabledExtensions_);\n  };\n\n  // Add required extensions to enabledExtensions_.\n  for (const char* requiredExtension : requiredExtensionsImpl) {\n    if (checkNeedEnableExtension(requiredExtension)) {\n      IGL_LOG_INFO(\"Extension %s is enabled.\\n\", requiredExtension);\n      enabledExtensions_.push_back(requiredExtension);\n    }\n  }\n\n  // Get list of all optional extensions.\n  auto optionalExtensionsImpl = impl_->getXrOptionalExtensions();\n  std::vector<const char*> additionalOptionalExtensions = {\n#if IGL_PLATFORM_ANDROID\n      XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME,\n#endif // IGL_PLATFORM_ANDROID\n#ifdef XR_FB_composition_layer_alpha_blend\n      XR_FB_COMPOSITION_LAYER_ALPHA_BLEND_EXTENSION_NAME,\n#endif // XR_FB_composition_layer_alpha_blend\n  };\n\n  optionalExtensionsImpl.insert(optionalExtensionsImpl.end(),\n                                std::begin(XrPassthrough::getExtensions()),\n                                std::end(XrPassthrough::getExtensions()));\n\n  optionalExtensionsImpl.insert(optionalExtensionsImpl.end(),\n                                std::begin(XrHands::getExtensions()),\n                                std::end(XrHands::getExtensions()));\n\n  optionalExtensionsImpl.insert(optionalExtensionsImpl.end(),\n                                std::begin(XrRefreshRate::getExtensions()),\n                                std::end(XrRefreshRate::getExtensions()));\n\n  optionalExtensionsImpl.insert(optionalExtensionsImpl.end(),\n                                std::begin(additionalOptionalExtensions),\n                                std::end(additionalOptionalExtensions));\n\n  // Add optional extensions to enabledExtensions_.\n  for (const char* optionalExtension : optionalExtensionsImpl) {\n    if (checkExtensionSupported(optionalExtension)) {\n      supportedOptionalXrExtensions_.insert(optionalExtension);\n      if (checkNeedEnableExtension(optionalExtension)) {\n        IGL_LOG_INFO(\"Extension %s is enabled.\\n\", optionalExtension);\n        enabledExtensions_.push_back(optionalExtension);\n      }\n    } else {\n      IGL_LOG_INFO(\"Warning: Extension %s is not supported.\\n\", optionalExtension);\n    }\n  }\n\n  return true;\n}\n\nbool XrApp::createInstance() {\n  XrApplicationInfo appInfo = {};\n  strcpy(appInfo.applicationName, kAppName);\n  appInfo.applicationVersion = 0;\n  strcpy(appInfo.engineName, kEngineName);\n  appInfo.engineVersion = 0;\n  appInfo.apiVersion = XR_MAKE_VERSION(1, 0, 34);\n\n  const XrInstanceCreateInfo instanceCreateInfo = {\n      .type = XR_TYPE_INSTANCE_CREATE_INFO,\n#if IGL_PLATFORM_ANDROID\n      .next = instanceCreateInfoAndroidSupported() ? &instanceCreateInfoAndroid_ : nullptr,\n#else\n      .next = nullptr,\n#endif // IGL_PLATFORM_ANDROID\n      .createFlags = 0,\n      .applicationInfo = appInfo,\n      .enabledApiLayerCount = 0,\n      .enabledApiLayerNames = nullptr,\n      .enabledExtensionCount = static_cast<uint32_t>(enabledExtensions_.size()),\n      .enabledExtensionNames = enabledExtensions_.data(),\n  };\n\n  const XrResult initResult = xrCreateInstance(&instanceCreateInfo, &instance_);\n  XR_CHECK(initResult);\n  if (initResult != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"Failed to create XR instance: %d.\\n\", initResult);\n    return false;\n  }\n\n  XR_CHECK(xrGetInstanceProperties(instance_, &instanceProps_));\n  IGL_LOG_INFO(\"Runtime %s: Version : %u.%u.%u\\n\",\n               instanceProps_.runtimeName,\n               XR_VERSION_MAJOR(instanceProps_.runtimeVersion),\n               XR_VERSION_MINOR(instanceProps_.runtimeVersion),\n               XR_VERSION_PATCH(instanceProps_.runtimeVersion));\n\n  return true;\n} // namespace igl::shell::openxr\n\nbool XrApp::createSystem() {\n  const XrSystemGetInfo systemGetInfo = {\n      .type = XR_TYPE_SYSTEM_GET_INFO,\n      .formFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY,\n  };\n\n  const XrResult result = xrGetSystem(instance_, &systemGetInfo, &systemId_);\n  XR_CHECK(result);\n  if (result != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"Failed to get system.\\n\");\n    return false;\n  }\n\n  XR_CHECK(xrGetSystemProperties(instance_, systemId_, &systemProps_));\n\n  IGL_LOG_INFO(\n      \"System Properties: Name=%s VendorId=%x\\n\", systemProps_.systemName, systemProps_.vendorId);\n  IGL_LOG_INFO(\"System Graphics Properties: MaxWidth=%d MaxHeight=%d MaxLayers=%d\\n\",\n               systemProps_.graphicsProperties.maxSwapchainImageWidth,\n               systemProps_.graphicsProperties.maxSwapchainImageHeight,\n               systemProps_.graphicsProperties.maxLayerCount);\n  IGL_LOG_INFO(\"System Tracking Properties: OrientationTracking=%s PositionTracking=%s\\n\",\n               systemProps_.trackingProperties.orientationTracking ? \"True\" : \"False\",\n               systemProps_.trackingProperties.positionTracking ? \"True\" : \"False\");\n  IGL_LOG_INFO(\"System Hand Tracking Properties: Supported=%s\\n\",\n               handTrackingSystemProps_.supportsHandTracking ? \"True\" : \"False\");\n  return true;\n}\n\nbool XrApp::enumerateViewConfigurations() {\n  uint32_t numViewConfigs = 0;\n  XR_CHECK(xrEnumerateViewConfigurations(instance_, systemId_, 0, &numViewConfigs, nullptr));\n\n  std::vector<XrViewConfigurationType> viewConfigTypes(numViewConfigs);\n  XR_CHECK(xrEnumerateViewConfigurations(\n      instance_, systemId_, numViewConfigs, &numViewConfigs, viewConfigTypes.data()));\n\n  IGL_LOG_INFO(\"Available Viewport Configuration Types: %d\\n\", numViewConfigs);\n  auto foundViewConfig = false;\n  for (auto& viewConfigType : viewConfigTypes) {\n    IGL_LOG_INFO(\"View configuration type %d : %s\\n\",\n                 viewConfigType,\n                 viewConfigType == kSupportedViewConfigType ? \"Selected\" : \"\");\n\n    if (viewConfigType != kSupportedViewConfigType) {\n      continue;\n    }\n\n    // Check properties\n    XrViewConfigurationProperties viewConfigProps = {XR_TYPE_VIEW_CONFIGURATION_PROPERTIES};\n    XR_CHECK(\n        xrGetViewConfigurationProperties(instance_, systemId_, viewConfigType, &viewConfigProps));\n    IGL_LOG_INFO(\"FovMutable=%s ConfigurationType %d\\n\",\n                 viewConfigProps.fovMutable ? \"true\" : \"false\",\n                 viewConfigProps.viewConfigurationType);\n\n    // Check views\n    uint32_t numViewports = 0;\n    XR_CHECK(xrEnumerateViewConfigurationViews(\n        instance_, systemId_, viewConfigType, 0, &numViewports, nullptr));\n\n    if (!IGL_DEBUG_VERIFY(numViewports == XrComposition::kNumViews)) {\n      IGL_LOG_ERROR(\n          \"numViewports must be %d. Make sure XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO is used.\\n\",\n          XrComposition::kNumViews);\n      return false;\n    }\n\n    XR_CHECK(xrEnumerateViewConfigurationViews(\n        instance_, systemId_, viewConfigType, numViewports, &numViewports, viewports_.data()));\n\n    for (auto& view : viewports_) {\n      (void)view; // doesn't compile in release for unused variable\n      IGL_LOG_INFO(\"Viewport [%d]: Recommended Width=%d Height=%d SampleCount=%d\\n\",\n                   view,\n                   view.recommendedImageRectWidth,\n                   view.recommendedImageRectHeight,\n                   view.recommendedSwapchainSampleCount);\n\n      IGL_LOG_INFO(\"Viewport [%d]: Max Width=%d Height=%d SampleCount=%d\\n\",\n                   view,\n                   view.maxImageRectWidth,\n                   view.maxImageRectHeight,\n                   view.maxSwapchainSampleCount);\n    }\n\n    viewConfigProps_ = viewConfigProps;\n\n    foundViewConfig = true;\n\n    break;\n  }\n\n  IGL_DEBUG_ASSERT(\n      foundViewConfig, \"XrViewConfigurationType %d not found.\", kSupportedViewConfigType);\n\n  return true;\n}\n\nvoid XrApp::enumerateReferenceSpaces() {\n  uint32_t numRefSpaceTypes = 0;\n  XR_CHECK(xrEnumerateReferenceSpaces(session_, 0, &numRefSpaceTypes, nullptr));\n\n  std::vector<XrReferenceSpaceType> refSpaceTypes(numRefSpaceTypes);\n\n  XR_CHECK(xrEnumerateReferenceSpaces(\n      session_, numRefSpaceTypes, &numRefSpaceTypes, refSpaceTypes.data()));\n\n  stageSpaceSupported_ =\n      std::any_of(std::begin(refSpaceTypes), std::end(refSpaceTypes), [](const auto& type) {\n        return type == XR_REFERENCE_SPACE_TYPE_STAGE;\n      });\n  IGL_LOG_INFO(\"OpenXR stage reference space is %s\\n\",\n               stageSpaceSupported_ ? \"supported\" : \"not supported\");\n}\n\nvoid XrApp::enumerateBlendModes() {\n  uint32_t numBlendModes = 0;\n  XR_CHECK(xrEnumerateEnvironmentBlendModes(\n      instance_, systemId_, kSupportedViewConfigType, 0, &numBlendModes, nullptr));\n\n  std::vector<XrEnvironmentBlendMode> blendModes(numBlendModes);\n  XR_CHECK(xrEnumerateEnvironmentBlendModes(instance_,\n                                            systemId_,\n                                            kSupportedViewConfigType,\n                                            numBlendModes,\n                                            &numBlendModes,\n                                            blendModes.data()));\n\n  additiveBlendingSupported_ =\n      std::any_of(std::begin(blendModes), std::end(blendModes), [](const auto& type) {\n        return type == XR_ENVIRONMENT_BLEND_MODE_ADDITIVE;\n      });\n  IGL_LOG_INFO(\"OpenXR additive blending %s\\n\",\n               additiveBlendingSupported_ ? \"supported\" : \"not supported\");\n}\n\nbool XrApp::initialize(const struct android_app* app, const InitParams& params) {\n  if (initialized_) {\n    return false;\n  }\n\n#if IGL_PLATFORM_ANDROID\n  PFN_xrInitializeLoaderKHR xrInitializeLoaderKHR = nullptr;\n  XR_CHECK(xrGetInstanceProcAddr(\n      XR_NULL_HANDLE, \"xrInitializeLoaderKHR\", (PFN_xrVoidFunction*)&xrInitializeLoaderKHR));\n  if (xrInitializeLoaderKHR) {\n    XrLoaderInitInfoAndroidKHR loaderInitializeInfoAndroid = {\n        XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR,\n        nullptr,\n        app->activity->vm,\n        app->activity->clazz,\n    };\n\n    XR_CHECK(xrInitializeLoaderKHR((XrLoaderInitInfoBaseHeaderKHR*)&loaderInitializeInfoAndroid));\n  }\n\n  instanceCreateInfoAndroid_.applicationVM = app->activity->vm;\n  instanceCreateInfoAndroid_.applicationActivity = app->activity->clazz;\n#endif\n\n  if (!checkExtensions()) {\n    return false;\n  }\n\n  if (!createInstance()) {\n    return false;\n  }\n\n  if (!createSystem()) {\n    return false;\n  }\n\n  if (!enumerateViewConfigurations()) {\n    return false;\n  }\n\n  std::unique_ptr<IDevice> device;\n  device = impl_->initIGL(instance_, systemId_);\n  if (!device) {\n    IGL_LOG_ERROR(\"Failed to initialize IGL\\n\");\n    return false;\n  }\n\n#if IGL_WGL\n  // Single stereo render pass is not supported for OpenGL on Windows.\n  useSinglePassStereo_ = false;\n#else\n  useSinglePassStereo_ = useSinglePassStereo_ && device->hasFeature(igl::DeviceFeatures::Multiview);\n#endif\n\n#if IGL_PLATFORM_ANDROID\n  createShellSession(std::move(device), app->activity->assetManager);\n#else\n  createShellSession(std::move(device), nullptr);\n#endif\n\n  session_ = impl_->initXrSession(instance_, systemId_, platform_->getDevice(), sessionConfig_);\n  if (session_ == XR_NULL_HANDLE) {\n    IGL_LOG_ERROR(\"Failed to initialize graphics system\\n\");\n    return false;\n  }\n\n  // The following are initialization steps that happen after XrSession is created.\n  enumerateReferenceSpaces();\n  enumerateBlendModes();\n  createSpaces();\n  if (passthroughSupported()) {\n    passthrough_ = std::make_unique<XrPassthrough>(instance_, session_);\n    if (!passthrough_->initialize()) {\n      return false;\n    }\n  }\n  if (handTrackingSupported()) {\n    hands_ = std::make_unique<XrHands>(instance_, session_, handTrackingMeshSupported());\n    if (!hands_->initialize()) {\n      return false;\n    }\n  }\n  if (refreshRateExtensionSupported()) {\n    refreshRate_ = std::make_unique<XrRefreshRate>(instance_, session_);\n    if (!refreshRate_->initialize(params.refreshRateParams)) {\n      return false;\n    }\n  }\n\n  if (hands_) {\n    hands_->updateMeshes(shellParams_->handMeshes);\n  }\n\n  IGL_DEBUG_ASSERT(renderSession_ != nullptr);\n  renderSession_->initialize();\n\n  if (useQuadLayerComposition_) {\n    updateQuadComposition();\n  } else {\n    compositionLayers_.emplace_back(std::make_unique<XrCompositionProjection>(\n        *impl_, platform_, session_, useSinglePassStereo_));\n\n    compositionLayers_.back()->updateSwapchainImageInfo(\n        {impl::SwapchainImageInfo{\n             .imageWidth = viewports_[0].recommendedImageRectWidth,\n             .imageHeight = viewports_[0].recommendedImageRectHeight,\n         },\n         impl::SwapchainImageInfo{\n             .imageWidth = viewports_[1].recommendedImageRectWidth,\n             .imageHeight = viewports_[1].recommendedImageRectHeight,\n         }});\n  }\n\n  initialized_ = true;\n  return initialized_;\n}\n\n// NOLINTNEXTLINE(bugprone-exception-escape)\nvoid XrApp::updateQuadComposition() noexcept {\n  const auto& appParams = renderSession_->appParams();\n\n  constexpr uint32_t kQuadLayerDefaultImageSize = 1024;\n\n  const auto aspect = appParams.sizeY / appParams.sizeX;\n  QuadLayerParams quadLayersParams = {\n      .layerInfo = {{\n#if USE_LOCAL_AR_SPACE\n          .position = {0.0f, 0.0f, -1.0f},\n#else\n          .position = {0.0f, 0.0f, 0.0f},\n#endif\n          .size = {appParams.sizeX, appParams.sizeY},\n          .blendMode = LayerBlendMode::AlphaBlend,\n          .imageWidth = kQuadLayerDefaultImageSize,\n          .imageHeight = static_cast<uint32_t>(kQuadLayerDefaultImageSize * aspect),\n      }}};\n\n  if (appParams.quadLayerParamsGetter) {\n    auto params = appParams.quadLayerParamsGetter();\n    if (params.numQuads() > 0) {\n      quadLayersParams = std::move(params);\n    }\n  }\n\n  std::array<impl::SwapchainImageInfo, XrComposition::kNumViews> swapchainImageInfo{};\n  for (size_t i = 0; i < quadLayersParams.numQuads(); ++i) {\n    swapchainImageInfo.fill({\n        .imageWidth = quadLayersParams.layerInfo[i].imageWidth,\n        .imageHeight = quadLayersParams.layerInfo[i].imageHeight,\n    });\n\n    if (i < compositionLayers_.size()) {\n      auto* quadLayer = static_cast<XrCompositionQuad*>(compositionLayers_[i].get());\n      quadLayer->updateQuadLayerInfo(quadLayersParams.layerInfo[i]);\n      quadLayer->updateSwapchainImageInfo(swapchainImageInfo);\n    } else {\n      compositionLayers_.emplace_back(\n          std::make_unique<XrCompositionQuad>(*impl_,\n                                              platform_,\n                                              session_,\n                                              useSinglePassStereo_,\n                                              alphaBlendCompositionSupported(),\n                                              quadLayersParams.layerInfo[i]));\n      compositionLayers_.back()->updateSwapchainImageInfo(swapchainImageInfo);\n    }\n  }\n\n  // Remove any layers that are no longer needed.\n  compositionLayers_.resize(quadLayersParams.numQuads());\n}\n\nvoid XrApp::createShellSession(std::unique_ptr<IDevice> device, AAssetManager* assetMgr) {\n#if IGL_PLATFORM_ANDROID\n  platform_ = std::make_shared<PlatformAndroid>(std::move(device));\n  IGL_DEBUG_ASSERT(platform_ != nullptr);\n  static_cast<FileLoaderAndroid&>(platform_->getFileLoader()).setAssetManager(assetMgr);\n#elif IGL_PLATFORM_APPLE\n  platform_ = std::make_shared<igl::shell::PlatformMac>(std::move(device));\n#elif IGL_PLATFORM_WINDOWS\n  platform_ = std::make_shared<igl::shell::PlatformWin>(std::move(device));\n#endif\n\n  auto factory = igl::shell::createDefaultRenderSessionFactory();\n  const auto requestedSessionConfigs =\n      factory->requestedSessionConfigs(shell::ShellType::OpenXR, {impl_->suggestedSessionConfig()});\n  if (IGL_DEBUG_VERIFY_NOT(requestedSessionConfigs.size() != 1)) {\n    return;\n  }\n  sessionConfig_ = requestedSessionConfigs[0];\n\n  renderSession_ = factory->createRenderSession(platform_);\n  shellParams_->shellControlsViewParams = true;\n  shellParams_->rightHandedCoordinateSystem = true;\n  shellParams_->renderMode = useSinglePassStereo_ ? RenderMode::SinglePassStereo\n                                                  : RenderMode::DualPassStereo;\n  shellParams_->viewParams.resize(useSinglePassStereo_ ? 2 : 1);\n  renderSession_->setShellParams(*shellParams_);\n}\n\nvoid XrApp::createSpaces() {\n  XrReferenceSpaceCreateInfo spaceCreateInfo = {\n      XR_TYPE_REFERENCE_SPACE_CREATE_INFO,\n      nullptr,\n      XR_REFERENCE_SPACE_TYPE_VIEW,\n      {{0.0f, 0.0f, 0.0f, 1.0f}},\n  };\n  XR_CHECK(xrCreateReferenceSpace(session_, &spaceCreateInfo, &headSpace_));\n\n#if USE_LOCAL_AR_SPACE\n  spaceCreateInfo.referenceSpaceType = XR_REFERENCE_SPACE_TYPE_LOCAL;\n#else\n  spaceCreateInfo.referenceSpaceType = stageSpaceSupported_ ? XR_REFERENCE_SPACE_TYPE_STAGE\n                                                            : XR_REFERENCE_SPACE_TYPE_LOCAL;\n#endif\n  XR_CHECK(xrCreateReferenceSpace(session_, &spaceCreateInfo, &currentSpace_));\n}\n\nvoid XrApp::handleXrEvents() {\n  XrEventDataBuffer eventDataBuffer = {};\n\n  // Poll for events\n  for (;;) {\n    auto* baseEventHeader = (XrEventDataBaseHeader*)(&eventDataBuffer);\n    baseEventHeader->type = XR_TYPE_EVENT_DATA_BUFFER;\n    baseEventHeader->next = nullptr;\n    const XrResult res = xrPollEvent(instance_, &eventDataBuffer);\n    XR_CHECK(res);\n    if (res != XR_SUCCESS) {\n      break;\n    }\n\n    switch (baseEventHeader->type) {\n    case XR_TYPE_EVENT_DATA_EVENTS_LOST:\n      IGL_LOG_INFO(\"xrPollEvent: received XR_TYPE_EVENT_DATA_EVENTS_LOST event\\n\");\n      break;\n    case XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING:\n      IGL_LOG_INFO(\"xrPollEvent: received XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING event\\n\");\n      break;\n    case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED:\n      IGL_LOG_INFO(\"xrPollEvent: received XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED event\\n\");\n      break;\n    case XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT: {\n      const XrEventDataPerfSettingsEXT* perfSettingsEvent =\n          (XrEventDataPerfSettingsEXT*)(baseEventHeader);\n      (void)perfSettingsEvent; // suppress unused warning\n      IGL_LOG_INFO(\n          \"xrPollEvent: received XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT event: type %d subdomain %d \"\n          \": level %d -> level %d\\n\",\n          perfSettingsEvent->type,\n          perfSettingsEvent->subDomain,\n          perfSettingsEvent->fromLevel,\n          perfSettingsEvent->toLevel);\n    } break;\n    case XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING:\n      IGL_LOG_INFO(\n          \"xrPollEvent: received XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING event\\n\");\n      break;\n    case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED: {\n      const XrEventDataSessionStateChanged* sessionStateChangedEvent =\n          (XrEventDataSessionStateChanged*)(baseEventHeader);\n      IGL_LOG_INFO(\n          \"xrPollEvent: received XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED: %d for session %p at \"\n          \"time %lld\\n\",\n          sessionStateChangedEvent->state,\n          (void*)sessionStateChangedEvent->session,\n          sessionStateChangedEvent->time);\n\n      switch (sessionStateChangedEvent->state) {\n      case XR_SESSION_STATE_READY:\n      case XR_SESSION_STATE_STOPPING:\n        handleSessionStateChanges(sessionStateChangedEvent->state);\n        break;\n      default:\n        break;\n      }\n    } break;\n    default:\n      IGL_LOG_INFO(\"xrPollEvent: Unknown event\\n\");\n      break;\n    }\n  }\n}\n\nvoid XrApp::handleActionView(const std::string& data) {\n  if (platform_ != nullptr) {\n    IntentEvent event;\n    event.type = igl::shell::IntentType::ActionView;\n    event.data = data;\n    platform_->getInputDispatcher().queueEvent(event);\n  }\n}\n\nvoid XrApp::handleSessionStateChanges(XrSessionState state) {\n  if (state == XR_SESSION_STATE_READY) {\n#if !defined(IGL_CMAKE_BUILD)\n    assert(resumed_);\n#endif // IGL_CMAKE_BUILD\n    assert(sessionActive_ == false);\n\n    const XrSessionBeginInfo sessionBeginInfo{\n        XR_TYPE_SESSION_BEGIN_INFO,\n        nullptr,\n        viewConfigProps_.viewConfigurationType,\n    };\n\n    const XrResult result = xrBeginSession(session_, &sessionBeginInfo);\n    XR_CHECK(result);\n\n    sessionActive_ = (result == XR_SUCCESS);\n    IGL_LOG_INFO(\"XR session active\\n\");\n  } else if (state == XR_SESSION_STATE_STOPPING) {\n    assert(sessionActive_);\n    XR_CHECK(xrEndSession(session_));\n    sessionActive_ = false;\n    IGL_LOG_INFO(\"XR session inactive\\n\");\n  }\n}\n\nXrFrameState XrApp::beginFrame() {\n  if (passthrough_) {\n    const bool ptEnabled = passthroughEnabled();\n    passthrough_->setEnabled(ptEnabled);\n    if (ptEnabled) {\n      passthrough_->setOpacity(renderSession_->appParams().passthroughOpacity);\n    }\n  }\n\n  if (useQuadLayerComposition_) {\n    updateQuadComposition();\n  }\n\n  const XrFrameWaitInfo waitFrameInfo = {XR_TYPE_FRAME_WAIT_INFO};\n\n  XrFrameState frameState = {XR_TYPE_FRAME_STATE};\n\n  XR_CHECK(xrWaitFrame(session_, &waitFrameInfo, &frameState));\n\n  const XrFrameBeginInfo beginFrameInfo = {XR_TYPE_FRAME_BEGIN_INFO};\n\n  XR_CHECK(xrBeginFrame(session_, &beginFrameInfo));\n\n  XrSpaceLocation loc = {\n      loc.type = XR_TYPE_SPACE_LOCATION,\n  };\n  XR_CHECK(xrLocateSpace(headSpace_, currentSpace_, frameState.predictedDisplayTime, &loc));\n  const XrPosef headPose = loc.pose;\n\n  XrViewState viewState = {XR_TYPE_VIEW_STATE};\n\n  const XrViewLocateInfo projectionInfo = {\n      XR_TYPE_VIEW_LOCATE_INFO,\n      nullptr,\n      viewConfigProps_.viewConfigurationType,\n      frameState.predictedDisplayTime,\n      headSpace_,\n  };\n\n  uint32_t numViews = views_.size();\n\n  XR_CHECK(xrLocateViews(\n      session_, &projectionInfo, &viewState, views_.size(), &numViews, views_.data()));\n\n  for (size_t i = 0; i < XrComposition::kNumViews; i++) {\n    const XrPosef eyePose = views_[i].pose;\n    XrPosef_Multiply(&viewStagePoses_[i], &headPose, &eyePose);\n    XrPosef viewTransformXrPosef{};\n    XrPosef_Invert(&viewTransformXrPosef, &viewStagePoses_[i]);\n    XrMatrix4x4f xrMat4{};\n    XrMatrix4x4f_CreateFromRigidTransform(&xrMat4, &viewTransformXrPosef);\n    viewTransforms_[i] = glm::make_mat4(xrMat4.m);\n    cameraPositions_[i] = glm::vec3(eyePose.position.x, eyePose.position.y, eyePose.position.z);\n  }\n\n  if (hands_) {\n    hands_->updateTracking(currentSpace_, shellParams_->handTracking);\n  }\n\n  return frameState;\n}\n\nvoid XrApp::render() {\n  if (passthrough_) {\n    if (passthroughEnabled()) {\n      shellParams_->clearColorValue = Color{0.0f, 0.0f, 0.0f, 0.0f};\n    } else {\n      shellParams_->clearColorValue.reset();\n    }\n  }\n#if USE_FORCE_ZERO_CLEAR\n  else {\n    shellParams_->clearColorValue = Color{0.0f, 0.0f, 0.0f, 0.0f};\n  }\n#endif\n\n  for (size_t layerIndex = 0; layerIndex < compositionLayers_.size(); ++layerIndex) {\n    if (!compositionLayers_[layerIndex]->isValid()) {\n      continue;\n    }\n\n    for (uint32_t i = 0; i < compositionLayers_[layerIndex]->renderPassesCount(); ++i) {\n      auto surfaceTextures = compositionLayers_[layerIndex]->beginRendering(\n          i, views_, viewTransforms_, cameraPositions_, shellParams_->viewParams);\n\n      renderSession_->setCurrentQuadLayer(useQuadLayerComposition_ ? layerIndex : 0);\n      renderSession_->update(std::move(surfaceTextures));\n\n      compositionLayers_[layerIndex]->endRendering(i);\n    }\n  }\n}\n\nvoid XrApp::endFrame(XrFrameState frameState) {\n  XrCompositionLayerFlags compositionFlags = XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT;\n  if (passthroughEnabled()) {\n    compositionFlags |= XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT;\n  }\n\n  std::vector<const XrCompositionLayerBaseHeader*> layers;\n  layers.reserve(1 + compositionLayers_.size() * (useQuadLayerComposition_ ? 2 : 1));\n\n  if (passthroughEnabled()) {\n    passthrough_->injectLayer(layers);\n  }\n\n  const auto& appParams = renderSession_->appParams();\n  for (const auto& layer : compositionLayers_) {\n    if (layer->isValid()) {\n      layer->doComposition(\n          appParams.depthParams, views_, viewStagePoses_, currentSpace_, compositionFlags, layers);\n    }\n  }\n\n  const XrFrameEndInfo endFrameInfo{\n      .type = XR_TYPE_FRAME_END_INFO,\n      .next = nullptr,\n      .displayTime = frameState.predictedDisplayTime,\n      .environmentBlendMode = additiveBlendingSupported_ ? XR_ENVIRONMENT_BLEND_MODE_ADDITIVE\n                                                         : XR_ENVIRONMENT_BLEND_MODE_OPAQUE,\n      .layerCount = static_cast<uint32_t>(layers.size()),\n      .layers = layers.data(),\n  };\n  XR_CHECK(xrEndFrame(session_, &endFrameInfo));\n}\n\nvoid XrApp::update() {\n  if (!initialized_ || !resumed_ || !sessionActive_) {\n    return;\n  }\n\n  if (platform_ != nullptr) {\n    platform_->getInputDispatcher().processEvents();\n  }\n\n  auto frameState = beginFrame();\n  render();\n  endFrame(frameState);\n}\n\nbool XrApp::passthroughSupported() const noexcept { // NOLINT(bugprone-exception-escape)\n  return supportedOptionalXrExtensions_.count(XR_FB_PASSTHROUGH_EXTENSION_NAME) != 0;\n}\n\nbool XrApp::passthroughEnabled() const noexcept { // NOLINT(bugprone-exception-escape)\n  if (!renderSession_ || !passthrough_) {\n    return false;\n  }\n  const auto& appParams = renderSession_->appParams();\n  return appParams.passthroughGetter ? appParams.passthroughGetter() : useQuadLayerComposition_;\n}\n\nbool XrApp::handTrackingSupported() const noexcept { // NOLINT(bugprone-exception-escape)\n#if IGL_PLATFORM_ANDROID\n  return supportedOptionalXrExtensions_.count(XR_EXT_HAND_TRACKING_EXTENSION_NAME) != 0 &&\n         handTrackingSystemProps_.supportsHandTracking != 0u;\n#endif // IGL_PLATFORM_ANDROID\n  return false;\n}\n\nbool XrApp::handTrackingMeshSupported() const noexcept { // NOLINT(bugprone-exception-escape)\n#if IGL_PLATFORM_ANDROID\n  return supportedOptionalXrExtensions_.count(XR_FB_HAND_TRACKING_MESH_EXTENSION_NAME) != 0;\n#endif // IGL_PLATFORM_ANDROID\n  return false;\n}\n\nbool XrApp::refreshRateExtensionSupported() const noexcept { // NOLINT(bugprone-exception-escape)\n  return supportedOptionalXrExtensions_.count(XR_FB_DISPLAY_REFRESH_RATE_EXTENSION_NAME) != 0;\n}\n\nbool XrApp::instanceCreateInfoAndroidSupported()\n    const noexcept { // NOLINT(bugprone-exception-escape)\n#if IGL_PLATFORM_ANDROID\n  return supportedOptionalXrExtensions_.count(XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME) != 0;\n#endif // IGL_PLATFORM_ANDROID\n  return false;\n}\n\nbool XrApp::alphaBlendCompositionSupported() const noexcept { // NOLINT(bugprone-exception-escape)\n#ifdef XR_FB_composition_layer_alpha_blend\n  return supportedOptionalXrExtensions_.count(XR_FB_COMPOSITION_LAYER_ALPHA_BLEND_EXTENSION_NAME) !=\n         0;\n#endif // XR_FB_composition_layer_alpha_blend\n  return false;\n}\n\n} // namespace igl::shell::openxr\n"
  },
  {
    "path": "shell/openxr/mobile/java/com/facebook/igl/shell/openxr/gles/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          xmlns:tools=\"http://schemas.android.com/tools\"\n          package=\"com.facebook.igl.shell.openxr.gles\"\n          android:versionCode=\"1\"\n          android:versionName=\"1.0\"\n          android:installLocation=\"auto\">\n  <uses-feature android:glEsVersion=\"0x00030000\"/>\n  <uses-feature android:name=\"com.oculus.experimental.enabled\" android:required=\"false\" />\n  <uses-feature android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"false\" />\n  <uses-feature android:name=\"oculus.software.handtracking\" android:required=\"false\" />\n\n  <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n  <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n  <uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\" tools:ignore=\"ScopedStorage\" />\n  <uses-permission android:name=\"android.permission.INTERNET\" />\n  <uses-permission android:name=\"com.oculus.permission.HAND_TRACKING\" />\n\n  <uses-sdk\n      android:minSdkVersion=\"29\"\n      android:targetSdkVersion=\"33\" />\n\n    <queries>\n        <provider android:authorities=\"org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_broker\" />\n    </queries>\n\n  <application\n      android:allowBackup=\"false\"\n      android:fullBackupContent=\"false\"\n      android:label=\"IGL Shell OpenXR OpenGL ES\">\n    <meta-data\n        android:name=\"com.oculus.intent.category.VR\"\n        android:value=\"vr_only\"/>\n\n    <meta-data android:name=\"com.oculus.supportedDevices\" android:value=\"quest|quest2|quest3|questpro\"/>\n\n    <activity android:name=\"com.facebook.igl.shell.openxr.gles.MainActivity\"\n              android:theme=\"@android:style/Theme.NoTitleBar.Fullscreen\"\n              android:launchMode=\"singleTask\"\n              android:exported=\"true\"\n              android:screenOrientation=\"landscape\"\n\t\t\t\t      android:excludeFromRecents=\"false\"\n              android:configChanges=\"screenSize|screenLayout|orientation|keyboardHidden|keyboard|navigation|uiMode\">\n\t\t\t<!-- This filter lets the apk show up as a launchable icon. -->\n      <meta-data android:name=\"android.app.lib_name\" android:value=\"openxr-gles-Jni\" />\n      <intent-filter>\n\t\t\t\t<action android:name=\"android.intent.action.MAIN\" />\n        <category android:name=\"com.oculus.intent.category.VR\" />\n\t\t\t\t<category android:name=\"android.intent.category.LAUNCHER\" />\n\t\t\t</intent-filter>\n      <intent-filter>\n        <action android:name=\"android.intent.action.VIEW\" />\n        <category android:name=\"android.intent.category.BROWSABLE\" />\n        <data android:scheme=\"https\"\n              android:host=\"www.github.com\"\n              android:pathPrefix=\"/facebook/igl\"/>\n      </intent-filter>\n    </activity>\n  </application>\n</manifest>\n"
  },
  {
    "path": "shell/openxr/mobile/java/com/facebook/igl/shell/openxr/gles/MainActivity.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\npackage com.facebook.igl.shell.openxr.gles;\n\nimport android.content.Intent;\n\npublic class MainActivity extends android.app.NativeActivity {\n  static {\n    System.loadLibrary(\"openxr-gles-Jni\");\n  }\n\n  @Override\n  protected void onNewIntent(Intent intent) {\n    super.onNewIntent(intent);\n    if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {\n      onActionView(intent.getStringExtra(\"data\"));\n    }\n  }\n\n  private native void onActionView(String data);\n}\n"
  },
  {
    "path": "shell/openxr/mobile/java/com/facebook/igl/shell/openxr/vulkan/AndroidManifest.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n          xmlns:tools=\"http://schemas.android.com/tools\"\n          package=\"com.facebook.igl.shell.openxr.vulkan\"\n          android:versionCode=\"1\"\n          android:versionName=\"1.0\"\n          android:installLocation=\"auto\">\n  <uses-feature android:glEsVersion=\"0x00030000\"/>\n  <uses-feature android:name=\"com.oculus.experimental.enabled\" android:required=\"false\" />\n  <uses-feature android:name=\"com.oculus.feature.PASSTHROUGH\" android:required=\"false\" />\n  <uses-feature android:name=\"oculus.software.handtracking\" android:required=\"false\" />\n\n  <uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" />\n  <uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />\n  <uses-permission android:name=\"android.permission.MANAGE_EXTERNAL_STORAGE\" tools:ignore=\"ScopedStorage\" />\n  <uses-permission android:name=\"android.permission.INTERNET\" />\n  <uses-permission android:name=\"com.oculus.permission.HAND_TRACKING\" />\n\n  <uses-sdk\n      android:minSdkVersion=\"29\"\n      android:targetSdkVersion=\"33\" />\n\n    <queries>\n        <provider android:authorities=\"org.khronos.openxr.runtime_broker;org.khronos.openxr.system_runtime_broker\" />\n    </queries>\n\n  <application\n      android:allowBackup=\"false\"\n      android:fullBackupContent=\"false\"\n      android:label=\"IGL Shell OpenXR Vulkan\">\n\n    <meta-data android:name=\"com.oculus.supportedDevices\" android:value=\"quest|quest2|quest3|questpro\"/>\n    <meta-data\n        android:name=\"com.oculus.intent.category.VR\"\n        android:value=\"vr_only\"/>\n\n    <activity android:name=\"com.facebook.igl.shell.openxr.vulkan.MainActivity\"\n              android:theme=\"@android:style/Theme.NoTitleBar.Fullscreen\"\n              android:launchMode=\"singleTask\"\n              android:exported=\"true\"\n              android:screenOrientation=\"landscape\"\n\t\t\t\t      android:excludeFromRecents=\"false\"\n              android:configChanges=\"screenSize|screenLayout|orientation|keyboardHidden|keyboard|navigation|uiMode\">\n\t\t\t<!-- This filter lets the apk show up as a launchable icon. -->\n      <meta-data android:name=\"android.app.lib_name\" android:value=\"openxr-vulkan-Jni\" />\n      <intent-filter>\n\t\t\t\t<action android:name=\"android.intent.action.MAIN\" />\n        <category android:name=\"com.oculus.intent.category.VR\" />\n\t\t\t\t<category android:name=\"android.intent.category.LAUNCHER\" />\n\t\t\t</intent-filter>\n      <intent-filter>\n        <action android:name=\"android.intent.action.VIEW\" />\n        <category android:name=\"android.intent.category.BROWSABLE\" />\n        <data android:scheme=\"https\"\n              android:host=\"www.github.com\"\n              android:pathPrefix=\"/facebook/igl\"/>\n      </intent-filter>\n    </activity>\n  </application>\n</manifest>\n"
  },
  {
    "path": "shell/openxr/mobile/java/com/facebook/igl/shell/openxr/vulkan/MainActivity.java",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\npackage com.facebook.igl.shell.openxr.vulkan;\n\nimport android.content.Intent;\n\npublic class MainActivity extends android.app.NativeActivity {\n  static {\n    System.loadLibrary(\"openxr-vulkan-Jni\");\n  }\n\n  @Override\n  protected void onNewIntent(Intent intent) {\n    super.onNewIntent(intent);\n    if (intent != null && Intent.ACTION_VIEW.equals(intent.getAction())) {\n      onActionView(intent.getStringExtra(\"data\"));\n    }\n  }\n\n  private native void onActionView(String data);\n}\n"
  },
  {
    "path": "shell/openxr/mobile/opengl/XrAppImplGLES.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/mobile/opengl/XrAppImplGLES.h>\n\n#include <igl/Common.h>\n#include <igl/opengl/Device.h>\n#if IGL_WGL\n#include <igl/opengl/wgl/Context.h>\n#include <igl/opengl/wgl/HWDevice.h>\n#else\n#include <igl/opengl/egl/Context.h>\n#include <igl/opengl/egl/HWDevice.h>\n#endif // IGL_WGL\n\n#include <shell/openxr/XrLog.h>\n#include <shell/openxr/mobile/opengl/XrSwapchainProviderImplGLES.h>\n\nnamespace igl::shell::openxr::mobile {\nRenderSessionConfig XrAppImplGLES::suggestedSessionConfig() const {\n  return {.displayName = \"OpenGL ES 3.2\",\n          .backendVersion = {.flavor = igl::BackendFlavor::OpenGL_ES,\n                             .majorVersion = 3,\n                             .minorVersion = 2},\n          .swapchainColorTextureFormat = igl::TextureFormat::RGBA_SRGB};\n}\n\nstd::vector<const char*> XrAppImplGLES::getXrRequiredExtensions() const {\n  return {\n#if IGL_WGL\n      XR_KHR_OPENGL_ENABLE_EXTENSION_NAME,\n#else\n      XR_KHR_OPENGL_ES_ENABLE_EXTENSION_NAME,\n#endif // IGL_WGL\n      XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME,\n  };\n}\n\nstd::vector<const char*> XrAppImplGLES::getXrOptionalExtensions() const {\n  return {};\n}\n\nstd::unique_ptr<IDevice> XrAppImplGLES::initIGL(XrInstance instance, XrSystemId systemId) {\n  // Get the graphics requirements.\n  // XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING is returned on calls to xrCreateSession\n  // if this function has not been called for the instance and systemId before xrCreateSession.\n#if IGL_WGL\n  PFN_xrGetOpenGLGraphicsRequirementsKHR pfnGetOpenGLGraphicsRequirementsKHR = NULL;\n  XR_CHECK(xrGetInstanceProcAddr(instance,\n                                 \"xrGetOpenGLGraphicsRequirementsKHR\",\n                                 (PFN_xrVoidFunction*)(&pfnGetOpenGLGraphicsRequirementsKHR)));\n  XR_CHECK(pfnGetOpenGLGraphicsRequirementsKHR(instance, systemId, &graphicsRequirements_));\n\n  auto hwDevice = opengl::wgl::HWDevice();\n#else\n  PFN_xrGetOpenGLESGraphicsRequirementsKHR pfnGetOpenGLESGraphicsRequirementsKHR = nullptr;\n  XR_CHECK(xrGetInstanceProcAddr(instance,\n                                 \"xrGetOpenGLESGraphicsRequirementsKHR\",\n                                 (PFN_xrVoidFunction*)(&pfnGetOpenGLESGraphicsRequirementsKHR)));\n  XR_CHECK(pfnGetOpenGLESGraphicsRequirementsKHR(instance, systemId, &graphicsRequirements_));\n\n  auto hwDevice = opengl::egl::HWDevice();\n#endif // IGL_WGL\n\n  Result result;\n  return hwDevice.create(&result);\n}\n\nXrSession XrAppImplGLES::initXrSession(XrInstance instance,\n                                       XrSystemId systemId,\n                                       IDevice& device,\n                                       const RenderSessionConfig& sessionConfig) {\n  IGL_DEBUG_ASSERT(sessionConfig.backendVersion.flavor == igl::BackendFlavor::OpenGL_ES);\n  sessionConfig_ = sessionConfig;\n  device_ = &device;\n  const auto& glDevice = static_cast<igl::opengl::Device&>(device); // Downcast is safe here\n\n#if IGL_WGL\n  const auto& context =\n      static_cast<igl::opengl::wgl::Context&>(glDevice.getContext()); // Downcast is safe here\n  XrGraphicsBindingOpenGLWin32KHR graphicsBindingGL = {\n      .type = XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR,\n      .next = nullptr,\n      .hDC = context.getDeviceContext(),\n      .hGLRC = context.getRenderContext()};\n#else\n  const auto& context =\n      static_cast<igl::opengl::egl::Context&>(glDevice.getContext()); // Downcast is safe here\n  XrGraphicsBindingOpenGLESAndroidKHR graphicsBindingGL = {\n      .type = XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR,\n      .next = nullptr,\n      .display = context.getDisplay(),\n      .config = context.getConfig(),\n      .context = context.get(),\n  };\n#endif // IGL_WGL\n\n  const XrSessionCreateInfo sessionCreateInfo = {\n      .type = XR_TYPE_SESSION_CREATE_INFO,\n      .next = &graphicsBindingGL,\n      .createFlags = 0,\n      .systemId = systemId,\n  };\n\n  XrResult xrResult(XR_SUCCESS);\n  XrSession session = nullptr;\n  XR_CHECK(xrResult = xrCreateSession(instance, &sessionCreateInfo, &session));\n  if (xrResult != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"Failed to create XR session: %d.\\n\", xrResult);\n    return XR_NULL_HANDLE;\n  }\n  IGL_LOG_INFO(\"XR session created.\\n\");\n\n  return session;\n}\n\nstd::unique_ptr<impl::XrSwapchainProviderImpl> XrAppImplGLES::createSwapchainProviderImpl() const {\n  if (IGL_DEBUG_VERIFY(device_)) {\n    return std::make_unique<XrSwapchainProviderImplGLES>(\n        *device_, sessionConfig_.swapchainColorTextureFormat);\n  }\n\n  return nullptr;\n}\n} // namespace igl::shell::openxr::mobile\n"
  },
  {
    "path": "shell/openxr/mobile/opengl/XrAppImplGLES.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/openxr/XrPlatform.h>\n#include <shell/openxr/impl/XrAppImpl.h>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n\nnamespace igl::shell::openxr::mobile {\n\nclass XrAppImplGLES final : public impl::XrAppImpl {\n public:\n  [[nodiscard]] RenderSessionConfig suggestedSessionConfig() const override;\n  [[nodiscard]] std::vector<const char*> getXrRequiredExtensions() const override;\n  [[nodiscard]] std::vector<const char*> getXrOptionalExtensions() const override;\n\n  [[nodiscard]] std::unique_ptr<igl::IDevice> initIGL(XrInstance instance,\n                                                      XrSystemId systemId) override;\n  [[nodiscard]] XrSession initXrSession(XrInstance instance,\n                                        XrSystemId systemId,\n                                        igl::IDevice& device,\n                                        const RenderSessionConfig& sessionConfig) override;\n  [[nodiscard]] std::unique_ptr<impl::XrSwapchainProviderImpl> createSwapchainProviderImpl()\n      const override;\n\n private:\n#if IGL_WGL\n  XrGraphicsRequirementsOpenGLKHR graphicsRequirements_ = {\n      .type = XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR,\n  };\n#else\n  XrGraphicsRequirementsOpenGLESKHR graphicsRequirements_ = {\n      .type = XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR,\n  };\n#endif // IGL_WGL\n  igl::IDevice* device_ = nullptr;\n  RenderSessionConfig sessionConfig_;\n};\n} // namespace igl::shell::openxr::mobile\n"
  },
  {
    "path": "shell/openxr/mobile/opengl/XrSwapchainProviderImplGLES.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/mobile/opengl/XrSwapchainProviderImplGLES.h>\n\n#include <algorithm>\n#include <iterator>\n#include <shell/openxr/XrLog.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/PlatformDevice.h>\n#include <igl/opengl/TextureBufferExternal.h>\n\nnamespace igl::shell::openxr::mobile {\nnamespace {\nvoid enumerateSwapchainImages(XrSwapchain swapchain, std::vector<uint32_t>& outImages) {\n  uint32_t numImages = 0;\n  XR_CHECK(xrEnumerateSwapchainImages(swapchain, 0, &numImages, nullptr));\n\n  IGL_LOG_INFO(\"XRSwapchain numImages: %d\\n\", numImages);\n\n#if IGL_WGL\n  std::vector<XrSwapchainImageOpenGLKHR> xrImages(numImages,\n                                                  {\n                                                      .type = XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR,\n                                                      .next = nullptr,\n                                                  });\n#else\n  std::vector<XrSwapchainImageOpenGLESKHR> xrImages(\n      numImages,\n      {\n          .type = XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR,\n          .next = nullptr,\n      });\n#endif // IGL_WGL\n  XR_CHECK(xrEnumerateSwapchainImages(\n      swapchain, numImages, &numImages, (XrSwapchainImageBaseHeader*)xrImages.data()));\n\n  outImages.resize(0);\n  std::transform(xrImages.cbegin(),\n                 xrImages.cend(),\n                 std::back_inserter(outImages),\n                 [](const auto& xrImage) { return xrImage.image; });\n}\n\nstd::shared_ptr<ITexture> getSurfaceTexture(IDevice& device,\n                                            const XrSwapchain& swapchain,\n                                            const impl::SwapchainImageInfo& swapchainImageInfo,\n                                            uint8_t numViews,\n                                            const std::vector<uint32_t>& images,\n                                            TextureFormat externalTextureFormat,\n                                            std::vector<std::shared_ptr<ITexture>>& inOutTextures) {\n  uint32_t imageIndex = 0;\n  const XrSwapchainImageAcquireInfo acquireInfo{XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO};\n  XR_CHECK(xrAcquireSwapchainImage(swapchain, &acquireInfo, &imageIndex));\n\n  XrSwapchainImageWaitInfo waitInfo{XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO};\n  waitInfo.timeout = XR_INFINITE_DURATION;\n  XR_CHECK(xrWaitSwapchainImage(swapchain, &waitInfo));\n\n  const auto glTexture = images[imageIndex];\n\n  if (imageIndex >= inOutTextures.size()) {\n    inOutTextures.resize(static_cast<size_t>(imageIndex) + 1, nullptr);\n  }\n\n  auto texture = inOutTextures[imageIndex];\n  if (!texture || swapchainImageInfo.imageWidth != texture->getSize().width ||\n      swapchainImageInfo.imageHeight != texture->getSize().height) {\n    auto* const platformDevice = device.getPlatformDevice<igl::opengl::PlatformDevice>();\n    texture = platformDevice->createTextureBufferExternal(\n        glTexture,\n        numViews > 1 ? GL_TEXTURE_2D_ARRAY : GL_TEXTURE_2D,\n        igl::TextureDesc::TextureUsageBits::Attachment,\n        swapchainImageInfo.imageWidth,\n        swapchainImageInfo.imageHeight,\n        externalTextureFormat,\n        numViews);\n    if (!texture) {\n      IGL_LOG_ERROR(\"Failed to create ITexture from swapchain image.\\n\");\n      return {};\n    }\n    inOutTextures[imageIndex] = std::move(texture);\n  }\n\n  return inOutTextures[imageIndex];\n}\n} // namespace\n\nXrSwapchainProviderImplGLES::XrSwapchainProviderImplGLES(const igl::IDevice& device,\n                                                         TextureFormat preferredColorFormat) {\n  const auto& openglDevice = static_cast<const igl::opengl::Device&>(device);\n  igl::opengl::Texture::FormatDescGL formatDescGL;\n  igl::opengl::Texture::toFormatDescGL(openglDevice.getContext(),\n                                       preferredColorFormat,\n                                       TextureDesc::TextureUsageBits::Attachment |\n                                           TextureDesc::TextureUsageBits::Sampled,\n                                       formatDescGL);\n\n  preferredColorFormat_ = formatDescGL.internalFormat;\n}\n\nvoid XrSwapchainProviderImplGLES::enumerateImages(\n    IDevice& /*device*/,\n    XrSwapchain colorSwapchain,\n    XrSwapchain depthSwapchain,\n    const impl::SwapchainImageInfo& /* swapchainImageInfo */,\n    uint8_t /* numViews */) noexcept { // NOLINT(bugprone-exception-escape)\n  enumerateSwapchainImages(colorSwapchain, colorImages_);\n  enumerateSwapchainImages(depthSwapchain, depthImages_);\n}\n\nSurfaceTextures XrSwapchainProviderImplGLES::getSurfaceTextures(\n    IDevice& device,\n    XrSwapchain colorSwapchain,\n    XrSwapchain depthSwapchain,\n    const impl::SwapchainImageInfo& swapchainImageInfo,\n    uint8_t numViews) noexcept { // NOLINT(bugprone-exception-escape)\n  // Assume sized format so format / type are not needed.\n  auto iglColorFormat = igl::opengl::Texture::glInternalFormatToTextureFormat(\n      static_cast<GLuint>(swapchainImageInfo.colorFormat), 0, 0);\n  auto colorTexture = getSurfaceTexture(device,\n                                        colorSwapchain,\n                                        swapchainImageInfo,\n                                        numViews,\n                                        colorImages_,\n                                        iglColorFormat,\n                                        colorTextures_);\n\n  auto iglDepthFormat = igl::opengl::Texture::glInternalFormatToTextureFormat(\n      static_cast<GLuint>(swapchainImageInfo.depthFormat), 0, 0);\n  auto depthTexture = getSurfaceTexture(device,\n                                        depthSwapchain,\n                                        swapchainImageInfo,\n                                        numViews,\n                                        depthImages_,\n                                        iglDepthFormat,\n                                        depthTextures_);\n\n  return {.color = colorTexture, .depth = depthTexture};\n}\n} // namespace igl::shell::openxr::mobile\n"
  },
  {
    "path": "shell/openxr/mobile/opengl/XrSwapchainProviderImplGLES.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <shell/openxr/XrPlatform.h>\n#include <shell/openxr/impl/XrSwapchainProviderImpl.h>\n\nnamespace igl::shell::openxr::mobile {\nclass XrSwapchainProviderImplGLES final : public impl::XrSwapchainProviderImpl {\n public:\n  XrSwapchainProviderImplGLES(const igl::IDevice& device, igl::TextureFormat preferredColorFormat);\n\n  // NOLINTNEXTLINE(bugprone-exception-escape)\n  [[nodiscard]] std::vector<int64_t> preferredColorFormats() const noexcept final {\n    return {preferredColorFormat_};\n  }\n  // NOLINTNEXTLINE(bugprone-exception-escape)\n  [[nodiscard]] std::vector<int64_t> preferredDepthFormats() const noexcept final {\n    return {GL_DEPTH_COMPONENT16};\n  }\n\n  void enumerateImages(igl::IDevice& device,\n                       XrSwapchain colorSwapchain,\n                       XrSwapchain depthSwapchain,\n                       const impl::SwapchainImageInfo& swapchainImageInfo,\n                       uint8_t numViews) noexcept final;\n\n  [[nodiscard]] igl::SurfaceTextures getSurfaceTextures(\n      igl::IDevice& device,\n      XrSwapchain colorSwapchain,\n      XrSwapchain depthSwapchain,\n      const impl::SwapchainImageInfo& swapchainImageInfo,\n      uint8_t numViews) noexcept final;\n\n private:\n  int64_t preferredColorFormat_;\n  std::vector<uint32_t> colorImages_;\n  std::vector<uint32_t> depthImages_;\n};\n} // namespace igl::shell::openxr::mobile\n"
  },
  {
    "path": "shell/openxr/mobile/vulkan/XrAppImplVulkan.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/mobile/vulkan/XrAppImplVulkan.h>\n\n#include <shell/openxr/XrLog.h>\n#include <shell/openxr/impl/XrSwapchainProviderImpl.h>\n#include <shell/openxr/mobile/vulkan/XrSwapchainProviderImplVulkan.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/HWDevice.h>\n#include <igl/vulkan/VulkanContext.h>\n\nnamespace igl::shell::openxr::mobile {\nRenderSessionConfig XrAppImplVulkan::suggestedSessionConfig() const {\n  return {.displayName = \"Vulkan 1.1\",\n          .backendVersion = {.flavor = igl::BackendFlavor::Vulkan,\n                             .majorVersion = 1,\n                             .minorVersion = 1},\n          .swapchainColorTextureFormat = igl::TextureFormat::RGBA_SRGB};\n}\n\nstd::vector<const char*> XrAppImplVulkan::getXrRequiredExtensions() const {\n  return {\n      XR_KHR_VULKAN_ENABLE_EXTENSION_NAME,\n      XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME,\n  };\n}\n\nstd::vector<const char*> XrAppImplVulkan::getXrOptionalExtensions() const {\n  return {\n#if IGL_PLATFORM_ANDROID\n      XR_FB_SWAPCHAIN_UPDATE_STATE_VULKAN_EXTENSION_NAME,\n#endif\n  };\n}\n\nstd::unique_ptr<IDevice> XrAppImplVulkan::initIGL(XrInstance instance, XrSystemId systemId) {\n  // Get the API requirements.\n  // XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING is returned on calls to xrCreateSession\n  // if this function has not been called for the instance and systemId before xrCreateSession.\n  PFN_xrGetVulkanGraphicsRequirementsKHR pfnGetVulkanGraphicsRequirementsKHR = nullptr;\n  XR_CHECK(xrGetInstanceProcAddr(instance,\n                                 \"xrGetVulkanGraphicsRequirementsKHR\",\n                                 (PFN_xrVoidFunction*)(&pfnGetVulkanGraphicsRequirementsKHR)));\n\n  XR_CHECK(pfnGetVulkanGraphicsRequirementsKHR(instance, systemId, &graphicsRequirements_));\n\n  // Get required instance extensions\n  PFN_xrGetVulkanInstanceExtensionsKHR pfnGetVulkanInstanceExtensionsKHR = nullptr;\n  XR_CHECK(xrGetInstanceProcAddr(instance,\n                                 \"xrGetVulkanInstanceExtensionsKHR\",\n                                 (PFN_xrVoidFunction*)(&pfnGetVulkanInstanceExtensionsKHR)));\n\n  uint32_t bufferSize = 0;\n  XR_CHECK(pfnGetVulkanInstanceExtensionsKHR(instance, systemId, 0, &bufferSize, nullptr));\n\n  requiredVkInstanceExtensionsBuffer_.resize(bufferSize);\n  XR_CHECK(pfnGetVulkanInstanceExtensionsKHR(\n      instance, systemId, bufferSize, &bufferSize, requiredVkInstanceExtensionsBuffer_.data()));\n  requiredVkInstanceExtensions_ = processExtensionsBuffer(requiredVkInstanceExtensionsBuffer_);\n\n  IGL_LOG_INFO(\"Number of required Vulkan extensions: %d\\n\", requiredVkInstanceExtensions_.size());\n\n  // Get the required device extensions.\n  bufferSize = 0;\n  PFN_xrGetVulkanDeviceExtensionsKHR pfnGetVulkanDeviceExtensionsKHR = nullptr;\n  XR_CHECK(xrGetInstanceProcAddr(instance,\n                                 \"xrGetVulkanDeviceExtensionsKHR\",\n                                 (PFN_xrVoidFunction*)(&pfnGetVulkanDeviceExtensionsKHR)));\n\n  XR_CHECK(pfnGetVulkanDeviceExtensionsKHR(instance, systemId, 0, &bufferSize, nullptr));\n\n  requiredVkDeviceExtensionsBuffer_.resize(bufferSize);\n  XR_CHECK(pfnGetVulkanDeviceExtensionsKHR(\n      instance, systemId, bufferSize, &bufferSize, requiredVkDeviceExtensionsBuffer_.data()));\n\n  requiredVkDeviceExtensions_ = processExtensionsBuffer(requiredVkDeviceExtensionsBuffer_);\n\n  const igl::vulkan::VulkanContextConfig cfg = {\n      .numExtraInstanceExtensions = requiredVkInstanceExtensions_.size(),\n      .extraInstanceExtensions = requiredVkInstanceExtensions_.data(),\n  };\n\n  auto context = igl::vulkan::HWDevice::createContext(cfg, nullptr);\n\n  PFN_xrGetVulkanGraphicsDeviceKHR pfnGetVulkanGraphicsDeviceKHR = nullptr;\n  XR_CHECK(xrGetInstanceProcAddr(instance,\n                                 \"xrGetVulkanGraphicsDeviceKHR\",\n                                 (PFN_xrVoidFunction*)(&pfnGetVulkanGraphicsDeviceKHR)));\n\n  const std::vector<HWDeviceDesc> devices =\n      vulkan::HWDevice::queryDevices(*context, HWDeviceQueryDesc(HWDeviceType::Unknown), nullptr);\n  if (devices.empty()) {\n    IGL_LOG_ERROR(\"IGL: Failed to find a suitable Vulkan hardware device.\\n\");\n    return nullptr;\n  }\n\n  // Let OpenXR find a suitable Vulkan physical device.\n  VkPhysicalDevice physicalDevice = VK_NULL_HANDLE;\n  XR_CHECK(\n      pfnGetVulkanGraphicsDeviceKHR(instance, systemId, context->getVkInstance(), &physicalDevice));\n  if (physicalDevice == VK_NULL_HANDLE) {\n    IGL_LOG_ERROR(\"OpenXR: Failed to get vulkan physical device.\\n\");\n    return nullptr;\n  }\n\n  HWDeviceDesc hwDevice(0, HWDeviceType::Unknown);\n  for (const auto& device : devices) {\n    if (device.guid == reinterpret_cast<uintptr_t>(physicalDevice)) {\n      hwDevice = device;\n      IGL_LOG_INFO(\"IGL: Selected hardware device: %s\", device.name.c_str());\n      break;\n    }\n  }\n\n  auto device = igl::vulkan::HWDevice::create(std::move(context),\n                                              hwDevice,\n                                              0,\n                                              0,\n                                              requiredVkDeviceExtensions_.size(),\n                                              requiredVkDeviceExtensions_.data(),\n                                              nullptr,\n                                              \"IGL Shell OpenXR\",\n                                              nullptr);\n  return device;\n}\n\nXrSession XrAppImplVulkan::initXrSession(XrInstance instance,\n                                         XrSystemId systemId,\n                                         IDevice& device,\n                                         const RenderSessionConfig& sessionConfig) {\n  IGL_DEBUG_ASSERT(sessionConfig.backendVersion.flavor == igl::BackendFlavor::Vulkan);\n  sessionConfig_ = sessionConfig;\n  const auto& vkDevice = static_cast<igl::vulkan::Device&>(device); // Downcast is safe here\n\n  // Bind Vulkan to XR session\n  XrGraphicsBindingVulkanKHR graphicsBinding = {\n      XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR,\n      nullptr,\n      vkDevice.getVulkanContext().getVkInstance(),\n      vkDevice.getVulkanContext().getVkPhysicalDevice(),\n      vkDevice.getVulkanContext().getVkDevice(),\n      vkDevice.getVulkanContext().deviceQueues_.graphicsQueueFamilyIndex,\n      0,\n  };\n\n  const XrSessionCreateInfo sessionCreateInfo = {\n      .type = XR_TYPE_SESSION_CREATE_INFO,\n      .next = &graphicsBinding,\n      .createFlags = 0,\n      .systemId = systemId,\n  };\n\n  XrSession session = nullptr;\n  const XrResult xrResult = xrCreateSession(instance, &sessionCreateInfo, &session);\n\n  XR_CHECK(xrResult);\n  if (xrResult != XR_SUCCESS) {\n    IGL_LOG_ERROR(\"Failed to create XR session: %d\\n\", xrResult);\n    return XR_NULL_HANDLE;\n  }\n  IGL_LOG_INFO(\"XR session created.\\n\");\n\n  return session;\n} // namespace igl::shell::openxr::mobile\n\nstd::unique_ptr<impl::XrSwapchainProviderImpl> XrAppImplVulkan::createSwapchainProviderImpl()\n    const {\n  return std::make_unique<XrSwapchainProviderImplVulkan>(\n      sessionConfig_.swapchainColorTextureFormat);\n}\n\nstd::vector<const char*> XrAppImplVulkan::processExtensionsBuffer(std::vector<char>& buffer) {\n  std::vector<const char*> extensions;\n  auto skip = false;\n  for (auto& ch : buffer) {\n    if (skip) {\n      if (ch == ' ') {\n        ch = '\\0';\n        skip = false;\n      } else if (ch == '\\0') {\n        break;\n      }\n    } else {\n      extensions.push_back(&ch);\n      skip = true;\n    }\n  }\n\n  return extensions;\n}\n} // namespace igl::shell::openxr::mobile\n"
  },
  {
    "path": "shell/openxr/mobile/vulkan/XrAppImplVulkan.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/openxr/XrPlatform.h>\n#include <shell/openxr/impl/XrAppImpl.h>\n#include <vector>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n\nnamespace igl::shell::openxr::mobile {\n\nclass XrAppImplVulkan : public impl::XrAppImpl {\n public:\n  [[nodiscard]] RenderSessionConfig suggestedSessionConfig() const override;\n  [[nodiscard]] std::vector<const char*> getXrRequiredExtensions() const override;\n  [[nodiscard]] std::vector<const char*> getXrOptionalExtensions() const override;\n\n  [[nodiscard]] std::unique_ptr<IDevice> initIGL(XrInstance instance, XrSystemId systemId) override;\n  [[nodiscard]] XrSession initXrSession(XrInstance instance,\n                                        XrSystemId systemId,\n                                        IDevice& device,\n                                        const RenderSessionConfig& sessionConfig) override;\n  [[nodiscard]] std::unique_ptr<impl::XrSwapchainProviderImpl> createSwapchainProviderImpl()\n      const override;\n\n private:\n  std::vector<const char*> processExtensionsBuffer(std::vector<char>& buffer);\n\n  XrGraphicsRequirementsVulkanKHR graphicsRequirements_ = {\n      .type = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR,\n  };\n\n  std::vector<const char*> requiredVkInstanceExtensions_;\n  std::vector<char> requiredVkInstanceExtensionsBuffer_;\n\n  std::vector<const char*> requiredVkDeviceExtensions_;\n  std::vector<char> requiredVkDeviceExtensionsBuffer_;\n  RenderSessionConfig sessionConfig_;\n};\n} // namespace igl::shell::openxr::mobile\n"
  },
  {
    "path": "shell/openxr/mobile/vulkan/XrSwapchainProviderImplVulkan.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/openxr/mobile/vulkan/XrSwapchainProviderImplVulkan.h>\n\n#include <fmt/core.h>\n#include <shell/openxr/XrLog.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanImageView.h>\n\nnamespace igl::shell::openxr::mobile {\nnamespace {\nvoid enumerateSwapchainImages(\n    IDevice& device,\n    XrSwapchain swapchain,\n    VkFormat format,\n    const impl::SwapchainImageInfo& swapchainImageInfo,\n    uint8_t numViews,\n    VkImageUsageFlags usageFlags,\n    VkImageAspectFlags aspectMask,\n    std::vector<std::shared_ptr<igl::vulkan::VulkanTexture>>& outVulkanTextures) {\n  uint32_t numImages = 0;\n  XR_CHECK(xrEnumerateSwapchainImages(swapchain, 0, &numImages, nullptr));\n\n  IGL_LOG_INFO(\"XRSwapchain numImages: %d\\n\", numImages);\n\n  std::vector<XrSwapchainImageVulkanKHR> images(\n      numImages, {.type = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, .next = nullptr});\n  XR_CHECK(xrEnumerateSwapchainImages(\n      swapchain, numImages, &numImages, (XrSwapchainImageBaseHeader*)images.data()));\n\n  const auto& actualDevice = static_cast<igl::vulkan::Device&>(device);\n  const auto& ctx = actualDevice.getVulkanContext();\n  outVulkanTextures.reserve(numImages);\n\n  const bool isDepth = ((aspectMask & VK_IMAGE_ASPECT_DEPTH_BIT) != 0);\n\n  for (uint32_t i = 0; i < numImages; ++i) {\n    auto image = igl::vulkan::VulkanImage(\n        ctx,\n        images[i].image,\n        fmt::format(\"Image: swapchain {} #{}\", isDepth ? \"depth\" : \"color\", i).c_str(),\n        usageFlags,\n        true,\n        VkExtent3D{swapchainImageInfo.imageWidth, swapchainImageInfo.imageHeight, 0},\n        VK_IMAGE_TYPE_2D,\n        format,\n        1,\n        numViews);\n\n    auto imageView = image.createImageView(\n        numViews > 1 ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D,\n        format,\n        aspectMask,\n        0,\n        VK_REMAINING_MIP_LEVELS,\n        0,\n        numViews,\n        fmt::format(\"Image View: swapchain {} #{}\", isDepth ? \"depth\" : \"color\", i).c_str());\n    outVulkanTextures.emplace_back(\n        std::make_shared<igl::vulkan::VulkanTexture>(std::move(image), std::move(imageView)));\n  }\n}\n\nstd::shared_ptr<ITexture> getSurfaceTexture(\n    IDevice& device,\n    const XrSwapchain& swapchain,\n    const impl::SwapchainImageInfo& swapchainImageInfo,\n    uint8_t numViews,\n    const std::vector<std::shared_ptr<igl::vulkan::VulkanTexture>>& vulkanTextures,\n    VkFormat externalTextureFormat,\n    std::vector<std::shared_ptr<ITexture>>& inOutTextures) {\n  uint32_t imageIndex = 0;\n  const XrSwapchainImageAcquireInfo acquireInfo{XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO};\n  XR_CHECK(xrAcquireSwapchainImage(swapchain, &acquireInfo, &imageIndex));\n\n  XrSwapchainImageWaitInfo waitInfo{XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO};\n  waitInfo.timeout = XR_INFINITE_DURATION;\n  XR_CHECK(xrWaitSwapchainImage(swapchain, &waitInfo));\n\n  auto vulkanTexture = vulkanTextures[imageIndex];\n\n  if (imageIndex >= inOutTextures.size()) {\n    inOutTextures.resize((size_t)imageIndex + 1, nullptr);\n  }\n\n  auto& actualDevice = static_cast<igl::vulkan::Device&>(device);\n  const auto iglFormat = vulkan::vkFormatToTextureFormat(externalTextureFormat);\n  const auto texture = inOutTextures[imageIndex];\n  // allocate new drawable textures if its null or mismatches in size or format\n  if (!texture || swapchainImageInfo.imageWidth != texture->getSize().width ||\n      swapchainImageInfo.imageHeight != texture->getSize().height ||\n      iglFormat != texture->getProperties().format) {\n    TextureDesc textureDesc;\n    if (numViews > 1) {\n      textureDesc = TextureDesc::new2DArray(iglFormat,\n                                            swapchainImageInfo.imageWidth,\n                                            swapchainImageInfo.imageHeight,\n                                            numViews,\n                                            TextureDesc::TextureUsageBits::Attachment,\n                                            \"SwapChain Texture\");\n    } else {\n      textureDesc = TextureDesc::new2D(iglFormat,\n                                       swapchainImageInfo.imageWidth,\n                                       swapchainImageInfo.imageHeight,\n                                       TextureDesc::TextureUsageBits::Attachment,\n                                       \"SwapChain Texture\");\n    }\n\n    inOutTextures[imageIndex] =\n        std::make_shared<igl::vulkan::Texture>(actualDevice, vulkanTexture, textureDesc);\n  }\n\n  return inOutTextures[imageIndex];\n}\n} // namespace\n\nXrSwapchainProviderImplVulkan::XrSwapchainProviderImplVulkan(TextureFormat preferredColorFormat) {\n  preferredColorFormat_ = vulkan::textureFormatToVkFormat(preferredColorFormat);\n}\n\nvoid XrSwapchainProviderImplVulkan::enumerateImages(\n    IDevice& device,\n    XrSwapchain colorSwapchain,\n    XrSwapchain depthSwapchain,\n    const impl::SwapchainImageInfo& swapchainImageInfo,\n    uint8_t numViews) noexcept { // NOLINT(bugprone-exception-escape)\n  enumerateSwapchainImages(device,\n                           colorSwapchain,\n                           static_cast<VkFormat>(swapchainImageInfo.colorFormat),\n                           swapchainImageInfo,\n                           numViews,\n                           VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,\n                           VK_IMAGE_ASPECT_COLOR_BIT,\n                           vulkanColorTextures_);\n\n  auto vkDepthFormat = static_cast<VkFormat>(swapchainImageInfo.depthFormat);\n  VkImageAspectFlags depthAspectFlags = 0;\n  if (igl::vulkan::hasDepth(vkDepthFormat)) {\n    depthAspectFlags |= VK_IMAGE_ASPECT_DEPTH_BIT;\n  }\n  if (igl::vulkan::hasStencil(vkDepthFormat)) {\n    depthAspectFlags |= VK_IMAGE_ASPECT_STENCIL_BIT;\n  }\n  enumerateSwapchainImages(device,\n                           depthSwapchain,\n                           vkDepthFormat,\n                           swapchainImageInfo,\n                           numViews,\n                           VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,\n                           depthAspectFlags,\n                           vulkanDepthTextures_);\n}\n\nSurfaceTextures XrSwapchainProviderImplVulkan::getSurfaceTextures(\n    IDevice& device,\n    XrSwapchain colorSwapchain,\n    XrSwapchain depthSwapchain,\n    const impl::SwapchainImageInfo& swapchainImageInfo,\n    uint8_t numViews) noexcept { // NOLINT(bugprone-exception-escape)\n  auto colorTexture = getSurfaceTexture(device,\n                                        colorSwapchain,\n                                        swapchainImageInfo,\n                                        numViews,\n                                        vulkanColorTextures_,\n                                        static_cast<VkFormat>(swapchainImageInfo.colorFormat),\n                                        colorTextures_);\n  auto depthTexture = getSurfaceTexture(device,\n                                        depthSwapchain,\n                                        swapchainImageInfo,\n                                        numViews,\n                                        vulkanDepthTextures_,\n                                        static_cast<VkFormat>(swapchainImageInfo.depthFormat),\n                                        depthTextures_);\n\n  return {.color = colorTexture, .depth = depthTexture};\n}\n} // namespace igl::shell::openxr::mobile\n"
  },
  {
    "path": "shell/openxr/mobile/vulkan/XrSwapchainProviderImplVulkan.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/openxr/XrPlatform.h>\n#include <shell/openxr/impl/XrSwapchainProviderImpl.h>\n#include <igl/vulkan/VulkanTexture.h>\n\nnamespace igl::shell::openxr::mobile {\nclass XrSwapchainProviderImplVulkan final : public impl::XrSwapchainProviderImpl {\n public:\n  explicit XrSwapchainProviderImplVulkan(TextureFormat preferredColorFormat);\n\n  // NOLINTNEXTLINE(bugprone-exception-escape)\n  [[nodiscard]] std::vector<int64_t> preferredColorFormats() const noexcept final {\n    return {preferredColorFormat_};\n  }\n  // NOLINTNEXTLINE(bugprone-exception-escape)\n  [[nodiscard]] std::vector<int64_t> preferredDepthFormats() const noexcept final {\n    return {VK_FORMAT_D16_UNORM, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT_S8_UINT};\n  }\n\n  void enumerateImages(IDevice& device,\n                       XrSwapchain colorSwapchain,\n                       XrSwapchain depthSwapchain,\n                       const impl::SwapchainImageInfo& swapchainImageInfo,\n                       uint8_t numViews) noexcept final;\n\n  [[nodiscard]] SurfaceTextures getSurfaceTextures(\n      IDevice& device,\n      XrSwapchain colorSwapchain,\n      XrSwapchain depthSwapchain,\n      const impl::SwapchainImageInfo& swapchainImageInfo,\n      uint8_t numViews) noexcept final;\n\n private:\n  int64_t preferredColorFormat_;\n  std::vector<std::shared_ptr<igl::vulkan::VulkanTexture>> vulkanColorTextures_;\n  std::vector<std::shared_ptr<igl::vulkan::VulkanTexture>> vulkanDepthTextures_;\n};\n} // namespace igl::shell::openxr::mobile\n"
  },
  {
    "path": "shell/renderSessionTests/BasicFramebufferTests.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/renderSessions/BasicFramebufferSession.h>\n#include <shell/shared/testShell/TestShell.h>\n\nclass BasicFrameBufferTests : public igl::shell::TestShell {};\n\nTEST_F(BasicFrameBufferTests, BasicFramebufferSession) {\n  igl::shell::BasicFramebufferSession test(platform_);\n  run(test, 1);\n}\n"
  },
  {
    "path": "shell/renderSessionTests/IGLSampleTests.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/renderSessions/ColorSession.h>\n#include <shell/renderSessions/ComputeSession.h>\n#include <shell/renderSessions/EmptySession.h>\n#include <shell/renderSessions/GraphSampleSession.h>\n#include <shell/renderSessions/MRTSession.h>\n#include <shell/renderSessions/MSAASession.h>\n#include <shell/renderSessions/ResourceTrackerSession.h>\n#include <shell/renderSessions/ShaderCompilationTestSession.h>\n#include <shell/renderSessions/TQMultiRenderPassSession.h>\n#include <shell/renderSessions/TQSession.h>\n#include <shell/renderSessions/TextureAccessorSession.h>\n#include <shell/renderSessions/TextureRotationSession.h>\n#include <shell/renderSessions/Textured3DCubeSession.h>\n#include <shell/renderSessions/UniformArrayTestSession.h>\n#include <shell/renderSessions/UniformPackedTestSession.h>\n#include <shell/renderSessions/UniformTestSession.h>\n#include <shell/shared/testShell/TestShell.h>\n\nclass IGLSampleTests : public igl::shell::TestShell {};\n\nTEST_F(IGLSampleTests, ColorSession) {\n  igl::shell::ColorSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, EmptySession) {\n  igl::shell::EmptySession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, GraphSampleSession) {\n  igl::shell::GraphSampleSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, MSAASession) {\n  igl::shell::MSAASession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, TextureAccessorSession) {\n  igl::shell::TextureAccessorSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, TextureRotationSession) {\n  igl::shell::TextureRotationSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, Textured3DCubeSession) {\n  igl::shell::Textured3DCubeSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, TQSession) {\n  igl::shell::TQSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, ComputeSession) {\n  igl::shell::ComputeSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, MRTSession) {\n  igl::shell::MRTSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, TQMultiRenderPassSession) {\n  igl::shell::TQMultiRenderPassSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, UniformTestSession) {\n  igl::shell::UniformTestSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, UniformPackedTestSession) {\n  igl::shell::UniformPackedTestSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, UniformArrayTestSession) {\n  igl::shell::UniformArrayTestSession test(platform_);\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, ResourceTrackerSession) {\n#if IGL_PLATFORM_ANDROID\n  constexpr size_t kNumBytesDefaultImage = 256;\n  igl::shell::ResourceTrackerSession test(platform_, kNumBytesDefaultImage);\n#else\n  igl::shell::ResourceTrackerSession test(platform_);\n#endif\n  run(test, 1);\n}\n\nTEST_F(IGLSampleTests, ShaderCompilationTestSession) {\n  igl::shell::ShaderCompilationTestSession test(platform_);\n  run(test, 1);\n}\n"
  },
  {
    "path": "shell/renderSessions/BasicFramebufferSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/BasicFramebufferSession.h>\n\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/Common.h>\n\nnamespace igl::shell {\n\nvoid BasicFramebufferSession::initialize() noexcept {\n  // Create commandQueue\n  commandQueue_ = getPlatform().getDevice().createCommandQueue({}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_ = {\n      .colorAttachments = {{\n          .loadAction = igl::LoadAction::Clear,\n          .storeAction = igl::StoreAction::Store,\n          .clearColor = getPreferredClearColor(),\n      }},\n  };\n}\n\nvoid BasicFramebufferSession::update(SurfaceTextures surfaceTextures) noexcept {\n  // Create/update framebuffer\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        {\n            .colorAttachments = {{.texture = surfaceTextures.color}},\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures.color);\n  }\n\n  // Create/submit command buffer\n  const auto buffer = commandQueue_->createCommandBuffer({}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  const auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  commands->endEncoding();\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(framebuffer_->getColorAttachment(0));\n  }\n  commandQueue_->submit(*buffer);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/BasicFramebufferSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <memory>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass BasicFramebufferSession : public RenderSession {\n public:\n  explicit BasicFramebufferSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  RenderPassDesc renderPass_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/BindGroupSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/BindGroupSession.h>\n\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <cstddef>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/platform/DisplayContext.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/ShaderCreator.h>\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/Version.h>\n#endif\n\nnamespace {\nstruct VertexPosUvw {\n  glm::vec3 position;\n  glm::vec3 color;\n  glm::vec2 uv;\n};\n\nconst float kHalf = 1.0f;\n\n// UV-mapped cube with indices: 24 vertices, 36 indices\nconst VertexPosUvw kVertexData0[] = {\n    // top\n    {.position = {-kHalf, -kHalf, +kHalf}, .color = {0.5, 0.5, 1.0}, .uv = {0, 0}}, // 0\n    {.position = {+kHalf, -kHalf, +kHalf}, .color = {1.0, 0.0, 1.0}, .uv = {1, 0}}, // 1\n    {.position = {+kHalf, +kHalf, +kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 2\n    {.position = {-kHalf, +kHalf, +kHalf}, .color = {0.5, 1.0, 1.0}, .uv = {0, 1}}, // 3\n    // bottom\n    {.position = {-kHalf, -kHalf, -kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 4\n    {.position = {-kHalf, +kHalf, -kHalf}, .color = {0.5, 1.0, 0.5}, .uv = {0, 1}}, // 5\n    {.position = {+kHalf, +kHalf, -kHalf}, .color = {1.0, 1.0, 0.5}, .uv = {1, 1}}, // 6\n    {.position = {+kHalf, -kHalf, -kHalf}, .color = {1.0, 0.5, 0.5}, .uv = {1, 0}}, // 7\n    // left\n    {.position = {+kHalf, +kHalf, -kHalf}, .color = {1.0, 1.0, 0.5}, .uv = {1, 0}}, // 8\n    {.position = {-kHalf, +kHalf, -kHalf}, .color = {0.5, 1.0, 0.5}, .uv = {0, 0}}, // 9\n    {.position = {-kHalf, +kHalf, +kHalf}, .color = {0.5, 1.0, 1.0}, .uv = {0, 1}}, // 10\n    {.position = {+kHalf, +kHalf, +kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 11\n    // right\n    {.position = {-kHalf, -kHalf, -kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 12\n    {.position = {+kHalf, -kHalf, -kHalf}, .color = {1.0, 0.5, 0.5}, .uv = {1, 0}}, // 13\n    {.position = {+kHalf, -kHalf, +kHalf}, .color = {1.0, 0.5, 1.0}, .uv = {1, 1}}, // 14\n    {.position = {-kHalf, -kHalf, +kHalf}, .color = {0.5, 0.5, 1.0}, .uv = {0, 1}}, // 15\n    // front\n    {.position = {+kHalf, -kHalf, -kHalf}, .color = {1.0, 0.5, 0.5}, .uv = {0, 0}}, // 16\n    {.position = {+kHalf, +kHalf, -kHalf}, .color = {1.0, 1.0, 0.5}, .uv = {1, 0}}, // 17\n    {.position = {+kHalf, +kHalf, +kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 18\n    {.position = {+kHalf, -kHalf, +kHalf}, .color = {1.0, 0.5, 1.0}, .uv = {0, 1}}, // 19\n    // back\n    {.position = {-kHalf, +kHalf, -kHalf}, .color = {0.5, 1.0, 0.5}, .uv = {1, 0}}, // 20\n    {.position = {-kHalf, -kHalf, -kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 21\n    {.position = {-kHalf, -kHalf, +kHalf}, .color = {0.5, 0.5, 1.0}, .uv = {0, 1}}, // 22\n    {.position = {-kHalf, +kHalf, +kHalf}, .color = {0.5, 1.0, 1.0}, .uv = {1, 1}}, // 23\n};\n\nconst uint16_t kIndexData[] = {0,  1,  2,  2,  3,  0,  4,  5,  6,  6,  7,  4,\n                               8,  9,  10, 10, 11, 8,  12, 13, 14, 14, 15, 12,\n                               16, 17, 18, 18, 19, 16, 20, 21, 22, 22, 23, 20};\n\nstd::string getProlog(igl::IDevice& device) {\n#if IGL_BACKEND_OPENGL\n  const auto shaderVersion = device.getShaderVersion();\n  if (shaderVersion.majorVersion >= 3 || shaderVersion.minorVersion >= 30) {\n    std::string prependVersionString = igl::opengl::getStringFromShaderVersion(shaderVersion);\n    prependVersionString += \"\\nprecision highp float;\\n\";\n    return prependVersionString;\n  }\n#else\n  (void)device; // Suppress unused parameter warning\n#endif // IGL_BACKEND_OPENGL\n  return \"\";\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n          #include <metal_stdlib>\n          #include <simd/simd.h>\n          using namespace metal;\n\n          struct VertexUniformBlock {\n            float4x4 mvpMatrix;\n          };\n\n          struct VertexIn {\n            float3 position [[attribute(0)]];\n            float2 uv [[attribute(1)]];\n            float3 color [[attribute(2)]];\n          };\n\n          struct VertexOut {\n            float4 position [[position]];\n            float2 uv;\n            float4 color;\n          };\n\n          vertex VertexOut vertexShader(VertexIn in [[stage_in]],\n                 constant VertexUniformBlock &vUniform[[buffer(1)]]) {\n            VertexOut out;\n            out.position = vUniform.mvpMatrix * float4(in.position, 1.0);\n            out.uv = in.uv;\n            out.color = float4(in.color, 1.0);\n            return out;\n           }\n\n           fragment float4 fragmentShader(\n                 VertexOut in[[stage_in]],\n                 texture2d<float> tex0 [[texture(0)]],\n                 texture2d<float> tex1 [[texture(1)]],\n                 sampler linearSampler [[sampler(0)]]) {\n             constexpr sampler s(s_address::clamp_to_edge,\n                                 t_address::clamp_to_edge,\n                                 min_filter::linear,\n                                 mag_filter::linear);\n             return tex0.sample(s, in.uv) * tex1.sample(s, in.uv) * in.color;\n           }\n        )\";\n}\n\nstd::string getOpenGLFragmentShaderSource(igl::IDevice& device) {\n  return getProlog(device) + std::string(R\"(\n                      precision highp float; precision highp sampler2D;\n                      in vec2 uv;\n                      in vec4 color;\n                      uniform sampler2D input2D;\n                      uniform sampler2D inputXOR;\n                      out vec4 fragmentColor;\n                      void main() {\n                        fragmentColor = texture(input2D, uv) * texture(inputXOR, uv) * color;\n                      })\");\n}\n\nstd::string getOpenGLVertexShaderSource(igl::IDevice& device) {\n  return getProlog(device) + R\"(\n                      precision highp float;\n                      uniform mat4 mvpMatrix;\n                      in vec3 position;\n                      in vec2 uv_in;\n                      in vec3 color_in;\n                      out vec2 uv;\n                      out vec4 color;\n\n                      void main() {\n                        gl_Position =  mvpMatrix * vec4(position, 1.0);\n                        uv = uv_in;\n                        color = vec4(color_in, 1.0);\n                      })\";\n}\n\nconst char* getVulkanFragmentShaderSource() {\n  return R\"(\n                      precision highp float;\n                      layout(location = 0) in vec2 uv;\n                      layout(location = 1) in vec4 color;\n                      layout(location = 0) out vec4 out_FragColor;\n\n                      layout(set = 0, binding = 0) uniform sampler2D in_texture0;\n                      layout(set = 0, binding = 1) uniform sampler2D in_texture1;\n\n                      void main() {\n                        out_FragColor = texture(in_texture0, uv) * texture(in_texture1, uv) * color;\n                      })\";\n}\n\nconst char* getVulkanVertexShaderSource() {\n  return R\"(\n                      precision highp float;\n\n                      layout (set = 1, binding = 1, std140) uniform PerFrame {\n                        mat4 mvpMatrix;\n                      } perFrame;\n\n                      layout(location = 0) in vec3 position;\n                      layout(location = 1) in vec2 uvw_in;\n                      layout(location = 2) in vec3 color_in;\n                      layout(location = 0) out vec2 uvw;\n                      layout(location = 1) out vec4 color;\n\n                      void main() {\n                        gl_Position =  perFrame.mvpMatrix * vec4(position, 1.0);\n                        uvw = uvw_in;\n                        color = vec4(color_in, 1.0);\n                      })\";\n}\n\nstd::unique_ptr<igl::IShaderStages> getShaderStagesForBackend(igl::IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n    return nullptr;\n  case igl::BackendType::D3D12: {\n    // D3D12 HLSL shaders using register bindings\n    static const char* kVS = R\"(\n      cbuffer PerFrame : register(b1) {\n        float4x4 mvpMatrix;\n      };\n\n      struct VSInput {\n        float3 position : POSITION;\n        float2 uvw : TEXCOORD0;\n        float3 color_in : COLOR0;\n      };\n\n      struct VSOutput {\n        float4 position : SV_POSITION;\n        float2 uv : TEXCOORD0;\n        float4 color : COLOR0;\n      };\n\n      VSOutput main(VSInput input) {\n        VSOutput output;\n        output.position = mul(mvpMatrix, float4(input.position, 1.0));\n        output.uv = input.uvw;\n        output.color = float4(input.color_in, 1.0);\n        return output;\n      }\n    )\";\n\n    static const char* kPS = R\"(\n      Texture2D in_texture0 : register(t0);\n      Texture2D in_texture1 : register(t1);\n      SamplerState sampler0 : register(s0);\n      SamplerState sampler1 : register(s1);\n\n      struct PSInput {\n        float4 position : SV_POSITION;\n        float2 uv : TEXCOORD0;\n        float4 color : COLOR0;\n      };\n\n      float4 main(PSInput input) : SV_Target {\n        float4 tex0 = in_texture0.Sample(sampler0, input.uv);\n        float4 tex1 = in_texture1.Sample(sampler1, input.uv);\n        return tex0 * tex1 * input.color;\n      }\n    )\";\n\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ABORT(\"IGLSamples not set up for Custom\");\n    return nullptr;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getOpenGLVertexShaderSource(device).c_str(),\n        \"main\",\n        \"\",\n        getOpenGLFragmentShaderSource(device).c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n} // namespace\n\nnamespace igl::shell {\n\nvoid BindGroupSession::createSamplerAndTextures(const igl::IDevice& device) {\n  // Sampler & Texture\n  auto sampler = device.createSamplerState(SamplerStateDesc::newLinearMipmapped(), nullptr);\n\n  std::shared_ptr<ITexture> tex0, tex1;\n\n  {\n    auto imageData = getPlatform().getImageLoader().loadImageData(\"igl.png\");\n    TextureDesc desc = igl::TextureDesc::new2D(igl::TextureFormat::RGBA_UNorm8,\n                                               imageData.desc.width,\n                                               imageData.desc.height,\n                                               igl::TextureDesc::TextureUsageBits::Sampled |\n                                                   igl::TextureDesc::TextureUsageBits::Attachment,\n                                               \"igl.png\");\n    desc.numMipLevels = TextureDesc::calcNumMipLevels(imageData.desc.width, imageData.desc.height);\n    tex0 = device.createTexture(desc, nullptr);\n    tex0->upload(tex0->getFullRange(), imageData.data->data());\n    tex0->generateMipmap(*commandQueue_);\n  }\n\n  {\n    const uint32_t texWidth = 256;\n    const uint32_t texHeight = 256;\n    TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::BGRA_UNorm8,\n                                          texWidth,\n                                          texHeight,\n                                          TextureDesc::TextureUsageBits::Sampled |\n                                              TextureDesc::TextureUsageBits::Attachment,\n                                          \"XOR pattern\");\n    desc.numMipLevels = TextureDesc::calcNumMipLevels(texWidth, texHeight);\n    tex1 = getPlatform().getDevice().createTexture(desc, nullptr);\n    std::vector<uint32_t> pixels(static_cast<size_t>(texWidth * texHeight));\n    for (uint32_t y = 0; y != texHeight; y++) {\n      for (uint32_t x = 0; x != texWidth; x++) {\n        // create a XOR pattern\n        pixels[y * texWidth + x] = 0xFF000000 + ((x ^ y) << 16) + ((x ^ y) << 8) + (x ^ y);\n      }\n    }\n    tex1->upload(TextureRangeDesc::new2D(0, 0, texWidth, texHeight), pixels.data());\n    tex1->generateMipmap(*commandQueue_);\n  }\n\n  bindGroupTextures_ = getPlatform().getDevice().createBindGroup(BindGroupTextureDesc{\n      .textures = {tex0, tex1},\n      .samplers = {sampler, sampler},\n      .debugName = \"bindGroupTextures_\",\n  });\n}\n\nBindGroupSession::BindGroupSession(std::shared_ptr<Platform> platform) :\n  RenderSession(std::move(platform)) {\n  imguiSession_ = std::make_unique<iglu::imgui::Session>(getPlatform().getDevice(),\n                                                         getPlatform().getInputDispatcher());\n}\n\nvoid BindGroupSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex buffer, Index buffer and Vertex Input\n  vb0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                        .data = kVertexData0,\n                                        .length = sizeof(kVertexData0)},\n                             nullptr);\n  ib0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                        .data = kIndexData,\n                                        .length = sizeof(kIndexData)},\n                             nullptr);\n\n  const VertexInputStateDesc inputDesc = {\n      .numAttributes = 3,\n      .attributes = {{.bufferIndex = 0,\n                      .format = VertexAttributeFormat::Float3,\n                      .offset = offsetof(VertexPosUvw, position),\n                      .name = \"position\",\n                      .location = 0},\n                     {.bufferIndex = 0,\n                      .format = VertexAttributeFormat::Float2,\n                      .offset = offsetof(VertexPosUvw, uv),\n                      .name = \"uv_in\",\n                      .location = 1},\n                     {.bufferIndex = 0,\n                      .format = VertexAttributeFormat::Float3,\n                      .offset = offsetof(VertexPosUvw, color),\n                      .name = \"color_in\",\n                      .location = 2}},\n      .numInputBindings = 1,\n      .inputBindings = {{.stride = sizeof(VertexPosUvw)}},\n  };\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n\n  createSamplerAndTextures(device);\n  shaderStages_ = getShaderStagesForBackend(device);\n\n  // Command queue: backed by different types of GPU HW queues\n  commandQueue_ = device.createCommandQueue({}, nullptr);\n\n  renderPass_ = {\n      .colorAttachments = {{\n          .loadAction = LoadAction::Clear,\n          .storeAction = StoreAction::Store,\n          .clearColor = getPreferredClearColor(),\n      }},\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .storeAction = StoreAction::DontCare,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid BindGroupSession::update(SurfaceTextures surfaceTextures) noexcept {\n  auto& device = getPlatform().getDevice();\n\n  const float deltaSeconds = getDeltaSeconds();\n\n  fps_.updateFPS(deltaSeconds);\n\n  // cube animation\n  const glm::mat4 projectionMat = glm::perspectiveLH(\n      glm::radians(45.0f), surfaceTextures.color->getAspectRatio(), 0.1f, 100.0f);\n  angle_ += 180.0f * deltaSeconds;\n  vertexParameters_.mvpMatrix =\n      projectionMat * glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.f, 8.0f)) *\n      glm::rotate(glm::mat4(1.0f), -0.2f, glm::vec3(1.0f, 0.0f, 0.0f)) *\n      glm::rotate(glm::mat4(1.0f), glm::radians(angle_), glm::vec3(0.0f, 1.0f, 0.0f));\n\n  Result ret;\n  if (framebuffer_ == nullptr) {\n    framebufferDesc_.colorAttachments[0].texture = surfaceTextures.color;\n    framebufferDesc_.depthAttachment.texture = surfaceTextures.depth;\n    framebuffer_ = device.createFramebuffer(framebufferDesc_, &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures.color);\n  }\n\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = device.createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInput0_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{\n                        .textureFormat =\n                            framebuffer_->getColorAttachment(0)->getProperties().format,\n                    }},\n                    .depthAttachmentFormat =\n                        framebuffer_->getDepthAttachment()->getProperties().format,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n            .fragmentUnitSamplerMap = {{0, IGL_NAMEHANDLE(\"input2D\")},\n                                       {1, IGL_NAMEHANDLE(\"inputXOR\")}},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n  }\n\n  const auto buffer = commandQueue_->createCommandBuffer({}, nullptr);\n\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  const iglu::ManagedUniformBufferInfo info = {\n      .index = 1,\n      .length = sizeof(VertexFormat),\n      .uniforms = {{.name = \"mvpMatrix\",\n                    .type = igl::UniformType::Mat4x4,\n                    .offset = offsetof(VertexFormat, mvpMatrix)}},\n  };\n\n  const std::shared_ptr<iglu::ManagedUniformBuffer> vertUniformBuffer =\n      std::make_shared<iglu::ManagedUniformBuffer>(device, info);\n  IGL_DEBUG_ASSERT(vertUniformBuffer->result.isOk());\n  *static_cast<VertexFormat*>(vertUniformBuffer->getData()) = vertexParameters_;\n  vertUniformBuffer->bind(device, *pipelineState_, *commands);\n  commands->bindBindGroup(bindGroupTextures_);\n  commands->bindRenderPipelineState(pipelineState_);\n  commands->bindVertexBuffer(0, *vb0_);\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n  commands->drawIndexed(static_cast<size_t>(3u * 6u * 2u));\n\n  imguiSession_->beginFrame(framebufferDesc_, getPlatform().getDisplayContext().pixelsPerPoint);\n  imguiSession_->drawFPS(fps_.getAverageFPS());\n  imguiSession_->endFrame(device, *commands);\n\n  commands->endEncoding();\n\n  if (shellParams().shouldPresent) {\n    buffer->present(framebuffer_->getColorAttachment(0));\n  }\n\n  commandQueue_->submit(*buffer);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/BindGroupSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/imgui/Session.h>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/FPSCounter.h>\n#include <igl/RenderPass.h>\n\nnamespace igl::shell {\n\nstruct VertexFormat {\n  glm::mat4 mvpMatrix;\n};\n\nclass BindGroupSession : public RenderSession {\n public:\n  explicit BindGroupSession(std::shared_ptr<Platform> platform);\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  RenderPassDesc renderPass_;\n  FramebufferDesc framebufferDesc_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb0_, ib0_; // Buffers for vertices and indices (or constants)\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  Holder<BindGroupTextureHandle> bindGroupTextures_;\n  std::unique_ptr<iglu::imgui::Session> imguiSession_;\n\n  VertexFormat vertexParameters_;\n  FPSCounter fps_;\n  float angle_ = 0;\n\n  void createSamplerAndTextures(const IDevice& /*device*/);\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/BindlessBufferSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/BindlessBufferSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\n\nstruct VertexPosColor {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float4 color;\n};\n\n// A simple colored triangle, same as HelloWorldSession.\nVertexPosColor vertexData[] = {\n    {.position = {-0.6f, -0.4f, 0.0}, .color = {1.0, 0.0, 0.0, 1.0}},\n    {.position = {0.6f, -0.4f, 0.0}, .color = {0.0, 1.0, 0.0, 1.0}},\n    {.position = {0.0f, 0.6f, 0.0}, .color = {0.0, 0.0, 1.0, 1.0}},\n};\n\nuint16_t indexData[] = {\n    0,\n    1,\n    2,\n};\n\n// Push constant data: holds a GPU buffer address (uint64_t) plus padding.\nstruct PushConstantData {\n  uint64_t vertexBufferAddress;\n  uint32_t pad0;\n  uint32_t pad1;\n};\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float4 color;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.color = vertices[vid].color;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return IN.color;\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  vColor = color_in;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_FragColor = vColor;\n                })\");\n}\n\n// Vulkan vertex shader using buffer_reference to access vertex data via a GPU address\n// passed through push constants. This demonstrates bindless buffer access.\nstd::string getVulkanBindlessVertexShaderSource() {\n  return R\"(\n                #version 450\n                #extension GL_EXT_buffer_reference : require\n                #extension GL_EXT_buffer_reference2 : require\n\n                layout(buffer_reference, std430, buffer_reference_align = 4) readonly buffer VertexBuffer {\n                  float data[];\n                };\n\n                layout(push_constant) uniform PushConstants {\n                  VertexBuffer vertexBufferAddress;\n                } pc;\n\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  // Each vertex has 8 floats: 4 for position (float3 padded to float4) + 4 for color\n                  // Note: iglu::simdtypes::float3 is padded to 16 bytes (same as float4)\n                  int base = gl_VertexIndex * 8;\n                  vec3 position = vec3(\n                    pc.vertexBufferAddress.data[base + 0],\n                    pc.vertexBufferAddress.data[base + 1],\n                    pc.vertexBufferAddress.data[base + 2]);\n                  // Skip base+3 (padding)\n                  color = vec4(\n                    pc.vertexBufferAddress.data[base + 4],\n                    pc.vertexBufferAddress.data[base + 5],\n                    pc.vertexBufferAddress.data[base + 6],\n                    pc.vertexBufferAddress.data[base + 7]);\n                  gl_Position = vec4(position, 1.0);\n                }\n                )\";\n}\n\n// Standard Vulkan vertex shader using regular vertex attributes (fallback).\nstd::string getVulkanStandardVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  color = color_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec4 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = color;\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device, bool useBindlessShader) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan: {\n    const auto& vsSource = useBindlessShader ? getVulkanBindlessVertexShaderSource()\n                                             : getVulkanStandardVertexShaderSource();\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           vsSource.c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  }\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; float4 color : COLOR; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); o.color = v.color; return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float4 color : COLOR; };\n      float4 main(PSIn i) : SV_TARGET { return i.color; }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n} // namespace\n\nvoid BindlessBufferSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Check if buffer device address (bindless buffers) is supported.\n  isBindlessSupported_ = device.hasFeature(DeviceFeatures::BufferDeviceAddress) &&\n                         device.getBackendType() == igl::BackendType::Vulkan;\n\n  if (isBindlessSupported_) {\n    IGL_LOG_INFO(\n        \"BindlessBufferSession: Buffer device address is supported. \"\n        \"Using bindless rendering path.\\n\");\n  } else {\n    IGL_LOG_INFO(\n        \"BindlessBufferSession: Buffer device address is NOT supported. \"\n        \"Falling back to standard vertex attribute binding.\\n\");\n  }\n\n  // Create vertex and index buffers.\n  vertexBuffer_ = device.createBuffer(\n      BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex | BufferDesc::BufferTypeBits::Storage,\n                 .data = vertexData,\n                 .length = sizeof(vertexData)},\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexBuffer_ != nullptr);\n\n  indexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                                .data = indexData,\n                                                .length = sizeof(indexData)},\n                                     nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_ != nullptr);\n\n  // When buffer device address is used, vertex data is fetched via buffer_reference\n  // (programmable vertex pulling), so we do not need a vertex input state.\n  // Otherwise, we use the standard vertex input layout.\n  if (!isBindlessSupported_) {\n    vertexInputState_ = device.createVertexInputState(\n        VertexInputStateDesc{\n            .numAttributes = 2,\n            .attributes =\n                {\n                    VertexAttribute{.bufferIndex = 1,\n                                    .format = VertexAttributeFormat::Float3,\n                                    .offset = offsetof(VertexPosColor, position),\n                                    .name = \"position\",\n                                    .location = 0},\n                    VertexAttribute{.bufferIndex = 1,\n                                    .format = VertexAttributeFormat::Float4,\n                                    .offset = offsetof(VertexPosColor, color),\n                                    .name = \"color_in\",\n                                    .location = 1},\n                },\n            .numInputBindings = 1,\n            .inputBindings = {{}, {.stride = sizeof(VertexPosColor)}},\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(vertexInputState_ != nullptr);\n  }\n\n  if (isBindlessSupported_) {\n    // Log the GPU address of the vertex buffer.\n    const uint64_t gpuAddr = vertexBuffer_->gpuAddress(0);\n    IGL_LOG_INFO(\"BindlessBufferSession: Vertex buffer GPU address = 0x%llx\\n\",\n                 (unsigned long long)gpuAddr);\n  }\n\n  shaderStages_ = getShaderStagesForBackend(device, isBindlessSupported_);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid BindlessBufferSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n\n  // Create or update framebuffer.\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // Create graphics pipeline (cached).\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Disabled,\n            .frontFaceWinding = igl::WindingMode::CounterClockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Create command buffer.\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Encode render commands.\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindRenderPipelineState(pipelineState_);\n\n    if (isBindlessSupported_) {\n      // Bindless path: pass the vertex buffer GPU address via push constants.\n      // The shader reads vertex data directly from the buffer address.\n      PushConstantData pc = {};\n      pc.vertexBufferAddress = vertexBuffer_->gpuAddress(0);\n      commands->bindPushConstants(&pc, sizeof(pc), 0);\n      commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n      commands->drawIndexed(3);\n    } else {\n      // Standard path: bind vertex buffer using traditional vertex attributes.\n      commands->bindVertexBuffer(1, *vertexBuffer_);\n      commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n      commands->drawIndexed(3);\n    }\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/BindlessBufferSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass BindlessBufferSession : public RenderSession {\n public:\n  explicit BindlessBufferSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IBuffer> vertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IBuffer> uniformBuffer_;\n  bool isBindlessSupported_ = false;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/BufferMappingSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/BufferMappingSession.h>\n\n#include <cmath>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\nstruct VertexPosColor {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float4 color;\n};\n\nuint16_t indexData[] = {\n    2,\n    1,\n    0,\n};\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float4 color;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.color = vertices[vid].color;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return IN.color;\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  vColor = color_in;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_FragColor = vColor;\n                })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  color = color_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec4 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = color;\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; float4 color : COLOR; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); o.color = v.color; return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float4 color : COLOR; };\n      float4 main(PSIn i) : SV_TARGET { return i.color; }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n} // namespace\n\nvoid BufferMappingSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex buffer: use ResourceStorage::Shared so it can be mapped for CPU writes each frame.\n  // Unlike HelloWorldSession which uploads static data at creation time, we pass nullptr here\n  // and will fill the buffer via map()/unmap() every frame.\n  vertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                 .length = sizeof(VertexPosColor) * 3,\n                                                 .storage = ResourceStorage::Shared},\n                                      nullptr);\n  IGL_DEBUG_ASSERT(vertexBuffer_ != nullptr);\n\n  // Index buffer (static, does not need mapping)\n  indexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                                .data = indexData,\n                                                .length = sizeof(indexData)},\n                                     nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_ != nullptr);\n\n  vertexInputState_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosColor, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float4,\n                                  .offset = offsetof(VertexPosColor, color),\n                                  .name = \"color_in\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{}, {.stride = sizeof(VertexPosColor)}},\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexInputState_ != nullptr);\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid BufferMappingSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // --- Dynamic vertex update via buffer mapping ---\n  // Map the vertex buffer to get a CPU-writable pointer. The buffer was created with\n  // ResourceStorage::Shared, which keeps memory accessible to both CPU and GPU.\n  auto* mapped = static_cast<VertexPosColor*>(\n      vertexBuffer_->map(BufferRange(sizeof(VertexPosColor) * 3, 0), &ret));\n  IGL_DEBUG_ASSERT(ret.isOk());\n  if (mapped) {\n    // Animate vertex positions: the triangle vertices oscillate using sin/cos of frameCount_.\n    const float t = static_cast<float>(frameCount_) * 0.02f;\n    const float dx = std::sin(t) * 0.3f;\n    const float dy = std::cos(t) * 0.2f;\n\n    mapped[0] = VertexPosColor{\n        .position = {-0.6f + dx, -0.4f + dy, 0.0f},\n        .color = {1.0f, 0.0f, 0.0f, 1.0f},\n    };\n    mapped[1] = VertexPosColor{\n        .position = {0.6f - dx, -0.4f - dy, 0.0f},\n        .color = {0.0f, 1.0f, 0.0f, 1.0f},\n    };\n    mapped[2] = VertexPosColor{\n        .position = {0.0f + dy, 0.6f + dx, 0.0f},\n        .color = {0.0f, 0.0f, 1.0f, 1.0f},\n    };\n\n    // Unmap the buffer before submitting GPU work. The GPU must not read from a mapped buffer.\n    vertexBuffer_->unmap();\n  }\n\n  // Alternative approach (non-mapping): you could also update buffer data via upload():\n  //   VertexPosColor verts[3] = { ... };\n  //   vertexBuffer_->upload(verts, BufferRange(sizeof(verts), 0));\n  // upload() copies data into the buffer without requiring map/unmap, but mapping can be\n  // more efficient when updating large buffers since it avoids an extra copy.\n\n  frameCount_++;\n\n  // Graphics pipeline (created once and cached)\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Command Buffers\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(1, *vertexBuffer_);\n    commands->bindRenderPipelineState(pipelineState_);\n    commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n    commands->drawIndexed(3);\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/BufferMappingSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass BufferMappingSession : public RenderSession {\n public:\n  explicit BufferMappingSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IBuffer> vertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  RenderPassDesc renderPass_;\n  size_t frameCount_ = 0;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/CheckerboardMipmapSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/CheckerboardMipmapSession.h>\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <glm/ext/matrix_clip_space.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n\nnamespace igl::shell {\n\nnamespace {\n\nstruct VertexPosUv {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float2 uv;\n};\nconst VertexPosUv kVertexData[] = {\n    {.position = {-0.9f, 0.9f, 0.0}, .uv = {0.0, 1.0}},\n    {.position = {0.9f, 0.9f, 0.0}, .uv = {1.0, 1.0}},\n    {.position = {-0.9f, -0.9f, 0.0}, .uv = {0.0, 0.0}},\n    {.position = {0.9f, -0.9f, 0.0}, .uv = {1.0, 0.0}},\n};\n\nconst uint16_t kIndexData[] = {0, 1, 2, 1, 3, 2};\n\n// @fb-only\n// @fb-only\n  // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n// @fb-only\n// @fb-only\n\nglm::mat4 getMVP(float aspectRatio) noexcept {\n  const glm::vec3 eye = {0, 0, 2.5};\n  const glm::vec3 ballCenter = {0, 0, 0};\n  const float fov = M_PI / 4;\n\n  const glm::mat4 view = glm::lookAt(glm::vec3(eye.x, eye.y, eye.z),\n                                     glm::vec3(ballCenter.x, ballCenter.y, ballCenter.z),\n                                     glm::vec3(0.0, 1.0, 0.0));\n  const glm::mat4 projection = glm::perspective(fov, aspectRatio, 0.1f, 10.f);\n  return projection * view;\n}\n\nBufferDesc getVertexBufferDesc(const igl::IDevice& device) {\n// @fb-only\n  // @fb-only\n    // @fb-only\n                                    // @fb-only\n                                    // @fb-only\n                                    // @fb-only\n    // @fb-only\n                      // @fb-only\n                      // @fb-only\n                      // @fb-only\n  // @fb-only\n// @fb-only\n  return {.type = BufferDesc::BufferTypeBits::Vertex,\n          .data = kVertexData,\n          .length = sizeof(kVertexData)};\n}\n\nuint32_t getVertexBufferIndex(const igl::IDevice& device) {\n// @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n  return 1;\n}\n\nResourceStorage getIndexBufferResourceStorage(const igl::IDevice& device) {\n// @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n  return igl::BufferDesc{}.storage;\n}\n\nstd::string getVersion() {\n  return \"#version 100\";\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n  using namespace metal;\n\n  typedef struct {\n      float4x4 mvp;\n  } UniformBlock;\n\n  typedef struct {\n    float3 position [[attribute(0)]];\n    float2 uv [[attribute(1)]];\n  } VertexIn;\n\n  typedef struct {\n    float4 position [[position]];\n    float2 uv;\n  } VertexOut;\n\n  vertex VertexOut vertexShader(\n      uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]],\n      constant UniformBlock * ub [[buffer(0)]]) {\n    VertexOut out;\n    out.position = ub->mvp * float4(vertices[vid].position, 1.0);\n    out.uv = vertices[vid].uv;\n    return out;\n  }\n\n  fragment float4 fragmentShader(\n      VertexOut IN [[stage_in]],\n      texture2d<float> diffuseTex [[texture(0)]],\n      sampler linearSampler [[sampler(0)]],\n      constant UniformBlock * ub [[buffer(0)]]) {\n    float4 tex = diffuseTex.sample(linearSampler, IN.uv);\n    return tex;\n  }\n  )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n  precision highp float;\n  attribute vec3 position;\n  attribute vec2 uv_in;\n\n  uniform mat4 mvp;\n  uniform sampler2D inputImage;\n\n  varying vec2 uv;\n\n  void main() {\n    gl_Position = mvp * vec4(position, 1.0);\n    uv = uv_in;\n  })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n  precision highp float;\n  uniform sampler2D inputImage;\n  varying vec2 uv;\n\n  void main() {\n    gl_FragColor = texture2D(inputImage, uv);\n  })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\nprecision highp float;\nlayout(location = 0) in vec3 position;\nlayout(location = 1) in vec2 uv_in;\n\nlayout(std140, set = 1, binding = 0) uniform Uniforms {\n  mat4 mvpMatrix;\n} perFrame;\n\nlayout(location = 0) out vec2 uv;\n\nvoid main() {\n  gl_Position = perFrame.mvpMatrix * vec4(position, 1.0);\n  uv = uv_in;\n}\n)\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\nlayout(location = 0) in vec2 uv;\nlayout(location = 0) out vec4 out_FragColor;\nlayout(set = 0, binding = 0) uniform sampler2D inputImage;\nvoid main() {\n  out_FragColor = texture(inputImage, uv);\n}\n)\";\n}\n\n// @fb-only\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n  case igl::BackendType::Vulkan: {\n    auto vertexSource = getVulkanVertexShaderSource();\n    if (device.hasFeature(DeviceFeatures::Multiview)) {\n      vertexSource = R\"(#version 450\n)\" + vertexSource;\n    }\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           vertexSource.c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  }\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n} // namespace\n\nvoid CheckerboardMipmapSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  const BufferDesc vb0Desc = getVertexBufferDesc(device);\n  vb0_ = device.createBuffer(vb0Desc, nullptr);\n  IGL_DEBUG_ASSERT(vb0_ != nullptr);\n\n  const BufferDesc ibDesc{.type = BufferDesc::BufferTypeBits::Index,\n                          .data = kIndexData,\n                          .length = sizeof(kIndexData),\n                          .storage = getIndexBufferResourceStorage(device),\n                          .debugName = \"index\"};\n  ib0_ = device.createBuffer(ibDesc, nullptr);\n  IGL_DEBUG_ASSERT(ib0_ != nullptr);\n\n  const auto vertexBufferIndex = getVertexBufferIndex(getPlatform().getDevice());\n  VertexInputStateDesc inputDesc = {\n      .numAttributes = 2,\n      .attributes =\n          {\n              {\n                  .bufferIndex = vertexBufferIndex,\n                  .format = VertexAttributeFormat::Float3,\n                  .offset = offsetof(VertexPosUv, position),\n                  .name = \"position\",\n                  .location = 0,\n              },\n              {\n                  .bufferIndex = vertexBufferIndex,\n                  .format = VertexAttributeFormat::Float2,\n                  .offset = offsetof(VertexPosUv, uv),\n                  .name = \"uv_in\",\n                  .location = 1,\n              },\n          },\n      .numInputBindings = 1,\n  };\n  inputDesc.inputBindings[vertexBufferIndex].stride = sizeof(VertexPosUv);\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n  IGL_DEBUG_ASSERT(vertexInput0_ != nullptr);\n\n  // Sampler & Texture with mipmaps enabled\n  const SamplerStateDesc samplerDesc{\n      .minFilter = SamplerMinMagFilter::Linear,\n      .magFilter = SamplerMinMagFilter::Linear,\n      .mipFilter = SamplerMipFilter::Linear, // Enable mipmap filtering\n  };\n  samp0_ = device.createSamplerState(samplerDesc, nullptr);\n  IGL_DEBUG_ASSERT(samp0_ != nullptr);\n\n  // Load checkerboard texture\n  tex0_ = getPlatform().loadTexture(\"checker.png\", true);\n  IGL_DEBUG_ASSERT(tex0_ != nullptr);\n  {\n    Result result;\n\n    const auto tempCommandQueue = device.createCommandQueue({}, &result);\n    IGL_DEBUG_ASSERT(result.isOk(), \"Error %d: %s\", result.code, result.message.c_str());\n    IGL_DEBUG_ASSERT(tempCommandQueue);\n    if (tex0_->isRequiredGenerateMipmap()) {\n      tex0_->generateMipmap(*tempCommandQueue, nullptr);\n    }\n  }\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue: backed by different types of GPU HW queues\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_.colorAttachments.resize(1);\n  renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n  renderPass_.colorAttachments[0].clearColor = getPreferredClearColor();\n  renderPass_.depthAttachment.loadAction = LoadAction::Clear;\n  renderPass_.depthAttachment.clearDepth = 1.0;\n}\n\nvoid CheckerboardMipmapSession::update(SurfaceTextures surfaceTextures) noexcept {\n  Result ret;\n  if (framebuffer_ == nullptr) {\n    FramebufferDesc framebufferDesc;\n    framebufferDesc.colorAttachments[0].texture = surfaceTextures.color;\n    framebufferDesc.depthAttachment.texture = surfaceTextures.depth;\n    IGL_DEBUG_ASSERT(framebufferDesc.depthAttachment.texture != nullptr);\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(framebufferDesc, &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures.color);\n  }\n\n  const size_t textureUnit = 0;\n\n  // Graphics pipeline: state batch that fully configures GPU for rendering\n  if (pipelineState_ == nullptr) {\n    const RenderPipelineDesc graphicsDesc = {\n        .vertexInputState = vertexInput0_,\n        .shaderStages = shaderStages_,\n        .targetDesc =\n            {\n                .colorAttachments = {{\n                    {.textureFormat = framebuffer_->getColorAttachment(0)->getProperties().format},\n                }},\n                .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getProperties().format,\n            },\n        .cullMode = igl::CullMode::Disabled,\n        .frontFaceWinding = igl::WindingMode::Clockwise,\n        .fragmentUnitSamplerMap = {{textureUnit, IGL_NAMEHANDLE(\"inputImage\")}},\n    };\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(graphicsDesc, nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Create uniform buffer for platforms that need it (Metal, Vulkan, etc.)\n  if (getPlatform().getDevice().hasFeature(DeviceFeatures::UniformBlocks) && !mvpUniformBuffer_) {\n    const BufferDesc bufDesc{.type = BufferDesc::BufferTypeBits::Uniform,\n                             .length = sizeof(glm::mat4),\n                             .storage = ResourceStorage::Shared};\n    mvpUniformBuffer_ = getPlatform().getDevice().createBuffer(bufDesc, &ret);\n    IGL_DEBUG_ASSERT(mvpUniformBuffer_ != nullptr);\n  }\n\n  // Update the angle to rotate the plane. Value obtained empirically so that the rotation isn't too\n  // fast/slow\n#if ROTATE_PLANE\n  planeAngle_ += 0.0016f;\n#endif\n\n  const auto aspectRatio = surfaceTextures.color->getAspectRatio();\n  const glm::mat4 staticViewProjection = getMVP(aspectRatio);\n  const glm::mat4 viewProjection =\n      glm::rotate(staticViewProjection, planeAngle_, glm::vec3(0.0, 1.f, 0.0));\n\n  // Command buffer: create, submit and forget\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n\n  if (commands) {\n    commands->bindRenderPipelineState(pipelineState_);\n    commands->bindVertexBuffer(getVertexBufferIndex(getPlatform().getDevice()), *vb0_);\n    commands->bindTexture(textureUnit, BindTarget::kFragment, tex0_.get());\n    commands->bindSamplerState(textureUnit, BindTarget::kFragment, samp0_.get());\n\n    // Set the MVP matrix uniform\n// @fb-only\n    // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n             // @fb-only\n             // @fb-only\n      // @fb-only\n                          // @fb-only\n                          // @fb-only\n                          // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n    } else { // @fb-only}\n// @fb-only\n    {\n// @fb-only\n      if (getPlatform().getDevice().hasFeature(DeviceFeatures::BindUniform)) {\n        // OpenGL path: bind uniform directly\n        const UniformDesc uniformDesc = {\n            .location = pipelineState_->getIndexByName(IGL_NAMEHANDLE(\"mvp\"), ShaderStage::Vertex),\n            .type = UniformType::Mat4x4,\n            .offset = 0,\n        };\n        commands->bindUniform(uniformDesc, &viewProjection[0][0]);\n      } else if (getPlatform().getDevice().hasFeature(DeviceFeatures::UniformBlocks)) {\n        // Metal/Vulkan path: upload to buffer and bind buffer\n        mvpUniformBuffer_->upload(&viewProjection[0][0], BufferRange{sizeof(glm::mat4)});\n        commands->bindBuffer(0, mvpUniformBuffer_.get(), 0);\n      }\n    }\n\n    commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n    commands->drawIndexed(6);\n\n    commands->endEncoding();\n  }\n\n  if (buffer) {\n    if (shellParams().shouldPresent) {\n      buffer->present(framebuffer_->getColorAttachment(0));\n    }\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(surfaceTextures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/CheckerboardMipmapSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <cmath>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\n#define ROTATE_PLANE 1\n\nclass CheckerboardMipmapSession : public RenderSession {\n public:\n  explicit CheckerboardMipmapSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb0_, ib0_;\n  std::shared_ptr<ITexture> tex0_;\n  std::shared_ptr<ISamplerState> samp0_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<ICommandQueue> commandQueue_;\n  std::shared_ptr<IBuffer> mvpUniformBuffer_;\n\n  // Initial angle of the plane, so that it starts at an angle\n  float planeAngle_ = M_PI / 4.0f;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/ColorSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/ColorSession.h>\n\n#include <cstring>\n#include <glm/gtc/color_space.hpp>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/platform/DisplayContext.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n// @fb-only\n// @fb-only\n// @fb-only\n\nnamespace igl::shell {\n\nnamespace {\n\nstruct VertexPosUv {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float2 uv;\n};\nconst VertexPosUv kVertexData[] = {\n    {.position = {-1.f, 1.f, 0.0}, .uv = {0.0, 0.0}},\n    {.position = {1.f, 1.f, 0.0}, .uv = {1.0, 0.0}},\n    {.position = {-1.f, -1.f, 0.0}, .uv = {0.0, 1.0}},\n    {.position = {1.f, -1.f, 0.0}, .uv = {1.0, 1.0}},\n};\nconst uint16_t kIndexData[] = {0, 1, 2, 1, 3, 2};\n\n// @fb-only\n// @fb-only\n  // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n// @fb-only\n// @fb-only\n\nBufferDesc getVertexBufferDesc(const igl::IDevice& device) {\n// @fb-only\n  // @fb-only\n    // @fb-only\n                                    // @fb-only\n                                    // @fb-only\n                                    // @fb-only\n    // @fb-only\n                      // @fb-only\n                      // @fb-only\n                      // @fb-only\n  // @fb-only\n// @fb-only\n  return {.type = BufferDesc::BufferTypeBits::Vertex,\n          .data = kVertexData,\n          .length = sizeof(kVertexData),\n          .debugName = \"vertex\"};\n}\n\nuint32_t getVertexBufferIndex(const igl::IDevice& device) {\n// @fb-only\n  // @fb-only\n    return 0;\n  // @fb-only\n// @fb-only\n  return 1;\n}\n\nResourceStorage getIndexBufferResourceStorage(const igl::IDevice& device) {\n// @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n  return igl::BufferDesc{}.storage;\n}\n\nstd::string getVersion() {\n  return \"#version 100\";\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                 float3 color;\n                 float4x4 mvp;\n               } UniformBlock;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float2 uv [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float2 uv;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]],\n                  constant UniformBlock * ub [[buffer(0)]]) {\n                VertexOut out;\n                out.position = ub->mvp * float4(vertices[vid].position, 1.0);\n                out.uv = vertices[vid].uv;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]],\n                  texture2d<float> diffuseTex [[texture(0)]],\n                  sampler linearSampler [[sampler(0)]],\n                  constant UniformBlock * ub [[buffer(0)]]) {\n                float4 tex = diffuseTex.sample(linearSampler, IN.uv);\n                return float4(ub->color.r, ub->color.g, ub->color.b, 1.0) *\n                      tex;\n              }\n    )\";\n}\n\nstd::string getMetalShaderSourceGradient() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                 float3 color;\n                 float4x4 mvp;\n               } UniformBlock;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float2 uv [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float2 uv;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.uv = vertices[vid].uv;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]],\n                  texture2d<float> diffuseTex [[texture(0)]],\n                  sampler linearSampler [[sampler(0)]],\n                  constant UniformBlock * color [[buffer(0)]]) {\n\n                  float numSteps = 20.0;\n                  float uvX;\n                  if (IN.uv.y<0.25) {\n                   uvX = IN.uv.x;\n                  } else if (IN.uv.y<0.5) {\n                    uvX = floor(IN.uv.x*numSteps+0.5)/numSteps;\n                  } else if (IN.uv.y<0.75) {\n                    uvX = 1.0-IN.uv.x;\n                  } else {\n                    uvX = floor((1.0-IN.uv.x)*numSteps+0.5)/numSteps;\n                  }\n                  return float4(uvX, uvX, uvX, 1.0);\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec2 uv_in;\n\n                uniform vec3 color;\n                uniform mat4 mvp;\n                uniform sampler2D inputImage;\n\n                varying vec3 vColor;\n                varying vec2 uv;\n\n                void main() {\n                  gl_Position = mvp * vec4(position, 1.0);\n                  uv = uv_in; // position.xy * 0.5 + 0.5;\n                  vColor = color;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n                uniform vec3 color;\n                uniform mat4 mvp;\n                uniform sampler2D inputImage;\n                varying vec3 vColor;\n                varying vec2 uv;\n\n                void main() {\n                  gl_FragColor =\n                      vec4(vColor, 1.0) * texture2D(inputImage, uv);\n                })\");\n}\n\nstd::string getOpenGLFragmentShaderSourceGradient() {\n  return getVersion() + R\"(\n                precision highp float;\n                uniform vec3 color;\n                uniform mat4 mvp;\n                uniform sampler2D inputImage;\n                varying vec3 vColor;\n                varying vec2 uv;\n\n                void main() {\n                  float numSteps = 20.0;\n                  float uvX;\n                  if (uv.y<0.25) {\n                    uvX = uv.x;\n                  } else if (uv.y<0.5) {\n                   uvX = floor(uv.x*numSteps+0.5)/numSteps;\n                  } else if (uv.y<0.75) {\n                   uvX = 1.0-uv.x;\n                  } else {\n                   uvX = floor((1.0-uv.x)*numSteps+0.5)/numSteps;\n                  }\n                  gl_FragColor = vec4(vec3(uvX), 1.0);\n                }\n                )\";\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(precision highp float;\n            layout(location = 0) in vec3 position;\n            layout(location = 1) in vec2 uv_in;\n            layout(location = 0) out vec2 uv;\n            layout(location = 1) out vec3 color;\n\n            layout (set = 1, binding = 0, std140) uniform UniformsPerObject {\n              vec3 color;\n              mat4 mvp;\n            } perObject;\n\n            void main() {\n              gl_Position = perObject.mvp * vec4(position, 1.0);\n              uv = uv_in;\n              color = perObject.color;\n            }\n            )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec2 uv;\n                layout(location = 1) in vec3 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                layout(set = 0, binding = 0) uniform sampler2D in_texture;\n\n                void main() {\n                  out_FragColor = vec4(color, 1.0) * texture(in_texture, uv);\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSourceGradient() {\n  return R\"(\n                layout(location = 0) in vec2 uv;\n                layout(location = 1) in vec3 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  float numSteps = 20.0;\n                  float uvX;\n                  if (uv.y<0.25) {\n                    uvX = uv.x;\n                  } else if (uv.y<0.5) {\n                   uvX = floor(uv.x*numSteps+0.5)/numSteps;\n                  } else if (uv.y<0.75) {\n                   uvX = 1.0-uv.x;\n                  } else {\n                   uvX = floor((1.0-uv.x)*numSteps+0.5)/numSteps;\n                  }\n                  out_FragColor = vec4(vec3(uvX), 1.0);\n                }\n                )\";\n}\n\n// @fb-only\n\n} // namespace\n\nstd::unique_ptr<IShaderStages> ColorSession::getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan: {\n    auto vertexSource = getVulkanVertexShaderSource();\n    if (device.hasFeature(DeviceFeatures::Multiview)) {\n      vertexSource = R\"(#version 450\n                        #extension GL_OVR_multiview2 : require\n                        layout(num_views = 2) in;)\" +\n                     vertexSource;\n    }\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        vertexSource.c_str(),\n        \"main\",\n        \"\",\n        colorTestModes_ == ColorTestModes::Gradient\n            ? getVulkanFragmentShaderSourceGradient().c_str()\n            : getVulkanFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  }\n  // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n            // @fb-only\n            // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device,\n        colorTestModes_ == ColorTestModes::Gradient ? getMetalShaderSourceGradient().c_str()\n                                                    : getMetalShaderSource().c_str(),\n        \"vertexShader\",\n        \"fragmentShader\",\n        \"\",\n        nullptr);\n  case igl::BackendType::D3D12: {\n    if (colorTestModes_ == ColorTestModes::Gradient) {\n      // Gradient mode - no MVP matrix, just positional gradient\n      static const char* kVS = R\"(\n        cbuffer UniformBlock : register(b0) {\n          float3 color;\n          float4x4 mvp;\n        };\n\n        struct VSInput {\n          float3 position : POSITION;\n          float2 uv : TEXCOORD0;\n        };\n\n        struct VSOutput {\n          float4 position : SV_POSITION;\n          float2 uv : TEXCOORD0;\n        };\n\n        VSOutput main(VSInput input) {\n          VSOutput output;\n          output.position = float4(input.position, 1.0);\n          output.uv = input.uv;\n          return output;\n        }\n      )\";\n\n      static const char* kPS = R\"(\n        cbuffer UniformBlock : register(b0) {\n          float3 color;\n          float4x4 mvp;\n        };\n\n        Texture2D diffuseTex : register(t0);\n        SamplerState linearSampler : register(s0);\n\n        struct PSInput {\n          float4 position : SV_POSITION;\n          float2 uv : TEXCOORD0;\n        };\n\n        float4 main(PSInput input) : SV_Target {\n          float numSteps = 20.0;\n          float uvX;\n          if (input.uv.y < 0.25) {\n            uvX = input.uv.x;\n          } else if (input.uv.y < 0.5) {\n            uvX = floor(input.uv.x * numSteps) / numSteps;\n          } else if (input.uv.y < 0.75) {\n            uvX = (floor(input.uv.x * numSteps) + 0.5) / numSteps;\n          } else {\n            uvX = 1.0 - input.uv.x;\n          }\n          return float4(uvX, input.uv.y, 0.5, 1.0);\n        }\n      )\";\n\n      return igl::ShaderStagesCreator::fromModuleStringInput(\n          device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n    } else {\n      // Regular textured mode\n      static const char* kVS = R\"(\n        cbuffer UniformBlock : register(b0) {\n          float3 color;\n          float4x4 mvp;\n        };\n\n        struct VSInput {\n          float3 position : POSITION;\n          float2 uv : TEXCOORD0;\n        };\n\n        struct VSOutput {\n          float4 position : SV_POSITION;\n          float2 uv : TEXCOORD0;\n        };\n\n        VSOutput main(VSInput input) {\n          VSOutput output;\n          output.position = mul(mvp, float4(input.position, 1.0));\n          output.uv = input.uv;\n          return output;\n        }\n      )\";\n\n      static const char* kPS = R\"(\n        cbuffer UniformBlock : register(b0) {\n          float3 color;\n          float4x4 mvp;\n        };\n\n        Texture2D diffuseTex : register(t0);\n        SamplerState linearSampler : register(s0);\n\n        struct PSInput {\n          float4 position : SV_POSITION;\n          float2 uv : TEXCOORD0;\n        };\n\n        float4 main(PSInput input) : SV_Target {\n          float4 tex = diffuseTex.Sample(linearSampler, input.uv);\n          return float4(color.r, color.g, color.b, 1.0) * tex;\n        }\n      )\";\n\n      return igl::ShaderStagesCreator::fromModuleStringInput(\n          device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n    }\n  }\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getOpenGLVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        colorTestModes_ == ColorTestModes::Gradient\n            ? getOpenGLFragmentShaderSourceGradient().c_str()\n            : getOpenGLFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\nvoid ColorSession::initialize() noexcept {\n  IDevice& device = getPlatform().getDevice();\n  const glm::vec3 fLinearOrangeColor =\n      (swapchainColorTextureformat_ == igl::TextureFormat::RGBA_SRGB &&\n       device.hasFeature(DeviceFeatures::SRGB))\n          ? glm::vec3(glm::convertSRGBToLinear(glm::dvec3{1.0, 0.5, 0.0}))\n          : glm::vec3{1.0f, 0.5f, 0.0f};\n  const iglu::simdtypes::float3 gpuLinearOrangeColor = {\n      fLinearOrangeColor.x, fLinearOrangeColor.y, fLinearOrangeColor.z};\n\n  // Vertex & Index buffer\n  vb0_ = device.createBuffer(getVertexBufferDesc(device), nullptr);\n  IGL_DEBUG_ASSERT(vb0_ != nullptr);\n  ib0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                        .data = kIndexData,\n                                        .length = sizeof(kIndexData),\n                                        .storage = getIndexBufferResourceStorage(device),\n                                        .debugName = \"index\"},\n                             nullptr);\n  IGL_DEBUG_ASSERT(ib0_ != nullptr);\n\n  const uint32_t vertexBufferIndex = getVertexBufferIndex(device);\n  VertexInputStateDesc inputDesc = {\n      .numAttributes = 2,\n      .attributes =\n          {\n              {.bufferIndex = vertexBufferIndex,\n               .format = VertexAttributeFormat::Float3,\n               .offset = offsetof(VertexPosUv, position),\n               .name = \"position\",\n               .location = 0},\n              {.bufferIndex = vertexBufferIndex,\n               .format = VertexAttributeFormat::Float2,\n               .offset = offsetof(VertexPosUv, uv),\n               .name = \"uv_in\",\n               .location = 1},\n          },\n      .numInputBindings = 1,\n  };\n  inputDesc.inputBindings[vertexBufferIndex].stride = sizeof(VertexPosUv);\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n  IGL_DEBUG_ASSERT(vertexInput0_ != nullptr);\n\n  // Sampler & Texture\n  samp0_ = device.createSamplerState(\n      SamplerStateDesc{\n          .minFilter = SamplerMinMagFilter::Linear,\n          .magFilter = SamplerMinMagFilter::Linear,\n          .debugName = \"Sampler: linear\",\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(samp0_ != nullptr);\n\n  if (colorTestModes_ == ColorTestModes::MacbethTexture) {\n    tex0_ = getPlatform().loadTexture(\"macbeth.png\", true, swapchainColorTextureformat_);\n  } else if (colorTestModes_ == ColorTestModes::MacbethTextureKtx) {\n    tex0_ = getPlatform().loadTexture(\"macbeth.ktx\", true, swapchainColorTextureformat_);\n  } else if (colorTestModes_ == ColorTestModes::MacbethTextureKtx2) {\n    tex0_ = getPlatform().loadTexture(\"macbeth.ktx2\", true, swapchainColorTextureformat_);\n  } else if (colorTestModes_ == ColorTestModes::OrangeTexture) {\n    tex0_ = getPlatform().loadTexture(\"orange.png\", true, swapchainColorTextureformat_);\n  } else if (colorTestModes_ == ColorTestModes::OrangeClear) {\n    tex0_ = getPlatform().loadTexture(igl::shell::ImageLoader::white());\n    setPreferredClearColor(\n        Color{fLinearOrangeColor.x, fLinearOrangeColor.y, fLinearOrangeColor.z, 1.0f});\n  } else if (colorTestModes_ == ColorTestModes::Gradient) {\n    tex0_ = getPlatform().loadTexture(igl::shell::ImageLoader::white());\n  }\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue({}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_ = {\n      .colorAttachments = {{\n          .loadAction = LoadAction::Clear,\n          .storeAction = StoreAction::Store,\n          .clearColor = getPreferredClearColor(),\n      }},\n      .depthAttachment = {.loadAction = LoadAction::Clear, .clearDepth = 1.0},\n  };\n\n  // init uniforms\n  const glm::mat4x4 mvp(1.0f);\n  memcpy(&fragmentParameters_.mvp, &mvp, sizeof(mvp));\n  fragmentParameters_.color = (colorTestModes_ == ColorTestModes::OrangeClear)\n                                  ? gpuLinearOrangeColor\n                                  : iglu::simdtypes::float3{1.0f, 1.0f, 1.0f};\n\n  fragmentParamBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Uniform,\n                                                        .data = &fragmentParameters_,\n                                                        .length = sizeof(fragmentParameters_),\n                                                        .storage = ResourceStorage::Shared,\n                                                        .debugName = \"uniforms\"},\n                                             nullptr);\n  IGL_DEBUG_ASSERT(fragmentParamBuffer_ != nullptr);\n}\n\nvoid ColorSession::update(SurfaceTextures surfaceTextures) noexcept {\n  if (framebuffer_ == nullptr) {\n    Result ret;\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = surfaceTextures.color}},\n            .depthAttachment = {.texture = surfaceTextures.depth},\n            .mode = surfaceTextures.color->getNumLayers() > 1 ? FramebufferMode::Stereo\n                                                              : FramebufferMode::Mono,\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures.color);\n  }\n\n  const size_t textureUnit = 0;\n\n  // Graphics pipeline\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInput0_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{\n                        .textureFormat =\n                            framebuffer_->getColorAttachment(0)->getProperties().format,\n                        .blendEnabled = true,\n                        .rgbBlendOp = BlendOp::Add,\n                        .alphaBlendOp = BlendOp::Add,\n                        .srcRGBBlendFactor = BlendFactor::SrcAlpha,\n                        .srcAlphaBlendFactor = BlendFactor::SrcAlpha,\n                        .dstRGBBlendFactor = BlendFactor::OneMinusSrcAlpha,\n                        .dstAlphaBlendFactor = BlendFactor::OneMinusSrcAlpha,\n                    }},\n                    .depthAttachmentFormat =\n                        framebuffer_->getDepthAttachment()->getProperties().format,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n            .fragmentUnitSamplerMap = {{textureUnit, IGL_NAMEHANDLE(\"inputImage\")}},\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Command Buffers\n  const auto buffer = commandQueue_->createCommandBuffer({}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  const auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  framebuffer_->updateDrawable(drawableSurface);\n\n  // Uniform: \"color\"\n  fragmentUniformDescriptors_.emplace_back();\n  // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n  // @fb-only\n    if (getPlatform().getDevice().hasFeature(DeviceFeatures::BindUniform)) {\n      fragmentUniformDescriptors_.back().location =\n          pipelineState_->getIndexByName(\"color\", igl::ShaderStage::Fragment);\n    }\n  fragmentUniformDescriptors_.back().type = UniformType::Float3;\n  fragmentUniformDescriptors_.back().offset = offsetof(FragmentFormat, color);\n\n  // Uniform: \"mvp\"\n  fragmentUniformDescriptors_.emplace_back();\n  // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n  // @fb-only\n    if (getPlatform().getDevice().hasFeature(DeviceFeatures::BindUniform)) {\n      fragmentUniformDescriptors_.back().location =\n          pipelineState_->getIndexByName(\"mvp\", igl::ShaderStage::Fragment);\n    }\n  fragmentUniformDescriptors_.back().type = UniformType::Mat4x4;\n  fragmentUniformDescriptors_.back().offset = offsetof(FragmentFormat, mvp);\n\n  const auto& mvp = getPlatform().getDisplayContext().preRotationMatrix;\n  memcpy(&fragmentParameters_.mvp, &mvp, sizeof(mvp));\n  fragmentParamBuffer_->upload(&fragmentParameters_, {sizeof(fragmentParameters_)});\n\n  // Submit commands\n  const auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(getVertexBufferIndex(getPlatform().getDevice()), *vb0_);\n    commands->bindRenderPipelineState(pipelineState_);\n    if (getPlatform().getDevice().hasFeature(DeviceFeatures::BindUniform)) {\n      // Bind non block uniforms\n      for (const auto& uniformDesc : fragmentUniformDescriptors_) {\n        commands->bindUniform(uniformDesc, &fragmentParameters_);\n      }\n    } else if (getPlatform().getDevice().hasFeature(DeviceFeatures::UniformBlocks)) {\n      // @fb-only\n        // @fb-only\n                            // @fb-only\n                            // @fb-only\n                            // @fb-only\n      // @fb-only\n        commands->bindBuffer(0, fragmentParamBuffer_.get());\n      // @fb-only\n    } else {\n      IGL_DEBUG_ASSERT_NOT_REACHED();\n    }\n    // if (colorTestModes_ != ColorTestModes::eGradient) {\n    commands->bindTexture(textureUnit, BindTarget::kFragment, tex0_.get());\n    commands->bindSamplerState(textureUnit, BindTarget::kFragment, samp0_.get());\n    //}\n    commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n    commands->drawIndexed(6);\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer, true);\n  RenderSession::update(surfaceTextures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/ColorSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass ColorSession : public RenderSession {\n  struct FragmentFormat {\n    iglu::simdtypes::float3 color;\n    iglu::simdtypes::float4x4 mvp;\n  };\n\n public:\n  explicit ColorSession(std::shared_ptr<Platform> platform) : RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n  enum class ColorTestModes {\n    MacbethTexture,\n    MacbethTextureKtx,\n    MacbethTextureKtx2,\n    OrangeTexture,\n    OrangeClear,\n    Gradient,\n  };\n  void setTestMode(ColorTestModes colorTestModes) noexcept {\n    colorTestModes_ = colorTestModes;\n  }\n\n  void setSwapchainColorTextureformat(TextureFormat swapchainColorTextureformat) {\n    swapchainColorTextureformat_ = swapchainColorTextureformat;\n  }\n\n private:\n  std::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device);\n  ColorTestModes colorTestModes_ = ColorTestModes::MacbethTexture;\n\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<ISamplerState> samp0_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb0_;\n  std::shared_ptr<IBuffer> ib0_;\n  std::shared_ptr<IBuffer> fragmentParamBuffer_;\n  std::shared_ptr<ITexture> depthTexture_;\n  std::shared_ptr<ITexture> tex0_;\n  RenderPassDesc renderPass_;\n  FragmentFormat fragmentParameters_{};\n  std::vector<UniformDesc> fragmentUniformDescriptors_;\n  std::vector<UniformDesc> vertexUniformDescriptors_;\n  TextureFormat swapchainColorTextureformat_ = TextureFormat::RGBA_SRGB;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/CopyOperationsSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/CopyOperationsSession.h>\n\n#include <cstdint>\n#include <vector>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\nstruct VertexPosColor {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float4 color;\n};\nVertexPosColor vertexData[] = {\n    {.position = {-0.6f, -0.4f, 0.0}, .color = {1.0, 0.0, 0.0, 1.0}},\n    {.position = {0.6f, -0.4f, 0.0}, .color = {0.0, 1.0, 0.0, 1.0}},\n    {.position = {0.0f, 0.6f, 0.0}, .color = {0.0, 0.0, 1.0, 1.0}},\n};\nuint16_t indexData[] = {\n    2,\n    1,\n    0,\n};\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float4 color;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.color = vertices[vid].color;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return IN.color;\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  vColor = color_in;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_FragColor = vColor;\n                })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  color = color_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec4 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = color;\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; float4 color : COLOR; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); o.color = v.color; return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float4 color : COLOR; };\n      float4 main(PSIn i) : SV_TARGET { return i.color; }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n} // namespace\n\nvoid CopyOperationsSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Create source vertex buffer with vertex data\n  srcVertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                    .data = vertexData,\n                                                    .length = sizeof(vertexData)},\n                                         nullptr);\n  IGL_DEBUG_ASSERT(srcVertexBuffer_ != nullptr);\n\n  // Create destination vertex buffer (same size, no initial data)\n  dstVertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                    .data = nullptr,\n                                                    .length = sizeof(vertexData)},\n                                         nullptr);\n  IGL_DEBUG_ASSERT(dstVertexBuffer_ != nullptr);\n\n  // Index buffer\n  indexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                                .data = indexData,\n                                                .length = sizeof(indexData)},\n                                     nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_ != nullptr);\n\n  vertexInputState_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosColor, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float4,\n                                  .offset = offsetof(VertexPosColor, color),\n                                  .name = \"color_in\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{}, {.stride = sizeof(VertexPosColor)}},\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexInputState_ != nullptr);\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid CopyOperationsSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n\n  // Create or update framebuffer\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // Create graphics pipeline (cached)\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Create command buffer\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n\n  // Step 1: Buffer-to-buffer copy (once)\n  // Copy vertex data from srcVertexBuffer_ to dstVertexBuffer_ using ICommandBuffer::copyBuffer()\n  if (!hasCopied_) {\n    buffer->copyBuffer(*srcVertexBuffer_, *dstVertexBuffer_, 0, 0, sizeof(vertexData));\n    hasCopied_ = true;\n    IGL_LOG_INFO(\"[CopyOperationsSession] Copied %zu bytes from src to dst vertex buffer\\n\",\n                 sizeof(vertexData));\n  }\n\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Step 2: Render the triangle using the DESTINATION buffer (the copied one)\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(1, *dstVertexBuffer_);\n    commands->bindRenderPipelineState(pipelineState_);\n    commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n    commands->drawIndexed(3);\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n\n  // Step 3: Framebuffer readback -- read rendered pixels and log first pixel color\n  // Uses IFramebuffer::copyBytesColorAttachment() to demonstrate GPU-to-CPU readback\n  if (!hasReadBack_) {\n    const auto colorAttachment = framebuffer_->getColorAttachment(0);\n    if (colorAttachment) {\n      const uint32_t width = colorAttachment->getDimensions().width;\n      const uint32_t height = colorAttachment->getDimensions().height;\n      if (width > 0 && height > 0) {\n        std::vector<uint32_t> pixels(static_cast<size_t>(width) * height);\n        framebuffer_->copyBytesColorAttachment(\n            *commandQueue_, 0, pixels.data(), TextureRangeDesc::new2D(0, 0, width, height));\n\n        // Log first pixel RGBA (packed as 0xAABBGGRR in most backends)\n        const uint32_t firstPixel = pixels[0];\n        const uint8_t r = static_cast<uint8_t>(firstPixel & 0xFF);\n        const uint8_t g = static_cast<uint8_t>((firstPixel >> 8) & 0xFF);\n        const uint8_t b = static_cast<uint8_t>((firstPixel >> 16) & 0xFF);\n        const uint8_t a = static_cast<uint8_t>((firstPixel >> 24) & 0xFF);\n        IGL_LOG_INFO(\n            \"[CopyOperationsSession] Framebuffer readback: first pixel RGBA = (%u, %u, %u, %u)\\n\",\n            r,\n            g,\n            b,\n            a);\n        hasReadBack_ = true;\n      }\n    }\n  }\n\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/CopyOperationsSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass CopyOperationsSession : public RenderSession {\n public:\n  explicit CopyOperationsSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IBuffer> srcVertexBuffer_;\n  std::shared_ptr<IBuffer> dstVertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  RenderPassDesc renderPass_;\n  bool hasCopied_ = false;\n  bool hasReadBack_ = false;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/DepthBiasSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/DepthBiasSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\n\n// Shadow map resolution\nconstexpr uint32_t kShadowMapSize = 1024;\n\nstruct VertexPosNormal {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float3 normal;\n};\n\n// clang-format off\n// Floor quad (two triangles) lying on the Y=-0.5 plane\n// Triangle (floating above the floor) casting a shadow\nVertexPosNormal vertexData[] = {\n    // Floor quad vertices (indices 0-3)\n    {.position = {-1.0f, -0.5f, -1.0f}, .normal = {0.0f, 1.0f, 0.0f}},\n    {.position = {1.0f, -0.5f, -1.0f}, .normal = {0.0f, 1.0f, 0.0f}},\n    {.position = {1.0f, -0.5f, 1.0f}, .normal = {0.0f, 1.0f, 0.0f}},\n    {.position = {-1.0f, -0.5f, 1.0f}, .normal = {0.0f, 1.0f, 0.0f}},\n    // Triangle vertices (indices 4-6), floating above the floor\n    {.position = {-0.3f, 0.3f, 0.0f}, .normal = {0.0f, 0.0f, -1.0f}},\n    {.position = {0.3f, 0.3f, 0.0f}, .normal = {0.0f, 0.0f, -1.0f}},\n    {.position = {0.0f, 0.7f, 0.0f}, .normal = {0.0f, 0.0f, -1.0f}},\n};\n\nuint16_t indexData[] = {\n    // Floor quad (two triangles)\n    0, 1, 2,\n    0, 2, 3,\n    // Floating triangle\n    4, 5, 6,\n};\n// clang-format on\n\nconstexpr size_t kFloorIndexCount = 6;\nconstexpr size_t kTriangleIndexCount = 3;\nconstexpr size_t kTotalIndexCount = kFloorIndexCount + kTriangleIndexCount;\n\n// ===========================================================================\n// Shadow pass shaders: depth-only, simple transform from light's perspective\n// ===========================================================================\n\n// A simple orthographic light view-projection applied to each vertex.\n// The light looks down along -Y with a slight tilt.\n\nstd::string getShadowMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float3 normal [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n              } VertexOut;\n\n              vertex VertexOut shadowVertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                // Simple orthographic projection from light's point of view\n                // Light is above, looking down along -Y\n                float3 p = vertices[vid].position;\n                out.position = float4(p.x * 0.5, -p.z * 0.5, (p.y + 1.0) * 0.5, 1.0);\n                return out;\n              }\n\n              fragment float4 shadowFragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return float4(0.0);\n              }\n    )\";\n}\n\nstd::string getShadowOpenGLVertexShaderSource() {\n  return R\"(#version 100\n                precision highp float;\n                attribute vec3 position;\n                attribute vec3 normal;\n\n                void main() {\n                  // Simple orthographic projection from light's point of view\n                  gl_Position = vec4(position.x * 0.5, -position.z * 0.5,\n                                     (position.y + 1.0) * 0.5, 1.0);\n                })\";\n}\n\nstd::string getShadowOpenGLFragmentShaderSource() {\n  return R\"(#version 100\n                precision highp float;\n\n                void main() {\n                  gl_FragColor = vec4(0.0);\n                })\";\n}\n\nstd::string getShadowVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec3 normal;\n\n                void main() {\n                  // Simple orthographic projection from light's point of view\n                  gl_Position = vec4(position.x * 0.5, -position.z * 0.5,\n                                     (position.y + 1.0) * 0.5, 1.0);\n                }\n                )\";\n}\n\nstd::string getShadowVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = vec4(0.0);\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShadowShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getShadowVulkanVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getShadowVulkanFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(device,\n                                                            getShadowMetalShaderSource().c_str(),\n                                                            \"shadowVertexShader\",\n                                                            \"shadowFragmentShader\",\n                                                            \"\",\n                                                            nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getShadowOpenGLVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getShadowOpenGLFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float3 normal : NORMAL; };\n      struct VSOut { float4 position : SV_POSITION; };\n      VSOut main(VSIn v) {\n        VSOut o;\n        o.position = float4(v.position.x * 0.5, -v.position.z * 0.5,\n                            (v.position.y + 1.0) * 0.5, 1.0);\n        return o;\n      }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; };\n      float4 main(PSIn i) : SV_TARGET { return float4(0.0, 0.0, 0.0, 0.0); }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n// ===========================================================================\n// Main pass shaders: render scene with basic shadow testing\n// ===========================================================================\n\n// The main pass transforms vertices for the camera view, and also computes\n// shadow-map texture coordinates (the same transform used in the shadow pass).\n// The fragment shader samples the shadow map to determine if a fragment is\n// in shadow and darkens it accordingly.\n\nstd::string getMainMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float3 normal [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float3 normal;\n                float3 shadowCoord;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                float3 p = vertices[vid].position;\n                // Camera: simple perspective-like view\n                out.position = float4(p.x * 0.8, p.y * 0.8 + 0.1, p.z * 0.1 + 0.5, 1.0);\n                out.normal = vertices[vid].normal;\n                // Shadow map coords: same transform as shadow pass, mapped to [0,1]\n                out.shadowCoord = float3(p.x * 0.5 * 0.5 + 0.5,\n                                         -p.z * 0.5 * 0.5 + 0.5,\n                                         (p.y + 1.0) * 0.5);\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]],\n                  depth2d<float> shadowMap [[texture(0)]],\n                  sampler shadowSampler [[sampler(0)]]) {\n                // Base color: light gray for floor, blue for triangle\n                float3 baseColor = (IN.normal.y > 0.5)\n                                       ? float3(0.8, 0.8, 0.8)\n                                       : float3(0.2, 0.5, 1.0);\n\n                // Simple diffuse lighting from above\n                float3 lightDir = normalize(float3(0.3, 1.0, 0.5));\n                float ndotl = max(dot(IN.normal, lightDir), 0.3);\n\n                // Shadow test\n                float shadowDepth = shadowMap.sample(shadowSampler, IN.shadowCoord.xy);\n                float shadow = (IN.shadowCoord.z > shadowDepth + 0.005) ? 0.4 : 1.0;\n\n                return float4(baseColor * ndotl * shadow, 1.0);\n              }\n    )\";\n}\n\nstd::string getMainOpenGLVertexShaderSource() {\n  return R\"(#version 100\n                precision highp float;\n                attribute vec3 position;\n                attribute vec3 normal;\n\n                varying vec3 vNormal;\n                varying vec3 vShadowCoord;\n\n                void main() {\n                  // Camera transform\n                  gl_Position = vec4(position.x * 0.8, position.y * 0.8 + 0.1,\n                                     position.z * 0.1 + 0.5, 1.0);\n                  vNormal = normal;\n                  // Shadow map coords\n                  vShadowCoord = vec3(position.x * 0.5 * 0.5 + 0.5,\n                                      -position.z * 0.5 * 0.5 + 0.5,\n                                      (position.y + 1.0) * 0.5);\n                })\";\n}\n\nstd::string getMainOpenGLFragmentShaderSource() {\n  return R\"(#version 100\n                precision highp float;\n\n                varying vec3 vNormal;\n                varying vec3 vShadowCoord;\n\n                uniform sampler2D shadowMap;\n\n                void main() {\n                  // Base color\n                  vec3 baseColor = (vNormal.y > 0.5)\n                                       ? vec3(0.8, 0.8, 0.8)\n                                       : vec3(0.2, 0.5, 1.0);\n\n                  // Simple diffuse lighting\n                  vec3 lightDir = normalize(vec3(0.3, 1.0, 0.5));\n                  float ndotl = max(dot(vNormal, lightDir), 0.3);\n\n                  // Shadow test\n                  float shadowDepth = texture2D(shadowMap, vShadowCoord.xy).r;\n                  float shadow = (vShadowCoord.z > shadowDepth + 0.005) ? 0.4 : 1.0;\n\n                  gl_FragColor = vec4(baseColor * ndotl * shadow, 1.0);\n                })\";\n}\n\nstd::string getMainVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec3 normal;\n                layout(location = 0) out vec3 vNormal;\n                layout(location = 1) out vec3 vShadowCoord;\n\n                void main() {\n                  // Camera transform\n                  gl_Position = vec4(position.x * 0.8, position.y * 0.8 + 0.1,\n                                     position.z * 0.1 + 0.5, 1.0);\n                  vNormal = normal;\n                  // Shadow map coords\n                  vShadowCoord = vec3(position.x * 0.5 * 0.5 + 0.5,\n                                      -position.z * 0.5 * 0.5 + 0.5,\n                                      (position.y + 1.0) * 0.5);\n                }\n                )\";\n}\n\nstd::string getMainVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 vNormal;\n                layout(location = 1) in vec3 vShadowCoord;\n                layout(location = 0) out vec4 out_FragColor;\n                layout(set = 0, binding = 0) uniform sampler2D shadowMap;\n\n                void main() {\n                  // Base color\n                  vec3 baseColor = (vNormal.y > 0.5)\n                                       ? vec3(0.8, 0.8, 0.8)\n                                       : vec3(0.2, 0.5, 1.0);\n\n                  // Simple diffuse lighting\n                  vec3 lightDir = normalize(vec3(0.3, 1.0, 0.5));\n                  float ndotl = max(dot(vNormal, lightDir), 0.3);\n\n                  // Shadow test\n                  float shadowDepth = texture(shadowMap, vShadowCoord.xy).r;\n                  float shadow = (vShadowCoord.z > shadowDepth + 0.005) ? 0.4 : 1.0;\n\n                  out_FragColor = vec4(baseColor * ndotl * shadow, 1.0);\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getMainShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getMainVulkanVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getMainVulkanFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMainMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getMainOpenGLVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getMainOpenGLFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float3 normal : NORMAL; };\n      struct VSOut {\n        float4 position : SV_POSITION;\n        float3 normal : NORMAL;\n        float3 shadowCoord : TEXCOORD0;\n      };\n      VSOut main(VSIn v) {\n        VSOut o;\n        o.position = float4(v.position.x * 0.8, v.position.y * 0.8 + 0.1,\n                            v.position.z * 0.1 + 0.5, 1.0);\n        o.normal = v.normal;\n        o.shadowCoord = float3(v.position.x * 0.5 * 0.5 + 0.5,\n                               -v.position.z * 0.5 * 0.5 + 0.5,\n                               (v.position.y + 1.0) * 0.5);\n        return o;\n      }\n    )\";\n    static const char* kPS = R\"(\n      Texture2D shadowMap : register(t0);\n      SamplerState shadowSampler : register(s0);\n\n      struct PSIn {\n        float4 position : SV_POSITION;\n        float3 normal : NORMAL;\n        float3 shadowCoord : TEXCOORD0;\n      };\n\n      float4 main(PSIn i) : SV_TARGET {\n        // Base color\n        float3 baseColor = (i.normal.y > 0.5)\n                               ? float3(0.8, 0.8, 0.8)\n                               : float3(0.2, 0.5, 1.0);\n\n        // Simple diffuse lighting\n        float3 lightDir = normalize(float3(0.3, 1.0, 0.5));\n        float ndotl = max(dot(i.normal, lightDir), 0.3);\n\n        // Shadow test\n        float shadowDepth = shadowMap.Sample(shadowSampler, i.shadowCoord.xy).r;\n        float shadow = (i.shadowCoord.z > shadowDepth + 0.005) ? 0.4 : 1.0;\n\n        return float4(baseColor * ndotl * shadow, 1.0);\n      }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n} // namespace\n\nvoid DepthBiasSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex & Index buffer\n  vertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                 .data = vertexData,\n                                                 .length = sizeof(vertexData)},\n                                      nullptr);\n  IGL_DEBUG_ASSERT(vertexBuffer_ != nullptr);\n  indexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                                .data = indexData,\n                                                .length = sizeof(indexData)},\n                                     nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_ != nullptr);\n\n  // Vertex input state: position (float3) + normal (float3)\n  vertexInputState_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosNormal, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosNormal, normal),\n                                  .name = \"normal\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{}, {.stride = sizeof(VertexPosNormal)}},\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexInputState_ != nullptr);\n\n  // Shader stages for both passes\n  shadowShaderStages_ = getShadowShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shadowShaderStages_ != nullptr);\n\n  shaderStages_ = getMainShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  // Depth stencil state: depth testing and depth writes enabled\n  {\n    DepthStencilStateDesc desc;\n    desc.compareFunction = CompareFunction::Less;\n    desc.isDepthWriteEnabled = true;\n    depthStencilState_ = device.createDepthStencilState(desc, nullptr);\n    IGL_DEBUG_ASSERT(depthStencilState_ != nullptr);\n  }\n\n  // Sampler for the shadow map\n  shadowSampler_ = device.createSamplerState(\n      SamplerStateDesc{\n          .minFilter = SamplerMinMagFilter::Nearest,\n          .magFilter = SamplerMinMagFilter::Nearest,\n          .addressModeU = SamplerAddressMode::Clamp,\n          .addressModeV = SamplerAddressMode::Clamp,\n          .debugName = \"Shadow Sampler\",\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(shadowSampler_ != nullptr);\n\n  // Shadow render pass descriptor: depth-only, no color attachment\n  shadowRenderPass_ = {\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .storeAction = StoreAction::Store,\n              .clearDepth = 1.0,\n          },\n  };\n\n  // Main render pass descriptor\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid DepthBiasSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n  auto& device = getPlatform().getDevice();\n\n  // Create the shadow map texture (depth-only, also sampled for shadow testing)\n  if (shadowMap_ == nullptr) {\n    shadowMap_ = device.createTexture(TextureDesc::new2D(TextureFormat::Z_UNorm24,\n                                                         kShadowMapSize,\n                                                         kShadowMapSize,\n                                                         TextureDesc::TextureUsageBits::Attachment |\n                                                             TextureDesc::TextureUsageBits::Sampled,\n                                                         \"Shadow Map\"),\n                                      &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(shadowMap_ != nullptr);\n  }\n\n  // Create shadow framebuffer (depth-only, no color attachment)\n  if (shadowFramebuffer_ == nullptr) {\n    shadowFramebuffer_ = device.createFramebuffer(\n        FramebufferDesc{\n            .depthAttachment = {.texture = shadowMap_},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(shadowFramebuffer_ != nullptr);\n  }\n\n  // Create or update main framebuffer\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = device.createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // Shadow pipeline state (lazy, cached)\n  if (shadowPipelineState_ == nullptr) {\n    shadowPipelineState_ = device.createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shadowShaderStages_,\n            .targetDesc =\n                {\n                    .depthAttachmentFormat = shadowMap_->getFormat(),\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::CounterClockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(shadowPipelineState_ != nullptr);\n  }\n\n  // Main pipeline state (lazy, cached)\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = device.createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::CounterClockwise,\n            .fragmentUnitSamplerMap = {{0, IGL_NAMEHANDLE(\"shadowMap\")}},\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Create command buffer\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // -----------------------------------------------------------------------\n  // Pass 1: Render scene to shadow map (depth-only) with depth bias\n  // -----------------------------------------------------------------------\n  {\n    const std::shared_ptr<IRenderCommandEncoder> commands =\n        buffer->createRenderCommandEncoder(shadowRenderPass_, shadowFramebuffer_);\n    IGL_DEBUG_ASSERT(commands != nullptr);\n    if (commands) {\n      commands->bindVertexBuffer(1, *vertexBuffer_);\n      commands->bindRenderPipelineState(shadowPipelineState_);\n      commands->bindDepthStencilState(depthStencilState_);\n      commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n\n      // KEY API CALL: Apply depth bias to prevent shadow acne.\n      // depthBias: constant offset added to fragment depth\n      // slopeScale: scales the bias based on the polygon slope relative to the light\n      // clamp: maximum absolute depth bias value (0 = unclamped)\n      commands->setDepthBias(0.005f, 1.5f, 0.0f);\n\n      commands->drawIndexed(kTotalIndexCount);\n      commands->endEncoding();\n    }\n  }\n\n  // -----------------------------------------------------------------------\n  // Pass 2: Render scene with shadow testing\n  // -----------------------------------------------------------------------\n  {\n    const std::shared_ptr<IRenderCommandEncoder> commands =\n        buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n    IGL_DEBUG_ASSERT(commands != nullptr);\n    if (commands) {\n      commands->bindVertexBuffer(1, *vertexBuffer_);\n      commands->bindRenderPipelineState(pipelineState_);\n      commands->bindDepthStencilState(depthStencilState_);\n      commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n\n      // Bind the shadow map texture for shadow testing in the fragment shader\n      commands->bindTexture(0, BindTarget::kFragment, shadowMap_.get());\n      commands->bindSamplerState(0, BindTarget::kFragment, shadowSampler_.get());\n\n      commands->drawIndexed(kTotalIndexCount);\n      commands->endEncoding();\n    }\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/DepthBiasSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass DepthBiasSession : public RenderSession {\n public:\n  explicit DepthBiasSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IRenderPipelineState> shadowPipelineState_;\n  std::shared_ptr<IDepthStencilState> depthStencilState_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IShaderStages> shadowShaderStages_;\n  std::shared_ptr<IBuffer> vertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n  std::shared_ptr<ITexture> shadowMap_;\n  std::shared_ptr<ISamplerState> shadowSampler_;\n  std::shared_ptr<IFramebuffer> shadowFramebuffer_;\n  RenderPassDesc renderPass_;\n  RenderPassDesc shadowRenderPass_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/DrawInstancedSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/DrawInstancedSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/RenderCommandEncoder.h>\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/Device.h>\n#endif\nnamespace igl::shell {\n\nnamespace {\n\n[[maybe_unused]] void stringReplaceAll(std::string& s,\n                                       const std::string& searchString,\n                                       const std::string& replaceString) {\n  size_t pos = 0;\n  while ((pos = s.find(searchString, pos)) != std::string::npos) {\n    s.replace(pos, searchString.length(), replaceString);\n  }\n}\n\nconst char* getMetalShaderSource() {\n  return R\"(\n          #include <metal_stdlib>\n          #include <simd/simd.h>\n          using namespace metal;\n\n          constant float2 pos[6] = {\n            float2(-0.05f,  0.05f),\n            float2( 0.05f, -0.05f),\n            float2( -0.05f, -0.05f),\n            float2(-0.05f,  0.05f),\n            float2(0.05f, -0.05f),\n            float2(0.05f,  0.05f)\n          };\n          constant float3 col[6] = {\n            float3(1.0, 0.0, 0.0),\n            float3(0.0, 1.0, 0.0),\n            float3(0.0, 0.0, 1.0),\n            float3(1.0, 0.0, 0.0),\n            float3(0.0, 1.0, 0.0),\n            float3(0.0, 0.0, 1.0)\n          };\n\n         struct VertexIn{\n            float2 offset [[attribute(0)]];\n         };\n\n          struct VertexOut {\n            float4 position [[position]];\n            float3 uvw;\n          };\n\n          vertex VertexOut vertexShader(uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]],\n                                        VertexIn in [[stage_in]]) {\n            VertexOut out;\n            out.position = float4(pos[vid] + in.offset, 0.0, 1.0);\n            out.uvw = col[vid];\n            return out;\n           }\n\n           fragment float4 fragmentShader(\n                 VertexOut in[[stage_in]]) {\n\n             float4 tex = float4(in.uvw,1.0);\n             return tex;\n           }\n        )\";\n}\n\nconst char* getVulkanVertexShaderSource() {\n  return R\"(#version 460\nlayout (location=0) in vec2 offset;\nlayout (location=0) out vec3 color;\nconst vec2 pos[6] = vec2[6](\n    vec2(-0.05f,  0.05f),\n    vec2( 0.05f, -0.05f),\n    vec2( -0.05f, -0.05f),\n    vec2(-0.05f,  0.05f),\n    vec2(0.05f, -0.05f),\n    vec2(0.05f,  0.05f)\n);\nconst vec3 col[6] = vec3[6](\n\tvec3(1.0, 0.0, 0.0),\n\tvec3(0.0, 1.0, 0.0),\n\tvec3(0.0, 0.0, 1.0),\n    vec3(1.0, 0.0, 0.0),\n    vec3(0.0, 1.0, 0.0),\n    vec3(0.0, 0.0, 1.0)\n);\nvoid main() {\n\tgl_Position = vec4(pos[gl_VertexIndex] + offset , 0.0, 1.0);\n\tcolor = col[gl_VertexIndex];\n}\n)\";\n}\n\nconst char* getVulkanFragmentShaderSource() {\n  return R\"(#version 460\nprecision mediump float;\nprecision highp int;\nlayout (location=0) in vec3 color;\nlayout (location=0) out vec4 out_FragColor;\nvoid main() {\n\tout_FragColor = vec4(color, 1.0);\n}\n)\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n    return nullptr;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL: {\n#if IGL_BACKEND_OPENGL\n    auto glVersion =\n        static_cast<igl::opengl::Device&>(device).getContext().deviceFeatures().getGLVersion();\n    if (glVersion > igl::opengl::GLVersion::v2_1) {\n      auto usesOpenGLES = igl::opengl::DeviceFeatureSet::usesOpenGLES();\n      std::string codeVS(getVulkanVertexShaderSource());\n      stringReplaceAll(codeVS, \"gl_VertexIndex\", \"gl_VertexID\");\n      stringReplaceAll(codeVS, \"460\", usesOpenGLES ? \"300 es\" : \"410\");\n\n      std::string codeFS(getVulkanFragmentShaderSource());\n      stringReplaceAll(codeFS, \"460\", usesOpenGLES ? \"300 es\" : \"410\");\n\n      if (usesOpenGLES) {\n        stringReplaceAll(codeVS, \"layout (location=0) out\", \"out\");\n        stringReplaceAll(codeFS, \"layout (location=0) out\", \"out\");\n        stringReplaceAll(codeFS, \"layout (location=0) in\", \"in\");\n      }\n\n      return igl::ShaderStagesCreator::fromModuleStringInput(\n          device, codeVS.c_str(), \"main\", \"\", codeFS.c_str(), \"main\", \"\", nullptr);\n    } else {\n      IGL_DEBUG_ABORT(\"This sample is incompatible with OpenGL 2.1\");\n      return nullptr;\n    }\n#else\n    return nullptr;\n#endif // IGL_BACKEND_OPENGL\n  }\n  case igl::BackendType::D3D12: {\n    // D3D12 instanced drawing shader\n    // Note: D3D12 clip space Y is flipped vs Vulkan, so we negate Y to match Vulkan behavior\n    static const char* kVS = R\"(\n      static const float2 pos[6] = {\n        float2(-0.05f,  0.05f), float2( 0.05f, -0.05f), float2(-0.05f, -0.05f),\n        float2(-0.05f,  0.05f), float2( 0.05f, -0.05f), float2( 0.05f,  0.05f)\n      };\n      static const float3 col[6] = {\n        float3(1.0, 0.0, 0.0), float3(0.0, 1.0, 0.0), float3(0.0, 0.0, 1.0),\n        float3(1.0, 0.0, 0.0), float3(0.0, 1.0, 0.0), float3(0.0, 0.0, 1.0)\n      };\n      struct VSIn { float2 offset : TEXCOORD0; };\n      struct VSOut { float4 position : SV_POSITION; float3 color : TEXCOORD0; };\n      VSOut main(VSIn v, uint vid : SV_VertexID) {\n        VSOut o;\n        float2 p = pos[vid] + v.offset;\n        o.position = float4(p.x, -p.y, 0.0, 1.0);  // Flip Y for D3D12 clip space\n        o.color = col[vid];\n        return o;\n      }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float3 color : TEXCOORD0; };\n      float4 main(PSIn i) : SV_TARGET { return float4(i.color, 1.0); }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n} // namespace\n\nvoid DrawInstancedSession::initialize() noexcept {\n  // Command queue: backed by different types of GPU HW queues\n  commandQueue_ = getPlatform().getDevice().createCommandQueue({}, nullptr);\n\n  renderPass_.colorAttachments = {{\n      .loadAction = LoadAction::Clear,\n      .storeAction = StoreAction::Store,\n      .clearColor = getPreferredClearColor(),\n  }};\n  renderPass_.depthAttachment = {.loadAction = LoadAction::DontCare};\n\n  // Create Index Buffer\n  const int16_t indexes[6] = {0, 1, 2, 3, 4, 5};\n  indexBuffer_ = getPlatform().getDevice().createBuffer(\n      BufferDesc{\n          .type = BufferDesc::BufferTypeBits::Index, .data = &indexes, .length = sizeof(indexes)},\n      nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_);\n}\n\nvoid DrawInstancedSession::update(SurfaceTextures surfaceTextures) noexcept {\n  const auto dimensions = surfaceTextures.color->getDimensions();\n  framebuffer_ = getPlatform().getDevice().createFramebuffer(\n      FramebufferDesc{.colorAttachments = {{.texture = surfaceTextures.color}}}, nullptr);\n  IGL_DEBUG_ASSERT(framebuffer_);\n\n  if (!renderPipelineStateTriangle_) {\n    const VertexInputStateDesc inputDesc = {\n        .numAttributes = 1,\n        .attributes =\n            {\n                {\n                    .bufferIndex = 1,\n                    .format = VertexAttributeFormat::Float2,\n                    .offset = 0,\n                    .name = \"offset\",\n                    .location = 0,\n                },\n            },\n        .numInputBindings = 1,\n        .inputBindings =\n            {\n                {},\n                {\n                    .stride = sizeof(float) * 2,\n                    .sampleFunction = igl::VertexSampleFunction::Instance,\n                },\n            },\n    };\n    auto vertexInput0 = getPlatform().getDevice().createVertexInputState(inputDesc, nullptr);\n    IGL_DEBUG_ASSERT(vertexInput0 != nullptr);\n\n    const RenderPipelineDesc desc = {\n        .vertexInputState = vertexInput0,\n        .shaderStages = getShaderStagesForBackend(getPlatform().getDevice()),\n        .targetDesc =\n            {\n                .colorAttachments =\n                    {\n                        {\n                            .textureFormat =\n                                framebuffer_->getColorAttachment(0)\n                                    ? framebuffer_->getColorAttachment(0)->getProperties().format\n                                    : TextureFormat::Invalid,\n                        },\n                    },\n                .depthAttachmentFormat =\n                    framebuffer_->getDepthAttachment()\n                        ? framebuffer_->getDepthAttachment()->getProperties().format\n                        : TextureFormat::Invalid,\n            },\n    };\n    renderPipelineStateTriangle_ = getPlatform().getDevice().createRenderPipeline(desc, nullptr);\n    IGL_DEBUG_ASSERT(renderPipelineStateTriangle_);\n  }\n\n  if (!vertexBuffer_) {\n    glm::vec2 translations[100];\n    int index = 0;\n    const float offset = 0.1f;\n    for (int y = -10; y < 10; y += 2) {\n      for (int x = -10; x < 10; x += 2) {\n        glm::vec2 translation;\n        translation.x = (float)x / 10.0f + offset;\n        translation.y = (float)y / 10.0f + offset;\n        translations[index++] = translation;\n      }\n    }\n\n    vertexBuffer_ = getPlatform().getDevice().createBuffer(\n        BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                   .data = translations,\n                   .length = sizeof(glm::vec2) * 100},\n        nullptr);\n    IGL_DEBUG_ASSERT(vertexBuffer_);\n  }\n\n  framebuffer_->updateDrawable(surfaceTextures.color);\n\n  // Command buffers (1-N per thread): create, submit and forget\n  const std::shared_ptr<ICommandBuffer> buffer = commandQueue_->createCommandBuffer({}, nullptr);\n\n  const igl::Viewport viewport = {.x = 0.0f,\n                                  .y = 0.0f,\n                                  .width = (float)dimensions.width,\n                                  .height = (float)dimensions.height,\n                                  .minDepth = 0.0f,\n                                  .maxDepth = +1.0f};\n  const igl::ScissorRect scissor = {\n      .x = 0, .y = 0, .width = (uint32_t)dimensions.width, .height = (uint32_t)dimensions.height};\n\n  // This will clear the framebuffer\n  auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  commands->bindRenderPipelineState(renderPipelineStateTriangle_);\n  commands->bindViewport(viewport);\n  commands->bindScissorRect(scissor);\n  commands->pushDebugGroupLabel(\"Render Triangle\", Color(1, 0, 0));\n  commands->bindVertexBuffer(1, *vertexBuffer_);\n  commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n  commands->drawIndexed(6, 100);\n  commands->popDebugGroupLabel();\n  commands->endEncoding();\n\n  if (shellParams().shouldPresent) {\n    buffer->present(surfaceTextures.color);\n  }\n\n  commandQueue_->submit(*buffer);\n  RenderSession::update(surfaceTextures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/DrawInstancedSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass DrawInstancedSession : public RenderSession {\n public:\n  explicit DrawInstancedSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IRenderPipelineState> renderPipelineStateTriangle_;\n  std::shared_ptr<IBuffer> vertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/EmptySession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/EmptySession.h>\n\nnamespace igl::shell {\n\nvoid EmptySession::initialize() noexcept {\n  getPlatform().getDevice();\n}\n\nvoid EmptySession::update(SurfaceTextures surfaceTextures) noexcept {}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/EmptySession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n\nnamespace igl::shell {\n\nclass EmptySession : public RenderSession {\n public:\n  explicit EmptySession(std::shared_ptr<Platform> platform) : RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/FireworksSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n// Ported from the LightweightVK sample app `008_MeshShaderFireworks.cpp`\n// (https://github.com/corporateshark/lightweightvk). Uses vertex shader\n// billboarding with 4 vertices per particle instead of mesh shaders.\n\n#include <shell/renderSessions/FireworksSession.h>\n\n#include <cmath>\n#include <glm/ext/matrix_clip_space.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <shell/shared/renderSession/AppParams.h>\n#include <shell/shared/renderSession/Fov.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/Device.h>\n#endif\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n\nnamespace igl::shell {\n\nnamespace {\n\n// Uniforms: projection * view matrix (2 entries for single-pass stereo)\nstruct Uniforms {\n  glm::mat4 mvp[2];\n};\n\n[[maybe_unused]] glm::mat4 perspectiveAsymmetricFovRH(const igl::shell::Fov& fov,\n                                                      float nearZ,\n                                                      float farZ) {\n  const float tanLeft = tanf(fov.angleLeft);\n  const float tanRight = tanf(fov.angleRight);\n  const float tanDown = tanf(fov.angleDown);\n  const float tanUp = tanf(fov.angleUp);\n\n  const float tanWidth = tanRight - tanLeft;\n  const float tanHeight = tanUp - tanDown;\n\n  glm::mat4 mat;\n  mat[0][0] = 2.0f / tanWidth;\n  mat[1][0] = 0.0f;\n  mat[2][0] = (tanRight + tanLeft) / tanWidth;\n  mat[3][0] = 0.0f;\n  mat[0][1] = 0.0f;\n  mat[1][1] = 2.0f / tanHeight;\n  mat[2][1] = (tanUp + tanDown) / tanHeight;\n  mat[3][1] = 0.0f;\n  mat[0][2] = 0.0f;\n  mat[1][2] = 0.0f;\n  mat[2][2] = -(farZ + nearZ) / (farZ - nearZ);\n  mat[3][2] = -2.0f * farZ * nearZ / (farZ - nearZ);\n  mat[0][3] = 0.0f;\n  mat[1][3] = 0.0f;\n  mat[2][3] = -1.0f;\n  mat[3][3] = 0.0f;\n  return mat;\n}\n\n[[maybe_unused]] void stringReplaceAll(std::string& s,\n                                       const std::string& searchString,\n                                       const std::string& replaceString) {\n  size_t pos = 0;\n  while ((pos = s.find(searchString, pos)) != std::string::npos) {\n    s.replace(pos, searchString.length(), replaceString);\n  }\n}\n\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n  // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n//   normal (builtin, location 2) = per-vertex particle color (RGB), stored in VertexPTN::nor //\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n  // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// Each particle is a billboarded quad: 4 vertices, 6 indices.\n// The vertex shader expands particle center + corner offset into a screen-aligned quad.\n\n[[nodiscard]] std::string getVulkanVertexShaderSource(bool stereoRendering) {\n  const std::string prolog = stereoRendering ? R\"(#version 460\n#extension GL_OVR_multiview2 : require\nlayout(num_views = 2) in;\n#define VIEW_ID int(gl_ViewID_OVR)\n)\"\n                                             : R\"(#version 460\n#define VIEW_ID 0\n)\";\n  return prolog + R\"(\nlayout (location=0) in vec3 pos;\nlayout (location=1) in vec3 color;\nlayout (location=2) in float flare;\nlayout (location=3) in vec2 corner;\n\nlayout (set = 1, binding = 0, std140) uniform UniformBlock {\n  mat4 mvp[2];\n} ub;\n\nlayout (location=0) out vec3 vColor;\nlayout (location=1) out vec2 vUV;\n\nvoid main() {\n  vec4 center = ub.mvp[VIEW_ID] * vec4(pos, 1.0);\n\n  vec2 size = flare > 0.5 ? vec2(0.05, 0.25) : vec2(0.15, 0.15);\n  vec3 col = flare > 0.5 ? 0.5 * color : color;\n\n  // Billboard offset in clip space\n  vec2 offset = corner * size;\n  gl_Position = center + vec4(offset, 0.0, 0.0);\n\n  vColor = col;\n  vUV = corner * 0.5 + 0.5;\n}\n)\";\n}\n\nconst char* getVulkanFragmentShaderSource() {\n  return R\"(#version 460\nprecision mediump float;\nlayout (location=0) in vec3 vColor;\nlayout (location=1) in vec2 vUV;\nlayout (location=0) out vec4 out_FragColor;\n\nlayout(set = 0, binding = 0) uniform sampler2D particleTex;\n\nvoid main() {\n  float alpha = texture(particleTex, vUV).r;\n  out_FragColor = vec4(vColor * alpha, alpha);\n}\n)\";\n}\n\nconst char* getMetalShaderSource() {\n  return R\"(\n#include <metal_stdlib>\n#include <simd/simd.h>\nusing namespace metal;\n\nstruct Uniforms {\n  float4x4 mvp[2];\n};\n\nstruct VertexIn {\n  packed_float3 pos;\n  packed_float3 color;\n  float  flare;\n  packed_float2 corner;\n};\n\nstruct VertexOut {\n  float4 position [[position]];\n  float3 color;\n  float2 uv;\n};\n\nvertex VertexOut vertexShader(\n    uint vid [[vertex_id]],\n    constant VertexIn* vertices [[buffer(1)]],\n    constant Uniforms& ub [[buffer(0)]]) {\n  VertexIn v = vertices[vid];\n  VertexOut out;\n\n  float3 pos = float3(v.pos);\n  float3 col = float3(v.color);\n  float2 crn = float2(v.corner);\n\n  float4 center = ub.mvp[0] * float4(pos, 1.0);\n\n  float2 size = v.flare > 0.5 ? float2(0.05, 0.25) : float2(0.15, 0.15);\n  float3 color = v.flare > 0.5 ? 0.5 * col : col;\n\n  float2 offset = crn * size;\n  out.position = center + float4(offset, 0.0, 0.0);\n  out.color = color;\n  out.uv = crn * 0.5 + 0.5;\n  return out;\n}\n\nfragment float4 fragmentShader(\n    VertexOut in [[stage_in]],\n    texture2d<float> particleTex [[texture(0)]],\n    sampler linearSampler [[sampler(0)]]) {\n  float alpha = particleTex.sample(linearSampler, in.uv).r;\n  return float4(in.color * alpha, alpha);\n}\n)\";\n}\n\nconst char* getD3D12VertexShaderSource() {\n  return R\"(\ncbuffer UniformBlock : register(b0) {\n  float4x4 mvp[2];\n};\n\nstruct VSInput {\n  float3 pos    : POSITION;\n  float3 color  : COLOR0;\n  float  flare  : TEXCOORD0;\n  float2 corner : TEXCOORD1;\n};\n\nstruct VSOutput {\n  float4 position : SV_POSITION;\n  float3 color    : COLOR0;\n  float2 uv       : TEXCOORD0;\n};\n\nVSOutput main(VSInput input) {\n  VSOutput output;\n  float4 center = mul(mvp[0], float4(input.pos, 1.0));\n\n  float2 size = input.flare > 0.5 ? float2(0.05, 0.25) : float2(0.15, 0.15);\n  float3 color = input.flare > 0.5 ? 0.5 * input.color : input.color;\n\n  float2 offset = input.corner * size;\n  output.position = center + float4(offset.x, -offset.y, 0.0, 0.0);\n  output.color = color;\n  output.uv = input.corner * 0.5 + 0.5;\n  return output;\n}\n)\";\n}\n\nconst char* getD3D12FragmentShaderSource() {\n  return R\"(\nTexture2D particleTex : register(t0);\nSamplerState linearSampler : register(s0);\n\nstruct PSInput {\n  float4 position : SV_POSITION;\n  float3 color    : COLOR0;\n  float2 uv       : TEXCOORD0;\n};\n\nfloat4 main(PSInput input) : SV_Target {\n  float alpha = particleTex.Sample(linearSampler, input.uv).r;\n  return float4(input.color * alpha, alpha);\n}\n)\";\n}\n\n// Interleaved vertex: particle data + corner offset\nstruct InterleavedVertex {\n  glm::vec3 pos;\n  glm::vec3 color;\n  float flare;\n  glm::vec2 corner;\n};\n\nconst glm::vec2 kCornerOffsets[4] = {\n    {-1.0f, -1.0f},\n    {+1.0f, -1.0f},\n    {-1.0f, +1.0f},\n    {+1.0f, +1.0f},\n};\n\n} // namespace\n\n// --- Particle ---\n\nFireworksSession::ParticleStateMessage FireworksSession::Particle::step(const glm::vec3& gravity) {\n  pos += velocity;\n  velocity += gravity;\n  ttl--;\n\n  if (fadingOut) {\n    const float t = static_cast<float>(ttl) / static_cast<float>(initialLifetime);\n    currentColor = baseColor * std::max(t, 0.0f);\n  }\n\n  if (ttl < 0) {\n    return ParticleStateMessage::Kill;\n  }\n  return emission ? ParticleStateMessage::Emission : ParticleStateMessage::None;\n}\n\n// --- ParticleSystem ---\n\nvoid FireworksSession::ParticleSystem::nextFrame(const glm::vec3& gravity,\n                                                 const glm::vec3& viewerPos,\n                                                 std::mt19937& rng) {\n  std::uniform_real_distribution<float> dist01(0.0f, 1.0f);\n  int32_t processedParticles = 0;\n\n  for (int32_t i = 0; i < kMaxParticles; i++) {\n    if (particles[i].alive) {\n      processedParticles++;\n\n      switch (particles[i].step(gravity)) {\n      case ParticleStateMessage::None:\n        break;\n      case ParticleStateMessage::Kill:\n        if (particles[i].spawnExplosion) {\n          addExplosion(particles[i].pos, viewerPos, rng);\n        }\n        particles[i].alive = false;\n        totalParticles--;\n        break;\n      case ParticleStateMessage::Emission: {\n        Particle trail;\n        trail.pos = particles[i].pos;\n        trail.velocity = particles[i].velocity * (dist01(rng) * 0.8f + 0.1f);\n        trail.baseColor = particles[i].currentColor * 0.9f;\n        trail.currentColor = trail.baseColor;\n        trail.ttl = particles[i].ttl >> 2;\n        trail.initialLifetime = std::max(trail.ttl, 1);\n        trail.alive = true;\n        trail.fadingOut = true;\n        addParticle(trail);\n        break;\n      }\n      }\n    } else if (queuedParticles > 0) {\n      particles[i] = particlesStack[--queuedParticles];\n      totalParticles++;\n    } else if (processedParticles >= totalParticles) {\n      return;\n    }\n  }\n}\n\nvoid FireworksSession::ParticleSystem::addParticle(const Particle& particle) {\n  if (queuedParticles < kMaxParticles) {\n    particlesStack[queuedParticles++] = particle;\n  }\n}\n\nvoid FireworksSession::ParticleSystem::addExplosion(const glm::vec3& pos,\n                                                    const glm::vec3& viewerPos,\n                                                    std::mt19937& rng) {\n  const glm::vec3 palette[3] = {\n      {0.15f, 0.2f, 1.0f},\n      {1.0f, 0.15f, 0.2f},\n      {0.1f, 1.0f, 0.15f},\n  };\n\n  // Build an orthonormal basis for the explosion plane perpendicular to the view direction\n  const glm::vec3 toViewer = viewerPos - pos;\n  const float dist = glm::length(toViewer);\n  // Fallback axes if viewer is at the explosion center\n  glm::vec3 right(1.0f, 0.0f, 0.0f);\n  glm::vec3 up(0.0f, 1.0f, 0.0f);\n  if (dist > 0.001f) {\n    const glm::vec3 viewDir = toViewer / dist;\n    // Choose a reference vector that isn't parallel to viewDir\n    const glm::vec3 ref = fabsf(viewDir.y) < 0.99f ? glm::vec3(0.0f, 1.0f, 0.0f)\n                                                   : glm::vec3(1.0f, 0.0f, 0.0f);\n    right = glm::normalize(glm::cross(ref, viewDir));\n    up = glm::cross(viewDir, right);\n  }\n\n  std::uniform_real_distribution<float> dist01(0.0f, 1.0f);\n  std::uniform_int_distribution<int32_t> palDist(0, 2);\n  const int32_t paletteIndex = palDist(rng);\n\n  for (int32_t i = 0; i < 300; i++) {\n    const float radius = dist01(rng) / 10.0f;\n    const float angle = dist01(rng) * 2.0f * static_cast<float>(M_PI);\n    const float depthSpread = (dist01(rng) * 100.0f - 50.0f) / 5000.0f;\n    const glm::vec3 vel =\n        radius * cosf(angle) * right + radius * sinf(angle) * up +\n        depthSpread *\n            glm::normalize(toViewer.length() > 0.001f ? toViewer : glm::vec3(0.0f, 0.0f, 1.0f));\n    const glm::vec3 color = palette[paletteIndex] +\n                            glm::vec3(dist01(rng) / 5.0f, dist01(rng) / 5.0f, dist01(rng) / 5.0f);\n\n    const int32_t lifetime = 90 + static_cast<int32_t>(dist01(rng) * 20.0f);\n    addParticle({\n        .pos = pos,\n        .velocity = vel,\n        .baseColor = color,\n        .currentColor = color,\n        .ttl = lifetime,\n        .initialLifetime = lifetime,\n        .alive = true,\n        .fadingOut = true,\n        .emission = true,\n    });\n  }\n}\n\n// --- FireworksSession ---\n\nvoid FireworksSession::generateParticleTexture(std::vector<uint8_t>& image) {\n  const auto numPixels = static_cast<size_t>(kParticleTextureSize) * kParticleTextureSize;\n// @fb-only\n  // @fb-only\n  // @fb-only\n      // @fb-only\n  // @fb-only\n// @fb-only\n  image.resize(numPixels);\n// @fb-only\n  const float center = 0.5f * (kParticleTextureSize - 1);\n\n  for (int32_t y = 0; y < kParticleTextureSize; y++) {\n    for (int32_t x = 0; x < kParticleTextureSize; x++) {\n      const float dx = static_cast<float>(x) - center;\n      const float dy = static_cast<float>(y) - center;\n      const float dist = sqrtf(dx * dx + dy * dy);\n      const float normalizedDist = dist < center ? dist / center : 1.0f;\n      const float falloff = 1.0f - normalizedDist;\n      const auto value =\n          static_cast<uint8_t>(fminf(255.0f, fmaxf(0.0f, falloff * falloff * falloff * 255.0f)));\n      const size_t pixel = static_cast<size_t>(y) * kParticleTextureSize + x;\n// @fb-only\n      // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n      // @fb-only\n// @fb-only\n      {\n        image[pixel] = value;\n      }\n    }\n  }\n}\n\nstd::unique_ptr<IShaderStages> FireworksSession::getShaderStagesForBackend(IDevice& device,\n                                                                           bool stereoRendering) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan: {\n    const std::string vsSource = getVulkanVertexShaderSource(stereoRendering);\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, vsSource.c_str(), \"main\", \"\", getVulkanFragmentShaderSource(), \"main\", \"\", nullptr);\n  }\n  // @fb-only\n// @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n// @fb-only\n    // @fb-only\n    // @fb-only\n// @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::D3D12:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getD3D12VertexShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getD3D12FragmentShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::OpenGL: {\n#if IGL_BACKEND_OPENGL\n    auto glVersion =\n        static_cast<igl::opengl::Device&>(device).getContext().deviceFeatures().getGLVersion();\n\n    if (glVersion <= igl::opengl::GLVersion::v2_1) {\n      // GLSL 120: attribute/varying, plain uniforms, texture2D\n      const char* vs120 = R\"(#version 120\nattribute vec3 pos;\nattribute vec3 color;\nattribute float flare;\nattribute vec2 corner;\n\nuniform mat4 mvp[2];\n\nvarying vec3 vColor;\nvarying vec2 vUV;\n\nvoid main() {\n  vec4 center = mvp[0] * vec4(pos, 1.0);\n\n  vec2 size = flare > 0.5 ? vec2(0.05, 0.25) : vec2(0.15, 0.15);\n  vec3 col = flare > 0.5 ? 0.5 * color : color;\n\n  vec2 offset = corner * size;\n  gl_Position = center + vec4(offset, 0.0, 0.0);\n\n  vColor = col;\n  vUV = corner * 0.5 + 0.5;\n}\n)\";\n      const char* fs120 = R\"(#version 120\nvarying vec3 vColor;\nvarying vec2 vUV;\n\nuniform sampler2D particleTex;\n\nvoid main() {\n  float alpha = texture2D(particleTex, vUV).r;\n  gl_FragColor = vec4(vColor * alpha, alpha);\n}\n)\";\n      return igl::ShaderStagesCreator::fromModuleStringInput(\n          device, vs120, \"main\", \"\", fs120, \"main\", \"\", nullptr);\n    }\n\n    auto usesOpenGLES = igl::opengl::DeviceFeatureSet::usesOpenGLES();\n\n    std::string codeVS(getVulkanVertexShaderSource(false));\n    stringReplaceAll(codeVS, \"gl_VertexIndex\", \"gl_VertexID\");\n    stringReplaceAll(codeVS, \"#version 460\", usesOpenGLES ? \"#version 300 es\" : \"#version 410\");\n    stringReplaceAll(codeVS,\n                     \"layout (set = 1, binding = 0, std140) uniform UniformBlock\",\n                     \"layout (std140) uniform UniformBlock\");\n\n    std::string codeFS(getVulkanFragmentShaderSource());\n    stringReplaceAll(codeFS, \"#version 460\", usesOpenGLES ? \"#version 300 es\" : \"#version 410\");\n    stringReplaceAll(codeFS, \"precision mediump float;\\n\", \"\");\n    stringReplaceAll(codeFS, \"layout(set = 0, binding = 0) uniform\", \"uniform\");\n\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, codeVS.c_str(), \"main\", \"\", codeFS.c_str(), \"main\", \"\", nullptr);\n#else\n    return nullptr;\n#endif // IGL_BACKEND_OPENGL\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\nvoid FireworksSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Enable passthrough so the background is transparent, dimmed to 0.2\n  appParamsRef().passthroughGetter = []() { return true; };\n  appParamsRef().passthroughOpacity = 0.2f;\n\n  // Allocate particle system on the heap\n  particleSystem_ = std::make_unique<ParticleSystem>();\n\n  commandQueue_ = device.createCommandQueue({}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_.colorAttachments = {{\n      .loadAction = LoadAction::Clear,\n      .storeAction = StoreAction::Store,\n      .clearColor = {0.0f, 0.0f, 0.0f, 1.0f},\n  }};\n  renderPass_.depthAttachment = {.loadAction = LoadAction::DontCare};\n\n  // Particle texture\n  std::vector<uint8_t> texData;\n  generateParticleTexture(texData);\n\n// @fb-only\n  // @fb-only\n                             // @fb-only\n                             // @fb-only\n// @fb-only\n  const auto texFormat = TextureFormat::R_UNorm8;\n// @fb-only\n  const TextureDesc texDesc = TextureDesc::new2D(texFormat,\n                                                 kParticleTextureSize,\n                                                 kParticleTextureSize,\n                                                 TextureDesc::TextureUsageBits::Sampled,\n                                                 \"Particle Texture\");\n  particleTexture_ = device.createTexture(texDesc, nullptr);\n  IGL_DEBUG_ASSERT(particleTexture_ != nullptr);\n  particleTexture_->upload(\n      TextureRangeDesc::new2D(0, 0, kParticleTextureSize, kParticleTextureSize), texData.data());\n\n  sampler_ = device.createSamplerState(\n      SamplerStateDesc{\n          .minFilter = SamplerMinMagFilter::Linear,\n          .magFilter = SamplerMinMagFilter::Linear,\n          .debugName = \"Sampler: linear\",\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(sampler_ != nullptr);\n\n  // Uniform buffer\n  const Uniforms uniforms{.mvp = {glm::mat4(1.0f), glm::mat4(1.0f)}};\n  uniformBuffer_ = device.createBuffer(\n      {\n          .type = BufferDesc::BufferTypeBits::Uniform,\n          .data = &uniforms,\n          .length = sizeof(Uniforms),\n          .storage = ResourceStorage::Shared,\n          .hint = BufferDesc::BufferAPIHintBits::UniformBlock,\n          .debugName = \"fireworks_uniforms\",\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(uniformBuffer_ != nullptr);\n\n  // Pre-allocate vertex buffer for max particles * 4 vertices\n  const size_t maxVerts = static_cast<size_t>(kMaxParticles) * 4;\n// @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n      // @fb-only\n  // @fb-only\n// @fb-only\n  const auto vbStorage = ResourceStorage::Shared;\n  const size_t vertexStride = sizeof(InterleavedVertex);\n  const auto ibStorage = ResourceStorage::Shared;\n// @fb-only\n  vertexBuffer_ = device.createBuffer(\n      {\n          .type = BufferDesc::BufferTypeBits::Vertex,\n          .length = maxVerts * vertexStride,\n          .storage = vbStorage,\n          .debugName = \"fireworks_vertices\",\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexBuffer_ != nullptr);\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n\n  // Pre-allocate index buffer (uint16: max vertices = 16384*4 = 65536 <= 65536)\n  const size_t maxIndices = static_cast<size_t>(kMaxParticles) * 6;\n  std::vector<uint16_t> indices(maxIndices);\n  for (int32_t i = 0; i < kMaxParticles; i++) {\n    const uint16_t base = static_cast<uint16_t>(i) * 4;\n    const size_t idx = static_cast<size_t>(i) * 6;\n    indices[idx + 0] = base + 0;\n    indices[idx + 1] = base + 1;\n    indices[idx + 2] = base + 2;\n    indices[idx + 3] = base + 1;\n    indices[idx + 4] = base + 3;\n    indices[idx + 5] = base + 2;\n  }\n  indexBuffer_ = device.createBuffer(\n      {\n          .type = BufferDesc::BufferTypeBits::Index,\n          .data = indices.data(),\n          .length = maxIndices * sizeof(uint16_t),\n          .storage = ibStorage,\n          .debugName = \"fireworks_indices\",\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_ != nullptr);\n\n  gpuVertices_.reserve(static_cast<size_t>(kMaxParticles));\n}\n\nvoid FireworksSession::update(SurfaceTextures surfaceTextures) noexcept {\n  if (!surfaceTextures.color) {\n    return;\n  }\n  auto& device = getPlatform().getDevice();\n  const auto dimensions = surfaceTextures.color->getDimensions();\n\n  // Detect single-pass stereo: viewParams has 2 entries and surface texture is a 2-layer array\n  const bool useStereo = shellParams().shellControlsViewParams &&\n                         shellParams().viewParams.size() > 1 &&\n                         surfaceTextures.color->getNumLayers() > 1;\n\n  // Create/update framebuffer\n  if (framebuffer_ == nullptr) {\n    const auto mode = useStereo ? FramebufferMode::Stereo : FramebufferMode::Mono;\n    framebuffer_ = device.createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = surfaceTextures.color}},\n            .mode = mode,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures.color);\n  }\n\n  // Create pipeline on first use\n  if (!renderPipelineState_) {\n    auto shaderStages = getShaderStagesForBackend(device, useStereo);\n    if (!shaderStages) {\n      return;\n    }\n\n// @fb-only\n    // @fb-only\n        // @fb-only\n// @fb-only\n    const uint32_t vbIndex = 1u;\n// @fb-only\n    VertexInputStateDesc inputDesc = {\n        .numAttributes = 4,\n        .attributes =\n            {\n                {\n                    .bufferIndex = vbIndex,\n                    .format = VertexAttributeFormat::Float3,\n                    .offset = offsetof(InterleavedVertex, pos),\n                    .name = \"pos\",\n                    .location = 0,\n                },\n                {\n                    .bufferIndex = vbIndex,\n                    .format = VertexAttributeFormat::Float3,\n                    .offset = offsetof(InterleavedVertex, color),\n                    .name = \"color\",\n                    .location = 1,\n                },\n                {\n                    .bufferIndex = vbIndex,\n                    .format = VertexAttributeFormat::Float1,\n                    .offset = offsetof(InterleavedVertex, flare),\n                    .name = \"flare\",\n                    .location = 2,\n                },\n                {\n                    .bufferIndex = vbIndex,\n                    .format = VertexAttributeFormat::Float2,\n                    .offset = offsetof(InterleavedVertex, corner),\n                    .name = \"corner\",\n                    .location = 3,\n                },\n            },\n        .numInputBindings = 1,\n    };\n// @fb-only\n    // @fb-only\n      // @fb-only\n    // @fb-only\n// @fb-only\n    {\n      inputDesc.inputBindings[vbIndex].stride = sizeof(InterleavedVertex);\n    }\n    vertexInput_ = device.createVertexInputState(inputDesc, nullptr);\n    IGL_DEBUG_ASSERT(vertexInput_ != nullptr);\n\n    const RenderPipelineDesc pipelineDesc = {\n        .vertexInputState = vertexInput_,\n        .shaderStages = std::move(shaderStages),\n        .targetDesc =\n            {\n                .colorAttachments = {{\n                    .textureFormat =\n                        framebuffer_->getColorAttachment(0)\n                            ? framebuffer_->getColorAttachment(0)->getProperties().format\n                            : TextureFormat::Invalid,\n                    .blendEnabled = true,\n                    .rgbBlendOp = BlendOp::Add,\n                    .alphaBlendOp = BlendOp::Add,\n                    .srcRGBBlendFactor = BlendFactor::SrcAlpha,\n                    .srcAlphaBlendFactor = BlendFactor::SrcAlpha,\n                    .dstRGBBlendFactor = BlendFactor::One,\n                    .dstAlphaBlendFactor = BlendFactor::One,\n                }},\n            },\n        .cullMode = igl::CullMode::Disabled,\n        .fragmentUnitSamplerMap = {{0, IGL_NAMEHANDLE(\"particleTex\")}},\n    };\n    renderPipelineState_ = device.createRenderPipeline(pipelineDesc, nullptr);\n    IGL_DEBUG_ASSERT(renderPipelineState_ != nullptr);\n  }\n\n  // Update uniforms: build per-eye MVP matrices\n  const float aspectRatio =\n      static_cast<float>(dimensions.width) / static_cast<float>(dimensions.height);\n  // Scene offset: place particle origin 8m in front of the viewer\n  const glm::mat4 sceneOffset = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -8.0f));\n  const glm::mat4 monoProj = glm::perspective(glm::radians(90.0f), aspectRatio, 0.1f, 100.0f);\n\n  Uniforms uniforms{};\n  if (useStereo) {\n    // Anchor the scene in world space on the first stereo frame:\n    // compute a model matrix that places the fireworks 8m in front of the initial head pose.\n    if (!sceneAnchored_) {\n      const glm::mat4 headPose = glm::inverse(shellParams().viewParams[0].viewMatrix);\n      sceneModelMatrix_ = headPose * sceneOffset;\n      sceneAnchored_ = true;\n    }\n    // Single-pass stereo: fill both MVP matrices from shell-provided view params\n    for (size_t i = 0; i < std::min(shellParams().viewParams.size(), size_t(2)); ++i) {\n      const auto viewIdx = shellParams().viewParams[i].viewIndex;\n      const glm::mat4 proj =\n          perspectiveAsymmetricFovRH(shellParams().viewParams[i].fov, 0.1f, 100.0f);\n      uniforms.mvp[viewIdx] = proj * shellParams().viewParams[i].viewMatrix * sceneModelMatrix_;\n    }\n  } else {\n    uniforms.mvp[0] = monoProj * sceneOffset;\n    uniforms.mvp[1] = uniforms.mvp[0];\n  }\n\n  // Compute head position and forward direction in scene-local space so\n  // new rockets launch in front of wherever the user is currently looking,\n  // and explosions orient toward the viewer.\n  // In scene-local space, the initial head is at (0, 0, 8) looking toward -Z.\n  // Fireworks originally launch 8 units ahead at (spreadX, -5, 0).\n  glm::vec3 viewerLocalPos(0.0f, 0.0f, 8.0f); // default: initial head position\n  glm::vec2 launchCenter(0.0f, 0.0f); // XZ center of launch area\n  glm::vec2 launchPerp(1.0f, 0.0f); // perpendicular spread direction\n  if (useStereo && sceneAnchored_) {\n    const glm::mat4 invScene = glm::inverse(sceneModelMatrix_);\n    const glm::mat4 headPose = glm::inverse(shellParams().viewParams[0].viewMatrix);\n    // Head position in scene-local space\n    viewerLocalPos = glm::vec3(invScene * headPose[3]);\n    // Head forward direction in scene-local XZ plane\n    const glm::vec3 fwd3 = glm::vec3(invScene * headPose * glm::vec4(0.0f, 0.0f, -1.0f, 0.0f));\n    const glm::vec2 fwd(fwd3.x, fwd3.z);\n    const float fwdLen = glm::length(fwd);\n    if (fwdLen > 0.001f) {\n      const glm::vec2 fwdNorm = fwd / fwdLen;\n      // Launch center: 8 units ahead of head in XZ\n      launchCenter = glm::vec2(viewerLocalPos.x, viewerLocalPos.z) + fwdNorm * 8.0f;\n      // Spread direction: perpendicular to forward in XZ\n      launchPerp = glm::vec2(-fwdNorm.y, fwdNorm.x);\n    }\n  }\n\n  // Simulate particles (single-pass: update() called once per frame)\n  {\n    const float deltaSeconds = getDeltaSeconds();\n    const glm::vec3 gravity(0.0f, -0.001f, 0.0f);\n\n    accTime_ += deltaSeconds;\n\n    while (accTime_ >= kTimeQuantum) {\n      accTime_ -= kTimeQuantum;\n      particleSystem_->nextFrame(gravity, viewerLocalPos, rng_);\n\n      // Randomly shoot new fireworks in front of the user\n      std::uniform_real_distribution<float> dist01(0.0f, 1.0f);\n      if (dist01(rng_) * 150.0f <= 1.0f) {\n        const glm::vec3 baseColor(0.8f, 0.9f, 1.0f);\n        const float spread = (dist01(rng_) * 100.0f - 50.0f) / 10.0f;\n        const glm::vec2 launchXZ = launchCenter + launchPerp * spread;\n        particleSystem_->addParticle({\n            .pos = glm::vec3(launchXZ.x, -5.0f, launchXZ.y),\n            .velocity = glm::vec3((dist01(rng_) * 100.0f - 50.0f) / 500.0f,\n                                  0.25f + dist01(rng_) * 0.4f,\n                                  (dist01(rng_) * 100.0f - 50.0f) / 500.0f),\n            .baseColor = baseColor,\n            .currentColor = baseColor,\n            .ttl = 20,\n            .initialLifetime = 20,\n            .alive = true,\n            .flare = true,\n            .spawnExplosion = true,\n        });\n      }\n    }\n  }\n\n  // Build vertex data (4 vertices per particle).\n  size_t numParticles = 0;\n\n// @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // clang-format off\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n    // @fb-only\n    // clang-format on\n    // @fb-only\n      // @fb-only\n          // @fb-only\n          // @fb-only\n      // @fb-only\n          // @fb-only\n          // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n        // @fb-only\n    // @fb-only\n      // @fb-only\n        // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n          // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n      // @fb-only\n      // @fb-only\n    // @fb-only\n    // @fb-only\n      // @fb-only\n          // @fb-only\n          // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n  {\n    // Collect alive particles into GPU vertex data\n    gpuVertices_.clear();\n    for (int32_t i = 0; i < kMaxParticles; i++) {\n      if (particleSystem_->particles[i].alive) {\n        const auto& p = particleSystem_->particles[i];\n        gpuVertices_.push_back({\n            .pos = p.pos,\n            .color = p.currentColor,\n            .flare = p.flare ? 1.0f : 0.0f,\n        });\n      }\n    }\n    numParticles = gpuVertices_.size();\n\n    std::vector<InterleavedVertex> interleavedVerts;\n    interleavedVerts.reserve(numParticles * 4);\n    for (size_t i = 0; i < numParticles; i++) {\n      const auto& gv = gpuVertices_[i];\n      for (auto kCornerOffset : kCornerOffsets) {\n        interleavedVerts.push_back({\n            .pos = gv.pos,\n            .color = gv.color,\n            .flare = gv.flare,\n            .corner = kCornerOffset,\n        });\n      }\n    }\n\n    if (!interleavedVerts.empty()) {\n      vertexBuffer_->upload(interleavedVerts.data(),\n                            BufferRange(interleavedVerts.size() * sizeof(InterleavedVertex), 0));\n    }\n  }\n\n// @fb-only\n  // @fb-only\n  // @fb-only\n// @fb-only\n  {\n    uniformBuffer_->upload(&uniforms, BufferRange(sizeof(Uniforms), 0));\n  }\n\n  // Use shell-provided clear color (transparent for passthrough, black otherwise)\n  if (shellParams().clearColorValue.has_value()) {\n    const auto& c = shellParams().clearColorValue.value();\n    renderPass_.colorAttachments[0].clearColor = {c.r, c.g, c.b, c.a};\n  }\n\n  // Render\n  const auto buffer = commandQueue_->createCommandBuffer({}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n\n  const igl::Viewport viewport = {0.0f,\n                                  0.0f,\n                                  static_cast<float>(dimensions.width),\n                                  static_cast<float>(dimensions.height),\n                                  0.0f,\n                                  +1.0f};\n  const igl::ScissorRect scissor = {\n      0, 0, static_cast<uint32_t>(dimensions.width), static_cast<uint32_t>(dimensions.height)};\n\n  auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindRenderPipelineState(renderPipelineState_);\n    commands->bindViewport(viewport);\n    commands->bindScissorRect(scissor);\n    commands->pushDebugGroupLabel(\"Fireworks\", Color(1, 0.5f, 0));\n\n// @fb-only\n    // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n          // @fb-only\n      // @fb-only\n      // @fb-only\n    // @fb-only\n// @fb-only\n    {\n      commands->bindVertexBuffer(1, *vertexBuffer_);\n      if (device.hasFeature(DeviceFeatures::UniformBlocks)) {\n        commands->bindBuffer(0, uniformBuffer_.get());\n      } else if (device.hasFeature(DeviceFeatures::BindUniform)) {\n        const UniformDesc mvpDesc = {\n            .location = renderPipelineState_->getIndexByName(\"mvp\", ShaderStage::Vertex),\n            .type = UniformType::Mat4x4,\n            .numElements = 2,\n            .offset = offsetof(Uniforms, mvp),\n        };\n        commands->bindUniform(mvpDesc, &uniforms);\n      }\n    }\n\n    commands->bindTexture(0, BindTarget::kFragment, particleTexture_.get());\n    commands->bindSamplerState(0, BindTarget::kFragment, sampler_.get());\n\n    commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n    if (numParticles > 0) {\n      commands->drawIndexed(numParticles * 6);\n    }\n\n    commands->popDebugGroupLabel();\n    commands->endEncoding();\n  }\n\n  if (shellParams().shouldPresent) {\n    buffer->present(surfaceTextures.color);\n  }\n\n  commandQueue_->submit(*buffer);\n  RenderSession::update(surfaceTextures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/FireworksSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n// Ported from the LightweightVK sample app `008_MeshShaderFireworks.cpp`\n// (https://github.com/corporateshark/lightweightvk). Uses vertex shader\n// billboarding with 4 vertices per particle instead of mesh shaders.\n\n#pragma once\n\n#include <glm/glm.hpp>\n#include <memory>\n#include <random>\n#include <vector>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass FireworksSession : public RenderSession {\n public:\n  explicit FireworksSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n// @fb-only\n  // @fb-only\n// @fb-only\n  static constexpr int32_t kMaxParticles = 16384;\n// @fb-only\n  static constexpr int32_t kParticleTextureSize = 64;\n\n  enum class ParticleStateMessage : uint8_t {\n    None = 0,\n    Kill = 1,\n    Emission = 2,\n  };\n\n  struct Particle {\n    glm::vec3 pos{0.0f};\n    glm::vec3 velocity{0.0f};\n    glm::vec3 baseColor{0.0f};\n    glm::vec3 currentColor{0.0f};\n    int32_t ttl{0};\n    int32_t initialLifetime{1};\n    bool alive{false};\n    bool flare{false};\n    bool spawnExplosion{false};\n    bool fadingOut{false};\n    bool emission{false};\n\n    ParticleStateMessage step(const glm::vec3& gravity);\n  };\n\n  struct ParticleSystem {\n    std::vector<Particle> particles;\n    std::vector<Particle> particlesStack;\n    int32_t totalParticles{0};\n    int32_t queuedParticles{0};\n\n    ParticleSystem() : particles(kMaxParticles), particlesStack(kMaxParticles) {}\n\n    void nextFrame(const glm::vec3& gravity, const glm::vec3& viewerPos, std::mt19937& rng);\n    void addParticle(const Particle& particle);\n    void addExplosion(const glm::vec3& pos, const glm::vec3& viewerPos, std::mt19937& rng);\n  };\n\n  struct GpuVertex {\n    glm::vec3 pos;\n    glm::vec3 color;\n    float flare{0.0f};\n  };\n\n  std::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device, bool stereoRendering);\n  void generateParticleTexture(std::vector<uint8_t>& image);\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IRenderPipelineState> renderPipelineState_;\n  std::shared_ptr<IVertexInputState> vertexInput_;\n  std::shared_ptr<IBuffer> vertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n  std::shared_ptr<ITexture> particleTexture_;\n  std::shared_ptr<ISamplerState> sampler_;\n  std::shared_ptr<IBuffer> uniformBuffer_;\n\n  std::unique_ptr<ParticleSystem> particleSystem_;\n  std::vector<GpuVertex> gpuVertices_;\n// @fb-only\n  // @fb-only\n// @fb-only\n  std::mt19937 rng_{42};\n  double accTime_{0.0};\n  glm::mat4 sceneModelMatrix_{1.0f};\n  bool sceneAnchored_{false};\n  static constexpr float kTimeQuantum = 0.02f;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/GPUStressSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/GPUStressSession.h>\n\n#include <IGLU/imgui/Session.h>\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <cmath>\n#include <cstddef>\n#include <cstdint>\n#include <cstdio>\n#include <cstdlib>\n#include <future>\n#include <glm/detail/qualifier.hpp>\n#include <glm/ext/matrix_clip_space.hpp>\n#include <glm/fwd.hpp>\n#include <memory>\n#include <random>\n#include <shell/shared/platform/DisplayContext.h>\n#include <shell/shared/renderSession/AppParams.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace {\nuint32_t customArc4random() {\n  return static_cast<uint32_t>(rand()) * (0xffffffff / RAND_MAX);\n}\n} // namespace\n\n#if IGL_PLATFORM_ANDROID\n\n#include <sys/syscall.h>\n#include <unistd.h>\n#endif\n\nnamespace igl::shell {\n\nnamespace {\n\nconstexpr uint32_t kMsaaSamples = 4u; // this is the max number possible\nconstexpr float kScaleFill = 1.f;\n\nconstexpr float kHalf = .5f;\n\n} // namespace\n\nGPUStressSession::GPUStressSession(std::shared_ptr<Platform> platform) :\n  RenderSession(std::move(platform)),\n  fps_(false),\n  vertexData0_{\n      VertexPosUvw{.position = {-kHalf, kHalf, -kHalf},\n                   .uvw = {0.0, 1.0, 0.0, 1.0},\n                   .baseColor = {1.0, 1.0, 1.0, 1.0}},\n      VertexPosUvw{.position = {kHalf, kHalf, -kHalf},\n                   .uvw = {1.0, 1.0, 1.0, 1.0},\n                   .baseColor = {1.0, 1.0, 1.0, 1.0}},\n      VertexPosUvw{.position = {-kHalf, -kHalf, -kHalf},\n                   .uvw = {0.0, 0.0, 0.0, 0.0},\n                   .baseColor = {1.0, 1.0, 1.0, 1.0}},\n      VertexPosUvw{.position = {kHalf, -kHalf, -kHalf},\n                   .uvw = {1.0, 0.0, 1.0, 0.0},\n                   .baseColor = {1.0, 1.0, 1.0, 1.0}},\n      VertexPosUvw{.position = {kHalf, kHalf, kHalf},\n                   .uvw = {1.0, 1.0, 1.0, 1.0},\n                   .baseColor = {1.0, 1.0, 1.0, 1.0}},\n      VertexPosUvw{.position = {-kHalf, kHalf, kHalf},\n                   .uvw = {0.0, 1.0, 0.0, 1.0},\n                   .baseColor = {1.0, 1.0, 1.0, 1.0}},\n      VertexPosUvw{.position = {kHalf, -kHalf, kHalf},\n                   .uvw = {1.0, 0.0, 1.0, 0.0},\n                   .baseColor = {1.0, 1.0, 1.0, 1.0}},\n      VertexPosUvw{.position = {-kHalf, -kHalf, kHalf},\n                   .uvw = {0.0, 0.0, 0.0, 0.0},\n                   .baseColor = {1.0, 1.0, 1.0, 1.0}},\n  },\n  indexData0_{0, 1, 2, 1, 3, 2, 1, 4, 3, 4, 6, 3, 4, 5, 6, 5, 7, 6,\n              5, 0, 7, 0, 2, 7, 5, 4, 0, 4, 1, 0, 2, 3, 7, 3, 6, 7},\n  indexData_{indexData0_.begin(), indexData0_.end()} {};\n\nnamespace {\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nstd::string getLightingFunc(const char* matrixProj, const char* matrixMod) {\n  const std::string var1 = matrixProj;\n  const std::string var2 = matrixMod;\n  auto func = std::string(\n      R\"(\n\n      vec3 calcLighting(vec3 lightDir, vec3 lightPosition,  vec3 normal, float attenuation, vec3 color)\n      {\n        normal.xyz = ()\" +\n      var1 + \"*\" + var2 +\n      R\"(* vec4(normal, 0.f)).xyz;\n        normal = normalize(normal);\n        float angle = dot(normalize(lightDir), normal);\n        float distance = length(lightPosition - screen_pos);\n        float intensity = smoothstep(attenuation, 0.f, distance);\n        intensity = clamp(intensity, 0.0, 1.0);\n        return intensity * color * angle;\n      }\n      )\");\n\n  return func;\n}\n} // namespace\n\nstd::string GPUStressSession::getLightingCalc() const {\n  std::string params = \"\\nvec4 lightFactor = color;\\n\";\n  if (lightCount_) {\n    params = \"\\nvec4 lightFactor = vec4(0.2, 0.2, 0.2, 1.0);\\n\";\n  }\n  for (int i = 0; i < lightCount_; ++i) {\n    char tmp[256];\n    snprintf(tmp,\n             sizeof(tmp),\n             \"const vec3 lightColor%d = vec3(%f, %f, %f);\\n\",\n             i,\n             i % 3 == 0 ? 1.0 : static_cast<float>(customArc4random() % 32) / 32.f,\n             i % 3 == 1 ? 1.0 : static_cast<float>(customArc4random() % 32) / 32.f,\n             i % 3 == 2 ? 1.0 : static_cast<float>(customArc4random() % 32) / 32.f);\n    params += tmp;\n    snprintf(tmp,\n             sizeof(tmp),\n             \"const vec3 lightPos%d = vec3(%f, %f, %f);\\n\",\n             i,\n             -1.f + static_cast<float>(customArc4random() % 32) / 16.f,\n             -1.f + static_cast<float>(customArc4random() % 32) / 16.f,\n             -1.f + static_cast<float>(customArc4random() % 32) / 16.f);\n    params += tmp;\n    snprintf(\n        tmp,\n        sizeof(tmp),\n        \"lightFactor.xyz += calcLighting(-lightPos%d, lightPos%d, color.xyz, 1.0, lightColor%d);\\n\",\n        i,\n        i,\n        i);\n    params += tmp;\n  }\n  return params;\n}\n\nnamespace {\nstd::string getVulkanVertexShaderSource(bool multiView) {\n  return std::string(multiView ? \"\\n#define MULTIVIEW 1\\n\" : \"\") + R\"(\n#ifdef MULTIVIEW\n#extension GL_EXT_multiview : enable\n#endif\nlayout(location = 0) in vec3 position;\nlayout(location = 1) in vec4 uvw_in;\nlayout(location = 2) in vec4 base_color;\n\nlayout (location = 0) out vec4 color;\nlayout (location = 1) out vec4 uv;\nlayout (location = 2) out vec3 screen_pos;\n\nlayout(push_constant) uniform PushConstants {\n    mat4 projectionMatrix;\n    mat4 modelViewMatrix;\n} pc;\n\nout gl_PerVertex { vec4 gl_Position; };\n\nvoid main() {\n  #ifdef MULTIVIEW\n    color = vec4(base_color.x, abs(float(gl_ViewIndex)-1.f) * base_color.y, base_color.z, base_color.w);\n  #elif\n    color = base_color;\n  #endif\n\n    uv = uvw_in;\n    gl_Position = pc.projectionMatrix * pc.modelViewMatrix * vec4(position.xyz, 1.0);\n    screen_pos = gl_Position.xyz/gl_Position.w;\n})\";\n}\n} // namespace\n\nstd::string GPUStressSession::getVulkanFragmentShaderSource() const {\n  return R\"(\nlayout(location = 0) out vec4 fColor;\nlayout(location = 0) in vec4 color;\nlayout(location = 1) in vec4 uv;\nlayout(location = 2) in vec3 screen_pos;\n\nlayout (set = 0, binding = 0) uniform sampler2D uTex;\nlayout (set = 0, binding = 1) uniform sampler2D uTex2;\n\nlayout(push_constant) uniform PushConstants {\n    mat4 projectionMatrix;\n    mat4 modelViewMatrix;\n} pc;\n)\" + getLightingFunc(\"pc.projectionMatrix\", \"pc.modelViewMatrix\") +\n         R\"(\n                      void main() {)\" +\n         getLightingCalc() +\n         R\"(\n  fColor = lightFactor * texture(uTex2, uv.xy) * texture(uTex, uv.zw);\n})\";\n}\n\nstd::unique_ptr<IShaderStages> GPUStressSession::getShaderStagesForBackend(\n    IDevice& device) const noexcept {\n  const bool multiView = device.hasFeature(DeviceFeatures::Multiview);\n  switch (device.getBackendType()) {\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getVulkanVertexShaderSource(multiView).c_str(),\n        \"main\",\n        \"\",\n        getVulkanFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  }\n}\n\nvoid GPUStressSession::addNormalsToCube() {\n  if (!lightCount_) {\n    return;\n  }\n\n  const size_t faceCount = indexData_.size() / 6;\n  bool normalSet[36] = {false};\n  for (size_t j = 0; j < faceCount; j++) {\n    const size_t offset = j * 6;\n    auto vec1 = vertexData0_.at(indexData_[offset + 1]).position -\n                vertexData0_.at(indexData_[offset + 2]).position;\n    auto vec2 = vertexData0_.at(indexData_[offset + 1]).position -\n                vertexData0_.at(indexData_.at(offset + 0)).position;\n    auto normal = glm::normalize(glm::cross(vec1, vec2));\n    std::vector<int> indexremap;\n    indexremap.resize(24, -1);\n\n    for (size_t i = offset; i < offset + 6; i++) {\n      const size_t oldIndex = indexData_[i];\n      if (indexremap.at(oldIndex) != -1) {\n        indexData_.at(i) = indexremap[oldIndex];\n      } else if (!normalSet[oldIndex]) {\n        vertexData_.at(oldIndex).baseColor = glm::vec4(normal, 1.0);\n        normalSet[oldIndex] = true;\n        indexremap.at(oldIndex) = oldIndex;\n      } else {\n        auto vertex = vertexData0_.at(oldIndex);\n        vertex.baseColor = glm::vec4(normal, 1.0);\n        vertexData_.push_back(vertex);\n        const size_t nextIndex = (vertexData_.size() - 1);\n        indexData_.at(i) = nextIndex;\n        normalSet[nextIndex] = true;\n        indexremap.at(oldIndex) = nextIndex;\n      }\n    }\n  }\n}\n\nnamespace {\nbool isDeviceCompatible(IDevice& device) noexcept {\n  const auto backendtype = device.getBackendType();\n  if (backendtype == BackendType::OpenGL) {\n    const auto shaderVersion = device.getShaderVersion();\n    if (shaderVersion.majorVersion >= 3 || shaderVersion.minorVersion >= 30) {\n      return true;\n    }\n  }\n\n  if (backendtype == BackendType::Vulkan) {\n    return true;\n  }\n  return false;\n}\n\nint setCurrentThreadAffinityMask(int mask) {\n#if IGL_PLATFORM_ANDROID\n  int err, syscallres;\n  const pid_t pid = gettid();\n  syscallres = syscall(__NR_sched_setaffinity, pid, sizeof(mask), &mask);\n  if (syscallres) {\n    err = errno;\n    IGL_LOG_ERROR(\"Set thread affinity failed. with mask 0x%x and error 0x%x\\n\", mask, err);\n    return err;\n  }\n#else\n  IGL_LOG_ERROR(\"Set thread affinity not supported on this platorm\");\n  return -1;\n#endif\n\n  return 0;\n}\n\ndouble calcPi(int numberOfDivisions, int core) {\n  double pi = 0.0;\n\n  if (core >= 0) {\n    setCurrentThreadAffinityMask((1 << core));\n  }\n  for (int i = 0; i <= numberOfDivisions; ++i) {\n    const double numerator = 1.0;\n    const double denominator = std::sqrt(1.0 + std::pow(-1.0, i));\n    if (denominator > 0.f) {\n      pi += numerator / denominator;\n    }\n  }\n  return pi * 4.0;\n}\n} // namespace\n\nvoid GPUStressSession::thrashCPU() noexcept {\n  static std::vector<std::future<double>> futures;\n  static unsigned int threadSpawnId = 0;\n  if (goSlowOnCpu_) {\n    // don't fall off the array\n    while (threadIds_.size() < threadCount_) {\n      threadIds_.push_back(-1);\n    }\n    if (!threadCount_) {\n      pi_ = calcPi(goSlowOnCpu_, -1);\n    }\n    while (futures.size() < threadCount_) {\n      auto future = std::async(std::launch::async, [this] {\n        return calcPi(goSlowOnCpu_, threadIds_[threadSpawnId % threadCount_]);\n      });\n\n      futures.push_back(std::move(future));\n      threadSpawnId++;\n    }\n\n    for (int i = futures.size() - 1; i > -1; i--) {\n      auto& future = futures.at(i);\n\n      // Use wait_for() with zero milliseconds to check thread status.\n      auto status = future.wait_for(std::chrono::milliseconds(0));\n\n      if (status == std::future_status::ready) {\n        pi_ += future.get();\n        futures.erase(futures.begin() + i);\n      }\n    }\n  }\n}\n\nfloat GPUStressSession::doReadWrite(std::vector<std::vector<std::vector<float>>>& memBlock,\n                                    // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                                    int numBlocks,\n                                    int numRows,\n                                    int numCols,\n                                    int threadId) {\n  if (threadId != -1) {\n    setCurrentThreadAffinityMask(1 << threadId);\n  }\n  std::mt19937 gen(0);\n  std::uniform_int_distribution<> randBlocks(0, numBlocks - 1);\n  std::uniform_int_distribution<> randRows(0, numRows - 1);\n  std::uniform_int_distribution<> randCols(0, numCols - 1);\n  float sum = 0.f;\n  for (int i = 0; i < memoryWrites_; i++) {\n    const int block = randBlocks(gen);\n    const int row = randRows(gen);\n    const int col = randCols(gen);\n    memBlock[block].at(row)[col] = customArc4random();\n  }\n\n  for (int i = 0; i < memoryReads_; i++) {\n    const int block = randBlocks(gen);\n    const int row = randRows(gen);\n    const int col = randCols(gen);\n    sum += i % 1 ? -1.f : 1.f * memBlock.at(block)[row][col];\n  }\n\n  return sum;\n}\n\nvoid GPUStressSession::allocateMemory() {\n  if (thrashMemory_) {\n    const static size_t kBlocks = memorySize_;\n    const static size_t kRows = 1024;\n    const static size_t kCols = 1024;\n    if (memBlock_.empty()) {\n      memBlock_.resize((kBlocks));\n      for (auto& block : memBlock_) {\n        block.resize(kRows);\n        for (auto& row : block) {\n          row.resize(kCols, 0);\n          for (int i = 0; i < kCols; i++) {\n            row.at(i) = (i);\n          }\n        }\n      }\n    }\n  }\n}\n\nvoid GPUStressSession::thrashMemory() noexcept {\n  if (!thrashMemory_) {\n    return;\n  }\n\n  const static size_t kBlocks = memorySize_;\n  const static size_t kRows = 1024;\n  const static size_t kCols = 1024;\n\n  if (!threadCount_) {\n    memoryVal_.store(doReadWrite(memBlock_, kBlocks, kRows, kCols, -1));\n  } else {\n    static std::vector<std::future<float>> futures;\n    static int memoryThreadId = 0;\n\n    while (futures.size() < threadCount_) {\n      auto future = std::async(std::launch::async, [this] {\n        return doReadWrite(\n            memBlock_, kBlocks, kRows, kCols, threadIds_[memoryThreadId % threadCount_]);\n      });\n\n      futures.push_back(std::move(future));\n      memoryThreadId++;\n    }\n\n    for (int i = futures.size() - 1; i > -1; i--) {\n      auto& future = futures.at(i);\n\n      // Use wait_for() with zero milliseconds to check thread status.\n      auto status = future.wait_for(std::chrono::milliseconds(0));\n\n      if (status == std::future_status::ready) {\n        memoryVal_.store(future.get());\n        futures.erase(futures.begin() + i);\n      }\n    }\n  }\n}\n\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nvoid GPUStressSession::getOffset(int counter, float& x, float& y, float& z) {\n  if (testOverdraw_) {\n    x = 0.f;\n    y = 0.f;\n    z = counter % 2 ? -kHalf / static_cast<float>(cubeCount_)\n                    : kHalf / static_cast<float>(cubeCount_);\n    z *= counter / 2.f;\n    return;\n  }\n  const float grid = std::ceil(std::pow(cubeCount_, 1.0f / 3.0f));\n  const int igrid = (int)grid;\n  // const float fgrid = static_cast<float>(igrid);\n  x = static_cast<float>((counter % igrid) - grid / 2);\n  z = (static_cast<float>(counter / (igrid * igrid)) - grid / 2.f);\n  y = (static_cast<float>((counter % (igrid * igrid)) / igrid) - grid / 2.f);\n}\n\nglm::vec3 GPUStressSession::animateCube(int counter,\n                                        float x,\n                                        float y,\n                                        float scale,\n                                        int frameCount) {\n  struct AnimationInfo {\n    glm::vec3 velocity;\n    glm::vec3 lastPos;\n  };\n\n  static std::vector<AnimationInfo> animations;\n  if (animations.size() < counter) {\n    AnimationInfo info;\n    info.velocity = glm::vec3(1.f * (counter % 2 ? 1.0 : -1.0), 1.f - (float)(counter % 3), 0.f);\n    info.lastPos = glm::vec3(x, y, 0);\n    animations.push_back(info);\n  }\n\n  float velocityScale = 1.f;\n  if (dropFrameX_ && (frameCount % dropFrameX_) < dropFrameCount_) {\n    velocityScale = 0.f;\n  } else if (dropFrameX_ && (frameCount % dropFrameX_) == dropFrameCount_) {\n    velocityScale = 1.f + (float)dropFrameCount_;\n  }\n  const glm::vec3 pos =\n      animations[counter].lastPos + animations[counter].velocity * velocityScale * scale * .005f;\n  // check for collisons;\n  const float radius = .75 * scale;\n  if (pos.x + radius > 1.f) {\n    animations[counter].velocity.x = -1.f;\n  }\n  if (pos.x - radius < -1.f) {\n    animations[counter].velocity.x = 1.f;\n  }\n\n  if (pos.y + radius > 1.f) {\n    animations[counter].velocity.y = -1.f;\n  }\n  if (pos.y - radius < -1.f) {\n    animations[counter].velocity.y = 1.f;\n  }\n\n  animations[counter].lastPos = pos;\n  return pos;\n}\n\nvoid GPUStressSession::createSamplerAndTextures(const igl::IDevice& device) {\n  // Sampler & Texture\n  SamplerStateDesc samplerDesc;\n  samplerDesc.minFilter = samplerDesc.magFilter = SamplerMinMagFilter::Linear;\n  samplerDesc.addressModeU = SamplerAddressMode::MirrorRepeat;\n  samplerDesc.addressModeV = SamplerAddressMode::MirrorRepeat;\n  samplerDesc.addressModeW = SamplerAddressMode::MirrorRepeat;\n  samp0_ = device.createSamplerState(samplerDesc, nullptr);\n  samp1_ = device.createSamplerState(samplerDesc, nullptr);\n\n  tex0_ = getPlatform().loadTexture(\"macbeth.png\");\n  tex1_ = getPlatform().loadTexture(\"igl.png\");\n}\n\nvoid GPUStressSession::createCubes() {\n  // only reset once - on mac we hit this path multiple times for different\n  // devices\n  vertexData_ = vertexData0_;\n  indexData_ = indexData0_;\n\n  addNormalsToCube(); // setup for lighting if appropriate\n\n  const float grid = std::ceil(std::pow(cubeCount_, 1.0f / 3.0f));\n\n  const int vertexCount = vertexData_.size();\n  const int indexCount = indexData_.size();\n\n  std::mt19937 gen(0);\n  std::uniform_real_distribution<> dis(0, 1.f);\n  const float scale = 1.f / grid;\n\n  const int uvScale = 1.f / grid;\n  glm::vec2 offset = glm::vec2(0.f, 0.f);\n\n  // Vertex buffer, Index buffer and Vertex Input\n  for (int i = 1; i < cubeCount_; i++) {\n    float x = NAN, y = NAN, z = NAN;\n    getOffset(i, x, y, z);\n    glm::vec4 color(1.0, 1.0, 1.0, 1.f);\n    color[0] = (dis(gen));\n    color[1] = (dis(gen));\n    color[2] = (dis(gen));\n\n    for (int j = 0; j < vertexCount; j++) {\n      VertexPosUvw newPoint = vertexData_.at(j);\n      newPoint.position += (glm::vec3(x, y, z));\n      newPoint.uvw *= glm::vec4(uvScale, uvScale, 1.f, 1.f);\n      newPoint.uvw += glm::vec4(offset.x, offset.y, 0.f, 0.f);\n      if (!lightCount_) {\n        newPoint.baseColor = color;\n      }\n      vertexData_.push_back(newPoint);\n    }\n    for (int j = 0; j < indexCount; j++) {\n      indexData_.push_back(static_cast<uint16_t>(indexData_.at(j) + i * (vertexCount)));\n    }\n\n    offset.x += 1.f / grid;\n    if (offset.x > 1.f) {\n      offset.x = 0.f;\n      offset.y += 1.f / grid;\n    }\n  }\n\n  if (!testOverdraw_) // we want to fill up the screen here\n  {\n    for (auto& i : vertexData_) {\n      i.position.x *= scale;\n      i.position.y *= scale;\n      i.position.z *= scale;\n    }\n  }\n\n  auto& device = getPlatform().getDevice();\n  const BufferDesc vb0Desc{.type = BufferDesc::BufferTypeBits::Vertex,\n                           .data = vertexData_.data(),\n                           .length = sizeof(VertexPosUvw) * vertexData_.size()};\n  vb0_ = device.createBuffer(vb0Desc, nullptr);\n  const BufferDesc ibDesc{.type = BufferDesc::BufferTypeBits::Index,\n                          .data = indexData_.data(),\n                          .length = sizeof(uint16_t) * indexData_.size()};\n  ib0_ = device.createBuffer(ibDesc, nullptr);\n\n  VertexInputStateDesc inputDesc = {\n      .numAttributes = 3,\n      .attributes =\n          {\n              {.bufferIndex = 0,\n               .format = VertexAttributeFormat::Float3,\n               .offset = offsetof(VertexPosUvw, position),\n               .name = \"position\",\n               .location = 0},\n              {.bufferIndex = 0,\n               .format = VertexAttributeFormat::Float4,\n               .offset = offsetof(VertexPosUvw, uvw),\n               .name = \"uvw_in\",\n               .location = 1},\n              {.bufferIndex = 0,\n               .format = VertexAttributeFormat::Float4,\n               .offset = offsetof(VertexPosUvw, baseColor),\n               .name = \"base_color\",\n               .location = 2},\n          },\n      .numInputBindings = 1,\n      .inputBindings = {{.stride = sizeof(VertexPosUvw)}},\n  };\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n}\n\nvoid GPUStressSession::processCustomParameter(const std::string& key, const std::string& value) {\n  auto toLower = [](std::string str) {\n    std::transform(str.begin(), str.end(), str.begin(), ::tolower);\n    return str;\n  };\n\n  const std::string lowerKey = toLower(key);\n\n  if (lowerKey == \"numthreads\") {\n    setNumThreads(std::stoi(value));\n  } else if (lowerKey == \"thrashmemory\") {\n    setThrashMemory(toLower(value) == \"true\" || value == \"1\");\n  } else if (lowerKey == \"memorysize\") {\n    setMemorySize(static_cast<size_t>(std::stoull(value)));\n  } else if (lowerKey == \"memoryreads\") {\n    setMemoryReads(static_cast<size_t>(std::stoull(value)));\n  } else if (lowerKey == \"memorywrites\") {\n    setMemoryWrites(static_cast<size_t>(std::stoull(value)));\n  } else if (lowerKey == \"goslowoncpu\") {\n    setGoSlowOnCpu(std::stoi(value));\n  } else if (lowerKey == \"cubecount\") {\n    setCubeCount(std::stoi(value));\n  } else if (lowerKey == \"drawcount\") {\n    setDrawCount(std::stoi(value));\n  } else if (lowerKey == \"testoverdraw\") {\n    setTestOverdraw(toLower(value) == \"true\" || value == \"1\");\n  } else if (lowerKey == \"enableblending\") {\n    setEnableBlending(toLower(value) == \"true\" || value == \"1\");\n  } else if (lowerKey == \"usemsaa\") {\n    setUseMSAA(toLower(value) == \"true\" || value == \"1\");\n  } else if (lowerKey == \"lightcount\") {\n    setLightCount(std::stoi(value));\n  } else if (lowerKey == \"threadcore\") {\n    const size_t commaPos = value.find(',');\n    if (commaPos != std::string::npos) {\n      int thread = std::stoi(value.substr(0, commaPos));\n      int core = std::stoi(value.substr(commaPos + 1));\n      if (thread >= 0 && threadCount_ > 0) {\n        setThreadCore(thread, core);\n      } else {\n        IGL_LOG_ERROR(\n            \"Invalid threadCore parameter: thread=%d, threadCount=%d. Ensure numThreads > 0 is \"\n            \"set before threadCore.\",\n            thread,\n            threadCount_.load());\n      }\n    }\n  } else if (lowerKey == \"dropframeinterval\") {\n    setDropFrameInterval(std::stoi(value));\n  } else if (lowerKey == \"dropframecount\") {\n    setDropFrameCount(std::stoi(value));\n  } else if (lowerKey == \"rotatecubes\") {\n    setRotateCubes(toLower(value) == \"true\" || value == \"1\");\n  }\n}\n\nvoid GPUStressSession::initialize() noexcept {\n  pipelineState_ = nullptr;\n  vertexInput0_ = nullptr;\n  vb0_ = nullptr;\n  ib0_ = nullptr; // Buffers for vertices and indices (or constants)\n  samp0_ = nullptr;\n  samp1_ = nullptr;\n  framebuffer_ = nullptr;\n  vertexData_.resize(0); // recalc verts\n  indexData_.resize(36); // keep the first 36 indices\n\n  //  this is sets the size of our 'app window' so we can shrink the number of\n  //  changed pixels we send to the delphi.\n  appParamsRef().sizeX = .5f;\n  appParamsRef().sizeY = .5f;\n  // Process custom parameters from ShellParams\n  if (shellParams().benchmarkParams.has_value()) {\n    const auto& benchmarkParams = shellParams().benchmarkParams.value();\n    const auto& customParams = benchmarkParams.customParams;\n    for (const auto& [key, value] : customParams) {\n      IGL_LOG_DEBUG(\"Processing custom parameter: '%s' = '%s'\", key.c_str(), value.c_str());\n      processCustomParameter(key, value);\n    }\n  }\n\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n\n  createCubes();\n  if (!imguiSession_) {\n    imguiSession_ = std::make_unique<iglu::imgui::Session>(getPlatform().getDevice(),\n                                                           getPlatform().getInputDispatcher());\n  }\n\n  createSamplerAndTextures(device);\n  shaderStages_ = getShaderStagesForBackend(device);\n\n  // Command queue: backed by different types of GPU HW queues\n  const CommandQueueDesc desc{};\n  commandQueue_ = device.createCommandQueue(desc, nullptr);\n\n  tex0_->generateMipmap(*commandQueue_);\n  tex1_->generateMipmap(*commandQueue_);\n\n  // Set up vertex uniform data\n  vertexParameters_.scaleZ = 1.0f;\n\n  renderPass_.colorAttachments.resize(1);\n  renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n  renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0f, 0.0f};\n  renderPass_.depthAttachment.loadAction = LoadAction::Clear;\n  renderPass_.depthAttachment.clearDepth = 1.0;\n\n  if (useMSAA_) {\n    renderPass_.colorAttachments[0].storeAction = igl::StoreAction::MsaaResolve;\n  }\n\n  DepthStencilStateDesc depthDesc;\n  depthDesc.isDepthWriteEnabled = true;\n  depthDesc.compareFunction = igl::CompareFunction::Less;\n  depthStencilState_ = device.createDepthStencilState(depthDesc, nullptr);\n}\n\nvoid GPUStressSession::setProjectionMatrix(float aspectRatio) {\n  // perspective projection\n  constexpr float fov = 45.0f * (M_PI / 180.0f);\n  glm::mat4 projectionMat = glm::perspectiveLH(fov, aspectRatio, .1f, 2.1f);\n  if (testOverdraw_ || !rotateCubes_) {\n    projectionMat =\n        glm::orthoLH_ZO(-kHalf, kHalf, -kHalf / aspectRatio, kHalf / aspectRatio, .1f, 2.1f);\n  }\n  vertexParameters_.projectionMatrix = projectionMat;\n}\n\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nvoid GPUStressSession::setModelViewMatrix(float angle,\n                                          float scaleZ,\n                                          float offsetX,\n                                          float offsetY,\n                                          float offsetZ) {\n  float divisor = std::ceil(std::sqrt(static_cast<float>(drawCount_))) / (kHalf * kScaleFill);\n\n  if (testOverdraw_) {\n    divisor = 1.f;\n    offsetX = 0.f;\n    offsetY = 0.f;\n  }\n\n  const float cosAngle = std::cos(angle);\n  const float sinAngle = std::sin(angle);\n  const glm::vec4 v0(cosAngle / divisor, 0.f, -sinAngle / divisor, 0.f);\n  const glm::vec4 v1(0.f, 1.f / divisor, 0.f, 0.f);\n  const glm::vec4 v2(sinAngle / divisor, 0.f, cosAngle / divisor, 0.f);\n  const glm::vec4 v3(offsetX, offsetY, 1.f + offsetZ, 1.f);\n  const glm::mat4 test(v0, v1, v2, v3);\n\n  vertexParameters_.modelViewMatrix = test;\n  vertexParameters_.scaleZ = scaleZ;\n}\n\nvoid GPUStressSession::initState(const igl::SurfaceTextures& surfaceTextures) {\n  Result ret;\n\n  // TODO: fix framebuffers so you can update the resolve texture\n  if (framebuffer_ == nullptr) {\n    FramebufferDesc framebufferDesc;\n    framebufferDesc.colorAttachments[0].texture = surfaceTextures.color;\n    framebufferDesc.depthAttachment.texture = surfaceTextures.depth;\n    framebufferDesc.mode = surfaceTextures.color->getNumLayers() > 1 ? FramebufferMode::Stereo\n                                                                     : FramebufferMode::Mono;\n\n    if (useMSAA_) {\n      const auto dimensions = surfaceTextures.color->getDimensions();\n\n      const TextureDesc fbTexDesc = {.width = dimensions.width,\n                                     .height = dimensions.height,\n                                     .depth = 1,\n                                     .numLayers = surfaceTextures.color->getNumLayers(),\n                                     .numSamples = kMsaaSamples,\n                                     .usage = TextureDesc::TextureUsageBits::Attachment,\n                                     .numMipLevels = 1,\n                                     .type = surfaceTextures.color->getNumLayers() > 1\n                                                 ? TextureType::TwoDArray\n                                                 : TextureType::TwoD,\n                                     .format = surfaceTextures.color->getFormat(),\n                                     .storage = igl::ResourceStorage::Private};\n\n      framebufferDesc.colorAttachments[0].texture =\n          getPlatform().getDevice().createTexture(fbTexDesc, nullptr);\n\n      framebufferDesc.colorAttachments[0].resolveTexture = surfaceTextures.color;\n\n      const igl::TextureDesc depthDesc = {.width = dimensions.width,\n                                          .height = dimensions.height,\n                                          .depth = 1,\n                                          .numLayers = surfaceTextures.depth->getNumLayers(),\n                                          .numSamples = kMsaaSamples,\n                                          .usage = TextureDesc::TextureUsageBits::Attachment,\n                                          .numMipLevels = 1,\n                                          .type = surfaceTextures.depth->getNumLayers() > 1\n                                                      ? TextureType::TwoDArray\n                                                      : TextureType::TwoD,\n                                          .format = surfaceTextures.depth->getFormat(),\n                                          .storage = igl::ResourceStorage::Private};\n\n      framebufferDesc.depthAttachment.texture =\n          getPlatform().getDevice().createTexture(depthDesc, nullptr);\n    }\n\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(framebufferDesc, &ret);\n\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  }\n\n  if (useMSAA_) {\n    framebuffer_->updateResolveAttachment(surfaceTextures.color);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures.color);\n  }\n\n  constexpr uint32_t textureUnit = 0;\n  if (pipelineState_ == nullptr) {\n    RenderPipelineDesc graphicsDesc = {\n        .vertexInputState = vertexInput0_,\n        .shaderStages = shaderStages_,\n        .targetDesc =\n            {\n                .colorAttachments = {{\n                    .textureFormat = framebuffer_->getColorAttachment(0)->getProperties().format,\n                    .blendEnabled = enableBlending_,\n                    .rgbBlendOp = BlendOp::Add,\n                    .alphaBlendOp = BlendOp::Add,\n                    .srcRGBBlendFactor = BlendFactor::SrcAlpha,\n                    .srcAlphaBlendFactor = BlendFactor::SrcAlpha,\n                    .dstRGBBlendFactor = BlendFactor::OneMinusSrcAlpha,\n                    .dstAlphaBlendFactor = BlendFactor::OneMinusSrcAlpha,\n                }},\n                .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getProperties().format,\n            },\n        .cullMode = igl::CullMode::Back,\n        .frontFaceWinding = igl::WindingMode::Clockwise,\n        .fragmentUnitSamplerMap = {{textureUnit, IGL_NAMEHANDLE(\"inputImage\")}},\n    };\n    graphicsDesc.sampleCount = useMSAA_ ? kMsaaSamples : 1;\n\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(graphicsDesc, nullptr);\n  }\n}\n\nvoid GPUStressSession::drawCubes(const igl::SurfaceTextures& surfaceTextures,\n                                 std::shared_ptr<IRenderCommandEncoder> commands) {\n  static float angle = 0.0f;\n  static int frameCount = 0;\n  frameCount++;\n\n  angle += 0.005f;\n\n  // rotating animation\n  static float scaleZ = 1.0f, ss = 0.005f;\n  scaleZ += ss;\n  scaleZ = scaleZ < 0.0f ? 0.0f : scaleZ > 1.0 ? 1.0f : scaleZ;\n  if (scaleZ <= 0.05f || scaleZ >= 1.0f) {\n    ss *= -1.0f;\n  }\n\n  auto& device = getPlatform().getDevice();\n  // cube animation\n  constexpr uint32_t textureUnit = 0;\n  constexpr uint32_t textureUnit1 = 1;\n  const int grid = static_cast<int>(std::ceil(std::sqrt(static_cast<float>(drawCount_))));\n  const float divisor = .5 / static_cast<float>(grid);\n  const float scale = 1.f / std::ceil(std::pow(cubeCount_, 1.0f / 3.0f));\n\n  int counter = 0;\n  setProjectionMatrix(surfaceTextures.color->getAspectRatio());\n\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n\n  std::shared_ptr<iglu::ManagedUniformBuffer> vertUniformBuffer = nullptr;\n  for (int i = -grid / 2; i < grid / 2 + grid % 2; i++) {\n    for (int j = -grid / 2; j < grid / 2 + grid % 2; j++) {\n      if (counter >= drawCount_) {\n        break;\n      }\n      counter++;\n      float x = static_cast<float>(j) * divisor;\n      float y = static_cast<float>(i) * divisor;\n      if (dropFrameX_) {\n        auto offset = animateCube(counter, x, y, scale, frameCount);\n        x = offset.x;\n        y = offset.y;\n      }\n\n      setModelViewMatrix((testOverdraw_ || !rotateCubes_) ? 0.f : angle, scaleZ, x, y, 0.f);\n\n      // note that we are deliberately binding redundant state - the goal here\n      // is to tax the driver.  The giant vertex buffer (cubeCount_) will stress\n      // just the gpu\n      commands->bindVertexBuffer(0, *vb0_);\n      commands->bindTexture(textureUnit, BindTarget::kFragment, tex0_.get());\n      commands->bindSamplerState(textureUnit, BindTarget::kFragment, samp0_.get());\n      commands->bindTexture(textureUnit1, BindTarget::kFragment, tex1_.get());\n      commands->bindSamplerState(textureUnit1, BindTarget::kFragment, samp1_.get());\n      commands->bindRenderPipelineState(pipelineState_);\n      commands->bindDepthStencilState(depthStencilState_);\n\n      // Bind Vertex Uniform Data\n      if (device.getBackendType() == BackendType::Vulkan) {\n        commands->bindPushConstants(&vertexParameters_,\n                                    sizeof(vertexParameters_) - sizeof(float)); // z isn't used\n      } else {\n        if (!vertUniformBuffer) {\n          iglu::ManagedUniformBufferInfo info;\n          info.index = 1;\n          info.length = sizeof(VertexFormat);\n          info.uniforms = std::vector<UniformDesc>{\n              UniformDesc{.name = \"projectionMatrix\",\n                          .location = -1,\n                          .type = igl::UniformType::Mat4x4,\n                          .numElements = 1,\n                          .offset = offsetof(VertexFormat, projectionMatrix),\n                          .elementStride = 0},\n              UniformDesc{.name = \"modelViewMatrix\",\n                          .location = -1,\n                          .type = igl::UniformType::Mat4x4,\n                          .numElements = 1,\n                          .offset = offsetof(VertexFormat, modelViewMatrix),\n                          .elementStride = 0},\n              UniformDesc{.name = \"scaleZ\",\n                          .location = -1,\n                          .type = igl::UniformType::Float,\n                          .numElements = 1,\n                          .offset = offsetof(VertexFormat, scaleZ),\n                          .elementStride = 0}};\n\n          vertUniformBuffer = std::make_shared<iglu::ManagedUniformBuffer>(device, info);\n          IGL_DEBUG_ASSERT(vertUniformBuffer->result.isOk());\n        }\n        *static_cast<VertexFormat*>(vertUniformBuffer->getData()) = vertexParameters_;\n        vertUniformBuffer->bind(device, *pipelineState_, *commands);\n      }\n\n      commands->drawIndexed(indexData_.size());\n    }\n  }\n}\n\nvoid GPUStressSession::update(SurfaceTextures surfaceTextures) noexcept {\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n  if (forceReset_) {\n    memBlock_.resize(0);\n    forceReset_ = false;\n    initialize();\n  }\n\n  allocateMemory();\n  thrashCPU();\n  thrashMemory();\n\n  fps_.updateFPS(getDeltaSeconds());\n\n  initState(surfaceTextures);\n\n  // Command buffers (1-N per thread): create, submit and forget\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = framebuffer_->getColorAttachment(0);\n  framebufferDesc.depthAttachment.texture = framebuffer_->getDepthAttachment();\n\n  // setup UI\n  const ImGuiViewport* v = ImGui::GetMainViewport();\n  imguiSession_->beginFrame(framebufferDesc, getPlatform().getDisplayContext().pixelsPerPoint);\n  bool open = false;\n  ImGui::SetNextWindowPos(\n      {\n          v->WorkPos.x + v->WorkSize.x - 60.0f,\n          v->WorkPos.y + v->WorkSize.y * .25f + 15.0f,\n      },\n      ImGuiCond_Always,\n      {1.0f, 0.0f});\n  ImGui::Begin(\"GPU\", &open, ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoBackground);\n  ImGui::SetWindowFontScale(2.f);\n\n  // draw stuff\n  drawCubes(surfaceTextures, commands);\n\n  { // Draw using ImGui every frame\n\n    ImGui::TextColored(ImVec4(1.f, 0.f, 0.f, 1.f),\n                       \"FPS: (%f)   PI: (%lf)  Memory (%f)\",\n                       fps_.getAverageFPS(),\n                       pi_,\n                       memoryVal_.load());\n    ImGui::End();\n    imguiSession_->endFrame(getPlatform().getDevice(), *commands);\n  }\n\n  commands->endEncoding();\n\n  if (shellParams().shouldPresent) {\n    buffer->present(useMSAA_ ? framebuffer_->getResolveColorAttachment(0)\n                             : framebuffer_->getColorAttachment(0));\n  }\n\n  commandQueue_->submit(*buffer); // Guarantees ordering between command buffers\n}\n\nvoid GPUStressSession::setNumThreads(int numThreads) {\n  threadCount_ = numThreads;\n}\n\nvoid GPUStressSession::setThrashMemory(bool thrashMemory) {\n  thrashMemory_ = thrashMemory;\n}\nvoid GPUStressSession::setMemorySize(size_t memorySize) {\n  if (memorySize != memorySize_) {\n    memorySize_ = memorySize;\n    forceReset_ = true;\n  }\n}\nvoid GPUStressSession::setMemoryReads(size_t memoryReads) {\n  memoryReads_ = memoryReads;\n}\nvoid GPUStressSession::setMemoryWrites(size_t memoryWrites) {\n  memoryWrites_ = memoryWrites;\n}\nvoid GPUStressSession::setGoSlowOnCpu(int goSlowOnCpu) {\n  goSlowOnCpu_ = goSlowOnCpu;\n}\nvoid GPUStressSession::setCubeCount(int count) {\n  if (cubeCount_ != count) {\n    forceReset_ = true;\n    cubeCount_ = count;\n  }\n}\nvoid GPUStressSession::setDrawCount(int count) {\n  drawCount_ = count;\n}\nvoid GPUStressSession::setTestOverdraw(bool testOverdraw) {\n  if (testOverdraw != testOverdraw_) {\n    testOverdraw_ = testOverdraw;\n    forceReset_ = true;\n  }\n}\nvoid GPUStressSession::setEnableBlending(bool enableBlending) {\n  if (enableBlending != enableBlending_) {\n    enableBlending_ = enableBlending;\n    forceReset_ = true;\n  }\n}\nvoid GPUStressSession::setUseMSAA(bool useMSAA) {\n  if (useMSAA_ != useMSAA) {\n    useMSAA_ = useMSAA;\n    forceReset_ = true;\n  }\n}\nvoid GPUStressSession::setLightCount(int lightCount) {\n  if (lightCount_ != lightCount) {\n    lightCount_ = lightCount;\n    forceReset_ = true;\n  }\n}\n\nvoid GPUStressSession::setThreadCore(int thread, int core) {\n  threadIds_[thread % threadCount_] = core;\n}\n\nint GPUStressSession::getNumThreads() const {\n  return threadCount_;\n}\nbool GPUStressSession::getThrashMemory() const {\n  return thrashMemory_;\n}\nsize_t GPUStressSession::getMemorySize() const {\n  return memorySize_;\n}\nsize_t GPUStressSession::getMemoryReads() const {\n  return memoryReads_;\n}\nsize_t GPUStressSession::getMemoryWrites() const {\n  return memoryWrites_;\n}\nbool GPUStressSession::getGoSlowOnCpu() const {\n  return goSlowOnCpu_ != 0;\n}\nint GPUStressSession::getCubeCount() const {\n  return cubeCount_;\n}\nint GPUStressSession::getDrawCount() const {\n  return drawCount_;\n}\nbool GPUStressSession::getTestOverdraw() const {\n  return testOverdraw_;\n}\nbool GPUStressSession::getEnableBlending() const {\n  return enableBlending_;\n}\nbool GPUStressSession::getUseMSAA() const {\n  return useMSAA_;\n}\nint GPUStressSession::getLightCount() const {\n  return lightCount_;\n}\nstd::vector<int> GPUStressSession::getThreadsCores() const {\n  return threadIds_;\n}\n\nvoid GPUStressSession::setDropFrameInterval(int numberOfFramesBetweenDrops) {\n  dropFrameX_ = numberOfFramesBetweenDrops;\n}\n\nint GPUStressSession::getDropFrameInterval() const {\n  return dropFrameX_;\n}\n\nvoid GPUStressSession::setDropFrameCount(int numberOfFramesToDrop) {\n  dropFrameCount_ = numberOfFramesToDrop;\n}\n\nint GPUStressSession::getDropFrameCount() const {\n  return dropFrameCount_;\n}\n\nvoid GPUStressSession::setRotateCubes(bool bRotate) {\n  rotateCubes_ = bRotate;\n}\n\nbool GPUStressSession::getRotateCubes() const {\n  return rotateCubes_;\n}\n\nstd::string GPUStressSession::getCurrentUsageString() const {\n  char output[2048];\n\n  snprintf(output,\n           sizeof(output),\n           \"cubes: %d, draws: %d, lights: %d, threads: %d,  cpu load: %d, memory reads: %lu , \"\n           \"memory writes: %lu, \"\n           \"msaa %s , blending %s, framerate: %.2f,\",\n           cubeCount_.load(),\n           drawCount_.load(),\n           lightCount_.load(),\n           threadCount_.load(),\n           goSlowOnCpu_.load(),\n           memoryReads_.load() * (thrashMemory_ ? 1 : 0),\n           memoryWrites_.load() * (thrashMemory_ ? 1 : 0),\n           useMSAA_ ? \"on\" : \"off\",\n           enableBlending_ ? \"on\" : \"off \",\n           fps_.getAverageFPS());\n\n  return output;\n}\nvoid GPUStressSession::setNumLayers(size_t numLayers) {\n#if !defined(IGL_PLATFORM_WINDOWS)\n  igl::shell::QuadLayerParams params;\n  params.layerInfo.reserve(numLayers);\n  for (int i = 0; i < numLayers; i++) {\n    params.layerInfo.emplace_back({.position = {0.f, 0.f, 0.f},\n                                   .size = {1.f, 1.f},\n                                   .blendMode = igl::shell::LayerBlendMode::AlphaBlend});\n  }\n\n  appParamsRef().quadLayerParamsGetter = [params]() -> igl::shell::QuadLayerParams {\n    return params;\n  };\n#endif\n}\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/GPUStressSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/imgui/Session.h>\n#include <atomic>\n#include <glm/ext/matrix_float4x4.hpp>\n#include <glm/ext/vector_float3.hpp>\n#include <glm/ext/vector_float4.hpp>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/FPSCounter.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nstruct VertexFormat {\n  glm::mat4 projectionMatrix;\n  glm::mat4 modelViewMatrix;\n  float scaleZ{};\n};\n\nclass GPUStressSession : public RenderSession {\n public:\n  explicit GPUStressSession(std::shared_ptr<Platform> platform);\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n  void setNumLayers(size_t numLayers);\n\n  void setNumThreads(int numThreads);\n  void setThrashMemory(bool thrashMemory);\n  void setMemorySize(size_t memorySize);\n  void setMemoryReads(size_t memoryReads);\n  void setMemoryWrites(size_t memoryWrites);\n  void setGoSlowOnCpu(int goSlowOnCpu);\n  void setCubeCount(int cubeCount);\n  void setDrawCount(int drawCount);\n  void setTestOverdraw(bool testOverdraw);\n  void setEnableBlending(bool enableBlending);\n  void setUseMSAA(bool useMSAA);\n  void setLightCount(int lightCount);\n  void setThreadCore(int thread, int core);\n  void setDropFrameInterval(int numberOfFramesBetweenDrops);\n  void setDropFrameCount(int numberOfFramesToDrop);\n  void setRotateCubes(bool rotate);\n\n  [[nodiscard]] int getNumThreads() const;\n  [[nodiscard]] bool getThrashMemory() const;\n  [[nodiscard]] size_t getMemorySize() const;\n  [[nodiscard]] size_t getMemoryReads() const;\n  [[nodiscard]] size_t getMemoryWrites() const;\n  [[nodiscard]] bool getGoSlowOnCpu() const;\n  [[nodiscard]] int getCubeCount() const;\n  [[nodiscard]] int getDrawCount() const;\n  [[nodiscard]] bool getTestOverdraw() const;\n  [[nodiscard]] bool getEnableBlending() const;\n  [[nodiscard]] bool getUseMSAA() const;\n  [[nodiscard]] int getLightCount() const;\n  [[nodiscard]] std::vector<int> getThreadsCores() const;\n  [[nodiscard]] std::string getCurrentUsageString() const;\n  [[nodiscard]] int getDropFrameInterval() const;\n  [[nodiscard]] int getDropFrameCount() const;\n  [[nodiscard]] bool getRotateCubes() const;\n\n private:\n  struct VertexPosUvw {\n    glm::vec3 position;\n    glm::vec4 uvw;\n    glm::vec4 baseColor;\n  };\n\n  [[nodiscard]] std::string getLightingCalc() const;\n  [[nodiscard]] std::string getVulkanFragmentShaderSource() const;\n  std::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) const noexcept;\n  void addNormalsToCube();\n  void processCustomParameter(const std::string& key, const std::string& value);\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb0_,\n      ib0_; // Buffers for vertices and indices (or constants)\n  std::shared_ptr<ITexture> tex0_;\n  std::shared_ptr<ITexture> tex1_;\n  std::shared_ptr<ISamplerState> samp0_;\n  std::shared_ptr<ISamplerState> samp1_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::unique_ptr<iglu::imgui::Session> imguiSession_;\n  std::shared_ptr<IDepthStencilState> depthStencilState_;\n\n  VertexFormat vertexParameters_;\n\n  // utility fns\n  void createSamplerAndTextures(const IDevice& /*device*/);\n  void setModelViewMatrix(float angle, float scaleZ, float offsetX, float offsetY, float offsetZ);\n  void setProjectionMatrix(float aspectRatio);\n\n  void drawCubes(const igl::SurfaceTextures& surfaceTextures,\n                 std::shared_ptr<IRenderCommandEncoder> commands);\n  void initState(const igl::SurfaceTextures& surfaceTextures);\n  void createCubes();\n  void initSystemSettings();\n\n  void thrashCPU() noexcept;\n  float doReadWrite(std::vector<std::vector<std::vector<float>>>& memBlock,\n                    // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                    int numBlocks,\n                    int numRows,\n                    int numCols,\n                    int threadId);\n  void allocateMemory();\n  void thrashMemory() noexcept;\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  void getOffset(int counter, float& x, float& y, float& z);\n  glm::vec3 animateCube(int counter, float x, float y, float scale, int frameCount);\n\n  FPSCounter fps_;\n\n  std::vector<VertexPosUvw> vertexData0_;\n  std::vector<uint16_t> indexData0_;\n  std::vector<VertexPosUvw> vertexData_;\n  std::vector<uint16_t> indexData_;\n\n  std::atomic<bool> forceReset_{false};\n  std::atomic<int> cubeCount_ = 1; // number of cubes in the vertex buffer\n  // number of times to draw the vertex buffer (triangles = 12 * kDrawCount *\n  // kCubeCount)\n  std::atomic<int> drawCount_ = 50;\n  // turn this on and set kDrawCount to 1.  Cube count will be the number of\n  // layers you'll see\n  std::atomic<bool> testOverdraw_ = false;\n\n  std::atomic<bool> enableBlending_ = false; // turn this on to see the effects of alpha blending\n  // make this number little to make all the cubes tiny on screen so fill isn't a\n  // problem\n  std::atomic<bool> useMSAA_ = true;\n\n  // each light will add about 45 ish instructions to your pixel shader (tested\n  // using powerVR compiler so grain of salt)arc lint --engine LintCPP\n  std::atomic<int> lightCount_ = 5;\n  // number of times to do a lof of math that does not calculate pi\n  std::atomic<int> goSlowOnCpu_ = 10000; // max10000000;\n  // cpu threads - these are really necessary to get our CPU usage up  to 100%\n  // (otherwise the framerate just throttles)\n  std::atomic<int> threadCount_ = 1;\n  std::atomic<bool> thrashMemory_ = true;\n  std::atomic<size_t> memorySize_ = 64; // in MB\n  std::atomic<unsigned long> memoryReads_ = 10000; // max 1000000;\n  std::atomic<unsigned long> memoryWrites_ = 10000; // 100000;\n  std::vector<int> threadIds_ = {-1, -1, -1, -1, -1, -1, -1, -1};\n  std::atomic<int> dropFrameX_ = 0;\n  std::atomic<int> dropFrameCount_ = 2;\n  std::atomic<bool> rotateCubes_ = true;\n  std::atomic<float> memoryVal_ = 0.0f;\n\n  double pi_ = 0.f;\n  std::vector<std::vector<std::vector<float>>> memBlock_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/GPUTimerSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/GPUTimerSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\nstruct VertexPosColor {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float4 color;\n};\nVertexPosColor vertexData[] = {\n    {.position = {-0.6f, -0.4f, 0.0}, .color = {1.0, 0.0, 0.0, 1.0}},\n    {.position = {0.6f, -0.4f, 0.0}, .color = {0.0, 1.0, 0.0, 1.0}},\n    {.position = {0.0f, 0.6f, 0.0}, .color = {0.0, 0.0, 1.0, 1.0}},\n};\nuint16_t indexData[] = {\n    2,\n    1,\n    0,\n};\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float4 color;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.color = vertices[vid].color;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return IN.color;\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  vColor = color_in;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_FragColor = vColor;\n                })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  color = color_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec4 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = color;\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; float4 color : COLOR; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); o.color = v.color; return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float4 color : COLOR; };\n      float4 main(PSIn i) : SV_TARGET { return i.color; }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n} // namespace\n\nvoid GPUTimerSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex & Index buffer\n  vb0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                        .data = vertexData,\n                                        .length = sizeof(vertexData)},\n                             nullptr);\n  IGL_DEBUG_ASSERT(vb0_ != nullptr);\n  ib0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                        .data = indexData,\n                                        .length = sizeof(indexData)},\n                             nullptr);\n  IGL_DEBUG_ASSERT(ib0_ != nullptr);\n\n  vertexInput0_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosColor, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float4,\n                                  .offset = offsetof(VertexPosColor, color),\n                                  .name = \"color_in\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{}, {.stride = sizeof(VertexPosColor)}},\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexInput0_ != nullptr);\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  // GPU Timer\n  Result timerResult;\n  timer_ = device.createTimer(&timerResult);\n  if (!timerResult.isOk() || timer_ == nullptr) {\n    IGL_LOG_INFO(\"GPU Timer: creation not supported on this backend.\\n\");\n  }\n\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid GPUTimerSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // Graphics pipeline\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInput0_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Command Buffer with GPU timer attached\n  auto buffer = commandQueue_->createCommandBuffer(\n      CommandBufferDesc{.debugName = \"GPUTimerSession\", .timer = timer_}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(1, *vb0_);\n    commands->bindRenderPipelineState(pipelineState_);\n    commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n    commands->drawIndexed(3);\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n\n  // Log GPU timing results\n  if (timer_ != nullptr && timer_->resultsAvailable()) {\n    const uint64_t elapsedNanos = timer_->getElapsedTimeNanos();\n    const double elapsedMs = static_cast<double>(elapsedNanos) / 1000000.0;\n    IGL_LOG_INFO(\"GPU Timer: render pass took %.3f ms (%llu ns)\\n\",\n                 elapsedMs,\n                 (unsigned long long)elapsedNanos);\n  }\n\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/GPUTimerSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n#include <igl/Timer.h>\n\nnamespace igl::shell {\n\nclass GPUTimerSession : public RenderSession {\n public:\n  explicit GPUTimerSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<ITexture> depthTexture_;\n  std::shared_ptr<IBuffer> vb0_;\n  std::shared_ptr<IBuffer> ib0_;\n  std::shared_ptr<ITimer> timer_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/HandsOpenXRSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/HandsOpenXRSession.h>\n\n#include <algorithm>\n#include <cmath>\n#include <cstdint>\n#include <glm/detail/qualifier.hpp>\n#include <glm/gtx/quaternion.hpp>\n#include <vector>\n#include <IGLU/shaderCross/ShaderCross.h>\n#include <IGLU/shaderCross/ShaderCrossUniformBuffer.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/Device.h>\n#include <igl/DeviceFeatures.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\n\nstruct Vertex {\n  glm::vec3 position;\n  glm::vec3 normal;\n  glm::vec4 weight;\n  glm::vec4 joint;\n};\n\n[[nodiscard]] const char* getVulkanFragmentShaderSource() {\n  return R\"(#version 450\n            precision highp float;\n            layout(location = 0) in vec3 worldNormal;\n            layout(location = 0) out vec4 fragmentColor;\n            void main() {\n              float att = max(dot(worldNormal, -normalize(vec3(-0.1, -1, 0))), 0.3);\n              fragmentColor = vec4(att, att, att, 1.0);\n            })\";\n}\n\n[[nodiscard]] std::string getVertexShaderProlog(bool stereoRendering) {\n  return stereoRendering ? R\"(#version 450\n    #extension GL_OVR_multiview2 : require\n    layout(num_views = 2) in;\n    precision highp float;\n\n    #define VIEW_ID int(gl_ViewID_OVR)\n  )\"\n                         : R\"(#version 450\n    precision highp float;\n\n    #define VIEW_ID perFrame.viewId\n  )\";\n}\n\n[[nodiscard]] std::string getVulkanVertexShaderSource(bool stereoRendering) {\n  return getVertexShaderProlog(stereoRendering) + R\"(\n            layout(location = 0) in vec3 position;\n            layout(location = 1) in vec3 normal;\n            layout(location = 2) in vec4 weight;\n            layout(location = 3) in vec4 joint;\n\n            #define XR_HAND_JOINT_COUNT_EXT 26\n            layout (set = 1, binding = 1, std140) uniform PerFrame {\n              mat4 jointMatrices[XR_HAND_JOINT_COUNT_EXT];\n              mat4 viewProjectionMatrix[2];\n              int viewId;\n            } perFrame;\n\n            layout(location = 0) out vec3 worldNormal;\n\n            void main() {\n              mat4 world = perFrame.jointMatrices[int(joint.x)] * mat4(weight.x) +\n                           perFrame.jointMatrices[int(joint.y)] * mat4(weight.y) +\n                           perFrame.jointMatrices[int(joint.z)] * mat4(weight.z) +\n                           perFrame.jointMatrices[int(joint.w)] * mat4(weight.w);\n              worldNormal = (world * vec4(normal, 0.0)).xyz;\n              vec4 worldPos = world * vec4(position, 1.0);\n              gl_Position = perFrame.viewProjectionMatrix[VIEW_ID] * vec4(worldPos.xyz, 1.0);\n            })\";\n}\n\n[[nodiscard]] std::unique_ptr<IShaderStages> getShaderStagesForBackend(\n    IDevice& device,\n    const iglu::ShaderCross& shaderCross,\n    bool stereoRendering) noexcept {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Metal:\n    IGL_DEBUG_ABORT(\"Metal is not supported\");\n    return nullptr;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getVulkanVertexShaderSource(stereoRendering).c_str(),\n        \"main\",\n        \"\",\n        getVulkanFragmentShaderSource(),\n        \"main\",\n        \"\",\n        nullptr);\n  case igl::BackendType::OpenGL: {\n    Result res;\n    const auto vs = shaderCross.crossCompileFromVulkanSource(\n        getVulkanVertexShaderSource(stereoRendering).c_str(), igl::ShaderStage::Vertex, &res);\n    IGL_DEBUG_ASSERT(res.isOk(), res.message.c_str());\n\n    const auto fs = shaderCross.crossCompileFromVulkanSource(\n        getVulkanFragmentShaderSource(), igl::ShaderStage::Fragment, &res);\n    IGL_DEBUG_ASSERT(res.isOk(), res.message.c_str());\n\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        vs.c_str(),\n        shaderCross.entryPointName(igl::ShaderStage::Vertex),\n        \"\",\n        fs.c_str(),\n        shaderCross.entryPointName(igl::ShaderStage::Fragment),\n        \"\",\n        nullptr);\n  }\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  }\n}\n\n[[nodiscard]] bool isDeviceCompatible(IDevice& device) noexcept {\n  return device.hasFeature(DeviceFeatures::Multiview);\n}\n\n[[nodiscard]] glm::mat4 perspectiveAsymmetricFovRH(const igl::shell::Fov& fov,\n                                                   float nearZ,\n                                                   float farZ) noexcept {\n  glm::mat4 mat;\n\n  const float tanLeft = tanf(fov.angleLeft);\n  const float tanRight = tanf(fov.angleRight);\n  const float tanDown = tanf(fov.angleDown);\n  const float tanUp = tanf(fov.angleUp);\n\n  const float tanWidth = tanRight - tanLeft;\n  const float tanHeight = tanUp - tanDown;\n\n  mat[0][0] = 2.0f / tanWidth;\n  mat[1][0] = 0.0f;\n  mat[2][0] = (tanRight + tanLeft) / tanWidth;\n  mat[3][0] = 0.0f;\n\n  mat[0][1] = 0.0f;\n  mat[1][1] = 2.0f / tanHeight;\n  mat[2][1] = (tanUp + tanDown) / tanHeight;\n  mat[3][1] = 0.0f;\n\n  mat[0][2] = 0.0f;\n  mat[1][2] = 0.0f;\n  mat[2][2] = -(farZ + nearZ) / (farZ - nearZ);\n  mat[3][2] = -2.0f * farZ * nearZ / (farZ - nearZ);\n\n  mat[0][3] = 0.0f;\n  mat[1][3] = 0.0f;\n  mat[2][3] = -1.0f;\n  mat[3][3] = 0.0f;\n\n  return mat;\n}\n\n[[nodiscard]] inline glm::mat4 poseToMat4(const Pose& pose) noexcept {\n  return glm::translate(glm::mat4(1.0), glm::vec3(pose.position)) * glm::toMat4(pose.orientation);\n}\n} // namespace\n\nvoid HandsOpenXRSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n\n  if (shellParams().handMeshes[0].vertexCountOutput == 0 &&\n      shellParams().handMeshes[1].vertexCountOutput == 0) {\n    return;\n  }\n\n  const bool stereoRendering = shellParams().viewParams.size() > 1;\n\n  const auto& handMeshes = shellParams().handMeshes;\n  std::vector<Vertex> vertexData;\n  std::vector<uint16_t> indices;\n  vertexData.reserve(handMeshes[0].vertexCountOutput + handMeshes[1].vertexCountOutput);\n  indices.reserve(handMeshes[0].indexCountOutput + handMeshes[1].indexCountOutput);\n  for (uint8_t i = 0; i < 2; ++i) {\n    handsDrawParams_[i].indexCount = handMeshes[i].indexCountOutput;\n    handsDrawParams_[i].indexBufferOffset = indices.size() * sizeof(uint16_t);\n    const uint16_t baseVertex = static_cast<uint16_t>(vertexData.size());\n\n    for (size_t j = 0; j < handMeshes[i].vertexCountOutput; ++j) {\n      Vertex v;\n      v.position = handMeshes[i].vertexPositions[j];\n      v.normal = handMeshes[i].vertexNormals[j];\n      v.weight = handMeshes[i].vertexBlendWeights[j];\n      v.joint = handMeshes[i].vertexBlendIndices[j];\n      vertexData.push_back(v);\n    }\n    for (size_t j = 0; j < handMeshes[i].indexCountOutput; ++j) {\n      indices.push_back(baseVertex + static_cast<uint16_t>(handMeshes[i].indices[j]));\n    }\n\n    for (size_t j = 0; j < handMeshes[i].jointBindPoses.size(); ++j) {\n      jointInvBindMatrix_[i][j] = glm::inverse(poseToMat4(handMeshes[i].jointBindPoses[j]));\n    }\n  }\n\n  const BufferDesc vb0Desc = BufferDesc{\n      BufferDesc::BufferTypeBits::Vertex, vertexData.data(), sizeof(Vertex) * vertexData.size()};\n  vb0_ = device.createBuffer(vb0Desc, nullptr);\n  const BufferDesc ibDesc = BufferDesc{\n      BufferDesc::BufferTypeBits::Index, indices.data(), sizeof(uint16_t) * indices.size()};\n  ib0_ = device.createBuffer(ibDesc, nullptr);\n\n  const VertexInputStateDesc inputDesc = {\n      .numAttributes = 4,\n      .attributes =\n          {\n              {.bufferIndex = 0,\n               .format = VertexAttributeFormat::Float3,\n               .offset = offsetof(Vertex, position),\n               .name = \"position\",\n               .location = 0},\n              {.bufferIndex = 0,\n               .format = VertexAttributeFormat::Float3,\n               .offset = offsetof(Vertex, normal),\n               .name = \"normal\",\n               .location = 1},\n              {.bufferIndex = 0,\n               .format = VertexAttributeFormat::Float4,\n               .offset = offsetof(Vertex, weight),\n               .name = \"weight\",\n               .location = 2},\n              {.bufferIndex = 0,\n               .format = VertexAttributeFormat::Float4,\n               .offset = offsetof(Vertex, joint),\n               .name = \"joint\",\n               .location = 3},\n          },\n      .numInputBindings = 1,\n      .inputBindings = {{.stride = sizeof(Vertex)}},\n  };\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n\n  const iglu::ShaderCross shaderCross(device);\n  shaderStages_ = getShaderStagesForBackend(device, shaderCross, stereoRendering);\n\n  // Command queue: backed by different types of GPU HW queues\n  const CommandQueueDesc desc{};\n  commandQueue_ = device.createCommandQueue(desc, nullptr);\n\n  renderPass_.colorAttachments.resize(1);\n  renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n#if defined(IGL_OPENXR_MR_MODE)\n  renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 1.0, 0.0f};\n#else\n  renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 1.0, 1.0f};\n#endif\n  renderPass_.depthAttachment.loadAction = LoadAction::Clear;\n  renderPass_.depthAttachment.clearDepth = 1.0;\n}\n\nvoid HandsOpenXRSession::update(SurfaceTextures surfaceTextures) noexcept {\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n\n  if (shellParams().handMeshes[0].vertexCountOutput == 0 &&\n      shellParams().handMeshes[1].vertexCountOutput == 0) {\n    return;\n  }\n\n  // Update uniforms.\n  for (size_t i = 0; i < std::min(shellParams().viewParams.size(), size_t(2)); ++i) {\n    const auto currentViewId = shellParams().viewParams[i].viewIndex;\n    ub_.viewProjectionMatrix[currentViewId] =\n        perspectiveAsymmetricFovRH(shellParams().viewParams[i].fov, 0.1f, 100.0f) *\n        shellParams().viewParams[i].viewMatrix;\n    ub_.viewId = currentViewId;\n  }\n\n  IGL_DEBUG_ASSERT(!shellParams().viewParams.empty());\n  const auto viewIndex = shellParams().viewParams[0].viewIndex;\n\n  Result ret;\n  if (framebuffer_[viewIndex] == nullptr) {\n    FramebufferDesc framebufferDesc;\n    framebufferDesc.colorAttachments[0].texture = surfaceTextures.color;\n    framebufferDesc.depthAttachment.texture = surfaceTextures.depth;\n\n    framebufferDesc.mode = surfaceTextures.color->getNumLayers() > 1 ? FramebufferMode::Stereo\n                                                                     : FramebufferMode::Mono;\n\n    framebuffer_[viewIndex] = getPlatform().getDevice().createFramebuffer(framebufferDesc, &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_[viewIndex] != nullptr);\n  } else {\n    framebuffer_[viewIndex]->updateDrawable(surfaceTextures.color);\n  }\n\n  if (pipelineState_ == nullptr) {\n    const RenderPipelineDesc graphicsDesc = {\n        .vertexInputState = vertexInput0_,\n        .shaderStages = shaderStages_,\n        .targetDesc =\n            {\n                .colorAttachments =\n                    {\n                        {\n                            .textureFormat = framebuffer_[viewIndex]\n                                                 ->getColorAttachment(0)\n                                                 ->getProperties()\n                                                 .format,\n                        },\n                    },\n                .depthAttachmentFormat =\n                    framebuffer_[viewIndex]->getDepthAttachment()->getProperties().format,\n            },\n        .cullMode = igl::CullMode::Back,\n        .frontFaceWinding = igl::WindingMode::CounterClockwise,\n    };\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(graphicsDesc, nullptr);\n  }\n\n  if (depthStencilState_ == nullptr) {\n    DepthStencilStateDesc depthStencilDesc;\n    depthStencilDesc.isDepthWriteEnabled = true;\n    depthStencilDesc.compareFunction = CompareFunction::LessEqual;\n    depthStencilState_ =\n        getPlatform().getDevice().createDepthStencilState(depthStencilDesc, nullptr);\n  }\n\n  // Command buffers (1-N per thread): create, submit and forget\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_[viewIndex]);\n  commands->pushDebugGroupLabel(\"HandsOpenXRSession Commands\", Color(0.0f, 1.0f, 0.0f));\n\n  commands->bindVertexBuffer(0, *vb0_);\n\n  commands->bindRenderPipelineState(pipelineState_);\n  commands->bindDepthStencilState(depthStencilState_);\n\n  iglu::ManagedUniformBufferInfo info;\n  info.index = 1;\n  info.length = sizeof(UniformBlock);\n  info.uniforms =\n      std::vector<UniformDesc>{UniformDesc{\n                                   .name = \"jointMatrices\",\n                                   .location = -1,\n                                   .type = igl::UniformType::Mat4x4,\n                                   .numElements = kMaxJoints,\n                                   .offset = offsetof(UniformBlock, jointMatrices),\n                                   .elementStride = sizeof(glm::mat4),\n                               },\n                               UniformDesc{.name = \"viewProjectionMatrix\",\n                                           .location = -1,\n                                           .type = igl::UniformType::Mat4x4,\n                                           .numElements = 2,\n                                           .offset = offsetof(UniformBlock, viewProjectionMatrix),\n                                           .elementStride = sizeof(glm::mat4)},\n                               UniformDesc{\n                                   .name = \"viewId\",\n                                   .location = -1,\n                                   .type = igl::UniformType::Int,\n                                   .numElements = 1,\n                                   .offset = offsetof(UniformBlock, viewId),\n                                   .elementStride = 0,\n                               }};\n\n  std::shared_ptr<iglu::ShaderCrossUniformBuffer> ubos[2];\n  for (int i = 0; i < 2; ++i) {\n    const auto& handTracking = shellParams().handTracking[i];\n    IGL_DEBUG_ASSERT(handTracking.jointPose.size() <= kMaxJoints);\n    for (size_t j = 0; j < handTracking.jointPose.size(); ++j) {\n      ub_.jointMatrices[j] = poseToMat4(handTracking.jointPose[j]) * jointInvBindMatrix_[i][j];\n    }\n\n    ubos[i] = std::make_shared<iglu::ShaderCrossUniformBuffer>(device, \"perFrame\", info);\n    IGL_DEBUG_ASSERT(ubos[i]->result.isOk());\n    *static_cast<UniformBlock*>(ubos[i]->getData()) = ub_;\n\n    ubos[i]->bind(device, *pipelineState_, *commands);\n\n    commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16, handsDrawParams_[i].indexBufferOffset);\n    commands->drawIndexed(handsDrawParams_[i].indexCount);\n  }\n\n  commands->popDebugGroupLabel();\n  commands->endEncoding();\n\n  if (shellParams().shouldPresent) {\n    buffer->present(framebuffer_[viewIndex]->getColorAttachment(0));\n  }\n\n  commandQueue_->submit(*buffer); // Guarantees ordering between command buffers\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/HandsOpenXRSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <array>\n#include <glm/glm.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nconstexpr int kMaxJoints = 26;\n\nstruct UniformBlock {\n  glm::mat4 jointMatrices[kMaxJoints]{};\n  glm::mat4 viewProjectionMatrix[2]{};\n  int viewId = 0;\n};\n\nclass HandsOpenXRSession : public RenderSession {\n public:\n  explicit HandsOpenXRSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IDepthStencilState> depthStencilState_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb0_, ib0_;\n  std::shared_ptr<IFramebuffer> framebuffer_[2];\n\n  std::array<std::array<glm::mat4, kMaxJoints>, 2> jointInvBindMatrix_;\n\n  struct DrawParams {\n    size_t indexCount = 0;\n    size_t indexBufferOffset = 0;\n  } handsDrawParams_[2];\n\n  UniformBlock ub_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/HelloOpenXRSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/HelloOpenXRSession.h>\n\n#include <algorithm>\n#include <cmath>\n#include <cstddef>\n#include <glm/detail/qualifier.hpp>\n#include <IGLU/shaderCross/ShaderCross.h>\n#include <IGLU/shaderCross/ShaderCrossUniformBuffer.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/Device.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\n\nstruct VertexPosUvw {\n  glm::vec3 position;\n  glm::vec3 uvw;\n};\n\nconst float kHalf = 1.0f;\nconst VertexPosUvw kVertexData0[] = {\n    {.position = {-kHalf, kHalf, -kHalf}, .uvw = {0.0, 1.0, 0.0}},\n    {.position = {kHalf, kHalf, -kHalf}, .uvw = {1.0, 1.0, 0.0}},\n    {.position = {-kHalf, -kHalf, -kHalf}, .uvw = {0.0, 0.0, 0.0}},\n    {.position = {kHalf, -kHalf, -kHalf}, .uvw = {1.0, 0.0, 0.0}},\n    {.position = {kHalf, kHalf, kHalf}, .uvw = {1.0, 1.0, 1.0}},\n    {.position = {-kHalf, kHalf, kHalf}, .uvw = {0.0, 1.0, 1.0}},\n    {.position = {kHalf, -kHalf, kHalf}, .uvw = {1.0, 0.0, 1.0}},\n    {.position = {-kHalf, -kHalf, kHalf}, .uvw = {0.0, 0.0, 1.0}},\n};\nconstexpr uint16_t kIndexData[] = {0, 1, 2, 1, 3, 2, 1, 4, 3, 4, 6, 3, 4, 5, 6, 5, 7, 6,\n                                   5, 0, 7, 0, 2, 7, 5, 4, 0, 4, 1, 0, 2, 3, 7, 3, 6, 7};\n\n[[nodiscard]] const char* getVulkanFragmentShaderSource() {\n  return R\"(#version 450\n            precision highp float;\n            precision highp sampler2D;\n\n            layout(location = 0) in vec3 uvw;\n            layout(location = 1) in vec3 color;\n            layout(set = 0, binding = 0) uniform sampler2D inputImage;\n            layout(location = 0) out vec4 fragmentColor;\n\n            void main() {\n              fragmentColor = texture(inputImage, uvw.xy) * vec4(color, 1.0);\n            })\";\n}\n\n[[nodiscard]] std::string getVertexShaderProlog(bool stereoRendering) {\n  return stereoRendering ? R\"(#version 450\n    #extension GL_OVR_multiview2 : require\n    layout(num_views = 2) in;\n    precision highp float;\n\n    #define VIEW_ID int(gl_ViewID_OVR)\n  )\"\n                         : R\"(#version 450\n    precision highp float;\n\n    #define VIEW_ID perFrame.viewId\n  )\";\n}\n\n[[nodiscard]] std::string getVulkanVertexShaderSource(bool stereoRendering) {\n  return getVertexShaderProlog(stereoRendering) + R\"(\n            layout (set = 1, binding = 1, std140) uniform PerFrame {\n              mat4 modelMatrix;\n              mat4 viewProjectionMatrix[2];\n              float scaleZ;\n              int viewId;\n            } perFrame;\n\n            layout(location = 0) in vec3 position;\n            layout(location = 1) in vec3 uvw_in;\n            layout(location = 0) out vec3 uvw;\n            layout(location = 1) out vec3 color;\n\n            void main() {\n              mat4 mvpMatrix = perFrame.viewProjectionMatrix[VIEW_ID] * perFrame.modelMatrix;\n              gl_Position = mvpMatrix * vec4(position, 1.0);\n              uvw = vec3(uvw_in.x, uvw_in.y, (uvw_in.z - 0.5) * perFrame.scaleZ + 0.5);\n              color = vec3(1.0, 1.0, 0.0);\n            })\";\n}\n\n[[nodiscard]] std::unique_ptr<IShaderStages> getShaderStagesForBackend(\n    IDevice& device,\n    const iglu::ShaderCross& shaderCross,\n    bool stereoRendering) noexcept {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Metal:\n    IGL_DEBUG_ABORT(\"Metal is not supported\");\n    return nullptr;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getVulkanVertexShaderSource(stereoRendering).c_str(),\n        \"main\",\n        \"\",\n        getVulkanFragmentShaderSource(),\n        \"main\",\n        \"\",\n        nullptr);\n  case igl::BackendType::OpenGL: {\n    Result res;\n    const auto vs = shaderCross.crossCompileFromVulkanSource(\n        getVulkanVertexShaderSource(stereoRendering).c_str(), igl::ShaderStage::Vertex, &res);\n    IGL_DEBUG_ASSERT(res.isOk(), res.message.c_str());\n\n    const auto fs = shaderCross.crossCompileFromVulkanSource(\n        getVulkanFragmentShaderSource(), igl::ShaderStage::Fragment, &res);\n    IGL_DEBUG_ASSERT(res.isOk(), res.message.c_str());\n\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        vs.c_str(),\n        shaderCross.entryPointName(igl::ShaderStage::Vertex),\n        \"\",\n        fs.c_str(),\n        shaderCross.entryPointName(igl::ShaderStage::Fragment),\n        \"\",\n        nullptr);\n  }\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  }\n}\n\n[[nodiscard]] bool isDeviceCompatible(IDevice& device) noexcept {\n  return device.hasFeature(DeviceFeatures::Multiview);\n}\n\n[[nodiscard]] glm::mat4 perspectiveAsymmetricFovRH(const igl::shell::Fov& fov,\n                                                   float nearZ,\n                                                   float farZ) noexcept {\n  glm::mat4 mat;\n\n  const float tanLeft = tanf(fov.angleLeft);\n  const float tanRight = tanf(fov.angleRight);\n  const float tanDown = tanf(fov.angleDown);\n  const float tanUp = tanf(fov.angleUp);\n\n  const float tanWidth = tanRight - tanLeft;\n  const float tanHeight = tanUp - tanDown;\n\n  mat[0][0] = 2.0f / tanWidth;\n  mat[1][0] = 0.0f;\n  mat[2][0] = (tanRight + tanLeft) / tanWidth;\n  mat[3][0] = 0.0f;\n\n  mat[0][1] = 0.0f;\n  mat[1][1] = 2.0f / tanHeight;\n  mat[2][1] = (tanUp + tanDown) / tanHeight;\n  mat[3][1] = 0.0f;\n\n  mat[0][2] = 0.0f;\n  mat[1][2] = 0.0f;\n  mat[2][2] = -(farZ + nearZ) / (farZ - nearZ);\n  mat[3][2] = -2.0f * farZ * nearZ / (farZ - nearZ);\n\n  mat[0][3] = 0.0f;\n  mat[1][3] = 0.0f;\n  mat[2][3] = -1.0f;\n  mat[3][3] = 0.0f;\n\n  return mat;\n}\n} // namespace\n\nvoid HelloOpenXRSession::createSamplerAndTextures(const igl::IDevice& device) {\n  // Sampler & Texture\n  samp0_ = device.createSamplerState(\n      SamplerStateDesc{\n          .minFilter = SamplerMinMagFilter::Linear,\n          .magFilter = SamplerMinMagFilter::Linear,\n          .addressModeU = SamplerAddressMode::MirrorRepeat,\n          .addressModeV = SamplerAddressMode::MirrorRepeat,\n          .addressModeW = SamplerAddressMode::MirrorRepeat,\n      },\n      nullptr);\n\n  tex0_ = getPlatform().loadTexture(\"macbeth.png\");\n}\n\nvoid HelloOpenXRSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n  // Vertex buffer, Index buffer and Vertex Input\n  const BufferDesc vb0Desc{.type = BufferDesc::BufferTypeBits::Vertex,\n                           .data = kVertexData0,\n                           .length = sizeof(kVertexData0)};\n  vb0_ = device.createBuffer(vb0Desc, nullptr);\n  const BufferDesc ibDesc{\n      .type = BufferDesc::BufferTypeBits::Index, .data = kIndexData, .length = sizeof(kIndexData)};\n  ib0_ = device.createBuffer(ibDesc, nullptr);\n\n  const VertexInputStateDesc inputDesc = {\n      .numAttributes = 2,\n      .attributes =\n          {\n              {.bufferIndex = 0,\n               .format = VertexAttributeFormat::Float3,\n               .offset = offsetof(VertexPosUvw, position),\n               .name = \"position\",\n               .location = 0},\n              {.bufferIndex = 0,\n               .format = VertexAttributeFormat::Float3,\n               .offset = offsetof(VertexPosUvw, uvw),\n               .name = \"uvw_in\",\n               .location = 1},\n          },\n      .numInputBindings = 1,\n      .inputBindings = {{.stride = sizeof(VertexPosUvw)}},\n  };\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n\n  const bool stereoRendering = shellParams().viewParams.size() > 1;\n\n  createSamplerAndTextures(device);\n  const iglu::ShaderCross shaderCross(device);\n  shaderStages_ = getShaderStagesForBackend(device, shaderCross, stereoRendering);\n\n  // Command queue: backed by different types of GPU HW queues\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n\n  // Set up vertex uniform data\n  ub_.scaleZ = 1.0f;\n\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n#if defined(IGL_OPENXR_MR_MODE)\n                  .clearColor = {0.0, 0.0, 1.0, 0.0f},\n#else\n                  .clearColor = {0.0, 0.0, 1.0, 1.0f},\n#endif\n              },\n          },\n      .depthAttachment = {.loadAction = LoadAction::Clear, .clearDepth = 1.0},\n  };\n}\n\nvoid HelloOpenXRSession::updateUniformBlock() {\n  // rotating animation\n  static float angle = 0.0f, scaleZ = 1.0f, ss = 0.005f;\n  angle += 0.005f;\n  scaleZ += ss;\n  scaleZ = scaleZ < 0.0f ? 0.0f : (scaleZ > 1.0 ? 1.0f : scaleZ);\n  if (scaleZ <= 0.05f || scaleZ >= 1.0f) {\n    ss *= -1.0f;\n  }\n\n  const glm::mat4 rotMat = glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 1.0f, 0.0f)) *\n                           glm::rotate(glm::mat4(1.0f), -0.2f, glm::vec3(1.0f, 0.0f, 0.0f));\n  ub_.modelMatrix = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.f, -8.0f)) * rotMat *\n                    glm::scale(glm::mat4(1.0f), glm::vec3(1.0f, 1.0f, scaleZ));\n  for (size_t i = 0; i < std::min(shellParams().viewParams.size(), size_t(2)); ++i) {\n    const auto viewIndex = shellParams().viewParams[i].viewIndex;\n\n    ub_.viewProjectionMatrix[viewIndex] =\n        perspectiveAsymmetricFovRH(shellParams().viewParams[i].fov, 0.1f, 100.0f) *\n        shellParams().viewParams[i].viewMatrix;\n    ub_.viewId = viewIndex;\n  }\n\n  ub_.scaleZ = scaleZ;\n}\n\nvoid HelloOpenXRSession::update(SurfaceTextures surfaceTextures) noexcept {\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n\n  updateUniformBlock();\n\n  IGL_DEBUG_ASSERT(!shellParams().viewParams.empty());\n  const auto viewIndex = shellParams().viewParams[0].viewIndex;\n\n  Result ret;\n  if (framebuffer_[viewIndex] == nullptr) {\n    const FramebufferMode mode = surfaceTextures.color->getNumLayers() > 1 ? FramebufferMode::Stereo\n                                                                           : FramebufferMode::Mono;\n\n    framebuffer_[viewIndex] = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = surfaceTextures.color}},\n            .depthAttachment = {.texture = surfaceTextures.depth},\n            .mode = mode,\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_[viewIndex] != nullptr);\n  } else {\n    framebuffer_[viewIndex]->updateDrawable(surfaceTextures.color);\n  }\n\n  constexpr uint32_t textureUnit = 0;\n  if (pipelineState_ == nullptr) {\n    // Graphics pipeline: state batch that fully configures GPU for rendering\n\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInput0_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments =\n                        {\n                            {\n                                .textureFormat = framebuffer_[viewIndex]\n                                                     ->getColorAttachment(0)\n                                                     ->getProperties()\n                                                     .format,\n                            },\n                        },\n                    .depthAttachmentFormat =\n                        framebuffer_[viewIndex]->getDepthAttachment()->getProperties().format,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::CounterClockwise,\n            .fragmentUnitSamplerMap = {{textureUnit, IGL_NAMEHANDLE(\"inputImage\")}},\n        },\n        nullptr);\n  }\n\n  // Command buffers (1-N per thread): create, submit and forget\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_[viewIndex]);\n  commands->pushDebugGroupLabel(\"HelloOpenXRSession Commands\", Color(0.0f, 1.0f, 0.0f));\n\n  commands->bindVertexBuffer(0, *vb0_);\n\n  const iglu::ManagedUniformBufferInfo info = {\n      .index = 1,\n      .length = sizeof(UniformBlock),\n      .uniforms =\n          {\n              {\n                  .name = \"modelMatrix\",\n                  .location = -1,\n                  .type = igl::UniformType::Mat4x4,\n                  .numElements = 1,\n                  .offset = offsetof(UniformBlock, modelMatrix),\n                  .elementStride = 0,\n              },\n              {\n                  .name = \"viewProjectionMatrix\",\n                  .location = -1,\n                  .type = igl::UniformType::Mat4x4,\n                  .numElements = 2,\n                  .offset = offsetof(UniformBlock, viewProjectionMatrix),\n                  .elementStride = sizeof(glm::mat4),\n              },\n              {\n                  .name = \"scaleZ\",\n                  .location = -1,\n                  .type = igl::UniformType::Float,\n                  .numElements = 1,\n                  .offset = offsetof(UniformBlock, scaleZ),\n                  .elementStride = 0,\n              },\n              {\n                  .name = \"viewId\",\n                  .location = -1,\n                  .type = igl::UniformType::Int,\n                  .numElements = 1,\n                  .offset = offsetof(UniformBlock, viewId),\n                  .elementStride = 0,\n              },\n          },\n  };\n\n  const auto ubo = std::make_shared<iglu::ShaderCrossUniformBuffer>(device, \"perFrame\", info);\n  IGL_DEBUG_ASSERT(ubo->result.isOk());\n  *static_cast<UniformBlock*>(ubo->getData()) = ub_;\n\n  ubo->bind(device, *pipelineState_, *commands);\n\n  commands->bindTexture(textureUnit, BindTarget::kFragment, tex0_.get());\n  commands->bindSamplerState(textureUnit, BindTarget::kFragment, samp0_.get());\n\n  commands->bindRenderPipelineState(pipelineState_);\n\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n  commands->drawIndexed(static_cast<size_t>(3u * 6u * 2u));\n\n  commands->popDebugGroupLabel();\n  commands->endEncoding();\n\n  if (shellParams().shouldPresent) {\n    buffer->present(framebuffer_[viewIndex]->getColorAttachment(0));\n  }\n\n  commandQueue_->submit(*buffer); // Guarantees ordering between command buffers\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/HelloOpenXRSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <glm/glm.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nstruct UniformBlock {\n  glm::mat4 modelMatrix = glm::mat4(1.0);\n  glm::mat4 viewProjectionMatrix[2]{};\n  float scaleZ{};\n  int viewId = 0;\n};\n\nclass HelloOpenXRSession : public RenderSession {\n public:\n  explicit HelloOpenXRSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb0_, ib0_; // Buffers for vertices and indices (or constants)\n  std::shared_ptr<ITexture> tex0_;\n  std::shared_ptr<ISamplerState> samp0_;\n  std::shared_ptr<IFramebuffer> framebuffer_[2];\n\n  UniformBlock ub_;\n\n  // utility fns\n  void createSamplerAndTextures(const IDevice& /*device*/);\n  void updateUniformBlock();\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/HelloWorldSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/HelloWorldSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\nstruct VertexPosColor {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float4 color;\n};\nconst VertexPosColor kVertexData[] = {\n    {.position = {-0.6f, -0.4f, 0.0}, .color = {1.0, 0.0, 0.0, 1.0}},\n    {.position = {0.6f, -0.4f, 0.0}, .color = {0.0, 1.0, 0.0, 1.0}},\n    {.position = {0.0f, 0.6f, 0.0}, .color = {0.0, 0.0, 1.0, 1.0}},\n};\nconst uint16_t kIndexData[] = {\n    2,\n    1,\n    0,\n};\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float4 color;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.color = vertices[vid].color;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return IN.color;\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  vColor = color_in;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_FragColor = vColor;\n                })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  color = color_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec4 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = color;\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; float4 color : COLOR; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); o.color = v.color; return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float4 color : COLOR; };\n      float4 main(PSIn i) : SV_TARGET { return i.color; }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n} // namespace\n\nvoid HelloWorldSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex & Index buffer\n  vb0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                        .data = kVertexData,\n                                        .length = sizeof(kVertexData)},\n                             nullptr);\n  IGL_DEBUG_ASSERT(vb0_ != nullptr);\n  ib0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                        .data = kIndexData,\n                                        .length = sizeof(kIndexData)},\n                             nullptr);\n  IGL_DEBUG_ASSERT(ib0_ != nullptr);\n\n  vertexInput0_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosColor, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float4,\n                                  .offset = offsetof(VertexPosColor, color),\n                                  .name = \"color_in\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{}, {.stride = sizeof(VertexPosColor)}},\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexInput0_ != nullptr);\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid HelloWorldSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // Graphics pipeline\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInput0_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Command Buffers\n  const auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  const auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(1, *vb0_);\n    commands->bindRenderPipelineState(pipelineState_);\n    commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n    commands->drawIndexed(3);\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/HelloWorldSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass HelloWorldSession : public RenderSession {\n public:\n  explicit HelloWorldSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<ITexture> depthTexture_;\n  std::shared_ptr<IRenderPipelineState> renderPipelineStateTriangle_;\n  std::shared_ptr<IBuffer> vb0_;\n  std::shared_ptr<IBuffer> ib0_;\n  std::vector<UniformDesc> vertexUniformDescriptors_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/ImguiSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/ImguiSession.h>\n\n#include <shell/shared/platform/DisplayContext.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n\nnamespace igl::shell {\n\nvoid ImguiSession::initialize() noexcept {\n  commandQueue_ = getPlatform().getDevice().createCommandQueue({}, nullptr);\n\n  // Create the ImGui session\n  imguiSession_ = std::make_unique<iglu::imgui::Session>(getPlatform().getDevice(),\n                                                         getPlatform().getInputDispatcher());\n}\n\nvoid ImguiSession::update(SurfaceTextures surfaceTextures) noexcept {\n  const igl::DeviceScope deviceScope(getPlatform().getDevice());\n\n  auto cmdBuffer = commandQueue_->createCommandBuffer({}, nullptr);\n\n  const FramebufferDesc framebufferDesc = {\n      .colorAttachments = {{.texture = surfaceTextures.color}},\n  };\n  if (outputFramebuffer_) {\n    outputFramebuffer_->updateDrawable(surfaceTextures.color);\n  } else {\n    outputFramebuffer_ = getPlatform().getDevice().createFramebuffer(framebufferDesc, nullptr);\n  }\n\n  const RenderPassDesc renderPassDesc = {\n      .colorAttachments = {{\n          .loadAction = igl::LoadAction::Clear,\n          .storeAction = igl::StoreAction::Store,\n          .clearColor = getPreferredClearColor(),\n      }},\n  };\n  auto encoder = cmdBuffer->createRenderCommandEncoder(renderPassDesc, outputFramebuffer_);\n\n  { // Draw using ImGui every frame\n    imguiSession_->beginFrame(framebufferDesc, getPlatform().getDisplayContext().pixelsPerPoint);\n    ImGui::ShowDemoWindow();\n    imguiSession_->endFrame(getPlatform().getDevice(), *encoder);\n  }\n\n  encoder->endEncoding();\n  if (shellParams().shouldPresent) {\n    cmdBuffer->present(surfaceTextures.color);\n  }\n\n  commandQueue_->submit(*cmdBuffer);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/ImguiSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/imgui/Session.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/CommandQueue.h>\n#include <igl/Framebuffer.h>\n\nnamespace igl::shell {\n\nclass ImguiSession : public RenderSession {\n public:\n  explicit ImguiSession(std::shared_ptr<Platform> platform) : RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IFramebuffer> outputFramebuffer_;\n  std::unique_ptr<iglu::imgui::Session> imguiSession_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/MRTSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/MRTSession.h>\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/CommandBuffer.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/ShaderCreator.h>\n#include <igl/VertexInputState.h>\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/Config.h>\n#endif\n\nnamespace igl::shell {\nstruct VertexPosUv {\n  iglu::simdtypes::float3 position; // SIMD 128b aligned\n  iglu::simdtypes::float2 uv; // SIMD 128b aligned\n};\nstatic const VertexPosUv kVertexData0[] = {\n    {.position = {-0.9f, 0.9f, 0.0}, .uv = {0.0, 1.0}},\n    {.position = {-0.05f, 0.9f, 0.0}, .uv = {1.0, 1.0}},\n    {.position = {-0.9f, -0.9f, 0.0}, .uv = {0.0, 0.0}},\n    {.position = {-0.05f, -0.9f, 0.0}, .uv = {1.0, 0.0}},\n};\nstatic const VertexPosUv kVertexData1[] = {\n    {.position = {0.05f, 0.9f, 0.0}, .uv = {0.0, 1.0}},\n    {.position = {0.90f, 0.9f, 0.0}, .uv = {1.0, 1.0}},\n    {.position = {0.05f, -0.9f, 0.0}, .uv = {0.0, 0.0}},\n    {.position = {0.90f, -0.9f, 0.0}, .uv = {1.0, 0.0}},\n};\nstatic const uint16_t kIndexData[] = {\n    0,\n    1,\n    2,\n    1,\n    3,\n    2,\n};\n\nenum class ShaderPrecision { Low, Medium, High };\n\nstatic std::string getPrecisionProlog(ShaderPrecision precision) {\n#if IGL_BACKEND_OPENGL && IGL_OPENGL_ES\n  switch (precision) {\n  case ShaderPrecision::Low:\n    return {\"precision lowp float;\"};\n  case ShaderPrecision::Medium:\n    return {\"precision mediump float;\"};\n  case ShaderPrecision::High:\n    return {\"precision highp float;\"};\n  }\n#else\n  return std::string();\n#endif\n}\n\nstatic std::string getVersionProlog() {\n#if IGL_BACKEND_OPENGL\n#if IGL_OPENGL_ES\n  return \"#version 300 es\\n\";\n#else\n  return \"#version 410\\n\";\n#endif\n#else\n  return \"\";\n#endif\n}\n\nstatic std::string getMetalShaderSource(int metalShaderIdx) {\n  switch (metalShaderIdx) {\n  case 0:\n    return R\"(\n                    #include <metal_stdlib>\n                    #include <simd/simd.h>\n                    #line 0\n                    using namespace metal;\n\n                     struct VertexIn {\n                       float3 position [[attribute(0)]];\n                       float2 uv [[attribute(1)]];\n                     };\n\n                     struct VertexOut {\n                       float4 position [[position]];\n                       float2 uv;\n                     };\n\n                     vertex VertexOut vertexShader(\n                         uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(0)]]) {\n                       VertexOut out;\n                       out.position = float4(vertices[vid].position, 1.0);\n                       out.uv = vertices[vid].uv;\n                       return out;\n                     }\n\n                     struct FragmentOutput {\n                       float4 colorOutGreen [[color(0)]];\n                       float4 colorOutRed [[color(1)]];\n                     };\n\n                     fragment FragmentOutput fragmentShader(VertexOut IN [[stage_in]],\n                                                            texture2d<float> diffuseTex\n                                                            [[texture(0)]]) {\n                       constexpr sampler linearSampler(mag_filter::linear,\n                                                       min_filter::linear);\n                       FragmentOutput f;\n                       float4 c = diffuseTex.sample(linearSampler, IN.uv);\n                       f.colorOutRed.r = c.r;\n                       f.colorOutRed.g = 0.0;\n                       f.colorOutRed.b = 0.0;\n                       f.colorOutRed.a = 1.0;\n                       f.colorOutGreen.r = 0.0;\n                       f.colorOutGreen.g = c.g;\n                       f.colorOutGreen.b = 0.0;\n                       f.colorOutGreen.a = 1.0;\n\n                       return f;\n                     })\";\n  default:\n    return R\"(\n                      #include <metal_stdlib>\n                      #include <simd/simd.h>\n                      #line 0\n                      using namespace metal;\n\n                      struct VertexIn {\n                        float3 position [[attribute(0)]];\n                        float2 uv [[attribute(1)]];\n                      };\n\n                      struct VertexOut {\n                        float4 position [[position]];\n                        float2 uv;\n                      };\n\n                      vertex VertexOut vertexShader(\n                          uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(0)]]) {\n                        VertexOut out;\n                        out.position = float4(vertices[vid].position, 1.0);\n                        out.uv = vertices[vid].uv;\n                        return out;\n                      }\n\n                      fragment float4 fragmentShader(VertexOut IN [[stage_in]],\n                                                    texture2d<float> greenTex [[texture(0)]],\n                                                    texture2d<float> redTex [[texture(1)]]) {\n                        constexpr sampler linearSampler(mag_filter::linear,\n                                                        min_filter::linear);\n                        float4 c = greenTex.sample(linearSampler, IN.uv) +\n                                  redTex.sample(linearSampler, IN.uv);\n                        return c;\n                      })\";\n  }\n}\n\nstatic std::string getOpenGLVertexShaderSource() {\n  return getVersionProlog() + getPrecisionProlog(ShaderPrecision::High) + R\"(\n                in vec3 position;\n                in vec2 uv_in;\n                out vec2 uv;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  uv = uv_in;\n                })\";\n}\n\nstatic std::string getOpenGLFragmentShaderSource(int programIndex) {\n  if (programIndex == 0) {\n    return getVersionProlog() + getPrecisionProlog(ShaderPrecision::High) + R\"(\n                uniform sampler2D inputImage;\n                in vec2 uv;\n                layout(location = 0) out vec4 colorGreen;\n                layout(location = 1) out vec4 colorRed;\n                void main() {\n                  vec4 c = texture(inputImage, uv);\n                  colorGreen = vec4(0., c.g, 0., 1.0);\n                  colorRed = vec4(c.r, 0., 0., 1.0);\n                })\";\n  } else {\n    return getVersionProlog() + getPrecisionProlog(ShaderPrecision::High) + R\"(\n                uniform sampler2D colorRed;\n                uniform sampler2D colorGreen;\n                in vec2 uv;\n                out vec4 colorOut;\n                void main() {\n                  colorOut = texture(colorRed, uv) + texture(colorGreen, uv);\n                })\";\n  }\n}\n\nstatic std::string getVulkanVertexShaderSource() {\n  return getPrecisionProlog(ShaderPrecision::High) + R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec2 uv_in;\n                layout(location = 0) out vec2 uv;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  uv = uv_in;\n                })\";\n}\n\nstatic std::string getVulkanFragmentShaderSource(int programIndex) {\n  if (programIndex == 0) {\n    return getPrecisionProlog(ShaderPrecision::High) + R\"(\n                layout(location = 0) in vec2 uv;\n                layout(location = 0) out vec4 colorGreen;\n                layout(location = 1) out vec4 colorRed;\n\n                layout(set = 0, binding = 0) uniform sampler2D in_texture;\n\n                void main() {\n                  vec4 c = texture(in_texture, uv);\n                  colorGreen = vec4(0., c.g, 0., 1.0);\n                  colorRed = vec4(c.r, 0., 0., 1.0);\n                })\";\n  } else {\n    return getPrecisionProlog(ShaderPrecision::High) + R\"(\n                layout(location = 0) in vec2 uv;\n                layout(location = 0) out vec4 out_FragColor;\n\n                layout(set = 0, binding = 0) uniform sampler2D in_texture_green;\n                layout(set = 0, binding = 1) uniform sampler2D in_texture_red;\n\n                void main() {\n                  vec2 uv1 = vec2(uv.x, 1.0-uv.y);\n                  out_FragColor = texture(in_texture_green, uv1) + texture(in_texture_red, uv1);\n                })\";\n  }\n}\n\nstatic std::unique_ptr<IShaderStages> createShaderStagesForBackend(const IDevice& device,\n                                                                   int programIndex) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getVulkanVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getVulkanFragmentShaderSource(programIndex).c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ABORT(\"No Custom shader available\");\n    return nullptr;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::D3D12: {\n    if (programIndex == 0) {\n      // First pass: write to SV_Target0 and SV_Target1\n      static const char* kVS = R\"(\n        struct VSIn { float3 position: POSITION; float2 uv: TEXCOORD0; };\n        struct VSOut { float4 position: SV_POSITION; float2 uv: TEXCOORD0; };\n        VSOut main(VSIn v){ VSOut o; o.position=float4(v.position,1); o.uv=v.uv; return o; }\n      )\";\n      static const char* kPS = R\"(\n        Texture2D inputImage : register(t0); SamplerState s0 : register(s0);\n        struct PSIn { float4 position: SV_POSITION; float2 uv: TEXCOORD0; };\n        struct PSOut { float4 colorGreen: SV_Target0; float4 colorRed: SV_Target1; };\n        PSOut main(PSIn i){ float4 c = inputImage.Sample(s0, i.uv);\n          // Input PNG data arrives as BGRA, so route blue channel into the second target.\n          PSOut o; o.colorGreen=float4(0,c.g,0,1); o.colorRed=float4(c.b,0,0,1); return o; }\n      )\";\n      return igl::ShaderStagesCreator::fromModuleStringInput(\n          device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n    } else {\n      // Second pass: sample two textures and output sum\n      static const char* kVS = R\"(\n        struct VSIn { float3 position: POSITION; float2 uv: TEXCOORD0; };\n        struct VSOut { float4 position: SV_POSITION; float2 uv: TEXCOORD0; };\n        VSOut main(VSIn v){ VSOut o; o.position=float4(v.position,1); o.uv=v.uv; return o; }\n      )\";\n      static const char* kPS = R\"(\n        Texture2D colorGreen : register(t0); Texture2D colorRed : register(t1); SamplerState s0 : register(s0);\n        struct PSIn { float4 position: SV_POSITION; float2 uv: TEXCOORD0; };\n        float4 main(PSIn i) : SV_Target { float2 uv1=float2(i.uv.x, 1.0 - i.uv.y);\n          return colorGreen.Sample(s0, uv1) + colorRed.Sample(s0, uv1); }\n      )\";\n      return igl::ShaderStagesCreator::fromModuleStringInput(\n          device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n    }\n  }\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getOpenGLVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getOpenGLFragmentShaderSource(programIndex).c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device,\n        getMetalShaderSource(programIndex).c_str(),\n        \"vertexShader\",\n        \"fragmentShader\",\n        \"\",\n        nullptr);\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\nstatic bool isDeviceCompatible(IDevice& device) noexcept {\n  return device.hasFeature(DeviceFeatures::MultipleRenderTargets);\n}\n\nvoid MRTSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n\n  // Vertex buffer, Index buffer and Vertex Input\n  vb0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                        .data = kVertexData0,\n                                        .length = sizeof(kVertexData0)},\n                             nullptr);\n  vb1_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                        .data = kVertexData1,\n                                        .length = sizeof(kVertexData1)},\n                             nullptr);\n  ib0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                        .data = kIndexData,\n                                        .length = sizeof(kIndexData)},\n                             nullptr);\n\n  vertexInput_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 0,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosUv, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 0,\n                                  .format = VertexAttributeFormat::Float2,\n                                  .offset = offsetof(VertexPosUv, uv),\n                                  .name = \"uv_in\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{.stride = sizeof(VertexPosUv)}},\n      },\n      nullptr);\n\n  // Sampler & Texture\n  samp0_ = device.createSamplerState(\n      SamplerStateDesc{\n          .minFilter = SamplerMinMagFilter::Linear,\n          .magFilter = SamplerMinMagFilter::Linear,\n          .debugName = \"Sampler: linear\",\n      },\n      nullptr);\n  tex0_ = getPlatform().loadTexture(\"igl.png\");\n\n  shaderStagesMRT_ = createShaderStagesForBackend(device, 0);\n  shaderStagesDisplayLast_ = createShaderStagesForBackend(device, 1);\n\n  commandQueue_ = device.createCommandQueue({}, nullptr);\n\n  tex0_->generateMipmap(*commandQueue_);\n\n  renderPassMRT_ = {\n      .colorAttachments = {{\n          {\n              .loadAction = LoadAction::Clear,\n              .storeAction = StoreAction::Store,\n              .clearColor = getPreferredClearColor(),\n          },\n          {\n              .loadAction = LoadAction::Clear,\n              .storeAction = StoreAction::Store,\n              .clearColor = getPreferredClearColor(),\n          },\n      }},\n  };\n\n  renderPassDisplayLast_ = {\n      .colorAttachments = {{\n          {\n              .loadAction = LoadAction::Clear,\n              .storeAction = StoreAction::Store,\n              .clearColor = getPreferredClearColor(),\n          },\n      }},\n  };\n}\n\n// NOLINTNEXTLINE(facebook-hte-ConstantArgumentPassByValue)\nvoid MRTSession::update(const igl::SurfaceTextures surfaceTextures) noexcept {\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n\n  createOrUpdateFramebufferMRT(surfaceTextures);\n\n  const size_t textureUnit = 0;\n\n  // Graphics pipeline: state batch that fully configures GPU for rendering\n  if (pipelineStateMRT_ == nullptr) {\n    pipelineStateMRT_ = device.createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInput_,\n            .shaderStages = shaderStagesMRT_,\n            .targetDesc =\n                {\n                    .colorAttachments =\n                        {\n                            {\n                                .textureFormat = surfaceTextures.color->getProperties().format,\n                                .blendEnabled = true,\n                                .rgbBlendOp = BlendOp::Add,\n                                .alphaBlendOp = BlendOp::Add,\n                                .srcRGBBlendFactor = BlendFactor::SrcAlpha,\n                                .srcAlphaBlendFactor = BlendFactor::SrcAlpha,\n                                .dstRGBBlendFactor = BlendFactor::OneMinusSrcAlpha,\n                                .dstAlphaBlendFactor = BlendFactor::OneMinusSrcAlpha,\n                            },\n                            {\n                                .textureFormat = surfaceTextures.color->getProperties().format,\n                                .blendEnabled = true,\n                                .rgbBlendOp = BlendOp::Add,\n                                .alphaBlendOp = BlendOp::Add,\n                                .srcRGBBlendFactor = BlendFactor::SrcAlpha,\n                                .srcAlphaBlendFactor = BlendFactor::SrcAlpha,\n                                .dstRGBBlendFactor = BlendFactor::OneMinusSrcAlpha,\n                                .dstAlphaBlendFactor = BlendFactor::OneMinusSrcAlpha,\n                            },\n                        },\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n            .fragmentUnitSamplerMap = {{textureUnit, IGL_NAMEHANDLE(\"inputImage\")}},\n        },\n        nullptr);\n  }\n\n  const std::shared_ptr<ICommandBuffer> buffer = commandQueue_->createCommandBuffer({}, nullptr);\n\n  auto commands = buffer->createRenderCommandEncoder(renderPassMRT_, framebufferMRT_);\n\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n\n  // Draw call 0\n  // clang-format off\n  commands->bindVertexBuffer(0, *vb0_);\n  commands->bindRenderPipelineState(pipelineStateMRT_);\n  commands->bindTexture(textureUnit, BindTarget::kFragment, tex0_.get());\n  commands->bindSamplerState(textureUnit, BindTarget::kFragment, samp0_.get());\n  commands->drawIndexed(6);\n  // clang-format on\n\n  // Draw call 1\n  // clang-format off\n  commands->bindVertexBuffer(0, *vb1_);\n  commands->drawIndexed(6);\n  // clang-format on\n\n  commands->endEncoding();\n\n  createOrUpdateFramebufferDisplayLast(surfaceTextures);\n\n  if (pipelineStateLastDisplay_ == nullptr) {\n    pipelineStateLastDisplay_ = device.createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInput_,\n            .shaderStages = shaderStagesDisplayLast_,\n            .targetDesc =\n                {\n                    .colorAttachments =\n                        {\n                            {\n                                .textureFormat = surfaceTextures.color->getProperties().format,\n                            },\n                        },\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n            .fragmentUnitSamplerMap =\n                {\n                    {textureUnit, IGL_NAMEHANDLE(\"colorRed\")},\n                    {textureUnit + 1, IGL_NAMEHANDLE(\"colorGreen\")},\n                },\n        },\n        nullptr);\n  }\n\n  // Command buffers (1-N per thread): create, submit and forget\n\n  commands = buffer->createRenderCommandEncoder(renderPassDisplayLast_, framebufferDisplayLast_);\n\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n\n  // Draw call 0\n  // clang-format off\n  commands->bindRenderPipelineState(pipelineStateLastDisplay_);\n  const auto green = framebufferMRT_->getColorAttachment(0);\n  commands->bindTexture(textureUnit, BindTarget::kFragment, green.get());\n  commands->bindSamplerState(textureUnit, BindTarget::kFragment, samp0_.get());\n  const auto red = framebufferMRT_->getColorAttachment(1);\n  commands->bindTexture(textureUnit+1, BindTarget::kFragment, red.get());\n  commands->bindSamplerState(textureUnit+1, BindTarget::kFragment, samp0_.get());\n\n  commands->bindVertexBuffer(0,  *vb0_);\n  commands->drawIndexed(6);\n\n  commands->bindVertexBuffer(0, *vb1_);\n  commands->drawIndexed(6);\n\n  // clang-format on\n  commands->endEncoding();\n\n  if (shellParams().shouldPresent) {\n    buffer->present(surfaceTextures.color);\n  }\n\n  commandQueue_->submit(*buffer); // Guarantees ordering between command buffers\n}\n\nstd::shared_ptr<ITexture> MRTSession::createTexture2D(const std::shared_ptr<ITexture>& tex) {\n  const auto dimensions = tex->getDimensions();\n  TextureDesc desc = TextureDesc::new2D(tex->getProperties().format,\n                                        dimensions.width,\n                                        dimensions.height,\n                                        TextureDesc::TextureUsageBits::Attachment |\n                                            TextureDesc::TextureUsageBits::Sampled);\n  desc.debugName = \"shell/renderSessions/MRTSession.cpp:MRTSession::createTexture2D()\";\n\n  return getPlatform().getDevice().createTexture(desc, nullptr);\n}\n\nvoid MRTSession::createOrUpdateFramebufferDisplayLast(const igl::SurfaceTextures& surfaceTextures) {\n  if (framebufferDisplayLast_) {\n    framebufferDisplayLast_->updateDrawable(surfaceTextures.color);\n    return;\n  }\n\n  // Framebuffer & Texture\n  const FramebufferDesc framebufferDesc = {\n      .colorAttachments = {{.texture = surfaceTextures.color}},\n  };\n\n  framebufferDisplayLast_ = getPlatform().getDevice().createFramebuffer(framebufferDesc, nullptr);\n}\n\nvoid MRTSession::createOrUpdateFramebufferMRT(const igl::SurfaceTextures& surfaceTextures) {\n  if (framebufferMRT_) {\n    return;\n  }\n\n  if (tex1_ == nullptr) {\n    tex1_ = createTexture2D(surfaceTextures.color);\n  }\n  if (tex2_ == nullptr) {\n    tex2_ = createTexture2D(surfaceTextures.color);\n  }\n  // Framebuffer & Texture\n  const FramebufferDesc framebufferDesc = {\n      .colorAttachments =\n          {\n              {.texture = tex1_},\n              {.texture = tex2_},\n          },\n  };\n\n  framebufferMRT_ = getPlatform().getDevice().createFramebuffer(framebufferDesc, nullptr);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/MRTSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/RenderPass.h>\n\nnamespace igl::shell {\n\nclass MRTSession : public RenderSession {\n public:\n  explicit MRTSession(std::shared_ptr<Platform> platform) : RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<ITexture> createTexture2D(const std::shared_ptr<ITexture>& tex);\n  void createOrUpdateFramebufferDisplayLast(const igl::SurfaceTextures& surfaceTextures);\n  void createOrUpdateFramebufferMRT(const igl::SurfaceTextures& surfaceTextures);\n\n private:\n  // for the MRT pass\n  RenderPassDesc renderPassMRT_;\n  std::shared_ptr<IFramebuffer> framebufferMRT_;\n  std::shared_ptr<IRenderPipelineState> pipelineStateMRT_;\n  std::shared_ptr<IShaderStages> shaderStagesMRT_;\n\n  // for last display pass\n  RenderPassDesc renderPassDisplayLast_;\n  std::shared_ptr<IFramebuffer> framebufferDisplayLast_;\n  std::shared_ptr<IRenderPipelineState> pipelineStateLastDisplay_;\n  std::shared_ptr<IShaderStages> shaderStagesDisplayLast_;\n\n  std::shared_ptr<IVertexInputState> vertexInput_;\n\n  std::shared_ptr<IBuffer> vb0_, vb1_, ib0_;\n\n  std::shared_ptr<ITexture> tex0_; // Textures\n  std::shared_ptr<ITexture> tex1_; // for MRT attachment 0\n  std::shared_ptr<ITexture> tex2_; // for MRT attachment 1\n  std::shared_ptr<ISamplerState> samp0_; // Samplers for texture (mipmap, clamp, linear etc.)\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/MeshShaderTriangleSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/MeshShaderTriangleSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\n\nstd::string getMetalTaskShaderSource() {\n  return R\"(\nusing namespace metal;\n\n[[object]]\nvoid taskMain(mesh_grid_properties meshGridProperties) {\n  meshGridProperties.set_threadgroups_per_grid(uint3(1, 1, 1));\n}\n)\";\n}\n\nstd::string getMetalMeshShaderSource() {\n  return R\"(\nusing namespace metal;\n\nstruct VertexOut{\n  float4 position [[position]];\n  float4 color [[user(locn0)]];\n};\n\nstruct UniformBlock {\n  float4x4 mvpMatrix;\n};\n\nusing TriangleMeshType = metal::mesh<VertexOut, void, 64, 64, metal::topology::triangle>;\n\nconstant float4 vertexData[3] = {{-0.6f, -0.4f, 0.0, 1.0}, {0.6f, -0.4f, 0.0, 1.0}, {0.0f, 0.6f, 0.0, 1.0}};\nconstant float4 colorData[3]  = {{1.0, 0.0, 0.0, 1.0}, {0.0, 1.0, 0.0, 1.0}, {0.0, 0.0, 1.0, 1.0}};\n\n[[mesh]]\nvoid meshMain(TriangleMeshType output, constant UniformBlock &vUniform[[buffer(1)]]) {\n  output.set_primitive_count(1);\n\n  for (int i = 0; i != 3; ++i){\n    VertexOut v;\n    v.position = vUniform.mvpMatrix * vertexData[i];\n    v.color = colorData[i];\n    output.set_vertex(i, v);\n  }\n\n  output.set_index(0, 0);\n  output.set_index(1, 1);\n  output.set_index(2, 2);\n}\n)\";\n}\n\nstd::string getMetalFragmentShaderSource() {\n  return R\"(\nusing namespace metal;\n\nstruct FS_IN{\n  float4 color [[user(locn0)]];\n};\n\nfragment float4 fragmentMain(FS_IN in [[stage_in]]) {\n  return in.color;\n}\n)\";\n}\n\nstd::string getVulkanTaskShaderSource() {\n  return R\"(\n#version 460\n#extension GL_EXT_mesh_shader : enable\n\nlayout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n\nvoid main(){\n  EmitMeshTasksEXT(1,1,1);\n}\n)\";\n}\n\nstd::string getVulkanMeshShaderSource() {\n  return R\"(\n#version 460\n#extension GL_EXT_mesh_shader : enable\n\nlayout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;\n\nlayout(set = 1, binding = 1, std140) uniform UniformBlock {\n  mat4 mvpMatrix;\n};\n\nlayout(location = 0) out PerVertexData {vec4 color; } v_out[];\n\nlayout(triangles, max_vertices = 3, max_primitives = 1) out;\n\nconst vec4 vertexData[3] = {{-0.6f, -0.4f, 0.0, 1.0}, {0.6f, -0.4f, 0.0, 1.0}, {0.0f, 0.6f, 0.0, 1.0}};\nconst vec4 colorData[3]  = {{1.0, 0.0, 0.0, 1.0}, {0.0, 1.0, 0.0, 1.0}, {0.0, 0.0, 1.0, 1.0}};\n\nvoid main(){\n  SetMeshOutputsEXT(3, 1);\n\n  for (int i = 0; i != 3; ++i) {\n    gl_MeshVerticesEXT[i].gl_Position = mvpMatrix * vertexData[i];\n    v_out[i].color = colorData[i];\n  }\n\n  gl_PrimitiveTriangleIndicesEXT[0] = uvec3(0, 1, 2);\n}\n)\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n#version 460\n\nlayout(location = 0) in vec4 color;\nlayout(location = 0) out vec4 out_FragColor;\n\nvoid main() {\n  out_FragColor = color;\n}\n)\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  std::string taskShader, meshShader, fragmentShader;\n  std::string taskShaderEntryPoint, meshShaderEntryPoint, fragmentShaderEntryPoint;\n\n  switch (device.getBackendType()) {\n  case igl::BackendType::Metal:\n    taskShader = getMetalTaskShaderSource();\n    meshShader = getMetalMeshShaderSource();\n    fragmentShader = getMetalFragmentShaderSource();\n    taskShaderEntryPoint = \"taskMain\";\n    meshShaderEntryPoint = \"meshMain\";\n    fragmentShaderEntryPoint = \"fragmentMain\";\n    break;\n\n  case igl::BackendType::Vulkan:\n    taskShader = getVulkanTaskShaderSource();\n    meshShader = getVulkanMeshShaderSource();\n    fragmentShader = getVulkanFragmentShaderSource();\n    taskShaderEntryPoint = \"main\";\n    meshShaderEntryPoint = \"main\";\n    fragmentShaderEntryPoint = \"main\";\n    break;\n\n  default:\n    break;\n  }\n\n  if (taskShader.empty() || meshShader.empty() || fragmentShader.empty()) {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return nullptr;\n  }\n\n  auto taskModule = igl::ShaderModuleCreator::fromStringInput(\n      device,\n      taskShader.c_str(),\n      {.stage = igl::ShaderStage::Task, .entryPoint = taskShaderEntryPoint},\n      \"task shader\",\n      nullptr);\n  auto meshModule = igl::ShaderModuleCreator::fromStringInput(\n      device,\n      meshShader.c_str(),\n      {.stage = igl::ShaderStage::Mesh, .entryPoint = meshShaderEntryPoint},\n      \"mesh shader\",\n      nullptr);\n  auto fragmentModule = igl::ShaderModuleCreator::fromStringInput(\n      device,\n      fragmentShader.c_str(),\n      {.stage = igl::ShaderStage::Fragment, .entryPoint = fragmentShaderEntryPoint},\n      \"fragment shader\",\n      nullptr);\n\n  Result result;\n  auto shaderStages = igl::ShaderStagesCreator::fromMeshRenderModules(\n      device, taskModule, meshModule, fragmentModule, &result);\n\n  IGL_DEBUG_ASSERT(shaderStages);\n\n  return shaderStages;\n}\n} // namespace\n\nvoid MeshShaderTriangleSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  if (!device.hasFeature(DeviceFeatures::MeshShaders)) {\n    IGL_DEBUG_ABORT(\"Mesh shaders are not supported.\\n\");\n    return;\n  };\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  BufferDesc uboDesc;\n  uboDesc.type = igl::BufferDesc::BufferTypeBits::Uniform;\n  uboDesc.storage = igl::ResourceStorage::Shared;\n  uboDesc.length = sizeof(glm::mat4);\n  ubo_ = device.createBuffer(uboDesc, nullptr);\n  IGL_DEBUG_ASSERT(ubo_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue({}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_.colorAttachments = {{\n      .loadAction = LoadAction::Clear,\n      .storeAction = StoreAction::Store,\n      .clearColor = getPreferredClearColor(),\n  }};\n  renderPass_.depthAttachment = {\n      .loadAction = LoadAction::Clear,\n      .clearDepth = 1.0,\n  };\n}\n\nvoid MeshShaderTriangleSession::update(SurfaceTextures surfaceTextures) noexcept {\n  Result ret;\n  if (!framebuffer_) {\n    const FramebufferDesc framebufferDesc = {\n        .colorAttachments = {{.texture = surfaceTextures.color}},\n        .depthAttachment = {.texture = surfaceTextures.depth},\n        .stencilAttachment =\n            (surfaceTextures.depth && surfaceTextures.depth->getProperties().hasStencil())\n                ? igl::FramebufferDesc::AttachmentDesc{.texture = surfaceTextures.depth}\n                : igl::FramebufferDesc::AttachmentDesc{},\n    };\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(framebufferDesc, &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures);\n  }\n\n  // Graphics pipeline\n  if (!pipelineState_) {\n    const RenderPipelineDesc graphicsDesc = {\n        .shaderStages = shaderStages_,\n        .targetDesc =\n            {\n                .colorAttachments = {{.textureFormat =\n                                          framebuffer_->getColorAttachment(0)->getFormat()}},\n                .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                .stencilAttachmentFormat = framebuffer_->getStencilAttachment()\n                                               ? framebuffer_->getStencilAttachment()->getFormat()\n                                               : igl::TextureFormat::Invalid,\n            },\n        .cullMode = igl::CullMode::Disabled,\n        .frontFaceWinding = igl::WindingMode::Clockwise,\n    };\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(graphicsDesc, &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Command Buffers\n  auto buffer = commandQueue_->createCommandBuffer({}, &ret);\n  IGL_DEBUG_ASSERT(ret.isOk());\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  frameNum_ = (++frameNum_) % 360;\n  const float angle = (float)frameNum_ * M_PI / 180.0f;\n  const glm::mat4 matrix = glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 0.0f, 1.0f));\n  ubo_->upload(&matrix, {sizeof(matrix)});\n\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  commands->bindRenderPipelineState(pipelineState_);\n  commands->bindBuffer(1, BindTarget::kMesh, ubo_.get());\n  commands->drawMeshTasks({1, 1, 1}, {1, 1, 1}, {1, 1, 1});\n  commands->endEncoding();\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(surfaceTextures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/MeshShaderTriangleSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass MeshShaderTriangleSession : public RenderSession {\n public:\n  explicit MeshShaderTriangleSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IBuffer> ubo_;\n  int frameNum_ = 0;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/MultiDrawIndexedIndirectSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/MultiDrawIndexedIndirectSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\n\nstruct DrawElementsIndirectCommand {\n  uint32_t count;\n  uint32_t instanceCount;\n  uint32_t firstIndex;\n  int32_t baseVertex;\n  uint32_t reservedMustBeZero;\n};\n\nstruct VertexPosColor {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float4 color;\n};\n\n// Triangle (red) at left, Square (green) at center, Pentagon (blue) at right.\n// All shapes share one vertex buffer; index buffer selects which vertices to draw.\n\n// clang-format off\nVertexPosColor vertexData[] = {\n    // --- Triangle (3 vertices, red) ---\n    // Vertices 0-2\n    {.position = {-0.9f, 0.0f, 0.0f}, .color = {1.0f, 0.0f, 0.0f, 1.0f}},\n    {.position = {-0.5f, 0.0f, 0.0f}, .color = {1.0f, 0.0f, 0.0f, 1.0f}},\n    {.position = {-0.7f, 0.4f, 0.0f}, .color = {1.0f, 0.0f, 0.0f, 1.0f}},\n\n    // --- Square (4 vertices, green) ---\n    // Vertices 3-6\n    {.position = {-0.2f, -0.2f, 0.0f}, .color = {0.0f, 1.0f, 0.0f, 1.0f}},\n    {.position = {0.2f, -0.2f, 0.0f}, .color = {0.0f, 1.0f, 0.0f, 1.0f}},\n    {.position = {0.2f, 0.2f, 0.0f}, .color = {0.0f, 1.0f, 0.0f, 1.0f}},\n    {.position = {-0.2f, 0.2f, 0.0f}, .color = {0.0f, 1.0f, 0.0f, 1.0f}},\n\n    // --- Pentagon (5 vertices, blue) ---\n    // Vertices 7-11\n    {.position = {0.7f, 0.35f, 0.0f}, .color = {0.0f, 0.0f, 1.0f, 1.0f}},\n    {.position = {0.52f, 0.05f, 0.0f}, .color = {0.0f, 0.0f, 1.0f, 1.0f}},\n    {.position = {0.58f, -0.3f, 0.0f}, .color = {0.0f, 0.0f, 1.0f, 1.0f}},\n    {.position = {0.82f, -0.3f, 0.0f}, .color = {0.0f, 0.0f, 1.0f, 1.0f}},\n    {.position = {0.88f, 0.05f, 0.0f}, .color = {0.0f, 0.0f, 1.0f, 1.0f}},\n};\n\n// Index data: triangle (3 indices), square as 2 triangles (6 indices),\n// pentagon as 3 triangles (9 indices).\nuint16_t indexData[] = {\n    // Triangle (indices 0-2, referencing vertices 0-2)\n    0, 1, 2,\n\n    // Square (indices 3-8, referencing vertices 3-6, two triangles)\n    3, 4, 5,\n    3, 5, 6,\n\n    // Pentagon (indices 9-17, referencing vertices 7-11, three triangles)\n    7, 8, 9,\n    7, 9, 10,\n    7, 10, 11,\n};\n// clang-format on\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float4 color;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.color = vertices[vid].color;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return IN.color;\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  vColor = color_in;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_FragColor = vColor;\n                })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  color = color_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec4 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = color;\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; float4 color : COLOR; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); o.color = v.color; return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float4 color : COLOR; };\n      float4 main(PSIn i) : SV_TARGET { return i.color; }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n} // namespace\n\nvoid MultiDrawIndexedIndirectSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex buffer (all shapes share one buffer)\n  vertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                 .data = vertexData,\n                                                 .length = sizeof(vertexData)},\n                                      nullptr);\n  IGL_DEBUG_ASSERT(vertexBuffer_ != nullptr);\n\n  // Index buffer (indices for all shapes consecutively)\n  indexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                                .data = indexData,\n                                                .length = sizeof(indexData)},\n                                     nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_ != nullptr);\n\n  // Indirect buffer with 3 DrawElementsIndirectCommand entries\n  {\n    DrawElementsIndirectCommand indirectCommands[3];\n\n    // Command 0: Triangle (3 indices starting at firstIndex=0, baseVertex=0)\n    indirectCommands[0].count = 3;\n    indirectCommands[0].instanceCount = 1;\n    indirectCommands[0].firstIndex = 0;\n    indirectCommands[0].baseVertex = 0;\n    indirectCommands[0].reservedMustBeZero = 0;\n\n    // Command 1: Square (6 indices starting at firstIndex=3, baseVertex=0)\n    indirectCommands[1].count = 6;\n    indirectCommands[1].instanceCount = 1;\n    indirectCommands[1].firstIndex = 3;\n    indirectCommands[1].baseVertex = 0;\n    indirectCommands[1].reservedMustBeZero = 0;\n\n    // Command 2: Pentagon (9 indices starting at firstIndex=9, baseVertex=0)\n    indirectCommands[2].count = 9;\n    indirectCommands[2].instanceCount = 1;\n    indirectCommands[2].firstIndex = 9;\n    indirectCommands[2].baseVertex = 0;\n    indirectCommands[2].reservedMustBeZero = 0;\n\n    BufferDesc indirectBufDesc;\n    indirectBufDesc.type =\n        BufferDesc::BufferTypeBits::Storage | BufferDesc::BufferTypeBits::Indirect;\n    indirectBufDesc.data = indirectCommands;\n    indirectBufDesc.length = sizeof(indirectCommands);\n    indirectBuffer_ = device.createBuffer(indirectBufDesc, nullptr);\n    IGL_DEBUG_ASSERT(indirectBuffer_ != nullptr);\n  }\n\n  // Vertex input state\n  vertexInputState_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosColor, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float4,\n                                  .offset = offsetof(VertexPosColor, color),\n                                  .name = \"color_in\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{}, {.stride = sizeof(VertexPosColor)}},\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexInputState_ != nullptr);\n\n  // Shaders\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  // Render pass\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid MultiDrawIndexedIndirectSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n\n  // Create/update framebuffer\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // Graphics pipeline (cached)\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::CounterClockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Command buffer\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Render commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(1, *vertexBuffer_);\n    commands->bindRenderPipelineState(pipelineState_);\n    commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n\n    // Issue all 3 draw calls (triangle, square, pentagon) from the indirect buffer\n    commands->multiDrawIndexedIndirect(*indirectBuffer_, 0, 3, sizeof(DrawElementsIndirectCommand));\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/MultiDrawIndexedIndirectSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass MultiDrawIndexedIndirectSession : public RenderSession {\n public:\n  explicit MultiDrawIndexedIndirectSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IBuffer> vertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n  std::shared_ptr<IBuffer> indirectBuffer_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  RenderPassDesc renderPass_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/ScissorTestSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/ScissorTestSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\nstruct VertexPosColor {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float4 color;\n};\n\n// Full-screen quad covering the entire NDC range [-1, 1].\n// We draw this quad 4 times, each with a different solid color and scissor rect.\n// The scissor rectangles will clip each draw to a different quadrant.\n\n// RED quad (top-left quadrant)\nVertexPosColor redQuadData[] = {\n    {.position = {-1.0f, -1.0f, 0.0f}, .color = {1.0f, 0.0f, 0.0f, 1.0f}},\n    {.position = {1.0f, -1.0f, 0.0f}, .color = {1.0f, 0.0f, 0.0f, 1.0f}},\n    {.position = {1.0f, 1.0f, 0.0f}, .color = {1.0f, 0.0f, 0.0f, 1.0f}},\n    {.position = {-1.0f, 1.0f, 0.0f}, .color = {1.0f, 0.0f, 0.0f, 1.0f}},\n};\n\n// GREEN quad (top-right quadrant)\nVertexPosColor greenQuadData[] = {\n    {.position = {-1.0f, -1.0f, 0.0f}, .color = {0.0f, 1.0f, 0.0f, 1.0f}},\n    {.position = {1.0f, -1.0f, 0.0f}, .color = {0.0f, 1.0f, 0.0f, 1.0f}},\n    {.position = {1.0f, 1.0f, 0.0f}, .color = {0.0f, 1.0f, 0.0f, 1.0f}},\n    {.position = {-1.0f, 1.0f, 0.0f}, .color = {0.0f, 1.0f, 0.0f, 1.0f}},\n};\n\n// BLUE quad (bottom-left quadrant)\nVertexPosColor blueQuadData[] = {\n    {.position = {-1.0f, -1.0f, 0.0f}, .color = {0.0f, 0.0f, 1.0f, 1.0f}},\n    {.position = {1.0f, -1.0f, 0.0f}, .color = {0.0f, 0.0f, 1.0f, 1.0f}},\n    {.position = {1.0f, 1.0f, 0.0f}, .color = {0.0f, 0.0f, 1.0f, 1.0f}},\n    {.position = {-1.0f, 1.0f, 0.0f}, .color = {0.0f, 0.0f, 1.0f, 1.0f}},\n};\n\n// YELLOW quad (bottom-right quadrant)\nVertexPosColor yellowQuadData[] = {\n    {.position = {-1.0f, -1.0f, 0.0f}, .color = {1.0f, 1.0f, 0.0f, 1.0f}},\n    {.position = {1.0f, -1.0f, 0.0f}, .color = {1.0f, 1.0f, 0.0f, 1.0f}},\n    {.position = {1.0f, 1.0f, 0.0f}, .color = {1.0f, 1.0f, 0.0f, 1.0f}},\n    {.position = {-1.0f, 1.0f, 0.0f}, .color = {1.0f, 1.0f, 0.0f, 1.0f}},\n};\n\n// Indices for a quad (two triangles)\nuint16_t quadIndices[] = {\n    0,\n    1,\n    2,\n    0,\n    2,\n    3,\n};\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float4 color;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.color = vertices[vid].color;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return IN.color;\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  vColor = color_in;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_FragColor = vColor;\n                })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  color = color_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec4 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = color;\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; float4 color : COLOR; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); o.color = v.color; return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float4 color : COLOR; };\n      float4 main(PSIn i) : SV_TARGET { return i.color; }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n} // namespace\n\nvoid ScissorTestSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Create 4 vertex buffers, one for each colored quad\n  redVertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                    .data = redQuadData,\n                                                    .length = sizeof(redQuadData)},\n                                         nullptr);\n  greenVertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                      .data = greenQuadData,\n                                                      .length = sizeof(greenQuadData)},\n                                           nullptr);\n  blueVertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                     .data = blueQuadData,\n                                                     .length = sizeof(blueQuadData)},\n                                          nullptr);\n  yellowVertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                       .data = yellowQuadData,\n                                                       .length = sizeof(yellowQuadData)},\n                                            nullptr);\n\n  // Shared index buffer for all quads\n  indexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                                .data = quadIndices,\n                                                .length = sizeof(quadIndices)},\n                                     nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_ != nullptr);\n\n  vertexInputState_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosColor, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float4,\n                                  .offset = offsetof(VertexPosColor, color),\n                                  .name = \"color_in\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{}, {.stride = sizeof(VertexPosColor)}},\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexInputState_ != nullptr);\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid ScissorTestSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // Graphics pipeline\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Disabled,\n            .frontFaceWinding = igl::WindingMode::CounterClockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Command Buffers\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Get framebuffer dimensions\n  const uint32_t width = drawableSurface->getDimensions().width;\n  const uint32_t height = drawableSurface->getDimensions().height;\n  const uint32_t halfWidth = width / 2;\n  const uint32_t halfHeight = height / 2;\n\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindRenderPipelineState(pipelineState_);\n    commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n\n    // Full-screen viewport\n    commands->bindViewport(Viewport{.x = 0.0f,\n                                    .y = 0.0f,\n                                    .width = static_cast<float>(width),\n                                    .height = static_cast<float>(height),\n                                    .minDepth = 0.0f,\n                                    .maxDepth = 1.0f});\n\n    // Draw 4 full-screen quads, each clipped by a different scissor rectangle\n    // to show only in its designated quadrant.\n\n    // 1. RED quad - TOP-LEFT quadrant\n    commands->bindScissorRect(\n        ScissorRect{.x = 0, .y = 0, .width = halfWidth, .height = halfHeight});\n    commands->bindVertexBuffer(1, *redVertexBuffer_);\n    commands->drawIndexed(6);\n\n    // 2. GREEN quad - TOP-RIGHT quadrant\n    commands->bindScissorRect(\n        ScissorRect{.x = halfWidth, .y = 0, .width = halfWidth, .height = halfHeight});\n    commands->bindVertexBuffer(1, *greenVertexBuffer_);\n    commands->drawIndexed(6);\n\n    // 3. BLUE quad - BOTTOM-LEFT quadrant\n    commands->bindScissorRect(\n        ScissorRect{.x = 0, .y = halfHeight, .width = halfWidth, .height = halfHeight});\n    commands->bindVertexBuffer(1, *blueVertexBuffer_);\n    commands->drawIndexed(6);\n\n    // 4. YELLOW quad - BOTTOM-RIGHT quadrant\n    commands->bindScissorRect(\n        ScissorRect{.x = halfWidth, .y = halfHeight, .width = halfWidth, .height = halfHeight});\n    commands->bindVertexBuffer(1, *yellowVertexBuffer_);\n    commands->drawIndexed(6);\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  frameCount_++;\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/ScissorTestSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass ScissorTestSession : public RenderSession {\n public:\n  explicit ScissorTestSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IBuffer> redVertexBuffer_;\n  std::shared_ptr<IBuffer> greenVertexBuffer_;\n  std::shared_ptr<IBuffer> blueVertexBuffer_;\n  std::shared_ptr<IBuffer> yellowVertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<ICommandQueue> commandQueue_;\n  RenderPassDesc renderPass_;\n  size_t frameCount_ = 0;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/StencilOutlineSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/StencilOutlineSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\nstruct VertexPosColor {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float4 color;\n};\n\n// A hexagon shape for a more interesting outline demo\nVertexPosColor vertexData[] = {\n    // Center\n    {.position = {0.0f, 0.0f, 0.0f}, .color = {0.2f, 0.6f, 1.0f, 1.0f}},\n    // Hexagon vertices (6 points)\n    {.position = {0.0f, 0.5f, 0.0f}, .color = {0.4f, 0.8f, 1.0f, 1.0f}},\n    {.position = {0.433f, 0.25f, 0.0f}, .color = {0.3f, 0.7f, 1.0f, 1.0f}},\n    {.position = {0.433f, -0.25f, 0.0f}, .color = {0.2f, 0.6f, 0.9f, 1.0f}},\n    {.position = {0.0f, -0.5f, 0.0f}, .color = {0.1f, 0.5f, 0.8f, 1.0f}},\n    {.position = {-0.433f, -0.25f, 0.0f}, .color = {0.2f, 0.6f, 0.9f, 1.0f}},\n    {.position = {-0.433f, 0.25f, 0.0f}, .color = {0.3f, 0.7f, 1.0f, 1.0f}},\n};\n\n// Triangles forming the hexagon (6 triangles, all sharing center vertex 0)\nuint16_t indexData[] = {\n    0,\n    1,\n    2,\n    0,\n    2,\n    3,\n    0,\n    3,\n    4,\n    0,\n    4,\n    5,\n    0,\n    5,\n    6,\n    0,\n    6,\n    1,\n};\n\n// ---------------------------------------------------------------------------\n// Object shaders: standard position + color passthrough\n// ---------------------------------------------------------------------------\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float4 color;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.color = vertices[vid].color;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return IN.color;\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  vColor = color_in;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_FragColor = vColor;\n                })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  color = color_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec4 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = color;\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; float4 color : COLOR; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); o.color = v.color; return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float4 color : COLOR; };\n      float4 main(PSIn i) : SV_TARGET { return i.color; }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n// ---------------------------------------------------------------------------\n// Outline shaders: scale geometry up by 1.1x and output solid outline color\n// ---------------------------------------------------------------------------\n\nstd::string getOutlineMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n              } VertexOut;\n\n              vertex VertexOut outlineVertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position * 1.1, 1.0);\n                return out;\n              }\n\n              fragment float4 outlineFragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return float4(1.0, 0.5, 0.0, 1.0);\n              }\n    )\";\n}\n\nstd::string getOutlineOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                void main() {\n                  gl_Position = vec4(position * 1.1, 1.0);\n                })\";\n}\n\nstd::string getOutlineOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                void main() {\n                  gl_FragColor = vec4(1.0, 0.5, 0.0, 1.0);\n                })\");\n}\n\nstd::string getOutlineVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n\n                void main() {\n                  gl_Position = vec4(position * 1.1, 1.0);\n                }\n                )\";\n}\n\nstd::string getOutlineVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = vec4(1.0, 0.5, 0.0, 1.0);\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getOutlineShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getOutlineVulkanVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getOutlineVulkanFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(device,\n                                                            getOutlineMetalShaderSource().c_str(),\n                                                            \"outlineVertexShader\",\n                                                            \"outlineFragmentShader\",\n                                                            \"\",\n                                                            nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getOutlineOpenGLVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getOutlineOpenGLFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position * 1.1, 1.0); return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; };\n      float4 main(PSIn i) : SV_TARGET { return float4(1.0, 0.5, 0.0, 1.0); }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n} // namespace\n\nvoid StencilOutlineSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex & Index buffer\n  vertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                 .data = vertexData,\n                                                 .length = sizeof(vertexData)},\n                                      nullptr);\n  IGL_DEBUG_ASSERT(vertexBuffer_ != nullptr);\n  indexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                                .data = indexData,\n                                                .length = sizeof(indexData)},\n                                     nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_ != nullptr);\n\n  vertexInputState_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosColor, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float4,\n                                  .offset = offsetof(VertexPosColor, color),\n                                  .name = \"color_in\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{}, {.stride = sizeof(VertexPosColor)}},\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexInputState_ != nullptr);\n\n  // Create shader stages for both object and outline\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  outlineShaderStages_ = getOutlineShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(outlineShaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  // Depth/stencil state for the first pass: always pass stencil test, write reference value\n  {\n    DepthStencilStateDesc desc;\n    desc.compareFunction = CompareFunction::AlwaysPass;\n    desc.isDepthWriteEnabled = true;\n\n    StencilStateDesc stencilWrite;\n    stencilWrite.stencilCompareFunction = CompareFunction::AlwaysPass;\n    stencilWrite.stencilFailureOperation = StencilOperation::Keep;\n    stencilWrite.depthFailureOperation = StencilOperation::Keep;\n    stencilWrite.depthStencilPassOperation = StencilOperation::Replace;\n    stencilWrite.readMask = 0xFF;\n    stencilWrite.writeMask = 0xFF;\n\n    desc.frontFaceStencil = stencilWrite;\n    desc.backFaceStencil = stencilWrite;\n\n    depthStencilStateWrite_ = device.createDepthStencilState(desc, nullptr);\n    IGL_DEBUG_ASSERT(depthStencilStateWrite_ != nullptr);\n  }\n\n  // Depth/stencil state for the outline pass: draw only where stencil != reference value\n  {\n    DepthStencilStateDesc desc;\n    desc.compareFunction = CompareFunction::AlwaysPass;\n    desc.isDepthWriteEnabled = false;\n\n    StencilStateDesc stencilOutline;\n    stencilOutline.stencilCompareFunction = CompareFunction::NotEqual;\n    stencilOutline.stencilFailureOperation = StencilOperation::Keep;\n    stencilOutline.depthFailureOperation = StencilOperation::Keep;\n    stencilOutline.depthStencilPassOperation = StencilOperation::Keep;\n    stencilOutline.readMask = 0xFF;\n    stencilOutline.writeMask = 0x00;\n\n    desc.frontFaceStencil = stencilOutline;\n    desc.backFaceStencil = stencilOutline;\n\n    depthStencilStateOutline_ = device.createDepthStencilState(desc, nullptr);\n    IGL_DEBUG_ASSERT(depthStencilStateOutline_ != nullptr);\n  }\n\n  // Render pass descriptor with color, depth, and stencil clear\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n      .stencilAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearStencil = 0,\n          },\n  };\n}\n\nvoid StencilOutlineSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n\n  // Create or update framebuffer (with stencil attachment if depth texture has stencil)\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // Create object pipeline state (lazy, cached)\n  if (pipelineState_ == nullptr) {\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n  }\n\n  // Create outline pipeline state (lazy, cached)\n  if (outlinePipelineState_ == nullptr) {\n    outlinePipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = outlineShaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(outlinePipelineState_ != nullptr);\n  }\n\n  // Command Buffers\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(1, *vertexBuffer_);\n    commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n\n    // --- Pass 1: Draw the object and write stencil reference value ---\n    commands->bindDepthStencilState(depthStencilStateWrite_);\n    commands->setStencilReferenceValue(1);\n    commands->bindRenderPipelineState(pipelineState_);\n    commands->drawIndexed(18); // 6 triangles * 3 indices\n\n    // --- Pass 2: Draw the scaled-up outline where stencil != reference ---\n    commands->bindDepthStencilState(depthStencilStateOutline_);\n    commands->setStencilReferenceValue(1);\n    commands->bindRenderPipelineState(outlinePipelineState_);\n    commands->drawIndexed(18); // 6 triangles * 3 indices\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/StencilOutlineSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass StencilOutlineSession : public RenderSession {\n public:\n  explicit StencilOutlineSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IRenderPipelineState> outlinePipelineState_;\n  std::shared_ptr<IDepthStencilState> depthStencilStateWrite_;\n  std::shared_ptr<IDepthStencilState> depthStencilStateOutline_;\n  std::shared_ptr<IBuffer> vertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IShaderStages> outlineShaderStages_;\n  RenderPassDesc renderPass_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TQMultiRenderPassSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/TQMultiRenderPassSession.h>\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\nstruct VertexPosUv {\n  iglu::simdtypes::float3 position; // SIMD 128b aligned\n  iglu::simdtypes::float2 uv; // SIMD 128b aligned\n};\n// clang-format off\nstatic const VertexPosUv vertexData0[] = {\n    {.position = {-1.0f,  1.0f, 0.0f}, .uv = {0.0f, 1.0f}},\n    {.position = { 1.0f,  1.0f, 0.0f}, .uv = {1.0f, 1.0f}},\n    {.position = {-1.0f, -1.0f, 0.0f}, .uv = {0.0f, 0.0f}},\n    {.position = { 1.0f, -1.0f, 0.0f}, .uv = {1.0f, 0.0f}},\n};\nstatic const VertexPosUv vertexData1[] = {\n    {.position = {-0.8f,  0.8f, 0.0f}, .uv = {0.0f, 1.0f}},\n    {.position = { 0.8f,  0.8f, 0.0f}, .uv = {1.0f, 1.0f}},\n    {.position = {-0.8f, -0.8f, 0.0f}, .uv = {0.0f, 0.0f}},\n    {.position = { 0.8f, -0.8f, 0.0f}, .uv = {1.0f, 0.0f}},\n};\nstatic constexpr uint16_t indexData[] = {0, 1, 2, 1, 3, 2};\n// clang-format on\n\nstatic std::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct { float3 color; } UniformBlock;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float2 uv [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float2 uv;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(0)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.uv = vertices[vid].uv;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]],\n                  texture2d<float> diffuseTex [[texture(0)]],\n                  sampler linearSampler [[sampler(0)]],\n                  constant UniformBlock * color [[buffer(0)]]) {\n                float4 tex = diffuseTex.sample(linearSampler, IN.uv);\n                return float4(color->color.r, color->color.g, color->color.b, 1.0) *\n                      tex;\n              }\n    )\";\n}\n\nstatic std::string getOpenGLVertexShaderSource() {\n  return R\"(#version 100\n                attribute vec3 position;\n                attribute vec2 uv_in;\n\n                varying vec2 uv;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  uv = uv_in; // position.xy * 0.5 + 0.5;\n                })\";\n}\n\nstatic std::string getOpenGLFragmentShaderSource() {\n  return R\"(#version 100\n                precision highp float;\n\n                uniform vec3 color;\n                uniform sampler2D inputImage;\n\n                varying vec2 uv;\n\n                void main() {\n                  gl_FragColor =\n                      vec4(color, 1.0) * texture2D(inputImage, uv);\n                })\";\n}\n\nstatic std::string getD3D12VertexShaderSource() {\n  return R\"(\nstruct VertexIn {\n  float3 position : POSITION;\n  float2 uv : TEXCOORD0;\n};\n\nstruct VertexOut {\n  float4 position : SV_Position;\n  float2 uv : TEXCOORD0;\n};\n\nVertexOut main(VertexIn IN) {\n  VertexOut OUT;\n  OUT.position = float4(IN.position, 1.0);\n  OUT.uv = IN.uv;\n  return OUT;\n}\n)\";\n}\n\nstatic std::string getD3D12FragmentShaderSource() {\n  return R\"(\ncbuffer UniformBlock : register(b0) {\n  float3 color;\n};\n\nTexture2D inputImage : register(t0);\nSamplerState linearSampler : register(s0);\n\nstruct VertexOut {\n  float4 position : SV_Position;\n  float2 uv : TEXCOORD0;\n};\n\nfloat4 main(VertexOut IN) : SV_Target {\n  float4 tex = inputImage.Sample(linearSampler, IN.uv);\n  return float4(color.r, color.g, color.b, 1.0) * tex;\n}\n)\";\n}\n\nstatic std::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    IGL_DEBUG_ABORT(\"IGLSamples not set up for Vulkan\");\n    return nullptr;\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ABORT(\"IGLSamples not set up for Custom\");\n    return nullptr;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getD3D12VertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getD3D12FragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\nstatic void render(std::shared_ptr<ICommandBuffer>& buffer,\n                   std::shared_ptr<IBuffer>& vertexBuffer,\n                   std::shared_ptr<ITexture>& inputTexture,\n                   std::shared_ptr<IRenderPipelineState>& pipelineState,\n                   std::shared_ptr<IFramebuffer>& framebuffer,\n                   RenderPassDesc& renderPass,\n                   std::shared_ptr<ISamplerState>& samplerState,\n                   std::shared_ptr<IBuffer>& ib,\n                   size_t textureUnit,\n                   BackendType& backend,\n                   std::shared_ptr<IBuffer>& fragmentParamBuffer,\n                   std::vector<UniformDesc>& fragmentUniformDescriptors,\n                   FragmentFormat fragmentParameters) {\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass, framebuffer);\n\n  commands->bindRenderPipelineState(pipelineState);\n\n  if (backend != igl::BackendType::OpenGL) {\n    if (fragmentParamBuffer) {\n      commands->bindBuffer(0, fragmentParamBuffer.get());\n    }\n  } else {\n    // Bind non block uniforms\n    for (const auto& uniformDesc : fragmentUniformDescriptors) {\n      commands->bindUniform(uniformDesc, &fragmentParameters);\n    }\n  }\n  commands->bindTexture(textureUnit, BindTarget::kFragment, inputTexture.get());\n  commands->bindSamplerState(textureUnit, BindTarget::kFragment, samplerState.get());\n  commands->bindVertexBuffer(0, *vertexBuffer);\n  commands->bindIndexBuffer(*ib, IndexFormat::UInt16);\n  commands->drawIndexed(6);\n  commands->endEncoding();\n}\n\nvoid TQMultiRenderPassSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex buffer, Index buffer and Vertex Input\n  vb0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                        .data = vertexData0,\n                                        .length = sizeof(vertexData0)},\n                             nullptr);\n  vb1_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                        .data = vertexData1,\n                                        .length = sizeof(vertexData1)},\n                             nullptr);\n  ib0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                        .data = indexData,\n                                        .length = sizeof(indexData)},\n                             nullptr);\n\n  const VertexInputStateDesc inputDesc = {\n      .numAttributes = 2,\n      .attributes =\n          {\n              {\n                  .bufferIndex = 0,\n                  .format = VertexAttributeFormat::Float3,\n                  .offset = offsetof(VertexPosUv, position),\n                  .name = \"position\",\n                  .location = 0,\n              },\n              {\n                  .bufferIndex = 0,\n                  .format = VertexAttributeFormat::Float2,\n                  .offset = offsetof(VertexPosUv, uv),\n                  .name = \"uv_in\",\n                  .location = 1,\n              },\n          },\n      .numInputBindings = 1,\n      .inputBindings =\n          {\n              {\n                  .stride = sizeof(VertexPosUv),\n              },\n          },\n  };\n  vertexInputState_ = device.createVertexInputState(inputDesc, nullptr);\n\n  // Sampler & Texture\n  samplerState_ = device.createSamplerState(\n      SamplerStateDesc{\n          .minFilter = SamplerMinMagFilter::Linear,\n          .magFilter = SamplerMinMagFilter::Linear,\n          .debugName = \"Sampler: linear\",\n      },\n      nullptr);\n  tex0_ = getPlatform().loadTexture(\"igl.png\");\n\n  shaderStages_ = getShaderStagesForBackend(device);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n\n  renderPass0_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment = {.loadAction = LoadAction::Clear, .clearDepth = 1.0},\n  };\n\n  renderPass1_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment = {.loadAction = LoadAction::Clear, .clearDepth = 1.0},\n  };\n\n  // init uniforms\n  fragmentParameters_ = FragmentFormat{{1.0f, 1.0f, 1.0f}};\n\n  fragmentParamBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Uniform,\n                                                        .data = &fragmentParameters_,\n                                                        .length = sizeof(fragmentParameters_),\n                                                        .storage = ResourceStorage::Shared},\n                                             nullptr);\n}\n\nvoid TQMultiRenderPassSession::update(SurfaceTextures surfaceTextures) noexcept {\n  Result ret;\n  if (framebuffer0_ == nullptr) {\n    const auto dimensions = surfaceTextures.color->getDimensions();\n    const igl::TextureDesc desc1 =\n        igl::TextureDesc::new2D(igl::TextureFormat::RGBA_UNorm8,\n                                dimensions.width,\n                                dimensions.height,\n                                igl::TextureDesc::TextureUsageBits::Sampled |\n                                    igl::TextureDesc::TextureUsageBits::Attachment);\n    tex1_ = getPlatform().getDevice().createTexture(desc1, nullptr);\n\n    framebuffer0_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = tex1_}},\n            .depthAttachment =\n                {\n                    .texture = getPlatform().getDevice().createTexture(\n                        TextureDesc{\n                            .width = dimensions.width,\n                            .height = dimensions.height,\n                            .usage = igl::TextureDesc::TextureUsageBits::Attachment,\n                            .type = TextureType::TwoD,\n                            .format = igl::TextureFormat::Z_UNorm24,\n                            .storage = igl::ResourceStorage::Private,\n                        },\n                        &ret),\n                },\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer0_ != nullptr);\n  }\n\n  if (framebuffer1_ == nullptr) {\n    framebuffer1_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = surfaceTextures.color}},\n            .depthAttachment = {.texture = surfaceTextures.depth},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer1_ != nullptr);\n  } else {\n    framebuffer1_->updateDrawable(surfaceTextures);\n  }\n  const size_t textureUnit = 0;\n\n  // Graphics pipeline\n  if (pipelineState0_ == nullptr) {\n    pipelineState0_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments =\n                        {\n                            {\n                                .textureFormat = tex1_->getProperties().format,\n                            },\n                        },\n                    .depthAttachmentFormat =\n                        framebuffer0_->getDepthAttachment()->getProperties().format,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n            .fragmentUnitSamplerMap = {{textureUnit, IGL_NAMEHANDLE(\"inputImage\")}},\n        },\n        nullptr);\n\n    pipelineState1_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments =\n                        {\n                            {\n                                .textureFormat =\n                                    framebuffer1_->getColorAttachment(0)->getProperties().format,\n                            },\n                        },\n                    .depthAttachmentFormat =\n                        framebuffer1_->getDepthAttachment()->getProperties().format,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n            .fragmentUnitSamplerMap = {{textureUnit, IGL_NAMEHANDLE(\"inputImage\")}},\n        },\n        nullptr);\n\n    // Set up uniform descriptors\n    fragmentUniformDescriptors_.emplace_back();\n  }\n\n  // Command buffer\n  auto buffer = commandQueue_->createCommandBuffer({}, nullptr);\n\n  // Draw render pass 0\n  auto drawableSurface = framebuffer1_->getColorAttachment(0);\n  framebuffer1_->updateDrawable(drawableSurface);\n\n  if (!fragmentUniformDescriptors_.empty()) {\n    fragmentUniformDescriptors_.back().location =\n        pipelineState0_->getIndexByName(\"color\", igl::ShaderStage::Fragment);\n    fragmentUniformDescriptors_.back().type = UniformType::Float3;\n    fragmentUniformDescriptors_.back().offset = offsetof(FragmentFormat, color);\n  }\n\n  BackendType backendType = getPlatform().getDevice().getBackendType();\n\n  // Draw render pass 0\n  render(buffer,\n         vb0_,\n         tex0_,\n         pipelineState0_,\n         framebuffer0_,\n         renderPass0_,\n         samplerState_,\n         ib0_,\n         textureUnit,\n         backendType,\n         fragmentParamBuffer_,\n         fragmentUniformDescriptors_,\n         fragmentParameters_);\n\n  // Draw render pass 1\n  render(buffer,\n         vb1_,\n         tex1_,\n         pipelineState1_,\n         framebuffer1_,\n         renderPass1_,\n         samplerState_,\n         ib0_,\n         textureUnit,\n         backendType,\n         fragmentParamBuffer_,\n         fragmentUniformDescriptors_,\n         fragmentParameters_);\n\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  commandQueue_->submit(*buffer);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TQMultiRenderPassSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <shell/renderSessions/TQSession.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n\nnamespace igl::shell {\n\nclass TQMultiRenderPassSession : public RenderSession {\n public:\n  explicit TQMultiRenderPassSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IDevice> device_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<ISamplerState> samplerState_;\n\n  FragmentFormat fragmentParameters_{};\n  std::vector<UniformDesc> fragmentUniformDescriptors_;\n\n  std::shared_ptr<IBuffer> fragmentParamBuffer_;\n  std::shared_ptr<IBuffer> vb0_;\n  std::shared_ptr<IBuffer> vb1_;\n  std::shared_ptr<IBuffer> ib0_;\n\n  std::shared_ptr<ITexture> depthTexture_;\n  std::shared_ptr<ITexture> tex0_;\n  std::shared_ptr<ITexture> tex1_;\n\n  std::shared_ptr<IRenderPipelineState> pipelineState0_;\n  std::shared_ptr<IRenderPipelineState> pipelineState1_;\n  RenderPassDesc renderPass0_;\n  RenderPassDesc renderPass1_;\n  std::shared_ptr<IFramebuffer> framebuffer0_;\n  std::shared_ptr<IFramebuffer> framebuffer1_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TQSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/TQSession.h>\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n\nnamespace igl::shell {\nnamespace {\nstruct VertexPosUv {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float2 uv;\n};\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct { float3 color; } UniformBlock;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float2 uv [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float2 uv;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.uv = vertices[vid].uv;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]],\n                  texture2d<float> diffuseTex [[texture(0)]],\n                  sampler linearSampler [[sampler(0)]],\n                  constant UniformBlock * color [[buffer(0)]]) {\n                float4 tex = diffuseTex.sample(linearSampler, IN.uv);\n                return float4(color->color.r, color->color.g, color->color.b, 1.0) *\n                      tex;\n              }\n              )\";\n}\n\nstd::string getD3D12VertexShaderSource() {\n  return R\"(\n                struct UniformsPerObject {\n                  float3 color;\n                };\n\n                cbuffer PerObject : register(b0) {\n                  UniformsPerObject perObject;\n                };\n\n                struct VSInput {\n                  float3 position : POSITION;\n                  float2 uv_in : TEXCOORD0;\n                };\n\n                struct VSOutput {\n                  float4 position : SV_POSITION;\n                  float2 uv : TEXCOORD0;\n                  float3 color : COLOR0;\n                };\n\n                VSOutput main(VSInput input) {\n                  VSOutput output;\n                  output.position = float4(input.position, 1.0);\n                  output.uv = input.uv_in;\n                  output.color = perObject.color;\n                  return output;\n                }\n                )\";\n}\n\nstd::string getD3D12FragmentShaderSource() {\n  return R\"(\n                Texture2D in_texture : register(t0);\n                SamplerState in_sampler : register(s0);\n\n                struct PSInput {\n                  float4 position : SV_POSITION;\n                  float2 uv : TEXCOORD0;\n                  float3 color : COLOR0;\n                };\n\n                float4 main(PSInput input) : SV_Target {\n                  return float4(input.color, 1.0) * in_texture.Sample(in_sampler, input.uv);\n                }\n                )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec2 uv_in;\n\n                varying vec2 uv;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  uv = uv_in; // position.xy * 0.5 + 0.5;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n                uniform vec3 color;\n                uniform sampler2D inputImage;\n\n                varying vec2 uv;\n\n                void main() {\n                  gl_FragColor =\n                      vec4(color, 1.0) * texture2D(inputImage, uv);\n                })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec2 uv_in;\n                layout(location = 0) out vec2 uv;\n                layout(location = 1) out vec3 color;\n\n                struct UniformsPerObject {\n                  vec3 color;\n                };\n\n                layout (set = 1, binding = 0, std140) uniform PerObject {\n                  UniformsPerObject perObject;\n                } object;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  uv = uv_in;\n                  color = object.perObject.color;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec2 uv;\n                layout(location = 1) in vec3 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                layout(set = 0, binding = 0) uniform sampler2D in_texture;\n\n                void main() {\n                  out_FragColor = vec4(color, 1.0) * texture(in_texture, uv);\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  // @fb-only\n    // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n        // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getD3D12VertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getD3D12FragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n// @fb-only\n// @fb-only\n  // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n// @fb-only\n// @fb-only\n\nBufferDesc getVertexBufferDesc(const igl::IDevice& device, const VertexPosUv* vertexData) {\n// @fb-only\n  // @fb-only\n    // @fb-only\n                                    // @fb-only\n                                    // @fb-only\n                                    // @fb-only\n    // @fb-only\n                      // @fb-only\n                      // @fb-only\n                      // @fb-only\n  // @fb-only\n// @fb-only\n  return {.type = BufferDesc::BufferTypeBits::Vertex,\n          .data = vertexData,\n          .length = sizeof(VertexPosUv) * 4};\n}\n\nuint32_t getVertexBufferIndex(const igl::IDevice& device) {\n// @fb-only\n  // @fb-only\n    return 0;\n  // @fb-only\n// @fb-only\n  return 1;\n}\n\nResourceStorage getIndexBufferResourceStorage(const igl::IDevice& device) {\n// @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n  return igl::BufferDesc{}.storage;\n}\n} // namespace\n\nvoid TQSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex & Index buffer\n  const VertexPosUv vertexData[] = {\n      {.position = {-0.8f, 0.8f, 0.0}, .uv = {0.0, 0.0}},\n      {.position = {0.8f, 0.8f, 0.0}, .uv = {uvScale_, 0.0}},\n      {.position = {-0.8f, -0.8f, 0.0}, .uv = {0.0, uvScale_}},\n      {.position = {0.8f, -0.8f, 0.0}, .uv = {uvScale_, uvScale_}},\n  };\n  const BufferDesc vbDesc = getVertexBufferDesc(device, &vertexData[0]);\n  vb0_ = device.createBuffer(vbDesc, nullptr);\n  IGL_DEBUG_ASSERT(vb0_ != nullptr);\n  const uint16_t indexData[] = {0, 1, 2, 1, 3, 2};\n  const BufferDesc ibDesc{.type = BufferDesc::BufferTypeBits::Index,\n                          .data = indexData,\n                          .length = sizeof(indexData),\n                          .storage = getIndexBufferResourceStorage(device)};\n  ib0_ = device.createBuffer(ibDesc, nullptr);\n  IGL_DEBUG_ASSERT(ib0_ != nullptr);\n\n  const auto vertexBufferIndex = getVertexBufferIndex(getPlatform().getDevice());\n  VertexInputStateDesc inputDesc = {\n      .numAttributes = 2,\n      .attributes =\n          {\n              {\n                  .bufferIndex = vertexBufferIndex,\n                  .format = VertexAttributeFormat::Float3,\n                  .offset = offsetof(VertexPosUv, position),\n                  .name = \"position\",\n                  .location = 0,\n              },\n              {\n                  .bufferIndex = vertexBufferIndex,\n                  .format = VertexAttributeFormat::Float2,\n                  .offset = offsetof(VertexPosUv, uv),\n                  .name = \"uv_in\",\n                  .location = 1,\n              },\n          },\n      .numInputBindings = 1,\n  };\n  inputDesc.inputBindings[vertexBufferIndex].stride = sizeof(VertexPosUv);\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n  IGL_DEBUG_ASSERT(vertexInput0_ != nullptr);\n\n  // Sampler & Texture\n  samp0_ = device.createSamplerState(\n      SamplerStateDesc{\n          .minFilter = SamplerMinMagFilter::Linear,\n          .magFilter = SamplerMinMagFilter::Linear,\n          .debugName = \"Sampler: linear\",\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(samp0_ != nullptr);\n  tex0_ = getPlatform().loadTexture(\"igl.png\");\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  // Generate mipmaps for texture for D3D12\n  if (device.getBackendType() == igl::BackendType::D3D12) {\n    tex0_->generateMipmap(*commandQueue_);\n  }\n\n  renderPass_ = {\n      .colorAttachments = {{\n          .loadAction = LoadAction::Clear,\n          .storeAction = StoreAction::Store,\n          .clearColor = getPreferredClearColor(),\n      }},\n      .depthAttachment = {.loadAction = LoadAction::Clear, .clearDepth = 1.0},\n  };\n\n  // init uniforms\n  fragmentParameters_ = FragmentFormat{{1.0f, 1.0f, 1.0f}};\n\n  const BufferDesc fpDesc{\n      .type = BufferDesc::BufferTypeBits::Uniform,\n      .data = &fragmentParameters_,\n      .length = sizeof(fragmentParameters_),\n      .storage = ResourceStorage::Shared,\n  };\n\n  fragmentParamBuffer_ = device.createBuffer(fpDesc, nullptr);\n  IGL_DEBUG_ASSERT(fragmentParamBuffer_ != nullptr);\n}\n\nvoid TQSession::update(SurfaceTextures surfaceTextures) noexcept {\n  Result ret;\n  if (framebuffer_ == nullptr) {\n    FramebufferDesc framebufferDesc{\n        .colorAttachments = {{.texture = surfaceTextures.color}},\n        .depthAttachment = {.texture = surfaceTextures.depth},\n    };\n    if (surfaceTextures.depth && surfaceTextures.depth->getProperties().hasStencil()) {\n      framebufferDesc.stencilAttachment.texture = surfaceTextures.depth;\n    }\n    IGL_DEBUG_ASSERT(ret.isOk());\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(framebufferDesc, &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures);\n  }\n\n  const size_t textureUnit = 0;\n\n  // Graphics pipeline\n  if (pipelineState_ == nullptr) {\n    const RenderPipelineDesc graphicsDesc = {\n        .vertexInputState = vertexInput0_,\n        .shaderStages = shaderStages_,\n        .targetDesc =\n            {\n                .colorAttachments = {{.textureFormat =\n                                          framebuffer_->getColorAttachment(0)->getFormat()}},\n                .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                .stencilAttachmentFormat = framebuffer_->getStencilAttachment()\n                                               ? framebuffer_->getStencilAttachment()->getFormat()\n                                               : igl::TextureFormat::Invalid,\n            },\n        .cullMode = igl::CullMode::Back,\n        .frontFaceWinding = igl::WindingMode::Clockwise,\n        .fragmentUnitSamplerMap =\n            {\n                std::pair<size_t, NameHandle>(textureUnit, IGL_NAMEHANDLE(\"inputImage\")),\n            },\n    };\n\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(graphicsDesc, nullptr);\n    IGL_DEBUG_ASSERT(pipelineState_ != nullptr);\n\n    // Set up uniformdescriptors\n    fragmentUniformDescriptors_.emplace_back();\n  }\n\n  // Command Buffers\n  const auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  const auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Uniform: \"color\"\n  if (!fragmentUniformDescriptors_.empty()) {\n    // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n    // @fb-only\n      if (getPlatform().getDevice().hasFeature(DeviceFeatures::BindUniform)) {\n        fragmentUniformDescriptors_.back().location =\n            pipelineState_->getIndexByName(\"color\", igl::ShaderStage::Fragment);\n      }\n    fragmentUniformDescriptors_.back().type = UniformType::Float3;\n    fragmentUniformDescriptors_.back().offset = offsetof(FragmentFormat, color);\n  }\n\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(getVertexBufferIndex(getPlatform().getDevice()), *vb0_);\n    commands->bindRenderPipelineState(pipelineState_);\n    if (getPlatform().getDevice().hasFeature(DeviceFeatures::BindUniform)) {\n      // Bind non block uniforms\n      for (const auto& uniformDesc : fragmentUniformDescriptors_) {\n        commands->bindUniform(uniformDesc, &fragmentParameters_);\n      }\n    } else if (getPlatform().getDevice().hasFeature(DeviceFeatures::UniformBlocks)) {\n      // @fb-only\n        // @fb-only\n                            // @fb-only\n                            // @fb-only\n                            // @fb-only\n      // @fb-only\n        commands->bindBuffer(0, fragmentParamBuffer_.get());\n      // @fb-only\n    } else {\n      IGL_DEBUG_ASSERT_NOT_REACHED();\n    }\n\n    commands->bindTexture(textureUnit, BindTarget::kFragment, tex0_.get());\n    commands->bindSamplerState(textureUnit, BindTarget::kFragment, samp0_.get());\n    commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n    commands->drawIndexed(6);\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer, true);\n  RenderSession::update(surfaceTextures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TQSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nstruct FragmentFormat {\n  iglu::simdtypes::float3 color;\n};\n\nclass TQSession : public RenderSession {\n public:\n  explicit TQSession(std::shared_ptr<Platform> platform) : RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n  void setUVScale(float uvScale) noexcept {\n    uvScale_ = uvScale;\n  }\n\n private:\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<ISamplerState> samp0_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb0_;\n  std::shared_ptr<IBuffer> ib0_;\n  std::shared_ptr<IBuffer> fragmentParamBuffer_;\n  std::shared_ptr<ITexture> depthTexture_;\n  std::shared_ptr<ITexture> tex0_;\n  RenderPassDesc renderPass_;\n  FragmentFormat fragmentParameters_{};\n  std::vector<UniformDesc> fragmentUniformDescriptors_;\n  std::vector<UniformDesc> vertexUniformDescriptors_;\n\n  float uvScale_ = 1.0f;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TextureViewSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include <shell/renderSessions/TextureViewSession.h>\n\n#include <cstddef>\n#include <shell/shared/platform/DisplayContext.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/Device.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/ShaderCreator.h>\n#include <igl/VertexInputState.h>\n\nnamespace {\n\nstruct VertexPosUvw {\n  glm::vec3 position;\n  glm::vec2 uv;\n};\n\nconstexpr float kHalf = 1.2f;\n\n// UV-mapped cube with indices: 24 vertices, 36 indices\nconstexpr VertexPosUvw kVertexData[] = {\n    // top\n    {.position = {-kHalf, -kHalf, +kHalf}, .uv = {0, 0}}, // 0\n    {.position = {+kHalf, -kHalf, +kHalf}, .uv = {1, 0}}, // 1\n    {.position = {+kHalf, +kHalf, +kHalf}, .uv = {1, 1}}, // 2\n    {.position = {-kHalf, +kHalf, +kHalf}, .uv = {0, 1}}, // 3\n    // bottom\n    {.position = {-kHalf, -kHalf, -kHalf}, .uv = {0, 0}}, // 4\n    {.position = {-kHalf, +kHalf, -kHalf}, .uv = {0, 1}}, // 5\n    {.position = {+kHalf, +kHalf, -kHalf}, .uv = {1, 1}}, // 6\n    {.position = {+kHalf, -kHalf, -kHalf}, .uv = {1, 0}}, // 7\n    // left\n    {.position = {+kHalf, +kHalf, -kHalf}, .uv = {1, 0}}, // 8\n    {.position = {-kHalf, +kHalf, -kHalf}, .uv = {0, 0}}, // 9\n    {.position = {-kHalf, +kHalf, +kHalf}, .uv = {0, 1}}, // 10\n    {.position = {+kHalf, +kHalf, +kHalf}, .uv = {1, 1}}, // 11\n    // right\n    {.position = {-kHalf, -kHalf, -kHalf}, .uv = {0, 0}}, // 12\n    {.position = {+kHalf, -kHalf, -kHalf}, .uv = {1, 0}}, // 13\n    {.position = {+kHalf, -kHalf, +kHalf}, .uv = {1, 1}}, // 14\n    {.position = {-kHalf, -kHalf, +kHalf}, .uv = {0, 1}}, // 15\n    // front\n    {.position = {+kHalf, -kHalf, -kHalf}, .uv = {0, 0}}, // 16\n    {.position = {+kHalf, +kHalf, -kHalf}, .uv = {1, 0}}, // 17\n    {.position = {+kHalf, +kHalf, +kHalf}, .uv = {1, 1}}, // 18\n    {.position = {+kHalf, -kHalf, +kHalf}, .uv = {0, 1}}, // 19\n    // back\n    {.position = {-kHalf, +kHalf, -kHalf}, .uv = {1, 0}}, // 20\n    {.position = {-kHalf, -kHalf, -kHalf}, .uv = {0, 0}}, // 21\n    {.position = {-kHalf, -kHalf, +kHalf}, .uv = {0, 1}}, // 22\n    {.position = {-kHalf, +kHalf, +kHalf}, .uv = {1, 1}}, // 23\n};\n\nconstexpr uint16_t kIndexData[] = {0,  1,  2,  2,  3,  0,  4,  5,  6,  6,  7,  4,\n                                   8,  9,  10, 10, 11, 8,  12, 13, 14, 14, 15, 12,\n                                   16, 17, 18, 18, 19, 16, 20, 21, 22, 22, 23, 20};\n\nstd::string getMetalShaderSource() {\n  return R\"(\n    #include <metal_stdlib>\n    #include <simd/simd.h>\n    using namespace metal;\n\n    struct VertexIn {\n      float3 position [[attribute(0)]];\n      float2 uv [[attribute(1)]];\n    };\n\n    struct VertexOut {\n      float4 position [[position]];\n      float2 uv;\n    };\n\n    vertex VertexOut vertexShader(VertexIn in [[stage_in]],\n        constant float4x4 mvpMatrix [[function_constant(0)]]) {\n      VertexOut out;\n      out.position = mvpMatrix * float4(in.position, 1.0);\n      out.uv = in.uv;\n      return out;\n    }\n\n    fragment float4 fragmentShader(\n        VertexOut in[[stage_in]],\n        texture2d<float> input2D [[texture(0)]],\n        sampler linearSampler [[sampler(0)]]) {\n      return input2D.sample(linearSampler, in.uv);\n    }\n  )\";\n}\n\nconst char* getVulkanFragmentShaderSource() {\n  return R\"(\n    precision highp float;\n    layout(location = 0) in vec2 uv;\n    layout(location = 0) out vec4 out_FragColor;\n\n    layout(set = 0, binding = 0) uniform sampler2D input2D;\n\n    void main() {\n      out_FragColor = texture(input2D, uv);\n    }\n  )\";\n}\n\nconst char* getVulkanVertexShaderSource() {\n  return R\"(\n    precision highp float;\n\n    layout (push_constant) uniform PerFrame {\n      mat4 mvpMatrix;\n    } perFrame;\n\n    layout(location = 0) in vec3 position;\n    layout(location = 1) in vec2 uvw_in;\n    layout(location = 0) out vec2 uvw;\n\n    void main() {\n      gl_Position =  perFrame.mvpMatrix * vec4(position, 1.0);\n      uvw = uvw_in;\n    }\n  )\";\n}\n\nstd::unique_ptr<igl::IShaderStages> getShaderStagesForBackend(igl::IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      cbuffer PushConstants : register(b2) { float4x4 mvpMatrix; };\n      struct VSIn { float3 position : POSITION; float2 uv : TEXCOORD0; };\n      struct VSOut { float4 position : SV_POSITION; float2 uv : TEXCOORD0; };\n      VSOut main(VSIn v) {\n        VSOut o;\n        o.position = mul(mvpMatrix, float4(v.position, 1.0));\n        o.uv = v.uv;\n        return o;\n      }\n    )\";\n    static const char* kPS = R\"(\n      Texture2D<float4> input2D : register(t0);\n      SamplerState linearSampler : register(s0);\n      struct PSIn { float4 position : SV_POSITION; float2 uv : TEXCOORD0; };\n      float4 main(PSIn i) : SV_TARGET { return input2D.Sample(linearSampler, i.uv); }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ABORT(\"IGLSamples not set up for Custom\");\n    return nullptr;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    IGL_DEBUG_ABORT(\"OpenGL not supported\");\n    return nullptr;\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n} // namespace\n\nnamespace igl::shell {\n\nTextureViewSession::TextureViewSession(std::shared_ptr<Platform> platform) :\n  RenderSession(std::move(platform)) {\n  imguiSession_ = std::make_unique<iglu::imgui::Session>(getPlatform().getDevice(),\n                                                         getPlatform().getInputDispatcher());\n}\n\nvoid TextureViewSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  if (!device.hasFeature(DeviceFeatures::TextureViews)) {\n    IGL_SOFT_ERROR(\"Texture views are not supported\");\n    std::terminate();\n  }\n\n  vb_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                       .data = kVertexData,\n                                       .length = sizeof(kVertexData)},\n                            nullptr);\n  ib_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                       .data = kIndexData,\n                                       .length = sizeof(kIndexData)},\n                            nullptr);\n\n  const VertexInputStateDesc inputDesc = {\n      .numAttributes = 2,\n      .attributes =\n          {\n              {\n                  .bufferIndex = 0,\n                  .format = VertexAttributeFormat::Float3,\n                  .offset = offsetof(VertexPosUvw, position),\n                  .name = \"position\",\n                  .location = 0,\n              },\n              {\n                  .bufferIndex = 0,\n                  .format = VertexAttributeFormat::Float2,\n                  .offset = offsetof(VertexPosUvw, uv),\n                  .name = \"uv_in\",\n                  .location = 1,\n              },\n          },\n      .numInputBindings = 1,\n      .inputBindings = {{.stride = sizeof(VertexPosUvw)}},\n  };\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n\n  shaderStages_ = getShaderStagesForBackend(device);\n\n  commandQueue_ = device.createCommandQueue({}, nullptr);\n\n  sampler_ = device.createSamplerState(SamplerStateDesc::newLinearMipmapped(), nullptr);\n\n  const uint32_t texWidth = 256;\n  const uint32_t texHeight = 256;\n  TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::BGRA_UNorm8,\n                                        texWidth,\n                                        texHeight,\n                                        TextureDesc::TextureUsageBits::Attachment |\n                                            TextureDesc::TextureUsageBits::Sampled,\n                                        \"Colored mipmaps\");\n  desc.numMipLevels = igl::TextureDesc::calcNumMipLevels(texWidth, texHeight);\n  texture_ = device.createTexture(desc, nullptr);\n\n  textureViews_.reserve(desc.numMipLevels);\n  for (uint32_t mip = 0; mip != desc.numMipLevels; mip++) {\n    textureViews_.push_back(device.createTextureView(texture_, {.mipLevel = mip}, nullptr));\n  }\n\n  // render into the texture to generate custom colored mipmap pyramid\n  auto fb = device.createFramebuffer(\n      FramebufferDesc{\n          .colorAttachments = {{.texture = texture_}},\n      },\n      nullptr);\n  auto buffer = commandQueue_->createCommandBuffer({}, nullptr);\n  const std::array<Color, 10> kColors = {\n      Color{1, 0, 0},\n      Color{0, 1, 0},\n      Color{0, 0, 1},\n\n      Color{1, 1, 0},\n      Color{0, 1, 1},\n      Color{1, 0, 1},\n\n      Color{1, 0, 0},\n      Color{0, 1, 0},\n      Color{0, 0, 1},\n\n      Color{0, 0, 0},\n  };\n  for (uint32_t i = 0; i != desc.numMipLevels; i++) {\n    const igl::RenderPassDesc pass = {\n        .colorAttachments = {{\n            .loadAction = LoadAction::Clear,\n            .storeAction = StoreAction::Store,\n            .mipLevel = static_cast<uint8_t>(i),\n            .clearColor = kColors[i % kColors.size()],\n        }},\n    };\n    auto commands = buffer->createRenderCommandEncoder(pass, fb);\n    commands->endEncoding();\n  }\n  commandQueue_->submit(*buffer);\n}\n\nvoid TextureViewSession::update(SurfaceTextures surfaceTextures) noexcept {\n  auto& device = getPlatform().getDevice();\n\n  const float deltaSeconds = getDeltaSeconds();\n\n  fps_.updateFPS(deltaSeconds);\n\n  // cube animation\n  const glm::mat4 projectionMat = glm::perspectiveLH(\n      glm::radians(45.0f), surfaceTextures.color->getAspectRatio(), 0.1f, 100.0f);\n  angle_ += 90.0f * deltaSeconds;\n  while (angle_ > 360.0f) {\n    angle_ -= 360.0f;\n  }\n  const glm::mat4 mvpMatrix =\n      projectionMat * glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.f, 8.0f)) *\n      glm::rotate(\n          glm::mat4(1.0f), glm::radians(angle_), glm::normalize(glm::vec3(1.0f, 1.0f, 1.0f)));\n\n  if (!framebuffer_) {\n    framebufferDesc_.colorAttachments[0].texture = surfaceTextures.color;\n    framebufferDesc_.depthAttachment.texture = surfaceTextures.depth;\n    Result ret;\n    framebuffer_ = device.createFramebuffer(framebufferDesc_, &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures.color);\n  }\n\n  if (!pipelineState_) {\n    Result ret;\n    pipelineState_ = device.createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInput0_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments =\n                        {\n                            {.textureFormat =\n                                 framebuffer_->getColorAttachment(0)->getProperties().format},\n                        },\n                    .depthAttachmentFormat =\n                        framebuffer_->getDepthAttachment()->getProperties().format,\n                },\n            .cullMode = igl::CullMode::Back,\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n  }\n\n  auto buffer = commandQueue_->createCommandBuffer({}, nullptr);\n\n  const igl::RenderPassDesc renderPass{\n      .colorAttachments = {{\n          .loadAction = LoadAction::Clear,\n          .storeAction = StoreAction::Store,\n          .clearColor = getPreferredClearColor(),\n      }},\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .storeAction = StoreAction::DontCare,\n              .clearDepth = 1.0,\n          },\n  };\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass, framebuffer_);\n\n  commands->bindTexture(0, texture_.get());\n  commands->bindSamplerState(0, BindTarget::kFragment, sampler_.get());\n  commands->bindRenderPipelineState(pipelineState_);\n  if (device.getBackendType() == BackendType::Vulkan) {\n    commands->bindPushConstants(&mvpMatrix, sizeof(mvpMatrix));\n  } else if (device.getBackendType() == BackendType::Metal) {\n    commands->bindBytes(0, BindTarget::kVertex, &mvpMatrix, sizeof(mvpMatrix));\n  } else if (device.getBackendType() == BackendType::D3D12) {\n    commands->bindPushConstants(&mvpMatrix, sizeof(mvpMatrix));\n  } else {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n  commands->bindVertexBuffer(0, *vb_);\n  commands->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  commands->drawIndexed(36);\n\n  imguiSession_->beginFrame(framebufferDesc_, getPlatform().getDisplayContext().pixelsPerPoint);\n  imguiSession_->drawFPS(fps_.getAverageFPS());\n  const ImGuiViewport* v = ImGui::GetMainViewport();\n  ImGui::SetNextWindowPos(ImVec2(10, 10));\n  ImGui::Begin(\"Mip-pyramid\", nullptr, ImGuiWindowFlags_AlwaysAutoResize);\n  const int width = static_cast<int>(v->WorkSize.x / 5.0f);\n  for (uint32_t mip = 0; mip != textureViews_.size(); mip++) {\n    ImGui::Image(ImTextureID(textureViews_[mip].get()), ImVec2(width >> mip, width >> mip));\n  }\n  ImGui::End();\n  imguiSession_->endFrame(device, *commands);\n\n  commands->endEncoding();\n\n  if (shellParams().shouldPresent) {\n    buffer->present(framebuffer_->getColorAttachment(0));\n  }\n\n  commandQueue_->submit(*buffer);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TextureViewSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#pragma once\n\n#include <IGLU/imgui/Session.h>\n#include <glm/gtc/matrix_transform.hpp>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/FPSCounter.h>\n\nnamespace igl::shell {\n\nclass TextureViewSession : public RenderSession {\n public:\n  explicit TextureViewSession(std::shared_ptr<Platform> platform);\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  FramebufferDesc framebufferDesc_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb_, ib_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<ISamplerState> sampler_;\n  std::shared_ptr<ITexture> texture_;\n  std::vector<std::shared_ptr<ITexture>> textureViews_;\n  std::unique_ptr<iglu::imgui::Session> imguiSession_;\n\n  FPSCounter fps_;\n  float angle_ = 0;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/Textured3DCubeSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/Textured3DCubeSession.h>\n\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <cstddef>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n#include <igl/opengl/Version.h> // IWYU pragma: keep\n\nnamespace igl::shell {\n\nnamespace {\n\nstruct VertexPosUvw {\n  glm::vec3 position;\n  glm::vec3 uvw;\n};\n\nconst float kHalf = 1.0f;\nconst VertexPosUvw kVertexData0[] = {\n    {.position = {-kHalf, kHalf, -kHalf}, .uvw = {0.0, 1.0, 0.0}},\n    {.position = {kHalf, kHalf, -kHalf}, .uvw = {1.0, 1.0, 0.0}},\n    {.position = {-kHalf, -kHalf, -kHalf}, .uvw = {0.0, 0.0, 0.0}},\n    {.position = {kHalf, -kHalf, -kHalf}, .uvw = {1.0, 0.0, 0.0}},\n    {.position = {kHalf, kHalf, kHalf}, .uvw = {1.0, 1.0, 1.0}},\n    {.position = {-kHalf, kHalf, kHalf}, .uvw = {0.0, 1.0, 1.0}},\n    {.position = {kHalf, -kHalf, kHalf}, .uvw = {1.0, 0.0, 1.0}},\n    {.position = {-kHalf, -kHalf, kHalf}, .uvw = {0.0, 0.0, 1.0}},\n};\nconst uint16_t kIndexData[] = {0, 1, 2, 1, 3, 2, 1, 4, 3, 4, 6, 3, 4, 5, 6, 5, 7, 6,\n                               5, 0, 7, 0, 2, 7, 5, 4, 0, 4, 1, 0, 2, 3, 7, 3, 6, 7};\n\nstd::string getProlog(IDevice& device) {\n#if IGL_BACKEND_OPENGL\n  const auto shaderVersion = device.getShaderVersion();\n  if (shaderVersion.majorVersion >= 3 || shaderVersion.minorVersion >= 30) {\n    std::string prependVersionString = igl::opengl::getStringFromShaderVersion(shaderVersion);\n    prependVersionString += \"\\nprecision highp float;\\n\";\n    return prependVersionString;\n  }\n#endif // IGL_BACKEND_OPENGL\n  return \"\";\n}\n\nstd::string getMetalShaderSource() {\n  return R\"(\n          #include <metal_stdlib>\n          #include <simd/simd.h>\n          using namespace metal;\n\n          struct VertexUniformBlock {\n            float4x4 mvpMatrix;\n            float scaleZ;\n          };\n\n          struct VertexIn {\n            float3 position [[attribute(0)]];\n            float3 uvw [[attribute(1)]];\n          };\n\n          struct VertexOut {\n            float4 position [[position]];\n            float3 uvw;\n          };\n\n          vertex VertexOut vertexShader(VertexIn in [[stage_in]],\n                 constant VertexUniformBlock &vUniform[[buffer(1)]]) {\n            VertexOut out;\n            out.position = vUniform.mvpMatrix * float4(in.position, 1.0);\n            out.uvw = in.uvw;\n            out.uvw = float3(\n                         out.uvw.x, out.uvw.y, (out.uvw.z - 0.5f)*vUniform.scaleZ + 0.5f);\n            return out;\n           }\n\n           fragment float4 fragmentShader(\n                 VertexOut in[[stage_in]],\n                 texture3d<float> diffuseTex [[texture(0)]],\n                 sampler linearSampler [[sampler(0)]]) {\n             constexpr sampler s(s_address::clamp_to_edge,\n                                 t_address::clamp_to_edge,\n                                 min_filter::linear,\n                                 mag_filter::linear);\n             float4 tex = diffuseTex.sample(s, in.uvw);\n             return tex;\n           }\n        )\";\n}\n\nstd::string getOpenGLFragmentShaderSource(IDevice& device) {\n  return getProlog(device) + std::string(R\"(\n                      precision highp float; precision highp sampler3D;\n                      in vec3 uvw;\n                      uniform sampler3D inputVolume;\n                      out vec4 fragmentColor;\n                      void main() {\n                        fragmentColor = texture(inputVolume, uvw);\n                      })\");\n}\n\nstd::string getOpenGLVertexShaderSource(IDevice& device) {\n  return getProlog(device) + R\"(\n                      precision highp float;\n                      uniform mat4 mvpMatrix;\n                      uniform float scaleZ;\n                      in vec3 position;\n                      in vec3 uvw_in;\n                      out vec3 uvw;\n\n                      void main() {\n                        gl_Position =  mvpMatrix * vec4(position, 1.0);\n                        uvw = vec3(uvw_in.x, uvw_in.y, (uvw_in.z-0.5)*scaleZ+0.5);\n                      })\";\n}\n\nconst char* getVulkanFragmentShaderSource() {\n  return R\"(\n                      precision highp float;\n                      layout(location = 0) in vec3 uvw;\n                      layout(location = 0) out vec4 out_FragColor;\n\n                      layout(set = 0, binding = 0) uniform sampler3D in_texture;\n\n                      void main() {\n                        out_FragColor = texture(in_texture, uvw);\n                      })\";\n}\n\nconst char* getVulkanVertexShaderSource() {\n  return R\"(\n                      precision highp float;\n\n                      layout (set = 1, binding = 1, std140) uniform PerFrame {\n                        mat4 mvpMatrix;\n                        float scaleZ;\n                      } perFrame;\n\n                      layout(location = 0) in vec3 position;\n                      layout(location = 1) in vec3 uvw_in;\n                      layout(location = 0) out vec3 uvw;\n\n                      void main() {\n                        gl_Position =  perFrame.mvpMatrix * vec4(position, 1.0);\n                        uvw = vec3(uvw_in.x, uvw_in.y, (uvw_in.z-0.5)*perFrame.scaleZ+0.5);\n                      })\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      cbuffer VertexUniforms : register(b1) { float4x4 mvpMatrix; float scaleZ; };\n      struct VSIn { float3 position : POSITION; float3 uvw : TEXCOORD0; };\n      struct VSOut { float4 position : SV_POSITION; float3 uvw : TEXCOORD0; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = mul(mvpMatrix, float4(v.position,1.0));\n        o.uvw = float3(v.uvw.x, v.uvw.y, (v.uvw.z - 0.5f)*scaleZ + 0.5f);\n        return o; }\n    )\";\n    static const char* kPS = R\"(\n      Texture3D<float4> inputVolume : register(t0);\n      SamplerState linearSampler : register(s0);\n      struct PSIn { float4 position : SV_POSITION; float3 uvw : TEXCOORD0; };\n      float4 main(PSIn i) : SV_TARGET { return inputVolume.Sample(linearSampler, i.uvw); }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ABORT(\"IGLSamples not set up for Custom\");\n    return nullptr;\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getOpenGLVertexShaderSource(device).c_str(),\n        \"main\",\n        \"\",\n        getOpenGLFragmentShaderSource(device).c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\nbool isDeviceCompatible(IDevice& device) noexcept {\n  return device.hasFeature(DeviceFeatures::Texture3D);\n}\n\n} // namespace\n\nvoid Textured3DCubeSession::createSamplerAndTextures(const igl::IDevice& device) {\n  // Sampler & Texture\n  samp0_ = device.createSamplerState(\n      SamplerStateDesc{\n          .minFilter = SamplerMinMagFilter::Linear,\n          .magFilter = SamplerMinMagFilter::Linear,\n          .addressModeU = SamplerAddressMode::MirrorRepeat,\n          .addressModeV = SamplerAddressMode::MirrorRepeat,\n          .addressModeW = SamplerAddressMode::MirrorRepeat,\n          .debugName = \"Sampler: linear (MirrorRepeat)\",\n      },\n      nullptr);\n\n  const uint32_t width = 256;\n  const uint32_t height = 256;\n  const uint32_t depth = 256;\n  const uint32_t bytesPerPixel = 4;\n  auto textureData = std::vector<uint8_t>((size_t)width * height * depth * bytesPerPixel);\n  for (uint32_t k = 0; k < depth; ++k) {\n    for (uint32_t j = 0; j < height; ++j) {\n      for (uint32_t i = 0; i < width; ++i) {\n        const uint32_t index = (i + width * j + width * height * k) * bytesPerPixel;\n        const float d = sqrtf((i - 128.0f) * (i - 128.0f) + (j - 128.0f) * (j - 128.0f) +\n                              (k - 128.0f) * (k - 128.0f)) /\n                        16.0f;\n        if (d > 7.0f) {\n          textureData[index + 0] = 148;\n          textureData[index + 1] = 0;\n          textureData[index + 2] = 211;\n          textureData[index + 3] = 255;\n        } else if (d > 6.0f) {\n          textureData[index + 0] = 75;\n          textureData[index + 1] = 0;\n          textureData[index + 2] = 130;\n          textureData[index + 3] = 255;\n        } else if (d > 5.0f) {\n          textureData[index + 0] = 0;\n          textureData[index + 1] = 0;\n          textureData[index + 2] = 255;\n          textureData[index + 3] = 255;\n        } else if (d > 4.0f) {\n          textureData[index + 0] = 0;\n          textureData[index + 1] = 255;\n          textureData[index + 2] = 0;\n          textureData[index + 3] = 255;\n        } else if (d > 3.0f) {\n          textureData[index + 0] = 255;\n          textureData[index + 1] = 255;\n          textureData[index + 2] = 0;\n          textureData[index + 3] = 255;\n        } else if (d > 2.0f) {\n          textureData[index + 0] = 255;\n          textureData[index + 1] = 127;\n          textureData[index + 2] = 0;\n          textureData[index + 3] = 255;\n        } else {\n          textureData[index + 0] = 255;\n          textureData[index + 1] = 0;\n          textureData[index + 2] = 0;\n          textureData[index + 3] = 255;\n        }\n      }\n    }\n  }\n\n  TextureDesc texDesc = igl::TextureDesc::new3D(igl::TextureFormat::RGBA_UNorm8,\n                                                width,\n                                                height,\n                                                depth,\n                                                igl::TextureDesc::TextureUsageBits::Sampled);\n  texDesc.debugName = \"shell/renderSessions/Textured3DCubeSession.cpp:tex0_\";\n  tex0_ = getPlatform().getDevice().createTexture(texDesc, nullptr);\n  const auto range = igl::TextureRangeDesc::new3D(0, 0, 0, width, height, depth);\n  tex0_->upload(range, textureData.data());\n}\n\nvoid Textured3DCubeSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n  // Vertex buffer, Index buffer and Vertex Input\n  vb0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                        .data = kVertexData0,\n                                        .length = sizeof(kVertexData0)},\n                             nullptr);\n  ib0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                        .data = kIndexData,\n                                        .length = sizeof(kIndexData)},\n                             nullptr);\n\n  const VertexInputStateDesc inputDesc = {\n      .numAttributes = 2,\n      .attributes = {{\n                         .bufferIndex = 0,\n                         .format = VertexAttributeFormat::Float3,\n                         .offset = offsetof(VertexPosUvw, position),\n                         .name = \"position\",\n                         .location = 0,\n                     },\n                     {\n                         .bufferIndex = 0,\n                         .format = VertexAttributeFormat::Float3,\n                         .offset = offsetof(VertexPosUvw, uvw),\n                         .name = \"uvw_in\",\n                         .location = 1,\n                     }},\n      .numInputBindings = 1,\n      .inputBindings = {{.stride = sizeof(VertexPosUvw)}},\n  };\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n\n  createSamplerAndTextures(device);\n  shaderStages_ = getShaderStagesForBackend(device);\n\n  // Command queue: backed by different types of GPU HW queues\n  commandQueue_ = device.createCommandQueue({}, nullptr);\n\n  // Set up vertex uniform data\n  vertexParameters_.scaleZ = 1.0f;\n\n  renderPass_ = {\n      .colorAttachments = {{\n          .loadAction = LoadAction::Clear,\n          .storeAction = StoreAction::Store,\n          .clearColor = getPreferredClearColor(),\n      }},\n      .depthAttachment = {.loadAction = LoadAction::Clear, .clearDepth = 1.0},\n  };\n}\n\nvoid Textured3DCubeSession::setVertexParams(float aspectRatio) {\n  // perspective projection\n  const float fov = 45.0f * (M_PI / 180.0f);\n  const glm::mat4 projectionMat = glm::perspectiveLH(fov, aspectRatio, 0.1f, 100.0f);\n  // rotating animation\n  static float angle = 0.0f, scaleZ = 1.0f, ss = 0.005f;\n  angle += 0.005f;\n  scaleZ += ss;\n  scaleZ = scaleZ < 0.0f ? 0.0f : scaleZ > 1.0 ? 1.0f : scaleZ;\n  if (scaleZ <= 0.05f || scaleZ >= 1.0f) {\n    ss *= -1.0f;\n  }\n  const glm::mat4 xform = projectionMat *\n                          glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.f, 8.0f)) *\n                          glm::rotate(glm::mat4(1.0f), -0.2f, glm::vec3(1.0f, 0.0f, 0.0f)) *\n                          glm::rotate(glm::mat4(1.0f), angle, glm::vec3(0.0f, 1.0f, 0.0f)) *\n                          glm::scale(glm::mat4(1.0f), glm::vec3(1.0f, 1.0f, scaleZ));\n\n  vertexParameters_.mvpMatrix = xform;\n  vertexParameters_.scaleZ = scaleZ;\n}\n\nvoid Textured3DCubeSession::update(SurfaceTextures surfaceTextures) noexcept {\n  auto& device = getPlatform().getDevice();\n  if (!isDeviceCompatible(device)) {\n    return;\n  }\n\n  // cube animation\n  setVertexParams(surfaceTextures.color->getAspectRatio());\n\n  Result ret;\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = surfaceTextures.color}},\n            .depthAttachment = {.texture = surfaceTextures.depth},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures.color);\n  }\n\n  const size_t textureUnit = 0;\n  if (pipelineState_ == nullptr) {\n    // Graphics pipeline: state batch that fully configures GPU for rendering\n\n    const RenderPipelineDesc graphicsDesc = {\n        .vertexInputState = vertexInput0_,\n        .shaderStages = shaderStages_,\n        .targetDesc = {.colorAttachments =\n                           {{.textureFormat =\n                                 framebuffer_->getColorAttachment(0)->getProperties().format}},\n                       .depthAttachmentFormat =\n                           framebuffer_->getDepthAttachment()->getProperties().format},\n        .cullMode = igl::CullMode::Back,\n        .frontFaceWinding = igl::WindingMode::Clockwise,\n        .fragmentUnitSamplerMap = {{textureUnit, IGL_NAMEHANDLE(\"inputVolume\")}},\n    };\n    pipelineState_ = getPlatform().getDevice().createRenderPipeline(graphicsDesc, nullptr);\n  }\n\n  // Command buffers (1-N per thread): create, submit and forget\n  const auto buffer = commandQueue_->createCommandBuffer({}, nullptr);\n\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  commands->bindVertexBuffer(0, *vb0_);\n\n  // Bind Vertex Uniform Data\n  const iglu::ManagedUniformBufferInfo info = {\n      .index = 1,\n      .length = sizeof(VertexFormat),\n      .uniforms =\n          {\n              {\n                  .name = \"mvpMatrix\",\n                  .location = -1,\n                  .type = igl::UniformType::Mat4x4,\n                  .numElements = 1,\n                  .offset = offsetof(VertexFormat, mvpMatrix),\n                  .elementStride = 0,\n              },\n              {\n                  .name = \"scaleZ\",\n                  .location = -1,\n                  .type = igl::UniformType::Float,\n                  .numElements = 1,\n                  .offset = offsetof(VertexFormat, scaleZ),\n                  .elementStride = 0,\n              },\n          },\n  };\n\n  const std::shared_ptr<iglu::ManagedUniformBuffer> vertUniformBuffer =\n      std::make_shared<iglu::ManagedUniformBuffer>(device, info);\n  IGL_DEBUG_ASSERT(vertUniformBuffer->result.isOk());\n  *static_cast<VertexFormat*>(vertUniformBuffer->getData()) = vertexParameters_;\n  vertUniformBuffer->bind(device, *pipelineState_, *commands);\n\n  commands->bindTexture(textureUnit, BindTarget::kFragment, tex0_.get());\n  commands->bindSamplerState(textureUnit, BindTarget::kFragment, samp0_.get());\n\n  commands->bindRenderPipelineState(pipelineState_);\n\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n  commands->drawIndexed(static_cast<size_t>(3u * 6u * 2u));\n\n  commands->endEncoding();\n\n  if (shellParams().shouldPresent) {\n    buffer->present(framebuffer_->getColorAttachment(0));\n  }\n\n  commandQueue_->submit(*buffer); // Guarantees ordering between command buffers\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/Textured3DCubeSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <glm/glm.hpp>\n#include <glm/gtc/matrix_transform.hpp>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nstruct VertexFormat {\n  glm::mat4 mvpMatrix;\n  float scaleZ{};\n};\n\nclass Textured3DCubeSession : public RenderSession {\n public:\n  explicit Textured3DCubeSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb0_, ib0_; // Buffers for vertices and indices (or constants)\n  std::shared_ptr<ITexture> tex0_;\n  std::shared_ptr<ISamplerState> samp0_;\n\n  VertexFormat vertexParameters_;\n\n  // utility fns\n  void createSamplerAndTextures(const IDevice& /*device*/);\n  void setVertexParams(float aspectRatio);\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TinyMeshBindGroupSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/TinyMeshBindGroupSession.h>\n\n#include <cmath>\n#include <cstddef>\n#include <glm/ext/matrix_clip_space.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/glm.hpp>\n#include <glm/gtc/random.hpp>\n#include <shell/shared/platform/DisplayContext.h>\n#include <igl/FPSCounter.h>\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/Device.h>\n#endif // IGL_BACKEND_OPENGL\n#if IGL_BACKEND_VULKAN\n#include <igl/vulkan/PlatformDevice.h>\n#endif // IGL_BACKEND_VULKAN\n\n#include <filesystem>\n\n#if defined(__clang__)\n#pragma clang diagnostic ignored \"-Wimplicit-fallthrough\"\n#pragma clang diagnostic ignored \"-Wunused-variable\"\n#pragma clang diagnostic ignored \"-Wunused-function\"\n#endif // __clang__\n#include <stb/stb_image.h>\n#define TINY_TEST_USE_DEPTH_BUFFER 1\n\n// On iOS for Xcode 16.3, std::to_chars is not available. To avoid an error, we should not include\n// std::format, and switch to using fmt/format instead. This define is used in conjunction with\n// others below, as this is not the only reason not to include std::format.\n//\n// Note: the _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT is defined in libc++'s <__config>\n// header, which is includes by all other headers. We include <cassert> and <utility> above\n#define IGL_INCLUDE_FORMAT (!IGL_PLATFORM_APPLE || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT)\n\n// libc++'s implementation of std::format has a large binary size impact\n// (https://github.com/llvm/llvm-project/issues/64180), so avoid it on Android.\n#if !defined(IGL_FORMAT)\n#if defined(__cpp_lib_format) && !defined(__ANDROID__) && IGL_INCLUDE_FORMAT\n#include <format>\n#define IGL_FORMAT std::format\n#else\n#include <fmt/core.h>\n#define IGL_FORMAT fmt::format\n#endif // __cpp_lib_format\n#endif // !defined(IGL_FORMAT)\n\nnamespace igl::shell {\n\nusing namespace igl;\nusing glm::mat4;\nusing glm::vec2;\nusing glm::vec3;\nusing glm::vec4;\n\nnamespace {\n\nconst uint32_t kDynamicBufferMask = 0b10;\n\n[[maybe_unused]] std::string stringReplaceAll(const char* input,\n                                              const char* searchString,\n                                              const char* replaceString) {\n  std::string s(input);\n  const size_t len = strlen(searchString);\n  size_t pos = 0;\n  while ((pos = s.find(searchString, pos)) != std::string::npos) {\n    s.replace(pos, len, replaceString);\n  }\n  return s;\n}\n\nconstexpr uint32_t kNumBufferedFrames = 3;\n\nint width = 0;\nint height = 0;\n\nconstexpr uint32_t kNumCubes = 256;\n\nstruct VertexPosUvw {\n  vec3 position;\n  vec3 color;\n  vec2 uv;\n};\n\nstruct UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n};\nstruct UniformsPerObject {\n  mat4 model;\n};\n\n// from igl/shell/renderSessions/Textured3DCubeSession.cpp\nconst float kHalf = 1.0f;\n\n// UV-mapped cube with indices: 24 vertices, 36 indices\nconst VertexPosUvw kVertexData0[] = {\n    // top\n    {.position = {-kHalf, -kHalf, +kHalf}, .color = {0.0, 0.0, 1.0}, .uv = {0, 0}}, // 0\n    {.position = {+kHalf, -kHalf, +kHalf}, .color = {1.0, 0.0, 1.0}, .uv = {1, 0}}, // 1\n    {.position = {+kHalf, +kHalf, +kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 2\n    {.position = {-kHalf, +kHalf, +kHalf}, .color = {0.0, 1.0, 1.0}, .uv = {0, 1}}, // 3\n    // bottom\n    {.position = {-kHalf, -kHalf, -kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 4\n    {.position = {-kHalf, +kHalf, -kHalf}, .color = {0.0, 1.0, 0.0}, .uv = {0, 1}}, // 5\n    {.position = {+kHalf, +kHalf, -kHalf}, .color = {1.0, 1.0, 0.0}, .uv = {1, 1}}, // 6\n    {.position = {+kHalf, -kHalf, -kHalf}, .color = {1.0, 0.0, 0.0}, .uv = {1, 0}}, // 7\n    // left\n    {.position = {+kHalf, +kHalf, -kHalf}, .color = {1.0, 1.0, 0.0}, .uv = {1, 0}}, // 8\n    {.position = {-kHalf, +kHalf, -kHalf}, .color = {0.0, 1.0, 0.0}, .uv = {0, 0}}, // 9\n    {.position = {-kHalf, +kHalf, +kHalf}, .color = {0.0, 1.0, 1.0}, .uv = {0, 1}}, // 10\n    {.position = {+kHalf, +kHalf, +kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 11\n    // right\n    {.position = {-kHalf, -kHalf, -kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 12\n    {.position = {+kHalf, -kHalf, -kHalf}, .color = {1.0, 0.0, 0.0}, .uv = {1, 0}}, // 13\n    {.position = {+kHalf, -kHalf, +kHalf}, .color = {1.0, 0.0, 1.0}, .uv = {1, 1}}, // 14\n    {.position = {-kHalf, -kHalf, +kHalf}, .color = {0.0, 0.0, 1.0}, .uv = {0, 1}}, // 15\n    // front\n    {.position = {+kHalf, -kHalf, -kHalf}, .color = {1.0, 0.0, 0.0}, .uv = {0, 0}}, // 16\n    {.position = {+kHalf, +kHalf, -kHalf}, .color = {1.0, 1.0, 0.0}, .uv = {1, 0}}, // 17\n    {.position = {+kHalf, +kHalf, +kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 18\n    {.position = {+kHalf, -kHalf, +kHalf}, .color = {1.0, 0.0, 1.0}, .uv = {0, 1}}, // 19\n    // back\n    {.position = {-kHalf, +kHalf, -kHalf}, .color = {0.0, 1.0, 0.0}, .uv = {1, 0}}, // 20\n    {.position = {-kHalf, -kHalf, -kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 21\n    {.position = {-kHalf, -kHalf, +kHalf}, .color = {0.0, 0.0, 1.0}, .uv = {0, 1}}, // 22\n    {.position = {-kHalf, +kHalf, +kHalf}, .color = {0.0, 1.0, 1.0}, .uv = {1, 1}}, // 23\n};\n\nuint16_t indexData[] = {0,  1,  2,  2,  3,  0,  4,  5,  6,  6,  7,  4,  8,  9,  10, 10, 11, 8,\n                        12, 13, 14, 14, 15, 12, 16, 17, 18, 18, 19, 16, 20, 21, 22, 22, 23, 20};\n\nUniformsPerFrame perFrame;\nUniformsPerObject perObject[kNumCubes];\nvec3 axis[kNumCubes];\n\n#if IGL_BACKEND_METAL\n[[nodiscard]] std::string getMetalShaderSource() {\n  return R\"(\n          #include <metal_stdlib>\n          #include <simd/simd.h>\n          using namespace metal;\n\n          constant float2 pos[3] = {\n            float2(-0.6, -0.4),\n            float2( 0.6, -0.4),\n            float2( 0.0,  0.6)\n          };\n          constant float3 col[3] = {\n            float3(1.0, 0.0, 0.0),\n            float3(0.0, 1.0, 0.0),\n            float3(0.0, 0.0, 1.0)\n          };\n\n          struct VertexOut {\n            float4 position [[position]];\n            float3 uvw;\n          };\n\n          vertex VertexOut vertexShader(uint vid [[vertex_id]]) {\n            VertexOut out;\n            out.position = float4(pos[vid], 0.0, 1.0);\n            out.uvw = col[vid];\n            return out;\n           }\n\n           fragment float4 fragmentShader(\n                 VertexOut in[[stage_in]]) {\n\n             float4 tex = float4(in.uvw,1.0);\n             return tex;\n           }\n        )\";\n}\n#endif // IGL_BACKEND_METAL\n\n[[nodiscard]] const char* getVulkanVertexShaderSource() {\n  return R\"(\nlayout (location=0) in vec3 pos;\nlayout (location=1) in vec3 col;\nlayout (location=2) in vec2 st;\nlayout (location=0) out vec3 color;\nlayout (location=1) out vec2 uv;\n\n#if VULKAN\nlayout (set = 1, binding = 0, std140)\n#else\nlayout (binding = 0, std140)\n#endif\nuniform UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n} perFrame;\n\n#if VULKAN\nlayout (set = 1, binding = 1, std140)\n#else\nlayout (binding = 1, std140)\n#endif\nuniform UniformsPerObject {\n  mat4 model;\n} perObject;\n\nvoid main() {\n  mat4 proj = perFrame.proj;\n  mat4 view = perFrame.view;\n  mat4 model = perObject.model;\n  gl_Position = proj * view * model * vec4(pos, 1.0);\n  color = col;\n  uv = st;\n}\n)\";\n}\n\n[[nodiscard]] const char* getVulkanFragmentShaderSource() {\n  return R\"(\nlayout (location=0) in vec3 color;\nlayout (location=1) in vec2 uv;\nlayout (location=0) out vec4 out_FragColor;\n\n#if VULKAN\nlayout (set = 0, binding = 0) uniform sampler2D uTex0;\nlayout (set = 0, binding = 1) uniform sampler2D uTex1;\n#else\nlayout (binding = 0) uniform sampler2D uTex0;\nlayout (binding = 1) uniform sampler2D uTex1;\n#endif\n\nvoid main() {\n  vec4 t0 = texture(uTex0, 2.0 * uv);\n  vec4 t1 = texture(uTex1,  uv);\n  out_FragColor = vec4(2.0 * color * (t0.rgb * t1.rgb), 1.0);\n};\n)\";\n}\n\n[[nodiscard]] std::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n\n#if IGL_BACKEND_VULKAN\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n#endif // IGL_BACKEND_VULKAN\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n    // @fb-only\n// @fb-only\n\n#if IGL_BACKEND_METAL\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n#endif // IGL_BACKEND_METAL\n\n#if IGL_BACKEND_OPENGL\n  case igl::BackendType::OpenGL: {\n    auto glVersion =\n        static_cast<igl::opengl::Device&>(device).getContext().deviceFeatures().getGLVersion();\n\n    if (glVersion > igl::opengl::GLVersion::v2_1) {\n      const std::string codeVS1 =\n          stringReplaceAll(getVulkanVertexShaderSource(), \"gl_VertexIndex\", \"gl_VertexID\");\n      auto codeVS2 = \"#version 460\\n\" + codeVS1;\n      auto codeFS = \"#version 460\\n\" + std::string(getVulkanFragmentShaderSource());\n\n      return igl::ShaderStagesCreator::fromModuleStringInput(\n          device, codeVS2.c_str(), \"main\", \"\", codeFS.c_str(), \"main\", \"\", nullptr);\n    } else {\n      IGL_DEBUG_ABORT(\"This sample is incompatible with OpenGL 2.1\");\n      return nullptr;\n    }\n  }\n#endif // IGL_BACKEND_OPENGL\n\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\ncbuffer UniformsPerFrame : register(b0) { float4x4 proj; float4x4 view; };\ncbuffer UniformsPerObject : register(b1) { float4x4 model; };\nstruct VSInput { float3 pos:POSITION; float3 col:COLOR; float2 st:TEXCOORD0; };\nstruct PSInput { float4 position:SV_POSITION; float3 color:COLOR; float2 uv:TEXCOORD0; };\nPSInput main(VSInput input){ PSInput o; float4 p = mul(model, float4(input.pos,1)); p=mul(view,p); o.position=mul(proj,p); o.color=input.col; o.uv=input.st; return o; }\n)\";\n\n    static const char* kPS = R\"(\nTexture2D uTex0:register(t0); Texture2D uTex1:register(t1); SamplerState s0:register(s0); SamplerState s1:register(s1);\nstruct PSInput { float4 position:SV_POSITION; float3 color:COLOR; float2 uv:TEXCOORD0; };\nfloat4 main(PSInput input):SV_TARGET{ float3 t0=uTex0.Sample(s0,input.uv*2).rgb; float3 t1=uTex1.Sample(s1,input.uv).rgb; return float4(2.0*input.color*(t0*t1),1.0); }\n)\";\n\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n\n  default:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return nullptr;\n  }\n}\n\n} // namespace\n\nTinyMeshBindGroupSession::TinyMeshBindGroupSession(std::shared_ptr<Platform> platform) :\n  RenderSession(std::move(platform)) {\n  listener_ = std::make_shared<Listener>(*this);\n  getPlatform().getInputDispatcher().addKeyListener(listener_);\n  imguiSession_ = std::make_unique<iglu::imgui::Session>(getPlatform().getDevice(),\n                                                         getPlatform().getInputDispatcher());\n}\n\nvoid TinyMeshBindGroupSession::initialize() noexcept {\n  device_ = &getPlatform().getDevice();\n\n  // Vertex buffer, Index buffer and Vertex Input. Buffers are allocated in GPU memory.\n  vb0_ = device_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                          .data = kVertexData0,\n                                          .length = sizeof(kVertexData0),\n                                          .storage = ResourceStorage::Private,\n                                          .debugName = \"Buffer: vertex\"},\n                               nullptr);\n  ib0_ = device_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                          .data = indexData,\n                                          .length = sizeof(indexData),\n                                          .storage = ResourceStorage::Private,\n                                          .debugName = \"Buffer: index\"},\n                               nullptr);\n  // create an Uniform buffers to store uniforms for 2 objects\n  for (uint32_t i = 0; i != kNumBufferedFrames; i++) {\n    ubPerFrame_.push_back(\n        device_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Uniform,\n                                         .data = &perFrame,\n                                         .length = sizeof(UniformsPerFrame),\n                                         .storage = ResourceStorage::Shared,\n                                         .hint = BufferDesc::BufferAPIHintBits::UniformBlock,\n                                         .debugName = \"Buffer: uniforms (per frame)\"},\n                              nullptr));\n    ubPerObject_.push_back(\n        device_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Uniform,\n                                         .data = perObject,\n                                         .length = kNumCubes * sizeof(UniformsPerObject),\n                                         .storage = ResourceStorage::Shared,\n                                         .hint = BufferDesc::BufferAPIHintBits::UniformBlock,\n                                         .debugName = \"Buffer: uniforms (per object)\"},\n                              nullptr));\n  }\n\n  {\n    VertexInputStateDesc desc;\n    desc.numAttributes = 3;\n    desc.attributes[0].format = VertexAttributeFormat::Float3;\n    desc.attributes[0].offset = offsetof(VertexPosUvw, position);\n    desc.attributes[0].name = \"pos\";\n    desc.attributes[0].bufferIndex = 0;\n    desc.attributes[0].location = 0;\n    desc.attributes[1].format = VertexAttributeFormat::Float3;\n    desc.attributes[1].offset = offsetof(VertexPosUvw, color);\n    desc.attributes[1].name = \"col\";\n    desc.attributes[1].bufferIndex = 0;\n    desc.attributes[1].location = 1;\n    desc.attributes[2].format = VertexAttributeFormat::Float2;\n    desc.attributes[2].offset = offsetof(VertexPosUvw, uv);\n    desc.attributes[2].name = \"st\";\n    desc.attributes[2].bufferIndex = 0;\n    desc.attributes[2].location = 2;\n    desc.numInputBindings = 1;\n    desc.inputBindings[0].stride = sizeof(VertexPosUvw);\n    vertexInput0_ = device_->createVertexInputState(desc, nullptr);\n  }\n\n  {\n    DepthStencilStateDesc desc;\n    desc.isDepthWriteEnabled = true;\n    desc.compareFunction = igl::CompareFunction::Less;\n    depthStencilState_ = device_->createDepthStencilState(desc, nullptr);\n  }\n\n  // Command queue: backed by different types of GPU HW queues\n  commandQueue_ = device_->createCommandQueue({}, nullptr);\n\n  renderPass_.colorAttachments.emplace_back();\n  renderPass_.colorAttachments.back().loadAction = LoadAction::Clear;\n  renderPass_.colorAttachments.back().storeAction = StoreAction::Store;\n  renderPass_.colorAttachments.back().clearColor = {1.0f, 0.0f, 0.0f, 1.0f};\n#if TINY_TEST_USE_DEPTH_BUFFER\n  renderPass_.depthAttachment.loadAction = LoadAction::Clear;\n  renderPass_.depthAttachment.clearDepth = 1.0;\n#else\n  renderPass_.depthAttachment.loadAction = LoadAction::DontCare;\n#endif // TINY_TEST_USE_DEPTH_BUFFER\n\n  // initialize random rotation axes for all cubes\n  for (auto& axi : axis) {\n    axi = glm::sphericalRand(1.0f);\n  }\n}\n\nvoid TinyMeshBindGroupSession::createRenderPipeline() {\n  if (renderPipelineStateMesh_) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(framebuffer_);\n\n  RenderPipelineDesc desc;\n\n  desc.targetDesc.colorAttachments.resize(1);\n  desc.targetDesc.colorAttachments[0].textureFormat =\n      framebuffer_->getColorAttachment(0)->getProperties().format;\n\n  if (framebuffer_->getDepthAttachment()) {\n    desc.targetDesc.depthAttachmentFormat =\n        framebuffer_->getDepthAttachment()->getProperties().format;\n  }\n\n  desc.vertexInputState = vertexInput0_;\n  desc.shaderStages = getShaderStagesForBackend(*device_);\n\n#if !TINY_TEST_USE_DEPTH_BUFFER\n  desc.cullMode = igl::CullMode::Back;\n#endif // TINY_TEST_USE_DEPTH_BUFFER\n\n  desc.frontFaceWinding = igl::WindingMode::Clockwise;\n  desc.isDynamicBufferMask = kDynamicBufferMask;\n  desc.debugName = igl::genNameHandle(\"Pipeline: mesh\");\n  desc.fragmentUnitSamplerMap[0] = IGL_NAMEHANDLE(\"uTex0\");\n  desc.fragmentUnitSamplerMap[1] = IGL_NAMEHANDLE(\"uTex1\");\n  renderPipelineStateMesh_ = device_->createRenderPipeline(desc, nullptr);\n\n  {\n    const uint32_t texWidth = 256;\n    const uint32_t texHeight = 256;\n    const TextureDesc desc2D = TextureDesc::new2D(igl::TextureFormat::BGRA_SRGB,\n                                                  texWidth,\n                                                  texHeight,\n                                                  TextureDesc::TextureUsageBits::Sampled,\n                                                  \"XOR pattern\");\n    texture0_ = device_->createTexture(desc2D, nullptr);\n    std::vector<uint32_t> pixels(texWidth * texHeight);\n    for (uint32_t y = 0; y != texHeight; y++) {\n      for (uint32_t x = 0; x != texWidth; x++) {\n        // create a XOR pattern\n        pixels[y * texWidth + x] = 0xFF000000 + ((x ^ y) << 16) + ((x ^ y) << 8) + (x ^ y);\n      }\n    }\n    texture0_->upload(TextureRangeDesc::new2D(0, 0, texWidth, texHeight), pixels.data());\n  }\n  {\n    using namespace std::filesystem;\n    path dir = current_path();\n    // find IGLU somewhere above our current directory\n    // @fb-only\n    const char* contentFolder = \"shell/resources/\";\n    // @fb-only\n    while (dir != current_path().root_path() && !exists(dir / path(contentFolder))) {\n      dir = dir.parent_path();\n    }\n    int32_t texWidth = 0;\n    int32_t texHeight = 0;\n    int32_t channels = 0;\n    uint8_t* pixels =\n        stbi_load((dir / path(contentFolder) / path(\"images/marble.png\")).string().c_str(),\n                  &texWidth,\n                  &texHeight,\n                  &channels,\n                  4);\n    IGL_DEBUG_ASSERT(pixels, \"Cannot load texture.\");\n    const TextureDesc desc2D = TextureDesc::new2D(igl::TextureFormat::RGBA_SRGB,\n                                                  texWidth,\n                                                  texHeight,\n                                                  TextureDesc::TextureUsageBits::Sampled,\n                                                  \"marble.png\");\n    texture1_ = device_->createTexture(desc2D, nullptr);\n    texture1_->upload(TextureRangeDesc::new2D(0, 0, texWidth, texHeight), pixels);\n    stbi_image_free(pixels);\n  }\n  {\n    SamplerStateDesc samplerDesc = igl::SamplerStateDesc::newLinear();\n    samplerDesc.addressModeU = igl::SamplerAddressMode::Repeat;\n    samplerDesc.addressModeV = igl::SamplerAddressMode::Repeat;\n    samplerDesc.debugName = \"Sampler: linear\";\n    sampler_ = device_->createSamplerState(samplerDesc, nullptr);\n  }\n\n  for (uint32_t i = 0; i != kNumBufferedFrames; i++) {\n    bindGroupBuffers_.push_back(device_->createBindGroup({\n        .buffers{ubPerFrame_[i], ubPerObject_[i]},\n        .size{sizeof(UniformsPerFrame), sizeof(UniformsPerObject)},\n        .isDynamicBufferMask = kDynamicBufferMask,\n        .debugName = IGL_FORMAT(\"bindGroupBuffers_[{}]\", i),\n    }));\n  }\n\n  bindGroupTextures_ = device_->createBindGroup({\n      .textures = {texture0_, texture1_},\n      .samplers = {sampler_, sampler_},\n      .debugName = \"bindGroup_\",\n  });\n  bindGroupNoTexture1_ = device_->createBindGroup(\n      {\n          .textures = {texture0_},\n          .samplers = {sampler_},\n          .debugName = \"bindGroupNoTexture1_\",\n      },\n      // as we don't provide all necessary textures, let IGL/Vulkan add dummies where necessary\n      renderPipelineStateMesh_.get());\n}\n\nstd::shared_ptr<ITexture> TinyMeshBindGroupSession::getVulkanNativeDepth() {\n#if IGL_BACKEND_VULKAN\n  if (device_->getBackendType() == BackendType::Vulkan) {\n    const auto& vkPlatformDevice = device_->getPlatformDevice<igl::vulkan::PlatformDevice>();\n\n    IGL_DEBUG_ASSERT(vkPlatformDevice != nullptr);\n\n    Result ret;\n    std::shared_ptr<ITexture> drawable =\n        vkPlatformDevice->createTextureFromNativeDepth(width, height, &ret);\n\n    IGL_DEBUG_ASSERT(ret.isOk());\n    return drawable;\n  }\n#endif // IGL_BACKEND_VULKAN\n\n  // TODO: unhardcode Vulkan assumption above\n  return nullptr;\n}\n\nvoid TinyMeshBindGroupSession::update(SurfaceTextures surfaceTextures) noexcept {\n  width = surfaceTextures.color->getSize().width;\n  height = surfaceTextures.color->getSize().height;\n\n  const float deltaSeconds = getDeltaSeconds();\n\n  fps_.updateFPS(deltaSeconds);\n  currentTime_ += deltaSeconds;\n\n  if (!framebuffer_) {\n    framebufferDesc_.colorAttachments[0].texture = surfaceTextures.color;\n\n#if TINY_TEST_USE_DEPTH_BUFFER\n    framebufferDesc_.depthAttachment.texture = getVulkanNativeDepth();\n#endif // TINY_TEST_USE_DEPTH_BUFFER\n    framebuffer_ = device_->createFramebuffer(framebufferDesc_, nullptr);\n    IGL_DEBUG_ASSERT(framebuffer_);\n\n    createRenderPipeline();\n  }\n\n  framebuffer_->updateDrawable(surfaceTextures.color);\n\n  // from igl/shell/renderSessions/Textured3DCubeSession.cpp\n  const float fov = float(45.0f * (M_PI / 180.0f));\n  const float aspectRatio = (float)width / (float)height;\n  perFrame.proj = glm::perspectiveLH(fov, aspectRatio, 0.1f, 500.0f);\n  // place a \"camera\" behind the cubes, the distance depends on the total number of cubes\n  perFrame.view =\n      glm::translate(mat4(1.0f), vec3(0.0f, 0.0f, sqrtf(kNumCubes / 16.0f) * 20.0f * kHalf));\n  ubPerFrame_[frameIndex_]->upload(&perFrame, BufferRange(sizeof(perFrame)));\n\n  // rotate cubes around random axes\n  for (uint32_t i = 0; i != kNumCubes; i++) {\n    const float direction = powf(-1, (float)(i + 1));\n    const uint32_t cubesInLine = (uint32_t)sqrt(kNumCubes);\n    const vec3 offset =\n        vec3(-1.5f * sqrt(kNumCubes) + 4.0f * static_cast<float>(i % cubesInLine),\n             -1.5f * sqrt(kNumCubes) + 4.0f * std::floor(static_cast<float>(i) / cubesInLine),\n             0);\n    perObject[i].model =\n        glm::rotate(glm::translate(mat4(1.0f), offset), float(direction * currentTime_), axis[i]);\n  }\n\n  ubPerObject_[frameIndex_]->upload(&perObject, BufferRange(sizeof(perObject)));\n\n  // Command buffers (1-N per thread): create, submit and forget\n  const std::shared_ptr<ICommandBuffer> buffer = commandQueue_->createCommandBuffer({}, nullptr);\n\n  const igl::Viewport viewport = {.x = 0.0f,\n                                  .y = 0.0f,\n                                  .width = (float)width,\n                                  .height = (float)height,\n                                  .minDepth = 0.0f,\n                                  .maxDepth = +1.0f};\n  const igl::ScissorRect scissor = {\n      .x = 0, .y = 0, .width = (uint32_t)width, .height = (uint32_t)height};\n\n  // This will clear the framebuffer\n  auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  commands->bindRenderPipelineState(renderPipelineStateMesh_);\n  commands->bindViewport(viewport);\n  commands->bindScissorRect(scissor);\n  commands->pushDebugGroupLabel(\"Render Mesh\", Color(1, 0, 0));\n  commands->bindVertexBuffer(0, *vb0_);\n  commands->bindDepthStencilState(depthStencilState_);\n  commands->bindBindGroup(bindGroupTextures_);\n  // Draw 2 cubes: we use uniform buffer to update matrices\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n  for (uint32_t i = 0; i != kNumCubes; i++) {\n    const uint32_t dynamicOffset = i * sizeof(UniformsPerObject);\n    commands->bindBindGroup(bindGroupBuffers_[frameIndex_], 1, &dynamicOffset);\n    commands->drawIndexed(3u * 6u * 2u);\n  }\n  commands->popDebugGroupLabel();\n  {\n    imguiSession_->beginFrame(framebufferDesc_, getPlatform().getDisplayContext().pixelsPerPoint);\n    ImGui::Begin(\"Texture Viewer\", nullptr, ImGuiWindowFlags_AlwaysAutoResize);\n    ImGui::Image(ImTextureID(texture1_.get()), ImVec2(512, 512));\n    ImGui::End();\n    imguiSession_->drawFPS(fps_.getAverageFPS());\n    imguiSession_->endFrame(getPlatform().getDevice(), *commands);\n  }\n  commands->endEncoding();\n\n  buffer->present(surfaceTextures.color);\n\n  commandQueue_->submit(*buffer);\n\n  frameIndex_ = (frameIndex_ + 1) % kNumBufferedFrames;\n}\n\nbool TinyMeshBindGroupSession::Listener::process(const CharEvent& event) {\n  if (event.character == 't') {\n    if (!session.bindGroupNoTexture1_.empty()) {\n      session.bindGroupTextures_ = std::move(session.bindGroupNoTexture1_);\n      // make sure we deallocate texture1\n      session.bindGroupNoTexture1_ = nullptr;\n      session.texture1_.reset();\n    }\n    return true;\n  }\n  return false;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TinyMeshBindGroupSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/imgui/Session.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/FPSCounter.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass TinyMeshBindGroupSession : public RenderSession {\n public:\n  explicit TinyMeshBindGroupSession(std::shared_ptr<Platform> platform);\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n  std::shared_ptr<ITexture> getVulkanNativeDepth();\n  void createRenderPipeline();\n\n private:\n  IDevice* device_{};\n  RenderPassDesc renderPass_;\n  FramebufferDesc framebufferDesc_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IRenderPipelineState> renderPipelineStateMesh_;\n  std::shared_ptr<IBuffer> vb0_, ib0_; // buffers for vertices and indices\n  std::vector<std::shared_ptr<IBuffer>> ubPerFrame_, ubPerObject_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IDepthStencilState> depthStencilState_;\n  std::shared_ptr<ITexture> texture0_, texture1_;\n  std::shared_ptr<ISamplerState> sampler_;\n  Holder<BindGroupTextureHandle> bindGroupTextures_;\n  Holder<BindGroupTextureHandle> bindGroupNoTexture1_;\n  std::vector<Holder<BindGroupBufferHandle>> bindGroupBuffers_;\n  uint32_t frameIndex_{0};\n\n  std::unique_ptr<iglu::imgui::Session> imguiSession_;\n\n  struct Listener : public IKeyListener {\n    explicit Listener(TinyMeshBindGroupSession& session) : session(session) {}\n    bool process(const CharEvent& event) override;\n    TinyMeshBindGroupSession& session;\n  };\n\n  std::shared_ptr<Listener> listener_;\n\n  FPSCounter fps_;\n  double currentTime_ = 0;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TinyMeshSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/TinyMeshSession.h>\n\n#include <cmath>\n#include <cstddef>\n#include <filesystem>\n#include <glm/ext/matrix_clip_space.hpp>\n#include <glm/ext/matrix_transform.hpp>\n#include <glm/glm.hpp>\n#include <glm/gtc/random.hpp>\n#include <shell/shared/platform/DisplayContext.h>\n#include <igl/FPSCounter.h>\n\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/Device.h>\n#endif // IGL_BACKEND_OPENGL\n#if IGL_BACKEND_VULKAN\n#include <igl/vulkan/PlatformDevice.h>\n#endif // IGL_BACKEND_VULKAN\n\n#if defined(__clang__)\n#pragma clang diagnostic ignored \"-Wimplicit-fallthrough\"\n#pragma clang diagnostic ignored \"-Wunused-variable\"\n#pragma clang diagnostic ignored \"-Wunused-function\"\n#endif // __clang__\n#include <stb/stb_image.h>\n#define TINY_TEST_USE_DEPTH_BUFFER 1\n\nnamespace igl::shell {\n\nnamespace {\n\n[[maybe_unused, nodiscard]] std::string stringReplaceAll(const char* input,\n                                                         const char* searchString,\n                                                         const char* replaceString) {\n  std::string s(input);\n  const size_t len = strlen(searchString);\n  size_t pos = 0;\n  while ((pos = s.find(searchString, pos)) != std::string::npos) {\n    s.replace(pos, len, replaceString);\n  }\n  return s;\n}\n\nconstexpr uint32_t kNumBufferedFrames = 3;\n\nint width = 0;\nint height = 0;\n\nconstexpr uint32_t kNumCubes = 256;\n\nstruct VertexPosUvw {\n  glm::vec3 position;\n  glm::vec3 color;\n  glm::vec2 uv;\n};\n\nstruct UniformsPerFrame {\n  glm::mat4 proj;\n  glm::mat4 view;\n};\nstruct UniformsPerObject {\n  glm::mat4 model;\n};\n\n// from igl/shell/renderSessions/Textured3DCubeSession.cpp\nconstexpr float kHalf = 1.0f;\n\n// UV-mapped cube with indices: 24 vertices, 36 indices\nconst VertexPosUvw kVertexData0[] = {\n    // top\n    {.position = {-kHalf, -kHalf, +kHalf}, .color = {0.0, 0.0, 1.0}, .uv = {0, 0}}, // 0\n    {.position = {+kHalf, -kHalf, +kHalf}, .color = {1.0, 0.0, 1.0}, .uv = {1, 0}}, // 1\n    {.position = {+kHalf, +kHalf, +kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 2\n    {.position = {-kHalf, +kHalf, +kHalf}, .color = {0.0, 1.0, 1.0}, .uv = {0, 1}}, // 3\n    // bottom\n    {.position = {-kHalf, -kHalf, -kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 4\n    {.position = {-kHalf, +kHalf, -kHalf}, .color = {0.0, 1.0, 0.0}, .uv = {0, 1}}, // 5\n    {.position = {+kHalf, +kHalf, -kHalf}, .color = {1.0, 1.0, 0.0}, .uv = {1, 1}}, // 6\n    {.position = {+kHalf, -kHalf, -kHalf}, .color = {1.0, 0.0, 0.0}, .uv = {1, 0}}, // 7\n    // left\n    {.position = {+kHalf, +kHalf, -kHalf}, .color = {1.0, 1.0, 0.0}, .uv = {1, 0}}, // 8\n    {.position = {-kHalf, +kHalf, -kHalf}, .color = {0.0, 1.0, 0.0}, .uv = {0, 0}}, // 9\n    {.position = {-kHalf, +kHalf, +kHalf}, .color = {0.0, 1.0, 1.0}, .uv = {0, 1}}, // 10\n    {.position = {+kHalf, +kHalf, +kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 11\n    // right\n    {.position = {-kHalf, -kHalf, -kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 12\n    {.position = {+kHalf, -kHalf, -kHalf}, .color = {1.0, 0.0, 0.0}, .uv = {1, 0}}, // 13\n    {.position = {+kHalf, -kHalf, +kHalf}, .color = {1.0, 0.0, 1.0}, .uv = {1, 1}}, // 14\n    {.position = {-kHalf, -kHalf, +kHalf}, .color = {0.0, 0.0, 1.0}, .uv = {0, 1}}, // 15\n    // front\n    {.position = {+kHalf, -kHalf, -kHalf}, .color = {1.0, 0.0, 0.0}, .uv = {0, 0}}, // 16\n    {.position = {+kHalf, +kHalf, -kHalf}, .color = {1.0, 1.0, 0.0}, .uv = {1, 0}}, // 17\n    {.position = {+kHalf, +kHalf, +kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {1, 1}}, // 18\n    {.position = {+kHalf, -kHalf, +kHalf}, .color = {1.0, 0.0, 1.0}, .uv = {0, 1}}, // 19\n    // back\n    {.position = {-kHalf, +kHalf, -kHalf}, .color = {0.0, 1.0, 0.0}, .uv = {1, 0}}, // 20\n    {.position = {-kHalf, -kHalf, -kHalf}, .color = {1.0, 1.0, 1.0}, .uv = {0, 0}}, // 21\n    {.position = {-kHalf, -kHalf, +kHalf}, .color = {0.0, 0.0, 1.0}, .uv = {0, 1}}, // 22\n    {.position = {-kHalf, +kHalf, +kHalf}, .color = {0.0, 1.0, 1.0}, .uv = {1, 1}}, // 23\n};\n\nconstexpr uint16_t kIndexData[] = {0,  1,  2,  2,  3,  0,  4,  5,  6,  6,  7,  4,\n                                   8,  9,  10, 10, 11, 8,  12, 13, 14, 14, 15, 12,\n                                   16, 17, 18, 18, 19, 16, 20, 21, 22, 22, 23, 20};\n\nUniformsPerFrame perFrame;\nUniformsPerObject perObject[kNumCubes];\nglm::vec3 axis[kNumCubes];\n\n#if IGL_BACKEND_METAL\n[[nodiscard]] const char* getMetalShaderSource() {\n  return R\"(\n          #include <metal_stdlib>\n          #include <simd/simd.h>\n          using namespace metal;\n\n          constant float2 pos[3] = {\n            float2(-0.6, -0.4),\n            float2( 0.6, -0.4),\n            float2( 0.0,  0.6)\n          };\n          constant float3 col[3] = {\n            float3(1.0, 0.0, 0.0),\n            float3(0.0, 1.0, 0.0),\n            float3(0.0, 0.0, 1.0)\n          };\n\n          struct VertexOut {\n            float4 position [[position]];\n            float3 uvw;\n          };\n\n          vertex VertexOut vertexShader(uint vid [[vertex_id]]) {\n            VertexOut out;\n            out.position = float4(pos[vid], 0.0, 1.0);\n            out.uvw = col[vid];\n            return out;\n           }\n\n           fragment float4 fragmentShader(\n                 VertexOut in[[stage_in]]) {\n\n             float4 tex = float4(in.uvw,1.0);\n             return tex;\n           }\n        )\";\n}\n#endif // IGL_BACKEND_METAL\n\n[[nodiscard]] const char* getVulkanVertexShaderSource() {\n  return R\"(\nlayout (location=0) in vec3 pos;\nlayout (location=1) in vec3 col;\nlayout (location=2) in vec2 st;\nlayout (location=0) out vec3 color;\nlayout (location=1) out vec2 uv;\n\n#if VULKAN\nlayout (set = 1, binding = 0, std140)\n#else\nlayout (binding = 0, std140)\n#endif\nuniform UniformsPerFrame {\n  mat4 proj;\n  mat4 view;\n} perFrame;\n\n#if VULKAN\nlayout (set = 1, binding = 1, std140)\n#else\nlayout (binding = 1, std140)\n#endif\nuniform UniformsPerObject {\n  mat4 model;\n} perObject;\n\nvoid main() {\n  mat4 proj = perFrame.proj;\n  mat4 view = perFrame.view;\n  mat4 model = perObject.model;\n  gl_Position = proj * view * model * vec4(pos, 1.0);\n  color = col;\n  uv = st;\n}\n)\";\n}\n\n[[nodiscard]] const char* getVulkanFragmentShaderSource() {\n  return R\"(\nlayout (location=0) in vec3 color;\nlayout (location=1) in vec2 uv;\nlayout (location=0) out vec4 out_FragColor;\n\n#if VULKAN\nlayout (set = 0, binding = 0) uniform sampler2D uTex0;\nlayout (set = 0, binding = 1) uniform sampler2D uTex1;\n#else\nlayout (binding = 0) uniform sampler2D uTex0;\nlayout (binding = 1) uniform sampler2D uTex1;\n#endif\n\nvoid main() {\n  vec4 t0 = texture(uTex0, 2.0 * uv);\n  vec4 t1 = texture(uTex1,  uv);\n  out_FragColor = vec4(2.0 * color * (t0.rgb * t1.rgb), 1.0);\n};\n)\";\n}\n\n[[nodiscard]] std::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n\n#if IGL_BACKEND_VULKAN\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n#endif // IGL_BACKEND_VULKAN\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n    // @fb-only\n// @fb-only\n\n#if IGL_BACKEND_METAL\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n#endif // IGL_BACKEND_METAL\n\n#if IGL_BACKEND_OPENGL\n  case igl::BackendType::OpenGL: {\n    const auto glVersion =\n        static_cast<igl::opengl::Device&>(device).getContext().deviceFeatures().getGLVersion();\n\n    if (glVersion > igl::opengl::GLVersion::v2_1) {\n      const std::string codeVS1 =\n          stringReplaceAll(getVulkanVertexShaderSource(), \"gl_VertexIndex\", \"gl_VertexID\");\n      const auto codeVS2 = \"#version 460\\n\" + codeVS1;\n      const auto codeFS = \"#version 460\\n\" + std::string(getVulkanFragmentShaderSource());\n\n      return igl::ShaderStagesCreator::fromModuleStringInput(\n          device, codeVS2.c_str(), \"main\", \"\", codeFS.c_str(), \"main\", \"\", nullptr);\n    } else {\n      IGL_DEBUG_ABORT(\"This sample is incompatible with OpenGL 2.1\");\n      return nullptr;\n    }\n  }\n#endif // IGL_BACKEND_OPENGL\n\n  default:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return nullptr;\n  }\n}\n\n} // namespace\n\nTinyMeshSession::TinyMeshSession(std::shared_ptr<Platform> platform) :\n  RenderSession(std::move(platform)) {\n  listener_ = std::make_shared<Listener>(*this);\n  getPlatform().getInputDispatcher().addKeyListener(listener_);\n  imguiSession_ = std::make_unique<iglu::imgui::Session>(getPlatform().getDevice(),\n                                                         getPlatform().getInputDispatcher());\n}\n\nvoid TinyMeshSession::initialize() noexcept {\n  device_ = &getPlatform().getDevice();\n\n  // Vertex buffer, Index buffer and Vertex Input. Buffers are allocated in GPU memory.\n  vb0_ = device_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                          .data = kVertexData0,\n                                          .length = sizeof(kVertexData0),\n                                          .storage = ResourceStorage::Private,\n                                          .debugName = \"Buffer: vertex\"},\n                               nullptr);\n  ib0_ = device_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                          .data = kIndexData,\n                                          .length = sizeof(kIndexData),\n                                          .storage = ResourceStorage::Private,\n                                          .debugName = \"Buffer: index\"},\n                               nullptr);\n  // create an Uniform buffers to store uniforms for 2 objects\n  for (uint32_t i = 0; i != kNumBufferedFrames; i++) {\n    ubPerFrame_.push_back(\n        device_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Uniform,\n                                         .data = &perFrame,\n                                         .length = sizeof(UniformsPerFrame),\n                                         .storage = ResourceStorage::Shared,\n                                         .hint = BufferDesc::BufferAPIHintBits::UniformBlock,\n                                         .debugName = \"Buffer: uniforms (per frame)\"},\n                              nullptr));\n    ubPerObject_.push_back(\n        device_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Uniform,\n                                         .data = perObject,\n                                         .length = kNumCubes * sizeof(UniformsPerObject),\n                                         .storage = ResourceStorage::Shared,\n                                         .hint = BufferDesc::BufferAPIHintBits::UniformBlock,\n                                         .debugName = \"Buffer: uniforms (per object)\"},\n                              nullptr));\n  }\n\n  vertexInput0_ = device_->createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 3,\n          .attributes =\n              {\n                  {.bufferIndex = 0,\n                   .format = VertexAttributeFormat::Float3,\n                   .offset = offsetof(VertexPosUvw, position),\n                   .name = \"pos\",\n                   .location = 0},\n                  {.bufferIndex = 0,\n                   .format = VertexAttributeFormat::Float3,\n                   .offset = offsetof(VertexPosUvw, color),\n                   .name = \"col\",\n                   .location = 1},\n                  {.bufferIndex = 0,\n                   .format = VertexAttributeFormat::Float2,\n                   .offset = offsetof(VertexPosUvw, uv),\n                   .name = \"st\",\n                   .location = 2},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{.stride = sizeof(VertexPosUvw)}},\n      },\n      nullptr);\n\n  depthStencilState_ = device_->createDepthStencilState(\n      DepthStencilStateDesc{\n          .compareFunction = igl::CompareFunction::Less,\n          .isDepthWriteEnabled = true,\n      },\n      nullptr);\n\n  {\n    const uint32_t texWidth = 256;\n    const uint32_t texHeight = 256;\n    const TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::BGRA_SRGB,\n                                                texWidth,\n                                                texHeight,\n                                                TextureDesc::TextureUsageBits::Sampled,\n                                                \"XOR pattern\");\n    texture0_ = device_->createTexture(desc, nullptr);\n    std::vector<uint32_t> pixels(\n        static_cast<std::vector<unsigned int>::size_type>(texWidth * texHeight));\n\n    for (uint32_t y = 0; y != texHeight; y++) {\n      for (uint32_t x = 0; x != texWidth; x++) {\n        // create a XOR pattern\n        pixels[y * texWidth + x] = 0xFF000000 + ((x ^ y) << 16) + ((x ^ y) << 8) + (x ^ y);\n      }\n    }\n    texture0_->upload(TextureRangeDesc::new2D(0, 0, texWidth, texHeight), pixels.data());\n  }\n  {\n    auto dir = std::filesystem::current_path();\n    // find IGLU somewhere above our current directory\n    // @fb-only\n    const char* contentFolder = \"shell/resources/\";\n    // @fb-only\n    while (dir != std::filesystem::current_path().root_path() &&\n           !std::filesystem::exists(dir / contentFolder)) {\n      dir = dir.parent_path();\n    }\n    int32_t texWidth = 0;\n    int32_t texHeight = 0;\n    int32_t channels = 0;\n    uint8_t* pixels = stbi_load(\n        (dir / std::filesystem::path(contentFolder) / \"images/marble.png\").string().c_str(),\n        &texWidth,\n        &texHeight,\n        &channels,\n        4);\n    IGL_DEBUG_ASSERT(pixels, \"Cannot load texture.\");\n    const TextureDesc desc = TextureDesc::new2D(igl::TextureFormat::RGBA_SRGB,\n                                                texWidth,\n                                                texHeight,\n                                                TextureDesc::TextureUsageBits::Sampled,\n                                                \"marble.png\");\n    texture1_ = device_->createTexture(desc, nullptr);\n    texture1_->upload(TextureRangeDesc::new2D(0, 0, texWidth, texHeight), pixels);\n    stbi_image_free(pixels);\n  }\n  sampler_ = device_->createSamplerState(\n      SamplerStateDesc{\n          .minFilter = SamplerMinMagFilter::Linear,\n          .magFilter = SamplerMinMagFilter::Linear,\n          .addressModeU = igl::SamplerAddressMode::Repeat,\n          .addressModeV = igl::SamplerAddressMode::Repeat,\n          .debugName = \"Sampler: linear\",\n      },\n      nullptr);\n\n  // Command queue: backed by different types of GPU HW queues\n  commandQueue_ = device_->createCommandQueue({}, nullptr);\n\n  renderPass_ = {\n      .colorAttachments = {{\n          .loadAction = LoadAction::Clear,\n          .storeAction = StoreAction::Store,\n          .clearColor = {1.0f, 0.0f, 0.0f, 1.0f},\n      }},\n#if TINY_TEST_USE_DEPTH_BUFFER\n      .depthAttachment = {.loadAction = LoadAction::Clear, .clearDepth = 1.0},\n#else\n      .depthAttachment = {.loadAction = LoadAction::DontCare},\n#endif // TINY_TEST_USE_DEPTH_BUFFER\n  };\n\n  // initialize random rotation axes for all cubes\n  for (glm::vec3& axi : axis) {\n    axi = glm::sphericalRand(1.0f);\n  }\n}\n\nstd::shared_ptr<ITexture> TinyMeshSession::getVulkanNativeDepth() {\n#if IGL_BACKEND_VULKAN\n  if (device_->getBackendType() == BackendType::Vulkan) {\n    const auto& vkPlatformDevice = device_->getPlatformDevice<igl::vulkan::PlatformDevice>();\n\n    IGL_DEBUG_ASSERT(vkPlatformDevice != nullptr);\n\n    Result ret;\n    std::shared_ptr<ITexture> drawable =\n        vkPlatformDevice->createTextureFromNativeDepth(width, height, &ret);\n\n    IGL_DEBUG_ASSERT(ret.isOk());\n    return drawable;\n  }\n#endif // IGL_BACKEND_VULKAN\n\n  // TODO: unhardcode Vulkan assumption above\n  return nullptr;\n}\n\nvoid TinyMeshSession::update(SurfaceTextures surfaceTextures) noexcept {\n  width = surfaceTextures.color->getSize().width;\n  height = surfaceTextures.color->getSize().height;\n\n  const float deltaSeconds = getDeltaSeconds();\n\n  fps_.updateFPS(deltaSeconds);\n  currentTime_ += deltaSeconds;\n\n  if (!framebuffer_) {\n    framebufferDesc_.colorAttachments[0].texture = surfaceTextures.color;\n\n#if TINY_TEST_USE_DEPTH_BUFFER\n    framebufferDesc_.depthAttachment.texture = getVulkanNativeDepth();\n#endif // TINY_TEST_USE_DEPTH_BUFFER\n    framebuffer_ = device_->createFramebuffer(framebufferDesc_, nullptr);\n    IGL_DEBUG_ASSERT(framebuffer_);\n\n    const TextureFormat depthFormat =\n        framebuffer_->getDepthAttachment()\n            ? framebuffer_->getDepthAttachment()->getProperties().format\n            : TextureFormat::Invalid;\n    renderPipelineStateMesh_ = device_->createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInput0_,\n            .shaderStages = getShaderStagesForBackend(*device_),\n            .targetDesc =\n                {\n                    .colorAttachments = {{\n                        .textureFormat =\n                            framebuffer_->getColorAttachment(0)->getProperties().format,\n                    }},\n                    .depthAttachmentFormat = depthFormat,\n                },\n#if !TINY_TEST_USE_DEPTH_BUFFER\n            .cullMode = igl::CullMode::Back,\n#endif // TINY_TEST_USE_DEPTH_BUFFER\n            .frontFaceWinding = igl::WindingMode::Clockwise,\n            .fragmentUnitSamplerMap = {{0, IGL_NAMEHANDLE(\"uTex0\")}, {1, IGL_NAMEHANDLE(\"uTex1\")}},\n            .debugName = igl::genNameHandle(\"Pipeline: mesh\"),\n        },\n        nullptr);\n  }\n\n  framebuffer_->updateDrawable(surfaceTextures.color);\n\n  // from igl/shell/renderSessions/Textured3DCubeSession.cpp\n  const float fov = float(45.0f * (M_PI / 180.0f));\n  const float aspectRatio = (float)width / (float)height;\n  perFrame.proj = glm::perspectiveLH(fov, aspectRatio, 0.1f, 500.0f);\n  // place a \"camera\" behind the cubes, the distance depends on the total number of cubes\n  perFrame.view = glm::translate(glm::mat4(1.0f),\n                                 glm::vec3(0.0f, 0.0f, sqrtf(kNumCubes / 16.0f) * 20.0f * kHalf));\n  ubPerFrame_[frameIndex_]->upload(&perFrame, BufferRange(sizeof(perFrame)));\n\n  // rotate cubes around random axes\n  for (uint32_t i = 0; i != kNumCubes; i++) {\n    const float direction = powf(-1, (float)(i + 1));\n    const uint32_t cubesInLine = (uint32_t)sqrt(kNumCubes);\n    const glm::vec3 offset =\n        glm::vec3(-1.5f * sqrt(kNumCubes) + 4.0f * static_cast<float>(i % cubesInLine),\n                  -1.5f * sqrt(kNumCubes) + 4.0f * std::floor(static_cast<float>(i) / cubesInLine),\n                  0);\n    perObject[i].model = glm::rotate(\n        glm::translate(glm::mat4(1.0f), offset), float(direction * currentTime_), axis[i]);\n  }\n\n  ubPerObject_[frameIndex_]->upload(&perObject, BufferRange(sizeof(perObject)));\n\n  // Command buffers (1-N per thread): create, submit and forget\n  const std::shared_ptr<ICommandBuffer> buffer = commandQueue_->createCommandBuffer({}, nullptr);\n\n  const igl::Viewport viewport = {.x = 0.0f,\n                                  .y = 0.0f,\n                                  .width = (float)width,\n                                  .height = (float)height,\n                                  .minDepth = 0.0f,\n                                  .maxDepth = +1.0f};\n  const igl::ScissorRect scissor = {\n      .x = 0, .y = 0, .width = (uint32_t)width, .height = (uint32_t)height};\n\n  // This will clear the framebuffer\n  auto commands = buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  commands->bindRenderPipelineState(renderPipelineStateMesh_);\n  commands->bindViewport(viewport);\n  commands->bindScissorRect(scissor);\n  commands->pushDebugGroupLabel(\"Render Mesh\", Color(1, 0, 0));\n  commands->bindVertexBuffer(0, *vb0_);\n  commands->bindDepthStencilState(depthStencilState_);\n  commands->bindBuffer(0, ubPerFrame_[frameIndex_].get());\n  commands->bindTexture(0, igl::BindTarget::kFragment, texture0_.get());\n  commands->bindTexture(1, igl::BindTarget::kFragment, texture1_.get());\n  commands->bindSamplerState(0, igl::BindTarget::kFragment, sampler_.get());\n  commands->bindSamplerState(1, igl::BindTarget::kFragment, sampler_.get());\n  // Draw 2 cubes: we use uniform buffer to update matrices\n  commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n  for (uint32_t i = 0; i != kNumCubes; i++) {\n    commands->bindBuffer(1, ubPerObject_[frameIndex_].get(), i * sizeof(UniformsPerObject));\n    commands->drawIndexed(3u * 6u * 2u);\n  }\n  commands->popDebugGroupLabel();\n  {\n    imguiSession_->beginFrame(framebufferDesc_, getPlatform().getDisplayContext().pixelsPerPoint);\n    ImGui::Begin(\"Texture Viewer\", nullptr, ImGuiWindowFlags_AlwaysAutoResize);\n    ImGui::Image(ImTextureID(texture1_.get()), ImVec2(512, 512));\n    ImGui::End();\n    imguiSession_->drawFPS(fps_.getAverageFPS());\n    imguiSession_->endFrame(getPlatform().getDevice(), *commands);\n  }\n  commands->endEncoding();\n\n  buffer->present(surfaceTextures.color);\n\n  commandQueue_->submit(*buffer);\n\n  frameIndex_ = (frameIndex_ + 1) % kNumBufferedFrames;\n}\n\nbool TinyMeshSession::Listener::process(const CharEvent& event) {\n  if (event.character == 't') {\n    session.texture1_.reset();\n    return true;\n  }\n  return false;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/TinyMeshSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/imgui/Session.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/FPSCounter.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass TinyMeshSession : public RenderSession {\n public:\n  explicit TinyMeshSession(std::shared_ptr<Platform> platform);\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n  std::shared_ptr<ITexture> getVulkanNativeDepth();\n\n private:\n  IDevice* device_{};\n  RenderPassDesc renderPass_;\n  FramebufferDesc framebufferDesc_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IRenderPipelineState> renderPipelineStateMesh_;\n  std::shared_ptr<IBuffer> vb0_, ib0_; // buffers for vertices and indices\n  std::vector<std::shared_ptr<IBuffer>> ubPerFrame_, ubPerObject_;\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n  std::shared_ptr<IDepthStencilState> depthStencilState_;\n  std::shared_ptr<ITexture> texture0_, texture1_;\n  std::shared_ptr<ISamplerState> sampler_;\n  uint32_t frameIndex_{0};\n\n  std::unique_ptr<iglu::imgui::Session> imguiSession_;\n\n  struct Listener : public IKeyListener {\n    explicit Listener(TinyMeshSession& session) : session(session) {}\n    bool process(const KeyEvent& event) override {\n      return false;\n    }\n    bool process(const CharEvent& event) override;\n    TinyMeshSession& session;\n  };\n\n  std::shared_ptr<Listener> listener_;\n\n  FPSCounter fps_;\n  double currentTime_ = 0;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/WireframeSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/WireframeSession.h>\n\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nnamespace {\nstruct VertexPosColor {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float4 color;\n};\n\n// A hexagon composed of 6 triangles sharing the center vertex.\n// This provides enough faces to clearly see the wireframe overlay.\n// clang-format off\nVertexPosColor vertexData[] = {\n    // Center\n    {.position = {0.0f, 0.0f, 0.0f}, .color = {0.2f, 0.2f, 0.6f, 1.0f}},\n    // Outer vertices (hexagon)\n    {.position = {0.0f, 0.6f, 0.0f}, .color = {0.4f, 0.1f, 0.5f, 1.0f}},\n    {.position = {0.52f, 0.3f, 0.0f}, .color = {0.5f, 0.2f, 0.4f, 1.0f}},\n    {.position = {0.52f, -0.3f, 0.0f}, .color = {0.3f, 0.3f, 0.6f, 1.0f}},\n    {.position = {0.0f, -0.6f, 0.0f}, .color = {0.4f, 0.1f, 0.5f, 1.0f}},\n    {.position = {-0.52f, -0.3f, 0.0f}, .color = {0.5f, 0.2f, 0.4f, 1.0f}},\n    {.position = {-0.52f, 0.3f, 0.0f}, .color = {0.3f, 0.3f, 0.6f, 1.0f}},\n};\n// clang-format on\n\n// 6 triangles, each sharing center vertex 0\nuint16_t indexData[] = {\n    0,\n    1,\n    2, // triangle 0\n    0,\n    2,\n    3, // triangle 1\n    0,\n    3,\n    4, // triangle 2\n    0,\n    4,\n    5, // triangle 3\n    0,\n    5,\n    6, // triangle 4\n    0,\n    6,\n    1, // triangle 5\n};\n\nconst uint32_t kNumIndices = sizeof(indexData) / sizeof(indexData[0]);\n\nstd::string getVersion() {\n  return {\"#version 100\"};\n}\n\n// ---------------------------------------------------------------------------\n// Solid shaders: output the per-vertex color\n// ---------------------------------------------------------------------------\n\nstd::string getMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n                float4 color;\n              } VertexOut;\n\n              vertex VertexOut vertexShader(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                out.color = vertices[vid].color;\n                return out;\n              }\n\n              fragment float4 fragmentShader(\n                  VertexOut IN [[stage_in]]) {\n                  return IN.color;\n              }\n    )\";\n}\n\nstd::string getOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  vColor = color_in;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                varying vec4 vColor;\n\n                void main() {\n                  gl_FragColor = vColor;\n                })\");\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n                layout(location = 0) out vec4 color;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  color = color_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec4 color;\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = color;\n                }\n                )\";\n}\n\n// ---------------------------------------------------------------------------\n// Wireframe shaders: output a bright green color for wireframe edges\n// ---------------------------------------------------------------------------\n\nstd::string getWireframeMetalShaderSource() {\n  return R\"(\n              using namespace metal;\n\n              typedef struct {\n                float3 position [[attribute(0)]];\n                float4 color [[attribute(1)]];\n              } VertexIn;\n\n              typedef struct {\n                float4 position [[position]];\n              } VertexOut;\n\n              vertex VertexOut vertexShaderWireframe(\n                  uint vid [[vertex_id]], constant VertexIn * vertices [[buffer(1)]]) {\n                VertexOut out;\n                out.position = float4(vertices[vid].position, 1.0);\n                return out;\n              }\n\n              fragment float4 fragmentShaderWireframe(\n                  VertexOut IN [[stage_in]]) {\n                  return float4(0.0, 1.0, 0.2, 1.0);\n              }\n    )\";\n}\n\nstd::string getWireframeOpenGLVertexShaderSource() {\n  return getVersion() + R\"(\n                precision highp float;\n                attribute vec3 position;\n                attribute vec4 color_in;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                })\";\n}\n\nstd::string getWireframeOpenGLFragmentShaderSource() {\n  return getVersion() + std::string(R\"(\n                precision highp float;\n\n                void main() {\n                  gl_FragColor = vec4(0.0, 1.0, 0.2, 1.0);\n                })\");\n}\n\nstd::string getWireframeVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec4 color_in;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                }\n                )\";\n}\n\nstd::string getWireframeVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = vec4(0.0, 1.0, 0.2, 1.0);\n                }\n                )\";\n}\n\n// ---------------------------------------------------------------------------\n// Shader stage creation helpers\n// ---------------------------------------------------------------------------\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(\n        device, getMetalShaderSource().c_str(), \"vertexShader\", \"fragmentShader\", \"\", nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; float4 color : COLOR; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); o.color = v.color; return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; float4 color : COLOR; };\n      float4 main(PSIn i) : SV_TARGET { return i.color; }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\nstd::unique_ptr<IShaderStages> getWireframeShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getWireframeVulkanVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getWireframeVulkanFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  // @fb-only\n    // @fb-only\n    // @fb-only\n  case igl::BackendType::Metal:\n    return igl::ShaderStagesCreator::fromLibraryStringInput(device,\n                                                            getWireframeMetalShaderSource().c_str(),\n                                                            \"vertexShaderWireframe\",\n                                                            \"fragmentShaderWireframe\",\n                                                            \"\",\n                                                            nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device,\n        getWireframeOpenGLVertexShaderSource().c_str(),\n        \"main\",\n        \"\",\n        getWireframeOpenGLFragmentShaderSource().c_str(),\n        \"main\",\n        \"\",\n        nullptr);\n  case igl::BackendType::D3D12: {\n    static const char* kVS = R\"(\n      struct VSIn { float3 position : POSITION; float4 color : COLOR; };\n      struct VSOut { float4 position : SV_POSITION; };\n      VSOut main(VSIn v) {\n        VSOut o; o.position = float4(v.position, 1.0); return o; }\n    )\";\n    static const char* kPS = R\"(\n      struct PSIn { float4 position : SV_POSITION; };\n      float4 main(PSIn i) : SV_TARGET { return float4(0.0, 1.0, 0.2, 1.0); }\n    )\";\n    return igl::ShaderStagesCreator::fromModuleStringInput(\n        device, kVS, \"main\", \"\", kPS, \"main\", \"\", nullptr);\n  }\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n} // namespace\n\nvoid WireframeSession::initialize() noexcept {\n  auto& device = getPlatform().getDevice();\n\n  // Vertex & Index buffer\n  vertexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                                 .data = vertexData,\n                                                 .length = sizeof(vertexData)},\n                                      nullptr);\n  IGL_DEBUG_ASSERT(vertexBuffer_ != nullptr);\n  indexBuffer_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                                .data = indexData,\n                                                .length = sizeof(indexData)},\n                                     nullptr);\n  IGL_DEBUG_ASSERT(indexBuffer_ != nullptr);\n\n  vertexInputState_ = device.createVertexInputState(\n      VertexInputStateDesc{\n          .numAttributes = 2,\n          .attributes =\n              {\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float3,\n                                  .offset = offsetof(VertexPosColor, position),\n                                  .name = \"position\",\n                                  .location = 0},\n                  VertexAttribute{.bufferIndex = 1,\n                                  .format = VertexAttributeFormat::Float4,\n                                  .offset = offsetof(VertexPosColor, color),\n                                  .name = \"color_in\",\n                                  .location = 1},\n              },\n          .numInputBindings = 1,\n          .inputBindings = {{}, {.stride = sizeof(VertexPosColor)}},\n      },\n      nullptr);\n  IGL_DEBUG_ASSERT(vertexInputState_ != nullptr);\n\n  // Solid shaders (per-vertex color output)\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Wireframe shaders (bright green output)\n  wireframeShaderStages_ = getWireframeShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(wireframeShaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  // Depth stencil state\n  depthStencilState_ = device.createDepthStencilState(\n      DepthStencilStateDesc{\n          .compareFunction = igl::CompareFunction::LessEqual,\n          .isDepthWriteEnabled = true,\n      },\n      nullptr);\n\n  renderPass_ = {\n      .colorAttachments =\n          {\n              {\n                  .loadAction = LoadAction::Clear,\n                  .storeAction = StoreAction::Store,\n                  .clearColor = getPreferredClearColor(),\n              },\n          },\n      .depthAttachment =\n          {\n              .loadAction = LoadAction::Clear,\n              .clearDepth = 1.0,\n          },\n  };\n}\n\nvoid WireframeSession::update(SurfaceTextures textures) noexcept {\n  Result ret;\n  if (framebuffer_ == nullptr) {\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(\n        FramebufferDesc{\n            .colorAttachments = {{.texture = textures.color}},\n            .depthAttachment = {.texture = textures.depth},\n            .stencilAttachment = textures.depth && textures.depth->getProperties().hasStencil()\n                                     ? FramebufferDesc::AttachmentDesc{.texture = textures.depth}\n                                     : FramebufferDesc::AttachmentDesc{},\n        },\n        &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(textures);\n  }\n\n  // Solid pipeline: PolygonFillMode::Fill (default)\n  if (solidPipelineState_ == nullptr) {\n    solidPipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = shaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Disabled,\n            .frontFaceWinding = igl::WindingMode::CounterClockwise,\n            .polygonFillMode = igl::PolygonFillMode::Fill,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(solidPipelineState_ != nullptr);\n  }\n\n  // Wireframe pipeline: PolygonFillMode::Line\n  if (wireframePipelineState_ == nullptr) {\n    wireframePipelineState_ = getPlatform().getDevice().createRenderPipeline(\n        RenderPipelineDesc{\n            .vertexInputState = vertexInputState_,\n            .shaderStages = wireframeShaderStages_,\n            .targetDesc =\n                {\n                    .colorAttachments = {{.textureFormat =\n                                              framebuffer_->getColorAttachment(0)->getFormat()}},\n                    .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getFormat(),\n                    .stencilAttachmentFormat =\n                        framebuffer_->getStencilAttachment()\n                            ? framebuffer_->getStencilAttachment()->getFormat()\n                            : igl::TextureFormat::Invalid,\n                },\n            .cullMode = igl::CullMode::Disabled,\n            .frontFaceWinding = igl::WindingMode::CounterClockwise,\n            .polygonFillMode = igl::PolygonFillMode::Line,\n        },\n        nullptr);\n    IGL_DEBUG_ASSERT(wireframePipelineState_ != nullptr);\n  }\n\n  // Command Buffers\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(1, *vertexBuffer_);\n    commands->bindIndexBuffer(*indexBuffer_, IndexFormat::UInt16);\n    commands->bindDepthStencilState(depthStencilState_);\n\n    // Draw 1: Solid fill -- renders the hexagon with per-vertex colors\n    commands->bindRenderPipelineState(solidPipelineState_);\n    commands->drawIndexed(kNumIndices);\n\n    // Draw 2: Wireframe overlay -- renders bright green edges on top\n    commands->bindRenderPipelineState(wireframePipelineState_);\n    commands->drawIndexed(kNumIndices);\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(textures);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/WireframeSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass WireframeSession : public RenderSession {\n public:\n  explicit WireframeSession(std::shared_ptr<Platform> platform) :\n    RenderSession(std::move(platform)) {}\n  void initialize() noexcept override;\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n private:\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IRenderPipelineState> solidPipelineState_;\n  std::shared_ptr<IRenderPipelineState> wireframePipelineState_;\n  std::shared_ptr<IBuffer> vertexBuffer_;\n  std::shared_ptr<IBuffer> indexBuffer_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IShaderStages> wireframeShaderStages_;\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IDepthStencilState> depthStencilState_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/YUVColorSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/renderSessions/YUVColorSession.h>\n\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/fileLoader/FileLoader.h>\n#include <shell/shared/platform/DisplayContext.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/NameHandle.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\n\nstruct VertexPosUv {\n  iglu::simdtypes::float3 position;\n  iglu::simdtypes::float2 uv;\n};\n\nnamespace {\n\nconstexpr VertexPosUv kVertexData[] = {\n    {.position = {-1.f, 1.f, 0.0}, .uv = {0.0, 0.0}},\n    {.position = {1.f, 1.f, 0.0}, .uv = {1.0, 0.0}},\n    {.position = {-1.f, -1.f, 0.0}, .uv = {0.0, 1.0}},\n    {.position = {1.f, -1.f, 0.0}, .uv = {1.0, 1.0}},\n};\nconstexpr uint16_t kIndexData[] = {0, 1, 2, 1, 3, 2};\n\nstd::string getOpenGLVertexShaderSource() {\n  return R\"(\n                #version 300 es\n                precision highp float;\n                in vec3 position;\n                in vec2 uv_in;\n\n                out vec2 uv;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  uv = uv_in; // position.xy * 0.5 + 0.5;\n                })\";\n}\n\nstd::string getOpenGLFragmentShaderSource() {\n  return R\"(\n                #version 300 es\n                #extension GL_EXT_YUV_target : require\n                precision highp float;\n                uniform __samplerExternal2DY2YEXT inputImage;\n\n                in vec2 uv;\n                layout (yuv) out vec4 outColor;\n\n                void main() {\n                  outColor = texture(inputImage, uv);\n                })\";\n}\n\nstd::string getVulkanVertexShaderSource() {\n  return R\"(\n                layout(location = 0) in vec3 position;\n                layout(location = 1) in vec2 uv_in;\n                layout(location = 0) out vec2 uv;\n\n                void main() {\n                  gl_Position = vec4(position, 1.0);\n                  uv = uv_in;\n                }\n                )\";\n}\n\nstd::string getVulkanFragmentShaderSource() {\n  return R\"(\n                layout(location = 0) in vec2 uv;\n                layout(location = 0) out vec4 out_FragColor;\n\n                layout(set = 0, binding = 0) uniform sampler2D in_texture;\n\n                void main() {\n                  out_FragColor = texture(in_texture, uv);\n                }\n                )\";\n}\n\nstd::unique_ptr<IShaderStages> getShaderStagesForBackend(IDevice& device) {\n  switch (device.getBackendType()) {\n  // @fb-only\n  case igl::BackendType::Invalid:\n  case igl::BackendType::Metal:\n  case igl::BackendType::Custom:\n  case igl::BackendType::D3D12: // D3D12 YUV shaders not yet implemented\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  case igl::BackendType::Vulkan:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getVulkanVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getVulkanFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  case igl::BackendType::OpenGL:\n    return igl::ShaderStagesCreator::fromModuleStringInput(device,\n                                                           getOpenGLVertexShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           getOpenGLFragmentShaderSource().c_str(),\n                                                           \"main\",\n                                                           \"\",\n                                                           nullptr);\n  }\n  IGL_UNREACHABLE_RETURN(nullptr)\n}\n\n} // namespace\n\nYUVColorSession::YUVColorSession(std::shared_ptr<Platform> platform) :\n  RenderSession(std::move(platform)) {\n  listener_ = std::make_shared<Listener>(*this);\n  getPlatform().getInputDispatcher().addKeyListener(listener_);\n  getPlatform().getInputDispatcher().addMouseListener(listener_);\n  imguiSession_ = std::make_unique<iglu::imgui::Session>(getPlatform().getDevice(),\n                                                         getPlatform().getInputDispatcher());\n}\n\n// clang-tidy off\nvoid YUVColorSession::initialize() noexcept {\n  // clang-tidy on\n  auto& device = getPlatform().getDevice();\n\n  // Vertex & Index buffer\n  vb0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                        .data = kVertexData,\n                                        .length = sizeof(kVertexData)},\n                             nullptr);\n  IGL_DEBUG_ASSERT(vb0_ != nullptr);\n  ib0_ = device.createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                        .data = kIndexData,\n                                        .length = sizeof(kIndexData)},\n                             nullptr);\n  IGL_DEBUG_ASSERT(ib0_ != nullptr);\n\n  const VertexInputStateDesc inputDesc = {\n      .numAttributes = 2,\n      .attributes =\n          {\n              {\n                  .bufferIndex = 1,\n                  .format = VertexAttributeFormat::Float3,\n                  .offset = offsetof(VertexPosUv, position),\n                  .name = \"position\",\n                  .location = 0,\n              },\n              {\n                  .bufferIndex = 1,\n                  .format = VertexAttributeFormat::Float2,\n                  .offset = offsetof(VertexPosUv, uv),\n                  .name = \"uv_in\",\n                  .location = 1,\n              },\n          },\n      .numInputBindings = 1,\n      .inputBindings =\n          {\n              {},\n              {\n                  .stride = sizeof(VertexPosUv),\n              },\n          },\n  };\n  vertexInput0_ = device.createVertexInputState(inputDesc, nullptr);\n  IGL_DEBUG_ASSERT(vertexInput0_ != nullptr);\n\n  // Samplers & Textures\n\n  auto createYUVDemo =\n      [this](IDevice& device, const char* demoName, TextureFormat yuvFormat, const char* fileName) {\n        constexpr uint32_t width = 1920;\n        constexpr uint32_t height = 1080;\n\n        auto sampler =\n            device.createSamplerState(SamplerStateDesc::newYUV(yuvFormat, \"YUVSampler\"), nullptr);\n        IGL_DEBUG_ASSERT(sampler != nullptr);\n\n        auto& fileLoader = getPlatform().getFileLoader();\n        const auto fileData = fileLoader.loadBinaryData(fileName);\n        IGL_DEBUG_ASSERT(fileData.data && fileData.length, \"Cannot load texture file\");\n\n        const igl::TextureDesc textureDesc = igl::TextureDesc::new2D(\n            yuvFormat, width, height, TextureDesc::TextureUsageBits::Sampled, \"YUV texture\");\n        IGL_DEBUG_ASSERT(width * height + width * height / 2 == fileData.length);\n        auto texture = device.createTexture(textureDesc, nullptr);\n        IGL_DEBUG_ASSERT(texture);\n        texture->upload(TextureRangeDesc{.x = 0, .y = 0, .z = 0, .width = width, .height = height},\n                        fileData.data.get());\n\n        this->yuvFormatDemos_.push_back(YUVFormatDemo{\n            .name = demoName, .sampler = sampler, .texture = texture, .pipelineState = nullptr});\n      };\n\n  createYUVDemo(device, \"YUV 420p\", igl::TextureFormat::YUV_420p, \"output_frame_900.420p.yuv\");\n  createYUVDemo(device, \"YUV NV12\", igl::TextureFormat::YUV_NV12, \"output_frame_900.nv12.yuv\");\n\n  shaderStages_ = getShaderStagesForBackend(device);\n  IGL_DEBUG_ASSERT(shaderStages_ != nullptr);\n\n  // Command queue\n  commandQueue_ = device.createCommandQueue(CommandQueueDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n\n  renderPass_ = {\n      .colorAttachments = {{\n          .loadAction = LoadAction::Clear,\n          .storeAction = StoreAction::Store,\n          .clearColor = getPreferredClearColor(),\n      }},\n      .depthAttachment = {.loadAction = LoadAction::Clear, .clearDepth = 1.0},\n  };\n} // namespace igl::shell\n\nvoid YUVColorSession::update(SurfaceTextures surfaceTextures) noexcept {\n  Result ret;\n  framebufferDesc_.colorAttachments[0].texture = surfaceTextures.color;\n  if (framebuffer_ == nullptr) {\n    IGL_DEBUG_ASSERT(ret.isOk());\n    framebufferDesc_.depthAttachment.texture = surfaceTextures.depth;\n    framebuffer_ = getPlatform().getDevice().createFramebuffer(framebufferDesc_, &ret);\n    IGL_DEBUG_ASSERT(ret.isOk());\n    IGL_DEBUG_ASSERT(framebuffer_ != nullptr);\n  } else {\n    framebuffer_->updateDrawable(surfaceTextures.color);\n  }\n\n  YUVFormatDemo& demo = yuvFormatDemos_[currentDemo_];\n\n  if (!demo.pipelineState) {\n    const RenderPipelineDesc desc = {\n        .vertexInputState = vertexInput0_,\n        .shaderStages = shaderStages_,\n        .targetDesc =\n            {\n                .colorAttachments =\n                    {\n                        {\n                            .textureFormat =\n                                framebuffer_->getColorAttachment(0)->getProperties().format,\n                        },\n                    },\n                .depthAttachmentFormat = framebuffer_->getDepthAttachment()->getProperties().format,\n            },\n        .cullMode = igl::CullMode::Back,\n        .frontFaceWinding = igl::WindingMode::Clockwise,\n        .fragmentUnitSamplerMap = {std::pair<size_t, NameHandle>(0, IGL_NAMEHANDLE(\"inputImage\"))},\n        .immutableSamplers = {demo.sampler}, // Ycbcr sampler\n    };\n    demo.pipelineState = getPlatform().getDevice().createRenderPipeline(desc, nullptr);\n    IGL_DEBUG_ASSERT(demo.pipelineState != nullptr);\n  }\n\n  // Command Buffers\n  auto buffer = commandQueue_->createCommandBuffer(CommandBufferDesc{}, nullptr);\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  auto drawableSurface = framebuffer_->getColorAttachment(0);\n\n  framebuffer_->updateDrawable(drawableSurface);\n\n  // Submit commands\n  const std::shared_ptr<IRenderCommandEncoder> commands =\n      buffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n  IGL_DEBUG_ASSERT(commands != nullptr);\n  if (commands) {\n    commands->bindVertexBuffer(0, *vb0_);\n    commands->bindVertexBuffer(1, *vb0_);\n    commands->bindRenderPipelineState(demo.pipelineState);\n    commands->bindTexture(0, BindTarget::kFragment, demo.texture.get());\n    commands->bindSamplerState(0, BindTarget::kFragment, demo.sampler.get());\n    commands->bindIndexBuffer(*ib0_, IndexFormat::UInt16);\n    commands->drawIndexed(6);\n\n    // draw the YUV format name using ImGui\n    {\n      imguiSession_->beginFrame(framebufferDesc_, getPlatform().getDisplayContext().pixelsPerPoint);\n      constexpr ImGuiWindowFlags flags =\n          ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize |\n          ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing |\n          ImGuiWindowFlags_NoNav | ImGuiWindowFlags_NoMove;\n      ImGui::SetNextWindowPos({15.0f, 15.0f});\n      ImGui::SetNextWindowBgAlpha(0.30f);\n      ImGui::Begin(\"##FormatYUV\", nullptr, flags);\n      ImGui::Text(\"%s\", demo.name);\n      ImGui::Text(\"Press any key to change\");\n      ImGui::End();\n      imguiSession_->endFrame(getPlatform().getDevice(), *commands);\n    }\n\n    commands->endEncoding();\n  }\n\n  IGL_DEBUG_ASSERT(buffer != nullptr);\n  if (shellParams().shouldPresent) {\n    buffer->present(drawableSurface);\n  }\n\n  IGL_DEBUG_ASSERT(commandQueue_ != nullptr);\n  commandQueue_->submit(*buffer);\n  RenderSession::update(surfaceTextures);\n}\n\nvoid YUVColorSession::nextFormatDemo() {\n  currentDemo_ = (currentDemo_ + 1) % yuvFormatDemos_.size();\n}\n\nbool YUVColorSession::Listener::process(const KeyEvent& event) {\n  if (!event.isDown) {\n    session.nextFormatDemo();\n  }\n  return true;\n}\n\nbool YUVColorSession::Listener::process(const MouseButtonEvent& event) {\n  if (!event.isDown) {\n    session.nextFormatDemo();\n  }\n  return true;\n}\n\nbool YUVColorSession::Listener::process(const MouseMotionEvent& /*event*/) {\n  return false;\n}\n\nbool YUVColorSession::Listener::process(const MouseWheelEvent& /*event*/) {\n  return false;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/renderSessions/YUVColorSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <IGLU/imgui/Session.h>\n#include <IGLU/simdtypes/SimdTypes.h>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass YUVColorSession : public RenderSession {\n public:\n  explicit YUVColorSession(std::shared_ptr<Platform> platform);\n  // clang-tidy off\n  void initialize() noexcept override;\n  // clang-tidy on\n  void update(SurfaceTextures surfaceTextures) noexcept override;\n\n  void nextFormatDemo();\n\n private:\n  std::shared_ptr<IVertexInputState> vertexInput0_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IBuffer> vb0_;\n  std::shared_ptr<IBuffer> ib0_;\n  std::shared_ptr<ITexture> depthTexture_;\n  RenderPassDesc renderPass_;\n  FramebufferDesc framebufferDesc_;\n  std::unique_ptr<iglu::imgui::Session> imguiSession_;\n\n  struct YUVFormatDemo {\n    const char* name = \"\";\n    std::shared_ptr<ISamplerState> sampler;\n    std::shared_ptr<ITexture> texture;\n    std::shared_ptr<IRenderPipelineState> pipelineState;\n  };\n\n  std::vector<YUVFormatDemo> yuvFormatDemos_;\n  size_t currentDemo_ = 0;\n\n  struct Listener : public IMouseListener, IKeyListener {\n    explicit Listener(YUVColorSession& session) : session(session) {}\n    bool process(const MouseButtonEvent& event) override;\n    bool process(const MouseMotionEvent& event) override;\n    bool process(const MouseWheelEvent& event) override;\n    bool process(const KeyEvent& event) override;\n    bool process(const CharEvent& event) override {\n      return false;\n    }\n    YUVColorSession& session;\n  };\n\n  std::shared_ptr<Listener> listener_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/resources/images/output_frame_900.420p.txt",
    "content": "The frame #900 from the Big Buck Bunny movie. 1920x1080 420p YUV\n\n> ffmpeg -i bbb_sunflower_1080p_30fps_normal.mp4 -vf \"select=eq(n\\,899)\" -vframes 1 -c:v rawvideo -pix_fmt yuv420p output_frame_900.420p.yuv\n\nhttps://peach.blender.org/about/\n\nLicense Information\n\nThe results of the Peach open movie project has been licensed under the Creative Commons Attribution 3.0 license.\nThis includes all the data we’ve published online and on the DVDs, and all of the contents on this website.\nIf any content on this site is not licensed as such, it will be clearly indicated.\n\nIn short, this means you can freely reuse and distribute this content, also commercially, for as long you provide a proper attribution.\n"
  },
  {
    "path": "shell/resources/images/output_frame_900.420p.yuv",
    "content": "YWWVTTSRQPQRRSSSTSRRRRRRQQQRSSSSRTVXYZ[[[\\\\\\\\\\\\\\\\\\\\[[\\]_abbegjlortvwwwxxyxxyxxxxyz{{{zzyxwtnf^ZXVUUUUVVUSRQONOOOPRTY]]bnsof[RRUWXXWWVSRPPPSUSPOPOOONPRQPSWYXWWVY]_[QHCFLONKLLKJIIHKPRRSTUUSNP_aRKGFNT[``nzm``df^OMTZNLZ\\_mi]luljop^Pd~yx{sofYW[]_`iaSVXXVUWYURQX]ZY^_\\ZUSUUY[VQNOPRTVVYdkkid`flbX]fa]^]\\_febdfd__[]juww|oQIPPMGHIPWYdmdZYUMUeju\\TVVXYPCACZqbXPROIKIK]SCXonk|©TUbNLQMOOPQRTTRRRRQQOQRV|[QONNOOOPQUWTRTWVSSSTZcUHOtqAB[m[MFHJJKIHXiadrulX_QFNONGBBKSRSWMGOLKNPOSPJFHHBCCCFDBBBC@@ABCEGJQQPEBJ`sonlhdcc^UKDBBEE@IL[űfjkd]ZZYTSRQRRTVTQROPY]ZSRUTROMIKOPPNJIIKSUSUX_chq]VYYY_ZPNMQ``RDDehY[YWTSSSTYZSPQSSTVWZ`_WQPRTVVVVUVWTQRRZ[l}|{z~yywx~{wTU`VOOYYTNHKZa`XinQMKIQURLMNOPRRPNMLKKKKLOPQRQRSUTRQPNOPRSOHEEFGGFGGFGGFGHJIU|gS^rhY_mkUHFHLIEBH\\ovvqf_[QLMNNMMLMNNMNOPOOLIFFFEFHKMPRSTTSRQRSSSRSTRPQRQNPVRKLPTWhvpUYVWUQQQQPPPOONLGQZSYWSPNNNMLIGEDGIKMOQOPQNHECCCCCBBAA@BCCHMOMMMJFDCA?ABBBA?>ABFJLMJDA>97:;;:9:879=BED>::::9;>??@CCC@?@CDBCCBBVviG<A>>=<>8BTE>CDBBA@@AB?<=>><<<<=<=>>>>>>><;:::<>?>>A@@A@@A??BGLGBDNxwio{sT=9?@=;:;=AGGFCDFIGE@988644668>BCC?;9999::::::;:98513BNIGF<577;=NB/6888677774457BC?@<989::87788766788778998886558<>???ACCCB@>>>>>@?ABBBBA?=?@??@?>=?FNX]XF1*+-0.=QWdnX>:==<<;9877699:<==@@?><>?@@@@@??><<;<<<>?AA?<=?:??8;;973/,(),,-28;:8776:=@DFFFGD;7520000110122236;@CC@80/246799999::;<:9:;<><=?><=@DEGPRE987768=AB>98:98889::;;9:;<<==;;;::<>?@CHIGGGD?<:989::9:::;>EPNILRWYXUSQSOE?966579710=D@813:<:89;=EB965798:AFGHJIHHGGFHIEADO[hni`XPICBIIKk_>2QvHD>FZwM1LTC=@@AAAGOSv`jneXYa<9BMPI;24:==:753222F[Y?669>>=;:60/=[pT7/4<DCHKF?:6>E<0-06;HXnywcQVhxfF71/-66AE98EI7,+,07:873122027983--2,,SlTUcURQ`dE9@DNfgS<.12440+L}WUB8GJ@;9630.-))5HIC>:<EGIR]N<:?<<JV]c`_ag^fiH0273M|Z5541=cW@>>;=CFDHH<2.5@@<947CC;9;===<<;7433DN<488::45?</1?E@>DHHJMPQQLGHHHF>JlylaZTQVY;'/2349??87BHGFB<;>>=:75454/2>QXMDD@9GJ1*-,./8GOME@===;;;:30575310.//1<B;1CYB.][YXVTSRRQPQRSSSTTSSSSSTTSSTTVVWVWXYZ\\[\\]]]]^^]]]]]\\\\]_abccdegimpstvvvwwwwwxwwwxyyz|{zzyxxvrme]YWVVVVWVVUTRRPPOOOPSY^agosrl`TRUVXXWWVTSRQPOQVXUONONNPPMNQUXWVVVZ]^\\WQLKLKKJKKJIHHGHMRSTVWXURS_lpaPQOITchurZX^`jiXSW[USwjnv^cyshmm[Ukxqf[Z]^`af]UYYXWWWYVSQW^[XZ[_]VSSW[ZWSQQQRSUTU_ijheafkd]bkd^__]`gfbcdb_`Z]jsvwwcLKOKGLXq|}vlbQVddxqZW\\YZXLCBAZraMIOOMMMKGAXwnƻRWYKLPNPPQQRTTRRRRRRPPOPwbSONNOOOOPU[XSSWVRPQPNHHNhv[@BCWaTKHJJJJGESbagnonorkejm~q`OQUTWSSURRQQORNIGHHBCDFFDBBCC@@@ACEGJNNNGBF\\ssnlhedc^VLEBBFF>IWV~jmib]YYYXTRRQQSUVTPPNOVYWRQSRPOMJKNQPNKIIKSVSTVY[WRcobZYZ\\^ZV[`kfSD@aYWYUTTSUUXZURRSSTVWZbc\\UQRSTTTTUUWTQRQVWdv}}{v{}ux{|{u{UjlUMSZZTLEK]aVf~|eJILLTVPJMPOPSUTRPNNMKJJLNQSRRTVTSQOMNNNOOJEDFHHHGFGGCGG;JziSMY`ZedIEILLKG<?Schjjjh\\TSRRPNMLKKJKKLLLLJJHEDFHLNPSSTTSRQRSSSRSTRPQRPNQVRLMPRTarqZZTTSQQQQPPPOONLL\\_PZXSPONNMLIGEDHJLNOPOPPKGECCCCCBBAA@BCCHMOMMMJFDCA?ABBBA?>ABFJLMJDA>97:;;:9:879=BED>::::9;>??@CCC@?@CDBCCBBVviG<A>>=<>8BTE>CDBBA@@AB?<=>><<<<=<=>>>>>>>=<<<<?@AAAAABCCCCBBDEHBAGLmulunQ?>BCCBA><;=CFFGKOQRQLF?935989>IKNMG@===<??>??>><:8513BNIGF<577;@QL35866777876557>@EB:8779877788766677678999896548<>???ACCCB@>>>>>>?ABBBBA?=?@??>=<<:=CIQ]nlI<Oe^jrw|kJ<<=<<<;9776699:<==@@?>=>?@@@@@??><=;<<<>?AA?=@@9;<7:;974113578998886678<?ADFFFGD;7520000110122236;@CC@80/445799999:::;:9:;<=<=?>;9<CEHPPB877768=AB=98:98889::;;9:;;;==<;;:;=?@BDHIGGGEA=;989::::::;<CNMILRWYXVUUSMD<86656981/;C@824:<:999=EC956798:?DFHIHHHGFFHIE@AJWfoi`XPHA@KNADecGEvc;9>LfãN9E?=?=KiZFEPq~|iIW{^UV7@HNSK<7:;<;9753369?XvhH??DE@?>94.5GUJ7/349=BDDEB>EB538<85<K_rrXQ^P3-+,*165953LWF602<IJ>4100179=?=9411)0WlXP`\\MH_cF<AHQ\\\\P8-356879MgNVG<GH=9861..0,*<MG<:8:?ENX[K=;>AJYbcb^\\_hgkh[G=ON8>=7;<::;?@?><8>GJG?8678=?>;78=945:>;87883243DM7/545625=8,,9@?BIMMNNORPKHHHE?>Yxte\\TONQXF-/2238<944=EHGD?;8877:>IOF8139BFFGGFSP6,,,./<GHID>;<<:997677540../135:??<DA,$``][YWUSRRRQRRSSSTUTTUTUVVUVVVWYYYZ[[[\\\\\\]]^^^^^^^]]]]_`aa``aadioqstuuuvvuuuutuwxxyzzzzzyxvsqmf^XWWVWWXXYZ[ZYXVUTSTX]ejosspgZSTVXXWXXWWWXTMKT_b[RNNOQRMKNORQSVWVWXY\\_^\\XTRPMKIIIIFCGNPSXZZYXWZewtnvdJSn|t]WYcwwf``Z^Uqqgv[p{cad\\ky~wj^^`_aa`^^][[[ZZZWURV^\\XUVfj]TQXYQQTTSQQQSRQT_ijgdfffinpjb`_^djgc`_```[]ktvthQHKNORWjvrqic`gaU[eY^je_N=@D>XpYJGHKOMLMMIx}wvǧYPYEINMOPRQQRSTRRRRSSRQOOnuXLMLLLMMLTeh\\UWYZ]YNML`kgUGEEFIFIQMMQNOQKRT\\rmitpgjnmf{rGBKQU]ZYYWRNOMJGFGEEFFDCBBDD@@AACDEFFEGKD=Lp}qlhgea]WLCAEGADc[cmkda][YYWVRONPTTRQSRNNLIMPMKNNNMNSYVPPNMLJJQUOQT[]ZSPXbZX[___^^^_TEERc`bXYZUTTUVVWXTQRTTTUWZdkh`XVVUTQPQSSSPNNMLOXix{~}}tz~u~aho^SRZ][SJCNZg]lu^cZ^gTRVMKNNMNSZ\\[ZXVQKIIJLOQTVWUSQPNKJKKKKIFEEFGGFGGHHFOjhUNMYbprPGKORVWJ?@JSZft}r\\YYVTSQMIGGHFFDABHMKEEGJNOQSRRRRQQQQQQPQQQPONMNRTRSSSRPObogaNNNPQPOOOONNNIVtcK[XSPOMKKJIGEGKNOOOOOPNCAFGDDDDDDCCBADFHLMMLLHDBBA?AAAA??>>=?CHLNMHB<9:::999989;@GG>9999:=@@?>@AAA@@BDCCC@?Lh^=<><;;79?N><=A?@??@@A@><;;;:;;<;<=???@AA?>>=>>ABCEDBACDEDDDDCDG@@JMXrpgO@ACDDGKNKEB@DJMPTTUSPNLFCEEEBBCFCTWMD@BCDCBCDDDEDCA>79S[KIB96=>@ACG=7876987876677868756557889788765688657899897458<>@@>?ABAB@>=<<;;=>?AB??><===<====>?><9;Hgsx}}xP7<?====;9866679:;;=?>>>>>>?????@?@>=;<<<>?@@==IB6997789::9899<==:876665:AEEEFFGF?>?4.0110110111210003>NSLC@:6566789::9::9;<<<<<>?6/5AELRJ9685558=@?:888887899::977879;=<;97<ABCFHHHIHFGHGB<999:<;::;:<GKJJOSWZXXYPE?547766881.6=;7679;9997<HD9678888;@CDFGGHGFFFGD?<=IarlbYOG??LN:+5cqwvG89;G_sΕ23????R``I9NaP@<3CxbOJF@EXZN@=@>>;98626AD9;tvQGEIJC=<9/,48:;4236;::GRD>B?<CA=;768<QfI/314.+-05;B62Zj^D7<O]XC11336BLLIEHD6,)7Sjxd\\aI;LP@68HLELM@BA88<GUVlu@>NIBE?6674/-/343@OJ68=81=PUG=?HQ\\fi`RIPUU[_ehfZSz~C%18=@A?99@FG?88@C=315:::8632573019?<9776/.12FO3+32111354//4:=GSVPKLOSPHED>@GJYd\\ZTMTRDGO:/212570+06?F@<9648;;@NZ\\TJ@:4.3>JNLPM?3---/6:9BG<:>?===;=?;73/,-0355106:7,),baa^\\ZWUTSRSSRRRSTTUUUVVVWWWXYZZ[[[\\]\\\\\\\\]]]^_____^]\\\\\\\\\\\\\\[Z]aflooqsssssrqqrrrtvwxyyyyyyxwuqnlg^YWVVVWXZ\\^_^]\\[ZWTSUZblpqplbVTVVVVWYZZ\\^^ZTV]dfaXOLNSRNNLMNOTTPOQSW\\befgda]ZXSRSQKHHINW\\^]ZWWTUbr}|pp|~ncv{gfld^ZPbi`xyhujZ\\jzn[\\fa]`grl]^_^]\\[XVTW]]YXX^f\\RTRSPNQSSQRQQRSOTelihghlstojb[[bjlida`a__^]euraTLRV^gjv}p^Z\\_bjl[LNVSQ_dXG;BIDN\\RHITTNLMOMO|έnHUSLNNOPQRRSRQSSRRSPRdsz|]IKLJJJKKQ`mh\\^kyyWSymmjTFHKJEGK]nUMaZWakpaRcqjsvsqutqm~sKCRZYXXVTNLOLKJFDDKSLECABCDAACCDEFFGHEGNE?[yvjgge^ZWLBBF@Ae[Xzhf]Y\\ZZZYXUROJNTZWQS[`PTf_bh`VVVOYk|hNRQPNLJMOILW`]ZXUUWUX\\]]abb_\\WSSWUPPTXVSTTTTTUXVSSTTTTVV\\cc]X^aec\\WUTSRQPPOQPMXoz|~qsy~}}~v{eUsaR[YWZXPJIK`^`RSr{iMKQMKGKOMRZ^^__\\WNHIJJMPUWURQOLKIGHJJJHFEDEFFEFHHEOuiUPLXpy}t\\LINPTZTFABFJVl`QXYVUSPLNPPNMJC@DEILMLMOOQRQQQPPONPOOPPPPPOLKLPRUZ[ZYWQV_cgQPOOPMLMMMKJHCXjSPYWRNMLKKJJIJNOOOPONNPQKEBFFFFFEEDCAADGIJLMMIEB@???>?@@?==>>>?@AEKKGC@=;<;:9989:=CHB;889<>=?=9<BCDDCABCDDA?@IK<=>??=?<RFB@<9:AFMLGA?<:98:=?@=<;<=?AACB@??>?@BDDEDDCCCCCDEDCEEFEGGKl}rcJ@CDCCBCIOPQQOORTUQPNLKJD<EGED@=<;=AKTG===?????@ABBBAA=:<BD?835>??=767877899787557764325677888976655566765689998868:<>@@?<=??>=;::9;<<;;=>=;<<;;<>===?@@?@AACHRn~|{yyvF4?>;>=;;976667899:;<<<<<==???AA@@@><;;;<=>><:<F=3DD:87;?@?>=<>><:::9855<EEEDDDC@>FH;2111011011111110.0=R]WQKC:43567899::9;==<<<==88CFGPSG<;843589<<878987678899977767:;::846>@BEEGIJJHHKPME>;;<>=::;;9?JMIINV[ULHB>;4477876544589::::::899<GC99::977;ADCDFGGFEEFGC@?=D]qof\\PD>ANJ<=79cQ:@CF_~߷[6HDACD;;HILF7-02F|jIFH6<PPGCCCB???:639EG:3KdhXF?IPC?>70,19>>:7:>>:;LU<026<@>=?@=50@``˪O(/6,,288Bop7OmoWCEaqY;/5=;:KaYHGQM;,0:@crSMH913/)/BA:EPLMI?<=BNPWa>4;===855653234779FA2AC739B@45BYhh^L9/2BLO]dca]XXtxP9688<?DFEGHA:5651--/59;8422342/5CEKROHA:429LN9487543105<==>AGMONIFEDCEOPFGUSFKYZI@JI=1:;022255/18:>B?8559?ECAGJHIPQPSC05GPLHFIF:56538CIA57>><;<;<==<92+.11698/%05*'+`a``^\\ZWVUTTTTRRRRSSTUUVVWYZZZ[\\]\\]]]]\\\\\\]]____``__]\\ZZYXXXXWY^beffgjllllkjkmoprtvwxxxvuusrquklkhaYVVUVVWXXXXXWVVTSPOR^horrpgXSUTTSTWWXZ[_bba``djf[SRTTRPMLJKPQNNOOQRX]__^]\\]ZTV]_]TJEKU[\\ZXWXXVY^cpz{ycgmlcff`b`dvp[\\vtXYkhaelqi^^`__^\\ZXVX\\\\ZYYWVUPNPQPPQTUTTRRSSMM]hjkntvuqmg][clnkjheba__`^^fcWT[emxztpiha]ZY[`cef`QGJLGNVRMNVTLGHHIKQRQPNOMYڷPRVQMMOQSSSSTSQSSRTSNbķpWNKKLJKMOZgecpx^FX{[UVLGGGGGOkpWX\\QOhlgcSZTPduroousm}MBLKJIIGFINKHIGGOOVVHB@?AA@AAACFIIJJGJRN<En|mgid]ZVOHD??\\cSp^`XTUTRSSTVVWQIFLjyjYf}Os^\\[[j~hSVTRPNKJKIKOXVRPRROSY^]]aehihhbZMOSTUVTSRRSSRSWVUUUTTSTQV]ZVV^dmng`[ZZYZ[[XWVPScx~qmnquytz|t{rJ^kXdshTTUNLHIy_cYOilOGJLOMQ_XIQY\\^__^YQKKLKLPSSPOMJIHFDDDEHHECCCEFEGHGMYt~z~kZSMUp}ywrcPIKLLOOGDCFDHWnnMKUUUSMJPTVVVVSQKIIMPPQQPPPPPPPPONPPPPPPOONNMLPW\\__]ZYUQT[iYTRPNJJKKKILAJnlLQTUQNMLKKJJORROOOPOMNQVXRKGGHHGGGGHIIHHHJJLLFCA?>>==<===<<>??><::@FFDCA?><:9989:;AGF=989=>;<<>BB?AFJHD??CB@=9;<??BDGS]OKBA;;AJNNHA:679;=AIIG=8877<@@@@>>>???ACDDDDCAAACCDCCCCIIBBG]uyiK>DFCBCB@CEHMRXXURMIIIJMJ;3>?>=<=;9989FK<889;:789878899;<63542237742213667899776567665467798886754433334444688998789:<>?@?<;<<:97778:<<:99;;9::;<=>>>???=?BGGB907Uw{y~hC<@<<=<::8777877799:::;:BA?=@>AA@@>==;;;;;<<;;>@92<FE@=>??@@??>><>A?<978>BEDCBBA@GLMJ?52110012221233200/8O]\\VSLC;5446789999;;<<==;@IIHJNNIHB96557899879;;96568999888647::972/3=CBEIIIJJIJMMKE?<=>=<;;;78CNJDHSVG;8656655677778:<?BBB?<98789;A@:;=;9879>BCCDFFEEDGHC@@>AUknhaQC>CLF:>?7Fxf?I_aUeC?KEB?:3\\zY94347WtOJG;9BFCD>:>?B@988>GI<EFNLMMMOWJ857:ANLA;===<AJJ<36:?AENSTK738P_US%0-.4<<>p??h|kPSqyR4/?TG8PoU;BORI=65<TXN?7=7-.225??>FNE==<8/0:>J_O915:<;:975566887:C=5?@?@;4337BOPHC;06GOPS\\fb]\\]XYsrD1129?DLKGB@<7420/..27;=>@;.,2CY[QU``VJHD>FPJA?<9742217DKHGFHIJT_XJFCVjaL@EMN[bR9.0152151121355?KFACC=56<ABB@<74>NR[_MKA;IFBELOD77A@=DB:68=<<;8402<A<3+/433NulWNJ4\"+Y[]^_]ZXWVUUTTSRRRRSSUVUVWZ[]]^^__^^^^]]]^_``````__^\\[ZZYXWVWWY\\^]]^`aaaa`acgjknprtutsokigddjohhhgbZXWUUUUUTSSSSRSSRRU\\eputsiYSTSRQQSRRRSUWZZYY\\_`\\XVUTTSQQKJQROPOPOMPRQNMLMPNMQV]cbWJIOSSQRSTUZ]\\Z\\`kv|yyoU^_]`drrdd]_hSWpg`nqolg`^_]_^__]\\[XX[[\\]ZZXYXJQdUMPNWZVVTVVML[fiorsqkgfa^fqurommjfa___`^YW]lutuvso{jtpjhfb_acdhllhkwo[RS\\edRFIHHHILRTONRO]ǒWRXRQOPRSSTUTUSQSRRVOWƴ^LKLOPRSX^`p~mOKTJVk`VXNGGFEAKftu`EJYZWR[tjULBEOQSQZa]Ys}O@DGHHGGILJIHIZ}gFPPD?>???BCBBGJIHIIKLJAG_urijf`\\YTLEIYfcteRTSPRSPNLLMOQYUKCR{|dfzK䛕c\\TWkom]XYWUSPNKJIGIMSPFEKOOOZ`Z[`cdgpvrdWUTTUVTSRSRPPTWVVUVTSRSPS[ZWV[`ced_\\]abcc`\\ZWRTRitlimoortu{tPOibRe_SQLKATb_kiWLKJLKMMTrtSFLTZ_a_\\YTNLLKLNPOMMKJHGECCACEIFBBBCEEECDKUhyz~|vh\\UOQ`syvsdPHIIIIIFDEGFDFM_o[EJRTRKGHJLNPQTTSSNMNNPQPPQPPPPPPQPPPOOOQQPRQLQ]ac`]ZYWTQV\\XSQRMHIJIIIO@okKLJPPNNKIHKRSTROOPQPOPQSTTURJJKKLMNPPMHFGHGHIFCA??><;:<<<<<>??>?=::ADBABB?<:9999:;?DD?999:;;=?BCEE@;;AKQOD>=<:9<>?<COXSJH@<:?FIC;97877:=?B><:978779=?>=<=>>>>?ADDDDA@AAAACDDDBFFDEE\\}xV@DIFCBBBA@ABDIQ[\\UMGHHKOJ;9:9::;<;<:8633<;69<;98655543356666432454345666777986545677666<:8::876654333212222466665479::;=??><::9755579;:99899999;<=>>?@AAABA=:522//Ebr}xR=A@<<=<::999877688889:;:PMM7@?@@@?==<::;;;<;;<>=?>;CJMNFA><;<==ACCC@;999@DEDBAAAFKKOPD732001112112232365/7S\\YYYVL<3357888779;<<===BFDFIJHKKC=856899767:==;75689;:887447::8837G^T<DIHJJIIIIJJHC><=<><:;:8;DIDEMK:37755656888:;>ACFHGEA;876679=<:;<;9889;>ACEEEFGFHGB?@><KemhaRC@DIC::=:8LqQN{w{}ofQ`xI=RIB><;X^:765Fs}[UYD5<D?9-+7=;<ABBEMKVbȒHm};?c`A:DA>DK?8889=BDAFMRQOMNYgm^OOCL[bf~304348=:Ic>6]iHbxk[73JSJNYmE08DQZO94>JH;11488;CD;:AFJI?::657;48@MVI<@FFDB>84235788;EE=>GIC9115895,,=PX\\jrk`Qahd`a[UUQF7//1458GNJEB=87642011148AGC6.Hsy\\PTUQIJJIJLHDD?9:82/..4BKLJHNUa{z`X]u\\6/8AL^Z@352.17741020-18HUNDEB:57=BBA?93/7CHUP;OM6<@EJIC8.6GA32579:==??81,.;B;101551Wp:)STVX\\\\[YWVVUTTTRRRRSTVWVWX[]_`aaaa`__`___`aaba```__^\\[[[ZYXWUVWXYZZZZZYXXYY\\_cefgijiihc^[ZWUYiifefgc[WVUTTTSRRRRRRSTUWZ`hpuujYSSSQPPPPONNNNMMMMNPONPRTTSSRTQNQRQQQRQPQQPMLLLLMMLMQ[ef[PLLLMNPPQUZ]_]YZbhjgggWbqSVXUW^krpof[bzaRRb{yipxsg`]\\]\\]^__^^][WST^b\\WZ\\d_RssOOR^aUTU_^OO^dehd_][Z[Z^kqprvvrmhc____ZZbhqvtuqjgb^hqqpnkkecbYdsuymVWeeM>ENKIHJLPPJMTRYv}vHTUQSRRSSSTTTWTNPPSVLmɩuTLMOPTYTVmsNHTTOQ[_VVOIFFKE6Tl___FWvaYRPZNMKHJKMNLLOHHu_EFOPPNOPMLJL[~CEME@?@A?IWWQPMIHHIHFEHHKbqomifedXLSgjdojVMKJHGHRTNIGHMQQUMIjogjHz|o[dZXcka[YXWUTQNLKIHIJNF>CHLLNamaY\\_a`dmorm`WRSTRQQQQPOTZXWVVUUTVVVXZXVZ^`ba][]acba_ZXVTWQTryomkmnnpvutrSZaaZ[lPMHOVmlT]a]QGHNMLNMYr`EFIOYac^[YTNLLKLMNNLKJIHGFEDCBDGEBABDHID@IKBWvyu|{wrf[UONTbpuscOGIHHIIFDFFEDEDCXcNEKOQTSNLJIGHKMOPPOOOOPPPQPPPPQOLKKNPPQV[_XPSXZ[ZZZZZYZUNNOOSTOHHIIIHEIj^JJEJMMJFIQWZUUSPPQQQPRTUUSSQONORRQNJFCBDEEFFGFDBAA>;:9;====>>==?>;<?AAABC@>::;;;<;=@@@<:;<>@A?<@MSKB==CRddTF?><:>@@FPPKH@<;<?=;76669<=<;;;889:8:;;;==<:9;<==>?@AAAA@@@BAACDDCBCCEFE^yeCAIGEEDDCBCDDEFHUcd[IJKMPL=:999:<;;;<>ACFGIJLNMKJFFEDA?><855556666555676777776654556764=D:8<;85666444344222356644326799;====;::96556679898999999:;<=>>?AA@>:633358436>jd=<A>=><:;:9975554567:<=>FL`M:??>>=<;:9:;<;;;<=>?><<AHPSMIE@9>CCCFGB<;;99@CBA?@CEILNPI<764122/033112222563/;LZXV\\WA235678989;;;;==>=?DFHKIHD>:767888668<>?;9:99:<::95259:9<<0KyH>GGIIHHIIHGHFA>===<;;:966EOIC>8777667779;=?BGJJJHE?=;988879=:8;;;98999;<@DEEHJJGC>=>=;G^jh^PCADC@<<<966:Qxo[xv]JJLTbigNDNMHAMutfY<889RxiTO;1:B7.2:B;.9MLHOSL^a9^^CGNbK@IG9185468:>@??IWZTS_ky|xhjiirzj`U:,;<8;99;71MpT8UaL\\@=QA@\\XZ=56=M\\YJ>@W^B206?CBEB50<FKLA658Pf_918AHDFMONMIA95312568<A@;BKG>:9;<:60,.6Poy~[FWl_SVYXQ9+-..022.:PUL>654320252-.2;EHDNliPJMLGFHMNGBCC>:?F@:024>NVVRTXnc]iJ1=?;FTJ68FB516831035311;HGDD?87:>BFB=;83198<FGVYC41@MF4)-?F:/047:;==@C>416:?;27;=<>]h>QRRSVYYYYXWVTTTSRRRSUVWXXZ\\_`abcbbbaa`aa`bbcccb`a`__][[[ZZYXVVWWXXYXXWVUTUVWYZ\\\\\\\\\\\\ZZYVUUTST\\jfcced_YVUUTTTSSSSSSSTUUYYW]lukYRSSQPQPNNNMMNMLLLLMMMORVWTTTSTTRSTTUTUVVUTRPOMMMMMLLQ\\gf_WMFHLMMNOOT[]\\^_][XWVQ\\qk]ZZWVY\\cnogd`[]ZRTtpmos}q[X^]\\]\\\\]^_^\\YWOO]b]Y[`lsbkfkw]^ZU\\kcORa`[YUTUTTVW\\acafqwphgc`_^^agorrtqsqnqmfdfghjmoh`XUjqr~iW`^OB?]^GIIJKLMJMRTUf}{quWHTVTUTSSSSTUUXWPLRZVXϓy`OLMMRRMdvaZVPSVSW[UUPKH?_xGImYV|lSjmgWHHGDGLNMMMMLKKJGjeHGKMKOSMNKOO\\dJLJEA@@A>Ldh[XRHGIGGGGGHGQgrsonoleaikca^OIHIJMICPYNHFFKOMOIRwxnbQ|kldTtqNT^]VWWVTSQOLJHHHJGDCDHKLlsYY]_^^blrsiYPSRQPQPQPPU]VRjdZ[YXYWUTUWZ]]^^]]]^_`cge`ZXZ]TZo|~|oklllmszrpvVOUUXWSjhKJLWkziUNQRRNLPNMPPQ]\\GK\\XPUab`]WQNMLLLLLLJJHGFGGEEEDGGGDCCAEIGFOL>Llvrv}~yvpcYTOOOSbtuaMFGHHIGEDEFDEGJDF\\ZIFIKTa[RPMBAFKKLLMNNNLJIIKKNMGMWU[\\[YYdhiVM][QSTVYZ\\\\]^VLLOUVOJJIIIJATK[NIHFFIKEJT_`[XXURQRPPRW]^YSQPPSTQMIFC@@BCDGHHFFDCCCA<::<==<=>><;<<;;;<@CDDA><<<=>=;=??@@>>?AAA?;=FLKIJJFDTnwhNIHIMPOLHB@@=;<?@?@@===>?B@=;;;;;;::<<;;;;98:;<<==>>>>==@@BDCBCA?@CCDCERZL?DGEEEEFEDGIJLIDIYjkXLJMPNE@>FID><@FINQQQQQRSVZ\\[\\\\\\ZWTSVK;4356656665556777787654454546ED69=;64577654444332354444246789<===;:::97666567777999;;;<<==>==>=;9754557:<=94>jrC5@=<=;:;::8767718==<>=>@?U^<>===;:99:<=====<>???=;>CHMNMLLLLMJCAEB<==<;?>=>@BFHJNSM?8876431.131111221464.+8OXW[YC223468999:;;;===<AGHHKKIC;767778867;@A@:8>@=;::<;7546;>>8DTvjEBEGGGFGGGFGFB@@?=<;;;;:7=GB978877667777;BEGJMMKMLB<==;=>=>@=:<;:9899997:?CEHJHA<;;<=;?Rdf\\MCBB>;;;<:<;25JbqR36B[vyaTNMQQEKeM@59@BKkpI742;?6=Wp_@2=O;E_TFHF'ZuB\\jo_VOBI^J/1269==@C?>DKE@LTThub]_qj~HUD4S_<33220/?WB18=9C?IL49IAA8988EXf^CPgZI;3AWWC76417BMUC.-4EUM8/7C>9FNOTTJA>@?:7799<CEBCE>9<DGCA@=854<TuzGEH[J8AOUTF6-++-/2-.IZJ5//01/,055248?GKP|}rounWIPRKFEKVSHHF:8BMWYVYZ[^__^^Wcva\\b{mCAQPOTK:5>G@305951028>?72;ABC@;8978>@>>?;14=KVRPRQF4+6@3'0>B:58:98679DLHBCFBB>;GJINQ_}xMRSSSUWYXXXXVUTTSRRRRTVWXY[]_`abbcbbaabaabcdeedcbba`_^][[ZZYXWWWXXXWXWVVUTTUUVVVVVVVVTSTTUUVVVV^fd__`^YWVUUUUUUUUVUUTRSVUQQWbbXRTTTSQQOOOMNPOOPQQONOPSWYXXWXXXWUVWWVXYYWVTRPOONNMNNNSZ]^]YRMHINNMMNPTX\\_bccabdda]X[]ZWXWZabZV\\ZVXQYy}twpWV_`__ZWY[[UQSX[XZ^__dmqsrg||VS]gkf\\Yad[TSVYYWVWY\\]]^aehgdeda^^^fqrsysoj^ltnkkkkli^RS]fiu~f_iUEIKkmIHIJKLLLLNUY_yvps{yLSVVVUUUTTSTVVWXRLT[RjĿՉTpVMKLMEMltihg[QSVTUWVVQNG=chKeb]ssThdIFFGECBEILLLLIJKC@\\`GBBELRLMHEHHLMVMLFDCA=@Ra[ZVHGIGGGGGHHIVkwxttwxcWURJHMNNMWNBLZSJHHGFIIGZkjgc\\icLbzncmZIlvTJWUSWVUTTSQMJHGGGHFDBFHMoyXY]]\\\\^glrqYMQRPPQPPRQU]WJZj_\\[TUVPKLTY\\\\\\\\\\]]][[fswqgb_b`PKcvojlmlopmmx{ECGGHHGNWPHKNQYXIGGHQWQMPMNQNZcNKgo[MP]hgaWPNLKLLKKJIIHHHHHGGGGGHHGGFDDGKOMGACUjoqw{xrl`UQONONWpxbLDEIHFEDDEEEEFHGDQ^OEDDNUUQQPBADIIHJKJLMLF???@DFOk~{vfZVYgf`VZ\\RLPSY\\[]]]_^UPQVXPJKKJIJEAJAEGGGDGIK\\b`^]YXWTQQNMPYc`XTQQQOMIGFFEEDCADIJHFFDDDDCA@>>>>==?><<<<;:::=DED@>====?><<>@?>>?ABB?=;<<<=?DMSPJRnoXPTVXUGA=;<<?@?>AFJHC??@AAB@?@?><=><;;;::9779;;;<=<<=<;9>EHFDBA?==ABBACDDDDDDCDFFFEDGIJJGDBEUljUGJOMHC>CFB>=?AAAA@???>@DKTY[\\]\\\\[[^]L7/453345566666778:865444344:C;5:>:44577653455543444444345778:<=<:::::866665555579:=>=>>?@?><<;:766568:<==CC8<?;=;:;<;;;;<<=?CB@HGD@?=>?9A@<=;::99;;;<=====<=??><;<=BKOMPTSOGFDDDA=>==??9:>IIHIKPJ@:8879646972122122157310/;R[\\[D1235779:98:<<;<<>ACFIIKLI@7578788989?CB=7<EE>99<=:966<B9A~v^Z<EEEEFFGFFFEDCB@><;<<=<:876776666555556<DHGJMNMPRI=<=<?BA@@>><;:679997544;CD@=9799:=<8CZbZKDC>978:;;;<<;89gn:A;>QYSRYTMOL;;evJA@13GH8M]@<=7=:BgojW861JfWC>N<Tg35Dho\\VGEUiWA>88;>@CFEA@>949;46EBFCLFENVhSM<<ezA/-+1/.6D;0//0-;OB-47333575:SfWD_\\GNC@Ye]D01:<<BJF:,./*+-469A@AIKP[RD?DLLD;8<;>O\\`_THCEMLFGMLC>=97VY6C>@:49BFIC70--.0440ATD.,-.01343579=GJJc~jikcUQQURNFDJTTKOV[cWMORJFD?@WmukX_gd_TWYKFU_`^J77<<3013981.06<BGGIID@>98<@>99?CGHEDTaRA@BHPR?/6<416>=8780-3-.?KSPLPM?7E_ZGHR]dp^TUVVVWXXXXWVUTSSSRRRSUVWZ[]^_`acccccbccbceefffdccba_^]\\[ZYYXWWWWWWVWWVVVVVVVUVUUUUUUUTTTTUUUVUU\\e`[[[ZXWVUTTTTTTSSSQQRSRSQLKPRRTUUUTOHHIKJKNNOPPONOQSVYZZ[\\[ZYXY[[Z[\\\\\\YUSQPPPOONOPNJKPX`d]RKIJKLLMOSVYagebchif_a`V[][_`_]WRV\\^\\WZfsz~}{vszu`[`c`eottpdWPLUhdWVYYallounxyn]Rerg`eih`[\\^]Z]a][^eimmd]abcec_^]bpuvs`^[U^xz}{ywogaXQV[[^asughYYTD\\qmSEKJIKLKKLUXdqzwdMQYWVUVVVUUUVVVUXWQTXOvĿ׎JvcPJMLM[agsm^VTTVTUTXYSRFD`zsVW`]k\\LNGHGFDDDDGJILKIIIIR^cqcE;CMSRMJHGNRRYKVYCADC9@VWXWKFGGGFFFFHGNgxzwxqRDDJJMPOOQQNDJ[[NIGEBNNFgwQ@CA\\[M`\\RgbTT]iXQURRVVUSSSQMIHFFFFGCBFEOtfRX\\\\Z\\bcbmlULPQPPQPOPPRX]_dg]WTOPRNKKOTXYYZ[Z\\]ZVbrzxpkeb`UHJ]rrikmlp|lklypHFBDJEA??DIF@?>=AGHIOSMMNMNMQa[QnmMIL[nmeWMMLKKJIIIIHHHIIIHIKJHHFGGGFGINSKDCACTfowywpi^SPNLMLRjvdLBDIIFDBCCCDEEEECHWRFEEIGJKNNGHBEFFFGGIMNIA=<A=Bqy^JBCJZb^ceWNQPQ[][[ZZY[XSSWZRLKKJIJEDDEFFGFFFGZhd`_^[YWSPKHJOQ[_VUSQOJGGGGFGGEDBCHJIFDDCDDDCCB@@@>>?=<<<<;;;:=DDAA@>=<;<;:9:;;<=?@A@>=<>>;879?HUULS_[SSQKC<;;<=>@A@==BFFC@?@@@@BBB@?===<<<::::8789::;<<<;:9:=GMKJGB=;<?CBAA@@DFDCCDDDDECCDDDBCC?BN\\\\PLKGCA???@?=>??@ABA??@ABAFPY[XWVWWVXR=1454566666666679;863453355:;47:>9235776443555544444433579::9:;:<<;;<:76566666668<??>???@@=;;;:76668::<<<@C:37=<:;<<<;;;;=?BDFJGB?@?>>>??><<<==<=====<<<=<<=>>>=<<;ALQRRLID?@CBA?>>>>B@><?GJKMQNB73::557:D?/.01001114620320AU\\\\K4036<;9:9::<<<<<>>9=GKJLMF:678878977?DBA:7CJE>:<><<<:>=;kmqsEBDDDFGGGFFFEGD??>==<=<:526866655556668?FIILNNPPMF=<<=ADB?===;:97788864203<=7423789:<8:MZWLD@;8789:9:<>A>8Bk?<B9;B@BPRFMO>37;707KI8R}n`tfHCDDBCFcnT0,KbhXCQTKQ[Y:,@IZWDQdd_VJ;669<BFFA>9:?>;634997686,1BXB;:CN822231127854413EN9.22/001455FQ@LcQ@DIV\\ID?55:>=EJ522/.0.379:<CKPDJ\\M@AEJJC:8;;B\\oog\\TPV\\VNQVRLHA:4<i~@0>767;CA58IL>55469;6;I>01/,-5??98:8>PLLwofhkk`UVUUTQG>:;>;>_R4=64643IvsEG\\b_H<WTANhtgF33540024994128;<CKLHB=8659AC:5;DLVZWYRA6<A;7HWF9?=36:89@D?AB607BPNEFE52C_ub]znggaOC`rUWYYXWVWWWWVTSSSSSRRSTUVW[]^^_acdddddcdcceffffedcba_^][ZZYYXWVVVVVVUVVVVVWWWWWVVVVVVUUUUUTUUUUSTY_ZXXXXWWUTSSSRRQRRRQQSRRSSOMPRSUUX_[TSU]ZLJONMONNPRSVZ^abba^]]^`___``^ZYUQRRRRPPOOLGEHMT[`b]TJFFIMNNQRVYYYZ_gjgfda`]_cdca_^_`^\\[XVY]m}o`wkfkfgs|ymbcd^hxo^R`gYRRQ_mkimls_Sfrj`eqtokib[_ea^eku}yi_`cchib]_itrtlWTXbeipstupf[TVaa[[[jkhnt`K^XOehXMKKJJKKKIMX]|fq`jqHYVVVVVVVWWVVVVUWXVTS^Ŀ֍J^oTLMR`e_ed][UUUVUTUUTVUFMnyshZ]jownWOMKGGECCDDFFFKKIIGUw{^ejRHNTSRUXPSTNZMTV<AfVI`YSUMGGFEEEEEGGGeyy{wvkWHGNMONLLMMJEGW`XME?D\\R>Vo[IHGVPGMISXXX\\si^inbSSWSPQTSOKHGEEEFCBEBVznPOX[[XYbd]`]NJOPPPQPMKOX_dec^UQOMNPNMONPSTUVWV[cd]_hrvrnifd^NHO`uykkmkrwlki{jWdZNKFB@AFHD?>?CGIIHLNLKLMLLOPKajKHKXik^MJLLLJHHGHHGHIIHHHJJJHGGDDFHHHPSJDEC@EXmxzule[ROLJLMO`qfOBDHHFECCCCCCDCEDBOWLGEGGGFGNQGBDEEEDEGJMJD?=D??YsqYJHMLLX^^_YRPVSNRWWSQPQQQRTY\\TLJKIIHFDFGFFFDFFF[hc`__]\\[VQTVTZUVZSPNLHGGGGGFGGECBAEKKEDDCCDEGGGECCA>@><<=<<>@><@BABA><<;;;9999:<>??>>=<;>BCA=979HWWJKVSIC<99<===>>>>;;>BDCCBBBBADCB@?>==<;;;:::9789999:<<;::;=>ENPIA=;<ACBAA@@DEECCBCDDCBCCA@@ACC@=CTZZNCBCCBBDDCBBBA@>=======<@KVXWVUVVXUF745689877667578:<8545543568768<>634459744254565344444358::;;;:;>?>=<:76567866678<@?====>=;999775579:<<<<>?=9:;;<<<<<;;::::;;:9<?=>>>>>>>><<<ADCBA@@?=<<<>===>===<<@KPNHA>?>?@A@@@@@A@?=;:9BGKSOG<31103;E<4;92/0010134113311CV\\R;//4EJ>76668;<<<>=52;HKLNG<677888:77@DA@<6<GKD<<>>=>>=7WP=CABDFGGFFFFGHGDAA?><<:75777655656789<CHJLLLNOLC?>>>@CDA=<<;<<978::9652124521125678:86BTVOG>9889:::<<;6899>_M4878866?LECUXJA=<>?Lw^`{SBEG\\hXY~ylU9D_pGENF;GJ6,COGFIUflhYC6348:>??=;9=BDFKF=;:88<:3<GfI3:;::75794232357:=;@MI5/32/...14377:]fRA@TZC1236;;:=GM@N]_J208<@B@@KUA?ULEEDDC?=;9=OgjP>NY]kn]QSVQMI<387<K9384317A?25TZC878;;;86>;6:8556;CF@<7?IFWpDFWY\\YWYXQLGCGQD/21B?7@57:;:X`76CSUH>JI@Muh;+///.-/38;=;:?DA<:;<:88;<:538=;?IJGGEA=<>;6..>C<887521:J[nkSKA9CL=495/1=fjUC6*?hrVXYXXVUUUVVVTSSSSSRRQRSTVY\\]^_acdddefeeeeegggfedcba`^]\\ZYYXYYXWWVVUUUUVVVWYYYYYXXXXWVVVVVVVWUUTSTUXVVVVWWWUTSSSSRSSTSRSSRT[_[X[`badntwy{z|kNKPOOOORSTVZ`ccddbbbbbcbbba^]]XSTUWWXXVUSQNIGGJT_hni]TMLOQRRRQQQRTY^^XXb`[^^_cdddefa]YXZ[Zb}}iS^h_VVVZacpvkgeabhoxf^mi]XU_oxtlikriagfjvysmb]^\\bjmv~vgabddhjedfnxuppf`ckqomkmkc\\UT]c[`_[jknRO[^RJFFIKKLMMLINYqkaUMWSXVWWWWXXXYXVVWVUUYSNyׁJUksVLKXbbgic`^[WUUUTVUY[VPUqwtk`mvk[OKNLHFEDDDEFEGKKIJGWvt\\UOkuTLPLNRPNUTFPRMz~`zM\\THRQKHGFEEEEGFE`{vutmnl`SONLMMLLLLIGFL[_TICHXPBFEFJFGLIFFQ`QTinlgemvZRTQNPTTPMKIHFEFEDDE_oVHKSZ[WW]a]TJEIMNNONMPWckf`_[TOLJKNNNMOOPPPQSUTVdmg_alrsqkgb^OLO[lmkkiqzlheZM`bZPHEEGHIJHGIJJKKJLMKJKNMHNMC\\tnWHJITgcMFIKKKIHGGGGHHIIHHGHHHFGGECDFFHOOFCEGFEOfxysjcXPMJJKMMXifRCCFFDDEEDDCCCCDEBHWRHJHFGHEJRHFGGGEDDEHMNHDBCA?QSMLLNQPNSUQNNNOUVPOPPONMMMMPUZ^TLHIHHGFDEGHHFDFGERfd_^`_`fgdpzj^ZUSNKJIGFFHHHGGGECBBCKJDCCCCDFGGGGEECA@??>>==?@?>>@AB@<<>=;;;::;<>@?=;;:;;<>ACB>;;DLMKADD>989:<=<<<;;<9:=DEEEEFFFFGFDCCBA?>;:;:::9777889:<<;<<;;6;JH@<=;=BDBBBBBEEECCBCCDCBBA@@@??@A?@EUd]IEEDCDFGGGIIIGD?=::;;<945AMORTXYZYR>2379:877667679;<:64554346778:=;54446:74333466644556658:;;;;;;<???=<:88889:866778<;<<;<<;9776765579:<==<<==;:;;<<<<<;;:::;<<=<=;;=====>>=<;;>CBAA@??=;;<>======<<=@FHB<>@A??@BBBB@A?>=;987:=>CHNJ=/)2?F:6:85/-/00/0221002422DZZB2.0BPG?9348:::;=;622<JPRF6267677963=FB>=87?IIA;=?>>A94ukD;@ACCDFFFFFFFINHBB??><:9967877876678;@DHKLLLKKE?>?>?ACC?<::;::989:::75322110/133467883:PVRK?7789;>>;;95//51,Fe{oXQ:48778?BBHNSWPHCDPfYIIT}knzmWQpjA<7.14-+.GM;AD:AinO:68::<>;8;>@<89JfdD:<;:;;;<BDH8137DF?9885444234<B>?GA311/--/0011.,Hi^NL^bI355.3>@9>IF=[xA4;AFID=DWOBHA>@@?>>=<:A\\lU:?VdsubI@BFHD>4/33-/11112/169;ISE79:9<:6325779<>?73>EA=9>@E_N07=>@AHORNFAEVfZADP\\oXDKE@>=<7WxUYB4B?CQQA8OH-./-+--,.39>B>>EFB?@@<9>DIH=118?LXJ76:;:989:537<<:<:2,/46F\\UADC;BG8.211,4Wpn_JBMRG7/W]BUVWVUTSSTTUUUSSSSSRQQQQSUY\\]^^`bddeefffffgghhfedcbb`^]]\\[ZZY\\_^[YXVUVVVVWWYZZZZZYYYXXXXXXXXWVUTTSSSTUUUVWWVUTSSSSSTTTSSSSU[bdcdgiimsxy{~zhJIONNPRRTVY]`bcefeedeeeeedcb`\\XWXZ[\\]]^]\\XSPLHHLVdkkf^XUTVWTQQRRNNQNWaZSTZd`Vankfijg_Y]\\d}layz}cQT[^[Y[[ZT[ptleb_YY`biu~|x}}plmd]fswvruzlp}~{k^[^flkkoldbccdgb_kurrwyysproonmkh`XWY]`^]a\\dk]KYYJAEGHJJLOMKKIWub\\HvcW]WWYYYYZYYYXWWWXUSXQYvKYYfYLJUZ[lpeehcXSUUUXSU\\Y\\hyyqk\\`gWRRNKJHGFEEDGFEMPKJJJJIB>QSUxiQKIGGEFSTDCGGS|O:HGOUKGGEEEDEHFCUntpnnmjaWQNMLLLKJIIHGHOXSNIEKKGKDBHHGGHGFagQJ\\tdXdgrnWQPNNOPPONLLKJHIHCNcZKJHOXZWVY\\]ZROMLMLMOSajjcZURPMKIGGMPNNNNOONNNORS[ehcahmssmjd_NJTeg}ohiglhdf`PJLWSMMMJJMLIIKMLLMKKLIHILIK\\V=Kg`KHJGT`RDIJIJIIHHHHIJIIIHHGGGGFGGEECBMWSNHFGGFFJ^tvoiaVNKIHKRPP^bTEBDDCCFFEDDCCDDEEFOPLHEEGIEGLJJHHHECDEFONIHHC>ANLGMPONONOMKLNNPTXTONNNNNNNPRUW_ULGHGGFEDEGJIFDFGEPbba`a_dr~}hTQSPLIGGGEEGGGFFFFEBCDGGCBBBCDDCCCCBCCBAACB??>;;<==?AC@=<=<;;;:;>@A@?<;:9::;;;=?@@ACFHG>5689:;::;:;<:::98<DEDCBDGHHGFFEFGFBA>;;;::9988877:;:;==<969A=9<;;?DEBBBBDEEDABBAABB@@???>>?>=ADAG[eTFECDEHJKJKKLJF@<:;<:;85577:ALU[ZYZTB5699766667689;::75454346777:;:96569974333455543556668:;;;;;==??=;;<<=??=;86677899::;;<:8554456669;<==<;<<;;;;<<<<;;;;;:;;<<:::<<;;=>===<;99?BBA@??<9:<<==<<=<<<>==??@BBBBABBBBB@=;;;98788::8;DKG><?A=<:77,'*,.////0//003710M_G2/-3>DIKGC@<88:<;9966>IRJ5/555667638EHC?<78BIGA>=??A:8e~uf^RB94::?CCCDDDEEDDFIFBB@?>97:947767776667<DGIKKIGGGB>>>>>@BB=:::976788:::8543001101223566745HSSK?::99;?@<9AX^\\WWJA;>awI89::;==AA;>FGFGO\\~iPLhzytxy|I9A;CNKNUYf\\QRF;7\\oL78>;47??>CEA5,.Aca?8:<9458<;712402=B?:4246752018:44960.,,/-,010/-<baFHcxV46<700;C;8HI7?eh=>EGIE<=HSN;.-2579::;:BdoKEV_~`?211479621/00/.-.021223?JDCXd\\QQVRC7/256:=@?<@B?=::CZ[;387::=?@BDB@GSRGL^V[[?GQKLHGI8O]DU_J34@UVC)Fd,.2//01110/2457;BFFGKJGDJLLMF=65@V\\L<8;=;7:D@7:>>=?EE>4-+*,..08=53<810030*.572%/JPE73MN=TSTUTTSRSSTVVUSSSSSRQQQSUY\\__``bbcddefffegghhgfedca`]]]]]\\[[\\_`^[XWUUWWWWXYZZ[[ZZZZZYYZZZZZYWUTTTSRSTUUUVVUUUTSSSSSTTSSSTUVXZYY^bdglonmqvycGGNRTTTTVY\\_aaegffhiiihhihgeb^YVUUVVWXYXY\\^ZSKJMOQTX[^ZTUYWSRSTQPPJ\\ujVRZqkP[qpikptqgd^eq^c|u^VX[^]]^]^XUgqhbaa^_bXWo}{w{|lfjrx~~|l]aklhdafh_]abcd\\Zow`dtyt||mnoni`XWVY]_]]]ZklMicVKAGJLJIILMMMMLGT|f\\LYGZ[ZZZZZ[[ZYYXWWWXUUVLvfN[XT[dMJQXWbrsnpeWUUTUXWTVQNe~p_VTRQQMKIIHGEFIHBG^`LHLHE?7JjbO\\wx\\HFFDCDQTDAAD@uTJI>BOSQLHGFEFEDFDEMeunnqnhaXRNMMLKIHHGFGIIJKKIGHGHHHIGHGGJ?LgZPMIOUT[\\^qq^ROMLIJMQSQOMJGGDDUVKNIGOQUYUVYY^dcUJLMR\\hni`WTPKJJJIFDHNONNNOPPPMIMTUYbgeciqtnjibKJ[mnsrghdvedk|pOJMLLOLJMKJJKMKIJKJJJHJNMT\\QGNXUJIHHOOGFJIHHHHHHGHIIHHHGGFFFFEFFEFABnmaSHFDCCEXpsnibVMJHHOZSHQ^VFBDBBCFGEDDCCDDDEFILJHCCEGEHJIIHHHFFFGFRMGHJE?@HOROONNNNMLMMNNPTYWPOOPPPPPRTUNdUKGGFFEEECEHGEEEFCHZdedZShj[RPMJKHGGGFGGFFFFFFDCEEFECDDDEEDBAAA?ACCCCDCBBA=<==<>AC@;;;;;99:>?@A?=<=;<<;;;979>@?AFIEA9799;<:79;;;<<<;9=DDA??ADGFGFGEFGHFCA=<;::9:::99899:;;<<98:=;;<;=AEEBBBACCCBA@AABBA@??????@A@CHEGOULEFEEGIIKIGHHHEB<7799776777678DQVY]`S>4897666777898325546435766799776669753323344444556779;<;<;=>>>=;;=?@ACF=;96677889;;:9876554467778:;;;;:;;;;;;;;;;;:::::;<<;::;;<<;=>==<;:77=ABB@>?<9:;<<<<====<<<<>BCCCCCBBABBB>;9::9879:;;::>=<FG<566561**))+---...//.056,7UL0/1256<IQRNG?::;;<;:85:GOC0364567778>HKF?:8:AHHB>@@A<?AIH844424867>BCBBBDEEDDDEECBA>;867765667775689?FIHIIHFFE?=>>?@@BA>;=<9768989::8643112102224446644AMRG89<<>;7;@?BPkuwriZFdm]?7;;;<<<;865668?JeͼoOYpxV6:J_y`[bg]JbtT;474019@DEC:0.16>>43588559=B?522124::4-,37867;90-6810/,*0<7.*/326ObK;Lwm7+:;9518@=7BQ@,5_SBMMID=;:BF5),/26789<<@ckG:9_`;3232./695468950/123132369Lp}kkx}oT?559;=BFHHKLF:9JXF1789:;CB;:@A<;;77UzqULBANWN@FSBSLB8JcO@LL?7+;]E+3311222352/40/@MJB?AADHQSLMKC:5:CHG=58;<<?B>78<==>?EMI;0,,+(-;<,(36420296)\"(..6@=5237?BUUUVWUTTTTTVWYVVUUUSRQRTTW[^_aba`abcdefffhhiigfedca__^^^^^]\\[\\\\[XWUUUVWWXXYZ[[[[ZZZZZZ[[\\\\\\\\YWUTSSRRSTTTUUTTTTSSSSTTTSTTTVWVTQRW\\_adipux{zuwwaIHQTTSTWY[]^^bdeikjiijkkkkje`[VRPPONNNNQY_a^WTRQSSPOOQSWYWRMRWVTUU_vra]^nu^^klommostpjhsxxx}}j]YY\\]\\]^^][\\ab``aa``b^\\lyty||xg^eroc^cidYV\\^^[[l}xgcpxwzsfotqdXUUTX[]\\\\ZXlzYW^fn`NFQ\\NHJKNNMNNNITlUSM~d]_\\\\\\[Z[[ZZYXXVVVVWYSR۳`T[WUSmtOJOVZaowqlf[TUVVYWT[SHcuQGJOOMJHHHFFHLG@QpsTFJB<??E[ZIO_p~bHEEDDCPRC@ACA?HHCEMIKXZa\\FEHFFFFEEIIYroptogaXRNMKJHHHGGFFHIIIGGGGGHHHGFGGHGA^cQXPJLOQOKKQ_]PLJIHGHPVSOMJGDBLSKIJFTUGRYTSUUVWRLJJUbikc\\WOLJIIIHGFCEKOPPPQTWXVMJNPPS\\b`clstnofJPqyrlzwifa~egu{mwkDEJJJKJJKKJKLLJHHJIIIGKY`ULKNNKIHIHHJIGGHHGGGFGFFGGGGGGFFEEEEDEEEFAAorvrklg[OIWlqmibVKJGIX^LAITTHBBBBBEFEEDDDDDDDEGIJLJDDEFEEGHFFHKJJLJPOGIJGA?FOQPOONNMLLLMNNPSWWRQPQSSSUVWWFZVKHEEDEEECEFFGGCBBBMfigXOfjMCCHHFHGGGGFGGGFGGGGDDDEB@CCDDDDB@??>@ABCCDDDDDDCBA?<;@C@=:99:99<@A>>>===>>==;;867:;;?DC@?=;:99:AC=78::;;<>BA>;:9:=?@ACDDDEFEDB@?<:::;;;:::98::;<<:9:=<<<<>BDCA@@AAAAA@AAACCA@????@@ADFJKLNKEDDGGGHIIIFDDBBCDA@?=86677776423<IU[[[I58:86666779:626;85656776667765556875443333444455678:<<;<<<===<:;>@@@@@>;9766667:===9666677789889:::::::;;;;;;;;;:::::9:;::::;;<<;;===<;:9:;=>==<;:8:=>>===>???>??ABBCBCCBBBBB@<:9:::999:::;<:=EB63798664/,*'&*-.--.--///32*?M3+466226;@FHEDA=:768:879FI72555666898;EIA:979CJGB@BB@>:534766667;;<ABBBBDCCDDDFDBB@=:86776656665468<CHIGGGHKIA:;=>?ADC?>>?>;878988886431001111112223334<GPD3489<839?=<9D]iNUw~O632;>>==<<:877778<AL^tƽmQqm|x_IIRRlqGE^O`tW85358879=;744686323247789;;AG911145641,+4:77CG:/2FA.29;;:FPTL=69CJHGFSlL+179@?;;>=;>LE/-9kpDIKEB>>;4343799=?=?B>A\\Y<16]U.186555525=<8:<:3362234751Ps|ifuzqeM;<?ADFIKPVTD=FE75::==<A?<AKPLH<4;c]>@AQXL6:U^feAC/-Q\\GD=4547B:001110/14788CEBKNF?=;;<@DFHLJC<59ADJF;889;<<519<;;;78EPNB1*++,9<0*/249;9AJG:21110012782/^^^][WVUUUUVY^_]ZYVTRRSUTQSW[^__^^acdeffgijjihgedba`_``__]][[ZYXXWUTUUVWXYZZZ[[[[[[[[[\\]^^^^]XVTSSRQSTTTUUTTTTSSSSTTTSSSTV[\\\\ZWUWZ`cco|ztphetz_LPTTTUUVY[\\]`dgjjjhfjlklmlid`]XROLLLKJKPW\\^ZURRWYXWRQX_^][W[\\YVW\\bsua``j|mggdmkfaclqstpluseq}zl`][Z[^_^_``^]\\\\_``b`_```aivvxz{}~uhdbaeni^]chgeecb`]fwulv|uw{xxqgqysaRSTTWZ[\\[YWl_X|wymrpidJJN\\WMNNPPKV~j[QLqnZfb`^][Z[ZZZYXXWVVVXYSbصl_`VXXcZJNU`ccb`dkcOR[[[XVTOHquo|nMJOOMLJIGEEFHICHb{nYLA;;?AKLGNLTlmNDDDDDOPC@BBC@:=IKKRUOVpeEDIFFGGEEIJK_kktrjcXQLKIGFGHGGFEHIIHHHGGGGGGFDEGIBUeQQ[VQQRRPMIGOTOKIGGFCIQRQMJHEGPJDIKQYSKORSRQQOKJLO[jrj\\SNNKJKJHIGJLKMPRSTTTVZ[YUPKGJMR_iklpxwxgM]~wqnzibjfkzqdfXB@DIIJJJJKKIKLKJIJIIIGFKZZJCHJJJIIHHIGHGEEFEFEEEEEEEEEFFFFEEDDDEEEFCAnsuv|pYZiomicVJIHK[]E>GNRKDBBBBDFFFEDDDEDDDEGJNQKECCDEFHMLKNSWRRLMLKLMHFKNOONNMMMLKKMMNPRVYUQPQSTTVXXWOJUNIDDCCCDDEHIIK@EBCBVb`_dcn|nOBEIKJHFFGGFFGGFFFFFFDCCDCACCBBBB@>>??ABBACDDDDDCCBA@<;?@?=:89::;>@?<<==<=>>=>=<:9758;>>@E@;:77;9;FLKD;5458::758:;?CE?;=ABCDEEEDCB@=<<<;<;;;98::;==<::>>><<?CEA@??A@@@@@AABDDBA@@?@AAAFKNNPQKA?BEIJJIGGDA@?@BEHLKB:878777644237BKSZQ;7;9776678:;9=CF>8678986666555557876553333445555789;===<;<<<==:<@B@>=;;::9996545:=:656679:::;:9:99999::;;<<<;;;;:::::9:;::::::;;;<<<<;;;=<;;<;<;:9:;>AAA@ABEEDCBCBAABBBBBBBBB@;99:::;:::::;<?EB605;=;8883.+)***,../011/-.2.0FB.2554221159;CB<95469:815B?435555788879>?=:77?GHEBDC@=<;:9:99777986?CBBAACCBBDEEDA>:87776677777657;@FHGHHIMOI<7<@@@ACB=:=>:876578787422200011111000/1318AJ>22545528=63>>6HLGfj`]PEB@@?==<98889:;;=>@Wp{{jtgo~o_XutOZ]LF?9Dn|FHeN4889=?845555689;?A<547656766<91/288634759;9=JB28BLC25AJK@C_ysS==?<COTUE61458A@<:87:;GL96-4eoC5:<=>=;3157:?=BFFIIBL^L:DII93<:746<;47DF?=5527:326432S|xf`hlimqcJ@CDCEJNSVXTFAEEFBFGB>=>AKUYXWRB;k5;@9BKL@G`hddN=A96CRE;>>8.33-38/-5658<?BIPV\\VJC<===?@B@AF@=;5;JPSTK?;=;96/0=@<;=4+0=MP8%2;,.=9,,.-<KKGLN>2/2899=BFA50hhfa[WUUTTTUX^b`^\\YVSRRTTNJQW[]\\\\]`cdegghijjjhfeecb``___^]\\ZZZZYYXWVUUUVWXY[[[[[[[[[[\\]]^^__^ZVTSSSRSTTTTTTTSSSSSRSTSSSSSUY^^_[Z[^bcagqtoiimt|uaTPQTURQSVYZ`jmgfjjjllmmmmljfb]UOLLMKJJLOQTRPPOQTWZ\\^_accjxq`[YVW[fihohhnhbad][bcgw{idlobP[x|z~vkb^]\\ZZ_baabca]^___`ba```b^Q]{}tuvrvxz{{|vuqc]acfha]]^hw{tolhinmadw}wy|yvlhv{q]QQTSVZZZZWVd}{{rPJKQXkeNNOPQL\\|hZUVXtkQ[_dc`\\ZZZZZZYXXXWVVZYSpăeaXVV[|fGT]d_ZZS\\ntf^^YXW[YPUmskb[SLPRQMLKJJHFFFHIIXjtyyo_VMA@BGJILJH_uOCCCEHQPC?BBDJLIDDIMJEKYTHFHGGHGFDCFDO\\cu{pe\\OJIGFFGGFFFFHHHIIHHGGFGFFDEJFG`UDKOSRQQPOMJKKMKHGGGHEDIPSQLJIMMCDIJMLORQQTSOMLGKT`pyq]OLJJKLLLLNNSVWYYXXYYYZZZZXXTKGP]hpmikrx{eQtvxpbb|iczgur_`UAFBDGIIJIIHHIJKKJMLIJJEFLRNHHFHIJIIIHHGGFEDEEDEFEDDDDEEFEEEEDDDDEEEECCn|snt~yjdillg`VKIIMUSD@DKRNECBBBCDFFEEEDDDCCEFHKMOKE@CFFGNPNNRZSUSOPMNOLLLNNNMMNMMLKLMMNOQV[XSQQSSRRTVWYJQRJCCBCBCDHLLLOGLB?@INUdljplVHHGJIGGEEEEDEEEEEEEEFDCCCCEDBBA@@?=<>@@BCBCDDDDDB@?AC@?@@><:9;;:=?=<;<==<<===??>=:888:;<=OTIE>:>@=?GO[_L72/357;?CGMTRE?ABCBDDDFDDCCA?<;<=;=<98:::<<<:;>==<=?BC@>>?@@???ABBBCCB@@@?@BACHLNNPQI@=@BGJIHFFD@??@BGJNNC;98888785434419HUZJ968977678;<;?CEB9569875555544446787654323455556678:<=;;9::;<;:;@A><:899;;<;64335:4356689;;<;:99988999::;;<<;;;::::99:;;:99:::;::<;<<;;<=;:<?@@>;::<@BDEFGGHHGFFEDCCCBCCCCCCA>;99:::;:::;:=CA:7534;?<::730.+,.)'.42221/-+/2,<H50233234456533687567421.6>75656677898459AA;68@EEEFDB?<;8:998676765=A@AAAAAACEEEFD>966866677777769AGJJHIILPK=8<BC@AAAA<7773353244441/0000/012100111/12.5@?912434335@\\_B<@QqkucCBBA?=;8678:<<<;DYrocu}qzozxyWNp~fH4+0;?<IV@;P@4>=;=>7235678;:8ALC856886531/61.5=<:99>><;;BG94?HH@967??652>JD8<7@TZ^N27=35454365479ER>35,2MF0/49>;743448:5<EFHMOUTE<AA@?><:53;?=AGEFH=5-25912>7(>|yi_addeheQADEDFKOTVY]KAFKIFGEA==DLRWURU`KD:(?>88GPIYe\\NMIAFF@CH@<?DFB<7/<E37??>>@CGMNOVUNC=>><=?>:AG:572=RUSZR?@J@4--4<IC:C;(&.;K:2IH)'>?-)++7JPOUTE7--CRNNUTE73dc`\\XVUTTTUWY\\`ddc`[VSSSROKOSVXVX\\`cefghijjjjhfeddca`_^]]\\ZZZ[[ZYYXXVUTUWWXZ[[[[[[[[[\\]]^^___]YUSSSSSTSSTTSSSSSSRRRRSSSTUTV[^^accedcb[Xaknoqqtxti^TNOSROQUV\\ef__ehjkmnoooonjgaYRNNNMKMNNMMMLMORTSU[__`ccgs|kVWYZZ^]azr_w|rd^`ZXbfenurj`\\[STn~{zz{~~yphb][ZZ_ffccdbaba_`aa`_bc`WRfxxy}wy|t{{sumo|so{udacec`^]]gvujggillb^o{vsx{|kUaxxkYQQQRVYYWWVVoZ@OXTaokXONQQMeg\\XYYZYTX]acc`]ZZZ[ZZZZZZZXX\\ZN~ǔm`ZXVS[tB_wudWWQS_lrob^^\\VYRXUV[]\\VRRRNLLJGGEEIMNQ[dfedbccXQKDBFGJNNIMtY@BDGNSPC@CDEIJFHOLC@DEFHIGGGGGFKUXVZ`bcswj^OFGEEEEFFFFGIIIIJIHGGFFEGBCMDUaDABBILKKJIIGFFFEEEEEGFACKSSLJJLHEHGHHHKONOTUOKJEJ\\ipoZIKMMKIIJOTY^dfghhfeeeed`bjnld\\\\j{vhjhcfpwj`iomlkf\\W{kohljMJDMFCDGGHHIIIHHGFGHECDFGILMMNOHDGJIJJIGGFFFEDEEDEFFEDDDEEFFFFEEEEDDDCDDIaxtdm~xtqnkjjf\\SJJKOQLC@BHSRGBBBABCEGFFFEDCCBDDEEEMURIEEDGEEKMKKIJKKKJIJJLLMNMMMNLLMMNMMNPQU[ZVSPPPPOQSSURTRNFDAABBCHMLKKIBB>?CBN`mmm_RMMJLHEDBCCDEDDEDDDDEECBBBCCCC@?>==<;<>@?ACABCCCCA@@BCCA@?>=;:<<;?@?=;=>>==<==>?>>;:;758::@U[UXTIDE=9:BTdeH9;CJLLMNPPD=<BFFDBCDFEDEGGB>;;@<>;98999;;;:;===<=>A@>=>>@?>?@AAAACC@@@@?@CCFKMLLOOE?=<>AFGFEEDCBBEEHIIFB;867776665443115>Q`O62:9999:;<;==<975677755554444346877543334555566789::988788889=>?;9766789874335872356789:;<<:99888999::;;;:999989899:999:::::;9;;::;;<;<=@BCEE@<::<>@BCHJIHHGHHFEEEDDDCDDCB@<98::::99:;>CFB;89857;>=;:73/--,**1:832310/,/203:9311134566556558756632216855566777788857?DB:7:?BEGFC@@AA;576555556<?@AAAAAACFFFHHD>8686665666668=ELLIHHHIF;4@JIB???>=832002432331.--0///0012233454332.3962234444425ig<;Mw\\DDDBA=:75668:;<>CShwmghec|tymi|`DKK:,/009?><@A<BJOLFF>85228<@HO@//AJA95>I?30++114?>;;=><847=>99?AD?8>4-.-*'<g[A=?EFG928;32.+./13446CL?.01(3:2147;;9742251-2:9:CLKC;526><86617B?<GI51:=:8401.4JIHm|os|zjadeb]]fU>AGIHJQTVYYKDHGA=;<::GRY[YUU^gU[c,/68=EDCL^_KBKNIJGAA=988@MSOQLKNHLHDBACFLOONLHDA?B@88<92BA3-+3IYOHSRILSM:/14?H@:LK3))*->ZU>1.9C9+&*.3Gdsq]I@BQ]XPYcU:0ZYVUVVVWVVX[[[^bfgc`ZVTRQRQOOPPQW]_adfgikkkkjigeddcb`^^\\\\\\[ZZ\\\\\\\\ZYXWUTTVWXYZZZ[[[[[\\]]]^___aa\\VTSSTTTRRSTSSSSSSSSRSSSTTVVVX\\`fgeedcb[RR_jkfgpx}vj^VTQPRTUWZ\\afhlnnopqrtsoke]WTRPMMNOPPPNMMOTSSW[^`abcb]ko^V[ilg^V[pynxo]^YN]z|rk``e`XVfz{wxyyyz{wne\\Z[X]imebeeefdbccbbafi[Piyy|xwtr~z||sek}|wraaca`_^]`b_[[[^``ao}zpinxy\\H]oj_TQPOPUYXUWU^o|GI[\\ZY\\hcQNSNOlr^WWWXXXXZ\\]`_^\\YY[[[[[\\[Z[\\[^ZLڽq][]ZUVhN^}sSMLHNXbi_`efZWXTX]]ZYVSQQMHMPIDBFPXY]ba_`\\[hgUSSNKIGNSWPE\\~mG?DGMUPDACEEGGFHNPJGGEDFHGGEFH>Lt}jm|}kooYIEFDDDDFFEGIJIIIHHGGGFFEG@HQLcZBNOIIJIJKIHIGGGFEEEEEEEDITTLLLHCDGGIIJKIHJRWOIHEQdii\\IEKLHGIJMU\\`fjjkmppnnqsru{}hanoZSYWQQUVQLLLNRPNNAb|p|SPyhMLKIFDEGEFFHJKFEIMLHKSSPKMONLLHAAGJIJJIGFEDDDDDDEFGFEEDDDEFFFGFFFFDDDBCFSY]`[g|vkggimqv{iMDHMPNGB?>DQRGAABAAADGHHGFDCBACDEEHRcjbTHBEGFHHHGEECEDEGGHKKMLMMMMNNOOOONNPQTWVTRNNNNMONONJPQNDCABCCDGJJHEBABCBCDAIYab^VORPOHEDBBCEEEEEDDDDDEDCCCCBBBA><=<<;<>?@ACCCCBCCABCCDDB@?=<::<;<???=<<=>>=====>>>=;<?;78:8@U[[^[RG=568;H`p[EGRUSSSQA7878BIEABBCDDFHJGA:;B>@;:99979:;;;<<<<=>@=<<=>??=?AAAA@BB??@@?ADFLPNKIJC:==8;<>ACCCEFGIJGIHECA<8576666664557<=;;MfP68:<;;<<=<9777545666455444432247666433355566666777778766500;><<8532234422225;<54456789:;<=;99877999::;;:98888787889:;::;<;<=;;98:<=>@BEGGGEDA<;;<<<<?CGHHHGGGFFFFGFEDEFB@>:88;;:::98;FKC99;:6579;<;951/--1=<1..02223311244212201567775444466555643444445556665578778>E@99;?DHGDB=6f^;54444345;>?@@AAAACEFFHHFA:77766765788:AIKHEDEEB:5;FLH@<:;<840//03556764123310/01223557<=<<94432133344554)EQ2Flv^[F:<FGG@9;9534579:=@>9?LKDSeX;@b}{wlgnZCJdvkJ<<6200006<:<>?>QshD>JHBABEMMFGQWJ86CG>;OW@0-.0/2;?5./8A>602:6488<C:5><86625YylG>>2277::611-./..0234=JE9:>9-),/579=@B>433/.00./38;83123667742:@=<=8/,5=DG?4214BYsqP:<CQ]`]_fg^VY_G.?W_]]YROMJEGKFA?=;=HSURROJKLNTelJ147:AF>5DZYJILE?:;AD?:636<DQ[a`YPK@=<=CKPSRMFA@ABFB76==8><86/ATRF@AIVWWYOA74;@>@IOK@4-5^_?@I;4AD:6<A>Ikz]PSRKMNHN[V?5VUVYZZZ[[\\]^^\\\\^dkjea^ZSOONLKHHLU[[]bfikmmlmkigfddcb`_^\\\\[[[\\]^__^[YWUSSTUVWXYYZZZZ[\\\\]^___acda[VTTUTTTTSSSTTTTTSTUUTSSSSTUVX]addccbbc_WYafghowxvz~|n[TROPRQQV^dfiosqqrrtvvrmg`\\[WRNMOQSSPMLMNOOQVZ[^_abdbbhf^[^db]YQb|yvs~cVVbnhmg_]ct}yxwvuutqj`[[\\[\\fokdfgghfcdedcelhZcsq}{tq~rfdl{zdab`````^][[ZZ[]]byvmfiodOIYfaZRNOPNNTSSZWeocWG[^Z[VV``QMRR[rzh[WUXZ[\\\\YXY[\\[YXY[[[[\\\\\\Z[]\\^YT׽m[^`]XWUlfW^}|LEMJMNQSLNVZedaUZ]]\\YUTTTOGN]dc][]__bca`\\\\cb[W[^]YMGKNSSHC`uU?DFKTPDABBDFGFCEOSPKGEGHHIIRUCFflZT\\f^imOCDDDEDDGEDGHHHIIGEFGFFFEC>SRZcLRTQOLLLMMMMNNMLIHFFFGHMTWTMNQKGCFGGHHIIHGFMWPGFGTgmcPGGIIIOY_cefffffinsxz|vlkx~pZMILPNJHHGFIIIGGGFE@RpzzZDndGJJNKFDFGGGFEFEHZjlhjiaVMJHHJJGGMOKJHGHGFEEDDDDDFFFFEEDEEEEDDDDDDDDEGJJKPRPPVanrnhcgjnw~pRMQQICB@=ALMDAABBBBCEHIGGFCBABCDDFQaimm_NEDEFFFFEDDEEEFFGIKLKMNNNNOQQQQQPNPRSPPPMLMMMMLLJJMKI@>?@ACDEFFFEDCCBCACEA@GTSMLOOMDBCBBCDEEEEDDCDDDEDDDDCBB@=;;;;<<>?@BDEDBBCCBCDDDBBB?<<;;<<<===<<<=??====>>>>===G]XF:72CYRTZUOIB<<=<Eer]GHQRVYT>7998>AFB@?ACCFHIGA9:@HB<;988998:<<<<<<=>>;:;<=>??@BBAAA@@?@BA?@FKMNMMGA;:<869;<>BBCCGHONGHGDCA>::6566887779=CEA;5>WVA<;<<<<<;75565345554555555331254444444444666565566665562;XO?887532244322227>;544555689::;:99998::;:999988877999999:=<:<=>>>;957=AAGHGHFEEEC@;99;;::<=@CEGGGEEFFFFFEDEC?<;99:<=:89:>CIE98;:88622685111/.04HVG3./002331.-0200236;;987654324455466446544445555544656515=?=99>CEFDB>:]r^;/2233459;<>=?AAABDFFFGGC=7676666558:>FJHDA?>><77<@?=;989:9887433579;;;=<9521000123789<>>??<86334433344530[t:6>O϶~C01;BCEB=86523568=A?84:5.HrgA?NWVX[gbF@IIB3.6DJYi`O;18>@>840/2599;:;d\\5=LNMLKHHD=66GWYODIDQcQ645673382+'*3?D=5686655>C>>??;989???;8;==<8?INQ[`G/464//-/006DQ[bYD43<>979BIJHG;2220////1678634333312=>8:967=CIKKJ>30/=Y^B/.14:@MWUXZTPSW@-IfgdaYPLIFIUWHBGJGGOTG79=<5//:L]M8:>><=ACIVSC:;;958DGFD;33BLLS`f]K@?@>?ELOPMIJLLKJHC<:<<:9DGCJNMFE=05IVVYYK;5549CDGK@>[meC<MQA;?<8;?CC=HfV;;>6.2BMOSXSPWVWZ\\]\\\\^_^^^\\[\\]emmgc`[TOMLKKLMRWX\\bgknnprpligfddca`_^][[\\\\\\_``aa]YWUSRQQSUUVWYYYY[]\\]^___bccdb[WVUTTTTSSTUUVUUVVVUTTUUUVWWUTW^cb``bcb`\\]cghfa\\XX[]^YSQNNOOPSUSXakqqqstuvwwqia\\YVRPNPSTSQOOONKMQTVXZ\\\\]]^`_^^[SSXXZ]X[wv^knYYŨ~o`^[Vexyvtrqonlg]XX_gcamngfhgccdbcggosbcqlvwyvekw}vebc`_bbaaa`_]^_badz~vpodPIJWbZQLKKPRMMRV`\\o[jKU[\\]\\[[[WRSSSato]XYWXZZ[\\ZYYYYYYYY[\\\\[[\\\\Z[]]^Y^˳nX^gf][U^yyh[j^INJLLKIGEGEP_d\\TY`]ZWVVTRNN_uxfddbcbbbheRNT^gg]MBCHIIH?KkbDCEITNDABBDFGD@DMNLKGFKLEGYgeQ?G]`RLNRi]GBCEEEIIEEDGHHHGGIGDFHHHE?EUZ^RKTQOMMMNNOPPRSSQMJIHEJSX[YLGVTFEFHIGIJHHHIEIVQFEFUijYHEFGGN^nttssrnnrysmrxs`OJNRRPPONMLJKKIJKJKKKM_q}[BZ|aCJIKQK=EYQEEDCTcbunbMABIPTOJLQSQLHEDGHHHGHGGDEGFEEEDDEEEFEC@ACGJKLOSSPMOOPRVY_deabgox}}hWOHCDC@?@HICABCCCCBDIKJIGFDCCCCCBCPY]dojVFBDEEFEEEEEEEFFHIIJOQQPONQSRRSSPNPQOOPONMMMMNMLKJIJGEEEDDEEFEEEDCCCBABEAES_YQONIG>ACBBCDEEEEDDCDDDEEEFEDBA@=;;;;;;=?BFFECBBBCBBCCCCCB><;;;<=<<====;=>><===<>>>=BJVaga[LE?IY[\\\\\\[VH?>>=?[l]IJPRRRE:6678:?A?@DIDEFGFB:<>NF=<:98998:;<:;<=<<<;:;<<=?CFECBBAA@>@B@AEKNLJLLC;=?=<<:;=>AKRAQEGIGGFDCA?;956778899:>DCC@>=;:MPC:==<<<;75455444344555544431033443322234557765554435666<G@63466544544524899645555457788989::::;;;9998788779;9:999:===>>>?>=;<>CFGHHFFDDDCA=:657779::;<?CEFGFEEEDEFFD@<:9:;;=<9:;>D@?=<=;:;;8214641/010115KZRH?80*++*+//1789=DF:4664444433444653455544444455445665446=B<8<@CCA@BBNdzaB74445666997:=?ABDDEGGHF?9775555557;AHIC@=<9777778788888:<=><8535679;<<:732211023368878:;>??>:6554344447*1jk=01StP>532?oG47<;:978@D@<8977Mh\\C?IQH>=E<-2;9521/.4:984007@AA>5220167;<CeqPBGIDAA7136DYUIL[^Y[RWWB4666740/*)*+/4<;698764:BACD=;:86784-''%1=;=JQPSP[kHA71-,,,,,0:TqnSA;@RT;028GMPQ@342/.//.3;BD:00/.--,3A?899449>EJMM?2/7FMD>@<88;FX]MCEIKJOIAWg]YWQMMMJPhkI8I[]RQVC.5;7221/5GN@77;BFLTNKOA24=>?MLADJC74EQOV^_\\WOJHGGHKKLKLX]NCB?:89;<:22BVc]OE?5,/6>=KTI814@F?==;6IggICKOOOPF1)--13('61\"&'%&&6WpvyWWWY[]^_``___]\\]Z[ennhca]VQNMOQQRTV\\cilnpuvrnlkgedcba_]]\\[[\\\\]````]ZWUTQPOPSSTVXYXXZ\\^^^^_`acddec^ZWUTSSSRSTVWVUWXXWWX[\\]]\\ZXVW\\^]^`b`_`][_bcaVLJKKMNPQOMNNMNPLHLUbknprrrruxtnfa_^YSPQTUTUUTTQNORTTTTSSTTUWWUUWYYXY]dbanxsc[gbX˭oVTXZanttsqonkjid^\\hqjcgjihjka_ea^bo~sbryjltyns}}}qfehgda```ab`^`addgq{ygXNOSY^YSR[_Zdtom^X[e^U~Yf]R\\_^]]ZW\\YRZgraOVZXXYYZ\\]\\ZYXXZ[Z[\\\\\\[\\]\\\\]]_Xg㱇oV]mpfe\\Yr~qesiQMLLJKLJIGFCGRYVZ\\XVUTSRPONN\\sidaecdtsb[WUV`aYRHXh`QOSOZcNDBGUNCCEFFHHABPQGIJEDJRFJb`[\\EIqwld]^p|`DEGGGGI?7CGDEGGFEGGMQKJKLNLS]jVFPONOOOONOOOQRQPPMGEDHTZVTOCIXOFEGJJHIJIGGGFKXUKHEZn`LEDEFISalqtx|shnsjWKILPSTTSSRPNLLLKIKLLMMLMVfWBOhz`BHHELNDRde^XPHZqn{|e_TCJYbjcNLMNLMJECDGHIJKMNMHIIIGFEDDEGHIHEBBGNPRRTVUQNOQRROOU[[\\dkptvrqrl_PGCEGB?@EGB@ACCDEBDIKLKGDDCBBBBDFINQWdmk^OFFFFEEDEEFFFFGGGJQVTRRPNPPQQRPPOOOPRRRQPNOPOMKNOLPVUSPKFDEDDDCCBCBBCCCTnqd[WTNHFEDBBCDEEDEDCCCDEFEEFFED@><;;;;;;<?DFHDDDDBAAABBBCCB?:9;;;;;;:<=>???==??><<=>>GV`_^][]_P>ENRT\\`]TPID?=@Sh^NOQOPJC<@C869<?@FRNEEFFD?>@GC><<;9888::::;<=<;;:;<<<<=DJJFDDCAA@@?>DJMMKIHEA<>>BNJ?;??CGXE]VBCEGECBA?<977777998:<<>>>>?<:<AB?@>===;8666544323345534444223333211023334777766655665665312376544555535;:43455554577777889979;999987777669;;::::;==?>>>>=>>ACEFGFFECCCDC=6565556889859>CFGFDDEEFGHF?9:::;;=:7<BB;9<>><99;;9743553101121,1ETVSND<::?GNZYOHFFD>512444444444455444445654434443354433203999;=ACBAACPWrx\\D85556457637:=ABBBCFGGE>8764455559>DGE@<;;97677779:::99;<>?><9465111125434532245566665579:<?=9776654431/.3;HK7Xc87/%\u0018<o49;568;Ok@/4@FHHFC<EDC?:=ACC;5;LRH=61*.7:7643345526;?==CB?=323018;=@FLF?9@X\\J8,)+,AvZYaMJa^SPD931463100121-.4832332/5AA7385145538JE546:;?IG>A3DQ5.-,.,-278MhV;BEDMG1,--;SZO<542.-./05?FE9/+*+++*8EA<:5/,*,3BNM@9>DA<DMF:2/B]^ZQC>DHCESW\\c]ZVOKIHGGQf^HRghZ`rY<@?77;9767;;48CGGED>BSI32B@E[Q;?IE<7;BKX]YVZ]QEDEEDDEFHX`F22056257;93CYfh]B01673.4BRQC?IVM99@ABLQEBKLMMUZJ50<EC:-++(&*+*,%*[VVX]_^_`bcaa`]\\^\\Y[ajnjc_]WRNLOQQRU[aeghjhgornlifedcb`^\\[[[\\[Z[[[ZZXWVSRPNMOSSTVXYVTW[]^^_aceeefge`ZVTSSQQRSVWVUUWWWWWYZZZYXXVUSRSX^aa^]]\\]abcaXPLMONOQQONNMONLMNR\\fiilrsqpqrqonng\\TPQSSTUUUTSQQSTSQPPSVUTUUUVWWYYY`illlgfhcad\\axVWimlnrusuwrhgjklmqqkgfhjjknh_aa^Zlvk~~klwzs}xuneglqsqf]]abaabbcehfivs`OR]jjZ^oc]kvhviZ\\TJSúȕ[nsVV_^^^]^ak]Tek_PLTYYYYZ[\\^^\\ZYXZ\\\\\\\\\\\\[[]^]\\^_UkUjfX`psnvfR_yya\\[XSOMLLKKKJJJIDELYYTXSPQOOONOJJljbafclqVXjdZW`gleZmyh[UJFWXMAJWJEFFGEKK?DXYKIIHRKQLVmOF[WRdf_\\WUWTHKRLLON>Wc<BDCEEEG@NfWHILUTVniLIOSSRRSRNMOMONLKIGC?J^aUKNPMMMIKGFLKJJIIGFGGNYZTMOglTEDEFKT]glorxnipl_UKFJNNOQRSSSRPNNNMKJLLKLNMKOYvVCL]p_BHIGIIZ]]hHL\\ry[RRKZmtqmYHKLPOKHFGGHJLNQQQRPNNMMKHFFGIJKIEABEILOPQRQMKLOPQQQRRRXbimoojjmf]TRJ?@C??CDBABBCDECDGIKLICBCBBBBCDFIGFM[ko\\KFFFEEEEFFFFFGGHHOXWTURLMOOOPOOOOOPRSRSRPQPONMPQLNSRQOMDDDDDCCDDCDDDEBJag\\SQPLHFEDBBDDDDDDDDDDEGHHHHGFD?<<<;;;:;<>BEEFEFFB>>?AABBBD@=;9::99999;>?A@?>>??>===?GU`^][X]eX>5;@BHPQRQRNECA=L_XOSQLIKMVQ=8::=?CSYKCDFEC??A?<<=;98889:::;<=<;;:;<<<;;BIJGDDDCBA@?AFIIIIHEA?<=<?GE?ABADBFCSkV<BFECCA?<:77676888999;;;;:::<===>>==<<:87754444333444344423334432122321467777766664444322235533345555787213454444677888877779878889777789;<;=>>=>>>>>@@=::>ABDDDEECABDHG;5777789:;977<@BCDDFFEEFHGC<8:;:;:;>@@<68:;;9899::953232211124523ESSQUWUX[`_TJBBC@9433344444345335654444566544554355443137<DH=79=CDA>??BIKA:743455456569;?BBACEFFD>755444545:AECA=99:::76799;;;:89;<?@><::960++-36887767786677666567669:8988;9765345./IdDKuB#/16=`}238646;><86229>CHKZaGJPI?>;8327BME:869::::987:EJA=>:7<>:BC>=865459?<64,*-&:m|`:.,/0+ZkTdJ>]_HU[JC=6323447;;//441/342-3A@3=TS<15758II<><8879734/.xk:2352.4CI?@QI>NZQ?102.2;LZV>222..038:==962/131/+=G<699973.0>MIADJF=<BDD>/6]hQPVG=BC>?S^\\abZPJGEBA5:o~tsljmFC@9:<:;<;9:@GJC9587AUN4/;;=LJ>AFC=947ERWWRPUO?=BCCDFJNWXD76/7GE37PFDFCU\\K12ITH:=DEOVTPLC824=EEEJHDCA@ELKB<>DGA2/0++2<@A>22bVVY]_^\\XZadc`^\\]]YWW\\gle]]^YUQNPRTW[\\]`a]SThrjhgeedccb_][ZZZZXWWVVUUUUTQPONNPSSSV[WPQVY[\\^`cefffhif`[WTSQPQRTTTTTTTSSTSSSSSTUSQQQSY]`_^^\\[]_`bd_VPOPPQSRQOOPPOOOOT\\b^[iuuusnpslb\\XUYXONOOOPRSSRRTTTTTTVWVVWVVWWWWXY\\`fhfhfcd``gWm}af{zuuuutx|sghjmqrommlkmmlknmfda`[^t}|}pr|y|quwu|hdimo|}iababccd`_ddgqbJQkxyrbjxhbfjltbUXTRpɺȵhffT[_^^]^akveWb`PKMSYZZ[Z\\__^]\\YXZ\\]]]\\\\ZY\\^][^`UxP^\\[brtmi[UWjsOEPVUPNMMLKLKLIGHHGKORWSPPNNNMMLKQrtbbeckeMViefxlVVbdaVMKABTVAKZJGIFEFJI?@HJGIENeNGMTobOQYWSQONMKBHZokPII[̶_6BBCDEFFDLaYGJJNMaxVDPNRUUVUROMLJKKIHEACQegVHHKTZNEOWQMNMKKHGGGHHLQPNMPXREDFDGTisw{~xoej|YFFHKMKKMOPQRRQOOOONLLMMLLLLKJRosMGILgXBIIKLJ]Te{jFO]qt_XTLXhg`[SNJLOPLJJLMKKLORTTTUUUSSRQONNLJJIF?;?BBEIKMOPMLLLNPQPPPQSUZ`inke]YST`eYJ@????@AABBCDBDEEGLNJFDDCBBBCFLHACJVedSGFFDEEFFFFFGGEHHHRXYXSKMOOPONNNOOPQPNOOOPONNMLNPQRQNIE?DDDCDCDEEDEDDCCHJIGFGGEEEEDDDEDDDDDDDCCHKKJJHFB>====<;;;;=@CEFEFFCBA?@>>@ACAA><;;:99989:<???????>>>?AMX``b_\\^bT=58:<<<@B>EPQDDC;IVSUTQMT[UGDB?<:==IXOBBFEDA=<:9;;988889:::;<<;;;::;;<==@EGEDBBBA?@BGHGFDDED@?>>=958<=@GHLG@>QP6:@ABCC?<;76676677677998888::;;;<<;<<<;9875444444434433333234454322220024455566532333332322332223654895322234445558888988877987788988899889:;@A?A@??>>?<69?BCCDDEC@KOIIGA>=;99;;;;9::9<>=>AFE@@DFFIB9:;99=CE@72689:9999;;:86232///0246776@NMGQZY^d_L59CBB@>=<:524553444335544444666665444579:<8=\\uoC/8=ADB<76;8-.24655454542688:?CBBDEED>864433445<CB?=;89::976888::8879:;=><<>@>:93/7;8787778:9765544455796546:=;;<<=;964;:3V^MfXWyndWDN\\K988DF>;;6232397jsGg\\F8/69<@FG>604DOOJCC=>?ELLKN@3686@DGLA98<:79<;4,,-,6Pi^;0/-.,Jy=EIL[U7@UYQF432//15:=9794269:65:@<7FXVD869;;<@>53461+02/./C;58:75@WVA7AKJLXK62650334GWD111.027=942148=BB?9/>G6,3;CGA::?B@?EHB==;>A;6Pj[JMQE;<>=>N\\[[XQHCGHG>5ja@DE@>=;;=@DJRSLIDDKGCPP;2688<BCDDB>966CQSRTTOHDGLMLIGJX]PB=;65MeRGVGA?:DI>9K_aQEHJIJMQM@46CFCDCACD>;;;=>:9872)&#&+2<CMX_YKKdzp_[\\VXZXVXXSQWbea^\\[ZYXWUW^ea[_b^XRPRTVVWYZXWTR^gcdfedcddca][ZZZZYWVUTTSSSSRPPOOPRTUW\\[TPTWWXZ]`beefgghge`XSQRRRRSSSTUVVVUUSRRSVWWVWWWY[]^^^]\\]^^^a`\\YUSTTTTSRSVWVWSNQWZUUemhnyvsshVMQQWd^SUX\\XRTSRSTUTUUTTSSUVUSTVWVWWXYZ[XY\\\\\\XYbcVnrvynq~zxwwwxwogfnqmkjlpooqpmlnnmjc^[Xj~zx}z}z|ncwwpuxvp_dkmmurf`bedeggaafaT\\q{|zvrrplkikmhrqZYVRj|]}XY\\]___^gpsm]ZXRMMV^\\[[\\]ba__\\ZY[]]]]\\ZXX\\`_]^__wWf^]`gf^[_hedfXWWWVRQONMMNMNMKIHEEKTUTRPNNLKLLKGL~igfegXHSa^g~zaRPRMFEJNG=LYCIYLKLHGGFD@<>?@BBCKGAKMI`p[QOLKGFGH@KpqTGJǽr=EGCEFFGHJJUVHIJIFomBKOQTVWWUPNJNNHCAEKQYfeTEDKPTQED\\plZNMLKJHHHHJJJGEGGB>?EGDI_z~uihp`KNPMKIIKMOQQQQPNNNNOOONMMMKJIJJNSHHIFZQJLHDDHJDQN_]PKNYYRROQZXPMJGFJNPJJVXQOPNNQTVUUTUUTTTSTWYWUQKGA?ADECEHJLNNMMMNOOOOPPQRRRXejdRLQXhypN:??==?@@AABBCDCCGLMLHECBABCCLRNIGHR`\\PHFFFEFFFFFGFFFGDGQ[\\RKMNNPONOONNOONNMMNNONNLLNRUWSOHDBFEEEFEDEEDDCCBBA@BDDDDFGEDDDDCDEDDCCA@FLNMLLGA>>=???><<;;=?AEEEEEDFGDB=>@@BBCC?<<::;:977:?=?=>?>?@@HOaea\\`deedP;6:;=<9;<<=>DOEGEBIQVXXPVcSAFGC?<;8?KK??DEDC=:79@@:997999:::;;;;:9:;;<>>>@BBB@?@@@CGIGEA?@CC@?@><;85:5<SYUOLA=379:=BDC=<=856666675667767779::::;;;<<<;9866444444344444333244554432210112244454321222221111222332555==4256788888889:::;:::::;:99:8888887434569<?AA@A@>?>>AEECCCEEEDHUcZJE?>><==<<<;:96667::>BBCEFFJF>:::=AC@;6567988989;;975321/.-14457738JQJOVY]_R=<IH@@@BDA:32354344333333444446666652149<<;6?`yc03BEDC=54::;;:86655544334677<BAACDEC;896553336=A=988788875468888666789:;<<>>=>=:9==8688876532210111246741587687540/0388:-4`[Ojo;Mm~lF:9=JJBA?830/25/<jM;76<EDFF@DXSGLTURKDC?@OZSI=9308?MWN;68<:79DKC765435DJ<6815Vooh63EMD?61=LB8<C?51357::8734<=::;;;8530*.999?=>HB0/24417EKA56eh67976?S^M:6:GQJ<16;8320004C@30..038:4/.04<EHJMF6=G>546@IE<;=;;>BBA<65;=<FVUNNHGJA;A@;JZUMIGDEHMNAX̻V3=DC@?===?EPYXNIIJLKBCC958;:9<BDB@=;86=KROQUNFPZYZWNFHVZI@<:?BFVVOOKA?=>IUXVVSMJJHIHEFFGKUgslZJ?:>B?>=61/.0-,176,5DKNYflhWLQK:123UX\\XQOQSSRW__]\\YXXXXWSS[a^\\ac^WRRRQQUYWUX[YXZ\\_cdccdfed`][ZZZYXWVUSRQQQQQPQRRTVWY[^ZVVXXWX[\\]^__^]\\]^\\WSTTTTSSSSTWYYYYXWWWWXWTQPSXY[\\]]][YZ\\]]]^^^[XXXYXWWY\\_`b_UOORSUYYV_ouofigYVTO]pmow|s[QTTUUUUUUUTSSUUTSRSUUUVTTUWTRRT[a]\\bZ]}zrnqw|~xsuy|{wogfnjdhlqporpmmlmomie`^l{}~zs{toq|m_ehowvvuadfifite`dfflpjdaT^x}{{zyxuqopskjpx|dUVY^hY\\Z\\]^_dyymtkYZXQNVac`]\\^ga_`^[[]_^]][YXX\\_`aa^bg[gb__^^aipuyphppd\\USUQNLKJJDCGIHGFKRSSRPNLKKKJLMESrihb\\PJB>ABOgvlUYunJ=DIMG@XMH[IHSOHDDB?>??????@B=BL8AprZMHGFFGGADdpNKZŀ>?IHDDFFGGDFTUJJJ?RsXHRQUVVUSPJLA7=>@KQ^aaYOJIKMSOKRT]mteSKKLKIHHKKJJIGEEDCBEGCKf~{mcfr~dORTPLJJJKMOPQQQPNNOOPPOONNLJIIIIHHGIHGLZ[OMLJFGJKTk\\:;EFDIRRKMPPOLJIIIJJHNZ_ZRQRPOQSUTSQRRQQRQRU[`a\\SOMJHFEFEGIIKLMMLMMMLMOOPPOMOZgcTU_ejr{|gH=@>>>>>????ABBACGKMLGECBBBBN[]YTPMOVTJFFFFEFFFFFFFEFFCHQYRKMMNPONOONNMMLNNNOOQPRNNOORSKIEDEFEEFFEEDEDDDCCBDFEEDDDFGEDDCCCEDDDDEEIPQNMLLE<<=>?@A@>===<=ACDDDDCFHHDC@=@ACEEB?<;::85479=@>====>@>FcypgaY[cieO;79;<<<;:;:>ELTOMJFFMTZVPV\\FFFDCB=7:?@<;ACDC>56AHF<99789:::::;:::9:;;<>>>>?@@??AADJKIEA>>ABA@??><:75989GQdjQB;67878=EC;=@85876555555665556889:;;::;<<97545533443333455443234455532221111222233222221222212223323427?;10479:999:;;:;;::9;<<;<<:9:97666653321245:<=>AAAABDDEECCCCDDFG>C\\ndOD?>><;:9:864456;:9CHHGFHHFB::@EC>=;;98787788999862000/-/35457855CRRTYZWLCFIHD@?BC@701223245444345455444455667537<<<987-:gzK/:CDC<6578:<;98876434223466:>ABCDEA98=?;85447:;75776777643787764468::99;;;<<<=>><:8777863/..0322223332329O\\H,379B=,)0,3;->WRwϐmUO>9BLKFB=940/022+F{n|IFMGORIFG@Kx]U]NCD@BSaWF@::KN?QX;06866:<AB?87::731765BHE_kc\\?0;E<9>86<:8DHJGBBA;530-/25636:86653/)+6;7::<DA747999OvtJ7<;4797:L^S=775APJ0->?744333,1840.00365301237@DGLG;?LMG>;@FB95<BA??=<8115:AECGNMGFKD>A?8FULAAAAEIIDZŽi94:9:=>@?>AIPQMC=:88764369;;;;=?>;:@?42@OQJEBCT\\Y[\\PFIPPHC><@CDCCCDEA=<BOXTICDEDEGJKHFRfjkum[RJELIA<82,())(1RmUCJPXbjh_L<@=2233RTZ][SNQTTQUXZYWUTUVVVSSY]ZZ`b]XSPPOSWWVUWYVTX\\_`bccdeeb_\\ZXYYWVUTTSQQQQQRSVXXYZ[]_`][ZZYZ\\\\ZZ[YXWVTSSUVWUUVUSQRTWWWY[\\\\\\\\[ZXVVVUWVTW[\\\\[[\\]\\[[[Z[[YYZYXWXX[]`cb_XPPRQPPQRX^^V\\mg[a^^pz{~mSUVUUUUUUTSTSTUTTSRSTUTQQV\\]YSUbljjhh|qlt{|ypjozunhdgeeinuvwzvqonprmiljq{qwvmkow}ccgfmvtwzebcm~vhddfhmoi[\\my|yusuv|zrqspov|yz}s_S\\qq\\a]\\]]^[ix}t_WVSQR`lgaadhcaa`^]^aa`^[YYXZ\\adc^d^^ecab`fqsruxtjgd`[VSQRRQQZ]WPKIHHFKNPRPONMLKJKMPPLbsdjdRDKJBG?42AGEYs~bF@?BJDNJL[D?QQEDFB?>?@BCA>?A=>GE8@W[NGIHHIIFBUxv\\JW[<GFGEEFGFGFAP\\PLH@ceHQUWVSPMIFDF:Q^lweXUPNOOJPPJRX\\ms_[ff\\NJLJJHIJJKJGFDCEFEEGCB]{yzrb^apkWUTRPQQMIKLLMMNNMMNPPPOPPPOMKIIIIHGFHHIIHJLLLKQTVY\\U@==FMPRPQQQOKJKLLLGJUZSNQQQOOPQRQQPPQPPPPOMQZ^]\\[WRIDFIIHHIIJKLLKIJIIMNNNONMS``XUbkmmmnlZE@@@???>>>?@@AAACGLNLHEDBABN^dcb`ZRPSMHEFFFFFFFFFEDFFEDHPPMMLLNNMONNMLKLLMNOOOQPPNOOOMEC@CEFEFFFEEEDDDDCCBCEEDDCDFFEDDDEEEDCEINOSTQNMMLA<=>?@BCB@?==;;@EEEFFFEEEEFCA@@AACDA=:;@AB?;::;;<=>><?>Gln\\\\kdY`fbJ89:9:;:::::;>;JTNKIIHJPSPOWEBACEG>8;A;:9?CDB?<?IMH@97779:9::;;::::9:<=@@??????@BDHKKGB>=?A@@@><=;88679724>oqP?4984459?A@;33:75555444554434689999:::886422332222212443344223445553333212222223221332122222222333446=A<779=?AA?=;;;;;:8789:;;<<:999744434444335678::<<;;;=BDECDBBB=CSOCB^|wgZK?>A@@AA?>>ADF@79<>AFGGGD??@C?>?=<;978887887773..//.0565568878=ISXYSG@AGIECCCD@4-.122224444445555555445667877<?=998532V~N6?DA:545547999:863222333467;@BBCEA77AF?85556776578865664478865558:;;98989:::<>>>=<955665544566667532286:IjoF3/DukZL9,/..@@^ЯnY;CHNHA=96100044.37;=3/ZsYHEBBIc}coXE>=>GUZWM@K]K9HG12>=:89985336>@?7*/3/8OV^]VOHH>?DFJG<5346EWXEDC@;941220-/157776676589512227<;:<>B[g<6556:<ERSA5551:HI@=DB9663-,.5::9412//25785239?AEB;CMLFCBBA=54=C?<:521102673:SaSGDA?<994DUJACB?@FKLwA65259;=???BDEFA95/-012247:99;>><88DE66HSRG<9@MTUWTJABKMJG@==;>A@@@DHB<FTSJCBB@>AGLPSWhzvprwrhhnhNHOI><:5/.211RlWGMPUZ[TI?89;8655RRTZ`_UPRTSRSUWUTSRSUUTRTWXVY_baYRQQQTVUSSUUUWYZ[]_``acda]ZXWVVTTTTSRRRSTVXY[]]^^^_bb^[[[\\\\[\\]]^___^\\YWVVUTUUTRSUVTVXZ\\\\[\\ZWVXZYVUTTX\\^]]]^[XWWUTUX[[VSUVUTUWZ[]cbZTQQQQQPNOQQQ_jddotnfdfgrjPTUUVUUUUUTSRTTTUTRSTRPPQX\\USZ`dlqmqxuyxtpjcgtxihkefllffqz|~xtnlopot{|stuonmo{pfsvtulbchjovvudhqvy~n`bcgnikpntz{qlsmntustor~~}iR[be`d`___^[d}z}{eWVSRS^nifjlihdba_]_bba`\\YZYX[bed^p^e_acedemrpqurniYOLSPJS[biv~u]NLJIMQSTRPNMLJJKLMORP_slrlO>DNEDFB<47@EIO_`TH??CDHCQ\\D<FHFHF@???@BBA>??=AGD:AQQIFIJJIHHDLlzeMӎJJFDDEFFFGFIHTgbWOUiWHQRUPIFECBA9OѵYULGJLLNWRNVZfqtpiciqcNHJHHIIJJHGECDEFDDEC?Phmwvf^apk\\][WTTWWQKJJJJJKKJKMNOPPQQPOMKIJJJJIGHHJJKMNLMNMOTF:X~^DJNLQUVVRLJLNQNGHUYNHMOOONNNNOONNPPOOONMKLORX]\\XRIHIIJJIIIIJLLIFGGGKLKLNNKP\\dYHKUblnjf^NB@@??????AAAAAAACINOJGFDABKX_`cbdd_WOJGGFFEEEFFEEEDFFDEIMNNNMMMNNMLKKKLMMNNNMMLNNNNMKGEACDDFFFFEEEDCCDDCCCDDDCDEHHFDEFFGDDCGNUSTSQNLJE>=?@@ACDDA><;;:>FFEFFFDDDDEED?>>>??><:::=CFNPPJ;99>A?@EKRV^ddb[_aVB69;::998:98985<LMKIIIIJMPW\\RBACEE@:@ND87?CEDBCEKNJC;88899::::;::::::<=?@????>=@CGHGGD?=>?=?B><::98877988807hiF38:8763;EB9.28655444433333113689989:95333222211222014433332112344433211124785311122111222333333325;@DEDCCEGKNNKIC>>>:76557777799987543210124535677889740049;==@BDF>;IMNKLhxwsrbY\\WNPOONJIJHC;456:=?DGFE=7:<??==;97886677531-,-,,.389778:::;;BQ[UF@ACEGFDDDB<2,-022322224455555455446667778;=;87675@xd88A=6333335789:9830123344469?BDDC?78DF<5555666678997666457886678:<=;98878888:;=??><8:;<;:<<98776753342462Q}f7/^|`PH<1)3`ŬoK78AJD>;7504:5//3//...!QiJEHIB1/AUueOB<::AKVbjeU=6;;7=F?88977:;::CIHKB7>D8:LTMQSXrY9JWSG941.-A\\hM@937:865651303898785578860//--3:<?ACOr}I9<75:>HK=/.12//5AKHFF>98:;97<>>C:230+06<@?979;?FC7>=89??99955:;659:96664542AcrdO>8989:2D[OEFD<8@LVƶ¬l;::<<7579;=>?>>@?81022467:>;57@A<::@@?KYYPE;>FIPWPKJD@FLLJA=BGHGGGHJMNDCVc\\SONJEEFHKLIRclopmfahy|ZDLK?HND;>FFHTOBFH@@FG@=>:57;;87TSRSW]^VQSSRRSTTTTQRSTSQRTTTTY_b_WSSRQQQRSUVVVUUUWYZZZ\\`a_[YWVUTSSTTRRTTVXZ\\]]^```acdb_\\\\\\[Y[\\\\^^^__^[TPRSSTUTRTWVTUVVWXXVSQQSSSUXZ]\\YYXVVVTRRSSSSV\\^WSTTTSSSUWZadb[WWTSSQPRSSRR\\\\T^ngSSUNZYOWUVUUUUVTSRQSVXXWTSSSQQX^YQZiifibowt~upnlmv{q__foonqlcbluw{}|yjeopr}|xzuuxspllx}~qabmogdhfdejrxysyyimtqqv{``eekjnrqvyysmicfiqsnmq|tgVXe|}bccbbcca_ahtqsudVWUUXcqjfpxshdc`_```aba^[[ZYZcfffnلbrgecdecfmqj~yZHNV[elsz{iYTQOLNUUTTQNMLIJMKHGHIRgowuR?@LPGDFC<;9:C@<FRSF?ACGAU^C>AAIMF@?@@@AB@=>@>?FDDZ[FAHKLLJHHDDd|fcVIQBFEFFFFFFGRdxufd`SIGGFDBBBCA?7Vx^hcTNKLLPOOVRUn|yxyurvt]HGHIIIHGFFECCEEDBBDCIXcsyiadzsSLSWWWWVXYVRNLKKJJJJJKLMMORRPPOMKKKKKKIIIJKKKKKKJHJM<EMpwTGLQUWXRHDJPNDNmpWLKOONNMMNNNNNNOPNNMLMLKKKORQNKIKKKIJJJJIIKLIFGHIKKKLLLKMWcZLD?EUfnh_SC?@????@ACCCB@@?@EJKJKJGCHLOQZ^Y[cieZRJIGEEEEEEEEEEDEDFGKMNNNNNNMLLLKKMMMLLLLLLLMLLNMKIFDCDFFGGFEDDDDDDDDDDCDDEGHHHFFFFFEDDHNRRSSQMKG?>AABADEEEB?<;;;=FHFDDDDDDDDEE@=<==<<::988:=ABKW]aTGHHMPOO`t[SZ[aVD:99::9:9:986779<FLNKKJJJMLSZaO@@BAC<@SH87@DEDCCEIKID=99889::::;:::::9;=?>@A@?==?DHHFEB>=>>>AB=;9999877887784J`F346;:848>A<432434443312233235679989853212222222221222344333101222322111113674211122111222444332107ADFFGFGIKMNLLLJEDE>5221344456565443310..023356778776533332348@FLMLLNOOIPmsr~}f[OGGHIIHGGIIE;98634=CII;4:>??>><:88866652.,+++-38;<::88:<;::@R]M>@DDEGGF?77;<82235344223355443344356666668::987651A~jM=8:?9322333346898832333444578=CEEE?9<CA9467656886798666645776432369878:;;;;:99;@B?@>?CEC?:<<8:88776322141<nR;7K}{bH@A:2*AWVXPOX]R5+18@>:953216<61148:766/0`IKLLC80',N\\PPI=;:6:I\\cP>8523<IL>4:B@=KSKBFRQ^[JO\\M21:8Sffu<@UPC;830/,=blP7-.2223663--65746>906986430-7C98AIH?O`jbH9;76;<<91./+.-'$0FMF@;:CQXQB=<;A=542.28=DJG?8;@KD12006=;55888;<45;CHE?<<:<EYgg`UGD??AA49RSLG?:9@:V¼ƺ^6@CGE932346:<;8;=845328@CBD?21:;989:@PZVPL@6@GABD@IRLGDFIGGHNWXVSQOLILJ@EZc]SLJHFC???99H[hnjb^eszeD=APmlREFILTTHA<57AKKA>>735:>=;SRQQOU__XTSTUVTTTTSRRRQOORSSSUX\\_\\USSPOQQQTVWUTSRSTUUUUW[][YXWUTSSTTTRSTUWZ\\]^_aabdefgeb`_[WVVVVTTUTUUSOPRRSTRSUWWVUUTTTTRPPQSSUWWXZYWVRPPQPPQRSUVX[_`\\VTUSSSTTV\\ab`]XSSTQQTRQRRPOKKQSNPZ]broSSWUTTUTTTTSSUXXYZXVUTV]`ed\\`stjh^l~ruotwwymXZcntvnfiorsu{}|ptxnp|ytwvvztsplq~|tqkeirnjkjgfeir{ztz}szzmtqdffhjjmqtustqa^gijrsplp|wj^\\Uazdkea_`cdcdeeb_cgmcWZX]_mvhnvxwlebacdb```_^][[Z\\ccm|n{^tvogdffaqǠ}cfjlimszsXTYWUOQTTSTSRPNLKNMJIHGHZjvbAIHOODABIE:AX]M?@ONBBCE?X_BAB?IMFA@@??AA?=?A?=CITVC:CGGJLKGHEFXaHds?KIHGFFFFFGEKdp|kaTHCA@BCDDD@?@B;13SocUQOMKILJAA\\w{xwyvqtvbLHHJJIGEEEDBBDDDCBCEJTasoe]wuLDKMORWYWYZZWSMKJIJJJJIJKKMORRQPNLLLLLLKIIJJJJIIIIGILO[XXTJOORUURLGHONLb~iOMLNONMMMNNNOOONONMLLLLKKJIIIHHIJJJJJJJJJIIIIHGIKLLKLLLLLS`WPLEBCFTdcWHAA???@ABBCCA@?>>@EGHJJGA=MRKNUTRV`ii\\NJGEEEDEEEDEEDDDFGHKMNNNNNNMLLKKMMLLMLLMLLMMMNMJIFDCDFFGGFEDDDDCDDDDDCDEGIJJHFEEDDCCCFKOQQPOLI@AGGCCGJIHFA=<;;<>EHGFEDDCCCDCB>=<==;9::::==>;887ANdo]PKMPOXg^VY[VE8;>:::;;;;:98:<;=CKONKJJKMLHHJEB@@@C<API98@EEEDDDGJJF?:977999:;:::::99;=??@AA?>=?EHGEB?=<=>AA@<<;;:::89989882:PWC40598768<?@9.24444320013323567998861/1123333322211234423331/012232212100233223222212233244423316<ACDDEFHJJJKHHHIHHJF@>;74333565311231//0003435667655668764568;BEHKOQSSRMLhv]NA?EJHIIHGHJJKMIC<302:@FJD;;>>?>><;:9866650-+,-,1:??=::8899998@TS@=BDDFFE@:34=CDB>4222321334422333344466666898889633B]\\G.('4?>6223333225898853455444678<CEEEA;>A<657755786458866665556531111,$$-8?@?@@CGIIC@BAEIFC?<879<<:::73343427uwI8HE1JzyX?7<TpvcI?5'%)2;4)*,6@;135224544454569649?)dٛPOLE<311104::=A><><<@BB90/325DTVNC?GF@CPNB@LGFOLGGE9/5?ITdj96HHBA9-,-'*EkX212304864:A60/205D@25:87672.NtX:M^Q<<FF<:==718943664,+07@F@JL;,1H_faRJHII=77406=AFNPJ>8<D</27<;<<758:9>?99<ADD?;<99VpdTOQam_RE;4?PMKH;8<?5s̷]8DFGGA81133478544365..8CIGE=1/2369;?MYTJEECDEA=<<@QYUPG?;@KSZ_djkbWMFHJA6?SXOEAABBA===;?M_jh`^chmeF6MozlZOKJMNC:91+;QYQD<951244:?QPOOOPX]^ZVWXWVVUSTTRPOMLNRSTVXXYZVTSRRSRQSTUSRQQRSTTTUTWYXWVVTTTTTTUUTTUXZ^aabccdffgiigfda^YUTTSSSRRRTTSRTTSTUUVVVVTSTTSSSRRSUWXWXZZZYUQQRRRTW[`cdb``b\\SQRSRRQQW\\^^\\XUQOQRRPORSRPPNMOOOXgpncrjRVTSSSTTTUUVXXXXVTSRPT[`gihjpqkfbmvuzpov~}zzbVZgrte[iyvnoz|{y}xfdo|xwvvw~yuxvmksskhhfiqmklikmlmu{yvzvoq~idhikmmmoqmmocarvkt{vmejztdZVSd{ndb]Z^cdadgkjadeie\\]_^bswlxx~ykfggfca`__``]\\ZZahwt́dmuwtmhg]yɮűwwuhjr}|b[^^ZTSTSTTTURQPLKMLJHCHRgzqGLKNWLBBJGAQbWC???LRECB;X^?BDAGKHA??>>???>?@@;DOWK;LWMGIHDEHGJP@>ECPJJHHGGHIJAZ}x{urdRJEDDDCCBA@?=:==>LTSQQPLLKD@JeusrrsqnvlSIIHJJHGDCCCCCEDCBEFIMS_z~meqvCDPNKMPUXZZXXWSMKIIIIIIHIIKMOPPPOMLLLLLLLJHIJJIIIHHGGGOUREPzZ]dOLPRQPQPGHMRWZQKGIMNMLLLMMNNNNMNMLLKKKJJKLLMMMMKKKKJJJJIIHIHFEHKLLLKLLLKV`TMLKID>;Q`ZNCA@??@ABBAAA@>=>@CEEBAEGIOOIEJNMKPZcbWLFDCCCDEDDEDDDDEEFIMPNNNNNMLKJJMNMMMLLMLLMMMNMIHFDBDGFFFEDDDCCCDDDDDDCEHJKJHFDDAAABAEIMOONMKEAHMGCEJMMMHA;;;<=BDGGFFEDCDCBB?<<=<;;;:;>@A?;9:::86<OelWNOMWe\\X_ZE:9=?<;;;<<;;::<>>@CHQPMLNNOMIDBBBA@?A8BNF8:BFFFFGFHKLJB;8779999::::::9:;=>?ABA?>=@EHEB@==<=@AA?<<<;::::99899997@FA732578754=@;30244310/023122457887753356677645432223444333432222343213111212445432110/122247;?@@BEFCCEFGHIHIJHGGGHGHKJKJF?86579842221/01232565678766567789:=?BDCDCEFHNQPN@I`ZMC??EHGGIJHHIIILPM>558986AIB=>>?>=<:88755640-+,001:><;;99988888?KF<>BDDFFA;669>CGJC:661/221133223333444556668889;967GK0,3./-2;<4223333336999864455434589;ADEDA<<?;66652585246656767656553/.1+\u001f\u001e(2;ABCDGMQQH@@BFGC>===::;=>=<:64454/:5Fw^3.3<@;FT>)Fu~h0(7=:30244><1.22236:<:875554326>/<nRQE?<61../4AG>9=;;@JI@FJ=455;HKQUJ<??7-3984866BA=<>DEBF>3BN?/2>EA<.+,./,*BJ.*4737;;=V}[30..1=B>9:757;57cPN`SC7;=9:><6,2=@?3////>SbW8<OF-(>T_h^RSVQ=46846;DIFB=72011/4:A=;;54<>8:<:=?=::::7/;gmXPNYss[G72EZTKKD8585?ͲW2@EDFHC:445228;721572/2:?AA912349?EJROEAB@FZihr|kPLQMLK=2=LS_jknsmXIJMNE63@JG@<<>?@?AED@FS`daab_afN:Vk_UOFDHKD7671-8ILA757545<ISVOPPPQQRTY]\\YXXXWUUTTSSQPMKNRTVXVUWXURTTTSRSSSRQPOQRSSTWVTUVVUUTTTTTUVWWXX[^aegfffghhggijhhghc\\XVVUUUVTSTTTUVUTUUUVUUTSSTTTTSSSUWYXYZ[[[ZYY]addfjosrni_^d[OPRPPPOSVVUW^_VQTTUVUSRRSRSTTSRQU`ecv`SVSSTUUVWWWXYYYYUROPQSW[bimmlhdguzyzssrz~x~kX[fkeYV`qwooz~|z}~o^_ryqprtuvwwxzxuyxplmmihihiifffgqzvu{{xvxxyurquz{ibgikljjmmhima^syqtywvkewsdWUVxiȪz`]^bcdgcbhpncdgkeZ^kffutpz}nbfkhfc``c`[^^[Z`ivppzlrnw|sjhcoŻxw{sc``\\VTTSTTTSSQOKGKNNNJOU^b}MPPMURHBBPJBFA@=>:=SMAC<X\\;>EFHJG>=@?>??>>???ANSIEVjooorkXJHGHM=X[<LKKJJHHIIJJB\\w{{vvri[NIEBABBAA?=<<<;=HOPMLIFFBIgzyurprrtvaJHHGHJIGEEEDDGF??KXTMPR_yei}HBMMJLLLNTZ[YWVTPLIJKKIHHIJKLNOOOMMMMMMMLLJHHIIHHHGHGFDGNPKAW_^~wSLOOOOPNHDCBEOLB>HLMMLLLMMMNNNMMMLLKKJJIKOPQPNNNLLKJJJHIIIIIIGGKLLKJKLKKUYPLLMKE@BDRZTF@A@@@@ABAAA@?=>@ACA>?>DNRLGEEIJGHNU[YLDCCCCDDDDDDDDDEEEGLQPNNNNMMLLLMNONMLLLLKKLLLLJIFDCDGFFFDDCCBCCCCDDDDBDFIIIGECCABAA?BIMNOMKIFJKKGDFJNNNJD;:<=?FFHGGGFEEDBA?:9<<;99;;=ABA><;=<:8764;TaYPMV\\ZYYJ7:>>==;;<=<<<<>?@ACEEGLMNMOQNIEDCBA@?=5?J?6:CFGFGIIJLMIA;8678999:::::99:;<=>ACB@??BFE?>>==<=@B@?<<<::9::88899:961/38855689822;=5/342220.///11245554555789::8875554233455433454445555887420.-.///001244578:=@CGMQRQLIHDCEGGGGGHIHGFEFFHJKLNMIC>=<=<96543233446677889666568:<??BBCCABAA@?CFKSMA;BQMC@@DGGIIIHIIHIIGD=:85123<D?;==<;;98664453/,+/5539?><;<:999999:<==>BEDCC?7468:AFA8=@<83321112222224444554556778<:6DX<-4212127842233333369::9864455579;::=@EF<46;;9765567543325:987678863.-1,+9BDCDGIKMNNK?;?AEC;78<>>>956:8434234/4RTLNB<41:87>;Frd0276654434763684224:?>:6566432124.28FKDFI=1...0EXI::61:OPCEF>7558;8=C@8683-*+20--178:<=AJF?4.**,--8FC7---/47/.6646712:BY~]8.-,,3>FC@;37?;Ci~[??DC407<<AC928EK@EV@05CNJ9*,?LB1.8EVPEGPQ>236987;>7-*,222124:=<9835;=758<?@<:8:?;3Kg[\\ZR\\aQB848KKL\\M6225+8ƾͨJ0AEDDGHB:6766:B@942<C:2247973248<?DBA>>BJJJ^sK;7;GB<BLPbqjejgN>ISSL>569:::::;=>BFGEFLU]fhb[[dP5:@FH;6@KH90236:<60,*-25519bzxOPQQRRRPQVYXWXXWVWWWWWWWRMMQUUUUTUXVTTVUTRRSSROMNPRRSTVVTTTTUTTTTTUUVXXYX]_behiiiijjjijllkiggc\\XXWUVWWTRSTTTTSTUVVVUTTTSTTSSTTTVXXXZYYZ\\\\_eiiijouwwusi[ah[NORQQQSSPMT_d`\\YVTVXUSRQQQQTWYWQNZlrzug^VWVVWWWWXYYZ[^`]YTRTSPVailhhijrxwzuqos|{{uTZ`_^ZX[juokmptwtjc[ax|vy{wvvwxxvutuvomnllmkjjifdddft~{z~{xvwkvvtvxz|zqeaehjiijmmfdifdpw}{trwpr|n[TTdro]\\acqxa[_gpmcfnph\\atldimrt}dfpkfda^ckjb]]]_dhh[kсfposqljjif|~tn~pYXXVSRRRSTSRQPKJRWTSTSTXKtRTTJGPVG>nsR[ooVA@<DJCC>[[9<FILKF?<@?>?@???=>MUOJLal{wRHHKFLj<IFGLIIIIIJJJFPv~ywvwwwp\\NLIDDCBB?>;=>>;?JMJHIFIAOouomkjnptqYIJGFILHFEEEFCA@CTcfXMPQfod}OCOKJKKKKLNV\\ZXVVTPLKLLJIIJJKKMNNNMNNOONNMMJGHIIHHHGHHGFGFHKIJOjycSOPOPPNJFFDHPLGFHLLLLLLLMNNMNLLLLKJJIIILOPNNLJLLLLKIIIIIIIKPPJJLLJJJKKKMMMMKLLEBD@DTWLA?@@AAAAAA@@?>>@@AAA>>CNQKGCCGHFFHOTSLFDCCBCDDCDDDDDEEDEHMPONNMMMLLLNOONMLKJKKLJJKLJIFDEEEEFFDDBBBBCBBBDDBACEGGFDDDCBCB@?@HONOMIGHKKKGDFIMNOLF=9<?CJJIGGGGGFEB<64578867:<>AA@?<:8999::719DLV`f^W[K<;<<=>=<?CCCA?@BCDEEC?6@LPMNRKCEFECBA>;4>G>8=DGGHHJIIJJG@:8779999:::9999:;;<=@DC??CFF@99<>>;<ACA=;<<;:;;::98988886679:8778:9507>3141-*---5=JA;;875434456677776665443335544444566666431///.059AHJMOPU\\ba\\VQMNSTUSRSMHECCCEGGGGGGGGGFFFFHIIJKKJGEC@??=;:8766554667788966677:>BCCBABCBCCCCA=6;FHJFBCBA>?BEGGIIHHIIIGFD?8223714A>::::;:98654353.,069739AA==<:99;:9::9:=>DGEA>:75579=B=38<=<63321222122234344445456558D^X8/5513233562233333336::99764567:=@?<::=CF:.16;9434555555208@>;989:<;9769<DJGBCGJMMKID?77=@>:535;==960/353466454(Mz^HB;<<87;51\\`<26467642147:=?@92/0587645566531.00+3;BJPH900/.6T\\B<<=LTM@62224455543665551./-...-01479:;;9;=90..+)/<A941//7>=13BI@81.8GYgG6.*-,-5@FHIE>=A>8?B>70-.2237>@@@83>ND:YlM6:>;40.04=KF1+3:74<GG<1134642/-,.336:;7589953444457:>?>=;:;>;>ST]mWEHGIJ>8<87QbB(105,,ƽɑFAKDBABCA;889:<BC<42:A:1023343028<>?>75<HS\\PY}o457AGDGIFSdb`e^E5ANPMD977778899;=>BDEGJMTbh`Z[YJ=58FI>?NVH4./3?ME2**,045401J}QQQQRRRQNOUWWWWWVUWZZZ]]WQPQTUUTTUWWWUVWUSSSSSPNOPQTSSTUUUTTUVUUUTTUUUUVUY^adiiiihgillllkhc_adb\\XVTSSSSSSRRRSSSSUVUUTSSSTTTTTTTVXWWYXYZ[\\\\^^]^dnttstvraZfhWNOQSWWVSOQTX_c`[WSRRQQPOOORTX_[TUYar{{nZUWWWWWWYYYYZ[\\][VSRTWUT]eghiedouswyopuqxwmzvyu_ZZcocZfme__\\[\\ejd`\\_fu{zzzyxxuyzupnomkjjihhgfddhq{|vuvwyvot}vuvy{~{tokhgijhgge\\Zbjkkl{tp|wfWRTzqb[_o`fqXW_figcm}}zggrmvg{rupgcbZa}jZ_]]acd`u؋cw}ujejllioeUWSPOPPPPQRRSRRSOMV^^\\YWSZIgZMPJDTiZBdxur\\I<<CEAa]7>FJLKIF?<<=?@??=;BPJHNUjhXJHPLMC\\eFEIHHKKKJIIKKJJG[|{ywvx{rWUVOJFCBBDFDCHJEDHJIHFGGFHHOUTUX]a^QIHFNSMFEFFED>ARn|hUOORQlýegx^GMMKMKIJJJJPWXVUUSRQNKKIJJKLKLMMLLLLMONNNMMJGHHHHHGGGGGHHGCFHJN^imkYOPNNONKHGJLMMNLJKLLLLLMMNMMMLLLKKJIIKLLMMKKKIJJKKJHHGHHHHKRWRLKKKJJLJJLMMMKLKGCFE@FUWB<?ABAAA@@?>>??@@AA@?ADINNGBBEHHFEILNMJFDECBCCCCDDDCDEEDFIMOMLLMLKLLNOONLKKKLMLKKKKKHECFEDFFEDCBBBCBBBBCCA@BEGGEDCCCCBB@>?FMNNLJGHIJIFDFKOPPNH?:=AELKHGGGGGGGA=KSJE>:9>CC@>??<977888:;;:?9<Zaqu]K<?=;<<@>?BEIJEBBCEGGF@89<KQIMQKBGGFDCB?;7>F?@CDGHIJKIHFEB?:9889::::9:::88:;::<ACC?=CIF?8:=>><=ACA=;;;:;;;::98999;<<878886669957/<4/3-+9JJYfc\\:<>975433344455566655454444554444677751-//19IU_jnqv}~~si`ZZZXVUSPPOIC@AABDDEGGGGGFFGGFEFFFGIIFFEDCCA?@?>=<:9887556777775569<?ADCDCBBBCDDDDB>;9;A@>BCA>>AEGHHHHHHHJJJIE;34469=BB=<=<;;;:9765452./48:73:?>><;::::::99;<=@FGB>;:8658:;=7358<744321221222344455444445545APB.234234334323333233568998754679;>AB=99;@C>77533335543567525>BA@=;:9899:>EHGEDEILLICA=:88:=962.3894/./13668?@=7402Sp_HFA>;8:KX_chpmgS:376676874237<?@?92015645665555322336;;BIE<211/.ATOCAG_zmF20./.033221/.00121/.--.15552.269;<DKA4/043+0=85<?A:<=8EVUG@;46>71+../00/:IIDHHEED?6-*('+./399;<=8213@F44E>9;=98725=;3?LB0/311:?:510/-/2/---/3669<:7423223312599<=<<;::86AHJh\\IHCDTPE@BDK[V7-3162(xżſsJRI<:==<86788:<>B<1.14312455652369:::98=L\\bZZuɖ85ABFCGH?BT]\\]Q=5;CEDA97;;867889;:;?ADHHIU]]\\[[__YVRHDEEHIE@53M_B/51-9@844.(VQQQQQQQQQRTVWWWVVTTWY[][XVSRSTTTTUVWWWWWVTSTSTSRSTTUTUUUTUTTUWWWVUTUUUTTUV[`acdeca_bfhfc_[WUX`c_ZWUTSPPSSQQSTSRQRTTSSRSTTSSUUTTVWWXXX[[[\\]]]^`cgjkmquuma^feWLNSXZ]]VOKLT\\bgg^SLMMMMMLOQTY\\[UR\\p{kUUVVXXXYZWW[VQRRONTWYXRPWafebenppoq}r{xkrkorkpnaesjYX\\\\ZX]dda_ZZx|{zwwwy|wwmvpolgeghhhgfedgq~sjox}{ttuuvwwvtvz}~~{sjglqrsstz{hexqur^QQjjizYWkrOUadceeddqqoȥyzrtmhbajrmc`a__`cdW~ߞjuumhdgimwsmaj}zoTTQOMNOOPPQQRRRQQTWZ]\\YUVL\\c>FCDQTRJDmxx`IBAFfZ9@GKLKKJF@?ACDDCE@DE;IdoSAFPMLLMIIEAHIJIHIIHHHHIIIHRfy{{zy{}|d\\cYLJMNNMMKJKJJHHHIHFGHHEDGHFEGGHIIIEBOTKHFEFDEPkz`RPV\\Uhpdq]JMRKIMMKKKIGKQTUTTQRWVPMJIJLMNNMLJGHJLMMNNMNJIHHHHHGGGGGHJLKHIJNTWZ\\VQPMMMLJJIJJKKLKLKLLLLLMMNMMLLLKKJIGJPPMLKKKJIIIIJJIGGGHIIMOWXOIIIGHKJJMNLMKKJJIJIEALZP@@AAABBA@?>>?@@@????ABAJQOLJIJKHEGHILLHFEECAABCCDCCDEEEEEHLMKKKJKKLMOOMMKKKLMLLMMMMIFGHDCFFDCCBBBCC@@AAA@A@DGFDBBABA@?>=>CKMNLJGGHIHFCFNTUSPJ?:>EGHFEEEEFGFF?A^sphYRKID?=??>:534679:;<=;:>MQRdXO=@DILKMORUWVUOHEEEFFGHHE?GPMPLB<BGFFED@<;?FHIFEGIIHJJG?AB>;:::9;;;;:::::99985;ACC?>EHC<:;<<<<<>@?<9:::;;;;998899:;<97676433445965@H8LaypD9<:85555534455666665566555455444222/.3:DT^iry~|{}vjcZWQNPQQOLIFBDGB;=AABDDDEFEEEEEEEEEFFFFGGFDCAABAABBAA@>;::976656767778<@BBCCCEDDDCCCCCB?=<:;=>CEC>=BGIJHGHHFGJLNNH;5568>B@===<::::;:7545422458;839==><<:::;:;:9;=@EHG>789755579842/3743432122112333444443443444446:5243346542/3543322466799764567889:<;969AA>>>=57<;<:73257:849BIHC>:99;=AEGIHGJLLIE>67:97643340.1760,/6;===>@@=86513arVLHA==RvpI9>>=<:<964656994111469854458989;97434338:98956842110/4EOUT?>HNF4/45676310/./022210/.-,05896/,-/6AJVWG4-2DI;5932LfbI?=G\\j_MIC;:8-/154331/8GJCAAADBAA;102358<HQE<:754781.24.5>=961.7C@10CN@1365760.01//132/--.59516::4022233135559<<==<;98<=HXNZ^OPd`Z[]efWB245/32&h»˰ZMS@45:;711577:;<@=2,-135654466323358987=MX[Z[q`3EGDCA@=:DRSND:7788876567655459;87:>>@ACJQWXW_jg^TD::::=ELL?:R]:.864<A:224*7yQQRRRQRQSTRSUWUTTVXXXXWUVVSRSSSSSTUUVWWVUUVWVVWXYYYXVVWWUUVUVWWWVVUUVVUVVTX]]\\[ZYXVWYZZXTPPPSW]`]ZXVSQPQQQRTTTSRQRRRQQRRQONPSTTTVYZYY\\]\\\\__]]_^^djpuutwoaajcVPPUX_b^TNMMPZhple[QONLLLMQRRW\\\\X[j{~l[TUVWWY[XUVVUXedTW\\X[VMQX[]bhjilz~y~qdXapi\\]`__``abaaa^m~|vnrxz|}|krrqplihhhgfeecdq~{sptz{{|}|xsstvwxywtuw|}sjjwzil{yhVO[\\lk[l`X^Ybc]_efo~uwz~ptricehcbeghdaabeXtjskgfdeajn}b]_ZSZTMZhhj}y`RNXZQNOONNPQRRQRRQSWXVSQMKzo?EDB>@DLHLo{{qINhS;CILNNLMLLKKLMMMLHC??^`JDHLMJFDGNIFGGHGGGFDFIGFGHFEH_vvw{z{}~rcg[KLMNNMMLJIJIHHIIHFFIJGFIIEEECDGIHC<=EIGFEFBXlTNO[eZ_ŭipfLLPNLKLMMLLKIJLOTUTSRWXVRLHIKLMNMLJBCIIILMMNNJIIGGHHFGHGGHGHLLJIJLQTRRRONMMLKJIJIJJKLLKKLLLMMLLLKKKJJKJHDM]YQPOLLLLKJIHHHGGGGJOPTZZQIFGGGJJIKLLLJJJJJKKJFHSXJA@AABBA@?>>@@@@?>>>??=CSYZ__QNPLGGIJMKHDCCCBACCDDDDDEEDCEJLKLLLMKLOONNMMMLMMMOOMMMLKKJCBFFCCBBBCCC@@AA@AA@DGEDBBA@@?>=<<BILNLKHGGGGECISYYVSNA;FMFCEFGFEFGGF?@_zzk[SF<64:>?>8546:;<;=<<<:935>H]`MEMRVVTSMGKOSRKHGGGGFECBBEKNQH979@GFEDB?>AFIIEEGHFFHFC???=;;;<:;;;;;:::;;97708?@@=@FC=9;::;;<;<>=;99:::;;;:888899::98756535587CH9MbU}V;788655555544555556655544345554222024;Nbo{yx~q]OLKMPTPHA=>;;98;@A@AABCBCDDDDDFEDEFEFFFFEEEDCA@ACEGGGEC@><<;:;:7899<<>>ACDCCCDFEDEBA@ABBBA<88:<@DDA@CGKKGFGGGGIKNPG>;889=>847779::;<:7666547979;848=<=<<<;;;;<<:=@CFD@:668755669<985122332221211222333443333333334:EE=43632549C@754322455678754457789;;;847AA99;=;9:;=??@@<67:9=GJGD?=@BCA@EIMLIIIE=5100556868;955895007=@AB??<8766663H]MKMMduR<6104688656744:<621/./155689::;;<:743233<C<001--2211/07MflU5,/12009BHG=303678999:8641/1599861/,).8BSXF0-15;852.=`}zeSKazw]NJA<;625433333567?DC>=?>@EC63557;ACC<9:9974-)/2028<@@8668@<505FN?:>>85334420/010/0034102697662/0133147;===>>=<:89?K]]SFNluquy|mD./3/)13&`Ƚ˽˔J>A8469=<2.489<<>>>8203466321/../1247;:8CV^ZVXhƞE>JGD=::7<EEC@;7511456534465469;9:?>;:;@EIMOQTYUNG:34457;CKKJLL5/47;=;73059.KRSTSSRRRRSSRRTTRQVXWUUTSTUSSSSSSSRRSSUVUUWYYYYZ\\[[ZYYZZYWVVUVWVVVUUUUVVVVXWWZZVSQQPPPQRRRPNNOQUZZYYXUSPPQQQSTTTSQQQQQPPQNNKJLOQRUY[[[\\^]\\][VTVTU_insuvzuhbghdWNOU\\ac^VPLOXdlkhhh`UNLLMNNPU]a\\Zcouv~~iYVUTWZ]c\\QTV]xkXccWWZYTRWZ]`aahr||{sdZZeg]Z``^^^^cgdddn}tot{xy}mquswxrmiggggfedmsw}xqnklrvusrrtxxwwutuvyzz|}simgeilkbZYq{Yp_rgy|jiolbchjgitvps˵|tsfbdb`dfchkbbdf_\\irhffeibip^\\``_YSRPIBGAGbhbZVSPOOOMNOPRRRRRRQPPQOJG:tDEGCEEEEJK[veiN;FJLONMMMNOSRONMMNMDOwrL?DJNLKKKECHIHGHGHLMOLLSTTUPKGARnvtvxyzc^eUNMNNMNMKLKIHHHHHGFDEGGHIFFFFHKKGAA@CGEEEFDgq\\OLOU]ZXrsnPMOOOMNNNNMMMKJKLORRTUVWXVRLIKKKKKJIAAIJFGIJLLKIIGGHGGGHHGHD=>HKJHJOSSQQONMMLLJJKIKLKLKKKLLMMMLKJIHIIIJIGDO]ZUUTRQQPMJHGGGHIIHMSTW[YSJFHHHIIIIJLKJKKJIIJKJIMWPHDBBBAAA@>>@AA@>>?>===AOUWgo\\NOOMKJKLPMFBBDCCBCDDDDEEEDDEIKKNNNNMNPPNNNMMLMMMOOONMMLKJDACDCBAABCCBBBA@A@@BDECBBBBA@?>=;=AGJLKIHGGGFEDGRZYVUOC>KOLNKIHFFGFHFBIbm`ND?7568;<>>:89>@@@?@>@A;?8575=KeolbQGEDDGGGMSLJIIJHJOVUMEEOSK9;;=DFDEDB@BDFDCEGGFEGE@?<;<<;;<::;;<;<;:;=:3856>>>@DH=79;:8:;<=<<<;8789::;:99888889:9876668:=A7D[JB?c}{vPG@)83143333234354344444433335553223<Rbky~}~yvzzux\\MHEB=:74589::9636=CB@ABCCBBCDDEGEDEGFEDFFCDDCCBBCEGIJJFC@><=>>?>;:<?@@CCDDEEDCEDA@@><<>BCCCA=::;>ADDEEFIIHGHHFFFFHFB=>;954444469;;<<;96677799;;<;:67:<<<<<<;;<<==?DDA9566566446568:@>75323212222111133333344333344348EB53//84GfbC67431122445543224567878:769AB=<=@?:659>?HTQC:76;FJECA?BEB?>EMLF?<:73.-0015<A@HME@?>9448;=?@A><;97555654Ifle[޶`FGC74;;53778832;>8432004756::979::;;832238<8+,?J?4310/14IhoW@425658HX^N81459<98;=??;85466:;652/.-,.3GO>/04/--/,-Ty{wphLNH?<72/024324970*1<BB@?<>A@8421025:>A?;:62/--/1025:BC@?98=;;=8:KPIGE=:>?;860,,./000/-.11235775447844:>><=>==<<;95:UT@:8>hy[0*122.25(Iķs=-2:68;@D=315:<?CD@931001146200/-//28DGBF]kjb]gͽa:HHEA;66:==>==<71279985057558:99@FB<968@DAIULBA>;514638?BHMJE;/.019;766105,0UUUUSSSRQSUTRRRPPQSTSUVSQSTSSSSSRRRRSSSUUUXYYYZ[[ZY[\\]]YVUVUVVVVVUUTUVVVVWWXYYWSQPOOOOOPPPONNOPSUVWVUURPQQQQSTSRQQQQQPNOOMJKJILPUZ]]\\^__\\ZYTQQOOSYfswvutphgige]POY`df`[Z\\_dlmhejaSPNLLMNMMS\\b^\\dimtufWVWVYY\\jjXU\\an}xfs|_U_f\\OTTTVZ^TNbu|{|ri_]cda__]\\[Z[]cimrqwtxz}~rmqurty{xplkjmorkhrywjcfjnssnlqsposutqppqstuw{~{pdapc`hiigch`odUdlm_lldbqvqgk¥|~pricb`bfdV^jbcedfV{ktkjihngnvi\\\\gbSMNPQNSgvyu{rieQFMQONONMNLNTSQPNKJKKED7oIFGCBBCBDIShxzL;AJKLMMMNKLTWRONMMKUoxjUA>GHIKIKLLJHGFFGIGGQX]_ajnosvtpohoykhkij|eNYYOMOOOMMMKHGHHJKKJJNKGHIHGGGGILKEAEJGEEEEGHc}YHPQSRUTSsvoXSXSRRPOONMNNNLKKLKKLQUVVVWUQNKKJIIHIDCDLHDEGGHJJJHHHFGGGGGGF@<DIJKLNPPONNMLKKLKKKJJKKKKKKKKLMMKJHGFGJJJJIGJPRSQQSQONMKIHHGIKMORSVVYXQLJIHHHIIIIKLKKKJIIIIJIMQUNFDDCCDEB?>@ABA??@?=;<?HMTeofRILMMLLLRSKDCCCCBCDDCDEEDDDEIJKNONNOOPPNMNMMLLLMOOONMLKIGC?ACCDBBBCCBABA@A@@BDCBA@@ABA??>==?CDFJIHGGGFFEEMWZTQNFCIIOZVOIEGHHHDFY_PC=??>=@A@@??<9>BCBCCAEGEB?<78677>HWilYB=CFDJPXKKJJJHLNRZWONPRPGEC<=CDEEC?>?=@CFGFFFEF>99:;<;;;:;;;<;<=:;?<4786<>?CDE;78;:99;;==<;9766899999887888898677545655767=@6;GYy}FK[>,60042221222233234433333334442212Kq}gL=:97421368889975567;?@ABCCBABCDGGEDEFEDDEDCCCBCCCEFFFGGFC@>==?@AA?>@ABBCEDEECB@?=:7678:<>?@AA><<;<?@CCEEGGFFGFDCDDB?=:<=97568:;>>=<<<;86668:=======848;;;<<<;;;;=>ACA9/1545753344556>EB;4343222212211333333333333443335832;QRNytG3853211112233210024556688:9:?B@>>?B>:88<=BQZVK?95:CEDCBAB@ACGG@7334214569=BFJKOKC@<::9:;====;889::87668/alkQKIB?=;78<:76348<975322333465323469=<3/010.39CSmc8+0.0129GYcaWC776>Zo^;-053353369<=9555558=80-.-.001IX@6;40242*2juCCPH@=93/-2767::2+++-3;==;976762/0/)*5@@964333332232:DC=7<ACCDD?7=LPLD?ADB<68=FQK6,)).540/011148=>>:57>A>:;?>968><5EM:0788SA+.0274346<_ŻW=14:9:=?EE=417:=CD90/.//128956=;3/.08BKD@XnuvmnϹh@DEFB:3159;;;=@<66:=<88;<967??:9>A?;8319A<C[WA=;7459::CHDAAB>5.--/;=9:;7210/WVVVTSSTSSUUSRRPNNORUUVTQQRSSRRSRSTUUTTUUUVXXYYZYYY[ZYXVSSSTUTTTUUUVVWWWVVVXYZYVTQOOONMMNNOONNOQRRSSTUURPQQRSSQQRQPQPPNNONKLJGINSX[[\\_`][YWWUSRQPO\\qwrpqoljiimm`ST[^__^\\]bhkmnkd\\QKNNLLMNMLR\\a]]bfkmcURUSUVWdme]emkp{gYgvfUSWUPknJtmiy|c_eggghfffc_`a^e{}uqyzqttuvphkv}{rllrxsdcvvnotwwxskgimkinsspnmoprrssuxuj[TbkdkikklklbwxSR[yw}lֽoc`cmog^X^cgcbic_bdec_hvppnlpezpeljgkbUPRRNWprib_SgmORSNMMKFKUTPLLLJGDBG6bSBDDAAAA>@GNUg~UYDHIGHJLMMLOUSONLL\\onWLJBCKKJKKLNNMKKJJIIHHNV[aksx~zZ\\[Y]g[ew`LRXQONNMLLKIGHHJMNMNT[OFJJJGDFIJJLGBDGFDCDCEId|iPPYZZXVRRlw]RXXVTSQOMMMMMMMLJJKIGJOSUUTRSPLJIIHIIIC?DD?ACCEIJJIHHHGGGFGGHHCDEFGHKMMMLLKJJJKKJJJJKKKKKKKKLLKIHGFEGKKLKKJJKLLKKLMMLJIIIHIJLOQRTVVYXNIIHHGGGHIIJJKKKIHIIHIKKLTRHC>@BBBA????BBBA@?=<;;<CTde_SHHJLLLMPURJECCCBBCDCDEGEDDEGILLMOOOOQQOMMLKJJJLMMNMMKIHEAA@BDDDDDCCBABAAAA@ACBBA@A@@A@@?>>>A?EIJJHGGGFEEJTYQMJGGHGJOUTJFGHECDLWM=;=<;<?ADDB??=;>BCBAAAAAA><<;:;=?<:>I_phM@DHHPWOLJJJHIILRUSPPQSHFIE=?CEEEA<:3;DGGEEEC?<8==::;;;:;;<;<<=<<><9579==?D@:=;7::98:<<=<:8777887898788888877666523555453//3.1;YoHLr^63313532112222233233333322222333.3\\}tR4.3345678::::644567556;<;>AAAA@@BCDCBCBBCCDCBABBCCDEFFEFGEDB@>=?@AA@?@ABAABCEE>7865311478:;9:<<<;:9:<=>@BDDCCDDDCAAC@=;;;;:99=<>CEC>===;86779=?>>==>:548:;;<<;;::;=@BC>2-44256532333237>@733676201134434433333223334444546<Qxy`}x@/363333322222322233445667:<::>A@>>?B@=:8;<=HTVSPMD<=DHFC@AA?;993387766=CCFLMMQRSPD;46;?@>>>=:414899988765Nsl^jfXQMME75:<989988;;987541//22210001248<8554511KhVa|L%./0247;=BHH@986@`gD,.0/.-147765654764239631103663@U@;?:46IK5<xQ5HQG?<961-1568:5/2760,/478804?@7000-*-49756::8763566;?6-4GKGFB?<84:GKD>@CB>;EXmyT?3*0<:00112357:97435:<:8:><88:?=8KB44889:Wb),//57310<?0O˹z@<79@===>?ADE>43:;;=3*-0234469::?A=7448;=:;SfozvtȤZ?HJD>833588887<@><?@;8?HD=:<=::<;6577548ADCQYJA@>:8=@?CEA=>A<2,-/4>A@?@=8432WVUVUSTUSTVUSSSQONNPTVUUTRRSTUUUTUVVVVUUUUUWXXWVVUTSQQRSRRRSSTTTUUUVVXYYYXWWXYYZXTPOONMLKLMMMMOPOOOPSSSSRRSSSSQQRQPPOOPONOOMIFGLQSTTW[][YXVXXTQQRPQ^koqjdloiijkpj\\SQUVVVZ__`cjqpqaIKPNNQSSRQT\\a``dinmbVONMOVZ_e`aquvjddT\\]Muɿwwrwejljloruusrl``vupy|novz{voihjqyxqmsylY[y{vrnkhghjknqqqqsuuttstrtxma`lxaillmnprnfmNWZu|~dɕQDZgoi[UX\\gljpfY^_accijxrrpooojdhlppnaWTRP_ustzzkonWVSONMJJPVUOKMPQJEDJ;Sc;@DAAA@?>ADHJOczv`zXDEJIGHIIIKLNKFYl`MCIRJMNJLONNPQQPONMMMKJIIMXhqusTYYYWTc|jQNMRSRNKKJHHHGHJMQOKPQKFEFFFAAGJJNTJBGIFDDCA?Ed{mWM]qof^YUYqhRXYWVSQOOMMMMMMLLMJNPLIKOQRQPQPNJIIIIHPA:>D?>@ADGIJJHIIHGHFGGGECBABCEIKKNOLIIJIIJJKJKKKKKKKKKKKJIHHFDIKKLKMLLLLLMJHJJIIIIIHJLNPQRUUUVSKGFFFFFFGHIIJKKIHHIHHIJJKNUMG=688:;<<EJB><;A??=<:7=RbaXQKGGHIJLLOSQICACBBCCBDEGECDEEILLOPOOOQQOMMKIJJKMLLMLKKJJFCBBCDDDDDCCBBBAAAA??ABB??AACA@@@=>>>M_FKMJHGFECDHPSOKHGHHHIHIMKGD?>EMQL?=?@AA@A?@@AAA@?@AA@?>>=;;<<=><>@@?==>COfoZDBDKMSMJIHIJKKKJJJJIKE?CHD<?GDD?963:CFFDA?:8<JJID><;;:<<<;<<<<<:7:7@@@??FF?FB88:9:9;;<;:87878:889998888887665556376435534566:7.Adh;-244333323322222222132212222235519b~~h@,,4646999::88765466556896568:<<<>===;;=>?ABBAAA@BBCDDEEDDEEDC@>=>@@@@ABBBBBBCCB=2021134578877788996579:<>ABCBCECBB@?@><;:9::99;<>@AA@??=;988:<>@><<==:436:::;;<<<;<>@C?600431674333322445753369;:4014653345544322332443477CsytE+4713477742221026874348878;<:9;?@=<=>><:::<;@MRQSTPGDIJFA@@=99677:;56;<?CGHFEIPSWWQQB8==>=;9:977:;9888778;46PinYRWTYXSG=<:;998=B=<A=:996420122100000000:BAISQG3BkREze//02369:5.-/3546APF2572/0245;;64469;8;?;:7:IF;:<<96=9;DNF<NVB?ppG?MQG@=;92-/158856:=DB==824;68KK=3002102678;>;9857<B?83/1>B?=940261,9FGABBDJXgou}whd_G10432026::75311124779;===???:8C>7:85=7/j~4)223651*)>E;BZn_+'--7?=>>>@??B@839=;<90/365548?>868:988<@?=>K]hpooïT?IIB<966763114<A@>?=88AGC?>;3/6?;,).5:=@CGDAHKGEB=:6;KOA9:;>@7/-/04775643210TUUUTTUUSTVSQPPQQOOPSUUUUTTUUVVWVVVVVWWWVTTUUUTSSPNLKLOQRRRRRSSTTTUVXXYZZZYYYZ[\\\\ZTQONMLKJKMMNPPOOOOPQQQRQRSSSSRRPOPPPPPOOPQJDFIMOOOQTXYXWWYYURRRRNP[glgcouhejmrsl`XVVZ]^_\\^ciorxtXKQQQRSTTRRQXabdgkqneYRKIQVX\\[_q}rrzpceh\\ԝztmqzrr{xoqnmosusrumbt{zxvwtnmrs|wqttpkktyvuxj\\[l|wqmkjihikmoppqrtwyxxxxw{o_p|egommonqvmb\\SWYnzt~|nȋRUdmk[RV[`bctkX\\\\\\]^^WrpvvwqsnurekjkoqlaWPP]rruu~|\\LOXSNONNNNRVSMLMPQKGDI@Jp=@BB?????B?IPCES]pq[YPQPJDFIGEEGD@QQ?DLOQNQQLOSQNQTSRROMOQOMKHITdpsw{aQSVUWi|QFLMNSSNJHFFFGGHMPRPMF@EF?9>CPWNOVW_aOHKFEDB?<Hgq_NIboea`fp~ZTWVTRPOOOPOQQNKMQRQUTQOLMNNOQPPMKJIIIL\\L7;CB@??BEEGHHHIIHHHGGHGCCCBDEFHKOMIIIIJLKLLKKJJKKKKKKJJIIJJGDIJJKKMMJJLMMKIHIIIJJIIKORSSSSSUTLHHHHGEFFFFGIIJJIJJIHIIIJJKSSOF8/69796AV`?@ELHE@<;8<OabWONLIGFGHHIPUOEACCBCCBCEEDCCCFIJLOPOOPPPNMJIJLLLMLKLLKJKJFCBBCCDDDCCCBBAAACB@@ACBA>9>CB@?=>>;L}vKNQMJHEDAADHMNKGFGFGGGEHKKF;8FPNF><>CLNOG?88<BGGDBAA?>=<;:;<=?@@??@>=:<CBDWkbLGEEQIHGFHLPNJGFFD@GC@@EJDCGE<8445<DEDEA;73;INPQNIC>;<>=;<<<<<;8;FQLDCBLQQMF<6:::9:;;::87878:89999888898776544.10123354566666863781344445554422000001122332223357868Ww}`:/38843689887433478776659:644456789:86216<ABBBAABBABCCDDEEEDDCCA=<=?@@@ABDEEDDBBA?:5433465897442./345556689;>BCCB@@A?>>=<<;;;<<;<==<<;==><;:9:<>??=<<;;:5/4:;;;;<>>=>>?=83024215643323234434434327>>635553346633322233443588GmxY=242,/46::854331/0477567;8567799;?>;99;<;;;9:79?DDDDBBA@=:;;:88998899516:>EJF=87<DIPVYL9:><8633<CD@<778877;><649>DIGMQUSHGot>/:>DF=>D@<=B=36677642100///.:HGXmk\\B3GNJ__?302687::0+++.5>A;26<8457755:;99::;B:<LNLC7FK@?@>;4386CQE66542MsXMDKUMD?:82--0568;=>;BIOTH53;;;KL9.../333798::6446;@?;8789:5/+'&''*+(,:FG@=DM`qqnh_]k}j<*154.29=;886521123567:?BB@>=;:7:?92==+IwX4<>:63301EbbXpcNi`&\"8:;?>86:>>>?=<847<===7267468?A81245668=FHECCVkopjWSE;@>=:865324<?<9;<845:?@?:2-/6=<78:;=@DC?95;FPN@;9/-KgM1433@@3,./+,,+*-/0//RSVVTTUTSTUSPNOPPOPRTTTTUUUWWVVVVVVXXYZZVRQSSQQRQPNLJMPQSRRRRRRSSTUWXYZ[\\[[[[\\\\]]]ZTQNLLLLLLNPQQPPQPPPQQQQQRSSRQQPOPPPPPOOPSQIHIIKMOQRSUWWWXXXVSRRQQSX_krusjaeqroqrmd^[Z\\acehlnnnvpSKRRPPQRTVUW_deeinomhaXLHOY[W_s|zkirtu|v~zyrtqclvqy~tnmmlmoqstz}wqnosutw|zwzxwtifpy{zskhktyywvsonmljhimooppppnrvxwxxz~xff|jomnnmonqxgswRYWU`rwt|s½ĐUVpkXSVY\\\\^rmWZ[[\\\\\\`Ystowxtlgimklpsui\\QRbttww_gzuV9>MTQOOOPPOSVQJIKIGGGDIDC|A<>B@>>>>>?KXVKC@J^o{qevXRXXJFEECB@?==GKKNPRPOQOOQQOQTTRRPNOPPOQKJPZkml{{fUPSR[m`IIHIMOPMIGEEEGGHMUUQKDDCAISTfrbT\\W[]HKGECA>ATjfRIK[w~rmkmmmjTZUQQOOQQOQNV[QT]]WZ\\YTVQMMNOQQOLKJJIHMccD>EFECBBCBBCEFHJJJIHGGGDCCCDEDDHMJGIIJLNNMLKKJJKJKKKKJJJIIKIDHJJKLMNLIKMMLIGIIIIIJLPTTUUTTTTQGHIHHGGFFEFGHJJJJKJIIIIJJJINTRIB53:7:88EhjepkaKGGB?=J^aTORSQIEEFEEKSTKCBBBBBACDCCBBCFIHINQPOPPPOMJIIKLLMLKLLKJKJFCBABCCDDDCCCBBBCCCBBBCA@GXG:?A?=?B>U}WMRMKIGECBBCLMLIECFHHGFGJMI>4:FIC;9>BFGJC;325=CFB@@@?>=<;:;<=?ABA@@@<:7@DC?F[_QJGGHIFFHIMNLKHECA@AABCJOMJH63436=CGFC?=>;:6>BHPRNIB>?=;<;;;<;;AKOLFCHQRSJEC:9:98:;::997788999998899998877644:7:>D@<9;987665664572335666655332001111112332223579;:3NwyT/-686346676653222478776668::6455546566547;?BBBBAABBBBBBCEEEEEFDCB?>?@???@BDEEDDDB@A@@;;:87689630-/4:BIJF@=737:>@;9>BBAA??????????>>><<<<;;:::9:=?@>=<<<<:9538<<<<>@>=?>:4342221244444431245433341/16?A<75332168303322224678::97GSE7146?H@8:9887668::4.1469840/113688:964579997555532334685568;;98755668<@<<>DIC:64.'(3FNSU@8?;4312;DD=8667789<><>>=<;=AA>ECOku4:JI@<GMJFGOG44579;;96431015CH@END==33<@JLB:207BD@<1.//4996/6@>98986458;<>=84;71<?65/127@?>925=:8781+,25:O~k[VODIWPG?5440147:;>?@>=FQTL;57;>EA1*,--/138:86544666726@D;2121/-/<B727649D>99<@L^lgXTaokQ7011.068643320/01100018<=<==:45<@;3;?5=MGDG?842./Owp_hraQXL4?NTVWV@.4?=>CA:4456;<;967646;>8.,28:98:AGHFGCNhuwkyjWZE48<?;996558<<97:><75679:5,/6;=CS`^RE<;>;325;II712/&0TL596/4>9./2.*))()*+,,SSUVTRSSQRSSPNOPONPRTSTTUVUWYYXXXXYZZZ\\\\YROQQPPPOOONMPRRSSSSRSTTSTUVWXYZ[[\\\\]]]^^^^ZSPONNNNMMPQQQQRRRRRRRQPQRRQOPQQRPOPOOOQUVRNKJLLMOQPQSVWXXYYWTSTTRPWgqokni^blnlkoqi^YZ]^agjlkjemfQMOSSSTVZ_abdefikllhgj_KES_UZmt{}|}~wpoty}mqyoqw{|yywpvupxxljllkmsyx{rquwvusrtuz|xsk^avvolrtqppsrponljiknoppppnlotutux{s^Wttx~tqonmnrwchT\\WU\\punx}v{mƉQgbNSSSTYXkiUZZZYZX]_O|d||u{ysnqsprvw|hQL`uxyymSb~d<>EMUROQPQOORQKEFHC@BCEJI@{D<>@@??>@AIROLHGHGGLSnc\\TZaXD;AHGEEGKPQPQPSRNPQPQRQQSSSQQPOOOPSOMIMdbaw{bWWYVhyo]MLKIHHMMHHGECFGGIJLPOJJBKTe{~kV^^c՘OOJGECC@G[h`JGMO[efjlln{\\WZSPNOQRRQQRXWPTaeaa^]V[VNLMOPPQPNKIIHJ_kR@DHIIHFECA??CFJJJJIHIGEDCCCCC@ELKIJJILNMLKJJJJJJKLKKKKKLM\\LDHHIJLOQRNKMMLKIHHHGHJOTTTTTVUWVPHKKIIJKIFGGFHIHHIIIIHHIHHJIGPSIIF=>;8:9;Eps{NNWOKGIVYRORTRKHEDEDGMPMD@@BBBACEDBAABEKLKOQPOOQQPNMLLMOPMJJKKJIIHEBABBCCDEEEDDDCBCCCCCBCB>DcrbKD@=>AEQj~aHTNJHGECBBELKGA<;=DHKKJHHG?88?FD=:>@@@A?9324;@@=<<=<<;;;::;=?ABBA@@>=96>DA=@LZXOMJEGGHHHKKLJHGD>=>BEHOOKF;7:5:@EIB56:;<:878;@FLQPKD>;::<=<:=ELRPECNPOLLONC:9999::::9878899999989999998886Dj`n^QG?@=;876766455333466553444455676631111355689;;;5VW.,5533456665544443356776668:964566654335;?@AABBABBBBCDDCCDDCDEFDCB@??AA@@BBCDEFFFDBBBB@@@@<5786419MUV_ba^YR?6149<AFFB@BCCA@@?????????>>??=;::988;?@><;;<=>?<9;<;;=@B?>C@746743312444344333453333310115>C>843328>;544222245:=<98934@=07Om~Z;9666778;@A:118962-,./0026656444665545689<?@?>>?=>BCCB@<866679;>CFFHG?4052)$,:>@IOH<621258:96555668;=<<==:;<=>8;A<CXa_ddB7BU]WOJF<3216;=??<;86448>:28=5152AU@A@=O@/5FLA63679<8/*0<?:99753459;;;5,-02200**-/.3==;85=D>4/8BLK<AE9:UG@WZNCFSPF>448789<???BB=58?@C>979?=3,,./1211462135762/.,4DF935;JZYUpyWON;4<=;9845G^bYW[WZY?0.23--11//0/133431/--.04776447:;96<A;885<;/,.-+>leUXZSRXNDMVZ`hdH+/>=@DA6.2504;9566446881-.05:>ADEEGGFDETowkqhP]O922:>;??92/4=A?<=@A?=>=:7304:>>AOY]]VE47>;62045/*,0./7:8996.-//340/120/,)((SSTUTSRRRQQQPOPPPOPRSSSTUUVYZYZZ[[[[\\]\\]_YOLOPOOOOONOQRRSSRSTUVUUUUVWXXXYZ[\\]______]WQPPPOONMOQQPPRTSSRRRROOPPONPRRRQONNOPRTVWUNLNNKKMNOPSVZ]]\\[YURRQRTX]_hsuhTQ[]Y`ec^ZYZ]`bccf_WetfNNRSVWXZ\\_adfghjllientaJKVROYdmsuxzxtnfjzwefovyx~tklq{rehkjkmoonpss|}}yspqurnorrupccetpirsokiotqnnoplinrqqqponmosutuxs_O_wwwsr{usrqpwtpf]T\\WW]kuss}}~kEËXTYVW[YZXijUZZVUVVW\\MjuRda^fkjknwxtpyiSbsy}ztqs~yx|hTXd_ZVPNPRSOOPMG@??>@ABGKM=pLCBBCBCBEIKICCEEFGHIDtoQxr\\X^fWGEGHHJPQPQRRPUVQTUSSSQQQSRQQRPOOPTRNQ`pnhgzi[Z[YriKONLMMKKMNNMJHGHHHFGKMII@Cl|r~t`\\fwLRGGFEFFGZmUFOMNQUW^a[e~dTVWTOOPRRRRRSTQMNYca^acX[ZPMNMNOTUQLJIHIVbVECIKKKJJJGC?@AEJJJJHJHEDCBBBAABEHLLJIJKLJJJJKKKKLLLKLMKWfiHHJJHIIOSNKMLMMJGHHHFGIMSVVWUUX\\WOMMLKLNPLFKLGD>ADHHIJGIIIIIJELVQFIHC?=>==<GO]}sRNPSSQOQRPOQRPOLFCDDEGJKE@@CDCBCDDBBB@DNRRQPQQQSSRTXXWVXYVPKJLKGGHEAAAABCCDEEDDDBBDDCBBBABA<B\\i\\H@?@@QsoteNVRKHGDCBAFIB:74457;@FIIFC?@@@CEA=====??;88:>?=;;:9::::;<;;=?AABB@?=<<79@CCB?GLRZWEBGHGFGHGFGHGDA??CFGHHDB?>7=DGC8/13489998779@IOUQE=9:===<@IRVO?FTRMLPTOF<9889::::9878899999998999989:;;6]jakMH>>?=<:8665434433334568765788::;;9843336999::;;8@jW58=7258852334455443335676668:85345665434;@AABABBBBCCCCCDDCCCCBDEDCA@@AABBBCCDEFHHIGEDD??BBDB96867GZfheedccbd^WRRZ\\[RD?@BCCBAA@????@@??????>><;997:>?:7:;;=?>===<;:=AA@@E>8;=<74312333344443452013311321:EE=43;??BA>84322335779826<:743HWX`J43655668:==<75:7.+,---.01234445444334668:>CFGFFHJIJJGFD<7755678:?BBA@<7671+09=:7>EFD:443688644555679<=<;;;9:<==AC@=56Vk@;FOSOI>12HL:<??@@@><:99872-1:BA:2KoP47f]15A?846:8787439<8776545657861-*4=6893342269:;;:9?@44?NeeB49D<57/.ATQABOOD;65<A>;>@BBCA70//2<@:4364-),-.398444./553/,/0-1?B==6=qs]MAA7>C@:;;>HU\\[UPVT?203;77;:766348==<9421.-.14;C=5799:>B>30362--.)7d|z{kYa_ONTNMPPQX`_VC07=AB;42360.:9124655653220/7DMNKECDDCA@TlnrfJR_D/03<ECCB?:58CFA>@??ADHHC;438:<=;8:Jbi\\LDDED?76:6+-6<=;;:9:70,,/42-1:9420,'&TSTTTSRRRRPPPPPPPPPRSSTTTUVWYZ[\\\\\\\\]^^^]aaWLLPPPOOONPQRRSSTTTVVVVUUUWXXXYYZ\\\\]^__`a^[VRRQOOONOPQPPQRRRRRRRQPPQPOOPRRROMOOPQQSUUQNOPMLMMPRRS[a`^^^XQMORPMMRarpkhQGOQRQPQSW[^aa_^^]bkpo_UQORVZZZ\\_dgggjklqicrtbPMQMLTaklnsqgb]dvs_aputxvjnv~sgkmiknkb^cm{{|~}zrglskqrowxosvyttxhchsvpkortrmryvrqqpppqtutvvhX]qso|lz~xvvusw}tjrzVV\\WY\\epuvy{y[KTѓ[`ihngaUet[ZYTTSSSUSOܕ]ellaa_\\_^aabpril~yvwg]XNOQHFNLW^E;DJOW\\TPOP=cXFFFGGHIKJIIJJIHFFDHIvoCR]t~iXV\\b[LDDJQRQRQRSQV\\XYXUTQPPQQPQQRTTQQRKMaihnl_ov^ZXXxrTXTONPPOOMMNLJHIIS[\\\\UFF\\xps~egaURRFGGFFGDcrHJUQ\\\\ZYX[WYb_URRSRPQRSRSSTVXRNIPagcch_Z[TNNLKMRWUOJHIHS\\TEBGIKJKLNNLHD?>DIJJGGHECBBBBACCEJMLKJIIJJJKKKLMLKLKKKMKS[VFLLJHHIKTTLMNOMGEHIGHIGIRXYZVVXYVQPPNNNOPOHHNG@7;@EHKNZQNKKJIEGKMAAA?@AAA@?;;AHOJRSSSTRRQQPPPPPOJEEFEFFIKEBEEBBDCCBBA@CNTSQOQRRTTUX[\\]]^`c_OGLMGFFDB??>@BCCCCCCCBBDDCBBB@=9<A99NMC?DAQzjTRPLIGCA?>=;7531001348CIDA@AAAA@>>>=>>@AAAA@@>;999667<>?>??@AAAA@@>==;99=@BCC@?BOa_OFIDCEFEDDCCEEBA@CCEEEDD@9;DD<766464558::;;;<>ENJ=9>?:;<<AMVNDMYSMPQPMHB:989::::987899999::9999999:<?FE@LMH=@@>?==;964433322333336::999::::::;;9889:;;;<<;;6P~Q3774679:853333456544334456667::6346653356;@AAA?ABAACEECA>@AABBABBBAAAAAABBCCDEFGJLKIGFFA?@ABCA;:3:[jedb`__`abdfhd^SD?>>@AAAAA@@????@@????????>=;;:;?@<8:<<=>=;;<<;;?CBBA?>?=;:98533333444443332//11013447>CC96?EEDC@9443344:??>>GF9:426?3.2048976678999:9663/-----...011344323333432369;?BABGGGGGEC;6662158:=>;::89:889AC87;<98==:966786335545689:::9889;<??<<=;;1-VoF?<77553-/HTE@ACAAB=9867750.02:HI70:51:akD003/1466349=>?=:877755774111.-,8A0-4115434:==<<;84,0AS^V4,6=?AC<6;NQB@KM<1/1=HB<>DFGC<2//+1>B:1--//,-.024556779;5-(*/4837BHF4>}t]UILmk@>O3;E<69<<=GW^RNSL:356=GPKF?8557<AB@;8741-.1:Q]E28<<<>@;5332111/*=^aW]XMX]KISIJVXYXZald>08;<65985226610279::732225ANQQPPMJGD@65HZeyiOR`T6256?JJFNXVMGE@76;?ABCHJE;46;;;=9/.NmnovfTTVQMRO9-5;<=@A@AFD70.....1<923550-TTTTTTSRRQQPPPPPOOPRSSSSRRSRSVVWYZ\\]^^^]^a`UMORQPQQQRSSRSSTTTTTUTTTTVXWWXYYY[\\^``abcb]XTRPPPOPPQQPPQRRRRSRRRSTRQQQQRPONOOOQQQQRQOQRQPNMNQPPX`a`a`]XQQRNLKLTgmnzrTHNPLMPRVZ]``^\\\\cihhljbZRNPTWYZ\\aeegijmrrf]cjcXUSMNX`flpje^V`vnZ`ttmu}ufkv|siojhjich}{yzz{ywrlswqopu|~||zv{ub]huvonqsutrtyzurssrrrsttuukeqzuzmo|ywwus{xrkaWXZWZ]fkox~~mvueON`\\]ܗ\\deabe[eq_[XRQQQQUWJZXk|}wnfkcWSUWZlry~`rb[\\VOLUcTJVogMZkicmzgZRNF]iBFGIKLLKKJJJJIIGFBFGtmBKIQ_oiXVPNSMLSXUMOSQPRNT`WTUTRPPPPQQQRRQQNJJISaVZgfcmaZS\\{x`]]]XROOOMLMMKHGMYde\\KIIbJtwouaՇMUQGFGFGAIvg@LQ^ga``[[ZTRUURQRSSTTSSSQX_[QMKO]kmjifY]ZROKKNPRVSLIJJPWRGBFHJKKLNNOQNC=@DHGGFFFDBBBCDFIKLMLKJJKKJKKKKKLKLLJJKKLIGGFFGGGFGFT`VNPONKGGGHIIGIPVXYYYWWTRPNNNOPQROIEA<;;=?EKKkqXLMMIEBBAA@@>??@ABBA>@DCDFHJLPPQSSRONNOOLIGFGGFHLIDBCCCDDCBA??DLOMNOOPPQPQPOQUXZ[cg[KIMIEEDB@>=@BBBABBCCAABBAABBAD=;>E<?IE@>CUWpsSOLHGF=;<=96675458867:?C@>???AA>>???@@BEEEDB@=9898644:ACA@AAAAAA@?>=<;98;<@DHIHCAJ_WFGGGGGHIHFDCDEGGECEEDDEA:6==9;;<<<9547::;;;:9<BG?8EH;8:<>DQQOUYSNWYQKLHA<:;:9::877899999::99898899;=CIGB?==<==>=<=:997776443454269::;;;:98::<==;:9;<<<<;<;4XH,17107:97665444445543323334555797433434467:>???==?@BCEFB?=<?AAABBBBBBBABCBBCCDEEGJLMJJHGFD@@ABCC<1?_fab```a`_cfbZPE<:<>??@A@@@@??>?>==>=??????>>><:<ELJFD@<<=<;;;;;<?ABED?A>778==73333444444332100120134445=@@><@GHB>:5333559UfOKh[46353/2549<;87666789889766662/--,----011223333333335789;;:=ADGIHA746640.16;?=97667:>DC=56=67?<==;85554323445688889879;;<<<<;;;8:9-0>A>40.,*,0239FCBDEEA>9633430-,./6>;5-.4:62,,,-363468:<:8744556655772--.00/.0-2;9668;64=AA;3///16BFB:24569@==@FJC@GE6,./;GC=;CKKB6..1.4=?<5/-.156663211006983//567>;8BFA8GcbA2*(BebBDO27A;58::;>IRRMI</2=ABMXRC921;A@=<9421./,-/9S[C4:>>=><6332/*,/,+3875226@J@FZA7HSY_hnpnU3-4424::65741/.17>EA71566@OPMMRVQJD?:4,.7B\\lRILNF::DMKECTkneXLE>21:@CBAEGC<<><::9409Wmt|ylfbY^X?0.=I@526>>AID4-40-215520.242TTTTTTTSSRRROOPPPOPQQQQRRQONMMOPRV[]^^_____^VQQQPQRRSSSSTTTUUTTUUTTTUWVVWWWWWY\\^``addb]VTRPOOPRRRRRRRSRSSRRTTTTRTTRPPPOONOPPPNPQPQRRRPMLMNPSZ^`baab]VQNNOMN\\v|zrZMLSSPRUX[^`^XZ[\\adeileYQNONPTW\\`cfhikkpseZ[\\V\\]UTTWamrljdX`t{ifu}x{vfejjiw}rkkhgbhwu{}z{|}yvwtqov|zywzzn`]huuqrrstttsvywtuussttuwwuttx{}iu{wtvutuqqr~QXXXWV[prmy}pp{bQWX\\^_Xˎ_Y\\]eaaja[VQPOPRTUQW_ce~ul\\VVWVX\\glvcIJVYV]b[PHPtwOdypl`[nq\\aQFIQvDIIJKLLKKKKIIIHGFEGL{mAMLLPV[[UVTNNPPPRPPQQQOTZ`WMSRQQPPPPQQPLLSSRZ\\[_``bcca̹jXXjxqg\\]ggbWPLIHILJGFIPUZ\\RLPvSBo~uvt]mRWNHHFHP?d{EBHLei``a_]SOUWSQRSSUUUUTVVVY\\YRLLPY]ghiZ^e\\QLMOPRTSOKILNMJFDEIIKLMPPPRQJECA?BFIHGECBCDGJKKJKKLMMNLLKKKKLLJJJJKKKIHGGFDDEEEBFS]XPQNNMJHHIIIIIMSY]]YWVSQMLMOOOQSRKE@>?=<=AFGY{_NMLFDBBAA@@???@AAAA@ABB@??CEGHJOQPNNNOOOOLGFGGHKMKA=@@CEEC@@@BDEGIJKLLKJJJILNPSS[ef[MHKECDB@>=?ACCBBBBBAABBAABDGVSKA?CBAB@<Pvtu~}[KHD>DHMG@636<@CLTRHDH@;<>?>>@@?>@AABCEGECA?=;::;;;8759?CAAAAA@???==;9889:;>DIIIB>DHD@ABCDEFHGDCCCEHIFCCCCD@:8:::;=@@@=;:99:;;;<==>A?8GRGB<;@=BSWUVTPUUOMMKD???;9:98788888889988888899:;;;=>=><;;==;;;;;;:;;:86567546689:;;998::;<=>?@?><;;:;93[M).24467776555555555553334556435677543333236:=<<<>?ABBDEEDBAA@BBCDDDDBBBCDCDCDDFGGGHJKJJJIIKIECAAGC2Ccfaba``abcgfVC;::=????AAAABA@>=>;:;<<=>>>>?>>><:=LVTRNE><=;:<<;;<@ADEA@<7;><??83324444555444210110023424:?@?;=DEA?=9534566JYGCMF512834MK>@;976666677777767896420/-++,./01133344323469;989<;;DKMJ@4466:;5347;>;8559=BGE926;8:@><=9656542112356787787789:;;;;;;:::>@73;@=52354573/MbGFLIB@B<42451,,/2249;43450----/1425<?<6431/243456664200.0231/5CMC9:?D?68<></-16756<<741.27?>?><?@@D=8:<9>DCA;;KMB643757;;951/14:=68?>5,++***+/:FIA16@?62:G<7(-/3IVH?FE24>?78==>><?IH9108ADHNSM9115DJA964/-.-+*((1?D=9<<<>?=614:;3++.154576458<6E]B18=CMZhv|c5-30046889:50/.02;FD<:>=;FNLKMSK>?A<;96322LlXFA>??>KXRANkrfZQKE?88?@BA@CECGIB=:;?@><Jdq~}kajT-*+@\\P53=?96<FCCND/-1242*&(++UTUTTTTTSSRQPOOPPOPQRRSUXYUTUVVWY[]^_`aaa`__^XRPPRSSTTSTTTTUUVVWVVVUTVVVVVVVUVX[^_`bcc`[UQPPOPQRSSSSSSSSSSSTTTSSTVSQRRQQNNOONMOPPRRRRQPNLLMORVX[\\]bcZPNOONMUk|x`LLNNPSWZ]_`[UTV]bdipof]XROOQTX]`chiihhpvl\\TTZZV\\[TXhxwmf`euocn}kcjfcdhmmorrsnikgh}v}rrz~zumkry{|zyzyvlfc`hvvsvxwtu{ztx~}yussuvwyywvvwztkxxxusuvxt{poQYXWVQ\\|}rw|yy~`UrdWV[]XRǴúYY^d_YkgYVQRPORWU[ml~ddkrrhjfeg`UQROS]YHKKJQVY_eWNR_n`ailj]Uhk[fVGIG}zELLJKKKKKJIIGDBDHKGM|kBLJKLNU\\OJXZVTJKRPQRRTRPU^WPQQQRQRSRPPNR]nsrh\\`_aac\\hŞpZdogkp`RU]bmriVGDEEFEEEDBEJLQHP_[mz{zrSoYWUKIIIMBOz`>JHOela_ba]QLOQQQSSSTTSSQPUTTZ_ZSNLKMXgk]]idVNOROOTWRLJJMJCABCFHJLMNOOOQURICFNNJHGECCDFJMLKJJKPSQOMLKKKKMMJIKMKIHFDECBABDCGKOVVTRQNMLIFHJIGIIIKQVWUUSQKGGIMMOOPQNKC??>==>@JHbjRHEBBBBAAA@@@?AAAAAABA@BFILJHIHLNNNNOOPQSQIFGGHKORJC?>BADDCCB??@AA@CEFIHIIKKKKJKQZadXHGFDDCA@??BDCBBBBBCCCCBBAGQYYWVIGC?>?=IonCB><5AWaWJBDKOUY]a]Y_WMB;<>>??AAACCEDEFD?=::;<=>?@?><76=CCBBA@==>=;9788989:?CEDCBA??>=<<=>>?ABBCA>@EGCCCBB?;;::;<=?@BA?>;9:;;;<=>==<7AKLME;:;>MXUUVRKJLNMLGEFG<9998898888878988888899999:;;<<;:;<;:99::::;;:977986422478:::::9:;;<?DDC?;:99:73\\}M.026666655545666655455443445653567978432259;:>?>?ABCDBCCCEEEDDCDEEFFDCDEEFGGEHJJJJHIIHHJIJJNOKD>>FH;?Zfba```bca\\WG;;?@>?@?@AABBBBAA?>979<<<>>>>?>>==9=KSSTSH@=<;:;::9;A?AE=76;@@@A>633344444544443211100244326<@@>>@@@A@95444560.1314630.1GWH<;87667765667767788999983-,,..-.1234455545679;:758;;AHMOD5364:JPH<4259954:@EG@7579;>><<;:866886445556777777778::::::;:99:<<;<CB62BXdXPG8O|PIMF>>FB62783//24424;>73-/0../0,+17?>75?B<:9412467511///1484/189546==75536;7358865641024=>87@>;=?@A;;CABBCEE?:FOD9=713:<;841.5=9<::<:0,11+)''.?RZS6.99+*0998223489558933:=:8AFC>:53A@16=>DECDB;55<II?9994389510./3879::<@B?<>CKTP<-5>:9<BIHA<3/>RMA:;?<5@oX*/5014669<;7310/,.;HJGB<=BCDHIOE:;@BAB?553Aj]BBCB@>AJJFY_MJMKGD@>ACAA@@A<<EGB>>?EJF:<INmjb^>'0/9TQ?GOC>:7BR^gY7*/442/,*((UUUUTTTSSRQQRRQRSQRSTVWXZ\\\\[]`bc_____abba`_``\\TRQRTSUTUUVVUVWWXXXWWUUUVUUUVTSRTVY]^`cded^VPONOOQRQRSSRRSSTUTTUTTTUTTSSRRQOPPNMPQPRRRRRRQNLLNOPQSTUWZWPNONNNN[pppx~|aHIRQSYZ]``\\VWY]ahntvrkbZVUTUX]^bgiijjkorld\\YZTZdbYXhutoffs|mbt~bahecghjlhiu{yojjl}o~~{pp}zz~zyyy}{qhfgchvwsx{yqsv{}vutuwxxwurqstrvxdlsuwwvvvz~sw}]RYWWSQhqn}xuw|~}~cY[[_[YZRVsW`ca]oiWZUSPOSZ[eql^udjlk[m|{xtppvwk]gXKMONNKKLT`]SVXWV\\XOJ^x|gY[X]^SL@r~GILKKJJIHGEIO\\SDHO?K~cBMKLLJK\\XCEKPVRONKJKIFMW^WQTQPRTTTVWXZaelWXfecca^jsedYQ[ooZONPQSZfjaULIHGFFGGFHMPPY]es|zkR݌UXQJJKST?iuHLNGL`jb`bc_TORRQRSSSTSPOLGM_]T\\aYQOOPPana\\ffXNLOMKOWVNKKKMIDA@CGJLNONNMNTWPIU`[QMJGDDGJMNLKJIKQVSMKJKJKLNLIHEIA<9;?ABCDFEBEUadYPQSOLKJIJNNLORQQRRRTWSMIFDBDHMQPLLIDB?>>==?GJVcLCBBBAA@@AA@@?@@@AAAA@BEJUSSQJNKMMMNNOPQTRLIIHIKNORRLGB?=AEEC@>=>=;<ACLMIIKJKKKIJOSZ]VJFEDEC@??BFDBBBDDDDBCBCAHSUOLOMJF@>>>:Pfjv|D@;:@5:Shd^`_XXWW[\\_bdeU><>@@@@AACCDDCC@;879:???AAABC@77ADCCA?;<>=;8666778;<=?@@@@@@A><<<=???AAAA><@CBCCBA@=<;:8=>?>@@?<99;;:<?>><:88<DLQF:7;;KTUWVPAAJONLGGJH<9:9888877887898888888999899:::::;;:8888999:;::88:754234568;;;99:;=<<@DDA<9::;7<dsB+0347766655444566776456544444664555952256?IJGBAAABCCBBBBBCDDEDDDEEFEEFGGIIIJGEJPOMKIIGFHJJJKMNKA::=BC<C\\c^^^_ce]PE?@@@@??@@@BB@AAABBA=979::;<<==>>===<<DOTUSIFD=:::;;:;<;??76=?>>=954344444555533331111/0244127=???>>>:8:74333234432445536>B?<<:86656664666666678789:95/.00000024565555679;<:755:<<BKOC6363-8Vf]PB<7754<CEB857889><9;;:877:;:9;;968766677678::::::::99::9:<@=329Qg_VH8JqULJ@79CA5489522330.16=;81//0022-,16<=8AJJF@82014785231*/2694--*)-2199223227:99;:720/014?C7.26:;=?AA<:=@ABCFHGD@H?10-%2A<873..:C97<:2,)0884204EZ^VOD;<9/))0884342001384116>:9HKD<;4*?^=,46C>9:::66CJD=;<<88?CEA<;666459=>ADAERXZeiR=DC668=FII>17JXXK9;@=4.PyU'.3124447963221.+(/AQM?9<@@??CB>89>@A@966.=_RFJGEB@>AEHKA8=AAA@>?DD@@@@=66:>@AACHG>;:;<_TZ[<:LA,299DI>768@O\\gfS?9<;;:7433UUUTTTTSTTSTTTTUUUTUVWXWVW\\]\\[\\^___``acba```_^[XUTTUUUVVWWVXZ[[[ZYXWVVVUUUUTRONORUW[_`bde^ROONNPRSRRSSSTTTUTTUTTUVTUTSRRRQPQOLORQRRRRRRRQOOPOPQQPONNNNNOOOOMY^R[gm|]NRTSVWY\\[VUY[^agknqsurg\\XXY\\^_adghijjjotn_]bX[mrk\\S`moidivtoz}mccbddeijlllpy}qjhfo}xisywts|{wnigfjfesxsqssnkyzyxwwxvrpnlkjhlz|jflrxzzywvxqTUYXWQZvwg{ysqqvwt{odxV\\]ZZT[b\\hc]njY]VPOOT[grqpk^ےejjqcZ_^m{xmhncXUoѨgYxeMOIFECFRRLKKJEKPJJTfogeaXUPLBhWEIIIIHGGGCFWmo\\JD3W[CPLLLJLSRNNPSRPPGI^mmv^LZRNQQSUZgmmhh]]nO\\c`a\\\\RjwrdKRP]qlYQPNNNLKPSNJJJJIGHHHKMMMNXoyndZtXVOJGU`S`xZCLLHIT^_`dea[VSSTSSSQSSPPNKMWa`\\YURQSRMTc_YfeUQZTVWRQWSLJKMNNIDDGIKNOOMMLMOQRSQPPPLIEFIMNMJIGGIPUPKJJJJJKLKHD@KMOZ_L=CJPOHDLeuvaLNROKKOOLQX\\]]]YSST[\\UMIHGEBCGLOJFFCC@>>==>=HKF=@BABAAAAAA@@@@@@??@@BHJJKPIGKJJKLLKLMNOQPOMKHIJMKRZ\\ZRLCAAA?=;;<?@CJVFIGIIKMLKIIIKOV^ZG@EFF@?ABFECCDDDDDCCCCBGKNRTHDDEBAA>;<=>ADN>;9;?=>AFU`eg_XVUX\\__^_aZ@=>?@AABBBCBBB=868;<@@ABA?@BC>9<AAAA?<=>><966789:<<<<=???@?@>==>>?@@ABBAA?=ABCBBB?>;;:97===<=<:9:;;:<?><;:89=DKPJDC;9@KXYRH:9FQPOEIND9::88888778878888888888889:::::::::8878878789;;98707765678:;;<;::<===<>CC@;<>>;NyvD+13458555565544555775446554444654456:31<DJSRQOHBBBCBBAABDDCCBCEDEFIHHJKJHGGGFGEFLKPLKJHGGIIIKKLMF;855>@;Od^\\^_giZF<?@@@@?????@@?@@AAAA>;9::999:<=====>>>>GRUPMPPI@:;;;;:852159;;==<975443235544443321111/132105=A@A@@>82362012112332243457@@56<>;9865665455666667788::85100012224457655557:>?:756::<BIH=43660)5Qdc]XL=549??9346689>>;:::887:=;:<==;98888667888888899999999;<=:4309C?<618IRJB935<:7678645762/156:::98776536523=HL@;94/0/.158859B>/07;1+15-00+03..12138=>@>60,/11:E=*%,-2:?AEG?769;>?@::C::4*0?>9@8240,1>=55850).;BA:57MdcO:587890).175112.//09F:0/4<<<IG?:9627X\\.'7?;<=?5,3BE@;9:;;;<@FFA>;<<<?CGFEHIKSUUerePG?88;?CFE54Vqk_R?56>G;:YR1.21112420./342/-,)3KO?:BJIC=9655787:;8551=VTOTOFA?98@IT^V>489759=@>@B>50118CC@FL>26BH>I}q>FJLcd@%*-(0>8,/;AIT`h_OJJIE@>?=:UUUUTTUTUVVUUUUUUUUUVWVVVWZZYXX]_^`aa`abaaa``_][XWUWVVVWXXXY^a_]\\[ZYWVVUUVUSQPNMMNPTVVUVYYTQPPOPRTSSSSUTTUVUUVUUWXUTUTSSSSRRPMNQSRRRRSTSTTSSQQQPQONNNNNOPPOPUSMRVYgrhTNQRQRSSUSSUY^de`\\`gnqi]Y[^_`abdfgggijmpqke`Zcz|dWY]hjjz{z{xuqoldbdejmkkjkigny||vidklbc{{wstwb[_elhbmxqgfjkghz|{xuttpjkmjouoopllszzyzzzvxzolsQXYYXUf~nnzpllom||mcW\\[VTtüŒTYcYilY_XPNMQYnxpnmcqejgaotkfhigrxspj`Za\\goOby^PUMXfbPLNEKTPC>EHNNJS_lp^LJNEZ~aHJFJLLMPPMIPXacTB3bXGPLLKKLNNOQQQPPMO}FM[NHNKQ[jyvfTQQnPR][[\\\\WYqfU\\TTcqaRPOPONMLKMMNUWOKKJJJJJLHIaqg`_`[SLIJYaX{oAGIIIGJRX`fea_XRRSSRPPQQONLKIJXaYSTSQPOMNW[Vck[VwmdfgfeZOKMONOPMJIIKNNNMLKKLPSSPOQROJGHJLMKJHEDFKNJIIIJIIKKIGR|{JFNSUFMtlJHNLJHLPNRZ__]\\YTTV[]VOKIKKIIEBEFBBAA@>>??;@CA==CBAAAAAAAA@@A@@?>>?>DLNJCFEHMFEHKJIIIIJKLOONJGHIKMPX_hqiUHCA@AEJMPZab:=CGIKLKLKJHJLMU[RGFFECBBDFEEEDDCCCCCCBCFDTuygYSFDEDC?=;<<::;;<AC>:528@KfkcZ[]^_``ad^C9:>@AAAABBBB@:67:=>>ABB@?>@AB<7:=>>>=<<<;9889::<<<<<<>==<<>>?==<<>A@AAACECCCBA@@>=<;<CB<<<<=<:8:::==>><;;7G[[OGL[c\\M4B\\\\N@67BPQROIKG?;;88888778878888888888889:::::98886657877779==;:85;=8899:<==>==;<=>@BBCEFC@BA@c}L1689764455576644555555455555433553446>?BINRNMKGC@@@ABBBAADFBCCCFFIIOOONIFCCDDDDDEJIKKKKJHGGGIKKKNPE843796I`]ZahlcM@????@@??????@@?@AA@@?=<<;979::<<==<==>DNVRMMLMNG?=;:<<::9;@=<?ACFDBA<53123334443332211013038:?BACC@<4..,)-/..013333333363/2469999756554455666666688752100011123456555579;>=977899:>FH<224540)1Ob`_]O:5::97435668=A>;:::98<>;<=>>=;::9:879988667878899889:;:985389-+.13<FF>:8:;:::9:946:743247837<A@<;9671+2CI:-/1....+/47;5ConB-:A;3Gkh_R6/44//257:?BB=61/1/.>F4'/677:=?HQH73669:9/+7610->_iP:71//.6://6453/0<INF=JedE1,)'%'*-,03525300244>L<..07>>===:986/6bK(6;<?AA4+7A=99869===;>DD;9AILOQQNIKQMHLXkwlN:>HIFBDH@3>rxedT?;EK@7AB730-/463,*.37741/.,0>DACMOMIE?<<><6225444;Unj[WVOGC>?EIVtuK225411259=>:33439DDBKI7//DR>1bK36/?b\\<8B8(0@:/3=DGP\\aVPVUJA?>=:7UUTTTUUUVVVVUVVVUUUUUUVWXXWUSW]aaaefddcccccbbb_[YWVWWUUUUWXX[ab`^]\\\\ZXWWVUVTSTPOMNRSRPNLMRSQPPQPQRSTTSTUUVVWYYXWXYYWWWVUUUVTRQPPRSQRSTVWWXXWUSQPPPPQQONPPOOQQQQSSRSUWTPNPPPPPQQRTV[afbZTSWXVSSW[]^`acefghhjlmool`Y`txmdTYcix~|zwspnlke`ehmojhkmiegfk~vicfddy{yuu~wb\\dliagpkdbehgfiszvv}|{pimojktwxpdqot}yzzyvyyiw|YTZXYX]r{en{okknmyuqP]WSx~LY[ioX[XQONUaqvnljkZffiieceghgqztsugW[h^`[Na`HJNHgcPIRWRKEGNRJKMNX^WMKPINxhHOLOQTX[[ZRLMNR]U=jXHNLLKKNOONNOPNPI^yCMINc\\QX^ac_WOLZX|aLV^]]_a`br[R[XW[heYRPPRTSRRPPQUYXRNMLKJJKFD[nj`MyS\\PJOYXVqwTJMIIIHINT_ggc^WRQQRRQQPQQONNMLKORSTSQMNPPSTQ\\ngaxshiox{gRLQVTUZTNOOOPPNLJJJKNRRPOPPOKIIJLLJGECBBDEEFHJJIIIHGDSNCMQR@kpJEJIIGHGHQ[aca^YUQPTYTLIGHHHJLJEDB@@A@@@@?<BAACCBBAAAAAAAAAAA@?>>@INONOLH@HMECFFHHGGFFFGIMOOLHFFEGMTV]sydUPSSWZ[``ZJ<;?CEJKKLKJJJJJJOUWLDCIMFGFEFFDCBCCCCCCDC@\\~vXMFGGC?=;<77=?CC<8888609Ufkba_^^^_adaN<>B@AAAABBA@>769=>>?AAA@@ACBA?::=>====;::998::;<;<<<<?==;:<>A=<;;<>=???ABGIFCCA@?>=<<FKB<;<<<:9989==<=<;<5@fm]LGViodC?UXI;:9>L[PMFYc?9779877887777888888999::::::998765556665459>=<;;<;:779:;<>>???;;<>BEDCCFFDC@MwzL39:75544356644445544345555666423443445<GMLLLIGEDCA??@BBBBBCEBBDEGIJNRTRI@AAABBBCCDGICFHKKIGFHJKKJNPH<59<72C^_Zej`OBACA@AAAA@??>????@@@@A?<<<<<=<;9;<<<==<BOYXMKJA?DC@=;<>>>?ADGC@DFGIKKIFC@=:74444333222110229CA>@AABAABA6*')+-00234344334332123367998764443446678765431/.//00////123444457;?>:658:;:89CI>2121261)5Sd`WH89<:96434556>D@<:;==>??<;=>>==;;:9:;<;98656789::9778::::96554.,04<BACB=?@<;;::;73485221143126@=96343+*4;4-27854/.-045749^^=1=C:6PsiOD1,340-278<??;5322204A@2/6<>:8;9:IK:/34542/,.//66<PYK764/-053-/3353.-2>KNN[\\C/.00/-')03557431368==CF922-0>=58><;;93*Ea@1?>79;76DC55@A9457987>A;<GOQTTTNDBIFDTgtpS;9AKMC<=<67DgymbQB>:55577650/385,+0589741/0566=HOPJGJPQNQQC2*+07B?Fk|o^^bVKKNQNDRdJ2333552158765667;@CEIC5/*:H=-FmT116+-HQJPT@1;>9?EA@EQ`g_V\\_M<=<412UTTTTUUUUVVVWWVVUUUUUVWVWWVTSY`acgihhhhffffdeea]ZWUVWUUTTUVWW[^``^]\\\\ZXWWWVVTRRPONQRPONMOPRRPQQQQQSSRRRSUWWX[[Z[\\\\\\ZYYYXWWXWUTTRQQQRSSTVXWWVUTRQPPPPPPOPPOOOPPQSTUTRPPRPOOOPPMKPUUW]dhg_VPMMMNQUYZ\\]`bcdfhjkllmnngajusoriSRgy{wplknlhgfeioponlllkkmlmtpcghj~|{xv}majkcbeeedfggfehkfbjuwwzqhgjtuv}xr||mw}xzzzvxttkNXWXZ[aq}}|}{kjxxpmnou}npseTYQpտzTTkoWSVRQ[ckpmmkhm\\qocijkjihhk{xynYSX]VlmXYYUQRIMv{ePZ_TPSPIQXLILJILRTNNLJznEW]ZWZZ]]YVTROQWYGpTJOLLKLOPOOOONPRG\\׌KRYJZ~nTUQINWVTT\\YrRR___`aig`RR\\WVXW__WRQRTSQPQRQNNV\\WOMLIIMLRbl^PE`[XPJ[fS]dF`]UNKIIKTaiid_WSRQRSSQOPSTUTTTPNQRSSQPQPNNPMQcjkqoilrx~s[OTajprfVQRRSRPLJHHKLNNNNOMKJIJJKLJGEBAABCDFHJKIHHFGCCV\\seUCDMOHIuPEHIIGFFCJ[ffc`\\SMGKPOJGECCBBIQNFCA@A@@@@?>?AAAABAABBAAAAAAAA@@@?BMWRRNLLJJJD?FFGGGGHHIIIKNONLGFDEGLQMWv}f[]]^[diP<:;<>ABHKJJKJLJIJKIIQQCAKUNIGGFEDCBCBBBCCCBAHf|lYNLKDBA>;::@@;858:<=>BGVghgfc][]_beZIADA@AABBCA?=67=@@@ABBBCCCECB@<;??>>@?<::998::;;;<<<<=II@9::=<=;;::;<;<=>DGHFDC@>>==;<FLC::::99879;<<<<:=43MijYCFTZ]RBJUG8=9>_RDPq[=;99899::7888788888999::::::998765555653238<<;;;;;8776657<>?>=99;=?@?><AFDD?d|S/6<9655555564234555432235554654334433446=EJMICBCDDC?@ABBCCBBDBBDFIJINNPI@=ABABBBBBCEH>:AFIIGHKONKJNG=<97686?Ya^i_F>@BEECDDCBCB@@?>>>@@@?@?<=>>ADA=;:<<<<=<ESQEDLH=:;<;;<>>>@BBDECCCCA>>=>BGHFC@=:6543332221233AMFABBCDCDHQI404-1=<754433456544322456788865444556679842.--,,,-//....001333457:>>85579::99?C=53212461-<_iZ@27;985334444=GA<>?CDBB@>=>>=<<::;;=AA<9:977889::9879:9::975444433>HNRE><9777788312100//10-358=:965961010/6>>930/1226889675/464,/@J=,)'*01/-/036883134432<D:3400514;709A<0/0000110.-11/29:2-.--./.0367630-+-4?IH7*0764554469<<;48@97:<@G?:;6-/;?7<@>;;9789S^==7./6<@HC68GLD=755526:;AGIJOQPJ?9=>EUfjV;=HD?<622/.08GYe^G<>:301344343377/,3777662027;;;DNNHFHHJMLIG=.')0=JKRn{~sbSGHQSVUF=CEA<439>:43311334755;DF?5.-276/3>519=3+ARNON>6:75DRL>Jcoqk`_b\\MC>3.0TTTTTTUUUVVWWVVUUUUUVVWVUUVVUY^`dfgghijjihgffgc_\\ZWVUUTUUUVVVW[^`_^\\\\\\[YYXVUUSRQOLJKMNMNOOPQQQQQQQRRQSTTTUWXYZZ\\^^\\\\][YYWWWXWTUTPPRQRSRQRQQQRSRPOPPPQQONPPPPQPQRSTUUTPPPOOOQPLIMRSVY[_flj_USQPQRVX[\\^adefhijjkorwupsjbgmjmv]jxphglongfefglvxpihkkjkmrppyjbf|{ywus}}~nile_bfffggghigjrtkcdjpmmh_o~zxxom|q|xzzzwvnVQXVXZ]cozzvrppkilnowv_mevv[ZTbǽұaPhoYOTSTfmjkjljhih\\_hjjklmlq{~zn[TWZVRrxYSY[SROHnic\\VabUPSUPTTKJLIKPSRMMPEz|IV^_\\\\Z[ZWVXWUURRGwNNOMLLMOPPOOOPRSF`RHVTMUdTFGMRQXYVZ]ZbeU\\]^_`ea[LY[VUWOMXZTRSPOOPSRQPPQ_eQLOIJPR`nieYcX[RKWhhYy|EQfcaVOKIIVglie_WSRRRRSRQTVWYYWUUSRRRRQQRQNMMNKTo{thcnxyspdSSct~vaTTUTUQNLIHIKKKMKLLJJIJJKLKJGDCBCCCEHKKHFFFGF>;:=DA>BMQONFz{cJIIFFEDACQegc`[OJFDIKIGDBBA@DMOHDB@A@@@@@@@CAADCCCCBBBBBBAAAAB@ABIPQQKLKJHFCGGHGGGIJJJJIKMMNMIHHHGFIFGio[[][^mW;<><<>ADFJJIIKLJJJKJDCJJCHQUQOJFFEEDCBBBABBCA<UmO???@?<<:8799899:>FMGFWenmh_[]]adVCBCB@@ABCCB@=79?BBBBBBDEEEEBBA=;?@?@CA<::9878999;;;;:;?IMF@;97<:::<:89988<@EGFFA>=<><9<JJ<:;:9999:<<<<<;:9;@^m[GDFJNRHBMD8=8AtdFV|wV@;78::::9888777778::::::99:898764445544459;;::9997642027<?@@?;:=<;::98<BFCCl`=6;9888767666343555664223445455444444434448AJGBBBABA@ABBCCCBBBCBDFIHIJEC?==BBABBBCBBDD>:<@EIIIKNMJD?BB<9549::PbebC7<?AFEFFEDDDCBB@>=?@@@?@@=>ACEDDA=::;<===@A?<?GF@=<98:<>?@BCCDEBAA>=8//413668887644433222115;CHHEBCEEEDDKK=8736=<86434447777654322334777656656788741/**+**,,......./1111359<><755678899:<;543234561.GdgN4278643223457BA<BFGGFDA???=;<=>>=?DIJB:>>777547::8789999876555658GRbdG:100134563/36611230-479;7769;:7203688::2-.21257768413551*-2-)-.-,-00-,,6A:31169:56BE723210/3>?946:6.,4;5/.//-----/20*)*++,./6<92./..,).52+,1322357999@A>;OR;9BKLK?9>8-/9AA@<98966=5:[X6.15=DHIE?@A@BDCA>:5315;>BJOLIHEAB?G[c]QLONMKGA8008=?ESUE67;432/11222566658::857867?A<;@FF@?KSJ@>@=<;72236;>K`m}xcI:=HPTRHCBDHF<57=B?764100121/03<>81-/00102339AD;1>LD<;632225CPHQlvtpfWOX]J=80.TSSTTTTTTSSTSTVUUUUWWVVVUVVVVWZ_badfijikliggfgfda^[YWUUTVUUVVWY]^_^^]\\ZZYYXVUVUSQOLLOOLKKMOQQRSRRQRRQRTVUSUWVWYZ[]]]^\\ZYXXYYWUWWTRSTSSQMLKLOPPPPPQPQQPONOPPPPPQRRQQQQPNOOOPQQOMLNOQPQU[cd]URTVTTVXYZ\\_abcfhijkpspruvrrrj`Zpxjrpotxyoccdcafr~yeahjjjmnil}w`k{wvuqqx}ky~jkgbfhhhhijkmljsn_^``jmdk~}||qjuri|zzyxwlubRWWVWXYdsvvqmkgdefilpyhknjieWVhrĹwSal^PTUWcmiluohigi_nbgiklnoqtx|p^Z\\[\\[WacYWY^VQOiuY]__]WQPRQNPQOMMORQMLNP>mNRUZ^\\Z[[YYZZWUSTExKRONMMNOOPQQSTURK\\CQOKKHV\\JIOTUTTT[`[RotYX[Z[^[S]qGZYXVWUKSYSTWXWSQSSSUVORaaXOKKQaa]\\vRWKQuyij~`@TZab\\ULGHWjmjf^VRRRSUVVY[YYZXVVUSSTTTSSRPOPQMMZjtulegrthccXRaqvzvdXUVY\\VOLKIHHHJJIIJJJJKKLLMMLIGDBBBCGJJGEDCDFECAA???BUXQMTî}w^MJGEEDA@BXca]SGDDDIKIGEDCCCDJNIECBAA@@@@@ABAACCCCCBABAABAAAA@AAAHNNKIMIHHGFLIIIIIIIIIHHKMMMKHIMMLIDC@M|`WZZbgG8A=>>?DFILKKJKLJJJKJD?@IFEFPRQLIFEEDBBAA@@@@?=Lz}~S25Qo>9<937==<<?EJMPI?BQgsoa]^_`[JBBBBA@BBCCB?;:=@ABBABBCDEFD@@B?<>??BBA<::98899989::9::6ARWQMKC9689987777:9;AFIJE>=<<<:8=HC;;:999:;<<<<<;:99<Jb]MAEKIPNEEBE@8GoL[|}rT<==:::::888778789:::::<:998887655566447899999787653217<??A@?=;=;976666<DBIS>7::9999888987555555775545554434433444434511:CCB@?@@?ACCCCCBCDCCDEFGGGC=;<==?A@@AABBCBBA?==AFHKJGB?A:=HG>44;<8FecD6686AMBEGEDDEEED@=>???@?AA?@CEEEED@;:<=<<=<::;=@B@>=<<>?@A@@ABDDB@><;95790+./0112433332222/0:BHJHFCCDDC@<;=9656656654333567999874300/13688999888884/-/-,*++,--././../1011126<>;9865777888:9643346554.2Nh]9/565332113522<?@EGGEED@??@AEIKMDBHKMH?DGABIZQ=7:8889998887668<:@PVdcD4/0/0023403AF;1245300233..02697578535;B>64.-/132,..,0340,+--,0451-./-*,;ME104>?=88DB5;@HH>8>B?:3/13..=A6/-//.,,..021-+++-..-262112000,,5972.**-168;?;9:=AMD6;Pl\\E8122,+2?B=5785:<673B`D/8?CEIIGEB<58;;@DBB>725;CLOIEHMRNAKbbbomVTcga[UHES^QNSJ@=BC?:1,.,-/-1878;;:976899@HE;:AB=4:Q]QINNIE@?>=9543;HSqa62>MTRNE:;AB<778:>A@=<:5100/,.4763/--/0122356:==<;==4.-...00-0@QZjtqg_N=LcUEA4-UTSSSTTRRRQQRSTUVVWWXXXWWWVVVWXZ`fiilmjhkkijigggfc_]ZWVVVVVWWWY[\\]^]\\[ZZYYYXVVWUSSRQRQMKJJNPQSTRRQPRQPRRQRSUUUWY[]__^][[[[\\_\\XYYXVUVVURNJJKNONNOQPPQPQQPPPPQQQQRQPPOOOONNOOQQQPOOOPOPRTUSOLMRVWWVXXXYZYXY]adhjimmotqnuvmltnntr|~~wjabcbcbbq{ggljilkknmynwzxvqommzinzyyvtruxzhjidgikkklkkklgdhprh[Xcry{}~}_N_{}}{xvunwQTWWWVU\\jmkopnjfeefgigefnjctym`PmaOȸRYk_LSV[`ffkuehfgf`upjhiklnomlvvecha[]^]XVXXWUUMc~_`b`\\TPONKJZ_RNPRRSROLNHtRS][ZZ]^_^]\\YURRTC}HTPONMNNPQQUXXXQVjDQVOIKISZLHSWXVVXY]ZOZ}]UXVV\\[F_eMa_\\TSWQPWUWbfb^ZWUVWUUMRhePKPO]pbVdTNKb}qa~IISJVb_]QGHXjmjf\\TSSRTVWY]^\\\\[ZYXWUUVVTTTRPPQQPQ^lcfstpppe\\`^U]nqmje]XZ^`]TNLKHFGIIJHIKKLLLLNPQRPNIFDBCFJIGED@ABENULHIDAZ^VSVs~}iRKGEDB@@<FYaTFDDCEJKIHGFECCCGMLEDDCBBA@@@AABABBCBBAAAAAABAAA=A@<?CCDFGFLMKJHIIIIIGGGGGIJLMLLIJLMKGEHD<PuVSZ[N@>>?@BDGKOPPLJJJIJJJJFA;@DDCCEHIIFEDCBA@?@??>>=A`}ztF:]m*7;88;??@EOUSNJHB;;Nmud_]ceR@ADCB@AABDDA=:=ABBCCBBBA@BC?<<@@===>>>?>;;;889999::999989EVW[cb\\PB8<=?DFJJ?9=AGIF><;<<;97BIA:9;:99;;;;::::9:<?U`UOH_WHLI>FXM:Jdy]\\~ntwiKFB<::::89999889::;;9:=:878887655566536888877665569::>AB@@?>====9534438?AHA768999:9999:98666655766567875532233332445535>AA@??@ABCEDCBCDEFFFGHHIJF><>>><<@@??@BDCA@>>@@@ACEA;=BH@<FLH;9>>:LiU21441>TMECDCDEFGD>=>>>??ABBABDFFEEED@=<=><<><<<==>>=>??BCCB@@@ADEA<;<;:8;=;3/2244322222222206HJ@AFEDDDB?;866664444444555555677777543212235669:966540)&)/1++-//.12111012100//058;;:85677788887654455442-8V[;-56333221341.3:AEEEDEECA?BDJMKKFDGHIDCKICIaylD38:78999988879=D<>JPXU?6520012205DJ>2/158542100/-.18<::7449?FIHGB3+/5;6/+,0010/-,,.0//14/+*,++177,,7@928B;12G]ZP@=D?411/-*+4>95520/-+)')26461,.14.)*.4?=/*+)(/:?:3.+(*29<@C=1-478439HWC-.-&(*(-6:64<43@?7:64L^;6A@>BA@>;9::4248>DE?;=CGGDFJLPVPCIR[w_U_ddfhdZWTDGQMSUSPTWOID:51136437:7434446<><;;<:932I\\XbjVIGA=<=>=97:66^]24AKQSNHB?:23:978<@BC@=<9:97227974341/03653775429BC;51.-,././-/E\\hgZPRMBVxt^K70UTSTSTTTVWWWXWVWXXYYYZYXWWWVVVVYckjjkkgehklkjghihfc`]ZYXWWWWYYYYYZ\\[ZZZZZZYYXWWUSSSQQQOLJJLMOQRRRRPPOOOMMNOQSSTW[_ab_]]]]]`ec`^YWYYXYXWTQOLLMNNNPPOOQSSUUUVWWSPQQQPPPOPONNOPQOOPPQSTSSRSSOLMQUVVVWVVX[\\[[\\aehihlppssjchffgpuv{zxm`^`abfe`b{xajlhnqpqmp~~{yxomkqnszuorwwxxtquncjiagjlnlkjlkd`ba`bbep|~ydU\\kwz|zxxvvdUUUVVUReuiemoonkhfefhhe]\\cm{iefvxT[dPföTWk`MSTY^`_hzlfhfege_hhhiiijheftsgmnd`aa`[WYYUQSJhe_eaYRPNNESndTQRRTWTNIKV{[O\\[[]acb_\\YUTQSSEFUPOOOOPPRUWXXYOVpLZZRJIKJKRSQVYXPTZWWXTO}dWXXW]aHh]Sa\\XQPRRPUVYjmfee`XWYVWPLZc\\PNNWlogp_XGXvq]OCO_wmZ_hYJIUgkheZTRSTUWXXZZ\\\\ZZXXXWWVTTSSRQPPOSRMcvjfstsnf_bd\\[hngca]\\^cb]XRMLKHGGILKJKLMNMMOQQRSSQOIBEKKJIGDFEA=MYPIJHIRXVWXQUbcgn{bQKGECB@?@AOZN>CDBFLLKJIHFDCDEJMJDCCBCA@A@BA@B@BCCBA@>AABCCBBEA<::>??@@GLKIGGIIIHHGGFGGIJKMMLKKLLIBEHGC@Qxz\\TXP@?AABEFHMPSVUNKJJKJJJHE@;9<?@?ACGIGECBA?==>>?>>>?M\\^k̾4.B<;=?ACGRYWQMJGD>:8\\ype^bgS>AECAAAABEFA:;ACCDDCBBB>==<;;>A<:<=<;:=><::889:9:<<::99::<FNXdmlf^VRPUXYXNB:9;>CFA=<;::98=GHA?=99::;;;::::9:<>DXf~rqUMG<HWR<GW\\uiejYksn^NB>;999:::998889::<>:?;:877865456665558876667877:;>==BCB@>>=>>?9424568;>FE:689999988887667877666667766753225543344557;AAA@@@ACFIGJDBDFJKLNOQUWOB;:;<>>>>@=>?ADEA=<>@A?<:7?EFKJ<6>FGA?BA?SaWQ?7579K_\\OKKJGGHD=<?>=?@ABBBDFFEFFEEDB?=?<;><;;<<>?@@@ABCCA@@?@BC?;:;;:;?BC6/344542022223234<NM95@EEEEC?;87776534445565554446666655556643211796223430/021.0455666666643320../1379:86567778899776444323/-@S?,15322221231038>CCCDFFFB?AEJIEBBCDEDBHLE=?PNJ=79:99999888899=A939DGB;:50./2222CG8/../488865544215<?>;57EJHIIIRYE02;C;=KLG>52//---,***+,/.(,.,+251484.8RI*,MljT;497/,01/)*9B=8751-*+.1*,99=;/-/0/*(.=F<,,312411354,*04;@BC>0+,/223:;3)'*)'*/1,-111419C?:::16VU9>B<998556==3/457:??>=AFA::HRQUQE:Fa{xZSV[_cheWC:Uhb^ZTMZpse[TJ;355//=?5011//2424972/11*2Lf}fC<=;;;<@C=543.GiJ.7;AGQXM:0-17868>BCEC?BDEE?:6347:<<74556546777?=:?A@:4.+,,,./,0HYQ@AMKE[|iD20SSSTUTUWXY[ZZZZZZ[[ZZZZXXXWVWXV[bb^`ba`acgijjijkjhea^\\[ZYWXXYYYZYZZZZZZZZZXXYXWXUSRPPPNKIIJKMNPQRRQPOPOMLLLMPSSSY_cd`_a__adhhhibWUXZ[\\\\\\\\ZUPONNNOQRSTUWY[[[\\][ROQRQPQPQQPPOOOONOPQRRRTVVVTSRRSTUWVVX\\`cfghjkkmnoqqrsthWPUn~yuy}{uttkb``bdfhf`decihrrjo{~~|{zyqevox}yurrvsxtnlchgbiijmjjklmga`dg_b|{utyztxusrnnqtwxx}yz_VTSXVTSp~pmopomkheehihe`baY]bgcjmuv]xf\\WXVgeUXUV\\_`fhcgkgeghjc_cghijnos~ueejjffe`[Y[XSPOPPWyjY_c^URQJPr|cVRQQSSMIGKPbjHLS][\\][YXUVXXWWV|CUPPPQRSTWZWUXUD~ETYXPIHIGISVSU\\YTSTTSTSO`v_[[]`eXwWS\\USSSQOQTTYbeehhb]``YTRRPYdWLO[iiXOFewZpjJ[MjtSO^cUIOdmhdZSUY[ZYYYYY[[ZZXXXWWVUTSSRRRQQQSNH`dVcklgcehf`dgd_\\[^djf_XTPLRWOFHJPQMNPPNLMOQQRRRPKGKNIHHGDKKHEINPLKLMRMMOUZ_\\[[\\toaQIFEECBAADJJE>BA>EMKJJHHFCBCCDJPKFBBB@@AABA;B>BCDABEB@BDDDCBEB;;:<@?BFJGFIHIIIIHIHHGGGHJLMMLLKKJHGCHLKHDWh_YQB?BBCEFINRUVXWTOJJIJJJIFB@<8:8;>ACEEDCA@>===>>>>>>I=;z,BE?@BBEFIRXUPMKGC@>@Bqi\\ceR@ADBAABABCCA;=CDDEDBA??=;969@A@78<=<;:<<::9:::<;<=?>>????>=GRdmhZSVXQQWTMB=;:98=EFA>768:98?IKD;9:;:;;:::::9:;<6Dq|iOC>JQM>COHfiuwPFcomc[HB>::::9:9898:=A@<9=@?<998765456775666655779::;::77;BCB@=<;;<:74357889<FF96678898887645578887666677655554455455444:BDBCBA@ABDFJHHDBDLOQTTTX^ZE742469>>??>>?ACEA=;<>><:97:BKKE=657<?@AABCBVj^LEEB?Ocd^`^[YVLD>9?=>@AAABDEDDFFFEGEB?><;<<:9:<?@BBBCBBCB@@@@@>==;989;?FK?2224443222223337?GM?3=CEJGD=976666654342344444446666753568876546;<;:;=?CGKLKC?@C@:76799::9665431/.014545557767:<:9875443322.0CF2/4432221221026;=?BBEGFA>@DHHB??CEHICEC<;73246::9999888877789;7.-776662/.13449>1&+/++29<<9655422699:73>UTJCDIYk_=/793AjjK>;841/-+(-3-.789;918;<B7324:@Ta?1Nck`F3063-,--05>B?72352,/:FL>7:7751/00-,0;@>?FJKE3*,-,/14;<;=BH@/*)*1548<5230-,2=?1,0/.+1AC=68:5-;^O@LF:;7225:AB;67668::8?HB<2<SSTT?4do\\XY]adliQOiqg^SORapmsrXSO3-646>:11220/2216:8331.*%5bkG8<<98:<?>:33;63`e319?GZ^A,.0-29;=@BDDC@CFDA>=956:@A>?@A;548=BHKG:28?@:5.)*+,.0/+8KE8?IFDPZ]O4,-SRRUWUUWVVXXZ[ZY[]\\ZZZZZZYXWYZYYYWWXYZ\\\\[_fkkllkllje_[[[ZYXZZZZZZZZZ[\\\\[ZZZYYYXXXUSQQOMKIHIKKLOPQRRRQPPOMNMLNQRRUZ_aaabbcdgjmnqpfXTXXXY\\__[XVSPONPSWZ[ZZ[][[^b^TONPQRQQRRQPPQPNNOOONPSUUUVWVSRSUWX\\_`_ahkjjknooonpqpvueXR\\spaipkciliihca]m{cahqocew}|xywopڸzzopmklfhhhkhhihiic`hkdbcbq|y{tllpsqprx~|xsveSQNQZWSiy}tqtsqpnmjjmqnfadf`d`Mcblmjh^Vv~STbfZ]]\\\\__Z]bjuojlno_X^ekov}gU[eheed]YXWTRPNROAYpUXeeYQTGfhSMPQQQRRJLLL~qL[ZXTTRRRRTUXSK^puCSRRQSTVXYWVVWKaILUWTIFIJJJMTTU_aWQROORUZYfn_^accZ~RV[UUXYWRPQRV]egbemprogdaUNS_ZNJISgwcTKMS_wK]`S^h]OFTe`LI]ljaWX_aa^\\[[ZYYYXXXXWWWVVTRQRRSSRQOMROkfSbjjfglpld`\\Z[]agmf^YTRMS^YMIGO[UPONLJKMMNMMLKJLLHEDFFFHLNNNNMMNQSaXjUSQS[\\ZZ]\\`OCCBEFCBBBBA<6?CAFLJHFFEDCBBBAEMRIBA@@?@AA@A>=ABCCIONDCEEDB@=M[SQA9?DKHFIJJJIIIIIHHGGGGHKLNNMLKJHA7>NWQFDR_dUAACCEIHNVWYXXXZVPJGIJJKJGEB<;:;;>?>?CCB@><<=>??>>AC8D8ECBDEFIJLLLKKKJGC@=<;D}wbZ]NACECAAB@AA@=;?CDDDDB?=<<;97;DC;9:====;;::9::<<>>>?@BCDEECB?APgriYUWY[[VHB>=><<;;CGD@;9:;;77CJB98::999989999::;:8IoaHA?EIF>AJ=PdkW?3ShggcRIA=;::999898;EI:15<>@;9985554577766664457789886627>AA@?<:9886555676788A<444666766655445556665566778645654464556557AFEDCCDBCDFJIFBBDLOQQSQURH71020359<>?@BBB@?>;9998::98::>KJ@835:>=;=?;9Smk^XVTPOZbeghfd]ZXO?=>?@BAAABCBBEFEFGFFC><<<;:;;=@BBBCDBBB@@@???==?>:89<?GNB321002233222469?AED:6??EJGF<67666666448<86444444445788999:::;<?DHKKJJIJMQTSQLHINJ=678888989:888851/02105668778;=<;:765433133,4B;0354222122212677;@@CEB??@BEEC?<ABIMA9557788887999:878889868;82.+/011.../3678:2')..-.4;@@8444447975312AWYPGIP_mmL*..-/BI=9:963117>PbSAGBKfZ<EH?A8663AJEMIQ`[beW?254.+(-7=;96.).=EB70:RK23--5874/,/15ACBS`]H952-&.?FFA<=FOA*(--4898952:>5-5EC2073**4B=753330.H^PTN?=:38<=BTZ9453227=FIFC:8GOVP0IqvyaLOUWYY`aTXd_[XQR]keVnjV_>-457302333101118?><@9/28;HC9>AGI=3147776;7)DlM6INO\\S4(/23;DD?<<ADB@CE@:;>>?ACGDBJG<8538@EFE;67:::72/++-/020+3EA:CKMOK?870++RRSVWVVUUUWX\\^][\\^^\\\\\\\\\\\\[ZZZ\\[XVWYXXZ[ZVZdllkmooookf^YYZYYZ[[[[Z[[Z[]]\\\\\\\\ZZ[ZXWVUTQPOMKIHJJJMPRTTSRPPONNNLMPQRSTW\\`bceffilnppqup\\RQPQSWWWWWWVUVWZaggd_Z\\]\\^cd`XPORRRPQRPPQRPNNMMMMNPRSSUVVTTSTVZ`a[W\\ehghknkjkloqqstusc]lz~zy|dgrggvxnfccebhhahmogbj|~|qӖҥ|xuoffggjkhggdaba^hrrkdj~{xzrjgnvwy||~iqo\\m|^Udntyzouzxyz{zxy|}rhjmfRa`rmouhyh_^eMTae]aa`^^_ahuw|yqjge`[alpwnUSZ_a`a`[YVTRPONRUJQtVSah[PNLfpQMRPPWcgYQQBwvOd^VTTRROOQPQKSdftFQRSSUVWZXUVVULQGSQRSKIPRRSRXjlhoha_ZZ^a`[U[{}a]```XtqOVXW[]^^]ZUTUVafenulknmjljgaUSPHMkmc\\]bcafOXQNKNSdd^caSLUa^XU_gcb`_^][ZZYXWXXVVVXWTRRSSTTSSRM]p[bjlkmrtnaWY_badhc]WRQKNSWXPHGYWMKJKKJJJIIIIJKKHFDDEGGGJLNLOPLOOS\\b|j\\VXYUTTV^PA>@EHDAA@=CHKSVYVNIEDDBBBBAABDDKHCB@@@@@??<IXB?CKSTPFCCDFEC?I_UbYF>EKHGHIJJIIIIHHHGGGFGJLNOMLKIF;6<ERVNEH\\oX;?DDINOVaa`\\YX[^]SKGHIMMKHD@>;::;;:=BCB@=89:;==>@@2_6=FCEGGILLIHHIJJJHCA??B>Gle]UEAEECCBA@@@?;;@@AABBBA?>=<<=AD@:;;>>>>==><9:=?@@@AABBDFGGEEC@Mm~q_X]cffJ?A@??>>?>?CBAA@=;:96;?B>:;;;::989789::;;8/F}OB9::;=<>D76IZG<5:Xbe[TPG?=;9998898:?BJYinU89876544567766544323554664348>@@><:99866456666566584233655556766444455664566566544443465445558?DEDCCDCCDIJFCABDGJKKNHLF:;=8;7777<?BDFDB<9777888:;98887@MG:48;>=::>?:Jfla^a``_][^abddb`_T?<>>@AA?@AABDFDDEFEFFA==<;::;>@BBBBA?=>?>>==??=@B?99=?BG@32235323322149@DB@<8:>@?DD@:8888886679=D=8654444334568==>>???BEJOQQMKIGEGRTLFEGGA;:97765789;:89<93//1/.36688889==;9875332134.,7;3155322112222479=@@CB>>?@ACB?;9<=:789777889876699999988899:::?:-/00.,./1479:81//./359>BA71.017628;854>T`b_\\_ciqW.,-..-2:732215F^myKPZ\\piL>:9:8995>H=<Njn^TQJ9-...0148;753-&*@UZH24CJ<-(+4<:3-,.17>7,@_^MRF25AFJNKB@CFPB,/49;=>;956>>2-6C?/0;8++7;324/-./,2L[PHB=@AEGC:GYB661/17>A@A@A<9AK81|VVpwbPNKIJJHCBNYUMIIQZenaKqcaL/110024310000017@C?=96BRSDBHD@HRQB2+/58632**UcCMQLNA1-.0:EHC;68@ECDFDA>;<?ADGJIIE:5742457449<::974.,1334331*->DGT[^\\K:785.,RSTUVVUSTVY\\^_`bbaa_^^^^^][\\\\\\\\ZXYYZYYZXUZcffhlqrqqpmg^XYYYZ[[[[[[[Z[]]\\\\\\\\ZZZ[ZXVVVSQONMKKIIJMORUUTSQPPNMNNNPOPQQSW\\bccdeffdbacgeYPPNNNNNNNPRSTUV[chjmi`YZ`cdcbb^UOPRPONNNNOPNMLKKKMOPQQRUVTTTSUXZYWX^b^^fopmknppqqonvzpjnrsvxyvg`kyvf`hpib~sdiklkffqyzsszx}xПڰz}|uebddfijiieagsx{|ryvmdhms}s`Ŷsjeglw{}yyv}uqkant_m|{lly~xk]ebacRPTij^dcba`_j{zi][\\^^alo{z\\W^\\[\\__\\YWURPOPQUWOLwsWS[b\\QLXdqX]YNNZdhg^YExMUWUVVUSQOOPRXg]MfFVUVVWXXWVTTVTXgZMSSMMSQQSTTSNUgnmvwqpprme^Y[Vbg]]\\\\WoiNVWY`eaadda`\\SUev|vofgoruyxm^YTWzrtxqt~qrqa\\PPDHURhj`^^WOORNR]egdbaa``^[YYYWXXVVWXWUSSSTTSPTURW~rxyb_ehiglqk^\\efb___]WPLWQLLXTLGNRNLLMMJKKJJJJJIHGFFFFGFGHHIOYYLFCEMWp}cYWVUXY\\XOHFFDCDDDGUdpyyvjUJGGFDCBBBABCABDCB@@@@A=BTf}LGCCSSMGECDFGFB>C?KQUEEIIHIHHHHIHIHHHGGGGHHKMMKKIID>=BELRPLGQXL@@AACGLSXZVQNMPV\\ZRLJHOTQNJEA?>><;;<ABAA@<;<=?@BD9bU;BEEIJJIKKIJJJIJJHCA?AB=9T`^O?BIEECBA@A@>=>?>>=?@BBBA?>>?CB=>>=@@???BD@89@C@?@AABBBDFGEEEDGe}d]_`bQ>>@????>@@>@BAAA=;<==:7=A>=>;::99868:;;;;;:8OfH537:;;<>809CE?:1CQRMQUKB>=:8889::8=Tsg7889754456776653221133468879>@><<:8876643466554554333334556678854434676567655553444334456446:@BBDDA@ACCFJHDDEEDEFHFHJTQ>@EBB???=@FHDBA=776668:<==<:8:88CJ@9:>@@<;?@;Jhpc^ccb`_]]_cgiicXMBA>=<<=>?ACDEGEDDDCDGF@==;889<>@@?@>;9;==<<=?A??AA<==;;:73279743222104:BBBB>9:=?OX=57999889887:>=65455543333326;@BEDDCEGILNMJHFHDM^d[SMG=54899:::988:9::;;731/--16777757;<<:975543222102531344222232125;@ACCBA?>>>>@@;668789;;9778899::9:==<;:98789884;D33011344356766651-/58<BC@><;977108>@>86AXcje_`it]41026:;<9521/9_kQiu\\VZO>3786678>?;E`lWD:887879;:<97=?<80)'5MUC38?JH2,2499.)-/.460*/@KX\\REJXVNKKFEB?NA.45:>AB>;9;@>238?9/09:5;@5.,-,,,,.*4VL<=AHNLI@12AE:5227<>=<@>@@;<8,[h]nxXECBA>8>RYOD>?CBEfyJ8oq_\\;.0012110.100249B@4.2;LXRGGONECHPQH9/18951/&9i_;AND2.0118>>:66?ECDIG@:<<;<@DHHIB32@B5/571/38944652//7<<855649GNYhjdWE954531SSRSUUSSUWZ^_aceeccbbcba`]\\\\]^]ZXXXYXXYWW[^[[bgklmnnole]YYZZ[[\\]]\\\\\\]]]]\\\\\\ZZ[[[ZWVWVSPONNLKKKMOQTTPOOPQQNNONOOOOPRSV]bbcc_[TOOQMJNQQPPOONKKLMNMMOPT]jlkfYU^a`b_\\_^VOQTSPOOOOPNLKKJJLNPPPRTUTSTTUVUVY^`ZVYbjmnopqqqqporsstnjnlnno}ub`jzp`gqi^k|djlkkfgjfdnoirys|Ġؘ}g\\_bbcgjjlifr{mp}zpvy~wgmx}zehuhcfgrulluxqbed``eSvVSvo\\ccedceo~xgcb^]Z\\lz|]Z_]\\[^]YVTRPOPRTQO[geuTTX]\\QRaex~_V]XRY\\Y^kliTxSPVRSUTRQQQUXYWML]H\\ZYXWXXVTTTTVQFOWRRTSRSRRSSRWe]S\\gjhnu{qefdjaQj_[\\X_iMTUab]Z[[]_[VQWgqocbiqvvvutroka[[ftvvxsonjgcWOSUSUUVXYTONNOWeiedcccbb`][ZZXWWUUSQPPRRTTRRMQUSRZ^Z_odU\\`][affbcfda^[]XQW}xULSROMEKMOPPOLLMMLLKJHIIHHHGFFFFFFNTTF??EKP\\zwg[VUWX\\\\]^]RD@DDER]jw{ucJHLLIHFEDCCBBB@ABAA@@@@A<Jrb\\XgL9BKLJHGFGGDBCBA>>MNHGGGHHHHHGHGHHHGHHIHFJMLKJGEBACCGMTRSOHGJIB??>@=>=><<<==@CLOMLHN\\[VPKFDCB?==>@BAABDFFGHHHDk2=ADHKLKKIIJJIIIHIGDBAAB<3BakJBBFFBBBA??@?<=>>=;=?@BBB@>>>@?=>@??@??AEE?8<BCBA@ABBCCDEEEEEFCNvg^d\\L9=>==>=>=>>>>@?@?=?CEEC>??>@?=;<=>;68;;:::;>;:WtfK<037::=>>=>9?><769:=LRMEBA<8889::8JwL8889754566776432111137:9:;:9<=<:97655543334445455441223345567875444656666777675445533345765:@CCBDEDBBEGGGGFIKHGGFGDJS\\]NBAABAACEHJD<;;7556679==??=<:985:FE?>CBA?=@?9Njof]^dfcda__djkl_SWRMJHDA>>?ACEFHGDDBACFJD><989:;=>==>>:8:<<;;=?@>>>??@>:74321>A887222104AHB?B@8:=GaX878899899888:9753455533333337=CEGGDBEIJKLMJGFFIchhge_QC=<;CILMMLG@859=:99850-,067775579;;;:85543211122111244222232128BFECECB?=<=>??:65788:<;9778::8657=D9-37:;87;F_lR>9412799755544453/-.39>BDEHKOPNHGKMSUOKEDT_`jb^lqV/-/27;;9:;:507]~f[ajcTMOLE=5468CEK@2Oq]:3EHLOKED@83.0?G?9/)%*8;38A<=@835136.(,+*.131/+9PQS\\\\WPKB@?@?8D;+253:DD=4/0:>;<?<50/7=;EIA<51.+*,/12KO68AEHDE>3.6?:2258=FLGC=>ABD8DlWdnUDCB<:::FWOB@=977-:h_4F[WcU5,//1/./332256:?8**7<FRM?=IUPHDBCLK;238950+)Wk:;L;.0244346756AGCDKH:25;=:9<EJG;4<JI9,8E5.442.03227::=<9;?ACIMKR`]MA=9-)/10RSRQSSTVUWZ]^`a```abcdfge`][]``\\WVWWWVWXXWVUUX[^_acded`\\ZYYYZZ[[[\\\\\\\\]]]\\\\\\ZZZZZZXWVVVSPOOMLLLMOQRPLIKPRRPOOONOOOQRQQYcfgh`SNMLJKLMPRQQQQOLLLMNNOONNVbefjkaUUY\\\\Y[ceZSUXXXWVVTROMMKJLLNQRRRRTTUVWWVWZ[ZUV[Y^hnnoqqqrsstttwuchiUVafddemy|bbhhecwxgnpmkjjkhcabfmqtsk|ޯu}|lS[bdedhjjmkv}|{ouz}wu}uphxdcmgedqwuoiadr`eccce`dbPpk[_bcdfs}~w{}yyxpgeuv][^]]]^ZVTRONOPOHJSqiosSX_aZQWbdf_VUPN[fd_ajpo[j]MVRRTTSSRRVWRQKT\\V_\\[XWXXVSTTTUSQTUSUUTSRRPPNQ`maOYf_X^df^XetzjZun]X]QieNT]j]QRTQRSNWlYZqhhlotttrjgehld^c^inhz}|zwutvuqssfZVTUTVUSSRQQQQU]bccccca`_][[ZWVURPTWXWWUVTSTTSSQOMIZw{ntygX[Z[\\\\^_]_egc\\[WNffILPKJFKPUVTOMOOMLLJHHHIIIHGFFFFGHHIGBGOXZd]{{oVKRSVZ\\_cifWFBEEWmsoaVJ=CIIFEEGFEEDDDB@BA@@??>?COP\\MU`[OB@BEGGIIHECCCDCCGIKGGGGHHHHGGGGGGGHGFDDIMKJJGDAABCGMNQTSRVQF@?=::==>>=;;<;::<?ADDHX]]XQLIGCA??>@BA@@JNKKLLHg@9?=FJKKKJJJJIHIIHHFCBA@@>:9HcP;CSFCA@>=;;=<===<;<=@ABB@>?@@???AA?AAACFE?<ACCDBABBBCCCEEDCDFDA\\uf\\[N=:=<;<<=<;<<<<>>?><BKLJKIF>;@B@@BAFD;<=<;868:<;2DSXK>7048=A@AJ@;789;649LNIEEC>:::::98Wa<5988775457667654211138=@<99869:76654333333344445541..022333455654344555556667765324533346775?AABBBEGGGGIHIJKNNLOMJJKNQSWVLC?A?@DIKB86885544568<>??=<:9867>BBFFB@?>@=9Plmf\\\\dfdcb_Z`gkkSBPRQW\\ZQGCCCCDDGGFECCDFCA@>:89;;<====<:::<<:;=??>>>???>>;6333686653110-7C@?=>A<A@@A><;999:;;:9989744344432233358<ADEFEA>ADDDFHDB=6@bldba`]WUZ^^aba``_WE65::88861.,0467AH:4879998665421112111222222222224=EGEDDC@=<==?@=9659==>><;;<>><4+..6IUSB7:=<9<AYtS4632476344654310-+*,3<@AGPSUVX[[\\Z[ZRMPPHG^konfna@,(.15898:<<754Jyy]^e^NKVQE@E<3DYfvfXWBVcH9JUNLE;53/+(,4AC>8/*&',*1IJ>;:721-+13.,591001106AX]``UGB@:0/626:.-118CE<1+/;=@BC<43-4@A@EGGC>5-,/396AP878=;<?@9137500312?NMB=AEJM=`mF?imA75=B>8678CMC:<<8593+N[C<@JWaJ/+/0/-1541/.19@=7>CAGME@CELTLB=8<CA831452-*BbQFE0,4323347:97=DDDKK>:?@?<427EH?79>?9,3LK734430,+3?C>728HQKHGD@@DB95:81/,*,RRQQRSTTUWZXY^```bcccdgjic_\\]`a^ZXWVUUUVVTUTSSTUWWYZ[[WUVYZXVVXYY\\\\[\\]]]\\\\\\ZZYYZZYYWUUSQONMLLLLMOOMKHHMRQPOONMMMNPSSPXekmoiWORONOLLPPPPONLJJLLMOOOPPPRUY]ilb]WTY^`bfe^ZZZXWUTUURPPONNMLOQPPPRSTVYZYXVVWYYX\\gmnpqrrrrsuwwuv{sfogM]oaVd~}}b_gibemknunhjjlkjjjhffdfhflȴ~p}vq{q^^cghfhiinn~yrssqwzƅx}~~˿prx|~dN|uz_hegfw}rmlvwibx}^d^bgedf\\ìkJ_h^\\c\\]svv|w}q\\[^^\\\\YTSROPRPMNTsvrbWaigZR]ege``]TQZ`c_Y[a[SYhGSOQQSUTRRTUSSU]Z]_\\\\YXXWUTUSSTUSSTUVWUTRSQOKS_gbT]i]QUYYOMU^kbxqkr[XZNz\\KUbeYVVQNKPLjqIP\\luqkigfcbadfghfczlttx|yvwxz~|sng\\UVUXXSRSTVXYX[__````]Z[[YZZYUPYbgljfaZWTSUUSQOLOd}|cbxpa^_daZXWW^dc`ZXRPxziZPLQXQN[cVKKNNLMLJHGIJJJJGDGEHIJJJHFMXbau`{zqxnLEKOSXY]\\^b`TJJWov_NLJBBEEECEGGFFDDHGCC??@B@>;>FUQFSUYUO>=ADGKKJFBAACDCBFIGGGGHHHGGEEDEEEECBAAINKJJF?BDEDCGVXVXY\\M>====???A@????==>==<?BBDKV[YTOJECAA@AAA??GFEFGIN4C>AKNMMLJJIIHHIIJIDBBA?>??@DVNFRPD?===<::;;>=<<;<=@BBCB@@@@BBBCCCBCDDEECCDCCBBBBBBBBBCDCCCDFCM]c]K>==<;;<<==<<<<;<<=<<EOPNLJGA>ABAAAAA=:?EEB86;:==;@V_USJ<028<@CHG806?HJ@;NLCCDFB>=<:;89\\S26:765565686675543333:><<;8775665444444443233444564.+,022222344443345555556657=A9112333346666@@AABCEGKIGIKMOPPOOOMKLNNNLNPOGBDADHHC738866656768:<>?=<;:889;>BEB?>><<<;Pmpi^[cfedc`YYff^I8IZZ[XTJDCBCCDDEGGGFFHHDBBA;988:;;=<;;;:::;:;<<::<==>>>B@:6440078555323:=?@:9@==>>=<==<;;;;;:898776543333344349=>ABAA@=<;;9889>?904Mhfb`][XXhtqmjheced]NA:8877641.0224HV</756788876532211121112111222226>CCDDDC@=<:68:9978:<=>>=<@IOKA3/604Owi;2;;7:8.-,.232453/.2520//00+()2@FFKRUYXSLJF?>:35@C@6KlolneK0++-03579:::;<79P[`cQFHPM=;OfV?ZxWXUO@6<IG:4-143-,2>DDA>:72.*''9OEBOG<4.-,-6;/18/.../5;JhfZRJ<6AOC64000*(-14;A:/2:?=<AA715,-BQMHGFEA;;:99=8=P;227998=;3.14/,.20/9C?=ELOK=ru=0;wu5/<?::;7654>HC><::9981AQKU[JG_`9)11/-01/-+,5BMQQQKHMJ@EJ=;KL;8===<;;;763.1@SYSP?,-.*1435:<;<ADELPMMMHB>;<97;<93454-*B]K725:5(,9@@=61<QUKDB=98:<==;89;5..QQQQRSRSUUWZ]ab_bihcegikid_]^___^[XVUUUTTTUUUUUUVVWYZZYUTXZYURRTX[]\\\\]]]]]\\[[YYYYXXZYVTTRPONLLMNOONLKLLPPNNOLJMMKLQSQT_imqseTQROKJLNNNNLKJHIKKLNOOPONMLLLUgpoe[WXYX\\cdcc`XUTSRPPRRRQPOMLNOOPQQRUWXYXUVXY[[bhefmrsrsttuvvvxzlhvd`ocOlw[ahg`diimspfflmkihiheca_dhinϲqfp|wv{l^aeffiiioqrxqrpmnwq̿tsu~nxwosxwrmybifhfgjkmntxl`fibb_fhcddakpSXgdZR`izy|~|zyxzt^Z_]\\YTRRQPUUN[|swSZ}v`\\Ubnjfdc]XVTSUPIKMNRTrIWQOPSUVXXVWUWSfmYYY[[ZYXWTSTSSTTSRSUUVUQRSSRU\\WTYRVXWVVUTTVLLIOUM[aVWRRQYYZ[^_XSV\\Ycwv_KIO\\_YWUUWWXWWbmgfwmpnpx||}ysvrcXX\\ZURSXbcba__^\\\\\\]]__]^`bfkjheb\\VTTRSSRQPQONVa~nQVwsa_bb\\WSRSVZ\\^ZSOLFD^tbNO\\UISYOJIJKLMKIHHJJKOOLLGDHIJKKJIKOWWljiyvwiGCHIOVUUWXX]]TVox^MILIFCDEEEFGGFFDDHIGEBB@AA@;:>HRCKMIB=<=ACEHIJGC@?@BFGIHHIHIHHHGGEBBCD@A@A?>EMKJJF=FHFOTJR^W`gh_QDB=:9:<>?@>>>>>?>>??@>;<@HW]XOJFDCBAA@?>DDDFF@p@8GFGOQONLKJIGGHKJKIDBBA??ABCBECOWCB@?>===<=<>=:;;<>BBBCCCA@ACDEDDEDDDDCCCCDCCBBBBBBBBBBBCCBCFDJ^jW?=@?<;;;=<>><<=<;;<;=DKNNLJHEDDDBA@>:87<CNLD>=;<<>>GVVXWO7247@CA>5/8ITTG>NJABDSE@=><;77Q}mE9:545565686665544458=>;99875555423445444322224445542.011122233343344455556545:E>333333454579A@AABCEFGHHJLMNOLNNJHHGFKKJJJIFEEEGIC82587766567779;=><;::989:<>??=;<:9<=Nlrk^[cgffdb[XccSD=Lb`PA=:9;>BDDDFGHGHHILIDD@:9:88:;;:;;;;::;;<=747:<=@@@BA?<8523<>99:;;<=<9:=@>=<==>>===<<;;;868976655444578999;9789;<;;;962336=>70-Hiib`]\\XT^ptnigebcgjh^H:8866641//.4IQ9065578898764311122111101221226;ABBCCCB@?:410/4;==<::;;<=DOSND87725=K\\X=2767?A2),,/012420/22/..-/0.-0=DGHJHEB?:41/,-217GG>97DKR\\K6.,,,045798899<>67FTM67FQLCCWj\\ADvoPHI>005:94+5Y\\F;159=A?=@DC?5($8IAASUKB5051/95*(.0/**7M_\\PC96537MeQ655011+1656502:?<7881151-B^e\\PE?<=BB@?@:9MA.27856983.051,.6:1,3:<>AB9LqM4,;mP<PC2.5;7530BF:779;<:838DYsdC8TkE,63.-.1347:?JSWUPMKKGBFC85AH=8CHA:<BGC94/5AEQX\\[I>BA:326;?CCCDELUZ\\ZUI?BF=6:;9;:62-)8ED:5397/4>;6875BQPD?=77>CBBA?==@B?;PPPQRRRSTTY`a^XU]fdcfillhda^]^_a`[XVUUTTTSTVVWWVWWXZ[\\]YVVXYWUTVY\\^]]]]]]]\\[ZXXXWUSWZZXUSRPOMLMPQPPONNNPPOOPLJNOLLNPPRV\\bhrs]NQOHGIJLMKJJJIGGIJLMMOOQRSTSU\\abc^TLGIT^dhlnkggg`UOPQQQPQPNMNOPPNPTVVVVUWWVXYYZ`gmolosuuuvvvxxzymlyzsik_\\fic^ckmjn{zz~ofgheddbb\\ewudýxdm|qfsrdceeghjjonkvsutmk|ȃqȡrnutz}jqkgxqmcfdfhhjosoihhkmkgigaceeccccb]\\g`^i_pw{uqpqsfW_]ZVRRQPUVOY|}~Lcda]hxmaab\\VSPNKJILORTP|OlhTQUUX]`]YYYU[]YWUXWYXYXTSTTTTTRRRRSSSQPRSV[]UM[aecb^VUTSSQVFcvQNJkkVVUHTXWVWY^^[_]`]SKSYRXVMLKJJJILKGUe^qr_Vcrwz{trm^^c[UQT[fc]`_]\\[[]ajrux{ztlcYRQOOOOOPQRTSQQSUluyq_MRmo_]][VRRPNMLPUTPTM@=Se`RONJFFHIGGILLKIHHIJKGDAGJHFHHJKIIJKMJWcgrsx^@>EHLVSOXZZ[[P[qqbTOKHFDCEEDEFGGFFDDCFFGHNF@=@EFEFEI[QAB@B>?@@CEHFDB??AHIJHHIIHFDCEGE@@AC<ACCB?AIJIJHJHHEP[_[gPL_mlg^\\]]UG?::>@?==>>>=>>?>?A:3B\\aWPHEECBBB@?BFGII@{7?@IKMOLLKIHHHGHHHID>>?>=?@BDA@N[K?B??>=>===>?=;<<<>?AB@ABA@BBCDCCDDBBCBABBDCBBBABBBBBBBBBCCCECIamP;@@?=;<<==>?=<==;<=>@FLONLJHGEDECBA><<=<A@JNJA><:8:<BPWZXJ7/2AF<1.2?TTIFAKHCCHi[B<A><95D~Y=965555557644444556986874564343212344433323443333587224433323466655545555555543::4563345558>A@AAADFFCDDFGGHHFFHHFDCABDFGFEEEEGGC6/4767765556688:<<;:;;989;<<==<:<:9=AMgtl_[bhgfd`_ZZeU??GLH>=><;<>BEEDFHHHHHIKIEC>87:979:::::::9::::96459;==>>?ABB@;;:79:<?>>>=<<;=>===<=====<;99997688877664438;;;<;63216:=<;:987789<>91.Adod_]\\ZSWiromkkiihjonZ@88887631/)3PK3265565699765410022122122332238=ABBDDB@@?820..39==;::::<=?B@>><9641.*.1112/1971/.-+-/244574320...06<HSNEFF:/+/020/21526FD3/-*+2<90-,-.057798774351047649DNOH@=<95->bgQCA920/.1515Lb\\K:/-.7@>;ALNG>0).;DFJPPLG>A8.1994440,-:MN=3343662:U[=69<HI3/:=00415;;6330330*=dulT?99:<>@@>94EI/15437<93/565348:83149:5-/]U07-A^MSQDEEB;5321D<)*.6;=;984?dfA32<bY213-/6>CDCBBFHGHHIIB>=<<;;>ACFKC8:BBCD=516<:H_WQ_q|g@06=BDGGGEEKU^fgjaOFECMO;:C?840/1.2;=407>>91,.15<B@955:EJD==>>>>>CHHRQQQQQQSUVY[WRMLS[^afjmlhdb`^_bee`[XVTTTSSTUUUUVVWYYZ\\^]ZWVWYZ[\\\\]__^]]]]]\\\\ZXWVVTSRUYYWTQONNNNOPPPPOMNQOOPPONPPNNNPQQQRSVck_POMIHGHJLJIJIHHFGIJKKNPTY[\\[ZUQONNPOKOW]dknrttutqi]SPPOORSSOJKNNNPUWWWVUUUUVVU\\gkiegostvxwvwwww{}{ww]dllb^fklmm~nbehfedddaezrȫll~}cbkiffghhimojptuvxsnwŉlu·glqqswz}Ʃʹieacdsqhdbccbdghhdcdcddcbbegcabbd]o}uopqmviXb^WRQQRTSOWsZvmjpynbdcYPONLJKOQRRUKwTls_UTTVW^^XVUSSWYXVVWXZZXVTUTTTTTSRRRQQPNQRTYYUUcswsmf`\\XUTZXLaOPGVw\\PX~IVXURRVXXZWTZZURLM[bYPOMLMLKLKEQgYlZIYqwyj[UWYY\\]UOQUWVSQPTZ\\_dkuyxwtodVRSTTTWYWTUTUVVUST^ry~yxjVIWndZXVVTPOPPOPQXXUUYL=Q_PKLJGEHJHHJKKIIHIJKHNajHHJFGHIIGHHIIGDK[lqrXGKIEJUSGLPQSQTfbTVWRMIFCEDEFEFGGFFDDBCEEMPNTJGKLKPKIY]SXUOI??@CEFFEEGFDBEHGGHGD@>>BGD@>@A>BEEHJIJJJJJIIHFBIWQ`MA`nkfievs[D67>??><==<<=><=@@98K\\ZTKHHEDDCB@ACFG:f?8CKMMLLJJJJIIIIJIIHB==>??@BEFBBPMAACDBAABB@???@>>>=<=?@@>?@@BBBCCCCBABBBBBBCCBBAABBBBBBBBABCCDDFSWF>?>>>=<==>>??>><<<=>@DLPOMLHHHEFEDC?=;;<A=EJLGA=9999:AJSRL@58FJ?4.8HPLDDFFFDC^u\\=;A>:::|~{W=9876555575434886568:99888643331244545689:;<<:99:;==;;;;:864369;:76545555555444345534467779=>>AABDGGFFDDEECB;9BIHGFEEEFFFFEDC??8137555565555668:<<;:;;9::;==<===<:9BJL`toc[bgggebbdcaM?>?<:<A?;:;=AEEDFFFHHGHJIFD@968:87998899999998666689;<9;>?@AAA?=;77:>@@><<<==<>>?=<<<<;:98777677787766435:==:631138====<;:;<;=@@=940:]rh__^[TWiqssonmlihkodD59:987533*0KB024444359977651//01122222331/28=>?@AB@=><72.-/3587789:;;<:89;<<<:73220.+051++-,.044013457875531.+0BMTRGC?;5246553692/*.73,'++*).41,,.0147754551-,+--07;;DOL=:7/*,,*.11370///0121@WPBA/+*+:KG<>JQJ@70-:SWOJKV_VH9456740///4:5.-5?A><;:58PK96:?D>7;>5/3448720/.-/1*;rcE4465579::70?M43006:=:548478::449:::=7/=P9001KSG?<jfF;B?;9G:*126;>><85BXF/33)CbB(--2?DEB:12>DDEGFB>965778:=CNN;2DLB:<<7357.6`c<JV45:?FIGHHDGKIPalxvZO``H6=LI:4302457645=>4+,22+)-/.,-5FRN@9;<;87;>BDRRQPPQPRTSRPMMLKNV]aejlkhdbbbceffd]XWUTTTRTTSSUVWXZ[[\\]^]ZXWY[]^____^]]]\\\\\\\\[XVTSVYVSQSVVTRPPONMNPPPQONPPPPPPQRQPPPQSRPPONQUTSOMMJGFIKJHIGGIGGHIIKLNRUVUSSQNNKJQVXYXZ`ehjklpqqrpg[SOPSTUPIILMNPSVWXWUUUUTTV[aa]aotruxywuvwwwz~znbguqackjhkslcfghggfeghjyvвo~f\\gmighhikookt~tuuvwqrĀgoqx|vlnquxz{~itɷmnm\\dm|e]adeedeedcdddcddcbbbbcdb``]^}zsryuq~yd\\gaVRQRTQLUo}}{ssvkgh\\RMMMMLNQQRSWIg~Y\\kh\\TSTUXZUUWWWWWVSRUX[[XUTUTTTTTTSSQPPOOQSSRSVYbjkkihge`\\YbS[SOMJQkdParLWXVURZebVOUTMIKJHTXSQNMMMMKLNFMdcveWM_n}usug_`YMT\\TNOU[WQONPPOLP^ffhkqpfa]ZVRPPTVUSZc\\WXWWXXXUTYis~zyu`MO`f\\WVVXRORTVUQVYRMUULDCGKKJHGIOVPKLJHIJKJIDW|PBFNOLJGGIIHIIH@HbrpXLJFGGMPECOMFKa[GIOQQOMFABDEFFGGFEEEDEEEDGHN[\\YONLMNOMLQQNKJAAACEDEEGJHIGIIIJHEDA>=ADC?>??CFHIMNLKJJJKIJIGFFEEHO@jkedinvzr`J=:9=?><<<;<<;9:<>:<FKLMKHHGGFCACDEAGe/@HNQMLKIHHIJIIHPROHB>>?ABABDAETP@?BCCBBCCBA@@@@@@>=<==>?>???@BDDDCBBACCCDCBBABBAABBBBBBBCCAABBA@@?D@@?==?<<>?>?@?=<<<=>@CKPOMLJHHGFGFC?<==>@>CGJKJHFFGA:9;FOJD<<IKFBADKIDCBCDDDEVgwV=C=89-cgVYA79897544556659A;46777778:964222245568<>>@AAAA@@@@BCCBA@@@?=;:=@@?<9766544334444224324566668:9=BABEIKJJHGGC=8349CLPLKLLIFFFEGE832695343444556668:;;:998:<==?A?==??;=JSLWotj`cfhhghiiidR@>EDA@?=;::;?DFDEGGGFFHJJHDA:68888888877888889888799::8:<<:8:?A@>;89;<=<<=>==>>>>=<<:98999766667877766668<=:61136:?>=<<<<<;<?FIE?9524@Wdfc^[WS]mrpommkighkeK78:97765514=5.134458;=:77761../0011222221027;<<<<===<962/..04446789:;<<<=?>>=:86324337;;741/0<JF;89<7335686311<KRSSE==855520117;63/14/00/.-./10.,---./133321-,,./29<8?IB;?=6/,,.-*,,+,,,.6:99AF;84-,+(3IQNJHLJ:750@bgSAJdi[B530.,*-1467725BKNHB<9:718HA4446?B:366558:5-(*,+491F~pC5021--01245.:O:50/7>;8;<8469;=8/2<?;99>F:6>12EB8-FP4H`]J@I:/6557;?=87>A8554-,GI/)-4==:9879?GIHDA@=:97557:=DLJABKIA;865200)&SuJ6e`.-;>>AFGIHFJI4<moD.4ERL8//05<9326::0%&2>=1''((&/?HHD<56743/6@:5SRPQQRRRQNMNPPOOPV]aeijigccedb`__\\XWVUTTTRSTSTVWXYZ]___^^]ZYY[]]]^^__^^^]]\\\\][WSRUYZVRMMRVVSQPONNOOQRQQQQQPQPOQRQRQQSTRRRPMLNQPOQOJHHGGGGGHHHGGHJJJKKKLLLKLMNNOPPPPORW\\acdhmrrpssk^UTUTSQOLJKLMNQSUUSTUUTTTUVV[kvrpwwtstuwwwyz|{zwmhm~xhekplkupdgjgfnqfdinogǬ~gamrkghhjmopmtyttssup~hmosvy~|tspu{sdcw|`S^lsgbhrrdbbbbcccbbbcdbaabcba``aaba_`Xjwnvrr~{wn_]faWQSRLJWn|zxx~xwuj][PMQIFIJPRSTTWJb`L`iaVTUWUUUUXYYWVUQOPOOVZYVUUTSTTSSSRQQOORTRS\\c___^]^cfhjiibFqyLNLKS^lwjRlgQWWWUS[e]RSWUQPOOJMRPOONNLKLLNLINtj]QP^ujXYZRGIEGkqUMPW]ZVSOSUXcoy|z{{|kWTSQOQRPOOOMSbg_ZYZ[ZVTVYagu~nTQYdaYXY]XOOQRQQNQRPNPULEHIHIHIKUYOOPMHIIIJCGfrODGNWSLHFGKLNLKTLCMfq[MIGKEGOQNSOCHUICHIKOPNHDBEFFFFFFEEEDDEEEFFMUXVMKIJIIHGGFECBCCBACDCCC?CIJKLNOLIFDBA?>CB@CCJMLKLKJKJJIKIIIIGHEEB^Ube``l{wuyolmeZM>7:==>>===::;<<<:9:=@FIKJIGDBCDG=t.<INONOJIHGGHGIECPTOHB?@BCEECCALUGACBBBBBBA@@@@@@@@>===;<?@@?=>AABAABABDEEFDBCBBAAAAABBBBBEDA?==@BDCCA@?==><<>>?@@?=<<<===@IOOMLLJJJHGGB><=>>??ADFGHJLKJHEA89BCC<<@?GNNKLJDA?>@ABEDYfznOE<78*TZ<=7588977555689:?A9567423345455468:;::=@A@?@?@ABA@@?@ABB@>@BA@@@ABBA@=:9864433443233334555467678;>@BEHHHIHFD@92243:GPNKMLJGEEHNQB34:632334335566688:::89;<>@AAAA?=??>CQYNPiuod_gkiikkjki\\ICFEA?>><<;:=CFDEGGGFFHKKJFA<667788899886667:;;::;;::::;<9656;<<<<=<::::;<><===<<;:845789:9886579887767:>>;6567:>?=;;<==>===AIKB<9532-8Sgg_[VT]imonmmljhfkmX=79777763232//12115;BE=75651.-/000022113103689:989;<964000-16667789:;<<=>@@>=:8654543479FUPEBISRJEFHA=<>@=956AMORQLA@?64430/29:86443105;60/11023.-,-,*.7:730--.0028;:8:9;>=731279542/-+(*38?@:4383355,);R[_L?=8=<2FgcI>KcYF93,*++,5<;9:>EOSQNF<620/0.55/-268<7/4>ABC?4-*.57835QfI01432.-./012/3J>41.394.276777:=<4/5:988;8/8=2284/.V],,RumK=I9-22238==<;=<97533++91),069;=BIJGFEB><<<;::;:;<>EGELPA8<=854213:7=j\\384*-27;6:FLLJMD.G@#,:JQF2-1249:;<>7/*(-8@@<4,)'(3=;640-,,,4=<=72TSQRRRSSRPQRRRQPRTY_ceggeccca]YSRSRTUSSSRRSSRTVWXY[^bdb`^]\\[ZZ[\\\\]^______^]]]]YVTTUXYXSMMQTTSRRQOORSSSSRQQRQOOQRQQSSTUTSTTQPQPOQUVTRNIHHGFGHGGFHIHIJJKLMNMLLLNONMMNOOPU]cjppssppoklh\\WSOQTQMLJJLLMPRRSUUUUTTSVcrphoslinsstvwxyzzy{yui]kxz}|p^oyhhjiiuqcd|w|yĹvmhtwkeikklopnr~}utssssrͅirkmwz|~wrrsxdp~m]Z`hc]daX``tilxzxj`[^baaa_^\\^ccbaabdba`^^`ba```Zhzyqiv~vtto`^b[UQOOUbr||yyxxz}s_STQKQ\\h_MOUVTSUNUlDUecTTYURTUVWWWUVRYxiUQRUXWWVTSTSSSSRRPOQQUhwqfbaa__achlnjW>dKPNPU[`jmUw]VWUVTTUTOPWYUTRQMLSTOPQONNMMLLPH>f[OYk{dR^\\]]QH@WzjQSW\\a^ZSPRV\\nzx{~kXTVWTRQPNKJJIIWild]\\\\\\YUTU^bo{bTT`f]YY\\YOJOOLMPKLUPLKMOLGEHTZNSdXOQMHHGFHA?`ZECOSPKHGNMKSWQN^bUEGc\\JHNNJKSUSUPIHECJIIKMNNMKIHGGFEDDEDDDCDDDDDKS[XNIHHIIHJMLGEB@ABAABBBA>BGGJMPQNJGFEBADIIIKLLMLKKKKLLKHIHIHGGGGF@O|f^\\\\kyyqjgeimmmeN:7;>>>>=:;<>>=<<=;9BOROIEDBDEFJJ8D[NIMMNIHFGHGIFDHLJFCAABBDFEDIdLCCECABBBBBAA@?@@@?>==<:<?B@==@AABBBA@ABDFFFCCBAAABBBAAACDCC>;;;>CEEBA?>??<=>>=?A@@?>>>===?HOOMLLKJJHGFB?=<>==?@@AABEHIIIPIB98>?<:54DRIDHHD=88<=@DGThnq[E<=;9_[D<55667778879:;<;866654110122478;?@@??AC@>???@AA@?>>>??@@?>??@@AABBA@><;9644334433355545665687875:@C@?BDEA:8;941324:CLLKJGGFEJQYSD;73343343444667778::9:8?DEECAA@>>>AKWZPOgupf]enmlkjjjkfWIDD@=>?>>=9=CDDFGGGGFHKMMIC=7466888887777689::::;;;<====;:;988889:;::::;<<;<==<<:973479;<:99766897788:==9537:;=><;<=>=>>=>?@A@>;;8430/=[ibZUWainqpoopnliprX=77677785112211100/0;B<31220,,.///1221121025788768;:7630222598889:9:;<<<>A@><;8554434441<OPKNSVYSQQOMMMJB<:;>HMPSD;@F=64530/3:94233214<>6005615614553/.6?=80//010059:88:<;95037:96563-)))+2==4/0234:@9+0QbhS;9BB95TgVCDFIE;61*+//06:99>JSTOFA;3/.+*+)*-.(*--41->RXRG@745:>;3-6D?55543331/121230<:10-/0/++253579;:85459;740/110355+,IT=0-UoA?L:020148;=>>>?<6434/)+,)()1;?BCDED@=;<<:;<9:;:869AACQO=:A?>AAABGTN0MkD/9;76:>=;=HONQNE`ȶ?\u001f)9?HQJ86;:56?EFC<78757:<>>6)$,32/-()48.%2MH67:TSQQRSSTUUTSQPQPQTW[`aegdbaa^ZVQOPRSRRQQRRRRQRUXXY[]aefc_]\\\\[ZY[]]^`aaaa`_^^\\][XWWWYYYXUQOOQRSSSRRTUUUTRPQRONPRRQQSUUUUUTUTTTRQTWY[][VPKIGFGGGHGHIILMMNOPPNMMNMNOPQQOKMVborolggqrmnoh_VNLPRQMJIJJKNPQSTTUUUUTYdia^db\\akppoquwwwy{}zkev~z|[`~jdhns|mi{|mcfzs`prkzthjolkoqqruustuuvoՉlrqprx~wqnnsxpehzwmoswmqo\\RyfZegeffgjmnopicefhjlifdbbcddba`^_lzrl|~|zt}zjlsmb_^VSQO[kx}|}|{|||wxdVh`QOQqpPQXXUSQMGxyGL`gXTVSRUUVWWUVWUw{`RSUTSSQRQQSTSSROMN_vljigedbcec\\TKTWMRTWX\\_^h_UXVSRRRQNMOQWXTRPLSYROPPONNLLLKQABygWKaq_MZ`XWWRHNmpWPUY]_YVTROQXiqorttjRNUVVTRPNMKJJKLQ^loia]^[WTTYYepZSXb\\XXVUNELPIJQKI[[MIKGDFGHUfUUwjJJJHGFFGA<HECMVNFNXWXQKTVRMYkl]EJOIIQQONMMQSNJHGFHIHJJJLMMMKIHFFFEEEEEEEEDDDIRfhVHHHHKSYWTPNIEA@BBCBBABCCDFJLMLJIHJLNUYVTRNLLKJKKKJIIGGGHGFFEBB?An{]Z_jvxohggiko{]C<<>>==;;<?@@><><;COTMGDCABF:ig4=JKJJOIALJIJJIJNMJKIFCBBABCFDEZVDCCBBBBBBBBAA@?????>=<;9<BEB@BEGGGFDCB@@BBCDCCBBABBBBBBACD?@;9::;ADECA????==>?;=ABB@>??=>=@HOOMMLKJIGFDB?=<=<=>>=<:;=?@ADDGLD;;<;624>K<<CA=;69<<>BDFIIHAB>=?NeLA<778777899:;;<:85345531013578;=>????????????@ABA@@?????@?>>>>>??@@A@?=<:645444556556665666689717??;65:<:5217:6113336BLKIFFFEHMSVO<4444333345555688999;:7CFCDA@@?>=?EPVURSi{te]eppnmkijlhZIBC?=>??A@;<CDDFGGGGFFINMGC?845666566678889::::9:<<>>>???AA?<:99::9999;<<<==><<;;:999;<==:9976666899::86105<=;;968>>>=====>>;:::<<73327Vlc]XX_jprrqooonnpbE6787777973/134210//.27762131-,.///02211110146666569855334579;;989;;;<<<=?BA?<:86421356546559AKUUSSQLIHG>3<ECFILOD/*>E=654422530//1/138;82./5933327:9730259944420.,.59:;::62..46674233-,158:=<52021/5=<2*DjdG7AI>9BabJ?=8:>?;5/,-,,,*+3CRTMC930.,*,0+*,-00+),2-+Mf^K>:;:9:8/,-366740/./0.-143465420.,,-,/6AIB:79:99955:;8431/006<;5-29??4Wf>FM=566:=<;<<<=><5342/-*((&*3?AAABB>9<A@ACB<8521007?AHPHBINKFGKNPSXR?Dqg?INJICH]]H?HPV__aÓH7IJGJJB;88>A;9AIE<?DA>:89>DB5,.2/,.,(4KP?,*BG548TSQQRSSSTUTRPNMNRXZ\\_beeeb`_^\\XUSRTTQQQRRQRQQRTVWWXZ]aeeb^[[[ZZZ\\^_acccca_^^]\\[[ZZZ[ZYVTTTQORTSSSSTWXWTRQQQONOQSRQSTVVVXYYWVWWWWTRUXZXRLJIGGHHIIIJJLMMNNOPPONMLLMLMNMIGRdmhba`eqyyh`kpkcVLJLLLKIHIKNRTSRTTTVWZ\\XWXWTV^glmnquwvvxyyzwz{{|jX[o|temtxv{oilnswb[`mmg}jhpmlpprttuutvzwqؚhospstw}}~upnpswxz}}~o_`td\\vics{{yxvw~{gfmmnqrqnkihhhihedc`^^a^ax~qzuaeni_\\\\VQJWopoxzy{|zz}usxp[uyUOY[el^SVYYXUQQDsLIRedVPSTVUUVWWVU_zpaVOOQPPRTUTTRLN^t|{zzxsmjfc_SMNBnNOU]_]_^Z]]RZUSPQQPONOPTURQPNRVRNNMLLMMLKMM?Sq[F[smY[eftr\\MPkw^OSVRQSTUUSOKTjrqqkd[UTSTSRRQQOMLLNQRSWgqmc^^\\ZWWS[~uaTQUYWVQOOGEOMHMLKTWPMMPOILMRUW_ofMFIHFHHE?ABDGQUOO[d`VOMONOJO]ikcSGEMTTPPONQQNLJHGHHIIGHIIKMKIGGFGGGGGGEEECCCFLaj_JHIKS_cZVSRRPIDDEEDDCCCCCDEFGJNQSW^]^ZSPOKKKKIJJIHIIJKIIGGEC@>>@Bt`ScopnibdilptzdK><=>>=<=??@?=><;@GJGEDCACB;|:;FGCLnbMNOOMLJJKMNNLJFCBBBBFC@OaEABCBBBBAABAAA@??@?>>><87<EHFEGJLLLHEEECCDCBACCBBABBBBBBAA>:<;;:98<@CDA???>==>>:EG??>=>>>>=AKQPMLLKJIGDCB?=<<<=>>>=;:;;<=@BFGB:8:9426;?;<A>9;?=<=>@>B@88:@>>>?A@>???<;98:;<==<<82265665678<?@ACDB@@@ABB@@?@@@ABAA@@?@AA??@@@?@AA@?@B@??=965666767887666566668749CA;6334333447:63213328EIIHGGGHIKNL<44432334455555999999:>A?=>>>=<<;?IRTRUS_wxl`eonmnliiljYFCD@???ACB>>BDDFFEEFDCFJHCDE<557654555789::9:<<<<>>=>>?????@A@=<<;:9999:;==>>=>>?>>>??@=:98777666899:97568<><;;7458;=>==>><<;::::988:87Shdb\\XZ`jrsqommkjfQ858677778840144430/022.2<8584/-//../110133113445546876445678:==<;;<=<<<<>@CB?<:986423667785477;JMPOJ=;=:5:GMGFGLB3''9C;55432553/./.03332/.-,.6422127841/./2446540,*,4<=;82/1:?>89=80478:>BFHH@6:;50.2564,8`U<JUHDFL_N;516BA=@B8-*)(&#$4KVTI<2-,++(*34/-,/1.,.3..LWD3.18;85/(++-4=;46>?;5,').,-4<9341.--,,4E_jS:;<:93/3:;60.1;62>?@A43BHF?J]OBILFBEIJHC;9:;;;;855210,(')/;CEEDCA==CIEFKG=94/.0009CKLGFLQRLDCCEJKLPLaqTOWPKBHgt]CEMPW_]S``Pryf_onI+*.3<@>@DB;<@:58:=DG=.1A8&(/13?MG;;55;500RQOPQQQQPQRQPOORZ_``aceedb`_^^ZWUUUTRQRRQQRRQRTVVVVVXZ^bd`\\ZZ[ZZ\\^`abdeec_]^_^]]\\\\\\]]\\YRPTTQQRSSSSUWYZVSSSRQONPSSSRTWYXZ]\\[ZYXYVTPNMLMLKJIHGGGHIJKLMNNNNNOONMNMKJJHJKJIM[c_\\enpnt{o\\ZkzxodWJINMKIHIMQRQQRRSVXYWTVWUWY]aefkqstwyxxxz|~ohorq|uyyvz{yz{poqog|sqyZ_^\\jafwronopjoxvvuvrxoŦqrsqqqsx}~|yvwz}}qptuf\\[a~j}wUkwcjtpmopqqomkjjjjkhgec_[]epy}y~yywcgmh]VURMVmxojopoqw|}~urzvnt~aIXa^\\WTUW[[ZWTTDnNGM\\aUQTVWVTUXYQTadzgSQPQSWXUUURTZ`ipsvxvpkg]SKLQEeMOU^^]^\\YU\\tR\\URPQQOOOOPQPOQQLNPMNNKKLLMMLPODfg]{{w||wntmYSUXVVWXWUSQLUkroia\\YVTRRQRRQRQOOORSTSLRetn\\^a`\\YUUxwqeVQOUWUSOOKFIMHJNMJIOOObkOJLLNRZ]YNIIIKNJEDHKLNPTX_`]YSPQONNLMN\\elkYDHOTUSTURONMJGFFGHGFGGGIKJHGGGGGGHJHFEECECC>VkhJGKQY^][YTQNOPMHGGFFFFEEDCEGJOVXXYYRNKJLMILKJIJJKJLNQOKJIGGECBBA?TbQTiojd_bjpvxxy{t_H<;>?>=>???>====>ADDDCB@C@7wt5FIIHLOPQNLHIIIIJKLKIGFECBBDD;DZOADAAABBAAAAAAA@?>?>>=><67<DHFFGJLLJHFFHIKIFDBBEDAAACCCCBA<79::;:748@CCB@?>?==<?Ia]F>?=<;<=<@KQPMKKJIIGDCA>====?>>>???=;<=>>CB>9787418:;>>?<9=@<<==@;BCA??>==<=>>?ABB?=;:<=>??<B@2/777:=>?BEGFFFFGDAADGGECBABAAAA@?>?@AA@@?@?@ABA@@AA@@@=9657999888996765666555=D=779755358756865411343;DGIGGGHGHJK=43652234555655:99889;>>===<<<::<BLRRRRKMmyqdbjoqqpljkgYHBC@@AABBBA@BDEEEECCBCDCBAEID846655556779<<<=>>==??>?>>>===>@?>><;;:::99:;:;;=>??@@A@BB=6677777666777778>BA><;:95324=AD@=;:;;;;;:9::;=:Hcga]ZY[fprommliijX;596677898523444320/13/1985751.----.0001431023332469:6354688:=BECA?@@>;<>ADD@=::96576666655997:<EKJ@36;9ANKJHFF?2,-/=B;4432025679:785/+++++*+1433/,1310.---/59675.+08;>;91+;POD@>8304=ILJDAFK<09A40/01230<QLXzoUsqNG6./3<C>9<?7-*)'&',B[ZPC80.,+)()*./*(*-/02325==2,*-2750-+-,+/68>Rjj[J7362/3>GF;7542//,*/Fb[=:A:3--6<7/(/CA0043=C@CIKE?:6:?FMPSUQJG?87898767753121+(*2>BFFD>;?FJJKJD?@A@?>>6/6EKJOPLLJIB:<?ACGMKL`bURNHEFMRK@EOPU^ZIH[afwxkjziM2&+4=@<989631037;=81,1=9)'0=A?I@1A>-0568QPPPOOPPOPRUX[^eiigcbefgebba`_\\XUUUTRPPQRQQRRQRTSSSTTVXZ]`^[ZZ[[\\_bccdfgea^^____^_____`[SNPQPPRSTTUWZ\\YUVUSSQONOQSSTVXYXXWWYWQPSWVROMKKLLKJIGGHGGIJLLKLMNNNMMNNMMMMNLIIILSY_iqojlt{nTSfmkmjZONNMKJKMMMONPQQRSUUVWVWYZ\\\\[\\ainruwxy{|{|zsltu|~xvvvv{qklkigbe|N^|lX_^^_aqm^svwvqfqxxwxqj~kstrropsw{{|~vtvx}}{~ypmmmpe[de|srv|jR~usk]n|oprooonllljjjhhfb]_gjotvv|}{|xswszzmqrjbXPTZq|{{{nbaesuqbg}oc^]b^gfRRY\\\\]ZVWMh{YPRPTTTXYUTWXZYQzi]|w^QLR\\YUVU[debaa`bgkidZPKMPLWRONR\\]]]YYP^lS[UTRSSQNMMMPQQTQS[UPRRPNMLNRRSTM^h}o}gixthe`VUWUUVUVVTVT[luk^[XWTSTTSRRRRQPPPRTTRPHMejWU\\^^\\WQmzrg]USUWVSRPNLJKKORNNNQQP\\dQIJKLNNPQRRNNUTRRNNQRTO[mh]WSTUTRQNRPMS]dmcMNVTUWYTPNNMJHFFGGFHHGGGHGGIHGGIIJJIGEDEEDC>H[\\JIMSWUTY\\[WMFJNMIIHGHGGFECEGMPSTNIGEFILMMOOKIIIJKKKOPMKJIHHHGFEFHCU`GH]jheelsxwwvsojbRD<79==>>>=<====?@CCCCA@DE>[>IJLIKFQ[NKKLJJIIIIGFEDDCBCDDCURC@DA?@@A@ACBAAA@?>>>>?>:8:;>AABBEHHFEEFGJMKGDB@CDAABCCCCA?;8;;:8988:<@EDBB@?==;Gfih^L@=<;:;:BMPMMLKJIIHECA?<===>>>>@??=;<=>==>;876556;;>=>>;;=::;;;=@A?=>==<;;<>>??A@>=;<<=<=>:@B81567:?CEEDEGFEEEDBBDEGGECBCEFB@>;:;<====;98:::::<;;?BA>966799988887775554545>C701478676787456555213446>BGGGHHHIKK>23654235556667:9888:<;<<==<;;9:>GNPPNMCBbyre_juussrokdZJ@AA@DBA@AA@ADEEEEBAACCA@BEIE:3456677767:>?>>>>>>?@??>>>====>>=<;::;;:9888888;<=>?@ABDD;355656766666767:>@?=;::954227=HIA9678999::;9:=;=Zld^ZZ]elonnljhko\\<5866799:987643445/-1223566321/,,,-//0014300233/035=>77656889=CGGHGGIE@=?AEC>:9::767766766688767=AB4-48>MPKHEC>56357?@<4211-/4:@AEIA4-,.++-/./573++.///.-,*,2>?<:1-4:8=?:21HVF8:81//1BUVM>1:D1'/3..2//1217BG_{pq]=1,).335@?5+'&''&$'0BOG=730-,*()*('***,,.4856976640//..,,04.*((1Dg}]OGKXZR\\e]J?:9:93130-.:F=7>;439=:0+,6E1&+/BPNHABD>97556CNRTOD:85234554113335884.*1:AFF?9<CHIJJE@CIILMI?><?EEJ]eYQOORZ`VBBRRLO`jYIIHGG=549GYabZNTdbbrtect~tx|U+*59<80-..-4<8332.040/83)2FG:MK1@B&&8DIQQQQOPQQRSW\\`dfhkjgeehhggeddb`^ZVUUTSPOSSQPQQQQQPQQTTUVWX[]]\\\\\\]^abdddegfc`_```a`aaaabcc_UONQRQQRSTWY[YVUUSSRQOLLNQSRRSWZXWXWTRTXZYVTSQPRRONNMKHGHHIIIJLMNNMNONONNPQNHFFILPTX^gmms{zfRSZVRX_YRPNMLLLJJKMOOOONOPSUVVXYZYWWYaiikovz{|}}zvev}quz}wuzwv{yupkgijkigccnoamiUa`]^]Vah]lz~yvqgq|zzxyxov|ttvrpssrs|}uonpt{||xrruvuvsnxwguj|ÅrmlltZ|}oaTczrpoonmmmlifdda]]ixwmsytsrpqtvv{|lnqmmjc^WS^py}aXX\\go~}ykwomnkrzuiffiaW``X\\`^]_]jya\\ZHNVYZYUU^]YXPvoe}oYLKQUVTcstnkgd__caXMLLNQEr{KPNRY\\]_`^PjcS]VTSSRNNNMNPPQQNZ^URPSRQQRUWWRO\\}s^vYY^_fmljh\\Y[UUUVXWTS\\e_bpm_WWVUTSTTTSRTSRRRPQSSSQNCHTXTTWXX[T\\{wqqqfZUUXZVSSSRONQXUOQTTSSQPPNMMLKLNQUWUUYWWVSSVT^}rURQRUUSQNRRNOYdcYSTXVWZXRNNNMJHGGGHHHHHGGGGHIIIILKJJHFFEEFGGFFKMKKLNQOOSY_^]QHGIJIIGHGFEECEHLNQSPLHGGKNNOOOJIKKKJJJJKIJIHHGHHIGGHDFWM;@Vcekotxwvvume^VUOD<;>>=>>=<===?@BBCCCCF?^PGHHJIJSZ\\NKKKJJJIGFEDDDDDCDB=Q^G@ACBA??AAAA@@@@@@?@@>???>=<::=?>?ACCDCEFIJKHDB?@@AABBBBBA@>=<;:8:998:>EGECA??<:Kdadi\\G<<<<;:BMNMMLKKJIHECA?=;;;<>?>>>>==<=>=;<9766558:<>?@@?>;768:;<==<<=<<<;;<=>==>====;:;:;:9776455658?CB??AAABBBAABBBB@<<BHLMF72445653442223446768<?=<:8889888776665444447??80134565666543443454224337<DFFGHHILH:24544445556657768978:;=<=<<;:;=DMRQNIE?<Optd]kwurtvskg`OBAABECB@@@>@CEEEEB@@AAA@BEGD<4366789878:>?>>=>>??????>>=<==<;9998998877667668::<?ACEFA8244555545656779<=>=;99:8532432>LMC;=?>?CD>988;<:GbmaWX]dikmoljkneK8666679:;9:;86444469220+-48001011,,0010242014544546:<9<=757889;=AGKMPNGB@CCA<87:;9877677766677789;;.,28FMJGEA>;7688;=;820//-/39A@IM>3242-,131-06413//2001/-.5<B?6/,05;C>72:KM6-20/1.-BVRC5,06-'++++-//0.,,27:BaeE2.+*-5/+7FG3,3850/-+0960.,,,,*)),-,+,/121/5<;7778=?4/212464.,-0:FMge=<?AK\\mtPA<==>60;@>:8<>;668:A<73.-.-.49Jek_P?:==<:998DKGA;831232345662.19>=;:5,-8AB?87?DDGI@<ELKKMHB:;>A>:Kpz]Obk}hKS_X[lqnZHGFED=7:AJVZXTWbjmvuoqy|zt9-8786.*&.:AB<4019BC<7<7.6CB>OJ.:F1*@PSSRQQPQQRVZ\\_bdddefghijiiigeedb`\\XUSSSQPTSPOQRRRRSTUVYZ\\\\\\\\]^]]^^`bccccddeda__aababbccdeefe[QMPQONNQTUSSSSTSSRPQOLLOPPQSX[]^__a_\\[[[ZWUUUUVVVVUSRQPPONMLKLMMMNPOPONORSMFFIKLIHShtwzy{|lZW[XSTW[WQOMLKIHILNNNNNLKMQSSUVWWVVW^\\U\\irssy}}w{yfksn||~}vfr}yw|vmklmljkkigkoq{hdbfa^]^bonmzv{tilmhyz|{|vxr{zzz|yuutpp||rmlnqu{}qˑoorrsuvy}uo\\Ţqonplq{dVVg}}oqqoonllkhdcbcjpz}lk|uqwqpqx}zu~|plb]ZYXSSYfv|zxZXUSWkv~vsjix~|rpsy}ytnfik[RX]]bempb]qSTZ[VSV[`[WWPG_x\\\\l~pMFMPSjvsponjb^\\WRNOQQPE`LQRWXX_krePgsXWZTTRQPLT][WVVVSTZZ\\YQSTSSRTQNLSbtkjooj^UWUTUW`gVMfujjl[RSVUSRRRSSSSTSRSRQQRTTOOGIRVUSSUVYWQ\\f]YYW_pp`WVY]][XUTSRTZVPPRSTTSSRQRTSQONMMRSNUXPRTVXW`ءiRPPQSSSRQOQOOU[URSUWWYZROONMLJHGFGHHHHHGIHJLLKKKLKIIHFFEEGKLNNLMMMMMMMLLOWXbg`UKFIIHHFDCCCEFFHKPSSPKJLNPQLJFIKLKJHIIJIIHHHHGGHGGIHCHLB<CPZelqxxrrrbYU[hljV<>?>>><==>>?@@BCDDIK=BJKJIIKTTTOJHGHIIGEDEDCDDDCCBF_FFFCAEC?ACCBA@>>>?@?@@?=<>??<::<>>=>@BBCDFGIIFDBAB@DEDBAABCC@><;98;:999;BIGCA@@>:Lca`g[TH<=<<:AMNMLLKKJIHECA>=;;:;@>><@???=>>===;98:988:=@?????>;:889::;:<<;:;;:;<>=<<<===;9:::;88756555568:<<;:;<======<<<:98:=GRS?--3100/0111245655688778987788988755545534<B?6234457756535423333343133217CFEDEFIKD8344334445565455688799;>>>==;;?CMSQOLFA>8>^qe[gvuqrwunkiZHAACCCCAA@>?ABBCBA??AAA@ACED@96666888779=><<<>?@A@???==<<=::9767666557766555678;>@DGC954445654455678:;=<;;:98875443100?LPQSTSROI=7779;;6BaiZUYbklormimgN867667789:9:;876443:A521-/7:2/1256-*0122332136886678:98<@:67667658?FJQUOFACA?:768:9878767777667799<9-29BLKI@59=>5-57863/.34/...5;DI>002.,*,11.,,.6@B5.122782141:G;/.12=E930<KE811.,.,,?LA520/--,**++*+/00..25639>0(..,;C34FB51EYZJ9785351+*()+-,*+////.1343128;7768?D<48@@?;1/;EHLMDEP?/42-)/XjZP:9<?:6=CA<=ACA9/18<8:>8/'(8GLXfig\\G::<>??CCFC9019;6443346:=5-3?D?;;9/+8C;759>BBED>>CCDLL@6567;;6YnIAWfyWQa^]ptjYJFDDFA:AFGMWajljjstg`ef\\[oB7>776.+*9EA:;848HSMIC8217=CGOD+-=DBIPQ[XTSRRSSUWY]ceegggjkkjjjjhfeeeb^ZWTSSRRTTRPQSTUUWX[[\\^_aaa`^^___`abbb`bccca`_`acbcdedeedfif]QLMLJHJLMNPPQSRQPPPOMLMNPUXVUX]__cda_]\\[XUWVRRWXWYYXWWVTRSTOJJLNORUXXWWYYRJHIJKLKRfpqsty|wbZgibYZ`^VPNNNLIIKLNNOQNKJLOPPQTUTTVXTNT`hhjqtyulz|yvms|h_t}~xl[Vjyzumnsqlqrqv|wwΪgaiaa^]iz~{z{xxjgii`~}z}|pouuvx{|{zz}ysxyqnoqsvynuȕkhrxzw`Qghptzj[[bdis|}toppqqnjgecdehs}}~|{{knzywlggimrihsznZWTTRRYaky|{y~{{jYUWW[envztrnehqyui[`rupnnh^VWYVW\\eoglSpcZ\\ZUSUXXUVYTQLRvnWVisTHMgqnlljc]XVSRRRSVPSOLPV[ZZdncWUPMSRQRRPQQQX^[UW`^_lupd]XSS[T[rvbkyu~q_RVVUUV]lf^sxqaQV[VSRQPQQQQQQQPPQQQQPQNLIPXWVUUTTTUSNMNOPPQ`smZWZ[]]\\XUUTUWUOORRSSUXUTUUVVVTSQKVf\\SQTWXYZ^QRPQSSSRRRQQOOSSQSWX[][WPNNMLKIGFFHIHHHHGIKMOONLKKIGHIHGEEHNPQPOPPOMLKKJJKNQXcjgWHFJKJGDBCDCBBBEJNRRLJLMNNFCBDGIGFFFFGHGEFGGGGFFFFEDEGECBCJU^ivwogaVX]jvzP==?==<=>>>?@ABCDEFC@~}>JJJKMLGNMMB9EJIGDDCCCCDEEECEZIGJJGEEAADEEDCA>>??????@?728>==???>??@@ACBBBCCCBBDEDJKHDB@ACC@?>==<;:9:97=GHCBAA??Sa\\Z_TUTG=<>=?KNLLKKKIIHEDB>;:;:84:=9=>?@?@?????@@?>=<>?@>=;>ACB@<979899:::::;;;<==<<<;<==;;<>=:876555545769:8789:999:::;:;;<:;=FPM:,0100112222456545643577789;<=;866456778>C>65555445796424323323444333325=BCCBCGHA734443335556556577998:<@@@@?==CJSTQOJD@?:8Ljj_frsoqttqpsdL?ACCCB@@?>>??????><>AA@@ACC@<:8666666889988:<>?A@>==<<;;:887666566667765466568:;>EH=544444555669<;;<=<:::::76656666669CQZ^a]M:5666667973FecTWakorupibN95766777899::97764366::2./5895112482+,.13434678:5/8<8;:59=8566576459=BOZZK@@?=8566788888766778889:;>=7=EJPRA/)5<:3/574.,*-33,-+*.498.+--*')+----,*/?K<)(-16;<:1.3IWF569AD98@JPQM>40-,),<?4.//.,+-,+,-01.3>939=B@5/22/,/EF:EP>'2VZJ<1,088/,-156750-.10.////..,-.233579<?;30/4?HMPMB8462-/32,+-\"1wGIVI>89=?@=70079=?518;9>BA>9>MU[]]]ZO?9;76@GHHH>205=>;863237==3-5A@9896/-;D<979=@B@>ACAAFML?43643/=ssE799=CIICIS[gvw_bXGF?ETL:99=PdkcZY\\^ULMI@:=Jg\\7EC<80.1;?76?<06CMPMJ5)5=BLMI?.$-AIFEE`_\\WTTTSQRW`gfegghjkkkkjihfegigc`]ZXWUUUUVUTUUVWXZ\\]]^_`abba``abbabbbabdedc`__`bbcdeeeeddehg`XVUUVWWSPQPQQPOPPPOMMNNQUURPRTUU[bddba`][[WPMORRRSRRRPOQRWVMKOPQTY\\]\\[\\\\XSNKKKNNPY[XZbfa_Y^f]^dec`[UQPPOMLKKLLNQPNKJMNMMPRQPQQRRRTZ^beflvl]cddut`ad_l}qYTY\\`t{{wprvrotus~{ul~ԹvW_aa]`szuxoq~kqxrieu|~zvuwwwyzz||}szwrpsttw|ȝyu{qcak\\kq`Ydnpoiltrpqoqsojea``dgjw|zz{~jrrgeedcada^irj\\VSSOQbhl|{w{{ndWX[XWY\\^Z]s|tk\\OQRRW`fmnkf__`^ZVY]aOptJ[aZXUSTUVTTY[TRZZP[n[_peSVdmokgaYVUTQORSWNlKLRXZ\\_c^NLURSUQPQPOQQPNLKMSVXbtvla_Xbrequdx|wbTTTQTjeartxgVV`\\VSQPQPQQPQQQQQRSQNLLLLKLUXYXWVUVUUTQRRRTRSeobXYYYZZXVUVVWVQOSSSSUUWYYYXWSWvaQg~sWYYZ[YS_|USTWVTRQQQRPPPUVOPRW[^YSQNLKKJHFFFGGGHHHGHJMPPMKIIHFGIHGEDKRTSQOQPMLKKKJJMOOPPW^_QGHIJIGEEGJMPNJHIKMLKLGFFCCDDGGDDCCEFGECDEEEEDDDBBDEGLMMHHKOVippaTYhot~lE;@?<==>>>>?ACDEEEB>_NAIIHKNLKKHB69ELKEBA@AACEFFEDHNHGKIGHE@ADFFECAA??>>>>;<?<33:>?@@>>@AA@ABBAA@?@@ABCCGJIEB@ACCAA@@@?<9::98:CHDAAAA<J`\\Z_VRVO?<?<>INLLKKJIJHEDB=9555<LZ:/>BECABAA@?@CB?==>?>>=<<>>=<9:877778889:;;;;<====>;;<=<;=?>:8766665368898667888888899::;>>>;=CMH7001/1122222343444335667:=?@><778:<>?AFE=656667673EC5455413323455443235:?CBACEF>535443445556666579<;:<>AAAA?=?FMTSQNF@=>=9AaqhepuqprrrrtfK@BCBA@AA?=<<>>=====>@?@@?AA@<:97666668865456899<>>=;::99878787788877776666655689<EE:65553444679=>>?>=;9::::865678:=>=<=FS_fZ?12355555784<]gVT^iptxudJ74876666799:::888643524?<10334411//7:1+./13369862/:C8054/3863545765679=HX]O=<<;755667788876777889::<?CHEDKQE6EJ>9720451-*-/1/00-+++*)***0:;2-+*-//*)3A;,'*-08CC30/4IQC=CGD75N_]`aO?5-+*-9<631/-,+,,,-.39,6F7,=GG?2---+-9FFCOR9+>R9'()&,<=*):IPSJ6(,20/-,,+*++++,.-*144@RJ4/=HNKDD;02;><886/,./*'Ib81?MQE89=<60-+)+4@DEFFFIGCCNXS]jdXOB51394.<FEDJB417<979963247;4(,792132/2@FB?<9=?=9;CGGJOPMC=755.,RfG57812309>@EOX^YK_VBGBFQE22>QhiUC@CEFIHKL;29DQjņ8@K?:7403:65=3/;58JOQG49FNVRF?7((34159_``ZUSSSTX`fhggijkkkkkkjihfegjkjgdb_[YYVUWWWVUVWWXZ\\]^`abbddbcddedddeddfggfdbaaabbcbcdddeeeghijhgda^WQPPOOOOOOONMMOOOQQPPPPOOT_gijhdb`^]VNKKMNNMMMLMOOSVTPNNOSUWXYXY\\]]VOLLMNNLIILPQKJPZYNTdhedb_ZVSRQPMLKJLOPRPMMLKLMOONMNPQQQU[_abehhcZUUdwp]\\cdl{{`\\illb`vxmqxyvnlqz~zwupnuw^ae`_aktkjgeigkx~xmaap~zxxyyxxz|~}u~|uqstu{wջ~ywoZdrbU[t|vtkmurpqppngdcbdefjbf{|x{y}{mffegjjkihihaYZ[X[^Z]hkq|~l^jucUUUTVVW[\\`vxhTILPX\\\\grtvqjhdeiihgbXmmV[YXVRPNQUSY[\\UT`\\XYXkl^[jsXZnyod]VRSRRQSQVKlMNS[][YRHIOMKMNNNNNOQQNNONNOLPZbgprkd^^cjvxrppnisgxzzs^QPKaei|hSOW[URSQPQQPQRTUUVVVUTNHEGLJKQWYXWWUVVUUTRRRTTRUbh^VVVVUSRRTWWWTRTUSRRPMQUYXTPbxiufXSXZZXTdM`gZTUXVTRQQPPPPRVQMTPIOSSQOMJJJJIGFEFFFFGGGGGKRRNKIGGGFGFECFPXXUQOQNMOLKMLLMMLLJMOYZSJGLPOLKMT^gf[YPIHJMPNMNOPPMKIHFECDDEDDCCCCDCBCCCBBNbWLOWSNIQ`siWbqxx||trS<<??>><>>==?ADDDDB@Eۧ@DGHJKLLJFA<9@LLGCA??@BCDFGFFGFFGHHGGDBBCDDDB@??>???=::<>;9;=?><<<@BAAABBCB@@@@AABBDFGEA@?@AAA@@@A?><:987<ED@@?CGX`][`VRVO?=A=<DNNMLKJJIFCC@>;757BclZ8IKJFDDCBA???@=<<??<:89;?B?966789;<====<=<;;;====?=::=<8:=?<:;;:8755888887777888766677899;;;;<CHC50//01123223334443465678:<>?=>>?AGKIIH=47999:;;>I_W67>:7554455666555548CFBACEF;435444444776645579;;<?BB@@?=;@HPVTPKD><>>:<YtpfnwuqrtrrteJ?BCCDBAA?=<<=====>>>????@@@?=:975555777764445448==;:8776666789;;8777776667765677;B@85667667678:<==>=<:9999876568:<??;77<L`_F2243455567988NcXR\\jqu}vW839:77755679999888865543:?841/0/0///098.-.0135574-8B7+,1-+1632445666668:?LUL:788644556777766668789:;>BGJECJR<2\\rD40-143/+-238CC4-///-*'*7ANT=)*),282,0562010*/9=7311AKDCGHA2&5O`a\\VQ>*++08<;>:41-+,,,/.5N=3N>%3KQ<,*+)+6>CHNPL8.FD.05649A?-*?ZgaI10:8/..,*))-,.//1/*)-.DldORQJ;.4<;7:BB;@HA<;6//6=:255;HRPG<98543289:?HKIMWULGVVD]fQECAA:463/7=:?LI=55;737<<952279/(,450/215CFB?;:=>86?IJIOTURJ=2364@L?=>785AM?:=@AABGIEWUEHLGB==HWfi[E@D@8:GILQ@39BCHd^:>=;<716C9..';I1-BQJJJ=BOYVIEE<3-%\".4]\\[YUTWY[bhihijkllllmlklkigfghhhhgec_]ZWWWWVVVVVVWX[\\_bdeeedeedefgfeefghhiihfdcccbb`_`abbbbbaba^ZVSQPOOONNNOOONNMMNNNOQQONOONP[gjhjhebbb_ZSLILMMMMMNNOQSWUMHKNPTVVY[[]`\\TNLLLMKIJKLNMKNPNKMWchjjhd`[USQONKJLMOQRPONKJLMMMLNQOOQUY\\acefflk_\\aqw_[_Zdyyh_oymll`fuxqhmtxslblwxywwursuichdbfe`_[`wxjc`bcdijmwrg]f}}xxyywvy}}w{urqxedЩ{rlkwzsYtyncZU`uxrrnmljkmpniedfhjigiabvzxyrlonjmnigijiklf`\\XYenuolmi|wnkhTAJ[ipiZTSSUXgtkS]ysRHX_ab^Xdeaffc`\\[bge`\\kpb[WVORZUOQWP\\]^\\OUPTa`]_r~WKRav}{{|yjdkpiaYRNPOQWWRVN^LRZa^ZRPQRNQTPKIKMLLNNLMMMMNOSQJS`hd^[^fmvwmf^Z\\]`ckw~xup_SPuslnWQRUUTRRQPQQPQRUY[[[[ZXUPJIJGLSXXXWWVVVVSSSRRSTSQV`_WTTTRQPORSUUVVTSRQRMD?LOOL\\tsoѥ\\IOWYZY[[WQQTSTUUUUTRQNNPVXGHUcKEKLMLLJJJIHGEFFFGGGGGHFKRSOMJHHFFFECFPWZZTOMLIJQKJNLKJIJKLMJMYZSNW\\YVTRT\\jlfdVOIHKW[XVTTROMMONMLJGGFFEDDEFECDEB?NfiQMWXYUNGJ_e``hv|zzyok\\B:??>>>====?ACDDEDG?H}FEFIMKLJGBA>AFJGECA>?@BCCGIGFFFGGFGHFBACDDDDBA@@@BAAAA@@>?@><>>=<>BBABAAAB@@@?@@ABABBCCA??>???>>ADC@>:8889@HC?=I]^_[X]WPTQ>=A>:?LMMJIIIFECA?><NK@D\\ojHPLKGFGEB@????BBBB@=979:?DD;:8:<?@BABBA?>><;;<=???=;<>=::@A@@@A><;98767998876554577655566789::=AB:323333332232334435656776:>BFKIECEHJH@735999::;GTQF7;>:86678::766666632>DDBBGG:44655445577764545799=AA?=>=;;ALRVTPIA>??><9Psyihx|vrttrqbI>AABCCA?<;;<====<=>>=>??@@@?==;64444677::887645<><:9777788889:<:7667776668977877;>;7689:<><;;:9:;;<;;:9998776569;<><9665@[U62654445778895?[]S]lqvlD8=:777764467779989875546568774/,/00/.484/-.0031477;6**,//-131255566776779?KI:36753345567876557778::<@EKKC=;A9.@S80+'*1/+.7<69LK0#)3::68AJ>?K7()))/DI@?=:6476-),.2567=78GNM>-)$2V[JKXJ.(,276?E?631.-,,/4Bom=Xe2$9R=()-1478>KPF?87C<?IF?78>?1*0Kkc92NL810/0/...--.,,..17AQbVIC6-19@?@?69@7>HHIIC==DA00AGEBCNVOFD?:=CD<41257=LRIAD=@WF*).4A@642131/8KID?9:6349=@ACD@?=:63651336;9558;::;AJJDDOX\\YD.,8;<@77=4222ANC;?DDB??EFGJHIIIFLTQKIID=>DD@>AELK;489:<:Mxt?,:=:9:FI2,-4@</,=S8+A=<GQPLNUTE-\"&/6[YWXY]cddgiiijkllllmmnonmkiihgfeffecba_[XXWVVVUUUVXZ\\_adeeeedcbdfgfgffgghhiiifddccb`_^^___^]\\ZYTOMMMNNNNNMMNONNNMNNNNOPQPNOPNOU`eehkkgfecb`WMIKNNMMLMNORVVRMJKMOTZ^\\[]`_[VOJHLNMLLMPPNMMMMIJ\\nolkhfb]UONONNLKLOQRSSQNKJKKKOROOOQSTY_acfimkghit{pc_aflpkekh\\ene^^_cgintvn`dwyvsttrsrrqkb]acb_Zdvxogca__`a`dnlenxw{|yyyyywuxx}zztqpkXL\\Һ~zwrljlxobbxk`[ZY]ejorpld_dstjhhhkkkjiibfwzxwljrusqnjiikjihb\\[WWhtxsgfjxxd[WUQW`TUba[ZZYV\\r{cQWhaI\\m]ahgbcecehqvyyumgciqh]UTb]VZSQSVMcd[]LMJR^eg_X\\zeZTUbklnqstvvxwj[ROORORY_]noLLZd^RIU`baV[qqe^WRPMMMNNNMLNPTPLT_c`[[`hnpne]^^_^^emuwuqx}ofltxyxpss`Zl~{m|r\\PPSUTRQQPOPPPPRTY[[Z[YY\\ZYSIELTWXXXVXXXWUSSSSSTTTUVWXVSRRQOOOOPQRSQOSWQIFAHJGGPYhqIOWXYWVPUQSVUTTUVWURQPMPTUKLSZOJKJJJIHHHGGGGGFFGGGGGGGMTRNKIGGGFFFALY\\ZXSOLJIIKIILJJIHIJLLJISXTS\\a^ZWUUV^daXTRNJLSWTPNMMJKOPPQRQLIHGGHFFGGFEC@RnnRGRUPSUUPNHO]T^myzvwqkbN@?@??>?>>=?ACDEGFFD:cj>DFINILKIDEEEGGGEB@>@ABCCFHGFGGHHHHHE?>CDECDBA@AABBBCCCDDCCA==????BBBBBAAAA@@??@@A@?@@AA?>>>>=@@BDDEFEDB?:=FH<?SaY^[Y\\WNRQB;>;9?IJLHFFFDCB??=:GE:5KPFIMLKJHIGBAA@@@CCDEC?;<;8668:<;<?CBBBBB@?>><;<<==???>AB@?>ABAABCBA@?<9667:;:;<<;85676555666689:;=:::9::864332222454467666679<AEKPQLC=CGC:7787764;DI\\Q1126766:>?;8677777524>ECAEG<7664544553564443578:<=<;;:::<DOSSRNG@@A@>>;In|igw}uquvriTA>A????>>><=<===<:<====???@@>>@=766665689:99877;??;97779;<<:::;;96678776679:98878::87899;>?==<;;;::;:988888788779<<<:85616KH346554457788986N\\T^osw{Z9<>878876346777889875431468<?=5/..23035385.-.-/15753-+++(.00202545667756667CL;24542235578876555568:9=@GKIA931/-+:83?JJ=576><1/@K=<=BHGDC?:6031(*,)'>YXPNH<37<3*)*/38::16OWOE4+)'ASGBNK<-*384>F=6441.,--Dr|KP`C('=8'(-0542;KG74:<CFOG;5--=B8,(6\\Y->XD018=><4,)'')*,7@IYZLD9.(.9DB:46;38@;KLLQJBBCEC@DGKMI>=HSVVNC?=614/*(,-4940.0;H;672*.;73311-,7FED?:877638@JNKE<8@H=27765530,0;><>CKMC;>DN[_E2CJC=8<@3(+.3;?=;?HHC?>BD?@GHIHPOE<9988:=?FKGADIB76769==9AK8-:?:9?M?,,DQD0./?U?',79>?BMYXUTD.'/7WWXZ`dfhkkjjihikllmooprqokjkjiihffcbbba`][[YWUSRRTWY[\\_aaa``_]\\]bffgfffggghjjigfedcba]ZXWXXWUTRQOMLNOONMMMMNNNNNNNOOOOOPPNNPMMQU[djlnmigffgcXNJJKKJIKMPSSTTSOKKLQXZYZ^__a_XOJJMNLKLMMLNNLLLKS`eiljhhe]UOMQPKMLJLOPSVVTONNLQUQPNNPPRW\\aeffjllnnjkk`gzrjlke\\]b`ZZ]cfhjnuvguxtstvvutrpoha_`a`guypjhfglqrprtuwwrmkq|{yzy}~ys{yytl{oRZ[T]ȫzwtqrqnlmmixqd\\lse^[\\[[]fruqleZ_vuhcflonlkkkhmxxrmkmprqpmkjjmmfb`XVUXchge]]d`TQTZas]NUQRX]^Z`pkTRZ]Wa|Y^jkleiooqsiivq\\WT]zqbQOUULfeX[NQQSVY\\]_`YYypaYZgluiNKVccahsvUadVPSVfnii_mn\\^cg^UTRNNPQROPY^[ZZ\\fmlgd_\\\\^_agjjnnf^\\[]hdYZ]^`a_[csjW]app`_UOT\\ZSRQPOOQPOOTXYYYZYXYY\\\\TFKUWWWWXZ[[YVTTTSTUUVVUUVVTSRQPONMLMMMNNQRJCDHHIIIFDHSeZMOXUVRNMMQVVUTUVVVUSRQOQPPSW_[ROLIJJHGFGGGHIIHGGGHHIFHOSPLIHGFGEFECP[ZWROMLMKHFEGJLKJJIIJKJJLPOR[`^[YWUVWZWNRSQMNORROOPPMLOPPQQPKGGGGGDDFGGGENkpUBHOQQOQTVSVTOMS]nvvvqlgWFBCCB@@AA?>ACEFIHGF;I_>GIICBFKJIGGHHHHD>BBACDDDFHGGHIJJKKIFA?BEEDCBBBABBABCCBDGGFDB?>@@@@ABBBAAAAA@@@?@@@@AABAA?@??>ADDACCDEDCB<;BGAAQ^^][Y[VMRR@:>=:=HKJHFDDDA@??=<646-.)<LLLKJIIHCDDB?@=>?BDCBC?9667<<<<?@A@AA?>==<:;;<;:<@CDEDA?<;>@@AABCCA?>>:45:<=AIIIH>:99899887889;=:7:?A?=854432345655777787:::<;=JQQLB?DD=9::889;<BACC;135667=A@=86677776329CDABE>75434554333434444679998998:;>DOSSQMFBCD?>><Jpwjiuxusuto`J>@A?=<==>?ACA>==>=9;<<<>??@@>>?>;8:;9778;:99867;><99768:;;;989;;:7788887779;987678899889;<:;;;<;;<<=;9666558;;:8;=;:986435;=645456666678990<VW\\pvvnG4><899975567778887664341/0>LJ;&+5654232433.-..05871/-,,-*+//102444666766677<C>2253223456677654578886<?IKD<69651.5?1DifNGD7651.7=?@ACB@912<?91/++,,&.M_XVRE88=3+(),375403N[OKB+*)1CJEDA=5-065;<85431/.--EsISeoeP>/')/24428@8--2=JTN>63+.@HDC<5EC,LZ<18DJC>41;ADCOR[WJJD7;??ADG?4++/0-5A?ZddXD=?<;<DFBBB?>>73?OVOF>3,*'&''(),///047Fc_?00354321-.9A974678;8129>>96/)/DJ;5::874115>AAHKJC85:99HXQT_[PE=A@4+*-6?C?<<EJEBC@AAAEHHFA=59;736?DCFGCDEA848724;GL;-39<:6;EE4'.M]K;AEMZZL>/*.0<O[[VZU7$-<STX\\_bbcghgfefhjlnnopprspkkmjhhgffgfc`____]ZYVTSRTVX[[[]_^]ZWUTUZ`effffghhhikjjigeddd`[WUUVVVTSRQOOPPOMLMMLMNNNNNNOOOPONONNNKKOOSad^cebbegjje^XRLHHFFLQSSSSSRNKLMNPSW]_`cdb]TMIIKKKKJLNNLKMNJHUgnlkkjgbZRMLMOPKGGKQRTYWUUNRYUQOOQVURW\\^_begijlkkmg`pxa]sqc`\\XY^gnmjkrrҰhtvqqtyzxvplkkic_^fx~tjgegkqwwtx~~utz{}~{yz{x}snqsSVXZ^Z\\ҰvromllntwdTlmbxib][[Z[`kwwqmdV]ophejqppplmpvyxtqrpmnonmllkjkiabfcfhigebcgaUTY[cxlXOONKJORV]ldTUVYi~~mabjh]ZZZ[ZXWUSOMJKV\\XXV\\otxpWPUUOd^X\\OUSRPPQU]^]]R[~c]^W^jvu\\ixbbUUcpsrpntnso_`jsmfc`\\XWXWTU[ZWXX[dea^][Z[]_adddeb_^\\YXWXYZ[ZWXZXXeugM\\}uWZaZWYdbYTOPONONMMRWYYZZZZZZ]``PHR][YWXYYZYWUSSTUUUVVWVUTTSSQPOMLJJKJIKOHBEEFFHIHHHFBGUlvSDLPSVhfVRTTSXVTVVUTTSTTTVY[[XTQLHHIHFFGIHIIIIGGGGHIFHQQLJHFFEFFFBDS[WQLIIIJHFBDJNMMKJHHHIILONLOV\\\\[YWWVTPOPRUTONQQQOPQPNMLLMNPOKGFGDBDDFHIMTgu`CDNLMMMNNNRW[XPNLXjtsnjgYKEDEDBBAA@=@CEGJIHF?:JHGGFAACLMIHIJKHFC@IDBBBBCEGGFHJJIIIHFAABDDCCBBBBBBBCCBBCEGIIGD@???@ABBAAA@AA@@@??@@?ACDBA?@?>?ABBA@ABDEDD?=BEFCP_]\\\\YYUMQP=;@C=<ELIHFCBBA@?>==<:8937BKMLKIIIHFEDBAB@=<<@BEECBBBCA<<=?@@@??<<;;<;<=<=?@DGFC@:6549?@?>?ABCDFIG@::<<>@BHKB>??@@@><97669=@>=>?><9766555677678899979:::;<<>DKIBAA>;=<;=?@?ADA=;9::99:=A@>76778878756=BAAC@55434796534355664589899999;<>ENRSNIEEIHDA@=GmvhluuuvurpeL;=A?=>?@@ADEB>=?AA?=<;;<==>>??>>=;=<:989;:<<83147766437:;:97689976789:::87897655679;:8789989<<<;<<<<;9656458<=<:==;:998555654554466677888943LZ]juoT;489:;:87677767987777654-.?PK6535;;:850+.000//138963,+..-+00//1223466666557767920323323555675137999:?C>BB>=<:884/.3.<`YMMD713442.-+)+3;@ACF>652//.34-<Z`YOD?=9/+++.220/,,G\\LHP;.-,9GD=;4.,299853221100/06PaNDe`1'1=@<50240.47<MVE9:936BBJXH8II7QWCV^SJ?31@V[SUBCA.-DRUVX_b^F1-,++*'-=<W}xU7450-.158<=951*$&7MWUPLGDA;3-)*/202563Hoa93854443457;@5/1567:83241//.-,)/EL92:;;7101677?FB95552.7KTTMNSNB<;76449AB<::8DQPQOG?BHHD?:9=AA@>?><=BEJNF81483.,1>D=67::40;E<,(/FTMHRVU]e_N8)')5HPZ_]P1)<ASUXYYZYXWZ]`fkmnnmmlmpqqqomnlhgedcdeghe_^][YXYXWVWXYZ\\\\\\]__]VRQQT[acddeghhiijlljiheccca\\YWVUTTSRQNMPPPNMMMNNNNNNNNOOPPPPNMNMKLLMPWTKNSUW[ahkjklg]USLDFKNQQRRQQMKIIKMRX[_cfhhc[PHHLMJJLLLLLLLKHQgkeiklkif^PHJNUVRIFJJNRSVYRQXYTPPSYZUQRTVXY[^^acgnqdeo^_|m\\W]`dehilnjhsuqquwyyvqonnllggvzpjhmvtgceflv|||}|yz|{y{smjtt[VXXYZ_ZTxҹxyz{}®ygjkq_]XX`a_cq|wpg[R^pkhsy{unpqsxyxzsuunstpmmljhc][gosz|~f_ksoVZSMKKKKKMIPdeYUV\\flg`[^\\UPPPOONOMKMMNUccXUbcTPKRXQPUTRbXX[LSPPNNNNQTX]]VSwt_UVTXdq{y~rmUKY}ztt|~v{iyd^`bddikfda__][XXXXZ]`a]ZYYZYZ\\_ddb`_]]\\ZYXWYabca][Z[[Y`fgxgW]\\ZYW_fh[KMMLNMLMPSWWVWZXYYX\\`]QMZ\\YXWWWYYVUTTTUUUVVWWUSSRRQPONMJIJJGHPNDFGEFGFGGIIGEN[\\`eogUOdh[UURQTRRTTUUUUUUUSSSQOKHGGHHGFFHKKIIIHGGGGHIGHPOKIHFFFGFFGFUXPIHEDDEGGFMNIJKKHHHHGGKTTMMTZ\\ZXVWVUSUXWWVRONOOOPOMMMMKIJLOSXWUZ`db^YX[dtrWCIMIHHLMJKOQUWYSLHQbghfh_RIFGFDCAAA?ABDFJIGEC:}BDGFC@ACJQIKKNOIDCEI@>>=?BFGGGGHFEEEDCDDDDDCCCCBBBBBBBBBBBFJLKHDA@@??@@?AA@@@??>>==?=>ABB@@?>=????B>?ACDDDAAFEDEXa_]\\ZYSMQK>:@HEADHGFDB????>>=<<:9:::BHLLKIIHHHGFDDEB=;;=ADHFIIJJD>>?@B@>==;::;<=?@@ADFFEB>:5/27:=>=<<<=AHIJKKF?;;99:>B@?@ABBBAA>:6338AEC?<967887777788888999:85545<@<9=CGDBA?>?@ABCCB@AAABBAA@?==??<477666788769=@AC@435249<9534567766688:;;;;:<<=DLPPJDCGLLJCA<CkwjkrsrrtsvsV::><=@AABBDC@>>AEIJE?;::<===????=<>96779::;<82-/34441037999766898879:::::754554667:;:9999889:;;;;;;;98666568<=;<=<;:999666655554456677788870;S_hq]<4557;=:77888777889;:8544-1A?1/697568971//23321377764-/2454721/1122344344457642454333222333563047879<GL@8;>?@><:72/-,2?7@>96468::961-.:ITWNA85676537=64OdZA3683006886--0-,G[A:ZY9,+0<@:5-+4>CA:52/-/1/1211026@HZkwsP249<850+(.48=@CFH<78748;1@K>:U]>B>Q|wUA6-,6GB98=51&>dkacfqoV6&),*)('*9:]l;*)'%%'(,035/'$&.:BLUM?=BIMOMKIHIH@77504C=-16855446:?FD932334642233322342'.GJ73=?6+**-,+.3567541/<E;4/16>A><===<<<834=:HYXXVG;>DA=?ACDFPZZN9(+8EOSG5.37/),4737964520;A6)-5;AGNTRSZ_[RI>5++7>JTL;2@NDTTRQQRRUZ_dhmpnnmigioqqqppoooljhec_]bfdcb`^^][ZZYZZZ[\\]]]^_`]VSSTX_cdefhhhjkklmlkjgcaaca^\\WRQRRSROMOQRQPNMNPPONMNNNOPPQQPOOMLLNNNNMIIMONOS\\bdiqsplkeXPMLMPQQQQPLIIHILNS]fklmnlfZMILKKKJKKLLMPOQZ[[emmkjiicSJV]TcgOKTdaIQ`WQW[XRRRU[YSPQRSUVXXXWX^fggim~x]WZZ[_diigۏ_rtstttvxwsppponoywspp}rggqwursz~rv~yvhemn`]]XUUV[`]Sqǲjkt|f[ZZ\\cijkswrmaUWfmhny~|lo|{zxvwqnrqquuqmnle`\\TXdds}hsu|h\\_TKJKLNQQPRPTZWXYWWWPMNOPQRRPOPRRSUOObbXYSmmZUNTOLPVST`RSWJPOPPOMMNNNPW[QPuiWXZXUX`jrsuuYJUONl|yjeu^hW_babbdeca__^[XVWWX[^ceca]^]Z\\]___\\YYYWWWWY[^cdeda]ZZXSLY{fX]_[YVT\\dljVMMLLKKLMNNS[VX\\QOPRVYVPUZYYY[\\ZWTTUUTVVUUVWYVSRRRRPPOMKJJJHINTNHGGGFFGIIIECCDFbmRIMTXYVQQQQPPQRSRQPOMLLMLKIHFHIIHGHJLMJHGGFFFGHHFHNOJIHHGGGGHLOTOHGHGGFEGHILKHIIKKLKIGFGTYSORY^]ZWUTUW[\\[[YVQKLMNNLLKLOMIJKMUdfev|xohbdocMGJLLHFJJJKMLMNNQTNFNV\\^gdWLHHHGECAA?@ABEIIGEE>G@CCCA@ADAJMNHHEDA@@?=<<=?CHIGGGEBBBCCDEEEDDDCCBBBBAA@@ABAABDGIJHDBA?????@@@@?=<<<;;<;<=>??@@?>>=>>@@@@BAA@@BEEBEXb`_\\[XSOPH=6?IJEDDDCA?>==>===;;:::::>GKKKIGGHHHGEEC@;9;<BILOMIGB??>?@@>===;==>==@BABBB@>=<8529>><==<;::=EDBACFA=>9<;<>?@@@?@BCCB@<841:EIEA>:55667789::::999843458;>@ACCBCDDCA@?BEDCB@>??AEFDEEA=@B=:577664677678;@AA=43314;=;544568756666:<:<<9;;<ELMIDBCGOQLDB;>cwkioppqtswrV=;>=?@@BBBA><=AGKMLGA<<;;<<<>?>>?>=:545899;;7432444434799888889;<<9788998754666:;9::99999888::9:::9987666568<<;<<<:98998998876565676777666621KbllH02126:;9779:9777779:;;742038.-851103798544567625887667:789974100122223223356522667643223333447:5589;=??>;<=>>=;:72-,+))(15/+-8BDEA@DA==H]\\J@;9;<=97:AA6A[P1'+-/37>AC>77:86JT94WW:-.*/84-3?IKIB921../0.-040.,8I@/-8;58HD90.-,)0:=@BC@=9643156,0766;@4,4[dN3*()'+:BQaJ4-(>]f`dkpdJ4/-.-+*),7?dJ.+'&)++-/2561.,0=KOPK7(&(*-2:@EJLNNMJA:42203775534454JWF:61/2443224799777/&1JK74=7,*,045444322201;9-*(&'-882348;<82038<HOTXO@<856::;94:RdeV5$*4@HQJ6/261)1A@767434426;619>96@QZY\\^VQPQKG=8<95301:FB8MLLPV[_dlonnljiiiggkpqqqqppppommljf`]ZY^abbca^\\\\ZXWXYY[\\ZYXZ[ZVUVX]bdfgikjjkkjjijjjgc`^`a`]VQPQRRPMMOQRQPNMNPONNNNNOQPQQQQQOMMPPOOOPPQQOLLNSW[bfhnpmjc[SMMOQQQPOMKHHHHLWekklnnlkbSKKMKJKKKLMOOPNLTcopmlknlbYc_Mn{hciePTi^MSYYTRPRY^XSRRSTUVUVVTRRY[]o}w^UWX\\_e|lxvrstuvwvrqrrqlq~wvwzwooz~xwvx}{zpx|rktnZZcb^[Z\\\\]beXpmbnq]XY]ejruprrofX\\vxejtw{ztu}yuvvsokknpqrommia\\ZV]`[mnorsjXZTOJJKNRVWSTTRVYYZ[[ZXVSRONNLIIJJOTONY\\WVVMje[^UbRIPVQVcNJRLQQQRQONMNMLMQRNRs}XQ[YWXVSbvsjkVT_MKOtueZRSy|ah[]baaa`]]bknf\\XTVYZXYZWWZ\\ZYejcedb`[UVUSUUVYZ]``_^^YVVUTJd{cXXZ\\YVS^vtehfVQPLIJKNNHMa`]kUMr`OTWVVXYZZ_a]XUUUUUXXWVUW[XSQQQQQPOMKJKJJJKNPKGFGGGGGFGFECCIPigWOPOR[\\VQPPMKKLMMLJIIHHHIKKKJIHIJIHILNMJHFGFGGGHFGHLNIGHHGHGIKIRMCGKJIHGEGHDFFILKKLKKIHEELVXSOT\\ba[TORX[]]\\XWTIHNMLKKMMKMRNJKKQUYjxviaacSFFFGKKJJJKIKIIJLOPONKLOS_e]PKKKKIGDB?>>?CGIHFEB;uq=ACBBBAC@CNLE><<?>=<<;=?BFIJHGFDBABBBDEEEDDDCCBBBAAAA@@AAA@@CHKJGCA@????@@@@>>=<<;<<<;;<=>>??@>>?@A@@@@??><@DEGHPSRSUWVSRPH?9AHHCCFDB@???>====;:::;;<<AHKLIGGGGFFECA<9==:AQKKFCA=?@@>>=<====??>>=;;@><::<@?:79?@>===<;:9:BG@?>AA>@@=:<8:@?>??BBCDBB@<75:FIHHE<5567889::99866;@FNSKA@@BCCABBA@@??@B@>=;<>?ACDDDE@;@GA96455446665667<=?835536;;8544454566778::9<=:;;=FKGDBBHMOTQE=>:QslgnopuwstlP>>>>@A@@@?<;<?EMOIB>?AB@<::<<>>?AA=;74578898777644315:;;;;:::;<?@@=766786645778;<98888988887899::99988887669<<;=<:9889::;;;:86666777778887561Fhqa=284258:8889876777887;>:4224543333223487658768625787699694556300222222222445533556664212699754650037<?97=;:<==<;;831.,))367?H@;PTOIIMG@3:^]JB<;>>=;9=HH95HB*')(+048:=<=>??@JN??OI?:61160/FXWNG<2/.**/7@A;M`H37RU;(')0<EC9578427844675310/+-31+*153-++.<C.'1IPE0*8_u]>757J\\emu|u^D988;610/2:@SW95/,498236;BACE>=CCEKA-'**(''''&,126?FSTROH?8544430231CfoaS?01366667:==:9850+4CA5980./37;>?<3,,..2971.-02(*9;11;>941234:CDQZK>=/,330.-,4I[`W=5>BFGMK:0153,,7977653453028BGD><?JX`c^PEHLKMLJJHA8369720OPV`eilmnmkjijllmmmoqqqrqonpqrrqpokc_`_XTX[[]]]]\\YVUVWWXVTRRTVUUWYZ]`dgijjiigd_\\`dijgb^^___\\XRPPPNLKMOPQQPLIKMMMMNOPRPPRRSSQOMOQQPPRRSSRQPLJKLMNOTWVXYXSONORSRQQQNKJHFHMU[^`c_X_jdRMNKIJLKKLMMOMJM^opmmhfghgf]Uhr^^hkgos`PQZXPMTZ\\ZTRRRSUUUVWVTRSSRVX_m~rXVWX]g|r^osvrvxwvrqqrrrmp|yz|s]Zk}uiv||{nus{uzvnc`^\\\\[adaegZmιl]}g[Y^fklrtqsqhWSmixvz~ut~urrstrponmlmoolid^YUW_c^f}Ű}mkrjUSSMJNPPSVYXUVUTVY[YXWWWWWQJFECACEFGEVh[X\\VSKmeXnemj`ROPV\\LHNOQQQQPOONNNNNQQTPMgiPRSUXVRikqv|`MTT]nLJXxzph[PROJorSWb]\\]^blyaUYYZ\\\\WWYV^beoxpfrqokcZUTTUUUVXY[[ZZYWUTUTP^hZSVSNQ^ns}bW\\eYQOLLLQTQNTXU_TFhUZVUVXYW\\^\\ZWWVUVXYXVUW\\ZURRRQQQOONKKLKIHILKHFGGGGEDEDDHJLMJNUUNMKOPKKMJJLKKKJJIHHIIGHJJKIHHIJIIJLNMJHGGGHHIIHIIIKJIIHIIIJLKNHCGJJJHHGIHEGGILKJJHHHHGEFOZWONWbgcXPOVZ\\]\\XVUIDHIIEFD?FSTMIIGFHIOpzjcaVHGEA@EIJMMMLKIGHJLNNNMLMNUbdVMLLMJIGFDA??BEGHGFC=Tl=@DDCBCCFFHFA@@?@?>=<;=ADHIIGFDB@@@ABDEECCCCCBABAA@@BAABAAABBEIIE@@????????>>>=;;<=>>>><<==>?@>>?@CABB@><<=>@DHHC>==@DJLLLJGCCFFCEGFB@@BA?<<<;::::;;<=>DKLHFGGGFGFDA:9<;:BPF??>=>==<<<<<<<<<;;:679<>8468<=;98;?>==<<<;;:;>FE@?DC@DJ=73368;>?ABCBCCCCA@829DHHFDC@<;:;;;877799AUddSFBA@??@?@@<978:9876668:;<>ABDDA<;@D=74234566554546;<53765996643333455689;;88>?<:;?GJE@=@BGKOPPK?8DmogmqtwusteI<>??AB@>>>?AEGJMI?:=BFGF@:8:<==@B@@>::988559:::864347;<<<<;;;<=?>?=974455457778:;:877888877778::888999:98989<:;<:88889:::;;977667777778998894AfpR97:635678;;;<932454469;:62233344675542675368851/1121255295485100/133222223454327845542136:9754/-.-,.2745;:9:<;<;:8530)*;UTGhwKZbUQWTI='4\\]J?77975538GD5-54+)+)')+-.0033448===BFEA;9<>=8?V]TKE9.//,,-7Txqg~X79>:2..1203017:76:3)*/143,+(%*41(*0246119A5.5_uH%1nj><9/6Vs{zM7;>@A:3455;@?>=636>>75:?FJMTPD>;6=E:/--.0220-+-/.+))-28EPTUL;/.0018<AKx\\<102579:;<><;<:771*0?FKI@<974242/01.,,.9@9:HK>0.C[VLOD1+---1===HMD>9-.3.-,.6<EOUXLIQQPKIH=1/23.)(*-11.02220,1FNDAD><DLMQXWRJFEGGEGMOHA><:4^`dgijkkjklmmoqpqpopqqrsqmmpqposrliic``]WTQQTVWYYXXVUTUTSSRQPQRSUYZXY^abbcb_^\\WRRYciifd`^\\\\]^ZTPNNMKKMMPQRPJJLLLMNOQQPRTSSSSSQNPPOPPQSRRTTQLJJGFDDECDHJINTTTVSQSRQNLJIHGFKNMOMJNZ]SPQNJJJKJKLLMLJKYgcb`Z^dfhgcbaZXXU\\diim}SR[[PLX[ZZWTTTTTTTTTUVVW[^WTZZevr]WTZjdpҧxwwusttttssrqzwt~jdovx{}sdl}}y{wnhmrw|vX]kibdgdeif]cӿzyv|p{r\\X\\ejkilonpkWVn}xz|{|}urxzvsqmmmmljkjgaZVZ^]^___fjuʽ|qoqQSPORUZ`_]\\\\WQPRUVXXVUUUUVUMFECBA?EI<CLSWSRHkfY}wnr{rZLXYNKJPQQOOPPQONPQRSRSQJKf[NRTWYZ}miiq[PXVkWLP[mg[ZZTSOUyxXU[[ZZXbwcJR[Y\\]^__Yoǻufjsmje_[[[[ZVSRUWXXWWVURQVTY`ROSXh|xk[WUccUQPLKQUYVJCHIOFTvPQWYWWWVY[\\[YXXVVXYXUUW\\ZVSSSRQQQPONLLLJIIJIIHHGGFEEDEIPUUSSUTSQPLKNMQWQQRQOMLLKJIIIHHIHLJHHIIIIJLNMJHHGEGHIKJIIIJLLJJIIIKLLJFJKJIIHHIJJIIIIKJHHGGGGGGEISYVPR\\fga\\WUXZ[YWUOGBBACBD:9UYEAHKJIHEIXrf\\KDHD><?DFJLMMLKIGHJLMMNPRQPZf^MHIKJIIHJGDCCCDFHFD@@^=ACDCBBCDDC?@AA@??><<<?BDJJHFDCA??>@BDDDCBBBAABAAAAABBABBABEAACDB>>>>>>>>====<<;<<=>@A?<<<<=>>>=>@ACDEB>;:;<=>>?>>;::;@FHKOKIGDDFGECA@BDA>;=<9889:<<<=>@FKHGEGHJLHHA:7789>D?==<;:864589::9966569<;8633457657:=?>=<====>>==AGB?EEEGJ:.+38:;;=ADDABCEDDC@818DGFHJE>===<:779:<<=GQI9:A><;=????<711222344445568:>BEFC<6:=95224555545646;:8:;:;<97665432555778;;67?B=:<@IJE?<?@@BEJQRE9=fnhpuyxrogTC@BBACBA@@BDJMMKF?<@DGIIGE?89==<?B>BA::;96239;<=;8789::::;;;;<===<=>:63355567778:;:999888777668;:86799:;::99:::;:888878999997777787888999999;5;_hG557754226?AAFG7,149?DC@<85331244688865877578:3220-+,,/5796463002484233233234300563343226874210/010/-)1<47:<;::;;:646=5,GcXBYttV`e_]ZTR:%2TWE8420,,-,2A@3-...,+++--.-----,-,-07@A9547@A=@LWQGA;6467:82,:hhXl^9)).01551,././3555.(+4<B;0,+*0:9.+0144027?PL4Z{vcK+.T:095-5Nzj9.9>?=7244088:B<4777737:DV]c_G<;65:>96634<B>512121/4:;109<9;HM@,(./1<A)ZS58734668::99;<<83<OSKNWZUPNJC=91*,474-+.00AVWHD@?S`^ZD(&.-(7A@?@><@<862-,,2=?BGOYROSPMMJD@4,1873.,/0-(*./1/&%8EA??;8863@T^c\\QMLJGGGHPTFE@2eedcgjjlnmopooooponpqqqqqmnqqnkoqnllib^]\\YVSOPQRRUWWUSRSSRRRQPPPRTVUTUXXVVVUUUTSPR[bddec^[ZZ[][TPNNMKMNNPQRSRRPONNNPPQTTTSSUWVRNMOQQQQQRSTTSRRPNMMNKGJIFMVXWXUOOSURMLKJIFFGGFGJLONINVUPJIJJKKJKKKLRVSSQRZ^`eijjf[RSVUSSUaujYTMSURUY[[YXXWTSTUSRTVWX\\aaa_UQ[chs~sZZkdxsqstx{yy{ur}{ojjpt|sibcmojjquuqjkfhzsuj{~uqtofccbYWu¦~ywytu~zQZdmrqpqlhh]Vl|}~{y|~ztpjijklljee\\Xr|keecchfaeƧ}ns[V^Y\\ab_`egc_c_XTQRRSSSTTTTTOLMMJGCHN8_ELPOOGdn^uytpuvTZZNKIOPMJLPNNNPQUWSQPQRMLhtTPUVb~kafpcUUV|MQTY\\TTUQN\\[QS\\[\\kyvbUZWRX[bif_~ɰk^jjklifffddgc_VPTVVUVVTRVYbe]\\apzxgUTVST[[WVQOQKSZUKMJKKCUVLINSSWZY[]]\\YWXWVXYWUUZ`]VSTUTSSSQPPNNNLKLJIJHHGGEEEFHMSXVTSRRQRQQSVWYZUTTTQPNMNLIIIHHHHLIGHIIJKKLMKIIHGFGGIIIIIJKMNLKKKKKLJEGONIIIJJJJJJIHIJIHGGGFEGGEFHQ^[TZbecc_WQTXUNJHLLORSZYWcbM??GKIFDDJGT{ymWEHIDA??BDDGIKLLKIGHJKMORTTQUffOBDHJIIIKIIGDAADHGEG>O=BCCBBBBB@??@@@@??>===?AFJJFDDCAAA@BCEEDCBBABBBBAAAACCAABAAA@A@@?>===>====<;<<<;;;<>@A?=<:;==>@>>>>@ACDE@=;<<==?A?8:<>?CEJNMLIEEFFAAABDFB>;:7555679:<==>AEGFCDFILHH@87899:::;;<<:8544799:;823;B@;3022333323:?@>=<====<<B<<>EI@ACAAF:2=>@A@><>CFDCDEEDDDB83<FHFA==>=;9889;;;=A@:9?>=;::<=>?@A?;642356566654458;AFIE<4699854455667756=:9;@AA?>=<;;:86677678::66<@=;;ALKF@>???==BGNUE@]ljqx}|scNB@DECCDBACCCGLLIEAAEHIIIIHGA98;<>@@>?D=6;:84359<=;9:<;;:::9:::<<<;<=;643355677779:999986676776689865799:;<;::9:::8877767787778777888889999::;;68W_?2677740.0=MJENH@HOQPOIA=;64412369::989;;<87986577740025786462003<?44243442232.0112332239=;50/./0211/+:G3-5;=::;;:50?lg7=E8/10=L^Y_hUGM:'4IH<42/+)*))3=:8553233354455444651-1;BOK63<??89@BB>;6.0667873,*8VS14<5.+-18@>4232232243-*.=H@3-,/28A@61220,,.++FG(0B=560*3).6//5<eL+,356430/.-00;B4/10127<5:[ssV87:669>>;8:EMH>527==82?UO>89<6.-;MH4)),1:*?dR=<:98444689::::54T{vZIJPSQOOSVUUOC:9=92/1;PZ\\UI?45?HM<'(0029<=??>=BEE?5,(,1;>FLPYVOMKIMLD>4(.<=87531/--.////26:9779991-59;ETUUW\\_]XTUbb\\R<]\\^dhklmnnnoopooonnpqpqrqpprqpqjgjkkgfjf\\Z[YVUSRPQSUTSSSRRQRRQPPPQRRRRSSSSTSRRRSSRT[^^`a_\\\\\\Z[[XTONNLKMNNORWXVRPNNMMNPSTTTTVVXYTQOOQQOONOPQSW[\\[[[\\[TNLJKOQSXVMLSWUQLHGJJGFHHHJKLIFIRWUMJKLLLKLLLMMNOONPTWZ^djkhhhd]XWQQYYSNNVVSSTWZY[][XURRVXWVUVWVVY[\\\\VTXTTb{qbdcq~zyyz{wy|zuwuf^ire\\oxw{mfjqlikhhqropi^pvlxwmcbghbe|Һ}{yqtoy~Vfsmojfnmga\\l{xv|xurnfejllkf_\\x{dqswyywkdyβjurYZ]bbglgbfiai}}qd[VUUTTUUTUTSTRSRNLRVBrhBFNMMH_tfkposx|w_RRKMPMMMJKQPLNSSUUSRPQRSOMjmPUTg}e^dnfUMg_SYUWWRRQZisTQW[Wk`bfeZPSTXcg^Շܾ`dlqwvrpprl|cORVWVVVUW^badoqrxwnfZRSUQNUXYXXVVKJSXQOQKJJGGIIGGLT\\]^`a^ZXVWUWYWVVY]]WUVWWUTTSQQOPPNLLLKIIIGFEEGMPQTVUSRRRPOOQRRSSRPQSRQQPQTMHIJIHJIIIHGHIJKKKKJIIIHHHGHGHIHIJMOPNMMLKJIDIKLHHIJJJKLJGGGHHGEFGFFFFFEBGW`VRUZZSSMDIRRLCGZ[^ggfcrnJAIGFFFFDBFJBMqtSGLKGGFDDDBCDFIKKJIHHKMOOOOQSaiTACIHHHHHIJIFCADGHGJ;L=BDCCBBAAA@????????<<=>AEIGCCDBBCCDDDEECCAABBBAAAA@BCCAAA@??@@?@?>=<=>><<<<::;;;:;<>@AA??===@A@@??A===@CB>;=><:=@?><<=>=?BEKNMGECBFGEFHIA;731257789=?>;::;??><:AKNFC8999;<99:;:9:879<=>=@>:8>A?721432112138=@?<;<====<::<<=@EB<@CH::>GECCDE?=@DCBCCDDDDEE;7=B@>?DH@;79::;<>?AA>?B><<;;:;<>?BDCA=853566666554359<@EB:46:?>95468998:<><66ADAA@AA@BCDA<978878778:<<::DMKE@?@?@??><>CDCbojsy~kM@>ACDDDB@ACDEGHEB@AFJJIIIHHD<78;=>??>>EB588774479;;;<=<;<<:89::;==<=<523333467776888:9976455666688657889;=>=;::;::8656767787888777888998999:99;96GO<26666654-4LTLJQ]hdRA;89<>;962247889988<;<9542238=ED434:98521/.03<;53334432122/1112332226;:410//121110=@+%+1767::971;gj:1/,,+$%5CDW]?23-)2>;5343-+,,0@F:<<=;:=BA:46789:<>;4,/;9=>54<=847;6/052//452////.-0:4'(-.,/9GJ?324/142/00-,2=E4(+,*,1;>94321-++'#)-+)/0,+*),//..-3?V{m1'+,,-./0.+,-2=;2..-/5:<4/Xk<0;=746?FD?LZO900/9LMAALO7.35995-)3HM<,,,...7;8634764589:;;::8@]so_RSWQHEEMS\\ksjS=:@=?M[a_XJ<:@C;37;2.256437::>BCELK?2-27=BNQPY[LCCGHFA9/'.;96AJC94572/1@QUME@9952;BCCBAABCEIGFLV]\\g}vkQU_fjnomnnnoppooonopppprrrqpoprnia^gldciibZY[\\YVSRQRSSSSSTSSSSSSRQSUUUUWWWVVTSRSSSRUXXY\\_]\\\\[ZZZXURNLJKLMMORSROLLLLKLMQTTUVXVW\\]XQLNRPMLKKNSX[[ZYXVURONLHGIKSSMOTTUVQHBEKJHHIHIJIIHGIOSPLLLLLLLLLKKNONNPPQPRWahijopkc[WVVVU\\r_PTVWWYYYXUPRZa^URTTTTUWW[_^ZXXTYbmoibs~}|vrpoou|ylgnrojicoxdgs{|zumiijjnqiYYyqvwikq|п{yxu{|rlqdhngdglojbco{{ysj|zzvquoehnmjcZlq_iiffgic_bkھfxlRQVZUWhmmmll|vuvxufYWUTSTTRQQPRTUZ^R[aNIJMOPJ\\linhiu|rcSNQRY]YVVVX\\_ZTUTRQQQQPPQSNOu]US`dPWfieTMgpUVZTQNPUg{jKUVYTcoJI_\\PQQRTRMoիpajt{zwvuvunrrZQUYVTUY^_^cssknk_XVTSRSPPWYWPSYQLOQLIPVPNLLIHGFIP\\_`ab_[XWWVVWWWXRPZYZ[YWWUTTSPPPPOMLLKJJJHFFGMTUSPRSRQRQQPOOPQRRQOOQPRSSTUNIIJJJKJHHHHFFHIJJIIHHIIIIIHDIKIIJLOPNMMLKJMGIKKIJKKKLLLKGGHHHHGFGHHGFFFEFGQNDBISE@A>AKQRNL\\aaihacdJ;DNOIEFFCACKKEPooNJMLKIHFDDDBBCEGIJKJJJLMMLJKOWe\\HCIGGHHGHJIGECFGHIJ=rI=ABBAABAAAA?????>?>==<=AGHDBBBBCDDDDEECBBBBCCBA@@@@ABBB@@??>@@?@>==<<<=;:::::<==<<>?@ABAAA@?DDBBBAABA=;;>===>=;:;==;;;<;<<<CJKIHEEKKJJJB611377<ABA@CD@:75668765;>HGH:;9:<<:989989:;>?A@@A@<DA62256632122149@><;<<<===<::;<<;?GD68B:9:;<AFFD@==?@AAABBBBDGC958=DHIIB>;;:9<???<=@A?><<::9::;=@ABCB>9532357887666777;><717;=>>:79;;;;=><87:<@AAABDGILKGC;7899::9:;<::DLIB?=??ABBB@BC?@anmtxyR<@A@ABBA>=>?BEDDB>?AEGHHIHHGA968;===>>=AB9677743689:<===<=><99:;<>>>>;41333125777777898876455544566568899;==<;:;;;:7667877778:988778889::99;;98998:=:777778982.=QRT__UJ=3324;BA>:63.,.3779983695.+,07AHD3+3@?531,.3505@?6222233222101012431..01//011334568;8,(*-125799:7357//121/-,--0AB3..))/3/5:8642108?<;8<>>@AGE94557<AB?82)0I@-++-/013664222044340-----/,1:7-++*/@LC3,02...-,)(,1893*'*($\")5843310.+(*,*&,/390*(*+--,,+4MIIP(,,,---.//../6:52221/4788,VL+4><723?NPS]K0(,,1HXNELJ=037228<;.'+<HA4/--,+*-3846=;:<<::;>BFMYbjjchj\\HBAEDJYenfI6=ELVVPKC<=I\\jhJ584/66679<:8>EB=DJC:9<?CIPKLZW@58><972-*264?UaZG6452.6L^`]\\WNI>5HacV\\aVJILLMI=78;BaU[dflpnllmonoonnmmmoppppstrpqqpqsm]Udm_[gle_]ZYYWURRRRSSSTUTTVVVVVWXZYXWWVUTSSRRSSSRTVUTY^]ZYZZ[[[YTPNLIJKKJKLKKJKKKKMOQTVWYXWZ][WPLOONMJIMSTRONMLKJKLNLHHJIKNPQQSUWXRFBGKKIHHIJKJIHGGKNMLLLKLLLKIKMLLLMNMLKKPZcfjnpmfa^WOY`RVWWVUWYVXbeb[RQTSSTUVUW`da_XVTQYgnmyzwypmmhgntqkkiivtf~zslb[^`_^nyqqw~Ĩ|yvvxqsnddhfeikptl^^myxxvsvxlpt|rv}|wqy~mfnpjahs_RWYXSQQOOONKck~uTMSUWWPR]_Zaswimw{}yh[XTSPNNOONNPQSVWUTSPPPORQJ\\fdjefopfYRZgkkic_^]`fie_YROQRRRRPPRTOYwsZS^qQO\\dddXUb`XVXSNVjz~zMTVUWTORdq{fVJQQOPOTMNǋ`botstttquzn]ZraOSWUUV`d]djeb_YURQQQQVLKipmVISQPQRPHKVQONNJHHGGM[a`_ab]ZWVVVVWWYRLV[^b_YWWVTURPPPONMMLKKJIHFJQUURPQQPPQQQPPPPPOPONNPRTUTQNNMJLLLKJHHHGEEGHIHGHGGIKKHHQXMIJJJJMNMMMMKQXKGKMKLMMMNMMKFDFGHHIHFIHHHFGFHGFGG@FWL?@BCINSVQVbjlddhRBJJJMKIGEBACHLJGUk\\LLLKHEDCACDDBABDEHJKKKKKLNKFIP^bPEGGGGGGHIIGFHHGGGEAFTAAABBBBA@@@@@???>>>===>?CHHDBCDDCDDCEECBBCCCCCCBBAACA???@@@@?@@?=>===<<;;;;;;<>>>>=?@@ABBBBB?DEBGEAAEJFA=;;===?>96:<878878::;>BKMKLJEEEA7//3:@CHIIECBD@:75546668938@B:=;9<<<;99:99:;??@@BAABB926557841/1138>@=;;<=<<<<<::;<:6:EK35899936?EB@><<<>AAA@@@???@>:;?EHFFDA=<98>A==>??>==<978789;>>>@BBBB?;98:;=>>=>>==;9:<<278:=AA=9:<===<;=>?>?BCDEEGJJLKIA;:;;;==98<::DLC=;;=@@@@AA@?<=]lrwypE7@@???>==<=>?AA@A@?@ACFGGGGGB:78:<===>>;BG:8;8448:9:<===;<?>98:;=???>94212202467777777666445544555468:9999:;;::;;:87789::8769<;:;9789:<=>>=@?:53479:;;;;989;:913I[c]G78:8755:@@===7)%1324:653463,*.06=?6-,5=<11017@<46BK5210033332210123442,))+-/023456789:5-*-.0478;;:85.,036731210/0620/.++,*-;A:69854226<;?BCFG@;85238BHA71-'1VU;90(*+/4976850.1200.-,-..//03620.+.=A/''-132/--)(/673/+,,-..3852443/--.,++**,5@9/)*+-,,,/;E3,~:)2222211//1212/-./0335643.L`-&473026FORYM2*12.;TQ??B>:133-+/1.,*%%4EB6-+,/1,/APOOOKA=>>@BGLNJM]egdbZNE?AADJPY]M=@GHGB@>>@CHMYtqT3%04569<;68AB;77:758;<?GMHLUI41441//...1/0H`fbO720.5EQX]]YTOKA7Iec^h\\S`cXMKH<4791=sp`bcfkjijlopnmmmllmnqrqppprqqrttonqk[S_j]WbjiaURXZWTRRRSSSTTVVVWYYYYYYWVTRQPQQQQRRRRRQSSPPX^[WXZ[[]_]ZWTOJJJHGHIKKLLJJLNOQSTUVXYYY[YPKMOOMJKNOKHHGHJJIHJKJKLJHKNNMPTVY[WNECHJIIIIJLJIGFFJLKKKLKLLJIJLLLLLMLJMONSZ`aclpmkkf``gtUVWWZZZZY`uy\\OTPQTRSVWVVef^cc\\SSVX]gs{{zuifhn|sijkhhiieeihiqxyvvjYS^gdnyuy}nnjedegkv~{λ~xstxpomfhiijklljb]gtvtxxqmprkfin{~qit|{ytwtgmoia`UPSQSTPTUMLKLNOq{[KTX\\bgZKTZVY`\\X]fkdZPU][ZZVQOONNOOOQRTUSRPOPOQPM\\_[cbbb_^[\\cmroib__]`egfe_TMOSSTTSRRQRLYsgS^zsYNW`a\\\\^ZXWVUUQJioc`bOVTVSX]MO`|rPKKLMOTTRWթi[ijikoqnqnuwZMVxr\\SQVU`i`[ZVQRQNPPPPPQOMfcRQQSURKKNNOOPNKKLJKR]_`ba]YWVXWWVVWTOTZZaea[YXVVVRPPQOOONKLLJIHKORSSRQPPNPQPPQQRPNMLLLMOQRQOIIKMNNNMLKJIGHHGHHHGHHHJJIHFTf`LJJJJKMMMMLKPVNFJMNNNMMNNNKGDCEGGJJHGHGGFFCJKGHNKJVYHEJIHINQS\\ltofi\\EGKGFHJJHGD@BGIIKHKNMLHEB@??@ACFEBBBBDEGHJKKJMMIGKUaZJFGGGGGGHGGGJIGFECA:<CFCCBBBA@?>??>>>>>><>?>@DFFDBDEDCCCBCCBABCCCCDDDDCABA?=;;<=====???>>==<::;<==?@??>=?@@@BCBBCA@ABCCBAAFIGE@;<==@@;8:;6311379:;:;ELG@@:998679;@EJLIGC@@B=:86678767967:97BG;=<=<;;:8888<?AABBDG76644578631128<>>=====<<<<<;::96327A7;<==7259<=>><<<=?@BBA@??==CFE@?DCFEB>>@@?=;;99:99::656568:<<=???BDCBAAACCABAA@>><:99=99::89?@=<=@AA>;=>@CEGFFEEGHHHGHEECA>:;<758:<EI=<::<>>><<<;;:;Yksww}b>7=<<=<<<====<=?>>?>>>@BEFEEEDA<8:;;==??8>KC88758<;:<=;;<;<>>:879<???>:7544433346654455554434444676469:9999997999;:878:<>>:75:=<<<;:::;>??@AAA>:768;:;;<<;99;@B50LfS=857987669;===<;429712@><<862,,/04640-15841016=?78:@A95/,-03332210/02242.+++-/258;:876530-++,/48:9:9945954697685/2?J>3/('+++4A?9897541/5<CFHKPL<1///3?HIB4))(1JI><4+.038;841/,))+,-------/132/..-),99('().341,,-16753258:>B@@;2.3<<34>:.++,+,4993-,./...2510,\\e,*222232201485-)()))+3::/*/95)+/0/028A=@E=@A:11:B:..08;998630/-,+*('2>9,+.39827Rif`ZF8<ACCFEB@CJT]ZPMMJDAELSTRNICCA8689;::;==@P_fJ189:9742/4=;5430/01238@FILI;4751/--,.0/,*:VdcU=>;-Bfieh[B4678?MWXhfHTshK@>615<?6,R]^_cddfilpqjgikmnmptrnotqmnoooqqnkkjhYO]h^U[ba\\WVWXVSRRRSSSTTUWWWXXVVTTSQONNNPQQPQQQQQRRPMLTYWTVWWYZZZZXTNJKIGHIJKKLJIJLMLLLMOTXYX[]WOLLLLLKMNLIGGHHHHHGGILKJKLLJLPUXZ^c`UG?DIIHHHJJHGGGHHHILOMKLKJJKMMMMMLJMSUTSWZ^fhghlqrjYTVj]UXWYYZZZYhu`PPdeQRSUUWVefX_dkd[VRU\\eloomlmmky}qkihgjlkjjjiimo~vqysfbedchr}||zw~|pgdd`YURW\\hvzvmjov~yxzymҴuurw{jpldgjiijklkhgqvtuxwssorwmhnv~vjow{{zwsxqfijdcpeJIMSSR[^ZWXX[cYurrgX[bf]Y`e_XTPSXXXZ[]aa`cdc_YVURNNOOPRSSQNNNMNPUXVZ]^^^^\\[\\_cfeb`^]]^afhhf^USTTUTSRRUVSO\\gWVaYRX\\]^YX\\VTSRRTY\\tyc_mpMXRUXSS_imi`RNIJNV`PÀ]dgeehlmliihgZRVsbNTYX^dWMRPMOOPPPPOOQKSqWSTSOLLJKNMPOPPNMIGR[^ba]YVUWWWVVVTOSWRU_gd]XTTUTRRQPONNLLMJIJJLOPQQQPPOPQPPQQQOMLKKJGHLMKLHGHMONMMMMJHHJJIHHHHHHIKKLNOQTaUGKJJJJKKLLLLJKMNOONNMMNNNKGDBCEFHIIGFFEDC>NJKLNONQZQKLKIIKJOew{qmgK?DDDFGGHHIFBDFJJJIJMMJHEDB@AAADFFDCBCEDCEHKLJKMLIILZcSHGGHGGGGGGGIIGEDCAB>ADCCBA@?@@?=>>>?>======BDDDDDDFECDCBBBCCCEEEEDDEEB?>?><;;::;:::<=====<<;:<=>>@AA@>=?@@ABCA?@AA@@@ABCB@EGGE=:;<==;:9943138<;:;:9:A?88788;>ACDDFGGGEC@@?;9988987889899=BKL:===<<;:8557:?AAAADA4454567764447<==<=====<<;<=>:753413;>@CA93357:=??>=<=?ACCCCCBCBEHGA?CEDCABBDC><;9764346533333346745569<<<<>@@@@>??<:899878::99856;@BA@AE=::9:?FHFFFGGHIHGFFHHFA:79626;=DC;:::<<;:9997899SjrusiI79<9:<<<===;;<;=<;<<<<>@BEEEEFG@88;;:<??:8BH<5769<;<<<;;<;:<<<824;???><;::;:::8555644555544444446766678899887556:;9779;=@?=84:>=<<;;::<<<;;<>?ABCA?;85589:898<J=/HR<3;=97789889;;;=?AB=?98KWB:740---.011203754359886.2:<951-*+-0112220..02331///.0259=;97641/0//--/2568;;3/3005:97:://:C;5,&)/-.8?<7761024527DLPTQB3,)(-7?A?F<-*+,21/0676679:7/,-,))*,--...-*+-23.*))$$8C0,.-0221.+-6<51:?==>?><82-+.=FBFK3-.+,.-,.00/12100130-32=@)-0112110138=7/-+**(&,7;20320565009752-15>LF3-13/,*)*2:C@==7//0.000,*47.,8@?=<48Zsm\\B248<BEA=CHHHHKE?EHKGHKLHA:=A>7117;<93/6GOB7KaR<@F?645437:5123210//37;AC<65631..--/397.-Bbk\\CKO1?sylK/,04:FNKQ\\RRowS?IF745434.5_E\\_b`fnqpqjaahlmnpsqibeospnmmljhiifegdUN_hZOP[b`WTUUTRQRQSSRSTUVVUTTRQQPONNNNOQQQQQQQQQQPNLJPSQRRRRRRQRRQMKKJIIJKKLMLJJLLJHGHIMSWXYZ[ZWTPONLMONLJIIIIIIHGIKJIKLKILPUZ`cdfh^H?CFGHHHHHHGGGGFHLPOKKKJKLMNNMMMNNMMLLOTY\\ZX\\chiigh_T]g^WYYXZ^aa^\\`bWJwzNSSRWYT_aW[Yah_WRTUX_dhjmmkszpsofgloomlkjhjlt}wn[mngaZXfxz{{qfefhkmnpxnY[`hmh`]bls|xleğ|sor}p`kghlkmnkilmopsutvwusuvznqxwqmuzzzzxqw{kchhR|bZZitywvopqyuo}iZ[_ahh`WTVVVUVX\\``babegggfb_UONLLMOQQOMMNNORXZZYWW[``\\Y[]]^_`aa`]]agkmlid]XWVTSQSVWWTQ\\_UTQQ\\a\\WVVUPPQOQ\\ft}unlON[[SZVN_}|lXQPZZCiԟi_fggjlllifeiXPXUc{cWSV\\a`QS^OGNQOPOOPPPObaQTSOLJKLLJONNRNMLGIU^dc^ZVUUVVVWUSMOVSMNXbc^UQSUSTSQOMLLLLKKKJJLNOOOOOOOPPPPQPNLLKKIFGKKIIIIILONLLMKHFHJJJHHHHHHIKOSUVPGGPGHKJJJIIIJJKKMQSRPPNMLLMLKGCCCBDEEGGEDDCCASKQRQNNPUUNIHIKKJNl|qeSCEEFHHHHHHHHFFGJKIJKLKHIIFDDDCCDEEDDBCEEEFEDFJKKJJIEOc\\IDHHHGGGGGGHHEDCBBC@@BABAA@?@@?>>>===<;=>@AACDDDDDEDDDDCCBDEFFFFFEEDCA?>====>>>>==<<<<<<<<;;<=>>?ABBA??@@>@ABB>;@?>>>@AFGDDEEB>;;<<;;;;;7779=?=<<<;<8:;99;=CHGHHFECCDCA?>=;:9999878989<@HOG75=?=><<<:747:>@ABB?9675567776557:=>=<=====<<<<<:842258=@BE?;5347:==>??==>?@ABBCDDEEGFFFCAECBA?<96676432/-/0/././..-./**.03779<;<9;=<:;9536765456555337=BB@BA98:746:>BDGGHHIJHEFHLHA;7:835;@A>;99::99899768;8Mio|rM9;9879::;=<<?B@=<::;;<;<>ADDEFGHC:79;9;?=:47FB6679<;<;;;<<;:;<;605>@?<:89<>A@@?><;:866655544444457777679:;:998657::8679;=??=;8<?>=;;;:::::99:<=<?ACB>9524679:98BB==66;<98889::::;<==??>;>ACN[=341.-,,,..0003535::9643.0520//.-,-./01221//023322122124578767850,+.../0147;;4+-.-/8:468/-,-/.//44..39841/,+/4623?PZR@4/-++/4551;A<50*(*'*9@<9;:60.,/52-+,--/.,*')+*+*)'(% 6R<5?BA<;=;2.371.7BB@@81/-..,+4EOSE').+/0-)*,-1531134420330.+.011110/039>8441,+-+*08@?56::::4/790-+-14=:0--.)*+*)(3AHIMI?94../-++0346CJE=><-4`x]8.0-3<?<86;A?79;99;BFHA74325;824:AEFHA30=HB66WY>BFD>@B=<?:1+,///00/013530/-,+-/,+-17AGG@9IYRBGM67k]3,9@CD>9::38\\mQ4AXSE@6/0319OY[Z]fprokf_\\bilkmolaZYY^ionllke```_agg]PP]bWOQW\\\\YSQQRQPQRRRRRTTSRQPPPPOONNNOOOPRRQQQQQQQPNMLNPPONMKMMLKKLKKJJKMMNNNLLLMLKJKKKKMPRSVZ_de`YQLNONMMLLKKKJIJLLKKJJJKLPTZbfedhmdPDEHHHGGHHHHHGGGINNLLLKJLMMMMMNOOMKJKLORRONRXZZZX^e`ZXZYZ\\]_dihfda]VThgUWXXje]g[[Y[]Y[Z[XWVX[^`cdfkpnjotrklsrnmkjkjlmxuvie~z~|mWVVbzmkiahqv}ngcbca_a_bhytk}potrqx~ooa`bXdlihlpssuttwwsrtwztnmlpv{z|{up[g_Hwntxupqstvyp\\]eih\\RPRONSVYZXY[^`aaa`aa^[WVTQQOONNLKLPRSUWXWVUTWYYYYY\\[\\_`bcb^\\_dijjgc^[ZYTROQVWWSPUa_USUYYVTONSUTRMVbehiabgucF_fQ\\YQRtrprniw|qbZWMERݸ|^cghknoponns[LURMN_ml_RW`fXNYXLIOQOONPPRRBaXYSRNHILLIOSOPOMOQMO^ec^ZWWXZ[WTSQPNPTOGGRafc\\WTSUTQONMLLLLKJIJJLMLMMMNMOOPPPPNLLMMJIKLKJHJKKKMNNMLIGHJJJIIHHHHIIJMONQPSaUFHIILLHHGFEGLVXVTRQOOMKKKKIDCCADKFABCDDEFQKSRPOPOPTVOGFKNKIOozhOBDHGHHHIIIIJIIIIHJKJIHHGHHFEEEDDCCDDDCBBCCEC@BFIIIGGEEWcN@GHHHGGGGGGFDCCCCDB?@@AA@@???>>>>==>?BJMMDAEEEEDDDDDDDDDDDFFGGFFGGECC@>=>>>>=>@??>====<;;::<=>=?@ABCA???@?@BBA>?DDA>@@ABFHFE?<;==;;;;;;;;;<<>?A??A@:::;<?AGIGFECB@A@A><;;;:999888898:KWKJ>19??=>>>?=<;;<>@ABA9488756776678;=>?><;<<<=<<;;:85215=CCCA=86247:===>?>>>??@AABCFGFFEEFHB<>CA?50/-,.//.-,--,-----..012/*+-158;>@=::;:7652256642311212336;?AB?76:865339<@BFHKLHFHIJG@=;:964:B?<:89889987777:?8IlwuP9::975566667:BID@>>>=<<<;=ACEEFHIH?8797:>>:55?C=889:9989;;;;::::613;?=86668;>??>?BB<77644554444446777789;<<;::9767::867:;=?@@@@???<;;:;;;;:9:;<<;;<@CB?;84479=???AB959::8888:;::;;<>=>??=<?CKC9831.-+,,,,--02108>9014531.-,,.0/.--/023311221222222233566667775238725764348:4///-,>L7-2/.+,,,.131.--0242,*.2562.5JSH73/.+*,--,+,<B;3,,-)*48:==94/-,/7:40.,-/-*'',0,&%'(,1.4P@8LPF<?KH8,**.0-7@GE?5-/77/.0:EG5'(*+10,..,178403575433440-.001110//3676675.,01,/<J>59988<:456-,.,-1485-)+'()((',>JJIGC:2---+**+4>ADD@;84,#8g]0+3//34780/463499675:>88<BE?;967=AEGKME4+.9HMXWF=<=CE>8<?:510,-1597541230/0/-36..>JGIPTUF57==9:5=rzF48AEHLG;83,=UD+/IRLF>56859@HITXdmica^[[^aegeee]USVWWZahkkje]Z[ZX\\ddXLNW[XQMPWXTNMOPPPQRRQQRSRQQPOPPOOONNOOOPQRQQQQQQPPPMLLMMLMKIKLJHHJKKKKLMMOOLKLMMMMOOOONLKKLPVWY^^WOMNONLMONLLLJJLMMMLJJIJMRTW^cdcbgpgQHHIHGHIHHIIIHFFHKLMMLKLMLLMMNNPQOKKMNNNMMPTVYZVSX^ca^^^aa`acdbdd^_nk]Y_e\\}{s]`d_lcV[a]ZXVWZZ^cbaeiknoqrrrpmkjjkjlovxxww|u}mg~cS\\]r{tv|}y~lq{ynfjd^Z\\\\i~}tp}ldn}|pku|tj^ZSOV`ciltuuuutvvtstv|okxvwwxqp~eaf^brstwvttsqprrmrnjb_gf\\SNNNONQZ^\\[[[[\\^__][XWVUTTWXXVTROMMNQRSSTTTTTSSRTVVVWX[^`aa`]\\\\^``_[WUTVYZWOPVWVUSSY^^[YVSSQP\\a[WSQUXXUOLNPhrTLheS`XSIbwmhlpq~jgsteG|ȔibfgkosuvtvhKSRPRRRj|dP\\e[NNjx]KNOOOQQQSIm[kfUXTHGLNILONPOOTYTMZgf_ZWWZ_^SNNNOOMNNMLNXbggaXSTVSPPONMMLLKJJKKLMMMMMMNOPOPOMLLMMLIKJJJJJKLKLNNNLIGHJJIIIIHHIIJJKHGIWk~\\DHMGBEEEGHHHLZ`YVTQQQOMLMNLEABCGa`G=ACCAD[IWPILPPOPRQHCHNLJLc|v_HDGGGFHHIIJJJKKKJHJKIHGFGFFEDDDCCCBCCCCCABABCDDCEIIFFFCPbSAEHHHGGGFFEECCCCDDB?@@@@>=<=>>>>???@DGOMHBBEGGGEDDDDDDDGGFFGGFGGFFEEDA=>@A@@?>?????>>>=<:9:;===?@ACB@@@@A@?@BBAADGFEB??>BFD@===>>=;;;;:<<>>>@ABBBDC><<=@EDFFDBBA@>>>>=;::;99999889887GZHF:9??>>>>???>>??@BC@7/378877887788;==>=<=<<<<<;:95213:@EEA=7111258<=<==>==>?@??@BDEFFDBADD>;>AC7//13425987776786332224:>A8/,,.4;AA?;78753212444312/032332358=DB85676544678:>CJJHHIHFCA@><=;5:D@;:99999998777;?6Ft}\\78<878754554469ADAAABB>;<;;=ACDFGHJD95668==966;@?::9887679:::999972/7=73333356899<AA;7764455554444567789:;=<;;:97689:758:<=?ABDCA@>:99;;;;;;:;;<<:::>DDCDC:2349?CFJF=88889999:;:9::;<=>><===@C9;70/.,*++,,,,//,098.-14541.-,-.///./012321231/00111123456777765459A<4<@<73256521014CZE,-.-++**)*)+00223576124551+,3?F@2/.++*+,+-.176553-160,6<>70-,+-15741-,0/-,-13.*)+15:65I>5LO<4?IK;,%%,3637AFD8.6E=21000.*)((+0/,2405<;633776533650-/010000-/22122330.//-.?F>65446;>646/-,--0564-*,,((((&*>LJF=30/,+,****0@A:6143**&&DL++:51-+2;70-069;>?<;934:AFFD@=999?>=>DI=/5EU\\SNJ=;=B?95478570+-17?@><40:>@IJGG@3:LQJJNOYZE6<<331FL7BEDEDKPD76:FG=5FM@97018::>@=4W^h`URTVWY\\[]_\\ZXTSUWXXVV\\diiea]ZWUTYaaVLKS[XQNPQROLLMNOPPQPPQRRQPPPPOOOOOMNOOPQRQQQQQPPPONMLKKKLJIJJJIIIJJKKJKJKMLJLMMMMOOOQPNKJIKNMKMOMJLMOOMMOPONNMLLMMMLKJJJKOSUX\\^`_^dgZLHGGGIJIHHIJIGEDHJLNMMMNMLMNMMOQOMLNONNOOOPSW]bc`\\\\`bcdccb`]^_]``ajlb[diZt_hp[lfSY_`]\\XXWV[a__dhhggjlmmmkjjkkjlsxquw{zvuws~~d\\mtn~~yyzxznpw~|ic_XRWZ[enpmu|v|{wsjdc^ZUOSTSTUWY]\\h{yuuuvvuuyu~ɮidaceaY_qlccw{~~s{ccc\\ROOOPQUX[^^^]\\[ZZ\\]\\ZUSPMOQU[\\ZXXWVQMLNNOPPRRQPOPSTRPQV[]]\\\\YVVTTRRQNNNLNRYXXXWXWUQQSW\\]TOQRSVfdSSTTSSTOMQPMTXUVY\\TXd\\XSN}{wx}lo_Uѩ{hedgkouxxy{XTRPTVPTr~bU\\[TKc}VNRQQONNORMnSicPWUIHLMLJJLOORXWNHUikb\\XW[[RMJJJJGGMORUTVWZekeYSVXTQPPPONMMMLLLMONMMNMMOPPPOMLLMNLIIIIJKKLLKLMNNMIGGIJJIIIHHIIJLKIFAGftVCIXVHEJLPRRMO[_ZWVSSRQONPQMGCCDHbtbFBEA@MLIJPWVNNMHHQMBBLMJLdwcIEIGGGFHHIIJIIKJIIGHIGFEEEDDDCCCBAABDCDDDCBCEFFEEEHHGFFCGZ]HBGHGGFFFEDCDDCDFEB?@@@@@><;>AA@AAABBCB??AFIHFFDDDDDDEHHGGGGGGGHGFFFDAA@BCBCB@?AA@???>=<:89;=>>?@ABA?@ABA@=>BBBBCEFHHCB@?@?=>=>>=;;:::::<>@AB@?AA??>>?ADEEEEDBAA@><<<;;;;:999998899737LD@4:A><=>>==?>>?CCDE=-*157887887778<=><<>??=<;:886226>CFC=:51012469;<;<<>==>@A><=@DDCDA<7;97;B@632348::<??>>?>>>;8643339DGB;5/)*4=>952353322245467669<;:765544;B>646666577768;?@DHJHDBAA?=>:5=F@:;:999::::98:==:Q|xI8>;::97558988879<?ABEF=9;;;<>@ADFGKE95557;<:977:<;::9886578:9988960.6<7222334345668:85554355554446788889:;;;:::986787668:<<=AFGED?;::9:::::::99:;:9::@EDFGB5-.037>FD=878999999::9::::<===>>>>>;950.--+)*,--..,*0420102122/..../../0222221331/..000234456776655444766?C>8235886009AHVQ;+-,++*(('&)/-3<97<?95553/*')6A<1-,*-440,/3367:<3,:F;0453-++*+**,3870,05754420367;:;44F;,DH52<BC;31--5C@;=ED:,8UK712.)(()))*.115766:841487555574.-/30.-+++-1211222022/,.3>A6,+/5;;647639;1333.+.47.,+(',?QMB;0+++***+-.1;8.*(/1,*,'+5)*8620,3<<627>>;?ACFA836<<:<BC>;:;:989>>>LYSB:CGEDA>32310221.,.14>FIG:1<FL\\dc[G9BF?<?DEIOKBA=781Re/3ADEHFKQC3137<FQVM?2)(.6>>9666X[ZSPPRSUVWWWXWUTSSTVXYXUW^dedb`\\XUTSV]^XPQUWTQONOOMLKJLNOOPPOQQPPOPPPPNPPONONPRRRRQQQPPPPONMLKJJIIIHIIHHIIJIIIHHJKKKMMNOMLMNNLJIIIIIIHKNKKLMQPOQRRRSPMNLIKMLJJIHJLORSRUVVUVTMHGIIHHHGHIJJJHFFHJLMMOQPMMNNMOPPPPOONNPOKJNPU_dc``^`fhfdcba_]Z\\\\[_a`_bdb_ttTprWbc\\__`b_\\\\^_[\\`bdeeeeeeegijjjllfk{ywzuplgjwumx}{{}}mszwszsgie\\VYZYX]abhqpuzd[kpiYOQTUTSSUWSSQUkxwutvvvx~vu{w]Z[ZSYqsuoYj˿t{ysq|ti_XWUSTTVXYYXZ^`\\WUSRVWVTRQPNRWX\\]]\\\\^ZPJKLMMKMNMOPPQQRQSXZ\\^[ZYWVTSPNLLMMMMLPQRY[YZYONRSUWWSPTY][RRTUVZ`be_VVPKMTWSPNMRX[[ZSg}~p}|WaԹnb_`beiosrwpUSTTTUQQkz`RX\\RR[aZOPRRNLMPTK^aQNff[VPGDEKOOJJNOSTOHFQhof]XW^TCEEFFC?EPUXXVUROR_jfYSVWTQPPPPONNMLLMNMKLLLLNPSRPMLMPNLJKLKKJLMLKLMNNMIFGIIJIHGHHHHHJLIFD><HIEHVa^ZZYXUSMP[]YWVTSRQPPQQMGCBCFIRlbLGDLZA?QajcONNJHLLDEMNMOsoQGJJHGGGGHIIIHGIJIGFFGFFFDDCCCCBCC@ADFCDFGFCHLLKJJHHHGGFBDS^NBGHGGFEECBCDEDEFFB?@ACHJIHGHHGEDDDABCA??AGGFECCCCDDFIIGFFGGGGGFFEEFDCCBDDDDDCCEECA@@??>:::=?@BB@@A@@AABB@==ABBCBCDFHIHECB@<<<<=<<:<;:::=>@AB????>@?>AFECDCCB@?>>=<<<<::::988889::;846C<55=@:8;=<=>>>>@DFEF>78577776776558<==;=>?A?;874435;@CB?:545313568:<;;<;==<>AA>;:>BA@A>50226::50243568<<;<<>@@?A?<:87615?BAAC>5,+/55546566788:;::<=;9::97656777<<866655455665656<EIHB@AA?=<:7?F?:;:9::::::::<>=7N~gEEA<<::976:=>>>>66<?@DF<79;;:<=>ADFJF;77669<:9756:;:::9886577688896/.48422234433310124444344444466899::889::;::::97665579:<;;AFIJE:9<<;;:::898658:99869?CHJKA3..039@A<87899999:::::;;;<<<>>>>=<:62.---,)(,/0672/00032010121000//./23444421330.,,-./2455556655436::869>BA725><;900HVMLQH6-+-+*)*+,/.*.;<9=>;741/,(().31/11/5::621269;??0+?ME?<1*'(((**++.340,/8940/17<=:55;63FB+;E>66637?A8-0@JID?@=-;fW8132/-++)**,2987776431056468861--..-,+)*-//0223432330,-2CD5/33343116;>BI?771**/8@E<0*).@WTE@;1-+*))-/1362)&(-3/**(&)))/36655>FCADD>;=?>@FD8037988;<@CA@@=;;:9BSVF<@DBA?:2165200.,,07BGJJJB;<>F_ssZA:>=;;?FFC>=>==??<`nQ@77=DHGJH>97/.:I[[QPC0+2EPJ?997QQRSTTTTTUVVVWVUUSRSTVXWWY\\^_^\\ZXVTTUTSX[XSQSSQQOONNLLKKLMOOPPPPPPPPPPPQPQRQQPQQRRRRQPPPPPPOONMMLKKJIJJIHHHHHGGFGFGJKLNPQPONNNLKIHIHIIIJOOKJLPQQRTTUURRTMHJKJKKJIHGJLKKJKMKKKJJJJJGEGGFHIIJJHGGGHJLNPPNLMNMMOPOOPONNPOKJNOPSVY^ghfffhfcbcb^]\\Z^ba_`_Z`_jub]qi\\kuwumknaVajlk`_dec`bdehghgghgkmhnugw~}xyztky~{yv}yzmt}agolbcnun`YXW[_f|w]ZgqmaVWYVRRSTSSSQSgxyvvvvx|xrwpdllZXVSUU\\u{ywh]qu}|sosniidiqk][][YYXX[[[[Y[^^YROOPPOOOOU[YZ`da]\\\\[VPNMLLJILONNQRRPSYbe````^_aegb\\XSPPONLNRRQRTU[QZgXRPPSVX[ZXXRTTRX^fdb^_ZS`aQQSPMMOMMQRQNosfw|zodq[[^^`adeedmmZRTUUVWXYir^U\\`ZVTVYYZ[WTTRRQPGMRhmiaZRGBEKOOMMMNOLJMTbni\\WVZNAEHJGBFNVWXYWSSPNSahf^VVVTSRQONNMLLLLKJKKJKMPSVVQLLNQMIJLLKJKMMLMMLNNMKHHHHJIHHGHIIIIJLNKHJIIHGN\\_]YWURPMPXZYYTRQQQPPOPMGC@ADADUebMOSTAOddT[[XWSKGIJNQQK_tZHLKIHHHGHJJJIGFHIGEEFFEEEDCCCCCBCDFJMICBCFHGJLJHGGGGGGHGDBIRMEEFFEEDCAACCCDFFGFDDFHKLLMMMKHFDBBBAA@??CFDCCBBBCDDGJIFFFFEEEFEDFEEEEEDFFEFFFGHHFDCDCDA=<;<@BDEC@?>@AABB@<;@A>>?BDEFIKIDAB>:99:;;;;;::<??@AA?>>>?ACDEEA@ABB@><;;<;<<<:999988899::;:99=;8@>A87>>===>>@BEGEC@?;:98788766658;<===>?A@:6546<EEA=;86655335889;;;<<<====>=;89=A>==84216962111133347;=@AACCDDA???=<88@BBBCFD:0,/8BBB??>????>>>;<8434566569;:889888764446656657=AC@?@@><<::AC<:<;:;;;::::<<;<6PvUBHA?><<=?>:;>@EIC:8;?A>957:::;;<=>@EF@;9655897766899:;;9984454666773123322234332211113223433334588::9::99:99:::;<;843468::99:@FLG;5:=<<;<<7034214899::87>FJKH=3048;AA<:;:998889:::;;<<;<<<=<<=<:4,(*,,,*(+/4?@:5/,,.//01232111/.21/355663110.,,,,,/1466545654336;;9;;<A=417E@;63BdhO??@9-+,,,+-18=:317::<9:92//.-*)()02033566775346:A@0,=GCFG>/)**)+-/0///-+,1/,,18@B=735=:7E@)8EB8+*,1<A6/.6GOD35<0=pS24531.,*)()*17855544632643686/+++,,+,1234400/.000001102<F=/5=61210.,/63=GHC:7667;D@2--3DYT@;6000-**,-.050))*/42*%)*((,367789BHGEC?<;;;85=F@0-7;:65<FJLMLIFFB55MXL=8=?>=:975445531/2BRNKJHGF=5AfoB5437=ENRTSJ>:<?DBH^[VS@;CEDHF50@G>9?IVSN][D4C^e`XSJ<RSUUVVWVTUVVVVUTTUTSTVVVWXYYYWURSTSTVWTPTVSQQQPPPONNNMMMMMNOOPQPPQPQQPPPQRRSTTRQQQQQPPPPPPOOOONNNLJJJIJJIGFFFGGGGGGHJLOPQQQPPNMMKIHHHIHFJNKKMLOPORWWWVVWUROMIHJJJIHHHHHHHHHIJJLKKJGEFFEFGGGHIIGGFGJLLLNLLMMMNOMLMNNMMOMMNNNNKTflkjjeabefecba`aa`acb`Z[brzodg\\e~qwnW_kiwrdiap}hamkenkbfdhnnf\\jxyc]u}ry}{znm~^gsz{tkbZORewtb^_ipaRPRRRRSSSTUQVft|yy{{{||~s\\XYPINWdsrinnl}wfeltslihjkjkfaba_][Z[\\[\\\\ZYZ\\[TQQPPOONNSZXWbd]WVVUSRPMMNKINTRNPUWY\\^bba`_^^afmplhb[VVWUWWPRVQNTRMJPQPSVUVUY[Z\\TOWYYZZVYPa}PRTSQNNOOPQQOKV`^oyqp{|ht{uty~|up˭}_]]\\\\\\\\]^[`i\\RSTUXZ`ddjh_X`ehdaccca^[YUTMQOPTaecfhhbYNFEKNLLLNNPUTYhh[WTRLLNMKHHOVZVVYTMOQVY\\`giaZXVUTQONNNLLLLKKKKLLOTURQQLKMLJGIJJJKLLLLNOMNNNLIIGGHHGHHHIIJMQQOKOYa[LGKSWVSSQOOMNVYYXTPPQQPPOOMGCBADHGBN]PUQHJTPDDN[SPHEGJPSSQIgaKLNKIHJJHILLKIGFHGEEDDEEDCDCCCBCFFIORRNIC@CFKHCCDEEEFFGIHFDCGIGEFFFFEEDCCCCBAABDFHHIGGIJIGGFDC@@A@??>@CEDCCCBBDEDGIGGGGFFEDEEEEFEEFFFFEEFEFGFGGEEGGEBA?=<?ABID@;=ABBA@?;:=B>;;?DFGJKH?:AC?:9:9;<;;<<>?@ABA?=>>?AGKG@>>?@@=;::::9;;::9:9::999:::;;:;=??@<?827CA=>>>@CFGB?;95666688667757;>?>=>>>=98;@CJL@8886654226799;=<<<<<=====;978<@>=:558:<:42101233335>EHFEFGGFFDDDCDDCDBBB@BEA<:427=>@CDA?><;;;765445667788;:979::998666556666568<>>>><>>>?A>:9::;;;;:::<<<:<5MjKCHBB@>=@GF>:;=CMPH<6:?>94689:9::;;<@DC>973267766788::;;:;:63233455554443233344433444443344333357::::999:<<;;<<<<<;8557:>>;989;BG>56<=;<<>>4,.//02579;;98:>BEE?86;>>@@<9<;9877889:;;<=<;;::;;;<<:81+,+,--./.6;996/)+-../012210/-**(+03456420-,+,/0146633534544458;<=;;=9201<I<410WwY93232.,,.//1588:=:9:==??=;:;<;974582-033479;<<<=?@@42<>;DI?4/,+)+/12211-)++''0<DEC=77>A><E@5IKE>13><761257@G=,-75@jH/6521/+(((((,/3441146338:865-()*+..,198664460)(()*-1126><1*1;72012.'$&(.DUL@>>==3+-,/4;GQE/./-/20+**++-3-&'*1770))*))/78788;=<;88:999:843<B<58:7756CGGOWWUTPC@RR>;@ABDC>:4102551/26>JKJIHIJA4>jT-6:;DILTSSYWJA?ADFJRUYVLIME?DB/+@MK@==A@ETiaGL`bbc]L9ZZXVWXWVUUTTTSSSTUTSTUUVVVVWVSRRRQRTSUVROPQPPPOONOOOONNOOOOOOPQQQQQQQQQPQRSSTVUTSSSRQQPPPPPONNNNMLJJKJIKLHEEFFFGHHHGIKMNMMMLNNMMMKIIHHHGGHGIKIJLJKRVVTQSWYVQLIHHHJJHHHGHIJJJKLMKLMKHGGGFFFFGIJJHGFHIIIKLMMMMNNNMMMNMKMOPNJLPPPY^ZTkgU^``cfijjhhjkjhgecmzuheauwnuZenlvrgc|lgulX[cma`eXdjp{g\\lww{wm|}~}xrrvx}gese[VR\\ddfc\\fp`ONRQORSSTUUTT`t}}|z|zaVX]iwĢrw|in{rorotnlvxvnc`dfghfedcbb_][\\[[[[ZZ[\\ZTRRRRPPPNMQWZ_]VTWYWVUQMNPONOSRLR\\_ad`]_bd`[[\\]abed`\\Z\\_bgcXSTQQXIwbHTTTSQQU[YVY[ZUUUTTTXWTYR]QdkPLPPOPOPQNLJLMOULFRYcrtvsmklhy[Fpa_\\ZZ[Z[YZ_YTRSWZ]_dcaie[Z\\ZZZZYYYYYXXVTSQNQZ^`cekppgVE<CKOPORUVQSae]ZQGFJKIGIPW\\\\YWVQNJMZca_`dfd]XVWSPOOOMMMMKKKKKLNOOONOKKLIHHIIIKKKLLMPQNNONLJIGFGGHHIIKKLNRNKPelcbTIJOQQOONLMLKTYYXTRRSSQPPPNFCCACGGCABMTQJJKKKJIHBAADHKOOMLIIMOONKIIJKIILKIGFFFEDEECCDCDDCDEFJMOQRPMPPJEBBFGDCGFEEEFGIHGGFGHHFEFFFEFDCDEECA>?@AEFFEEGHGEDDAA@??????BEEEECAABDFEFGGHHGGGFFFEFEEEDEEDDDDDDDDDEEDEFFDBDCBAA@@?B@=:>BAA@?::;@?<<<@DHMLC96>DB=::::<=;<???@BB@>=?@ADHHC?>>??=;:::::99:;::;:::999:::9::;===9<70+.?@<=>>?BCB>:666766777557758=@A>==<:;=?DJLH>335555579:;;<<>><<<<<====<9999<?==968<<:6310012233229ADDDEFFGGEEEEEFFDCCEDCC?<@?4.27?C>64455554446887787899:978:::;9899767655557::;=?BBA@>=<;;;:;;::::;==;;=7SZ>GHCDB@??BGG?::<HPNH>8:?A;8899999:;<@CEB97535677679989;;>?=85224344444554334334455555444444344569;;:999::<<=====>>;868;@B@>;999<>76<>=<<=?>4/../11135778;<;;<<:9>?>>=?=:::9887889:;<=<<;;:;;;<<;?B;41/..3851204683,-/////0101231039502335420-,--/04?EE=347533346:CD>56:2+-0AK940Dm\\6*12/,./012223/)*/2008?B@<;;<>>>@?==;9;@?9:?><>GKB8:98721:@9/12+),266532-))+(*6FMH=557::81<QTYJEHCEGI>748<:884,)3:BV<0331110/00+*)*-14212426;;51/)')*,-++6@:3.,362*+--*(*/36;62/2;<5<@70/1346AQH===82,'&+3=EFE:,++,/00.,+++,11'%)19;93+)(+,05<@:302345559AHF>62;A<55882/7<4=Zd_\\[RIOUPKKFEED@7.-..053.154=MKEEFE@56QX3-NbmwiSVVNTXNDA>@GNSUVWURMC9;A5/<FA7CI;:AD^i[Z]^[RH;/YYXWXWVUUUTTTRSTTTTUTTUVUUVVUTTSRQRSQQTTQOPPPPPPOPPOOOOOPPPOOPQQQQQQQQQQPRSTTUVWWWXVUROOPOPOMNNNLMMLLLJKLKIGFFFFGHIIIJKKIIIHJMMMLLKIGGGGGFEEFGGFFFIMNLIJPUSONMJHIKJIJIIHIKKKJKLKLNMKJKJHHFEFGIIHHHHHHHJKLLLNONNOOONMMMPRRNPO[ZGIQMX^UZWZ`eikijkmpqonmlpqpnmtt}p_spiwrdةxqvbRQ\\~\\n^^ikiw~h]qystx{~uuzrvxknupsobtui`VOVdbYgqcSOQOQRSTSTUSUdqtxuZba¿sfqknzwtolx¹tkywf_aa_bfgggfedc`^[ZVTWZ]a``b^XRPQQPOOMOZ_[YWTW]_][WSNOQRSQPOLUcea`_\\^fje`[ZZZ]_]\\[[\\_eigcZSQULT@QUTRQRVZXURS[\\TRRRQT]RzyI\\bPn|RQURQQPPOMNNMNNLKJLOT_imlda``eedZp⽀caa`aa__`]WUTOQY]]_`a`__]YWVUSRSTTTUVVVUTSTQQUYXY]agjf[FCLQRQSWVQOYb_[NDECFNSW^b_Y[a_ZULIWeea_^bec`XXVRQPOOONNLKKKLLKKKLKKKKKJHHIIIKKKMNOONMNONLJIGGHHHHIJKLLJJP\\ihhc\\WLIMNNMMMKKJIRXXWVSSUTSRRPNHECABFFGDALTQIIJJJHFDEEILMNOKHGIDKRPMKIIJKIHKKHEDDDEDDDDDCCDEDEIMQSSQOOOOOMGB@CEDFFEFGGGHJIGGFGHHFEFFGEEEDDFFECBBAAACDEEFGFEDB??@>=>@ACFGFDDB@ACDEFFFGHHGGGGFFFFFEDDCCCCCCDDCCDDDDDEDCCDDDCB@==@>;7:?AA@?:;:>>?=;;AHML@78=A?=:;::<<<<?>>>=<;>EB?BEEDA>>>>><;::::::::;99:::9:::99988:;;9:::70--3:::>>?AA=<97788:986665555:?BA=<<;8;CHJJNE5.044445>DEDCBBA>>=<<<==;:989:<=?=;<<?=621210112222116?DDCEFFGGEEEDDDEFFHJIFDA?>?;;58<:41354444344557667779::989::::989998863555788:<@DDD@;:::;;:::9::;======<JB8KLDEDB?==EKG>;9?HJKI?68BD=:<;989::<>@AB>98766776798667:?CA;63333224545643445445675455554443445689::989:::<<<=<=>>=945<AA?><;::<937@?==<=>=720110//01126:<;8964;B@>?>=><88;;98889::;<;:;;;<<<==<?A:322004843269473..//-////02456Jf[8177665322131.,3@JNEBG:1210026?C:-192.16?=307S\\3&,00-+0332120.-+('&'*3><72/---/00124=A@BD@=DB:8AF?8:82-*+156356,(*19:82/+)+-/28JQE::F>.,)\"1RJA@IKFC<BA958840.,**19?A2.0112245891+*)*-122310670)*-,)((**()2985*%,01024430*+16;;;::<7=QI339AFEA?JC42/*+4/'-9EJH@722/-.-.0-+,,.38/'*27663,''*+/9GI<005:=;:@LW]Q>625:73593/024.0Oc_[^UEI[bTB>BEFD=751139=;6535><37<;:;97,%En~\\VSIMULB>;=DNVVTWYSID98D</7>55`oRBG=KbjplbN;3/+SSTWWVUUUUUTTSSUUUUUUTTUTTUUUUURRRQQPPRRPPPPPPPPPPPPONOOPPPPOQQQQQQQQQRRPOQSTUVVWVUTSRPONNOPOONNMNPOLLMKKKKJIHHHHJKKKLLKJIJJJLMMLKKIHGGGGGGFFGFDFGFDCGHFILNNMMLJKMLKKIIHIKKJIIIJLMMMMMLKJIFDDEFFGHIIIIKKKLLNPONOQPPOOPQRQTYMYxfTQXR]``YQWY^`accdhfehjifhfgicgrzfeylpqhzveZ^SÉhn\\_`llfnyk]qxy|vtosy~ztz~jgimtpuubnwgRSqhTcqiYPORRQTVVSUWZiƑfqpXĴ}]fprtvvrns}uǮowwe]aabhhedbba`a__^Z[XRSV^ebabec[ROQOLOT]e`XUVTTY[[ZXTOOPSTSUVRWcf`]]\\]bdda]ZY[]`_]]]]^cffc_XSUE~WEUSQQRY]YROMLW^WSQRRVR^UP``Vt{SVWSQQPNMLMMOPNNMMPZab_`a____cejommzȖk_`dgjlknoYQTRW_a_^[YXWX[^[XXVSSRSTTUTTTTTTRORSQQTW[^ac[SQRRPQSSOMU]^XKHJJUdgdc`WT]ffaXPIP`ga_`bcde_YXTTQOONNMMKIKPOKKLLKKKKKKIHHHIKKLMNMKJLOONLJIGHIJIIJIJKKJM[fc^Z[YULHLMMLLKLLHGPWXXVUUVTUTRQMIECABFGDBISQNJGIJIIIJKKKJMPPNLLLNOPOKHHIJKIGJKJFEDDEDDCDEEEEFGGINPPQPOOOKIHEBBCDEEFGHIIIJJIHHGFHIFDEGGEEEEDEEDEFFEDCCDGHHGGGD@>>?>>>@ADGFDA@@ACDDDEEEFGGGGFFFGFEEDCCDDCCCCEEDDDDDDEFDEECCA@@>>@@>;::;?AA>9;99=@<9:<BDB>89<;<>:>=>><=<=;;<=<>?@@ABABCA>==<;;;:::::::9999:::9999:::98:;;999:;:40.5:;>@?B?::869999888777577;?AB>;;746BKLKH>62475557CFFEDDDA??><=><<975578:;==?ADGF=4/010//1011004AHEEFFFGFFFEFFFHHGGIIGEDCA???B>515544444433434666777799::<<<::::89989865566679;:=BC>9899::9988::;==>>?@@;69HPKIDB@>?DJH@=;<AEHHC:::?B?<;9999::99;?@;77887767767538>CD=5331132000345544675567656765333322346679:9::::::;<<<==?:36<>??=;<978626>>==<<;:;;62-,/0013788:76965=A?>?>==;79=<:::9::9:;::;;;<<<<;;:96211111014585/...,+,3342/01234LaK.020123455;<5/-04BNJS_D0544345:?7*18/0:@<-'.;F9)+,,-*-4621000//10-,09CB72/-+*('%)-.2:>759BB>;7403@PL8++.0446=<4.((.:<5-+)(/7:48ML:>IG;/2.(8J43EI?8889=:4410.,*(*/575.,/222221054-+*)*-....17/()/1-*)*)(()(*37-'+./0224>C6)+5>AA>844EL6,2:@BA>;?E1#(2@9*&4EJIEA7252,++)++)+-.185,+03/,,+)().8DGD>:;>BFILS]c_L637742561,.57543<RY]_L<J\\\\J75=CHNPPJ<8>BDHE?7..,+3:99CF9/@f}tbOD@==DC>:8>@FQSPQUSID>;E?1581D{Q44+7UiuvY6,02/TUVWVVVUUUUTUTTVVUUUUTUUUUUUTUUSRRRQPPPPPPOOPPPPPOOONMLNNOPPPOQQQQQQRRRRROORSTTTSSRQQQQPOPPPOOONNOOONMNMKKKKJJJLKKLMNNNLJIJKKKLNNJJKJIHIIIIIHFGGHIGD?AHIGFJONKLNNONLKJIIHJKIHIIJLMMNNNMLLKJGEEFFHHIJIJJJKLMMNOOOOPRRSSSQNQ\\XTzzc[Wi]zgc[MY`]ZZ[ZZYW[__^_]bcbdcl|zycnwnat~}mnb\\vLTUcvqpw}~~p]m|||xwmxwx}utxefjntrw{hlvfwkPXkk]SRSTX]\\RSKZƗphkjYzieqxzxwuuuypwxyg\\debbecadc_^\\Z^cddcaYUUWZZ[[^c_UPSPNS^gf]XXWSRTVXXVTONPWWUZ]YX]a_^][Z\\`ca^ZXY\\`cb_\\\\]`b`_]XYQR@OSONRY]XQNMNLP[[USTTRIzuKV\\^XxzQWYTPNMLKKKKMNMNOOR]d_ZXUW]dijkihifa[XYrxaY[bkrnoxkRR\\aba_^\\XVUTVY[\\ZWVUUUUWVUSRTTSSUVSQMLT\\]ZXXUTRRQPQRPLU]]VJEQchgc_\\SNW_`][UPKMZgb_abccefb]XVTRPNOOMKJLNIGKKKKJKKKKJIJJJKLKKLJIJMONNMKIIIIJJJJJJJKKLUXOMORURLHLMLLLKLKIHMVZZXWXVTUTRQNIECBDHFCKTMHJJCELJIJJKKGCHNNNOOOMIJLKIHIJIGGIJJGFDDDCEDDFFHHHIIJKMNOOOPMGDDCACEGHHJJIKKKKIHIHHIIJJGEGGFDEFEDDDFGFEFEFEGIJIGDC@>>>>?@>@CCA@?>>@DDCEFFEDEEFEEFFGGECCCCDDDDFFFDDDDDCDFFFFDB@>=>?AAA?=;;<>?A>:;98>@=99;<;:<99;9;><@BC?>=<;;;?ADA6:RN>ACA?=;;:::::;:;;:999:::::9:9::::98:9976689999468:=@?A?::989999889777578;?AB>97501;FNLA95699657;EFDCCCCA@???@???:543567:>BGF@@AD@869975762/113?IHGGEDGGGGEDEEFDFHFEGGEB@@@CF:24753354443433676677779;::<=<<<<;:9989998766688888=?=879:::9989:;;===?ABD>85AMHHFC??@DGE?>?AGIGFFD@;8?C>;::9999999;=;76886556567424:@C>6211121.,-14443566655567775321111123355788:::::::::;;;><9;<=??>=<:62478;>=<<:::>?:4,.2238977975438?BB@>=>=<?CA<:<<:::999::::;;<<=<;;;87531100/2431/.,...4;ABA9/-/12353-,+/6313466;=620-->RTVXM<6776669;4+24,2B@2)+,/./1-'+/,/77202221269:;FZXB410/.02,$4C<9>?6/4AE5)28.*GdV;.05;>:69;1,*).;=0(((*0<6,5E;2<91.0771?N96;:26978773../-*))+.012/-/000021+/20+*)))))+.02--3640--.+('()*14.++---,,0>?3+-4=B>71/5:2*,/57:960+=@16A?5.3@GGC<94.-/,))))))(*+/64/...-+)++,/5@A87=??=>BGIIMOJB<:;<832/*)/:>85309K]ZA8HND;78=CFKOTQ@8BEDHJHE>54?HJGFILGCSus\\PLLKLKB86:99?ACFEHIGGEEA9;:373-Qt;!&&*:]rC*/7:7WWVVUTTUUUUVUUUVVUVVUUUUUUUUTTUSRRRQPPPPQPOPPPOOOOONNMKKMNOOOOOQQQQQQRRRRQOQRRRRQQPPQQQPQRROOOONMOOOOOPOMMMLLLMMLKMOPONMKJJJLKKMNLKJIIIIIIIJIGHIJJIFCAEIHFGNRQPRSQPOOKIIGHJHHIIJLMLMNMLMNLMMKJJJJKJJJJJJKKLMNOOOOPQRSTTSQPYgkwm[`Ukgfmp_R_`XUWWZ[Z\\]\\]]_cdfsysxyrgvwr|tws|xsxdRnOay}~~}~~{z|obu~{xryfp}~vutrkjmrsvqnuw}z{hZXch]TQSX^fknehŝdXWU\\Xmyfmv~}zvvxxv}ttkbbdcb_^bjole`\\[^cgiheb]XTSWWUTWYUUWVTV]cd_[ZXTRRSVVVVTTW[\\XUWZXX[^^]\\\\^ab_\\YWWY\\]^[YYYYZXZXW]JncGROMP[]VNLLLNNOYbYSTUPMntSQUUVSxwMUXSOLKKKKKKMNNOSRORXWUVXWX`dfga^cb[URRNM_li]WZ_ehenrXQab`^Y[ZWUTRPMRVSPRQQQRSSSRQRRQSTURPKHNX\\YTSSTTSQOMONJQ[]ULPbleYTUULN^_XUSPNKLWfa^aadfkkge_ZVVTRQOMLNJFMSLIKKKKKJKKIJIHHIIJJIIHGHIKKKJJIHGHGHJJJJKJLNNMNRWZXVSSQMLMMIHJOV[[XWXVTUTPOMHEDDFFBJWP@BIHDDLMJJJJJGCEMONOOMIEFJLJJIIGEFGHHGDCDEFIHGHHHHHIIIIJOPNMNIDCEDBEHIJJJIIKLLKIIIHIIIIKKGGHFEECBDDDEBBDDDDDFHJIDAA?>>>>?A@@CB@??>>@DDCEGGEDBCDCCFEFFFDDEDEECDFFEDDDDDEDEEDDA?>==?@@@>===;<>?A=::9:>>=9;<<;;;:::9?GGBDC?>=<;=>@>;8FrvI9CD?>>;:;;;;;;;;;:::::9:::8:::999989973135789:999:=???><<;;;:99889887779<@AA<834528DNN>76678569?DCCCCCCA?@ABA@@>7421345;AEGA71.7CHGHKKGKB41224<GKHJGEEA=;866567AIFAEJFA@@@C<444446654444445565778999;9:<<>>>=;:998899:986688887:=;779:::9999;<<<>>@BA=:99<DHGDA@@ADFECBACIKHFEB@A97@A::::;;;:889987675445656532249?A;420/./0012455444443226665310/01111112322469999:998888;=<<=>>>>=<;8579:;>><;<;;;;:877747=;6787644=FECB@?@>?JPD77<<:::999::::;;;<<<<<;97432121222110/1109HPNPN>20011/-,.0.6B?633458973/+,=NRROTN=52122441./0/2;4$(,,+*22**2401651024556<CAJakS5/00..9=1.GUF<?=;30@G4#,882QlN;:64CJ<0031.,(+89,%')*,0+)/2-45,,0235/=M<3,039:430.,*,,,**+,-./0..,-/-/23.-11+))*('+032000420//...+''-11/**++++*)+..,.13584--//)%+-+./00,)%2HG@GFCCKLIGA831/+*+++,.-+)().42/.---,*),/5:;3-3;=:9<@?9:BB;<@A>@A9.*),3:852.+*6II;9=846:=>??@FLG95=AACFPSE68EQXXRKJHAP~dRSROSWXZRC;8:?AA81?G?:BE</,.02/*DgW0\"()$'ZW./569<RQQRRSTUUUVWUTUVVVVVUUUTTUTTUTTSRSRQPPPQRQPPPOOOOOOONNNMMNPPPPPPQQQQRRRSRQPOPQQQPPPPQRQRRRQPOPONNOOOOPPPOOOPOONNNNOOOPPOMKJJKLLLLLKJHHIIIIIIIIIJJIGGIFDDEGHNUWUTUSRTSNHGGGGHIIIJKLLMNNLLNOONNNNNMMMLMLLMMMMNOOOOOOOOQSTUWY[fwsd^YT\\ib}zy]V_\\Z]_adc^[\\aeecabsy{vrzvx|x|zxvuvx{n^gx~{wxz{ywwop}}wuugnmpzxmmnoqu}wtketz}xno{}wpb[bcXMMSZjyͱfKUTSWNPdfosvwtstty|xoiedccb_Z[gtvpja]]__`cgfda[XXZYXTQRW[[[XVWY\\^]YWUTPQUZ`aa`^]]_[UXXW\\`[SX[\\_`^[Z^ba[SRSSTUVTTWXXQKJPSQTZ]WNKLLLORRV^ZWWWUUTOQTPSNR}oKRTOMLJJJJJKNOOQVUPOSTRUbi`WXWVVVYWUUVWY\\\\Y_gfa]Y__]g_W]\\[XUTUSQPNNNONLMMNOPPNMNNPPNNNMMMKIIMQTTSSSUXVROLIHFJW\\UWile`WPPOMX`[TRPNLKMXea]adgmrl^`fe\\ZXXUONONGOe`JHKLLKKLLJIGCEIJKMKKLRVXUROMMLKLKJHIKJIIIMPRUTSV\\ege_[VOMMOKIKS]`\\VVVUSSRNNLHEGFD@ISLB@CGGDFNMJJIIHGGIMNNONJFACHJKKIHEDCDEEDCDDEGKKKJIIIHIIIHINPNKGEDFGGHHIHIIIIIJLLJIJIHIJIHKJHIHEEECBDDDCBDECCEEEFHGB???>>=>?ABAA@>>????ACCEFFDEDCBACGGFDDEEFFGGFEEECCDDDDEDCBA@=<==<>AA@=>?>>=>?@=99:;??><<<=;99:<;:K^RGEC><===><89Gih7?D@>>>;:;::;;;;;;;::::99998999:::999974113446789;<<>====>>>;:88778::9989<@?=;677957EPH75755512<CBACEEEECACDDCA<730023237;=<71...6ENPRTRL=12014<FIIKKHC93/00344469:<@FEDA@@A;9536755544544456579::::9:::<>@??=<<;::99999988888779;;8799998889;<;=???=:78<9:AEGDA@@ACEGGFEEJJHEB>@?95;>:9:::;:98655565424444455423239A?80./.033333464222320123321100000000001222467788888778:<<==>>=>>=><<<;;==??<==;:;;<<<:9<=;9776427BFCCCBAACGJF:49;:::;:99:;;;<;<<<<<;:8654432122210000/5GSRPNK:343321//1237>=4/17<=;841./6@NTRW[K2.,/1100/...,+)&*.0022/*1772/11/024679AFAOuoE%(00-1=;/;QPC?>;961<B3'0>D<Vg@4=89IP>4672.-**.0*%&)*)()++).443467640<B-.+172.00/-++*()**,-/.,,,,++,+.10/.//,+++*(-344421/,*)+++,,(&+01.**02/+***+,+,--+1530-)()*)((())+.12?H;<GAEOH?;740/0.,+,--152.+*.10,++,+**+.4740059:<=BMQKEHPJ>:8;?CEA6--2201.+,,,-24694-27526:<<CLE729=>>EOH8228BORICD>?epabXRPG@CPa]D69AA;0(4B@<@>2*)+*+*(/8-'&')#(]n9&/.+-4RTVVUVXWWWWXWVVWWVVVVVUUUTRSTSTSSTRQRQQRSRPPPNOOPPPPPPPPPPPQRRRRQRQRRSSSSSQOPPPQQQQQRRRRRRQQQQPQPONNPQQPQQQRQQQPPQQPPRSRQPNKJKJJKJJIHJJIIIIJJJJJIHGHLJFBCFIPUWXWVUUUVUOIGHGGHIIIKLLMMMLKLMMLMQQONNNOONMOOONOOOOOOOOOQSUXY\\^afcagg]cu`cvvf\\ahhbcgdabddgkid_g}zxxyx{vomnonvynmqorvwuprtuutspr}y{}{us}timio}zoopqqt{yrv}{hdlry~wnooookigcbc\\SQMOjp̺{NPTUTVSJ`ļhahijlljkmnxngffcaa`]WW_ioqleba`^]]bddb]Y[\\ZZWPQZ]\\[YWVVWYZYXVSPS[cikifffgmi[X]_el\\IKQTW]\\\\`gkncSNPRRQRRRUX_Lj`LSSV\\\\VOLMNQTUUTUXYXYYXVUTSRPTJRlGPNLKKJJJKMMOOOSVURPRRQQ\\gvrYSPOQRRRTWY]dgedlqj`Y\\[Yc`WWUVUSSSSRPQRSRQRQRSSQNLLLLLMMKLKHHLLNNMLNPQQRSW^^ZUWYXZ^`caZZ\\WQNMS[ZTPNMMLKMW]\\]dghmcUHG]fia\\[XSRPOYfcSLKMLLLKKIHGIWjoh_YURZs|fVRSPPXdh`SNKKJILSVUTUV\\fffb\\VOLLNPNJRbf_XVVTTSRPPMHGIE@FSN@?DDFECHPOJIHGGDELOLMNKFCACHKLIECBBBCCDDDDDCEGJJJJJJJJJIHHJLJHHFFHHIJIIIHIIIIKMLJKJJIJJJJKKJIHFFFDBBCB?@AB@@ABEEGE@>>>=>>>>@BBAABBABAABCBDGGEEEDCDGGGEDCDFFFGGFFFFDCDDDDEECA@><<==>?ABA>?@??=>>?<;;:<?CC@>>>;89=?><EVLGCA?=>>?;>LiǍD;FA>>>=><:;;;;;;;;:::::9::9999:::;:998632111114579<<<;::;<;99755679<=98:;=>;;;69:944BPB38943412@GBCGHGGGFFGHGFD@<:645443332221351/4BMPOJ:002225>FGGHHGFC<633455541125;?A?@ABA?9:;965664544556679::::9::;<=>>>=<<<<:;9999999888879999:::998889::9;>@;9969?<8?FHEAA@?CEGGHIJJHGFBCA:689<::99876444334443444333344224215>>3.0135443334300010000100000000011222334224666778889:;<===>>>@@>?>>@@<:<==<<<;;<<;;:98;;86687328ADCDDCBCGG>4159:99;;;98:;;<<<;;;;<;;:8755421222110100>OQLI@8101000///133465/,/ALC;644340;OUSSZM0+*04212110/..+*-/1553/,.45/)+--/37855:EHY}j;$(0114<1)7B?CG@=:86=:/-=NC=KR1)12:IL;570,////,+*''),,,,./02478867731?A'&)3<4,.0343/+))*++,//,*)))'(*-/,)--,-//+,+.3654310/,'')*)(*)(),004;=4+),252,)&(-28=;511/*&&(*+-/351292',-.5:73232///-,,,,/440.....+*(()*-.263,,7=<:<FPUVUWULC@<67?CDFB614/)57,(,/.+,381-13/+/<C@?DC;459=<>>753227>>9999V{cnmblhH7<CNRB29D?3/--5=><5/./.)'))'#\"$&')$3UJ/,*&$$&Z[\\\\ZZZYXXXXXXWWWWWVVVUTUUSRRSSSTTSSSRQRTSPPONOOPPQQQQQQQRRRRRRRRRRRSTSSTTSRQQQQQQQRRRRRSSSSSRRRQPONPQPQQQRSRSTTSSSRSTSTUUSONLJKKIGHIIJIIIIJJJJIHHIIKKIFEFIMRUYZXWWWWYYQJLMHEGIJJKKLLKKKKKKKLOONNNOOOOOQQPPPONOOOOOOQSUWWWZ`dddfmr~h\\hiktmjh\\]db\\^adjkkiflqkdiq|}}zy}{jedddgjltkVUbr}voqsqoqppuwnu~ysrvnhlkqzyrqrttv|}uroh]drvz|xtridnokkkjjfb]VUm}reZ̒MOWSTRRUNMÿ­y_fkgfhhhfmzjfedca`_][\\\\\\dkkiheb`]\\^aab_Z]]YVROV^][YYWUTTUVXYTMMYgllkjjoyweZ[cefrkREHNPTVW[_bgi^PORQMNPOOUR[k=WVSWYUPMLMPXXTVWUVWWXWWWWUSQQSLRnXENMJIILLLMOOOOPSUSOPQQQRO]{S[WXUPPQSUX[_adbbcca]WTZa[TSRRRRSTTSSSUUTTTSTVURPPPONNNNOQPLMRPOQPMMPPPOMSbijlt{xifeWFHLNOOLOUQNNLKKJKKMSWT]jmineVLACFZhf]WNJUad^QNSONMMNMFLOLWq`ZXb{q]XXVUavvaUPMLIIU\\XVVWY_a^]YTQONOONIL^faYVVUTSQQPMIIGADSNDBCCDECDMTOLJGFEDJOMJHFFCBABGKNHC@@ABCCEEFECBACFGHIIJJJJJIFGHIJMKIJJIIIJIIIIJJKLKJJJIJJJJJKMNNMHFGFDDC@?<<>>>?@CEEDB@@@?@@@@@BBABDDDCCDFFCFIHFFGFIKIGDDEEEEFFGGGGHGECCCCEEEEC@>=<<?@@BBA@@A>===>=<?><>@CDBBBA<;=AAC?;DB?A@?>>>=GhŠX@EDA@>=>@>;;;;;::;;:::;;::;;99:;:9:97764322233233459:9866664155468;==;8;?===;<;797532?J@7:84466>IIFFILKKKJJHJKJIHHE?:5565421024665305COJ@0033435@HGEECCDIGE<21469:65466:<>@AABA?@?><;;;87667777899:::::;;<;<<==<=<=;;;99899988887668;<;::===<;;9:<??::=8:@D;9EIGCA@@BCEJLMNHEFFGG>7799:::865554565554443443443332242/-6AA4.2554333332000/0000000/00000121244333213556778799:;:<<=>>?AA@>=>@@=;<<;;9:<;<<;<;7567667886568;>AABCCC=40136988:;:9999:;;;:9:;;;;;9754422222110005?GFB=41/00///0112357554-0FRE6/36688@OUTSZN1*,26687212133.''-27445-(.3-((*-/3872*->PjX1-341268,*/05CJB?729A4*5GI7786'&.543A@3-,.35540.,*)),/.-2962598755510AD+(+59744456861,)*,///45-*---)(+-*&*./-00)*-.266642443/,+,*)*+)'(,3@F>1*(-7>8/)%,9618??<6/)%'+.0111-(&,61'(--1BQURJ5+.-,*+..-,,+,-./.-**++,.10*$(1698>GJFELNC77>@@A@@BFC=6445:EA-*+,/1672/010/5@CB>=@B@=;;?BCB>62223<=96Bg|jfmdfvg>3=A@?816>:21006=:654530*))**)+0120->E0*480+($^^]\\ZZZZXXXXXWWWWWVVVVUSSSRQQTTSTTTTSQQQTTQOONOPPPQQQQQQQQRRRRRRRRRSSTTTTTTSRRRRQRRRRRQQTUUUTSSRRQPPOPPQQRSTTTVVWWVUVVUVVVVSSPMNMKHHIHHHHIIIIJJIGHJHHJJJFEFHOTWXXWWXXZ[XVUTOIGHIHHJJJJJKKKKKLMMNOOOPQQRRSSQPPONOONOPPQSSSSTX\\]abeszfom`\\ca\\]YXXY[^ceekvuppoorrot{~}||}~n^ZZ\\]^bjlbXXf~|vspnossutyrunrzwrsrkijjknyvttwww}|yn[dw~~}}~uuwqlvvuyvsrpd[]`li]^SrqWUUUTQPSOH}ſadpmkkkjgwplmgdddcb`^^_^]]aegheb`_```_bda_[UQOPZ`][XVTQRSSSTSOHJ]pqnprvrZW\\accoqVEILLNPPPQU\\deUMRSPNNKNPCJLYZVVUOLLMMQWVWZWUUUVVUUWWUSRRRNOOFHKKJIJMMMPQPNNPSSQOOQQQTId\\KQVchd][YTSUWVUVVUUUURQWWTSRSSTTTTUTRSTVTQQRSUVUUUUUUSQPRTTRTSONQTTQONOOPQV`mv{}yneWIFFGIKKLOMIJJIIIJKKMQZVVcmmwt]\\W]WXSITfeUMPTSQQQPPQ[hdX]wv_ZY]nwj^YVV_r~mbYRNJFO[\\Y[YZXZYWVTRQPPPPHFU`_YVUUSSSQOOMICGPODCEDCCCCDQXPLJFFGINLHFDCBCCAAELONNOOMIECEFEEDBAABCDEFGGHHHHEDGMNKIHKJIJJJIIHIJJJJIIHIIIJJJJJLPSQIDCFGFECA??AA@ABBCCEFBBDEEEFECBCBABDCBDHIHEFGGHHIKMMJIHGFFGGGGGGGGGGECCBCEFFDA?>==>@A@AAAAA?=<<<===A@>?BDDBDDDB@@@@A@>?A?@@@@@?;hq??CBA@>>?><;::;;:::::::::9:;;;9:;;96545455322344423347877656647<?;=@?=:>CB===::;:85333@B::;8677<LQMMMNOOPONLJKLJEA@;862344323346754431:IE90233449CIGEBB@=BILH?615:<<9;<>=>>??@@?@@A@@@@@?<8889998879::::;;<;<<<<====<;;:98888888886689::9:>ABD@;:;=ABGIB:;>@?=<AGEB@@AAEJLNMGCDDED=89::987656579<98743432334443234433213<C=225543332221000000000000000012246763211333456788999::;<>>>>=>><>?>>>?AEB::<;;<<<<:75678999:976579;>=:8533423677899999::::::;;;<<;;97544322100100132364325212111112358:@H>15>D?4/48<==@KVVV[J/*-479=<30420.,((17<745/+.30+)*-0463.(*7KszA+4:;3110-0202@JBF`dNJ<-.=2-0.**3A?1*3@=/+.26674/.,*),1..5>947::9754..@B(*1845797558740+)-41.67/.6;>/*)++(),,.00**,.1455324432/..+,,+))**3DF8-+)+4>=80.18704<=;5-*,-*,..,+**,0?G92552;ZuuX6*,-+((++*)+///16441/-,-.--.,('079?A?@DGB::@DCDDA?>=<;<>@A:<D@81-4:952235448<>@ABFHJKJLSSNGC94312>>:<Kbgcc\\UVXJ41567685.253..18=99<;641-)*+,,-3:=96=9+)7C603/^^][Z[[ZYXXXWXXWWVVVUUUTTSRPQSSSSRRQPQQQTUQMMNNOOOPQQQPPQQRRRSSSSSSTTTUUUUTSSRRRRQQRRRQSUWWWVTUTSRQQONOQQRTUUVWWXYXXXWWWUUVTTSQPPOMKIIIIIIIIIHJIHIIHGHJIGECDKQSUWXXYZYXY]\\WURKHHGGHHHIJIJJJJKKKMMMMMOPPQRRRQPPNNNNNOOOQQRSTRQUW[ZWe{{gbb_^_eic[YZY\\a_]`iz}rqtxxpmv}{vxzz{||zh`[Z]]\\aheabfnvvtqkggkw~rgl\\l{|xyuttnjkljlxso|yz|}wv}yw}x^fy~|ywvqouy{vpmfWTUXXcpj`xWli\\UTRPRRFcƝlcoqprsonrmcgkdcdecba_]^^\\\\]^bfeca`acb_bhe\\VRQRW_`[VTPNOQPOPNKIGK]lllw|dX[adiuxbIFKLLMMMLLORT_`RPRTPMLSHPuD[TXVSRPMNOPQUX`]XVVVUUTUVVUSRPPMMMJIIJKKKMLNRRQONQSSQPOPQRQKy~X[TVYykidZSQRRPPPQPOPPPUVOMORRTWVTTSRTVYXWVVVUSRQOPRRSRQSTRQQOOQQPRQPQOPRRNXluvsqiXKGJILMKLMMLLLKIHHJIJLTa^WWZ^niQJRQYmhSMPQSRQSSSQPqzbTXoi][\\iyh[XVZmyobYTRPSZ`c^Y[YVVUTSQQQPPPIENY\\XVUVUTURRTOFKTKACEDCCBACDQXPLJGFHLNJFECBBCC@@EKOUWZ[WOFCDFEEDBBAA@@ACEEEEDDCAFKJECJNJHJJIIIJJIHHIHHIIIIIIIIHHJLNMHBCGGFFDBACCBBBCBEHHGFHIIIIHHGEDCCFECFIIJIFEEHIJMHEHKMMKIHHIHHGEEEEDCBBCDEECA?>===?AAAAAAA?<<=====@@>@BBCBCCEEDD@??A@?>???@AA?@{X8>@A@>=>?=<<<<<;;<;;;:::::;;;;99:;;743346333345542344689::8886>EM?>>?=ACB?<>=869975437?91799768DOPPRVUSRSTRQQOG@95422333433234467544414>=6112333;EGEDDDC>9=FIIB745<><<=>>>=?@?>???@@@??AA>=::;;:8667779:;;;;<;<<=<=<<<;9887779998865799989@A@?=;;=?BDJI><><<?>8:EHC?>@ADIKMKFBABA<89<:975555457887644433444444433466557669>9455544344322110000000000111212468:87653223467878989999;;988;=<==>?=>BHIB=;;;;::;<96456788:::9876994023333112469::::;;:9::;<;;<<<<:85433221001110+*,.14761.00012333795?PD79889766:>>=;EUVUS=+,.347<;3041-+-4348@96564353-*)-01.,*)359bg92:@A5/.025872:GB6PveWK?-.+-./-3DM7+/..<?:0+-3650.,**+-//7@=9988851/*.B>,8@B>:74/.....--*073,---,1563/+++(()(,01.,+,1445311220//-++++**,/5;81..-.39>;41/.02585/*(0761.-+(&*.78@LG<577-5[Y(+,-,+)'&)+/7:1486551.--/04>D9.19<@?BKURKMRNGC??B?95:<>B?:20<IK?69:4/5977:;<<=@BEHHJNOQY`TDD@41;;558<R`ZYUMLOPMMI;559@;1/32,**+29@>:631-)*-..,*0:>>:5,)2856;<^__]]]\\\\ZXXXXYXWXWVVUUUTTSRQQRRTSPPPPQRRUWSOMLMNNOPQQQOOPQRSSTTTTTTUUUVVUUTTTSRRRQQRRSSTWXYZYWWVUTRQONOPPQRTUUWWXZZZZZZYXXVVUTSQPPONLKKKKJIIIHIJKKLKJIIHHFCCHLOTWXXY[YXX[\\XWVOJIGFFGGGHHGHHHIJIKKJJJKLMNNNOPPONNNNNNNNPRRRRQRSXlu]Phrb[^```dmi`^\\Z]^]]_fw{uuzzvsmnsu~ynmpuusvz|vf^^[[^__chgcdkniffc]]]arxaZp]]t|}xusqpoomjnln|{}xx{uvxx{}}x~]h|ywtouy|pgbWTTSU[hqjmbR[jcWSSSSTMKĿƱlmopsvvutvqrqcccbcc`]]][ZZ[]abcda\\Y^^]]_[SOPSY`a^XRPMKNQNLKHHJJNZhjn||j`\\]blttUGIJKLLMMMMPMKM]_NMSRMNQEfZM[TSPMOPNOQRRS[b^YXXWUUTUUUUTQOOMLMKIHJLKKMMNRQOOPTUSRQOORSD`^ejVXayw`[^a\\LDINNOOQSUX[`eZROKKMRWWSTTX[_abbba[SOOKKLLLJKOPMJILOPQPPPQTSSSRMRhsvsn^LKECHLLKMMMMMMLJIHHHJMUcfc`^Y_qgRQPQ`fXPTVTUUSSSSSQVuy_S\\w}e]]jsZSTW]fmmi_XUW\\`dius]V\\UTTSSQQQPOOKHKPUUVVVUTTRTTMLTM?BFDEDCBBBCOWOJIGGIMJEDDCDCDDAAEJNSTSTPJEBABCDDCBAAA?ABCCCCA@@?BEEDCIMHFIIIJKKJHHHIIIIIJIJKJIIHFINSRHDHHHGECCCDCCDEEGHHIIIJIHFFGGFDCEGHIHGIKJHHHFHKJHGHJJJJJJHIIGFFFDDEDBBBDFFECA@><<?ABCCBAA@??>>><=>?>?AABBAAAABA?@@A@??>??@?@=Dk?8A?@@==>>>>===<;<<=>;9:::;::;;;;:;<9533324457666653433359<<;89AAA@=;>?ACB?;;;74675433683.47985:JQPRU[[XUTTTTRJA:76554322233344467634423553113313=FFDEGGFB8249@GF;88====;=>>@@?>?????@>?A?>>>=<=<97665579;;;<;==<<====>?=:98888998865799;<=@?;9;<>AEGGG>9>@@>?><;@EB@>=BGKMOKECCA?;8:;97644664455444355554433322224667766779965555544444433210/000/001123345427=<<;:84235545777778767656:<>?>@A??@@B@>?<<;;;:89:65534556798788742232103310169:;<;:999;<====<;<<83311210123220../15762.,./0235447822>A;;9556779:;?=AMRRC1--.//.67..2.+)(++15==9678975/--.2/+)')65->E5;@F?/./17:<:34??,'5A>?UB55-13/9LG,+10)*7D>/$,551/-**+)*1:?9646762,)(.E9=MOLD?3--+))))*,+/86-'()+-,,331/+(&(,-.,,++*(+,0/0011..0-)()*)),.1/,..--15740..,(*.11/+&'4:;B@40+'()-13;FD9585%,]Z*./.-6B;-)-/19-1621/.+*+.4<CF@7436<?DOWUUZUIDGFDC?:9<=;84556=ILFF?1,1;<36===<=?@@BBDHIMU[P>BE6-=>565=ZXJE>AIMNPON>65=H@50351,*$'6?;892/-)*/10,)(.662/,**05:<?`````^]]\\[ZZZYYYYXVVVUUTTSSSRQQPQPMMPSTUWZYVPMMLNOPPPPOOQQRSSSTSSSTTTUVVVVUTTSRRRRQRSTTUWY\\\\[[YWWUSPOOOPPPQSVWWXYZ[[\\\\\\[[[XWXWSRQPPPPONMNNLJJIIKLMMMMKJJIGEBBFMTWXWX[[YYXXYYWSOLIGGGGGGGGGGGHIHIJJIJIJLLLLMMNNMNNMLMOOOPPLJKMNVwzwmcb`aacddddd_[\\\\]][`s|w|}yvnhktwrotxxxyz~we\\]^]ZVY[cjc^bjheca^]\\\\]`cb^pwskU_v}vsw{tpnijlnq|}{xz}vqqqqnkjiypai|wswxjw}q`VSSUT[opmfmvbia^_[SRRRSPEjȸ{kmoruwxy|~whbbbbba]]\\ZYYY\\___`_XSUVVTRQOPRV_b^YTPNNNNQPJHHJNMOannw}i``a`dnoiYOPLFFHJKKIKOMIJT[SLLNMQOFvsFRYUPJKOQPQSSRR[]\\YXWWUTSTTUVSOMNLLMKJIKLJIMNNQONOQVTTQPOORROuwJaiWXgwkYSNNUpkSRTSRTX\\bgimkcYSQRY^^\\\\[[^befgie]YZXUUUVVTSRPLJLNMKQRPRRSRRRRPOXktm]ROKDDHLLLNMNNLKJIHHHGHPZ_achok\\ahSOPSZXSTVUTVVTRRRSSSRk|_Uc}j]Y]ejsyymVKLNPQQPPNLKKQVZcuQW]VSSRQQPPPOLMOMMQSVVTSSTQORUODCHHDEEDBBBBMVNIIGGFDBDEDCCCDECAEINSSQQMHEDAABCDDCAAAA@@BCBCCAAA??@CCCGEFIHHJKKJIHHIIIIIJIIJIIIIGIMNOKJJKKJGEDEFFFHIHIHHHHHIHGFFFEFFDADKLHGIJHHJHBGJIKJIHGFGIKKJIHGFEEFGFEDCCDEEDBA>;=@BBBCB@AAAA@@AA@A@@@@AA@?@@@@@@B@@@??????????O·^5@@?>>=>?>=><<<;<<<??;9::;;;;===;:;:86554577777777533221168<>=;<>==<>@ABAB?;:864554433665347;849KSRSV[ZWSSSSPH@<:99765321222334356645532111243325AFFEEGGGHC:3257?D?<<<==;:===??>???@?@>>@?>>>=<>>;98665667:;<<==>>=====@@<<:8679<;86679;=?@@?;8:<=@EHEA9;DDHGC@=:;AC?<>BGKLLGBDB;:;;97665658;7433433445544422212224677777888875556654554444321011000221333552023578;;73444355667764455348;?CDFFEDEFGFGGB@??BA:<C?961/0244457976531110158623457:<;999:;<=>>><;;;611111102343210/03653.,+,-/48898770*3==;943344448>=?EMF3,,+,-+,22,-1.+.8>4-17<83598750/./0.)''*42*/-1;?=/.//18<=:22:4&$%-/@m\\99055/:F4'.32*(,3:/**230/-+++()177634563/+'(.C6:<42670',,)'()++++5;2)((+0896551,''*//+)+*+*)**+,.010-.1-(%'))**+*(,43+*/580',10+*-12475/0<HJ?6652/,*)**2CG<2::3LM4/0/-6LS?+..-,+/40,))*'(.5=?:774-,4<CMRQUYMFKLQQF=997310448:@DINTH-'4><01877:<@A=<=@CIIQT@4;F=/08;32MVF>AJKBA@@H</22>KD60365/.1-/999:3.,*+.///-,*('(()))-675:`````_^]]]\\[[ZYYYXVVWUTUVUTSTSPMMNNOTVXZ[]`^YVTQQQQQPONOQQQSTTSSTTTTUUVVVVVTTTSRSSRQSTTVX[\\^^^\\XXVRPOOOOPPPRUWXZ[\\\\]]]]\\\\\\ZWZ[YWUTRQPQRQQQRQMJJKLMLNOKJJJJGEDFKRUVUWZ[ZYXWZZXVTSMIHGHHGGGGGGHHGHIIIIIJJKKJKLMMMMNMLMOPNMMKIKOQQZwkaa`bdefccghfb____][k~|xwwpnx~||}{vuz}|dX[fdXW`gc`aaaba_ab_a_guz{iku{}uponpoosx}~|xwwvrkd`cjjaj|uwutt}utxgVQTWW_kigeca`aehkgfaXPLQ^dg¼nlmnpwyxww~rdadcba]YZZWWWWXXWY[WRXYTRSTTVX[`_XSPNNNPSTOILLKOMNbuszf_adlxxn^RNMLJGFGGFGHHIJKLORQLLKQMVgCJKRPLLQSPQTTTTVUXWVVVUTSTSUURLJMLLMLKKKKIJLNPPNNORVSQQOMMOJ]VHP_[YkufVSTKJĕyf^ZVVX]^]^]XZfkkjgfhfcabcdefggghjjhjjkkjhd`^\\][WTRTVWSPOPRSWROdl]RRUOHHMQQPPONNONLKJJIGHWb\\VV^khSYiRPUWUQSUTRQSUSSTRPQSPKi|fUQV``VOPNMMKLLKJIGEFHHHGFHHGKQSW`ylP]]TSQQQPPOOMNPRQKMSVSSURPRWRGCGHGDDEDBAAAJUOHHFFEBBDECBCCEFDBEHMQSRQMGFFDCCCDCCCBBA@>=?@BDCDB@@DEBADFHJIHHJJJIIJIIIIIIHHIHIIHGFHFGIIIKMKHGGGFGHIKKKHGGGGGGHGDDDEEBACEEGLKGEBBBCGGHIIIHFDEFILLKKIHGFGGGEDDCDEEEDA<:=CDA>@AAABCBABAAAAAA@@@?>>???@@@A@???@@???=@?8S̛F;E@?>>=>?>==<<<<<==??=9:;;;;<===<<:779988988867754212344357<???@??=>?AAB@?>;986644332366788:<959ITUUWXTONQPJE=:::86543123333334466645531122222229CFFFFGGGIKE834139?A?=>>=;;;;=>>>>>???=>?>>>===>=<:;:8764679<<==>?=<<;9:;:;<<=<::975467:<>?@?;9;<=<?CA<<EHHHID=::7?F@;<BGIJJHBB?878885577878;74212223333333211012235777889877655555555554443320111022211333221-,1444654344354579854433005:>DIKKLNLKJIHHEBDIJKFFHC:531025766787421011137<>>?=879;:9999:;<====;:96432112223544421332/-,,,,-.4<@A?961/9=<=;522223469:<AC9/+)*,+**----0/,7QYA(*.20-2632531/--*('(,.,*.*+79+&...18>@903<G:')+1>PMA;5=7-57*.553-)*(*-3/.0./-+*)++/0-24643,))().=5-*&'*./.02-()*+,,(0=8,(),,<G;574/)-21-)&)*+-0...00//..11,&%())*+,,+1=<.+0682+.21/,.7=@EF90H[H69;<><5/*('&1CHAEPMG>2,-0/.DcU3.-('+.1/-*(*()/5::631.*-7AGLNPRRLOSUXZI6.+-460-7=?ACDLJ5%)7=:567549=FFB??<:?DKMC71;DCA:0%AjT74ChfE<40JS5+-;LG8037:54>>1-9;92-,.-.,+++,-12-)))+.0013````____^]\\[[[ZYYXVWWUTUVUSRRRQPPRUWY[\\]^`bcc`]XUTRQOMNOQQQSUTSSTTTTUVWWWWWUUVUSSSRQRTUUWZ\\][[ZWVVSROOOOOONNQUWXXYZ[\\]]^^^][\\_aa_\\ZVTSTUURSVTPOOMMLMMJJKKKJKMKLNPRUUWZYXYZYYYYYXTNHGIJHFFFGGGGGIIHIIIJIJIIKLMMMMMNNNOOOOMLMQX[\\Z[cr|k\\_ffdgihgiiigfcbcc`dz{|pr|wpv|rorsngcfpy}snv|q]SW^__```ab_ejfnzxu|uqpv|tntv|{tleaelhal{yyxh]h}~qw}yroXRUY][\\]`cddffb_bbfgd_SYkvprĿkikgm}mnloztecfdba^YZYVUTSQORXZYX^b]YX[]\\\\\\[WTRONONPTQKLPOMNMLYlqre``esypmi\\LNWUQOKKNNMKJIIKRUPLNJAvzFILLKMLMTTQSWVVUSSUUUUVVTSTRMPNEHLKLMLLLKKJJLMPPPOOSSRQPNKLIHowGMN[c]fdaZ]b`Ryʦt_caWTRRPONNOWcifddfedcccccdefikkkjiihijjiijiihfecb`^ZVTTSSSOWiaOLPSRQOPQQQQPMLV`\\SNKHGIQUURNRZYOLgaOU\\XRSUUSQPQRQSTRPQRSPLQSONMJJLLKKKKLMLKIHHGHJKKKKJJLNPQRSWn~nYZXSQPPQOMMPSSSQIHRTTURNUYPHEEFFFDDDDCCCAHWQGHHGFCDDDCA@@CDEEFGFFKONIDFECCCDFFEEDDDB@><=@BCDB@BGGCCDEGHHGGHIIIIHIIIIIIHIJIJIHHGGFHHEEILIHJJHFGHHJJIGFFFEFHHGEDDBBAACCDFJGFFFGGHJIGGHGGFDDEFGKNNJIHFFGGEDCCDEEEDA>=>CHG?>ADC@@BBBAAAAAA@@@??>???@@??????@A@?>>><9s̿l9>A@>>=<<<<==<<<<<==>?@ID:::;<====;:88:977666666533457:;<=??@>ABDB@?@ABB@>=<98666544345579;;<=:5:JWXXXSMPSNF=:87:97544333333333456664653111111333;EFFFFFFGGIG9385./9@BA?>=;;;==>>===<>?>=>>>===>>=<<<:8876569<<<>>?>=<<::;88<CHHFB=:512358<=>=::;<;98;<;AIJIIE@<987@G@;<CHIIJGB?;65664579;:8674200234333223321112432356789:997554555544544432110011011001232////17866644554575479866653258:;=AEGIOUROMKKKJKONMMLID>;=BEA99:8998420023369<?AA>:888887878;<<==<<<9754233552344575465/**++,,--4>?>=7337>=:<:4100366688:>;50(&.1//.,,--...01,%!%***+02,.97/,+)(&')./+,11,57++//.-8BC8./<JC-'(-137?>:<5-2118665-*)''*,4>:,'+,('---*'-42+)(''('+4203>7*(.34.,))***+(,9>3*,+)7C:3331*,/+'&%&'+.//0021,*)/54+'&')*,-/489?>4.39933100/.07<?CE<9S^D8B@><951-)('$(6?>:94-&%*2<;=UY>/,((*-///-+++-/25521.('4DIJIJKHGKOPNMLC2)5N`cI/=IGDBDE1!&2:<<AB@=73;HMKKOL>5;FMLA9=ANaO06frC023ET@-/52QY:0:KJ=347755>G>*/>91-/354,'',+,9?91/,*)*,/0bbbaaa`__^]]]\\\\[YXXWWUUUUTRRSSUWXZ\\]^`_aaadfb^\\ZXWWTPNMMPRRSSSSTTTTTVWWWXXWWWUUUTSSQPRTTSUWVSQQPQQQSPOOOOONNOQRRRRQSWY[\\^`bb```bcdc``^]\\\\ZVWXVUTSPNMLLKIHIKLMNNMMPSSUYZVUYXWYZ[Z[ZPIGHJHFFGGGGGHHIIIJKJJIIKJJKKLNNNNPQPPNMMNRTX_^WTX\\`afjilokikkhhifefff`i~xnoxytwzi`cfdbcb``cpzor|wh[XZ``^_`bdfgw~ps}zvtssvqpuy{rkhefpj^gwtlbYWe{v~~^ZatiPOYcc`[\\_flmruwtrmjmsskgehplwĿicf`eihggmlfeeddc^XXXVUSSTRV^`^ZY`fb[Y[[[ZURQSQOONOOMLOPNLMMLN[kxfa]^hrrgistl_\\a`[[]`bdfbZTTTTUSOQC[[ALJLIJKMSTPSXWVURSTTRQSTWXMEecDHNNMMMLLKLLLKKKMPPKMVSRSTRQSL`XOTW]a^[[ZZ[_c[buVdtj\\SOOONOORY^`_____`abbacfgjjloi`^^____aefedccefdbaaaa_]YS^eYQQPPRTRONNMNONM[jj`WPJHGHKPPNOMMMIKiYRXYURRUTRQQPPPQRQPPPRTROOOPTYSNLJJKJJKKJIIIIIJJJJKLLNPRSSQOUbwpTWZTONMMLLSZUNKILSSRQNRXRGDFFFFEDDDDCCCAJWPEGHGGFDDCA@?>@ADFFHECGIHGEEECABDFGHGFEFEEEB@@@BDCBFHHHHIGFFGGGGGHHGFHIIIHHIILKKJIHGFEFGECEFEHJIHFFFDEDDCCCDFHHHFDCBBBA>=?ACBACGJJIHHHGGGFFFFFFDBFLLJJIFFGFEDDCDDDDBAFHFFNVODAGJGCBBBAAB@AA@@>??@AA?@@?????>>>=<::97:͖G7?>==<<<;;<<<<;<;<;<??AOD8=<=====:766776656445434338=@??@BAA@??@CB??@BBA><;977677554547679;;;<97BTYXVRMPUN@:9889:97666554331224655664444432123459AFHHEDEFGGFB9563029@CB@?=;<;==>>=>>???>>==>===??>>=<;98877899:<??><<<<>>=9347:@JPRPHA>:45:<<<::;<:7567:CIHHIF?;:769?A<=CHJIHEA=96564279:;:865310123544444433457753234578:<:97553455544553320//0000000000000//135897664555588448989986579::879:;<?KRQPMLLMNNMLKLMIFEGOY[H648:;:51013478:;;:966766788678:;<<<<=<9753234412444566663-**++,,,-4=:320,3AD<6530/./4966558986-'/6841.,,**++*(&$%),.+)+..,152,*)(''()063214332**-5737>A<1*3;;4.2578=><<:1/4786131,**))&&0AG9+*)*,0/,****''')-12./13.>]Y6%/KF+')())+--+2@</,++484/-.1.,+)')*.0222221230)%.97,'(()-125;A?=94236643222224304>B=CVR<?H@77=>5+'''%\"#*053*%)3DRYUDFK4.*((*,-//,,--//0110/.**8DC?AGFADHHHIIE=-*R{xgPIOPKLQL=<:9<>BEDFE>3/@PPR^aP<8ADA=965;XaOVgM.+5EEW[M\\rN7YU;?BAEC:4577;AA4(4?53:==;61//,,:GH?5,(*-./3bbbbbba`__^^^]]\\[ZXVVWWVUVUUWXZ]__`aabbdeeebYTSTTW[ZWRONPSSRQRSSSTTUVWWXXXYYXVUUUSRQPPRQQPOPOMKKLMNQQOOOOOPPPRRQQQPOOQRUY]``\\XVV[`cfhhgcbc`][XTSSRPNNONIGILKKNOMMOQSVZ^YQSXXY[[[\\^\\SJDHKHHHFGHGHIIIIIJLKJIJIHIJLLLLMQTSNLOPLHILNS\\]RLWfnqstrnkmokhghhghe`ap~onx|{y{{}~jaba`bddccdkoV[crtf^\\^^]_chlgd~rintz~yvulcgu}wyu|qjibdsn]gxtc[\\^dtz~zeZVO^qcOP]dcc\\_cnvllv~{~ztsrlqrdüyjf`^uucfeaabdddfd[RPRUVWY^_]_`]YVVZ_b^WVYXVUUUTSQOPOOPSSPNMNOOLO^}j^_agomc]aiklopqk]Yagikllib]\\[YY\\XQ{FLLJMLLLLOROTYVUSSUVTOORV\\SKj>SWROMMMLKLLJIIKMPOIPXQRUWVWVV|KWVXWYXVYYYY\\]\\TzyQVhvlXNNNNNPRU[\\[\\]]]]_aabcfihilpi\\\\]]]^``bba^[Z\\___abb`aba`_][]_\\ZYYWUSNJLMMO\\ggec\\TNHFGJMNLHKMKKYnzn^]TORSRSTRQRRQPQQPPOPQPRSQONOQMKKJJJJJIIIIIIIIIIIJKLLNQSTSRMKPYumUZ[RNKJMRYVQLHHMVSNLSWPHFFFEEFFFDDDCBCCMTJBFGGGFDDDCDEEEDABGLPNKHFFFEECBDFFFGHFEEEDDDCB@ADEDGHHHIIHHHIIGGGHHGGGIIIIIIJKKKJIHFDCDFEBB@CJHGGEDCBABDEEFJMLHIHDBCDDB@?>>?>?CHIGGGHGIIFFFGFFFDCFIJIIIGEEFEEEEDDCBBCJNKGJTXQGGORKDBBAABAA@>>?@@ACAAAAA??>=;::::85875ne:>?<====;;;<<<:;;;;<=??@A96;<<;<<;864677655655443457<BB?>==<==>?@CB@?@A?=<:965667765456889:;:9747L\\XVTONPH<68:9999999888754324446677643354333224:ADFHGFCDEEGF@74557:=??@@><;<<<>==>??@@@??>======>?==<;:99::9778:=?<;;<<=>=<853468=GPTUWQC<8777679:88989:BGGHHGD>8514:?@?BHLIEA>97646689;;:855321123566666666799::52343357:<:7554345444455520.-/00000000000/.014778876445546842368:<:;:99:::89877659AGNRSRQQPMNNNPOLIIKR[UA21321//0369<===:75335558:96789:<;;<<:753313576344445664/,+*+----.1:7-++'6KI<2./0.,.4872-.3575.3@?;8640-,,+))('),143-*,-,.0.*)))'''(+377:3164.()+3:D=67B@0;XL74/38;988::42671++,,,++***023<C=5022..-+*(''(*)+9HLF<10+9I>0+6A/%))*/122,,8>610042.,*-330,+,/048;::755685,&,99.'''*1557:<;9541.00003555551.3<@ALUI;@@=6;@:-(((()+/28HO:(.9K`oe96KF7*((((+130..-/0/.010003672/3>GJJDAJNP@4+6\\rrvyp_YXWWZYUQF@>??>BFGD9*2HRRYd[@388430/-,<XjZB;<20Jex_ZN<>5/@L@359:;=@<)'8=?HH?::751,(8PVJ7-.00255bbbbbbba`__^^]\\\\\\[XXXWVUUVXY[\\^``abbbbcefc\\UQONPQSY]][WUTTTTSSSQRTTSSVWWWYZYYXUTUSQPPPPOONMMMMKHJKLNPOOOOOOPRSSSSRQPOMKMPRUTPNMLOTZ^_``^[\\_^ZUOLLLMMNNNMKJKKKMNMNOQV[]baVOU[ZYZ[\\]``VIDFGIJHHIIIIIIIIJKKKJHHHJKKKNOOQWZVLLSUPKLMShrj^Zjx||wtpjlqnkgbdjkgecaflkip|}{~zjafec`_aeffaaip~}gWQX]\\^^^]Z^hlljfx||rgny~xvqceyu}l{uodZfvm`n{n[[`__ltbO^a]ggY[kqia\\VX[_aZST\\ixsifdc`airrpgxý­wlgdfb_bbb`_ceb[USU^a\\\\bhe`b`YUSOORPUXWUWYZYYXTSQQUX[\\ZWSPNPQQPNX~f`dmunb\\]acdejqz{m]SS\\bcdec_]`adi^s`JPMLPQOMMNPPVZVSRTUWQLQ\\dWKKGXVSQPOMLLKJHIKMNQMLTSORTUUVQbYSZUSTVYXWWWXWX[R]}TV`twaOLMLMNQUYZYYZZZ[]_`abdeddefbZ[]]^`ddbaa^\\[\\]][\\\\]^ba`_\\\\]bfggdca_]XSQPNMWccceb\\UNMJJLNLJMMKTa\\ZcmgPMQRQQQQQRRPOQQPQPPQOOPPOMMOMJJJJKKKKIIIIIJJKLKKJLLNOQQQQRRLJ]xeU\\UOMMPV[UOOKJLUOKSWPHGIGFFEEFFEDDCBBCHLEBDFFFEDDFGGIIJLJHHJKJJIGFHGEDDEFGFFFEDDDEEEDDDCEFFGGHHIIHIJJIGGGHHGFFGFGIJIKLLKJIHECAEBBCDCFKMLHECCDIMQQRSVSKJKIGEEDDCDDBAA@AEHGFGHHGIIGFGGFFFFGHHHHHIHFFFFEEEFEDEFGHHHECDMUQHJQRKB?@CBBA><?@AAABABCDCAA>;99:9:84:;0VD=@=<=<====;<<;:;;=>?@@@@><::;;:;;9754688868889::;;<=?@=<<<;=>>>?ABAAAA?<;<97545666666788899876519Q^XVTPND748;:9:::::;:<<;:8666555678643444443215@ECDBDHDCEEGGB95889<???>>====<=>>>>>>>>=<<<<==>?>>==?>>>=<:99:8668;=?>><<==<<;9:=:733;CT^WPF:65466538;;:<AEEGHIID82202;?@BFKI@<<86547:;:;;;7543112235666767779999853333347::8655555555544552/-.////0//01222124578788864555323211579:;=>=;;<<<;;<;:8669AMUURUUQOPPOPONMLKJNP:-40,058;?CEEEC@;9754456888878:<=<<<8421223478355455430,,-,+/0.---1/*+,,<IB;4-04/,0374,&'+.247BF=48A=1.1/+)))*,0560*),-+--+))**))))+44294+3:3//)*;LC40>E75NF73(*//*+047632.*(()+..*&*5:7/,6;;<=:2.-+*('((-+'2CO[T9+(,594/-,-'(+.6972-).:=51561,-02784-+-.-+.6:730000/,+,44.)''.7954676675-*-02555432117;67BMKEC9667></((('(*/5938HI8<GGRsr:2MXH/&((&)1741/,,/10/001232/+')5FOI<?OSD/(2JRDR{|{re^[YVMGJA:AC@CB@A:2+5EDBX_D1799<;999:SiP6<B=339_pXO>;9+(7FA2.599<A:)$-9CNH835540+*B[WC54;91275bbbbbbbaa`^]^_^\\\\\\ZZZXVVVVXY[]___aaabaa`^XPLNOPPQTWX[_a`[WVWVUTTSRSRSUWWXYZZZ[XSQRQOOONNMMLKKJJIJIJLNOONOOOPQRSUUSSQRROLLKJIIJJJHJLNNNOOLKNPNMLJIILNMLLMLKKLLMMNNPQW\\\\]`ZNOWUTW\\__cgdYMDCGJJHIJIIIIIIIJJJIGGGHIJKPVUQSY]VKL\\dXPT\\nx{xpwyvpgjrqnh[]innlhb[[_eijpvtw~ufkokfcitsid`_``kk`\\WUX\\]a`_ejkjlil}ypu~}yssnn~uvvstxr_Wlzjaps`W]^]^_ry[PSdp{zeRf|~o\\ZYUNQRNNQUYYVTRRQSX]cfeŸynmoolljihebb_VQewvqvo]Wa_TPNADPKKRVUUY[YVTRQPS[aa\\ZYVRQQPRRMZ~gclrnb[YZ^`bbcdlwyn[MJNRUWW[^_ahcduJOQMOPPPNNOPSYXTRSSTSKHVghL_t=QVRSSPPNMLJHHMOPQRNPWPNOPRTQT~yNVUTTTUUUVVVWVUUUPvXY]anoXILNKLQTVVVUVWXZ\\^__`bbb`^^^[[[\\^````^\\ZYYY[[ZZZ\\^^]]\\[\\]^aaaaaabccb^[[XW^abc`\\ZXTPMOQQSQMRadSO^h^PPQPNONNNNONNQRRQQQQOOOOONMOOKJKJKKKJIIIIIJJKLKKKKLMOOOOPOPRLGWgd]SMPQSVZULMNJLMIQYQJGIIHFEDEEFEDDCBCCDDCBBDDEEDFGHHHHJKLLIFEEGIGGHIGFFFFHHFDDDDEFGHGGFGGGFGGFHIJKKIIIGGGHJIHGGFFHIJKMLKJIGB?DEBDIJJILTVOHFIOWZ\\^^[WPIIJIIHGDDCEEEECCEGHHHHHHIIIGFGGGGGGHHHHJJJGEFFEFFFFEFHIJIFEEDBCKPKEHOPIBDGFCA?>?@BCB@?BCCCCC?98<:9:96::2Mk>B?<<<<<<=><<<;;:;>@AAABABBBB?@=<<74248<;<=??>>?>=<<==;<>==@BA@ABA@@AAA?:9;95345776666988886557:<BQ[XTPIB:57::::;;;;<==?@AA>:9964567764486333223;EEDB:>FFDEFFFE@:::;=???==<=>==>?>>==;;::;<<=@@ABAA@ACCAA@=;:;<<:777:?@=<<===???>;;:8866CVad_SJC:670/8<:::=ADGHIKH?8710;@@@DIE<::86558:;:::97531123346656788777778754323346785445566555544332100100///1233222468987888766530/110134679<==>>?A@?@@>><;:78<AHOUTRQRQNNPQQQMHGJB;??=>@ACHJHHHFEDDA;633458:::9:<=<<<832222221/26655431.+*-,,020.,*+-,,15=;484,04333450(()().6<?9/,6>6..-+))*-.-340*(*,+*,-/.,,,,-,*-2337637968744;ED93:@6-5668531,((*.0/,+*))('+/.)%)41--+()/;KSB/,+*)(((*28.-9_jN/*4851,%(*))+.783,*))4?82640-/59>??821-,)(-2.+)())*,,.0/,)()/:@;40248<7.*-4<<62000-1=@6.:GEEE3/3792-+)''(+,..*'2DJJLFD]jG6CWW4%((()/332/+),220/011/..,()1<A;3<SO2%+7GB3Q~~reSFEGLI:6BJJC:6664/.301FQ?4=@>AEGHGFLPL<2778C8dT\u001f-462,+/79/'.58=?5,.,+:G>,'+033-(FcW=6;A@:2/9ccbccbaaa``_`a`^^][Z[YXXWVUUW[^_`_^^\\ZZVTSNMOPPPQUWUUZ_a^[ZYYXWWVUTTUVVWYY[\\\\^]WPNOOOONMLLKIHHHHHIIKMNNNOOOORSUWXXVSSUURPMJHHJJKIFGHHGGIIHGHJMNNNLNPPPONMMNOOOONNNOPRRQQQJHMNMPTXZ`fgd^SKHIIHIJIIIIIIHIJJIHGFEHJJOVXXSNT\\VKSehfabtvuyvnikssnicafmplb_baabaansgftzqpnmov{|thfgede`^]Y[\\cntqv{tomigiqy|sttrpmvzsrsufn}kfjtzs]YujajeXY][]__itt}cHLitv{aPasv}cZ]\\UUYXTTTZ^YWVTROMNTZS|nkqvx|zrfb_^]\\jr_\\aj_IBBYcWPRVWWXWZZXXYUQTVVUS[bZUSRPRROX|abkh_YYXWWZ^`baciqqlaSKGGKJOTRU[Qp|OIONNONNMMLNPW]XSSRONLEI[gYG|٣CFRSSTRPPNMLJHKPQRYZQY]QNMLMSNdVRUSRSSSSSTSSSSQQTK\\_YYSYmlSJNKLSUTSSSSUVX[^_acddca_]\\[[[\\^_^]\\ZWUVVUWXWWXXZYYYZZZ[Z[\\[[\\\\^`cedcdea]_``^[[YUPOWZYTRZ_]OKRXZUSRRSTVXUSPOPOQSSRQQQOOOONLMOOKIKLKKKKIIIIIIJLLKKKKKMNPPPQRQPOLCK`cZPOQSUWSOMKLHJUVPNKIIIHFFEEFEDCCCDCCDCBBBCDEEFGGGGHFGFGGFEEFGGGGGGHHFFGIIHFEEFGHHGGHGFGFGIHGHIKMLHGHHHIIJIHIKJJIHIJLLLKJEAGKKJMMJKMQQUXTRV\\`a^\\ZTNIGHIHHIIHEFGGGEEEGIJJKJJJJIIGGGGGGGFGHHIJIFEEFFDFFEFEFGFIKIGFEECDGIGCFLNLJGJHA?>>>ACCBABBABDDA<:<9;;;:977cH@B?=<<=;==>><:::;;>@BAABCDCEEDDA?>:778>CB@??=;<<;865789:;;;>BBAAAAA@?@A>9::731357766789:898756;BDHRWUPF>;88::;;<<<;;=@AABDDC?<:655567649@=433225@GEDC95>CDDFGFE@;;<<=??>=<<==>>===<<999:;=>?@BCCCCCCBCA?=;;>?=;@>>;77;?;:;<>?@@@?==:99877@Wgffe_YO5$.689768;@BCEHFEC><>CECBFHC<::9889:;;<;965311135667678888877766544333245554334566555544333234431002223322357899888766631//00022223688;>@AAA@@A@@?<<;96:LZWQPPRTRQRRQRPMJFCDDGJHFDEGFDDCA?BFFB91355788;;;==<;<84222222111243332/,,+,-.133/-++---2891.2/.02454640/0/-.3773-))493..-*))*02/1.*&'++**.352.--.-,+-0.39;:999:99::;=;99;7159;8785/+))+,+**++*)(*--+*++'')'%%$4\\aD/,+*)))+#7L0,-<JNF58;4/+)()()()23-'(((,:@889632675/21/1/,++++*)'()+./-..+(')-25==3+-07>92-/5862/...+1:??89DFB>87654-++)((()))(&&'6HKFC>>B>34R\\9&)***+-.//-+-11000/////0002220/?TI,*2487;\\z}nN-3HI:48<?>;75433463/1:;47BB:<CILMLISNDB><9Mc\\\"(-02.---,*'+28>8,-95+0;9,(+.04.+LeP>CFA@@50Bfffecbabaabbaaa`_^\\[[ZYXVUTSTXZ\\\\[[ZXVUTTUTSRQPQSUVUSUXZ[\\\\[[[ZYYXVWWVVWYZ\\\\]_a]UONOOOOMLLJIIIHHHGIKKKMNNOOPTVWYZZWSSTUTSRQOMMKKKJJIIIIJKJJLOSUSRQPPQSSPNOPPPQPOMLLJHHHGGGFFHGGHJOUZ^`ba[RKIHJJJIIIIHGIKLJIHGGIJJJLT]]QJQ[VNQ`rnh}yo{~uokmtvofbb`drr]Vch`aoyumfbgorozshjnuyyzteb`_da\\\\]gnz|qmianxf_ij]\\i|xrzxsPhladlvyq[Zszhac[X[[[]`acddmo^Z`xypswhYfvvzyjZZYXWTSSSUWXZZYXVSQQQRWLmqklpt{wfbcdoxxxvsmryfZauyZTXYWXXWZ\\\\]\\[[][VazzbWVTOORSRRsw_a]XYWXWUSUY\\`eghjkmmgbVIFHJIGLLG]`KLNMNNLLLLKMR[]VQPOKJGDN^bQ;c;PQQRQOOPMLJIHKORV\\ZW`[QSPNMMXrMUSRQPQQQQQPQQPPRTINyo^RPLUohNIMMQWUQQQQSTVY]`egfeb_^\\[ZZZ\\^_[XVUUTUUUUVUTUWWXXWWWXXXXXXXXYZ\\]^___ac_]_^^^_]RSY]_a\\^dUNJKQPRSRSUZ^dieca\\UQSUTQPQPOOOONLMOPMJKMMMLKJJIHGGJKKKKKLLNOPRSUVTQONLFL_fYPORUTRQQMKJ\\\\KGLKIIJHFFEDFEDCCDDCDCDBBBCDFGHIIHFECBBFJECEFFFFFFFFFEFHIIHFFGHJIGFFHFEEEFIIIGHIIHHHHIKIIJIHIJKKJIGIKLMMKKLMNQNLKGKQROSbfeiic]VOKKHIKMLJKKJLKKJIIIIJKMNOOMKKJIHHGGGGGGGGHIIGFEFGHGEEEEEFFEFHIHGEDDEEDEECBDFHFDGKD><<;:>AB?>@ACDDEA<8:;;<;84D~q5??==<>=<==>><:::;<>@BBBCDDCCDEEDCBA?@@><=:97655566655566467:>>??@A@@?>=;;<;622357766789:998757@DBHRUQH@=>==<<<<<==<<>AABDEEFDA>65677768AGB734449CGECC>99:AEFGGF@:<=<=>>==<<;::986568<;=?AABBBCCCBAA@?><<:8:@CB>@?A?;8;A?::<>??@@?>>=;98865BU``_ddbO5243111358:=BCCEECBBCFHKLD>;=;:;;:::;>=933311146789789889987765334333233333224666555554323455543333222222246899899766531/.010221134448<AABAAAAABA>>?@@I^g]TRQPTVVUSSSQNMKGEFEDDDCBA@???=:<ACB<1263037:;;<<;;;83012223332112231-,---/12321.-++,.16620,-552345887::205876430/25202:92-,010/+('(++,.4895.,,,+**-027==<:9764200002224556:>64990+'')***++*)()*,,+*)(((&'02-FlX5,,+)'''($FH),/'$2E?:730*)))))))..+(')('1??9984321,$&0//0/--/0/-,+,,..,,,*)(,5AF70,**+1883130+---,,,,/25>CDD?86799751.,*((((()))(&+:IF;5/*+*&8J8(),+*++,--.-/0/010/.0234762//./AL@/25.06;UwuT/0EB68>A>7455321226639A;:B@9;@DHOLQ\\EL]MGEGV}wD<0,-11/262)')*/79/)-37506=956/./-0NWA>ML@867;Cedc``bcbcbbbaba`_^^\\[ZZYWUSSTUWWVWXXXWVWWWXWUUTSUURQRRSUX[\\[[[Z[ZYXWXWVVVY[[[\\]\\XSOONNNNNMKJKJIJIIIKKKMONNOQTWYYYXURQQSUWWVVUSQOLKKJJIHIJJJJLSYVRSRQRRSRRQQNORQPOOOMLJIHFEEDDDDEFHLLNRUYZVOJIIIIIIGHIHIKMKJIIHIJIIINW_^RJPWSGGYcdwse|{hlsmntvjZWXSXrv_Ybeaar|megddfcZ_rqijox~{yx`]_hka_l~lYWuzzxmdfc[Ybw~mxvWdugx|bKMbhX]dkrrgZW\\\\`c_ZZZ[[^`abbdfggmlmvwusplpvnh_WXZYVUVWVSPQQTWWVUSRPQQWP]xokijkc[comnxun{~z{oTXVUVWTTY\\[VRPVcketSPOQTQQUXVdzq_\\TQVWWVTSTTSX`cfgiiijpnZIJLIHJIHMNLMLLKLLJJIILSYYUOKKKIGEQ^\\JE@ILMNONLKLJIIHGLQTXXVY[TSUWUTG`LOROQPNOOOOONOONNOOKHj|eNNOIYo^HJNPTTPOPOOPPTY_decb^[YYXXXXZ\\\\XSQQRRSSTUTTTTUUVVUTUUUUUUUUUVVWXXZ[[[[[[[Z[\\_[RZdaabe_UVWURQRSTVXY\\bcabeid[SSTRQQPOOOOONNNPQMKLMMMLLJJJHGGHIKKLLLLNQPRTUVTSPPOMMS_[SPQSRPPOMQa]IFIKHHJJJHEDDEDCCCDDDDDDBBDDFHJIIIGDBBAAEGDACDDDFFFFEFFGHHGGGFGHIHGGGFECCCCEGIJHFFFHHHIJIHIIGHHJKKIHKKLMOPONONNLIILMNSfwttsuoRHDBCHKMPPMPQNLMNMKKLMMMNPQPPOLJJIHHFFGGGGGGGIGEFGGGHGEEEEEEEEEFFFFDDDEEEDDDB@>;<?BECCB:CYWRIGC@=>ACDD=569:<962\\L=<;;<=?=<====;::<;<=?ABBCDDCCDDDCCDCBCD=5545446667677764446789:=@???==<;<>?;434557765677997776:CECJTVMB=@CC@@>>>>>>>?@AACEGGHHII?979987<GID;5346=DEEDCBB=8=BGHFEC>>>=>>>><;;9899636:=?BCCDDCCDEDC@?>=<<<<:9:;@DF>=<??;>GG=9;=>????>>CHB:8995;S`^]\\^`E200/.,1359=AABBBBAACCCJRL@:<89;<=>?<=<722676789:<<<<<<;;:876643333323334332246655554442267755653221221112468888::864310//110111156446:>AC@@BBCDDEEGGILSXTNQROOQSSTTSQPNMNJCA?>>>=>=<<==:9<==<77:2).6999;<<<;8201113453322322-+,-../12211/+,.-.2564/+1982245:=<?<21447;?C<7474-1=C;1.--..,)+./-/67796/+**)(')29::9641/22.+)**,,,.103<<1/33.+)'(***,*((')*,+)''('&-AOGE\\hI.+-,+*+(#,O8%,.0.)AROJDD8--('&())*//---()5?;530-+**%,IF41000/----,,++*)))+,,-5LZ9()+*)+03111.*)+-,,,-,**.6?C:1024552.-,*+*(()&'5C</+490)(&&,.3>7*+.,,..+,----,,/0011234320--/-.675/8;2/7<H]aqn[E7<EQZWM?720127;5-385;IF;>?==;8@IKTM3Hk`F@ADeD\u0018\"-+12/1793*('(-1/*+--23.1=?<;52/*2C=+/>A9-+159\\[Y[^`cddcbbceca`^^\\ZZZYWUSSTUVTSTUWYXWWXWWXZ[ZWTROOPQTUWYZ[[[[[[[YYYXXVVXYYXXWUTSQNNNMMNNLJKKJKKKKJKLMOONNOPRSRONNNOOPTWWVUUUTQMKHGHGFFHIHFFJPRQQRRSSTUUSQPPQQQQRQRRPNMKGEEDCCEFFIHFGHIKMLJJHGHJJHGJIIKLLLLHFHJIIKKNX``VLJKKJKNR`cZpzaQXjnqxlWRSSOTil_adbcfdbdhhegh`Y[bilorz}{}{}|wq\\dutsolhb^]arsp~lf]OOVenu~~td_`homd_]PM\\d_ZYZ\\]^accceeenqhbip{hhhb\\WWXWVVXVU]_WQQPQRTTTSRQPPQTPu|pkjf^\\beqsoqozhTRTXYYX[cipsmlnlllab^\\ZeaTVYZ[`ji_[XUVXWWUTSPKKOSY_cfdbhriRHJIJLLLKJIGGGIJLJIHJNUVSPLIHIHHGQYX<{jAPIHMNLIHIHHGIJRYY[XTXUSXYVVRQysIMJKJJLLLMMNNMMNNLNQJZ{gLLSMI\\n\\HKMPSOMMMLKJKX\\__`_\\YWVVWWWWWUTQOPOOQPQRPSSRRSSRRSTTTTSTTTSTUVWWWYYXVVVWXVUVTVafa][WSTWWVTTSTUVZ^a`[UTXWSRQRRQQQQPNOONOPPQQLKLLLLLKKJJHGHHIKKLLKLOQRRTTUTSRQQOQPQUTRSQPONLQcbHBIJIGIJJKHFEDEDCCCDDDEECCDFFHIJHFFDB@@BDEA?ABBBDFEEFFFFHHGGGGFGHHFGGGEDDDBABCEKJGEEFGGHHGHHGHGHJKMMMMLMNPPONONMKJMNIQe}{{vWE@CDJNQTVX[YUROMLLLLKJKLOPPQOLJJIHGGEFGGGGGFGFGGGHIGDEFEEEEEEEEDDDDDEEEEDEDB@;6;AGHITdCHxiv~qWJD@>@>;779;967[o4:889<=?><;;:;;::==<=?AACDDDDCCCCCCDCACE?85355776776666643688669?A?;:==:<?BC;236678777777877756:EJJPWSG?>BFGDB@AAAA@AAABCDEHHHJLNJ>88877;CGE?723<CDEEDBCDDA?=CHGFEB?<==>>?==;98768:<?BABCCDDCBAA@;:::;;==><<96;ACA@=>@>>EHB;:==??>=>=FTPB::9:<;F\\cc__L7036.+458>?@BBBBA@ABB>@IRQJBDIKMMLH<;5467=@?AA@@AAACCCA><;:976655431245454334555444334327:877775312222212356999:;953100/01100002554578;@D??DGGGGIJGDBA@AB<=HOLHJPRRRRQOLPNA=>=<;<<<<<=><8877778;6--2589;<<<;82/00/1454421120,+,.10/13111/,-0002232//6:6212389763//./7@GI?5685+',265/,+,.,,3850385332/,++*)(+36640.,*(+/0/-,*+,-..-296,))*,-,*)--++)(--*,//.-,*',@W_OGMLB3+.-+/492?P3,-.44+:\\]_``T?>:420-)*3497/-)+6?80-*((*((>C1/661+&'*,--.)'(**+..//>J6(),**)+-..,/51-,,,,-,))(&,56.(*+,-/11/..,)(+/+4MQE61257645>GRP?/,0.-//-./0//,,.012221/-+*+-..////1>E;5;>;5/KWKD45LendN;8979<BDB<:978;;78?C?503;FO=,Kp`:/=DScK($,*+12/12,''('(+-,-.--,+.2569940-)08-!%/53.,*&-TUX[^_beeeeeeffc`_^][ZYXWUTSSTTRRSUWXXWWXXVX[[[XTTY[YWWVWXXZ[[\\[[[[[ZZYXYXXXWVVSRQQOMNNMMNMLMMLLMMMLMLKNONMMLKKIHHGHKMNOOQRQNNNMNLIGFGGGGHJKHEGKMMOQRRUVUTRSTSRQQRRQQRRRRNJIFDCCBCFHHGGGGHJJIIIHJLKHHHHKMLLLJEDHIIKHIW]aaXLFKPMJJMSWey}pc`YTalmgYPQTUSUab]adabd_[`bcgggb_a\\Yhyx|wu~~~~vx|vde{urqj_`c^]akx|w~{hggwm\\emlikk_Z_b^ZY[]]^bbbiiciyl`[VYlqi^XYZYYXVTTUUQOQSSQQRRRSSRRQPPPSMRymilf]`fgnqryÿ}xxrbcnxoo{t[XZYYY]gmgdd\\XXXWVVTQMFDGLRW]^_ajq`IFLLLKJIGEEFFHKJJJJKOTSMHEFGGHIKPVNJAMOJJNNKHHGGHHLPX^^^ZY][YWWSQI]SJPOOOQQSSQPNOQSPSTUWUXtdJMQRLI^kWFINQNKLMMOPTX[___^ZXWUUUUVVROMMMNNMONNNNOOOPQQPQQRRRRRRRRRRTVWWVVWWVUUVUSQPPU\\]]XRPRUVVUTTSUZ_ehbYSONNMOPPRQQQQPOOOPPPPPQQLKMMMMMLJJJHGHHIJKKKJLPRSSSSTSSSPPNRTPQRRSRONNP\\^OJJIJHIJJKJHFEDEDDEDDDEEECCEGHFFECBB@???BHF@>@ACBCEEEFFFGGGGGGGFFGGFFGEDDDCBABAADGIGFDFIIIGHJKKHIKMMNNLLMMNMMLMLLJILLGLrvd[TSSU\\holc]WQNMMNNONMMLKNPNLKJIGHIGGGGGGGHGFFFFFECDFFFEEEEEDDDDDDCDEEEDEEC@=@FLRW[^nb<s`SLA:<@><<=>BEN:=<====?>=;:;<=:<====?AACDCDDCCCCBEFCACEB<645566445555553468757:==;30<=:>AB@:4466888777766655549HNPWVMEBBCEFFDCCDDEDCCCDFGGHIJJLLJA977779>CFD<33@EDEEDCCCDFE?>CEEECB::=??><=<:<::@AACCBBCCCA@@?=989988:;<=<<:9;>>BBA?@><>BDA;;;>>>=??JVXO>9;;B?5Dakg[ND<550.8:>AAABBAABABBBAACFNSU\\^aaZM@=;7:ACBACCBBBBBBDFGFA?@@????=9741245555445544333224327::86775434432101136999:9642011/021////04566679?D><DJHGHIGB;;<<:91.;IMHGLPQPQRPJMLA==<<<<<=>==>>954552145311359:;<=<71/0100234531242-,,.12344222.,.12201110179410./11/,+,,,1:DI@2-671-+)(050,,,..3<;5332/-./-*./.0132/.-++,,+)(+.-,,,.-.,*,//.-+*-/00./1.-*.84*.35443/3ANUWJ;9=;5//-1;=IDJF=67.)-13SNGdrYCFKHHHF=.+6GD1,+(,;>4-/010,()-,0971)')+....+)*,-../0/03/++,*+*****)0=?4.,,,,..-,(&&'(&&$$-HOA=82.**.74+8V_R?7@IIF?FPWgQ++1/-+-2444441111100000012454333349AB<;>?6)#<j6,.*:URHE:36:@FHFCDMQME>73436>B:/+1@E:A\\dJ32<=:><81+*..-./-,.020+.34553/+-55.-430.0254+*3602:9.%'TUX\\_acegghhghhda_]][YXXWUTTSRRRRSVWVWWXXWWXXXXY[_cec]YVVWYYY[\\\\\\\\\\[[[ZYYYXXWVTTUSRQNNONMONMNNNNONNONLKMNMMLLKJIIHHGHKLLKLMMKIIJKJJIGFFGGFJMKGFHJKKMOPRUVUTUXWVVUUUQPPPRUVRONOLGFFEFHIIJJKJIIJKJKOPMJIHILMLNOKFFHIJNPV^ZYa_ULILNOLMRYegaajk``ntcTVVUUSU\\^]bb^]^__]Y]geij_]ZSh}|uzux|~}x~}|vkca`XZyuy{xwnaada``eqy{~nYcjjhhea_^_\\YY[]]_a`ckialo_YZTMQ`\\MU^ZYWVUUVVTPQNMNPSRRRRQQPOOPQPPK^vjgifeffkkddmruiu}n}^V^_\\\\]_elighg`WYZYZ[VSLDBFHKPTZ^dlgSGKLHGEFKNPLGHJIKKKMQQOIHIKKLOPNRXDz̀<NNLMMLJIIGGIJNSXY[ZV]`YTSRQNQrqNRNNQVaa]YSOOS[]XXXUQPQo_GKNNNII\\eRILOMILMEJqf]ab_[YYXWXWUTSQNLLLMNMNMLMMLMNNOONOPPPPPRQPPPQRTTTTTTTTSSSQQPPNNU[ZUPPSUVVTSSSYfnkd[QLKLMOPPQRQQQPONOPPPPPPPRONMMMMMLJJJHGHHIJJJJKMOPPQRRRQPPPONPPQRRRSSQNPW[MKQNKJJJJJKJHFEEDDEEDDDEEEDDEFECB@??>>>??AFFBABBCCCDDDFFFGGGGGGGEEEEEDECCCCA@@AA><AGIGFEDHKLMOMKIILNNLLLMMMLLKKLKIHHIKKFZz}z~vlf_Y]msnh_WTQNNPU\\]XTLGIKKKKIHGIKJIGGGGGGGDDDECDIJFEEEEEDCCBEFEDCBBCDDCAACFJLNORQLFgMamqy||\\FCAA@>>?A@@>>ACA????==>==<>>???@BCCCCCCCCCBBCDCABCC@<96655654454444455579;;963574>EC?=8766788877776664542:NSQVRJHGGFFGHGEEEEFFFGGGIIKKLLMMKC<766678;@FG?56AEDDEEDCBCEEHD??EGBD>==>>=;<<;>@ADDEFCCBCB@<<<<:98777999:;;;:;;:@CC@??>===?A@?:;<=>?BJPTRE<;9:KH3DckdXOH<454:?ABCCBAABBBCCBBBCFFDKUX[^WB7@CCBDBBBA@@BBB@@ACCCBA@@AAABA>931356655422343333233214898788776753212035699897420010/021///.06877878>C<;AFGFHGC><===;636:@GIHJNOPQTSLGD?=<<<<<<=>>=>?;435752244444579::<:5389994122337:=5-*++,04433551,/2210.///043/.-,,--.----/5<DC5*)--,---,031///.2:>4/53.,++.*).124673.-,+++-20&),-+-.0.-+(&(,/////24430000149414664333=JPRPF:;<9860BWT<736PZNG2+/11H@0DfT.-636>BD:0=NH6*+,*/==1055.'(()*,..-***+-,+**)*,021///-+*,-,+++++,--2?A6-,,./12/,-+'&)++*5LMA82/,*((+/2-,Jj^@128=93;LXmF)03/+)-7:767643322124589::::8545678:<==@@:2-<pzJ%(-8ED5/24459=AB<7AR[_bZOE;12>E?3,7HHDYiUC?:4-*18:5*+30)1;?DHC=704:84:<5157/*-/..025752596-,:C9-*TTW]`abfihijiihda_^]ZXXWVUTUTSRQQRTVVVWWWWXXYYY\\_`_][YWVUVYYZ[[[\\\\]\\[[[YYYYXXWUUUTSRQPOMMMMNNNNNOOMNNMLLLKKLLMMLLLJJJKKKKJJKKIGGHHIIFECCFFHHIIHFEGHIJKLPTWWWYYZ\\\\ZZXUPPQRUUTWZXUTROMLLLMMMKJIIMONQTRQOMMLLNPQRNFFJGTXVSJRW`f\\SNLMNKIR[]acjvpgkwu_RSTSSTY[di\\VZZ[ZYZ\\_bjh^^aakv{}{yy}vs}pkrz|}teT`yu{{snlgddc`bimvv[Ydgfa\\YWY\\^\\XZ\\]\\]_chifcd^[YXUQQX]hnaZWVX]cc`bclk\\TUWROOPPPOOORRNOOH[rhfefjkgg_Y][VQWfkqľösq}zvg`a``bdfidbgli]WXVWXVVSJGIJJJLOTY^c^NGIGC@IV[[SLMMNNLKNTUTRUZWVUTRPVZLaRLMMMLKJIHGHHJNSUQVUQ`]NMONOKd~PUv}jji\\[XPOgjijbSMMNIGapTGKMJIKHJ[bSJMLHJL=H^\\ca^YXXZ]\\WPMLNPSSQQNLNLLMLLMMMMNMNPPOOOPPNNNOPQQPQPPQQQQQOOPNNQT[VNOORTTTTTUValh\\SMJJIKOQRRRRRPPPONPPPPPPOMONMMNMMMMKJIHGGHIJJJKLNOPPOPQQQONOONNHGKRTTUSNNRQHMQOMKJJJJKKGFEEDDEDDEFFGFFEEEDAA@@>=>????ACEDDBCCCBBBEGGFGGFGGGEDDCBBBAABB@@AAA@>?CGGFF>DHFEC>EIKMNNLKJLMLKJJIIJIIIJKMMGXqk]u~zppg\\agdcaYVSQMPZcea[QIIJJJIHHHIKLKIHFEEFFFGJJLUVKEEEDDEDBCCDDDCCBAACD@<?GHEDDBFDA=O]?FMU{xu|[F>=<:<=>>>>@CDCBAABB?>=>@@ABBBCCDDDDDCDBBB@?>?>??>@@=85666655443445568;<9466882DGA<<:987888777666555764@VVRMILKJIJIIIIGGGGGGHHHIJKMLMNPOL@85655579?FG>56CGFDDDCCBCDDGFA@CC@;;==>>=<;;;=BDEEFEDH?>>=<<;:987879<:8:;<<<=;:BDEB@@@?=;99?B>;<==?CIJLPKB<;8DPG1DjjkaVNFB<@DABCCAAAB@BEDCCAAHI@>LU[_W@=DEECECCAAAABBB@@AAABCA@@@@ACC?;722566641/.12333333331368998:;;9731122133587774300000//1/.//.29<::;99>C?<=CGGDB>>@B@<846@C@BGHHJLPRVXOD=9:;<<<<=>>>>??:545786554455667889833@FFF<30234;C@1)(()(*.1136960/000.../...-,,+++-//010/15896.+)**+,-01100132/4<8--22/+('*-+*.35664110/20050)-0/)-011.-+*-,,,.1367874123441/6::7/-1016=DE?=?<8=DEU`UC181UiM;,,.-1A?03AA7/(#!&,466;AC@;:94.3;4,..*&'')****))(()*+)'&'*0443210-+)+,,+++++.113991,+.3753331.//*,7CPP<070)%%''),06.BkZ70350++<h}905540.3<=87985200147:=>:897687100027CG>889:8=NL9:;>B@2-3887588446=FTZ[fkaVB5DM@357?MQP]\\KLE/)*.20/,'+9<8DSSROE<538:21>B733/+14/-343/-01)&-2.-6:64UVX[\\\\`fiijjjiigc`^\\YXXUTUUUTSSQPPPRSTTTTUUUXXVWVSSRSTUUTUXZZZ[\\]]^]]]]\\[[ZYXWWUSRSSQQPNMMMNMMNMNOMMNNLJJKKLMNOOONLMLKKKLKJJJJHGFFGGEDDDFHJLLJHFDBDGGHIKQXZY[[Z]```_]ZYTQRSUV[^__^^]\\ZWWVSPNIIMRRPQRRRSRNMMNPSSMFHLTR][GMLQafcZPKKKMRTS[aer~utyiSOUUSSVatr^X_a\\TU^_WV]`_anwmkwqqzqx|pdaj|kforwtkje_dfdaaddjo]X\\bca]XTVX[][Y\\___^bjjdhlgba][Za`eyycV[^hkeecbjqy|wnpsiaXQNNMNNORPNOLIqoffcdon\\UUSSTRSTTV[ýlqvtywlecccdegifdgji_UTSRRSWVSQOONJHHJLOV[TLKHDBGSUTUUVXSOLLOQRSTTVRPPNMLQORARLLKKKKJHGFEFHOQQOSSU^UNPPOLMS\\p{pf_JXzfkZJHKMMJMMGHKLIIJIGLYVLLLGGI@YnI_g_[XWXZ]VNKJILORVWUNLNPPNLMMNNNNNNOOOOOOONNMMNOPNONNNNOOOOMNOX_TRRORPQTTQRVY_b[RLJIJKLLOQQRQRRPPPPNPPPQRQOMMLKMNMLLLIIHHHGHHIIJKLNOPPOPPQQPNNONOKECJOSUSQONPKKOPNMKJJJKKHEEEDDDEDGIHGFEDDCCAAA@?>AAA@??@CDCDCBBBBDFGGGGGGGFFECCCAA@AABBAABCCCCAAEFFGFDFJQXc[NMMMLKKJKKJJIJLNPOMMNMMNJDVri_v}~|x{g^dddd`[YUNOX`cb]VPMKIIIJJJJKJJJHGHLNPTX[]b[LDDFDDDDDBBBBA@AAAAAABA>@BBBCDEFFFGLbCDDADU[ag|hLDH=68;<<>=>?CCDEEDAAAA@BDCDDDCDDDDEEEDBB@>;889899;=?:7788753444444468974345673GG?::;:87888866765545864CYVPB<EIKLLLKJJJJIIIIIJJKLMMMMNOONJ=3676677;DF?9:EGFEBACCDCDDDFFDCA?65<<>>=<<;;=@CEHFHJ=<<;;:;:98769;>?:8:<<<==<=@CEDBBBA?=:8:?A====?CHIJLJGA:8>DOB.Qeim_Y[^_RDBBBAAAAA??CCDDDDEE?>FPZ\\PCHFDCCDCCA@@ACC@ACA@@ACA@@A@BCDA?=72355431.-0443333345458::989;<;9533221224677521//000/-/////03:=<;;:8<EC<;@GGB>=>???;515AGFGIHFFJOQVZSG<46:;<<=>>>?>@?<7445555655556668888309FIE@61258<@5,)))+*+-/02574/...//00/.--,++*+,0100/.-./00.,+,/200.-1640.--,094/010/,)')//+,4655545305687.*+--*.///./0/0/-**/34765422231*)0887/*.-&\"%+268854?H?80+\"$KGQX7,,,,,/=C9AF?@7+'$+/236867:=??>8321-++-42*+02/,)(()****-,./445667420-++,+++*-012110-*+1=>;:=9/+.&%9LTPA85754211110/-*9KD304310,(;x~5;:86459>@;9;960,/59;>@=74569;:42222AML9,28;:@@;;IG>3399;<726876<HNS_`VXdcWD@TS<4:<=@IRQGGN=()0430+*'-?INXXOLH=42442-/:=4/-26::43674/'&,4<@FJ;(+4:WWWXWY_fjkkkjkjif`\\[XWWTTUUUUTSTRONNOQQQRRQPRSRSRPRTVWVVVWYZZZ[]^______^]]\\ZYXWVSRRRQRRONNNMMMMLLNOONLKJKLMLNOONNNMMMMMLLLLLKKKIGFFHHHHJNPQWVOLPTLDFGGINSZ^\\\\]\\YY_bbcdb^\\XXWVVZ^___``^\\ZYWTQNKJNQONPQPPPNMNMNOPRQFFsoctZLLJNWbjeZRRVPJMV[^bhtz~qc^`_VPWn|vomppkks|{o_^a`sq^_ap~zuvwvutzvmidfp}sd`ktif`V]ghffjpkd}k__]^_aa\\TQTX\\]YX\\`aacjkbbouonqopuunpnaistu||skhaeow|z{}pbWRONPTROORL_oeebhxiPLRRPQOSVUWLPºýäs}lnpqqrrkfeefgghhfhj^ONRSUTUWWWXTSRMJIIIJKNSSOLIEFGJMOOQPMMMNOMKKKKKKKKJKKM@\\YDMMKJIKKJGGF@EHMNMNNO[[QONROIfn]|zYNGHKKKLJHHGIKJIJIIHHLPPMLIHEH}PD[e_XWWXURLHHJKJJKMPQRMQ_XPNOONONNOOOOOOOOONNMMMNOOOMLMLMNNONS_e\\YVTUTRSUUOOW]^TJIJJIIKLMOPPQPRRPPPPOPPPPQQOMNLJMMLLLLIGHHHIHHIJKKNPQOPRQPPQPMMNPONMKIJOSSQQPNONOPNMLLKJJJHFEEEEDDDFGGEBBBBA@@@??>?@AABB@@CEEDDDDEGHGFGGGFGGFFEDDCAAAABDDCCCCCCCCBDGEEdoEIJIIIHHHGGIOSUVVSQQRQMNOIH`sa_~}zjelkfed`XPOWaeda]YRLJKKLLLLKHFFGKS[^ahmssbKEFEEDDDDDA@A@@?@@??@AABA@>@CCCDEEGEP\\AGEFA?@BGYqziVYfupVA=>>>==>ACDFGFACEGEFFEEEDDDDDDEEEDB?<=>:8666668;:888875534444468:764344446FD<:9::85777777755567:63BXTG:7>CGKMMLLLLLJJKJJKMLNNNNMOOOQUG43876579@DA@@CCEEEDCEDCCDCEEFEE>536;>==<;;=>@CEEHD;<;:978987765<DB=89:;<<<<=>?CDDDDDCA?><:9=??==>@DGHHIKF>8;?=G93Zge_[\\_XIBBBBBA@@AED>=@BDDBBA@@COXL>BC@AACDDB@>?AA?AA@@@AAA@@BBBDDDDB<8533220..2543332457889::988:;;<<:64344336861/0/.000/.///00149<<;;:98@E>8?JG?=;:9789958>CFFFGGFGMSWYWL>5699;===>?@>=??:4245566666676788997129<;;83368:9/+,)),,,-.01340-,,-/1220.,,,+*)+-120.,,**.10-,++,,)()((00)$%')+/012///.---+/2158545462.16AE9,+-.11**-/21,-22-))+062.11//1-'%).12/,-,,+*+-/.,*-66*$#$\"4QMHB430,+./6GTWO<1*(,.=C725::610/028<8321001/*).40,'(+,,,*,8@B>701349:::6/*++,,+/1120,+*)+3;:ENH8,)%$:RXPB7;;998<?@@>8/'())01/.(=W==;SeC1532138AC=><960.5:=?B@87525<<59?;:=HLC0)269>FKEBED>3;F?>@;68859HPQ[`ZQN[gZHJXWPPK>436@E@@>1)-46.34417FQYVNNOD6.,./..+*/237CEC@;9879:2(4N]_bgZ;&&/XXWVVX^ejlkmmkkmi`\\ZXWWTTTUWVTTUTPMLMNOPPPPPPRSUVVWWXYXXZYYZ[[\\^_`___``_^^\\[ZYWVUSRRRSRPOOONNNNMMNOONLLLMMMMNONMNMLLMNNMMLLLMMLKJIIIJJKOUVVY[XV]d^OFGIIQW[_^]__WNPW[]___^\\\\\\XQNQQQQQSTQPRRQRSMHIKIHKNPPNOQSQONLOWSAjhsrOJPOJRdnlc]WNJNPPY^XXalqjhjihZQastsvvuwxxu|qXWdospx~{vttportuxqmnhdhqzh\\doqheaWYbhhgimxxsx}zf\\\\^`^^`[ROQV\\[XWY^acfki^^owoqwvpfdfmv~|zypdemw{{|~r_YWVYYVTTUPWnedct{f[\\XTRPOPOQSOAii|zitZcmnmtzsjhhffgfhgil\\GGMOSUVXWVUTSQMKJJJKJILNNMKGFHHJKKMLJKMNMJIJKKKJJIIKJLE|DLLLKIIJKJGGF??IPNOTMQ_TLNMROb}hQX^[^fp}dQFDHIJIGGGIKKJJJJJJJMQMMLHD^eAGVb]WVUTQKJFGJNNNKHKOPYY\\XSRQPOOONPOOOOONONNMMLLNMMMKKLKKMNPTalj^XXXXWVWVTSX_ZPIGIJJIJKMNPPPPPRQPPNNOMMMKLOMLLLJLLKLLKIHHHHIJHJKLNPRSRSWSPOONMLNPPOQRQMLNNMMONONONMLLLKJJJHGEEEEDDDDBB@@@@@?>?A>==>@BCDGIIIGFDDEFHHHHFFGGFFGFFEEDCCAAABDEDDCCDCCCBCGDFʒHCIGGGHHGIJLPW\\_\\XSQSRSONQQKHXlgf~zkiiggfbZQPTY[[ZZYTNLLNOOOONJFDFR]cgjouo[GEIHEDDDDB@@@@@>>?@??>?ABA@BDEDEEEEFCP[AFDDGEFGFBBI[ZPQj[@=?>==>?BDFJHCDHIIHGEEDCDDDDDEEEDA@>?A?;85786788888867752444569:752233329@<9:99:8767656655678::65FRC<:9::<@FKMMMNMMMMLLLMNOONNMNOOOTM80795578<AAA@@@??DGHGECCDCEFFEEC:436<>=<<;=>BFA=>999854447766<CGB;8:<<<<<;;==>?CDEGGFDCC?:79=?>===AFIIIIJF>488=A2<]fbbZNE@ABBAA@?@AGQJ?<<?AAAAA@=CMK?==>?ACDDDCEE><?@>?@@@AA@@BBBBBCDDBB>5120/..2531234678999::779::;=?=9888732683..0/.010.///0001368:;;:858@?9AGA;;99878:<===@AADHJGEIRWY[UD88:9;====>?><>?=84333566677778889::99778::645486/--*+--.../023/,,,-/2430.,,-+*)+.3310/-*,24/...,*('((()())(*,-./0210000-/0,/4678634221.*,QrU4,,0;8,)+/0/.3:;72..480+/1//0,&%'(-0.--./20/-+**,,,+++,)'?SKA=?9/+,,-3H\\RA9,'(176<7369;74.(&$',/1231/-,*+142//0.-,+*+1@MQ8+,./06=?=80***,-1//20*(*)+0/5IWH6-%*ETRUL86=<::89@EIKC2'&%073-& 7`Xb~vU8,00./05AC>?=:9:88;=?D@653/4<91:C<;@HJ:).44:@EDBBAB?FIA=@A;88859<>EPQHCCO`XIIO]fe`E11127::2.-/40+6I66MUXZSSUJ=3-17::6/++16@FKIC=;999:3)/DZjqmlgJ/,XXWVVV[`eggijijkga]ZYYXVUTUUUTTUURONNMNPPPPRTSSTUUUVWYYZ[ZZ[[[\\^_```ccbaaa^\\[ZXWVUUSRSSRPPQONNNONOQPQRPPPNNNNMLLMMLLMNNMLLLLMMMMNNMMJGHMQSTUWWY^cd^RJIKNPSVZ_bb]RHFJNSTRQRTUTPKIHHHILMJIKOPQSRNMKIGFHLNPTXWVSQOPT]P;aW\\VMLSZemi_YSLHJT[ZTV\\_accdd]`kmkjlmnul\\_ovxsljivzoruvvqopjbgqru}sia_aeb\\\\cefeikopmtkvsd_bc_^_YRPQV[YVUUX]ceda]^jpjmqtw`Nb{vry}}yw|}gWXb_[]bgd`^SlcebztVZ_^XRPPONNNPCZ[yPfvPO\\chktytlhfbdffgfio`IDJKMQTVWUSSSQNLKIIKKJHIKMKHHKKJKKIJJJKOPNLLLKJKKKLLNLabDPMLJIIJJHFFC?JY\\Z__SZ^OMKNGYxdY\\TPJShu{zwxwurjaUGHFGIIHIJKIJJJJJJKMNOTIC|PAGQ][UTQLJJJHHIJNTPMNOK[XOOPPONOOPPPOOOOOONNMMLLJJKKJJJKKKLMQTdnj^Z[[[[[YVSW_WHHJGIKJKKMMNPPPPOPOMNMMMLKKJILKJLLLLLKKKKJHHHHJKJKLORSTUVVXTNLNNMLMOOOQRSOKKICDJLPPNNMMLLKJJIHGEEDDDDCBC@?@AA@@>?@??@BDFHHGKMLHEEFHIHFFFEEFFEEEDDEEEDCCCCCDEEDDEECCDBCGCJžMDMJHIIIIIKPV[[YZ[XTSTSSQOPQPMHSgihvz{}yxwigg`^YRLLNPOPQRPNLLLNOQRQOOKEHT^afjjfNA@?@EFDDDA>=>>>?>>>??>=>@AA@BDEEEEEDFDPZAFCCEBDFFFA?EGGL\\qrN<>@=;<>>@CFHGFHHHGGEEDDDEECCCCA?>CA@?>:867:9877688877764466568965243324987999887777655555589898:LJ78;:87777?KNOPOPROONMMNNNMLLMONMQO9/4:7467:??>>??;6:BFGHEDDCEEEEEEA7239>==<:<>DE>5477633445537AIJC:78:<<<<;;;;<<;@CCFFFFCC?<8768<<==AGKKHEFE?9:<;?@/DbfaZGC@CC@@@???@FQRNHA@=?ABBCA@CEA?>>>?ADHJLQUQJJJGDDA?@A>?@AA@ABBCCDC;310/-/243114677778998779::;=>=:;;9531462-./..010///000002337897446;==@>99;<=>>@@>==>??@CFHHGGNTV[[L<::9:;=>>>>?@?>?=732245666777889::;>??<::=;620353/...../0/0220...-/24541.---+++,1444330,084.0/-+)*.1.+,,+-1454442000100-.540268740000//--BU@2/-1?E9,*--17==<==>>@<3/12122-****-..-04/(+1/+&,0.,+-..(0PXOD752+&%(+3HN;231--8>.0456893/-,,,*(&)/21.*(*5?>78<94/)*)*(-?L5$''&',2;@@;/*(,?E6/31,'((**$/MO<417KTFDTG3:><9758@FJNL<,&/::5/)#*GRl{W<42.,,+3=?<>=;@ID;7:>C@61-.360-6:757EL:*063141-7?<<>E?49A@9665550/28=4.2:CEI:2WmjhO52433413740.&)8F5:W`[SRSH:72/;EGEBDA3/435FMB8:=<95-%,CZ_``^ZK1.XXXWTUXZ\\]\\\\^cecba^\\ZZXYYVTSSTTTUTRQOOOPQQPQTTSSSSUUVXYZ[[[[[[\\]^_`befdeeca_][\\YTTUUSSRRRPQQOMLMMPRSTUSSQPONNLKLLMNNMMNLLLLLKKMPRQQQOKJLMNPRTVWZ\\_a_TLLJHIJMWadbcYHCCHKIHHJKLLLMLMLLNNNMLPSRSVVTRQPKHFGJQVVWWW[ZY[[B\\d_SROJDR_biiaTJIMQQQSW\\`^^b``iljjihikuo_ipnxub___lwupotvwxtph_gstvz{xyvfc`^`bcb_abdhfa`z|ikwwoggfa^^XSPQV[ZWUUVW[^`bb^cjhfjsrRZ~~|y|~ww{i^prf]ZZXOOTWTSTJkkbc`tiMQSTSOPPNLJINDVžİvXhyaMztWSVX[`grwungb_bgeeillXIKMKKLNRUUTTTQONLKKLMLKJKLKJJJJKKIHHHNTUURMLLJJMOQPPdir>MSMKIIIIIFED>Qqsnk`U\\fZLPLGSq_QbXWXRRWWcjijg`chkotzzzvk[LGHHLNKIIJJJJIIJLSWOAwCJHNZXSQLHFHHIHIJKOOOONJMOIJJGIMOOQQPOOOOOONMLMLLMKKLKKKLLLLLLK`miaaa_`]\\YVUWSIHJJJLLLKLNNMOONNNNNLKJJKJJKKIJKKLLLMKLKKKKIHIIJKKLORTVVVVWXUPMLMMNMOPQRRPNKKJBCJKPPOMMMLLKKJIGFEEEDDCCA@>?@AA@@@>>@EILMLLKIGEEEEFHKKGDDDDDDDDCCBBCDDDDCCCCCDDDDEFEDDBCFD@eİ_>JLIJIIJGJPV]_][YXVSSTUTSRPJJMOIM__UVZ]`abckojkgYTROLKLKKLNQMIIJLNOQRQPSPGHT[`ff\\OCA?>@DFDDB?>=??@>>>>>====?AAABDEDEEDDFDNZCFDCDGHGFFFCDEFHBGS\\el]E:>=<;;<<=?CGJHGGEEEFFFDEECCBA?<=?>;997768:9888788777664466556743443234876898887776555455687458?NE68;:988769EMNOPRTSTQONMLLLKLMOOPQG315:85469:<>??@>758?EGEDCCDDDCDDE<348:==:9>BCA8244332467626DMI@9898:;<;;<:;;;;:>@@?BDDC??B:736:<==AGKMFBBB?<6C=7FC;Ide[QE?CBA@@A@@ACHLMPNI??@CEEDEDA?>>>><>>@@?@K^dbb_\\ZRGBACBA@AAABBBBCB?:63001345457889987757899::;==<;=>:642353//./1111//00001111246631378:<<;:<?AAAABA?>=>>>>>@@BEGNTSVWMB=;:::<=??=@B@??>92235676568779;:::<?AA<9;<5-,.373/.////0-061+-///05664320/-,-./134420-*1:5251,*+-/0.))02--1:;643/.1211..6611675.,----0135613004DK:)+-,079745;CEB;:>9336423/,,+,-.381#&;@/&0100/013:D_k^O;-%*1.,.1D@3562./46,+-06;7,*++-482-/22222(*CPC56:73+'*)('(073+*++($(2=C@5,)-OY;-11-++-//(/J?02DYQ4-EN959=<9524;BHOOB23<835;1.),N|a=8642-+,,1:;:89:=C@848>A>5-/233/.11016FF1)143561-253122./9A<7650/440033324513@9);[leJ=;8=EA:=E>2..2<=5AUYPIC85:91,/48>JQF852)1DE:57::51&!0N]UNSN?/&%XXXWUTUUUUVVV[^]^``][[Z[ZWUTTTTTTSSRRRRQRRRRSTSSSSUUVXYZ[[[[\\\\]_`abehiihgfc`_^^\\XUSTSRRRRRQRQMLLKLOQQQQPOOONMLKKLLMNNNNLJJKMMNOQRRSSTUROOPPQTVWZ\\[\\`_UOMKJHGIS\\afi_SIEEEGHHJJIJMPQPOOPRRPRTUVVVWWUUTQMKIJNPRTY^`_Z\\UAWmVYUXXMHKKMZbb^[TJGJLJMPRW]``beeffhlnmu~mUSX^ghcbc`dnqkouv{xpkiqxxwxxy|~m\\_`acb^]]\\\\^`cgkfaan}jcffa^\\XRPRV[[YXXWUV\\ejd[]efbacprgdwxx~y{zkPJYbekbKMMMMHHGGENjaafm`UWTVUSRSPMIFFCRjmͽl^cdmxX]r\\T\\YYZ\\blsvqga`dhcgniYKMRNLKJJPUTTTSQPPNMMMNOOONMKKLLLMKHKMOVXONOKKKJKMPRRcf_uUERNONIHKIGEF?A`sql[QPan]RNHOocEY]QS^_TLTXORX]closzaKFIMLIIJJIHGGHHMRYPTCLFNXUOKHFGHHIJJJIILUTLGFMLJIFFNPPQRQPQQPPPONNNNOPPNNNMKLMLLLMGYhhdddceb\\YVTOIKLLLLMMMMMOOMNOMKLLLLJIIHHIKKMMLLMMMMLLLJJJHIJKKLLORSSTUVVVVTSROLMNONPRSRNKKMLHEJKOQPOMNMLKKJJGGFEEDDCBCB@?@@A@@A??@FLONMLLJGFFEEHJKJGEEEEEEEDDBABDDDCCCCCCCDDDCCEFEEBCED>xt@GIJIIHIIGORV[\\\\YXWUSSTUTRSW[_X\\nj]URRWWOFHOORT[cc\\YXVVURPQRSQMIILLMNOPOSRGJY^cd[MFFBAEGEDDBBAA?AAB@>>>>=<<;=AAABDDDDEFDEFQZCFDCDFFGFFDAEEEHFEC@>K[T@:<<;<<<<=?AGHIIGFFFGGDDDDCAA?>===;8887678:97778877766456655556544456677698777766644456668:;8;HH;48:9999998;DNPPQSUVTQPNMLKLMNOORO=3359866679::;<>>=;79?CEEDEDDBA@?DF>688;<8:BD?:43333447:86;JRI858;:89:;<<<<;;;;:=>><?@@@8=E=9689<;=EIIID@@@><;:D9=I=>Gi\\HICCAABBAAAACHJIHHCCDBFIHFFFC@???=<>><:89@IYhggjigcZTUQME@ABBCBAAAA?=:514556678889974457899::;<;;;<<;843444433567530000001101234679;:8;===>@BBAAAA???>>=<<<;:<@AGPRRRKGC=<;:;=?><==<=??:2035786468779:::9:>AB>:9:5-**-33--..///,-:C6*+-+,010.------./01220,+*)2;6241/.-+++,*'-2-'+6<631-,,+0445651-...,+,-/..2313771*2GF.),**),.-,*-7A?9<@:433110./,))025:6&*GO91834=:<?VgX\\mi^K<<DQF+.0?E9462+++*+**,/63,+-)*9=/'074476*/KQ;00/0.,+*('+--.....2-!$+9A<2-+,9>1+--,+.49:40:43HXG1&6J?.5998852149EPPE:<<33:?=5$$DtL?437887546<:878764335:<80176341/00//=F8)-03;>:531.,*)')-<F?;::?90.0333217:00760,;VS51BNX`abhiP48MVRPNRN?7740285.,*()/765BH71<@=516<;6//6DZbSMUM5,GYXXWWWUTUUUUWWWY[\\^^\\[[[[ZXVUVUUVWWWWVVUTUTRRSTTTSSTTVXZZ[\\ZZ[]]`degjljhgggda`^^__[USRRRRRRSSRPOMKKMMLLLLLLMNLKKKKKKKLLLKJJMPRTSRRQRRSVUSSSRSTUVY[ZZ^`]WRQRTQKKQZ\\aigc^SIFHIJJIHJMOONMPPPQRTVWWUWYWUVXXWTPNOPRRSVZZ\\_XHOXPOV\\b`VROJFHORRY[RKRSRZQDP^YU[]]]ZZcorx}|{[KMWcqqjccnvrlqurxwnotzyvvwxxutta[\\aa`^\\\\Z\\`cddcabu~~|vjaadb_^\\XQMQW\\\\ZZZYYWXae]Zdqyuiekx~y~zyxs[RWWXZfveUUUSMJIHJ?hjadgeZY^Z[]]\\YYVRPMT\\RWþidhfhwuX\\]]__\\Z[[^gszsg`agehqeRHJRVRMJIJSWUUSQPQPOOONNPQPOMKMOPPPLHMSVUQNOOKIGJNNMQfqKSqkgTKOPKJKJHECAJUWdeKLPS^``OPk`DMZPKTXXUGTZMKGFSenuu{|~|gVMNLIHIIHFEEGGIKSupFJIELTQJEDEGIJKJIIHIIXiPACJNLIHJPQPPSQPPLPPPPONNMMQRQQOMKLMMKKNJT^`addba_[WROKJLMLLMMNOOPQPNNMLLKJHJKIIHHJJKMMLMMMMMLLLKKJHIJKLNPSUUUUUUTTTTSUUVTNMNOQSTQPOONLIJKNSVVQNMKKJJJIGFEDDDCCCBA????@??>?@CGJLKLJIGFGFDJMKHGEEEEEEDDCBBCDDDDDDDDDDECBAACDCC@BEEDˉDBEHHHIIJMQSTSTUWVVVUTSSSROKV{~{kabc[LEIEBCFVih_]ZYZXVVWWUOKIHIJJJLPSTPS_dcXLGGIGECCEDCBBDECABBA@?>>=><<>???@@@@BDFDFGVZCFCCEFFEEEDDCDDIFDBC@;@SP?::<<<<<===AFGIGGFFGGFDDDBCCA???=;::77678987667777766455554566534798666699777778764456877APF<FA47977889:;:78IUUSTVWWVURNMLMOONNNB5545886877999888:>@<77>EFFEFFDB98BHG><6766>FC:66877788<<;BOTC716::999;<<<<<;<;:<==;;<<>><;A>;::9:;?ILE@@@?>>>B;?H:<><8GfM>FIBCCBAAABDFF?=@>CBIONKGFFDCBBCFLMF@?>=?=?Rdebbfjhcba_SE@BBA@?@@@@?@;4555788777762135788899::;<<<;;:767668::<>>;6221110/0254246;>?=:>@A@>@AAAAA????>>=;;<:99::=HPSQIDD@==<;=><<=<;<>A?61146766777778::99<?@><<:5-*)*./-..///./,2IO</./0/.13210//--.///-++++*4<6/../.,*))+34/141/59630,*(&,455542/-*)*))/72+.0/14;>/3C:141+%%&'()((2>H?764210/--4<9.)-4;=7)0IODBC>@FIHHYb\\fhZW_ft|lH+-,4I;683++*(()***/1,.50-45(#+32///*1JN954-,/0/*'%(00+*'+5:4)'(1;90---,++*****-2662//2IYE313;?736766643102;IPH?:7434=A:,*7\\k\\WOA>A?=;857:;9854112344/.352250+061-;C3*0.9LI8-,,,+*)*(*>IIK>7>FK@123/135620.-)&(11-<XgikljntdB:MTSSTRNC2/75.++,,./-(&'6TX<5:88428??7/BXY\\ZB<K<*FvXYWVVVUUUUVVWVVYZZ[[[[[[\\ZXWWWWXZ^a_[YWWWVUTTUWVVVVXXYZYZZYY[]^adegig`\\^acdb_]]^^]ZUSRQQQRSTSSTQOONMLLKKKKLLLKKLLLLLKKMNOPQSSTTTTTTTUVVWWWVWWUVXXYZ\\^_YPQX]ZWSQTUVaknojbQFHHGGGGIJIIJLNNOQSVWVVWYXUUVWXYXUUVUSRTWY]`^XU]a\\Z]_\\YTPPNIFIKIOY]ffdkeWXljSOV^e`Y[kx~||r[PV^ikdkvvmitwovsefiiknrturpwxpgedba`_]_]]dfdacer||}~||yod_bdd^YYZWPNQUXYZZYSKPTX\\cq~{{w}b\\[TWbsz}jWXSKMJIGKGZg`dbWT[cb__aa_`a_adega\\vfdehew¹zwbPTZdhg_Z[[Zdw}sgbbdevtRFILTWTNMMQWWUTQPQRQPRRPNNMMLMMNPPRQLJQVRQUSRIEJHKSOMbqNALsxTNNOLKKJHCAEMSQQQKKYZLOXZjgJAQYHGRWXTDR[PNJA<@FUiy}vkdheca^WROLEGGIHFEFHIJJLbVILJHLQNHDBEGIKLKIHGGFRuXBGLPMIMOQQQRI?:CRKLPOLJIIGJNOONMKLKLKIKHJOTX[\\YWXWUPMLMLMMMMMOOOPQQOLLPTSSKHJJKKKLLLNMMMMMMMKLLKKJHIKLPQSWXWVUUUTSTTSTV[^WPMNPQSSRRRQOLKKJNWXSONLJLLJIGEDDCCCCCBA????>?>=>??AEIJJJHGEFEDMOHDDDDDCCDDDBBCCDDDDDDDDDEECA?@ABA@?@BE>fǜFDIFGHHHIQWXWVTSSTTTTTTTSSQRNPm||iTLBBDBFZgb][YYYXXY[YNKHHGHHGHKPUZ]baWKGJJKIEA@DDBABDEDCDDA@?>>=?><>>>=<==>?@CEEEVYBDCCEEEDDDDDBBCCCDBB@78=SN<;><<===<<<?CEGGFHHGFDDDCCCB@B@=<;;8888867787776776645555456543478866567877768:966656895<MJ;==:;8789::<<::8>MTSSWWWVUTQNNOQRQWH0/54677556777766567;;879>DFFGHEC;7:CEA@;757AE>79;=<<====>HRRB226:99;;;;><<=<==<:<>=::;<==><==;;;;<>BJI>;?@?>>?><9D;6A:>1M]?ABCBBBBAABDEDA?>@>@JPLIHFFFDCDIU[YK==98;>>@O_e`\\^bcbceaK9997789877:AHE956788787652236899:::9::;<==<:879769<<=??<7211210.26754467;>>=>A@??@BBB@???>>957:99876776>LSQGBDDA@?>=<<<?DFA?@?;6455578777778:;;::<=>?A=2+*++**+....///.*3LSC9>EGFHHGD?;6.-./.,,,++**3=8/-,++++*(*9C=9<;7840/.-++--01.0321.+*+'%-70)*,,,/=J@3=O[M70)*)'(*++2DMC50.,,-,0:CJG7)'/=D5(4JRLJHGGFGI\\R1;VQ?:Nk]:00*+B@?:2..-*()**+/316<91+.3.(''+/+(3CA31-%&(,,,+)*02/,*/<:2/,),273/....,+****++,,)')*6=212+,27830.4654331.<ID;875217=;03=>I;B_gXU]^\\[\\\\]Q721233331,),0-+03,-;<.(7D7(*4I[ZK<2-,,.01))=HKN?0-:Z\\7,4751277.()*(*,+7Vnsstvy{}ydQRUUUSRTPB:;4*()((,465<BIUP8,-0115>?90.?TZ[K/)3.6gYYWVVVUVVUUVVVVXYXYYZZZ[\\[YXXWWWXZ^b_[ZYYYXVVXXZ\\\\\\\\ZYYXYXXYZ\\]_aaba]VTWZ^``^]\\\\[[[XSQPPQRTTTUVSQPOMMMLMLKKKLKKMMMNNNOPQRRSTSSTUWWXYYXXZZ[[[[XWXYZ[\\^_ZPMRTUUTQPOQ[cda`[PHIGEEEEFGFFGILNOPQTUUVWXXYZWUVWWWZZZZ\\\\\\]]]`a`cfda_^^^][WVRHK]^R[lmdduryjY[fuyoinv|`LJ[lptqjdanurwo\\]bcnurtywx}{sc`aeijejoi`_`alv{||{zyune`cfed_[XUUTUVVZ[brzysiddpv|~z{i``WO]nxiSPRNHLJIKPWSm~hdcZQRZcfb[XZ^beb`c^WW^x{dcbefa}fPQW[afi`XY[X^vxidbbmzbGINOSVQNORVURPONOQQQQONOMLJJJLMNPRTPKMRRJIVZLG[qfVSK_nSAGMV_\\XQNONMLIE@CQU[YRSPRa\\JFIehYZPVVIJSSVULSVNNJEBBABELYd^ZXXXVXXXZSIFHHFEEFHIGJebKMLLKMOLHFEFFGGGHHHGGDHdYLJKONJNPQOMJNdvmseMMNLIFDFGJLMLLKKIIIGHJJIJKLNPRSSRPMLLLMMMMMOOPQQQPMLQUV\\WKKLLMMNPONNMLMMLLLLLKKKIIKMRQSXYWVVTTSRSTTSTVXYZWSRSRQQRTSQOKHDEGILNNLKLLJJIGEEDBCBA@@>>>>>?@?@??AEHHIIHGGFCGPLDBCBBDDDDDDCBCCDEEEDDDDDDCCAAAAAABA@BC?QFKIIIIGIT[YWWUUTSVUSSSTTSSTSTQNohNFDD=B]j^[ZZZZYZ[WOKIIHGFEFFIT`eaXMIMOMLJD?=@FCBBBCCEEECB@@@>??>>>======>>=<=;RT@DCCCDDCDDDDBCDEEDDEC:72BVI<>=====<;::>BDFHHHGEDDDCCCCBF@>;;:878887778886766665555545555467776655665678:<:899778989:><;:::8789;;<;9;<<BEINUVVWUSQOOPRTU\\E1155777544566766655788878=DFFHGDA:69@DCB:7:A?87=>=?@@@=?KTNC867699:<<;;>=<==>=<9<>>@<:;<<=<<<;;;;=?BDA=<??>>>>=>=====:>;7MO8D?AAABBABCCBA?>@@@??AEFDEDCCEOVWVRI??>?@A=9EYc^X\\`a^a_H3//0/3320159DNF:7779888885358::::::99:;<==>=:9;769:<=?=:60.11/./378765448<=;<=<;>@@A@>==>?@8047743224425DSRFAEGEB@?=<=<>HPK?77:::744798777778;;99<=>?@;/+--,**+-.../11/125ENIHOVWUSSRNJ@53210..*)+/5?E;1-+**-152-7DGD<:82*((+,.01.,,,-0110./4-&*/,())*+-154/Aub8365-++,-048=;63/+*+,3@HQL82/(9H3&8P^TH?:8324Y_8'))//*6@>7553)'3BD<4/..+))++,-6><881.>F</+.8<?GD6*&))''%,@H>1+/;<4315410-**-21/.---,,*'))(($ +3-&\"&?@.,15750,).454451*0AD52543236856>/400Hnznu}}{_6.1245653.---*+/-/?J;('8G?-0GVSKB8-''*1<;+*=B@@:;37]X40;@91/9;0(-23>>13?L[`altrqwudXXYYWVSQQL@0+*'$%(.5D]m_D5/*),,*0740),3ATU?-',-7eYXWWVVWVVVVVVVWWXXWXXWYZ[[YXWWWWVUUY]]]\\[[ZXYZZ]___]YYXWWWWWX[\\]]]^\\ZXXXXZ[\\\\[ZZ[ZYXUQPPPRSSTVUSRRONMNMMLKKLLLLNOOPPPQQRRSTUTUWWXYZ[\\[Z[[\\]__^]\\\\\\Z\\__]WNHHMMLLJIMTXZ\\[PGFFHGFEEDDDEDFJMMNOPQRTXYY\\][XVWVVX[]]^^^`_^```ccfgfea``_ZUSQVgl`[ea\\s{~zoknzxttw}jcntvzthddgouuf^myy|}rq|~~~}vf]`q|x`Z^`]fv~}xsrpkdbbeffecd`[Z[ds}~qho}t~{tcfj`]VS^_[^`NMWNKKHIMTVUJW~mldTPTUYZXTSUZad`YUTTQWxdba_d`^WFMVZ_^]YVXZXWkoeacpmRIMQTTSPNMOPNLJJKNOOPLGKMKIJLLMNMNTUNLPNP\\TLIC^p\\T_nTCOOPPOOPPOONLKID?MZ[bWMRQU]WNK[cNTZY[SNRSMJTVTSLJJGEDDCBCFLMPdkjjjmvt`LLIGEFGJDNfUENLKJLMLJHGHKJHFGIIHJHHKMJGIMMJKLKKLa˭[FOMLJIIKKLLLKJJJIGFMX[ZYYXUSRPOONMMLLNNMMNNNPRQQQOLOPPYZQNNNNMNOPOMMMNMMMLLLKKJHIJMQOQY[YUTTTSQPRSSRTTTX]_]XTQPRTRRPMJHGEEFFFHILMLLKIFEDCCA?@@>>>=>?@AABBCFHHIJHHHFDLQHCBBACDDDDDEDCBCEEEEEDDDDDCBABCCCDEEAFAi`@GIHJKJIVd]TTVUTSSUVTSUTTUUTQRTOMyo\\OKF:GlcYZ[\\[[[YSNKJIHGFDDCFSaf\\PMMMNOMMH=9<EECBAACDCECBAA@@@@@@@??><=<=<<:;6QO>DBBACCCCCCCCCDEECEEGC:30ESA9>=;;;=<;88>BFHHGECBCCCCDDDED@@<878777777779877766555466555656876655455679:;<:899:99:<=99<;999868999:;;:;<=>?CNUWYZWSPPQTVX]C05667764435665555665358989>BFGFEB;439?CB=;AA:7<@??@AA@?OSG?=988779;<<;===<<===;:<=>E>669;=<;;;<;;<>><=><=?>=?A@@>>>>><;;;9HE@KBBBBBAAAABB@@@?<:9<@ABCDCDMTTUVYWCBCCC@<45<N[\\Y\\```UA4643032322239?HE<99;988885369;:::::999;<<>@?<<;7799;?@=:71/0.-.0268864348;:9:9879<<==;;;=?@=;94430012221:NUI>AEEEC?<>@>=FQL90028;9667876777778899<<;<93.-/0-*-0....12238<20DMC?IOOOPPNLKG?5111/17?EHKH;2.+)*,7CG:/>D<512+''(*,020...---/22114.**+,,,*)***.1.<t[99=71//-,-.-.24331--,*/AWM420'3@3-6M_T;0,(&$%%6JA0&.HH78=DIB0$%,=D>95/-+)*++)(2=96943NQC@;;DHNXL8,+*))/1-.2,)%(CF30+'-002/+***+,+,..-+(')'$#4RO4181<\\b^XC64/,)+-//04327VQ5--2333323771.06.CvxsxjT502455665420.,-/.9PN6(+6==?OaS:.++))+-2;9,0?>;49GB9[cWVG965.2@41:84@H7.+-=FL^b\\i~|nijkkkYFFNM@420,/1//1=da1)/+)*)'(*,++*+2ED2+-.-)JwxYXWXWWWVVVVVVVWWXWVWWWXY[[ZXVWVUUTTTX]]\\]\\[ZZ[[]^]\\ZYXWVVVVWWYZZZZ[[Z[ZYYXYYYYYYZYXWWSPPPPRRTUTSSRPNNNNMLLLLKLMNOPPPPQQRSSTUUWYYYZ[[\\\\[\\[\\_aaba`^][\\``_^THGIJJJHFFIJNZeh^OHEDFFEDBCDCEIKKLNNNORWYZYWVTSSSRRV]^]][[_abbaaabca]WUUSRQQXele_[STo~vqxyplv|xusw~yx|vmomacok`o{uoeht{{{}}zzyrb^_u}qb]a`]hw}wqjgffefffghhigifdio~{xzzx{yoninw^RSXYYWSRWc^S[\\ntPFJPW_^TQNY{|nlcXQUYTLPVWST]eaYUTUTT}pcecaebWhSGIRY^[VSTUUXTTqqcafl\\OONQTSPOMLMLNMJHILMONHIMKGGKOONNLPWUMMQLWhUHJMbi^a`nqUHNQQRSQLJOPLIGGGE@RaXWPNRPX^PO^fQEMOYYQRTSIBHQVSJGIIGEDDEGFGGHHXiuxuwz{|{oWOIEDFHGJNKLMMKIJKLJIIJOU[_YQLIHHKEFHHJKKJKHPR_y`MJMMNNLMMLLLJHHJJILVbjov}{iVOMMMLMMLLNNONNNNQRRQOMLMMLNPQOOMNLKLNONNNPOOONMLKKJHIKMPNPW\\ZUSTTTRPQRRSRSTSW]_]YTRRQPRRPNLJFDCA@DGNNMMKJFFDCA??>>?>>=>@BCDDCDDFHJJHFHGGQNDDDBCCEEEFFFEEDDEEEEEEDDDCDCAACDEEFFCGCxAFFDFHJHPabWRUVUSRRTWUUVUTVURQPSWNSxljpq[@Uj[X]\\^`]SNLJJIHGGFDCJZbZPMNMKKLMNMB7:=BCDB@@AACB><=>?@@@@@@?><=<<==>>=[L?FBAABCCCBBBCDDEDCEEFEB>41HH6<=;;==<;979@FHHGEDDCCCCDDCBC>@<88:888888878877765566466678:9:8766566668::;988779:;==<<;;:999987889::;;<<>@?><CPY]^]YSRSVX[^D776799544445555556666678888;AGGGE@528=BCA@BB?=?A@@@AAAMQD==;766789;<<<===<<<;<==>=<@:557:;;;<=<<:9<<:<=<====@CBA???>>=;<=<7DDDFFCACA@ABCCBBB@=;99=?AADGNSTTVXYWMB>?<:8876;K\\^\\]beYA9>=85323344567@IG<:;99:99648;;:::::999;;=?@??>;99::;==<<:752-,/02577655579889877778998999;;:<932322246764>PN=;BCGJA9<AA>BLF50.+17:;85676667777777:97740013578842/..0./7<?<5;EE@CJNNNLHGMKA7455<FLQQMHA93-*((,0<H@1373.*,-,-+*,369=>7.*+/5521.+,,-00/,()*-2531H[?5752000.,+*),.10..-,+%#8VO2++,03231B[I-)(()('$4UN@4%@ffgzrgY942,7A?<;831-+*)($%,14::@VWQQH=AIIMI?880'+75*'#(A<*==('('+-+.364.)'(+,.11-*))&/HXQ?;AG7,Zn@56.('&()),245]}O>>6/35851111//2:58ktzd6045655431.-.,,./9LK4(,/-3GgjG.(,2431///0+6?98,)<C3Tlor[<380,636>928@6//-9KXcfmttst|m?6>;89;::?D>87;SiQ.*.+)*)(&'+,+)'*..('(,-$.KJZZYYXXXXXWVVVVVWWWWWWWXZZZZWVWVUUTUWXZZ]]\\ZZZ[ZZ[YWWWXVVVVVVWXXXZZZZ[[[ZZZYXYYYYYXWWWUSRQRTTSSSSSRPNNNMNOMLLKLLNNOOOPQQRRSSTUWYYZZZ\\\\\\\\\\\\]_aaabbbaaccbaa]TPKGFGHGECCEJViun_OFDDEDCCCBDGIJJKMNNPSWWTQNMMMNMLNV_c`[TSZ]\\WTVVUSPOPQVXVUXfwuli^e}tnrsqxxhblty~~ztsx}}{}yxzpmpk_^fdkz}tkotvy|}{vvuk^achͱ|h`_^`ktqmkhffiijiiiiikjjfhjmmfowyvbUQO[\\ROU[XOSaotrk]Y[XSRTV[]ZW[XYZ\\flsjc_Vamne[]Z[sxrg\\XW[_RINXXQNS^b\\XXWWWtfdgffkf_ZsLLKPSW[TOPRTWTHTpocdi^MNQNQRQPOOOQSTPNNNMMPNLMKHHHHIIJKMSVRNNONQQFM_[Sevs~rJJeeYTQSPMNPNJHFEFFBN_RJOPON\\VG]iVJLMKWXRSQNIA<HWTKFEHHFDDFHJLIFEDFO[fieca`^_VNHDEIIHILLLLLLJKKKJJJNV`c`WOIIJKKKIIJKLJMJ_iU/IyeGMNOOMLLLLLJIHFHOU\\dntywl\\QNLKLMNMKLNNNNNNOQRRQOMLMNMLKLOOMMLKLNOPPPRRRPPNLJIJJJKMONOSYZUSTSQRPPRRSSRRRRUX]`ZVUROQSRQNMHECDDHHLJJKKIFFDB@@>???>>>@BDFFEDDDFGHHHFGFJQIBEECCEEEEFFFFFEEEEEEEDEDDBCCAACDEEFDCDDVDGGEHHIIKSRPRVVVUTSSUWXWVVTTUSQRTSSR[pxqukxe@\\iZ\\Z\\c^KHJHIHGIIHDJWa\\KHLMMMMMMMMG<<>@EEDB?ABCB>:;=?@BBBA@>=<<;<==>?@bH?EBABCBCBCDCBDDDCCEEEEDD>6;D>:>====;:998>CKHFDDDCDDCCCCCB?=:66:;9888888887777778865689:9;:7767789:<;;:;8667677:?>96:<;;;989979:<<===???>=<<FUbfc_WRSVY\\aC799:<><977644545555566677878;AFGE?:::=ABBAABA?CCA@@ACHNC?@=8789988;;<<==<<<<9=?@>>95455679:;>?@@=7:;;<?><;<=?@A@???>>==>=?==@?CIHDCA@ABCAABBA><99<=>@FOVUSVXWXWRNJ<03457:8;GW]^afdQB@>674455666667?E>988:::8558:::::999989;=????=<:;;<>>=<<:::72.-.02446665776678778865455444443455444468::77BM@8>@DKF<9=>=>FC4/0--19=73565446878867886542236=BD>41.//.--39:;96;DEDHNTUPJ?>C@>=;;FLOSTNA>>7.+))((.;;50/1//0340,)*,1@OM:.**,1475/+2522321..25443/*.+++,/0000.,++,.//)%')))&,BF0)-..-./*:P?+,+*))),682--\"$MkyaVaHHD,1;;9:;9840*((''-521>JQQ^T5)9OLNL;192(/6,%',:J>-3.'(+,-*&%*38741-*+,02/.,*'?XE+2FFE3,>qZ065*,1&&((+/3;uw9>@;975675301332683Q}]2265765431+(*)(*-1>J;+,6-%Cm[4,,01120/--,,<>14/\"(0(JjntkL345,-/8DA85400/,1DYao|ph{F152002448;;997:@9,)**))(''(()))+2698*&--++//^]\\ZZZZZZYWWVVVVWWWXXXYYZZZXWWWVVVVXYXXZZZYZZZYYYWUUUVVVUUVUWXXXYZZ[[\\]\\\\\\[ZZZYZZYWVVVVUSTWWUSTSSRPOPONPROLLLLLMNNOOPRRSSRTTUXYXYZ[]^^^^^^_aabcddefggggffeb\\URPMJHFDBABRkwti\\OGFGGGECBDHIHJKMOOPRRQNLLKLMMMLNZdd_TJKPPMKMONONOQQYb_ZTVk{{vr}|wxxvxn^X]dmv{~|xxz|zrmz~y{~pinkca`bhuyo}yqru{ve]ccdzykb[\\bmnkjkmmkmolhdgijknkghj}vbNEVb\\^fxtmqonlkrvh]ZVUUUWZ[\\\\^dpieosxvfckigegb]fqufYX]e_MFHT_]NLSZ\\\\YY^brzdeigilkaLedLPNPRTWSNNQSTRX[blfheUQSRRPPOOOPPRTQMR[VONOOPMKNOLKKKMORSTQOMMOKHJQWST_m}KPjmhd[QQNNSPKJKIFFECJWUPQQLU[JSdTLNMHNXQPQNIF@<JWUNFCFFEDEFHJKJIIIIEDFTf`][ZZXRLHGHGHKIJKLLLLKKJIIILLKLNQOKKLLLLKJJJJJKORb}JCG:Nu]LOONMMKKKKKJJJEIV^gnnnfVMRUSPLLNNMKJLNMMLNPQQQOMMLMONMOMMNOMMMMOQQRRSSSPMLLJHJLNMMMLMQX[VSTSPPPQRQQRRQQRSV[ae_WUSSTSRQPLIGFEEEGMSPKIGFDC@@??@?@@@BCGIIHFFDFFEFHKJHMMFCFGECDEEFFFFFFEEEEEEEEEDEDCDCCCDDDEEEDEBIJGGGIKLMQPPW\\[[\\YVTSTVUUUTRSSQUVPQ[gptf_jqqtrxZGecYXW_\\IGJHHHHKLHERa[LFIKMNNMMNMLHEFGCFGFDBDEEDCACFEEEDD@?=;;;;;;9:>=bF?BABEDCBBCDCEEFEECDEEDDCA;4=B<>===><<;:9;=EIEBCDCDDCCDDDEEBLNH<::87777887777788888747997546689:;<=@>=<;99899759><758<;::99999:<=>@@@@><<;;;>H[eec\\TTUWZ\\D<>CGFDB>>=:876654434666666777:CDDC<;;<?ADBAAAACDBBCEFIC@B@:989;:779::<<<<=>=:>>:=>:6675689::>DHKE<9;;;?>:;==>>??>>>>=>>>?@@A@@@FJID@@AAB@@AA@?<::::;@JQPORWZXUTSRQG87679:<<;>Q``cgcO>==867868;85679=;7889:9766889889999999:;=>>>=<<;=?@@>=;::<<83//.-/3766557769::;8444222332212356654468:;<;=GD9:<>DHC<989=CA3.21/.387555453587778988876335:AC@91-,../00//0210036;@BMXYN67FCBB@>@DLT\\R96?=5210.,.9>;7326;?<8420/))6LM5()())0:<516;7775457:8/01/-,,,.26422220/.-,/82&&+++*)-021111.**(7C<8940///01+('))%6d{f[eU;0/).9>>;987:91036774.-;KJ?NH$*HNNN@.+1-(+/*&(.:6()*)*.0-++)%')+-493+)(().20,+-+$$2<@D2'-PoD0745K^C*)0333?^P29:;;AB<866679733831jj809<;98879<6)&(()-/4HJ604+#H\\<)/81)+/011.,.@=073..+ /VkoXC?951+)8G>101441-/B\\ouuwy{G-230,-/34+),/0)%((((**('&&''(*)'2<?E?2.-3FL@a`^\\\\\\\\\\\\ZXWVWXWXXXXYZYZZZ[ZXWWVVVVXYYWWWXXXWXXYYXXWWWVWVVVWWWWXYZ[[\\^_^^]]\\[[[[[ZYXVVUTTUVVVVVUUSRQQPPQRQOMMMLMMMOOPQQRRRSTUWYZZ[]]^^^^]^_`abddefghjkkmnookhf_TMKKGEFA>NagileTJIIIGEDDFHHJKLMOPOPPOONLLNOONLQ\\`^ZMEHIIIIMPSSQQMNVYYTOXhqokp{zwsbRPUZ`enz{|zpip~ufjqhab^`kpip|pr|rd_aevpcaZYanplnmlnnorlgchjknlfivtrrgVJZ\\\\|}ŻhW\\WWXWVUUWY_ejptw}yo}jgdcefgecelrj_Y`fXJM^mxtXLQSWYV\\gjewdfhghifWLPZUPSSTTSSQNNPQSUjyklj`V[[UQSSONOPPPPMR\\ZRNNOPONQVVTRQQRSSQTVPLMNKHJLLORPl}VRjf__\\[YURONLIIJIFDCBGOQQRQPXVWcSHMOLHUWMNLJGC?BNTPNHCFGEEFIKIIIJJHGJLJGO`a]YWVRNKIHGHJJJJIIIJIIIHHGGFEFHILKKLLLLLKJIIIJJGMXjFKMQKEINPOMLKKIJLMKHIOYekom`UOQTVURNLJILQRSZ_aa]VQPQPOMNNMPOIKPNMNLMNNQSRRRSRPMOMKIIJLMNLKKMPW\\WRTSQPQQQQQPQRRRTVZ\\fi^RSTTTRRPPNKHECCM``PJHGFDC@>??@?@ABDEGIJJIHFEECCHKGLRKEFFECBDEEFFFFFEEDEEFEEEEEEEEDCDDDCCCEEFFFIJGGFGJPQRSX_ccbb_YTTTSSSRRQQQSVUOUftpd\\YTSTPVaj|zlnUJ_ZWYZSKJIGHHHIJGK[^OGJKIKNNMLLKJIIJHDFHHHGHHHGHIIJKJGC@<<=9::;87468:\\@<=>?A@@??????BEEEDDEDDCC@?65?A????><==<;;8=IFABDEDDCCDEADFH_rnL6:8888878777888788875345544569:<<=>>?>>==<<;869=;867799:998:;;<>>?@@@@=;998::<MaiibZVUUWUEAAEHGCA??><==>===;:98888987788=BFD?<;==@FDA@BBBCCCCDB@@CA=;;:99789:<<<<<<=>>==<8;=88:9:;;;<<>EIJA87:99<<9;<=>>>?>>>>>>>??@@@@@@>CLH@AAA@@@@BB@>=;979>FHJOUY[YSOPPOK@767::=>83AZ_abdY@:<86984<?9589879;:98:;:768776888999999;=>>====<>?@?>=<;;<;:964/,0564556899:;<<6223432222222244333368:<<<=BD<8::>EF?866;A>2.1200037754443477658997874468>@@?7.,-../0/.,-...-,-.035@QG.:I>@??@@AJRZP4)0642232138DKC947CHFCAAB>856AE6)))'&(5?;535532100363-/0012005;;74443221.*-670/00../,+.01372()0:?>=:5/*3EPC&&)('#)Rt{nzR+&')*2CKG@:57:88<B@0(-18IE-00'>UQTI5130,(,/-++)*($(()+-//*))''()(,1/,*()+02/.+\" %))(09+%8==8898@Xvh6/9;9679547:99>OG01765542332/4o}0*=>??<;:7;D@.&*,-031@PD4,'3M;\"0A@2+-.021../B;0;743.%$.7X\\RK:461*7A1(/034314H\\h_~}wB%+10/.1;<14>?3$#*,,,-+((((,131-'.CKDB?:46T[;cb`^]]]^^\\YVWXXXYZYYZZZ[[Z[[ZXXXWVWYYYXWWWVVUVWXYYZ[ZYXXXXXXYXXYZZ[\\]``__^]]\\\\]\\[[[ZXWUTUUUUWXWWXXUSSQPPPPOONMMMMMNOOOOQRRRSUWX[]^_^^^]ZYZ[^`bdefghjkklnnjfda^[UOMNMKIF@BLOR[b[NIJJIFEEDGJLLKJLOQQPQPPNLMOOONLOU[c\\GDMMHGILNV__^XQQSSRV`fgb`n}wsscPOUUWY_lxuutrn}oipqd_a_bihk{ty|ub^fttSUXW^ntpnlkptspkiijkmqkn~vwmYTTSn|y}tpgs}}~~|z\\RTWWWZZWUUX\\cjqtxzunssolllllhfgig^\\]XMPgwvytZOSTSSVaigaiocegghg`SNPJOQPSUVURMLMQN[qupmqkZQVPKQRPOOPOMPV^\\NGMSTRPOPTWURQPPOONQSOKMNKJJMPPO[sc\\ifkfiqlec`_XOIIIHECCCGJLNQPPTU]XKONNHHYTLNLHCBAEONIKHBCFFFHKMHHGGFGFHJGCGT\\][WTRNLIFGHIJIHHGGGHHGGGGGFGHHHIIJLLLLLKJKKKKKKIVvRAIIKNLMMMMLLJJKJLMLJTcovo_YXUUVVUTPHGJLS]bipqppk`SPQQOKLMLPQNRQMKKOMOPRUTRRRQLRZUKJKLNMNMLMNQV[WSTTRRQPQQQRRRRRSTWY]ef\\RQTUSSRQNLIFFIZdSHIGEFDA??>>??@AFGFGGHIJIHEDDEIGIPPKIHGDCBDEEEDFFFEDEFFFFDDDEDFGECDDEDCCCDEEFFGGFGJMQSTVXZ^][Z[XUTTTRQPQQQRRQR_jpi`UKJHHPRNK?DRce`p~XU]WYOHHGFDDEGFDK[YLGHIIIJLLJIGHHIJIFFIJKKJIHHIIIIHHGC?==?A<<=?<;;<>?W557998:=<:8789;?ACDDECBBB@?=77AB??@><=>?@?;:GF>=BEDDCCCBBCFN^gcI7888887777778877777753345456789989::;9::;;?:37==84677788999;<<=>>>>>?><;;:9;;:>Siqj`XUSVOCBBBBA@?>=<=>?AACFDC@<::;::98887=BDB>:;;?ECAAAABCBB@@??@BB@??><:99:;<<=<;;<:99899::8888:<>?<<?FIE<568889999:;<>>?>==>>>=?>???@@A<>INJHCAB@?@BBBBB?;679<>DQY\\[[XNNUVLC8779;;8587DTbcb^F9:68978?<8:;989::899::8667777888999:;;<<=>>===>??>=;<<;<<:::982035545579;;;;:84344454432220244344459<<<;;>@<89;;?D@888:>=4.122224544553136642489788569<???>4...//....--.-,-,-.(''(8>7=?<98=A>=FQVF1-..,,378;?<<JPB7;DHDA@AEFGFDBB@;3472/7AB81/.+''*,./0145444569=<88874331.*),29<965310-)*06=5((2=EH=1+*)-]U#$))(!'4GrR/-/+%&:HIHA;689<AG?/'-3;N?()&*?LPX;-01-*.21.,,*((((((**+,*'*--.--,)'))(0:841/+(**('%'('+1/+.00245Rc@2:<;:745578987547C91200112252JW&/=>=967877>=3-.1/03.1DA:61<>'$<M@31,*/10-./C90>:4551,'#LoqW>;:5/41(*.03424>KRF>htl?))-/-),5;>AC;*#*2432/*(+*(/993/-0>]U;7;50=;&fda`^]^`a_\\YYYYZZZYYZZZZZ[[[ZYYXXXY[ZYYWVVVWVVVXYYZ[ZZZYYZ\\\\\\ZXYZZ\\]_``ab`^^]]^^]\\[[ZXWWVWWWXYYYZZXUSRPPPOOONMNNOOOOOPPQRRRRTVX\\_```_]ZXWWY[^`acdefghgfdb]WVSQRSRQPPNLJHGIJJLOPMJJKIGFFEFJNNJIIKOPOQQQPLLNOOPOLLUgmWFLTNFEGFO[bge_\\XSSVY[aeit}~|~}rus_SWXWWYcpvyquxwtquoa^adefiwywx~~p_alztbTWdquuqmrwwspnmljjpsqsvca`Sp|xss{yzzzeUVTQVXV[\\URSTVYcjltnsx|zvpiec^\\b`\\[`b^`a]WRRVWWY`ggeXx{defhfgcYQORTSNNRVWVPIILQM]~pptscJMXVQLLOQPNS^d\\PGIU[WSPOMLLJJJKKKKLMNLJKKJKKOOHUn_S`UVdimrkihffcVHHIFEDEEFGHJMLT\\[UORQNMFKZROPOKEBCHNLHJHB@EGGILMHGFGEFFGIIJJJQWXWTROKHFHIHIHHGHHFGHHHHHHGEGHHHJJJKLLKKKKKLLMNF^fUKEGKQNLMLKKLLLLLLMPZkxvk^NJW[WSUXTNJMV]ceejmjd\\UUROPQTUVTRTY_hfVK[]SOPRRRRRQR\\feTKLMNNMNNMOQRUWUSTTTRQRRQQRRQQRSRSUVYaf_TSVVSRQPMKIIKTNDFHFECC@>?@@@ABDHHFFGHJLLJGFDGIGPQJIIHFDCBDEFFEEFEEEEFFFFEEEEEFFFEDDEDDCBCDDDEGGBEPTTUUVVVUVVVVUSRRSRRRQRSRNNc}smaUJDDCEN[WTGHMctqisxtxt[`Z\\C>CBABBCEDDS]KBHHIIIHIIHHHHKORTSQOMLKKIIIIGFGGDBA@>DIG?:?DFDDBBCO5468989>B>:8779<?DCDDCB@B@AC?79?=<>>>>>?B@@?@C=:>BDDCCCCEC??JD>888888888767789877677655568<<;:987778778633872786556778889:;;<<==>>>>==<<;;;;<<7<XpobYTSTKBBBA>>>>=====>??ACCA?=<<;::98878:<EF@<9;@DCBBBABCB@@BBCBBBABCA@?<99<<<=<::;;988889769;>@A@?<<?GH@>;9:::879:;=????=<<>>>==>?>=@?@>@AIPQLGDA@@AAACCA>><867=LY\\\\a^RJX`\\PE;7;<:89<:7DVbf`F679::<A<89;;:::76799::7766777788888:;;::<??>>>>>=><::::::::98754345665798997645765455443221244444469;;;;:;::::;::@?78<<<<6/03313543367400442004789:67:;=?=92//01211000232220.67044-0>A:;;::;=8@PP;38764.:D;:@=,;PG@CFH:*,.4;AFJC>BC@?CB=ADE?:751.16876789:::89>CDEDBA=9730.++-/8BA962--.**-065*(4EMH8*)-/+KD(0***'% !R^1/12-+04@GDA?==BMJ:2574;I:+,(*2?SD(%)-14589641,(+-)%(**)&%(-101/+''('%#);E>71-*((((*))4=7343/.//),=:068::::965449Fdi\\I5110/1134763^99B><50./014797320.-0.-9;;8;=*\"4A@:2-)+.---10E8.=90293(*(KvyZDB>71.,+..01444>JL;*dnBAF<89=<3+*0569:/$&*2?@6/)(+((264/12,3apH376.'%%hfbb`_`bbb`\\ZZZZ[[ZY[\\\\[[[[[[ZZYYZ\\\\\\\\ZWVVWWWVWWXXXYZ[ZZZ]``^\\XYZZ\\^_`acdca``_^^\\\\\\[[YXXWXYXYZ[[[[[ZVTQOPOONNPQPPQQOOPPPQPQRTX[]_^]]\\YWWVWXXY]^_``aba^[XVUTSSPPPTWSQPPNMMMMNMKJLLLKIHFFFFGJNMJHGHLOQQQQOONNPPSSNLXikXFHTSHEGFHNPS[a_ZVRPS]jv|ysry}qpwhTW[YZ\\bjqusuv~zotqhdgigfk|xx}zy|whe}zac_npqtqswskkmpomkkptz||sonq{z{ru|u}wq\\TVSWZTSQSMGLPRU\\hr{xj~Ǥwrzpvv|{tpmnq{}ldfiWMVXYVSRUZZW[ehd[wsbdfhfbZSQQSTSPORTURKHJLNMUm~pftdYqgVm~~kYSSTRZkfQIOZ_ZSRONMJHGGHHIKKLLJGFGIJJLPLVodKPROHM^dhkh`XRPMIHFFGGFFFFFHKKX_WUXUQONJSVKMQOKHEDGJIHHFB@CFIKNMIIHGEFFGIIKKKKNTTTSQMIFIKIGHJHHGGGHHHHGHGFGHHGIIJJKLLJJJKMJKMETqwfOILLMLLLKLLPPPPNR\\lvuhSPSPQPKP[_]_gknpngb_ZVTOLNNONS[`d[VUUge`Z`pbSQQQONNMQ^phVNLLNOLJMNNOQTUSSTTTRRQRRRQSSQPQQPPQSUZ^`\\TRTUSQPPNLIIHGIHHEBAAA@ADDEDFHHFEFGHJKMKHGEFILOLGFGFEDBBCEFFFEEFEEEFFFFFEFFEFFFFFEDDCCCDEDEGGGBIUVVUVWVVVVWXVTRQSSSRRSTTQUg|zmh\\PGDCCENZXYOPN\\vuxss`GWU]`eODHGB@BCCCFPMKKIJIHHGHGGFIQW_ca\\ULJHIIHHIIFEFGEB@@BKOJB>@DEBBCCKX:348;79>FD@<989:@DDCBBBBCBA>B@789;<?@?=>????=?<:<@CCBBCCC?85445789988887887689888899889::>A??=><:8887894/-48556448999:::;;;;<<====>===<<;;:::<95<Ujh\\UWUEBBBA>>>======>?>@AA?>=<=<<;:9998:<ACA=:=BDBABBABBA@@@BCBBABBBA@A>>??><;878?HGEBAAA>@FIOTPE:<==EF<>>=;==:9:<<>@A>>=<<==<;<<==>>?>??=@IRUND@@A@BCCCABID<:8:FRX^`^[KQ]b[TH;:?><>>?:<FWehJ6;;::=?988:;:::7669;:988677657778878::989=??>>><=>=;:99::::976433466657766665578886555333222343332568:99::9::::99>?66?>9;842223333336740/120/-.479967:8:=831001355545679;:;92<VTJE-(22;<986:@?COI3087:=8;93-15,5CFJIHK?-**,/8EL@12347;?<::==>=;98;>=;:98667853=NPNPNLG@:2/,++.,-9@7-*(,30.-+14/+:[_E'+:8339P910++--+-)1Oln;1;HF=5,1<CEEFIMSF2/9:6694/+')-;I1&*,.5;@;79990')($$&&((%,93,++++*+*(/33>IC851.*)+-/24<LVD394.275-*0024568988653.8I@/./10//11347<75Y8CD=8341,++/6;:520.++-3774266-473..-+,1/,-023D4-<9.052..$@srRHH:50.,,--./01-5BF?$G|i8.7?ENXN>:<==<641,&$7LJ6*)))')-+**01*,Sg@-86/)*+hfddbaabcdda]YYZZ[Z[\\\\\\\\[[\\\\[ZZ[[\\^^_`]ZXWWWXXWXXXXZ[[[Z\\aba`][ZZ[]]^bddedbba`_^]\\\\[[YYYXXYYZ[\\]^^_^\\XRNMMMNPRRSSRQPPONOPPPQTXYXXWUUTRSTTUUVWZ[[\\]]][VSTTTVXZXTQQRSRRQPPNLNONNNMNNLJHGGFFEDINLJIHJMNOPQQSROPPRUSLHPekQ>L[RGHLJGGIMRY_\\URVds{vkiosqlgjriYSVZ_]]eqllrrzquzkyzrkjkihmu|}||wouzyvw}yggwyxsZ\\{ornmorrng`dilnolkpuqgimmjdaurm{wtwz|`NWZ[WPLSRVcwvZWaesyi^ņ]_mnlouytolnq|w__debTQX[XRUVUTOSaec\\vlbbfkcYTPRVVTRRQQQQNGIKMMMQ]lcQX`OMyhd|q^VQYdYKR`cYPOOOMMLMMMLMNONNLHFEEIKLKGXneONRMNJFNZghZMHIIJJHGFGGGFEDFGHQWV[_YUUXWW[TIJFFHHHGFEDDEECEHKNQQPLLJFEFGGHIJKLLMQSUTROKHKMNNMLIHFHHGFFGGGGGHHHGHIJIKLMJIIKMJJMNSln_QKKKKLNNPPOVZXYXbjrl_TQRTTQKGR\\cp|~}o[SRPNOOPONMNNONMKLPOZYSXsgRPPNPNJJM\\shSNMKKMPNJLNPPRSTSTTTTTSSRRRQSSRQPPPPQRSWXXYYWRSSQRPNMJIHIJHGDA@ACBDHHGFHIHGEEFGGIKJHFFFGKJIHFFFEBAAADEEFFFFFEEFFFFFEFFEFFFFFFFEDDDDEEFGHGERXUVVVWVVWWWWVTRQSSSSSSXRVlynoc[MFFCCCK[YYTPXS`jtqzd::GY^iVSPLFCCDDCHLLNNKKJJJIHHKNRX\\YSLEDCCCEDDDDFDCFIGA??CMNHMTQMGEDEDM[9547:8=@IIE@;;;;=ADB@@@EDDC?@D<779<@@?=<>??@===;;=ACCABB@<9:88777888887788778879::;;;;;<;;<:::;:98877851/267568779;;::;<<<<<======>===<<;;:9766808XkdX\\U?A@@@???>?>>>>>>>???>==========<:::;?@?=<@BBB@@BBBA@@ABBBAAAAAACCBBBC@>:746GVRRRQRSQQRSTUWO@<=9AA<=>=<=><<==;<>A?><><:;:9;<<==<=?@@A?@JTPD@AA?ADCCCBFC@>;;AIQUV^bWNNV^_XF8<A@?@?BA?CVkY?==9998998:;998865:<;::877766777887888888;>>===<==<<;:::::9764334444556667787899986655433223444322457988::::::::8;>75??98;;7323323345531000/...038969;:9:52210/13344466788:996WkWMFEE6174/2>GNEHH2-24:94/,+)*044:FONKLE611108HN>0)/.2541/.133322420112563001/,:NQLOPMG;2,+)(''&#+72(')/62//-/133Imt]3+B:45:8>:0,+..)')'19Q=:O^O;>=-3JKA?JUL8)-/25872-*(*/;5,.2415>>4-,376.*('*)'%)/ATK<811/-*+*-=F?65553113550043DbL(*0-/322///02227;<<9630/243462/./1247<C;,cI;@>956;4-...4:830/,*(.330.012;:,'*'*.452356/7F1/<6-/1042'=e`MD=740.,++,-.0111555.;h{[15:AN]gW?EUWUJ95;6''@PE1'***,+)'),/1+%?X4)411100ddfecaabddfe_XXZ[\\\\]\\]]\\\\\\\\\\\\ZZ[\\]__`a^[YYYXXYYYXXYY[\\\\]_bda__]Z[[^^_deeeecbba_aa_\\ZZZYYYYZZ[\\]_``bcb`[TPNNOQRRTTSQQPONOOOPOOQQPOOOOONOQRSTUVVWXZYXXXURRRSUW[^\\TOQSTTTSRPMLNNOPOOPOLJJGGFEDDINMLKKKKMPQQQSRRSSRTTJDTkkSCOYNGLNKKNNMP\\bZRYo|xi_cgfcelpwvkaYZ_[[bp}sgpzqg|yuuoljijmq{{rrwyy~q`gouwux~z`Ut}uvaX[~vtmklqia``aehkmlmqtplklkingxtrbcqyu}~hPSVVRPPV^g˫vYR]to]W]^ĝhcgknlkuxnjfbiosr_[da^ecXWZXQSVSQNNV`c[od_fjcVPQQTXWTRSRQPNKHIJKNRQZdQENNGXiqw^SgxWQ]WNXhdTNNPPMLNPPPQRRRRQMIFIJIKMNKUi_LMPOOMMJIS\\WIGJLKKIHIFDFFDBADBASWT[YUTW[`di^RMEABBELIBACCDFIOQRRSRNOMHFFHGHIIKKLLNQTTSQMJKNPQQMLHFHJIGFGGGGGHGGFHIIIJLMJHIKNHGLSTWSLIIIKKJJKJNTY_`bddb`[UTY\\VOKHIScmw~}u[JLNMNNPROMLLKKKMMMLLJGRkmYRPOPMPGManhWNOLKKMNOMMMNPQRSSTTUUUTRRRRQSSRRQOPPPQRTUUVZ`^QOQSROMJIIHJHECABCFFGHHHHHIHGEDFFFGIHGGFGGGHGGFGHFABCCDEFFFFFFFFFFFFFFFFFFGGGGFGFFEDEFFGHHGGNTTVVVVUUVVVUSRRSTUTTTUWPVwwnmXXKFFED@IZWTSMVNOimnlRSV]gTb\\WUPNKIGDCKNJJJKKKKJLPSX[[YTIEBABAAAABBA@BA@DILHA@BEDJ\\b^XRKHHELP775123:@GGE@@?>;;=BA??>BBDFA<>=;99;>@?===>????=;:;=@BCBB>;98:9877788887777776779<<<<;::;:::8889878:8773/076/069::9;;;:;==<<<<======<<<;::987635986Gaf``V:@@@@A???@??>>??>>??>===>=>>>>>>=;98<AA@>?BB@@ABCACCBBCCBBAABCCDEDBCCBA=;4;OVTVWYZ[XUUVVVWSI>78<<<=>=<<<<====>=@ED<===<::<=<<=??@@ABA@ENOEABA>AECCCCCA?>=;<@JOOYbcOCKX[^S=9==>@?AB?<CXdTA>;7779::;:98899:<<=;:888767887887778887:<;;==;;<;;::988865542444345566788889999866666433234444323565678;;:::::8:=54=>97<>9543222344431///..01/-3898:<;8311///.---./035789:;4?cdU\\]XQ@245.6MS@<B5-1794-**--+/8==BMSPI=886309FH<4<6/34-+..--.-,031+.67552001/+:LQQQOK@7.*('&%&'%&-31()-20///0127Rvrsn;653548>91.*/51+*/>;23J\\Q2-CG,2OP6/BYE1-,(&*351,+++.1/-*+,).51,*).47887542.(+9MUPQPC73-***&1B8\"'333237;7.(,29UR)$,+,,,./.,,-,.159<7111//04682../014:AE?3?jR=@=835:513531443/,+),231/.///87)),)*06637:70AC/1:2,.0152*7GBB>231/.-*+-../0244/295=`mAOjF(33<OW^Z>Fhn_C2=JF:5?E:1+(),1/&'*-.0.$2P<(../232]_bba`aabcec^ZZ\\\\]]]^_^^^^\\]\\[[\\\\]_``aa_\\[ZXYYYZYYY[]^_abdecab`\\\\[]^_cfefgfed`^bdb_ZZZYYYZ[\\\\]]^``bdefda]WTTRSTTSSRQPONNMNNNNNOOPQPOPPPPRRSSTTTUVUUVUTRQPQQQSUVSTZ[XXXVUURONOPPQRSRPOMIGGGHFFJMNMMLLMOPOMORRUUTTWVMK_wsVITVKFJKJMONMVb^S\\yk\\[`_\\]k{xuzyufUU]^`qwtnihyvx{tpnllmnv|upjtohv}wvvuyvS\\abqhXWizyskour`\\_abccfjmtrss^ekklo{f[ibgos~|yqqrQJOOW`ioqtxƮ\\[zv_U_gcljztywhu|qic`epqlceib__in`WYURTUROMOS[c^gy^^miPKOSVWXVSRRSRQNJIKLLOSSY_RLPIKiwjqfUNRi{}mkgQShgSLPRQQONMNNOQRSRQNJGFJLJKNJYoZCINNMNMLKKMPOKJMMMMLLQKDFEBA@D>Ge\\UQORVX\\_a[URPOKFBDJJCBBBEIJORRRRSRSPMJHHGGHHJJKLMNQTTSQOKNPSSPNLJJJFDFFFGGGHHHGGHHHIOQJIGHMEAJNQOLJHJIIJKKKMS[]ac``[\\^\\ZY\\WOLJIIShsty}zn[KINOPNMOPNLNNLKMMMLLNKG[pbPPQLQGGM_phVQSQLJKMNNONONOQRTTUVVWVTRQQRSSTSRRPPQPPPRTUUX^gcVSSROMJIIIHHGDCGGGIIHHIHHHHHEDEFFGGGFGGGGGGFGHHKIEEGGGGHGGGGGFFFFFFFFFEFEGGGIHHFFEDEFFGGIIIOTTUTTTSSTUTTSRRRSUUPLLIFHWjtjaIZJHHHF?K[XTTPQJZupqkflpqT?CVTXUQMKGEHMKGDIKKKKLPWYZ\\YUNGID@A@AAAAA@>=A@>EMPMLG?@We_]_^XUUQPH>:=:9<DNIEGADA>=<<>?=<<;;=B@::<?>;<>@?=>>>?ABA?=<;:;>AA?=;;98898888887777787789:<<<<:9::::88788878:86630474/38:;;99:::;<<;;:;<=<<;;;;9878888647:935Kbij\\=CCBA@A@???>=>>>=>>>==<=>>>>>>==<<;;?BCBCBA??@@BCCDDCEECBBAABCCCCCBBBCCA=6AVVVWY\\^\\XVWWWVVWVJ=:<>;<==;<<<<=>=>>>@BB;;>=::<=;<=>?ABABDD@FNJBBA=AECCDED?>===;@IOSR[`SEAINXZI;;=>??A@AB=<TeP?>777:<;::9998:=>=<9997876677678777788789:;==;9::8888777655433443456678888999997666665433333433324445569;;:9899;=64:<98:;87632212344221////033/18:99:83////0/.-,+,-/48:999:50Usd^b]^ZA78/<ND9641.4:720/03/)4CKI@DRUG87;960.298;C<488-+42..10156409GC::964:7/;U[[WND70-*)'&'+023027,&)//.0222/7cpbD,484,4:943AQB=50=CDD/>C2#/B;+9OE,%8YD..-($(-.,*,02.04+$(')-0.-/../..//-.1,)4CKIHHFC?:6.*)')20(*132223333-+.0>J3&)*****+++**),,+-01////001341/./037BFGF@39GHCA8125555652274,)*.9??=95//-,1/341./3358767A:+/3/(+0231./-/75-..-,---/..-/275-.:7.13,07.(*(0>=BI8Jovc@126:84234;:.'/7.&)*+,-42&=B)&)+.35YZ\\^^_``abba_]]]^^^__aa``_^^]\\\\]^^_abbdda^ZYZZYZZZ\\]^`cehhhhfdb_]]\\^_aeghijjga_ceea\\[YYZ[[\\\\]^___`adeeeggb\\XUTUUTSSQPPNLLMONOQQQSTSRRSRRRRQRRQQRSTTTTRQQPONOPMKNSY__^^\\ZZXWSNOSSTVUTTRPMHGHHHIMPQQPNMNNNNMNOQVXWW\\XNWl{v^RXUIHJJIIJJPY^^ktXT^b^\\\\j~|pqtiWYmr_b|stmhqliwwv~}wpirtqsqqqpquvuzo}}z{xu_URRpeX_]]ltir~rb`aaabbcgkqon}d\\`lkmgY[cdgnw}z{{teosUVahqz}v_zětn\\`iZe`wh{tkedltsmddjic]cst_TVTTUVTPNMP\\fa_k^eeXMPTWYXXUSTTTQONLLMNNNOTXWQNQEZn]ZVOII]sp]S[hZILQRQPPOOOPOOOOMLIFGHJKIKKJX\\PLLNMNONLOTWXWSNLLOPOSXPNRPNLKJJT[[YWVUWWWTSPPRRRRSTOHGFDCCEJLQVUROOQSSSOKIHGGGIIKKJKNTUTV\\TNORRRRNMLFCEGHHGGGFGHHGGGGARjbWYYK^haYPNKIIJJILUcf_^bfhc[^dda]Z\\XOIHMJJVeouyweTLJMNNPNMNNMLMMMMLLKLLKIUjdQJLPZXAB`maSRSRPMKKKMNONNPOQSTTUUXXVSRQQRTTTSSSQPQQOOPRTTX\\dli]QPQMKIIHHIIHGIHHIIIHIIHIIJJHEFFGGFHHHHGGGHHJKLJLJIIIIHHGGGGFFFFFFFFEEEEFFFHJJGFEDEFHGHIKMQTTUTSRQRSTRSSRSTTPOXb^ZXPDRrvJGHFEAFVYSUSOIZvrrvssp]D@6ORWYSKHHGLKGHNNKJJKNRUUTVURPPRNE@?AAAAA>=AFC=@FLQUSIL`g``cb_^`a[VQPQRTVZ`\\PFACC@?>=;<<:8864;=<:<A@===>>>>>?ABBA@><;::<=?>=;;9899888887777878999:<<<<<:9::998888887777752395/4:<<<98889;<;:::9:<=;;:::96667778:9;;843=Ufn_7:;<=>@??>>===========<>??>>>>===<<>AABCDA=;=?ABBCDDDFFB@@@@BCCBBABBBAACA=KZWVWY\\^]YWWXXXVZ_[L>:;<<==;:<<;<@=>>><>E@;==;9;=;;<>A@@ACEDACKJDB?;?CDCCEC>==??8MTFUWUZVF;=@HTRC<?>=>?>???:>PSB6789;=<::9998:;;:999898655665766666689878;?@<8777666775655434433467877889::99976666665433233233333553579:::9878<;56::::9996310122332231///03425:<<;70,,,,/1000.-,-0579:97;6$:nu^dmfb^PC9=B=>80/287233335.);SRE@=COK?>=82,**-1796222--464347994./<IC9::98=9-2QcbYL@64210,*+.1687/13'$,/1586401alD[2&.54*-59<DmW>@;;4/20.,((/3+)=G5'%.MB//.((*)''(,14332-((,045566542../.*()**=YWIA:7B?:73-('*--/4863210.295-*+.65**,+)*)))**+-,+((),-/101011/////04=GIIHA33DHEA7..245544499-&%*28:====:4,)1;=<6/,14210.-/,''++'(042/./01/++++++-//-.//9A@:/-10.-+,(.<<0++.,0/)HvfM@.'&'&&'-=C4'2<*%*)'))07+18*&('+..XY[\\]^_``aaa``___``abbbaa`^^^]]^^_``abccc`\\[[[[ZZ\\]]^beikjhijhea]]\\[\\\\]abcded`_abca^\\ZY[[\\]^^`a``abbcb`^__]YVUUVUTUSQQPMLNOOQQQRSSRRSSRRSRQRRQQQRSSSTSSRRSRPOOMKOYabaa_^\\\\\\XNMQRSUUUWWXVQKGGHIMRTTSPNONOONONLPVYYZ][X\\eoqf_[QNMJHGHHJQYewzbUZaa^]]amwvsoc`qwk]mzgdieegmoj}knZbhbXOZtxrvtqoooqwzz~yynn|gUU\\qeY[[Ygxsiq|wibaaabbdfhcbdzscdkh^`abckv{{}pmmMv}}YVeϼ`]kaPguoegw|icimlfa]g||dUUSTWVSPNLS`caWadcTNOSWYZYXVUWXTQONNOOPPPOQTRNMKHfiLLTOKHEPVQW_XLMPPPPPOPRSTSQQNIHGGGHJKJJKMMKMMLMPPPPOPUYYXTQMMPPNNOJQ]]]]\\XTSSSSSSTVVQNPPPRTUW\\a_RIGFFFEGKRXYTOLNRSTSMKJGFGIIIIJJKPTTZc^ROQPRSOLKCHRPHHHGFGGHGGFEFCQqoV^pcrpTJGIOOMNOOadYbfimgeed]WWXXQKJJOIKamtzr^NLMKKKMNOMLLLLLLLLKKJLLHUljVKJJOnrW_k`UQPQQOMKLKLMNPOPPPRSTUUWXWSQQQSTTTTSSQQSRQPPQQTXZ]dkeTNQOJHHGGIIIHIIIIIIHIIHIIKQMFFGGGFHHHHGGHJJLLLKLKJJIIHGGGGGFFFFFFFFEEEEEEEEHIGFEEFHIHHKPMMRTTSSRQRRRRTTTVTMIZȺRBDCDBCRYSUSOKPl|qntpiF>FAIOUZWNGEINJGTZPKJJMPRTTRONNPPQND??AABA@>?DGC>>>?DIMPW_babcb^aglf]]\\ZXYZZX]^KABCBA?;9;;;97768;<;=@@>=>????>>@@A@==;;:;<;>>=::8798788887788878::9:<<;;;:999998::999777773156208=>=;9898:<=;:989;==;:::::8789:<>@AA=7457DZj]7567789;;<<==<<=<====>==>?>>>>==<<<=>==>?<9:;=ADDCCDDDDB@@AA@BBBABBBAACD?EV]YXY[`cb^YXZZZZ\\adXC:=<==<:::;<<?==>><<@E?<>=;<=;;;<A>=ACDDCBDDD@=:<ACDB><<=>@A7G]HDWXZXF8:::AKIC@=;;;<:;>=97CD49;;<<;:9999887547::9986544456676666898779?@;6555655554667654333555766889998887767666654322223323444545767;<967;<737<<;;<;6676897511342////1225;9696/+,--/2200/.,,0678898992<evb^ptjic[R>7@D>54674244566..APE9>72AHCD@5('+-054341**,-/01348=<4-2=B<54449@7,,@`hYH=8878762-+*+-1-,61%&+/7?=;4,QO0:0*'/2.012Nqi\\C5:90**-63-,/-)$'9>/&%1@>310+))))++,04872.,*,4::9::985/,.0++$&)MjaRNGB?=94-+**+++/6:<9633100/,-/.-.../.-,*(()*,,-,+.20269863////011/6CJJIC512:B>70-,0332345;5%$),.,)+.27=504:>@>6-164.**)('(&$'-34684225<:.&&)*)*,-.0114=DD@920,+*'$-@MK<344134-6lVARF1'%&+)(.23*17(%,,)*)*1560)('')('XY[]]^``aabbbaa``aabbbcb`__^^]]]^^_``bccca^]]\\[[Z[\\]^aehihdeiigda^[YYYYYYYZZ[\\]]]^_`^\\\\\\\\\\^`aabbccbbba^[VSTUTTTUVUUUTRPOMNOPQQQQRRRRRSRSTTSRSSSSTTTTSTUUWZ\\ZWSQNOY_abba_]\\[ZUPMNQRRUXZZ[ZUPKFFJPTVURPOOPPPQPLHLUYX\\ba^ZY`geZTVSJFGGGILP[mm]]c`__^^\\]grtuu|qWQ\\rnZ_ebbffghovqZRTXUL\\z{wzummmpsuv}~~yyyvdZjzfUV\\lc[\\\\]anpjmrpgbaaaaaacebbaksty``llgcbcr}{nQeyy~t_cdppVceZYqd}hdszh^lrl`bb^v|gYVRV[UQQONVa`aTv}a^UOQUWXXZXVWWZYTPOPPPQQRROKOQOPKMloQFHKKMNTcbW\\\\IHMNPQPPPPRUWVUUQHDGGGHJKJKLLLMMMLMQTTSRPRTSRRQPPONLKKGHQVXYZXWNJJONNPRTOMPRQSUWXZ\\]ZQJIKHDBDPVSPOMOQRSSPNKHFGHHIIIJJKRTX^^UPQPOPPLKKRWRFDEFFFGHGFEECGOhhOC|o_NO^\\NOQQOIKKU_dhijjg^UUVUTOLLGER[gw|v^JGJLKJKMMNNMLLLLLKJJJKMKOkoXJIHJQ]gucNPSQNNNNLLKLMNPQPQQRSTUVXXURQQRSTTTSSSRSSSQPQONRUUWYah\\NPOIHGGGHGGHIIIIIIIIIJIIKNMJJIIIHHHHHHHIKLLKJJJJIIIIGGGGGGGGGFFFFFDFEEDDCCCEEEEGHHIJJPRGDPXWUSQQRRRSV[ZSG8SǦPBBCDBAPXUWUPJIWromwlHCGHHFMSUYSC>IOHGZ[LIILORUUTQHHCOVPJ><=?ABAA@@CD@>=<:;8;M_b`aacdadmxn[[]\\ZZ\\ZVXf_FACEE@89<:;98889;<;=??=<>?????==<>=;;<;:=<<><;::899977888897899:;:;;;;;;;9899;;:;;;;:99886434336;>>=<::99:==;:98:=>=;99:::8:<>ADDDC@;6477;Nf^7666655568;<;<<;<<<<==<==>>>>>=<<;;<;78:;9899<ADDBDDCCCA@@BBBBBBBBCCACEEBFV`][]_cffa\\[[\\]^^`e_H<=====<:<;<=====><;;AD=>======<;=?@@AACCA@BA:97;?@E@87;=>>?99US?MW[YF99978?CB@=:89::;::84;@<>@@<99988789874/6;;::98653333345668987768::75554555444468875324445555787779877667666664332235312445545636<=;;::;:66:<;<<;:7=JJA=6013320.///11362-0320/////0010-**067998864@RaokU]tskgfeWLC<96666445677502<:16=7377=F>.$).05:9;;82/-+(')*-17966;A@920./;@3,*.QiS:7<:9<;5.+)&%'++(291()+3>985/Ft>#)-.*3821/2KfL,)*..,/24775321.*).1-&'0;81///-,.26820772.-,+-7?=;;;;9.*+/10/($(Qod`d[I>75.%&./++,/5-;O?660'&)().32/.01221-)(*)()*+,3::;>><83111110.2@KMJD7--//3420/*,34344495'&.1.,++,--.04:6595/2992-(')*+*'%'3?EE=777;C=1*((('&''*-./06??<:83-*287=HKJC::>:7<9.Be?&MaN6,-)''&',,-,'*.1.)0627:1)('&&')XY[]^__aaacdcbbaaaccbcdb__`__^]^_^^_aabcb`^]][[ZZ[[\\]`bba_]aebdfc^[ZXYYXXWVWYZ\\[[[]___^]\\]^`bccdddcbba`^ZTPPRSSTTTUUUSRQOOOOOOOOQRRRSTSSUTSSSSTTUUUTTUVXY[^bcZQOPPU^cca`_][Z\\XQNONORUUVX[\\ZUNIHINTUVURQRQQRRPKFKSUUZ_``]UU[\\[]XLGGGHKMKN^h`^aacdededadkpto]QWcjeadegfhgilg{{~ynYNRTRd~{uwwyuw~}aZ\\agnZTUZga]ZYcnpmjigfca```aacffffghfeqxiYanjfcdw|pZIq}~~{zvnd]cx~}qdqm\\[\\[V^y~qdkoszxriipn^mmQhzi]UQW]VQSQOVb`bYt|bRPXXXYWWYVUTUVTRQPQQRSSQMMORRPQHJfxjRGIJJKPS|u_eSFLLLMRSRQQSWWVVWWTKFGGIIIIKMNMLONLMU]]XTSSRRSRRQPMKKJIKJGHKKLIMPNFKONNNNNNRUSSTUTSRTTOJLMID@BKOIEHKNOOPQPNKJHHHHIIIJILRTSUWUNNNLLLKJLNMJFACDEEFHGGFFDKS``I6jHKjmPMMLMIkjYbcgd`]WZYSPLMJFYlut}vaPIIKJIJLLMNNMMLLLLJKKKNKKgxaKGHIJPXt}TOTSQNNMMLKKKMNOPQQQRRTVVXXVRPPRRSTVUUURQRRPOONMPSRST[gbRMNLJJIIGFGHHIIIIIIIIJIIHIJJJJJJIHHIKKKKLMKJJIIIIIIIGGGGGGGGGGFFFFFFEFFDCABCDDEGHHILNQMEES\\[UQORRRSRTYSD9Ap̲KDECCBAMUVWWRLNLQes]LNcVJIMLPSXQA?IKDHSSKJKLPUYURNFKHWYJK@;;=?BCBBAAA>>=>=;6;Uffaaaaddeoq^\\^^\\[\\[YXanO>FFEA<>;999::999::<?>>=<>????>><<<<=><<==<<;:99899977889:9779::;;;;;;;;;9889;;;;;;;::988753337=?>>>=;::99=<9888;=><::8899:@FHJKIEB?:65897?X\\77677654469;::;;;:99999:;;=>==<<<;;;:99:::9::<ACBBDDCBBA@@BBBBABBCCCBCEEBDR``[\\`cffb_]]]]^]_gaG;>==>=<<==;===<<=;;<>B@>?==>>=;:;@B@?@ABAB@8489<?@A=89:;;<>=7NWEGQYYK<;;:898;=<87768999:?@>?AA@=87766799:;848;;::98755422004887665556655543443344224666433556557777669:987667766654443245332345546538=?AA=;=<:88:;;;<=3;XXD?7111100//0/0220.-,/2100/-+-131.*)/58:9750)2@JdtcShynjmifeZF52344225555448:/-:=882.9C5()22025;A><<93/+*+-0///18AFD:1/-/58+)'$DbH29@=<=7,%(()))*+()094-+/3..02?H-)..006<30-0562,*)+//598689535540*))')451+*+-344:AC6.65+)12+4@CA?===:-*01//.'$-Tf_\\SF>:4+&(394-,-04*?L1-384.)++,1444212220+)*+*)((*-48:::96788653/+5JQNH;-*-//01341-2853147991*-.-..-,,,-276.-0-08:50,))+,-+('-8=CF<4457872-,,---.0210/0488301,).8@CDFHIFC><=98;5,60\";^bN>=/+=?)%+,++.03/)4CB:5-'&(,((.XY\\]___`aaceddddededddcba`a`_^^____``a`aa`^]]\\[[[[\\\\\\^_^[YY]^\\^`_\\ZYYYYZZYXXYZ[[[[]^__^]]^_`bdeeeeeccca`_]WRRSSTTTUUUUVTQOKJKLMNPRSSTTSSUUSSSSTUUUVVVXYZ[[\\`d^XUTRRZcda`_^\\\\][WSNLLNOORTWZ\\][VQKJJLQXWTSRRSTTUNHJPPNQSX^`XR[cb\\SONNMMMKHTgg^_fjijjhgb_bfhkcW\\fdaccbgllotxvps}pcWPLa{u|tpq{bW[YXXXUScha^Zaknidcccca`aaabccegfgmlbmvjd`Z]decf|}xxZQji~hougf^V^`_j{qtreZZ]XUYrt`el^buvsrlqpewNbwj^TT]bYQRRSZ``aYh}\\MSXUVWWWY[WLJKLNOPPPQSSQKMRPMLIEEOYLDFGEFHJSuwu`FLNOONQSRRSTUUUVWXZVMIIIIJJKMMMMNNMNXaa[WVTRSTRQQMJHHJKJIFFIJFFK\\]FKMQOJJLQX[VRPNMMLMNLJLOOJECEFDDDGKKLLLMLKJIIIIIIKKJMNPTQINLKKKIHGFEFGIIGEBEEFGFHILQUX`f>_mVA_oKDLJP¥fXdih^ZW[YPMLGJ`y{||`NLJJLLIKMLMNMMMLKLKLLMNOGQ{mTMLMPNTrdNORQQONNLKKKJLMNNPQQSRTWXWWUSRRSSSUVVUUUQPQQQPONNRSQQV`gYKMNNKJIGFGGIIHHIHIJIJIIGHHJJKKJJHHLPOMKNMJIIIHHIIHHHGGGGGGFFFFFFEFEDFFEECCDDDEFGFINOKEFOX][UQQRRRSPSQE<KoХ`?IDCBBISVWYTNNLFNXPjooWKILLNRXREDIDBHMNLKKMSZZRLLDBZgSJL?:;=?CEBBBA@@?>@??>BZgdaaa_`cekum]\\___^][\\Z^iX=CD@::>;=<;<<;999;=>?>=<<??@?>?>>>?@?>>==<:988889999778::97579:<;;:;;;;<:899:::::::::98875346:?@??=<;::::;98888;<<;9::98=FOQPLHECB?;758;97BF976776655679::::9876666799;===<<;;;;<<;:::9:<=?@?ADCBBBAAABBBBCDCCCCBCCCAAN`a\\[^adc`^^_]^_]_fcL;<<=>=<===;;;;:;;<==<=B>?==>>><<9?CCAA?@CC;338;=@@><::::99<?9JUG=BRYQ@>?>;:8888776479<=?CCA@A@?=:8755568=>>>?=<::88669878988985553445776543322332122222333466555576689:;98777777766653234630155556548=BB>78>>;988:;;<<3:TTC@;3210/0000//22/-/..0/...-,-03320-/58:962..105Gf|dZsummlhgicI4353/.011235;<527<:82.9;++7:1,*,3;<::644311593-(*6CGE9111/..*)'#:O:/:GFC?6/,-,/40+,+&'03/../46204.'.57549<4,,+)(*+*)-25=HDA@=754443/+)'*/*)*+(*485=HD4*36,*14/:GGC@=>@:/.23.+)&);ZeYD30460&\"3LJ7--/0/6G;')*/5642/-/13541.---..--..,*+,-033469<=<9740-3EPMA2+-0024444219<520589:4*)*---.---1671,*+0:<620,))*--+((2=>>>92/10--,)+379=?BEHH@9039=<5,.2547@HIIIH@7<@:;8,)+&-Ka^RL;8OP1#)1763..018DD<3*(,076./Z[[]__`aabeghiiklkhgfdccdcbb`___`_`aaa``a__^^]\\\\\\[\\\\\\]]]\\[[[[ZYYZZYYYYYZZYYYYYZ[\\\\]^__^^^^`acdefgggfedc`_`_YVTTUTUUUUVVUTQLIIKLNPRSSSTTSTUTSSSSVVVXWWY\\^```bcddba`]]`aaba`_^[YZYRLLLLLMOQSUZ\\[YVPJFGPYWRRRSTUVWRJJMLKIINTRLQX\\\\VTSRQNKLIJ]kgcfgge^[\\^^]^fkha^c`]_`behkqux|~hSctzyx{n_KPmkd|h]Y\\[`[Qjqa^`hjfbaccddbdgfeddcdeebgndbpg]bbabbae}|u{wMrtxmX_d_^\\Z]^[Z`hfeniU[][fǷmpva]`[isqvympPRro\\WXhvbNSY^`_a_S`tOPVVTUVWWWWQLKKPQPPOOOPQQPNMKIKOPRQMLLMLLMLINZkuTNQQQRQOPRSSRQQRTUWXZWQNLLLKKKKMNNOOPUWYZYYVSPNNMKHFFIKKJIIJIIQVO\\bKMKMRLHLU[WXXQMKKKJLNPTYYQJECDDDDEFHHIJKKKLKJIIHHILONLKPQLLNMKJKJIHGGIIKONJGEEFFGJHX[T`jEuUHeɸ`EJQRZk^hokaYW[XQNGHfrn|eMIJIKLJHJMLJNMMMNLLLOPKHMJp`RSONPNa}[MLLLNMMMLKKKKLMMNPRRSRSVXVUTRRSSSSTVVUUTQPPQQQPONSSRORZicOMOOKJIIHGHKKIIIIJJKKKKKLKJKMOMJJKNRPNJLLJIIHHHHHGGGGGFFFFFFFFFFFFFEEFFFEEEFFGHHHHMKGEHS[]XSQQQRSTSNGAHtʕd=HCBBBGQVWYTNJIE:Lv}hNKJIKLISSGEIEDGKLLKLQ[^VMIIB?TZKNSC;9==AEBBA@@@?@AACCEVeb`abc^`gnro]]bbbba^][]]aN9?;68>ABA?>>=;:9;<??>=<;=?@?>@A@??@??>?<;:888899999:99998548:<=;:;::<<<::;;:9:;<<;;:9898547<<=>??==<:9::::;;::;==;9967=EKMLJFB@A@>:645987899766666566679:999987767899:;;;;;;;;===;<;:9:<=?>=?CCCCCCCCDDDDDDDCCBCCCCC@I^b]ZZ`b_^^______^aeX<8===<====<===<======>?@@?>=>@?=;<@DCB?@A?8238<>@@?=;999879<9BVJ24CWXG?@?@A?<<?BCBAABCCBAABA@=;>?==;8348>ABBA@>>=;768:;=?AA=:7555335577644322112211110/123458;9667889:;;8777778999764322694.04454234588731:C@:889:;9::5>LJC>953211110110/21.,--.-,-----/2676215::950/23110>m~]`|znmkffne@284/*),-06;CF</4>=95362.296,++)+373+*37322373-((7FIA4-0330/010*/<30;NND;877644650./20-/4525BD6..+(++/1156/+*)(**)(),.5GVRFA=730-+,,++++*'%+0016;;=JB/+/410024=GFB@>>@<30232/()0?[jH-0110,%#:WK2-/0//6;830+()075222000.-,*))-131242020/25358::986433108FI<//24445543314831157772,)+--..../5983/,*0>@:73-)'-20*(.9BD>840/0.*()),59<<:;COVL6,-3@ID<;@>619DJKJHD;=B=55-&+($3MSH<4232/+)4;=>8237:;;94/16:@@6/[[\\]^_`abcdgknoopnkigcbdedcba`_```aaaaa`____^^]\\\\\\\\\\\\\\\\\\\\\\[[ZYYYXXYYYZZZZZYYYZ[\\\\]^^^^_^^_`bdefhihhhgfea`^]_`ZUUUUUUUUUTUTQMLMMORSTUUUUTSSSRSSSUVVWWWY[^`_```aa`__^]ZZbgdbb_[ZZZWPKIJKJJKLMNNMPTWVRKGNSQRRSUTRUXRMLNNLJHGHJKJLQQPOOOMJNNHQdkiecdYMQX[ZWW_a`bbffefdeheflpsst[IMVrwp{lPXqmvg_bb_Uts]`hlmnnnjfeeeggcbcdcbagc_nq`]db`cccbbdkxrۗRovoxuw~j_ejic]_\\XZVT]nmlpdWU]Y^zǸqhxzfd^M^sv}~n|^Mps`[\\qiN[hd^^^[PbfKTWUUUXYWUSQQSVXWSQOPRSQOONLMRTWX[\\XXZZ\\\\YSLLN]s_LRQQOONNRTTSPOOPRTTUWVURPOMKIJKLNQSTSRRSUWWSOJHFFFDFILLJJIIKHJksPWfQSNIPOKJPRKORQPOPPNPSWZ^]ULGFECCCCDFEFIJKLMMKIIIIINSPMKJORPONLKLLLLKJIGJNPPMHGFFDISh\\IWd||qCQsWtdObcPPopflqkbWZZRMHNfmbyiMHJIJLKGGLONILNOOQPNNRQPNG[bYZWPNMJenXSPNKJKLLKKKKKLMMNPQTTSSTUURRRQRRRRTVVVUTQPPQQQRPNSSMLMSchUKNOLIIIGGJKKIIJJJJKLLMMPUSNLMLJJJMMLKKMKJIIIJIGGGFFFFFFGGFFFFFFFFFFEFFFFGGGHHHHHHJIGELW[ZTQQQRTUVSJDFkܸZ?GBBACELVWYTNKKD?]yYDJIJHLCCYGDGHHGLMMKNYcZMJMKD?A>>IQEC??>=@@@@?@AAAAACBAOccbcfhc^gw{b]]^[\\\\\\\\[\\]`mK:866=BCB@@?><:9;<??=<<<==?>>@AA???>>>=<:988989:;:9:::99::<;;=<;;;;;<;99<==<;<===;;::89857<???>===<;:9:::;<;;;=><9876;EKIFDCA???=;:62137999887776566665688999987689:99:879;<<<===<<;:9;<=>=<>BEEDCCDDDDDDDDDDCCCBBDC?EZd_YZ`a__^^```aa__f]<7=;<;=>>>>=========>=>@A@><>AA=;;=ADC@@@=6139=@@@?=:88888888?SK527KXL=9<@CCADILMONKJGEA????>::>CCCC=546<ABBAA@AA>;;::;=>>><8656655656664433211221111/.011248<=@BA@?>?>;877567899865433258741255202432247;FJ?789::99;:7=GJC725532221111..242/---,,,---..3886448;;84//110./-<mw^myutngijR9670**-/035772,1=;2..,,/0/+)+,)+22*&-41.-.../2.)8IJ;,(,/1367:=70653<QM9//4225500311692/8:64@F7-..)'')-/00***)*++)()+)(8MI6/0.,*'&%%&,54-.---6@FJA8F@/-/241.17>CDA?>=??70,-1.&+19Yc2$.000-%%CS;/11////1631.05887<=511+')))()*.1137765349<9<;854321242/07=844555543122,,22223575323/-./01357;<:60$&=G?82,((3:4*/?HF@;2-5;<71,)/34;9315=IK>16819MUQOROG=;CHHGFDHKD7.//)).*'13.*)((*276769HMB:8755669<<==<95[[\\]^^_`abcfjlmnnmjhfcbcccba`___``aaaa``_____^^^]\\\\\\\\\\\\\\\\]\\[ZZZYYYYZZZZ[[Z[[ZZZ[]]]^^___^`aceehjkjihhffd^_c`_a^YXXWWVUUTTTRPQRSSTTUVVWVUTTSQRSSSSSTVWYXWWVVVVUSSRSSUUU^ihdd`\\[[YYVPKJKKKKJLMKMUZ\\`_XLDHNSTUWXXXZ[XTQNNPONMLLHEIPSPLMNIQSHJVdkidaVPV[[YWZ\\^]^aktrqommkikovzxeZTRjvuzyu}tf{l[b`_}s^cmstsqoidcccc`]^addbbgfclrg`cc`aabbbb_hoZ_yjgdgjf[cnpmcY[\\YWXdtqkhjcevV\\YWlʹ{zug[gqm`W_lv~wpQnxe`aqwi^jng_[WXO[hWTXY[XWXYVRRSUWXVSQPPRTRQQTTSUZYWXXZ\\]^^`]UNKKJLNLOPNOQQNPTUVSPQRQQRRSSTUUTPOLJJJLNRUSRSTRRSPLIGFFEEFIMMKJJGFIHK]k]W`UQRRWUOIJNGGIKMOTWVUUVWXWSOKGDDCCDDEEFGJLMMMLLLMNNOPPNNLOQPNOONMMLLLLKJJLLLMIGGEDI`aL>LwPINvۗxb@Uo`UT\\gprl`XZTIBKglUgtRIKHIKKIFGMNNJNPPPSRMNQTVJP~[[^]ZSONNqbV^ZSPNMMMLLKKKKLLLOQTTUVWWUSSTRQRRSUVVVVUQPPPPPRPNMOKLJJVd\\MLPNIGGFHJKJIIJJKKKLLMLNVjmf]TNMQSQNGFJIGGHJMKGFGFFFGGGGGGFFFFFFEFFFFFFFGGGHHJJHHHHFELXZVTSSRSPPQMHAUա|RAGFDBCBHSVWTMKKFE^eOIJKKNK4DQWJKIIILMNKR`bPFILMF?@>?D@CHIHGCA@@A@ABCBABB@@Odfcchfcbixa\\\\^[[[[[\\]]`ko@466;=>?@A?><:;;<>>==<<==@??@AAA?>??=::;:8898:<=<;<<;;;>@====<<;;;;;;;;<==>==>>;;;<:8777:@AAA><<;9:;;::::;;;;>>;869BLOKFDBAA@?<;=;743578998877765665554568899876;;9998647:<;<===<<:99;=??<<<BEFDCBBBBDDDDDEEDDCBBBCADXdb_`cggb__a`bccbbk_;6=;;;<>>@????===<<???????>==AA?=;;>CCB?=95138<>?>=;988888998@HC:79>MN?:@BC@?@CCDJKJGC@@AB===<;?DDEEA;648>BAA@@AA??><=>=<<<:6568877644545555323422221/01122348=FKIHHGDA=:876668888555333369:7452376569:<ADEE;6999999:;76AJB3/4632320/-,/245310..-,,--./.387556:;971-.010/14*>pp]o~xxumdbQ82/-/...+(&&),085*()))**)'')**,.+-6;6/-,.0/075-6FG:+()*+.126=;47949JA-*-0-,/0,,/1//11,/2844<;1//+(-1540/,++++---+*,*$'6;2)(((%$&'*+.<?3230*-:PXG49;.-3220,.5:;?@@><<:5-)()($+32QO)+--.4/$+MJ01530,,-01-)'*7A819:/-/+++*+*+--,-07=:545<CC@:58;7311320.//15534344//2/+.1320.1566761-.-+/799;>?8,\"*@C82/,(*6<3*9QVJ90+/;GHB6-18748<:99<A<04KWM?CV^[YWPEAEB4=GFLO?0--,+,5850+++*+**3AD>:>KTSI<22559AA<;9689[\\]^^^^__`cdeefgghgeecbaaa`a`__````abaa```___`_^^^]\\\\\\\\]^^]]\\\\[[[[[ZZZ[\\\\[\\\\[Z[\\\\]^^____``cegijmonkjhgecca_a]]c_Z\\ZYYYYXVTQRUWWWVUVVWWWVUUTRQSSRRQRTWYVRPOOPQPPOOPQRSRVcedhb\\\\[ZZZYTOLLLMMMR]eggcbed^QIIMSTTXZ[[\\]\\XRLILNMLOPJGN\\[PTTLSUKIKUdkgb^]^^\\Z\\_```bdgpvwvrorstx|zmmvleox~wkei{rh\\^cq^gqrpokfa``^^^^`aceddcgiffhfdcc`bbbba`d_a|[ogldfijdaikjkd[\\]XVduuoifjmcufXYUkvq[Xau|h^^bmz{X{kddgfguvigg[UTORWZ^]^b`]ZVSQRTWVTQQQQPNJINUZ[ZYWUTVUX\\[YYWSMKLLJHFIMNNQTVUSUWWVVXYTPQQSUWWYZXWVQOMLNUXTRSSROLJIEEGIGFHKMLHGFCGJJGFJMU\\PMU[]ZRHEKIIJJKKNRWWURQQPNNLGDEEEFEDEFHJLNMLLNOQRSRPNNMMNQPQQNNNMLLLLMMLLKHHJIHHJLQD=@XˬLBQR˨˜RA?]vgX]huul_WPHFQbhQUnLEMLHIHIECGKLLQXUQQQQLLOUQWyeKR]\\URNLOzZW_[WVUSPONLMLJJJKKPTUVVXZYWVUTSQQRSUVUVVUSPPPPPOONMPULHFJZaTKONIGFGHIKHIIJJKMLLLLJHGWamvsgaccee`XXVSTRRRLGEDDDEGGFGGFFFFFFFFGGHGFGHGGGGIJKIHGGFFMVWTTSSTRJFGIC=oŕMCEEDCCBFMSWRKJKHAU{lU]RILLPF<QI]QMKIILLLJYbVFDJJFC?>@?B@CGJKKMHFGFBA@ABABBA@Pddccca_hqz~d^\\^][]_^^__`]sX35699;;=??>=<<==>>===;<=@??@AAA@??=<:9;:989:<====>>==<=>===<<<;;<<<<<;<>=>????=;==9678;?AAAA<::99;;;:::9;<<<>>;87DOTPIECBA@?>:9@<8<9658:9888876666655346789:88:?<588643379:;;<=<;;:9<?AA=;;AEFDCBBABAABBBCCCCABBBDBBR`b`cfkkfcbabccddfjS65;===>=>@ACA?>><;=???????>==@AA@<:;?BB<886458;<<::999889::;:<?<8877AKFCJJC<9788;?AA@@ADNQB9<>>@BBDEDA>76;???@AA@??>>?@?>><9768:;:865555677765664444433444679;<?CDGLKFD@<977678887665323358<<964:>;;?A?:9999878999989:748?>75664332/,.7==:400/.--,-../0/486456:<96/,,0221141(BibZwvvztkjiQ2-20.,+*()+--.463.+--++)('&')*'*<D9/-+-041/3624=?:31-*)))),2424535>5-3::5-('*..,++*+)'(0877;60110145200.,,++153/-..,+.<E?6.)&,//7:7??4--.,('?UJ4./,,010.,-4517?@?<6.,))('&(,37O7&.-,,42$3L?-252.,-..--+)#1F>.02)'),274.+,01/./5;:668>EFB;8<>:43322131-.0001353./10/12330..022340,))+2:=;:;8/(.:>710.,(->=-+DYXQA./9?HJD8.GO@<358:9:<8/5IX`P8BTZZWOJG>/$/AC<<5.,**,-28:656:==2*,1<BAABCLRE2/45=IG>98788\\\\]^^^^^^_aa```aabdccca`````____``abbcb``````a``__^]\\\\\\^_^___^^]\\[[ZZZ[\\\\\\\\\\\\\\\\\\]]]^^____`cehkmprrqmkhechdZ_`ZY^]ZZZZ\\[Z[ZVUVXWWWVWWWWVUUUTRRRSRQQRTWYYUQONPQQQQQRSSTVY[Y]c^XZ\\[ZZ\\\\XSNKLOMPel]Z`dfhfb\\PHIJKNPPRSUY^^TGDGKNQSOFGQ\\_bZLVXMLIJYgkhdcb_\\\\_abdeggefpxwrpuzwrynas}tosv}}iXXdfbvdV^k_swolnkf`___^]aeddeecdggeddccedbbbccba_\\ݫ]wm^lmphffcjkjnf]^[T_tvromkjkkb|[SYo~vsz}^Xabkviaa[b{ksgfkqs|yqtm[RQW^bca^_`_]YURSTUWVSPOOPNGDLRUWYZXUSQOOTXSPNLKLLLKJJIJMPRTUWXWY\\]`cfdZOPPSVWVY\\]XVSRQMMTYVRQQPMJIGFFHKIHIKLJGDHUZSLHGD@MWOHVW[[TIFHGGGIKKIGLRRQQPNLLJFEFFFFEDEFFJOPLKMOQTTUUSQOONNOOPPLLLLLLLLMMLJIIIIJJKNOJHEYxŠǆJH]ټÅKE>@itg]e{xg]VJCUhcSHqnMDKKLKIGGGFGIIKNbZRQOLJJJINnnXTYY[QHMJL}xSTYYYYZZYWTQMMLLKJJOSUUVY[ZXXWUTSRSTUUUVVVTRQQQQNLMUYUKHFFQ`ZLLLIGFGHIIGHIIIJLLJJIHGFFDFQ_jkgdaeiouqkmg_WMJECEGGHGEFGGFFFGFGFGHHGGIHIJIGIJKKHHGGFMUUTSRTRRWXNKDIyҵ]IFDCCCCCDIQUOKJKICLljmpPHLKIHXJPNQKIGGLKJP_UCADFECA?>?>@BCDGIILLKKKGC@@AABBC@Kcbba_^]hpz{h`\\^^[_eb_``a^aj7577999;=>>==<==>>===<<=>>>>???@A>;:99:99:9:<====>>==<<<<<<<;;;<>><<<;<>>?@@?=====879<@AAAA><9889;;;;:99<====<99@LMLJGECBA?<;89B=6::538;:778886666655446799;:;==957875434689:<><;<:;<?BC?=:?DCB@@@????@????>>@@@AAA?CTc_bceffdccccdddh^A5359>@>=>@BEE?>><<=>??>>?>>==?BBB?;9=@=64699689546788889:::;::;:89:;@GIHKHA;99;:=@@@DKNPVTA7:<;<=?ACCED?:;=>@ABA@@@@?>???=:9:::>?<9778878999889778788776679<BD@<::>GIHHC<777668877766313469;;::<=<>?A@:5344256778988898777;==:8764435AOQME8/-......./0/./67446:;74/,+.212202+'HdW[rtpttpmoiD170.--./20.,+272.01011-)'''((&.@<*'()+,.-,-/2457763,**,...-,,+-01757;?=80'#(00+*,++*)))2<;8622331-++..,-.+-7<60-.0//1=QZL9)8F>0<CA?7/+*+,+*/?B4,((,/20+)0320156792-*)++*(/10?M6&--*-33*4@3,32/./..-(7NJ*9TM524,&&,39731134443015879?A>=;>=6003433345641011232//2101234431/--/0-*+/6:>=:74-).688661,*&1LI0.HUMLI=<A>DHA?<H^`U?,+27:;::83/8;1,6DNONQJ7)$(184.-/-,./+)+--,.4;BC>7*)<IE=0/EI4/79@LL@76743\\\\\\]^__`__`_^]]_`abbaa```````____`bcddba``aaaa``___^]\\\\^``aaaaa`_^\\[ZZ[[[\\\\\\\\\\\\]]]^^^^^__`cehnpqqpmifdb`]cfYW]YYZWYZZZ[\\^a_[WUVWWVVWWVVUVUTRSRRQQRSTUYZXTPPQQQQQRRTTU]d`YXYURUXYYZ[\\]]YQKLNOXZNN\\fec``fcUKHHIJIHOW[afbXNIKNPOIJIANfmXJWYKGIIN^lkeca`^^acdfjkmnlpuuttu}w][cfrwtpqtxydcd\\`ac~zZ`jdzxtphfca`___addbceecefdba`affa^bbccca]kuknehmxuicdjghmf__[]mvpqpnkkiiif{rSZu{{vbUX]^dfcdb]dzÇthqxw{lXS`ljfeb]]_[UUUUUTUVVSPPOKIHMUVTTTUSTTPLMSRMKIIKJIHIJJKJMSVUWX[]]bjpttiZPOOQSVX[`_TOSRRONUYWSPNLKKJHGHJLLJKKIEGISdfZOKNLLNMKHNLNTOJGFKJIHJKJGFIMPQOMMLJGFFFFFDDDDCKSPLKMORTSRRRSSSRPOOMKKKLLKLLLKLKIIIIIIIJLMPNHiҡV@RuƊqC>A;GfmRWytb\\UPV^[SIkjLIKOLJJHHIKMKIIIIfZQQNKIIFCasPVTUYa`SRJEeIKNQTUX]a`][TQQOKJJLQSTVY[[YXXWUSRSTUUVVVVUTRRQPMIIOSNKJIIMZ^NHJIGHIHHIGGHHHIJKIJIJJKMNMJJMS]jmd]^b`][[YSNLHBBFIHFFFGGGGGGGGHHHGGHKJJPPNLLKKHHGGFLTVSTTTLHT`ZPHX|ŦФQPGDDDDDCDGNTPKKIIGEZwoKIMLNOWHLNMHHHMJIM\\W?=@?BFB@@>>?@ABBEHGFHJJLLJIHECCDE@Jfdca^]]biu|rgb]_^]]a`__`abZi:798989:;<<==<=====<<<;;<;<=>>@@A=;988899:;;====>>>>=<=<<<;;;;<>>>=;<=<=@A@@?>=;;;:9:=?A@=>;;989;;;;:::9;<<=>;9=GJHEDEDBA?=:968B=7:961489888886666665445779;:;:76677765444457;>=<<<<;=BDA>:=@@?>>>>>>>>=>>==>>>>>>>?=@Ze`a`afddcbbddegV92013:B><=>@CDA??=<<>>>>>>==>=ABBEB><=;63369::9522467888::99:9789:;=ACDEFA=:<=@@?ADA@ELNNNI;67756:<?AADFC@?>?AAB@?>????==;:<>=:;?=::9899:;;;;:889:8788887667:BGC=899=CING?:756567777764322578899<=<=>>;7467534666789:99989:=>?<:::988?KPRWVJ7,/1231/.///.+0522697520/,+045301/'.H^Y]stqqpnmlY?9777753351+*173474444/)('''))-50*)('''()+,+-02431.-+,3874.***-104:@;542.++,.0/0/.-,,+**3<;86300/+),,----.:>3*./1434;@J\\J,*HJ3+7:?=0,++*+-0/,1494.3::0/331/-,+)%',-*(*+.0/,0BF.&***-110250/1/.--,--1N`J.5F?/,1.),485876543333.+-137??3*.55/)),.1455676443223321330012356644563./6;=??=851.15416=:.))$2SR76NP<;AA??<AE;9C@HVebD=?9536:90'\"(42&.EORUM@5/+',41-2458761(&((')-5?EB2%5MQD.#/:40<A=FL?42320\\]]^^^`bcaa`^^^^__aaaa```````aaaabdffedbbaaaaaa``_^^\\\\^`bccbbbba`_]\\[Z[[\\\\\\\\\\[]]^__^^^^__`bdfikjhea__`_YW]_]Y[^\\[]]]]]_``beeaYVWVVVWVUVVVVUSSSSTTTUTUVWVTRPPPQQQRSTUV^ghc`ZRQUZZ]bb_]_a^VMLMMLLQ[`]Z_dghc\\UOKMMOZdddfffbWMHNXNefFIYneSRUMGIKJSemhdccb__bhmljlptuvvyxs{{^Rfpku~vor~uch`Q\\c\\dvXff]hovm_accaaacfeecdeedddfijfbbchiecca\\X_n}pemigoldggekpf^]^ksomqrommlkkig|}_Wj|}cWZ]X[dcbd``i~skuztuaR\\kprke`\\]\\ZURUXVTTVWSQQNKLSYXVQQRPPTUOLMONLMLKMNJHIIJLKNTWWZ\\[_emxt`QPQSVZ_bdlfSNRRSPPVZVRNKJJKLIHKLKKJIHGHNU\\cf_QNPPPPNIIIHHLLNMGPWUNJIJJIGFKONKMMKGFFFFFEDECBLUQKKMPQOONNOPPPONNMKIIKKKJKLKKKJIIIIIIIIJLMBOlXDLSwnbG@A@:J`GGnsf]V[eZOMcwFINKRSIIJJKPSOLJHIbXPPNJHIGJ^NORKW^]\\`\\OTTGKIJMQSVY\\]^\\WVSLIHJORTWZ[[YYWWUSQSUUVWXWUUTRQPNNJGGJLKKKKJRaXHHHIJJIFFFFIJIHKJKKKJKLLLLOPMKPTk{ma\\YVRQNNMOKCBCDDEFGHGHHFFFFHIHGGIKKPTTSPJFFFFFGNUTTXVMEBCHOKFhȼϔTVJBEEEDCEFLTRKIIHKBGkv`IIOQRSRGJOF@CR]JKYYF<?@;@JD@A?>???AABDEFFEGIKNNNJGFFD?Jhihd_^__epqfdbdc_][\\\\___``_j<8989899:;<=>=>>>=<===;;;9:=>>@??=;98768::;;====>>>>=====::;;;<====<==>?BCB@@>;:9::9;;=A@:;;9989;;;;:::::;;<=<<BGFCACEDA>=;997:C<8;961479888987666666555788:996676656765433359==<;<<;=@DA?;;>>=<====>>=<===========><6MibbadhedcccddegY;02346<=<<<>ACBBDA=<<>>>====>?ABCDDA?=9755679=72345788899:;;:8557<>@BBA@<899<@CA@AB@??ADFFC=<<857:;<=>@ABBA??@@=:977:@A=988<?:9;;:::8899:;=><:878977888876668@EB=9877;DMLLG955678987765420246768979=<8458766655666889:::98<??>=>>==:67::ALWWF4/13321/.//-+-0135765323347:8530.,.*Jlenzytqpnk]D8::;94/3=8,(-49<72210-*('())(-2110,*((')**++-153///./26640,,/1105=@7,)**,11,+03132/-,*(*2:<:95/--01,*0.(+45*'+16<?@AA>J?),>7()4./2,+++*),/0(&4?>65=<3=G<1+*))'##&(&$!\").+3RV?,').0///137751---++,0ESC.*)+(&*.401=A0365420/-,,,.--2?B2((**+*((*-157302211158887640./2579;=@B@838?@??@=979;=:3/6>6()*\"/VYCGRE23975:9<@42=A<1Jf\\WVE3./342/+/?D32IVUQJB:63,*///69<?@@@<6-)-26759?=0/DRB0-+-00=D<AI?4/--/]]^^__`dfdccb`_^___``ba`````aabcddfhggfdcccbbcbaa`_^\\]_bddddcbba`_]\\[ZZZ[[[[\\\\\\^____````__`bca``a`_aeih`]Z[`_\\]^^`cbceefeegkkf_XVVVVVVVVUVUTSTVWXXWWVVWWUTQOOPOPRSTVVZ_``b\\SRY`adlmga_`cc[QLJJKOVXTS\\hiddca\\UOOZeggfffefeYONW[ZTO^si[WPLILLKYiiefgd^\\`ktqjdgqvux{zv}{mp~|mo~~wwudWPMMWabdufSnhahjmc^eeecdeggfeeedceedgqzviaixxfdg^giv{}~th}h^dijknouueZdttrwvtpnmmmntmishZ[jx__VX]beca`iwpkr}|q^WcmlgcXVZ[[[^YWXWUSUVTQOOTX\\[WTOQRKLUWNKMLNQOMNPURJHHJKLOTVW\\adky}zhUOPVX\\aeceohQNRRQPSZXRNKKKKKKIIJKKGDEIXhf\\Z_c`TLPQPONLKLJJIKOUQNTYTQOLHIHDFLMJLMLHFFEFFFDDCBKTPKKNPOKIKLLLKJJJKJIHIJJKKKKJIIIIIIHHHHHIJFF[xXHXKQXCDCC@BODHjth_]\\XQHZvLLKICAJKHKIKPQQOJILYVNPNLJJJIMFLSOQTSQUWS{NKMLKKMPQSTVY[WWUONMORSUWYXYYXWVTSSSUUVWXWUTTRPPPPLJNNLKKKMJL\\bQGHIJIIFEEHIJJJKKKKLLLLKJHILKKPML\\w|l[RQNLMLW_YQFBBDFHHGHHGFEDGLKKKHHJNQSVSLGEFGFIPSQRTOCACCACCH}}USNDEDDDEEFLSRJIIFJG?YoXHLPPNVQDGC8<I_UEQ]E@A>?>?CD@??>>==>=>@CHEBDGHIIHJJHDCALajiea`aahlg```dc_]]_^^_aa^ij5989899999;=>=>>><====<;;:;==<<=>><8678:<;;;;=====>======;;;<;;;<<<<<<>@ACB@>:88::9:::<>=:;:999:;:::::::::;<>@CEGEAABBA>=<;9:7=D=9;96246988898756666655578898855766467654432379::;;<=@BCB?==>>==>>>>>>>=<====<<<<<<<=9Badafkkgdbcccccg\\;/44557;<<=>?ABEHB<;<<<===<=>?ABCCDC@99;868889843457888999::86215=@?@@@=66<>?@@@@@?@@<<DJJIGGHEBA?<<;=>?@>:;>??:65447=@<9769:79::;:98999:<=<;:88887888887778:?@>:87679;AJOLB5365787766643123455683/5941477666655667889::988;@@=?@>=;50//14<GI=1///10/./.-,./023556544<@A>8631//:/,_xhq|usrjU=35651..4B<-'+27:511/-,*(())++.352/./0/..-++,-28:863/-01//--0471.2;:4+('(*-.,)+-3894/-*)*)-6:940/000-*,4.(())().5<BCC?8661/-+'*;5())*()*+*+.*#-5;;9669BF?3('&'((%'*53*+*(,D`J3/-,01100017960-,,++,3D=1+,+*'3<::54<A-)/000.-,+)+..-0;B81-+()*))+,/23/-///2459<<<94/-/48:;<==<;65:??@B=:6;>??=4/7=5)*+\"/[^LRH:37921757;79CEEIYdZQXS?0,*+07=@ELF>EQSJ@;86540'%1:<<BC=;AE</*042;@=FB01<3,21,,-6?<?C>73.-0]^__`achjhfddba````aabbbbbbbbccdefhihihgfedcdcccca_]]^_cfffeedcba`\\[YXXYZZZZ[\\\\]^__````````aa`_`adhlorqmgdc^]][[Z[^_abbdeghkmnlf_YXXWVVUUUTTTTUWVXXWYXXWWSPOPONPQSTUWWVUUVVSQVZ[`ionkfacfe_YRKIJMRRORYaehhggc\\X\\``cefcacfe_RMT|liiSZfj`QNPNMKP[]\\cigccfmqrlcclnpy|ytxxrv{~}{{qZKPPNUae_dprrehbhgg`ahhfeffeeeeffbbfgeiqvuv{yw~{~xxy|uzz{xirnq{}xtnkkkmovvmlhda^m`Y\\TQYcfbajkҳwqfnwpd]hlg`XQX[]_aed\\UVXUVVSOMR\\_\\[TOSTOIKUXMGHNVSMMOSXVNHGHHKNRUVYdr{~tj^SOORSVZ^dei]NNTQJOVVRKGIKLKJIIJJLKEMWR_mg[XXXWQNOPONNNNNIKRQMQRPQORUTNDADBEIKLLLLJECCCEECCCCGPQPQSPNLJKMLJIHHIKJHHJKLLLLKIHHGHHHHGGGGFEELRs֒MOSJCPXheJACCBBEEEPkoc^[TQJT}rIHKBAEDEIHJJKPQQOJHHTQMOONKKKJKLLJUSQGFPMRiPQOMKLLMMMOPPVVSSOQVWXVUVUUUVVVUTSSTUUVXXWUQRQPPQQNKKLLLMMNLKRa[JHIIIHFEEIIJJJKKKKKNOOOOKJKJLNMJFJfqOHLLKLXgidWHCDGHHGFGIKLMMPLKUUOLJKMQSSPJIEEMURONGA>;=CDE?U¹ fbZNDDDDDEDELSQJJIFFIBOcULNNJMWMA;31I`VE?GL?A@@??@@A@?>=<:989;=>ABAAEDDEFFHGGFHP`ghedbcdkke`\\]_a_\\_b``_bc`mi2;:9:9;:99:;<;<<====>>=;:::;;:9;<><8779;<===>=<====<<<=<<;;;<=<;;;;;<>@BDB><:99::;;<<<<=<;;::::;;:99;:::::;<>EMKGECCB@=<<;;:;8=F?:<:52469999997566666666777876546665776555445579::=>?ACDDA???>??@@?>>>>=====<<<======:AZedgooidccbcbahZ4/544469:<>??@BEH=779<=<<=<=>?ABEFEC<36<;877679865567888998885017>A?>>>;89=??><@B?>@A=>IPMKIILMIHEC@>==>?:479:<9757889;;9768989:;;998998:<=<<:88887888887779;?@;89668987=FKG<43566666665521233455@I@847965556655556788999977=?=>@>=;:731.*'-7720-.0//./...-.012446743<A?:6422.1:4'7glcv~ywtr_>3;;300-0@<,'*068200-,+*((*+-./484.-6;7662+*+/28<<:4-,.0-)).49:1-/552-+)))(+-*(+6?@;2-*))((,111343001+(7A6)&)*(+/7=@GD66;3**%\"0@;.,**,,-.-+,.'&*1896798:<3*('),'''/;?B9532BP6,4000,271/01430,,,,,,33//1///2HTF?504;2--.//.-,+**+-/05;72/-+*+*++,.0/,-+(-477;>>;84/.0589740.,.49:;=BE;3/4978?;36=92..$-\\YEI@63:9545329?EQJJhyo_QVW@1.+)+-5?BDJD;DME:876686*+:A>9CJ1)04DH6**(+6@JI4(+*+.,,.,/7<=?>;9422^___bdfjmlhedcaaaa``abcccbbbcddeghjjijihggfeeedddb_]^_`dgggfeedcb`\\[YWXXXYZ[\\\\]^_`````````aaabcccdfhihgffd`]\\[ZYYYXZ\\[]adgilnostnd]YVVWUUUTTTSRRSRTXZYXYYVPOONNOQSTUWVTTSRSSRRRSTZfnpmigfghhg_QHIORPNP[hnolkkhd^TT]dc^`cdccaXLLcbswDG]h_YRLKKNMOPZfjigjkillfeilpxzxwrppmjpxwsw|}zwmVOPQOTae]W`]fyy~z}gdedd`fjhgeeebbdcefedfgdhrsttxyvyjxxurmighlosvupmhfidnܕWOY^WNaidaiTuԲwoj{wyh`qsj_UY_]eh`age\\YXUVVRNQX]_^^VQWTLIMVUHCKY[OIMRTUTOHFEFIMRVWWfow|j\\WSQQSZenldehcOMWNHPVSLGEILMKIHIJIIICQYPOQRQPPPPPQPOONMMMMHMWTMNQQPPRUUQJECEFKMKKLNLFAABDDCCCCEIRXWSOMLLLMKIGHHIIIHHJKLLLKJHGGFFGFHGGHGGFGHJPoHSQFD<78=CCBAADELKYpj[YTQPNiqMJKDABHFIIIJJKNPPOIHGHIJMQQNMLJIIJIKQPNFNNOPQUPOMMMLKJKKKSUTWMQWZZXVTSTUUUUVVUSTUUVXXUQPPQPPPOOKGGKNPPNMMN^_LGIIIIHFDGIJJJJKKKJMNOQPNJJIHGHILLPcqraMJMLMYdfc_VICFGHHGGLQSSTQLLV`aXOKIJMSVTNEEOXTONJACCDDDE=Oö~ha[KDEFFFGGGLRQMKKJGGDLWSNNMHMWE?7,4R\\D@><<??>???@A?>=>?>:99;;;;<>>=??AAABDEFHIP_dfeefghqsja\\]`a_^_`a`abdahjA<::::;:99::;;;<===>@@><;:;;::::<=97799;=????=;<==<;;<=<<<<;<=<:::::<?ACCA:89;;9:;;<<<<<<;::::;;::99:::99::;?FJKGDDB@>;;;;;:;8=F?;<96336988889755775666667666554666678876555545;??=>?AABEB?@@@@@@@?>>>>=====<<<<==>==:=VhedorkedbbcbcjP,15323216=>?>@BE@5148<=<<===>?ACFHF>614:<867648:7666788799899757<@@><<<;:;<==;>CC?@AC?=FNLIEDHHEFGGEDCBAA?:77898778987997768888888888888:=?><:888878999988778?A:896679966:AIF71465666665421133342?alU;68764565555566789999768;====>>=8201.)',/00//////....,-0123354008?934423037/,'Kl_fszwusq`C@?303/0<9,'+.47210--,+))*+-00363-+4;9763,+,03568:5-+-.+((.5;80-.2230.,+)(+/-)/?EB;2-+*+***-/3773//0+&8C4(%))((+3;BKI54;613-*=>4010(4B:99/+672+*048:5-/5520.-4-*'%'*/38::?@302120*0?>60/10.-,,,,,11121157>RaTG;.,8;4/,++,,*))*+,.024620/.-+++,+-.+)(&&,2249==952//14420.-,,18;;9:@?5--/12:CB9699873#*NU?EE8486343008BJSKKiqlro]I94<?=0+5>82<@8:?;8:977997<B@88GF.)/'4UX>*/1(-<@4*+.-,++0//49<>>=<843^_``cffhjjhfecbaaaa`accccccbdefhhikkjkjiihgffffgfeb```befgggfeedd`][YXXYXYZ[]]]_``aabbbb``aaaaaaa`^]]\\[Z[Z[][[[ZYYZ\\`bdghikmmoqsrpj_UUXWUUTTSRQQRQSYYZ\\]_\\SOONNPPRSTVWVVVVTTUTTTST[fnpokgehopnfYOJMPOQV_gmpnjjkfZU[a``abdbafeYKKP^TBO^efURSLOKNNQ[eihhgcfmjgiov{|yfSYhkb^m}zxyzxq]NOOPU`d_\\]]^eag{{}|ygdcaaanlffeda]^babgihdd`grvppgvvrplhefjnoqtuxibyxpo{UZeygKbng`bNsʿϫwnt{}v[i}n^W\\_ZemYSY`d`WUWVTRX`aceg_Y[SLFMYNFN\\cSGKPUWVTQLHFFHLU[Z`kqz~yhXSRSV`io{dfkoSLf]JPSMHGIKMLKKKJKIB<BHKNRSRPOOPQQPNNNMLLKIIP[XNJMOPRRRSSUPJHHNPHGOQLGBAACCCCCECERYSMLMKJIIIGGHHHIIIIIKKKKKJHGFFGFFHHHHJKIIJJE@E^lpONPHHIFDBACCCCACNMXmfRRRNIKQPKLMFBCCEFHHJJIKNPNIHIIHIKPSNMMLKIKGIOPQMRFYӞCPUQPOMMLKJKJJQ[[[HMTZZYWVVWWWWWVVVTTUUVWVTLMPPPPOOONOOOORQOMMN[aODFIIIHFDEHIIIIJJJJKMOPPNKKIHHGIKNMMalfWLKLOYbc\\VVQGDGHJLMQRQPOOKMRZba][VOEGMUVQLPURONLLHHIEDFC<ô}b_MJIFIKNMMMMNPRONOLJIHKKPNLIIOU6>@6IZF?>>=<<<<>@>?@>>>>??=<<<<<<=>><<=>=<<?ABFFHRafdefinuxma^`cd`^_ba`aa__hkE;::9::99889;;;;<<=>@@?=;9;<;;;;=<878:;<??@??>;<=<<;<;=<<<<<==<;:::;=?A@=;8:<;668::;<<<;;;;:::;;;:9:;::99::;@EFEEDB@><::;;;:;8=F?;=:754578899864677666666666555566669;>D76555349<<<=?AABDB>=@A@@AA@>========<<<;==<;<<9Gafgnrleacccdle=-243441,4=????A@61046;=<<<==>?ACFF?65129;975537:86577778889999<AA?<:;=><:;<>==AEB?ABE@;BKJFFGFFEGIIGHLLFDD><<;99:97776766666665667:;;;88;=?><:988999999999766:<988645886633?H>33557756654322222430Al{_>/5:85555555566899975689;=<=>=:4//0.,,,./..//.///.....//1331/006<513334454.,(Bea]iuvtqurTJF4198132,*+-27;9/,,-./,)*,../00-++-----*,.....01/,*+,++-/10.,+.046431/,*,11.7ILB72//0//0/-09<71+)+('7<())(''((+9JVR:,2@A68?A5.5=7%1ZYOQD6>>6-+/26666669<:9510)((#%-430.5:>8-()./:@;30./.-,+++,,/0017BIHDRcaTH6/=E=72000,)(),../12430./11...-,,*(''(*+*),5;94120001//../.3;::;8694.-1335>C?9644;D=&(EPCNSC541-02/-:FKKIKams_829IRPDDSO3&088768=;999:;=<944BN<2:?5(@_XAA@,)2662342/,)05326;>>@>:55``acefedddffedcaaaabbccdeeefgghjkklmllkkkjihhhijkifdcbcdeefhgggggea^\\[ZZZZ[[\\]^```bdddca`aaaaa`__^\\[[[ZYXXYZZ\\\\\\\\^adhijkllmnmnmmnrtmaXWWVUUUTSSTTUUXZ]`baa\\QLNOPPQRTUVVWWVVWXWVVVVVZflkjgacmqppndVMMOQOPWdopjjmmib_^^`abcdddgh\\QQQWeaTNK[jYYe[W[WPORYdijicdlpjhr|}tppkhfah}xxzzZGJNOQV_ca_^_`O}ɐnw^u{~xuzfdcbckpjeeecbb`abbbbbcfhjnklx|{tomkigekolmptxrjp~bXmvz}wz{eZgjd^[Isϩtrg]us\\U]a\\ahaXONX_]ZZWX_fjkmrrbWZPIIUUDOegXKMSUWVUUSQPMJJNW^_es|ufWQRSX^^_wtchij]ZrdLPOKHILLMLKMNHBIPQ\\e_SSTPNMNMMMLLLLLKJIHMSYZWQMMOPONQRSROLGFLNFHOMIFCAABAABEBBMUPJJLGINHHHIJIKLLLJIIIJKJIHFDCEFGHIIJJJJJJJNLB775?OLJLHHJORHACDDE@<MJV]XPPPLIIIHKMLJEEBCGHGGIIJKMLJJIJJKKQUONQQQMKIIJORSV<auAZWQONNMMMLKJKJTh[FR_^[[YWWYZZZZXVUSTTUVVVTJJPQPPOONNNNPORQOMLMSdUDFJJKIGFFHIIJJJJJJLNOPPOMMKIHHHILMMXz}l[OLPY^_WNLNMIFIMQSTSQPNNMLRVZ]]`hiYIAFSXURPMNPONLGDDCFF@eāID@BEHHLRTSQQRQPPPRQMLMNPPOMKGLUTKV]`dWC=>>==<<=@B@@?@@A@@?=<;;=>==?@=<<<=<;=?>BBDIVcbceinuxoebaba^^`ca``___coH89999998888999:;;<=?@>=<;;>?>?>@;678:=>?A@@@>;<=><=>=<<<;;<=<;;<;<=???<87:@?8679:::;<<;;;;;;;;;<;:;;;::::9;ADCBDD@><999:;;;;8>G?<?;974457799844677667766666655655668?EO<544334678:;>??@CA==@ABABBB@>===<<<<<;:;<<;;;<>>LaikplebeddicG0333697326>AAA?>9101469;;<=<==?@BEA6241277874436::5466778879::<?@=965:==;==>>>?BB>???DCAFIEEFEGHJLLKIIHD@><;<<<;;;:877666655778;==?BCD@98::<<::989999999999877778986666535611?F;3566666666652012365->o^B847854555555677886348847>?>=9520-++,,----.../////////-023568:<:31225752.+*1C[f^equtqqfXSG6299312/.,025B;-++.23/)'*-,+*-,*('&&%&(+.-**--,**)))*-11+'(()-689863/*().02?NI932224335:866510+'(&*<@**,)(''&&(5K[L,/GB239:0.:A/''Tqgf`F>=3,.012047:88::73/2)*-+<LO>.,*,++*%$-;A3++.-1.,()++,-0-5EQVWODHVehZG>JXWQKID8-*)(+/014620.-/121110--+,///-+)'*28500111//0000//5<;874471-29;98<:45973=NM7/8PWTURA0++-/.2=EDDJJOguzvU54ALONPYbR0%+4876=A=;;;<:77968ED26BC>+*G]WG9/64.5<;752-')1337=>>A9257abcdffb`aabdddcaaaabbcdeefgijkkllmmmnnmmmllllklmnligffeeffgggfgiiifb_]\\\\[[[\\]^_abcdeffecbaaaaaa_^^\\[[ZZZZZYY[]_`acfhhhhknnnooppoprttog]WVWWWVUTUVUUVX\\_`_`cZKJNOOOPSUUVWWWXXYXWXWVUTX]^blof`fmnopkaVPPPOQ^mnhkmnnlha^^_bcdgghnlaUOLP]_QMesXRlldjaQPUTWakojgksplyxw}ngeenywm\\bPIONPRW`aaaa_\\L{mJx{exdnutuupyfdcbfpohjliefgecec`adjmlllnqg{rnlkjikrxuonopwk`fgdfo|wljgb_[_UnӨqsmdow^Vbljeff]YZYZXTTV_hmlljii\\PQNGPbPKhlYIS][XWUTTTTUROPRVXZ_qxl]OMOOPSTdkcefec]\\eWKMJLIKNNMMMH=Ba|uj`SMMKKKLLKKKKKJIIILQRSVWXTMKMNKJMMMNNMH@CPMCINLHD@@@@@ADA>EKJIKNKTWIIJKLOPPOMKIIIIIJHIJHFBBDFHIJJKKJJJIKLJJJ@@FKLIFGHDAAEEEHKI~cSUPONLKHHJIKMLKKIFEGHGEGHHIKJIJIHIIKQQMMNPRRMMNNOQUNEj_Pk]PONPONNMLJJHJtcITYW]^[WVYZZZZYWUTUVUUTXVJIPRPPOOMMOOPOONNMLJM]ZJIJJKKIHFHHJJJJKJKKLMMNONNMKIHHIJJMLmxaRSX[ZUOJIMPKKRXWRSRPNNMMQRTYY_mtrdM@EOTSQOOQQPQOKGFFDCnƽòX>GDEGHJNRSQOQQOPPQQQOLLMNMMNKJTXQct}ucOA?>>>=;<<@BBB@@ABBB??>==>>>??@>>>>?><<=<@@BAG[eaccfknjfdc`\\\\^accbbbccclC8998888878889899::;=>=<<;;>>?>@>:768:<>?AAB@=<=>>==?==<;969<;;;==>??>;879>=:99;;::9:;;;;;<=<;<<<;;;;;::;:;<BEDBBB><<;:9::::;8=F><>;:95346789844677767777666656777666=HI=62334579::;?@?==A;;>ACCCBBB@>>>===<;:;:999::;>=8J^hpnigggkiD04667;?:88;DDAA@<5123458:;<====??A@:33411358754459:755568889;;:<=;:767989AC?>>>@?===;<ABEIFADEFKQRPLFB@;87779=>==><<97877665679=DIJKJJH?9988::::89999999999989:8899887664236404;?;5556677778841113694.DqiQ<038755555567777736;3).:??>9540++,+,-..//0/./0112352.015;AFFB:42015731/*1DAFb^_nuupljT<8544379951.8:181(***+-0.-..,+,-**+)((&&()*,-/0/,*))((*-14/))').:?=92,**()-/8GM@0/334458>KKC910/.+*(*?D/-+)((()&$$(M\\7+4...,.*.9<'''9oqrkO963,-/-,*+-255451/02/20:VR@0+,,,,,+*)-6D<61135,*)**,..15L_c]VNG?=ZobQGXtwi[TH5++*')-1696/--...01120.///561-**+,142/12111210/--03662/17=616?>:98415:94<PYO@6NbYPVQA962/4:?@>;DD>JUclT99DNPQRX_L,'*3>=;CD85555403<=74.+0466-'3NXM@7:6,3>;575)%,0005<??=1(04abcccca___``abbaaabbcdeffgijjlmmnmmnnoooooppooopqomkijiihhggeddeeedb_]]^]]]]^^_abdegghfedcba``a`_^\\[ZZZ[[ZZYZ\\]_`aacdfhjmnoqrstttttttrlaYXXXWUTTUUTTUVWX\\_acXJFJMNORTUWWXXXYYYXXXWVTONRYfpoh`YTZagj`UQQQRYbefmpnnnmid_^`acfhjmnkfYOQW^[Tkz^Qgpjoq]Q^ZPU]gnkknkhjfjvzrjndcqn]ZXXSSSOQU\\aa`_^]YS[^TTYj~sThvzklxnimphpmedfc[eklqskfdggffccimnmkmojf_d|~uklmmoutnpowv]NOTapvyy{|~na^_^cajڬouvjnkzs_Vd|zljh^`hbTNRUSW\\]ZXUNONNOII^^Oes[IVed_[YXUTUVTRQRRSRQ[prbWKJPNLXbbTQegeb^[ZLFKLKKLNNLMJ@Ml~fTMKKJNNMNMMLKJJIFFFHRZVRSTRNKKKKKJKKKLLJHC=FQHCLNJGDA@@@ACA=@CILNNNMLIIJKORQPOMKIIIHHHHILQRMIHMNLKJKKJIIIIHHGEFFEGIIGFD?>CMIFO^a~eORNLKKKJJKMMMKMMLKIFDDDEFFFHHHHIKMOSSMLLKKLMKKMMMNONJ{OXncROPPPONMLJJOKkwJM[_^\\YXYZ[[[[YWUTUVUVUYVKHMQQQOOMMNOONMLMLLJJU^NHIKLMLHFGIJKKLMLKKJJJLNNNMKIIIIJJKNPnl_\\XTRPMJKRYSQ[XQQONMNMNONPUXahlqujSEFMPOPPPPRQQPMIHDHĸÝIEGGEHKMPPPPMNNOOOQUVSOOMMLLPLO^NCUw|gJ=@@>>><;<=@ABBBBCDDCAAA?>>>>?AA??@@A?>>>=>?@>>Reba_^ahifed`^```bdeddeed_=<:;:::99988888889:<<<<<=::=:<?@9978:;=?@AAA?;<=>======>=617;:8:=>>?<869:;;;<=<<=;:9:;;:::;<;::::;;;;;:::;;;BEDA?>><>><:::::;8=H>:=;9:63356677634577777776666678986679@=;9522478:;;=?BB>=?:9=ADEEDDDB@@@?>>=;:;;9733567>>;Jcqqnkihoc52658=C?;75=FA<>@<41466689:;<===>?=84344221467654567:855689:<<;:::9878986:ED?>>??=;;:9;>@DIFBDINQOLIA<;9767779=?===;;:::997576689@HNLGF@989989::99999999999998999::::8876544555208>833477678887421354542Ju~rgI05:7555667777883:HB30259:753/**---..//00//110127;710/14?MI<87327:=<83.>L92L]]kvxoh`@,.10-3=?<4/3?@3/.)(''')/4871-./0-+---,+)*)*.5651.,+*+,.-,.20*(*/;CA:0(',,,,2@KD<=5/.025>MWXOB70+)))**:?0,++*+.30).%,F1$*,/.+*&-:5*)23f}kN@512/.-+('(*/3687412.375LcI1*,-,-*)*+*')1:?AAA:11220-+/3H[c^WQOI8+NmaNB[vaQ<+)-*'(+0684-+-...01220-,,,1342/--.01//1236778850/320,().6;747=;9:9457400;HQSMA>J\\\\W\\[SH:5<?=?=5:BA8<[raC;DJPVSScU3)(0;::CB0')++)'*26412321221+4KUTNJI>5884263)'/3/,*,7=80*+0`accbba`^^`_`a`aaacdeefghhjjklmnnonoppqqqrsttssssrponmlkjihfecbba``________^^^_abdfhiihfedba```__^\\ZZZZ[[[YYXVWYZ[\\^bfhkmnprsttssstttuupf]YWVWVVUUTTTSPQYabffXGFKLNPSUVXXXXXYYXXXXWURNMPOScqocVLKRXXVSRRRQQU]kqmpqnoldaaabbceffhpp^NMX\\WhxlW`nmyr_icPQSXfmmlje\\\\eikrz}}nowkirtmfWWYZYUQW^a`^]][ZXTQUYURQXhsz|_ajkjvplqunc_cdefbTMdyutuhdhihgehpqnlopm^Zcfbqzs}xnknpuwrutziUW`strrsv{~sc^``ffd߮nrwpgdto_UYr{vthZVWV[`aaVLLKKKJHFINOGWjMT{eJVmndca]XUUVVSQQQQRQPYo}zgYQLPRO[e\\MGJXimiee[GDLONNNNMQE@woh\\MBDMPOPTSQPOMKHHHEEFFHPWVSRPNKJMLJIJJJKKJHIF>@NNCFMLJGDBABBCB??CLRPLHFHHHHILOQQONLKKJIHGHGIKNUZYXYTPNMLKJJIIJJIIHFDEEEEDDE@DI@ESabROOONLIKLLKKLLLLRPMNMOIAAEDDFKNORPYejjc\\ZXSTTTPJFGHFEDAH]li\\USRPONLKKLMM|MPhUMPU[[\\^^^[VTSTTUWVXQIGKPRPOOMMOOOONMMMKKJO\\SGHMNNMJHIIJLKMMMKKJHHJKLLLKIIIIJKINIGa~wdXROMMLKRb`SRUPOMMNOOONKJNV]dedhpkXFEIJORQOQPOOOMLEGYWQHIILNMNNMMONNMKQ]\\VWYXXWUTMT^IBHe^H<@B@====<<>@CDDDEFFFEDDB@>>>??AA??@ABBA@>=>>?>=Nddb_\\_ggeeddcec_`cfedde_F:?==;::::999889889:<>>>>?<;;8:@@9778:;=?@A@@=;;<=<<<===>=95:;9:<=>==936:;:99;=<=>==;;::998887779:;;===<;;;;<CDB?=<<=?><:889:;8?G<8;9885434343333246777766666779988667857:97534789;;<?BDA>?:9<?BCEFEEB@@@A>>>=;;;<8212349C?AYnrokikqX4777:<=;625=A:57>>43466668::;===>?;42454421465664346;:55789;<=;8777778:;88@A?>>>>=;99;=>@DHHFHOQKCA><<<::;:9789::;;::<=<;;96756658>FD>=9899:::9999999;:998788878:::::887655544432165434777777786421456;;0FwsO2285456667767624J]YL>665443/*),---...//012/-..3983/.,+6HA4555>HJLI<5@K@5(6W^iv|r^A+--/-+2?@5-,:FE<341*)*.357:73/.153..121.+-/15;<:72-,,/12/+)13+)*/=D?6-'(.1.*0CK;,)))+04?JWQLA=3+&&))--7<4-+,,-079-6@*1,(230171+-1,+09.O|Z2/0//..-,)()*-39<>;50.48E[V<-+*()++**+(%172.9736I?32/-*+-4;BHE<95+#@e`H:]~^3$+-(&(,/12/,,.../12220,+-/.07;70-/1/./.07<;<BCA>;50+*,-/2335699:<:6682-2;>>KTL98Xlb_`[PBAD=;C?7:A?7?^rdD7>?:IH<PY>*,21/4=:,('()&'-29ACDEGE@==7AQSLEQYLA=4-.//-+.8>5(&-1232..]^acbb`__^_^_`_abbdfefghhiklmnnnoppqrrqqrstvuuuuutssqpnmljigfcbaa`___`aaa``````bcdegijifeda`_____]\\[\\\\[[[[YYXVVVXZ[]`dgjmnorttuttsstttuurjaZUTUXXXWVUSQQW`fhkjWJLLLOSUWWXXXYYXXXXYZZZVPOLLR^r}n`SOQSTWXWSONRetnrwnnojhhgda\\ZZ^egjl_QYmtw~z_\\p{xznVT\\\\Walmqogbcdehilowzw~wnt{{o^\\Z]XPX_^]\\\\\\ZYXWXWVVUSX[Uan]_^Z_flw{~wnfacegdUP^wnhlljhimpqopqlg``dgg_gppuyuwwtno|uswvo[chhacqqglob^aail^ըkotieimov}xdUO\\kuxj\\b^\\nmWRc\\LLLMMMMNMLL]bJZlZ\\qskhffbYUUUSSQQPPQQQTd~~gVNNRO^p\\GIMKJ^okjhSDR\\UROOOMI8lfBMKNRY^`]XUUTQMKIGHGEEHIIILSVRNMMLMMJIIJKLJGFIHCAGNHDHJKKMLFBBCC@@DKONJGIKJHIEBIPQPNLKJJJHGHHHFBIZda[XVTSQOLLKJKLLMJHFEDDDDDFCYidSQV[SMMMMMJPRIIILMMQXRJNNdYCAFEDJW[ZZW`lpmigca\\`mvreVMJJG5JsFWfolbXTQPOLKLLNR|WqcdMFPY[]^``]WSTVVWXYVLGFIMOPOMMONNOONMMLKKJIVZKGNQPOMKJJKKKMMLKKJHGGIJJLJIHHIIKJJHBI\\nzfUNKJJLMT[``OINMLMMNOOMJJJRY_a_^dlj]LFFLSRQONMONNQG?ȼsWYNHHHHIJJJIKKMKIHOXZX\\_]_^[WW\\PGHFLH<>@@>>>=>>>@BEEFEFGHGHFDB@@?>?@AAAABABED@><>>>=;Offfcbeheccbdefc^^chgeeaS@=A><:;:;:9;;::;:99:<@??@A?>;:7=<97788:<=>??><;<<<<<===?>?=<><;=<=<<;968:99:::<<=>??=;<;98877788:;<=????>=<=@FD?>=<<<;;::999::8?E97;8765423431133456667777666778877778888987644578998=AB?;;9899<=@DEDDBBAA@@@?=<<=9423346=AAPnunigmmI4996988832577525<<4566666768:<>=>?;53445421466654345:;65779;>>:8655789;>;9=@>>>>=;988;<=@GIHIJIC<89;=>?>??=;765558:99;::9:955555668<;78899::::999999:;:886677678::::98866655443440/244589987777753125:BA0(KzyuT008445656665431:See^QFC<52-)*,--.../0/00/+)*+-3740/..2:80119LVSMD7>PF21,2P^fu}uP1,*.44,,;=0'+9A@=776202:=731000./32..///--179:;<;:6//02221/-00+)*0AD8-)'*02.)-?B1&*374-<PYWA4-3/(&&))./5:5.&)+,+270-EE3:2143680-.*',/+&/b=.*-...-,,+('(,/24872/867NV=531)'(+/10,/;ME53;2+3M@*)*/7;424587,',,'5R[G7cV1*/-*++,//0/./011134331//4600:?90//0//-,3=><>AABFD8.*4A=3110137:<;:8:=<=?>9<OVTQPXfhe]QNLJF;;D@98537CW_K7555671$,>7,073/4:6.---,,6>@ISOLOTRI@CAHQJ<9NWJA<3*)-/01/9LE/'*.144/+[\\]`a`_^^^^^^__acdefgghhhikmnopopqrsrrsrsttuuuuuvvvtrrqonlkigdcbaa`_`aabbbccca`aaabceggeed``_^___^]]]]\\[[[ZZZYYZ[[\\]`cfiknqstuuuttutttuuvtof]VRTY\\ZXVTTUW^dfhkeWQPNQRTWXZZYZXXZZ[[]^^^XQOPOQ^nw}xkaWRSY__\\ZXS_sootjfjkmomjfaXTY__^ehcgu|qhx~~yiXZj[N]adorjfggfeeiyxnw{sz~}j[X[VY]\\\\]\\ZZXXWUVVVZ`b\\Y]^]]\\XTWbgiou{}gbfgb\\^Zdvklmkjoqrssrmfdcbdglpgmtppsssw|xom|sq{cTbaZdrjadedafnszg˞grr_jrmlklste[_abcfjltnc\\RIF[lTHQOMMLKLKJPQNUeqrppmkiloh\\UTQQRQPQQRQQfoXOOKVykHHLNKEPcfk`FLgm`SMOPJ?erMX___`_][YVTSQMKJIHHGEFJLGCKTTRQOMLLLLJHJKJJFDJLHC@FMHBFLQXYPHEFEAADGIIHGGHIGEABCJPOLKJIIGGFFEEECAJ]g`YVUVTTPOOMLMMMLJIHBBBDFEGilTRQNKLLLLSVQHHLKPPPWXKIM_aOGHJJOY]\\[[^addcb^^ber|}wm_MQQ>fUPU`imi\\TQPOMMMNOR[aTmjPFKTW[]^^\\XUVXYZY^SFEGGKOOONNOOOOOMLLKJJKIM]RHMSSPOMLJKLLLLKJMJMHFHIIIIIHIIJKKHGGEEQcjaTJJLKLQVVTXVONMKKMNNNNLMMOTZ]]^_cimdSCBLQQPNNMLMSPFWĺRMKHIHGGFHHHGGFHHGFHMW\\``^\\\\WUTQEDAC==@@@?@@>=>>?@BCCDEFFGGGFDAABA>?@@AABCCBDD@=<=<=<9Jafefgijgdaacccb]]bhfdi_@>AA>;:;;;;;;;::;:98:<??@AA@>>=567787889:;=?><;;<<<;====?>?>===<><==<<;:;::;<<<<<<=?><;<<9778:::<<>@@A@AA?==>BGE>>?>=;:9:8989::7AMECH@<BHJLJF=33433577887776667777857788999876455567627=><99888679;ACCDDBBCBBA>>=<=942333569:Ggyshfl]94;9578864233322364356655554358>=?>:755554434566655437<;669:<?>964249:;=?@>??>?>><::88::<BKKIF@95688;<=?A@>=;:97437:778887765556666676567998889999899999866777677988998866654555431/035689876665555106:@>6.,P|}}|T2374455556656626I]hc]]L5,)(*,-./001321/,++,./38411110000/0AUXPB8>PM8,/33I]et~yN21,298/+35.(+./.0135238<:3-*()/1.,++++**+-15:>=<:86203311223.**((2CA4,)'*13,*3?;/07AF>7FN\\I2**04,$%*).-453/)141+2;5'2K6H=*,/25--*+0-,'$+>,**,.//.*(**++++.0140.24=IF=>:2*),-/475D^T5:A>;><@3&)--1>5)++,.8>EHB@IZM6jR--.--33-,//01321/02245442342.3;9201..0/,2<><:8653<B=4,9NI;984238:99:>BCJQOFAJTTZcb\\\\dmaJLQF=<=<830048=HF409:7B6'%'((*,130251/..-,8FGISQGBISRB49BLL8(0CH<564,+021215BH7%)540//,Z[[\\^^^^^^^^___bdefghhhiijknopqqqrsutsssstttvvvwxwvvtsrqpmkigfdcba__`abcdddecba`_^``aceeeca`_^_^^_^^^]][[ZZZZZ[]]]\\]`befinstssrponptuuvxzyywrk^WVWXWVUUVWZ\\^`ckg^YTSRSVXZ[[ZYZ\\]]^^`bd`VOOQQORX[bjg]TRW]_]]][[a`^_[Y_eimnmmke]ZYZ\\]`fkijrv{~ww~|ywvuxr\\QilSOQR\\ehigggfdgnlber}|y~rcWY]\\\\\\]\\ZYXWVUVWW[_]YYYZ\\ZYWUURQRVc~kcfdbbaWSgszxnlnknvwxxznigecdfim~{{m}upqsqpsxwvuvonxxTWXdsd[ca`_^`fkrg{۷}j|w\\]hnjnrohaVXjsw~tmgfYDCLKGbfIKNMKJIJJHFKSThx]akotvrm_UTRQRRRSTTRQomXRMLn}RCOKKJGJUbfUN_llbTEIOEXjRkmifa^ZURRQRQMKJJJIHFFFKLFL]\\STUQMKLLKIIJKKKGBHNKE?BNLADLQWXVTROIA?BEFFFGIJJH@BG?CNNLLKIFFGFFEEFHFDN^c[TQRSVVSQMMNNLLKMLGEDDDEAMrbWPKJJLKKKTVNIEIMJQQLWQJSQNMKLMORSUVXZ\\`ca^[[]_emj`\\\\ZOPWTTWZ\\_gg^TPQPOOOOOPFJNOY{WEGJQW\\__[WTUYYXUWLCEGFINPNNNPPOOOMKLMLLMKHWXJLTSPQOLJJLLKLLLMJTOIHIIHIIHIIJKKIGFHDESbd[LGLMNSXXPOTTPLKKKMMNNNOOMMRZ\\\\]_bekhT?>JRRPNMMNQSLOaFIFGGFGGFGFFFFEEFEEBGU_aa`^]TRIC@@BBBA@??@@@>=>@@BB@@CEDFFGIHDBCDB??ABCCCCECCC@=<<<<:9F]edeehllgcba_____`d`]h]:>@BA?<;;:;;:9999999:;=@AAA@=?<755688889:;<=<::;;;;;??????>?>===>=>==<;<<<<<===;<<<>>=;::978;>?>?@ABBBBBB@>=>CGE?>@A>;99888889;7E`a^_XWcr~zl[LB:643335655666677688656787898875545654348;988888679<ACB>>@BCBBA>>=<=:4344344536PtyhhgI/377899876444432212346555432236==?>:765666665466776423:<65:;<>>94336;>>>?A?>>??>>=<<:9::?GLKE=525998::;>@@=;<>>:77:;9878975355556666776687766777788999988666776678889998767665556443225677875566435;837<?;900[{W3.444555676685-.BZcbYD2*''*,.//123441/./12235663/.//002/0G[^N6:OL82234.;WerwL42/37630-12,)'&%&(-41.23/+)(,38620.,*-0.,,+*6CB<62320250/3111.-,)2?91-*'+32,1;;41<DHIA?NEP7*,+,64&*,(+1<31JWZG6*-;>+#52D;&%)+-+,-2:0)'(*+++*-0330*(*042+',340,/589856<:3*(-.-2?DVqJ4279AB:-)*-,*3;7:L7((?WUJLJI[T<of#\u001f***1;;2/000131+*,12221/-,++,254/01..1/2<>:73110-08@:-<PNKI?;87646=CIJGJMOONOMNTeh_X\\e^FBI?799228:<?948;67>@<<6,**)''(+,-22-+++).DMHMSE75:FJ:+-6?:(%/9;4-01024432201=8&$06641,Z[\\]^_^_`_^^__`ceeeggghiijmnoprrrsuvuttsssstuuvwwtqssrqqpnlkhgfcba___`bcddefedccb````acddca`_^^^_^^^]]\\\\[[ZZZYZ\\]]\\]`acehkllkjigfehottty|}}}}{ukaXUUUUUWXXXY[_hme\\XXVUVXZ\\^`a_^_^_aehfd_YURQRPMMNRVVSRSTVVVVWVQPPOORX^`clpooolf`[WVW\\cggecekiiv}zwssuvl_iubNOPOS^`_dgfbbgigkfiz||elueZ\\]\\[[[ZYXXWVUVX\\_\\ZYX[ZYXVSRRTQRbhdfeeb]UQMWimmponu{txzjhheddhkozoDcyopsuqmmsxvnt}tfp]RXdkXRWUUPSRQPQVQOWu~qc`X^ljkrpeVLMSYevdYMHHJMEIlfEKNLKIIKOLIOQVtbV`euwbZWTSRRQRTTTSRQljTPKVnaFLMKKKIFOaWObhfe\\OKLFSmdUX_de_XUUTUTOMOPOMKJIHFHIJKO\\faZXTQNKLMJHJLMMKHCDKLHECGLEEKMOPPUYZRF?@ABEELTWRKDEEBACJMJIHFGGGGHHHHIHITa_VQORTVUSPNNNNMKMLMLJHFG=?WRQTOMKKGNIMNOMIHEKISYKQRNNMMLMNMMNNQTVXZ_a^ZXY\\^baYRKNRTXX`\\WYffhg_WSRQPPPOOOPNPU_okPEFHLT]a`\\WUUY\\WOKIEFFGIMNMNNPPOOMLLMMMMMLHO[QKSSQQPNKJKLMLLMOKSQKFIHFGGHHIJJJJGFHIEMbniXIHLPTWUPNOSSNMLJLLNNNPNLIHSZYZ\\^_ako[@?OSQNMMOPQOLOyþVEBBCDCDEEFGFEFFEEEECBER^ab`\\TJFBDCBB@@@@??@@?=?@BDFA>@DGGHHIKIFDDDBA@BCCCCCFEBA?><<<<:7F]ecbbhpnhcb_^]]_a`b\\Zf_>?@BEEB=;<<;:9:::::9:;>@AAA@>>:86568887889;;:;;;;:9;?A?@@@?>======>==<<<<<><===<<<<<<<;;;;;<?CBCCCECDDFEB@?>@CFC?@@B>;:989:9::;8Hfhaa^`iuvlea]VOOKB92123455566666667789988775545665657:9899988;=@BC@969=>???>>=<=:534445665/;_pji[6/258<<9899755543223234555322235:<>=9875666776666677642698579=?<7456;>@@A?==>==>>?>>><:9:CHGD>7457876899;>?=<<=>=;;<;<:88974445456666776765556666556766887656666678888899887777778766446645776787444A=069:@=4,3bvxyU.-54456666554108JbmR1-.('(*.0123343212476443464//110130.<[hJ5IK3-3644-2LasrF01054432/11-('('&&)366420--/5==6442-,062+*'&4HF90*-33498460-454722720/,*,24368622@HB9//HL@,)+*).73/.)(8;)&Cl]3)**1:1%%.:3''*-../06<0&(),,,+,04640..04676-(-2/+0=@7/.3896*(--.1BOkl<1(1;?62**+(%3HC;hM0-/FL4.24CIAtC(*)+6=>??<987530.-/340/.-*)+-/010/00-.139=832/033/,-20/J\\VWSF<7413?MTXSHC?AQWPLKI_obYUQRF9?B=955@MOLF808BDD>631/*()*+,,.5<>:5.*))5GIJTN=:=;6640./1/()*.698620244455,*3:/-:LUI9-[\\^__```a`````adeefgggghjlnopqstttvwwvutsrssqqqonliiknooponmkigdca`__`abceghgggfedbaabbcddaba`__`_^_^^]]\\[[ZYXYZZ\\\\]_`adfecbbbbbbbcfjklprssusoqnic[WUUUVXXXXY]^_]XWYZXWXY]djh_\\_bdegfeedb^WSSSRPONNPQQQOOOPQQRPOPPQRUYZY_koopssplg_[[^aa^[XWV\\p}|yy{~~urugTSWSU\\]XZchfdfhhkpgidOHNhzm\\\\]]]\\[YXZ[[ZXY_cc^YXYXXVUSSVURTfgefhfaVUUP]khkrssvtq{qeffdcdjosmiumTLvyRUft|}~zssrsvzzsmoruvssyyqqaW`YUVSQOOQRRQPNPQQMHPjspf`eflsps|hVTRPQPKTqeMKKJJIJJBWvaJMOKJJLNNHGKO_~waYN]eTQSRRRRRRSSSSRNcmSMN\\]LKMMLMMKJQXPXfbab^KVWPea]_][_[POSVWVTQPPTUOKJHFGKLIJU\\Z[[XTPNMLLLIGILLKHFEGJIFDAHLGIKLNMMPUUOIDABBGQWXSMKGDEBCHIGGFEEFFEFHHHHGGN_b\\XUQQRSSQOMPQNLMMMLMJOLEJRTSNMMIMUQKHOOLIHKMOSVQRRNOONLKLJJKKMQTVX[][YXWY[YRORQOPWa]eq`W[ecdijh]TQQPOONOOOPYi~rLDGIIR]a`\\VTUZa[MIJIHHIJMMNOOPQOOMLLNMLLLJHGUXMPTSSRPMJKKMLKMPOTNE>DFEEFGHHIIIIHHHHFGVmun^OJPUSPMMMORPNKILLQPMQNNLDGPVWZ[\\^anu]FGLQPNNNNOPPFPy=HFSQPPMJHHIFFFFEFFEDEFN\\aa\\PFCBACBAA@@?>?>?==>?ADFD>;?DGHIIJLKHGDEDBBCCDDDCFF@?>><<<<<7?Zifabjrnhcb_^]]\\]_b`_f`<ABCEGEA?><;:;<;;::9:;=@BA??>=<9768:;88779;;;;;;;:99:<<:9;<=<<<<==>>>>>>>>>>>==<;;<<;:;;;<=>@CDEEDEEFHIE@@@ABCCA@ABB@=<;9;;:;::8Jcb\\\\Z`lqutj``addguyfO@8654566666666778:;:8886655688989:9:9999;?A@@@A:4588;;<=?><><64445556400BaofK,13479877<><9756521344444444443568==987777876677666896216:779>@<657:???@@><=><:;?A??@=978?@??;66875445666899;;==<<====:8543345455446677656765544543434555553344555676788888878999::999887668:<<;96659824617<81'@upwyT114355565425<@?>Vs[*(53,),/2444443446:><96348835643332*.We=9I6+1122224AZs{g=*/29645622/,*)**+++.8<9650.26894231..01/)('(7JB3++033:>??6.+588>>3/1320..18;85325DF7+$*?E3*+'&',51.,)0B4(%.`F.*,+)-.*&/82+++0/..0671)()-.--/3221/034457;8,(+..3>B91269::/--151:P~W3&2@A92-*'&(0?C;3cn:,0)/;0$\"!&-;T791((?J<:>967876579>@85640./2221/./10-068:8553.0230,'%$.Rhc]WQ:(*0=LVYZSF@;>R[WURN^lc\\SHIH@BF>55>HLIA6/8KPPPA1/.,)))*,-19@?937@:87<BDKM?7<E@,'13-*/0,)-3=GHB6001/-+-/7BC:JPC;5-*]]____`aabbba`acddehhfgijlnprstuvvxyxwutsqqpmljjjihfhklnnmmmkihecba_`aacdeghiiigfdcaaccdeedcbaa`_____^^]]\\]\\[[[[[\\]^___aaa`abaabbba`_`abbaaca]]_`a`^[VVWXXXYZYYURTVWXXXYY]fh^WZ`hjc__cfeca_YTSSRRRPQQQQPOOPPQSRRRRSRQSUTTYciknvwwuqojgebaaaa^bv}|}||trm]WXW[be]U\\lqkhhilqki}oPMLPpl]]_^\\\\XVReugYZ`cb]YWWVVUTSSTSRTWdgjllcWXWTcqmhpwtqtzzicbbb`dmqteXdSGan?CFP`bee`[WXfnmpzyx}}zwttwvuuvww[TWRRSRQQSTSSSSSSSUTQCOke|weefmyoSQSRQSUSQTPEHLIHIIJGBXp_LJLKKKJJIIKNNgsj[HQUSVVQQSRRRQRSSSNVmQPX`TLMMLMMNOQTNXfa_`aX[_W[Y]b\\ZYXPKV`aXTSWZVSTOKJHEHJHNNLNPRVYVQNLKKKJLJGFIIJHCDD?>?DLJFHJKKKJLOONKGFEGORSOMJGFEEILIFFFFEEFFEFHHFFFJWac`XSQPQQPPMMRQMMMLLLKOONNMQPKKLIOlYLONMLKKLNOMNPQPNNNMLKJHHJJGHILNRTVVUTTTRQRPMLQYb]fdZYTNO\\hnf]XSQQONQRRTd{~SDJKHP^cc_XUTZ`UKKLJHIJKMMMOOQRPOMKJKKJIIHIFLVNNTUUTSPJIKNMMOPOSTF8@ECDEGGHIIHHHHHHGFJYlvymVOSSNKKLMOOMKIJLPPMONMLGADMTY\\]]]anoZIIPRPPPOONMEDsĿVEUgvme`XRLHIFFFEEEFDFGGM\\`YPD@@@@BB@@@@A@A@?>?>>ADEA>==CFGIJKNOKIGEECDDDEFFDFGC><<<<<<=::Ngicfmomieb_]]^Y[]ab_bX<ACCEEDBA><;<====;:9::<@BA@>??=<99;=>=::99:;;<;::9877776579;;<;;<=>>>>>>>>>>>==<;;<;;::;;<<>@CDFEFFGGIIC@ABBBCB?@ABA@><<9<<:<;:;K^b\\WU^lpngda`bbdjv~pbM<6356997566668779::98565589:::::9:999;>BB@>@A>956778::=>>?>943335665426Wq_=-566555558@BA<78532344444444544546;<988888886777557998505;<:;>?:779;=???>>>=:98;@A?@@=857889==989855554455469;===<>>>=<842345555555677666665543443321333344322454465578888888999;;;<==;:;<<<>?>=<;;53565446:;7+6kv{D)454557755?GG?2DfU-+8<5./1355556566:BFB<747:856766554,-DD+3=--22136928VrsO-,16>9777542.--///1.-69631,(+1353010.--,+(&&'2>4*,1632=B<;0()29>@=4013321138:63119F>/+,3:50,-'&1;7+)$)9=.()*D<862,**)(+4<;5/.-+*+360)((,02//02.+-//23446893*)-037974469;=740380,Bm>*)AB90,)&$)8D>533<;83/02430-)'\":s2074.+:UVKIA3-.1455>HKB>>83352123.-.1..36576684///.++,*&-D]da^Z?\"$7HOPOKGED?BS^^^__bjfWLJKLOPE637;=>6($.I_^YUL@:1,++*+,)9LF72,-EKE@<<CG>43675+&*,+,2521=DGGC@=6,)('*7N`^B68:-%)&'^_a```aabbbaa`acddfjifgijkmprtuwxxzzyxxtrrolkihijiiijjklkkjhggfdcca`accegffgffecbaaabbceffedbbca``___^]]^_abaa`_^^______``acdccbbbab`^\\ZYXXWWXX[\\\\`dc]ZYXXY[]]_\\XYYWVWXXY]a\\QT_hfa_`bfigcabb[SRRQQQQQQQRQQQPQRRRQQSRQQRSRPS\\dejswtuwyupmkkjmnr~}|~|zzyutrf[XX\\bdc^_mriejqobft[LQM\\x{g]^^]]YUP\\icYZ^a_ZXXWVVUTSSTTTSN|cgmne_[ZXT[psjltvywha`^_^fnssd]\\QYtnQX[XWVVUUVTVbnnrzzz}|z{y|yxvtqxsVRPORSQQRSSQQQPPPQQKJcqb[nvloZYborVQPNLLOQRQLKKKIIIIGGFCVfYLLLLJJJJKLMKRYYTOUUTXWRQSQQRRSSSSNLkbNV^[QONMMMMORSSO[hb_bXMrdKQNdf]VRMTdffg]TSW[URRMHGDFLHFVWJLQWXXUPNORMHN^c[QMMONMQPFBB@JNFGGIJIIKIJKIGIGDHNOOLJGGIHHLKHFGFFEGHFFHGGHIILVa`ZUSPOOOPNKQUOKLLLLNKOUPMNLKKKKPZTMQPMLLKMPPQPPPNNMMMLLJHLOKEBBBBFGLSSSTOOTTNMPSVX[jsU_\\YTNIJNW__[SSRPNHKITi{RHJMGM_deaYUTXWNJJJHHJJKLLMOOPQQOLIJIKJIHHIJLSNNSUWVVTLJLNNNOOLDRS=:CBCEGIHIJHHIHHGHIHKTcqrUMPMJKJLUUNJHHJOPMONKIFCADLU[]\\\\\\^eeWLKSSQPOOKIDFi·<]hkm_USNKHHHFGFEEEFDFHIR_WKFBBA?@BAABB@AB>9@F@>=BGBCGG@CHIIIKPSOKGEECDDEEGFDEHF@==<<;<=<9?Uddfjklic_^\\]^\\]^`\\_`H?ABBCCBBA?<=>>???=<;::;>A@@????=;<=???>>;;:;;<;<;::9988878:99:99:;===>>>>>>>>==<:::;:9:::<=>AEFFFHHIGFCAAAAACEB?AAA@?><<;<<<<=@DM[b^TQ^lqmd^^^_bfkopolliYI@4-.257766778975898767668:;::::998:;=@CB@?ABB=85677889<>>>=74435888:::Tp[<9:87777543<CEA;7432355543334666778<=;::9888668754668:;725:><<>=977:;=>>>=<:86679=?>>=<8686559<;99988976652236:>??=>>=>?;96677665555666655445445434433233233433554445578888779989;;;;==<=>?@?>=<>?@A;553039<:98//S|W+17455898<FH@7-:XN//:<722245556777;BEA832366653574342-,,**48.,.001=>35Qqi;$039?8665553115:96641484,,*),0451/00-+,+**('(+-,(*2511>E@9-$'+6EB4/34323348<=9757=?618<:71-+)'2FE5.)$1A.'(,,+00//./1,(+6;?<5440.-89.$&,.132120-*-0211444444.)),./.,.2368=<6355.*7I0'6S;.*%&1-06;53450495.17:78863,9_J1343512Trhc^D,',//16BME=;5342--0/,,./,.///2466441.,(-9:1/2<ES_^G,-AGHJHCDJLA@OV[gniab^IALPOPM?46:9<>5-3G^kkaSIFH>5)'+/03EPQN@46=CD>;<EH>8<8,(+**3=>=><=B@832563,'(/=Q[Q:-./0220,*`aaaabbbbbcccccfghiijkihiknqruvyzz{|{zyusroljhhhiiijjjihfedcccdcccbbbceggfec``_^__`abbcfhhhfeeecbbba`__``aceeddb_^_____`aacdddddccbdec_[YXXWWY[_`^`dedb^ZY[]^`cccb^XWYYYZ\\\\XTYej^WajkkkjjhghfZRRSQQQRRQRRQPPOPQQQRSSQQRRSRPQX[Zdrwsrxwtrromortvwyz|}{{|{{{ulc]ZZ^_`bbgkhhkia`p~nMRUSavqb^^^]YUQLNYZX\\_^[XXXWVUUUUVTURMz{cgnkb^[XVUeuuqpqv}|wzod```abgntte_dXhvbglf`]^aa`^\\bouwwwwxuv~|urx|rshQRSUTSSSSRRPPPPOPPPOKdkMMKKV_ZRTUf{}iVQOPONOPSSPNMJJJIIHFHIDMUXLGIJKIKLLLRSNMPRTVVXVSQRRRSSSRRQQLXxz[PYYSOONMLMMOQQSQXghaeOfQGMRce[SQRf|eY`][XUTSSRLHGGHMLHORUVV\\YRSRMS]ZPQ]lrjYRSW]ikaVGAHJJKJKJIJJHHNPLJH@DJMNLJIINKFGJGFGGFFGGHHGGHIHHHJSZZVSONNOOOLNRTMJMMNOMNQNMLJKLMMPRMNPPNMNMNPNMNONMLKKKJKIJQTNGCDACEDGORRRNQUQOQSTTQNWTTWXXVTQJFIQSQPQPNQVQBBFLzpOGIKHFYeebXUWWNJIJJIKJJKKLNOOPRQOLKJLQRMJHILNQPPRUWVVVPLLMNMNNJ@CQK9<A@BFIIJJJHIIHHJJKLKPYlxgNINMLMK[eYLJIIOPMONKGDDBBDKRVY[[Z[a_SKNQQPONKGDBjµl7TUKOGCCEFFGHGGFEEEFEFFGQZHBDED@AEFEFHGB>;?ING>??IL@FLKEGKLJKLPTSMIGDCCDEFGFDEGHC==<<<<=<;9CUcgeikg_]\\\\]__^^^\\d\\>ABBBBAAAA?>=>@AA@?<;:9;=@@????@>;=@A@@?>;;<<===>=<<;;;;;;;<;:999;<=>>=>>>>>??><:99::::9:<>@ACFFGHHIHFB@?AA=<FHAAB@@@>?====?>>?AFKQXWQP_mojb\\Y[_flookfb`ZSNJGB=93156679:;<88899:;:779;:9:8898:=>ABB@?ACB?;7478779:;<=<:::99;;;?@=NlX9?;:88975558=BB<522335554554478999:<==;:9866565554568:<8446;<>>=978:<<<<<;9657778;==<<;;:;9536;<;;;;==98642115;?@?=>>>AA@?<987644444425524777566445454233234676434445567777677789:;;<<<<=>>??>==>@CBB@;6235794340@d{{pB/4657789;@<1,.3DE,,88422345555664?@50,/51/24627=733/+)).2660,-,.4<<74Hmc4+32<9323353./9@><@B?7169-+1763541//..+,+*,-./*%&')-/-1>GF</(*&+A?,)1421468=AA=<98:85<ED;50)&$/BD802//;B2067./64321692+-0445558656:;3('+/35552/./033/166543/+*)+,.,'(,15=@>;3320/1./,?j4)(%*C>40+.3243420-2=><<<:;62>91575771Elwo`?(&,./018D=43132.++,,,,...0/014414<>5-+(/>?60-,);U]G29?<BJNPOONB?DDTmrm\\KE=AMOF<7;>;<JN=5AHThqrfK;AONF4+1756=>UcG8A@BB@>HRSNIJF3$%+7KVKB@=<82112/-./.175383,3;A@<82.,baaaabbbbbcddeekmidcimlhhknqsux{|{|}|{zvtrnljhhhiijjijhfcba`acccbbccccdegeb_]^^^_`aabcdgijkjhffeccefggdb`acdddeb_^^_````aacddddeedcaced`[YYYXY[^aabcefgfb_^][_bbcb^YYYZZ[[[ZZ]dbYW_gijklnnmmnhYRTTSSSSRRSRQQPQRQQRSSQQRRSTTQQSSU^feacnvvurnpssomosuuvwz|~{qjb_^_a`abdlpso``ix~TPTPVgpe___]XSPOUYYXZ]\\ZYXXWVVUUWXVVUS}ubglib_ZUUfywtwwupvofsd__cjlihouvd^hb`sujjrsb_ecb`ZYkvwvxvttwy~|rsx{ʼ`QXZ[[[ZYYYWYXTSRSSQSfveRUWVX]`b_]W[tq^UQOQQOONPQPOMKJKIHHGGIE@JVOGJLJIJKLORUTRSSSVVWUSRSSSSSSRQQRPQcl]ZYTQONMMKKLNNQSQWfhb][yFPPW_\\SOQVclZSYZYWTTUURNQUWRNNIDKXZSPOPQQMOY`bZSXfqh[VX[emjbUKHFIR[YQNMLKKWdYKJIFHJLKJIKMGBFHFFFGGGHIIHHHHHHJJKOSVVSPONNNOMKPWSLLLMNMLLLLLKLLMNOOHKNNMNOOOOONMMMMLKKJKLEHQSMFDFEEKRQQRQPQHCJOKHMTQIUTRPTUTSQOMKKKMNNOJVxaI>91AOGEEDSRKei_WTXXLGHIIILLJJKLMNNORROLLKQWYRKGIKOQRRRTWVWXWRKLMMMLKJCEE=<BBCHIIJIIIIJIIJKLLLMNUdl[JPSPSRUcdTKKKNOMNKGFDCCBBEINUXYYY[]YSOMLMOQKGIER¶R>HBCFHFEEFFFFGEFCCEEDDEFEEDCDB??EJIGJKEAAHatYCF?BRFAEFFGIKJJLMOSSNJHDCCDDFGFFEHKC=<=<<<=;;::C\\gchlf^]^]__`^\\[jbF=ABBA@?@?>=>?>@AA@?>;:::;>?>?@@@@=?@A@@??<;=>>==>=<=<<<<<<<=<:9:;=>>?>>>==>???>=<;;<<<;;<@DCDEEEGGGGECA@>?>;9DD>AA?@@???@@CCB@?<?CBBCDGWfhc_]Z^fmoonkjg^UONO[fkeQ=56579:<>>;9:;;<;889:9998899;??@AA@?@BBA<85777799:;<;::;<<;=>AD>HdU;@>:8998765317?>7343344666565789999:<=;98644543454468;><5458;>>=977:<;;::977789:;<===89?A@<:9:==<==>>>;864315:?@@=<==?ABB@>;855433357;:48>AA@><9666654334435676555445546786666689:<<<=<;<==>>>>=>BDCEGFHA62441264<[uxv{g@2556756;<8,(1,/8.'-1222345556779<2/76;>6334656>C?2***,1/260+---8<;93>f^2-3151/13450(/=>26CHG=/190/587421/.-,,+*)*+-46.&'()*+,0=HD6..1-(17+).20169>EFA=>8252:AA=640+();B3.22./8>?<:5+*28<60570*+,2-,.,,0277993-/035860.02231.06;=;2*(***+-1.+*,0=CE=321123451D~B'%%7N@0,),.011210.5EFBA=::725206867?A=^lA+''+.018<>;5542000-,-/--0442369505>>81**19:8420+3EL;1759EMU][PME=97MgoqX6/7CPI5-7JQG?KK78NJEZnpbLEOYXVRC200014KS@<A>CCBDYe]URUS<%%+8@=95238:<AC8.06/(3ACDOUSTUZXL?3./bbcbbbbbabbdeffgfa]_dijihjlmqvy|}}~~}||xtspkihhijkllkjhfdccbabcccbbbccbcdb`_^_```aaaacdgiiiigghfeefhjifb`accddcb`__````abccddeeeeeeccefc^\\ZYYXY[]^adfhkllid^ZYZ[]]\\ZYYZZZ[\\[Z\\][YYY\\fnoopqqqqphZSUVUUTTTTSSRRRQQQQRSSSSSVWWVTUVURRTVTWaegfeginplkjimqrrtw~|smjigijhgiouuvrmqdYh{{RIOMX`_a_^_]WRPSVXXXY\\[ZZYXWVVUUVYc_WUscfhdb`[Ubxyuuqrzwtoljf`^dntqkoxvd^dd^[l|rub\\`acaZZ[cktywtu|pj|sty{ӪvYbfb^`ca^^a`c_WXXXYY_fa\\bcdm|~wqjfa^elcUTTQRROOMNOOONLJKIEEGHJKKLOZ]YPIKJKNRSSTSRSTVXWTRRSSRSRQQPQRRPYdffWPOONMLKLMLNQSRSch[aWOQRXVQMNPRSUTTTUUUTTTTSTYbe\\PKJIJMPMLLNPONMMRY\\RMQ`mg]ZY]ejjh`TJHO^e^WSNOOR[VMMJIGHJKJJNLDGGCEGFFGIIJKJIHHJLLLLLNRWVRPONNNNKKQUPLKMNMKLMLMMMMNTUMGKMNONOOOOPOOOOONNNNOPEFQOIFCDFINWVSURPRm]PT[aYXUUUTQQQPOOOMLLKKLLLLN_\\NcmUBFGIDDjeDOd]VTUOFFILKIKOMKLLMNNMQPOMNPUXXSKHIKQSSSTTVXYYYVNJLMMMKKIGDADIKLKLJFGGIKJIIKKKLMMNOWffTIMS[\\ST\\WMLLNOMLGCCDBCCCDEHOSUVWWXWXYSLJMQLFEGKimACHFFFGFEEEEEDFEECCCCCBCE?=GDCBBBGHHHGHITewrJGB<JJ?AB@ACGGFHJMOSRNJHDBDEEEFFFFIC?====<<<;;:99Laeinh`_`aabc__b[D:??@@@?>>;9;=?>@@@AA?=<;::<<=@BBA@??@???>?>==>>====<=<<;;;;;<<;;<;>?@@?>>==>???>==<=>==;<>ACDCDEEEEEDCB@@><;::::<AA?@@@?BCCB@@?<:=A:578<FOTXZYX_hmopokjfYQNQS`mxzq\\B555666;<;:;;;;;:9::9999999>@??@@@>@ACB>967788999;<;;:<==;;<>CADUPB?=999997653/0:>9554346666777999899:<<:86544434456568<A@9768<>><977:<<;:;98768:<===<;8:?@??@A?=<<>>?>>:76534:?@@?<<;;<>??>=<97754356:CFEKKIIIHEA>><965666654555566544445786566788:<<<?><:;=??>>=?BCEFHKLF=:9426626Plvyux}[6365767<;81-2/-42,,/1234455578:<41CHAB@=9568749JB*&*+/0.170**.3:>><27YT1*)*,/123453./43),6678.,23588520../,***+**)).1.+,,*)+,0=G@.+120-,-,-230158>IE:>>2-48AA953300.0<;,,0-)-7@G@80((3>B6,./+(+051.,''+./35<<6420275.-12122./5>D=1)(,*)+,.2,)*,8FG<410234673QX(%%II1-+(*,-./0/0/8OUNE98882,)08:77@G9JlR()*()*-/:EDAA>6/121../.,-12333794058;;5()277977953672348AHLKP]_T=215AWffE+)1<G<*9Wc_VK926FRH<F_eZZ`di_T__J,.53=I>7>919<?D\\k^JEPO7(*+*-./2.)4DGFG;,082&,BWVWZcipsm^G3,1ddcbcbbaabbdffd`]\\^_acdgijhipwz}~~~}ztsqkihhkllmnljhfdcccabccccbbbbaa```__`abbaaabceghffddhhgfeffedca`abddddba``aa``acbcddeeeefghfffdb_\\YYYYZYZ\\_bdghhjja\\ZYYYZZZZZZZ[[[\\[[Z[[YY`pvtutttsrqqm_TUWUTTTTTTSSSRQPPQQSSSVXXY]^\\[ZYVQUbWLTVVYZY^eif]_jrsrompsy}xwwtolkmuxwwtuqf^k~laKV]\\]a``^^]\\UPNRVWXXX[ZZZYXXWWVVT]~vPWqcfedb_Z^oyytsoox~vppmha_cltuoqvrc]bb^]contws[Reocbb__^^bp|yv|vyt}utx|~˝kWaefc^_`]_hfcc_]]]]^^XLPWWUWdw~}{xtqpfYTWYTRQQOHJLMMNNLKLIEFHKKNUNKalbQIKJKOTWVSRRRTVYXSRSSSRRQPPOPQQPX^kgOMNNNMNMNMLPRRRT^_aWGRPQQPOMNOPQRQRVWVTQPSTQQUXVUPLLNLHILKLNOOOMLJOOLJILXZVTUTU[_`[RJGMPX\\YXPNOOMKLMJMJFIKJIMKDHIADFFGHJKMMMKKJLNOOMJLOTUSPNMNNNMIKRRLKMMKJLMMMMMLMTTRLMOOOONOOORRQQQRRRSTSROMSQMLHGJORSUWWZRIՈTWgp^W]YPNOOONMMNNPOJJKJJJHENNfvr^OKGHxV>C_YVTQIDGKOMGNQMLLLMMMMOPQPSUWWVULJKMSUUUVUUXZYXVRLLMMMKIIJIHJOPOPQG;FHGJIIHJLKKMMNOR^opZMX^VOJQSNNNQOLKFBABBCCCDDEGJOSSRSSW\\\\TJLQLEDHSTKAGGFHEEEEEEDDDEEDCCCCCBBDABFDEEECDFGE@RhynOD<>AP@>?@??ADDCCFKNQSPJHEBDEEGGGHFC:>>=>=<<;;;;:9B[iloj`_abceghhY=9==>>>>===98;>>=???A@?=<;::::=@CCAA@?>>>?>@?>>?>>======<;;;;;;<;<==>?@@?>>?>>>?>>>>=>?>><=?@CDEDEEEDCCA@@?<889:77<AA?@@@@ABA?=;:97;C64443116?EHLU\\cknlicYQNOV`hoqrpeP<534437::::::;::::999999;<@A@??@??@BCC>976688899:;;::;=;::;<CCBHF?<::999976420/7=;65435668899::998899:::86654334468986:AB<;8:=?=9789;=<:;=;96699;===;;<;::;>AA@>>>=>@?<:87644;AA>;:8:;9:<=<<<<<:5235767BKNMMONMLJGHGB>;8776544546666444555775467768:::=?=<=>?><<<?BBCDEFCDGA=<;:633Cdw{uvvS535578<;764887554/-/133344557798.8KE=<<;8579736B:&%)-0/+070)+16;<>>2-NT.&(+01344554100+*+*'%*+*/35963/,,--,***-2/(&((*-//,*++.@I6*-2100,+.1550037?JB9<<7:=>DA9511249:60-,,+-18@FD5,''4AA7+)+((/:?;5/*)()),.04890)*24.+02/01//7@D;/+,-+**)(--*))/8;951/013453]B,&'G:&(*+*+,.//0008\\_Q<43671('08876?C7:G8(++()('*1@IFGA4130.,-,)+42,-125622326=8**589::;=<2/./8EHEHH;4H`P1$.68CQ@)%)/67))Tvl\\^[D/6EGC>@MRWjlfmdPI[`A07:DP@8<0+269<I\\W<0=;.+/,%&-89:3,8?=@<-)189.-@Y]YTZg}kH633ddcccbb`abbccdb_]^^__]^cffdgou|~~~ztrojihiklllnmjhfdccbbbcccbbbbbaa`a`___`abbcbbcddddcbbfgggfdca``__`bddeecbbbaa``abbccddddeeghhgfedb_\\YZZZZYXY[[\\\\\\afgfihb]YZZZZZZZ[[\\[[[[[Z\\gqssuuttttsqvs`RSVUTTTTTTTTSQQPPPRQPV[ZZ]``^_`^VTnnTRRSVYXUXbe^[^ensohel~|vpmou{zxwxuu|yigcb`^][ZXTMMWXZYXZ[[[YYYXWVXabzXklcecd_XZhvzvrrojmturstpeb`cmvwwqg`_``__`aafaeRTlbdif`_cpzzw{uzyz~wuy}ѡi_deca\\_[Y]clf`````^^^^WNNQSLVzxvtux{|jRLOPOPPOOQNLMMNNMMNLJLNNONMIGVe`OHKJJPTVUTTSQVXWVSSTTSRQPPPPOPORW_n]HLNOOOPPQQNNNNSYT`}~XLRNPPONONNOORSORUTRQPPSSPMNMJMQQRSPOMMMMOPPONONMJHHGGFFGJKKIIJGCCCFMGFKMMMJJLKFFKJQPHGIHHLMFGLDEFHIJKMPRRSQPPQRQQMMOPPSQOMMMMNJGKQOKKLJKMMMMLLKKNQQPOPPONOPQQRRRRRRQRTTUWWVTPMLNOOPQQPNRTNAdXPY\\caTE@CGKLMMKMQQRLIJJJIKKJMMO[SKID]QBE]XZRLHDGMOPHKPMLNLMMMMORUUWVWVWUNJNRVXWVVUUWYYXXTOMOONKJKLKJHHKPV^M:FHGGGIIHJKKMMLLLO^u}o]THFJNPNLMPNGEDB@BBBCCCCCBBGLNOPQSW`aUPQIDDITLi?EJGGHFEEEDDDDDDDCCCCDDCBCBCEHKKGEEGGC>YzwO>>ACJG>???>>?BBA@DJMSVRKGEDDEGGIJHC@;>>>>=<<;;;;:;?Vjoplb^`bcdjsYBBD@@>=>====:8:=<<=>>>==<;:::9<=?BBBA@>===>>@?>>??>====>=<;;<::;;;<<=>???@@@@????>>>>>??>=;<?ABDEDEDCCCBA@?;:989988:=??ABA??>>===;97;C75642101467<CENX^baXMGLT^iqusmf]TG:67789;<;;:;<;;:::99999=CCA??>>>?BCCC@<977778879:::9;<;::99@FCCD>998776654310/5;;854556788:::99888899:9786554444578747@@;:<==><968:=@=;==>=;:;;<<<<<<=;::<>@@>>>>=>@><:87755=D@86678:99<=<;;<>;536674229@HQTSSSPNNNNLE<::9768867533334444764458989:869<=>@@?=<==@DCBCCBAEG?<A>8573:]xzwyc=444567>;576;;96540/012345655667504:76653358::752.''+.1.)/7/).38>=><3*JS.-3045445524511,,296-)&(,02540(&*-,+.-,-31)()')/0.-,,*.=C.+5:3.-*+.242100/7=84536BA>EC<94/+-790-//+.357AH@/(&&6C90--3/*5AA:42-)()''''*12-((/40+-1/---09A@5,,//-+***)+*(),-8:2/,-./011YD(.1+9-*10.----.02327b`B.++260*(/8556;:200+*+++))*(%3JJB;440+(**',59/+.013005:9:><859?@==@C9++.8JVPIGB8,0>:-+4;?:0+*.370'\",Yq[ahT949::<@?@WpmackaNMZG,-48A>??3/23445AF4(+.//,.1*)9BCA<401371%.BK:$%C]WC6<cg;573cccdcdcbbb`__a`__^^__]^`aabdjs}{wrmkjiijjkmmlkhfeddccbbbccbcdcbcbaa`a```acddedbaaaa``cefhhd_^]]^_`bdeffeedccbabbbcccccdddeghhggffeba_\\\\\\\\[YYZZWY_`cjoqqph\\X[[[\\[[\\\\\\\\[\\[\\[[^bflrwwuuvvtuwq^RSVVTUTTTUUTRRRSRQPNPSSSRUZ^aaa_Ycj`UPRSX\\[[cie[TU^fifcjtyzzywvsoqz{nox{xsod_^_][YopddXX[ZYZ\\\\\\ZZ[ZYXY\\`s[j`dga\\V[n{ztoqrqrjmrturjfhhikqsi`aca`____``abdhebgfd^]_mxyiU`jsxvy{ӥjWeifec^]Y]ieec^dfcb```caWQSUNV}|zxr`QNNLJNLG^nfYOOPONQROMNOKHHGJFKfdJGKHIQTUTRRQSYXSQQSTTSQPPPPPNOMNUnnRMPNOPPRSUVUTQNRUO`oQGXYQPQNMOOOOOPOOQQPQTQQQQPNNNNPRTVVTRONNOQQQPNNRQMIHIJHFGIIIHGGGFDACLGFEDIICELNGDKKTSIGGHGLPIEHGGIJKMMNPSTUWVSSSTUUSMRVTRONMMMNKJJKLKJJJLNMNNLLJIJLMPQONNOQRRRRRRRRQPPPMKLJUPA?MTSPMOQLR\\KFJIhnXS\\\\aWE;@@CGFJNKLPNSQJIJIIJKLLIFDIIGVz[RGBP[Z\\NDCFFLONJJMOONMONMMORVWWXVWWWPIPVXYYXVVTUXZ\\\\VOKPVVQONNOMKIJPQeUEGFHHFHKHGHKMMKKJKMXjv[II]]LKMKJMMC@ABBBBCCCDCBCAABHNPRRV^faUMDBCGFELa<FJIIHFEDDDCCCCDEDEEEDECBAB@FQVSLKIGEC>Fgh@>CBGM?<A??>>>>>==AFNWYTMFDFGGGILKJ?>?>>>==<<<;<<;;<Qgqtoc``bballG;IGBAA>==<<<::<=;<=>>=<<;:::;;=>@@ABBA><<=>>???@@??===>>=<==<;;;;;<<=???A@@A@????>>>>?@??=;<@ABDEFEDCBB@??;9898897799<@BEC?;9<==<;:9;E76642342233578;@ELONIEHR_imonkc\\UMD;;::;;<<;;<=<<;;::999:=??@?=<<=@DDCCB@;8777776889:9:;;;:97;EGGE>8676544421011379966756998::::987889999886445651133359>>==>?==<;66:@B>:<>??>>??==<<<<>=:;=>@@>>?@?@A<8556669@A:55458989;;::;<=;9997778756?HKQVWTSRQPOJECA><>=;<:63444344476678;<;:9966:<<>?@?@DFEFFDCCAACC=98752544Rty{lG9523666?<6875322353112235676665794./2551,-28=@=4+(&(,02/)-6.)5:<><;966<:7<51664675015331/6CE>4*(+.02//+'*,**0/-+,,((*),11.-*'',54)*3:3+))+,./.-,+)**+++),64:FD<83-(&)---...-695?K6'''(6?1)).71+;F>520,)*+)*))()(((,22.-143/*(/9B>0(,1,((**++))(),3970-*(((,/08'+1?.-.1433100/035;57dS5/+*/1.,+-/25563-,++**,.132,$,NQ9344,()+(+7;0*/211115=AA@@@@=977:@C?.&4?IWYOJG:2.'$&1=CFE6'+3=D:*#!0^u^a]G966766:88G_ribmq\\@;4)'(%$/<:30/0/.**/.(&+1-(-87-0BC<A:)%*3617EI;,#+GYI)\u001c8^Q+&+(dcdddeddec`_____^^^^__`_`aabep{~~~}~uljjihijijkjjhfeedccbbccdddedccccbabaabcdefggfcba`_`bdfggda_]\\]_`bdfggggffedcccbbccdcdeefghhiihiheeeb`^]\\\\[[\\Y_hggilmnqqg\\Z[\\\\[[\\\\]]\\\\\\]\\[XW_ksvvvwxwvutuq`RRUUUVYXVVUTTTTSRQPMJJJKMQW\\^^cbZYa^VTQSX]aee`[WTWY]``bebfnpqtttrx{ggx{ty{ib^\\]ZVtWSUZ[\\\\]\\]\\[]_YSc~ioya^ce^]^dx}vrmrxxtlotuvwndgjhcdhhfhkjihfcbbaaba`ulX`ffc__`gz|xkkruywfW\\fhgf``ZYinhkd_eedbbbceaXRQQPNUqudUNNNMMJN`mkeUHPQOKHLORSQMGHJPLKf_HJMIKSTUTSQOVZPMONQSTSPQQPPPNNONQc_OQQOQUXXWWWX^^TJHHJHCGMQPONMMNOOOOOOPRZb\\ROOOOOOONNPQRSTSQPNNOQQQQONPOLJJJJHHIJIIIKLLLLLLNNMKJMKEHPOMKKKQSJGFIKLJGDEGHJLLMMNNQUXXXTRSSUXXUX]WRONLJKKJJJIIIIIJLNNMKMMLLMMNPQOOOQRRRRRRUSSVZ[\\]]TR^TLNWWSQNNS_k[JIME;FNMQVMEKME>DNTKJNNMLQPMJIGGHIIIHFHIHGdi?GED]W\\aMEGGGFFHJKJNRPOOONONRTVWXVWXYSJSX[[YYWVTUZ\\^\\UMHOYZWUSPU\\[[VTNPQRJHHHGIMQJJMNMKLLLLMPZTJY}KLMHGMNEACDDCBCCCDECCCA?AINORVZbcXHBBDDGDUU@IHIIHHGDDDBBBBDEDEEEEDBA@A?FRWTPMJFBB<?jV?BABMF<@AAA?>><==??DNWZWNGEGIHIPRNJA>B?>>>==<<;<<<<8Mhnqnc``b`cq]<<FEAAB@??><<:<<;::<<=<:9899:;:;<<=?BBA>:;<>>?@?@@??>=?>>====<;;<;<<=???@A@@A@@@A@@??>@@@?=;=@BBEFEDCA@@>><87888987778<ADEB=;=@@<;:9:<E864422333344445469=BB>@GT^eifge`ZQH?<::;;;<;;<<<<;;;:999999<==<;=>BDDCCCC?:97777666799:9:;:979BIJH?7455322211012247;878669:9:9:::8767788755335663//0136:<>??>=;:<<75<A=89<>??AAAA??=====;;=??@@@?@@@A@9435556<?:78744777789:::<<<<;:888787669<BHOUVSQQPNNMHB=>>>?>;:;:7444469;;;==;:::99;=?BA@ABEIFCCEDA@??>:51254560Dky_4864466/28887520136642223456676789733444/)+/49:4/))&'-010)+71,::<?@=867+*:8/0588:850.113217@CC<.(),038;92,..),0/,(&''&&+/20+&%')***)+//,+,02,)+,,+*+++++)(&(9IE830-(%&(,-./009=/6C/\")+,12.+*/3.*<G8/-,)(*,1-)+-)(((/1,+3:830,)+4@:,(-/*')++)*)*+,-385/,*(')-1.)+.1502445554334567859O=/2.-00-,-/3563/-+*,-+(*18:5.)&>D/,0/'',,-8;3(,10/0049<>?>><;4,((1>B<16HNQY[O?2.21+&'2BHF@1'+8JG/%16Bg~tf]G8779;6//41-Bm{w|gE1))+&%(!)7400/.--+(')*++*(),2994AA225)\",7<::<:751*5OT8 #11$!&'dddddeeghebaa`___^^^____```achnrwyzt{t~wkhhgghgfffgggffeddcbccdddddeeedccccddddeghhikhec````adeedc`\\]^_abdffghihgfgfedccddddeefghhikkkkjhgfed`]]][[\\^abehihjkmqpia\\\\\\[[[\\]\\\\\\\\]\\]\\ZalpnpvxxwvutuvsbRRUTVYYWVUVVTSSRRTUTSQPOPSVYZ]c`Z\\^]][XYZ[]\\YYYUSSUWWWYWX^dktvvtoswifqupa^^_Z[nLQ[\\\\\\]^^_\\VWYVgl_]``[achtohnrw{{tjjxwhcfid_dkkknpponkgccdffc]RMUbjgbaaazsxbqpqwxfoa^^alhecZY[anpkmmcdgedddde_XROOQNUrzy}}{p_RNMOPRLbv[YSMTYXUQPLP[b^TNMROLXTKNOPPTUTSRQPUWOMPNOSTSQPPOPONNOPOQQOSWY\\][ZWUUTPOIEFECDFGJLMMLKKLMMMNOPOYjgYQPOONNNMOONMMOPQPONNPQQOOONNOMJJJKHGIKJKNPSRORWZ\\YTRPOOPRRRRRNJNQMHEFK>?CKKGHJLMONNNQTWYXVUUTVXY\\sZNPOONLKJHIIIHHIIJLMNMKMMLMNOOPQPQQQQRRRQQN\\djoqsv{y|{l`[USTRMRej^LHLKMLIIJKOKIQQDAWnxnQADLMOMLKJHFGFFGGFFGHHOJDLFERT]_QKLIGEEEHJJLPRQOOPONPTVVWVWXYUJTX\\[YYWVUTVWY[YVTRSUWTRPW_`a]ZVOPYPPKIIJOZ\\TRNMMMOOOOMJMKS{qRJGGDIOHCEGECBBCCCDCCCA?@DILPTW]cZICEFGLDSMFIHHJJHIFFCBCDDFEEFEEECBA@AABGNOMJGJHDFLoj@B>;ML=@AAAA@@@????>CMV\\ZPIGHIHLTRLH?@B??>>==<<;;;;<5Ggopmeb_^`kkTB@BA@@BABB@>=;<<9:8667::999::;9889:=?@@?;<=>>?@>=>>=>???>====<<;<=<<=???@AABABBAA@AA??>@@><;=@BCEFCBA???>=:6688899988=@AA>=>?@C?<;:9<@G76431022334454444465546;BFO[\\\\]]YSK@=:9:;<<<;;;;<<<;:98889:=<==>@CEDDCCBCA>;86555677899::;:975<IOI=6444322211022346;;98878:;;::::876566543235750/221248:<?A@=:75:<66?A828=>@@BBBBA?>>==<;<?@ABA@?@A@@@;986646=>87975446667999:;=>??><:8766556568?HNPPRRQQPKD=9=@@CB@B@<853469;;<<<;:<;:<<BJLI@=????=?A@==<<;73124666.8fv}c6775571.357874568:;;9422344555589654553/,-1/-22//0.((,01/)+74.369==:531-/30.0268785331./127<>A@2(()+6CA5..0-*+./.-+('%$',13/,.,)()*('(*--/58.+/.--.00-+,*((+7E@4//,)&*46/,046<8,/3+&),-+,..+,.-.;@.(('(),01/**)**++-)&-:>92+,-+.54/0220/...-,,.0101210.--,-./*$,/0326578875346677768<1-2.-22.,,16663-))+,++)).44-+-(/1'(**%),/:@6/,21-+-25645:8432,)*.5?D@<GQJLXZJ2&0;522/.6953+%*=K=$*IXZgrm_L<:968;6-+01&1d`=2.,,,-(%0:8544222686377+%)-.-/17A=*(.(&/89676556777=C:*$\"#%$)0ddddddeghfedcb`_`_^____aaa`ab`_dmorjh|xgotlfeeeeddddeeeffeedccddddddeeeeeddefedddegiijjjigca`^_adedca^^`abdfgghikihhhgfddcdedeeeefghjllkkjigeeda`^\\\\\\\\\\Z[^aegilnppqne^\\\\\\[[\\\\\\]]]]^_`cgiimuyyxwvtttuscSQUTSUXXUTSRRTRSVY]]\\XSSSUVVW[_][[^dda`_^]^]]b_TRUX[[XWY``ajmnjbachju|w{dY^`Za_Za^\\[\\\\[kmwp`^zfhkd^_^]^`cffgow|~xsyvtx~vheie]bjihikmnprjedcdaXKR\\hklmj__]eymi^\\rjiotytjq^][aig_]]cruomjntjhiccdddc_XRQQPO[||th[QMOQRMNly\\W[]_invkNUeg`ZUVUNNPNNOQRRTSSQQRQRQPONOSTRPPOOOONNNONNRX]aba\\WRNNQTOFDJLKJIIIJJKLMMKJJKKKKMPY`VORSOMMMOQPLLNNOPPMJMNNONNNNNOQOJIJKGFJLNQSRRQOSVWWWTPNOPRSTVRVXMMOSKE?AThKDMJHJMNONLMORT[WZYXXYYZYtXHPPNONLJHHIHHIKKLLMMMLKKKMNOPPQPQRRQPQQOMF]sttvy}oWPQTTOUfxMGIJJJMNLLMJGELKOqzrG?JNKJIJIGHGEEEFGFGGEFIHHFEQ`UJJLJGFFEFHHJLOPQPOOOMSUUWWWWYUITXYZXXWVSQRW]djlgVLUVRRTWXYYYZZXTWVVSRRQOSb\\ROLLNQQOQPMLKHBRSJJMIJOFBFGDCCCDDDDCBAA?@BFJMQUZ`^PHFGIJNK:FKKJJJJJHHFFFFFFFFGECBBBA@@CDCDHIFEKLKQJ`Q8B=@T@BDCBB@A@@@???>BKX_^SKHHHJOOIEB:??>?@>>==<;;:::6@^tuog`\\\\cjSGGB>>>>@ABAA>;;<=<<?CHNQMGCBA@BFOUUSRMEDCBBA??ACB?>>>==>=>=<;<<<<=>==>?A?@AABBBB@>?@A?????><;<?ACCCAAA???=965799899::>@@=<9:>?@A?==<<@CI775422333444544565643323559CGJLOQSQE;:::;<<<;;;<<=>=<;:::;<==>@ADFECCBABEFD?:8656678889:9988834FVO>44542222211446788::::99:;;;:::876776655557640499659;<>ACCA?95788<>?<9<>@A@???AA?@><<<<<>?@@@@>@BA@@>>;8777::6665444666897899;=>??><:8422466799:BMRSSTSPLJF@@ABDA@AAA?:756679;>?=:769<<CNOPL@<:789854786995223332403btu]058577//7778=A@?@BD@:5323445676::3.0472+.65-+.0234.*+-11+&*64)(/121/-./11112342.140140,01125576.*'%(6A6)+-/-+,-.010+()*+-146771*),+((''+++-01/-,+**--,+*)))))26340(%&+690),2684/)''())+++./++157;6+()))+21/.,)'.100,'+7?<74.**+*+04655520-03/-+*/36310//00.+*('*.033557987544556557984,+,/34/)),0/30*''-.**-..,+*,0-*)')))+./8EA42221,)-354127422437>AADC=;ELFJPLE>:<<973*())'*+*2?B5#.Seaah^@3440-1641/47,/]h>294.9E@/7DC;7:==<?ABBC9'&/120'$.83''*()+--,037789=9.+-.--*(&&,eeeddeefedeedcbaa``_`aabbba`a^\\afecadqsdbmleddcddddddddeeeedcddddddeffeefeeggedeffghijjlmmkfb__accbba_`bcdfhiiijjjijjihfdddeeefeffghiklllkjigcabb_]]]\\VUZZZ`dhlnonnnmha[YZ[\\\\]]]^^^`bcdehovz{zvuussstsfUORTSUWWTRSSSSSTUWXZXUTTTTTTVWXZZ\\__^^adfiikpoe`abjl`Ybjfdbcda`_W^qorz||a^`Whl`e`[[[Ycyomqvktofb^b^\\]`djkmp{}spz|rpxzoggd`aeecdgkmprohdcabktpuwlfkib`dfjdnffdnd`bgkpky{xroddfd\\VYgypnpuuk`\\_abbba^YTRPQQLjp`WPNPNGXlaSS^eiwǠaR\\``bab]MFHJKLMONMPPPQRQPOOONORSQPPPOOOPPOMPT\\ab]USX^QEIPUWTOMMNMMNMKIIIJKJIHIIIILPPMSYYNJMLKQYUIJRTTUURPNNONNOONLMOMKJKKIHLMQVURPNPTWVTQQQPPQQQPQPRVQNNUREXJsN@MLKJJJKKJMLTh[X][XQTX[^RLIJKKLLLJIHHHHIKLLMMMMLIJKMOPQQRQPQSRQOMKJGUgknqu}ZOTRQR[tzOAGGIIJLMNMJFDLHPty`ILKIIJIIIIHFFGHGGGHIIIJHGP]MEIKIIGGFGGGIIIKRRMRWUUSUWWWWWVKUVWWXXWWX^fmqtzpZPLXZYZYUVVVVXXXVVWXYYY[UMLOOPNMORQOPQQTSQQMMPQPLPQEBJJFHHHIJLMJEBA@@BEFIMQW^^VHFHHHJGTZDKMLKIJKJHHHFFGGFFFECA@ABFHFFKHHHFD@CIUFAhoD:?GOEEKIDCBAA@@@??>>CKVabWLHGHMOE=><8;<=@@=>==<;;;;;<AWrvmd\\Z\\f`@>FJ<<>>>??=>ACCDFEEQcmwqcWLJJJKShrrqlaSJHGGGCEMTRKE?>=;=<;:;;<<<<=>>@@@ABBAABBDC<;<=?@>????=;;<?AA@A@@??>:756799:::;>??=<9::=>@@>===>BCG87544333344454445566533344455;B@BKSLC=;<<<<;:;<<<<<<;9:<=====>@CDCBABEGIJJHD?:976778889:9988875<QWE5354222223345688999::99::;;:;:86677774566556;AC?;;=<=?ACFHJLI=9BIFDGJJHDBB@???>@?><;=???>>>??>@AA>99=:89::85444322344587788789;<<<:7311124:>??;7?LPOPSQOOMGBAB@???BEC@>8116:;@@<:54:>=>BEKROC:87652145566534644233-OyoE0875652/1688IWLHFEDA93444456788;8.+1880,/44321110.,+.355.'-87.))**())'')+./0383*-0/56/-441+)*))))')*-..,--,+(')*-02/.1331//6=;4./1,**((),*(+10,)(('))++*))))(&)--,(+4610-(,/-,/.(()*)(***+...47761.033-/3110.-.3554148==854/)'*))/554440*'+22/('065310/00/-+))'),/244579755646650/6=:60+.254/)''',0,(((-1//488306:4-+****.0/8CD<53000,+/2321266668:EJIE@:56>FKMFCDKJC=>;/$$(+*-5;<<?8(/Tf^ckN('**&'+143476-2L`{f0/?819=66CIB87AMJB?>@FA0&(1132*'(,*'()('''&%(.7;@>:;2((0781++)'eeeddeeecbcdccbbbba`aabbbbbba__abbcdglmgeggedcbdddccddddeeeeddeeddefggghgggggffffghhhikmoookeb``aa```_`cdehjkkkklkjjkihhedeeefffghiijkklmlkkifbbba^]]\\YWWXY[\\bjmlkjilpk`ZZ[]\\\\]]^^_`bceehpxyy|xpqssttvyn[RQRRUWWWUTTUTTTTTVVUTTTTTTTUVXYYXWXYZ]bjllllkjigkvso}xgegbenkb`dqxmlwvh`Wr{{|}f]e`[YY_vyspc[ddf_abe`Z^djkklnr~|~}zywwuuxneedca_`bdefhlsphebcip}|}xmgddfiwnq\\dnh]_bfklkrnZ^vyuqofZSVuwwzxxvfXY^`a```^YURQPOO\\fqubVPNMORrl_ZZfqu{jU^^Y]icTLFGGIIJKIGJMNOPNONNNMNQQOOOOOOOOPRV[][WSPMJPWOGJSXQPUQPQPQPOQQNKFEIIGGHNQPQRWdfQBINKIOX[TRUXZ\\]^]URTWYUNKJJLLLLKKJJMORVUSQORUVUQONOOOPQRSTVNMRNLOJPǟVlQIMLONMMQTU]]g|YP^_\\V[ZZ`MGJFHIKLKJHHHHIKMMMMNNKJJJLMNPPQRPPOQRQNJFGJLQXirtxnNNPKRdx~gHDFGGJJKNQQOMLLLKSQGb֭]FJJKLLJIIIHGGGGGHHHIKMLKOOFHKLJIIIFDEEGGGGKPP\\`XTTTVVVVWXMVUXWWW\\dntu~s^LLNS_YTZYWTVVXWVTUUXYXXYXURONTVTRQPOPSV^^VNLRSNLKORJFMQNPQQQQRTPIEBA@BADHJNVZ^VIHLHGIJKJLMNMKIIIHGGGFFFGFDB@BBBCBLVLJNMLNJHLQMHFLpT>=?FKCMMIDBAA@@@>??@@CGP_cYNHFGNM=9:;8::<B@?>==<<<=>?BCNhri_Z[a_H77CRD:><<==<>O[VOMIKS`glbYRLJIINW_bcb\\RMKIIIIKQ[_ZVMBACCEEB>99<=><<>>@ADEFB=>??DKG@<;;>>@@@@?<;<>AABB@@@>;867999:;:;<=<;;;:::=>?@><;<=ABC776233334455533334665344565217>:7>KNPI<=>=<<;=====;:8778:;<==>@B?>CHKPROIGFEC>:98777898:99888843FYN8376312223565778:=<:999:9;;;;;8665565477:<=ACDB@>?>>==?@ACISVPKLUWTUURPMLMLKKHC>:;::@B@A@?=<<<@C@82377889:86654333344666777688:::;86445547@CBDD72>JJIMPPPNJC@A@@?@CECAB;536;=??>=<<??=98:>GI?766545556887546766557-Gz_357643566567=U^MLKHD=73464455788<8+*4:70++3>B@?6.++43-07=828>A<.)()**+02/-+**-45/.2?NM:-461*&&&()*,--,-164.+($$'(+25898530*'-9>;;;8/+++*)*+,,.,,,,,-/00-+*((*,00--27?93../.--,**(&(*****++,../.00257:98640/1210696645?C?:641-))*+-266523/'%&,1/@UP7./,//..--,*)(),.25455555664473*,8<635578631/+')./+)*()1868GOH@II5,-+)*,/,3AE<852-..,.00/0/055444;JKE?83467@LOMKEACHKKH=,&-2/2=@<AHD:=Sb`gc>&'((((*.368731890`V$3@83669BE>88@MRLDBA@B8,,+/31/-+))**)''(('%$%'7HJ<15;50122,).56eeeeefedcbbbbcccccbbabcbcbcca```acfgghhhihfedcbcddccccddeeeffeeeddefgghiihhggggggghhhikmoprrnga__```__adegillllmmmkkkiggfdeeffhhiijjkkklmmlmmlida_^]]]][YYYXWZcfffghkpqkfaYWZ\\]^^_`acdeehqxwv{xigqssvwxzwhTNSUTWXVVWVUUVVVWWUUUUTTTTTUVUVUUWXXWW^if\\Z^_``_pv~xlomhkopttomu{_Yt}xn`ag`]^[dsxvihdacdb`^begaZbknlllkkrz~zrsuwy|uhbeeba_`dedcdfkgfedtsah~rVWnteV]`bdhkwqcjsqrx}~wqfbnssurpuyraXY\\^__^\\\\[VRQPMYb[c}vaTPMJ\\gmuyzmssiqz~~bT^^Z[feUMLLKIIIJIGFINLKLMMLMLMPONOOOPRTUVWXWSOJKOKHKMPMLS[TPTSPQQNLNTXYUMIHGHOVYYZY]fbO@FMKHHJPXYUSUZbdb`YTW\\]ULKKKJJJKIHILOPRTTSQQRRSRPNLKLLNPSTS[\\SQNKMJHoMOEHJNRW\\aehqptUJafa]]YVTLFIIGIIIHIHHHIJKMNNNOPJFJOPOOOPOOPPOQROLMXUINGJg~}dLLMYiw}xxOFHGHHIJJKPVRNMKLMJH]ϾyQKONGJJHHHGGFEGGHHIKNONNPMIIKLLLNLGEEDCDFFFJQXUJJRRTUUVWYPRTYWS^n{~z}l\\VOMMR\\GFIKPXZ[YWUSSSUWWXXWTSX^cd^XTRRSW\\^YTPNUVNKLNOJKPSRQQQQRQMJECDBABBFONNNR\\[KLMHGIJLLLMNMJIHGGFDEEEFEDB?@DEFEBFNHMPKNHENeXFHGL]B>A?@AJOMGAABAA@@?>>@ADCIZcYNGFHIC:::;8::;?@A>>=<<<=>?A?AYmf][__N:7:9CL9::;<?>?N^aWMJKNV\\b\\SMIIKNSY[\\^b[TOMJGGHNV]]WUPIJMPPRRMA9=A><;=>@CII?99==<@KNJA749>@??@>==<?AABCBA?<9788:;:9;>;<;:9:::89=??@><;<==@A77602333445553332355533555534;=769AJQTF>==>==???AEEEDB@>===<=@A@AFOSSTQHDCCCDB<:9778899:9877763/;VU;376202235667779>DB;9::99==;;:8886568<ACDCCC@>?@A@@?=<==<<=BGUXQT[]]\\XVUVVUTSRK@=87=AA@@@>9537@FA544334569;:86443324444677668999:989:::::;>BABEA54AGEFLPOMJDAA@@?@AB@@?<=;45<@AA@ACCB?:889;865455446866BC54:866659.@uT,64542377667<HRRNLK@774454556788:6,.785/**4ABCD7,++:9+*7@;=CGI>-+,.1/.9>94.**)*//+-AT^R1).//+(*-.///.135740,*)'&'+269851-+)''-49<:60++++*)*,-.012345442-*(((*.7701CQO;,*030.-*('''()***++,/2.++)*046313551/01108=<5.1?C>:7640+'*1799;9542,*'')-SoT3-0*.,,,--,***++,02242./5764462-2;7,,38::7333/,,,/.)'')2;9>YgQARI.,-*)+/)-BFA<;50,-.,/0/.00/34018EMH=73154/6DLSUH<BPVTRJ4'-102989IQNRQIRb\\B,(((()+*+.47635:2*Un?%894432<E=16CKMLKIMNI@0.5/-3/-,+)''%''(---,)&$.DJ:+2;950,+'$-=Cfggggggeddcabcdeecbbbcccccccaa```abcccceghgfeddddddddcddeeffffdddefffghijihihhhhhhggghjlnotvtmc`__`___adgilnonnmmmmmkigffefgfgiiiijjkklmmmmnnmmib^]]]^_^^\\YWWXZ]`adjmmopnlh]VUX]__^`bddfiputsuskgmoquxww{{paUOPVWVWWVWWWXWXWVUUUUTTTTUTSSSUWYYYVXfj^WXYYYYgdesvvlknpssrnmkgyj[yrsib]^fb^`fmkhk}yogbdcbbacddfabhlkjkklmklv~yru{}yodabeecbccddeegea`eegylt|y{}tq~p^]ddcdcdl~xu}o^chgdcpwg[ZZ\\[YUX^^ZUSQPRbhde{t]ROMZutmprqp~kjou}ZRVYY]cngOIMKJKJIHKIFOROQOLLMLLNNMOQPPTXXYUOLKLMLMSWPMJIMPWWMJJJOPIJMNSZ[ZZPJUdgVMZghfO<GNLJHJMPSSPPQT`eb[TRSUSOMKKKJIIIGFHKMNOPPPOONNNNMMMMLLMLJIDPd`QMMOUTWVbPDHKQ_fjot{wwVEW]_[XOKGFFHGFGGGGGGHHIIKLKLMNOKGKRQPOOOOOPPOQPMKLYTLgSBX|aERgwwwyrRIJIHFGGHHJPWQKIHHGHXԩȢiWHGMHIJHHHFEEEEFGGILOPSRSSPMNOPQSQNNMKIEDDFFJHCEBISTTWWWWSNUTR`vkWVVPPQQWBCDKXa`^YXTSSRQUWYXURS^ffeb_\\ZZ\\^^WQPPORSRNMPPNPTTTUWUSRQLHA>>>>AFIMLNHMWbRPMHHIKLMLLMKIHGGGDCDDDEDDDBCDDEEDGFDNSL[ULOLNHGFHFCABAADNOMC?@BAA@?>?@@CFDBP^XNGGKB9999999:88@G>=<<;==>>@@@Qfd[\\_WE;9<76IA7<<=?A?<K[WNKJLOW`^VLJJMRUV\\^^\\\\WOLJHHIMQTURPNLJNPORUZYJA@><<<>@CFB73<<<:9=FONE<:@?9<=;;;=@@ABCB@=:77889;98=H:;;:999989=?@@?>===:<@56403333344443222357743433228??:98;?GQOC==???ACCFKOQQPNLLKGA@BDFMRVTOIEBACCDEEA<:977789:999876405LT?6;73022356658?BGHC;9:;:;==;;;::876:@HNME?=>=@CBAA@@@>><<;<;?GPXSRWZ_c_^]YVTTRNNM@>?@@?>>>90,3@G?687311258::987653344455675577999989:::9987;=>BA726>ACGPTOG@@A???@@@@@>=>>:45<@@?ABADD?:997666446789=@@SR:=B955657.4iR)7444225665765GXNDB<;<64544667766414984-**-22581.-.37/*5CDFHLK<,.014/08852/+,*%&(),?U]T3).0130......07;8344.,.,**+/3430,***,-,*/31/-+*++*)*,,/57889961.+++**)+160,;QK</,01..+*())(()***++,040*('(+-,*)*+.10///-287/(+7<::::=;.&-8=>=><6584/*&$%>I5,03+,***-,+**,+++,./20*(/55455469=4)*-08<84344/)'*,(',29<:BepG9K<*,*(*.+-?KE@C@5.)-0.-././//7<::HQJ=21210-+2=DHJJLPWTLE=1,.121108KQP[W@FS>*-.,,,,-,+,/222234<E;.,-*.224<?55FPKHHLPUVWK1.B>.23,++-/-*/217?HD70.(<VG,.3221..*#.?Ahhiiijihgfdbcddeeca`abbccddcaba____``_aceeeefffffedddddeedfgffeefffgghhikjkkjjjjjihggghjlmpqqlea`_^]^_`dhjmqttqnllmljigfffggghiiijklklmmnnmnnmmmida__`_^_^\\ZZZZ\\^_bfiiknortri_ZY]_]^`bccgmpqqpoqqpnmqxzxw{{nZMPVWXXYYYYYYXWWWVUVUTSTVVTSUWWXYZYX^fea_`_^]bg]Z`YWfvzvroruusljplk{yitua_XWW_eY[^bjofdzsfbba__cfeedbjnifimopmlnnprwzz}zlcbbbddbbbdefffecceefw}|{tvz|utrqohfefeX^e^cddeeor`WZ\\_]^eZ_eYWTQOUaijfys\\QMSm~x{kM\\iXSNQTTW]mqWFJKHJIIGJTUQRTURMKLLMOOOOOPPRTTVTOMNOQPL`nILLPPJGIIMNKKJINTWX_^]hooaEC[ndJGLIHJJKLLPSURLMXc\\QMOPPMLLKKKJIIHFEHHGHLONOOPQQSQOMPPMLLIGIDGPNNLMLOWMclTbVGJIVikmszx{VDMPWSNHDBCEFFEEEEFFEFFFGJKJJKMMMMOQRQPPOOONONNNKJJHGLZOBLf}aGc|qwV?HJIIGFEDEFLVOGEEEDAGmubEFUNKMJHGHGEEEEEFFGGKNQUVUUSRRPRRQQPSWYZMDDEFFCEJ??VXOSYWVSKNVigSUUURRRQSGSertppfWQWRRRQSVWXTQS[\\[\\]^^``cb\\SPOPQOOX]VS_d]WYaovqe\\WSRSSPIEGMPOQUYWPZ[OKGHKNQQLKKIHGFEDDEDCDDEDDDDDDDEDGEBKSN\\vqL@FFFEDCBAABFHONKE@@AA@@??@BBCDC<EUTLHIE=<;:998888;DLFFDCBCDECEGGP`b]^[QGA><<57J7<<=>@><ALPJFCFJNNJIIFFEELFGJIJKJFEEFHFFHHHGGFCBCFHKQXbeR>:<>>???>:;<>=;989>EKQQLE@>?A><;<?@CCA?>;977799985NN9::888888:<?@@@@?>=8=?5432334334444233238>::=93324:?@=988:>JRLB?@ABCEEGHHJKLNOPOLIGHKRWTOLFCAABCCDFED?<97778889::877534?LF<=7433335667CJJID?:8;;:;<;<==<:9:=CHKIA=<>@BDCAA@?ABA?>==<@LJISTSPOU]cba^ZWVURSQI@=@AAA??<3.2;A;47521113577::9975665444665456779:9:986654457:<<:637<AFOVUH<;>>>???@@?>===@=22<>=><<>>:7799766547:;;BTZVI@STF>86786/PN+3555444445547FGC@@CFA73554567554457863.+*))*-111/.,/410>HHMME8/0011.591,,++*+-++/0@Z\\D,/7416:9876303=?60463///,+,.0330*'*+-11,-0/-+*))))(*/1125;=733.,/1.*('%)4<94A;1.)-1/-++))*)(()+++,,-0/*()(%%'*&%%&)+-/-*,-**()/47:;<@@2,6>=@DB<21763+*.154.+4<0,,**+,,**-.*),/.01,&(.247768;94/,*/;>855422.*$&)047;><A]_93>3-,*+,*+BNC@?@;1+*0331010,,2=DCENN<,-7<90,258<;8GV[\\VJ6*+/1674/+3DKOWP>??./876765-),--..--,1<4$,3'%**-7<77FSPIFHNTVZb_C7KW;&++((*28>A<4-:WP:56*0PN0)-,/00/,*4:4jkllllkjihfedefeeda```abdddcbba`_______abbbceeffeedddeddghhhgfggghhijjjklkllklljjjiihghijkjiigdb`^]]^_`eilosvvvqkjkkjhffefgggiijjklllmmnnnnooonmmlhdb`^^]^^^^]]^_^__`bejruv|{rg`^\\\\]]^_`fhghgdgorlemz{xyzz~{fWRSV[\\[ZZZZYXWWVVVVUTSVX\\]ZTSWYZXVVZcihdekh]VX\\YT]hilrwuuwwwxxyvkv}~yqrofbYch[\\\\]`hjbltlfbb`^^cdeecbid_bknprnkiiiinv{yma]aabeedddcdedaefoszuvw{tsuwtqrjtmeugYa`accfki_Y[ZYZh|Zb_ZTQPT^hidqq[NMf~qzfRUVOKOOOPRQPR_l\\GGKIIIIGG[m`RQONLKJLOPQQPOOQRRSWWTOMONPQVi|oGLKNOJJLLMMKHIMGI\\qtswuyz^;>SNIHHGHHHHGFLVXSQPRSPMNPRSOMMMMKJJHGGJGEEGMRRRUX[[ZXUQRROMMIHLIJLKKIKJHEA<LIKLQMMdrmpw|z|XHQPPIGFDDCDDEEEEEFFDDEEEHJKLKLLLNNPRQPPPONNNLLMJHHJJGCFKQVU_uzWVytnsrKEIMT\\_YTPMIJPLFEHHIH@GFGQS^j_MV]QEGHGGGEEEEEEEIHNNQRXYWUSRPPNMRVYZ\\YOIHCEICJMAEZOBIX\\YVL\\yUTUTSSRQQPQQXj{urm^MLOPZWVXXWUTTTUTUWY\\___\\URQPRSOO\\je_jqj[Yh|zi^[[`lxysf[USSU\\[YLY\\IEGHMOQPLJIHGFEECCEEDDDEEEDDEDCBBDC>AHHMfx[BDFFBBAB@@@IMNMIEA@@@@@@?ABB@@@;>MRMMI=79::9888;@EJMNOOMKLLKLJMJP^aad\\NHJGCDC=FE<;==>?AA@CA=;<><=<:A@@;97348;;@CCCCCCDB@@@?>==<>AEFHOWhhK58AB@>=<>@?>=<;=A=7=HOSULDGKFEA==@BBA>;;;9789886;aB:998777889<?@@@AA@<7D@353233444434423323<A>BKI@868?BB?:99;;COQHAAEHHGGEEDEFGGGGIJKMRVXSKDCBCDBBCBCEEC@<87777667788867767BJA;97543567:CLLKG@;9:=::;:;>?==<AEHIHD?>>?@BDC@??>>??>?@@=ANSKKQOHDHLQWY]_^ZXWTRRLC@CCACA?=7103773432332223678::88887544554335579:;:8544345668;;98645>DJTYL<8:;;=>??>>===<>@848:::997446678756769;;=FYdS:@]cYRH>=>80FH36665444444536>2;HKJJC713455786367993//.-,*)+,2642/,*/2.3<BHH<2110.,053-((('(1;:772:PN9-.33049AGGB928>7/,+*+++*)((*1892*(+-..0001.,*('''(')053+0:7*+.)+;6-,+*((/BQQF5+)%+42.-,,,+*)(*+++,,*+-*'+,(%&+-+$'&%).,*+***)*+,17::98548<<BEA5++-.4.'D]\\ZS9.<>;;51.,+)*,,++/10030)),/156446542.*09:665/-56/$&/41038:<E@,)20-,-1,&:LE<<;94.047689:92,069;<<:814DSSKD>:66753?PX[\\WB.++.685/(*:FKOI;877:=>@BB@2()-/0,),++.+.392//+.<?6:MUNFCEKRZekj\\D>PL+&0+)'%'+)'(#:XE6693(6</,///.,**2510opppoonljiihgffffdca```bcbbcbbbaa`__^_````abcdeedddddfimsspnljiihiiklllnmlmmllmmlkjjiihghhgffedb`_^]^_bgmqsuwwxrnliiihfeeeghhijjkkklllmnnooppoonmlkhfb^_________`aab_]_bowvvvz}zhZYZYZZZ[[\\ZZZYZ_fe]ar|{{}~~tdXQU[][ZZYYYXVVVVVVUTTV`e_\\]YZ\\YXWV^kogerwcY__cgiha[brzzxxwy}xstst}uwuqrmjxuomjdgmgdeddcc_]]bcdc``_]\\_fnpoptxvyp`bbbedddeefhccimsrsyuuv{~tstvwxxvrkqY]_]^_ahka[[[XW^di[c]UROXeihgqymXPWptc[jeU`[SXTONNOPPOMR]XLIKKKJIIGOcok`NHKLNNPPPQPOLKMMQXXUPNNMMQKA@DedHKLNMJKLLLLJKKFJgxS=:=DFGJIHGGGFJTWUXSNRVSPSURMLMLLMKKIHHMHDGJNRTVXZ]]YWWVVWVTROLKKJKLKIIPRFA<GRQNPLZquq{vw\\KMMOIGFFEDEEDEEEEFFECCDEGHKJJJJJKKNOOOONMMNMKLLJIHIIIIIKOKCBXulPmrppdHKKRersokgcbaVLJLNNNORJFfveAZqV][LHIGGGFEDBEFEIECIOUZ^ZVSQPPPSW]ZVSMJWYFCJAFM?MYA4CQZVSdmMKTUSRRQPQOOKGOYheeifXDKOW\\^ZPV^a[VXYWWXZ[ZWRPPPPRSQSZ`jopid\\V_r|tc[\\`fmrvsj]SSRYbacNOaO@CLNNONKHGGFEEEDCCDDDCDEFDDCCCENRUUSLDIPaaIEFF@@AB@@DOSNMHBA@@@??@@@??>??;<JQONF;777898:>DIKLMMNONOMMMMLKIN[aedWJHIGGJLNNMB==?>?ACB?<<<=?>AB;;;<==?BGLMLKIHJKFAA@A?>>>=?@BDDFGHLVe^D9?D@>==A?>??@DFB805>?DOYVQOPPNJIEDB><:;=:8898:2M]6:988656788:<>?@ABB<6F@2553343444333233248:;@MSOD@CFFC>:99:;>FNLCAFLMKJHGGGFGGFGHKOUYWOF?=>@BCBBCCCCCA=965666666667879;95;GC;::63268;DJJJGB<<>><;<<:;>@AADKLID@>>>>>@A@A@==>><;;=?<?KVKDNPKEEHKNMMQV[\\ZXWTSNJIECCCB@?;2-0333233453111358:;98888644554446679<<:64335657889:777758=DNWN=689889=>===<<==??947988778766786568:<<;:=HVP>CV`^[YPC<57FC684253344333333,<RPJKE6123678:7646<9.+,./.,,.-273111..00,-6<9876651//,..)&(*1>FC=923AA63101225ALJ@7355+(++--+(&''().570,,.//../00.,*)))'()',32)/;.'')%.>84661.0/7L_E50*(,210./0.***()*)**+*+-,(-30*$,8;+,+)),--01-**+)&*3861/0116?D@8/((&&2MAbtnkjR59KMJF@9.+)*++,./22231.010..///012.+,./1584+,465/070')*-231.)(,.-,/1,6J<5<:66559=<79>A>6363.22.(-;Qdica^K304557?LSW^_S>+&+3651+(1<AE>1,1;>9<EHJL@,$+//))0+'')169:8645;=86DOJEDDEOYglifQ;<QC,5:5,&&&&(+*@A*1765530,0560*(&,40-4vvussrqomlkjjiggfeca```abacccbaaaa__`````adeefffeeffhkt|~|zxupkkjjkjklmnnmmmnnmnnlkjjiiiihggfgfdda_]]_chnrttsrsvtlggggedefhhhjkkkklmmnnooooppoonnlkihfbcdefb_``^`fhie^]^djecefijc[YZYYYYXWWWWVXXX[_\\V_pzzz~t_QQW\\]\\ZYXXWWWWWWVUTUY]]lxbYa__[W[hoigr|rdfjnrqmf_Zdrzyxx|vlpvx|ptwx}{qlmagr}wnqldnogcc`^^bcdbaaa_^]_emu}{p]_ccdddeeca_nronpuzuutzzqstuw{zyokαu^__\\_cejqm\\V]\\Y\\bex]]YVRQ]ihcmzpcUYqot}wnaYXSTZZ\\\\XVTRPQQRTQPSTQMKLMLKKHBC]uueTLOSQQQPOONKJKHMVXTPNNOPOMOTL?DLJKMLKKKKLLNNKSuxefO;ACDEGIHIIIGFOXXSONW]RMPRRLHKLKKJJKIHJHHKMMNQTVX[ZVUWXXZ\\\\XTONNONLLJIJMLLMKNSQLNYdr|zrk`WaQMHELHCHJHHGGFFFDDDEEDBDEGHIHFGHHHHJJMMNNLLMMKKJIKJIHJIILNGE?AWV\\tmp{XDJPdusooonnyycQPQQRRRUWHvvym`SIGGGGGECBDFFHH>@G[]\\bZWSQSUZ^\\\\VQJCI^WA@EBDJBLVB8AMTNYWHLQOQRPOOONNQOKHGOX]ZTOILMI\\rnSUmrd^ba_]][XUQOOQNOQRRSUVasiWVST]fg^XZ^cjlljc[VRT`lrnZSaUDCPPNMMJIGGFEEDDBABBCDDDDECALY^mnu}~cBJPTYPGCDB@@BABRWVNMHBA@@@@@A@<;;<?>==FOQND;:9:99<AGKJIIHJJJLNMLLKJIINX`e`PHHHHILOOPNKE??>@CDD@>==<=>@A=>BFLNS[hkki_YMTc[K?=B?>?AABCEEFEEDDIPXXQB??>==>>?AADKE<856>B?6JVVRRSUUUSNIA>=;;9877786RF698875456778:=>@BBB=3:;345333323343322433235:EORLGHIC=:98789;>DID@CHNNNLKIJHIKLNMMQTRH@<;=@ABCBCCCCBB?;87567666666788:::68GF=<;64368<DEDDB>:AE>:>><;;?GLMLIEA==>>=?@@??@@>=<<;;;:9?KPOHGNLIFGFGNOMIIS[[ZZXUTRKDCCBABB@<54543355553310256::99888644445446669;;:7534686566797556756=ITN?8897668;<==<<>?==96788878:97776568:;<:868BJF?JZ]YY]ZK<79=?7883423433322215COLIID95447789771183-,,./,),12561./64870*)-/.4>=;971.041*&'0AKG@;82.;D820/1336AKF>4/-)%'.9@>0'&'))))*+*-1100/,*-/-,+**+*),)(./.35+./.+.=DKG>0.1.*4F05B<40-02/.-,)(+*'(((((+032+.871,.68,5:40-/253-+*'&'+2420,*)+6CHC9/()(%DfNmxsnphMAKOMMJA9-'+/.001353420010/.-+,.0.+,01/2::30458>=96+&)))+/011/..--0-6LC/5<80179:>>87<><971++33,+9Obfaeh[;&*3568?IMWaaUB6338::72,.2560*.9?=76?HLRI2'-0-+--)()+-.0249;;9994<ICCMIFMT^da^XRFMQ>;<;5-(&(035B4!.78:::4/2990)'(/4/5<xxvuttsqpnlkkjihgfcba``aaabbccbaaa`_`a`aacfgfffffehnsuz~~~~~|vrommmkkklnoooppponnmljkjhjjihgfgghigb_^_aeijmlieiuukfeefecdfhhhjllllmmmooooooppqpppolihhghjkmka\\^^^`hkheb`\\\\ZXZ\\[Z[\\ZZYYYYYYYZZZ[[[[^_XRZoxpq~}jZQT[^\\YXXYYYYXWWVUUUVV`pd\\a_`]Z]djhglwwqmhgikjkmgbfrxsqnYlpo|vqmo}vle^jw~|vtwuuvt`]cc```bcddeedcaa`]lyrv{\\_fedeeeee\\kuoroqwzy|vtrzvqsutw{|{ypq`__\\bmqu|zk^Y]^YacayugdUSRW`bhq}}m]Sd|pzuhhd_ZXUSW[[\\]ZYYWUSTXZWTRRRPNLLMNNLIDFYkrgYURRRPOOOOLTej]QUVTQOOOOOONJIJJJJNPMKKLMMKEQuoPHngA@CBCDFGFDEBBLSQOOPTWNKLMLPUMKLLJJMLIGHJMMKIJKNRVWVUUVVXYZYUQQQQPNMLJIJKIJKMSRLJILUVRNKKJDFJOLNRNMLLJIIJJJHFEEDDDCEFFFGFDEFFFGHHJJLLKKLKKKJJKJJIJJINLHGEDIJvxlqfIDMZv}tqqpqvz`SQQRTUTSXGopaRB@DGGGGECDGFFFEJOJa^`e\\ROTY^ca_YSO@:L[C=DAEDHJHMD?EIJTzJ?GJKLMNNMMOMNQQKJKLMKKGFINLFQotVVmsjghgeb_ZUSQPPQOQRRRSTSNZwjVQQRRTTQQRTTY\\[[[XTOWbjjh^VZVOLRQNKJIHFFEDDDCCBBCDDCCIGAPkvu{[>MSSTOLLIEB@AAEOUSNKFA?@A@@AB>:78;??>=DMRPB=>=<;=EJKJHHHGHHIJJJJJIIIIMV^f`JFGGHJLLKKLLKFA@CCDB@?><:9;?AAIQTWXY`monjc^X\\ikaL<<?@ACBCDFFFEA<9<AFR`X??A>>>>@BDED;23433=:/9HQSRSTUUSSRNIF?:987752=E:7887764555678;=?BB@91482343323233433146510237<DMMGDA:6876568<<?DCB@EMOOMLOPNMOQQNJJEB===?BDCDDBBCBCBA=9765666666777789:;99B@:;;54568:>=>=<<<?B><==<;=EORNHC?>====>????>???=<;<;::@MROKEHLIFEDBAHOQJDITYZZZZWNFCBBCCEEFFA<97775566542223566899:96655654555579;;96558:75555776446757DSO>9<:7787:<<><>A?;88887888889867778:<:656=HIHA7B[c_\\]^YOGA<<:?=5675543332222AQOHB;6556678754343-,.010-+,277410/16;9/**,.-29:<:4./9;0(')2FKA95355@F1+++-248BKD<3.($(*5G?.*),++***(&%+4541.+)*--+))*,--,,+,*-22.1?C=3@U^M6+,.+('+&6RPH=0031.,+*)**)+)''*/4750144555/2)/240/0242-+--,.11121,+*.7BJJ?/)**'8GHyssprtcTPMPKJFD;,(/575456542100010/.//0111367;>9348:?C<;3&%*-,-069750.-,,6JE037<1248:;==869::93*+2645:HX[WY^W<()02579;;@Vb`ZIMQCABA<40000-+0>GA8425>FJC747841*'**,0..26=C@;8:<89CHLQQLQOOZ_[[ZTV`]J5.++()045595058877522255/+')145?Frrsvvvurqpnmmkjihgeedbbbbbbbbccbbaa`aabbbcefeeeefhlswwy{}~~}{wsrpmmmmnprrssrpppnmlkkjjjiihghhikifba`abccddcaelpkdeeeeedfgghklllmmmnnooooppprsrqpmkighjkjlpl]Y\\Z\\ehikhd_YWXX[ZYZZZZXYYYYYZ[[[\\]\\]]^^VO]nictziXRTY[YYYYYYYYXVVUUTSU[Z]b^`_]]abacelouodb__cekusikoleup[]]cotpegsyuqrt{xorxtuvtvvvu{}pdbdb``acdffgipmfacvvfdebcdeimu~uswxtz{sorx}uputsvx{zvlutdc``hs}yz}sf^Z]^_ie]t`ilLT\\chyjWYiqxuvriha^YVYYXXYXXYY[]^]\\\\[YXWTTTSROOPPPRRRU\\a^\\[TMJLNNOPLPi|hNOWYUPOONMMMLKIJJJNQPLLIGEAOswQ?LqjD?CCA@><:9<<=CGKQQQPNNKIHGOWNJMMJKLKJILOMKKJJLOOQRTSSSSUVUUTTUTTTSQNKIIJHJKLOLFFFCCCCDGGFGKMPT\\`\\WNIJJKLMLJHGHFFFFGFEDEECCDDDGGHHIIIJJKJKKKKKKKKKJJMKIHHKNNmwmpXEGPZpyvwxxxy[RRRTVVWUWHRwsSTPJIECFFFFGGFDFFFOFNt]URV\\aUJVX]f`\\WSVG;<U\\SQTLHEGILMIDHF^è_AFGDFHHIJLMMONRRONNMKKMPRRPMHHOVMNX^`cabc_ZVSRPQQQPRRRRRSQDLRf]PSSTVOLMLLJHHIIJKKJLNPPRTPRXWSTRMIGHHFFEDDDCDCCDEDGK]GFkkXDCORTNFLTSGCBBBFMNNMIC@?@A@@AB?:8:<>?>=BKTP@>>>>@EIKJHGGGHIIJIJHHHHHHJKS]g[GEGFHIIJIIIIJJFFGEFDB?>>=<<@CIW\\_]\\\\]deecba`aejndL>>BDEDCCEFFC?613:@BNXWIC????BCB@;833654;:6:BEHMQSTUTTTTTRJC=97951DD777777653445668<?BB>5277113222233333359;9432357;CFB>:53666558<=?@BA@EMPQQRSROKHGFDA@??>>@CGGFFECBCBCC@<87555665778877999;<<<86876578:;===;:;<<<;<==>>AIMMFA@A><<=>@@@@?>?>===<<:=ENPKHFDGGCBA@??BFILEDHQWYZ^UFBCCDDEFFFEDA;7:;777875322233368;;986576555554679::7577865545666546996<MN:5==<<<=?<99:<BB=9888998889755799:=<76<CIJA<?;:EVcc`bda\\VG;;E?5;?814433331+=OJA4*,045568742593-.034112367521/++361+))/4320496.,1:6+'(+5<<4/,/9<CE,&('*27;DI<61/-(,46<7-,.0-+***+)&(2:83.,--+,,))*,/2/,/20173+8NSD8I[R3'+,*))'&')MYWJ4053//,+))*,1.('.31/1551/022/+((+-.-/2651,7@9973121-,//57?EB:+)+)'+7>>@EIIPTWVRNKEH?0*/67544431110002212211243357865007CLC3<4#&*-/.28<763/-)-BE..714?HKFA><;65:85<7/3:;<=AFOTZZSA2/5>;<98707UfdhZ[_JDID7-.0-,-15:<4,+*(1:@>9::=>4%*6.,58:<@GKD;45:;7=RYPLKKIFYh\\Z[\\djaJ4&'+')24421688:951./0.,/.*')-3<CEfjqutttsrqnnmkjiihfedcbbbbbbbccbbbaaabbbcdefeeefgkotvy{z}~zxtpoooopsssutrrqqpnkjjjiijhhhhhhhgdba`__`abcddegfeeeeeeeghhjkllmmmmnonoppqpqsssrqmjigghiijpukZUY`cfjljjhaZWWXYYZZYYXXXXYYZ[[\\\\\\\\\\\\]_`WS\\^\\cswrvxdTRWYYYYYZZYXWVUVTUVVZddcaa``a`^``bjpndedbc_^juqjeefpxl_[YYdgbcmrooqpow{psxunsxqhqztxpfqbcddaaaaabdgn~uhdt~|uzm[`a^bgorxxuvzvqywyyyxwvutwxuruz|q~zhcbaft{|zwtkc]Z]^_hb]tpR_UR[fzpQ`gcjqpsqic`\\VWXWVVUUY\\]_cd_\\ZZYXWVXXWUTTQNNQdmd^VUYXTMILNOPMJOVUNIQYWQONLLLJKJJJJKMNNLJQZWhS@BUp`D?DDA?=:88:;<@ELPQPMMMKIHHOPOKMLJJKKKLPRNKMPRVSMLMNPOOPQRQRQSSTTUTRPLIIIIJJKMIFFEGJJJJIJJLNSSUZVURKIJKLLKKJJIJJIIHHGEDDDCCDDDFGGGGFHIKJJKKKKKKKKKKJKKKKJKMMQlwnhNCGR^itxxy}~_PPSUVWWVTTJS^TIBEGHGGFDDEEFFFGFT\\`zkaLU]OEnp[`b[UVYP<;E^]RLJHGEHSOJHIHAvѼVQSKIGEDFHHJLORXZVQPPNOQRSSPMLLIJPRPRZ[Z]`\\VSQQQQQQQSTSSSRQNSUcbNSSUTLJLKJKKJJJHGGGEDCCDHLLW[TSTNJFFHFEEDDDCDDCEFETfl@`~tSHGJOPPLCABGHBCCCFJLMMG@AA@@@@@B?9:;<>>>=@IWH<>?ACGKLKIFDEGHIIJKLKHFJFEHHObbNFDFEFGGHGGIIHIIHGGFFE@???><>CJV\\][Z\\\\^`bcddccdhrzjQCBCCDCCDFFC=5465;?@HZUE>???@@?>87458:;<==>?>>BFFGLQTSTTTTPI?8;9>J?668777553223557:?BA;33851223323333338=>=;73134568988644676559=???@@@FPUVVTNJGB=:;<>=>A@@@EHHFGECBBBBCA;8656666677887899:;>><7664578::;==<::::;;;=?>?BGJIEA@@?>==?@AABB@??><<<<<=CMPLFFFCEE@>>=>@@?@GLFAJVY[`SBADCDDEFFFDCB=9::887887433221127<;855776655554568;;87666665555546777976BK>5:?BDBBB?9798<A@;887898899645789<<86=FLH>64=DA77L_`^````P=;C@8<EA:7433330,7:43/+-13455433236565201/.0451012211250)(+2751./01-,073)((-45---,.8<:D0#))*048=94/000+-32.,,052.*)))++('/=?5/375-+.-*(+/3215999=6*7TTD9;D>)&,-+)))'&(IZUD30520/-+*(),0/)*284/04420.,***((./,*+39956=A=;:9520-+020,2=D?.)*(),21)&''$'.4@O[QC@>3/1354222/././//121232246541--//+)5MQ4-?C7)&+1235;873//-/60*-1,)1>DEC=:712=?;AD:8?A@@B?=R\\SHLJ47KM@;8209Qjlnjc^KDH?/+02.1;AB>9647734=C>4.4==5/?E,,;CFC=ADC<1/5==<KULFEAAOd`JPY]mgF/---,(+2320/6:8973-,..,(+/,())4?<9bflnnmnnnmllkjjiihfeecbbbbbbcddcbbbabbbbcddeeeefhjnrx}yx}~|yvsqoprsttuutssrrplghjihhiigfedddb``__``abbccddefeeeeefhhhjkkmmlllmmmnpppqrttssrnjhgggiikotviYZbcflmkigkke_ZWWXYZYYYXXXYY[[[\\]^]]^_a`ZUUVX\\abcss]TWYZ[\\][ZZZXWWWWRRclhfddcddc^]]^djjjklkhaYW_fe_cnpookea^YVX[^acfkqvvx{yrqspjoxyjn~w}|kb^chgcc`__`eiisuq||x}{mtsilrx~vy{sqztxxutttuuutvx|q{ha`aedlyxwwqhb_]\\\\`jb]h_UWvMXh\\pzneipsneb``ZWWUUUUY_`][\\\\\\]][YVTUXWSRQTTRV\\hqnhb_[[b\\QPPONMMMLNNJJPUSPMIIIIIJJJKKKMLJIVctd>CAYmS@@CDC@?><;=ACFKLKKLLLLJIIMNNPNKMJJIKKLNNMPUVUTKILLJKJIIIKKKKLMOQRTRQMKJJIJJKLJIIHHIIHIKLQSRVVQOHKNXUKJJJJJJKKJLKJJKIIIGFEEEEDGHEEEFHKLKKJKKKKKJKKKLKLLMLJLLIMmys_BDOcstuwvy~_NPTTUVVUUUVPPRGDKKIGFDBBCEFFFFFHbsnbOXYSxhY^\\XRVP:AHOYSEFMOJKNQJFKIEE~eS[ZRQMHFGIIJKLJQZUNNOMKLMKLNLKKLMY^YY[ZZYYVSRQRQQRSTUUTUUTQZbO_jLOSUPHIKKJIIJHHHGFFEEEFFHGFT`TOVUNEDFDDCBCCCEFFEGL\\v_Lvpt_S[aHNONIC@@?ABBBBDHLLLFAAA@ABB@@>;<=>=??>>HV>;BEHJKLJIFBBCDEEFFIKJHGGGGGGL`ZIGFHHHGGGGGIIIIIHHGFIGBB?@>>CJMTZ[[[[Z]`aefgfefiq|zn[JECCCBDEDA95668:=ADGRI===;:;;<:9889;<=>?>ADBB@==?EMTVTTUVUK=8<JI9888776545323555:>A@:5475234332333415@A>><73234544455544775568=@??@@@DOVUQKD@?>;9:=?@CGD@>DIHFFEBBCBBBB=:778777777889::9;=>><97446799;;==<;:::;;;<=>AEFDC@?===?@ABBA@AB@>>==;;<<@FLKGFGECEE@>==?@@>=BHHBEQX]aUEADEDDDFHGEED>865555444331000.05::745666656545568::876666655556678888857EF96<ACDB@@?=>=;=>:8877877777668:;;86?HIE>769@CEK:1JYZYZY]WC;@B>=BB?8433430.--/2344235530.10//6A@3+*)()+,+.58864134-+156522/,,.-.//+)(-3,+452044/B9,42-.-,+)+-/01,,-)-2263-*(()*+.-&+=A32=@6,*-/,)*0359<>AA<3*.MS>:0/0--/1.**++'%=ZI3-02/.-,,*)))+--.5@>50.1551-)**+-56+*),4:4,.2037:61/-+./-),684+))(,15CPOG?60*! *<KE9;972..001-**,+-/0220/--,,145/*+-,)&7PA%2@KQ2\"*56548761.3:2'%**()(*5>><995-.>F;6===BECBA99VaMLYP17PPD:3/2>ENUbslcXMC5+0;64@ILMMIFIONGCIJ>-(293;JVV:1AMQG:78AB0&0>H@@FF@@?DTUFCSZbkR/ &66./10///06:8742/./0,(+0+%&,699;iiihggghiijjiiihhgfeddcbbbbcdddccbbabbbcddeeefeegimpy{ty~}|ywspqtuvvvvuttssrpjehlifghhdb`^_`_^_`abbbccceeffgfgggghhiikllklllkjloppqrsuvuutpkhffghikopsvk^`jmmnqi^etvph`]]]][[ZYYWXZZZ[[]^_^_aaaa\\TRTUWY\\clooomnzr^VW[^^^^\\]][ZXXXX_gdadffgffeda__cfffggihd]VTVYZahfcgkkkjidb^ZY[\\]`itxurrrrohbe{zm|pZdhgcca__`gjhct}yr{}|zwvprxvxurqwwyywx~}tyjcaaac_csvvwof`]a_YcqfY\\[YRsZ]t{hwrjgefia]a_[XWUTSRW_`]YWVVWVUTQNPTTQOKNWZ_ca^\\]`dhffd^XROMLMPRPNNKKNRSOJGIJIKJJLLLLLINLMsADD?UbF=ACCCA>>>?FOPLKIGGIJJJIIJMNLXSINKIGHHHHJLS[]WPIINLJIHHGFGHHHGFGIKMOPOMLJJKJJJJJIHHIIHKPY[YUKJLQTNKTRLJIIJKKLLLLLKJIIJKJHHHFFEGIIDBGJLMLLJKKKKKJLLMNMMLLLKJIJHPn|xYEMe~}ywvz{XNRVUTVVUUTTSJEGFHJIGEDCCCDDEFFECMqgeqRRLzdQXZZRWP@BKNRUPVZ^XPJH??BHH?IrǵmOZ`^YUQNMJIIIHGEGURLMMKKJJKJJJJIHK]a\\[[ZXWUTRPQSRRTWZXVVWWUR_bNZo^MTVP@>JKIHIGHIIGFFFFFGHHIFKaUISYWFBDCBAABCDGHIFH^iuK}ockfdjquPNNLGAEHGCB@AADGIKHBAAABCDC@@?>>>>>??@?HN@CJKIHGFECA@@@@@???@CDCDEGKNLHOJIIIIIHGHGGGIIIIIGHGGFECA@@@>IVTSVZ][YWZ_cghihhhkouwvmaSFBDDFC@<53558:=?=<AF;8645779<;;;99<=?=>DIFDCA@AADKOQUVXYUG;=JC<=978865563334668;>>:756545544333334=D?;>>83324534555554576448=?>=>>>?FLKGB@?>???@BBEHKH>=CHHFFEBBCCBBA?<:9:99997789;=;:;<==;;943688:;;;<==;::;;::<AED?>>===>=>@BB@?>>?>>>==;;<?FKIEFHGFDDCA???@@@@>=AKGAIWabZIBEEDDFGHHFGG>51/10111220/////1588656666676554568::876666555456678::8866<?97:;<>?@@AABA?;::998666666777:;:79?HIB:89:<B<7]c72LXXYX\\\\J;?GKFA:6764331/.+/:>964245651000/.2AD6,+))(&&+0110-*),21264333641//..0/-*)-226=;50+).?D8<91./,()+++,4;.)).7?;0--*)+,-44++75+5B<.),./1,*155;CEF@5/,*;KD<0,-02353++//-%1S:'+10+,,,-+*))'+.18BF?5-/562/&$((*./+&$&*52//40147732220,)*,/.+**((-22Hjrpnr{v\\E9/2FF7861.,,./-+*+-/03420.-+(%'*+*01,)*)5A-\"7>HY=$):>4.2320/:>/#&(('))(-;>:<@9./BF2)3@CGHGFB9?`k^OENHLVI@9426<41;YysleQ<-(4@;;EGDJUVMR[XSWVNB;=>6.?T\\ZB<IORH50-3:/+7AIJC?>7:HJE88XfVPK8)%,?>0:A5*,/05874100011,(-0(#*466?Ekkigffffgghihhhhgfffeeedccdddeedccbbbbbcdddeefeffglqtvy}~zxvusqstvwwwwvusrqrrmgfijgdfhfba___^^_abcbbccceefghghhhhhhhijjjkjkkjjjnqqqrsuvwwvrmhfefghkmmlprgaltoptqc]gmklmic`\\[[[ZYXXYZZZ[\\___`bbbcc^XUWYY\\]\\[YYYW[giaXVYZ\\^^^^^\\\\\\YX^c`YUcojihghhfcddca`__`_aa]XUTVZ\\[Z\\ckowzxsmjhfba_abgkkhhjie`]grj|u]figcca``agmlkkor|{w{|s|}{~}}zvut{upxxwusquww{wj~icdbaa_dc[ixypf^]__gfcfa\\[\\Ucirre`hsq``eY[a^\\YWTROJNX_`]WTRPNMNMMMPSSRMIUaYNLIEK[gnnhfYMPROHFHIKLOQNJLRTOJIJKKKKMMMLLIOFNPEE@AQZC>DEDDC@AACPYUOKHGGIHGFHIKOLH_`KNLHGFGHIMNMQX[ZUMKLJGGHFFGGHHHGHIIHJKKLLKJJJIHIGHJJKKJLRXSLOHFLSVOJKKMMKJKKLLLMLKKJIIIIJHGHHHFIPZ\\UJGIKLKLLKKKKLMLMNOMLLLKKHJKGYtwUIZ~}{uUNRWUTVUUUUUSROKGEFFDFFFEDDDEEGC?B;GJ_OR?jyHZ[[XSVNHWPIQV[[PIHGCLKIIIJDGVĸQJY[][YROOOLIGFGGFNRIHHHGEFIIIHHFCI\\a\\\\]ZVSSSRQRRRX^__ZWWWXXS`aSRhmVROIZeO?BIHFGIJIHFFFFFHHKJK_YEFQWQFBA@??ACFJLLFKd{m_i^gc_ruyfGLJFBCMOD@>@CDEGJD?ACABDFC@???>>>>??@BCCDIKHECA@??=>>?>=====>@>>>>DJIDGCFHHGFGGHGGGIIIHGGFGGFDA@@?@@HXYSRW]][YZ_dhjjhhdcgnnkf^\\RABHG@8541249AFA:8998886678:<<=<;;:=ABDIFABCCGLIEFGIKLOUWTMJJ><=978864664334667:==9656577544343348@B>:;=83324434455554566547<>>=<<<;=@CCDDCCCBCDEFILOF77=BGEEFFGFDB@@?==;::::97788;>=;:;<;;=<53679::;;===;::::9>DJI@=?=>=>>==?@>=<<==>>=====>BHJGFHHGECBBAAA@@??@@=DQOBARa`YIADDDEFFGHFGF<3///0101110000/024687566667765556689:9766554555556789977754887:979;>?ABA<::99987655456567767=DFA:989;<>@7(N{c:9NWXY]ZH;?JPPMD;7554320-)+=H>5434679965430/8B?93/-,*+./,***++*.365.043666655651-(%4MQE;51/,)+<E410..144330.*+=7&'3BA:4363/**099/+-'&5;/')/431-*0426AJH=3-+&+AQE1131334<:0450).D5'+00,,+,.-+*)'()(.?G@8224520.-,./,*+(&$(+041464566768971,-/../0-)),02;]RnnjaD;K<54///,+.0.-.256764200.+'$%%'/3.-.,06*(;?CPB)):=2-/00//2/%$)-0.*(''1;;?D>9GRA)4AFIIIIHE>H]ilA)WfaZC;;:8610?F_{qncC0(&5?;:;<;@QULS[W_ji[MMRM<59BOE4=HLO@+.1.21147DMD>@8=PK902NZB/(14'.FF5:KE2++,-.01/,-..-)(-/./288;CCiiigggggggghhgfgfffffffeddddddddcccbbbcccdefffeefgjoos{~~|xussqqsuwyzz{{xuqooonmhcgkgeggcbba`^^_bdcddccdeefhiiihhhhhhiiiijjjjjjjlopqrsuvvwwvqifefghiikjdlukcovssur`W[]`dca^\\[\\[ZZYYYYZZ[]^_`abcefghe]WXYYYYWVUTTSSWXVVUTX[\\]]][[^[[]ZXWTawpfgikjgeeeeeb`_]Z]b_ZWUSUXZZWX_cjllkkkkheffgglqjaaabbbdjtjz}|{ydhjcaccbachrppnkkz}jei|{{zxspqqrsqsvqgqvm{y]^~ygcbbaa]hfTbx{rg][adqsa\\^]bcel{m\\fsvqhZ[c`_\\YUTNHKQ[cc[UTTSRPPPPOPRRRQJOgbGBEHSbmpnf_RDGNNIFGJJJKOQMIOUQJHIKKMMMMMMLMOHUVGIB@GWM?FJIGFEDD?>HPSSNJJIHGEEFHKOJDfnPLKGEEGIMONHCIS_aUJJIDEFEEGHIJKKLLKJJIHIJJJJIHHHLLJHJLOOONHGKLKMPONLKLMMMLKKLLLLLKJKMNLJIGEFDAGPV[cj`XNJKMNMKKKKLMLMNMLKKLKJIIIIKfvVFnpUPSWUTUTUUVVTQKEBAACFHGGFDDDDCFA<@:B@@GK>FMFS\\[W^SLS\\TLQTXRIEFBF_XZ^ZUYM^ȪcHNSUSUVTMJMRQMJGGFISJ@IHEBBCDFFFFCHS]Z^_ZRPRRQQQRYdigb^\\ZX[ZTa]PSWmiKKeLHDGJKIFEFFFFGHKJLYYH>AIZRF??@?ADFJLLHJYo_t]bg`lyw~}GHFC@BNRGB@BEEFFHB=BC@?CFC@???>>>>???ABCGIGDC@??>=<=<>=<;<===><;;;>BEA><>?ABCDEEEDDFHIFEEFFEFDBAAA@ACJVUPRY_`^_cfhikhfYPU_\\URMOWLEDB824=:>GOUL<877679:;;;;<<==<>>;@EIMMHECCBEKIDFGIGBFKNRUSI:7<:997556644334679<;8555697444345579;<:87664333332244454545546;>>=<<;9;?ACFHGGFEDGJKMPRC216?FFEDDCAA???==>;9::::8688:??=;:;;<=<867889:::;;;99:;:<FMJA<??>??><===>>>>>>=>=<;<@AADGGFFGGEBBBBBAA@@AA?>CPWTIAL]]UGADEEEFFGGGFB9320022111111100013686466666776557888876655545555468::977766787999:9;?BDC<548:97775455545613CKJF<469::;==:*5le;<SZX^WD:AKMMME<5343342/**7C=546769=<7:<4//2:CD<3/-.110.-062-..482*.43489999:4/.)(Dhp`F61/-+'5D,'()-376530.,*6=.(2<9348;82)),460-,'*11*),0430-,.115;=A@6.,'(EVC.263113AH;:62.,44.-/0//..,052+(('\"%8B96:97543444560()(('&'./-,-297479::9655444571)*,.0332inXipT6BA420//-,/00/49;:765322/--,+**,/10--1631<=:>9.(11/21220.,))-2597-((%*4;<>=EVV9%?PIJJHGHGFLOgv8\"Zjf`L@>@<2*8RO`zrqX-#$->?516<98FPPX[^kttjWQUTLE3'0,&/=KI5)7BDHJ<+-CMDEHAFMB72/385-&-1'/IE9;>E=2,()*+--+)**('(*+7>;66=:1hhhhgggggggggffggffffffddddddfeedcaaaabbbcfgggfeefiknty}}~|zzwtrqqrtwy{}~~zvrpnkillgghgfeedba``_^_bflojfeeffgijiiiiiijjiiiiijjiijjkjmqstvwwwwxtkddeffgghifl{tcmyustwlXVYXYZ\\\\\\\\\\\\[ZYYYYYZZZ\\^`bcdeghkmj`XWXXXXXXWWVUTTTUUUWXYZ[[[ZZ\\\\ZZ\\\\[`fic`dhhfddfgghfdca`b`^[YWUY`_ZXWX[__``befffgho}|i_`abbcipynp|yrwyvlji`aaedcfmusmmq}}sdbt}ytsvvsnlortruyr{xWTvebbba`^bf^cv}si^Zissy_][`kkj}u{|shintk`fh`]XSIKQVa`_a]XVXYXXWTSRRRQOPURLetWDFQ]emqpdTOHBHKKKKNOMILQQNOTRKIJKKMMMMNQRUVSTm`@JGEDEOJEONKHHFEE>99@LROJJIHGEDFHJLFD`sWGJHEEGJNNKGDEJS^a[PHHHHFFFGIJJJKJIHEEIJIILLJIFFIIJNPMKHHJKKJIJKMNMLLLLLLLLMLMMLMLJLNNLKEDNWJADJOKOYiphWPPOLLMMMLJIKLMLLKMKIIFHIFScOQmURVUTSSTTUVVRMJDBDEGKJHHGFEDFEB?>?A?@>@@FCA>H_\\W_QLTTNMSTSPOKJGESR^gd`]V~HIMORNPOPKGGMSVQIGFHSIKleYSLIGEBCDHMKPY_`YQOPPQQPQ^iifdb`^`d]XdWLXO\\hWnSIHGGEDDEFHIJJPVJ@?@QUMC?@ACDEFIKJIMV\\i_e^k~||RFB@DJNSMBADHGFFE@?BB>;@C@>>>==>>>??@BGHEDA@A?>>>=<=<<<=<=<<=<;<<<=>?@=;978;<?@??@ACEFDDDDBCCBBCDC?A?=IQQPS^defghgffc]RJJMKIGEFJRVMGA?DRZbhgU;59:989::<>??>>??>?>;AECGIIIC@>?BAAAFIIFHIIKMPH:<B>;865555443446689:8776798664445677665444443333222334345555359>>=<<;9;=>@EIKKJIIKMOQTN>656;BGFA<8:<<==<>=;9:;<<:7879@A><;:<==<;978989999999:<=>DKK@9;=<>??><=====>>>=<<<>?@BDDDDEEEEDBABBBBA@@AB@<@NWTSPGJWZQFCFEEEFFFGGGB843234223211110111357646655677555577887655544555568:::88976787788:;;<=AFGE=3379887544444443;IIFFE=789;<<9;41SQ2JYWa]H:@OMC=6442245545<<..668==;<A<4<?2-/.1:A:2--0452/.184*+/482).512:;:7420-,'6_mg`K43330'6D)#&*/584/,*(07/4G7(.6.39:52.-+.4321/11/./130----..08:08D705-+KU7-146513?GB?52.+-245322121,-64-,-.*&/953:?>8.1788620,00.,%*.'(*&'7=96788779;<<;983.----../\\P>KPJ9<?4-./.../..29??:4364200/000.//-/-+-10/4<4,+((('((/10///0147;;=;/)(%)49636CNP8&<PKKLJHIJLIDeO1S^cfSA@B@1*ASGWxqC\"$)>PA-,7;1-:EPTR_ttpqbRPQOJ6%-1*(:G=15CIQhkC$%>SNQNFH@2011-1;51,'%4J:25+4>4)&')+-.--,*'&(&'7DA6295-hhhhhhhgggggfffggfefefedddddefeedca`aaabbddbacdeeeggjr|~|xuyxvuspmmortw{|||{xspooniegkliffgededb``bbb`ewwlffhhhjkjjkkkkjkjiiiijjiijjjjjmqtvx||zyysidddddeeglptvrswvusuugWX\\\\[\\\\\\\\\\\\[[[ZYZYYZYZ\\^`ceegghikia[XWXWWWWXXXXXVUVVVWWXYYYYXXYYZ]_`^]^^]^`a``bfhgjjhhkkjkjihea_bba_]\\]^_]^_`begihlwwg_acccftt}}lmwmpolmlg\\lcfffhlosrs}naj{}yxvux}wsnprrw|yzyos{mLQp`_aaba^^`]]o|uh]^lt{oZ`_[ipmnx~z~~~~~~}wmopfaab_ZNEQafnqdWRRTWYYWVVTTRRSRQPVVJWtaBER]dlsp_LIKIHIJJJMSTMJNQRQQRNKKKKKKKMRX[]^_ZitCEGGFFDKRONKIIIHFEC>88@GKKJJIFDEFGGGEHSodFIIHHJLMKIIJJIHLYd\\PLLIHHGFHHHGGGHIMKACHIJLKIFMJGLVPMMGEEHIHHHIJKJJJKLLLLMMLLMMMLJIHHHIDGX`a_[TDAA@Mdk_VSPPRSSQONLKKJJJLMLJHEHHEDIGemUTVTSTSTTTVVQIJJJLMMKIJHFDEELI><=>><=>?AAAB=I[[[ULIKIFNSSPLIIIIDBKU]^\\TV׭YEKLNPPPPOMJEDGLNIIHFSHZykkfgf_RH>AGEDV_`[SNOPOOOPX_^_```a^\\X^dVPYVI[ï[HFEFFEFHIIILYNAA@DJMJCBEEDDFHIIHEPcj]_TrTD?BUSOSOD@DGGEEC@?A@=<>A>=====>>@A?CGGF@>>>>====<<<<<<=<==<<<<<<<====;;:98999:<<<?ABCDEDB@DA>>CCB@AB=?FRVUXbhd`^\\YVPLIHFFFHIHHHLTURU[]`gfcT<3:<<<==;==?@AA@?@?=;:>A=9<?D>8;=<=>?DHGFGIIJMLB<BDA?97555554444556777777898665455566543344443322221124345555449>>;:;:89:<=BKOMLLMOPRSRB:<;88;BA;779;=>>?ACB?=;;;97669?A@=;<<;;<<978989988899:<>AGJB98::;>??=<==>>=>=<;:;?DFFEFFDDDDEDCAABCBBAAAAA<:IVXSQSNHQYOEEGEFFFEFFGID9434444432111000233565455566665556677555543444446899998899667767999::;?EIJG;24778865444444:@>BFHKE969=>;8775BsU-?PVacV?>KF;61/12245546LO7)/7>B@<=@;466/.//.4;5-,.1685/+,/1.++/8://5/,8=93/,,-)&Ow]FC9-023.'6D&$2;>BA51/-).;9<SQD0-17;:2021//241014201111/++,-..1<?25>65666DH/.48<:33675632/*-7=<968621.,.../021*)0412<@:0-15330.2265/*:>-#()$-?D??=9788::8511/00/--..0FgCBA@@=:;3+,--./.--3=A?725950044/..-.-+,,,,,(*3=4/,(())'&*,+++.29;75:>=0((%)361/4@ISG9FRPQOLIIJKIB]sQKN[YC;<?A2/LM>GdvW-(19LSB+,4.$'/6@A;OpunumXSPC98@C9**<@53?E=AduN,(9RVUSNG5(+-/1;;*26'#6E1'*#+A6.;67>:2020,'&(&(2DI:6DJHhhhihhhghhhggfffgeeeeeeeddeeeedccba`aaba^`dhid^_ceffhqzyrljsyvsrpnljijmmotvsqomjhjlmkhfhjjjigedccbaaceggjysifhiijlklmmmllllkkkkkjijkjjjjikpqt|}}}xledccddeggkswvuvvusxwaV]^^^^^^]]\\\\[[[ZZYYY[[\\_bdeefgc^^edZXYWWWVWXYYZYWVVVWWWWXXWXXYYYY\\^``^]_]\\[Y[]_bcfhgipuusrrqqniebbfnja]Z^a`_abghhikngabcddfsyypokjimkkd[~hhihieky}|qv}xijkiirxttxusrtsw}xy^ZkaRTg_acbcd`]\\^[fwug]cluoUY^eopopv~}vn||z{{{y}vxrb^\\]\\QM]p~i_WSMNORSRRQPQSSSTUUSSSPOb^HLSXdopfUIGNTLHKHJJOTQLLOQRPONNLLMMLJP[_`beovjDGJIKLOPKFEHHHIGFGE@;8:BHHHHFGGFEEDEHLkmKIKJLMMLJJKKKJHDEP[\\UOJIIHGHHGGGGCOqsYGEHHGIIF]|bGF\\qXJBFHGIIIIJJJKKKLLKLLLLMMKGDCCCGPPHDLV^db_ZUNHMQUWYYXWVVVVTPMJJLMLJHIIHGIHIngUTUTSTTTTTUVPFHIGHKKIIIFDBCFMH<:=?==?@@BBCDEGMORHCDGHGNNNMJGGGGDDIKRROO?|IIJMNONQRRTQJFBCEGIHGQPMa^arzzxrfZLB9@@Vab[SNMMNNLRWXZZ\\\\]_`ZS_`TTSShОwz~fRDBDHIIHHHIUUECBCAEJKHHIGFHHHGGHGed[MUw~uU>APTRQQMFCDFGECCBA@?>>=?>=>>>?>@@AACEA?<;<<<;;;<<<<<<<<<====<<=<<====<<=;89889;:9<=>?@C@@AD><<??@ACBA?>IUVUY]XPMLIIFEEFGGGHHIHGHHNQU\\\\YYQH;6:<=<;:99:<>@A????=;::9?D>;=;8:@?<<<;@HIGFGHJLD:;;;>?=:755665644655566679998665455556543444333443322233355554449==<::9769=>AIRRQQQRSTUJ::==<:>@;799:;>?ACEFEC@<;866659?AA?==<<==;987888877699;;<BHE;99;:;>><<===???@=;;<AFHHHGEEDDDDDDCBBDEECCCCB?;CRYVRPQOIOWMFGGFHGFFHGIKC64445654321111221246653467776666566655554455455579:;;;9899755666877888;@FFGB52776777754347=><?DGHMB65<>=97988e]&/BMZdbC47485104974461<NPE1,8>=957:752.,-.01485./20276.*(*,.*'+4@=54-(044440++7Kno<-3.++,.,)8D/@PMJG>3/.,(*7ACA=7-+.6=6+*//12.,++,,.022/+*+++,..1?E8/469:DD:4.06::7210-,+.1101;BA=<=:3.0200/122410000/3763222/.,**-01.,8K@($*''2DPTG603420-+)),,+*+**.06[xf@;B<@=9782---..//+-5;:745:;41497/./.,-//..*-,,8@9@@=::74.+*)))-1:<527>A4)(')1433;CLRTRQRRTPMKIIJMGU{fC>G>1347707NB<=AF.'/6>CD@1--&%*-*,..>[lrul___I,=^R4%*7;56<>64F[P@79MRPW\\R9'(+-4C9\"6=,(38)&)&(;<?_eagW:.0/+'&'+-3EK<=]ohhhijiiihhhggggffeeeeeeeeddeedeeccca`_``_clu}zk``cfghmpnkjkntvroomjhfeffghhgfffffgikkjggiiiihedddccccejs{~zlfhjjlmlmnonnmmmllllkkjklkkkjihihiouvwxz{qecccdca`]bpuuvvwvsvzoZX^____^]]]\\\\[[[YYYZZ[[^abbafid[UZ^[YYWWVUVXYY[[YYXWWWVVXWVXXXYYXXZ[]^]]^`^ZYXWX[]abbhrrkihhjhdba^f||tgbhjkkigffgihfbcdeehqqp~lpgjnjgdakmimrt}~}sqskjmnmuzoggfgsxssqoqwwsy}{Y[[[\\\\ywa`\\V\\cbhc^a^_mqdZ_r}rW]celonorxzrszvuuwywyuzoZ_^SPUiuWPSSQQPOOOONNORTUVXXVQRZTPQQZ[V`g_RKHHLPOKEDJLKMONKMQSRQPPONNOPNQ_cbgsûa@LTVSMFDCBDFGIHHGGFFC=99;?EHGGIHGGEEGGauUFMIJLKJJIIIHIJGCCKV\\WPKHHHGGGFGB=EZdlePGIHHIEYkTOqkaMFFHHIJJKKJKKLKKLLLLMMJGDDB@GQJ@9;AKLRRPID@DEO[`ZVUWXXYWWUPMLLJIIHHHHHJHiz^VUUTTTTTTTUVPFEDAAACFIHDBBDFFD??@BA@ABBDDEFFGGHFEEFHIHMLKKIGFGFFFGJKIGG5tаSDJHGMKINPQVVOIEDDGGHHMWHGGN^klg`_^]ZSNAWed\\RPPNOMQ]_\\[Z[\\YZ^YMaaMSTUeuornqupY@=HIEFGDJTGABB??EMNKJIHHHHHKMD[}aUB^qMBSYKRUOIFEDEECBABCA??>>>=>>>>?@@@AA@>=;;;;;::;;<=><<<<=<=====<=<<<<==;;<;98889987899:<>>CFA=ABABDDDB@?<<DKLLKJGFFFGFGFFGGGHHFC@?><CKQUPKC;;>>=<;86788:=>?=<=<;;::8>JLE@;9CH?<;:9;CHHIJJKI<9:99;=>>:87877644666655589986544444445455555554443333333335554448;==<==;89?A@AMWVTTTVTOB>?>??@CB<89::=?ACEGFFBA=9676659?AB@>=<<=<;:8777887668998=FF<79;<;<=<<<<>>>>@B?;:>EJIGGFDEEDDDDDDDDEFFEEEDA=@NYZVQPQOJNVKFIHHHHGHHILH:2464665543333333224443468:975666555655444555555579;;;;:99765456666799879>DFD:038866664346:<=?AABJRJ:5<@?<:9:3Lu,#6:LceK/&,54018<<7573:MP>/0453/035561,+,-/14433661035-('''(),//7:32/)**,49736KlzW*'/+***++)7JF[_TNH:0.-,((1@D?>701.161)'+-/.*'&()').1/-++,.//0//6<3,-4=FPB,(-16962//-***,.29==?@?=?<3/0454343034641352000001.+)(((((,(*2A:)#+)(:[]8-.245675,,540+'(*,-.04515;=C=1162--,,/20-.45/.3:=858:851-./17820/.2/(<@7FNLLKD?8-*(&'-079668=B;-((+1335<?::LTMMONLKKLMLOKKm}\\B:51..01.1<<7HE.$$,/001<E:-*'+01,&(/7BUipe\\enX5JhW>1/3;;99=905CEB:5JVU[`_I,&*+7M?*@D.,-,(''+-,?NfxG+**)'&(/7;;=6H~~dhijiiihhhhggfggfeeeeeedcccdddedcca^]]aem|wkgffijijkknrstromlhfdccccbbdddffghijjihhihhhgfeeeeeedekv~ogikklmnopoonmmmmmlllkklllmlkjhfeccddfikmleaccddcb^^kttuvvvutuwgZ^^^_^]^^\\\\]\\[\\[Z[ZZZ[]`bbcfhigaVSVWXVWUTVWXYZ[[[[YXWXWXWVXXXXYYXXXXXYZ]aca]YWY[\\`d`[ag_\\__]^`^]fw}pknlgeeijgdeddegjee{{wrmjhdgedmlqw~|~yq{|wkefjlmkfkuphhfguyrsqmpxxsvz|^[Z[[\\lobf[SZ__fefg`Xfpe]`annVbffijlmmoonzxsmkpwvu{{gYXPUf{zvm`STWSRRQNNOOPPORUTUVUSRV[VMMU`b^ZTOJIKMNNPMEDFHJJLLLMPSSRRQPPOORPOW^]e}dTKOS[RKHCABEFGIJHHHGGHGE?75BMJGGJKJKHDGCRxcEKIHHGFGGHIIHHHHHFJPXZSMKJIIHGFDDC>>Pa[JIJIHGMhdFR|uPEGHHIJKKKJKKKKKKKMNNLIFFDCCILFC@@B?BABBDEEBFS^\\TQSTTSTUTPLLMJIIGGGFDHF`wXUVTTTTTUUUUUOEDDCBABEGGFDDDDCCDDDDCDEFFEFGFFFHIIJKGHIHKKKJHFGFEFFHLKKLMG|~FHIICMMIJJKMPNIFDEGGDAGTKLJFEKUWV[^bjsj[ZdcXQQPPNO^kg`_``a`ZONLbcOUOUbXRs³zusu{}Q@CBBE@@PH?BBBACHLJGGHHGHJLNOPrraIJSnxnFQfRJQTNGFFFFECAABC@??@@??>=>>?@@??>>===;==<;;;;<=><<===<<=<<==><<;<<<;:::99::97876668:9<FHCGLLKLKHFDA>;::>DGEFHHHIHGHHFFFGGFB?<:75AKUVG=88<==<;:98::::<==;:;:9:::9:AJKHC@BB>>=:89?HJJJJJH?=@A@>>?@A?<:87655666655567776555455554555555555554444332323544448<=<<??;;;?AA?@OYTSTVVJ?@@??@@@A<9::<@ACDFFEBA?;9898768=AAA>=<;;;;87777776565546AG>689:<=;==<<<>>>=?@?;<AEHHGEFEEEDDDCDFFFFFFEFFDA>GT[WURQPNJMUKFIKIIIJJJIE=5356555554553333333445578::97665554445444555555568:;;;;:987655466646899755@IF;0-3=>:985258::<?AA?JTQC9=A@>=::04s9!.,<YeW5'68203<@A98=61HH/-55202677861-,+,-03315985212/-+)&)066.)++02+*(*049CHMblQ7/.,+*+**(8V\\_XNG=101.,)'+;@>CB70//-,*++,,,*)))(*,0/,,15577875301.--4=GO6(+-26860./.,*-0.1>GD@@@=><2...//7;71-.37;<<:300/..,(()('&%$))#+:A2#')1NW1'-117>E=16BD@7.*,**+*))+-06<8-,21,,+*).32000+)3=;56;=:94('+3:7212750(@84EMKMLDA:.('*.32359:99?@5)'+02336:0/DNHHIGEGNSWSSL>S[IF=/-149505:/:VK.+3.0432=ND/**.253-+/6:DVfhgnmXEYjaSC::>><;?>44;??3*Fd_Z_cT5'**5K@/A=.1.+*(,=LJFLU}m=))'&&&'2A>,+0^`7jjjjihhhhhhgghgfeeeefdcbcbcdcdcb`]\\^dlvyqkiijlmlopopokiigccccbcddeeeeffggijiijjihhgfeefgfffgjpxuiikkmnnopppoooonmmmllklmlmmlkigfeb__``acedaacegiiebhrttvvvutuyuf^]]]\\]]]^^^]\\]\\]]\\\\\\\\]_abddfimne\\YWWWVUUVWXZ[ZZ\\\\[[ZYYXXXXWWXXZXXXXXXXYY]ef`\\_fnqqm`Y^aa``_didcu}{z{icaacefhhhggedccc_^sssifgmio_ipru~~|wv|~kpqnmllnoppqtusolhitxrpqqrwwxz~_\\Z[[Zbvygekd``^_\\elkcagldjhWX_UVagjlkkmmmlp{}vpotuw{~r`\\Zctqg`ZZWUUSRPNOOPQSUTSTTSSSRRYZSPTVWYZQGMQSUTUZ\\TJFBADHKLLNPQRRRSQPPPONNOSW`x]COXZ]TFCEFFGHHHIJIHHIHHHGB8BYWHCFJKKJGEIDFomGFIHGFDFHHHIIIJJJHGGLW[XSMJJIHGFFFECBFOIGHHIHOsdRlRCIHGHIIKMLKKLKKKKMONNLJGFEBEMJEBCDDCDCDDCDFCHZf\\SRSUVSQOLLMLHHIHGHHHGI^vvUSUTTTTTUUUVTLDEEFHEEEFFFEDDEEEFFFFGGHHGEGGFFFHIIHHFHIHIIIGFEDCDEIIIILPSN\\FKHIFOSLGFFGGIGFEHJHB=BM@IIGCACHOX_hnmkdY\\]TPQQQMQmvg`_da[SrZJa\\MSNKIDDD\\ƣnlux{eKEBBA=JLBBBBCEHKJIHHHIJKLOMGSuvWDNJOYgkP^bJNNOMHFFFFDBABBCA??@BA@???>??@?>=>====>><;;;;;<>=<===<<<<<==><;9:;;988778;;;<:8467876?FHJQRPPONLJGCBA@??EGFFFFHIJJJIGFEDDA=;;:8@U^YJ<559<==;98889:::;;;:9988::;<:8CQSKB<<?@@>>??DHKIJLKCAEEBAAA@A@>:86455444554433567665555554555555555555444433333334459<<:98857;?ADC6?SVTVZTEBA?>>==>><:9:>BCDDCBB@@?;:=<:88:=AAB@><<;;:657876775432/9FA55888879;<<<<<==>==>>ADEFGEDEEECDDEEGKJIIHHGFEBADPVWTSUTOLIKSKFILLLNPQJA:765555444444433333333566788887777766644324655545568;;;;;:8988878876568899606DF;1.*7JJGG?349;:;=AA?CSZK:;=?=<::2+a{;!/,-Fb^;+;;014?FA9;@98<;23;?<9:<::961---,,/3678886322231--4764/&\"'/2.+**+-<V`WV[WG5-,+****(:\\ZKID7.*/30*((*7?=BI=,--((*,,./..../.-/2/+,4=>>?@@=9632..7=>>0/-,-2540253.*/532?KKGFDAA>1)-/+-5<92*)/6@B@:3233.)(')+,,,5?3&(()8J7!,BOB*(,+(+2:4/>HHF<75/*)'*36,$*/00-,.0/-,)%(02112,*5>=98<?B@7$!&,//1128851A/2CJIFEB?4+((*173249<86;D<-%(03335978HOLKGECDKOVUOD9<?BH@/)2>@95756N\\F30/)5EF>?OG/),./3881/;?:Jblqnb\\akkh^LD@?>>>=;746:=4$:gj]cbJ..;0*71*1-*21.-*:U_\\?9DcD++)&&(&)9D9*&4mu7%kkjjjhhhiihhghhgeeeeedcbaaccccc`^_diqzyoiikllllljigggecbccdegfeffffggghhijjjihhgfffgggghgjnt|}pkllnonnpqrqqqqppnnmllmnmnnmlkiggebaa``abaaabegkkihinstvvvwtrx|rbZYZ\\\\[\\^^^]]]]__^^^]^__^_afiklone_ZVUUWWWZ\\\\ZY[\\\\]][ZZXXXWWWXYXXXXXXXXVX\\_`envyxz|ug^fhbhpstpw~}xgfgfghgfgiiigcba`_bimvjcefkprbiqstr~{yyvsyliknmlnpswyxx{{wqimutqporuxx}~sY\\]\\\\annbbdba``^aaehffgghmjdb```fiklmtxwvvw|w{x`Udsyph[YWXZXVWTPNMMQVYYXWTSWYWVVUXYRRVSONNHDKUYZWW[c_NFEBBDFJLMNNPRRSSTUTONONPVb~{MZh_QMJGGHIIIIJJIJLJIJIHHJFDXcN>=BGKLJHHJIEbjH>DKKHGGHHGGFGIKKHHIFGR[[RLKJIHHHFCCB@HGDNQKGJuvYfMCIGGHIHJNPNJLLKJIMPOPPMIFCBEKJDBCCCBBBCBCCGFBQhhXRUXXTNKKNNJHFGGEIMJFKjjTSUTTTTTTUTVRKFFFGHIGGGGEFEFFFFGHHGHHHHFEGGGGFGGGFGGHGHHIIILLJNSSMLLJLRTVHEHFGHMPLGGGIIIHIIMMKFABQ?ABDFEBACHR_gc^ZVZZQQPLOLZwtjehtyzikiW_bx`ACBDwxw{{p`TNT\\ce]VRNNJIMFBCDFHKKJJHGIKKJKMKEOmtMIHJFFR}w]\\ZKOOOLIGFFFDCCBBCCAABCA@BCBB@?>>>>>=<<?>><::::;;<=><=====<<=<;;:99::98766788;A<<44667?HHJMOMKLJJJHGGGEDCCFHGGBBFIJJKIGEC@>::998;VkeQ<6559<=<977788:::::::8778::;<;:?KWRIC@BDCDEFD@AJKKLLBCECA@A@>;8987544345432211234466554346555555555555544444444324457:<<876657;>@A?65L\\]_^QC@=;;:89;=<;9:?CCCC@?@AAA;;??;::;>@@BB@=;;:8678869;965412?C72444212468:;;<===<;=BDFFEEFFEFFDDEGGKOMIIIIIGCACMWUURRXVMJHJPJFIMOPSUTF96766554322442233222333455666676677889888756655445679;;;;;99998:;;998878:::7/+7D?1/+/KYSQH649;;;=?A@@ISOC<:<<;988-Rs: 1/+4R]='25135;>98:;>B<99;CGC=;;;:762//.-,-27;9641////013673/./.(&-330.+))JqqYJHLD3+*))))**9N83CC93,/61*((*6>?AF=-,+*)*,/465443210//-+,2<@@AA>72212.-<HUL89/)*/222254.-1546AKKKKGCGB0'.5312440++/4D?=81146/&%+/-(4CP=,*0-++6G@>RWD0(&)'$%')2EFDB96:3,)()-:6$'43./-+.0..+(',-/57118?>>?BDGE:&\"$',...03645?-/:CGEB?8.+,1*)20/4<>98:BC8)%.13347=?DGFGGEA>=>CD>856;CHE9./7:<>=5=[[D?3\"*CMG=;ID1*+../8>86@9,Kg^engr}tlndQJC=<=?:0---/56*0Ylbja9%<WA''+'(1:A91,*MqhQ0,4Df\"&.'%&'%.=>1,.C\\='/iiiiihhhhggffgggfeeedddcbaccdedcbfmqsy}z|~pkkkkihhgeefedcbbceggffghhghiiihiiijkigggghhhiiigiqy~vnlmoonoqrrssrrrqppponnooppoomkihfcba````_``cefjjjjhlpsuuvwskp|{n_YZYZZ[\\]]]^]^`__`____]\\\\\\_fjjnrnib[VTUUVY[\\[Z\\]\\\\]][[ZXXXXXXXYXXXXXXXXXWXerxxwy{z~{nfelxzzup~}tnmqvvfj|yoeddeijedb_aceedif_bbdggnyflqssqu~}|zwwxmvpyhbhmmnqtw}yyzunrvnmmmrvxxZZ_^]`mna__^_`_]fdge_chfhhiqrojfiigl~{z}|y|s][jxo^XSV[_a\\WWYTOOJMVWZ[XTRQW\\ZXZ\\\\VQSSNNLJIHMUXWWWUVadTFCBA@DLONNPQQSVY[ZVPMNPUmU]g^QJFIJJJJIJKKLKLMLKKJJJKLSf]C;<>BGJJJKKMF[lKEOLKJIHGGFFEDCGJLMJECGMTUQMKKIIHGEEEDHFDM_YIBfevMGJIHHIJJIRWMJKKJILMOPPMJGCADIHD@AAAAAABBCDFGBE[k`RSXVPMLLOPHGHFEEINKFPzt\\RTTTTTTTUUUWRKFGGFFHHHHGFFFFFHIIIIIGHHHFGGFGGGGGGGGGFFIKMNSXZaimgPQROQZWfjAFFFGGGGHFHIKKLKKMMOMJCBUC@@ACFFDCDHKNPONQYWOQWOJGMdlsܹ}\\=@>P{xzp^UQQSYZZZZ[UQMGDFJKJIHIIIIIIHIJJFVnaIMGJJFKr~cXPLMOOKIGFFEDCCBCCCBCDCA@DEFD@>>>>>=<<=?>><;;;<<<=@@@@?@AA?><:988999988877667892=A973@KLIIHHFEFFEFGJJBDHGEFHGE<AHKLKKIE@;9768;83EiiP>789:;<<97777668::9::9988:;<<<=@?@IPRQJGGHHKLNIBIKLMJBBB@?>?><:8975565467543333564455655358656555555535456554444444458:<;876689:>@@;61C]de`N>;:77767;>=;;=ADCBA@ACFGC=;>=9::<>>=?A?<:887655569;;9866;A801123555788:;=>===<:>EGFFFFFFEFEDEGHKNOLHGHJJGDAFSXVUSTVRNKHJLKFJPSTUXWI:87665445345422333443333576544544567789:<??;75544468:;;;;;:9989=><;<;;::99;60*.=B40.-FXUNB338799:;=BDDMUL=9;:987=0=c@#/22/>XH+14146655568=><<?BEB958;:8755200/-,.1443/--,++/376/./1470),47873(2c|\\=4220,**++,,,,:J*2DC=:3360)('(4??=<941-+**-27::;82.,-.-)*-05;@@;1+*)***2@M`O97,+,03786320/0249CJJKLICGE3$,895000.,-/2>65300670)*45,*FQK2-49785,1NZOKG9+\"((('%-:CA;8436730.-,77''6;31.+,/..-,,-+-5977::9>EHIIH;*))'.10100417>..,7GE>6--1382/--,/6;:9:@D@2((+1115;>;67>B?95212333/2<CGJE=418BE@7>XP@RK4E[R@8:CC5+,0/28=<94'3`b@Xrlz}fapm[KC;8>B9+'*,+07/&>SN]]8:XaJ-)-)4O\\[F6-4l~N,+,*G;\u001f&*%%%$'395215D@+,2hhghgggffffeeedeeeeedccccbcdefgikljhjqzxqkihgeeededcbbbcegggghiihiiiiijijklkjihfghhhiigis|wommoooprrssssrrqqqppppooqqqpomkigdccaaa`___bdeijjiikortuuwulo{}zrf^Z[ZYZ[\\\\]^^^_`a`aaa`_^][Z^ekmnnlhc]URSTWZ[[]^]\\]^][Z[Z[[ZZZYXXXWWXXXY]itsmr{zvszzuwzyvsqwyrmsuqv{rgios{qbbipokiccedefebbabbccbbnleknqpoo||{xxzxutwmrvmtmceknprrox||xvvxvqljmuxyz_\\`_^_jj__`^^__]ailhbekjedeidjnrgZdzwxyyvrrquxd^in~xYW`ecgph[VWWRRMIT[YXWUSQPUZXWX^^VOOONNMLIOWUTUTRNJSgcJ@A@?DOSQPPQRSUX[]YPKMOVwjVjXLKLKKJJJJJLLLNNPPOMMMLLLNYeR>>??@ADGHJKMGWkUSVDDKIEGGGHHFDCGMNIEGHDIRRMLKIJJHIHFFIGFBU_]LK}hKJMKJIIJHFOYQIKLKKJJMNKIGFECFKIEA@AAA@ABBCDEFECL_cVQVTNNNOPLBAGHGFHLMCXpXRTTTSTTUUUVWRJFFFFFFFFFFFFEFGIJJIIHGHHFGGFFGFFGGGGGFGIMQSWZ`gousfOKKKR\\VfUCHGFGFECEFGHJJKKLMMOOJCBUDBBCBDFFHGGEBBDGKUSNVecICTzڞ]ԇPqoKEFH^Ȼvxzrc[WVWVWWWYXXTIHLKIGGGIIHHHIIIJJSaOLLHJJGGU|dTFHJOOLJHFEEEDCCCCBCDDC@BFGC???>>>>==<==<<<<<<<==?BACBAACDC@<87778899988975568657=BDHOIJLLLMLLMOOQUTJDNIFFJIHB8CLMMKIG?855766<63QhP8579::;<:77787678::::::;;;<<>?@CC@;9DTYSKIJLNPSTQOLNPJA??<<<==;:;:7556889;987899987886775346666655555533466555445455568:;98778899<>B>83=Xfh_E98766667;>>>?ABDDBAACEHID=;999::<<;;<==;987531012589:98:?;212358>?>=;:;<=>=<<;:>GIFEFFEFEDDDEFHNPNJGFHIHGDBJUWUUWUMKNKJJKJHLRWXX\\XE88778666655554555555333355432332234555679=>;98665447;<;;;;;889:=>???<;;989:730-2>91.-AUXP=013367778=??JSM>886567:11JA-12322MS84515655657::67:>>;5/058876565430-,,,+-/--,,+.6974..3597/*.578;80Qv`7)('&'*)),/100-<Q/1BFA>976/*)'(3?=8;>;3-+.1336;<72-)')..)),,19?>6*)-+)*3=<>E1.4..-2:<870,---/17CJJLLJEBA4'*8<7210/-.123/.-./13/.5:535@?@2-:<;;8*1ZZE>:37@9+*)(7>7951247;:641.35)'283/-+.1210/./016;86743<FHIII9+21(-1240/,/=<//*3B;65,046652-+.--0235;?=81,,./0456545:<82/000122-/AGA><:@JLG:47<ND9]dU`i]G>BJJ7+/545665/(-CO>/RrkwzSBWj\\B@<8CJ@78:50381&.7+:QQhnN801,*HholU?.Fa=,+-(%'&''&&'')131436@:453fffgfefeeecbbbbbccccccccccdeffgijf^]gr}|pjfeccccccbbccdfhiijjjjjjiiijkjjlllljifhihijihkr{xqnmoooqqrtssssrrqqppppppqrrqpomkigfdcbb`__^`cehjiijkosutvzxtuz{{|vi_]\\YX[\\\\\\]]]_abbcdfeeefdZU[cghkorrndXPPSVZ\\\\]]\\]^_]\\]\\\\[ZZZZXXWWWWWW\\juk\\]nytpuz{{}~smnln||vphgecjupigffgjllmyxutpfgfefefhgbbcbbbaefflmmmmu}zxvwvususnmlwzt~sfekpqrpgsz||{ztloxxxyk__`__`cd`__^^__^_dlolijhecb_aeopZt~yxwtrrsswvaViwsYonaf^[[XTUTHTd`]XSRRRRUYWTTVVUQNOPOMPPSYTQQORXXQS_VEACBIQRQPOPRTUWYYUPRSWYsÑ\\iYOONOMLKLLLLNOOOQSSRQQOOOMM]dK=???ABBEFGGIIMY^LDEGKHGIHGIIFFFFJLIIKLIIOPMLJHJKIJJIHIGHDFXigTMxaJLLKJIJJIHJOLIJLMLMOOLIFGFEFILID@@AAA@AABCDEDFECL[YRRPOTTQOHCDGHIFGONB\\rYRTTSSTTUUVWXQIFGGGFFFFFFFFFFHHGGGHFGHGFGFGGFFGFEEEFGHHOTT^_gmnmfVKFGKOTSXTJJJHFGFEDFHIJKJIJKLLOPKDBUGCCCCDGHIHHGEDCDIRWTU[czݼ{TArr\\pJGNQdİlUU`gea[RSSSTUUVVPOPKFFHHIIHHHHIIIJLMNNJHIGFCAb~gJB>DNQMJHFFEEDCCBBCDDDB@BDB?>>>=====<;<;<<<<<<<<;:;<<;:;<@DB;777788899899777667;66COZXOORUXZZZ[[[]b[QU[OIGIHIGAGOPMHB>955466794FZQ825789:;<8789988998:::::;=<=??@CGDBA9<OZVOJJOPRSVZUPQRJ?==:;;<<::<<96679:;<;::::;;989988865556666555454334666655554676789989989999;=AD@7:PgjV;88766769=@@AACDEDEDCDEGFA<97888:;;9:::::;<;8774324556659<533347;>??=:99;>>>=<;:?FFFFFFFFEEEEEFJNOMIEEFGGEEGNTTRRRMCEIJJJIIJKPVZ^\\I7689;:678776577776555333331212212213333336889::876546;<;;;;:8::;=ABAB>=;9898631--472//:O]V?311145555458AMN@875667743895433627KG3046666:>?@@649=70-052-15566763/-,,+)*-,,,,,04744322231,(/95398Bd]4**+,--*+,/2322-<R.,?GA>:65.*)')5=;9=C<0,.24535<<3-+(''.0-,+(/:><3-,.149C@1-+'+31,*4=<53/+,,)*+1AIIKKHFA6.+/:<61/--,..1/-))+./0139:9=71>8&,4856,+La;/D=2>PD2*,'9G648216>=9652./2-+01/.-,.36552//37886430/:EGHIE2)32'+10-.1'/?7/0+/5/065235630/1540//./489746;:114779=?;840.00..13/3GJ7*&*<SXI5279G@9\\h`ej`K?CLG9335874/,)/EJ403<epzt@'=XK:A>:FQMILK>48<:573#+Qi|l3 (.+,HfstcH3bl@?2*0-%((&'&&''),/1307C>:87ddefeeddccbaa`a`aabbbcccccdefffgd`]amw~vkdaaaaaaabbbdegjkllllllkkkkklkkllllkiiiiijlllot||womoopqrstttsssrrqqrqqpqqrrrqpomkihfdcb``_^acehijkjkmpuuvzzyxxyyx|wg__[YYYZ[\\]^^_abcfijijkljd__`beinrusi]VVTW\\^]\\\\]_dgea^^\\[[[ZYXXWWXXW\\df\\W[chmwzx{~{xriflnmmnljgcaejmhor_ilf_mgcmpkeefefeefdcbccccegjltmkjm{}}|zwtusrtukqymcj|~|iekrrrph{~~zrpz~}~ymjfca``__aaaa_^^^__^^`lvulhfb``__bspt}~zwvwwvuzwm~֦mpwaV[]]VR`eW\\ghdZYWVVUUW\\\\Y[ZSSWUPPQOSUQQRLNVcmiaX]\\JEFFLQPRQOQQRRTWWVWZ[\\Wcz^IAMTQRPNNNMMMPRQPSUVUVUTSSNNffKGE>>CDBCDDBEII^gIDKLLKJJHHIHFGIIIJIOTRMJMPOLJIKLKKJKJIHHFBNfqv\\Kbw|YJMKJJJJKJJIHHJIKLMSTNHGFGGEFIKHD@@AAAAAAAABCCEGDDQZULKSYYPLHHIIHJIKQMB\\nXRSSSSTTTVVWYPHGGGGGFFFFFFFFFHHHGGGGFGGFEFFEEHHFEEFGGFDJOSY`hljdZOIILMNOPQOONMJGFFFEHMOPOIGHJFGNPPGDUJCDDDDHKIIJIGFDEISUHGpǉ[KQRWj׷mYy~x{}pJGUPLm~dW[gsx}dVZURSSUVUUTNDFHHHHHHHHHIJIIHQMIJIFFDAAqmFB:ALRMKIHFEDCCBABCDCB@?@A@>>===<<<<;<;;;;;<;:::9778654459@B;76667887899998788878@NPOT`\\XVWUVVWWUVVXXWZXVPGHHIKMMOKB:886656872?\\S:134689999779:;989::::<<<=?>?AA@AB@AD>;FW\\VOMPPSUVXYXTSK?<=<<;<;:;<?;778:<==<<;;:;<::9::98766656665544444335667655546989999:::999:::<AD?60AdjM8::87889:>@AABDFFFGFDCCBA<9877779::999:::?AAADEB??>;98768524557;<;::98669==>?>=<@CEHHFFFEDEEEEGJMMKHFEFFEDIOQQQQOIA?BCFHIHHJKOW^^Q?>CEDA;678788777876455423321112212323333324678897777;=<<=;;;:9::;=@ADC@A=98776331-,11./4DXQA@94334444445:ELC;76887786466556781;L>268779=HHB?00;>2*,39.%,2367641/--,+**++,--,./0111320/-)&192-4?RM0&*,/55.*-225641,>T0,9EDD;75/,)'*6<;:=@:015420/2::3/0-((.12211.4>;110/4>CE9//14682)-8;8402552.*('5FJIHEEB4(+-,---**+*,*,-,,-*,02225;@A7.41'(*,-+#6W7&(OO51123//'(JC/6727?<4343-+/046/-..../1243215:86420..7BFGG;-)//*.30*.7/3=300,+**/7643561.2998872.-356655AB236=ABD@:40...,,+,26<C<(%%&)5DI@311=93Sc`dgU@67<878668740+)8KI=2('Ho}_1,<G><B?<FNQSTPE59@CFF@2<avz]-&,,5BGXv}iLEqxF<E7)+)''&%'&&''&(/0/.9B:531ddeeeedccbaa`____`aabcbccddeggecbciou|~{xrlid`_`````bbcdehklmnnmlmmmmllmlllmlmkjjihiknrtx}~zsooopqrsttttsssrrrrsrqqrsrrrqomlkihggdcba_`bdgijlkihkswy{{zywyywzvgaa_ZXY[[\\^^_`__adeeefgknke^\\]_`ejlkjdZUTZbd_]\\_gmne_\\\\[Z[[YYYXXYYXY[YXZ\\XZkxtw~u{~ncgjhiiiiiigjnmou|klnmhdlolmqkeeffdeefdcdghjqsu}wnjgmyyz{}ystsstsnmkhin}zmelsqsyxwsuq|{d[Z]^_`__``aaaa_^^^^__]^kwwpmha]_^`drvnmpzvwxxxxwtxuxmfadgWQMJf~eSZZ\\`]\\\\[Z]n}{qf[WTOQSQONKLNOXfpnedeb_QGILNPPRSQOOOORX[[[[[XRUxic\\URRQPPOPOPRTRPTVVWWWVUVORj`MPG??CDCCCCBFLOVcSGMNPLJKIHIHGGIIIHFLUXQIMPONLJKLLLKKKJIGGCKimprZMWcqzUILJIIJJKKJJIJJIILORNGBCFGFEFHKID@?AAAAA@ABBCCCFHDJZZKJXZWOJIGGIIJKLKICP~lZSSSSSTTTUVWVNHGGGGGGFFFGFFFFGHHHGGFFEGGFGGHIIHHGGFFFEDEPTVcijibWOJJJKKKLORRPOLIGFGGNSSNIFFFGEDGNQJFRKDDDDCGJJIJIHGFGIICWnPRUUTY[{ʣYJ`jkfegi\\HINE>Mp||dbf[PRSUVVVOCFIJIIIHHHIJJHJNOIGJKHFEE<\\oBCA@DNNLJJGFECCAABCCC@>>??>>>===<;::;<;99:9:99:988898665557:8765567888999:89:999;HRRHIXd^XRKHILLKJKMKJQPVZUMGIKLKKD<877765786<WI9453369:987779:;::9:<;;=>>??@ABB?>;:>@<>=QgaWTRRSUUVXZXWN?;<==;;;:::>;788:===<=<:9;;:::9:999877666655444444456777555469:::99;::::::::<?A>5.9UXC<<<:99;<>?AAABDFFGGFDDA><9889999999989;<=ABCEGIHIIHGFDD@=98889::;97544568:=??>=<@EHHHFFFEDEEEEHLLKJHGGGFDENRQPPMG@@BABDFGHIIHNX[WNNTQKE?;878899777666545533442221112332212223557777899@EDC@;:99::;<<=CG@AEA=96554540+,///29FONI?87444556658>CB<967777777754678621:F<87588<7:@H@048/+/45/-355773//.----,,,,,,,,--../020//-('/6/,4CL3$)*,165-*-32496/,@W5-5>DG@752-*')5;:;=>70364000378763.)+0445<<..>:100/2>KE5169<983,*164435;<5-*)%,=HIHFEC5**+****''*+(*)+,/.((26566>EA31/+*((''%(=?**)PJ*!#%',,(&EK0053685./32.,.397.+-./.--/0555797672///6@HG@0*+-0225515=36:1..,*()/6853460-2:988840/355554BD48>AEJB;61-.-,*+,+17=A/#%&%#\"1?<3-/62,?\\ejaH7323-/6657772**5?>8/%#3OXF88=>>CC@?CGOY^YN@A>DOPMIL^sX/4419LH]ynZR`VFDB7*'&('%%''&('),/&%:B84;71dcdeddcccbba`_^]^_`aabbcdddffdehlqvrs{}zpqkedba`_``a`bbceehlmnnnonnooonmmnmmmmmlkjkllkjnu}{vspoprrstttttssrrsrsssrsssrrrqqomkijigfdcddeeghikkijpuvw{~~zwyzzz}ufcb^\\Z[ZZ\\]^^]][\\]]]]]`dge]YXXY[\\[Y_b[WUV_hfd^ahnsoaZZZZZZYYZZZ[ZYXYYYZ[XZefgxywqs}rcejkkjklmkjigghsmp}swzogghgfhfdejquz|wqkopu||xuuwwutsqmnrt}}q~timsquaRyv}|]X]_````````aaa_^^^___^\\fvwtuob]^`dinolpohs}vvwyyzywxȃnp]\\^jeZh|qWQW]afa__]]jyk`UOOSUURONPQSZeiheacfbd\\IKVVPQQQQNPRTX\\][ZYXV[all}kwQQQPQQRUTSUWTRTVVVVVVVXR[eWPRIBACFFFFDHKLFBJLKLMNKJJIHHIGGIJHFEHNUSMNPOOMJKLMLLKKKIHHGLajacdXYXVf~zPGIHJKLLMMMMKKIHIJJFCDCBDEDCEGKIEA@@@@@@@@ABACCEEDGV[NNWVTNJIGILLKJIFGGDqziYTTTSSSTTUVVRKGGGHHGGGGGGGFFFGHHGGFFFHJJKNPSSKHIHGFEEDFGPUVbijh_TKGHKKJIKNOQQONKIGJMVTMECEEEEGEEKJJFNMDEEEDCHMLIGGHIJLUrMWYVWS\\iR˦cWiuxxpqyY:AGD@AJ]|vrrj_hr[ORSUVVPDEJLLLLKKLLMJGMRLFEHIGEHD@VgCACGQZTKJJGFECCA@ABBA?=>===>===<<<::::9:::988899888987775644655567888889::::;99>EPRQJEH\\b^\\[TKKKJIJMJLOQWZUJFIKKJG<866666687:UW67753579:965579;<;;<<<=>>@@??@AAB?>;8<=<@9Jni^ZXXXYYZ\\]^aVB;<=<;;;<;9;:8889:<===<;9:;:9::98:99888887543344455557666544689:99:=<;::;;::;>><79>?<>?=<;:;<>?@BBBDCCCEFDBC@=<:99::999:::9:;>@???@BEHHGGHHIJIHGD?9;998742135659@??>=?BFHHFFFFEDFGFFILLLKHHIGECDHHJLNG=>AAAACDDEFEFIOSUVYVJ>;;99889:9776666655565444533333454423312556577788:>CGC>:9:;;<<<@KH=AEDC?6566441-,/./49:CSO:<;656779::;>=<;9677677777546784135<8647<=<567@IA63//01128<:6561+*,../1110-,,,+,,-./////0.*),-..39;50)),/0-)).0/268.-?\\=288:<>;:7/*)*4;::<:0055202689:<81,).79639D1'58/-,.2EQB118;;72/)'-564449<2****,2;BFGA:50-+**)(%%*.10+)/4/()-/149@E<,*,+,)+,.-3A>6-0F;&&**+'(('6L8-1-,,*(*,..237<6,),,./.*(*/267788732434=E?3))-034226:;:079.--+*(+.6963441/154444424443441>D6CJICB9210..,+*,0..5=>0(*)(('+-.1661/(-L^_VC745<<42676891(-53,))'*2513?@>AGMKCADGN[da]UI5?RSSSRPcg@6=<;<BKk{}|pTNXP?85-&&)(%$'&&('.5.\"3WM29F9/ccddddccddcb`^]\\\\^__`accdeegghptsqopuzvqz~skjieaaa`_`aabbdefjmopppoopqpopnnnnnmmmlmmlmmmlnty|}xvrpqqrttttutttsssrrssrrstsrrturonljjhffgikkklmnnnoquqmt|}{yy{{|}|seadc^YXY[[]]]][ZZYXXXYZ[[ZXYZ[[[XRQTVVUVX^ghecfjpvm[WZYZZZZ[\\\\\\\\[YXZ[ZZZ\\^Y_rzwzyejl]Zaffeeeedeeecioohlkghhefow{{umimpuwwywuvy|{xuwusuw|{sy}wqnvy|YRp|uv\\[^`aaaaaa``aaa`^^______clyxtsf\\]aijjkmmmlnu{xsvxzz{zxu{ߚvwbXgf\\Y\\^bhgeccupXRMMPTXZXUW`edbaa_^bdfecgbOJZ`YUQOPSVXZ[[[ZXW]`dhiewSB[MQOOPQSUUUWXVUVVWWVVUVVT]_TRRMFCDHIIHEMN>=DABKNMMKIIIIIIGIMLGHHGFMRSSPPPMKKMNLKKKJJJIIENcc`]YUVZ_lqPDIHKMOOMLLKIGFEEDCBDEEDDDBBEGKJFB@@@@@@?@AAABBCDEIPUORVRNKJJKNNLJHHHJKEZzgYTTSSSSSSUUQLHFGHHGGGGGGFGGFFFFEEFGGHJOTXZ[_THFHHHGHGFFEGKMU`ig^SIFFRNILMNORRQONLLNPVSJCFEAEEGHIIHHFLKEGFFEEEQPHFGHLJAzЌOWZUXYT\\jMCСlgr}W>FJFDB>Idzidb\\ilTOSVXVHCELOPOOOOQQPKJNOJECCCDFHC<LfSHFOcuwdNJIGEDBA@@BA@>>====;<<<<;<;:::;;::988888878788788777:944567879999::;:;:=GNOPMIFHMY_bmo\\PNNNNNOSTUXYZSHHLHD>8777676886>L778745679986457:<<;;<<<=>>??@B?=>DFD?:;<>@9Bbmfd``___accadXD:<<;;;<>><;;98888:===<;9:::9::98:999:9999754444455556667644689999:<;;;;<<;:;<;976667>@=>==>????AEGFCAABDCBAA??<:9:::9;<<;::<??;99;>AEFFEEFHIHIIIIC<:>=;87875528@?==?@BDFFEFFFEFHHHHILLLKHHGFDBABCDHI@:=??ACBBBBBBACINU[]S>;:97777888787776555677435555555686666433344455577977=A@@?>=;9:<FSM?BJJGF>776652/--.08=97EN@:<879:=>=>>><::87887777876567775466642>HD;?=1+6F?3.,-,/7==95352/./0./0-,-,,,,+*++,...-.0/-,,-//./36/)),.,+,-0065252,;aC592/05871.++*3999;5*.74/015?A?<81//4<=;8754-/1.)(/CWK4,+26641.((/5532032,)+,..,,/8@8-4;1*((''''&*47-'.60,-.,+).<?4+),/.*+/468GP8)7>4.8:2<3.)!,E=-3+%&&&&&(,9CIG7)(+**-.+)'(,5979:758:86:;5,),0112015;:5/:6--,+++,.5;84331000111122/---++.;E<HLFA=60/10/+)-6<>329<60/,)*03569<<531/7=HO@665CI?675696..8;.#%(&+201599:?HOMGFHJOU^cd[L6;MQTVSMSA37779:7Cm|~sOObU946.%'+(&&%%'))05/-MjQ6=A3(ccddddddedbb`^\\\\\\]__`acddefgjrvrkhkptsqw~}}||xpljgdbaa`aaabbdefjnppqqqqqqppoopomnmlmnoonmlpuvvwy{}~}xtssrrsttuuutttssrrrrrrsttstvvutroljigfhhjllorqrpjffcbgpz}{{||{|~uhhje_YY[[[[[[[[ZYYXXYZYYZZZ[\\]^]\\VRTUUUUV^bfccfgoylXUYYYZ[[]^__][YYYZ[[[\\\\^eioumiy}o`[_`_`aaacluoawkoojhjjkszxqkionl~g\\guxxxusv~zw|}vuvwxz||zzyyyxssqWY`gy}|k[\\_`aaa`aaaaaaa`^^______adsyyzm`_cmjejmjpttjo|xvvwx{~t˾w}riϧ|l[_]\\ckhemvVNLMSWYYZZX\\jsqk`YZ]`efdbecUNXcaUTXXY\\]\\ZY[XTW_`VZdg~FMSKEQQNNNPPHIPPUYXXXWWVVUVRWbZRUSPKEFJKLJHGFBCGFHLMLLJIIIIIIHHLLKJIGFHLSTRRQMKKLLLKKKKJJIIGEUb^USPQXgngrUHNLMLHFECCCBBBCBABDFEGHGFEDFHKKHB?@@AAAAAABACCCDFJNKHOTOMLMNLKKIGHIJJJILhjZUSSSRRRTTRMHFFGHGGGFEEFFEEEEDDDEFGGHLRZ_^YUKFHHHHHIIIHGGEDN\\hg^SHFKSKINPQRTTQNMMMMNRSSHDEEDEFHJIKKIQQGIJGGGDLNHFGHGGk˽Υ^VXUWX[UX_M?GǾrbflsuvtQEHHGFCBGKfsc`ZWnjPOT^S=>DJLMMMONNONLMKIIEC@BJRRPOKOPOXixlNHKGECB@?@BA><<<==<9::;;::9:::;;:988888877877779999>E?876776799999:::=BHMQPOKIKKMIO_jpn]TRSRQRTUYXW`^LEIA;67777676878<;6:8765679997469:<<;;;<==>@@@@?;89GOHC?=>>=<<PmnlgdaaacecbcUB:<=>??@B@?<;99::64;>>=;9999::::::99:<<;;:864444455446667665588889:::;;:::;::::821346:<>>>??A@A@AGKGA@ABDFEDDCA<;:9:<;=>=;:<>>=9568:>@@BCDEGGGGGILF<<@B@<<?:6549@>=>@@BDEEEFFEFHIJJJJKJJIGGFFEB@BCBEC<88:<ACBBABBB@BGNVZTF9:7867877767877764444898666779879:9999864333355457::789;?DEC@78<L[UCBONKLH>96652/-,-07<<86>K;:89<>B@=<<<;8887898888886521368876442:FD?;-0.06;B5')*09<;95244310/00/--...//-+)*,..///01.+*-0.,+--+)()-245412>9352*;^E7;63/.,*)(+--27886/'*5743108C?=:6426>BA>=;971+)',;TY8&&)/13310/.046661//+)*-//.+).43-162+)))(&)(',.+'-201;1+,('0520/-,)'*2:9B\\J0-6854;@=?614D>>L751((+)(((*.B[]M.(++*)*+*)%(3987888<<;98531/02..1.18;851;5,-,./0.+.331000/-0:<5-*))(('%$'3E?BBBAA;5///,*-3=GG;4682/31)/>BEF9575434-'=M=5786AFA629=3,4;4+042')-0564469?GILKHINM\\n^HLJ<;KZ^XSR>22558<;AWqcPY\\L676*'+-)''''''-44-9dmJ870'$cbcddddeecba`^]\\[]^_abbcdehhkolifgjimu{|~{xvusrnkifdcb`abaccdfhloppqqrrqqqonoooopoonnpprttw|}|~{wvtsqqstuutttssssrrrrrrtttuvvvwvsniihggghijihhikhb]]``er}}|}}|~znkkibZYYYYYYYYZZ[[Z[\\]\\[[[[[]^_a`\\YWUVXWVW]ec_`hvyfVWZYZ[\\]^``_^][Y[^\\[]^\\^bfefy}x}zmf`^__aabq|wzzqljjlnorvphhno|qobYckorxzuuwy{vuwwunlw}~xd^fmT^hlcqokvwfWZ^_````aaaaaaaa`^^^___^`ceen{ueadmmhnplqonhs|zyxvuuv{nqgsȻŨpmb`^Z^gcctzhSQSQUXY[ZYZWX`jqqh_^__bb_^`_[ZZ[QR]_^[^_]\\[ZSQZXOJUncXCQUVTTQNNMQEAafOR]ZWXYYWVXVS]eYRVRLHEHMMLLKHFHGFILMMJHHHIIIIIHGHJJJHGGGIKNQRQNKKLLKKKKKKJJJLDGVZXWWUU]c^pkQROKE><<<=?@BDDB@@BDFIIHHHGGGIIGA>>=>?ABBCCCCEEDEJMHBIQOOOOOKIIIHIJIJJIITk}jXSTSRRRRTTOIGGFGGGFFEEEEEDCCCCCBDEEEGMTWUPLGGHHIIGHHHIHFFDCK\\hiaSGEPPGGORTVXURMKJIKMRTYQECIEDEFGHIJHOSJMLJHFEGIHGFFEn˵Ͱd[_UUYW[PV]CED8uĬ]SX\\]\\Z_WFEHFCABGL=Ku}d\\YP\\ykLJ\\XB=CGIIJLMMLLKLLKIJE?DP\\ckptxyf[cnw~\\EIKFDCB@??A@><<===;:9:::99999:;;:988:98889879:<>>?CFD<;:98667999;<;;@EJLLNOMKLLGJ@@RajrlWVTSRRTV[YXeYFB@=868877677788:;@<:87567989768:;<<<<;<==?AB@:88:;CKGCA??>==:B^ppkhdcbbfggeYD:>BBBBABA><<;9;;867;>=<:::::::::::;<===;:8666655544567767876666678899:99::::::86;?D?27=>>@BAABABIME>?BDFGGFDB?;9:8:=<;<;:;====:678:<<=?ADFFGGGGGFA====<::;85549A@=>@ACDDEDEEDFGIKLKIGGGEEFFEECADDAC?74569>A@@ACDC@?ENTTF888677998887777775333469;;899:>><=>=<;;;963455565579:;;:89?FKJ>8>Na[ECQQLNMG>8764.--./49;;88B=99=?=>;89::867879:87799841/-179:7432119EB<1/29/3>@3)*.4786.*/598--1//0110010-+*)+,.0440.,))+-,+*++**)(*3<;5.5<531/):ZE;@:72/+*++,-09873-)''.6928TP;>=;:7319FJHJH=3-(%*2EZJ*$*.46653232456773//0/10//0120.131-,+*+,/*)**()+(*-++10,-//02431-+**,29D_j@,;=434357;4*LkL4TU10-+-.,++(%4Xo_0(-,,))***&&,45326;=<<;7543210,-/.089776:7....021-*)*+-.0/0;IH<0*()((()*&1D<79>>?90,*().27>EC9642-,220;HKI@/,20....+<I:3431=MM?=DA5055/1?H?-,111224778@JONECMPXdO7EP8)<`ocY[R7(+169=?@QiymeYC645/*).,')'&&&',0.&?n^4-+$%&bbbcdeegijifb^\\\\\\]^^_acdeghiiihhiihlswy~~|wv{~|wtttqmkjhecbaabbccefhlpqqqqqqpppoopprvyzvsqoorsstvz~zwuspqrruvuttsssrqrrrrrstuuwxxyyxsnjhfggghifcb`bffd__elty~}}}}}ztqnh`YWXXXWXZZZ[[[[\\]]\\[\\[[\\\\^`ba_]YXYZVSSeh\\^joxxbSW\\ZZ[[\\^__`ba`__^\\]]\\]_^]i{}xu{~yohfcaaak~}}vsx~kgimnoqqnlnqvzlb`bejsx||w}|syzruwzvljq{}}}wpstycn}mfw~qzkmkm|f\\_````aaaababba___^_``_`ee`_kuofcdjnnjolnlln||yyvuutx}woanȵo|rcacdcdciymSPTW_a]\\\\[[ZXX[^epsna\\_][\\^[__RNM`uf[\\\\[\\][XURSVSMIQa[{=MRQRRRQNKMKNtdPUYWXYZYWXVTZ\\WUWSMJHJONLOOKIHIIJMNLIFFFGHGGHGGHHHHGGFFHGHLNPONNNMLKKKKKJKLKGBHQTXVTSSPNinQNKD>;<==?ABCCCA?ABDHJIHHGGFFIIHEC@?=<>?@ABCCEFDEILKIJMNMLKKKIIIIHHIIIJL[o|{gWRTTSTTTSTNGEFEEFFEDDDDDCCBCCBCCCCBDIRXPFCFHIHGHHGGFEEDBCBFO[hmgSDHONGCLSUW[YSKHIILPUVXWKAFGDEFFFGGEKPJIJGEDEGGGGGFIϹmccZTUWTTETYBIOE3tĮf]`^[\\\\PDDGHHGGFHJAIrjYTRRezaKPWJ>@EGGILMNNMLKJKJJIHTejmxi^fl~nFAIKGDCB@?=?@==<<<<::::99999888:::999:;:::;=>CDDDEFDA<9866666899:>CDEIKKHHLMLOMB<<<<Dbkvw`XVVVTY[\\]a`ND>;9988976667898;:;=<;7588888788:;<=<<<<<=?AA>769<=>CDBAAA?=>;7BiomifebchjgjcE9@CA>=<<=;:<;9:;;:79<<<<;;:9::::::<<<;<:88888877667777778887566677778889::::99;AHMTL54:;=?AACCCDJKC<>DEEFDA?=<9998:><:;;;<<===;988:;;=>@CCDDFFECB?;876676665559AB<<@BDEDCDDCDEGILLJIGEEEFFFEEDCFEBC?7445788:<>?AA>:@KSM9477679998888787765333358;<<::;>ABCCA@@>><84466786579:<<<;::@HLI?>N`ZHDQQLMNLC98860,,,.279;<98::<CB866678886787887559:9531.25320232228C16<544224A=-*,032-*-4<CD=5.+-./00220/-++,-/2441+(('+-,,,,,+++/24;<03?6.-+)&;[H=>5100013321/9=7(&()''/507oY<=<;:637@KMKE4)(()/4AS<-/249963334883---.--0440.//131.--/-+*+**--*))(+11,))0564434764342./655?Zr`76@;42/,*&(2.^eV>Af;%*)*.--,*(0Fmq7(,++**+**)*.11//29:9;;741/-.0/..0036778:7010/0231+&%(*,.2;CDB>8.-./0133-2C9/3742.**,*.689=?62430.-.0<FKQG7+*,,++,,-1830-.7=FLMJE<689;<<BEE:>A;51,-49:ALLJFAJSPJ;06;/$+VvkQLXH'$,036;:6PrwlJ1470*.220-*'%')%&,-%@mR'')%'(bbcefhkmpsrnic^\\\\]_``bdfhhiiiijjjkoolnw}{uty}}{yvtssqmljhfedefddddefhmqstqpqponnooquy~|xropqqqqsw{|yvtqpqruvvututrrpprrrrrtuuwxxyzzzxqidegefhiijhhkloh_^jy{~~}}}|~|utqf_\\XWZ\\ZZ[\\ZZ[[[[[[[[[[[[[^_`a^ZXXXVN]kb\\fmu|rYRZ[YYYZ]^^_`aba``]]^]\\]\\_elvwy~}|~whaadjx}}}zy}~~ojklpqmnrmkjfgfehfirw{w{vpuvvspoqtyrdgnwnڎwzz~yxxqyljqlv_db``abbbcdbbca``___aaabeea]_`cffdbgnikmokjo{xvxxxyyz|~zldq¤}z_chhifejugRQS[f`Z]]]\\YX\\`ZW_hrkYX[YY\\YSOWr[_ZYUX]XTVXTTURLJIYpXEQRSUSONMMDM|`QTWWXYZXXWPJJMPSVYXYQMWUOMKKLNJHJLLIFFFFGGHHHGGGGGGFDEFGJLMMPRSPLLJJKKKKKMKIFEGJNNMNNLJP`SHEB==?ACCDEEC@@AAAADGIJJIHIIKMMNNMMLHDA?@ACBCDEEFHLMLKIHGHIJJJIIIHGGHIJMevcVSTVUVVVUTNGEEEEEEECBCCDCBBCCBBCCCACMYYLCEHIIHGFFFFEDBABBBITYhriRCJMJGDHKQW\\ZSHCJNORTVXXSHEFDFFFFGGEINGDEDBACGGGGIFEo¾rSjdXTTVSKEZ\\DDNO=FƶhhruzmLAGIJLLJIKNEJqeQPWS_p^MOI??CGHILLNNNMKKHDL[ekptv~w_^l|X>@HGFDCA@>?>====;<<;;:99998:::::<<;;;<====>ABFIGEC@<:7666656668:?DIIIKJIEFMMMQF:78=<@Wgw|k[XY\\]]^eaXA@@:878889765678999;=:<;9688888788:;====<<<<=><<99<>>;?AAAAA?===6:\\qmjigeegiio`B@D?;7678999;<:;<==;<<=<<::9999::9;<<;:::99:;::99888877778887677677788999999999:@HMRM;499:=?BEEEGKI@<@CFFE>999989:9:==;:;;;<===;:989:;99;<=?ACCA?><6345455666669?>:<ADFEDDCBDDEGKMKIHGEFFFEDDDDDEDBCA=;:::98:::9:988=IOF46788899::8867876554333568;=<::>BDECBBA?@<64457897579;;;;==;9<DMF>L^[KGRPKKLKE<8971,,,-27;<;;;<<?B=:67887886786677548<;973/0/-,+02.259<%(398634972,*.01/.5?EHLLLC5.,+,---/11/+*/00021-*''(,1/-+,,+++2BG;9<DH;,%%+'9_P42-++/123573,2=9+)*++(*132HtpH:887767<INJ:*%&*0528G;880098.-/1242.)),)*.3430./.-//,)()+*)())++((&,51><1;RZ[VE7,6<:;:5+*3>ASfbH7;910/-*'(&-9P[r?-\\O!(-/1/.../96MsO,++***(*+-/11.,-/46569730-+0431022357;=<726500133-(')*+-8DA5364+-279:;:/.>9.36543101-+13474,,....,+1>CPZI1)++-.*)*)*,-/*/=>69@?846<CFA:=ENQQME=0().27BJBADFFFD>2++('&'C^Y?6OW3$(-57==2MtnX:083.*0820.(('()%+31)GkG#)*'*+ccegjnqsuwwusme_\\_aabdfhihjkkllllmokkv~~}}zuuy{|{xvttsqnllihhgggggeefghlrutqooonnmnprv|yqnnpstrqrw~}zwtqopruwvvvtssqppqrrrstuvwwyz{|}}yqjgffeffhiklorsuqfes}{{}~~~~wrme[UZ^ZY]\\ZZZZ[[ZZZZ[\\]\\Z[]_ab`[ZZWOQbh\\UgwxvkZV[YWX\\`_]\\[]___^]^^^^^^__aju{zz}rjfds|z{~wmmpplmmkhghhijhehns{zxzkuzsquogkrtqszugdjdcbgm~vu{{|wupbϐcbejxrf^ob^^`bdihdbbb_``_`abccdcb_]^`cfifaacfilkjhozwty{||}z]s{qϸ~qoccdbcb_el]Waadha^^]^]XY^b^YYZbneVX\\RIP`߬`ZaZVSUZ\\ZYXSTVRPMMSLLRQSTTSNMKEFutZMOQUYYWYYPD@BFHNTV]VPYTGHLKPTLDGKKIGFFFFFGHHFFFFFFFFFFFLSRPQSPOPMLKKKKKKLLIGFEEGIJJKIJIHIIGFFEFFFGGGECBBCB??ADILLLMOOOOMNNPSVURNLKLKIGFGHIKLMKKIHGHIJJKJIHIIHHIJKfp_VUVVVVWVVULFGGEFEEECCCCCCBBABBBBABADPYSHFIIHHHFFFEEDCBAAAAGTT_phQEJJHFFFEJS[[THDKONOPTYZ[WLDCDFEFHHFLOEHOQOICEGGHHHCPɆIdl^XUSSOGF[YDGHGJCffeot}|_EEIIJKKKJKK?Cjx[OWXQZ_VQIAADGHHJLNPPNMKHDSjrpt|e[bu_EBADEECB@????=====;<;;:8888:;;;;<>>>>>?@@@?>???CC@><?A:56665569<BGJIIIIFGJKNOQJ<:967=EB^wyaY^bdadyXE:?<765677766779::9;<:<A=;88:767889;<=>>>=<;;<;:;;;<??=?@?@A@?=<=;:KnmmkiijhijfP?AA:76689999:<<<<=<;<=<<;:;;;;:;98:;::999:::;;;:;:89:96778887888777778888999988:>FLLKA489:;<@DFGHJG>;>BFHF=6699:;:9:;<;::9;<;;;:88888754344689999:74356555566668==:<BFGFFFDDEFGHKLIJHFFFEEDBDEDCDDBBABABAA@@?=:844768?><6789999:::98677665664344449>=:;>ABCBAAAA@:53445798768:;;<>=:78<CD@HZ\\PKQMIHGGC>:;:3---.39<<<;;<=@<6;77788766675787558;<962/../.,,++6=:7((*4<96662/...-/16?HLJIHHGC@<1(*,+,042-,02/-,*((''(+13-+,-+++-AI?EJD<2++*+)7dY--+,,./01362,1;93.-.3.&*01,6FC:566898<GOF3'&'/9=408:?://772022/,*(+.0-+.321/,--*+-,*)))(('''&%&&8DC<?@AFbtqE/-&,>FB:*&).COjK@>:84-)**))'%(.?i_-!M_68DE;20015>4/PT3*---,)*,/132/,+,/00132-,27973333347:AFC?6:83112/*'*,+(,=C3&*0,+148@FH@/*997:8;=9332,')+++)((()**)*2:9MXE2.00/.,)()+.14,0=:/.459=>?EF<:LSSY^WOE62>835BG@<FIB99:410(&*-4::63AV?(&+7?HD2HkZ@333..,0<0*06>0%%*:<.'Mh?%-,(**gghjmqsuxxxxxuogbabbdefijjjllmmnopprw{{||{yvvxz{zxwutsqnmmkihhhgghffgggjnqrpmlmmmmnorwz~~wplmoqoklqrquy||xuropqtwwvvtsrqppppprsqruy{{|||}}||xpifedeffggfgks|ypr{||}|}~giurgZUZ__]\\ZZZ[[[ZZZYY[]_][]]^ab`^^[VORbeSYsumrn\\Z[YY]__]\\ZYZ\\]\\^^^_^^^]\\[_mvsu|vfn~yz}|wrrqmlgjklkkjmlhhmqz}~xmoyo`grpptnfiprmkiiiijqf]eqŦ}}}uVTR^dfjutu{Wa`abdeghhdbbbaaaaa`acfe````aaaejiaZ[aehgfgnzyu{{||~{tnr|̴|{cmsg_[ZYTemS`tlkjlka^`][[`b`__^Z_cWUZZl`TbYXURSX][VSSTUVSPOLOPORTTSRPNLKh~eKFMQTVVVVSIAABDGHINQLFB?EKINYREFHJIIGGGFFEFFFGHGFFGIJIFIQSSRRKNSQQONKJKKKKKHFECBACGLLJGJMNOOONLJIHHGFFFEEDA@CGLMNOONLLLIHFHKPSUUVWWUQOMMMLNNMLLKJIJKLLKJJIIIIIKJKgxh[VVVVVXYWWSJEFGFFEEEEEECCBBBABBBA@ABENSJCFHHHHHEFEDDCBBBAAADRRSedQMOMIFDEEGP]aWJGKMKKNTY\\afYICDEEFHHHJOMRWXXTGEGFHHGFFK˪RGjiZTWRPMGH\\WDGGELGF|lZX\\ajeNFIIIKLKJHLJ9AjpVOWSDJYZJDCFGGHHKOQQOMKHJYhhisq^_i\\DBCBBCDCB@>???==>===;;:99888:;;;;=>>AAA@@@@?><::<<;:<AHGC>6556AILOOMKLLHFJRRPQP@6868=DC1Qpi]bfcfqsHFA:7865677667789<;9==6EC><:87567899;<=>===<;;<:9:<<=>?>@?>??>>=<;;:>cpplkkmnk[NA99;8889999999;<<;<;9:;;;;<;<<<;;:98988889:::;;;;;:7;=;8898877888777778888898888:<CJMJ?699;;<=@DGIJE=:;?DIG@98;;<;:8899::::;;::9988886532210011346757797667776778;<:<BGGHHFEEEGHIIIJJHFFFCBCCEEDDDDCBCCCDCBABBB?;88:73326879:::::::98777665664443348>=::>@@BBA@BC?8544557:<9568:;=?=87875;@CT_XMNLIFDB?<;=<3-./.3:<<<;::;<867677788655558:976777630.-/0/-*&/==:3/30289::74553.-/137=CEHHGEBFI=-(+-.2321100,))('''&(*-0.----,,,,0BM@3-),11*%4[a5),,,../0123.8A<6--.4/'(-0.-07=;9;><64AND1(&)3:82-3>A<0145440,)),+,.,,,**+/-*++)(*+++,+**)(&&&%1OYNF@CBJcn0\u001e*(%;J?/)((*@cU8766740-+))*&&&(C[I:#8gRLh[;11027<4)/>5*,-//.-/013552,,*++--*')0>=4/24337<@BMNLDA;5200.**/-'&3?4%*/17LQBCGLMC4058;>988520-)'*0.*(()('%&'*231?C=6331/,)()(+,2656;1*4AEHFCABHFHTSFHTY]TABFFG@@AA@ELE:875793,-/..0700C9*&+>JLC4;H;3365541,658JZV3\"(2>9)$<O8)0.,13fhkmnqsuxxxyxvtoifefgghjklkllmnnoqswxwxzyzywwxzyyywvtrponljiiggggffeeedfhjllllmmlmnnquy}}womnppmjfcfmu{}~{wrooqtwwxwusrqonnnmqphkuyvwz|}}||||vlfdeffghjkkkntvvx{zonu{lYkzl`ZY^`^][YZZYZZYYXXZ]][[[Z\\__`a`^YORfdUarqnpm\\[^ZYZ[]\\[ZY[\\]^^___^]\\\\Z[bimoq}~nhzxy{yy~~vqnjhikkkllkkjkmnqmjihlkfeeeiornllllidaciiijmwk|䩇~qTWSahet~xwƅW`c_acffdccbbbb`ac`]\\]dc]^`^_`\\_ff_Z\\`dgfegnz}z||~|yrw}ǲvzbtp^Y\\ZYnr[lveafniade_]]^_^]__]ZXURYhJYZXWWTTXXQOPRUWVVTPOQPPSTTSRQNNa~mZQRSTTURORPIDEHJKLLKB<BEFGIS[SHGHIJJHGGGFFEFHHIHHGGIJLJIKLMPPOOQQRPNLKKKJKKJHFEEEEHKNLIJLLKKKJJIHGGGFGGGHIHHKNMMNOMIGGGHGFGILNPQQSSRQQQPPNOPMLLKKKKLLLLKJIIIJKLKId~sdYUVVVWXXWVQGEFGGGFEEFEECBBBBCCCAAAABEIKECFGGGHGEEEDCBBBBAACENPOX[XVTSLECEGHM_gZIGOSSPLOX\\cheTDDFGFIHDILLTVUUSLDEFFHGHGD˶o=L_eXTVTPLGK]UDGHIFFCIw]TSTTWXLFHIJLLLKJJKE:JniOQTF>RbRDCFGHHHIMQQNMJHVksouhcleB?A?@ACCBB@>>??=>>===<;;:9:::::;;<=>>@@@@@@?A@=;999;9=>BEPOB><DNPQNMLKMMHHPTSSSE8653?KA64B^|udffdgrgG;777867666667789<;;<;38D?<88:777899;<=>=<<<;:::9:;<>?>>?>>??=<<;;<;9RpsnllsubD<;9889988888789:;;;;;;;;:;;<;;<<;::988888889::;;;;:87:;<;:99977777777778888889:989<AGI@9988:<<<>BFJKC=<<>BHGA;9:<<;:87779:::9998998887543222213455557899979:997778;<:=EGEIHGEEFHHHHKJHGFFDA@BBCDDDDCCCCB@?=<>>@BA@B@?=86778889:9::;;98777656643444436;>::=@ABBCBAB?8666569;<:6689;>>=87764799DPVVPKIFB@=;;==6/...3:>;<<;::657577778876556755410///-,,,/0/-))5B>:5::6206>>:653/12.-/049?HNJCACGC7+*.478410/-,))**)'&())+,---,,,*$.?8++-+14..-1Pf@'+*++,-//-02CJ8-,+*+**0//1005=DCA@:/*5@91)(*03-)+3AD:,/23360*)/21.+&&*)')--))*+.--.-..+++(&%-:AWaVLCGSKO^'#+,*3;2(-*'&>`<368::30341.1:D72@:7OB'WbGpj1,,.0990--0/)*+-/-03333564,*(()++)('(29602556=CBBNWVRPE71//0//1.(+64(4KOMZeT?<79>>>==97987621/+('+031//01.*'%(,-2787640.+*(()))(/:;;=1&.EVN85<@HPSMC89;CUXJLNOQO@:@BDNK>88:<>:74.-241*(1/*'-@LI<32115:;==:2$+KenmN'(454.*%'341200;Afhlnpqsvxxyyxvurnlkjjjkklmmmmnoopqtuuvwwwxxxwxxyyxvvtrqonljhhfeeedddcbbceghjjjjkklmnosx}~zsqsuwyyxvx}~}ytqoquxyzyvtsqomkjkpjbbnoemstywtrrqmidcddefgijmkmruxxx}pnw}~kc|}xnZX]^`^[ZYXXXXZ[YYXX[[ZZ[[\\^_abc\\OTgdVcsgeyh\\a_ZXZ\\\\\\\\\\\\[\\]_`___^aa]\\]_ekjp{{zxuvyzpflxu|vvyxwyzsokjighkmnliijkkjhfgikmheffhmmkjijkhedeghgfx}~{qbksbidop_[`cdedcbaabcbbbba^Y\\b`Z_`__]ZY__\\[^_dhhfem}}|~wnѻ~pgvk]_deqpctukklb^cki`_^\\[Z[[[[[YYK`JWYXZZXWUTVTTSQUXWWZVQRPPRTUTQNPXgxzma\\__\\]`^UOMQWWMHLOOMMJECIKE@GYWKGHHIIIGGGGGGFEGIIIIIHFIKMLGIJKLPOLOPPNLKKKJKKLIILMOONNNMMMMIGEFGFFFFFGFFHKNMNOQQOMMMKIGGGHIIJLMMMLLLLMNOQQONONMLLLLLLLNMMMJIHIJLMNHU~}rcXUVUVWWVVTMEEHIIHGGFDDDCCBBBCCBAAABCDFFDEEEEEFFEEEEDBBBBBACJMOPPSaXNOLFDFGHGVe[IKW]`\\UOY\\_aibMEFHHHFEEFGRVVSDONHFFFEEDB͑HCHTc]UVVOJGN]REJIGGGG@XuOJPPPOQRMJHIIJLLKIGGHFAUocSSJ>AXdRDEGHHGJLLMLLJHb~sgmzR>A??>@BA@@?>>?>>>>===<;;:;:::;;;<<<<==>>??>>AAA<:::;<8F:6@KMLJKLMKJJIGHHHNQPOOL>946=H?7666MdkigfhjRE76797576666679899;977508??877867::;;;<<<<<;:88999<>???>>>>>><<=<;;;5@nuqkkvtP7899879876666679::;;<==<;;;<<<<<<<::9:;;:9999:::;::99899;;;:99877777887788888:::999;?A;57::::<<>>>CMKB==>>BHHC=;;<==<:988888989899888864443222345555579::9::::97766;=;AB?CIHFDDGIHGHGFHGFDA@AAACCCCCCDEDB?<;<<>@AABDAAB=9;98:88779;<;987775554443344328=<;=AACDECBA>966656:<<:6689;<=;8766788655=RUOKHD@=;:;>>5.,.3:>=><::85565666788777662.,+)(*+**)),/0/,*19=G?9;65303:<861--10-/3445:@BDGGDBB=4,-4:;7,(-11.,,,)'()))*++**+,.,,53((/0-20,04/BcL**+)()-/-)*6JH1,0*))(-<7,///3<GGA8-'(-0/-)()+-+()-7@7(-3457752230,*+)(-/,-0/*+57467//2--+()6@EAS`^ZPJK73_G(+./.,))((-&,@J:<>E@92/1:B;9IPA21.&7T3<i<C[+%')/::-)-.)()-/0.1774332/,)'((()))((+9;8779>CEC@JXWWZM8//.24430/222DaqnhfU;00/0472,.121-.2111.-+%$/41249=7.+))08888885311/.-*''-44697/,A[R87ACHNNC6373.?ROIA70:;7=BINE87:;<>@?8..22,)&.,((+3?A3+047:<>@>4(+Myrg?(890*),-/124754=Egimoprsuvxywwwvsqpnllmmllmnoooqqqqsuuuuvvvwwwxxxywwvtqpomljhffffdbbcb``acehihggikklmnqw|~}yvx{{|~zvrqruxyz{xtrpnlihikie^]^^egfhfdbccbbaacceefffgghlpw|{~vmy~s`X\\a_^\\ZYYXWY\\_^XVYZYZ\\[\\]]^`cd[NXke\\dch{vb]c`[\\\\\\\\]]][[[\\]Z^dcfg_]]]_cilnpqtqnlnml^uzw|ssxzyzy}tkiigfjnoqpllkjjjkkkjirxohijkigfhikjffgghfi}zcls|mjw^hdynjaf_dfcbaaccccb``^\\]_^]`baa`_]]][[]`fkjgdqxrƠozaju}x~pY^hou~hcvxwxp]^fpj``_[YZ[[ZYYWWPYݢRU]Y[\\\\ZYXUUWWURSXXW\\\\USRQSUVUPLTdfaeebaed\\TUWVWZ[SLMRWYTIFGFEEFFDEFD@JZQFFGHHHIHGFFGHIIHIIIKLLIIJKIHLNLJKKKMNNMLLKLLLLLLNRSTSRPNOOOOKHHGFFFFGGHIKMNOOOPONNMLKKJIIHHIIJKKKKLLKLMNOOOONNMNNNMMLMMNONMMJGGJLMOIHh~rcYVWUUVUTUQIEFHIJIIIGEFECCCBBDDBAAAABDDDEEEDDEFEEEEEDBBA@ADKRRNOQP^ZNJJFEGGHEIZ[OS]`bdb[ZZY\\ehXLHKLLP_]LGRW\\j\\TYWNHGFJI;٩YFLEP\\ZWUSIEER^KCHFEFILNOPNLMOMOW`d[RKGJJJJHGEEFHFCSf^TKC>HZTFFGGHJMOMKKLLGZqr|ogq~{CDCDA?@@@?>=>>==>=>===<;;:;:::;;:<=;;<<==>>=<>@@<;::9;6G7766?FKJIJIJIGEEGKPQQKF?<:2@G@34650B[wrlihgZB;88997665555679899954569FF=>769<759::;<=<<<;97788;>@@??>>>>==<;=<;<=>Baspjkve=7;9777766666668::;;;<>><;;;<<<<<<<<:::=<;;:999:::::99899:;::99887789997787779:::999::6228::;;;;==<@JKB=>>>BGIFA;:<===>>=:776788998788787765324445666679::9899:86666;>>B;7CIGECDHIIHC>DJIEBAAAABCDDBBCDDCC?<<<<>@BCCBBCE>7:<;:886779;;876754553444355216<<;<?BDGHGA<96555569;;:779::;=;656789:861+9IMJHHDA?::=>952/4:>>><::8656666789856653-)('')*****)+.0/,-;95<9554565566541042+067765545;FKE@@?7..-/57.&+331.,+)''++*+,,*)*/452,*-03/,,+.44,4WZ4)+*)*+,+))3A=2580*+)-;:*-./2;IJ>3*'')*++*)),,+++,395,0368<;7310,'(..+/3-,4:1(2;:=A1)+,-,+-FL:-BXaZK8*+4:4*+//10))+%+4<BEEGKG<51-0CRG==40+(,*&>A0YP*7,%%,594,''**((4A>5277431-++++)()**)+1696642:EEEE?M]ZW[U;.-./1013569OirwsgWEA=>A:80'%&*95,*))*,-.185-.122;CB?5.28841379??<:71+()&'()/AF;8KbX>=EFJJJIA6515JRA2-'',.15>IG82556:>AB8.031+')/.*+*(,0,),6<?>?A9')Txvi=:D3)')/8?>:9:859>fhmnnqtttvwwvvusqpnmmmmmmmnopqqqpqsttssuuuuuvwxwwwwvspomlkjhfffedcbbba`accfffghiklmmmqvz~|xwutuw|~}||~~~zvsrsuxyz{zxtpmkheeegfb]]`aa`^]]]]]___`bcdeeefhhhgfioru{qhrxywlb^\\^__^\\\\ZXWYaa_aY[\\Z^\\\\\\\\]^_ad_VbriZ\\l{|l^]_^\\[[\\^]_]]ed][]bdeea^`_^^diiijmpmrwvrivxxrsrwz}{v|nefgfdioprsrqnlkmnnolis{qhhiigffgikiefiiien~yn؄}s|qt}z|Zge~p^_acdcbccbcccc`_a`^^_`_`_``acba^^^adfhjs{u~Ըqboq|wxyWNclu}wnabv~|vmkhgojcd`[[ZYZZYYWSVJsmN^YZ\\]^][[ZUSSSSSY[W[^YTRQRTVTONT`b]ZYZ\\`df]V\\[SONMLMPQQPJGHEEFEDEDCDDJQKGGGHHHIHHGHIJMOMKJINQSSQNJIJKKJJIHJLLLMLLKKLLMMNPRPNMONOOOOOLHHGFHGGGILRRNNOOMLLKLLKJKJJIGGGHHHJKKKLLLLLLMMMLLMOQPNLLLMNNNMONKIJKLNKHUmxvqbXUVUTVUUUOGEHIIJKKJIHGFDDDCB@@AA@ABCDEDEFEDDCDEEEEDCBAA@@P\\YUMOSQUVOKHFEFFGGELUVW]`accdZWXYagVMLNTXguoMGQW[ox[U\\VNIGLNAYw=IHFLRWXQFBKGV^ECGFGJNKHHMQPSY]_fnoi`WLHJIGFGFFDDGB>Pb\\MDCCGGEFEEGKNONKILLGUjqxggm]:CABA???>?=<====<;==<<::;;9;;:;;:;=;::;;<=>=<=>=<;:998>B5636?HLLKIJJIIHGKNPPOE=:8:@KA554533D_aspljj`E<5899876555557799:;62244>|bBF;HEKLF879;<=;:;:8878:=@A@??>=====;<=;=DILMToqhnnL6:;9767666667679:;;;:;>>=<;<<<<<<<<<<<<=<<<;::::::::::99::9:9999999:;;:876778:;=<:8764224799::::<>==EID>>>@CGIFA;:<<=>?BB<7767789877:9:;;843336657888999987777754665<AA@46EIEDDFIKKE7:IKID@AAAACDDCCCBBBBB?<<<<<>@DGLOLE?9;??96667768:7555555554444554349;;;?BEIKG=66555557:::989;:::::==98::9886/*1?IKKG@;:;:9:71039<<<;:98666898778754430,*()+,+++++*+.//,0:86002267997654328<3-6:751/0/04>DC?@?7/.,),000/...-+,*''-/,..-,+)/8:4/7951+'*0671-/M`>*,))+*)()*.246<;71+)-23,,-/05><788.)(',,*)),-)).04663413=>930//+'*.0/031/7=4&0NF:?4'&)+-.+61+(5IZ=,)*00*+*)+14754424AAFFB?;4//0,1KL>B>+&*)+2.-90Gj>&+)'/980++))+*(9US93797770+*-.,)*,,+-35/,,+-9DEGECWmi_^[@--+.+*-243;S_`gbTJLTOH?33004+)A@:>620++,-7J@00129@FH71;=7.)-68667;82-*++)&%+GTFAO_T>>CACFFD@745EO?*&'$*:A618>;31238<=BC91243,(+--46-&&()+/7?B>?@0!<wx{hHIC-''+3<CD?;9757:deiknprrqrtuutsrqponnnnnnnopqqrqqrrrrrrstuuuvwvvwwxwrnlkjihhfffeccbbbaabcdedeggijklmnqvyz}|xsjgmttstxz}~~~|wursuvwxxzzvqmjgdbbbcdecaaaaa``_]]^_```bcdddddfgijhfdefhqy{|yzy|~yqejjgini`^`b`^]\\ZYZ^Zen^c_U[\\\\[[[\\]]aea^ksdXdpswn]WZ\\[Z[]_b_`vxi[fncccabaaaaehjjkmqy|{pqzstuuyxwu~iefffehlptuuuroljgikjkpg`fhhhggghiib\\_gnjgtxr~o]ggs]`^`accdedcbcccca`bca``_]^^^___`ba```civ|zz̛pmyiu~m}lzwkrc_x|uxpfpnjh^ZZYWWWXXX\\ZNڏS[ZX\\]]_]ZXXUSSRTTX_[Z_[VRPRSTSOPVZ\\_^]_ZVVYWXhpeTJLMKLMNMLR[]UMKJLPPLGFHHHHHHIIJHHGGIKNQPMJJMQVYXURQOLJJJJJJKLLLLLLKLLMLORRNIILNOOONNJHGFHIHGGKU[UMNNMKKKKKKJKKKJIHHGHHGHIJIJLLLLKKJHIIIKMMLLKKKLLLLMPQOLLLMLKMRZg}sbVSVTTVUTSNHGHHIJLLKKKIGFECAA@@BCDDFFFFFGFFEDCCDEEDDDCBCBK[_VQMPSTUMLKHFFEEFFEHRWWY^_^]]WWX\\b`PKPTZ_rsNGPY[ZuhSWWRJHJJI>ߧUHNHHJPXUJFJKD\\_BMSLOW[\\_ZYX\\bimlfc`^aaVJFGHHGFGFDDEACR_TFEEBABDDDEGLNMKIJNEWytciqi?>??????>>======<<;;<:;::;=<==<;::::;9899:;=<<<<;:9:876E=357@KONLKJJIIIILOMONF:867BO?=:97753Ed[dnmmlS969999776777777799:500135HqV9=<ACCZ\\=6<<==<;:98899:=@A???===<;;;=A@GOTWOLepjmY99<:9866778777779<<;;::<=========<<<<<======<;:::::;:::;;:;99899:;;;=<<<97568:;>?>;86533347999:::<><;@HD=>@@BFHEA<::;<<=BC=84467777679:;:71/0224568::::99986555445555=DB<5;DHDFGHLLE91@LHECBBAAABDDCCCCDEDA>=<<<;=?AEMSVUNCAA@:653567776556665555556566425:;<?BEIKF93456756689999;<=<::GURD==>;9983*)2<FMJ@9<;::953337:;;:87776788877875321/-,*+,-,+--,++./..0452-.027:997642./661/5;92,*+--037<@?<70.,*(,461.,+,++)''-1,.110-).6::CL@41+(6A>874-B_I.-**,*((+.0258;<84-*+--,)*..-,)+<H<--00.,)),-,,01-124701=;5320/,+0543445447/5LR=231))'&'029-&23;L'%)),/,,,%*467>D<5DE8?960)((),-5A3/GB-)+),22..*9kX*)+,-133210.-,*5RV92::9:93.--,*')...-+)%$-25<DGIFEYonhggL/////-.12.3J[_]SOQXWND;=GNW[OINE<>;:5,*31(8U?/16;?H@2:???5,,./,04788604@;+\"+MVC?JVN>BF==GF@=?CHQL7)*)&-HO73;:7745>B=>EG@9653,()(3C;.,/-+06>?;7<<-\":er[F?9/('+3:CD=54569:bceimoomklnpqrrqqpppoopoqqqsrqrssrrrrrrtuuuuuuuvwxzxpjihgffffeeedbbbbabcdeeddeehijklmoqrsy~zumedhlihox~}zvttsssrooprrpkfccaabccb``a`a``_]^^_`abbcddfedefeeghkqpov|~wwz~|xsvldifgprlb]^_^]]]\\]]WalgumZ]ZZZY[]^__`bbclmb]_er{n]Y[\\\\\\]^a`c}vh`dcdcccdfhjijkptyvikgywysruutxohlkhghkpvvvxwurokfgjklb^gjhhhgghig^VZenid}|wk}gbghini^`abcdfecbbccccabace_^]\\]]]]_]Yncbn~q~ïxwwmynuy~uskeqrha[XWVUUUVWW^fe_V_WYZ[]^\\YVVUTQQSTV]^Z]\\XSPRSRQPRVYZ^fe\\VRQRSSZnhOJMNMNOONLQ^i\\NLJOYZQJHHHHHGGHHIIHGGHIKLLLMLJLRVXWYXSPNMMLLMMMLLLLLLLLMNRRQOMKMNPONMMJHGGGHHFJTZTLKKLKKKKLLLKKKKJJIIHHIHHIIIJJKKIIHGGGGEEGJKKKJIJJJJKLNNMLLMLLMKKXtucUSUUUURNLLJIIIKKKLLMLKIHGGFGHHJJJIHHHHHGFFEDDDDEEDDCCC>GY`YQLJMSTSNMLHFFFFGGEKVVVZ]\\\\[VUWW\\dZNKRZ^gJIRY__vzYWWTLHFIH=~@VSLKKRWQGQfbT`bRQSPV^fqj`bfihc^[Z]a]UMFEGGGGGEEDEDCR^NADB@BCCDCFMNMKIJNFPtocm|<@????>>?>>=====<<<;;:999:<@@?=<;;:9;;;9:<<:;;;;::988788F:16CMMKNLKJJIHIINPLNI>499BK@:=>:9975A^VYhosmE97:9667777777777877.-/024783059/7>VVC:<<<<;::878::;=>????===<::<BKPTVSSK@ZosdB:;:87766778777779;<;<;<======>=>=;;<<;=<===<<;;;::;;;;:;;;;99889:;<=>==<987689=@??=865433479988::<<<<@DA=>?>AGIFA<;:::;=??=;88776776677642233235669;;;:99987643455556>DA=8;CEEGIJKH>8=FIFBBAAAAACDDDCCCEEDA=<<<<;=??=;?K`eVEAA=>>:7656666666645555565665357:<?BFIID72456766689998;=?=:@Zh[LA:;=;985-+,+1DKGD=;;;:8854689:997876787878887520/-,+,,-,+,--,,-.../232.-/39;976652-.0..13761.--,-.-+3=>:/--+***4741//,)&&&(,0,-364.)+.5BLH=32.2CIC<:8-7WJ3531-*(*,/4>A<7860,**))*)*+*+*('.:<6>D8//+)*/0---+-.03.017:663.+,38868963//3<C804/)(+*#$1A5-+03>A('*')++/)!+58:<E;4<85782-*))*+,46(,=7,,.,,13/,'(Yd;+-.---58520.-.2BI71878:;61//-)((+.--*'%'5ABAFJKFGWfgfisW0/1135201/,8N][XYYVPIJSakmib\\YJ:578<;5036('OI..7:DH68EA=>:1,)'/7;77989?JE8*,GQA@BAA=@DAFLIIJMPNFC@721.(090589;><@GFBDGGC>:970*)3JK61421249:70-264)6dsZI;7;6.,.29GD5-26976bbdgknnkhhjmoppqqpqpopprrsstsrsttsstsrruvvuutsttuwyyrjgefeddddcdcbccbbcdddedeeffhiklklkjmquvusrpjffecdiqx}{yvsommlhdcglljeabbbbbccabba`______`accccccddefhhju|{z}~~|~uoprqqsla[Z\\\\^^^]_[Zbi}fb[YZZ[]a_``afbcjiecdiyzpe\\Z]^^^_`eswqaedeeeehiijjjknqv~wrpklf]tx{wrrrrz~kqqmihipwxwxxyy{vqkknkhiihhhhhig^WWgmicfs̀u~oeijgc}ekpa]_acdedbabccccbaab`^^^__]]^]^_eit~xvyx{|xt{vlqggjsuf\\ZWVUUVWVVWWah̀RYYSWZ[\\[ZXVTTTTSQRUXZZ]]ZWRRRRQPRUY`ff_WUTQPRSN^]PRNPRTTRNLMU_ZQKHKUYSMJHHHHGGGHIJJHGHHIHGIOPMMOQTVXYWTRPPNNPQONMLLLLLLNPTRRPONMNRQOMLJGHGGHGGQWSKJJIIIJKKMMMLLLLKJJHIHJJIIIIJJJIHHGHHGEDDFJKLJJIIIIHJIHJLMMMMLMMKPkvdVTVWWVNIJJJKJKKKKLMMMMNORTTOMLLMLLJIIIIHGEEEDDEEECCBB?@O[[UNIDGRQOPOMHFFFFGIGMTOSZ]]\\YSTWW][QELTZbrĐFJTY`fwz\\WXVSHBDC@ܸX<PRQLNUTPHU{rbvdGJNN{o`\\QUZ\\[]^^]`cebVGBDHHIGFFEFCE[^EBDBBDEFBIQMKKIKNGEYz}ncuJ@BAA@?>>>>>>==<=<<<;;::99<@EDA?>==;;<==<<==<::::::9876:;F84<OQGHKLKIHHHIKMMNJ@829DN@9<<<;:;97;UWS^psk<67::4357977777789872.0011-+0356217IXQ:<=<<;::878;<<=>????>??><?DMSUUTPH><RozR5:;876677778777889;<<<<=>==>==<<<;;;<<;;<<<<=<<;;;;;;;;:::::89989:;=???><98889;>@??=9876434688778;;;===>?>===@FJF><;;:;;;<>>>>><:9;:;=:538;=@<77<:9<<:::99987435554556?D><9;AEGIKKF><?DHHEAA@AAAABDDCBBDEDCB?=<<<<>>>;77;J]eXGD>AKNC8666766665555555545556459<>CFGD=545556666799789;>?;B^eSKC<;<98960,,)*4=CIC;;;:9983169::;:777788798789830/-,+,-----..--..../012/,-3;<:6675421,+266544440---,+*4>?/())*+(,03464/052+)-0,(2890**'0DC512207FF?434-1JJAG?8/**,-,.=F;/11-***))+..,*****)132:A812-*)14/+()++*++,,8=9<91-.2678::1,,25013:?6-182'(3A71,/1L>*)*')-,3/*/58=<8131+2;80++*)***13+)0,//0.-040,,'?iI++02/-230-,++,/6:1.157<=9310221+'*,,)&%*8BDDGMOGIaplbgoR..22121012-,=NQSOKIGFP\\_fkbZVSN?314@MKD<2*(AK5*0:D:8JG9212/-)'.8<;207>@@LQM;;CB@:7<>=DTWC46<EE;/-0399=4*59769@A>?BCDDEGIIJJC601GbN346544476/*'(4<3Px[LFAADD>4221:G@2,17<6/bbdgkmmjghkmnooppprqqqqssttutssuutuutrsuwwutssrrssrqrrkedcccbccccbcccccbcdceefffgilmlkjklmmmllkjhgedddjry~~}zvrmihhgb^_bddcaabbbcccdcdcba``_^^`bcccccddddeir{yz~xsutsqpmd[Z[\\]^]^`_`dsvjb`]YZ[^hebbaif]aiifdkpswzk[[___^_iu]lweeeggefiiiklmmopqrwuuyzvjZk}u|ywplo|kssqmjkpvxvwyz{z|ngjkhghhhhhijkf]W\\mmmidgrtuiposzrovh[^bcceccaacccbaaa`_^^`b___^^]^VZ\\crqqpsss}z}x~}|ͽfxpjopvwg[ZYXWWYYXWUUVQ֡cZ\\e_TZ\\[[[YVUTUVURRSSUY\\`a[USRQQNQT]ig]XZVRPRSTY]WWWSTUVVRMKMSYZRJGIQWSOJIHHGGFGHIJJJHGIIIIILOPONORUVWWTSRQQPPQQNLLLLLLMOQPPRPONNOROMLKJHHHGGGLTUPLJJIJKKLLLLLLLLKJKIIJIIJIIIJJKJIJJJKJHGFFHHIIKJIIIIHHGFHLMLLMLMNLMcyfWTVVXTLJJJKKKKKKKLLMORVZ[XSNKKIHIIIIHIIHFEEEEEEEDCCBA@U^TRQJFBCMQNNPNIFFFFGGRPLMSX^`]XSTVW[VLEKSZbqqDKTY`hvQWWUSGBCCC=FHLRNPVSRLKaohp]JOnKPOMOUZ`efeefjli^MDEHIIGGGGEAK`NBDEEEFEDOOJJJKKKGDGU^mcz?@CBA?>>>>>>>=<<<;;;;9;:;;>DFEA@?==>======<=<;::99988969=B9;DOMIJIJJGIHIJKLLJ=;45BO?8:;;;;:;:95KWHQjvi8.7;:2/479877879999:80+,.11005662/36JR=<<<;::9877:<<<<=>??@@A@BGNVSMMJE=:@MmzJ3;:776667778777888:<<==>>====<<<<;;;<<;;<<<<=<<;;;;;;;;::99999989:;=??>><:9999;>???<:887645677658<;;::;=>>>???CGC<;<;:;;:;=??===>@@CHD>36@AB@=:>D@<?=89988887445566659B=:;::>EHJLG<:@ACHGCA@@AAAABDDCBACECCC@=>>=>>=>>>=94@YgSE=:FTOA976886555566554445477457:=BDC=65654555666777658=>:BTTNLGBA=87971-+,--/5>C;;;;;;:318=<<<=766666678767730/-,,,--..-//...////0231-/5<;84357796./798999:94/.--+*1>C@2+*+-.,-57972:F@/(-0,,14640-)0:1%(.016<;2.-/,/CLFE:1.)(--)(4=3(*///-011131/.,+*,21);kj;01-*)13.+)*)(('()/=:8?7+.87507>8.),27229>;44:@:0+2CIA9./@9*+,.37611489;=8222,,3:6.+++*+*+24-)'/1120-040*2:.[d0+21-))*)((()))+/-+,049=;6326?@5,+,-+('.;CEGIMMEHjyihkJ-122/..0223;FIKC87@BALTTVVVWUTTK2*8P^SGC5)*1FE.*065CNA0,+,--,+,.>LD747C1UrhN><>?:;=>>G^^C/-1;@==:/+1<E7+8C<9=?@BEKOQQPTX]b_E33:[gD2675523;8-(&(5>:K\\E,,6BJOK>52118?<0-16:6.bbdgjlligikkmnoopqrssrqrtttutstuuuuutssuyywsrqqqqnkfjsndaaccbbbcccccccbbbcdeefffgilnnllmonmlkkihgfccddirwy|~~}|zwtqlhffec`^^^_`aabbbbbbbbbb``_^^_`aaaaabcddddjttjgnyz~tfovmlrsi_[Z[]^^``_`dieaafga]`igcqyeW`eeeeffs~i]]__`_hlowmgfimhfgikmpuvqmqtqqswwpf^lsw}}nfjwtkrutsqnpvxwwxz{wkig`eniafihhijknmh]Y]rmsjbݟjfw¶^ext_gzh_ddcbbbbbaa``_`aa_`_]^^_bb^z~rnopnkpotsxx}|{}ɼ}kurz|twte^]YYYZZ[ZXVWTDsTeldU\\\\ZYZYVUVUUUTRRTZY\\e`TPPOOPS]gdZVZ[WUUWWUa`TUWVVWWWRMLNRY]TLIHMUUOJHHHGFFGHIJIKNLGHLLIJNQPOOQTUUUTSSSSQQQPNMNMLLLLPOEJQPOONONMLLKIHHIHGKWXQMMLLMNNMLKKKKJKKJJKJJKKJHHIIJJKKKKKMMNMNNKKJIIJKKIIHHHIHJKLLLLLMNLMayeWTUUVQLKKLLKKKKLMLMMQW[ZVQMKJIHCA@ABDFFEEEEEEEDDDBBB@KdcRLKGCAAFKKMRQKGGGHHUVKLSXY\\c_YTTSVVQLKLQYcs_EKRX_ds\\XWUREDJFEDAIFIMLPTRQRNJ}xiQQKONMR^ehihfecafmcMBEIIGGGGFEDLWBDDFGECMOJJIJKJIGGIEFmkcc?@A?==<==>==>><<===<;;;;=<?CDCA@?=>>=====<><;;:::8789:87=>9=GMLLJIHGEHHIKLLK=776?KA389::999:::4GTB@W~k647<80+.58876899988975-)+,-.147632329KH<;;;:99878:<<<<=>?@ABCDHMRSOKGCBBAAFctK:;8576677678777778:<=>=>>====<<<<;;;<<;;<<<<<;;;;;;::;9:89999999:;;<<==;:99999;>?@@=:98764666667:=<=<<==>==?>>AFA:;<;:;;:;=>>=;<?D@GKGA45;<:99@HHA?D<5888:98765456667?A999<9>GIHB97>@@CGDAA@?AAAACCCCBACDCDCA??>>>>>>??>;;5>Z`J<68GQK<668875665566555555775557;AD?8456556554556645;:8::>GKNOJBA><9773-++,-/03;=<;;?@945;==<=?:7656776776430//-,,--./.-//..//0002365337;:731234651376579:;940/..,.4>CIA7301875666549@;/*,-*-012420/2/'%(-03441)((*)/?PE2,(*(''''',/0,-3767?FE7-/.---.0450?ij?./-,,01-.1.)(((()4=23=2',=@7.2=620/394<<:3.2462-+226@HI>5+)./8JQA,1<B?><2065//263/,**)*,2;;1,,23353/040*6K/CmA,6573,(((''))'%%&'()+1;<7327CJA62....+5AEJLHJG>Gk}sunG/4310//224<BIFA7*7A<:AOSLDBCCDB?79J^eN@IB-%)5;.,28@JC6.,-,+-3886?MNE;/60JVQKC76?FA@GHPaY@523<DJNG7))08:7<ACHQUWXY^[QNKIFNTO=,7DZZ:3654303E>.,-,051,((**0>OSI:0./15410233361bchllllighijlnoprsssrqqrtttutuuvvuuttsrtvvurqpoppmiffiicabbcb`abccccccbbbcdddefefghjjjklnnnmkkihgecbcegjov|~~~|{zywtpkfeghf`\\]^_a``b````````__^_aa_`a_`aaabeccjlebmz}{|~yz~iafhjnsumea`[Z[^^^^^aaaajri]bxpizzcZ^ef`]^s~p`Z^ddew~rwpigitwsponosxytkkqqnprlb_bm}u{}mfkxvklswvutqquyxvxzxti[VYgxvpnihijjlmpo_X`smq~jbsopxsenq]m|ullhdbabbbaa````a__^]_bedbcw{|zkfillkkls|twx~volhz~|wrdbbYY[[[]\\YXYMWRSieV[XVXZXUVVVYYTSVZUT^aSMQPOQ]h`VVWWWXWWYWX_YTXXVVVVUQMMOS]^RMNIJSWQJHHHGEFGGIKHJRSLIJJGGLQRPOORTTTTTUUUTRPONMNNLLKJRPBCNPPPONKJKKJIIIJIGQ[UNLMMMNOONLKJJIIKJIJKJKMNJGHIIJLLKKKLMNOPRSRPNLKJKMJIHHIJJKKKKKLLMNLL`wcWTTUUQMLMMLKLLLLKLORUYVQNKJJJIHE?;;=ACBCDFEEDDDDDCBBBTebULHE@>>=@EKRSNGFGGGRLKSXZXZ_]ZUUPVMNNOPPXl`EKQX_bp}[WUSPNLJJqmEGJFIGHQTSRSUL\\os~YLONMPZbdb``b_YW\\bZKHIIIHFFFD@EOGDEHKEEQOIJIJJHHHHKI@ejd|I:B><<<;<=>==@?>>?@><==;==<?BCBAA>?@>>>===>><;:9::878897:?;9?GNLKJIIIGGIIIHJE9:7?E=6789::889:;:5FP?9F`V456:6.))-477679989:857710/01258754345DF=;::998879:==<<<>@BBDFIKLOMKGEDFIF@C\\iMB;5376688678877778:=??=>>====<<=><=;;;;;;:;<<;;;;;;;;;:::99::::;<<<;:;;9989999;=>@@>;:886566778;==?BEECA@=;;;<?A;68;<;::;<<==<;;<<=CGKE75<9<>AGI@:CB98:99::88853444558:647;8AIHA88?A==CEA???>@AAABCCBABDDECB@=<<====>>@>>@96Dc\\B75<KOD777776665466655456655557:DE<555566676678985<KJ>999;;CPNEBA@?A=4/-,,-01/3<?>::>;79;<<<<A?;8767778763/......///00///./0121134206;;:861-..--0210./148964210/.18??BEDA;16F>32..0010.,,,.0331/./0-,--,059651)(*/7.6UM(%*('(,**()/:=:;;=CMSJ5&*+,,-266647B?3//.///.,/882,'''*6=102-)+592/1446411415676411.)&*4/(07BHKB::98LfP*3?C>71,/68412340-**)*3:<=7/07759:2151*6G0.bT2<FKG7,*)'')*)'%&'&&&*09942:DHD<710322ALMQPGB@;Eg}yv{oF3731012202?IC<;6/8?45>EB:4/..-*0AOZb\\E@OM3%'(*(,6AF?521.*)*.9?><<<?D@/(12-;D<;CJF=DPOV`J8726?@CF6+'%%$&4GV[ZUOJGFFD?AB5+238KG<?SP747421/7E9-44.121,(-8:36JSE0,/121.,0660/64cdjppmkifgijlmnqstttsrrsstuuuwwsoklrutsqnlmnnnnnnlihgeddcbaba``abbccccccccddddeeeffffghijklljjihfdcaaccdq~~~}||{|xsqnieeffc_abaa``__``__^^__^^_````aaaabaacbcecbjutlis{|ru{}~}{eT[fgiruqnlf^Z[[]^]_a_`cdca`mmx{yb_lmiffn|ud\\aigdh}~qihhgr|xrklqssmjmrsssnggkow}wrjs`fhmrwyvroqsvxustvsi_ZZdzqfijjjklnn^osmrljmtsv}pbcZ]Xbmj~~woedcbba```````_^bjqqi]{{wmnopqrobdmh_cim{rkmrgpyxs}ynie[\\_^__]ZXXImT`lcUZWVYXUTUWZ\\XTTWWVWXURRQQQ[^UVXZZYYXXYVZ^WUXXVUTRONLMOT[[URQKJPUQKHHHGGGGHJJHINRSOJIHFJPRQPOQTTUUTTUUSPNNLKLLLLKKOOECJOPPNMJJKKJIIIKHMXVNLLMLLLKKLLKJJIIJJJKJJLMMIGHIIJLLLKKLMNNOOQRQPNLKJJKKLLMKKLLLKKLLMNMIVtvcWUTUTPNNNMNMMNNKJOWZXSOLJJIIIIIIC>>?CC>AFGEEEDEECBACIUaaVLGD@>=:<AIQTPIHFDHFQWVVVUWZ[YUURWLNPRX^ct_ELPW_cl\\WVUPKIIICDMNHGHHIPUUTTWQZ]]|sdn]MOMMMQWYXVWYWVSNOUUMKLKHFEEDDDEFFJNLDINIIKKJIHJJGJMCWhngFAB>?AABCDCBABBBBBA><>?===<>BCBAA>?@>>>>==>><;::98766677>@:=CGLKJIIN\\b[X[[WL:47AJ?689889:7889;;7FH::>=945776.*)(.46877899::9:<;97765687679517A<::8897899;==<<<>@BDFJIKJJIFEFHHHFBDMTG?:5256798677878888:=??======<<<=>>=<;;;;;::;;;;;;;;;;;;:::::::;;<<<;:998:;;;;;<=?>>>=<;9776788:<<=@DHHEDB>=:9;==<99;<;;;;;;<==<9::<>@@=57<:@CGHF<;@=;<;;;;<;;:64443331432469FLF=<AB=<<AA????@@@@@ABCBBCCEEA?=:;<<<<=>??>??=96OeS;78@MPA68876666566655556656555;FE<6545557768:<==@KSUL=657/<[[OLGBFLG8/,--.//-06<?D>:;<;;>><=ADB=966888652.//....00000000.012322241-3<<:850...--.0,*,0234334652/.1<GHCCHHFBAI>0/)(*++,.011469740--/3:;4./;C930-*.03--JX4%,*'*00/,)1?FE>7:ESYN0$%)+-/1200../-,-,,++))**2:92*&&+6<21/*)**++,.-1730..--.3:80..,0322,,-0.4IQTR?6SZ7+5>731.07820112.)'('*7=:<913><69?943-+4:+&Rb8;SSD6.+)''),+)*+,+*(&(/663;DGD?854644HRRUM@>A<Fg}xttcD6731012215>A82484973>JC633232/*5M\\`]NABGB4**)'((.:9004310-*,676766<D@401,)--4FF3+6KSILOB6019E:5D.$-,-?OD9FDB>:9ADDCHNG4*+(6hvN4@E?=6/--,/53231;JOLA/.=C7/9D:)-771///7>;5587cccgmmkiffgiklmprsuusrqrrtwwwwric_blqsrokijlmllllkjhgeccbaaaa``abbccccccccdedeeeeefeefgggijkjihgfecaadis~}}||||||xsppnhdbcffedbaba_^_^]]]]^^^^__```aaaabbaabbcceggdcfmuztostsqkeeu|dWZaagptutsmd^YY]_`_^__`bbcikcchgdfkceuvz|rm}wo|we^eiabyminpnr}|uqmhgilnlijloqsx|zwvuu|vx|agkjryyxqmoqstsqpvth`]\\^sjeihijlmmf[rlqqrlomilkeaca`Yfjmkvxoifccbaaa````_^ekuyrn~|yux{}|vkb[\\[[[^fszyolikstjUmصztf}hZ`abdda\\XWPu{T]hm^VZWWVTRTXYZZTQUXXXX_`UPQSRTVWYYZYYYWWV[`ZWWTRQQRTPMLMPRSSSRONNOMJIIIIIIIIKKLKHKTUOLKHKOPPQPRSSTVVUSUSPNLKKKKKLMNKJHILNPPNMKKLKKIIIHHTZPJLLKJJJHIJJJHHIIJJKLLJKLKKJJKKKKKJJJJLNNNNPPOOONNMKKKKKJIJLLLLLLLMNOJNfvcXUVVTONNNNNNMNNMS[_YSMKJJJJHHJJIGFFFFC?AFGDDDDEECBBDJOY]VNHEDC@>>AIQSOKIHGJR[\\XVTTVWXWTTYYOSVW`ns{ͼZENOU]djrlVYVOE?EKNMMLHGHIILTXWXSVd]POb``KOMMMMOOOOQQPPQOLLPOLLKGEEEEDEEFFJLHDKIDHKKJHHIJGHOIApisTGGECDDGIKKHEDBCDED@>>@DA><;>BBB@?>>?>?>>=>>><::::9765579@=:CGFGGHFHUpvzsR=CM=4=98889:8889:;;BB9:<83689973.++025877899:<><<<<<<9789878<722;<;:6A86688:====>>@BDGKIIIGEFEFHHGEECA>87846569987667788889>A?=<;<<<;;:9;=<<:;;;;<;:::;;;;;;;;;:::::::;;;<;:999:;<<<<;;=>=====;9778889:;<?AABBBCBB@><<=<<:;<<;<<;;=>?><:;<;;99<88<;9>?BC?;<<<<;<==>>?<96665320211129FKD?DE?<=>A@???@@@@AAABCBBBCEC@?;58=<;==>?=>??@=49SZA467DTK97:76776566655556566556=EB95445467779<==BKPMJH?65;7E^WJLMHFJNH8-+---...14;NMB;=;;==<<@EEA;66888641///////001100000/0222358843554430/....//+-6:972.06884.,/?QRG@CHD?ADB>:2-+)*-01/.2;><841/2@JB6/2AF6/,,**)+)&9YE(++(),./-(-<DFA87=N_L7G=0+./1-)(**))))((('&'))*490+(%)491..,+++*+--,,/0/-,,,.3/--,4;??3.1/3<=02?FNVNEA;/.:9631253120/.+'&((*3<><507B?:99731))./*#?bE6UO5/-,*''*00,-/2210*''/77;BC>>?><959KTTSH<AE<Bcy{xmR>6210../02352/-/4798;HMC648;<<94BYb]QDB@:64/-,+)'(-.+,01041./4434458;<:612-(.??-#)9FF84@H>.-3814?3266<FF6'/9766>KKIIMRG0&-&.qZ/,=OJ4+,,*',;A3+Cht`@,(261-.0/))351/04>FDA>:7a`\\]ekjhecegimoqstsrolmprsvuqmfba`chkmmmlkkkkjjkkjihfedcaaaa```abbbccccccdefeeeeeddeeefgghkkihggffghimw{|~}|||||||ytqpnjeabffedcbbb_]]]]\\\\]]]^^_```aaaaaaaaaabcffdccegkrx~tnmmg]Wg}bQX^^dnuwywrlc[\\faZ\\^^^``abfdeeb^`fbtzwuuxudkt{|g\\fin|{{}ysngegjighikljlqrqx}}ywrttw~}u|fcjhrwxyuonmnnqrpvvh^___mypehjhjmoqgevdpmlkkmmnnkk}pqple^^nsphgecccbbaaa`_^_fjquqx}zxzze`cbbchoqvutviWXcbarxwpf»|_PvɮnzqY`cdhjf]WUTPRW\\fht{XVYWVROOVZVZ\\XYZYY\\ej\\QQRSUWXXYYXXZXUS\\`XUVQNTX\\[RNNOOPPQRRQRRMJJJKKJJJJJIJPRHFOUQPOMNPPPQPRSSTVVUSTROLKJKKKLLNNKHGGJNPONMMMMLKIIGGPWRKJKJIIIJJJIIHHHHGGILMNJGHMONMMLKKIHHIIKNQQPPPONNNNOQPOLKJIKLLLKLLMMNNLKZxvbWUVVTPNNNNNMNNOU^`[PJJJJJIIIIIJIHIJJFCBBCEDCCDEDBBCFFCQYTQLGKKEBABFNRPLFEFKX^\\ZXUVWVWUSU_ZQY_`jryѬTDNOT\\dkjsUXTOBBHNRQMJHHGGHJNQRVT\\cRMPGV|znNOMNNNNMLOQQRRQSSOPOLJIGEDCDDEFGFGCBIKCEHHHHJIHGGGJKAFxbIFFEEEFIIIGGEDBBBCBCBBDFC@=;=@DAA?>==>?@>=>>><::::9767525=9<FIGDBCCJ[l}jd_K58:9877<88789:<>@:9:967:<80/,+-24444567:<<><<<=>>;9:::9:;:548<;9;VJ6578:<=<<?@CFGHJHHGFCCEEGIIHHFD:43546889997675677779>A??=;;;;:9;<>=;;;::;;=<;;;<;;::::;::::9899::::98:;;<;<<<;;;===<<==;:8899:;:;=@B@?@BAABA@>><<;:;;==<<<==?@@=;;<;:78<86:308:>@?>??>===>>>??=<8887521221138CGB@BA@@??BA??@@@@@AAABBBBACDBB@708><<>=??==???=97?QG344:KN?7:98776666665444666668<@<764344457<>>=>DKJC>>=:;@AEJC;JTLEENXTC.)-.,,-..3?IG=>:99;=<=CFE@86997531/////00011110011111235:;:72/++.111////0007?=972/27;93.-0>KD719B82328ADFA946553-*/9>>:72/4>@==<<@:-****)),,%-NN.)*(''((('(6AAA=938OK1F>3*-02-+,--,)()))*))+,,,052/-(*24--,/4430/010,)*+-+*-24.397EP78D?EPNJRS>./2>NXVN>17@<4230/8800/-,)'**,7@=3/6=830,&()&&((+&.UU4?@.,,+*('+362/02246/(&*5;<@?8>KG>86AOTQNE@CB9:PbkunH1/,,++./00//.146679>EE?:538<?>;;K_^NEED;774-***)(+33.--,2?JJHD@8555327>92458>?4.24249;@JI:2445897:?;779<A=77888?DDLQKLC+$)#*i}E))5G=.,+**),;JA2?q`.&*(')*)('''*-/149AHLJB73_^\\[]cfdbacfimppqqmihhjmnmmjebabcceghiklkkjiiiijkiihfedbaba````abbbccddddefeefeeedddeefffgikjjihfhlopqsvvy|{}||||||xsplhfecbcccccbaa_^]^^]\\\\]^_^^_```aaaaaa```aaaabdddgorwtnoojfny}w\\T]_]bkpvwwwtkdorc\\^^_deeemokd`fvzoqdjnumbcip}s{~jhiffhhhihhkllpqqv{yxwtrvnq}|y{fcgouz{wrmilnnnnqngcbagpogeijijmljpyfpmmmpqqqxvn{{|{wsbuىcwvbaebcedbaaaaaabfjnpoq~yzz~}h`eefmymbb^ef[\\b`hmtpt}m^Taηbov|yc`cejlg^VUVWYY[acgv{VZ_XTMIU^[^d`]_\\X\\be_URSVYZZXXYXXZXPMY^VRSTV[`^VONOQSSSRRQPQRPLJJJKJJJJJIHMTOFJQQPPOOPQQRRRRPRVVVSQPNLKKJJJLNOMJHFFILOOMKLKLLJIHGMVRKHJIIHGHJJJIIIIHGCHLNOOKGHOPPONMLKJJIIIJMORQQQPPONOPSSSSQOMMMNNLLMMMMNOLRgzt`VVVVTQONNNNONOS[ZVOJIJIIIIHIIJKJGFJHDCBBDDEEEDDDCCDIFBNWSROILOME@BEJPPLEDCJW^\\YXVVWVUUUY`[R]dfjpwǚNENPU]eijvVVTOKIKMQQMJHHGGIILMMSZeaPORNBCb~{|RPNNOPPOQRTVXZYYY[[]SHEEDCCFHIGFEF?AMG?DFCDHHHIFHEBLTFUVINGDDEGHGEEDCDCCBBDFFCCBBB@?>@DEA?>===>>><=>=<:9:99747<CIKEACIQSMFCJ\\hmzz{|tituN67:876<<:9889;>?;998557:2,)(*/45422689<=<>><<<=<<;;:::;;;957;;5K\\Z:679:;;;=BGFEEEFFFGDCBCEGIIIIHC;223578988976;=;:9868=>>@=98:<;?GGEA=;<:;===<;;;<;:;;;<<<;988888999:;;<<=<<<=<<;;;;;;;===;:::9;;<<>@B@@AA@@@@?>><;;<<<>>=<<<>?ADA<==<;8797:?>@BEFFFFDB@???>;;>>?>;;:753344336=CB?@@@??>?BB@@@@@@ABBBBCBABBBBB<0/:><=>>>>==>@@=<<:CI7157?JF88:8777666654335668878:;:875434448>A@=>ACA>===?BAA@?<<TaQDCL\\h\\@1.,--.-./3:==A999;<;;AFGD;58:6310//.///001111000112234674200.+),/011111126;931//25:<:2.0378/((.5/-1..7;>CCAA@BC;327==9/)*/-/COD93,*)**+),..(&?T;%')'&&''&&2@=541,,49/.,+(,12-.792-+))*++*+-////0232-+--/DH=?A941.-++))+.-+++1BOG5>H''EQSfiPDTZE31+/;DU^XME@611018822332/+,,*.;>61485131*&&%(('*)'EZ9'*('(*++)*2752111231($)3>?@?>FNO:05BKIDA?=95215:DX`B+***,-02200.19;9999@D>89:9<>@=9<JUPBBIC964/+*)()')5;648?M^ca\\SH946569981++3<>;:;;5/1:GQJ85>ACGCDBDID:/,5=;8679;<=FUT@<8.+-(/Y\\2$(--'*-(&))(.CN>7nM!(.($%'()())'(.589@INMA6/^]\\[[^aa``adgijiihdbbefggfdb``bbbcegghijjjihhhiiiiihgfeccbbbba``ababcddeeeggfffeeeeeeeefghhijhgghkkjjijnv}vsx~}}||yqlgdcbbaaaaabbaaa_^^^]\\]^____`a````aaa``````__accdefhr|~vtw|{zva^da[Zahnuz{zvu}cVYajmpljqpsquj_dfbaeknxoklkighgghfgjmmosx{{{xusvvpsxxhflt{{vrmhlomjiifhhcamzwmghjijkkgqrhknmnrttv}vvs˘rcccedbaaaabeefijlkgoz}|}{gfimqzq\\[`fwSS_abixxs``]_fxputwxuw~ra`elnf^XW[^\\ZZZ\\]bw]f`XOJR\\^^`^\\^[X\\^`aZSV]][[YYYXXWUMLY^WSQW`^\\WRPORSSTTSRRQPQPNMMLLKKJJIIIHPUPLMOQQPQQRRRRQPNPUWVROMMNNLKKJKMNMKIIKMNONMKJIJJJIHJMOLJIIJIIHIJJJIKLKLLLQUVQJHKOPPPOOONMMLLJIJIKNOQRSSRPQQPOOPPOMMOSTNMMMLKMPONVim`VVVUTQPPPPQPNR[YRMKKKJJIJIIIIKKJFFJIAABBEFEEDCBCDEFGINTVUQNLKLRMDCFHLMKGCX[TVXWWVVVUUUVZaZVZ^]]eqLGLPW_efloWWTRPOONMMLIHHHGGHJJHJ[j]RSOKJGADPYWOPMOQPQPQTZ__\\Z\\_adbSGEFGHKNMIEDCBKLAABBEHIHFDFHFLWRBHRMOIEFEGHGEGFCDCCBDDFFEA@BCCA?@CC>>===<;:;;;<<:99:99567TqztiWGGQ^^QHFP_fnw|{uy|z|{uP774348<<86789;;98774354-.-/2344326;<====>><;;<<;;;;<:;;;:56:=7NTG;8999;;>BFJE=<>DFEEDCCCEGIIIIHC:/1356898787=GLIEC@<=@A?A>;;?CDHKGBBB>89=>=><;;<<::;;;<<<=:8888899::<>>>==<=?=<;;:;::;=>>=<;<<:;>??ABAAB@@@@@@@?=<=>>>=>><<=>>BFB=<=>=96:;?DFKMMLNNKEB@???>;;>?????=85455535::<??@>><;;?CBAA@@@@BBBBCCBBCACA:2.5?><?@@>>=<>@A>9<<:B>4589@G=588777665664445677777898898754458=A@?>=====?ACEDDD@>G[f\\GBN\\`TGA5.+.0/1224:AE9;;;;66>DFC;578630...///001233110122233341.--.--.0012553433670,-)*045861-571,(()+-..0126:<:<<<CRZK?96:<3)&()(:PH5-++++**))+/.'#4QJ-*+)*-**)*1>6,++*()*,*-,,/33,-8=6-+((+,,+*),01.,,/231,0D[[F>>942+%(&&*+..++6HND5)+0)$-EZopS8:N]H*&'&-9ALZbZE/),1358;::93-..,+3<<68B?:BH?2)%,20,*&5RF+&(''*./.+.5643422391+.4:=>FEAEI5(1<=85200.+)*(&(6E>60-/02320-.0358:;;;?CFEEEC@:8766<ACEGD>962033+),)%'5<=FOW__[XRE6275:CB5+'&',16;@B>86:AA4+8GHMLKVUPWV@/,-2789::;<BR^I26=;;=35H@-'&)').+'('&%&7RI8dw=&0.(''**++**((-232>JLH@7/\\\\Z[\\\\^___acccbccbbaaa``_____`abcdfggghijihhhhiiiiiigfgeddddcaa``aabbbcceeghgeeefeeeeefghhhfedgnqjccdgiow{yutxzz}}|{xpifdba``____aa`a`__^^]]^^____aba````a`___``___`aaccdju|{|upy|jceaYZ[bmssy~y{}m\\W\\enrnmu}xvqllr~}b_fc`ddiu}vjijhggfgggjopos~zxuvx{yoxckvwvusnjmomkjfcdhgguvhjlijlkjhekmnnnnsvxzww~qecfecbbbabddefghkkidku~tv{}|geks{zzo\\ZdgoVO[`cm}y|ufa[]Tkx|xvzqa`dnrk`XX_`\\ZXXZXTa~`icXMPXXYXYZXYY\\]\\a^UUY\\[ZYYXWVXWJKVQSXS]h`SRSQQSTTTTSRRRQQPOONNMLMKKJJLJIQYVONQRQQRRRRRQPNOTVSOMLMNMMMLLLLLLLLNPQOOMKIIIJJJJIIHIHGHIJJJJJIHHJLNORTTTSTMADOQPPPPPPOOONNLJHGIJLNRTUUSRQNMLLLLKMOSSONMMLKMPPMO^g`XUUSQQQRRSONWYXSONNMLLKKKJIIIIJIGFKGBBCDDEEEDCABDGJKPUWVUQNMKJQUMGEFIJKGAimUTWVVVVVUUTUZ_WSRSRR[noLILQY`ekw\\XYVSQPPOMLJHGGGFGIIJECYbURTOGIPJHJ?S^JSOMOPPOPSX[[ZZ[]]]d\\ICDFIJMOFCDCIRH@GEFNOMNKFFFHUTC>KnLKNIHGEGHFGGEDCCCBCDGFDB@ACB@?@B>;;;;<;989:::::77::54ABYuy\\GESXQLIGLZemzyw|~|Y<779<=>;9<88876664011/-.15953345;>>>===<<;;;<<;;:<<::;;:54::::;9;::89=AFHHD?98=FHFEEEEEEGHHHHGC;1257799::99ESSPLJJGFGGDCFIKIIIFB>>AEC<:=??>=<<<<::;;;<<<=:887889:::>=A?====>=<;<<<;;;=>>>=<@BABBAABCBBB@?>?@A@>=<>@@???=<===?CFA<;=>=86@GIIIKKJLOOIC????>=?>@A@@??@=745433422=A>=<:869@DCAAA@AABBBBCCBCCCD;/-7?A=>@@@@@>=>@A?;;<::?95989B?438877656665555676666688::;;85468<BCA@>>>==?BEFGE@ES]\\dhZGK][JCEC;1)*03205JQH;==;<;06EFF>67852/.////0002343110122233221-,---04776677654221,,120.-/22-*9<2+')*,-/02457:;7777BTTF>9;?>:6/(%-EH3)+-,-/.+((*+,,(*GT;./..5;6026;1,+***)*+,035563,.<@7/+((,---,().1/,**-0.2DRRQA87656:4/-,-.--19A<1,,34.+(')KwrOE9.@QA0.0395..?PXSJ9/.39?B==<3/..01468BND;HJ;0))2=;2,++EWC-,-,+0320.3655568<DB4,233581+041*-31/.+))*'&''(&(3=>;655542,*122499:=@DJOROG;0/...-06<>>:645=HI=4484,&.<CGKLMORQKA7356;CIA411,),-2BLGA?<:0-5>ELIJY[KDPR?0./48879>BBHVR7*25//20054-*((03*&11&&+'%@WYfmZJ9--,*+--*)&'))('+>KIA950Z[ZYZ[\\]]^`a`_``aaba`_]\\[[]___acddfggghiiihhhiijjijiihhfefecbbb`_aabbabbdeddeeeeffffeefeedeglqw~~rdemomorqoquuuy~}}{xwyytmidba_________`______`_^^``__````````__^^_]^_```acjoqsuz{nmqv~nhhgcZW^eegryyxwrjacglllkib\\Ybkrtsnjsogppn{hgiiifghgipwrp}~{zxuwswtvtrrqpmnqrqoicbgrzwgjlijkklnjowspollljgxyndabcbbbbbccccfkorqmrtsjn{~{vgcgt}qke_bgp[UZ_ctwr|~lkbZ[cZh|yxtokc^]cpwqbXY^`[YWVXXQRn˲pgn^NPYYXUVYZUSZYW]_ZVWYZYYXWXVWWOPSJMW]igYQQRPPQSTTUTTRRRQQPNNNNMMMLJKLKGJUZVSRQPQRRRRRRPOPSUQMKKLLMMMMMMMMNNMNOPNLKKJJJKJJJJIHHIJKKJJIJHEGMNNQSTUTRPMHBDOPPPPQQPPPPOOLJHGHIJMNQUWWTSPNMLKKKLMNOMMMLLLNNONOZd_XVTRQQQRSSPU]WNNOOOMMMLLLKJIIIJJGHKHFECCDEEDDCBCFJQUWXVUUQOMKKMPMGEFGIJGES]XXYWWWVUUUUW\\^SMMOQT_scLILPZafuYYYUROOOOMLJHGGFFHIIJCJ]SMSSTOIHHIIFDjpJRPNOOPSTRRTWYZZYWSXUJCELOMLKECEEMKHIMOQSRPPONKHGHECDCcuHKNLIGEFGFGFDDCBABAACC@@A@B@@AA@><::;;:879:;;::878:;S`]UXlvz{YEJMNNLJHMYdr{`OIGGFGGGCEFHHA765210.,).3543358<;<=<<;;::::::99:<<::;;954:8604;;::9=CHIHE=;::<DHGEEFFFEGFCEGGB;3147999:;78IZVTPOONOPQMLPQNIE@>=@BDGHHC???>=<<<<<<==;<<<:9777889;:>@<A?<==<<<;<<;<;;;<=>>==;?IJGCBDEDCBBA@ACDCA?>>@@@A?;;<<<>CEA>;;;;64<DFBCBCEJNPNG@==>>?@@BCA><=??:54434108AB<89:75;@CCAAA@AABBBCCCBCCD@3,6BC?>@@@@@@?=>?@?<::;8::7899<>726878666655555676655569;<=>:5356:BEBA?>>???DHFFC@Wnm_fkhSJY`QBEIGD6,.2203KUHEGB;:<00CHHE=9:71/.///00001232110122334322/..-.38:;;:76554452007=:0)+12,*8;40'))+-/12320..5:<?DJE=:89:<AE9)%.93)).-+-00/.-*+050'7SF.,../3544661/.+*****)/:?6.841:;60-)(.0026/(-2011000-7D<57311214BGDB?855586.((+09=5*))#.^kI?;*&4EE=;<A;-$#)5DVYL<25;>=;=;1,,/102>ID78;7,()/5=B>1212SW7*/0-0895014468:=BGC1)/111-'#%'(*-/-,+****(')*++-3788755552,.5558;;<ADHHHLL@,(./,(&'/355-3@EDGJD<=?=70,39:@LOMKHC@>88>AENK=8<==;69JVK@?;3/06>??Ma[D93;B910136988?JJJL<+,-*(&&))+.+*123-+DYE)%+*#&Gt{[=011-+,-+'%'((%%.>GE8022ZZZYZ[[\\]]^`____````_]\\ZZ\\]^_`acdeeggghhihhhijijjjjjiiihfgebaaa``aabcaacddb`cffffffgfddecekusoutpppoonjhnwzwrpoomnsvtqkeca^^_____`aaaaabbbbb``_____```___^_^^^^__````bdfggku~{onnqzysoohZU\\^\\^hpstutojijjmmd^Y`}}zplj^brxxfkmkfgjghnttml{|yv|{~ystttssopttqnhcdfzrhlljklmmljsxspnidcb`{|xhcacdccdbcjpppnpuvslp||ueecblsomdajxbZ\\^cssu~prshd^Zae[Yrqebb`_]ZYYat}ueYZ]][XWVXYXSZ}difRMVXZ[VXcf]RQW[_]XWXYYYXWWXWVY[\\VKRlpYPSSPNNORUXXWVTTTTROMNNNMLMLLLKKIHMTWWTSRRRSSSSQQPNPRPMKIIJIJJJKKLMOOMLLMKJJIIJKJJJKLLLJIJQMJJHHHLVZSQSQQQPNKFCA@DPRPQQQPPPOOONLKJJJJKKLOSWWUSQPMLMLJKKKKKLKKKLLNNMU`^WSQPQQPQSQX]XQNOPONNNLLKLLKKKJIHJKKKIGEDDCBBCCDEGLPVXSWXSQOMLJHGGFFFGGGGICPZYXXXWVUUSV^_^RNNQUXezybNIMPXbhsXYXROMMMNKKJHHHGGGIJHFZYDKORWSIDEILNKLLNOMQOOWXSRRRQROKKNPW`gqseQKJJJFHHIRQSTSQQOMLMMKHEGIGAWx^JLLMLJGFFDDDCBCAA@@?;>B?A?;B@AA@>=;<===<;;;;;:87985Gm]]^emweKEINNLNLOUY`kywegysaRNMMLMMKPUZZVD7:DEEFC===:6548::;;;;;;:::999:99:<;:::;;66:3139;9:;?DHHGF@:;<;;=DGHFFFFDFDCEHF@8415=<99885<PXTSQPQQRUXWTPLIE?=>ACGHHLOPKE>?=;;;<>??>=<<:887777778:D;@@?>>====<<<;<<;;<===><66AILGDEGEEEDCCDFHHFCA@@?>>?=;<<<>ADB@<976447<@?>>?AFMQRMC=>?@BA@A@@=<<=?=9545415<B@87??66<?CBAA@@@BCBCCCDDDDF?05BFB>>???@@?>=<<??;9::988779::::86798866655555554455568;=>=855649CDCA?>>??@BEIHDTpymbghcXQO[`KBKLQO>.-412DNEKP@6:<0*>MGID;:71/..//000111222122334455541/.0259:;=<744458:963586/*-33/,6423+)**,../0/,)3>74;=?=:99757>A7+(++((++,-../021-*085+,GI.%*)*+054210.,+*)))*(*5;628743210/+(.445=>1+268;9888:9.----.//-013@KMIRWM;25:97:6/+)))'6LE/)**%*:GGE@5*(&%$&,9JMAGRG77792+*,/16=<2-/.)'(*-.08>22=*:XH*)0039>;54447:<=@A:01640-,)'&%&)-/,**)*++++*,/03:7113435753778888=ACCB@BFB4)+..*'&)0;?=5:GF=7:?966653-***2BJH@=ACDBAEFIOJ=57>BBDJPUO>321,/637P_P<:606><2.0.1446;EHFA4+***,,*)()().54+3N\\L6-,+(($*\\qB83./.,+,*)'&()))08>:.,02ZZZZZ[\\\\]]^____```a`^][[[[]^_`aceeefghhhhhijjjjlmkjjjijhggdb`___``aaaabdba`aeilmlhggfdfkosz~xusrpooomgfkmkiffgfgikmligedb`_____abbcceedccddbb_^__`````__^^]]^___`__accddflxysqqyysoh[W^^YY^aacfjnolikohcrrkibZdpinkehjiikknmgi~{yxz}~}psrw|}xqqspjjcadeu}{pkmmlmmnonpwrouoidddbczxtz{}tdageddcdjqrpoopqrqnn{zlcec_Zupfbbdho}j^\\\\^lyxy||th[_dg^X]hkhd_[YWXYYYYW_ukX[^][XVVVWZZNcx]ofQOSZ^\\W\\sqVT]^a_ZVVYZXXXX\\\\\\\\\\aWRgucOPRQOMMORUXYYTTUUUSMJKLLLLLNNNKKJIIPUVUUTSSRSSSSPNMMNNMKIHHHGFFIJKKMNMKKKJJJIHJLMNOOPPNQQOOMMPSV`hfWQRNJJKKLHBBDACRURSRQPPPOOOONMLKJJIIIIKPTUUTTRQQOMLKJKKKJKKKLLMNS\\]VPNOOPPQQPRSQPPOPPNNNLJJKLMMMLIILLKJIIIGECAAACDEGIIJW^[WUSQOMJGEEFFGHGGGHHQ[YXXWWVUUTWaa\\QRTWZ[isaQLORYbkpXYXQNLLLMKJJHHHHGGIKEI\\RFMMPVTKHLOOPREgǚZMPMONOUXTNKIMXbipwx|~dRKJKJJQGIRRRPOONNMKKNNOMJFFEMUNMLKLNLKJGC@=?BB@?@?@ACIJJF=C@A@?>==>>>@@?<;;99989:2Eumedae^IAGMKNPP]dVKKR[^Z_^\\NHJWWRPNNMKJIGMSXXQ@:JV\\ae_WPH>:6>=<=<<;;;:::999:99:;;;99<<8781/18;:<AGHGGGC=9:;;::>EHGEEEDCDGFFC<423=GC>;86>LRMKJHGHHHILQNIHHFBCCCEIJJNRWYR??A><<;???>>><:66667789::A>=?@?>>=>==<=;<<<;=====<748@HJNMHGFFEEDDGHIHHGEC?>>?><;;<>@BB@<8653249>A@@@@BHMRPE>??>?@@@@A?>><?C?866435:B>;?EB88=@CBAA@@ABCCCCDDDEEB<2;HECAA?>?@A@>>::==<;;;:877778758:8798755555555534444578;=<:75774<D;BE?=?@@@AGNFCd}|qbhi]RSLQc^?HTTTK9.424>IGMJ63:=4.;QGGF>:720./00001112222123344555652//25788;><754468;;82//,*+.120.1-+.+*+,++),0/-2B=/-03776786435684+**(()),.../020-,299-'>K9*.,*,.342/-.,*)))))'%*/000010..02-(/656@D>12;?A><;;;89730221/-+)'-=VYV\\R@IXUH=71.---..,7:(%$)(&(5IM<,((''('#$+7Dc|\\<242/)()+.10+)-)&%%(())()+',<0(CR9(+/49==;::75:=>=;:9>@8/++)(&%%(,--,+*++-./-.366:80/2335778:9879<ACCBAB?7/.211///4:AHGECD=47>70352//11046119977<?>ADA?GOLB94128HQORQ;()010/5O`K67<926?=621.))2;=;41.)()-.,+*)'()''.636GA'%/1/.-,*2xS,64,+,,+*)(''(+-+,2754510ZZZZZZ[]___``_```aaa_]\\[[\\]__`bddeffghhhiijjjjknnmmllkjhgfdb`^]^__^_`aaa`__dlquwtpljjlnrtx~~zy||wtrponnnmnnhegfdeefgggecccdffb````bbaafgffeeeeddca`__```_`__^^^^^____`abcdefm{~y{~vzrnu|~}tnfXY^[XWXXXY]cgihgosl{~sjfbd{polehhhijikqjdxywuvz~z~xprpu~zqswoii^\\bcinvwnjjlmnnpqruuim}pcbdec_]j|}~rs}{uu}|t`_hfffbhpsomqsrponnkr{|rehfc]Qrj\\Zcgejvp^]Z`o~{sr^clf]]aa[X\\[XTV\\^^\\YVWohX]_\\[YVVWXZ\\T[ybho_SMS]\\TRbjcba_ab^YVYZXY[Z\\^_YUXUpoMNTQQQPPQRTUX]YTVWYTMIJKKLMMNPPOMMMNSWUVVUTTSSRRRPNMLLLKIHHHHHHGHJJKLMLLKJJJKKLLNPQQQPNKR]QSV^gipwhWKMNLLLNMLGA@DFJOSUTSPPPPOPPPPONNLLKIJJILOTUUUTTSQPNKLLKKKKKKLLMOUZZTONNOPPPPPOOOPPPPPNNNMJJKNNMMMJJMMKJJJIHFCBAABCEGFEFVi[PUURPMKIHFDEFGGGGHFKVWVVVUVVSTY_a]SW_`ceweTPQT\\eij|VYWQONNMLJIIIHHHJIILGU^KHLKKMLKQWUQROQH|ıfNQPPPPPSNNVbvnZPLLLLRWGIMMLMMMLORQPQSSRMIKJILNNMLLKJJKLKG??BB><?@DLMNQPNDCABA@??@@>>@?><997799:;;D_zyphYIADGMSUVckYFBGJLILOQMFBCELSTRQPQNMRRRRTI:CT[\\`b_XRHCAAB@<;;;:;::9889999::;;99<<67932389:<AFHGHFA=;:::::;=BGGGFDBDGB><9518FKE@=85FTMGFD@>@BBCEHGGGHGFFGGIILNPTSWZH@CBB98?>?>>?;887667789;:<@;?@?>>>?>=====<<<<=====;9:=>ERTLGEEEEDEGHHHHHIGB@>?>;99<????=<:653239?A?>>>?AENOC=>?<;;>ACCA@?>BGD<65544?B@DFEB<;>ABCBABBCCDDDDEDDEB?:6CKEFFD@@??@?><;;<<??<<<;98887436;:77765454456533444458:<=:888:99?A4:GA;>?@AELNDBd~}qdfhaZVSRS]GAPTMFH>224:MPF;655683:NIFF@:631000001112222223333344320/0235:<=?;32554577761..,+--..--,*(***+..-*,.02<D41<5/6?@<72,)(196-,+(()*+,-./01-,29CD3%0AD;5/+-+,41//,*)(())))(&&(+-./023121*,657DDB:3:CFA<<;::<;74379647826CVa_OC>WomaD1,/-,51./44*)'(+2:67C9,))''&(),('8etTZP@4(%'''(*./-*)),/,***))&#&5:).LJ4,+27899;?<88:>>;;==91-,,)'&&&)-11,+,-,-0002466752222356688756;CCB@@C>/%*8B>868<@CDB>DF<0399625998668AQ\\R8/65320127>@GKKIHD8/4HSOTS7&*--,9WX:09>D=17>:564/)&098.(''().63*'(((&&*,2?E93B@-'+06/+.#Gl@.84.*)))))(()*---059:=<71ZZ[[\\\\]_`a`aaaba`abba_]\\\\\\]^__acddfffghghiijjjknqqpnnmkigedc`__^^____`a``bflquwxxvsrssnkjowxwwz~zwsonnnnrurmkigfeeffedbcddfhieb`__```aeffhiihghhhgfdaaa`_``_^_```````aabccdcirronomltz~wmsxz||tmk]XZZXY\\]]\\[\\cecoxjd{~tic`rxqiiigiijkljivotuw{}}z{qqw~{quvojg^\\aaenyvkhiklmnopqnsogrr^`eecfd][i~yszyrrzwtzi``fgfcfkmkmrrplmnpmnr~jaigcW^e]^igcpxbZ]o|tsziefbcb^]a`Z]eimoke]YUNae\\ba\\YXUUWYY[]]i\\gi\\TQ^aWQXeig_\\cd_YVXZYZZWZ_aYUQeXMRTTTTTTTVWVXdhYV]]WOIIKKLMMNQTUSQUZWSUWWVTSSSSSRQNLJKKIJJJKKLMLKJIKLLLLLLLLNOPPQQQQPOLMPX`kt|}|}dGCGHILPW[^XTOHFHKLNPPOLLMNOQSSRRRQRQONNNNOPTUUTTTSQQQOOOMLLLLJLLMOTYYSMMMMNOPPPRRQQQQQPOOOOMKIKLLMMKKOMIJJJJJFBBBBBBCEECGT^WUTPPPNMKHFEEEFFGGGFFLTVTUUUVVY[_a^UakijvjVQRT]gefwUXXTRPPNLJIIIHHHLIBELdY?JKHJHFKVZYUSQPPNyLSPPNKNY^nrYKLNPRVZ\\OGHLJJKLMOSVUTTSRSRPOLJRSNMLMNMIFJORQJBA>8:<FELOOQNCEDDB@ABBA?>@@>:77679:9<U_T\\gzr_KABFJQWZ\\ceXLLOPRQUY[TJLJEIPWURWYSUSRPORM>=MUWVWVTPLJHGGEA@><;;::988899999::99;:5788888999;@FFEC?;:9998888;CFFDA?AA<9788:BJG?;;65DQMIIGFCDFHMONKHIJIIHJJKKNPRTQPYRCBGG85@?@???=9975566678:;;<?==>>@?>=====<<<;==>>==>==<<CMOKIGEEEFGGFFGIJIFDCC@;99;><==<=;864449=><<<==>BHF=:=><:<=ACCB@??AEGA85559FACFEFD?=@BABAABBCCCDDDEEEC?=9=NMGJKGC@>??>><<=;<?>=??=;<<96569::86555553566422233249<>;78:;;;>A?86>B>?@ACINNACez{tcZdjf\\YXSUN@BLNGFB3038DC<7868;;26INIF?94211110101112232333444553-*-4524=EE;-)285234434333//55652-)''&(*-1440.,/8B?2=ND76BFA;7/++/42/,)((******+..*+7EF:/104BE8,*-*+:54;2,())*++0/+)*('/469:3/3,&/25DIGFB=BIC<<<89??7149<?BDIQRQRfwZG>Yxw_=-*-.142+/40++1568><630+)))*-37<5,9SW?HVZR:'\"$'((281)+-285/,',78-'0A9'9OD0'-010.3;=;9:?D?8840.+,,+')*+,263,+----./01123554221246566526AD@<:?D5$(5>JM@99@D?;:;@?6230.5=;:<?@@FQ[d`F210-))*+4BIHGILRTMA<BHGKD/('$&D]L,&+8E=0.8>3,//.-/454-,-+++170))*))(.<CBHOF4FdT@ACE?*$&)721530-)(()))*,--/28;<=??:*Z[\\\\]^_aababbbba``bbba^]\\\\\\^__`bcdefefffghijklossnkkkkkjhedcaa`^]^___```afmqstuvwwwvwsidehnuy{||~~||{xtplkjkptrlihfffeffebcdeffgigda``_^^`abcdgijklllkjigecb_^]]__`bbaba`abbcccccbcdc`anwuu|rry}xw{xn`[WYbhijgbbc_asypyojzyukdgtgjiiihhgkovnuvx|~~|}ut|qjjjgha_aadqqfehjklmnpolirmmz~t]`efcedbWgwyzrry}{pgedcddeipsqonnmoqsy|qo~mage^Usz]_agd]_dlXbu|r|rkknf^\\^a_\\WYdhovg[XVQUnyibge]WUUUW[[\\]\\]ve[eUWWakgXWcea^bgf`YXZ[ZZ\\Y[`b_USZLWUUUUUVVVWWWX`jcV\\^XOIILLMPLMQUURORQKKTVUTTTSSTTTROMKKLKLMMMONNNMJIKJJKLKKMNPRQPQQQPONLO^mt|tRCBDCFHTdg`\\`^WTTWVQNMLIKLKNQTUSTTTSSSRRRTSRTTTSSSSRRRQQPNMMMLKLNOPRWZSMNMMNONPPPQQRRQPPPOOONOPKGLNLLLOKGJJHGFDBBCCBBBACCDKNNRNINQOMKHGFFFFFFFGGDKUUTUUUVXZ[^`^WipoueTQRWbjkirUWWTRPONLJHHIIGDQqo^cbMMY[XRQNOUWWTSRQQJKXRHGO^o^QNPSVVUUZ_\\JJILJKJLNRTTQRPPMNONNKIORONMMMNKGEFLQOEC?;:9HILSPRLDFFDB@ABBA?>BA<87767;=5Hwzom_baage^LCGMRVRY]`fdXPSSUWXZ]\\NGEEEGIQVVYZVXWVUROLE@LTVURPNKJIIIJLQQLF==<:9888988889988:978889889999<@@@?<9988777788<>>==<;<;:9:;@FG@;::85@PQNLKLJHJKPWZWOLNMLKLMMNQSVWVU[RBDHJ@=AAAAAA?;976666678:::;<<<=>@?>@>==><=<:;<=>><=<<;98?HQTKGGHHGGGGIKMKIHFEB=<;;=;=<>>=:854579;;:;===>>:88:<:<>>@BCC@??=?EG>547AFBCCDFEBABB@@AABBCDEDEDDDB=<;9ANKKLLJFB?>>>>=;:99:<>@@>?A>967:9777655555356652111126;>=878:::;?A>:;<@@>@@ELLC7@futt[Mbmh`^\\\\ZVH=?Vk[A3/220;?969>?>96ISLF>53211111111222232333434664/-177/0:DA/(0543111114562/28>BCA9/+))(*-.1110102<=4ASMF>7@LF;6300210.**++,,+*()+,*1?E9-4DH:;C9,)*)0D<0<@71-,00+373./.&'285<C53/&-.+8NTZ\\MBKD>><37>;105;BNVNNWVXR^thWBZ{L41-+../.,/.-,4>A:66896-*-*-4<A=B=/COIC88@OYP:'\"\"'.0,*(*0:=4,%+<C9*(:F4+=C.()((()-37657;D=8873-)+,*),)+-582,+----,-/..,-221133464132226>@><9@H9'1==JSB79AC>;;A??@A80/4<?;9;?EOVPGD<2-''*(3FL@@GGIPSWTSD3/230,)'.JY@$$/9;7/+07:4*&-///430--,**,01-+,,)(/?KJCL_V84\\qqxvaD,&+)$)--/22.,*(**+,--15::96572)[[]^__acdddccbaaa`bbbb`^]]]^__`abcdeeefghhjkmprrjcceefgggdbaa`^^_]^^^_`bdglnqtvwvvwwurpligjqv|~||xtx|zvrlhffgijgefeffffffdeeegfgiihgea_]]^]\\[\\^`a`abfijlkihec_[\\__`aaabbbbcbbcccb___^\\_mrkkxzpuyxux~scTZpsnswuqh[Ylpm|pkzzft}{{rmlsffkptqlkkpswuvz~~u}r^]begeaaaceaaeikklmmnmkjshn|}u]acdccdcc}{qrwwtjgfffcissqonnlkrtpqvqmmo~{eae`Z]qn[ab``^ZWmyYalihd]\\]_^^__hviYajxzqcXXWVT_kjkje^XVVVY]_^\\^\\hÕ\\\\YKQZipdXY]_clkfbZXZ[[Y[XZ^``JhlLUWWVVVVWWWXXXXZ^aZ\\_YOIIMLOSLKPQPKJJGFKRTSTSSSTUVVSPMLJMOOOOPOONNMKIJIIIHGGKNRTRQQQQOONKRhz{wsuaIEC@AKWiib^]^^^^afg_\\YTIGIIMPTUTUUUTUVVUUUUUTTSSSRSSRSSRPPONNMMNNPPRUVQNNNNNNNNOPPPQQQQPONOOOLQQEHHKKKLJGGFC@>?ACDDB@??@BCBBDEEFLSQMKJHHFFFEGHFFFOYUSTTTUWZ[]__ZjqvxbQORYemlqhUWVSQPONLJHHIIFGoyVL\\ZXUVTRSUUTTRSQOEOrcMSaǮeRP]ddc`\\YX\\^SJLJQKIJMOPRPNNNMJHIJKKILQQPNNMPMIEC?AFFE@>=;CPLPNPLDGGCBAABBA??BA:77756;<7P{oijd[]\\`cZKFNVWWSY]bjiZTWYYZZ\\XNJHBABFHHVYXXYY[]\\ZVSPLNSSRONLKIIIKMPRTQLFE>9:998988888888988999:9999989::<<978888888::99:;;;;=;:;==@@<999996=OSQOONLKMRX^c`RNRQOMNOOPSUZ[[_hT>FHHECBBBCBBA<987777778:::::;;<??@?@??>>>=<;;;;===<::::;9;FPQMLMMMMMMMLLJFDCCC@=<<;;===?A?<84556899;;==;9888::;==>?ACCB?<9:AIF<6<CBDBCEGEDECB@@AABDDDEEEB>=97::;DNQPOONID@>>>>><988:;<>@@BC?969:7446555444456641022137>=8668988:=>=;=?>>>?AGMF835PmoeVO[mnfeebbaR@:Ijz]=73/1;@?=>@BH?6IVOE;31000000111233333344434785105::3/8:3.265221/.-/474-/67>GJLF3.1,)+-,*,13542278FSQPG3>RH96542100/,*+,,,-+)(*+/;B9)-@E?:8=8-))&/@5'5D@=9434,+8:3120(,43M|uO6(+-)1@Mt]?E@>A9-9<//22;M`]GBHO\\b`jiYA[t<550.-+(+-.-,2>HG=-2;=95200=OSG73=8GNHF=7//=MWM8*$%((+.'/>=5.(*4:7-'-BD/)/+)('%&).353/07<988:5+(*,)-0('-540,,,-,-++,,,**-/.1679:6.,,/04=@A=:BD/*8>>FJ=69CC<9:;=@IL>2149=;78=CHJF=40.+*+*&4TZ>9LKLTUURJ@0*,-+++6PR5\u001e(8?70+/587840)-11.,+*-.(&-341,..+*-49<>8AYO6-8fp=)..,*()),496/,*)+-,-.364.*)(&0F[[]^`acdefedccbbbabbbca^^]]]^__aabcdddeefffghihe_]`aaabbcb___^]]^]^__`bdfhjnqtvwwvwvrqsromhhq|}yuqqw|{xsokgdbcdeeffffggffffffghhhijkhd`^]^\\Z[\\\\[ZZ]`dikllmljjgc_^_`aa`bddddbbcccdeb_^^aed_bp}}vtvvvwvvxp\\Ypxmsxye`dajvzqq~sv|zokkl{phoy|snlnmnsuw}yq]\\^`bdbbbcab_dhjkllmlkdrvbk|~u[bcdcdc`n~xxysihgffoutoooopqsrolheikj~xlea_[\\diie`aba`__Z]Z_]S|iX\\__`eli^evth`^wvi\\VVUSTYclljh_ZXVX\\`aa_ae`r΋ScNCK\\if^WP^tugbbZXZZ[YYTPOXTUwMU]XXXWVWXYYXWWWYY]]\\_ZPJJNMNPKJKLKGFHJLPTUTUTSSTUUUSONLKMMNNOOMNNNMKIHIIIGEEHMRURPPPPONNKR]mheveMLX_kkc`^]^^_`cggffcYWOLIINTUUUVUUUUWWVUUUTSSRRRRRSRRSQPOONNOOPPPRRRRONOONNNNOPOPPPQQQPNNOPNHIGBBJKKKJHECB@?@BCDDDA?@AA@AAABBELTRMLJIIIIEHGFFFGLTSSTTRSUX[]^^Yblqvwvt_QMOWelm{qYWVSRQPNMKIHHIJEJocKSRRXXWVTTTTTTTRRQRQYiƾdMKTmtmgeb_[Z_[KKMITRFJMMNOMKKLLIGGHJJHJPQPNNMOMIFCA>@ED@A?<>C@DIPLFIICCA@ABA??A@<87757::9KtjbikotgYQNKLV^[VV[^bkj^XY[[[Z_VDJIDA@EJGUZWWYYZZZ[]ZVTRQQQQPNLKIJKMPRSRNII@;:998988888888879999:998998877:;87888888:;;:::;99<<::=?>@=66799:6;NVTQPPNMPV[afaTOSQPOPQPQTW\\_^cqdHHHHECBBBCBCB=987777788:::::::<?@@@???>>>=<<;;<===;999::977?KOONNNOOONLJF@@ABCB?==;<>@?>@BA?8544689;;===<<;;;<>>=>?@BED?866:CJB9=CDEEGHHFEEC@@AAACDBCCD@:5//786GPNRQQRRPJB>???>=;;:999;>@CB;5786444435554445662-/5866:=767787799:;;:::;<=?BHMD;717YmaZPOjrmjgecbYG>=Ilu\\A3066<@?@@IS?0EYSC4201111112223432334443368861159;6583*0851000..//340,.249>GPH504/)*,,),/26960/7HSSTN<FUB633450/0-)),-++0.+)*+/8=3.;;0,59:4-))(+0.-9CCCA:441(,531124116M|_;-((+/08v^:748?:/32*,--@agG1568Njqp\\;3aS-///33*&).005:HKH?1/;;86835NjjM6(4=IIE?654..0:KUP9('(,A@08921-*+,.-+*4<6,)**)'&%(.134667:899:6,(*++10'$292.--,,--+))*,/0*).5:::;8/*+.28>AC<7?>,,9=;=:87;CB9676:>FK@44443335:B@;<:1*)+/0-''3C>APYYWRQP>;7-0*'0@OJ7($*9:31:@C<76655010.+)+/1-.5>90,,-.1670*/10233.#HyB()1-*,*''+550.,,,,+,,.34.)+=<(5Kbbccbaceeeeedcbbbbbbbba___^]^__`aabbbbca````_]]]]^^^___^^^^^]\\[[[\\^__acehiknrwwwxxxvsqonmiegpvuqorvxzywtrpjecbceeefgghhggghhhgghhjjjjhd`__^\\afc__dilmmlmopomnnlhda`a_`bcefdbcddcdedbaaca_^`iw~yqrttusqqlecirxyxoZ[vxklw{wrfiquxtt}ptw{zhgger|uuy}yqljifjtssqkv}~|}}}~o_db[_bb`aab`^ceglo{xzmdlxu_cdgged_r~y}z~{ubefffournoqstsrppmigjhg~tgkf]Y_hkgeeca__\\\\aWlf`VfiRXZ`f_`if_^bfha^{xgYWWVTUW`qlhha\\ZXX\\acccbfc^}kY^GHR]b_]T\\qm```[ZZXYZYTIMNP}POYZ\\\\YXWXYZ[[YXWY_gc^^ZQKJLKLJIIJLJILNPSUWVUUUUTTUTSQOONMKKMNNONMMMMJIHHIJIIJJMQTRQQPOOPOMQMm|i}fgkibZ[\\]\\\\\\\\_`_```a`b^XOMORUUUVVUUUVWVUUUTTRQQQQRRRRSRQQPPOOOPPPQQRRPPOOONNNOOOPPRRRQPPPOPSLFJEJQNKKJHGFEFFFFDDDDC@>>?@CBCCDDISRNLJIJQPS_]JFHGHNSSTTSRTW\\^]\\YY\\\\\\\\du~o^OMNXgqdVWSRQPONMKJIIIIEO{nJOV[ZZ[ZVTUUUUUTVUW]w͢iNJMT[Ycnjfeca_`fUHKLJS]OKKLLLKKKKKIIIJJIIKNPPNNMNMJFDDB@B@@@??<638BQNGKKECA@@@@?=?@<87769::7CdtstiZRRNKLW_^\\_gichlb[Z[[[Z`VILKHC?DJJOVXWYWWSRTWXVUSQQPOOLKJJJKMOQRPLKIFA<988988887887879999:999999999::88777788:;;:::879:;<>@A@A?:5579967JZWSRPNNRX]bfcUPTRQPRSSSUX]aaaouXFHHFDBBAA@CB<79;977787999:;;;<@A@@@??>>==<;<<<>?<:998779988<BFHHIHHIGIFEDBBCDDA?=<=?BA@?ACD?65569:;=<<>><==<>>>=>?ACFD?9677<FE>?DFGKLKJFDD@<<?AACCCDBA<61-.793K[MQWVTVVRJB@@??=;987889<?D@636643455455544456640059:899756655679:9878899:?BGI@=<35SoiaRI`stngca_ZL>?CRnpM519><:9;AHK?2AYU@-112222222223433434444468751//598?</065,+../14632/-..)-148=<314/**,,-.0/1221./;MUUODEL=6347:2./+)-1.**/0/,,*-29968-+/044/*))),3459:;98620/*%),--.23046>?3/0,(-.+,U{T41.042/-,*++*GjH+'+/(1\\}xP'&Ok8+0-/30-()15:CFIJHB6.6634<:EirT5,'(=C;51.+.34,&)6EJ?40-HdK5:;93.+()-/,*)-21/-,+*((+/27@@;<=9888/.,,03.*1?9-,----032-((0:7+)28999:80,27=CBAA8246-,26535;=>CD83659:>G@864222103?D<:8334598004-/?KYee[KHM<7=3'*3EJ?0())*/37=FJKC856:>62..8816A@;8:60+'.9::9/*+/,+33/+.}S #-.*)(')(*.+)-274.)*,-138<?KH78;aacdcbceeeefecccdddddbba`_]]]^^_aa``_^^]\\\\]\\[Z[]^^]]__^][[\\\\\\[ZZ[[\\^__acfiklmqxyxwvutqmjgcdgklkjovxxxxwuvrjedbbdeefggghhihhhhhgghijjjjheb`^\\_dc_`dhggikorrpopoonmjgcbbbcfgdcccdeefggfffeedbeottzvmnqrtttqlbWZacfpr`hqghj~ujks~|{vtyy_`u}tgdghd|}xvsnkkiilpolhmwzss}zv}mcpusqkb]_`__]cffm}gakxvbefokfe_p|zmiddgqtokmorrpnllljjkgfzulkh_]cgfeigb_][ZY[WRur\\ewVVSTXac]Z]^]_ce\\`ubXZ[[[[Yaplcd`\\YXX]adedbcg^hأ``WLNTWXahgda`a_][[Y[[VTVSIxWMUWZa`[YYYZ\\^^[XWYgog`^[SMJJJIHHHJMNOSUVWWVVTTTUUTUSQPOQQOJIKMNNNNLKKJIIHIJKKLMOQTSQQONPRPPRYgg\\VXZ]]\\\\[[ZZY[\\^_`aaaba_][YXVWVWVVVVVVUUUTTQPPQPQRRRTSSSRQOONOONOPQQQQPOONPOOOPQRSSSRRRRROJJJNMRWOJKJIIJIIIIIHFFFDB@BDEGGEFHFDLPOMJHJRYZwNIGFJSVRRUUVX^_\\ZXTNMS\\i~p[PNOZhzu^WXPOPONNLKJJJIIEhNNZZZ\\\\\\XTUVWWVW[iˣ`PQOOQQORY`bbcccce_NKLLJRd^LJJJIHIIIJIJKKIHJNOPPOONMNKFFEEDA<=??A?844:KPGMPHC@????>=>?<9888;<;<=CbspYPSQOKKR]`bftxcioc[\\\\]\\bfZSPLLE=@DJBHTYVQONNNRVTSSTUQNMJIJKKLNOPPNLLKKG?999:989878877799999::::9:9::988976778789:99989<==>ACCCDJ@2257873L_[VTQPQV[_egcVQUTTSUVVVW[_cd`i|bFIIFDAABBAC@;9<EA87787899;<<<=ACBA@@@?>==<<>>=??<:8987799::87<BEDCCBBDEFEEFFHHD@<<>ACBA@@DLH:469;<==>>?:7=@>>>=>>?@CFDB=:888=CDDFHKNNKIDBB<89>@ACCDDA=950/27:5?]\\X`^[\\XVQE>A@?>;889::9<AB;455543344455444457996459997886454556:;8668888:?EGB=>>:6Jljd]NWnyvlfa^[S?:@C[u`?3:@>888579:6>XV>*111222222233444545554568752-(),1;;461))*++-4:;80+.033../1123220,*,-.00,)'(/446EXXKA>>7778:942/,-24/+,+.31*',6<80*&(0.,/,('')7>5--....,,+**(')*+,--.00,)%%.2/+,038B</0.-+**)-3/,+:E)%*-1-&E}wD+$/@002./10/*(4;DLKJIHE8./015?Cd|].$*)$08.*(((,24.++% 7L>--7Xl\\Z^SL>.),/2/,))2641//.+(),16@A>AB:36:84/-/0,-9@0')**+.5972-,/32+.577776414;@CCDA7/0241-.00.3=ABCE@69=:7:CB>;537:;701:?:215AOTH;BLJGKGHQRIEFIG=?;,8HJ9)+.++++6EFEKLF:48>>:4+/FD:L\\UF6.2765=ME4>A67BJKH=4=1Xu?)()+,,*)*)((*),6>>2&),,09HK=46=??aaabcccdeeedcccdefffecbb`_^]]]]_a`^^]\\[[[[\\\\]\\\\\\]]]^_^^^]\\[ZYXYZ[\\]^^]^beghhd`jsrooomkigeddcbbchnnotuuvwwrjda__acdfffhhiihhhhhhhhhjkkllieb`\\YY\\]^_`__bhnrqqqpqqppqnlkgcbbbcbccdfffhiikllkjhhkmmrx}ynjknuxzz|ujbaelvvnjmqnx~zvwsr||pcbj{qbgnidfhjozvqmjjjijpogiuujo{{w{~iclw~kadkpsu{}z{cexreedjjge`l}tp~}sbcksrmiilnonmlkjiiiddwwijd`egedcee`][YXXXYUUotg~\\XQVZTVbe\\\\]Z[^aZe~n]X\\`bbb_bkaZ`_ZXXY]acccbcegdw`_ONRRUZcfa_dd`^\\ZacY\\^\\Ro]IWTTY``\\Z[\\_`a`]ZYZksld\\YTMKJJJJJLPUXXXWVWVWVUTTTVVVROOQRSQNLNMMMMMLKLJIIIJLLKLNPQRQQQRPORQRWUěnnXNEELU\\_^^\\ZWUZ^^]_ccbbdfhhgf_YWXXWVVVVVVVUUUROOOOQRRSTSSSSQPOOOOOOPQQQQQPPPPPPOPSSSTSRRRQRRLCCKLNNKJKKKLMLLKKKIHHGGIKMOOOOPSUQMNQQMJGIOVPe{^NHEFKQSSUWY[__\\ZVTQT\\kzqZPNS`h{eW[XILPOONMLJJJIJCqƖWIPNOPPQRSTVWXWYzŴuhSOUMQ^a`aacddfbSLLKMOK[hVGHJJIIJKLLLMNMMORRRQPPNLMMJFEFEB;:=?B@=:99BPIMVJDBAA@?>?@@=;999;<;><8Ss]ILNNMKIMY\\biw}gkqb]^ab_ogSMHJLF;:<>9;G[VHGKLMOTTRTWZYRNHHIJKLNOPONLLKKJC99::::987::8889:999:::::9;@=889:9677789;;::;<?DFC@ACDIKH>5556882H^^[XVTRX_chgaWOTUUVWXXY\\]_cc_g|dFKKGDBBBBCA=;;=C?88777679;>A@?AA?=>?@>>===>>>?A=:999888888:;::>@AEGFFHIKJJLLLLHA<<>CCBA@@AGPJ;359:<>>>=76AGC@>>?>>@CFEC?:8978?FFFIKNKGC?@=878<?ACCBA=9763256:98Yd[cdbb^YPA>DB@@><::;:9>B>73566553444555444579<;767896458777656;<86676677=GG>:=>:3DghebUTcsyrmgb^YK>;?J]\\D87==559644727XW=,12332333333345555555679<<73.*++,2572((,,*+/48>@5+/3<?3.////0110-)+--/340+-6?B<>TZG96317:;98764/-01.,+*/32-)-8?3&$(*,,,-,*()3<5,**,/.---,,+-//.-,+,-//0/-*0AIBBDD;+%.223-'()/4+&&,-%(,010*9md0+))+,11/00276,2@KOMJJJE902=@=;X\\-\"4>4&.6++*))042//-$\u001e:V=$)'.]zzwncK/*.04575447557::3-//17===>@6,2<<1,)'()*..(&)(*,.3775104:5/2546665249?A>?D?1.322/,,.-,/49BDCC>8;<;=DHA8AEF:>IE7-/420,:W`[[_WPVSD3,06FMKMFAC74;4,+.02665>JH@FKB7342132-4GGN^c\\P<9A=EPWcL*9VOFYqoaR?;CEH@95(+1023-))+-+(.:A6&&(*2=HA29DF@:^\\[\\\\]]`bcdcccdddffffedb`_^]]]^^__^]]\\Z[[Z\\\\]\\\\^^__```abbb`]ZYXWWX\\_^]_bcedca[[bddfecbbba`_]]^_ddafpuvy{ytmf^]^```ceeghhgghhhhgghikmmmmligd^ZZZ[[[[[\\_cinprttsrrrrrrqpnjd^^_`bcdfegijnoooprsrpooprv~skilqtvz|tsrrwxqmkkklwqn{~{|{mdk}~qljiegliyrkefhiijlnhdszompqw~~~~~~zy|z{|eZ]dq|}~yeuxjfgkkecdijlp{nz}}zo`dklppiijjkmomkjiedeiw{h_^diieffba^\\ZYWXX[ZV`{|]VSX_XWUWdf`][\\\\\\ZiwdXX^ceedabd]Y^][YVb`^bbabcdgggk_QPZ[VUVVZ\\^``_][`bY^`UieGXWTSV]^WX\\^bbcc_][YekdYQVUNJKMQSTVWZZYYWUUVXWTUUUVVVQOOQRRRQQQNONMMLMLJKKKLLMMMNPQQQQPQQOPPRUOnUtl[NFHIHHNZ_b`\\Ybijfabbbceghhiijf_ZZXWWVVVVUUUUUSQPPPPRRSSSSSSQPOOPPPOPQQQQQQQPPPPPQSSSTTSRRQQN[[KEGFEGJJKLMNNMMMLIHIIJKNOOOOPOQQNOPRRNIFFHHIBCOXSJFEFGQYXWZ^a_[VRRX^gvrZOPWbgty^TYWKMQQSQOMKJIIJAbeGKMKJJKNRTTVZU`˳pWPSNftgcfgggddYOLMLMPJQlfOIJJIKKKMPPPPQTTSSRQPPNLLMKFFFEB<:=?AA@?<<@MLMYJDBCBBA@@@@?;99:;<<=<7W{aFDJKKIHHM`^cluvgntc^bgicdUGFGHFA:88877;QZAADDGILORSUWXVPIHIJJJKLNMLLLKKKE;:;;::879;<:889:999:::::9<C=899::97779;;;;;;<?FHECBCFJJ@86788896>Zc__^[Z^elsph_VRUYYYZ[]_``bdaisYFKKGDBBBCC?;<>=:98888778;<@FFA>>====>>>>=>>??AB=88998888889;::::;BIOQPQRSSSQPOKD>=@DCB@?>==AKK=438;;::758BHEB@@@>>@BEEC?::967>FGHIKLJFBA>:778;?AB?;<965775568;;Th_`fgfg`K<>BBB@?>=:::9>C<9:<;7554553443444579:9777676568<>;85:=976555585<FC<9:;5/Ckkd_SMXkttsnhd`UA6<BCJ?56;=::?A>;94:WW9-1385343333334555665689;==9523531345300.,,--,/460+.149520//.022.*(*-./4:847>BE=6KU?2312354443220,+++++...../3;:-%(',7401344554)%*,1410/36411354/-,--//.002,=`mkl_YS61864.()-13/*''((*./11.5SN))*++*.//0009=32COOLJLMD827DMEHof.#(08?3180-)&)?A2+.+*@VP5(*'!@v|y^@59::;8654344338A>783.598555/)+23)&%%&&&%$'*/32/+.59854=A3+26675358:<=;;DE:6;7-,-,,-..015=?<AB88>>=@GEM`dW:7Qc_B&&67/8TdkmiT?GQM?227@IJIGAD<)''0325<@BBCGF=AJ@3240/1.0?EM^[UN@GWC,Gdh]<*1I]S]yZA<GB41183+.178.(*,.,*-6B=*'')27:43CKA2-SSVY]acfgggffffeefggfeeda_^]]]]]^^]]]\\[[\\[[\\]^`aabcdddfgggfdba^YVVX\\]]^abbba`^[X[^``]^^]\\\\[[\\\\]]Z[dpy|}}{uj`]]_`aacdfgfffghgfffhkllmmmmmjfa__\\ZYYYYZ[[`horuustttttsrrqpkd^[\\^^`cedfklkmprttsqnllllotyzyz}}|wqnlloty~}{|xzztlfefjqojjv}vv~}sqx{pghlwzzogcfhjjlpqhdcdipsrsvwwvvvusx}uoudX\\^[antywrc[`kdbekligu|~~~ddddepogghhiloliifdlttylZ\\gigeeeb_][[YXYXZ\\T[ZT[\\d^TXXUZbb_^\\[ZXe~q`X[cfffdba`^^^\\[ZWcb]Z^``acdfamx_YP\\aXMNTVWUX]_a_[[[ZWTqpQTVWVUV\\ZPV^`cfijec_[XUPHHVXPPUUVYZYVRQPQSSSSSSRRTVVUTRQQQSSRRSRPQOMLKKJKLLLMLNNOOPQSSRSWVPOOPYZiZWj]QKLQNJHHILT_cddkoponnifhiiiihhgfb^\\ZXVVVVVVVUUUUTSSQPQSTTTSSSQOOOPPPOPQQQRQQQQQPPOPRSSTVUSTTPF[u^DCDDGIIKMMOONNNNJHIIJLMMLKKJHEDDDCIPOJHFCBDFFGNRNGFGFJV[Z[`a_[SOOZipzrZPRX`ftw]TWUOOSSUSPNLLIHKEQ|KKPPQQSTVWVUYRlƯrt\\ROPzlglkihd\\VNMMMOPL[w~gNHJKLKJLPOPPQSSQPQQPPNLLMJFFFED?==?AA?>==BHKO\\ICCCBBBA@A@>;:;<==>>;@gpL@HHJIGFGKgjjwxkjxl_bhjZLFFKKD<;::89988AR>>=;>AAEKNPOOPNJHHHIIJLMMLLLKKKIA>;;::999;<;9888999:99:;:<?<:99:::8789::;;;:;;?CCDEEGGA9568898889Obec`aejov~}sg]WYZ[[\\]_becdhcneHIKJGDBABCC?:;?=98888977:;<>CFB=<=?>>>>>>==?@?AB>878988889999999:8:?JSSQRTWVSRROG@?@DDB?=:::58AHH:3:<=:99<>@BBBB@>?@BFEA=;:978?EHHJMKGCB@<8668=AA?:68766666559==Ieg`ekjjfU@9?@@??>>;::9?B<=BF@85434433333454567789866<?<<>><:8<=887566775:A>998662:fndaYLPfqtsojgi\\A7:ACFA64:@CFHIHB;9BUS6114;66433333345555666778:97448<:8864430,+./-,+++++,*(,0///01352+(),...-,.48::;74FJ6002420//.----***('+1-*).4:>4+28+,CC75;CD;.,)&'*//-,+/674/,5>3,-/.//-.1413LuufmP1652-+/35652-**(+02111265+*++/0,*-21.9>20?OPJHMNC55?EC=<X4('+&'59450*'(8RPE<--EYN6+,+.06bkE7@LOOOD0%'*/0*%,7>?@9-/11/.+)((-3('(**)))+*-7?:.&(2;=?A>8015775228==<:9>E>13DD1,--./3::;;::8:@?:::64?VfcUD1+8PeV3(4:58J]f^SC17KTUTPC9<>=?A=;/&,5789::<?ACD;;B?:?AAB@33>9Q\\E93,CM3%Ee\\8&3/.HS`t:.FH>?;38;2+/20-+('+.157AD3')/10/./42...^`beikmllkjjihhggggggffeb_]\\\\]]]^^^^^]\\\\]\\\\]_accceffffghhggggggec`\\ZZ[\\^^^_^]``][[]^]]]\\\\\\[\\[Y\\[Y[cnxzyx{~wia]\\]``abcdeddedddddehjklmmmnonkfc`\\ZXXWXXWWZbiklnptwvutsqpnnppkfc_^adb^`e`\\afghfdeccehknqrrrpljkr|{ywsojly}z|xpkifeiidq|mmvpgewnho|}{ztkedgkmmmnppnihkotusqqomlllmw|uot~f]_][d|n{qhffghklli{z~|{}~~|xupkijkjhhhghjljihfn}|zj[_egeed`^]\\\\[XYZY\\VP{UU^_jaWZWXZZZbicZZZW]t{k_\\`fggfeba`^]^]\\Z[fhdU[babdfgeerb`ROZ`\\PSXTTW[^a`\\ZZZWY[WUTTTUVW\\YNUbedfknidbVLJHFLWYTPONNOQPOMLKMOQSQONPQSTUTSQRQRRSSRQQQQOMJJJIKLLLMNNNOPOOPRST]_PPMR]\\wzM\\_VSNNVNIJKJJMNQ`ieenuysopmihhhhfedb`]\\XVUVVVVVVVVUTTSQQORTTTTTSRPPPPQPPPQRRRRQRRQPOOPRRSTUUTSSOFRgYDCEFHIIJLNOOONNMLJIIJMMMLKJIHFFEA=CMOKIGFDEGHKMQQHFGGJPY[Z`b_ZSPO^wwzrZQRY`ett\\TWTQRUUUSPNPMJIJKKqXKRSUVY[ZYXUWPnʹhls]SJSwpogddcZONQPPSSOjuXIJKKJJLMMMMMMMKKMPPPPMNLKHFGEDB@@@@?@@?=BDEP^H@CCBBB@AB@<;:;>???@;Jw|WDFJIHHHHEFbilzxgaoi_acaJIHJKF=89:989;;:9B<<;9;=;;?DHJKKJJHGFFFGJJIIIHHHJJHC><;:::9;<;9877789999:;;<=<::9877789:::99;;;:;ACDFFEB;8778::9987;Ofe_epv{wlb\\\\[\\]^^`cffhlwlPHHJHFDB@@BB>8;@=87678;:8:;<<>BB?>?AA?>>>=>=?@?AA<979:889999;:9:::987;GRSNNRSTTTSKC?@CDB?;:88954=GM@7EKFGFB=;=AAA@@?@BEE@;::999@DGHKLKDA?=;658;?A>;756756766669=>>UgcemlikfG5@??@@>>;998>A>?BA<85434554434566656888768?A???=<;::;9997777669;<;;87844Sokij\\R_ovtpljhYA8::>CE?5;BLPOOMD>9?TH3655:5444444444555566555575003:<778742-*+,01///00.+*('),,,+.0375,)+-/0-()/234218?B9---24331--20-,-.--,+//,*,3:>83<@1-AF>:CPF0())'(,0..,)'/330(,;6*-02.,.1115<A_lED;,----.47883.,+*)+260.14.,*,/-7?0$+10/98*-<JJDDJL<.8LM>).5.(+*'&&,230*)/HZYUC6IZN;3.,,193GL474EX\\YH/$&)/2)&+,4;@=3.--,+*()+6<-,/0+,464/.491*'&+9BDG?415322138==:99:>?846;EC4..028BDA>9664:>303207KM9.*%%'2GK@53425:AF@980/DTVZ`R=63017852+288740-/49<?=97=DFDDGE?5.+@<(%(+32/&;S<%&/.,-;\\[$$ANHblTED:,./-,,''-379;=A8()/.,+)(&%*12gghiijkkkkjjjhhhgggggggeb`^]]]]]^^]]]]]]^_^_`abceghihhiiiihggijlmkgc_]]]]__`adea][\\]]]\\\\\\\\\\][Y[[Z\\`fiiijmnhb^\\\\\\^^_abbbbbbaabbbchjknnnopqrsokfa]ZXXWVWWY[]`dmtwyxtrqoonotvutqlkmkgdca]ZYYZZZXYZ]_cfgkotwuqqlel{{wpklokiqyzxyxusnhfiihk|}uqc[bq}nal~}vrokhgfilnqrrstsponotxuqpokijkho~snr~ib_[h|xfhnomtv}|wz}{}~~|z~yxvrmnkihhhiihfjy}{}__acfec`]Z[ZZYXXWY\\OmcR^bddad`VWWZ[]ik`UW\\[l~t`[aehgggfcaa_]^_^XYk_^bbcegika]f]YOWnlWVRQTZXW]^ZYYYYVUWVWUTSYZUOSdmidfolb[PJIIIMRTOIDDGIJLNQUWVVURQNMPQRSTTRPPRRRRRSRRQQPNMMMMMLLLMNOOOPPPOQSRUUMQLR_^\\MRQSTQNQNKJHJLKJJNTY^irpmoqnihggfdbba`^]\\ZXXXWWWWWWVUUTSRPPRSTTUTSRSSRRRRRSRQRRSRRRQQPPQQRSSSSRQQSTPGDFHIJKJHJLMOOOMLKJKKLLLLKJJIGFGGECGMNKIGEFEGIJINRJGGGOUVVZab_XTSR`{yzs_UU^dgso[UXSQSVWTQPQRNMLMMR~fMPRQSTWXXXVXU`zϸiZuZSMOq}ywma``aaUORTUWWYyzdRMJJJJKKKKKKJHGHILOPPONNMIGGECBBA@??@BA?><@LQE>BCBCCAAB?<89=BBBAC>NvpOILJJJJJIHES]ix}oaZbfa]c^OQMJD?<;;9889;<;:;<;<;:;:9:=@BDJKIIHIGB<:BBBCBCCDIJGEB>;;::;;:876678899:::;;;<<<9966789:;857<;;;;AFFDBB?;998::;;;:938Vdaclswz}xria_]^^__`bflox`BJHGEDBA@@BB<8=B=75458?A=9:==<?@@>?@@?>>?>>>??@@?;9;<;::999:;:;:::::94;LTOLNPSRTTOE=BDDB>;;96:::69OL8CPQQNIDA@BA?AA>@BCC@<;:::;ACEHJJIDA=;9669;<=;:856656777879;<8G`bgqplnaA5@?AB@>>::;;?>;??<:9655787775555666677776:?@@@A?<;;;:9::9777778:;>;77643GjqmpjZUe{}uoi_O?;:4:@@?::CRTPLIFA:=O@28:673554445654555665556564..3::412333/++-.-..032/-+**+++++++.56/,+,/0,+57212/0=IA3(),247>6).40,-.-185,+,--.034547:1-<?8<NR;'(.*'/:@<30+(+/00.+..++/30(-:6,3DHK~S,+*--,-/2:?;6/+**))-/0.*,0/-*/848A2%'*/471*.4>B@?@?4,<UQ:+/0,-/-+'&$*12,'2Xf`F5H^UD<6.(*.105Zj7/4,7UcX=++*))))'('(/7=>5/,--..+/;<3441,.9<40.0/&&+'(9DFH>2.0.+-28<=9436;@AAEE;8E>32259??:61/0011--0100/.)+5>FLIA>=:6754112.8D?2;IMPXTA1+(*/76438<=;863379:;<=;<DEA=:>C<*'-*&'+,,1.\"18,00+16*(F?#(/@Sy`PG9000-,***,1599894+***,,+***./.ffghikkllkkjjihgghiigggfda___^^^]]]^]^__^``a`abcfhjlklmmmnnlkmmlmllkkkhghhhghhgd^[[\\\\[[ZZ\\]]\\ZZZZ\\]]\\\\\\^^\\[[ZY[[\\]^_```````_`aacgikmnooqtvxvusoh`[YVVWWXXY]enrpqnklmnmlnqrrsvvvxxvttqnmid_\\Z[[XWWY`eltx{{x{}te`kpqpqsne^^cdebadikhhiikliiy|h\\apv|zz}tqv|}s}skjgfijknoqsutrstrqqsssrqpmjinqsvtl|lgeint|w{vrtv{}}~~x}z~~{wrrnkhhhihfcm~}p[bddfd_[[ZYYXXXWXZPboPbkmoa[keWVTUXUZklYX][jvk\\\\fkjjhhgdba_^_``XUjc_`ccddhkp[ftW`]\\mjPOORUQRZ^ZXYYXYZXWVUTR[ZSQR\\mqb_qscTKKJIJLONJFGHHIKMPU\\][YTNNPOPQSTUTQNNQQRRRSSRQQONPQQPOMLLMMNPQRSSRSSTROORMNT^omVPNONOMMLMLIIJILPPLHMT^inpturppmgcbaaaaabdda_[YYYYYYXWVUUTPOQSTTUUTSUTSSSSRSRQSSSSSRQQQQQQRSSSTSRYfZGEGHKLLKJHHJMOOOMKKKKKKLLKKJJIIIHDBJQQNLJGFGFGIKKLOLIGENYUSZbb`YTUVYlsyvaWX\\et{eYWWQNPTUQORTTRQNHQTlǭlLKNNNNNRWXYYV[yƴy[l}{^RLKZfotla`_amfTRWXWV\\lu|p^RLJIHIIIIJIIGHHGIMPPONOMHGHD@>><<=<?ABC=:?BA@>@BDDCA@A?;5;?DBAAC?Rk^NNMLKKKJIJIKTgwyg_[`gd]e]^[YH<<>=;:989<<<;;;;::;<<<<=@@;BLKJLNMLB;@>=<<==?DHIJGC?;;<<;8665456889::::9::<<:98677788438;::;<?EEA>=;::99<<;<<:963>Wc_^cehnxzwofccca``acgouxkCFFEDDCB@@B@<<AB<76668AHB:9==<=>@>?@??>??>>???@@>;:<=<<:9:::;:::::::986@KMLJMRPTVSF<CEDB<:;:7;::99FMF<COSOMKJKIC@@=<@AAA@>=;89<?AEIIHFB>:977799;;;;8675577778878;6:TahuwnZH:8>?AA@@;8:;=?>;>>=;9875778986555666677777=AA?AA?><;::9:::977889==;756565Ccnjnk[P^x}uphcXE?:79>>??9DYVSQLGA87E>19:753455545554556665568775314:;7666677555555554311/,)((,00-*.540,)*,,,5>6/1643ALB2++.46:@5)++)'(),6<7-*,-.1431/./0,,35.3II0'16/)0;==72.,,-/00/-,,+,0/(*<?,2HRH`s<*41320012;A90++**)*.,*+))+,,*1;6483-)%.86--2/4<>;6573=SJ862)+/.*('(%%-1*(*>QR:8UVJD?5'&*)'.1:@-162;P^Q2(+)%$'+,)'%'/7?=520.01//35694-+/53*(*.0,,-'&6DHJ?1-/-+.589862139?DIKJE><=<836740-+++,-,,--491-08==<TdbYC85459;5,,16FRM@=ALXWK>/.039852248=AGJGGMNHA=DF=@FF=439;4.+)*,+&-;1&))-:4,5?2#-lv2#+&(Qk?MJ2-2/-(5?.%'056630-,-/1431---..hhhikllmlkjjjiihhijjigggeca`____]]]^^^_`_`aaa`acdgklmmmopqsrqqqoonnpqsrpnkigggge^YZZZ[[XZ]]\\]ZY[Z[\\[ZYYZYXXYYYY[[\\]]]^^^^^____`beffhmooqvxxtpsuof^XVVWWWY\\_ehfcceehklkjjklkkorstwy{zvrpolgb_][\\[\\bkrwxwy}~~}iVV]`_ejjebaba\\W]ijfehjlmlejmd[]yzjjcagox{{vks~|yjigflnnopoprtsuvvz{tmmoopnkjlr}r{lpy|yylrz}~xx~wzxutrpmjjiigedkyz{xb_cdefc_\\[ZYZYXWY[R[vWdqzxnfced^WZ]YYVcpf^Z\\ind\\]inllihhebba_``_YYnsfXV]aaabdd{bMaUb_]tsVLJOQMQ[^ZYYYYWVVUTSTW_ZSTSUdqfWevdOJLKJKMMLJGGJKLLMPV[[WTOMPSPNOPSTSQNNOQRSSSQQROKKNOONNLKKKLKLNPRRSUUSRSSROPOUVTURNMLKKKKJJKKKMNNONNLHKYchquqnpqidabccdfilljg^VXYZYYXWVUUSRQQSTTUUUUUTSSSRRSRRSSSSSSRQQQQQRSSSTSQas[FJLKLNMLJIGGJNSQMKKKKKKLKKKJKIJJGGPXWRNLJHFGFGHKLKJKJGBL\\[V[bcaYUVXV[dn{bY[\\qpTV[UQMIMPPQTWUUVLFXNClNJMMKNKMUWYXReuTeiSigUMRZ_irlc``aqzaPVXUUVXapvfWLJHIJHHHHHIHIHGHMOQPPONJGHD<78999:=ADDC@@??@ABCEDCA@B@97=ABA>@B?O]QPRPNKKKJIIKJPg}}f^_fiefaY`fjI7;>=<;::<>>>=:7799;=>=?=@B:8CIKLMNLJEA?=;;:;=?DGKKGD;=><98755335678:9::9:::;9887765430069:;;<=<A><<:999;=>=?><7694Hbb[]`fjw}ujgeddcccfjpuqvJACDDCCB@@A>=ADA:6778:AGE>99<>?=?>?@???????>??>?@@>::><;:<=;877999::::8:@HLJNROTWRD<CDD@<:;;:99:97ANK@7GQOOONLHED?;<>AB@@??=:88:?GHHFC@;8777889::;:7776677777756;71K`hy~f?699===>@A<;:9<>?>>>><;:85555566666667788888>@?>@??@>:9999::99877<?<7535675>]lijg\\SZltrohhcKA=>;<>@B7C`ZVVND>2-9<38875446555566655665579:88678879;:;<<<;;;9999962025541+),352*,344/))*).8:1.18;:@GB500047431-*)'&%)4=90/2467897422-*)),/**7:02;<2*,-05870-++,.012/--++,)(4B49NQJ@B5110//,/56:;/,+,**,01,)'(()*)+/42/0461&)10+/6217;856<<DNB75/*+,,''(%'/64+),/4BA3586466)'(*'*-+*-399=DNH4-,--((+//,*(+.3541/,./-*(-440++/30(%',0685*$(6FOD314213554222236=B?>CLLHHE=574-*((*,++,.+-BE2.7AIC9I`WF<8106>>5/.3BXWIEBDP[a]UG>7...-,-038BMQLJRURRMJE@DEA:/-.1330-,,*')8<.((/<=8<D=+,AB/*,(+TlMPH2,20,.CD30+-6:96/-/245993,++.1jjklmnnmnmjjiiiiijjjihgfedcba_^^^]]]]^^^^^]^___bcejklnorsrrrpqqpppqronmkhdb_`ced_ZXXYZYXZ]]^^[Z[[[[[\\[YZYXXXYYYZ[[[[\\\\\\\\\\]^_^\\]aca_agjjlppojcehfb^ZWVVVXY\\_bcbcejllmljhijkhdegedcfjhca`___^^^`fiknnqrruyxwx|~~oaVY]__`a`acca]\\hsqlnoooomjigb\\f~}sg_bdbl~sfagonkgjhpsopponnnosvzyljkmmllmln{z}w~wnmq{}zw}morrtqqonmkigecdrwwkYadeddb^[[[ZZ[YZZOU~v]iu}|xfktijg_hqikg]ioaV[eicZ]jnmljjiebba```]\\\\[emZS[]]_bd`f_ZhP``YismdSELPLR\\]ZZYWWXVUUUVY]`XSSTRYllQMh_HLMKJJJIIKMMNOOOOSW_d^SLNSTQONNQRQOPPPQSTTSQQQMJIIJLLLLMMKKKJKLNNPRSRRRSRQRTRRRQOLKIIIJKKLMLKJIHGGGF@EOW]bbejjhhfffgfhjknmkiaVSUWWXWVVVUUUUSSTTTUUVVUUTRRQQSTTSSSSTTTRQQQQRRRSSS]fSJOPNNONLJIGEHMUSMKLMMMLKKLMLNLOTV]eaVQNLJHFFGHHJKKJJJHGN^`Y[bb^XVVVVUW\\teZ\\rw\\\\[\\SOWZ`]SSZYWXZNRXLEU|UKNNMONOTUWUU˱vKPb_KMpVJ]mijole``_iwSMWWUVVXcrqiZLHHIIHHHGGGHHGGMPNQPPONKHGB:457:<?CHGFFDBDDABCEEECBBC@89@BA?>?AAJTRRSQNMKJHGGHFLif`ageeo`__hmK9<>>>==>ADDCB>;9989>B?===><:;BHJLLLLJA=<;;::<??BIKKG@98775554434567899:9:9::99::852..*)2:<=<=:9<;:::99:<?BDDB=87;5A_fabhrw|pgdcdddfjmnpo|QCEB@ABA@@@>?CDC=877:?@CEE?99?B>=<>@??>?????>>>?ABA<4;<;<??<;;<;88;;:;<9:ELJIKMTVVH:CDCA>;;;:999989@JG<BINQPNMLKJD><=CCA>?BA>;78@HJHEB?;8877889::;97877878877766:92E[j{^76:;>?BDA>CB99==>==>>>==:8887766667789999998<@?=>>=>=;:::::::::879<;7655565:Yqnhc^WVbnroig`LC@D?:<AC;@\\\\UOC:94055/36;:86655556665566568:;9779<848966;?=:6321122447888982/1451++/484*)))/552369;;?CA;94/28.-,---,**2?>3+/9<A?:348772)'*+,**,17=;60**%*6@@4,+***,273..+)))(,9<9DC81.//,+++),5992,--,+*-42-)''(((',0/0/.483*'))+1651355657=GH90/.,+*++*('*@=511>TWUQ=/-)(;GB=.*63+*(/69;=>=;311482(),-,,**)()*)))+-,('),++**-20*)),07;;0&!)>OC6468764221012458601>PUWUMFA;51000-+**++,>M=-.7;BCABWR73:<9=B@?DD<:EB43;BDFHINPI@4-45-*28=FKOLGKQT]_UFAH>01////17972.+)(3=3)'+=EABCB400),,,*,?HJSN922((.4><31,-7=92++1455760)''*,kklmmnnnnmkjijjhjkjiihhgeeecb`_^_^^^^^^]\\[[\\\\]^_bdhlnoqqpkhhhijkhgiihfedb``]^bcb`[WXXWWYZ\\^a`]\\\\\\\\[[[ZYYYXXXXYZZZ[[[[[\\\\\\\\]^]\\]^_\\YX\\^_abba^\\ZZ[]]\\YVVVWXYZ[]_ceedgknnmlnolhfb^[XUVXY[ZYYXY^ioieffjnqqporttwvqu~jXYaa^]\\ZZ^ddbgrsqqqsstuqttroio|qcc`g|sc`iichfckoqpppononmjmrzvliiklklmmlyzwxussqt}~w|{}ommnnomllljhfd`av~vn]mheecb^[[[Z[[]]TTwx]jvw|woqunjia]hnknmcfmf[[cb_\\_konkjkiebba`a`\\[Z[`c_ZZ[[^bgg_^_Tf´nXa^eikmeTJJMSY[ZZXVVWVVVVX]`WSUTTRVhiSLSOLMMMLKLJINQQQQQPQS[fjaSLPSSSQNOPQQOQRRSUUUTRPNLKKIIKKLNNNMLLLJKLLMNOOPPQRSSSSSSSOKJIJJJKMMIILOU\\\\ejrwi]`a[RR`mllllmkhiijjjifc]QNPTWWVUVUUUUTSSTUUVWWUUUUTRQQSTTUUUUUUSQQQQRRRSSSSPHIPRPPPOLJJIHIMSSMKLLNNMLLNQSSTVY]^^YROMLJHFFGHHIJJKKLIJPYZWZcbYVVWVUTOPlhXZQRe_YTMUitPOXXVWY\\]LKQFbaMORSUWWVUWUaƌNLZYSL>^y\\I`onnnle^^_av|^MTWVXYY_gjg\\OHHIIIHGGHIJKKMTUKPQPONLIF@:78<ADGHKIHFEEFFA?BEGGDDDC>:;BB?>>@AEMSOMMLMKIGFFGGDGefbddWcnad_ekM==>???>?CFHHHHGC?<9?GF@<::;<::CGJJKLJB<;;;:;;;;>@DJNK<2254334434566689999::::9:::61+)'(4;<>>=;899:8898;>CGIHD@<885@\\gegmwrgedeeegjnqlhuILUJB?@@@????BDC@968<ABCEHHA;@B;:<=?>>>?@@????@@@@B>28>=>?@FHHHC<:<;;<;;;@INKGKRX[F9ECBB=;9999:99998CSE?ELOQPNOOMJB=?EEB>?BCB?9;BJKHE@=;;97688:;<;:88778888777769<:BRk|tS8;;=DHORKAED<>>=<<=>???>===<>>97677789999999;>=;<<;;;;:<<<<;<<;:758=9::76648Zvtoj_UT`lsqlfXIEDGE<9@D@?OND<746;@@3*14BK@5445555555666556:;97889769954;B@;60///.06;EH?325434541...4:5*'+.48::<>>???AA?=6-09.+++,---/9@9/(+7?B@:1.49:80,.-+**,/8A;0+,+')4<>4*))*+.1650.,*()*,/93.-+),,)((**),21.,,/-+*)+//+('''((&)24432781***(,25611/253/5<8+&*),//./0.+9H486>RaZI@>:0'%Chj]<-:7**(2>>>>>80-++,-*'(*))))*)&&&''(),,*)('''))*++*+,.028:4,('2A;,.48:74122334310-,2@MQUVURNA898762-,*-7HTB)',8756=EOG8>IOHCBALUL=,**&#(/0/((8NQUUD@<.',49<:AFEGIKZa]RD?4,.2457;AFF;-+*)3;2)'+=D96:=6061*,+*++'%,/+*35/--.474,,3751*,584344/(&'((ijkllllmlkljjkjijllkkjjhgffdaa____^^^^^][YZZ[\\\\\\_beiifec`][\\\\\\^`^\\\\]_`````baabbb_ZYXUVXXZ]]]^^^^]\\ZYXWWWWXXWXXYZ[[[[[[\\[\\\\]]]]]\\[ZVUUVWWXXXYYXXYZ[[\\ZVUVWWUUVXYZWUVZ^`adhjlmjgfd`ZUUZ]][[[_fki`]djmkjlmnuzyvtsux{|q`[_fgc\\VYafhmorrpprrtvxwxyyxvu{teehs|lhuug_ixjhrslollkjlquuvwzqmlkijkkkmkuy{}mpx}|}wiijjjjjjjhged_c}zxh}nabc`]\\[Z[[]]UVrutj`hhdbkha`ac\\TW\\]gnup^`_baZ`jpnkjkjfcbbaa`^\\^^ZX\\][ZY[]bgh`ZWW^a[XgmlniRFNSX[[YWWVVWXWVX_aRRXVTRZe_TSPNMNOOPPQPPTVWUURPOSbrqaQLTVRRPMMNQQQSSQRTTUTQOMMMMKKLLMNNNNNMMLKLLLMMLNPQRSSTTRRSOLJILMLMONO^pj^[YXKFJ[xvtrplkiiiihhfd`WNLRVWWVUUUUUUUUUUUUVVVUVVVUSPQRSUTUUUTSRQQQRRRRRQQJEHPRQQPNLLKKKLNQPMJKLNNONOPQUVWVVSSUUROMLJHFEEFHIHKKMOLKPUVVU``QUYWWUPKMihU\\k<FU\\XRJBMmmTOUWSSXaYIIOMK|rPOTWXYWVUWViʜZLZWTLEDP|[YmojnmkdX\\ccp{nWRWWXXZ_dnmf[QMKIIIIIJLMOOPY^RRQPPNMKE<8=DFHKKKKIHFECDGC?BEIHFFEC=;?BA@?@@AIOOJGGGHFEEEFEFBBZdeeYJZea^^ekM<<=>>><?CEHHHIKKHFA=CHGD?=;::8?FGFHJID><::;;;;;<<>BJNE5045543455555569999::::9:::72-)+18;<==;:789987:9<DGHJIC@@:76<Rgjkpwrgdcegghimsjgzc?IUVNE?>>AAA?@BB?979?DFIHGFFEA>69????>>@@@?@@AAA@?B?8:?B>7?MPPPOIB=;;<;<:;HNJEIO\\YA<FDBB?<978::989:9>KJDEINQRRSQOMF@AHIC>>ABC@==EKJFA=?><:758:<<<<;97777777777778>@BPmzbG@@;CINQSQICDDDCB@ABBAA@>>=>@@@><:87889999::9:;;:::<<;;:;=>=;;;::966:==;:8629^ywyxgST`lttj[NECDEEB=<>BDA625157=HL>0,0GL744444455556666669:::97558;<75;DD@91.-,+.38FM@/+233454430/286,'+169=ADECBB?<:750+,3/**-.-/226:6/,/5<==95116887652,**,18A9.+/0*),-0-)+,+.52/1///-,,-./3.(&()+/,%'((*-.,+,-/,)**)()*(''&')(&0::8884-(,--.243/.+/9?81.)$$'/57743697:<*/=NP@8554/+*#.ed<353/+'/AFFC?7,*(('&$')))('(()'((*+-*'(*($&,,'+000033301893/0147737=??:412466630+)1:>AFJPVQGB@=:76421*2P_N/!,3:>63<KQABY\\TPMECPK94/02/,%%*-&.GQVioXB4-(&'*+)/439:8N\\[YNA73357;??@FF6+*++01,('+8<20796374.-+),#!! %&(2EPOKKJKH3*/02/*1<:32441+)+++ihiklllkkkihjkkkllmmlkjiggedba`_]]\\[\\\\[\\\\ZXXYZZZ[_`_\\ZWVUUUUVVWYYYYZ]___``bddddc_[ZXVVXY[]ZWX\\`_\\ZXXXVVVVWWWXXXZ\\[[[[[[[[[\\\\]]\\[ZYXWWVWWVVWYXYZYXXY\\^ZTTVUVVVUTUX[]^]]_dijklmmnnmib[WW[\\[^gg]V[dnpidfnuwvwwz{{yxx{yjbadfb^^b`aiosunkmnmrvvyz{||||}}~zy{z~teeefffxsiginsrtlnlmhfgghlt~xomnljjkklnms~lew}|yrhhihijjkkiged_g|v{{|mdc_\\[[[[[]Z[swmZUV[[eiehcfsqTKVqtvq]b_b^Ycloomkkjfcca`_]XWY[`[SXZZYWXY^e`][X`sZWYfkilobMJOW\\[WVWVVWXYZ\\^\\VWYXVTX^YRQPOPPPPRVXWZ^]YUSOLLOa{|cOMZ]RONKJMOPSVRMORRRRPONOOMMMNMMNNNOONNNMMMMNNNOQQRRSVTRSSQMJKNOPPPXt̿XJMLLQPGCFd{snlmqolkjihfdc^SLNSVXXYXVTTVVVVUVVVVVVVVWWWUTRQQRTUUUTSQPPQRRRRRPKLPRRPONLIJJKKMNNLKKKMOPRTUQPRUVXZZZYYXVUROMKIHJJJKLMPQPPW\\XUP[]RVZXXQKLLbeTdxQ@DM[YNH@;FRRRSTVRXZPLLNQKtxTMPRRSTUUXThԠ`LUXVUJEX^pnimqk^TZ_ao{vcUUXXWX[duusk_TLIIIIJLOOOOOSc]WQONMML@9?FKKKLKKJIGDC@@CCABEGFHGEB==BCBBBA@CIMKHFDECCCCCDEECBP|xdaZLEVa_]^beM;=>=>==>CFEFGGFHIIIC@@FKKD=89;?ADDFHJF?<;<;;<<;<<===AJB5456545655555689899::;;:::75426;:;;;;;88::988<=BGIJIHBAB>984@autotzlecdefikoqkx}T=CHPSQI@>AA@?>@@=:89?CFIIHEIHB<5;BAA@@?@@?@@@AAA@?B@<=?A:2:EJQSTQLF@;<;=:>GCAIJN[S?CICABB?:99:::999:9>JFFFMRRTUSPNJBAILGA>?>@@?>BGGC?=?@>;669;<<<<<97887777788777<BCPpoLCGC?HFGGEEC@DEEGIJJHGEEDC?<<==?@?=<:::::;;:9978999:<>=;;<<;;:888::978=><;:73=czw{w[S_lwvcJFCCBCDCB@>>DC31:46:<ELF9,2D>-4332345556788779<<>A>6215<=749CE>5/-//0333BF6-.343345795/.020*+/35:CID>;<=92/-,,+-.))24137545217:;;<:973111249:4+(),3<?7-,0/*))'(().0-.84)-0013432021.,---).1)(''*,.../.-,))*))()*((((*+)/;A;78.'*,--/11,*+(*8GB2*)'*18:8:8;@A4(&,.00//5453,&**\u001d>rX,3885,'*=KLD91+)'''(''(+*(&')))**+.23-(*+(%17//78::::951470,/489735>DB:20102442/*,9>739>CJC:?C>;9740-)8PJ537AFDIFFIW^RTieXQPNLI9/5/1?C?40.+,<UU\\ljS6.-+*)((()*(*5COWZXSKB<9878;9764,))())'&((),05BI>23653.*+):G6(%-=EAKo}z|veA(+0.+,9@71135410..0iiikkkkjihhijkmmlmmllkjigfedbaa^[[[[ZYXZ][WWXYZZZZYWVVSSTUVUUVVWWXZ[]````_`dfgfca^\\ZXVWYZ[YWVX\\\\YWXXWVVVVWWWXXXZZYXYZZZZYZZ[\\\\[ZZYYXXWXYYXXXXZYXWWWY]]YVUVWWWVUZdgeefikmonllnonopnmh^XXZZ\\b^UT`klaZ_jqppwyz||}||}}}r`X]dgjnmfekqpfagkmlnsxwwy{{zz{|vsmnrm_`ba`dnoicjrmmbx}lfhjedeeehgtzolljhijjjkvyowsmrz}{{qqroutrgniihijklkjheb^knzw|tf^\\[[Z[\\ZZlsaYXVT]gqmkqkkhrWNlocpn``be_Xfpppnlkjfdca`^WS]cY\\pl_]]\\YYZ[]^][[MooRWbeeghnjXLLU\\ZXWWWWWXYYZYVY\\[XVVVWWTQQQRQRSW\\^^]^[VSRPNNNYuyaRQVUPNNLLMNPVWOKMPPOONNOOOMNNONNONNOONNNNMMMNNNORSTSSTTSSUQMMNPRTQO]γpKFLLLMPUKIFFhvkiiknoljhhecc`SOOQSUVYXWVVWWWWVVVUVWWVVWWVUUTSRRSTUVVUSRRRSRSSSRRUSRQPNLJHIIJKNONJIJLNOOTZ[TPRSV[`b_]\\[\\\\[WTRPOPOOPOOOOMOWYTPU[[XXYXWOJMKVdXgfHAGMXWMHDBDHKLORSUZUONMNPK`tTKLMMOSTUXQlԳ`GSVYYTLJZja߹mboshZRURT_mtn_XWYYZ\\crusncTLKJIIJLOOMMLLWXWSPONMKCCJOONMLKJHGEDBA@AABBBABFDDB?@FGFDDCBDIHFGFDCCBAAACDDCBIdndZOGGZh_^^__M;=>=>>=>EHEDFGFGGGIJHCBGLLH@>BDCBBDFIFA==<<<<<;<>=;88AHD736545655555688899:;;;;:9744588778:;:66;;:::>BFGGGD@=@A;8863Rv{oppheefhknqmvjCECEHJMROIB@@AA@@?>;<=@DEGGFFC@=7?ECB??????@@@AA@??BA<;<:749<?GQQOLLIA><><?@;?KJLWN@GJC@BD@9:::::98:;9=GIDENSTWXSMLF?@GLJF@=<>??=?AA?=;?@@<878;<<:=?948:77778:9775:D@Op\\?ADECE?<==:;=?@ADFIIIIJJKJFA@>>?@><<<;::979::986669<>>===<:::876677779<>>>>;6=ezv|gPZlyy`BEECABBBAED;@F:597;=;@HIC87?;202345555567776:>AAAB<7303=@927BC91./12354285),14654534672/143/-.019FH>66::5/.///-.2(&/888:63524<@><;<9530/.,-5:4,(),3=>3),232111//130*(4:/.0121.--242,050,+*//(('').241/.-.2,)*,---//--/.0<D:38-*,++-/0/)'*&&.::1-+)+2868;C@:1*'&)..-1==763-()-\"(LG&,462,((4IF9.*)('()*((*,*(&()*-./--.792-..+,25785679<92/36/++.055-*2>=50/001321/,19:5-.4:?>:@B?>><8/*.9;-*=W[KP_XVYcfadjeXONNG647;2#;PG>:2).@M\\gieR;410580*'),)(->FISVQJB:76558962'(*)(*+*%&(()'&7I;-35?A8//)NP4IML9)SxE',/,'1=943/05521246iiijjhffddfhijlllmmllljhgfedbaa^ZYZZZYZYXXWXYZZZYWVUTTSTTTUTSUVUUVXZ\\]^_^]_begfb`_]][XVWYYXXWVVWWWWWUTUVUVVVVVVXXVVVXXXXYYZZZ[ZZ[ZYYYXXYZZXXXYYYXXWY[[\\[XWWWXWW\\`[Y\\`ddcfhlnmnoonmnnlga[YXY[[]cfa[X\\cgkqy{|}}~~ve[`gkswunmlcZW]holfikjlqvuvumsqsumd^jidbccbab`dfghg_gz{mcedcbbccdcezxxoljigijiginv}ywpnmq~}|~~{}zzh]pnhhhijllmkjdbcn{lnzl\\\\\\ZY[\\Z\\ipeZ[]WV^empjhjikeSa^Rcfesndnu^Uksqpolkjfedab]\\qmUa`a_ZYYXZZ[ZTWgQUY[^^^`a]QKT\\ZXXWXXXXYYZYY[\\ZWVWWUUVPQRSSTU[acca]XURRRQPQUgm`VPNOONNNMNOQUUPLNPPOONOOOPOOOOPPPPOOOONNMMMMNNNOPPRRQSSRSSOORRRTSRPSgνyPNSONMNOOQOFEPmmhc]_fjjihecc`VRQPPRUWWXXWXYYXWVVUVXWWWWWVVVWUTRRSUWXXVUSRSRSTTTUVTSQPMKIHHIIKNOLLLKMONMS\\a[RSVZ]a_ZWVUVXZYVSRSRPOOMMMMIFJNOKV^XY[YVRMLLIKmb[hWBCJOPPNJFFHIHHKPP[TOOPNMOKN}sTKNNMPTTVXQsһoEMRUZ\\SMPY\\Xڜ`rvdXQNKNW`nxo]WZ[]]apvtpi[PMLKHIKMLKKJIQRVURQOLJKOQTTQKHGGFFDCBAACBBA@???@CC?AGIHHEDCDFFDEEDCCAABACBBBCI[kgTJJKWma\\\\^YH=<=;=>>=CHJGDFHHHGGIJMKHILMLIHFDBBCEHHE@?<<<<<;<>>9667=GD74544555455578899:;;;;;:744777447:;848=<;:;@BEFBA=8:?;87983>_rosrjfefimmhpuI@FCCCACGOUMHDCBBB@AABAABC@><;;;:9BEB@?????@A@ABA@??BA=98656998<EJNMLKJEA@=78?BGHJRLDHLEADC?;:9;;:88:;:<>HCGOUX[[QHC@?@EJHFC><=AB@@@?><;=?A<999<>><?C<:8988889;9797<G?KiV?@BE>?><@DDEEEGHGCAEKLNOQQNLLKJHFDB>;;<==:768:87778======;::9997544568:=???>7=izt~rPVkzyZ<DCCABBBBDE?=<:796==;=AED;7<9535677655557776;FHHE@;9503=B=47CB6.-133475252013578664449;9877543.+5DB859<:500133112.-4:<=<72567>@><<:7320--,,.//-**-4=>4,/35544426:3-)&-=:0.+)*)))/70&,82*+,*//,(',59951--04..000//230/210;D7/81/-,+,,/.(&)(')/10.-+,378:<FF:(&,/+.48>@:875,()+)&,2'(/41-)(/83*)'(((*,/,+0.*('(),122/*',57101/+-386-*2:=8.,470+)'(*,((+/0000114421/,/475017@DA>=>BCDEB87;7.**4PQ8Md_[\\ee`ekdRNOO>3;84:38GB?49?<ADLPJ]l\\C:6:B6+)+.)0?FC@IUOC<645427=60***((,00,*+)''',8;446>JF:5)DSG\\ZN5 &g\\5+-/-088464/.45227;9edcbcca^]`cfhjklnljihggfffdbaaa^ZXXXXY\\ZUUWXYYWWWWXVTSRRTTSSSSTTTVWXZYZ\\[\\^`cgfca___\\ZXVVVVVVVUUVVVUUTUUUUTTTUUUUUTTVWVWYYYZZZZ[[ZZZYXYZZZYYXYXYXXXYYZ\\\\ZYYXXXWXURU[^]\\Z[bjmnoppoomnqrpke_ZXZ]\\[ZXWY_fqzxz~~}~pebdijklkg^VTXcnoha`einorsutiirwqhahy^`cdbadheebec^^agdnobecbcccccchpyytnnljhgijighin}volhl|z{|{{}s}}x~wbf[Ygqlihhjlmnnljgiusjqpu}n[\\\\[ZZ[\\^^[WY[[UXlxokpfchgd[LWsr^drnsui~Zbvsrqomljfedbb`puVVtacc]VTPNQRSUJphPTTWXWWV\\]TMSZYYXXYXWXXY\\]\\[YXVUWXWUVSVc\\OSX^ded`ZUSRRRRQSU`d`UNMLLMMNNNPQSTQOQRPOPQQPPPPPPPRSRRRPONNNMMNNOONNNNPPQRRQPPOQSTSSPRRNPϰ{NLPQQOOOONQPHHQ^njdVRZagkidcba_TPOPSTUWXXYZYYYXWUUVWXWWWVVUVWWTRRRUXYYYXTTTSTTTUVUTRQPMJHHHIJLNMMMNMLLMLQ\\c^TUZ^_]YUSSRRSSPMLNPPNLJHIKKLKJLMO]ZSX[YUOKLKHEPcaaI?CIMLMKGEHJIHHJMPZONPPNNNKOfuTKNPRVWWWVWǖ]KOOSY]TPTXLlЛauuaXPLJMT^i}zaWZ\\]]bourolcUOLKJJJKJJJIIRRVYUTQPNOQRSQKGDDEFFDBAAACB@@ABA>?AA=@EEGGEDCDDEFEEDC@BBBBA@ACEJZmcMJPIHac\\ZZTD=;;;<>><>BHKIFEEGHEGHKPQMKKKKJGEDDEFHIJF@>;=>===>=85542;EC8456544433567879;:;<;986435654359;95:;<:;<@?CD?=;8:;;:98954?Uft~skgfhlojnxI<?FAABB?<FMPKHFFEDCDDDDCBA>:55698:CEB@?>???@A@AAA??@AB=876667766:FMMMNMMLIC<<DGHFFIIHMNEAD?<:::;;:89::;9:FCGOVY\\[MA????CIGHHB<=DFFC@>=<:<=<;::;>ACCDGE?99;;99::9:<?CGCL`N@>@@>GLKMRVVUUWXWOFGNQQRTUSRTTTTROMHA=:;?CA957779:77;;<=<<<;;;:97567668;=>>@:7]xs]ShwqY>:BCBCDCCCCC>;;7:8<;:78;:7598798898654667766?KLIE;99624>C@78A?3.034346554224459<;9877;>>:876550,3=<56:;84101343249BFB?==73678;>=;9741011-,,,+-.-+-5==5244332220490(('&3;3-)$$'(*/7/'.85/23/-01.+2;:97/'*/41763.,,021156/7A6,33/--,,**.,*++(*-.-,+*-2899>?@:1&.4/.7?@<9874,()**(&''(.1/,)(.,(&&'''(),36340*'')),2341*$$*2466-')-00+(0794,-44.*'$&(%&'')+-../032/.-+,0567:@FE?;;>HHGFG;=D8)(*'=?*FTO]]W__fkVKLTOOJ<.-=GF69?1?aU=<6.*HvkH>79>7.362,4JMA=GSM96423227>=/,-+)(,.2::2+(*32/6814;AA?7*=J[ofH2$\u001cJj.(---.274464.,/4338;:[[YYZYZYY]adgijlmha_\\Z_cedb____]ZYWWWVWYYWVVWWUSTWXVTSRQSUTTTSSTUWVVWWXZ[\\^^bffeb`_^\\ZYWUUUUUUUTTSTUUUTUUTTTTTSRSTTSUVVVWXXXXXYZZYYYXXXYZYXYXXXXXXXXXYZ[\\\\[ZYYXWWWWYYWVVX]dhlopqoppppqstrmf]WVWWXXWX]jspq{}}{}xlb^]]^^ZWVUV[hqria`fqwur{powxy|h]adaaabekgedb`_^[]wvedddgffffkrplmpmonljhijihijlwrokfo|yy{}||{ugbdfjozkpwykggee^`nnhgimoopqrqqxzsww{c\\\\[ZZZ[]\\[Z[\\\\YWqzz}ljgdfc[XWSYkokswtqjznsqomkjgecbbb{|t[Js{a[]\\WZjne_ZZTtdPX[YXXXX[ZWSTXYXXXXWWWWWZZYWVVTSVYXUUXi[Q]efc_XTSQQQQPSTV\\acRKNMLLKLMNPQRSRQQPQPPQQPPPPPOQSSRQQONNNNNNNNOOPONOPOPQQPNOOQSSSSQPQORϥwWLROPPOOOOOPOMQVTgli\\TUW\\egdcbbdXPQTVWVWXXYYZZYYWUTUVWWWWWVWWWVUTTUUWXXXXUUTSSSSTTSRRRQOLIHIJKLNMLNRRPNOMNU[ZRU`cb^YUVWTOMMHCCEHJIIIIJJKNNLLIZhTRY[YUPNKJJIETohN>BDHKKKHDFIIIKIJKQRMOPPPQRPSV\\nzTKOSVWYYXR_ȡlTQMIOWZZVUUPѝazraTOLKKJSduwhYY[][joqnmjcXPNLJJJJJIIIKQRX\\]\\WUQPPQMD>AEEEFEDCAAABA@BCCCAA@=<?ABDDDCCDEFFFECBCDBBBAACEGJYjRJKSF@Na_XZXL?;;=;==<<=?DIKIFDDGHHHIORKKJGIGFFEFFGILKC?<=>===><9545438@A<76544444566779;::<:9863223234689;<::9:=AFGJF<;;9;;<;:::897<Ngu~vlhhlrptxG>A?C@BBB?>??FLLKJJHFFDDBA@>=<86677:BEB@?????@@@@A@?>@AA>9766677639>CKRSQQRROLGFG?<IHIMQMC?@;98999999:::9:>BBGQWY]YG=>>?@DJJHIE@>DFEDB><::<<:;:;<>DGGGIID?==;99:99=@BFEDMVB?>?FQ[^\\ZXYZ[[[\\\\WOLORRQSUUSRRTTTRRQKE?<<AIKE@;89==:==<<<<====<::::9879:;;=@<2NuvjQerj\\F6>AAABBDEDCBB=<;9;;:98766468665688755668768FRNG?:99865=EE<7>;2/34455667745778=FD=98889<>;96554357778972/--/1333:FNOK@<;735557797620--05630,+)),,.5=;445420-,,-/1.)%%%*4631.)&'+29638=;9999411005;644-+/16574/))-/00027/,31+-1-+/32004311-()((+//+,07653//55)-74.7A@<:762,)***-10/.11.+()00.)'''())*5?>:0)''((,4:8530,*,27:4+((*+,,...+,15+**(%()'(('&')(*,/0/,,,,-047:>@>:8<>AFC>DC/.A<)'+-9<2;=D[_NJYdU?@GKQR@/))08?)*EE@fe@95('<jmD;66676??745<?@?EL>,1422338;4.35,***'0DG6.,171&(-+/78:?6-;{YCquU2-+!-L1,))*)*+1663/,)*/585/TTTTSTVXZ\\]^ababc_ZWTRW^bca^\\[\\\\\\ZWWWTSVYYVTUUSRSUUUUSRUUVWVTSTSUVVVUUVXZ\\\\]adfea^\\[YYXVVWVUUUUTTTTTUVUTTTTTTRRRRSRSUTTUVVVVVWXYYWWXXXVVWVWXWXXXXWXWWXY[]]]\\\\ZXXXWUUUSTXXZ^chnnllnqpopppqrpme]ZYYWVVZ][^m{|yy|te``_[TQTWVVanrpjbcq~}x|vu|{z{__dace^`nofee`emqmt{jdejkiijmptsjippoqokijkijjjknsnnmkr|{}xvvx}|ou~{{{{~zptoyxqjd`bkyrmkjiliggb^fqpiinqtwurqomq}~|tc[\\[[[[]]\\[]_][Yjzolecd_[Zdnnljqvwxrlrrrrpnligedd_Wkzwuh]a[aa\\YYZZb|xtruly_TY\\ZXY[\\\\[[XTUXXXXXWVVUUUUUTSSQQTVVTQXutN\\iic[TOPOPPRSUVXZbXHKNLKJIKMNOOPQPOPQQQRSRQPPOOOQQQQONNNNNNNNMNOOQQPONMNOOOOOPRSRSSQPOQLÄPKRSPQPOPPPOPOPTRNXjhaWVUTZbeccdh^RRXZYWXXYZZ[[ZZWUTTUWWXWWWXXXVWVWWVWXWWWWWUTSSSSRQPRSSQNJIKLMMNMJLSWXVRNKMRQPZefa\\YWWVOGJPLFDEFFHJKKKKLMNKJNfbORZ[XTTTNLLMHHp~`FDFEGIHGD@FKGJKJIGSONOPPRTUUVXTUULQUVWYYXTypWTPMGFLS^\\YRWӣunbPNLKIDFRexl[Y[clpnmkjhd\\SOLJJJJJIIIP_[]^_`]YVSOPKA<AEFFFEDCAAAAAACCCCCB@>>=?@@@CBCFGHHFDEFEDCCBBCFIKLVbMLJE=8I_`YYXM?;<??<<<>===>ELMHCFKKKIHPLIIGHIFECCCEEHJC=<>=<<<=<:7567333;A;544445655668:;;;::88530///24668>B<8;?AFKNKC;::9;<<<;<<=>=8;SnzzmijqusE4???@?BBA?BB<@EIJKLKKIGFDCA?@@=;;978@DBA?????@@@@@@?>@@@?:777677558::?FPSSSSSSQL@0;OIJPSN@;;88888999:::98:<?AGPWZ\\TB<???@ELOJIHB>CGDDGA;9:::;<===@EIIHGHJGC?=;9999=CDDFFEFB@@GQYZZUUTSRTVVUPPPOOPQQRSSSRQQQQPRSRONMHDFMRPIA<AIKFC@<<<<====<<=<:9:;;;:;=96StzeUfnfZLC=>@AAADEDDCBAA=:89:;;75545664368986667975@RVP?8899:76;EG;399214557758;979;;>BJMD968:<BFC:766641../472,)*+-.102@LLIIA;:8443233431.-,--17860)&'').5;9213310/+)*+***&'-6?=;9:4,*/6<<?AA?=;;9751/3;91/20222995.+)+./0/+*/.()+++,,-478776543-('%&*/0,,-.+)'&&'(&&*+.9@@;4/10,*)**-488641,*'+6<4)&'&(*((0BB:+)((((,7>><:87489446.'&()*,+,*(-1+&'*)')***)(&%%&)-/-..-.//25689854:=<841/.-%%9E4&,62=@<P][b\\=5;949=@GA0-++)(?LCgkBEL9/.,09KY>5437:8;=<9879?CCA7,-3104999;=;9:=?BC?CA/'*-/.,)%%,7@DB5/:]<Ke5(-/&!XY2A7'()))).4433.('-34,&SRRRRTVWZZYZ[ZYWXYWVUTUY]__\\YYYYZZXVVVUUTUUTTSQQQSUUUTUY[ZZZXWVTSSTUUTUVXXZ^abeeb^[ZYWVVVVUUUUUUUUTTUVUTTSSTSRRQPRRRSSRTUUUUUUVWWWVWXXWVVVWWWWXXWWWXWXZ[[\\\\\\\\ZYYXVUTTTVYXWZ_bfgfmqporsonooprsmddcb_ZVQQ]puqnqyymihd\\UQQRSZhpnjedmv}}xr{xoqyg^eb`ppbksifmwrhlommmmptwtswsovvkgjkiijjkonnx{nnjhtrsxuuwxxtolryywvvx}rsux~~vw|idakymhfhjigfeggkqsomt}ogfgit|u^]\\]]]]]\\\\][XZe|{|qdae`Y]ktrooqtrrme^j|{ptpnmjgfdc_cquo`Z_da_[[]\\[[`hoqrss]jX[Z[ZXXZ\\\\\\]ZUVWYYYXXXWVUUSSTTTSRVVSURScsT]omaWRPQPPWYYYVTWXNLNKLLLLNNNNNNONNOPQSSSSQQQPOOOPPPPONNNNMMMMNOPQRRPNMMNOPQQQQQQRSRQOSAcYJQQOQQQPQQQPQPPPPPO_k`TTUSSZceddff[SUXWWWWWX[[[[[YWTTUWWXXYYYYXXYXWYXVTTTUUWVTSSSSSSQRTTTQNKMNONMKKKQUVYVRMLNLR_dbZWWTQMIJTZSLJIHHILLKKKLNRPN]q\\LR[[XSPTRONOLPfydKHFFGHHEDEJLLNIEDGOMNQSRTVVUUWXP{XJRVWXZZW\\RUUPNJHEN\\_ZMcٺg^OMLIGFDEVpYV[gqpjjjjic[SMKJJJJIIHIa|tf\\X[^]\\YTRNKEEFGGHEDBAAAAABBCBBCCB@?>??>>?ACGHHHFEFFECCCDDGIKLMNPQL?8::F]b[[WK?;>@E@:;=<;;:;?GKLIHHIJIKKIIHEED?<=<>>AF@=<>=<=<;;975665545:=744434454568:;<;::987521/.0357;AA:7;EFIEF@>;;;;<;<?ADFA@@A<Bf{}pkmurt6:==>>@BBA@DC?=AFHIJKLLLLLKJIHHFCE@75>CBA@???@@??@@@?=?AA@;7776777789998<CSWXXVVUA7KMEMNQP?8879967:<;:::98:;=?EPY\\VH==??@AGMNKJJC>BHDDKI@;;:;<=??@BFJIGECDEB?=;:999>EFEDA@CEBAEHGDECDFFEGJGIHJPRQOQSSTSRRQQQQPPPQQRUVRIFKRTPFBKPKJGD@@>====<<=<;9:;;;:;:7:WvyZ\\giaXOMLA?BBCDDDDCBAA=::99:86754357779:777767873>RVL8/4788437><20695/-/5:769;>><<?ADKPJ:48<CHG@865794,(()*,-*'*--,--4AGB=<:97323544310//0//.,-020-+*''-5;940134771*(,+(((,<CJF<8<<4.2:@BBB@><876453-.891.//0.0;<6,))+,,--,,/42-))*))/8<<;82156-')+-./..-,++,+))))++**-7<61-+,-,*))((,05532,'(1;:/'+-((+()/=C4'*0*%(-:A=950/8@=4-*)%&))))+-(*/+&'(*,-+,.,**)''')+*++****,/4323334751+'''&'(.1>E;7;38G^xbFMWO>103445;9-)*.3-EmD3+&,.+38<I<.+/9>;648@C@>?AGG7053/05:86;@FKKLNTXK6583,,4<FE9/19CJA4.7D2_J'.3.)%/0):='(5CE;1/2440/2552,*TSRSUUUVYYWWXXWUVWWVWVVVXZZZYWWWWXYVUVWVSSTTTQPQSVWVWY[[]]\\[]]ZXURRRTSSUUV\\abdfgea\\YWUUVUTUUUUUUUUTTTTTSSSSRRRQPPQRRRRTTUUUUUUUVVVVVVVVVVWWWWWWWWXXXXYZZZ[[\\\\\\[ZYXWUTVWWWWVY[[altspqrnklmmnqssrqrqpld^_iomkkq|yrokdZTRQRZhkklktz||}}pvyf[am|r_dgbl~xpqjbjrkmpqppty{~vnv}pdhkijjkknuyvyypopnr~xzwttsqnlr}}vvuvzrnqrtxqtvac|ohfejomiginoorqjnyvjdcft||g^]^^\\[\\\\^\\U_qyze^d_Zclqsqqrrqoib_ai}luqllkhdgdhzXXSV[cb]^^^\\^`hokgaOcT]\\[ZXXXYYZ[XWWWXYYXYYYXUUUTUWWWXZ[WWVTT`WcvscTQPRUZ_[YVVTRKMQNLLLMLMMNMNNNNOOPRSRTTTSRQONOPPPPOPQOONNNMMOPPRSSRPNOPQQQPOOQSSSRRPEsqLSUPOQQQRSRRQQQNOQROUkbRRTTSS[ghddf`VUVVVUUWXZ[ZZZYYWUUVXYZ[[[[YXXWVWXVTSSTUWWVTTSQRSSVVSQPOMMNPOMKKKNOMSZUNMMOU\\^[WUSOLJLU[YQKIIJJKLLLMMNPSVUbm[PS[[VROQRSQPPT^mkKGHGFFGFDGJEJROSbXPMPSVVVWVUUVYQj[GQVWXZYT|YQTQPNLKHIZ_VWɰr_ROMLIGGHAOv~]QZf`injijhbZSNKJJJJIIET~n_VW^`_]WSQPLIGGHIEDB@@@@@AAB@ACCB@??>>???AEFHHHFDCDDDCDDFIJLLMONLB<9;8BZd\\\\VJ?;=?GF>;;;<<;:89BGLMHEGIHJIKKIA<999:;;?ECA>==<<;;:866555664587444333444468:;;;88:8645421247?DA78;>@C<:;<<::;<;=CIKJD@?EE:Zwrmovorf=;;==?@ABAB@>=<?GIHIJLOPRRPONNOMKJB77=CCBA???@@????@?=@BBA;877677778877644>L^`[Y_TFF:?NNYR?9878867<=;9:;:9:;=?FR[XI=<==>ACJNKIIID?CGCELKD><;<=>?ABEFGFECA@AA?=<:98:AFGEA@DGEA@?;9;;<<;;;::9>EEKRQPPRSTTRRQQQQPPPPPPQSTOIIOTSLA@HLJLLLJD>=>=<;;:99:;;;::84=]xm_bfd^XQOTPEBFFDCDCB@?>;77<>;22=<6467::877777777526HSH60365542492+047:3,-5:68;<@C?>AEIJNK=348>A=9656651-,,**((('+.---09><:7666622377652027:721.*)+*+.-)(/7;:50.39>=5+(-4.(08@BBC=98:6/5@FDDB?<8421010++25/,++-.1983.+**+,./358?=0*((((/8>=7/-296-+/23210132369;;;8546850430.-+***)('&&(+.001,%(7=2)(.0*(+*)*2:0(+2.%',;F:+'%(05343(%&()(''),)*+((*)).0*),++++*((('(*)''((+.1/0352---///12345:,6SSD8:FYk`HDIO[S@30//,16/'(/@F7PW>3&&:;*/4<C6+.19===76:DIJIOWTE=91020279;BOUQNOTRF<EQNEBCENWTF826<81/039ld0+30+)(''.8</+EbgN4.14/-2::6434TSSTTUUUVWVUVWWXXXXWWWVVVUVXYVUUUVWVUTUVUTUWVSSVY[ZZ[]_^ZYZY^a^]ZVSQQQRSUX]aacfhf`ZXUTTTTUUUUUUUUUUTTSRSSRRQQQQQPPQRRRUUTUUUUUUTSTTTUTTUVVWWWWWWXXXXYYYZ[[[\\\\\\[\\[YWUVVVVWWVWVV_llegieabdeglpoprtvwyyvssspmmou}~|~}{wnga[VSX_kvwy}{wttv||h]cafp{o_bkibrx{o]xxmjoqquyzvwxlp{vhfjihijkinwnkhdl~~}|urrplm|ssw{|wsttxvuuwx`u}oigglqpmllljigfiiihfcdozg]^]]\\[[]YZbuq\\cZ^jmqtsstsqrohlq|osulkjhcheowr~uw{b[]\\^^^]^_adbaaU`S\\ZYYZZZZZZZZYYXXYYZ[[XVUTVVVXYZ[]`^WUXW`]k|udWSQU]c^WVVUTQKNOMPQQPPPONOOOOPPQRQQRTTTSRQPPPPNPOPQQQQPOONMNNPQRTVTPOPQQQPPQRSSSSUQQtpSRSSRQQRQRRRQQQPPPQQSQakVRVTTSR[ijgge\\UUUTTUUVWWXXXZ\\[WTUY\\\\[\\\\\\[XVTTUUVVVVVVVXXXUQPPUW[ZVTTRPPPQOLJKLMMLPURNNLPVWXWVROMKNSYXTOKKKLLLLLNOPQRSXVecUSTXZWSSRRSRQSUTaoOPRMLKKJHGICGMRbn\\QLPVWWWWVWUTUQZcHRWWXZWR\\JRRQPNLLKHT\\VɉbdRNKJHGGHAD^mRZbLVecehge]TOKIIJJIGFeyldYU\\_^[VQNLJIHGFDDCBAAA@??@@ABCEDAAA@@AABCEFGEDDBACDDDDFHJJLMLSJ=<::;:@Q\\[\\XJ?;;=CFC;9;<<::<8:9>LRNGDDGIKNVI9779;<<?EFC?<===<;:9766556666454444444554468;;7<;:98778879:;;:>9:;;:979<<<:::;<BIKJHEAAEF:AgvnospxF5=<=>?@@A@>:<@CBDFFGIKOQSRQPOPPPNKB88>CCCA??>>??????>>@BB@:7766777777777776;VedabcY?3?JGYU?9875568::9:<=<9;;>>ESYL=;>==>BEKKGHKJF@CFEGLKE?;:;<>@ACFGGCA@AA@@?=<:989CHD?EJFA?>>=;;==>@?<:878;DFDKOQPPRRRRQPPPPPPPOOONONMNKHOSNA9BMMHKRRL=:>=<;99:;;<<;<<73Aez|gigc_^VNQT^WF?CDBCCA?><81/;EE87C@755685005766776533<KE76565554353/246=<115759=<>BBACFJKLI=324675467750--,,---*('-0-.17>>9:<;9776229;86312:A>821-))*-.-))2:;82-+2:@@7+'-44/580-.48><63/6?@=;9960.-./00*,11.**).223-/-+*+-..168<D?/)+()*/9>;0*,130-0102444679;:7540//.03423/-/0.+++**)*))*+-/2/')7;2///1,+-,)&%)((+00)%*;H4&')*+/121+&'*)(''*-**(',.*&+.,**)+,,,,,,**+*)+/3321379:2'&0898:<=A?8/BXQKGMIGF>DPSWZPD??>7247/',,5QB0fyHC8$.C;)-158.1639:0:CA7;L[_fkg`G0274.1?GEITQLIILNMV^ULU]QB?GRTC/*.4//*,?d?#.0,+(()'*.79.Bo}R//11+*0442122SRSTSTUTUVVWWVXXYZYYYXXXWVVWWUUUUUTTTQQUWVVZ[[[[[[[]]\\^]XUSTY_``_\\XURQQSUXZ\\]^ac`YUVTRRRTUUUUUUUTTTTTSRQPPPQQPQRQQRRRTVVUTUUUUTSRRRSUTTUUVVWWWWWXXXXYYZZZ[[[\\\\[[[ZXWWUUWWVWXWX\\_[WYYWZ^]]_ekllmmnqttwyxvspnpuvwy~xlnuwy}wpga_[Ydx|xvtrpxv~yd_fdaaaa`chjghuw}n^wvjgknprrpmlquqkjqtmghiiikkjisxuppswz|~|xpqpmxzprw}{wyyxzxy}yn~}xsqqrxsooroigilu|~}xqn}yd\\]\\\\\\[\\\\VhkYYcimsvwwuqollnvzwopwpljgfdbpzkXh{f^_^\\\\]\\\\\\^_^_cRaƄT\\\\[[[[\\]]]]]\\[ZYZYUUWWVVUWXWWY[Z]daXVX\\_h{scXSU\\c_YVTTQOQTWVXXUSRQQPPPPQQQPRSQQRQPPPPOQRRRPOPQQQQQPPONMNNPQQTXVQOPQQQQQRTTTTSTQPTPSSRRRQRRQQPPSWVSRRPQSQUm]RVUTURR]jjge_VUUUUUUVVVVVVY[ZXVVY[[ZYWVVUTSRSTU[ZXWVUTSSQPPOTYVWZ\\[YWUTTOLJKLMLMMLLLKJMTVWWSOMMMSYZVSNMNNLLLMNOPRSSTVWh\\NOSWYYURSSRSTUUO]|hQTUSTSRPNLKJLOSRNKMKOWWVWWXWUUUTQijIQXWXYUV_NMOPQPNMLMLJPZ\\k[[MLJIHGHHG;J|V[Q7:V\\ZehjaWOJJJHHHGQknf`YXUY__][WTRPOLJGCACBAAAA???>@BGGGEBCCBBAACEEFDCBBBABDDDEGHJJNPMI@<<;:;:?@IZ`ZI>;;;=@C;7:<=:8:<975>KRPIEFIMPWXH;9;;:;>ADDA<<==;::86666566665544444456544458:1;:::9899;=AFGA;:;:9;><<;<;;::8;AGHIHFDCD@?>*O|oqrr~@;?>??>???><;=ACCABFGGHILOPPQQRPPNNI=8>CCBB@?>>?>>>??>>@BB@:76667767987689:87D\\fbacbQDJF:ISA9864567779;<<;:<=>;BRTC;>===>AEIGDEKNJCCGHJJJGA?<:<>@ACHIF?<?A??>>=;;99;CHA<EI?9<==<<=>>>AC?::=BELSPOSTTQOPPPOPPPPOPPNNNNOONOLHHQTG:<HOIKOVUA8=;==;;:;;;;;==83@i}efqmb^cYKT[XN8/<DCACBA>84*'5AA;<@<8544664356666785335<=66665555564233489653.04647?DCCGJLKC8434101222311232230/2,'-21-08@A????>:75318=:830.2<?712/+//.-,()4<940+)2:>B:*&+1332/(()*3BH=.175375431/.**/64-+...-*)/611++**+042///4>C:/-/,.05>>70-//.+*-0/8:46414<<3.,**,//+,23/,,++**+,.00-,+)*275--6721243544441+($%+/2,'*7A.252.,,,*))('))(''*.*+&'/0+$&*--,)*,...//-++.369<;86=@@?5))18:8:;<?=5>OTFFUSD>COXTV^^UNKMO@467.)(*/GJ9QWDK;&6D5,./..-472:7)-:FEEP\\]abZK9-,--+.>IJQSE@FHHLKEFD=NaQC;.8JG1&*.**((6J2\"'*,-*'((&%5E=;sD%,--..-,,--,,TSTUUTTVXXXYXYZZZZ[ZYZZYXWUUUUUUUUTSSTSUXXX[]^^\\YY\\]\\YWVVTPPSY]``_^\\XVTUUTVWWWWWUSRSSRRSTUUUUUUUTTTTTTSQPPPPPPQSSSVVUWWVUTTUTTSQQRSSSTTTUVVVWWXWWXXXXYYZZZ[[[\\[[[ZZYXVUUVVWXXYYWUTSSUYZYZ[]bddcbcfhfinnllnlknmhimj]\\fomgq}rgb`\\Zenrsqmmzxw}uc]aca^[]dffhiimkhwqXvyhdfilihhggfhiiikmlhfiijlkjjly|vsu}{zynpv}zqnqx}|yxxyvu{z{ur~hiqjikp{yonplr}vb[Z[\\[[\\Z]xZ^djsty}}uihjhjnqwm`imrtmkhgfbiocZ_`\\^V`ddd`_^\\\\]^aa`aRaɆV\\```__`bba`^]^\\ZZZWVWVXZWVWWYZ[\\af`XWY`]krwr]SQX_ZSTTTSUVXZ[\\[VQOOPQPPPPQRTUSQRSSRPPONMOSTSQPPQQQQQPPOMMOOPQQSVVSPPQPQQQSTTSSSRROMTTSSSRRRQQPRS]d`VSRRSRUTa]TUVVUVTS]hje_VSWWWVWVVVVVVWWXXWUVWXXTRPRRSTSSTTYWUTSSQONMNNMNPOPVZZZ[[XVSPPPPQQPOONMLLNSVWUQMMNQVZZWROPQPONNOQQRSTSOK_dQIJINWZXUSTSUUTQNWZWQRTUTRRRQPOPOMLKKKKLOWXWWWWWWVWUQXrhNSXXXXXWRTONPPONLLLKLOVZǪ`RPLJJJJJKJIFD`{[YJ67\\hQXele\\PIJJJJGHYghbWPIL\\gb`bdghgh_QKFDB@?@@????>BGJGGDBDCBBABBDDCAB@AAABCDEEHIKKONK??<<<:::>:<Uj^H=<;;9:@>7;;=;78=:::<>CKNMKKNNPWPB89::;=<ADD><==;:87666656544444444444643431243-=<<:999;=BHJJD=988DI><:=<<=88AGIHHHFDCC><>4=mpqotf?@????>><<:::;<=?@@BGGBDHLNPSSSRQPOM@8;BEDAA?>????????>@BA=:766666689876778898K^`a``ZQKB7?KF:865666789;:::9;>=;?NQA=><===?AGIEACJLHFIKJJHHDCA<<<>ADKLE><??=<<==<;9;@FF@AB?::<==<<=>><<>BDFIQTY^[URPTURQQPOOPOOPPOOONNNNOOOQJKVQA<>?JPMSXI999<?>:789:::==:59cyeZjuogeleMMXL;5;BDEDBCC=641111//3679764455666557897300021243334543/-.///053+(.0.-1<FCCGKKE8.,1530143100258:==6282(+.-.9EKKGC?==;97757;=;61,-22.*//.87-))(*5<70.,(/8=B;*%*-/221/-1--<H?15349169851/-./563,-1/.,,/400*'&')1752313>?1,//-03;B=6331/0-),27>>41+(,4843332299/)/4/*(((**+,,/0/-+(*1671.010-+17979=>==8+$)//01/455;=50.,'&(),,*))()-1+-+-43-(.52--++,..---+)+4;<;;:99>@@=4/..27889988@MQRH<;=EPV]aWYdb[XPJLA5891''''6;-.:CF8/:>40-,+*,462781108BMTUNJFA;4.**-15@FMSH54AHOUJ@??59^Y<5))6:/)*(')((/21-(&,2-''()2BMM>m|4\"*').0-+++,++VVVVWWWX[[YYY[\\]]\\\\\\[[ZZYXVUVUUTTUUTUVVWXY[ZZ[[ZYZ[ZXUQQRRRPQSW[^_a`\\[[YVTSSSSRQPQRQQSSTTTUUUUUUUUUSSSSQPPPQQPQSVWXYXVVUUTTTTTRQQRSSSSTTUVVWWXYXWXXXXXYZZYZ[[\\[[[ZYXWVTUWVVWWYXXYVTUWVUUWYXX[^[YY[^_^`bacfhhfb]ZYXUXcnj]b{}|obYTU[mxoebjrwz|td`_aa_ehkfgjijljde`bwvnljgdgjgeddfghknkgegijlkijnt~}}{wpmtyv{vlq{vtrnqxzzrr{yqntw|vg\\cbbdefhkwvog}~uaX]_[[\\\\Zix{zx~michq{{|}}ldhhfgkoshbglspliggddjd^^\\\\Z[^`bdgfc_]]_die^TbǈZabcdddefeca_^^^[[]]^]WZ]WUXY[\\[\\cd]WX[`__y{nzjVRX`b^ZYWVUXZWVWWRPPMNPQQQSSRSY[UOOSVWVSPMJLQTSQOOPQQQQPPONMOQRQQRTTTSRQPPQRSSRRQQRTWWWTSSTTTRQQQRWbd]UTSSSRUUVWVUWVVWWUT[fjdYTWYXXXWWWVVVWWXXXWUTTUUSSTUVUUTTTTSSQQQPQPONNNMKMMPRUXZZZVUUUVXVTTSSRPPKMTUSROMLNQUX[WQPQSRPOQSSSSSQQIJfVGFGDIRTSTTUUVVVVTRPPRUXWUSRRROJHHIIJKMLLNUXWWXWXWVVUUWecYXYXXXXWWVLLONNMLLLJLORTĉ_MONLLLMMLJGJHFhcVE?>cgPdpiaVMIHJKII[fc^XQGLcnc`daflnpmWFFHB@>>>???>@FIGFEDCDCCCCBBDCBBBB@?@BDEEEHIJKQND=>>>=<<<;>:KoaG<<;9:8;@<;;:=:<=<<?A@<@HMOOMLLNMD65889<<?@C@===:97777776655543444445563210/.030:<;:989;<>>=>?A@EJIE<=>CHKE<?HJHGGEDBCCD@<?;XpmjvwI?>=>>>><:88778:;<??>DGACHKNPSTUSQRPJ>8:BEEBA@??????@@??AC?:8766666789876677786<P^abcVHI>89EK;787777899::;;9;=>=<DIB==<;;==?DJJE@AGIHIKIGHGEED=<<<ACKME@=<<;==<?A@BDGHGEGGEC?===;<=>=;:?JVYXWXZYRLDBJOQSTRQPOOOPPOOONNNMOPQTSKKTRA87?GMT[Q>57:<;8668;==:9=98bdY\\hpomkmjP@EA@HQLEDCBCC;79::742001456665544556667861.++,-/0224442/,,....0462.11/+-6?@AGIC:2,+28866:<941347;AA74:3))*)5GPPMF?<:9<=>=946:=<730.00,,--44,('(-7<5.-+(-6>A9*%),03355442.19426/18/5885684/-/9<4591+,.44./(&(),2886;>9:6,+.0.129@;4442011138<?<4*%%'+0561-++160(()')-//110/0132/,**,.65,+/.-+-//035679:3---&-861/7;:410,&&+.//+(((*.1+.1022/08=92/.,.//-,)()/8;:87766677211/.27998999DMSSJ@4:OXWVWZchb^[SOPC5;>3)'')//%&*20,2:7-+****.6814<;72/5DQWNCB@6-.--07=BGJC6/4?FMOIE>=>Dfb7,+)+-.10++,--,*1;;24:2)(&-DQKA;MV1%)'(*-+)(()))VVWWWXXXYZYZ\\\\^``^]]]\\[ZYYXVVVUUUUUVVWXXXZ[ZZZZZYYYWUSPNPQRSQQRUY^`^]\\]\\ZXVSSTTTTSRRQRRRTTTUUUUUUUTTTSSQPQPQQQQRUWVVUSSTUSSTTSQQPQRRSRTUUUVVWWWXWWXXXXXYYZZZ[[\\[\\[YXXXWWWVVWWXXZZYWXXXXUTUUTW[YXWWW[ZZ]\\]_cfb[WUTTUX_ff__lwz{y~sbVQWktma_clz}odfeca`iopffihhfeeft}xsj{qffnngccdefgimnjhhjjkjijls~zwrnkq{{uzwnrvrnnrsopuvrmq{wmxvu}z`ihffddgjlowf||tbWcg\\[\\[ar~ymmvvv{ygcpz{z~uihggghgkg]_lqrnifeeeeeb`a_^\\]]\\^bdd`]]ahsjZW`Ƃbiceddegjie```a_]^^a`\\XY[WWXY[]\\[^^[XZ[^aceh]U[fje`[XVUTSQPSVRPOOOOQRSSUUUUWXVQNRY^]XRMKKQTROOPOQQQQPPPNNQRRQQQQRSSSQPPQQPOQRQQRSUUTSSSTTSQQQQSW[YUTTRSTSTUVVWWXXVWWWVS\\ih`VXZZZXXWWWVVWYYZ]\\ZWUSTTTTVWVVUTTSRQPPPPOPOOONNLLLNNORRRRRRSSTURPNLKJJLFISSPOONNOPSVZUPPSTSQRTUUTUTPPK]]GHMLNQVURSTTVXZ`a`bdc^[ZYXTRQVZYUNJGGJMLJNSWXYYXXWWWWWX^a_[XWYYYXTNNNNNNLLLLILKPIj̹eWPPMLLMNMLIGGG@YkXJNEduZZlke\\RJIJKJI\\ea[UNFPipc\\ZQNU\\a_K??FBA?>@?A@@CFFEDDCCEEEECBBBBCCCD@?>BEEFGGHIKRNA@????>=<9D:FkaG<<;::87>A=98=>>?<=@B@AABBFJOPOOMD;78:78<=>?A?==:877777766555444444456531,,,+-/>;9:98899888;=CJNVMA<=DJMPSICEHIHEDBA?ACEC?>=Dpqll{`>><;>>=;997888899:>=;@GDCGJMQTUWTOLJ?977ADDBB@@@A??@@@@@AA<986666667788766777765?TbdgT<F987@K>899779;;<<<<;;<=>?;>DC?<=<<>?@BFLKF@>CFGGFFGGEED>=;<@BIMD=;98::;@DIKLMMLKKKMNKC?==<;<=@EJOU[ZWPMLHA=::=@DINQRRRRQOOOOONOONNOQSTQFMXI9=AEKS\\\\I6779:<>?ADDD@9=9C|dfYYfmrqohaQAA?BEF@78<AED:3358::::989;<:9754566554653/-,,--/0248896115753114555312.*-35:BB:43238;;<<>A=942357>C6-3/*)(-AQLA=9789;>??=82016::83/4880+*,.)&(*09;3)()),4==4*')+230168431.,,34/0./0.-,/32,)1:=9362)()23-1'%*.36767=B>6/++-//001553100123435<;1.*(('(.22,&#$(/0+*('(.24567778960-++*)23--./1100/0001//../14*1:920035411,''*/0-)))(*-0+-,**,/149975//42.---,/49:88877753364/./39<;::;<::DJEB@GQVVXXZagbSIKSUA5:7.)&(+/.)+,)).9><3.++-02;=36A=5789?HMC;>?844349>=<>;0/6>A?><;?:9H`pX5*'*-/2652//11.-3?EB?;1**(1L\\R@557/(''''')('((((VWWWVVWYXXY[]^acaa_]^\\ZYYYXVVVTUVVUUVWXXXXYZZZZYXWWWVTQOPQQRRQQQTX\\]^]\\\\\\[YWVWWVUSRRPPPQSTTTUUUUUTTSSSRRQQQQQQQRSTSSQQRTSSSTSQQQRRQRRRTUUVVWWWWWWWXXXXXXXYZ[[\\\\]^][YZZYXWWWWWVXXY[\\\\[[]\\WUUUWYZ[ZXVWXXYYYY[`_ZWXXWXWY[]`bbepyspy}nZ\\s|wh^]lshbgmmhjlljhggggfcabai~yoruimvpcabbdfffjonlkkkkiiiinyzrqomls~~~{|}}}y~rqoginrtoku{slputqxxyjcd`s|s|xsd[ln][Y\\ksqrpnq|s~{~wfdrxxvz|nhggeegdcbahlpoieffddcbba^][\\^^^]^__^^cmqgZ\\Sqfqfdabgkmjd`_aba`_^cd\\WXXYYXX[\\[\\^\\ZZZ]dhm|q\\\\Z\\^hrm_VTSRRPOUWSPONNPQRTTTTTUUVWXXVUYab`XOLMQUTPPRRQQQRQPPOOQRRQQQQPQSSQPQRPNORSQQQSSSSSSRSSRPORSUWWUTUTRUVTTVXXXXYYXXXWWVX_hi]XZ[ZYYXWWVUVWXZ]a`]YSQSSSUVWWVVTRQQPPPPPOOOONNLKLMMMLKKMMLKKKKLLKIGGHIJMQQOONOPPPQRRRPQTTSTUUTUUUUQOQbNENRUWY_ba_]]]^`ceeeed`\\XWVTRQYfptm^ULLLJKMRXYYYYXXWWWVVX\\]YWWYYXVSOMMMNMLLKKIKIMI=uҗFTONKLKLMMJIGHGCPmgWYWcyn\\ObqlaVMIJJJJ\\e_XRMHSgj_YXVTV[VEA?>CAAA@AACEEGCDDCCDEGIHGECAABCDEDB@@BDEHHIJKNPG??????>=<9@=@`bI<=;:9:9<A?9:=ABB>?@A?@@A<;AJPOONI>::<96:;<<>?<<:877777655555444444456541)-.-./999899::99=BGLQPOHA>?>BFGHLFEFFFGDA?>=;>BCA@><M}qmvqF=8;=CA;97799::99:;><9<GHEEILPTWXUKFE;721CECCCA@AAA@@@AAA>;98676666688877666666667CZgj]E?689=B>:999:<>AA@@=;<==>==ACA?<;:;=???AIMLD<=ACCDEGFFD=<@99=@GMB888759AGJNONNNMLKLLMJGC>?>:7@M[[TSNIHC@><;:;;:;;=AIMOQSTSPONNOOOONNQRRSMHQM>?FFDGMQJ@==AHMLKJJLLK?;7Rb>c\\TfpwtmaYRMLHFE>6786@CA=<:<ABA<987:=@?<954589422584//.//.034456;<79=;422113584.---//017735779:;:99;<;:72246<@6-.*))'0FN=0368:<BC?8420-+-3774..3961.,,*&',3::3*)+,./460)),1552155230+).5311/..,*++,,++2334-)**'%)++0)%),011.+097.*,./.,++-.///.01244100.((())).32/-+*),13100-*)+./4:=;;;92+)))*,.-..//1476345442,(*/69:??5(,39600,''+/-(&((((+/,,))/22..1353./111244456:<86456767>B;2..3>B><:<?5*1<@?IRRYchaUXb[>)5E?431+('+.120,,++4<?>?@9.+264:>9;C?24AKH@<9888:<;:@JE96765<CEGC=;>GKCCW^>(),.022341.-,.03359@>5/0/(2ReX>00.*(''''%'.31*,.WXXWWVVXYX[\\]`egdca_^][YXXWVVWUTUVVUUVWWXXXYWWWVUUWXVTSRRRPPPPQQQSW[]^]\\\\Z[ZXWVVTTSPNOPRSTTSTUUUTTSSSRRRQQQQQPQQPQQQQQRSTSSSRQRSTSSRRRSUUVVVVWWWWWWXXXXYXXZZ\\\\]^`_][[\\[YXWWWVVVVX[]^\\[\\]\\ZYVXZ[\\[ZXWWUTUTUUX[[XYYYXWWWW]ec_gqqiht|tz}ukmx|l\\\\fc`beistnkiihggggd`\\WYk{yw~}zmpxk^adabddegjlmlkkkjihhkt{jgmnloz}ywy{yy~zipolprtliyxmnpqoý~xvua]fwyub`tq_ZZhxwurnmoortikwxttx~qegfdff`Y`fckqnjfgheedca`^\\\\^_aa^_^_^_fmia\\\\Qkcje`Z_knnja_`beg`\\mSZXXYYYYZ[[^`_XUXdoolh`]`dh]c{|lYSRRRS[[SQQPPOOQSTTTTTUWYZZYYWZagf^QMPTURPRTTRRSSRRQQQPRRQQQQQOQRSTSQPQUUSPPQTTTUSQQRRQSSTWWWWVUVUTTTTVXXXXXZ[\\[ZXWXXXbli^\\\\ZZZXVVUTUUWVY\\]^_[UUUTUVWXYXTRQPPPOOOOOPOONMMNMOONOTY]VKFHIGHKQVXTPRQOONMNOQQOOPOQQRQQSUUTTUUTSQQY[QRSSVZ]bgiiknnke`^[WUSSSSQPPONRYftulc^XRKILRXZYYYXXWWWWWWZ[YWWWWUTTPNMMMLLLLJJJIIF:Hl@KLJJJJKKLHGHHHEIfcHN_Q}mQSZnpeZOIJKJK^e\\UPLNXa`]]_cd`XOGHRBBAAABCCFGHGADEDDHIKMLJGCA@ACDFEDB@BCGJIJKLRIA?>>>??><:9;>>Q`J==;:::;:==;<?ADCBA><<==?>;>AEFILLC>==;8:;;;<?<:9878877766544444445556541)0420-269999;=ADIRLHJD@;:<<>?>?@DDFFFEECA><<98=DEB?A?ZqpxT8;29BE@;98999:::9:;;::;DGGCGKQUWXUJCFB=20EEAECA@AAA@@AAA?;8777776667888776666665985JfjbJ<989::;;;=?ACFFCA@=;;<<==>@BA?=;:;=>>>?CHLJ>;>ABBCDDED65C=5;=DMA66669BJKMNMMLLLLLLLKIIGC@;48GT]UGE@<<<;;<<<<<=>><;=@BEGLRRQOPPPPOMNOPQQPMNLC@C@@AABCEDHOXZQMMLOMF::7_?0M]Wlr|vaX[UPLKKNJAEC<>>BHQPNMKHA9445:@B?=868;<5.02;;0000113574207<:;;4../0258:4.+,486433337;;:::9643359633688:50.)()(2BA1/4678@HG</-11/--0452.*)0:90--*'',5<;4122/..-.,*,5<=;642/00.)*1741/1//.--,+)(,3-/:4)*/.)('*1,)(('(*)%&*,)+.0-,)((*,--.///13540)'(()()1<?:4121,.440/..+'&()+07;<<:3+))))*++,--.1563//2364-,---7:?@6'*1883/,**+,*)''()+,/-*,1:;600221-,-.4::74589;;8422347=ACD;3/9EID=:8;5.7?FMTTPYoqTT_I/,-0102-''+5:60/,,)-;C=55::/*3958::=DD82ALH<5;8447:31;FB<<:8786>JCALI>DJDA9/*/1123445/+,++38857==79=5(6[gH,---(((&''#$0;5/35WWXWVUUWZZ[]addccdca_^][YWWWWXWUUVVVVVWWWXXWUTTSSUXXVVVTTRPOOQPQQQRTX[[\\ZXYZWVVVTSSRPOPRSSSTUTUTTUTSSRRQPQQQQQPPPOPQQPPRRQRTRQSTTTSSQQSUUUUVVVWVWWWWXXXYYYZZ\\\\]^`_^^]]][YXWWVVUUY[]^[[ZZ[]]ZZZZ[[[[YVTSRPPSVXZXXZYY\\]YX\\ab`dhjjehqpilsrrsrkktuqmjgt}q`^``_`lwskghgedegea`_biox{|{{usth]bd`adddegijkkkkjggjnxvgfklminvtx{yynpusrrqihxunmopnwvr~}uctktvw|rbeupaX_yxspp~~ny}|zxy~|y|qt}|j`aYR^eehkigggeeedcb_]]^^`___^^]_gme^][Um``a_S\\qqlhc^_dgd`[cQ][ZYXYZZYZ\\`_WT^pyn`][^grwd`z`TVUR]eWMQRQQQRRTUTTTUVWX\\[VQSXblk`UMOUSLOTTTRTTSTTSSRPQQQQQQPPPRTUSRQTWUPOQSTTTTRPQTSSUVXYYXVUTVWWWWWXXYYYYZ\\\\\\[YXXZZ[dmg\\ZZYZYWVVUUUUVWXXZ_c]WUTUUVW[YUSRRRRPPOOOPPOONOOOOONS[cj]LJKIKQX_cb^[YWTRPPNMOONMMNOPQPQSUUTUUUTRQT][[][ZZ[]`deffdb^ZWTRPONNNNNMMLKKKRZacdegi_SLOXZYYXXXXXWXYYZ[ZXWXXVUTSQNNNMLLLJKJJJEGDSCHIHGHHHIIGGHIHEITJMSPPmgMXYfoi_QIKKJOeiZRPNSXYX[a_^aZKKUSSEAABCDEEFFFGBDEFIKKLLLIGC@@ACFFEDBBCCHJIJKNNE???????><;9:><EVJ?><;:::89;?ABBDFCB><;=??>>@@<=BKOJA?=;:<<<<==;9887887776665444444555554125651,368999:@GJHE<9:868:;<=?=>?BEEFFDDCCA@?>;<A@@?B?Doqxq?6;:;DEA=::9999::99999::@FIFGKQUVWSIADCC<9DFBCB@AAAA@@AA?;88677776557787776665666674>\\lbG=<9899:;>BDFJJHDA@?;;<<<<<>@@?><:;<=>>??AFKC<<?ABBCCDE91;E;9:BNC446<HOLMMMMMKKKLLLLJIJJG@88?IJGB==<;==;<<<<<;>?@?;99;<<?GJNPPRSROOONPRQPNOMFABAAA@AABEJQWWPMNLMNF><?heA8>\\Vju|r\\[^SLONMMOIFEF@@EKUTROJEB?:866<AA@<<?A<4,/44623466689:74237;<:41.-2798863117:9786327:<>>=;972--1335787674-((**5>86<;0+/8BE<2276552265212++9:1++*('-6<96562/..-)')2:=><742,,.,(,37620121/,,-+))*.,.<6,,/.,)'*52-*)))('''')*.45.*,,)))++*+,./0131+,++)(.:CC?9532,,54.,,,*)(&%&'*29<91.++++,--,-.1462-*+./00/241+,/6>:/.17840-,,,,+*)(*--.00/-079512430/037?@<868>><:630037?>8@FC=<EMLHC<439>CKS[VILQ`}jHTS3)213322,(-5=:/*-,+*,5>90-+--.3;6458;AC<35777>@-)04510;A@@<3..-.9D@BLD417?E=3234668<<8221..6:;<=B@>DH<*<aX3&*+)())''(%$)/28;9WXXXVVXY[\\]bge[WZ^`aa_]\\ZXWWWVVVVVVVVWWWWXXXWWTSRSUUVVUTSRQPQQQQRRQSUVWXXVVWVVVVUTTUTRQQRSTVTTTTUTRRSQPQQPOPPPOOPOPQPPOPONQSQPRSTSRSQPRTUUUUUVVVVVWWWXXXYYZZ\\\\\\^___``^\\ZYYXXWWVVWY[[\\\\[YY\\]\\[Y[\\]\\\\XUVVSPOQTVWXYZZZ`c^^_\\\\_acdfhhfeeded_^opddeefdadjnyud]\\bwsgdddeeddfd^_isvsx~}|}{{wg^ab`bdeeeefijkmkheirwvxyofhjkmjmwvxyyy}osvsokgjopnllmooqw}~vz}~zx~}{yy}neovpcZew}~yy|xyvrnp}m~{oZ`oqifhgeeedba_]]]^^^^^^]]^elc[][Of^_b^Ucyxngb^_ch|z`O]\\[ZZXXYYYZY]^W\\ltsf[[]alvte[thUWUUaaQLQQQRSUVVXVUTUVVWZZTONR[lpdVOOSMJOTTTUUTUUUTSRRPQQQQPPQRQRSRSVUSPNPSSTTTSRRSUUUWWXXXWUTTVXY[_^YZ]][[\\\\\\[ZXXYZ^[[elbXY[ZZYXWVVUUVWWWUYccYTTUUVVXYVUUTTSRQOOOPPOOOOPPOPNPU\\`YRPPOYceddcbba^[[YSLKLLLMNNOPPPQSUUUUUTTRTY^__ba``^\\\\]\\[WRPNPRQPOOOOONMMNNNMLMKLV[cnpjaVQUZ[YYYXXXWXYYZ[ZYYXXWUUTSRPONMLLLKKJKJNCبJCJIGEFFFGGGGGIGFJIN[TLVTUWUUdkibSKKKLRknULKKTYSSZ`YUYRFJWPKGAADEFFFEEGHEEFKOMMNMJIHEB@ACFFEDDDECHLKKKMC?@???????=<:;=;?OJB?<<:::<>@CEFDEFFD?=;=????@B?;=GRNC>;;<>==>?<998888877666655545555444444999960369888:=A>9644677:<>==>=>?BEEDDCEEEECB>=;96:=@?<Vuf95;??BDD?<;:98899::::999<DIIHJPSUWSF@BBCA?BFEBAAAA@A@@@=87876666676666777765555666778LhaB;<:999;<;CEGIJHHECA><<<=???@??><::<=>>>@??DFA=?ABBCBCE=34DA99?IC99>HQQMMLMMLKKKKKKKJJKIDA>?@B@=<<===??<:;<<;;<?@><;<;;=;8:CFHMQRQPOMOQQONOPJC@AAABA@ACEILMLMMMONDB?D^?RL@YRdx{iT`_RLOLKJIJKFCJGDDIJJIF@=><:857>DBADGD;2,,1.-1346666778;<67<=<=:424798776668:96642117>BA>>@>5.**+-06863251+()-775?HE:.),5>=9;<<<;99:6225004553,((*08<85330//,+*).221333331..+(.443201210-*,/,('*,,42-,,++,+,76-+-//,*))(),2541461,*((*'&+.//142/00,)*3@A;8740-*/63.-,,*)(%%%%&'0;7-,++,.01.,-0221.)()***,1531,&&,6>;878830,++-.-+)')+--//,('*-03352./4<@BA@?ACE?;;84/05>C;9FHGHGMRNNNC:;BDIPWYM>=EJQB7D<()04::62+'3961-*)+*)+/470-)+-/37300033551-,.1/+)-/354;=83/-++,03469:93.(&5>:999;>:;BA7553013457?B>?BC>1AXA,/-*)(')))(''%(8@:6WWXWWVX[^^`cc\\TQRUXZ_`]\\ZWVUUUTUVVVVVWWWXXXYZ[ZWSPPQSSRRPPPQRPRSSTTUUTTUUVUUVVVVVVUUUUSRRTVVTUUTTRQQQRRRRQPONNONNNNOONMNOOQRRPPQRRQRQOQSSTUSRTTUUTVVUWXWXYYZ[\\\\]^__`a]ZYYYZ[ZYYXYYZZ[[\\[Z[[\\\\\\\\\\__`ZTWZXTSRQSVXYY[Z[__aa]Z\\^aadihhfedegmctqjg^baa`\\\\gupb]isigefgiiebbbdkrssy}|}~{i`bc``bdeecchjjklifmxxmmsleghilr}vqtvvwwx~vpspnjhkmmmmpqoruy|t~y|~~z||lixvpd_kqspr~y{mhlolptؽvOlwkilkigdb``_^^]^]^^^^^^\\akd[Y]Qa_^e__pvd`__chd__S[[ZYYYYYYYZ\\\\[Zhnga][]bisuh_YewXWVV]XPNQRRSUVWWWVVVWWVVXWTQQPRaqgVTWPJLSTTTUVUVVVTUTSQPQQPPPRRQPPRVWRMNQQRRRRSSTTSUWWWWVUUUTTTVXZ]a`\\]__]\\\\\\\\[XXX[]_]]bfc_\\[Z[ZYXWWWVVVWVVW]c_WTUVWVWWVUUUUTSQPPOPPOOPPPPPPOOOSXWVUV[cdedeeec`__b]QKJJKKMNPPQQOPSTTUUTTSTW[^`a`_]YXUTSTOJJNQRRQRQPQQPPOOOOOONONOTWZbdb`__^[YXYYXWWWXYYZZYYZYYWUUVVUQOMLLLLKKKILM@ەAGGIIHFFFGHGGHHGFIUZNILLMHVscQ[hfYPKJKUidTMIJW]RS\\bZXWOGINMHB@CHGGFFEEHHHDIQOOPPOMLKHDBACFFGEDEGCJNMMKIA>????????==<=>:?NIC=<:;>BEGGFGGGFFIF?<<=??@@@B@==CORF<;<?>==@?;8999988776666655555554444469:;<=7358788:<;6589:879:<>>><<=@BBDEDCECECA>987445:><:Fy`75989=BDA><;;:989:::98889BGFDGNQTVNB>A@?>?BEFDCBAA@A?><666765555677666666665546768;95=Wa@9::::79ABKEDFIIIHFD@=<<?EDA@A@><;;=>>>>??>?CC??ACBBADF>8:>=;9:@?==BILMMKLLLLLKLKKKKKLLHAACB?>@B@>=<<@@;;;:::<<=?<<>><=>;57<=?ADJOOONONOOOPPME@@@@A@?ACEHHJLLMRTG9BGCN7FXTTQewz^=R`SECBDDFIMKB?@D@<DKJGEDC<7756=BBDGF>2*++*--//02/.1104;?=;=::<97664765565668854432.0?D;8?C?4,(('(*283-)/00+*,33;CC>9.*-5<<;>@@@==@<85///1225<5((.49=;77740-+*-320,(,,.259:2+,2520020-/1/,-/0+&),*-63-.,,-,+3:7/),0.-.,*(+042/351-.0--+*/022479:5.+(+6E>2/-*(')160--,+**)'(((&!'65,+,./131/-02//0-(&()((,10+)(%''*8<><82/.+))-.-,*')+--/+)'%&*03331-/5>>@@ABDEC<7665329@@:BLHIMJJPQQTPHFEEJQSPHDED>8330-(+136683*&4>1)*,)))*+-/220-..1363/../-.0..02547;52332.)(,/-,*)..-+'(')3:=?>949<><99B?7765322027=>868?@=CJ6.0*(('%&+-)'&%(5@<5WWWWVUX[^`^[WSRSSQQSUZ^]YVUTTUVVUVVWVWWWXXYY[]]][XUQPOOONNPRQQSSTUUUUSSTTUTSTUUTSTUUUTSSTUUUUVVSRQQPPRSRRRQONNMMLKLKKKLOPQRRRQPOOPQQPPQSSSSSRRRSSSTUUVWXXZZ[\\\\[\\]]]]][WWXXZ\\ZYYYZYYYZ[]][ZZ\\]_^]^`c`YWYZWVUSSUWYYYYZZ[]_^[\\\\_a`ceigfefhkifmsyvlkjkhebZ]efb`uyokgggkok_^ineix{h`cdb`acddbbfkkikprttmelwnceghl|ymoqtuuvw}znnoliikpnmvytuwx{{w{{~~|pmwvpebowuqs~~}lakqwtخc[n|vnlourgb`__^^^__^^^^_aaaeocXY`W^gfe_cxxahl`_spH]ZYYYYYZZZZZZ\\Zaila\\\\ZX]jv{q_`^Uh[UVWVROPQSSTVXYXWWXWXXWVVVUSSRORehXXVLSXWUTTVVVVWVUUTSQQQRQPQRSQPRVXUSRRSSSRRSSSTTUUVXWYYXXVTSTVYYZ\\]_aa_^]_^]\\[[\\^``^_babd`\\[\\[YZYXYXVVVVWVXch_TUXYYXWVUUUUSRSRQQPOOOPPPPRQPOOQWXWY_eddffffd`^`b^TMKKKMMMOQPPPPQSRTTVUUTTVXZ\\XUSPLKJLOSK@AJPPQQRRRSRRRQPPOPPPQRRSTTVXXW\\kri\\XXXXWWVWWYZ[[[[[[XTRTUURPMLLMLLKKILMDmuBJGKKJGEFHIIIHIIKQWLHLKJNMNt\\@?_i`SKJKSec`\\SLNTRU_aZVQLIIJJF@BEGGGGFEEEEH<GSQRRPQPNMHECCEGJGEEEGEKNNNKGA@??>??@@@=>==>;=IHC?<<@FIIJIGIHIHFFD=<<>???@@A@??BJNM@;=?>:<?>:899:999877677666655554444569:<>@<55668::;9887:;9:>?ADB@==>@BADFED@<<:986554458988:f\\557568<BEB?=<;99999:9::89>BDDGLQRQG?=??>=>BFFFDDBAAC@;7545664444788776666665446888:977I];6989:75BYXGDEILKJHGB?<;>HJDBCA?><;==>???@@?BB??@DDBACC??A@??==?@?>AFJMLKMMLLLKLLLLMMNMF@BDC@@@@@?=;:@@;:::::;<==;;<=<==;:;:<=<;>EIMOQMMPPNPOIBA@AA?>ADILJJKLNOH;7FOAKP=I`[UjytO-C_T8:?BBDJNPF0)4>7BRQQOOK=02768=CIKB3-*))+..--./.,*)*0<BDDB:1367850.,-065236742443-+<C1)9EA2)'('%&-51,&'+2/+,/07;92/,+-5;<<>CEA7;A?::963232100,,/46758=<6-++*.10.-..../1250,.330..22./122..0/)()))/0-20/++*2<?3'&**,1/+()-/--+***,361.133469:;<5-*'%1C=/,)')-,35-*12.('*--*))()-2246765311383,-0-)()+*),0-)&%&'(',3::5/++)+.--/00+,-//,'&(*044330.0343<?@BDCDA9434667=CA=BIJJMLGKQZ`RFDDGKJHKMNOLC=82351431,/2.(%5F1(+-+((*+).13301259<7530/0/-,08:88;>>;9750+,./--,,//0111-3GMEA9.(+./.-1A>887752//28<<306=CACA5/*(&'(+.2561(%'-762WWWVUVXYZ\\YTRRSTSQQQPRX[ZXUTUVWWVWYZYXYWWYYZ[\\]_a_ZUROLKLOPRRSTSTUUUUSSTTTTSSSSSSSTUUTRSTUUTUVSQQQQQRRRRRRQONMLLLJIGHJMPQPPRRPONOOPQPPQSSQRRQQRRRSTTUUVXXYZ[\\\\\\\\\\\\[[[ZVUVXZ\\[ZZ[[[ZZZ[]]][\\\\\\^^]^`aa^YWXVSTVVTTXXVXZYWX\\]ZZ[`a[Y`cfdeffikf_hnz|}rttn`UXgf`i|yqlmigioqe[lxmt{h^`bbbbdeedcdjrojryulhfjoslihcjnrpossuux}zmkmmlkmoomz{w||z{|w~}}~x|vmuwpfapxvtx{~|~ujkqkblg__hjjiqzrfa`^^]]^___^^^`affgpfW[aObaec]dycn_cڮcW[\\YZYYYYYZYYYYbhi`YYZYV[n{i]^`NPs}\\SWWTPPQRSTVWXYXWWXXYZWUUTTSTTONYe\\]VMU\\XUTTVWVWXVUUTTSSSRRQPRSRQTWYZa_WTUTSSRRSTVWWWXXZ[ZXVTTTVXXWXZ]aa`_aba_^]^_aa`__b`ac`\\Z\\\\ZYXYXWWVWVWVU_jdYVYZYYWWVUTTTSTSRRQPPPOPPQRQPOOQVZZ[agecfgfdb`_a_PJIJKLMMMOQQPPPQRRSTVUUUTUUWWSOLJIJJKNQI?@INPPQRSTSSRRRQQPQQQRRTSSSSQOMQ\\fmh]WXXWWWWWX[[[[[[[YSPPPRSPMKMNMLLKIKNKHeBKHKMKHHHIJJIHJMWZKDIMUWWWNEHF9G\\dVKIHJJQTWYLGNQW_^YPNKHIIJGDEFFGGGGGGFBI<AQTUSRQQPNHECDEGKFDEGFEKNNNJD@AA@@??@@@>>==>==DEDC?CHJIHHJJKLKJFAA=<<>??@@@??AACELRC<>@;7:@=8899::99877777766665555444579:=?@@9644579::98799:BHJKHGECDDBA?BFEC=8555777677765659WuzP355347;BFFDA=<;;?>=?@AA@><=BEHMQPJB?=>>>=>@CFFECB@AA>8544565434456766665666655798777618QI3988997:P\\OEHFKKJIGC@>;<IQJFEGEA>=<==??@@@@?@@?@EDBA@@@AABCDEDDB@>BIMPOONMMLLLKLLKLNPMDADDBABA?AA>;9=?>=;:;;;;;:<<:;:::;;::<=?????GOPOMNONNPLDABAA@@BEJLKIHJIC:79AI>=VUDL[Wiv`9,6HP03>@?AFPVO:'(8?9DKPRRPD418715BMO>.-,**,/.,+,..,)&(/<CHLE6/05784.'(*0640288434541/05+\"+9<70*(*)&(.0,'%)-/,,-.23.,,*,05;<;>FE949B?<;<:3133200///00025:<5+)+*,--.2120/..++,.021.--.132233/-//+'((((*-1350)*5<;5-)%&*/0+))++))(&')*.21/1335677882,)((1=:1...69435()3=8-*-1/-/260)*1344761118<2+-.+))*,,,./..-+('(((*/353*'*.0-+/220132/'\"%,5;9540.23101:>?CBA@?830069;@GGDCGJKNOJKR__PEBBLNDCKORVSHA:449A7543/0-*&6K<(*-,('*,+,1790467;=8972/21-+09=:9<BJNLKH=3.10-/0/02258749CJIB7+*4=>>?EC;898784224898206=AAB<3-)(*&(7CA=><1('+-+)WVVUUVWVUVUSTTTRQSRSSRTWZZYWUTTVWWY\\]\\[YYZ[]^]\\Z[YWWUQLKMOQRSTTTUUUUTSSSTTSSSSSTUUVUTTSRSTTSSSRONOPQRRRRRRRONMKLKIFFJMMOONOQQPPOONOPOOQRRQPPPPPQQQRSSTUVWWYZ\\\\\\[[[ZZ[YWWWXY[[Z[\\[\\]\\\\]^_^^^]ZZ[\\^__`_\\ZYVQPSUUSTTUXZZXW\\c_YY_`YUXZ^_abeijjgghq~szzf_`dikowtnkljhegoofiyyxjeea`dfedfgebjvwoosojlkhtwq}xqrpruutuw|volmnoonnmlyzz}}}y~{z~yp|wyv{sikrwvwyxr}||~yjkboɐutkbcccbinha^_]]^^^__^^`a_bnbZogYZ_YdY[[Wgxi}{^vtT][[YZYYYYYYYXWdmeYVYZZYU[rt`ZYURWcg]ZYXUSRSTUVWXXXXYYY[\\[XVUUUTTSQRU`edVQTUVTSTUVUVVVUVUTUUTTTTRQRSSSTSTbcYUTTRQQSTVWWWXXXXYXWUTTVWXXXXXZ]_`acccb`_```a``_`_``^[\\][ZTTWVTWWYXXVVYbjdVXYXXVWVUTTTSTSRQQQPPPPPPPPPNOPTZ[[^cddefdb`acaSFFHIKLMMLMPPPPPPQSSUVVUUVUUUTRPMKKJJKMOJCCGJLOQSSTSSSRRQQQQQRRRRSTTTQONNJJYb^YXXWWWWWX[[[[[]^\\UPONNONMKLMLLLKJKKN?VAIGJMLJKJJKJJJLSUOGBIMX_]YLJJD?=GZYMJFB><>BIIFJP[_ij]PJIIJJHIGFGFFFFEEB@JC?KQTSRRSQOIDCCEGGFCEHEEKNMMFBAAA@@???>>>====>?ABDCCGIJJJJLMNQLGC??=<<>>??@?>@BDDAKVF>>?:78=;8799;:99877677776665555456579::<>@<731478:<<:9::=JQQQNMKLNOH?<AFEA:656789:9:<:6554:NnxG4565559BFFFC?@@@FKIHHGFED>65@IOQMC??>>>>==@CFFEDBA@>;8655655433432455556787767888777721ER37878@ICCQPJKEGGHHFDA>=<GQMHHJJE@=;<=>>?@@@???>?DDBA@@ACDDFHJJIC@==AFPOONNLLJKKKKKLMOKDBCBBABBABA=;9;?@><;;;;;::>>>====;:89:;<@C<8>HIONMNNMOMFCCCABBCEHJJGED@>>??>@=9M`YIW]ijA295:N92=;5<=IVUD2.>F56<GNPNK?786,,<JD2*.0++,/.+)+01.+))/8BLI90135783,((+587.7?932222100-*'&+/3871.-,*,...+)*-.--,,*'((,047=;;BI>02<@<99982,,6:6542697743.10,*,-*)+19952210-,-.251-+*)+/23331.,+)'))()*+-2;9-*140132-'(,/,))++*))(*,+-./.+.243/.//1-,09=;:568:@A937,+2<=400/.0233.((*+*-121/044-,.,*))*-0122101/)(((()+.31*%(,-,,-/079970'%-7;:6210153,-08;ACA><<94/.49<>EKMIFJLOTUS[bYHDDHRQFDJKP[WC<854>E79>;5310*7NF-(-,((+,++,4D6478:869:1-11,+/699;<ANVUX[O=122-/0/25669659:<==507@HIKMQG:7<<89;75760.4999==@<2*+/-&'7HF81350'(10,XWUUUUUTUUUTTVVSRTRSVXXXY[\\ZWTTUUUVY\\\\[ZZ\\^]^^ZURQSTTSPOPPRTTTSSSSSRRRSRRRRRRSSTUVVUUUTUUUTSQPQNLMOPPPPQRSSQOMKKKIHKNNMNNOPOOONNMMNMNOPPPOPPPPOPPPQQQQSUUUVY\\\\\\[[[[YWWVXXXXZZZ[\\\\^`_^_`aaaa^XVX[^__^_`^^^ZTPPQQPPSVZ[ZYZce[VZ\\ZVVUUWZ_dijeejr{xl~rcdablpoolefkjdcjpokt~uqz{rknpgbfgeeffdcgpvulgijllijzsnnptwvttuxqlmopomkklx}~{}qvkwy|uV^ږzoqx|z{wwltuwwyzur|~y|||uv}jepvv๠~lxnjjhfa_]^`_\\\\]]_`^^`c_]dgZSdeZXarf`[TT`vrx{^TX\\Z\\Z[ZZZYXXYWem_XXXXXYXV]qufZVSQUXUU_b]YVUUUWWXYYXXY\\`dc`[YVUUVVUSSSS\\heSTUTTSSTTUUUTUUVUTUWUTUWWTQQRRRNU^YWUUTTSTVUVWXWWWXWVWXWUTUWXXY[[[]^_acddcb`aaaaab_^]^_][^_UQdeU_aWX[ZYWUUYdgZVVVVVVVVUUTTSRRRQQQPPPPPPPPNNPTZ[]]_cdedbaaa_XNLJIJKKLLLLNNOOPQRSTUVWWUWVSPOPPLJJKKKMNKGGFHJORSSTTTTSRQQRRRSSSRSTUTRRRSSOKR[ZXXWWWWWXZ[[[[]`]TONMMLLLKLLLLKLKJILE[KDGFIONMLLLMLMMSOCADCGIJSZYMCBCFBCNWPJFDCBBBABBEIYWi}YHIJJJJIGGGGFFC??<?JFAINTSRUUSQIDBBDGHDCHJCDKMLJDBAAA@@??>>==<<<<>=;@DEEIIJJKLMOSQIC@>>>>>=?@@@??BDFFCDRP@=:846::8889;:99888677787675565457778978:<=:97:==<=?=;<=?KUUROONPUUI<<BFF?656667899;<<85571;g}G9766776;ABBBACFGIOQNMKHFA7119EPRJ=;??>>=<=?BFFEDBB@;7776775553351-1345569<=9899999:;;;7:A77:78BLNMGGKHHGEFFECA?>=FRRKJLLID<:=>>>>??>?>=>=CFDB@@BEGGIKJLKFEC><?HEFIKJKJJKLLMNOLJFCA@ABBBB@@>;9;=>><;;;<>>>?@AABB?<8778<@B>96=CBEHLNNMNNIEDCBACDDEEDB@@?>@BBB@>=AMbcfkmV,3BFA=83<;4:4<IMH54DC4536<EILE;:5,.<C4((-0-,-00..,150-+*.2ALA/-355792*)19<;:9=?7211//143/+*''(*3;6-*,,,,0443431.,*)()()0;?>?;;EE719??:66:>>0(4@<76:BGDB>:2++1/.0+,05742134111/-294+*)'&&)0442/*(''))))**+1<@90,,),375/++--,*,020+*,,*++-/(+11.*+-00..7BC<78;>?@A:39533443100////-+*+)))*+-//...+,.-,)(*16860///-*++**)))))&%%')*--069;>=924995530/022-((,08BD@=::94--3:::=EMIDILLRY^c`P@AIMSTLFCCL[W;2345<73>CCA@A9.5LR9(.0**,*)**-A=5@D;45:9/,12,*.369=<4=MRX[O7-250.,-/:?95227:4+,2:AA>;>>AE:7@A9:=:695,,5:7689==4/12-()0791&'/1*)33-XWVUUUTUUUUUTTUTRRRRV[][Z[]\\ZXWUSTTSVXXXXYZXWXUSRQRRRSTSSSTTTTSQRRRQPQRSQPQQQSRSUTTUWVTWXVTTSQOONMMONNNNOPSSOLLLLMNONLLOONNNMMMMMMMMNNNNNNNNNOOOOOPPPOQSSTUX[\\]]]^ZSSVWWXXYYZ[\\\\]]^^___abdda_^ZX\\]]]]^_bed`XSROLKNT[]\\ZW[a_ZWXYYYVTSV[_fkf^`wzsh_bhnjjwwhckmdbhkkkhglsxx~tgemlggfeddcbddgrsidhkiihhhrrn{tkmqv|}{vrx}umppqmjhis|tv~~egdcivNzݱkfkghl~~{yywxuw{}{yy}zz|z|qhzypmihunn໹kinnnllic[X_c_]]_bcba`_`^]bhgYV]\\Zjx|qc\\_Rc~pu߄O_\\\\[[[[[ZYXZW]jaVYZYXXXY\\cif]WSTUW]\\V`h^XUUWWXXXZ[\\]afijh_ZYXWWWWVTVSQYi`QTUUTUUTSSTSTTSTTTUWWUTY[WQPRRRVb]TUVXYZXWWVVXYYZ[[ZWXZZWVVWXYZ]^____accccba``b`YTRQQQPLNUXnWmxYX`_\\XVVXZ^[YXWVVVVUUTTTTRRRRRQQPPPPPPPNOQV[]^]^`bb``edYQUYUMKKJJKKKLMMOOPQRSTVXYYXWURMOSPJIKMMMMLMKHHIJLOSUUUTTTSRRRRRSSSSSSSSRPOQSSNOXYYXXXXXYY[[\\\\]]]VOOPQQQPPNLLLLLMLKIKHRCGGDGMNNLKLMOQUTI?BEFIH@GVTNE@?JCGKQQMGBBECCCCCHLWQK|gONPMKJJIIIIFCA=>=>CI>EINOS[ZWSJDB@CGHEFKMABKKKGBABB@A@?>>=>=<==<<<<BFIHJJJKKKMROGBB@@@@??=?@BAA@CEFD@=FTC9731499889::;;:::::;::;98776665679889<@BADDDDBA?=<<>>><>ELPRPNMPTK=7=CGB967877789;;<<9457/0Q{A:888:99:?@>?CEHGDCGFFDA?;8857?ORG;;??>>=<=?BEGFDA@=86888996653553/0247768BC:9;;;;<<=>=;54::::>BCGFIFIIIHDCEECBA?>DQVOLMNMG>9<=>>?????>><=BGFDB@BGIJJLLJHEEGGFDEBCEGGIKKKLMMOOOKGB@?ABBBB@?><;;;;<<;:<>???@@@ACA<62356@JG=:9BG@<@JONNPOJFDBB@AAA@>===>>>??CLMHA8;Vpvlb?$+2==,-0;:87.1;DL;4A@220//5>GC;9826=<86435>@<AFCD@82/.../18A;.0566:>8**7>>?A;7762395/1440-+)''()1885678788865430,*(+/--6ACCFA9:85:B@84008EH;,2>;37GPNJGDA=63:>74/-00.-,.020020-/41)(('&$$*252/+(&&))(***,0;CB7,+-.0562.---++0871+)*)())+,+*-.---.0/).>B?638?BA@;83115630.-0540-..,++**+*'&+/-,/..//.*&)9>:/-/-)*+,,,+*)('&&&$$*0369<::==:8971053/-/0-*''*-8BGFA<;95236::87:BCBJJHKMacZE7>HKORLB<;ETM2)3;:3-7EFEIIFA1,CTB)-4+'/2,+**2;AONA4260(*33--.,,288--<KSO>0.474/,.2>D8/15994-(,8CB=:619IH@DG<996463-.322337<<8412-*...02.**)(*-,+YXWUTTTTUUUTTTSRRRRRVZ[[Z[]][ZXVTSRRTTUVVUSSSRQRSRRRRTVVVUTTTTSRSRSRQPQQQQQRRRRSUUSWZYWXXUSTSQPPQONNMLLLKLOQNKLLNQQOMMLMNMMNMMMNNMMMNMLLLLMMMNOOOOOQQQQQRRTVY\\\\]]\\VPOSWWWXYYZZ[\\]]]^^_``cfddggc_]YVVY^`dfffeb]VOLKPW]^]ZXZ^]XUX[ZXWURUY]fke^fwvpkc_bpyuvqfkogbglnpmek||tz{l]\\cfggeefccdchpnedgggghhfgfbeu}utsu{zvy~roqwqhhhm}pit}rejpffijTrcma`f{~zyywvx}}|{yz}zz|||||~~~motlgjkosyrjescSsrlmmifaZY]^]]blpjdb^[[ciepoXT\\^[lvxjgk]dyoQbZ\\[[[[\\[[[ZUZ^XXXWXXXY[^be`ZTRX]_hledb[XWVXXXXYZ]_bfhedb^ZYZYYWWWUWTPWd[OVYXXXVUUUTSSSSSSSSUXWVXZYTPSRTZ^XSVWXXWWYYWVWWX[__]ZY[\\XVVVWY\\______acccccb`_]^bedeghhigs]_`MQ^a`]ZYYXXXYYXWWVVVUUTTTSSRRQQPPPOOPPPNQSW\\^^]^```_`d_ROW]ZROMIJJJKLMMOOOOQQSWXZ[ZZWQMQTQKKMMMMMLMOLGFJKLRTUUTTTRRRRSRSSSSSSRRQONNNNPPUXWWWXXXYZ[\\\\\\]]XOMQUWVVVTPMKKLMMLKJKIM~>KIGGKNNKJMPRVXTLCADJEB=@JKIAHDGFHJMMLIDBDCDCCCIQSL?_rVQTRMJJJJJKHDBB?=<?K>BDFGS^^ZUME@BEEFEFLK@AKJJEAABBBA@A@?>>=<==>?@CHJLLLMJJLMONC>@BBA@@??>>ACDCDEEEA==@PH3524579999;<=>>>>=>?===:87876778:;::;BGHHGGHHH@:87899?<;?CEDLNPUL:369@E=688777899:;<:755454<rY;899:;9:;==<AGIFC@<::;;;;;=@::=MPF=<>>>=<<=?BDFEC?<:88988987779:862/032028>?;:<===>>>>?=86557>IKFGEIFIIFGDBCCCBA?>BOWSOOOONB:<>????@@A?><?CGGFB@DILNNMKB=<@FKKIGEDDEEFIKKJKKMPQOG@A@@BBBB@?=<;;;:;=<:<>>>>>>>=>A:1.0/7IRI=<:>ED>AGKKNQOIEDB@@?>=<<=>???>>?BHLNNNHPadbV5*--172116331+,/<G>9A@31.-+/8<75:;:987>>>?JUSLOSQPNB41000013330267=AA<0+18;??633248?@94210.,++,-+)+047;@@>83/-+./+)).413;BEDE@50-3=?<5/,,1<=6/2;914HZXMJHFCDBGQI7.)*)())*+--,./0/-,('((('&(.420.**)())+--..4BB3+.022342,*,,'(4=4+)')+*)))*+(+,-.-,-.(.B?8216<@B<0.2.+021/+(+021/0/.+*))*)$!&++.000100,'-=?5-03.+,,,-,-,+*++*()+/47;?A=;98887312330.--+)&'+1;BHJC9898878::987:@DJHAD>PYT:1=EFJMG@<<>C:*.@E9.3CGBIRK?;0*;PG.,50&3C>0'+2?NSNF=43/*+02.-+'%)13,'-8>;.)285/.145>B4*2=>:<>7+(2:AGB59FH??C@@>5362--/00017;=:411.-01332574-+-*)+ZYWUTUUTUUTSSTRQSTSSVXYYYZ[ZXVWVUSRTUTTUVTRRRQQQRRRRSTUVVUSTTTSSSSSRQPPPPQQRSRSTUXZ\\__][WTTTSQRSRPPOMKKKKKKNNLLLNQQPPPOMNMLMMMMMNNMMMLLLKLMMNNNNOOOQQQQRSRRUY\\ZYYVSQOOSTTTVYYXY[[\\^^_`bcddcdffffcZRS[bcceccgie`\\YRPQTZ`a^[[[ZWYZYXYZVRTU[egb]_nz}~uneeeaao}~vkkohcfjnqwqgnrsynl~qaX[bfgeeiiebfmnicceeffggeeehiip|wsuyxkry}{qnupmkjiwugrxhkjv~edeg{``zdhbrcadqt}zyxwz~|zyyyy{|}~~{y|wigdippqsxyih`zTVoqmnlic]YXZY\\Ybuugab\\[lmclxrbecfwlefhrrqSa[[[[\\\\\\[\\\\[XWWYZYYXXYY[`fe[VSS]fjklnjbYWWWVWYZ[\\]^aca`_^][[[[ZYYXVYXPRTTS[^]]]ZXVTTUTSSSRRQSXXVUX^ZTSRTWWVUUVTQQTXXVUUUVY\\]ZXXY[YVVVWY]______abcccb`^[Ypźכ[MKbla`a`][YWWWXXXYXWWWWVVVUUTSRQPPPPPOOPONQSX\\^^]]_`____[WX[[YXUPLJJJLKLMNPOOOORWXYYYYWNLSSPNNNNMMNNMOLIIKKJMQTUTTTRQQRSSTTSSSSSRQPONOOPOPTWXXXXYZZZ\\\\\\\\]UQSVYYYWWTQMIKKMNNLJLJLnBNLLKMOOOPRTUTTRMGBBF@]k_\\VL<E?>HJMKKLMDBDDEDDDJNGEIMmwZRVRMIIJJJLHFHFD@??J@CCABO_a\\WNE?BEDDEHLIA@NIHEBCCCCABA@?>><==?@DGKMMNNMMLMQSOC8<DDCA@@@@@?@BCEEEDC@>>?HP434:7799::;<=?@@>=>>>?>98987778:;;=<<?@A@>>>??>856777BKIFFF?BJTUB5667@B:8887788988::975699:8>?;8:9:;::;<;>FJJCAA?;:;:9988:;9=JME?<>>==<<=>@CFEC>878::9888778=@9651-24319;==<>>>>?????=:9425@KIIJKJKJLNG?AAABBAA@BLVWSSQSUF:;>@???@@?>>>?BFHGDACIMPSQJ>868<ABCEFEDDEEFGHIIJLOQOG@@@@BCBA@=;;;;::<<;<=<<<=<=?;7BA;652<MTJ=;;?EGEEECFILNKDBCA@?>>ABBAAA?@>@@=>BIQTWUO[J++38432121///-/05;A?<A82-.-187569:964345;IOOKIHLKHGD;53112582//378>CA=92148::76436:>EB30...-,.46/((++19==:80)&',-*()277=EILF>62/+04551-**+-.,+1<<66@U`YSQNKF>BXT2))*(()**))***-/110+(())))(*021322.('*-11/-/;<-(./26412.*)+((6</()*//+)'(.+*,++,,--/-0?>83../01.)+341.+++*)))*2511/-(''((&%%)-12334100/5=<5242/1.,,,,+++,,-+,26889;?A?:75788642441.,-+)')-29AIIB759::989:::9:AEI@2519JL99CB@KLD;9:94*)<I>12=GA=FOC50,)3GJ9491(1BB/(AZc]ICEC@DJH7.//+('&'+/-)(*,-,)185,*483<?2/<DAADGF>.'&-=H;.0:CHE@CH@510.,-/015:;=;/).-+.01337?D=2./,)[YWVVWUUWVUUUUTRSUSTWYYYWUUTQPSUSRRSSSSTUTRRQRSRRRRRRTSSTSSTTSSSSRRQPOPPOOPPQSTTUZ_^^]ZXVUVVRQTURPQOMLLLKJJLOMLLMMNPRSQNMMKLMLMMNMMMMMLLLLMMNNNOOPPQQPQRSSSUWWWWWUSQPPPQQQRUWWWXXZ][Z[^aba```_`cc\\TXadccba`cecabd`\\VQQX^`_][[ZZYXWW]`[XVUW[^__acglifacecahx{wxummridjhbdkj`_ddfek|m^[\\`cdedeifcjmiedcefefggijggksyzz{cbhytmqsvwm{yqcjygeilpz{flehnxtX\\`bconzkaeditvm{}|zxy}~|{zyz{|~}~tl_[glmssvoffvqvtnjppplb\\XWXXZY]dgebbWfge{qz~m^fesrxzdY^[[[[[[\\[\\\\\\[YXZ[]\\[YYZ[bf_XVVY`fhgipuhXVWWWWZ\\\\]]]^^^]]]]]]][ZYYYVX[VSPQY```a_]\\WTUVUTTSSSQSVVVUX\\[XURSVVVWVTSSVWWWUSSTUWWWVVXXZ[ZWUX[^____```_abbb`[ZrًRaĭs\\`a_]ZWWXXYYYXXXWWWVVVVTQPPPPPQPOOONOQTX\\^^]]__^]]\\\\\\]][YXVRNMLMMKJLNPQOOORWXWWWWTNNSSOOONMNOOOMMMMLLJHINSUUTTSRQRRSTUUTTTTRQQPPPQPOMRZZZZYZZ[[\\\\]][SRXYXXXWWTPONLKMOPMKMIDYFPOOQRRRSXWWUTRRPOKA?V}us\\BFNQQRNNOFCDDCCEGGGGIMIZtbVWQLHIJKJLHHKHHDBAIB?A@@L_b^XMCABDFFGIKGC@RJEEBCCCCBBA???>==>AEJLLMNNNPOQUUPE;7=EDCBABBBB?>@BGFDBA?>>>>P@34;89889::<<=>>===?>?><::99778:;;=<<:87687669==;989=CRXODDF@CKK?8869A?98889887787899757;;;=;::899:8::;:=BHHFBAA@>=<;996438<?DHA><<<<==<=?ADEDB<669::9888777<>8684,8SX>8;<==>>>???@BA=89:64>KJHJLOMJORG;>?ABBBBBDJTXUTTUTI:<=?=>??>==?CCBDGHE@BINSVRI@?>;669=BDDCEFGGGGHIJKMPMGA?@BCBAA?<;;;;:;<<;==<<;;<=>=:@CBA??AHKA:=@DGGEDCA@@CKQIAABA@@@BCCBA@AA@@@==<=?CLYa_K1*5=631/11-./.34339;=E82..28;87861-,.../3;:7676<B@@CC?72/06=8107845>C>==>;=?=;976779@=5421/-,1792*+,,1698997/))./*(*4;>DGIJD8321.-+*/00000153.2<=;<<EU[UMB;878BE0'(,**,.-+(((()*.483+)))*+*(,137:71+((,22.-,58,(,,-11-02/)),076-*--00-*'(/1.,,.21+-123751.)'&%%&&+4530.----..,17421/-,+++,-,-/367742125;=93/-.//-++++*+-,+**,4<><<==<:85678753350++-.*('(+.6?GG@658887655788:=@C8(+(+8768@?=EG>2++,*()032/3::51353,+)&+;F?<;/(*../GpgIADDGOYR9/64)&)(&(,-+)((((+054..244;>59JNFEJIJOI1!!)8B5%)>PRF<CMB-*.*+./4:<:71+,*\"&-236<98==50760\\ZWWWWUVYXVWVVUSSSSSUXXURPPOLLNQRQQQQQRSSQQQQRTSSRRRQRQPRSSSTTSSRQQQPOOOONOOOQQSTVZYVRNNRVWVSQSSQQQOMLLKJJJKMMLLLKLNPPPONLKLMMMNNMMMMKJKKJKMMMNOOPPQQQQRRSSTSSTUVXWQPRQPOOOQTVUUUVWTQRVXZZXXYYZ\\]\\\\]__ab``cccc`afigd_VQTXZ__^\\[ZZXV]cc`]XSSUX[^^`bcedcdca_biruwvokqninjbcebadedd`nzk`\\_babdcbbcgkieddcceecdggffgiltz~~v_iy|wnoy|todesodchkmnrefkifjpx{{rqsyc_cecbudfmagdcrwx}zo~zzvz~}}{z}}{wvy|}{nqsm`dmkloolrvhgr{gcxtke_][YXY[UVlpc^_l|ctxuadcd`Yu݇T`\\Z[[[[[\\[[[[ZZ\\\\[[[ZYZZZ][X\\\\Z[_beiimsjYVWVWX[\\\\]]]]\\]\\\\\\\\]]][ZYYYWY\\\\TRS\\`bba^^_\\ZYWTTTTSRSSSTUVWX[ZWTTUUWYWUXZZYXUSQRTTUVUUVXY[]\\WVY]_____``__`a`_^]sͬۅVŕ_`a`_\\ZYYYXYYXXXXXWWVVVX\\YTQQQRQOOPOORTW\\^^^]```___^\\^]\\YVUVVSONMKJLOPQQOPRUWVVTTQNQVRNMNNNNOPOJKMOOLIGHKQTUVUTSSSSTTUVVVUVUTSSRQQQPQUZZZZ[ZYZ[\\\\]^YOPVXXYYWVSQTRNKMNONKLM>JMQPTVUSUWYVSRRRRRRNBM}xMWXVWYQPQFEEDDDEHDBGJLLQhi^YQKIKLMLKHKKLLGACKK<==@H_c^ZNDCDFGIJKGEDCQJBCCCCCCBB@@??>=>@CINNLMNNORSXWMC;8:?DBBBABAA@>>CGHHDB?=<<:38L:69:99::::;:;<<<==>@>?>:::9878<==<;<964465437:?@=<=>>AID:8FFCBBA856;A?:9:::88777877877:<==<?=;:;9878:==@EFCCCA?>=<;;;;:748>A@@>=<;:;===>?ADED@9779988887778877994,ApkA7<=>>>??@??ACB>=>=;8:GLHJMQNF??@??@ABBCDEEHSXVVWWXN:=<===>??=8?FGCADGE@AIQUSLGDEHFA<;>@<<AABEIJKIIGIKNMGA?@ABBAA?>=====?><;<=>=<;<>>>>=>@BCCCDA<:ACCDBBBAAA@@ITQF;<?@??@AA@@AAA@@>>>>??=<LbfbR;:A@:3342.0117650/3@C1,/039=:8551+(*+-./02114;BGGDDFC:311<D<2022.0>D>;BGFGE@??:7415;777730++3994+)+-24545564/.1/)&)4>FHAA@<841+,.)(18:;<AGIGDB?>AA=9@KH7.++/6885)'***,0.+)('&&&&*6<4*()*+*(*-17>;30.)(14./.03,)*(()*)*00(&.784,,022/..)(,10,.24.(-56660,+(*,++,,-4323222101443673236743123210378742003874.))),-,,+*)+,-,+))*-/027==7356889:;9870,./.*('(+.6=CA9346777679;=====;3/2*'++*,19;697.((%03)%)*+-./,('&&'+,/5;B=:80-551Fkq[MGDEOQE4*38-&(*)(()++**))()/30/0123799DTXLDILHPZI0+&!8OB)*@STB8BC0'*(*.049984*,A@.-4?JQSB22698:@D][XWWVTUYYXXXYXUTSRSSUVRNONLMMMNPRRQQQPQQPOPQRTTTRRRPOPPQSSSSRRQQQQQQPQQPONNNNMOPOPPNMJINSTRPRRPPQQOMLLLLKJJKMLMLKLMMMMMMLJJMNNNNNNNLJJJIJJKMMMNOOOQQQRRSSSRRSSTTVYTPQPOMMNOQUTTTTTPMNQSSSSTTTVWXZ]]Z[^`_addddcbehikkg_ZVW^a`^]]\\Z]gf^^^\\YWTSUVWZ__aelojfdcgjmmomgmsonljikhfiiijdpiwpi`_baabbbbciidcdeebadedeeeeghgjwzzwtzvemttrno}s`cfb`eijjkjjkhgfjxzsmoofagrt|olbcc`^dxugfhbejdfbewzomorlklmsy|||}{{~vs{fdlfahllmonmlmkp{~tg[g{u`VWXXWWYW[s}j\\Tw֝fzvZ]fvƮ|f^]WSOWy|dY`[[[[[[ZZZZ[[[\\^]\\\\\\[[[Z\\ZYZ^_\\\\^_cgjlqpaYWVWY[\\\\\\]]]\\\\\\\\\\[[\\]][\\[[[ZZ[XQU^`aca`^_``^ZVUUTSRUUSSVVWXZZYWTVWXYXX[][ZXTQRSTUTVVVWWXZ\\ZWWZ]_`_``__`aa`][Ugšݑa^~daaa`^[ZYYXYYXWXXXXWVXWXmh]VTTSQQQQPOQRV[]^_^`ccba_^\\]]\\ZXXZcaVNMLKLOPQQPQRTTTUSOMPYZRMMOOLMRUPIJKMLLJIILNPTXXUSSSSTTVWWWWWWUTTSSRQRTWWVXZZZ[Z[]]]^WLJQUVWXXVQRWUOLMNOONMMJPRTSSPW\\WSMMLNORSSSOH[qHOWWYYURQQEEEFFGCAEIKLNN\\li_QKILNMLIHKLMMIEEMO=;;@C_c^[OHDEFGKNLEEDEPJ@BCCDDCBBA@??>>>AGMNMNOOPQSXWM@:999=BBABA@@@<<?EGGEDB><<:6.)JC:::9:::::;;;;;::77:;<=;<:888:>??=<<;977556667<@A?>==;<>:5EQLGEA846;@?==<;:89987876679>>>=;<;;:;:878:=@CEDBCEA?>=<;;<<;978<>><;;<;;<==>@@BFGC;7777777767767765:><5Dq^<7;>>>@@@@AA@AB@AA?@C>:CGJLPLA88<BBBAABBDFFGO[[XZ\\`W>;;>>>>>?=9=ACDBDEE@AIRUOGFEGGGHFBAA=;?AB=CKNKIHHJLMHB??ABBBA@>>>>>@B><::<==<;<?@@>==>??ACDAABCCAABBBAAA?DJGLM>5:==>??@?@AAB@?>=<=?@A::K_h]HA@@<76431255:95.+0;>.*1257;<:6640+*+-.02555:IQRRLB;8964?LM@/+/0/4@C?>BEFC?=>CC>9578567641,+4;:5,()*.23310/00021+))2>F@8736<<6/+*-4:?CHLPSPPNE=;>@=79<<9755224:9,&'(,/.,*)*(&''$%0><.')*,*(*+,1772//+(-45750.+))(&%&(').+)/782,-3651/,))+-.--//)&-7752/--,1313444424665431169656407;888744542023222443200,)'&),,+**+,,.,+**))&\"&2?>428==<<BC>:752340+'&(,169<:5135688:>@@@@@@91/4910882/-8:16610/,>;))())**++)((''+5>DCB=77:?FIOfwsgWMKGDELG2&.7-#%('((()++-01241175//////07FSYQCFRNIUUJ@>-*PeM3;QQF=:91(%(,./24248/+>LOLFM_g^H712:C>=C^\\XWWVTVYYYYYZ[XVUSRSSSSPONNONMOPRSRQQQQQQPQSTSTTRSSPPQPQRRRRQQQQPPQRTTTSQONMMMMLJJJKLLKMNNLMPQONPQPNMLLKJJIIKKKKLLLKKLLLKIKNNNNNMNMLJIIHIJKLMMNNOOQPPQRRSSRSSRRSTXYQNONMNNMNRSTTTUROPRRQQRTSQRTVX\\__^^^[^cdccdeeeggillhc__ab`^^^]akeXUWY[ZXUUTRTWYX[hsokjklic_bkkippkjkjkkgdfhliqzm\\dvng_`aaa`adhgcbedbfidbfffeeeegeh{zyunwohkkjko}kadcddfhiijjkiff`l|khkkheltqq~zagwhcaa_^X[acgihaf{ddd`n}tppqmqkmnqwzz{}~}~~~swvja_dglpqpqsvyz}{s|j`qskbZWTRSYWXxeVUrڒhvuae`bjvo\\YVVSQtnضTY[ZZ[[[[[[[[\\\\\\\\\\]^\\ZZ\\]\\\\]_``_\\ftlWXdhquh]XWXZ\\]\\\\\\]\\\\\\\\]][Z[]]^]\\\\ZYWWYTV_a_aa`]]_`a_YWUTSRUWUVXXWYYYYWUVWWXYXZ[[YUSRSSSUVUVVVVVXZZWWY]a````__`ba]YTSvۿa[Qoj`abb`^][ZZYYYXWXWXXWVXVZghdb[USRQQRPPQRTY\\^_^^_]\\\\[Z[]\\\\[Y[bf`\\SMKKLNQRRRQRSUXVQLMWa]RMMOORZXSNKJJNPMKKMONOSUUSSSSTTVUWWWXWXXXXZZWVUUWVVXZ[[[Z[]]^^VKIMPRSTTSPRUTQOMNOQQPPOPRWTTTUR^`PGCGKMNQSSSQJZ{lHIOTVYWTVaAEGFFFFDHJKMOPQenbPJILONKGHKLMMGEEHK>;@CCZ`_[OHDEEGMQIDCDENGA@BCDDDCAA@@?@>>CKONMNPQRSXWK?:9988<@BAA?@@>::>EEEDDB><;9512?D<:;::::::;;;:99875468:=<:988:>AA><<=<;;877889:>@?>=AA?B>7CWQJJA947=@?>>=;98998887657:>?>=<;:9:;:888<>AFEDBCGB=>=;;;;;;:99;=>=9;<<===>@AACFE>8677677778889:;;9:A;3KkO><<=>@AA@@@BBA@A@@?@JL<:FJMOJ@=ABCDDCABBCEFDHWZSYZa^C9;>??@=<<=<=AB@CDECBJRRKGFEFEEHGFCB@;?OO;=GLLNNIJKLIB@@BBBBA@>>>=?BC@=:;;<;88<AB@?==<=<@DDCCFCBABCCBB@:6BG68IF88::=?@@@@?ABAA?====C?<>=HacMA<87644347:9863.*-7A1/3345666695431321258879ESYUI>407:9JYN8)+<?8>DEEDBB@8788BHA=<:7543221-,4;:7.(*.3442/,**+,.43102<@:83+/9A?8308BC>?LVVQMD:34:<=<:<=?>>>=;64;;1*++/0,*++*(),.)%+;?3((,,+(())*+++)**((2=@:431/,)&'*,'%+0//5:5-.320/.,+*++,++++('1=:.+((*,13369:9845887651179645668:544421121,((*.37520/..,('(*+)),--,++,-+()(#&7C?89@B@<<AA<8642220-,./02356542355788;;95444/+,.04@LF=;;>AA>1*-3/=;,)&&')(*++,-.,+388:>;9?JLFEQgrjTLLJHHD=621/23222.**)*-/1589>?<BB421/-**/;JUTHEMMEGMMIPL6Dglcfq_C79@>-'**,0552262,-;Zj^TVYRC70-3FH71\\[YWWVVY[ZYZZ[]\\XUUSSSRSRONONMNNOQQRPPQQQPPQSTTUTRRRPQPPPPPPPQQQPPQRSUVUTSPNNNOMKKJIKKLLMLKKKLNMLMOPNLKKJJJJIIIJJKKJKKLMLLMOONNNMMMKIHGGHHHJKLMMNNOQQPPRRRRRSSRRSTWYUQPOPPQOMOQSTUVUVSQRRSSSRQPQUY]aba_YTX^bbbdeeddefhhjjgdddb`____ab\\URY\\[YYZZYVSTVV\\`djjhjhc^]hnjkqoklmlfbaadihlqdc]Zqznib^`ba\\]hmd\\`feacopb_egfdccdaix}qpxofhhkmuxxpdffedegiiijjkhfgcrsfgiklnptyy}b[c_`ba`^Z\\ehihikbc~gdcb^tzrppnmjpokmrvvwxz|~~tn|rnlimoonoqvzyzzwpgroivzg`vdY\\Ls]ykpjqhVSSQ\\|d[^\\TSp~ٞWWZZZZ[[[[[\\\\]\\][[]][\\]\\WZckleba^btuh]\\jnaZYY[\\\\]\\\\\\[\\\\\\\\]]\\\\[^][]\\ZWVUTTUUWZ[]`a^\\^_ba\\XTSSSVZYVXYXWXWWVUWWWXYZZZVWXWUTSTUUVVVVVUVYZWWZ`aa``___`a_[WSeں_^fcsuifcba_^^]\\[[ZXXXXXXXVWXgfdih^WUTRQQPPPQRUY_`^\\ZXWVWXYZ[\\^^add^XTNLJKOQRRRRQSW[VPMR_cZRNOPOZaZKGJIKQROJKQPNOQQPRVWWWVVTTUUVUWWWVV[^[WWXXYZ[[[\\[\\]]]^WNKLMMOPONORUTRQNMOQRQQPOOSRPRZ`WMKFFIKLMOQQSQQepIJNRVYWTYb@DGFFFGHIJKKNOKVkiQJINQNKGGIKMNHEFIO@=BCBN`_[PFDEFHPSHBDDFMDAA@BDDDCAA@@??=AKPOMMNQSUVUI>99:99;=?ABA?>=:98<BDCDDB>;:778:=<<:;;;;;;:::::88:99668;=<;::79>AA>;<=>>=<:8789:;>?>>@@AB<7CSIGGB;79=>====;:9998887658:?>=<<=<:8997::<@CEBBACHD===;:;;;;:;<<===;<===>??ABAAC@<977876778889=>=>?>;-3W`KFB?<?AA@@@?AAA?????>COK?DJMNKB>DFFEDDCBBCDDDDLSSWY\\`H7==<>A><<=>=@@>AADFFKPLFFEEEEFFEEDC@;GWK7<CFKRSKIJKHBBCCCDBA?@@>=>?A@=<=<<813;CDB@?=<:;AFFDCCA@??????<62;@30<B=:98;?BA@@?@AAAA>BP<>?=@::Ri_D85653446;@<3.-0408E525422005889;989743577616K\\T@55458<P]M8&+EKCIJEB>89<8654;@52;96421012/-4;;;4)+5:741.)'()(-86126>;AD1(+3;>;;@EHB8;GJKG9,.7<87;;;<>@?=;8679:84111/,***+*')02.&%4>5(',,+)((((').-)('%0@B87>>6/,''-/+&*22/3;8/01-,-,++*+,+()./((6>70.-++++,03887835;:765312336;:88:95220.*)('&%%*/1/////-+))((+()+,-,++,-,**)'/<>=?BEGF=;>>9301220018=<52222220023447<=92.++,+,($.?E>8788DIA/#,5571**)*)(()*+,./.,,+,05<AIQOIEERZNEKJA>=8/-8A>:=CE@6*'(**-./006@RUIA<7431,'0EPKHI?8:98:=DH?=NV^bihK68?=4.)(/8:7531./.7UoqeWKC8/.,.<F7,ZZZXVWYZ[[Z[\\\\]_\\VUURRSSRPPPNMMNNOPQPPQQQQPQSTTSSRQQPOOOOOPPPPPPOOPQRSUVUSQPOONNMMLLLKKKKLMNMKLLLLNOOLKLKJJKLJJLMKKLLKMNNNOOOONNNMMKIIIGHIHHJJKLMMOPQQQRQRRRSSSSSTUWXWSOQRRPMNPQRTUUWTOOQSRQQQOOTWY\\^^]WQPV]aadeedceggffghjigfgebb`_bc_Y[_`_]\\[YWVVXYXWX`b^]^ba\\^jrpr|zpppgcc`ajkgrula^ab_dqpgcb__bb\\Zipd\\_cecajxl\\bigfcab^l~~}mi|loldnmmj|nffdegecehiiiijkhflt~kfhhhpulo}{`_ccaccbaadhiggikjgllfegfa`ozsqtollnkip|xvuwxy|~p}{~wojhijjjlorrttsutfqgcoÞolhZZX[fWQ|dcli[RRRQLQ^zl^_YTO\\y۟XX\\[[Z[[\\[[[\\]^]Z\\^\\]^YV^inonga`_[Zpfcb[Z^a^\\\\\\\\[[\\]\\\\\\]]]]]_ZW[[WUTTUUUUTSVX]ec^^_``_XSRSSW]ZVXXWWXXVUUWYYXY\\]\\WZbaZXVUUUVVVVVWXYZYX\\bcb``aaab`\\XUeְa[cfxpbba``a`_^\\ZXYYYYVXVW^nkime^[XVTSQPOPPPRS[`^[YXWVVVWXYZ]^afh^UTURONOPQRRQQSTSQQQT_aYROPQPSTOEDEHKQQKELQQSRSTVX[ZWVUUTSTTUTNLRSPMUVTVXXYZZ[[[[[]]]\\XROMMMMMMMNQVWUTQLMPRQPPQSRQWYXSFEJHHIJKMOQRTUd}IHOTVYWUWaGAEEFFGIJJIJJKJMfqTKJNQNJFFHKMNIEFJSF>B?>DZ_e[NHEFJRSF@HFJIBA@@ADDCBA@???>BMVWQNNPQTTQF:9:9:::<=?ACC@<:8788:@CDDB?<;9::;;9::;;;;;;::9::9::9:97:=>>=;;69=A@==<=>>>><:888::<=>>@@AB<;EJ@BB?<::;>>====<;999876678;?>=<==<:7567<<>BEB>ABDHE>==;:;;;;;;<=====>>??@AABBA?=<;98888877999<>>>>?=76Jh]bO;@>ABA@@AA@@@@@@?@@>FPKFKOOKC?BDDEDDCCDDCCEDEPXZ[[_N8@BA>@?><==<>?AA@CFHMMHEFFFGGFFEEDEEADH68>ADGNVTKGFGCCDDDDCA@A?=<><:;<>=<;625=FGDB?>=;>CFFDCB@??@A>;::868:768;;988:=><=????@A@>PmV:9><<78OiM45656878>A9-+-4;6;F97;:8633:;5676442001320--?TK4-49406MSMC,,FNIIB;7312;@95586--6765444562.39;<8/-7?>5/+()((&/94115=8;<0')2346=IMH<04A?61+'0;;9;==<==>=;95.08635892+,,-,+)'+364.&-:6*'+-+'(+*'*166.)(,6=706@>6/-*',.-))031055112210,+)+-1+%)..'+:5-49972.++-/1100.2;<:6431...28723::74432.*))(().0/-...//-*(''*(()+,,--.///,),5724AKJIHC99:4..013469;>=<;:9960,*+-/27>@;520.-.+'&-218886489A:,6:;1&()24-*'*)*+-.-,)).37AJNQPSWJ<;8>HA628:517CFDBDID5+1>GF?<4,4>IekVQTH23:3'+?I?AK?15322445677CM>7>701596-*0;?;8765301;J_svqdJ1)*(+6:0-XYYWWYZZZ[[[^][_a\\VSQQQRRQQQPNOPNOPPPQQQQQQQQTSQQRSRPPPPPPPPPOOPPPPQQRSUTQQTRPPOOMMNMLKKKLNONMLLLLMNNLKKJIIKMKLNNMMNMMOOOONNNONNMMNMKJIIIJKIHHIKLMOPPPRRPQQQRRRSSSTVXWTQRTTRONOPQSUVUQNMMOQQQQOOSTTUVVWWSQUY\\]acbacefhhgfehklikmjhhfdcd`\\^aa_]\\]^\\[]\\ZZZZ[YUUY[VXlsr|spqjhheekrmjrsfchd__bc`ac_]``_`b][hlb`abdecanxjbjmkea`]nv|}rcmmht|foqoesgbedeeeeeiiiiijkifr|lhhhhoqectk^acbbbccddfosmiggikllhfgfcbdjnpsokknpvwvxxw{ijuwtlijjgggijilmmmmlk`YZ\\ʘjij^][ZklTac}r[_ZQSSUVYccblh\\XXWQRl߹SY][[[[[\\]]^]]][^`]\\[UYk{xlfedca_^WZln\\\\[\\bd_\\\\\\\\[\\\\]\\\\\\]]\\\\^]YXYZVUTUWVVVTSSUYckc\\_`_^[XWVTV[[XVWWWXYYXVVXYYZ[\\_`ahjb]ZWVVUVVWVXYYYZZ\\`cb``aabc`ZV`ǥڑ\\Z][Zc{i_b````^]\\\\[YYYYYWXVX`bflka]]ZXVUSQPOOOPQY`^\\ZZXXXVVVWXWWWZkt[T]]UPOOPPPPQSSOORQNX^XRPONNKIGFDEIFORPPRTWYYYWYZZWTSTUUTTTUSIGQUTNPTTVVWXYZ[ZYZ\\]]]\\XUSPONMMMMNRVXWUUQNOPOOOQSSV^ZKBEIGFGHIJLNOQS\\IHOTXZXUU`VEAEFHHJLLJIIJJK\\jTLNMMLJEEHIKMHDGLSJ@A;:?VgvpiSCGKTPD@EKNFB@@@@ACBA@>>?@HRZ\\[WTVVUTMB;:;::::;;;?DF@><866657=CEDB@=;;;;;;::;;;;;::::9999::;<;:=>??@><8:?@@====>>>>=<;968<;;>?@ABB>@CC>?<99;<>?@??===;::9877779:=>===><:7249=?@BD>;>BCFC>==;<;;:;;<<====?ABBBCCCCA@=;:987888877:;;>?>===;:@F]ssD>B@ACBAABBB@@AAAA@@?BJMKLOPLC@BCCCDDEFEDDDFFFNX\\^]aU;@HG>>>=;;;<==>?@ACINJEFFFFGGFFEEEDEFEA9??ADFGQYSHBEDCEDDDCABA=<=><89;<<;988>AFHDBA@?>@CDBBCBAA>>;899:999879:;;:9:<<99<>>??>@<Dh{y]C;;;8:9YU5455798:A=3.26:<5:D;;?A?:53331/.-,+,-,-..-/08E=--671,1@@>A;:HMB:101--,3>=8;@=5302797668:6117;:712<D?2,'(+**)-222..0+)-,'*./03?KNF4'.AB7+$(06:CF@><<<<<;:82/2448=:.&+240+('.6:96/+46-),.-')2/&*7=7/**2<7,-3742/--,+--,*043/.1102440++),14+&*-*)16,).5=?:1-/..+))((.8<;6211/--..../37666678873+(.421/+*.463,'&'((((*-./0///-+.43.)+;JHHE@5330.-.03355359BHBBIC<0+'*2589513652/---36-)6@?DKH5285775.*)&9<02)**)+,-0.),217DLNPNSaZ@9ADD>700789<@CB??C83AT\\`][ZO95?IW`\\X\\S5.9:-.=D@?ABC>21360,,,*.1)$#%('(12*.9@?;99::403>AQlqz~e=('%#6;&#XXWVYZZZ[[[[]ZVZ`^VQQPPQQPPQQQQQPQRRQPQQQQQQRRQQRQQQRRQQQQQPONNOPPQQQQRSROPUTRRRQOMMMMKLMLLMNNMLLLMMLKJJJJIKKLNOMNONNOOOONMMONMMLLLKIJIIIJJJIHIKLLMOPOPQRRQQQQQSTTTTTTTSRTWUQPQSSTVYWSROLLOQQPOPRSRRRSSTTUXXVV\\a_^bdddddfdcjlihmppnnlhfea`cda__cf\\]kleb`^]]\\ZXWW\\cfsxxsogkolflwvngb^fmf^\\^``^aeda`_`a^_ge_dgeebb`euvgiokeca]oqkywzidlspr}cnndiqaekgeffffiiiiijkjeslggfhlkg_fd`abbbbbbccdkslfgffghhhgggdb`cmpnjhjmz}~y~c`hmnmkjiggggefikp|zpj_\\^Unɑhe`c_[]fr\\dcr|XTXWWSQR\\fffojYXXY[[^bW`\\[[[\\]]^^_fgiqgZ[Y`v{jfecbcca`][]cf`\\\\\\[]^_][\\\\\\\\\\\\][[[ZZZ[[YYYYSRSUUVWVVUVWV[hkea[[^^_^ZVVWXWVVVVXZ\\[XVWXXYZ[]`bfigbaa\\YVVWWWWXYYYZ[\\^`````ab_Y\\{غՃY[\\ZSH]lb`a_``beb]ZZXZZZZYVal]_je_^_\\ZXVTSQPOOPT]c`]\\\\[ZZYXVWWWXWS_zrVVYVROONNNORTRNLSQLV[URONLKKIHHGFIKU\\a\\WTTRSQQQTXXXWVUTTTTTSQPQPTXZZYWVWXYYZYYZ\\\\\\\\\\XVVSPONMOOPRUWVUVVSPNNOOQTV]UJFEGIHGFGHHJMPPQlKHOPTWUST[`QBEHIJMNKIJKIJLSUNJKJKHIGGGGJKGEHMQKAA;ANdox{nPAGKRLB@CEHEB@A@@@AB@?>>?HY__^_]`^ZWQB;:<<9::9<;9?HG86;866654<DECA?=;:;;<==<<<;<;;;;;;:9:::<<;>??>?B@=;=?<<<<<==@@>?@?<979;<=>@ACB@@???>938>@@?@@?>=;<;:9887779:<<<;=>:6638;?AAAA<9<?@FC<>=;;;;:;=>>??>>@ADEDDDDDC@><;:98887778:<=>><<=====:CbnOJACBDDCCBBB@@BBBAA@ACHJKMPPLEADEDDDEFFEDDEHHHLW]`feX=>HB<=<:99:;;;:<?@CILGCEFEFFFFFEEEDDHLIC>?@CFGHQWPEDEEEEDDBACA====<<:;:977=DJDEIHDAA@@CCAABBBAA?>:>FD?:99879;=@?<=>;8:<?>??>?>B[}nA8;::>;GN<853325:?9468::949B;=DB=951-//..-+*+,,,,-02145/+39312483/:JIC?5*(.1.+/37<@EFFB=7687889<@?4/6960/5AE:-)'&*-/,,.14/)%$')'%)./03?LL>-)4BD</'/8;>FID>=>==<<;:;749<;>7((0562.,+0698750/31-,--+-65()=E7+*)0>;000.-/0,+.//.--473.*/0-.00,***,.1+*,+)-20))+.799/.21-(())',795220..//.,,--02334459=>7,+-00/-*-34330*(''(('(-/10/.-*+46.'&'2?DFC91/00/--.00.).:AEA@GMOSIB626992*)2742322154/.24?LVV=/42/,2:5.+8@320//,*+,24,/754>EFFDIV_UE>=<997415>D<4369<1)6BAFPW_`L7487=IPYV8-6947??=81<KB13473-/,(&%'))*+)(.757>?<;:873..19DQcjtuK22+,@H40WWVWZ[[[]\\[[[XTUYZXURQQRQQQQRQQQQRRRRQQRQQQQRQQQRRPQRQQQQQQPPPMMOPPQQRSRQPQSSSSRRQNLNNLLNOLKMMLLLLNNLJJJJIJKKLNNMNNNNOOPONNNOONMLLKIGIIIJKKKJIIKLKLMOOONRRPPPOQRRSSTSTTSSTWVTTSSTUVYZWURMNOQPOOPQQQPPQQPQSVVST[^ZZ`bbba]]`_bijginpooppnmmkllie__cdn{ymf_\\\\\\^_[XX[YZeqfrtpmlqohr~uie`ajk_\\__``\\aoqe]^`ebegdafgfd__bafpnkkgcdb\\prekmzyuofgenssv~pkkebd`gplhhhhiiiiiijkkeowfdegkkfbag}rcbabbbbcbccdeggefedefffeeedb`dnplgfjsy}}y~b`dcfkkkjkkjiffhlotrke^_`YSqwc_``]\\_olbdivu]UZZYWUU[_Zarm\\VVX_f^tY_][[[Z_akwcY_g{~kcfeccbbdb^cga\\]^]]\\]]^]\\\\]^]^Z[ci]WWX[[YY\\\\UTVWVY[[Z\\\\[Z[_ilfX[]]__[VVWWVVVUVXZ\\\\ZWWXXYZ[\\[[_bbcjib[XWVWWXXYXWYYYZ^_``aaa\\XjӬm[^^_V[fpa_b``gwxqbZYXZ\\\\[YWgyf]d`]]^]ZYWUSQPOPQU]`_]\\\\[Z[YXWVVVWXVVYtiSUWSPOMMNPSVSLWbUJUYSQOMLLMKKMSZXSMOSZTPPKLDBGKSYYYXUUUUUTTSUUTVXYYXWWWWXXYXXY\\]]\\ZWVVSQPOORRSTVVUUVVTRQPPQSW[TKJLKIIHGGGGHJLPOQOHMNOPPQRT^[KGIIJKLJGKMIILOMJHFHIFGGFEGHGECDGIFBCHYcin|zTCBBJQI@@BCDCA@AA@@@@?>>=BS]\\^^_ae`WLC<;;<;9:::<;9>HC659765544;DDA?=<::;;<=>>=<;;;;;;;;;::;;<==>????A?>=??<999:;=?@>@ACEC:9:<=>@ACB@>=>?>96;?ABA@???>><;:9877778:<<<<<<8457;=@AA@?;;<=>EA;><;:;<<;=?@AA@@ABBABDDEEDA?><<;8888889;====;;;;<<<=<=KLEBDCCDDDCDCBAABBAAABDIIJMONJECFFFFEEEEEDDFHKIJX^^feT:FK;;:::899::::;>AEHIECDEEEFFFEEEEEFFHJD@@?AEGEFRVIDGGGEDBA@B>:===<<;;986:CJMGEKLEAABEFA?BBBAAAACHPSNA:999768;?AAA@=99=@?>?@@AGM`yU/:<988@ID?;630/27;845335549B9?E?;830/010.,*)*+,,-24310..0583366300>PM=4/**-167;<77?B@@A><9765:@=@@7.3:5/08B@2*'))-./,.000.+*(')*+041/1>KA509BBA92-3:::=;<=<<<<;;;;=:6:>=<4*,3341//-0672120-/1.-0/,,35-+=E4)*).=C>70)*0.,.0110.2874/,--),,())))+,...0.+.1/**+,-.-+.55.'*+)(,11-.232011332.../.--025661,+,/10/2:91021/)&&)+)),.1//.*(.5/'%%'.8@D<.000.,+,,./.0:@?:26DKR__YJ;3760+,1423663/.*+,+'8KRPC763+.2A72.0>5.5861))+2713?B8677768E[^J4///8?;0-:A6*,0473--**8LU]b`UPPJ>7>OK4-255:@<1.4>D;87987331,-477:339109?>=<<<62,+--.=VTSam~wI4=;CIEDHWWX[]]\\\\\\\\\\[[ZWVWWXWTRRRRRRTSQQQRRRRRSSSQQQQQRRQRRRRRRRQQQQQRSOMOPPQSSSSRRRRSSSRRRQONMMMMNNLKKLLLMOOLJIJIILMMLLMNNNNNNPQQOMOOOOOOMLHGIIIJLNLKJJJKKJJLNMLOOMNOOPPQRRTSTUTTUVVWXUSRRSTVVTQOOPQPOONNOOMLNNOPNMMQTWVQT\\bacfaWXZX_giggkomnprrttqqpojflwynd^YZ[[\\]]\\YYYYWWV\\{rv{qptqztfdaagg^\\_ab`^bnvn_\\`higheceeeb_^ba\\ftogbbd`[susnrqrqmhefktux~ysedggbcfjljkjjjiiiiijkkdewdadfiifedbfzyfbcbbabbcccddddeeedcdeedddeec`fnpjfdjvysw|{~~laaa`flnooqsrnjijklkh`\\^\\WeiYtpb\\]]^_\\]kx`^dqvh_a_]ZYYZVQ_mfYUW\\af^߽e\\_][[\\XZhX^gntrjgfedcdaaea_kmca_^]]]]]]]]]_`]_d^jx^UWX[[YY^a_`a`_^^_`b`^^[\\\\bjb^]ZZ\\[XVVWWVWVVXZ]]ZXXXXY[[[YZ\\^Zcsmf_ZXVWWWWWWWYZYY[^`abaaZYɟܓY\\a_b^ji^U]da`bmprma\\YUV[\\XYm}l`^\\\\]^^[ZXUSQPOPRW]]]]]\\[[\\ZYXVUVVVTRTY[YYWUQPMMNOQUQPipSHSXRNPOPPPOPRUWTTQHBUZXVLQXF?FMTZYWWWWWVUUUVYXYYXXXWWWWWWXWWX\\^]\\XVVVTRQOQTUVVVUUVVVUTSRQRSUWNKLLKJIHGGGGHIJNKPQHMMLLMNNOUZSKKJJJJJJLMJJKJIHHHHHFCFC?IFECBACFIIJYekludAAA@HMG@@AABAA@@A@@?>?>=>HX\\[\\]`b`YL?;:;;:99::9<;:>B=888765544;BD@><;:;;;<=@@=<<;;;<;<;;;;<<=>??@@A@@?=>@A<87889=>>>@ACEHEA==?@ABEE?<===>;@?>ABB@>>>>@=<:::988989:;;<<;968:;=?@@?>===<=C?;<==<<==<=?ACBBABCA=?CFFFFDA@><998889:;=>?==;::::;<<=<9;@CBCCCDEEDDBAAAABBAABGKMMMLIEDFFGGFEEEDDCFJNLLV\\\\`_J=TQ;<9899:9:;:;=@CEGGFEEEEFGFEEEDDDFFFFEB@>?BEGDIPLHIJIECBA?@>:<=<<<;979<BFINKCIJB?@DGB@DBBAAAAAEKOOMH?<;87679?CDDA?;7<A@??A??WqdR=4898;?CDA?>940002772...143:D<@@<;7200221.+)()*+.15421/-./464443224>NJ:20134:DE:96.4=:244447558=?@@7.18725;=5-*(*+----1443036-+432631/07>88=DA?;6347884/*-359;;;;<;>=89?@;20441//-+*1840///---,/32-,2533<>3))),;D;3-*,13135886489763.+*()*(+.,**--/220/020,+,,**(&.85+'*,))*)),0256533685.,,*))),020+++++/214<C9..23.)%%*-+)*-0/-+((+-''(%&).772./11-+++,,..5=<8110:HOZ_]T=/43/./01148:5.**+*+,5CNMC;861536531/261573/)),.26>GH;54464-7QXC124,+.0,)085..15544307JZ^aalstvwfA1<;1,.03<AA:;A@;44476655559CHFE938416867:=<4,+/-/E^_PIS]nW+0<DD=@IZZ]`^]__\\\\^][[[[XXXVTSRRRRRTSRRRRRRSRSUTQQQQRSRRSRSTTTSRRRQRRSQOOPPQSTSSTSRRSTTSRRQOONNNMMNNLMNONOQPNLJIIJKLKLMMMNNNNNOOONKNONNOPOLHGIIHJMOMLLLJJJJIJLKKKLLLNOOOPQRSSTTTUUWWXXWTQPONOQPNNNOOOONMNNONMLMOPOJGINONLOX__^ehaXVUVZ^aaaflifiopokijji`_``ZXWXYYZ[[[ZYYYXXWW^iihlpquwuy|pfcbabca^_bccaalurd[ailifcdffdca]_fadtqfbbc`\\k{xwxsplhffhsv{urxfca`bcbchmonmkhghjjjjje_m{pa^abdefeedaadjgdbdbabccdcccedcdeecccdddddcdc`eoojfejvz|y|xlgbbadjmnmmqwtnkhijqph^X]Z_kb[frk`]Z]_^_ZYjnptwy|vkkjb\\UTXXY`^VZ`cfbd][__[[[\\X\\xkW`ddcbefeedddbbe``kiba_]]]]]]]^^]_``cj^qs`VYY[\\Y[`deehgca``bcb``\\ZXcke_\\XWW][XWWWVWXWWY\\ZYXWWWXY[\\[[\\\\Ybtplf`XVVWWWWVWY[\\]]_`aa`_X]álQZa`efb[YT^da`_Zcilib\\VV[\\W[uqc\\[[]^][YXVRPOOQRW\\\\Z[\\[[[\\ZYXVUUVTTRQVYRXWVRONONPRROUe_MLSVQNQRRRQRRRRPQRUMI\\^[\\MNt|QAIQ[ZWWWWVVVVVWYZYXXXWXXXWWWWWWX\\^^\\XVVVTRPPSUWVWWVUVUUUUTRQQRSPPOMKLJIHGGGFGHJMIOQHMKKJKLLLKQSNLJKKKJKNNLLIIIHGGGFEDGIINQRTW^iiXQQ[`fnxlJAB@@DHEA@A@@AA??@@???>?>@KWZZ[]`_SG>:::9::99::8;<:=>;987665434;AB@>;;;:;;<>@A>;;::;<<<<<;;<==>????A@?>=>??=97778;>>>@ABDGKGBAA@CDFF?;;;<==@?>?@@?>??>>>><<<<98987::::;:98<<<=???>>>>===?=;<==<>>?>=?ACCBBBC?;=ACEEDBA?=;9::8:<<>>>@@?=;<;;=>>>@CA@BCCCDDEEDCBAAAABBA?@CKNNLKGCEGGGFFDEDDDEHNPNJPY\\_Z@L^S=9::::::<<<=ACDEFFEDEEEFGFEDDDDEFFGFFDA>>@EHEDJOKIKKGBA@>=::==<:::9:<AFHIOPHCC@>AC?BG@B@@AAACEHKLMPKD?;9879@FECA><7:><:?A?Eif;86777<CB@A@?:5/./03640-/343:IF?<;961.12320-+)*+*,141.00--.3555555526FE7114>EEB9453+-990*/-276658DFA8./674695-+))*,-))-5:874691576471/..1.4;CC?<97799872*)+,289:;;;<?=88=?91141//.-*)/77211/---,/55.,0435891**,.2:4,-..144556:;9::7661)%&)-/-292.0124544340+*+*))'&/83*(--(),)),.069867787/+,.,*),/0.,+,+,.226;61,-22,(%%*.,+-/12/*))(('())(&'.0,/00/,))**,./597511--:JW[^V9,310/00104994+(*+,-.29FD;8520/.,--//285//,)(),--5>>7489697**=F;06@6)$$('(-6779:74666BV[bek~{yN0330--,5>BCHD?=5112001258>CHLJE:223223126981+,//>_eRF?GMRzu;#,1016=\\]`a_^aa```_][[[ZYWUUTRRRRSSSTTSRRSSSSSSSRSSSSUVVVUUUUUTTSRRRRPOPPPQSSRRSRRRSUUSRRQPPPPPONORSTTTTTSSQNLKKKJJJKKKLLLMNNNNNNMMNOPPOOMKIIIIJMMMLLLKKJJJIJJIJLLLMOOOPQRSRSTSTUWWVWXYUPNLMNMMMNNNMNMNOPQPPONNPROHEHKKLMSXYZ]bd`ZSRSPTZWU_d[X`fc`^[[_]\\^_ZYZ[XYYYYZYYYZYYWY[XV[[[gywnmlkhdfb^aa`a`bffeinqnddjmka\\iqkiif_`iklmjgeca`]brql}|snifegqx|dk{ibbbbcaaejoonkggikjighfca``_```aceddcbb__bebcbbbcddccdedcdddcccddddccdebeppihjmtz{~uolfddfjgbbdlppqsleemjg[[[[}UVW[c]crhXWYZV^r|zulhihgcUU[_`c_^egggad\\zxU`^[[YY[l{c\\X\\__`cghgeeeegdcb`dgfgc^]^^]]]^_]__^fhf\\guaW\\[[\\Z^bddcefb`_`abbba^[Z`fa^[WUTZ\\ZYXVUVVUWXXWWXXXXXXYZ^_``[`r{qkf\\XWWWWXWX\\_``___aa_]Vh׾`TY\\ddb_aoe`c`_^X^a`bb^^^^]Y]x}n_\\[[\\\\][ZXVSQOOQSW[\\XUY[[[_\\[WVTUUSSSTaRR]WTRQPUY[WPPSSPPQTVTSTTSTSRRRTTSQTRTd`XbWFeeLNNQUUVVVVVVTVY[ZZYYXXXXXXWWXWWXZ^_[VUUURPPPRVVWWWVVVVWVVUSRQSTRPNMMLJIIHGGFGGHIHM}SHMLKKKLLKGLSNNLJKLLMOPNLHHIHHGGGGINSY[aflu\\RTYZemgN?@B@@BDDA?@@??@??@???>??AAKUXW\\][SF;889998:::;9:;;:;<9777654335;@A?=;:99:;=?BA><;:;;<<<<<;;<==>??@?@?>>>=<==:8878<??=?ABCEFEEDC@EFFE?;:;=>><=?>>?@@ADD>>>>>>=989768:::::99>><=>?>>>=>===>>=>==>@A@??@ACCBBBB@=>?@CCB=><<;9;:8:<>@?>ACB@??==@@==??@?ACCBCDDDEDBBAA@AA@?=@FKMLGDCEGGGFEDDDDEGKQSNKMV[_Q@Y`P:9;<<;:::;;=AEEFFFEDEEEFFFEDEEFFFFGGFDB??>BHE?FOKJLKHB@>=>=?>>==<;=@BCDEGIMH>>?>AEBDJ=A@AAAAABAAACGKHC>;:65=GFA@;<DH?32?A;Jxd6?:.444;;:DG@<94.,05567524754;LL=;;851.1221131/.,,+./.*,0/-.3777888834>=5218GJ>0'-20)*6>7(07477745FLC8..47630-(())*,+')1:?93/,-.:;552-,--,(1=EA?<<;====<3.251499:;;;;A;559830-++./-..*+187431/.-+.482-.10143/))+,/77///-///0.,385576671*)+165/-6965:<867:82.+))+++-.04/&)21)*//00-.7<;::97532441.+-/0144/--./174)%*-/,*+)&)-/35541*),+(('()**)),.-./.+*)***-/256662.)!)9FS[L.+62/.00115980)()+.00237630-+)((('+07;@4'(+***++,/45117;512.',22//:<4/&%%&*5;?@91/342;MP^nu|ox_9764228BCAA?<86...0/0/16?GD?BFD=33321.,/13-+,/-3P\\QG<2;BAmU&$)&'-4cccb__cffec`_^\\[ZWUUUTSRRRRSSSTTSSSSSSSSSTTTTTX[\\[YVTUUUSRRRSRPQRPPQRRRRQRRRRSSSRRSRQQQRRRTWYYYXVTSSQPNLMMLLLJIJKKKMOOOOPONOPPQQQQONMKKKJKLMMLLMNMLLJIIIJLLLLNOOPQRRRRSSTVUTUVY\\XROMMMLKMNMNNLMNNOOPRRPNPQRPKJLONLORRTVW\\daVORQNSRNRYVOOTYXXY\\bikg`XWYWWXXWVYXYYZYYXZZYXYWT\\osjhghigic[\\_`a``dkkjklnmikpqhh{ompohfkqtlfhhedb_b_Zo~xpjgddnw}ahvla`bbddbdhlmnkghikjigdba`aabaabbcdcccbcdefdccccccddccdedcddcccccccdcbcgddqqikpw{xy{v~mljgfeda]bgnmgotqe^Z^X\\thcdbZivcXZ]b]h||xys^Yabeli_Z^cgjkjhfhb^`YzVb]Z[WVhulh_Z``_`dhhfgffhcdc\\pp_``^]^^_`]b`bkidZ`|cY]]\\\\[`feceefda`abbdcc`\\Z[^^]YVWYZZZYWVVUUUVVVWXXXXXWVWY^cdde_dvwqmd]ZWXYY[]`bbab`^a`][VwҺYUXXZ[\\fvpcc`^]]]]]\\\\^[]`_\\_qtb[Z[[[[\\[ZXVSQOPRUWZ[UPUZ[[b_XWWTTTSSVOPYxVNOSS]haWQQPPRTUVXZZXWVTRQQRRRSVVVO[_RcjPPZVRNILPTVVVUTSST[]\\[ZZYYYXXYXXXWWUX^a[UUUUQOOPSWWXWWWWWVXWXWUTRRQQPONMLJIIIGGGFFFGGIvUHMNMLMNNMKMPPOLJLNNOPPNNIGGGHHHHKOT[bfiq|pSNORZf_J@@AA@@ABA@?@????>>>>>>???ACLVWX\\ZOC=;;99899::;;:;<:8;98766553236;>??<:988:<>ADB><:9;;<<<<=<<==>??@@???>>><;;<<;:78<??>?@@ACCDEFEDGGGE>;;<=>>==??>@@@@EMICA===;7776668:::::;@?<;=@<=<=>>===>=>>?@@A@??ABDCCCCB@@BCB@A@8;9:;:::9;=AB?>BDB@A@>?AA?>@?@A@ABCDCDDDCBA??>?>>>;;AIOLECDEGGGGFEDDDFHLQSPLMR[]HH\\XH9;;=<::98899=CFFFFFEEEFFEEEFFFFFFFFFEEDBA>>CFAAJKKJJFA??@DGD?@ABA?BCBBBBDDA><;=ABA?868@>@CAA@>:768:?A@@?<84;EEAB>9I\\T;-6A<Ni<+<3///0434<>8562/03777:;;::85;HI=:;6310121137763.++++,**.0..3799998749;3...9EB4+-/330.-5;31><7891/BKA5.-178/'))*),/0*)/7;:4,(''/<757.**+++.6@EEB@?>=??AC?89=;<=<:;<>:40/2/,()))+,,+-//./59864430..024.+--.01-((()2<:1-,)-.,*(&)-*+++.3/*2:9641,-6:9=B;52310-*)*/221012-$*85+,24451/39<<<;5-189620...037620.-,/1+&&(++'(./((,27:95,'(,-('''''),020--.,)()++,.156665,$)2/+,?TB&+84/.0121671*%'().0/0//.-,(''&&%)58:=B6+)*,,+-,-/3;;303/*+,++/00/5964-+++17=B@3(*-/.6@G^qwjVdy^:8877664349=:6771./1357;DHB<<@C>32330.+*+02472,=WUF=0),.6c_,&,)(*0ljec`afhgfda__]ZWUUUUUTSSSRSSSSTUTSTSTUTTTTTTVY\\^]ZWUTUUTSSSSSRRROPRQQRRRRRRRRPQRRSSRQQTVWWVUVWUQPPNOPPNNNNMKJJKKLMNNNNNONORPPQQQQPPONLLLLLMMMMMNMMLKJIKKKLMMNOPOPQSSRTTTTRQQSSRQQQOMLLKMMMONMKMOPOOQSTSRQSUROQRPMNNNQSSX`c`[TTSPNLJNTUQMPUX\\adhjje^]\\XWXXYYWXXYYYZZ[[[[[[XU\\mrnnmjghf[Y^_aa``gpnheimmprqw~vemnkikouqllkihfbdb[fupmkfblx{|blx|ve``ccbbbdegkkhhihigfefghjtj]^[Z`acca``adefecbcbabcdhlf`cedccccccdeecbbefdlnhhuu}laxmkfeegc_]^p~eoq\\^[]f}~xvzwwuildnjfw{soh]zplomof]agnrtrokgZZ]\\T^^[[W`|dhrkfgc_aegggggfgfhscbr`b`^]_a``_rpeeeaV[tcX]^^^\\biighjkidaccbbccb^[[]]ZXWXZZZZYWVVVVVUUUVXXXXWVVWVW^ehiebinssoh`ZXY[^_^bc`^^]\\^]Y]̴TUVWXZbknmdcda]^__^_]\\]Z\\`_]]ed[ZZZZZ[[ZYYVVSQPRUYZZWSUY[[^\\T`ZSSSSSUJBqmONVWR_cWQQU[\\ZYZZ[]]\\ZVSTUTVYXVTUVQSWQXgeULEDFHNPTVVVUSRPNPXZ[ZYYYYXYYXXXURKMX_[TTUTQOOQSWXVWWWWWXYYWUUUTRPPPNNMLLKKKIHGFFFHEDfÿWGMOOOPQQQOPOQOMLNQPPPONNIGIIIHILTY]bfimyzRFKKVkhN?>AAA??@AA@@A??>>====????@ACNVWYTO@;<<::9:::;:;;;;<:8;966655543589;??<9998:;?BEB<:;<;;<<<===<==???@@@@?>>><;:<>?<::<??@@@@ABDFEFGJIJFB<;;;<====>>@@@@>?IRLHBAA@8377668::;:<>@>><<@;;<<?>==>??@@@BBCBAAABDDCCCCABC@?>AB9:;9;:99;=@BB?=@DCBA@>?CCBAAAAA@@ACDEDCCCBA??=<====;AKNIDDEFFGGGGFEEDFJMSUPKLQZXERZP@7=;;;:99<:779=BFFFFEEEEFFEFFFFFFFFFFFFEDB><?EFDEJKJGA<=?BC@==?@ACCCCBCCCCB>;:;=CB5/3/4A;=E@AA=;5678879?B@:6:@CDC@7<Q\\WH<@=PM034320/..042/-.01244579=BC@<71;PQ>6;:4255:>75:;93,**+,,,-//.058888765587-(,.494-.0012230-6=6<>8781)7G@50+-590(*-.-057-+5;840,,*)16666.)**+-8BDFGEDA:8<?@CDB?>=;;;:<@C9+'-.)'(++++,,-,-2411599689652,*//,+,./0-(&)/4;7-(%'.1,*((''''&'+.,+1851-.00/4:=A5++.---/1.1332.02-$*>:)*034662/378<=3*-552/,+-041/010-+)&&&'')+($,9:-(-29<:2)'(*+(&''()*,3972,*,,,.1322376330&.K[J0#+FN3#,2/.//0054-'',*'+.,*)))***)('%)6@:425>A3*(),20015=A;/)))+-./2437==1-.1:956<>:/)(*-026;VknypQ>DXN8:<<:1,.,-5;;9<;3.-.7;;?EC=98<A>655431(%1BKIC;;GMD90-+*).VuY.%**,/1nkc__add``bba_]ZWVUUUUUUTSSSTSSTUTTUTSTTTTTTVYZXXZZYWVVVUUUTSSRQRPPQQQQRRRRRRQPPPQRQQQQSUVTROOPPNNONOPPOONNMKLLLLLMNNNOONOPQQQRRQQQQOPPNMLMNMMMNONMMMMLLLKLMMNNOOPQRRSTTTTTSRTRMILNMLKLLMMNNNNLLSWVRPRUVUSRRQQRSROPQRTTQT\\`eh`TQPMJJJNW\\VMNTX]^]bmnhffb\\YZ[YWWXXYZ\\\\ZYZYYYXUScysmrnhhhbbhga`_\\`jqmiimsspq~zdgihhhjmlqvqigedbb_^{tgilkflvxv}peltxtrj^]ada_^^_^biifhfffho~{yp_\\aeeb___`_`bcbb``acclvf]decccccccdedcbcjkacnjan}{la`pugoeeefig^cuuf[Yeyta^ilos`hniigYbȆw}xsfbbgotvx}sdVZbddO^[Wa~raY\\iprrc^giiggggff^j}{f`b`___`beexzgcecZRjd\\^^`^`ilkkklmjb`bddcccd`[Y[[XWWWXZZYYVVVVVVUUVVWWWWWWVVUUW_hhjg^aluxsi`ZY[^][_d_]]^X[^Yd˳oTWUX\\\\^b`Z]bc`]^^]]^^^]]]^]\\[\\[ZZZ[[[[\\[YYXWUSPQVZ[ZXWWXZ\\[WS[`UPQQRRLMnnMQghUOWVNNXdgca^]]\\^^][YXYZ_dgfb^WPQVTOUXg\\UOJEGOQTWVVURQNFEOVWWXXYYYYYXXWUSKIQZZUTTSPNORTVWVVWXWYYZWTSUWWSPONMLLLMMKKJHGFFFFEBcZGLOPQRSTTUSSQQPNPRRPPNNMIIJIIHIOVZ]^ahr|y[HIOTi|dB@AAAB@??>??@A?>>>===>???@@BCPXWVIB;;<;::::::;;;;;;::9;9666555456838?>;9;<===<EGB<;=@?><=====<=????ABA???@?=:9<@@=:9<??AAAAABDFFHJLMHC?:;;;<===?@@A@ABA?@JPKKLNOA376668;;;;<>@<<==?<;<=?>>?@AABBABDCBBCCCDDCBA@?=<::;@C::<9::::<?BCC@>>BDCBB@?BEFDBAABA??BCEDCCCBB@?>>>>>>>DJHDCEGGGHHGGFEEFGKOTUPKJR\\QL`WM=6<;:::::=>:68:=CFEEEEEEGHGFFFFFEFFFFFFEDC?<=BDDEGJJE<89:::9:::9;=ADDDEEEEC@<9=AA<21669?>DG@?BA;5588777;?@;79?DFB;76;FVaZLA?:77970110//1.+,-/1466688=IMD;8AYpq\\C841/4;@@;:==6-***,../12.-2777654556520020/-*)+,-,+,0762:=<=873/,,=A82,-694.0333588-0;<72021+)+340.,)**).9ADCB@@><;=><<AGE<64379<>B:))351//20*).0./0242/.16767:<6+(*-0////-+(&*3:90)'&(/31000-,.22240.+*+***(,21/377+%+/.-.///1111..0-$*>;&$+.26840/03;=3+/1/..-*(/3/,-..+(%$&&%&*-&#.?A84559;:2(((('&%'&'/316951-+-/035664341/.-2QkfH1+%6WI$)<2-+*,053,'(-*'),*'''(),+**)-9D@81/2DTE1($)2200139DI=.--/11//29AA6142>B2.686/*)+.0233BZgiT=9;@@>==:727748<<?C?70,/8>=;BF?3.3:==;63122(-EVSJFDDGA/,-0.-/+Md@)')*066ie_\\\\]_^YX^cb`]ZYWUUUUTUTSSTTSTTTTUTTTTUTTUVWYXWVWYZXWWVUUTSTSQQQQPPQQQRRRRRQPPPPPPOPQPPRRQNNOOPOOPPOPOOOONMLNMLMNNNOPPPPPPPRSSTTSSRQQQPNNONMMNOPOMLMOMLLLMMMMMNMOQQPRRSUVVVVWWTOJJJLMMMMNNNNOQTZ``\\WTRSTUUSRQPRRQRUWYWPLS]bgkcURQNNMJO[_VKKOTVRTaijfbc`]\\WUVWXYXXWWWWY[ZTTZTZttchonkjmotrf_`^]_hrphlrqs|~yyyghjigfjjdp}uiddc```]hx^^krnlprrruwvqpomvtc_```afkmkh`]ekifeiwztxxxvqh]\\aca`_abdegbcdcccccccbcddccjrmdejgaeyxx~vs}vaahh]l|oigghkfjnX[dozsQT[WYr}_aghllvzu{}wohbbinryxaU]kbSQZ\\vm][ilbv~q\\_jhhhgggjmm~nveafgdaa``__`_flgqzmghfeXnf[^]^_fqplllnni`^`cbbccca]YXYYYYYXXYXWVVWWWWVUVWXXWWXXXXVUUW`hlk`Z_kx{qg_Z[\\]Z]hf[Z`[Z][jʲ_SVTVY[Z[]^___]___^__```^]^^]\\]][[[Z[[[[[ZYXXWUQQUY[ZXWWVX[YVTQ^XLMOOPPRZKMXob[TQPMWinhcb`___^^^\\]^\\^dijljkcNHU_XTPUVPPNFELQX\\XUTPOKHHOQRUXYYZYYYXWWWWUOMTWVUSQOOPSVVWWWXXYYYYVSSUXXURONNNNMLLJJJHGFFEECAkį`KMOPORSUVZ[XSQOPRRRPQPMKGIJIGFEKPQRWcoxzyp^OMOWao|_<ACACDB@????@@?>>>===>???@@BESZWOA==;;:9:;::;;;;;;;:8:;9755566576848?=;:;?BGGBHJE<;>AA@>=<===>????A@DJG>>AA>;:>BA=99<@@AAAABCDFFHKMOEAB=<=>>???AAAAAABCA@BJGILNNI<98787::::;=>;:=@@?>?@@@@@@ABDDCDDDDDEFEDDDCBDB<7979=E::;;::;<>ACDED@=ADBAB@>@CCCBAAHHA?BBCCCCCBB@???@@A@AJG@@BEGHIJJHHFEFGHKOSSOKHT]QZaOK?7;;::<<;<>=::;<@BDDDEEEFHIHGFGFFFGFGGGFEC?;9=CCEGIIB8677889:97778=EHFFEFFE@::@C>578765:EMJ?=AC;55888978:;<87=EHA:9:88=CUaV:04:?801211/.-++-257989:9>KOB6=cqS5.77:B@=>@>3))+,..0234103763445567516:5/,))**+*(&(+4><7>@><731/069631256753566752/7<82-096.*(151())*))*.2544678;?BB?;>DD;64049;=A;-4B@:401/)(/1/253240*'.5326;9/(()-46.)**(&-8:3*'&)/547>=:327?@751101.)(**(+1200,'',010/0/0000.../.')63%\"(08885211267.,21-02.**-24452.+'%&&()+--)&,6=@@:799:8)&''&&&&&&*6:73)(12001345543//1++MidM41:21FH:<?1())*.30*&')()**)*))(*/22/2>FC637:>CSM7*(&*..,,.2?S_N6.132,*,2877?806:1+044/-.1469=;:GSPD:8@B?=94122416A>22>@60-8GE<<DD92./:>><2)*34,4ISMILMFC?.-1-%+,#JS'$,)+376c`\\[\\\\\\[WTX^`][[YWUTUTTSSSSUTRTTTTUUUUUUUUWXXWWXWVWYXWVUVUTTUSRRRQQPPPPPPRRRQPPPPPPNNPPOPPONPRRQOOPPOPPOOOOMMMMLLNNNOOPQRQQQRSTUUUSTSQQQQQPNMLMNNNMLMNMLLMNMMMMNNNOPOOPPSVVWXXWYWRNNNNMMNNNNOSX\\`aaa_[URRTXWUSRRRRSTVYXRKOY`cjlc[YWWWTRV\\^VNKLMOOQUcld\\[[ZZ\\^``b_ZVZaeiqpbUVVWho_[emkjqtsuoecdb_^honosxy|zilnkiioofp{sjefdbbcb_cmwy`Xitnklmmmnoqtxwkowc^b`]h|taaghdnwi^]aaabcba`ccbcccccddccccdejllkiffdgrw~}yroqwyrhabhoxsnighigh\\_c\\d|wh]`gaY`w͘Z[fznebbgnsrstmfdfkovxbWaqjtޟVMqc[aXtltr^cigggghfj~nfkifda``__acdgld`rtiefeand]]]__lxuonoppld^^_``accb_ZWWXXXXXXXWWXXXXYXXXWWXXXYXXYYXWWVZfmhc`__n|xmd^Z[[WZko^X`_\\\\\\tܖ[XUUVWXZYZ\\]]]^`cccccbdfecaa_^^^]\\[[[[[[[[YXYYVQRVY[ZWVVTTYWTSRUVLJLNPPMSQOORT\\WSR]ntidcca``a`^^^^^^_`cgjjliTEKddQLLPNGDDEJP[YWVSPNMPSTSTX[Z[[ZYXXXWXXZSLQVUTSPPQRTVXYYYYXYYYXVVVWXXVTQONOOMMLJJJIHGECCCAnĳdPMMOOQSUW[b`TPNPRRRRSQMIEHJHGHKQTTXet{}zqdYQQU^`erU:CBACEB@????@@?>>>==>>@@?@ACGTZWG><<;::9:;;;;<;;;;;;89;974556555689?>:89=?BHLIJJE<;??==;;;=>=>??@AA?J\\[LADDC?<ACA>:;=@@ABBCCCFFGHKQNACFB?????>?AAAAAAAAABBCEEEFHLJA:98799::;==;;=ABA@ABCB@@ABDDFDFFFFHHHGFEDDAGJ=2647;F<:<;99:<?AA@BEC>>BA@@A??A?@DBCPTF>@?@ABABBA@?>?AABABE;9CDFIIIJKJIGFGGILNQRNKIRYXaLEKB79;::<=;;<==<<<;<BEEEEEECEHIHGGFGGGGGGFFC?:8;ADEGHF?54779;;:87876;DHGFEFFF@:=B@;989;835DK@8<>@<7677877789:86;EG@::<<::8=aiQ7-9?7012131,**+/59;<<<=<>HL?3I}zQ8@>4;FDCC@5+*,0100344212352234565/.571-+)+1.*(*+-/3;A;9AEB>73345333111376/.2662.2;<4,)0;:1-,132'&))))('''(*/0016AILH>:;867347:AF@9AH?6/,)('(-30/112573+(.111331)''&)//++*)'.95,(('*2415?C<0,5=?6/.2120-,,/-'*/-,)(*,/./////000.-./1-+//*(,5<:3035420,+/76231,+-378<?;1)&&&&+13/-,+)+8C@758;?;*''&&&&&'''.:<5,(/97102345541/0+:]^I915?=4/1?J?-)*+**--*())'*,+***(+047:=DLI9.0:BDBGI5(6933.*+/4?I[^?-252-*))**2@;21++,.01038;?EIOI>>?9?C79@>:6421/,+373-.5852/4=?=?E>6FC3;DE>1,.681/7?BGQRC=@6/*((.*\u001dDR*'-(*230_^][\\^\\[[VTXZXY[YVTTTTRQQRRSSSSTTSTVUUUUVWXXWVVWWWVWWWWVWWUVVUTUTSSRPPPPPQRQQQPPPPPNOOOPQONOPQQQPPPQQPPOOOOOOOOMLMNNNNOPQPQQQRTUUVUTTSQQRRQOMLLLLLNMKLLLLMNMMMMNMMMNNLNNNPTVUSQRUUTRPNMNNNNOQUY^`\\Z`ca^ZVTVXXXXVVVUSSUVSRSSX_eiifc`\\]_]XUX^]ULKPRPLRdog]X]kqoqnmkjmrx}gXVX_db]_gfdkrontqebab`[izuw~kosnhkrunrukffhggecdffhkpvse\\ktigjkklnoqttuqp{j_^[jhfhfv~wc]abe[\\_baabccccddccccccdeghgeffejkk{odfffkxukkpto{wwqighfhv_aegg}]Xbeto\\ZjzvXc|x_\\]\\_jh^hnmlkmqrsjjogdjsfمb~`T\\^Ynpqukihiihgghcninlea```bdfigkjVWordeedib^^^^[myxsrrrtqha]]__`ccca[WVUUXYXXXWXXXXWWXZZ[ZYXYZYYYYWWXWXdmida_\\apxsia\\ZZXXhvbY_a^Y\\εv\\\\YXXXXXYZ[^`aceffggecdfgfdc`____^]]\\[[Z[^a`^]XQRVXYYYXWSSUURSTTUQNMOQQNQONKJQRTVTfmibbccbbbcb___^]]^`befhhfWHGP]ZONQTROKIJJSNNUTQPRX[YZ[\\\\\\[[[ZYXXXXXYTOQUUSQOPRTTVYYZYXXXXWWXY[YXWWWTRPOOMMKJJJIHGFDCD?oѿƹaOLMMMOQSTVaeUONRTTSSTQMIEFJHHS\\abeku|}}{oaWPNUZ`qhD>DBCCECA@>>?@@?>>>>>>@@@AAACJWYRA<=;:::9:;;;;<<<;;;;99:96444554358;?=:9:<=?AGJJD>=A@>=<=?AC@>>?@BC@EWce`VJGGC@ACA?=<=@@ABDCBACEGILPE:CHGB??>>>?@AAAAAAACBB@DFECJQPF=<:99;:;<=?=;>ACAAACDCABCDDFFDFHHJKKJIFEDCAEK907854F@:;9989;===<=@B><>@@?@@?@@ADCBKOD<>>=?AA@@@@@??@AA@A;2;GFHKIHJKKIGFGHJLNPPMJIPYYT>@ME98<<;<<;<=>???=;;?BEEEFGDAAGHHGEFGFFGGFFC?:8;?CGGGC<6588999989998;BFGFFFFFCA@A><<9::820>C638<>>864355679::98:AE>8:;<==??I[gVE>781/010---*,06;;<<<>?>BF=6TjI?@>>CMLHC7-+-12212222112330/-.30),10,,+(-40+-68::;<>95=HF?:64321///..177,)398216;82,*2<;62,/22(&*)('''((-2/+)(+5ANVI62101003:GOLHFB70,)%%%',1.))+048;7,(-1.++*)'&&!'.**+)'*,-,+*).7:55=C8,)06:7./3-(+13/42('(())(*--,***)+021-+/231-/20/27:92+/692*'.8:731-*),8=:;A;/(((&*487/--,''4A<005=D='&('''&&%'&%-55-(3?:2345565354.1R_M?726?:/*.<KB0/.-(&)+,-+)'+0.+*(-8>;3:GHIK?36:<<>@NH/B[VH4*+238EKL<0361,*)))*,1494)()++-18<@ISX]V?2>NLFB42:?@<850-+,-0211222/+7HA8<;AepC6DE@=;;:93,,23@TP;6@=4..78/#EY1$)%&/22]]][\\\\Z[]ZVUVVWYXTTTTSRQPOQQRSSSRRSTTUUUVVWWWWWWWYXVWXYWXVVWWVUUUTTTSQQQQQPQQQQPPPOPOOPOOPNNOQRRRRQRSRPONNOQQQQNLMNNOPPPPPPQQSTVXXVTTUSQQRQQPNMKJKMLIJKKLLNNMMMMLMNNLLLLLLNPQPNMMQSQNNNMNNNQRSUXYWX]aaba]YTSVZ\\]\\[YURSSQSTMO[bceije]XXZYQLTcd[NGSd]NPaonikpsrrliy~gVZ]_adhlhacmqnswh]^`^Yf}{}}npttmnuytpidegijjfccfjkjjloidnqfdiiikmnopprurqaX_hjfhkub^]s^_aabccccdddcccccdeffghgffljixwspfhhkvwolnoposuutkdccgo}dXeih|Y]bap{m]]xvxzrlfd`[\\gnvhZ_cchjnmlmcepkdY`gZ䳃qe\\\\[Y^iohpspokikihgfe^ao{xigcababfgiijlpiY\\lkgegd_\\^^XXm{yutstvxob]^___acdb[WXWY\\]\\YXWWWWXXXYZ[ZZZYZZZYYXWWYYXbnld``_^ertmd\\ZZZZbti[\\`_X^ǭޟca^[ZYXXXWZ\\`higghghhfdbbbbbb`^]^^^_^][]YY]egec[RRVSUX[ZYVTTRPRTTUYVSSSSPONOQQQQUXWYSSVZ^acdeedca`^]]]_abcddd^UQLMX]VSUYSMOSX[SOTVTVX[\\[\\]^]]\\[[[YYXYXWWURRSTRPOQRTVXYYZZYYXXXYYYZYYXXXWUSQQOMKJKIIIHGFED?cĿ]LLKKKLNOONXcWMPUWVUSTQMIFHJJLT\\^`fmqv|zm]QLIPYmuR>BCBCCDEB@?>?@@?>>>>>?@@@AAACMYXJ<<=<;:::;<;;<=<<<;;:9:876545542248;<<:::<=>?@GKC=BIFBBCEGHGDB??ABBES^_ad]LDFEADEBBC??A@BCDDBABEGKOH86AIJFA>@ABAACBABBABCDDBEFGEJPNG@><;;;<;<=@=;>BCCBCCDCDDCDFFFEFIKLMMKHFDABEIJ=2=>34FF:9999:;;<<:;==<:<>>>??>ABCDCBCCB?>>==@A@AA@@????@@?:3<DDHKHGHIIHGFHJKLNONKIIRZSE>ALG;7;>=<<<==>@BA>=<=@DEEGGEB?>CHGEFFFGGGGGE?989=BGJH@979;:9:99998889?FGFFFGFEEA?><:::871-6::::=@?911135789:::::@C;6999<;;A<@O_bQ=4/--/-(05-+3;=<99:>A>>@<=e\\;?]_?IPG>5-,-./11/..0111130*(+1-+00--.*'.5558<?====<734=B<541/,,+,-.-07:0*05427<;410.4<;:7,-43)(**)''+4=CB6)&(,.5GVJ3.,((*/2;KTRL?752.)&&&&**('(+/269:6,),.0/-*&$('(+*)'&'((*+--.4;?>8:?3()*+22--30--1412/('&&'()),1430.,+-11,+28610134565443-.6;3)+7:73.*,,*(0;==;1()***.541.*))(&0>;.+2;>6)&'''''&%&'$'-.'(8A;578667648707MOE>518B7',=FC8421.))+,,.,))+.-+*+@RRE5=CAITI9764237L^@AmqS5+1A;0<F@82361)()*,/.).=@3,)'(*.789HZ\\`^G28QTJN?).<>;840/,*-3311012/';^R;<JfeDA?=?BA>:94214CTL;>EA>>AD=0*=I3.2./499ZZZZZYXXXZYWWWVVWUTTTSRQOPQQQQQQQQRRRTUTVVWXXWXWXYYXYZYXXVWXWVVUTTUTSRQQQQRRQQRQPPPPOQRONPOMOQRRSRRSTTRPMMPRRRSSPMNNOPPPOOPPRTVXZYXXYWUSQSQPPPNLLKLKJKKLLMOPNMLLLMONLMMMMMJMPPNMKMQPNMMLMNOQRQQPRWZ[^__]^^ZTQSVYZYWWYWURPLKMW_`dhkjbWNPUSKKYhlcPLbfTLQ^mtpfdkjcs}wx`]`cekqtqkijllmobWWXXXaz|vz}tit|xttuqkebeggjkgddegiiijkjinkbchjklllmnprtpg]Tfqfhihikx}kYy[ec`bbbbcdcccbbaaa`boyidejhk~wnz{y{umjopoqtyqe]addcfn~][eamnW^b^g{o^`ef[lorrfe`XZeoxn^XZ\\]_^[]aenrrsd_iZExժzY^`[]dhjiippllkjjihhgb_^X^ghpe__`dhiihklnsn[Zhkfgd^[]^UUmzyvuuuw|ra\\^^]^`acb\\Y[_ba``[XWXXXZ[[Z[ZYYZYZZZYYYXWYYY`npe^]__aippe[XXZ_bho_Z]_Xh¬޾tcc_][ZXWWWY[^ehgghhhgfdb`a```_]\\\\\\\\]][Z\\ZYW\\`a`[USXc^XZZXVTTSQQRSTXWUTSRQQRRRSSTX[]WSPQTUY]`befdb`___^^_abbbcegd]SU`[VWWRQW\\fga]XW\\]\\\\\\\\[\\]\\\\\\\\[[YXWWVVUTTTSSQQQSTVXXYZZZZYYYXYYYWWWXXXXVTRQOMLLKJIIHHGED>Mտ]JKKJJKMMLJS^WOPWXXVUROLJGHKKLLQRVboy{k[QMOSfuXACBBBADFEA?>=>?@>>>>=>?@AAAABCMTSC<==<;::;<===>=<<<;<:::876554431159<<;:;<<<==>EIDEJMKIIKKJGDCBB?ABBO]^^`_ZL@DEADGFHGDAA@BCDCA?ADHLPA47>IJIA?@BDDCCCCCCCBBDDDFFHHIJKHB@==;;=<<=@?=?ACCACCCCBDEFFHGGHKMMNNLIJE@AEJPJ<J>46HJ:789:;;<<<:9:99;=>>>????ACDEEDCCB?<;=@AAAA?@@???@@?94:ACHJJHHHHHHGHKLLMMLJILSTH>;>FH<8;??=<;=>=@@@@=<<=AEEFGFFD8:EIFEEFFGGGHF?:99=AGLH>98;;;:::9998889>DEFEGGFEFGA<<:;:96/*-6;:<@?>7062356879::9;AA:56668<>@C;6AQYJ3.,+--/<?30:A?9457;BDDEDFop@Q]EF=3/,,-+,---,,.02222.)(-/+-0/-/2-(/9=BBA@>;:=;53/2;<61.,**+-..-/6;6/-+-18;71...3;;<9..//,****)*6HPQJ7((*,++9F;--+'&(-1:JWRF2,6;3+('&%&%'()+.134674,)-683,(,8>;44;9.*,./../07==;4/1.*''',.//3555111/,('&'')+-.18<<;80+./-0;<611345763101/06;4.29964.+,-,))19@;)\"*/-/12-*)')++*.55-(+01,(&'((('&&%&%',*&.<A>;897656686024589933=5%)>D4/462--../.+*()**+*(5TYNB:97AUYC5873,+,6F8?pvT/(?XJ,*8=;6030)')*+162,6G=,&',.)041:QW[]M:7BLKLF.(4441-+++,1662/00/,&5Zkbds]>=<>CDA?A><79GRKELJA==C@7/.3:<CGFGA<=WWY]aec\\XWXYXWUTUTTTTTQPQQRRRRQQRRSSSUVWYYYZYYYXXYZ[\\[ZYXXXYXVWWUUUUTTTSSRSSRRSSQQRQQRPOPONNOPPQRRSTTUTROOPRSRUXTONNPPPPPPRRSUXZ\\\\[[[YWVSSSPOPPNNMMLJJKKKMNNMMLLKLMLLNOOONLLMLMPONMLLKJKMMNPOONMNSVX\\_^YW\\_\\XSPOPSV[^^^[SMMMNSZdhijh`TNRWTPR\\glcWPTROPQYeia\\bjpnr~zgehijlqsvwupmklg[XWWVVXkztb]vwcivunnniecbehikkieddeghhihgijdbegikllllmqsofcfYb~{~jgjfcbbb_gt|~|^hϯxqb_bbbbb_gvna``_^d|zgebhgpwo||{}ukmpqqrwsledcbbdgx`cec{`W^bgrr_[eedj~oibYVX]beb]Z[[ZWRQTU_wwq|tolgTQW\\_Z]mqpqqnplllkjiijkjhaZcqpcnb_bdfhjijkklsuh\\[agfc_]]\\XYetzyyzy{|pa\\]\\[\\^`aea\\]bdb`_[WWYZ[[\\\\[[[YYYYYZZZZYXXYY[^jui_^^`acioj_VVZac`jkZ[^Vr¹ӈ\\b`]^\\YWWWWWYZ[aegihgedba```^^^[[ZZZZZZaa_^YWYYYYVU\\rhZWWYUSUUUSRSTTTTSSRRSUTRSUX\\`dee^WTRSWZ]ababa``^^^]_``acfhgb_[[\\YYZ\\\\]^XW[[XY]]\\]^\\[\\\\\\\\\\]][YWVVUTUTUUSSRRRSVWXXYZZZZYYYXYYXWWWXXXXXUSQONLLKJIIHHGEEBAõgOKKKJKKLKJSZVQRWZZXVROMJGHKKKLT^cjx}l[QOQYylA?EBCCCFHFA?>=>??>>>>???@AAAABBMNL@===;:::;<=>>>>===<<<:987665542037;<;;<<<<==>@CCDLOLKMONKEAA@@@>?CKW^^_`_^TMHECEGFHHFCA@BBBA>8:DIKLE;5;JKHAA@BEECCCCCBCBBBCGHHHHHIIJFB?=;==>>?@??@ABBABBAACDEGHHHHJMMMMNPOONDAAFDFTS;89IM:78;<=====:8888;??>=?A@>@CEGFDCCA?<;=?@AAA@@@?????=859ADGIJIJKJIHFHJLMMKIIIMSOA==:AI@::=>==<=>?@AA@?<::=CDEGJJD95=FEDDEGGGGGF@<;:<@GKF=79;:::::9::998:=BDDEGHECGIC<=<<<:5-)-5724??81374324668988<@?;7533465;A@;7;HK;1*+-2;GF:7?B<545:?HMMLGA`sFe~J<2+,-.00/-,,+,.133420..,+*++.2487//:EGGC@?:9>;52028;83.+))*./,,-3982.*+1981.-,/6<><4/-...,*,-/7FRSOD1'()*(%.6/*.-)(+,.6CRNB2(3>6*)(%$#%(()*,0223541++2651(4VaT?;ND6111100/19@?80(*.0+()-58747785487,&'')*-11.-09?>7/*...4>=4002456632/-,.27414776641/.-,+-29=2)/3.-0/)&''*.1/,*-,))**'&&'((('''&&%&,/.6>@A@841.04761-*)+0EUB4:0&*67,/551.00110.,***)*(*:RL=7766J\\U;3><6-+**($?tv_@0LcY4\",9@9.01+))+*.8>0&68+&%+6,*597BLRUF9<?CFDE:+,./-*''*-38742,))(.2K{eIA?IHHHIEA?>AHPPNPRD35:51//6DEIOQTK92Z]fmtzvkb\\XWWVTTTTTTSTRQRRSSSTTTUUUUUWY[\\\\\\\\[\\\\]\\\\]^^]]\\ZZ[ZXXXWVUUTUVVWWUSRRRRSSRQSSQPPPPOOOPPPRSTTTUVSPOPRSRRSSPMOQPOPPPRTTUX[\\\\ZXTRTVUSRQOOONNOOLKKKIJLLLMNMMLLLLLMOONOOOKIJQVUMJLLLLLLKLLKKLMLMTZ\\[XVZ_ba\\XTUW\\___aa_[UOIHTbikjjibYSTUSQRU^hdRIMPQQPU^_ZbtYdv|t`_ebbksvy||wcXZYZXVTTTWVRa}t^^c``gkhdabcfjmnlfccehoqefhihdfhggikknttsrh\\Y^\\erhpjchfddde`X\\g{|~~td_aY\\aabbbbmwk```_^dwkccafhq|ywz{ouusw{ztlnqqqpmtwsecccfkzb`gs}gZ\\_alulbafmlbrbNSUTWYZ]^]\\_^]\\[XSYefk~ojhghdeUecikmmoqnmklllkjjlnldZ]hlnodkt]etphhkjjkkksti`WXggca___a`br{{|}~~}rb]\\[[[\\^`c`\\_^\\[[YYXYZ\\]]]]^__][ZZ[\\\\ZZYXZ[[[\\gyo`]^^`_^gmeYV[ad`dn_[^Vl޹iY_]]__[YWWWWXWZadghfeca^^___^\\\\[[ZYYZYXetb^[YYWVUVX[`^YURVUUTVXWTSUWWVUSSSTUTTUY]afiklh^WVUUWXZ[_bca`_^]\\]^^_``_^][[]^`_\\Z[]^OKW]]\\\\[\\\\]]\\\\\\\\\\\\\\\\\\[YXVUTTTTTSSTSRTWXXYYZZZZZYYYYXWWWWXXXXXWTRPNLKLKKKJIHFEHA[źsXMKKJJIJIJQWUTTW\\]ZUSPMJIHJJJI\\rrq}o\\ROOhX=FDBBBDGIF@=;<=>>>>>???@@AAAAACOLF>===;:::;<=>>>>>>==<<:98766543128<<<<;<=====>?@AGOPMMQQMD>@A@?@>@FV\\^]_``aaXH@DGIGHHFCB@BAB@<66=FKJJA2:IGCAABDEEEECCCBABBACLKIHGIJIKIDA?=>==>>@?@@A@@@A@@ACDGFHHIHJMMMMPSSS[IA>;23OK8:>EI:8:=?AA@@?>=;;<>@?<<>@@>@BDEFCDDBA><;=??ABB@@@???@<77:@DFJJJJKKIHFHJLMLIGGEIQK>CC=AHD@<=?@??>?ACCCA?>;:<=?AFJIC934;AEFEFGGGGD?==;9>IHA;79:::::::::9999;AFEFGHEDGGB?==>>=9424650.8>5/2110/2579878<??><66542.17:<@=:?:1**0;DFC=<@?639?DIOQOJC8Oc:HiubA70+-/04882,--.024564331/-/,)1;9;>516@IF@A<69=:64334:9510.+)*.--.0541/,-176.+1889=>6,-////-+,/7FPONK=+'&'('&+-))+-**+++/;JG=921<7)&(&&)+(&()+/387672*++.26(5eqXB:G=,11212213=CC=4++196*&*2;:49;3/496-''(*,..-++-242,))//-4=;530022344/(&()+13234235673/-,+0546:884,*-,*()),/0/+*-.,++*'&'()('('('&((,5:?>@F@4-)&*3860,**,:csXCB;,+11./11/.-/35560++*(*)-7A<5453<PYREDKE6-++-/&@twn^JWaaO4/:B@543-*''*+5A8#&-+(%'75(0A><<BE;29BA@BGF5*-,*++-,.48400/'&*/4Vyre\\\\PQSNMNOKB@GLIFHBFWI<;0-/0.5RD6FGLPB7lpwz~|wska[YWUTTTSSSSSRRSTTTUVVXXXXXY[\\\\]^]\\]_``aaa`aa`]\\\\[\\\\ZXWUUUWWXXXWUSSSSSSQRTSQQQPQRPNOPQSTTUTSTSOLMPQQONONLMONMNPOORSRSTVUQNKKORSSQOOONMMNNMLMKJJKKKMNMMLLLKKMNNNNPRQONOX\\TQTTSSRPPQPOMMMKKPTTSUZ]\\]`bbacca`_^_`bb]VOHL^ikkijjf[QLNRRPQX_dWMNOPQTTTX[zuQ\\y}}{nc`YW\\\\[^kzcVZZ[ZXUQPUYUSbuqwr[\\[WZdkjebcehjnqngdbdfkmkkkkjijkihjmnr{ztpe^[Z]iqfiiagdbbdfeflu|tljmled`[_fez{a\\V]aaa`aceb__````b_flfcb^dhpyyyyxvojjkmqpnptrrqquzpa`bdfjq}{onzuc]et~o^]`achkfaahj]L]xsaJSZYX[_][eegkkd\\VRZgxpridglhؘ`jqwpkjlnnlkkkkkjikld][]djkmolaZcqunjjkjjlljmtoifdgdcbbcdgbfz|}|te]\\\\\\\\[\\]\\\\dbXVWWWWX[]^]^_`bfha\\[\\\\\\\\ZYYXY]]\\\\hzqa^_^^]Y^jj]W[acd`jg__Xcȿݕ__^\\]__^[YXXXYY[_cfedca^\\\\^`_^\\[[[ZZZZZZ`l`Z[[[ZXVWZYWXYVTTTV[Z[ZWUVXXWUTSTUVVWV[agkiijid^YWVUUUW\\`a```^]]\\\\\\]]^]\\ZZ[_eih`YUWZTS[`_\\\\\\[\\\\]]]\\\\\\\\\\\\\\\\[[YWUTTTSRSVURTWXXYYZZZZYXXXXXWWWWWWXXXWTRPNLLLKKLKKJFDIEAoȣsWMLLKKJJJLOWUUWY\\]ZTSRMJIIJKHH]sop}vaTOWRBIDABBDGIF@=;<=>>>>>???@@@AAAAEOIA<<==;::9;=>>>>>>>===;;9865553225;=<<;:;=======>@IQRRQQOF==@@@?@<AU[\\\\]^```b_C8EFEDIHFDA@CBCA=951?LLKG;<EGDBABDEEEEEEEC@AAAFMLHGGIIIKJGB?>>>>>>>?@AAA@?A?@@CDGFFJKIILMMNQSSRYKD@;71388::=?:;=>ACCBCCDB@@ABA@=;<>>=>?ACDDFGECB>9;??ACB@@@??><877:@DFJJJJJIHHGHJKLJHGECGOG;CFCBEGGA>@B@A@ACDDCA@?><:66<DIIA7444:CGFEFFFFD?>=:7;HG;77::::::9:::999::?GHHGFFEGGC?=<>=;<;:9740-064/0/./02369889=?@?;888643117<>=::85/.:BDB?=@A;35@ILNMKGC?5Jh7048630./01358:4--//037975432223/-7B>;>933:D=:?93:>72345456775420.034111--,++.22-+;H;-/2231./0211/1;INJJF6*(&'''')*('$),,)*,-7FD6673990))*,46*&(*-17=<651*)))+2->olC<:98-/2335835?ED>71-4DA+%(*3<69<-&/2+))**+++++*+-.-)%$&)+-4:7650././1/'#$(*,0310/,+0685.,,+07637=<5-*+*))+--,,,+.231/01.&%*,+))*)(&,0,3BB5;GB4+%$*2770()*.Guy_NI>.+/11/-...-25310/,),..+.1233453DOORUUTG:.,+.62An|rf``ac^LABFF>==95-$'(0;=-,+(''$,:0&8D9/1577:BBDGJUF41)'&2=7037876:3+0.2bvW/3`qhe^XTTROFFOOE??=>CAC<0*)/*/TA)<?@EGGxyz||zyzzxric^YUTRQRSTTSSTTTUWXYZZ[[Y[\\\\\\^^]]_bbbdfdcccba_\\\\__\\[ZWVWWWVVVWWUUUTSTSTTSRQQRRQQPNPTUTUVVTTUTOMOPQQQQQPNNNMNONNOPMKJLMIHIKMPRQONNNMMMNONMMMLLMMLLMLLKLLKLMMNNMPTWVSQTZ]\\\\\\[[ZXZ][ZWSPPOONMNQUYWUY^adeedcc`^]^^^\\[VRY_aa^`hmi]SRUWUQLQ^\\QMOORWVX^XdvUZs|dVUUWYX`mw~bUZYXXWVY\\ZXXTSYTeq^ec]\\bhhdadknjjkieccceghjjjklmkjllmqux|{rgaijhhlmidtgaffehlpnru{xc^_ZUUVU]fdgWa`Z^`aa``a`_______]^beddc_gmprstvni||ofhijmnpsutty|wpe_`cefgjrmud\\ejd`hxyi_]`dhfd\\^ln^VlXMrwPOVZa[Z\\eimorpiZS[fuqwibh[vnmwspnmmmomjjlkgfhfege][dlmkkmd_suillkjjlmkoyvgdcabbe^b}{tg^\\]]]\\\\[X^j`UX[YXVX[____^]ajlc][\\]^_\\ZXXY]^]]gzrda`_]]]_ehbZ[aaabeke_Y[ӼuZa`^]___^[YXXYZZ]aedba`^[\\`a_]\\[[[[[ZZZ[][\\Z[[ZYYXUXXZZYWXXUV^[[\\YWXXXVTTUWWYYYY^chjihghgb\\YXWUTVX[]_``__^]]]]]_^]ZZ[bhjige]X[[ZWUVXZ[\\\\\\]^]\\\\\\\\]]\\\\[[ZXVVUUTSTVWUWWVWWWWXXXXXXXYXYYYYXXXXXXVTRPNLLLKKKJJGEGG@PΥpRMNNQSSUXVRZWVXZ\\]ZTSRNLIIJLHJVaafweVO^tVBCCCDDDFHGA<;<=>???????@@AAAA@FOE>;<==<:99<>????????==<;:87655435:>=;::9;<<<=====?FQUVSJB><==>@@@BL`Y[]^^``abZ<5FMEDHHECBAEEFEA:84=LLMKI@BPJBAEEEEEEEEECABA@HNMIGHHIJKKID@>?@???>>@ACCBACAA>BHHEFJMKHKMMNPSSSVQIA@>=42887>??ABBBCCBCEFECABCBA=;;=<<<=?@ACEGFDC?99=?ACCA????=7388:@DFIJIJJIHHHIJJJHFFECGJGC@BBCDGJFA@BBB@@BCBCBA?CA7538BHJB54657;AEFEFEEE@==<88?>747<;9:::::::9::;;?HJHFFFFFGF?<==<66:;97531113///0100279988:=<:6554455548=<<:;;967DDB@>?B@96<FIJHC<886/9k<97211/.11133431--12357864211472./9DB:9844><97834;=5.1565579:63235358410.-+)(+-.,+5@9)$+9B5.-1538509HLHE@3-)((''(()*+,240-,+-3?A7//1585-,.189,%(+059>=830.+*(((-FnT15:43322248;25CHA;61/:E<,')(,:;730)-2/-/////..-,+--+*('&%&,464211.---,*'(+/210.+*)'(-44.++++*-2546863.+*)),//+*,014664488,&(,-,,020/.1/2=5(4FB5-)(*0572+)((Evw^TG2*,-...-./0/12-*())(-31...0127?<DE;KTONE;0,+.57AbweR^d\\^]SJFIKKNRQND3*)+18203-'+'\"18'+=3,*+1;@C<?GF[W@0$&'/88215>JHIH>842Hm}mXA1Dkyxsl_TUUNJNNHBADB>56762.*-(,TJ08:9/3Bsrvzyxwxwxzvpha[UTTSTUUUUTTTUWYYZ[[[Z[[\\^____abccefededcdb^^`_^^\\ZZYXWVTUWWVVVTSUTTTTSRQRRQSSQRVXVVWVUUWUROPQRTUUTUTQOOONNOOOLIEDFGJLMMNPONNONMNMNNNMMMMMMMMLMLLKKLMMLNONOQTUUUURU\\^][[\\\\[[ZZ[ZXVSPNNMNPPQSSRW]abccccc^[[^`abb`YVUPOU_inlgeaZWSPQQUSPQPRV^c`^V_yX]x}~~vcWUZcm{pi^V[YWWWVWYXWWUUTSexkfkh_\\age`ahonfbbbbbdeeffffginolkmmnrwxz{p[Ygmt|wng_h{}}wabeegjklq{{z|w{g[[YY]^ckh^\\\\`_]`````_`____^^^^bffdddeeoqppnnqpip}ughjjkmptwtoy{hd^_cfghimowz^`ih`ap}te\\]agid`]fxiYdKX]mmZX`flortrf\\\\ej\\rsa\\cbPkntponnmkmnkjkiace`cjh\\Zdllkihgsvkmllkklmmt~ogcca^`\\[y|{tj`]]]]\\\\ZWadWU[^\\ZXY]`_`ab__fje][\\`bb]ZXXY\\^`_aw{d``_^^accdc][bcdcehkbYXwʸiX_]\\[]^^^\\ZXXXXXZ_ca_^]\\[^`aa]ZZZ[[[ZZZZ[ZY[\\YWTSSSTVWXXXWYTQWXYZYWXXWUSUWYY[[\\`befhigfffda\\WUUTUWY[_a```__^_^^^]\\[[`fhjhhnmha^ZWVUWY[[\\\\]]\\]]]]^^]]YTTVXWWVTSTVWXYVVWWVUVVVVXXY[[[[ZZYYXXXXVTRQNLLLKKKJIHFGHCL˥pRMOOU[]_kfWZWWWY]]XSSQNLJHLNJJNQSYfhYQbnZE>DGEEEGIGA<;<=>???????@@AAAB@GNA<:<==<:99=>?>>>>>>>==<;:876544469=<;9:99;<<<===>?BKYYRB<=<<<>@B@G[_W]__^`bb`O<8;F>;FGECCCFHJKE::9<ILMKH?BSNACHEEEEDDDCCCDBAIQPMJJIJKKKID@>?@????>@BCCBCCCC?CJKEGJMKHKMMOQSUVYYND<=?:7862FLCBGHECDDDDDCBAAAA@><=>??==>?>?ADFDC?99<?AEEB???>=98:9:@CEHIJJIGHHHHIIGFDEEEEDJMA@BCDGHHC@BB@>>@BBBCA@HK;434<GKC3456658@GFFFFFB=<=9565548<;99::::::::;;<AGJGEFFFFIH?<>=;649:77544211111110/2<<67:=<:64343200223437B@;;8;B@=;=ABA==AGIJF>5.--,$UP27536640/00...././24333320/0111.+.8DB66634;:76537=<6257654468775540263/046320,+/20-/1*'.7;3..01.02/<IKE@:2..-,*****+-2550/0.,/2:;5,,.//,*-.0/,'(*.39>>831.+)('%)AW:5576241111:;29GIB92/07=3*')*+284/FL@4776655465.*+--++.2/((,110/--.-,+,.-01561+))*-,).30,*---+*.455431/+)(&+0/+*/677877:>=0)(+.//5;;921/03*%/@?42,)*-49944.#8ow[PH63/--,--//0.-2530+*-/./-..01/>OG>0*ALKI:1/-+-48>ISD;OaRH_]KCGPX^_`^Q?3.,,,+.8;431&'43)2/+'(+2<@78FFHF@7().*$0139@JOTYXI5*+Lvt[D=CP^juvnaTXVMHLKFD=;<:68;==>91)+VT56980.3lovzyyxvvvxyunkf]ZZXWVUTUVUUUWYYYYZZZ[[]aaaaababcddcddddddbaa`__][\\[YYVUVWWXWVVWVTTTTSSRQRTTTTTVWVWWUUUUTQPRSSTTTUVVRPQPONPQPONKFDGJLKLNNMNPQONNNNNNNMNNNMNNMNMLKKKLMMMMNOPPPQSUTRUXYXWZ[[VQNNNQTROPPOOPPOPQOQW\\^^]]]\\YW[ababdc^YUONTY^eknolc[XVSTUUSRQQRZbbda[ihTWel_\\db^_]W^mv~hQ`|vUV\\ZWVVVVVVVVVXVXfnefhb]\\_eeaenpjc`_`bcceeeggdfjnpnnnnpruvz|vc^ejq|~qd^du}}j_adgjmmq||ztz|tkijlkhhjdZ\\^^``ab```___``_\\^ejigfeeeimumgjmoqhhmpknuyiijklnptzxjksi__cghjkntwgZejc``nyo_Z]chgc_bkia`vxYik{TZgmpqttlc_`^RTZUWYXZ`jromnmllnkjklgekg^`dfgge[Yemllgfmvqlnmmlkmmozytunjda`^b`Zo}vka]^^\\]][]aZUZ__^[[[_a`bcfd_cjg_\\]dee_ZXWYY]^]\\ra^aa_^`cbba^]bceddfnjY^ŵڣ`W]\\[[\\\\\\]\\ZXXXXWX[^]\\[[Z[`acb]YZZ[[[ZZZZZXWZ\\WUPOPRSUVWXXX[WUWXWXXVVWVTTWZZZ^_cfdeffgggfeec^WSTTUWYZ^abba````_^]\\[[\\cgiihhfgkd^\\[[YXY[[\\]]_^]_^____]YURW[ZWUSSTUVWXXWVVVUUUVVWWY\\^\\[ZZYYYXXXVTRQOLLLKKKJIGFHICLrTMOOT[\\^stXWWWXY^^VRSRNMKILNKIJKMNTsrZSmd^F>DGEEGHIE@<;;<>????@?@@@@AAB?IL=;:<=<<:99=>>>>>>>>===<;;986445569<<;9:99:<<<==>>??L_XH@=;;<<==A?:[^\\___^`bb\\E<=><55??@CEEHJLPG;86:EKLJCCDOMBEGFEEEDEDDCEDEDKSONLJJJJJIHCA@???@A??@BCCDEEDDBFIKGILOMJLPOQSUWWY^L>88987862LXB<HECBCDEEEBBBAAA?>?@AAA@>==<:9=AAB@;9;=AGGC@>>>===<:;ACEHHJJHGGGGGFGFDDDEEBFRVK@FCDFKJA@BA>=>@BB@?A>GTD5436CLE54344337AGFGGFB=<:611322:=<:::::;;;:;;;<AFIHFFFFFHH?;;;9767755344210111112/1AC66=GGD>>@B@<98610-'+IY?>9;;;<<=ABACCFHKKE=8/*/6+Go1,0-0585/--,+++++-046310/.-.01.*)*-7E<35524896534;?;699976332358<:3-.0.,/4:<=>3+17973/,++//////.)+26ALJB<61021/02,*+,.-/1/152-,*2:;5.--+)()))()()*,05<>:41-+)('#*6:69869841116?:3:DGC7..1561)',1/+-5>_j[;8><<966994.,--,,.13-+-/,*)**+++*-1212343200168-)../15443/.37621.)&''',1.*)/9<:779>B>2+(+/23;ED7010/-*)-64+0/()+2;?>=5*/^yYBIH=2-,+,-/.---6AB@93221/+,.01-@TL7))6FOH0)--,/68<>937FYQ?XeN@BFNUWXTI>=;652,/=F?324/.6-,,*((.38985;:?Lcn@$KaA9749?HHIYgR/&,JlZA=;>HHPepjc^\\WLCLLA826857BHIJKC5),XT54891.4qtzzyyyxxvuxwsqmgb^[YYVUVVVUVXYYYYYZZZ\\_accbbcbbbbcccddddddba`^^^]\\[ZZYYXWXZXWWXWUTUUSRSSSTTTTUWWWXWWWWXWRRUUUUUUUUVVSRQPPPQSTTUQLIIIJLLLKMONNMMMMMMNMMNMMMMMMMLKLMMNNNMLMMNNPRTSTTUVXXY\\\\[VQMJJLMMOONMOOOONNNPTTTRRRRRTX^baacca^\\ZYXYXY_ipsohaYWUTTTSQRQV_aeh\\ZZXUTUTTUUR_{~henw}p]MNbkTW]ZWWWVUUVVUVWWYfjced]\\^^acdhpqgca`bdddeefjlecinopppopqrtxz|ghq}~ue^fmu|zr``bcfnoos~}z|}}zx}~~peaccefb^bb`____^_``_]aqwngeeiklry|yrpjkhfgjt}jjjlostvvzeakui__ehknmmrutdchj`_^n{j[Zeliba[[b_`fmgxȽxYZkoqqssld`a^WTUUW[_gnmnnmlmmnpkjti\\`jg]_djjec[Xdllkhhpu{}nknmmlllmozqkfbkkcWXakhch|~qb\\^][\\[[_WVZ^_^^\\[[_``bcfe`ahia\\]dgg_YXXX]fe`\\pc^ba_^^____^^aeeeeenmZdôڔYV\\ZZZ[Z[\\^ZXXXWWYYZ\\\\\\[ZZ``ac\\XYZ[[[ZZYZYYWX[YTQQSSUVWXXXX[XXWWWWVVVVWVWY[[\\fjljffffggggffe_XSTTUVXZ^bddbaaa``^]\\Z[]chiiigdcca\\Z[[YWWYZ[]\\ZZ^^^^___^[WY]\\ZVRQQRRSRQRUXTSTUTUVWWX]`][Z[ZZYXYXVUSROMMLKKJJIGFHLEQýütTNNNRYWVhnZYXVWX^]UQRRNMJIMPLIKKLLPnyXUvwY_H@DEDEGHGEB<:;<>????@?@@@@AACAKG;::<>=<:::==>>>>>>>===<<;986545678<<:9:879<<<<<>?>?O\\N???<<<<;:97;V\\]]]]_`bcXA<>@B:5<;=BEFIKMOH<869@KMDCLJKHEFEFEEDDDDCCDFGHMSOMMJJJJIHFBABA??@A@?@BDDDEEDDCGLJHJMQPKNRQSUWXY]^G27688676;WX>:E@>=@ACDDCBBBCBABACB@@@?=;:6236<BC@=;;?HJEA???>===<>@CEGHIJIGGGGGFFECCDEDAJX^OAHCDIQNA@A@>>?@AA@?A>FXO>863;ID421101565>FEGHB<;71./211:=<::9::;;;:;;;=AFGFGFFGIKLE<::8676134122110111000-1DH;7ANPLIIOQLIGD@840*$:^O8=:5/4;@DA;=DGJNMC=90*49.LvC*/1/1331,,+,--,,.023530.,++.21.)*+-44635423565424:=87;987531/-013641,*+,,29>>=3+.3964542031.//.-(*39AJJA:40264257/-,-,),./374+'(*17851010/+)**(&(),168=:3.+))(&$*4*49:<9;5/115<647>DC7-.2420('.62*'3ZzzsM9CA>;747772+-/20.-,,,-.,*())))**-220035100--495.**.6777631474/-,&%()-02,&&-9B@76<CA82,'*/22=JA3-00.-+,150,00)'*3;=?=717QqV:HK=1-,*+--++,/9AAB?8444/+*-221;ID/***6D=+*.//168=@=:>DPN=MiUB>639?A>><AFAAHC;?JG5.2/181-+(()6=;73).Oti+arB)<GBBIRRJ:0CN4,88:=BQfmiedZVNJNK5$-6758IRJFDD4,.YT64780+3yyyxyzyyywuvwusolha]]ZWVVWVUWYYYZZYZ[[^a`abbbccbaabbbcdcccba``___^[Z[Z[\\ZXYYYXVUVUUUUTSTTSTTTTUXXWXZ[Z[\\ZWVUUUVWWWWXYXURQPOPRTUWXVQNLLMLMLKLLLLMNNONNNNNNOONLMMLLMLKKMMLKLPRSTUUUTTUUX[\\]_aa`\\WSNKKKMMMMLLMMLMMMMMLLMKORRW_ccbba`___^[WST]hpsrne\\SOQRRQSSSY_cgc\\VXXVVWWWWV\\rhZfslYOSTVclcXZ]ZXWWWVVVVUUVUXdgacfb]]^_acbdkidbaccdfgikmqnffkoqqrsrrrqrv}vzi{}ztkajjowv{tb`bbhrqns|{}{~yr|zxurpooolgb^^__^____`_n}}~yywszsjhklfj{lklmov{xvzfa^ukh^`fjnpmkmotldkqoi`aat~lZ[nnc__lwicjt^Y[f|ĥxTdgkmorngdd`][YVV^gkoqqpnnoknw{pk]U]fg^_cjihe[Ydllkkkqz~oimnmlklmlx}uidd`fibNZmyslio}yc[\\[[[Z\\\\QW_____]\\\\^_^_`cc`_dfa]^dii`ZXZYgvvm_ei[aa_^^^]\\^]^adeeddilYmՁOVYXXXYXYY^\\YXWWWXXZ[[\\\\[\\_^_bYVWXZZ[ZZYYXXWVYXTTUUVWXXXWXWYWWXYYXWVVWXYXX[[`hnlifffggihgfffc^VTVVVY^afgdbaaaa`_^^\\\\aeiiiiiigeb^\\[[ZYXXYYZ]lh^\\\\]]]^][\\__^\\XTRSVVVUPMO\\`VRUTSUVUV\\^][\\[ZZZXXXWVUSPNMLKKKIHIIJNKS˸¿uVNNNRUSOZ`ZYXWSW_YPOQPPLJKPQMIIKJMQmî{Y[ytYWLCCDCCEFFDA<:;<>????@???@@@ACHJ@9:<>>==<::>>>>>>>>>==<;;:997656779;<:99878::;<<=>??FKCB@>==<<;968JVY[]\\]_^`bYB;=?A<9<;<CBCGMOOI<98:?MN?GQMLFFFEEEFCABCDHGFHKOPPOMKIJKKJE?@CA???A@@@BDDDDDDDBGOKIJMRRNPSTVWYZ[^aN266775879VY@;??=;>ABCCBAACDDEDBA@@AAA><:73119DHIE?:<FKGB@@@?=<>?ABDEGGHJIGFFFGFFEDDDDCCN\\bH<HCEMUOB@@@??@BECA@>=G[[N>:89CB321.,/6;15@BEHD<;5.,0410:=<::::;;;;;::;=AFGFHHHJMNQL@<:5575012//./01100000,1DMA:HVUOJLVYSNKID?<81*+I[<=<:6239CA65>FJSOC=7/0>?/@{z_@1222211/-)),/2445742110.,,,+/432.-+-01567610011114887;;579741/.-.,,/1/----299841../0-,/2344432210-/0-3FI@8412767::///.-)..1894,'%$*036433353--/*('(*.47:81*)((('%*4.+2/39<5/,*+++*,1:@5001110+*++DK(6Yb`^H5=;975552/,)020/140,,.0.-,,,,+,,.110287,&')((.792)(.687765661+**((,.253,($%0BE:6>C;11-()-/1=E3*..-..+)1;;510*'*166:;88:AZN8BB60-**,-.++048<>A;54241..0546891(*0)&.,+.576547=AEHIFFD5?cXD91*,7B>>>@FDCNTICDD:-)+;H=4,((&2:60&%YFtC9HJC85:JU>14+)-123A]nnigaWUSTSH(\u001f/9;:=MLJHIO?<8XV:455-&-vsotz{yyywvvvusomifca\\WVXXWXXXZ[ZYY[[\\_`_^_abbba__``_`bbaaabbba_][ZYYZ[\\\\ZXXZZWVWVUTTUUUTTVVVVWYZYZ\\]\\]^\\ZWVUUVXYXXYZZWRPOMNOPPPRSQQOMOOONMMMNNNNOPONOONOQPNLMMLKJIIJKLNQSWXXWVUTSQQRUZ\\^_acdcdbYTRMLNNMLKJLLLKJKLKKLKMNMR\\```ba^^bdb`^WOQX`iqutpdWPPOPTUTUZ`dfbZXXWWWXXWWTS_~{celoeZZ[WVZ\\[]^[XWXXWVWWUTTSWcf^`ihaa`_``]Y]cda``^billommrqkkoqtvwutrqprxnjsr~xwndklmqrrmaadjqqnuz{w|~}x}~~znc\\]^_]____afw|nmnfgxoknoqsy}k`^^`iZ]fjjlkigeb^bknjf`bj|nWaq^^_wgmpbWQ]gW`~جOV\\cghmspb]\\\\ZXUW`innnonmnrqkkXWPXbc^^beijf\\Ycllknotqilomlkkmjvxme]]]ag`^nqvzrmmp}~g]\\\\[Z[[Y]da____^^]]]]]]`a_\\`eb``dllaZY^erxupedk[aa_^^]]\\\\\\^adeedccfYiϽoMVVVVVWVWWZ\\[XWWVWXYY[]]]]_[]^USTVYZ[[ZZYYWUVWWWXYYXYXXWWVWWWWXYYZYXXWX^XU^cgijigffhiijihggfhf]VWWW[bgijebbbaabba`^_djjjiiijgeb_^\\[[[ZXXWW^oeXKKPOT]\\]^____\\YXY]__`]XN[k`UTRQSTSTY]]\\\\\\[[[YXYYXWTQOMLLKKJHHKKNMN»qWNOPQPNNU\\ZXWURY^TMORQPNJLQQMJIHHMO^η]gzsd^PDCDDCEDDB>:8:;=>???@?@@@BBCCKF=<<<>>==<9;?>>>>>>>>>=<;;:::8777889;<:9987789;<<==?@@?@A@>??=<<<=ESWVY[]]^]_b^D:=>?>>??@D@=@HHMF;;;<?KI>NRNLHHFFGGGECDFIKKFKMNOOOMKJKMNJ@;>A@@@@AA@?ACDDDDDBBFNMJKMRROPSUXZ[^_bdR476544:8;OQ?=<<=@BCBACDDDDDEC@>>@CCBAA><<845=GJNNH=8@IIECB??A?@BEEEEFGHIIHFFFGGGFDEDBBCJVXBEKBFOTMB@???>AEIGC@@?H[^ZH;9;??4340+-273/8BEJE=93,+/;<79;<<;:;;;;;;:;<=AEEEGHHIKNQOF>93453000/.-.01100000-1DPD;N^ZQKMZ_ZSOMKHE@7/*;SB9=<<7447=:56?ITRE=5.6JJ25huS@5684100000-*.57789:83/--,+,,,145694,.7:89970,++,-/578=B;17<851.....,,.110/36:71..,++)****+,-02564343.'&4E?5422246940110.-.-3<<;=;2(&,/45431561.30*''*-/0240*()))(&*2/**&&*.00,)'()('+36420--/222/+Ii20:102-+./12442/*(*..,,1750-02100/..--./011265,&$(&%&)38.'&+2689982+(''(-02342052(*:B;5;>931.((,,1=:,).,*//,%(395/-)').128:8535AA992+/.))-..-.699<@>4561544356643.&'/;2%%'05=@6115=BDGGGD@87DE<51/0<MKE><AHJFIME;53.'*DTC6,('%)-/-\"CfuEGT=)+*2>GP=+,0/,0>P]a``]WTKJQA-.38?@ERKAJTZPQBWU723-*)+mjjtz{yxxwvwvsqomjklha[Z[YXYYY[\\ZYYZ[[\\\\\\\\[^`_^^]]]]]^`abbabdecb_\\YWWYYX[\\ZZ[[XWXXVUTUVVVWWWXYYY\\]]\\^_`_^]ZWVVVXZZ[YY[YTRPNMMMMKJKLMMMOQQQQQQRQPQQQOPQQPRRRPOQQONMNPQRTWY[ZXUUSQPPNLMQUWZ\\^``acdbb_YURPOOLJJJJJIJKKKKMNMLQUUW]abbbegeghdYRSU[ejnvypc[SOPSTRU[]`c`\\WTVWWVWVWTPWcbfpuwpki`XXWX]_[XXXXVVXWUTTSWcd]biklha`_^]\\[^a`_^_`jpmmkfiqurrqtwxxyuonmljhhltw{~pdimlmmnyvb`joprps}y}y~yowve`__^__^^blx|pjgho|snoqpqt|n```bi^`bccdeecb^`iohdaadmxl[xm]^bhuhe_[]YXReฯSXaegdhvs`[[\\[ZX\\eillkjggjmqcVXTQXd_\\^_cijf]W^jnlox}rkkkjklnjkxqf`[X[Y]sqaequrmn}|ka^^\\ZZZ[ikb```aa`__^\\\\Z\\\\[[^fgcbepqcZ\\dntrkiji}k[`_^__]]][\\]`beecbaa]`оcNXUUVWXWWVV[[XVVVXZZY[]__``[Z[WTSVZZ[[YYYYXWWWWXZ\\[ZYXXVWVVVXYZ[[[[ZZYZ[[W]knkngfghjjjjjighhiiaZXXY^eikkgcbbbcdcbb__hmljjjjgb`a_^][[]]ZXVUUVSTJHJLV]\\]\\XTUWWTUXY]`cb`XZeg]TRRSSTTY^]\\[\\[\\\\ZZZZZYVSOMMLJJJJIIKMNJikTNOOOONQVXWVTSSZZPLQRQONJLRRMJHFEKPQf˳drxusfVEDFFEGGFC>999:<>???@@@@ABBCDFB=>=<>>><;;<>>>>>>>>>>==<;;::9778889;;;9998899::;<=?@?>??>=>>==<>@HT\\[WWZ\\___dcG=A@@@@AAACC>==<?;:=<=@KBBSTOKJIHHGGGILLKGHHENTKPQOMKLMOOI?;<<?BBBAA@@ADDDDDCBBDLNKKNSRORTUX\\^`cfkX3862/6:;>=@;<<;<@@?@>?EGEDA?==>@BEDCABA??<:<DIJMPMB9<HKGECA@DCBCDGFEFGIJGIFEFGGHGEFDBABBGFNgXFIPRLCB@??>@FIHFFFCJXU\\WB7;<<8687-.022&.AEJG:3-,.07;86:;;;:;;;<<;::;?CEDEGGGGIKMOI>844420220-,.01110/..-2BOE?Sb[RJKY`\\WROQLG?8316?>3;9665549<86;@IRK=1,;SR:9[nU==CC@:4222463/4<;:88741,(*,,++0234<>4-07>><:7,'(,./1488<A9/9>720/.,++,./120-4884-+)&&(**)*)(()++2=<7642/));>1340/.771033100/-7EMRUVQ;&&*+1331252032*&')++/331.,***)(,20,*'%&')000..---.45210./34315DFN4..+)('(()+.660,)),+'((+-,+,/33334442/.00000/.+*)((()(*//.)&)-3653-(&''(+//,.27=?82487678874/*).1672./0+)/.*$&,-++++))/457862/57530+-2,(+-.1129:8:8756658:<:74432,'+3;7,)/6;@B3--3=BB<;AD?940//12129C@?A9BX[G<H@/*,10/>J71-(*,.172*hW9IK8,()4DMQC*'111589<M\\[\\U?79;<;30;CIOHEONOOWDRR0&-*,/0hkrxzzywvxvttpllmmnnjc]]][YZ[Z[\\ZYYZ[ZXXYXY\\]\\[[[[[\\[[^acb_bgffggc]WUWVTW\\]^][YYYXWVUVVWYXWWXYYZ]^^^_`````^ZWVVWY\\\\Z[\\ZYVROONMMLJKLJKLOQQQRQPQPPPPQPRSSRTUUUVYXUUUUXYZZZYXVSQPPONMNMKMPQSUVXZ[]^``^^[SPRRPONLKKIJIJKKMONOPNLOX_cffcacfjlgda]Z]]\\cqwtne\\VTUSTVXZ_a_ZVWWVWWVVXYTQSZfgejsviZXY]a`][[][WVXVTUUTWac]`ipqla`_^___`ba_^`biqojkhbgrwusqrtw|xi`a`^aceilt|udflljkpuypbdlnnuspu~uilyyv|}t|twuo^_`__a]^kwuswzkhedjrppopruu|n^^_`g]_aaabccde`bxqca^eskncbfY^[ap~ob]ggXSWoεߝfhjiifl}{abhkcZ]hhcddccbabcgbVqmN_aa]\\]_ekkf^W[fnlmxzpjjjjkmmjrvi`STXUTgiadilojgzkb_^]\\[[\\ca``acedca_^\\\\[\\\\\\\\^deccesxfYZddhnqptz{e`_^``_^][Z\\_acfc^]__YڗYVZWWVVWVVUVZ[YWWXYZZXYZ\\^a`^\\ZYXY[\\[ZZZZYYXWWWWXYYYXWVUTUVVWXY[[[Z[[YYXYg`Xlpknhhijjkjihghjjhhe_ZX\\bfikjgdcbbcddbb`aklkkjjjd]OPY_^[ZY\\XWVXTQQSYWNOX[\\`]SJKKKKORTX^`__]\\^d^UVRQTSU[]\\[[\\]]]]\\[[[ZYVQNLKJJJJIIKLNMShRNPPPONRVWVTSRSYVNNRSPONLOSRNIFFDHRRHdŰwxuuxl[EDHIIIJJD>:99:<>???A@@@ABBCDD@=>=<>>>=<;;==>>>>>>>===<;;;:989889:<;;;:99999::;<<=????>>===>?@???CR]]YY\\``adeF;ACC@@?@AAB@><:88;><:@PDHUTOLKIJJIHIOSOHDGHESYMNPOMKLNPNG?=><>BDCAA@@ADDEDDDCBDLNMKNSRQRTVY]_aeipZ/6545;9;>:===<;988:=<=?B@?><=@ADDDCCCCBAA?=@FIKMPOE8:HKGECCBBEHEBGFEFHLJEJHGGHIIIGFD@@BDB@Wk[HISSGDEB@@@@DHHFFHFGMMV[O<;;=>98721135129BIH:.+,19?9159;:9::::<<<<<<BEFFFHHIJKIIKG=634300240-+./0000.,,-2?LIGTZWSLJU^\\VRRQJA;87:68?4<=325568:<=>@CII</*@\\Q=;HMFDHJJHC>=;99997::;:8544/))+--,-13/0;=3/14=D@93+(*12441017=9/14211/,*)*+-..//-0541/-+(('(*()/.+/0--5;:65464/8=1.32/2:A?:71/42,,:LW\\[]`R2%'&)+,.0121/.*''))*16530-+)(',.00..,*+*)+.10/-/33552012/,,*)*75./0..+*)(())0;;/'(.1-'&')*(&'-1000110/-../......13.,-,,,+-00)$&,22.*(''(''+*&(/7;=B<57:8665410-/344310//+())''''(,23-*,49632212781..052)(,-.2555334/3:8788;?>62553/-///5407=??;1..2=A<428=:40/,/58645601JXZkZA6?:'',5>96:369,)/25940^}>AXL665>VNKP?69754442E]`U?/+-661/-9DGILKI:3:K>QW8*-,.0/mqwxyyxxxwurplggmqplha]^^]\\\\ZZ[[ZYYYYXWWWVXZZYYYYYZZZZ\\ac``egefjlkha[XWUWZ[__\\ZYXWVVWWWWYZYXYYZ[^^_````aaa_\\YXVVX[[\\^^^_]XSQPNMMNONLKKOPOOPOMNOPOOORSTTTUVWXZ]\\ZXWWYZYWTQPPPPOPPPNNONKMMMOOQUWY\\ZVSUVRLOTTSSROMKKJIJKLOPOONLMSY]_^YVZ`dhlmljfdb]Z`gijjigc_][YYYX\\__[XWVWWWVUWXVSTVXSYlqbYY^dfeb_`b_YXXWVVURVabZ]kvvna^^___bdca```bksrkhkifmuvttnmwzgZ]bcbabbbgtygemnggmsrgadeditupnruqlnpnow}|nj~y~d\\efqm`_^aie^dsuphgupfaadhjklmnz~s}n\\\\[[aX_bbbcccfgedtca[rw]ag`p}abof[Yr]boveVW\\wהdknprop~rwhZ]c`]\\^]^__]]cfb[|]gdc^]^_emnh^YYaklilruzypijmlllksym^TLORTlmnmjijgkzja^]]]\\\\\\Z[]]^adedc`^^]\\]]]^_bbbcex{gX\\{ejxzkda____\\[Z\\^_cfbZX^_Zd¾ׯ`RZXXXWVUUWZXZ\\[YYZZ[\\ZZZ[^aa`][Z[\\]]][ZZZYZYXYXWWWVUTSSSSTUVWXY[[ZZ[YWX[fpk]bljijjkkiigfffjnjgihb[W]dgikkhfecaaceffghkljkjijhXJOPa`]_iuaJ\\_SXTOVe`VY[^ab[MHHGHNQRX\\^]^]]\\[YY\\SQUTU[^\\\\\\^]]]]^[[ZZZ[UPMLKJJIHKLLNQOVsùbQNPPRRNOTWUSRRSWTNNRSQNLNRSRNJFDDFPVH@l~stvi[EFHIIIJJD=:89:<>>@@A@@@ADDCDB?==<;==<<<==>>>>>>>>>===<;:;:999::;<<;;;:9998::;<=<=???>>>?@@ABA@?:7=N[^[Z\\_adc@7?@BBAE@?AA@@@:9:>@>9EUNNTQLHJMNKJJKPNHDFKMKU]QNOMKJKPPLC>>>>>@ABACB@ACFFFDDCBELMLKNUWUTTX[]^bhlrY-65:=;::>@@>=<;955:;;:;===>?ADDEECBCCCBCEDBCFIKNPQH9:GJGFCBCDEMF?GEEFHLIEKIHHIIKKIHD>>AD@>L\\[CLTL;BEB@@@?BGHEDFFEEHLTUF==>==:855:::=<8AFG;-+-3COD14;<:9::;;<<<<<>DFFFFGHIIIHGGD;444312341.,,..../.++-0:HKKPRSSLHS]ZTQNIC<99;A?<B>?@7066789>?AAAAA:.)EcJ:9=BJOMLKJHCDFA;:9:9999889:4-*,.25323.,5;:7406DC72,,.24430*+5:554./322.)(+//--.0.-.011222.+*+((268;5,')18:86522=F>/.24<ENM>/('+,*-9DKTWX[R6&'$%(*-....-+++,/124652/+)&$)11..//872.,+++,-.243442///+&%%%$$&*/0/,)(+12-,3:8+%+2551)%*/-+*,..,+++*+*+,--..-,---.-,)*++,,,,*()283*&'(((''*(&+0006757<;862-*-0530/00-++)(()((()1;;3,),3730/1356311134.''*-2664202219<88845:;8698532/-*4:5?E@710/16<9632231++.059975421+<crg@:?==,%+3:89<:=E;*(/.055@]@>PDC`ulf\\MRZTSL:6<?=FSTD.%(+-+,138>AGMG6()-51ST;6.-/,.rsuxxwxyxusplhefmrpnke_^]^_][\\]\\ZYYYXWWWVWXXXXWWWVWXXY\\_``aeffgjllkic\\WXYYX\\_^[YWVWXWWWXY\\\\ZZ[[\\_```_`aaaa`^[ZXVVWY\\_``ab^WRPNMLNONMLKMNNNOMLMNNOOOQRRSSSUXYYZ[ZXVVVUSQPNMNOONMNPOMNNLLMLLMNQSVZXSQTXUMJNSSSTROMLJJJJLNMMNOOOOPQPOONRVX]dilmmlmmid`^^_cgihfecb_Z[afc\\WVWWWWVUWWWVVVST`bZWXajijihgeb_][XWWUSU]_[]lxwna[^a``bda_ceabktrjhmompsrrutsq|fZahmjghfadrzmjjiikourd^_^_ekqtqoompvtfg{jenYW^\\cdija^\\^hnf_kvqdZ\\g{rfaacfijkkmx}|b\\^]\\\\]_`aabcegihfs{hb[Ylq^bgY[oa]guusw]Sadb`efqͼZbc]aa\\`ffmkea^ZY[\\ZYa`__^\\]_]Lsfeie]\\^`fmoi]YX\\gljfjrywojilklkl{w]QMMMObvloqkgiuxy~la]]]\\\\\\[Z[]\\]_`bbcaba_]]]]^`abccdwygWgww|zzyrica``_][Z\\\\^``_ZY^caYh¾{NVVVWYYZ[[]][\\\\[ZXZ\\\\^^]]]_aa`_^]\\\\\\]][ZYZ\\^^_]ZXUTUTTRRQSSUVWZ[[[ZZZZX^ipopf\\hiijlmkgdefegimkhjke\\W^fhikjigfebacehlmmlkkkkijlOJURa`Xez|g[phUYWRObe]\\\\_bdaRHHJJNPNV[[\\^]]\\\\ZYYTTTUU[^^^^^_]]_^][ZXVYXSNLKJIIIKLLNRSLMoǼ^NONNXWMMTUSQOPRTQMNPQPNLOSTRNIGDCDMSNAKyprreZGFHIIIIIC=:98:<>?@@@@@@BDDCDA?>=<;;;;;=>?>>>>>??>??>=<<;;9999:<;;<<;;:::9:::<<=>>??>?>>?AAABA?=:98;IU[[Z\\`b]<2<==??B?=@@?@?<9;?DACRVUVQGCCHPMIIJJJHFGIMPMT`TMOJIHKLJGB?>>>>==@BEEABEFFEECCBELNMMOU[YVUZ]^^emovd66:<?=;;=<=====;878:;;<=???BDGFEECBCCDEGKKKJJJLOQQL?<FJIHEEFFFHC<GCCDEGGIKKJJJJKLKIE?=AD??FY_ANT>4?BA@>??BFGCBCCCCCFKQNB>?=>>;8<@=9;>=ACF=,+-5EMME>>=;:;;;;;<;<<@DEFGGFGGHGHGFC82224425651.,-...-,+,,0<IJMSSRRJFS^ZQNLHEB?=?DHDEH>84155557=>>=;9982-G]>5;CMOQPMKKHAAHH@;754565678:<5,+1795310/36?>3,.;>3-01034556/,58236436786.),131./11,),023585321122597/(&(.379:6-.>JC3+/9DNUS>+,.'(04305?FNOE5-,++143.,--,,+.5898883.+*)(&,770,--12/,*****+,.--.//./.*())*)(-892/-,/7=;01892+).2246-$).-,+,,,,)(''()*)+**(*+*)&''%#$&(*($&--).99,%&('-0*.2,+)(()/10598861..030-+./--,,,,,,,,2=A8/*'(./-./1340*,033/,)&'/8;72..235;;87842699:;8642/,+2959>=4/1//47112222/**.14873496.$0^{J8UZQB3./24;CEIKJ;*,48;?9,[vNCEQf_QOSdkg\\G<BGFFHE;3.//,*,38769@E9/,2/1)RH5<23/(2posxyvuwwspnjfeglooppnf`__`_]^_^[XWXWWWWXVUVVWVUUTUWVWY[]]]`cdeghd`_^ZWY\\[[\\^`^ZXWWXWWY[\\]^^\\\\]_abaaabbabba_\\ZZZXVVX[^]\\]\\XSPNMLKLMLKKLLLMMLLNNNNNOQQQRSTTVWVXXWXYXSPONNONNONKJLMMMLLLLMMLLMOQRUUTX^_^ZRKMOOQRQOLKKJJLMLLNOOOOKIHJMMOPPRU[`bglmonkjkid`aehijkkigcagibYTUXVVXWUUVUVVVUW[ZVT[efhmnkebac`YXZXWXZZ[bn{ynaZ]bddcbacegedlspjhmrqrtqmoorvzoc]_cgihmpiiu~pfbotd_bceiditusrppppfctxo|d][[Vhidf`]\\[^jjagxr`V[aml]adfghjjltztnd[]b\\aa^__``abdfeddeic_^d^h_b\\TTibOZ_jtceaX[dksĄ^WSLOQRRNOXXXY[]``^]Y^SU_^]YXXTndeod^\\^aejni]YXYdmmkpx}ypkkkjlkmztWNQQLVsqmolijqlhyna]^^]\\\\[[Z\\\\]^^_`abcbaa_^^^^_`be[juf[dtūzuusmjif```aa^[ZZ\\\\[[Z^a`ba^Wa_SXVXZ[]^``^]\\\\[ZZXYZ\\\\]]^]^_``aa_^^]\\[YXYZ\\`bb`_ZVVVWVTSSUUVVZ_`[Z[Z[`djqohlm`bjmoolifgggghoqokkmi_Y_hihjiiggecaddfknmlkkikikiKKS[b]MQpyu|pndXZVQO[_WZ]cecVFGLMMMLSYZ\\]]\\]_][VTVUUSY^`^``_]^_`[YZXROVYMLKJIHHIKLNPSUKZ[LOLTdZKMTTQOMMOPMLOPONNNPSSQOJGECDILOKFaymnk`[IFJKJIJIC=:99:<=>??@?@@BDDCCA>>=<;;:;<==?@?>>>??>>?>=<<;:999:;<;;<<;;<:::;:<<=>>>?????>?AABCB@=9:<99BQ]`\\]a\\=3>@=>?>?==??A@<9<@GFLVRTUG>=CHOIHIJJKLMMNQSLO`TJLIHHIHCAA?>>>>==>BFFCDEFFEEDDBDKNOOOT[[WWZ^bcgqt|rB7>???===<=>>?=:8779<<=?AABDFGEEECCDCCFHLNPPLJLNRRMDBHJHIHIIGHA9;FCCAACKOLLKKKLLLJID??DFFEDVbAKI/4<@@?>>?BGHDB@?@BDFHLPF?@A?>=;:8426?B;8AA.),8IJNXOB>;::;;;;;;;=BEFFGGEFEFGFGG@60112346874/+,,*+,,,*,1=HJSXUSQHFV`]SPNLKICADGGKEE8210100/28::8535:=8FU=5>MSRSTRNKIB@DFD?6-.1354427@9,,1443421012::10/370.35//26<<52552146789<:2+-0430-.11-.222357:<;<9100+'(+,/431793.481*,5@JQTPA465*.57/*.7@GHA>=778::5-+1551*(06655/+)()-.*).562-+.000-,,---.-,,**+,./-,,+,,+2><52368;<8//670-/./.-.,''((((,...+)++()+***)*-0-)%&%&()'$&'$\"'+()03.('&%.2.363.-,++.00269:7531/0.+*-122110//-+1>@:2*'''(()+--.-)%&*-.-*(&(2<<50/0468:;97769<<96875530.,-123344431/020/0/1473.265468:<7,7^Karlg[G1.4:EMQNGF:2@KF>/*opb_Q]~z\\GCHVlxgWXK=>@@DG;5<<4+'(1::6667666466*QJ6=;6.*;mouyytqrsqmjiffhknnoqrldb`__^^]^\\YXXWWWWXVTUVVUSTUVVUVWXYVV[^^^a^YVTTUVY\\]]_``_]ZYXXXWX[]^^``_`aaabcddddedb`^[[^_]YUXZXVVWWURNMNLKLLKLLKLKKMLNNNMOPPRRRSTSSUUVWVY]\\UQPNMMNOPOLJLNMLMMMLMOOMLNOPRRUZ^^_c_WROLMOONMMLKKLLLLMOOOPNKKMNNNNNMMPSW\\cdbbegikhdaadfgikkie_^__\\VSUVWWUUTSRTUTTVYXURU[[[htmec`cd\\WXZYZZWZdp{|oaYYafedceigefjotvnkrvtsvxpklqyo][\\]_chhimqrzsdp~pnpprtoptvtsqnmmjcgxc\\]ZSalbb``^[Zdjfjwuear~}{hdddfhhhilomfa[[o~eklZ]aaaabdcaaeehe]dpigZWQTT`]TSQ}dl}wkif`fhox~VZXWYZ\\_acgjfcaaZ\\aacbbsi[]fedb^bkjba`aabflj]XXXbnpou}{qlmkkllmxsZOOORtxiopmfcehov{pa]`a_][[[[ZZ[\\]]^_`beggd_^^__^bgW[kc_XP_ɷofggeceeb_a`^[ZZ\\\\\\Z[bfda``]U_º԰XTX[\\\\\\[[Z[]_^]\\[YYXYZZ\\]^]^_`_aa___^\\[YXXY[^``aa]ZXWYYXWWXXUWaea[Z[[`hmonnjilb[lprjccgkijgftypkkkic[`hihhihggecbdefjmmlkkgiikgPRZ^`^HNl_[]UUUSOTYQSZdeeYFHONMKKNVZ\\]]]][\\]YTWWTSY_a``a___a]VV\\ZQEOZPLKKHHHIKNOPRULT¬XLMM]iVLORROLKKMNKMONNNMOQQQPOLJGFFHJMKDTtuklf[ZJFJKLJIHB<:99:;;=??@?@@BEDBBA>===;:::<<>@@?>>>>??>?=<;;<:999;;<<<<<<<;;::;<<<=>>?@@?@@>?ABBCB?;98<;8:?KX]\\a^F>CB?>=?@=<?AAA:8;<ELLQZSB9>?FHCFHIJNTTRQQPQLL[YGIHFGHC=<>====<<==@EFDDEFFFDEDCEKOOQOT\\]Z[\\`fiksyxK7A@@?>==>>>?@>;877:=<>@ACDEFFFFECDDDDEHLMOONKLORRNIJKJIIIJKLH@?IKCA@FUYRKNMKLLMMIDBABFIIGEWaE@:/36>A@?>>BIJGCCC?@CFFJNG?@BB@>;5248>B@6498+),7GLLQOD>=;:;;;;<<;>CGHGGFEEDEFFGF;101223579972,((-5;4*&',8AJX[WTOGGXc`[XTSSMDELMNOF:5310/.--.157654?JMDCOK@>ILFDKJFDB?==;:=9,,25642.4;5-./02354313455422430021/03:B?768:9633452571,-0320--07;975443568=>6230*')-.030*+7;41-')7ELPPMC<840+2:91+5JRJA:9;<>A=72,,6>>5+((+---)()*,./+'%0=8/*05/.-,,----..,('((-011-*)+*-6867998787/.21.23012.,-+((+*+021//4660--/----./-)&&).01-)*,+(&((()++*'&(+,0;84134551/,.5:96321000..-154331/..0;;.,120,'&''*+**)(&%'),+(&&,6951./28;98;9448;=:0,44357510/4:867;<;;:8765202575016748>=92@vjeqnjgcJ123?NRM85><BID6'Dv][af_?CT]dotfD;RR>7;?@6/5:0(%&0==79967<<685+QJ6962-3Estvxwtolkmkgffghjoonopmgda]]^]]]][ZZXWXWWXVUUUTTUVVUSTVWURS[]ZZZWVWVVVWY[]^^```_][ZZYWWZ\\\\]^_^_`abcefffggfeda^]`cc\\WVWXXVUUVTPPPNMMNNNLKMKKNMNMMMOQQQRRRSSRSTVWX[_`^ZUSQQQTTRPONONMNOOLLOPNMMNOQQQSSTW\\cc`[TOMKLMMLKKLLLKMOOMMPOMNOMLLLMMMOSUX[XU[^XWZ]^\\YXY]__`_[YZZYWTSTXZVTTTTSSRTVWVTTTWTM\\sskib`b^YVUX[\\XZerzyob[\\affefhkibesrqwqmx~wqs|ynmordXXZ^bc`ekpy}uw~|{{z{|zwutrpnnmidrx]Z[]blfbb``_]\\aggkomozykgihghiiihiigeb^i~zgedcbacfbblnege]jwskd_YUR]]XSd^`tu{xdYali\\rܩXMZ`iifidcuzti^^egfabgfxk_ss`]hn`^cdedcccehf^ZZZboqpy|rllkklmnwo[ROMivkojgimoqoca~tb]aba`\\[[[[Z[ZZZ[\\^\\behgb__``]ciXSbb[VVMWmfgjnvpb_^\\ZZ[]]]_beeda_`[RtŸԪTX\\]]\\ZXWWW[_`^\\[ZXXYXYZ[\\\\]_`_``__^^][YXXXZ[[]]]][YVXYZ[[XVU^hc^[[\\`fklkmlmkli_jnj_\\agjjiiefikmjghf`bhhhhhgfffccfhikmmljkeeijfU\\cYU]KMs}TKXd[UUVUVMIN`efXIKONMKJIQW\\_\\]^]\\[^YX[VUY_abbaaec^TSSY\\PCCPWQKKGGHJLOOPRTMQȾVMNP`aPLPQPMKKKMLJLMNNNMOQQQPOMKIHGIIKMDGbmgmg\\XJDIKLJIFA=;99:===>??@?@BEDA@@>>==;;:;<=?BB@?>??????>=<=;:9:;<<<<<<;;<;;;:;<<==>@?@@AA@?@ABBBA>;:8<;;;:;FXcd_RECAA???@;;@CA@:9>;AJJIUF00;GKE;HIJKPWWRSPMKMNZbEDGEEC>;;=>=<=<;;;>CECCEFFEEEDDELQQQQW^_]]_bioqtz{R7????>=>>>>@@>;987:@@CFEDDEEFFFFDDDDDEIKKLMMKLNNMMMKJJJJJJLLIFLRNDC@H^aXMNMKLMOOJBABEIIHHHSU;2580/<BBA>>DKKKJKMBADDDGJFA@?@>:33<GJMC4/02.)+.7?FJKHB??>;;;;<<<=?DFFFGFEEEFFFHG;21113547:;:::8>JOQIA?=;?DJY]YUOGGXda^^]XWRHHPU\\]N3/3231.-,,.258<BKUTMGKJA;=>:59==<:7687026214883/-/0/../13332212344555433530/14=FC;6:B@720-,+-21-.021/..1:B?;876430.693021+()+-.--*&+137738DLQQPD2+0++4;><7.:WXA2-*,9BA>;8208CC70.-**+*++,,-..-*%-?81.07-(())*)('(+.+(()0011.+***-25577339<:4-*(,4526;962-),31/3840/37:70+-1**,-,,.1//0221023/-+()*)*)((+/.)3C<1045784/)+4<:20/123432/176-(*-.3<;.(.5;:1(&&&'),.-)&%''()(&&,5961./27997::2.1130**22357:979<;=?@BDFGGB=;<954442/236998510IuwuohiU73/3CKA3).:?C=9)HnapM2?[lknmgP4?ZW?7873--,)'%%1@=/2@?9BC95/+UJ54,(/@Fyxwyyvofdggfdefgjnollonida^^^^^^^][ZYXXXXXVTUVUTUVUSSSUVTTW\\\\ZYXXYYY[\\[\\]^_^_aca^\\\\[XVVXY[]]]]^bfeefghhhhhhfb`_`ba]YWWYYWVVVVUURPPPPPNLJKMKLKLMNMOPPPRSRSSTSTVVV[`cdb^[ZXXXWUSRRSSSRQQNLMNMLMLMONNMMOPSZbghaYUNKMNLKKKLMLLMLJLRRLKMMLKLMNNNQPQX\\XX]YQPW_^WQPTTRTYZ[\\[YVUTSWfj^YVTSRSSUVTSTVXVNVpxplga`]ZWUW[\\Z_ktwwn`\\bdgkljillb_qxrrpr~}ngjrrihgcZ[\\[\\abW_}y}~~u~z{zwxzzxxusqoooolds\\_honiedba`__^`ccc`fvpmkkkjklmlljfbdr{xwokgfeccjpl}yedb^mx{xyyn^TX_ioR\\nxupvuj`^d{bM[ennjjacwohw|xqghkisnT^aZY`ZUbgeccdcbb`\\YV[nroy|rmmkjmmnxhXSQSrqgfkosqkg]Ys{e^abdfb^[ZYYYYYXZ[\\XZXbgc`_``]ckZS_aVUV[WQi{yl`_^\\Z[]]^abdfeb^^]TeʷϜV\\^\\\\[YZZZZ\\^_][\\[YXXWWXYZ\\^aa_^^____][ZYXXYYXYXXWVWWWX[\\]ZV[dd`^][^dikiiikjlnqhab[Y^bfhiiid]Z`gjihigfhhghgggfeedglnmonmklkbekgX_d_MWQ[qn]R`zyaW\\YVNJCSddVMLNLKKJHLQW^\\\\]^[\\_\\[]\\YZ_abcddg^SPQRTXSE=ESSLKHGIKMOOPQTOP}RNPR[XOMPPPMKKKKKJLMMNMMPQQQNOMKJHGGGJMGASZbmh\\VKDIKLJIE?=;9:<>>=?@@@@@BDDA??>>>==;:<=>@BB@?>?@????>=<=;99:<<<<<=<<<<<<;:<<>=?@@?@@BBAAAABBBA>;:9::;<<?>GYdbZJEFIHEDC;9=BCA;;BB?@FE>416@OMCDJKLNPSTSSRQMOQ]jHCGDDA???>??=<<;::=ACCCDFFEEEEDEJOQQRX`_]__ajuuvx~~W8?==<===>>????=;:8:BHHHEFDDDEFFFDCDCCDIJJKKKIKKJJKJIIHJJJJIJJIKMLFC@C\\aYPOKJLPURJB?BGJIIHLXM,,272.;DCB?>CLOLHLQIECBCEFDA?=:889BJRTOA/,+-/--09>BEII>;<<<;<<;<<?AEFEEFFFHIIIIMG;:88733:?>><<CR^edcdffe_YTR\\`]UOGGWcb]]]XWXOINTV]]>+46442/---,.9IQTTRMIB;7646<@?<9864234/-031120.+++,,-/13334333335777653440/.05=B?7117=<554/.03432100//027;:74333322463.-,,**)))*,+(',7>@?BCDFEC9.*011:A@>91;NC-'%'/=DA@A?:79BD:442///0012210//.+1=511.2.,+,++*(&&).+)**25441/.--011.-003<<63+%&*1438??950)*6864:5103:9:4/291.1322694000-+.341-+++,,)')/563/7C@50/1111,+19>;2./23343104:7/,/247;71/27;7-('%&()-33*$%()**+*),4=901420036:7-*++++,-013449;9@D=>HKIIJLMKFDFA?><;923669;5//39W}wuvh\\G62/-3961+#+>JE=6?r|pwowH6?UgipkhqhODSY?5?:41(%(*,8@3$)<@@?=.)$,RD41((6F>zyyzzvnebdedcdegkmmlknojdca_]]_bb_][YXXXXXVUUVUSTUSSTTUTUY\\\\[[ZZ[[[[]^____aaacdca_^[WTUUUWXYZZ[_abcbdhihhiiheaaaba^[YYYYXXXXYXWTRQRROMNLJMMJHHJLLMOOOPRRSRRRTUUVZ^___^[ZYXXWUSSTVWXWWTRPONLKLLMONMMOPPNR\\bffee^SSQNLLKLMMLJJOTZZSLKKLMLLNNMNNMR^b_`a[TXaeda_]WOQX[\\[ZXVVVTUkziVTSSRSSTUUTTUWXTUkyrmke]\\\\ZWY\\\\\\dprsum^^echtrjhjj^T`vzoozo[Y^`]\\\\[YWZ_]Z[`fmwtvyyv~|{xvwwvutuuuvttsqppoqgd|f^irscm~qmhfhfcZX^^\\acb^`t}{z~}|ysmjjnpstofbcej{zuqnmprepp~ca__lvsns~{dZiyXSUTgo^UQceYfUcde^[\\`fc`]{ϹttsqreNdtXYb`Uel^]_ba`baaa_\\UWlpnurlmlljjvt]VTTYfjhmnmkd\\Y[_of]abejkga\\YXXYZ[[[[\\^U\\db_]`_[cl[T^`XUUX[YPX|ê~{|ra[ZZY[\\\\]bddeda\\[_ZYɵ̀Z\\_\\ZZ[[\\\\]]^^]\\\\[YXWVVVXZ]`cbb`_```_^\\ZZXXXXVWVUWYZVUW[^a\\Z^a__^\\\\_djkhejieijni\\ZW\\abghgggefdZUekjjjiggggfefeeefinoooonmlrh]bm]Za`KT[lr]]vr`etj]^ZTQTFH_`UMLLJJKLKLLO[]\\Z\\[]]\\]^]\\]_cdbbb[QORRRQQSIFEHLNKGHIJMOPOORQShQNSSUTPNNNNMKJJIJIKKLMMNOPPOMMLKJHHFFJLHCCQYTZjj^VNFIKLJIC=;:9:<>>??@@@@@ABBA@??>>==;9;=>@BBA@@@A@???=<<<;99;<<<========<;<>>>=?@@ABBBBBCBBCBA@=::9::99:?>7?SabNBFJGFFJA8;@BA<;>B><EF:/4AGKKJQONOPQRRTSUUSSS_sPGIEECCCCA@>===<:;=?BCACFFFFEEEGJNPQRXaa__]]hvzzyyb>EA<;====>????=<;:;BIIB=BCBCDEFEDCDDDEHKKKKKJJIIIJHIIIIIIHHJKIKLLJE@CY]TPOKHLSWRHA>DGKJIJOQ>+.59714:<BC?ALPH@CRPHCBBDDCA?<:69JUQRVP=-13.--.28=>?AC;77:;:<<<==@DDEEEFFGHJKJMRPCCCC@55CEB@??DQ^cdejmmnnjddfc]UOGGUaa\\ZYWX\\UJKPFGTM84545421.+*/ATUTPIB?8232//5=B>8532.+/42/.--.--,++***+.1346788413:;96531.--,/7?;50/5=EH:6<64968853355345642212344345440,+--,+)*,,,04<EFB@?=<;:86427:7:><:948=0$$$,9><<>@=<;:?@=844411467:;852/.-16/35./.--,-..,+'$&'&')/410.-+,,.-*'(.28=511-))+.037::443))5>:/57443767527;45667995.,-,)'*141,+,--*&&,7;6348>>9/+020.,/7=<81.044234568:;<<::;;6.020262+(('&((+.-)&')/44010/6?7,052+(-240)*,,,---.12246639?<?EHGGKNNPUWOIHKIFE?;;;;;60164->sR53451,+-/0/.,3BJ??GNG^QGihmxlS:J;<H]c`lihz}Z;=PYH;;:4,+3748:* &4A<83''7MT:3/,.:B2xxyzxtkb`cdcddegjlllmmolgdb`^^bed`][ZZYXXXWWVTSSSTTTTSSSV[\\[]\\\\\\\\[\\^^`a``bbcdddddb_\\YWVUTSSSSQRSUZ_acgihjkkkhecceca][[ZYZZYZZXXXUSRPOOOLKMNLJJJKKLNPPOQQQQQQPRTUWWWVWVTSRQQRRQQSVXZZZXVUVUQOMNOPONOPPQPOU]beimmf]RNOMKLMMNNS[_aa_WMIJNNMMNNNMNNWdhb^___chlqsqbUU^a[YWWVTVTUit_SRRRSTTUVVUTTUWTTgwtqocXY]]ZZ\\\\]gonmqi[^d_h{sb`d`XUT_mmu~ubUSWWTVXWWVY`db_]igxzmouwx}{rnrwxxxxwsqqtvtqpomnrpwzWOSXSVmkRW`ddfhf`^]\\affaf{}}}yuw|}pegkopomc`digg{xutsyegzlp__^bnrjjjq}|fmlf`VWvʶfRROsfRYyɔ\\cga\\TTUZetfVetuzvuti{`PZ^_aYK{yj]]b`_aaabca_imms~vlkmmltteZWUSavpkqtke_[ZY[]fh\\a`^billf^[ZZ[[[[[]`]\\\\^aa_][cm]V_]YWUTTW[TNfzropnaXUWYYZ[\\bfdcb^\\[^_ZuǶnT[_\\[[\\\\\\]]]^^\\\\\\ZXXWUUUX]`bcddcbccaa^[YYXWVWXXWWY_`[WZ^bd][]__]\\[\\]eljebid`dfdfb[\\beeghhgfcipfX`hkjjigffffeedeeflnnoonmmltiU]g`Z^]QS\\ZRa\\]|bQ]h`]ZTQTLIR[RLLLJKLLLNIHS\\\\\\\\]]]^]]]]_acb\\VTOOPRRPOOOOOMHJSKIHHJMOPPOQRNTyQNUSTSPMMNNLKKJIHHJKJKMMMNNNMKJKJIGFFJLHFBADHPcmd[QFJKJHD@<;99:<>>??@@AA@AA@@@??>>==;::<>@BBA@@@A@???=<<<;99;<==========<<=?>>=?@BBBBBBCCBBCAA><8:9:9989;;;<CU_KAGD<=DKE=>?BA<97@C@DHA/3C?@HOWSPQRXZXVVVYXZWc{WILHGEEEDC@>?@><<<<?BAACFHGEEEEGKPRRSXcgc`]\\es{{}x`6DC=<===>>>???<:::<BEHE??AABCDEEDCDCDFHJJJJJJJIIIIJIJKJJJHIKJKKLLLA@CWZSNNKHMUYPEA?EHJIJMH9..069752,4CGABMOD;=NSKGECCDCB@=;9?NOPY^\\K623..-/58;<<<<956::<<<>?ACDDEEEEGGGIIJKNRLJF>98;BBCBAEKOSWY]__chlnkhf_WSOGFQ\\^YTRSTWSKKJ:19EC73565354+(7MVOID>;<:9:730/08;5110.,/46.++,..--,***)**,2668:9635<>7531/,-,-18=5+*3HSPLA48:9@==<748>?8689977778:7101221..00/.../13;ACB?<:9:8654248967::767540-)'(.441368758:<><9544436868<><7/.253./1,++**,+++,./(%'+.--.-+*)))***(&)/6:9310-,,,,/3114677.-9B?11878833574685321/463.+)*+.045/++01+(%'.8<5/4:7121.1421259;;810031/02333222587751,021231-*)(&''((()+*+3<82344::.)-/-)(*,-,+,.-,-+)(+048630267;CGJGMNQX`c\\TNPRJHF=9;;:545:<15sH*9C?3,*-./2::35EF;;><af-)@:@mebi=,02<L]XUegfsqO7>AIXM988209=1-1+'(*641744FRH4320267-omjryui`^`abcddfillmnlmlhdba__dgc`^\\[[YXXYXWVTSTUUVUTSRSW[\\\\]]]]\\[\\^`bcbbbbcedfgfc^\\[[YXXVTUVVVX[^cfhjkkkkmnkigggdb`\\ZYYZZYZZYYYXVROPQPNNPOMMMLLLLMPQPPRQPQPMORSRPPQRPNMNNNOPPPSVUXZZZYXXXXUQOPQOPPPPQRPRZacfhkkcSMOOMMNOQUY\\]beeaZTOLMNONNNMNOPX`^YX_dgijjnp`SV]a`ba]WSSTVcbRRSSSSTUUVVUUVUUUU^lwwl\\TVZ\\[Z\\^cjnkjnfX[\\Wj|lVT]]YZVR[lzx`W[WWWWWWXXXY^fdc]YW[tupruwzzz{}~|urvxyxz{ywutwxuqomkks}y\\T[WSYQJYcciglf[\\][_cfbauystw{whehkkkliefkl[b}~|xqriZXrq^__fnpkklpt{umtoll[QǓd_dr\\LKsqchl`WUW`[OTh`XWhpdhpustVU\\Y\\]^XYwva]__```acfceusn|{nill|}cZZWTQaemtlog^\\\\\\\\\\]^om\\`_YU\\gpph_\\[[[[[[Z[_\\WYada^YblVOSRSRRQTVWYZOQy{onmbXTX[ZZYZaeeca^\\\\]_]VǽbV]]\\[[\\\\]]^^^^\\\\\\YXXWUUUW`gebddcbcbb`]YWWWVUWZZYXTW^dccccaZY^a_]][\\aike`bdaadghon^acihfhkhfcgqqjgijiihgffffffeeefjoonoommmlaIOeic\\YYXTKHKRYeiaNK[_YWTRRNLKPNLKKJJKJKLGCITY\\\\\\^^^^]^_adaXRONOQPPQPPOOPPPKNTNKJJKMPPPOORNHlqPSTORROMMNNMKKJIGHIIIKLLMLLKKJJIIIGEFIKJFFIGEIZkkbRHJKIEA><;:;<<>>?A@@AAA@@@??>>>>==;::<>@AAAA@AA@@A?>>=<<;;;==========>>>??>>>?ABBBBDBCCCBCA@>;88999::9:9@GADLCBG?79DFEDCDC>954BIBBFC;=F=8@OTSQQVad_][X\\\\]Zf[GKFDDEEDCAABB><<<<?@AACFHFFFGEGKPTTSYenlfc`coxy|uS3B@=<<==>>>>?>;::9<ADGNPF@BCDEGGECCCCDHJKKKKKKJIJLMLLLLLKKJKKLLKKK:?CSXNKOMIMUZMACAEHIIJH</--.377;9,0>ECDOM=7=KVPIEDDDCB?=:<GLIPamhP;5,00.2<8===;:734:;;<<=BEEEEDEEEGGGHIIIIJJF9,.9@ACCCAESWRRUYZX_hpsiYXYSPMGENVZWQPPNMMHHD5127>6/2331480(9PN?53:BGIHGEDC@=:81.//00///-++-//..+)(*,,,+044455688753420/....28;5(,@OQOJE813:CB?>74;DE<68;>@?>>>>933200./361143./7<@A>70,,/4333212795498665540/.,,.,,,.../047;==95458::968>@A?5.2641+(*))*-1.,++*--*(+/1/,)'*--,+,./,+0574000))+,/6>=94567546971.6649621138=:51--/352-,2579:60,+..*&&+15632:;3.15202667899:841/-+*+-+))'$%.52/..03685300,&%'(((*+,,*,7<82.2582('*-+()((*+,+)))('%%&*594/-../6?EKMRX\\aefgaTJKMQJ62::966;C@60Qf{yuQSZXF3.+,.-.7=:7>F?6.0g_4),2,-IDEsd812/37AD=GcfgtiKAHE>JYL94424621221*(.-6INKABCFC742/-,da[bqrh][]^abccehkmmmllkhecbaadeba`][ZYXXZXWVTUWWXXXVSRUY\\^]\\]]]\\[\\^abcccbbccdfhgd`]\\[\\]\\\\\\^adfijijjjlmnlloooomlifdb^[Z[[Z[\\[ZZYYWUTSRQPPPOMNNNMMMNOQQPQRQPOMMORPMNOPOMLNNORUUVXXSQTVXUTRRVVRPQQQPPPPPOQTVZ^`cfhf`TQPOOOPRTSRW^__bfd\\QLNNOPOOOPPOPTSPT[`dikkkg_Z[][dhb\\WSUV\\ZQRTTTSTVVVWWWWVVWUSZhg]XVVWWXZ^`ejmjijcVUSTjudUUXZWVbmq~m`\\ZVVVWVWWXXZ[[[OYY\\jrnoqvxux{}|vtvwwx{yxxxwvvtroomipcOTZ[^]pV]abejij^Z\\[\\_`b`\\fu{~~{~~~zmeeihjlkhfkjdhrx{|{zujqtgqr__ahnnllpnp|{n^VXZfh`}{[]ieUZhcfvg[YY[e]QLLS\\Y\\foomrp|vYW\\ZY[]][`W{iaa````bdb_unx~pjjntZ]]UPP[kfsnjvbZ]_`aclplxs__`[TSWennfb_\\\\[ZZZZ\\[XYZ]]`]bhff`Z[^bb\\ZYXXVPHjollbXUY[ZYXZ`cba_][\\\\_^ZaɛY[\\\\\\[\\]]^^^^^^\\\\[YXXVUUTYdhdcddccddca_\\ZZZZYYZZYXVRU_edcb^WYaa]]\\[\\eli]\\aa`cgmu~s_acijimmfddfimomkkjhhggffeffffefinnmnnmmlm`AKtue]TYZNJHJLOPPTOJOWUTSRSPLKJKJIIJJJJJKGADKSZ]]]]]^^^_`b^ROPOOOPPOPPOPPPNMOPSMKKKMPQPONQSJQmSXQLOPOMMMMMKJHHGHHHJKLLKKLJJJJIGGGEFGIIFFHJGFShodTJIMJFA><;:;=>?>?A@AAAA@A@??>===<<;::<>?@AAA@AA@@A??>=<<;;<<=========>@@@@>>>?ACCDDEDDDCBCA?>;8889899::<EIAAEAA@;:?HBFJHGB<9<?KLDCEFFDC>6:MRTRQ[hkefc_^^_[eaEIECCEEEDCCED@><<>>@AAEHIGHHGEFKPVVTYfruqmjgmwz|{tNDG@==<==>>>=>>;::;<ACFLQJ@ACDEFFFDCCCCFKOQOMNLJKKMPONNMMMMLKKLOLLHACEQZNOSPKMW[KBIFHIIII@72-++036::439BDFNH:9>LYTJEEEDB@>;8<HLOXgukJ<>)0325=;57:989749BC<<<BFGEDCDEEGGGIIIIIII@.'4>BCCDC@DV]UQQV[Z\\itxhPSYTOMHGPWZXTQOLIGDD>533533./00/142/:G@.,3;FJMMKKKLLKB8/+-221/,),.//./..+*)*,-/.2553313664/24310//./39=8,1HQPOHB92-7EE6337>D@879=?BBAAA?=9851/+1<;6:=4.28<=;:80%#*/3443335654543312661./,*.,)())2==>=<<:769=>?=:>A@CD=3.12/*),+++-110/....//.,./2-)/670,.57402442,-2/..5@EEA<731/.-+)(('16-,-*&&+4:::6/-049503<=9=@7340-+(&(,13325==67=>5.27867897620-+*&)+--*')1531008;5483011-((('((*++)'-67450042+(*.0+(('(*,+('''()))*-231.---.27>INNWifegjcR?6=TW=3>;89;@A720.-cv;45GioZ:--++++,/9;:51;D2&QqS3,-*+-+.+,63*++,0650+;]deoaIHORQIHTI/.14;500230015;HRTT[Y\\U@5/+'.^][\\aeb[WY\\`bcfhhkmljjkjhgfdcccbaa`][ZZYYYXWUTVXXYYYWSSW\\^^]]]]]]]\\\\[[]_bbddccdeffda_]^__`abdehkkkkjijmnmlmoqrpnkhedb_\\\\]]]]]\\\\\\YXXWVRPPNLMMOOOOOOOPQQPQQQQONMNOPPQQONOPPQSWYZ]\\YSNMNPQQOOQSRQRRQPPONNMNRQQTY`ghgf`[SQQPPRRQOOTV[agge\\SNLNPQQQQPNMNPOOPSZbiklmliecX[aa``\\YVWUPRUUTSUVWVXYXWXWXURQSUUUWYZVU[`acfkiij`VSSZij`]]ZZVSk}h\\VVVVVVWXXVRQPS^[]fnqrsuxxz|{wuvvtwzyzxusppppoqnkw~}XPTWZZX[Wbfcc_hii]ZZ[]__debllr}~{}|yvgchijlljhjjovvsqpmliiryxze`^cilmlmqmmmnpsf\\NQUS_fljnT[Ÿ́c[Wl]\\_ndX[VTWXSVWUSadwkYlnaZ]\\]^^ZtUh}{kgda_`abb_fxysmhvl_`^TMT[vnfne_^dfmtxvvplutc`b\\WTR\\hmkfb_\\[YZZZZZZXUT[b`awwnw{j`]YXXTWTtujlcWTXZYXXZ]``_^]\\[\\\\]\\Vp~T[\\[\\\\\\^___^^^]\\ZZYWWVUUUZehdceecceedca_^^]^][ZYWXVPOWcecb\\W[]\\[[ZZ_gmdW[bdfilut]_ahmstofcbdeimnmlkihhgffefgfffgjmmmnnmmllgMSwseXIWZJIIKRRPPPQOLPPOORTRMKKKJIIJJJJJJFDGGKV]_]]]]]]^^[VSQQOOOOPOOOOOPQRRQRYOKKKNPQQONQRPEioYYMKONMLMNMKKJHHFHHIJKJKKKJJJJIHFGFEFFGGGFFGGFQhofWKIMJEA<;;;;=@A@AAAABBBAA@?>>===<<;:;=>?@AABAAAA@@??>>=<<;<<<<=======>@@@@@>>?BDDEEFFFEDCCA?=:788887789BHG>=FCA?>@CJ?GJE@>>>CMQJFGGEEC<554DTVQQbrqoqmdbba^chFIFDDFFFDCEFEB?=>>>?ABGIHFHJIGFIOVWU\\kwzxvwtw~qGEE?=======<;=?:9;<>DFGHGFB@AABCCDCCBCDDJUWRPOLLLLOSSQPOPPNLLKJNNMQWSHTb^^WSNMVTEKSJLKIIIEC@4+.43457988?DFHA;@@O\\TJGEEEA>;979>?I^kthH>:2145478569899@E56A=:7@GGDBCCDFFGGHHGHJHD=16CDCCDEDADU_VQRWWNYktxeOW[WQMHKU]]YVUONMHC?:654320.-./..143;C5(08;BLONMLD=<@A:1*.550-+*,24200//,**+,.346963324553/0542001004:?:/3FPQOH:3868FG1'/9CA638:>@DECDCB@><73.'2C<:F=--476348:4-,1146555433651120./8<3,/0,0/(&&+<NIHC=;;>@@>@A;3475:A>3+(**)*.-)(*/3788888870*+031.48:2-.:?855322.+4?:17GIE?841.+)''()*-,33/-+)(-454430-*/379;=;8<@:7::3+&&*.110139??BGHA89985487630.+*('(.30*-564102:DB4042.12010*&'()))((-10011130-0386-))((*/101.+*,-0441///.,+177<CCFVfgehj\\I:2*A^S;:8568;5+/30+O}P4+&1LM<+'(()***+121-#+>@4981631+')('**$'-,,04741+,IahcOEILR[TNINH0,=A4+-2=D@::?ERS]d`Z\\@0,0-0\\\\^\\XZ\\XVY]acfikjkkjiiiihgfcbbba__^\\[ZYYWVWVTSUWYYYYXXZ\\]^^]][\\]\\[YWWXZ_bcddeeddfijfc`__`ba``acfffffgijkjiiknonmmjfefea]^___^\\\\][ZYXVTSSSQNOOOPONNPOOOQQQQPPOOOOPSTRPPQQPPSWXXY[ZYWPLNPPONPRPQQQQPPPPPPPQPNORXaeegga]WSRQSSQPMLRW]bhjf`YPJMRRTWPMMMNNNNMPW]ahmnopiidbbcec]WUURTWVUTUWWXY[ZXXXYVRRRTUUWZZXY[^_adhhijbVSZdhe``_Z[YRkw_UVVVVUVWVURKOY^[]ckosvvwwww||wtwxv{~~kchjjknqprj`nvfUTUWVWXW[ddcbcgfne[Z[\\^_cdjrl}{|{v|mcghjlmlkjjpwywvricdhpqoprf```ejmpoonmjjlpojZWba[_fjq{dZ`WpˢdoϖN^\\ZldVTTTTRTTTTU\\g}\\`txqf\\^`]\\`VRdhW[ir}zlfa```aa`big|skl{}hfdYOOW^grwhdswensy~~pikiinf_a]WWWX\\dghed_\\ZZZZZYZZTSXab`|ujtujegjqvngaW}glgXRWYXWVXY]_____]]\\\\[]SnS\\[Z\\\\]]^__^^]\\[[YXWVVVTVZbecdedbdefdb`_^^^^]\\ZXVXYRLUbfc_ZYZZXY[[Zajh^W[clqqsy|b\\agorythcabcgknnmkihhhgfffgggfhknmmmmmlmdl^Tje_QD[[HGILRVUSQPOMMMLMOTTOLKKIIIIJJKLIGEHHGT]`\\\\\\\\\\\\^]UTSQQPONOPONNNORVYXX[^TKIKNPQQPPOQQI[|pcSJJONMLMNMKJJHHFHHIKKJKKKJJJJIFFGFEFFFGGFEGIEK_lgZMHLKF@=<:;;=BBABAABBBBAA@?>>===<<;:;=>?@ABBCBBA@??@?>=<<<;<<<<<<===>??@A>>=>@BDEFFFGFFDCCA?;968887678>HG>67;CB<?GJJHJIFCA@=@JKHGHHDCA:552<QWPWp~z{zrjhea]jpFIEDDFFECCEFFDA?>>>=@BGHFCFIIJGFMYZXas|uzaDGF?===>>>=;<>=;:;=@GJJJHFDBAAABCCBCBCDCFTZVQMKLLKPUURRRRROMMLHONMZp_LQkomeQQOVLBMOKMLLG?BDE@08:6434:9;>BC>;<=ET]TJHHFDA=979?85LYfsj`_=467665689;89;;A<78<60;EDCBBBCEFFGHHGFKD<>=BIGEDDDDBGV\\WUXZJ3FbrrYIY]XSNIO]c`[XWSPOLDA9565430------/36<?0,5:9CMNMLJA1,-1=FA;6211/,,49510/.,+*++.358:63222332//442/10-15;>;14BJPOF6.<I?HJ3'.:A=/07<@@DDEEEFCB?94/'3D:;H:*.551./59625433343344453000/,-7:831432-*-(.GTNKE=;>GJC:?C4-.+*,493,(''&*00.,)-6;=@@>?@:1+*/2223431--;B9454231,4<52>JJC;520,*(&'(,1316<;:7558843321/)(,5=?;55<>=<=84+&'+.10/1258;?HJIEB=9777740,++***,162.48642224;A3.10/24463)((()*)((,,**+/31/4:=>:0+)((,7@A??6,,.144/-...--177<=4FUXadiiV@<3+6QaF122343-(.1107DB8011('&('*)&'((*)+.34,%,9;0)17830,+-.07?<2+272563-'8WWIDDIGKX^V?<RN2250466?NRGIBHV?AYfd^Q.,101\\\\[[XVWWX[_cfjkkkkihgghgfedca```_^\\[[ZXWUUVURRSVYYZZZ\\^^^`_]\\[\\\\[ZZ\\]_accdefggfeehjifcaaaba^^`bdefffgiihhggikmmmnmkhghfa^_``_]]^]\\\\WVZ]^`a\\TNNPOOOONNOQQRQPPOOOOPRSRRSSQNNRW[ZUW[c`ZVTSRONPPOOOONPQPQQRRRRQQQRU^_ahif`ZVVVVUTQMOQSYfiecb[QKONPUPNOONNOOMNPRV\\bgkmnrqmkkjg`]YX^\\ZUUVVWXY[\\\\ZYZ\\ZURSUVUVWVUX\\^]`dfggibTWfiedb`^YZ^TgpWTWWWWWVTTEJ`\\VZ[]^anywqmlnsy{wxy}}~lajnpootuuwfVTXXVUVVVVVWXY^dcapsagf\\Z]]`gdaosw|v{s}hgijlklklihjotxtkfffjhijjgb_dlt{{vsxqeflmeqwrgbfeiowvqhghf^iaJ]^WVWUURTUVWYbs[anmmohZYXZW_ea^_Y]\\\\urf````aa_a]`wril|o\\`a[RV^cc]gsdkmiuymqqllkhffih`WTVUW^defdb^\\ZZZZ[[XUV\\c`plZ]qyhcfmrz~leYZmkp^SUXWWVWY\\_^^^]\\\\]]\\^XmhV^][\\\\]]]]]^][[[ZYXWWVVUUZ]bbdfeccddb`]\\\\\\\\]\\[YXW[aVLSaidZYYYZYYZZ\\ei`XZafnpsw}{c\\bjqoysfbbbbdhknlijjihgffffggfhlnnmlkllmgofP\\]TKGa]HHKNOUYSPOKKKKKLNTVQMKJHHJMONQMIGGKLJW_`]\\\\\\\\\\^[MMRTRPOOOOOOOOORWY[Z\\`XMIKNOPOOPOOQMOurhLILNNLLMMMKJIHGGHJIKJJJKKJJJJHFFGFEEFFGGFEGFDDOae\\NHJKGA><;<=>BBABAABBBBAA@?>>=<<<;;;<>??@BBBCBBA@??@?=<<;<;<==<=<<<<>?@B@=>>?@ACEFGGHGFDDDA>;:7778889;DGCD?==BC>?ABBA@CEDDEBCEHGHMRNBC?637>IUNVxyqlfb]irDGEDDDDDDCDEFD@?>>>=>@GHFADGHIFDMZ\\[ct~y~KAHC@?>>???>;=?<;;:=CIMJLLKGECCABCCCCDBCBCKUUQLJJJINRSPPRRRPOMLHIMLTpiQJovqpZQVXHISJKNMI;/8ADC<D?852156;;>C99:;DU]SJIIIE@:67=@78RPOhuxnG689888989:89::9:9685-5@BDCBBDEFFGIIHHG63@@@GGEDCCBAHW\\ZVVS<'+IpfGGX]ZTMJP^dba_[XUQNC;766653/,,,,--.27<=59:69INNNLIC6-+,/39BB;531..3631//.,,--+,/27610./0231/.242344258:;956;?LM@2+>SLLN:,/7:4/37<??BDFHIKIHB84308>38C3+/32-*,/4446531021224310///.++48976673*1<01MSG@>?;9>?83:A:760,('-10/3/%(3687.*179?EEDD;1+)+.131,*--/;?5042001.11+5HNJC7221-+)(((((),06=C@658998852.+**/7:515:<=>;:2)&(+.122121,/<FGHGB=::;972,*+++,331667952396-*+4/,/.045:91+)((*,/+'))(+28624<??>:1-+)+7DHFEE9,-00/20,,.031167=21PO:Jai`LGB898@VL644685,+0/...)'.-*20+'&'.0('&)+)&4GJA5''0-(19:1.01341=UZC.55,183,)+479AILA<NZWA03MP2)6@=;?HRW\\JFM2'8`o^eT0/31\\[YYYWVWY]afjkklkllihghgeefca`a``_][ZYWUTTTSRSVX[\\]^^]^^`b_\\^_^]^_abceeccefgggfeefgggeddca___adeehhhhijiiihilnmmoppnifdb``aaa__``___afghilleXNLPRQOOOOPSSQPPONOOPQQRRSSSSSY`edXV]b^\\`\\USOLMNNNLKKMPPPQQQQRQPQQQQSY^befeeb^ZYYYURPNQY_`_]`c_ULJMNOQQQONNMMNOPRW\\`bdhjmqrniec^\\ej`UVXWWY\\^__]Z\\_^XSRTTTTUTPPX`]\\bfhggaYdph`_a_]ZZ\\Va|]SXXXXXXSCXPTZYX\\m~xkcflnpsw|wdkz}zy|}{ymg_RSXXXWWWWUUUV]ec]^Q\\YZ^ckpgbpx|yyzz}{zrfjkiijklga_djnlhedb`chjnoa_iqw~ys\\`]bczsYWW[pwhhgffagŊ^IYYWVWVTRSVXYZ^|tukigkpjizqZQPTXZ[\\`aZf}zg_`````_a^ftrfor_RVX_]]bcaZehlkjpmcvtqrhdqwuupileVW]achkf^ZZZZ]^\\WSW]`f^X]df`[_irumfb^`ZoineWVWWWXXZ]^]\\[ZZZ\\\\[]]Uݽ`Xa_\\\\]]]\\\\\\]\\ZZZZYWWVVVVXY[]aegfcccca^[YZ[[\\\\ZYXX^c^UP_laVYYXXXYXY_gaX\\`bdghmuxd^ekpuyjbbbbbcehmkjjjjigffggghhikmomkklnmq}rfts`KFc`NONQPVaXRPHILLJLOSUQNKIHIOTUSTNJIKNML\\b`_]]]]^^XGENQRQPPQOOOOOORWZ\\\\]_[PKLOPOOOOOOQMPiskJIMNMKJLMMMKIHGGJKJJJIJIIJJIIHFDFEDEDEFGGFFEEFFR]ZNHKKGA><;<=>ABBBBCBBBBAB@??>=<<<;;<=?@@@CCCCCCB@@????=<<<======;<;<>?@A@=>@@@ACEFHHIIFEEEB>;:77779:=BGLHGFDCADEB><<;<>??AFEFHHHJOPOEDN=39AEJITwpgd]irCDEDDCCDDFBAED>=>>>=>ADFDADEDEEGJV`aeuG@A???@????><<?=;:7>GMMJLONIGEDCCCCCDDDBBBDHLNKJHGGKPQPPRSRPPMKHFLLLcl[Hn{sr_SYXGNQFJMH;(+<EDEGIC:53113657@>:8?GV]SKKKKG?957@=4?QJ:Qlj_H:;:99999989;;;<;8663-1=DDCDBDEFFGIGGF>02659FDDDCCBCIT[ZYSE1*%4c\\<KX_\\TKJP[ceefd]VTPD:767774.+,++,,,1:>>=>50AQPMNLHC93/./05:58C?5212210//.,-10+*,053+-0212201/./..23149:864963CK8.)1KSQN;./122456;>?@BILNOMLF8578;915;.+02/,*)-0468741///0131------,+1699;753,9J=8II<17@5,+,*.699<=:73*'+-0<=.)4:=;/)1439CIHA80+('*0731///1;=.(-1/./,++-;NRKC:762.+*))(('*+),5>;1../243/*'*-.,/4513:><::90(&),.13763//8?GHE@:9:<<71,)*++,04217;7791.99+%%++*+.268:71,*))+-2.'&'+3;958>?;73.+-/-/=GECCA4-/44340**07856775-=Q>*3FVMBF<4::;@D=727E<+/0.,+,++,+')3<7*$.8.)(*.02>NOQK5'')/6;:3+*,.012<OUD::;;;4+*2-.00HF01EU\\G-(4KK<=??ABBAK[NAIB1)Fm_XuZ.,0ZZYXXWXY\\bfikkkmmmljihhhfggecaa`__][YXVUUTSUWY\\^`aabaa``bc`^`a``^^a`bddddeffeeeefffeddddc`^`abdfghhhhijijjhiklmmnppolga`accccbbbaaacgihgiloohXJLRSPOONPRRQPPPONOQRQRRQTXZ]cefif]XSU^\\[a_YRLKKMLKJLNOPRSPOONLOQPOOOQW\\fopnjea^^\\[XUQPTYYX_nreXPMMLMPSPNONMOPOQRV[\\YW[`dihfdegd`a_\\ZYYZ\\Z[^bc_]`_YVUSSSTUTUSW]][^diid^[mwocZ]^^^[YXZa`euaSXXXYYWAcUTcYWYjxiahnkkpwlpz|zw`VRVYYXXVTTTQZgaTvYMUVWW`mmeagw~~vrnjvxyfjjhijjjf`^afgfdbaaaegfno^\\lpnq}xpa_`fhmz]UR^hSUWWYXYRXTSTUVTRSVX[YVflbgmnpoqcZLBFM\\e^Zwt`^_`a_`fgqm|rirlYQSU[^abaa]]_wkmofao|{wnihrvtydWZ[\\ampg_\\\\[\\^\\XSSW_f`^^ZUTVX[du{rf`adjqsskgYXYXYYXZ\\\\\\[[[[[\\[Y[]Wݼ`Vc`]^^]]]]\\\\[YXYYYWVVVVWYY[[^cggcabb`]\\ZZZZYYXWVX]`c^QWbZXYYXWXXWYbd\\X`bbgklo{vd`hmszxc^bbbbcdelllllligfffffghilopolklnlhlsz^K]\\QPQTPT`\\SPIHLLLNPQRPNKJIKSVTSRPLNNPNM_c``_]]\\^`SDFLNQRRPTPPPOPORWZ\\\\\\\\]TLMQRMOOONNOOPauiHILMKIJLNOLKJIHHJKJJJIIIIIJIIHFDFEDEDEFFGGGEEECHTXOGIKF@=;;<=?BCBBBCCCBCCBA@@@>=<<:<>>@@AACCCCCCBB@A???<<<===>>><;<=>>>??>?@BBBBCEHJJJIGFGFB?<;8789:<@FHLIHFFDCCEB@::<>=<=<?EFGFGKIGLPCRV@>CBDDSzslg_huDDFEDDEFDFECEG?=>?>>?ABDDAABACFGFQchiuPDC==ABBAAA?=<<<<;7?MQMLMPNJFDCCCCCDDDDDDDA?CIKKIGGINQUVVSQPPMPX[JMK[ieDf|vs^SUTFRKCJHJMB:AGFGFFC<877789628>=<=DS]TMMLKG>64>E84JRJ>@NTRC><;:;;;;:89:;;:;<;72-.5AFDDBDEFFGGGEA743+-9EDDCCCBCLUYXZR9,,))I\\>IU`]TJINW_ceeea\\YUOGEDB@?80,,-----5?BB@>2.@OOLLLHA74576565.5DGC?;5210/.,)+9@8/-032-.6;=:864432//22/3782-,0/+7?30/,9JOJ8-/11489987;CDEHNNMMA4787522570.02.+*+.158<<74100000-,---,.133347::520;KH=>;92:>-&())-340389;<80)')4@;019<8.*//-18DJ=.++(&*-7888887:9.+.23,-*)(+:MRIB>>940,))(((+1.$&+--+****+,+*),0.-/560.8<55682(#(/0.09;6/-6>CED=8:=;5/+*-0-*')+/67306=5-6:.('('',1246:;4-+)(*,3/))).68405;90*(%&,//.2<CDC<16?<886.*179:<>91.3EB-++/>A@;/0:>=:65408L@03*++***+**'#)8=5+1;92-)2<CIKJML8*(1AE?=?4)'(-//1EZQ?AMOJ@9=A524,11'.;HL8&+,0FQC8BD>>22FRY^WI<9ZiCZR')YXXYZY[^bfjklkkmmmljijihhgggdbbaa`[ZZXWWXWWY\\^_bddcbccccdec__```^\\^_addfhhgfeeffffgffeeedbabbbdfghhhjjjkkjjjjjlllmnnmjebbceedcccbbbcfgedgijnqgVNOQPNMNQQPOPQRRQQTTSTUVX[]aecbglj^KMWZ`ggda[UQONMMLLNQTUSQONMMQQSQOMMQ\\efdgha\\ZZZZWTQOQSU]fhgfb\\VPKJKPVVQNNNPQQS[^ZPRUTW\\\\YY[cecaa_]\\\\^_[Y_ca_aa[XZYVUUUVXWVZ]Z[bfgd\\Wgusg[\\_``^][ZXR[pydUXXYY[BpJLicVU[m|rgbinmptw}~efrts|t_ZXYYYWTRQVbf\\MX]QONNOT[dd_XXn~~|wokkjzyijhhijkid_^`bbaaaaabcbdgg`_ddkv}zuwgYadjw^NReXMNUZYbZaj]POPSTRSUVXUXyx{afmjohkysXINQMSfytc]^`c_errvsnogXRSW]bbbaba[~{rsnpwcdep}}h`jrrrpwtWWVWZfnia]]\\]]\\YTTX\\he_^ZVUVTRX`pwmceow|tk~lfYY[[[ZXZ[[[[[ZZZZYYZ^Xu߳\\Wd`[^^\\]]]\\\\[YXXWXWVVVVVWXZ[\\`ijeac`^[[ZXXXXWVVUX^``\\ZVTWWWXWWWXX^f_Y\\]^dtxw}vebjtq_bcbbbacdknmnmmifffeggefjoppomkmmmfcjlsvXZULKMRSW^YSPLKKLMNOPQOMJIILPTSRPRPQRSQO`c`bc_\\\\]`TBDLNURORURRRQPOQVYZZY[]XNMPPLMNNNLOON_|ZDHLLJJJLNOLKJIHHJKJJJIIIJIIIIHFFFEEDEDFEGGGFDCEELPMGGIE?=<=>>?BCBCBCCCCCCCA@@@>=<;<>>?@BBCBBCCBBCBAA@@>==>===>>><==>>>>>==?BDEEEDFJLLIIIIIFC?<;899:<ADFGHHHFEECBAAA?<>?<<=FGDKFEGJJKKQCR_OHBBFDR|vqkbiMCGGECEFCDQRFK><@A@@?@ACE@=?ACEEAMclluŬTCIB@CCCCAA?==<;<<<@KONLMNNMIFDBBABDEEDEEDA>@GNPOKIKOQWYURPPPLL^yUGMVfoJSwwt[ERPLUIHIADerjW=?IHGD?>>>???>53:=?=:EYXNMNNF<78CG1-HRFFKJLOGC=;;:<<;;::;:::9;=:3,,3AICECDFFFFFFDD;2/19@FDDDCCBENWYWTI3#&)'.FBBO]]SIHLU\\_``abb^RQa][XUQD9212227?DDEDCA7-8JNLKJF@:9:;98511=HKLKF<11220.,-;KI<5565326:AA?;6595100/-155-''(*)/513612>JF2*0767;99935BA8BMPNK>/24/++0588530-*/30/49:732231//,*-21,+09<6,)-18622<FG=4/7?E<-)-/..030+,069<:1*-3@C93784-++*)((6F;('+)')-4436>@><931204==97,)8KPH@?>;620/.-,,-20*)*)*../0011235760-0661054036:8/%'171,/65222208A><==5-++,020,('.78/)+2<;2120.,**+02246;:1+)(()+0.--+/672,,0/+(('(-01/+3@A@>>@C=982,/799=@>8129<0***5?BC<12?IGA8.487@FKB-2.'(('(()*),388989:3.2:CFC=AHE82AOMIJJA1''*.35;>8169<CBDG=6>?1')&16/0,&),&.HQDCA;;3-<UemhWB3D[@1h}N7WWYY[]aefijjjkmmllljihhhgggggeedda\\[[XXZZYXZ]^`bcdcceffggfeb```_\\Z[^addgjjhffeffefgghhgggedcaadefgghjkjlnmkklkllkkkllkifcbdecccccccbceefhhghlmh[PPQOLNQRQPPRSTUTWXXZ[\\[]^ab`cfkpqgUMXaccabdd`WPNLMMNQUVUUSRONQRRSRPLMSUSSUWURQRSSTUSQOOQSUW[cihda]TLIR_\\QNPQQPQXbj[ORSPV__[TYegihfca`adje\\\\`abda]`b\\WUVVWXYYZ\\`dcaa\\PXnnd`aaab`_]^^ZYk}{aVZYYXUJUcreUTV[ixwqgfjnrwxw{whimqpvt\\V[]XQPRY]WSQRPPURHKSXZ\\XPQ^z{yolhcbeinnkhgfhjmjb\\\\]]]_`ba`_]baY_`]ajs{hmR\\ZYqӕcTRQVZ_sl{Yfs]QORTTSTUVM^tqhchffmj]Y`fxeSEEIQ[XX\\`b_ilhv}uoe`ZXX\\afdaaaafrmuqpjcc]izcdqvvqn|}UVWVW^dc`a_\\[Z\\YSUYXef``]XWXYZ^[irmc_bejicc}vh[Y[[\\[YZ[[[[[YWWXYXX\\Z[ߨ[[d`\\\\][\\\\[\\\\\\ZXXWWVVVXWXXX[[\\]elidc`\\YYXXVWWWWWVX\\]]Yf[NRTVVVWWWZeeZX\\\\Y`twv}vfckvl]edaaaabbhnnnnljgfghijklnppppnmnqhn}pvlf[LMLKLRUQPNLLKLKIIKNOONLLLMPRRQRSRSUSP_caef]Z\\]`ZHCJLVrbRVTTSSOOQWYYYY[_[ROMMMMLLLLMOM\\nLHIMLKJJLMNMKJHHHJKKJJIIIJJJHGGFFFFEDECDEGGGFEDEFIIJGFGD@=<=>>?ACBCCCCCCCCCA@@@>=<;<>@ABBBCCCDDCCCAAAB@>???>=?>>>>>?>>??><=@DGHGFFHLNLGHJJJHE><:8:;:=CFHHIIIGFFEEBABEFC@???JJFHGIJKMNJIEMNCGA?QKRxrnehZCIEEEFGEI[ZHMM=?BA@?@@AD?=?ACEC?Jbpnv²WAMKEDDDDCA>===;<<=@CILKHDBDFFDBAACDEEFFEDC??FNSTOLLOQSSRPOONNPMxmLKTghHHhwyX@QPSPIKF:ERSc\\8:JFFC=>?>?>AB718:==6:NVOMNNF:9<?>/,>IEEQUMHIF@><<<<;;:;;;;;::;?=3.3<AAFEEFFFFFFD?855<C?DCDDCCBDNWWWTPJ:((*&0B@EV[RJJMT\\][[[]a[]ckonkg]MA:447=IOJAADHMI>?KNLKHDA<965552/9LSPMJB8-+4;98759ELD<9889878=?=;77;832213597/'(*+-/124634=FA.'2=<=B97923<:2;IQOE5+..*''+07=971,,49507<6..1451.-+),10,/5;<0%&(.5534<C>:3,1DJ:0,240//02/*,146;:8;@DE?:74113/*)'$-<9+'))'$&17/3=BA>60/111CH:;1.9JNG@><9435642110122,.46886555547:<80-144553/-26:=;2*/?A3'.8:72,'+9>;:80(*-,,-.,).76-'').7:1+,...//0223553/,,+('*-/02117970++,------0232258;@CGGDA>3-079;<@A?<=><71/17><?DB@;@UXRH04?72LbVAD3(++(&-=?.(.268628942266/,3AOB5GPKQVUNA0'&/>D;3379858>FG@AF;**,&46(-1-,+)'.DSH8=<74=Taitf<)175'6j{jXXYZ\\^afiklkjkmmlkjihhgfgggghihfeda`^\\[[[ZZ\\]_bccdcegiihgghfc_\\ZXWVY_cehiihgeeddfggghhgfghdaabbdddefikklmmlklkklkkjjjjigebcdcbbcbcccbcfiiggddjqk^WVSPONMPSRRSTUVWXZ[[ZY[_a^`fjmpppm\\OPUUWXZ]\\UQOMLKMQRSRSSRONQQQRRSQOOOMLLKKLOOOPQRRQQPONOPRW^bgnpmeXR]`SMQRRQPR_qkWTWRWgqka[^gookfefeceicZ]``bedaedXSTUUWYXY^dhiga__cljggecba``_][`]]hw|`UYZZSuvRbjlsm`XSXjuspijnrwzwwz}ortuqhgimpqukTY_XQMLPPNfwQMR_iZOTVTOVUMVgemcxhggggfcegeefhjkmf[Z\\\\\\`bdcddehja\\ZXfw{z{|oP]dilxܥnUS\\benp|cctxl_\\\\[YWSRRKk`d}qa_^`eme[RMI[z}sdUF?IRVY\\]_Spxy{te[[^_bbfdbba`gqwusl{eb`\\dzbhvxurs\\UYXVX[cdc_[ZX[ZUVYX_fbbaYWYY[^[biifc]U[^^Xh}te\\^\\ZZY[[[]^^]\\ZYXXXY[OZ]a^[ZZ[[Z[\\\\[Z[ZYWUUVXYZZYZ[[\\_fhfd_ZXWWWWXXXXYYYZ[Ycp]PSUWVVVWW^d_XXZ[WWdjls~vedku~yh`bcbaaaa`clpnnljhfgiklmnnonrnmoor`Uqmjus{rid\\]`]VHGILMKKPRTVVTTUWWWTNLJKORRSRTUVP\\dcjeSU\\`e[JDHLSp~qWWUSUQNQVYZZZ[^\\TOMLMMLLLLMNMQSHJIMLKIILMNLKKIIHJKJJJJKKKJJHGGFFFFEEFDEGHIGFEDEFIGHFFFD@<;=>>@CDDCCCCCCDDCBAA@><<;=?ABBBCCCCDDCDDBABB@????>>@@>@???>???=<>@DHHGFHJNNJGHJJJID?<;9;;::@FJJJHHHGGEEB@BEKIGGFGJHGEHKKKLLLJJID;<:;WQR~upjlbFIFDDHJEIdcPE\\C=A@AAA@@B@?@CEDCAHbsrxWCLKFDDDDEB=<=<<<<@CBDIIC=9;=@ABACDDDFGFEDCBACJRTPKKNONNONNMKOQBSl[ISaWFJXkkODLOVLHH?37>=JK7;FAD>57889<AA73<;=?::ALOLMLE;86332/3>C=ANLGJGCB@>=<;<;<;;;;::;?@94267?EEEFFFGGHB5045794=CDDCCCDNWXXYZ]X8+**1?A=KXTLKLSZ\\ZXUTTNYyrvwxpaI<725>FGA;9:ALOJGKNMKJFDA:4/./00.9Q\\TH?82,*7DD>;:78>?;9;;<<==?B<788999988:8852..2530113456=D?1*5ABCC77;439519HPI;/-//.+*.02;<:50-4<977:4-14862.,+))-037:70+,.03760,4<764..<E910562.+-/0/+*39::=BFGFC@<72594,)((-681+***+),4338BC8.+,.245956524BJF@<:403752144-),/),7;>=:9851./4:70-113772-.258;<7+,<A6-4?@5/,)(05101.+++*))(().1+%%&')-1.)+--/1002253.().0/+*-0246789;70,,..-/0/000//1448ADEHNK9-.7:;=>@B@@EE@<727?<77:?NODSYZV:29=6AU[OE:,../0B\\Q,)43,192.2/,01-35,,421DPPUZXXN7&$+=IB;=CDHC78DGGGB8670*65),4=8,)'&.DO;17;27Yijwl=&))174<nZZZ[]`bdhklmmklmmkhghhfggggghihfeeec`^]]^]^aabddeeegiiihgggea^[XWWVVZ_cefeeffedefggfghe^^egdbccabbegijlkhikjkjjjkkjihhgeedcc`__``accbabfgeedcgpqkd_[WSPNORRRRSUVUVWUUUUW[^_bhnmligjpeRJINQPPOPPPOMJLMNOPPPQPOPPQQRSSQPPNMMMLLOOOOPQPPSURPPPPQSW`kqqqpfccXNOPQTSPVjrh_[X[hsrjebelomlkllkcZX[\\ZY^efacg\\NPRTVWWY^dimmc_mjbkihec][ee[Z[jdYYkw`T[[_wrdmkjnnnj_Ubtssqhqtw}{vw{~mdknfddiopsv||[YaYPMORSFRPRUfvga^`baWOZc]nsplhikgkquvslfeedghkjoj\\Y\\]^`cfhilqlfR`n~nxV]ivtlެ`X^aeeoxmdcdbbcee`YSQQM}rW\\kpa^[\\Ygg_XQKJQ[ex^OMORUTRIyv}yc\\^_bbbbabdc`bn}tuin}sa`_^\\wl`mwuqtwoUZYWWV^_`^\\YXZZXXYX\\eccd^\\\\ZZ[`dgghmf`ba`ZXkshif`\\Z[[[]`aaa_][YWW[OoʖT\\_[YYYZZZZ[[[[ZZYWUUVXZ[[ZXYZ\\\\]adc_XWWVWXYZ[ZZYXYWWujXWWVVVWXVX_`\\ZYYYVU\\fnvwfflv}k`aaaa___`_`lrpnmkiggikkjlloqr^aprjVLJIP[`jpkcbejotlQNSRUWY\\`deca^[\\\\\\]UKIMQRSTWWWN]cccVLOWVe[IEGJQWlxm[UTUTPORZZZZY[\\XNMLMMLLLLMLMKJIFGMJIIILNNMLKIIIJKJJJKKKKJJHHHGFFFFEFDFGJIGFEDEFIHFGGFD@=;<=>@CDDDCCCDDDDDBAA@><;=?@BBBCCDDDDDDDDDCB@@???@>@@@@A?@@@A??>>?BEHHHHJMPMIIJLLJHD?<;;<;<=CHKLHFFEIEDCAAACGJJJKJKKJHIJKKKKLLKJGB969ILNzuzbJJHFDHLAOom\\HaK:AACAA@BBBABEEEDAEauu}EKJIFCEEEFC?===<;=@DCCGIBBGB=?@ACBCDEFHGEEDBBBENQOJKJKLLMOPLJMN@CgbJNMLLKLUSFFCQXJGC;77<<AD=<DDC<77755:CA77BBDB?:;EKJKLE=70.12228<63@LLKGEE>;>?@=<==<<<;:<??<:8;9:GFEFFGHIE=410/.+-;DDDDCBFOXZUTVSK<,)*0=C<DXVOMKRY[ZWSPLCBpz{{}x^9,/15;@?:8:;<?D;7GMJJIFCA93.+,,//3HZS?522/-8EE9572/0213;@@@@AAA712424653442112448?;1/1149:;A@63:BB=5.6?936318IL>30/1041.133:;<9645=?7.00.27981+),)(,48972+-376762,&*56450.3:956774/++-./*+;F=45:?BDEA??;95/*()+/363-+*,8801234@C5*+--05203550/;HF@<93..0..044+((-(+57;=<;<8.*)07620223651+*02230/)',1/0:?9/--,+,,**,02/+'())('''%&'&&&',///0///0/.151*).21000245548:7871..//.//.../--/25<B@EKTA.07::<=?BDCABCDC804;=?917P\\UOGAQC16??@<:>62--6@H\\oZ..:5/4:9.&&(275;8,&$'6HR[[ZWYR8&&'0@FCFGGLJ;7CHID53A@8470&)1@=,(03--AI3,64?_fgvqH)),0:D:Ib\\\\\\]_cfhijklmlmonjihhgefffffgfffeeec`^^``aacdeedefgiijjiggecba_^[YYVVZ^aa``bccdeeffefhe\\SXdjedeaabcdghiihhiijkjjklkjihfedddc`^__`accca_acbcgijlmnnlf`]\\ZUQQSRSUTSTRQSSRSUZ\\_homig\\Zq|kVLKMMMNQQRROMLKKMNOPPPQRQQQRSSRRRPNMNNNOOPPRTSRSUWURRQOORW^eeadgilaWTQPWWNN]qoimfahrpihhijkmnlljlk^SY[]\\Y_edaem^QOSUUVZbiknmc[bi^\\filjaapycZen~bXVaWY`ejlpkjikllj]Zmupprrqmz|{wwy}xliiiifjoquy{kpm\\^ZQOSPI]pTRONsxouhYTUdd_bv}tphhonldmsdhlv~~xqhdbdgjkjpl\\Y\\]_aeijkloehSu{lfnlmdIPQW^_^}sjc_^ceWct۝_ac[SQYdhaYSQNV~aSZ`hppmvnYIYg\\]bbcZPYqy`TRNQSO~xwr|vcX[`bba`abbdebexwuviisk^^_]Y_~ecoqnpqo}uXWYXWW_cca^[ZXYYX[[\\bbf\\\\aa^\\\\_cccefbdegjhlh{lomf_[Y[]_`aaabaa]YX[WX}qWZZYXYYZZZZ[[[ZYYXWUUVYZ[[ZYYZ[ZZ]aa]XVVVXZZ\\^^\\XYWTeu_VYXWVVWXVY[[\\YZYUUVZnyvdfk|v`]``___^_``ajrqonmkhhikllllounT[osgSSRHGJOW^ea[dq~~^Y^\\_a_^^_`ab_]\\\\_d]PLQTVVTXXUN]g`XMJJGO^[KEHJPT_vyaWTUTQOQ[Z[[YY[WNLMMLLKKLLLLLLIEGKJIIILNNMLKJJIJKJJJIJJJJJHHHGFGGFFFEDFJIGFEEEGIJGGGFD@===>@ACDDDCDDDDDDDBAA@><;=@ABBCCDDDDDDDDDEDB@@?@@@?@@@AAA@BBAA??@ADFHIIJKOQMIKMPNJIF?;<;<<<BHHKLGFEDKEECBA@CKMKKIHKKIJIJKKKKLLKJHIC8:<?KtwiHBGFGLYuzrmdmU;?@CAABBBBBCFGHE?C`vxʵa?PJIEDFFFGFB>==;:=@DDDEGEFLG?>BDEBCEFHHHIDCBA@>FRNJMKHKKLOPLJLI>IifQKI>FHGIGDFDSXIFB<9:<:<DB>AC@<:;:868BA;=CGHFB;:BFGIJD>6/2721134318GMJEB@0,;BB?<==<<<;:;??=<<<42CIFFFGHGA;52210//<DCCCBAENXZRIKHB?3.(*:D<CXXRLLRX\\\\ZWRME<Wu~jB-),2568@CDDC?8976@HJJHEC?82.,,,00/BRE4/01/0:?>423-++++/7@EDCBA?4//12453555310358:>;20125:<<=<426972,,6A<10117HH7/011034034579;<;>?@@5,*,,13662/--/1015521322149840,(08640.367899951-.01.+2ENA1158;@C@=@@<3+)+,.0221.-,,4:222259<70..-.00//131/5CHA;62,))..131,,-1**546<><<8/,/37751254113.,,,++)*)*+.02;:/**++,,*((+141*'-1/-*'%'))**,./1./00.,././10-.32-0341/-+.578762///001/./2324655:;>KTN4%1:99<=AACEB>BGG=0.4@JB31BWaU>/@I<>?@@7%'-()(1CMUUF45857738<1$)8><8.()+*2@L^_\\[ZXD+&(,<IOVTLIJD@CHIF6-7=:771**1<8*+?ON@?MD/4=KULKf}a7.113>E>=]^`bdgikkkkkklmpojiihgededdeeeedddcba^_``a`adeefhhghjkkhghgeeecba^YWXY[^_^^^^`ceedeeefigZSZeedecabbaaabeiiiijkjjlmnmljhfedcdb`abbbbdcca_``adfhjmpsurmhfcYRQSSSTSSRRTUTRSTXYYdmheb_hqprrfZPJLOQSUVVVTPMMLMOPSUTRQQRTUTTTQMLMMOOPPQTWYVRQTWVUTRQQRV\\^ZUV]`\\Y_]UWVPOVggdopljrrifhjkllkjkhipiVX_]\\Z[befektcQRVTT^jqnmlfZQPW[^mwlaeurb\\drw]a]Td|ceinqjghgihhfaftuqomkc`|zwvw~tdfjiggkqxv_\\o|]XVQPOL݃QQQPd}wbROSZeecbehjmidjopnliqvqighm{~{xylb_dgkkkneZX[[[`gijjjka|Q|kVXSPNT|GRRRMbaa`\\_`XLYlwӍQ^ebZPSX^\\VSRK[x[QSLGX|zkfbaaqnji[dkfj_SKLMRWmxylwmbW\\bbba``chhfldgouuifkf_`aaaSoq`cgijjghk[QXZT\\wsfa\\ZYWXWX[]d_anbUXadc__aa`^ciknsx~{|jefb][YYZ\\^__`aaca][[[[TY\\ZZYXYYYYY[[Z[ZXXVVUTVX[_^]\\ZYZYZ\\_`\\XVTVYY[[]^[WYTUsiVWXWVVVVWXZZZ[Y^]TTVTmzudgv|i]^```aa_`aabgpsqnlkjiijklllnpo^_pskXOSMIHGIS__V[jztaa_cca`^]]]^^^__]\\]_`_WOQW[YSUQKNbi[YRKICLR_LEHLPQfufXRRSTQQSWY[[ZYXRNMLMLLKKKLKJKKIEHJJIIIKMMMLLJJHJJJJIIIJJIIHHHGGGGFFFECFIHGFDEGIJJIGGGD@>>?@ABCEEEEDDDEEEEDBB@><=?AAACCDEEEEFEEFFECA@?@@@??@AAAAABBAAAA@BEGHIJJJMPQMILOROLIFB@>:;<=CKHJLHGFDKGEDB@>AMQMLJIIIGGHJKKJKKLKKKLM<997Fg}b@EGKZxzpyvp\\C??BBBBCCBABFHGE>HeyɁCKOJIF@>AGJJE><=;;>CEEFFFFFFG?;>EFDEEFD>;EEECA?:>NNLMLGIJMPPMJJE?DRM>>F5=ILKHFEJZZFHKG6/7;AD@=>?>=<<<97:ABEHGDGKD<:=>CHEB=52<A5+.213:>DMJDA9+,>D@?>>>===;:;>?==<;20:FFFFGIF=85332453:BCCCCBENWWODDFCDB;/)7A>FYYSMPVZ]^\\ZUSI:Gf|G,-,.4658?EGHKG<35;>DJIECB>631//.0/-;A800//.0695330*+,+.47:BDGFEC80.0133555652369999711247::962+*,.-.-/9A:/,-17DB40120.27434215<=?FIG?;4/)(+/2333/,5:514511541.-7>=891+4652/047999972/476108DH?0/367;======90+-21220//-,,,..../01342.++*+./..122/7B>722+&)1100/,/36-)3348>>=966789:74683-+03/,+++,-,-/24454,(&(+/.+**-120**4<82-)),-/135664/.-,,+*.1.+-/032/2660+'&,138?@7//0013555788985312CSSQ;&(.5<=@B?EPLDFLMD3+/=II=/3FQHDBHQSN?463*)*(('&/8:722579>>30:@1(4867/(0;4*.<O[`YU[V=&-8>KW^\\RKGHHEHJEB838765311582*-=P_\\IBIHBDJC86P|sB373/2@A8cdgjllkjkkkjjlmmmkiihfededcddffedccca__``__adeegjigikkjiijhgggfeec]Z[Z[\\^^^^]\\`ddcefegkomaZ\\adedcbaa^\\]`dghhiihilmnnmkhfedddc`abbbbdeedcb``__clqpqruukbZTQQQRRSSSSSUSSRTVXWU\\egfacqndlupmiXONMNQTVYXWSPOLMPRUVTRRRSUVTUUQNNMNOOOQSW\\[WPORUXZYWVUUVZ[XVUTPS`e[XXUTX\\]Y_iqpnpkffillka]ekklrpe_YV[_aaee]go^QTTS`nronlg[ORZYXpnfieba^Y\\_\\W^gbdz|olnlhffffedejswspoonmlr{wuw}xgjhb`]apylVix|ZQRPMVuELMUwi`POWZan}vqrlbdjpvspkhdbelko|xs``dfmjlhZYZYYZ]bghgff_ޚTu|iMMIomKXVO^Ņ]_]\\[WSzwtېOV`cd^XWZWRRVT_iOHJZmu]bojeo\\Ɨsjotyq_LIEVepyn^\\cddcbbdrtkzpd~qtpheb``abcb][}l\\_ggggef^RVZS]uic]ZXXWVV[^g\\zcVZad_Z]^_gnqu{}o]]\\Z[ZVVX[\\^^____^^\\]\\[ZY[[ZXXXXYYYZZYYWUVVUTVY]`a^\\[YYXY[\\^[WUTUUVXXZ[XWWQ_p_TVXUUUVWXYZ[\\]_c`WTUR\\hswefsbba```aa``aaacpxvpnljijkkkorpmtmemrn_TNJJHDGRZXUWY^`[Z_dda__^^]]]\\]^]\\]`aa\\SPU[[ZVOGMfbUXWMGHFH_OGGMPWffWIEJSSPSSTYZ[Z[WOMMLLKKJIKKJJIIHGHKJIIIKMMMLLKIHIHIIIIIJJIIHHHHGGGFFFEDFHHGFEEGIJJJIHGC@>>@AABCEEEEDDDEEEEDBB@>;=?AABCCDEFFGGGFFFECA@?@@AA?AAABABBBAAAACEGIIJIKLQQPLKNRTQMHEDHB<;=?DHHIMIHFDKHGECB@FSQLGIJIIIIJKKKJJJLKKLKL@6@@@\\uZ@FOgu_ef[UEA>@AABCBB@AFGFB>QrʐBCPMJIE<6:FMMF=<>=?CFFFGFFGHGHF?8>CEFFE=/,:GFDA>;:AKQLGIHJORRQIC>9775/5D<ANOMKGCP_\\GS\\TC4-<JG=79AA?=<<:8<?BFGD?EIE?;86?KF=:44AF:4;<21?JLMIDB<6;DB=>???>>>=;<>>==;;611?FFEGIG<444444324<DGEDBEOVUICGG@AGF:03=AJ\\[TNSY\\_`_\\VSG05T\\/,.,.3539>BEGJJH<58?GKGB@@;54432111487432222456553.+-.-19::?GLMLKD>988402332226>?;=>844468884.*&'*./321;A80-.16@>6221/-024530015;DLNI<5462,,0452-,3;92-/453135423<<6<>1/4532..699885018<8238::81/3668;;;;9;:2+053210/.-++*))*+,++***)'&(+/1113664389301.,+/31.-,134.(24//4:?<::::::9642-(%'...---.-*+386430(&#$,30)+33110+,9B<0*),.047999;:62///////.+-005765542/))-.3?LL?421225899889851113HTPVB/404@BDCAS_WONPL</+-9HNF4.4<>CNQPXO>6/**+*))(&(+/=@88AILKHB=B@0-148728A;-+03DP@F[]F(->HQV[ZTMGFIEDB:=@6/12024894/16:EU^YNKPE9<=<8Cde?28557;85hikmmmlkkkjjjkmlkkjjhfeeedcdeeeedccba__````bdddfikkklkkjkkihihggeec_^][Z[[Z]][\\^_acegikmqph``bdddb`_][\\\\_cefghhiklllkihhfefeb`abbbccddedbaa_^bjkgcafh`VRPPPQPQRQRSSRQQRTVWYYY]cffhkfekkjrxuj`WNLMRUWXWUSQNMNQTTTUUUUSSUVUSQONOPPQQRW]]VONPU[\\]\\[ZXWWY[\\\\VQV^^]]YXZ\\^XV\\jrrrokffikkgfheilghvzgTTV_fd_X\\`cZY^[bmqsrmdXSY\\WUstmneb`^ZVXZWYkxyz~{toljgfecdcccam|wtuvux~tn~vxzylywtsws^TSZlsgn}ztrmu|iXQSSTa@RMPfSy\\Ykrtdejrzvsplhdelji{w{t`dfhmeam`VYY[\\__`_``b^vҶWms{tXSE\\NVSEz^[YWTPVƖwޕTP^\\\\cd_\\VRSRGe_[qİxefjin|bˣyobgpxmURW[ksi_`cdddedqrry~wsojfda``a__akjuc[fjijjieZUZUWtedb]ZYYXWZ]`_vwZRW]][\\afmuyna`\\Z[XWYYZ[[\\]^^^^_^_^]\\YXXWWXXXYYXXYYWUTVUTVVY[]][ZYXXWWYY[[XUTSSTUVXXXXUVlgYVWVTUVVWXYZ[]]a_]ZUTSQR[qyednbeca`_```_aab`lz{wqlijjlnhuypqh^^lre\\RHIIIOUSNS[\\]^dcaaa`_^^_^\\\\]^_`]^\\WUURQRX\\^\\[TY]RQUULEFGGPTIHMOSWTMIIT[YTUSUXZZZZUNMLLMLKJIKKJJJIIGIKKJIIKLLLKKKIHGHIIIIIIHIIHHHHGGGGFFEDFHHGFFGIIIJJIHGD@>>@AABCEEEEDDDEFEEDBB@?=>?AABCCDFGHIIJIHHFCBAAAAAAAAABBCCBBBAACDHJKKJKMPQNMLOTVTQMIFFIF><=?DFHJJGHEBIJHFEEHRZPKAAEGGHIIKLKKJKKKKKKKD6FH<Wy}xFEOc|mMMRAC?A>?@AAAA@@@DEC@=MwF;NOKIHD@<;EOOF<<?BEGGFHGFFGHHJMJD?AGGHG?8<<EAAB=6873LOGGHKQSSRH=975346:EIKNLMKHGZbcThseUJ47IKA63?@?=?BA>>>>@@>>BBB><71=LH;733?MORWQ<5BONGFD@@?>>;9;=>??>>=;<>>===;93+6DEFGHD<87677654--9BEECDMWUGEIA;FJKC94>FN`^QMS\\`beb_\\P=/+=ry<(0,+.113;@BDFGHFC;9?ED@<;<;666654688886534458<<971,,-//046;CGILLNNLKJG>31430.27?A=?@<9866532/+)').36621>A723014=<972262+,16600.-2BJJC71/1445?GB8-.681*''1<;778853465:?:137685/499861,1>A923430124689:::97684-+1531/.-+,,+**)+-.+))('(&&)-154359;98:9301231142---,+/-)02+&)1;<866668:71,))('+-./...,(-;=3160'&$%*63&*770//*,;B8,''+05::;<<?>74553231-+044369876542.-,7CKNKD>;8535775577753245GQMV@:QE8=DHJN`cZYVPB-',/8GNF<428AFMLIPF:?8+##')))*+(*?J><BFILOPNLLC=BF=546:=:96*-1-<U[C(-@LQORWPD;9IO=1+.=;,+//026757=BEDHTad^ZM76CB:<KNA?DCFH?0.cdghjkjkkjjigfhmnomjhgeeecccdcddcccb```````bcfgfhjmonkkkkjiiigggfeeca^ZWYYWY[YYYY[`egghhinnha`bddb`][[ZZ]bdeghhjmmmmkjjigffdbaabbbbbbbcbaaa`aba_\\WSSSQPPPPQQQQRQRSSRRSSTUVY]^_bdfeedeimpos{|xpfYRPRTUVVVURNMMPSUXZ[WUTTROPSROOPQQNLPX^^XQMNSWZ\\]^^\\WVWX\\[TQV]dh`\\[bb[YXZdptsrnkkmpqplhih_ZmcLQ\\cnx_Vcgfcimjoy{xumaZZ\\WVr}oida_^]\\[[WYdv~}~xnfdfghcababb]l{ywr}~qw|v]]qegvnYV_jkezytd[^\\_fec`]ZXW^`cgfZVdu`{Z}rgn|zwurjcfkh`ijvujcgfjnfaolVX_dckndZX\\b^Zti[T\\ZM\\˗FMNGHǂQY][SOsoszeop^Xehe`ZON]nucadhjltwrmnt|{oihvqTWWRY_aabccfebo}stpqqkgfbaaab__aqvceklkkmncWXWVuscW[_\\YZZZ]`a[{ŷʿfPU^]^dr~phe_a_[ZZ\\\\[ZXZ[]^^^````][YWWVWWWXWXXXYYWWWSTTVXXYYYXWWVVUWWXZYXVVTTSTTVXXYT`n]UWWVVWWXXXYYY\\]a[WYURTQOSe}dewldfecaa````aac^j|~ulijkljbiy{rkYUQ_sgbeUKMVY[\\UY^ac``b`^^^^]]]]\\]^]_`[VOIILLMOTZ\\]^^c]MOWTPHFFGLTLKMPOOJKLZjbfaWXUWZ\\YVRMLLLMMKJIJJJJJIIIKKJIHHJLLLKKKIHGJIIHIIIHHHIHHHHGGGFFEDFGGFFFGIKKJJHHGDB??@AABEFFEEEEFGFEEDBA?>=??@ACDDEGHIJKKJIHFCBA@AAAAAABBBCBBBBAACFJLKLLMNOOJIMUWWTPMHFHHFB>=>CGGGKSLAAJKHEEGLUXPH@;A@@CEHJLJIIKKKKKLKF?FE=O{NDOXpq[BCI>9;@?@AAAA@@?@DBA?;IwŻt=;HONJFEDCAAGOND<=CGGHGGGFFFFHHJLNLFEGHIIIOQDCBBD>412&8OKFHMTSTTG778:965?FHFIIJIEN]adg|qJE>2@LG>47<??BEB?><<@??AABA==7/8HG:629Pejge\\J>BIKHGDAA@<8778<AA?>>><=>>>>>=;6-0@FFED?<=;988753+(3@EDCCJYWHGF75KOOKC6=BI__NLV_dgeaaS=10*-NV1,2.,-.04;ACDFHGDA>=<<;9989:6656679999:843316>?>:60,+,22.-,1>B@ENPPPOOPMC9740036<@>>=;:9620../.-+*058601=B<64225:;:5--85,.3650/-*,<DA963.,.02<KNE>6.,*-.,3@?;<:9::21648@7/47<>747985/(3EE810///./158;=>?<8671-.2420.,****+***+/23++../.**/46556887=C<0./23241*'('''+,*,,)%&,33112347:84-(0544220/-..-5?9,072*))(*97)*53+))(/=<0*((-7?>;<ABA;54442021/,07852347:930-+5FKJIGFFA953352.17998:846LWTZACgX93?IQXa]ZaYF2$%,17AD@@CBFJLLMPNC>AB=1)'(()0/&)?QIC=;9AJMQSTTSTVN;037;?B</(,5>LWA'2DHNMPWE0)0Q_?,-'090.1//0116@DB>=BO_jdTKDCNMEEKKGLNOMA5-+^`dhiijjijje_`hqtrmjigeedcccccddcccb```_```bdgfccacnrmjklihigfggddfdba\\WXYWVXWWVVW[acaab_^ab`^^`aa_]\\ZXX]acdfiijmnnmlljifdddbabccbbbbbbbccbaaa`^\\YUQNNPPPQQPQSRSRSSSTTTTTVWZ]aaabcdddgptpmopsvtfXQPSTTVXYXURPPSUY]`]\\ZSOPOPRRQQQQONNS[cd]WROPRTTUZ\\YVVSRSSRRVanh`^cc``^ZW^jorvsqopd^chjogY`wkV_mnoxZ_jnijx{z}rg_]ZUnogda`^[[YYXY]kvy~ykgjpmdaaab`[lyokzsW_l]du}{snlimwtkoaZ\\[XVUTTX[YZhlhfyРw[QSOzٝ|w{kivzzwvnejrne_eqodbcfdipsjjrYY^kmszulb^^`Sے]wRLY]WqcqVpxMVraKQeozdhzdalwyjhjfc\\X[qñm[NQ[ehhg^bgllcqqpt}odbkp_TYWX[^``bce^Z\\Yxʃotutlecba`bbb`asqijllklqpaYWYch]LS\\ZYZ]_`^_acrѰ~YXc`^pojfab^\\\\[\\[ZXXXZ[\\[[_a_a`[YYXWWWWWWWXXXWWXXWWTWYXWWWWVUUUTUWWYWWXVUTSSTVXYWYjeVVWWWVXYZZZZXVX]b[RWWSUTSU^}deqkghfcaa`aa`aac`g{xnijnl_\\Y_utoZPMYkfhto`[ebY_^b___^]_`^^_^_^^_`aacegTIHIHIKKMNSY\\[]_aSLPQOIGGDKRMLNOTOIL_tpcilYTTVZ]ZTQNLLMMLKJIJJIJIHGHKJJIHHJKMMLLKJHIJJIHIIIHHIJJHHHGGGGGFDFGGFGGIIKKKJHHFCB??@AACEFFEEEEFGGEEDBA?>=??@ACDDEGIKKMLJHGECBA@AAAAAABBBBBBBBCBDHKMLMNONMLGFOYWWTPMIEGJJIA;<CLJSkoOFCJJFACGKSROKIC=97;CHKLJIIJJKKLLKHJUJ=I¿rODOS^UE;AG@99@@@@@@A@AAADBA=;Bzv7:BGLLGCCA@@BIOMA<@FIJKIHHFGGGHHJLLJIFFHIKSZSDBFE@>@42=<IMIINWXZYD399<;8;DFEEIIHDCT]X]t~{H170:LIC?8<=?A=969=?A@?@A@?=>9/5EE85;Snund_]YI9AQRJDDCA>;9:<AGB>>===>>>>>>=<51/:GDEB>==;:88741./5BGEAAJ[XHD>;GVOIMIEGGIY_PO[diib[VG0).--7<322/-./036=CDEGGEC@><:988::;76566788889632219?:63451,.32+,..9EDBKQQPNNNPPD<5/125:>==<==:3.-.0144.,04660/7AA9/026:<:3)*3434543/.-,-7<8542.-0532<DKMF8+,7809B75889:;2-025><.*2:>942585.(8H@4/12/0.+(,48:?DDA;87645421/-,*)**)***.150../57/-/35677648HM?2-,/23/*'&''),,-,*)'&',.,++,.48996.+7><973/.,..1<=/+394.-,++560-/.)%%(073+,./4<B=7=CFC;420/000320/362..1364.*',=MMJLKJJ@533463+-699;>=>Pba`]KOeT:36?OY\\XY\\F.(*,/46::6>LQIJLPTUOFFC@GH9+&')22'*ATSJ>:7AMQRV`gaYUSF;9749;61.3>@BE5)4>BDGML7((9[[7,.(+65010//--4>A>79BL\\dTJRWWVVSTPD?FLK@,%()_`bdghiihhgb]_gmqnkjhfeedccccbbcbbba``_^___adb][ZWWdqpjjkhhhgfgga_ccaab\\XXXVUUVVWVVX[YWXVSRVZZ[\\\\^^\\\\YUVZ^``bjljklmomihfdcbbaaacedcdcbbccccbabb`]]\\WUSRPOPPOPQQRSSRSTSSTUVVWY]^``acddfkppng^]a]ZURQRRSUVXXXWWVVWY[^``^[_f_QPTSRRSTUTSW^bba]TOONNOOQTSUYXQPSSTYbecb`c`cb_[U]celsvtjZWdgaenlekwtke__e}~agsnmnw|{}zl_[[[cphecb^[\\ZZZZ[gwxx{|xpnyocba``_[lnhjt{rcZdv|zzmipqehql^TVXWUVVWYXYenk[QZ{eSdjT߃x{hzrw}zywsoottuldqpc`ceeghnrtoXX[fjm~q^_c][]gRVacXŤnֳ_NZd`_]]pveurhldQ[r~}wvwufW`oűt^QRTRV`egj_RSUZ]_uSwhggo}~zn^Wa[STXZ]^``d`VWPHoipuofcbaaaaa_a}mhkmlkouo_V]gllpx|l\\Y_cg\\Z_^U]{͹aX]^]iopkbmc[]\\[ZZZYYYYZ\\ZZ\\\\\\_a]YYXWVVWVWWWXXXXUR]]UWYXWWWWVUVVURTUWWUVTSRTSUVXXSclZV[ZYZ[[\\\\\\[[ZWWY`\\UTVTVUUW[peftokkidbaaaaaaaba]yzoiknj]YX[clteLQXZ`hoywsxq`]^`_^^]]^_^_```^`diltskgTHIIHHJKMMNUYZ\\]^WNHGGJIJEGNMJKKRLL^zvefkbKHRUW[YSPMKLMMLKJIJJIJIHGHKKJIHHJKMMLLKIGHIIHHHIIHHIJKJIHGFFFFEDEEFFGHIILKJJGGFCA?>?@ACDFFEDEFFGGEDCA@?>>?@@@CCDEGJJKMKJHGECBBAABAAAABBBBBBBBCDEILMLNOONLKJIQWVUSPNLHIJKID<=GJS{tOHCGGD?BGKROOJE?:88<CEKMJIJJJKKLLKKSeWCIxpaHCJNJA?>AE>98?@?@@@ABCCCCB>=<=o¼ҡ9:HDEHHCAA=>BCGNK@=BFIMMJHHIIIIIJJLLLIGHGKSVWRD?DC96>53JI?NNJNY^_[B5<<=;:=DGIMLIGBKZUGD]yz{M-01:IF@DA;:??867;>@@@======>@75EF8:Pmuqlfb__R9:PTJGHF@;<<>ADD>8;>=<?@>>??><5/-5EFC=<<97667520/15:DEABKZSDABOVWKCGKSUURX^MR_flg[SIBC;1,021210/-.000.6?BBECA?<;;9999;<=;;98653577643222:D8.-484/052(/?EGGHHJNNPPLIINKA5+/148==<9<;62/123354./366302;CB;2.27:<:51-38<=864/.-..3530/0,(/86.-;FGGK=4<;1;@,,146772.1559;3+0586/,196.,;E;1,493//+))-258BJG?<<97553331/+)******-1324/,/310013899968C>/+,,054/*-..013340()'(*-+(&&')134<:.-=@;:83/-+*)1?6'-7;851.++-00/,*'&&).1,(*-169:824<EF<31/1000451..1/00.-,+*()-6DKLNMLK@4246;9338;;;;B[mjea]RV`P=646CKNNOA-/8=A?8583.:LNDGMWXWSNKF<?G?-&&)//&(@PQJ713@NTXalsm_OC?=<6/8:8557@A>3./>FC=9;4,.1;ME/+)+274100//-.17<:8>EKUUNXfje]VTXN6/:=82,&%&UUVY_egihgedeeeehjjjgeeddccba_^_`ba__`^\\]^^^^[VVXYY[ennjiihhihghc[[b`^bb]YXXUUWWWWVUUTSRQRQRTXYYY[[[[YTTWY[[^ehjmnprokhdbbaaaaacdddcbbcccccdcba____][WTPOOOOOPQQRSSSSTUUTUWYZ\\^_aaccdfehoqj_UQPOPRRQQRTUWYZYXYYYXXYZ]\\cmrm\\OORRQSTWWUTTVZ^a_\\XSOOONNRTTXVPRTTUY^aced`]\\]fdb]Y\\deeb`fqwmZbxyklvpaWRUt{fuyppsw{xwyyxwtj[Zcb[j}sikgc^\\\\[[\\\\Y\\n{yxijsieda^^][eniaghlykYYcv{{ghne^gqvbNSYXVXXWXXXWssdpcP^xcWk{sz|w||ywwzcqrc^cfffb_djcVWZchdj|t__ffNdZ\\_fgafdim\\LSOYeoqƟrsq^[^w{z|ξrZRQPT]]VOXijkjfw}i_na䴄yh`mxxutm^cbRNWY\\]_acYTVMMs\\jvrfcbbaaa__bǾsgfhjjjpseYas{u_[`fkbXep^[W{µiLR]^^urddo`Z\\\\ZYYZZZYXX[XYWYZ\\^\\ZYYXWUVVWVVWVXXTSW[XXYYXWWVUUVVSOPRUUVUSSSUUVVYWYi_T[_]]^^^^^]\\]\\ZXUY_XRUUXVUVX\\xjr|uppmhebabaabbdZRv{ojlkd^YY[V[fhQVTMUXXly~n]^]^^^^^_^]\\]^YUdknqxrieYPLIGHJLLMMQWZ]\\\\\\ZQKGKLLJHKLIHIIIPliVQ[oYBBQUSZWROMKKMMLKKJKKJJIIHILLJIHHJLNNMMKIGHIIHHHIIIHIKLKJIGFFFFEEDDEFGIIJMLJJGGFCA?>?@BCDFFEDEFGHGEDCA?>>>?@@ACCDEGKKKLKJIGFDCBBBBBCBCBBAAABACEFGJLLKMOPNLKLOTVUTRPONJJJJHIDBIIHkrgTDB@GA<@EJOKJC;89;?CACQQIJJLKKKKLKMZf`VIsnMHRKBGJD@BBCC<99=?@@@ACBDDEDB==>>sû[2CFDEFC?@@?>BCDIIA>BFINMJIIKKKKKJKMNKHGHJQWQLPJCCB7.259><6EONNY_]WB;@>==<<AIPRMHEBS[LD9B_mwO324;FC=?A67@?::@B?@@?==;;=>>@DADG<@dyrtqlb^[C4DPKJJE:56:=@>:528>>=:=>>>?>;4-*/EF;7785445420.0345=CBCJPD?FKOJBA@:AJLOS[ZJTchkbTRJBA@>684210/.-.00-,07@@<8525:;89;:;>?@?=:400477422222<B8./475247:8?MSL??=?GJMRQNLLNE5*.147==:621001476662/26871/7AB?=5-38:=:7722;@>9850..00020.,.-*/:8,19;=AHJBA=357+*.14542/17448=BB:55.,3:933>?51/7:3./.0.,034<LJA@?:66775562-)*,+++-/1112/**0221.2:=?<741(\"'-46844571046:;6,(*-++-+)'&&'.,-<>23<=::51.,)'&/:/%099762/-+-240+('((*-0+&''+.//.-++7D@4034100672-))-23,))()+,+)/7<EGEE@75;=?@?>=><:;Njmaca]V_^M?778889?@<<KRRUL<4554:BCCFMXY[`[RND216-$&'(+*)=LLE.(+9FK_nkrnXB429?:5;=>?@?@A=638CILF7-(')-286-,/13764000-,./11/5ABFKQ\\bhplbYVTL3(01342/02NPW_gjigfedbbceedfhigeeeddca``]\\]__]]]][\\^][VSUWX\\\\Y[bhihgghhfefg_Y]a_^ac_ZXVUVVUVWTSSSRQSTRRVWVWYZ[[ZWUUTUVX]bgjmppomgcaaa`a`accccbbbcccdeeeca`_```^[VROOOOOPPPPQSSSTVUTUUWZ\\\\[\\]_abeghklljc[SOQQRQPQSTVXXXY[[[\\ZVWY[emjkhXMMORRSUUUUTRUX\\acc^VQT\\bjiXOUUQSSSUW^chfa\\XYfxj[WVY[\\_gwp~{aYpupwqb[RSnriuyprsvxwwwwxzztllkcgxphojd`\\]\\[]\\YUXm~y~ldnkffa]]]]\\[[^`dgkxyr{}bYWdy}|pyrbhlgikrueUUYWVWWWWWVOmp}xYNavefr~xouyq~|rbqp`^bdef`\\Z^^XX[agfdtxia`e`Xjkhlhtpdhz[KQOSYlurvgXexy{|ϡ|iVIMSX\\_\\ZXYes{qulƝrxvrnjnhbazXX\\]`db\\VWSUnVgutgccbba``_bŨ|i``ehgjng\\douz_a\\cgj\\XoaY\\WoXT_appbdcZXZ[[XXY[ZZYY]YZZZYYXYZZXVVVVUVUUTUUUWXSXZYYZYWWVVUSQMOPSXXYXWWWXXXZXVedTW^_^^^^^^^^^]]]YVW]XRTUUUUVXT^|t|~yusqlgebbccddg]Onyljlj`YZZYXUX^UPMGNMO]ktwyo\\_\\^___]`eWUSONVnotrliec]TNKIGJLMNNQUXY[[\\^^SMKLMLJKMIGGHIOXNGKQeeIBQUNXUQNMKLLLLLKJKKJJIHGILLJJIIJKMNMMKIGHHHHHHJJIIIKLLJIFFFFFEEDDDFGIIJMLJJGGFDA?>?@BCDFFEDEGGHHFDC@>=>????ACCCEHLLLLKJIGEDCCBBBDDDCCBBAAAACEFIKLLKLNNNKKNRTUUTRPPOLJJIIIHGKQRXZ[VM@>G@:?DJMID>8799>HCM^]PIILLLLLLKQbca_HRο^3AULBFGDCDFF?;:;=?@@?ACDDDFDB@>=A¹̋7>DBBDE@=?AA>EEBEHC?AEGLOMKJIKJJKJLNOOMJFJTNB?LURLG<11587448JRLV^YRKCA=<=?ACIQLKHDBTYLF<<<O\\?357?F@;::852:@?<<>??=<=><=>>>DJFB<=Xw~yume\\\\aM0<VWVS@12336742/.689<:<>==>=92,)*AJ:266895431//1465<CBDIG<EKKG?:@?8;@B@=KRHXegj\\RQH=>=:=9753211..21/015>>830148:99:<>>AA?>;6/.1674332139;2-0442149>GHB=86014=CEMUYWTQI:,.02578520-023577530/37:500:A@<?7,38;=97744<@<7760--0//3.**/1.1;707999<?@GB<211,+-/133203947?GSO?9;<>?>=88=;100881./13423546BF?=<968997675/,..,+,-/0110.**+.00/29?=730+)'&,6:757?:/(/6:@=-&*./221.,*)(.)%6?::;:::6/,+)%(/0,,584320.--372-)'&))*./,(&''%)1+&(&)5<71131/1683-(&+43+)')152,''&+9BACA<>DFEDEDA>;;>Pijecb]Zc^OB;:82.26>ISVWZWJ;6789;?ACCLWY_ed[SL5$26'%+)*.4?DD<++/9DCVnksiA11-6@>>?AAEGDCB>:9=@:=OTE2-012221025=???<941121.,+3@AAAUgaeonf_VSB1,05887;EI`bgjkliecbba_`fgeeeggddedddc`_^^^\\[\\\\[[\\[[\\[VQTYXXZZXW\\ceeedbaabgf]Y_d^\\bc^[XUUVTSTTSSTSRSSSSTVVWXYZ[ZYXVSQRTUY[^bgjkkfa_`__```abbdebabbdfeeddba`aaba_[XQQONNOPPQRSSSSTTUTSUUTTTTVX^acghffjooib^YTSSSSSUUVVWZ[\\]`^ZVWYZ[]`ghZOQRSSTTUWVUVVYafgfaZ^nx{uXKV_ZZ[UUZZ^fghaUct[WUUet}hxkP\\vwuwog`cpokrppprtvvwvzqky{ohnlha^]\\[][Y\\UYs~yfekhea^^^`_]]^]^`_hpmntjire[XVe~sz}pnjfinuwrieebYWWVWWXYYSUsnΧwmTX^[[sΡ|ourq{~wsrs{~nszq`_`cfh_]\\]_]]^bgkdp}haccfZ{dsqhii]Xaxxqlj\\NQPNP[]acchpjusY]mt|վ}X``YWVWXZ[UVatzhy{Wfokay|svza\\ZYY]apre\\Z_kbVfrrhcbaaa`aa`Ơvd_aceefcedj~{\\Tb[kifusdgvqabʤhP[kpea[YXZ[ZYXYZZ\\[\\^[\\b^ZXUUZ[URTTUTTTTTSSTVZ\\^]YYZYYXWUSPNPVY\\\\\\]]\\\\\\\\[Z\\UUf[T[^^^^]^]^^^^]^]\\\\YYXUVUUUTVXWOfw|~|{xvtojgdcddeehfXbzmjlgZUYZYWUVZ[NHELTX[]fkba]b\\ZZ[\\WZgROIK_lonsrmgca^^WPLGIKMQQRUVWWX[[^[WOKJJJMNLJIHIMHILNMWgVGNTKWRPMLKLLLLKKJKKJIIHHIMMKJIIJKMOMMKIHHIIHHHJJIIJLLMJIGEEEEEDDDEFGIIKMMKJGGECA??@ABCEGHFEFHHHHEDB@>=>??@@ABBCEILNLLJJHGFECCBCEFEDBCBBAAABCEGKMNLLLLMMMMPRTVUTRQPOMKJJIHHMRfj^NMOLBDEB@DJONE=::986:HK\\cb^QKKLLLLLKRb_[WDCѿd/GQGDGGDDCFGD?<9=AA@@BBCDDEDBA>;MÿͯY;>BBACB?=>CE<@DBEGCABDEJOQMJHJKKKKMOQQNKIKKB==AEEHB=74758@93;IRU^YLB??>>=?BBDDCGHDBVOJHBC58A7469?@CB=;>:13;;86<@>=<>A>>>>>@CB>9:AP[`c]WWWXU;8Yb\\V@35632211236669??===>=70-**9J=168<<8320//247:@DDEG@>EC?ACA>;89?AD>>OK`eeaVSR?4;:1/7=><::843224<<9?C@<;:57;957@B@BB?>:;2..4654421142--/22..3:>7320-.,,-3<?CJSWWRE9310//.-/1135654440/--3884028<69C5-27;=95348;:6253.,,..24-'*/575979<::9;62:B>2/.140,/0002774ANQXTIGKKJIF@=;<6/,041../258878757>>:7777787520-,--,-.-.11221./)(,0/1340-,.12/)+00149>3((/38DA0'+*09:8542/+,+$+<@?:544/,*)'')-**.0.++-.-+,58+&&&%*,**,)'),-)(.0,)''*151.0//17;72)%,2/)(*+6;0(+*'+9BCEDBDJKIGGE@::97D^nlhe^`f\\UIB>8/07<HQRPSTQ@:=@><<AA@=FW_diifXE7'-A6(48.*8?787,/2FP@@\\luW-*2-3AGHFFDDGKHDCD@<:1(0@LLDDEB=::95:JLHNMF>9::.)-.19<6/HebdlljTWT5/764:;<DNRijheeecccaabbcefffeffdcddddda^^__][]]\\\\]\\[[[ZVTVXXWXYY[\\_bb^\\]]]bgcZ\\de]Y[_a[UUXUQRRRSTTUUTUUUVXWWXYYYYYWTQPPPQQSUY]]^_^]^^^____adgfcaaaceeeeecbabceea^][UONNNOPQRSSRQRSSRTVPLORSUX]^^beedgmpmhd_YVUVVVVTTUX[]_````[WUSRUZajhZRRRSTTUTSTUUZdhggjnpuzz~uVSlnmiXRYXU\\dihai_VV[}ugwjUWlysyulffbfmnoppqqrtttvyjlmjstkqxl``]\\\\][WYXUcz{d`jgc`^^_aaaa_^^_agib_a^\\Y\\\\XVvphqtjgqqh`_ee[VWWWWYZZSrm\\­JVlwRNMLPV}~~vkk}xzte`iu{oeb_agj^]``aaaacgk_`rfahbҟa{vjaQDEMVW`dWot_dNOLGKNNUUMLXcfxrUf`d~̬mMXke\\YWVVXVSZjwxcztF^VNYZȎu`_no_W^lxhz}۩_cnrjdb`aa`bc_xܿsfdcdb`aefq^NZk[\\bw^nst{xp}|ЯpOZwtha[\\]\\[ZYXXZ[^^^^^_b_]ZVTY]VRSRSTTTSSRSTUY_`]ZZ\\ZVVWYUTX^```^____^\\^][YS]`X[]]^^]]]]^^__^__```^ZXWVUUTVWXQZn}yvrniedddegfc[Wu|mhicVTYYYWQPYaZPISgmqlhl_[\\`[]``SNISOPDOn}h^jslfc`abbXPGHKNSUTTSRRTZ][\\]SKHJLOOOMJIJJJMNPPSYUMLJKWONLKLLLLLKKJKKJIIGHJNNLJJJJJLPNNKJIIJIHHIJJIJKMMNJIGEEEEEDDDEGHJJMNNLJHHECA@ABBCDFIJHFHIIHHEDA?==>??AAAABEGJNNLKJHHHIGECDFHGFCBABAABBDDGIKNNLLKJKLNPSSUVVURSPONLJJIOGQXiobKIHGFHGFGGNQMA88;:87=LSfa]caWKKKLMLLQ\\\\UUKBZ:HEFGIIGECCGID@9>BBAACBACCCCA@>8Xo;<;@BBA?><=AC<DHBEDCBDDEHLONLJJLLMNOSUSONQPHB<><8;B>=;9869B9/.=OV_T?6<>??=><;87BGGCKW=EPONB79>>==9<GHEDEA80/4937<===>@???>>@>;<>><:;BOQSZWMWP>P`[QA3121237<<98>=6:>=<<<;623,,7A61;>;993/-.02469=ACFG=<?:=FFA=728@BDDFORefcZSSB3776658<=>?>==9437CI@APJGD?65;9-2AECDDB;:950/45456310-,,,.03.,383**11-,,,,07>?>DLNG;73.,,+*,2897544222.**.47876583)4>0-27<=94357655420,*+-/45,(*/551179;;;:74,/=?3,,061.---/-.7CLRWWLFMSPKKIB><:3,()00.,,04:::::86:><76851333/*(),-.12/.11344694/1/01.,***1761,)))+166.$)356@@.)0+/9<;;<;4,+,(*7@=60//+)'(()+,+*)*'((*+)*.64($'%$+.+*)&'/21-(&),*'%&*/-,,-.19>;;3*-0+'*,.13*&-0.1>GEDCCHKKJJIE>:901?LZklh`dY[ZPE>715?GMNNPRQOB>FHC><=@=21Mimoqra>3,';A,4<1(4;236201JU7/A^Y9&-35:BNUSMHCGPPLJG?4/-(&';Y\\RNLIFEB:;CBEQQI@;<>/&+/.10+%5VaehkrJ8ZM7DA10:@ELMdca`a`bdddccddegfeeeecddddcdeca`_`_]]^_`_^\\]^\\WUVXXXZ__[[^_]\\[ZYYaf_X^f`SPW``YUVUQPPRTTTVVWXXXXXYZYZZYYYXVUQPQPPORTVVXZ[\\]]^___`adhgecbbbceeffdccccccb``b_WQNNOPPQRSQPQRSROOMOTXYZ\\\\\\]_adeehmolkib]\\YX[\\\\ZY[[[\\^_ac`YTTTUX]de]XUSTTSUVSRRX`egeenuqovzrtsctzkZSZ]XWYZ`egqyf]`VksncNRe}m^pxnb`Ycnjkijklkjjikoz~th\\_emwsjozo__^]\\]`]WWZ[g~}b`mg``_^`aaa_^^^^_^[Z\\]_^]b`\\kxdgpgeh^\\acfe\\VWWWWY[WZ`aVcgJYraMNPPUqv}zzz{wjbpnpvsquxidr}}qkigbbgofaaaaaaaekgXW|c_lsplZROMNOPNU]]XWORMbcO`teSSY`grgURJ^˭wKPXae\\WXVVVW\\gqwĂaz̆]XX^_[K{Ų®qio`VqɲvY詃k_oqjefb_`aab`gֺokkkihgfdn~`OYfdbbi{pmvhU[myWTlWbw}h^\\]^^\\ZYXXY[^___`^^^^\\ZXY[YUTSRUVUTRSTUUY^_][\\\\XUTZ\\\\^ad`^^^^]]\\\\\\]^ZT\\h\\Z____^^]]]^^]]^__``b`]YXYXXXXXVSSk~|yvpkfdcdeheaXQb}ylhe_ZYZZYWUQT_]VPWix~yd]a^]W[m}oOHEJNNIJZp_Pevligfda^[ULFHLQRRRRPJMY`\\[]ZPJKMOOPNNMLJKNNRTSPOOMFMRONMKKKLLLKKJKKJIHIILMMLKKJIKMONNMKIIJIHHJJJIJLMNNLIGFEEEEDDDFIJKLOPONLJHECA@BDDDEHKLIIJKKJHED@>==>@@ABCBCFILNNLJHHJLJHFEEHIFCBBAABCDDFGIKKLMNLKJKMORSSUVVVSSRQPNKITaR^mfj_JDGGHIJIHGLLJA<79978?LR[a^]c\\IKLLNLLJHQ\\bS:@}SLLFJLLIGDBA?==@CB@A@BBAAABCBA@7\\»t;<=:BBBB@>=;;:GaVC@AABDDDEHKONKJKMOQRTWXURXTIJD@:47@===;;8:>2403FW^K68>>?><:6213CJDBUS?QYXUJ=7=A@><AGEHKI@5.2<<67;==>@@A@@@???<=??<::?IS[^UMX]NLUTG;578:=CGJJHEC?<=>===<:9;8.+1413=<87:4.,-/01126:=<EC;<=@DB>;3/7AA>AHMVgh_QOK=4<:36;:9:=@?@>:621>LEBNMLHD;652-3>FECFC94976;=9465..10/.-/050-44.+152.-,,+-6?@:;BD:140,**+-17971.12235/)*0579;8564/58++28??72//013550**-/0242---/0-+2999<A<2-,4>>3+*(+,-,+)*(.>JMOTO;7JRNIHIF?;<71.+13/+*-5=?>==<;;??<994-.021,(),//164033340)+.//0/.)(+..054/..++(&-33)&4:89=.*6338:;<?;0).1.,0870---+****+---,*-(,)'()*270(*,'&.20.*'(13+&&%$&'&'())**+,-.2:??6-,,,*-/0//)(.2/1=DABEEIKFBCC@=<5)3CADauhag\\[ZTG=54<BGOWWUTVQNIMMF@=?B@0)KrpotxkC41(.;--346:@;65300?E4/4?3%&-2=FLT[\\RJGHMSUPOF1%&))1H]c`XOQQMLG:17FQVPKA=93&,3220,*0CT^gsqF&>__OD<7;?CKOaaababdddeeeefgggfffedeededdffdb`aa^]_`aba`_^^]YVWYZ\\ac`^^^_^][XUXaaYV\\_YQNV^\\URRQPQRSTUVVXZ[[YY[ZZ[[ZYYYYYTSTRPPRTUVWZ[[\\]``_abaadffdabcbdeffddbbb_]`bcccb\\TQQQRQQRRPRTTQNOT[[[[\\]\\]_aadecdjosuvqjea\\[]][YYYYYY[^bc_ZWVUTX^_[YXWTRRW`^YW[^^`adkicgswnmzxv{pc_\\\\^]XSRW_`]ikfpeXwx|\\\\bci\\Thwvh`Zenfdfiovxvtsrtu{yja]^oyrrngtugb__hpvyphkg\\eyze_nka\\]acaa`````_^[Y]__aacga^dr|m_cac`]abdfe^WWWWWYZXYSpeVjUOQOMQSRSdos~}{ytqqkbmjqutjfsqnx~~}rjknlhhnrgcdbaadfjwnWRuxae~[ZQMMNOPTWV[cSgVWRVQ^fXUYX\\kqbRLKX}ŻzSNTY_YXXWUUUcs{¿yd{ܣygwo_Q^f^OFayfpvuwvhZSxʽgZÌt~udgkihpc^bb``aqϴ|oosvxtj]qcU\\dlj^]a^U^nqg_QLX~oSNYbXeh[]]]][ZZZZZZ\\]]]`_^]]]]]\\\\ZWVUTVVUTSRSUVZ^]\\]YWY^]]]^^^`]Z[^ZWVVXZZ\\YT_bYZ_^^]^^]^]___^^_^__``_]^____^]ZVUbgm|xpkgeefgjh_UQXt{phb]\\\\\\[YXY[UTUYY[dw{dS`\\Xa~k_NHIKLMPKLXTPixommkg^[ZZVLHLQNNQPMIINW\\Z\\][VLMNNMMNLLJIKMQTQMMOOKOPPNMLKKKLLKKJJJIIHIJLMMLKKIJJLOOONKIIHHHHIJJJJLMONLJHFEDEECBEIJKKNQQOOMLHECAABDEFGJNLIJKMMKGEC@>==>@@ABCCEHJLONLJIKNNJHFGHJFB@AABABCDGHJKLLKMNLKLMNPRRSUVVVUSRRPNMK_clwjXUPHEGHJKKKFFFIJE@<<;60?PGBUb_]SAJLMNLH@BOffP?IrqHMGINNLIE@=99<FFEBAAAAAA@CECC@:]ƿz;9><AHGCA@>=::<NgdVEABBBBCEGIMPNKLMOQTVWYZXXSKTNA:?@A>?>==;9931/-<S\\J7>@?><;92/36AKDBYW]`SMMIA<9;<;?GE@CJD3/9DF>:;:;7688<?BBA?>>>>;:=>@FPWXXY[\\XQOH?>@BCIOOLPWUMGD@>>>>>==>>:1...14:537:3++-//12347;78>?B@AA?@@607?>56AL^h]QJC::8:92178::<>??=897/2DE@INMHB;73/08AHGDGB42=:6::6550*.7620.--30053/.23/,,,+**4@C@;<=3-0/-.../2320//3776630146;?=7468:<9.,27>;0+*-156542++36431.,,/1-(-322:@F=3+*7D@3-,))*+-/1..<HFEGGC66FGA>>EHB?@=644240--3;?BE@@@>=@BA>93/00121..00..10,*++.0(%)**+,*((071')..--/0*%-860,15465*)499:99:<7,-693,+130/0,+02/.-.//./334+%(*,273.00,(/41.+('*,(#&*,+''+,)()++,-./4:6.+),01/--.0-)+-,.666@IJLK@566588/*7FDB\\peeha[YVNF=7<?FUcdTMW^_PKOIAEQOA/,Nxogp{pB10)%*-037=@EB852006:730.,*+,2@PVU]^XOFCFQWRXXA-'%#/Pdiro^\\_XSI<49HHPej[A74*.2/3=4+4<>F\\ug6!,NhYBEKD;?MRbbbdeeeefggffhgghghhgeeecdfgdceecaa`^^`bbbb`__^[YXWZ_aegc_^`^^^\\XSW]YRRY]WNMUYUQQQPOPQSTUUVXYZ[YXVXZZZZZZZYXWURPPQSTVXZ[YXZ\\\\]_`^]^`db__bcceegfeeb`^Z\\bgcahib\\WSRSTRPPSUTVZ]^`]WWZ^^^^_`bcbcgmtvuwtjhhb[VUUUWXXWXZ\\`b`YTRQSVZZ[\\\\VQPVchdaaYRU[cgc`djmrwy|~}yoffe``^WTWX^g^dqifojht|{nr{rhcXXfx|n][egdfggo{vpng^p|vgkoqkaexs\\fvc_eddije]^dda``cddcba]\\``cegeeba_bbfpz|qcca```bbceebYWXXWYXXXY^XVYc^WSOMRXYXY]fsv}{yxqommo|yuvfmxstyy{|zrprrqrtuigd^cehilzkPpfbthSPXLKKLNQSnl]PuZ_\\QSWQQMOUVWllVOSSUiVNRTVUWXWUTSev~Ǫqf{ȁS]{dP]]\\WRAmqjpqslc_eLvlh`ᡃun_Zegyzc]ca```pֹxmptz{vkyn\\dmqutf\\[accdecWQMgu_T]sZanWhiZ]\\\\[[ZZ[[\\]]]]]^^]]\\\\\\\\^^\\ZYXVUUUUSSSTVZ\\]^ZX_fc`[YZZ]]\\ZZ\\WSPRUWYZ\\b`ZYZ[YYZ[]]^^`bdd`^^___``aacbaa_]ZWWWUZn~xqkgefhhig\\UVWj{sg_[Z[ZZZZ[\\VSWZ^[\\tp^X^\\Yk|HHJHGJJNPNOMKMfwsokhf`\\Z[ZSJNQNMOOLJILOVX\\[^^LJIJJJKJJIGIKOROJLOOORSPOMLLLLLLKKKKJJIHIIMOMLKKJJJLOOONLJJGGHGIIJJKMOONLIGEEDEECDHLJJMOQQONMMHECACCDEFHKNLIJMNNJGEA>===>@@BCCDFJKMNNLKKNOLJHHJJFAABBBBBBCDGJLMLLMNNJJMMNPRRSSUVUUSRSPOMLfgyrTJIIGGGHKMPOGDJKHGDEGB?5?K>5ASYVH9EIMOLD=HYWM@=An¿QFIIKLKJEB@??@@?@BAAABAABDEDCDFy~;>@@FHIFECCC?<=?APdeTFABBBBCEFHOUQMOQSWWXYZZVPLWLD<>?@?@>>=<8530/-5Q\\L?ED?=<<;6266DGFG]bl_LBBFIHDA@::DGB>B;/6DHC@?><71,,138>A@>=>>==<>>?BGGJ[gb\\[WOGDFFIMPPLMX\\UW\\XOC=>>>=>:4565./02620591*+/0024457;:/6EGBFJKKF736892.:Td^MKJ>568871.48<<=>?><:<=5-9A?DGE?;994/3<CIGDF?33>;/-..//-,3:532123523420001-+--.,)0>HD;782./.-03211124689<<::><:88;?>768:=;:2-178/)(+0588653--5;;6-+--03.(-400<GJ=52*1DB304112359=>=FJFFEB=75:956<DHDAB?99<632029<:8DEDEA=?CB?945753113330-,+))))),030./,)''(.7;4($*12,.23,*;=630,)+,'+27437<;;847<8/+.585560/462/-.00.1::@.%*-/151,.1.-11+**(''(*,0782('01-,,--+*/2.,+))*-13/('+.0+%'-/1/.:ILKF:1.+,11-.:EFGU^^hha\\UXSH;24=P_bcW>Fjm]PLJEM\\TD72MxqXdw_2&*-,*,1534>ED:30..001.++-+(,2=T^WX\\\\O@=CPUQZ^N@6)%'?etx~ocd_T@57;?35^tbC67.),),:82::31<LA(*9ATaNDORE9BJcbcegfgghhhiiiiiiiiihfffbadfeccedaaa_^`bbbbaa`][YUU[bbdhfb`_^[\\][VRTWTORXWQMOUVSQQQOOQSSTTUUTXZVSSTWXY[ZYZZZZVSQPRSTVXYWUUVWWX[]\\[Z]`aa_`acdegghhd`^ZZ\\aeehnoleXNQTROPPQV^c^WVXZ[]_][[]`bbbabfkkgkmdcjje]VRSVWWXXXZ]^_^XRQSQPTX[\\ZWTU]hopiZNMT]hkgccgqusx}yxrlebdaYYZZbm`\\nofmvw~}}{ckxxrpmd`kyp_ozicgfgjt~{nganystqjidXYrufffkk`aeb`_bghgfgga`bbfmqonfbcggjmnqsnkeebbcccijf^XVXXWWWYZXZ]W[^a_VR\\``bfnpkjuyvuslgkmpuscjytuww{xs|zywmfhmqoklu`vhbhqvaJdphQHNONg]RVw]Dc^LO\\aQPNNPRW`jTJORUTQkƱ~YTOMPRUUUTSSbrynhwtTPqeRLQUUWM_anpoqle^`_o۟vgaxoclhdt^_daa`^n~}tlpsuvvtacn{~zpa[\\\\^djkYQVjS[fv_M_q}_wy`X\\[[[ZZZYZ\\^_^]]^\\\\\\[[[Z[\\\\[ZZXVUUUTTTTVZ]_]V`keYWVVVX\\]\\[[[VRSVXYZZbk`XXYZWVXY[[\\[\\\\^ba_____^`a`a`_][YSTSQRT_x{pkfefhjf^YY\\U_ssf]XYZZZZ[\\YU[`VZXQhb[^[`ddsVRJHIJJHKOPNMKL`qmjgfda][[ZULNQPNPPLHILOORYZ\\]NIHGHHIHHGGIKNPNIKPRQRSQOMNLLLLLKKKKJJJIHIOPMKKJJIJLOOONLIIIHGGIIIILNOPOKIGEDCDDEILLJKNOQPMMOMHDBACDEGHHKNLIKMNNJHEA???>?@@BCDFHJKMMMMMMNMLKKKKFAABBBBBBCDFILNMMMMMMJJLMOQRSRQSUTSSSTRQPNblfRKKKIEFEHJLNNGDNLDADHLLLHEC?89>BF?:@EIMMB:?NE=<;5mYIOONNLJHGC?=<778<?@BBA@BDEEBIXșA>DEHKGEDFCACD@??;AP[`UIBBDCBCCDLXVQQSVWWXXZ[WSQSB?>>==?AA===:732543K[K@EB::<=>>::;FFFR_fcXOHFMQGFUVF::DB<;74:BDB@AA>82/--,/6;?<=>==??>=>@C@=Lae]YUPKGFIOQOHGT^UTdnjdS@=>??=5/276//10000242/.01124458::7;FEFR]\\RC877451+:Z]JFKF;635BE:-2>@?><??==>>7.1:===<:7665237:BEDB=65;:.,///02474..12344331--.01.-00///.7@>7553121.121014;>;:9;<<@B>:86;><677;;352.16610002344322./8==81/47751,2<<;CFI=67-.@@35:999:85;JLKLLJGE>2,4;97@GHDBC?::=83201583/@JFHB;@B>8568:9643210.,*))*,---./.+,,)'&+6?:55/)17.-085)2?;72-(''&-0.*)-369;<>=5..29;76887752/--42,3<6M;(.//11,-25444.**)'&(),28:7/%&274/7<-#%-2+##)-0/..,(')*.,&$&,/+'1AKH<21,')*++09CHGHHZqoh^QSN<0,/@X\\___GAcnl`NJIKLC@A=ErsMJY@%'18=8.-1/3?FE=2--,*))*+-///048DTWU\\YB37FSSQXZSSO6$\".[vviUbbS;/27<1#8VM>773..,(-7=<5-.00,(6GHFY^IGM8'.4ddegffgggiiiiikkiiiihgghfcbbffcbb`aa`^adccccca__[UV]cc_^cfc_]YWWXYURTUROQTSOMOSTPNNNOPRTSSTUTUVUTTSVXXZZYZ\\[[XUTRRSTUWWUSTSSTUXZ[ZZ[_baaacdffghjjf`[YVSUallnssoi\\TSRPOMOY`ZTQR\\a`\\WX[_bbdc``aaaa_cea_cjmiaYVTUUVXZZZZZ\\[YXYUQRTVXZ][WW_q{o^XUNT`igbcgjfevyouwqdfhaab\\[beZ]t~zzy{~y[Xgmooprqlnvzqbowfeffhiny~}|{zy~q\\]y{|ztombVTc}t|{idonbbeaabekkjkmmkiijhnvutg^eqsolmlongdcbcehjrzp^ZYYXXXVWYXYZZbkttf`baahnnlifruqrnbdknw}~|sofous{~}{|}z|yusmlnjqrlln|~odgxvsHJXziOLNMORTW[MK]UNONKNWPLQWbf]JKQSVVTUĵl\\TOOONQVUPZs}mm}ϴdT\\yrWTPP}Villljd_^`Wpzqlio|xqe|^dc`a``o͟rpnnnoeahlvyi^[YWcqsg]Xm`S_df]egbrľef\\Z][ZYZZYXXY[\\]\\\\\\\\\\[\\[[Z[[[ZZYYYWWVTTTVWZ____ecZUUVUSUSV[\\]_YUUUXZ\\^dcXRUWZXXXXYYYWWRUZ^_aa`^_``_\\YUSU[RPQNPVTk~rlfdelnaXXYZSZnseZWYZZZZ[\\XV[]MU\\QXd_`YW\\bX[P\\NKIJIGJOPOLJRbidcdedb`^\\[VOOQRQROKHHLPLLVZ\\\\PIHFFGHHGGGGJLMNKLPTSRQPONNNMLLLKKKKJIIHHJOPMKKKJKJLOOPNLIIIHGGHHIKMOOQOKIHFECCCGMMLLMNOPNLNOLHDBACDFHIJKNLIKMNNJHDA???>?@@CCEGHKLLLMMNNMMNMLLGAABBBABBBCDFIMNMMMMKKIJLNOSTTRQRSTSSSTSTRQRUQJJJHFGJEFGFEGIEIHF@9:CIILNG@:9::;>?@DGJMA::ANYUD8YnSUSRRPNLJE=97568;?BAABABDEEBVi̾_?IKJC=??BFC>@EDABBA@GW\\UKDCCCDDDIUXTRSVWWXXZ\\YZRC<9<;:<?A@==>=854345FXH:?;68:=ABBDDFKF[^dYRQNQTUJPee_S>=?>;;<BNND;AB>93578559<>;=A?<???><:=>7>PXURPOLHJOPONJGV]RUgmkkaJ<=>><83./55220//021110/334665547>FIEL\\e_QA9;;53/)<YM8CG;/05<IPL;4AC?68@@A?:62/0687754322100-1<CBBCCCBA<9976799620122224442.-.043277-061/2323443340/00005@FD:1479<;8886;><74356342/00012320.-./0//39:98657:985/5CFCEEB788.-9;89:::88407KQOMH>:?=54:=<9?HGCBC@:99751..15/-@MFG?9AB5-165788652/-,*('),..//-****))(&,;A71;<1/51./68+)==<9985.&)/1,*)(,29AA>82346;<88>=;82.+294,2:<BH2100/-)/697743/,)'&'()+/23-%&05-'-.,)*.1.&#)031-*)(('').3.$/;,(,3<7,**&%''(*05?E>6CY_ot^KF@2-*1G[V_bedWYkobPKG?72<AACdtL67.,6>A?6.0,*7FHE?6.,+****+0;EA6596BUYXD.+2GTPQX[[]_I1/+Ir{yN6RaW?0/7CC-$0:87:9652)(6A;1./0/04AKJGHQXM?0&'(ffhiihggiiiihjlmjjjjiijjjfa`cedb`_ab``cffgfda`aa^Z[^a`YTYac`[WUSUWWUSSUSQQRPNMOPOLKMNNORRRRTTSUWXXVVXWY[[\\]]][XWUTSQQRSSRRRRSTWYWWY\\^abacefgijkklkcZVTPMVgpponousgXQRQORXYRQW\\_][YZ^bdccdccdcebadcdhgbcijhfb]XXVVXWWXWWY\\__^[VWWXZ\\_]VU`hhge\\VPS\\bbbeecbjyyrnjtrjgbfi`]^X\\szuv{tWXajmooppnnqtogeaceefgkmrx{tlz}mW_~yswxvuo__ltsx~y{qWhxfmlbacb`hmlnppooopprpkjosibkutpkjglolhbadglrvyzfZYXXXWWWYWUV[flmljhb`bmrleai{xrlmk`gmpxviitpopt~~{{~zxvtrnmqtvxsmoqxkl^]v`uNLB_nSKMMPUSTPMOQPPPRVphTUU]id[POSVXY[W]on]ZZWPKLTUNU}quɩiq{̘cRHuVegiihd`_\\^[{yu{pd^`aa_`bhtۻwspnlogedgly~n`ZZ]oyuba^yq[Z`b`_smgbdmW]YWY[ZZYYYXXWVX\\\\]^^^^]\\[\\\\ZZZZZZYYVTUUVY[^ahh\\YZYXUTSSRUZ[YZXSOOTX\\dcWRPRTZ][XXXWWVUQTW[aeca^_ba^WSONPRNOPMNTRYuldbeskYXXVWTYkpbVVYZZZYX[XXXVJNZKP]Z]YTSZSTWVNKIJLKMQPOJKWefaabcddec^\\YUQOOPMJJIJKLIJTZ\\\\QJHHHIHHGGGHHJKLNPSUURQONNNNMMMLLKKKJIIHHJPPNMMMJKLLOOPNMJIIHGFGIJKMNPPOKIGFEDEFKMKKLMOPOONNOLHDBCCDFHIJMNLHKNOMJFC@??>?@ABCDFHJKLLLMMNNNOONMJB@CBBAABBCCDHJMNMLLMKKJKNNPSUVTRSSSSSTUSSQMIFFJIGGHPPEEE>=?CE>FH@:45@JJKJIC?;>ABEEEEGNB@FNevbC>?qSVWWTRQNIA;9779:>ABBABACDEGJTn͈@JHEB>8;>CCB?@BBADFF@=EPSNECCCDDDGSYUSSUXXXXYYXUP888537<?>>>>>>:77679AE;477779;BIKHEHEEY_aTJKKNPKK[ebjhJ9=AGJPUTJ93<BE:326<=<>A=86:<=?>?B@;<=;:?DGIJKHGNTMINNGLXQXijfgdQ>;=<>BA<:63541113332354357:840,1?HHHSbc\\P?66722/)>V>8@?5,1=CDMTI;AC7-7<?C<10224643210//023108?<;EONLIFEC@<;72247:99776668952118@;<<6573,*,/13543420112/3AKD4+.23335777;><73200330-+*)))+..-+*+++/4667777778<=88?CA@?<68633557:9898866@NQMA3-/579>?<;<@FEA@@=;9742111242/?NFA:6?>/)05589:8752/,*))+,-..01/,+)*++'+9>3+4>;5651-12*&7;;8>EC7**267564*,2:964100.1535;;961,+03.,.14/F=//.+(),/1./244-(&&'&%#$*2751030)**+.1:>9/+-.12-)((('&&(4917C60/,+)'(&%%%&(+-0<B5-LR;Xp_A41.-+3HYTb`drdN[eVKIF8+/:==>O`D555:CGE:1282,5AHHB:3/-,+*+*3ENG:5;;:FUJ-*:@HPNNQ[a^`UJM:>gx`5%5JN=..;IL>+(29;>>94.))2;81///048BHFIA9WY4*,)'eefijkihiiiijlmmlllkklkiihea`acba``bdfhjjigea_b`\\[]^\\YVSTXZ[YWUTTTUUTSTVTQOOOONOONNOONNOQRRTSSUVWXWVWXZZ[\\]]]^[YXWUSONPQQPRSTTVWUSV[^`a`bddgllmmnnlaZXRMNXef`_`jxs[QSSTUUTSSYa_WU[_ccbddcdijilkihdbde`]`dhkkjfda]ZXVVTTVY[\\\\\\[[\\\\\\]ac]UTVX_`hhVPR[`_cfeebdlpf_wtlfdfa]Z\\r||ywvy{xk_`gmoponlllpplhdeedegie`ejaZwi[axzvvvy}rgolca]gh^dnfe|rjib`ccdjkorvtpnporxrdbjrsjkuwtmkjmrsmbadjptuvyt^UVVVXXWWWVXgnliiifdbblqkegs|sslhljkptuxukcdnqlmu{x~xmprjimqvyywmlnli^paTjZKNQPLLMNTTSRPNOOQX[ls[c]_gfbROSW[\\\\ZaؠiSXST\\\\ZYSRSPKhpzʥtyI~yXjhfhgc`_]^^jç~}a`_X^`^a_YYatܦwtrrrse]W^cro`Z[gtyn\\Zc{^QX^c`^xulkZPk~W[ZSY[\\ZYYYXWUSSX\\\\\\^_`^\\[\\]\\ZZZZ[[[XVUTVY[]ikaWZ[XVUTRPUYZZ^`a\\Z^c`^caX^_WTX\\[YZYXWTSRUW[chd_]\\aa^VRPQRMLOOMNQURxjb_kvaUYWVWUWhn\\QSWYYYYXWWZZULIUGP^Y\\\\SMQPPPMLJIINPRRPNJKVbb]^`acehgc_]\\VQPNJHIJIIHGIPX\\]SJHJJKJJIIJJJJJMPSUVVSQONMMMMLLLLKJJJIIHGJQRNMNNLKLMPOPPMJIIHFFGHIMNOPPOJHGEEFHKNKIJLOQQPOPPOLHCBDEEFIKLNNJILOOMIDB?>?@@ABBBDFHJJKLLMMNMNOPPLDACCBAADDDEEFJLMMLJJLMMLKNOPRTVUTUUTSTUUSRPMJIGHFHCNYPBED=:;:@@HF@;67@KGFJKNIA?CDGEECENBFT_hjO?@>B¾V_a_[VQKB;8899:<AA@CBB@BDEJGHuԺ\\FG:;?=;<?BBA>@A@BDFGEBBFGFDDDDDDEGOXYUSUWXXZZXX[L696115<@@A@AA@<;<==9775567899<EOMGDKEGTVXMDGHJICHUZ_jdPA?ADGIE<2/26?E=5159;<?B>5026>??@AA?@?>=AHKMMIGOWWTRSMCDPP\\ljd`^UD?C=BTWXP82764224332477469<5./28AFGIUec\\P;20/121,:E1798516?@?IRMA=;96:27@5,03346310//./5>C?AD>32<DFEDCCCC@<4/047<=<:74249<99969@;@D<300-+,.1443334455624CH8,+,.//03557=?<840.-01/,+*()**,02/)&(.432113:=:9:=?:66:=;989999;<;89769999<JQJ?/#-889;>@@??AEC@=<;:86103663344>MC94263-.48:;<;::8651+*//-+,./670--,-.,.682*/<>:==6+*,*)0441;E@2-583036;7.,.-+,,,,,()*-110-)&))*++,,*'9H.+)'$'**()+/.-*(&&'''%%)09;72340.0111<C=4/021//,+**)(&#+8<=:521/-,,++**+*+-*.:=55MC(6HG0*-/115CKH[Z\\miG@OEGJD4+/6=>26?329:9@JG:6<>;627EKFA942/--,,7IJA:9=>>CD4,=ONIKLHFV`_`TLRD>UZ=*)(/72).=HHB<436<@?:3-*)+250.../37;@DF>):XB!$*)bbdhkkjhhiiiklmmmmklmmljhiiaZ\\_aa``cillid^`efdcaZX[_]YWVUUVWWVVUTTTSTSRSTRPOOOOQQNNOOPPOPQQSSSSUWWVXYZ[ZZ\\^^^^\\\\YXZYSPPPPPQRRRTVTQTX\\]^^acdgjklmmnong\\QNMNTUPQUZ`aXSSTUUTTUTSXXWUVVY_cegghmnmoomie`XTWYZ^adimooomigc]ZYWUVYXWZZZ[]`aba^[YUTTV]XTSTUW`ebde]\\]\\j}|sssh^][Xg||}}tgadlqqpnmllopkkjdaadih_WW^`\\jwq`Xasw}}xtroqmoq^SYXZ^XXchuvjeb`aimkptqonnoqmsycZ``iolnvxusssopssf_cpz{|{zyia^XVXYW[W[u|xutqjgecbdipx}woqlqsxypgggdfpomz}xxsdu{igkmnpxxkhjinwy^igUdMWjGKLLMNOPRSRPOOONTYhs_a\\\\`heUSVZ^^_cܩ{_UTPOQQY__ZVXOZrzkzλri`kОchaijegeb_]irwkwʢ{n]_jhXV[^a_YLMQYYussuusr^WW]_g}reZYilp]TOjhQMRX_^VjrkgeVK^`Y]ZZYZZZZYWVTSRTWWVR_`[Z\\^\\\\[YYZ[[[YWUUVZ]ch_XZ\\XRRRQTW_eehty{{wsumb^_cokc[YZ[[Z[YUSRRVW[dhc[XZ[^_[SRRROLKLNNOVT~yhbatoXUXWVWUUceWRSUYYYYZWY][VLFPPRXXXXQKJJJIJJHHHJLNONKJJMSVWZ^acfihfa^`]WUSPMLLKIFFKQUY_VJIJLNNNNNNKKLNQRUVWURPONLKMMLKKKKJJJIIHGKRRNMNNLLLNPQRPMJHHGFFFGIMOPPPNJHFFGILONKIKNPRQPOPPOLHCBDEEFIKLMNJILPOMIEA???@@ABBBCFHIIKLLMMNMNPSPGACECAADEFFGGHKMLKJIKLMOMLOQQQTUUUUUTUUUUTQOMKKIEBB@RVH?DC>;::?FID?99CLJC?BCIJIHGDEEDCDJBJae\\N:<<?=A}©sgffg]NA:66899:<?@ACECCBEEE:KК^YH9<@<:;=@CB@HDABCFECCBBBDDCDEEDEGIM[[TUWXZ\\\\ZWYE5664249CKMGFDC?<>?@?;98656777?MTKGDJJHKMNDBGHJA7<QQO[XQD98<AC>5,-24::;757778:><4/15=?>>?@BB@??CJPVRNUcc^`b`TE@KJN_f`YXWTRREBSWSF9675542210122236;:524<AEJIGRef\\L700.143.0/03266479:@INJB>;;<;,.40/12233332358=DMMEA<3--/3<@ADECCA717846:<=92-+/787:<8899=;4-),//113553555666548AA7/-,+--.2446?A;61./143.*+.010035660)2?<2/-*0=C?:;>91.17:86477336;A?9537988:IL@6-*7FHFCBADEDCCB@>>>=;8546985148=JA630//36889=??=;<;60--//,.01149<734433442201;?<@B7+)././///=E9+-98/(*042-))()*,,--,)**))*)'&'(+./011//I3.,($%(*+./,''))''''((().56424411138:==866674221.+**)('2?FF:235:B>4/021../.,.47674.)%&+),29<97533QY]hg[NF0?MB54337>7,,./35/6ID44<>9537>EGH?5001447@LC8;B<:DJ:)8PUOJHICCQ]`aM=DB@GA.(-/)),,/5=B@;523579;:3,)*.-+.//023369:3&\"<P5\u001d(/aeihiigghhikklnnmkjlmlkkjhfaYTW^`_`bghb\\VPV^dfb`_[Y]_\\[YVUXYWVVUUTSSSRRRPQQOOOORQNOQQQQQRQPQTTTVXYXZ\\\\\\\\\\\\^``_^][YYZXUSQPPPPPQSTRPSWZ\\YY_egfhkklklmoofXONOONKLMNOQSTRSTUTTTRRTUWVST_hjhjlllnnoomkki^SQVYWW\\`cfknpqrqmifa\\XYZZXVUWZ^^^_aba[XXWXXWWUQR\\b`ada^[[grmhr~wf`[U`~ulfekqqponkmpqmje`\\Z`hib[[_cda^[VV^ffunkmmndXX\\]Z[]]\\fyohb``gqqlotomkmqqox~eX^]_dktvvx{wkmvk_cs|~|unh^ZXXWZ\\{yryvqlec_aq}lpqtvqikkddmmmw~~~neyziddchnkkvvpqacqwubUKFJCqKKORPPOPQQOMMMPWZZe~lXXZ_cmma]]^^][vhTheY\\XSPMPS[^]`\\d~ħzjct_X_fzuoovi`_mkiwzh]aaktqobbzϞ~PVccaYTVX\\c`OPRSbBjpny}j]UW^hki}f[Z\\_fWSWlWNVVXYZX^efec^[TagYZ[YWXYZ[YUSSTTSTUV]`\\[fe[W[\\[YZ[[[YWUTV\\be_[ZYYXSVTU^lw}|{uplegrmdVakgebb`][Z[XURSUYZ]fhcYUVTV[]YWTNLMMNOOOVRmwgbfscSTUVVWVV[ZWVTTWXYXXY[\\[XQFLXRVWWWPKJJJJJJIIIGFGIJJKKKJJPY]acfhec`]_[TRVVTPNKIFFKOSW`YKKKMOOOPPNLLNTVXWWVUQONMLKMMLLKLLKKJIHHINRRONNMNNNOQQSQMJHHHFFFGJMOPQQNIGFHIMPNLKJLNPRQPOPPOLHCBDEEGIKLNNJHLQPMHEA??@@AABBDDGJIJKLLMMNOOSRLDBCCAACFFFGGIKLMLJJJKNOPLLQRSQSUUUUTTUUUVTQNLIHE?:8ASP@8>>;;;;@JD>=7=MQH>68;<>FNOHGGFABHBQijXC759:;BN_ɿjmlmbM=87899::<>@CCGCEFFFKP\\ugdTKEB>9:;?EBDZOCCBDDBABBBBCBBCEFEGD:M`XSW[]a_\\VR?665444=NYXPJEB?<=@DEGD<532336>JMFEDGGGHMNAAHHC7/7KG>TVC9:9:;>FI<246::86997888;:6556<:;>?>?@?>=?AL[ZV`nh_chf^K>D:3@TYVUW[VLE>GN@5687556400/02/-27;:89>??CIIITffZG4/11254112342556656=GJHA?==<9.*+.121112258:@HPSPD4..,,-/4>@>:7:?=20:948?>=<70147777867645/--/003799975575442/06:970**+-,,1436;<71///474.*+/4533469=95AI<//2-2@C>98:6-*/79::8741/03>A:0-06557DE?934:<<>@AAEHFDBAACDCCB?<99995/2:<B=63.,2::821<BCBA@;/&.4+&-56666:A?;=<;960,0326;=A?4++/143201@H:,184.-.56-(')+++++,.0.,)()***+))+++-375/@=,/1,((),/-*'())())****+054114301367995..25689862-*++-2<EKK?67<AGE<0.54.-,)*))07:6331/.147;<83/+.J]d[G\\eB(0>?::74465+).0..,3IE/)/244566<ILC811258;@I@9?D?=JQ>,3CGDEGGGKT]caH8?BAD<+&,51*,10+0<:10230-09;3*,-,))/11110,+,..,&$?L0)1hjjhfdbdghiklnnnliijjhedd__ecWSX^`_^^ZURPPRSX`_]`a]YY[\\[WTWYYXWVVUUURRRPOQQPOOPRQOPRSQRSRQRSTVWXY[\\[\\\\\\\\\\\\^`aba`^[WVVUSPOPPOPQRRPQSUXZVU]dfcejlnnmmknogYQQPNLKKKLORRQRTSTTRQSVUTTU_iigilnnllnonnnnpncYVXWTUXWVZ`bcfhihfeb[V\\_XTTTVXZ[^_ba`a``^]^_^][^abbdffec`a_^jwwsrl]Ud~xvohipqnonlmmmmjd`YZahg`ZZ_hh^Z\\ZXcv~wrqnkhaXY]]Z^e^Vmpkd_^bmspnklmnmmrty}p[Z___gu}~}}kdrrecpsw}slic`YVWS`e\\filmiccumhkorqppnechghlttpji|zc^`_^dchx|wcYhwnMHKJAnzQKNPOOONOPOQV[cda_ZRwgWZiomushla]^\\Ta`^_Mb}zkWY_[WVVWZYZ_^d~~kgp`zeZegzucZSMT^aaqiftvof[Ra⼤uzM^pbTUVRQV^YPSSnh\\rmaRSV[esnyi\\YVWWUThdRT]]\\Z]_^_bb`_b_XrkYXWWWWXZ[YTQSTTUUQXg\\_lrjVPX]\\ZZ[[ZXWUTU]e_[\\]YXY^ksuwyxwwqfaZUTTWkxk_XZgllmd]ZYZXVRRVZ[cji`XVWUUXZZ\\YVSTUSPOQSP[thcjjXQSTUUUUUVVWWTTVXXXZZZ\\[XQEJUOQWXVNKKJKLLLKKKIGGILMLKJJHMZ]_`de^\\[[]VKLTXSOLIHFFIMOR[]LKLMOPOOMKMPTXXY\\WVUQONMLLMMLLKLLKKJIHHJPRPONOOOPPPRSSSNJJIHEEFGHLOQQQNHGJLMNNMJIILNPQQPPPPOLHCBEEGIKKLNMJHLRPLHD@>@@AAABDEFIJJJJKLLMOPQSOIEDCBACEGHHHIKLMMMKJKLNPNKNRTTSSTSTTTUWVUVSPNKGEA;8;@BA96;<;;;9=B>9=7?LME>76877;BKMKJFGJH?Rhm`LF?78?LG8EZ½̦rniibN?:88:::;<>@BDECEFFHTn}Δbg_TQTJ@99;AFCFTD>BBCCBBBBAABBBCDEFGB09R^SW]afe_UOA767657CRZZULFB?=>DGGHGA73111358;>CDGFDIOMDBGD:127CAERD=KYWVH;>E@59;>?:8<>??><;95224699;KQB>@@>@?I]\\[gng__fiaG7606?OWSRWROPG<CJ>:87676640.-02/-4>B;5:?<8=EJIPceYD2134333457876667536=FJGB?=<;9/*-243/-.016<BLRSQG4()++-/29>><4,.1799;98<@=;;732;=;853431//.153129?>?<5345320/.37::5,*./.,+03331/02421233/.33356646>A=AJF6,6?53>>843552.28<@CB=8:;959<7-)+23/1>@=;64/&)9CCDFGFDBAABDCCBA@;987414=:8762*-7:9621;BEED?1(*78*&/5689<@@>?AA@>6-),./14;?:0-.0233324@F917:1)()-2.(&()*)(((*,,)''()*+-+(%'((,132;G1063-+,,*'')))()+,..-.2774214545?B<24740+)09>@>62///301<B;2138===?:124.('$&(,5EMNMKIB5467641-1/+<SaUDVV03@HH@;98853110.(&)7LB+%%(033118IOJHID9589=DGG@<?GOSK2,938DHHQ[Z]aZB7>BBE:'&/891.42)-9821331./33-+-*((',.//-+')0787:69LJ95mieda^_cfghlmmnonjhihec^ZXX_fcZTX][YVRRSTVTPPX\\XYaaWTY[YXWWXZ[ZXWWXVRRPNRUSQPPQQRQPRSQRTRQSUUVXXXZ[[[[\\]]]^`abab`]ZWSQRPOPPPQQQQPQRUVWVVY\\]]_dhmnlkikonfXPPPONMLMNPPQQSRRSRQRVTSSX^^Y_lpommnprpprqprqg[WXWTSSRSXYUVXXWX[[ZX]c^YWVWWWXZ\\\\^aca_`abbacccccdfggfgfa\\X]how~ui`]ds}zvnkprqsplfcgnlhbZ_lpf\\WWbgga\\^ackrrlaafbcefca]dh`Z[][bneVmtkb_`eornonehjkntpw}h[^a``cn|xtxqcgskbkztkrolifaYVRUauRY[Z^glhq|w{yvtgekpronpojfhhhjq|omiW^cdye\\_`dfikr|vrx}uPKKNFHRLLLMNLLNONOQUYYW[ca_jj`h~xdatiXbe[KJYeWMU\\oaTae_]ioc]]^^]bwpZWbf\\V]T\\nWQV[abgz{dc_ZYUU̝}Z`ou^SSQRUVVVUPǎun}XPUY^dnmktq]XQORUZk^WZ\\^X^cb`\\__^]\\[T[|qXWWWWWY\\]ZTQSSTUUQV]ZblfZRQVYZYZZZZXVUTTZa\\[[ZYWZgztg]YWXVUUSRSW\\kylYaiihaZZZZXVUTX\\]ejdZUYZZYXY[]]\\[YYVQQPPNOrrfek_RRSTTTTTUUVVVVUVXXYZ[]^[WOJKNLEOWRKJKJKMOONMKIIKLONKHHJJKV^bcbaZWX[[VJIQUQMJHGEFJLJJS]NKMOPRPMKJMUXXXY^WVSQONMLLLLLLLLLKKJIIHKPSPONOPPRRRTUUTQMJIHGEEFGKNQQRPKKQSQPMJGGIMNOPPPPPPOKGCDEEGJKMNNLIIMQPJGC@>@@AABCEGGJJJIJLLLNPQRSNIFECCBDEGIJKKKKLLLIJMOPPNOQRTTSTTSTTTVWWVVSPMKGA=99;>;:69<>>>;9=@=;><>CIF@8888999@KJKGEFA6MimmeaaL;Kv]HG@T¾dfgcR@:889:;<==>@CBBCCDJMfqfcTLKZO@:9<CGFMWF=BCAABBBBAAAABCDDFG@20?^UU^djjbPE:787:<?CEMXSG@>?<>DEHJHC=974674102>BGGDIKHIIGA5017NUL:6Qjvx|pV71738ED?<<@CFB>>=73/.00256H]L??@C@;E]Xcoi`\\[cjaB35AKLQSPQQJIUSEADA@=77767630-/0/-3HM91<@:69ELFGZbXD565540269<=;:767712?JKFB@>>;90,1782-+-015<JSSMG;-+,,..0369:::742;ECB@=<@>77985:@B;522/--/147416>?==;634545334<@CB5*-560,,/223324654456403<=9:=<42:=;?D?2-8?61640112442489:<?;58>@7262+(+/101;;4582%#5LRKGGGGDBA?=<>AA?@<956785=<3250*19:8998=@CED:)%3?9,+14689<?@?@CDC@6+)++./05850//00///148;5499/'%').-,++*)'''()+(%&((((*,+'%),+**-38H>:73+(**(''))++,.011248<;74248=CMRE31650($(19==;98750,19:1*+.168:CH@84/+*)1=AARULQUQ@/05772121/+,5?F_lR0AS\\]P>8989;<<80.00=M?,,.-22.,+3FONS][LACFFFILG>@ILML99D14DINXdYOL@959@EE;**7;:4/42)-77322234220--,)(((()*+)('.<CA@FMJKVJ>ec_^][`egginmmopojhmkcde^VTSXa`WRRSTUVWVVVTSSTVTTZ[WVXWVZ]ZXZ]^[[ZZYVSPOSVTRRRPOQRQPRRRSRRRUWWYXY[\\\\]]]^^_`aabbcba`^YTRPQPPQQPQQPPRTTUVVUVUUVY\\^_befhgde]TNNOPNMNNOOQPQQQRRQQTTUTWVWYepnkkmopqppqpqqqpdVUZVVVVUVXWVUUUSSWZ[^`]ZZXXXXWVWX[]]\\\\^^_``a``aaabbbabca`ZZ\\gywm_]ovxy~~{yqrz}~}pc]]cnmid__indZZ[giea^_dhc_^b_^^baa_`^\\]a`\\Z`dfnnbtsoieefotrneecbbhl^b{z_[`aabbcnx}zurtqldhfglr{mlpoqke\\USUWenTU\\X\\alps~z}{tkjdlqusnjmopmoqqprx|[ST_g\\]ss__abfiikr{}}~{dJGIIHBYHGHIKMKNPMLKLNPMXtwhiyqi[Qkqnh^hdUJ`_SVUkkRZdhjw{gaibb`UR~t}QWSJMLBѾjZW]acfiorֹ|S\\[WYZҋʞ|jg\\luYNTTSSSTTQܳϦwopUT]hllfli[jrgWGOX[^f]_^\\XT]fec__`^][]WPl}\\WVVWWZ]]ZVTUUTVVXX[Y[ZZUWXUSUXZZZYXWUUSVX[[[ZWYboui\\WTRTUVWXXVTUXWYm[YZZ[Z[]^ZWVX\\^^ce^VVYYVTUWX[]_\\YXZXWRNKJ_rfjfWRRTTTTTTUUTVVVVUVWXY[\\\\ZXVWa_JENVPLKLKLMOPOMKIJMMOOKGFIJIQ\\egc]YXXZZWOMSVSOLJIHILLKJLYQJKOOPNLJKOUWVVY^VURPNNMLMLLLLLLLKKJIHHKPSQOPOPRRRTUUVVTPJIHGEEEGKMQTTQPQWWQPMJHGKOOPPOOOQPNJFEDDGIJKMNNLHILPNJGC@>AABBCEFGHIIIHIKKLORRRPLIFECCDEEHIKMLKKLLJJLNOPQPSTTTUUTUSTTTTUUUUQNKJH@=:77<;:7;>BBCB?AEC@DC?@INB79989:7<IKJHA><6Igow{zkE[wPEOJgѮgejhWB=;:;;<==<<>ABBCECN[hznlm`LEKNJ@<;=BDG_lYKKGDDCBAA@AA@BCCDEF@417OYT]ekleI;9789>DGA9@PUNE?>:;ADHIE>AEB?BFB;1-<=AEFLIBKPJ@4..EcZ9-BSSYiyzhHD=16LH>?CDGF?>=;51/.01014>YXG??@?=E\\]ls^QUX^`R@FLUWMGS]UOMP`VKMGA<;87787643202/+2FF30?ID:7DLEAJPVL@9762259?A@;9768<86>GGDB@?>950059841,00/3>PVNE@:.+,,.0113234568@IKIGB<=C>16:;99?D<32.++/0133426<<:98865468999;?EF5)0541.-./0149;60279940499;DG?63:=;:840023100,/443234677300/,-163121+),/1/1882*53(0HONJHHHGC>99::<@@?@=966>?35<6240/5;<===<=;:?D9((7?:/1457878<>BBEHF>3+)+*.3345532210..-024775871))-04332.*)'&'*+,)'()(((+,+(&(*--,/45=FB>3,((())(()*-.025689;=>;736@JMOMA2/24/(+0477<DFGE=45<920.+1:==?AFLE94554=JLMRPJGQN8+/57711:6/..,'*MmdJPRO``J;<=>ACCA?AD@BL@24654300.2<IMU`ebXTSQJHLLG>==:DBEN80:ERZeS:72320;DFC54>;:4.22+-22111011110000...00--,)((3@DABJUXQUTL[\\\\ZY]cfhjmpoqrrqoklof`gfYRRORZYROORVVVUUTRTUSRSSSTWWUSSY\\YXYZ\\][[[[YWSPPRSRRQPPPQQOQRRRRRRTVWXZ[]]^^__^_abbabcdcccc`ZTQOPOPRQPQPPRSSTUTTTSRRTSQPY]aa^[\\]WOLNPNNNNOPQQPQRRRRRSTUVVTVbmlghilopqqppprsrqqdVTVZZYUSWYWWXYYWX[[\\[\\\\\\[[Z[ZYZZ[\\]_^^_____^^`a^\\]]^__ad]]bdr}}}|{~zprpq{|{}x{iYXYbmnkgc^^a\\W\\cigdb`_``^ba_^]_b`^]]]]Z[]^Zaolntrzxpjikigowqdeh_[\\\\^\\]lm_cb`bfha_gprrrqqrme]ckqpqrmmfiqoj^TTUWVTUWWVcrwst{|zyrojglrusnjkosvz|{uuzy\\\\dofZ\\ee_acdgolbmz{z~~qf]ZROGGWqNDCK|gTPPNNOTRH\\rdxnu\\JZfzzMUgiV^`XXWehPQ^fn{|ccmf\\[WEh˚wyiFKLKNΚ_U^ba`ceb_aۜwn\\TU{ݩݚfuvc^_q`OQSSSTPMȿƹcexseRXiwljijh^]poXROZ_b`]eg^SP[ihfa`_^^aa]XceUUVWW[^^[XWWVUVXZZZYYYZ]ZYYVVXZZYXWVUUSTUZ][Y\\dnn^QOSWWWXWWWWVVYWXVh~lZWWZZ]`bd]U[_^^][XUX[ZQLQTUVX[`ZWZ[[WPLMTyzpl\\RSRTTTTSRSSTUVWVUVWXZZZXWcdWepSS]VNLLLLLNOQPNKILNOPPLFEHHIMTZ\\ZZYYYYYXTRVVTPMKKJLMLLLLWTJINPPNKIKPVVUUY^UURONNMMMMMLLLLLKKJIGJKQRQOQQPRTTUVVWWWQJHHGEEDGKMQVUUTW[UPNLJJJMPQRRPQQRQNIFEDEGIJKMNNLHJMONJGC??ABCCDFFHHIIHHIKLMQTRPNMJFEDDFGGHJKMLKLKKKMPQPQQRSTUUUUUUSSRSTUUUTOKJJI?<<87=:98=ADEDCCDFHEFFCEMSD69:89:9:CKMJ?::9BUzgBdqWOPSYz̓Z`\\OC>=<<<>==<;<@BBCGFXnsliqiaL>GFD@=>>BBE`fTTUOKICAAA@A@@ABCCEFB535H]S[dkldF9<=9?DFE=:@HLTM@=;8;CEEB6:HLJKMKA31C?:AEJH<IRH=713WnN08G?.2TrtrobB18FE?ACEHD?>=;40//18>>=>MYQE>>??E^ek_GCKLPPF@LUURL@RaYY]`iXGVQA88889866555651,194.7ELJ;3@KGA>>FHB<94048;?@=6457:AB<>ADDBAA?9107:;965572/2@QQE<;9/+++.22/01///+3HQMJH@<AB;769<<9;A?83/.136797546;<978;:613689:9:BG9-25310//././11-*/797544578DD@BFFA;=<400.,-//,1885127975731/,++,/122.+--.,0670+221FTNJIIIJGC=44=@=@@@@@=;;?C6.7954029=>@??>>73:C=-/>B>::::87644:?DII>30.+))0566:<:64210///25997852/045:964-*)'&'+--*)))('(,-+(''%(+.146::;81,)(((((((*,07;:9878855667CMIC;0//-0.'*-26;?BHMME<993/126>GKGB<>LMC:9<=@EGKNOHEB>/)-3772372-/6<CHUjl_dfROYPA>>?DFFFHGGEEH@79965424864>LXbkmh\\XTHGMNJ>530?FKTA/,7MZ`K./10//6AGKE@@<:4-13.-////0///0002344557:5/,)')1:<<EPXZSTZ]WY[WW]cehmoqomnrttmfhh^\\a\\SQOMRVSRPQTSRSSRQRSUSRTSRUVTRTVWXYYXZ[YZZXXYVROPQPPOPRPOPPQRQRRRRSUVXZ[]_^____`bbbbcdddcdc`^[VQPPPQPPRQPQRRTTTSSSRQRQMOSXZ\\YY\\_[SQUTPNOONOPPPQQRRRRRTUVUTVcjedgkmpqppqpprtqrvraTVZZZXVYYWYZZ[ZYZZZZZ\\]\\[\\\\[\\\\\\\\]_a``__^^^\\]__][\\[\\]]`cb`lljrxokmn|xnrz}~~|fVWYcoojgd`ZYZZ^fecb```^V]eb^^]_a^\\\\\\\\]ZY\\^]eolnv}|smmhhojgqxmckj_\\Z\\]]^dbahdachi`[borsssrtwqfdnrlaad`^fonkbUUUVWVUWTTe}{tux{yx}wrslhlqrnllmqtyvv|uhuwjYXZ_aaccfhpl_iy{z~usxxwlZGDWF;sї[NQOQRWSFei|su]UrgLMNjUCT]hcbZZXbcPMYbbl}melcWX\\\\Pǣ{qjjIPPQbONaic\\WY^ed\\ꯄ]PO\\ߨxT`s_hphomWSSOM|ǰvVRR{rgQYriZ^fgd^Y`cUPPX`b_]fj_PO\\jjhb_^\\]``]YZnpXUVWWZ_]ZXXWWUWXZ[ZYXYXXVVY[YYYXWWVVVUSTUZ]ZZdml`QQUVVUUUVVUUSSWWVWUd|k]ZZ[]ackaZ^a`^XUXV[m`ORTSSSSV`bZWYZZWQRPmyiVRSRSSRRSRPPQSUWVUVVWYXXUT_eKQSTV\\TMNMNNNNOQOMKKLOOPPKGEGKMORTUWYYXYYYXVXYYUQOMMMNNMMNMTVJFJLMLKILQUUTUZ]USQONMMMNMMMMMLLKJIIHJNSRQPQQQSTTTVWXXXTKIGFEEDHLLQVXWYZYRNLJJMMNPRRRPQRSRNIFEEEGIJKMMMJGJMNNKGB>?ABCCEGGHHHHHGHJMPRUSPMMJFEDDGHHIMNONMLIJNPSSSSQSUVVUVUUTSSRSTUUUSNJJJI<;<;9?:89?DEFFFFHIIIGGFHNTF68:9:::9@INNE;8;:@N^nyVEYqxsfNJO[pyȜUPQLEA?===>>>;:=@ABBFIetphil_^QCDCB?>>?BACFGHSYPNKFDA@@@AAABBCEDA73C^hZXfllV=9?=9>DD?:;AGGLLB<;98@???64BNNLLJA88CB;>CHI:BN?<A=8NlV<=?3(;]s}x?/46459?EECA>;92///2>QXTNS[SI==>AEQicH7=DCABDHNMRKEAQZdha_d]MQTC;==<<;:987:;;7100.0<DEHE78FF?97;BA<93378:=A;3027;>A>=>ABBDD?7029;:887>=834@OK=6:80,,,/440/1330,6IOKJF=>FD:::9:<;;>@=8899:AA<8645986547:723558?CBDEA869951147985/,-/07;;<:9:553;?DMLA:=A@@:64564336640179559?957620./110,--*+/550044=MQMKKJIIGEA:<CA?BAAEGEBCDEA7454225;=?@??>>938A?35CF@@>;:986316:ELE6,/35401677;A@:5211000357878543579<950+))((+,+,+***('(+,+)'&$&).368894/0.*''''&'')-3=@;99>MSOE<7:DHF=+*.-*//),.15:ADJMLF>855204=FPVOE<7?IE:8;>@BEEKSF2-,)(*0523<;5/,.?]nvxujjseOKG><;?FIIIGHHHHE>8;976315;71:NYdmpi_ZWKHNMMD50,6AMVD-(1DRL9/1/.217AGMNH@994-01..--//////1224556668;80-*(*.0/1CURMRRZiXYYVV]__dhmmeZ\\mqlmg^`]TUXSONOQRRRRPPQRQPQQRSUSRTSQRUVUVUSVZZYYYY[ZTRTVUSPNOONNPPOPPQQQQRRRSUUWYZ\\^^__``abbbcddceddcb`a^YUTRRQPRRRRRRRSSSSSRQPSUSPTQSY^bbb^`a\\TQPQQOPPPQQRRRRSTTUUUV]]\\ckrsrqrrqqqrrrsswsdZWXX\\[ZZZ[ZYZXYXXYZZZ[[[]\\[]\\[\\\\\\]]]]]]]][[\\^__][\\\\[]``ahegmomljehhhv}^TZ[dutkgfb][`cbc`^`aaa`[]a_`]\\]^\\[\\\\\\][Z[\\dllkpwmgkhhqjhqscamkb_^`b`becfjfeegf`[drxuw|zuw|{uvvn`_Z[dfhhjh^WUUWTUWVUc{zwwxut{ursnmnqojjlpvwz~|}xt}r_VW[_bbcdgjkeagtzz~~wzwiCsfBK\\NMORUXTIYjfUybLKa^POGl\\CNKTce^]\\`ZTTVXY`{vhg[TVaebdi[[W\\_abx^LTbj]RWbmoaXnWPOP䶄aOXhhesxpr`RMYŹePUXM{{cPYh]PS\\\\_]ZWTRPPT\\a_]el]PP\\jjg_^\\YWV[XWYczy_[UVX[a^XUVVUTWXYZYYXXWVUUVXXXYXVTUXVTSSTY\\Y_ml_SRUVVUUTUTTTSRSUVUVVVayte\\Y[^aaa`__aYVY[Zam]UWUTSSRRYgfZWYZYTQKgybTRRSSRRRSROMLORVVVUTUWXZUPOZ`vrQLRROOPPQQONONNLLLNMMLJHFGR\\`_^]\\ZXVVWWWY^^\\WTRQRRQPOQQNPWKEEGIKJJLQUUSU\\[TSQONMMLNNNMMMLLLJJIHKRUSRRRSTUVUTUWZ[YVNIGFEEDGKMRXZZYYVPLJJIMMNPQQPPPRTRMIFFEFIKKKLLKJGJMNMLG@=>ABBCEGGGGGGGGILOQRSSPOMJGFFFHJJMNOPOMLKMQRSUTTTUWVVUVVUTSRQRSTUUQMJJJI98=A?@;9;CEFGHHIJJIIJHFHNSH:9:;;;<;;@GLLA:<:99>TtYWtcKKNZjaqϾnIRXND@@@@@@@>>ACCCCEERiffh`RQODBCA?>>@CBB=8?INOOMMLB@AAAAABBCDEA71Kpj`XbliYE9GI97<=879AIJJG<667;>;7843?LLJJHB96>@?ADGK:=G9<BC?>U\\C7?BAV\\bt{4.?C9:JX__[L=981./02EWZVSb`UO?=?@BEYO<<@A>>;BW]TQIGKUd|x`ZccNHKFBB@>==;;97:==:3..038::?F@;>=9556:==<<?:3/2762.06:;?=9;>@CED@835999888???;:@DA4298/-..15512587319IMIIE;>GC86667;????==??>@F@<73552/../-379668@EGGDCC@=<><429AA@=67<<99;=<87843.7>>??=9;BFIEB@AA?<4202//12348=87;=86200.-//.)*04437;?INKORTMJHGFFFB=?CDBBGKKKKHEC?720137<=?????>:78<;8=HHED@;9:999846GI73305;=:4566<A=6201122343038733899;<7-**''*./,*,,+*((()*))*(&$&+-4;87@H:,*,*''&&&'(-6AEI]itfKR__]K/30--0117<>87AMJHGC>=<94225?HMLG=6;>;768:<CKMOPA+&((&)-/.1@JFA?7)=bjea\\[^ZME>:9:?INKKHGHJJB9697664135414EXckpj`\\_VKJLNH<8667AJ=.15:@8/22-/658AGJJE=73100/----//0/..3456753468840-,,,+)'+?H>?QSWoXWWXYZYXZ^baTFJ_bWch[UUPNPONMOQPPPPPNPQPOPQQSTSSSPOQUVUTTSVWXXWXZ]]WPOUYYSNPQONOOONOPQQQRRRSSSUWY[___`abbbccdedcefeed__a_[VTTRQRRRQRRRQRSSSRQQSWYWTQQV\\_ceffggaXQRRRQRRQQQQRSSTUUUWWWX[bnwvrqttnnrrprtuuyvndYVZ^]]^^^]ZWVVVWZZYYYZ[[[[ZZZZYXZ[[\\[[[ZXY\\adlnc[YXWX_d`_dkosrmhcdmrwtw~xfeddefhlkhdabffda\\[]bcbba\\[]cd\\[[\\]\\\\[]\\XYZ^mpmszoagghrkirka^bdcbbcdcdeggkmkhcca^i{~{~wu}yuh]Zdgefc_jaUUTRRUWVU[pzxzwow}{sqqppopokgkuzxz~yx~~|prthZYXZ_bdeeilf`_aoyz}mVtAuԒk]PHNUWWQKSgOJhgRKMMQPImZFLIKQ_hc`\\VWWWXWUg{kcUORTW[Slv\\YX]\\]djmjPNYc]Z_flrpfWQqGRUP\\pQMYjtp_TXRaͯ|\\RUYXNb]WV_XLNQSVWWOKNPQSY__]dmZNQVc`a\\\\ZUV`bWU`eu{f`OUY[d^URTUTTWXYZYYYYYYXWUVWXXXURQTVTRQSY\\\\djaUPTVVTSTSSSRSRRSTUUUVUT^twdXX[ZXWXYZXTYbbfec[RQTTRPOOSaicXUYYXRGYy\\SSSSSSSSRRQMJLNSVUUSUUW]SKQPkeFMQPQSTVVQMNNONNMMKKIIIHPbnmifc_ZWTTVVWZ\\\\[YWVVWXUSQUUPLPMGFGHIJLMQTUQV_YSRPONMMLMNNMMMLLLJJIHLUVTTTTTUWYWTSX\\^[ZRIFEEEEGJMT]]]ZWTOLJIIMMNOQQQPPQPNKHFFGHIKMMNMKIILMMMKF?;=@ACCEHIHHIGHIKMOOPQQRQMJHHHHJKLOOPPNMMOPSTTUUVVVWVUUUVUTSROPRSUTOMKKHE=<BHGB<9=FFGHHHIIIIIJHGHKKIB<<><<=>=?BJOF<<>??;Eq|un\\ENNTbkZ>f͕KN^UHBCDDCCBAAEGGGDEC@^`dh[LFGABA@?>>AEC@?=?DGNPP]XC@CBAAAAABCE;=9CknVV_kdZG8EL>556557?GNNC4/28=>61234?HHHIH@32?@>>@IM89G;AB@@8=_O>Qf\\eM:Ks*+FU?Fhvsno`>8C8.023BPSKOf^GH@=?@?ARO=@A?@B?G]h\\UX]dmundb`LCGHFA@BA<87878;<:3--///0028976554568<>@FKE6/--..-.2669967<@EFFB:9::9889:::;96:B8),87//10486249=<946DJDDC<<=70++4;?@BD@:CKDAHD6-*074-,+,.,.7>=78=<?DCAAAAAAA:5<B>;<<<AC<41430-.17:;<;9998:<8<IIHEA?<71./.--/0342138<;7531/0550+)-126<CLNHIQWXPLIHFCB809FFCCDIIFC?:;?=74358;>?????><;;98;GPMKJGDBA@>=;45E>+4;4377:8776@@4,,/226:;6-*-./148:;;8/&&(&)11,(),--*'()*(&(+)&$&,:A@805LT<.,*('&%%').>B?W~pl{wqdF2-..1359<>;9CKC;=@@A>7011-4CIFDFMQD2/4656@LQQK<1.,*''*-,,7EIINE.->85954466558;<@JQOOOMMNI>4123664112200>FF`saV`g_LFGHGBBCC=;4+1857:3153,,326<BED<73-/30,,,,-/00/-.589::41499410..0/+)'*43.>RTUlYXXXXYWUUVVQJEGOQKS]YRNMLKLNNOOOOOOOOOOOOOPQQRRSQPPQTTSUUUVWWVWYZ\\][VSTW[YTRQONOOONOPPPPQRRRRSUVXZ^_^`abbccbdeeefiihhd_]^\\YVSQRRRQQRRRQQRSSRQQRUZ[[YVRQT[cefkpncYRLMOQSRPPRSTTUVWXYZZ\\]bnwrjnvpbaimpsruvux{wj]WV[cdceea[XVTUWXWWXXYYYXVVZ[VTX[ZZZYYXWY\\]^lug]^ZVW\\a_\\\\^_`ciidbp{v~`[ekpwym`[]hssmhcceeda\\Y\\egge^\\`_ce^\\\\]^^]\\[[YZ`\\h}{uzlX`ciuy~ywwj]acbcdceghkomkjjebk{~~|z|vmZ^ljcdc]baXUSRRSUVUS_t~||zrny}{}trrqqquwrlmuy{{xh]cmoj`dfaZ]\\\\^`dfgjnfaa^l~zvtzz|{[A˖nXOPY_ULIWb~ENTTMPLLONG`tOGMNNJQ]imbXRNOSXDpq[NLNOPQSYeTGNU[[^aavs]W_]Y^jqhjvncOzBZ_WKLXOSg~[OoeP̞cSZ^WTVPSn^WOVSPQPPSSPPPQRRSTVY[agVNQU[[c\\]\\X_ikegkqv|}fR\\\\ZfaVSUUUTWXY[ZYZZYZYXWWXXXXSQOQSUSRSY]ac[VUUTTTSSSRSSRSSSSTUTSSSSSXnr^WVVUUWXY[^eog_deYQRTTQPNPRV]ebYXXYWLQwwWSSSSSSSSSRSTLGKOSSTSSUWZTN]SZsvTOPRSSTVWRLKKLLLLIFGHIIL[qukgeb_[YVQNNPTVWWXWWWWWSNOW[WMGEGHJLLMNPPSSOX^UQQQONMMMNNNMMMLKKJJJJPXWTVVVUVX[WSSZ_a]ZSKGFFFGHJOZ]][YWSOLKIIMNOPQQQPPPNLIGFFIJKMOOOMKIKNMMLID?=>ABDDFHIHHIGHJMNNLMOQQQNJJIIILMMOONNMNOQTVVVVUUXXUTUUUVUTTRNOQRTRMLLLJC?AEHHD<9@FGGHHHIIIIIJIHHHJKE=>><<;>BKJFHD;:<?EGEah`KPKRW\\L98jٻkI[YLFGIJJIGEEIQXWOIDDehgmdRFBBA@??==AGFBA@?ITTNWkgJ@CBBAAAAACB=>=<[hHNbh^SC<5:E:74457;BII>4149>:2/159@DGIJI9+2@A<7;KL82H=DB9737or`mgeF)/lv?9BM:Bk{qtlQHVSD63;KVVSTh]?BA?AAAFd_=;DCBDHMWd`WZ^k}ztc\\[KEHGFEGF<5335459=:2-...----.155444558;<@FLKC:64111-.1223438@GHFE;9><:876776657<>9+)02122259648>A?>:8?A==@>:2+)(/<CA@HKC?KPIJF5*()5=4)+1320.3;@<745>EDCCB@@EGA:=A?=?>;@@8.)*-0/.06=<==>>==><68CED=:98:845421222100//59654433540-+*,14;FPK>?PXVLJJIGA5),>IIJGBCA;8;<?AA?;89;=>??>>>=>=<94:ITRPOMLJIF@<724<8+3;61202:;:9>:/./2568;91*,,(&)/45661)%'''-51'&*,+)*')+*('(*)&&(6II<;5+4QZC.*)'(*/202@?1;`tvoilcD*'.02679;=CKNF<=DFC;4-+/15=EKJEJUM4-4623<DHLF;6312-&&*,,29@EPRB0-()(,/,,+,.378:@GJJHEC@DG=-((+4301257569<_jHHbi\\FEHA=@FJLJH9'-6-1<6463-*-+036@@;86.,.+*,,,,.01/,-49::65;AA5**/--/-*)'')+0?MOSkYYYXWWVSSSQMIJLKKMMPQQOMLNNOOOOOQONNNOOOOOPRRQQQPPPOQSTVWXWYXWY\\\\[\\]]ZVTWZYURQPPOOOOOPPPPPQRSSUVXY\\^`babccbcdedehjjijjd[WYZXRPSSRQQRRQQQQRRSSRQSVZ]^]WQQV_glqspljaQJHJKNOPQRSTVWXY[\\]__clqnilojdbejllquvtux|zqg\\]`befffd_\\XUUWWWWXXXWYVUZ\\YVUW\\[YXY[[\\\\Z[aecaa^[Z[\\\\]\\[\\\\\\[^msy|ptgT\\dhu}q^]jsrlknmfcdc`]XV_hidcszkbedcbbcccb]^glruyv{kakoyo_dhefddfhklnnonebipqv|j[fnheghgfb]ZXVSQSTTRS_r{{|ztpruyzwwvuvy{yvtqt{q]TS\\a]\\^__^_``abefgglkcaep~}}|zwrfrx}~hUrCyn[QMNRTPNNQOucAOLJLMMMMMBzwGGMNOOLWii_[WQKRWHslRLLOPQPPMimLLLTY]^__^lngbV[eqws_[mmdOvzMindZKHمGQSfҠlQsѦc}U^j`VSUVUOx^cXRQRQQQQQPNOOPQQPPPRV\\_UNQWZ_ZW_``ehfhomwrvo`_\\Wgf[XXWVUWZ[[[[[ZYZZXXWXWXVQNOPRTTSTX\\`]TUXVUTUTSSSSTSRSSSSTSRRRQPNRbswrf[WY[]_`fmrpdOQVSUUTSRRRQQQS_jeYVXZXTmoSTTRRRRRRRRSVPFCIPRRRSUVZUOYTRi}siaSRUUTUWUNIIJJJKIGGGGGGUnwld`]XTVWSKGHLPTWVVVUTRNKMTYYQKEFHNPQQQRQQQN[\\SQQQONMMMOOONLMKLLJKJMV]WUXZYYXZ[WST[bc_[SNIHHHIJMVa_]ZYVRNLKKLNOQQOPPPOONLIHFGIKMOPOOMMKNPNLJGB==?ACDEFGHGHHFGJMMLJMOOOPOJJJJKMNNONNNNPSUWXWWWWUUWUTUUUUSTTQONPRRPMLLLKF?>?@AD;:DFGGHHGGHIIIHHHFGMKB;;;<<=@DSP?>><;:?JNR[pvhOQIT\\J;ALJpߞPQWLJJMONLHEEFO]f]L>HlwsyqZFA@@@@A?=CJJECA=P`VX`mhRAAAAAAAABBAG?=;AOCLfk]UF=1396422358;=<9855:;50036<@DHIID2*6B=93=EJ:2<9<=73,9{~faI5-G{aFCD;;NivwxqcUTWN76Q_]YPLe]=@GAGPICeb<=HHBEMROW]XWXf{xyxnc`\\LIJEIRN>.,/23218?:0-../01554567633369747<=<:8767982./001302<GJGG=;A>;977776536:<>8.,255467546<CGEEDCC>99;:4-)*3>B=8@NMCEH=>G8*,.6BF>/)3843579>?<8:DIIIGD?<DIB;=?@DA79C>52-*-5:83/6;=>??<89:9:8864249999;=;74421111.-04567530/230+,0.1?JE51CSSLKKIG=-%9PTRPH;6;?ACFFFB96<???????>>?>>=745<KUSQNLJKI@855677/.4610347876630147889:3-041,/112222-'&&(*04/)+121,,,+,+*'())',:EE?<<;864H[I75547:945;7,*:dspqssb='+-04589:GUXPGEFFD>;733886:FNMKHA9663/3<@EHB>91396+(.10238>@DD7130+.2,*),1356778>>6.*,7HMD4)&),,),4;61=IMD7GbjW:=G:/8BHJKSM0&-))5646876521.(6DC?<60,$&**.1211.,,18:66:AC:*%*-***)('&'(+1<DDNpZZXWWUURQRSROMMMLNNLMOQPNPQOOPPPPONNNOPQOOQSSRQPPQPPQTUUWYYYZXY\\[[]]]]]ZVTVVURRQOOOOOOOPPOQQQQSTVWZ]bdccccbbeeddgjiiijhaXXZWSRSSRQQQQQQQQRSTUTRQTWY[^][XW\\dikkkoph_ZQHFIMOOQRRTTUWYZ[\\]adghhhfhkmnjbdrxutvvy|{yqkc_aefffecb^UPTXWWXWWZ\\ZW[a`YTWZZXV[^\\\\\\]^`cddb`__^Z[```inaa~jczy_]eciurmpvoheekpnjid_\\VUZeienphhiighijjknqy~}}{enukhgfeeinkgkjcchjjqym}fYeljilnpoga^ZYYVSSTRQZitwyyuquyuv{|}{yyzz}xsytZWYY[Z\\^]^_acccdeeghlmd^cilrtw|tclz~iTMTPFMYRMNKIJIJLMNNNFhSJPNNNMMKKLDIHMNOONW]X\\b`XOPOMiWMQPQRRPOLO_MJ\\hbaa^]bciSd]du{q]RTilhOVƈNeolg^FNuqpHTHRڞcyȥggfulPSYXWNoZ`TRQPQQQQPPPOPONNOPOORVYSRZ[dfXYTU[bfX_|lxcRZ\\Yfi_ZZXVUVY[[[[[[ZYYYXWXXWTRONOQSUSTX[\\YVWVUUUUUTSTSTSRSSSSTSRQQPONMP]mxvi]Z\\^`bcfda`PMRSSSRTTTTRPQQWch_YZ[\\VjgQTTSQQQQQRRRTTMEEKPRSSTUWUKOPTnwljj[SUUTTWWNJJJJKLJIGGGGGJZntmd]VSTVWSNJIINSUUVUSPKIKRXWUTOIJSSSRQRQPNQY[RPQPONMNNOONMLLKLLKKIQ]]XY[\\\\\\\\\\ZWSU\\deb\\TPKIHHJLS]c_\\ZXUPNLKLMNQRRPOPPONNKIHHIKMNOPONMKMPPNLID?==?ACDEFGGGGFHJLMLJKNOPQROKJKKMOPONMOPQSUXYYWWVWVTTVVVUUUSSSQNNOPPPNMMLIDD:6:?E>>GGGGHHHHIJIJIHGFHMIA:9:;>AGJVS>;::;=EOLOWZgdnlPUQMLHA@MO@nsOPJJLNNOLEACCGSb`KBGhwzzePC@??@@A@=CKLGEC=NcW\\gjXK@@?>?@AABDAGU[YUVTS`g\\XC524110001357789:77:742247<ADDFJC22@E<639<H=3554435,<r]^UC20LgSEOID;9PpxvtpdUND3:U_`\\C>_X=@GCGRNEVT>AFGA?GQPPUW[_^epxsggkaOLJHNRC0*.35413:?8/.../05=>:89;:3147830243/./005;=90-/1/0.-8FKHIB@EB>;9789976668>@:9987666213;FOPLHFC=632/-,*-:FD;5<KL?;8-4>/'+0<KNMB-+348><:@A<;AHLMKGD>8=C=8;=<C>/6E?6683/7C?5-09<===;8::;;50-.-2986:@C@943222343.)+29:86129:5.,-)*7B>0)7JPMLJE?7./D]_ULC3,8DFHHHE?65=AB@@@???>??@?81/0ARVSLB>DGA:99865.,2420131/1322213:957855:903AC82465.'%(+-23//4877511000-*))()8JG63<;;>>;7D[WE>>>;52293)-5=IdvyzusR,).042204GUSJGHEBDDEEA:97447=HI:39=8446<?A?;97419711222/02831=KE3-/--0/*,579:;:9<:3-,134:DGA=:30/+,/.5DD1,3FcmU95;5+.8AFEML2\"%&&),15:??=:3(*;CB>??81*%'(-5730.,+06747964-&),))+*(''')*-4=?@R|\\[YYYWTSRRSRPMLMMMOONOQRRQQPPPPPPPPOOOPRQOQRRTSPPQQQPTVVXYZ[ZYY[\\]]\\[^a_ZVSRRRSQOOOOOOOOOONPQQRRSW[^_bdcbccbdeddfiiiiihe^WVURSSRRQPQQQQQRSSSTTRQSUVY\\]]^__^YVY]a_Z^jk_VOLLNPPQQPQSUUVVX[[\\]][\\_`djdY]nusswvvxyzz{viacgggfghg`VTVVVWXWXae_Z`eb]WS[aTVZY[_`__cfeeffed``cdelvvx~saduxjhnZ_efhkvqeeddgikokbZXXZ_linsjgihhgfghijt~~z|~~|ztiuwrpmjhiikjhhiggjlhltWinY\\gkikmomid^YZ]ZTSTQUdoqrvywuuupn~wxxx|{yzqWSYYYZZ]]_`bdedeeehnkgdcheVbiuiegZHDMOPHHUZVOLKKLKJJLNNJ[aSPRRQOOMLMLJmJJLMOQSWWYdieb]OJNXaPMQSRSQPNMMIJ^z|ia\\[ag^iuJ]ovwo^NMVokeZEUVaggg`OY[YRRQXୀď\\kvZV\\ZYLnoZXQRPOPOOOOONPQOMLMNNNORTST\\_haWXUVW`bTkÄRifQS_`gl_ZYXWUVXY[[[ZYYXXXWXXXUSQPNMPTUTUX[[WVVUUUUUTSSRSSSTTSTUSSQPPPPNPSVbmvug]YYZZYTLQ^USVTRRSTTTTRPTWUX^`^]ZYP`v_QTTSQQQQQRSRTUSLFINRSSTSVTIIMVjsj]WWTTUUVWUNJJKKKLLKJKLMNLKVeifc_\\XV[]ZTMGHPSSTTQOLJLORUY[WNLPRRQPQOOKOYWQQQPONMNNONNMMLLLKJKLW]Y\\a_^^_^\\ZYUU]fge^VQLIHHJP[cd_\\YWSONLKLMNPRSPPPPOMMJHHIKMNNOPNNMKOROMKGC?==?ACEEFHGGEFJLNMJKMNOQSTPMKLMPQRQONQRSTWYZYXWVUTTSVWVUUUSSSQNNNOOONNNI@?F;8<BFBCHHHGHGHIJJJJJJHHIKI>9:;;@FIPVR<;<=BLTZIEJKNQZ~nLJIGFEFGMN=3Χ\\ILSTOKMJC@ABIS]]PF@Zqm]F@BBA@@AA@=BLMIGE?GZXWdaI@=>>???@@BE?CfzzxtxldaYN926=>=<:401368:<=;::976766<AA?CHC8=GDB;217FD033/-28-?{wb\\aX=1/17<>GJE;9Qmomnpk[PG;<LVZL8EbYFAADMRJCFE>@AB>:?JOPRY`_MBWqsdfnaNJKMOD4.1687427>?81/...1:@@>><>>8.3:855421/.--.2:=;4-01//,+6EKHLHDFCA@=:99:::866:?EID9444310.5GTTI?<:8651-/203=DEC>>C@6654:=1(*-7IQUS;(+5?B==GJ>7>JQNJFC:37=;79:<EA27A=63;<39C;4,.6;>>>=<;;;:5.+*(17639DH@8433323442.)-762238<;5/-,*,5>;.)/?LJJF=63//?Y_PDB50@CEGJG@:8=ACB@@@@@@?@@@?;2-/;MTNA65?FA=:4366314420.+)()**/2/274/01473-+5C>313794*'),0234588657554451,*('0AF;35:<<:;FH8?XS:8;4--03-(1<4#*FVWhqinpkfL/..,..)'7LPJGGECGKMLE>=:3.11.00+,5<:8979==<:873-//.2430-//24<EPP>54,/??0'--0;???@@DEACD926BKPTD640/-.@F4+205Ri]B1+--,0:GJC9*&)''),049<>=:7+0>==:@A=?;/)%)3;83/,+.24572,,))--(-3-)+,+),36:=@Y_]ZZZXUUTRRPNMLLLMNPPQRRRQQQPPPPPPOOPOOQQPPPQSRQQQQPQSUXZZ[\\[YY[\\]^^^^_^_]UPPQRRPOPPPPPPPOOQSRSTUX\\[X[_`aabbdeegijjjlld][WTTRTUSRPPPQQQRSSSSRRQPQSUWXXZ^bcaZRMKLNOUbmneWLKLMOPPPOPRSQQTVWUTROQQPRVUTX_inqtvxz{y{}~zoghhghiiijhcZVVWYY[djha^adgcWUXVUUUWZ\\^adddgjjihhffgillk~pu{nejjb`m{oZZfjd]gi`bcaabgmh[WVY\\fjifddfddbdgfeo~yswyu~{uflnkprtsspjijklplkkklnifvkU\\mm^Z]cdeijghe]YX[_ZSOO\\mtrqtyz{wrrqt|w{{wuwtspdWSVWYZ[\\]_`dfeefba^gjcdmyuTWdkveooLFLTQQTWRNLLLLOUQLLLLOSRQTUQOOMLLKK[OIKLOSSX]cglb[ltg[VYY[USSRRQPNMNHbrdgXXho^^tTet|ygRPPT~t[Du[SZ`beph]Y\\XO^Ѹis}^PXO_uXUQNOOOPPOOMLNPNMMMMNNOPPOSXeqc__\\[Y[[`o]kmXI[dem\\XXWVUVVX[\\\\[YYXVXWXXVSRPONMOSUUVXZYVUVUTTTTSSSRRSSTUUTSTSRRQQPNORY]cjqqg^ZWVUSHIWTJQTSSSSRRRRSTY[Z\\^^^ZXMNX[SQTQQQQQQRSRSURPJLNQRTTTUSGIKUq{hPIOSSTUVWWSKLMNNOONOQRRRRNJNX_`^\\ZX^b_[ULHLQRSRQOLLMKIOUVQONPQRPOOMMJO[TRRPPOOONNOONMMLLLLJKT^\\[dhc`ac`\\[YUV]fgg`XQLJIJOZegfb\\XVRNMLMMMNPSSPOOOONMKHJIKMNNNONNNNOPNLHDB?>>?@BEEFHGEFILNLKJMNOQSTUPMKNQRSURPOQSSTWYYXXWWUTSSUVVWUUSRRPNNNNNMMKIFB<=;::@DDFJJHGGGHIJJJJJJIJJJH;7<??FHIOUN:;?IU]aa\\RGCECCV~hE=?HIJKLJ@;8C̏PIZb\\QNJDAAAKZ`dg\\GM^I<;BEBA@@AA?=FQOIHFDFMUTWVE@<>FEBBACCB@No|}cQ:34;KUVXN901468<==<<<;;;:88<@?=?A>=FJFJ?637DG41102<?/;py`JP_]L60136<7;>:48Nabdghic_]SILVP>F^`LCE@FTK:==>=>@B?;<@DFHORJ;1:L\\ahhXEFMQM>679::821;@=61/./028=>EIB@CA22;>:63111/-/038;=820101.,7FJJKLHCABCB=9::;<;:::=GNI;0010/0.0ETPD<95434568::=@BDGGGD906:69?9,,-3ARYVF99;?ABFOSD65COOIB<736=>735?GB97<<847;9@B4159<?@@A@=94362-*)'.675;HI<666655554462/43*)0577520/,-4951//:KOF:2.1-&,DTL?A>=JIFDFD>73;DFECAAAA@?@@?>=7//9KNA4,.9EC=7-,7<;77630.,+)''&(,/12.()*,-'',460-013::0('*0347786446768864/*%%1=848;;=A<8@KI7:PM3*(&'*)%(2=8()41+-8MVVJDA?6/20010--?PLFHF?BLQMF><@@8278/)++-4730026:?BD@1'&'(.683524:56@DIOD<:/=E72/.24776;AET]RLNPPF@GONA1-3:;=FF@BD?66FRB1*+0./6EK?/%,61,,36449??>?807;:8=>>DC8/'\"*9=82,+-./6<71/))/)'390/55.(1<DD??hb^YYYXVVTRQOLKKKKMOPRRRQPQQQPPPPPOOPPPPPOOPPRSSSSSSPQSTWZZYZ[YXZ[]``__^__]ZWSQRTQPPPPPPQRPQRRQTWXXYWVTVZ^]\\_cedhkmmmmnkbXUVSQQQSQPPPQQQRTUUTSRQOOQSUWXZ\\_abcaZQKJLPRWZXQMLJKLNPOPQQQPPQUUTSRQPMLMMNRTT[jnip|{}||~vokiijjkmonhb\\VTW\\```a^^glni\\RQSSTTWZY`cbcgkkkkkjjjkjem{ztx|}}slkfa`dc]\\bkolijwvnkmolhhhkj^YW[^dfb_aa_`bbcdcj{}rpuut|{{o_mrntttstqimqstqmmnoqohk_\\\\Z`]]\\]^adeefe`XSV][UQVisstssw|~{yzxu{wzztssqg[\\[WXXZZ\\]]_aegfff_\\Z^fkfg]Q_dgtx{poyRJP\\[UURNKJJMS]WLJKKKNMNRRONOONLKJHGJKMSX]epuxv[Qr~d^f\\]YRPPPOMLOIhguZQh{saQ^b`rxxscU\\^TsXGjp]Y\\^_`hplcahP֦|~lnӻj`X^c\\[RPPPQSRRPNNQPONNMMNNMOOTUNin``_]\\ZfspmhclYKOVZjXTWVVUVVWY\\[ZYXVVWWWUTRRPNNNPSUWWXXXVUTTSSSSSSRRRRSTTTSSTTSSRQPNNOQ_jeeolaZVUUUOLPPLPUTTTSSRSSTMUc`\\_\\ZY^OFG]ZOUTQQQRRRRRRTQPMQUSSTTSSOGIBNcKLNQRQRTUVSKMOPQSRQRTUVUSQLKQVYZYYY_b^\\ZTNMOPRRQOLMLJGHOQMOPPQPOMMLLKS[SSRPPOOOOOOONMMLKLKJNZa]bjhccfhb[ZYUV]eheaYRNLKKVfnlhc\\WUPMKMMNMOPSRPOOONNMJHKJLNOONNNNNNOONLHB@>?@ABCDEEFEFHJLKJJLMMORUVUPLMORTTVSPORTUVWYYXXXWWVSUUVXWVTRPPNNNNOOMMKJIH@8889<>AFJJIGGGHIIJJIJIJKLKF==FHFGFHMQI@DNZabbad]NLH?<=PQB=CHMNNND;9;>dTEZlmdYLDBA?HYapytcUF48AEFBA@@@?<=JTOKJHIIHIOXVD@=@RPE@ABAAFcgnfI.459K[ceT7.2467<=>>>==<;:989<@?;::=HNIIE<5<BE5017AHD32AD9.8II>61137=CCA><<LclnpuvyrldXSXVOVaXDBIFIOF<<<<===ACB?==>:7766522AV]UH?AKRND?=;:94.0<@:51//122468DOIEEC:59<8101/.-/0037;>:50./2117DIKJHA?CC@@>;:;<<<<<;:?DB;3.,-,,,,8B@:7986227:<>?ACEGHIMLB75931;90016CTVJAHRE6>NSVL<858ENI:0124881+,8FA57=<8577?H</8FIHFB@BA>94/1.+)**,4:<?FA53899<<;:8443.04,'.3455432/.010156<GF:1--/,%&8ID6:ACKLJD@@>:48BGHFDBABA@@@@>?<409FB1)*+4BD@>96;>=:963-)+130-*()-0/,*++,,,0343.,/34794,)+256789644689=<874+'(/454426=B<8<DIB36NM.#'(((((/62+171)&#/;LE(#(47><77756EL@=B><EGHHEGGFGB?FIA86881-+*,26998:9501..146486:<12357<8/0<E5,/0/23-)2?HR_fXC<AORD42;/&%4BCFHKW]UMJ@6566300019BC?9,0>7.*0;803?A@A:.28;44:<CB61,#\"1?<2)*-+)4AC@7(,2()5736=:+(A_kdSGr__ZWWWVVTSQOMKKKKMOQRRQPQQPPPPPQQPOOPPPOOOOQRTVUUUURQSUVWWVVZZZ[\\^ab`_``^[\\]XRSUSQPPPPPPPPPPPQSUVVVWXUSUYYWYacaejkloqoqpbUTSRPOOPPOOPQQQSUWVTRPONPQSVXZ\\]]_`bdb]RLLMLIIKMMLJKLMNOOOONOQRRSTSTTRPONOQSPRch[`yzx}~{zwqkiilmlmmkh`VRPRQSV[eolinl_TOORT\\]X[\\\\]adghjiknmmkgpyvxwvxxlllc]]^_^_huzl^biqtqrwrlprh][[^aeda^___`acba`lwldowqx}mvnhoorrlgjmvxjaqtsttrtogxiT[^^_\\\\^[Z_bbddc`ZUTW^iqsyzuxvry{{{{|{wz}wu}{rpqpqj\\]]X[\\\\[]^]^cfgfie_Z\\^]hheyhP`fgjr|ullwwZScilji\\OJKKMPUOKMLKJJHHIJLNOONLJJIJJINWiudXrs{f]wnc`RMNMMLKJKRdu^MdwubPKWisoc^]^ghUVf{\\Pelc]^a`^\\dpnhdX߿ߗ`xan~zztn\\WSQQQRSTTTTTTVVTPNMLLMOQQTP]peZ[^_ael~|b`yhqp[OMNQhYSVVUUTSVY[ZYYWTVWWVTRSRQPNNPRTWXXXWWVSSSSSSSRRRRSSTSSSSTTTTTRQOMLOgogejjb[WUUTRQPPORUUUUUTTTTUPXnsmmcXWkcNH`cPQUSQQRRQRSSRQPMW^YSTSRRMEJET}tXJNOOONMOPQNJMOPSWVSQQSVWRNLOZ[[ZYX_iga_[XSQOOOOONKLLLJFJTXVROMLMMLLLLWZSTSQPPPOOONNMMMLKLJITdcajlebhmjc[ZYWW]dfea\\UQNPSalpohc[WTOLKMNNNOPRQOOOONMLJJLLLNOONONNNNOONKFB>=?BCDEFFEDFGHIIIJLMMOORSTSPMNPSUVXUQPSUUVWYYXZXVXXTUUWXYVTRPONMNOONNOLJIKE<8998:>FJJIGGGGIIIJJIIJKLKHFMTQH@@DGHEFP[``_^^a\\NOQKF8;DA?CIORSTE=B>I`kpXGQ^dg\\MBBC?DOaw|zt]=8?BBCBA@@??;?NVPLLLLLF;FXSAB?@ZeY@;CDCHYQUoyW>0855?Ra_I1.2467:=@@@???=95447==98:<ELIGD<57;A70/9FJF:0-1336;<752435APPOMGBM_pz}wkb\\XX[ZUVTNMORTIBEC>>>=::<?=<=?821112319IKFDCADMNGBA=851-2<@<83,.572269=FGFDB@>=841000./0002379742/14666=EIE:27>96<98898778889555572,++**(*-5:89AGD@@=:@DCEINPMPRJ=550/43225:IQIA@ITM:>TWK5,48<FNF3.12661-+&+<:-3=>8478>D9<?FEED@>>><:830.,+-/.4=@@B=32689>@?>9.+,*+23./4423224311101;<8=910471++1:@8,1>BCCB@>?@A=;AFHHFDBCCA@@@?@?837>7++-+3@CCHKF>;=;973/--5=<5/,,.0.-0256678688/)0841571-.57999;8338;<@>;96/+,/394+&.:?;9=??<4.1GN2#'02-*-0.+040,))27AQ4&(.:F@520/6A@43>?>DB>DOVPCBEHPRLFBB<1/1224689;?EEA>:666:==:;;631148633DB.,(,-180'2<EYffU6*+6JO;*4/+.6>CFMX`gcNEMD++:82/14?IGEC97>7.'*53+,7??=8025;418?D@79>5&':B:.*-*%-@JH<055(*478:?90Fs~wbOfWZ\\YXWUSRRQOMNNMLLNQQQQQQQQPPQPQQQPPPOPPOOORTVWWWWVTRRTUSSSTWZ\\^`aeedca``^[[ZVTTTSQQPONNNNNPRRSTUVWWY[WUVWWY^_]_dedfihghfYOPPOOOPQPOOPQRSUXWTQOOPQSTTUVY\\^^]^`ege]TPNKJKMMMKJKLMNOONNOQPOQRRRSRPPNOPQPOW[RRdojgqz|||sollmmljimmg`YUSSX`jqnklnof[UPVih[WSTXWVYac]_jtojjouwyysu{kkni_[]``^`adb`bfimjiqrlid__]cw{nikkjieaaaa`^`eeiuul|vdbqvzzprrpm`fnj_Vgrttsqrngp{ZVYW^a[X[^\\_b`bcb_\\ZWe~{vxvs{{x{}xwwtxvknonppga_\\[]^^^^^_fggdihne__Z_ijg~{[crrmsvjecZ^_ZewvuwgRJJKKKLKILLKJIHGEEHJLMNMJHIKLIHLl̡wk|yV][QnraQKMMKKKILH\\yVi_MYk~nPKTeh[RTZdu}lUTlY[ppf`dhe^X]ipnbdŚnr~wpfߢmiqs[OORRTUUUVWWY[]_VPNNORSTUPPid[XZ^cilhpfQNkwiq|_QQRQdbSTTUUSQSY\\\\[YWTVWXVTSSSRQOMNRTUWXWVUUSSSSSSRRRRRSSSSSSRSUVXWUSPMKVnjgmjih^YVWVTSSRPSXXWXYXXVVVUXhqpqgZVgsYMfiQMQRRQRRRPRRQQPSbdWSTTSQLFMNUcULLPOONLKJKLKJLNORUVSNLOSURMKQ^``\\XXcrpdfcTNOONMLKJIJKKIDGU\\YSMJIJKLLKMYXSVURQPPOOONMMNMLLLJL_idfnkfjtsja]\\YWY]adec^WSRXcmpoojd]YROMLNNNOOOQPNNNMMMLJJLMMMMNPONMMNOOMHDA?>?CEDEFFEEGHGGGHLMMNPPPPQQNNNPRUYZVRRUVVVWXYYZYWWWUTUUXXVTQPONMMOOMPOJGGJF?<<;88<EJJHGGGGHIIIJJIIILKMRZ[TG>?A??AGQY[YXZ\\`[JEMROAAB??BKPVb_E=?CJ[]d]JEGKPNFCBBA?F_x{{rR89?BBBBA@???=@PZUPPPQQF6ASMHMC?]ywR<CGDC><9H`snI=<:526I]X@/04567:=BFGCBDA91123686689;DID>9778>6//8BHHC959=??<733467;FNQSRHCFK`zyqg^YWWXXUTSSROUbTAEE?@A>;89<;:<=;79853359=CFFC@<AGDAD@84303=BB>5+,7;309@>?BEEDDD@:55431111//112345767:::67=C@85770.67752000025746535742455856>CCCIPPNKC>DE@@DNSUTTK6-,-.,-/02;FG@@CGLOGGTM5)*3?KQSG21::>?;97-)14/4<=979889?EC:468655589:500025724;>=:865679<?@@9-)+./164043/..03543543;:30/-3>C8-.354/))5B?<<@CFJIEABFIJGEDDDBA@@?@?;89:5330,2??<@GD:9=;6421114763/,*,-+*,/48;:77>A5-4:4-2643358;;<;8237<>?>9432.+,261+'+5<:;<<7331*-CK5$2;0*,,,-/0.-*&-85LE()+8IJA?>720.,2>A@C>9?IPMA<GWXKGNNH=6=C?::=:6BONF:546<@DBHOHC?=;::9:;<BB<3+.15<3.++2G]aM1,++9D>1.2599@A3C\\]dhR<=@1/;93..9HOOLF><<6/('**(*1;<976467449?CC?AHI9'0>>5,+*&)7ACA=8/&'19;<>8Cjuj\\ST`OSXXWWTPOOPNMNNMMMNQQPQQQPRRPQQQQQPPPNOPONPTVXYZZXUSRQRSRQQRSUX^bdeeeea]__\\ZZYWUUUSRPNNNNMNQSTUUWWYWWYXWUXZZ[ZZ[\\\\YVTVVUUTOLNOOOOOPRQQQRTWXWUROPRRUWTONRX\\[\\`_]`ii_UPOMLMMMJJLMLMNNNNOOOOOOOONOOMNNNNONONLNTXWU]fnvwsqvzxurnllnlkmnopnkgeghknmljkklifXUruec\\WYUPPU^\\Yahhfecips}nion`Z^bb`]\\\\\\^`bdgghosobWZ_ftnmmmlf`_^_aadlrwyvkzznd``qr{w`[\\`]`hnpssqlinwa]_ZSX_YTX]ekkfa\\\\]\\Ygxvwut{}x{~yxphmnnnnjfdc\\[__^^`dgfedfh~|kc^[cqcivknqqqqig^V]eYOVfsvwwiPFIIIIIIGHKKJJHGHHHJIKMNKIJNPMID]ᶒy{jNOQHV^NMNMKKKJMUWQ{sMY[OTWusQHS]\\TV\\[\\m{alYcztkiovreZZ_imu๗yԧeficrveUTSUYZZZ\\\\^baWRSSTUUWVPY`Xcd_bhppihZPUY~q^cRSUR[fSRTTURQQW]^\\YWUVVVUUTSSQPOMOTVUVXWUUTTSRRRSSSRQQRSSSRRTWYYYYVTRNKZnjmskeicVUWVTRQQRTX[[Z[Z[YXVTW[YW[][WW^PRkaLLNPSSRRRQQQRTQZnaOPWWQOPLOMMMLMNPPPNLKJJLKJLMNOQRRMLNQTQLKPWZ[ZYW_mqgflVGJNLLJIHHHIHEFKUYXRKHHIKKLKNYYUXWSPPPOOONMMNMLLKIUifdkqnnx|sha^\\[YZ^`cfe`ZVXaotspomf_YROMMNNNOOOPNMMMMMMMLLNMMKMOQONLMNONKGB@??ACEFFFFEEGHFHIILMNPPPOOOONNNORUZ\\WTTVXWWWWWYZXWWWWVSUVVUSQPNNNNNNNQNDBBCA<>@<99:CJKIGGGGGHHJKKJIJJIMW]ZRIFE@;;AFMRSSUZXVNE>@FLMJC?>HOQXedJ>=<AEFMQHB>BEIKHD@C?D^vzwhH79?BBBB@?>??=@P]YURQSSB4M\\QTWC@]i=C?DA646?VvmHFIF:415J\\T=/298878=GNKFGHB945533444642;D@;87<=@31/5@FII>67@B<8335578>FGILGDC>@]w|tjc[VWWWUUSQOKN`dM?>=>??=:::9:::;:=>;52478@HIG?:<BB@BA:8722=EEA6-,6<6.4AE@BEECCB?<;:731122112223459===<9536=BCFD;1/4772,,--,.159?<533359<;>EIC;;>=<>CDBDKJ=79BNWXVO9+.0/+,/237;;;@CDGIMQK9.4<CLQSQH40<@CDEDCA:6779=<;;;;9:CE?610/.-..49:70.59=>4/3:;66866778;?A>7337::8:6331135599776572-+-.2:<5440.++)*6C@:@ILLNOMHDFJKIGEEDBB@@@@@=975554203:5,+1448<;756530-,++*((+,-+''*07;9:CGB95:820233026:<<;8536:>?<51240+,/0.,*,4;=<951010/++DM;560++++,/100.)*4*<P+2GPSTUWWWWN905>@??;9;<?HOMKMJENWXSKGJKC<?E>28C=71,.5;BD<Ia`ZPFDA?<<<=797-+379<4/.,*1CL@..1+*+,0-,.05F>\"/O[_bK93.,29783*7MNNQI=8961/-*&%+259:87776536:=?@?BKH5/675-+,-+*0<F?/,*%,8>??>Toqni]RPUUPPRTUUSPOOONMLLLMNNOPPOPQQQQQQPQQQQOONMOOORUUVXZ[ZUQQRQQRPPQRQSX\\^^_`]YWZ[[\\[XWXVTSRPNNNNNOQTTUUVWXWUTVWWXXYYYZ[YYXRLKKKKJLKMONNOOPRRQQRTWXXWQOPRSVXUOKNQPQSTTSUZ\\YUROMMMMLKKKKLLLMNMMNONMNNNLMMMMNNNOOOMMNPQSSTTVZ[^`^htlipkefijjmnopstsqooomkjjgddlfZhokqm`[WUSS]_YZ\\Z^ge]i}}minm`Zadb`^]]]^`adggipqh_[[imchhgfecb_]_`_jtxxusvrsznheco~}vykVZ_a_aeiqyxuuxui\\X^^ZXX[XVZY]gqpbUW[[i|xwwuuy{z~vxxdcikkihgffgb___\\]agifdbfi}}vpmbidcnqpiiptcf]IOdhQW|rvxaLNQHFGGHJJKLKKIHIJLLLLLKHGLTVKGDoѡmOJKIFj[INNMLKJHOliJnfQWWOSJ\\iPEQZ[Za^RLR_sjR]y{xx|iZZTUvknߡz`kcXdr~ud\\]bccdlh`^ZWUVWVUVWWSZZZ_caerwpj`UPSrShSRSSSdURUUQQSRW]^\\ZXUTUUUTSSSQMLNQUVUUVVVUTTSSSSRSSSQQQRSRSUW\\^]\\[XURNJXgisvf^hhVTWWTRRRSVX[]\\\\[[[[[\\[[XVV[^\\XWSXbTJLMPRTTRQQRPSQVfjPQNTXTRSPNJJIKNRQRRPNMMLLLKLLMNPPPOOPPPOKJMNKQZZZ_ekkejcLHLKLJIHHHKLKOQUYYSJHIKMNNMOZYVXWSRQPPOOONNMLKJIMckkoqtpv|ukfd_\\\\[Z\\\\_deb][`lvytpomf^YTONOOOOPPPOOONMNMMNNNNMLMNPQONNMNOMIEB@?@CDFGFFFFGFGHJKKLNOPPOOOOOOMMORUXYUTVXXWWWWVWXYWWYXVSUVWUSQOMMNONNOOHA?>?>;AC>:9:AIKIGGGFGHIKMMKJKKJOZ]RILPJ=8?GGINONPQJD@@?;;BLLG?>LRRYckV>;=<<<=BA>CJNUVOEBDBBVy~vaC6:@BCBBA@???=@O^[URQSQFHciWVVA@`vL?@BB<FRWZccOADJF9537KZO8/6@B@=<BKPMJLH@<;<:654444204899::<?C81/4?HII?66?>6424879:?C@??==A<=Ywqglqojb[WXXWWVTROLHQc\\?49;<==<:998778:;:853368?ILLGEDDD@=<<=;3.4@DD</+4<6.0;AACEEDC@?AA;630123332467546:;865328?IJLG7157851//.-,,/3=A;4210241.=SP@741,+.39BDBFG=;<CMUWTG;:92/16866579>DDB?FK:0;EILNKHFA22?BBA@;:DKD==<=?=87?><>><;94++0215;<;4-3;@;4+,8@?<<<;9538>>=<;<=@C@=;7668:;;=?>:875,)./0232/=;,+))*2>DDDDHICGJMLFGJKKIGFDBBAA@?@=7/-//.0242.(%)07<??=;974.*(((('')-.-(%%)/39>EIG=49<500221379::864248;=:42341../.,*)+29;71,-142/+'*?KE5+***+++*-13/,,&,I9:]j`]_ZUZju_>48<<9875:BNXZM@KRUXWTRPPM@68><2035567:>ACC@G[aZRONKB>7298.(,.49<=6220,+.0/,-99.09A?4428LD'#7MYXIA>6017:AA05LMLSN<5971240+),016:8757::3157996:DD5.13/-,-2/(-<D7)01'0AB>ADZqle_UIGKCQPPRSTTRQQPNMMLMOONNOOOOPQPPQPPRRQQPPOMNOPQRRQRUWXURQRQQQPPQRQQSTUWYWRRUVWY[XUVXWSSRPNNOPOORTTSSRRRTSSTVVWWWXY[[ZYYXQLJKLJHKLMNNOONOPQQRTVWYXRNORTVXVTROLJKJFGJMNNPRROMMMKLMKKKLLLMMMMMMMMMNMMMMMLMNOOOPQPOQQSVTRTRLNSNWjcZdcZZ``dlpnlqtsstsssqookhdgkgcchonf`][ZZ\\a`^\\W`ovsp}rilnj^`ieagib][]^]ajmkpm_\\^`sxmdacdda``^_`iyrqukfotstxnkoqpvvqzx~k`_`__^_fs}mU[b\\YYZY[ZZ[[Y]ffg[Y`^zxxwuwvx}|}{|n_cheddffeehgeg`X]bhkjfbejwjdadqnnkknrsoaNJXiWW~y|x]RZRHHHHGJKLLJJIHIKMOPQQOLKPWVONIiɫtugIJKLEQ]GMNMMKKIIfeMhoVPQPPSLLgeRLP[_bVKIJIP`nlX`|gXWYaxrqsxzɼy^fcP`SQ`gd\\X]aglph\\XWVVVWWUVVVUVWW``rxrgYTHir`x|dTSSSRdZSSTdeWUX]]\\[XUTUTTUTPOMHKQSUUUUUTVVUSSSSSRSSSQQQRSRSX[\\\\\\\\\\ZXRKGXa`qr]Zeh]YXVTRTTTVZZ[[[ZZY[\\]Z[]]]^``]^_\\]WOLMPRSSRRQRPSP^haSVMLW^gaOMLJHJRVSTURPOOMMLMLLLNPPOPQQPNMJIKJGLX\\_c_^gigkYHKKKKIGGJORUSRRVXTJJLNQPQMOZXWZVRRQQQPOONNMLLKJXlmswvtrywlhjd`__]\\[Y\\adb_ajs}}wsojd_[VQPQRQQRRRQQQPONOOOOPNLMOQTQONONNNLIDB@?ACFHGFEFGHFGIKLMMNOOOONNNOOMNPRVVTSTXXXWWWWWWXYWXZXUSSXYWSOONNNOOPMHDA?>?>@GG@:98AJJHGGGFGIJMPPMLLLMSXOBDMRK<9GPGFMKFEB>=>??;9<AFF?<FPXZetc@<ML?:<<>JSTUWTNGFEC?DayxdB7:@CCBAAA????BN]\\UQQSSYekiZMN?@eyS=EABCP^fg`UKHFCA9637IWH2/:EKHDEHKNQRPIAAA@<865554122358;=<=A<107DKIJC:8D=2335:;;>BB>:778;;8Jg^FDQ\\ZVYZVVYWSROIFCDQ]K34;;::97754444574322368@JKNONICA=:8;?>834;AC>3.4:83125<CEFDC@AB=741/023333686433441//18AGJII?108<:6562.--,-2<;657764/%*FYPBA?956638EA03BFE@<?GMMF@>:6556644456;BDB:9915DD??==<;77@GEA><707IHAA?<>?706616<=;95,*2889=>@;/1<B:2-+8FHDCDE>3046426=ACDHE=;;;99;;<=CEB=94+)-157834B=*'+-1=HIHHHF?56=GLGHHJKKIHFDCAA@>?>9/,,+,6;4/.025:=><>=<:982.-+*)((*01-+,-..028@GF=58:2-/257:<<96433347987532212111.))+/360**/7<80*((+6GC-&'(*+.159;7/*)0<<E[ghf_TQQ[nc>157975439HRMJPXfSGRRSTIKK:/17622118EF?@CBAB@LUVZYYVPI>8>D2#/54446/,+)*)))),5CJIJNPOIHKO[]C28>IMJKLMHBHKGK=4GSRSP>4<90133210-.487769?B;678:835=:,*+,,,./36649=3,2/(5AA<8:Wqj]UJ=:83OPPPRTTTRRRPOOOOOOOPPPPPPPQQQQQRRQQRQPOOOPOONNMNQSSQPPQPOOPRRRQQQRTTSQRTVVWWUTVXWUUTSPNNPPOPPPPPRPNQTSRSUXYXWY[\\\\[ZWURNLMKIIKMOOPQPOOPQQSUWZYSNMQTVWWYYVRNLKKJIIJKLOPONMLKLMLLKKLLLLLLMMMLLMMMMMLNONNOOPQPPQQRUSTXXQMPNP\\_WTUUYZWXahigmststtttqpomkjhinkfeffeb_^\\Z\\`da[\\kyyrwxokji_Ymyc^pwaY\\^]\\cmrqoia^^_j|zxw``acda``acdtsheihjnopmjvwmnspjpxzufq{uneVX^]]^hw}|eYguoge\\TVUUUWY[abmobYf~zyyuuwuqv|yv}tgfighhklmgdiljb`fgkllkhc_f{`khiwqt_Zeitr[NLHVVYu}s[WULHIIIIJJIIIJHGJJJNTWXVUWWQNPPQP߰W̽i\\XGJKLIOb[JLMLLKKJPb\\M^lTPPNRVTPf_KWd]PMMMNPPanikjXTX_YQg}÷`quj_\\VQHumROQUZRLOVZc_UWWVVUVVVUSUYWVOg`Ujyxk\\OJ˽kXifYTTUTWeaRPQepZWY[[ZZXUSSQWZSLKKKOSUVWVVWUUUUTTSRRRSSRRRRSTSRW]^^[XYXZVLI^\\WjgYY``_]YTSRSTUWZZYYYYYXWVUWX\\^\\[^][[\\^`\\VRONPQRQRRRQQVicUQRLI[isoVLLKIJQUTTUSRQPONMMLLLMNOOPQQONMJJKKJMW]cf\\T[dbd\\KKKKJIHIMPRRQQOQSQLLOPRSSPR[ZY[XTSRRQPOONMLKKJQhqruvvuwxtopmcbcc`_]\\]_a^`gqxzupied`VRUUTSSSSSRSSRQPQQQPQOLNRUUPNNOONMKIDB@?ACGHHGFFFFHJLNNNMMOOPPPPNOLMOPRVVSSUYXWVWWWWWVUVZZUTSUYYWSPPNNPQROEAC?<<>?EJE>;:8AKIHHGGGHIKNPPNOORNJE=?JPQMB@LVJCFG@=>ABBB>9989=>=<>COTbxkHF[S?>?>Pa\\UUQJFFJGDCCCkzg@9;@DDBAAA@?>?DO[\\VQSUR^iji\\LK>Fk~aH?CA@AMZ^hk_LDB<<8635DN@/0:CHHFHHJMSWRKGFDB<:87885243354568=?811:HLIJLA5?:2347;;<AB?;85558;6:IA5:IQOSYVVbe[VRLIKMD@NQ:278676665544345421149:>DHJKHDA?=:78:;=@>>B@:5259984/08DA?=;:?>6331//133235642112330/48AGHIA;536;87:71.---/242247898/*.=GD>?CBCE@7:C:,+/:FA9;@A>=<;98742124567;;<<;7..286457:;98@HGCDEDC:5=@>?<8:<72/),2:=435/+0578=>>>66=F>31.5HPLKKI?2-..++6@CDEHB;;;::9:::<@EGB:31/.178613DC-',7CMSQKFCB@<89BLIGIJKJJIHECAA@@@=50-/17AA;778BEC@>88>=59@=83/,*),/44//9>@>955<DF>652,+-378;@@=952597795452/,+/453/,,-./..279:<4/+*+,(7H@.((-6FMMKIC826879GQX^`[WYZ[ZG6787994.0<MN:/IllI>EFR[F<>2,/55230/5AC>?A@>?=@EM\\\\Z\\]ZPCAE:,.---164420-))*)+5AHLMMOOMJOSW_TB?=?BBAEOQNXW?<</7HOOQC495-.00/11..0558<?DFC>9885/.32*()++.313860121-%)/6>@:/,<SXMF?2..2OOOOPRSSRQPPOOONOOOQRQPQPRSRQRRRRRRRQPQQQQPONNMMPRPOOOPPPPQRRRRRSTSSTUTTUVUUTUWXXXWVTPNNPQONNNNNPPPRTUSQTW[ZXZ[]^^\\XTTSNLKIHJLMNOQQPOOQQSTW\\[TLKORSTVXZ[XRNMNMKKKKKLMMNNMMNOOMKKJJJJJKLLLLLKLKLLLMONNNOONNOQQRTUW[]YTQQROOQPRUXUPORY__bjg`gljjhefhhijjlmljg`^`_[YY\\^`decfyqrujhnmheZb}[b}|`W\\___kuutngfd`]ajgb`\\_`bdb``cfkjdbbbgnqpmjkls{lkjnyyqu`ovrkfv|`]_\\\\^mrb\\`^bluzxtkhjiijhimqqu{qcr|zvuvwvv{tks|wojorqqrqnedljdehiknoqtk[Vh`RblhvsvUDR]fbPJNLJMYsziZZRIHJIKKJHFGHJHIKHHKPQRSSVRILOPNPiLM||YcgQKJKLMMPOLKLKLLKJP^WNWygRVXQU\\UWkZc]QPPPQST\\s}~rVSVURUrȼοZN]^ZYPOMPURQRPPOMNPPWWUVWVVVUUUUVV[YVIdXP]ut^?c{U[\\WUVVW\\feSNNLSXYZYYYYYURRU^]OHJMQSUWWXXXYWUUUUUTRRSSSRQRRSSTUW^daRQUW[ZSY_MZd]WYWWa`ZSRRSTUXZZWWXXYYWUTWUW]\\Z^[Z\\]]]]^\\UQQQQQRRSSOag^[POKF_w|xeQKKJJPTUUUUTRQPONMLLLLMNOPQQOMLKKLMMOW]cf\\RTVUUTOKJIIIIJPRRPQPMNPNNNQRTVUSX[[[[YUUSRQPOONMLKIK_utxwvvy}xrrunbbggdb`__^][amw|{voiiifWRXYVUTTTUSTTSTSTTTRQOLOUWTPPPQONLJGDBAABEIHHGFGGHJLOQONMLMPPQRQNLJMOQRVVTTWZXVVVWWXVTSTYXSSUWYYWSPRNNRSPE@@B>;;<>DE?<<<:AKJHIIHGHJLNPPPPPPLB;:EPQNOIDLUKAEGB?ACDEFB=;9888:::;@EQol\\ceYID;HbbWOOH@=EOONPUQ_yY:::AEDCAAA@?>?EQ\\]YRUXNNW^_XSQ?LovXV[DA<DTYY`hcG8::64535:>:12;CFDDEGJNUUPNLJHE@=<:997763331105>=521=LNJKMA3342459<<=BB9455338<77676BU\\ZWPOi|qdgf[Ya[B3<H?44445555554423441015;=?@BCB?=@@=:6524;AFEF>77569::73.5B>6423:94342002232234300/1357578:?B@88844976640.-,-.0/---.2773458>;59ACEH@6<</./*2:@;:?>:9:;;:97547889998:;<8-,048=FLNE;:CIGEKPRRL@;:59943343/+,/45,.20..037=?>>;<CNL;454DRQNMKB1.46/2@DA>?C?8678789::9:AGG;1265355403GM9(,>QWUTOC<@ACB@GKGDEIMJJIIEDEDCAA<0+*28?EA@CA>@DCB?87?>16JI<72.*),132-/;EIJE=9;BD>71.+++-178:=<:88:<;::8665.+.45420.---**.4;8420-++-01,4C@-'/8L[[YRL@;=?77<CFIOX\\ZXTJ;5789:;6/0>I@1*5PQ?844@RG331+.44220-/59<?@?=;:9<;GU[[^a[MFE<12-+06812571.,)()/:HLJHHIHAAHOWSJHB?ACBBGGM_X2(/)'.6BSH0/0++---.//.-,/6@FHHGA;763,*,,((()+3<4-,*'&(+-6B<56;<4,)4;656,%(2OOOOOQPPPOMNQRQONOPQRQQQQRSRQRRRRRTSRQRSRQQPOPPOPQPPQPQSSQRRRRRTUUSTVUUSRSUUUUUVVXXXWSNLOPNMLLLLMPRSUWUTTWZ[Z[]]^_^\\VSRQLIHGGHHHJMNONNOQSTW[[UMJNOOPRTVZYRMKJJLMMKJJLKLOOPQRRONLJJIIJJLLLLKKKJLLLLMNMNONOOPPRSSTWZ][VRQRNJMQSRQQPOOSUUW]YR\\d`]_]]cjklmlmmnpg_df]ZZ[]^dtmcwxtihllhcZlpZezo^Y[_``ozqljecdbZckf`]b`_deb_aeggda``_emqqlklpw|y{|tqohmey}c_ppdcbcfkdZZY\\ikbceccdfeeecs|xwwurw|wuw||{{rimvwkotvvsospbgmfehkmptwzzp\\VequonvmpvvxfKTXZWKIMOLGMjyeXWOGHJJKLKIGHHHJJKIJLMLNOONIIL\\kbydSIRz{s]NKKJJLMMMLLKKKKKLNRQMWvrTYa`gh^Zvld^TQPNOQRTnQSQPRU~ϼsuvUOk_SWOMOOPRQQONOOOQRRUVWWVVVUUTUWU[_XETSHOn~_K}ߔ[XWVUUWX^eeQLNMNU[ZYXYYXTQTZeZLHLQTWWXXYXXXVTTUUUTRRSSRRRPNOSXZZajYHLSVYZVZNQ_`XWXUS]^\\SQSRUWYZZVVVXXXXVUXMTkc[\\\\XSV\\[]_\\YUNNNPQSSRTYVYbOMLE[{]LMNNPUUUVUTTRQPONMMMLKNOQQQONMKKLMNQU`gc`ZPKIJNPNJIHJJKPRPOOOKKMMMMSSTWUUZ\\\\[\\ZVUSSQPOONLKKJZuuuzwvuy|wqsuibehgdb`_][Y[eqz|wolopfWU[[VUUVVUTUUUTUUVTSQONPVXTQPQQPMKIFCBCCEIJGGHHIIJLNQQOMMMOPPQPPMJKMOPSVWTTXYXVVVWWXUTTSUURTWXYYVTQROOSRKA>@A<99::>@;<<;;=GKJIIHHHJLMNPPOPPL?8;BIHKQLFMPKHMLECDDDEIKKLOK@88:;<=9=cq{ud[C?Zg^QHC?97DY^XX][]kD9:<AEDCA@@@>?@GS]]]UW\\PBDGECJMBGfwi`udD@@[cY[^[RB;<8433468997;=CA@BDHKORPMNNLKIGD@=::;;63321105><422=LMJIE>312347:;<=BA7234338<77779G[a_YMZ{tjs{mabS94>D?63323456544323341/05<BB@?>=;;?@>:62/29?FHG?<966:999714<83/0//057543344433453100039>>878;=647733765520.----..---.2524>EC;4378=HI<6;5*.1//5>>8:==>>=<;:;<<:=??>=>;;<8.+/9CFGIGD;:EIGGNU\\_YE57:73012110--0235631--,07>>:;<=JXS=8>7<KSPLPH03?@<>CCA?>@?=:424578878?HJ<-066423203FRD./CV[VSF64>CBADJF<<@BILMNOMJIHFDA>6,*6>DFFGMI@?CBC>99A>09UTC;81,*+--+*.6?IKKC<>B@:3/-,+*(+4666788;<<<;::;::500453--00-**,/3540...,,.02/)5;0*006JU]XPD=?>969:<>BJWXLF=33567:>?85;=4.113676650;?0//-034320/14:=?@=9769>97LYZ]_[VTQ@32.,4<6/+///41),:CJQPE=>AFFDHLQTTURMGDEHONQaR0(+**(&4LH-'+(*,,,.//.,()3CIJIHB9530+()*()**+0BE1$#%&)+0CNA67@@5/-/13550)*.NNNPONONMMLNQSRPNMOPQQQQRRRRRRRSSSSUTQQRRQRPOPRPOOPOOOSTSSTSRRRRTSRUWWWUSTUUUUTTVVUWXVRLMNMNMLKJKMOQQRTTTVVVXZ]]]^`a]UQSQIEEECBDFGJKLMOQQQUXWSNKLMMNOOQTSPMIGGIKLKKKLKLNPRSSSRQPONLJJJKLLKKKKKKLLLLMLMNNOOOPQRSSTW[YXWSQSSRRRPPPQSSQPQSVVSZ`\\W\\]ajnponoonnsrlprlfa[]_drwq|ljhegd`qyd^fg`^[\\_bbfpjabba`b]ci_bpp``feaaegf^`ba_`bdopmnowtjhluvnen{exv^cuqjf``jj_]`ZYgn]UYZYYYYURf~{zvtsrw{vs{}{{vpqvy}~skntwzvpvyqiefeilpprssuxjUSQc}~n}lsqe\\YXPLMNNJFPj|q_VPKIIJIJKKJIIIIIJKLLNMLMMMKIIH|oZTJLLS`{dLKKJKKLLMLKJKJKLKMWSHnqeWZ]WYYTdndZSOMLMPLmՕqwfORMP[g՘TEydQQenIVOMMOOONPOOQQRUVTVVVVUUTTTTUYYWURGPtaIMI[~a\\a|Ϫ]PWWTR\\babaKINLLSZZYXXXXWSZemRIPTUVXXXWWWXXUSTUUTSRRRRRRTPMSZY]^akZGHNTVUUPCP_]XWXVWWZ^XRRSVXZ][WUUVXXXVVWTUeeZY\\\\VRZ[[\\ZZXPOORQSSQPNLNXOLLEPsNQSUTVVUVUUUTTSRQPOOMLNPQQQPONLKLMOOSgxkbbVKGGKOMLKJJJKPPONMMKKKJJJQPRUTSY]]\\^ZWWUSRQOONNKKMm{puyuuuuussro`bmheb`__]YX]mzzvrqsre[^b]XVVXXXWXXWVUVWTRPPPRVWTSRQQPMIGECCCEILJGHIIJKLOQSQONNOPPPONMLJMNOPTVVTTXXXWWWWWXVVUSRSRTWXYYVTSSOOTP?>???<:999;><;;:::CLJHGIIHJLLLMMLLMG<9:;>@KSOJMMMOQJCFIFDEKSVW_dP8;HKFB=9V{okgZcoo_J>::87GbgYUVZhb?=;<@DDCBAA@>>BJT]\\^WYbUGF?719AAC`sareIAEhlZ`[QJEB>:7448<>???BA?9:@EIIIJJKNMLKKKHD?;;?>82221105>=511=JKHB8:5744468:;=@?:65547:;6779;ENRY]Zh{}vjivq[SM@IVPB:52134454312123430/4;A?<:::8:=><8531268<?BDHC:57::9:96665112447;97;<8456567445314=EA78:989::6434776431/.011123467408HL>20345BSM88?97;<9/+29679:9;<=<<===::<;;999<;7-,1<EC;77;93<LG;;GYh]:)3;ACA>7000.-3<?FIJG>/)0;<75:9<KWQ=9A:7ANQSTC3?D@DE?<??==>@?:43568:88=EI?24761/2236ANJ98FY^TJ<-/;BC?AD?67<BJQQSTTPMKKGCA=34DLNOPRTL@?@CB<7;A:2EYSF>931232/,-147CLLC>BC<2.---*),/445679<>==<;;;;;;9645530134/---,/-/0021/---+/..0/0/*6LY[ZUF;=>;7999::>MTB=9/-024;>A>896/-052456;:003-,.13333447:=B?A@5255<C=<IVPTUW\\_\\J3-./332-)&$*227EKFEMPD=CGIKOPQZb^Z[ZUQGDUZY_K1.1.,*'3HB*'('),-./111-(\"/DKLKI@741+))-.*+..+$:WO4('+057<?>=ADC?;856;>=<750ONNOMLNNLKMOQSRPNLNPQQQQQRRSRSSSTUTVWTRRSSQPONPQPNOONORSSUVUSRSSSRSTWYYXWVUUUUVWVUSUVXXTOLLNNLIGIJJLKLNPRTTSTX]^^^`cb\\SQTOHEDCCCCCEGHKNQRSSUSNKJKKLLLKKKKJIHHHGHJKLLLMNPRTUTSSSSRSRNJJKKKKKKKKKKKLKKKKMNNMLNPQRQQRV[^^YSTTTRQQQPPRRQRQQTUUY[YVW`hmlopnppooqrsuuvtne]_dbs{leagcfedkk`bc^[]_^`cb_ac_`a`_a[`c^difa`dehlkhfcccb^`a`nqotsx}thjutssusa_riZcirrikb^eg`\\_^Z]ppYU\\XXXWW^~wsrnfp~~|wsp|~|y{xsrrry~sosy{~{vx}}oddcegjjjlkkvhVUSZmx|pwskc\\UOMJFGJAOqhZSJGJKJIIJKKKKJJJJKMLJIILMKKIGGRUOGILHI[XOIIKKKKKKKKJJJJLKOgWUxsVNWVOMNMGQwg]UQMJKPQRŀ]^`pbMPR]qnPWZaYRUReGTOLMMMMLNNPSTTTUVVWVUTTTTUQRYVPUXMLQKLMLK`ohiKDYvNUmnigmye[n^FJOKOZ[YWWWXZ^gqiOOXYYXYYXWVUXWTRSUUTSSRRRRRUPVrybY^]hfJEFLSQJGDNZZZXWVVRVb\\SRSXYY`]WTTUWVVVXSX]XV[^^]\\P[^[[]]]VZZSQSSQMIHJNMKLDDk\\VXXXXXVVVVWWWWVTSRQOMOQRRRQPONLLNPMUq|g`ZPHGJLLLLKKKLPOMLKKJIHGGGIMPSTSZ^^^`[YYVTSRPONOKKcyxtvsttuqlmtqc_opgc`__`b_]f{vtutuod_fhaZWX\\\\[Z[[YXWWVTRPQSTTTTTTQPNKIGEDEFJMKJIJJIJLNQSSQONPRSQPNLJKLMMOTWVTVVVWVWVWWWVVWUSRQQSWXYYVTVUOOQB;>??<;:9:;===<<;;;?HJIHIIIJLMLKJHHH>:9:9:?LSQMMMMKJD?FNNJLQWWTYhX;@V]RJHFLdodTcso~oQ=:8886IggVPMWo\\C@<;?CDBAAA@>?CLU\\]]Z]cYONE618A?<XmgrwhRA?brb_QLJNLCA@<:>ADEEDDC=79@FIDBDGJMKJJKKKIA<<@?<62111/3>@411=HIF>547765579999999997:>@:3447<BBD[kdo{trm`hq^NRTWaeYD500334541/0113553/4;;7545579;<;7421233338BMNA44::99;8654204>A>?=8?C:579864689626AA859;;;AC<55317==9652014545666758DLA00887;GPG;AJKLMNLB<467765237::<>><9:854447>8.--3@HB=9897./@F4(/D`b>(+3BNNKC95208AINSWZ^\\H49A92588;@HG;:@<5;JRVK7<OJEIE?==><>ADEDA=;;;<;99>B@77:70-26766DPI?DTXPC81/5:?A@>:35>NVVUUUTQOMMKEA=48NYYYZYTG>?DC806==65IUNB:406@A;545456;EF??C@:1,+/0,-3565689;>B>78<?><9657777898981.,,***,.2553/--/0110/014BU^[^YD9;>;755893/?P>37869;===?=52431146324540/-,/22332358<=?@=862026>@<CUJ<DEPZ^aS5)..-..,**++,.39:7=GJGDFJLPY][emdYWVWUD5?JIH:/150*(&0A7$')$'+.//3640+\"-GOONK>43.''*/1,*06,\".BD<1,3967;@CFFGHMI<68>DGGED=ONNMNNNNLKMOQRQPNMNPPQQQQQRSSSSSSTVXXVTSTTTQNOOOONOPPPQSUWYWUSSSTSSTVYYZZWTSTTVYYVSQQRWZUNJMOMKIHGHJJJIJNQTPPX]^````ac[PNSQKFEEDBABDEGJPTUUVWQJIKKJJJJIHHGFIJIHHHILMLMOQRTTTTSTUUVWSNKHIKKKKKKKLKLMKKKLLLLLNPQQSRQV`gfaZSQQQQQPOPPPRTRRTUUWWWUP]hdflmlnppqpprssttuvojidczv|kWoj`^_a_`d`]]^aa``_]\\^cfa`^YVirpmb^[_iloojfmpd_^`aa`luvwpznl{~|vqspgcbfe\\fy}qjhea`\\\\_[gxkYYXXYXWuwqqpei~zvtouvrsqqqqxzvuvz}z~oec__`bflmstrcVZ[YWbsg{lll`ZVS`j`JCVsr^[[PJHIIHHIKKLLLMLLLKIGFGJKKKJIJd]aQIKJIJIHDFMMKLNMKKKKJIIIIJKGSoS_rVHJRPIILMJHf|i\\URPMMPVZ^zd\\_XZgubPJt͛daeZRSSYLb`FRMKLMLLLLNPSTTUUVVUUTSRRQPLNSSTZWPKHKMNOPR^mfPelSNo|upyvsvPDHMV[WURQX^mww^QW[[YWVWVVTW[WSSRTUSQQQQQRSVP[iYX]cMGHHNRIDEQYYXXXWUSQ`[TTUZQKY^XVVUVVVUURT^`Sam__\\JQf]Y\\__X]`TORQPLGEHJKKLKCNydU[\\ZXXVVWXXXYYXVUTSPMPRQQRRPNLLMOQLRqlURPHGILLMNMLKLMKKKJJJKJIKLLOUZYV^_]aa[ZZXVUSPOONHXwyuzwtxytklx{k_lxkdb^]aceeftxsuwusmijmja[Z^b`^]\\[ZYXWVURPQUVSSTVVRNNLIGFFHJMMLKJJKLLNPRTSQONRUTQNLJIKKKLRXXUVXWVVVWVWWUTVWURPQQSWXYYWVYUOMB6;?>><;:9:<>>>>><<;<EKJIHHIJKMMMLIFG>::;::@GNOMLLJGD@<CPTRQSXXRS`WDK^c]XYXRJEIHKmysE8::99;OfeRJKQ_QJD:<>BDDBAA@?AEMV\\^][^cXLMG35?A><Mhmstd]G9Txm]LHEWfUDEC?@CFFFDDDB@@CFGB?CEHIIIJKKLLF?=@@>:311223=D809CFC@;644323679975447>><?CB<3436<CCG]idxb_trnsgUQSVYaeT8/1122321//12249;7433434579<>>=:51110357=BILB315756::7641.29?A@=8;=8677543445426==89<>@BHF<89648;:757621233135655>KH6/7==;9;86?JPSVVVVXXH:;<94./357;>>=;<=:68<CC2(++1@F?<::60,19:2)(.CVC+,09HRROKD<:CLPRVYZ`fZC=<1-2578;=?9:@=36GKH;/AUQNNIDEA??BHIJKLJC@>??96<?:78;80/37511;MPD<CKJ@843358<@@:67DVZWXVTQPMJGFC<5--CWY\\\\ZP?9AC3*4;9865CNF<72/=JJA9994247=?@C@550()05224456789:<@B:9ADB>811457:8458720-)'''+/124543212440.0;>>MY^\\NB>=<:71.5:4(2ID328@GJD;:<8/)*,0331..01/,*(+45112236:<::;9425547<9:KW?885ALP]Z@+),+*-49@@3+*(),179;?CFDCSc_\\hlc`\\USP?234/.--03-&)*+31',-'%*++,/3640#+GQPPN>12/)),140.10+'(''-14<@;65=DHHIMRND?>@FKLLKANNNMMNMMLKLNPRQPONPQQQQRRSSSSSTTTTVYZXVSTUUSPPPNNOPPPPQUXZ\\ZVSTUUSRTWXYYZYVSRRTWYVTQONPXXQKJLMMLJIJJJJIHJPRNLU\\]]_b`_cbWMNTQJFFFDCCBDDGOTVWX[[UPLLKJIJJJJIHIJJJKHGIKLLMOPPRTUUWXWXZZXTMJKKKLLLLLKKMMLLMLMMLMOOQSTTW`hhhf[QPRQPPQQQQRTRRTSTUUVTUZ[Ycnjglnpqnoqnopqsz{urng`|svWgh_][Z_ghgedc`\\\\^_]WZhkfddc_qrca`htsnjhiqna\\\\`dc`fs{vkzvobnoqnkqsgslimkc]_]_r{dVXXWXYnzvllypopmhu||}xuqpypnnqrty~}zrlp|~rcd`[]bfptutf[Z]`_\\Wjgnunuk`c]PLOM[|rut_Z_XLJMJJKKKKKLMMNMLJFGGGFGHIJJIJIIFFFFILJHHGGJLOQOLKLJIIJIIIIJHaoNY_KHJJHHLOQMFWl_WTSQMMY\\NO^cc^WV^^QJ]~լzvWISVKqlGQNLMMMMMLNPSSTUVVUTSTRPOPQRVYYYUQNLKMNNORUV\\_sr]Qztd^`wȈFAKSYUSOGWepqbUXYYYWVUUVVUWWUSSSSSRQPPPQQRTRSbgT]`MIKILPNKFPYX[WWVTRSSTUVVRQIJUYWVUVVUVUTYcgcg{p\\[QI`ZSX[]W[eYPPOQNLKLLKKJJIAVxWUWVUUWUVWXYZ[[YWUSROLORSSSRQLKKMPPJLfhJHLHHJLNOONNMLKHHIIIJMPSTVUTX][[b`]dc][[YWVSPPQLLr}vvwu{}ro|xghurffb^addbfrzpswwspnopnh`]cigd`][ZYXWWVURPRUVTTUVVRONLIGFHIKLLLKJJLMNOQTSSQNNSURPMKIIIJJNWYVWZYXVVVVVVUSTUWURPPRTWXXYXWWSNI<9=><=<:9:;<>?>==<;<?EKJIIIIILOOPOMHGB<;;;:<>DILKLJGB>;CNRPPRTURR\\ZWagecaa`_Q>?E;Tre;:9:=CKWcbOALU`^L9;<>@DDCAA@ABFMWZ\\\\[]aQGMI68A>=?E]lnbRTXLOmw\\KFCNjdIAA>>BFHGEEDGHFEEECACCCGHIJJLNLHA>>@A<5202645@=<@CC@>;85421335775426?EDBACD?6126>DEK\\agpK^~rmhd\\RNMQ_]B443100000/1216AFA856799<A@=BE@7201117:?HIHD;211102797653017;?@=76534322355300018><;@BCFLG?A@=<;520/1663223337723?I?05AA<60.+0@LMMUYUUZ\\XB7=?6-/3469<>@>==;:>DF;,+003<?;::85,+371/01,-<<1256?MUQLC:=GLPSW\\\\`f\\F<732367999:89=;45?>953DRRRRQMLE@BDHKNOMKGD@@;2/5:743772166544;JLB@>AG>7765555:BB>BLVUQPOOMLIECB=4,(%1EV[YQF<;A9(.?A<A?8@F=9912FQLA7673.15:89<4).0(+284412467777;DIECGFA=4-.02595...3662,),-/24688:714<;2..39;@KX\\P=>?<:876469833<A70.3?E<1130-+,/5840,+,11+&%,66422238=<:;>=415658:7@WO=>80249VcK1)+,09CED=.)+*.10039=::57Sf]\\hcf}rUSZN764*+032-'$)/0///..+&''(*,/361'+ESSOL?.+.,+-2650,*)('%$(+2?B<69DIJKMQPPSPKIHJKJC=NNNOONNMKKKMQSRQPOQSRRSTSTTTSSUWVVXZZXVUVUUSQPPONONNNOSW[][YVTUWWTSVXXYZZ\\[VRPRSTVWROMOSVSNKKMONLJJJJJJHIMPLIOVXY]abbbdcZMNTRLJIEDDBBBEKRUVXY\\^[UPMJJIIJJIIIHIKKKIHHJKKNPQSTVXZZY[[^_]ZWRMLMMMLLLKMNMMMMLNNLLNPRSTWZ^_cih[RRSQOPQSSSTSSTTSTUWYVSSTblhejnnqkkomoqppswtpprlcz|UZaa_[\\fqqpja]^bnxyyrpvux}~wot}p]bn{yuvofenla^_bfdbdlutmw{luzlx|xokwvyvzwsokg`]]`ltfXWWWWXY]]Wavtutqcduq~xvtru}xqnpqty~{yurt}~cac]`cflnjea`abccbY\\homifmoqmgTIGEPiQLTWLGINMKMNLKKKKLNNLKIGGHGFEGJKKNLKMKHHIKJIJIJKLNONLKLJJKKJJIJIJjiPNMIJMOQSVXZRJOroaZWUQLO`Y\\iqlc^YUTYKgrGZŰkWE@GlnDPNMNNMMMMOQSSTUVWVVVVTSSX\\]^^[WRNJMNONMNOPKb~qX]|xfc\\UTR[ܻZBGNWROKGUek_STXVVWVUUVWUVY\\VRRSRQRQOPPQQQRSSLYxdb^PKIIJJKMLOXXZWUVTSQQSSTLGNJDQ[WVVVWVWVYbmpljl[VHR]WUY\\Y`hWPPOQTYZXRMJIHLFBi^CGLNORSSVWXYZ[[ZVRPNMKORSSTSNKJKNOOJGb|XFIKJJLNNNOONNMJHHHHHMTX[\\]YUUTS[f``ge_]]ZXUTQQQLe|wvsu|y}rjoqjhebhic`eo}xprtstutrojd`fllgeb[YYXXWVTTRPSTUVVWVURPNLJGFHIKLKKLLLMNOQSTTSPMPSQOMKJIIJLMTXWW[]ZXWVVVVTSRTVWUQOQRTVXZZXWWTJC==>>;;;:::;<>?@@@>=<>BJIIIIHJLPPPOMJGEA;:999;?GJLLJHB<>HNLPTQMJIP\\acghfeedca\\OA>=OfvqJ79:<?KTZbbT@I\\leE29<=@DECAA>@BFNXZYXXXYIDMO:7<;=CDNTSHBBP\\ak|[D@A?XkX@9<>@DHJIFBFHGFFEDCDCBEHJJJLOLD?=<=@=720242.9@A?=A@>;987430,03532/5@CCB?AFE8025>DIOVYlxYQs}~ymgnhULJV_K::720010/-056;EKKIFDCCDGJE@DH@447546:;=GMKC7220//2687764228>??=8531223357730//04:::@EEIKEEKFBB91////37778<=;:505DE51?IJC:3367=DHMQXZYWZ^S;6<7002468:=??@A@@FF:/0<FGA:56;<972.3510231+-244532:FE924>CGJLNQU\\^VF???BDEDDA<878997557:85DPQRRRNG=:@B>CMRQLHGD?7-+,150,285698<>69FE=CFDD?<:5332029>BHQUTOGBGIGABEB9.**&(6JWTE<>A?6.8BCDFB<?A889/6TWA1,152-056113,$*1,-1544248766778=?<;>>=;7223258<;5+).32012469<<::612;A6.1579;AJROA8;98<CFGIC;:?>:91+()/33.***+276883486232.('/78862249A@;@C;3135569<JTG?<942-.OfW;-08AA;630.-,.460.2=@6//9VeZ]g_iyUPWT>2620341*&%)0540,+..)&%'*-.033.*=PVOI@5,,.-.3994.+*----//04538?EHKNTVSSWYUQLHDBACNNNOONOOMLMPQRRRPOQSSSTUTTTTTTVYXXZ\\[XVWXVURPPPONNMNPRVZ\\\\ZXWVUVVTUWYXYZZ\\]ZTPPPQUWRMOPPRRPNMMNMLJJKJJIIKLMKILNQTY^acbagfWKPTSOKHFDCCCDHMPPRTSX^\\SKJJIHIHHHHHHHIKKKIIKMOSVWXYZ[[[\\^]]^_^]XPKIJLLKJLMNMMMLNNLMMNPQSVVWY[ckbROSQOPQSUVWXZ[WTUWXXVTTT_dcflnnoiinkmppmjmpkhyynv|oW\\_bc`[cpqndYbtifmh]k|tqvxnbjkcaadfdeffnsoqrpzktzrkhvqyyb^gknspfdgc]\\`ffbZVVVVVVX[Xa|}~}geyp{wytlv}~yvrnsz}xttx}`Yaaabddcd`]gecba_abaff`\\cn{~|kOQlreXMHMNMJLMKLMMMLKLIGIKLMOPMKJHFFGKNQQOMNKJIJKLKKKLLLKKMMLJJLLLKJIJHNtiHFGIOT`b^[XZSMH_sf]YVPJTtwrf`\\VUQOsMU[sӷ{xceھmK:C҅DNNNNNNMOOQQRRRSVUVWYXWVVY\\^^\\WSRNMQSPNNLIDioVV^dZPPROPPNOVYowAHITSNKKScfWVWUUUUVUUUS]joiVPRQQQQQOOPPQRQSVSSRa~mfOIHGGGEHMSXVUVTTSRRQQSMDEHHFPYXVVVYWYV\\fmzwpzcVLQ`\\U[`]ddPOROQTei_UMHKLNMHSdMFGLNORRSVXYZ[]\\\\UMLLLLPRTURPKKJKLOOIHflKGLLLMNOOOPPOOMJHHGIKQTWYZZUPNKJZjceigda`\\YVUSROY}zvsuwz||uqnkklhjlc[_p~}upqu{~yqlifgnmdadb[YYXXWVTTRORSUVXWTSQPNKJGGHIKLKKNONOPQRTTTQMNRQOMKIIIJLNRWXXZ]^\\ZWUUVVTSRTVUSPQUTUVX[[ZYWSI><:<=;;;::::;:>FJHB=;8@IJIIIIJLPPPNMLLKG>9;;<>BFGGGFE@>AJQNWZTMLJR_bbfmnlihda`[K@EWacZE;;;<AKRY``VDGZeZE8;;=?DEDBA@@BGPZ\\XVUTO?<IN=688<DCBBBB@@CN\\flL:8<;GfhI6:?AEHLLE>BFHHGFFEFDCDGHHIMOK@89878;83/2322=HHEED@=;8766328=CD93116967<@GH9/06?CGJFDUVKg{{imxgNFQWG<<;40121-2AE?ALQRRPNOQSQGAGMIA;<?;79<;:CKLF<511113677865337<>;98984247766730/011369AFGKF;@IDBD8./14668;=AEC<613BM@5AMQROJGFFE?:@IMT[\\]\\\\\\E4443222469>BCFGCCD<06HPRPE827<:66647752011//034430/58++9?=>?>=67BEEC>@CELQSVTKA77888657;51BOOONLD8--;C53;GNOKIHC>5*-0/+*398;:<C@57A>8BIHC@A>4-0//013:DLSTPHA??<7;CA5*)*(&/DPK;48:86247983/6@B<761B[J312342145548:3,.2..1335788621479868746<ADC:69<<=>94-*/2457:;><5/,+0;@8.0799<=?AC@;;922=JOTTMD=DLJG@71,./0/.0+'273652:LRH=62.,288:8435<C?;?B7.034897BK@=<:9794,F`\\C4:>A<50./10-,02.-059305@WdX^kXSydKJOB-,100/-..+'/87-'&*,01///101223.7DQMGA91,,.//4770('6>;873.))2=BDFFP[_\\SMV\\UJ?56>HNNNNNNNONLNPPPQROORSSSUVTTTTTVWYZZ]__[VXYWSQPPOMMNPQTWZ\\\\]]\\ZWUTTSTWWWXYY[]^ZRONPSWUONONNPOOMMLJKKJLLKIJLLKKLLKMMQTW\\^^`eaTLOSRMKGEEDDCEHIIKMMOTWRJIJIIHIJIIIIHHIJLLNMNRTVXYZZYZ\\^_^^^^]__]VNHIKKLJKNNMMMMNNNMMNOORUUVUX][TPQQRSSUVWYZ\\^\\ZYZYYXYWVWXW`mpnqhdhfkookhedcbmqpnwzrozrcbaaba[Zjui^kujxxoqjklqqflmbbdhgefgelvutvvmolzpgnojffinsvxwu_abbdebcfd_[]^``\\XXXXXX[^YYyxwqhp|y}{u{}}||zvojknt_S\\b`cd__qg`efcbachjaZ[][[_kz}xqkRCCGIJKKKQPMMNMJJKJIHHHHKORPNJHGHHJPTPMRTOJIJKKJLLLLKKKLJFIMNLLJIIJFX|^EKLFFRbaTPRPOMGMryl`ZWPJVuic\\UTN`sIT^^QӊctlRPe>o{WPPONOMMPRRQRQPQTSUX[\\[[YXWVVYUQOOSZZUPMJIwfEHSNHKPQPOQOLM_gf]GHNRRRONSd_VWWUVVTTUUYiwo\\MMQQRRQOOPPQRRSSUWUMSbjpSHJGGFDEMVXUUUUSRQQQRQJJIILJKVYXXYZXXUVbj|rppTOP\\WPYd_aYCKTRQQ_pn[LHLMOPQOPJNNOOPQPSWXYY\\]]]WNJJKMPSTUQKIKKKKKLLLpbGLOMMPQPPQRQPONJIIFJQQRSTRPOMJHL`mgjmkjgb]YWVURQzxvqs}xv~{~mglmnsm_Y[j}wnuvnmnmnoj`^`]\\[YXWWUTTRQSSUWXVSRPPNKIHIJKMMMNPQPQRRSTTSONOQPOMKIJJLNPTXYY\\^^\\ZXVUTTSSRTVUQQVYVUXZ[\\ZYVNIDB@@>:99;;;;;;BMRKD>;6>HKJKJJJLNPQPPOQRLCABAA@BEFDB@AA@AJRVZ\\RN[cacecfntuogbbe]JAIRU^aN;9<:CRUX]^YKDMVYQ@:9<?DDDDB@@BHQ]`YVTRD87CI?7859>?AAAA;<?AGPQ945:78ShP68?BEGJKC:=GKIHGGHHFEDA@CIMOK>3452178412524FROKIB?>:89998BPY^WA7><430/:CHC7249A=8;86@>CfspttaE@JOKHEC9/154/@^[D@LRSROMOW[V@6FRKEDB?<:9::;BJKHD912234577866557:<879<<735886554//012469?EGGC<<C?=B:/,09>AA@BGH@6209LK7?UVQQQPPOOND86<BIMW]^_`Q;530/01138=>@B>7988CNSTL?6569<6256::76532221005998862/7?<57::7)(06=>67;:@JV`bXD557887897//ANNJFC<3*+9D6..3<BEGGFC>52.*,/7;:<=>A=8;B?<?CGC<>=952/0578;@GJHCGH@;:9>EC7,()(*3CKC82,*-0/-./+%%4EF@858IO75A?8423311368963211235:<9631259;98;;66=IMIA>?@<9:986322127<<6.(&&+8A:2279889;<=@?=<80/:FJMQLB78HQUVM=.-01002.%(0232-.;FJIB50499873148>A;9<?7/02345<JD+4=864:70AZ\\D5;;8;;2,-//.,++,---+')18EWZdaIKek_RGIC/&(/2-*14-*097+('''2;:8764330.05;CDDA:8/),6>57>6.';MMG=3,+-6>BDCAK]ecM;M^WF:78=BNNMNNMMMLLNOOOPOOQTUSSUVUTTTUVX[^`abc_[YXUSRQPPNMNQSVZ]^__^^^YTUVTQSUTSTUVY]^WROOQSVUPOMLOONLKKKMLIIKKIJKKIHIIJKJJJLPSVWZ\\WPLOQOMLIFEEEDFGGIJKKKLMJHHHIIIJJJIIIJJKLNOONPQQRTTTUX[^^]]\\\\\\^`df`WNJLNMLNOMLLMOPONLLLMORVVUTUSRTRQSTUWVWXXXZ\\\\\\\\[XZ\\[WSROXjnknf\\_filmmmicacccfhlu~{vtuvmfb^]]foaY|qsylehiib^hpheglihihem|ywwt{tyynjoqe_gnlflpevmdfda`bcddddiia\\^_^]\\YVY]ZXj|b[xtjt}{~~}||slgfccgtxdZ`fddeakmadgjifb_`a^[]]^^bn{dNCFIIIJJMSRONMLLKJHGGGGGGIKMLKIGGHGITZYY_]PIJJJIIJKKIIJLNMMRSMKJIIIIBf}YLOIUm_TZVLLKJJHIb|qd\\WQGWxlcZUQQWVGIY\\]\\WٗhMXceKXdCjjjjNHUXSQQQSWRQPOPOOPV[\\\\]][YUQQROLNV_`XSQKΣoOHNNOQQPOONNONM^iYnحQPXTQPNNQ\\WUWVVVVUTTR`z}zcMLQRRQQPPPPQRRRRRTUUODOflMEGGFGINWWUVUSSRPQS\\RIKKLRNOX[ZZ[[YXUPWdyoYsrSPQVSKT__^SDGRRRQSoiKILMPQQMKKKMNONNOSUUUV[]\\[UMLKLMORTSOKIKKJJIJJInaJPSMMQTRRRSRQONKJHGJNPPPNNLKMIIVnoinpoojb^ZYXVShxtqry|}{s\\hpklne]_fyqn}ukksvpjgb^][XYZWVUTTSRQQSTVWVTRRPPNKIHJLLMOOOQQQQRRSTTQNPQPPOMKIKLNORUYY[^^^]\\YVUTTSTSSVUPRX[WUYZ\\\\[ZTNJGFEC?<89;;=ADFJPPGA>;7<GLKKKKJLOPQHNSVVMEEFFA=BHIFB?@B@AJRY_WCC_poliedgr{wpg`[TGAKUU]cN;=EJRYSMQZ]QCCPYS@98<@DDCDB?@BHR^b[VSO@97=F@87789=AA=:78=>CCA966931=WB08?BCEIJC9<GKIIGGHHHF@;<AFKQK:2232157445319ECB@=<>>98@C;=N`daZI@GJ;5418DC9215AK9-38;DECJIY}fJ=CHNVY[U?/2442?^jYIJV^[UPNQTXH3:MNIHC<;;:;;>CKLGB;54445677777799:;::;<;755666661++/1137:@FGEHJHE?<A=0+3<BHIEEJG=997=MC5L_XQPPPONONC6016:@KQU[]RA:2,-,.1478620.-/:KVTRR?--3896224678:<===;841248=@@;47@B803786+*1;>712302:LbiT<112588::921@LID@>9622;C:53312:?@B>565/2645868;:=BDDEEDB?EC88:98107ADGHIHC<8?JJD@BFGD=5.(*29AFE@91****(+00-2DPMF<36A<5CKD;5451,,.15888885459=:42479:;;998533?LMHEDB;79:866765447;7-'&&(/8;63665558=@BDA=;854:BEFHE<42@MT[\\N5,020/11+*02/-*').6@I>0;B943.,17<;30388.+-/./@M8'-685353.5GK;3666752,+/.37/+,+*+)&(/06HX[L@MSQXQ>BE3,022-)+.254760-*(%,8=;86543/,,/38?BABB6,*;Z?.=C5(9V\\RC4+079<AC?>CU^Z:-J\\VHCKLIENNNNONOPNNNMMNMMPSTUTSTTTSSTUWY]ab`[Z]_ZVUSQOMOOMMQVY]``a`]]`]TSXXQORQLMOOORY[VQPQQTWUPMMOOMKKLMNNKGGHJKLKHFEFIJIHGHJLNOQOOONNOOPOLGEGFEFHGIIIJHGHIHHHIIIIJIIIIJKKJLMMMLMNOOPPQSWVTRPTX]`dgijicXOMNONMLLLMNOOOMMLMMOSUUTUTSSSRPRSTTVXYVUX\\^]ZVY^_[UTQVeg__\\TZfdejmnnmlkgdbdejtyxvvvsqg\\[]__ZUdwjdkslqpehje\\Z`ikmlkihijknyztww}k`aeioqmorc]jtlaflhepsfadgccddgov{~o^[]]]\\ZWY[\\Z]gha[Zezsj}~z|~}{~|nhggc_\\_bi{fghig__cn{k^abfihc]X_fbaabejt~pe]IFHJKJJIS^TKLIHIKKIGEEFFGGHIHIHIIHGL[ebae_NIKJHHIIJJIGHKOU[\\VNKJIIHHGvUJKB^}]JY^SJKKJIFQt|m^ZXYU`}ylbYTRQNIKOUXTVP|>qЍNW^YPP}fOWSXe|gNOW[USUPQPONNMMNTXYZZ[[\\[UNLMKJTbdaYPیuVJNONNNNOMJKP[XWbc`\\acUMKLNQUVVWWWVUTTSQNU]`jpdPMPSRQQQPPOQRRRRQRSSROIOaNCGHFFHNUVVVSQRQQQQZWPNJNTTUYZ[[^]\\[RKJRjxhKZjPSUXSKQXXWSNGMPSWReoJLQQRRLIIIGHJJIIIKNOQW[[ZVNLKLLMOPPNKIJKIHIHEEJev\\IOVWYXWUSSSRQPNLKJJJJPUQNJJJKJLbwroptsslc_\\ZYWexvtw}s}~sW^rkeihefhrvrvzhelvyl`]]]]ZWWXUTSRRQQSSTVXUSSRRPONKGHJLMMOQQQQQQRRRRRPORSRPOMKKMOPQTWYZ[]]][ZXUTUUUTSRUSPSYYVWYZ\\\\[ZTLJJHFDB?99:<CINNONH?>=<9<DHJKLLLMOPPIPUXWOHIIIA=CLLFDAB@>AHMU\\P99Ymkgfgdgr}}lPCEB>IVYZ[MDHQUXYNEHRWL@BMWQ@<:=@EDCBA?@BFQ^a]XVM@:78==999:;<==:767;=?><:866436G749>ACDFIF?=EIIIHHHHFC=9<@>DNF7244224555518ILGDEDEC?;:DF?7AY`_^[SJD>;;9;@<2116EN>03:?FIB2*PgR:7@KQTZg^E500357CWbWR]e]PLIFHSP<7HOKE@<<==>?@DHID=97566667887889:99:=?>;78:<>AFKC4,,,.16>IOONQOKHA=CD7.4>CGGDCFH@=@>?IB@V_YVSRRPOQN?4//25?CGILMHB=4020/27640+)**2FTRQQB4-.6<72023555:CHHFB;52348AB>969>?9123541.7B=2242156?]dF/--06:;=;<;8>EDCAA?>;7<C@?@A608;9:7,+128<51335989AEECCDEFC;48830.1?MPOPME@=9:ENJFFIGDA;2*.7;=DFEEB7/*'&)/38DTTRK=.2818HLC<7651**-/589?A=978:93016:;<;8776554=MNKGD<44787779;;;;::62/-+-/112344314:>@@@=:9889=BFKB::<::EJIUaP72110034442,)*,./-1EI59A6.1..36::6;ABC7-.15:A@1/2566631/-5841/1440.,*)1?>30/--./379::@EE@;?IUUA:C@2/21-*(&(4;88730.-,*,4:831211/*,0;CA@AD;1-9V9!,BC28ZaL=3,/555<A><=GLA--@STD<CJKHNNNNOMOQQPNMMMLOQRRQOOQRQQRSTUY]\\[XQPUZYUTRNMMMNNOSX]``][]_^_c]STYUNLKJIKKIHNVVUSRPRUVSOMONMLLLLNQQMGEHKMMKHFFHIIIHIKLKMNLKKNOOQQQNJHFEEFGGHHHIJHGGHHHIHJKKKKJIIIIIJLLKKLLLLLMLMMKKORX`dfghgfhig^QLMNMLKKLKMOOONNMMMPQRTVWUTUUTRQONOTWUTW[^]YX[__\\ZZZ[^_VQQPU``_cjjlpttnnljhggeecdfgfif_[]]]]Zivvzleb^ckdfkeig__^Z`ikliga_glhl~vy{u_VTX\\bnronlbblrmffjpddmmijlgegfgr||~|lYSVXYXXYZZYWSTV[]Ybvsnz~st{~~{dbghea`^``reaojhga]bg^WVXZ[^^^ba\\``abcgpxudRQ\\QEHMMJJITaUIHGGHIKLIFDEFFFFGHHHIIHFL]a`fk]KKLIHHIHHJJHHIMTZYSRQLHGFGPsgJOOGWeJHNSTJILJIHH^x|mWNO[ks~|mbZSQPNNKLSRKHV_NPm||zeQJMX_\\ggXDHJZ\\MUVYRLKNNNLIMSUVVWWXYZTLJKJJMYheZoONIKLMPQOMKJKOSXX\\aR[_T[hYGILOSUUVVVVVVTSROBADMRXVROPSSQRRPOOPRRSSRRRPPSQIBEFFGGFFJSUUTSRSSTTQN]`QGNVSQU[]]b`ZZSGDL\\daMJfWGUYUQJMQPSXULPTUYWYujKPTRTSJFGFFGHJJKGKQY[[[[YQMLLLLMOOOLJNQRPONIMchorZEMaoof^ZUSRQPOMLMMMMLPVVSNKKHKLhxvtuxyvmca`^\\cxwwyy~w|ydSqzecgrlcs~qsy}{wokmqvsf[[^^^\\YVVUUUUSQRUUVXZSQUTROOMKIHJNNOQSSRQQQQQQRQPQRTRPMKJLNQQSUYZZ[[\\[ZYVSUVWUTSSSQQWYWVYZZ[[ZZTKLNJHGEA;;;AFIMONH@;<>>;>DEDNMLLOPOMRVVWWRJJJJA<CLLGEDC@>AGJOUSHATfc_fjjmrzkG?FHGLROOPMLLLKLMKJLOPIDADSTA;9=@CBAB@??BEO]a][YM?:668::;<=<;;9755689;;86644468@8:;<BEEDIJD>DHJIHGECA?;7;>:;A<544422124401=LS[^[WSNE==AB?60>\\lklgR>8:=>>>8653;AF@64:?=::50XYD>20:ITW\\[OEA6045537K\\ceaVIFEDHLOFAIOJA;<=?@BCDCBA=977556656:;998:;:8:=??;5;FOSY^cbM3-038>HOPQRMD??<8BMC57@DA?>>CHC?A@>BEM[^[]\\WSQPPH;53205>?@A@@;=?96::34751.,-,,<NPNK@5632:<63223556:CIGA;64446;BA822569:555456:?=754314;;;PU8(+.19>@??@A@?ACFGHGGD<>CCBBB:3<=;961/20/23//47989::99:9<DB5497/*,/AU[VOI@>@=9>HKJIIHDC>5/3:;=@ACJJA<9/&),1?NYWTL<08?73=D?:8641,+,-17=DB;65542-+.5::8864349??BNQOME835678;>@>;99877:95110..033322699988888988756:<<ACB?AA7B^^G:882/28852/,,.2765BI:4:3.0.166:<7Hdd]QDC><;;715545565552345412352-,//=B53553458<=?DGFEDEE@CVO7?F6169<=:8==<><974310/-.0:@6-,.0/-18AFFE??5*0>H/#(:E<9IK7.-./0..6<<<<<93201BH5(,5:CNNNNNMNPOOOMMLLNPONMLMNOOPRSRRTTSQQONORTTSQNMONMOQTX\\\\YSMSab[bg\\RRTOHHIIJJJHJOSVUSQORUURNLMNLKKKLOSTOJGHILMKIGGHHHGHHKNNLMMMNOPRSRQONIEEFEGHHIIJHFEFFFHIJLMLMKIIIIJKLLKLLKKJIJJGGOV]chjigeeda__chbVLKMNLKJKLLMMNMMMMNNOQRTSTVWVUSRPNNPPQSVWWVW]``_^``_]\\YTQNNVYZ]dhhhnutrtssrojguiilfea^`_^_^`n|||vgeddegiiigfedb``\\X]`ccdfcbehhix{zn\\^YU[^ajqnmidflmljklpmiovyzxmfhfektz|yaTUVVUUWXYYYYYYZZYWZfz~vuytoxcafhf`]bffkxya_pjhiicbcPHNRU[^]WY]YY]`bcflneWWRHJHIONJJGN[WJFGGHIJMKFEEFFFFGIJJJIIHMT]gqr^LKLJIIHHHIIHIIJOSSNPQNLLMMPUGMVLGJSIIIJOKJLMMKHVm|{nXOMSgsu}{maXSQOMLILPTPGWeXUXXgaOJKLR_mrjUNHG@Jf\\[]dXPPWVSQPQQRRSSSSOJKKLJI[rncphELKLLMQRROLKMQUW]iqXMUXZgiNIJRUVUUVVWWUTTPS\\`[VUJIQQPRSRSRPONPRSSSRRQNUTQPBCEDFHGEFNSUUSRRSWY[LV[JEPQLKS\\^^`_SRQHMY]^]TIKHBPYWSNKKN\\eWNV\\VUVUc^NNQRUSJFFHHIJLMPOT\\de_[]XNKLMNMLMMMJKRYYYYXaxv`MWsymd`ZVTRQONNPPQQPPTWVTOMLLIozv{|~}zpdcbba{|uwzztx~ype]]tzgggnfk{ssxzxtoptztqh^]aa``^YUUWWYWTQTXXXXWRSVTQNNLJHHLOOQSUURQQPPPQRQPSTTRPMKLNOQSTWYY[ZZZ[YXUSUWWUUTSQPSYYWXYZZ[[[\\TONKHGGC?=;<AACEIFB>=>?@;GHB<OMKLOQQPTXXUWSKKLK>8ALKHFEDDDEIKJQ\\WJOW\\grqqtrunOOXYTPPMLMMNMMMJHFHJMROH@DUTA78:>@BBCB@@AEN\\`[YWJ=999=>???><;;98655689965445568?9<==BGFFIJE?BHJIFDA?>>859@=8535433113333218?CKPTNJID<=???=;>\\sicc]L=567;;8>=7=@C?8589636;8[m\\D9403?NSVZNDFE;2421/4M_b]WRRPJKNQOFDLNH?::>ACCCDB>:;;98777867>A?:9=>;9;>??:5@OXXXXY\\M57@ABGKIA;>:65322=IIA@BB>;<@FHGCB@:;IW__]_`[VUQF:6663.18:;<;:6:A<7::54651////3FOMJ?45668:875321124:BC>9400356>GE;55534455655:?6/231004<??GD0)-/17:;::;>==@DGHECB?;?FGD?<42>?>;7332/,,.0/5<:785223511:@96:7/)+,?ZbXKD@=>=9;CILKJIFCA936<=<;;<?CEKVM0\"+7ERY[WK>8BKF87;:88862-*')/38B?1,..+*(',4:964431.1=@?JPNIA9;:88:?DD>;99999;9764100/0/.06988866678:=;:9:=CF?:A@:<68MYTKFB;40257774..3;?ADD;13201117>7118P[]ZXYSA;9865444445479754699766448?E=3676668::79BFFMQNQPGFD>B>4:BCMSJDKNIB:56887-).85:D:-**)-,9?CDHJ@?3#';A-).15::95+(+.//-,4:<<;;7463076)'.16EONNNMMMNNNONLJLOOMKKMNNOOOQSRPPNONNNNMMOPPPNLMNNOPPRSRPLFIW\\UV__UMNNIGHJJJKMLLORSRQOPSUSOLKKJIJKKNQTUQLFGJKKJHFFFFFFDGJNMKMPOOORTTRTSMHDEFFHHHIHGFDDEEFHIJKKKKJIIIJLLLLLLMLLKLNNT]a`cifdbcgdaaabehf^TNLMNLKKKLLLLLMLLLMONNOQSSUWZ\\[YTQPPRTRRSRX[[]_befddda\\UPOTXZ^gd^blporttuttrxqqzpfecbekrw|~yxvwtvqe^aacilmmljhebb^XX^^[\\agikkhjomu|}{gVe}znd]afkkkiddkjgfinqqpqs{rihhfgn{i[YXVUSTSSUX\\][XXYYSXgx~uuyuwtihgge^]aefhitlbmnlme__\\URSRSX\\^]\\]]^abdfgggg`c\\GDHINMJJHGTXLFGGHIIJIHGGFGFFGHJJJJIJLXflx{fNKKIIIIHIIIIIIIJKKJMNPSPRQONVkgKEHHIIIIILPMMOMKPermhg_TOVdfn}sjaWSPMLJIMOUXNKOR[\\[nRNLKMMP\\nt]IQNIISxwvUSSUSPNLMNMNNHHJLCCsiTblQFKMOOMNQVXURRTVX\\ty`TWWZevcKJQVWUUUVUTUUTQZmsiXMFHKPPQSRTSQONPRSSRQRRS\\VQPKHECFGIECKSWVSQRQQTXNIIAENNJIR\\_^ZZNJJIRXWVURJCCAJTZZZWRJWm`Z`_WSRSSQKJNQSOJHHIJLMNOPRY]]^]\\[UMLMONLJKKIGINSWYU]wjajzzrkea\\WUSSRQQPQRRQPSUUUSQONT{{pfgg`wwwvwrruhdg^\\rvhggbj|wy}|xurusxynd]\\ada``^XWWVVWUSPVY[ZURRTUTQNLKIGJNOPRUWUSRQPPPPPOSUTTROMMOPRSTVYZZ[[[[ZXWUTUWWVWTQPQUYYWVWY[\\]^_TJGGHGEC@=;<<<=@ABBBBAAA<BE@=IMILPQSUX[YV[XNONPFCINMIGGGHIIIGCKWPCFKMYu~~~{y`_c]WRRSRPMKPTUTSLECGNJEGOZYI:9;<?FECBAAACN[]VUUF:;=?@BA@>=;<<=?B;5799997767569>:<<;@HHHIHA=BHIIFB?=?>75:A@9323342/3=?:7977:507B@@A@<;>CEBFQ`fTFN`aPA54969DA?BCCC<79:86897Qs`A?;4..8FRSFHIFD@602204H`fd^RPTRNOQRN?>LOGA:9=ADB@?><:=?=;:9:;;=CHB9:=>;:;<==74@LHDB?>>51BTVUVVO@821/02325?HF@?AAABEHHGCAA<;IZ_\\[[ZYVQG;44444//25998759C>421/122100-/>JJHE=;<8787555520/,-5>=97521266;HIA;9643577765>7-03/2724==@G>/,/.-/1137::89?CA?:8876;HD=GF;4:8673/23.,-034;@;6641234436::8972,++8QbZG@>;888<BHJKJHFEB>9:=><;953>DOegK+->IQY\\WJ?DIMOHC=9;;950+,-.025:7)&**'&'(067632790+,372;FB><:<:76:?BA<<<<=>@=88853221/-+,3:<:897557<@?@?EOKDDEII=614?LSOLHC>525:=<814:@BDDA=9974459><0.1.5DP[__UC==;989;94379?FIF9269::7569=B?;86557:;:98=CCDEELN>369736FI==CA<;<<:1.7984/),769C:/*(%'1@<??>A;IM2!0;70414@=7620/./.,.5:=<<;;85466-(/55;GPPNOOONOPOOONMNONLMMLMNPQOOQQQPPPONNNNNNNPPMLMLMONMLKLKKJIMROJMXXOJKKHHJJIKNMLNOPPQPQSUTQNLJKKJKMMPRTVRMJKJJJJIGFGGEEEFJJHIORQORVVVWVTRKFFGHHIIIGEDDEEEGHHHGHIHGGGJLMLLKKLMMLLS\\_YY\\`a`bdegfgijjggkmh^TMLMMKKLLLKKLLLLLMLLMNPQSVY]_^]\\YWWVSSSRSSUW[`egggggdb[OMY]]jh[Yaedgopppqrqp~{sy|voq|~ujedddgigca^]irnmrtqmhcba]\\_`[Z]fknqkefbajja\\hyr]UXig\\beghjiechlgadqtqqnpy~xurjcdnw|`[XWUVVTSQRTWXWWXYZWW`nx{qw}tsxyq|zrojgfd`bbcdddhgclqnn_VVX[ZWTSTX\\b`^ehhgimmifghg`SJHIKKKKJFNUMGGHHHHIIGDFGHGGFFIJJIKHMtn]m|kPMKHIIHGGHIIIIIIIHIIKJLNRRRV`cYNKJHHIIHHPXPKNOMMUVYfndWQS[acp}|qg_VROMLKJLNOSQNNY_\\\\R~HPMJLNNvpT`YSVZV\\ZnÂPKTTROMMMMLLLNRJZɒ^U_\\LMTSRQNMQTX_faYXXX]st]TVXZaxnPHQUUUUVXX\\]]XPZlvwlYWa_ULPSQTRNKKMSSTSRPR\\cXQONLHFEDGFBFSYURRQLIGHHEEDHKLGEP^_[USNKILOORQLGFDA@MTVZadcRHZkmkeXPPPLIFHKMNLKJIIJMPPPPQW[ZZ[[XTPOOONLJJKIIIJLOUV]vsomwyqkhc^[XUUVWURPPPQRSTVUVUTPMcyqljgryzz{to{vd`gq`]pplidoy}{wvw~vvnd]\\_ab__`\\WWXVTSRQRWXZXRQSTTROMKJKJOQPPTUVTSRQQRPPOQUVUSPNMMPQSUWY[][[]\\[XWWUTVWXYXROQUWXXUSUVY[]^aUDBEHFBB@=;:99:==@DDCBBA=>A@C@IKNQQRVZZWUXSKOTTSRQPPKIIKLLHEB=FOE;?EEGi{k`XQQTTTRQICGORUYUJ@?DEJVZRSPB:;<<BBCDDAACLY\\TSVF<=???@?><;9;<@FH@:::<>>;;:75<AC=:99>HKIGD:;CFGEB@=>?=75:A@95555443<IJC>??=>:57AGHEAACFMQGCQZOC;I^^PD76;8>GFHIJIH>69<99:::AD632336;FOQPHBEGHJA229>AHZbd]JGMPUWTNH>ANLDB@?ADFEEDCA??@?>=;<?AFIEA;:<=<::98736CD;6887701Ja`YW\\TCAB;459;98<DE<8>BFHIHHFB@BDDHRXVVWVXSD:7543341/2466785:E=4,+,02222215FNHDCAAB@:963666431-*/7:865432545?B<:9645799:;=@8452.5:3377BF8,-31/0124<A=7;A@=:656689AB59CG?60244/<E2&+6::EJA:621333687677841//04AQVG:78644;CGKONJFDCA?==><<:::A=E]h]=2ELJUZRDAJLHOVSD9==52-(.842640.)())')++/0/.-.78.+02423624::98658<>;:<>?@AB@?:656553220/2:=;897636<@>;58U[VZYTOF8/27?PPIEBCA=>>??;:<>@?@@CFGE>767;83325?<2Eag_RGEJJC??CD958=BJQNC832981/.03>EA>AC@?AEHJGA@BCA:781%%-1/2?=-#%6HB52/*+6:40/-.569?914><(0H>DD33<UfL)0>@;:9:=;555651/.,/48:9::=92164+*0458@RQPSTSSRRQPOPPPOMLMMLLOPQPOOPSRRQOONNNNNNOOMMMLMOPNLKLLKKKKMLGIPTNKKJHHIIIJLMLNOOOPRRTWWVRPNMKJJMMNORUWUQNMLLLLJIJHFFDEFECFLQPORXYYXWX\\XMHGGHHIHGGFEEEFGHHHGFFFEFGHJKKJJJKMMJNY]UQW][Y^cefhhjllljjllmleYLJNNKKLLKKKKKLLLLLMMNOQSUZ[Z[\\[ZZWSSSRSSTTUY]][[\\\\]`[SLXeaku`X\\ZZ\\gqpdadhle]hngn}zyuh``]ajnkdaa__mvpqz|yrjdced`^^\\]`lppnja^`ZTU_^a^^]\\ZZajf]]bbbehgecempedqysrrswvffowmUY[VUVWVUSTUWVVVVZZUW]go|}mp~|qpymj~zrrjfca`bcbceecbcirqoaUUXYYVTSUW\\`ZZehfflrtqjehhcTKIJJJJJJHLQLIHGGHGHJHJKKKKIKIHFJJICYgT\\mpYPLHHHHFFHIIIIIIHIHHGILPLOWVSNMPSLHMMLHJTXRSSTSOKGGXhaXVUZ_ckuvnf]UQPMLKJKMLPTRQX`Z^\\abHOLIJJIjuvYl{j[XURRFlǻsNTUSSRONLLMOQNZԍ][Y[YQUbc`WMJPU[cmj]ZZZb{sXSVYY[pmPHSVUUUVY`egm]MWeivzpksjUJQSQSOLIILTTTTSPP_i^QNNOMKLLNNJBRXTRROKGFGGHJKLJIFET`^ZXVRPSVUX_[KBED@G[c__flk^IIgzwjTLNKIGEGJKKKJJIIKORQPPPV[ZZ[ZXURPPONNLLMLJKLMMQVZezzsmkxwpja[ZXWWX[XRPOOPTXXVUUTUROqztroq{y|~swqhdhjjcimmjep|{xwv|tld^_`a`____[WWXWUSTUXWVVUSSSSRPNLJJLNSSRTVTSRRPOPQQPPTUVURONNOPRUWXY[]\\\\\\YYYXVUUVWXYURQRTVVWUSSTX[]^aUA@FIHEDB?=:9:;>?@BCDDDB=>?@E=BLNQQSXYVTSTNFNWSXVMNRNKKMNJDA@;ERHACBIXnlfsk[OMSTSTSQLABEILQNC>@FMYd]C>D><<::9:BHEC@AKX\\SNOA>??===<<<:8:;>ACB><:=B@<=;8;FJE<989>EJGE?8=DFFA??>>?=64:A@;865579>HROJBBCAAA@ACIKICFLNQRJGML??EW]VF87:=?ADFGHIGD=7368:;=@A86=>>?GIJLIDDEFQ[c\\H=@D=9JPPTKFNVVVTNIEMSI@CDCEHIJLLHDAAA@@?>>@CIJ@55:<=<;:9842;E>768:9:67Nd_LKXR=@LG@>CC@>@DGC;<BGJKKIEBBFHGFGKNPRRUL=87555564345667769B;5.,/4776654:HKGCB@???:6556677654013675555335667445554689<>?;863/.572323B>4-06756534>A83:C><:<BDEFA:D=:>GH><>;84>QD*(7@?GOJA8132114975555322365:DI=8=<4269AMTYXTNHDBB?=><:;AEA:8L[VC6DLDJUOCAGJHJWVD<?<51.(.651661----,*-//-*((-010/00001.-.5<:76556798669>ABB@@:65653224522786456879;>;2*3Qcf_PMQN@3//0@OHB?DA=@?=<:==;<<<=@GLG9444521678CM;7Ui_[VNQPLDILF936;?EIGJLJC3+,+)*4GSRSXWLCDJMO[XA8APRJE>3+-/+,,,-48BVM4*.//26420./236:97>SX<+KRRRFEQah_C7ABFC;7613011/1/-,.0243333/*+-,)*-1417TTUXYXWVUUSQRSQOLLKKKMOPPPPOOQSQOOONNMNNNMNNNNMMNPOMKJKJIJKLKJJKLMMKJIHHIIIKMMMOOOOQSTUXXURPNKJJLNNOQUWYXSQPNNNNMMKGDDCCCDGIIJMORSTTQSXXQIFGFGHHGHHFDDEFHIJJHGGGFFGGHIJJJKMLJR[QKU]YRT\\bfhjkllmlmmmlllnk`SMLLKLLKKLLKLLLMMMMLMORSTVVVWVWWUSSSSSSRRQRUWWWYYXWWVUX_cdqtcZYYYakuma`bb]\\^a^l{qgfjnuxnbabbbbmvsy{xuoeafga]\\]akyypeimjf_Z]aidbcc_\\WWVX[\\__aceeedcn|smquns{wu|ypjpwxqi^``[XWUVVUUWXVTTSUUUWZ^eotlbo~zuz|cg{wqjca__abbcffedbftsn[TYXWXVTRUWY^TXfgdemuwvre^\\\\PJJKJIJKLILLLLJGFGGGKQ[ZRLMUWKFHPSOLYfXQLXl]QKHFFGFFFGHIIJLNMLNQTSPLflVLKLMWNGNOLHLVVSUWVXQJPLK^^YXWX^bhlnle[TQPNLKJJLJNVVPR^adoeWPMMKIIKHSsY{eUWksf]YMLIQfXXWUUTPMKKORKGU]\\UROKNWiq`MHIPasl_Z[]]iYQWYYXgmRKTVUUVPTX[abWTZUTevunn`KJPPQPNLJIKTVTVSPOP`cRMPRRRSY^`]QQVTSRNJHHIKVRKJHFDEW^ZeqaYPU_]ch`PFGCBNdnninrmi]Vgyn`]WNHMGFHIIIIIIHHJNRRPONU[Z[[YXVSRQPOONOONKMNNKNTY_hpxxpgdvaVXYWX[]YSONNPV[YWUSRXQU{vpr{}|yq}ydkrjehlqlfar|zvwwx{{jda_aa__]]]][WWXVUTUX[YUSSTUTRPOMKJKNRSUVXVSRRRQOOPPQRTUUTQPPPOQTWYYZ\\]^]\\XWYXVUUVXYYTRTTTVUUVRQRW\\^`cW@?HKLLKE??@?A@@@ABEHGFB<<>@E==MMOPSZ[XUSSLJUWQ\\ha[VPLLNOE>??9DSMGGANnrkQPjqkg`VUTTSRRMFB@BDA8=JOU^g\\>58::99777CLGC@AJW\\RF@<>A?=<<;:;88:<<>@EE?<CD@=?=:CLH>99:<>ACDC=<?DFDCA?>>=;64:A>>;4358>EKRRMFEFDCEFEEFFD==A??@DE@95<ERUYO>;>?@@@BBBA@>>8007<>ACC@ABCBABGPPKGEIQbmnnkZA717LOL\\`[\\[WRRRQQXYI>ACDILKKKJGCBCBA@@@?>@B<1.29::;<<<823:<4468:9:68NaP9DSG7:CDBAFIB=CKLKFBFHHIHCABBFFA?>BILLKLB:76566688676656779=87669<<;;:878BJFCB@><;62587878887532455555436=;3012554468:<;73220/476413:75469:987=><;514:9APSSSQRODFC>>???AD>647HO;.7B?@HNI;067./38853333458865:;5:B8/087@R\\__`\\TGAB@=><;;>@@;2:MOA67CBGPLEACJIGKKC@A?:80(/5506920221.-/20.../3541/00-..-06>=;754444464/6<ABB>:86310.001123430/27;>=:>90,-D`dQADFB@7-*(-?I?6>?349<;;<<::9:<=?D=2003774367:LVAH`chg[POKFHOD6238>BBFWcd]J93101?Udghh`QGFIMS[VD:<FW][[S?/165)0ERMCKL6'-+(/1430/0124787;KZTDKVPRX_kkgoT1?KPG73121,*,-01//.-,--+*)&&('()**0401UUWXXWVWWVTSSROMKKKKLNPQPPQQOPRQNNOMNNMNNMMNNNMLMNONKIIJKJKLKKJIJKMKIHHHHHIKLMNOPPOQTTSVXVRPMKJKLMNPRSUWYWTQPPPPPPOKEDCCDEFECEHIIJKKKKLLLJFEEFGHIIIGDEEEHKLKJHGGGFFFFGIJJKLKKPQKMXXPNRXbikmnmmmmnnmlkllnql`VNLNLJJJJKLLLMMMLLMOPPQSSSTUUUTSTTSSSSQPPSTVVWXWVUWVX[``ekg[ZZZajxwa`_^[ckU_ZZoujen{}vlc\\_bcedkxz}qrxumcbc`\\[\\aoz{smoy~xmeacbdbab]jcWYX[\\aihbbddccl||uvmhs}wvs~}lekpvssqmeejf^XVWUTWXVUUTRUXZZ\\_cjh^apzyzo`d}vkga____``beghieesthYVZZYVVTRTWY]XVehdenvwwxpZQMLHIKIHIIJJJKLLJFGHG@KPX[XQR\\ZMIPUUQPWQMNFJ^ZMIHFEEGFFGIKMRVURPRTTUWas`LKKKM[OFKKGGNVWVWXY[ULV[RW_ZYVUZ^bfhgbZSPNMLJIJLJMWYPK]rtumSKPMKJKLHFALsLUU_syl[NKJJOmU[[XUUTQNLLOQMZU]]UXUONSYki]VOKXzpUX\\]]kZRWZXYbjPJUUTTSOQRPNMPYZNO`mofcRELPQPNMRRQLUUTUTQNFPZQLNQQRTV`hgaTTTRRMKJJJLTUQIFDEFY]YmqmiTN]]^]WQMHCEMXitsqqlppdefTLXfaRLGGHIHIIIIHILORRQPOUZZZZXXVTRQPOPOQRPLMNNLMRW\\cfhlidbr|ZRWWXWY\\YRONMPUZYWURPVM[{wr}}{rwzsmuulhfjmkhgy|}~wvwwvvreba_^\\\\_^ZZZXWWWUVWWYZWSRTTUTQOOLKJLORTVWWVTRRRQOOOPQSUUSQQPQPQSUWYYZ[^^]ZVVZYVUVWWWWRRTTTUUVVSPQW\\]^c_LDJNPPQJBCILGEBBCEHLHGA<<>?E>;KNPPSX\\]VTTPRVWSYnxui]TOOKFC>;7CLGIKCAZTCdPObmsoeXTRTVRSQJECDDB>@LUX^^Q=689:88678DMIB@AIW]RB9;?@=<::::;:>==<=>DE>?CA>>@ACJI?67:>><=?@A<;=CDCCA?<:<:539?A@9337<AFLRRMEDFEDDEEDB@;873017AC888:BEMVTB=???>==<>=;;<92269=ACCCCDDCB@G[d_XUSWgspr}lA23=XWUfnfc]XRQSWZ^ZH=?CFLONKIGFDDEDBBBB?;:<8/.3788;<=;822321368:9942FXF3@J>3357:?FKD=ENMGFIKHE@:5>GC??98;?GJHH?>:87677898766667788:679<>=<<<;877>HFC@><963/38:887775433555555545?D9//146446798875553129<4,.35789;<:9:DG973//-8M__YXUTTNFA98989;=<:87<IH;;DD?@BF;059..15732433356544534982,197=LXacdeaTFAA@?=;<==>;10EK?64=BCMKD@>GGCCEFEEA;8/*.36248435530.//0003335431/011223;@>;865543342-2<ADC:64310/.000/0343/.15;@=9;71-,6PSE@A;8=6,(,-;G>59;507;;9:888889;;93.007?@81/10I]EEZeieWNMJEFKA4026<@@E[filiaF<CAL\\aacfaSHIGIJJKA:;=FRW]]G22@??=><::;@60///.034200/01476=K\\[JCFEDR`aQTY:1ITD200/02.38632210.,,--)&%&&'()))/30,UUVVVVVWWVUTSQOMLLKLMPQQQQQQQPQQOMNNNONMNNNNONMMMOOOMLLLNLLMKJKKKKLKJIHHHHIIKLMNPPPRUTTUVUSQOMKKLLLOQRTUUVUSPRRRRSSQNJGFEDECBCDDDEGGFGEEHIFEEFGKLLLKHFDDHIIHHGFGGFFEEGHIIIJJJKJLPQNLMPW_fijmmmmmnnmllllmprsngZROKLIIJLLLMMMLKLMNOOQQQRUTSQRSUUUUUSRQRTUUVYZZXXVZWX]`\\_\\\\]]fuyqd]^`_T[ik_Y]\\XZgsoibkyuc]^^_aaa_enpqrlp{{qf_\\]\\[\\_gpux~|}ulhfdcdabzw_[[[arwkeegeeeiz|vjvzwzzc_jou{zvokmtunf`XWUUVVZ\\[]ba`^^```bcbeqz{yne``]\\l~ud_aa___^^_`ahoqmdqr_\\ZXb]RRSSTX[^YVdichqxxvx}eMHKJHHHHJIHJJJJJIHHKKIMLLTYZYZRMPYYUSPQLHIEFSTIFFFFEFFFFGLVZYXVQPOQNWfaRPRKEN]PDEFEGPVSOOQPOLGTa_^_YUSSSW]`b`]WROMLJJIIJIOY]SIUu~wp[MONLKJJIHHHuiKNPSfcILKKFKITѿ[][XWVTQOMNNnYS]]]X\\\\YWTLMd}ycQNhfNWZ\\]huXSWY[\\cgMMWTWTMNRSMLNQTRNPYddTWOFKSRPLQ[^^STUSUUROEFNRMKJJLNMQ]dg_TRRQLKKJJHES^XPNIIW^ZbelxbMSQLLNPQJCFQS`ruofbgnbVVSQMVibJFIIIHJJIIJLPQRSRRSVYYZZYXVUSRRQQQSSPLLMMNPRUY`a]Z_flmicaZNTXXTSUZWNLMMOSXWUTQPNJr|z}}zuxlku}tefmmf`i{}x{ywyutnida`^[Y\\a]UXWWWUVVWXWWVTTTVUTSPONMLKMPSUVVVUTRRQPPPQQRSTTSQPQRSTUWXXXY[]\\YVVWYXVUVVUTTRRTTTVVWVRPRW\\\\^ccTILRRPQLDEILLKHFFGHKHGB<<=@EA<DRQOPRVXVUVWVPQXWS\\jsqdTMMRM>88BLNUZO<<9>MlgY_]\\__[VSPR[QNRNHGJMPJDJV[VKE<678989879BLJCABHX_RA:=>>;:989:>BFB;9<@MPE:9:9:AHJIA956;B@<<>??<9<BDCBA<77;:548?EB>>?AA@DKQPHDDFFGC?>>=821358:>BB@B;4?DDGOEA@?><;86<>>:99;8539>@ACCCCBBBEUde_\\XWamljl_?,.Gc`Zloed_\\VOQX]_VB8=EINPNKHGGGFEEDDDDCA>><746667:<:742201468:;;;60:G?6<;3/.--0:FJFCHLJEFLMJA6/7ITNC9129@GJHFA>=<;9:;;;97776678::7558><98999776;GID=9<70/.059984564245543444444<F?2-/3876877789;<:734>?1()/78;<:<;:AKG963,)4J[]\\\\ZXRJ@;=?;;=<>CFGHHEDECBJLA67<921000234218500/-/356447,+/4865>M[egee`OBAC@=>>>>>;3.:D>9658>GGA=;??<ALPMKC8/.0016447556730-..//0/10./001123203<>>=;::98742/+,4:>;422110//000/015731025<;84200.);B?A=999307<<>CA:867::9867568::;=>:/*,3>CE@5.',K[LIOSV]UKMJDC:72.38;@ADPT_vQEYMMY[Z^^[UGFGA;AC;8==8;CP\\O408CI<.*.5526748:0.2233.'+/269CVcV=269;AHC546-7QH0(*../3;AA;6222344341)&%&&'&'().10*UUUTTUVVWXWUTRQPMLKKMPQQPQPPOQRQONNNNONMNNNNONMMNNOOOONNONMMKJJJKKLKKJIIHHIHJLLMPPQTTTVWWWTROMLKKLLMOQSSSSTSRRTUUUUUTQNLHDBBBBBACEEEEEEEGGGGGHJLMMNNOMLJHGKLKJIGFFFFEGHGHIIJJIJLNMKKKOTV[dgggjmonnmllllnnoqstpmh\\NHHILLLMMMLKKLLLLNNNOQRPNOSVWWWWUSRQRSTUX[\\^]]]WUY^\\[]_`_dkmmjb`bb_\\WRW][\\\\XWcg_c~sc]^^_ccb_`cb_fnmpvvne_\\[[Z[]^dlswy{~wqrlhhhr}wf][[]bb_bhiefgkyyxw~b]gjormggjlmpttupdZVTV_fhinrlihffdbchifju||yp`]\\X`ohY\\_`^_^^^^]]cutli^S_`VidQQTX[YZ^\\U`kdjwzxvw|nOFKJFFFILKKKIHIHHIJNT[ZUIJPTZVNORRSWWOHGGGFHMSKDDEEEDEFDGWa[Y\\WSRTRLis[PJEFR]TFHNOPUVROOQOJGFN\\b`\\WRPOOQWZ\\[YUPNLKJIHHIIP\\^XLJ^t|yeQOOLJJJIJLGWXLKKHIm|FLMLKLJAf^^\\ZXVQQONJeS`_^]\\`bb_VOeia]\\UTUX\\]gyiWUWY^_e\\HSXVWQIIMOLKOPMJJLN\\\\GFIHJRRLFPX[cVTTSUWTPKKORNGFEFGFGMRVVSQRPKLMLJHAH[gfd^ZWWX]eq|tXGDEJPTUQFFY_^iocYVZ_WLRZaaYZ\\IGIIIHJJIIMQTTTTTUUWXYZZYXWVTTTSSSSQNMLLMPRTSTVUQMPbnhWQMGKTXTOORVQKJLMOUWUSSPMLM~|}~}}|fgy{omuxwkcoy{z{yqhhqsleb`][Y]]WTWWWWUWWWWXVRRTUXVTRONMMMMOQTUUUUTTRRPOQQRRRRSSSSRQSUWWWWWXY[][VTVXYXVUVVSQQRSTTUVXYVQPRW\\]`efWHJPPQRNHGHIJMMKJJHGFEB>=?AEB?BQOOJJNRWXYXSIM\\aL?G[lk`WXWJ<9:HZace]I<<KROVW]^[XTQTURNPOK`dN@FGRYPIIPTG;;;88789;989@IJDCBFX_N><>==97789:AFEBBO^kx~^:4748CJIF?:66;CC@=>@@><>BBBBB<9::8::7;DGJNNJDACKQLDBEGHJC86873159=BCACFKN<,ATKAEHGDA@>:78>A?86:=;515;=>ACCBCCB@AGOSTQPT[[[VOA02YpfcsscXYb[LJU`]O=7>GMRRMJIGGGGDCDDDDFHGA><;:8889<;502444678:<<=<9;=;992....--4AFDHPMIJLMLJB20L`^]U?--6CKGECBAABA?>@A>:7888789<;643465357777747ELFA?>=:83,/3:910574244444333557:960.2:>@?;657<=>>:37A<0+-495./499;DI?893*/J\\^Y[\\XQH=319A@BLNOTVTTTSLDAENPC42784.0222110022.-,+,142244..285313@R]b^]\\PEBCB?AA?>><515;<<:316@@=<<;;9<LTL>852/4416636668:50--.-0364/+-/0111/004=>>????==:5/,((-00/-////0//--../015741..3861..//.9<776773/7=>DCDCB:25;<952368:;>DGIMLC>>CEFE:-&9VWSPFBFUOL^OC@./0,499?BBHALwZAc[JVYV_]WXD/497==42:?938<COL4*34=?+,CIFFCAA8*+1123,%(,.9FGJQF635<:6782-.2:?1'()+/7<;95.-035668:80'$$$$&'')*,..*TTTTTTVVVWWVTRRPMKKMOPPPPPPONPRRPONNOPOOONNOOOMLMNOOOOPONPOMLKKKJKLKJJIGHHHHIIJMNOQSTVWXYYVRMMMLJKKKMOQRRRRSTTTVWVWWUSRQNICCABCCEGFFGGGGGFGIIIJKLMMOQSSROPRRQOMJIHFEEEFFGGGGHIJLMMLJLOONVceabinqqpighhilmnpqrssrqri\\SMLJJLMLJJLLLMMMMLMSVRLPWZZ[[XVTTRRTUUX_bccb]XWZ[YY[_```aejhfecb`[Z[\\\\ZZYZgmfuygbdbdfedbceaanrlkmlgeec^ZZ[\\]gqqmpx~urleiw|pb^\\XV[_gnljmonim}zz{c^dgid\\Y^cgjlopqup`VS^osmptromhfgddjjihinstuyoaa_eri[Z^^\\]^^^^_]Zpr]_RK[bZfk[Z[_nkYZcX[f``n{xuszsSLNJFFFIKJV[PGGIIHIMYcaTIGMQTRQOJGKWVJEFFILLJQQEBDDDCEFCF^jfdb[[[TNX{OEFFHMWYPT\\[WVVTX^``WLIJS^\\XTQNMMORTWWWSOMLJIHHHHINXWTOKM]ryp^RNMKJIIIJIJLLLJIEEbeMLMMKLMCgb]fm_OJKOQNfLW_a``_agj`VvҨwxn^ZXYZ[^jpbVUWY`ZcZX_ZYSMKIIKKJLMHEEHLT[I?FMGPQGBILN\\WWPSSVUPKMPRNJFGHIFFEDDELQRNJMQPMJIJUfnqtq^PUZiwsodKEKQT]c^MG\\hbbf^RMVc\\ONSd~{bOFHHHGHIIIIMRTTTTUVVUWYZYYYWVUTSTSSSOLLLLMPUUQOMMLLOX`_XTPKKSUPKMPRPLIIKNTWURQOMMQ|lew~qnu{rhv}x~qebmyvleb`^\\ZYVUVWXWUVWVVWWTUVWVUTSQONMNOQQRTUUUUTTRRQOQRTSSRQRSSSRTUVVVWWXY[[XWWVWVWUUVVQOPRSRTUVWWRQMPW\\`bfgZGIPRPQMJIGDHLPPNLIEDCB@?@ADCCGMJIEFMV\\^YROLNYc]PKHOelbSI@:89Qdgec`TEAIRUVXZ[[[WUTSQPNGD^lUDFGQXPJFC@<8::8888:;:89?FECCBDTZI><<<;988:;;<?HWh[4554<FHFE@965:CG@<<>>==@BBEIJC?<99<>:;CLPUQHBBDHJECHLMJG<23667;CB@@@?ABM[F,B^VFDGLONKF@?EKJF95775312689:=ABABCC@?CJNNSZZTOMLH:Glqh\\_hZCBV_XORVPE@DIKNQQMIGDCCDDCDEFEFGE>;;=<::;<<<4//4:;85568:=?A>;?=3./-.110/7AHPTKDINNJFB51MbdeaN5.5@IA8?FFDCEEBCEEB>;:988787633323457777766@LMOONNOND:88:=958==96634432235654686:IRPD>:87;=<<848?9106;=7/,-/03894470*=[^YXXSNID?<==@DHOSRQPNMJIKHAAMOB42563121232010-+,././23.,483/363,+-7FLQUVVPICBBAA?>==:415:>?>9359;:;;;:66FM>.1:60693553578::6,*++,.8;4/-.01111/015=?BGFC><<7-*,)))()*,//1011.**+,-,+,011/-.03410/13530,+1401889>@DDC?:8568529?=98=KSOS_YPFDFFD8-+ASTNB;?>HPVgT?;40.+4?==BHNA8djAYUCZ\\PZ^V^\\?157<A=46;<:5-)9XM.'7GH?6:LOC==65CK>21,+,-(,?L?1155:;<7478625675,(''+4=:0-,(,59656:94,&####$&(**(),,SSTTTTTTUVWVTTUPMMMOPPPPPPPONPQQQPOOQPQQPNNOOOMLMOPNLNOONPNLLLKKKJJJIIHGGHHGHHJLLNQSUXZZ[\\[SONMLKIJKMNORRSTUVVUTVVXXYVSRSQLGBBCDDEFFGHFFFFGHHHIKLLNOQSRSWXTRQPONJIGFEEEFEFGGHJJLLMLKMNMOW]\\\\cllmlj][a_`immnqssuuuwwxvl]SMKKJIIKLLMNNNNOTZYTTXZ[\\\\ZYZYVTUUUV\\cecfea^[WWXY\\__``aceddca^^^^]]_^Zboml|rggdcdddcacaeqskhjkhinj^XYYZ_jsvupt}ye``mzq_WZXYejervmopploz}}~pabda^``^ahnommoqiYSdwskmnmmkecb_nrigghiklmqtgdfmtj^Y[^]^_^^^`_Xd~lQVZUVac`gdea\\drbScd[jVU[qzqnwtTMNJHHGJIFSf]JGIHFHMY_VJHJSWVWZQECLRKEFFEGJHFNVIBDDCCEEF?VomjhegfZiiLEHGFGIV^]_]WSRVY]`\\WPHGFO]]VSPMLKLOQSSSQNLKKJHHHGIKMMLKJIKXgngWLMMKJJIHIIJLKJJJHEIKLLLLMLFLmlPPPUYQ_@OU]cgheachacϥh\\\\\\[\\\\`oqaWWX\\]\\cfmeV\\LIMKJJJIHHIFBJQU`NBHQJOPHCIJLQTTNSSVUNGHMONLKJLMGEEDBBJSRKJNTTPHNRT\\fnxw_PWZeviY]WPRVQ\\mjTJ\\lla[ZRHUwvXIHW|YGGHGGHGGGHKPRRRSUXXWUVWVVVTRQPPPQRQMNOONLNUTNMMMNPTWWY[]XOKOQNKKMPPNKKKKNQOQRPNFbxppx}mk~whgz{~|qfgs|nfcbca]ZYWWVWWUUVUVWYVUWXXVSQQQPNMNOQQRSUUUUTSRQQORSUUSQSSSTTUTUUUUWXYYZWWWVUTRTTUVVQNPRTUWWWWWSQJPX\\^`bf_NLSTQQOKHDBDHNPPNLGDBAAAB@ACEDGH?=DOXUVUMJPSSU[b`M=P_U?:::9A\\gca_`XD:BPVYYZZZZYXTSQPONEDVXOKNRVPKC;:<=><9888;?>97<CBACCCPSJB<<;99::8766Fezn;0656@FGEA<7549EG@8899:=><?FONC=;99>@?BINPQMD>@DGCBHNNKD=7458>ABFF@;8897>VSCI[WJFHKQRNJFEHMON@6553112579:=?@@ACEGJMNLR`jg^SLGE<`mYUD=IF60@T^XPG?<BOVRNLLJFDB@?ABCDEFEEEA=:77:>?BA?<50.18;721228?@?<:=;1//-.010.6ERWPB;>LPGA?;:@L\\c]O=469;968CEDEGGCCEGHG@<99765676338;9779;:975=KPSTSRTVQMGB?BFDAACC>94232024579526@O^]J>??<69<;866:;834:@?==6,)+/34334,&@Z\\WSMFBA?>AGEBEFC@><97899>DB>DJA413543222233451,.133343/.783142*+-/36@FLSUQIDBBA?=>>=9438>@?A>:988889::65@?0(.3-+8<453149;<<;1*,-/2651-/0010245557<@FJHB::<4()0/+))*-/123565-(',,,-/./0/.,,+0632563.*.0/3566769=??@BFG=129717>>5.6IUPP^YK?AB=91-.:FD?9278@WefL<9742.6C@;AJI91KulTK9.H[QU_W[e`SD>Ne`>17:81,*-BVB4EFCMH766/,)7^}rL766:6.',FL;,-67:=<:998646785/*))+.20/12048987::51+$$%%%%%(+*(),-SSSTSSTTTTUUTTUQNPQQPPPPPPPPOPQQPOOOOOPPONNOONMLMOQOLLMMMNMLLKKKJIHHFGHGGGGFGIJJKMOQTXZZ[^]XRPOMJKJKNPQRRSUVUVUSSTV[_^XTSSRNKGEDEEFFFGGFGFFFFHJKKLMNOPQUXTOOPPPNLLJHFFFFEFGFGIJKKMMLKMPQTUTWdmi`[UPT[WT_ffglprrtvyzxvvvo`RMLKJJLLLMNNOQSTWXWWWWWYZ]^\\XVTTTTU]ddehhfd\\X[[dj^Z`bbccbba`bdeedegegjidpxmkmecbaabcaabjoollnlmrm_YY[_dfcmukgp{~~cY]ii`ZZZ[jwn_o|qpoehnjoy{}sha\\cssgabbbbdfgmwupv}yl[Viskfikkkjgbcmujfgggiijkllgdegihfc``_`b`^^adcnjMS_`\\^c]`\\bd`Y]ZS`jbvfc[^~lsuTJMJHJHHJGKX\\LHJHGIJNLGGHNZjli[LDITQGDEDEEEDFIXNDFECEFF@L{wjnllie]?EKKKIJZc_dbUQPQU[[VNIGGGELXZWROMKIKMNPQRPMKJKJHHHGHJKLMNMKIMU\\`VLLMKKKJHHJKLLLKKLJIKKLLMMOIMtglWY^On߻BMOR[dmpla[YRSädZda`_^h||eYYZ\\][bkr[kjBELKKJJIFFJGGOTXaMDLSNKNLEINMOXTNUTUVQIGKNOMLKIGDDFGDELQQIDLTVRPRUUU]pwiRMZ]cn`RVWZ]]QRadWOZoubSRRFLs}ZHFJufLIHHFFGGGHKOQRRSUXZXTQPRRQNMLMMNOPNMOPONHKSSLLMMNORVWY\\`XNKKONMLNONOXbd`ZSNOQSOLsju~ofvtgg~~q{{pkirqeabbc`]Y[[WVVVUVVUVYYVVXXWVSQQPOMMOOPPQSTUTTSRRRQQTUVUUTTSUVVVVUUUWY[[XVVXWTSRSSUUVTOOPQVYXYYWWTOGQ[\\[^^a_SMONMNMIFDDCEHLOOLFBCABBCA=@EDGG>@NYWIFMOKMOMLOXYL<?FC87=EO_tvlc]ZS>7COSUWZZZ[[YXVTRSVK=FPQQRSSOKGBBB@?>:8779@A;7=DBAEEFOORMA=99::75=LWfuwy{~mC2767:>EGA96652;HI?78?B?<87:=BA98;98>AAHOONNKB9<BEBFMMHCA@<55;DE>;=>:40474?RSPTQIHHGLPMJJJIHKK>6893002468;=>?@AEHKNSSP\\lolqoWB:Ctd;>937:526@JPJDA;7DWYSNLIEA@@?@ABDGFDDDC@=9:>BFFEC@=:887840.016<<9886421/-.01/2BOURE<7:JQC;=AE><IQH=6465368:;=<>CEDCDFHKF?;9876798219?:56:<;713;?BEHJKLMMNHECEIKGB<=>:621222358:506L^aR=;?@>:9<;97886779;<>BB8.++178633/*=QWQIB;999:<?>=>A=4/-...368:;98BA7334678763455642344455544852260*2690.=FEEIIGDBAA@>=?=958;@@@AB><:99998;96:7-*,*)0<=65206=>=@B8,/2443//322100136667;?FJG=59=5.393-+*+.0456896.((/,,.1136521112218=<60*1?>8:87547?@@BFIKE;8:714;:.&/AOLO\\O;29:3/,.0147::2264IgY8566654:BB?AG=2><Tl_^K1$1NTSXYZZbm`TirC-52---0/.FRHB;;CJA510-2WzbJ==FI<,\"4NH;66;=<==<<98642331.,,,+*)-430//167982.0.)''(('%',...-.SRSSQQSTSSTUUUSRRSRQQQPOOOONMOQPNMMOOONMMMMNMLMLMNONMLLLLMMMKKJJJIIGFGGGGGGGHIHHJKLNTVVVWYXUQONKIJLMOQRSRSSRSSSSSSUY]`^ZVUUUQLJHHHGGGGGGGGGGGIJIJKLMOPQSVQJKMLMNOQOLJIGGFEEEEGHIKLLKKMQRRSSW`eaYSOLPROKOX^]]cljelsrmeadf]RMLJIKLLLLNPPQRQQQSSSSSTX]^ZUTSSTTSW`b^_efjgZchak_TZ[^bc`^_acefgfhiiiecacqsmcjsidbabcccc`gqrnmnonrsf\\`emmb[^c^Z^fp|m[Y_ZWZUYwofbgporl]drkgtintqqpoieikhb_bcgmqw||}r]]mlefhhikkjhlvobeijjiifedccca_demumcabdc^\\`fgrJRa_bbXZ_\\[dik`RR\\f_fsobfkaNGIHGJIHIIJLMKKLJIHGDBEIIMnwRGGT^UJFEEEEEEEE\\SLNHBDFD?]vxvtsndb=GNONPHam^aj_QNPRUWXSKEDHHFKUWTROLIIJKLOPPNLJJJJIHHHGIJKKLPJHLMLMPMLLLLMNNNNMNMLLKJKKKKKLLMNLMtrYlwbTTMONRPQX`ipmaUNHIQ`ٿuafedeep{f\\[\\]_`fhi`zCEKJKKJHGGHGKOTUVJEHRRHJPKIPOM[]TXTUVUQNNNOMLJGDBDGGEFLOKFHMQSUXRMPKUrtVDJ\\`b`]ZWQX^_]UMOWUYow_MLMHH\\fSHHD`~[JJHHFFGGHJLOQRRSVY[YTNJNRQOMNONNONNNOPNMGIOOJKLLLMNPRWZ]WOKIOPNMNMML]qwria[XVWRatkx|svy}wejt~znlz}vuty}oc`ac_][[[ZZWVTSTUVXYXUUVXWVTQQQPOMMNOPPQSSSSSSRRRRSUVVWWXVTVXXWVVXXY[]\\YUWXURRRTTUUVTPOORWZXYZWUQLIW_\\]]^^]URTSPOLGCFHFDEJMMHECDDCCDB==CEGFBK[bZMGGJKHKVYVOJFBAADCDMZfo|rXJF@9>IOQSUVWWXX[]ZWUYZOEFKOPMKMLILPNEA@>:8778?C=9>EEDJKJMLTPE?;::3:SpzlqvwrdPE?9579;EF;34635?JJB;?JKC;8:<::858;78?BAJOMLOI>7:@>AHKG@BILD75<EC95797414852>IKLKHIIEJPLHJLHDA?89@?720135558<>?CILJIQWXdplft{[;0MX08958<;:767>AFKA39LUUPLJD>=?@@@AEJGCDDCBBBDFIHGGEDDEFHD@;84214666676200/..01.9OVOE=:8?LJ<8:=>96771-155546898856:>AB@CEHGA=::8867523577557:9/+14/.6?BBBBCBBABCEFD@;434421344469734@U`WD5:?@?>===<;9538;?>9AG>3./135633<>9CNNHC?98;=>>>;738>8.+//+-454422<?:87679<=<;98986667776666662..3.(1>;00=C=7<DGECCBA?>??839?@@ABC>999:;::=>===830/2:=9443169<CDB=11343337;60//0012457;ADHG<16<86;:3..,.015669750,*++,/2/17;=>>>913=?>;7/2@<384215:A@ABCDFJHC=769;3))/8GOSVF.)250-,,--/8:0-1608OA,-0247;<<<::;16N>7P^^B.*0@JNLO_YM_f_q}f=.63-.,--*7PO;26;BB82/,;\\k]PHEGF>3&(CI96756;?@=<?<50-,.0/.----,,,1.&'+./265/-11-)''('%',01/.0RRQQPOQRQRRTVVTRSSRQQPOOOOMJJMOONMLNQPNMMLLNMLKKLNLLMMNMMLMMMMLLKKJIGGGHHGGGGHHHHJJMQSRSTSPNNMKJIJMNOOORSSSRRRUVVVUWZ]_][[ZVPKJKKHGFHHGGGGGFFGHIJJKLMONPUSJFFGJMPQPOOMLJFEEFFEFGHJKKMOQRTUVXZZZZYWUPJFEFLTSNPVVTV[^YSRVTNKJJJJJKLLMOOQSTTQPQQQQPQSVZZWX\\ZTRTU[\\WW[]``Y`gZbobX[\\^^]\\[\\^_aaaabbbfnpleffetufa`a`_`beditqqrppvz{rkmqvtf][ZYYXX\\lt\\XYXYUVvhdecknja]hpmevoafjoymefgd`cdfmy|jgiechjhhhhjotukikiklihfb_^`a^\\``bmifieij`ZY_f|qLRb\\\\cTSefV_lvyhVV^[X}}rXIFGFEFJIFEGIJKLNMKHFBGJJKKK~mJKL[e[PIEEFFGGFE\\^WRIDDDDERQfxpe@CHHFJNJrp]hjYNNOQTUUSLFCFHGKTURQNKIHIIKLMNMKJIIJHHHHHHHGKT]WLJJEHNOMMLMNPQPPOMKKLKKKKJJJJKLLLL`T{dI[nfOMNEOQSSW]cge_UKGU]vފfpmibehone^\\]_`gfUZGDHIKKKIHGGHJJLJLHJAKWKHVUNRQGWh^YUTYWVQONLLLKHEBDGHGFGHDEOOOPTYPFFDLggMAEYea``[QLOS\\fZCGTTTjsYFIKKJNQIHICNxfJDGHIHIGHHJLNQQPQRZ^XTRQTWXVSNMNNMLMNPPMKGILKIIJJKLLMOSWYUNKMQPONNLLJOYbjquzzvtixvlw|o{tnkz{{||tm{{{wla[_cb^[Z[\\\\[YVTRRTV[ZTTVWVVURPOPPOLLNPQRRSSSSSRQRSTUUVXXYZWVWWUUVXZ]]]]\\YUVUTRRRTVWWWTSPSXYXWYYVRMKN[^]]^^_[\\kld__^SHHSXQOPNHCCIFDCACA>;BCFFJW_`YVRHCILR]]SFACDFJMORY`d]afZA9979FNPRUTTTSSUYZVSVZWQPLMSSE<AGFJUULBBA=:877?D@:<AGJOMLKIIHFB=924X{q{raPFLPC7663:GG836559BGHEBFKH@:<BDCCB>;978ADDFFEKMB77=<8;CC@<@MRA67<DA?C<556556558;?CEGJJHLQKEGHB;99<ACD=41235657:>@DKMIITZbkibaooK32WwG5;89AAA?=<>@@DGEBBEJOPMLH?:>@@@AFMHCCCCCCCEHKJHHEDDFHLNKHFA712689;>>920/./11/7KUL>899=C=53322221-+/6754247778768;>><<?AA>=;;:96312534:;9886.07/(+7?=;<<<=>>@BDC??>6//23344468:958GUVG85:<??>>>>><979==@=7=@83/2@A5/0:FHDHLKEA?9789:<>A>56AB:793((253224:;:887758<<=<>?<989999764312/,,.,+5=;79>A=39GKGEDC@>>??:27AA>@DDB=:89:;<>?@@A>:89864213322/2;;>C7/1247<?A9.-.0100246=DDHG9+1?<335300/.06566441.,++,,.1..16AHFE@56<>>>81251.1.-3=@@@?>=<AILJA98:6,*/24;CKJ;.).2200/../1-)-254169502<A?<81..-+)@R@6GQE6228:=A>E]S?Te\\iv\\5.9:41,*.1>SRD<?B?:40*(6GLHCGKHB6,)>J3)03446?C@>>;/)*,-///--,--..1,$%,.-/443011,'$$%%%)./-.16RRQQRQQQQQRUVVTRRSSRQPNNMLKGGJLMNMMMPPNMNMMOOLJIJMMMLMNNNMLNMMLLKKKJIIHHHHGHGHIHHHILNQQRTTRPMJKKJKMMNNOQSSSTTUVYXXXWY[\\]]]\\ZUNHJKHGFFGFFGFFEEFGIJJKKMNOOPRNGBCFIKKLPPONLJIHGGEFHGIKMOQRSVWXYYZZ[[\\]XRLHHIKLKIJMOPONPQQRRQOMKKKKJKMNNPQSTTTRQQPPPOPPT[]^caZRQSUUSUVWXXXY[\\\\hnha]ZZ[cb``[WWY]`aafrzqe^^j|pca```^_bhnlqpkutmtvms{wvvvg\\\\ZXYXXTZuqZWZZVXwqegdemg^\\ailkfn|sccknntx|wphcacefhgcn{ulcdkmkfd`eqyumppmklkifca`aa]]_a\\abglklgb_[Y]um]QTa]TZVQ_e[]hnyx`UY[T˧ћURTMGEGIHFEHJLMONKKJIFNSRNIJz±bHNOZe]RIFGGFFFGF]hUMHEFFFFF>T|oqjDNFMRRHXxj`nhUJLOOQRQPJFEFGGJRTRPLKIGGHIJKLLKIHHHGGHGHHHJVveKHGIOQMKKLMLMKKJJIJJKKKKJIIJKKKLLKF~BNQ]\\ROQG{POVVX[]__YSMGMh`ttbbdhmg^\\_`aj\\GPȖLCGHJKMMJGGHGHJFGHKHORPGS^SLPJVc[YUUXYXOJKHJKLJHCDHKJHFFFGNMLNT[TIHJNVVMEAReeefWMKLPYVFFXTPQ\\eUGILPQRNEDFCG\\WFBDHIHGGILKJKPONLIX^SPW]\\Z^_[ONPOMKKNPOMKIIKJIJJKKLMMNPSTRNLPRSQNMLKKIGQl|ryn|vtz~oip~|ojx|se[Y\\eg`]ZZ[\\\\ZXUSRRTVYWUWXWVUTQQPPPNLNPQRSSSSSRQRRQSTUVWXXXXVVWUTSVX\\^^\\[YWTUSRRRSTWYXVTSTY[ZWWYWTNJKR[\\]ZZ[[Z`kihhkl\\LPad``_YOJHOGCEGHFCFECGS[``^XVUTQPNOOKC?<<>DLMJOPNWQ?=:<78:<CMQRVXWTPNQRRRPUYTRUTZ\\YN>:ADEMSPIDHF<877?EB>?BFKKKLKIEHHC;35RpnOR[KQK>7:86?IC65679;=>??AEFA:6;CEFGHE>:::?DC?;?EA;5<@947===;:IJ9;;=ADFL?35863458:;=?AHLLKKIDBC?976:<?@=;73346679:<?CJMKLVamhNHV`[?06NT;7:7=CCA@?AFID@AELKHINNLMJFEFFC@@HRMB??@BA@AGKKIHFDABCFJKKKI@409AEGGGE<2-.13100<ON>;<766312114541//5:962.6:<=?><;==:98:;;;<;;::9630139?=;==:9AA.*6=?==>><=>@ADDB?=?=437765446;<:7=KSL9026:=?>?>==<::<?=:41224745IM6-9FIFBGJHCA@:31126:=?EKQTTRRK:035435697656664589:;?A>;9;==9754330.,--.4;=;;==AC6;JKHFECA>>??=9=B=>CEDDC>:89<;;;;<<:9::6311244331223>F:/0159?@A>50/2233335;@EKD3,6E?3.2311//04357530-+-.//.-----6EIFC;9878?7/0..../2>FB=<====AGLLE;7854434567<=84211212353**),2322348;8:EE;43--5502DL@BF>78;;;;<<9EVK=Na\\brV0,6984+-<BIURF>?@:433.**8E8,298621?J<./69:52478420*(+.////---./133+$)/122444211,'&-/*%)220035RRRRRRSSQQRUVVUSSSUURPOLJHHHHILMNMMNNONNNMMNNMJIJLLMMMNNNMMMLLKKKKKJJJIHIHHHHIIIHIJJLOQRUXWTMJKMLJLMMNPRSSSTWWWXYYYYYZZ\\]\\\\^^XPKIGEFFFFFFFFFGFGIJKKJJKKMPONKHDCEFGJMNNNNMMLIGFFHIIKNQRRUWXZ\\]^]\\\\]^`_ZTOLJJKKLNPRRRRQQQQQRQONLKLLNPPPSUUUUSRQPPQQPOMQZ`cbaXQRRRTWXWUVWVW\\^_glf]^_chhhcYTV_jjc\\`ruid_Wo~fbbbabbaajywvus~~jbaXh}{wxwfZ[YYYXYZV^nbWXZXTkzgegfgld[]`dddgkmihjqurtyoacf_[`hlhdk}{}}ukhlolhhmuz{xtttpmnmieedeee``cedggghwvfdca_i~rQSW[XRRSRVX^ceksvd[W\\T|U{glofTJGHHHHKNOMKGJMLJDJWZZVWc_DPPSZXQMJIIHFHJLZ^LEDFKMLIFCCxu\\sOEJWlzfL}chwmWDHNMOOMLIGFGGGINSRNLKIGFGIIIJKIHHHGGGGGHIJKQakwpOEIKPSMIJJJHHGGGHIJJJJKJIIIJJKLMLIIRHLOPPQQRM_xSQWYX[]^]SLKLFZc[hcdlti^^bbcjQFIhKFFFHJPOIFEEJMKDBCDGMPQENaWNVPUWSVSOSZZOEDEFFHIJDCGJKKJKKKNKIIQYTKLOQPRNGAMZ]_^[ZTOVYLFTe^\\[[ZYXVQRUURJDDEFKKGDDGHECDHNMIHPVURLSWPPZ_[Y^a^SRROKHKNPONMKJKKKKLLLLMNOPQRPPNPRPPNNMMNNPeztmdo~sqw{ij{}wis~wdWX\\cic[ZXYZ\\[WUTRQPSUUUWYYYWTRQSRQOMNPRRSRSSTSSQRRRTTVWWXXWVVWUTSTUXZ[[YXWVTSRQRSVWYZXUSUVXXXWXWUQMKMU[\\[YXXY[ZY\\gprqaRYgeehif_YRLPX^^YSPPICIYZXVWWVW^\\TSSG<=B?>AILF@F@=ViJ9;B=?@@?GPSX^`VLMOOOQUWZXTZ^`_]ZO==CCCJOOFFF=::=DIFEEEFGIKLLMMKID55UyjQR}mSA58DEEHF?7558:98878;==9549>AABB@<<>==??<;AD:25BF:2489>?>IF>@@<@D@@:58:722689<ADELNOPH;6994246:>FI?5433357899:;@FKKIPafT=:CLK=33666667;@AA@@ADFFBBEIKKMQNMMMMMNPLB;DRPC<<::?BDEGIIHGEBBBDFFGIGC806AILIII@2-/2433/3EJ?@@610/026<@@:12679;953>?BEGFECA?=<<?>===<<;;;;:524<?::CHHHKB/0=?>BDFD><@DGFDBA>==98;;86556:;939JQH7-039<>=>?>=><98883//.-2887AA23EOIB?BFFDBB@87;:;:6<P\\\\_a^`aUA76534665445675468;<:<>=;>BB>964892++--.:??=;;:<FAAIJHGECA?@A@?<;=:@HFDDC>;89;:9:9::975545666666:88<=@C;1027=?>>A<68;7641./46?G9-/5;5.+/1110002359852.+-022/,++,('7FHD<:9.1:9/-,-258;DGC<:?@@ABGJIG@::<<;:;<==>@=<:84221266((04544321.03343/+/05CC>@CA>??;:;<=<<?>8ERI@BQ]eiL,*2761,5HLGNQE3.453577+$;G-$,0541<JA27>@A=2+''(((())+/0/..0///1330*+034553333110.5CC2%(598422RRRRSSSSQQQTVVUSSSSTRQQOMIEGJKMNNMNNNNNNNNMNNMKJKKJKMMMMMMMMLLLLKKJJKKJIIIHHIIIIIIJJLMMORUUPLIKNNMMNMNPRSSSSUWWWXYYYXWY[\\\\\\^^]ZTLFFEFFFFFFFGGGFHHFGHILPX_]TLKGEEEFILLMNMMNMKJIHHJJJMQPQVYYZ\\[Z\\]^`bfgd^VSRNLLLLNPQQQPPQQSSSQONLLNPRRRTVWWWUSRRQQQPOIFQ`a]a`XVTSTWWUTSTUVZ`a`aa``dkhgh`XWcmmg^[^cfee`Wtkfddba`_aiy|xzpxxXXVay{{yh\\\\ZYYXYYXWWWWYYUbwifihhifa^_a`_aelpqprtuy~q`_b_[_gjegz~yvutqljknllvytuwvronmieffghijkfdfejih}xgcbehw^RYURRSSSRV_lqsog][[`f]`f>UY\\eqlTHJMONOZ\\NEO[XJBAJ]osfd\\aoRANOMMLLMKIIIIJMPQPGDHOSTSMEEAf|XJf_HCMdn|aYdy|peMHLKMNKJHHGGGGHLQPMLKIGFGIIIIJHHHGGGGGHIJKLMP\\yrOEHKPQJGHJJHGGGHHIIJIJJJIIIJJKLOONPfiNMMONOQQRSSZTTXZZ]^_`RJHJDMsUv~idhuzj`accdhNCCAOEEFGIQQFDFDS`H@AA@BGMOFKVTSUMLPMQOLRY]QCBGFEFKKDDFHJJJJJMRRHFORNLNNPQQIBBGKTY_fkaTY\\S\\dimklncYhi[RPPROGCEFGGGFEDDFDCEKLMNU`c\\RRVZ_`\\XWZ\\XNMMLIGINPOONLJKLLLMLLLMOPQRSSSPPONNMNNOQT^u~spkmbtw{op~uovyrdZ]giec[TVWY[^[VUTQNPTUTVWWXYVRPTTRQONPRUTSSSSTTSQPPRTVWWWXXVTVVTSSTUVVVVVVUVVSSRSVXYZZXUSUXWVWXXWTPNMPW[ZZYWVX[XYbp{wqh^^^Z]eikjd]bjqpd\\RRWNCCEFGDHRY]WIJ^[E>DEDHNNH?<E?6TtU@?@FDCBCHOV]^[SQRQNLWaa_^bfaXZbbK;BLNPW\\N@=@BCEHMJECADHKNQNONKJC:NwwSlE7@MQNJE@95588777677645567;@A@?95:B@<;<<AF=108FJ?6239ACGLHEDA:@D;559<;952479=DIKMNPTOB:5238:=FNRURB546669::::9?GJJEGRRF<:<>@=84344557;ABA?@CDEFFEFGJJFDHONOPPPQQK?=HKB=<88@FGFEFHIHFFDBBC@ACDC?52:DHGHHB89:644521:?@D@40//01:CII?57=::@B=:>>?GKJHFDCEGGGHEA>==<<<===:7<A;8@EDDD?46@BABLQG=;>CHJGFEB>::;:8765579981.=II<0027<==>@>>??:5443440.023120/:HJCAACFEDCDDAAEED>5=V_[]```daP<6532245656786469==64=A>BFC<96575.+,-+/;?@?=::;CIKJJIGECA@@@@?<42;BFECA=87:<;:989;<<;7456777778>73AGCB8/-.39:9:>:37:6310002599/+.*/+)*-////02658:8631.-/11/-+)*)(/BKD98;2.350.,.4;<<EIG@@@AFHFFFEGJE;25@FHDABGE>:;;96100385048643212//02551.222:??AA<9:8875899;BA:CND<74GaT/(1520./;HHEIOI0%.7;:=<..A<+9OO?9?D>6?JFA=;5.*)(*,++*+./..-./0001.*,23224434454459ALJ6$'6>>832RRRRSTTTTSSTUUSRSSQQQQSSPLGGJLMNMLLNNNMNNONMNMKKKKKJLMMMMLMMMMLLLKKJJKJHHHHHHHIIIIHIKJJLMMNLJIJLMLLMMMNPRSSSTVWWYYYYXWY[\\\\]][\\][SMKHGFFFFFGHHHHGFHMU\\cjoppgTIGGFFGIJJKLKKLKKKJIIIJJLMNQSTTSUVW\\`abdgihdb_[UOLLLLMNNNOQQQRSRRRRPOPRRRRTVXXWWVTSRQQNKHCIY`\\]ba]ZXVVVVUQPQTX^cdbaa`cfghfZ[_kmd_[^_Z]fk_Zuwlegda^]^dknvno_WY[r||k\\\\]\\\\\\\\UYbYTXXYVrypolkkkf__ab`^`iuxupns|p]X__]`gkryz~~zvrnkiefhijw{snqy{snmngbehjienwmfc_cgjzqa_bjq|eQXURSUVWXZ`koje``b\\[^]@D|tHD?DI[m^KMRSPNZc\\X`bXGDKMXpb\\XTFEKKKJIKIGIIKLMMNYYFJW^\\USKFGFXzdEO`fiZU]W_OauxhiYIGJNNLIHHHGGFGLPPOMLJGFGHHHIIIHGGGFGGHLKLLMOZtmMEGLQNHFIJJIHGGHHIIIIJIHIIIJJKLOPOOPSQMNPQRSSRTTSTUZ\\]^__aUJHIKH}hT]_bjn{~kbbdeefM?E?ivRCFFGITTFCHDNgM>DEDFIJLKNNLMNLKMMMMRSRVMCEHKLOQPFDIJJJLLHIQUJBHNMMOMMMLF?DFBLY`cmjVQWZ^]iwpt|dRch^TMOPPLECFIHGEDCBIKGFFKRY]adaXTVcj`SQVVVRMLKKHGIOPPPOLKKKKKLLLMNNNOPPQRQONNONOPQSV^lwuqsqxyìz~zoq|~tltwjd]\\ismb[VRVY[\\_ZWVTPPRTUUVVUXWSORUTRQNNPUVUTTSSSTRQOPRTWWWWWWVVUUSSSTUUSRSSTTUWWVRSWZZZ[YUSUZYXWXXVTPNNRX][[YXVWYX^jwzrkgd_VNQZaeeeltqqnjgacfXE<69??CQZRB4=XOJNICGPTI?<ALE;Pyh82=FDCEC@DMY[YROPPOLR_gkgdg]PWpw`?9QfiiqbB6>IIEFJH@<<EKLRVQOLJIDE[pjfvxhWBDKLJHGC;4577688787546667;@CB?926BB<;9:@@634<GJE<57@DGLNKLLB7<C>9:==<;9548:=@DIMMNRUVPC8:AEHNQRSSNA6899;;::9:@GJIEDFECB@@A@>;7334558>GHC@BDEEFEEGGJK>5CWYUQPQQQRKCDF@<><:?FGFEDFIIGFE@;<:8?CHC:5;DHHHGB?CC:776633;BGA3.///07@GI@9;??@DGDBA??GIHDAABHQTROKD>=>>?????;8<A=4213<DA87AKHALRA9:;@IPKDAA=;::7555577974/*/<F>5/07;<=>??>?A>:658=9/.///-/4:BEAAFHGFEEDDEFFGGH@4?Zb]^becce^G3021013566687567;?849CFDE@57884,+,--,05<?A>;;=BKOLJIGFDCA@>??=:49CFA==8217=<:669<=?@<767877747:4.<ID<0+)+,/124540/00.-..07:71+,,',,,,.000..3867775322.--,,+))''*-<LI83753332100237?GJFFE=:FMIGGEHNI61CONLIACHC;9::><4101:B83442233742:ACCA@:787;==?;67991,0219FD=FLD=3+?aP.2>:,,5:AHIHEHH7/5:BC?:7>5)9Ub_H?E?3:LVPG=63,,///00,*+--,,-,.0131*'+//1433589999:=@B@7-/9@@<76QRRRRSUVVTSUUSSRRSRQPQRTSOKLLMMMMLLMNMMMMMMMLLLKKKKMMLNONLMMMMLLLKKKKJIHHHHHHHIIIHGHGFGJJIIJIIIJJJKMMMNPRSRSUUUVWWYXWYZ[]^_^^]\\YXVQNJHGGGFGIJJLQUV\\bjnpoossgVIDEFFGHHIIIJJJJKJJJJIJKIKLHJLLRY^`bbceefgjkhb_ZSNMMMMMMNPPPRRRTTUVUSQQPPUXVVXZZXUUUTRKHFFO^^X]cb`_\\]]XVTPQRV^beigedcdegc[_gjhfchmc\\]ip__z{mijgdb`_a^^pwpjVYYg~{}l\\\\][[^`]YfiXWYYYh~smmmng_]_ceeeirwwvsqxo[[```epv{{zwx{xuspmkhddhhq{xqklw|rpnogcglmk^fwvogda`gutc]bm{aTVWVVUVY\\^]]\\\\_hkfXONPJ?L\\QGDGDFYYNPQMNLMWaddZMHLNJCyxPTYLEHIIJJNH@FOONNNNVaDQ\\^YPQMIIKM]RH]vQRKSPUu]UQHDFIKJHFFEFEFHKQSPONJGFFGGHHIHHGGGFFGHMLLMLLO^jNCFKPLFGIKKJHGGHHHIHIIIIJJJKLMNPPPOPTQRQRSSTTTUVVVX[^__aaaVKIJKIKcIOJ^pr|~kbbcdnaIADDLUGEFGGKUSFDHFFYO@CILMPOKORKJLOSSOPNOYRHLHAFHILPUWJFNPMMOQPFCQMDEPQOSQPNPPMRWQNOSXkoVGS`^Vjzs{vWJSUVTQPPOKECEHHECBFKTVPIGLS]c_]ZWRPW^VIFLRRPOOONJGINPPNNMLJIIJKKLNNONMLLOQQONOPOONRTW^dekqwx{ø|xwt{}rmvpfb_gokfaYSTWYZZ[XWVRSTTRUWVWWWRNOTVSPONPSVUUUTTTRQPQQRTVWWVVVVWYWUSRSSSSRQRSUUWY[WSTYZYZ[XUVXZZZXVVUSPNNRX]\\[ZZVVYXYjvpkc^b`XRPPSXZ\\lyunjnpmkjZD<8:<>EQSD767BYkkWGGPMB=AJPLDJirNB>BBCEE@@IUTSRQPMPRPWerm_\\\\XczkH5Ghut|tR@HRXTMEA;7<FKJPWRQLIFEGKMICBjrorHCEEFGIF=6688799998777767;<>@@;44>B>;87;84:=@EKH?:?BBGSVRRTM?=CCBDC?==>:79;=>@BIMMNQWWI?><ANXXXY[YN=7=><9888;@GJHEDCCDDBDFC?=:534558@JJEBEFFEEEEGILLA9EX`WONPQPOOMLLHB@>9:CHFDCCFHEA@>8898>CHA88?FJKHDA@@?<<<9975=FHB6../.06;??<7:CFDCGGECADHIGA===?HSVRLD=;?BBBBAB@<984-,3@KJ?87?ONADE96::=IRI9567;;97456888:85523>@:9547:;<=>@?@BA=:7:>5-/0///5@EEDDJNNLA:ABDJKIJIH@3=[gbbfhfdfdM/*00013454477566:@=76:DGF?9;;6.)+,/00028<@=;::?HNNLIIHFECB@?>==96@H;3531/126778=?>??;5479;:53454/8D=1**+-.0232100.,,+(&%)7960,-/+-,,./000--/113554330++*+*)(()))+2@F>45678985641.7FGGDED93;GIHHGGJG=DPONMKIKLE?=<<?@<568<C82111357;::@=7<GD46DHGDA>60/55-*-..9HE=IMIR<7\\qoR<@8+2BEFLLF=?HB>>57E=2=H<=LZZQIA90-8>DNOE5*'*01.,++**++**+*-1353,(('*48757;=<<<==<:8669=??><;RRRRSUVWXVVWWTSRQSSQPQQQQQOOPPOONNNMMMMMMLLMLKKKKKKLLMNOONMMMNMLLKKKJJIHHHHHGHIIIIHGGGGHJHHJKJJJJJKLMMNPQRQRTSSTVWXXYZZ[\\]`aa`]ZXWUROMJJIHIILOU[ZZ^cdbdimqssoZFCFFFFHHHIJJJJJJJJIIIJIFEGKQV\\`bbbcdfeeimnljhd^VPMLKLMMNNNPRRTVVXZXUSMLRUSTVZ]^YVVWVRLHEHT\\ZYZ_cedfeZSSUTSS[a`cgfffffgd^[dptqpqoe]\\isdcyjjkhhgghkkjwdVZX`wz}j[[[XX[`aX_m`X[YWYenrpooprolmf^]\\`hoqnpuxyyuzkZacbelvqpwvxuqonmlkhggp{|}unlruqtrqiekllm``uwyvyrlfbld`bk}~ZPTVWXWVY[ZTPU]bgniVNMMJJORMHGJHDJOMNKITNHMXcfZQSOIE<]eDPTKGHHGGIF@GTXSORRDzWBQVYWS[TKJKGJKRUdȱhOFLJFf|t]KHGGEFHHHFFECDFHLRTRPNJHFFGGGHHHHGGGGFGHOLMMLKLTcMAEIONHGHIKJHFFGGGHHHHHIIJJKLNOPQPPQRRRSTTUTTVVWWXY[^_`aacVKILKLGJj~NKFSeqz~nbcblnSGDHPIBDEGGIKQMGEGIJPMDCIQSYXPQQHNVXXPMUSVZMCDEAEHD@COXRJMQOPQUXPAHVPS]]YY\\\\\\[Z[be]PMKZiaMH[hhgswtyiPHMNQQOMLKHEEFGHEBENX]\\UPNPQZfeYNQPMLMOPPHFJLLNOONIKNPNMMLKJIIJJKLNOPOMKJMPPPNPPOONQTV`hnqrusw~~zss}qklyrhagojdc_VRVWXXXYWSRRTWUTVXXZZUMMTYUQONPUXWUUVVUTRPRSSUVXWYWWWWY\\VUSQRRQQPQSTVVXZ\\VSW]\\ZY[WUWYZZZZUTUSRPOPW\\[[ZZXVWXYgofd^]fd\\XUQNQRLRnxvomnkf`P@<;<;<EPOD;;7>cv|iIAEB@BGNPMECWrzveEAFGIHD@DJLPZ^UMPVSW`kxXTfhoxtiV?:Tpvxue`gmuybFBHEBDB@ITRQNKFEDC@?9;ivrzvLFHIIJKHA:79::;;;;;998679::9:><53;A=977954?HIIIA9;@==IW[USVVMFEDCGKE>?@>:88<CCABFHGHIJD@?42I^_]bg_PDEGE?;989<@GIGFFDCCDBCED>;9435768@IJGGHEA@ACEILLJC?AJQOMLOPJHIKOSQKHC;9BHFC@=>@?:8<;9<>?AD<37?CGLIB@@<;>A@>;9:>HJB8.-./6999;==@JNFBJNF<<>CHFA@@>;;BMOIB??ADDDCAFJ@3-,-8OZTF889<KMA><6589<HPG:41268:9547;:9<@AA?=?@>>=;;<;;;>?@AAA>;875.,10-169CGFIMQPLE94:;DLJJOKD=26ShfcdedbefM.*//0222333684455;><626BFBA@;0(+,.3643369=;7568@JONLKJHGECB>=<=:6<A802120.,4:;?A><<>:326<A=50032.3>9.,.01356640.-,--.,-./2221-.2/.+*,.//0/.-./243432/+***+,.-02/..3<@=<<;;;<>;647AC@ECBB:31:CFEAAC@>FCBMQQOQVQI@==>CE>EN;=7//01368<BC>82374'.AMQRRD0%&****+/5=FC=HQR_ZKbvsQ6620>HDIMD=:>B?:8-+303BFHLKU^UG9.4BC;;EMK>,',./,)(((*,,,,++-3663.+'&-68779<=;=>>>=;957<=<>@A=SSSSTWYZ\\\\\\ZYVRQRQQQOOOONOPQQRRPONMMMMMMMMLMMLLKKKKKLLMOOONNNNMLKLMLKJIHHIHHGHHHIIHGHHFDFIKLKJJJIKKKLMNPRSRRSSSTTVWXZ[\\]^^abbbb_ZTRRRQOMKJJMORXYUTVWZ_chotsotq]JEHHGGFHIHIJJJJJIIIIIJJKQVZ`babcdefhhijmmlkjhfaZQMOLNLKMORRSUVVWXYYZVNJLQQRV[]]XTQTWUNJFFQ^ZSU]bdgge`WS\\_RQ[[]acedegggd^bipomkid^[erigypelokjllmq|uhdYZZZanz||f[\\dnobYVV]b_Z[YXYVVXVT`w}qjjg_`_bkttssttwg_kgdjuyp{tuvspnmlllihi|}w|{omnnqzvrkgjjknnny{yvkjcZbecdiu|TJRW[ZYYXXTNNXcgemmXUTIJUTTNGFHGEHKMKIJSPNOWbb[`ZJDGHIWLHNPKHHGGEBEjzaQNQVRUPDMTXbeh[NKLIJLPNLUwlLEEDBCVl`b[LGEEDEEGGFEGLLHHMRVTQOLJHGFFFGHHHHGGFFGHOKKLLMOQUJBEHOPJFGHKJGEEFGGGHGGHHIJKKLNPQRRPPRSTTTTTTUVVXXYZ\\^`abbaQIILNPMMDELiMMJUfkypb^ipVHHFOSHCEFGIIJLJHFHJLPPHEJSY\\\\TQQLU^]XKKTVZOBBBCBGLI@A@NQLMQOQSTVZSQ\\agplYRakc[X\\hj\\RTWdcKARehimtsssdPJNPQOIEHIHGHGGGDCMXYYXSRNOQU\\[RMKLNKGJXgbOEGIJKLLKMOPONMLKKJKLLMNOPPOMKJNOPOOOONNMOQTalnwt{zy{vubc|wlcholghaYTTVWXYWWURRSTVVVWXWXWRLQXYSPONT[YWVVWVUSQRTUUWXYXYYXWVWXTSQOPQQRRSUUVWX[ZVTW\\[ZYYUSUXZYYYUSTSRPOPVXXZZYXWXYZegaYclkhf[WRMNKEDM\\floolfXJ>;:<>AITWPC::BRexhD><?DEGMNHD?C_xpH?IKLIB=?>HW^XOKNXZWafqPWoooqbUND:DbsshdmuyrLSjh_K96DRRRQLHGFFFGDHlsXhSNNNLJGGD=9:<=???>>=;878;;:89<<85;@=9:;=<@KQNH@528;:;EQTRSUUUOHGEGKF>@CA;86@IG?>?@@@?@A@?;48K_gffbTPURIC>:779;>@BEGFECBBABB=97669956=FIHJHA98>AEKPH=;99ANPNNPQHDEGIQOKKJA>CFDC?:9<=85;<9<?@AC<02:=AHHA?@><@CB@<87:BD?8/./39;>@CJMNRTMBHTPC:77;?@@A?=<8?GECDEDDCDDCFI=/-07F`bNB:659DIA=;54568CJD>8346579889;;:=ACCBAACCA==>@?<:=>ABAA@=863--/0.5?ADHJMRSLD;6478AG@DLD=;23I``YZ]_\\^aM-).-/./12347967758<<=;58=AC?5,),.04776558;833649ENMNMLIGEDB><<<:78840...-04<=9=@;38=;4369<:2-.32-1:71/14333441--135555345/+,.-/321/-,,/0100/002310365-+--,-0.252025<><>AB?<;<;5/8D>=C@@>912669636:7;?BIPPOMMV[UMA<?BEBN_E2.*)-0247=B?88:84017BKS[`M0%&).,%&5CEBBFGJJQa^ZYM6..-4DGBHK:09>723/)&&)5>895<FIG:/3Mc^QMIHKI5+---,*('*.13200/1552--+&+694479:;;===;;<:67=@?BGD>RRRRSUX[]]\\ZYWTRRROPPPPPOOPRQRSQNMMMMMMMMLLMMMMLLKKKLLMOPPOOOONMLLLKKKJIIIIHHHHHIHGFHHEBCHJJJKJIHJKJKMNQRSTTTRQSSUWY[]^^__bccdghaWSSRRPNPNMNOQRRQQQSW]akqspjhon_JFIGEEHIHIIIJIIJJIJMNRWY[]__acdfgijlmlmmmlmllkf\\WRMMLIKPTSUVVVVWXZ\\_YNCLNPUZ]__YQPTXUQJBFU^XPT\\^bgki_\\fdSPUW[^`abeiihjjecbcggfc_]`llgkjaesupoqrop{k\\TV[\\Y]cdpzcZ]fwxp`T]`_][ZYZZXWVTb~thgfedcelvxuwtq|qjpz{tvrttrolllllggzws{vtqms}xpmppigrxxyo[X]_\\afgehr}SHPV^[VXXWRNUckllniYWXPPXVUOHEFGFGIKJHKPPOOTVXdq\\GDJGFCFLMMLKIGGDAxIHIS[QoӭMO[TTejf]RLMMLMOJJJJWUJEEDDB@KGNTPGDDDDDEFGDHYbUNMTXUQONKIHGFFGHHHHGGFGGHMKKKMNPWKDGEHPUPIGGJJGEEFGGGHGGHHIKLLMOPQRRRRTTUUUTTUVVWXXZ[]^`bcd`MHJNRSRONFEG`dKOSSU_wt__sZAGHILLEDEGIJJIJIHHHJNQQLHKS[YVOPTUY^XWSQORVH=BB@BLROGEGJMMMPPRTRS\\`_bktwhLFYeWNPTbmdWW_g\\ABZgfgjnlli\\OKORQMHDEGHHJIHFCDPXXVURPOOQQOLIHHNRKGGMaunTFEFGHKMNOPOONLKKKLMMNNOPQPNMNOOPOPOONMLMNSZcjxy}|wadrym`ivoehf[VSTVXZZWUSQSTSVXYXXXUQPPWZVPQPRZZVVVVWVUSSUUUWWXYXYXWWVVURRPNOPQRSUVVWWX[YWVW\\ZZZXTQTWZXYXVSSSSQOQUVWYZYYYXZ\\dlaax{nkrf_YSLHEDCEM_jie`UI=;:<ELU_eZG:FPT^g[@;=@GIGLNHC?8Fk}h@;EFC@<;<@FONKQ]\\Y^bge\\O]kgf]NEEMH@VoiY_ipx}vYh~jL6=PSSPMJGHIJJILYo[<\\QPOOKEEGG@;<>@CCCABA=879><978:<:6;?<9<@AIRXUKA910587:CKOPRUVSOLNMJKH>AFB:6;AKE<;=<;<>@A?>>50=\\le^b^TOPJD@;;=;:::<AJIDCBBA?=<:9;AC;43:DHILH=35<@FNN?4549HXUOOQQHABDGJMLLMIEDCCB>97;;53:=:<@ABCE>45;?BA??@?@BCB?<748=?>8246:??FNOSVVVWSGCMTPHF:7:>@A@>FA:<>DJJHFEGFCE?2.09BDS]LA<526CHA=;53434;B@;4367349;<;;:;;;?CCDDEFC<<=@><:<=@BBBA>=;73//15<FLORPMQPE;98555;=59A=;:30>SSIMUZXVWE-*,---1588:::=??>>=<@B<548=6-++-/268:9645;834646ALPONMKGDCC?<<><8510/+,.19@834:A:/19;95123433231..34455665331/+-68788840/-**,,/3231.,-/122222122/-4;9/-/0.-2/04326:==<?ABA@>;90.678@A>@8./462,-2466:?COPMHGFM\\]ZNAABA<?S\\?6%/<8,37<90.07989AILNSZ]J2-27>;..=EE>EF5AD>DOVC40/.,1>A?A@4.:@;<B;0,073/.-/:79<71<IW\\XKEAEE:4-*,,+*,04787421121,'(*(+672377898:9745;<:;@CCFKJ@TTTSSTVVYYXYZXWVSRONNOPONOPPOPQOMMMMMMMMNMMMNMMMLLKKLLMOPPPPOONMLKKKKKJIIIIHGHIHHHGFEGHC?AEFGIIJJJJIKMQQPSSRQRQQRTVY[]_```bedegjie]UQPOQSSRSSRQPPQTWVV`mmihfehqp]ICCHKJHIIIJJJIJJILQRTWXVWX\\bfgggiklmlmmlmmnnnjd^VSPLILRUTUVVUVWXY[\\]UPJMMQW\\_a\\XOPUXVQIBGW`VMQX[_giffjf\\WRSY\\[\\_cfggjlfceeffec_\\\\fkfdb_`t|tvvrmmmyym`X\\_]_\\_cbfnh`[\\``^Xfhj[^]]ZZXZ\\YXWUbthgijighpwxwwsp|uosxwi~pqvuromlllnffzrpu|vpt}{qovwnknwwyoRO[`^agghlv}TFMOSUTUVXTQXhqloucUVWVVVURNIEFFGHIJKKQZPMOQNTr}^HLHFDDEILKJIHGH@LòL;EHU[WLP`UR\\`[WQMKIHINMNMLDCECBCDDECBDLMFCCDDDEFFDIXigUMSXWSQMLKHFEEFGGGGGGFGGGJJJJLOPPJEFGKQYYOEGIKGDEFFFGGGGHHIJKLNPQPQRRTTTVVTSSTVVWYZ[]_`bbdd[IFILRTURJGDIQPKOMHKO|q_fiLDFGKNKCDEGIJJIIJJHHKNQULFKTXWRQRV\\^[UU[TEMPD=BE@BNTOJHJLLMNQPRUST\\bbdmtpdQHOUOLMOTVWUVbgO?Maeffjkd[WPOLORQMGCDFHIKIGEDEPWUSSROOOPQLHGGIRZRLMGI`ocPJIIIJMOQQPPNMLLKMNNQRQQQRRRPOOOOONNNMLLNRV[dȿzbitwrgct|lcf_VTSSUZ\\[WURRSTTUXXVWVRNOTYXSOQSUWVTUUUUUTSSVUUWWXWWXVVVVUSQQOMNOQSUUWXWXZ\\YWVWZZYZVQPTWYXXWVSSSSQOQUTUXZXYYYZ\\bkcs~omokd]WLDCDC@F\\ed`\\SG=:9=IX]bhX>H[[TMID><?AIIFKKEA?=;b{d;:B@?<9:;=CEZmv~x`aknbZS^eVKCMY[Y][^ldW\\gpx{{sityP<JQONLKJJKLLJKLD_N8MQTYWKBBFFA<<>ACCBABB>:8:>;9899=;8;?=9=ABLUUSH=9;84569AHLMQVTOKKOPLJE?AFE?9=GG?;<=<:;>BB???77LdnhbegXFAFNSVYYL@>@;9EIBBCC@=;::9;CF;217@FIKH=349>EJE90338JUSQPRRKBADDEIKJLKGDDCC@:9;<75<=8<@BBCIL>8<?=;<=>@BEFC?:647<@>::AGFGHIKLOMLNQNF@@CHRUKA?@?B@>HNB9=EOSPMNOKEB4*.1:D;=IH?=526@C>;8421038=>81167349;;:::986:BDCA??=;:98788:<?BAAA@@<:85577;CLU\\TEGH=63244484-18::930:CGIJLVZXT=++--.2:ACA@=>DFEDDA=<?@70482+++.0268;;96;?;77877?ISRNMKHECCA=<?>960-0+)5?C?5*06>;/.8=9311367775/,+.49:;863122/+,7878872,)+**,+-01/-+-.0122212111.-4:5..10.,2/.3435:=<<?>::=AEB365,2;=>;2/.3520025559=DRPD@FHLZa_XLCB@50<\\VF7EC61>EC6046:;::>EHJGJ[X@6<AEECDC><9<7(@B/09LE7;=:3+-35426<CGINROA36@>;;.1<>AA<;:96:AC@=;;;70,-,,,./132221100-)#$*++/0-1777720/.+.8ABEFFDDHJ?STSSSSTTTTUVVWWVSQONMMNONNONMMNMMMMMMMMNNNMNNNMMLKKKLMNQSRQPONMMLKKLKJJJIJIHGIIHHHHGFEGD@BHJGFFGIKJIKOSPNONMOQPPPSVWYY\\_``behhggge]UQOPQRRTXWUSTSUVXXY^ba``ejmqspeVKGFFGIIIIJIIIJJMRRQQRQOR\\bfiigijklllllllmnoljg_\\XOJPVVQTWWVWYXYYWYZ]YPKJSX\\]_aZQPVXVSLDIZ_TJLQT[cgghjf]WXZZZZ]]`befgedlmjihfd`aeeabgdZlvjqtqolaioh_`dfdbb``___]^]^`^\\_qg[YY[[ZXWX]YXYW`{tjkprnimyzyxurpou~x}fikpqnatyho|ztpmlljoheypmps{~yrv~wrz}zx|z{qYPRZaacdelxzSILKLMQUVWWY^ipeeo]RSUVWVQMLIFFGGHJNPR]gMLMPO^aO\\TICDEHHFDEFGG=no9IGIUXn[VLPTQOQNKJIIGGGJLMLKHAABBCDDEDDEGHECDDDEFFFGJS\\_UKQZYTRONLIGEEFFFFGFGFGGGIIHHKNMJGEFIMR[_TGFIMIDDFFFGGGGHHIJKMOPQRSSTUVVVVUTTUVVWY[]^aabcebRGGHIMUYWJFGCGLLNOKHO{n_fYFGEGKOHBDFHJLLKKKJHJKNIPLHOTUXY`a][[WPU]]WVOC>ADCDLROLJNQNKRTRRTTUZ_bdkpkf_UPQQTSPMGJNP^`F?VfffhmoaQONOLMPOKECDGIJKKJIGGOUTTUSQPQRRUTTRPS]_\\XKAHUZVTRQMKKQRRQQPOONLMMNQTUVTSRRPPONNONNNMMMNQST\\ptsʺ~ksoz|qrpjmwqd`_ZVTSSUX[ZWURRTUUUVWUVUQNNT\\YRQSTTTWXWVTSRSSUUVVVWWUTWVUTTTRQPOMOPRSUVXYZ[[ZWWXXYYZXSNQVXYXXXVTTSSQOPSSUWXXXYYZ[_dg}wokjiga]L?AD<:Kc_^[WOF?<9@MXX]^PJVSIDCA>?@@BJGDIF<@CDAZzd;>@>@>;:93Celfje\\YW]XJAG_ibcmoghh`YfrutqmnphnyPAEGHIJLMNNKJEJP^uBF_cejiWDCDEA=<>@AA?>@@?=>==;;:::==>?BA=>?@GKMMA8;EA646:>EFGLSOECFIPNF?@ADLM@<><=?A@=<=BEA>@?9C]jotsfaZNBATiklreMCLK=<A@@DE?;:9757=?8435:BEFE;658?B=630226>BLSTSRMC@BBBEHIJIHGGCAA><==:9=<8;@AABEGA=>?=;:9:<@EHGB<768<>>>AJRKEKC9<><::<<963/5IZWMIEAAA?DNKAAHSYWWXTMG@1)037>758<<?;98<9535200047;=83156447999997648<=;731157300247:@BA@@@?=<;::7118ERTC47:50//444533379885457EPHEQXYR8*--.2:FIHEA?AFGFEEB>;<><8342-+,/1358;><9@DA=9:;:=EOROMKGEDB@?>>>;83031.<HB:3-02;>1.<A705789::972/05:=@@<500342,-2466651+())**+-0/)')0100/////./.-.56,+,,--+.-.561/5:;<?8/+/55@@?511+8<6/-03654337569=CRPBCJPXY_b]SHE?2./BL?XF*.FPTOEABBDB?;=DEC73O_H6:>>?CF@5121+%=G/369?DEHJ?-'*./1;JNJHMRRH77GJOO7+2105?HF?316;971,0453.,++**)***,..-,+(%',.,*)*16872((((*,4>CFHFCFID9UUUUTSSSSSTTSUWVSQPPPOOONNNMLLMMMMMMLNNNNNNMMNMLLKKKLNPSVUSQPMMNOLMLKKJJJJIHHIHHHHHHGFEEIPUVSNIDDGJKJMNMLLKKMONNNQUURQV\\^]_cc^[YWTQOPONOOOQSTRRRSUVVWYZXVU]gkklorroj^QLIGGHIIIIIKMQSSSQMLNSZ`dfghiijkllllllnpppple`]VQTUQOSYXWXYYXXXY[^`_UIJSYZ]cbYOPWZXWOEM]`SIJOQV^fhkkebcc`[ZZZ\\_bccefjlkkkiiijgb^`fh_iufiqqvlW\\jidgjjhgea]\\]^Z[`djjju}l`ZYYZYWUWZZY[YXputxvqmkr|~{ztqplejx{oedihgry|thmvqmllikjd}vkloklnlkkq}v||zwmdfd^SMV_`_cjuySLNMQSRUWXY`hojZZg^QRSUYUNJJIHFGHIKQVWdhLKKFGdUFZ^KADEFEB=?DGEAGIVRTVVDJWJJSOFGFDEFHGGFGJLKIFDBBBBCCDEFFFEDCDDDFGFFEFLPOJEM[\\WTRPNJGEFFFEFFFGGGHGHHIIMROFCEFKRV]cWFCKTLCDFFFGGGGHHIJKMOQRTVVVWXXXWVVUVVVXZ]`addcdg_JDGFEFLZ[IFJHIMNMNJN`jl`aNDFEHKKGBEIKLNNMMKJIJKLJKMMSUMQYbc_XTQMV^ba]WG?BDEGJKLLNRURV^^URPMPY]^dkpnke]YXY\\_[NIOMMVWEH_micjtudMMPOMLNMGBBDGJKLMLLJJNSUXXTRRSSSSTXZYZ`eeYLFFJNRTTVRLJRTSSRRQRPMMMNQUYZXTONNNNMNOOOONNNNPQQQVW^ʾx|~sxwi}qpvqowug^][YWVRSTVXYWURSUVVUUUTTSQMPZ`XPQTRQVZZXVUTSTTVVVVVUUSSTTSRRRPPONMOQTTVXZ[^_^YVXZYXYZVPOSXYYXXXWVUTTRPPQQTUWXXYZZZ^_p{gcfhgc[XL@@D<9IVLLNOJDB>9DRSU`\\PMG=<ELNKGECCLFBD@<?EGIPrh?BEFC?<:6Dq|qhbZWXTPWWTW_bmtldfcUTdnebccgf`fulC>ADFIMPSRJ>@U^XdD;Ukonkh`QDADA?=?@@?<<>?@AB@===<<;=@DELQL?8>A@CE;17ACAA@;;?<<CEDB@@BGG?<ABBKPE::<?DDB>=?EG@=A?9BW]pxbXURJ>JjutvwcQYaQB<<@ED><;95247777523<@C@?;89?>4/000144:JVXUOGA?@>=AFHGHJLKD@BB@?>=<=<7;AAAABA=>BBBA?<9:=AEGHE>::<=<AIQRE@B<<;56720121/-.8CEGKJB?AA>:>BDLTWWXWQKGD7-19>?93158AB>;71./00246678;7455554686779899986433//220.-/026<?>?>?@@@=850+*/<GB1*/30.1444347878656798<HJ?>KSSP<././5AMG@><<?@?@A@@A?=?BA=971,.02558<===ACA==@B@?BHNQNKHFDB@???>=:86894:A<654107;21?A56<>:889:;759>ABCC=5.04653.+064430,+**)*-./.-./130/--,--,,++05.(()*+,-+,.77.+38:=;.(((*+7<:7553;<8422599865557<CHSQGMQWaYZa]VPK>0.+1=DZ4*DRGIMPMHIJJFBEIKLF79B=6783//21..12.%;Q;5;;BNHBHD3)/3;=APSKEEJLG@AJIJN>.*%*<JKIC43:82.,,-042/,++))***++--,++,-.011.*)/352+'+././24;BDDCGH;.WWUUUSSSSSSTTUUUSQRQPPPONNNLLLMMMMMLMNNNOONNNNMMMLLLMPSVXWTQOMLNPPNMKKKJJIIIHGGHHHIIIJJMTZ\\]]ZVLCCHLKJJIJKJJKMMMNOQQNKMPQQSTRMKJIIIKNMLMMLLLLLKMOQSSTUY[VSZab`dlopu|zrh]RKIJIIIJLPRUVVSNMOQV\\]]dikmjiikllklnqrrrsrkb[RRQKIRXTTWYZZ[\\\\]]^bdZMLRUW]c`UPSXYYYRLQ[]TMNPPT_fhiihhgc`]ZWX[]`dggedehjkkmmjgfdekg_ighrrxpXU_ccfhknlgb_]\\\\agloplgwrid^YYXXWTSUWX[ZRcqfhimw||ypkmonvtgqilonpqosuqkfjz~qkkiggffafmogdfmmkheddgu~ted`TU[a]QOW[\\blutRNROTcr`XY[`ii[RYvbRTSWTLIJHGFGGHOVZRahLJKFAWJAGRJACFFDABDDCCMnXNW\\^][ZDSIBHLHCCCBCEGGEDDFGGFFEDDDDDCDDEEEDBBCEDFGGFDDHIIFDKZ_ZVUTQLJGGGFEFFGGGGHHHLOOQUQGCEHOWY_aPEJPTLDDEFFFFFGGHIJLNPRTVXYXXXXXWVUVVWWY[\\adddeegYFDDEDAEQYICKKNSUNHITYSlif^JFGFGHHEBFKMOOOOOLLKLLJLKJOXZSQRSSTVUQOVZ^ZW_SDDHJHFEILOTY[aebZRLGLX\\[dmsrldb_Z[`h`KHLKJJJDK\\gb\\k~~hJFJHGHNLECDEGIJMNMLKJT\\a`ZSSTTTPHFKS]lm_WNJJIKRTQQQPMILONNPSUVTNLMNQV[\\YRNLLLLMNNNNOOOOOPPPQPIVĭzqteok|xw{p_[[ZYVSSSTUVWUUTUVVVUTTTRSOOZc]SQUTQTZ[ZXVUSTUVVVVVWUUTTTSRQPPPPOMMOQTUWYZ[_^\\VWZ[YY[YTPSYZYZXXXWXUTRRPPQRSVWWYYYY[]]u{mTXdc_WUUNDA@>;>ABCILJJG=8ESW[[SH?=EJJOUSLGCCMD;;<AABBADjiA?@B<:<:6Xtpnha[QNbxi[dpspjdidYci[QW]abbhmov}{M@BDDEGMSSG9DZ_Xqe>2=^noldcdYE?CA><=>AEA;<?BCBA=<>?=;:>GPWYL:3<?<:9635=CHLJEFE94<BCDEDFKE;?B;8=B@??ABBA?=>AGG@>C?68=Fpw`TNMG:?Yoz~{mdd_WJ>>DB?=<:635557:8215:?@BBAAE?41001212=OWWPD<::;::@FJIJKMKC>?ACB>9556:=?@BA@@?BEGGFGDA??ACDINF85BE6@UYOCCADPJ:9:6334530.036>FHC>;=<42<CHMQQQOKEBF=029@B<4026BDB?6--/039:;:8653124533599878<@=:611562/11/--/125;>>=>@@A@=50.,-06:71/10,.34223698886557=BFE<27INFGC83005@D=::8998748=BDBBBCBA@<71124468:::=AA<<CFAACCDHNMKHGDA@@??>>=;;::88986664/4614@C=<<;616:::76;@CCAA>82367685-,6543110.**..*)/69600.,)*)))**)*.2-()**,03/3<>3*+24693((-/01:@@A=7?@=;:998<;89;87;ELD;@HVWXe]W^]YVQ@.,,1H`W<G\\J48ENOIGLMJFGGINUO<004:;63,(*04554,:P@:EGHPG69@4)0>FBFSOHEABGGFFB7:A7*'(1CE<7:?;4/,&%3@8+,-./00//.,*****)*.2456650,/1/+)*.2532227?@<:;8-%VVUUUTTSTSRSSSUVRRSQPPPONNNMLLMLMMLLNONOPONOPNNNNNNNPRTVZ[YTOMKLNONLKKKJKJJJIIIHGHKKLNRUXWY^___[PHGIJKJHJJJJIIJKMMNNMJIHFGHHGDEGGGGJLLLLLJIJIHHJKMNPSTX[YYXXWZ_hqvvtqqtoaRLLKKKNNNNQRRRQPPNPTU[ehiid__cgiiknqsuwvrnh^TPNJINQNMSY\\_`____^_de_XRPPU]a^XPQVY\\]XPOSTQOQRSV\\`acefea`ghYORX^^ckf^_dhjklllkmlknjbfgmyzyq\\TUX\\_ckqohb`__elopmnoo{kh`ZUWWXXWWWX[\\YS\\zvf^`hnvz}xnhjptzwgaglmswumfkljhcctzkgigeghff`_a^^grtpnnlicfxo[U]\\SPU[ZSTZ^bkvnPNRPPZyZXZYVUTT_dPRURKGHFEFFGHOVSS~nGMNKKU@BDDCEFHFCQQDADKNNWX[bgi]UMJHCAFEDCBBBCDFEDBABCDDDDDCDEDBCDEDDCBBBEFGGGFEFFFGHEIY`]YWVROMKIHGFEEFFGGGFHNSSRUSIDFJQWZ[UKOTQLIGEEFFFFFFHIJKLNPRTVXYYYZYXWWWVWWWY[]aeeeffcSFHHGFEHKW\\IDILPQMKNNMJ[jfSHFGHHFEDCGLNPQQPNNMLLKJHLKR[]ZXUQLLQTSSUXSKN[cXILSOFDIMPR[cdea]XSRT[^]fnvvj]abURan^FEILLIGDNX[[Zi}gJFGGILQQMHFFGIJLMMNNP[fiaVRSTTTNFCEIZwv[KHIIFGR]XNKIJJKNNKLOSUSNNOOPV[\\VONMLMMMOPOOOOPPPQRSSTOdĳvuvqqj{}{ztf\\[ZYWTRSVVWVUUUVVUTTTRTROONZebURWZVUX\\[ZXVUTTUWWWWWWWWWVVUTSRPPPONNQSVWZZYZ\\[XVZ][X[\\WQSY[ZYXXXXXXVRPPPQQRTWYY[[[[[\\api]SW]YURTQEAA???==@CJNNOH;8>LZ^PEGNSPNHKRQMKECHA76:AEB>:8_hB;;:98;:7O~rqsld]T[t{v|rvsnb^tr[M[]``\\gvutywcG??@?@@FLQRRQ]egdvwZJ9?dnlgSEB?:547?DGID?AAAA@=:;<<95:JZZN>558>==;;:;AIKJGLPH94<HLKKKU_UFGC99;;=DDA@@>=<?CGGDEGB71-;pu`QIHD=@H\\|ynki_NA>?@>=;964557875566;BGFCBIC51001202ASULC<787679>FKLLKLJC>=?CF?40/2:>>?@?=<@DFHHHIJHFDEFEIMI?BPH7LbXMLLJOUM@;:7458;713<CBBDCAB>9;?74?DFKLOSM?9>;2/17=;988:ACC@6,-045765543/00/24237<<977:><83.17851120./7>?AHJD??@AB@;642246899764-+043037998766666=GJB8/3FH:=D>9656;;<;:9866504BIGFFEDDCCA>7224566899?FE>?EA7;EEDGJKJIFCA@@@?>>><<=<989853560/326@F?5640,7A:4888<B@;@C>87776883,2323123.)*-*&'/7850/,*(((((())),0-('*+.5769=:0**,1230,.15956>DC=8:<987678;==@CA>@DC;25BUYYdaY][WWR@.110Jlh[Z`<:>EHHIJQTJCBAADMNC;77<DJC5--122478?NE>EFDME.*0.(.AH@ITJ<<??CFDA8++1+%,465306>B5-4<61;MH1').35542.,(')**(+/45677::9::2)(*,/453244662-*(&$UUUVUTTTTSSSSTUUTUTSSQPPONNNMKKLMMMLNOOQRPOPQPPPPOOOQRTWY\\\\XQLJJKLLKKLKKLLLKKKKJHIKMORTUVVZ^__`a]WQKJJIGHJHHHHIJKKLLKIIHFFGHGGGGGGHJKKKLLKJJJHHHHJLNRUVX[\\ZVWYZ`hjghd^\\[YRMLKKKLLKKLMOQSTOLMKO^b][YXXX[^bcdiiikoeXXXSQPMKJJHIKPX[^a``aaaaacfe^XTQQXaaUNQVZ[\\\\UQTSRRSSTVXXX\\bc_Zh}mSRZ\\W[ff[[ahmmijppnpqqokiho{{pgZUXSV[\\fkfdc`__cinplklqwkld`VWXYXY\\][]b_VT`pkaa_Zd{{}yrqsvwtusf\\cnptwzyhjqogeo}urphdddcehfdc_fx~umosphcft}rlbWW\\ZURU[YVY`beo{jNNQOMMpxXS[WIJSTVdΚUPRPLIFEFFGGIPS]LSPOKMlcCCCBCDEGFK[QBACCDKSUT]km[GEGFDCCBBBBBBCDFFDCBBCCCBAA@ABAAABDDECBBCCFGGHFEEEGIGDHTa_[YWTQOMLJIGEEEFFGFEGMSTUWRGBGMSWWQNPTOKJIGFEEFFEEFHJKKLNQSUVXZYYZYYYXXXXXY[]_bdefgg_IELMHFFJMUiWEHINNMNOOQLWm[EDILKGEDDEJNQRSSQONMLLJIHQVVYYVUUROKKKJOTWRJIN[aYTYZOHKMNNW`bb]ZYZ[[\\_`eoytbV]cVLVfZEDKRUTLHU^\\`\\aq~mOIJKLPRSROKGGJKKLOQTY`dc\\XWTSUTQOQRRZpp[UPIFFCHWYNGFILNOTUQJJNPMNPPPSWWTROMLNNNQQPPPPPPPQRSS\\Hõôstrlwexrppi\\Z[YXURRUXZYXVVUVWVTROPSRONVcdYRV\\[WWYZYYWUTTTUWWWWWWXXXXWVUTTRPPNPRTVXZ[[XXXWVW\\][Y\\\\VRUZZXYXWXXXXVRNNPQRTVWY[\\\\\\\\]^bdKPXZ]ZVSND?@BEEDBA@CJOPPG<67GUXQTfpkVJEGMMNVWNB;769?CC?95TcC<;::::;;BKVo}~|qs~yroiq~}x{`GFM\\bc`]]a^dqyueO@=><;;;<@CHUcbcdcYXW^U:BjzcXMHHFB?>AHJIMQKE?=AA=:87768BQYWG:?B:=KJIE@BIPLC@EE@:6<HLMPTanncQ?:>@>?AA=;?CBAADEFHJIC;5.<p|rcVJGIGKL]~tf]]^L:;?=<;;98877:;:;;79BFFA=BA5/110102ERH<6897567;@GMNNLKIC>;;AG>30/38;=>?><;?CDGHGGHHGHHHHJMLNZ`LEZXHMVSORSLC>=955<?98BPXWQHACIPLDLJ78@AFJOWO>6684/08??@@@@ACB?6--0210////0/1344324:;75443268549<;9413235?JPRWZMA@ACEB:788879@A=961,,03336;;9856:==:>HH?;64?A8:@><;88;>AA?>;99:9>GJJHFFFFEDDC;2/1488799>EC?==715CIBBHJIHGECCAA?>>><;=>:8:831350.247?@5133.*7F=37943::5<C@=9655674.0212122-)(()(*././0,*)(((((((''*+*((*+/5642/.,++-/--/2344552269;=;::64246;BHGBAC?;8779=KTZ`TKTMLVK:285+9`k]^fGFFILKP]c[OJGD@>@?;@DDBIVSE;85..6>CBMK><@EF</'%%%/CF?MRA5656><50,(*-.4=;2+*,26*#3EPURJKM?0(*-0/01//024544468668;CJJHF>0(+-/220-.011.,-121UVVVUSSTTUUUUVVTUXWWURQRQONNLKKMMMNMNOPRRQPQQQPPPOONPRTUVWZYQJJJJKKJJKLLLLMMLJKLLJIJNQQQTYZYZ^cb`a^XRKHGGGGGHIIIIJKKIIIIIIJKKIHGGGGJKKKKLLKJJJHHHJKKOQQTZ\\[\\^]\\]`^]_\\VOHIMMKJJJIJJLLLNQTUPMMJNWXSQPRTUUX\\\\[__ZWVRIFGHIKKKLKHHINRVY_`abbbdcccefe`WRQX^ZRNQTTX]^YXYUSSSTVUTUW\\__W^|jfe\\UUZ_^Y\\cgddfknlmnoomlkkkfa^WT\\XUXW^`\\bd`^]\\eoupgdgijmeh`RTYYW[__djh]UP[\\V]da^t~zz}xsh[Zfppuwr|vektppoy~xrjdca_cjmje_g}|pnookheciprspjeb\\WY\\ZVUXZYZ_bdkziOTXSNNWbXVXTIFOLITW`NOMNJFGGIHHIOgXWTMSLLTJDBBEFEHKMPICCCBCDLOPV]bYMFFFGEBBB@AACCDEDDCAABCCDDDCBCBBBBCEECBCCDEGHIGEEHJLQNGQbb][YWSQONLJIFEFFGGGFGKQTUXODDJQYXPNQQJHGHIIHEFEEEEFHIKLMOQSUWYZYZZZZYXXWXXZ]^acdefhhZCCNOLNLKPOQQFEHIMPPQRSNWkQ@BOYRHECDFKPSTTRRRPOMKIIHS[WRRPONNPOOPNPSVPIIFET`]X[UKLNMKMV\\[TORWYXW]belup\\QV_ZOMY[MEJRUTLKU[Xa[We}nMIIJJLOPQQPKFHJJKMRUY]]ZX[YUTTSSUY]^\\ad^^WKGIGEIMLKKLMNNSYZTIGLMMOPPPOOQTSQPPOOPPPPQQQQQRRSSTLɶƶoipspxj{tigjcZZ[ZVSRSX]^ZWUVVVWVROLORQNS^_]WW[[YWXYYYWUTTTTUWWWWWWXXXXWVUTTSQPNPRUXXZ[[XVVTVY\\[YY\\\\TRWZZXYXXWXXVTPNNOQSUWY[[\\\\\\]]^a]@CSY_]YRGCEGHIHECA?CINNSRE<BOQJGYvwzrYLIINZ^XK@87:>?@ACB=HS@>;::::;>><:Hev~~suz~qH471?Wu]Y]dgehxnJ7;@@=;;;;<<>FU`__VLXYZW>N}yQGKJLVYYYYYWSQOKE><CE>96468FSSPSKCMSFEOTSOJORLD?>><>><>HSUW^elwy_;6<>@@=:89>DIIGCFGIJID>:3=lxpjeZQKPX[o~{{tjeUE@DOOB<<<==<;==85>C@??<;>AB@?=;93.04623DMB76:95788>FLOPQMHDB>;:>E>102358;>@?==@ABFHFEEGHKKJIHNUX]YKIL?>NVTQUYUG=<;78>?8>OVSWZPIQVZe^[^G7=?BDGOLB;4875=EJGC@??BB@=5.//.-,.4643/17:733596/2640.5=>=@@B@91.247<KTUX\\N>?@ACC@<:877;AA:40-.0016:865777=CEDDED>=CB8=?9;>;;=<<@BEECA?=>?BFHKLIFGHHGFEDA9336;;878;;9876653>J>6CMMKJHFEAA???>=;>@<:;932241125:<4/254.(2CB:882.11.2798643247512210/00.*()+,,-,,,+'()*)(()**,.0.)((+.14310-**.230,,.2433016529A?;=>96447>FJF<;CA;757:;AITS;1=>=G>444-,0UdWcifJCHXY\\oe^`]YQE><<>CIJIMTRPOH@98AHCBMNF70;;53.+&%0AB>LJ879//9951+*.6:<<51//+'(#*APW_d]MGG?0+**,.//26:;88998757@IPVPFGH=35862-.,,/10-,6><7SSSRSSSSTUUUVVVVVYYWTSRQPPNNLKLLMMNNNORRRQQPQRQPOOOONPPPQQSTPIIJKKKKJJJKLLLKJIJLNKFGKORSVXVSW_dc`_ab]TLHGHIIHIIIIIIIHHIIIIJKKJIHGGGIKJJJKLKKLKJIHIHGJMMOU[^aaaccdea]]]VNJJLMNPRSTTSPMMNSUPNONNOPQPPRSSSUXXWYYXWXVPIEFEEHKLKJJIJJNW^`_bddegfeefffc_ZUUWUQOOQSUXY\\_[TSSUTQUWUY^cZTj|{kYWVWY[ZZ]^^_`chjhgikmkgd[[]]VRZ[VVZ\\\\\\acb_]_itwncbfgikiki\\SUYWX]iokicdXWXV[`gcdv}xvygY_hptxvkf{~iqzpppvpigfgfeehjhc_f}xoqpkkjdbgijg`]_[XY\\\\[XWYZ[`cflxyeRZd_TPPVZ[UNIHIDEQXO[\\RMLNMMMMLKJHW[R^TSVROIECDEHGHIIFDDDDDCDIMRQNSSNGEGHEBBB@@@ABCCDCA@CEBCDEFECEDDCBCFECBCDCDFHHHFHJKP^[JMbd]\\[YURPONKJGFEFFGGHFHPSV[OCIMTZTKMQJEGIIIIHGJLIGFFHIJLMOQSUWYY[\\\\\\\\[ZYXXXZ]]acdffhgXECLPONPPOLIIGDDEGLRTTRQQYLDET_UKDCDGMRUVUTTTRPMKKIJOUQMKKJJOTUW]`]ZWNIJE?DS\\YTPJIIIFDNWVOHLSUUVX_fjngVRRY]XOQ][MMOPPQMRUTZWPVpeKIHIIIJKMPROHFHJHJMPSWXVWXWVTRRSUWY^_[\\a^UMKLLHEHNQRPONONQY^TIJNMOPPNIJKPTTRQPONOOPPPQQRSSTSJl÷¾}qsrqo~{psgbfhc_^[YTSSWZ^]YVTUVXXTQNNQPMNX_[XZ\\[YXYZZZXVUUUUVVWWWXXXXXWXWVUTSRQNNPQUYZ[[ZXVTTVZZZWY^ZRSYZZYYXXWWYVQNNOPRSUWZ[[\\\\\\_^_ba@;HTXWVTRTVTQLIFCA?BGKNPXSOXYN=5Di|{e`QRbeQB@@?>@A=?BGOH>C@?;:::9;<;<6?h~p{{V979:6CjPV`fmfdo_?6@CA??=<:;;;<CPVZOEV^XXMd{xrMCIJPZcca_]^[WPE@@BGE=4237CPUOPWSJQZSPSVUQNWO<;DGDCBA@AM\\\\\\dhiqvoK52:@FC<7:;?JVLEFJIHHE?;:?erpllfWFL_gxvM<9<<7=IHB@@@@=:=?:5<FFCB>;<<?CD>>B@868833=EB@><97:;8<HPQPRPGC@<<::?;1.1578;>@?=>@?@EHEDEFHLMLF@MXQLHEFEBFPWRNWej]E864:CA;EVRFHONPZ``ijdbQ<:>?@BFGA<89;@LOMIB>:<AA@:1.0/..,2>>85017:406<=98@>728>BA<=CJLD2/6667DGIPNA;<965<HH@75689940..03339?:327:<?@==A@83<FF;?@;;<:;=>>@ABAAA@@@@BEGKOJGHIHGFEDEHD=;==:78;633447846D8.<KMG?CJGAA@????<>A><<834433349;8.0453/+5@A;774220,*,05430/47533210//10.-./0.....+)*,,+*)*,05895/++/1443474.-2652./0//4767:518A@;@@=;;<@FGFC><>>@=41688:C@.&05464230--2Pa\\fhkMABTVcv[Yhc]XJA>>HLJHJNNKNYWH<7=FDDJNPF1+38732/-18;>EC>:0-8?AD?6-)02.48;<3'$'-8?MZ^bdSA><81--....//1311223328GRXXH;@EB<;<81.0120+*(*3764PPPQQRRSSSSTUUVWXYYWUTTRPOOMLKKKLMMNOQRRQQQPQRQPOOONNMNMMMMNLIHHIJKJJJJLLLKJJKMNOPMHINTXWUVWY\\`cdbaac_UNIJKJIIIIHHHGGGHGGIJJJJJJIIHIJIHJLLLLLMLLKKIFGKLJNX^___`cge^_da]]WNKOSY[\\[[[UOLJNRPOOONNNOPQQRRRTVVWYXZ\\_^[WQNKIHHHHHIHIHKR\\[Z`efggggfeeghgea\\YWTQPPSUTSTWecTUWUSVXUU\\_WTcvzp_[[[[ZZ[\\_`_`aaegikhhlf\\YWZ^\\TRVWVV]`_\\[ceb_airpiggfjlmqpjbWSXXY]be]`_`\\TSVY[djb_kzzpjro]`hnromjcgru}thmlnlhffhkkkjjkfab{xywusrkgfia\\[[_[VY]^[XVYZ[`egmulZV^gg\\NMVYYLEILC>FQUVUWRKJKNQRSRONHiXL_][[[RFBCEHHJGDDCCCDEGGHLNQQLKKIFDGHFCBBA??ABCCDCCCDDBDDDDEEEDDCCCEDBBCDDCFHHHIIJJSejXM[c^\\ZZVTRQPNKHFFEFGHHFGMQUZMCIMRRNKLKGHIIIIGEGQVTPLJJJKKLNQUWWYZ\\]]\\\\][ZYZZZ\\^_befhieXKEILIDPVPNKJGDFHGHLX\\\\YSPLLMUYUOEADKSVXWWVVUSPNLKIJLKJHEFIKQVW_deffYMIID@@DNQKGEDDCCCJUTLINSNNUUT`kk\\SSQT^^SP^dVQNONLIOTRRUTTfhWMHHGGHILOQOLIKIGFFJQUURTUUTPNQVTSW_a]]a\\QMPNLLLOTYYVTTTPOTYYOKMMNNNMJJILQQQRQPONPQRRRSSSSTRHŪ³vorsppzrg`^a`_`_ZUSRTY]\\ZWUUUWYWTRPQQLJR^][Z[\\ZXZ]^\\ZWWUUVWXXYYYXXXXWYYXWVUURPOMNQVYZ[Z[XVTUX[[XU[_XRV[[ZXYXXXWWRMLOOPRTVXZZ[\\\\]_^`beK9?FJKJVfdbZUOKGB@?@AFMGKS[\\N@847SrqVQf`aypK;?=AGD?=@HNSK>?B?999899:::9:c|~~{@59:::CHJOZgmda_QC<:<??@?><;<<<@EIKGBNYUQR^a\\bzpMBIKLRZ[[YW[`de[L@8D>:868=MWWW[\\SFFMNONOMKQT@4@JIHHGFB:F\\]ZbgehqtV75<>DLM::CBDSXOHCCHJE=<>@Pflfcf_D<VhsnR@CMOIHIHHECA@><<>;8=DGEB>89;?CDCFHHD<8559?@ABAA><>=66AMQPQPME<9;:8632227::<>@@??>>?CFDDEEFLNH;7MO=<FGGKHAGXSFL\\mrW923;HIGNRLECACNY_``bcaT?9>>?@BDA>BDDJPOKFB?=<>A@9/././.07::63213313=HHDFJD@>FHFB<:BJMD5269:;=:=?:9>AB@@DGGGC<86430/0/058;>?=:9:;;94////.-8DB>@A@==;9997443469>A@?AEHNQLMKIGFEEEDKRKA>@>99;8655597224009B?806GHCC@?@@?>>??>=:87521039;4.474207DC=7455530-,-/341//2544321/.14444651/.//////.-,*)+-03357420235569961013443/.0/9@EEA?:<AA:EGB>?CGHFDA><819C;0132131++12112452223I^^llUEAAHWpw\\\\aSNOHD?>HJHFIIAGJ@JE0,/8?FMIELL?0.122100248=>>;/3BEADE;,'*&*8=AA4%$(2:6C[[Y_[I75752221/..-.243323336@LSNA:;<;;;:60--21*&&&)1425OOOPQQRRRRTUUWWWYYXXXWUTQNOMKJJJLMMNOQRQPPPOPPOOOOOONMMMLKLMLKIFEHJJJJKMLLKJKNRRSVVPJJPUTTWZ[]_dhigb`^[SLJKKJIIIHIIHGGGHIIJJJKJJJIHIIIIJJJKLMNPQROMMLLKIKQUWXXWZ]YQWbb`a`XONSYYXZ\\^\\WQMJKMNOOOONNOPQQRQRVWWXXZ\\]^^__\\YWTPPPOMKJIHKMNT_eeigbbeedghhjjie`]YURSVVROUY^[UXWWXYWUXZTW`feY[bb`^][ZZ\\]^abbablsqmg`VUZ\\YUPRTUXTXb_\\]cffdafkighecinqvsc[ZYXW\\^URQSWRUUTUWZah`UYhpljmpmm|sdbefiikommtztihhhhkmljghkllmmnkdau|{}xxvuok[VXY\\\\WZaa[UUXZ[^cgosaU\\dfidSMQOLHHOPHCHMOTVTRMKKLJLW^\\UI\\LZ^d`YPECBDGIHEBABCCDGKKKONNOKEDCDDFIHECB@>@AABBEKPPHACEDDEEEEEEDDCDB@DDCEDHGEHIHIHPamhVT`_\\ZYXWVTRPMIGFGGGGHGGPUWPEDHMPQPMKIGGHHGFFCHSWYXUSOKJJKNSVXYYZ\\]]^^]\\[ZZZ[]_`bfgijbXPHHHFGNQPMKIHGGGHHEO`e_[NKMOSSUQEAGPVZ[ZYXXWTOLKIIHHCBA@BIPSST^c[X][MDGEDD?@FJHGC@@CGINNGGNOGBMRHQbcTQTQQZ`YP\\k_POONCDMTRMTYX]e^ICFGGGIJKMLPQOKHFFHPTSPQTTRQU\\_YV[a]TZ`YMLONPY[]`cc`]\\ZURQRSPMNNMMLKMMMMNNOQRSRRRRSSSTTTRSQ_|ppopnvqh^]][[\\[XURSSW[\\YWVUVUWWUTRQPNMR[_^__^\\XVZ__]ZYYWVWWXY[[YWWWXY[[XWWVURONLMRX[Z[\\ZXUVW[][WX__WTX[[ZXXXXXVQMIMOOPRTVY[Z[\\\\]]]``gV8:;?AB]og_UQPLEA>??@EJF@FPJ:5676>JD:>VjiyN>;9;HF<<AJQPGBCC<97778799::9KXdusC5999>@BBCOab[[VOQMD==?AA@?>=<<>AA?B?CTXRY`cknsODJFBGUa^^^`^ftyv]=69;:::<IW\\[YRF;858BKNNSZH6AROIKOU[S?DY_\\cfbhtpN4=NI@NfQ6@IJNWRE@?AFE>=@@DYfbdsjC7L\\ckkfb\\V\\c]URNIIHCA@?>=<=>BECAA>8<?@ABEGGHD<54=GG=>ADGD@?>85:ENQPNLD;8;=:2,3=<:<<<?CBA@<<>ACCDFEDJMB05JG;=AA@DA6>UO;8>Nd\\=15@KNQLBEIGC@GTWSPV^]Q?9<<<;;>==FKJKJHECBB@?>??:4..0.-3952/240,-6@HLGGNMJIMPKIJD=<?A<6249=>8<E=6<<=ELPSPGFIE?<:720/-19=AA?A@?=;:84/-,./49=?@AACCEE<;80,,+,.09AA@BDKSRSTMGFFFFFBDPXLADH?::99987::40..15:6/+/CHDC@@A@>>>>?@@>>=:40-1581+35105DH><>71341//011011/-03478731179:;==90-/0/./1-****))++**.55202357:;930///474,,6:AEHHGIFC@A?FHD<;?EE?>A=83-9KB1/1/---.031/14687654@Wfl[B;@@DYnaS[SCABCE@@HEA@EA8;>6?F91/0@NMF:?EIB?HB7432100420229?@@><4+)*&+>ACF9(&).05Ja_X]eW>5543441/02335875234522;CDB@<989<<<4-36-%$'&)1778OOOPQRRSSSUWWYYYYYWXZZWSPNNMKKKKKKMNNOOOPONMMNNONOPPNMMLKLNOMLJHGGIIJKKKLLKJKNPRUWYXQHGKMOQU\\`dggfeb\\ZYSNKKKJHHHIIIHGHGHIIIJKKKLKJHJIIIHHHJKKLOQRRRSQMIHJLNPRRSSSQLN[ea\\`bZOLQUX\\_``_\\ULGGKOQQPONNPQQQQSUUVVWY[]]^`baadedcb`\\ZVTRPMLR]bcebYZ_`beghiknnliec^VPQURTSQ[\\YYXYYWWY\\WV_c\\clbca]]\\XXWWY[_c]Zcnqj`][_c^SNNPRSWR\\g]_bbcggadijkfbbgknulXSY\\ZW\\aYQTRXXXXUTVW^d^RXecalvue[jsqqkhotux{zzvl_ehgffhlmilmkmnklohdn{|qy{~~mZWWUTUW]b_XUUXYZ]`clo\\T`fdggZKFJOU\\ce[PIGHKKGIRWUSQT`kmbOeRUZmzbLFEBCEFEEEEDCCDGKKLMKIJIDAABCEIIECA@?@@@CFINRPIEEEDDDDDEEFEDCB@AFDCDFHIDFHHIGL\\gl]S^`\\ZYYYXVTROKIGGGGHGGEPa]OEGMRRQNKIHGFGFFEGGKPRUVWYYRQONPTVXY[[^_^^^]\\\\[[Z[]_abehmjWY^MFEHJMNLLLJIIIJLMII]feaNHLNPPPLDDLSWZ[[YYYYTNKJIIJIGEABINRPLKPRIBQ[OHKLIFA=AILLGAACFDGFHHIHC@GMJMTXPOSSVZ]]RYofPNNKGGMTSOPSROQQDCDFHHHGGGGKQPLHFGHKNQQNLPY_flib\\_d\\KMYULLKIRbhghiihgeaXQOOOPOOQRQNLPRQONMNPSTSSSTTTUTTSSTL»ȼwrpqq{z{r_Z\\^__\\XSQPQV]^ZWUVUTUUUUSRPNLQ\\^YZceb\\VW^`]\\[[[YXWWWY\\\\YXXXXYYYWTSRRPNNNOT[]\\\\\\YWWXY\\]ZZ\\a^UTX[ZXXXXXWSMLKMOOPRTVY[[[\\\\\\\\]__f`687<;Dgpb\\PLNJFB@??AGIF@>><96678754:>DYevg@;88:JH==ADECBEF?987777799::;DOav_dyO58:;=?BBAFRQKMQSZ^\\OCA@@??>=<;?CDCEEBShdlvxzwwdMIJD;@ZqgelgTZwlB;A=857:FJHE>8684;JNX__N6>Z`YY^^]fgTI\\geb^gqpcI<IYWJRohD=CLPTPEEA:>@@@AABO[`r|_ACMPVUKIV[ZbkYGHKHGGDA@?>==?ADDA<<=9=AA@@ABFHB84:IOE=?BHLHC@@<99?IRQKD@;8=@;2/6?@>=<=ADDB@=<=?@?BFFACH?16DA@A<;<@?8>GA4005FL>47CLNND9BKKLHEKI@?KVVH<9;;98996;HKJIB:8<ABAA@?@=2088007951142,)2BLMICJUSRQPMGKRNG?865303<=;5ATP>3.19ACKYYNCABDC?73225<CC@?@@@><;;812996:=>@CBA@?FKDB@95423338>?@>ANVVUNHGFFFFFC@GXZJGRK<::9;<<@B:20./132.*-?HFCBAA@@@?=<?@@@@=;830361,33//3:;7;C<214222100011.,.116<:448<<:>?=5.-120///,))+,)*))()175114689<;73/..069601>FEBDDJKMH@DIFA>;<?BA;;=92.9SbVB99846;93001469987657CSOC><>>?DH?@GC=@A=<>CHA:9;;<@@DNXWB4=RQAC803JZTG<88866884.-.-14575/,**+)+9@DI<,.+',7H^`[ckZD;64352/.386579754556.'.:@@?=;99@DE64=4&,1)$)1588NOOOQRRSSSUWYZ\\\\YXXWXYVRNNOMMOOMKMONNNMOPONLLMMMNOPONMNMMOQPOMLKIIIIJKKKKLKJKLMOSUUXXRJGIIJR\\`a_]YTUWXUPLJJJIIIIIIIIHHGHHIIIKLLLKJHIHGGGFHHHIIKLLNPQQNHFHJKMMPSTUWWTXbb_adcZPLQZ_^[\\bd\\SMIGINOQQPOONOQSTTSTVVXZ]]^_aabdfgghgggggfda^_dfb^ZTU[]\\_ghfiorqonopf\\UXkbUPPX\\[[ZYXY]`[Yenn|vZ\\^[[[YWTSVW[`\\VW^a]\\bhli_TNNOPTVYij^abaab``inhhgfgfcfogXUW[\\[]ba[\\_ab_\\USVUX^\\UYrwfghfmtzz}zv||{~~}vlbgihgdeilhksokonnomllkj|wey|m[XYVRQV]_\\XVWYY[\\]`ieSU`a^alrhZLZgjlgYRJCCCCACO\\_`bb`didJeZWRczfJEGDBBBBDEFDBB@CHJIFFEEECBABBCHHDBA@???ADGHHEABDEDDDCCDEEFEDCB@BGFDEFIKFFHGHGJ\\kiZS\\_\\ZYYYYXXUROKIHGHHGHGK[[ODCIKJIHGGFEFGGHHKNPQNLJNV`_`\\WTTWXZ[[^_^_^_^]\\\\[\\]^adgiphEUx_HIHKQPMNNOONNNMPPOTdg`MHLNPOKGDGPXZ[]\\[[ZYTNJHHIJNOKGGOSPMKIGEAGY[OPWVOFCDABILGDBCCCCDILMKEDFIJJMSPNSY`]UYX_pbLLKJILOSSNHFFFGGGGIIJJFDCBCEHKKHHIJIINSOLWfkmpolgehfVEIOMNMFHS^eghjnpmh^SMNOPPORYZVUVURPPPPQRTTTUVWVUUTSUK]êxsopqqtzyqaY[aeed^ZTRQTZ`^YVUUUTTTTSQRPLLT\\VVcgga[W\\c_YY[[[ZXWWWY\\\\ZYXXWWVUURPOONOPPRV[^^\\[ZXXYZ\\[[[]^YSTXYXWWWWVSOMNONOQQRTWZ[[[\\\\\\[]]_e]787:7Khma\\OHMKHDC@ADHIJG@<>=9779988=BB@KYJ89;;<IMIJI@=<?EE=7677778:::9:DSXnoiwy_W_pT79<<>@BBAADC>>ISW^gaK>>>>?<;;=?BGLPPKVoppztbcdYQOMLJRkzkfknXPjaAEC:85389:867:>:I^\\]fV85ShcbgjbW[d]OVhjUKbme\\RRRSQP]lp`RB>MXRHE>7:?@AAABHHRsqK@IHHUVNQfpXIWK:=B@ABCEDA>=>??AB>65879ACA@>AHJA64>HE:;@EHLHCBBB@:9AMPIA<;9<@=659:;=?>;>CBAA@>=>@>?FH=;A@79A>>@?@@B@:<=747878==89DKHF>:FSSSPG@823?MOB<=:<=:<:5@NLLM@108@B@?@GMD47F?10665443-*3CNNLJKNTTSOHB?EMLJH>8844<BB;5>TYA4:EHFC@K_W<46=EA::?B;<FF?;9:;=<;<905>=:>ABBCB@:26CIKJFA>=<<<<;<=:?NYXPCDGHHHGGGCAL]ZNUVE<;:;=BHH<2/-./054,*7GHDCBBBAA@><<@A@???=844653730.,*574;@82343310/011.-..,.252059:=>:4/-/00..010./2.'*))).8:65469;:::951014668:?GF>ADGHBLJIHIE@?>@IK@EI=610IqxqbMFB>CG?5/.4789:998753129<;;<?:6>DC98AE;03<=9777<JRMGOa`D9NT@8D<4:JM</,.4;??EIC6*1<3+.../,(+-+(.4<<6--%%278>>PikZD;74452//5976899::995,)2<>>@?=;;CKC238)#3=1))-268OPQQQQQRSSUWXY\\]YVWWURSROOPNNPPOMMOMLLMMMNNMLMMMNNNNNNPPQRRQOMLLKKKKIJLKKKJJJKKMPRSSX[UNJFHPXVSQPKEFKPQNKJJHHIIIIIIIIHHGHIIIKLLMLJGHHGFEFGFGGGHHHIIIJJGEFGIKKLLNPRQPTY]`aacd_RLSYXVYbgb[[VKFFGKQUUSPNORTTUUUUWYZ[]_``abcdefgiklnnmljhghcZVSSYZVYbedfmqpprtwtnghu|xj_a_]^ZYYY\\`^aptwsUX[ZZ[[XVUWXY\\\\YWWWZbmrpf^UQPPPV\\ab]_ddceb\\dpi^_cec^W`dgj^WXZ\\]bdaadb_^ZVTVWWXXXWexuoms{ww||xpghiiinmje]\\pwiotrqqolihjj^bjVW\\^\\]][[\\ZXXXWZ]]`i^S^ddbbmyxVY_`aQDJHCBFKJEEN\\`_]WSTS>\\XWWTSPHEHJJIGFDBBAAACGKIEBABCACEEDDDHGDCB@?>@ABCCDCBBBCEDDDDCDEGFECBACFGGFEILHFFGILN]h^QOY_[XYYYYY[XTQMJHGFGHHIJJHEBBEDBBBCDEFHJKKLOPQPKDBFPX`fg_VUWYZ[[^___``^]\\\\[\\]_aeijjXBEnkPMGIMRXVSX[YWQJJLJO`bXIHKORRKDCJU\\]^_^^][YTNHEFHJKMKJJJKGJLLJILU]WQ\\d\\NFEJGACGDBBCEGGGJNRQKGHHFDFMQS[b`[RNSbo]HJKIHMRQOLEDFHKLLIHIIIGFEEDDDDEEFILLLPSRWahgejv{rebd]ICIKMNGCFN\\ehksyvkb[QMOPPNPYcb`]WRSTUUVWWXXXYYXWVSVQTŮǿ|xtonswxpwn`]_bgigb\\YWTVXZ]ZWVUSTTTTSRPPNJKVWTcmie\\Y]ba[VWZZYXWWXXY[[ZYXXVVTSSQQPPPQRRRV[^^\\ZZXXYZ[[\\YZ[WSUVVUXXVUROMMOOPQTSTVXZ[YY\\[ZY[]^fY;58==Nfmc\\OGNLHDCBCGJKOMHFE;889:;:;@FGBAFC@@BBBJRTWTF>;?C@;7666879:998:<GMOazyningVX\\m~w~wM658;ABBCCC@:57@LT\\hbJ<@BB?::;;=DLSTNKXppnvkQR`c^SLQZeuvnd[fgWXrbFCBB@<7=9669:;;7CYWRUI9E]bepsia[V[ZQQ_iR?Sc]TPNHFGQbfmrnXEJROIA96;@ABAAAC>Lrc@COQOOR`}vH3>?;;:;=?CHG@<==?AA?832547CIGBAFMLA54;>947@CEHFBCFIE<8<ELI?<;89>?;78989@D;9@B@AA?=;>@@DC96:;9:ACA@ABBGKHIH>9<>>;<=:;FKB?==M\\\\XVN@7648CGA=>8577<;:EOLNQF88?A@?>?GSO?<=4-04453222:HRSOKLNJFEDB>::>C@?CB<=>;>BA>:;KQGFPTOF@89LJ4/-4B?;?JQF?EGC92049;:>=56=@>@BBAA?92,-;KOICA@@@AB@=98:>IUUI@CHIIJJHHGCDQ^XUZPB;;:;AHF9..00./8C6*:JIFCBBBA@@?=:=AB>;99876765620-*)8:14A@73431000012/-.//.,0/*/56;95.-,..-+,/12235-')()+1889;638;:99954455208BIG=6?EI>6LOQSPLIGB?>F8H[I:76C`tyvbOL><B<50/4788;;:;=:2,057:=>BEIS\\UB9?FE4*-/48;@GRYSHDQY=4IC:CLE:9DK=22018@ACMRL?E]O62322/*-11+,-..-*%%/9;9,'B`m\\<674452/1678998887641-2<?>@DB?<<EI<02/$&3664/-155OQRRRQRRRRTUTUWWUQRTROOPOOOOOPPOMKJJKKLKKMONLLMNMMMNNNPRQQPONMLLLMLLMLJJKJJJKKLLNPRRTXZXSMILOMKJJHEEEHKLJJJIHIIIIIIIHHHGIIIKKLLMLJGHHHGEEFFEEFGGGHGFFFEEEEGIIHHJKKMSY^beedcde^PJLRVW]cddb]WOIDBIV\\\\XTRTUSUVPOTUVVX\\___abbcefgghiigeb_]^[WTSSWVQPX_b_aknmosuuttppu{|~q_^_\\Z[Z\\bcdmfnnRX^ba^^\\Y[\\[ZZ[\\\\[YZcruna[WTPQTVYXRWcgdekkeij^Y^\\YVUR[\\cukWVWY^cc^]_]YZWWUXXWVWXYT\\}yz}qrz|xrhiihglkb[PNbxoqwusrrrigii`Ua`RUX[`gkd[Z[YVSRXbcfj^Zceeggm|^QTaeUECDDIWbd[OHPTRRPKJJ?`SUWREEGIIQWWWUQJECACHKJFEDBBAACFFEDEHGDCCA@??@ABCCDDCDDEDDDCCDEFFEEDFHGGKIEHNMGGGGJV`[PKIV`]YXYYZ\\_\\VSOKHGFFHIHGGIIEFMTRIADJNNLJHHHKLNPKEDFHLWfg^VWXYZZ[]aa```^]]\\\\]^_behjeOF@MYQGBEEN[\\Y]`_]VMIGGR][OHHINUUJADNY^_`a``_]ZVOHFGHIJJILMKHFLNMOTVYWX^jk\\KCEJJEBDCCCDEFHIJJLLIIKJIGFINV`aYWTGCP_TFJKJHMQMKJEDHKNNKHEGHGFFEEEDDABCFIKNRVTTZ`baak|}jUPQOJGEFIKHEFKWemqu~|k^]VMMPPNNSbkid^WWZ[ZZYYYYYZZYYVSNGʱºƿ|xxonswxqkffggfggc\\VVUUWYYYXVVTTUTTRPRQNKIOVT]qqe_Z[ac^XWY[[\\[ZYYXYYYYYXXWUSQSRSRRRSTRSVZ]^\\[ZXZ[[[\\\\YY[VSUUUWZYVURPMLMQSTVUVWXXYXZZXYXY[\\e\\@9=BBDW`[[SOSNIDEFEHKKKKJJE>:9;=?>@BEEHHHHHHIJIJLPVVI><@A<98878889:99988>C@>Mnf[^_mzr~aI<879<>ADEF?778<FS^^QB@CDC=777:DORLFINZputpeWWahfWORVcswrfR^kfau{\\FB@CGGC@?:7;=97866>CFIJHQ]`myh[WWUQP\\jZ?LbWE@>;?IX_YbowvcJ>CJE86>CEECBB@=Wx`L_ojUINhT479:<<;:<?BDDA>?>>?@:21235<FKIEDINK?437767;?ABDDDDILIB>>AEC>;;989<A=99<>CHA=AAAA@?;67=@?=844469AFDABFMW_ba\\QD>=<>??==HM@9=?L^c_]TDADC>=@?<96115<<=IQLMQJ??@BA@?<>FF=952;EA:5345:HRPNNKJJG@;9:;==??96@B7:D?<::;<>EKNIB?=8404=:2536;<;?LWOC@EE<4-.798BC96>ECAA@?=81.,.;GE=:;>@ABCB=79><?JPH@DGHIJLKJKIGIRVTWTG?>=;;?@;7673./6DD4?LIHEBBAA@@@<::@DB?=:65677641/-,+6<76>A=653100/012003566530/566532.-+,+)**++/353-****+/226;86:<966654663/.6CG=319D?/8OQOPMLGC<3*4;JZSC=>@Ec~rWS;.564334568;:9;?=62468<AFGOY\\^_VE>GL8''-4;EGKUVSLFGQF8<==BBEGBGY^XTI<>D?;J^d]\\qvV755240/36321/-*''1=??@5/4LgQ./8532.-1458::84.**(*-28::<=98=INA457,\",4*.;<6331MNPQQPQRQPSRRTTSPNQRRRQNNOOOOPPOMKIIIIJIHJLLLMNPNNONLLMNNMMMMLLLLNMNONKJKKJKLLLLMOPRQTWYYVNHHKKJJIGGGHJJIIIIHIIIIIIIIIIHIJJKLMMONKIGHGFEDDEDEGGHHIHGFFFECDEFGILQUY\\bdfiigfecde^PHKOPU\\cijda][ZPHLW_]YYWTRSSPPSTUTTTVXZ\\]_`ba\\\\]^][XVUUTSSRQQSRPOOV][W^gd`chnnhfjhdgng_^^^^\\\\bjeZZV\\qgX\\gui[c`\\a`][[[[\\]\\\\aknh_]XURRUVSOOYadeflole^Z]^XTRSTVY\\hqaWUWae`YXWYWWYWWYXUUWXZVS~}zz}xnjnttqignofVRPQNMStvs{~yyxsjfmhcYXd|uPUWWY\\fqth]ZWROOVbgkf]_cdfhgm~eIQdkh^K@EXlstng]OHFIKIILHR߾hHPMMNKGGGLRUWXULFECCEGGEEFEDCCDFEDCDGGDCBA@@@@AABDDCBCCDCCCBBCEFFFFCHQNJKJFHLLIIHFEZcPIJGR]]ZYYY[^a]YUQMIGFGHJIGKRLCCKWYOKRZYROJIKMMOSSJCCDFKVb[SUWXYZ[\\_``___^^]]]^_acdfiaKDCFSSFCGFGLY[]aca[UQLMRXQLHHIOTPDAHR[`abcbb`]YUPLLKLMOOLRSQRRTSOT]\\WSV\\`cZNFGGGECEFGGFFAAEGGFIKNLIJJJLNU]WMPSKBBKJFHHHHJMIHHCCFIKKJHFFGFEFEFGGEDDEHJLQVWTRTX]agvv]KICCHFDEGIHCCKUZbjt{{k[USNMNONNP[lpjc^YYZXVUVXYZ[\\ZYWUDxôº{xwmovz|tmejmkgfd`^VTTUVVXYWWWUUUUSQONONKHLUTWmwi][]ab`\\XX[^a``][YXYYYYXVVVSQQQRSSRSTURSVZ\\][[ZXZ\\\\\\[\\YYXUTUUW[ZYUTSPLJNTUUVXYWVUWXZYXYXXZ\\e]QMJGD=;CM_^YXRJBBCDECA@CHHGDA?>ABCA@?===CGIJLHGBFLQM?<<>?=<;:99989:99999=A@@?a|}qjiZ`squm`VROOLHEBAAB=9:;=BMQH?ABBCA<469GWXN=<Q^Xhwwkc^Z]df`[TO]oywdQ_rmmkZE69@??A@??A;AE;5696524AOPMYafumNMSOKQdoX?RdSC>;;@J[UL_qr|nH7>HH?=EHIGDABA<curoOPT\\ob>6;:9=>><:<?AA?=@>==;621236=DFFEDEFD>767657:=>?ACCDJMIFFDBC@<;=?>86>EA<?EIIGEDBCB>><869=;:84128>BDDBER`fihfd\\K@=<>?@??GK>4;AIXbdaVC;DIE>;9756777;9:KQKMMC<?CGEB=8966;BHORRLE?<945=JSSOLKOTP>=>BBA@=:=HE36@?;9789;@HH?79;845:=:59:77::<EPMA;?D=71.97>K@69?C@@A@>82.-.3::6667:?BBCB:49?85ALD:>DGGJMMMMLKKIMORQHDBA?:68=DF?5./4;GFFLKHECCAAA@?=<;=CEEDE>;9975421.-,4<>;89<=93011001203776:;63378443310./-++)),-551,++***,++0:>>>>:423334420/4?@4-25@6)3;:915A;50,*2LXXSI@AE<Vye\\:.244444365<:87>B=0599AEJQQX^_]\\LBII4')+1APIJUOB;?ILNI=9434ALJCDNY_`RJMLGRdge_bS2654225899640($)5??>@92&/D9++032/--15679:82(%%&)/10110248G[W=/-.)$1:209>=751MNPPPQQQQRQRTUTTRPRRRQQOOOPPPPPOMKHHHHHGFHJJKNPQQPONMMMLMMMMNMLLLMNOPPNMLKKLMLLMNPRQQSTTUTPJHJKIJJJJIHJIIIIHHIIHIIIIIIIJJJKKLNOPQNLHGFDDDDDEFGHIIIIJJJIEACBBKRTWZ\\adedfdddeedef_QIGHP[djmmlhgmk^QLRROUWTQRRQQSTTSQONORSTUWWVSRRSSRSRRQPPOPPPQOOMNPTURT\\_[Z^a`XV\\`\\Z_`b``ba^[gs^MQSQY]ZXawk[dddge_\\][[\\__]^`ca``XUUUUSRQRVWW^elnf_[_f_XSRSZVW\\\\efZUWad^XWWVVYYWXXWVWYX[[Vn|vnkfeeormlotti\\MINOLi|vwtllojd][W`ou^VXZZ\\]blswk`VPNOVbjmf\\accehhl}_AO_cns]CJ`lncYZXPHCCGHHIG<{՜^GNLJLIEEEEFGHKIGGFDCCDEDEGGGFDEFEDBDGGECBBABAAAABEDAABBCCCBBACEFGGHEKVVNKJGHKLKIHGFTYMKKGMY\\ZYYY[^a]ZVQNJGGGHKJHIKFBA>DKSYa_RKRXXUWZZ\\XIBCCDKVXPSVXXXZ[]```___^^^^^^`bddfh[EFRY\\\\VLJOOGNY^bgd_\\ZURSQJJIGIOSK@ALU]abcdccb]XUROPOOPSSPVWSRUWUT]b]VQLHLSRPMIECDDEHJKJHCACEEEIORNIHHLQSTZYOMQNID@ACEEFHHHFFFBBEFHIIHGFFEEFFHHIHEDGIKMRUUWURNOWi}uaQHDCEEDDFHHJRZ^RQ\\jvyjXQOONMNONMVhtqga[WVTSRUXY[\\][ZZLk¸Ĳzxvnjrxrmjhllheeb^[UTTUVVYVVVUUUUTQPNNLKIGPVVf|ra\\[`db^ZWX[_a_][ZYXWVVVTTSTRQQQRSSRSTTQQUY\\[Y[ZWY\\[\\[ZYWVWVTVY[YWSRTPKJPTUVXYZWUVWY[ZZZXXZ^dZWZ^c]TKJWdaWPIC>:9;;669AFGIKKGGFDA?=<;98?GKJFABDIOOH>:<=>??>;:::89;:::::=?@BCQVSe{}yyoMKfgebdcdinolaN?<<;:<>>?@=;?DDBB?;5=JY_N>8AZdW_tue\\\\]Y`jhZLNZkziXP_xehZ6068>?<:;<=BEKC639:6456>NOTbitzmBCJFGO_hP?T\\JB=8:AJRHB^xy|iKAEGGFFHJKKHBC@9aaNXVOJFD>988=BB>88>BB=:<=<=<8510249?ACFDC@?<:86447:<<>@CADLNKHGECA>;:=@A=78CICAFJKIFDEFB<;>=99;:974218BEDEEL]ijieab]K?<=>?@@AEF;2:BGQ[`^UE6:FG@:4115;=<=::LSMLE84<CHD=543.4DNXVNMSRQJ>885A\\ZNPOV]TB@BFGD@=;CNG61<?;976535:89AEB<69CB<78988767;DE@97?>954;AON=6;@?=?AA?5--.05842466:>ADI=58<=3,:F=7BGFEKPPONNOLHILPOJFDCA>747?HC7..05CPNKKIGEDB@AA@?><;>?ABFHGC<755220/.3;@<53:A>40110011110/38;750/33345321231+((-3861,,*(***(&+9BBA@;53233334535973144>7+'%%%$1@:630,:KXYSJA@D:@`tuZ1.124565373=:75>G@/4<<EHMXSXaa\\I<BFA0'*),CPHMSB25EQURQK8*/9BI@504CGE<7@NTWWXbYAFta19=5567:<=90-*&(1?@>@=3*%-5301132/.3:<;:9841/..0352.--0>M[`VB4./47BGA959><96MNPQQQSSSSRTVUUUTQQRRPPPPOPPPPOONLIHGHHGFHIILORSRPNNMMMLMMNNOMMMMNOOPQRONLKLLMMNOQRRRRSRQQSQNJJIIIJIHIIIIIHIHIIIIIJIJJJJJKLLMNOQRRQLHDBCDDEFFGHJJJKLMLKIHIFHTYXVWY\\abaabccdedcfh_OGGNW]^]ae`^cfggj[FHPRQPOPQQRRSRQNMMNOOPNNPPOOOOQRSRQPOOONONNNNOOONOQRWZZZZYWTVZ]^_abaabbb_iwcX[\\XTWXUW`ecbfllf`]]\\[]__^`c_]_`YQTVRQRTSTTRW_jl]Z_dha[URTWX\\a_Y_YWX]][XXXXWYYXWWVWYZX[\\Ya{~uplggedbmrqrqrw{[MNO[x|qxupqr{j_``YUZ[YZ\\^_`chlqscVPQSYclma\\`bcgiij~}eJ?LZWXdbUV][XOJPVRJBBHHFGGOKt]ILKIFDDCDCCBBCHHGHFDBCCDGHGFFEEEECCCFGECBB@BBAA@BDDBABBCCBBBBBDGIIJLOTVOJIHJKKJIHHIMLLLJGJU\\[XXY[^`^[WSOKHGGHLKHJIEA@??JRZcZLFQac\\]`abYHBCBDJSRRRTWXYZ[^a``_____^___acddfdQHUbab`\\OIPSPMX^bgf`]]WSQLHJIHJPQG>CPZ^bcdedeb]WTRQQQPRUW[ZXRSWZ[_cd\\TOFCGKQSUSPKEDFIMPNIGDCEEEJPSMGGJNTVSX\\WUROKE<>ABDFHGEDEEBAEGHIHIHFEDEFFHJKJHGHIJJNU\\_^YMFOhzywhTJFFFEDEFGH[vzplebcqtgXQPNMLMNNMScssib\\URRRQSWY[]^\\]RcľǶzx|rlxswukjikmheeeb_ZUSUVUUUTTUUUUTRQPONKIFLUU^wvd_^`ab`\\WVXZ\\[[ZXWVVUTTRQRQRSSRRQQQRRRRQRW[[\\[[ZWY[[[]YWVWWWUWYYWSTTSNLLQTVXZZXWVVX[]\\\\\\YXY[cXEPjsrqng`VLE>9769?@=:;>BEHJMLJIFDB@?><;;?DIFB@AFKONE>;;:>?@><;::98::::;;=>@CDC>=Vx|ztbGCS\\\\_chkprw{vU>9;;<=>>?97=@ECBA?=<CU[RC78AVdV_qo_JR][\\rw`KNUe^PSP[xcfQ3567=?=;:<?ELL?48>;5457=DT[Td~{xlA?GDHMRTH>KLEB=8;AFD=<[~|{ePPMNIEDBFNLFDDA7\\y[R[VH@AF=788>FFB<7=BB?<;99<?:4112467=BEDA?===:85479:;<=A@DKMIEDDC@<::<==?<9?JJCEHHGECBEF@8;<99:9876436?EEEHSahhhd`a\\G<==?BEDCCA806@FLTWTQK?;EIB=:435<CED@@INHC913789=9110.5=ShcXXXWTPHAC<AYTCJOTTE:=DGGB>;;DNH93;@=;:73/-,-5DIA<89BB8679;8567;@DGA58<::>@HSN><?A>>@BCA6,)+/35432446=@CH;8?@;/+5==BKIEDHNPQPOPMIGGLKIFFDC@>:45;=92//0;MPLKJIGEB@@AA??=:::;=>@AA;6543310/4;?;57=A@942200//0/+)07:982,-1245543465-((.663.++))*))(&+:CBCA;53243246876744667=;1))0-*4?AC<0/MUKTTKB@@2%0O|;+//14544160<;:7<==/7>:EKUZUW`bU5*6;7-())*<JGKRIIKHKRNDHH52@GNX\\SMXTJI=8ESSGAZ]>,681794467:=?=0)/-&.;@>@;0)+356754562,1:=;889886556695/..1C[fbYQKGMTQSMA;:99;<?OORSSTSSTSRTTUVVUSQRTSQPOPQPPRPONLJHHHHGFHJJLORRQOOOMMMMMMMMMNNNNPPPQRSRPONOOOOOPPRRRSTTUUWXUOLJJIHIHHIIIIIIHIIIIIJJKKJKKKMMNOPQQRTSNFACEDEFFFHIJIIJJKLMNNPTXVUUUUVZ^`adffffffgjh]PJKNOLLMMMMNPRRSULIJKKMOPQQQQRRQPPOMNNOMMOPOOPPTVVTSRQOPOOONNNONNMMNNOUZ\\\\\\]^__``abaaaaaccflifggaXUUUU]aa]`opfb]]]^`a`_dh\\ZVYYZUPQPQTUVXY[]gjVU^bfc\\VQVWY_df`[XZY[ZYWXXXXXXXWWWW[ZX[]^]]g{yxtmfegecfkoqrutso}\\LORftkj|~y~z{saghgedb]]`deeehihi_SQRV[dmj\\\\__bfhka`]I>CNZYSW\\ZURPOJQXWRKEFMIEGGSI;>Um?BJJGFEDEDCBBEIJHIFDBBBDLKEDDDDEDDDEFEDCBBAABAAAACCCCBABCBACCCDFHGIONLLKIHFGGIJIGHJJIIKIFGS[\\YYZ\\^__]ZUQLHHHILKJKLHCBDIOMP[UIDFYgc^`cdVEAABCIPQRTUWXYZ[^`_______^_``acccd^SWcfeb]QFGMTZYY^cge`ZXVPNIHJKIMQOEAJT]aceffeeb\\TQQPPPQRW]daXQX^dikhd\\QKEIMNT\\^__TEDEHORNIHHGFGGKPRKEELQVXUVZ`aVLHGB@ABEGHFDEHFCCGHHJHJJGAADFFHILLKJIGFEGWcdb]PGNgxxxhVQMMJFCDFJIRm|z{pfjjdXSROKLLMNOQYmti^ZTPPQRSUW[]Zd\\Zǲƿ{yqtoqmlhjnldccdc^YUTXYWVUVVUTTSQPPONLKHGSZZkyjaaaaab^ZUWZZZ[\\[ZVTRRRRRQRRTUWWVSRRPPPPRV[\\Z\\\\[YWZ[\\\\]YVVWWWUWYWSSTTPLLOTUXZZYVWVUX]_^^\\YXYYeX@IeuokhcR@8679;>KXXTNKIEFJMMKJGEGGGEDACCCBABBCEGJHHC@>=:>@@><===;99:<<=>?@ACCAEBIk{maYPORX\\]^_^WSXjpT@;>>>??@@=>A@CBAA@@FLPJ@<;9>P__jldU?GZdm}jWZb_ICVQToqcW75669=>>=AHKKC76CF:5568;4BG=Tsvouk><HHJNWSMI?;@>>:>AB?>>XzyybSWXSF=;8COMHFD@7T|}l]WZSGBCB;799<CECB?>>@DD?<:;><4012345:>BAA@>?><;=8888777=?BJJFB@@A>99:;;<<=;=FJDBFEBBC><CE?88:98879845:?DEDJYdfggd_`YF:<=>DIJF@;514<BIOPMLJHECFB@A;8;@GLKFGIFD@50346;;5///37<YqmfbWLJNRKEHLOC4;EMI;7=BEE=:9:@JI?:>A?==92//049BD<=>;=<59BHGC?<<=?EIE738<CIGJOOHEDCCBBBDB5.,/7<6441114:;<=C@<=81028CLJBCCDFPSQPQPMG@CFIHGECBCD>723431//2AMNLLJHFDBBA@@A=<603854434545453237;:779<<:85442///////278983,+/3567776872)(.51,*(+,//,**-8?AAB?7211443488:87558;=@?42J_XB7?HC5(,SoXPPJB=7.(%9tc('--.010//1.:97;;272<?8@Q^ZTU^`L0)/2/+()+)3CIMTPF<//7<9<HG=CQVahf]afeiid^YO>.GU9.572/.24767:BD<8;<0,5?==8,'+577;><665-*179869888766662010.6K]_[YXU]iaTIAGL?//7?QRTUTTTTUUTVUUVVWWSRUUSPOPQPPRQPOMKIHIIGGIJKMPPPPOOONMMMMNNNNNNOOPRRRSTUVWUTSRPPPPQRRTTVWVXZZXSOKHGHGHIIIJIIIIIIJJJLLLKLLLNOOQQQQRTVTLEDDDDFFFGHGGGFFHJKLOSTTRQRSPMPYbghiiiiiiiklj_RLKMLLJHGFEEEFGHHHJKKMOOQQPPPQQRRPMMMMMNNNNNOOQTWVVURPPPONNNNNNNMMMLLNU\\]]adddcaababbbdeecabdefc]VUVZib[airhgd^Z\\accb`ij]VRUcgUKOQRRRV[]`gkiYSX]fh_XVY]X\\fhgb_bb\\ZYXWXXXWVWVWWWYYXZ\\_`[[oxqqpmkhihgjpspnqsutubMPQUZY]qqclkinoicbcimkfgkmfVRQRX^fmi[Y^_`dfneNAABLU`b`_^QIFMTSY]SJJKJMICFGGEHD=@ciF<INIEGHIHFCBEGIJKGEBA@EPODBCDDEDEEFEDDCBBAABBBBAABDDBABCA@DECCFFFHIHEDHJGCABFHHGGHJJIIGCFUb]YZ[]^_^^]YTMHHHJKKLMMKFDKVSHIQOECARe`ZahbOBA@ACGKOSTVXYZ[[^____^_^^^_abbbccd_\\`dc`VKC@DJOTXZ^ehcWPONLKIGKMKPSLBCNZbdehhgggc[QNQQPQRTX\\c`RN]fjspgd[KJLNPU_c^^`TFDEGNRMIKNKIIILPOJEDJQV[[UW]^WJEJLJGEFHIDBFJGDEIIHMSOLLNNKFFIJNOPOKGEEO\\`^]YMFK`plnncZSQNGCCFMMGOhwlaruog_XUUOHKKLNQQUcpj[USONPRRRV\\^beSǺ°{kq|uopielmf``aba\\WSVZYWWXYXVSRQPONMLJHIPWYdxthdba`ab^[Z\\]]__\\ZXVTSSRQTUVVWXYYXVTRQONNRW[\\\\\\\\ZYWZ[\\[[YVVWWVUUZXSTRROMMQUWYZXVVVUVZ__^^\\YXY[eZIF\\tl[UULA>BLNMPU[__[VQMNSTNNLFEJNLHFDFGHA>>AFFB>>@ABB@>>AA?@@@@=98;=>@BDDBDCBD@;Ogf`[YUSVVMKKD:6A]bLABBBBBABABBAAAAAABCGGA;:;<::I[greUJA@Jg}yd]ek_JEUSN^wsZ62745<><>EMRJ=59DC8578877<IOPXnrr|`68GHP\\jqjbX@6;?ABA?AAAQqvsYSYTF9578ALNKHC=;IY^fbYUTUPHB@??<;;;=AB@@=;?DD@?=;>=621133469=?A@?AA@@A>9653339>@CFC@<<?;67999::;<;AHD>@EDBCA;9?E>79:868:855;@DDBJ[defea][UE:9;<@GJD<7315=CGKLJIFJI>;<;;98;CIOQQPONNF839@FUU;+-2<@D\\kd]TFDHMZXKNM>.+28A?79;>A=7579=EFA@ACC@=8459=@;9:9EHB?62<NYXSLD@;;<<998:?EKFGPPNLJJIFDBD@2.17BKH@;71.13456;:543557@KKEEKOE>JSTRRTRG9;EIJHGEDEEA9310/0--/9IONLMKFDDCA?>>>=4,/45431144657779;944542211255211243576434320-.377:<<99<6+)-,*(*,07:5.+0<GC=@C<557657978887655;?AA=:Y~]9:A4*()KrfROKA61..,,E4&,+++,-.//,.6236946?DA8AS[TPS^^F51671,(),*1FYb\\C*%&%*4;46LLKZ\\WTVXYcjjs~iN;03>0'7OKD?0,-.28?CCABC<-/7;:5+&+499;>?743,&(,38788887753/,,/0--2;DGJKHMXa^UO\\dM,&.4RRTUUUVVUVVWXWWXXWUTUTSQOOQQPPPQPOMKJKIGGILMMMLMOOOONMMMNNNOPONNOPRRSUUWYXURQQOONOPQTTTUVVVXZ][VQKGGHIJJKKIIIIIIJJKKLMMMMMOQQQQSRRSVVSMHEDEFFEFFEEEEEEFEGKLLMLLLMMIKT`ehijjkklllkllaSMNPQQQLIHFEEEEGHHJLMOPSTTTSTTUTRPNMLLLJJLNPONMP\\ZRRQTURPNMMLLLLMLLNMRXYZ`ddec`____abbcddbbaaceb_^_ake[plW_`[SUZacbfml`WPVkbMLPRSQQUZZ[hpjYSUYfkd_^\\ZTZfihghmj]YXYWWXXVVVVWWXXYY[\\^bcdt|vvtrngfglpstspnosx{}veWUVUTSVaqqjzj]jkhihlkjgdhqohkteTQQQX`iojaY]daafpv^BHRZ]]XQWcSDEKPU]]ODHQNIFBCEFECCCEBJHBLSJ@EJMKFCA@DKNKGFEA@GOLDBBCDDEEFFFEEEFEDJLGCAAAABCAACDEGJHFEGHIIGFEFMNE>=?CEFFFEGHHGGBF]lc[[\\]^____[UNIIHJKLLNNMKILRNGFHHCBG[gXPam_H@@@BCFKORTUXYZ[\\^___^_`__^`bbbbbbba_^^ZNDAAACJRRLP[de[OIJKKJFGMOKPSI@FR\\dgghiiggcZPLOOOQRSSTZXHG\\hlqma^XIQSPRXegXTSMHJJIOTPKNROMLKLLKJFCEIO]bVPSQOJEIOQMJHGFBAGKGFGGHXqyof\\agbYNGGMOQPKEGNY^\\[[VIDGMSOZtrg_XLECDEKOKI`lPA]vl[XVUUPLLLMOPQRXefWMNNMORSTX[]cSùĿóxmnzypwq`bmja_a`^[YVTWYWVWXXVUSQQPOMLKGEMWVZq{ngcbbabb`^^`_`]]ZYWWXXVTRTVXXYYXWWWURQPONPW[\\\\\\[XWWX[ZYXWUVWWWVXZVSSPPONORUWXVTTUTUV[__^^\\XWY[bXKHYkf]URPNL[j\\NNHFLUTTVY[\\XTUTPNNNJIKLOSSMKF@BA<::;?DDCCDFBADFFEB=:;<>AEMHDDCA@<<JdujXNIGKF>:;745EWOCFMNJFB?@BBABBBAA@@@?=979;988?PdhVJKJCBYjaabcikmYL\\XJGeyS446548;<?GLPD88;><7589;DRcqoUKerjoN38=D_od\\MUlO14=AAAADEHPmweEFMC8347<CHKLI@89<99HLFJPQNLC:;BB@=9:=?=88;?BA>>=;;:7421333579;>??@@@ACB<84334;@AABA?=<=:5576558;;8:BC;8?GHFFB;<BA<:9779:::99<BDBHXca_]YXWM@::::<AD?:8514?EGHHIHDED:7865766@OVTTUTTM@8?NQQ[]G/+5BC>M]WND>IQPZ\\MC<0,/-0577743564369<>;:@GIF@<;:<@D?52:GRUQH=79GPOIBA@;73469CCABCBJUUSOLKHC?AA81047>HLMG<4/.-./1/11./7=CLKHLSWZO;7FSUSSTI7;KMMKIFFF@8467641.,.6DNOLLLHDFEC@??><91/57547854456669940//---0256656467645300/00.--389<<867:5,*.134569==8439FKB>CC??AA;7:;97885455<AB;4L|O721+))+GldTLF8/2/*0+(&)+)+*,0103-077FJA79AD@@IMKDELRLBC;8:40-+))5PmuaA20-)-531AMLR[ZSOKOUUQcx|cTB830,'&BZWOC;99759;====:-*-/45.&+230./00/-(&'',2588988740.+*+./0+(-7AFDCF^njecfV3%)+SSTVWXXWVWXXY[[ZWVVVUTSQOOQQPPQRSPNLLKJIIJMMMMMMNOONMMLLMNNOONNNNORRSUUSTPNNNNMMMNQSTSSUVVVVXZYXVRNJIKKJKKJIIHIJJJJLMMMMMMOQQQQSSSRTVUSNJFDDDDEEEFFGGFFEEGGGHHGHJIIMUZ_fklllmnmlklmk_QMNOPRNJIGFFEEFGIIKMNQUVVWXXWWVTRPNLLJJJLMOOMLN\\YQRQVUTTSPOMLKKLMMNPRSSSX^bca]\\]]^_``bcdedddeeedeeeghbkxeRVWTRQRal_flg[WQWbRJQVVUUTUVVWbokVPTW[jkga[UST`adgkqj]ZZYYYXWWYYXVWXYYYZ\\\\]]bywz{vjbbemvwwxvrpkpyxn^V\\]ZZ_gjkvq\\LS`f[\\ilqpgnuso`[hronq^RRPQXbksrgW^ecacjeFLXWUOH>BUNACGKPXYOEEKMHDBAADCAABEDCCDS[P@?FKIC@?=FSTMHHE?>FMHBACDDDDEFEILLLJEFT^UFAAB@ACCBCFHNLGFFGHHKLJHILKD?@BCCDEFFGFFGE?Gapi^^]____``\\WRLJJKMMMOPNMLJIGFED@@CP]\\OK\\l^E?AABCFKOSTVXYYZ\\\\___^_`_^^`bbbbcca`\\XSKBAABCBIW\\RNRW_]OFHLKFBFOPLPQE@KV^fhhiiihfb\\VRPOOOPPMNPNHK[fli_Y[VSRTRV\\eaRKIGJPQSVYWPORQPPNIFDGJKKKMX^UNLIIIFHNPNIEBCCACFEGDAV|qptqjYHEKMNNKHLRZ\\Y\\[PDBDA@=Jmzrp`JDEEFIJIL\\\\HF^}pYSUUTTTQMMOQRTV_e\\QNONORVXWV]Mkúķ}qy{fzszzeYcmfacc`\\YWVWWWWWVVTTSTROONNLIEHRVVfztjebceeb`_^^``\\Y]_^]\\][YVTTVWWYYXXYYUSRRRPPVY\\\\\\[XVWYZ[WVVUTUVXZ]YTQQPOOQSUUVTSTUUUUV[__^^\\XXYZ]UOPZZ[[ZSQPO_aQFCB?CKMR^d`ZX[^^]YRMMOUZ\\\\YX\\Q?<<<:8<?CCBBIC?MRKIIFE?;;;>BFEDCB@=>NbooXJDB?><9899:BPI@CGPRNGA=<>@BDCCBB@?=::98998776=OQFOUPIGJH>Lglk}aO\\QFAG[E;855558?CCFE>534555589E`q{vfZ\\[RPO>8ABGapK32>KD;<>>;=@GPUVer^B=?:8877??ACCA<75632?HILORUWJ74?GF>:89=;68=AAA@?<869:5123334779<==>>@CGHC>:7769?BCB?><:9623666568965:?<8;AGKGB@??><;:8879?@?>?CDBGRZXWWUTTI=9:::9;=;99846?FFFGJHA>>;9<;9=:4=Va[YZXSD9HY^ZXUUN4.>FB:BRQG?CRXUWTC6/+13..1562.-1531488788<IMHA=<<=AC9/1C\\f^PECB<8741149;62:?AGHC@?COWTNJFD@=;<=51589;>AII<440--/1/0-,6CJOOLPY\\^]N8.6ITSSTL<DTSQNKIHHA:7:=?=952/1;HONKKHFFFEB@???@<8;=:8>@:5331/04431/02437;:898765210/144311.,,/2784/0462,,/48:88=?=;86:?A@BDDEFFD<88876686345:==10]|e@>3++.)5IhfQG=0-.,.78.*)))+,/10.3.1L^kgO946:>DIKJJKG<2=NB3204:90,7UoiM@BB9389,6RQHPZTDINLVO8Tx]XG;=4-(+6R\\WUNNMDCJC<:;;6,()*.2.*-/.-*()*-.*(***+068:98720/..+,01.+-7DLJKG`nd`ZXK.#&&TTUWYYZZYZZ[[]][YXXWWWUSPOOPPPQSSPNMNONKKLLKKMNLLMMMMLKMNNMMMMNMLOQQQPPNMKKLLMMMMNOQSRRTTUVVWYYYYXWRMKJJJLKIHHIJJJKLMMMMMMOOOOQRSSRRTUUSPKGDCDEEEFGFGGHGFGHHGGGHHGKQUU[fkjjklmmnonlmj^QLLNOMKIGFEFFFFHJKMNQUWWXYYYZYXUSPMMLLMLKKJMPQQSUSTWWVWVSQPNKLNMMMPPPPQTY[[[YXZZ\\_``bcbbceeeeddedcdgeelbUUUUVUTdu[^`\\XY]`WMT[XVVUUUTTWZcgYUXXZ`bg]YWTQ]T^gime\\\\\\Z[ZWVW[[XWXXYXWXZYYV\\{}zxiadflvzxxxwupmuwxjWZa^\\aheb_^YTKGLR`kovzqq}|taVX`inhZRROOXeowxhSXbfefblEEMJHDC?=DEADEGJNOKEDFHGCBBABBAAACCDBEU]RC?DGEA?<<GSOGDDC@?DHE@=>?BCCDDELRSRMGFLXRD@@AABDFCBDHNLIGDCBDJNLIHGFDDDDAABCEGHECEB>Lcoqha_``_^_a_ZVPLKKMNOOOOOOIDCCEC?DIMMLJLS]XE>AAACEJOSTVXYZ[[]^^^^_`__^`abbcdb`\\VNIECBBBBAHYc^VJFS[OCCGIIHIPQMQNBAP\\bgihiijifa^[UPONNOLHIJGJT`dfZORYVTSTQR\\bVIECDJQWZ[\\ZRMNOPTSLB?EMPSSUW\\ZSOLIHHJLLJGEDBDB@ADHGFWt~yncWLJKKLLIHOU[[Z[UIAACCD@BXpxu[FEGGFGHEFONHPsvdXVUUVVUUX]`_]\\bjg^WVSRRUTRSIPƸƳĶ÷t`t{|}p^\\giceif^[YWVXYYXYWUSSRSQNMLLJGELVV_ttjhfgghgb]\\]`_\\_gkhb^\\[YXVUSUWWWXXXZZWUTTTSRSUZ]\\[ZXWY[[WUVVTTVX^`WPPPQPPTWWTQRTUWWWWVZ__^^\\XXZ\\[YSSTOX^]QLNSUMHFCAFOTW\\ee_\\^dedc_XV\\]^^\\[WW[R?8:::8<CFDABD=V~kYKJLE?=<==>ACEDCDMag^TJFEGB;9:;;<FPIGNQPGDEEA=;;=BEDCA><====<:9:98756=>AOWSOLIB=E]uMBI@CG8>@FA73555>DDA>825;;8779EXgsrf]eeI6=G@;DH?IiUAFF<BFE@857>JSW[aeaRG?=AA=:<878<?<7456:DKMOQW^_TG<?FD=:9::99=@BBCDD=7:@>5122246879<>???ACHKIDA?;725:=A@<9620235;>=;98745<?>>>BHE:7;<;<>DE<59@@>@DDBBFNSTUUTSPF;999989::88;?DJJGGKMLD98;:=@?B@7C_jedaZQAEae[[XOTR88LIEFELNFAGQSSQI;30-16438:6/-288103425;76@EC?<;::@D=2,:\\lWA:=EB8336558;88BCABB@?@GPUNDB@=;87:977;==>@C@>82681/000/,3HWUMNX_a_`X>4008ENRTNFMTUSRPMKJGEC@@B@=;7413?KOLKIGGGECBBBDFGBCE@=@A<41111247975667<A>7676872//016<=94420/0011.*,/0/.0235445<?>=;993.2;ACCCEB<889:8698558853+1ev~aKJ7*/71?S`\\KE600/.3>A6))++-./0003/CdhaZP@778;@ILPXVPI=BPG3/05?D>53CSK;<BDA<?=0=RPOWVQD=CNWP:FwvXQB:A=9445RlifebYQSQF<9884+(+--.-.//252-.//1/,-/./26799760-,,+-..-,.04;AGSP`dLCD?8-*)&VVWYZ[]]]\\\\^]]^][[YWWWVTSQOOOOOOOOONOOMLMKKKJKKJKKLLLLMNNMMMLLLLKMPOMKLKKKKKLLLKMMNPRRQPPPRUW[[\\\\]]WOKIGHIJKKIJKKKLLMMMNNNNNNNPQRRRRSTTTSQKHHIGFFEEDDDDEFGGHGGIHGHKLNU]bacgjklnppnllni\\OLOOMMKIGGFEEFGIKMORUWWXYYYZZZXUROMLNNMKJJLNNOPRVWWVWWVTTRPMNQONNOOOPQSTUUTUVXXZ]_`aaa`accbbbccbbgqkkm]XVWZ^[W`j^[YXY]dhUO\\ZPRRRTUTTUSV`df`_bYYa[YWUV\\T\\ddie\\]`_][XVVYYYYXWWVUVWWYTZxvmdhlkry{wqsyzqsxynZW]^]\\\\ZYYY[^XQNQZdolkt{yk\\WSSZa][SQNOYhsyweMPYjhjsfB@CEDCCDDCCDEEEEGIHCBCDDCAACFHEBABCCELSTNDBCCBA>:>GMIDAABFJIFD?>?@ABCCCEHJKLLGEBAA@??@ACEGEABGLPPKDBACGJIGDEFFEECBB@@@@ABBD@AWjkppiccdcb`b`\\YTNKLMNOQQOOPLDBA?CNURJECFIHLMDAAAACEJNRSUXYZ[\\]^^^^_`__^`abcdfaWULDFGEB@AA?GX\\WVK@FPJA?@IRRQTPMNG?ET_dhiijjjjf]VROJFEEKKFEHEFRcd^PMSXTSTRNO[]LABBDIPWZWWTLIGHNUXPB=AHLQX][[][XRKGHKLJIHHHFCBBBCGKNPSbzy|uYOQOMKLLIGPU[YXTLFBBDDFEBH\\kgQDGGGGHJGEIJGNkt_^[VVYWWdsvttqg\\eomhb_ZVSRRRSFͳ«ȸű{nnpdbfhfehje^[YWVXZZZYXVTTSRPOMLJGEHSY^mtkijklheb`^`ed`cmtod_[YWVVVUUWWWVXWXZZXWVVVUTSSX]^\\ZYYX[ZWVVUUVVY^ZSPRRRQRUXTRQSTUWXXWVY__^]ZVX[]_\\UOOS`aXOLT[XSPKFDOTXdjgccfiigffe^afgc^ZXVOKG>88899=GLLD@;QuUPPKEB??>>@DIIHJU^SIIJIJKG=9=>>@MQIRfaVLKE?>B@;?EEEGDA@AACB>>>><976888:BLONJIHFBHhY4899AD4;DJJ@6687;=;;87@QZVHA><Sic_]\\aeR77FRH<?A99]ncTSUXMC<324:DGKRX]^YK??IJJIF>77>C>8765;B@?MZ]b`XNHFHLMB;7358:<>ACFE=9AG?3121247868<@A@ACCDGHFDC@<3359?>84201557>EGC;5535=?>=>AD?109<=CFLPF87;97<ABAADMUWVTSRLA:::9877998;EQYXOJMQQQM<06<>@ABA=Hbnkg\\SICRZOIICDTUDGRJJOGINHBEIGGF?82038;;:>=6008=7112007;208<<<;:98AGC7,5LVH;89>B@?CEC@><;=CB==>??BIMLE@?;:;89?=9:ADCCCB<23127420.003DX^P?DT]cgeP3/1107BKRQNSSTTTTRPMJHGECB@@?<9647DMOMKHGGECEFHIKJGGFA>=<831222379730.-2=@:7999:7005889>=:765544420.,)*,/13543246:=>@BE?-!'6?A@BFA;<@AB=:;:6682/,'.XnryLMM<0/62<JLA@G7.1/03:@7,))*./00233>SWOD9;ACB?;=KPR]Z[e`SPD..59;>BA::A@<::@A:860<MKU`G<K@5BOPKKh~cC;30=GF=32Trqqwr[RQA787772*(-/.-,,/1442101131,+-25799:981*)('(*.,('*./-/<SS_^E;:2143-)WWYZ[]^^]\\^_^_``^\\ZWWWVTUUSPNMLLLMNNMMMMMKJKJIJLKLNNMMOPONMLKKKJJJMMLKKKKKJLLKKKKLMPQQONMMORUYYYYVTONMMNUSIIKKLMMLLLLNNNONNNNOPPQQRSSTUTSTSRRQOMMMLKIFECEEEEFEEFHJIGLW[WW_fjlmoprqnmpng[QNOOONLKIHFGGIIJMORUWWXYYYZ\\\\ZYUQMLMMNMMLKJJMPPTZ]WSVYXWVVTRSRPNOONOPQQRTTUVWWY\\^`a^\\\\^^````aaaadoguxXUY^dhbWV[_`_[V_hdSS]\\WQQTTTTRSQU]gfefaT[^]^dffXWZ]]ef\\]cc_[YXWZZZZYXXVVVVWWQYufimloolpw{ykmxwjftyrf[Z^a][YYYZ\\^]WQQQSYYSZmsaUVXVUWYZZUONNYlz|zdLLTmbS`^LDABDDCCDDECDEEDCDLRKFBABBBCGNSKCBAABFQVPICBBCA@AFNRQOHBACMVQKHFJPUOHCCDDB@@CEDCA>=>??@@BDEEBBHMQRQMIEEFGHFBDHHHIJSVSRQME?@CACRYLWvxkhhhfbb`^^VNKKMNNPQOOPNFBADR^]SGBACEDEGECA@AAEINRSUWYY[\\]^^^^___^_`abcee^ROEAKSLB@AA@FRRMMG>@GE@?AGPVYWMJJCBLZbehjijjjidYQQOICB@HKDCDEAH\\g`[\\]YVVTOGLXWJBADFFGMROIDDGDAJVWNGCBBEJX_ZX_cd\\PIHKMLLMMMLHFDCDGJNOHUz~^JOPNLLKHGMPSQLIFDBBDDEEEHLOOIFIIIJLMLKJIHTmiPZXVWX[l~ytjahpmifb^ZUSRTO{ǹƴɷõ¶|noyidfilljhec^ZWVUWXXYYWUSRPPNNLLJHFP[\\htokkmrnia^`aeiddmnid_^^[YXVTUWYWWVXXYYYXWXXYXWVRVY]\\YY[YYXWWUUWVVY[RPRTTSTUWTPQSSTUXYWVXZ]\\\\[XWZ\\^aVPLSVZYRNQY^`^WONLKKYgggknomheeihehgeb_[XVJ??=<:88;CLQQJ7<v~bUQOKEBABAADDDBAFMHHIGHMWQD?EHC>EKT``TKV\\P=:BD@DFEGLKJIKLMHCDFFA967:<:9<EIIIJNKA=K][C:<:9=<6AGHJG@<;:98:;?K^hg\\KAACWpgTRXYI86>FHB<<?A?Jho^[]`N>74458=ABCO\\[M@=BOUVTQJCACD@<;98996;R_]`]NEMRX]]N8155478:=BFB=>CD;2122466667;AA@BCCBCCCDCB@A?;<<852346669>DKH;1026;;87=DD9/1:@@DKOPG<9767;>>@ABJSSPRSPH?;::::75756CWbc\\TRTURPQA.4ADEC@?AFTeiaSG@FM?4537EQRPPOJJKFHMICDEADD:558>?<>>=;60189300/07ED64:<:9;:9:?DE??B@A=658=BEFHHHD@??=;<>@@ABDHGB??;49CFILJ@9<BCAA=5/.0/2551.25=O\\XD47@M`ohF//10027DNPQSTTUUVUTPLIHHGECBCA?<98>JONMJGGFEFIKLKHHFDDB=416971/163.,+*+3<>;;===:636<<999999:998:<:40/-+--031111248=DHLOE0%-7=@ACF>:AGJG@<=7573,),+.=Ij`>BLC8/./796/0B>21.,-382,)&(/100247FLEL@9:?DDA;=QTS]]bmo_M=++8=;=FKGFFFDA>@?61337DMWT8&5GD6;KWUV[M9/+%*9EE71ChqoutWELE876652,+//.-,*/2110/0//11-+.39;;:983+&'(()*--*)+--++1@JWTGEB71/0-+YYZ[[^^^^^^_```a_\\ZZXVUTTUTRPONMLMMMMMMMMLLJKKLNMMPQQQSSRONLLLKKKKLLLLLLKLLMMLLKKKMOPPOMLLLLMMLLJJQY_efispZIGKLMLMMMLMNNONNNNOPPQRTVUUWVVWWWWWXYXYYWUTROMMKJJHEDEFEFIMLNWadfhiklklnrqpoj]QNQQPPRPJGHIIIJLNPSUUWYYZ[\\\\]]WRNMMNOOOOMLKJMNNX_[U]b`YXZ[ZZYUQOPPOPPPRSUWVWWXZ]``^[Z]____``_a`bebko\\U[hspbTU]\\a_WT]dZV[]`ZRSUTUUSRUYX[Xafa`ca^gzwpUYYX]]a\\Yagd][ZZ\\\\\\[[[[ZYXWWYSWtb_afmtqkpy}znowsbZdoswob`bba_^]]^`cYQPQPNNNMRVTTXZZZYYZZXSNN\\p}|z^JLQh_CBGDEDCDCDDCBCCCCCBCCHUUPD?AAAFKPRLCBDC@EUa_QEB@D@?IZ`ZTOJHHEOZXUPNRX_b\\NBAAA@@A@AABCA??@@@BDBABEIMQSUURMLIGIICCHILRYbdeeedYIAA@B@@;Muonmidd`_`WNKKMOOOOPPPPKFKX`\\TID@@CFJJGDB?>?ACHMRSUWX[\\]]^]]]^```_``bccdeWGBDSXMBACCAEOVQF>:@KLFACGHLX[PLKCGT]cfijjjjlkaSPUTSOHAFJDABCBDUgiif`YTTPFAJSTPICCFC>AJIA<AIF@HSPIILJFBEO[\\`jpnbUOLJMOPQQPPOJDACFFHNHIf~mcXGGIIHHHFGHIJHCBCDCBCEEEEEEDEEHLNOQRQPNLHKiu^V[WYWS^ztolkmqlheb]XTRTKgǺĻĿƺ̺Źz¯rduuplchuwogba_ZXVVXYXWWUSRPNNNLKKJHJZ`cpuqprwxngeeeeecfjiggfdb_\\ZXWUWYYYYXVXYYYXYXXYYXVRTVXZZY[YWWWWUWYXWWSNQTTUTVVUNMRSTUZ[YWXYZ[ZZYWWZ]``OKKWQKJNRX[^`]ZSTL@H^hksxuoia`kmef~|sf`a^YNEA??><<>CGKJF6MwtlTMOKHGF>DS`VA@FBAGKIFJ\\dWHFLLD?EQ]ZE<;@AC<7=EEB@AFHGFGLRUPIGJKF<78<?@@BDHIILQQFCCDEDEC@<<:<CGGFFGC@EJMOPVcg_SE@=BKTa_`ho`<4<:;:<=>CFB@R]^[VZK;76577<AA@Q_R>>FOX_ZRNLJJGC@?@BCDAAN\\ZTZZG@RZ\\XLC>GMA79;<<>@@?AB@:3124677645:@A@BCCCCBCDDBAEFA95322365446:AIH9//38:977>D=5108FFBJPH?=>;;<=???@BEIIJNQOG?<:::<;95.5M_^YUUWURQNIB:;FMNLB;?CGUaYJ?>F>3116FPPQSSNLLLNMKIHEBDHE=:@GJC=AA??80/42/12/4BQNB@@>:999;=;?HLMD754.09BGFHJJGCA@@<68@DDCBDE?8768DPVZZYULB?BA?>941.0/1563037APWM>756>Qhb?,02./09FLNQQRTTTTUUSPMMKIGEEECC@<:<EKMLJJHGFGHJIIHKKIJIA64:<95332112579:<<;9899767:;:99668<@><;>@>61120,-45-/22/-4BNONNF86<;=ACCE?>AFJGA@@6396/+.3547`O<XdJ81139:3-(2:95/++//+))+,031022245FPA>@ENRG7CVTU\\]hnpcE?<5<<AJLKLJB@BDGKH?=?<23DJ>1*(9H@<KWTH<7:;<3%$/@EF?YomqrQ5CL:6654210000..-,+.0/...-/332479::743/+()*+,.021132/-,-/9A@>AA81/.-+Z[\\]]]^__^^`a``_^\\[[YWWVSSSQQQPONMKLMMMMMNLKLLNOPRSSSTTTRPNONMMMMLLLLLLLMMMMMNMMMLLMMNOMLLKIHGHJNVblpuvuyx^LJKMMMMMLLMNOONLMNOPPQTWUWXWXYYZZ[]___`_^^^\\[[ZYXTQMKKIHKMPWadeca`_]]_enporsj^TRSSUVWTPLIIIJLNOQSSTVVXZ[[]_\\TOMMOOPPQPPNKHILRVZ^elhYVY[_caZURQQQRQQQRSSTXXVX]_`a`bedb`aa`aaacddcca_bhqmaV[d]]YW]`_TUhgYRUUTUVUST[^XSU^dgkhaT_yzrXXY]bVY[V\\eib^^_`^\\[\\]]]]\\ZYZXU{m_[`]\\fttmoz}zsstlb]]abnwncbecba`acfbYRQRSQOPSTWZ\\\\[\\\\[[YY^_VP^u}{wWIMP^\\F>CFEECDCEECBBCBBCCCCCGLMJB@@@DJKIEBBEE@EUgl_LBDB??Pa`RIDFGFDMVXXTQPNQ`h`NC@ABCDBBAABB@?BCDFFA?BFIKMPQPRRNHGIHEFGGNZ_`abaa`\\RGA??>?AGttqrmhg``bYOKKMOOPQRRQRPOY_[RJCBA@AFQPGB@?=>@CIMQSTWY[\\]]]]]\\^```aabccdeicKBLTLDBBDGEGU]RE?>DSZSJFIHELWYVK@JY^cgjkjjknhZKJMNVWKBGJB=@CCESekgb]WNJFCAIORQKCBDC?@GKE@EMMGGHGEFMSODFR_^`mtpcUOLKNPPQQRUQJB?@BCCFHHJSPBIECCDDEEDDEEFGCABCCBCEEEEFFGHIJLORTUSONLHK_cQUUVWXV\\~{spoooqlhb]\\WRSPTоŽͿȸ½~sìyng|ywylam|xkd`^^[YXYZ\\ZVTSQPNNMLJJIJISbfpzuqutlllkjikospmsulc^ZYXWXYZYYZZYVUUXYYYXXXYVTRSTRVZ[ZYWXYWWYZZVSNMQTTUTTSOKOQSY[]ZWVXYYYXXWWXZ_a]IGK^TCGWb`\\\\]][[XH?G_u{{ukfgZ`tlakxaYWSPNIC@?@@@???@><VulpqcfbLFJIHGHHd}rMYgQ?FNOOU_]NJKKLG@Y\\QE:;:;@F=;DECBCFHEC@BHR]ZQKJHF@;<BDFEDCDFHKMF=AIGEEEDCA@@CHHIHGGHKRajib`aYJA=@@GT[YXex|ZINE97=?AC?<;=FY\\Y\\M;54456=@@@TZC;LTV[`YRPKHHE?;;AGLQTTY^YSX]RMSOD96>Vij[G=<;:9;?@??>922346788759>@@BCCDEDEFFCABF@633234422328?EC5-0579::>CB711/9JLGJLA=@@><;<>@?@AAABFLQMD><;;:=CB81=SUF>AKPHDNL=?FCGNPSOD?CHRXPA:>>5225FSTTTSRROPUVQLIFCACDC@CHKHA?<<CF=422/.4746@KIFJC:8:98:;:>HLB8300-/8DLJILLIC@><;9;?CCBBB>70,0D[a^__[WOKRXRLF@?;2111122226BPO@::9825KM7+/1.-3BIKMPOQSSTUTUUTRQPLHGGFEEC@=<AHLLKJJGFEEEFHKOQNKJGD@:89;730378:;;9899889998777::9889=?<::<?=71361),561356306EOMLLFCFGA>@@BHGDBADEBB@649:4106668UIL|}Q96;=<=5/,).53/.-.,+*-1202330,,'5WG49HT]`T>BRNPRRfrtjKEE??=FOMHLJ<358?KPQL?>>0)..-,(.;ER[UTRE>@CEE<+'5HJ;@]lxoM/8F:9AA97542/..11*'+2542211334455785210.-++,./279::40-,-/12357861.,++Z\\]][Y\\^^_``_`a^\\\\\\[YY[XSRSQOOOOOMLMMMMMMMLKKLOPQSSSSRRSSRQPOONLLKLLLLLLMMMMNNMNNMMLKLNLLLKJIMS\\acglrttttzxfUOMMMMLLLLMOOOMMNOPPQSUVVTTUUVXZ\\^```___`aaba`_^^^\\\\[Z[]acfeca^[USTUX^elpsspme[TTVXXWWQMKLLLNNPRRSTTUWXXY[\\WQMMOOPPQQRRPMKKLMQZ`im`YXY]bb\\XVTSTTSSRRRQRVXVX\\\\]^aefb\\[_da_cfdddccbcdddeb_ad]Y_eie]WQ[fiaZWUUUURT]_[VY^`fkg^POdzpVWhojWXYWW\\ge``deb^\\\\]]_a`_][[XZpnUP\\^WRR_ntomv{|rqlc`_ahaXajfcgebbbccc_XTSSSRRPRX[\\\\\\]^__^ZY^ebW_vxuTFMRXWHAACDEDDDEFCCCBBCCCDCBBBCEB@?ACED@@@ADEABN_iaLCCAJU^`WE<>ACCDKNMRPIFCBO]c\\OGBACHHEBAAA@@BGNOIB@BDEFHIGEKOKFEGGFILLQXXUSQOMKKKHDAAABD@Muusnlb`d[OJKMONOQTUTTTVYVTNJHECBBCSVG@@?>?ADINQTUWY[[]]]]]\\^_`aabdcdgefgODQPFDDEEGIOYVHCFEJW^]VKHLJHO[WC>O\\`dgkkjilpfREGIGKPMIJH@;?CEGMYcbXSSKEDDDHLLLJEBEGFFINNJHKNJECCEDCKPLNV^VO\\lpeQGIKNPPPOQRRI?>??BABFID;_wE>DDDDDCCDDDDEGIECCDCCDEEFGHIIJLKKLOSSOLKKKLMNPRSUSWYX^p}vsolnsojga`WSUK°Ģü|t˾xmotszucfuvkca_]]][YYZZWUTRPONNLJJKIIM^go}{tu{nlkjjnrx~y{xpd[WUUUVXZZZ[ZXUTSSUXYYYYZXVSRTTPQY]\\YWYYWWZZXRRNNQTUTTSPLNQRU[]XUVVXZYYVVXYZ[_b\\GFKgbJYprf^YZ\\\\`SBHN`qsbTQZeVduedx_MJLNQPF@@DDCB@?>AF_bTWYXWOBBGHIHHjvanrRAEMV\\[UNNQLJLIE_TB9?BEHQMABJKLLMPMIHGHM\\fdb[PIFC?@GEDDCBABGIB52?MNGFEEDDCCEGHHIHGKT[gke^[SG=?CA?EOYYPXbm}sdjY<7?BDA=99=L]`[ZQ;24547=??@JG@KYTNX^XQWPHE@<86=EMTTUV]cbef_PC844;CUennX@:::88<=:99622345579887:=?@CDEGGHIIFCDD>85556874665;>><4-0679;=BFB7101<HGGKGACD>988:=?AAAB@@BIMH@>=<<;>DD??HMB4.2?F<6BD78B@@BELRNEBGQRG;876764AQSRRLFENSOOOLIGDBBBBB?BHIB:625BE>863/18<:68><AJA319=8669>@?87985786@HGHIJKHA=<;=@@AA@@=72-,=[ga`b]VTLGQ[XQJCA@7221001238GPF;8689/(15/,/0/-4AGIMNOPQRSTTUVUUTSOLJHHFEEC@?AGKLLJJGDB@???DHGLKKLKC86894003554336876:@B@95137:87::8997558;:73276/+-./0026;?GJJLKHIKKE@=:>LJIHCC>7754554/.03355CL{~hQCBA>;40.*),,.000/..0242010,)**R]5+9CS^`_J<DFHFAR_ccSF;9<?FIIILH;55534HVI0.?;'&,-)*3:=Oa]_gd[UVRF<50BMD31H_paPB=GD?@C>;732/.0450,.599886530////25322110,++++1;@?<40.////1366430-***WWWVUX\\___aa`bdd^[\\[ZZZYVSRQOMMNNMLLLMMMMLKJKLOPPRSSSRSUUTSQPPNLKKKLLLLMMLLMNNNOONOMKMNNNMNPT[\\ZYcimjflrtvyzwlZNKMMMMLLMNOONNNOPQQQRTSQQQRSTUWZ]][[^`cccc_[YXZ^`abbcddc]XVTRPPRTUX`eiorrrrpk_VVWWVVUSQOONNPPPQQQRSTVVWZZYTQOOQQQPRSTUVSNJJLQU\\geb`_^^]\\ZWTSTTUWXVUWWY\\ZY[\\YYY\\]\\Vcpdafedeedcccdcccdb^[cnkba^WTLXkdYWUUUUSV\\\\YYY][`kf\\RKY{oR]yzra]YWWXdiggjg`^^^]_bdffca^`c^[]ZXWTOQYcpsmnz|pkhba]\\ov`U]efiiddeda^\\YXWWVUTQRWZ\\\\^aedb_]]_bd`cxzUGIQXTFBBACDDDCCCCBBBBCCCDCBBAAABA>>@A@@@@ADCBBFS^XHA@E]okbYD<@ABDEGFEIGBA@>CLT[ZNB@EKKFCAAAAACKSQICABBBCCBBCHKHDEGFFINOMOOKEBCCB@BDCDDEEEI@y||ytpfad^OIKNPPPRVWUTUUSRRQNJEDDBAQXF>????ADIMRTUXY[[]__^\\\\]^_aabccdfe]RHGMIFEEEEFLSUJ>DIFLW[_\\PMQNLRVI<CT`cfhjkjilpcI@HKHGJLLKI@;BFFHHLZ_RJLJIIHGGGGIIECEGJHFHPPGFHFDBCDCACJMKKNKCJ^lfSDCGLOMLJJJNH>>??AAACFFAHYUKIFDDEEDDDFFFFFGFDDEEFGFDEFGGHIKKKKLNMKIJLKKKLORTXWSTSKJ\\mrrokgn{ysxudTTJzĹƩť~ym{{ntxxi_hmf```_]\\^^ZWVTRSTSQOLLJHJKHIVdm{zztnlkklpy{{~{ia^[XUVVWXZZ\\[XSRTTTSVWYYY[YXUTTTROW^\\YYZYVWZXRNPPPTTUUTURPRRTVUSQTXXZZXWVWY[\\]_cYFDNnjUnwjd]UT[cI;CUf`VC99M_VepgtcLKOPTQHCGHEDHIIIKTmbWVSNMGDFJKKMPx~|yjbYHBCEP[[PQZVIFLWdjV;8DHIGECACKOMIEDHKOQTXeihml`UMFCDFDCCBAADHF<4;GOPLJJHGEDEDBDFGHGKNUdgcb[G9:BDFIFCILJLU]otwqN7:@EHFHJGVZTSMIH;24446;AB@?:E[`QNX]WPZZNG>:99;AKOLNU`lojaUB77=??<<CWeXC;::97767777543333567878;=?DFHIIIJIIHEA=;957;=<>>;9>>865228<<=?CFA70/29><AIFBFE<6668;?DDCEDA@CFB?@=:::;=?@CF@6224;@;536558:87:>BDDA@HK@7503=AAHNJFB=;<ISMECDGHGHFDFD;;?DF=35<AA:630/5<>:7896:B</.8?;88:=:8:=??=@A::=@EIJLNHC?<>@???AB;51+3Pjhbdd\\VRLA=BGD<9;<8531000118HOD9458830//01101128@HNNPQRRSUTTUUUTTRPNLJIGECCCCFKMMLJFD@=97358?ILIDA;67653004544468866;?@;3--38977:;8664335788746982.,-,*+/8BKPNLKIHJMHA949KKJOLE8+(,01/,()/12376U~ofOC><;41-)*,,.12310/01570,+(+(3R9\"6:.;OZ`M8<EGD;79;>@A==<?GEGJH?<CGA4/8>6*'/9>83468<<44Lcfkl[I[pP118BJSCEMLSORSNQC0/655322245335547::99875000/../012230.,+('/>C>:400111259986541++-NNNMPW]__^_deegga\\ZZYWWYYUQPONMLLKKKKMMMLLIILLMOQPPQSSTVUUTRQPOLLLLMLKLLMLLMMNNOOOQONPQQQQPRTTQORY[]cilrwwwuvxn[PLMMLKLLLMMNNMMOOOOPQQOOOPQPQTVWUUZ`a`_^^[VSSTUUWWWWWVRMLLLKKNRTUU\\fhkqssrrsoeZTTWWUTTTRRPPOPPPPPQSTTUWYXWUUUWUSRSSTVWWTQONOPRW[]`de`\\ZYVTSTTUSZ\\TY_a_]Z[\\\\]YWTVT]wijhdcddcefgica``]fto]UWWOOORVYZXVVVVTUZ\\ZXZ]Z\\hjYRT]tqQ_zxth_YXYV_hkmmf]\\]`acfijjgc_gha`d`URUSRUYgrolz{ieccc_Yi~wd\\`gjjhfeb_[ZZ[[ZZYYUSY_aadhlfcdddcdgeg{~d[LKSPDCEDCDCCCCCBBBBCCCCDCBBBBBC@<>BFFC@DKKECCFMSLA>?ATnsjdTB?ACFFEECCD@>@?@DKSXQGCEGGFBABAAAELNIECCDDDCBCBCFHFDEEFFGIECJMLKKLHDCBACFFFHJOFTČ}{zwqfebTIKOPPPRUVUVVTTRPLGCCDDCCLNB>???>ADIMRTUXY[[]__^\\]]^_`aaaccd]MBCGECCDDFIKKQRG?HLDHOPVYTTUPNUR?<LZbefhjjiiln[DAHKLNMMMPOB;CKHFHHQXMHKKLLIGDAFJGDCDEFD?BMNGEEDDBCCCDGIGECDFEIRYZVKCDJLKJIGEFD@@@??@BBCDFEDEIJFDDCDDDDFFGFFFFEDFGIIFDEFGGHIKKKKIIJJJJLLMNOQTX\\VNNMKJRblolidv|}_UPi½Űƾåǰ~osgkoc_`^]_^]^][\\\\ZWTRQSSRPOLKJHIIFN`kv}zqmlorrs}|~|reb_][YYYYYYZ\\[VRTVVVUVVWXXYYZXVSSSRV\\YW[]XTWVQMOOPRTTUUTUSRSSUTQRVXYYZXVVVX[^\\]`cXEBPodRp~xoff\\XfoJ7@YgSH>26DXZkjieSPVTQHCHNJECJNRRSUbZSXQKGFHHJLNOQ^x|_OLIFB>GTXSW_SABLd{zP6<@CCDFQNEEB>><AILQVZ`dccknfZRJFFEDDCCBCHKGADLOPQQPPNJFFJIDDFGHHFHTdkppZ:4=ABEE@:>HEPesrsw[66@AEIKPX^gV=>=9==65786;FMJA<CWa]\\^`XDUZUK=9>=<CLLJLUfrkYKA58>>954-0DMJC>:986425888985465433678;<?FIJKKJJJJKF?<><57=>?CC=;@A72788?B@@ABC@9102456<FFBFE<55448@EGFGHC?>?>AC>:9779=@@?96;<989:5013336676789<==AA:5326>DB>@@:=EIJLPMDAFLKKNOI@=:65;GD;>CDB>94017>?:8;<76;;67=A@?<<:67:=@A@?@>;=AEHINQMJE@BB@>?ADB:2,8Xiebca[WTK=13:713:95641/....1=KH:9DE<885566335632<IQSRPNNPSTSUUUUUTRQOMKHGEDDDFIMNMKGD?;740/8ELH?74455452/2;;89:952488642,-378786887655554469<83567:<963223<FJIKKJKLLJ@1-6GJLTOC4)')*+-,+*.1/2>8Ck]YLA=<:3/,*-13687632//.45-+-)),<8 7Y= )7FQLCAKUPH@4+0>DEF<>FCCB<7>FIC?>60-+)$7VVA9<=;80)8SYesdWf~j>/74=^^bOCLMOQSR<'+01035569810699889965886441.-++,,.02222/,1?C<43322357;?=41585.-1IIIKNRZ`_]_ca^^_`^[WTSSSVVQNNNLKKKLLLNMLMLJIKLLMOPNNQSSTUUTSQPNLKJKKJJJJJKLMMMOPPQRRSUTSTTQPNLKGIT\\ailnsuvwwvwxl^PKMLKKKLLLMLLLMLMNNONNMNNMOPPQQPRVXUTUVUTSQQONMMMLLMLIIJJKKLLMPPNQ[bciqssrsupaWYWWWVVVUSQQQQQPONPQRRQTWXXWZ]]YUTTSUUVWYZZWPNOQRTZ_b_[YXWUSSTVVXZTV^`^[XZZZ]_\\VRSYgmht|sohaaafln`[YZeqn`WXOIHIJJQ]\\ZXXWVTRTXYY[][Z\\`VQallcQ^z{wf[WZ\\WZ`abggb^]_fijmnja^_a^[[[ZXWVRQV[aknpywe^`bcb[avxi_djjjfc_ZY[\\\\\\\\\\\\]\\UWellknoebmkhlmngh~rVOQNFDFEDDCCDDCBCBBBCCCBBBBABBA?GRVTPF?DLKCAACEFB??>?E\\ke\\SD@BDGHGECBBA>>>AEJORPLGA@CB@@ABBCDEC@BCCCEFCDDBBEGEEECDDEC@AIMPTYWK@DGEDFFGIHED;泇}recYMKOOOPRTUUVWVUTPK@<@CDEGFEB>>>=?ADIMPRTXZ[\\^__^]]^____`bbdbQ?;BIIHFDEGLIIPPHFKLDEIIMRTWYTRWP>@Q^cehijjjjlgVHEHLNPQRSVSB;FOJGHHJNKKLKKKHE?=DKGBBBBBA@CGHFEDEEDDCCBEIGGEDFJOOMMQOJHHJJKKJGBCFEA?@ABDDDEEEEFGECDCCBCEFFGGGGGEEFGHIGFFFGGHJLKKJIIJJJKLLMNOQTY\\RKLLLQ[hnlljhuzxvqgYQUïǶƾ¯ǭlh{uh}fb_[Y]_\\[\\][ZXXWTRRRPONNLIGHGEFVfn||plrrrtzymid^[\\[[\\\\[[ZZXUSUWZZYXXWWWXXZYVSSSSUWWV\\aWTWRNNOOPSSTUUUSQPQSWVUWXZZYYXUVVZ]`\\^bb\\GBKcULqgWhpqtoO;I[]QPH8=?MZiZU||xdRXYNEACGJGEDGNPPMJOZZYOGIHGGFJMONLas|ZPRRPHBIRUTT[K=@Gd{A6HJB>=Pa[H:;@?AORNS\\`abeede_TNJFEDCCBDFIILNOPRRRTVVWVRLE@?BFGGIHIQYcpvgI26AA>87FF=OXZcsxtcB8CDAEILOYb`G2588>C@>??=BJNMKC@Pafd_^YBOPUUE;?==CJJJMWjjYQE65<:7<FH:3=?ADA;64444678::868;842247;<;@IMLJJJKKJID?=>;68<=<=AA<>C>657?HGCEFDB@@=4/48:>DEBDD=64536?EGFGHD>;;:>A>:9:;:=BA<57CG=447522212478788659>@=84238<=738?CMXYUONNEBQSOMJQJ54@>44BKFBDGHGD?:69??<;<=99?BBEIHGE=;:557;@C>:=?@FLJFHOROKJLMKHEEDDE?2/=Xca_^ZTSPE813751/54258531100/6FF=HRMB:66775557930;JSVUPKHDHRTTUUUUUTSQOLKJGGFDDGKMNKFA?>;96:GOL@5/156668628?=::950/386311/289876665676665557:=;4037;<;:98649=8?KMPOMKI>-*2<AKK>72,)()*+.....,/?A6]hHGC?=;81-**/579>A?:621/1/-/1-*9JHI_uG#&+0:KUJKZYROB8=LD@I=<A;6569@@>?BC?>6*(/GbhYB7765449CHVlptz}~_8/36Tge@9XXOLPQ=,27749;::;60058:;:87647;=<;61/.-,+,,39<:854=D<.0743478<@=0(/66335GGHJLQZ___\\ZYUQQX[ZUTSPMNRQPOMKJJKLMLMLLNLJIJJKLNONNPRSRTVURQOMKJJJJJIIIIJKMONOQRSTTVWVVVVVROPMIKS[`ekpqoqwxvvwul\\ONKKKKKKKLKKKLLLNNMLLLLMMNNNONOQQNOSURPOOOONMLKJIJJJIJKKKKKKIIJJJQXW\\jrrqrtlcgk[VXWXXWVUTTRQPQPPOPQQTVXXWZ^_YWVVUVVWXY[\\ZUQSRRRUXXZYXXXVTTUW]ZVYWX]^WUXXVU\\d_XZ]XPRlzliijhcXYeflh\\ZXXOIJKLKR[[ZYYWVTRRUWY[][ZUTTR\\ejYR[}c^]`^XUWWVZaeca`fnopqh[[^^\\[[[YWWVSQV]dhilqnbZ^bdd_^l{|nehhhfda[Z[\\]]^]\\\\]Z[emprqpgaosmuwj`irbUTSOKHFDDCCCCCCDBABCCCCDCCCCCA@CUddYOHCB??=<>AABFLNJGFIOTNEABDEIKGECCCA?>>@DJQPMLIB?>=?AAABBC@>>ABACDDDEEDBDFEDDBCBCBADJJMQONNIJMLKIHHHFBF9^ۥ}id`RLMNNQRTTUVWWVUTNB=?ABCEGHE>;<<>@DHLORUYZ[\\^___]^^__^^_abd`Q?>EJMNKGEFGCEOQIFKNHHMLLOTUXRVYL>DU`dfhiijjjjaRJKLNNPQSTUOD@PVLHGGHGIJJHHIFC>>DGFBBAABAABCDFFFGHHFCBADHHHHEDHNTRLOROJEEHLMNJEFJHAACDDFFFGGGGFFECDCBBCEEFGGGHFCEGIJJJIIHHHHJLKKKJJKKKMNNNMPRTUYYTOLLPXejigjqzvke`VVIðȲ}xpgnxsa`a]\\^][[\\\\[YXWUTRQQNMLLKHFFECL^ep{qsuuw~zofb\\XWYXZ[[\\[YWVTSTVXYZYXXXXXWWVTRRRRRTWX]`XTTPNOPOQTTUVUSRPNOSWWVYZZYXWVUVW\\`a]^bb[HAEQFHvtMFayzePMEMQITZTFK@>LRB8Xy~nu~`Y\\J?<?CFEFEEFLSVSN[yn]NGNIEDDGJKKNOT^dZ]`aaTOOPOMKKB@CD_w@Jbd]RKY]WE8:D><IQLP^bYXghUTYRNIEDCCEEFHLKINPPRRSUWXYXVSJ@><CGGHKTXUhuiK63:C@;DZgO;\\zmW^tuT>R[H>DJKQY]Q=69:<>B?>>=<BDHMPICL\\e\\MNQP]KN^YD<<>AFFFJYfZMZD26?CL]ms`B69CIE;5334688789779;843347;<;?EJGGEFFGHEA?98988<=86?C87EG816CIIEFHHDBEF8/4<@AACCDC>97756<ACEFEC@@>87;<9:CC:9@>507CLF9565321016999:7007==<9424:<758AMVZXSNMNMDAIKLIBIB17II98GUTOMOPKEB>;@C??@?>>AGFADJMOMB<<9778>E@9:=BINLGIPSPJMWZVTSQJDA>54CW^[[YRNNG<30043102224:;89993.6@=:BKKB83675345793.5BKRVPFC99BMUTTTTTTSRQOOMJIGEEFIKMJD@?>==?HPQD4.059988<?=@?96852024458:86466776568::99988778996645//356643652;HPUQMJG>.+-06A<2152/--**,+,+--,<C<<hYEB>=<:400,(+0103=DE>94223661,,EEWdtxB+/./8KYMIXWLF@@JVD7DED=1/8;<C=7<<<HMA7=JRU\\`L659:?ABCDFZnpw}|O264D[W><VZNHLM;/8<;<>@@=;4/158<>;666457<>=:854333339?A><959A;)+9844789:;3()/58;:IIIIIR]^^a\\SOMJHKQTUUSMKKORROLJHHJKKJKLMMLIIIHJLMNNOQSSRSUWUQNLLJJKKKJIHIKKMOQPQSSUUUVWXXY[YSNMLLOR_lojhfjuxvvvusjZNKKKKKJJKJJKLLLMMLLLLLMMNNOPPQQOQSTRPPNMMMMLMMKJJIIIIIIIIIJIHHHIMRQU^gilstnhoqn`ZYYZZXXWVRQQTTSSRQQSVXXXZ^b_ZWXVVWWXZ\\]]ZWURQRSUUWYYXWWUUVUXXV_[V^^TRURNMUejaZ[VXdiz}{|lXQ^u~kh]\\[UQLIKMOQSW[[ZYWVTRQSUY\\]\\[WRRRSTZURYmzpbab_YTSTUV\\cec_bjqtrha`bd`][\\YVSTTSTX_feehg`^]addb`cp}wihjmjcZZ]adc_\\\\\\\\afjnststrbjxy{lTQkvKFPONLMMIECBCDCCCE?ACCDDDDEDDDDBAK\\caWIDDDBBGJHE@@GPURLGEEORLEBEEGGFDDDBA?>=?HOPLJJJE><=AB@@@AC?<>ABACCBDECCBDEEDBB@ABAAFLNQPMMNPRQOMJIIGGIKC=̪gecVNMMNQSTTUWXWWVUQGBA@@BDHKH>9;<=@DHLOQTYY[[]__]]^^^^^^_`bd_VQNIKONOJFEC>BORJFKPMMQQOORSOO\\ZF=L]beghiijjji]OLOOONOQTUTMFM[VNJGFFEHIHFEFDB>?CFECBCBBAABBDEGGHJJGCAAEHILLGCGNVUMQVRHCAGNQNHHHIGAAFFFGGGHHHHFEEDDBBBCEEGHHHHDBCGLNNNMNNLIJKMLKLKLLKLNPPONPTTRVaaSKMOVafc\\`jzoa_YXLk»¼Ĺǳ{tpjh|yf^`dc`^[Y[\\\\\\ZXWUTRPNLKKJIIFDBGWajzvuuyxjc`[VUUTTVWZZZXUTSSTVWY[ZYZZYYVUUSRRRRQRVZ^_ZTSPNPPOQUUUVURRPNMTWWWZ][YWVUVVX]cb]^bcZGAAE@?]iQ>?SdZH;CEEA:FUYRVA5:;82Ccylpuc]K8<@A@CCDEGKUblcViz`MB?GHFBBGLJEFILHHZicca]\\TMQL>;?CJITnlQ`v{o`[RG<;<=65ANJIYXLJ[`I@NPNIECDDFHHJOMHHLQRSTVYZ[ZZYPI=9AGHHPZSPovU86;BE=Jj|eIUwy``sv^S`eRAAHKV^TB9;><:89==<=;65=GHECFO\\O=>K]iH?OVSA:<?CC@HZbWZ\\?>AG]mqtxqQ75@KF<52347:97887898633348;<:>CDDEA<?CGEA=31688:=96<=35EE:2;FIJGFIJFCBA803<BBABDDB>:988669=CEDCDFE?:;??BHC86<;44:@GJC:66410247:;:71-3::899625;=76CRX[VLGNSPHCA:8?B=<:5BQG8AU_^XVUPG><<>DGGFHGFJMK@44=FIIE??=<;:=CE?;?DIKKJMRSPJJT[]]][UMFA99DSXXXUOLJ@5/.-.0//00149:;;::1.58642>G?77884245894--2:LWRB;743>OUTTTTTTRRRPOMKIGFEFIKJC>??AGKNRM=//59989;>AEE=4453126526=A?964378657;>=<;;;:976679853336542212326CLUSMHE?5457<>;8::4471(')))*.25=>;<?A=99<<9424/('*,*)1>JKB713976204C37Biq70;7=BALIHUXG<?GT_VA:??619C@<C=5;;:DGEHSZSLLI@8:AFMKHGFAMesw|kC9<>GGKJGRSKHC637:4;AB@>940159?@<667545<A?=;98988;@BDC@?;58>5%)89557965871+.4<><IIIHJRYY\\_WLIJHFGJPSUSNJKMRRPMJHFHJJJJLMLKIJIHJLLNOPRUSSTUXZVMJKJIKKKJIIIKLMOQQQQRTTUWWWYZ\\\\XQNKJHM`hfgc]dsxwvttsk\\OKKKKJJJJJJKLLLLMMKKMMMMMOQQQQRTVUPKKNMLKKKKLLKIJJIIHHGHIIIHHGGHKMNNQVZ_fg`^ehkeZYZZZZZYXURSTTUVUSSTUWWWY^a`\\ZXWWWXYZ[]]\\\\YYWVUUVWYZXXXWWWUVXW^_^a]TU\\]\\^abdaZVSawmg{kmopq`Peyvfca`aXTQLLMPUSTY[[ZYWTRQSWZ]\\\\\\[UQRRNNSSWTg{xe``_YURRUW[adedacgiif`^_ad`]\\[XRQSSRSV]``cecbaabccdceku|xifkpkf][_dhg`[]__dhlqy}tot`]svlUFNlvIMRIDEIJHEBBBBCCCHEABBCCDEDDCCCAAO\\ZUNJBAEKWej]H>>AFGIIGDDIQRKEDECBCDDBAA?@>BMRLGFFGE@=?A@??ACB?<>AAABCBBA?@@BDDDB?=>ADHLNQRQPOPQTOTQGJIEAKJEBa¯sfdXOMNNPRSTTUWWWWWTLGDAABDHLH?9;<=?DHKOQTXYZ[]^^]]\\^^^^^__bc]X`_MJPQNJGD@;BPSIDJRRRVXVTUQIL[XB>P`deghhiiiifZOMQPPPRSUTOKHV[SLHFFEEFHECDEEB@@BDCBBDDBA@@@ACEFGIJF@?@DFIMKGDGJPPIFUWJA>ELMHDHHDB@BFFFFGHIIIIGFEDDCBBBDEFHIIHDCCJQRPOPRSPMLLLKLLLLLLMOPPONQTURWa_SLMOS]c^XX`fa_]_SW¼ÿ~Ƴ~xrpdiyof_]bfeb]ZYY\\\\\\YWUTRPPMJIIIIIGDDN[fxxurvxlda_]ZYXTTVXYYZWUTRRTUWYZZZZZYYUUSRRRRROQW\\_^ZTPNOPQPSUVVWTSQOLNTWUV[][YVTUUVZ^da^_acVFA@?=<<?:==CE=;AA=:758HQVQA7659@JWfhjf[M:6?EB@?ACEHTiwvbRgzXI==HNJDCGPJEEHGFHYqzg[acUPTN<9=CJKITd`\\l}u`\\P?;@IFABMQIDNNLLPVL@IQOIDBAEHIIIOMFFJQRSTUXZ\\[[ZQG=8>CDGRZOJ`nM46AFFGh}qbi~~sltxpfYUdN=DHRTG=:>?<989<;:;:348<;;<?HRJ>BNfbD55LTL;9?BA=DY`\\g]QXYWdplegiT>7<B@;53248::7677887655458;;;=@@AD@;>FHFD?734678<><967<CC<HMJJIHGHIFEC<636=BBCA>?@;8888867;@CCDCDIKGBDGIF>88;;;>@@DIE;88412575589755:;888:846:;87IYSLHBI\\]OHJKA:<@=67@OSG?I\\ge_]YSKA<;=BHNQRPQTRG9//46:=:9>BBAACFHEBCEHKMNQVTRMECISWZ[YXSJ@=?K\\[USMKG>5//./22201248:;;951474455:>;:::73134793-+)2GUJ=663329GPSSSSTSSSRQOLJGFDDGKJC=?FKNNOMC73576669><:@?72220/251.2<BA;74368447==<<=?=;975568964458642212233<CSTLDDBABBEC:48>:1193''&(*.05<<;9964879;<;8:91)'*+*+1:AJKB30779;>D<24-FnG4<>G>44?BOTE9?KX]\\R;224<CFB>@=9====9AOVXTL?23?DEJTSIBA@CNfpbvS9868>KKDMKC=4247:13AD=9:9788<>>;456433:@?>;8789;@EDCCA@=68<4'(155788558::526;<;HHHHILOPRURKHIIIJKOQRQNKKNPPPPMIHIIIJIKMLKJJJIJKLLNORTRTUTSVWPIJJIJJJJJJJJLMOPPPRSTTUWWWXY\\\\[XSPMNQ\\abaZYiuvwvsrpfZNKJKKJJJJJJKKLLLLMLLMMMNOOPQQQSRQPOLJKLLJIIIJJJHHIIHHGGHHIHGGGFGFFFGLQTUZ]RPYYWXXYZ[[[[ZYXUOMOSXXUUSRTTUX\\_^^\\[YYXYYZ[\\]^aaca^[XXYZZYYYZYXXXZ[V_ie[T`lqtxvpmj_TQ]syots\\RYagfal}|o\\]llijd`\\WOOPTSTVX[\\[ZWTSUY\\^^\\aeYQPQONRSSKQ`kjd^]\\XUSTW\\`dhebba`^\\WTVY_cb^]YSPQQRSTWY\\cgedddcdfhkf`kvkbgmmhd^_cfigc]^`cgjnrzvdgZO^^QFBOmsQPQGA@@ABBCCBBBDENMDBBCCCDDCCCB@@JTOGCB??GR_lqbG<ACEDGIFCACFLLIFCBABBCCBCDHGFJJHFECAAA??@@>?BDB?=@BA@@BC@>==>?BEHGCDJMQSQLMRSRPNLIF[bMIHD=EJKQJgd\\RNNOOQRSTUWWWWXXSMJGEEDGJG@;<<=@DGKNPRVY[[\\^^]]\\^^^^__`baYXadTJRYMCEB?<FRRIDLTXW]aba]RJIQM@DXbdfgghijjiaTRRPLOUVUXUOJIPQICFEDCDCEDCCDEDABCECABEEBA@?>@ACDEFFE@>@CDDDFHQKFEEA=N^WC@CGFDAFFB@BDFFEEFGIHIJHGFEEDBAACDFIKMKGEFMSRNLNQRQPONLKLLLLLNNNPPONPSTUY[WPLMPTUZXWWZ]^_a\\P˵Žrroct{idba`bca_\\ZYYZ[ZWUTRPNNMJGGHHGGDHSbuzswwmgedca^[ZZZ[\\[ZZYWUTTTUUWXXXXXXXVUSRSRQQOUZ[]]WQOOPQQQSVVVWSPONLPUVUWZ[[XUSTVWZ^ba^_bcSEBA==;767;>>>>@BA<:899<CHC<;@>:IXWUY[RG97<@@?BABCEI[qvnZI]zaLGWa_SLIJKJPTI=@KWqjb`RR]^L@>?DJP[jeXT`ed_\\UG@ISWVW[XM@DMVSJEDIQSQJC@?BGHHJOKFHNSRRSTVXZ[ZVPH=7;>?EQUMAH`K49HHJVozv{ty||y\\LedI?AA?>@A??=9=A<99=;96766568>DJMNUl]B?BKN[ZOC?><>EHV`efda`^__ad_OC>=;986446:<;9556779;<;87;<<<=?@@CBAAFFEEGEA:678;AB@?EQL<?TYRNHJLJHFFI@77:?BCD>58=:67:99:::<>??=>EMNFCFG@87::59GH>@HE=9512446512;BB><;8889988::88GNC=:AV_WOOQOJGFC>67JWSPLFPckf`[UNF>:;>BKY\\VRPHB?<=97<;42;GGBGMKHHGFEGIPW[[VSMA8;CHORTXZSHA@GWXRQMID@<63576:62235::98754665469659<9651023562--+0@H<23323./7DPRSSSSRRRPOLJGEDDDIJC>@IJHJJA647::988<>:65200/000340+/:@>964367036;<<<?A@=;97578865577875434456:AQYOCBDFGFC7,,6:811:6.,*+272289763424:<>>@EG=0'(+.-1337?CB:34<@EML<:@51RW<9CA1*&,2<?:7ALQRUVG63<EC@A=:;>@<<=8ARSUXE8<>HLKKVUE627>CHPBZ\\>3,2;BDIC4133448?ECBIE;;AC@==?<71141017=>=:65679;>@BA@@=7794+'+17==636<?>:668;;HHHGGGHIJMNKHHIIJLNPOONLLNNNQSPKIJIHIJKLLKJJJJJKLKKNPQOPSQJLRRNLJIJJJJJIJJJMOOPPQRSTUVXXXX[]][VRPOMU]\\X]istuvvtqmaSMKJKKJJJJKJJKKLMMMMKLLLNOOPPQQPNMMMNMKJJIIIHIIHHGGGGHGGGIIHHHHGGDBBEISXTV\\]XVRORWZZ\\\\]]\\\\\\]YPJHJLMMMNPQRVZ]^_`^\\[ZZYZZ[]^`ceffda^ZYZY[[[[ZZZZZU[ecWRcljpuwz|r]RRYqu_RQ]hophnukhV]xzqmgdcb[QNPSSSV\\^^^ZWVXZ\\]^^fkXOPPOOPQQPPPUafb`a]WUUUW[``\\\\^`a\\UQRRUY_c`^YSQQQRUWXX]eifffhfdgnqh`k~rbcihd``bgih]X]`agmpuxwz]]ZPOMDDEQojGIMHC?>@CDEECABEGQOFDEDCCCCBBA@??DHE?<;;=HPPXcZD?GNRUVRIFIIFFIIEDCBAABCDDEIIFFGGGEB>>A?>??>?@@??ADC?>@AB@==@CEIOQSSTVWWTLABPWVNEAEHct\\DCD>DSWRIQpc^TOONOPQSTUWXXXYYVROLKHEGHFB===>ADGKMNRVX[\\]^]]]\\^^__``ab^UYhsiYSI@@A@<<JUQIGMV\\_bekldRLHH@<I\\efggghjjji\\QUXPIOY[Y[VMHEDEBACDB<<?ABABCEGEEFGFCBEFCA?>=?ABCCDDCB@DHIEB@JXRFFIIGKY[JBCDDCBDEBBCDFGFEFGHHJLJIGFFFC@@BCEKQSOKIKNPMHHJMOOPOLIJLLLLMPPOPPPNPRSVYVPMMNRTQSTUVZ^^_fOo®Ĭ¾~~niqh_la`accb`\\ZYZYYXXVUTURPNMKIGFFFGFFO]o~{u}tjfffc^YWX[[[[[[[[YWVUTTTVVVVVWWWVUSRTRQPOX]\\\\[UOLORRQRUWVVWTNLMMSVUUXZZ[XTRSVY[_a`^`b`OFCCDB?>;9<>?AEEAAE?;;<;;;97<II>FWYVTOD=9=A?>BHGCDGLU`\\TLCVv^RUgnkaVPJBKZ[F8:DTne[PRW_ZI?;;H^lpqiM?>T`]YUQUY]^\\YZP;7NXG728HUVSKB?=>DFGJPJEJRSRRRRTVY[YSOI>67:=BJPI:@YL3<KHIPSm{pxrW_`I:9::<@DB@BFIB;;@CA<977666549EOMTf[Q]aMHctiJ;;;832F]ggaZ[YSRWYOFCA?=:97657?@?>>=;9:?CEEB>?>=><<>>ADFC??CHNQH94:>>ADEFHJC8=HHDBEKMKGHIIC99=@CCA<559856<=;987789:;<?GKF??>;88<<13GI85DKC7//3556733>HD>=;887899;=>=:BE<:8DWQKRK@BHLIA<9<MVPOK?>R^WNIECB@>><;GZ]UPLB@GHGFEEA;9?HD@KSMGFCDGGGM[d^WQIC@?@BCEIOUVLCCEJNNMLGCA@>;:::;954458887:=:96543343793.-./12340-.04982000011126@KSSSSSRSQOLJGEDDCFHB<<==@GC<999?FB>@A?94/--.157788634:=<954367/46:;;<?BB@=;84578766:8:;643489<AFIRSG@@ADF=0-165327?91311483022220,.4<BGHKPM<+&(-/14301542:@>?BGPLA><892??@@0)+('*-215>EFFPYRECEA96855:>?:9;:BNNSWB=QQMJJKUO=1/2<D:;DPshD9*+@E>;616=?>>==MWOOQE99AIIB=83-*,--.4:==94234531:FEA?;9862.))2=FD817??;612599JJIIHHIIGKMJHHHHIKMNNONKKLLMPQOKIJJHJMMLKKKJJJKKJKKLMLKNSQLIJLNLKIJJJJJJJJJLOOOPPQSUUVWXXXY[\\[XVTPLMOWenonquvxxsk`SLKLMMLLLLKKJJJKLKIJLKJMNNOPQPQQONOONMKIIIIIHHHGGGGGGGGGGHIHHHHHGFFFEHLPSWZ_`ZVVUUUX\\]_^\\^^_^\\WMFCDDFHJMOQVX[^^^^][ZY[[[]^_]]__ab_\\YWX\\\\[[\\ZZZXYY_c[Zcd``htvoeYROZtwdYZfqrsxojigokdevwnhc`ac_QKQSRW^__][YYZ[\\\\]^ccUMPPOOQTSQQRQS\\^^de[UWVUXZZXXZ^b^VQSSSVY[]]ZUQQQQUZ[Z_ffegghhgknle_i}~j^`]abcehecTQ_cdlrs{}~_WXPLLHEFUn`BEGEC?=CHGFDBBAEIONKKIEBDDCCA@???ACA><<>?DJNW_VHEJLORUQJKRQIDIMFBCB@@@ACCBDFFFGGHHFCBA>>=>>>>>ACFGDABEEDB@CJMOQRSQPMKJKLF><ETWJA?CRk|fBBGFFONAF8Ѫ~j^RPONNOQSSUWXXYYXWURPNLJEDFB===>@CIKLORWXY\\]]]]\\]^^_`aaaa]PXnyziM>?@A@??KUQMMNUahdbjpfQLG@;AQ^effhiijjjfZTVUNINTW\\\\NCCB?>>>BB@<>AA@DHIJNOKIMNHDDDCCCBAABDECCCC?BLQNHBBHQNPXZXXQLMGBCDDDDCCCCDEFHGEFGGIIJHIHHHGFC??DJPUVRONNNLJGFHJKKLLJHIMPPQRSRPPPPPPONNOONNNLPURORTVY]Z`]W´ɱľuxqfgm^^}qf`_`cdea][Z[[YWVUUTUSRPNLIHFFEEDHWj{wpxynfdda\\WTUXXWXYYZ[[[YYWTTTTUTUVWWXVURTSPPNR^^[[XROPSQQSSUVVVWQMLNQUUVWZ[ZYVSQTX[\\__]\\`aZNIBAIGB@>;;:<?DGB?DF@>=<<;:<CPOCBKMPMGA@ACBCDGLLFFJLMK@:AAVk[\\^dhkk]SNKOYN=89<NltlaYQPSUJA;;SmtzrR==T`\\\\`dc`^_]W^T5:NXG7:FLOTQGCC>;>@DILGENTQQQPMGJUZXQLH?779=@FIECNZG6>ECDCBLo~||vz}yutbZF857;>??@CMPKD<;EKKH@=;:977833<EIOUQVh]BFXXSG<9<;9CS\\``]WRPJDEC>CHD@??=<979?DDDEFC@@BEEEFFA>>==?>>AC@:67?KRQ?07ACA?BB>;7358<73:@CFHIGFD@9:>@@?=;;85568;>=:867758>@>DIIC;7<BDCB=;DF;5ALF724887767:?@>>?;987667>EF@<AD@?=CKHHL<-2BLE<;=DOQLJJD<@C>8559?BCBAEOYWTVSEACABIGAB?@CDCDMQKE<9AHGHGMbdWSOJD=;>@ACEJNJECCBEILJFBAA@?:677677768:==?@>=;853223575.-/03321/./25533431/011114?NRSQRSSQPMLJGFEEFHD>;66=BDIJA=GOIBB@<9521-/8=<;<;<:99:95112650326:<<>@@=;83,-57679:;;:645:?@@GJ@=GG>>@BD>94.-//08>5.033342345651/146?LPNRL:)%+30064003306?CCBFHFB@=8>2,582'%.1..14359<<<GVREB?952//69756678;DHQWG<EOWNHKXJ1/758D;7MSgfDB5/=E<15@IMGHOLCFZb]XO=1;QYXUG7>;7616<73210/012/*6KNB<><8431,.9AFG@89>>8.)-142KKKJJKJIJJJIIIIIIIJKNPOKKLLMNNNMIHHHJLMLKKJJKLKJIJJJJIJOUURMJHHJKJIIIIIIJJKMNNOOQRSTTWXXXYYYZZXWVTMJOYdggkqtuwyuk_VOMNONNNNMMMLLLLLLLPSSPNNNOPQPORRRRQOKKKJJIHHGGGFGGGGGGGFGHGGGHGGGHGFGHINUXX[[\\\\ZUTX\\_a^]]^]]^^[SLHDCEGKMNPSVY[\\_^[YZZ[]^__^[VUWXZZXVX\\ZWXXXXWVVV[_^__ekghni[VZXS`pj`iy|vsrtn`Vblgmjiy|vnc[Z`g]MOSQU]]ZTTY\\ZUXZ\\XSWSNPONNS\\VPQSTTURO_neYXYYZ\\]YXZZ^cZPRSTRTXZ[[VPPPQWZ\\]`aaefeeehiihg`h~wcd][[`fihfZXcccnrzYKQNLLHEHYpX@CBAA==@EGDAAELMKILOOJA@DFECBA???AA>===>?AFOUSNHEINKIIIGLOG@BJPG>@A@???>?@CDEFGHIJJJG@>==>>==AEGIIFFJLHC@AEJJIGEEFFECBCDC@<=HKIE@@Ys|jIEGHFGFAB9D⽜zaTPOONPQSTUWXWXYYXVTRQNJBFG@;<==?EILMPSWXY[\\]]]]]^^__``aa]YYYZd[E@CBCA@@JRSSROP\\je_gnhREC>=IW`efgikkkji`WVXRKIIGLXWE;=?>>>?AEKU\\XLDJX[[`]TMPSNHFFFFEDCBBDEDDED>?LQIFCDGJIVe_Z`WB>BBCDDEFCBACEEEFFDDDCDIJGIJIHHHGBAGOTTUTRQPMHHHFGIIIIIIILQUWUSSSPOPQRNKJKLNOONLPTTQSTUVX[\\RǾ˾ƿvutojgf_hqifb``fjf`^]]]\\YWVUTTSSRPOMJHFEEDEM`v{rr{qiegd\\VUTWXXXXXXYZZZYYXUTTUVWXXYXXVTSTPNPOW_[XWUQPSSQQUUWXXWUQMMPSVVXYZZZXVSOT[]\\]]\\\\baZNGB=CDB?=;88;=BHE>=CB@>>>>?GMQNEBBDFC@BEFEFGGFIKHGMOMD:@PNdype\\cikj`URQOJ@9898E^bgsplg]TPOHEAB[pu{`OLMR[ZZ`fgdaba[\\N;IS[XJIPLHMMDBB<8:<AGIEGPTPNNKC;BPYXMB@?;::<?BAAJPRB=?BBB@BHg|~{swkK7457<?A??D[aL:7;DHFCA?><98=?87<AEEC?HTE>[iTB?@?@AJX^[YZ[YNC<9741>NKCAB@>;889@FEBABBABDDEFGC?@@@BAACA:767:DOH30>C?<<BF:335218;<?DGGJLE<<=;<AEB>=<:9669;;<>??<<<88@DBBGJE<8?LRLGKKHIHCDGC;9<=;5349>=:=@><;86523>JIA?CDCB@AGIE@9-,9EC?BFLOJIMJD@<976437?A@DPZ\\ZXXYRB<97:A?<@?>DGGGJHB=55@GHIA@YdZWTL@55=@ABCFHHFCCCDGJIEBAA@@<779:87;>BC@>>>??<85456227544335443212465357876632347=FNPPQSSRQOMLKHFGHHGD>98;DKPQKIMMG?:87668747?@<::;:6568752025401//49<>@?;41-*/576767:6126>JQMCDH>0299@IGFDC=328878510243321247:8555528MQOVO<+(8?0*/.,+05944AEDGG>@CCEB9,-,)30261-136=?A@=::9799983./79/).1/.08;BIA<9Fh_NLRF1.533C=6NX[fS@EB;57635=EIGLSTPMZjkhcQ==JOU^R@[[@;69@;1**--../206KN@:AA:64115<BDED@=>>5'$+///KKKKJKIHJKIIIIIIIIIKNPPLKKNONNPNKHFHJKLLLKKKLLKJJJJIJLNQTVVUPKHIKJIKKKJIJJKMMMNPQSSSSVXXXYYYYYXWVSPKMNOXgqrswvtrj\\ROMJKMNNNNNNPQRQQSVZ^_[SPPQRRQPSUUTTSPMMLKKJHEDEFGFFEFGFFFGGGGGGGGGGFGHHHKQTXZ\\\\\\\\]]]^_][]]]^^__`\\XOHHHJLLLMPSV[_^][ZZZ]_^^_^\\ZXVYXSTW[XUUVUTUUTUVVYYZ_ihb^ZW[a^]hqpr|xqrohd_W`ddjfbjqph^YZajbROQOQUVTQQVYYSP]iSFQRNNOOMW_VPSSTUVPGUrnc\\[\\\\\\^ZX^_[a^RPUVVWZ\\[[UPQQSY[\\^`_`fgfdadgiifag{jdmZX]_emsllqihqipTFOMKLHEJ_y[BAA@@?=<@DDABLSULJJLNICDIJGBAAA?@AC?====?AEHHEB@?L^ZNHGFFD=9<EJG??@?>?=<>ACDEFGHLMLLHB?>?A?=>BEGJKIKLHA=;<==<<;?INMMLHBAB@>?ADECA=XuwRGGFEFEB@:/uԯlXRPOPPQRSUWWXYZZXWUURLGCFF>:<==AEIKMOSWXY[]]]]]]^^^____^]`[LEGHHHFDCBA?HOQQQPJMajbdfXLIB;@OYaehjjkkljfZRW\\ULGECFKIB?=>>=<::DZkncPHN_dfkaVQNMPOGEIIFB?>>ACCCCB??DJDBAACEO_g__dWC>@CEFGFFCDDDEEFDDFFC@@GNMJJIHIKJGFJPRRTSRPPNIFFFFGGGGFIKRWZ\\WPQSQPPQROLKKMOOONNPTUUUUTUV]Pg˽Ȼ÷ÿytpnlidciwzoifecaild__^]]ZXWVTRRSQPNMJHHFCEEHVm}x{~{vnijhb\\YWVWYYYXXXXXXXXYWUSSUWZ[\\[YVTUUQNPQS[ZVVUTQPRQQSWWXYZXTQNORUXYYYXXXWURRX\\\\\\]]\\^b_YJGD>:==<;99:;>BHLG><@?>>>>AJNJGC@DLKB?CGHDFHGDFHHGHQM?;Mkmztdfnmgb\\RNK?97899@OUU\\iph]XQLHJIEIWir_?>JSX[WPMWfjecgb\\UX`WdpcVTPLMMJC>9769>GJGIQSLLLC:9?LYWD7=B@<:;;;;<BDDB@?BEB?CQpvzb=9=::<>?@AEVgX=;?>>><;<:98>CC>>@@@>=:9AG[q{oVHJJDENTUVWW[_\\J72532=NOHD@?=:766:DHD@AEBDFFEEEFDCDCCABC?<;;948=828?=::;CG:48:3.3>FIKOQSRK>:=>@AHPOJF=78=<;<=?@A@>=<;>CC>?BA?=@JSOHKNLMKGE@;;=>?>6369<;;@BA@>96410:GIDDEDBBBDJIC@=4/5=DIMNMIGMN?6=A>9888:>?AL[a_^]VMD:767;<=<@A>FOE>C>5447@GHF=>JSVVQJB:=>>?ADFGHFDBDFGHFDBAA@??>;>>77<=>CA<<=??=8459;208888766777435776468999654458;>DINPRSRQPNMKGEEEEEFC@@DKHFLQOMIC;42332669;<;::9<;5135655324400/,.4:=@?:/**.367752593*-9GPVUGCD=-)-6AHC?BED@ACB?:65532000//5<?>8574-4KOUYI8//>?/(+.-*/3767:BJFA=BINNF9-.,,:=52.-.49ACDFJI<4118>;30178/'(+,+,////2;8>irTE@;=3,.2<95GVVTF9:;989877766>MRTTOUiuzygPFDCENOLjsJ1-3;>70/-.205CE@HI=;AB:6400/5?DBA@=;91*)-./0KKKKKJJIIJIIIIIHIIIJMOOMLKLMMMNNKHGHJLMMLMMMKJKKKKKJJMQQRUWWTQOLKIHKNLJJJJKMMMOOPRSSSTVVWWWYYYYYXVSOJEGUhrqt{zpjdWLJIJLLKJLPRQSUVWYZ\\^_b`ZTSTUUTSSUUUUURNLKLLMJHFFGGEEEEFFFGGFGGGFGGGGGHGFEHKOUWZ]]`cdca`XQY[Z]```acd_ZVQJIIKLNOSW\\^_]ZY[^`_`aacc_\\\\ZRUZZXTSUSTTTVVUTVVVVWXXUTZdgaap|{}}tkkomfdb_acacb`a`]ZZ\\_jn_QPQPRSRSQRTUUWUhlPRVRNNPMXbVOQUTUURNNizka_^]^^[W`ha\\]WRU[_a_]]]UQQSV\\ZV\\cbcfgfdaafjieaanx_phb]\\hrsns|ws|od}zRGOMJJKHKecMCAAAA???CFGJQSQLJJJLKJLPNHCBABBCDECA??@BBAAAAA>=PgdUKHEA@?==>?@AA@@A@>>?@@ACEFGKPNHFEAAAA?==ACCHRTPF<;;:;<=@AJY^ZQJGFBAAABDEEECA>LdxuRGFDDCA?>:6=ູ_TRQQQQRRUVWYZZZYWWVSKEFFC>;<==AEILMPSWX[[]]]]\\]^^^_^^^]]YXWRNPTTOIC@?@GJJJJLHBPaef\\KGK@9CR[agijjkjjhcSOW\\UKFEECBCCCB@>;:>AIZb^WOJHQZ`_QKMKFJNHABIID=:<>@A@AA@@@CCA??ACUjpqobSFA?ACFFEC>ADEEFGFFHIGFEFPSOJGHIKLKIJMQTTSRQPOLGEFFFEEFFHLW]\\\\XRRSRPPPPONMLMNPPPOPTVUTTSUWQOÿʼɼ}wvromlkees|uqkggfdhg`^^\\[[ZYYVTRQQONLKHFFDDEDLbzx|~xpnja[[[YWWZYYYYXXXWVWWUSTTVWZ[][XSSTSOOSTXZVVVSQPPOQSUXXXYZWTRPQTWYYYYXWVUSRXZ\\\\\\]\\\\^a^WHHF>77:;:9;;<@CHRTC;>====>CIIED@AMRMD@CEEA@ELKIHIGAKH:8Celzpjomec]OLH>97679>GMMKWdZMIGJLOOE:BZ[B5=EP^_VJEXnrkmvtmmplchzu^SYWRPPK?777:?ILIKPOIKF:8<?JSL;;ED<999:::=>?>?@AFHEABRvpmy}jM;?C?>===@CEGYZGCC><?=<<<=?CA??>=>?DID<BUoyxtj^RLMKFGNUVX[fgT=68;AHMNLFA>><735:BJNMLKEFFGEDDGGEDDDBBB?>?>832./8>=<===?<6368:87<HLNRWXVRKHE?=<?O]]WQE?@>==>>>==<;<<<>?:67;??<ALJ@>ADE@;<957:<@A?<;;;99;AGD@:55536AHECEDDDCEGFFGC=88<HPPJFDJOG815>=305=@>DOY^^`^RE>;7899:;?<<@@JTA493/356?FGD=<;<DNVPEAA>:;?CEFFEDCCEFEECBAA@?@@??;769835767;@CFB;89:649888767876314786457753012237899AJNRSRQPOMKJGEC=:9=?BDF<8CNPMIA;8321-./01115:>@?933444444552//2039:=;7/+.25667535;8-0>IHJONHE<-+,:D?8:?<;=>===<;:74210//4=CD?6142+5HPUL:44871024742357:=6:HG@IQV[Q>5/.**093/234:?ABBDN[VKB=<;>:32681+*((2<7//..8::SaL926A6+-4778@ILF8202;CGMQLA988LWYaUJWj|oSJLLILQSUvtF/<>72/30.:BFPOGJI=7752011,'.;A;9;5..12.-./1KKKKKJJKJIIIHHHIIIJIMOONMLKKLKKLJIHFHMPOMNNMKKLLKKKJKNPQSTUUUUSQMHHJKJIIIIKMMMNOOPRSTTTVVVXYYYYZYWUOLIJVfsww{}m`]SIFGJLKIIMUXVUUUX[Z\\^_``_YTUWWXYWTUUSOMLLLLLMNNMJHFEEEFFFFGFFFFFFGGHGHHHGGIIKOTY]_`]Z\\YUMIVWRV^a_^adffda[SLIJMPRTW_`_]Z[`aa`abdffa_ZUZ_\\YURTTUUVVWVUVVUSSSTUSV_bajy{uvrjefllfddcdc^^_^][YY\\_akp`QQQRTSQQRRRRUVY{oUY\\SNPMXcVLPUTSRRROYxebea^]ZW]ik`X[\\UW^a`]\\]YTQT[\\WOUdgggfeddbfljfb]e{^pxl[`otqno|rwkNHNLJKLGKf_JEAABBAA?CJLNNNOQOKJJKLNNKGBBBDEFFGHDB@CFE?==>>><J``TLIEBDDB=<;>@A@?BDDC?=;;<=>BHMJCDFDDBA@<=@ABM]^O@:;<<>BIPUdpkdWKFBCD@@CFFGFDC?BJWVCFECA@=<:<96`廤rUSRRQQQRUWXXXZZYWWVTOHEEB=;<<=@EILNPTXZ[[[[]]\\\\\\]]]^_`^YRSVWWXYYWSJ?<BHIJJGEC?=E^kUFHJ>;JW[`gijkkigj_JJUWPGDEDBCEDDCA?GP\\_ZZYVWXOCELOG@@FKJJMOF>EPK@;=>?@BBAAA@@A@??BDPds}u[LGDA@AABA@;<>@AACFGEGGHGIJOQMGFHJJJIHKRURPQRQLIGGGGHGGGFIMX^][YWUTRPONNNNOMLNPQPOPSWWTRQSUHtǺö³ϼƾ{wusqqppjgn}xwsnhgfed`]]\\\\ZYZZYWTRQPNMKIGFFEDDEUoxw|sqqeXVY\\\\ZYYZ\\[ZZYXWVVUSSTVXXXXZXVSSRQOQTUXXWWSONORRRVVXXXXYWSRQSTWYXYYXWVTSV[[\\\\\\][\\^a]VHHH=57:;:99;=@CHNO>;=>@???FNLGD@ENMGB@CCDD@@HOLJKH>>>976AHgjgrldbWKJIGE849<@DIHCGNG><CMSUQIBENHAOZXZ\\\\UR[nvrpyywwskbfiZNWYTRSRG:99<BIKKOPLJF<7:>?ADA>EF;678:<<<>;99>CDIJHDALvs^fyE?@@?>>=@ELMJFHMJEBBBEEGHJIJC=><89=>HPPMPYfnlfllSHUM?DMQTV\\ddVD<=BLTROPLC?@=8438@FMSUOGECBCCDEECBDFDAA??A>73422:??@BB@;53247@CBBEJSWWURRRQMB>CA@Sbb^YNB>????=<;==<<<<<85458:7;EB525786456669=@BED?<<979AHD>956863:DA;>EFEEDCDGHGC=8@PTJAAEGB<<9466/,2<AEPZ]^\\WJ97>?<=;76:@<:BGMUK:328<74<EGC<9834FWO@;89;>@CDDEEDCBCDCCBAA@@@@@A>;856730//19@FLJ@:97898888767544425886456752001269954>IORSRRQQQONHA<6202799;53;HOMC;<;510-,+,..04:?@=;865456568631487488753014676664357:87=HJKPRNK@/-.=IB>IE85;989;=BD?BFC;3/5?BC<200/6:AKH;7769427721126899677@OMLNQPF632-*)+0./7:<?@@AABHSZb_O;1;C=5670*++&/EI96<9:>=@A:0,271+,16::500.-139JPJR_YE:<FZ^[hbF@LlrIDOPLKQG5T|gJNN8+),215KZVG@HK<,)()./0.(-7912:2&(251--./KKKLKJJKJIIIHGHJJJKNPQQOMLLLKKJHIIFFKOQPONMMMMMLMLJJKKMOSTOLOQPPMIHJJJIHHHJKMMNOOPRSTVUUVVXYYYYYZXVQOLJSmzyz{}r\\VTJGHIJLPTWXWVUTVY]\\[^```_\\VUYZ[^]XTTQMFEIKKKKKKLJHFFEEFFFGGFFFFGGGHHIHIJKKLLMOSX]dd^RIIJGGORNPW[]]_bdddfhf`VLLPSUX^```__`a``abehiheb^_`]ZXWVVVVVVWVVVVTSTTTUUY^`guyqotpfeikheddc`^\\\\^^^_aaa^]dg`WRQRRSRRRQTRRZYtXUi^UPMZcVKPSSQPPQPPixb_mj]XXWXakh[Y^VRVXZZZ[[VQT[WSOO]jhcabfhdgophc^fm[hyk[fwxtrpw~`IJLKKMLEJfSBEBBBBBBBFMPMJHLUXLGIIGGEDCABCDFHHIJHE@AEEA>>=>>=BQUNJGCBEFB=68<?@AAEJID@<::979?EGDABEEEDDB>==@ETc`K>@>=@ACINQ]efd]ZUF>A@?CEFFFCBAFAA=>HCFKLA<<<;86߾YQRRQPQRTWXWXYYYYXWVSNGC@><<==@FHLNPTXZZY[\\\\\\\\\\\\\\]^_`a^TOPQTVVVWXVMGEEHIMPKA@A88L^OHLH<@Q[]cggikkjjgWEEMMIDCCCCEEEGEALjsuqe^[[_bXMIEB=;>DOQNOSNFJRPGBAB@BEDCDDB@@@@ACCHRbvrUHNQSLDBABCDDB@=>@CDCEEEEDCDJLHCDHIHHGIMNKIJLNJEFGGGIJJKKMPX^\\YWVUTRPOOOONOOMMMOOOOOTWUTRRRVɽƹľо~zxusrqqqkgbh}unhgfd`_^^]^][\\ZXVSQPPNLJGGFFECCLczwx~zomrl^UVX[][YYZ]\\[ZYWVVUSSTTVXXVVVVVVUQOORUVVUVSMLLOTUUWXZYYXXWSSRTUXZXYYYWVUTWYYZZ[\\[[`a[UIHH=68::9889<>AGFD79=DIHD@FPQKFDGHFCA??@CHG@BJGFJI>589888<Zlnnchrj\\ULHHRcV83=ABHKHCACA?BLSUTRNHC?=IX[[^ZQRarxqowyurrssg`_WPRRSRTWN@:9;CGGKQMHC=98=@;9;?CD:4688:;;:955=FGFJJHFBJnzaQmzG@E?;<;;I^b[XVJDGIFIKKJMOQOLEB@836<>CIQWXVidZknlXSWKBHNPRTUWXTNIHKPUTRRLCA@=9524>CFMRLEBA?@AABBABDFGEDC@?=848;;<=>BGEB>521369<@EJPVWSMILPOMJIQPDHZ`\\_]K=?A@@?=<===>>=:77401236;;4355466679;=@ABCC?<==;=?A@;746<<56>=57?DFGFEDBABA;8FURFBDB838?>9840035>OZ\\ZTL>0*2AB?C?78>?<?GMQVSB8@JI@9=DDA<9:77AJE:315:=>@ABCDCCCBBBBBBAA@AAAA@=8555544459?CHH;66468789987658=???<766667667745:<;44=GNRTRRRRUSI@720223456777:AEB76994.,-./2544689999875667799668:::85554246777651,,017>96;FPXURQC-,2?FFGIC>;::::<DOPJMSQE6-08=>502119;=?:689306=<.'').7898427EUM:6985233-,,-/003;><<@BCFMFBS^I/*3<=974,(*,*'9PF;A@AC@=:;2'())*+,087+%%%,7;BNQJLYTB44BW_^jfC;<Mm_>EMMKFC@.GackZWI.*(*02EZTC<EH9)(+,//-,,.241284+,132.--,JKLKJIIIIIHIHGHIJMQUUTSQONMKKKJGGIIKMOQRPMLMONMMKJJIIJLLNOJEFKKJIHHJJJIHHIJJKLMOQQSTTVTTUVXYYZZZ[ZZWPJITiturv|fSNJHHILNQSQONNSZ[XVW[]````]ZZ\\]^_`_ZVTRLGGHHHHGGFFFFEEEEFEFGGFGGHHIIIJJKLNPQQRRTWZZ]e^KCDFFHJJILR[]]abccchihgaYSPSVY^`bccaa^Z\\_dhijlkhd^[\\\\\\YWVVVVWWVUUTSSSTT[abdnvst{zqghlhdfge_YYZ]][^bbcc`^`chbUQPPQRTSRUSO]fnZNgiaRL[eVLOSQPONOPOQ`WXkrdYZYV\\jpi`[SPSTUUUVVSOTWOMQNVa_[\\ahjeepwpc^dlqeYWb``jwxvtrpy~{qWIIIIJLJCLi|KAFBABCCCFLPROMLOWZPHGGD@>@@@ABDFGHIIIF@@BEDBAA@BCBEHGGID@BDB>98;>?@DLMGB@>=<=>@CEC@@CDDEGGC?=<?HW`\\LAC?>DCAA?>?FOSSXXE9=@@CDEFFB@><<B@=GOKWdV@>=<=2QeQQPPPRSTVWWXWXZYYYXWVMA>><;<=@FIKMPSXZZZ[\\\\\\\\\\[\\^_```ZNDGPWYXWUSQPNKHIMQVSGAA><<GJMJ?:IX]`ehhikjllcODEGFCBCCCCCDEECAZnpg]_a][^a_UNJHE@>EQROLJIOTTSMIFDDDEEEFHFA@@@ACFEHVptYO[giaYNHHJOUSE=?DGGIIGFEDC@BGGCAEIHGGGHHGEFHJJGFGGGIKMPPRTY_\\WVTPNPRQQRRPOONMMLLMMMQVXZZ]J·þƮ{yxutuusqkg]fsmihfa^^`aa``_\\ZXVSQPNNJHGGEDDCEWpzwnihjbVUVVVYYYYYZZ[YWUUVVSRTUVXXVVVUUUTQNORVWVVRLIJLQUTVVY[[[YXVRSTUWZZYYYXVWUTVXYZZZZ[\\`_YRIHH?888:8777:=AHEA66;DMJDADIMLHGEBCD?<;;<@EBDIB=BC<679:>@CIKOX]ir_HDIIPfx\\53=BFKKHC@CEFJTTMPUL@:7;B<:MYSLXksomvwuvsottjf[LNTSSTVVPD97<GJHKNGA<76;DFA=;==<8799:99868?HKLMLJIIHC@Z~x[Yp~raJBF@<=>H]hb\\aeYIFMTWSMIKLMMMKGA947;<<=GNT]n_Yig\\[aVJIKPUVTROORTTTUVTQOKB@BA?:522:DGJLIFDCBA@??@ABDHLIED@=;98:<>=99BJEAB>50/5=>;BQZTMKHGJLJJNQQRQPXba`^N>@BBCA>=<=?@?<8664113469<><9:99:99<>?>@B@>=<>A?==;99955>B;7;>:55<FIGD@:8;=89FPMHKG9-2;84;=93211>S\\YQA:;7239>BHB9?CA@ABFMME?CKMLG?@CA>;;<<==>=;855468;<?ABCCBCCCCBBAA@@AABB@<877414:88?CD>1/444578:9867<BGHHD=789888779856:<9204:EOSSQQPPJ>5249>?<989:>@?;8559:82,*.1566666569973345678;:8<?>;:8238952355554/*+.29=:73;LZVTUI2.8BDFE>AD>9:;=?MXTMLOOD6,+/560-.-179<;:9;92+6@<0-.29@=7592<PL>2.../111../257207:969<>@C>67;=<3/25561+('''$*@GC>7?B=?AA=0(&'*++/55-*,.5>ABDFIOSH96619NblZ63=;B<7HMLLB442Tsq|jVT<+,+,5EQOHDFB602221/-+-012664321/143/--JJKJJIIIIHHGGIIJJMUYXVURQOMLKKJHILPSQNQURNMMMNNMKLLKIIKIHIGEFGFFFFHIIIHIJKKKKKLPRRRRRRRRSUWYYYZ[[\\^\\TJHTZ\\ehrurnUEIJGIJJIHGEHLOQRSTX\\\\_`a`^]]]_`__bb^YVUQLIGFFFEDDEEDDEEEEEFGHHIIIJKKKLNOOQRSTTTVVTRVXRJFEEFHIIHKRYWW^ddbdhhiheb]WTUZ^``abd]VWY_gijklmle^]`_ZXVVVVUUUUUSRRTUTYcfky~{~wmfgjfbceaZTTY^]X[dc`djljs~saUOOPQUZYTQOWgrnVQ`jgULXgXMOQQPOONOQQSQN[qp`^\\X]mxwri[POQTSQPOOOVRGJOPTWXYZ^begfkz|h`gcddeZV[foqoomlkndWcXQHDEFHIHDOkzMDGC@DEDDHMOPQSSTUVPHHIF@???>@ACDFGFEECBAAEGEDCDHKIB@BDHFBEEB?<;=?@BDIKEBDB=>@BCEFA?@DDCEGGC?==>M[ZYQGB>?EEC@=;:<BGHFE>;>>ADEGHFB?;7=HEDPYNLOKA@?>>;6uzlWNQRQQSTUUUVVXYYYYYYYRC=<;;<=?GJLMPSXZ[[[\\\\\\\\[\\\\]^__`XF7;JW__^[URONMLJLNUYTGCGE=>GNG9;O[^cggiijjkj^LGHGECCCCBBCCD?I`n__adhic^_a`XTRKGA<CNQPIA>IUVSNJGECCCCCDEDA?>@D[iWRfqpb^golih\\ONRTYVF?DKQQQPMKIGEDBBDECCEGFFHHHHIJKKIJHHGGHKNPQSVY\\\\YXVOLPSSSRRQPOMJJLLLNOSY^_dWWͺÿǺɹ¼}zxvpq}{rlkecis~upnkg`]adfeb`_]ZWTRPNNLJHGFBABAKd~{xsligeYTUUSRV[]\\\\[ZYXVTUUVSRTUWXXWUUSRQQPOQTWWVVPKIKKNPOQSUXXXXXSOSWXYZZYXXVVWTUZXYYZZZ[]`_YMGHIA988887579=AHD<648<DEDCDDBCFECBDD@<;<87=BFI@79;8667;>ACDFHJJ\\iL7AKK\\ou_>6CJJKLHC@BGJNQMLUS@8:?B?=GVTQTdd^eu|zomv{spwjSH?<IVVSSRPJ@88>GHGIIGDC?:BMMG?65<DE=9::::9;GSPNMONIJKKE>Hh~r\\[kzljHAFDEGN]cb\\Y]ceWEEU_VKGIKLMNMH@?@>;:::>?K`hcjf_TX]OJLLPZYXWUVUQMMQRMJG@;<?B@9422:FLLLLJHFEC@==?@BDIKGA?><;;;::<<97?E@;>=5227@A:<LVOIKMMKJJKMPMLT[_cc[OFBBCDEB=<=>>>>;886655678=?>=;:<=<9:=>=:<@@=<<?@?>?=:;;:9=A>;>A@:28DHC<9779;97?JIGKC1.:?3.8>=8206EQURI:<LNF;3:EI>9BEBB?;?KJAEPNEBBAA@>=;<>=;;::;>9013:>>@BBDDDDDDDCCBBAABAABB@>=;512:93:A@9.*2545889988:?BDGF@:;>>==;9631247951.,/<GNPPQPI?66<DIIEC?;7:?B@7227;=:3-,046545579<@>71023457;==@B?;<92/58:1/3545543336:;998<JYWTVRHABDBBDFJE<68BFDPTOOJMOA2/,*,01/,((05:;::;72/5;=>>?CHJE;65:JH<7730/...--02697106<;83343101*&C^L002.0/,-039>?BMYTGGHA;9<@=0))*,04674-,5<A@<;@FKH91571+9PR;.2;;824GKLL@+'+X}}wL<=12629HLHEB<755654553200113444432479534LLJJJIHIGGGGIKLLMQVYWVUSQOMLKLKLOQUXUQRVTQONNPOMMMMLJHHGEDEHJHGFFFFGGGHJKLLKKLMOQPONMNPQPPVYYYZ[\\]^`\\RKMJKPZh]Qc_GEIHGGHHGGHHOSUUX\\^]]^_`_^^^^_`^^_dd^ZXVSOMJJIGFFEEDDEEEFFFGJJJJJKKJKLNNNNPRSTUWX[VMGFHHHHFGGGHHLPQNSY[Z\\accabcb`YVWYY[]bec\\YUW_fmmmnnkhffbZVUTTTSTTSTSSSTUST]hs|wpkddhe]]a`[XUX]]XZbdbajy|z{eYRNPQU`cZTVX_cbdZY^bceYNUi[NQQQPPQPOQTTSPRjvpj`\\_kw{|xobTMPUUQOPTYHCLSXWY][ZZZ_efixrgnf[_twhgjpsrqqso_gbAIOMEABEGGGHRl{SJIC@CFDCGLPRTVWRPNKGHIEB@@@>?@ABCCBABA@@DIHFEDIOSSMEABDEGHC@?>?ABBBAACEHID=?A>>BFB?@DEEEFFC@>>@P[WUQHC>=CFDB@ABDFGC???ABBDFGECB@><:>EDGLHE>@@AA@@??:Kuqro^RRQQRRSTUVWWWXYYYYYXVK@;::;=?FILNQTXY[[[\\\\\\[\\]]]]^_`VC9:?O^`bfh_OGINJGFMPUMEIJHCCIB:AT]`dfgijjiie[MLLHEEEDCCCBA<=Ung[cjnnrg`bc`]\\VLA;=FOUQIA<ANVSMGDBA???ABBA@?;Hh~lvnfffghhebYTTWZYPEAENUTRQONLIEEEEDDEECDEFHJKKKKMMMKJHHGFIKMOOQRVYXWUTSSTTSSRQPMKJKMNQRSX^aaePļɼíȷƸ|~vooy}nhhefhlywrmib`fjifa_]]YURPNLLKJHEDA@@CTt|yxsmjg_VTUSQS[dea^\\ZYXWVUUTSTTUWXXWTSQPNNOQTXYWVTOMLMNMLLNPRTTSWVQNTYZZZZXVVWWWWZ\\ZYYYZ\\]]`^YKEHIB:98877579;>@>9657:=>ADEB99@CCDEGIFCCC><>@B;6776568;>@BEJIC?NU<4>CG]lc]TJZ[PLNHA@@FMMLKVWK?9>HMJVjhSO^bQIWjk\\QWed_ksX902<IOLKKJHC=;>ACEEEDFKNJHKNNJB67EPOGA@@>?DKTSE:>IJKLLKIHEOgqjacpzk]_XGAEKLQ_e^[ZXWYdbM?JXTHFKNOOOMFAFJB::;=<>KZjpsh[TXTKINORUYYYYYWRLEA@?AA<::;@C;3339FOPQQLHEDB?=<=>?BEEB>::;;::;;<=;::866:=843<@?=<@GLOSTRNKKNOMOQT\\`ZQICCCBDEEEA=<<;;<:888755668::7677<@<8:<<;9:@B?=<?AAAAA@>=>>=>=>ABA<8=DF>47:8:=;;DJDAD9,2AB738;<<9:CLNNMICGPQOH==GD96@DB>:;CQTPRVP?6<B@><;<<=;:::9652/38>A??@ACDEFFEEDDCCBBBBABAAB@>:6368/07<C:-/48:999::;;:9;?@>><<@@A?<6222344773/18AEIMNHA::@KQOJCCCB>===:423359;6/-25533349>AAA=63234668?AAA?;<:5100;7346777:;:98669<;<IVSUSUZVJDA>DJIA707LJHRMDKJNQ>-/0,-225<7+*08;87532014:@EHJKJH@<5FK7245431.....01484//4;><51/-,*,,*?hf<'/0,,7L]kwwwteaiib`]UK=@B2)*),47796-,9B@;79@D=68=<546997,,023769FKLJ=,($M}{zJ*2559:DHF@<3.39<=98:9883////0122138:99::KJJJJIHHFFGIKMOQRTWWVUTSQONMLMNQSTUUTSSSSSQPPPPPNMMLIFFECBDGJLKHEDFFFHHHIJJJJKKLMLLLLMNPMMSWXXY[[\\^`b^TIBCGMSMCLYRFGHGGGGGHIPY[\\]]]^^^^____^^__^^]_ceca^ZVSROONMJFEEEDEEFGGHJMNNNNNMIGGHKMNOQSUWYZ\\YXPGDGIHFFGGGGHIJKKMMNPTTSQRRSSSQRVY\\_aded`YQPZdgknnnnmkeZUTTTTRSTTSSSSUUTRVeqsnimpmidfkf^^ghb]ZZ[ZXZ_bc`_m~}h^WOPPXbddff_ZaTVZ[Z_fe[QWk[PQQQQPQRRSTTUVVcmvtkd`^dv|yxvkVOV[WTU[_IHLS\\WZa]\\Z]achmuzumlbUUiyvtsswy{yfOGdrFCJIDABCEFEGTpuOIIDBCCDBEKSWXWSMKIEEECAAAA@>>???@A@@CGC>BJIEC@FOTWVNGEGIMI>=ACCDEDA=<@GLK@=AA><?BA>@EGHFDCCB?>?JTROLID@>BFCA>;=EIIGGHIJIIIIGA::<?@BB@BHKIIE@@@AAA@??=kwpnpbURQRRSTTUWYYXXYXXXXWXXK;8:;<>DHLNQTX[[[\\\\\\\\\\]^^^^]_`VE@<8AOUZcliXHFMKHHIJJIGHJHFEB;;FX`bdffgiiig_XONLGEGGDCCCA@?FLSWmtppqpc^`bfgfdM@<AKWWOFBABKTWLB@@A>=<=?A@>=;K|wkb\\VZb]RQPRS\\^PCACGMPQPNMJHDEJNJGFFGFGIJKLLLJKNOMIIKJIKKKKKKKPUUSUXYXVUSSSQQPOPQPPTUTY`b`YjʹɾβƲòz}pozxnhfdbfryqkhcdikfa^]\\\\XURPNLKKHFECAAAKf||yphgbWSTTQRXbhhb\\ZYYXXWUTRUWVUVVWVTSQPOOQTUXYWVQNNPOPONORRRTSTWTQRVZZZZZXVVYYY\\^\\ZZZ[[\\___\\XOHIHA:998775699987889987:>DE?8;?BDDFOPLFFKIA:==88986669;>ADDE@ACFC8<?AGYiaY\\fsjTLNH@>@GMLINVKBC??HLMYh`NU_WJEGLNH@BHDGZ`I::=?BCADHJIFDFIJKMOKDDKKMLJKOQL@AIPRQPLICDKOLD><<ANUQNLMQI@JV_cacrvgVNLHINLWfc^\\[YWTXb_IENNFDKPRQQMIGHGA98=??GNPdoh\\QTVSPPNORSTUVXXVUSI7149;;;9;AFB8128BMTWWM@A@?>=<;;<=><;;867756;==>=96458@D<67@A?><9>ENRSQLMOPKGLPS[aT?:BFCBDEDEEB?=;;:63577743246631139=98=>;:;=AB?=>@A>;=B@<;<<<<==??=;:@FF<39<9;?=?JJ><=2,8EC=;;:;=AHMMLMNNNNKKNRNGG@76>FB83;DGNUQLK<2;@=>=<<<;;::<;4/-2:>>>967:=ACEGFFEEDDCBBAAA@@BAB@506;4.1:FE<43<?<:99:;:868>ADD>;DGEC?;;<9645:?@;66;?DGD:7<AJOLDCDCDDA?:87776536;8004665667;ABBB@:6344545<BB@<;<;96204;9669;;=??<864:>;8?IFQRU\\YIBB?BBE>3,8KFJRG:>ACB3)-24311;IL<,,6:711450,,.3<CGEEEA:=L>623564477557851/0/,-03232.---*++0SmK%+84+Hy|_dqkcde^TIC.(+(-8955524=A?;<ADD=8BIC858:72-++.+*3:DFDB:,02AovH39:;:<B@;7801?HED?968:7/-00.-./-)-7:89;;IIIJIGGGGFGIKMPRTTUTSRQPPOMNNPQQPOPPPRSQQSRQPQRRPNMLJGFDBCDFJNLJFDEFGHHHHIIIJJJKKKLLLLMNLLPTUUWZZ\\^`bbcXHABDFJGEILIGGGFFFFGKSYYYZ\\_^^^_``__``______adfeca]UQPPRUPFDFEDEEFHJJMQQRRRSQNIFDIOPPQTWXY[\\ZYZYQIGHHHHGGGGHGIIKLLMNMLKJJJJJKNTZ`ccbdeebZPLVZ\\hlnonmid\\SQSTSSUTSSSUUVXUS_f\\SYgnlheilhginne_`]XWWX\\`bc\\[r|fd]PPRUadgsufa^ZVTUQ[nj\\SWoYSRSSQRSRSVVUUVWa^^fnkbVP`rsnstfRUXXUWZ]MLKMSPR[^][_dfluvsuqiaXY`frtvyz}wolcQII[w`FCFGEBBCCFEDTssIDIFCDCAADGKQYWRKJHCB@>>AA@@>===>???@DKH@AEFD@<=EKQTQMIFEHNIFC>ABEDC@@CGJIA?CA@?==?=BKMJEA?ABB@?CIIJKKHEDFGDA<8<DIJKLMMLHGJJH?:<@CDGC=?GJHII??CCCC@==>RrqmlbURRRRSUUUWXYXXXXXXXXX[VC9:;;>DGKNORV[[[\\\\]]]]^^^^^]]RD><:;CILQW]SHGILJFDINLJGAAC?=<CN[`bddffgfifZTSPKHFEFDAAAA@ABCDb~}|f^``gushgQ?<DMWWNGDCDFPVK==@??@@A@>><<<@PmsWNKMPJHJLMP[aTFBAAENSQNLJIGIJMMKIGGHIIJKKMMKJLNMIILOOONMNNNMOSUX[\\\\ZVTSSTUVXZ[YURSTRX]bb]ýԺʵĿy~uoyzunhfcbi{~umggdflja\\]^^ZWUQOMLKIGDCA@@EZw|{wic`\\VSVVVX^cca]ZXWWWWWTRRWYXUTUUSRRQQPPRTTVVUSOMNPPPPPQUTTVVVVRRUWYZZZZYWX[[\\]^ZY[]]\\\\_`][YRJIE=789:9877;966558=;89=BDC=@GDBDGLSSLFDHIC>@>9:;86679;>@BBA>AED?:@ELOTYbb\\ctqVHID@>?FLMOQMBAD?@DDFMTVWXZSLHA<@F?;>=?IJHFEB?;7ALPRPLJLNNOQWWSOIFFDDFINLFAGQSSTSOIGHFACHHDAP\\ZUQPQJA><?HQ\\mwxpZOPQOQ^ecaa_^XOKXaPHJIEDIPRPPNLLJGF=7<?BLMKO[^TMVTTXXMGJLMNRWWWTOF802469:;@EJH>315<FNSRI;=>===;:::99877854423:>=?>968;=ELC79@BA@=:;<>FNPJMRI?ACBK\\hZ>8DFBBBCCCCCBAAB>4/37:<94137840039;9<CB<;=@AA=;<?=627?=55679;<;<:678<BE>7:;:<=<@FB=>:24@ECBA=:9<EJHGKNPQRPMMQUSLFA==CD@86=B?BMG<=:5;<9:<==<;<;;<;6119>?<96359<?CGIGFEEEDCBB@@A@@BBCB83:=4./5?DC<8<@>;99:;:769@GJKHGOOJGEBB>:866<BHF?<;>BE=79<@JF=5>EA@?<8459;:;;:<=<7679<=>=:<AAAA?:52222236;=:99<=<::8249747<=<?@;854:?9558:KRTZRB??;=AA6-*5EENO@76674,),02.)1?DD=./440,097-+,*,2;BC;8:3FC1756:946=?==?@>6,),,++)'/50.-,))))<UK21:8>fj^d_\\_cgf^D+'(%,991046:@@>=@HKGISXPEB>:95.-..42(+7A?<;8-4BC^zh:6>;=?95212<?@IPLFC<57:6-,/-+---*',6:99;;HHJIGFFGGFGHHIKMOOQOOONLLLLLNOMLKLNNNQSROPQPRTTSQOMMLKGDBCEGIKMNMIGFGHIIHHIIIIJJJJKKJKLLKLORSSVY[\\^`_]aeYJDEFHIHECEHGFFGFEGKTZXUW^a`^___```a`aaaaaaadggeed^WTSSUUMEEFFFGGIJKMPQQRSTVVRMIKMNQRTWXVY\\\\YW]^SKHHIHGGGFGGIJLMMNOOONMNMLKLOORUZ_cddded_XTRMYehjkpnig]SQSTRUUSRTUVXYWVWXTS_mqlggijilrsngeg`[ZYY]_bc`]gwuilsgVSRN\\c]s|bZ_\\XUVRXmk\\TYrWVUVSQSTTSUXWWVV_YUW^a]VPRetoqwq\\RRUUWY[LONLLMRW\\]__dmlv{uwskd]gmlrtw}x\\TlgQJDBFEDEFFCBBCFECSvnFDHFBBBBACD@EQSPLJEA@?==@BBA?>>>????@DHDAABCB@=:;BHKMLJFGQbfc\\OHBCCDEIEEHGMIECABBA@>BMRHCA??BCACDA?FJMPQNIFDCDEFEFEFECB@>@GJJFEGGGD@96>GGBCDMIHHGC@=<@GctmigaVSRSTSTUUVXXXXXXXXXXXYXR@89;>CGLNPSWZ[[\\\\]]]]^^^_^]RD>=?@?CGEGHGDDCGMIFGLOIB><BC=:=JT]aacceeeefbWSUSPPMFDCCCBAA@?CJc}|mRUdhsr[]O?=EMUWPFDDCDKQK>>C??DGD?=>==>>8NhEJSPKFFHHLR\\bWHCABELNNLJKPTRKEIKMIFFGHJJKLMKJLMKHHLNONNMOQSVVUY`b_ZVTSTTWZ\\[]]ZTPPQPUZ]hyǿѻŮĽvzus||ywxslgedhr~}vpjgfgjlh`\\]^]XUSOMLKJHGDA@@AOl~}}{oc^YWVUVZ_abc]XXXWWWVUTRSSVWWUSSSQQQPPQQRRSUTSPMNOPPPPPQSUVXYWTPRUWYYYZYYYZ\\[\\^]YY[^^]]__\\[YRGHC9689:;:6;>:768:>A@BEGEB=<CJDADIMPQLGDEFCBA>:;;76789:<>@@@?ADD@9AINQNFRde^hpYBACC?<@GKOOKFGH?BFCDDLV]^ZTOKHGFIFDGHECAACC8742DQTSRNJHIHGMTX]aUFBABCBDB@=DPQPPQOMNLHDGKLIBAKUZUQQNKC847<GWdkp`MNOR^feeccbcVE@EJJIKKEADGIJLMNNJII@669>JPNKUb\\UYTT^[J>@HIKQUUTN?6623578;?DIKHB933;ADEC=?AA??=;<<<:7667779877<?>?>;9;?=BHB=:?BBB@<;<:=IPNQNB>CD>Gcua=5>A>?@BBBB@>>AED>5369>@;42773138=?>@DC><<=>=;8798447;:5468:;;:;95477;A?;;;:<==CB:@B:6;@ACFC;88;AA:>KQRRRPOPONLJFDDGIE>8;>BDDA:6679<<8769;<>??>=:6348;;:86667;<BEHGFEEEDDBA@A@@@ABBA?=<<2//3:@?=<>=;88::;:88:AIJMQRTQNIFBC><978<AEGEECDGD;7:<BD:12<A?;8636<<99<@BBAA>95:>@?<9:=>?>=942222112233347<>=<=3-2636;=<=>;642:A922/7FQUXK66869;5/,*1>CSJ9679;82--01(*<C<6530./..7>5,./..14:;0,.0O>+069:82128AD?@A?4++-+.+)-40,,-,,-04;><967Yv_jlpsrqqqG-*.*+8>73467>=;>>FKIQdjbRFBA;4100/151-3?=765-2?@IXmb:5;9>>2(/06@IJJOOIHG?88:5-+)*,,)*178756;;HHFFGFGGGGFFFFGIIJJJKLKIHJKKLLJHILMLMQTSOPQQSWWSQONKJJHECBDFIKORRNJGGIJJIHIIIIJJJKKJJJJJKMPRSTUUVZ^\\VPQVTLGFEFFHGECDEEEDEEGMUVNMV_`\\[]``aaaabbbbbbbbdfgeeeca]YRQUTJCEGGHHGHIIKMNPQTWZWRQPOQRRSTUTW]^\\[]]`^ULIEEEEFGGIKMNNPPQQPPRQQRRQONNOW^`bbeedfbYLWbc`_fgeki^TSTRUWSRTUWYZZXUSTYeprlhhhijklqnifif^`cb^^cdcchc_dp{wk^PLUZRh{_QVXYXXTVjg\\V\\rWXZYUVVUTUVYXWVUUX_ZWVTVT\\lwzuy{fVY[\\]_`]]YSMNY`aa]T_zkl|vqmlifpxvusss~`NUYPJKFGGEEFFEBBCFECTyeDEHGB@@A@CEA@FJJIGC?@?>=@BDCA?????@@ADEB?<=BBFD?;CIJKJHGM[nomlf\\ODACGMLKGDSYNC?BHH@>@EGECC@@CDCFID@CJOTYWMEDDFGGEDB@>:98<AFIJKLLKIE?BOLGEADE\\SILMGFHAAEGjwhdcaVTRSTSTVVVWXXXXXXXXXXXYZM<8:>CGLNPTX[\\[\\\\]]\\^^^^`^YI>>BEFGGGGHHHIJHEIEFJQLB9@@BC<6@OX_aabcdedee^TSTUW[WNHGIHCAAADLOZ}a_PBLWj}aEHB?>ENTUOEEEBBHLLHGF@@DFC>====?@?DTLK@CRWXURHAES^c[KDBCGJKIIILU_\\KADLOKFEFGJJKMNLJLLJHGKMNNNNORVZZVW[\\XTQPRRU\\a`^]\\[TONOORXZfǽͽĭŹwrsyuwvrkeceq||sokiiiknke`^]\\XUSQMMKJHHDB@@@CY|~ne`YUTUVX]_cca[WWWWWWVTQPTUVVVUSRRQPPOPQQQRSSRQNMPPPRQPPQSUXXXVRPQVWYYYZXYZ\\\\[\\_\\XY\\^^^_`^[[YQFFB658::<:8@B:68=ADDGJMJE=:8<A@AEKLOOKGEEDEFC=:<<76789::<>>?AADCA7AMNPHB>SjhfodD<CF@;<BHMMKLMMGDFEDEKR\\]YTPLPWWSQPNLD?::;=1/2?OUPSUPJEB@>HQRS`^H@@BA@>;;:<FJGIPPOTVOJKNMKA53>JNRRRRG<=;989>ERTHFKWgjffefefN:;?>GJNME><=>ADKPOKJH@513;JQRP\\fc^ZUYd_H<@FEIQSUSJ;4454579=CGKLIF@869=DGD>=EKJD==>>=:667879=<::?A@@>;=BA;:><;;>BDEC?<<99CPWYNCACGEFYeS:35:=A@AABB>;::=CA8458=A<4135447<ADBABB@<99:;986546:977779;;;:::975778<><::;BLOLD@ED:89:=CD<7788986@MRTSRPONEAEJLHDGIF;5:>AGF:4777:==96449=ACCB?:757898877755::9>GHEEFFEDCBB@@A@@@A@A@>:30/17<>:=@=:6457999;<DJHFLPPNLJFCDDA:79=ADEEDCBB@:44<F?534:=>B?><CKD96;BEDBB>3-15874466:?@<64444431010//039?=<:80-/258<;==86319A70126>IWWA,/468730-).4<J=258;>?;2-13-1>=54540,,-5<A4-0220000/+)(,F:,/7;:7/.-0ADABEGD94-+00-,30+,+)*5@@;9;;67T}tRmwuuonma=/6<-)6?:4465559><EJMXcgldPBBA82320/46/,481-..0247Ba`;6:9??,&5<:=GKIKOMJKJ?6:@:.**,,),7=80/4;<FEBBDEGHGGEDEFGGHIIIKKKGFHJJIHHGHJMMOSTRRSSRV[\\WRPOJIHGECBCGKOPRROKIGHJJHHIHHIIIJJKJJKKKKMPQSUTSSTVQJIGCACEDDEDEEEDDCCCBCCFKONNRUYYUU[acdccbbcdeccdcdeeffedc`^ZUSWUKCCFHGEEFFGHJLORSTSQRRUYVSRRRTW\\^^^ZWYcc^ZRIEDEFHIKNOOOQRRRSTTTTTSRSTTUWZ^abceeg^]`db\\XYYZ\\b[SZWRVYSRUVYZZZWTSUXdppjhihghjhmqmjhhadlj_^bdefjmicn{~zp\\NSUO^t^PRXYYXUU__]Z^qXZ][Yb_XVWYXWWUUb]_][VSTSbsyzuz}kbciifedfcc`TNWab]RJLm~utxsnnnip}}yxupubQXTOIOPJGEEEGECCDEEDYz`CEHGB??@ACDBABEECBA??@?>>ACDB@@?@@@@ACDA@??CCLNDELNKGGDDRVkq^UW][E?FJPXSFAL[UCCFKG???=?AAA@ACDCFIEACIMQTSKDCCCCEEEC>;<<>?FJKLNONLIIKaw\\FC>BHLMOPRQQRHA@:Jomb`_YVUTTTTUVVWWWXXXXXXXXXY[WI<;>CGMOQTX[\\\\\\\\]]]^^^^_]VGADFGHJJIKJJMSQLFFDFLOLA@ACDB:7ERY`babcddcdcYRPSV\\a]UPNNKD@?>GNNUz{TFB@JJWv|[<>@?@FMROGDDDAAFILNME@?BCA==?>@BDDE?ac9A?BN[`]TKFHS[_ZKCBDHJHEEHNV\\XLBCKMIECEFHIJKLKILLJGHLOONNNNSXXUPOOLIJNPRVY^ca][ZZRNMNORWVuѿƱõ~orxxvvsmbai{uliiijlkkgb`_^YTSQOMKIIGFB@@@?In{xteb`VUTWY[[Z^`_[XWWXVUVSQQTUTUUUSQPOPPPPQQQRSSRPNMPPPRQQPQSUXXVTRPRVWYYYYYZ\\\\][\\^[X[]_____]ZZYSNG@6579;:9>GD:89;=?DLRNIA;::8:>?DHILKA@AABCDB><><768;::;<=>?A@CDDADLMNFB@IcmgomS;BI@9<?EJJHNQPRM@ABEKLOVWTOJMY^][TMMD:IZG>?MaowVMQSPID@?@EKLLKLE??@@?<:99;?FEHOONVYRMMOSQD:529FNRRSJDD@:86259=A@EWklfffffeK7;@FFHKNG=89:;@JPROMG@658?KRRT\\eb[VT_iTC=ACEGNRSQH;565569>AEHJKIGB<9:;BMKBAFJKC<;=??;545769====?@???>AFD=7249<?ADEB?<<98AO]VHCDFIIEBC=837?GEBABBA=::99<=846:<<96424667;@A@>?@?;755788632696469;;<<<<;:;:8778:<;::;DRYSKIID:995;A:58953439GQSSQPPRL<8@FLI><B?43:>BEF?:9=<8=;96537<BFFEA:658887767656:8.8DGFFFFFEEDCAABA@BBA@A?;52015<AHHCA<533688:<?EIG@?FHHJHDCEFB<9:=>ADFCA>?@944=C<557:<?DKJKORK?9>CC?<71-)+/2234437??825897520111..269<==;74/,.026;;5142/<D838;409MI3+7<=:842/+-/630/58<?@>61222231./1-,,,-8=?4/2320/.0.*)',;:/07<96/6?<BB>@DILI<1,11-+0/++*(*8HHD@@@;8?HWq{@Pekf\\UN:-0;7.*7?71452-058;CHEWgeckZBBDA;630.270+.3.)+-.-,+=`W97:8>=20:D;4?IHHKLKING62?G6'+-,,.25/*+4<9DDB@ACDDEGFDCFHJJJJJKLKGFGGGHGGGGHJORRSTUVVW[_a]UPOPMIGFDCFILNNNMKIGEFFHFFGGGGGHHIJJJKKKKMNOQSSTSOJGFHGCBA@BCDDDDDFGECBBBCEFHKNRRRRRSZ`deedccdeeddddefefghfca`a_WTYXNC@CEEEDEEEFIJLMMLLNQVXWVVVVWZ^^^_YPNWahlh`YOEFIIKMOOPQSSSSTTTUUUUVWYXWY[`acccddghidbhj^SRVR^g\\RWXTSU[\\[ZYWVTUWcqqolihd`ehiossnlieff`_bdehmvshit|vwp[TSQXi_UTYYYXWTSU^__pYYXZ[caZXYWTUW[Wp^^__WRRQXixwx{voonmkhfd`^acWLMRTPLJCOsz}yusmr}}w}uc_eZOIQSKHFEEFEDDDEDG]|\\EHJGA>?@BBBCBBBBA@A??@?>=?BDCBA@@@@@@CEBEJKJGIFCNND>?C;GPB`cD;;O[KGMQft]C@BLQHKNF@AA=:9<=>==@@?AB@?BFHIHGDBAAAABBCC=;>AADKOMMLOSLIMUkr[KG>EUYWUSRQMHC?=<:Xtg^]\\ZXUTTTUUVWWWWWWWXXXYXYZYSF=>BELOQSX[[\\\\\\]]]]^_^^\\TGBFHHGEEGILIINPMHHCCJIA@EBCFA:>OV[ababbccbb]ROORV\\_[UPNLHDA@=CKJQonL><BJHCWeQ=>A@BGJKA=AA?@?BHMKGA??AB@>>BBDGJIIHMWK=>?EN\\d[QQRSSTVTI@BDHJHABMTUPOLHFHDDCBCEFGHIJIILKHHJPRPMLLLPUTNKLLHDHPTTX[^a_ZWWWPNLMMRWPǾȪɾüy{syzookeessiikjlmiedcb`]WRRPOMKIHEDA@@>>[}}skfac\\Vd\\U\\]YX\\\\[ZXVVVUUUTRSTSSSSRPPOOOPPPRQQQRSQPNMPPQQQQPOQUWVRRRQSTVWXXZZ[]^]\\\\[YZ\\]____^\\YZWY\\L@768::::BHA;;;:9=GORLIA>@DB>=??ADGA87:;=<=?@CB=78<>>===>>@@@CDINLMMLGRbjnnhoq`A@KA8:<BFDENYS[fM8@DICDJQSLEFSZ^`TLSRNkXFOt}UMOOKGC@@BDBCD@??==>>=<;;;=?EFHLKOUVRNMOSUI>><;BKPRRPNKB;759=<:;:<QjifhhhhaH8>DHFECLM>89<<BMSTROK?9AHINQOKW_\\TLP\\[C=@DDDFINPKE>;866:BIHGILLJHD?=?><?HJH@=>=956=@?635768=>?>@?=?ACDGHF:..9A@@ABA><;89@JRF=BIJLIB;8984?KQJFCCBA>>=<9798359<;;;84445:<:78=@@<::97446776654359==;:=???><:98;==;=>9:DMPLJLIA>=8:=67=;53339DKPQNIHJE;:;9>C829923<ACDGHA:>=8;:976669@DGHC;657788777879:8.2<CEFFFFFFEDCBBABCCCBB@=:5116<HTQHF?5447:<8:@CFE<4:>BFDBBCDA<:;<=?DKLNMLC98=>?>757;>>@DLQLFDB??@<60,+-.03337765587448<<8520011/18=<<>>:6331//.162+*//-7?77><2*0=7.5DFGC;7620/./+-149>??;63111464.+**++,.7;:64220--./,+++6F;0569954CHGE>9:@DFHF9.0.+//,,+*(+8GF?COOD71**/CSZcmg;DU[N?8422241,/;=0-35-+..+/@C4@^ebg]EEIKH:20/241/,+*(*,--..AYJ58:9=>;:<D9+4CGEEIKHNL;11D=+,-++.1/+(+590DDDBAA@?AEGDBCFIKKKKKMKGFECDFGGGFHKQRQSVYZZZ\\_dbZSRSPKIHHGGIIIIIIGFCA@BFDCEFFEFGGHIJJJKKKMNNNPRTSPHDFFFGHD??ABBCDEGGEBBBACDEFGIKKLNQSV]adeededddddddegfghhhgea__]ZZ]]RD>@EEDCDDEFGGIIHHKOQRTVYZ\\]^__`a^WNLWgmkkje]TKIKMOPPRUUUUUUUUUWXXY[\\]]^``aaabdcdfejuvjZVUPzy]SSVUU^ea]ZXWWWZ^gpz|lhj`Y^fc[dqttrib`a`beglrusmkpvsqpeWTUV\\\\WTXY[\\[URQZ__rYVUWY[_^\\ZWTUV[X`^^__XRVRQZipvwpmkkhgc`_^]^\\VPMNNLLJHEPixxwy|{u}jlj`p~_RSMJGEEFFEEEDCGbTGKLG@>>>AABCCCCBBAA??A@=<=@DEDBA@AA@@BEEHRWSKC>AIF:9?@7TSCZN897>GLUVcV<>?BINPK?:GE<=@B?<:;?>;<<9<ADDEB?@BA@AAA@@?>=@DFLOLMNJKMJLNMURNQKL[gkeYOHG?==<;<<Djq]]][YVTSSTTUVWVXWWWWWXYXYZXXRE>BEKOQTX[[\\]]]^]]_`^^\\SFCFIJE?>CJKHHIIIJHA?DB<?B>@E@:ETY^bbbbbbaa_UKMNPSWWSMIGFFCAA>=CEJYVG>;BJG>AGC?@@BEIG@;=>=;>=;EOI<:>????>@FGGILMNOPNIC=>HU_`XUUWXYZ[UKDCDGJGA@L\\UHILKIEA?AAACDEEFGFILJFIQXWRMKKKMNMKJKLIFIPUY[]_a^VQQPNMKKLSRpǻɸɮqtztnhehmqz{mhkllmmgdfgb^YVRRPMLKIFDC@@@=H{|{~okmke_TYtj[^]XZ\\ZXYWUUUUUUTTUURQQQPNNNNOPQRSRRQPQQPOOPQQQQPOPTVWRPQQSSRTVWXZ[]_`]^]XW\\^_`___\\ZWZUV_[G:779::>FC<=>?@AFMOMLKKKLLJGFCB?AD@;899:88<BGG>8:@CBA????A@?;;AGLOOKWlzvmhiomdRE@:679=BBBPb\\^spN=BHFCIUVHBFJOZ^RN[aedHHlhTOMHFDB@@AAAA@>=<;:;;:;<<=?CFFECGPVWSMLLNQJ==EJLNPRRPJA;63/7>=<;<:AYd\\]fkl\\@9BECCB@@@?<;=AJRUTRQM><LOLNPIDLPOMIHGB<>CHFEEGJHDBA@<78>GKJJKMLKJHECCB<8<GI;1342/3<CC839:68=?@AA=;>BEFGIJB9<EFA>>@@>=?BBACD<8ALQQI?::976;DHFEFECA?BCBBB?9348;;<;87514<=7019??;;?B>64:AFC<766779::;=@DFC=::;>@?>@A:4:ELIJPQH@?<:>=>?>=;85778ERNB;;<<;9459537966;>ACFHA8788888888559@DBA<766778778:<=;8425<EGFGGFFECBBCBBBCCBBB@?9216<ENNIC92459=>86777>>406?B@@BB=79<=<<>DKKLJF<9=A@?>968<@>9=KOC;=?>974/.255544359875544469<;:860//138<?>;<>>:32354440)(+,,,.11463103535>FIJJ?77650,-2323:A@=:5/.117AC90+)+.-/8988741.**-.,,./?S=100786AKGAA?62269@HB0%9YS1(41)',7ED8:P]O7++**)(*04=@@MLA8117:=ACA?DG>24<<51011+/<5*;S]c^HFIKL>2001122100/-*+044=JA7<<;??=;=<8(+;DA@FJFHD>@:@JA960.26763275,EEECA@??>ADC@@CEIJIGIKKIFCACFGEDDFMQOOSY[]^^\\_dfbZTQOMKIIGGFEEFGFFEGLQYaZE>ABDEEFGIIJLLKJMOPOPRSTTRJDDFHHFB??@@BCCCEDCCBABDDDCDEEGJNQTY`ccdefedddddddeeghghihe^]_`_]_`YJBDDCCCDDEFEFGFGHJKKMPUZ]^\\ZZYXYVOJJU\\\\\\_bf_PJKLNNNPRSSTUUUUWYZ[\\^`aa``abbbbbbcefinkf_^YTy\\XSTV\\hjb]YXWWW\\hkjxronc[^gbYU\\jruokhggggijlorsuwvwtonaWWWWYXVWXZ_]WTSVXauWVVWW^cc`]\\YWURXY^]]\\ZX[YXZ\\_clqnmkhd`][\\\\VUVVTRPNNKEJKKSZ_bcu}c_VKԉQRPMJFEEEEDEDBIhOIRLH>>?>?ABCDBCBBBB@@BB>;;>ADCBBBDBA@@CDITVNFB@>?>9;@;8YRBHA<;;OhxrZbD8@BEILKF<9ED<EQUI??@A@A=86:ADCD@>ACBDEFDA?@BABHLRMBFNKCB@C?:98@KLQZ]_]VNA=9:<<;=?<Poc\\\\[YVTTTTUVVWWXXXXXXXXXYYXYXNCADJPRTX[[[]]^^^]^`^^[QGEGKLC85;EHIHHHHI@77;<;<<8;?<>LY[`cccccbbc^OBFGJRSMGFHHIHCAAAACDBDGC;9?BBC?;>ACEHJH@=?@<9;>;9CMH;9<;;<=>BGIKKJKOSXVPKA=FT\\[WWWWW`he^VMGGFJMHGNSPGHJIGFDBBCCCDEEGIIJLJGJRVUQMLLLKJLLKJKIHLORZ\\^`c_QKMLKGNVT_Oƿİvt{sgebcjtu{xjehjlmlkhkpk`YXUSQOMLJHFDCBB@<b{xutqomuscWLUrl_`\\W[[XWWWUUUUUUTTUTRPOOONMMNORSTUTSQPOPOOQRRRSRRSUXXWSRRTTSRTVWXZ\\^__^^\\Y[\\]^____\\ZW[OS]_]A7778;JPG?>@BEJNOMLJHGJQQMKJIHGGFA<;;<><:=AFE@:<?A??>>?AAA@:77?KSQPhvvjb_fmja`U=368:@IIDGWd^d|oJ;CDESaT?CHCIUUPWdhquM?upTVSLHFCA@ACCAA?=<;;:988:;<<<?@=;<BMTRJBBEIJE=;FVXUSQRRL@7338>CA><=:9FSJDWjiT;:BA?>@C?9=?<>EPSQOPTP>;LNKMLB?CDFJLG>9;@EIHHHFEBBEFD?73:DFFJORQQOLJHCACCB?:52441/7@CC?;?@86=@@@AA?=<<?BEFDBEKIDBABA?AEFDCCA<9=DKPE99;:989;>BGGDCA?@BACC?;889;;;9755569951/49<=>??=;<DMPMG>9;:769<>?AEFE@:;?@>>?AC>89@GLNLHA:<;8;===?@?;882/>NL?66:;9996567797335<BDB<65678888887458978:;<=<<<9757:9766425;@EHHGGFCCCCCBBCBBBABCB:4789BIG>42468;;963/-3:6-3<>AEE?615?CA@A>=@CC@=>@?;:;;:;>@;9EUUJEA?=6/-08?@=;99:=;7567656899:;<9/-/39>?=>;8;=;5159;<<3.-01///./0/122468;>@DFH>448:3*.6412=IE=840/235ALJ@4-,1007:::640-++,03352>R://,/4?KLF:9A90/06=DG5/ci)'LO.'17:D:3J]O8,,./1.,,029@A;/2>B@=CQYZZ[VLGFED@<:<=916B81BJPQCDFIJA321003568971**35669>@@>ACB>77650.7>>>DGEA<>MRPWTLHB:877865541EEECA???>?AA?>?ACDCAACGIHD@CEDDCDEMPMNU[^`ccbdfije\\TPOKHHHFEEDFHJPW`ioryu^G<<BCEEGIIJLMMKMPQSTUVVWYTKFEEFFEC@>>?AAACCCCCCBBBB@AABDGKNQW\\\\^befeddddddddefghhikjd^[\\_][^d_NCCDCCCCDEEEEEFFFGGGHMRTTRPQPPQPOMKJLKKLOTTOLKKKLLMMMNPRTTVY\\]^^_``aaabbccdddeeegihffhaXzaYSQRV__YWVVWSR]lkfruruk^`ge`\\[Xdqmgkkjjmomijmquw{y|zqcXXYY[YWXWY][WUTSRcvUWWWXehdbb`]WVTY`\\YXWWXXX]bYPYmz{ywpga__\\YSSWWWUSPRNBGOLHILMFNkqO@B>mGNSPLFDEEEDDDAJiIATJE=>A@@CDBBBBABCB>?CGGC@?@A@@DIHEDBACGLOMDBBA?=>?=A9>]L>>:=<B`GA9BCGNH>A<;;>>EWWMGHDACHA89?EGHGB@BCCDFHGGGEDBBHLNG<CPL@A@A<7857>GJJLOPQL=::<<<<>A<?[j[[ZXVTTTUUVVVWWWWWXXXXYYYXXXULCBJPRSW[[[\\]^^^]^^^_ZPIIJKLC745;BGHJIGB83489;:89<79FU]_bddccccdbXG=>@GNJDFMQQPLECCCCEEBAC@;<???CDBEDEJLHC>@C@;:=<9:<>BDB@?@?<;CKMPMJLTZ_`XNF@@LWYVUURPXaXPLHLPKGKOMLKIFHIHFFGFCBDDEFFHKLKIIIJLOOONNONMKLLKKJJKMNOWZ\\_d^NIKMLDXlle}̾ʼwmf__fossyylccfinomllorh\\XXUSPNLJHFDCBAD9G}udblrmjg[SHNebZ[YXZZXXVUUTSSSSSSRRQPQPNMKKNQTUUUUSQQONOQQRRSTTVYYYXVUTTVTSSUVXY[]___^]ZY]\\\\]____\\ZW[KJ\\kwD8784>U[SG=;=?ELMMMGC?>FNNHEDDDB>;989;>A@AACC@==?@><<<=AAA@><<AIIEMismc_`ejf`b\\B3768KTI@;AR^YgzhA67>MZK;CE?HPKQchei{lJBqo\\\\SKJFCBBCGE@=>=<;;;9789;;;<<<;88:CIF@==@DFA;;BLQSWWU[_UG??GMLE><<?CIG94>S_Q;;????@EEA??=?EPSNNRVQ@;KOLLHBADFHJMJB>;?FIHGFDB?CFFEB818CDDKPSVVQLIH@67@H?1343335<BBBCDB@<8:=??ACA=977:@BA?>FJDBABA>>@AABCB?==<?EB;;<==>=@FLQMD@?>>>>=:9=@?>=<;9755776884359;>@>87<BGLNMH>:=<88:;=@BDED@;;?@===>@?=<=DMJ=652586345579765886<DC<67::8787568865425<@A@;9:9788988887433556:>@@A?;722442332322;CGHHGGEEECCDCCBAAABDDA;744=EECA=76789;;83103313:==@=966;DHFA?9<HNOLGED<329??;987;HQU]TB>;2-.7ABBBB@?AB<658:97689:;;;7..05;>>==<:8877678:==6003311220-042258;=<;<?=932694234225CNG<42455526FQND;55836898640,+-.49:;7>K3/0/.2BNIE97=7016;>AB7Ko&,jq;$>?+AI<EOE4.,-034/+4?:.-;A?GGA?AHMNQVXYWQG?<EKI::;?JIBA?DF52@AFA3001345547;5),45633>E?>DC?DB8357668;<@AAB?BOX]acdcXJ8000//.//BCDCB?>??>>>====>>=<=?AEGEBBC@ABCEKLKNVY[`fghggilkcZTOJHGFDDFGLOT[bjprsuwsdO?>BDEGIIIJLMNPQQSUWZYZZ[XOHDEGHGB>=??@ABCCBACCCCCBBBBCEHILPRV]cffdddcabcdeegiiiklkicYTUWWUXZPDBCBBBCCCCCCDDDEEEEFIJKKKKOPRRRSPMMKJIHGHIIJKLLLLKLKLORTTV\\^[[^^^^]]_bdeefffggghhiikkhdvned_\\^acca`a`abbenjdrpijaY]fZR[^]exocddeehoojmnruwz{{~vdVVX[\\\\ZXYX[\\XUTSQQerTVVTXhlgffec_[UZ_ZVSTTSSRYgZbt}}viabd_][ZZYWVUUTPDEKMLKIIEBHN[mtg`pkWECC<?HPTQLFDDFDDDDBKhJ;KDB>?CBBFIHHHEBCFC>?DJONKIJFABHMLLLGCJQJECB@@=@GMQUWMRbF;>>?<GӉS9S[>BBJZR<9;=<=@DKKMNIDCCHE==CKOPOLGA@@CEGINROGCDEHIC9>NH??AC=8<BFIHGILNOQM<;<B@=>?CF@CddYXXVUTTUUUUVVXWWWWWXXYXYYXYWSIDJORTX[\\]\\\\^^^___``ZOJLLLLE?:55:@FJHB9567;<<:7;<4=R^``bedccbbc_N<==@CGIQZ\\XUUOHFEDEFECDC????ABDHKJFEGFA?ACCA?>?><;9;AIPROMHAAGNOOMKMT`dc[NKE>DLONPUUSU[UMLNTXSDBMPIEDCEGGGEDEC@BCDFFFGIJGHIJJJLMNRRRPMLLKKKJLMNNRVZ\\a\\MIKINTboq]Ķȸwhb`abelpqtpgfghnttrpmki`ZYVSQOMKHFDBA@B>6j}zpa`hlj^_\\UPR_\\WXWYZYYWUSRRSRQQQQPPOQQPLKKMQTVVUUSRQQPOPQQPRTUVY\\YXWVVUUTSRSWXZZ[]__^][XX[\\\\]^___ZYXYC>m~=7773?X`\\PB967;ELMIECD>;AEA>==9788;<<>?BCBABB@?@A@><<==>>?=>AEHF>?Kcijfehgdb_b_G569:GQ@778BVROfsS328:BC?CCBIGBJY`dcaSC=JbnjcXOLKFDCBCHKD==><:964459=?@BDDDA;9>@==???AD@9897;M_^ZcicYPHJQNC;<AGMR@121<SN;;ACHHFECB@@?@ENTSRTWK;;LQOLHFGGHJLKJJHC@FIGEDCA@BDCDHD?AEDCJOSUPHFEC=2,4@@6654378:>@ABEE@;866:?@?<<:868<>>:7>HB;=@@>>>?@ABA@A@>;<??==?AA>BKQRNE>=>>>=97:?BAAA@?<97644:A>63699:>=76:=?BFG?9;>=:::77<BCDA=<;::==;;;;<>@C@81-//0221/./1232379:<<<:33898654468755668;;=@@=;;879;;;;98778:9778=@A?85211003235349@FHGFFFEEEDDCABAAABCCC@;76;AEKQF97988:;;:643124799759=?BEGFD@AINSSO@<=748=@A<415;?<EbcI=605<BA=>CDB@@?:89;::88::;;984102479;:::9879;=:769:4../01113.+/35657>B<79:=?;6;<1;F9-/;KK@9325852//8BJLJGA:2-013553/./26:>CADL302125@KHB8783..5;:74,>zGEz{C\"PS)?WIA?91/-,--..188-'1LWIEFAACB?<@JQRSPOLDOebA7>BB?=;9AG7,/224//24566611<:.,37658>A=?CBAIOC856789:==;=E?;EJNarxv^P>.00--,*+@ACDCA?===>=<=>>>>==?@AACCAABABBCEHGHKPRQV^_[[^`\\WTVTNIFEEDEGKOQTY_acjpporsl[IEGIHHIJJKMOPQQSVY\\\\[[\\_[NFFHHHE?>???@@BBBBACCCBBBBACDEGHHLV`egfddc^\\^`beghiijkkjkmeRKPROKHGDBCCCCCCCCCCCBCDDEEEFFFGJMRUWZ\\_]VPMLKKJIJIHKMLMMMOPPRSTUV[ZWX\\]]\\\\[]`bdeghhhghhhhijgijiijlmmnmmmoklnljhijhgwug^XZ_`TPX[\\_stjjhfedfjmmnruy{{wsdUPUY\\]\\[YYXYYTRRRQQenTTTSTanopojea[TYXTUSSSRRSXgnxg^did`cc^W[^[ZQLEFJLMLJJHGHF@pǶđSHOID9^ePPRQMFDEFECDCBNl~SFICABBFFDIPRSSKDBECA@BEHKOQNMKIHFAHTOHQVLEGHC@@DOW[bc_kdB<?>@=>zD?>hf@>ACY`I8=AAABCDFJHEFFEHG?=CJPUWTPKIEFGILSXUKDDCBC>9;FC<BB>>:CZ\\OOUNHMNQO=;<HC>ABFJA5Pk\\WXWVUTUUVUVUXXXXWXXXWWXYXYXVNHMOQTWY]]\\\\^^____``WMJKJJJIG>6699=CE<48::<=;88999IZ`bbdeedcbbbZH;>AACHYhj^UUXRIEEDEEEDEDEE@=CIKLKGEEED@@BAAEGFFEC?;:>FPQLHEHMLKJIIHJQXaf[IEGBAEEDGQUYX[_^_db[TICGJHFDBBEHGEDGFAAADFGFFGGEEHIKKKLNRSRPNLJJJJKLLLNOTXZ[XMJJGPdfmh{ºìøxhacfihhhrspjgikouwvsojga\\ZYVROOMJHDA??@A5Hztpnlknoomdd_XXZ]\\ZXWZ[ZZZVTRRRQPPQRPPPQQOKKLOSUVVUURRQQQPPPOPRTWWY[YYXWVTTSQRSWZZZ\\^_^\\ZXVWZ\\]^_^^]ZX[XBQh63753AWaa\\M?76<EJI@@BHJA<=>?>=7799<?@@>?AAABBBCDBA?>>?>:8BFB>CIDAFHT[ijfif___dcM8589=B?979<EE?FWXD;949ABEHLRLGFHLUab^OKXWRWXUTPJFCBBBEIGA>=:888868AFGFEFFFFBA>;89;=?AA@85548Nc_]ghd_REHOI=7:DHJM=2426DE<=BGQUQI@=@A?@BJQRRTWA5AMNKJHFGB<BLMKOTPCFJHHFECBCDCGOROIE@=COUOD@CB?<624:>;8777888:<==>@=624559:89:98:>?=<::<A?7:@@??@BCDBAAA@@>=?A>=?@@??AFJHA>>@@?>>=;;EICACD?96668AIC714657;<;9779=AA=<=;:98865:?@=;<=:45=>:9978>DA6120.242275002246:869<;;812<=9::4157546665568<?;8977:=>>>967:<>??95;>>;6247524777679<?BDDDEEEEFECCCCBBBBCAAA?=<;>CKOF:9::89897666302579:>ACCBBDGIGGJEC?;51028==?CA;99;;49[hP=44@GG>7:?B@<;;;;;;:;<<=<<;:88:74678::9999:;=?>946740/020253,*-5=719DE;57:BKJEE@-7QN6.@MD7743672,,--3BORTN>2-+-.232112358AKDIR3/2235:CC=8883..11.*))(@js~zD0_Y3AWOC=620/.,*)1AB41BMQQD?DEDCACFGLQNLT`cZ\\py`OC?91/136?A5+&&),135568976=?600998<>?>?CFGKNJD;889;=?>:;D:2637Tox{UEE63111.,+BCEEEDA?>>>><<?A@@@@@AAA@AABDEDCBDEEEFJJGJNMJLONJEFNRNIFEEEFHKNPS[`dimljlprtq`IEEFGIJMNOPQPQSSVXYYZYZZTKFFFFD?>???>?AAAA@BCBBBAAABCDDFFHT`dcdeed]WWZ_cfgijjklklonbRKKJHFDCCDDCDDCCCCCCEDDCCCAAA@BIPQPSX]bbZQNMKKKKLJIJKLKLOPOQRSSUWYXXX[]\\\\[[\\\\]_dgceghhhhffgefhllilmllmmmnkjjgddjvoiuq_YZ]ed\\]`cc]gvwrmjihhimnkpuy|}zeVTVVZ]]^\\ZYYUXUPPQPSfkTTSSQ^ntlgb\\WUTWVSUSSSUVVWj~yh]emja_ag`X\\c^UIAEKLLKJKHHJLCMRLOIFBCIKNQQNGEDEFEDDCQpyPLOBADFHGDGLNQSOHBCECBBBDGKMKJHHFBAITSMIPOJMNHDMLHILPU[s_?>?>>>3kb<B?HS?;B=J[PDCDCBBCEIHFKJHIKKA>DIIQUTPWaVJHILRVULGDA=;::<?>==>?@=GVJKSVTXWPPJ=?KREEEAGHE=CeaZYWWVUVVVVVUXWXXWWWWVWXXXXXVRNOPPSVXZZ[]]^`_]^__VMKKIHHJHB=;:57AC:6:<;9:?><98@P\\`ccdfedcab^RFBBCBEJV[Z[WTROJFDBBCCDEGHGB?DLMHDABFKMKG?;ANPMKIHB<888=@DLPSROGB@AGIIIS`WC>BBACCFHGQ_XS^eiplTGFGFEDDB@DFFHKOPI@@BDFFHJGEDDDHLKJKNRUSOMLKKLLMMKKMORTVTOKLKHOcemfĽȹĽ~pptwztidhsrlegkqvwusmjhf`ZYWUROMJHFC@==B;5rw|wspoqqpnkhaZ[ZZXXWVWZ\\[[YVTRPOOOPRRRRSQONMNPRSUUTTRRQQQPQPPQSVWWXXYXXWVTTSQSUWZZZ\\]]\\\\YVUWZ\\____]\\YYaXL{IIC;5DPX]^[T?68@GJD;;@DHLICAFG>9899;==;:>BAABBCDDB@@C@@@;7BUVOKJEEGCDYok_aa^`aceR;579:=A?>><<BA89HK@98<BCFMSXYYUMDBOcrsg[XVSRRSPIGCCCDDFFEA==@HPRPPTTPJFFJJJNMB878:;=?=<;;>>BS`]_kg\\PBBHE<658?AAEA96448=?><AJQOIDDEB??ACGFISXF?KMKILLHC=46EONPXUEHLLLKGCCDGHKPUSIB:4:GLFAAB@=<;:9:;;:;;;9999::8554117;75677998;BD@<;=>=<<=@?=>BDEEDA@@@A@@AB?>>>?A@=>BB@?????ADB:<LSF<ADA<9;?BEID924899;<;988;>@AEF>78989::;;966<>814=@;7887<BB@A=503<=:==424449=968:;;947AA=??82378788644566778889;===>>:78<>BD@;=@<9525;<::;;;;:;=>>?ACDDFFEEEEDDCBBBBAAA@@@?=:=CE?<;:86455676520137;AEEDA@EJLGC>742210/036:AFCAA@<:8<PXI;12=C@8239@A?>=><::<<==>=<<=?BC>::;<===<<;<;;=<734553156.5@:,)-7>21@HB64:<COTOC6+/CRD8DF;455564.*+-,-?TWTQD;:41111//0335?IL?IU3142145697666300.-,,,.)&3snM__C;FNIGE@@?6-*+0=ECEIJMOQLADSYLBHLLOVSSepkb]k}gNDD8/1526DB3+&(0324637:<@><841888;=??>CHJJKJF<865568527>6/,&(:XqxL4:5/-/1.,*DEFEEGEA@@@@>=>@@@@@AAAAAAABDECBBBBBBEGGFEEDCCCEDDFIKKKHFEEFILPRUX\\enlbbmrqopn]ICCFHHILNMNOOPPQSSRRRQRRMGFFFDCA@?>??@@@@@ACCBBAA@BCDCEFFLZcbbddedZONW]_aegjlnnnnoqfTKIGGEDDEDDDDCCBCDA>=@GPXVW^_OBKKGLOU]\\RNNMMKKMMLOMKKJIKJJOQSSUWXXXXZ\\[Z[[\\\\[\\]_[`ghiifb```adjhfgghjlgbac_[[bak}uorfSajc`cahieg`]n|wqonlkjmplntvz{dSUWUY___^\\ZYVa^PPRRQfjUUSRUlusXR\\[TSTUTTTSSUVWUVn}~{xoikmkg]YdfPFV\\SKCGKLKKJJIHJMNGDeoMQKIGFECGKNMKGFFFFFEEETszQKMAAFHHFECCCCIUSFBFHIKOUVNL}Y>CEDTRRMADKLLJEBHGA@@@A?\\Y>>@>=<:3L7B?=@>=@ABIKKGFFCABGOMNSRPLKJB?DHHNRUQYc`MGHINQRNIFA;89:;<=@EDDEIKDACFYlreWUI=G_aOUH?CFHB@Sh\\VWWVUVVVUVUVVVVWVVVVWWWXXXWVRQPQSVWXY[\\]^^]]^__VMJJIHHIHFD?959CC<69<;9;GHA:;GU]aceefecbbaXICFFEEFGDFVd^NIPPIECCCBBEHHIGBDLKD@?AGQXUK><HTSMIHGC=::9<FPZ[JFJE<9:CGFBEOLC=>?@ACIH@KaXHQ]_c`K:=FIGFDBBGGEISYVJ?>BFIJIIHEDCCGKLKKMRUTRNLKLNPOMKKMPPRPNHJLKHK]edyʾɹt|sg`_`ejkdagpy{wsnhhhc]XWUSPMKIFDA?<;?3L{~{rnkgfggfe`Z[WTTVUSTXXTSSRPMKLMOOQSUUSTSROOQRSUUSRRQQQQQQQRSUXYXXVWVVVUTUUSSWXZZ[[[[ZZXVVXZ]a_]\\\\\\ZZdWNl@mlO6Yga``YQ<8=CGJE>;>ACLQKCDG>:878;<;9:CF@??ABDC@>@DDBDC;:H[`a\\QJFA?WpjYV]a`abbW@6799;>CKJ>:EG=:@A<;>BFGHJOT_ji_L??Qbkd\\\\dcXRQLIHDEHHLHFDAAIU]bcbdbYTVW]ggcc_N?:<><9:=AGGEDGT]\\cmcK73DLC?A=;B=<AE=2459=C>:;=><;@GFA??@@>;BRYRMNIGLPRLB?81;LOOUSDJKJKIFCCCFKNLOMFB<56:<@EC@?=;<;::;<=>?><;::972./1589::87779::<@DB=:=AA@BCA@?ABBBBA?>@A@?ADDA@???@?>@ABBA?=>@CFA<COMA<@CCA@AEEEGE:27<<<<<;:;<=>AFJG=8:<<<==<:767;>:34:>=75887<DKLE824@LJA;5244557:9778889<@ABCB>626;:;<;:::8879;;::;<<=>@=537;@CEC>>=:6247<=;;;<<;<<<<;?FFDEEDFFDCCBBBBBBAAA@AA;10<GD?=<942379986421136<CCCBCGKJB;:631//241.1;FKHB@A<::=??@;/-3776526@EECAA>:=?><<=<;<?CEE?=>=>@A@?>==:765113543366/6A;,),14/2=C;04;9@QUI6*).29=>A:333663/++/.+,9OWUQB;@>852--0114<HNM?GV2066652,-12324320035533,)Gnz}ZdM2<IKBBHLMH<.'/>F80EN<8EQUNVnjTKMMJM[ccqwh]YhjSJJ@34931=E>3)*79574-/7>B:/110012448=>AFIJID?64210/0,,360)),,2JilC+01.*)+,,)FGHFEGGFCCBB@>==?@@@@AAAAAAABDCBBAA@BDFGGFGEBAADDFGDEIKHGHHJLNNNNOQX`cbempmkkliXKDDGHJNPPPPPPQQQQPOMMPRPMLLKIFEC@@?>??@@@ACCBBBBABCDDDDDGS]^`abdjePFNUTV[adglopnmnj]VPHDCDDDDEEDDCBBABFMS]glppqslS@DJMMSXZUQPONLLNMMOOLLPW^edRMRUUVWWXXZ[ZZZ[][[YVST^hhffb__^`\\Zab^]__``\\XVVbure`onmwycOavm^dddi]fe]bnrolmpnintrru~gSTWTY_\\\\]ZYXXb[RPRTKjoTUURWqypRYjbUSTTTUTSSUUUVVg}|wtwwrqpi^VYP@GPLHFHKKKKJJIGILNOK?odKOKJIIJJIKLLKJIIIFEDFHWuxPMKCDGGFCB@>?=E^dM@FPVZ^`aZZj<LUTVRLHBDIHIJEC@?BD@@>7ST><?==;=4VfC9@>>==>?ABBBBFHJJD>DOPNU\\XLFFC@CFFKR\\SQSUNGJIJLNOLHB=;;;;:=EFFEHGD>IJ>_}}h\\[I;Upd]cMA=@DA@LcbWUWVUVVVUVVVVVVVVVVVWVWWXXWWTSQRTWVXZZ[^^^]]^__TKIIIHIIGGD=64;CB:59<=AEILA8AOZ_bdfggfdcc_TEAGLHFFGKYfeWKNYVKHJKLKGFGGGHEFJGBA??FQWSG?DOSNFDCB@>>BGMNMLK?>FC;:>ACBB?CCCB??>?BE@9E\\R@ENKGGB;=GMJHGGFKLIJQTPHB@ENQQMIGECCCFJLLLLPTURPMKKNRQNKJKSSPNLIJKLMQ[`aþȮ}|yv}lWQW_cced^_ht{{uqkghg_YXWSONKJGDB?=<;56}|vkhjf]WW]a`^XTTUX\\YVWWMILLJJLKKKLNQSVVSTTRPRSTUWVTRRQQQQQQQRVYYZYXVUTTTTSUWUSWXYZ[[[[XWVUWY]_a]YX[`][cSD][~}_8VsqqqeM=ADEHJHCBADHKKHCBB>::99=BAACJJC=<>@EE@<?CEDDB;67CNY_[WG;?Qoo_W^gfdb_YJ;99:;=HQMACJHFMKCADHJMNJHOYfqup^NEGQ\\cd^_dff_RKHDCHMPMGFJR[_ba_`b]UU_jmnrtsp`F8:>>>BIOOKIJNT[ahgU?24DQQSSGCH<4=G?2469>@<<?;8758?ACFHD?<:AQWSTN@@JQTRKFA52?JPSK>IJGEEEEEEFKNJIHDFF@:89<AA?=<;;:99:<=@BC?<97531124:>;547755579<@B@<:>CDDDDCEIHA=>><;<?A@?BHHEDCDC@==@CDDCB@@BDEBADC;67=CCBCCCBCFD:4;?>>>>>>>>=>AHJA:;<=>><<>=<;:;<<88:<>946:9:BED?639BOP@676564238:997316>AACFHE;1388;?ADB====?@@?<:<>?<9:7337>BEF?:<;61244459=====>;::>GHDBBCEECCCBBBBBBAABBAA=21;CB@?>;5568;:996655118@BBCFGGECA@;4112773/3?JOME??=<;<;9>?<92+0>A;<DIGDBA?>@A?=<;:::;==;87<?>=>>??@?80/0014323336764/++,.0026940352:JK;-'*/0,/683114882,+/55038EWYSF9<A=50,.2335<FJI=GW6389<9.()*,-,26554576653/38He686;BD?<BED@;5/7EB-$4A;48;@FMUI?JTTJI^idqpWJRh}YHKJ@7363/5;94,-7::92+0;??7,00.-/+**.6=??CJE702440.01137600:EJNWd]@57672)'**)FHJHFGHGGGEC@????@A@?@AAABCCCDCBBAAACCEFGJJFCABDDEDDFGIIJJJMONLKKLMNR\\ehiklmkeaXND@BABEGGHIJKMMMNNNNPSTSQQQPMIFDB@@>>>???@BBABBBABBCDDCDGNSRVZ^chcTHGKLMORUZ_befhgcXVZWKEFFFEEEDDB@EPX^a`]ajsvsqomRDKPSUUY^YSRPNMMNKKPW]hqvuxjPPQSUVVXYZZZZZ\\^^`]VQPWca[\\]`bab]X`aYTVWUTYZR]xdZhne\\akjepfWf`emhggec`cornpssst~oZUUVTYbXYZYXVTUPSRPQKvoRUUSR]lpXdsbRSSSTUUUUVUTWYZj~|qu}kakkQEIHFDFHJKKKKKJGHMNNOKFNSJIIKLLNOMONMMMMMLEDEHJYvuOKKGGGEC@?@??=HbgVKMSY_[TW]evb_b_e[LBA@AA?FKFCBAAA=>?>VS=<=<;::9;=<=>==>=<>@BCBACEGKSlr]LQW^XJB@@?B??GRVLJIGGJMLJHMPQJD?=?=;8>IHGIPQIFW^H]vugbYD@ajUSZQD;:AHLNTd^WVVUUVWVUUUUUUUUUUUVVVUWWWWWUSRSUVXZZ[^^^^^^`]SJHHHGGFED@:67=AA=:=?AIJFI?:JX\\aceeghgedb[OEAHPMH?EXb]TPR[^UMLMPUVQLGDBDGIGEFD@?ELLF>?KRMEBC@=>>@CISRJB?>AEA<<?BBBBDDBDHIB;=@C@;FUNCAA?=<>AFGHIKJJINQMMOMIHGEJUUSOJGECBBEILMMKOTUSQPMLNQPNLJJSVPNMLJLPT[`[s|vu`W_dedda^_juxusmhhhaZWWUPMKIHDB@?;=93bw|tibeg`SLQ^`^[TNQY]a_]]XKKQLFHPUPLMPSTUUSTQPRSTUWWVTRQQQQQQQQTX[ZZYXVUTTUTSVWUTWXZZZZZXWXXTVY^ab\\UUZdc]cR8clxpFPrx{}sPCHIIJJIHGFHJNJDEED@::><?IJJIIJE<;=BGGCBCFFHHFBCGC@DS`Z><MUnj`^W[ehaZWPB89;>CLMEEMIBGRWRNOPPQOIFMYcoywn^RNQUdmbYcsxtbQHCADJMOIJW^]]_b`][WSU^dYOXcln]>07@FMQRNHCITVRYcaQC?=8ASZWSKIG81=F>37:=:8;@B?>=;66<EORJA?BFNSRQJ;9AEPWTNH@63;KM?:JOFCDEGGGGGHIIEBFHC@?>==>>=;;;;:99;=?CFC?;52138977;:744345458=BD@;=ADCDEDCGOL@:9;=;;>@BABGIHHHHGGDA@ABBBDDDEEEHE;2003=EECDCAADC=8:CHFC???@@???AGJB;;===>==?AB?9:=;<=<<>=99=><><7312:DHE;69:972/158<?;1/5<BFEDHKA2069=@CGD>>?>@ABC@79BF:459945>BDFA7985122/.5=@@@BB?:68@EFC?@CCDCCCBBBBBAABBCCA@<:<=>>>=;679999:::<<92,1;BDFJKIHIKH>889:983/5BKNNF>>>=?ABAAGPQ>,0@FCCGJHC@@??>>=<987765421/06;:9;=<<<;5..3676311113;6+',.0234642022203:;2--.///0112347;92/027<=<:>JOPI85;94/.243544;FE=GT4034880,.-,,+.79:44@D6377654NqR%-899;>;7323359@@6-049:750/66.-BPSSJFZdctiC3?RsoFAKHE<100.35310013882-5AA=<<><0-0*&'(-7;::?=1+4:92.3536@FFJOS[bdaSABFEC=2+**+EGJIGHHHJIFDAABAABA@AAAACEEEEDCCCBBCDDEFFHHFEDEEEEGIIIJJJKLMNMLLLLMMNS^fjlppmfYNG@>@AAA@?AEILOQRSSTUVUVUTUUUSMHFDB@>>>>=>@BBBAABABBBBBCDGIHFJPU\\ZQLHEEFFGFGKLMPW[\\]VOV]SJIIJGEDCCCDIQSOJKOXhiacjnrqYDLVUUY[ZWVVROONKTadciswstzfMNUVTVYYXXXXZ\\]_aa^[WUVSTWZac```ba^ZWWWVTUWYɸYSTZckmebgl\\Sc\\[gijhc]\\^gqrrtutrjbk^UWVUUZhWWYYXVRPPPRSRO|jPUVSQQap\\^k^UTSTTTUUUVVUW[X]yrr|{sYrwQFIHDDFIJKLLLKJGHMONOKNHHKHHJLNPQQSQOOPRPLFEFIKYwsOKHHGFEB??@AA?EX_a^WPRVTNQXYckZ^UKWOC>>?><=HSTKB@@@?@@=TS=:<::999;<>?><<<<=>@CFKD>@DQnGagZOF@?@B@<9=A?<=DPGHNRNGJQXRG@=?@@96HMDHY[LP`dOSWPU]K<SkV@<AFA99ENOMI]d[UVVVUWVUUVVUTTTUUUUUUUUVVWWUTSTTVYYZ\\]]^^^^`]SJGGFFFED@=;:<=??ACBABGGCA9BT\\_bdfghhfec_UIDAEPRH=FUNITYZ]ZXTKKRVYXRH?>DJLKKMICDEC>:9ANQG?AC@=@CB?DNWWQIIQOH@;9EKHCFHDDNPD9;?CEGIONLF<=B@?HOJDIMMMMOQQQROHGGEKUSOKIHECBBEILMNMNTVUUTQMNONLKKLSVTQQOOQQQZaVȽ}e^aa_]_^aksttqjggc\\WWUQNLIHFCB?=;<5Vy}yqfaa_YPP[b\\USRQPRUYZ_bXSXXMGFO_]QUXYVSSTSPQSTSUVWVTRQOPQQQSTXYYXXWWUUUVWWUVWWVXXZ[[ZWTW]^XVY\\ac\\SRWeb`eS>>`p|aZlux}v\\IKMMLJJJKJGFKLFEEDB;;?>@KLJIGFB=8<EIGHKMMPTWYXX]WLJ[_H6I_[jZX_LHS[[XWVK===?BHFDIKB9;DMPONMMNLHGTbagrwt_TTTR]lmfl}v`KCA@CHLJP\\^ZZ^b`XSRRRRRD?HMONA38FMNPNF>>BKSSQTWL=:A@:CSUPSRI?46AE>9=@B95;@?<;;:517BJOLECEGNSRME=87<KTPNQOA11<=9AOTLB>AEGIHA=CE@?A?;<==?@@@?<;<=<:9;=?BDDA<6356898559;:6127;?@@DFB>ADBBDFFDFKI?64;C?=?@A@CGHHIHHHIJGEDDCCDEEFFHKC50008DJHEDCADE?74?NTOG@==?@AABACKMD<=???@??DE@8:>;9;<<?ABBB@==<3-/06??:9::;;851148;<957;;@HG?BKG629<=@DDCA?@=;?CFE<=@D<559:56<ACEC>:71.1215>BAABED=516ACABEDCCBBCBBBBAAABBBCCC@@@><<;;:867899;=>===92,.5<@HNQQPKHDA>=:6792.7DJLKD?BA=@FGBER[ZOB>BDDFHIGA@A?<:;;:7755320.-,.1356;>96675336;<984011154/-13578;<621222222321110.0321248:<:52/07=?;79>AHH3,122003435404?F?HQ9>E>86765995103<>4?QH.+48:<7-51(-1368<<1))+*-:>701861135429<7CcbPOMDO`ipT1+17SZ@DGBB?740.14677767961/4;=@FHIF:/-,))'(08<96778:<;6168/+5EPUVSWabZRKHFEFE>6321HHGGFHJLKIHFDBBBBBA@BBABEFFFEEDDDDDDDFEEFEDFGFFGHJJKKJJJKLMMMLLMMMMMLMWfmpqlfbXIB?@A?BEGLTYZ\\^___^]\\[YXXYXWZZSNIFDA@?>>>>@AABCCCBBBBABCDEEBBFGKNKDCFECCCDDDDDEFIMNNLHJNMKKLNLFCCBCDCBB@?@HPQSWcmnrwrXISWWZZZZXYUSRNOTVUV[fjfjvxfSJPVTVWTTUUW[\\^accdfc^ZXWX[]^^_a`_^\\\\ZYVSS~wMSOM[krplfc_][XRV[aid__`bglst{ybQYZYWX\\\\`cOS[YYXSPPPNW\\Z~gMSWSVSXqjQT][WXXWWWVWWWZ\\Z]hvx~y}v}]WYRIFEDCGKLMMMLJJGINMMNLMOMKIIIIJMW^WZ`\\UROKIIIJKZzqONHHKGD@>?@AAB?HXdaVMMRSRVS@>CAAAACB@?@??>>HUYNA>AFEC@=UR=;;::989=A@??>>====?@ENK??ErۡWEcoVD???AB?;9888:1FlLBJSPEFP[XK@<>>DFBITH?NUPbk\\OI=6?GBD^fE47>E?89BIIHERc^TUWWVVWUVWUUTTTSTUUUUVVWWWWVUUUUUXYY[]^^^^^`]TJGFFFECB@=<<===>ADA@@AB@8;LZ^addfghifcaZOEA@CLQOHKMCMddYV\\cXHOXVWYSF==DLQUVSJFGF=:8:BLNE=@CBACFEFKRZcaW[_^YF::JXWIGJFFONB:<@BEGJLMNLC@CBDNVUMLKKMOQSWWVQLLKGHQOKEECA@?AFJLLNOPRTUVVROMMLKJKPVVVUSQTUPMY_n͵Ǽvkhnkc]``^XY[`jprslfdb]YWXSPNKHFDB@?;;3Dv|}{tlfc]ZWNM[\\OHJSUNOQQIP[[Y\\[NDBJ]_[[]^XSSTSQRTUTSUVUSRQONPPQVYZYWVUTTTUWXYYXWWYY[\\[[[[VSU]`\\Z^^aaYUU[b_afTM<DNeyvlnrtsk\\LLRRPMJKLLGCEJGCDEC<=@>BJHFGFB?;6:EIGINRSUWX]``^VV_aK9<HW^mUL[OGLRUTWYO>88:<>AGFB=437=DHIHHNNIK_od\\kts[MOQQQby}y{TDE=<BGKQY\\\\[ZWROPOONKG@DJB:715FQLE@=97>FKMJKOH>;????DLNRXRB63<DEBAAB>;89;:99:>A>=@FKJFCAELPOH?:87:EICGUXI5266:FPROD;6>GMG96<=<??;88778=CB>;=?@=:9;=?@AA@<6589634447:96315@LLDADDCDC@@BHIGGFC=40:DA>AA??CFHGGFFFFFHGGFFFEDDCEGE<3367>IMJGDABED;35AQWNC>=<<>ACDEGMQJ?<@CED@@EE<6:><78<<?DFEC?=>=60//2987<?=;;;;:8799547;<:<C?7;GH:6<<<?BA?A@?;69?CDBA@@<78;;:9=>BDDB=8/+05;AEB>>>?<5/16>?:?LJCCCBABAAAAABBBCCCCB@@@><;9865569;=?A?;951.133:GPTWTH@>>?=51670/9EJKIB?BCA?FF@FTWUSSPKFDFGGDBAA?;8:;96544320/,,,.267::767888658<=;61//023554348;><741/00113532210/3522568:<;73-19:6339<:AG3)//00265245468<9L[MafXE868;DG>761360;J9'%+364123,02/6>@<;60-,+,154333/++.566;<>Oc]PPRGDT`Q2*//2AB6@BAA@;764//6:?BCA:3./016@GGHF?2--+*)(+2;=;9:;;:753351+-5=GS]adZJLY\\K9>JF=99:JHFFHJNOLJIGEDBBBAAABCCCFFFEEFFFEEEDFFFEEEFFGHIJLLKJKJHIKKLNNNNNNMMMKNV_decZTSOGDEFJPTVXY[]]^aab`^\\\\\\\\[ZZXW\\_ZSNIFDBA@@?@@@ACDCCCBBABCCCCCCCDDDDCAACDBBCCDDDEEEEFFGFEEEGKLNPOKGECCCBBDEFEECGZjklnopqr\\JSYZ[[ZY[VSTPPNLKMLRcmmosymLHUPNOQRPQTY\\_abcdffd_XVWWY\\]^]]a`_^[YZWX}ŚXIQOJQ^jwsYWfcXUPQV`pd`acfd`ksmtwhX[Z[[Z^[aVEO]ZY[TNNZlhb[~cNSTSWXScpb\\gd[]_]\\[[ZY[a`^fuzrvy{zyxv}rtzbUNKFDDEEIMOONLKLJFJPNMNMLLMMJKKIGJXbS^siYPKJKKLMM[ylOMEEHFB>?@ACCDAFXaZNIOVURVRA<<=<=????@@?@ABIOQKDACHHGFHZQ?=;::::;=???>>?>==<??@ILHBEv>FPYN?<=?@A=;99:;>2cJ;EOPGDKTSLF@=6<LXVVN68KVmt\\OL>9;:?NTWG<HWVA8;HROGBCYaVSVWVUVUUTTTTTSSTTUUUVVWWWXWVUUUUWXYZ\\^^^^^`]SIFFEDCA@@>=======>=>>>>98EU[abddfgghfc]RHBBAAJQRNKDBRdbTVfeOJX\\WVYQD==@FOWVOIGHGA=?ADGHGABFFFGGHOUW^hha_`\\SF;>JR\\WPMHFJH?;?FEB@BIJIJHEB@FPVYUJGHKNS[][WSSVUNIHIFCDFEEECFKNOOOPQSUVVROMKJLKKT[XWUSQTUPQ[ZĪǼoaZVRPTZ_bf^XY^glnlfa`][ZWVSOKIHEDA?<;6:ys|wotunihg^][PLXYMGKTWVUURHCISYZYQD?I[]]]]]USSSRQRTUUTTTSRPNMMMOSWYXWUUSSSTUWYYYZYY[]^^ZYXVVVW\\]\\`dcb^YWZ^_ZbgTPMI<Ys~zwwydRJJKPTSQMKLLGEFIE@CHC<>?@DGEEFD?>;7:EIGGJOU[`gkhd_Z]cZCEI?L^jVDQLIOUWTQMB964569=?=?=9559?DFHLQPMP_mdWkwt_OKJDHf}|||aBAB??EKNRW\\]UIGPUNNNOD@GF=<@>=CD<768;>BDFHFEFC>@A@?@ACKTSH>78>CDDFDA>:888888;?DE@=ADDC@>AGKIA;88:;>>:<JSMB?:7<AEGHHD78CI?57<;=@>;=@@:46;<989>>;:9<>@BA>>;658:60/224543456>IMD>?CGE?;<AGHGGD?:649>>>AAAACDEEFEEEDCEFCBCCCDDCB@=856:=@CJKHCABFD?85<FMMA:?CBABEHNSRNIC?ADGGDCA=748>=99>>@DB@><==>=5.29;43@F?:<>>@@=;:89:988:;5/5AC:7::<=<=<::951159=@BB?<:<>=>?@=>AA=;7426=BEC:7888645:<;957=ADCACDBAAAAAABBBCCBBAA@?>;866446;=?>?>:62..2438DLNPNECHFA<83562/7DIKE>858>>FD>?FNQQPQOKIGGCA@BC@<78<9764321//-,,08<<8569;<:96569962.-..13442//167631,*---.0343200376238748=<6567631/08@;<C5-0//02333466860-JnirgTB727FKKF<81*)(.9631,-0,)9E9335DMJ>89:8653215861//0135567AG@:?JKEACH;,14665529>EKH?:;<968=FFD;1--.//6=<CIJ?2.-+./,+058<85467445468:;73>V`a]I<DZhaJ>??==:;IHGGIKNPPNLHGFCBBAAABCCDFFFEEFFGGGHHGFFEFGHHHJMMKJJJJJJJJKMNNPONMMMLJLPPRQKHJLMJNTVTSQRSUW]^\\[[\\\\\\\\\\\\]\\ZYZZ\\``\\TNLIEBCB??@@ABBBCCBAABBAAABBBBBCBBAAABBBBBCCCDDDDBDHIJIHIKMPQPOLHDDCDEFFEEDDNWW\\iurmihqfLNWVYYYZVSTQQPNNONQXaistsnhXMGCGLNNOPUWY[\\\\]^][YVTVWX[[[\\[^^^][]cZ_b{ֿzJNSRMPMSc_LRd`VTUUVfug`dgieZ^qXPcm^[b_]YUR\\ZFN[YY\\TRZqp_`RTSPOWTOexpdfbbec`^]\\]`cadhqvxvwwvsrquz^[_]\\XS?DEDGIKOQPNMKMKEKSPLMNMLMMLLLKIJNMI]qjVQNLPOOPP`|gMJCCDDCAABCCCBDQ^]QGENUVQPSVPD@@@BBBA@A@ADHOUXOHFFKLLNP\\RC=989:<<=>>?>>???>=>>?ABFG?ZAHEDC<;=>?A?<:889:1^9BHMIEGHHPSHDD:9N]\\T@?LTag[RMF:9>DHGMWV`cS=8;O_XE:8CYYSTVUUTSTSTTTSSSTTTTUUVVVWXWWVUUUUWYZ\\]^^^^`]RHFFDBA@??>>>>=======>=<8?NX]cdddfffgfc[NEBBAAHOPJB>@HRSMXdYGKTQOSTMB><;=GNLIJIIHCADIHIIFDCFGLNHIORLSbeedeXHKLJEEZf^SJEED?=CLLA=AGHHGEFEBGILNOFEEGLUaa_XUVZWPHEFEIMTVX[THKPQPOPPPSVUPMLKKLKJQYVTSQOPTQRTkϽƿȹļ|}xqswiYVYY]eokb\\^cffca__][YWSQMJHGDB@=984m{u}tonnnooh`_]VT[ZSPPSVVVUSUNEKSUUURJNY[\\\\ZWQQQQQQRTUUTRRQPNKKMMPTWYVTTTSSSTVXXYYZ[[]_^ZVSRSW\\_^ZY`fc_ZXX\\b_X`eSLNE<]q`@BJJKPQPPIIJHGKIC>CHA>A@ABBAEGB==;9<CGGFGM\\ownh[PTZUFJG;O`dVDA@IPWb_M84=LG@:7979@BA>>?BFFJQRQUX\\geYlvqdb_SH\\~ywuw^FCC@@DIJJKSZQFKRTQQPMAAB>EVXG::<<74<GHC>BIMOSRH?@@AA@@FKHB@><?ABDHGB=:998779;:79<;==??>;;CIFB>;;;:<<99>HLMH>9:>=>AHG<7=>859<>==;:@IJFA;53223655888=BFC<:96489632343344558<=A>;<?DCA87?BCCBB?=<==<<>@AAABBBCDDEFFEEGHD@>ADDCA=::;<>@ACGJIFCADD>957;HMI>BNQLIGOVVROLIFDCDDA@=;99;<;:;>>?CDB@?><=>701=A52@I?8:>@CEC=>AA>=;:::616;:88<;<<<==:66653679=??>=<>>=>@@:9=;54568<??@:236569=CHD8321/19>>?BAAA@@@@@AAAAAAAA@@@>;87679>ACBB?;860/2555@JMOSROOI=853477//:EHA;9.-7=EE=58EQRLMNPQKC>;=BDD?77;<:75443221125<@>:67:;9876876541.0146566410--.20-**+++-/134820284//5536:96677645339=99;400//010/0034660+IooeH4/008LOKI=510-)*/7BA6,*/:KM=22<JUSC428===:515852.,./12347B@.#,AFB??<=<==><88<>AJOQJC@@ECACHD=5+&*.06<?9?MO@20./22./2468653453469<?CA64I_^SOCIQWZ]VIFA7464IIIIKLLOSQKHIHDBBBABCCCDGGFFFFGHHIJIGFFEEGHIKNOLIHIJIJLLKLNMMONNMLMLJKMNMMJIJJLY\\OFEGOUVVVUSVZ\\__^^^^_^\\[\\\\]_a_ZTQMIFECA??@AABBCCBBBBBAAAA@@ABAAABA@ABBAACCCCDDDBCGKLKJKLMNQRQOMJEBBBDEDCDFHC>Xppncadbj_ELRXZYZVTURSSQQPPRNO`rtjhlgP?BFHKNNMLQRSSTUUSTTTTUVWXYZ[[\\]]]]]`]WYft֏[UY[XVUMRYUU^b`\\WWUTf|ibfigaXX_TJQl_V`\\WWVQ\\gLVXWZYQUmk^TTTPQ_ia[vw\\Xcfefca_^`deca_ZanxwuspmknkWUQQUZWLQFCIKMQRONMKKKFMXSMLMMMMMMMLLLMJ@CoeS[USSRRSc^MH@ABBCCDDEEFGFP^ZLEDFJMPPOOLD@AAEFDB@@BDHMQURJIMNONNNP[UJLND::=>=>>=>>>@AB@>==>@EL>kޠGIJCD>9;==>BB<:76794֍?@ADGEEDENUEEUK69P\\YP[b^ZWOILH<?JKFBO_acWE66=KY`E356H]XTTUTSSRRSSTSTTTSSSTTVVVWYXXVUUUTWZZ\\]^^__`]QHFFC@????????>>=====>=;=KV[adddefffffe[LCBCABGNMB::<ACAELNKHGC?BJLF?;<=@IPRPKJIHEBHLKKIEB??GQRHGOOACV`imnfXX^`NEYkeYKD@???ELLC@BEGGEBEGGGD@ACBCDDESbfb[UUWXRHBDHSZ_fnqdNLRSQOOOOQWUOMLLLLLJOWVRRPLNPSSAϽǾ»vpv}x_V_fdbckpjb`acc``]]\\[WTPMKHFDB@=;95]yp}vrqnnpnfdaaYX`]TORVVTUUTVVNMOQRRWQQWZ\\\\ZRPQQOOQRTUUSRRPOMJKMNRTWWTTTSSSSTVWUX[\\]\\\\\\ZUQOPUY^__[Z]a]ZVXY]a`X`dTA=49Ydk~tEDJIMRPOMGFIGHIGA>BFA>DGC?<?DGEA?<:<@DHKLVl~{qg]F9LbQ:E?6Ra_VM@=JSWgmS=@Ua_YI845:AFHKIBDHEMSSZb]Ydd\\kpojtusytuvurQJKD?ACIHCBJVPMOSTUWULDBAL`gV=6:>>62DVUEDNW_fj_J@@BDDCCDDCCB@>?A@CEGC>:88867:;8448;9:;<;85>IJE@?>;9:997;AIMIA:8;<==?><:6368;=?=9:;=FLNPLD:41//124788;CB735547999::63235835:><;9::=BD;7<>>>?ABBCCA@ACCB@@BB@AABDGHHFIQNC>BEEC@@><??>?BEEILKD?CC=756=GJMIJOTSJJSWVSOPROFBA><>>?BA=::;=???BEEDA><<<810<C:4?H>47=@DHG>>BAABA>===;==:9<>=<<<=>>=987::9999:=@?===<==98:74343366892.6989<@FLE50134.1CJ>9@ABA@?@@AAAAAAAA@@@@=9779<@EHIHA<9:941322=JOS[]WSM:1254554128<;<?9688=B<59COTRPOQPG<88<AEHB86:==9556556469<>?=<::99665578762007;=??=<:872,+//-.-+,,-.036960263,+3435:877776788:@:886420./11/020/220,,L\\OC',1(,>PPGA7-299521079A@:>GNC748?IOSJ4*19:<;920244.*,./022301015>C>=?=?DDDCA><>DJORVSI@CGEFFGD>:3/.-/9A>76:<721017:86135555544238>@BEA4=T[[TKKX_bba[SXaL/),IJIJLMNPSTMHJHECBBBACCCEGGGFFGGHIHHHHGFFEFILMMKHHJKIHIJKKLNMMOOOMMMLJKMNNNNMKIKOKB?DOWTKGLT[^_`aabccbccbbaaaaa`_\\WQMIFCA?>@A@ABCBBBBBAAAAA@@AAABBBB@@ABAACBBCCCDDDEHJIIIKMNQRRRRQJBAAAABCCCBADO_`bgcROmwaJQVWYYVTTRSSQRQQSPOXgicaYokF<CDHLNKMNOPPPQQQQQRTUUVVVWYYYZ[[[\\]\\YYYwZVhomfb_`jicfgd`\\ZXVTbichjlZSYSU^]m_VSUUUYU`pS_[Z[WPM\\usg[TTUbs_hehggca^]bfea]XbihtusoligeYXTVRRYXTMFEJKNSUOLLLKJFN\\WPLNNNMMMLLLMNMHCϪiSVTSSSgYGF@@AACCCDFGGLQ]^TLFDBCFOWQEDEBAADFEBACFGJKIFDGMOQPONPQXWWhl]B;>===>=???@BDD@===>DL<\\΃;JICE<8;>>@BB>;75684E;BDFFEEFINH@JWO<<GPJYlj`P@AJHCQUMIFNVUUI<6:?CX^C246;R^WTTTSSRQSSSSSSSSRSSTUUVVXWXWUTTTVYZ[\\]]^^_]PGEFC?>>?>>>>>>======><9FUZ\\bccddeffffcVHCCCBBGLI?<<<?ABEFDGGB<;=AD@::;>FOW_YFFJJGKLMLLJEA>BIPNMLNOFAFYhkmolfbdVIWkiYHB?=@ADIIFDCDFFFHLQQIA:<ABCBBAL`fc[NLRVSHEEIPW_mxvfTSTSSROKMQVTNKKLMMLJMSPOMMLMWZCcǽƿ~{vn_Z\\bggcbenngbacb_^[YYXURNKHEDBA@<<5Gk|yurpnmjhebaSP^^NGQVUUVURLLQOPPPOIIPVY\\\\XTOPOOOQRSTTSQPNMMKMOQTUUUTTTSRRSTSRQTXZ[XWURRQQV[\\\\\\[[[Z\\XVWY[]`^YacY<:;BLO\\ih{BAIJPSVPKIHHFC?@?=@DB?BFA=<?BDFGFD=;=@FMS^p{ztn[G66ARC5LF=Wc^_Z@;IQVbdPBOXRQTP936:AFINH?=<AOU]icQMWb^joneew^eongTFKLFCBCGFACNWTRSTSU[WNKKVhjT?778:7/9SdaUSZ_fldN??ACEEDDEEEDB>===?AB@@<;:;757;;:6488989:9758BHFCA@=<<;87:@FJID<8:<<<:9:;4.4:=>>;:>?:<GMQRPH>940366::88=?7467669;=>;52246::7:=;9999:?A@==>?@ADECBA>=@BAABCBAA@@@BEIIGGNNFBCEFD>>A>==;;ACDEHIEACD;656=DEDMNQPJHHLTTSPRUSJC@=;>ABDD>;:;>>>>BFFFB@?;:921;C?9>D=47=?FJD:8:@CEEB?@@B@?==@>=<;;=?A@=::==;;;989?A>>><<=;8986541-,054.4?@=>>?CIB1/3664B[`O>;?A@?>@@@AAAAA@AAABA><98;>AEGIGA::9:7410-9IKJPQORUC255667:83027;=:87548668;@LUVNE?;867:BFHC869=<975555668::9::;;86665335897314:?DEHFB>==;512110,*-0--/14640043,+24346666767899;D9765430/134336311.,*,JJ7@AK;$1Q\\P>3/+267;84-&1GWND83994@CIPOG749>@ADC;6543.)*-/010,))0=9085;>>AEHECA@<=GNQTWUIDFGGFGED??BEB6./31,'&*34204;CF<756666431.0;CBBEGCHKOVTLJQXiyuk^R[h[C3GGHIINSVZ`[LIIGEDCBBDEEFGGHGGGFGHHHHHHFEEEHJLIHHIJJIIJJJJLNNMONNMMMLLMOQRSVVQLJFDDDHNMF@AHOSX^addefffffffeedbbbca]XSOIDB@?@A??@BBBBBBA@AA@@@AABBAAB@ABBA@BBAABCEEEEGGGIJKMPQQSTTTOHCAA@@AAAACEFKUXYUVhnprbTSRVWUSQQPORUQPSTUTX`]YcqteM?@EJLJKNPQPPOOQQQRSSTTSSTVXXXXYZ[\\\\c\\eUJetqlhc]bqoiiikic]YUNSyi`kovXNVU\\kkf[VSSUVUUixYa]^\\ZTKFUoo_cWOUh|qpqljc\\[fgd_\\Q\\lknrniec`\\UaYUUSWYRHFGKLMWXPKLLKJHQ]\\XUWURPMLLMLLMMMH\\ٗaVUTRTjWCEBBCBBBCFIIGLXmZFGEEDEEJZ^PDEFECBABBBCEGGEB>>EOPPPOMQMMT\\innR<=>=<===???ADHC>>==?H<ZV:FEDD<7:>>>?AA=75582}֮J7@CEGDEHGLVJ;IVJ:>FBGWXOD;AGEQa\\RXVNLMOE7;ILHSP>448;K^^TPRRRQPQRRQQRSRRRSSUUUVWWWWUTTSUXZZ\\]]^^]XPFDD@>??>>>>>>======>>9>PZ\\_ccccdeeedd\\MEBCCBADGE@?AAAHTVRMFBA@?@@@=;<:<EMO[_PONKITTNMLJHBCMLHLWXRPZWKN[bktwwm\\QGQfiTBAB>@BCEEFFEFEDJQW]`I=9BLGAA@?@Tc^NCBFNQKIHHIOarzo[TYVSVXPIKOUPLKLMNMLLNNMLLMRSVQEſĿ|wpWO\\gd]\\adcglibaba^][WUSRQMIFEC@@?<8<}r~~xsqnmjhd\\SDAPZOFOOLRVSOB<HQRQRK><GUX[[[[QOONOQRSSSROMKJKMORTTUSRSSRQPPRSRRQQRSURPONQUWZ]^_`^\\Z\\ZXW]]]^_ZZdc]A>AA>HPCRpm78HMPU_WJJJIG;7:==CFDA?>==>>?@CHMMB;>=<IY_agxzgN94766@U\\XYdhgmaC;DMSYOB@DA87BKB<;>DHIKG;76;JYfcO?AKY^lkVGGj{AFVTLFFIMOKCBCDDIV[[YXUTSOFKUaicP=8:9653<N[deb^VOOOG:8>CDEEDDEFFFEA>;9=??<96>FA759<:<=898789:99957ACA@@@DCB85<ACDGFA;<<>?><986359>A<:?A@>:=DGHJHEC@837;:;=<;:9998558;=9567667=GC><:::::;=>??@AEIJJJFC?:8887>IME@BBA@BEIJGEFFDBCEEEA>@?<<;;>@AB?@FGFF>644;@;:ITRF=?CCKSTQQTSOGDA?ABCCB?>>>>>?@ADFFDCA><945<@>==@>:;=?EE:226<BEFEDB@CABABB=:89;>ABBB@=><<>><:8>@>?@>>=<:;:86642.2622=DB?@C?AI?-,32.5J]ebT>:<>=>??@@@@@AAAABCA@><;=>=?BB@=9768<>51.6@>>>?<>IF?84688763138<<975431///-/:FKC6365449BCFA;79=;76566778864579::98885445:;8547:>CCEC@===>;54441-+/3.-.//,./.12/0442//1344556778987653311488;;<8841/02?;8Sa\\A4MkkO3---569<:8/'+;HA7,'7@8AEJIB;48?BLXYWLFB73,)+.21-3PabR@@<556=>ACHFA=A<9FLOSWXZYOGFFFFGEFJKKG>2,-/1246:604AFECA:::952/0,.;CAAA@@7;XZRPJMS`uxqhQ;JclcDCEJQ]cfjqrbNFFFFDBCEGHHHHIHHGFGHGGGGGGGGGGHHHHIJJJJJJKKLMONMPPONNMMOPRUVXZ[ZZSJGHGEDCBABEMW_bdggffefffffgfdcdddda\\XVOGDB??@@?@ABBBBBBAAAA@@BBAAAABABCBA@AA@@@BCDDEEGKMLNOQRQRTTTSRKE@>?@@?ABCEFFGJUgpkddno^NMSTSPQNJSWRPSUVTTUU]jkeko^H@HKHFLVWVSOPOOOQRTWVVVVVWUTTWYZY[fhnrijnmd]^[SYjme_emlc]XQGFqk`ow{VQYY`cXWXXVVWXRQm[`^`^_WQGGYj`dTKZ}}xvsprjXOYjjbbXLXp~wh]^_]\\bs^TUTUWPGFJLKNTVOJJKLLJOY[Z^`]YTOMLLLKLLLLF?`ΈTUVRUnV@CHFDBBBELMKIHHPJCCDFHKIGR_YIBEELTUOEBBBBB@@>;DSVQOMJJDCPXfik`F===;<<<=>>@CFD?>><<=;Vd;:?ADD<7;>@>>;<<87696Ff5=BCFEDFJR]O99EGCBDED@>=HW[OLZecX_eMIWUB4>W_XPF;55:@IXbWOPPPPPQQPOOQRRRRSSTTTUVVWWUTSSTWZY\\]]]]]WPECB>=??>>>>>=======>88JY[]`bbccddedccXICBCCBAAAA@?BFIRadXH@@AA@@@?>>;8CSQHRdg^RJMTVQNLJKLKKHJS]`UQZ[SMMQdu||ZC>D[dRBCD@?@AABDFHGCBIS\\aYG>@JRQNGA==EMIB@ABJPNLKJITgv|wcVYWRRTPKKLNKJJLOOMLNNMLKLNQUQ?wȾƱþyv~kXT\\fcVT_d]X_da``_^^ZVRPONKGDCC@<:;8elzutqolid^PJORYZVUNBGRRLB:AQURSSI?FSVXX[^SNNNOQQRQRPMKIIJNQSUTSRQQQQRSRTVVVUSONPONNOQWZZ\\]`df`Z[ZX[`_^^\\Y[gcaI:7<CJC6TpPZI7FQRXbZPMJF?858:<CIEB>:=><;=BGKNLD@C@:Ia_OXz}^B74:LS\\twmlllklbH;=EKKGC@;8569@DEFFGHHHHC>89BSUE759@IQ_R64>\\g?<@AEIJGPSOEB?AFJRYZXXWUM>6F_fYH>>@AAAAEQZ[aeb]Q?5458:<@BEEEEDFGHJG@;9:<=??CJKB75;<9?A<:856799<=<:>A@ABDGMNEBIKGDEDB?==@BB<7569:;@B=<?<<@?:;?@>?CFHF;3799::867876569;;768;;98:EJB;9:;;;;=?ACEDFKPOLJIE>8677>MRHCDDCBAFKKGFGEA@DFCDJJECA>=>>==>>=GRPH@:418>:8CPK=7<?>ERURQTTQKGDBDEDCB@ABB>=@BACGGFFD@>:56:<;<@ED@<;;A?4./8=BFIKJEA@<9<ABA736:?CDEGIE@=>BB@>;:=?ABBA?=<==<<<;;6863:DB?=?C:7A<.,31,09EQ\\`P=;<=>???@@@@AABBBCBBB@?A?:89867899<EG?:58;7666407962043101137<=>@@;73331-+,.3650-010016>?>?BA>:66679:977766889;???==?A@=;:8658<=;:98777::611242./1.,,,*+//,-12550-*)*01233566647755333499;>=<9;8;AB?<8;HMJIT]`bL.-06;;:966/*))+,**.:D>?BLD435478BZicIDK?2+)+/531VVDekcP>9;AKK>:8/3FKHQXYbhZMDCBDFJONJJONFA<8<ABFF:02621;B?>?=5013007><:9350Dh`RRMU[aly}b@17MfIJO]jnqsux|ydMGFFEDDDGJJJJJIHGGHHHHIIIIHIHHHIIIJJJJIJKLNOPONOPQOOOOPQTVXYZYYVPIDCDEDBBCDFJOVY\\`deddefffghhfdehgdcb`]ZWQIDBBB@@@AAABBAAA@AA@@ABAA@BCCEEBBBB@@@@AABBCGLQQQRQRRMLMPSTVTME?>???@@ACDDDHOTUW[elmhb]SQTRQMHOSPPRRTTTVWYZXYfolg\\LGIFL_ijbVQQPPRTVX[_^[ZXWUVZ\\\\ZY^ed`hpppk_WXZV[big[_jb[WTPKK{mbr}}c_[[`VISYXVWXZTPi^b`bbcUOHDH]dg[Wbqnx~~qwm`OIJWirr]FMjv^]_^_paRTSRQMFFJLKLMMKJIIJJKLQUPX]^`WQNMMMMLLLLLHGHYwSVVUZqYABJGDDCACMOIIGDBEFFGHKLJHHPZQA<@IW_TD@A?>==>>:DW[RLHB@>DRO[d^ZJ==<:<<====>?@B@@A?<9>HC929?@A<8:<>BB:778989>/;koF@ABDDDCEIID@99=AEKA;<AI]gXS[[af_ZSGOaYF:@UbYH?8559AIWd^RPQQPPPOOOOPQPPRSSTTTUVVWVUTTTRSVY[]]]]]VNEB?<=??>=======>>==<8CU[]_accccccdcc`THDDB@><<=???DHIP`fT>:@CA@@?>>=76G[YOM\\dWLNSVXWQIFHFBFNW]bb^UOLMNHETq{^D;<Q_SDEFB?>??>@DFEA=?M^bRFCCCAESH>@A?>>@BCEHNQNKKR]iv~fXWRLKLMLKIIJJLPPMLNOMLKKLMQHUȼ˹î}~pt}cY_ggb`c[NMS\\`a``a`\\WRPMMIECBA=987Qjy{rieeehjkhcdYX`]Y]_\\N?@MQMD>DPRKHQYOHPSTTTUQKLOOQQQPNLKKJKLNQSSRSRRRSUVWXYZ[YXUQMMNNOPTXZZ[Z\\`c_ZXXX]``a`]Y]gabP@8?@@8?_lJ;ItL4GTY]]VRI@:886689;?A?76=?97;ELLKIIIIDBSaWNgO864;Zrw{zjdaadhlUABJKFKQRONOMJ=9AGGDBBADJD==>HF5378:=?F=36>LrYH@@CIKLEFHHEC>>BDJNNPRSSL:7I[TE@BDDHKLPPOPW`gb]WB14<;;;<BFFEEDFHIKH@<:89<AFGHB:779:;AA;:97566:@DGE@ADEFHKOPNMNOKE?>>>>@BB?9656:<=?>::;87;>;78;86>DFKL>32477543334579:;;<;;;9748AB><<;98:?EGEEDCDILKKLIB<;=BIOOKIIFDB@DKLHHKJFABCBDMURJEB@AA@@??>GURE?>6.3>@??@;559>>ELOQUVRNJGCAEHECEEEDCBBCC?BIIFDCB=6148989CJGA<76;<4+0;@EILMPJ?9648<AA842<EHIJKMLC<;?ACE@7<@ADDC@???@@AA>;8964=EC@<<<1/7:85760.028H^dR?;<=????@@@@AABBCBCCCBAA>:63247<@CFF?;9;<844442/,,-/10./.148:<=@CA=89;><4--,.00.,,+*)*18?FGB>=:77789636::989;>BBA?ACFC<<=956985554312578500152../-,*)(-01,-1461*'+-++,--1444565676457:;<=<:9:>COXVQHAB?8<TcQ=@?3*5=:658971,((&)((.:G?8@QC05<:;9:Ng]B@KJ>0+-152C|Vf~o\\E9=NK940+6GIFN\\^_fcUD?=?@FLNLLPPKHC<=DHHC7242..269;=<84565556621/4<XcZPNMQWfqy{O9.,2UXblompuvuwzveRFEEGFFHLKLLKIHHHIIHIIIJJJJJIIJIHJJJJIJMNNONNMNOONNOPRRTWWVTRRRMHGFEEDB@???BDJS[]__`begffhkiedhigdacfc][XQHEDBABAAAABAAAA@@???@A@@@BDBDECCBBAAAAAAADGNQSUUSSTSPMGHOQRSROG>>@@@@@@?BFFDEFKTajffpuk[TSQJAHNMOPNPRSUVWVVYchmwxlZKDHRettfVRSRTUVX[cgb\\YXUbqi\\ZYVTUZedjrnb[^``c_`kiii[TQPMNNmep~|jZQdRHUYXXWX[XTky_ebbfeRHEDBHUk]abZpygou^RPMHFO`fTHJPbz`\\[_c{`PUSOKJHHJLKKJIIIIGFFGGKLHMRW_ZTPNONNNNMLNPPKFJORTUW^u[ACHGGFFFFOMGGHKLIGJMLKFDIDFWTC;<=BKE@@?>=<<<=;FTTIA@?@@ESIDKHEA=;::>?@?>>>=?@ABCB?;=<985=?>>:89:<EG?:;=>>=>;5@SNFAABCDB;79AD>;:?PZ@:ES][PHR[ZbmmYGGT]VNJHP_VA8656;ALZgdVQRPQPOPPOOOOOPRQQTTTUUUVVVVUTSSSVZ[[[\\_ZMC?>=>??><<<<;<>>>=;9?OZ\\_aaddcccccccYLFEFB=;9:>@?>@CEISYP><ACBABCBA?>=ANXZUVTOOR[\\ZVLDDB:8CPTY\\__]TJIJGEC]u|tWD<>LYQFHHC@???=?BCB?:<L_cYKFFGA@KG?AB@?ABBBBGMPNJLU\\dr|qYTRLKKKKKLLJJKLNNLMMLKJIMQKE®ƻüŻŶ{quupwuW]jjjhdVLV\\Z_bcbb_[UQNMKGDCB?<;9<xqk~yuusgYROJGUghcXRS\\`ZZ]XKACHKLB?DJHA?L\\XLQUPMMLLIJNOQPNLJJIIIKNPQQRQQSUWYYYZZZ[\\ZYUPNLLMOPUZZZ\\\\]\\\\ZYWVX[_acdaX^g_cTJ@?9::EYRE;2998IRUUMIG?967766886465:TP>459=?AGORPKFN\\YQ^w|t@1758RouoYLUVajinOIPHMCK\\ddefghZG:>@;::<@GGA?9?B8;@><<@B>78=CR|tTF@@BEJMD><>AE@>AEIJJNRTRG:8EKIEBABEIFHTVLMTVXX]ZD6>HE;9=ADEEEDEGHHC=<:89;<>=;87987:=><9776556:AGIHCAIJFHJLLLMNNMGDCAA?=>=;<:7778::9766767<956973:DGJUT?/3788654334678<=<;::98659<=><::9?LLID@@@?@EHGFD?=@EHJKNOKJJFB>@GJIHKKID>>BCENQJDDCAAAABB>ERM@<@<219@A@>;9::=BHGENZVLIHEBBGJHEGIGBCEGGD;>IJE@@@;668;:86?GF@<74583+1=ADHIJMI>8:??=AD?929FIILLKIE=8;AEIA49@@BCB?AB?<=>=<:9645<BB@:62-/39??<841101C^eS?:;<>????@@@@AAAABBBDCA?@><86437;>><978:<9655441//01100,-2302;BBABBA>;EPD1+..//.-,,+,.06>?==CE<31147757::87:?BA><;<==<=@>85784258753576434453/-/./.+((.1/,,0362+(-2.))-/4433579::::=<;=?<88;@GQ\\``^\\UOKA@QR;12;<16;43?F@;80+/+-/**.D@1?R=-9C>AF@JQEBFIMK@71/22:`rv{~|gMFPF6468@HJILXcenrZA=;<=>?AABJRH957>IMH=559<<70.16;??=;99:51/,)--4Wb]TRI>:QpzO;:2(W\\dbbgnvttvuwxmYMGFGKMNMNNLJHHHHHIIIIJKKJJJJJJIJJJJJLKKJIIKMLLMMMMNOOPOMLLMOQQPONLHCA??>=>BMW[ZYZ\\beegikiecfigdecdhid_[VQMGBADCB@@@@A@@@@???@AAA@ABBBCDCCCCBABDFFGIMOQSTSTVUVVMCEIINSVRG>?A@@@?>@BBAACFHRdnosvvoe]WJ?CHJLLKOQSTUUWZZYaqxy{thVIHSitrcSPSTUVXZaih^XVSbcZWTRNSdow|whbjlini`o~ziZSLIHFJmgn{{xoVfPHUXYYXY[ZVn|_iddiePCDDEAJr{SYZVjqtdOmiZPQQONJGIKIILEFkxbY[\\gaMOQPOKIIJKJKKJIHIIFECDHHEHIL]`ZTRRPOONOMMLMMNKLOPSS\\wYAFJIHGIHLVMEGGHIHGKQQIABECBMJ@<<;;>>>>>==<<;=>CKF>:=>>@@MN>>D=<<;;;>@AA@@>??@BBCA?==:87:>@>>;9;==@DCBDCAA@>>>:?DC@?BCDC;47DHB@>GcdECV_[NHLTZZaooZNQWZURSRU_YI>858>DO]db[URPPPOOOMNOONPPPPRTTUVVVVVVUTTSQTZ[[[[^\\LA==>>?>><<<<<<<=?>8;IV\\_`abdcccccce`PCBEFD@=;<?AA=;?DGCDHEBABBACGIHFEB?EYhbXRMIR^^YRHFHE=9<=IX[]^aYMJHD>>HXmuT?<@GNJFHIEBA@>?@BBA@:?MZ]ZQLKLJFCBA@@??ABBBAEKKJHJQU\\jrw{jVRQLKKKLORRNJJJIJMMMMKIHIIEr·ǿʷrgbalslzVNbkgab_]`aaa]^_^\\VPONLIGDC@=<99]xdxw}vnomf\\WROLHDK^g_JDJ[`XWZWLEEEEC@>DHEFLVZUQX\\SHHMLIJMOOMJHHIIJKMPRQPSRPUVWY[ZZZZZ[ZYTNNLMOOSVZ[\\^```\\YWVVZ_`bdd_U\\f]dXJ=99<=>@@@?:3:;EHGB:;=:97655766663;XjQ835555=KUTNHGR]^bmlnk=387=LWOF=<GVcg__WeXBNCK`e`bdhpyf>58889>EF?<EJQWSHFFFB?A@;9?A?e{v[MGA@?;@LE638BF@@DIJJKPTUO@68=DIH@8:BE@GW`__bcVKQSB5;JK@:<@DFEEFFFGF?;<::<;9999::<<769:97555479:=?CA?@CGHIJKJKKLLMNOMJE?;:;=?>:75678863477688767756?FHR^T;5899999732568=?;:999:::989;9<HPTVMG@<;=?@BC@>>><AFEBBLQIGJHB<<BIIHKJHD=<AC?@DCDHGA@AAAB@BJH>:?B;349>@ABBA@@AEFDKXRB@BAACHJKJHHFBCGIJE;=GID>;<@><<=<95:BEB>95452.6ACABDGH?78AIHDCEGA89CFFHIDAGG=<CFF<2<B@@A@@@?;89::::8219>>:62/..148?B@:85456CVQ>99:;<>????AA@@AA@ABCDDDB>>>>:4/13556777887544242201120/,-01.3CKA?@BD?7@OO=.-//----,+++-6;45<EB95104799998879?A>6789988?FA737888:<=<<:865576764330034-).41..12441.030)+/3544446<@==AC?;;;879>DR]\\\\]afj^TPE;5.147;=:53@LLA:81,.-15.+*@C1AR:-8B:=GA<7:GLMPPJ=1,/344?c~ePK=::=@EHKLLQZaov\\C?=:741379DPK;12ARPGA=869;3,.16>BB@>;:95/,.-0+(DhgWX>/)4Tm|L9=:8QU\\`gossrtutuxxsdTIHLMLNPOMJHHHHIIIIJLLKKLLLKKKKKLLLJFEFFGKKKKKKLLLKJIHGIJJKOQQPPOIDB@@@??ENPOSW[dgffjmia`efefgghhijkf`[YXRFACBBBA@@???@?????@@@AAAABBCCCCCBBAEIIGFFHLPRTVXWX[WKBCHMRVXTF>AA@@@?@A@@?BDBGUjrqrttrni[JBCGIIGIOQRRTUXXVXeliikrm[T[irtp`RPRSVYZ[bd_ZXTYrzcXTUQQe~l^npjx}ow~aUPLHFFNkcqgxaMN[XYYXY[ZVs_kkmmgOADEEBMvyPQX`ktwtqootlTJMNNPRRQQNLKIKKLIJmweZX\\g_NQQQOLJJJJJJKIIGHLLGDEGGEHGFVb`\\WSRPNNONMLKLMPNLJMLXyR@HJJHHHGJVMEHGDCCDIOMF?@AA?DA==>A@>=>>>=;<;;<>@B@;:==;??FQCAF@::<;;>@AA@AAA@?@@@?=<<;88;???=::;<===AFJFBB@>===>?AAABCDC?98GLFFFOdmPF\\`TQTXZ`][c[OGJT\\[XWXZ^]XJ859@IU^\\^_WRONNNNMMMNONNOOOQRRTVVVUVVUUTTRTXZZ[Z]]L=<=>>=>><<<<;;;<A=:GSX]`babcccccccdZE=AEFEEDA??AA?<>CE<;DJD@DD@CKPMHIORR^nh[UF<KZ\\VOMNLFB@90F``_``UKLD99CDBUnT@?FJHEDFDDCA??@ABCA@>@HNRUNKLLMGCBA@BDDA@@BCEGGGFHILVeknnZPTSMLLLLMMNKIJKKMOLLLKJJIWĽzj^`dfY\\fgj]Mbf`fkjeYU`b^]]_]SMMLJHFDB?<;5Fseovrw|}ohhc]YVTNJIFLW`UD=GVTKOWYPFEDDBA?FOSU[]YTTYXQLKLLIJJMMIGFGIKMNORRRRTTRUVWXYYYYYZ[ZVRNNLNQSWXY[^^```]YTTX[_`bec^X]d[`ZH99===;8;@9<<=>GEB<99=:976577439=AP_P8/2456;HTTPKC@HZkui[hvF46<MYO<18>;LQMOg}wI:LDQa]UTS_rg@27989AF?:Qq|S;Ni_H<78;BC=PXXRNHCB<47EE758AD???@CHKNROF<88:BJH<35?LPRXaiqtreQJLD87@D@==ADFEECCGID>=<:<>=<=@CEDCB;4356534458;:9;<:;?@BFGFFEDCCBCIMNNGA@BA@?=;7657::512686367645535<BIX[F58976;=;50378=A=;99:;;;;:9:9=Qdg]J=<:79?CA?>=??=>>>>?EF@BECA??DHIIKLJF@?@B@==AJOKB>?>?@?=>?<:?EC;788:==>???@CGFINH?=>?ADGHJMKFD@@CEEB==BFC?;;BD====968>CD?976644;BB@?@CC84:AGIG@?FHD@BDCA@>BHHB?BGF?=FF@=;>A<8789:9861-/7=<4/22/.037=BB?><978<@;4578;;<>>?AAA@@@@@ABCDDDCA@>:510114:423456644424331100/.../015?B77>CA<;=>B>0+.-...-,*)),7=;<><:87656788877777;=:5668863>JF71:@?>>=?@A:65569:9:;:7369=4.39722212454551..12223435<A==AD?93225:<@S_XXZ\\htj^WF3,-1536<@6;HLG<530)+1831-(;D2DO4.5>7:F90?GEIVYRJ;-,/6=06]|oj^KG<?CEEFHJNOLLVgn[E@>;400365AMMJGCLZSEA@6135.+/16?A>=<::76329=4)-6POLP9/.,4Oo{K8;<@RWckomkkqvvttsuzufTLIHGLPNLJHGHIIIJKMMLLMMNNNMLLMMLIFDDEIKKJJKKJJJIIIGGHIHGHIIGHJIEDB@@@?@CDDJU`gifeikf]Y_c_`gighjkkllhe_YVRKCCCBA@>>>>>==>=>??@@@A@@@AAAAA@A@BDDCBA@DPSSXZVWXWVNHKPRRV[SFA@A@@@??@@?BBABGVc`\\bghkolYEABDFEDHIJKLNQRSSVWXWX]a]]forstq`ONSWZ\\\\^acdb`YUrw[TTSQ`zqejZO``\\v}|mTQPNLJOTi`xb]PQ_YY[YYYYU|`kqtsiNACEDAU}wPT_eheefe`_[ZXSRTTSSSRQONNNMMNJIq{eXW\\e|^NSVTJHJJIHGHJIHGFGJGDDEFEIHHKV^a^ZVSNMMMMMMLLLMKIJJXzJ>JKJIHGEFIFDGHIJGFFECAA@@AEE@@?=@@<<=>>=<===>>@AA;:==?CADRE?B@99::;=@AA@@?>>===>=<;;;98;?A?=;9::;::<FNHBDC@><?ACDBA@@AA?;;FOLKJNbo^O\\]TW]^`a\\Y^XE;:BR__^^^^_]M65:AMX^_`ZUSOMMMMMMMLMNNOOOPPPRUUVUVVVVUUSSWYZ[Z\\^L<;=>>===<<<;;:>EC;CQWZ^acccccccccc_RB?DFFFFEA>=?@@@???<<CF@AKH@ENRS[homibddaaVHJSY\\_\\ZSG??;4?Z]\\[aYSP?9AGECL[LAENSNDCC@@@?@@ABBCDECBBFKNFJV\\^\\SNECGNSSH?@DDCDEFFFFQdllbMMUUNKKLLKHIGGJKMPOMKKKIJwŻv_befd[\\__\\m~ncfahvrhbWTbgb_^_^WOLKIHDC@?=9=`ijtuqrttogba[ZXWWTNJJGJSZMEBFJFDIRXQFEEDDC@FQ[\\[YURTVZXSJGHIHHJIFEEGJNPQRTRTTTTTUWYZYYYYYZZYUROMLMQUXXYZ[]^^][XRTX[]`bdcXZ`bZ^]JDC@>;9;<=8;<<BIJHB@BB@97776669?BDIC;3259:<BMURMFA<?KZ^NHeS12D\\nhVRMJ=@FOPke83DFSWUTNL]urM75:77;C?>\\\\3bu^F3;ACEHJQQMHDA;66=>98:;=<:77?FHKJC<:779=DD:39H[c`^\\apxqk_OFDB><<=>=@CDCC@BJJA<=<<<>@@@ELNLJG=3255334569<;:;989@DDEDBAA@?<;AGHJJFDHJD@@?;7445:;61157413786444237=GMA25767<>><647;>A?<9899:;<;;:;<DS_WB7:868=@?>>?@@<428@C?8<B@=AGIHGHJMLMKCA@?@?<AMRLB=;;===;8789?EFB=:87866665?IJGHGCB????ADHKPKE?936>>;:>ACBA>:>C>9::988;?BA:67557;????>==<?BCEHF=;AEEGHC?;4>LH@?@@GLMLNG@:7;>8778897531124::46><2./2:@ABED@;776424799;<;;=>?A@@@@@@?ABCDDCDCA;40000163/2459:974232100/...-.///.01.0<C=;>>;9:.'+,-/011.*/8>BFD<88643369972245579;:7557742?KE50;DC?=<<;;87525;=:=>;65:<=758;:531014577543210122234:?>???>;7513425IRRUY_lwwraH71/3513:>?BDGD6032+-8A515+8C1FH.0<KC9<-.FQDI^bUJ;--/4?DMwPDMLHDEHKJGFIOPJFP]\\UE?==;88843=HLNTWXZVI82003:611258<>=<:76:>??D9-/.00;@701/+8N]]B8;==R\\ihebeowwvussuxwsfXMGFILLKKIHGHIJKMMMNNNOOOONNMNOKGFFDFJMKJHIJJJJHHIHGGHHGFFFDDFECCBAA@?@?>BN]cc`]ab\\RQY]ZY^gjggikkkklmg^SQSNFCCBB>====<<==???@@@@?@@@@@@@@@@@@@@@@?AJMS[]XTRQZ\\QKOQPTXXTLA>?>>>@@@AAAAAAEMIFMQTX]_YKA@BDCBDDEFFGIIJKKMOONMMOXhqppqtq^NPVZ\\`bcfhhhbWU|eYTSQV`\\YYRNOIKgseZTTTTRQRTibz~]c]c^[[\\\\ZXS}_pswyjM@CDEAYqO\\a_feXQ[bccaa^XUUUUUTSPNNNMMNJEohYW\\dr_JNUUQLLLJIFEGJIGFEDEDEEEEGHHEFQ^a_[XVRPONMLLLKJJJKKZ~uE@KLJIGEEDBBCEHNURKFCAACA>CMH@GJAA@;<>>>=====>>@B@<:<>@FABUI=??;99;<=>?>><;::;;;<<<<==:89=A@?<:9889;;DPK@DEDBACDEB>;<=>??>?HQQPSUYa^UV]XZ_ba^]^^\\PB:3?U^^``[^[E36=COYa_NISRNMMLLLMMLLNNOOOPPPRTTTUUVVUUUTTWYYZZ[_RA=>AAAA?=<<<8:KNCCMUY^acccccccccccZLEDEGFEB><::<>@A?=;;:>B@BLKGHIK[pvmb`^WQRY\\SNPRcqcWWH;8:;BO[\\Z`ddVCFMGDGLJEAGNRNF@??>>ABBCCCDFHFGGHJILWfd[\\]PGHIMZdXD?BBBBCCDEFP`ji[LLTVOIKMNKGEGIKLMOSJCCGgn^onjb^`^Z\\gkgacpwn__cZapjZUSU^_UNKIGDC@=<7Mkgpstyurnlie`\\VSQQQNKIFHKPKIIDBCFHJNLEDCCCCACFLPUXSOQTX]\\UGEHHGGFDDFIMOQRSTTTUTTUWWYZZYYYYYXXWSONKMPRUXYYZ\\]^[YUQTX\\\\^`db\\ZabZ\\]KJIA>::=><:8:<BIIKDBEC?97776;BFEA>84:>CFGECCKRRMHGHGD@?:=_S9=JZ`_`jg]QMOUPTiiQ@EHCGQRMMXbS86;;9:?B>[nOuN;@J@HNXULFB=86566799:<>>=?FGGHE>889999>@85BV`hnme\\`msodQ?;BHB=?@=AEFEEEGLJ?;<=@@@?@?CKLIJF;346533568:>?=::99=EJJHECBCD@>FLJEBFJJIEBEE=75558<956532138:866520246887679<=>?A?99=@@?=;8878;=;::;;69DF;467689;=>?@BA7.1<CC=;ELD?EKMIHJMOOOMFCB>?@=:?IKD><<;<;9888;?CDA=:87778406AMLFDEDCA@>==AGLLGJH905CC;9?BAA@<79A?5777889;@C?;;968;=>>>><;BJHGHGDA?==@KJ>;74FPB8:=?FKQOLGA@:898888899889=@@<76=C@70.5BDACGF?;8887437:;==;:;>?@@@@@@@?ABCDCCDCA?:5111100359<?@>:6530......--//.,+,,,19<99<AA:C>((+*),.@C9>CFHF>88742/17;;5,/46558;97545643=D>207<><9753136526<;9;=:43575588654111125767742336322228?@?@AA>>@>;64:F@>FUev~mI73333//;@>ACD@2,27407C?@@??D3JI/0C^Z=,+-4GKRef^S?-+49CMSpUFRUNEBBEIHGHKMKCOYQQD:@@?=83368;CGFQ[XVM4&*,-3336633<DA=526=BC===80*),385121,,/7EC:<=9SZ`^`emvxvuutuuuvtrhYNJIKKKKJHHIJKLMMNNOPOOPPQPPRSNIHGEEHIIGDEIKLJIHIHGGGGGFFFEDFGFECBA@>>??CLRSRQQTPHIV[TQWaefffhkkkllllkcSOSOECGFA=<===<===>?@@@@?@@@@@@@@@??@@@@ABBCISWWYSKQ]`XQLJOTTRTWK>=?@@@@@@AAACBDFEEFFHJKMOLEAABCCCCCDDEFEEEFJMMLMMNR_mttsrtoXNUVY_``adfhii[\\fXSRRU_hkjf\\NM]rycQU]\\YWUSRTheyݳcbysha\\[]]YXRx`yx{}mOADFFB^iO]XV^^NIZgmmhefg_\\\\\\[WSQPNNOOMKErl[W\\bq_FEOVUQNMKJHFEJLHHGDDCFGGFEGHHEM_\\\\a_\\ZTRPNMNNMKJLML\\rFBKLKIGEDDBBBBEKPQLFCAABCCFJHHLQQLHHE>===<====>?@?>=>>>B@@QM?>?;9;=>=>><==;98::::;;<?@?==@@??<98789::DMG<;??@DGC@968=>>@BCIPSSUWXYXTKLZXPU\\\\\\_b_]XPIA>HSUVTRYS>48=GTVSJ=BSSLKKKJIJJLLMMMONOPPRTTTUUVUVUUUTVYZ\\[[^WD<=@CEC><;;;6;JCCLTZ^_bccccccccccbSGGGGFDA;78:::=@@BB>:59DD@HLKGBGV]WVXX^\\SMJJKJKL]kXLTJ9379AKX_YVbeRHKKFEIIFDBDEEDE@;=??CFHJGDCDEDIRTPMRaidXUSPLOKDJY[NB@ABBBABGMR[__XROSVRLPUSNJPPONKNKGFLcǹ~nmupmke`YWW_bUTevzjUNTYUcmYKIGMW_^WLHED@@:8=^ijlkousrrqqg\\WSMJIGFHHEDGMLLLGEFGHGFGEDCBBBAA=:=GSROPSW]_`PFFHFEDDEGKNPQRSSUUUTTUWYYYZYXXXXXYXSOPOOQQQUWY[]^]XUSRUZ\\\\_`ca]Zaa[Z^MIG@<;<>?<:69?DHGHDAA?;8877:BIHC:969DHKKKIHHMPPOOMJHC?=<APbILSQOLJRZdhd`\\XSNYmqiYC:EOJFIKJA:?@=?BFBErzvLCH>GJQMJF?:76744577:>BBCHKIGFDB;;@AABC?5:LTXbjmiYOYkuhL61>HC?AA>BJMMOOONJA;:>DGD?=<>AA@B@9555433456;@>;::989AJJFEDC@?BGJJNH@HOIFFEGE<89869@A>;621148::86531594.5DEB=>?@?@A><=>>@A;877:<<;;::;859<;:8678;<>??@B<44:>???@FKE@ABEHJKNSTQMGEEC@?>62=HGA?><::89<<<>@?<:97678877=BHID@AA@?==;:;?B@>IWOADPQH??BAA@;57@?46667789>CCBED=;=>???@??GNMNNJBA@;;?KH;67<C@:526<<BNOIFCD@;:;888:<=<<:?JL@45:;;810<GFBADB=;889;8568;?@>:9;?@@@@@@@@@ABCCCCBAA@;45886137;?BB><:830--.00.-.00-+--,,187338>>9IP6,0/-,0CKB;>IE8367668:;;;72/266569<:8755545972/011441/...023437::<;820//2597223330//368:83369;334206=>>@A=7:FMMLILME@DI[ltqF3353-+3??<@B@9++8EB6/;HLMIDC6JJ0.:LWH+0306<Skf`\\I2/?DGHGVr^NUWO?526?EC@CKHBQXQP@;<==;524753990=SXVO7'*++-,-40,5?EB=68<==<848:6/,.38644325529A;:<?QSZaglqsttuttutttsrnfWMNNLKKJHHJKKLNONNMOOQRSTTUYYSKHFEFEEEAADHMMKIIIHEFGGGGGGGGGHHFDDBB@??@CEFFGHOQLGLUSKKV`bbdegkkkkkmnnoh\\VRJGHHD@<<=======>?@@@@@@@@@@@@???@@@@ABBBFMQQRPQX[\\_\\LEMTTQQWWI=?BA@@@@@BBDEEFHHHIIHIJLKHFDBACDDCCCCDDCEFHJKLPSRQRYdkrpnsjWTVVWVW_cejjkfZoVQUTV\\itspfWV\\dfZS\\b_ZVUSRVfg~\\eurod^ZYVPWV~iiOGIJJHhdQVMTTPS]ekpka]cotohb^YQOOONOOMLDzl\\Y[bs^ECGPUTQPMKIGGJMKKJGFFFGGGGGIJJP\\RQeha_YVTSSQPPNLLML]lDELKKJHFFDDBCDFFEHJFCBBBBCDDCC?>LLHPK?=>>=>>????@@@@A@????MN@;@=7;AA??@@@?=<<<<;::;<=?BCB@@??<:988765@F>6469:<?@?=:?GB<@DHQUTTVXYZZQCDPG>ENUSQSZ`_\\[\\RFJRKFNQF77:<L_ZPNFCKOLJIIIHHIKKKKMMMOPPQSTTUUVUVVVVUVVZ]\\[][PE@;:<=<<<=<=?AALTX]__acbccdcbabb[ICHJHFB=;;9::;>ABFHB=9:BDBEHGDDKTTU`if[X]_YMIHJFNWMGNF98:7CRUWVKUXLJKJHFGGFEDC?=>B@;=BACKTYTHAABBEQWSPXbd^VRONSXSE>CMPHB@@@@@BHQTUUSTRQSVUTTVTPRRVVQG<EYu|}zurni_USX\\RXwx^OLOLJLTTHFIIKMT`aRFCB<<84Rg`^cho[Scj]TI<8=BCC@>?@@@BILMKGFFFFEDCDCCBBB@?=:8:HRQONQTVXSGDDCDCCEHLNPRRRSUVUTTVWYYYYXXXXXXXVRPRTRSUSTWYZ]_[VQQTX\\]^aab_[Y_`]XWMGG@=<=>?;889BFEEFB>>=;98879=>=;865?MKC??BJNPPQRRMC<>CDCDEUJXaYMHLTOZhlc__f^T\\ikV@>II<7@IMIGFCAEGHECeqMA>C@IBFF?769868777:=>>@CEFFEDCADIKLOMB9BQSSUVY\\[SHTidG00BH=:ABAIPRSUTROLD<;?DECA=;9998998754344425:<:999878>C?:=B@87=JLHOL@BFA?BDGA::::9=FHE@8311457975532:B=15JLG>=;:;=?><<<=@A8259<?@=<:;<;:=??=977:@C?=>=:67;>=;;<<;:87759BFFNWXUPHEGDA>?;5;HHB@><9988<=;<=:88865558:<=>??=;;;<;;99989:34@V\\OORTRG?@BBB?;:@A88765667<BCELMFAABBBBABBKPMMPMB;<>>BIC968<:66537:48HPKECEDC@>9648=><;:=GG<54334425AHGC@>;::879;;:99;>BB=88<?@@@@@@???ABCBCBABB>;8::9217;@DB?=950.--/100/120-,..++197/03477;B=6=D>45=E6+;G7.6868:>AB>:757776779;;97655441-,.///---..020154-/8<=82////29<9766631//13465348:<5563037:;<:528DKPWTUW[]YBOWNywE0692*,8=>>?@>1)6MWK8-0BMMKEB:GC0-,,AR7/78,&Gkkc_TJFEFKA<EFKMMGBNUL81/48>85?LFDQUUG8:<;;::954687.%)>RWL7*.1461.,(+49>>@;=B?:8842693--26568<BGGC<7:==BJNXbhlptuvutvvtrqomif]SRROLMLKKIJJLMMLLLMOQSVWY[_aZQJGHFDEC@AFJLKHHHGEDEFGGGGGGHHGGFFDDBB@??ACEGHLPPMKLJGFHMW_^Y]fjjllmnonjkmf[PIHHGD?<=<<<<==>>???@@@@@@@@@???????@@ABDGJKIOZ\\ZZ_`VOORSUUTZXG=@BAABABCCCCCEGHJKKKJKJIIHHGCBBCCCCCCCCEFFHJKOSSUUTUXbkoqrg[\\UNQUY]`fghjfe[NQTUV\\ijdUILV]^ZXad\\VUUUSVdhzaddc_qna[VPJXYoiQLMOQRl`NOOWTPXfoqph_[_iuzpYUTMIMONNNLJA~l][Zbu\\HFGJQXSPNKHIHGKONLJJIIGFDJJIKOQROLZgea_^[ZWTPOOMMNN`iCELKKJHFEECEGJJHFGHFDDCCABCB?@;:CBAGF@>>????@@@AAAACCA>>??IQEDF>8=AAABCCBB@???=<;:=@BBDEA=<>?=;:98874;B<:<:889:AGGCGND=BCHQXVTTVXXUQFDNICGRXRE:BU\\\\`d]QT[XUTK<59<=H[cmr^GAHKJHGGGHIIJKKMMMNNOQTTUUUVVWXWXVUTW^^]\\\\[RJ@99:;<<==DC>JUY\\^_`bccccddcbaaRBCIJJHB<@B=99=ACDHIFFE<9@CCDEGIIUafgkqeWY^]UOLJAFOMGGA8=?<LTDMXHDOPMLKIHIHFEECA>>@??@CBBJYa[LBAA@@GMMQ[aYLQYTRVZWNB<AHHDA@@AABGOQQPOOOQSWWV[Z[xeLPPQRiñ|ywtqj][dieceTILOMLIHJIFHJKKJLSZUHC>=7:8b^W^fmtaQSTTUQRXM<8:=??=<;<>AEFC@@@@BA>>>??@B?=<<:9CQPLHGGIHIECAABBDFJLNPRRSTUTTTSWXXXYZXWVWXXXURRQSSTXZXWXXY\\ZURQTY]a`cb`\\ZZ_^[XUOIJC><=>=;8:;A@ABC=<>;9876546999:::DNND>=@GOPQSVZXMGFGHLJKYPcfTA=NXR[d`\\]dok^XTPJ@BI?41:RWMEDEDFEEB:Fnw}O?>=9D@DGB<;<::;9888889;::ADEECDFIJMPPLGIMOPOOPT^]QKNRD12IM:5@BDLQRRRRPNKB;;=<;=AA<77555676534767:<<778668:>=8535=?=99@FHHB=>?==@CFA;;=>@FJJGB8421335665533:B@76@CB@>648;=>=<;;AB7148;@F?78:;;:=A?:54:@DC?==;66;<<>@@@?=98887678;DOUUQJGD?==@@>?DD@>;778769<<;;:9887668;<==<;9899:::;;;<=?A?CMY\\WTQPNF==@CCA@=?A=;975547<@CIOOJFGIJFCA?>AC>=CIC9;=@CGA:8975788:?=56BLIEFHHHE@956<CC@?DFD;66542237=EHGEA;88999;;<;;::;?B@96:>@@@@@A@@?@BBBBBBCCA@<743117=CECA=61..011101252.----++/56100..0//03EVQ?:;<+-EG8587898;=>=<:899;;;;:9:::85551./000110123233/282**166/)+1234<=;;;9754222000234679656301468767:=BDC;L\\\\bdaXVO2ZxA18<4,2979><<9-1H_`I83,/<DJFDAIC0.,*6G9,,/--Caifaah_EBM>4GJ<h'#1<HOH=:::;977AJFGORR;35779;;9745970+%-FPF6058:;653-,.28<=76:;::8669<6-,15558>A?<>A;:;85JLU_ipwywussuvtpmkgb^ZWUVTQNLLKJJIIIJIIJLNORW[_`acaZQLHFEEDACHLKFEFFECDDEEFFGIGFGGFFEEEDB@@?@CFHJKJEBDGGFFEGQWTOS_cbdgiic_^`\\TPNLJHGFC?==<;<==>???@@@@@@A@@@AA@@???@@AABFEDFKPQTZ\\]ccXPRUVVX\\WH>>ABBABCCBBCEGHHIKLKJJIIIJLKIFBBABCDDDEEEFGIMPQT[ab``gooqrg\\TOPQQRU^gjjjfmreXLNUUV_aWHCHRX[YWaf^YXWVRXbf|_Ydfb[Vxuc^YRIZ\\o~rXLLOQSlWFKSVVTVesuumefiddomTPPNJKMMMMKI@m]ZYbv[JKIKORRQOMIIIJNSOLMNKKOTNGKJIRUTWTNYhgbb`_\\TPPPNMMOchDFLKJJHFEDEFHJKIHHHHFEECBBBA??<<AA?>??@?????@AABBBCDD@>=@?CUY[YH<<>?BDDDEEDB@@@>><<AJNMG>9;>=<99:999:<@AFJB;>DGGHEBFLEDEACJPQQOQSTQOIDN_XVbg^J99@FQZ\\[\\^_[SI=68<>A<Glv\\H<CJKGEFEFHHIJJKMMLMOQSSTTUVVWYYYXUST]`]\\ZWQRQMLLGA;9<>BJTX\\^^_acccccddba_\\OGFGIIIGDCB@?>BFEFIJJMI=9@BBCDGD=NccWYu|bMLJGDC@ENOH?76>>BTL:BWJ9CLKGEDDHIGGIGE???ABBEHEEMVTIB@@==@DFMYYI<I_]XPNQOHBAAA@@?ABBCGKNNONMMNQWXX\\eodKZi|pkmqvz}Ͻss||sni`cqvpg]Z]XSPMJIJJHHHIJJHEIPJC;;:6N]U\\gmsurlebWMFPcaOED?=>><;:;<=@?<;:;==:9998;=??=;:>JQLHEDCCBAABAABDFHKMOQRSSSTSSTUWXXYYZXVUUVXZWTRQRSTVZYWWWXXZURQTY]a`cd_[X\\_^ZYZXNIC=;=?>98<;<:;=;;A>9765666<A@;7;@HINJPLFGMOQRUXXTTQHKRNGOXo_B5:NTT][NNU_fda`[ZQ@DI:49@BC><AECBB<:64Agy{bF?=?@B@DGECCB>=><;:988;<99=CEFEEDDEGKRUTJ>>ISWZ[`dcXJA<55DF86@CCFLNMMNMH@869:779;<744543454334:<?EG=6788;=AA;44558:=;98<KL?CLKGGGGFB=<@CEIJIIC8321367533347:>><:;==?A<989;=>?>=GM@568:?B>976898;><946AGC>>><::;<:8?INNMLKIGDB=6457<DIJGEB<:;=>??>??<9347879<=;::99899:<==>=8668:;;:::;=>AJPKKW^YUWSNHB>>ADDBA>>@=<:85547;>AHNOLHINNKDA>:::435<>:9=?BF?99:7579:<><99>BCFLLKKD>;;BLTQHJNJ@41555433:CHIHFA;769;;>??;87779<=879<>?@@@AA@@@@BBBCCCCBB?:64347=EHGD=4/.0232203672./0/-,-/12100///.//1>U_P@?8*0IPE926;:64689;:889=?><;9;<<977532454369;;9520--23.++*-.+)+0149=<;;=;8866520155445656652/1457559@A@@8)O]]^clmiM1Df^819>8169425533/6I\\^D884.27=>?=EA3.010333/.09EOPTbislLAIC8>P<ix<1/1AD?=<<<=99BCDIGIPPD1.-.0378763477871.6=;7789:958=6.-155422247634:><4..2555786/-07;830-IMXeouwwwtoosvrmifd_UUVXZ\\XPLKKJJHFFGFFHJKLNSY]^][ZXTNIFEECDDFFFDCDECBCDDEDDEHHGGGGGGFFECAA@@DFIIFC?>AEHHFDEHJKJKPRSUX[\\QFIMIEHJKJIIHE@=<<:;<<=>???@@@@AAA@AAA@@@@@A@@@ABCDDA@AKWZ^hmd[XVVXX[_YI@?DB@BCCBDEEGGGGJLKJKJHIKKMMLGC@ACEDCDDDFFHKLNQT\\dhiijlosrfUQQNLLOYafghjigicTMRVTVXSMQVSQTUT^feb_XVOWbe|z\\\\de^[Xvd`^SI\\bkmyvZJMMLSpfUXRQSTUdv}zrlmogffa^XNKNMMMMMKIAo_YZcu\\OPMMNOOPNNKIKTYTNLNQLJZilQLOMPWY^^OL_g_XZ]]ZWURONLQgeGGMJJIHFFEGHIKMLIGGIHGGEDBBA?=<>DEA???@@@???@ABCCCEEDA?<?@BWjjibNB=>ABBEFFFB@@@?>=;;EQTL@;<=;867999:>??BJME?AGIECBADHFED@>@CGIJNRTQMHFO`ZWdqjVLG@=FR[\\]]YOEB=8<CGC8Eq|YFC<DNLEDEDEHHGHIKMMMMOQSSTTUVWWY[[XUSRX_]\\[NDQ[]^]VI>::;DRVY]^_`acdddccdba]TLNKFDDHPQG@BGGFGGGILOMD@BCAABDD>9DXWCDa`?=<;:;<AILD85=BCKTJFGTOBCEC@?=?GMOOOPI=<@BBBIQOFCEDBA?=:=?@AFJH?:CWcUFCGMJDBB?>@@ACDEGILNMLKKLOV[Yaxurw~{zvosszͼgc{tnifacouqpsqh_YUOIIHHGGHGHIGECEEA=::<cUZdimtxuoid_UONPRRTSKDEE=:9=@=<<;;<;;<:9887539>>;:>JPJFDCCCA@?@BCDEHKKOPQSSRRTUTTWWXZ[ZZYXUTSUWWURRRSSSVWWWXYXXUPRVY]__ba^[Z\\^^[VPJ?:<;;=?>=<==<:::8CF<766667=ADD9:MNDHML[XQNONOPMJLJLJALLA::LWH>??QVUXM=?JZa`beaZMENL74=97668?EDD@86760?`\\FA=>@CBBFIIKKE?@@>=<;:9;<>@@BFHGFFFFHKSXUE47JVZ_cccegZ@358878>CFDDGILIHF>5138;98940.058512321249@EHB757;=?BC?855445457:8;KQGGOMGFFEDB@??BEGGKLB73457:;62114:===>>=;<@EF?989;>ACEOP>5:?><=BDA<989<>???@GIC?;;==;<<97<FOSSONLJHHFCA?<9<BB>>><:::;<==>><9548;;;<<<;999::;;<<>>71037:::999:<>BLRKDLVRNQWNDBDDCDED?=??=<975458<><>IOHBELMMD??>>A@:45;::=?@A:6:=<;::;;==>==@AFKMOG?><@FR_aYVRD637655334:CIKIFA9459<=>BB;6555546779;==>??@?@@AAABBBCCCCCCB@=979>EJID<2053223445762/2443//111011256647<=GUOD;7.3HND63:=976668::998:<;7567776862134357<>;830.-+..--.-+,.241.-4<<<;;>;::99721276435667863/2445437==<7.;SEUadlqtU9<B;13;>:3783010///0;IP>9;<96555647:7.+...3>B>37A?7;[pxnQDBD?9UE9L<1>82>>88:<<81;HFFPONRP@70)'*,16624<@?=?<3-0577668978==7221/.022232/4<=70.02547=>700249;976LQajkifkuulinpmkhe`ZTTXXVUXWROMKJHFFFFFFGHHILOPPONNPRNJFCCCDDDDDCCDEDDDDDDCCCFHGGHHGGFFEDCDDDGGHGDB@BDFEDDCCCEGGHIKMOPRTOB;>AEGIJJJKKHC?<;;;;;<=>>>?@@@@AAABBBAA@@@?>?AA@ADC?;:CQ]eiigfc\\XXXZ]_YJ=AC@BBBBCDDEFIGGHJKLKIIJIIKMOLECECCBCCDFFGIJLOPRV\\afhkllnobROMMKOUV[]biljhig\\TSVUUVY^aUNSUU\\dg_\\XWPUdezv^WV^\\ZWwfb\\NJ^d{ehtzuXJMRUctvdiSTVXXbvytokkksjT]VNJMNLLLLJIBp`XZctaTSNKKLMNNMKJL[aSMLNQJIhswl\\WWQUY]]SJOWUJGMQZZYTSRPUjbHHLKJIHFFFHIKNPQTSNLMKIGEDDB?=<>BFCAA@@@?>?@@ABCDEGGFDA=ADDSblnjZE=>??ADEFGDAB@?>=<:=HSRJC=98888889:=?>@CBA??@BEIMHEG@<==??@CGHKTWTKIIKXSNYjj[UTTQLNY\\YXQLJI=6?HFBEO_W?>DDLVODCECDFGHHIKMMLMOQSTUUVWWWY[ZXVTRW]\\^^J<EPTXVQIC@BGOUXZ]^_`bccccbbc`a\\K?EKIDBDOSHBDJHGJJIJMNIDBDCAABCB>@BDC>EPX]NBA?=>>=DHIF?DFFINRUXWVVWSKHIGBEMV\\ZYYK=;ABCFJPTOHC??A@=;>A@@?>??>?HROCBEIHDBCDCDBBDEGHGFKKKKKLRYXTezouwxzyvpffY^`cfecmvtpj]UTTPMIHGEEFGFHHGEB@@@?;7UaWbflry{qhjg_TPWTONIGGDAB@;9=?>><:<<;;<;:9:97425868=HNIDBBAB@>>@BCDFILMPPQSTSRSUVVXYZ[\\\\\\[ZVTRSTUUTRQRRTUUVVXYYVSOSY[]^_a^]ZZ\\]]ZS@0*-445668;>>?>>>@CLC:886678@ACD7EtX>ENKVUUSRIKMLJLGIC?IE16359<@>?PVQLE@DM_ede\\N=:HVK96=:7667;BCD=637<79Ou@:<<<EFAAGORSOE@CA?>><;:;=>ACCGIJIJIIHGQUK<7FVWW[debbigH7:;78;;?CBBEIKHC=63115;:983.6>B8422222349??>;657;>?@@<96525:837<9=HLC@?=;;===?DB>AGHHIH?52458:<733017<==><979ADHID:68;?EIMH42ALB;?FKMH?<>@BFGHJHHD@:9>@<<=;:98AHGDFDDHKMMLKGDDDD=868989::=@@><;;979=>===;99::;=><<=<61/16:::8889;<?FD:35:88>E@?DFBBDDB>=?@>==;5369=>=<DH>:AHMKA;:;=AHE:9=<;=>>>97=AA>999:;<==>@?@EJLC<;99?M]ge_WF58DA95346;BHJIF@847;;;=@B>;874422479:<<<>?@?@@@@ABBBCCCCCBBB@=:<BGHE?;2285335787641145:;4/.13013247:58FI<:976329?<84@G=78:?>>==<<=<<;63343245310000/3873//,+-/.,///.0234851/5;<<==>>==;;;612444136:::8504632237754--LG-BONPewaA99204:=8057410//11/4<?9;=:99:96655:=6-,105=FD;;A<65E`xpQC==>;NJ&$,1554549@@A?70AICOUUVMIDE@3,-056426?E@;><403653346989<:720/.-.0320.-2772/-/2549BD:0.59;=?@>KOY\\ZWT[ovjbehffd_YUUWXUNKRVUROMKIHHGGGFFFEFFEEGHIJMONMIFEEEDDDCBBDDDFFEDCBADFGGGEFGFHHFFEGIIIHHGECABDECBBAABCFFFJOPOPQQUOA;=?CGHIJKNLD><;;;;:;<=>>?@@@@ABBBCBABAAAA@??AABBBA>:=K\\a^`cfkcWUY[YX[YI<>?BBBBCCDEEFGOQOJIJJJIGGHIMNOMHAABCCDFGGHIKNMMRX^dhkjjlok[QOMLORPQTX_dfhmpmaY\\UPX^^^XOTWWZ_^ZWXWVUfetXVUZZZX{h_QHN`dgpv{qWHMR`rthVca^Z\\Z`t{wtnoqwuaFJJGTXMKLLKIHExaWY]qdXUHCEILMMMMJN]bSKMONFJsvhondaZUX]ZTNKKJE>>CMUZWUTTXlaIILKJIHGFGHIJPVX]`[USOIFEEFD@>=>AHCAAA@@@?@@@ABCEGJHHG@>DEFLVcfYLA>>>>ABDEGGEC@?=>CKIJSVPG=:=><:8789;;<<:78;<AHPUSJGF94:ADDDFGGMTTPKJILYUQRY[VRTYXNJOSSRNPVH:CQNDAMLE@>CGR[\\NCBDDDFHHIJLMMLMOQSTUVWXXXY[ZYXTRV\\\\^_RB=ABBCCDDEOUVXY\\^^``bccccbbb_\\TB9=HSMA@HNIELNGHKKJLNLGDDEDB@BC?>FF<?BGJFDDHKHE@@ELMTZXNBCEJTZ[VX[_\\XXXVV^_Y\\df]L@>BBCJKKKNLE>>>?@>>BA>;=@A?=?ABAACFGECCHKIEBDFIIFEJKJKLLNSbsyi{~w{wry{~ea\\YVVWXbgdnytaMGIKKKKIHGGEDEFFFFDBCBA@;@aX]fkr{{olpi^YUWTLPJIIC=>@<:=@@@?==<;;<<;:;;973-/38FNLIDBAA@><>ABCFHKMNPQRSTTSSUWXXZ\\]^^^\\[YVTUVVUUUSRSUUVWWXXYTRPTZ[^__a^\\Z[\\]][SG:1--*-/,0:A@@@AAENJ@<=97689ABDC6KsW@BIFIHHIIFEJMNKHFA=B=44506A?<?OXLDGNU\\eg^WG8/6DNKB??;87769<;=:447DJFJw{:7::<FE<@LUYYSHCC@@@@=;:=???ACGJLMLIGFDGG@:G[_XSU_eb`fiUB>AAA<9;@@@CEGID;53458;:977>OPA7443114449@?86779;<===;8755;CD@?<9?GFA>=;;=<<<>A@=AIKIIE=51369996643:;46;<8338BDFNP@36<@DCGG79JSB:AIKMKC?BCFJKJIHGFA::@B?<==;63:?BGGAAINOONLJHIFFE=3256988>BA><=>;769>>>><:::;<>?=;=:74225:::8877:;==8758854124;CC=?A=;;:<BAB@>537;>>=<>:79>FMJ@879=BIIA??=<<=<=?ADA><9889;<<=>@?<<BD?:8649ES]`YSIAEJG<21579@GIGA97:<;:9;<<;;9743113688:<<=>?@@@@@BBBBCDCCCBBBBA=>GKG?<;34:6436899831345?B5*+24014105858HN?./00022.-03?K=678<CED>>>AGD=6556775210/--.--/./.-,,04/.00.0375355558;;<=>>AA@<==822344126;<;9525620025621.5VB/3675KokH78656:;6.46532015502789=>738BLG;;>?AA:6:98=ABEGIGF?:F_aJB=8<@AG@0)036534=FCA><:JMN\\PCL?8AEE?824972379;89>=42674235766:940/00-+-033/--.00//./2335=ED<339868=;IIKMMNPR_kc[Z_ca_\\XVVUTRONNOQQOMJHHHGGGFDDDDDDDGIIJKLOMLJHFEFECBBCDEEFFEDCBCABEGHMPKGFFFFEGJJJIHHHDBBBCBBA@@ABDDDIOPNNNORTRI>9=AEHMNPQIB=;;;;::;==>>@@?@ABCCCCBAABCDDAABBBBBA@<6>LLGOW[`\\ROTZZYXXXH<@BBBABBBCDDDEHMQQPMLKIIIIILQRLHCBBCCEFFGGIJKKOSX_fjjjjmmhZPNMLJMW[TRVZ^fjjge`YOW_]ZVPSWWY\\VXXVVRTggw[\\ZWZ\\Zi^OJPcewerxmXHLKWhukSTobY\\\\`pwwxulmyzUBHShsJJKIJJIGzbZXWlgYTGACGLNNLMNRZ\\SJKOKCJspWYcekjVWZVTUOHEDDHJLQRVYXWZn_IIKLJIHGFEGHFIXXVVZ[VQLKFFEC@>=?AAABBBBAA????ABCDFIIKMBFMIFLUUH>;>@@?@BBCDGJIE@?@DPXYTRNKJHLLF?;889:::97756;AIRTNI@EE75AIKHGJGFQSQKLKJMPPRTRRRRQOLJGFKPOQTRA?W[IEFJ@?HKIFP^]NDCDDDEGIIJLLMMMOQSTUVWXXXZZZYXURV[\\_]XOICA><?CELUXYZZ\\]__accccbbba_[UJKKQTK@?CHFDNVRPONKLMJEDDDCBABB@?GKI@DGFGEEJMMECBGOT_dXGA@DGMPMRY]biiaZYeqkZVgo_LCBDCFKLJEDIGHJJIIHGIID>>BB@>>>?@BBDFECDHLJDCEGJJFDHHIIKQaxfv{z||oy|us}{u}zyghfhfaWPZghp{rTEKNKJJJIGGGEDEFFFECBCBA@9W^Vckpu{ttph_][XSNRLJJD>>><:<>@??A@>=;<<<<<;::4-+159FLHB@???=<?ABDFHKMOQQSTUSSSUXZY[]]^^^]\\[YVWZXTUWXTRSUWYYYXWTRSWZ[^a__\\ZZ[[]\\YSMK;/+*+*'/9A@BBBBEDE?@?;7689CBCA>IQK@A@??>>=?DEINONKI>;AAI>705>;;?OVMHQWXX\\]XI;446@GHE@><96657869646<DMIFKXXZV579:;<><FRUWWRLF>;>A@><=@?>>@BFIMOMLJFC<;=EUb`XUTRU]`fi\\G@BHF?99==<?>DFE@:56=A>964<OTJ>5332124559BGA6668;;;;<<:859AFHHC@=@EC?><;<==<<<<<<AHIHGD=51458982446HO:/:?:979>FGJQI75?EC=AJKHKF?;AHJMKFACEGJJIIHFFA:;@CA>>;:75:ADJH?=CMOONOMHHHHID@9469::>AA@?==<977:>@BA<999:?@=;;:99769;:987789:;;:88:=<52259>><:854546AFAA?538;=?>>=869=DLG<658<@AAAAA>==<<?EFC=9877889;;;=?=97=A?;8748@AKMGECFPI:3,/698<ADA:59>=;98::8655443124779:<==>???@@@ABBBCDCBBBAABA?@HID:7:23:55668=?=86755@@1,3:62251.387<DD=40.-/0-(*-08;544555AFB??CDA=7567896101/-,--,--.0/.1452000/..44225678:;==>?BFD@=:545674115:;;;8443/,-./6:87ES>72.4(>maF67554565-255542369318=<==869GSUF?CCEE@@=;8>CEKQLNOH@>BILLM@<FGGNG87934:@EG@?@AFMP^^A.75.:=@A;56:7368978:>=866662133039730../+*,14310/./..//0233128AGA745438;HGGGHLSTVYWUV]aa^][[WUTSRRPMJKKKIHGGFFFEDDEEEFGGHHKKNPOPRPIEDCDEDCCDDCBCACDHOXbfiotfNECBBCEGGGFFHGFDAABBAAB@@ADCDGJLLLKMQSVTI><>AJSTSRQME>;;::9:<=<=?@@@@BCCCCBABAAABDCBCBABA>:69?=9=CIQTQOTY[YWXZXKB@A?ABBABCDEEHLOPOOOMJIIIIIJNNQLDEDCDEEFFEGJILLNU_gijklmogYPLKEQhiZPPTX[^abda^YYZWPMNQRTYYWXYXWMRikx\\XUY\\]YidXKQdeo^lylYJPOTcxqaVeXSZ^`dknml`\\el`bnbѣSEIHIJMKcYVUhk[WKHGILMMLPZ]WUPLLNKEE^[KFP_prYUWNIVVHCEKU[VODRb_V]p]HJLKJHHGFEEEA@HKNOUYVTSUOGC@===@BFIJHEDCA@@@@ABCCDFHKOIOQIAAQS>8;?AABBCDDCFMNKDEEFHKNMLJKNRUUQJB=:<<<<9678:?DKNH<;8AG=?MQSNKKDIZ]LCGIHFCGJNNNPUSHEHGHPUTUWJ<Q^L?JSP=DWUOKKTZSJEDDDEGHIJLMMMNNQSTUVWXXYZZZYXVTUY[]]ZVOKHC?CHKQXZ[[[\\^__`cccccaaaciklc\\\\O=??A>AAJb`YTSOKJGCCCDCBBCEDCGRUFBCEFFHMQMJGHHP]_O?<EJGDCCDQZ_mybUXfmc]_fk]KCGHILMLKPQMLQY][ROSUTSKFDCBA@@@BDDCDDDDGIHEDEGLIDEGBEWk}{glvvx~uv{s}oknnttgZPVgnq{rSKTQLKJJIGFFECDFFFDBAABB>@d[^hpsvzwpibfe[SRVPMJECFB?<==>=<AGI@=<<====<;83//1,0@D?=<<<<<?ACDFIKNPQQRTSSRRTWXYZ[[\\\\\\\\\\[XUWZXTTXZUQRUVY\\]ZUTTW[Z[^a`]ZXYZ[\\[YRIB>4.,.,/3;@@BCCCC;=AC@:9:=AFDCEJKD@AA@@@@@@@DFLLNUWP=8ESXQ@56306CPRS[\\NEFQSSNC98;?=BD;?D9455774656?EA6;DECIJkMB52689;<?DNRQONLJC:<>@?@@CC?>?@BDGMSTUTPIA>BO\\b_XYUFCRagh\\IAAHGB><=87<?BCDCA<:?B>;97<FB554332123557BMK;678:;;<<<<86:ADEEDEDBBCB@?=>====<78;?ADFIG@7146788469@PWH59CDBA>:BHFLPD9>FC=:CRRF=>=BIKLLJEEEFGHGGGGFC=;?DBA?;77=CIJKH?59FMMMSPFDHIKLJD?:;=@ABCB?==>=9549?CC<7669=?=<;;=?>>?;97665788;=@=;=AB=:899<=;7578754>EAB>77:;=?@?@?>;=@F@8768<@76=BBB@?>?CJF=7446666679;;<<66;?>=<:99::>AA@>DNB0/26<??=>?=978:;;88:<;51124432468:====>?>?@@@ABBBBCBBBBBBBA?@BB>53423855888?DA<;:77:3/:@?:641-+/6;FG>761-.10//..//-)1320,3CIB@BA8856546731021.,-/-./12236655420.-/120-38647::89;>BCA<8689;;9646:;;<;820.-,,*0:>;WG68626*?_B:640,..04/13320/03<;8;A@>=:95;K\\XLILK@=D>97@MQRPKLMHHKKQZ_`SCDNMMcri`O:8>@?BEFHJKQ_P1+0/-247<<57:::9;?AA==;:9976100//25420.-+*,/2312330./14554563.+07963478;>FFGFGLTUTRRUX]`b`_^]\\YVSSQOMIGHHHGFEFFFFEEFFFGGGFGHIJKMOPMHCACDDDCCCCA?DNW`dgpxzz{~zeL?>?@BDDDDDDDDDABBBABCA@ABBCDEGIKLOQRSSUQIBAHMOOQRSNE><<;;:;<;<?A@@@BCCDCBAA@?==?@@?>@A?AMXL98=;6?OUQRTRSVYZZZ[UKA=@BB@@AFNQRSQQRSQOKJJHIIJLOPOLIEBBCCEEEEEFGHLQV`hkkklnni`QJIXlk[XUYbaZ_b^\\\\\\[VRMILIHRYYYWWWVV[ilqTOPUXXTihUGOddqco{m^T_`br{jf`\\TSX_`cgdXVTZYUktqf|^EHGHJMKeXUXln^[SQRSQMMLRekXNOMLLLGAFLRSS]op[TVMFRXKCERbZsFInkU[s[GKLJIGHHGECDB>?ACJSQKKNU[WI=:=>>Q`cXMHGEBAA@@ACDDCDGIKMKFGC;GSD:=?ABCCCDCBFOROIECA>;;?CFGHIKLMKGB@?>==:8:=?ABFF@8:;CHDFKRWSJC?Pc]LC@AEBADCCBCFLHEEMQU[\\YUPFBVN<?LWXGL\\VQ[a_^XNDBCCEGHIJLMMNNNPSTUVWXXZZZZYXWVUWY\\\\[YPMLHHMRTWZ[\\\\]]^__`cccccaa`dvzd^YC9=>>=>>@PZVSZTKGCABBCCBCDGHFGRUJBBCCCJUUKLMLKNXN98EMOJA?BHQ\\kyp^Zcc[bha`[JBFIMPPLKT`[TPR[_VMSY[`]PDDECBBBDFEBBDEEFGFFFEGNGCFEWp}{zwsfew}|wyvx}wp{~vmen{wcXPVgrsxmSNTOLKJJJHFFDABDEDC@>@BF<P\\]fmtx{}wqjemk]VWVSPJFGIDA?><<;868=??==?@A@?>><7000/6=<::9:;=@ADDFILOOPQRSRRQQSUWXXYYZZZZ[[XUVXWUUVWSQTUTY^^XQRW\\[YZ_a`[YXXYZ\\ZXE0,45/.17;<=?ADFEECABB=88;?GHDBBHLKEBACEDCCCDEDA=@N[aV<5G^b_UH8375GZ^cgV:9NZUQQF97<><;;5?K914569==:=DF@89@B@HIEtr=>=<748>GJJOPLFA@?=<@@>>ADC=;>@@AACKUUUUULDFNYa`YX[I21EV_gbQC@BDEB?>=>CFEDCCCC@<88<AA<53333321123566;EJA8888:;;;976579<BDCCEEEEECB>=>>>>;88:=>@FJIC91369888?HKNTQ>7BKMMG==GHHPL=;BA=8<JJ?:;?CIKKMNKHFEEEDDCDGGB??=?CC>87@JNLJIA;>CEEGMJ=;DGECCEGB=?DECBA@?@AA<4137:;:8779;=>=:9=BBA?<97554765:?A?<:8999788;<:;<<<<;;@EEC=9;=;<?AACEA=<<;977789@>5:DEFCA@CFGA97976532127::::::<==>?><9:<=AEDA@A<:ADA>ACB?><97778889;=?:7555542457<@?===<=>@@@@BBBBBBBBBBBBAAA?=<8411365598:@CA?;9;;4.6BBBB9/*+,/6?IE=83/,-37873.-./-1120.3>EAANO?4475210/00140,-..-046767666632223320-4;7234322455:;87;=<;;<=;:99999932110-*,26>X@4988;/GX468674323210120.++/588:>?><;;0-5Mc`TRRH>D?01?NXUB8BNPQW[_c^XYWF3>BPjI1,7AILNNNMH8,042136:<73:@B@=?FHE@<:::;9865444431/.-+,.1342231/.169<<;:984.,-/1468;;<<GHHIJMQQQSUWX\\^aa`_^^ZTQQPMKJIGFFGFFEFGGGGGGGHGFEDEEDDCCFIKS_d\\PECDA@IZehimnprqpqtwzwbJ>;<?A@@@AABBAAAABACCA@AABBBCEGHKLNQRTX]ZSPMHBEKMMJF@==<<<<;;<>?@A@BDDDEDB@@?=<;<=:;AHR]cieN<;==BJJGGEELPSVYYY][QG@ACBBDGJKNRXZYXWRNMLJJJKLLLNQPMGFEDFGJKKKKLLQYagjllmnnqpeZY`gc[[YW_eX^vi_\\WVURRPNIFMXZYXWVU]i`inNOQQRRQkcMFNderdr}lffnefyzofga[VV]jutlZQU_bdl`Q\\`]aUIGGGIJO}hZV[oob[SPT[]TLOO^lXLMNLJJGAMQR\\edjl^TQKHLPMEEVgcZRc^FSuZFKOLIIJJIGEEC@BCCEGJLLMQ\\d_M@@CCZllZLIHDAAA@?ACDCCCEGIMR^hj`XZN<;=?BBBAAA?ETYQG?>=<;:<=>>>=<=@ABCDB@>=:9;=>=?CB=8>=?FFGGPTMB9>R^TMNE<?CEFEEDEDDAEQ[`a[SOGA>?PG>FNRXOQYPPcvoaYQEBCCFGGHJLMMNNOQSTUVWXXYZ[ZYXWVUUX[\\ZYURTSSUWZZZZ[\\\\]^__`bcccb`\\TRessc^K:;><==>=?GUWTYVI@>?@BCCCCCGHDFLOLEBBBCKUPGGJRSMMC>FMLJGBCHLLSn|z}{jZQTZbg[NPNEBCJONKJVcd^WRUYWNNYdhfUGEFFECDEGGDABCDEEEGGHI?D_q{yxtnsqearvnqooy{ysxvpx{pgovobYVXdrzwgVSSPNLJJJHFGB@BDCDD?<BFI@]Wcks{~|tqokni[]ZYWRKJLKGDAA?><:8668878<>AA@@@?=::::;;:9989:<>@CDFIMNNOOPQRQQQRSVWWXXXXXXYYWVWXWUWTSQRTTSW\\[TPRY_ZY[_a^ZWXXY[\\XXE3AC5,,2:<>>?AEIGEFII@658>DJFC?=ACCBBBDGFEEFGLOKGRXbeaC3BdfgmdF9SUVakeS<7LacVMGA;8667897AJ91456=HIECFEBBBBABB@>Cq\\JRQI99ABKMHKLI@979;?A@?@AA:8<@@>=;:BQTKMSE:ERY[YYXR60?HGM`h[JB?ACDABCFGGGFDDCDF@:9;AD<358435423347:87<BC<;;989;9315556;CGEABHIGFFD@>?@>;:;::;<@GJHC93379769EMLLNPD8>EJONKGKLHGC::>><?BEA857?EJLLMMLKJGEDB?<;?CDB?<=AC?76=EEEJLKLKFB@=>?<<@CA==?A>88?C@>>>?@A?<96664479;<;;<>:426>B?9:::9755336998840135568:9:??;::;==@CA;9<;87:>EGD?<<9559::99DJ?<CDFCA@BB@=<<:850,/435999;??==<=BB=;;;>CEFFA>@HNIB;:====;87777678;>?@A@><733455:??>>=<;=>?AAABBBBBBBCCBBABBB@@>;852346::<ABA@<:;:66;AEJE4,.3536?<442/0138:::76679520.,-8<;=IWVF66;;751.---00,**+.3666655564//3422235:<96321101466321569;:;==:665337554520../.IK;4988;3NV48:;:9653221/./0//..1016;===:0(&2Vi`VVWI?<209KUQ8)8OWWY[`f^VTWPJKA9[K)4?FHIKME4,,-5<638=;1.:DDDDEIJE>888999::999863222//23467553.,2;BB>::;;:64435778:;;;:GHIJJLLMPSVWXZ]aa`__^[URQOMKJJHGFGGGGHJKJJIIJIGFFFEEECCIW`gmprodVIEJT_jkfgjllmmkouvwyudL>=?@????@@@@@@@BBCBAAAABAACCDEEEHPX[\\`abb_VJAADBA@>=<<<<<<=>>>@BABCDDEDB@@@??;7:@FMWbgaaieR>9>A><>>:?KLHO[[Z\\]^YMEDFFFFFHILKMRXXTRPNLKKKKJKMPQRPLGEFFGKMPUZ^`ceijkmnnnoppligda__\\VU[WRr}maVTUVUTRJFMVZZYXXY\\f_ipNPQSRQQkZJENdem`p{pkfndfv}ypfj`RR[jtrvp]aosytseXUPHIKJHGIHZm[RQkpc\\ROOZbYNQQXp]LNMMLIGDUWPcojgj`SMFEHJKIGNYΎjcUN>SyXGLNNKJLMLJHE??EDDDEFJQVWYahcTLIIPW[PIKJD?=?>=ADDDCCFHHPo{tqokdRB<:=AEEB@AAI\\^PDA@BGMNKHEB@?=<;=@CEB@@>::<<;;>CA65<<;GMTNPWPGCIRQOPSPC>AFHGHKVXNIVahh_QEA;449KHFNTVYZ[WMO[tn\\XRFCCDFGGHJLLMMMOQRSUUVXXXZ[[XWWVVVY\\]\\[ZXYYXYZ[Z[[\\\\]]^__`abcbbbWC:DTms`A8=><>?><GYjme\\TJ?>@@BBBCCCCCABDGHDCBBCFHFA@IW][\\YSOJHIEADGKIHUhqqnfQ?BP[f\\GIROECFJLMPYegfoqdVWYVZgc^QJGHGFFFFGIGBCCCFEGGFIDMz||xupq}ue^pm^gpv~~~}}wox|{skgeb_a^Zi~xaWUSPNLJJJHFGC?BECBC?<FJJJ`[hnz~xosvoiebe\\`^SMNMMIFCCAA?>>><:658<>?@@@>>>>>>>=:97889:;=?ABFIKMNOOPQPQRTSUWWXXXXXUUUUUVWXVTWVSQQSTUVWXURTY][[^__^ZXXYZ\\]WZSJJ@0+*)-1346:BFEDFHA7677@IGIPKCCBBBDEHILNPPRTZ^hylefiO4>b^coqZ=_tiedR80E_h`VKDB@94578:7>I92677?IMKGFDABA@@???DJKNPPUTL<>IJKFCDGHC<9:=AB@@@?93;BBB@:42:IMKIJ<3<CFMSXWC6HZMAG_kcQFDGJFCCCBDEGGGGEEGFECBA<556533564248=B@;=ABBBA?;98502666<CFGGEEHIGGHIFDCB?:6589:<?DEC@94589769ADCFDGB879@GLOSTN@89:<=>DJIB;318BEHLLKKHJNJECCB>9:=ACCA>;;8658:;AJMOPMJEA<:?DDDECA>>>;748<<<==><;;;<<:97579::;==<9668<?;46799876640123455579;;<;88;>;85566;?>;:;:967>FD<7:>?76:>BB@CIHDCDEB??>=9<@:333.,4<943347;>>=<=@B?<;:=BDGKIFEED@=;:99:;:87776668;<=CEFC@:3343359:;<<;9::<@ABCBBBBBBBBBBBDEECCA@@<4128<<<>AB@?<:89:9@HG:028<<66:4.022468;:989;<<;5/,*)+3:;@NRJ=68=>>:61.,,,,+)(*.5765779630-,,/0/05<>;867654216;70-+*.5::9863243/0443343336.2XA56998;5ZT59;9872//00010/6;;:873-19==>70.//Mjd]ULF=8977BJH91>RVVVXesmYCEWe\\POK\\Q3?CCCDIF7.,,8C;3341-*1<BDGHJLF:224689;;9776578875455455541/1:AC@70048<==:678758;;;9GGIKKIJMPPRVX[^aa`_^]\\XTQOMLKJHHHHGGGJMMLLKJKIHGHGGDCJT^hmonjkkjga_`bgg`^bghimprwyvvvyvdL@??>>??????@?@BBBA@AAAA@BBCCCCDGPXZYY[]_][RE>>?>==>=<<<<<>@@@@BBBCDDEDBBB@AA>=CKNPY\\XZ`cfhYA9==<;<;=FGBHUZ\\\\\\^`\\SIDCEFGFHIIJLORRRQOLKKKKLKLOPQSRNHDABEGINSY\\_djmmoqpmnnomljhjkjfaZSTLT{iVTUVUTTPNSXXYXXZ[X]dkyoPOORSQQgPKFQegfasw}ynYcp|w~|ncnbOO[a]dqfx}o|xVPTOLLMMLKMomYKIhob]RNOY]UNPSYxeGMOLKIGGUWSfslij_QLIFHKJRNFDvm^QMD\\~VINONLLPQNLJE>?FFGFFFGHPUTV]dd[OKGHIKLQPF=;==<AGFECBGIEXjYMHKO[UF=98BKJEBBCIXXMGHIJLV]YZXSIDBA@>@BDCCB>;<>:7:>BA65:FKS`hWNPMKPTTVVY][NGEGGGJQ]\\U\\gjg_OA=:7458EFIRZ`bilaRMTmfYXSHCCCEFFHJLLMMMNPSTUVWXXXZZZXWWVVUX\\]]]][YYXYZZ[[[\\\\]]^^^_abaab]M>75>Ti_@9<=<>@?E`uxdJ@BCABCCBAAA@@@ABCCCCBCCAB@BMZ]_feWKHIHA<CEEHG@Ob`YXTG>AM\\[NLPRMGFILOQTaieutZ`g^XZUNFHJIHHIHHGJIGFFGGCCHNWqwhip{}b_jrghv|~vyxv|~wwoujfc`bhaYevn\\WURPNLJJJHFFDABECBB@?KJKV\\ciny~ppvxpe_hh\\c_UQPPOKHEEEEDBBA@<:;>?ABCBB?>><:::98756889;=>?ADGJMOOPPQPQRTUVWWXXXWUSRQRSTSUTTWVTSQSUVXXYWSVYY[\\_^\\ZYYYYY[\\WXP@3--./*,-/..0359<DA73997?JKR_^XQLIFIKMMS^a^[VUXl\\[jhM6=\\QL[nlO]vnfYD57Lbg_XSMIE?=<<;;7=N>2677:>@EHGA?AAA@@?AHPLIMOPPLBEGIKGB>DJIECBAA@?AA<46=CGHF?626>HPPE92469EQXVCG_aLEL\\igXIIRSKFFC?@DHHHHJJHGFGLI8146434465248?GFABEEDDCCC@:3/048<CFFEFGGFFFGJLKHECB=41589<>@@=:868:<<==?>>?=??86:AEHKPTL80:A@;?PVH9106CKHILMKIHINLFCA@@?>=?DGE@9677865;DKMLLJFC@>>@CBCDB>;=@@>969:;=??858;;;;::856535:::=@?==>:6766666687200038968=@?=;977=>75435:>>>;<>:7:?@;32:DG?=?DIJGBDJKGEEBA?<86?A608<66;><852037:<<;98;><::>ADJNKFC?<=>@A?<8789876677888;?CC>9842223347::987668;>BBABBBBAABBBBCDDCAA@BA;447<===ACB?<:8889:;725:;=<626756742259;:<>><<;6-*-1.,6>DKMC867;@?9561..-))))*-46678:;8565.*,1//7=;:747985315850.-+.26962/.1210/001//.4=?/@`@26;;:95`R69;:=80.0/0/87.4AIKKF?3258;:;>CF=NhcbQ5?D1199:=B=<LVTSU^noZ;0TcRKIQXPc[.AD@AEKJ>2/4=A<5/,++)-8AEGGJKD7103789::96666<?;9:8423332323699:82,,.3:ACA<53336:;;;GGHJKHHILLMRX[^abb^[]]ZUROMLLJJJJIIIKMNMMMLKJJJJJIINV\\_eiihhjiiihgf`]a`]_adfhmswwwuuvvwsbLA@??@????@@@@ABBB@@@@AABBBDEEFGKPQOOOOOLIJFB@??>>>>==<<<>@@@@AAABBCDEDEEEEEEHHD@@FOVZaedhiXC<>><;==??<?KPSW]_]][XOFDDEDFHKNNMOOPQPMKKKKLKLOPOOSTRLDCDEFEEDFKT[_`cfilmmnmmnqvxnkkaSQTNh~XMQQSUVXXXYWUVY]ZX\\blxpPMMSSOQcUQJUgkcbqwznS_n|yrzcgqbPS_a[kzdYfjQQQQTVQMLMMMNo~fVLPlm]\\QKQa]OLQUSicEHPMKHGFMRUkwpll^OKLLKLLNRHHohTRSMdTHNPNMRUUTPMHCBEFGFGGGEFIJILSZYNLJJLOVYXG>=??AGJHGFEHIFPE9:<CDPZL??CJOMHDB@CJKIKKKKLOVZ\\\\TJFDACGGDDEFCA==>;;=?@CA6;a^^mjSD>;AIOPU\\aggZRNGEGJNQT\\ceb]L>;987679@DGQ[]fnrkXOThaWYTHBBBDFFHJLLMMLNQSTUVWXXYYYZXWWWVUWZ]]^][[ZYYYZ[[Z[]]]^^]_aa`caP?<;;:<LO?:=>=?@AKovH@DCBBCCBAA@AABBCCCCCCBDBBFLPVQLJGGIGED>:BDEJMCFTWSU_\\G<BLRUTLJNJGJKMOMS^^k~sfol_WMIFDGKIIIIIIJKIHHHFA@Me~seeoyc`dgnv|wqmst~}~||}ovt}qkkd]eiefkib]XUQONMLKJHGEDDDHDBA@@OKQa_jinxvosvtlaYgg\\a[VUTSQNLJJJJIFDDA><>@ACEEDCA@>;:987653578:<>?@ADGJMOPPPQPQRTUVWXYXWVUUTSRRROORXXUUURSWVY]ZUTZ]ZY[`_ZWWWVWXZYYS=+,11259.*(((('(,1@@97<=8=P]`__c[SLFHMTW]ih^XWRVn{[\\l\\@<AXQ:EVigkuf[SI>=Refa_^QJGDBA@?=9?L@1333542:EHC@BBCCA@BDDGJLNONLE@=?EFD@EJKKKHA=;>EC979<@EIKJC;76>HK@7425;@GXYMR]VNLKQ`gYHJUWOJLJCCDFGHIMNJFBAIK>9?>646665347?FE@?CHA:;?DEB;2.6CHFEFFEEEEEDFHKJHGCCA61489:<=<;:;:=@ACEEC@@?>=>>>DEFEFFKC54>FD>AOSA0/6@JMKLNOJFGJJHGC?:>CC?@CEDA9579975:EMMKIFB??AB@?BCCB>;;<?B@<<<;<<<87:<;;<;9865423789;<<9:=>><85555689850/36522;B?8467599456679>A@:;=;;<=83/18AEEFHJIIJIIKLKFDCDA<8;@>78CD>=:9==8558:;;:9659><9;?@DMNG@==?@@ACC=5367764468876:<><844335688569987654459<>?AAAA?ABBBABBBBB@>@CA<:;=?@@@BB?<:87783.0359;<:5137774/.,,4<AED?<=>7,*493,1:=CNOD638@<53:7301,())*-26788776699401223:<999789865666224300224211120100//0..,.6=5SV:37;;<9;_N6;;=>80251//9=10BNPQNH:34688BPSODJ]acR8EH.(3965<>>NXUSWinP3(<}wMQY_u{`[\\31DEBEPRLB<?EE?740.-,,4<@CEEGE=8746899998678:?@==<93/../02444337;6/./3:@BDB94347:;;=GFFHHGFEEGLRW\\_bca_Z[ZXVSPNLJJJIIKKLOOOOOONNNONLLOW\\[Y]db_aehihgfb][[[[_a`bdgmvvrppqvvtvraMA=?@@@????@@@BBB@@@@@BCCCDEEFEGIHHHIKJGCGHFDB@@?>====<=>??@AAAAAABCDGIIIHGHJF>:9;EQ[cfa[^e\\J?<?><<=<8;DFDLYYW[`aZSNDCCDFHILOPPPPPOMKKLLLLNPNMORSQLGHIJMPTUVY\\]_`adhjlmmnnquumikhXNYfesrVROSTWXYYYWTUY^ZV_[k|kKMKRSLOcb]S[gnddntv~snOV[`kmrlemp_SYdjmqhWQXuRAFMQRONLIGFMVp{bSNZqk[\\QJR`^NLQURSRHIPNKJHEGNTmyoom[NJLMLLMR\\X|tiTRVQiRHNONLPOOUSNKLJGFEFGHGHHHHFDGLKJJJJJKRXXIB@BAIMMMKHHIJHF=;>FMOOWUDEONLLHDA@ADFGHHIHIIKRRNLEJI@ALVQNLIDID>??@AA@FH8<pj`h[I=56@IKLPUX]eaXSMNONNKQbg_`TA95586699<BHSTPR]jhWRW`[VYWJ@@CEEEGJLLLMMMOQSUUVXXYYYYXXWWUUWY[\\^]\\\\[ZZZZZ[[[\\\\\\\\]^_``acZE::;<<<<?><=>>?CEB_sEADCCA>>?@ABBBBBCBCCBBACCBELNND=77AHFABBAACMROGJSYYZa^KACGLSTPCDGFGILMMJIPaifnumc]ULILQNKKKKKLNKJJF<>Qoy}yhdq}wqhbafmrqgaow{~|uqv~yoiiimmggmkda_YUROOOOLJHGFDFGGGDBA?KO[dgimv|stvupg\\V]a^]XVVWTRONLLLLKGEDA>>@@@BDEDCA?><;875434679:<>ABCEGKOQQQQQPQQSTUWYYXWXYVUTSSROMOWVUVUQSXWWXWST]b]\\_a_[XUWXYYYXXUB3465476311/--.048=BD?<<=@VhbTNZ_YRKCCXa\\geYQPQ]unBZgD8?CLP?@FTcsz_NPO@Ihmjfg^NIIFDDA??<=E@51122225=FFDCCCBA@?<>FKKMNMKG==>?@FGHJJJJD<89BEB98:;>CEHOK@6369:99;979:BX[QTXVVSKJW_SGJSVPKLOKGFFGHHKKIGB>AFDEKD85888768=@CB<8?E=3369?C?77BKLIHHGGHGEEFFHIJIHDDC716::9:::=ACBCDDFHFD@?@@>>CEEDCBA@B<7<BEFDFKG:78@EIHFFGHDAEGHFC@;7<CDB@@ACA96;AA@?@FPOGDCB@?@@@BINMLJIE><@CCA=:777:<=;;=>=;9755667798679<>AA@<:8888999633443239;83025321169:75;@A:7;=<<:400026<FJLIGIKNNKKJDACGE?=?<:;BHC>=67@;4<B@==<;:98:<;9=@?BIJC=9;???>>@=8665433347966:997653237<><9568776651269;=?@?@@ABBBABBBBBA@@AA@???@@@ADB><:8986236413698410672../-,3?IID@=?>6./793-0:>CJMD537;843:;623.)*+,/36754344456655239=<9::;=;:;<><;74773001233442020333520.*)-<UB778?D@=@fC6:<=;5/16.00:A:;GJLMQM902667?JTPIKS^bUHME3-15415:<CHOWbuqL=;WrSZsj`U3:HGIKLOQJCHOSM=221///27>>?CFGB:;;88899999529?@??A?93.,+.1244446;>81026;???A@;436999:GFEFFEEDBFNSX^`bccc\\TRSSPMLJJJIIJJKMPQPPPOPPQRPPSZ[RKOVWVZbghgghgb]\\[YZ]^_`dfjppnoprvxvuun]JA@@@@????@@@ABA@@@@ABBCCDEEEEEGHIIKNNMLNNKIGEC@?>==<;=?>?@AAAAAAADEHKKKJIHGFEB?>@BQdbZTTdjYE>>?><;:9:>A@BFFIS[_^_bVE@CFFHIKNPPPPOMLKKLLLMNMLLLNPQOKHGIJRXY[`abbcfiklmmmmnoonb^_RMYkcTj^UQRSVWXXUTUX\\XTaZj}fGLJPRLOgb`^`grdfolbjknPR[[cub]hpnc]cimpgRJOVbBHIIJMNNOLJIKMTt_VV`r~hYZSMSZYTQSTSOHHLMLKJIEKNRgtnje[TQNMOLXlvyy}nUQVPnPHONKHHHGKMLMOOMJGFFEEIOQOLIJJHHIKJGDDJNKHDCAU`URKJJIJHA??DKOPOTYJFG@FJFA?@DFGGGGGGFFEHE>DHGJMMKJY\\ZKALPGABDEEFKMC@mhZ]PC:7@KPPPPOPQXVMDGU_aZQPWZdhQ:635889;99?KUQE7>W]OLPPMLQUNB>CEEEGIKLMMMNORSTUVWWYYYYXXWXWUWXZ\\]]\\\\\\[[Z\\\\]]\\[Z[[[]_``a`Q@;;:9:;=>=;=>>?EG<Lt`=GUN>;:9<=?BBBBBBBBCCBCCDCELKGC>6=IIFEGLJCESXPLPVZ\\\\\\ZOEGMKIILC?CEGKLLMKDEQUWkwvh\\ZQLMMLKJJJKOPMJC?Rvytt}wmmwyijsf`cijihbgu}tw}o}x||qjjr~whikeba]XVRQONNLIGFFCFJCIFAB=EQ`egju}xryzuncXTV]b\\VUUUSRPNNMMMLIFDB??CB@CEFDB@=<97432425789;=?ABDFHKNOQQQQPQRTTSTUWYYYYVTRQQPPNOPTVTSQSWWTTSRU[a^]`a_\\XUWZZYYZWXSFBB@=>+3FIEADGEEDAFIB<<CFMVSJETca^YH>R`\\fdXL;:KZRCMO@<?@A@BDGJQcpZMPI?Rl`dg_OIJIGFJHBDDAFGDA>=:9849EHECA@@??98BKLLNMMLF>@@??FIJKJIF@97;BA>98::=ACEGD<4235568;87:BOYZV[]\\]YRNTWOHLRQKGINPLHGGGFFGHFD@ACBGJ@557767;AEEDC=9=A=86548=?AFHB>AFHHIKIDBEGHJIIGDC@627::9998:BJLGCBDEDB>=>=<=@A@@A@@@AA@DFFFINNDACDFHIIDA@??>?BGFA<:=CFEB??BC>;AJQTRRQOMHBACC@=<>ACGQUQOQQI?=@BA<9756<@>=>?==?=64567678;==>@??????><9997459965::877422115657:;:859=>:7;=;;;50///27BHGGHIJLLKJHC?BFE@>=75<DD@?=6:@98EKE?AC=87899:;@B?>@@?<98<>=:8<?@>95321369:889887776447:<<:878766676:?=:;>??@@@ABBABBBBBAA@??@@@>><:?D?:9877755::423566533871179611:EGEB?>:4/0552.2<ED?;:887554467432-)*-.1465/,.2443567557<>=:<=?A?=?A@=?<6695/0455310/0/126861-+--&>C2447?G=78f:668862.06-219AAHJJILOI>987525:JKJB:N_WNNC76643126751=Kawo_h`ce[]_nP,>giMGUIELE<@LUN;/0101587;@BBB@><;<;9887788537>A@@CB:42//5:;>><:<<83..158;<88?>6467643HGFFEEDCCHQX\\^_`abd_SNOQOLKJKJIKMMMNQQPPPPOPPQPPQQNLNNNU]acfgdefeb_\\YYYYZ]_bcfhilptuuvwtsqgYNHB>==>????>?@@@??@@@@ABCCCEGHJLLMNNPPRQQPOOLGDBA?====>@?@AAAAAAACEGIJJKLJGHJIDA>=IXTPU^cfbTF??A=:::;<==<<::EUciiml[H?EHGHJLLNNNOMLLLLLLLMLMNNOQRQNKHD@ACEKQW[^bgjlmnmmmooqrdVOLRW[]T^}h^OOQUWYVRSVVWTP^\\j~dFJJOPMOiU\\a_gsbhtikngnWZdkl]Rajieemofa]TLLMe{SFKKQXa`WSRNIFDFqd\\\\`mxgYVUSVZ^a^UQQRGHKKKKIIFKOLYklfYT]^UTWYqwxaSLMKv~NHNLGHFDDGIJJIMTQJEC?DLSSQPNMKJJIJHEA>@GKKFCCSplKIKKGCCCFHJJJR\\PJDAMRJ@=@DGHGGGFGGGHJHDIOCDU]TBK[`L>GOICDFHKMPSMHj^UYK?;<GPQRUSRQPOLA6?QYXX[WMIXhX;42379798:ALWUH68JNC>>?@BEHGA@CEEEGIKLLMMNPRTUVVWXYYYYXXXXWVXYZ\\^]]\\\\\\\\\\]]]^\\[ZZZZ[^`_a\\I:9:::;<===<=?@@DI=BfuK:JeV87===ACB@BAABBBBBCDCDCFFFFN@5BPNJKOPLJKNQWUKJRUSW_UEFLG?>@BBCDJPRNOUWNILO]y~dQOMKFEHHGGFJQNFJX{wngjolgdmthfjtf_cihcafr|~}r|u|nwy|z{wlp|sooib`_[XURQONMKIGFFDDIBGFDA=CVafjs{~ot{{ri`VSV_d]VUUUSSRQPONLLKGEB@ADEDEFEB?=<952100235688:=?ABDFJKMOQQQRRSUVVUSSSX[ZXWUTSQNNNOORSQQQSWWVUSRUWY[]_^][XUWZZZ[ZVTRJE>=BN5(158:>;:84=GPJ?ACFFGHLSbgd`\\ULLX_i_UP@.2:>=CFDGHB42;DHNNT`VUPE>ELCKUNFJMHFHPROPMEIQ]UHDEE=9BJHEDB@@?>>DLOMMNMNME=CDA>BGKKJJE<57>@?<;:<=?AEEB?;6456666668DPW[Y\\c`[^^VQRTNJOQIDGFGQSMGFFFGHHGC@A><BDA<;<604BHHHHD?>>?=>=:9:>DKJB844:BFC?BBADHHJIIIE>;538::98:84:ELH@>ADFC=;<;::78>@AAAAAEJIGEEIQPHGFGHJLMLJIFA:8=A?;89DIEDB@?BCAGUY]]\\\\]TC;?DED@==?A?=EMKFIQMA:9;===<<;?@@AB?;=?;41333457:=>>?>==??@@=:98316;958??;8541113:=<==<<;:;<<<<<=<<=730025:@CEGIIJJKKKID=>BC?<;66<BCCB>:<=;AIKFDGH@73678;>AA>:78<=;9:<<:8;?ED;544348::::767:;;867779;<>=;98788@JKC99==>@@@@BBABBBBBA@?@????==:78841223454578766664444557:?A;105>EFEB;61./220.07>;2.4;;63121123430+-011452/,-147988777<?<9<>?@@??A@;8;<7487026863/../-1.560+)),/3B4+,-01=2-1`953433556:5633;EJIKMOGCJHC93168=?C5%6WUILB799633333/+.0Ghaip[LOcebn|{9F{}fRPJC?822<HG7-.0139>97?ED>;<=:<?=<974438>97<?>?A>8623;ACDDB@?93/-/245783/7=:76420.MLJGFDCBBFOWYXY[[[]_ZSPQQPONMLKMONNPPPQQPOONORQPOMMMLMOT[addc`^^``^[ZXUWZ\\^bccdfjorrqrtttrl`VPKF?=????>>?@@????@@@ABCBDGILNNMNNNNOPNMOQRQMKHDA@???>?>@AAABBBCBCEFFGKMKJKLKJE?<?CEIT]^^da[M?<?=<;;;;<<<BKXcimmnplbNACGGIJIJKLLLLLLKKKLLKMOOPPRSTUUSQQQUZ`hkkjkklmnmmnprqrshYWYYZ[[ZvpbSNRUVXVSUVUSRMWYjdHJJPPONZGRY\\gqahwhvwkrWXcst]SX\\bY_ol[SUTPKQ`qYJKVltvvjZOLHHJJoaSOZemd^ZZZYY`hniZPRIGLLKJIHFJOJQcjgUP^d\\XYlnkrgo\\LOIFD{{NJNNLOJEDGKLF?BNOIE@?FOTUQONLJJJIHGDABDHJIGFHGb޴_EMLIFEDDCCCDL[]QJNX[OB>BFFHHGGGHHHKLLLKODBK[fXNT[PBCGFDEGIKMOQOJ_NNVC7=DHKJNWWVTQNNB>LUJEGFJVSRY\\G?977649?CIR[[PBEIB9788;=?@@AAACDEGIKLLMNOPRSUUVXXXYYYXWWXWUWY[\\^^]]\\\\]]]]]]\\[[ZZZ[]^^_VC89;;<<;;<===?@@CGB?Nc}`CAESM;<@=AIJCADBABBBAABB@@?BA>MTC?NVRKIKLNONJKTP@>JLGRaVDBDA?>??BDDMVVOR^d^RRRVgnXFHPKGJLJEEIJGJ[~ttrmkmkir~|lbgiisg]]bebclx|mn|w}x}nk|zyz|vzplssia^]YXURPQONLKHFFDDICEFIB=EYcjuz}truztgaZTTZabYTVWWUSSSSQPKJIECCACEGFEDC@<=<730//0135678:=?ACEGIJMOQQRSTUVUWYWVUX[ZURRSQNKKNRQOPPPQSWWWVUTUUUW\\\\ZZ[ZUVWYY[WUSOKIIHHK?++,,-,)*)),3ENEFEEEEFSfqh\\YX\\[QRY_RN`eI769;GPPRTJ718AEKOSTSUOI>0602?EGIGFJU^`cc]RMT^XPOOJEFLLHFGDB@@ALRNKKLMLNM?:FG?=AFIHGHB826>?=<<<=>ACEGFA;7444556659FQW]^_dc``_YRQRNKPQIDFCBLPLGDEGIIHGB=968@CFIMI:-4EGDFD?===>>??>=?DLMD=;823;?<58BCDGIKJJJF>=748:<;7889:;BDBBCEHFA><99;87=@A@?>?DJIEDEGKLGGGGIKMNOOMG>53;=;99;>@ADEB@@CO[_]]YUTXQA;@FFDA??@?<99>BBFKH@869:=@BBCB@?=<<;<=93122244455569=<<>?@@>=<:856987:==:8530/27<;9;<<===<<<=>>><=?;74468<?BFGGIKKKKKKE<<AB>:89?CCDDB@><;<>CJIFGJF;547=>>?@>969<==<:89;:9;DE<65655899;;6368;956:@CA==?><<><99FPKB;879<=>@AAA@ABB@@A@@@@@??>=;951,+-.26876678865432004:?@BA<9=>ABCC>82..023233451-,06830//..037:82476245311455:=:8987;<85:=??>?AC@7117835735888433320/,920**))+9C/*)*+,4/+8h9313329>>@>:403?HIJPNDDQNG82A<A?A@;53QM:D@678655420/-.*3ZmpZPNakd^[|ut}~nSLF1(/13992..0249@@9<EF@>><:;@A?;30/5@B7/39<=@@<3-1799:<?@?:2-1896555403<=862.2:TSNKGDDBAEINPPQTRQPW][URSUTRONMMNPPPPPQQOOPPRRRRRRQLKMLKUcfb\\WV]a_]\\ZVSV[^befdbdgkmmoqsttslaWSRPJDAA?@@?@@@@@@?@@@BDEEGHJMNMNNNONNMLJOQRSSPNIDCCB@>>>>?ABCDDCBBDEFGJLLKJJJKJE?<=@CGIOZ`ejgYC:>=<<<<?@L_fe`bmnjlongRBBGHFFIKKMMMLKJJJKLLNNOPRSTVWYY[]\\YYY]dikkoprrqpqqtsptuphb^]\\\\`dm_RRTUWVVYYWUVPWUgcELMQQMOGBCNZfq`gvjzuqwOK\\v}]`eZTNUb^UQRRQOXmiWPVnzxsePIHJJEaPGDXabceca_[TU^lwsbOEGLKIIIGDIOMLZgi[Va`]]ZuwTKHFU\\JFNMIFxPKONPXOEBCHJD<:BDEDCBGOTUQOLJHHGFFEDBEKPNH_`OGLycJJLJIHFDB@AADQaSNRTPGA?ELIGHGGHGHHIICGKMFHFPee[STRHAADEEGIJHDHLELEELB9AGFHHLVXYVQOPEIQFAFGFU`RY[XV\\VLLF?@CFKT[`WIED>76889=AAAAAABDFGIJKLNOPQQRTTUVXXXWWWWWXXVVWZ\\^^]^]\\]]]]]]\\\\[[ZZ[\\]_\\QE?;<<<<;:<==>>>??AB<<Wr\\BCD??A?AA;?HMHCDBBCBA@@>=<;;::@NPIOVURKA?JRONPQI@<?EGHQZRGEGHIIEBABDLSPJP\\ba[XZXPRPCDNMNPOOIEABXm^Zclg_gv}xrhdfegrf\\Z]deis|vbjo}{ndy}ukmqoha^\\YWVSQQONMLIFHDEMCCFMD<D\\hpvyuuussi^ZUT[bd_YYXWWVSSTTSRMJHFBBDEGIHFDC@<:730../0245678;>>@DEFEHKMPRSTUUUUX[YUPNOJBBCHH?;<ANSTRQPQSVWVTUWWUWXZ[YX[\\VVVWWVTTTQMJGFFHK3&+-,++,-/)(1BJEDCCBBM]oe]^aZ\\YQNNHMluU;65:MVTYaYE54>HMQYSKFGKC4;32@IB>?HYcgfjkic[TKIWbXLLMLHEEFB?>?DNNGDHLLIGB6<HD>?CEEEED?625<>=;=?>>ADGHFA;7333445559BJNU]`dkjb^^[WTOMPSRNE@ACCDDCBBBDFD>8548@FJSWQ@13CHC<9899:<===?@DJLHA??;669:;;>CHE@IOIHJFB@858=>=;9<EB9>GGHHHGHGB;78<>==>@?>=?CGHFDEFFHGHHIJKLLGD?:5029<=>>>>=?BDCA@DWf_\\]UIGLMIDBCEEEA?A>:965:BFDA=99;;?BEDEB?<86:<;;8323433322226:==<>>????@BB;57<<:9988877779;968<<<??<;;;<>>::<:66777:>ADGIIJKKKKJE<;@B=:8?HLHFCBCB><;67DJDCIG<;=?@?>??=::=>==<;:99989?@;767558<=;:64333337AKNF>;==;=?>:8CKD><8459:;?A@@@@AA@>?@@?@@???>>==940/14688998885321/09CFB@@@@FIEA>>>;70-/02356862010-/0.-.////16<>98:74453/27858:;?979<<;64:<<=>>@?7.,4:5268987854552/-6=62.,++*15,++,+.01+Df:2/356?B@=A801-4EJHHJEHSMJ3<P<FEH<;JJQL69@>7532221.+,1/-Lt~pbSNbok_YqRB2'-3321/..0357>E@<CF@?><:9==;8401:@;2038<?@A@6,+.//16=?@>3,4==:96555489751,4LWVROKFECCCDFJMMNMLKQXYUQTUTSQQOMMOPPPPOPQQQSUTTTTTQPNMKLU_b]TR\\_`_^]XSSUZ`b_[^aabeilpstttsle^XUSQMFB@@@@@@@@@@>?AACEGHHIJLLLLMNONOOONPRSTTURNJHFDA@?>>>@CBCEDBCFHIIKLMKJJIIKKF?>@?=8=PahkmkbN?>==<<?BKVRLNW_`bhllkj[FCDDFHJKMNMKGGIJJLMMNNPQRSUWWWXZ[WTOIJOTY^cfgjmnoopolnrqka_]]]]dm[TRSTUU\\\\XWYT_WfbGOQQPLRaNNBN[fr^hvkzwuxRPc{Zcs`JNOPRSSSSSSUXVQRd|{xsqlSHEEFB~RLHFY^^djigc^VNQbt|z`BCKJIIIGDHNMJO[b\\]bZR\\y~YBBEHHIBFMQNGvOJMJPZRGB@CDA==ABCCCDFLQSQOKFDCBCCDBADLRMVnLLZlwTHJIKLIFDCBA?>GaZNOJA;;>GPQLHFFGGIKKLGQ[[LKHCKVZYUPMGDFFFGILG<>GE@CDEIIJLLLLOW]_ZPLHBGFBMRZaZH9Lcc]d`THFHKLLLMMUUK?>><8899?DFGC@ABDFGIJLMNNOQQSTUVWWWXWXWWWYYXWVY\\_^_`^\\^]]^]]\\\\\\[ZZZ[__THDA<;::::;<==>>>>?@@?>HSB=BCB@>????CHIECCBDDA@@?;:;;:<>BEFNYRIJK@=KQJLRSD<>AAEJMOMMOPOOMJGDBCIKIFJXa```_[MJSOKNPRQNRE=Y~wfb^]]\\]eumdgpohec_eqj^Y\\ffiwo^k~tymcx~~ukkopkfa^]YVTTRQOMMLJFHDENCBGRH7Hequv|usvupjb[WSWcif_^_ZVVVTSSSRRMIIFCCDEGGGDCA>:61/././0235668:=>@CEDCFJKPTTTSTUWWUTK@9:8779;:63//6HWXSOPRVWUSUYZXZ[Z[ZXZZVUUUTSQSSPLIIID.(,.----,-.21**:E@ABBBB>Celsqk_]aYOOQXcdN73;>LTV`eYE96@OWY^X@9<DA@DAM[ZLHLUdonkkfcjlh]QVZTNLIIFA>=<;<>@CA?AGNI<@84CGFA@BFGEEE@:66;@>=?@>>?DKJEAAA864568878;<<DS[cnnc`db]UMJNTYVE>A=<>CC=76:??72797<JTTSPI>>KM?6:=;9;;;;=?CHJGDBA>98988;DEDJJ<BLIIKG>975:?@?@?AFC<BHJIJKIHF@966:@@???>??@CFHGDEFGJLJIIHHIF?:533258;>BA@?>>=>@A@BPbe_\\VLFFGHGDCFIF@?B>98756<?==>;9:<@EDB@>=<9:<=<9622554433347==;:>A@????BEE?:998667899:<=;:;:8:<=?AA><<<<<96786346436<?BHJJIJJKKJE<:@AAAAAGMKGCBDC=;8439@AAD@8CQJA@A@>=<>A@>=<;?@;878:;9677659BD=87521/-3:CGC=<;=?=;9987<B@:754348:<>?@@@@@@>>????????@@@@@>:8620258:::88436;@KRJA@@@BFGE@==>;5/--/..11321110-,--./00121016951244311466579@B5<:;>>6379:;;::995//7615>;7674210--2B940-+*++++++,,-.01*J[5-27:<@CA<<5/1-,:A=;FEJSNG1OE6=CDA?OWUL:;EG;41.-,--,281+3JUURVWQ]qqVS{rx]E:,*13200//0256;DE@CC:8:767533111355446779=@AA=4,+/37;?@A?3,7??>>:435534787/0KWWUSPKHEDDDDGJJIJKMNPQRRRSRRQPONMNPPPPPRRRRRTVVUVURQPONNPUXUU]`][]^]XSQRVYWQNV]]]ckptuuuuqjec`YVUSOICA@@AA@AA@?@ABCEFHHHILMMNNOPOQRRRRTUTVWVTQNKGECA?>>?ABBCDBCEHIIKKLJIIJKKLJD??>;85BX`\\[`i]FB@>=;>??><@EGMVdjjjkmhbM<AEHJLLKLGACGHJKMMMMOQRSUXXY[]_acc^YURSTX[^cimoooqonoqpjea_`a]l{kXMPQRUZ\\ZXXWd^icOUQQPLRZ`_O[^hu\\hwoqntx]\\ht_Y`XINPOPRQRRTURPSOQfxqnonjaJFFFHHxjOTNHYbdhmmkgbZOM\\pyS@JMKJJFCHMLKLPWXXYRLTM>EHHGDABNVOGtNIMFHTSLEAABBCDEEDEIMOQTSOKGA?>>?AAAADIHHgz[HYaci]NIMOMKIHHECA@==ZfJEGC>:=FOTYSGHHJKNORYhnnXOH<7BXXPOOHEGGGHILMD=ACACCCIMOW\\TMU]]]WNG@@CENXXlgOI>ARWMTWPFA?CFHEBBFJMLD?@<78=EGHND=CDDDEHHKMMMMORSTTUVWWXWXWVXYYWVY[]_`aa_^^^^^^]\\][[ZZZ[^WE;;<;<;;:;<<<==>>>?@@??@>?@ABCB?==>J[WD>??@AA????><==;<=>?@KVM@AIHHOQLLOMFA@@AEGHHJQWXRKIJKIEDGIJIJXfgge^XSQX_[PNOQNIVokjhda]f{|ula`jlc`b`^ctraZZ`el{|dWst~yxymd~x{}|qlkomid`^\\YWUTRQOMLMKFFCBPFCLZK9Utyy|yvtttnd]ZXT\\fic^`aZVTUTSRRQPLJHFCCDDEEDCBA=82/..//012445679<>@BCDEGJMQRRSSTUTSQQG;469::8666743.4BSTNNQVXVUVYZXZ[ZZYVVUTTUUSQQRRPNLJIPJ7/-,,,,*)(.2/4?DABDDCB8>ey{omgfe\\ZZ\\^`fN=@<DT_dYG;;@HQUURNA:6=?>GQdkga]^__^afdez~m`]XOGBA<88:<>>@A@=?E?75C9=KGDDBDHJGEEEA:9>?@@??>=?DLLKMOPH:77;?@;6763;MYdlhgeda]UJCFMROB=@=<=AB:65688438;6:OZTRTRPQOC:=FFB?<==<=>BIICCEC>:99878@EDILB?DGIKC5257<AA@BBCC?<BEGGIKKGA8578:@B@?>=?@ABDFFDDEGLOLKGC@@?<95579<==@AA?><:89<??ADQ]\\\\ZUOHDEIKJLLF@BD>78;;::99:<:79;>BB@>;;<=>?>;8634676543348<<77=A?>===@BCDA920377655679;;:99:<>ACA?>><;867675443027<>CGIKJJJJKJE<:?BCGF=CKIE@?CB=987755:>?=>MSHABDDBACEEBAA?=?@=75787777766:AC<787420.2:<955;<?BA<98767<;622445788;<>>>@@@>>???????@@@@@@@>=:40035798887@MTUTQICB@AA@BEDA>>92/,,-,+,++,.///0//12320252.+/52-.221/5;96568@7:C50456767787644781,43,4?<5675553239?6-,*'(-.,,++,,/011*PX,.8::>>;C=4211/+1757EEKTQ==P21.8BSVSQQ@8ILD;421/+*09@>3,+&',,:VY_zvQHuJSR@90,122132002335<EHF>21686400/0136439<72267:<>?=:513:@A@>7.2@B@?@<412215;><2-BWWVSPJGECDDEFGGGHKNNNOQRRRQPPOONNNOOOPPQRSSSTUUVVUTSQOOMNOQU]_]]\\^`^ZTQQPORRQUZ[]binqrtwvqgccb_[YWTPJEDCBAAAAA@AABCCEGGGHKMNOOPQQRSTTTTUUWWXWVUROKFDB@>>?BABCBBDFFGGGGIIIJKKJIHE@>=;8:CECEJMJECA?><>>><<?ACHS[cillb_ebSA@IJJHHHD?AFHIJLMMMLMQRTWVXZ\\]^_aded`ZX[\\_aehiiijjlmqrspjfddcaqtqcSQPPTWX[\\ZYfakbJOMPRJTgbbZdhkwZewwphtv[Wdmt[SILJLNNOQQQRSSQOU[`nwmedfcXJKPQJIidSRLFWetroomle\\TQXesyvVBINLJJFCHLMOPPQQOMMKNfl[JEGGGFFBQlu^rLHKFFMOHBABEFFEDDBFOVZ\\XOKFA@@@??@@ABDGEH_XNERO_XNJKOROKMOOLFB@>9GbTCFJH@?GNQ\\aSFJJJJHO]dhg[YWWICWRGFFA?ABCFHMQSHACDCEFJLP]fWMXb[RKGEABDKX\\Xih^ZJIIHGPPKJE>=>=;=>?AOWJ>==9>JQKJNB?CCCDFHJKMMMNQSTTUUVVWWVWWVXXXWWXZ]__`a`_^^^^^^\\\\[[[[[YVG;:;<==<<<<<<<=>>?>?AA>?@@@@BCCB=<=>LZQC??>>?>>>??DEBB@?@?>=DKNKKMQPQXZTOJFCCBADEFHKQZYTNLMMKIHHIIKLTcki_WTST[g_MKICO{Ÿxjeb]^cr{pkkllld]^`a_dste\\WVdv}sY\\su{wvwohx{~ÿ}yrommjfc_]\\ZXVTQOOLLLJDDD=PJCQ^HFp|z~|zrstj^YYZ[`fd__b`YVTSSRRQOMJIGDBCDCCCAABA>7300////01234469<<?@@?ABFLMOQRRSTQRQI>74688:89:9886523?ONMPUWWVWXYXYZZZXUSSRRRSRQRRQONNK?8<=2/.../1/288:FIDBFIIEB;Cix~tmhhlh[Y_aVKA=@::IUSD799?DCDFDDCC9:C>J[c`^^XYYPLMYZ[{s`TM>6798:<?@BB@<:DBCAB;JNECCDGIHFEFGC<<>?AA@@@>DJMR\\ba]UG:9?CFC?>87DR[fkhjjc`]VI?>BB?=>>?A=:>:9:889998748MZYYZWURA6>KIDCB???====CEBCGHD=;:877<BFHIJHB?BA;759;>AAABCBA?=??DFHJJE@845<@CCA?=>?@AACEEDCEHNQKHD?<;<<:78;=>=<@A>=<;989:<@A>>HT]]WPIEFHMNLKGGJG@;>BCA>=<6346658ADFEA==<;<;987579976643348878:<<<;:9;?CEB91257752147:=;::98;>ABA?>>;9789::8994139>@BFIKKKJJJJF=:?AAEA9>HD<=?CD?:78:7319<CJKC>BBDGHHMOKGFFFC?<9777766776678;:9;<85222589656:<>A@=;:987875422587679::<=?@>>=>??????@@@@AA@@><:854421247>R_b[QNLIC@B@@BEFC<:40.,,,+++****+/1223444431211022102221.2:::531/5F<1.//665754210242-.3.(5?:66889:=>;85412.++12.-++-.0113.[T28705><4C9.////.4638AEMVH6U=1;10Gb^VK@6=NM@950251,5DE:/-/+'('+<IYmfI:m~G;DA9214421342200447>GD6114896112469<<:;=5-066339>?B@627;@B8+,=IFA@@;42226;??:4->WXXTPIFECDDEFEEEGILNPPPRRQPOOOOONOOOONOQRSTUVVVVWWVUTPNMMNRWUQW\\\\_b`\\UQPOMOSTUWY]`ccdfjnmg`acec_\\ZXTPMJEAABBBBAABBBDEFGHILMMPQQRRSTUUUUVVVWWWXXXVPJGEBAA@?@@@@ACDDEFEDEFGIIIGFGGDA?=<;877:<;<??@@?====<=?>?CGIT`hibaYVfbNFDDDDDBBDHJIJJKMLIILNPRRTWWYWUUXWTSPMNPPRUWVVXZdnprttsqmfbac_`a`\\QNOTUTY^`Zccm~jVPJPRGTqb^ZcpkvXat||vxsVS`o]KUGFIKLMOQQQRSRPOVgt{zricb^WSUYZSLkkXPIEWd~yqonph^\\YYWW[UHDHLKKKFCKNPRURNLLKKIFMSUQGEEFFIGU{lpLGIHFGFA>FJKIEB@@?BIQWVIFJC>ADDBAA@BDEFFHOJH?BEQQJJLQUTQQSSRNE@?;A[_KGOMEAFMPR]YIJJKTTRSITW\\g`klWZI:=B><<<>@EMTWOBCEEGJJKP[ZNLUXQHEDCCDFGRYX[gldRRTPGOTMKJIB97<@@=>AID>:=CL\\aTSO@@DCBDGIJKMMMNQSTUUUVVWVVWVVXXXXXWY]__`aa`__^^^^]\\\\[[\\]ZM=;><<@?=======>>>?>?AEFEDBAACEFB=;<=>BCCA?><===>??DILLIGDA>;=EPY\\XQOU^cZOIFFFDBCDEHMSXYWXXULJKJGGHLNQ]bc^XY]Y]dOEJ:Nɿppue[_jrx}zqjlu{mgea_^a^dmriaYUhy{kXilsvuusooux~||xqmmlhfc_][YXUTQNMKKLHAAF<KLEP[J]|{ssobZYY[^ad`]^_]XUTRQQQPNLJHFCBCECAB>@BA?731100//00133357;<?@<679<@DINPRTWRME9445788:88987525;>9FLKMSUWXXXXXWXYZXURQQQPPQRTURNNOL=-,1110113?GOXSQRMDDLPNHC>CcxybR[jj_YYbcH>=BNI;6:;6688874:BCAAG@EHJT`aZ[XQRPJMLSYZezxzrb[ZQ<287:<>?AA?8?ScaUTKPLGFEDEGHHGHHE@??@ABCDBFQY\\dnqkc_VG:>EIMQSMIPUYgmiie``]SE>=>=89=<@C=57:9:97:?>9437BPVWYWQB3:LSIABC@??===<<>ACFFC?=:8879AIIGML>5679:;;>ABBBCDB@BB><CHGJJD=>>;DGGEC?==>??@BEECCEHOM><=>=>?@CB?A@:47?A>99:;<:9;>?>>ES_`ZRKGHHIHIIINQLC@EGDAA@=712544;FLGGC@>;88987659<:7565434788:;:9997648@E?7455575336:??<:988;?ABA?>=;:888<>=>@:337<?BFIKKKJJJKG?;>@@A=69@=9;@DFC;79=:426:EPJ9=DCEGHJNPNJFDDEB=78;9765665556756=@;5346777557:>>?@?><;:8753210463456679;>>>>>=>>>>???@@@AA??=>>>;851./09LXYYUONOLDAB@@BDGE<50/.,,****++))*/123651.253369731586684.-17:313/7D/1355643540,.012/*/4-)7@757899:AD@93/5:41485/-+--/03032`I582,2662<5-./..073/12=KM2CX:BC3*O_Z]O@CONFB=5/163-6FE7,+.0---*)/<HE<6@OjK<BD@7455433211225447:7002257622589<@>75620388305:89>?<84:A7*/CLFA@?93533:?=;7705WWWTNIFDCCDEDCCEFILOPPQRRQQOOPPOOOOONMMPRSTVWXXXXYYWTPOMKMRPGJV[^acb_VQPNMORSUVY\\__]]\\^^^Z\\^bedb_]ZWTQMIDBBBBBBBBBBCDEFGJMNNQRRRRSUUUUVVWVVWVXYZYVRNIFDA@??>??@@ABDDDBABEGHFEFEFGE@>><:989:;=>>??>>>>=====?A@FMUZ_gcSSipbPC>?AB@BEJMLJIJLJHGIKKLNNPPPPIKQSNLLKJJIKMNMR[dnsrsutsrpi^^ZUTir]UPOSTUV[b[\\gm{sgUQRET~hYXdldpW]jyxsqZTaqUCSHEHJKMOQQQQQQPOTbr}xskga\\YYZ\\][Qu~^LEFWf|ppqmf__`][SLKA@HLJKKEAJMPUVQLHGGFEEE?ABFEFCGMQZuonIIHHFDDEIMNJEB?=>>?@HMG>EJ?<BDDDB@@BDEFGJMJD>DLJLMNOQVWUUVWVTKB@?BU`RKQOGCFLOMSSJGGHdmVODL_^a]coh]E6:B?==>>BJQVXOB@CEHKFDNSLJOROIFCBBBDDDJWYYYeiV\\r^FMUNGKH?:?GACFB<=B>;@FVfc\\ZQAACCBDGIIKMMNPRSTUVVVVVVVWWWXXXXXWY]__`aa_______]\\\\\\\\]]UE<<@==@??>>>===>??@>>CORGAAAAEIJA;;=?ACGDA@>==;<=?@BLQQOJFA=9;BR\\b\\NKS^YRKFEFGDBBCDGKPUXZ\\\\ZNGHIFFHLPPXcWYaSRV^ZH@5_ý}hhqi_awvnmkedy|l_[^c_[_cigkkfd^_t{xg[tzkrvurqvyoŸǵ|tmkmjfeb_][YXUTQNLJILG?BIADMFOPWxyrof\\XWW[]a`[YYYWUSRRQPQPMJHGEBACDCAA=?BA@743210////0333469:=>97;<958@INPRUOC:543578:;97641124>FGGKKKPSWWWWXXXYZYVRPPPOOMMPTURMMNOMF>;92//126>GRVXVNEDMQMFB=;NfqYG==X_VVYceL@KLe`J31655689628DE>@KMRKRba\\]_[YULMORSZ[Yi~vupb`in`D667;>??@?8DZK=HTVOKHGECCEFHHHGDBA???@ABES`ekqspkhg`RE??DNUTRW\\WYfng`X]_VHA?=?B?9=@EFA979:;;9;@>7326ACAGQQLA?NXUKCEEA>=<<=>=?BDC@=?=;:;<=AGHFHE:3269;<>?ABBBBCA==C<8AHJGHC@CIJHJGDB@=969<>@CEDDFKKA48=?@@AAEJBDD:16AC<79<=>:657<DKQZ`_YRKGGGFEEEHNOJCBDE@>?>=;9998:AGFFEB?=;8666899;=<5244334569=>=;986412=D<56645643358<=<98769>@@???>;:757;>?A@:4215;AFIKLLKIIKH?9<@>=;68=<:;?CFF<69<95449DOF:<DBCEDEFGGA>=>@B@;9:8755655556525=@=73688766588;;<??=979973/--13200223457:;===>>>>>>>?@@>???>=<;9:863234>PUUXTQPNHDBA@ACEGD:1....-++++++,-..-0454/,-238=?:32:;7<?6..06832985<),.057=851++35112//1-,9=21789:;@DEA;138649<30/-.///1175dC+3531./195/11//262/+'/=6/YI:DA20PJP[UT\\aUB9610360,6EF<3./.+,,+)*.45644)WksL<CBA:565651,-/2554442111224443259::=;2/-./03:>931114;@:34<<7<IJ?<>>989419=:66:30WWWRMIFEDCCDDCCDFILNPPPQRRRQOPPPOONONKKNQQTWXY[ZZZWTRONLIKKIEIU_dbcdb\\UPLKNPQSUX\\_a`^\\ZYXX\\_beeda`^^XTOMLFEDCBBBABBBBDEGKNOOQSSRSTUUUVVWXWWXXXZ[ZZZXSLFCBBBA@?@@@ABBBCCDEEEEEDEFGFDA?=:::;<==>>=>??>>===>=>@AEILNSYVT`fcccZOIB?ADLQJDFJJKJGFFHGGIHEHIIGHLONLKKKKKKKOZgpttstusrrspok\\QTKWt]YUSTTUWZXVjmuwlWLBS~lXXee_qWZeoreqqbc{YM]PIFGIKMOQQQQQOOS]jyrnjike^\\\\^b`Y^CBJZmsegha__`aaa]UPE@HLJKJEBFIKRQNIFCCABCD>9IVMDGJLVbkb_mMJHFECFPSRMC>>=>>??ADFA@FE>>AABBA@@ADFEHMKDDCFHDJOPOPUXXWYZZZUNKJEL\\XPSPHFGJLJIIGEFE`lZSJFXab]VWZ`H>ACFDDEGMSTVVKB?BEGD;7?KQRRQMIFBA?@AABFU]fbch\\jsWCHTSJMNSVKA@EQMEEGBACFVc`]^XA@BBBDHIJLNOPRSTUUVVVVWWWXXXXXXXWWY]__```_______]]\\]^^YI>=>@@>>@BBB?<==>>??=?ILB98;?CFME=<=?BGIGC@???=:;=@CKOOJLMIC;<>AHS_[IDOQIEC@BDEDBABBDEGJTW[[YMAABDGDJTPYYJc]FINPI@<pѵxxsj[byzmdbedecb`_XTUQQW_cirjkia_^byvebmfrzxwsuvn{Žͼ}wolmlgeca_\\ZZXUTQNJGIKF<GNIEKFKMnxpja[WVX[_a\\XWVTRSRRRQPOOLIGFDCCCDBA@<?AA@75651/../0122234679;8=DFA:>>8HONA955323455:?<96410226=GKLMNPSVXXWXWWYZYTPOPQPNNOPQQROMHRVNGDE5**-.-.28>AGKGBIOG@;528BIBHC2=LQW[fgQHUR^bY@565344555<GJDDLQMG[l_W^_cbVMOTVY[]]blv|{{vmcdkqqcI46:<????>FC44HIVLJGDC@;@EDGIECABA@@?<8Jfomosqlmrsl_TKA@HG?BMSX^^caUMX]K>=A=>BHEDFILKD>;<==<>?:5226B;3>KMNSVWTNIFFFDBCB?@BCCA@?>==>>>@DED@DC?975679:>@B??@C@>=83777:>ABEGGKQTNIGEC@?;317==?DGDCHC:=CAAABBABDABJD69FHB>?<98733<IUZ]aa]WPIFGHGDBAEFFCA@@@@?>?@@@???>>=<A@>;>=87769>A?>=8311111239>=<:975335<@:5776554234657865546<?=;=??<945:<<??<::5238>DILMLKKKJF>9>@=;>99<=<<=?EG=78986658GLC:<@@ACBCCD?:=?>;<><987766755897326:;<:27>;87546779;<<8216852.,/3330.02332346:==>>=>=>>>????@>821024554224;DN[a]XUF:BGECDGHD?40../0.,,,---156/,011025315;==;54678;<3-0776469019*/.2678;:0+2<82283--/1:9,,58:==ADHJG<678856321-./.,(3::gM.1981/26>:6633334441.,0*FX839@=?LABEO^ggWE@:44564.8FIB:0,+,,,,+,,-03470QjASHBDDD=887662.-02554444555444332346666:71..+*-6@?3+,0/057536=EKJ?68>B>;;9469747:5/XWVQLIGFECBDCBBDFHKMOPPPQSSRPPPPOONNLIJMNMPSTTVWVSOMKKJIHFFGGJXffedfgbZQJJMNOQTX[^bcb_]]\\]^_beggedcc`YROOOJFDCBAA@@ABDDFHJMOOOQRSSSTUVUWYYXXYYZ[\\]^^]WRPLFA??>?@AABBCDDDCCCCBBDEFGFDB?=<;<=><<<;<@@?>>>>>==?@BEFGGJOV_a[\\hia^XLBEOMEDHJJHGGEEEEEEDDEGHIIJLMMKKJJJLO\\mutppuuolmoqpqvlTNK>cta\\SSSSRRWZhe~swraPDXvkYYegbzWXprpleps_fVR`UMDDFJLNQQPPPOPQV_mpnkhtsf_`ab``[CBLZk|fR[djlkdc`_\\ZSFCILJKIFCFIIHGGEDCB@@AA@;BNMJMOJK\\kYUnRMHECADMMIB=====>>@AC@>@A?AAAAAAAA@AEGDGQOHHIIIILOPOOTXXWXZ[[YXXWST[WOOOHGHHIIGGGHIOYglldQUaaVMKFQIGIFMRQOOPRMKNIAAACE=56=LXVONKGC@?>=>>>GRZdkc\\T_^GGSZcikjofO@>GPOKKKHECEXa`b^SB?@ABEHIJLNPQSUUUVVVVWXXXYYYXYYYWWZ]__``________^^]_``TD?B@BC?=BGGGA<=>>>?>=@FC>>??BEHB9;>?AAAA@?>?@B=9:?FMSNECJOKE<>@??DJGA@CCB?<<?CDDB@@@@@A@HSYZVI><=AD@FKJUP[sOAHGBE:rκ~d]fx|wog_\\^```\\XVVWWYf|lanlkj\\[Y^s}xhnpf^}w{y}szqlqѻö}vpllkjgeca^\\ZZXVTQMKHHLC:LSRHFEGe~vmf^[XXX[_\\WWVTSRPPPQPPONJGEDCDDCCAA?:=@AA87;82/...0221112235779<>><DA36<FB74543233326?BA<7444229BHILQUXYXWXWWY[XQMNPRPMLKJLNQQMIRQ@?:??2)*---/26656:<;>:6510008ITQB9EQX]ijOGPLUbdH44511012:EORLHEGCGem]RZch^SV]fc^Z[beeegisujddegimeM98;>>=@?:63>I@RHLHEB=5699>BBBEFB>??44Qruponosvyxqd^^Q?>>=DEAHPKU]QFNTC?BB==<ALMJKLLLA<>@AAB>72226:59FNORXVMFCAABDHMOJBABCBA?=>><>AACGKIA=?;8633436@IH>8>D>5451/23557:CJNNQSOJGFD@=<857<<;AF@8;<8=CCCDEDA>>@BJJ=<DGC@?<867;BSaca``_ZRMHEGHGC@ADC?=<<=>A@?@EE@<=>=<>@>;?B>98766:ACBA@>:42112348<>=<:8646999866665532234334444447:99;==>:59<<;<;:<=<99:<AGNOLLLLJE?:=A>=@<:<=;:;:>>:776679;ESPE><<>@ACEHGC@@?=:79<;;;966657::844459=:2:FA:85345:<985/-1442333677852333321236:;<=====>>?AAA?7,),..1430-+*/7BOVZ]R80@GGFFEC>81/..10.-----.4993-,-/18=:7;<;;:6437:74/.4764368//4279?D;/3:75=>75772-.15:3*+158;=BEDHMF::<:6454432113/79?hU>17<32:=?==;654346794.(5XF084@LQUOH8NbhiM<LVKC><50;JI?5,)*-.-,+***/3488IG1=ACEEFA9996655444554435678764112443345:9641////13.*+.--/25407FI>46=AC>9;=845557778WUSNJHGEDDCCCBBDFIKMOQOOQTSRRRQQPONNKGIKJIJLLKKMMKHGFFFGFEFHFJX`Z[_d_VTPIJMMOQUY\\_bcdca___`bceggffeddc]TNMMJHECAA@@@BCDCEHKLLMPSSSSUVUUVWYZZZYYZ]_^_abb_YQF@?>>?@A@AAA@??@BCCCDEFFFGEA?<:;=>=<<:;>?>>>>??>>>?@BCDEIORW^ZTYcggieXSYI>JNJGFHGEEDDCDDDEFGIKJKNPPNKHIOamkghkqpigklmmklqseJCBI}d[XQNORUZbhc{rehYNh~bZ]dhe}XXsk]m|iOGcSU[TNFDFHKNOOOPOMTMFOhsuttwskecdc_efSNP[bpbS]mtuqjf`[UTNCDIKIJHFEKLGFGCAFECBA@?>?BDGMSRMHP_\\]lVULDB??EC@@@@@?>??@CD@>?@ABCCCBBBBBACGDDKQPLJLOOOOOPQTVUUWXXWUWZ\\[\\`\\KJOJHIIJKJKMNRZ[amyulbYPHEADDJJHQ]\\ODDGFCGEDCEFH@EQVYZTMKGC@@BB>;:=DOQTa^M@?EScnry|qXTbR><<AMPMKEIa`cfO@@AABCEHJKLNPQSUUUVWXXXZZZ[\\ZXZ[ZXY[]__```_______^^_`b[LDDCBDE@<BKMKE@@DEDDC==BKPMLJIIJC?????><:<=>>==:;BKOOKA<@HMOKCA>==>:;=>=>@>===>?@?>??>>@@BKUWNC><;<@@><IQQltC=FFB9nǼmahz|qib]]``^^YUTWZ]cktx|{s[amrm[[S\\u{|q{h|ff}}wwxuyqZ{׽³|qnljihedc`_][ZYXTPMKHGHB=RTYLBAU{{sobZYYYX[[VSUTTSROOQQPOOLHFDCDDCDB?C;9<?@>9<@:2/.//13322110024653452162--3?EB?8668:=?=ALLG?<99765;?@=ITWXXXVUUWWTPMMNPLFCABFKPQNIMOPJ??LG3)**(*.131--.035553456?KNMPQPPYbjkVLPQZf`@33318?DEKRUQIFCDHSoo]EBZ]FQkvuh[Z`dffgghnlda^[\\]bjcJ89=>==:7=;B><JBGNI@;84027?@DJG@ABA>;Kellhiovwupi`_f_NEDKTRE56AZ]K@EG=@E@?A<6DMH;:?A;8:==AEB9333229DKMMNNJE@>>>@EMTTMC?@?<=BC@==>?ADEHMJA>>;7313569CIB9;A@7333234752:JQNNPPMIHJF8279::;?@<:835975=FHIKKHC@@CCF?8:@>;:;=;;H^jhc_[Y\\[RKJIJJHEEGIE<967:>>>>>CC=:<<<>DE=>KL=7:99<<=>>>>===;977889;>>=<;97666566666665444545689;=<;;=>===><89:;<;<;::<>=;8:?GLKKMMJE?;<??AC?<<989<<::885448?GOQPLD;9=?@BEJJKI@88;87>BA?;643467876523:=5,7KF978:9<B=321.0893/15889;;86754422345457<>====?ABCC=403:8/14.)*,+*28:@GH:,4?<::<:8863200/-.-----.1484+*158;97<@98:8655553./5612105921437<AFF;06;>>948:2./03661,-0225;BD9@QJ98=AA:888::;?HEFCF^ME;5953;>==@:52144675/,'IS:99@UcgheZIZjjkQ-6KZ[RJ7.6>>81+(*.0-+))+-/247;AozH-/568;<=<6566667788877655664/-.011223546<;620374.+++,02/../22.09;43:>?<769:9899:;;>DRRQLJHFEEEDDDCDFGIKMPPOORTTSRRRQOOOMIGHGGGGGHHHHHIIHHHGGFEGFDIONJNSULDIMKJKMNQVZ]_`adec`^^`bcdeeffffdec^WOIIJHECA@??@BCCFJKJJNQSTUWWTRSSTTX]\\XX]_^_`acecca_XLC@>??>==<=?@ADEEEEFFFFHHEA?<<===<<;<=>>>>????>>>?ACDEHHJOXWNKSbloqlfgZGKPKDFHGFFEDDCCCEGHHIIJNW[SJFL_nbW^iola`lpmmmnnnrvcG?HaoY[VPNRVZ`fk~yi_a[Wma_[beeYdfVVs~fFMl|oVXWSQIEEGKLLLMMLMOKEXtwyukhffdealtcZT\\_nj`koqtsng^UQPHCFIIIKGBISQINSGABDDCBA?=>BCEJNPNJLPRdiW\\XJA=>A@@CB@@ABBABDGEBBDCCCDDDCCCBBAACBAHPMJMOONMNOQTVTUXWROORWY[\\ab[adZMFDFHJLORSUWY`qlVZUF?=?JIJT^T>3<FJKMJCHRPIK\\gfbZQJGDCDHF?=FAAF\\eVQQD7/Cikjn{nTUqiE9=FNNEBDQcaibC:@AABCEGKKLNPQSUUVWXXXZ[[[\\\\[Y[\\ZZY[]]_aba`_____^__`a]L@AB@ACA??CIIIGEFJLIFGC@ANWWWSJGKQNCACCAA>>>?>=<:?FLOMF<9<?EJMD>?>?=<=<<=>>>>?@A????@@?>@ABHMLE??><>@?>>HORopC=DG6gľlmswxpic]Z]a_\\ZXVX[YcmljfddbmlSayk]XO\\yyryqjprr|sxP̯xrokjihedb`^[ZXWURONKFEDB@YTROB@s}xqo_X\\[YYYXUSSSSSSOORRPONMJGEEFDDD@?D:7;??<:?@:1/.//13433223358777640+//1//3?DEB@AFIMRSRRROICA?;;;<>B<EWTSVXTSTTSQONKKIA;::=AGNPNKLS\\ZMFON>0/,*/31476:;;89754679=ADCFVZNJUcfb\\_daeW7426;EZgaZXMB;ADILSotY70BHEcvupaV[bciooomgbfmfUOTX_cXB69>==?@C@E;CA=>FRC;;946:@@=???@BB@><BJNRfqnhggda^_a`WOPVVL>3@XP=:DC<AE?>DC<=B=2123359::=B?614668=CGHFDDFDCCDDEJNQPLC>AB;5=HG@=<<=AB?GNF>@>99?A><;>FIE?;;;73369:;;;ANPMOONKIGB;4/26:=@FC6047771.>NQPRUQJEBFJLF?=@>;9<@><J`khd`^\\`bYSRQNKIIHEB>8889<??@=87<>>@@>?AA=IYN<=C=9<<<@@<9:9<@AA?=9788899:9865655799889876545679<?CEEGGA>@?>=968:;<;879<@@;447;BGKNLIE?;;<;<>?><::;>?=;;<8687?FEAACB949<>?BEGHHB;;>?>BGC=;8533455431/1781)7LE59BFEB>732027<=91/3689:976777776677315;=;<<=?@AA@@?=@C<331*)1::1269<?;46?=555798643444220+++,,-,/2/+2<><606?=7777641/./2:<4-//079.3716<>?EE78>?9219:/+012002./1337<@>2;OL849FE:<<<=AGLRQVVVSCBB;:957:::;51./6557/,,2[H7;5YiiijeYW_gik`=9?Zea[I9234650++12.,++,./138;>C>3124323321455643469:;975555410049;9538<88@C91/25520/./485/-./0022106=>;86777:??@@ABCGONLJHGFFFFEEEDDFGIKOPPQQRUUSSRQQQOMKIHFEEFEFGIIIIJIIIHIGFFFDCFGCBCFEBAEHJKKLNQVZ]^^aegf`][^bcccdefffedbba[PHGFDBAA@@?@ADGHFHLQQPRUWQKLOONOU[ZXZ^aabbacefb`cbXNF@>>==>?@CEFEFFFEFFFFGIHDCA>=<<<<<=>>>????@@>>>?ABDDEFGJTWOKKUdihjebjgZRNDCKIGGFEEEDDEGHHHGIMX[SNIVi_KShoi\\]lsomnoqrqqwq`RKKcxp]XTRSUV]_fnZ_`^]\\j_YU`ceYolYkve`T]nwiOSQOSPECGKMLNOOJKSTWr~y|~korkeajiexeZPZfyypwyxxvnc^UPNECHJIHKGEQXVQ]XB@HGEFGDA?ADEEFLRQNLKEagW]\\P?<=?@@@@?@DGECCEGHFDDCDCBBBCDDEDDCDC>CKKJJKKKJKNQTUSSTPIHKOUW[Y]cmzveRC<:;BLNQQRSUWathYlvbG8=KKNWVE66COMLNG@SaTHWggcbYMFBCGKLKD?SaOPqsWFEA79LSPXVcvsZLW^``^ZWRMNNHTdnYFCA@@ACEHJKMOPRSUUVWXYZZZ[[[ZZYZ[[[Y\\]]_aaaa__``_^_`a\\J;8<=?DC@>@BBCCEHLNNHCCFDBDMY[TJDHOQJEEEECA@>=<<<?CEHJJF=999<?AC<<@AAAA??>>@@@ABDBAABB@??AABBDBA???@BB@FJQRSomH>I;Xporxypgda][\\ZYXWXZZXWX^ij`^[X[jfWdh]SO^xujp}|jlsn|yռշxyxutplkligc`]ZXWUQONLMKFCDC>ZXJPBS{oh\\Z`]YYYVUUSSQSSPPTTNMONLIGGEEGB?AD858;<<<A@930./.13222247;==989764233420.4>FGHHJNQTWUUSQOKHD@<><:ACK[USVYTSSQPONLJF>547;=@ELNOMMRY]UNI@558?GNJ?E=8IMJ>233576778:<:>NO@<Tcfgindj]748BDAIU[\\P?517;BEHnvJ39<BLlsnj`XVWX[`dje]gy}uhYRUY[[L97==>C@BEJ?H>A=?DF>:7447;<628<=>><:657=Nirhbgmnid^_dbYRPNLI;7@=78AB?AABDFFC;3/011236:<:998314;??<=CGD>@GGGGJKJLOMKHFAAD@41?LLC=87:>9>FB>?<9=HMJGGFFHIE>:;;634:=AABDHMNPNGEIF:431138?FE<216972,/@NSUYZUOKDHW[URRMHD><<98<CThkhiihe`ZUQNJIF?988:>CDCCDE@63:AA===<===FPJ@@A=;;;=A?;9635=BEE@:8664567789;:768;:87888788888:;=?AGKF>=>><;956::879?CB@?<538;>FKLKIE?::<968;=?@@@AA>;>@@??><<;989;8479<;<>B>?HJB?DHGGC<99764344321114420:G>6>GIF>7671/479>?756777666789:;;:;;:845558;:<=>?@?AB@?>=;7/-4:?>538<=AECB?;::::=81.1455882+,-...-,--3AGA70089544331/,,,.7C?1,./0;:(/67<=>=<<=BB@91-45.-01/-/..116:;;952>EG7,5A959<@AFKLLS^]kZI@BB?>=:975200114537340JY=57/Sca_^UMQVY]jiQXX\\]^cYE:9::92+-54---,--/247:<9677456554436;;97414:;;84244325<@BDB@<:>?=:=@;7754541/.024410211342./9@A><=;9:?A?BGJJJGLJIIGGFFFFEEEDFGHIMQQQQQRTTTSRSRQOLJJHEEEEEEFHHHIIIIIHHGEEEDCDDBBAAABDDDEFHKNQVXXY\\`acca[Y^accbceegggfcbca\\SIBAAA@@@?@ACBABHPROMMPMFFJKGELTVVVW[`b`acfd]TQTWSLEB@??BDDEEFGFFFFFFFFFGIIIFCAAB?<;:<==>??>?@?>>=>@@ABDFHIOWXWRPY\\OIV`b`]SNLLLIHHHGFFEDFJJIIHJMUVSRPVaMG_mbXWhrnnppqqrrqrqpnYDCa|fZXUSSP_\\]~nU^_a`\\oaRKP_beXm}w|\\\\^bduiJIIFMWPDBHNTY\\^SO^_f}{z}hm~{vknpZXc`XMXdqzvruqwzmeldXODBJLJHJGFW]]ZbbPYlQDIKGDABFFFEGOSVYQD_dW[XN@<=?>>>?ABEGFEEEFGGEDDCDFFEEEEFHJLKHFGIJJHHGIJLMPRSOKKHCDIMRV[Z[`a`aTND<;;;JTRRSTSOTbsoWTqtT=?NMOSOLLMQRNKJED\\dMH_gabaYLB@JQLGJMC>bp_^SC>A?9IWO_mZT\\cgkb[WJ[vsf^UORVUPT`WPIDAABCEHJKMNPRSUVVVWXZZY[[[[YYZ[[ZY[___``````aa_^^a`P=:?@CEIF@?AA@@ADGOTQKHDDCA>AINMFCCEIHFECBA>=<;=>>ADEFGHE=99987MVAGVRE@=@@ACC@<=@CDDCCCCAABABAA@@@@@BCD@GMWSSomLC@Gż~zyz~|mb][ZYVUVXYWURRU\\fjcYZ[Z\\]a]Zh\\TQ_vm}czwzfftnpğ}rsrsromnlhd_\\YUTTQMKJIIIFDCC8T]IMIs|nf\\[_]ZYYSSWQRQWSSVYWLMRNMLJHEFF?ADC237:<<>?<85322253/00147:=;987666456764018?FKKKKLNQSUUSQQNJFCD?757<L\\ZVUTUTQMJJJE<327:>@ADINPOMPW^\\TL<,-6;GOG?B?=INJ>344699986:C>8AMI:Jchfkreg[748@<2239EI92123;C@`mIA;8A?]qtqldSINJHWmgew{zyjTPSQPH=<=<<==DMMBH@?99;EIDINNPC97116;?@ABBCBJ^nokkqruunccjld[XTPNE<9;<=ABAAADGF@:61/2567879:7569<85=C?;=DJE>BJKHGKNJJMLGEGC>?>7/2AMLB957:9899:<98:AEGIIIIGFGIG@<:635<ACA@@FMMGAAGE?:74445;>:7657:7327BJOSXXTRPJM[babddbZJ>=;:7/6Wonmqleb]UNLKF;46<;9AGHFFFFD?<>A=54:=<;<;:==:8:=<:97666666<ABB@><::988789;><:;:7323479;>AAACCA><=?CA<;;;;;7569:66;DHD>>>;6>GGFHHFEC=8:=:677:@DFFC>;<BEFHIE=:;;;:::999::::=;<GL@:AHHEC?;99975689::975568:99>ADE@::=:32537@@:<>:665468:::;;<@A=846522789;>@@@>==:;>?8236741466319EA567788771-/4554794-.00//,+-2;BB:0/551131/-+,++,,1<<1...1<<&+.2>?>=;6=HG?74--..0//.57,+0169533/3>>:4.3:5227?@CIHGRVPdSVCBB;>DA>71./2554415958\\I03/+7Xed][WWYVSgxOP`]XY\\TD>>>><3.480**++,-/1469865553587669;<=<<;:77<:85425659AFJIEB@<<??=:98;;:887553220/145422321/3:?A@CD>:>?<<DMRPI@JHHGGGGFFFFEEEGHHKPSRQQSUUUTSSSRPOLJIGEEEDEEFFFGGHIIIHHFEEDDCBCCCBABCDCBBDKPQQRSTW]_]^`_[[^_`bceeegijjgd`^_]TIEA@@@@?@ABBADMRNKIHFCBFIEABHNQQNMTZXTVZZRHCDGHGECBBBBFFFFEEFEEEFFFFFFGHIJIDABEE?<;;<===>>>?>>=<=>?@@BDGGHQ^a\\[\\XRGAOTKNLENSLGHGGFFFEDFIIHJLMNSYUPQSUIJ^fUOZcchttqqrrrppqsuqYCGfqf^XPMN[bkx`^^^\\\\xEIEM`bc~Xi{phecjeFKHBFUWG@GQ]cgjgXZ^bojnul]fk_ck}JSwIXZQY]\\fc_]QawoqweSCCJLJIJGC\\h``dnp~YDJKHEABFIIHEIQXb\\NhcVZTMC>=?@CEDDGFFFFFFFFFECDCGMMIGFEGIJMLKKKJJJJIIKMNOQPPJDDFEEFJOSZ^_`ZJJJIKLJICJSQPRVYTQTVUMP_c`WKDQPJJKV_^YRPJMLJ[\\FOdfdgf[LBFZ[E=@F?:Pt`@8<ADA<L]^lb[UIFM[emoTQrveZTHGJLQY[YVOFABBCEHJKMNPQSTVVWWWXYYZ[[ZYZZZZYYX^aa`aa`abba`^^aXJBFMMKIHDA??@@BCBEOURNKFDC@@ABDDCCABBED@@BB@>>=@@ACEDEEGE>::69`|]akc[VTTTTROPQRQQF?BDCDEEB@BA@@ABBABDDBDIVQRmmMC:ʷ}ywz~}h_[YYWUTVXZVRSX_\\ZZXXZ[YY\\\\[U]_RQ_tg}my{ubdv~irǵƮrnpssnmmmc`]ZXVSSSQNLIGJJHECB9P^KHcunh]\\]ZXUTOQYPSV_SU[]WINTNONMIGFC=CI?,38=>>?68?:89<>;5.../2677666545523578831326?DKOQPPRSTSRQQOMKKKC93.1FXZWRQQMJHIF<317;<?@ADHLPQOOT\\]UQK>-,-2:99>DLLJG<9536;@?=@KSPNLNULHT_gvlVIC547@CCBCHPB84344>D<LZW]I7<BWpsrqp`LPRK^tln{{utdK?AHIFECA?;6@Vd]MF?:68@EKO^mwd@506AHJJKKKKMdvmhonszninsqjfc]TQMF@?@@@ABCCCEC:1035479<:777536?F>7@DA?ACFFACKJAAJNIDEFEFHE?:88516FQLB<8:::63468:=>?@BBDGFDCEHF@==98;>>>>;=B@;>DEDB?@A?:6556<:59=<;=@CFILQSONONTYZ^cdgki]QKKMNH?Rloonnf^YSNLLF;8>?85<@ABDDDDEEB>;98=><<?<868789:8565235689?BA@@?><=<:97778:;=A?6/037=ADEGHIJJHD@=>>??=<;:9856799979<===@?9?KLIGFC?;98:::8889<BCCB<9?HJGEEA<==<==<<<:98788:===;648=B@=>=;;;::;?@AA@;557841:@@@A<8>A=:;98=A=:>?:665569;;;<;<@B>76=B=:966:<==><<;:755540.,,.6:4**2:838656753-1<<7555760-.0//--/6:851.0541452-+**+*,+*1740./1<;110*08;><7;CG?860,,11-,0C>,)+/561/2337:566287/-129<?FDILKKASHB?:9<=>5//2677740550F^:13../>Qa`db]][XcsXShi_VMIC=<;>;22:8,))**,./1357895456898659>>;;=>=;;=974427<>FLMLIEB<9=<::9;;>=87877:>=84348830///027=ADEHF@?A=8?JNKE<7HHGGGGGFFFFEEFFHKNQQPQSUVWXWUTSRPNLJHGEEEEDEEEFFGHHHHHGEEEDDDCCCCBBABABBDHMPNNPUYZ\\^^^][\\]]^`bdeffgjkkjgb]\\^]WKDBA@>?@@ACCFKKGEDDCBDEEDA?AFJIEDJKGDEFEA==>>ACCBDGHEBABEGFEEEEFFFFEEFFFIJHC?ACA==;;====>==>>=<=>>??ACEEDHVdh^UWZZQJEAFLQWUIGJHHGGFFEEFEEILMNQWZUUUPDIXZONTT^rvqrrrrrrqqsusmdKDgufXTPLT[Te~ya]]\\ZXIECK\\da|Yiw}|va`r[EOKKMPQNKQU[`efgWQUYaba]YWXRFFKghES{\\L[TOWWY^JHKBQqtzsdTDCJKIJIGC]n_fqtrlmUGIIGD@@DMMMKKSZ^]GmbSYZRF>>ABJOIHJGEEEDEEFEDDCCGLKFDHIHHIKKJMLLKJJJJMQQPPOMHEEGIHGHNSVZ^^_SGGIR`]XWRNMNQV^a]XWURMRJKJIFLPKKHFNNEIOKQJH\\UFYfeeff[JCPbU>:==;;TiT=?EGJFDP\\_WKMUSKOXcijdR^aX^RJKIKTZUOQRG@CDEGHILMNPQRTVVVWWXYZZZZYZY[\\\\YWY\\_``aa`acdb_^``MBDLPNJIC>>>>=?BCBCKOGEIKHDA@BDGGFFGCADB>?CEEEFHCDDEEEEEGHA?FGSnzmcab[[[ZZZ[YWOBKcoY=>GHHGDBA@?>@BBABDEDEETPRjmJ4pȨ{upt~tf`^\\YWUUTSQSX[^ZUV[^daZ^``]YVOgSUeug|lyj_ewr|Ĺѿwmkrwqijke]ZZYWVURQONLIGHJKFCA;K_LL}~tlf^]]ZVOOMO[MWZgUTafVGPUQTNLKGFB>IF9.49@BA<2@F=>?AB:54576787677665410/24543.,++.2<GPQPPQQRSSTUROOROHC=4/6TZVQOJHIF=3148;<@ACFHJOSRPQY^WQPSA-+,466J`bUGA>;856>CBBHOSV]ZSWSF9KprM74445:HVVRJB=965459@A<IPWdbJ=McplikmeXWWSdrnwxigjW?8CNRSUPF=8D\\pzfMI702:HLMFUoy?=6BMOPONLLKG_p[Qci~}avzrkiaPEEEA>===@CCBBBC@:2/2338:;8996457=C@;?ABA@???>?@;8@IJFCABDGHF@967866BOQKE=9:;95126?FFFDCB@@BB?99AC@ABB@?>@A:4548@GGDAAEGID>;;<;54;=;>CCCDFGHJIFEHNMJOTZ^bee`XQV^^]_iqpkni[SQQPLEBED:38===>@@@?@CCABEFB==@CC>:99;:6227<855566?DFCA@><<;86666569>DC;77<AGJKIGFFDDDB>=>>==?>:9986568888548;=>?<<BFHKKF@<;9986668889;==:8=DFD>99::99:<>>>;97778:<;6245459:78;::99<?@@@?<8654337=>>?@74<A?>>>BFC<9;<:865589;=>>=;9<>=?FE@B>54899;;==<940031.,+/479610/-/3866;><81:C>6785451.-./12135420-.0465895331**+,,+.450//0:678B6)0:=:=ACD?951//1/,+3I8'(),131025455563142.1/).7@LGL_ZOMRK@DC;9775425987654632[N6::731+>TXZYUUZccY_kj]PB:<?<:;;725;7/+***,./1346:<9889<<;758<<879;;9::621118@FKNLJHGA:;?959=?BBB>97669>=:988996568:>=@GMPOKEDGA87EKFB@=AHGGGFGFFFEFGGFGILOLGJRUUWZZWUTSQNKIJHFEEEDDCCDDEFFFGFGFEEDCDDDCBBBBABBACDGGGFLX\\\\Z]aa[VW[]]_abcdfghkkkjhgb[Z\\]WLDC@@@@?@BCCDCCBBABCDCCDB>>@AA??@@>>=<=>>>??@ABDGIGB@BFGEEFFFFGGHHGFEEEHJKHB<=?>;;;<<===<<==<;<>>>@ABBBCEJTbtgOU_^TFBCHXdXLOOGHHIHGEFFDDGGIMQS\\_^VIDKSNIKLSeqooqrrrrrqqrroqtcEP{ycYZJN[ANasx^V^__S{XCCHYe^zXgw|{sX^tYGQOMMOPRTYWTUWXWTNPW[YURQNQNDB>DOARy]OZRITTXcKAEBXywpdTOIBDIJHHIGCUbhx~mXDGKIGEDBA@FMQSTTTUUS@kbQW\\XH?@BBGKHHHFEDBCCDDBBAAACCB@@DGGHGGGGKLKKKKIILOPONMMJGHJJJIILTXWTU_^NIKP]dfhbRLOSTX]ciolbTQJHDA@CLQRH;>C@HLOSIG]]Q[eb_\\VRHJ\\\\MCBBB?>HOIFHKLMJGT[MGP]ioqk^ZSKZaULP^HCORMMLIBBIECCDFHHJMMNPRSTUVWXYYZZZZZZZY[\\\\ZXZ]```aa`acdb_^`\\HCKRQNMJ@<>><<>?@@DID9<FJGDA??CKMKJOKC@>>?ACDFHIGIMHFHEGIQVQOP]qsvkqtudVSPOPRTZZTB:TrF@KJGFC?>>>@BBBDEFGHFUOSfnACλ}xsv}qgb`]YXXVTNJP[]ZSSY^_[alha_[Y`S`jeko¦qky[djt{pyȼǩ{ppntukefd_\\[[YWVURNKHFEEEGMDBA=D]P^znf`_^]WNOLL^I^^kXRgpXKSUU_MIMGG?BO@236=CC?6:PF;A=9667;?ACCBAACCBB>:71/256673-++++-2@NRQOPRUWX]ZTQPPPNNK<40GRSMIIE<20357;<>ACFHILQTQOU[XMLUS9)-422HVMIA966547>CCDFEN]c^[[ZVGThI044455<MXUQG<657677:==AMKERfbKPkqedhf[RQMKZiq|hIOe^ICLUWUXUF:Fae[`[QL;33<CDCBH`wvz~P5;KNQRTV\\VF9FN<:YoxtpjgZ?6;<<>===@DDCCBA?<62214<>:8:964467>FC??@ABCA=:;604AFDFHCBEGHHA85788<ENPPJ?8:<=>;9;GONNJHDA?AAA<9>CBBDEEFFFF=415<BGHE@??=CKKGC>727=:69?AABFHGEB?=>?@BGO[acefiaSQVK>AOfkipof]OKOJB@FH>7=B@>>><;:;?@BDHGC??ACC@<99:;9668<986545>FFCB@??=<96567778<CGC==BDFIIFDCA@??><<>????=98:9547766:;98:<==;88>FLLJFD?977523566458988:::888:;738<<=?>;98888:;:88;=:77765665328<<>>859;8658>?>>B=67;?A>:?EHIA76999649;9;=??>;88<>?B93786665689;===;88866413876:>;1++.643:=?;7<?87872011/,-./000/01/-.146688;=?:-*+),--01011252/3B=14955AIFC>62341-,-.:F-'),-)(-/12441.-28535844;GSYT]aSUXXNCFJGC<67:6::87779:7Ic::<<:630RPHHLMOUcg[ZYI91/0479:;;97774.,++*,./1236;><;9:<<;87787544455554320.19ADECBDD=9A@77>BBDDDB=7445548:768:<>DHKLKKMSUPICCD>7;GC?KROUGGGGFFFFFEGHHGHILMEAHTVWZ\\ZVSQQOMJIIGFEEDDDDCBCDDDEEEEEEDCDEDDBBCBBBBBBBBCCCIV^YST[\\UOQUUUY^a`ceghjlllkkjhb\\\\[WQMHE@?@?@AAAABBBBBBCCCBCB????>>>=>>==>>>?@@@@?ACEB>?GLKE@BFGFGHHJKJHFFGGIKNI?;<=<<;:;=<;<<<=<;<>>@ABBAACEFGH^vcVSONJHCAJY[XYUJHHHHGFFFEDEEGLQPWmzdKMNOMKLOV^_elopqqrrqrpnrpjnhUhu`]NLwO]`]cXP[\\XSy^CEIW`ZwTepy~|]_t}VHQPNLNPRTUUUTRRRVQMX_THRSJHHDDEDF9WaGKLHSY`fLADG]maRE?BBAFJJIHIG@JbWD?@DDCCB@@CGKNRUVXTOK9iaQVX[OA=?@ELKFCEG@AEIECDA?@@@?>><=ADGFEEEJNKLNMIGJMMMMLOPMIKKKKJJNRQLL]eUMPKP`ekn[GIQSTP\\rz}{iZPIEDAESRNLNWZ[WJORKHZeb_^^YLFKOY^VLLLKIE=8<DHIKOOLLTWFBb{xqskZPON[q`CIYA9IPKFB?<;@ABBDFHHKMNPPQSUWXXYYZ[ZZZZ[[[[\\\\\\ZZ]``aaaaabdb`^\\SLIOTROOLFCCBB@?==?EH@8<AA@?@@?DIIHGKGBEPXOA>@FIIGJOLPLFJMV_ceghgby|]GDAAACFORUWR@Ix|QFHEFHC@>=?ABCEFHJJJTOScm=ũ}y|oea`^\\[ZWRLKQUVTSSUXWUTPKLY^Umm\\~~t{ĸo}mTnmwvwyƴǪ}~uosrpsnhd`^]]][YXVSQLHDBACBELA@A@@SZspfbba_XQSPKbHchnYQhu]TXU[fMKPMK?HP;177CEA76IRB=>9347:=>>=?@@DGGHHFC>645779;<6/.----4DMKJIIHLKRXWUQOQPPPKIIKWSKIE;2.0357;<=?BGHHJNSSNQ[ZQORYD*+0-)07555431237=ACDAFYhgadggf_YA:=85455>MMIHE@<98888:<BIJC=CVd^T`khd_]TE>@CQgrgI4C[YNMPSSNQSOM`hL5ALUWGB?;E\\\\NNR^lku|86CHJM]pvvkG/203Ml{e\\knX::CBBB@??@BDEEB@?;53318B?989753115>GE?>AEHIJGA9328BEDJMDAGIIIC95668=GNNQOC:<;<DHFEKQPPMFCCAAABDC@ACBBBEILKH=76:?CEBA>724:BKKC>?BEHGCBBBBEJOQIA?>=>@?EQ\\`jkif\\SQQA:68OkttttnR@EE@:<DE@A@=<>@;9:;>????AAA@@@A@<:99<>=:99999646>BA>>@CC?>:76669:9<BHE=>B=>@AABA?==>?=<?CGGB=98<:35;=;9;=<;?@>=:889CNNJJHA:7743676654787887767:<:65:=??>>;:99768=>=:<??=98866851026;?<25?@<99<??>AB;9;:?C:5;=>B>5379755>@9;?>>>==<98641.1667745569;<>?>>??>932544<B>7567:51357889:7872//0/./-./0.)+.///0322239BFC=52/+*,,./0356862/69674*5BFBA;10563++05CI9:75,'&,00132/,-;GCB@<?R^bcbcaRJORWWJHKLHD9585:63567:<9bP4:;:::75dK79DJGEIVk_;79423347<@A?<950*+,-,.//1235:=<989;<:888868<;85320763/,+/7:=>?CC:;FA=?DFDBB?:767753378768;<?CEEBEHGIJGD@@@@AEF?F[`VYGGFFFFFFEEGHHHGIKICBKUXX[][XSOONKIHHGFEEEEEDBBBCCCCCCCCDCEFEEDDDCCCBBBBBCCCFRZTJGLNKGIPQLMV]^_cegiikllllljhc]XUVQECD@?@ABBBBBCCBCCCCBBBA????>>=>>>>>??>?@@????@@??DKID@ACEGGIJKMMMKKIJJIKOOH?:;<<::;<<:;;:;;;==>@@BDCCCDDFCCTZ\\SFEJHDA@AKQXVMJIHHGGFFFDDDFJOQQf\\]\\VUUSRSQTcmnlnrssrspnsqkmri^qu[[YXdlVQQOYXPQu\\CILU\\XyPenxpetzNFOLLOOONOOR[\\XUV\\XR[bUELMHFDCCCBC<[dMFAFW`oqK?DFRKDAA@CDCFIJJGJI?I{fD?BA?>?AA?@CHIHHJMSRNI<m}`QUXY[O<<AEIKGBEHFFHLGEGCBACCCA>=88EGEEEEJNKLNPLCCGJJLMNRSMIIKKKKJJJIHUf[MOKJSS`slVNTYVTcyyk^YZQHEHQZOWeptlkYMXSLIR]a[X^ZJILOSOQRRSUQF>:<AFIMOOONNICUwzme]WU]fk|rJBP@>JKGC=:;;=?AACFHIKMOPPRTVXYYY[[Z[[[\\]][[[[[[Z]`aaaa``bbb`^WLLJKROLMNMLJIFDA>?BFGD@>><:;=@AAAACEJLSaokR=;AINHDFKKHJT]lngaTJD=AO}M<9>?ABDEGIJMRYJA^~]OX^grgF=?@ABEGIJKKUORfeX˼{ma]_ab`ZUPMOOOPQRONPPQQRODTcTvk{ŷszyh`ysmyţҺ~|qlqsqpojfb_\\]^^\\YXUQMKGC@?@BDJC<@B?@V~pfdfca[VWYLdMipoYRkxb]^V_iSRRSQCOM@79=FC?9EQH@>757;<>;98530035679>>:6455667995100013@@=;;97:66>GRWVUUSSSRPMQOIE;1./1558;<=?AFJHIMQSPNY^XUUYN1,10..4988654436<@A=<OgnlkqsofYC:S_A834;LSJECCCA;88788?JQQJDA@O`_Y[_WMOO?ALORYWH<;FNLIMPRSSUVW[^UB4>P_ZECGEMi{bQII`ZLoG13:<C^x|vY:BD3:^|i><]jT>GOKIID?=?@CFGD@<72102<F@658865544:??=<AEHJMOMA66=EIKMMD@GJIIG?89::;@FKONI?>=:@GHGGJORRI=>BB@AA@@BCCBBBDGNL@:;<@B@98513:<:@IJFKQTX\\][VNHGR[SD=?ACEFBDEMIX^UNGCCD?:;6Agylkvy[AABA95:@CB>:;DEA><<>@@>=?@@@AA@A@:8;=@@;778987679<><;CHC>=;8689;;;<?C@=@A98=?@B@;:=@@@?AFKH@<::>:48BEC?<<=AED@==<:9=HMHDA=:88657<:43455567777877779:=BC?=:::975:DG?77;>>;:97:=92136;@;8@D@;99=A@@B@==:9@=23632233357767?A;<?>>>>?=7531213878:88557889:=ABB?622105;=<:;>?<62//379999972121012115?@70....11//05>AA@>=>=7-*.0/1458=A<./74312CLIA?71661-*.48AC??II:8534434558=CHJIGEPdkkjjjea][ZTXNLJGHHA75440.//4<=Hc<7899<?5<aC75;=752;VV><EC81248>AB?:8::0)+,-.//01225973147:;88876<EFA9652452/./147=BDFF<;FFEFHHGD@;778::64679:;;<;;;<:9@EEDCCDDDFHIHDBM[b]XGGGFGGGGGGGHHGGIJHDFNUWY\\^^\\WPLKHFFFGEEEEEECABABCBBBBBCDDEFFEEEDDCCBAABBCDCFLIEDDEEDFIKHFNVXY[^cfhjkkmlllljg^YZQNODCCABBBCCCCCCCCCCCBBBA@@@@?===>>>????@@@@???>>?@DGC??CEFILMNOOOPOOMMMKLNOPJ?::;;;;;;::::;;<<<>??ADDDDDEFGGCFPOGEFCCCA??CILKJIIIGFFEEFEEGIMQPYrgf[]][UPNWhngfmtsrrrqpqronopmq}zebiWWiZWQMV^ZSy\\CHNSYXRfs|xntpHDGJQSROLJLNW_]YW\\\\WXWTJGGFEECCB@A?TmlcUEJZgyxL@EEDB@ABABCBDHJJHGC>D}WA?@B?=<=?@@@BFHFCBBGHKH=sYOUWPX\\MBCEDGIBDGLGDFKKHA@BCDC@?=>?AEEEEEIMKIHHJFDCCEHIJOSSMIKLMMLKNQOQa`OHDBCB]|}ui`YU^myrbicjkZLLX^Qn}sqVXbPKMPQKHNZUONMQTQRVUYc\\E<ABACGJMPWWJ?Np}{th```eqnrtXFB?CJHDCB<78=@BDEGIKKNOOQSUVXYYZ\\\\[\\]]^^\\[[[[[[Z]acaba``bbb`[PKIHGLKJKMTWWNJJGDEFFFFD>>=;:;?DA>>@CFIPYUIB>;>FJIEB?@Tjne_WOF;78:95RpH7=?CEFFIJJKJGCN[Q=RzxbRP^ofF>@ABCEGHIISPQh^ɵxi^^afgcZSPPPNLKLLLLMV`fj^JVify}txd~x~}|ƿwptwvrnjeb_^]]^^[WVSOKHFC??>AGKIB?AB6Q}ndjkedc]Z[N`QnymWTpyc`bYahZXRWSJVOKA<CKAAAOOEB9/2:???=<<92,,+(*),14411345566664323210.14567:5-+0:FOW[^[ZXVSQNH;/--/2568;<=>?CIJHJPUTMS_\\YXYW9+1832;>?=9;:747AFE=@UinotqoliN4JdmWL83HVI@@@?>><;:767=CLRTQJ>:KVNN]jh]JCczuaOA:CR_^TJHORSQOMMLGDGFJV`VC>DED]nQLGQV9BeT<378>Ha{xiWZ\\E;KmpJ9:DICBILLLKGCAABEGIIB834643=D<137:9;DC94589:>BFHIKKE;8=DKLKIC?CIGGKICBD?89AKLKHEEC?>>>=<AKTUK?>BB@@<<@DDBAA>=@JLIA==?A?;843=EFDHSVPLPW^accebPCQ]N><@DGHHGHHH:<F>999647::89KWPUkxbLIG@88;>A@??BFJIC=<?BBBA??@CCB@DF:6=>?@;668::8666:>;8BE?:998:;><;;8:AA?AA;=AB@?>;;=@@@AADGB;:;<=958BFE@=>?ABB@>>=976;DD?;99;=:77:820245555664444457:>AC@;::9:;;?HG?;;;;;<;99;?;229::=AFJF>855:?ABA@?>98:733222123333467<?=<;;<<==85444422579<;;9777669>ACC>669437869::>>713467988:;977763245667DJG9000,+---09<76;ADFGC5+02/1443:G>,)3310;JQOD=8;?90+-00/10,0LYVWG<776:9=FIB>DGKRbc^bmkmrvofgSRNLJBBEH:470-/..4?:bO553334=1JT:<71036768:==CB4-0469;;933;B8)*+,-//12/04662..279877779BGA<<;8410004556?EHLI<;JPLIHHIGB?@@><95579;=????>==;=DGFFFDHNONLHDDIOVcgbGGGFGGGGGGFGGGGHIHGJPSV[__ad\\PJIGEDDEEEDDEDCCCBBBBCDDDCDDDDDDDCCDCCCBCBABCBDCBDEDCCDFGDABKRTNKS]bcgjihged`]_^YXSLNPEBBBBABCCCCCCCCCDCBBBBBBB@>===>>>??@@@@@@???>>>@B@??AELPNNQSRRRSQQQQPOOPSSI@<;;;;;::::::;;;<>>>?BDDDDDDGJFFIJJHECDCBCBA@CIJJJJIHHGFFFFGHKNSTdqcdbO[faXTSV`b^bmspqsolnoqppqqqqpsujeZR^Z_SLQbgY\\DFNRVYWfp~uqsmT?BNUUURMJLMKTXXXWZYSMKJIGEECCB@@?=Vu|pbVU]hzuLBFDDEEB@>@A?FKKJID<>=TXA;?@@><;<>@@@@CFFEBADELF;uTHNQIHRUL@?@@EBCENHCCNQI@?AAA@>?>?@BEDCDEINKFA>GOI@@CECEKQXWOLNNNPQW^]U[aUG?@A=\\}j`VQTXWZagpwegxoWOU_WouxlSc`KLHF?7?HNLLMNee_VSWbk[@;BDBACFHKV[NRm~ofmpkligpaJNPLG><BDBIXUF?CFFFGIKLMNOPSTTVXYZ[\\]]\\]^_^\\[[[[[Z[]bdcbb``abb]PGHHFEHIILQZ\\ZPONLJKIFEDA>=>??AGJGEDEEGKS]]QID>=ADEFEKc`RKEBDGGC?>=B:;=<?ECGIFFIJIIHHHFKV[DLvw[NRZiVA?CCCDFFGGRNR`wξ|pbafgjg`ZSPPQMKIIHHM]hYYo_MY^xȀ~zzuh~Źúzrquwupid`^^]][^]YUTRNJFDA??>@EKNN@?C9Zmhqogkl]W]R[[n}lWXsxhbd]be][TXURZVUHDKLBFHJID<0.4;>A@@>>;622/,--.0332445556766788874239==<<=;72.-/5<ER]]][ZTPG5+*-03468:;<=>AEHHJMRTNNXYYXX\\H-'346;:<:<A@=:?LQPKL^mqso__ipV<P]i]SB:JG48>@>;;<=<8579<=EOTRH>=@Lj^Fb~pdSQe|}hRNSSNHDA@CDFJNW]VI?>@DViVCFECTM<LRIA>;:6Lxsc[PG@MipW?:@<66;@ADKMJIHGGHHHJIE818?;457523687=LRF8379=BEEFE@>??==?CFFEB>?FFDJPOMJD<=GMMHFHGGIF<535<GPPIDABDC@=?CCCB??@BBEIPIA99=@B?77AGHJR\\[RLLSZ^^^giQ=CIB@CHJGIHFO`jWA=@<::99;;:97339FV`[VTL>7?DBA?@BEEFD@<=ADCA@>?ACDB@CC;8===><:9:<<97579:67<=;:9;<=>=:963=GC>??=?A@?><:;=@AAAABB=78<=;977>DE@<?@@A@?>=;7569@B?:78<@>;9764223345555423557:?BA?<;<<<=ABABB@@A=77;=;999847:99;BHID<63258;;<?@>:87664158643342037:<;866788721356741348<==<;:879<@BDE@>AA<7434687<=5.2:<:635;;8799853576668::82231//0/0588:>BFG@=4,14204302EE8)/31.2;A@>88>@=:860,*-++/DT`eOAD9>?<CJG@<@CLXlgPPminxskZQLMKC>??9650//0009E`8559997=2UI276227:;=718>B</-0466774/.384+,,-.002213689720025787899>B>;?<95/-/14433<GMLF;BU[RKIJKJGFKKE?:67;=?@?ACCBC@>?EIIJKLRXWSNHFKRV\\dktFGFFFGFFGGFGGGGGGGHILLOVZWW^]RJGECCDDDDDDDDEEDDDDBBDDEEEEFEGIIJLNKGGEDCBCDCDBBCCDCCDDDA@AFKKHHMPPRW[YSRSRPMOX]WQLHKJCCCBBABCBCCDCDDDDDDDDDDCB@>==>>>>>>>?@?@??>>?>>@???BFLNLPTUTTUUTSTUTRPOTVQJC=9:<:899:9:;<<<<==>ACCDDDDFIHFHIJIHGHFFEDFFFHJKKJJIIIGGGGGIKMQUYUEMTDQjcYZWUSUUalrmpvmfjjoroppppoqwsdYMTXbUONYhaaHDOQVYpSml|vorsjBCTVSQPLLOPHHQXXNLPJLNJFFCDBAA@A?=bri[VYczxN@DEEEHIHEEHBEKKIJF<?A>AEE@@@>=<<=?@@ACFGGFEJPRG>wTGJIEBCGIHPKP[E>EGDCBLQLDA?AB>=?@ABBDCDEEINHDBHNSLAADHFEMT[_YQOONNW^ih]^aXL@>D?PpgG@DIOI@A@FPUOOXd^VV[MYpt_ZjVNK9338CGDGHHN^T]ZRWdeN8;BCBABDC@ENYl~~oXHVpywobbU::>FJGABBDNbqoe[MFGHIKMNPPPRSTUXYZ[\\^^]^^_^\\[[[[Z[[]adcba`_`bb[G>?@@?>BGGLUXYPPQNMJFCBA?==>@AENUQNMNNJHMQRSNH@>ABDFOYWGFFGHGGGEA>:;?@>ACCDGHFEGGFEEEHGGGOWKEjq[IP^cK?CDDDDDEFQNTXê{ugblqkgd_YRPRTOJGEEAIR\\NEp{[at~˷ttmɺɸ|pmqtqkiea_]^\\[[\\YUQPMJGDC@?@??@HPND>?:_}pjromljZUcYXeq|hYYrynbaaec^YT[X[]XTJLONIHFDD=/,7>>@BBC><;9841/456799799::::;<=;<<<;99:;<<<<;<;<:871+-2EW[ZYTRQH7.0144689:;;=@BDFIJMNMMPUVUUXV:(2;<9444@FDDGNSTSQUp{vt]@BZk`FST]PDBC@A@HG:799<=<8678:89>BGKMCJs~[LTgpiesqVMQQMJFEFFDEGKZ\\MHD?FOTWF><?CMVLJGB=886Cbu\\UPD=@@>;=@=::=@BCGIHGFEEEFEFFC6/6=;8533454426FTOB@BBFIIEB?:;>@@A@;<?CB??EGEHOQPMHEGNPMJGGGGLI:344:FMMHFCBFDB@BCABB>?IPNILQNE=<>?>><;BEEFHMRONSUU[dgg^H7798;GQOGGFFRdxoH?IHDEEC=<;;9759BFHT]WF85;>@@>?ACA<>@@@CEE?>@@ABCBA?=<<===>=<<=>><::;856::9:;<;;:::9516@B;:===<;==<:89<@BA@?BB=78<=<976;AB?<@A@AA@>=;879=@B@<98;@?<:7642224433788899=@CA@CEBA??@A@?==A?==;56;=;8547;;968<<<=;732477546<>;:88644357532343018;98535665643467974645:=>=;;:9;>@ADHHIHB?;2048988:810565425;;9899977887774214548@C>9668>FIFEGG:.//231/122.<KH2022.-332>@@CC=9;83537265>FRYPJR<A@@CC<9877?EaiRDgjr}qfUOSMC;97:9321//-.2[C/;IOOTSF5]I8;7468::<:9<=>5002454442..131,,,-./013479:<<963/26;;::;<;99=>;7412232119BDDEFMYZRLJJKKHJTTKD?:<???@??ACEEC=>FJKQUVVZ[XPJLOQ\\nqvFFFFFFFFFFGGGGGGGGGGFEHMNHDPZTIECBBDDDDDDCDDCCCCCBBDDFFGINORSSUVWRNKGEDDDDDCBBCBCCCBBAAACEHLRVSICEFGGFFGIIIKQVUROMJKE@BBABBBCCCDDDDDEEEEFFEEDA?>==>>>>>?????????@?>??@?ADDFMSSRTUVWVVVVVUSPQUVSK@;:9889877:<<<<<==>@BCDDDEGIIHIJJKKKKJIEEOTPKKKLLKKJJHGHHHIKMPT[\\G9B@Nec[a_TPPQamlgnqebgdjpoooppqqstjq^NIQcUROSYgeMCLQWXnQusx{tmspkJETWQOONPRQKO[\\VNIHJ^mfSEBDB@@AA?<htmVNQ^zyQBDDACLRSQQ\\XIFKKIGC?BA@BB@@@?=<<<>??AGLJIIIOQQIA{VFGEEDDBGJVqi=BBBABCHPJC@@@>>?@ABBCCEEDFJFBDJLONCEIOOLRZahdVOQQQ[bnkfeaYOLB@?BKJB>@CDBB@>?<;>EHU\\OMRF?`xj[jlOVL>LOIFIFFFKQLCU]\\\\]XC8>CCBAABB=:CcyugRB=C^v}n]\\\\UVROLGDA@BCKatthOFGGIKLOQPQQTVVXYZ[]^^^_^_^\\\\[[[\\\\[]adcb`^`aa_UF==>CGINOLKTSOHKLKKGDA@?<<=?AABNZWURPMKROJNONLEAAACKXXPJKPTPJFEFCA>>ABAACEDEGGDEDCCBAABEEKKPNFd{XIVcZFBDCDDEEFQPLhϵvofkzykca^YRPTVQJE@CFIV_aXpv}°ĴpstĻǸvmoutjefc]]]\\[ZYYVROMJGECA@?@?><DJOH@<8_rjqpljcWUiaTiv|dYZozta_egb_XT^[c_[TMLQTNKHEA2*6DE@@ADD@<;<=73279;>@@?>??@@BB@A?>???=?IG@<<;==<=??><=903NZXXUUVSL?50245799::=@?@EHHJLLMORSRRU[M;HHA8/16EJHKPTTRRSTsw]4/OfgPW[[YHCI;BPO<1589;=;87646;;9;ANUPhrcTII^qk_vlWMPQOMMKIHHDFCI\\YFFI?JUPWbUCDUWOSF?>;<75Oulc`SD=BHFD@@?>>@CCDFHFEDEDDDCDB7/5;:?>?>;74304EQMIPQLJLLF:69CFABEA729AB@@EHGFKOPMJJLLLKKIFGFD>3/35:GOKIGDBDFECDC?@B?=BKOPOQRLC>@>;=BCCCCA==FLPW]YZdmcM>87755DTSK@>EUmsN=GKGKKA>=;;:8::<@FMQJ>5/35:>>>?@@?BDCCEGHFDBABBCCB@???====<;<=>>>>@?96:<;;<;9653578559;75;>>=;:;<:866<ABB?=BE=78:;;:768;=;;?AAAB@?>=;;==><:;;:;??=:86421246129<<<==AFE;>FKLHB@BC?=9<?>::877:><833:?=:89:97655569<=9547:9877522322442245448988645652464568::;:438=?>;;<;=?AAEMPNGAA@835:::68;3/0/0214;;:89::9::98997554317DNKEBACGKLMOPK;02421.--/3/2CM?322-.611GSLLSE1036@D?4337<=?N`]?<?@?=92/--02FXWEUhstdYVWO=579==:754011E`4>OX]]hfI7UWNG<699;:<;<9=;.024443311.-032.-,---/1346;<:::;:106>?=<;:647<@?;75532101454:IRSSRMKNNMJHJSTLEA::<<;<=;:>FHD<=DCFT`[SY]XPKJGIc~FFFEFFFFFGFGIGFFGGGGEBDFDAAHPOIEDCDDEEEEDEGGGHGHECBDEGMNOQWWVUUUWUQNJFEDDEEDBBBBCCCCCBBEKPSW[^]UKGB@ACFHHHILNPRSQRSRMECCBCCCDDDEDEEEFFFFGGGGFDA@>==>>>>>????????@???@@@@?CLSTRPUYXWWYYWVXVSRWZXPGB>7799887:<<<<===>>?BCDEEGHHIJKKKKLLMKHFJW[YVMKLKJJJHHGHHHIKORW^J=DGO`_[baWQUXajf`\\ZY`d``gmnnoppqssnml^NPZLKRPGWyiYONSYYpVsvkduhmug_KFQUROMNPPM[lp`TMEAPl|w^EBCB@@AB@=jtnTGPg~WJLC>BTYVVS`hXGILJGD??BBAABBBA?????@@BLPNLKKQPNGCTFFEEEKKLHDSoU?@AAA=CQQLGCA@>@BBBBBCEFFGGECDJMSQOOIU_OOYckp`RQWYU^hflia[Q[ZGBA?ABCBA@DBAAAA@AHKJSQGUYJKht]XiUGXRj}nPDEDFFHMD<IWWYRF><@BBAABEF@8GiveNA>ABF`tm`ejgcf_LEECDEEDNbiaMFGIKMMPPQRSTVWYZ\\\\]__``_`_^\\\\\\\\\\\\[\\`cca`__``^[XNGHPZjpnmonlUD?BBCCA@>>=;<>@@AMXWVSHCMTLFKMNLKEB?COYUPKNW\\WOIHIECAAABABEECDEGFEDCBB@>?BESSGPPG^mFO[cQEDEEFFFDQPHǨznou~yja`]XQQWYRKGDIUT`szfrlr{nsxȿzqoswpged]Z[[YYXVUSOLJGECCB@ABA@=<DNGAD@asotnng_VWj^Ulyyb\\[kzub`gha`XS`[e`[SMKTYQMGH@39IIB@AEFE>==>?6348;>DEDCBCCCEGECB@AAAA?AMPJEBAA=<=?>=;?DCCQZYXUUVUUQD:64688:99<?>@EHGHKLLOQRQRRZ]QMQB6/?FJMOOQRPOPRN[zm7(LliT]gkl_IH=CQUIGJB;>?<97637BDEJLOQO]kG>IHeztukZbhZZYRS_YKBFHCG?J]WAFI@KOBUkWJL_`ONNAM`U;6Da{vsrdNGONPIDC@@?@CAADEEEDCBCBBCB;=C=;?EFE?83426GTOKTXPLOPF93<ILGCEB969AABCEHGGIMNJGJMKJNMJFGGB:216;AKROMIFDDEDCEC?CC=:;DNRQRUPD??>;=CECBB>::@MRW_a\\\\YM@:::;8;MXTPIIPXh{qTCEHGHIC>><;:8::@IKD@:300=?::=?@AABEFDEFGHIHDABBCCDFHGC=;;:99:;<==>>;879:;<=:5545688788879=??=;:;;:767<ACA=:AE>:987997666559;?AADA?>=<;<=978<@AC@?<;87632257329;====AB96;DHKJBA@A?=:=A>:89::<>:634;>=>>;;<<86:=:;==;7337:9654222135863679:648:87553257567889;:648<?>;<==>@?>BJPMB>?@;57<<845:41..0247;:999::;=<;=?<7561--5=BCGOPLHEHPVSI;76875333130.7EG:31..23;OXSX\\H439:COE603595,Cie?8>??A=3.-.026BH?>We}oWZRPN919;:;<;;<665bL8OXU\\ivmN:?U[TLD=;;:<F<4:;434564200/..032-,+---/1248<;637==616>?=<;9536=@=8633210010--7JUUQPOORQMGIMNOJEA;8:;::;;;;>AA;<;4:L^\\XYZWOHCCMhztppFFFFFFFFGGGGIHGGFGGGEB@BBBEGGIIGFDEFGGHIJKORTVUTPFEEEFIIKOUUUVVUTTRPMIGFFEECAAAABCEFFGGLSXY[\\]^^[TNGBABDGGHKMNPSSRSVUPIEBDEEFFFGFGGGGIIIIIIIIFEB@?>=>>>>>????????????@@@@HPQOPSW[ZXZ\\[YZYWVYYZ[VMHB:9::987:<<<<=<<==<?BDEFGGGHIJJIIJLNMKJGN[d`OHJKIIIHHHHHGHJLPT[SGSXRW[]^^\\Z_dab__acd``[X]gjkmoqqpqoqrpiaXLEKOJJ{m]YUT[[n[pyeVt_rvPNEEOUVMJJOP\\osi]UMISh{u[FBBBAABA@>fujWNO_xmc\\HAJVTPORY_[QKJKICBCDGGEDDDDEEDCBBBCMRRRQOPMKEF|ODEDEHQPMMG?8G\\PAABA@?ITZ_UHDBDFCBAACEEEMLGDDDGQ]YXWMXfWKNYgql\\SZdYV[Zmrb[S[eWOMHECABA@AA@?>??BMKAJdhossb\\iYXXEDVYjFBCEIFDJCDQUMME>@BBA@@BEIH?9MigOCHNE85KiqorjPH]^JBCGKNOMNYYPJGHJLNOPPRRTUVXZ[\\\\]_`aba`_]\\\\\\\\]][[_bba`_``]YRNNMIMOW[`honsmD3:<>AA@?>===?@@BINOURCDRWTKGGHIKIC>BJOJKQTVWXURPOJEBAABBDFFCACGKHDCCBBAAAEDfcHMNCZWERa^MFHHHGGFRLSԷrkv{njd`\\VQUZYQKHNRb^ey~d{quyuzpprvried_YY[YWVVTSQMIGFECDEBBGGIF8>OF?TKj|uxylwgaV]jRYrysef^hzvc`efbaWSb[caYVMJ[\\XRJNEBNPG@BLPJ<=>>B>757;>DLNJHFGGHKNKFFDDDCCABHPSRPMD?;<?AJIBHRRUYYXUTUVVVTNE=7:89:;<>>?CFGHLLJNQQRTPPXWISB36PVORRPOONOPPNEScnpJ@^vUC`jme^VUFANdmfWHACA?=;:8=DILLLKMKI]vr^hlwp}zhXO]}o`ZbhZE?BHNRLM_XJGF?FG?RXMSPTSLBWMJiM4/7`|macZHKVTSRKD@>AAA@AB@BDDBABBCCCFLLB;<;=?=9766<KVSOUXSNKGB;>FOUPDC@ADDCBDEGFGGHKGBAFJIKPPIEGIIB<:>GKKPSQMLNMF>CGEEHC<53=IPOSWWN>=A>?CFEDDCBAFPUTU\\a\\H<=??=:=EPZZT]e^MFV[QIFDEBBEA?=;:9=GXa\\N?601>PI:=EFCBCEDBCEFGIKLE??@@CGKLKD<9<<9888998877766:;::967799:99999::;==<::9:::;<?BB?;8=C=;<=?=967642479>BDCA??A>;9<=AEEDEJE>;:99;:545798:;<;;9:6/1;?>FGB>;;<@CGHA<:<>CA@;658>?>@?>>?@>;?@98;876325887642344578538:>>617<9733236856677788769<?@?>?>?><;:AEA879=;8;?A5058741036=<;999998:=??B@:422/,0;>73;JSNFFJMJD<6259<<=AA73322;DB920..8FPU\\bQ75=E?FRL;427>;07SZ?8<@DA>?;8766:;:75>Jae[VBBD4/596566;=91F_38HKUev|pQ?FBKTUTF<=8<RH*6>@668871./0/./1/-,,,,.02358<;745:;857:<;=><;78:;73422100///..3?NVVTVUJA@DLPMKJEBBBA@@>;=@=335583,1@U[WX[XOIJQ]ccXTcGFFFFFGGGGGHHHHHGGGFECB@ADFEEGGGFEGGHJLNOQVZ\\]]\\YOHFFDBBFOUVVVVVUUUSPMJIHFECAAAACDGIJJKNQTW\\\\[\\^][YSHA?ADEEFHJKLLKJNRNIECDEDFGGHHHHHIJKKKKKKLKIEB@?>>>>>????????????@??ACGGEHPX\\[[]`\\X[]YX\\]ZZ][SKE<:;;:879::;;;<<<=>=@CDEFGGHHIIHGIKMPPOKINZ`PDKLGFHHHHHHIJIJLPZXSa_KKZ_X\\cbbba`Z`s{r^QKJT[_cefiooqmpruuoh`NDJITbRRPT[\\jYp}s\\}q`}kDF@DNYZMIIOaq{t^TTYetv_LECABBCCA@?dt_KKIG_~vo_HERVQRVY[[ZVPMLNKFEGJIFEEFHJJHFDCDCHORUVTQIFCJxJECB>M\\QDFIGC=:>ABDCBAEFNZSEBDRRDA?ADHEER[QCDDCJRTTVWemfUJMXcqn^Ugg```orf\\UOX\\[[PFBAAAA??><:==;HJAG_wqbg^OW\\\\K@XnhUB@BLPGDFAUibNFECCBA><=AGLIBFXbVFMgylSCJboj^J:AJOJBCIPRUTSZ^VOGHJLNOPPQRSTUWY[]]^`aceca_]\\\\\\]^_\\\\_cca]]_`[NMC=FA><989?GFE^T89=>>?@?=>>>??@BBDHJFBMQQVSJDBBEFEDCDDDGNTQPW][VSOGBBBBDDCC@?ELPICCDCCCDFE@McLHLLZHKWcWIHIHGGHSJsƯ|rvyqlf_ZTQY_ZQKKOTirh¹zykwurkqvzmegf]WXYXVRRPPMIEDDDCEMMEJSPLECPK=ONg{|yymd_hjM]womipbe{wd_decbWRf\\cbXXLH`_bVMWPMTKHGHOH><DA@F:78=AB=<;:<BGJMPUSLJKKJFFDDINSUVTFA==?AP_a^ZRSXZXVTUWXWXUSLF=88;====>@DFGIJHKNPRVRLNXQO:0<TRJTUQONMNQPTJFF>YechnI8QVL9;PdRFUijSCCGE@>=<<;:>JNMKIC?CB>[}uwh~~bUQLV}m]]_VLGFFIY\\TO\\ZUIA=ELJVTJ[ZTJFAOUEM<2/O}zza@<B@DOTUTJ<8=CC@@B@;>CDA?AACCDGIE?<966:<>=<<>FMNQY[UI>::<GNPTSF;<FNKCCEGIEFGGHD96=CGIIGFEFJID@BIPPIMTQNMOPG9:EKLIC;6:@CHOUWXWKDJIBCHGFGJNPTUUPINaiS<=BB@@BCH[e[lyjJ8?KPNJD?=?BAA@=99G^osiU=567AJB;GNJEDFGC@BDFHJLJA9;<>@DGGGC>>DE?9::;:9866557998::77768:?@?>95445789989;=@ABCA<8449;;<@D?86531159>BCDCBAAC@>=<BJKGA@AA=99:<@>9767=>==<:963114;>=AEB9327>ENOH?=@CFEB=:9=@A@?>??@ADC?<78><8644447:964577774038;=?;69:52000489666655668:;=?BCDA@A=9757962248;<@CE?8;<;7426:??;89:987:=@A@<3.--.17=>;77:>@BKME:64359;==?AA;448989?@82/.39DP]YA6?GKBJSO=338?;628@=8:>@8CTSOC;=C?<=:55=et\\iN;:91..020/04423^C-349ZojrrPA_G9FPQG?@6.NX2:BA=:<<<7/.00///-,,--,-02358<<;:7568:8668>BA?;975423320/.//00.,1>NULED7.4DQQJHIHGKLIGHF<7<@83100/..7ITW^^TMOW_f`QFFXGGGFFGGGGHHGHHHHHGFFFECBBEEEEEFFEEEGHJLNOQVY\\\\\\][VOGDDDDGOVYWWVUUUURPONKIHFCA@ACCEGIJJJLQTWZ]^^^\\[\\ZRJEBBCCCDFDCCDFGGEDDDEGGGHHIIIJJJLMMMNNOOMKIECA>>>>>>??>???????@@@@@BC?=DT_[W[c`TR\\\\X[_^[[^^ZPF>;=;988899::;;<==>>>@BDEEFGGHHGFFGKLNPOKHLRJBD@=@DEHIGILKHHJLNV_g^A?\\gZ[df]U[^Z[fqfM@?EKLWdcVZlqolwqtspnphYHBc[JILTY\\eUp|g[lcBDCIUb[PMJLgwwj]WWh~ugZMFDBCCBCCB@@jlUHIDE`tcRHMTUW_efb^[WSNJLLHEEFFFFJMNLIGHIGEDBHTSTVOGEAL}JDIIGNXL@AFEEDAAA@?>>AOPIEDEFN^^SE@@ENLCQkdE<?=9=@CKWouqeZSQUjwkR[lffdhjec\\NKSSTPFDCBBA?@=;>A>;BE><G^WIA??Nf\\KDYh^u`GD?AKLFACA]tgPHGD??A?<=?EKMO\\giddp}q]WZWOKJMMGJQHCLSZafjp{}aHHJLNQRRQSSSTVX[^^_`cefdba_]]]]^_^]_bcbb^[XWHgM9C<=??>;>>9@MD<=>>=<=?@@@@?@@>AGJHPY]fql]OFEGFFFECABFMTOHP\\^YWTKCDDDDDB@=?GOOIDEFFEE@B@B?kZLMNXNIP]^LFGHGIJUGӷuyyyxmd^[TR[`ZRLI[caqjqplzlit{uffjdZUVVUSONLLIGDFFFFBFTQ@FWQMNVTE?J[wy|gbjlVXhhkpvhh|yjacghe\\Te^aaYVKMZ[d\\R[UUPHTIHF?ENEGG<;==@A9,&)/1/6?HJKJHGGHGEHLKNPQQQPGB@DA?H^lg]VUXXXVTSUWYXTSRRMD>;;AA<9;?CEFHIJJLOTTMJSYP=;O]SPZ]YSNOOMQSTMH1>Ycir[=340-/Eh\\T[XE55AFB=;::;9;ERTNG@8>E9B}karXs|aZaZX|lnc[\\RHJMPMP]\\SPTOQJEEWg^]ZJ]keNDFDXJ?C@?y}|zuv_7/<><?DKL@319?@CHIE@BEEB@BAAAA??<<>=:<>ABCCB@BILP[_S@6765?NPONE8:IQJEDDDEBAFKPM:1356778>CDFFA>EKMJEKTPKGGIE94>FEA><<@@?@NVY[YPMTQEEMLJKOUY`]PJHH\\thG=CDDHJC@Wmgt{aE=@DJMLC:;?@BBC@;7CWer`C5464<?>DPLHFEFECBCEFFHIE;58:<=?@CFECDFGE?<?AB@?;6468778:;:8779<>AEA7344546;<99:=@A@><974358:;;;:76434437=@@AB>>@ABCBACFD@<;9:::;;<>=;867::<>=:9756:;=@?@B=21124=HMMIGFFGFBA@@><>A?=>@A?DE=65<DFA848978;;86799:854666:?@;884/.135;:67787779>BCBBFCGCBA=986665415<DFFFFE@>>>:758>>=?@=8668<?=:750-,*-8=7<CA>=2,5@B9458<CE?<<<:7547<=617?;422//9DGBFTZOIDNRF415;?71138=<=836LZ^ZE?GFC?=:451Fpiab@99531-)*/.+--,F^4.1+5]ihuxpY[YF9;<;==3%:`F@GEDB??BC;2/00110-,--,,/1369;<=<844<@A;669>=<<:8896420/.///00/026AG<10--7GPOHEFMQQOMJHIB22@E=740-./18FV\\VNMPV`e`SMS[GGFFFFGGHHHHHHHHHGGFFFECCEDEDDEEDCDFGHHIKNSX\\]\\[ZXUNGDCCELV[YVUUUUTRPOPMJIFB@ABBCDEFHHHMRUVY\\ab_][ZZXUOHCBBCCBAA@CEFDCEGIKMMLLLLLLLMMNOOPPPQPONLIDB@>>==>>>>??>????@@AA@BB><FZ^QPZ\\QJPXWU[_][]``_[QB;<;988:::99:;;<=??>>?CGEEGGHHGGDDGJKMPOLJKHC>758>DGLKIMKIIIIHQ^bP=Mdf\\PKW]WZ\\YZ`ZKGLJGGO[a`YV[\\jfxonsqjlpnYStyS@@JRX\\aSm|zw{eVVACJP[_TNIGGRildmmflogXNJGEDBDDDDCC?@vrYHHMZspb[Xd`W]jlga_]WPJFEEGFDCCEGLSPHFEHLKHF@^w^Z[NFE@NNCHRcbNACCBBBBDB@@>AILU`TDEKXeji^JAAFPNCRtw_E<?FC@FJN`jfbbaZVcphSPjlcYYgca^VOJDAEFCDCBA?@==IPS^aZHB?BFHKXSTj^HENKLJGIH@=?CDCC;Mfg[IDB=?C@==>CJNPU\\o{ojcYX`_RKFHTQP[it|kHIKLNQRRRTUUUVX\\_``adffddcb`___`_^\\^dcc{vQJūD=>>ABB?;=<7;@=<;::9=ACCB@@A@?BHPZZ`tveTLMLHGGGECAGOSMEL[^[YTLFEEEEGFC@AIPPLGGHGEGFBHCBJh[PJTRPNU^SHEGGHMQOϱ|vztsnke^YTU^_ZTQJ`}b{ǰˬ`~h{eȹ|swyvnpwtf^ac]VUUSQONLIGEDBCEFEDANcR<NYJPeXLANXgzgben[UYZsuzkl~|qc^kngbXda`b[SPSQX_dURS\\NO_FDHPYPHJHAFB;:740,2;9023456555357;AIMMLMLHCGHDFBJV\\]ZXVXYVVVVTUWZ[VRRTVTMC;<A?8:=ADDGJIIIKNSSMJQSKETd`__]XPMQOFNVZYT:1FUcsqY;217;Op`NI@76;ACB?<954:IXULB<<BQSCGbiwg[aIalc__Vq~TYie`aVEFOWOS_ZRQSILOQUmy`T_[_ruSCJDRVBDGLzqcS=:A?98:AC:16<;;>CGKKJIIGEBAAA@><=@A@ABCBCEEDCGOTV^_Q?842.2BLLJD;:GPIEDDB@>COYXSQF80/113;DDEJHCGID?@KSSMD===86;<86:@CEBA@NY`b^TNTTHDMVXUPNXjfOJOO[pkMCMMJJLGBPir~tL:=;:AEC=8:=?@?<:7778DcP4585:HEFLLHEFGC??CGIGB@BA:6:=?>?>BIGCBBBDB<?DEDC;89768:88<?>;>DC=>DA::=>>:9;<:99:<<:7689999999768:;:;=;669;>AA;9>AABDDA=:9::;:99<<;;::887558==:87:=>;9<@A>943579:@FIHEDBCDCBB?<8:??;<ADBDE?<=BEIF927??:9::99:::::<<859?=52:920479>;6789997;BDEDCGDCBAAC?::;;=<56@JICBDD???A=98;>><?A?6118??9521//*&3C>9FK>7DB3-15249?EJIC><;9402::61046544566;=32TplQEERN9,29==8225;AA=1.9?DNI78@??>856;68XkhK679753/-19;1++3ZF0/4-3^iz~y{X]Y@&,0440*-RXDIIHF:AED?4/12452-,--,,/148:;<<<;:;=@BB<8789;=<<<9642134542358<<<=;720/5?JNLIHKUZTOOJFJG61?HDA?6-+,/49BGGKOHN]^]\\Y]`GFEFGGGIIHHHHHHHGGGGFFECCDDDDCDEDCDFFFFFIOU\\^]\\[ZXUSMGA>DOWWTUUTUUTROPPNLLHB@@AABBCDFFGMRUVY^cc`^]ZZZXSKDBBABBA@@ABDEEGILNPPOOOPOOOPQQQRRSSRRQROJFDB@?>>??>?@?>???>>@AABBA@?IVREGOJADPRLNY_]\\`cbcc_R?9;;::::;:999:<=>?>>>AEEEGGHHJLLFEIIKNQRPOOLIE@>>AFJKJKKJJJIHKSTKN_ec`M<J]`\\UUYVNJNSQMS]_]\\c_NOe_xpdqulacghc]=;BLPX\\_Slz}zgZjnKEINSZTHFDCBAQcqzpbWMIGFEDDCCDDDEDC@DwyaKIVixsmor[Xdc^^]XQKGEBACGHFEDFJSK?EGIKLG@F|m\\MGEAOOEGC`}hC=CBABBCBBHQUZZQOHFIM\\gieTBCDGMKJ[r}v[>=LMIKMKOUTPMW\\[bdb]TgeOFIW^[UQQKMOH@?@@A@@A?ASfow||snO9GRgjVp_AAGB@?CIJC<:;?@B<APY\\M?@>>>?>=?EJKJIMizulgfcSC?CLZ``oyLIKMOQSTTTUVVWZ]_`abdffeeedcaabab_]^cdaqڱdx?@BAAA?<=>:79;<<>BILEADDDB@?>@GQTMRdg`\\UPLJMNJGGEBBGLOMHNZYPLHFGGFFGIIGCCJOMJHHHHGFIJQOI@i~[_KL[RJPX]OGHHHQGnȲ}zlfje\\YWY^_[XYNYpŮòuYxjjʹƱmkpoptvpdYXZYVTUSPNLKHFDCB@?CHEDDJ_fSN`[JW_WQYowxmklklc`\\WpwqpvcXpsih\\eg_bZTSWMW]cRNU[R[[KLVWSOLJHC>831220--10/-+,/200-))*.17@CBEJA:ESQ=;EQLSPFLZ[TSUXXY\\\\^\\ZXUUVVSKA====;>CCEHHHHIKQUQHISVEBUcc_PFDJNIGTbifW<4IXcjsrJ21:C`~_915<;<<>@@>811<OUOIFGLOTWN>77cfN>FS^`WRw{v_]bVBESXOW]YOSI<@K[dvlF?\\kbp{YDHCF\\KACH{|{ZHCABA>=>?@82=HG?67AKPQPNJFB>>>AB?@CCCFECCCCDDDGNTY^YNB942/-4CLGA=;?HHFDCBA>ESXJ>>G@63567<BCFNOIGDA;;HSTPD85789;;627BGGGFHN[db^]XSSL@G_l`KI`vhNMUUW_YJJTSMIGHLIPjw`F=>78@?=;99;?>;876981:YK94=JRZJEJILPMJ@:<BGHD?<>?>?ADCBAACGD?AA?CD>>@?<98<=98=><;<=?ACCD?<>?<=?BB?=:9777777557;=>>;9679<=<<<>>>=<<;?DC=;>@@ABB<447:=@>969999;<;:989;ACA<9;==858;989999;>?>AFEC@<=AD@<8769=?<:<ELIGEBBA@CA834<?>=<<=:7789;>><:;;4,-79536;@EA888:998=>><<;KF>??BD@?@ABDC:49DA>@A@?@CD@<9:9997762/19?;45970-,-?F9?QQ:(6NL;337=@EGGJE@<;=>65;3-.570/37777::45QniVGGUH1-6;99:;531;<4/77+0:6124447767883>XP537;><;8?LQRC1-HW4-1:3:egt{ye\\[M)*/..23-B]FFHHE9CF<94113563-,+,+-/147:=>>>???>?ACA;::;<=>>;7668;<<<;:9:;<=?>976204>ILIMTTY]WOJIIKH:19ACIG7,+.6C@87<GH>EPPROJJXHGFFGGGIIIIIIIIJIHHHFEDDDEEDDDEEEEEFEEFFHMW[YYZ\\[XTRNIB=BNVSPTWWWUURPONMNOJDA@@AAABDEEGMRTWZ^ceb`^[ZXTOICBBAABAA@@@AAABDFHKNOPPPQPPQQSTSTTTSSSTSNIGDCA?????@@@????>>?ABABAABFGEAAC@?EOMCI[`]]beeccebTB9;<<;;;;:98:<=>>=>>?AEGGGHHGLUNEFHHLPQQRRSSQOMIINPJIJKKJKKJIKJRdkbaf[KL\\eZHLUQKU_[OO]fc^YTZNZd^~p[s}sighijM<CJSOY\\^Uiyxm\\g_RPUTRSLDB@???CN`hYIAADEEDDCCCDEEEFDBGk|gVOWivv}zLDNPW^XNJHFDB?@GJIGFEEJE=HKIJKF<KqVJGGAVPFILSwaAABABBCFJNUUOLND>CJJJMQPGAFGHKQTcsyylK:BPUUSNKLMNHMX]cc`acucCBFJ\\\\JCMQRm~a?<?@ACDDCXox{w|iKWZuhUgWBDHFBBEGGEBDFEIPGBKKPE==>=;<><BNQQQRR]}sqrj^XZ^\\OLZivzSILNPRTVUUVVWY[]_`abdfffffedccdddb^]beb`c~|n;CDBAA@>@EFDCGJOW__OBGNMGB?=?GSL@CPWVSUZSLQTNKGEBCFGJIHMQLDB?AGHGFHJMKGGIIGFHIJJHDCDEYVJHj]cM[WMPU^VMJJJLAѽumib\\_b]Z[^b]]XP}è~sTpxɱ϶qiikkksqb[WWVTUVTRQMJHECBBCBBEIMC>GPV^V\\s^EU\\[\\jy~gqyv^koeWXowuxaWusklaek_bVXRYNS\\aOOZWX`USYXNRSOMH@833110-,*(*.012585430/-*''0;;DLEC?QcB42?@QM:J[\\VRSUWY[\\[]__[VSTW[UF>??>=@BAEFGHHINSRMJLTND?VaXA;@CFFM_mrmX>;M[`eutF,/7?XnN439=:;;;=?;2029?HTYUSOEFLQKB>`ulWEEFK[aYVu^EDKICJUSL\\ZTGWB59@QW]G4=Ocpw{SDCA5YbZJ=ajOIHGGHGEB>54AR[O>?HKMRSMGEB957@E?=?BHMJFDC@ACDEFIOSQLA744433<GE><85AKHBABCBBEA4-3>?968<>>@@ELKDA?DD>BLQND745668>>66@CBHKLO[`\\\\`[NMQIMivcLNhvdMR^]SPTTPPPMKJNP?9S]J?;95<@==<<;<=<;;:9;><>KE>3Pk\\XFEKJOURI=8<ABB@???==ABDDDDEC@@DHD@CEC@>90/;@<;>>=@@<;BKJEA<987678;==<9424688878<??><8668<@>;:;;:<AA=:>BA?>?>?A?:759ABAAA?=;89;>A?<;<>AEGGC?>@?9651/5:86679>DIKIHC>>@@;41249<?<98>JKHD?<:9975557;>@BCC>979;<<<::<7/,-/2456=FJH?<:;999;:9788KF=>@A?DHFCBDC=3/578<>==<?B?=:72110/103:==:46??5/6?F=3CTP9''?RM>9CJJIDEKEA>>?D?=>714:82038<81/3<CLcjaLIQ>.,387526;6,-./9>4-269<<<8115764721;7059?EFEELW^aR87UC32286J[D^{|U^XG603104858TLBJHC:EC433336653/-,,,-/136:>@@AA@@@@@A@>=??>=?>99;;<>?><<=<:979:::851//8@?AR[UW_[K>>DDA7-.5?GD4-39<@>845986;>EG826KHGFFGGHIIIIIIIIJIIIHFEEEEEEDDEEEEEDEEEEGGKSVTVX[[WTRNID@AHORTX[ZXXVSQOMLLMKFA?@@AABDEDFLQTX\\afeca`ZURNIFDBAAAAAAAAAA@A@@ABEILOSXXWWWWVUUUUTSSTTTSNJGDBA?????@@??????@AAABBABA?@@@?@BEJH?FX^\\]bffdcdggZH=;==<<<;:99;<=>=>=>@CGGHIHDCSXJDGIKNORTTTTRQTWYUMFGJKKKLMKKKIN^faagg\\T\\_RKQQMKUecKDT`ffTBPO[d_xmWrpsiwSFEHQO[\\^Xmvick|ia^[WQQQMF?>ADCCMVJ==CFFDCCCCCDEEFEDCF^mZRS_utxX@>AH\\aRKJHGEDDDFJKIHGEBBDKNJIGC@Az~eOFFI@ePBKhy}Q;AB@@EMRRIE?>SUCAGIDAEKLJKJGOdb_jsvpXFEQ^a^VPMPUVW[Y^gXPalZHIJF[ZIDMTN[{hI>@@@?A<Mck{~voheYweaYGCHHBBCEGILJUda\\f^FA<D@?>==;<=?HPRV\\]VYgwmVPanjXJShqjdfo}{rVILNPRTVVVWWWXZ\\^`acdfgffffecccdeb^]befc_Yc̬B@FABEILORTOJNW[\\_`THKRQMIB>@FNE@GdiYX_d`ZVROKHGEEDEFGGHGDDDEFGHFGHLOMIHHEDFHIJKIHFEDHYTIZUo][[QOQY\\UNMKEQϱynkh]]jmd[X]^JblNyѽ{{xNfϯϼzlggjkjkg][YVSWYVSQNLJHD@@DKIGFFXYGDMRSURcs\\AMWgWgteq}ZiqgVLcwxu][zolmdek^_RZTZQM\\`MO]WY[VVWUSVTQMI>8520--,++./-/22351246771.)1;;CHJN@GgW=E\\WSQFQLV[TLNRUWWWY\\_`[WVVX\\WLB;<@@>?ACEEEFMQRROJPRVDKUB;BECFHPcortjF;L[`iyf9.08>CH=;>==<=>><<611224BRSGA<9=CKQTR_J>XSMGLV`b]eu~vZAFIIJPROM[ZEE\\B8:=@>B63?DFO_bA=B?6StveHJhryZJJJLQMIC82>JNUQGJMLNPPLFEB6/4@F@<?EMROKFDA?ADEECCHHB;644468<DC;757FRND@??A=40/246::75>GF@?DGA<=>DKD<BHI@855324;>;<CCCGJLOZ\\Y]]PABO[grm]QMYY[\\ZjgSN\\gaWOMNPQE7?TXG986;B@;;<<<=<<;=>=>DHIC@<4`sSGFEKLNLF?76<???>?@A<7;?BACFE?<?HKGBBDHG@935@C?BB<:>?<=AJMMOE95334579:<;5358:;=>=>?<::65:=??<889989=>:;>=<::;<==:8<DKQNC??DGC=<=@C@<==>ABCCBBFID;:959@@:87537=EGDCBB@@?96566:@?:997>HE><9544213568:?EGHF@<=@?;:98:81/212357:DHHGB=:86457:99:AB<>A@AJQKCABA<5..2588752379=;72.,-0455=?:<<8;?<;AJI3.@PA4+'/EHAAKONLCCJEBBB?;>=<;99960025:;4/3EKHYk_C?B50./7<4(+781*+4<:6;==??BCA92023355:<52<ACFGHKORV\\Z@=N<8;8;JXD.Qw{o8][9632212674GUBHHD=D>122357752/-,,-./1468<@@?=:=@B@=::;<>>=?>;=AC<66898898998756631125516MZRS_[E237852-+0:?937@>60,.3533579A@427FGFFGGGHJJIJJJJIHHHIIGFEEEEEDDEFFEEEEEEEGGJOTWYZ[[WTRNJEAAFNSWZ[[YXVSRPNLKLMH@=?@AABCDDEIOUY^dgfdb`ZQKJGDBAAAA@ABBCDDDDCDCCBCEFJMNOQSUUUUUUUUUUUUTQNKGDCB?>??@@@@????@@ABCBBCBAAA@?ABCCCABMY[UWcgeeeehkbP?;?>==;;;::<=>=>??@ACGHIHE>GWSFGKKLORSUUUTLQYOC=ACGLMLMNMLKKKNSYaikgdaUIU`URUZ^UD?HScfUKSOVd[onWlv{tztaHAHNNX]Z_rh]g~~nhb]NMTXXJ@@AFLJFKE=<@CECCCCCCDEEFEFEDXpXQT[tuvmPC@B@JedSOMLJKIMQMJJIIGFFDIOQOGDB@8SxlUIDEHAlPAHkZ:@EB@HYenYE?@MTE@CCCDHSPRTSQ]rkTM[h_NQVU[bgc[VXZZ[^SQ`QGZUKPRKFQM@FJOSOGRkT?@?98:9>Th~~s\\mzmg\\xniiVIKKIEDDDGMRO\\vxgjoK9<@FEDA>=<>DILPUX[aosqofRCCGN`cUJPdpohfqYWRMKMPRUWVWWWWXY[]_`bdfggggeedbcdec_^adceiiXepaX>ECDINSWWTKGNZ\\XX[ZTQSSQNJC?ABDP\\mbTU\\bifXQNKIHGFDEEEDDDEFGGHGGFFHLPOKJIIHFGHJJIIGFECHWNFrVv[]XNQ[^[WRMAg¨{x~qib`imllh`Z]ZC^\\jӥ{~}yyJcyӿɭtjdejkjfb`]WSTXXTRNKIGEDA@FOUOFDPd]ECRTSWVgr\\FKffdlnqachcbQYpqz}t[ajmkhdl]XPXWZRK\\aKK[XWXXTRUWVVOH>57:1*+--/11.,-..02.,/434698=@:;>IF@?]_Tgi_VVUREO_UGLSUUTVWWZ`_][XUY][RA7=B?=?ACCCDIMQSRMOPSSJ?<>BGGHJQ_nuyzO8JZbjve<18>>=>@BA?=<=?=84211114895015<@@>DPifJ<bYRFGO[_^WNY}aAIPORWWUTQK<H]@;>D??@=7<B8<LJ:47=8Hi`fbOIKdeJJIMQNKD63LTIB??ADKPNJHHG?428?BA?GOOOQOJEED@?DIDDH>3456666:AB<518FQUQHDA<;74236776974>LIA?BC@>@CBEC<>DD;65434446=FJGGHHILX\\^b^MA<?ThfYQMD:2KiiriRS^ipiSEING:5DXUE98=@B=:==>>>>?@@;:?FJPVRK?TXCHMGINMD:76:>@?@@@?A@=?DCAAECABDFHIGC@AA@?=;=CGFB<:<===?@BJWR=6988;;;;=<999:<=>@=;;;;:8:;=<=;98758;:88=><987:;:67=FPUUQE<@FIHD@=?A?>?=<>A@??CLK@<@B@CFDCA@7027:948?BA@A?<=?@>@?98977B@:;84343234557<BFJLF>=??><;;>:426753357579=<;?>:9:;<;;::;<=AGINRND>@@:52356674.0017=?=50./3895774:C;5;@BBHG2,4D0.+,,459ENONMDCF?;>@;;>206:;:6-,06>FFDCE?:BOG01017307?6,+.44.059;>?><:9:9<?<631017FJ>4;@HSUTVRNJOVD:><;BGO_T;:F\\t\\,Ub6/20///152<UEBFF@@=300/25543/-----/2468;>=:647@DC>9778:;;=?@BEFA>;8996669;96553115730..?TSR^U=001111101686:DIA50/3:==>==>><=?DLGEEGGHHKLJKNOOPQNKGGFFFFEEFEEFGFEEFEEEEGHHKRY\\\\\\[XTPMJEA@DJQVYZZZXURRPNLMNOJB>@ABBBCCDEGJPX^fjfba_YQIFFC@AAA@?@ABCDFFFGHJJKKKIJJKKLNQTUUWWWVVVVUUTRNJFEC@>=>?@@@@?>>?@AACCCDEDBA@?@AAABB?AQYJIajbbffgjlfUB8=@===<<;;<===??>>@CGJKIA@OUKGJJKMQSTUVUPRN==EHCEMNNOPPONONLKNXfpqrnXGRZNMXZRJECCIW\\WTPMYdXkpXkklyoLFOOPRY^ea\\ey}xnd`\\PRV[[RJFB@IQMFE@<?BBACEEEEEEGFFFGC]pYRU\\shQ]MAAAB@La_TVQMMMPS[XPLIHFFGDCIQOEEDDHgoTGEBEH?pNA@OiyPGHEAE]vhD@?=@BA??>AHVZYYVVhwiOHOUM>M`_\\almhdd`^_^UGHBAMLGSZPGFC?IIJWZH8AC>BIIHHIIQ\\got_Ykruy|gfbWXVLGIIIGFLTOOk`SqYLJDEHEA@?<BJMORVdwzdPRYG9FTXTQ[hiffmrk|zBP[MJNRUVWWWWWXXY[]_`bdfgggggedbcefd`_abcdfidsj^\\hADDEGJOTVPIHMUXY[\\_\\USSRRNE??AI^eiga[X^gg[OMLKIFDCEFECDDEEDDFGFEFHMRRNMKEBDHJLKJIIHIIGOUE]ZlkhbUVbfa^WQBƸwuxwncaktsojif][^RTuzurx{sí}KgrҥŻsme`fjkid`^ZRQUUQONJFDCADIMNQVYOMMI\\cOS`]QNVhsaGJe{yo~fbd_jXSejpxv[ghoikdjZRPVWYRNZcLGXXXZXQPTSTTG=;=E>0-0465552..-./0.-.0-,069<A:69C966SY`hMUWPUMMN[TIPYXWVXYWW]`^][XXY]`XC9>@>?@BBBCEINQRQQQPTOFEEDDFLORZgsvyQ8IZeltp\\GIE>@A?>?>====:732221110,-159>BC94>]l`RbMECAI[b^YR__>KTTY_`]WE78O`A>AFDDD?<>@99B@72299EeTOZXKBMmoOHHKLJMD66JTQOF725ALJEEKJ=49;<@ADOTMKONJFHI@9@GDFK?0368777;?<613>MSPKGC?<<72257752245>HFA@ACFEEHB<=?@EE<33544532:HNMKJHIIQZbiiWE;4=LKKIFB4)>_rvbMZbalmR;>A=86AUUI@AED@:<CB@BA?BDB>8=DAMggjTDBDUODFIE:58AB@?@@@@>@CIOKGCBBDGLNKKMME:6:@B@;9BGEB><<>??>>>BHE>:==<=?=<=<9;====>?:68<<:;;;;;<<::65:=<:;?@>===><748?GLMOPE;>DHJIE?===>>==?ACCBCEA;CNI?@CDFFA82353029BC@ADA=>GIC?;74566975765444436867;>BGKH?<;;?BACE<4599765543355;DHGA@@?>><;::;;?LMLQOC;>@943356873/42*0:A<213359;97229B=:@B>?DC703>41.,--./=LOORKD=2-896HG/,38;;8303?JJHIC4,,-11+--281*4>841/00-.2;CB<9879:42>KKFC?74?C=538TsokjVEFOI=;:<=AJZW@BI>@cn<.EcC*2<;622500NP;@@=;84.,,.22220--...0248;;743456@DGD<6358988?CBDDCPRB;;6346667972/16852218KSV]L6231243233458AJLG<8=BDDDDEECBBEGJOGFEEGGILOORWY[\\_ZTMJHHHGFEFFFGGGFFFEEEEGHHILS\\]_]YSLIHFBABELUYZ\\[XTSRQOLMOQMF@AABBBBBCDEEO[ckqi[VWRKEAABAABAAAAABBCDDDDEEGJLMOTXXXXYZZYYZZYWVVUUUUTSNJFDA????@AAA@?>>??ACDDDEEDA?>?AAABBAAHODAWaVT`hjiiig]H<>>=>>>>><;;<=>>??AEHIHC>HTOHHIIKNQSUUXUUOBCIMJHKKMQTURRRRPOMNWdryoVFMMGINNMMLID@DIIIII]eVirXmrjrTPOSRPYeXTg|~}ma_]ZX\\^ZUQNE=DUQFF=7@A@@CEFFFEEGHGHHD_n[TU]r~hF@A?AABBISRRXQJMMT[Z]VMIIGFEC>=FNMNISkt]EDDBCH=xQBAAATzfFGA?@DRaVA??@@@@@?;:@Wd_SKL]hWMOLF?9Fcibhqnfdd`de`^N@=ACHHO]YJQhhXOJT\\VD8;ENZdd_[YSGEJUQNbkkq}s^RS^\\XRMSXWSYaSALiTHpwlhLCJJCBBBGLOQO]w]R_o^EAJV_abdhlrusognĽkEV[OLOSWXXXWWWWXY[\\^_bdfhhhhhgebcghfa_aacdeffgfehe^_[GCCCDFJRURPOPPQSUY^\\VTSUTND@A>@Zhoyt`Y\\ac[NMRPMIFCDGIIGEECBDEEECEIQWWTROLIIJKLKKJJJKKLNXOJyYwpmc\\ivnb]XIͻ{urpmkhryrszplka\\ecK͸selxjĥIhxy~}ujb]^fjjc`\\ZVONROJJKGCA>@DGQZYQZaXTX[^`WLTf^MZgfUMlowymngm^ka^j^`wjvYn{enfldfXRTVWWROXcRFRVXZWPMQQPLC@CKI<304/)'*-,),/0//04620.-,./6;99:4/=QUW\\HSULSMLLROKR[[YY[[ZWY^_^[XWVX^d\\F<=??@@ABDGILNQQRQPOQNKIFBAJSTQUjv}T9K^inqxtXJ@<AGFB@?>=>=@A?<93//0//27889>@949Jdof^G?=<Iag^SL]oU_cXWedZJ>@HSZ?@ABA@ACB?<659:756;;Dd\\CJOSMBNrtSHIIHHOE87@IRTE6216?EILNM@9>??BBFMNKKLLIGGHF>;BECHF==>=:66764678@LOKFA>=<?:./6<>9423:>?>?CDFJHGHC;8<@CE@847735978DPTPLHHFKU^jp\\>36<?ACC?<87:IbgWLZd]afS;79:;8?PVNEEGE@<=AB@CFCAAJMA?@>HfopVIPTXMFJI?46ANG?BCA@><=AIJEB@@?ACGLLIJLI@<==>=<>ABBA?=<>BCCBCC>6:=<=<<<;;<98;>==>??<9:;<=>>>>==>>=;;==>?>?@??@BB?87<@BCEJKC99@HJIHD<8:>>=?@ADGGE@=AMWOCAEE@>:726846@GFB?BEA<<CHD=511222249;86653249<:9:<=BGFA=;8<DEED<69;:876541367BLMKGG@?>>=<;;;:=JIJRM@9<>942124662098*,364//3568:<<;7;A?AID<;>>65;B?B0).7:0/?MSWP@3,+9:5KL:87865689>EF<530*)-0+,15651/-6;75651+*17ALC:5588740:MTRVVH:62/2/Bl}yuSAMXJCJLKC=CUSKVXF6AA+19WT/@RSD5750,AVB;987420./01210.-,.//0148:83249:;?DIG;1035667>C@BCAJPE:76555457:9502:@=9:>>BKVS>1330365334202;HOLA9;>><;=@BGLNLLPLFEEFHIMSVW[_abaca\\VQMJIHGGFFFFGFFFEEDDFGGHGHR_bdc`\\RFBCB@?BMW\\^_\\VTUTROMNOQQJ@@@AABBBBCCGTchion[KIID@??ABABBBBBBABBCDCCCBBBCCGJMNOQSUUTVWVUTUVVVVUTTRLHEB@@@@ABBAA?@@=>?ACBDDDDA>=?@AAABBBCCB?EKDBO[bc`_ch`K==>>>??@=;::<==?ACDDEDB=AMQIHKIKMPSTUXWWWRKCHKIIHGKUZUSTTTSQQOQbrfLFJFDGJILSTKA:;>??@F_gUeuWn{jmpXMKOPY`|WQd{xvm^^]\\Y][XURRQKQWMJN@<BA?@CEFFFEEGHHHHDVjZUV^p~pK=?@AABBFKMOTWTQKPvmWMHHIHFED>9<GMVfhd]LFCCACJ;~|SGFDAAFXuLGEA?=:DaYBAFHC?>>>=>P]RDCN[c_ZRKHEGTea\\iodYWX[hngfUB>A@DAF_eZhwcTJDLZXL>M[`djpj]SMIDDCJMXUOYmkOMSWZliWamljqpV=9KFA[vldK=GQMEDGGFFEKrqPGKUdfYSWahjihmsyzy}sP_śRK\\RNLKOTUWWWWWXXY[\\^_aceghiihgcadgifb_aacdeffa_de`_ZNECCCDCGPUTSTQOKGIU\\YVTSPMIGCFDAdrmwyf\\Z]`YMMRTTQOIEGLOMJGCDEDEECCGGJKLMKIJMMKIIIJIHIJJKTWJfWr{yreo}da_JɸvolihjxulmrvunhbacOqˮŻ``dJkyx˴{zymaYYahkf\\YUSPMMMJHHHCB@=>CECOd_[feXRQKM]ZGM[NTbgYJh|Z}zi|qypwisimqTSdcx]qw`jckdaXRYXVURLUbWDKTWXUPIKMLGECELE>74:.+,02236:9865798662.,*)287653JNQHMHOUXQJIIKNNSY\\^^aa`ZV[^^[YWVVV[a[K=:=?ACDGIIKLQRRSRQOPOI@?BFJF=Eg|X7I`jloxuS:39BNRKDA@??@EFDDB5/120026657866;BKWZXQKE<4@X]VVOUz\\LR^^I;IZ\\VS=@@=<<?JF?;76778899<@T`KJJPPEBQ|kF@CDFOPC:89@FC<5339ELNOMKA?EEABDFGGILKHEFDEOL<=A=BHJIHGB<:601:@?BGKIB><<<>=86:?GI@65999;AFKLFDJG<87589<AIE?;64:<9DVXPJFECFOXfnW819BFEDA:24AA=FKOTYZX^bO;9;;;9:EMIDEHE@<;:;<@HHABOXPKKHHW_^MXbZWSTRK?5=MVLDGGCA?;;>?<;;;::>=:;=<;AJMJC=:<>AAAAA>::?DDB@AE@68==;::99;:75788<AA?>?A>=???????@??AA><>??@???@BB@<<@B@BFD?:65;EHGHE;69=>=?BDDFHEBEMQRQNJFB=9753:<9;CDA@?CC@==@CD<31120039?B>877535:=>;99;ADC?==86;>=;9:;:98866511239?BABF>=====>><85BFING<8:=9436688732;;-**,.1566689:;?<<@@BHD932327@EEH0#-CL<)0CORF8275865IMH=83/143:FF;3.,++.6A:9;>?:5>GG=659<5)2@@ELE6-.5/-024=HMT\\WNB3).5XrRP\\_XSV[ZSKSdhgbaY<+/204RcIY^YF7851.6PJ55554345554430.-,-.//0489::;<>?@@BEE4+-11245<A>AC=75569><55974:EC;?LPGCIKF=?G?00520366542038;EONB830///05BSXXVTVGGGFIMPUY[^_`bbaaa_\\XRNKJJHFFFGGFFFEEEEFGGFFLZdgjllmhXGABA?DS^_aa]WTWXUROPPQSOD?@AABBBCCCHR\\]VZjdI>AA?@@@ABBBBCCDCDEFGEEEDCBAABBCBDEFHHHIJKMRUVWVVVTUSMHEB@@@ABBBA@?AA@?=?>?BB@?>>==?@@ABBCCBB?====AHKNNMRWSKB<=>????>=<<<>?=>AFIIEB?=FOKILLKLOQSUXWXZZTKIHJIE@ASWMMTYUUXTQMT\\PDCCCBEIJLQQF:;BCA?@D\\iUczXk{rUzrVFIGJa[VOiyunTUZYWYY\\]^]ZX_[NORMRK>?ACEEEFEFGGHGHBMj\\UU^o}sK<?@A@A@CHNOPZ_VI^kDAFHGFEEB><=>v{IIHGFDBEI>yfKGFFFFB@TeXSVRGB>Dd]MFBFE@@@@=>DGEHS_abd\\NGKLLVSHN_b[XWSXgmhjXB@AAC??^l`ecUNIBCSYPO`nmlrynRELRLFEPQQSRbeSPQTPNac]qysrvnP;9BDCKZ_RCADNNGGJIIGA`sE6=DHPY^`aahvtjkmpru}~bG]FKSLKJHLQTVVWWXXXYZ[\\^``cfgihgeaacfhfb_`bcceedeigc__aTEBBBAAENRQQRQPMKLVYVTRKEBEGDBELqlU]gaXW\\^WMNPRTWWOGGKPTRJDFHGGECEHKGMPJILNNMMNMMLFEGIMKM\\QNo`turi_Pϼsjkjms~|lfhjpqpmjfdgkÿɧj\\aWvu}Ɵ~xvoaWWblmj`TPNMLLKIHEB@@AABBCDCKZ^TZloaUZcaaiig\\QOgrQTjWsaehxttlpjvjTOY`ycsk\\fbicZWR\\[TUSIS__JDPVVUPCHJIFECDJC@;7>52148:<@CDCB;774034680+)-1555>=HD36O\\_H?HMNSSUY^cdgfe`YWZ\\[\\[ZWTRV]\\O>8<ACDGJIILMPRUWURPSQG@>><82CfmuS7F]imrxtR939AJNKIFCBADFB?EF>754/.1445666>CGHE?CGLE805@CIXTSq{_F@MUT9?\\d^YZG9=;88>JKA;;;<;9875:=DeRKIPNFGGaz[737;GWM;55;AA@;21<NXSKHIHEHKICBEFFGHLJB<BA@NVD79;@HOONLHD?;32;BFHEDE@<<?AAAAA@;>FB87765<EGNPE?GE4/35334ATSD<847:<KXPEEDEEFJTceO73;HUVKEC9=LMC@CIURHN^]F9<<;>=?HJDADGD?;::97:DGACKPPUZQDFKNQfeX^e`SE<:JVUNNNHDC?<:<==:977<CA:79728FNJB>=>>@AAA@=99@EDB@BEB:8<=<:8899973235;CB;9?B=:=?=<<=?@@BCA=;;>@@AAAAA@@@ACC@BE?87658AGHE>9;>==<>CECCEDCHNLJJQXM=:8765;:78;;:<@C???>?@A;5456568:=>=;998646=@=98<@A@:8972255689:89887762/.--.47<;<:99;>@@=709@GK<::::9769;=;:84:9.-+,/6>;767:;:9;=?>AC>3/,*1>CAGF5%2LVJ4-6@B843>;2(2JPJ;?:422/7DF>5100/-5FJHGFB;AU[PA:9>A6)9GABGG=0,0/-/2/.:EJS^aWE82>ho\\]aab`ZWbkkrz||m^`L/1?DEVodeYD:542/.-EL01222146765421.-,,.//149?BBB@AEF><=>0*.15426=>>@>93--4@H?44842=IIHMROKPSPH;472+2855675234=KQJDILF=82/--.2E[dcZOL@HHJORSUX[^\\\\^acbba`]XTPMJHFFFFGGFFFDEEDDCCHUbiloqqsulXIB?AKX_acb]VSUWVTSRSQSSH=?@ABBCDDDDEKNGDSYK==@??@?@BBBBCDEFFGHIHFEDDCCDDDDDDDEEDDEJOTXYYXVVVSTSOJEA@??ABCCCA@@DDB@=<>BB=:<===?@@BDCCDDEC?>>=>@@@AADGA?A><>????>>===?@=;>GMLHCA@AHJJJHIJMOQTWWWZZWTPNOH@;>NPLRXaZRWUUSRRNGB@?@DIKMPLC?FIEDCCD]jUbYjw{jXnYHGHQ\\SWkt{zkFCMOR[\\`c}gYVVWUONPG<>BCEEEFEGGFFGGBGpaVT]m}wM<?A@???@@GMLOTLDya@FHHFDDCAA<6me@IGFFDCGHBnjTCDDEEEGGGKQTX[VJCBKNTNB@CCCB?=?@BEKPZ`^WNFDL^]PKLW`cdegcacZS`WC@@?B@>Ve_[SSVUQBJYUT_jiorIJ[WMQQMHOYcq[IRSTQGJNfwr{wX@BHDBKKUMCHKLNMNMPTIKpF7>DEEGR_a\\X`u~qa]]_blupS>b}ONNILLJLPTVVWXXXXYZZ\\]^_beffgfdaacghfc_`abcdddcdb`^_`\\K@CDBBFKMNNMMNMMLMMLJFAACGIF@>JeRBEJNRVZ\\ULLLLMSXSIDGOWUKFJNMIEDHHIPe`STWblnjeca^XRLMNOL[VI{as]`ķ|pkortuwphhjhegkmsun;ϮXycf}ҼxxsdWU_qskaWOMLLKIGEDB>=@?BKPLJIFPac`ahpn[WoylnriYHHmsWTuwb^hx~ywzxgmcYSTcjgp`YcbeaRTR^]UXTIRYbTCOTRUR?FIIGECEI@C@9C;956<?AFKLJHB>:60,03755.'*142,2EI68GMTA;GRUXWY\\aghhgfd^YY[]_^\\YUQPT[^R=6=ABDFHHIILNSWWVTRQPI;?<;?QYGJF9E[hpwxo\\E<;>BEGHFBABFFB@CFE?:5/.14544=CGIFB97<>A;21012>TXT\\^PNE:BEB<Vf`XYfM543579ENC99=A?<9758<@dUIIPNBIPR\\J2113BO@25<ED>C?4<P`aTJHIKOSQKGDCACEGHC84;=:COG88?CGMMNKF><>618@GKHBB?==BFGGHHF@:<<77756>DDIOH@>;335558=EGDA=7566@OPFEDDEFFGPZRC<;@N[WMJMJPTQMEECEE=ANM?:<<:BT^ZTF>BEB?=<;;:9@DACHNNPRMEDIJUi`Y^ZPG<7BSUHFQRGBAA>;;?@=:87BIHDAB@:9@EDA????????@=;<?DDDDDD@>=<<<::;;;;85457=CB<;>>87=@><;=?ACDDA>;9>@ABCBBBBCC@?AA?A@=;:9<?EHB97>A@>>>BDBBCB@ACB>BWfTA:99::<=?@=68AEE@=;<<<;7348:999:9:;<<=>933=B>;:=@@=71351//245667988776541/--04><=:7579>A>826<AA<>@79=:88;;;;:59:1./048@>976<A?99>?@D?4./,,7CBBHF;5BV[WB25755757:/(3FLCESRG7037=EJ=2/./.-:GIKH=6HZRHD?=CA3+2?@;BFHE0/0/01/.17?IZc`TM>:vsY|pbVQ]^a^ZmrqzwSNJ99HTX_olfV2.220/.+8N91233347754630---.00026=BDC??DFA?;52..029::?@<;=:54203>E<331-4=;>JJABPVRPK;/12.5;97<90-4GYbbWIGJIFC=60003=Qir]=3;HHKNOOQTY]\\]`cddccb`^ZVQLHGGFEGFEEFEDEGLQT[bhkmoppqrmi\\MB@FOW^``]WRPRSSTTSRSUNA@@ABCBBCCEKSYZVOHB=;>=>??@AABABCCDDDEFFEEEEEDDDCCDDEEEGIOX]]\\[ZWWVUSSQOLGB@?@BDDEEB?>DJF@==>AC>9;<<=>?ADECCEEFDB@?=>AB@@CCC@>AA=<=>>====>>>??<>CJJIDB@AEGJKIJJLMOQTUVXXVVYXTMEABGS\\a]^[TUWUVXVVSIDAADEIMQOJNPIABCDGclW`~Yiw{q]nmc`SHQ^YZsojtxyvx}lQGDEKXXchdNDKYVMD=A>?ABDEEFEFEEFFGDBtcVS\\k{|U=?B@??>?<?FEBB@;hIDIFFDDDBA?>FRFBHGGFECIEGs`sn_J@ACDEEGIJKNOSX\\VGDLPXWMEBBCCB?BDFHKL[b^WPJHKd|j^cknhjosup[H@IJBBA@BAGW\\UQMMOVWB?X\\TOQP[tP^cZVYSHFOXhu[TXTUVQGEux`KLLFFPKNLOUYXUSNJRVCSzL>@DCEC>KacVSWauxbYYZWYfn`JIWOKGHNPMLPSVVWXXXXXYY[\\]^`deefecbaeghgd``abcddddea\\\\]^ZMCEHGFHHIKMKJIHGFFDGFBC@CEJJTjWMEJHDKPTWWPKKKKJKQOIFFLSTNLNPNKGGIHNjsddtumighikicZSSSP^aPfy{fsǾqmtvxtqkgffgddcclzŶȘ^{ovrˮtqvlZY]jrm^SNONKJHFDCC@@ACBCKRSWULIboplealraWjxkei`\\MPlhoazrex{}zzlie]YQ`Tfj]]afb^MSQ^[X[ULRV\\VHQSQTS>CIIIGEDG@EB<D>=9:=@CHNRNIGEED?:41/8:6//-30-9HLOJ82HC>FTY]\\]`dhjiggda^\\]]^^]\\WSPQT\\_R<8:DDFGFGHIJMSUUTSQQVK>:<@C@;AE;F[hqwvk`J?>>?EGCB@@ADEJJGFD?<80,15615HMJHGE>;734622332<NZ[XKDE=:;8;HccZTWaK553666FOD65=A@==:7:=>bYLKMNEIRRH:5400:935BKOE<A@6Jeg\\TQMOTWXUMGFB=>AB@<856879DGA@DFHIGGE@427415?IKLJDBBBDFHJKIFJHB<6777:AB=BHGE<23:;77<A=22;:4575=IHDFHHHHGGMIA;>DGPOIKMROSSOK=??<;=>;==;<;9E]bXMB@AB@><>??=<?BABFKFCDEEEJMR^]\\VPIC;:DMHBDKLHDDE?;9?B@=;;@FGGFEC@=<=CBBB@?>=>?=<=??BDDEBA==@><;;<>>=;97989<@AADC>=?C@@CBABCFGEB@><>=>??@@ABC@9=CCABAA>=<=>ADA86<@@BB?@BA@A@>==<8CgtfZI@F?8;HNI@46@CD@<:9::9522688779:;;<>AA:33;?>>?@A@;63462./234666789999;8321128IF><:875:A@8769;=>C?7<>=889:;<;89=;50029A?<::@CA<:<=><4,--+2;:<ED;9AQUTQ?3622>D?:8/6?<99HOXS;1887BK>21.+/-09=B<33FLC@C@<@<1+.<C>>AFI1/--0/..+.7=K\\^UM>-dSNe`SGKQNQYgfUJPzwC9=:?IOZdmmjb7020//200HF9<=<<;=>66761---../048<>=:<@BDBB@3*,1578;=<977;854335<=6010.6<5;NNDITTMQQ=.1546;84<:.+9Rcb^^WNJIJJB7//244>cm8*6HHJLKLNQW]`bdedddcb`^\\YUNJJIFEFEEDEGINW]_`cfggjmooooljf]SJCAISQS]\\RLNQRSSRQRVSFA@BCDEINPWaegiibTF>;;<=>?@@ABABBBBBBBDDDEGFFEDDCCBBCCHRX\\__]\\[YWWVUTRONMJFDBBEEEFFD>=DKJB===AC?;;=<<?BADGEDFECCC@@>>ACCCEEBA@ACA=;<<;<==>????@@CFHLHBABBEJNMKIKMOPRUVVWVXZZXVUPIHawr`S]]VWUY\\RPSLHCBDBFMRSVSNTSKG@JblW]zUfzxieirws^_cXOYcblyvhX_hoprpomj^JDCXgxncRGDDEHHDA@@@@@ACEEEEEDEFFHFAwcUR\\jyZ?AB@??>=<=>>ACD<DsUFGEFEEECBABA@EDHHHEACKA[jYis\\CDBCCDFGIJKLPTW]UKNKLNQRICACDFGGGIKPV`^YVUSQOMkzf`rqal}yypO@A?AACBACKX]UMHGEEMMA:P_WIBAOx_f`]^WKMVTVglZ\\\\[VUZRCkeNQYMMZZMJKQQSQOLFAIQFVdPIA?BFB=EWYLMJJThaXahaRVbbWMGJIEGWWMMOSVVWYYXXWXXZ[\\]_cefedccbeghgd`_abcdddedf_Y^\\WQMLJIHGGHKKHEBACDEFJKKHFGHKN[F?PMKLNSVPJJJJIIIJGIIFIPUQPRQOLJJIHZpomc`]ZXZ]`a^YVVXUgwabużqlv|voke_aeebaablɺì˽zļrlwĤomm`V[chg_QLMQPLIGEBCC>@DEKMKJLUd_T\\iswnc^geH;Q`dc_XZRXoanXept|}zxkfbeZVRbkT\\`iaZJSQ\\V[_UMTTZTLRQQSU>@ILLMDDF@FE?EAA?>>AEJRSQJGGJNOLE<8;<886/200>DHRQ70>BCMV]a\\Z]acfgghdb`^]]]^^\\\\XTTUW\\`TA9>CGFEFHGFIPTTTTRQPTH;:AA==@E<GZhqwvpbOFA=?EGC?>?@BDJMLFAGG8+0:763:LPJJDA@?9:752247:=IY`WD746:79DUdbXUQZJ?<988<FPE22<AB>@<8=>9X]MJLOKIPQF:7405@>;HSTQE:?@;Mkj\\USPRYYXUMGFB====;;<:7755?HHGHEHKGE@9202229EKKLKGFFEFFGLMIFKRM?55:?@BA88BFD<34:>:9=?7.26568748BHGJLQSPGGID;9>FORNKMPVVTRMD:;;;<<<;<<<<;9@QYPB>BA??<<@CBA?>AAA@?9>CDFFKQUX__^ZLB=>BBCACFHHKNH?;8>EB@>==CHJJFCA>:;BCDCA@=<>?<<?@@BDCDB>;>BA>;<>@A?<::<;;=>>=@?=ADCABDGGDEIJFDC@??;9:=>?AC@77@FECCACA@>>>@>955:;;>A?>??>??==>>;A_wxo\\QQG9@RN@526=AA><;99;:631011379:;::;>=82138=@CEC=967982./234556689:;==944424?KE@>=9749>A7258<=AC:<??>:999;<=;9=CA<96;C?98:;;:88994-*,.,,57-5C?67?LLB=3.39ALOMD6.8B7..67CLB9:54:=83:>2(/31020.2988>@=9>70/4>FC;7761/,+131/.262;O\\V?0.<IJTUSMMVTLHYaF84-Sc4068:>Rnrrwuh<77334873CNCDHGGHILA:9:3--..,-059;::;=@AACD>3/15==88855677787458;<86:>87;9?QXVTSPMLI<//477979?=20;HPU[a_WPMKJ>/,04640Nub966IHHJJJJOV]bdeedddcb`^\\ZXSNLIFFEFEEEHNSUTSTV\\bdejnnnnljgd_WLDBDFJPWSMMOQRQQQRTSJB?ACKQW\\^begggiibVMB<<=>?@@@AAAABBAABCCDEFFGECCBBBCGOZaa`^\\\\][YVVUTRPNMMKIFCCEFFGHGC?@GKGC@>@B@==>>=BKIEJIDFGBAA@@?>?ADEEEDA@ABEC?><;<==>???ACCDDEJJDABBDINOLJKKMNPSTUUVXZYXY[ZQO[hdWP[^[ZVY_\\LJKGDDDBGOTUYNE[lgP>LalWY~Rhzqbaiouogfd\\Y^flql^TU[ajsqlflnjbQQk{zup^DGEBB?@@@@@@@BCEEFFEDEFFHH>{ycVS\\ixZ>AC?>?>=>@:;BDGB@tyb\\PDEEEEEDBBB@FEEHHG?<DI@ok^r{QDG?BDEFHJKKLPTVPMIEEHFKJGA@ACFJIIKLR]c]VUWZ^ZOPfYBWedy}kG@B?@ABBADQXRQNKHILJB@ADUXPEOhu`Y\\USMU[MM^`]_cZUU][KUuQHaeKSh`YLHDIA=@B@;>LMKbXK?=AGIGDJNRSJGFKXX\\d_MFQa[PHGIEF_\\JLPRUVXZYYYWXXYZ\\[]bdeedcbbdfhgda`abccca]^icV\\[ZZWPHFGGFHIHECBDGJLMLNNMJKCHNWwNWRONPRTNIJJJJJJHGJKIKPSRRSRPOMLLKSZghehbY]WV[eeVWXXWkto¾ugp{ojfa]_dd``_akξϿ͟rvɉrq~Ѽ}yljdYW]ce^SMKMOOJGEC@AB>CEGUQMGCMXhwjdiqwrc]ffXGQXZd\\EETheYqbOsl|xx}~rjemcRS`ZKTfh^TEQPYP\\hSNUS\\RNSQQRS>>KMMNBDEBHDAEBA@>>AFKRURKHHJOTQLFB?=89710/159@LXB:>CLV[b`USW[\\]^bba_^]]]\\]]^^YVUUUV\\`VF<AFFDFGGFGMQRSTTPOQSP>BGB=?D=H[jryxteXOC>AFGCA?ACFFEJMIO_W6,EP>9><MQOK>9==:=:4114:=@HSUG923533@Tbc`WPI\\LLC:9:<>MD34>BA?A>:=>7P^IGOTQNQPG@<8<HQRSTVUQC:BD@M`g[VRPRYXUURIC?=<<<;9876543<DGGGEHNNF=620125>HMKKKGFFGEEFKMJEJQO?35CHDA?99AC=8339>=;=CA961187434>HKJPUYQHFJC:9?HQRPMORWXUSM@:;;;<=<<;<<<;9AS]P>>CC@?=;@ED@>=@B@?:9>CDDFIRYbbcaWLDDCCCBBBDHJOQG>:6@ID@>==BEIJGB?<8:BCEECA>=????@AABCBA@=:<??<:<>A@>;98;;;;<;=:9>ABB@BDGGEEJKFBAA@?;9:;=?AB=57CHGEDBBB@>;>B:336:<99=?=;;=>?>?ABC@BM\\jk_XRKT\\N8114:??<;96688631.+,1678:9:9651/015<ABB=5568:830112576458:;<==856635AJC@?<9:;99761469>EDCCA?<8778:==<:=CJID>=@>9855540154/),/..271*6C=:9>MP>60.<KPOOQJ<20430--19BGF:.24225>QH+*50+*,.0/03:=08<6247?GD81////-+09?<;;744?RR8*100HTPSSUZ^VRYN:6953VpW0,3678Vb=9=CBBB@<BPFDKJKKNQL@982--..,-26:;::<?AABDF@>@=;@B=;;;<<969:::767;?BDB:6:88FQPQVUOB:61/589:@HI@78=<=L]`][YVRI<33556738GC:>=IIHHHHHMU_ddcbcdddb`^\\[ZVQLIHFEFGFFIIGFEEHMW_chmmlnnljhda^VLD@@@BKOOONNPPPPPQQNEBGNRY^bdddffhiiihdYJ?>@>?@@AAAABBBBCDDDFGFFEDDCEENZ``]\\\\\\\\[[YUTTTSROLKLIHFEDEFFHJKIB@FLNMIA>@A?=>>;@SVMQNCEIF@>???>?ADFFFEB@?DHGFDA=;;<=>?@BCFHFDCIICBBDGJLMLJJKLMPQSSSVXWVXXZ[XTUUNMZZZa^X_g^NHECCDCLTVRT]_bls\\DMbl\\[Wlvp`_kqtvthdifbdhga\\WZ]counienqqp_\\quoptmWSJKGBAA@@@??BDEEGGFEEEEGH9p{cXV`jwY=AB>>>>>A?<@ACHU^btd^MDDDCDDCBBBDCDGFE:@HIG~bdpeHGIDCBEHJLOOPQQLEDDBAC@BACAA@@BGIJLOUbhdYTV\\_`^TSKI[r}a??BA@AA??IQSWXVQHJRJ<EQEIVURaoZUZY`]]YOSZZ`dlhVU_ZP]fkVPhgJMYcdWF=B=:;>@<:ISN^dWD?@@JWWRU`ebTLIFPYQHHQWUZTIFGHGK`aLKOQUWYZZYYWXYYXYY[`ccccccceghhfb`abdefeYUY[``ZXZWKCBCEFGEEDBL]b]ZWPOOPLQWTKFƧoaWSRRTUQLKJJKKLLMKLQQOQOPQRSUUSROLT{lcjlg`e[Z`gxdYYXXfyvnn{zne```_aed]``bjɯ̶uxs͸ww~|nif]XZ^a]UKKMKJGEDCA>@B@GDJ[VSJCKLM\\nnea``b]\\]]VSOIXmq\\@Od^pdtTutt|lq|qmnfVW`MFNna[LEOMSI\\sWPXT\\QMTSOOP@>NOMH?GEGJBAEB@?<>@EKSUSMJIKNRQMHBA>7530-.225<HaYLHJSY`cUNQVYXXZ[[XVXYYXYY[^a^YVVUTU^aZI>BBCFGGGGHMQRSRRRMU^PIQM@<B<H^mv||xmcYEBFIE@@BDFHGFHIQdqY=G_[D<HKQRJ<79<:;?;536;>@ACD?50695.4Kada^XKHYHKD6666<ED9>EDCBECC??8H_MJV\\ZVRPJECEOY[\\ZVTUPA>IIBKWa[WSQSVUSUVL@9;;;==:7656769@DFEDDMPD663127>HKLLKHEDDFGHFGGIGGTWH:?MMC==<?CB74568;?>AIK@5.196212:IPQWWVOHHKG<;GKNRUQNRVY]XO@:;;;;=<<<<=?;;H[ZE<?DDCB?<?D@==>?ACBA@?@ABBGR`kdfk]ODMMJHFCBDNQSN>:65ALCBAAABBHKHA=89=CEGGFD@>=@BCCCBABC@?<:9:;;;<?BB>9778999:9AEDA?=>>@ADFEDGHDA?@AAAB==>?@A>7:GJHEDCB@?<8>A9469==;89;98:;=>?@ACGG>7C_qladedbL82348=>><943564231--366689<:51./357<>;5101334424210375459@D>98567859BG@=<978644277555:BFED@><7766:<<<<@@?BBA=88;<86650.00.,--,.33,+7=987<PS?95:KUQMJGGE=61/2407@FKG7+031179JS?+/0.,--/037;=;<><88:?DB6151..-,-4CIE?9821;>2+--3KXOPTU[a`jSDCA;<86B;/04545_vX9;ELNMLMIGNFAACDFHNTC730./01128<>>=<<?BBCGHJOOHAADB??A?<9:;<?>:878=B@746754=CBIWWH98945;><?JNC:8>B=?M[^]]]\\VI@?;8666525AD?@IHHGFFGMXbd`\\]bfedba]\\\\YUPLJHFGHHGFGD@AAAGPV[gnlijmnmkhd`^YQJHEBABGOPNMMONMNONNNPRSSY``]_dhknpqrttqaOFB>?@@AAAABBBCEEEEGGFEEEDDJT`aXRSW[]\\XUTTSSTRQOKIJIGGFDFGGHJJJIGJOPRQH??A@@?>;;P`[ZOCFJIC==>>??@CFGGGEDDFHGHHFC?=<<>>?ABDHIFACEDBBCEGKOOJHIIJLNQQQUVUUUWXYYXXXUQYVIHNSZckeOCBDHLU^YFUzwnkcTM^kglXlqqkiiknttnipmhd_^_a^X`mrojghoxsg\\_ehhgfdhja`LC?B@@@>?BDFFHHGFFEEFI:k}dZValy]BEE@=<<>C?AIIS_}zwgcSDBDBDDDBBBBBDGEC?EOEeh[dgPJRTJA?FKLNRVWSKDCDDEFECAAABB@>?DJLNR[iplaYUTTT^bROh|hN<@B@@AB@=GTYc\\POMLXV=F^ZSUWZd^s]]ornecb^_[XUUpzZW_REX\\x^USf[PcTSXUD@FB?>>@>>IUXRoZFCDD@Jbj^etrkca[TX]WOYpsbWSPKJHJW_ZOLPQTWZZZZXVXXWWWXY^bbbccccdfghhfabdfgkmbTVTyYTWQHDCDEGFEDCDMZc`acWRTTPTo{jZvǑ_WVUUUVXTMJKLMNPPMNRQKILOPSW[]_XOOu}_hpf`a`ceb^gztjd^[`mwkmvvgdb_^^jiecY`tevĭov˶so}vliaYY^`_XNHLOJEDBA@AAAABFDN]_^\\U_Q>=IXXSRUZ]XVTQMLHGMcqFKq[l^{|bm}tlk^[`NGTv_ZBHMKKF]vbL[V[PMVULLL@?OLK@>JDMM@CEB@?;?@DKTVUOKJKMRQMHDCA:30.-.258;?Wg[QPTZ`ZLOVY[Z\\^ZWTRRSRSUVW^fg_ZXVSRW_aZLB?BFFGIHEHOQRRTVROTZPTRC8@;Iar|ymeYIHNLC=@DFDDBFIJ[qnVQ`cYQGUaOA<;BDB>@@;66;@AA>963157524?VfcieYIHT=DA2364;BJKPVSGEIMIHC:CaOS^^\\VPNIEHRXXTTUSRQOEAGFCKX]YWWVUSSTUTLC;<@>===<;98:=>AFHF@?GH<24532;FKKKMJE@ACEJMID=AJW`ZLGNRLA;<==CD<9>>9:?ABFLE81475333:ISTXXRNIIMH=BNOMRVSJGLU^aR>:<;;;=====?BFMUVI;=ABBGFA<>?=9<>>AFHFB>>???AK_idcaXTDILLLIDEPWUPE:623BIECEJHA=<=>?:7:?EFHHIJB<?CBDGGDA@A?=;:877:;<@DE>746789<?DIJJGA@FKIGEFFDEEC?>?BDFG@>??@@=<CLNKGEDB>;89=><:;:;;:;<:7:<:;>@>?ADEA<>I[rrphYTK<7767:=?>;63465457525768;:98863346:<=70./11.,,0451.04556:FKA6327:<;>EC=:95366468=@<977<?@A@><56:9:<<<?CC?=<;823588764430.,+,-/0-)(+103=?6>>2/3EXYWRJEFJJF<31654;EH?2-/101423DF1*0/.-./238<>HE?>64;>A@:<>0--,+++7KK;682.00..-,5M\\QKRV]Yn~]SXT@3><30/44353bxGb6CHJMPRTRNKH?==?BGIG730./1358;?AA?===ADDEKPSTQNHCCB=<?=88<>>CB@@<78<;52578:==;>FD95:=::>CCFG?638>BEGJOWcf\\QH@@?<:65435:DOMCKJIHGGIP[_[WY_efedb`][ZWSNMJHHIHHHHHFCBAAGOQYgkghkmnmkieb]WOGFGIIGEIKKKLLLMMMMNPPPQTY__]ainqsuwxyz|sbTKD?>@AAAABABBBBBBBBCGGGIN[`ZOJOY]]]XTTWZYWTSQPMJIHGGFEFGGHHHKMLORTUUPF@AAAAA>=Lad`RFGKMF=<>>?@@BEFFGGGGGGFGGGHEA@BBA?@BBEJICBBBBABEGHKPMIHHILNPPPRSTTSTTTXZ[\\[Z[VH;>KSZacQCALYX\\e^O_sz~vhhXNVighpXchhv{kb_`dmplklkge`bkkkkidfklopdYY^acdfefqvsp\\YH>?@>>@BDDDEFFGGGGGI<e|g]U^hycINROI@<;@CISg}}rndb^PGDBBCCCCCDDDEGGFFHOC|UR\\`LQWVNECGMLMOV\\XIBEFDEGGDBCDDCBCEHKNTZ_htvkbXMOT_kZLXp}oRA@BB@ABHQTY`_]]cqtkqmG?SYWWVTRO^rjmwmki__YSMHeaTUH=FQ_bRU_QSt_JQVJCDDA@@@?@P]_[`|KAFFHEBXlelyuune_\\X[lwn`Z^ebSHJZWMNPQQSY[ZZZVSUPTXXWX]abccccccdejjgcceedff`VWShnWUWRPOMKJGGFDEFCHXemqjc\\YSUj|gƤq[UUUVVVRLIKMOQTSOLKJGINPPU\\^]caOn^OdtfXX_`qp`i|yjciiŽzpuvccdbcdnqdaaXz³m{y{}ʯqk|tpm]UYhrcUNLNKFCBA?=HMFBDC@N]ea]Q^_VLNUWWZbkomlkhZQU`daqO~ySrIz_jykpf[eVI_w_S<KNHJF]qjD\\WXOMSQIJHACJEH=ANGRK>CFB?A;B@CKPSTOKIKMOPLJFEC>61.,-26<=:C[[TNT_]MIQWY]``^ZYXWTRRSSTUZdie`]YURTX\\]\\RE>AEEFIHEHNRRSWVPMSZ]K<=I=HbsrdZNELPIBBEGHGFCFHObneWSTOce_dY91@NOOMJGA;87:?@@<6468854<FNXfgjZRCFW>BC8=B9:KZ_ad`PGRQA=?9GgKS`[VMHHGITUYWQRUQNMJD<;?HQZ]\\^^ZVTTSQOMICDEEC?<<;:89=@BFGFA>A?5244329CECCGE?>@CEIMID89NjfK>FPQLEA@AAEMMFABAAA?=?EG>6454554:ISTTRNKKJFBBHMOQUVRLIIJO\\ZB4;::;;<<==?FR_]L>AHGCDHGBA@><;<=>@EGECA><<;Icsl`b\\QdX\\_`\\QEKZ]SF=9516AFDCEHE=;99:;::=CCBEINN@<DD?BHGCCA<=??;977:<=@EF>669;<?DFJJC@?@BJSQKGFDCDDCCDDCGKJGDC>=><CNQQOLJHD?949=>@><;<;9<@<9==::==;;;;;<==9;\\~z\\?@FD=;;:::=?>83479878<?=769;855776668=@A?:64210//11462//378:AE@624:=??@CD=:842489:<?><98:<><;:9839@=:<===CIIEA<856434445762/.,-/1/,*/00+0IM6../64DPSNIORJIMKA61/3.,9A:/--../.-*182*.//-.//058;AA?B828=ABCKL<272,,(-AF5044564/-/4:HWQOWUZ`rd^\\\\J/6@920365:/Tr-wCLNNPSTTSPOLIDA@@DC;4451-/6:;@B?::<>?@A@DLRRNNPJAAB=:<<::>BEEEFFD=89<957;ABB@<972022-09<>AC;1257:@GFB@MacO<57::9:7427;<@OOCMLKJHGIOUTTYbffeecb`\\ZYUQMKIHIJJJJJJIHCBBEHMWaceikmnnmkgd^VKB@DHJIJHFHIJJJKLKKJJJMSX[]`djmmqtwxyyz|zraUQH?@BAAAA@@@AA@@?>@CDCM\\\\TFDMZb_YUTW[^^]YUTSQMKIHHIGEFFGGHJLMMPSUVXWMA@ABEGGIR^dcYJFKOKA>=?@@@BDDEGGGGFEEGFGHGFFHIHEBBBDHHFEDDBBBCEFHLMJIIILMMMOPPPRSRRSUWXZZYYWRNLNMPSOHDK[a]Ydqkgot~zpmWGXedbYY]^Yl}u`RRZ[fjjhnsujmyr^Y^emokdZY[[a^\\bbjuyxypsXB@@>>>@BCCDEGHHIJHI>cm`U[bugLNTUXRI@CHEQd}e[VSQMKIFBAABCDEEEEGHGJIKF\\UMMVRMPNXclv[NNMLT`[JBEDBCEECBDEEEFGKOQU\\`__mzk[VPQUfkTLJGIR^<@BA@@BAA>CMWL?b{[=?CIQXVGFYyx}ob^ce`Q@I|jNE?=>CD_maRW\\KTqfKGX`LFFDCGHADYddb_x`?GGDII:Eiz|eVWRNOYadfa_bfaKIOMIMSRQRX[[YXVTM_zYWWW\\`abccbbbbdhjhdcdgo}}hXVZZXVVTUTRNKHGGHGFDFVrzngbeZWfpz{fg|\\TTTTQNJGGJMOQTSQMIGJNTXWV_kc^bq^]YZofTRahsrislto˹}oyrr~nep]iqmwlmw|ϼ}{equ~Ȧph{qniYTchXNYRECAAAABLOGJOE<M`cZbTS^d^_`a`acghijilpj`_fjlde]`@nYfqqmbkbO_pZD;LPCMG\\emC[TUWONMIFDCGEBH:CPJRE=DGD?C>EADIIMQOKIKMMMNLHGC@:3,*,25<><<O[VPX^\\LHLQW^`[WX[\\[WUTSRQSW]cda`]WUUVWXZ]UE<ACCGIHFHMPSWVTONT\\RBBYDEbttdSGHPNGCFHIHJMNKISdh^QE=Fmolf@7<HPQQQMIB;;65;<;:867623=HJOfjh^IUSSc]ZWMSWLJSbhffaUPWSHB@:MhAEUTRMJJHJUTWYWXXRMF=75:GRX[^baYQT\\VRRTTQJDDKOH<77789:<>?ADB>=9535798:<;:=ACCDCBBDIFB:=L[VA7=GLNMKJLMPV[UF?FIED?:<DB:633454=KSTQKHJLF98CJKOTWVRRUYUNPUG59<:;;:;==>AM_cQBKYWLHIFB?>>====>@CDDCCA<8=do[efVamrm`YQEIZ\\OB=957?CEEGEB;8;>=<;;;<A@>GRTL?=A@<?BBCFC::BD;567:<=@CB?<<>@BCFGIH?;>?=EONIFEB@ACECCBCIMMNJC?=<<CNPOMLKGGHB:;@A?;:?EC>=?=:;975688877887:<9CelP8;BFD=;==:9::6348::64:EF=9:976764369;:>DFD>:76777878:6237:::;::549@BDDBBB=;72448:<;<;<;;@@?75455<EHEACB=<@GJIFB=;>?9324796685-++039>>:;4/CH4+/>`T@9;5<UWB=B?658661+1<6/..---,,-,.0.-11../,/47665<C=57?FILOQLD@920-.484026<?:1,/8==FQVXWgcg^YUO3/652555694@g3_dQRTWXXWVVVVTSMFCBDC<8>3+/8<?A?846;@A?<9?HOOLPNEBEB=<=?>=?CFFGGGHC;;><;;>CEDED?;9634;3+48;:524659?DC?<DRQA557788:88:?A>?A@>ONLJHGHJNRZbggedccb_[YWSOMKIHJKKLLLLKIFCBDEKVZ]cghknmmjgb^XOGEFGHJLLKIHHHIIKJJIHHKPVY\\`fhfflsuwxyyz{zseXNFBAA@@A@AABB@>>@?@AFWZJBALZ`YQORY]``^\\ZWVTQNLJHIJHFEEFHJLMMNORUWYZRC>@BGMPV[]`d`ODIPNI@>@AAA@AACFGGGGGGFFFFGIJKNMJFDDEGGGGFDDDCACEGIJJJKKJKLKMNNOPRQPPQSTV[ZVXYYYVNIJFDEJX_^]f{wy}zzlY[X]gnd_[TP]nqbW[]TV`dhlqrmosneVS]cjlic^_\\XYTT_bmuwsvwsf[L?@>=?ABCDEGHHHIGGDeo`VYatiMFHLSVQHDBBKFS~gRLHGGHIJGDACDEEEEEEFFEGFHANLPRKJIHjqfHOPFJ[YKEGDCDEDDDEGGHILORY^^_bagsgPPVU[cWFILF=?^xRA>?>?AA=?AEE=MoH;>BIPVGACNq}{wmjryyt_F?kjVWRC<<<HSTPYXKYDbyZNOIIUTKTccde`YC=HHHLI>=UrkRNTQOLQY_lvjTNTMJJLOUTPPQPRXXWVTXUPWWX^^_cbaabbbfihcbhvwiil\\TTSQQMJIIIHHJIGIIQnw_Y_b\\U^ifejdsxSQQRQNKHHJKLNQTVTNJHJMRWVVgtm`qiLlp`os^\\jssqwmsx˰ƴ{|}w~}ndh~peqsv³վjyWugrƢrlvwnfa[_yrbVnTILDGHMNJGHXRFARd^WpoaWWXY[]__^^_``XQ[kmaXRTW}zTQp\\MT~yNczynunpoWXeO99NI@OD\\]oJXPT^PMKGEDCGBAF7EPJM>=CDDBD@EBEGDJNKIIKKLLNLJHED=4**,02=DDANWPS[^^YMGLW\\WRUY\\\\XWWVSPMPUX[]]__[YXWUTSX[SB?FHFHKIFGKQVTSRPPSVSPV>EexqZPUZTLHJOJD=EOOJQ[^RC=:Lljux]NILRTSOKIA:<4289;;8310.6DG@[rondShrcmtok^Y[UUYbifd`[YWXXWPLTf:8LOV[[TLNUUVY]^^[SB109GQY^_]VPF6G_^Y\\^`aS?<LWSH=87:;;;:8:@C?;7559?DDC?<<=@CGIE>;?DD@:EH?AB>>ADIOQSSTVY`d[IEKKIC:8??;633555@MSTPFAFKB32>HLPVZZVRV^e`OHHA8<;;;:;<===BTa[QW`\\OFFG?878;<>??ABBBCC@:9<cpXdre^kzpYQTJDOTNE@<8CMJFFDB?;979;<<??<9;DRXSID@<9:==?CEEB?BC;659<<=?@?@A@@?ACFIHD@CFA;AGFFDA><;>B>9=EJIHLKDA@><?GKKIJF@DKHBCDD?:>EJID?>><:9533578889<>>?B@GLE>=>AC?9;??=:996589:877;@A?>==<;:7568857>@@<:98879<>><747>@?<;::78>DGIGFE?:;537999;;:9;:9><964456ALNOOMG=;?EHHGD@<?DA725767;=3''/:CLMB>B8+281/5@VM942/<PF1/579=GRG<8.141462.-.-////00330.-.7=;7217==926AORNRRH;75640046456::60-1465;NRM\\whqeUQI51247=:027:5fM;KKNW^baa`][ZZZXQIEJMC>D4,06;><5/39;=>?925AKMOQKFGE=:=AA?<;=AFHDCDA@?>>==<===BGECED=@^dF35=>:76339=@BFCCEB???>:55;<?EGEDC@?<OOLJHGGHMT[_dffedca^\\YVQNLJIKKKLMNNMLKGDCDHOWZ\\_`fmnkjjfa^XQMLKLJIHIKKHGHHHIIHHHHJLSX\\`dc]^hquvwyyzyzzteSHCA@@@@AAAAA@@@@BDEKMIC@IW^VIGR\\`^^^\\\\[YXURPMKJIHIGEEFHKLMNNPRUXXZTG>?BGOUZ]^`deVFHMPOC=@CCBBA@ADFFHJKIFEFGHJKKNPNKGFEGFFGFDDDCBADFGJKLNMIFFHKMMQSRSRQPRPKT][[ZYZ\\YRJEEFIKK^srkrmeXX]k\\\\bec`[RS]dedgkg^WW]lmigdkn^\\WW^cfjhdff_VSSXainovkjvnggXG@==?ACBCEEHHHGGEA[o`WZatiLGCDFHGFECEIACPNGGGEEFGHIGFEGGFFFGGGGHHGG@WoYWSQF@:9nxnjZFQTDBQVSMIGFFGGHJHIIHJORT[^]_gkjf]OOV[vmD=@CEDB?VovZ?>@?=<=?@B?G{M<AADKULA?:TtgWVcjmgniZZPAW]ap_H>9@OSQO[RV׏IOgZSVPR\\WScgbc`O?=DGHNVNCBCMzb\\IMaWLLIPWWbxkTKLNHEJTZTOMQskOOUVRTSYXU`]]ca_abccltohm||vyvmomYPRQOLHEGILKHIJIHHQdph]]ZW[W|idjfdlRPPQQNMLLLJHJOSXTOLLLLOQRZeepppWf{nmjt~}yqu˻־ɶvx|usvndfvg]źΪy}p}LdzweyϿsnsvlmfggmpbRU\\P]ZbMBBO`HHJYea^ktpjfa][WSQRUZ_aXMFRcnlbTW_Fmn\\DljH_vm|xoybWYJ78O?@K?\\[nSRPQ_SMGCFEDI@CD6KKGG>=ACDEB?C@EECHLIGIJKLLNMKJFE>8/.-02>LMGMI@W_]]`VJKSVQRY[\\\\XVWWSNKLSXWZ\\]``^ZWUTQPTXPGPTIELNJFGOTRPRRRQV]ZK9Mo~}aU[_TMNUZM6-3AHHIRSGBDHTjl}_>CQWTPLJI@5557=>??;989?C@6ItxskZVoylnwy{m\\XYYZ`egfeb]ZYYZZ[V`C>MKNVTMGONS]cigdbU?49DLPX_bXB84.?^gbacdbS@;GSXVPF?=<=<989<@>8459?GMLLJGD?=@DFD?>::@A:LQ=;AABA?CNSTSQRX`jmXEJPH>;=>98745767@NRSQD=CFA63:CHNW][VOKNZbRBGJ;::;;<<====ALPQX_`YQMIF?DMIEB@?=>AAAA@=:87C]pm`fvtfeql[XRDBHMOEA@<M[SMMGA=><525:@A?95:DNPIDHLKD=@DDCEHIC>??=9<@@?@??@A@><<BFIE?>EGB?@@@AA?=968<;8>HJFDIGCAA@>@FIHDA?=?CB@CEFDBCEFFDBBAA@?:86677787<ILA>@??@???>>>;;?>>==>;89;<?@:47=>=>@=9=A@:99547854566668;===:65:??==?>;;?ADFEDD>;<:8::9646:<:51643466669=BEJNH>:?GLKJFA<<@A835319<5,,6DMPND<>?4),24575253852;JB2-4DOPTXJ?A9228I@53332123234862-+1=B<71147<:502BJIPPA5467833767742/-,.22228AB<``lgaZQB8877;;8035824C:@;gT>Q_jlkhb[XXVYVLMNMFCC3.02331.06::;?=607AEGMNJHB;79=@?<:89AHHA??>??>=;;9889=FFEGJDCK`jcJ;?B=746;;?EA<7449<??>2-=DDFHHIJMB4OOMKHGFILNPZcffged`^[XTPMKJKLLMNOPPNLKIFCEMRQRUYajponkheb`YPLMNPPNLJIIHGHHHIIHHHHJLRX[_c`Z[fptvwyxyyzzuj_QEAA@AABBBCBBCCCEFFHHFFHS[VHCN\\^ZY\\]]\\\\[YWTQNLKIHHGGGGHIKMNNPRUWXYUJ@>@DKS[_aabeZIGLOSLA=CECCA??BDCFKMLJJIHHJKKNQRPKFDEEGKIDCDCBADGHJLMOPH??CILMPVWUUVTTOEKV]`^VSV\\^UGEHKB=`|x[[Y\\JLZ\\eb\\VXa^UU_edgjkgd]XXfoichtzncZZ^bdjhdipcNRYZdflnsjjxp^^dZ?>>ACEDDEEGGHGFE:IoaX[ctrGEBCGCBCDDBCGILNMMKFEFFFEFGFGGGJKKJKLMOPPI\\d_QH@;57g}dGB@NSGBISYSJHGHHKQTOKKFGUVVUV\\chki\\X]ZWgO=A=AGLJ<<[aC?AAGMHB?D=mösF=@ABHTOB?<TxpZDD`kdMIaRB_]KSVWYJHMIMXYRPZOYRFS][WRXbZYd`[YOEHFFHHR[QDFE=\\vLFASk[JNKHOP[kVILQ^YHBPg_MNIeIVNsS]\\WXr^\\b][`bcdkstsz~zogtxnm`QNQONLJFGJHFOVQLFKT^d_`f_^_i»hdplmrONPPPOOMNLHGGKNRTUVUTSSW]^bfppW{a{y{uwy}ͽĽ}z~wnn|zluubƴywowOeotoθ{lipmdkht|p}h]_c]sjiMABV_IHLYa`b`[_dgea_a`YROORTVYYUQWdo{`ynLY}UDPdD\\{ys}m~j\\SJ9@N:CA>XWjTMMJ^XLD@IFGK=I@:MECA<<@CFD=>B?FCDGIHGIKKKLNMKLGF@;72/36=GIFH;0W`NLPQKILNRZ\\[^^YWUTQMKJOY[[\\\\_ce^ZXWUSOPRRZ]OCHPOKKOSRPQQRSV]YWIWw~O?LL?@P\\XD314<@EKTWTTUUYfv`@,7JOMKKJI?.-5@DB??GMOOTK47i|zcK6N[S_g{sg_[Z]_bgid_`__``_Y[UJKKFC@CJOEJhpqmf[G<BIKIIP^gaB/6?IZb`^\\TLEC?>EOTVPKF@96689;>>958?FJKLNMIB:9>CDFHE95?A:LWB8<=?ABINOOLJJS^djZHMSG78>=5486469<CLOMLE@BB>98:<>GVYTLGCBGOL@DLB::;;<<===>AA:=SeigfjUBD^tlb\\UKA;=??>=:97658Mhppuslfgg]ODEMFGMGKJHV\\RRYRF<===<>CFA?>@ADHGA:AOYRBAIGCDHLD;@FB=@CCB@A@@@@BB@AB>969?BB@@?>==?B<66:;<AEILLJEBBBBBDFGF@:<?@>:8=EIHHFABCDGHEDFF@=<;;::<::HTH:=ABB@ACA<<?A@>>ABA>99<?A?<98987:844;A=;?@;8752146789;;=>==95268:>A@=;;<>@?;;<><<?>94891:A@933214775300269@A=7;DGIJHC=:<@:35306:69ENPMGA76==2,/36679:=874/5IQ?1;Za[XH=;;KWGPU;5552/.(&)/6?:1.28<=720,/69;>8169=GG;69::<<:77776430-.34148886urdbMSRL@;;999878:;7<;48@:<~3@Xnmkkjc[VOb`PTNIHFB3./..,-/48:8;?:48CFCDIKIA6489878:<>@DGE?<=====;::99:;?EEEGEA>69Npt[C=A99==:;5*,2=NUJ::<75DD?CLLIJJ;.NMMJHGFHGFM\\fhhjhb^\\YUSOLJJMMMOPQQPNKIIGDEJIEDKYgooorrkdde]PIGJLMMNMKHHHHHHHHGGGHJMRW\\_a`\\]fotuvwxyzzywl]RGAABBBCCCCCDDEDDFGGHHGIQRJDFMRQT\\^]]]]][XURPMJIHIIIHGGHJMNNPRTWXXWNB@?AFMYcb``c\\LJNNTWM@AEDEFA>ACACIMLMNMKIIKLLOQROHFEDDLQHBBCCACHIIKLLOI?;@HJMNQUUUUVXUNHIOY\\TKGNWVMHGIFGVhya`^]snX]_^]\\^cf\\TXaghiia\\`_WTXab_kuurl]Z^djnnnovlTZ[]`aimjjpri[hs_???ACEDDEEFEEFEE=BrcY]gu|H:?FKCAAAA@BIMQRROKFCDEEFFGGGHIKPTTQMNSVLgbYg[J@<<9JdjWE<>LPGDJPVRKIHHGIQTTOMML[TQTRX`fhjep~rd:A>BZpnW@BOC?@@GOYbM<<~Ŀa?@@A@FRQD?BY`PA:UvjP=EeQIbjU^WMQIS`a[PPQRXNYkmpzjJEORYTYrpc`^^]Z`UCGHDLOIHIGIXniUNIancbiaTOGSXHGKJYlcR`ROOZP[au^U`|_Y_ZW_abccdeekjgjr~~qlm^LMNMMLKJKJMgu[NNOW^lg]itebhieu{wkcYWSTTSSSRQPPNMQTW\\_^XZWcsnt~]u~jlp|ut~Ѹɭxlfl}spʪlo{zy{dnvdw}˴vefpkaedzwvrm_hazrhPQHUbYHHUZTaa[WTSVY^dlmkif`[]affe[fhsM\\q\\_{{JDCgdCYqy|qbRK;GH7E9>VRhNIGD[^K@:MHJK?O=DD?@<8:ADF@:=B?FCCEFFGHJJHJLLLLIFB>:4289;<<CD6-CQ?:?FFFIMU\\\\\\^`]XUTSQNIKT^^[X\\bgea_[YXSKKT^`VE@HPQONOQQQPPRUVX[W^zH27628NXN>67ABBJTZ`caZRR]od?60?RVURNJJ@0/8DD=>M_`\\[UF.8TX`K>:YO:B]zvy{ha_][Ydjgb__aglfXYaLHRTJEP_MCFlvmfcQ>BNLKJDLftiE6ET\\\\ZYWRH?>DC=?DIKLORL=226:<=<:;@EIJHJKI@849AFJQOG<:@A:CJ<7;>>BIMLFB?=AGOVYTNNMD84<;6686578<GLIGGEB><:99:87AQRHB?@BDFE@AHF=9;><<?>?@>85C]t|}`>Ikztqomf[H==>=;9889:7GijxtohdhfYT`l`?@?MXZYYRILYYO>8>FIHILGFIKNPRL>;?CJMC?CC?@EJFDGKE@BDCB@@@?AGHEC@:557;BDB@AAAAAAB?<<>=>?>HUTKGGFDCCBCFD@;<?@=95:CIIJHDEGFFJGCGJD?@ABCDFEBELH>=ABBCDEEA?ACCBCFFA<99=@<668988761.26527AB=;976789:;<<<>@?:753/27=BCBA=<;:7448956@A:8@A67;::9533342/+-26878;:55>>>BFD@;8=;4585;CGJPLD<7646:;414668;?=7542./@L?4GljfiS?>>Lra.$$\"&(+-00/.7<1/5@@>;510-/16=C>7537<:78<@@AE@8757@EEA717516=><EgaK7=@@@;889:9;BGIHHF;9<;0cL8[ylhp|sjhRvqONIGKKE4-/---/13788<?72>HHGIJKG;456777:>AEFEBA@?@@@@?=;;<<<>ACCEGB<<?;3A]g[ME=<?=51>altv[C49C=8K_WILMF=MMLJHGFGGGRbjklli`YVTUROLJJLNNPQRRQOLIGGEDDD@?GT\\acdglkfee`UKIHGHIJIJIHHHHGGFFGGHJLQV[^`a``fmrstuwyzyxviRECBBBBCCCCCDEEDDFGHHGFGGIHFFFFIR\\_]]]]^]\\YVSPNKIIKLKIGHHJLNOPRTXXWXQFA@@BEQ]ca`c^OKOQTYWIADFGJF>=A@?DKLMPOMLLMNNMMQQLIIECLTPHCCCBCGIIKMGJTNCBKOU[VPTUMNUXTIDEKNMIBBHJKHFFFDEJVlrkpthlwqbXYZ[hl`Z]emmfcfd[X^YTSTWV^eeeh^Z\\alqorzwqe`ZmenmnhdgbdfvwaE=?ACEDDEEDCCDDE?=teZ_ltN<DKH<9:<@DHIJJKMLIFFFGGHHIGGHHHKSX]XNJJFyFXaVE>?=@SSLF=AIOMIIIIHFFJLJIGILRQRWTQJOXVTXcn{z=8AFWUPRSKF@?>>@AHYU@<ü£wS>B?@@COTH?FKD@?>SfWFKX]SNPhaZTT_U`fa\\IMULT\\bweTY_]T]ww^\\mqnpjRBCABGGHOPJT]XYZTOgrs~wjOFLKILKOalp|cPPks_Jڞbba|XW[VV_aabbbbddcam}jjgnhLIJLLLLNNLczTJT]lp~x_unelvjym]gld\\]`c_Z]\\`aZXZ[\\``_]`pvghq|{s~Ⱦ˰}jbhrк}}˸oahuuyrtxh`zlʱrdktnb`c{hК~vaqavojQeNWlgQKSUMcjlosrmkneZ^ghjjlqw}oP?RvjhjiK>EQlDX}l}ziTKAG@8E5>VQfKEBB^aK:>QIKJBQ<J>9>848CFE:9;B?CBACFFGGHLGFHLNLKGDB<68<8=;<DC84/=?=?A?DLPUWXZ`b]XWWWWSLHMW[YUV]bcffa[WVPLPW\\ZPC?GORQNOOOPOQSSTVV]}I2-29>LQH@5?IFKPUYahfVHKV\\TLI?Xmg`YSMNI;29A;7HdmbVQPN947:ELVQbQ=>Upztjfcc_gnqkcbgjj`JT`GEXcYPRXI@Ju|mhfVMQNGLQKQls^HN`ovod^YPKGGGGF@<>ACIRWQA33=@<97:DJKIGHH@515=EINQKE@A@=;73<@@BABHID@:637:;@LSTQHA?:78;::::<88DGABEC@;9999:97=GG?=ACDEEB?=@C=98:=@CCBB=>McumLQgihhhiki^I;=>;:;===<HXSpzpa`ief{yP2<>Q^_\\RHBEPUL=6:@CDFHGGGIOXTG?ML@?B@;;;:9<CILLLHDEDA?==??EMJ<8;;<DGFHF@@EEEHGB?ADDA?@>;FSRJHKKHDA>AFD@?>;;<:8;@FIIIJMNFCFFBFJGBACGKLKMLIEDA?@@ACDDDDDDBABFHGA:79=<401369<=7003557;><876789:<<;::;=BB9344115<CFGHD=746435424;A@?;>:41024436993*+16;??><978<?=>@@?;433349=DJG@=9534663466:?@>@@=6/-..--1531Lljmn\\IGGWt\\=9L>GdesyolY85<EDC?7430)*4?C>83100247>BABFA;878CLMJD<=968A@>f~_PA>>ADG;68<=@DFLQSH<778:3D4Q|urr~xjsFFIILNJ4-.,///13568<?85?GIKKKJD<6328@DEFFFDBBDFFFEEEDA;;>>>>@CDCCC@@DE731>XaUKGJG<;lT<GQS_cSFPZZRLLJIIHGGIN[gmnmljbVQQRPMLJILNNPRRSRQMIGEDCCCBBEIJMPQQX`a]\\[TMKKKKKKIHHGGHGFGGEFGHJMSWZ]_abdfkpqssux{yxs`H?@ABBBCCCCBEFFGIJLJGFFGGFEGGFJT_`[[^^^^^\\ZWSQOKIIMMKIHHIJLLLNOQTWWXSIBADDDJWbcadaSLPSUWZUHCFIMKA;?A=@FJLMONNOPPNLKOQOMMKHKRSOIEDBDIHFLPDCTYSPW[^lmYOQJFIOPIEDDEGHFEDEEEDDCBEA>RgszcfncPWZY^\\Y_jtxsbZ]]XTWWX[[VRT^ca`^[VWaiebmihkig|vthlla^]gilpiG;?ABDDEDDDBBBBF@:raZ[irUDJG>24=DJMKIHGFHHGJLIIIIHHHHGEDDHOVYSG<d\\JZ]NDED==PJ@@BKJ@BNNFEEBCLTSRNHGKLOSNJLNKEQix|oyH<C@>==FMMFBA>=<;?E@EƺsSDBA??@KUM@@CBAA@OWG?KY]OF:Yhade`YlodSJ^n]]mbp~{km|xqs_anl`R[nkWPOJFFNUMIR[XPPRNKS\\Yhnp|z[FGJMMNKTlydf`X]uuTaʴnf~lUWVV\\aaaa`adffb[`pj]ablfNPRMLOOPNMW`_[XXexetvׇu|kd|zyijmutonlnrkdca`bgilyymuttz~tsnhru֩xηhmqmxgd]isvȭphqwphffwsŨwrwboilXqTezrbZaOG\\kmoqstnowyuoe\\T[myynSC6Kl]Y]N@COqL]t~d{qmpVLED=;E5<TS`ND?CgaN9JTJMFCQ@L=9>63<FHD46:B=A@@BEGHFHMFCFKOLKFEE@9<<:@;AFC;;8;@AB<;DNPQRVY_`YXXWXZXOGHNRUSRW\\]acbZUUURPQUXZSF?DNVSONNOOPRTSTWZoH68AGIMNMD2EJMRLEN_hkaSW[[`bM7IXNOXRMNM?1;A>Hang\\SJMO:9;:>SaN]K:GWowqmnkqvyqd_dcWM6MbLJWZTLDDE@Mxvvqc\\XPKRXSSZVQZhszpicZPLKKMLB;=>>@IR^ZB5CJC?96>IJFDGC:68;@HIHC?AEG?:<64LRHEFDBB??;754549JUYYRIJD88?@>=?@:;DG@@EDFHD<;==97;ABACGHEA?><:9;967:BHIIHEBSjw}|~~{~}kchggeddabe\\E<@>?AB@?<>@@`yrkoial~{iN<NOTWURKFCCEHE<867<@DFECBEIOL=GZXKCAA=;;756:@FLMKJGD@<;==?CGE82;BGNMEA?>AHJHHGEBDGGCCD@?DILMLMQOH@=@CA>?>=>=9:;<BGHFIQPFCGFADIIHCAGJKLMNMGBAA@>>@CCCCFFB<=DEC>:79<812569<>>82256:?@=8322478:;<;;9;=CA9322235:>DEFB;448::;:87;AD82973-...39?A?:31259=<;9:=AABB?<:;71/0148>B@80.1359<7234:DKJHHFA=5.,..--//.>VkjaWJIMnrtmvhG??@?=:879:76:>;2.//112358=?BC>=CG>=DBFKGFA<>@@Gi[U<<>?GTM95:=?DJIHOPC4/667;8~D>m{oXWz|{mAINMMPJ4-/-.//03578:><;@FJKJJJC<512<FIIKKGDDGILLJIHIF@;;>??@@BB@=AFFGI@609MY\\ZRTa{xal\\_qreRD>@IRTJIIIIIIIJR^gknookcWPPPNLKJJLNPPQSSRPLIGEDDCBDCCDDDDEEFMRROOKIHIKJJJIHFFEFFGGGGGFGJMSWZ]^acefimpsuvy{{vo^H@BBBBBCCCCCFFEINLJIFFFGGFGGHJPZ\\VV\\^]]]][YWSQOLJJLMJIJJIJJJJKKNRVXWSJBBGJLOW`dbccXOPTVUY[UJGINOE<<???BFHHKMNPPQPNMLMNNNMLLOQSRMKDBLKDHNHDLTZ[adVXbTFJJDDHHGFEEDEFGGFDCDDDCDFFDHO^{xhjjac\\WSPU_kqoeZYXRRSOQZa^URT]dda^[STclbYY\\\\kx{|q]ejfhefb_jcA:?ABDDFEDDDDCBD?6p`\\ZerZGF<65CYcbVKIIHFFFELTQLGFGHHGFEEDCEFMQ@CuS]h_JKHJJNcUB@??>77IPBBEDELUY[XRJGIOKBHSJ:HezelI=>>>>>BFMND=>?>>><Aɮv`NCA??@IVPB?EEBAAPM;>JTZG>8Lhuwve\\|bHZ|xgdasppiad^w~qk_[\\bZOLKKO_aPGQ__RIIFBTkfkpnt~{uw_HHDFJKENthNKM\\|UЪzey}feQZb]ZZZ[_eedbYX\\\\[\\]aWLa_MLPOMKHEM^a^[loÍonvtz~vll`equūyu½ǹ}plfãԲxkqdZ^oȨplvwlfjpqyw{}nchilayZnwmey[QU_`cfhkmms}~wfPHOWw}kOKTckfPQWWGEGfYfqx^l_\\t~tXLIC==A68RTYTD?Dm_P:NTKJAHOIO?::69BHHF22:A<>>@BCFHGLMDAEKOMKEEFD>@A?97AFB5=D>=<<89BIKMQW[\\YUVXWVVVOGDJMRSSUYZ[]]ZTUVTSTSSW\\WJACLROMMOOPRSTUXUXx{M?FLLLNPTC@QJIH?8Nbsv{tf^bf[@.>FCKYQLMOF8>BNiywpi`TMB9DF?>TbQ`P9Vck{umssuvsj`SQJ??7LcNLRPOMIGFANntv{pbYUVVZ^YRHLcqquwyqjgc[MA=ENL@;<:9=DJXe[HIONNF54AIFEFA>GLGFGC>::AIKEAEGIWZLFGD>=><=?=:?GJMNRXZVLA;=BFEA>==@GKE?@FRXVI?>?:8<CGLKIID><>=::;>ABEQQJJJFLessu{}~~xyyxwvtojlkR=ACDEDB@<:>AQp~~j`_[cp_KXSUXYXULECBCA=978<ACDDDFJ>?MLRXXQICAA@@>;9:=AFIJJEA>==>=>>@B?<CGIHC=:;>BGIHGGGGGFEEGGDBBDHLOQSQI@?@@?<=?DHD<;;<>AA@BILFEJHCDHIJGAACHNNLKGBBA@><=BEDDFFA;>CA=::7785348:<@A>822457;<732224789;;<==?@A=952..3436;;<;7567;GLJC>BAB74863..-.5=CB@;53229=;9<@BDCA?:359637843788643/16;=;77;AFLNKIHHHD7-./.-394/1C`bZVMIroĠsm_J=AIEDE?;7779;CE@9:=3-442544356;?>;EY`I>IFCIKNKCE>6t4AQ756<ITM>:===@IKGKMD5156771Iu6FZT94^v[CLNMOPJ4-//.-/2679::<>@BFIIKKJD94469<@HNPOLKMMMNLKLKF@?@???ABB@@?@DFHPB1H^Y]uo\\qxgadwyy]IBA;08LZIIIIIIIIKPV\\elmkjdXPNOMLLKKNOPPQSSQOIGEDDDCBCCCBBCBCBBDGIGFEEFFFFFGGGFEEEEGHIIIHIMQVY[\\^aceggimsuvxz{wiWHABAABBBCCCEFFIPOHFHHHGGGGGHIKMONNW^^\\[[[ZXVTROMKJJKIJLLKKKLLJJLPTWWSKDBEMTX\\`cbbd\\QQTUVW\\\\UMJNRK?<>@@@CDDFILLMPRQQNMNOOMLLLOTVSPNMSTLFIJHHNWZ^lY@EFBEGEDFEEGGFEEEDDEDCDDDCDEHIHJTdu{okmmi_XSRQS_dca__ZYWRQOPUXUPQXXY_^[WSZltdYZZT]ixqzrmpngeimd_jZ@??ACCDFFFFEDDC@?3~uic_fvdLA8=CUqzlVJKMLKJECHT\\UJFEFDDFFEEDBAAC6o]VeiUXTGM]nw`D;><969DH@>@FLLMS[]\\SJM[_KCNKDbz|c:AABC@>AFJJB@CCA??8jȬ~weI>??@IUPB?BBADGIBALMQUD>?NmmitagbOag]S\\h^[esmk{rb[bidVLNRWRIBFYdUFEAF`phl|{xw}kNEZZHFFQjeXTSMXhu[hyjPXaWPQN\\aceeca^^^][UNKWhWKMJGFJJNctd]c}z|yfsyƺrhtkͮjxnp~_\\dzĢpoxvibbvÿfszceehhk~chrpkab`]\\[[[\\^^YT]qePDBsnKFNmmQFDb\\OA[foqp^`SNhx|`NKC?=<65NSSXE@EmaR;KWPE?NJRMC;5<FGEFI0/;B=<<?@@DFIPKB?FMMJJGGFCBCCA3:@F<,<A<==979=BFKOUYXTRTWWURONIBBIPRSUY[ZZYVSTRPSUTRRX]\\QC>EKMLMNNPQTTVVRVypYPKLJKNTUHT\\LB<9;ZhqTQ[\\VA;LPRTZROSUPCBF^vzwl_SEIIKLP]i_cb?_na}{plu}uphb[OH<7AGK^JIPPSVTQG?OjXeic\\TT[^`fbTMj~uheipia`[QKD74BH?7645;@FQdo_HEMSQ>/9GJJHCKVTMKD>???BDFFFSeaVYOEFC9786@KECP^]UNNU[]P;7?CIKEAFMOMOPIAGTXYTE;=@BDGIJHFEEB@CE@;:=DMVWNHHFAMiutx}~{xwvtfL>@DGFDCA=;ABD`|ic\\G`vjceWZ]_a\\PEBCFD=8778;>CJPOF@GWaYSTMFA>>>AA=<@BBBDEB?=<;=>?==?ADEGIGA=?ABA@@BEGIHIGFEGJJHEBBDCGMJD@@AA?@A?@FIJJIHGA:;@>=AABDDCCCDCDA=>GRQKHFFEA?=:;DHGDCB=:??<88;9899;;<>CED>72245663.-0136898889:;>?>:981**22.045644542;S[UNKME?:6641.0144:@>:752139?BCGIFA@A=5.2889=<6013325754<C?8<AGQSONLIGED?4.+-.,4@;545HXWTIHma[ˋcdh^Z<BHKH@98:;<=>>936CC<?813576546:8=ThlYGV\\KAHNLEK?HS,9Q=17@FKLIIB==59FJKMD6454656?QGQU;0ImFDOOLOPH2-.022489;::<>@BDGIIKLI?65:92/<OW[]ZVTQNLKKMLHFGHEB@ADDB@DD@CHH;XstpvodRzpF<A?:>UgcIIIIIIIIKLLQ\\b]X`d\\SONNMMLKNNNOQRSQLHEDCCCBABBBABBCCBCDDFEEEEDEFFFGGEFFEEEFHJLNOPSWXY[]_acfhgfiostwxywfPCBBBBBBBBBCEEFLMGDGJKIIIHHHIJJIHJS[]ZXXYZYXVUROMKKKKLNOONMOONMMMNRUWSKFACMW^bbcbbd_TPTVWXZ][VOOTSE>???@ABABFHFFKPSSQPOOONKJJMTVTPQTUYWKFGGHKQVYd[FDEDEEDEGFDDEFDEECBCCCCDCCEFFHKPZiocRV[^][Z]XTU`b\\`qu]T[XRRWQMNQU[UVZ\\aadhhkbURTZ_arkmttmg]\\ksibiXA?>@ACDFFGGFDDCAA5ztdahzgMHLRPXkl]PKMNNNMFAFNY^TJEEHKHFGGGFD?7KqWQ]NAQJDGR\\_R>89=??@CD=;?IXWIFLNPVQL^mdOKNIUyU;A@@@?>?@FKIGHGECE=Nǯ[<??ALVRC@ABCFE?JWSHPQDDEF^j\\Pw]FIOQMKSRZwerwrnlhkfZWVVNE?@N^UGD>K]`akvvxyrsxn`U]LRW[`ee`ebt}pjt}yyf]OU\\TMclV\\adcba``^[YSIL[`JLMJHIUWWtqp{ǳϺŨ}lnyʺ¦k{l{}{``}Ӻnqwsh^g|ƶ}X}v`a_fivq_~yqfhc][Y\\fnvw{rga_f|sWomK9D_t_B)VbK`[osriwb`LK`sjTKAB=:45LTSZIBFihT=H]SC@SIZJHA9KTKCFK.1??:=<>>?CDJPJBAILIFIHHFEED<@;B@E92>:::;977:>BIMOQTRQSUVURMMKLIGMSRUYZYXVTPMLLNQSSRSY^]TIFFJIIKMNPRRSTVVWx_LNKKJJOXXXXXOE@ACXbzUGPVY[IBORVTYXWZYRGE[pnvxpg_SPPR^einebjARi`}xmt{ncZ\\[UJB?BNL]EDMPUTQRG>OiNLQYZWY\\]ckfWOmudY^kpgadaQKRH13B>556668>HWdZB;@DJF85?CDEJUWOLOE?CA==;79C[xsWQPIGB568>IPLJU_\\ZRNPQRP@7=BDFKSZ\\[RNSRIFOQQVNBAJPK@>>?BEDBDJLD=;6:LYOFGFC8?Xnz{wsrrrplaL>=@BCDDBAAABB?Ln}tzcJlqcihYTIIONIDGLMI=65;?CFEKSLCIRY^UMMIA>>;8;<99>>=?B@==<<<=?@@??ADEFIF?>DIKF@=>BEGGIGDEHJLKGDA==?B=9<@BA?@DEDCCIQRQQJ>@GC:;AFCCC@<===?<<FRSKGEGID=<:<EIE?=;8:><78:==<@ADC@CHID<625779620023479:8754225:;=;941466334554525;K[YSTUO?788620.4897<A<6554015>GJMOKA?@=;779:=?:423530/248BGA>BDJRUQONKKG?:??1,/08@A<73DTQJ?AHJڶzuoVELL<89<?@?=;:726DPN@1/28<=:6476?]lldRUcU>ACDIMA,69LB6:=AIMOMA>>20>IIJA65549@Ts~eTO@/LspznC=PNLNPD2-/15:<:79::=@BCEHJIJLI;6?D9//?S^gid\\VSNIGGIKLMNKIHDBDFC@CEACC?\\TagNGӿoYGIG@AN[_YIJJJJJJJJJJMRPJHS]ZRONNNMKKMNNOPRSQLFEDCCCBBAAAABBABBCCDEDDDDDEFFGHHGFEEEDFHIKMOPVYXY[]_adfhgffglqvwuqeOBABBBBBBBBBCCFHFCFGJLJJJIIJJJJJLPY[WVWWYYXWVTQONMMMMNOOPPOPPPOOOPRTVSLEBBJWadddcbcdZQSVWYZ\\]]YTVWNB@AAA@@ACDEDBDJMMKIJLNNLIINSTTSMLPW\\PDCFJJJW]ODFGGFEECEGFDABDDDEDCDDDDDDDEFEJSOSgfSMOPORV]e[XVZa^ertcX_dZWVSOOUZZT]inty{fafWEO`rtuswzmgcZbgnidk]GA>@ABDFFGGFEEDBA;wp`ahvaKWggWSSQMNNNNONMJEGHOYUOHEPZSKHGHIH?7t^PNV@6?:>B=:;:868>@>EKD=<?J\\ZD54BRf_Vagi_WP>:U{N;>????>>>?BFFJMMPJEKIn˯i@@ABNXTE@ABCDB@bw[KWgKCHJLRIwFHUMFFMNdcUhky}}~|{yrzzl]\\^M@AFLNG>BZgglmkhijaadffdkUVU^oyo_jqf^lrn{縅pic\\tQROQYRIwtO\\bbbb``_\\ZVKOURITQSRP]jcşĵ̭ɞǰýxdr˻ɨxhwidϳnqvvi_ŧqYp[\\Uhpz^xvqlkg]SUVWW`szmdXPikF>7DZz|jVg28XhOxlqt_g^iON]mnZNAC=;1:JWVYJGHgnV?F]UGEVP]GKKBUbQDML/6F98?<>><AELPIBEJHHHIIHGGIF;CIDBF>?A44438669<@EGHMPQPQRSSRONK_iVMRPQTTPNOOICDJQUTTRRUYZ]^YPLHGGJLMOORSVUSTxQ;DJJHFMW_`[TTNKGENH\\wkVY[]^eNANRTQX[XYUNIImk{{yuqnaTTVZakqgXiAJ[]vxllobQJRUOHJE>DCaODHMHENRI?G[NHLW[]\\[[agcXBIKMWmtkgcfj]NTYD4:=:;=8226;@A@=:98<BA>>75?OWUPRTIA@>=:5/6GXjn]PONIB69FQSOQTXZWXPFBBAB@=??;;I^^TPPPQPKINPOPRPNOPE88<>?A@@DIKE@?CIPOIGGHE>9@TnytpsujUG<<=>>>>?@BDECCBDUm{{\\omWOIFA7:DIIJNQPI;8<GORJADFCAINSPPLFCB><<;>BB@BBABEC@@A?=>@@@>?ADEFFEDBEFJKGC<?BEGIB=DJJMLFA>;@C?==?ABAAAELNIGHHFDIKCBHECFNRQOKD@A@BC>=ENOGB@ADD?;9;@C<79879<;8:;<==?A><;?DE@963699;9;9855579:;:73/04<@A?:7=A<998667964GV][USWTD41<A:34379;?D@75587/*+6GOPOQNH<8=A@:;=>:48;94/,,+6EGCB@BFKRRPOOOL@3AM@008@AB=:@KI=9;FmGYǽggqhACA:=BBDDB@AE@6:DWU8-/14:?>4356=Ocnl^Wd^H8?FND`I5?>ML@=AHR]ZM>:<639>FF>229:=Hg{E;?1Nr3-hN1ADINM?2./038;6358;<?BCEIIIJNK>=IJ<46=E]rrgTLOKFGIKNOPPLIKJHFFD@>@AB::ł`WIk׮~aTUWXYVVSUHIJJJJJIIJKJJHFGLRSRONOOMKLMNNOPQSRKDCEBBBBBAAAAAAAABABDDDDDDDEFFGHIIGDCDDFGHLMNPRVWY[^_aeghgfegjtxzreYJBBAABBBBABBBCEEDFGHJKJKKKJKLLLLPUWUSUWXXXXWVTQPPPOOONMOPQQQRRQQQRRTUSLEBCHR]bdedcde`TRUWYYZ\\_]YXYTGABCCA@BDDDDCACFFDADILONJIMRRT[VFJ\\^ODEFGHHQ^O=AFFEEEDDFEDDDDCDDDDEEDDEEEHJLU]VPY[V\\cSOPIPTRXTS^_gc`e_gkrgVUTQXZWS^lrpmnjadlaTR]egcmxynujih`jj`fhS>>@ABDFGHGGGEECCFrs`]`fqeQWadWKMMMNPNPPNNRNHDJRQNHEO^`SHGIHH<]fSGXO?<;8>@<866658@B=AIE=<@GHD96A]y|pigb\\YZVH6=pM@<?=@?>>>>>?ABCEEFKMKSMG[~i=@>DO[UE?ABABCIoyi~eJVWZswWONQ_MFKLKb_?H~wxccXFDDDEA>Y{uojdfcUU^[Y¼YPUXcjphi~{hYY[ZN{㹠zg\\ZVNOOQSSIlgW[[`aada]]YTOUUQaXbg_nxȨѳԷ׷ƾƺnxwf˸ǵq{meuήmrhoƌmlhSe[ir{bqu^d_kpmf_VMGBIU\\emhbYgzkK@WL?ITzZAwi:cyd\\lcjuW]OgcQ^itþo]TEC?=2BKWSXGNHbmX>B^YOPXXWCNUJVdTFSL2<H5=F==?8BLNNGCDGHIIKJGGHJG?ELDDEAD@11007569:>CDFINQPPQQQRQOK_zqXNNOKKGCEIC??IX[XURQRTXZ]b\\PLJFFHKMNQSUUUT\\fN>CFGFDCKU_a]ZPKFGINWjgcc_`adOANRQNX\\SSNJJN[qepjh}wob\\ZY]lzrRlUJOTfqa[dji[FAFD>@J?88:[XB?@:DRPNFCMOTX]a_][Z`cbY938KYklghfefcULTTD<AC?601466414:969;?DB>70;OXTQXYLB=<=;43DRST^cYQMID==GNMMTZZYWWPD<=?@AB@<84>VXGGRUSROOSURMNSSMF?=>=<>><=CHKFBAXl_JJHGHJIC<AXjx{ydC;>==<<;98<ADFDBBFQ]aevdRTWO@7;@DDEGLPPRQF89FPTOD>A<@?DIQTQLECD@;>FQYZWWWVTPNJEC@?>AA@>?AEGGDEKLFDIRTJ:6:?EG<6@IIJG@;;=@@=>ABABABBFRWTLHJKC@ADD??DQSSUSTRNDCHF?=FKD:9:>@==<9:<;746669;:9;;<=<:5029=BA;75469;=<<:888788;==9515;CFDB<7:<9789877613GUUSUVWM=26GC;98:99?DC934794.-/6FPIHVYH32;A?<<<=;9<>;4011,3JOEE>9=DOTRPRRLA22AG90<DBC>=CG<26BVw_heΫțS1LO8;AEJIEEDEDDDB8>K][A0002344334709YooieihU<?GG=9FIDSTB?MUaot_@2;B>7<CB://<8=xwe]EP@G@/^j63=ING=3//02321148:<>ABDGGIKMKHHKG@;;:5Rw}hE?LKDJQTSPMONIINLGDDB>>@@;:_yswg|޵urԾxka`_]cni\\JKKKKKKKKKKKJIJJJLOPOMNNLJLMMNOPPQRLDBCBBBA@@AABCCDDDDBCCCDDDDFFGGIKJGEDCDDFJMOQPRUWY\\^_beghggegpx|~t^NECCCBBAABABBBCCDEFGJKKKKLLKLMLLMRUTQSUWWXXWWURPOOOONOONPRRSRRSRRRRSTTRMEDDFIQZafdceecZUUWYYZ\\\\\\\\Z[YLBADCBBCDDFFDBBBCDABGKOOLHJPRT\\aTFYiQBGDBGHJXZLEEFEFEDEEDDDCCEEDDDDEEEEEEJMQY^[XYY`jpVQSIEGIMQU`dkdX\\apv~wlZNMY[UQVah^VTZfqn_ZX_USV`ijguebjkopidib@;>@BDGGHHGGFECAIlwd]afn~qWLDFHDM\\YPSTTPMMZ^IDLMOMIEEQ_YIFHJFKsPBP`=8@;;@BB@=:978@B<>FE?=@EA;?Tk|wkfd^\\\\W@<aa;8@@??@?>>>>>?@AA@@@?FKMNJA\\QTY@UFDPXSEBABABCKpxӋXTZgf`X\\zz`U\\PHCBIKE:Tlb\\HDEECLZuwwxwlfgfZQOQSVKT[_Zk][]YPPͽfUTPPT]fPi]RXa`^qca]\\]WdWklcmr}ļ̢ɱѼΜˤ¾¾Ų~~sȺwǣy~qudxyf|̩my|gjkihgJlrnouzhtr_SOZjvx{{{|{{}~n^`r~|jT@JkbEA?adD__BYln^eyUTA[tP_gjĻqa[Q@<>4FNRKVGSIZhUAD`ZXVXZQ?RZOQZSJTL4@H4GNC=?:HPLKFBCGJIILKIIHGEDGIGEDAC>331165799=AAEHLNNOPPPQQPL]uxfQMJGDBABHID?IY_]VSSRQSUZXXQNNNHFIKKNQSTTWY\\TECDDDA>8<C`iZPLLHKPT[`a^^aabPALSPNX[RSLJLPDR`\\NU|tjfgim}vKjjMPR]sZD=Qej_NCBA:6>B68FJKPG;7?IONTPCd]YY]_Y^^[^ccVA?IJJPcmiefd_QB;CEAAC9.+06888438859ABBA=7/8HUTTZXMD==??=@MPLOY]ZQKFEFC@:9CS\\ZYXUMFB>ADBA@>:5;TUBDNRSTTUWYVRMIKKCAEF=8:;<@FHHGD>KdiXOHIOQKMNGGRo~xW79@@><:9879?BACDB@HSXQKHB><;56=CJJGFIKLROD9;GMMG?<?A??BGPSRORLD>;>NY^afgb\\YWXTKEB>?AA>=>@CEDBCKLEAIU[L948<BE<6=DFFB<;=><9<AEEBABCCFLUWLGQ]`RBCD<9DLQQQQOTRFCGHB@GJ>458<<:;:99:8555459;;;<<;=;6217;>C@976578:<=;9877789;>=9768=CFE@720025788763.1589GSVUPHBCHA;;;<;:::72236966>E?8>:8FN?,1=><@@?@@B?96323445LOBE=58?LRRRSTNC4*1<91=DAC??@@?>;G\\bmsj}G`ͤS(044=C?GJCDEEDDDC;@RZV=10/01//2124.9XpqpolndKC>,nISXWY`XJMXmvoJ3=F@:>CB;42=-]\\W{a^OBS0LxQ5;ED;93//0//.0348:<>ACDFHIKKKMMJC@??94Dhw\\:;NM@ETYUOLPQJINKEAAB?>>?@B;?BJLٹĻfn~|saV_uuk_JKKKKKKLLLLLLJJKKKMMLLMLJIJLMMOPQQRNIDCBBB@@BBEGILNOPKEGFDDCCDFFHHJLKHHIJJIJMPQRRVXXZ]_`beggfhghoru~bGBCCBBB@@AAAAAABCCDFJLKKKKLLMNMMOPQPPRUWWXWVUSPNNOONNPQQSUVUTSUTTTTTUUTPHEDFHKPW`deeed]WTWYZZ[]]^]]\\RC?BBBDDDEFFGGFDCGFCEKQOLJJLQY\\^_TTaOAEC@FKIQ]ZKEFFFEEEEDEEEEEEDDDDEFGGHQSOW]`bc_[krpYVVOIMMHO`lnpoaU[hljvnWFQ\\`XPVej`_`fklf_TRZYY[^bekvhPbhfjjh`gQ>>@ADHHIHGFEDB@9\\j]bipxP>57;=OlgTX_[PKLZ^KHRROKHC@BKNFDCLDm]GLgZ77<<=ADBA?<;99?A==CFEFCEECJlvnmjf`QC=?BoeNHG<<BB?>>?>>>=>>>>@@???>@CEINMQWqmUDMT^BQRPKJCBA@<Gns_PU[cWkl^|grzuyVTNIDADCBAczefLEFFMftz|ljyytlihmdYURIdJVU͝kpvg_Z`ehVW͑kfaRQqU`vHUYleoemk\\idqc~wǾΟ̶ǩƸկ̱ľž~¼ss{v{ʍpnm|ŦmyznlvwɥackDi|ifvqwendSLNXep{~}pjjpaHDYkmcWCJo^VYricx_oZQ>LzOchǿɿvld]C8>8MRH@SHTJScLJP[ScX]WL<T\\LLQQPTP7DH4LSJ=BCMOJIH@EKLJILKLMHDDHFHFB@CDA9;/;56@;:<>?BDHIGJLLMOPQNZeloaKCEFGGKOTMFLRTTUVVSNJOQONPOSWRJFJJJMOPQSX^]OFCDB@?:62M\\VMRULSSKKSTS[ccaUDLTPQ[]UVOLPRGTg`NP}zunxmBapVTT\\gj\\D>F]g`MDFFB<>C;<OebICPDAMH@P^YEujXMIIN_e]^dcQDHMJAPmm_Z`cU?4/157862/2333550/7=:>IH@?>8/4=IU\\[SJI>:DKE@@?BNSPMLJGJLGB60<UbYRUMCFJDDHE??A@CO\\XHCIKPSUUUVXWI<@KMIGHG<59?HHGDGIA>NfnaKKZWLPWMBFb{x|lJ6;BCA=;;;:;<=>BGD<=LXRIIIHFDB@?AFOWQFBGLHC>>?@A;8;>C@CEGMPQW]UB;;>ELSboqaMGOVXVPF?@A?=<>=@?@>?ADA?IXXI:89:<>;9;=>?<=ABA>;<EKKDCCDDBBFJGEM^jbLDHECEGJIHHILKDCDFFEFG>89<><9:;89;9776569<==>=<<:77>DAAE>9:<::;;;==:876589;>=<;;;;?DFD822/1478887540/(0KXVVXXSKD@==<<<91-/13458<ISUG0+-/272.5??>?@BGIIA402640/7LE8D<667>IRSRTQF8.+-22;@@BA?>==ACIVdooqdetM=̼I7456881>HCBDCCEEA=A@?;/.11112231116IcoqtyojeL>6<[K]]cgrobnTDIF=@ADC>>?:Cɠyr~ocQGS.=qh;;;4/11000/002358:<?ACEFIKKJJKKGB@A?;==ITG8?NI;@OTSOPRPKJMHB@?@><=@@??CJUWܾزjx{z{ib]JKKKLLLMMLMMLLKKKJJIJKKIGHHKMMOPQQQOLGDBBBBABCIQTUXYYVPLHEDCCDFGIJLNMJILMLORVZ]\\[ZZZ\\^`bceggfijhddjw~hH@DDBBB@@AAAAAAABCDGKLLMMMLMNONOPONOPSVXWVVUTPOOORSTTUTTVXXXVUWWWWVVVUUSLEDHLOPQW_cddeaYUWYZ[[]^_^^_ZH=?@ACFFFFFILMGDHHECKROLKJIQ[^[\\__UEDFBDHMLNX^TGDFFEEEEDEEEEEEEDDDDFGJR^^RTbjjf_Tabheig]UVWUVckilkeWN`\\Zf\\VOaegaZ[`ife`XXUUXQNUWWW[bcilkcjfba_`\\m_A:>ADIJJIGEECBA9Ug]dluuI:649<H]]NQZUKLORPKKSVTOGA=99@EDBDPtUQblR:8::=FF????=<;>A>;?GOSNEACDWzqmmqdC9=<6>bhL;;=>>?>?>>>>>>>=>>>=>>?????>>AFKQHA?finBRPONIDB@ABNgmbJފNqeZRrt^ef[__}STOJIIHJJGZ}twQDEN\\lmejo{~ofeif[RrUClkIWR֢hdc\\Xalot]Jcɴebd]QJwX_Zyzh_x]to~qŻȢϻŮ͸ǿǾĶ~~~zľ{˾æcos~xnjjdquy͑jgnCcphryXbuul]PQQSSSUetwviX_hbUJIMOS]]VZLSl~Yrk{Yyl[]S?JzURžzwkcP>>=VO=9NIQFM`EPWOQj[_RA;VYBMKSWOQ=NE:OUQ>ILPNJJI?IOLJHLJNQHEFKHGB>BDCC?:7>19L=;::<>@BCBDFHJMPRPV``fkZHKORQQPSRPOLFCOZ[UMIMPPPOOSXXURNJHIKLNPV[\\XPACA@BD?17BHJU`ae[NMPMP[ffa\\MQY^^`a_QNORRHXlfOAgt|~nJYq_XU\\b^XW[_a_XF?FECCIGCRa^ZLBNQQL=DV]\\BijTH96Fajb]\\R?=GLKH^pYKKRWH3.01245238?=51..05BJJKMH>?D8.48=Q^[KHNF@PVE7428HLIIJMQWRIEC>AXkYDF@8>EDGJF>>EMVZ[UIEHHGHIIKNSRB9CPVUKHSTGEQVLFEJQPE>JQ\\SNQRQXZPDBDX`h~pSU]P?:=BED?;<=?>>??AA@?;?IOSVUQNMLHD@AMZVMFFNUUQG>9623:==AGHFEJPX[RA8<?>?NhuqcL<@IR[^XKA>==?=:<<<;<===<?GKGA=;9::;;;9:;=CEBBDFGILKFEDB><;:<@@E[ibLDMMMKGGGFFFFEDCCFFD@?ADC@?@A@;89;987668:>@?>>=<87@KLE><;9>?@@?>;=A?965469<>=::;<;<CMQD853479999:50--,<Z_WX\\[TIBA@?>=>6-.568:<<GYYMA2+/1/1257<@?;=BIOL>127<;/)2;66D;5854?PTRSNE=::4.19<?BCA;88>DMRYfnutze=Pb9:386635?GC>?ACGF?7763//23310256613=Rhoqxp[WI:2]|7JMXjvOAJKFBCDEFEHI7ʆMvzvsZI\\-2\\|A95//001000002357:=@BCDGJLLKKKLJC@B?<=87>>9@FA<@FINQRPLJKKFBBBA@>>@B=>GNJDЫ㭉v[eZa`JKKKLLLNMLMMLLLLLKKJJJJJIGFHJJJKKKLLJFDCBA@DIMQWXXY[ZYXUPMJFDEGGILNPOKGHJJKLMPTW[_ba````bcddbejf\\]da^dS=AECA@@AABBBBAABEGHHHJLMNNNNOOOOONOPSUUSQPPPNPRTVXY[\\[ZZYYYWVWXWWXWWVVWULIHLUXUU[`bcfd_XWYZ\\]]_``_aaTC>>>BFGGHHHKPKFFHFDHMNMKKLQW\\]Z]cXFCGDGIKLMRZ[RHDCDEEDCDEEEEEEEDDCDKOYbdZOYgjea\\b`gnpmfe[U[\\\\Z\\e_Y\\ZfdbYT]behidaVWgheTHMPONTY]]\\Zhun_fottqlbb\\fwlRF=FJIIIHFFHILNJ\\kcfmxsD8979;<>BEFFHNXUEJVMHNPMC?;77:DDF?q^P]eR>9:;;>EA:<=><;:<==;;ET[TE@C@:BTjrC5====<<><=?@??=>??>=>>>?>>>=>>>???>>>=>GRSH>TvxfETVPGBA@ABMVXVVFWe]hgbZX^_VZkYkgTLMPSSMK_s]FGZ^YNOi|vgUZ`izmUSDN~^OWEuTX\\fpvnkbcJpub]aYHCCVͼslmzd}oz}θȼ~{ʿĺʿ®~~}|{՞ùϪqxwwv~wqnĳzeafswÅtpoE]yzx}|gPWmyxk```cgcZOHINWbipz~iTEITSPSNBWsQXv`vs|_bWWX?JsWpźõ}{wheZNCETE8:GHNBJ`FOUHXg[UO9:ZMALL]WILEW?DNWVAQRRSKLFAOSLJIMJPRGGHKLEBAJ@@@B8C56?P?>788:<>??ADDEGHMMQ^`]de\\\\[WSPMMQVQMI@DSYUPOSTTTTSTVVXZYVPMIJLOTTU[\\EEC@BB>12<GKRanr`WURMS^bbbcX[`c^]]]NMMHC>QhcI:Fu|`Rhw]TmeZUXchfhgfda\\IBEGHJJI[k_IGULALPCASZWY9ZkMBA=DWgi`R?1@SVORa^B@EFB6//23445206BFEA;:@HNRSQJ<:AI<3989GPOHHNPSWN93636BHHKOQVaaRKMNIQ^TC=;79;=DGC>BMVVNHGDDEC?@ACGJJE=9DQYXNFN\\^_b[LHKPVVK524@DCDGIO[]M?<?@LnY;<A>=?BBDC?<=@@@ABB@??AA?CQ\\^YPJKKMMD=EV_ZJCRdcYMC;55<CC=<DKKEFLNMIB>>@BFYormi]OFEMTYZPB;:9;948<<<>@@@@=;?CC?<;<==;:;<>CFC>?BEECADGGDB><;;;=?GS\\O@DLNPLDDEDDDCDEGGDA@<>HNKEA@CC:568873368;?A@?>;869AIJD<755;@AABDBAA?9422368:999;<;9>EGA96655579;6/-.06I\\YRUZWNB:@CA<=;1,5=>??AFQ^X>31.22457878<=<AFJOJ;.5;=A;622.3C<57648CLNKHIIIMG629;>CFF?77>IQRWhtv~X<=Ks`?3426899=AFA=:;?CF>34875555441/3;@<=DShosz^JIF@@XRNPJYoZ@3<JHC??DGGGH=Uԟ]e>4o{}jPf-1HM2100011000003357:;ADBCGKLKIKMNI@>@>735<@=:=@=?B@CMOIKMLMKDBDDCABAAC?<EE;-R軒۱؃jgfͶzV\\g`JKKLLLMMNMNONNMMLLKLLLKJIHGFGGFFFFFGFEDBAFJLOSUWXXXZZYXVWURNJIIJJLNPPKGIIIKLLMNNPUY[\\_aa`aa`^_ec[Z`XFJPC?CBAAAABBBBBAACEEEFGILOOPONPOOOOOOPQQONMMMNLMNNMMPUYZ\\]]\\[ZXWWWXYXWVVXXTPIHPWZ\\^_abded\\WY[]]]_```ad`O@=?BDGHIIHKPOHEFGGGHJMMLMNRYZZY]`RDCFGHJKLOSY[WJ@ADFFDDEEEEEEEEEDHW^bge_RPVYY\\]aakqjinseZ\\[VS]fXO`hebbQUagdd`][TUb_`RLNUZ[chpqnhousbrnigkgdfaspnmTACJLPQPPQPQSUQ[rggmx{H9;9;;:9>GHCBMZP<FVJ<?BB>=;98:DF>TlSVfX;6::;>??<89:7:=><<;:8BTZOA=?EB84>odA9====<<>>=>?>==>AA>==>?@>=====>>>>>>>?ACLaVSOfJm^[SP?=?ABFJJJGLKBjʮdXjjbWOZ_LtƛkhwaYSW__IGq}hssSN_YKEN\\]WJDR^gpymUERSSPVVh̢bXgzwnaVf^Lsx`[`_[]crȷφtszíʶvŪȽƳʽ{~yt®ͱԴnvĮphswnundŸsddfgvjsysFTpyu{qbQVaenqpmhcPFHKF<5Bi}plwjVZkZKzMXoZP{\\VU@@^mϵyttvxwso^XNJLC9@EEL=F_FNTDW\\RMI3@UCM>W^KNFPS>HK[VJUQUWLQCCUSLKKOJMLEIHIIDHIG@=BA@=-<OLC;7868:<==?AAAACGIHT][[ab`\\SLMPMNTQMOHAIVWQQUWVUUVWVVYZZ[XSPMLJLMP\\dWKF@<BC36ALKJR[_WTSQQUXYZci_bee_a\\[SOJ@<Q^fV@>>HSLKBF\\{u`Tene]Wckhjlkmc_LEGKNMHKicG7=OL9ALIJTZZVBUmFCLLHL\\ibP@1NjbWT]P@CG?3-//022244227AGJKKLMLLMMD7<DJA8539@BCGJFJPE;6:=;>EJIKQQPWc]RNOLJKIFCA><9:==<?ENQMD?>AC@<:;>ELKE@A@>FUWMEDJVb`VKGIMTO@7302;BDD><NbXA<BFDY~dE<?>?ADFECA?>>?@@A@@@@ADEBFT_aWKHGFOUI>EPWRE?L[]VLD<9<BEFC=?HJFCFD?????AGMaupjhgh\\KIIGGD@>:3345:@BDFFFDB?;=@A?====;::<>@BA=<;<<=>?AAAAA@>?@@?ACEG<9DJMOJ@=>?BBABDGG@>CEGOROJFCB@:115645677:>BBCB=659;?EEA85;CMJHGHIFA<622246998:9::98;9314885114776558:<FNFET\\ZS@/6BA:;91+4A@?;:LWdZ:-101268876668@KJIMI=13:<AG>3327A<545868KQKHJLNRRF=>ADEGLIDCGORUdtxx~y`IHGA???;889;;;<>A><;;:9<>6/034443233138=ADEO`ouzdJHFEEKMPYUUZh{Ț<9A<AGA=?C?>EC0S+5=DxtTq13<y_//001010000133589;AFEEEEEDCDED;7;>;538@?:<?@?@A@EPMEJPMLJB?BCDDCBCAF=>:65:f[Cױ͖qjbeŒb\\hgWKKKLMMNNPPPPONMLLKKLLNNJGHIFEEFGFEDDDDEEHOOLOUUUVY\\\\[YWVVVWVSOLKKLLLNNLIIIHHJMORPRX[]bca__`_^_a`]YZ[PACFAABAABBBBBBBAABBCCDGLPQNOQQQPNNONNONMLLMMMMKKKKIGILNRTVZ^]\\ZXWUUWWVVWWYZULFFMU[_`aabegbYX\\\\]_```aacd[H>@@BDGIJMOPOKEDHJIGGKMLPUVUTVVX`\\MFEFFHJLNPPV_[LCCFFDEEEDEEEEEDEIWeiloi]VQMLNTPPd`XZbfa__]]Y^cUQ\\]\\Qba^fkkhb\\WXTZXXTUNQcggglopg^WS\\od`a`ccdZoqllP>;JY__^^]XUSUOVwhgmwP@@<==<=DGIKBAEC>BJE;;<<;:<<:;JLEUYgdI>=;::;;=BGIF;GSVSNG>8?QSE;;<EG@9:KYk\\C=<=<<<<=>=<>>====?@@>=>???=======<=>??AB<C~eJYcxW2r~\\OLCBCEFIJGGHFLFE\\QVdg^SVXNqq~eNJV^N>Qsb]~z^T_YONRTPLGN[^b]_|WGURPMm×lq}udaR\\wOTlrgXZ^{ըѧʶ˼úww{zĸûƼͽô}zzҿүã}p¾j`dqmYrlf´ǽrfgejxjp{oKTjsjylhfa`]Y`kpo{yngZMcvZfx}|\\Ue|tsIo{]@jhXTG/sͶĹn`^gv}~|h]XRLC<E@DJ6B]DMN?OPHF;1HHDP:bTAQJWGAFJcOSQLWWRTALWONKNQIGDEIFJDGILB@@ECE31FWIB79:569;;;=?>>>?CCDMVXWYYXRHCHMOQRNMMMHHSWQPTWVVX[]]]\\[WVZZYVPKHINV_[OJ??ON34CNJGGCILMMMOPONP\\kfd^chkjeXRL@Ino`G8=@=3=YJ9DT`z{h\\P\\old`aeegfb[T^PFJNPNHIQC59=@C@>KRKQYXWHH\\JKMOOHN\\XF=4K]ZYRYUJEE?50..035689<:425;AEDA?>?C@@EGI@7118@BDHG=8859BC@BIKNVVRPNNWWSKLOMIFFEB@=:;;43<CFIID>>@@FH?7=HSMCCNRC?Q]TPPIJUSMJHDFMJ649528@CDC@DQRDAHK?:Ne\\GADC@ABFJGDEGCA?@@@@>AABFGEIS]\\PIHA9DMG?=?DLKGGNTQI?68AEFGHGIHB@A?<:::;>ADFSfihgbb`RFA?<::;=AGJNQNLPROMIC=;=@?>>>=:8889<??>=>>===>@@?>@@@?AAAB@=<<<;AIKLH?87;?@@ACED==HNNRSPQOHD@9246427<<=@ABBDA;79:79@C@9;JSY\\UKLOMLC98:78:<=::99989;<97899533345689>@@?@69Sa_WB/6?>8;;0&2CC?98J]lY:266679753252.AQD=HK@45@@9997679?=864620;DFHHDBGLKEB@CEFMPLHHKKNduna\\Q?=FIGDDIHHFD><;::===>><:6:@:.+/1356557769=AAFO^jiN>DA@AABFEKV_mt͛;9DEGILROC99A<<76BUYy~Wxx794ev50211011101134689;>BGGC=;=@CEC=>BA=<=<:78>BCBABDGT]RIJLJJHEEEGIFEHEPIGD>?>8=@CUϺuuo_\\ehoycV\\jePKKKMNNNPPPPQPONMMLLLNNMKIHHFEEFHGFDCDDEILLJKNOSUX[^][XVVWWWXVSQMJIJJILNJFFGGGHIJLMORTTUWZ_a``b_^][XV[QCCCBB@@AABBBBAAAAABCFKNOMMNPQPNLMMNNMMMMMNNOPMIILMNNPPPMMOPQTUXZZZZYWVWWWYWRKEGOUY\\`aabde_[[\\]_`aaaaabaVD?A@BDEHQTQONJGIJJHFHKLXe_SOQSTWWNHFFEFHKOPONU`^PECBDFDCDDEEEDEFIKT_gokbb_SOS_\\X[UXVUY\\_dhlb[XTRPONKYjbcfjmke`dZXVSRSQO\\_^]_iibYPMTagae\\dfVPkvoeQ7BXfjhfc`[XUWRTwgelwUCGE?<<?FFHQJ@:<CFFA<<<;:89;?DXLgiSdlT@A>>@A>8>DNWTN^ffb[YTE>FF>:;;DD8:EL==mpB9<=<<<<<<<<<=>===<;899;>?>========<=>??@A>Fyu[LM@<h}RGHIIHGKOQKFMRGBDTogLHLOSUSVKY\\Dbz^GADFFEFlwjdYjyxzo^ZbZSMQYXROWa_^\\Y}VJV\\ZORźŰu|tewgpv`V_lf\\Z\\^¯˿Ƴ̼|r{óöʽɶŹ{ɹԳжƕm{o^XaooVmsɺukjp{zxyufSYikgvlbXTYdd[UUWRXmnsxa_kUb|i\\wwak=Ty^T=Uʩ~f_XRSnzda`P?@D6DH3B\\EKE?HCB>.5M?JHGaI@NSOAECVaHTHJYXWJBUVKNJPQIHAJDENCNFFG@EDH>2:TKG<8=:56999:;<<<<=?CIOTUTSTUPD@@CRQOMKKLMLPTSRTVXX[^`abb^XTY]_]XSOOMMT[WPK_mW22BMHGG@FKKIHIJIFFQecYJQajuvpbQEXkcXH@CB?7A\\O@DQ\\ttf]RSnhekded[PLEE\\ULMNPND?86;@>9GTHAKNVYRM=2LNGENPJFLH:5115FXRX[QB=?;1)-7;?ACDA;3,*.27;:657;>@BCD>754;DIID>92/9BJE?CKJL]e[RV\\YROPSWPFGFDA?>;;955=DFGGA;=??KZSGMX^M>G\\aSIR[Z^e_TMJEIIECIJ<15<?<9BIJIFFGEDLQN=;LMJHECCACHJHGKNJDABBCDCDECEEDGPXPFEEELTSG:9ER[]RCDJLG?AFHGHIKOQI?BD;789:<?ACB@DSkjRFP[QB><::;DUaehf\\RRVUQQLA9;@@?=>>=;889;>ABCDFEDCBAA@AA@@BCCAB?;<@C>?CHJF?::<??@@ACB@BJLKOQORTNE?::>;415;?CFDA?><;:;;:;;==9BS[\\aaWSRSVN@?A<=AAB?<;==;9<>@>;;;;:765535<@CBBA:;Pb`VGCJG;6;=4)4EC>;:K]`G66:;;=:213662-=J8.:A<29D?211468:??:;=85439DHD=8;CGD?98:=GNIEC@>@N^XB9>EE@CEFHKNLJG@>=<9==<ACCD=49@>5/06;=;<<<=@A>AEENb_HCC:=<624@Vdɼ{.4KegRUXTH@A@AKhJ<?=RYiq~{Tq|>>2MG2322111111133579::;@B=99<@FJJJKGB???9458>DFEFHHKbqY@DPRTUSRRQQTSQQSPOE@BFGCG@/^ƊhhWBCXeZRbkbYY\\W^]QKLLMNNPPPPRRQONNNNNMNNLJJIGFDCEGGECCDDEFHHGIMQTWYZ]^_]ZWVWXXWSPQOIGHFHIHHGIIHFFFFEDEJLRY]`aa`aa_^\\YWZYJACCAAAAABBAAAAA@@ACGJJHHHKKKJJKJLOONNNNOOPPQPKGEFGGKNNPSVYYZY[[ZZ[ZWWXXYZZWSLJNSVY]`a_`dc\\Z\\^__aaabaad_OB@@ABAFQVQQTQKIIGFFHIHWjdRNOOPRQJGHEEFHJMQSRNS_`QGBDGEEEDEEEDHOSMGPY_^^feVXfmoplilfbeeaalmd[SRQLJKSP]a^\\acglnh]ZXRONLQUWajlla^_\\aX_njghgfVTeqodRBSadggeb_]\\[\\XVxgdluXALOB<<@EGFKLJDAEIHB:99;::6>OVYSW[jaF?<:?BJQOIACSVRZaa]YXUK@<<;<<<@@@N`_I:LiiO<;<<;;;<;;<<<====<@DC;6<=?========<<>>???>@GSkdA8gi\\QGFHIJMOIBM_aEBGKMHHLJEDGKEV{}yndgf^RGEEDHPOY~wjgZUnzb[[bWJGPTRQT[]\\[[ZrXLYZXTVvzuhshke[VWXZYts͸ɶþǻΰʽx~wy{|~~ζϿö̻zƳƹӻ̫u̟z~kb_`]iiůz~qnv|~gzcZ^ccopdckcYbmpid^XIG]~_k|vqkawpx]_az[zmUOtfGcīwg[[TJIcmgiYAEF6CB0@PALEEF;>8*:H=NERW>COREBFFgKONFQY]M=HTUGNHSOKMEQ@JKCPEBKFGFK=<HTGB<;B;7:65:99::;<=@JSTTSRPOQQGC?=MKLNJEDGLPRTUVXZ\\^^^]]__YTV]aa^[YXSKMZ_V\\X07FNDEIBGMKJJKJHGIPYRICHVjjUO]aSPKILB=7:RUFFTguobUmjgvrhaKBOQJ\\UMNORL<979==;=IVP<?XbZLHA7ZYCBNPKIGA:1-)+@VRW[ZK?@<2-3CHCEMMB3142149;977:;<<<=?=8::>FJIA7554=FGCAFIECP[WQYeaUQXae[ORKAA?>;9;ADFGGGGD?EIHM^gebcbK<JbjWORQQYcdZMDBDFGHJMJ<4?QPABRNGLQKHOZdcTHLSRJDEGDCEECDFJGCABCEHJHDBBB?ALOD?@=RprcNBIY_[UG99@KKMYYLB@EKMIA>HL@888;>@CFF?4Cd`=/C^_J>=<>FQ[cfec`WRWVUWWM?;??><=@C@>@A@?BCDFHHIGDABDCABBBCCAA?<;?C@<=DHC?===>?@ACEBAEHGEIMNPSND@@B@96646>CC?<;;:9867:<::?<?NW]cde[USQJ=:><?DDDB@?@@<9<@>=:=AA>:9868;?ABCCED:E\\]QLPUQB66<?8>IA798HOB486;;??723;=;97<>4+/3329<84344547?@88B@?C;@GDCA>?FHDED>;=EONG=79<BF@56@JH>>BEEGGEDC@@?>;===BEEFC6-5DC:7:=>???ACFB=AGIVcWJK@<><3.5Mfr߫S2;TriLFEBBNHEHIGAFHDSɇj\\llGlA@9FZ0222111111223579:868;;9;;:=??AB?<;;:867:BHLJIKIPelSDT_^YU]ge_^`bVNJLRHBIMLPUK:.AskrQ7`eY[PJNawdSUZUKKLNOOPQQQSSRPONNNNLLLLJKJHGECDFFDCDDDEEDFHLRXZ[\\`dhjkga[XXYXWWSLHFGFFGGHHHIHFEFINTXZ]cefdbbbccb`^YUX[UIAABBBBAAAAABBAA@@CECBBBCCDEGJKJLOOOOPQQQRRSSPHB@@ADGKKLOQTWXYYXXYYWXXYYYZZYTOMRW[]^_^^ac]XZ^^``abbbbcb[NA>??BEKNNRXUOLGEEEGGEUjdPLNIHOOHFHFEFHHILRVPLT_`VJCEGFEEFEBBIZe\\POVVTWXUOYie_eplkkllfa\\`be]TRUSPSXV[^[]`cjg_WVabZW]QYa]boodX]a\\\\boplhriaa]^rpd[Q\\hefgeb`^\\Z\\[Xxgckt[AINFB@EHKLMPRKDCGIF>:8:;>?M^`RnfVcfSD@;:AKU]YOD@PWKMVRW`T@>?:9:;<=9<WggcWOPLFFC=;;;;<<;;;<;<=<<=<Soo\\?=>=<========>?AEHGFTSTJQլ|jMFHJKIEBHNzQDEHLORPLF@@DMa~jWTRNLMRURS[{yng\\Tg~nr}YYZbUHSSIKU]\\WWWXZWZLWXuȴ{vzyqixya]a_ZVQVhYï̼ļƻʳŽyvzvzȧƽ|ձŽλʮvvhZYaabo˻{tnzpfoaZda_fozh^WaicXYcjhcb^^tywrpthSsrfr`Qx{sxa|^XZj_iԵ{ncXURJAAVs~kgbMFF:>7-?=:KFOI><6.:>AOGRP<FIF@EFZb?XILTRV=>JRTDLIRMMQLUDPBGOHFKLFIHCGIIJ;D@E<;=33;7899:<BKUXTRRROHGIID;:EGKJD><BNTTTVW[^`b_][YZ\\YUU[_a^]\\^]TNOSVYuV/;LOGFHBFJLOTVQOOPOICDKT]olZUZb]OKIIJB;35<EEKUj{lX]rotoXaBBN^RZMFORPG959;98:>CHTR@OgSCGQD\\kPQRNJIGA>4.3;BOW`ebWJEA<18KNBBKSL75HL>56667:<;<<<;;;89=@DDFD;1.6@DDCDIIHHIJLUTVXVW^ceehfVE??><;@IONJFGKKPUUQWbgc_[[QITbaQUTMJPWYWOD?<AJMJLMG<?PXJ?JMFLSNJUbjjf\\VSPLDBDB???>===;;<=?AEJH?:<=<?DC?<<:JbmleWONHA9216=HRck`K?@EHGE@=AGDB@<::=@DHHAESJ64ASXLBA>>KZcdfghi^TWZ][XQC;=====@CBBFIE@??@CGHIIHA?>@BBBBA@@@><=>?><:BFA><=>>ACDEFC??BEEDHNROGBACE>67<<;>>;:89;;82248:;;;<<>O`egfaWPC95689;?BDEDB@<::>A@=8<@>9778;>ABEFBBGD;:KWPMSRSK>5;FCCIB>@BDD24E89>@<7:=@@>?A=541/014:<73345644<@:4:?A@BEEDDCFHIHFKMGDFIOOE<<=>>:57?EFEACEFFGEGLJBA?<:;=ADECBA:229AD@:8::<>AGF>:?DI[WCKL9<<:98=Zne~۠_QMdsY>4626RHACGGELNK[v͏ZHI<hBA;:pt522101111122469::9989<>=;97655699988;::@HLNLHKLJR`[[c]WW_qywwqcaVMGLZXJKQRW`\\E0)2;MlkXm[MPVSaÍcTSWUKKMNOPQRRRTTRPONONNKIHHIKKIGECDDEEEDEFFFDEGKPX\\`bhoqssrnic]YXWVTQJFFFFGHFHLJJMRXYX]bcdededbaaa```_\\VSTVQHEDBBBBBBAABBAA@@BB@?AA@@ACFHJJKNONOPRSTTTUVWODAAAACDCBDDHLOPPPRVWXZZYYYYZ\\YQMNTY]]^__bc_ZY]_```bcccddaZMDB@@A@BITZUTQJDBDGGCNbcPFKGDJMHEFEDFGFFHKQSQPU^^VNECEEEFFEDHR^^ZYa_^ZOLNV[RJP]\\[dge]\\ZV_e]TQVWY^UWb`\\Uapq_NMUaaajzpw|g^hhaafdbbntslfa`aaabqlch\\Xmokjhca]XW\\_]whdku|\\BEKFCCFJNTXUPGBBEHGC=:8:?JRWVW|S[h\\GB>??FMORLH@=J\\QIOPPRG78=<;:;<=8Bmqhc\\ZVOLF=<=;;<<;;;;;;<<<@9Oe<;========>==@JPicLXdZrǍfgxbLCGJJCACBBfA=IORRQRRJA<@SuYZ]ZSOPXaWYSX~g_[Y[c]f|XPT[aUQWMFQ^a^\\XUTWTw[I[˵douulc]VV]]ZWSVvh}Ϻžʻ¸¼qw|uuû¢û¸ҵģnaX^gpjtȸ~ul{y~{cwic|a[cagcwow{tjeifa_]\\X^klf`VVk~o|jam~}t}YceUdmjxo^Wvo{wѺ~th[ZVKD?43M\\srbf[K?6836<.8JEQIA:507<HMJLJ>H@@BBOgNLQNQLJI:CLUTGMKMOQRRRLPANNIIHMIJEFELCL8MFE=<>3/;7889:;EPTPNKKLI>68;;<>BFKB99=CLRUVZ^_bdedc`^]^[YXZ]_`^[_a_XPPVWXZ@1?MPIGGACDEHR[]]XJA@@BM\\__\\URQV`aM@FMKGA96513APYiymSRqs^K>ZH<@XWVECNOG>76777788:>QhX:\\XB?A<Pt]WTPNDAC;8:BHFM^hg]WOLMF3;OULEHOMD?KPF:4459=:6;CB>5359?DDCEGA1*9IFDFGIIKNJFZkXO^a^]\\TXfmiZG??>AIHIGFEEINVVQUbeZXVTVZ\\\\VNM_]UTXWTVRF>:?HMLHHJF@DID=>BCHLKLPWbkle^UOKC>>@>===<:736;>=<@DB979:<>??>;:=FTn|uZD><:6118>DTpvbJCJLMPRPFAFGLQMC>>>ADHHHE;:CJHFGGGDBER_flrtpXLW^^WNIB<==?ABCDDDGIFC@?@CGGGGFEA?@BDDDBABDA>=>>?==ABAABBABCCDFIKG@=BDDEKPJ?@ADC=7:BEC?<::9:;;98;?=987779?Shkic^ZO=137899:>DFFA;77;@AD=6:;:7789;<>?BCCFH><;>LVUTRSRPF=???EACLHOH;BO><A>:=CD@?>>@;4211367;BB:4357639A>439?ABCBDCDIIEACIHCCELUUSNG?=;74<GF@BGGHHJMPV]VF>:9<;;BGIFEA>>:5:BA:568::<?>989:=FAAL?566:>BBWgIjΑkvcRbhS=DD::A=6=BDDJQP_fuF;7^?<7,[D63011122223469:::<>@@BA?><:989<<:9888>FJJKJFIMT_c`a^TRbz{jf^ZWM\\fVT[YPKJE>>62:HOI|ՐoreVNMKKLMNPRRTTTUUSPPPPMKJFCCEGHJIFBCCDDEEFGGFDDCHS^bdgorprtutroi`WTSPOLFEEFFGHHHMTYWTTX`ca_^^_a``_^^```_]YOILOKFCBBBBBBBBBBAAAAA@@AA@@@CFHHGHMONNPRTVWWWW[YMC@?BA@@BCDEFKQRVZZZ[\\\\ZZZZ[\\[WQNRW[]^`aacc_YZ]_``beeeeedb[RJD><;<AOVUXYUKDCFGDBN`XEFHEFIGDDDDDEDEGFFMSTRTVWXODCEEDDDEMTUTW^ghcaZUWXNKLT][VX]\\TQRTYVSPNPUX_`hf[VQ[eeYNR[\\Ycv~kafheebagfecjph^b^[]hlb\\jh_aciole`\\[Z^b`vjelujY\\VDCGEDEIMQWZQHCBBEFFD?:8:>CBHEq\\PcgSG??CAAAACB@96@[SATZTI88<<:::;<=9?j|rlbXUUTJ<;=;;;;;;;;;;<<<@;>lZ;>>=====>A::?MKclUVkf͚{dXXgndXQGGJGGDCDKQ]8BJMMLPSQKC>DXq|raTW]VLJRcrmdWE`w^ZTUVUR^[JQU^aRLIGO\\`^^\\XTVVRX{WQialqnfcca^][YUW²ƿĹºȮľįsw|z{z{Ҿȹƺɻ¥ȳk`_Tpvltsmwydpi\\vo^\\Yhpu|cdq{sf``_aknmlpuobSMMMXw|lzkTaybPWYY[Uve\\[xǺwsjUTYO@84.1CQgle`U@348C;0>IILKA8835>JIMH@>C<BCB\\aKTFUMEKC>GRURLQKJSURUKOOJQNHGHKLGHKHMDG@QKG@<A8/;98768;BEEDB>AEB;2028DEDFD715<CIPTX`fgfdfhgigec_^^[XY^]]_b`^]WSWWO:0>JQKHEAA@:9DOXYPA?DFGPTJB?EPY^^Q72=IKC96557;DQ_nwlRSejPC<UU@CYZ[IAFD>97655666556<NYCMc[G8>GqdQRVN=:A97CNMKUba^ZUKHQI6ETQPOJD?<:66<@>?>AB<8<JM@205;?CCACIG;7@KJDFOOLKGCQs}igytc[XMHTdrr_JCAEIC;<ABBEJNLACDAENPOSYZSJJN_a^_`XSVRD==<@ILJIJFC?=<<:=GQUSNGIZlnfaYNJGC@@A?=>>;758>A?=@B=78::;??=<;<=PfxgKCABC?64;?CK_cUMU][]b\\UJCDDP`_RHFHEA?CMH9APSI@BFFJNHCGQY_a^KBNRNIDBA@?>AHJIJHDCFFDCBBCDDEEDC??ABDEAG\\YFDB?<?A??C@?EJGECBBBFKPQMFA@BCFHE><<=?;9:<>=<<=<:;;=BFIHB<;@A;:=J\\ejcWOK=7::9997<BCD>988;?BE@99:9;=>>>;756:CIE<<<7<AHRVUUOK@9:>BACIHQKJROB>89?CDEA>@>=94013588:?DB=:98879>@936:<<;:?FLPNDAFKMHCCHPQQPF<9845CPK?@DEFHNRXabVG:6:=<=EKKHFCEHA9:<==9678999;:97675<OG55547:>@9F=Íu~tH?EBDhlXL2/4;==?DNOUW`޲yG1S:,4-FZ;;531121223358<=;;AEDCCCB?>=<=>>=<;87AFACJGHIPvaJMU_btsvr^[YZn|d`UDFJE@<;:8<FOgsuhWXYwtXGDNNOQSTUUVVVUSQPPOKHIE@@CBDJKHDCCDEGGGHGFEDDO\\^^chmooststttrk`TLEDGFEEFFGHGJSVOMTWXZ[\\_a``aaaa__`````_WLFGHFDCCCCCCCBBBAAAAAA@A@AAACEFGCELNMLNRTWWXYY[^XJBA==?BCA?DMU[_`_]]]]]\\[Z[[\\\\[XTTX[]_abbcec[TU[^`ceeffggec^PFA=<<<DQWY\\]YPEAFHCENQIFGEEFFDDDDDCCEFFDEMTTPRUZ^ODDFFFGEM[ZXVUTXXRW]`YOPRZ^`UKVWTTTTOIKPUUWXX`haLEN\\ecXQSZ\\Z`jjecZY_c_^XV\\c_Y[_hkig]Z^ik\\XjoZPRdssj`Y\\]^adticjqdRRQECGJQVXY[WRHBBDCCEGFB??@<7:@LtJV`VJH?>A@=;;;<==<>JG=KIOP<6;::99:;;;8EV[cpqh_bi]D;=;;:;;;;;;;<<<>?7SwE<>===>>=ML<BMPMVTQ`la`R]UPRVab]QHHNVHFMXRbE?EHKLLKMOKD@BVd\\Z\\ZVRLEI\\qqodQ=DqeV\\TTZVP\\qkYXZYbaNEGNW]ZWUUQMZiPUaTNexiighiiifb^\\XRWɳǨtyutrŹҽͷǻúʩ}p_YupǿƳƹ|pkljv{oskWzvw^XL_q{}gQ]qtvo\\YXXWVcw~ujZVY_ssz}yxhdo|ygN[_egHPq][r}h[TQRI;48:<==>Rpxj`]L82CMECFETHKA8;45BHFMF:=<:BALa\\SJLPGCN>DMWQRKNJKUSRQEOONOOHCFJIFKKLNN>NPKMD>G>3>?;757;?=<><5>CBE85;@DABD<1589AIMPV]bffdgjjjjgc_\\]ZRQUX]^cc^^\\VVYUO49HSNHDAB@317:>A@?DIMTTH<=GOPTWK=236<?8002;GNKN_uoPV[iOJHP_LUb]aJ;:988777667887532D[<SjcOQFnnWSPF==B=/6IMQblhcaXKFLH>MLCKUI72322003;FFDFDCFMPE538;>?@>BJMKHGHG<?OUPJBHc{l`YWTJK^szv_IEFB97?DCCGG@;533=TZRQXRMKKSQX^`b\\QQYPB=>9;FMLJIDCA=;;;AOX\\VIDEO`ml`UMMNJCACA?>>=<>@AAABFD=9:;88<<8:<;:WpupUDFCACB>ADFFGHFBMcog^VKEB>=>Qf`PJORG<E]gPBRYVOB>@CJQN@;?AACGGDDBBBBACCAAFLMLKJECEECBCEEDDDDEFE@>AED:PVCEC>ACBBB@@FKHA=>>?CGKQTL@>?AABA><;=?=<;7448<>?<9;AJMKFA><=GHC=<BTgeM;>;9;:99758@@?<9889<?><7699:;?A@93028@FC?:5222:EBJDIK@32;A@DGIHIOTJA6.9HHDDCBB@>:53666568;>CFFC@B@<=C@66898679BMSQHGJIKKE@><:::;64307GOI@=::BIPORXUOH>;==>>FIE=78AKJC@@>>?=:8999;<=<<:9HT>78:998:=:+em寈r`~L78=UrpbK1/59:::CLPLF9fk2PF1QM@}xBED9322111335:@?<<@DECCCB@@@?=>@@?>>>DA8:@BFDGacJ>G^yrvu}zIJZWksdkjWHEA88989=>:<0bʠ}`ZZgnUBOOPRTVVWWXVVTQPPNIGHEA@AABGJHEEEEFHHHHHGEDGSWRU_inoqsuutttsrl\\KCCFEDDEFGGHKNLKQWUOS\\_`bcdcbbbaa`_``___XJAACDCCCCBCCBBBBBBBBB@@@AAACDDCBEJIJKMQSUVXZ[[]]SE@=;<AELW^ba^```__]\\\\\\[ZZ[\\\\\\[YWZ\\]_aabbdeaVQV]aceeffggge`WOJD><;?JWZ[]^ZNCCHIFEFGFEDEEDDDDDCDDCEGFDFKQRSSWaZLIGEGJJMUXXVPHN\\LQ]^TORTY][SKMLW`^[XTU[b`]_Ybe_OAFRff[SRX^\\[\\XVYPU_a[XTQXdkXZ_bec_^]cefbeqk`TWesund[^`\\dnujbdsypg]GCLT]ccdaVIECCCBBCGGFDEG<9>CgzRR]TB??;;CA>9:=:;ELD<<?BA?B=88::9899:;:756Ik|xviJ:;;;:;;;;;;;;<<<>9AmR:=>=<@C>`Z>O^\\RSRWd[vrJEECJNPPV`_[NHcPCMX\\YRp}WADGIKJGGJJHEDGNUX[]ULHJP_rh[PB=BTZU^d][[\\gq^`ia[d`PHLUVTSSPOQPbjQVbTQ\\_e_l֠uqlghg`]^``]ZW^ò®Ʃ}m|qr|rýȶͬųŶrdedYϜĮtehn~{zt~lVtyh^PKZwsmoYfujmm^elhbdkqu|{x|~zmj^Se||jgsvu_PataFs}On_ʻnYLNLE942;WM;:6EQwy}ygc[F8NOONA@ZIJA7:06GDDH>898<CEX_^MHPBIIF;LSPRRDLKNVOQJDQMKLMLFFHGFJLNOQFTNKRE?H@>DFB954:=:<?=79?DE?DGD;8;F=6EH=>GLRVW[adgkonljie`ZWVSPLQY[_c]XYZWTU[F:LUPIFBB=1/33/0:?ABKSMAAIRNA>=954441.3>HLMSTNM^yzHJMgYHMN`Y\\c[^G546676798679:89:49SM@NjlcF^sYKJZee_V;,9JRbtvrh_UOLJJF=BMN@4587440/6>@BFJLMMOLA98:9<?@CINPNLH?35AJKLECbhPPVY_^FQo|w[GC?;?EFDCC@9868BU_YS]^GEQTYVY_cdYKT_P?=?=>GJIKLGB@>;;:?JOPMCCDFNbdOCHMRLCAAA@??@AEEB@ACEFB>=;87:86;<6BcdUMA??><@EGIIGECC><F]mj\\TQOGD?;NaVFGQQB7RQTndZYH<=ABGLKCAA;=BEB;=BDDCCDDDFHIJKJGGGDAACEFEEDFJZlrhaf^ARvMHEBADHGC@?BJKF><=?@CDGGB<;>?>>?>===><<=:878;=??<?CJLHDA@<8BIIA88N`T@:887:;99746<;9999889:99879:87;@=86569?DDA711148<DKKKE6-09@@CJKGIKKD=04EJGEDEDCBA>64777439?@AHKJKNLC>B@879:97766>EFFJF?>@?<;9976522225<=:7621?MPLLIAHOJEFE=49<;3008CJKHGC>?DA<;:8:;<<><@TI8:::9987:8:j,M7[bB@;CflZI9026:::;AIKHC2G=RawI@oGGI=322211139@B@>?ADDDEFFDDDA==@CCBCCBABBACE@<99>F_uqyn;ETPckR\\zoT<636998;>?=CӚnkktyoukOMNOQTTTVVVVVUQOMLIEFEBABBDFHHGFEEFHIIIHGFFILNOV`emprstuutttsog[JDFEEEFFGEGKJHLOKGHMW_baceecccbbaaa``^_^WJBCCCCBBBBBBCCBBBBBBAAAAAABBAABDFFFHKOQRTW[[\\[\\[NA@BGNYab^ZY\\_^__]\\[ZZZYZZ[[[ZZZZ[\\_``acdef^X[`adedffggggaVRRND=;;BQZ[Z\\\\YNCEIHGEEFEDDDEDDDDCCDDDEEECEIOPOV]\\WSKEJW\\ZXSQT]bethb]XNKRUYdd_YLGMY`a_\\_``_^[`qpdYKIBWa]USX_]^a``cfkd[\\YUOYeh\\_\\Zacbbdb]\\jorhfbhrutmgefecb]pqsxjacnoKBPZ\\\\\\\\YMFGFCA@AADFFFFG=;<K`NdfL;=<<@FC?<==<;GQJ=8AIB48=98998999:<=<;8@RkiYF:;;;:;;;;;;;;;<<==9Onyc<:=<<@HCP`TAGYgcXVZ`]`c?X_QLKMOPZ]_SKcJJ\\]YWQWrdFFIHIJIGDEGGGHKSTYdVIKPONbcP?:?CLSXamg[]l|~bgvkbfaUORYXSRQSRPqIPdUVfe\\QŅmssuthXSVWY^a^hïĬ²lw{~yx~ȴΰƪɭ³˽raXf~oųћudgqzy}kVsv|flNT\\|xqudoekttfh~h\\djouyjXUokGMsmZan|[Ka}^xH]ýqTLPK<96<::_P52+MFJppf_RJRIQE8CWML>584@H?B?1765>IP^cWCNF<OM7ANLFYP@SMRSJM@IPLFLLPKDEHGILNOPQPMKSDBHCIELC<97:=:>D?@EGD=BPM;27<D<8IQE=CRYTSZ^ahqrokjiig^VWZXPNSVY^]WSWWSQYTDRYSNGB?7/065-.:??;@C?;@HME711244331=SdjcTPSOMaxJ:>WcUXRcbKNMTA355556788778878892GaO4C_jHPsX:Nszq`JEOSUenngidYTRI;;ML<:BD:4235316>CHMOMOQPJ<8<:8=CDFLNNOK>439>CHE?H\\mtthQDJNUbUD]loxlJCKGDA??:988767CSWU]bU@CUZ]UU]iiRBP]M::AHLLHFLSMB=<;;9;CJKIEAABFPL=7BJNG@@AB@?@BCFEB@@?>BCA@?=;;:<>==FSH;7<@==<AGIIFA?>BA>BN\\figkiSGB>FPIBEIH?8Kry_cxoaYG=@B=>JOFCGHGD@;<CHGB?>@FIGEFIKMONKGDCCEFCDFFFG]wfWFHCDHMNI@9>JPPH@@ACFFD>99:=@><==>>=<==::;:9:::;>BFHIHFEA@FMNLC;>EF==A878899:9989836898889:=>><::9:<=;=<:<@AA@94540BLSSXP7)/AFC?CMNKIII>63DICAEEEDDDEA8787877?IJFIMOORPG?=<9:778776457?LTOHB>>=<;;;840363.,,,.0.0<JMLLE<FURPOK</7=<4368>FKJIIE@><:987679:9;IQ:776658:=<*t30Cm8071395?diN75877=?>>?BBAA81B\\mQ@^xF7QYBG>32221103=BA?@@BDDDDEEDDCA==@FD?AB?CHKLKEBDEFDNb|[>JQJRdRS{}?&.58;=<=<8wxrwytqrdMMNPPONQTUTSUSMKKHEBBAABCDEHGGFFFGHIIIHHHGHIKRX_empqrsuuututlhdPDEEEEFFFFHHIIIIGFJR\\aacdeeeedbbbaa``_^^_WKCBCCBBBBBBCCBBBBBBAAAAAAAAAABCCDDDGIJKNVZX[[[^\\J=J]a\\RKNX_ac]^]\\]\\[[ZYYXXZZZZ[[[\\_`_`ccddbca``bddefgghkgYMNRLA<<=HUWWZ[[YQKHHGDDFEDFFFEDDDEEEFFDCDDDGLNOWZ[YYTHL\\bXRUTW]__ja\\WTOU[ZWbpqh_VHMY\\VWa_YPMWbgj_SSQPYab\\Y[]^cfdchrtiTMTWS]ebbc\\Zfgijmb]\\bgrm`r|ylkfjpmVAQWl{lbaZhxiMAKY]VSLFDCGDCBBBBCEFFFG=;Br]_ncG?ABDDEC@>><>AFRXB5LH?:9;78988899:;;;;:<:CpU:>;::::;;;;;;;;;;<<=;=Uqzf?:=<<@LRSLFC@FXd]TT[^Qh{N]hYIDPRQV[[TLVNT]VOMMMdgIEKJHJJEA@FGGIPSLX_RLSOHDXbQ@AGIOW_cif^bvoo|slhd]WY]b]SP[ZN|~TcW]efXaҠrpttrrdTQRSQaqhhüʺŮx~yî~}x|wвÜ˯ǻĲ·{vm]VYӸѢǩvgouv|hWxv}iu]T_z^ihedw}|nd\\QYsvofY`~hNgu]XVE\\{aRkTELK;387A?<VR:70II;8pqh^VXRCA5;FPLO<4=BLA;@51504CNYcfHEL?AS@3II@HWMEYQULLC;MJJELMMJCEJJLMNNMOONKRFFIGKHKC>;7<>>DFBAJHE=BKE<77C@83AID@IVOGNWYZakniddfff`X[]^WPORVZ\\[WTVVTRRPTXYRG><62265/3?FC?<=?85;@;5344447;Qjspj[NLROOcxZ25Ac\\TMajMEESA4323567767656756862AXL6<SKGqiDUqskpod[SNNU\\ckia\\SG>FOOAK^U6,134623@JMNNLLRPI:9@B:=@CDILPPID=9<?@A?<;7;Qkq`G<;>GOCKZWgmUNXM<:>9689::=75HWSXSGBFTc^CARh_B9BKD46AQYPIIMVPC;;;;:;ALNLMJLOPMMGABGHDBGIE@@A@@BBBA?=<=@@@CFGFDDDEFC<<?>AA@@>@EHFEB><=@BCHYmwsofTGFEGFCBCBCC@EViromtkM5:ACACHGCBHPOE??BCCDC?>BEHHGHLPVXRMJIFEEDACECBACOhYBIDEKMLH=6<KRSN@<<BLPKC<:;=??==>???@CB;9:9:;:89=@DIIHHGCDMWSKB==A?<998889<=::>;6333789:89<???<9:;:<?A@=<==:9?=7568BKJPWN<5BPTK?CSZXIGI76?I?:;@?>@HJJGED>9;>@DNUSRRRSSSF?:;;<602676748EOQSWRKGB>=<<:4/28401/-.//19>CFHGFJUYSOHC?LQI>69AEFIJIJKF9//37776777AUF0544446DO7FU.60]}`:73629547PWF=CE;7<?B?>>8;77,caHWQEwƝPL?8~r:C?322211149<>>@ACDDDC><<=AC?=@A<8:=>><=CC>DJKFEOlYgC@LMJLNMOtj74;=>?>>:>̝mmz|~qw~JJKKKJGIQTPORSLIGFB>>BCDDDCDFFFGGHIJJJIIIHHIMSY_cmpnqttuuttslaVKFFFFFFFGGHGIIIHGGKQU[bddeeeedbbaaaa```^^_YKCCBBBBBBCCCBBBBBBAAAAAAAAAAABBBBBBBCCDJPNOTTRRMLWZM@CQZ`[ZZ[^_^]]][[ZZYXYZ[[Z[]^``aaacccced`_acdegggiklfXNNOJEA<EPMMUYY]ZPLJJIEDCEFFEDDDCEFEEEEDEEKVRPXVWZYYWQNSWUTVWVVVMPPTZ[\\ed_TSdouwoXPZ]ZfngaMBU\\QUPHQP[V_da`a]VSWZ]dmoj\\P[a`acda^]biinvtkg`[`pkez}qmflvnSANdqaUNcoRBAP`UJB:=ADCCCDCCCEFFGD:7PpTdjVHJGCEEDDB@@@BFGS`XTYC37996898889::::;;;;:6<mS1:<:::::::;:;;;;;;;<<:Ffv`?<>?=AZcWOKIGHKUZNBKYYck\\J=ALSRUYUPKMSZVJJPQOO_RDHHECB??AFHGKWVMXXRUUJDDR^QIPUZbdhkjc_p~~}rqkd`\\\\^`YQOXVOV|bZced]tzܬ}srp`SabSPPQOcq˷öȰŠ}n}||xyָǲƵΦЪɿŸÿna}pbXScpͿв}osylz~}h[z~n}ngRPtbUgaVXoz{vj^Yaouuvz|tidk}|KX~mS^ƻqTHIK<46=:?><Ra@;FFLE*=g~ssi]Y]N>/2EENHN>4CKK:;?;D2,9IOalb=IH;LQ.=Q>@ITKNVXUES:DKFHGJOFECEINIKMOJHOPKQGIJJMKLD@<7?>GIDEABFG=AID@=<GB::??AJSPA?KRTW]aec``cceb]^_]WTRQQV[\\WTUWVUSTVZ]UG<9544655>HJGC==?:.023445544:Pmpc^XKABFEMfxf//4TP=;QhYGBWI61/2567666555545995<WeP65>@buJ<OvqfgniWMLMKP[kniaTIBFLPT_g_>+022?JDFMOPOMLQM@9;ADA??@ACKSRICA??@><;9;63Tyqn`MHB;>GL^a_b\\RRIBD@8989:9833K\\QEBCDKbkS;:DVK8:??<5>JSZTMIHRRD<<==;;?JNLPX\\fecbUECDBAGOPH@?B?<>@CCB@>AC@?CGJMLGDEFB>@@??ABA@@DHGGE?::<=<DXlz}kRFHMLKIGCB?>BJZinnoosx^A8;DJLFBCDHNLB?@BA<@HILOGBEHJNU]^VPNMJGDA?BEHIHB@JfmCJDEGHID;7>JQUP@79@JQNE?=<>??====>?AB@>;;;;<:9;=>BJIGJKIHHIBAA;=BB>889:;?HF;;B=101358;;74:;:898889=ADB>9::58>?869C939SWKHJQRWSGK\\f]I?>3<KE457668@MQRROLB<BGHJQX^YUQTUSC@>;==;64667758AHMQUWVSLC==<;4/3867:964421357:;DPZb^MC?HU\\_ZN<5>GJKJHJMI;126::87646NY:2122224<F3~4261.96685656235=@>FFB;8;=??>=:<970DpZZbi>II<d9<>6422213579;>ACDDDEC?>ABEGB?=9898;?@?=>==GKGFFFjjVk|ooeJDNQLJKJLKrƳS>@@@?>:HscpwHIIIIGFEJLGFJMKJIJKLQVYXYWRMHFGGHHIJJJIJJIHIMSW^cjmlosuuutrmh[KFGFEFFFFFGGGHHIHGEHQY^^_acccdcbbaaaaaab_\\]^TGDAABBBBCCBBBBBBAAAAAAAAAAA@@@AA@@@@@?ABCDGHDCFJLF>?Q]^VTVY[^_^^^]\\[ZZ[[YY[\\ZZ[[[\\_`bbbbbdea^_acdffhijjjh]RNOOKEDFGEHRVXWRONMNJCACDDDDDDCCEEDEFEGJXf]T\\YXYWWVTPQUVVWW[eoj`cfeddda\\UQV^gjbORYjtzxrcPSVULEEDVPIM^baeeZOHMSUenkjle^^cfdcaa`cehlqpnj`[ai`txpgip^RBOjgTOYr}XABCaWG=:<ABBCEEDBBCEFGG:6yVXafRLPI@ABCCBA@ABBDEQX[]N>9::6898889::::;::::<7;IC::;:::::::::::::;;;;<:>_iL====;<Td]UOFKNMMVH9BS[_ӂOMKJMSRV_]PGFS_TOT^iWCWmWEDA;99<AEGGKZWOYYSYTFBCJOQUX]aekorqj]t~uqie`\\acXQPMKKNIEsa[ccdjmaQ߼thmmm\\Qm]QPPROdԷƴpwtyrvͮӽĵԨ̺ʻҼc^nlaV^hƿμws|dmszj`{|tkiZ>c|K^eOJXf{zpwz|}~re`hruohbg|pb~pOSzrZȺkWHGG?0>?>C><>H]@;GFMQ@<<[rrlc]_UF57GFKAGA6>FC9<=YV,0FJRetZ7ME8PB.KR9>KQISWYJEL>OEGIGIO@BDDKLCFKLGGOOKPJLKMOKJD@=8@@HIEFA@FH=BGECA@CCD@?@MTQF<?HMQV\\ac`^`bcdda``]XUUUPRWYVTUTRVXUV[`WG:8666767?HJGC>=A?6,,0466645?UWJEJFA;?9:Ddx{>:HSVCFSlSJFYI61.02566655554469=GPV[ZL5,8`}eZ]uwokdeTJKMOQPNipndVNE?JSXejf?+038J\\[MMPQOKJKH=9;?BB@=>?BJSVJ?=AB@;788;5;\\q~yni\\VMSdk]KHNHITO<9DA7:953<P\\PA>@GS]YC79@IB:<?AEMYVUaYI><LSG8:;;;:;@KMOTZ^fogO@==>@FKNIB@B>:<@FHFC@CD?>@BBHLEBBB?>@?>>@@?@>?GKIC<:=>>ACFXvwWAHTXRNNNQPG<>Ml~xwvt}}t\\GEMLGGFFHE><=>AC@?BMY\\TJIJKOV]\\UNMMJGEB@EINSMGPlnʴTKHA@CFC=9<DOXVH:8;>DHD=;:=@?>><::<?@?>=>>9789=ADJOLIJIKID<=A@;<@B=8:;;8;BA;<A>413468;;76565246657=AC@;7763:>;768>5.8DRHPVTRWWOS__H<818AH914515BOTTUSKFFDHKKOX]^UIDJLG@@?:>?<@B776663=QW\\QSVYVM?=<;404865:<::970/2334Cazu^J:9GX^^^[M@?EKKKJHHE=547:98651=UJ8552223573TE045363;<7453223454=A?;98::<>===<853/=J_f@DC>MS5=7322113459;=@CDFFDCCHLKIHEC@==@><>@>>>?AHMFEEET^TDO{up[NMS[TMJLKEKsԳc@DCBA>BUWADfHHGGGGEEGGDCFHKNPSW\\`cddfea\\RJIHHHHIJIIIIHHIKPV_dgklptuutsqj`VLFFEEEFFFFGGFGHHGGFEMWVW\\`bbddbbba`aaabb`[XXYQEDCBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@?????AAAB@@AA?>CNZZOHJRYZ^_^^^]\\\\[[[[[Z[\\ZZYWWVV[_`accddc`[^bcefhijiijg^RQVQJFCECBFLQRPONNONHBBEEEDCCDEEDHMKGGKWfeedd]XSPTQQWZ\\YVUW\\cic_W]^`aWMT```][YORXivmkoaW`XURNWdm_JQYalldZSSSQReslcb^V\\^ZZ]]_____``dhf^XahnzqfvifaTQERejkZRZi~x\\IGFnaDBDCBDCBFED?=?BEGF4ToV^faRNQJ<<=?A@BA??>;:>>Hfs\\E?=88888899:99::::9;<98;<:;::999::::::::;;;;<;?QM?==<9CNen`SKBISUPVH=CN[^hrHTVSQSQUjwcHJW_YijhiYGHdpZF@@><<AEGHKWWTXZWUNEBCCFQWWRXj~{syrjf_\\ddVPQMIGKK?<`o_\\aabcbXWxZukhtj\\kTPQSUUeӼɨȖyqtmtĺƿ̼Ѳγίթΰιϰȭltd^Yj͸äzu~fptxoe|syyfrCKQMlVKV[b|zqpuz{und`emsrh^_l¤wr]KystZzȼzw[E@>7=8D=<F7::@R>7@GMNI=/Birspc^[YO<IGE<@C89B?:8;eL+7ODVgsQ9QB;J14]K<=QQFZ\\V;J@HN>GM@GJ>@DCKF@EIEEILKJNLONPPHJEB?:BBFGJDCFMF<DGFED?A=C>=EUQHB?BDGNTZac_]`cbbcccb_XSTURQQTTTTRQV]_WN^\\J98887987<DCD@>>@HF7/179><67FJAAFE?>>?93:_ufcm_ggcXkTQSY?0312356555554467;AB;9?KZL5:nsWfd\\GELMTTI>VsveWXJ=KVViva?,09GT^aUNNOMHAAB>:;>@AB?<=BISYW@7=BDB:77604Y||nwzTGNWRD?LW_^G48M`V@>EEFSZNEEKOI@=<;;;>;8=BHS`g^Zi[A87BPWC6876545DQTPJUpoP:<>=?@BCGHB?@>;=DKJFCA?>=<<99=@>>?@?>=<=>>==>;9GWN>=ADJPPD7E]^TVbmkVHLV]b_QCGauwho}YEGFHJGDD?9;?@ACB=:COVZXSPMORWSNJJJIGFECFHJMLFFNioȻTMJBBBCC?;;>GRRA6=CGPRB:>DFC@>=:88:=??A?;8:@CELRVY\\VKFBBEA<?C@<<;:;:;;95234777;>==;::;;:86552224637?@;654559<446533418GJXWSTZYQTWJ7310BI:,6:73;OZVVRPIHPNFFIOX^XM?69<8;>>8@F=>J77777=LX[`WONTVQD::77::7305<>>?=414430H{_H@;EW`a`]YTNKJLOLE?97887997634JR;5;94445672z-0357=?A?75401458:>?=::98:::;:9;964303Kde{Z@CCAOn3:8221113458;>@BDFGDAAGLHDDHKJDACB?=<>?CIIJQPHEIHB@=AhzuiWV\\ZYRNMORSNuϋDBIGHIINVRCEt~|}}HGFFFFEEFDCDEFIKMPU\\ab`bfdcb_VOLIIGGIIHGGHIHIPZbfgjmprtutssk\\PIFEEEDEFFFGGEFFGFEEEHLS]aabbaabbbbaaaabba]URSTLDCBAAABBBBBBBBAABBAAAAAAAAAAA@@@?@@AAABBABBBBAA@EJLIFEGLSX^_^^^]]]\\\\\\\\[\\\\\\\\\\\\[[[YZ[^`ccccfd``abdegijjjihd\\UWSLJEDDBACHKNNNNMOMGDEFDCDCDFEDKUUMJKP^ggptdWPLQPS[_^ZVTROHKRQNY_ej^RXdffdbfgj_`ca`]]][PJSRasi[MXSUjj^Z]YRNLSei]RP\\nbKFQVSRV\\^_afii`Xahkxk`}zkhaTOG_mea^bn}}]OUdjRSOLHECAB@<99;>EIB9Y[cgYRNNF9789;?CCCEE<9<:?_sUF@;8888899:99999:99:;:::::::889:::::::::;;;<<AD<;97Ap{lhf\\NHGRWWUTIDHNIILYZOPQQQQQPbzwPujXWyo[[UPJNbcL?FMH@@EGHKVTTXWWSKDBCDFIKLJZvss|sj`WVZXQNQOMKIJNNJPX\\``^``[`_ewckpTPSUafpخ˜ź{o|nó˰¸Ҿ˿ƝתӬ̯׷īǣq_Wm˳ĩ|~wlwz{uf|hycyaJaCY`HTeoqtsssu}}xsqmidabeijs{d~yh~irieνs{`RC936JEE=>E351?J74CIE:>FSURYvsu_V_\\JJDE;>B=CI;:6?X65=V@WikDBKIAD,<q@B<XHCdbO<I@GC:IK9FD=>BDG?=BC=DKJGIKPTQTPFJFDA=DFDLNBGKQE@FGHHEA@:C?@GLIB@>=>AFKQY^\\\\_ba^`bcb_YTSRTTRNPRRQRSZ^ZNPUMC==;:;;;=??><>?@ELF61;EGC=BMQU_\\I?>>@@3>^quvufflbK\\ijdgN;<7445664444568:=<5./-3LSANVakaTPPNNH;/9R_TMZ[QU\\ZX[H3+/=QYXYUPLLJE=<@@<;@BADD>:BHKY`D25=EHE=9984OeXcwrN?ADFFGLZ^M77?E^|uUXfXQXNBHWR<59956<II97EOT^f^NKE<;:9GhrYJKGHH>A^^JF^zf@9GKHFC@>?>==?>;=EJHA@A:69:98:;;:;=??>:9<=<;;=:;J\\TEEFHQVNA;=?FYnxvdG8BW]^igN>EYk{n\\bu{QBGGIIE@?A@@AB@=<<>>?EOTSQPOOOKIEFGIGGHFGFIQVJB\\wy|vrCKIFDCAA?=<<>CEGVdkjh_QPWWRKB=;:::<>ACFC=EW^\\ZX\\aa]RE=99;>@@@@>;::;<<;733111106@HKFA>;<?=965430/20/286423444203553355;DJRVSSTMGIHA;42=LH4);GF;;MVSSOOMPUQHCELQQMG?63259;:5=I>699997=TUFSc\\ROQUXO@?DEB:3103>EDB@955645aj`XNFKW]aca^]\\VPONH@84479:88765@RD47=;55543,\\:3347:=><97555777;CGA:9989997776653245DYFNQFAELR};:8221113358;>?BEHGC@@DLGDHMOMFCB@BCA@ADLSX]YKDHJDCGAMp~jPIRZWSQPQR^q\\id8FIKORUQHGFAf~{GFEFFFFDDCCDCDEEFHKW_^]bdbabb`[TOKGHHHHHHHHHLWaeghklnooqssrhZLBDFFEDEEFFGGEEFFFFEFFM[`^^^\\Z[^__aaabccba]WTNOPECBBBCCBBBBBBBAABBAAAAAAAAAAAA@@?@@AABCDDDEEDDEDDCCBEGILT\\_`_^_^]]\\\\\\\\[\\]\\\\\\\\\\\\\\]]]]`ccccdecbaccdfhiijiihd\\URPMIFFDCBADIKKLLMNKFFFCCEEEEEELVZVQNNQ\\mxn_^ZRRTZ^^ZSPSWWNJKPVY^be`YYUPZecdcdb^V]c`e_NIOZW\\aZUOWVPei]agXNLIOZ]\\\\alviPKS[XVS^fjqnnng]^gmlb_uzlih^RFdqfa_iyaOduebNDIHD>989;<<>GM=VdQbg^SPMLB866788>FLQN?:;;6Cks_J@;988889999998998799::99:::998999::::::::::;;;<<9PvnbTFBGSWNFGIJKNMRUBVWKIILMONUdlWRSaXO\\UNPNMRL@EPNEAEHIMTTRUTSRPNLIFECCC[zxdvot~{vreUPPPOMMQRQPMKMQQMQZ_^]embcsgwjghg_z˭ּɩźzĲϫȿıΗt߿Ӫ̰Ͳ׷Ⱦt{{`\\_{oɻĺznqls}xhz^|qj{hsBOSN[m|}vsuw{~}ysqkc\\XVZm|]oizeVͭymsxoMGL=2BRCNHFD3-0;D40DIA=>\\qe:6\\q~gVW^SMBC;<@EPM;8AIJ.?EbBUi`?EEVEC2Wh9HGREMecLAAC><=KC:C@=<BD@89A>:EJHFFJPRMRJGQKJHDFGHRKHILQJIEIJIHB8ANIGIEC@>87:>AFIPUXY[\\[Z\\^]]\\[ZWUVWRLKPPQSSTTWWONPLG@9:>@@>=>???;::EH;19FD@FKOT]bO<;<>AGIdumctofWcfMQpl^h^VTE555564357;<==:5443'3KHLntT|wfqnphZTP>1126BGGVfc`d[?4421/@RUQNONJGGF@=AGHHHGFKJ?;?@?GN@88;<@HJIED?Kpp]UTVXTC@DBBGLLQN@CNLCAY}|myWVUCBMF:<<;BNVelZFINPU`[C59:;:7Dl{snlbfpdP]]C=RcYKLLMNLH@<:759@C?>AC@==?<9669;;=====>><<;:;;;;<ADKTQJGINQNGDB<:EZotdM<2=V]Z[VH<:L_bfgd_jj\\CBIKJJF@>BDB?<;;;>CDAAFNQRPMHGIIGEHJHIIIIINYXVax{|{pvJGF@===AC?=>>>Gfystxyr]SQC9<<=<>?ACFDIburj_MNVNC;899559>@?<<>>>=<:524651//259BIGB:7<CB=7665421100332//00/-0112229>?BABTWNC=?@@@>5<IIB70>OQE@LQROMLPWZURPMPRKFC@=8478<=67GG527976O]F1KZXX_^[_[OMQLA71201?GEA?=::62Cjg]aa\\SPX\\SR_edcb^VPI@97435899775;MJ4348=;8545Ab)36789;;:989=AC@<@EC<9999998887764566:JM7[ݏKMGCD<dI87322213357<>?CEGGDBBEKIMPMHFEEEEFFHHHIUaejgOBGNNMQKDO\\PA?FLT\\b^TR]o[Xpz]?FCV`^]O?DJFUEEGHHGFDCCBCCCCCCDGV_`_cdba```_\\TKGGGHHIIIHJR^aeegikmnotrkhcUF@CFEDCEGGHIHGGEEEFEDFMTRPSRQUWXZ^```bddcb_]SPLIKFCBCCCCBBBBBBAABBAAAAAAAAAAA@@@@@@@@ABEFDEFFFFFEFFGIKOSXYZ^a_^]]]\\[\\[[[[\\]]]]]]]_`aabcbcddcbbbbdfghhhiiiicYUURNLJHGECBEEEGLMMLIGEBBDFGGGHNTYYVQNKTqs]_f_[VT]_VMHNQP^iVNYWVWSOORUOHZhifVV`ZVaknnb\\XX[^ccaci`Z_ri\\dbYOIEOVRXhy{woc]_epqa^cmyolkkd]eibZ]}phifXGcrdc_i{dIwnkF:KLE?88=ABBBIK;~MOfaSQOKJ@6567966AGUN:8==:<FbpR::98888999988888888899999:999999::::::::::::;;<<>cyqiNGCCEEB:>JMKLSOMDHNE?AIPSOPUXQUJYQSsaRWVHEIECIHEBDEJPSQQROOQVWQHB@CDCdy^Qd~~mqeck[NPQPPNORSSSQRSONOPW^^djr_ajǹľˬĿͯԼϛt۷άȹֹ̬˺xs`nXrvhòɻzxz^n{}q}Zswgzt\\OlcZc_lw|~ym`^adoxy{|{wfPCG`uQTNXojnraPAGM>FL:TQLF9/28@81:AKHNT_b7.?\\umdWcVRMA49CJQL=3NI?3COhAUiP>HPTGCDpG?LMKK\\Z`IAA@:7DK?;=;=<B@877?>9BGJEDIMNINGHRONLJHENOLOJQPNJFLKGC=9ISMCDGFB:557;?CEJNSVWWXYZ[YWVWYYXXXQLLMMORRRQSVWUQVRD98@BB=<=BD=7006??66<72>JJPXO93;;AANhubxoaQdjOMdHHeafkT51655547;==<;76;:5.HNDl~V/@\\ksua[O61<A:@HFNaikgP7.3679HVSKGGFDCFHFBDOUPHHOPE:=B>76:>BA?=?IRRVXWKCOOHFIHFE@?CA@DHMPROMH@=74U|qXPHB?=<=<F]kmt~\\CHPW\\WHA=8899=Xt~ygbqxaSZO=?GLY\\MGMLF?>=<;>CFEB?=<=>>?>858;;;<>@AB@=<<:;;<<<?BEFHMPQRQRUQG@AGVfg\\WT;K\\`]J<=>=CNWbe]XOGA<DLKGHC@@@@>;9:?A<;BGGHPVUQG?BIIFCBCEEHLMNMMMZgdn~gboe}CD:78;CD>=?@>CV_empt~}aQMLB==>=>>????I[iig[E??71/3<=834:@><<>=;:8523664/015568;;941:DC?:77655556776210000/0/./16>?=?99NVF9;@A@?><EF?<7=LOOPOOOOMKKXfg^]b^UYUE@>>=;::=A:3DI96673CYN85BLJRci\\VTSPKHF;0/01;CA==@?:50NwexlY\\_]ZLBMW[_a^VNH>76557999967EM9/657??;95/w05689879<86<@CIGBEFA::<<<<<<<=??=;:<@BBBA=EոosvtkT;Nf15433233237;=@CEHGEDCCCIOOHCCHFFUUD?KYiz~zwZBEMNKNRL@?BCA?BKTZ[WSSTPNE=RCIQgib`WQSMGM_oxyrhdXSUi|FGHHHFEDCCCBCCCCBCFR_cacdb```^\\ZSIFFGHGIIJJMT\\`dffhjorsxpa\\ZNB?CEDEEDCCCDDFHGFFECCEEEEHIHLRRQV]`accdeed_\\TOMGHFEDDCCCBBBBBAABBBBAABBBBBBBBAAA@@@@??@ABDEFFFFHGHHIJLNOOOW^`][Z\\][[[[[[\\\\]^^_``_`aaabccdeddeddbceghhiiiiifa[YUSQMKJHFFEBBDHJLNMHDEEDFGHHJPVXYXWSQP\\jikcY]XSY\\TGGZe^\\ic[^_^_WQRTYYXajihXW_[]hopgb]RJILQYchnnhcdac```UEANYTRZironmcanqZZiqfbdhe^]\\[]_vnge_Mctdb\\bnprdD|o=?RND?::AFGFBH?UaIYbYRQNKE=8678:8799SR72:;?GFakH69988889998888888888999999999999999::::::::;;>=89FOK\\vUGR\\N>:;>aVNJDJHB>:;<=DNTUOKMOIg^J_Xak[aXC>DHHIFCAAAHRTPPRMLOUUNFCDFFGMNIGTs{rphhbQR[SOQRPOONPPORY[WQMLNRYboriVbŰƵ̳ʰ­ȸȿīȼҹȯ~ܰ˱Ǡֻ~Org_g~ƽzdx~~Zkjuti{\\[ysrcT\\uj]`[]ku}}hTV`lxuCEa®jhniQTO4EJAD4RSRU:7/;;;7A9M?QAKP@@ABT_ke]`XVN99GOQM;>Q<A?D]]>UcEAZTGGHZi6GJLSPXG^G>>;>8DE;9<9<=A=4978<;@GKBBHLKGHDMMQOMKHIPNUOOWQPEGOMC=8AMOD:@HLB54446;?CHLORTTVYZZXSPQV[ZVTQOOMKKOQTUST[\\TV[UE??>;<<>@?62//16:9761.5:DNPC8;BFQNPn|s`vi\\V[aEEcEGeXV]Y@14665459::::<>A<:DLDgkO<3SrMdtp]WF12?D@EI?I^gj_F955:DOVWMFA@??ADGHGJRSH?GTL;8@GE<68AAAEHGIKNOOOJ=@LK?=;<==>@A>>?CJNOONWirj^f{wS@C>;?<;@Odp|rJ7IWRRVTK@889:8@_yxYObum\\aV@FKEReYKLHA?@ACEDAAC@=<>???>;:8889:;=@FGGC=:<<==<:;@?>K_SECGLSQHECCKV[ixo[jgbdN:;=A>=Ne[D@=:98CMJDA>BEB><=<<?>63;EIHOYVI=<@EFJLIFJRYUJLPXaehjpubRcm^sBIB>>?DB===?>;;DZaRNUYUTJCBFKQC>=<;><99<AFOXWPD;8;9:==<:8:>>=;:753224;>8112599;96564/7><;:87643468;<;98865544545:;=;;;77@E;6=@???AC@:;:6@SPMRQNLLLMP_mld`eh\\Z[I<@B?=<>>?;5=H<8756IL:89=DCG[fRDMWRBAKE4-05=?959?<78CTzhdbTE@;<>@FMPPMEA?><88977:59KF2399;@A>93FJ.667778:=94:>@DA=CD:7?BA>>>>?ACB@?=?DJJCGWaoxfkwKx62310111346:=@CEHHFDCACMMKKGFI>A[VH@GpePQNDEKMKMOE>CFCAAA=;BOOGFHHD>MTIHPhp\\NT\\^SHHIM\\f_XRD<?=WjGHHHGEDCCCBBCCCCCCDR``acdbaa`\\WNGDEFFFHIIKKMPU\\acehkqttxrbUNGA@BDEEA>BNUPHDCCDEEDDEFFFHGFKOLMU[[_bccdee\\RVLIKDEDDCCCCBBBBBABBBBBBBBBBBBBBBBAAA@@?@@@@?ADEFFGIIIIJJKKKLRZ]\\YXY[[[[[[Z[\\\\\\\\^^```ababbcdeeeefecccefghiiiiihe`\\WTROMKIIFDEFEFEHOQKFFFEFGGILRWWVXZXTMJ_txaNTUQScbMO`geVRZ\\YZ[\\[XTR\\gffhbc`ZWTVchb^\\SLFAGQXaZcad_S[hlghaOEO^_TPYdhgdccqxvq^[ejY]aeb\\ZY\\bhyyrfhgSbqa^TPRNX_:_RHx[6HXN?:9=EKIC:>:{}MVf^WUSOIB:866789887[jYL=;@Sb_G4698888888888878888887999999999999999999::;;;;;<@>?=h{nPBPlr\\B3LxPN@FFE=<:=CLOPTQKMGBDa\\c[_x~fY_UACFJJGC@@@@BKONPROMNSSLIJJJHFAAFBQy}tkOU~bUKORRQQRQNMMNMMO[]TPOMMNUenlbXoĳǹĺǯҶкµĬþ˵Ϲ߯ɼѽɸ^|dqr{qz\\}h_sna{b_pkwwgjrw\\[botqlpod\\TPOXyoƤqG7otdhn\\BD\\C.J@?9Vfjc64-<;AE`FC>JC_BCLQC6E]q_[VYXRBFRQO9QH7GIEdN?PUHS^DGLQdS7FEJbVQD^E:6BGGC;/3;:8=>;2695;??GM?EHIFFBBNJSOLLJNNRVOXVSLCJROA7:GMJ>>BHI<354247;?DGJNRVWYZ[XTQQX][TQPPPMLHKSXVSV[`[ST^ZLEA::<?>3/1575346750+-5AHD:<FILYUQ_kkmRnp[TJD[NAdTI^:56NJ3177644678:<BGB==DBeq\\RF<5^NLmxnWP?1.5:=DFAH\\_VNB?<8<HRRJB@>=>ADEDEJNNI>:CKA7>EGGD=>A;7AIID@ABB<BCAKI?>;:88<DFC@@ABCJq~~WD=;><;;LfvT/=[`M?NS?7=?=;95D^jfL>OchjiSDRWJPdgYOGA?ABCCB><;99;?AA?<99976779;@HJJG>;;;;;;9:>>H]UEDDCDDBBBCJNMVn|yvsaYf^B7:@A?FOMF@96:<DNKD>@FHD@>??<998:AIOMNVTJCDC?@MZ`[Wbm_KHKazppqeyysAICBCDD@=>>===C\\ocSIFJGGF?=BP|k@;=;<;:::77AJKHECCEC@>=>>=;;::86433315@B91346:<??8589767567864665557;<<;:9:979;=?A?;:98778767:=>@@AA869;8:CJJGHKMOPSU[afnlhjh`ZK>AC?=>?>=<;>H=976699788<EDGW[JDKUSB9EL=26?A93366746Cby\\PMJ>:73317<>GI@?CE=89<9767BK>46758EC?:5{/02598656893568;<89:8:AC@???@@???????@FFDXa^d^hxyx^:YF.221222357:=@DFEBCDCCDKMNQPJHGPUHJPNgxzwVOd_OSZZVMHC@DFBEH>24BPOGD=@EDFJIH]weB:EOSKGIIGIMKOSJAECJQIHGFFFEDFFECCCCCCEGT^]_cdba`^ZRGABDFHHIJJJKLLQVUVYdlnnpuukXKD@ACBBEFM^knkdXKEFFDCDFGGHHFFIJJLSURW_deegibRKMFCFDCBCCCBBBBBBBBBBBBBBBBBBBBBBBAAA@@@@ABA@ACEFFGIJJKKKLMPTXXWVWXZ[ZYYZ[ZZZ[[Z[\\^^^_`aabbddefffeeedefggghjjjjgd^XVTQONKIC@DGHGGHKPNIEFEEGGHLSWVUX\\XSNNPdwiQNOLRyrglYZad]ZXUTROUSJWfcfkrghfWIENW__^_ZVUXhsqgaeY_]\\VY`[\\fcTRX_[X]cii]`pokgd^_ii]_`eaYZ[\\_mvyzfgrnXbh]^SIMQRj4=;/=O;5GSI96:COOJ?61N\\Pbh]VUSMH@7666679;7=mkA9BOYD26:88878888887777888888899999999999999999:;;::>=JgT@H\\uylXGG`{t`=rߞTMDGECFFBADEEHOPLPSB9GOvmlpl`X`YTu`KD?=<>?@@BCJORONNSPGJQNLJFDFGCXqqrlRD\\nZMMRSQRRSWOJLJKOORRMNPOMNTesxrd|wƸ±ǹķٻҴʻɿƦǳи±}Ǚ~ðvp~zuu|`|cUjwgl{|zrfavwd]h~z^Zckni]UXfvwlZJLRY_JEup]FKƲk_hnU;8KR=KD8<TcuhB.+=FFReU6=CD[;=MM^9?Jg^MRZVYNJTNDAVG8KILX?9HNXdECS[KgH8EEJ]aLVQ;;CHNRO6-/9:8@99:3959CA@NBHHEAC=CLEMLKKJLLSRVYTTJEPVG=9CIKE?DCFA5355557:>@BFLSWYXXYVRQRTVTRRRPMMNIGQYXRV]a`ZQUXWQI?;;?9.1@IC9455540..2;A>38EIHKFEHHXnRenMB:8U^CfUG[B?@LK5/443545579?HG@=<=^v\\VK66142V}sVH8215<BFKMMVZK=BGFEFKMJHB==AFGHGEBEHFC>==;9@KIDHIB?A937BJJJKKHCEEB?@?<::8:=EJKJJMIECOza?<;=>DYp}TJ[gg[B>B:8AGE=:;@JTVI:;DSijTNWUQT[_YOIC@CDA??@=98;=??@?:556668:::=CEEA=::;::;::>CLJG^fQ==@@>=@KQNVo|jcYPPD<>?BPWOJKH@>??DKICBCGHEB?AB@AGIHJQ]^YTSQJJIAALZjeUYkk^WPMr|nohM@C>FGEC@>>=;=I[``e]QONRK@>@T[5>::;<<==@KRN?<AB@@BCA><;:98876764204>@;:88:;<?A<6478673/1642699;:8888::::868<>AA=85966777568;@DEC>;;:<?A@CBAGNRUX[Z\\Z^ve^igSF<<A?=>@>?@<CH=8:=;769:=AHHNXTMQONKIFEGE86@@5/279:7;by]YVRdfMH>9;;DONHD?@EC739>;51?MF966557@@:0QK2/04;>;58623556896578:==???@@@?==????@A?Mf`\\r\\UGDFWpO57;;:98557:>ADEDABCCBABJNQ\\WSk|idje[FO\\ZdYP]ZPXdlmV@<<=@<BLGK_t{{wm\\LACLMHJcgI5:ADGGFFHGDHNRVQKHE=8QKGFFGFEEFDCCDCCCDEOY_`bb```\\UNIGGFGHIIJJJJJKONMLMV^adgjopeYRJB>CKWairvttvrga]VOJFGHIIGGGHIILPPOPW^ejiil]GGHCDCBBBBCBBBBBCBBBCCBBBBBBBBBBBBBAAAA@AACDDDEDEGHIKKKKKLNQTTQPRWZ[[ZXXXYYXYYYZZZ[\\^^^^adddeefgggggeeefghjjjjjjfa\\XVUTSOMIC@BHJIJNOOLHGGEEEGLRVUUWYXVVTMQcg``mpo|UOYa^^VSUUPR]ek`OX]`^[[UIIPPV\\_ac_Zjuz|z~rjlbZKIKRS]ed]X[]VRYei^]qrrseVYhihb^cc^^\\ZZ\\c}e[q{p`dkdaYMVkVvl:5?93258@HC76;@IEHF74lnT\\fbYUUSLH@6666678:5>ttN9:;997897666777888777778888888889999989999999999;<85M`^bQHSRMPNGDDOkunW߷U?@>ADKICA@@GNONFLcWEG\\whehkcg\\z}PH?::;@DGC?FMPPLKPNEHPOOLIFEDBKObocPFShYKOSSQRRU^YIHKMOQQPQPPPOPUf~k|ǾĪϹƟƹƹǿҷͫմʭиɩȣr~}ymju~}aYPizXpvxqiMNl~sb`slcagqtjYQ[o}|r^PUaZRUXeTdrr~Ͱwf]hgR;<BGJHI8DTKwsA-8FAR[Q5EECJ8DLGbE@?CQSPOUTVP]R?NXP8GERE12FT_V8MVaCk?7>KTSlXRB1;\\JJH]?G16;:E<8F3:59FD;LHGGB@>8EJCEGFFFHKPP[SRULJWR=:BIGHECB?E=56665679:<>CILRVURRQOMOKIMQSROMOOJEOYXQT]___\\WTVVUOFA97=FUVG74887521/14:C8/:FE=<;;9JnU]hRGF=H^Dc\\NZMVXI;64566334469@FD>:9Ug^[D5211nR5Oox\\E837=GKORUWVVYK8@QTTTXVNPK?=IPLGEDDBAAED@:8ATYLFIJIEB:78=FOUWURMEECB@><<<??@CIOMKSOFA34Mtvko\\F<;?@=AltclkjjaO89;:>GIA:<?AEGC=;:;La^YTILRRMKKHC@CDB?>?@>@CB@?>?;558:<>?=9:<?><<?CGHE?;>CC=?[l\\?6?CDDBAADJN`z~tlxoJ>CGE>Fbm\\H?AEGC>AGEBBDFFEDCBCIT[YUQRYaeVLGFHJKJIR_XEKjyytZESxxyNOs<HKNIFB@><<;?BEGHDBGHLSQIDBQD?;::;<>EQ[\\UD<>><>GIEB>979:88:;:6555<@BDB@@?=<>@8258:;60/53148<@DFE;37<<;978;<==9537455774469;@GJEAAA?@HRPGFLPTY`aaf`UqUGVYLC;:>A=<===<;?H>7=LL?7;=BFIIKMPSZUJGLQLC>96<?9338888:GVQY``h}bIZcyKG[]M??BDB>=@C?:;HKA<<=>=42@5:uf76113<ADFHC89::87889<>;87;>@AACEEDB@@??>;FYR`jSTLLR__ZMDJIGFB<77:>ADDFHEC@=9:EGHWXMb|piae\\R[dhslG8GOPVe]OlkNEJGITH66=?CEFFEGJORSRPLIGBGUgaUJGFEFFEDCCCCDDDDLY`adb___[SKKJJIHIIIIJJJJKMLKKJJNW[\\]bhea]WNHQ_imnprrrtuttrjbZNHGIJHGFGHHJKKLMNQY`a`daOAEGBBBBBBCCBBBBCBBCCCBBCCCCBBBBBBBBAAAAAACEGHHHHGGHIJKLLLMNNMMMRZ^ZY[YTRSVVXYZZZZZ[\\[YWV[deefghhghhfedefhijjjjjhc_ZYYWVTQQNHDDEFEIMOQNJHECDKPSUUUWYYXYWRLPX`n{ytVOSX^\\PLRXP[ukQT[]YWTQNONHMVZa`Z[[eoxwqoqdK>ATe[LTaWUZa]KJYd^Yk{xd\\chjc`cjjcchdSO]~`d{{nehxmdYNQg_c[>7<:9988<><8787<;FM3JrRRbf[TTTSOI>5566677888QV>1487767776566777777777778888888888998888999999:::9?OEJbefNDUYMEDA?AF]pc[bXUDFJHFDCDHS^]ULJ^\\QKwuekqo^|MKA;;;>GNQMLLMQJFKMMKLPRPJC@AACDW_QJHM\\WOQSRPQQR`jUHOQNMW]XRPRWXZh}|ʼ´Žַé¢¹˧Ӱΰ͸Ծ۳ʺĨϽȻʻrxs{|v~lcnwr}`TMj~X}ghscSScqyvkdhpqnaSPSY^]\\[[^d_ciYOidcF@E_̱m\\`hULC9HC?A?=QJC}f?MR;JQF6GEFJ4B@@YQK2$LVPKRXTUaVMQLV6CKQ41BPUT?COPOEa?<D[pSauL;.EipODcE\\;1?7GF<R58<>KG;JLEE@A>6FFBCDDCCEILPTPRTMPWLA@MLGEFD?;A<896756:;89<AEGINPNLLLHFDHLPQPMPSOGENUUQQUYYZ^^XSSW[XQD=IQRJ=336642000/26GA37DEAB@DDQwUUv|pvslbH=]RZ^RVIRP>07ADFH?74357:>>73Lmhg]D801-616>N\\H0-47?NWZZ\\^\\Z\\ZI;ERY[]][RMEAFQRH>9<DC@>HLB;DUZTKNLFJJ?:=??BJQSSPJEFFEDCA?@CCCCFHIJNOIH@9Jq|w`B=A>>>B;A{k\\ZalwoKC<9;:<CE>;<==<:;;>?7@`o_ICKROHEGD@@AAB>:<ADGHFC@?@?>?@?@?=;::9::;@HMOQPI@?DA:FRK??NQCDEIKHEEFNZegp[CGLI>?S`R=6>FHGCACCB@@EGFDCABNZ[]_XNLT\\WQW[KFOPHO]P@Tw~~}|zW\\ZTHURMF><;<<=>?CKSC:>>DP^ghVJne^D87=AN[ZXWMA===AIKJHB;78:99<<<=><9<?CHIGED@=>@=<?A@=8323236;>@FNOA15<=>>;88789653433455345747CLJEFEB?BQZRPROR^gfdgaToPBOVOF?=@B@>><:96:G@9;DL?7AHJMKGELRW]WRQQHBAC=767742446940/+YɈyftYEGPG>ABACDEGHFEHKB>DGFFE>:>9bu=<<;AB=<BJLIFB<:978:;=>=848>BBCGJLIDABBAAABLCMa\\`ZMFMciTQ]XJGJB87:=BBDHIED@959ABBIKCUƩyonnkgfhihor\\MfwhhagWIGA<:?BACEEGGGHNRROJFINdong`ZQJGFEDBDEDDDDDJW_cdb`_^ZQKJKJIIIIJJJJJJKLKKKLMORTUWY[__]\\\\^^dkhioqqrrrsttspi`VKIKIGFFGHHIKLLJJKMORRQND@DBA@AAABBBDDDCBCCCCCBCCCCCCBBBBBBBAAA@@AEHIJKKJKLLLMMLLLLKKKPY_[TVYSNMPTTUXYZZZZZ[[\\YVTVZ_bccdffggeddefhijjjjkg`[ZZYXVSRUUPD=BFBAIRTNHECFPXXUTVXZYYYYVSONYg_Vowju}cVV]irbKO\\WS`]RUYYXXUXWWYNPW^g^OTXbltqjchpm^M>D`lXMNKJS[inTBK[_Z`pvvupb]bhbdfmqihxzfXa~}xvqghzj_UPN^tz^:699998799:9776:8FM8a[?RgdVSSSTQG;6656667787755578778777566667777777789:8888888888888788899999::8<]la^fp?DVTMORTUT_meQƙ[WND@BDGKRaie_VqeNKxw\\akiok6<=::;=CMWZUNMPIDHOQNOXVOGBAAACFJIEFHIMPRSRQQPROZqeQPRMM_hbQKTasunȶɿ½̼խ©Ó̧կǯŨҹϜľǡέ «ļĤѨzʸmmg~zt~rvlenocxbVLo~yWvajyssqmlaWPLJLKE@86>EIQUY_]^eWAHjz]MKG˰jSekKBG?SB598Ha>FxrWD[J4NVPD;BR@-617VOF*)HHTOPTQWQQP[DJ0DVF/DWaOI>RRVIJLCJI`mPVzh=4S_]PjD_L3G/>PJW<3FHNE<IPFD?@B8FD>@BBBBIHJVRUSPOWYNLMRNMIHF=8<::98856=;79;>BFIKLLMMJE?DOQLMPORSLFHNRRRSRRSTWZYURRX][ZRPRHA5,/441..//012@FB>@BA@BGLTuWOimltnS7Mb^^UTBHJ?38MXZ\\YI;555699-@}mbfbV;;5/&&?QI?7-(0@JQU\\_^]`^X\\YHFPV_a`^[TLEHNOG=6/2>DA<FNH?GTSIIPG;@C?=>BFGILPMHEEGIIGC@?AA?BLPFBFFMUPB=UwswI:<@??@@GlbE@>DbvB8;:::;;:;<===<;:9;>;?QZRMPRQOMKGA?==@A;8<??ACCA><=CGE?<;9:99::::<BFJMKIGEB@==;=AWmv_A:=CLROIIMOZb_ouXHLPLE@DMJDKVUJFGE@BFHGJLFBBBFJPX^c_ROPMQ]ypKBOQJGIA=]zbERPLC<<:<==<;=Qe]QG?AESqyZwʝC:8=CNQLKJF>;<>?DJMJB<88889:;<?@;7979DIHHDCCABFIGB?><831358=BACGI=13:=AA;76445443211234345623>IIHIF@>;ERRQRKLend[]]TiSBM[MB@@ACDA?>;728GA;:999::;>B?@O^__aRQQRRRTTLHD;86229=<54:9]溈zxU?CGFCA@@>@JLGEFJHGOKCEFEC8EqW0),BTK>;8:>CHF@<<;::976=B@@ADEFIKLLC?BBBBEFLICk`\\b_VJTl\\LTXSNJH?879<@CEGIEC@83;DFFK_{͘w|{rttifgigbjnrzvcVY^cn{sRHG=6?LMJIIKJKVYMJMEDXoaNsrplibUNIFDCDEEEDEFKWaecb__]VLKIJIIHJJJJJJJJKKJJIKMNLNQSTVZ]]^_adhgejprssssssssrplh`SKIHGFFGGGIKLLJFDDHGBDC@@AAA@ABBBDDDEDCCCCCCCCCCCCCCBBBBBBA@@@@@BEFILMOQQONNMLKLMKIKS[ZQLPOKJLOQQSVXXYZ[[]^``^]_aabceefffhfddddfijjjkkib[[[[YYVTWZXOFLTK?AKQPJFDGKW^YTRRVZYXWZ\\YRU]RQul\\fh`ab\\W]b\\PVVQX[VTQRSVY^jlhcZUPVdg^QMYge\\\\blh`\\VIUc\\S]_OPaiswgUS]ca\\^^`df]Y]dccaclnfktsiftwuihzp^RXarp;4:987779::9788:7CFNfE>]m[SSSSROC85556677777678666666666656666677778:99897888888888888888898989997JpnbW]qM-:LMN_qyrkheN`ȄWPE><>@?@CQ`gg_QQfx[V_xp[YAC:;98<EJPSUPLMGBELPPQTPJDBBBCDFDDEEFHJLPSRPQQSPVikZQOP]dg_OI\\e{Į²αƽˬӿӱĘʹϼ ۻϽɼԤٯκζѪӢvξԽʳȮumaē{tt{puojgvqTsdZNvyYq]ii}toumg_\\\\]\\ZXYYXV[fhiqz|jR><]]FQSǫhRlnLDJM]H=:HQ`=DXfmCBO7BJJRU@G^F3,(4LJB6EEEOGOOMICNS`LK3CY7=T]lIIDYe^pI:HQEMWGL~~D;Nctb_sFZXBQ17T]SB7HKPB=GRJF@DD9KD=AADIESLHe[^SMR]bXUURPQQKI><<<?9==08A:799;@FKKJKMLHCCJPMIKPSSPJFHMPQSVUQQSUVVUSSUWW^]SSH=0-.49;<<8521/9DEB<=?DFFLLaSOZg`ohMJfkf[Q<GNG;=JV[_a]P<246825qlXgh_J68816F_`E117;>L\\_aabbbaZRUSMVaggd`]XQPTRHA96755>BA>AMVN><GHEH?44<IB=CILOQQJEDFJNMJDABBB@EQUJCFLUZSE:Mssrtx~V:=>AS_C?C>>=::OwpA9;:9999:=EHDEIF?<==<97;EQSKEEKOKC@@?A?:<B@;;=@>74:AA94567:::99:;=?BGKJJJGC@=<:>MephQ;9?DJQSLJTYVRFFKFIQSPMJGBHZhnfPEEC=?KVSPOGDFEFGR_cieZS[j]XnZFFOQKB=>D]qlmζP[vRIQKA>?=>>>=<=GRV_ebdebbv}xxrgE?@AB???==;9:;:=DIE>;97655778:;97722?FFFCCDCCEE>9:<<<;:97677:BAA9348;?<777532234763244344544;CGIIE?=;DIFIHGO_g[QW[U[hTHEIFEFGGHFA???;27FA;;;:741EN46J]hjnaJFNYef^]YULBBDA?EKC54?=MԒE]spmSCB;87997@QQNNORX`faZ]XUNT{uubGCCD?9537<ACCAAA@<9858CIB@EGHIKMKA>BAACCEGH9Ng]Yce]WVVJi}LHXRNQF:878;=ACFJJFEA97<FMNPkгyrmvdgib[njQSX\\YYh}sOGQPMNKKORRONPQMQooNLOSbjf[QB:<sttqmg_XMFDCCDDEEFHS_efeaa_XOIHHHHIIIJJJJKJJKJJJKJJJIKOSTW[\\\\]\\_efcelpprsssssssrrplhbZRLHDEGGFHJLMMIEBBB@@@@@@@AAABCBCDDDCCCCCCCCCCCCCCBCCCBBBAA@@@@?BBDEFJLNPPPPNMLLJIJMNLHGIGGIKMMNPTXXXY[[]_aa`VT\\bcdfhhfeeeeddcehjjkkkkfZX\\ZYYYXVWYYYY^\\MACJPNFEEFIX`VOFN[YWY[[]]YRHSkgsjTT`tsUJQOSeZJQ[STX\\]_blsmg[W\\WUVOLIK`okkfmujgeXQ`cX`ioj^ellljb`gff]Xdjdaeib_aa_^hnfcgoh`jztx}ogytYM`vs@5:987779::98899:@>fcDPpiRRSRRPI?7555667777767655555566665666666667899888667778888888888888888999;7N^TK:Q]>9ILHM]otg[WMHvkaWVUJ=9:@HPZ\\Re[bmoqm`icXxe;?CADKKIJRRLKFBEKPRSPNOJECCFFGIIIHEGJLNQRQPPPRVbkaQMXgd[SQQd}o¿ԼųͬÅ˺ƺĥȻƹվκǪϭӰӱҺ˫ˤwc|{ux|qopplqqOp~j_X{Zgchhlbutihkoommlmptuwyy|tO;GW_VGIVæcRmlOLPTX[>J]GP87;kSALGJ86<HHHTF=0/BKJ:A\\EFEAMHE>APXRLdBOR1JNciBDCNi\\S0IM8FK:=Q<BcfhjpMS^JYK=UbIFLELL@AERTIBLA8PJEEBHONaRLohaPMTbkcZURSTTLJBB?DD:?;1:A:577:>BFFFGHHFCFHFDGKNPNKIFHKOOOQPORSTTTSTVYVPVXUXXSF3-4AJPNF;30/68>7;=DKHDFJYYOVpduyra_okfPBFJGCBCGQ[^c^C1493/[sIPdwm>745CXaR?34AMIFVgiiiighfXMPRT[ruhb``SFIUO<35:=@ACDCCDVfW:1@IB@>4/>SHAFLNRVWLEEJRUTRKGGGHIIIJORU^_XROEKi{wxxqtzH5AT==;=@A?;<QT?:;;:::::>HLIMRKB?>=;=@>?GF;6;EQRMHCA@=:?DDBBA@<33;=934789<;:99:;<?CFGJNOKFC@??>?@DA?ABNRNOPPYaWD@C@=>AJPOONH:DcnmaRKHEDENXRPQGCB@@C[nfngTPuELEGJOQNJKUW\\]Q[hE??CB?IJFAABA?====>@BTn}ysptmguDIC?<9::<=<99<<<<==;;975334426;;<=64AFBBEC@=:986678:<ADA:64/4=A@<86489459964247<?934454355453GIIID=;@FGDB=?Oc`POY_[Z[VPJHIPSTPMH?>>@=57F@;;<<851Xq>JPm|nOIR[gpsniaYSONLJIJMG53;49t{Y\\ؽySYN>DGCDGFJUZhzijloymJ=:778<=@BDEGFA><95<D=:?FIHJLH?>@AAABDGG@:74]hWNLRSssFV\\SMMF7579<>ADFIJHHFC:<KRNJSXRzmtshhnkm]N^ikmqx{ZQTQRTURPPOPSTSU]vpKI^{wUEFDCGHqqsrqneYNEBBBCDFEEIZegfebcaYMGGGHHIJJJJJKKKJKKKKKJJJIJMTY[[XWZ[\\_`cgknnprrrssrsssrokgc]SIDABEFGJLMNKD@@@@@@ABABCBCCDCBBBCCCCCCCBBCCCCCCCCCCCBBA@@@@?@BBCBCEFGIJLLLLKJJJJHFFHHHGHJKKKMMQVWXYZ\\\\^_``YKHMPSSV^acffffdbcfgijkklj^VYYZZ[[XVW\\`__b^OEGJNHBONBLOPQJS[\\]][Z[^YX]ZOYceoote[klbce]W[\\VX]`ba]XQOJGJMSVNOXV]_ionpmttdON\\^\\nsgjcahh_\\YZbdg^Tbnhenqhdeea^dlnnljhigp}yqtzvjrfOK`rx~{C4:987778888889:73Fq[Ocs[NQRPPME>75556666666666555555655555566666668;DO>36767777888888888888899978<DRG7;Nb_YULIKS]h`VTPDV~tU=:@GLOUUL`whphavu`ZZSpX7DLPOMMLLRQLJDAFKPTWZ]ZRIEEGIIJKIHFHIJMOPONNOQZfg]RV___^]^arƮʼʼέ§ƻ̬ʳȽʵŬЯʫ̽ұҡʻ׳˶οΟ erz}~||{}wiūt~wfnSo~|de{[[d{Z{\\Wb``cglkggjjgccfowqhnX:QeFBLjhgfģ~cUggORWUla3YbIH75GpyM=H]J6-1DUj]CL3:?FC7>U:BDJH<H;IXJMUeVkL9F=l^63HEVbs;RU7QR-7|R;DTQdeeUVdGX_H^[AJXGUC<KIQXNAMD7VSR=GQZUiYTppbKUZgpkYMQVZUOLHKHMF<@87:<;55777;=>>@BDDAABBDGJGEDHLHEKNLJIJLPRSSRRTWZVORTW[]\\[R?8@BC@9103624>58AILJA;@klMSwz}mRcjcTJHECA@DIPZb`T=155,JTIMQe[;8;ATXG21APYXRWbb`dnpicd\\QNOXYjqnifipJ<CC;9=@BEFDEFEHX_M:6;CBA@:3:MQHHLMQY\\TGCKW[][RIHJLONJLW^_`]YWUMGSk}su}yŎE[w1:>?BB<89::::9:::;::;<<?B@>BB@><END;>?979@OZZNDBC?<?BBEHDA>;7:;::<<;;859=>>>=?BDGNTWRJB@?@BFHD@ADHJJGFHR`^F9AHGA<8=GLLIF?F`icRHMRQRRTURTYL>8E_^gfiihu~HNEFHMORVbf]VMFd}P;A@D>:BEBAA?>>>>=>==AN_ksvs~{ިPUN?CEEB>=>=;;>@;89<==:753443369:>B>8BB=?GF>74688878;=ABA=8669;>@?=:66216642459@EC;7766445630/EMKIGC@CIJDB?@Qg_MQac][[YNT`c]VSRPH><><518G@;:99993IeVah|cCRgpuv{~mZUXULECCBFC711.7Uj`Wf˭]>=A[rphefytmpdmN888::<?ACEIMLIGEBABB=52:EHIJLD=@>?ABDFGFGD?aLKGN^`^XU]VURLG=868;=@CEIJJJLM;ZvQ=NQJg{bwɿͺtmrljqwllqooj|tkOR`ji]IDGGKW[W_`rrKHub>GLIGGGppqpnefePDAAABCDFEIXceffddd[LGGGIIJJJJJJKKKJKKKKKJJJHHKPWVUVVXYZZ_fjjkmopqpqrqqrstvtng_WQNLKPURMLMPLC??AAAACCBCDCDDDBBBBBCCCCDDCCCCCCCCCCCCCCBAA@@@?@ABDFHIGGGHJHIJJJJJJJJIJIIIHIJIHHKPTSTWY[\\^_`be]J?BIMQYaghhhggea`cghhjkjf]VWY\\]\\[ZZ[]\\]_a_LEJRLKh^?ERVU\\b[]^]Z[Z[V`kKSOkv}t]VU]\\\\a[Z_`ijYOMKJPJHQV__XYST`bbb^mjULIQQYfk\\_eiihe\\[\\^][bgnvsf]_lrkgaW[iple`djffwxowxlkSDJ\\glqH4:987777788789940bjMTjgROOPONJC<6555666666655555555555555555666668<LjwR577787887888888888888998?MZbdY@AJOVUONSagjl_XUPKGd{z^A9>JSXXYVPM[ptpXbe]UPO^{NFGIKOQSUUSOKIDBFLSUZ_bXNKIGGIHIIGFFHIJKMNMLMPOU_^ajib``chr϶¾ſѺʧǸȽɬ¸|v~ѻϹ¸۽ʲեѸ̾۵źǩѝȪinvzzxq}z~~eůtzgvZnkx{zYUiu^iqVLPXZYfof`h{rfcr~od}XC=j]EGiERšycYcfLT`VqT<hU785AW\\ZF=K\\D6/6KNfZCOAO>@58:==FPMBGP6QXANW[ooMGD=nU0,YPLaB]ffU~@.l}Q=CTFUclXXjTa_MfZLZORYD9NOORTAJG?`]WATckUi_[qucO`]quhRIT[ZTTQOQQPG@B:8:;:536679:;;=@DB<;>BEFFB?BJLEBHIGCADINPPPRTTVWVTRSVY[ZXa_SG:110/17;6<KLFFJLMLA9oxJHoq~lEWi`THGD?;>CLNVZP>335/<wSNQGA?9@EACE90<LV_`^_eaQPbntraY\\YNEPTTdvueo^?ACABB?<CGCFJGACF@:9;=>????9GQSRMMQTTRIEKV[ZZYODFKQWXZ^a^[[Z[ZSNRh~Չ{ݓYH@>??A=<>??@G98:889:75:;:@GE?>?CE><?A><<:AU^LANPA@B><=????=88;>@=;<<639=?@=<>ACFMRUULB@>CVql[N@AEE?>?@EHB<AHGEC>;<CJOMSOHRW[SFFPUXYXTQW[OHAFwk{؋gaEBFHNNQSSTOGO~cA<FE:7=?@CGGC?>=<<A?:FWXi{ẇbMQONTL@=<<??@?97?FC?:754687558;?@?;:;:<AE>679==<:89;??;98:=???@A@<9811651389<@EB?;88863231-.CILNNICGLGAEGCOgbR\\e^ZWXW\\[]qhQHLNHA;<7..9GA=<<::;=6;;Jm}sa_ehjnwzm^WTQKFHLLHA=:;H[ejQN㺧yWKRWY\\aa[alk[G8<pql]@381-015735;@BCEDDGIIJIGF=18GLJFDB@?>?AACGJPNQH`EBFMZ\\WbfTSTVPHF<57:<@CEJLLMNEVjg^XzйƿZ^pwtsngpxpcYTjłmk[nfSOIDGXecb[pmCixC>HJIGFFoprql`VRKC@@AABDDEFNVY^cbdk_JEGIIIJJKJKKKKKJKKKKKJJJHGJMOMPUUVYY\\bhjggkmoopppqqrsrrrplf_\\^``afcUMORLC?@ABBCDDCDFFDCCBBBBBCCCCDDDDCDDCCDDDDCCCBAAAA@??ACEEFHHIIJKONMKKJIKLLLKKKKIHIHFFIOQNNSY\\\\^aabdh^PLT]agkjjihiiia[`gggijjlfXUW]_]_^\\[YZXUWb]IWiSG`mWDYmdgbYXXWV]ZWW\\eenu}{z~yXKEKX`edcbbike]ZVTTTVQR^a]\\\\]_YWV_qeVJFCJ``UW[cf_`egia_XOUhxysc`fuifiaZassh^Z]ccckrw|shF=I[jl`qyH4:98777778879997FrZL`lYNPONNMIA:6555666666665555555555555555666669MmhD8689999788888888878899;D\\kkcWH<5>>?Qirpnjfe\\WQLGWnut}xaK;38>LVZYYXRMOcrzlZ_c]Zaeej}qfb`ZTNJHEBFMTWXWUOLLLJGGGHHGEDFHJKKKKJLPRT[mqdcesԳʼɬɝĞ˽ŭ˴׼ùĶļҿĿӷóӻû֪ͭ͸ħvzxwrvxzulezx~fķwzpgmy}ytYXisth_u{dVPV\\bnu}spqdbjxl^ceTX8N`IZjCQzh[amNK`ZkPQhO+==BDZXA6?GH/.G^OJNKYqT>:33DNbPJ@CTE?PB>HF[sWNJSMjI0/_ZN`sQXgpt{R\\oUGOtgNhq[TkfrdRfYUtK\\YG7IYMLQIIIPjeX[kxtRk`ctud_eayr\\OMV^[UVUVUVQKGC?>=<;635679::;:<>;8<AEECBB@AHKC>BCBACEILLMORUUSUVUSSUXYYV]ibXRD60/6?@AIOYTMKLPWT@duKJ`t{fCWkaRFED;8=ABEMF944518iF5MOFC?9BG914;EU\\\\\\adfaPFTiqvu`WYXKOWUJPYejv`JIJHGD>8=GJNPE958::;=@=@A?EJLGWbQIHFDDFJOPPQV_[OGLX`cgikkbYZUZYXYivbp˭˟oWB4=BL_Y@=9OrE5:DA;;;;=?DKH@==<;;<>?><;:65GVE@WU@BGA:54699888;@B>:;<:89=@A>;<?CFGJMPIA>=ESeWIB<?DCC@?>:88?FGEDFILMORXXZSFB@JQLCGORRQLJLLIPWKxqқmXdUGMJLMTWIHUsΪeQ==>?DIMTZZRJFCB@=CIPQW`rtps]ezZNSKB@;;@??:16ELF@:669<?<716CD=8669<;:;;669=@@;669><408?CC@??A@>;:79==<<<;;;;99769:8201058CJXXOFEGMD;BIIOZX\\iaZWSSUhjUS]QJLNMJE=7249B@=??;0CfcWlohljc[^aQZieffTLRV\\abdqwjPS}S^ʢimha^TVX\\bgqnU@9X̻ɫugghX7+03448<759<:62/07<@CDDEA28GGF>15><>?>>>?DJMPDT|K@EEJRUfw[LSW]KD@9;:<>CGLNMMMQzUJpt]vѻryfhtr`V_hy|d\\WrҘqidyvb_fQDDRca[Yi`HPICCJIHGGoonoi]H@FA?@@AABCCCFIJNV\\ckcLCFJJJKKKKKKKKKJKKKLLKJJHGIJJLOTVUWY[che`bjnnnpppppqssrpnkjhddffdef_SSSMC?ABBCCEEDCA??>>BBBBBBCCCEDDDDDDDDDDDCCCCBBBAAA@@@BDCCEFGHGFGILKKJJKLLKKKKKJHHGEEHMNKJOVXX[_baabfebeghhhijhhikldZ]efehjjmmg\\UW^^_^][ZYUOUagT]z^ANpe9NsonmehlZS[YXZ\\YZgx{|uz|||{{zgLIOUcljeb_XWTTSSZb`ZPSff_]ab^YVT_naRIEO]f^OWZaVP[auvmaY\\X^`_^`cg`Xch`]gsrs`]eeca`gt{w}}wnA<IXkq_gzM2;99777678879896`lJUihSPSPNMLHA:655566666555555555555555555555566:SmjcXH:8999::88888777888889987=UbVF<1AeTJ`onjjcZ^]WQLHRepfbdVE?<8=DNTUVUPRZ`cc]]gl`]szgi|Ʒjc_ZTNKHGDGMQTTQNLLMMJGFEEEFEDEGIJJKKJKQ\\bspejrrпſˢìʻӹʳĳǑȪοļź˹ӻƬǫѪ˽řжԷɧßwirlzyuo~na^xo{jw}ytsrwxr]Z|lqrmao~quhotvu}{ou|t[VTSEFLC\\T@FR`zcNƹzl]bkOObdfU`c@-CE6E^XC-3:M62FXB=@G;VC<C58MmgDA;IC:CE9<D8RZMMK`\\nG*2WUPajUAQ^nWgV:GkqeokQ[engTd[YvO`XK<G_FLMWSJ\\ng]ywYl_lp}ftfhzmQSS[_[ZYYU\\WQNK>BCA>;63468897872599=BDA?@AA?BGD<;?DIKLLKIILRTTTVTSRSUXXXVZaf]\\]OB;?HGAJRTSPEKOUPAZoELUx~xwsP?\\kNKGFD<6<><BD<45531[]8AMNGDGB>:8=LV[_babcgg^PMZjroe[VYSP\\dWMHELntl]PENTRLKHCFOXL>877878;?FPJ?HUTHObR?=;::;DTUKMWda]VQYP[gpswhW[\\ZV^cibA;ssL\\[IOP`e~I1Xc9?s]9<<=>@CD@<<<;<<<<==;:999?JDAORHFGD?:7777779<ACBA>>?<:=AB?:9<?@@BGIE@>?CC@=>=;>BBDB@=9<?A@ACBFLRZa`ZRKGEDD9C<=?KKGBB@=<>MioiϭnGNJIO_\\FVb_дVFQSTTSSUSMIGEIEAXbTU_erpl{ڐtpdUNGFG@=:3/7GNIA:58?DD?7.4@<6678:==703337<?@=76;=<52<CCA==>@@>=>?ADFE?:::968679:;81/019@FW`]QFDBGF;?HJLMK_d[WVSLTmxrWPTVVUUTI=99:9;==?>;3EƤsslIMRFJTb`U^aZe[<KilpsoubTT\\_OQpʟzcjh^]XYPSwbTNp俊ÿȿ|vseTDFFFHGHMPTWXWXWRSY^aY]`VEBV_^M??>=<:96226:?A8<Z>315?EIapNOVnhDA;68:@GIIJNPP|˞`BFYxe``_ldiejc[cssb`\\aţ{i\\g^Uij_lUBEIRWRSWIQhXLOBDIHHHHpoece\\J>AA??@@AABAACDEEHQ[\\[QDGIJJKKKKKKKKKJKKLMLKJIFEGFGHPVXVWY]ac^[`jnmmnnnppqqrqkd_[Z`fecadgcZVWRD?DFDDDB@BEGMWVKCBCBBCCCCEEEDDDDDDDDCCCCCBBBAAA@@@AB@ABDEEDDEHLLLLKKLKKKKKJIIHHFFFJKHGIMMNQ\\adfefhihfeehlkiiiikmc[_cdfijklplWLY]\\]^[\\]QR[_c^\\qlXPebDUnscqzjUUWX]_`ZX_ddWY`bows{vu_MOUZ`db`XONMOOLS]\\YOHVd^^`_]`aY\\e`IGPipl]Y^XcYNQVa\\bb]kgZPT\\dgcY]ceY`gbin][bgihfb_dlwwslBCOZoyko~O3<:988777767773>s^Mdh[QUTRPMKFB:5555555555555555555555555555555557DK?79=<9567878977777778878866?P^_J::Epy]HQ^UigQLXZVOMIIP`^POTQF@<AISYXUMT`hd_\\UV_a^]lyo][lwSWXVVTQOMIFINQRRQPPONMLJHFCDEDDEGIKJLMKQ]jvj[sԿƾɡâ˾ɺѮЯĸǻϽ¾̲ɾٵɲմʼİϠҽѾ˪phuÕduteuviZr[r}wezor}ſzsyyzku{lg^mkspqglxd{rocW^qvtyh;7STMbU:RrrTɸy_dbKWeef\\aU1;NA<GTtYE8?GAG<H@>8FLM4;@32DiU3<<\\<8?<@8A=FBULU^Vyg>6aPPalV=PTV\\XBETh}[iOFajgV^]bfZlVRFKS<QPfkLavhg|y_igpq{lbkrcK]]__\\^YXSYWNTIAGGFD;5525898674.4:9:@@;9<?@=>DB;:AFJLNNLIILPPORUSPSUWXXXVX[_[Y^\\WSOLIJSXRNTHEADDZrrD<Izzl[@<`h=ALLG?6:>?CA9564/L{gCCIKLJD@<87ET]`__bfhghhid\\_ef]RQSP\\je[[VNBKstheXBLYZX\\^ZNIQG96999867<O_NAHOSOOTE7888934O_X\\cfb`d\\KUJUdfmja[VML^aWH;Qghx]eaVd;L?;;<=>?=:9<<<=?<9:>=8799;AEDHONGDCAA?=;999=?@AGIFCB>;=BCA;:;;;<?CA?@@=:9:<A@??@@A@?=<>A@?>ABGKRbmdO=6APME=?79>DD@>BBBCJU_x|yFOKHMU_\\`hlzqq~Й]STSOHEFD@CD;XhPXk^TV`sÉj\\VWXE788:@GJH?869>DE=5/11/4;;87:<821138=CC@>=><:;<?@><<;>?=;AA>>??;858::<??AB=;421137>GNQVTKA:=KNJCGDBATXSVXWVWplVXYWWNA:9998::>A>:/^ڱlGCVbUKJT\\^cfgcQEcvqw}eTek[Uvrr||nb]YMShb[kwCMn°ohv\\==>>?EGFDDEFHJQYgwq`_~jqjfhobXuxUPVr]LXSH<;CGJPWW[bHI\\jsk`\\XODGui]esufY^fc]c`R|qvģĪowzyfHDHJ]mcYJDEFMTRONLSUOQJ?DHDDHJrqf[ZZPC@@>??@@@@@BEFGEBFKJKMFHIJKLKKLKLLLLKLLMNMLJHEDEFHKQYZWUY[ZYXZailllmmmopppnnkd_[XWWWZ_egd_[ZXNEEDB@CFLXahpxxoZIECBDCCDEEFEEEEEDDDCCCCCCBBBBBA@@??==?CHLMMNNNOOMKLLLLKKKJJIIIHGGIHFDEFEFMWdd^Y[b^V]fefhhghiihklb\\`bdhjjjlqhTP[\\\\_[^`[XZ\\]^^_qx\\KZowa]x}hgobQPV`\\]^WWZa]]bdujyf]TJNTWZ`cb\\TSSVWNLSRTQKLU__[ZakdT[kfGN[cg^[[eddcmdXW^b^`lqj[Yk|xifllgfheikmlkmolje\\Zk}yseEMT[p}~~R4>;88777777776,X^_kdPPUTRPLIGB:5445555555555555555555555555555554333336=;5<IA6787777777787878Hcie`C3MtVKIII\\NO\\XVTSKCBP\\RB=>97?L]ac]TPYhrsvsmcWYZZZYV\\^ap}uT>CRZXVUSSRMIKPUYZXVTPNNNOMHFFEDDFHHKGLXV^fov{{zŸŲǫɻЧμѹɿŻ̿µͳοֻӿθнñХοȱkt}dru`imeWj\\kl~t_ymmÿ|m}}q|teuufm^jc}pmg~gk~pcan~jDOdo{rbaDKg[W_TL|uxŷ~_c_HZbbtbSI7VSFO>bkg:>;VM=DC888AL7/'*-8NI7DOj:8L;C@><<4VK\\TVugLp[@[\\gv>Bwyc^Talb]o^RuC_xiNTX]_Xx[]gY:@UeqrK[jp~}[hsqupx`hnYOgd`[c[YSSSTNVBJLLJG;37449:74758<979;;89;=<==?>=?CDGJMMKJKLLKJNRSUWZZYWWVVWWYY[_\\[YTONTXSLRM643>tkIFzgULOitJDPUKB9<=@B?7431Cnj?=EDHH@:6:EOTSYcfdcgigiopd[YWQMJC<Fgv^V`ZTMYw{odVEPTSZdgnbJJH>9:;::767HTDDFHJKLMF<:<;945H`nlgb`__XADNmkEFNYTB=AX~z{՛YVgai`oV:<===:9;<>=<<=<:;>=96558=EIHGGDCCBA?<99:;=@?=@DGFB=:=AA?<;==>>??>;<@>98;=?AB@>=>><87@EDA?BISUXdgU=49JXPFEAG^BBBDDEDDHO[g|ʻ܌cWUPJFV^jƷ}|~|wshmzqYIHFDC@=:9?B:PwjXe`S\\ltۻԍqvki_[Y[T=6?DGJHD?97876;@;610/17;9557:<8655:@BA@A@@;8;====<<?A=69ELE>=:79;=;;ADGJEA;12323348@DGOJ>88O`^SIB?>KVXYZZ[UexoTQTRJB@>=;99:<?>@7?ߩ~onnYZ\\UWTS[`WNUfnhasnynWf¨zqmzkb__aeacbe^VYalLfZ??=?DFB=43663002Fbkcc\\[aVMSVFHUWWVY]djpyd^aWWUebt}r_PNVdnkcaXL[pq{eZclb^lyzx~qk`Z_][abZQLDS~No|f>9A@CTYJDEEIQVSOPQOSTKFB?GB9CJonlbVOKEB@???@????ADFFECCCCEGIJJKKLKLLLLLLKLLMMMLJGHKSZ]^affd_ZXVUSX^bfiklllnooppnmmmnoiXQX^bggec`\\]YH;<AEP_luyz{z{}tdXKDDEFEEFHGGFEEDDDCCCCCCBBBAAAA@?>@BFLRSRRQQQOPMKKKLMLKKJJJIIHHHHGEDDDDHT`]QIJT\\WOT^a_`cegiieaik`]`adikjjmniYPRV\\]]_`]Y[]_]WducGN_rlYniXahbUE>QYX`^^^Y_`R`rirbQQ\\]Y\\fkeZUW\\[YVRQUUWUQ[d_cnhXS\\fdPQ]`f_X_jjfgxnXTh]Qhh]]YRalpoicpytleie[jlhjkc\\_`[arzsjSWX_iwU1;;978878878728z|cjk\\GPTSSRLJGB94445555555555555555555555555555555568887;=AWfgS:6877777777788I`ebZOQOHLBTXoSRUVWY]VF=BS\\N717AKYd^ieY_\\ZgnstpfWZ]XSOPZdddifK6DUWXWWTRRSPLMQSUVTSPMJKKLKJIFDDEGIHMGLc`gqsvƹøʱĿ;ʥu|Ю̽¼ýǶͶŻĻһ͵Ͻй˼ӲŷŸøĘkhm|e]dgZdz[ggvuYrpjfynth{sygtohq\\nclf{g{pquuh]Me{hLSZt}_qoM\\^`kYlQnwp^`ZN`anUERP]IYPMkc66:LDEG:/3;FMBAH:38?EEUPF;FQ7KI673=QSU>Q}ZocjlEPLWlnn?ntg\\nMkj_dYV^c{F?RTWYlhTzdbam|qA[ns}~WjulujucemSWgc_YdXXJQSSQRERQQOL:7@>9;:5779@=776578<=85;><<?BCCEHJIFGJIHJKMOPY_a[UTTTVWWXXY[YWX[ZXYSHC>D5429eewi\\ZYiwbYQH@ABBA=;;85-7ckB0=B=;619AGU[YW[bgjjghiop_PTOJCEC78ObdY_db`_dtvjc[R^TKWjmrlSLI@<<<;999=DB@BCCCCFMQH=::87=CHVaa[T`b[?BuU@LXVG9GL;@n}rttyʥ_K\\fS_n@;@;999:>??=<<<==;9:67?A@CIHA>ACA?=;855679==;:=AA?=;?CBA@BBBBBA><9:=<;:<>BC@;:;<==88BHHB>AP]YTTPD@JRTYQ@A>qV?HSOBCEDFYª¬}^NKKUsx{wnnpfex{xwpjbd]DDABBAA><>@FPPbi`c_`lob༢יnnUJZbc^UAEKKLJHE?;::62599856899989:::;;986;=:668:==<88:>?>9=?97ATeZE??>?A@=9<AGIBAA95323312=DCGGA?BU\\[[M@?BFQYXXZ[Vbp^WSNPKCCEED@;;=>=?@3lYzlOOZXWUU\\_YX[]jiiywrϡzru{h]X^aWJT]qDHOFOf[EnVNF@??@CCA?=;;9985Dssk`XdLFB?<>A>9752346778::5;td-9==Uoj[UTPLL`|ypoldktugrxZMPWk}yotpnwtb^`abaidVaYaӦ\\?Sox^DEC:8<?ABCEJORQOOLLQVTLEGMJAAEhc_`VGB@@???@@@??ABBDEDCCBCEGJJKKKLLKKLLKLLMMMKIIMRZbkoonomkjf_XTUV^a`ciklllmoommnmmoqtrkecefggffd_ZQC@LW]entuvvuuw{|wmaSGDGIGGHHGGEEEEDCCCCCCCCBBAAA@@DLRVWVTTTSSRQPMMMLKKKKJIJIHHHHGHGFFFDEP^[MDDMX^`^XTW\\`cfggfc]`jh`]^`eijkmnpkWBAO\\`__]\\\\]^\\WSacNJWnquyjkkmn\\FN_JJd^Z`\\\\]QZoy{iXX`aXZ_b`[X`hig_PPRQXWRZcbb[S\\`ZW\\WMTbf`^]adhiprgQKISgYW`[MUagiklv~xljl\\R]hged_Y\\_[Yanrx]XZbhtW1;;::9878878:0T^\\mjLCRSSSRMJFA833455555555555555555555555555555567876668?H]wd?6877777778888BEB=?EʡP@NH7dPDDDQUX``N@7<PYG43@PVOMprcfdUKKMOOOS[]XUROT^iiqxm[SRQPTWWRNNONMMKJIIJIIHGEEGHHGFFHHHIIGHY`cm}ı˹©ɚ˿»йmrĔ~çù½ʷǼͲŷѼովɾʺ־ɽ˹ˠpmn{ysVchKSq`aipxXcghdjvhyv\\xuwukmooo^kd^`}wkyon{QNQ]\\V\\U}hl_SWKjZXPupko``VLZbyG[WdIP[Mps`M46GFOB>2((LlVWac=86<CFNLDDJE:WR25<JIQE=RaO^]Sq^P<Fz}di}da]kEHd\\]`iphN9YWc\\ZkSvkle~vN\\r|xxXokhtlngjgN^f_[bbYPIQQOORNXPOUO@ITJ@A=766@?666128;>;79>=:;<>@CEFE@>BFGFGJMNRWZZVRSVUWYWTSRQRSUW[]_[LA1=C664SooifZdmhkR82<CEA;69:54SoM26863/3<JWY[^\\^YW_ovohefaRZaN<>?BFKX^^`aekllg\\ZZ^hkj[OXlsncRMF><;;;8;>ABCC@ABCEGHIMD:::;;;=CRYVTgbrNz@8@Z`B4IOMcosonury¹oqnpflr?8:8>HB:<??><;<<;989<FNKEAAA>;=?;78;:76658<==?@@BBBBDFFFGGFEEC@><=??><=AFHJE@?==<>?@HIHC>ANRD?@>?Ob_W_lSF?;S]OADDESexwy۱koTNILZQix}th\\POXgqomja_dj]@E?BEFDAACDDX`ZX]^_`_`fqäyRRZ[fpb]QINOROH?=;:878::;<;;:;>AB@<::8866;>82007==77;?@<449;;BO[Q@?CC@===><GJIIHGC7335666;CFGMHCFVO=@E@?DFFHLV_`[lq]UUSNIJLKKKJFEDA?A96ƒ~tl^VXVSPPUeqpjelynxyÄfssȐ|{zvxlif]Y`aFAFY[PU\\[Y[NHhpgTD<8??@?=?A@?>?@?Plkc]HB76<DFD@<;;=@ABCCDC=6no$1,2?PUWT[^XSZwc\\fthgoh^YNQVOST]ژlfsalog`ceZ]`NbcJLMVXNLMGBEE@??AEKMMQSNJRWV^^TNMUK>>d]OLKD>>>=>??@@??ABCDDDCCBCFGHIJJKLLKLLLLMMLJIMTX`dhmponnkijiie^[Z[]_aeilllllnnmmmmmlmpqrohegdceedaXOP[debelrtsrruxxyyvsgWJDFHHHHGFFFFFEECCCCCCCBBBBAAHTZ[[VPRTUUSRQQPONMKKKKIIIIIHHHHGGGFFEFPVMACNX^^[WTRXadegggfec`flg`__aejlmmnpkQ=ALW^]Z[^][XUS[`XOWs}v\\o}vm[VffFKk^S_filvk[ixvofZbol]XZWVVW`lstn_QPY\\SQZ[XTKO]]XV[_\\]c_^c\\Zbb\\aa\\LBFDHVf\\NGO_c`fnpuk`icRP]jgcggeccaa\\asq]VYckuxqY2<<;9::9987974rcBZn\\?HTTSROKHD@823455555555555555555555555555555566654446<CJddF77877767777788865=<K]:HL</P47:<NYUMRLB81:HL<8CMD;K~cV\\ZJGDBINNY[XXXPOZb^]iqiWLHJRXWTOJJKLMKHCCCDHJFBADFGFFHILOSWPJYckq̹ʻνƥķѵèvo|͵ŰƼĳʭ¼¾ȳǰ˪ͱ˫Ԧzvjsu|ZfgEa~td``w\\``bZTZplhSvoxsgkmzi_`pN]usq|zimTYCO\\mYfxt{^WQNQ_KOkpiygaRJ[o[Pm`bC_R[}\\QED[^8TWC<2.MlPQFG3;>:AI<FC8;6I^O35<PAAEGNIUMUTei[`SedcaXL^a?UU[hsZ[jluOlaamUacny~vohioz]ncgppkip^GicZZg`YGLMKIMXMWHNOOP]aRGGE;39C<463/7@@93:DA:=@<;AGFB>;;CFFDEHKMOPQRQPSUUWZXTQNPQRSSSU\\a[T=7C>@GZ^yukk\\gj_kV80:?BA<9;>8>YZ866,,6<HV\\_a_c_WNP`oyue\\ZTYrlJ=:CWXMXfhijkjlqdPYb[curd]ZZ_[SOMHCA@@??ADDDDDCAA@FMGBMOEBFF<;CMRQRY]W{ܳrXD6UiL6DOczvosuzpͱse9=CHUaVFA?>><;<;:999@JIB@A>::999868=>;855:>??@BEIIHGFEDEEDEGFB><>BB?=;<BIKLJHD@<;>@BFGEB@BFA77;;>Q[QSbtWH[dIB?@Qelpead|zqFKPMLYUP[y{rcO@EVep|ydZQsSMOAQSME?IXSR`a[baWOO]}bDCKUozcVKSgjI<=>;<<:89;==;;=ACDDBA=:8866@KKE9.0597:>><723<<8:<=CEEGC?AISXQNLRVJ@?84443347<EMVUJBH@+/HLJJID@FU_b`ndXTSSPLNQPONMKJIDBB:m~rS\\XRlnQ=>YtkrrkvcRWWǉfY[`j{wigikk_ciJ>>Di]\\diqrniirqJ\\pqU8<===?@@?>>?AAYWa]G><9;ACBA=:;;=?ABA@?=H`y`{U56:?GNbdg~th_seqlV^UGJTKcܹ}owi~nYYi\\P^VKMPanfbb\\WRQPOPQLHEFHMOQWYRR]]RYee\\URIDC_[L?>@>==<==>>??@AACEFEDECBDEFHIJJKLKLLLMLIJMWbggfeglnljighhghfea^YX]cgklkkkklnnlllklmmonlkjgb`dfdb^\\]a]VWdrvpopsvxxwvvwtj^NEGHIIHHGGFFFEDDCCDCCBBBBBGU^YPKMUXVUTTSRSQPPONMLMKIIIIHHHHHGGGFFGHEBCGVa_TIHQ\\abdfgghhhihfjlfaaadikllmllkV?>HPRRW]ZYVVW\\]\\V^~pf{`a_covgu|cY[dnv{{ihz|ym[opZV\\^ZXU[ellh``miYRVRLOQXa[XV]mtoke``a]YVPY_\\UNI@H[WMGL^hd[[accYS`ZOV`_]cljbdki`X_duysaUZaiqrl\\3<<;;:::978;1KzLHgmJ>LSTSQMJFC?6123555555555555555555555555555555555567877AD<8468776666678788889C:Qw58B>6+x֒C;87>S^T;7>C>635<CDGH<5L]KMOJJFBKOMVYVW[QGWjaJENRNHBGRUSSQJGIKPSOFDBDFGECBDFFFGIGDRopWlѹŽͰΥ¿ůѹȲsy{˺ĵŵ̶ǻŻ̺ĶíǺϾѼѺνӭͿſľ̨Ө~|efm}ihsklrqngu\\SSXM[]nUYQuynzyonp|a_^Obrlv{cobbcO[ruzxevSgyYYM]UZep`zhdSQqqOgjiYK_Tfs\\JJMwi@QJIWuWGJ?C/5.AcI?F6?(/86=RA41FR=AWG5=BCGYpaPi}myaUgyJ>kJDLTphiV@\\adPtSSkZto|mvbj~[l^dhwzkqpNLnYT\\dbSDKIFCQPIOFJOVafaTOQK<7@@:7747@E?13CI>=FF>@HI@;:<AHHC@DHJHHJLLMLMOPSWXYSNRSSTROPUWUVTBAJTdgvRnyfe]lmX_Q@8<=@A@>;=?A@:1600?MRXdhda_`^YYdfdgc]\\\\OIYbXA9TfOCZihjpldho_QbiSNowleYJFHJLMHHHHHHIIGHC<COLA=ENJELUSLIIEDEILLMSLZм֭ycOViN4BO`ttzyvparoVdg^`ec^XG><:;=:9999?C=:<?<89979::<==<:66:=<<=BINMFAAA@?<>AEFB=<@A=899;CLOIBAB@><<>???>?@?>;:=?@BKH@M_`\\`CDDMf|̭vjfVGGR_pJQROGO`Za}pplbL@COayhZVJavWK[TE:Fb`NVdildONifM>:MYsd^^pz@3<=;<988:;:::<@AA@ACDA;7668CMSRD4/034:@<627>B=7668EQICEAATdk`LITQ?35653210353<NXTE7640:NPOKFJJNW`_Z`j`^ZPJNONPPONKHGGEFD?zlqpiaRM^mv__wvqygWZw^XKDt`SOP]nqkpxvxqjTHDBDHSZRb}|wqsxdSC@GeqC:@?@@AA@??>=7[R>DB<GGGGFFB?=;;<>>@@@:E|ۻٚ?6DMwkxpxzxoXnssw``[EAPLm֤fyin{Y^ZG@GHIbcWWY[[XVXWRRRPPOPQRW_a]]a^UW^ageRFPVXVK@=>>=<<<===>??@ACEFFGFDDCDEGIIIJKKLLMMJOYbgb[Z_cjmlihfgggggfgc\\VX^dhklljijjkmjiikkkmmlkllga_bfdb_WNJHN_nnc\\fsvvwxvvwxwrgaXJIIIHHHGGGFDDDDDDDDCCCBCJUUKBES]YSTUUUUUTSRQQPONLKJIHHIIHHHHHGFGEEEFJUXRGDO]b`acfhhijkkkiilkebbcfiklomgnoTCFFBEU[YYZYX\\][XZvz{cELOV{{iuiZXX``Zd~}rckqZai_\\RMSVTYcnng^XWUUTPU`^XWY`oqofehicWP]fc`SLFGOFGOPZmnaZZ[[WW]`[T\\hjjrqgaiusaZ_XngX]glnnq]4;=<:::::8:94kjO^qd@BOSUURNHFC=4023555555565555555555555555555555545567853:@705877666666677778:=;7BG:7<;952ZX6B=7>QYL:27?A;518LH@<:6?kvWJIDHMFEGHKV\\YUVQ?JkmRDFGC@=EQRQTQKGIILRNJHGDDEDDCDEFGIKMLX|}ĺȷƚùʖƿŨе£|zvwͼļƵ˻ƵƶǶůɮ̷֍̶Žſͧͣzxd\\esyvrloXYWW[bx~qluĸ|Y`DIJxnmz{yl~tW_lYgxmitTivE^^Ri}ajhGz{K[dS]XnWtba]XuxaSokhQP\\Xg[GXI`\\OH8P`aN:8776;=LgQ9@LM0:8;5C6.>ZR@NP0\"056>PwpTNkPskx]DF{?LUNDd{]I>FUdttbdWL`vZbrgpjsyiqWn^aixpuugA__QO^bcLBJEAATAIDDKO\\fdYPUZM:?G>9:99@ED47>JC<FH@?II?79?DHHF?=CHJFEFHHHHHJKKPVXSLNRUVSPORRQSWXSRXRdidPdpiasv\\XID@>>@BBC;8P`@0/4:HUWW]fidaec][bhaYWTNVUD=<CFCN^Q?D\\e]\\dfbdeY]icJ:ZvulZG?AHJJHIJJKMNKGHPNIVWB>DHMPMORJFFD>CFHJNQH}yPWdF0?Zu~p||xuxp^RUfu~lgoi^bmlkgWD87<@@=:88:=>=><99;;9:;<=<=??=;;;9;>DHIF=:>?=<;?BDEB?@A<6679?INOJDAA@?>>????>=<=?>>?BDDA=:>VZ[RQKTͯmdnaKP`tē{le_xvgcf[IB?Ec{mTPPPOONW[F?HTUPV`__[PYsiRKDSZ{jgso<99:<=8479;:68<;;<==@?<84227=CIJA865229==83<DEDB?:8>IE;>=4H_h^LJOG=525548AGID77DJC63444:DB@?AMPO[c\\ajROQMJLNORTQB5Dzʏ_Zkf^gbǗul`RP˪f:KUTLFHLDPWXhbro\\TLBB=;IUW~{|psJ16=BPkpK:?>??@@@@??>;QR:><7@NKADHG@>=;;<=>?@;]?LYδ]˝pVKJ\\fivx|iWTN>;EGc߯]PW]o~fheFCJ[bjgb]QSTTVSNMRSSSTUUT[bbabb_[ZSMYeZP[dRPIC?>=<==>>===>>?ACEFFHGEEECCEHHIJJKKKLLQZ\\VOKKTakiccdefggggfddb\\VX`fjkmnkfeggiifgjjjlllmljhb_adcaXH@AFT`]UWalruuvvvvwxxvohbZOKJJJHHHHGEEEDDDDDCCBBCFGDAFS[SKOUXWXXWWVTSTSQNNNLJIIHHHHHHHGGFGGGHJMHBAHSUSXbffgijkllllklkid^ce^dkkifgmlZLLB:M]_\\YXXZ[ZXY_aU^aKNaS[[R`a[[^`bifw|yj_]mh``WYUU\\^UPT^^Z^abcd^SMRXXXOL[kh^hy{ti[bdaXNLLMNIRcUKS__TSOSX\\eYVSQ_sxzreahqrj^][mj[^pocl}\\6<=<::::<;<1IvVXktTCLQUWURMHDA=41445555556765555555555555555555555444553456@C5377665666666777779767675877548=9>?;7?OH=;;;=?:75HZD99998FSLIIEHMFBAELV]ZNLO@?Vi_LGFC>9DQPPVOIIJIEFGGECCCCDDCDFGGGOo©ȹļκ~żˠɯs{qİ˽ÿͺʫ´˵ŵҽϱɡϷٛɸͧȨppn\\_gr~w}mn_IHgvrmVWp¶{uvxmhilt~tjdR]yt_ihhpt|[amYESO^u}xX`Z_Tu\\H^ynPy[]cQ`kXUkr[MUYZ]LSXKbk\\^KC?NS>9:?118DA@FH:FUXK^:/>M87NTNOY:#&=S<;>Sjigo{_lal~k?Eu_iMI{dWXPc`YvSTMlhRvnOnz}ckaYla\\kpt}i[DmOKL^``FBI>?HLAJ?FJS\\_ZROY\\ODNPC>@@AEH;7ALJ<@H?7CNC46DLMKG@:?DHHCDFFEEFGIJIKQTPIJPUWSPPRTRRRWYWSD]V]FUzjk|~j[PH>38ABDE:AnuA-8DPWRQW`fib_nfa^`\\X`^YI864:=79L]L9?E[dYJP^feaXV_XF?L`f`TF@BGHIIIIHIHIGB=Ri]UQA?>;JZTGGEIKB?KSUWXToئ^:S^>07Uy|jcV}yn_VVUZfovdYW^a[\\o|rgd`Q>69@JQI626>AAD;99=;779::<>AA@=88:=>>??=99;;:;?CB??>@DA759<=@FNOKJJFC>=@ACFHF><AB@@BCCB>;8:Mo[^`iGKz|uȘemgfea]Z]OCABS`TGHJLNPC`}VfGPPOQTWQONMQM[н_TOTaneyX@B86@A:68::968;779;:975443479:;;8776335:>><=BFHHF:39C?8997=MY\\UNID=7338>HY_SE=75333445856653CPQILUkҬgQZTOQ[guzz\\red}cpͬ|g^VyUCHIIIJMJM\\]`{pLPVOOOJ><ACJjsI3:=ACO[K<>>?AAAAA@?>>FJ=8?>=;BKG@=??<<;;;;<<><@DPKxӇٺÛgOSWafqtlb\\SOB55;>DNTN֒UQXalzԬmmooqqrrnh`_XboePDLRSSUVUX\\_^_ef_`gYMPW^^]^JJE@>?>=>?@?>>>??AACEFGGGFEECBDGGHJKKIJJKOMHDEGKS\\\\VW^adefggecbb`[VZbhklmomf`bdeeefhhijjlmlkicaabbaXG@EKKIP^inprttuvvvvwxxwmb_XKHJIIIIHFFEDCBBBBAAABBA>>DMUQFDNWZZZZYYYXWVTQPPPNLJJJHGGGGGGFFGGHGGGDCDHIFN^hiijjjjllnnmmllibcb^eeQRZXae[QKJC@aw_IJUWTTX][SLMakk][fjj_cJ5Tg_u|bgplpqb`kmklf_[mxslbVOR[dib\\ZZZZ_eghicXQU]]XMN^nm\\Xbb^ZNNRNHJUVLKZdngYR_f_]XUTSXQTVR_s~|ticdijb\\`irqd\\[aVTl^9<<;;::;=>74gnN\\mfEEPSXYUQKGA=;5345655555665555555555555555555555444558>HKHNK81885556666788677888;A:?WG6663/0:D746BL@7<??=>97>Ya@9@?>;:AGHHGIOGA?IQTUOBDKG@EYeXFCFHFKTVVWRHFGDABBCCDCDDEDCFHIILPqпī±|p͞¢ho{vǶ˷պƸġװдòȬҮͨȺȹwnthZ_\\k~vv{zikIVRn}ziNH\\tĽǿ÷ɵqpmzvUU_{kgk]kwxwz`j|uRBRRotjmRsUktChwhQwǺ]V]IWeRUkbMVVTWRT`OXSWvhFBNM_Y>G>09<CA<;23;AFHaJ9H@6>CFERo7,9Lx}[TJRQVv]viizH^ztqD\\~dopBYhGY]ndQpeHuyP{Vdh]Tmgsz]SUgEENZa\\BFH7>P@EF>HMQVVSPQX[VUYTIIIHHIG<FHOC>EA5;MK83CTWSLC;?DDEE?ADDCCFHILLIKONHHMTVSQTVTSRSUUZ^YebY{fQ;Hyzcqomd^WMC8<DDD>9^_5=NVXURXcjntf]tnjoeQDMQTD648ISGFOKAABE[l`DBZmplU9JTLIJKMKE@@CFHJJJJHHHJD83@clXG@>72A[_UMCDPSU[]__^f͏_D4JQ:12Mfbr}xnkM`q^[ckhftePY^c_W\\ovnhb^VCAEEOYYI94<@VcD:;8746999;<>=<989<=<:9:;9999:<?@>:89>DC=>ECB@?IKGJOJ@<;>ADHHFA>BCBBDDCCDD=APtZ^a~Ucr|wԠ]a_KILNMC=9GUUSYSFBTcRU輙̍DPPORRNNMEBB=Q辍uWM|qd{wljP<<A@<::<===;74455541124578897675312347;?@??DEED967;777;FMMX`ZNF@=<;@C;>IH>8998754679;77873AQPG>>^ʁV^hmkqӻ}\\ǭtmddƥmzo_W`ԍyYDLJDHJLOOMPSoWKAEMRQH5087>Sgģ|Y;:=<ADAB@>?@@ACDCDBA@BA96>B?;;GLE>;:9:::;;<<;<9>N3;0W߻hbjrb_^ƩsXKHGF>25:<6@YPPү];PqxYVYXRKIWjoqqd_alSCQUUTUSRWac]`fd`dgbXQQai]XFD@?@@ABBBBA@@@?@AACEFFFGFEDCDEGGHIIJIIHHHFGIIJKLMNXbbbcdeedcca`]ZV[ciknonnj`^``bddfghiikkjigda_``aWHDFEDPgohfouuuttvvvvwxvrrgUJHKJJJIIHGFDCAA@@?@@AA@>>DHGDDIPY[[\\\\\\[\\[ZYVSRRRPNLKJHGGGFGFFFGGGGFFFGGEHTbhggijjjlmmoonnnmmkcaffcJ;KXYLINKLMCYt^LUZWPMR[^^\\WTUYW|ym[gj\\lroZX[`fcXUOP]isigrxy|u[OIHR][Y[]\\Z^b\\VX]e_Tcl_Y\\fuoUFMQNMGMG<EQ\\WIDHS\\[PQYZ^e_OKORXWWctysohfjlibivri^ZTUXby\\9==<;;:;=<4Kt^QbpX@KSUZ\\WSLFA>:545565555555555555555444444444444445656;JQPMLKC63777777667997898779IQHad:582BU<<:8@CBA?@CA>=:9?U[@?GGD@>CIIFINPC@AJPPME=AFIJHHTVHBFQXYZ][WSJDGD@BDECIWNEFEEGKLMRa}ǺɼĳǾouɻ~icqjǝŸ̡»ɩǯۿȷǩɰĿʿڿ˩ƷĢssx]bcTkut[`cvWSdqnrnTMIMW_üϾzm|zNZpyrmf[tv{^zvwvBLFg}y\\}j^gRzOjuh[n¾^OXHU\\LU`KOWTVPSe]T\\JdX>GSkoNF2@CB:?82$/4:3FOADH<>F;?M\\w97OLdpYSDF;X\\\\zeyqZ`x͘vdzcXs|}iIwOR]`eb]\\bbTh]bpaTOfekuSQfU?AQRaT>NB/BR<E>ALPRSSSSPU[\\\\\\TRUQNLNHKHLFDGF:8FOC9FV]\\UJBCHFBB?:<>@ACFHKMNJJLKFHPRRTWVTTRSX\\YZ`bc[OcWK@Hqxdt^TUZZMIHGGJB7LztA8S^]Z\\cimnnyi`qzoaP;,8HLFDBJebLD@>HLCFZpeGDZswH+ASPMSWQI?8<EHHKLLKJINSL8/5Vg\\JED;4?UbbWGK[`a]]``Zҡt3,AB;44<L[ejīu>W][\\eljkno{igoXSYs}phha^ZM\\fJDJU_F9;?cb:58H@9=><<<===>@@=;<;;=>==<<<=>=9788;ADCGOSI??DC@ADCA@?<=??@@?>>???BCDFJMJKxvq`{]Zgbcxy̰qKmk?BDGJA;=DHGMXLA?S=@FMRQJLPD;@A?KK?i߬{bt}kdvxwG9::;;8<BHKF956666443235799:::;:7521455678:=ACBA<9468;;?JLSWWSOE<=CGMJ5/10137:<=<;988998864<KJ@@ADWzçlgjvubjΞԔktYY|oh_Se[VpV??ELFCILMMG;DvBI;?IOPK6-6873Qİ|\\K64;<;??<=?@AAA?BDDDDCCBA@>;>:6AOK@;99999;<<<==>@5cӣN6761A̯U`u~hXNx͚`VQOLHB858;9AOTQWp[:`99D@<=ALctuwo[`v}xYJRXXVVQLUchgdefijlngYSbhYTGD>?CBDEEEFDCBBA?@BCCDDEEEEDDDEFGGHGHGGGGGIJIHIIJO\\db`abdddccc`_][X[bgggiosk_[\\^`bbdffhjjjhhhc`^^__VLIGCK\\`Y\\grtsprvvuvuvvttnkfPJKLJJJJIHGDCB@?>=>?@@@??@A@AGMQY\\\\]^^]]][YYWVUSPNLKJHGGGFFFFFFGGHGGEFECLZb_]bhiijklnnoonnmnnecgdgcGKiZBJOGFEOR]jdff[W_]\\_]\\]\\X[]`iw|nxgXQXZZYLMUPX^t~vlqcYPNTUWVTVWY\\XSRPUgs{ymja_hbJ>MYRS]fUDGReVEHOXPHHT]Z[\\TJNVZ_]]bm{r_`ddgihiehqtpg]V_jlqd:9:;;;;;<77cnV\\ejGBLSY]]ZUOHCA<545555555555555545554444444444444445557:=<989>HA32777777678789;:974Hg_RlQ462WT7>GQG;;@HLF><;:<JZNMJIHEBEJJEO_YC@@DJMLGAAACQZNFJLHFNX[[^YRNOUQFDIIC?F^OBCDFILLQbzɾ̵̻˲oz~~~hefsi­·ǺïӵԪȫưʼƮӽʨƸʨ~wgekRWjy_cq|^W^vpjnR\\PQ[Kyĩ|vuaK^xu{m\\awrmm{SEMZlizixxNjXlxqii|]PYIMOLQSHPS\\TKTaSSPK_\\CCPGs]NA@L87138C005O8I;:ICCQO4S|`7@_fk}}ciaQ]RPYtzyni\\Ծ{pJC~jhvUhfQdbr_`[kaWtYOT\\hkpMUjD=>QPaL?O:/LL:E:LOSSSTUTOUZW\\\\VY^VOPORMFHDII@:CMHAM^`ZXQFIPH?@B=:99:=ADHLMMPONHEKSPS\\\\VUVVU[b]Y_da``RJK@Fgtcj]MPUVNIHGHJ:=jY=Ncgaaipqsutzm`blZ=<=2FYQIV\\WRKC76ARH=I]pcEG]urD7@SUS[daS>28HNLKNPPKINUP68Rli`RGH?6AS[[ZW[^]\\[\\___ñ緜i*1;<46;;Jh{âߠ8GJSdmZIYmVSku}nUfd^cbefdljE>TghD:9KmH/XuO;CCABAAACGHE=9;<<>@@?>;;<=<9999:?EHLQPKGHIF@=?ABDF@:;=@?><9:;=ABDEEGH_קyfF\\ez{yxy}q{ǘlkg@LEFF??ADCFSXN?@;cȬs=?DLPOKLNH>=<;GDN~~̆΄qѝwcZjq^KE957887>JOB:=><9999635679988:;:977555333579=??@A@96:<;;<?LNLKID@DIC<=:55666679:;;9537:9879;AA@FIGA=TϽ}}zymg|zlkӞς]WLNLKO\\peSaӋJEF>=<>@@AGKNMG=KuvxүTED:;>FQP@9><:?aʸmA=207;=>?75AB8<A@>AEDCCDEEC?:8847HND<98878::<<<>??C;[өj8=A=8771g͠vUhqi[YQWlLTYRKJG=78=ABELLKBC@=CAHHJZnwy|jOknhRJV[XVTNGNbtuiehkjl_PTTWZTRIF@@CEEEFGGGFFDCAAAABBBBCDDDDDEFGGHHEEFGGIIHHHIHKQUTV]_aefdcca__][Y[^b_UUfrhYUX\\^`bbbdfhjjiihc^\\][[VMHFHLIGSfqpljknsuvvvuuusmccZMLLKKKKKIGDBA@><<=??@>>?>?@BEHOX\\[^___]][Z[ZYYWTPNLJHGGFFFFFFGGHHHIHFBAFKLOX`fiikkmmnnnnnmmnjegificjqYSa]`dNONK[tsc__nohaY[__Z]bccvk[clYV\\VTPKQc|uinlbnhYW[`^[YX\\^^[ZQOgzvqql^ZZXK=?NKRihVRQXo^MakrhTJ^ne`\\QIJSVY^a`]gq`\\jjddfdb`bhmqph_bmqtl:7::::;;;4Ere_`gYFJMX[^][UQJDB<5455555555555454444444444444444444444566433445BJB72477776678971BZVFJ[^Qji@57_;BSRD=:=GNJ?:;:BSel\\FDRRJGJIBMfcVPEFLMLGBBA?Na^PISUOMORY`XLKXcVDGOLEDFHHHKJHFKLRt̷˻ƛǠvzfklgh©ɿº³ȻαôŨڼ½˵¶ɻؽɥȸͭztjdRM_\\rrhhx}_UVytjrXZYMf_uȸ}~pRGiuotiZkpr~{abpNUR|qixv]d]do{ev[RXHJKLRSKM^`JLT[ZZIKOLLQJ<WjXUCC@5<78EJ10,C5PDSY:>SPMgLF<Mcilqpq|po_`sx|Z`VŶqk^Vthus|fStsZj]Z[SlnmhbrOQVXimbLX\\D8>OO]ECK5:PA9C@YKPQRTVNKUTS[[\\`\\RQRVUJIJKJD?@IJFPbbXSRKITT?;BFE=7689<@EIJNSSMGHMOPS\\]\\][YY\\dc`a^]\\ZURRJ<Qzleb[TRTVOIFED:6TznJMdomgjqstx||hUUS=1222ARWXRE7/;LGBDM:9J_ocBGalqo]M<R_]^^[S<09LTPNPUVKJLNB9WtzjWJNC=BOW\\]XSLJVXYb`gոӿ[1@=26FGBm«PVXZ`dTDNkO<MikbzxSW\\_cflbbKJm~iF84hnHU>A>?BA=>EKIC>>=<===?@>;89:::999;?FKMJIPSPNJA?CGFGLH?<>AA=:88:<ACCB@?Trz㾥zCb{}yw{~}xñvf8NRRE>EDCFLLLWgtrlκdBCFJMMLKMLA:9AMDcr;fߩvƌtrR`my}|wiWC879:@HDHMG?;;;:546789999:;<;:;975346779;<<?AEA::::97;FFGJC=AHI=129=>=:65578:;;989;<=<:89@GIIIF?aãi|ü~rcW[46AFJD?Pij]^zZMECCB@><?CIMOLF@I]NdlugFF@?;;AFHECB=;Z`Jwh;3:99;==??30CB18A><BFEDDEFFEB<744AMF>;987579;;;=???@@BIfqKBFDC<899;KZHMmBmd\\dssnWPU\\_TUVXSEBD=79=@EJNOIUʩF@BBDFM[mxvrcQrse_EKYYTUSLCDbqmjfcdUDGOOMQTFFA@CDEEFGGGGIHEDBAABBAACDEEEEEFFFGFDDFGGHHHHJIIIHHLY__agfdbab`^[ZWYYYTKGSefYSVZ]^``_`dhkihhgd^ZZYYTMGEHE>Kesodelhbivwvvuuwsf_WQNNLKLMMLJHDB@@>===>?>==>>??@BHQVX[_`_^_][[[[[ZZXTOMJHFEFFFGGGGGGHIKLKFCCBDM]efhhjklmnnmmnmilnliiggimb`nlgvrSZgbnxihw|xh_Z_^]^cjs`m}q~}o`ks~kctdXTQWdoVP]jkb[YUSYc\\LThnkn]LZkkde`TU^]J9>LLQXRKM]ism]amuvl\\[]XVUSQU\\TQUX[^b`[ew{sklog]`npmmohWO]tl97:989:;78_ubecfJJKPY\\]\\YTRMFA;43445555555544444444444444444444444444454455547@GE:33576655647?Tqt_HIH=YpS80_̢BGSKDB@@AEGC<:;JZhrYAKSSOJJJ?EbilWGINLKGCB@=EW_WNUZUQPR[f[IN]cTDIMKIGECNYYVKLL\\a̵˻~~|~fhlnȳľźŽż¼¢ӭƽش˯ƶȯ޺ӹɩɺ̱v}miTNY`c|}clmVOOpzlpdTaKggvƺŶzw}HIymhmfcvcxwyzw_SkTQnws{yngZUzg~ewYQTEGEM[PFQdUCPtjkT>GOQTRHSFYg[?:=57>9<=5.-A1?MbYBQ\\Z_ura^][TZV^e^av{qb\\[t~vYakkAI[R[SOhX}rflYsHGPIu}VygMWP_ciPPVPD2@GNW@EG5>L6:?N]HMPQROFHOOWY[`YQPUX]QJQOOJHIJKKR__UQPKJV[J;@DJJ:45666:?BDHKOLIKMLNRX\\_a^]^^fkif`\\[ZYWXZTPphof]HDMZSMMD4-Akz]O_njfpvuuvyzzr_RND861-0>RUI6,0.<bpbRA39I_mfDC\\ZVsjCDteSSUI808IONQTYVJJMEBOnv|_Y\\TLCIYaXHEFJNOTfe]uτ~F@@3/DUWu\\RSRQTUTSaSJcrzi~evqahgUDTcWd^_vsapnYxWA>77>>;<EF?8<@BCB?<>@@>=;899988:>EJJD;D]cOFA@FLKJNLB<<=;;::9:=@C?:=No}|yzyzܫR`i|~zy|~~v|Ӎف6Qn_@@BB?ACJmĿʞDBIIJKJMLB9;EHA[yT0>ȵefvvN\\foxmK?ABCJORQG<::9646:;97899;=>>@A<85356779:::<>@A==>>>>?BCFKF?@@@<::BMH:8:::;;;<?CEGBCED;5:DLJEC;=ȸŻɣ_fsGT,INDmw;CIGEJNHHTXVQSZZWRRQQKA=>EKMJGEABECLK:<=ICA?=?>>ADEG>EjK,17@?9::<?=<;42AE87>=>FIHGFDBEFGB96<FHC>:865589;<<=>>>@CEGGEBFOTQJE;8:AKMLH1-5.>b^OWUYWYZY\\\\ZZZRA9<;8:=DLU_^Xp\\>CEB?GRVizmge[Yio_QMRVVUWVPNWj|wY=?DFIIKCC@?BDEFFGGGGIHFCB@AAAAABCEEEEEFFEEDCCEGGHHHIKJJIHGO\\_]bifa_ac`^[YVVSOMKHJT\\YTUY\\]]]]_cikiggfc_ZXYZVNGEFDEThmdahhYYmxwvuuttqfYLLMLLLLMMMKIEA@@?>===>>==>>???AJOQUY_a^]]\\\\\\]]^]]ZUPMIHFEGGGGGGGGGGIKMNKIIFIWcgb_ahlklmmmlmmjknmjihhhjUTd]W]mxccz}zwZU{]^\\Y[]^c|us}j\\_wxs^WQ[eonijgyqhdcTBHRKAC]plib_llfcaYN\\l`NGC@CJHGJDJaihecdglig_SVZYZapyiZOXagmihn|zmlpg\\bqtvqukDHr|[97:989:93Kul`ck[AJMRY[\\[YTSPIA:434455555554444444444444444444444444444444444465:GQJ:7:86523;Ss~qlbOLE/=hd@0nּPFRLJJHD?=AA=;=GQ]j_Z\\VOONLIBD]ijODFGIIKF@@>>HSTMNTSSX[`iePP\\^OEFIJGFGOX]]XNVen˾̴ŷvm\\hq~ž®ƿɸ¿ÿĻõͿͱű¤ԯɬ̮ĳʝ}ܸӵλȰɾɴnopqZYffYddXQQi{onjWeXli˾xwyu<Vxybilinl_st}wgaaj}iSxqrykskQPk^zfy]OPEFJYWGHXbJ@WligH>LXROYJS:O^WE9A;6864=E.;ME>MFWgmb[OROWTU^[XSUaWF^t]GZfk}~qXNjth|]54HM[JIsX_~s\\aeFCBH~{mir_QMF`ceKPMX7/BDQR;KH8>B4:BbUJMOSRD@MNMQT\\THOWW^XNQWTLOUTSPQYZSPNMJQaX??DFOH3244445:<>ACEGILLLNRUX\\]\\_`_fkkgd``^][X[]Xholwh^G<F[UMF6*2Uvq\\\\leT^twsvutrldZRI>6207@IF723034Ot}ub>07G_lfG>NPNouRHtR@DC:61:QRNPRWSHMMHLlzj\\b\\TJNXWMGHKKFCSkgMqpcs}ac{qbaqV=92*:RWf_GIIJIJPV_XWw`ESris^fph|vRW`V\\dm{lSzzW>8149?SRD<416:>EE@=@AAA>;9999877<BFGE?8E^M7=>=JJFIGA=<=::::99;>B@>Pl|{xwvuy紖XKTozusrru{~|}~|xrhvѝʣeoGLEB<CDCPiγB??HMJJJHE@@A?BE@:8JͺJ^{ylvhR]cdrtYJIJKKIIJH?::88769A@97799;?ABCD=742345577888:>CAA?>?@ADGLRQOK@78=ES\\M8;ACB?;>ECHU[VOLIE@CILHFD=K̴k<BF36S9F@FRzpJGHGHLRRNIDACELXeb`afhZKFGKNLHHHDCDDHF:<LH?EECB@ADDDDA^_6;;>@=:869=:::55@D>67;<GIFEDCADEFF=:BGEB>:97679:<=<<>>>>?CB?;>FNLHEA==AINPQE63243-@RPZ]mdM[Z[_[[ZXO?9::8=HU_ippk_E[sELIIGMQRethdaUMKUYXY[UU]YXhtŠiBHURPAA??BCDFGFGFGGFECB@AAAAAACEEEFFFFDCCBBDGGHIHJKKKIHGPZ]^eje_]adb_[YUUPJHLKIJNRSUXYZ[[^adijgggea\\XVY\\UKFEEDFP]cbecWWhvxvvuvtnhf`RKJKLMMNNMMJEA?@??====>=>>????@AFNZ_`__]\\\\\\]__``_\\WRNLIEFHJIHHGFFGGHIHHJOPJP]^[[]aimlklmnmmmnmjkmkihjgdZE?AS_fcU[lhXGQ~of`VVV[\\dwpltrpea~kfe{h^rww~obhv`Q]P=ACIVUUZaglnd^XZs|hdhXEHTJEE?ALSW\\ebeiik_MRUPP_qysd[bdbacjotwsppme`enxxuxqU_X98:989:48gwaaemH=LPTZZ[[XTTTMA94355554444444444444444444444444444444444444444567G^dUF=4264?ci^][XP81LiRAbHVTNLLKE@>A>;?FLVda``_[TOMKEDSehisqdWSOIDJMJNSRLHMSVY_dflgYTTJEFHJGEKT\\[WYO^~˸ȳƨvĕ}_a{t÷Ⱥ»üȥ­º˦ͬҾĲɭǱ˭üvү۵ӱ̻;ǼĴezlrSZN^y^^c^VSfrmyn^`gt}ɸ{g\\Va{qzvppzg=bomWrklqWojp{zjav_]nrx}t^toHN_Vo`zaNMEMVTKJSaW<AYZbGILUWNQVJ?AW\\SQOO54:B2;;,4B=:04VoaILNGIOOLFECAG[iWMgsc^[gU^VYdvwkMJJ=G_WuxUSjQjnOOWzjY~mhSEE]r\\HIPX*2<ATH>JH:=759RjJLNPPN@DVRMLXVEJYWWYMPWXUO[]XZVSTRQLKMO[]G;CAFSG10000014578:;>EMNOQSTVVVZbb`flkifefec\\YYWZ^zesyi_VUP]O:323?cul`iwbN]mmmnlljhcWD6--@QblN003545Bdvwq]=05FblbF=HQScuvum[9=74342;l}lcRJTMZkj[ktdeZW\\`dgdN@GFA?RmgKۮ|wn^P[b\\VKPpf9362?OOQvdJPONMMNW]aY_auFJb^Zbgccw{`NQbrsgXje~WUU?25AgtP80/2549@@@DCA@><9:99865:?BFGA5/KO86=6=DC?>====<;:8887:ABF^wyskirmezۻXPlyokjnoqoq{~phpzȐ{±aPRGLHD@`kVyp(6=GMJKHDDCEA<AB;AVZQoiʍ>Jj{[][\\ouqj`I=FJJKJD@BB??=99;8:A?96676:<=?@@=60/2344556555DOG@;8<?BEJTYXVPF=67BPXPBBFKGC;BPLQaheYSMNMLKGDFINYθ{?;@<AGQVHLHGKRPJIOQJAAP^\\VRH@?>CTgmilwl]YYXYYXVXTGCDEDC?GLFEEFGGGFFFHFVoI7:@A@>;76789::68?@934;:<?BDDBACDED==GICA?;::;:9;>?=<>><;<BBHOLLKE>;=ADHKKOQD76459<:;Pppe^XRMS[_[]\\XH>::;9DVhqvwypeVؐOOURRONLTlo__fTIU_]^bYPY^^uܝRK^^A@>>ABDFGFFFFFEECA@AAAAAACEFFFFFEDBBBCEGHHIIKLKKJHHLTZ]]`eb`bdcdaYVTPLIKKIIJMPRVWWY[_ceggggggc[YXZ^VIDFFDDKV\\[VU]lutswxwwupb\\_ZPKLLNNNOOOLGB@?>>=====>=???>>>=?P^a__\\ZZ\\]]_aaa_^[VQNJFHIJJIHGHGGGGGECEJLKMSQOW]cjljkmnmlmnomijklijkgjdO;G\\cbb`b^`ju{`wsrkTES\\S_`TYfsxpt`\\s~|wzoz~iZfwyuyiUNLRZYXWRZiphZVbs|rTEGGCKGHOSRU_ddcaei\\Y]RO^aaigd_\\SQU]chhhnomifjuzwtpmkk_og;8:88:93SzeWcpa6=IQWYYZZYUSSMB9344454444444444444444444444444444444444444444458FWbimhT>115Mvnf]]\\UI;/1W^KhLa^UQPNKGB@><<@JSXZXX^aWPNIEBMbo_PKGQXXTUSMEIPV\\_cdalcLFGGHHGFFIUVXT[Tbþɸġļһs{è~}xhнɦıȿżȯɯǣϵʱΩ̽ͳ|fxڶӰʷŰ˿Ľĵii[[UOepq_ga`WZid|fUf{ƱqKLtofertplm]McngTulffS{|dr{riodyrfdYow{qsTqqCKWO`]{cNKFPUNLO_cE8IWQQ>OXTRJIRKMP[]MV`O27NO02+-0LRO:<@;M:TH=V]lsdPCBWlttqoy^bzʞm{m|hx}{WIJL7@U_tqEOQItGnrzbxp{rzQIHyyK?EX?(44BQ>AGK<:77EbTKKNOTJ=P[NLRXHGUZSRNKWYUR[a[]^VRTXSNKOX\\L=CC?HSF310.-,-/23467:BJLOQSSTSQXbb`fkkhghjkh`[YTWZ^onlkb]_W]J3:D:Plqjju}nL[goi`dga`^D1/0>csspQ556516VpqrlZ<05Ecm^B;GRUYfwi95B954430^z]VPc||v]]mt{rK9ACB;EhaJ½wlbVLR\\IFMk^97JIDN`|hNUTRNMT^a`\\PRoTo\\[^YTkyu{nzjCFVa^Z[cx|}vmF<9=WaQ=612323;??BDB>=;:9987669<?ACA7<=B>@FGHDB9;99;?>>?<988:@BAIaz{jamr˻Ye}~tknkmmmor|vwļ{afQVVNQSQOevnnsҘY46DJIKJIA>JZQEGEBY^CZSgVPiuvPPOS\\bd\\K@>>=@AAB>?AAB>9:;8:>:776336678:<;500123334543359:9?DDDDDMXURJDMPLE?@KONFGUZTRWWSZeb`]UQPPNI@=HSSQOU_Y¼ӽaGDHRZYMGMKIILSPIIINKBF\\feb_\\UJCDRhxtuylabcabcbabYIFEDDCCILGGHHJJJHIJHMm]8::?@?@>:6667898:?=614<:6;@BBBCCCD@<@IGA@<:<=><:;>><<>>;8;@HMQPPNKGECEHJIHHHA866676>[~web_xOMZ^Z[ZPC><<@EKamtww{toúzBCMPQQOMKUfdZhuse_`e]RYZkĺGBV@?<=@BDFFFFFFFEDBA?AAAAAACEFFFFFEDCCCCFHHIJKLMLLKIGHOUSQ]gecacdfd]WSPNLJJJKKKLOSVWY^bbcfgggihc\\XY[_ZNHFFEDIRPJPaotohnzyvvvtgXVUSPPNNNPQQQPKF@=;<<===>>>????>>:GWZSSVUXYZ]_`abca`]YSPLIIIJLJIIIHGGFECAACDFIIIIQ]gmiflqqgfnomlkklmkkligjfPJR^aaedOB~luxxsmgdj^@CPNQW`l|mSftnxt{}}|{qn}ymiaforlbSHOgsh[ZUSZgoyzcMIEGXVQYWTUWXY[Y[gicb^`kijmeb`]YY]_cc_[Z[almmz~rpeTUXRfxmg=6:99:2AruWZgrH2>FTXYYZZYWSQLD:335444444444444444444444444444444444444344444559M^mv~iP=/Tyfeda[PA973+9GhoUeb_YQKJIFB>::;BHNVTRSVWRLF@=J]rsSONJOU[ZXTKFGNTZ]^`T[hMAGLJFDEFFIOVT_biȿѽÿŢy}ƣƈvmğĹļ͵}xrʼ¼ǵµųϫ¼гѸ٨ʷּȿõ̰ȴƨtauںҬîʼȶ¸|\\jvi^g`bmzirhh_Uae|pSV÷yjƴs_YTQc{xmkb[gk]Rl\\Y[~|p_}~juagwps^lNtv]~ssKbr?GQFU_hdNIENKOV^gL9EPLAARWWKKGHPKYTbVKJJ;>NE49:/3Bdv]K9L:CD]>GcXYrm~rofkamrW[Y[xppoO]oKFHL2@]cPZeXSY:pN\\pf_||rQEZd@=HU/.47FI;AJP=::=V]DPIOJ\\@C\\YOMRHDQWSOKHTZXQS_[[fYUX]]VVRVULAAG?CKOD9610.,+-013579?DFJMNOPNMT]_`gkiggjnnjb][WWVUV_w}odYNK[LK]PD]pjluzygUfuo[UfdK;6,3FSYe]IA;7553,8YhejdV@15Cdm\\>;FNTUWZUF;=B>42461GcWlz~ijxx_QL?<=<<4;^[K˲wwza`FFOVG9EKQMLhp^YUTQMMW]][Sb}td^\\ZZdtpyTcoL;>BOX\\_nw[PG:::;?EF:3469;;9;AA=<<;:655568;<=?@ADHUanoifTDNRLHDCAAB@;::=>?:5?]ssieռ\\rwd`jloooqw~ĿgSHfµ߄LXWZTPT]svlVђ\\IJKIOTMGNc]FDB=Oy{fTYupdVHACVdSacSCBEA>;9;;<?ABCA=;97897775336558<=9654333334433210.3=GGGGHJLMKEHVceXE;CLKDI]heagk`]_VPTTVRNE<9DRXVSOMIL˾ULKHJLLIHIIIHJMKF@AIKEMbjmosm_YXW[n{kejjiifcb^WPIEDFFKMLJIJJJKKKLIB]l@8<<>?AC@9543578:;>?728@A=?@@@ACDCB>=EEA?>94=BA>?><;;<=><9<?@CKMNNMIECEHIIIHHC94574>n|`]igq˓HYaZZTE@??BIRT^dnuy{sv>@FLMJHLOMOLIV`WR\\ceho{gcpiK`?=;;?BDFFFFFFFDCA@?ABBBAACEGGGGGEDDDDDHJIJLMNONMLJHHKLMWdgc^^fihd^ZTPNLJIIIKMMNQUWZ_`_`ehgghhe^VUZ_]TKFEEDFFCObkoibhswvutvqoaRQPOOOPOQRRRRPLE><=<==>>>>????>>CGJJHFJRWXY^aabdfcb`\\WSNIIJKLLJJJHGGFEDDCBBCGMNJObomdfqvn^ammkmmmmmnmmkghjaTWkjb_POQlvUOWkqjh]A@ICP`kQRk^Z^vwn|nj|tltdTX_mtnqqdTSfpcXXUWbefqzjQOFRgdah_YZXVZ`_ZTWWZittrzwhd^ZY`fhkaQMPTYbjmrndb[QTXW`smd=5;9:46^zcS^ja67ANYYYYYYYYSNLG;235444444444444444444444444444444444444344445668?Sq~}ucKARZZ`c_SA54664/4zRQTSK@<@EDB?<@IKHMQONSURNLJFABJa{aY\\SNNOSVRLIEHT__\\Y^\\Xd_NCMOEBDEHGIUWj}}һŶqȦŐxc·˸˷wvn½ùνʺ³ĿĻŽ̹ɵʿ׾þǳֺѷuaöپиϻʲ¨uSqt~]kl\\htqv|fe]_px~yMròpʹ]SSLKM[}rljgjjTTdVVe^f~i^sVo{zv{gdypRhuVqmqQTuLDPAN`xZfOFEBATmkL<HGD@EO^VQI>COX__^gXQTG3GI9%5<?=]oTB5^eSZPQ]X^[eftujwmpxS]xcfx[QeP6Z}__bG[jDLVRaJ;ISbKuifzɽmY]lyxPGwOE>RM441=OAA=[M2>?F]MHMJPOTBS_SQMDAMWVKIKRZXVQX[VabT[_^_]VSRMD@HC<HNMGA86<1,*,..0358;>@DFIJLKLPVY^egeehimkgcb_][XWTVgzqUPPKY\\glKIgohmx~zrld`YTavf:(.<GKKGD9.,033310<PXY^TNI;8@dnY<;GKLLJD:;@?DB52207Svflphx~l?26777343;PQ^}{s`Y]rkK>NOFCF8EPLQ]`bmrdYRUYVJESbc[YrvoxjUTZay|kA8<Qh|siXWVF;:756CRL<79:;945<<;;=>;3012469;;;=@Wyzup`[qn_YVH;=B@99;;;99=DJWe^Qk|^vzxmjligkpsyw|ӥdPEH{`SXR\\_QEToqpЂFCDMPOONQLD?<<J|rgkkx^E;DMSNGFEEGHC><>?BGGGFC>755776445568:?B?:7664333344344441258<AFNMHIKT_difSE<AHD9<KV]mn]WLDHQSTJ:7DU]\\ZXXXVQ}NDF@?@EMNLLLJIJJHEDGIGJ]ruyhJQ\\[\\nykuzohijjhc[WUWYSFDIPQQQNLKLLJJKLAGmR0:<<=>@A;40359@CA>=@A?AEFGC?>=AEEB?<CIB<<<67AGEBCA;79==??>=<9<CFGGE@<?CGKKNQPI:354@nyL<RbpwjmLecXLC@ADGLPPU_kx~xu=NNLLLLPUTSQNPRQJGDCey}igm>><;>BDFFFFFFDBAA@?ABBAAACEFGGGFEDDDDFHIHKMNNONNLJHHFIR[_][Zakkjhd_WPNMKHHHIKLLOSVY[]_`bfiiige^TQV\\_YMFEEDCCGR\\`]\\gsrpsrutpkgZJIILPQQQRRRRQQMD>><=>>>>>?????@B@???@JVYVX_aacefeda^YTOKKLMMMMKIHHHGGFFDBBCGOQLUltg_jrpbY`efjoommnnmmligehbdifmgLIvi_Tj~}vfI>ORTVovdWL`aWdb\\Ymt\\Wdoml~zaW[dcXWbe\\[cdaabeaiozzs`GCLenmkgc`aaa]Y_aUSOO`kidmnjh_SU]dmukRLZc`]`ec]]aWU\\WFRup>5;:83KsoVU_hH0>IVXYXYYXWWVPLI;1244444444444444444444444444444444444443333456765AOTMGNX]cbUEGVbe`VK=5888.DsTVMG?;;?DECGNNQWTPOMLPRPNPONJFBKoqjz}m\\WSRTSNHEDRcfd_Y[dc`fcWSRLGHJLLJS`tѾĻ;zuçpȶյƼutt¤½ľƩƲǲͺ̻̾ǼŲƽҸͺּbĘ·ɮ̷ʺɧ˻ŹpTotterccrrmjda^y|lfÿnҔS67W`UTZhĽrjkidlSaXR]ntWto[XRvz|z{nZlQ]jk~ci^faZlfGUBKS_VdMF@>LiuR:LF8;CQYbgbR=EOZmbZX`^Q<>USP;;L_cslYB9Lp}c]J^_UT_^aag^vwTZZ[^w~hIB6PFGU_DQjVqshcI;FocqcmO_b˒s@YmPRMUK=7<FIA@Cb<0HDOUDQGLSUBUYVOQG=JX\\RCIP[RSTQWVWdVZ]^]_WOTWODHJBELMJIHAFE4+,.-,-/2478:>BDGKLNPSSV[^`ceeedb_bdb^[\\\\VU]unHQh`^eseCOjnlnu}hZJNPUav[66CH@4./002233322?MQPOMFEID?BbkY<8DFDHHE?;<=CB625/>u|hajik|opZ95887605;<?=<NU^ae`Z_UjV@MQIHE9BKNKIGKc~jXUQQYb\\OTqom{rgWNVbm}wE?IZlokhZRSKD=9<>:<HNF@<88867:::;<=;7667888==878Msxonv[VTQUNE=9<=;>DOZ`VLMTlyw}htokjf]SYlqvgH]vϸ]PHHmï]UOCKa`HFk}wéL;HJFCITKDG=:L\\s{ksrZTHd?KKKGEGKKGBAAACGKIDC@;8667776558;=AC@<8876511233444665431248<;<GQ[[TUOEA>LO?4158>bp]WLFIPRXK:>MTTNIJSSROfnQfpDAD@AFLPQOOMKJJJJHHDDGBZi@@R[Y_rnTv{nmligd\\WVWWPFELUPMVTMJJJHEEC=\\g63;9::;;;5017BJNOMF;=EFB?@BCCCCCFIE?CKE<;;:8=GMJGEB>;;??<=>899;=@BBA?=?EILNQRQH<8/9ozC:FLIUojvZO[TFIJIMLHFJZfs}|x{i9LKIJKQTTRRWZSKGGKBPķƎhjnl==<;=@DEFFFFDB@????@A@AABCCDEFFFDCDDEGGGIMOOOOOOMKIECIPTWWZaggikljb[VPMKIHHHHIKMQUWX[___dghihb\\TPPXa_QFEFCADHJMNP]oohosrqqmb]ZJDDMPQRRSRRQQRRJ?;<<=>>>>>>>>?@=>>?@DQWTQXa_]befffd`[UQNMNNOOONKJJJIIHFECBCFNROYljYZdc\\TV`_ajnommmmmmlljihjjUUf]GPltxib^bZGSuaA^aLbpnql_W_bdbgg_Zn~pcg{o`YW]du~yk_`a[XY[bgotkedgpicl|jXOFC[fgh[TX[[\\WKF]mbTJOWZc`^bgebadedqxnZU_eiib]]ahe[[\\KTWlwp@4<84<asaU[c]62ES\\^\\YZZWTUVRMF:234444444444444444444444444444444444443333334565586311138?INNYgjgfb`O:687.D忆zpRA=>DIIFCRaVDQcRFIKNSSOPLIFKTPO\\dovvg]ZTOTSJDDEP__[YVSU\\`ZevpYOMOONMMN_ȿ˾y}˔ƸԻڱ~m½ɾĺ¼ƾ°´ѼϿϳվɹĳճ˾µmɒϪ¬ʺȠĻŸr[`r~~lmZvmfwcW]v{rw̡M:=?giVS]csĪmhji_jOnRTiy~a\\zniEQqwzxv[nJL^gklq^WeganRYEDGQRqcNE?B[oX4NR66@JS_gxrbEET_\\IGUcW;:ZaMMOdbZY`GFUF_thNVFU^XBMXY]cYRf^K:Lgzho{hLIoXhOIVDVaff[{B>k}YvX[xoů_Bq\\fieSMBARA=D;TZ,:KJTKFPCKYOKYQSNMBBTc_F?LTQKUTPRSW\\Y^\\\\]SIN[[ONOHHOKFJONNMB4,00+++-01259=?BGJKMOQRRUZ_ccbbb`_aed_Z\\a^TUceYZtq`nub8Vjmqqx|fJAJYXB@TOGF@5..1212223331<S^WLKF>=<>EGaiY<6?AAHJF@;9:=:43648Y~ynijelŔwhVb{N6;989507>:773BXmjicebXTZi`PWPAAEFHJLLKJWymq~gXQQRWY\\\\\\jwaqmU`v{E8JXXbuqdUNJHHHIE:6;==97=EB943468;<;;;:<>CFF>77=A<;=:Vzqj޽wdOHurH?ABA=DZcef_VP]wifwva`XOzr|~WAOW_\\jůpYVOUXJFABNZQIsճxr~ow~bH=CILH<FXOCF?:Rs{vzy~tx|yqg`9AIHDJRMILJ?=?>AGD=;>?<747<=;658:;<>>;:9::710100234444356544324=GJJJI?=>8>CB=981/Hkp_Z\\VPOQVYL>>?@>75CSRSUYq}lK?CBHo\\@EHILOOOQQRPIIMMKKJDCE?QvbSi}up|roslgigaZRGEFHMQNOSTK>;@@>>8GlJ.79999876206DMPRRRL@<>=8557@HIGDFJFDJMB98765>KNJGDBB>;>@<<=:;===>>?CEAAIMNNMLGA>5<hsK<GNNMMdlksDIJJKMMHDFN^jwxtn\\NN?JHHJOVTORUYZTJDYeYʾϣtnrpn;;;::=BEFFFFDA@????@@@@@BBBCEEFEDDDDEFFHKNQPOPPPOOOLJNPRVXahgcgklf`YTPLIIJJHHHHLQSTVZ^_aefeeda[UPNQZ[ODCCBBCCDDFQcjegrwskgg_ROJDDKNNPSUTSSRRRLD<<==>>>>?????>>>>?DMRPKKV]XXaffghgd]WSNOPPRSTQKKKLKKHFFECEFJSUW`XKLQOLKR\\_`fmnmmmmnonnlmihi[PPPJ_oXTTKXWILLQgt|vv}mrrpmcneWZl|rgdun\\dumhrmcgqtxexyjc^Y\\ilhjt{tl]Y]^\\eeXLIMITX^^QORSNGHJO_oeRL_rsthcghikjgdcll^Y\\\\^bdb^dpria\\Yb{uuzs@3;55Nmj[V]fM26Laffa\\YZVRSTQLE9344444444444444444444444444444444433433333333455666677753235A^kfgdVK@:?:304KꚄ}ZC=>?CFFCBQ`SCZvcMGFOYTKIGE@F\\bY^gp`WY^^SNTPDBGGIPPQPRIDScULeudQPTTRUV\\eź̞|vϊǹà̿}Ʒǲа˫ȻķǸǼճѸwȐſ̧ƸЮ«Ƹ{c`wwjdtmgxzgRfnuugEDDEieRP^deμjgjnb\\OzsQ_tf]bzyo~rCOlpk|flXDP]fkufS`j_h_]<6?RDmeODAEWY7@]C2?GJR_[m`WFL\\^A3G_T95EUN<LixWA=BGQRWtgM9D]ibW9EQ_bu{GM^cWAEq}srfdYW{w\\jXeS;1=jTt|S=naPo|}M\\XYOPFTV:@GBhD.FPPSFMH?OSM\\PQXLICIZjR<GPPHT\\PMPQTY\\[[]VIJSVPLRPKRNDJQTUPIB7.22)*+,///3:=?ACGHKMQTTUY^`cfggeccee_XWZZWWZafcksgw|Y;\\kpzxn^@0<XeH+0EKF:0/344421111224I^]SMKD:853=E`iX:28;@GIF>::6554433@Vdkieae{ݢsO_=49768615<848<Maf`Z]b\\XRLOSVW[RHIKIIJJKPe{{j\\gzs`^WSUUPOYa_ht}j^|{H::GWaek|gnyoNDPPOLGA:8879945>>9634777:<<<>@BCDB@87=AB=CRgx`l{wmOY}DBCA@@FY_ZZZYYYZ]`wkYOsǘpa}vxH?LR[`ý̺{skdjvtXOIHEFPSNq]e{ycvf<EROKLLBE[UGIB7Fcrpqtu{qx}o{MSIDHORJFKN@887;ABELA:A74:>?=977::89:768:;7423321245331586445666;@@@?<=?535679=;57?FKPRUVXWYSB7899519KSZZVVYUJDML=?RWKJKGLQMLNQPSTMKNPONLIEBBCXtwy~rVTrnjonfZP@9BLPPUZ_[G21::956^c567899875422=MPQPPPNE;8679:<BGIIGFGFFED>61247@IJIIHC>=<@B@@ABBCB@@@@EGCCJNQOKF@>75dxRCJOPVWKZ~߆FPSQPMLMMMXkxnUPPS?j@GECEHOUTTYYVTSLPs~ɬtw}x޾Φ{w{99:99=BEGGFDA?>===>@@@@?AAACEFFFEEDDDEFIKNPOPQRSQRSSQRQRTZcgfglpla[SLKHEGJKGEDFJNQSW[^`dgihb^]ZUONLJHCAA>@BBABCFTdgimswug]^`TEEEDEEGKPTTSSRRSRND=><<>>>?????????@HOKEBEPOMW_bfghhdaZTPQRSTWYWNKLMMMKIHGGGGGOWWVTNDCEGIOZc^[hommnmopponpmgjnYHYdig`^^\\a]MLPXhlg[Peyy~nhigbcg^Xiujql^i~~sig}jW\\glj_Z^`Z]YRTchcW^eUPLGQWURQRUI?PdkiqmcYWiolfdcbfeb^Y_ki][Z^miaa`dmneZY]bf]c}?484?bn_Y[d^A4=Thjigb\\YVQNMLJD8344444444444444444444444444433333333333333344444567799998777:@DNa_K>65:813-)qVYCDID>;=ADBENJO{gQH>KWSJJIGAH[gb[Z^UNV\\XTTTNFGKJHKOSSPNIT^TGLSTQMMS\\drӭ~oĚײɦʭ˿̸ƽ͹˹ĺɸšŹvŨͭϡ˱ʽkiwrdeoyogjrmbhs»mČOFC?AcaRO]ebe˴ofjncJ[jRjy_dd{oupMOs`lrvXoQKQYioaU]`add[3-=R<jvcODDEHA:ZU49FIKSWPX@CGV\\C5@UND;ORKO^kh\\OXMPTABtvD>BJwUOWC[dyxdc]DM`^aWR`s}thfWRO571tPFWOdLxti`mR}xix=LRJhFCMHZk27S_OKDPDCVIU]K^TKHIN`c?AOOMP]VJKNNSXXW[XLHOPJGGEGQP?CTUTUIDC:373))**-//26;?BCEFHMSWXWX[]cjnnkhjid`[VSTUTRUftfliQ?]gryfI8117DD6:HI>2135633201101224Od^SLA945847C`iW8046=EIID@=5126531Pidbjlc_vxrG23;=@;545569<TY\\TTeg[RQUQORbqvl\\HADHGCJVYWTP\\so\\j~\\UVVV[bc`glNp}}qLR=7Sy~azubaquqpbI@FA50258;<AJI?:;9679>CDBA<:<<;?BBCCSzVntdhpLUIHE@BNSOQWWWVX^Z͊uf[M_vZiկsrLS^\\Yo}v{kfXPNOPNL^xgm{ȩjrz}{nJEHKKJBEVSFJOVhv|ujmq}sjq~svzvprD;B@ABDJLA743;EBLdeB=78?@=<::<==;964256565676644454212544225:898558;;;532147777412;<@OVaaa`LDJKE;:ERX\\XV[\\PMPQQMKJJLQSLEDEGLJHOWWTTTSQOLF?A@98N~jehr69gvvsmcZTA5BGCM]cpmP;9=;62HeG8>9;=:575766>KOQQRQKB>;:@FIHGGIJIFEFE=9:4018@CFGKPL><?;?EDCDDDDCB@@ADC>AGLQNKE>;5VvUBNNOQSRFVyBPNMLPROJUlqYDDGKFAr\\DIEHRQJJT[YUTRQTe}ƻwgcRdui:::::>BFHIFA?=====>?@@@@@@ACDFFFEEDDDDGIKMOQSUTUTRQQPOPQRXaeinprobUOKGBACEFDABEILPSW\\`bfhijf^[ZWSRNF=9=><?BBABCFTfnqsuwzp\\UZWIDEDB?ADGJLLLMOPSQI@><;>>>?@@?@@?@@ADGC@@CEBFOXcjiihfd^VSTUVWY\\[SNNNNNONLIHHHGJSUQV]QA@FIMXd\\UeponmnoqqpoppmjnfNXpmbdpgae\\LOZemmh[MOY_ZS[]cgPNj}ujbiy~ZYsrgYWba^\\Y[][_UOU`ldUVUONTQcaSSPOTTUbptrolmbTZaehc\\_b\\ZYWamkfdZ\\qvmba_fqiUY][WTS=168PmhZ[ciN86C\\jjhgc]YVRNIGF@74444444444444444444444444333333333333333334444444555556666876736EQRF;76655-<Q?N\\XMC<6:FHB=AATcNH:HWRMMKGEM[liVLNPPPPPPOPPPPNKIP\\_[RRTUQQQQMJSXONhxĿͺ ˿նƲɶĥ½³ï˾Ӳ̫γvwsЧ;ϦˠʲŰqwv]r^{uaagltcnqfcEEE>>\\\\PMZabFɯ}kcfhGPueYqp`ic|g{~~lOPz\\ntkyhw~gXTK^hZV[U^d_X:5LT>eqaMFCCCBL[?.DLENUNUA>PJXY?=HORC;GLJcsaPHY[dkiV]R:Rhg{w>AmmDJfq_aYACgjmeYtSRj^OIEC_[9;7_@*)0]`yxty_^qfB9LV\\j<TZWkX,8kdIFIEAKSMWSSeGMHNTbN:JOJR`ZJIIIMSVUVWMHJJCGMD7;ID;JSPQMDBA>:;3*()(+-./17<>@CDFLSXZYZZ[bkmnmorjcc`YSRQRQT`obbaKB\\baV;/366424DKC6.0344322110000121FchTB3126=@>E`iV72978AFJHD?6/04549btnqneXTXOJlssɌ|kbiiUHA>:54:<:BchedxtYKLXVVTTYjyqPFBE@ACCBBJXYfx|~|Wba``cjno~vbbdVma;^bCBq[_ml~xvvbH?DB84239<;ANNF?;==97@GED@=?GE@DGEDPju}~rvո|qsbNBCKSPSZYZ[YlvPWYMJO]SPj~ңikomc]^i\\FkvtgqcWPONLMVav}{{ygxdWZ^O=8ETSB@SYR\\u~zqrqyjenuuqos}}ye<@KKIE@>;83049B=Afb19<A@:77=@@?=:88753465898864554212333369?=:=?5145665435743444355:HQZfnk`]YSJCAGSUSY^_``YQQQMFGNRW[O>9@DD??IV\\]WNOPOME>AC;9dxXpv>16[stui`TK?>@<@^lrzsTD>=>6;^]>B@C?:<==<::79@GKPTOD<<=?DHKKIIHGGHHHD;67433:BCBEJND;DE8:ABDDFEECBA@BE<9AGGGEDD=5@`_GKNQRRNQ\\gjW`hDTQLOPMLKTd_MJNKEFC<@JPV_httgVSVRPSRMWyylspZ_Z^x}f[TZ}mnoW::::;=BFHIGA=<<==>??@@?@@@ACDFFEEEDDDEGHKNRXXUUTSRQPONOPQWahmppqoiZNJD@?@AAA@ADIMPSW\\adefilh_ZYWYUOKC;7:<@DB@ACCSjrsuvvxzfRQPJFFEC@?=>==>?CHDDIJG=9=@>??@@@@@???@??>>@A?>@EO_jhgggf^WUVWXXZ]^YROOOPSRPLIJJIJMOOT`[G?BGKS[VR^kmmlmnpqnoqpnlji[[cYGEHRof@8?\\vphrp][jmabjfa`TN]lm[Piiciqnw|{vh^o{kVVUU_]T\\`WSRSNX[NHGJN_u~ug]SDGR`a\\`hic_ffclskb[Z]``[YZkd_b_[_lnefoxwkZUY`inevE+7L`hZY^ia;36D`ligfc`[VROJEC;544444444444444444444444333333333333333334444444444444444456688764;JLA86566*PϜ>@efF<:9BOL@89;PnhTOKBJVVSNKHGLZlp`TPNLKJMICKSSRNJIUebUNJQSW[WUWUVzzT_ɽÿȼ«ĕ¢ŢĦ̹ŹŴȿûɹǩֲҵ˼}xfdtѺƵǺ˦Ɵλ˰yv~qoQd{k^`[ulvvWǀPDHH>=RTMJY\\[Gh¶ufdo\\<UZ`lwbcke{teyegdU^{`blmruq{sg`ZKZZVYQR^TVICRQ5Z}`LHBBBKRI06NF>MOPY:WNUc\\C=MdV78BV^gVLIXTT`shc{APjeV[dA7Lde9<_z}wrtkffheqtxII[PDBAapTP_ff^F3IicyuWǎx`jy'AQ^yXVWZ^e;,HsXFHH:DMKWSJ`c?NGLY\\>BMMI[aKGJGILRVUUOIIG=@QR=4:=<AIJJOF@CC@=@5+)''+--,/369<ACGMQUW[^]\\`dggiopkggd]ZXSQQV\\\\\\U\\z?D^aF/,33-.4BHB70.122121101112111215EXL<49?@AGCG`jV78A:6=FGFC=521444?jwttaVRYQYYhcgΝ~yZFHDB<57>86Scdu\\LQUUYYOHIKFDGGFECCBBFXhaaĳeoa`epz~qv{rMPuU5Os^In|`VhvlllgheYJ?;=>?II=7989>@A;8=?99?EECBDJNKBCJB?Vvwʆy|_WKNWWVWZaaYS~klYX_OGmsbVPQRjʿzlmh^URTYZUsVuwI^]TIEIIJVZ_wj|o{p>5AOC2@adTNarjlwtqpqtxre^gceksyzxx}xovr_]q`@6666756989`h9@@BC=78;?A??>AA=85576788886555433344689;?:CQA27<7568865442332337<@?Tmie_SIFHIJIBF[faa`SJNPFAEMRTSE:;>@>;@JY_[OCHOQNB;@@:O̾ML[qD-2:KSSll_F;FNDD_|t]LDA>BBL`QMPZODGEEA@;:975;IRPMD:;?BEGKKJKHDDGHFB:74123:FGEBBB:?OI<;BECDGGGFECAA>7<GKKH@==98@FJRPMORWZfzyiWPTY{nh]TTPNMOTUSMNPMKMSOKWajt{dNMPQOOUVL]yiqituUHEPifTpdO::::;=AFHHGB=<<===>???????ABCEEDDDDCEFGIMRVXWUTSTRPONMNOOWdknpooopeRFEDBAABB@@DHLORW]beefimlaYXXZXQOLG?79GKB<>A@SkrsuwwvxrZJGFFFFB?=<:86558=86<BHB::?@@@@@@@@@@@??>>>@@?=>@ENRW`cca\\WUWXY[\\_a_XQOQSUUQMKJKKJJJLS]^SA7ANLKLMS`jkllnqqnprppnjihicPITQdd>2Hmxo}wnacqq`W`\\Qb{{nWRQentxpvik{obmuv|ypenmYSRZ_RV\\OJFC=?JJFDDAKbdeb[WNTHIMQT]fc\\`faltcXXW[kmf[SVfdb_WWakgfwl\\YXYafickvB,Lec]YadjM145Ifkgfca`^XTQKF@8444444444444444444444433333333333333333333444444444444444555568::549??:5459.]у7?WvgJ:8:AHF=469Cb^BDMFHTZUMIHGJS`mgZRNKKIJGAK^]RNJJW_WRONSTZcYTX`aw}WūʷǪŭŵ̥ӷȻ°ɼ˳®öǵȸľ͹ΦٴѾĤi{x~{ή¸ʯέƮlpaYmtl\\L`wkZvĪ`EEII@<GJJHYWROHojolUPLU\\d^Yajixmlqge\\_lplcchjnnnqylWX]PTVXVJPMSM>BA'PaMJBD@MK<;IJ;@OSWHKRG^_R@JkoH6G[a\\H;C`i_irhotISXTIVkj=C9aa;BLiiOqsRDj^[klQc?EfhY_TXif83[Kjsacȱ~ijG*JXqZkI]SV17geQMK::ILGWOQiVCOGLXM9HKMM\\QCIGFHJVWSOPPKBAMWH7<?89?BCFIA=GD>DH:/.((/.*(+.039@CGLQQT[___`acdfhgjmle`a^TQPTXYVTZzq=Gb]:*4600<CD<2/2202112111122321120,3FJLDCJLGDBJaiW8:B;5;FGC@;6644433Wcd_PT[WT~{dfrmXUK@E;38@OVV^jiWX^f\\XVNH@9;GKKHEEEFK[hXVЍq_fjutmn[due{nwoiskG4<[a`||klghjZEPcT=8;;98@QTC7887>FA77;;;;<>?CHMOOMC?<2<bwxxpzse]YPIMajYXUWjiZSORO]~gce\\ZWSWndhge_XSMMR^oA8qww]/IQPJHHHHQceaֳn[~eeownE8?FI:;Yi^QRSOQ[ciiifhoumcaaWamuyzyz|rebaiuuE9><@EB9>HFBatT_I<@?====<>>?CGH<667998843566555555658=><?;G`VADD>68BFC;753211/-/3209Tef^I>DJMK?6B\\hcaYGAKOF@DHHFA<;>=<=AELUVMD=@KQJ<:@<CĿC/CF[qN*5?<=7:^nU:=QUUf|xeHDGBBEOXURQooO__G?>=99;>:@FIGNLDCFGHHIIGDB@>>??=9741/1?SSE>65=OWRSRWWMGJIIHGEB?97?HKIC968;=>DPQLNKLdubQcgOFRR[fgls_KKPQPQQRRSPOU[bic[bpy_INQOOPRNIc~|`sUWXYZfmndRM^WI9::9:=ADEEFB=;<<==>??????>ABDDCEEEDCEGHJMOPPQRQSTOLMONPQRYejjlmnpqo[LIHFDEECAADHLNQW[^bdeionbYWXYYUTSOJCENTK<9?@QjppsvwvwxeJCBBCCA@><;:75554456;CD=57>?@AA@@@@???>>>??@@>=AB?>FSZXWWVUWZ\\]_`bc]URSSVXTNJJLLJJHIR]fcM<:COSPONVdhhggpooqrqpomkileY^g`Z<Z{m`tyO@UQEe|iceduzngdcjtrfcj`QUruhnqYTZ_ie\\WJE?>=DRXUOOLLV\\b]VYWdNELKPZd_[]cfjdUMKOZdeeecciejfa__cb_hqbYZ[[`iv|z@=fj]Zafk`:158Qkjdfa_``]YTNH@8334444444444444444444333333333333333333333344444444455554555556777758;;64663id3??QYO<6:::;836;:MV?7>??JUULHJHGQ\\dhXSROKIJHI_shVNJJQRKNXUSVW[XSQmzs{΢зŔ˪~ļéĺưëŷ͹ýͰ·¼ƺǷ˾ôyŰ۴ū|ʩƣŨppxrlggf{hIF}ob̃NGEFGA;=BFFVRMLAx¸tinoc^XORRPWTbcnlqldVhol~{ffacfgd]nn_?\\[TPTXMGKLJ976#BaQKBECDA<OP;:MUNIDI;YQPIMgv_FPZdO>9@`cchgbYuqYM@Q\\cx?HBU^WP77ciIDglhgCL{gOKKVLJDej=CkH8ud?.XCVHuʈ~ryn=4Qd|i]L^ORBOm[TNB3BDHKQQahMJLGNLA>DLKPNDFE@DAKYULLWRGITWM;<DA658:<?@@AJFDOM;2-\")63*'+--06;?DLQQRY]^`bceededhllfca^WQORUUTRVlc<Fa^<)+-6CG>40126303312222222212222/<HDLNDHKIDBKaiW77@<46CID?98753222OYYWRV[Z_dXjrnkhbWEEI90GZhxkztamtSOQOMJDDKMKHGGIKLPXOJ}ԫn^llqi`gNB\\kjgMU{wWL:4>IKVywtb_c@9bgG:AGE;6:@C@86;:CND88;<>:76AKNNOSTRE<G`twu}y}zl]TM\\srJFXZSQQKHFQlhFUqpjkmd]{tagmomha\\THOkb<63Lva]nD>0<KRQNLOUl{\\\\eSMQEDGAAEGCAERREENTSRST_lj``]fsbWUirhhrx\\PSYamv{kG;A>=DHD:;Vn]k`FyL3<<;<>>::<@DEA958975851367888888679;;<>@:@Z_LB>C@?HKJ>8533210..03438GUU=2@IIFACKWbe`QB@GJGDEHGB=:<<<=AGKKHA>><=BD>79=7Un\\sL+-8=?WX<CMD;9<NZD?MTYeiq~~fOG>53.DgORpxrrF44479@?12<FFOWWTPLMMMKE@>=:43687775546FZO=<=AKRPMPNUVOJKKKJIGFB>;>BB<88;<<<<BMMFHIGWf\\NTaUMLVeh^iiSKHHNQPOPSVSR_ny{tfi_WNKMOQPKJNL[{թ]cwW[f_[\\luk\\[ZP[gKM99999;>ABCEB=:;<<<=>????>>@BDDCEEEDDEGHIIIJLNMKMNKJNRTVXZ]cfehklorvgTLHGFFGEDEEGHJTXY]]_gjkohXWZY\\WWYJCPYQV]F7>ASa[`imtwwxlPB???@@@><;;:8863367;@A<668<@AA@@@@???>>>??A@>>@A==@HMOQPSXZZ\\^`bdfcZVSRVYXSIFOOKLJGM_mpaNUelmdVNQ]eecakppnoppooomlfk]\\yGBi}{SFMA^|vg`nwyzrtrpmj^YVWS[p~pm}smnb[djiePB@;<9AU__^^TNW_[MVdYWMT\\NGO[^_bgkjZYdSHQTV_ilYYyoec^VSUXYSSQQW^cnv~~PPmdZ\\cfmN333=Wkkfea____]WRJB94344444444444444444433333333333333333333333344444445555555555555578777>B727;UtH6C>>GJ@99745755<:<F=679:>JQLJJHHS^YZPLRRJIJFV~tSQPJJKJGO\\XORW^`[arƫѥѽƞǛ̫wůȽ¹ͻ²ïͼ̸»ôʾϿxõӺ͹nǼǪyɝ[ym|hmr\\s|UQxvoFHEDB@99=DFRSJDH_gjob\\\\Rb_TVKXUZizh_Ytnotzafg[bg]ZYefMA_`PNSRIBKJ>65*<waSLBD>=5CRB4DSM@@F4J\\LUR_rlZa]TL6CJYjNU`NKVXzsNJLWkk^B`X``0/QyjfvpkiUT^fdRG[KZ\\mYGfG7T{~qK5]Qt\\@vsקz~7=etqx@]ZZfN^c\\TG58BDAOMXebMLLGID?;BLHMFGI>>>AUZVLSULHTZR<8BJB512445:>BEGJSOC?6&*64*',--.47;@IORSVYY\\`bdedccehhfba`[TQPPOMLT\\T?HZ^D-+7IH82233395154555655545443340<D==HF@AJOKLaiX79@921<GF@::95102<We_[XVWY_ss~oUfpRXdeWD?KP:-azx{]DLNNLIHKNNJGFJJK[r{xr̴iRsqc\\ashNNdsbBN}}}[?MbUMLVtuj`bV4NmO:DNOKHD=66=E=47=A=:;:?A947AMQMJMZmliy{lv{zx|~}xzicht{tQ<EOQOLIGGP`VFTpvplmor|iefqokjge[HAJKB>;:KH\\c=06;GLMKOZc~xbd[acffaUTUJEMKECAEGA@FCBHPTTT`oqkcWJj`PXjjWXokGEPTYcdXD@F@<?AEC88Rod{i@^?07;?><::87;@=;::;<5/0,-6;<===;:::;>=75;?99JSF:7=?@BB>4244420399665216AD50?HHFBIMKX`TFDFGGECFIKHA==>>?CHMG>9;<<<:867962b9+4452254@`RMPI?>=:ABNVRZc]bmupnwXfcygjy{dmuB664>LQQSRMHIMH=897400245546;<<DMDDMSWRHBCJMKHGHJJJIIHHFD@>@>87@HG=64;FIGJNOMMTcqnSWVNZnldZOUWKLQLJKTWW\\k{h;>LOD<BHGHLMLdzfN]mhaUJHWnsd]`[RMXojTPT::999;=?@ABA>;;;<<=>?????@AABCCDEEDEGGHHHIJLLGDGLMORX\\\\\\]^^`acgjlmpk\\MFEFFFDDDEEDISRPVY^dc`jl^[]Y[djdSJQWJHTI>?DONHV_druiotZB?>=>?@>=;<;9973255:@B=999<>AAAA@A@????>>@AA?>>?A@@DHNMILV[\\]`acegd_ZUSVYZYOIOQMMKFK`osr[YnzumhSM]jjiejrokoqqqoopngqx{hQQouc]]bew|fOPQ:Eznbncd|}v~g_deeywbq|uspnt{{fLJT^_SQE;>>ES[^`^URYZXTUbdahmo_SYcnocadhaemYJORWagcUViqf\\[YRSZ`YOQKBJXagedeSWd\\X]]gb;143A[lnje`^___]YVNC944444444444444444443333333333333333333333333344444555555555555555677859QP49OJE?=FA>>>@@96899969<>@<89;98BNMJJJILXVOJKPQNKKEa{XALQKIJNQSTWUQUlxv׮˳ĬΗ~ˤuxȝɲͿƱ̯ɹ³˾ҵɛɯyxʙŖ`n~ynfrfh|k¿ϦgHJECB@::=@CKMD@NQ{ƽl`kh^URia]Q\\cKGcqt^Wd~pusy\\^la\\feb_[\\]OQ\\YSQSM>HKA63,:r{aRJ@A:7:MI8;FG?AA@FZTUUWa^[O_QK<HYP_PAPP=EOSHOZi[}~gwfiAhvAXgPdza[WmypeVK^M;8cP9Yyo}mzaBiԺ{a'Yq{ojAdSloI^eWJ<1=>DCRK^eZOILGGH<6LIEMKLCB=?QYbUKVSLSUOB5?NPC4'*//269<@CFKMQSLD<61,*+,,-158>DLPRUWUW[^abbccdeecba`_\\YUPNMOSRKHOUXNBFPK6079647?63;?B;;@=<>@@?95585;>=:@C@IOVML^gY9AA;6.5>B@:885101;]_XVVUSTaiUz}|o^c^VJ?@LR=2i|rSFFGGEBA@CIHFHKHF`ŲmfuXVY^]YRZxm|}Qx[Pkv|u^_dK?XP;EPLIO[ZE799PjG-515>:8==:9:<BEBGR[i{ndjomnnqw{z~{ntutv`FAJOQNFJJLNOS\\gjhgekqx|gbdfa^`XH=AHIFA<9;C\\^L47=BCDHT`\\j^\\|uVJLQ[b^UMTYVSRNFAABGLLOOLJKQTYcg`^j\\GefBU[NHPbrm_WNKMQWUKEEF?<@BABH\\`WSzi?I9/3:@A>:741599:;=?94312237;<<<=<;?BB>628>@???=879:9:81,.0/.16=FID@<867<>87BGJJFHPOPOD@HJIGCACDDDB=>>?ACHOKD@>=<95456941i_1=;97007=CJQUSNGA<;GRZYTY\\`fhorZZſ´ynh_WMFGKLJG;565543334435<???AAHZccZPDDTWI?@EHHIIEA@@@?@EEBAHLH>646>FKQUXQLOUa\\PZ\\LMkuZTZRU[WKGFJSZan}{RCKEB>>HKMSSOJ^kffr^MTXQQjnYVWXZ`\\RQSSRRNLNSTS::99:<=>>?@?=;;:;<=>???@@AAAAABDFFEEGGHIIIIIFACKPRUW[\\\\\\]\\[[]_bdeb`daRFEEDEDDEFFCGOKGKQYZVTYff^]Z[hqvjX\\U:8?;=>?A@GQY_geVWlfNB@??@A><;<<<;843339BGB89<<=?AAA@A@@@????@AA??@ACB>DILGDNZ\\[_acdfhfd`XUVWX[XRPPPNMHI\\mptjT\\naen_O`|yj`eg_boqrrpnomlow}{yocVUR`^SakhLTYD4BcoujMZdQO[j_ewuypcdzu{nfegbhsrjm~|tZTdi_TWUFDJNT[]]Z]hjd\\UZ__^hgd^U_ge^_a`bhePCGRXZZ[^ZVYabZURRbnmaPKC:@P]hieZLTZXW\\]jP2652E_oohb_^__^]YWPD944434444444444444443333333333333333333333344444444455555566665555677973JnN.\\dB=BLLFA=>D=8BC==;:>AA:89<:8=IKJJJKLJPOMNPPNMII[WILNPLJKQ[[URW^Wvѳĭ̓{|ҳ¿þŵ̯ƿιƹϾʽƱδǳЬȿζʴs}Öv_ffnhl}÷mVgFPB@E@8<><@EB<?QFJǷw]ejeZWbW`Lx{YQnoq^Zn{n~xc[]k`_dkh^XUWOLT[XRNDCD<1.'4u~r_QE>>7;EN=9=><;<RXXMTTQV]JKSYJBDibOB8LV82=E\\w=ave\\vowusG>NMjkPDHY|iZ?LZkNhoRBamƭf~HBaΛv|yE6jZvTSZQYJgaQE65=>BJNMbdVJHMGMO5>TFGOLFAJBNT]^JMZZUSNE9@LVRF;/*--1559=@@AFRYRPMD;;;5/+*.27<AHMQUTTUWZ]^accbcba_]]^_^ZTPNRRONTZRUXUZYI9BFA<9ED5=IRLBGJGGKKJG>9;;=?7>87<BQTVQL\\cY?GC?<:<;=B=7542009XUSSTSTSy^}}}xmUIDCEP^QGgy{ykZH<9?B@<:=DEFIIGHLb©i[[MHJS`h{rzPRr~~|~v^[X@=:4C]_E>MZVC:;8Qw=30G]DEDBB=:9:63Jt|rnfjuric^^eiq|~|wuwz{vå|qw|hVMKLVXM]fNQPSY[^cffghmzu_Z^^TGNO?7?D>;=;79DTd[QP88>@@BJQU[J8Ocd`QONTZa\\HOY[VQJFCA?EPTPNMSSQTVV[\\YbTG[y_:LMFKQWaj}{Q@JQVZ^YJCJKBC?H_sWShP@_@/5<>@@?:8889977==74;FPYJ?8:<;=@><DC>95:>CEB@>;9999986344.0>JKMMJHGB<;>@::@EJPZVXZUI>AKKHHD><::=>===>@BFQUPFA?@=8778:89T`>9DA>8469<>AGSTRQKHOWTX\\WW_elmnpaSIDFX׵ΧŠunsƫlLTOB967777679;=:9=BCBCABOdhb[NL[ZH<=ADGJG@88:;=FHEDDJLHA=;:;CLNMMIHKNONKVf_Q_mZP\\THSRGCDIR\\hpqtpifjj]ZZVXUUUUVRJCGUYXXX]VSlzwgWQKGHNPRTVXUNJ::9::;<===>=<::9;<=>????@@@BBBBDFFEEFGHJJIIGFHNRQSVWXZ\\]^]\\Z[[\\]\\YUV\\TGDFFEGFECBCFGGHIKPRPOSZa`]^^cbmpZ]Z<3>;6>A==@DIPVUNJT`WFDBABB@=;<<>>:64329DJD88=<=>@B@@@@@@?@@@@AA@@@@CECBFH?BP][X]adeghggd[YWXXZYXTTSPOKKVgkor`[f_drsOKxo]]ZN\\pooqtolijmlf`bknfkgYWT[d`w}poV]WCCOVY__kv[SRPYT\\ddukijxntrxwidmuxtnlfcZLNSHHVRQ]^\\_glje\\TVSPOPONLR`aYYgiaX[X>;FQVVUWbe_\\eli^UVowm^F?BCDMTW]bWMRWWZ]ie>2843Gamlf_\\\\\\]\\YWVOD:444444444444444444333333333333333344444334444444444455555666656667888844dv9CjO;GT^_YOGBAEJD?CDAAAA=<>>;9;@GJJKQTDFMLMPRPMHU]IJMNKLJKO^baZMbqlƷőǣþżŻìĺzºϻɸƣÝɴm~ָio{nfhfbþy~bHHl@JA>CA9<?;?B;7?MACй|ccnfd]b]h`v|mfruwlnqnly}kZVac]U`ib\\PKPOJJTVRLB=<4/#9wp^NB<=6;K=165765Hj`JHVOP[OE]uVNRjlG1:QeNFBDEfqZtyZkcy}`}w^jxmZZ_6Hqoorb?7bq^Igitpoˉe~ADgťzhҦBSZXo}JOJ`x@QiTQA2:=>AKHQd`PHIIGVI9MQJMNGANJMPUaLK[_ZSLKA<IQQLHJC82./2257888@RREEGIHHKD2(+-.3:AEGOUTRSUXZ\\]_bccc`\\[\\\\]][VROQROPT\\[Z^\\\\[[V\\OFHGTH<LX[QJOQPQTSQLB<B=EI5A;6CLWV[WL]`YIPTNONJ@<@>62121/=[SQQMIV[qvzwvlmplhr{utvs]IBGLc|r|{wzvneN;96?EGIHEDCHJHGFCHendqjI:ALOd{}lOQVfux}yaKA;42CQitUBGIB=AJDNvD=lcSFJD8755<D\\yip~tqh_`hr}~wtqnrtprprv~pbjcWPU\\a{gTMMNTY\\_daWYb_WYbeaTOJB@AA>>;968GOMJMG;;>BCFGCJW:6Q^U^bfmnif]PT]bZPHD@>=>@MUOHLROHMVaeSO@HSXQHNLLTZiV=GNV[^ZHA[]BBEdzc^Y;UuB.7?CCHKKLIA::88<=9=?FO\\k[<5<:>FHBBDB>=??AFGGEC>>?>>=@B@98GZ`ZTNLMI@?=>???AHP[jeZWYM=AKLJHE?966<=<:<:9=GTZVNFDFC=;;;<;;A<;===>>:8::;:=BFJLJMVVLP[SUfomrtdQQSL;N׵Ԣɾ}H68=HKQg^AKH=569:;:9:@EFB@BEFFGC=OhgYSOS]XGABCCDEB?;<?ABGDA@DKJF@?@>>P^LCIJHGLPQJNis`VbcTXUHCEFAAIT[`^\\wɡqxzpjfi`TTcypCEYad`YVUNJ[z|mjfZMJLOQVWWXMF:::;;;;=<;<;;::9:<>>>??>?@@ACBCDEEDDFGHKLLJKQTPOPSWWVX\\]^^]ZYYXXWVTPUQGEGDABBBA=?@;<GNLLMOQTU[`]b`a^NNTWbYFIPCHSE<789?IKGGFKNIFDCCBB>;<<>?>95338BJD;79<<>@CB@@@@@@AA@@AA@@@@CIH<:@?>DJJO\\deghhhjhc[XXYY[[XWUSPNMQY`gmm^[j^im\\crxsc[XOSghhfihkeelnpobZNPUPSQIFU[\\u}sfNTn]EJI[ik`VZb[Uasvjb\\txszxu|{qmdTFKQWXJEKWbh```ULQZTPUUTUZeomeckjXMOOE=L\\ZW[`fc[]oxymZk|gM57FKGEIQUYUOQVWZ^kP35745JbjkeZWVXZXUUTNE:444554444444444333333333333333333444444444444444455455566666656667789:;4;kHOPKNU`oof`SDLGABIIFDB@?CGFB<:;DJHIYT@=FGKPSRNOijOJMLJLNPQ]n|zcʱļǫծɼƼ¡ɻǼ̕šoʹƱ~wŧhvζpupqssc\\mú~vbQUK\\{<DO?=C9<@<@@96@DCQa÷uiliebfmjpbeeZ[_eb`b\\a}ok^XV[\\WSZb`VFCNSFENSQE<==4%>wx^L?;<66:-/2066FgbSAM]HQH:czaSWb[G7DZ]XXmca_rlixvrv|o]rudd\\WdkzrTBD@ayp^boO\"Bb[7Obl``NMfzdwDTKis>MHyY?V`WJ41<<;CJJUbVHHIEI]DBNQOMJCKQLGLYZPY`ZRJNMA@FNNFFNHA7.-./---,,ATJ827@DDIK?,)*/37;CJRVUQRTWXYYY\\abb`^^__^\\[XTQOPOPQQc``__b_\\aUQTV_PLYa_VPUWWYZ[[RECMCNK:E=>JYa`^WN\\_^PYb\\_YPD:;=71/0..IhSMNHF_bWq|xm`lg]YV^l|oluFMKOc|zv{yrspe_P<?CFKH?=BIKIEI]sekuqXA;>?Grf_{wmME<Ics{xX:DH:GZUcsQAA>:9Yj[v[~zbNL?57?DMar«{pv}|sedjonx}pllnspquoy~|yp[^rvgVSZmWINTUQQ[e[IMWYWX\\ahgZIEDDD@BFFFGJKJIKC:;CGHHB=JJAEMWWVWakmrlUU[_bVLI@8<<85Ib[H?GMDERdhUA>JRNKMPLKUf~d@@JOJBHE>di?BLjzXWG5Te;/9AGLUXXVJ>:9::===GC702<JJC;8>KYWMFDDC?;ADDHIJA@DBAA>@E=>Xijd_ZUSJ==>>>;;EQZchg^SJC=AHKJHEC@<;><68<949JWXVRIFHHC@>><==@??><;===:9755447>ABEGMNRXTUcb`aXJFDMREjμe¦U:GC<72138=DD;36;=>=<>CE@?CFGGKPKHZlcQQQSVPEDHEABCDDDFFDBBBA?ADFEDEB@SlT<FKCHMPQQOMU`XT^h`[SGCFE@>HTWXY`ζ|~wgPgbUfeYTW[lr]jkd\\UPRX[XUWZX::::;;;<<;;;:999:<>>>>>>?@@ABBCDDDEDEGIKLLMNRNLLORVVVY\\^_^\\ZXWWWWWVSSRKDDIPV\\`fg[IBQSMNLLNSSVZ^]ckleI;LPWilPIWYVN</9?<;?AACCBGGGFDBBA><=>@>;6326=EC>849;;@EBAA@@@@@AA@@AAA@@BIKB8<?;:8:FXhjhhhijjg^XYYY[[ZYVSROOONPXdrfWTOOSarolnoZWOLOTY_\\cgb`ikhb^UUa[SbSDOfv}ydZYdurP?J]gZ_^[`~{nhlyy{pkpr~~}lp{yp^Q[faa`L@K^mfetqcYTVVNQ[^[YY]mY[TVQKQMIEP`^[_de`V[htphZzbG8@KMFAEMQUTOQTV[dc:06528L]bfbWTTUVUSSRME;445544444444443333333333333333334444444445554444555455566666666667779;;81LU?UUJPhpmM=E?GMIFDA@?AGSSK?=FJBIYP>>@?HPTRMRrdRMPU[a_Z`iqżn̹{xĤî̸ǽƤϸļ˯kĵzoƠirϾopo}{mRôsncXWPJ49BZB9B<=>?@?97E>LV=vhkcddga]PPPFGIIHGIHSo|dfaWUTYXXX^_XNB?JSLGMNE><A91@u|m\\J?;=647=>22;I\\S=GMNRDE?S{mSulPBLhxpZLWjqkdkYZ|i]scekQEGWjOOUhvbT|saF8Jcr\\^^D4KLK92^wq[eOWɖo}UdDTZm\\AHfxAEYhXC.285:ENVZ[IAHJ?T^DGO[LNDGQOHBLUSUVSQMIRN?;EPJ=AD7<6.4=?69867DRF1(4>AAFKHA:2.2=CGJNUUQQSUXXWWY]^^^^_aa`^\\YUQOOORTMM[``ac]\\a^\\\\\\^WW_a_YUVY[[\\_^UIISOSLDNIIMV_[YUPY^_U]f]]WXH;8:72.-,-QqYWPJVe]Sgl]QFpz[\\j|wè~FKFeUe|uy|zztUAAEA<<>ADJLEHkvrqukVV]O>6:?SZaw{zzU?:7@[szpMD]RD]gb^f^GAGSO9T~z}|zK4;;Qkinywtutswtnnqf\\o}iehoxq|}sxvnif]anvtdUYp}`OZfXKJWgVGNLTWWWSLIHFDDDGAAPagXLLIGIA7?JKFD@=DHJLJQWPIV[YomPUY[^QGG?9<;74DZUKCBMOPX`aS@>JPLGMPJITfynCADIA7>FE^nN@B`^NR84:951;CHOSQME>97777:<?CB7--6LXSA:@Od_NDABB@@AFFEIKD?ELLD??C==M]hjkeZUK<<??==KZaedcd^O=CC<@LKFEEEA=;757:;;;HVXTQJDFJJC>===??=;9:=<:;863113?JSYYVJMPOQQOWT[[I@=?NWM^u_tQڥxJDD@?<7557<@A=;<??????=9:AGGFMTX]dhVOQQRSNMIHFCCDDEGGFDBBBA@??A?<79FYnydHMRPQQNLLSRQ\\f]PDDFD@?CGHU[\\}ylbjkn̫\\YYi~rnge]UhYU_``a_YWZ[XUW]^999:9::<;;;;;::9:<=>>>>>???ABBCDEEEDEGIKLLNNIDGMNQSVXZ\\^_]\\ZXWWWXXYVRUWUXenpsvwv}va`ULRRMMRRTY\\^ahmgSHVXHXr`JVaYVC4:>>97@CBBADDDEDCCDC@?>@@>83259=@A>99;=@FEA@@@???@@@AAAA@AAELMC==<;77<J\\dddeghhgaZZYYZZYWUTSQOOJIOYfiTCCJT[aigea[WQJCCM_ebccZ[elZURMff]l^QUllgiZ^ovwqj`wsWVheWg~tnnuxwwlWMU\\_biaQUab\\Zbkj]Yb^QSU[]\\ZM^CGGMO[ZVKWZ\\_^_ba]VV]ge\\Xʄ[TMOPLFACINRRPRRTYeP13542=LV\\`_[XWWWVTSQLE;44554444444433333333333333333333444444444555444455545556666666667777767BJEFHL@Hjv`vÇ>:BNQJD@@AB>@KT[NEIH@IUMGJCBNRRPMOiaWSX^dkjekxҼŴ¸ĵnvt~nŸϥ˹ȭ˻ƽոŸͨʡ~ʪzʿs~zn}{pxqapxeteWVWLD8:7[M6A>>?>><8;DBcH=rlicb_XMPWQY`[VLVOD=CVkd`^VSPQVWS[aZURC8EUQHLMA9A?;>glbYI?>=54:EB.3AVX52GROKDCOpqewdObzlUPHCLckVb[De|poh_o^frsBMm`MEhh`kmXOEJVok7GZ]qMLW]2Xb~xrf?wqXoVBS{yhJAIs\\;EirS>:9309JUXUP?=JJ<d[EJX_KKBNOG@DMQPMIJLLRTG<<ML>8B>7>40@JHDGCBJGI?,-9<<>CHKLIFDC<99=FPTPQRTVXXXYYY[]_``ab`\\WTRRQOOVXHIab^_```_^[Z]]^^][[XSUZZ\\_[WOUWW[NMXRPPRSPQTRVYYVae^_ZXCB9674.))*Psa^QKV^QJ^`Q?:Zoտן@>Hsjeformr}sjhgffc\\PCBB;3/8AFGNK<Krvstn_TWZXVQXu~zyxzqYB:A>:Pp|aAOe_JT[`YG=<?B]}mf~yY8FPSgxz~}zzwlfjjmqkaXewmcfkqo~uoed`\\\\blxwb^qxb_oiQIKRZRRUCFNT[WG79;B@DOC<N`aMPYJEEEBHJFA?>;?HLNMNVSGTVP^UGSWZUC?EA<<<879@EIH<BPY]ZPF@?FMGDHLFGPZlszTDBHIFEIKf{X=4`ptR>714:>ADEEDB=86644337<>=>:87<LSSKBCR`XE;<==?BCEFFIMKCHVZM@=;:54B_ospcWL>=>>@Lbjhhb_`^SFME78DECDDDB<666448?DIRXWNGCDIKG?;;:863118BA:621301:Tlv{xnaYVTafLPUYRB@ZwmYbquknsef~Y>EKLKLKC:69AEC@@B?;97678@EEEIS\\\\ZSKOPQQUXWQGGDDDCCCAACCCCDDCGC6=QaZfjEKONPPNMQNFMZZJDCDCAADB=Ujbgyik܈<9@CP̴^Mu|s{{idc[êsX]^`^ahb[ZXWWURQ889989:;;;;;;;:::;=>>>>>>>>@BBCDEEDDEFIKMLLJDBGKMOSWZ[]__]\\ZXWWWWY[]]_dfhlopprttuwrk_TSRRQONRY\\[[\\^ac`a_QQYjnZT`uaB:;=77?CAA@?>ABBCCEFCAAABA;32469>DE@779:BGC?????>?@@AAAAAB@AIPJ?;<;98:<DPV[adeggc][ZZYYYWUUUSPNLJKOSTOGBO^XT^^VSWWSL@=Nbe^be_Z`st`[ReuzxbUOf}|wiX_^UYfqyyfawx|ypaS\\ml^Z^\\fyltz|rl~~maVRONXagc_\\TRUYXdg[^ddgka\\befZWKQVZV^`Z\\YPPZ][`cc_VW[_\\WWVPKMLF?=CLOOQTRTXa>47555BLRY[[ZZYXWVTROJC;5455444444443333334333333333333334444445555555555665555666666667888869<Ro]NRMUnucUd<MVZYUOONGCJLNPRLJHEKTXZRKMWSQNLK]^\\WZX[clpv̱Ήvčzm{hv{ûŹʽžĽȶɸ°ľʶ̭ƴʲwɴoxvouprvzƭy`fsvĸwkaXWQK=CdT-TR69;@@=;6:@<Yj?SZȩvffe`TQq|aryl`Ym^QDHOXb\\YTPMHJUSO_bRMQE7?SQJPK9:A=>X^^UH?A>46?GP46HXR4:HKSFCMWbafuehp]A?BAGScRV`EIyscbaīxvGSszmbjiWJCM[fvv}g=6BhuXH^Sf{vYQþ{ja~NAZl]B=YcA;O}bXEE7..=RXPGD<@PGFlUFSaYMEFOF>CIMOKBCKORWQ@?IPA:BI=G@3:EJ@AABFKB<0/>A979=>BDDHLMD>;:CMPOPQSUWWXXVUX\\^`__`_[VSSTSOLNWTFMYZ]^__`][[]`_YVW[ULOTWWXVVU][]]PS[TSTXSRQVVSWZX_a^_[YNM=777/'%*Pp_]OHNQHARaR<;XMz޽fboʇwlYZ]_[Y]`WOPOONKIKID9/,3DJGIJ>7?IUaiqvoqfZagc]k{ziNF>;ELOUlxX@T`\\GDHCA<99:8J{|y|zvsMN\\`bxx{}tia][[bicZYalmfijkgqvvsi\\V\\^`bfp|tjs~umsucOJLKQSUV@;@M^`N738DJSdN6=EKRfeKEDB@A@@>>>>?DGKHFSTCJLILMRU\\]XLCEC@=:8878=@B73:FTVJ=<ABA>@HJEDIWslQkx`QHKLKIEFd{Z92i`ZPHJJKQTSNKJ>96555447;??>:34>MIHHFEKSPA;:<=?ABDEGKMNECOTNB>743.7Ujx{iNGDA@=ALWX[^\\^_`d`ZB<ADCBDDCB@>=9317?EFIPRKEBCDGKE;41333339CC<61/05:DR_eii`cdacUGPK77MƳ|rweoyܔrss}}E6CMLPUUL>5;?BEHJD<:<?BBCCDCCKTMJLNNORQUOLWJIGDC@?==?CDDEGKKEDkΗۭeEFLOSRPNNMJIKKGDBBACDCEmµ|RHs͎G;>G`»slzqcakkdbj˚{z~nekxn]XVWYVPO888899:;;;;;;;:::;=>>>>>>>>@BCCDEDDDCFIKMLJGEEIMPRUZ\\\\]_^^\\ZXWWY[]addccehmqpppqsuutnll]MKOOQUY[XUQXchdWRPLGLSJGYe]J<9FF<=@ABAAAAAABBDFCBDEDE@7568:>DFB=:63;CB@???@@AA@AAABCC?=DJE=9:998969EMRY_`____[WWZ[[XSRVUOLLJHJKIHHEGPW]^XTUUTRLCESYUZ_\\ejgiwhNBI[gYLUlvQ^[OQeYWwy_lp[wzabmwyjhttzns~}rwxqa[[\\^ff_^VRWZ]iri_`alwype`WPYXYhe\\bba]`YLMXYRX`b\\U]afp[LEC?CJG;9BLOOQTPUdQ36667:EKPWWWWXWWWWTRMHB;535544444444333334543333333333334444444455555555666555566666667788987<We_dkjg`\\`cccef]S~sV_fh_VNBEUUMIJLKKLMWc\\PHHKMMLMIRZ`]XNVivƭĶy}qihżǿǵľòƸʭɥºο׵Ͷͦàļþǩªutnehgoyd\\}v«vmb[WSMIGDJ:GN997CA>:7?@@jZH`NgŻfjjdZdkob]YrgWQRIP[YZSNNJAESMLa_FGN?5COJNV?4<>;OWXPE?C=458;fL=IRNED@MNFIFEKYbobWJD9AOOGM^\\SX=;Q}noskiZW}z_QHDFLVVequtxZ8iwfvtZR9^k_Zap̪ZrsxA@u]W?>^O8<mlQVM8,*/CWSIC@<FSEViLL\\aVNBIH:;ILLKE>FQUTSI?GOC@GEC>F85@DG>BA@@>70.:DC<645458:?FHHGJIIJIKOPQRTTUUSUVY\\\\\\ZY\\[VTUVUQMILSRIEMZ]Y[^]ZWW[XPOTWPHJMNNNPMNU[[XUY]WWY[VSRYWRX^X_^^`]]WSF?992(%/Xj\\bXNLIHCJYP=Kwd<Rvns}Ϳj^mpcdlm_ZKLNQTUSTTPG>2/1;IMHD<4;DCEXohjueVcodMQl}vxwW=;:;<MkolmV>QN;5;=C=75=CDQu|xv~qh࿂[T`yzxsw~vdXZXPQ]ebZdih~gjne^ijeZZZVX_bcciv~{uwzyvxvo`JBKSSLHJC@?ES^U:07=DZwb?=GPevhNFG=24;>>??@@AB@==IR?AGFL\\lgfkhVFHF=9984==7:C?406DQM@=@?<<@FHDBOh{v]M\\ia]YVLIKF?^xP-6]tt}r|yoVAERTTQPMC8765799;<>?>:5;HK?::=>=BIE=:=??@BD>=JOK@6;BEA=83425BNm}iFGJIB<?><@Vb^`afnl]INOJDADDCBFJD;56:>?BEFHEAAB@>BB:1048::;=?@>;3-/?PTX\\VT[Q]\\RSpSAGF?>>jyqnbpwvv]B?DHLOG:;=DPXXRLHGHIIFDC@=BFBBEPQRTRNI<PSRECA@@?ADFGGHNOGJjMHGMRUVTRQPNMJFDEDA@CGE=FǽoyPLU[hٝ|fjg`gp˺jiuka\\Y_a^_8888899:;;;;;;:::;=>>>>>>>>@AACCDDEDEGHJLKIHGEINPRUZ\\\\[]^^][ZXWY\\_`_\\[ajolhhnstttttsqrq]ILQUXXZVUVcdWQJFHFB>=CLL?AK?>IUP<@CDDBBBBCEIFCBCDDDEC=989<>ADECA=63;CBBA?@CCA@BBACCDC>=??;8887788<DKNSWWUWZ\\ZVXZ\\][SMSXPIIIHIKIGHFERisibeWPTSLJJJIRWSXgppmdW>CGB_ijyiqdQU]Zdpgizqnfg~slfithstixxt|~m][YVWgi\\WQT[VS]_ZWZ`dfa^]SGFW[clfdgga[SWWX]XLOWYZ_mtqjNfЛL=99>HD9>GKOOQWZde?15668?HJNUUTUWWWWVTQLHA9445544444444333334433333333333334444444455567766666655556666666678897@jbPMMIOWXSV_`ZTv]Z^ZLGHEFTYVQNLMNNNVa^aaYRPNLPLNR^d[R^Źʧ{rkcqŻ°ͥ¾ĺɱ̳¡пʧƊã{źȻũtdcd_qy~xhUoÿrc\\XTMIDLE=UOB?=@CC@==?<RcHU]FH̺oikd[oqr`]cZwoRVTEPTS[SOOME<AKHQeX?EMC;BJSSN?6;8LXXNC@E?2*+<wZ@@EF;?NG8GN)0G^yg?4>@G[]KGXa`[7(JXnmjhvp~cnjmiXO^tyxtxu|g^~gOr^YfjUW[ekb^Siė~fgikn|,OkXM7GV>1Q{QOG;',*2KUKC@??NQF`_HS^bUNCKA2=LLIGBBLYYRLEFJH?IBB=D;5<?FE@@A>84<=>?BC>77741//1579;ADHFFFJMMNNOPOPSVYZXWVTWYVTTVVSNIHLSPFGSWTTVVTOORKFKPTQJJLLLLPHDKUVTTZ_ZYZ[VQXZWXZ^Z]\\^^]_ZUPF@A?1+2a]YbbUJFAACKH@R`TQPJWw~xōfigm~`KPQQRQMQSI9425?GIE<52>EFII^}gkseW`cP=58?S}{ohVA57:9A[g`YK8=VP73<]X6:KN^{}wnuoxܩfQzujnvl`YRNQWYbprowji_gnc\\cdcQRZSXa`Z[bmruwyywwvm`^R>?MPKEGOPIDFJTVG6032M|rK@DRfm[DBDB98=??@??>@A:=DEN><>@O_iijqiUJIEBED83<?7AG>998>IKA>>BA@@ABAI]njZWYPOTZ^XFDIHChQ*2@DK`{M19;<?BBA>;86779::9:;;>DIMI7557636<;88:==@DB5/@MF903;>=;8545459ShZHMQQOG?:5Legdfjjge\\RSQG?@A?>AGJI?9;;79CIGDBAACA;67656:<?AAA?>??728M`gii]i|\\bUMPQUD?NTG<FKGTtspmrwvWKQDHgaGCF@@ISXZYYWPKIJIFED?:;::99ISTVKAG9=PNECBCCCFIIHHINGJIDHGV^YSQQQPNMIBBEB@ACHICGRWUf{ogg^[dibUr̃oզyz|~rds΍tq]cozg[Yirnl88888999:;;<<;:::;<>>>>>>>>@AABCDDDCEGHJKKIHGFHHKQXYXWX[^]\\[YWVXYYXVWZ^b`Y\\irssuutsrrqqoeXRUWYXUTVXOFEGLLGEEBFKG=<ORD?AQLAHHDBBABDINH@?CGGEDCB=86;>=AGEGG?9BGEDA?ACCA@BBBCCCEB<:::977889:<?BKTUTUVVWXWYZZ]^ULNUTJDDHJFHKHFHUimddiVKSTRTPGGUVS^fmqsdWNXRHYWUs]g][Wkk^m}xxw}}aat}y|xzxvtnllpnegocXRW]^^\\ZWYZ[\\_cfle_SRTMIMddslgaea]YOOWZ]ZRRXX^iiug>7RI823>FC>CILLOWbhkW62666:@GKMRRSUWVVUTSRKGA944445444444433333333333333333333344434444556767776665666666666767886OԧgD>>DR[]^^`bb\\Ums]E:AJPU\\^]]YQNOQPN[u^PORQQN[eefk¼·jualûǾįûȿͺѻɾʥͫ׵˙̨ér_fgZyvqřrPrht\\ZWSJD?HG>+Y>7CEEC@=>;@\\QFYO>Wǲxeke^{gz{XagRtnPWaNMLKXTPPPROBDKJ\\hM?QRB=GUUNKB>4FSWODBI@0(7`yM:8:?4>UFIdiA7@\\oK6>ST[ZH@NUXZ@28^jui~}r`Vkzdrihb`WMLasv`MKT`Z]oqVIuyONaUyYsPh_JΞxw``acfY&fRO=4JH27mbNRA)(+*8OOA@<:BQLKaTN[^`UJBL<1CSJBIFITUQOLFGHFGH@B@A7<@=ECD?=8/4DJE=BD>9=>72,)(.10026=ABACGIIJKLNPQTVVUTTUWWTSSUVSMJKLNPNJMQLHIIHFII@AJKQRKJMNMOPLGMXWSNQYWX\\[WS^[X^[^[\\\\[^a]\\YXLLJB8-1e]SYWNKKE??DA@QUOK__Hh||e_fouxY\\[ZQIEHH=4231<KJ=105ED=FP\\pw~yhffgebWKA;GTd{ugSHIG>46<BKONH=2./Z}e>8he66C@Sv}yqimriyΘxw{ywmipxgTKPMCJctnpyhnajndf`PYTCIPZdYRbmpqoruusqcNIMFDMQJEFHNSSNIGGJI;4?7?xT;>O^`WMMMKFA=@ABA==GF=NdXS<26K^`ZXctncRG@?TY<3;;<D>78=<=?=96@DBCCA=>N`cXRSYH2>SZM;?DAGz\\/.07YsF:;;<<:68@A;8789887767<GILN:7984367;@A>;>CE@5-4@@>??@?<976422127?=>FPU[MDIPcjfjoohde]SOG=<>>77FKNTMC?949CHGFCAABB;339<;:=ADECA@AA==EOWafpnlmhjsqYILPf\\Z^IHNY`mlflpdx73>BJGBACSiGACBO\\[YYYXSKGIJIHFC?=9535>IMOB9:><HHCCDDBAFKJIGGEC[gDGHSXTPQQQPNMKEFGBACDHLQOQH8hv[[jn^NMTRI>EݲpĦ|~vvٛtuwikkr|^[jy{vs8888889999;<<::;;;<==>>>>>?AAABCDCCDFFGHJJIGFEGGJTYXVTW\\]\\\\ZXVUVUUSSSONU[^hqqrtuuttuusqmkjaWVZZVQNGCGGGUUEHLDBGE?<DTSNX`OBEFCCA>?CJKE=;BHGEDEFA85;>;=BGIH@LWA6<@@AABABCCCDDDEE?87::8789<;999IUSVWPMQUVYYX\\_XMEHROB?BEILMHGHIORSTSRSUX\\YOE@IRRZgloooaK:?M]S;]q^|a@LEBIx[Vr}iWmu~ytlhhnvyyqg`[XW[YYXRPT`bXSYded]\\`YPMY[^Xb^[WXZUSUUUTTTZ\\][NWP67=F705@FFDEHKJM]kncB25678;>DJNOPRSTTSSSRPJFA9556555444444333333334553344333443334433235666678876677666665677676?pѯQGNS\\ggffeccbba]lnaRGOej`]ZWOMOSRNSqz]SQTTTNYhyĳnw|bpľƶ|Żyw~ïλƴξѾ̯ŭӻŮw{^jiT~w~xvQgefZXUQG@?BAB:.T9<KHD:9:;HUKMMAMokҸydeghw^rZ_]IihTYgRDHKRPU]\\]_PBFKOejI@PN@>NVDERK2<JQMEFJ@4;Ovc3.2;@;@KDSvtaC=VR@N[LGDC<DOO]Z9CAkgq|qzpSRLi~aLei}_JYwxtYDPc{ud]OF?ay_DRk@[M[gZunEiZUwfdUZ\\lD?kdK?-7D>4RjNZT>'))+@N@=A;9HNGOZMY]\\^TFEM:4OYBBOILNFJQLEFGHHCDBA89<<;BED;5217DJC=CC>;?<83+.(5202436;><>BEFHIKNPPNPQRRSUXUSRRTURNKLLLMOMKJGDCA>@EA;AFCJPKKMPQQNSQS^bVLJNUZ[ZYXbX[a^^Z\\[[__^_[YNXRI?13g]NOJGPVQFBC><KOQNsNEe}stzbcormxfgkmfRGE?2--/--@I;:E;589@M\\cc^m|d^aagjgb]QEQkdgiOABCA=?GQPR]VD:5.+,CoyeSa`=8FBF_qttrnhffYQuwswxzzvjggdREHKGEJ`xthvdl`fkggU<ERIDNY[KTortrnmmkjaK>DGDFJLKLJINPKJLIGCC@?VcKgj@7CR_kgB::;?EE@:=ORF]vxn61RaigN?TmmjRFK@JaL<A=;;59;;987666:<>BB@=:FW\\YWWYJ0@_^F9?C@Ee20:SxOKKKONH>9BGB;:;;;999788985AM=8:978;:<CEB@BGG@93103<GGB?<9743204773223AUXNQ`ookeotpjjjd_U@7::958JRV]SB<;8<BCBA??@@>946=BGEGGHHFBBEEDDEFFDTxssnsaER\\aujTcdqvalfaƬU<=??GKLKIGC<EJ=@A@CM]b`^^\\YSKIKKKJIHEA=;=?BFH?9;GJROEEFFDBFJIHGIKIPS@}Y=GGJKMOPRQPOONPRLBBGIMRXVSMHfƬ{f^A7CG@Ahʯw~gujpjpzxwcn|sv878878999::;:::;<<==>>>>>>?@ABBCDCCDFFEFHIGFGGIIMRVVVVY\\\\\\\\ZXVVUTTRRMJUfjeksrrusrrrsssuqegj`]_^[SKDERPIOQJJH?=C@;HYVScgZQG>@DEB?>ADA?>>@DFEEFHH?66;=<AGHA=TK.8CFFFC@@CDCCDDDFGC=:;<9789;:979LSKQTKDJQTVXXZ^[RJJNKDDEKW[SMLKIEFHF>AV_aaRA5>AFGTfpgjqbPERb``[brV?OG4>KFIasaYoxpyzu~wkY\\hj_clpkpnrz{}wqwvdTNOX_d`]_RDIX^WW^adedff\\KGLWMNZfTNW\\WSQSTUVW\\]RC88:>67H96<BEFFGIJGQdokS735668;?DJMOQRSTSSSRPLHF@745645444443333333334455545434444345443435777668876678876665568877>m׬ɓQHS_ifccdeeed_]ccu|YHVfdd_UQMKNQRSMatZTSPSSUNQbǻǾ»ùy}rhpӽ˿zöz}lmɴɽΨƻӽĪƼϞɳ̽{wjr`VwuvVb{g{|}^WSQLD<;;:=:A/N{<G;>58<=HNMKCMooVjoagl{c_gVIJ>_e[^dWCBCFHW\\VSRH9;BHRffJAKE9=H=?OG/8ALOGEI@49PaOOB:?DE?:@Li^hB7OEHb^C9C@MSRY]CIMATKr}i{z9g]v}m_0>LKXlwfRm}l^aa]FIPNJTk~igLDyc\\O4V_dRBlQl{~}n^[XW[|yPXhoNC1'=?5MfRRbK2(%-7EB5>C?=KKEPPN\\]]_OBKQ4<[Q;KNGE@EMJBCGECBF@=64989<HD@5333;EGB@CA?>@;6504(5.5>:35:<:9<@DFGHKNNLMNPRTUVURQRSRQOLKKKJKLKHCDA?<>B>;A@;DLJKNPPQTYTVccSMJQ_^YX]_`W^a_]\\\\Z[[`^_ZVT_YUI87feXPNNQRRND;8<CIWj}oG]z}wsosۧZ]Zcealzqfdgfon[G:5856>?KT9?eS06A?EWZMUeqwbY\\`dgkj^TRKNyoztPhwV<BED<;MgkdZH75GWSRM[nulb]GJ\\WXm|}ztomh^Vh}x}qkhie^UKPQGF_nqtjyclcabb[KEFSdQHNGVuqfpob[ec[QEBHD@DQ_aTGINOGEGINF:;AS|nzO6<M_syQ7004:BC@9@XXS_quH_h_H:EUVXTJSTLZZGA:769?@;=<28;<<<8<DGB;=M[]]\\YM9CVP>;><ARs54OqoaZSKGE>6@DB<<?=:9:9898:2*2@>:9889:876:CEGJKD;541,06:<=<974469<;::;95;GRSWSYZ\\dqvpnn]chN8677;;=MVXYM:5;=?FHB;;>?@@=98=ITTPLJIFDEFF?;DF@@dojebVHTYmobmmcmt]sGDA=BEINQPQONKHHGHGCDMW^ba^]\\UMLMMKJKHDDDFHEEKF:>@CLPKJIIHHHGFCDUZGDGHѭ=@EGFHKOPRQPPPQTXRDDJGJMMOOE=QxTA=@Ecpzkht~iUdh_rjoek|}7788889999:;:9::;;=>>=>>=??@AABBCCCDFEEEGFGGGFHKMPTTTVY]^\\[ZXWUTTRQLN[b`aipqpqsttsqqsuuupg^^_[\\_SJHFSTJDITOHA;DTWFHMWhiVNF;>CCBAA><7>FEABFGFFJLF926@IJGFDFD9<HIIJGB??CDCCCDEFEEC;;>;899::97;HPMNTSJDKRVWWY]\\YYYYVWUOS`dZUUQMJIJC<UlmejeJ>MFBIV_ih`bia\\ejcm{fP>=;96?PTV[^gqorojx|fUpzmv|{mjvroolnr{tvww||q^QOMPZagcYRPV]^[]gnhdggc]PGJW\\[VYOI^aUKQX\\]]]]XL<646::6wH<@@BDGHJJHJXhf]E537668;?FKLPRTTTTTUTPIEC>623444444355345555555555665455444566544556778998::889;>=9776568877?OD|ܡdPNORTPOSW]ege]Upohuym`OP_UUebWQLJMPQUQUe_SOQQQOOZgdkž°ǟyprzgʼֽɵ¼ŻîðӼӽɺļ{çͽϸ̺˼||{wvsYfn|xYjyf~kskVPMID@7798=HI,Zr:5C^LABJUODOdq_LNȮfgld^oUJ[]:RmgV^nWB78?IGA=?9128ACFcfFBC;559AA43<>IVGCG>1+6Q]aTEDFF<2ETNXZ6:ZTV_M:DRIOSZP@;ONA@]jpdvRJtqzenl{]Q\\SA9Gq~zj\\[LJGJV]ZVfuc[Ezxab;SeXENsDM}n[c\\UJb|eVUi]D8*)9;2XVG[\\='(&/??38HCACMHENMQY[^\\JDQN3H\\C?SGA@@HG?;@DCCHG9107:68GG>:9;75@JEDBB?ABC;3650(3:>=4258<<:9;>ACEHKLMMNPRUVUSQQRRQPONMKJIHJKHB<=?@A?=>?<9@IKKJLKU\\ZRYaUONQ_d][Z^c^\\aa^]]^Z[[^]ZWSTa^^V=D^qweSOLHORE:8<BBIcmil~yopnpk̀\\^oiLVmfh_[]OSzuO2<ZeZPhyp;9uvMHPLLJRW^_bf\\VZ]`ikibRFKSYlpgW]X<dydG@EGKE?I[[F2-.Cgxul_SQ\\eYIL\\SRkwunhklcbnVaoxvvtnnj^]ZW^h_Yl~|rydext`[ZVSWTWpgZ[PurkvpSJcbTOLSZLNXlylLDIOSPF@GLI>64:ce?5FSckTNVC<74;B?<UoYU\\kupW_L>8P]GW\\@BV__^Q?576?FB?=;77.HuY3=PTMEBJV_b_VM<89669=9GuD:kaWxwobOCHDD:;>A==:7>:986761/,,9A<87799<=:9?FLPPMC9:;50,-4;=;:88;??;:=@FEDFMSVTKHX`lyrqe9IZE25=DFBGSZZVG0/=@CJME?=>@DGFB>ANUQPNKLKIHIB1/BF=Ilvjeb^TOM]L?V]tbwrf\\UkhLMH>@EJNSVWWWULFJNVZUMB:G^a]]]\\ZQKLJJMG36IHNKFJMHB@>?AFGHIJKKGA>G\\VEJFJ@J?:BEFHIJMOOOQRRRTVRKFTrkRScloesmry~K:=HZjce`j{utm\\jdTVUXphjfj|9888899999;;:9999;=>>====>@AAAAABBBCEEEEFFGGEFHJKNRTVY[^_]ZYWUTTTRNJMPLWkqonlnruvusrtttropk[VZ\\`YOIDDFF>DWXE@EJdwbKLXb[F??:;<?@BA>;8@JHBBGIHHJLI@:?O[QDEGIIJMHAAA?==@CDCCDDEEFGF>8=<:99::::9=IUTQVM?@LWXXY\\[[\\]jwvdLHW]YWWWSKKKCUnoutw|ffVAFHNWa_Ybrm^]lnfmkRECA?><BIRYSSWQYxvrWVqsrfUW`kwuxwluxkc_ZUSU]YPUaheb^W]ic[\\\\WTJ@HMX^QPQM\\ZSP[_cd^]c]I;::9;=2[J?GDCDFJKIHNPPLJ<468458;?GKLPTTTTTTUVRKFC=74455444446556666667554455455554455564446868?DB=@?9;@DKJA:98778879<9?c^WRVOIILLKUegb_`|OOTRNKMMFRfbXTNLMOPT[daZQRTSSV^sͼ˿Í}xokǵyŵ¶¼ĳ̱Ĝ̼ŭҿ˼ȫϪ˨{˽ē;zy||tm\\ëmnx}^pyf}\\o{vYOMJHLB?:8@KTE+ei5dnGITWMI_jbMLQl¿kfkbbn_KV~pAEr_IZwfUD33<C@6;<5469<9Ea`K@;867;;.8IJMUEBG?/'$?]WTKFC?=?QYFUE2@^`bDD;HIFDOZA=OSD=\\|jbdhOWbywXAoo{hjsrboyk^fkfg_[pQQL]XqFV|^KAmgAu>v\\OpbBSeqUDKfU?/*)30>O>SbM0$(*1;4/BLBGMPGDIMSY[]XFIQH9NQ<IN==?=?@:8@EJKE5.0;A=6;M>=7@?;:EKEGC?AFHD;4:://?C;64447>?;79:=ADEGIKKMOQSTTQOOOQPONNMKJJHIJJC::ACA?@>;:9>IKGGJLVVTPYXRRU`g`\\[^bb]bd`^adb_\\Z]\\VUR\\d^c_KMPRfsiSHKXUHNYTRRShvzcatoeeopeyuǖkdmgVXYG;e^9B]zx[g]Gqr_afR=Umtvqie_\\]^c]PJIHIQXPCIJ^wA4OhfNEEIRSE9<A:8CIGMesthI5CYTC;CIN[[QKFKPUvѢx^R]URzoab]hnc_d_Yc[MYy|sii~mtdcr{w]TSV[WR]t}|zu{nytUNfh^XPUhidVY[N>FSVZTD>DGIE9.-<k~tL4=IW]Yhx]WREDJIEr`T^k}NTWOCQ{pF\\fC5Es|`_D139AFIMD=J:,urHVZTQMHJQ\\cYIA;66536ELV^Ez`ju^OILT\\hfZSa98B@;IXB9=;889;>58@?847;;?EDCDITZWWN>8<?A@::<ACA@=<?=99;:DQPNMOQVQER`s}wmU03EF8@MSRMOYagcE*1HKGEB=:<@FKNMIEFIKJNNHEAAIL>/2<:6?Zst}ofgbXNDFyX99I[slfchn^HIXSNICDHLRX[YVSTRHGLTZZ_^WZadddcb`WOMKKLB09HGMOJGHRKEB>=@BFGIKQL@>JRILYJBMT2BABCEFFHJLOOOQSSTSTUKpٮ^Iiirxxt\\ABF>=MggoǲdR^XEFWhjflxo9888899999:;99999:<>>====?@AAAAAAAACEFEEFEEEEEGHJMRWZZ\\^^\\ZXVVTTTRNKGESlvlfklmpsvtrrsssqjcjk_]]^b]NE?=@>=SoiWRPc|iXZ[I887889<==>?A=>FHDDIKJJLLKGGPYTGBDFFFIMF>=837=@BDDBCEFGGHIB9;==;:99;>;8DQSKLGAGLUYXYZ[\\YYguqbPLRPRVW_bWMLQ]ZUriOK>DSUU[qtj^T^sl`ZMEDBAAAFK[jZIf{qt{|kh]OXdtvpnins|{{nha[Z^ZSOORX^^YZ[WV[YQMLMNIEYVMQIOXPSTZ\\^]`dZYcZB8998;;3BrN@GECDGKLJJJD>E@7475139?BHMPRTUUUUVWWUPJE=64454444434555554444469988888988888;=:879::>IPJGHC;CNOUVM@<;:98889<7{ߢ`QUQ\\^RILMIJUeg^PkPLMNIDDDKZ_\\XUPNNNRW_s}k[XYWiͳŶͯy{y{{̿|et̳Ʒɝʺӹηɢ¾èƻsŽԔ¦|z|oggʫcxv|esss{exSo~vYOPSRULH@=?AB@8/rT}IN\\OPVb]QHR[SЧsfjjaTPSkeEKcGE`qbcX918DN>6??:11;?7Da_MG?:53<>7A[ONBBF>.&)0;ENOHA<AOUJMK22I^\\rC=7:7AJLICRZI0Hyuxf_aWAgbyg6:tzkjm{uxvs|p^mzwlxtkVgv|ht^]KlXkROpS<E~KO\\CiR^|SCmUbD5KcO2++(.0M?@`\\<++()27/8MGBQTOGCFMTZ\\YTELMF>ME@MC@>77?=4=JHD@2/9AEC98EE=<=@@@BFLKHA>ENMH<5<>9>D;366117<<;88:;=@ACDGGGIKNQQNMMNOONMLLKJJIIIHGE@><=?=989>DEACHKLLMNSVRUR\\je[]\\debefbaeifcb^]][YUSa]]fbTTRMKYncPM[SD[xtc^`afdQWae`jmmeatkoasϐYRMSWC>\\rlOGValc`}on~~ljhQG\\ks}ywn[WSMHFMVZPLPTOJCXsZABDU[OJHHKMLECEEIR][PQ]ejcPMRH:6?P__[]]\\PIXzx_[MB\\zkODLueSHFN]e^Qbtlm~o^nxvqjovga[QN_oaTbv~|~ps||b[pk_SDEh~c8555;IU[ZA=GJEEH?401In{wrR3;JSZYcxg[iz[SXUto[bfuzXWV^[qj4Gp_1G^iQ83:CY[^bM^GOuwbNNKEM[cdXAGE9532/8T^z{W{szx_Q3<cqwq\\iP3?FUljC9A<879?B:9==:67<@EMNNOQ\\^VXO715;JYZSFDGHE?=A@98=:7DRQLJGD<8CQhqiM:549:;FJQVWWWXbdM9H]ZJ@87<CMNMLKIEEFGJOLA8-0BG917:634GiszeX]b_P?<JUYbG3=@Lnmhhdh^KIWRHMJGJQYbdaYUYYPMKNTUZ_btytoi`XUTPNG94BMKQSLGHOMIC@@>=GNMPUTKAAEKVZJ>=4oZ9C?@CEFFGILNNPRTUUUOQշtZLnwXjFFCC=>XszTQRF<F]inmb[\\ggsȼ98888899999999999:<<<===>@@@AAAAABBCEFFEEEFFFFGGHMTZZY[^^\\[XVVTTRPNJFIYihaed`irssrrssqrpqfZ[ZXUU]dbWL@>@6?Xgssceuxmc`^TF>:79@<;9;BC<=GHCGMJJLLLNKKQI:8?BEE>ANK>7324<@@@BCDFGHIIKF>>>@?<::<BG>=>B@:;DNVXYWWX[]\\Y\\eg`fok_[^bkqfXX[WRez}w{zy`K=BNQUdlkpoZVlxuo^MFCBA?DTfm[CNuy|ZGMWfx~d^efhqzyvvxo\\ONRRRKBAEPWTQQMOU\\^SMMLO]ehb[JCGNMNSWUQ\\add^OC<9878::3@YG@EEBDFIJJFDJJJ;246323;DFHNSUVVVVVVVUSNIC:434555567788886677766>IHCDBBCBAAABEKLE?ACABIQRNONEAOXUYZTLGFIFAACCB=rΧN@OPNVZPJKKHM[ca[Okw^[[]VRRTX]][[XTRQPXeggwyb`cqõŹ½üãii~}ǣȨζл̺ͪƸҾͿŖǻɬҴ˝ڵ­qٖß|~{y~sh{ǶɆ_}ryqqa~ctRp}qZONgc_GHD@><878?HQFNFPXWMHNVYUjë~hhm_QY\\{~SLbU?Miie^XG75=RR;7BC8/7?;2I]TMC;558@EBWBGCAE>/%+1)+6CE@BGTV??DBCObTnP98DM]m_CCJK30SxhrU\\Z@DhelJ38m]VbnhlkYQND^^dyuttkxsmzXmHpP2PwDb}fN\\skvs=grEJ54McA',-+)BI2N[L3.3,0743HO=HZUKEBDKVZXUPHOKEDKBGGAH81>B37KF92/2DMH@85<D<=;A?DFFGQSIBAEMMH=6>CA@=3384*/68:>87989;=?@BDEFHKMMKLMMNMMLLLKKJIIIKNMH85>;339=GJ?:BJJFCKPWQSTUce[ZZfohgjcagjgdbab`^\\[UU]T]d`][WU]UZdXHNKHWrweXVRHMINUr{c^YUin\\RKNy5GOWCHocnVGliQ]ep|zvvnl`RUOFVfdfk^\\\\PMRX[`^TJOWTGAHNFKQMNMIEDGGFJRWTSUNFFNSROU]ZSNA/1=Jad]ZZWTQblw{zyunijkusPg]ZXMOTWWU_igkilolot|fWbci{wjjqrot{yq|jgxqdQGSn`/215BMYdR8EMOG?><974<XssnT38KW]\\]mhS=?\\fi|y_Y\\u`^`Yiqvc=Ios9Lft\\>5Dbn^r_dbֻ`X[D@Ud_sxNOJ>623@Zp{k{eousR3HdmlZLny:6Khu_=?D=:65<A??A?>:8:CHMQRTW]YRTA)/87EZegUHFHF>:CG>8@E>9DPYN:49AFFJHA316774454@T[[VNLQMM\\f`ODCIPVUQKKIHCACHKNG93,/:B:49====H_gsqTMO[`T@:88C\\VIJB9J~yhnjilWGHOFBMMIKVcmkifcfh`ZVZ\\[YQL]svx{zurzVTSD8<IPPVUPOPMKHGHE>DPTSUUWUI;<GR]M:B@<7>???BEEFHIKMNPSTVXRY};6JZ=Yv6BDA@@UyjGKLEJYa[[b_VV`hoo¼888899999999999::;<<====>@@@@@AABCBCEGFEEEFFEEFFGLRUVY[]^][XWWURPNLIFJV^`]WVaourqqsssqqrb_jXMMIGI[reJ=>?448<RovibcfhddaPAA>?LJ>::AD??GGBGQROLLMNMKH>79:<BFCFY]D48=:;?;?BDEFGGHIJKH@>A@=EH?JTF31?D.0<EUVUUVX\\\\]\\[`hko~hdhmqjiqlZRe|sktnsqUEDIPTVVW]vxcYbhy|_LHEC@=>Shh\\ROb~}ntys~zbKKft|i_gcbf`gq}~xhVPKLRRJGMRTZ[RINSU^VLKHPag`dcRLJJOQPMKO[gjj\\?38:998;<5?PEBEECDFGE?<HYVJ?424543:EIINUVWWTRQQQPNLGA=<<=>>??>@BDDDDCCDCDEFOXVSROMPPPPPRTWVRNQQMOTSPRSQJJUYVWYUVTPVVPPVYQJiWCLGMPPTOLPQOV`b`^`hnhaafigeeecbba`^\\VUT\\ryc[bd_dbĸŵſúllp|шwɹŶǩʳ̷׼Ǳȸͫÿí˳Р˓Ȝϧçyw}}~lƊezt}qR}gvTp}qbQImrCJHAF;59@KZEZCHNOMIGJQ[ae[еoil`_VeqEWmMD_i^sWQUC86G]P55FK@:9@<<GAAK=2898DEA8ELGHA1(+1+!#-9@?EPOIJGSHMdh\\F9@ZrnoV8;<4-Nysn`^SC6Nlv_E9C}QC_ljTTMBC[mQgfY`hkupfacolpuO}VpM?axMiniRU}{oYBd=858O[4'-1+3G88NN?2323:95?OE>Y`QFB??KUURSPLNIEFIDGBJD0;F72DE0*18KTNB;=<<;:===;KKBITUHKEDIMF>8?A?><88:5)1837=:787359;=?ACEFIJJIJLMMMMMMMLLLKKMOSQJB@>87=@DKF;>EEB@FLTPPTO^dVV[Zrmdib]fjfcdccd^\\]]WWWS]^^_bfVwuMNOIIILTbkg]XXW_bWUuoab_Yim\\`G=JO2BTSVr`h`QsPMb[iz|vrmkcUNDObflm_NTNBK]c[VNJGIKHC?>@AIPUSKGCBJKIPX]YSOG;;DNSTSRNLRQ>33C_d_\\YRONKLa~kljjmxl\\a`OIVc_[eopsЈlphmv\\auzhmwvkipt~}u~~ohvun`enkqT545CV_i\\><JIIE;:9975>ZsrmU64?LY[Yc_Q,0CailucNW{ec^\\wt|lafZpUSowY@Bbs`pqoլwcltdgkV;98;:6Vjk{uknyvvxq`LJpM0PglYOQHCF@<=>CDCA>:75:?BDFKUSIMN<-4GHFLVghSFID83@I@7;FJ=3>SJ57FQONL<3455465210:QYY_TEA?EOX^]TRYWWTRQMJKC?DIKL?0.05?IB9;@EFC@O]nwt`XXNMTT@8AEFPZZVL8:_~snnkhMCCB7;KMJIQ\\quusrrqjdb`_]_]VU[cnwVWXIBELPRWURV[SHHOPKEGLNPSWUVP?:?J]M;>=:>B89==?ABDEEGIKMOQRRUUOqV0>?@A8k7BBCC@KlvfrGBGFEQdbRVca]fnsZz888899999999999:::<<<===>?@@@@AAAABCEFFEEEEEEDEEGHJMTY[^_^[YWWURPMIFEHPWXRSdrutrrrrssqqnhiuo\\OGEDPjgNFF?89>27^xmUXdZ_jS>=DJLJC=CGHLE@CDBDP[WLKONLJFHJ?7:@HFFTaYHCMJ=BBFHCBDECEGIKJD@@DFRR=I]N45MV:0;KOKQRRTUTY_^]agebicUR]ghdehh`SSoxmWMSPW[VJF[ppkgbZ`dMAKHFC?LbfbaXJdx[[jlush]]ho|}vvyoiknorkeo}{e\\ZUNOOMS]b_Z_bTOZYORUNJKRZ\\[`ZWVY]]YTPPZ]fePD;688999:<69KECEDDCEH>2=W^RF=745458=DGIPVXXWTRQSUVVUTRQQRONQQONNNPRSSSQPRVVWZ[YZZWTVXXWWZYWWZ\\^YVXWSSTTRPPSTTUTSTQQY[XY_da_dVQUTRTUQQQQUZ[]accbcdbabdfgffgggghfdcaZZ\\aotYTSNUÿɰ¸·|}vhsycvp|ñū{~{̷ȿȫɶʺ˳ԭȮԤȦ}Ǳȡyozrq}tR~uqzTp}ylSFovMTOHLF98DJF?DfGHL@BBFJUgmcUsʤxlie^Zu|YDejGIiU^zTRYRG6=S]B/=MOD?<GA477EO33A77:06FWCKE3)+/-'%)3>CILGGWU>?LelL30?Skq_XRWbd~j[QdF==Ws[H7QC>cVk^JAA9L_V]QKOOIIYe[J?HcLg{sfsvh{casfZUZ{{NcfaRck\\?gZ70A6IO2--/*9;8ENG:6//6:7:GKALg[IBB=<NUONRRNLJDFHGDGK75GA4=D3,6AJSKEDHFA<<>?=8<OJEKURITLFINE;8;;;>A@>;6-71.87;8851378:<=@BCDFGGIKLMMMMLLLKKKLOQSQMLI@=BFDIJ?<CC=<DMMHEQOS]XMYZeoacbZajecefcdb\\]__\\ZWY]XZ`fdU{RC@BDFR^bgkld_]olWb~dYXZdZISQXs֞JSaggk\\fzhk}e`nHFfuromklcL>=O\\`gWWVFBHQ]aWKB@C@<@A=>CCDGLROHABNPMNNMJCAEIKLUY[YPHIS^`UBJ`ce`QILMFGUdqtfiq|vxejumTUOKO^ondbgrn|um{b_}zkKQxqdho{ys{ytkpnlku{xiE>FM]bbgSA?JKA?><:9756MiqlS11>GSY\\bU\\u148Rosqm^^pm_arynuufYPguvntYCOwzqsvvЯ~K*7@DGCJvc]~gO_yR2YiifkY???8:A33;<>:75434336@IA=HOK=7MTLEDXoaHF@2,:B;57;C>-.::4>PLFKC32544555545:CFL`fQ:2246@INTPILOUZSNPHFGJMI7,-3<FOH=<CPWRKP\\hia\\aaNCDMA9NYXU\\\\TM:6Gy{tkUOECA:07HJHFDMitxz{xtqmg`]]\\XRSWY[cuxnhc`XQPSUVXWRYaSDNWVQJGEEGRZX\\XD>?GQD<>>==;==<>>?ACEFFHJMOQQRTTT[h|ԹMDIE>D@JܭQ;CADCAAFESxuobREECGGK`l^Ycdkx}uyw\\888898999999999::::<<===>>???@@@AAACEGFEDDDDDDDDFFGLUY\\_`_\\YWWTQNJEBCHIFMaqsooprsrqrqpnkjlt|q]TRQR]hb]UF?>=3:bpR@SO@MYD<EFLTE535DW\\KDFGB>JZ]]YWVUPLNM>7=CHHBCMYSKY\\D>EGD8<GEACCEECCB>AL[aDDeW?<MTC?JRJCJLHEGOY^][\\^]MEGScmnf`hjcbaaglw{qaZa[^^UISjgiurkgZOE>ENMCN`Y]d]\\\\bo~ikx{}hfi~qmjksy}}pghooy~ux{y{]HKQUUNIR^^^fihe`ckeYXTWY\\]__`SQV^bc`_a_d[ZT85998998;<96;LECEDDCEG<2F^YLD=:8716=AAGKRWWVXXY[^bdb_acab`YZ_[YVQQSTTTSRSYYWWYYVWWTRRTRQRRQRVZ^\\VVYYVUTUSRTUTSSRPMKPXYWX^dbfc_`_^\\[^]WVWY\\]]ad_[_a\\[]ae_badddfggeeb_bafi}z_MLLZ¿ϱomv~gtmqǭ¿{üȿֻͽԺζϷȠ~ÕôΥxrzspWrku{Sn{rlTIpvPUURTZ<:E?BH-lrI=A;>?GRcj]Wjoϫucg_gyrRRr^BPjLrxP[NZUB>CVL87EDDH=>K<;:BX40><03,6JMCKE3+,..05<<:CPMA=MT96I[W:5:5/Es^U]u|bT<Re;ALSurQ<:Z|G>|UGSH;:=DVlz~|teXRSLKZc^Yesqpkcgf_ebc\\dLeqfOY`ZSjrVG:}fZ10N6@@.,,,28.ASVG@:/3?FEHJAH^bG>AB;<OPHLSQJMG=GIECIE3?E:7<71;DHKMGCJNFFFB?<;9>LIELQOOWRLOND;8<<=AHFB>67<.296>:21147779;<=>@BDDEFIKNNMLKJIIHJLNPQQPMHEDEFMHAAB?<?JNJ>FNITWKOXUjhY^Z\\je^eheba__^^c`\\X]][_aa^\\otWIMLLmzxud[[kdVbx_ZUO`\\I@UˮÝ~|qpynjv{||Z@IYZfgjmZ>48AGMG:jYTbged`UD=EB:<==ND9@??CIF??GMIFGC;8=FQQJEJKIHJLKS`pg[accPDIVVMR_b~ybsydgx]HNOPWimukmvswogujKFbror{{u|yukoollr|qQ]krjTYhaUNZU=>?=;:984?^vnS/1CPRRZ]Rhb;DJXcfmkpokϧuj```^abXRV_x~oteUj|wxtozvmÎ7(>F@BSLFr`Pu}qXatL:[cmzkG?=53;C6236<:647;89:<BLGBJSWPN\\WKD6;beD>>5/34237755/,..3BK?5:7244345544443124Ig[82443349><=JQY\\VPQIFFINB0+3CIGQI:>JVcc_^aa_^bYWDC>I=<Zdcb\\LIRSJDc~Z;?FED?7<EHCFFEQUc}wuwwod^YQJIJKMR^rxkicVZ`]VZVZ^UFT_]UJJIHJR[^\\SEAAHTD<>====<<===?ACFFGIKNOQRRSUUVGb}JLPLLHB@B>Uf@CAAA@C?>KRTcvyx_KLRKIEFEKgkaq}vpxi}888888999999999999:<<<==>>>??@@@ABABEHFDCCDDDCDEEDDLUY]`a`]YWWTPMIC?@@CNdqmghmstssrrpolhc_mm`ee`^^`f`UPJFC@GTYO@@ELG@>FVVPMD3+39C`eUNKJKOMNYjjb`]UH@?:8AIJFDIJFDMbeOHJKD=OWIABBBA?<>>=@NfR?TWNAB?5AOSKBBGHADU]ST^[XYQLRblqtg_ntigkppomx{zn\\HU_`\\zoVq~{uj`XNA@LLCIMIV^__a[[yzz{qmhTu}r``omjebo~|viYWmy{~}zp^PPTWZY[ZSNQ\\_XTV[bab[WZ^a_VUXHISWTSX_kg[KB@86999::7<;74@IA@DCCFKG:=QXPKJEB?<7<?ADKKRXVUX\\`cccb``_^]^^\\ZZZ[YUTUVVTRSVYXUWYXTSQRROMKJHGHMVUWUTV[\\ZXUVUSWWTRQQQNLPVWWV]cZ\\cec`^\\_de_\\\\\\]]]a`XTYZWTX^c^aababdeffgeeedgbnq^RZgʱ~ozzrxwplrȫ¦ǿҷ׿ǻʿͰɴŨ¸³xrƵwƼִhYffw|Vl{diSTvwGUX_fh<>O9C@=ckMVTHB>Neg]YhxrxeekftoXceKC_cc~oYZ>QUSH:OP?3B6CMA9FM>=DO543?01,4<CFKC3+)*.4;=8:IEA@CTS?<O[e\\XN:+1^[LVb^fVJU5;dj8CNVg`B=KcniYKW-@JGHIJYn[Tba_dgc_ejlw||}tpijs}o_^ahmPdWg}yPJOTPUedG3B{Z[0=UHF5/2-47)6YbZKD:8BLMLJB?TbP;;BB:<NIENTPIN>:KK@CH?7B?6:76=A?BHDEFOQPOH?89;:?JIEMNMRYXUTMA=6><=DLIFA7B?/887A;./2576568:;;=@BBCCGKOONLJHGGFHKMOQUVSNIEEIJD>?A=:AGHE@FGEVODVPVj^V[W_i_^hhcacb]W]baYY\\\\]_`bccafWKZbZwz`U\\]WU_{rYSNPMZR@8O|qjtlcsXWkkh_K;8=ABACYiq}riohL?M_YD3=c\\:59::<>=;<?@CPOD=AJOHA@D=;ENKGTWevpebf\\PLOKVr[ZєlZhkpPYTFNxpsgTN[{rw{{|tlt}{tptoszyfQVij_cmU;>@=;;=@ALan\\B,0FUTPQQPcpSAJQXLOglnustggZXUTSSVYV_ort|szsbpx|zyyw\\_iaŬo_G84@^YBHk[Im`heHO[ct~wF2E[rsmjprsoXGB?<:;:637GHJSTTTJDINW`hi[KF7*AW<7AA=6--37511/-./6@>51222213433455424516EC3465555545=IRWVWWQEGLNH=54ASTOUOFJLN^jhkf[_ddPI>C=@3?aegkQ48PgcHJsM@EGFGE?@BDDUTDA>W~yux|rf`TDDIIPV^ksulc\\_]YU]Y\\[WL]f_RKLMOPR]cUD@BGQTB:<<=<<;;==>@BDGGHJLNQRRSSSVTSnFMIEECAAA@?=<@CAA@?BBBKRE=KFCW]]a]OHCDHRdtg~u{~x88778889999999889::<<=====>????ABBABEGFDCCDDDCCDDCDMV[^bc`^ZWWSPNIDC?=FVfgcfkostrutpmqpa[V^bTWfkeeg]MCBFGFNXSE>EOXebO?EW[YS8+3>N[``ZWUZeaRHSTIR]ODGIH?=HNIIT]XFCUca``^dSK_[FCNOC>@=;=>:9PZC>KOC:0,;KSSJ>CLMJTe\\QSXVUUbxpbktkhllmjnp{t^breaW@@ZSAX~~NI{{bP^SAA@BC@9BNbgc`ajt}tum]Z_wzdboreeikgpzxvse]gx}vtwxsmi_ZVU[]^[QKLUWPLUXV[_\\XZY]]KHNGKSVQLNUb`L?8788887998;:89KFADGFILQQFJXXQPUTOMKRSKPWPOVZVUY\\adba_^^^[[[]][Z[[[UTTWUSSSUWVTXYVQNMPPLHGFBACMTRQQSV[[ZXTVUTYWUTSTTTRSVWWU]bXY`aaa]\\_dge`^^]]^a_VTVUVXY]a_b``__cefgiiihhfegifgqmqstsfqvȶԱ˿~ǺƾӸ˺ѵ̴ļάľƯȌozvxtuԧaaY^dwz_myahU^zvCRZiko=>Q4IYgWJ^^QGFW`Zaioryb­kclfrmadDAVedqroiF9DPbW8INA2BBFQDBAK@=??445961*/8AGLB65671044=XX41FLW82EPRNVWHJ@<;SKLP@88PG3Klm?GIScbAPX^PaWUQ,DRNQgjeX=AU]etrtyomjkicfswsqxr|bVWa}iMFHVXUa^>2M}\\P6HM^L5<<2A0*Re^M>DG=HJ?FD;CZWE<?BD9?LFGNTMIH8AQH>CE=:A:7:68D@9DIHFIQQRMH8889:?JHEMLLSZYWUSBJ9C?@FNIHC6KB2<45B<)10786338:9:<>??@ADIOPNKJIHGEHIKMPUVTPLHFGC<<?@>>@CCB@D?LSEIYLadSTYW_aZ_heaac_UX^\\^VVWY^^^`ehfiaNY^QIb}q]X]\\WUYp|aHEJJQ@3ZsroxrSTnlriZC6<@@KJNcssnbnlQDKimFAhrO2:D@98;=<<>CNVPEAKNA<?91;KQE?Ukiszj]XXxp\\iw~zvaϹqXeoxnTPPNKZzkdfio}vbk}yh^jplt{nstQ_rjc][hjaonL:>>=;<?CGRecK72<J[mk`LMW]MCGGE=BZmi`h}x`_]ccb`_^bbbowqhu}hVo{zzvmdfe`I--:UYJJSuxNPkw|u[l{N3);Vp|~sC+*;doK:5:>;:9632:NTXOIKFCFIR_edXKG9+-463@KPND9685222/1656312223003677666334433334366556699=IRXX\\^UKJU\\F9GMTYTS[gi_MDSgnodY]__O?<@;A<HdeheD+7Ulv`ZvqRFHHHJIDBCTpbF@Fd}w}ujg`PEMY]\\Y_lqiQT]ZRR^][YXXai]MKMOPPRZe^A9FTZM>;<<;<;;;===?BDGGHJLNQSSRRRUUVVKYOF?@A@@@BBBBBA@A@ABBJLB=<;HY[Y\\\\WOHHPTVbebr~Ǟ87777788899::9888:;<<<;;<==>???ABA@BDFEDDCCDCCCCCDGPZ^abba^\\YYTOKHFHDHSTSYfmlnpppqqkiflZCNZc\\S_lb[aWKJHFEFOSKJIIJMPNKILQLKH33HIJLOZ__^\\L=FPO]aIHMUglWHKOPO[hbSQYa]U_kk`H>EHDHSYLAAA<<??;>HH8:DA:29EOQQOJEJUPVfeSFSWU^hqu}vmqwwtqnmc]V[aYZ\\FHXV>ApqR`wvx~[LYKC;8DMA=LXdiYcywxellpr}teZZZZ_dekv{xswtd\\gnljox}}p_[YWYXUSQPPSVYYWZY[^\\WWSTWRMMPRS[YTLNUQ?;8888877899997CMDKTSTTSX\\\\[]^[XZ][YU_`Y\\`[W[\\YYZ[]^\\\\YXWZ[XZ\\[[[[[ZXVVUVVUTUXXWYYWOEIOOHEED??DPTQOQUXXWXWSUUVXWVVWXXYYZXXXW_d[[^^`aa`_cdda__```ba]YY\\^]\\\\__aaa__cefhikllnieijkkoƷhxr~`muΰѺ϶Խ¹Ҿʽڴ­ãƫml|xiup~nqefY[WcuzenpcjZ\\pzr;N_pbeB9Q^qz~pGFIHIHPTQZgfmxtfcqechqjdI:Nhgjdry_58ASta;>C@3BYISEL?EA847<9401-+/:>GMB<CKUUIDP\\Y>27KKG.0>E;,5FGG<8*AQR]SLTL;>LldAH>Tg]O\\dUKTQ^{QAh]f}XYat}va^quttf_bgjllcq~SJWteM@LUPU^R:5e~ME7>MRC6A;9<):TUI2,CFCJABB@;GTI>>@@B8DIEHOPJK>5KND>C@=;;8<::=@=BPNLGLONKIHBB96:AIGGNHKSYXRR\\MYBMDEHNIIG4WG:A=0?:31/?;7/,<;59;;;<<>AFKMMLLLJIGGIKMNPSSRRKGF=6;>=<>@@A?>>DSG?QRTeYMSSU[YYae`Y]aTS]XWZTRTZ\\Y[`ehkmbWW[O=>P]cnd\\^^_^UUtL=CHH6,>^sozib|{e_cjmxn]NF729@BQmsczpMQWNFBWwYf~b6EUE53:DIHE@CPVOGKOF=605BKL@7FixsuVIDp͖jqz{{Ȫoepm_I?DK[eekrzgy{fhqliu}ei|q]_fkkjfix{zxQ;\\wnihcffdk^B=?=;::;<<BTWC;@P]nvPKTZMCB;520CgdLVepvquwqffa^dmx}rqnuut}rMLky|uqhdcbc_nw}leL:FNNI_bGSrijR1)-GvB)+Bh{cB2.115:;975420@RO96=<?ELQUX\\UG>40/0224>MZ[N@:75665593+-23368::9899976444435555455455678>JSX[]``WKNZL@S^ZVOO^on]LHN]ee`ZYW\\O89;=UY]dde`K:BT\\qpp~UDHJIPUMGNimI@Kmnig\\URSdsfYcmixdGIVVLO`aVOWbdfUHKOQPONK]o[EQ_YF<;;;;;:::<==?ACGGHJLNQSSSSRTSVIR[XMA@A@@@ACCBBAAA@A@CGE?>=I`d]ZZ\\ac^\\ZWXa``vzU_7777788899:::98888:;;;;:;;<=>?@ABA@BDEDDDCCCCCBBBDKX_bddcb_^\\[XOIFDEDOZTMYnnimpopnlfaadZEIW][\\`^VKPWYXUPIEHEGLHEBBJQMLOLEBA=CME;?JQ^fL75<OZ_nlVUdswbILTWZ`jhZV_gdZT[gbC893=CBM[RBAE@;>AD>8=98@D?5?LRQJNWKEJSUNNMOQXcgedeinjlw||upl_S]hdXc`BG`XLnw_mi\\fu}ss]EA?ACHIHIdl_\\Z_]_y]w|sxxeY[`dkwlap{tfempnt|paVWYVSQOMNPPRY`YY[ZZZZVUYVVXRMRVUXWTLRQF>;98877789::48=TMLX[Y\\ZY\\__^^^ZWYYXVWa]TZb\\[_\\[^\\ZYYXWUSQVYUWZZ[\\[[[\\YWTVXXVVYZZZZYPCFNOJHFFEELTTTTUX[VSVWQUVVWWVWYYYYYYZYY\\aa^^^^`aed__ba`_acdcbda[\\ega^^__abb`acffghjlklkjmpruĿķrxw|yzfyɼɱðŮط˸ôĳģöǎŰ˹̼Ǝxzmdqweovoy{دħvth_tyU^R`oy^hz|fdhYS_qn8IckR^H6kof]\\UBJF?@KYSVa`erucZT~o^hflN:MaktehznE..@ewaF89@;CTJSHNHAC20@SL4')++.>JHA>?CHQQPUa\\DAL?CGGE:<D73@TZMFACELPXgnS8C<NpW5;=`YMWTXSV@SflbTiav{\\VU]alpmnor|gmr`\\VYRPZveRSedHCPBFVU@-4zp>G7FM=E1<;3+/<::5/:ICCF=?B;<KLC@>==>9HEBHLJKE1=RF>=?;;953A:=A<?MQHEHJGFFGIC>99@DGFIODJTYURO\\X_FRNNLPILJ9]M=FF)<:;5-F@9+,A=07;637:;=?EILMNOMKIGHKLKJNRUVOIHE@<879;=>>:8>NI=AQQX^NNQQTWT[bbYSXUS]\\VVXSNW]XVY[]bjiefY`PCCFMYagh_W\\_UUkP?DGKC/&Kgjqg^xzv{rO;<>=<:;?FkvpHHCDC?Eg{nzmKUW<127DSXQFDLSTPNPG5/5@@:?B8<Spptx^RMIgѓzldfTKG<?Maigekqisyyag]brx{segV[ecZXhxdZ^c{l\\X]fdc_I9;<;::740115<;47YspW^ccQCB?;<8BdfU\\]j{x}p^]^]dv~sjmmp{tRI]flsvsoja]dh~~tiXUOXwuUDGll7-Z{tA+7^twzqT>3,/2237;8555847E?1145;EKKJOTJ8211147734F]d[J=:8:;87724@B<;?BHML?32797544333355544555666>KTY[]_^TJJUQMVZXUQQV[XSONPRVY\\^\\X[O35<Mbeeddc_ZTTYbhflu`JCHKKX^[[_uye^Ra|~{xnohZY`VVkk]^iegubMEIPMSh[=8E^haLEKRTSPH>Gck_b_J=;;;;::9::;==?ACGGHJLMORSSSRTUSiOW_cRB@@@@@AAAAAAA@@@@BCB?=>O`_\\[XYdkghd]cnkguqp\\EH<G7777779888::::9888:;;;;:::<==>?@@@@BDDDDCCCCCCBBBEMX^aceffc^YYWOIDB@>H[[R\\jkmqupiiecZPOKJHIIJUc`RFGV[ZZWNJIC@A9=MMMUVYQDHIGHDB?=DMIXfHEZbkmlournpuoRDJR_hhicVQYce^\\a`VE97<JJL[WF<>CB>>BFE@=@=ANJ@CJLE>EPEENRMHNMR]\\Z\\^XTW[_afmoplea]billpm[^b_divaZYKM_v{nmSQdSB@>OJH^jb[SMF?QSVhshwtl\\U^gio}{_Xo}{}xtogc[ZYUQOMOPQRTV[UU[WSRTWYZUUTRDJZ[RHGDLJ?=9756767878;6<N[WWWUVWUUY[XWWVVVUTSRSYTNW_[ZZX[]ZYXVSPSRLOSOPSSVYZ[\\b`[TVXYYZYYYY[\\UKMRSSQQQPRWZZ[\\^^]VTXVSVWVXYVUUTSRPOW[X\\^Y[\\YZ\\^`][^``^]^`deca_[\\dfa^_aacccbcfgffhhigilko}ǿzwĨdqĹ¸ƶƮ˶ŵƚթϿźŮƨ˷ӘzüǙϷėtyxhhwluphpyǰ}jx]]wyxlUaQ\\gsV[l|degWNTil5LbeP`FL]RKBEDJPD?IUXW]\\`okbXVjzcha[CLVisphutP3*/Iz`UR97>:@DCSJFN>D-3J^T;+*..0;EHIPMC>CQejXE>CIEEEDD>DJ83=K]hYHR_X_T_T45EGekH1BPYFUSDBONBKYQZNPVou{q^dNT\\djnfflginqre_]blzsZKNQLNPXa[Z[[GJP>JMI6,CjvRH<=8<I/12((86()14BI:3<C3A==KIFD<:?<<E@@EFHK82JL>?::9:8/6C<C?;HN>;=BA@BBBA?<:@JHGGIJ@KUUSQMXZZHVSSSSMOLC]R?LI-;7@.4FC:*9G66<</.489;>BEGJJKKIHGIKKKKLMQSOLJHDA>989:;;56BI:>GNQUTIMPRUPT\\`[TUVU^]YUVXKN[[UVXWX`fdgf^aKQRQ[jrsfWT[]TPS\\YKCCEKJ?3NvvtzuP^{|xun`bO=>>?=7;=7C}nabICB<4Hmzvr^_K/0735EWYSOOSUQNK?0.7;75COLLQ^jllunXO>PrXVLQ^W>7BUj}xuzhjofWzsIOfs}}}|f]INONGJdgGbwUU^`e_SE758878973.0004618[nmnonaNDB<=HIFTfj_Sc|ylVQ[\\ZdprֱshmjnjVJ]ou|zmd_pϳup{olNV^QIBZ~~kcp_;7[mpx~qC+1Khhd^R:122322687641323:711225==:BML=2//0/09?:3?T_^PC>:998754FUPGDBBDINE62566544344444444555765>KTY\\_]RIFMWUVVWWVRSQPUWRSUTUZ_a`\\]U?@P^caaabbcca^]foljjtdRHACCDQ]ei`cottiICTNOmym_hjS\\neehc`g`MKZreR>:TTVlM489Na\\NELPYZVOBBOZ[[P>:<;;;::999:<=?@BFHIKKMOPRTTSSUO`tdTRVmmI@B????AAAAAAA@@@??@A?>AFHMYZW]efdehtzutttup^]^LA>?7777778778::::9779:;;;;::;<<=>==?@AADDDDCCCCCBBBBDIOSX`gggf^TRTRMCA>;D\\]TblnqstqhcdnhLHUURRHBO`bWMJLPVXVPKJJJA;HSGAI[k^GGMJF?@FGDLU_RJfc]q{rmstvvtiQJMR_ikigd^[eieei`PSON[_Z]YD<:9<@?BEGJJGGBCOOLLF?98?BMSRLKT[cgjbSU```_afbeijmnnsvrxrmj`]mhellgtrNLXNCIalcc^phJ=9IKEQ^]_aSHAIQWpl]uzxjOYehhotn\\_c]eyz{zsg^ZYYWUSRRQQPPPQRUPLPY_^RONKHLWVHAA@@A@>;:88789:9;BHN[X[YTRRSSSUXTRWXUSSSSRPSSRV]\\XRTXYXWRPOLORJHJHIORTY]_`ib_UXZ[[[XWWVVVURSRRUWXWU[^[Z]_``^WWZYYYXVW\\WTSQOMGISTSWWUWXXWX[YST[]]\\YZ\\]aa_\\Z^b^]^``bedccdffeddffdfptfqɽòyx}gzµĺãžŴǻͺټȽŸƴηբw¾͢ˮʪvrervn~j{p^o|ì{٪Éi|qVh~sqvwfXiQV_mVP]}agjdSMle9U\\eR_IxaE@CKEBSUGITYQRYbjd`caayyjc^STSZjkemt_7..=bzJER:<90>>CSG;L6D,5LVH?7020/1<ECFQZ\\`hh\\PJKFCHG@:9=PU95CJM]mW>Y]e_PG<F\\ebM<@_Z;JiMBFLIA=BCRP@BbmirZTXca[RF>CEGP\\glnj`TLPUNGCEEJJCMVVSRNUR=BB@<?IZu~J?5*=J3&*/282).3368.+1I:C9;NDDE89B:>?=?BEH@3CNA<9988<92AAC?5=JA.599=B?>@@=<@HMHBFID=KTOONNQXTNTPTXUNROO_UBPL7=9C*ADA:-HG6BC;*.267:=@BDGGGHHGGIKLLMLLMNPRNHHIF><:98649E=;AJMLRMKOPPPOT_[RUVV^b[WUYRHV_ZVYWTT]^`hc`YX\\R\\khkWFN]aYMLKGDF>;@BFG8=|~pp|XUdihmmbKV[L<89727=00]nr^HFQVIKct{lec]B,3=8/8JTVTPTUQJB=/-0-0@`roic`ab_q5Ou{pdqva]VVaaBDh~{rzwg]WOS\\OB<\\|~qfw\\E@OPCSwPQlqgQA1.6;;;>=962.024788;ZxZVm{pZNNNKB?CHE8=MPCDkrTP\\]Z[bel٪e\\`eleSK[sol{yxwhkvqhjZSQZewtDPeM[QNPHN~l:/0,,24Dmsa@0.5QS<;532256678878775039:31/02401@MH<;>?@?;;C=32>PUMD?9668924BFDDC?=>@BBB?<83022443444444455556>KTX^aYJDFNVWWWVXUPQRV\\ZVY[[\\^aa`]]^UYbbb`^_`bdda_]ftpgmkcYG99:9=D[sZ48`pN55=3@p~`>V~aZ}rfd\\QJKhgO:2BF@H;7<::>=BHLQUVVWVUOA?C@=;;;;;::999:<=?@BEIJJKMOQRTTSSWNmgKLSZUSopF=CAAAAAAAAAAAA@@@>???>?@9A[`[aedfejyzxywsqlaVfZHMC@?777766666898897688:::::::;===>>>?AABCDDDCBCCCCBBBDEGJR[^ZX^aXMKJGDA@>AR\\_ksussrukU`qq_Xdf\\a_PUYZWSOIHOQPONIJUOR_UEI_dho]GGJA<CEGNYbccaakmeinlrwtoh^MHKV_cjpoqqi`_ipjRBQbeldTJA?D@=>@ADGKNONOLGIHLQF958=>JLKORXXaaYS\\jlmnhkojpsntpdpypc^_]]]fjhghijMAQTGHg~i[NLH@KTW]cYCJ^^esjlxuweQlrljprqqosxn]Zailnotxz}}vldWOPUTPPSROMLLKKKPPNU\\ZRIIOSRSTODBB??@@@??>?@CDFIKNVXTUWUSRRWWUYYUUZ]YVVTTRQVURUXXWTSTTUSKJMKKOJHFDIRWY\\^_dj``Y\\[[[\\XVWQNQRRTRQUYZYV\\]VUX[]]ZRUWWXVTRT]SRQQNLDHQLP[[WWXYYWWWQNUYZYXY[Y[_][]feZZ_aabdbbbabba``acdgnzy̾ɳ{mo~ôƺĻɷʧĨױѹѣλнȼιʹzṴ̃ßѬ|}pkvdekjWr|kw{vˑctuacuwtz{l|vopkwQSVg]MO{Zhop[Tp]D]VkTZTXE?S\\OSYXMRVQJVgn`XpmZgwtkn^`^VI^`_gli?.2>EpoGGK=A73?:AP>2F1=3;NV=@@382/)2ADBBDL`nhXRYTH>>JB9ATgU-7JPOZlnKT\\U]LILIadB06LfH3beAGIHE?;?DLTYb_G?]ega^YUQPR]^bgtog_\\ae^PRSOHDCDA=AILMPYVI<::=DEJW]T:6+9C0%6823./5320.)(.A;>5BL;DD3;A8>:;=EJA8?ND=84556><<G=E74BA2-57;D@:@EA;=GHB@ACGC?LRLMLLMSPSPMS]SNTTZ_XFRWBA?J1IF@85NA>GF6)14469=?@BDEFGGFGILMMMNMLMQUSNLMKGB=9978CEBBDLGIQKMPNKMNU^RQURZc_^WY[PV_a[XWSQPTVa_b`ZbXV]TPE5<Tc\\IHNOGB>69>@EDGjwy|nnzvcZdgql_jlJELI;57513;EQhp]NDATqyoijtwe_aQ<5;@?;=DHIIKRUPG@;/-/,/?awuplc\\\\T^v@pxxrhxm[VNLZicduoxzyupbajJ:GN\\ztj\\yqAMZI:Ok{qM@MViZ8+-5=BCDIF;6310025731T|nw|saOGCHRSI<<?76>B92ZwaM[e^\\_c_k][]WV[VPLQZ`rqln_KMJBA@Hn}w`UWYI`~WLJIS}C+/-/.,@mwngV>;:(;M?:999::9678699885331341/1335;HKDAHNPSPHEHD7--:@<:85356751//5=>@GLLGEIIC<5121344444444555546@NSV]_THDGNVYYXYWQLOSW[[[\\^^__`a``_a^`ba`_^`_`ab_][fqpmoplaG35756679978>H<26<5BosL0>osZdq[][\\XJ_aN>598878;;8666:AGOLD@G^hQ;79<<<;;;;::9::;=>?@BFHIJKMORTTUWWYTXQWXWXXQkzQ<AAAAABBABBBBABBB@@@@@??:Hcgcfdbiifjflwwuuk^QHpf@CE@>B666666666888777899:::::::;==>>>>@ACDCBCCBBBBDCBBBBCDGNQMGFNZYLCBA@?ACDCTkpstsrrtnVZorn`_eQSifWUZPOTXTNOMPVZZ[^ebRM]pieuu`NECGHB@P_cijfc^dhdlnbSJRUODJ]d\\SWbd`cmidlo^HAL[\\VKC>=HIFCCCCBHTSIHNPLD@DIJ?45;DFIPWUZ^YURMQclieemux}ysvugdwtddki\\]Y`ihijlwmOKTMH[s|yqwmROOHZ\\^d]^QRa`^`s}u}i[TXegkkbZ^hpx}ywvuw{sd[QMLJHEGLNMLOMMPQPNMUYOGGJQPSVQKDBC@??@DEEFILLLNQQPQOMOQQPPRVRSXVWW[\\ZXXWVUX[XTVSRVVSOOQOKMOKJOPNLIRZZZ\\`aceYb_`XX[\\[VSQQRPPUTSV[[YV[XSRTVYYRMQSTSQQPRWMORRQNHNUPUb`YYYYXWXZVPU]]\\VZ][[_^\\dmi__acdb\\Y[Z[]^_^]]aeknǽλŶε}yvhx˟ǭϾĴľɺʨӸҽʺƟǔʷϹѺ~xjsdqqji]kxsig~tuʳa{c_t}|repdx{i~SINmdGGx^poe\\]fZO^Zp[ZgZQM_RUlcTYXOHPit^TmrYYozpOhs]^ZDH_T`hiP-8=DF{bOOF;<9AA7=L9-?349=IP7EA8J>1+*4@@=BDONSPHOK;0(11=JR^G8AB<?QXouwrVUXaQ8@Q2-6RV:MiI;F=:9=AO[LENX?9AWafigkliimqkc[YVTWWRRTS[\\YWQKEBDFRTLPOD@>74DZJJOGni8,,1.(0C6.,*4432:6>522;<>F@?L8/>=:?88=IH<:FG<:42628<=B><D8>A4+47<FD89BCA=<?@BFA@EC@LQKLKKKPNWLLS\\UNWY][XIWaOEINBOJ?7>O;EJF/+7656:@@>>?ACEFFGHKMNNNMMNQTWWTOMNJCAA@DLGGCEGEOOLOJEFLMUPMUOQ_b^][\\XXdb^YUSPNKP_]YaX[\\\\_[PRF?K[]L@GQKD>44?BEFFP]YWUOfnotjRV`k{jVilKAGHC><:52@w\\dHIB<<Mgtpffkf\\M>9;859BFDEC?BLSMC@>2-1112<JT\\`][[WR\\cmz}tywpGEQZflljkovnly~zwrfffUaimlR;>BUt|rghcTuPJMLE::FYM=ICAI@/2:?CFEHMI<62000/2541Fywpnle[WZZ\\\\UK@989833<izXORPV_ehacQLRP\\`PJLGGa~~wqwYEGF?:L`epv{wrjcujPF:DLv`131,.8Eaf]d`A4JA?I@87:<>@<656898888:;4/00027;>DFDBBEHJLNMJJKD9--/.011333562.07?AFU[XSNKJD9;=72444444444455446CNRTXXPFDGNUXXYZTKLPVYY[\\^]^_`bcba``]^_``_``___`_[YeopnnnkbI6686666898624678:6:ON:65F[H2ZpXa```Q\\]WE8:99::99:;:;;<BGC96;NWE><:=>>==<;::999;<>>@BEFHKMMOQSTTVXVURfz^PRWWWYPetN<?>????@?????====;;::;998DUbjhbdnonvuosyum`XRBEWW>>D?@AB6666666668888889:9:::9:::;<=??@@@BEEDCBBBBBCCBBBAABCEHGCA@CIKIECA@>EJG=Uonorsrrrm`\\pzdTURBBQZRRULN\\hdYVSNS`g[V_]W\\fkmmnsxo^adOFLVfm`Xdk\\QTZZOFA=DOPILZ[K@@GNPWeljkdSOKJOH85@CAJIGDA@AAHQL;8?EIE<<FH=3,1GRST`fcca_\\_ivr`[_fs~ymgt|zoknjYW^mwy|~}}vk`dcOGP`c\\eqxrPCKVmtzuc[^YXcTJVwrghfSO_uvoia]jvz}~|zvo]LJJFCDFHKKKNLLPROMILSRKJILJJLGEDBCBA@BHIKKNQOMMMMMNOPMOPONOOIMTRRV[][XVWXXZ\\[YYPQSRQSSSTTWWRRVZYVUY]WZ]aa`_Vba`TRUSZUPXZUNOVVQV]\\TTVRUSNTWUIJJOQQNMNOMJNQRQPPW\\WXd\\WWWYYXZ^^XZdfcVYa`_```hmjffeefbYTVVXYXZ]\\Y_gntzӸ˷w~vosujzʾɼîüکͥ÷ȧɶ§ǹ½~ȭ˳ȶþλwz}zzqrnellg{ylvhars~t\\m~y~edo[qe[AT~eAHuwniXe\\^\\Y[\\kcgYZ`^L_lTcWLRfuiYp}aZm{rZFY~^XS@PYJ`d\\9@FHI\\XTPA77:LB37K92?748:NW5@?CXA.*)*<<=BOSA>H@=BCB>=7MNME;GH=4>UFPl}zoe]G-4T25ARAD`Q7BC4,1=>Vv_HF@AIPVZa\\nqec_XMIBA@HNPPKJLMJJKKIKGJHSxgF<87==5/RwH?CTPaC('210:9-*-7><515Go?)0?<B<?SI-3BB?=77?HC:;B?<://24>;=>7@B7??/-99AJA9>@<:9;DFDF?@CDDINIJKJJLNSELQVTPW]]_^R_cSHTSQPN?8FL8HQC*2>;::;D@=;<=ABDEGHHKMMLKLMOQTXVRPNKIHIIKKDDADCNSLLKA>FKKLFQQIWcb^[`[Y`dZZ[RRLGFVaU\\URY]fiY[[[YXZQA?MO?;807ADGHKJ4*J[UurtmfjcUYc~qPUicGGJICCA;:99R{~bzUAA>B9-<XfedgaH2/1/03<DGFLUREENIA@?3/2540*,@UXY\\[WUTV[X]xvǯz{|vvZCMUUNTdkjmfiooqrpi_g|ǚY`iqnkhIFFEIaturrbXb]QoVHSL64018:<?BMF927<>?FJJMLE<520,/.011/8`~{xspnjiheYIBFF<66643:NPHKD<Qegd_\\ǍJE9ZlB1?DFZfb\\ysfX{tZHC8:KEEX[\\lvwqwzmRC74;<G[pzRA1)3JK[jZ`fI3KKIQF4349=>?:568589:<>@<2/1138<?=;<<;999;DMNJKLJ?2.//00111344559BJMWYTQMJJE9>F;2444344444454446CNPRTTOGDGOVVWY[RJMQVYY\\\\]\\^_``aba`_^^_``_``a`___[ZeoppomlcK89966564286556667643468627;22`kX`\\jrgl{QKOA9::::::::<==<<>><;;;<<;:<>;9:99:;;::::99;=?BDGHKMMOQSSUWXXX[_Z[]]]^`a]bdZZVSSTRRRPONNNMLIHEDCCCCBELS^fb_biorutkflkfa_XMIEDFHGD@?@566566656888888888::9:;::;<=?ABBBCEFEDDBABBBBBBBAABBBCCBAAAABCBBBCLVWI>PaequqqrpmkkldPFIHFDEILSVPR\\[XYUMDDLTUTVZ^_XWjysijruk\\WWWZ`^RJMPVZY]WD?EEEOUTQPONG@@ENZc]ZnmUMKKH:7AB?DMNJJE:8@A=8317;=@<;@:4818OSMIPckfa^_bjro^[_]ajha[UT]mw{vg[ch_Q]zrslxnN?Mjsmtym_`nqyvoic[dd^_]_nyug`vpYephhemz|~||y~{T@CDEDFHIKJJJIKLMMLIHMOLGHIGGBEDDCDGHILNOPONQTSQQPSWTORWVZTSRKSYUQU\\^]YVZ\\[\\\\[\\\\MUTUY`a][\\_`^YX[\\VVX[QVZZ]\\YX_a]RPOM[SN\\ZQNOUTMU\\ZMNONSQENUQEGFKMOJFLNGIJLKLLPSSS\\aXUWZ\\^]^`a_`gjhZ[ccbabckkhghigfdabb_[WWY\\[_lp۽ũ¸mvmkw}dl}ɲϽǫĿ¼˪ȶȨ̧ļ~»Ͳļɿëtz{sup{|fcranp|ohtevra}zw{ZjrVmez^G_a?LuwhUnZdYfX\\hmvZ^gZXpibgP\\kgi]qq^ntx_N]fhYVLXJDb^EA`AUb|rSOQC>85SC41I>8I;55?[Q0<>KO4-828:><>6M;77>803:AL@C><?82993=SLKWZXspRG:4<F:=I?2NW99D?717H=FlhYLCABELSYVhYIKHGS^]X\\b_XXTQMJDDB:@FIMGOgL:PG<:5--K[;:@]:8B5*7<52+-:8;DF6(?W[/5A5:C;KV9.;CB>75:CG=8;?@@4*-.6?;=:9A;5=>15::EI><<:969=DD>>>@BCELMGIIHGIOLDKQQJIR[[^_YbaSO^V_QP=<MG:NR9+>DA>?CGB9::;<?BEFFFGHJJJJKLMORUWVQMKIIHFCCGBEPUMMK@<@HIIDIRGL]b_W\\b[\\^VUcWOPF?K_VRWLOYdk_XZ\\_^[YF??OS?7426<ABEIG<6BFLovc`ckumaSZa\\jmK@UmdGDLI>?@==DIK^_eueXMAA<5=Taeh_H1*,*3ELIB<@HW[QHLJA?=57;60..BV`_`a\\UUUPZquy}zutqnH=CIXt~y~{mlsb{z|pnjGNSTSOXenuoosuchlOPTP:358358@FD946=CCBDGMMF@:763,--/00-/Nputtqge`UG914;<869:52432;KHCUc\\QLPso47DJ7+49>HLLIqlaRSpB_oX>8DLJJRoZUqsrtsruyoQ>67:AL[]tu\\</FWO\\eKKTJDD=;D<5579:998666679:<<840035569==<8679:98?NUPJKJD702233210123332=NUTPJIHGFHD=>:2333344443444436DPRRQQOGBIRVUUZ[SMQUXXZZ[[\\]^^^_``__^^_``]^aba`__]]enoprombK89:76666566777777667866767798:<?B<FqwpvvJ3;998:::99:::<=<<:;:<<<;;;;=>>76?GMVblllmmlifdcgloooqonnnnnoprtttuvvvsrtsrsrrssqqqqqqqppoonnmkkigeeecbfea``bbbdeb`begjijiddcegfbcd^[[555566556778999888999:;;:<>?ACCDDDGGEDCAAAABBBAAAAAA@AAA@ABBBA@@@BILKEBLT_nrsturg^UKEALOHKMIFHUZNJLC?IJCDEFN[aVRTPEL`efgdb[LHY\\PNPLLMF>@N^aXNHHGHKNPNLR\\]PFFNY^]f|qUOLHB:AOC<HVXW_ZJ@9>@8478989;<8.9LGGKCA?BVaabbaabepi_imi``]XZ]`ekv~vxyohZaxofu|ux}x`T[jrqwsb`ky~|cRV[Z^`a^o}wrp_^pkloepmbt~{iuz~|zyrZ@@B@BEGILLJHHIHIKKKIHFEEEGGHADDDEFIKOUTPTURSZZXWWX\\[VW_`b_\\]Y^bVRWab_\\Z^_]\\\\[\\`Y^adfig`Z[^`_XSUSLNUYPQQRVVTW[\\VPQNP`QM^UMLOSOISYRGHKLOJEKNLGFFHHIGGQPHHGGGGGJIHO\\cZX^`abbabcaafig[^ddbbbbkkfeghgggilmldZZ]abf|ï©h{~xkgmr|razqĿúàæùƮܴµĲѬĴ÷«Сª­°ěætzuqu{jao`axr~gjzljxw|}_tytTvuSplpzkXb~a<Uv||nSi\\bMlX[k~gW{]baesiea]ukYkj{u]cqshYQkchq\\USZAOdM<m^;mvuOI[]:H28QC5.M73I:69FQ7*:<KE28GOcZF79(<67/;DA;71:4866:0(-2249PWcR6DQH=7>=29<4(/DA3;?65B@GB4GZYMD;8:AGLSdJJLTdgc\\RUPLHGFDEDCC<85AKJ>>??=O^VI=0/C30AAO2'9;/04,.=MJ71<>6>XT?8A61:=KT>/9??;616>DB<7:BE>,(*29?=;8:>40B>1;9<JB76449;6:A;6<>?ACGLLGGFFEHLKEIRM?ALNONOU]^TW`aaTS=CMFAVO23KOICDIID?9999=?BEEDEFHHHIIIJJMUYYVRNKIFACKLCQ^NIPE9?CHLHDOMDS^^XV`^[YUP_cQLG=BYZPPMIQ]e]SX]]]S[]JG=MXH3.157:99<AD8-)8VLEUTScl]EPcahfH>BTnfA;IH846:<CFQp~佊pXH=IespiZD0+-+6Vj]A0.>MRSRONIB=:::<3+1?]gfed_WSSR[xwvovc[ZW<KLZr~~zzuzuWWpva]O=IPUULPhs{~zxxgasjVUZL<=;755BTB679=EKJFFDBBCDEDD:/,./0-/JfjimeQA;7.).23237?B710..?NPQ]^L94GjĒLF20/8?98GWSIWUC<GUOg8Bk`:>PCDhm^TKPHHMizvpoW6/3ER[bZ]d[F37QWXaS8;CFB?7122346987549>:879;==92/148999=AB;69?BCGLTZWMJD821136982//0120-5JYQ@9=ACAEJ>542333334434444337ERUUSSPGELSVUTXYSPUWWXXYZ[\\]^^^````^]]^^_]^abaa__^_gnoprrngN88:9888777667788878<;76679878866549\\vtyhA8778899998::9:;;;:::<<;;;;=?;7?Wkrx}{z{~~~|zyyyxxz|}~}|yyxwvusqnllkihhghihiklkkopqrqoljiggedfghhhgij5555555567889:9888999:<<;<>@CEEEEGIIFDBAA??ABBAAA@@@?AA@@@AAA????=;;=ACFMXacgdfslRA<<=FHBFICAKQKB>=;;BDFRSOW]ZRLIHFFOPB;@CEHJJKMIFKLLNGBIRW[WMKJJJKOOO]leXY\\\\YYfzy\\KPK@@@BE<?IU]`icQHAP`D3::899:;65L`P=8:9:LYTS\\eaY[_^_ddgpife`dbYTYnwjffw|heuecjjfmtr_NQekgreT^rmLdndeorjhkqu{lptrq~h`lppstwxz{wdIDA<>AFIMLIEEEFGHJJFDCCCCGGICEEFGHJLQUUQWZ\\[^_]^_`b`\\]gfaabcbdfXU]c_\\ZY^_]ZY][^bgljedaWQUWXVSPOKGKSZOJJNRRPTWRMNUQQ^NN^TLLNQIFSUEBGJMNFHJLKFFDDCFKU[UNKMMMLLNNNU^gb^cddbaaab]^aif[^dbcbabiifefggghiknomgbabm|øϲiv{xrzecdvqn~~~ans~øƻ̴˛ǹʹÿȾ˿ĵĺÏʵĵצ¢īĿȲ|}n~u||mvnflŧe[Z}{it|yqaovlohs{xuk\\ay{jUsTvqem~]`Z;gyrw|oQfZOJq^_sIY|``]{{n^btqYcwgob]mwobVVf^]x]TT[Ja^A^{IVujRDToXCJ==C>99H.7B*2>DC'13:C;6=J\\bkmQ87539:8;GJB.(-<??;A@?IF51@OYYC/3A939:244&&22.2;<20@?>>37JQMB?==>BCVUG[W_ceTA9>:8<?AA<@DC<;:>EG>4:=B6KZ[H;4B51OFE3.77-(++3DF8138<FZQIR84189>SI28=:98407?CA;5<@C7&'-89:=:79837J=8;<>F61335956@;06?=>?BFJIFEEDCCMJFKUG>IQEDEIOWWS[]g_\\Q;NHFN[H3=SYNAMMJO>9997:<AEECDDEFGGGGFELTVWWTQMJFCGMJRZQGML=<ACHJDHOGLYZUT]a[WQP[aVOH@;S^QLLIKS[XNO]_ZXX]SNN;?SP3*/7:87846>6))9KENOLKS_N;MWQYI8?CKb[66GH;<959:8F`мxlaLOcxoO7/,/*-Gp`1*?OOKLQQJFC;:=:32:HXkf_XRRSUQSer}~unkcVGRE?GI]{{rrvxz~uTSr~}p[QRFBEDDGRk}{|vpqqcYmw^UZTIK;-;EBNO88<;>DLMI;:DHJHFF?,+-..,/JcggfdZ?.,-.01138=BB8.-.4=CIQ^W=16E_tOYI.1,:MA7MngF7241>Y_M6Bf[1C\\=7YrRLQMGRhrskcX6&9beV`kjVB>95EQZ\\B7:::DG700.-/2668;<>?857:<==<83247::9:??<99<;;Mc_WXPIE8./126;952.,/21.0BRG4/28>;:?<323232334444444448GTWUWXPFELSUVTWWTSWWWXXZ[\\]]^^^_``_]\\]]]]]^aaaa_`^aiooprrnjR88;;;;:97776778898876667777689:9997CcvpR<98:9888799999899:::;;;<<<=>:9Ps}|}~}zzzzxwwy}}{zxuurpnkjjjjiiiikmmmnnloqppollkiighhggghijll334555545688898899999:<=<<>BDFGGHJLKIDBA@?@@AAAAA@@@@@@@???@@????>>>?ADDFKPOKGLfqUMQHD=?C@@DKRL>=>>@CGJHNSPSPLOLGFFE??GGDEGHIIOULEIJIJHMSOR_^TQMNZ^XZX]`R]sseVViri]RNMDBJRM8<JUVTUSJIQmnG8<9699<:8KefM?:7;KWVQNOR]bX[QRXShn]dpea[NUbcw~vf\\XZu[Tergdd_^m|nSf}nm~lbzZdlk^c~np|~wr~~uqtuicdehnonnWDEDA@ABGKJFBBCEEEGGDABDDBFGIGHHIJLNQSTTX[_dcaecaaaa]\\]fc\\_b`_``UTZ]UUWW[][YW`ZZaff`]\\TLMRRRSRNMJGJR\\PFGMQNMTSKHPYUQZLN\\RLMORGDRO<DMJPRILLJGCEB@FLV__ZVV[YXWVZ[[\\_hib`aba]]]cZZ]feY[caddbbgfcegfeedceknms{lj˦ƽȤ}lny~uo{{bcak{vjuy{egx³ýտθɸȽѽü՛ØǏ|ǲï۳Ҽæȹ³sntxo{upivovf^̡\\QZ|xaov{rd[om[hdzvrmytnp`bOjx}\\[}}_rqYe~TiNEroy}tgYdK@Rzfk~xK[{bYmxyg\\px_[ri[m`fv{hbPX^k\\z`TRUYgNRzYNpn_GXhdKM=UF<=;D?3LC$7>?@,;,06365EXFIV\\SLE=4@?44@D<4,.28@D@AFF@?;4/=<,+/.,0:;7522/(%/?<,)/3449CHIICBC?;;9<JftigbZL:;INMLJHE>>DEGHJICAA556946CPD?D?;=WE=3101.*-0-55/01439RGG[-6:96GH4<A6888317=A@95<<@1),0=78<67985AO><5:;8/2945:7;7./<@:<ACBDFEEDCA?PIELNAGVUFENTRRNQZ\\gcfK>VEJZXD;FY\\KCRIJQ@9:;747>DEBABBBDEEEDFLQQQSRRPLHHFFJZODML@;>BEGDDLHIVYTQW`ZSNJXcYSRF<H]TFIJJOQSMJS\\\\[^gXCFD38LJ/*2889<=53><.0ANRNEFNID64GF<JF?;8BVM@SO>9YL004AORsגcYQB:DcU4,4HH.0Quc3;UQEHNTQKHC78FA-2>@GSNGEEMWPGMJb}rvz}~xtsof|pMLCDDLo}}wqrqorywgXj~sgXPORPKGDAJe|zsrjirmZV`_SQTVVS?.9IGBIA8=:88=CD;9@CA=212-/0-.+/J_chaXRJ8/131006@GFB:-(/537AN[L21>CNxtHcH09/1EC?JWYH4//6YucE7FjV1@P55XzoZPFKbjv|rXH36]mY^svmb8.>JH;9946QeM>>;6222346;>>=;6;==<964355677776554326NfaRQOEB<0.0136751+*-11009?921.266445223233224444444447FUXUWZQDEMTUTUWWUUWVWXXXZ\\\\\\]]]]]\\\\[Y[[\\]]]`a``_`^`kqporrnjU98<;;;:98887788888777666777778888789GaR<759;9889999999899;;;;:<<<=:5<]~}~~}}||||zzz|}{xtrpnmkiiklkkkkmppoppprrrpnmmnmkkmljjlmnopp444455555678998989999:<=>>@DFHIIJLNNIDBA@@@AAAAA@@@???@@??????>>>?@B><FNIBCEB?EVf^X`WL>=IEAOXPFB@A@@FMTNFHKOJLRMMKIFDDEEGIJFDKSXXRGGQTKFFFLY[TPMVhfZb_LDQlnjl]RY]bcSJPIMWbdG>HOJBCHPQXtkLD>:87:=7>^sgY\\R@Rl\\RYTNS_eapkQO\\hegd\\[[[[he_oqieamobdSc}tlo^Sbjxzdhzfhnb^nq_gkxu~~z}}~}oepzzurhsp]]cegkinxW@DFCC@CGFB@@ACCCEEDBBFFCFGKJLNOOPTUYXW]^^`c]`d`]][YXX\\_XXaYU[YOKPTOQTV[ZYX\\`]Z\\]WU[WIGOSQQTQPRLDIRWNIGNSNOXVNLSXTQYMMUNNOQRFEQL?MSKTXPTNIGFF@DQX]^]\\Z\\^\\Z[[\\^^^_dhb]]]`W[[aXX\\bbZ[aafebaeb_dgfdb`_`jt|һ}td|}vsnz{`cadt|}ltuu{giy}|óԱѵ׬иŴĸ׭{z{ĮǨ§׷ðŒƷn~zuouhmgumh{bWǖcT^o[n}kxtxm|c[o`Zcbrpgjo_rlrzOptuWmpp}P^uiijOjiOs|LNyzmz{|kj\\Q<C_~v|~iU[{b[r}^`uj[lmV^odiyvg]OWgoRbdUQLaWJkaIiqn^KZ]GKN<ZG67;J79TD0969A5>)*+,<MDPIB6@<:DN@ABD>=>GF>/(1>:650124;,%&$&%# ,5<2:E;1'\"\"-@:'%+12-;SH;?DB@>:8BJdlUKGF?9=KSNE><88<DJMPRTMAC<40/2536A;B]<9KV?+/,*,/5:7552.*/4.*9@EL6>604LB0A?7896138=B=66<;>2224:5<=49997OL;51940.9@489<3/05@<9@C@;?EDDCA?=QHDMF@NTMEEOVQJIQZ`efhIKVJT\\RFFN^UELQBYPD:;=7148DGA@AA?@BCBDEFIKMOQSSPMLFDJLFHJC;;?DFA>GIGQXTRTXSLHGQ`[T[TDBYUBAGIMMKKJLQST\\fcVOO?EDI8-'6967:=;8>>13CQI;5?PE2/5:6<BLUL;;MLNqmH<ld=Qf|ͺZAK@=BCjsTH^u~S-7RHBPVNIIHA54EI4/8<>@ABEKVXABGE}rlkkqx||xuoaatQMH:7Q{x~unqohrwcUT^a[TNOOOOMHDESdheedagrpYTZR:EKR[QFJVQE96:989952685468=:1*)/96..+0I^^egI9=94652213=GGD;379:9@GMWI412>DZsd@.@7/:DGHBEF6-/;SdO<6?aQ4<F96ah\\M:8>TufD;6E`videj~}r='*369984:T_TORVP931247:>?>76999:7413664666655228;BT_VIFG=87302321331./001.,+,/3342.1112212233333444444437GTWTVYQEDMTTSSVWUTTUWZYWY\\\\[[\\]][ZZZYYZ\\\\[]aba`_`^_lsrqttnkY;8><:98888877877779986677777777776798>:7879988899999998:;;:;;<<<>=8Ci|~|{{}}xtqonnlkmnnlmnnprsstsstttsssssspprpmlnooqrr444444555677899988999:<>@@AEHJKKKMOOJFBA@@?@AA@@@?????????????>==>?CD?FPLEC?@?EMRUOQTRPMPSPSWOIE@CBBHQ]cVBJ\\RIMORPLIGFEHOOLJJKPZ`YKIRWJ>AJRX]UOORWVVa\\G?QcbhvjUJJPLEHPLU\\^iVCCG@@LNT\\^nh]KEI=:<BBLbljklbVbt^PWZ]aeltvsmihgdll]W[]`edks_]lqrjdfv^fqrodY_xtrokpxz}m|x_^ZXT[jklywjnosw{vjg`c}zwpjtm`cfgnsujOBBCBB@BDCA?@ABBBDDDDDGGDFHMMPSTOQXX[^Z_[Z]_VR\\\\YWUTUTW[TS_VMSRKFJOLQQUZXVV]`_Z\\YRTYOEGPRPOPMOVNBIQQNSORYYY\\\\XXYXTSZOLMLQUVRHHOPLTRLXZWVQOOOIGT\\\\\\[[[[\\ZXXXYUW__``eb\\XX_WZZ]VX]]ZY[_ahd_`eb^dggc`^][hеýǾzwdsqomyz^da_qurrxwqhssxzxҵϻŵµѲղ׾ӻ}xŬ˴ǦЦֹʲȔpırxqurxflqdus_dodchTkvvtaypnhvbamYe_e}ohZhdV}uy_zhbtcpclXk~P[oidbRvrUOtlPSunsy|xjt[E<Jhhub\\wcd{y}x]ah`\\pZNgj^kzjhWSatYKThVPN]G^gHj|mrUFRGCURFO433CJ7CUI?45CA;;--+-IdPWKD=81,3CGH>HIC;=CJB?AC@5+%##&+.*$%((#!3<9)>T@%#!#/:4*,9A93FG87AFA@@=>Mc_H5870<GUZSF=;77=HRUSSNLB7VQ;6320.1738`8>LRH%*+((*2;6B@5/25373139AH>*2@JB:>;<852/5=C@8369=:943967A81<;:@W?8,87011CC9649/;7;A7<C<79>CBAA@>?QCDJAAOJA=BKOGEJQZbdcaLVVQ\\[PLLS^NEOHOXPA;??9658EG@BC=<>>?@AAABFJMNPPOOOLJGEHJG@<<BGD<AJIJRQOPTPHFCIU]RX^PHRY@<DEJJ?BLFJMMRW[WTTNNRFI2*.577779><?=3:DE;:':O@.9;53:>JbgT:?B9hv\\rnCaޏE;BVUPmzlirtK+:VC4=?86:<>=63?9.?KEAAFLTVJ9??Pwljdnx}umf^WXTTM77^~vnxsmomltoYMJPUTOKNONLGGLPNMU^\\PXnpj[L]S@JFLZRNVbU>:;8213420//0..3<BA948?7..-0AQS\\kU;<969533216?GE96HLGKSQOUL91,8CEoj:3H>5AJKKNJ8300.2JD9>?NH<BOM@j|UJ@;=>avR;6326LYea^cWPfQ@;0-27:758@IMQW_V<667603=DB7684587554688888:=<74;GOX[OAAD=543133223333541/-,8RcL<aN71412212233333344445539HTUTYZOFFMSSRSUVUSSVXZYX[^^\\[\\\\\\ZYZZYXZ\\]\\_abaaaa_alvuqtunn[;8<;;;::9998888777887776777777777788789989988889999999899::;<;>@95Fp}~|{}{xtrqpppoqrrpqrsstvyzzywwwyyyxvvwxtqpnopprrr344444444568999:98888:=@BABGJLNOOOQQMGBA@@?@@@@@????>>?>???>>>=<<<=ANWWSKFCBJIAHKQULKU]]_d_VRQKB@CGHGPYfgFPhN>BKRPOLIIFFLSUOJKJNTQMILNA@ITYVWVSPQVVV[RBALSUbsnbSJJGOVUTXY[eVEGGCHVZX_dmd^\\VYMCAJW^`eqsidach^TZcisg^db^c^UYef^Y^jd^hxw][rqeZT[j}gFJ`vxchpa_neZpxzxep{{qo_Z\\`dp~p[|zkUVkqrwr{qigmswfFBB@@@@BDCA?AAABBCCCDDFHEGJOORUTLQWXY]WWYUU[RNWWWWRQTVXZURZVKLOKGFLKPRTVUTVX[[Y\\ZUTSJELTQMJIHJUPCJSWX\\VZ`b`^`dd_ZWV[TLINS[ZRKLQXXSNLYXVWXY[YTY^YU\\[Z[[[YWWUTQTZZ^\\a_YUU^YZZ[UV]ZWXY]bh_Z^c`\\bhea]Z^lw̴³¼ʳx{qhqqnkzx[bdX~wr||qy|ij|o}u{vǸͬǹķ׾þƠˠ|v̵֥гē~}izԭ|t}s|dh|cghZ~zvgeQcrqzoc|ohktciq`tTjto^Sc_`~}fctlsfYqskzOcW[md\\egvlMQraU[qoqv~ynzfG@Hl~bl[vffp|wi[\\XX[kFRnaUppdh[ZokGRPxlUMRVSgTb}fikJKNBVROKM056LA:GLHE2<G>?552/5KXKH:EWUKK@?DQNIJF;88=9>@A:,+0*#$%+-7?BKA3578#(FB$-+4?2009GJ=<C46CCACED>BOXL=78@JXZTJ=:897<EKLLJHB<<5DhYG933/.0:<X<FBGS3)1../036EJEHJ814>;6CTR8,<C9?:77:3/-/8DH<455<@7;5994<=.3?:>NJ90/@504>I@52>>>>:C<9D=27;AD@?;B:HOBCH;DJE=<DLKBFLR\\_bbYLSY[^YRPOU[LKIHZWN7>EA=;;AHGBCC:;<=>>??@ABFKLLONNNNKHGHGHGABGGC@JKIHKNOPNIFBCLTUQ]YPS\\L;@DEHD:GM@FHINRSW[YT]VNP9/01355546:>;2:A;5V:6K</@FM:.;CVheD496YsA?Wm̊B3BRa][\\amppynF7RZ?.+-+03-1EG6+07HNECGIINF<86Fsotgir}w~riliZMQWRHQntZPn~re[cleUIFITSPJDJPUL<PdTCFQQD;VthRZSU[XfTL]`RJXR76=62033320--.0348BDAA@92/029ACLe`E:635333325:FK6->NKNTROSJ7./4@AQuc17HE=ITSQ[W<0400GJ8Yc>=@>GW[SvxH;B>4L}dPE3)-86Fd^S_UJJHZ_D/-9F905>KMSYSH;:77:88<9:323579779;:<><88<@B=88<GRYRGCFFA9434431233587530<rej>02122233333344455666>LSRV\\YNGINRRRSUVTQRUXXXZ\\^]\\[[ZZZZZYYZ[^_^`abbaaa^alvurttnn]<7::9:9999888887777777667777787777877888888888888888998999:;;:=:6Gq}~}|{}~{zzywuuttttuvvvvwwwxz||~~}~}}{yzzxusqppqqqq344444434569:9:::87889>CDBCILNQRRRSSOHBA@@@@@@@@????>>?>???>===:;;;8Jai`QHM[dYJKLNVV[^W]ea[VSSH>FKNMFKOV^NU^F=AJURPPLIECLUXVRMGENSKGKOQMDJVRMOOOQW[ZVLAALMIVikjhjhXY_ZZ]TVk_KOLJM]e`cdd]dpXORKJRaljisqgc]`ga]bglmg_[TQU[]``QLWclkglvsgWPXb\\M`tsvvdGAMRttYVnt^\\WVXs{wumaR]e`Ym]]p~~}rejvjfy}{unliihlq{oG8@A?ABCCDDB@BAABBCCBDDFHFIKONRTSLPVWWZTR[PSYOKTSVWQNRWYYVRVVJJLJICCKQSTTSRTVRSVZZVTNMIPXSPJJJIUSLW\\]_YUZ`a]\\^fec\\\\Z\\YULPZaYRQRU^XOKMRXTUZ[]a]]^OR\\\\Y[\\ZXWWTQOSVWZYZZXRR\\Z[]ZVTYVUYX[cd[UZa^\\bg`[Z[`rĞô˼x|qhiosllxt[`gUsu}}rzfe~p|m~¼ƾƾǼĺноϳҺͫЯſsÞĨԤʾվ~eơ~o}bobg`_xo`OZyqooil}|pfmyuotumrRp{kkVTX^iw~Zdp|qZO~kJ`^^xq_VlxvtJRoaa]~vivss|wpJ=Fpp|spX{e^nw{\\TZQP_c<hpWXxdgfafn\\GXFjjULPY]X]qWVu_GMBR[DLWL87=K=FI>;IDHC<;.701<FE:77<LYUTHGCNWWYK9832.8::5.6B4$$'''+@GJO<636+\u001f',*8:MF.4;JMD:?49B>=?CGC?DOQ<:=;DIH?5/.2346887888:77=32M^OB<>6/,::F7G83VI,.8EG@=??NYYM2//ACGSS>/5</,854260+,0;HE5143>:877<34>2-;@:ES98)6<24:HG;0?MAA6?C7CE05>>DB@:>D8PKACD;FG@:>FNG?GNS^]`aUGMZf_STTUXXOPFNYVI5HHB@>DGKGCE=7:;===>>?@?DJJJKLNMMKIFEFJJGHJFEKNIFDGORMIHA>DMOOT[UT\\TB?DEEHB?M@>DDHJLRY[\\deZ\\U>3-/.244115?>7>AA;tkAOS<=JfW>FOSciROrtzyuAAOV\\`mŐY>:I]e{rhZLMS\\hZ@>KJA;72395-,:<0-1?LMGHKHEA;=<;Lr`apfmsjr|pgmxsickcEBIGOkjEIm{pZ=Ie_A:DKQOLE<@QgR@cjIDOKCAIYg`J@VW[ezbSmoR<CI;296234321/--2::40/;A>:;:34;7549OWH50022334347DNC47MPKKKLRH-'+09>@SK/<HA6BTZSVbO733;IUcnJ5296DV^by_ENRA5YrRPP2,9N@;ObfiYJJ^jhF+'6UJ.4FIFS]VLECA@>76AE=1/048:78;=<==:88<@B@<96@MWYUJEHPM5*55212237;;992?V41122233333344455446@MQQV\\WLHLOPRTUVVROOTVVWYZ[\\]\\[YXY[ZYY[]_aaaabbaaa^`lvusutopdE6999989998888877777777777777877888778888888888888889999999;<;;6L{}{~||y{~|z{}~|}~~}wvyyxwwxvuwwwxz|}}}~~}{{yxvsqqqqqq33333333446:;99;:7688:?CDCDIMORTSRTTPHA@@?@@@@@???>>>>>>>>>>==<;:==8BWfj]P^ok[QOHS_YebHEQOJOY]SGJSZXJBP^TIWdWGFPYOMQJGCFOW]^]XQSW\\UQSZ`YJCORLNNNMLW]SICCFIP`jlqutgRQW\\dg]UgobULMOW][_ZQXc^RWXMP[fqpigec`YZ``]Z\\dif_^^WZ_ekdWNTaggegh^VSJAINBSnqnmmYSVPL]`UW|khbTUgzwjz~hNbojek{dMRk|nnv~rgknpvzmkkpoorvmUC@ABEEDDEDB@BB@BCCCBDCFGGGJNKNPQNQUVUQPS[PSWMIROTWMMTXXXVQRUKINHHA;HNTSQPRTRLMTXYVSQPSSYVWQRTSXUVab^_PNRZ_ZWY^^_]]^^\\^TPZ^VSQV][TMHMLWQO[Y\\`^^^QR\\\\XZ\\YXXUQMMQRSWWVWURQ][[ZZUTUUUWTYc_YVW\\ZY^b\\WY[asпҮ¯̾t|wjciivhnxq\\djXn{|{~tze[~yx`~õϼŨջļٰ֥óˠӼ̴ΩϿƲչymbݱ{h}xk}zah[im|u|WPZojpfftzmwohovttsvsk[slddQQOgk{gSbgOMj{Djgcwy~]ZeyGQokr[pkYywq~tP=Eqt~il\\eaozVR\\OJcW@cXgw_hedm_UGYCu|gUJLZTWm^YxzOFBE[F9KZK=9?H=FC:.=KGB=712+6BB=3697BF<8<@A><@NN<5/)'.1//3=@/#%')%$9@>IC631-%#)16@VC2:BSL;476==39ADFA?@I702A60*11,)*.25443684224444**A@@><6.0:=+.4#$MO*'7EA=<<4;C>BA@A??R>/.5<6'/40202--/2=E9/..3;8>:?:,59.5=>;II9/-@567>EB64RF<48B@<N3+<C=D=;6ED<RF@A>=GB<:@FKB=INU]]``QBL\\h^NUVZZWUUEQXUD7QGCBAIJKFFD789;<====??=BJIGJNONKJJGCCDFGGGGHKJEBBHPOJJJ>?FLLMUWTWWKABFCGICF>5ACCFGKTWV]feccPM845222269=DECGIKEv^[wgICdoNSigkl_]qjqB=_aLSwĹxBBIJSK_vb\\]TPRRG?@C?<?B@AB<60,.210/5ADCBAA?>@AJRNN[YQTlpnf[]lqqnh[cpV9:=FgnfowoY82WbA4BFDIVRHAXsbWqeKXbN>DX]ZfT6H``n~dQlfUHNQC@F6-/.0000.)2=ARC04>:29>27G?731:KG4-/01425245BOZWTYZRNMJPI3/.16?IE41@IC47LWTUgaC25@GeqH18470?LRVhyJ8MI;=RZJ:DH2-8D<59Ne\\KINXWS6+3;R`D@I@;XcdkhTGMI97DJB9227:;99:963127;?ABB>;DSTUX[SKFMXE.45102458;;:;4/JvlY9222222222223333225@LPRW[THGKNPRUXXVQMNSUTVXZZ\\\\\\[YXZ[ZY[]]`aa``bcb`_^aluustqpmjK578878888887777777777777777777777777888888888877878889999::998U~}}~~||||z}zz{||{|}}zwuwxxwxxvuvxx{}~{zwurrrrrr234322323348988997899;?CCCFKNPSSTSTUQH@@@????@???>>>==>>>>>>===<=AIIM]kj`_ebWNOPFRii`OA@C@@MY\\YNHJP]T=Vu_QcmgXV\\UJLJFDGRYXSYcaZ^edba`\\VYPBLQNPQQRUZTKIHCDNZecZYWRLIJO]hga\\`hi^NLQUXVTON]_[_g`QTajjb[XXZYTRRTTPXeeda^^eektrmg[QY^dltmaliPEMOFThijkqifc\\QQ_kj{uQYjxvyt}s{~si`^f{{iaiqqsvswyuoprsqjUKFCCEFECCFGC@BC@AEGGEGEGHFFILFLLOQTWVSOOW]TVYMFQNTWGQWWUUSPPPKKSGBB9EJROLMPRJGNRRVVUUU\\UWXYYZ]^]WY]YZXILNT\\XRQXYWVV\\ZW]XNMWTQJP^UOJCNIOMOQRUXZ[[RT\\]YZ\\[XVTMGHOMNWVSTSVT`__][XUZZWWUWa^YYYYWV[]Z\\_cdr˶»Ľ˿}qwrh`hdxyenxnbmncfz{q{vv~cV|r[{Ǽʱǯ̻̾ϣѺصҰŬּʽ˴¹ʵѴqt_wΧs^}wj~llkZx}g{ylaf^_`qeernfmfmqhrpv~wthftc__NGWvg|UPekaOWexX~yssxw`fXsBOsqzXeZNxwqyvY=Fp}r_fhmsrOT[OHiRRVhtm]fng\\NTET\\oobTHHORgeq^ABBRK5?JQJC9@D>;88*-5=E?5522CF?9/.1:B:56<=<71*-2232/..,-.373,)&%/.,:@CB;50-,(*-/1>F>?HIC8,,577755@LI?<94597;%,686.*.3353205411/02*5C2+012.,)9>W4%\"%$.B6<B9126640/4MOJL<3R1(5:B8991,014/.89<:/,,07:@D=>/,643<;9AI=7/8?8<;@>=:CP;96?DFQ>'4CABB868J?COB>B8AB:8;?ED8@KPZZ]`\\F>N\\eUL[Va\\V]WHUYS<?SDCDDKKHCI>0<:<==;:;>><@GHGGMNLJJIHECBBCDEIIHEC?DPQIGNC<@FIKMRSUUPLGFGIOJG<2@IGFEGQQLXeecc_[XIF<2302?GJJKKICLMn]l}mYinFGproohY[ym|q`hA@SE@cP=OTC<UULMLHJIB?AA?B>3:TZA8<:6133+).3106AECAGRQPTQJGLY`dYRapkcebTXgyO=>WurqpcHQW\\I7=?=BYrogfurnrfdre@6CY^\\sp>.[op~b?QVafpiYcX5*-,./010*4?C]_H9440176?LE<<>>BF5-.02434373?L\\__[XWQKEHMHEC@:=E>4@OPI96GOZknjW;54?YRGQH179?C=CGUL2345768:78;2-+.0/,AZN<=EDBD2IriM`iSB3:clotm]IFI?9DKIB:7:<=<:9641/39=@A@??<@R^WORUROOSTB26204778876782;pkaqpK332222333333344336@KSUWZTGCHORV[\\\\VOKNSRRTVZ\\[\\[ZYXZ[ZZ[]]`````abba`_bluusurpnkM77876778888777777777777777777777777777777777777888888899:9;56d~{xxy{|||{{~}|{||zyyyvttvwwwwwuuwyx{~zxuuutts2243112222378778879;;=@DCDHMPRTTUTUWSH>?@????@???>>====>>>>>=====BPVU_i`^k_HEHNWZZekUBLQA=HQPKQNIMHKNCUxthkimpmd[XNCEEDOWXSWbc]\\a^[`[KFKLX\\KHPVTRQOKGJJCKYRVWGCGJNKIP]d]WZYWWVNIP\\^TOMSaccgdYY]ek]PRSQQPOMLJKLV\\[evtbhyxvwsi`efenotzo\\TTVrxwymc_`_[`w~s~{gMTtwaq`XlXlypibptvpghkpw~vqttpjjm`G??FFFFFEBBHKFEKLKORRPMJGIIFFHJCKNUX[^ZVUW`^^b_NFPNSMCW[VRQPOMIFLXF?D:AFPJHHNNDEQPLRW]\\UZWOQUY\\Y\\[VVVQTRHPLNUSMKSUPNPXSKVYJCTQMFKZPLE>NGLKLLMORUXXTV]^ZZ\\\\XURLHHQMJWXUVUZXifdb``\\`aX[_\\ab_`_]YY[__bfmmh}϶ƨ˽tlof]g_mtdqvhhnlt_|xykxvn|`]s^w˼ϼƹȸǺٸձѤطɟ̼âʮŰdh˿zigig~bk`\\{qwtd}^QZrkbieaa[mtdnh|xxemt\\]^MAo~fu~xoPQsVlX`}uexvklhiqdeAUzq{ZZKRwptslzy^9Jmzj^bowpIYRPPl[f~[}oa^`lTBTLBcgOkaTGAE[m~vaE?BHL??BGNI@48C:5=50/%2G<19<:<963+&-:95<?>945:94,+068973*'11+18+\"58-277+0783*+2.*7GB=BD8,&&0:5865;KPH>735983926>;3+-11/-,/26531521*4]N>3.-.*0D;YI!((3-*=IF><DRKG>34:>NQPPT-,7?GJO9,+.5</3>;73-+,3;=G=72(2826869CB769@9>=??9;CKB8<>AKXM+/AB=C<98@J@DM@>><@=56<?E<4EOS]V^`T:>T^^LK^Wf]TdWKZYQ9IR@DHIKMF?M53C:===:79==:>DFEGKLIHHIKIHFDBCEHGFEDDMSLHNI;<DDFKNNQROSSJJPVSLC:DIGHDBLPHPcd\\`c`i_\\WB6303@KNNMLC:Mapj[wuvrH?doomlcSSHpyB;>;GQWsumTlpRAFFC@WqcWRLKFACC?NmiB1RnV<?EB5142,))(+6BE?<BMRSROLFLlpZVU`icYXVTUKbhZen{unqp`pcUE8;ABBRvzvwunjvyV34J___ue8Gnyl8GYlopiejS33720/0111<B=Zh_L4+03:EKI@<BIKID6+,034433;1<JKRPQUN>329FRRTRH>=?>DJL@57>APmwrgN5,>PPZ[A4AFLB+48:82)(-+)075;B1*)*+/8L_YGBH9ETRl{J\\za8*;^fb[URJ?>=7<DIF?;;=@@<8577:=>@AA@=<<8@T]TR]^[XPPD674/19:863159>EPs{RR]_VG622233333333444446AKSXXZTDAEMTX^`^WMIMRQRSUZ\\Z[[ZZY[[[[]^^```__abbba`dltvtuqomnR967656688887777777777777777777777777777777777778888878::;80>l~~{zxvwyzzyz{|~~~}{z{xwwusqtvxxwwwuvy{||ywxyxvt344333222357777998:<=?BFFGKQRRTUUUVWSH?>@????@???===========<<<:9<JQKNRNVbR@GKNZhgZVRM\\Y?BPOIEJMQSD?HDHftoooqkjkkgPDHJGJUXTW^``ZURQQJNNDSk_FFMU^]RHGIJIDHW\\]ZLUZROLJRYVSQMLKHFJQU[a\\OPXX\\``\\V[]_^UORSPQQOKILOQ]eejvvlgmpppg\\Z`_cq|tstoeYSXkzqpg_\\\\]bgs~e^kgaJ\\wt\\gNdxNH}zDSy||zfqz\\RbpsnklrvumxpllhiksqkkoW>>HEGMMLJIMOQRTUW\\_XSROJLMHEHICNY`db`_^]`g^cicPNTPSEEUXYPLLQTMAGVI>D<CGOC@GMG?CNPGKU`^PSXIIMU\\ROTUUWTPJGTMEFJJILNJJLUMCPYHBSMMKKWPJD?NKSNKNPPQSWXWZ_bba_^\\ZYVSR[WN[c^\\]bbnlkiggddbZahbegfggdb`adffinmknлˮʹeib_h`dk`lsffjkdtvxkzrj~]mvc|ĹǹȮŨĭѾΛܿħ޷̪ҠѼϻǩżym}tyXmdowsgcYapwwcs`YHUvs[]\\[ZVgvfdlsamqYUXUC}ln~tkeQbiboxzkr}`^mgdyVQduux[VI\\okuqgctqZ9Rnmk^blx{`nMXKXdpkxoo|gc`][@JR8NmP>j^SG<Uts]IGIEE<=ACMMC8/7?6;@.88'1A4-6<6)(01,)2955<ABDA?BEDB<99;899/)+/.1;0%9@/&'%!'/8:.7@BIIE;.+)&%(0982959FID@;89=4./27C>6/,//+*),38:81/6310.JTO;36=/8A2FR..'51'4839?K\\UM;97.+7DS]K.0=GLMA.5,/9<-9C821+(,5;=A3/+3;<4636:=939B@:<=A;89EF58A@@X]5-<E?><9:;FK@BJ?D=>=747<=B56NOW[W_\\E5E\\^XHM^Xf]SjVQ]YN?SL?AILII?EL/?IA=<;85:<<:<@ACFHHGFGHKMMKGDCCCCDFDGOLGMN@;@?EDMKLNLNWRMS[\\TMEEHABB;FOHM^^WV]^ejdf[E?5029DOXUF;4Cr`mysvwSEamrpnncekH8<@G@Psp}]=:DIGFDACQoyytj_SNJD:Eq`ZncC;==979:3,+,06<=<=AHPUZ^]SO|dSWWXTKIMQPH>jyqos~{qqthg_O:3BJJLSa{uuumjwnI34E\\fbf|fIde=N^ea][VL;3;:3//11/.>E3Ibd`H+-=HNNC8:AEGGA3,-025646<18@?=>?C;,'*+9MQQRQMGJKCAC8.05:>Uw|s_;1GUZYOCDJV[Q=8:6*--,-,-11.BP0'(-.7FMX_`eX:P_WZmtO\\`)*@ROPMNXTJG@57@FF?86<A@;7469>?CGECILD>75D`uuxsaZK>963466667852469FR]f[KW^I42421333333444455446ALRUWWQD>CMUY]`^VMJKMPQRW[\\Z\\[YY[\\[\\]]]]^``_^`aa`abelsuttqomoX<55566677777777777777777777777777777777777777778888779;>;3Fu|zxxwwxxxxz{|~}}}~zz{xwvussuwyzxxwxz|}{zyzzyw3333322224678899998;=?BHIILQSTVVVVXYTH?>>???????>=============>=:<EKIFC@DMJBFKKMSRFDU_ZIDPLIPTNKZ[GACAEQ^pvpfTWhaVNKJNSY_RGFKU\\YNIJB>JNKRWMEIGPenhYMGNOE@HaqcTcm\\OMOVRGFDBBBIJJX\\V`h]Z^ZYUNU`_ZUSTUTQSURQMFKX]bszwurokjmlli]VZ[`knsvmhml_TTMJlxqg`[\\VZeo{d\\gqnNdted|~USR]peQ^]LPaty{wjw|ldluiehk{~dzh_imfi||skl_KEJGLRSSRRSTWYZ[]_\\VSUTMOTJCIIDYadhb[\\^]cdabf_QQVWUJOUTZTEEJVSEALR?B<CEM<:ELB?CKPEGP^ZLNZHAGP[NJUUW[\\SFFUTG=CIJHHFGJOGCNVFFQJLPLSRMKERT^VSTUVWXZ\\[\\cfedcabbddb_dcV]iebddfimljhgddb\\dhcfggkmidcfhhefmagwּɵ̨}b`\\^nh_fZ]ur^inmtwynii}bruhȼ¿ɴþʹͥͺλ΢װǁŻЬƘлȹár{t[xyq}bkwm`\\`dt}]fsYKIZx~YQXUUUbq_^}m^lkUMZ^I|xxktrja]orgyn_swzyswYUoggvIfkkuoXRJbdnogiesbT>Wmbp_cissNoNPV^}vszhzvpc]\\OHY:0_W:KkXMGGuqcVScVE84>ALRH@5-4;=A7,99/5:64246,)12124553103;>==>@DHC=>:4368/.2020-8<2&!$''&.8798FP8-*%%')+/32/4559<;==>>A;,-3;@<13552,&(*-386.++,0*,-46?94<>//655G@.),(,3652<@BF?6>;8/.;<=4/ISMJ?.6;)+344=?4/-)&*5:<6-('8C=46088433@D<<7?<86:A:-:@<GaQ18DBA=797@NF;EF>C4A1439<=A3?QK[XY^R76M`ZVIP]\\c\\QpXXbUNHSA>DMNHE=MB/LHC97<66?<;:;;>?ADDEFGGHKLKHFB@>ADEBDFEHOF<A=?@IGILIIRQLS]_\\VPJEBAB;AOLKXVIISX_gggf_RE:6138G^]=((2`dhztvvXXsxxxulxH=;;;CluEZyMc]8?CCDCACFIVfnkc_`YM=0CsumcF5;::9972/.-,.38;:9=G\\mlfeag{fRTSRMEJROIIY`xkikuxro`VQC7:MSWZYXh}zmpvljr_D>FP^mnepid{T>LWVUYZK<::>:1,0542.8I?DZcf[9+ASND=89::=>7/,,,-3454=42<9516:0+..+5IPMKOQNMOI@F=*1O_Z^u~qE4GFCIGDBKmiLA?5+-1232.++AO-++.04:<GRftI1AIEF`lh\\'1GJ@CBNa]JD=48AD@:54;A=84348<:BMKHR\\VH=8CayuqjdZD8:832>F;246656529KNBI]_P=1.232333334445555556@LRRSRJBAGQVY\\^\\UNMIHNQSZ_][[ZXZ\\\\]]_`_\\]^\\]___aaacfnuusqpono^?566566777777777777777777667777777777777777777788888:==75U~}}zxwwyzz|}~}}}}}~}{zyvssvzxw{~~}}~}{zxyyxw112322213458:899998;=@DIKKNRTTVVWWXYUI>>?>?>??>>===<<<<=====>@AAACFJNNJHFDGEACECBB>=MeX7LeWMTbXM[_[UBDQJMem]SPNSIFKNGCFR\\TJMQRRMKFC@>BIOOPOJFDGWcjlc]`UGMP[ge^djeZKMTNFDFNG>FLMY]VU\\cb[WTEAJWYVTTWVQNRTPNSSLW`\\aknkjhs}wtsne^bdgmpqrkfkfVY_RXtja^WZ]aqym_hpkaejR<`n\\jjjy~udSPU^ny}ynqzyt{wdbe{ekwvortmqsyueRMQRROTTSUVVWXVVXY[\\WOPTTNRVIDOJJ^_`c^TWZWaba^^XQOY^[VXVMQYF=>OPEBCS>A<@BD:<DH>DCISJGMZXKLWH?EHSQOYWW[_]NMW_WFFINJGIHFGGEKMCLRJIRRTYTVTZ\\c\\[ZY[]_^`^\\efbdcdefhjggih\\]fgdeabfjlhffbdb^debeefnmgaciihedifgfж¼¶Ȧ|{mZZYmu^aYXr|afsyoswon~\\iclqsìŶ˹ʿ´ӸпɽüѽҸջ͑tř̚տǻƛztuh|mp|jsoob[hisbYhW}u?Qk|]R]OPV_gUgjdlfQVmXV|qorsqdop{u]x^XspzsfxqNZtoq{n@mlgfcSHNebuhlupqXQF\\eYscdhorPpK\\dc{qtilW[YT_F-@Y<AegWRH\\xcfayvQ:07GMLIGB2/6AI@03646>A?914;5/1201013.)&(*+*+-/8A?997201693.,+*05/-,(*/0/%,73'??%')*+)(.2-)-214/235>=@<.1>;?9-35772)$&(*,0+'+(')(*(+)1/051+/:@515.((+-8<>5<=4BHHKD@3+3/,+)GSOH:3C6.(.(7A70.+(%+5;7/.)-:>842.66539E>7<6A654:>1/?:>UaF=<D>=7886KO;<G@>74=+439:>@3IML^WY[D0:TbXTLP]_a]Tt]\\`RNIL8=GRKHB?O1;SF@48927F:9:;:==>?ADFGFEFGGGED@@ABCBACFJH@D@@>@GCGFEMOHMW[[VUPLOMIABQPIRQA@IS\\_]efid[NC?510:V_>*E[jibyn]j~zwxqk}zmxDIF:.DzgD7QtJGkE237=<AGEDP^ed^]][UTRWo~rnZ@=<98521130))/6953<GPYXYesj`]XWWWQHUcLJOgsr|~pieg{}rk]VO;<JUWdjcZcxoX[fdnt_PUdpruxuu{xmwoMBIMMOXgkkgc]L7-/3488;LWZ^bedJ/=OKCCC>75::0+-,*).47381,35,7G?/,/-,/>JNOJBBDGHDHA,7j~{}~P7B4'0;72Cj}dD9@:.-265.((,?K-//13568>D_gB206:B\\xtO+/69D>0=WZB643;B>7655;=87667887<CFN]cb]L<CHFCFI[]C<=?;6CTI3/47:==<;>?AQ_U@755332334434455556658ALPNQPGAENTWY\\\\ZSNMIINUY[_][[YZ\\\\\\^_ab_]\\\\Z\\_aabdccgpvtrspnnnfE366566776666667777777776677766777777777777777788888;=69]y{}|yvxz|~~~}~||zvqt}z{}||zzyxxw011122222259:88999:<>BGLMNQTUUUWWWWYWK>=?>>>>>>>=<<<<<<<<<<<==>ACDFGKOMRWJ@IMEDGDDC=AUaQTjj[V_\\QXabVAAHIKTYSQSLD@BGKMPMR^U@7IQFFKEBCAFLNUc^JCBCO]equp`MIOY[X[ZYai_PTNIPRYXHCCEO[]VNMXZPMF=BGGJSYYXTQNOQNKSbe[XXVWUSWboqw{rhccfhlpqqmloka[flawk}zoa[TRaovobh}~{thL7KLKdtmkm^OPSOM\\hbejcgthYnmchzsvwvzskpzqlxs[SWXVWTTSRTTTTUPMVXYXPHINPMSVIDRNMYXZ_\\STWV]c`\\YUPQZ^^[YUIIZO=:ELAF@H=A;?8;:CGF>JCIWOIJVVKJNHAE@KVT\\WUZW`YSVcf[PJONGOJCEKLHHETWQOXY[a\\]]b[a]\\[Z\\]a`a]Zef_bgbcdfjbehg\\\\_aab^]ahifdebaa_edaeccjhbachihfedgleiɺͧǻçwzUVUcd\\WYp~j`vrknsblu[s\\q{vƮķȷůæüȿñžĬžɷʼպ˳rմȝΖòtxr}spuiwrnc\\hww|ZYYXgS>`sYelLTYX^KnyjllbLjmCh|ohhupduuysoetWXkm~k`vmEk{}p|qgCnn^UXKD_jjqav~{lWOL_YSrj~ydcvlu[rQx`totsNQZ^Wg/7NC8Zob\\W@Z~rhla>49DIDELL<5<?CC;086/>GEC:06>5/10./1550.-15641//07:7530025:;3)#$(*'+1-.980!!.2)?9*,(+,,,2/(,//12-,)/9:?10:66937;72.-,*+,-,+'38/,**,,234/.//*4<;=3)/'-2157:>97-5KSD44409;2($-/7676>45-819=2133+#-69-,7:99875/03:<7>A549<?134::+8<8KYWEB;><87>7>QE8CA>>/80.1498B;7LHP\\UVW=0>\\aWQLR[ca\\Yrc^\\PJIH6<OVGI=CG&LWC:3=41AC9:88;<==>@ADFDDEEEEFEBA@@@@BEGFCDFD??BACA?HPGDNUUSUTSTQMGDOQGGI@?FNX^ZWYehf`YQJ;2.+BSOfx\\s}vjSV[ZjojhfYikcn=VW?-?]XEFGM_KC@\\qD,*6;;FGESgspd]a``m}svyV:9754469;96424<ADLPPJFO]koia]ZVSTXlvXMdmpnvzwpi`gwvm`Wec@CRX[fidiv}d@CYerxofglotwyzzz~m`WHEAAESbqzuS:,+.19?@GZ\\\\ZZaT7;EEJLJH?7881/221/.7:33**,+,@K932+),+0:DLH?=??EMKA41O{rSD9+0+4GB@PWOJA14<7-.32-)(+>E-//25:=?<<QXJE<CIIPq}bYG+,+6OF26BD:336>?618:68758<?>84;>:9Leigi[H=;<>FJRXJC@DIKQ\\Q6.36:BJKD97EWT@354433334444446666776;GLLJNPGAIQVVX[]ZRPNJLTZ[[^][YWZ[[[]`cb`][Z\\_bdddeeeirxwuvtqqqnK4675777666666677777777767777667666666677777777789:;84Dl~vy~{ww{}|~||{yvx|~~||{ywv011112222359:88999:<@DHMPQRUUUWWWWXZYL>=>>>>>>>>=<<<<;;<<<<<;;<?BBDEIMKMURHLSMKKD?ACCBSga\\fj`]\\USQHC??>FMNQ[^TMHCCFGOYUU^[OKKFCMLKNE?EMLP[SC?BM[_bnys\\NKYdUOUVWUVSShbTadbUHIPGLUTRNJNRKF@=DIHKV^\\YZ^ZPNNNP`wm\\\\\\\\ZZ]b_grwulikmnnnmnkktwk`ikYVkxllpj_VGKUXbmuzuREJHRbrrjg\\QRSMPglbkwot|b[ojr|{v}uupf]`fp}{kXUUTTSQPPPPPMPOGSUSUMGFHKHPVJGROOUSU\\XSSUTX_]ZUMOWYY[XTRNJVUE;<HBG;=>>8>6=FNPIGKIJWRMDVTLNLJBE=H\\WTRTXNS^SNZifXNOQNTLDMRTJIMY_ZW[ZZd[W`eX][ZYXYY[^a\\Xcf[`f_[\\`d`_ddYWW[a^\\^`bcdbea_`_ecacabddcffeghgedghqsv̱¾z]OYduk_QWt}kdwmekp`gyz]VkĶű©ĺŽ·ֶƹʻ²΢˱þһĊ~ٺѸݻŹϔǸvrb{w|}tcbncka[YTRVszMWrѝW|zZfYYXLplmql[JqZByihZbxkex{Wcfb[impiaxlQt||e|inQrnQNLDRnzn^d~|wbYVM`UProslwbamkxczcTp~|tF[\\c`a/DL;Edjs_ZL6Twhk}`I<8@FB@KUG6@E>816:=74CI:<>23:510226:;:878<@>;83/+-479;7/.7@A;* $\"#+4505:2\"!%%,*)+.,')*,05)*../1.)!(77=7-454747<?;2*,350-.0.+9>653/.23/1*%.0*2115811.6;67:<@7-+$7QK8<8:=F?55.\u001f')1:9725ED983588*$390#*=F>9995,23>><>7026F8/04>3*=8BUPJF=8<<8>=8HL==D<;;1>+/1887C6>KFRYSTP93D]YXLMVZfaY^nicYNHJE6<ZUFF9H9+]KD73:36I:;:95>>;:<=>BCCDFGFHGEDBA@>?CFFCBEHD>ABB?<ANH?ENQNQVTXXNLIMNFBC?AFLSZVRMTbea_`aWC?D?=>N^[aliI20Fioofcbx}yd6MXJ;75;KRLJMJGE@A:56:::<<Gg~|pbaca`k~{qmnS776443357;??;;DQW[UMLNOOOQVXVTPJNZpjOYbhghowzzsg]_caPL`hNKR[\\\\X]uiJRmk]_dghc_cmppppwoQA>=75@_xr\\LB8-**+3>@>EGE?=GNGB<>JJIF?7334428@?87752*+,,.5<7<4-1-./..1:FJD>CYZF4,3PqoWNE3.CG;H\\SAA<?F>5CF0(,.14-*?G1/.137::89FUXWU\\Q9<[xe]S23-/<;35557;9;>:23=@96447?E;1<E?51>_ng`WQD9ACFOXWLGBCQ^feN6/257>LLH@9ANG3212333334444555666777?IKIGJLECJRVUV[`ZQQNHOX[[\\\\ZXXWXZZ[]`cb^\\]_befhjhjkikt|}{||xtspO457677666666667777766666777777766666667777767789;967Sx|~}{z|~}~~||}{yy{{{~{yvt0111112233479989988;@DHNRQRTUUWWWWXZYL>=>=>=>>===<<<<;;<<<<<;:AB??CKNLLMNQPQTPMJE>@GJGDUe\\]ie`\\TKB<<=ACDGMPSVMIHDD?CKRUMLHVodLGMIZ^FCIMLEGOF>IW[^`lzxgVNVUMSXYWPOMMkoeh`YRIJWKGNKNQKJNIDBCJLOSY\\[]`ilVLOVVXmsidba`ccbbgpuoecefdfoussh`t{kljPQfotnbjshQP`WHSlumnsqroZFDL`strrutbWSQm|ptztz{h]X[^pzyqrvkgolb^afn{{lZRQQPONOOONLIMOFNOJNJEJIKEPVIKPPRURQVSSSRPTZUXRGOZYWWVRPRMQUS@:?BD45B@=CDPY]ZSTTVOSVSDZTSTPKAA;E\\XIMPUQGXVHHdeZQPQRUPJVXUMPSVi\\SVYT`QOadXXYXWWVUVZ^XW_dV^d[TUY^a[_eXTUU`^X]`]^cbea``_dbaccddfhjjigghfdeaa˼ȶ||tO_umkfQSxknylano_by|bokȼ˴ƪϽɼԽ׽ŬеʽĻäʲƿ̾¥zۿɻӗsqb|}~uwcYxqp`Ydjasz]^YIsgYẁgwsr\\bPXtykuqePPoYVg_[Uo{sszqsMbgzatt_hezrqsup^xou[qpHIEG`p^Wn}ol_`^OjXJqqkco`cikr`tYuu|rVZYhrX6NABPVo}p`TE:`fvZLH=::>JNNK86ED5/16BC77C?-1A=3210047898799:==;87641+,16>D>12?>3)%%\"$17104+$ \"#%)'%)/,()++24+1*+./'$$265<2:6344698982.287-('+1(%)-2865-''* !11*/+./12+15=74;>;:3-(.E[SLA>;IKBGA*-2:C;727FD774797(%33*&+:DA>==4+24B;;7...=D3/.5=,/:ANJIFB63=<8D5>LB?>A8>467(24;9<A7DHFRVPSH89MZTVGSYZhbXcjgdSMFKA8?[UI@:J4>]@I1:46BG8?=:5HA8867=@A@CFGGIIGFDCA?@EIGBAEHC?AC>:?KLA?GLKJQTUXTQRSQJHKJIIKOZUJGQ^c_[[bf\\HOglaR@Mv]_\\fgM/4a|pcUlpTgQ0ATPE9-3FNLJHHIF:26<=:6416Pkka_`dc_^\\Zenw~zvofV866641,)+.269<BDGNTZ_b^TNE?BHNOMGGXqcWimljlzvi_X]\\LELTRNOYSOPWpyysabm]D@IYfb\\\\fklnqs~X9450-6Oo}wcG42320/,-3=@=;::98:I[V94FIB976545323BF?6094-,,+,/2DD/87/11,*/:IQJ=?R\\D,,2;HZoo^SI7;DKhkkj\\C@GEHD8IN5''+8C5(=P@22005537CVdjee`D3Zq`420/49:999;<<;:637>@<7543=B0.KO;446Jd[TOJB@AA>M`\\MD=>I`j_A3.4>DCGEEC;:@<2333333333554677767767?JMKIJHBCJRVUV]aXNOLIRZ[[[ZXWXWWYZZ\\_```]`ehjjlmmnpmku~zrqU64766666666666667666666667777677666666677777677993;b~{~||~~}~}}~~~|{z{{{~zxvu013322113357789999:<>CINRSRTUWWWWWXZZM==>=======<;;;;;;;<<;;:;EJEDKTNGNRMMTVRLMTJAHKJOQS_d]Z]]TIFKLEBHKC;FPHC??BEECFJLH>>=HiyhZPLitM=HHE@LbTCLT\\_dntuiPH\\YNTZSLTYSLZ`ccRJIEGMGFJGHKLJJKOIGMKORRRT^`kv`UXUT\\ksocdecd^_dddgijjgfadoutrhZfvqqjNQbbccbn|{WOngMTd]`qx`CDHL[gpumfebadsxihppytNGWWZlw{kmzuqsqmihhkwzn[OOMKKKLMNNLJFHNGNPFGG@FJJHUUHLMPQSQORPQNQOPTPYWIS\\[^\\Z[XVVVV^LE@AA<<PNPVSab`]X\\``WQ`YS`X]\\UODC?HUWNNPOTLLYE@UeZSRQPRQNYZWQVRPjYHKYQ[OO`bUXXWWWVRSWURSZcTYd[QSV\\_Y[cWRVT[[VZbYZ`addd__dabefghiiijljhhebbbYa̼˪tv^cypw^Pzwr~v_rk[brr~zȰϿ϶ɴսǺǰӱʳǿɭΧΰןtpqmskr]`~mxeOP[ZWcn_Z_iXo|ummnnH`uzyyygYNY}ibr]WQYws}{reWUfuht|_`sx|rkh_mu]nnD@DOanT]rsml_j^YrZLopb[jdhgie_wzgnzw_N]kP?S9FLOn||ZPLp`cWIIPG<9FMJC85DG;99=9=?7671,-2851.0431/.-.0/044678:<:645417DC;=</\"!#%'-.*+*#!#$\"')(-/1,(*,-22/-'+.*$'14.1425235045.,+,.44.'%##,!\u0018\u001b&,;9;3*+*&&53150-/31&-,15./<CD6-+,2CF?=GGHXTBA?92DF>739A63545><(%.-+007<>AA=1,1=?351,,5F9,*/87+3?KG?BB>43>8@<9JE@=::7>1:..17<:@<<EEFQPNT=;CSYUQF[Z\\ic]bdc]MPDO<9DWYN?AJ<LT@P2?0=IB>A@<<RC9847;@???BFGHKKHFED@@DIGCBCCA@B=7<EIB?BDHGLQSUSPUXWPOTSPNGIUSEFT``ZURYcjaWX_YS]WKKcaedeaL=Hmw_IJqg:1T~tC-=NKCC=2;KNHDB?6/4;>=70,.8FE@DUfjb^^_XV^kxwpjeI238961+(*+*',5>914=Qgoi`^WMMPKMRIJYbhswsos~~zrjd]ZpoFT^de^RSSOZjikk[TVYZYSU]^^aelrtvsvm>.4766?VjdOFB<5015;AFJJECEFF=<GV`L3GO88=>=;5201=AC5,470-,*+-;PD5=0011,6LRIJI=8=B7*-3:6;gxmZ9,;NKjdMKHMG<NI3-,3CG5(9RR=/321<DIUXVVYZWAFl..348=A?=;:778635;===<;4,5<+9ZN3378CJBGJ?99:95G]]N>52<]gJ-.9CKTQD<;;97554323333333557788777679ALNMNNH@AJQUUW^aWLLKMVZZ[ZXVXXWVWWY[^^``acgiikmmoooonxuu`:465666665556666666666666666666666666667777678999Iqwx{}~|||}|}~~~~~}|}~|zxtr134444333556889999;>@DINRSRSUWWWWWWZ[N><>=====<=<;;;;;:;;;;;:=N^YSUTGDPWSPQQKDHLEEKKGIV[X\\XLQUKABMXUJLMC6BSH<9<@HRRLFCFGHHPgwombPex\\EHGFBLbgYYahjlood[JN^WUTPQY[PLJLNRXNJLEDEDJMJGGIKKKQPFKJLTXWXgpu}gSYYPR[fc[`cb^XZdjiosnlgfegggqobbfoywsjlj]YY_bjrXUdZV]_d]HJFCL_rudXbhjporrdajxzyiWTS\\ekunpxzwkhjfinlkleQFIJGIKKKKJHHEEIFLTKCD=CHHLZSEFLONSOLSQMIQMNOM]\\N[bbligmjbb`Ze^XTIFQW`]bdY_[WZYXZcYYja`bbfd]\\TPGIQVRSSRNRKRMBF_XSVMKQLMYZYSUOKiUBH[SYOQb_SXZYXXURRTQOQQ`WTa`WTU]_WW_ZPXXTXTU\\XW[_bef^]c`aeghhhhgimjged^aeki|ʻΪunm{rTx}kqdnrЬåʶ̬¾ǖ˟Ƴͷºӫvפ׵֬vuǬdoms\\cquss\\LMd_yuWw\\]suoyjmDap~suVZW\\pifZOSevqwezYaneg{}teU|v`blbar\\nlB<IZ^p{^dkpud]k`gr^PpjXVikmecZcsztxqqUOhnGFJ:LKYlzJN_eg|hRHQdT;FPE>:=JTF<N[XLA:63.,11-+02231,))+*)(()-038:<>?@A;3/*-=A7;<*\u001d!&))&%'(,,*'&)+*/24+'+-/10-')/.(+02++-,.,-2/-0+'%#&+/,'&&%$(!#&*/<46:.0/0/949D,'0<2+.,06-(1;?71.-,.00.GT<HQC>B5/HJC5.:>03744C7\"$*+152438@A<0./B4,22,.AC/'*29429HC9>?A90<B9<9DI>=873:838)33;;>A9CDCFOION5EKSXXMJbZ^jea`^\\TKRHN9<IW]ODJLDPTOP:A3AJA@CA?HVH:8::<<==;@DFILKIFEDA@BEFEDCA@A@88=B?<BC@CGNQSRNOUURPW[XTJHWXHGV`\\QMNPYhljkfWI=ERUY^zgmcb\\B;GYX>8LlR+1Hig>1BNI>AD>ANQH=72++399741/2<AB@FYlk_\\__R\\x~kelbD</6=<62.,+**-67/**.<R[`hpvk\\WHJYPGHOs}w~rw|xlkhXeZ]kp~SLQUnsjf[GCPh~iT]hhgnmkh`TakK7?EEELS]grufJ7202AMSVUQQSOC95?MUVACG/@KG?;:B@6;=A9.-/,++)+6FNDD;)2.-,6GK?<=941..23598PS2>3=FUiMIRH?ND429BNK4-9=OS@;C8@NX^D3;IT[NFvq-.659@FE?;<:799569<<<CHB5211A[L/,0;>75>F=::846IWVI720;^_?-7T_YYRD:668884333333333557778877775:CKNMOQI>?HPUUX_`UKKKOVYYZYWUWXWXWXZZ[]``acghfgkllnnos~z{lA36777665555666666666666666666666666666777777771M|vuwxz}~|{{{||||}~{yxuqo555555543557889999;>ADINRRRTUVXXWWWYZN>;=<=<=<<<<;;;;::;;;;:::=JXVTOJIMQRMGCBC>9@KJGFIRSOKHFGIEA?AM[VPJC<ERK@<DJITfnbOJOWWZhcS[gkskc_VWWJN`WZfippiom\\VJJVTTQQ`tufPHOIIUUOMDINIJLIFHJILMTWIMORenmmotyw`IKX^YW[OHU\\XVY\\cottqmmha\\Z^jwujmmluvy{xkea^aksu\\k{gba^lv}WQULELT]lolsvmosmknlehv{}nhfiub^]ntnppmeca_dkjeZKDFHFGIGHGEBDFBDFGQSF@@CEFKZTBALRGWOISUOHQJMOPcbZeihtsovuoid]fgceXS^gabicTTNR[YQOgXggfccjliejeaQIQSJTWSUFUKNHASXQSIGNHKXYZQQMOgSIK]UVLTd[NZ]ZXXURSVQQUN^^Vbeb[Z^aXUXZNV]PUVTWWX[]bdc^\\a`^dffffffjmiede[[hzʹúƱѵw{bz|}Դéç®̵÷ʫβøٿҶú϶yܫٹѻ|Ͳ~dpshNYjezcGczzkvm|jQg~{epxktYF]n}nrMiZ]nr[aLYgvcbpowny_g{wuheS{qQducWm[rj>>Tg^otpfevsYcbglrcPvaPPetraYRf~qz{qt~bHbqye<L?IROd|_L[ril}u\\PVh_CAOO@6>KUM@AJPRSNC;:91*)**+033+&')++*'''+038;;<<=AC?3*((//2;8+&&**$\u001f\"+33-'*+,-/11().--.,*'-2-,11+'*+)+,-,,-(#%%$&)+(%&((%/,$(%///)1'+/49>446&(6:1-301C2*,-8<7961-19<@QL8:ED;5:LGD6/<9/34445*%&)*63.1,4=@<-./@*+/1-1?7++-7;89AD88<>B44G?97BH=<9542;543,63;<@@=G@?ELDQ?8OQTXVNQfZbjgb^YYONWKH8DK]\\QLRLFR[YHDA9ELDDE?DQWL<?D;A<<;9?ADIIIGFDCA@ABCCCCB?A@<=?>7<A?>BJPRQNNQQONRZadYV_^PKTZVNKKMQ`jfgjg`_ZRFLc|w\\zma`K:8A>4<JUE28BQG27GLB8=FKNMG@5/,*+.0101124983;JapeRTa]LbpNDbsT37./>?:85247:=;/),/5=@DUiojf_OBGVXIBfthlkVVup][]~eJPgwhbVLGMaricvwuwk__`PTkV?KICTcgikv|fB462.2;ELOPRSF<839KNMH?A2GPH@@FNH<=AE>1.*()*..7??FM9(.+*+,.//0231/,/56336F^~84T;/?Rv{}]C@IJLK?46DPVP=4>JKOJ?XPGN^_8,<HSZF2BMMiv42987?HJDAB?<<=<6148;@MTJ6/9>LC0,/:;44;A@B@:46COJ;3307OKJ[Zoib`VNF=9<@>5212222455578888887776:BHMLNOF=?IQUUY_^QHJLOUXXXWUWXXXYZZYYY[]`acffdejkkmpqs{~wJ2677766655666666666666666666666666666677789964N~yvvvwy|}~}{|||{||{~{y~}|zxwuqnl67777654445889;;::;=AEIMQRRTUUXXWWXZ[O=;=<<<<<<<;;;:::::::;;:8<KWSLPRH@CJG=6;GF89GLIKUWOKB<@@>?@?=AMTTRRH@JME@JRK@IcodSMOPTY``^dmdYaebc]UVXU\\_]glicYTNGEJMNRQQZdiXOUKQ[UOHCPZVOFDEHIEGU^WNSTU]^emjii^\\TQX^ZQQJGNPSV[\\^djnrkccdd__pzxxysixwqebtm_uz~mnqiefoquvd}ERXQOUTXnzxxvulgnrmqv{ytt|xlhpjglqskf`Zerh[NHGFEEDDDDEC@AIE@DEJTODBDDEJXTBALVCZOHUVSKTLNTVejimniqrpqrphc_`bde\\[T`Y_cZPPMV`ZOUl]l_ecekiggqqi]OSQIKWSXGPQGMDGSIHFEKFKXXWLNNWfTUR]WXT\\dZN\\_\\YXVSTYUSZR\\b]fjjdbccZWTYPT^RQZZXWW`\\ac^^^_`^bedcdfhjkhd[bhjq̽ĴƪϿ}qßϮ½×Ъv˝ѫε۹ռٻ¸ƿtn~y}jbQf[vNSLUr|zr`ZfZUdozċYsqbwiOOUyxpbRvQ^xx|fljI^`wsPtZv{llpyi^aW{ix\\mrhRl_b6BdnZiw|ceqjYf]klvgZwWJIcw|\\OLg|rwzykuqSMuuD>PEXIRsvLQfi`ywreVZkcEGLHF3=IPPFDC<<:DRPKIKH;-/--45+0+)(''''()+.0467;>=<=BB:2**.,+4;2()*'!!'--*(++,-.-)',/++**++12-/1,('&)+-.-,,+#\"%%%(()(''((),.&(%+#*\"$%$/05;1*%*+1.50:/+H9--*4BBI>146<BFMWU<87:GEND:1+41-01/-*-51(*5.,/,0:?>-41=),-/-16+-23<<>;C98;89?;?I969I@6<6333;44/136:?@AFD;?DDAP/CTTYWRSYi\\flfa]VWLQZMA=ORaYTTUKH[aODN>>HNHLF>LSTL<LN;JC@;7=>ADDEEEDCA??@@@@BAABBAA><9>98CGNQPMNSRLJLT`fe`a^VQW]YRNMMM[d[XbcfiklfWPVd^iSDmmZ]aO778<A@@60::8/)9IC;7@FGD;2/++*+.//1124454/-7I^j[HEPYLNV=%>roC.++,7:87426=CA4)(+4AKGNahcaeaTORU`^Qa}d`ebY^orfYRfu\\Zkoe^VTUTLOXe{sRM]fga]_mrcj_>MKEXdkytmbS;.21.*)2=AA@A?=;;;BIJLH75IGBBBD@?CACD<372,)*/1224HO<&),*+./-**/1.,-.00/.03@yx/8VI0F^}kJEG934:GPJ901BSWQHIUVQTTTVVNK]a5-:?GG87A<Dr<19>?BEC>;9:<<>?5)-1:9>OO:-4490'/4:857:=>?>6403?<012113<]|{uUOXLIF@;;CC6212235665568998887777:AHKKLKC<AJQSUY]\\NGMNNUXXXUVVXYXZ[[YYYZ\\_cdggedhkllnoq|~~X547775665566666666666666666666666666667789;:3O{wvtuvx{|}~~}|{||{|||~~~|xy}zwwwvqljh8877865665789;==;:<?CFIMQRQSUVWXWXXZ\\Q>:=<<<<<;<;:::::::::::9:?HNLLID><AGD<9;AD?<BIMQYZVSD9<@A==@@ACGOX\\K9>EBAGLJEHV[TJJQ]_X^cUHOMLQZc^RSWS\\ii`XTTR^dOGKJJHIMQUTUW[]SSUMKHBLWYZLIPOMKHMQKNTSOLHPX^\\OL`h[X[SLHHPSRW_`]]_`clkdhlh^Xajko{tjvwv|mbsql{lNPcjw~{zbisWRUVWTUd}vtruriqwyxv|wu\\`kaiknpkfddpyqZEDGFB??@FJECFDHMEBELRWQGDCEJYTCBNYOUOLYVURXTRZ\\foopmfhlogelhabYY`[V^KWW^_YZ][[b`Wbjhk^dcgjbaboqhf\\VRQLUYTUGRGGGAHC@@DIGKYXULNUafW][^[^_bc_W^][YYXXY\\ZY\\Y]c_dlkigfd]YUWTT^SM[_YTU_Z^d[[\\^`^`cceegijhfdd`i̾˱ȭ­z͡y}οȤ¨ſ֛ոɤ׻Ұ͹ºƨǮնϹ³yx|fhUifs_Z~svYOQVmvOFP]VV\\ijwwZp\\ajUZST|ox}Oi{Mkrt{{`aF^cv]Vrqykhw`V[_}dumhosQmvfV5Fsl[fcgfg]^XhoqnmkPKDbuSGGilmvlvewdNZ|}l6QKSU?ccKN`\\eccd\\^g^S[ZC=6FVPTVRND=?<>FUYPO[\\XSD49</0.-,*(('++++.0127;?BA=ADA9682(+7:/(*,*$$&''((()+)('(.-(),*+/3.-1/)&%%+/.-+++&\"%&%'(()((),-- $25+'$'$&'%,'(1/-/.'+*78>-/952/.4??M?183;>FKMQB95CRJXF62('+.21.+07>?-,1---,,5D@.:6<.-,.-0/(1888<@=A6<998DDAC76BC8681204932,126?@AFK=:BBAGG,NTU[QOY]iZgqd]_XVEV[N@JVY[ZVZPIOfZAMR<DHHMSFBPOPD=TI=TNE94<=>ABBCEDB@?=>>>>>@CDBCCB:9:4DIJONIJRTKEFP\\b`]__^\\^\\TNGCFLTXQUa[^lkkigeaWRDYB:RVLJ]aE67<=8;865440-:F=8>C=6/,++.+(-6::76788:><:<FNMJJICLA66-0Tt\\63*)+35760*,6:6,('*2>CFTeiffhiihb[egYXu}tvcab^]^chli]\\hi^URWXW\\PKWSIOQOJGDDOYU\\jxqalmECPYRX]nufK7,(,./,*.:CD@978;@A?AEIG99D;;?8/6FJ?<464:80+,-0206OVF2,*)+165.--0/,*++-..00Et14JQ;Mk~N+/0-*1ITI3,.6EPQSUYYYYYVRPNJY^/,67>BEPZLE`}u:3:AEIC:5/-/14:;3(*7>77>=634460-589667:><;920-,121221229Y|gB7?A??B<4>E8111356677689998877768<CHJIKJ@;CMQTV[^XKGNPPUXWVVVUWYXZ[ZZ[ZX[`egijifhkklmlp}||f92776566556666666666666666666666666666777983Ozuuuuuxyz{}|||}}{{zz{{{|}~}||}}}~~~|zy{||}}|zvwyxtpmig9:99986888::;?@>=<?BFHHMQRPQSUXXWXXY[Q@;<;<<<;;;;:::99:::::99;;=DJG><=>CE>>?>@BBBBDFFP_aZJ<@HOD9>EJNPPJDA<;@BACAEFEJLGGOMKIGJICGHHIIQ]YQUYUVai`UOM[ncMINLILPMQ[\\X[^`THFLLIEMUUYPLPMLMJGDHPQHDGIOO\\[QT_ldVUPLJMTUVU\\_^^__`ekmg`aYSV_dcirfY{ufTdrLb\\EZiXTpvj]Qb`QRVccf}rnqurm|~yxwyzrttkikbcgfchookprZHGFKJE<<@ISNDNMIMSIDLRTYSKHEIXXFAMYYOQO\\VYX\\\\UX]kpnmlcahlb]jgadVX\\SQ`TZ[^bcmlc\\ciaehni`echg_[]hicngYXYSW]UVKLLAGDEJ@8DKEJYXWNP^dcZ`_`\\]_ab`_^][YXXZ\\]\\[\\[[_[`hhfccb_[WWVU\\SMY_XTUYY[aZWZ]``_adfegjkghcblxɺγɸӽ¸~ŭŴ|j~ƵԱǿէȓұºռɽǯͱӲʤӶå{zbYaJxke_|XN[UTUas`BEYgQOWje~`]^O\\[TdZ]rmunM{`u`bsumVHZfo|[h}r|{lw\\QVibmv]tzMlinO?Ptb^illjcfVQftdv}eQJAatG?Ij_erydhaw`Hg|Z=\\KaGRyxZU\\]VRQUYjiOJbX6:DPdXT\\a_SG@=>7;WZQMIScU=76=9--+,2444550-,-/.0434>HA>E;-3;5*,54+)--&%%&%'%%')'%()/+'),**23,,2.*&(,0-*))**&%&''''())('+.* !+/&$$%',((+%&./22-*.-9:A1:62007AE8SF6A<A<::C;+6BZbIQF784,1400.)67FJ1,/+-,,-6E=,:;9---.,0,.;;53?<@=9=95?IB?@79D<685.31460-,026>>CNJ6>EBCK68QUU\\IO[_cXks`Y^^S?Z\\ODVZZW[YZJG\\gG<XV:HGBXUCHSKJ>DX?D[UI96=;=BA=ADCA?>=>===<?BBABDCB=5@LEIJIELPI@AKX]WW[\\]`ac]RHCFOTTQT]RLamejmimpi^NfeNX\\SJ>ARI68>>7<;>;9675:>9:AC:527;61.07ADA@=:9;BJOMJG?//=JMLB855=PaG40..//06;5++/-,*)'*0369FUbdlsmrwe\\db]]^apyvrp}{lfccc_]^agh][daZOJaiXh[IW]LNTOSVG8Ga]hurd^j}xU>Xf=DVK`fX>/30,.221:FHD;738;<:=?===FG>?=34QN>52,948:5421230;[O:82&&+-/0/.-/.)),-+,-2-Bm56;HD@[{A/8:.6LS?).634EQVWWXXXVUSSPM[`0'05?JRb{`6Dtm949<@EC=730--.385039=<>4059?==>==:87678<:961-.0/02222452AbkPAB;<<>EJ?8>6123466787898888768878=CHIHJJ?;ENQSV[^UGGORQTVSTVVUUWXZZYZ[YWY_fiijjikkjkkjn|yuC3786554556666666666666666666666666666779<3B||xvvvuuxxyz{z{}~|zxwvwwxz{|{zz{}~|{yxy{{zz|}{xyxvxyvsqnjh;<<;<;99:;=??@BA@@ACFHILPQQQRTWXWXXZZRC<<<;;<;;;;::::99999:9997>HJA>@>=CC?BBBCBAA=@@8Iej]M=FRSH??DMMPK>5:IEAFDDC<D_tmNHLG?:CE@HNJGJNPUVX[[XTVUVWY_jjSMORMEJ[[SQORRONG?GOOJIOTRPLGDBIMLKJLQNB?AEMYaZSZ^dhbQNKKTYXYQS_``__bhllc[ghXU[ghakk\\nsw~slcmfEWkVRUbr[[i]QUfbXXVgut|{w{{}xe}xsu~xrtuwyzi_eifflkcln[JHNNMKDBAKUTORTRFWVIKTSY[UOIKX^NELX]OQR[UX\\^_XXcoojfia[egb[fdaaZXXSWhbbc^crunc]dhdeklg`caea]VXeb`ofY]^XZ]XWMMQ@HHKR?5GLCLXX[STbca^abc]^^aa_`]_[YWX[]^][\\]XZXYcc`_aa`]YWWW[SLW`XTUWXX^YUX\\``^_ceghlmhkl^p¯Ʒ̹ŵóʷ§ɭļızklqıҾ|ßեϰ͓źѻ˷ӥڹī¡z|{txlKWQbw{entJCHw\\ZwoUgqv_CLapzs^ZQTcfagfhjcgaY{vt[Xqwr\\JY]hw_fuhySNPqczf}]xrJi_uTJ\\jX^ow|u]sRJcqd|oWD@as>>VhU\\|sq``av]FxzuRH[SdEo|{u\\__RKHHLejL>_c:9\\ZaYcgioiWNG>??S]]e_C4C@-,.1=6-)-5612462/,+++,-.-+189=;+#094-.1.*)(&&%&%%##''%')*0+')**+2/+13.**,3.)(&())''((('&'))(&()%\"\" \u001f\u001f#$%(+&*,//-/3-,100:AC4D<3013@LDX@1;?E<30BC5:3DP@LD35;698./30:7JJ+,,)-,,.5A6':>6,+./-.,;C:08?8@:;>19JC7=A6:=::2217233.--148<>HSE4@GCID-HLTV[CS\\a^XnoZS\\gMB[]QFacXU[YPEPgT;BePCDCDcSCNUIB<LW@Q^UH>?=8<F=9ABA@?>=>=<<;<>?@BCDD>>HCDHGFHOG;;HUWOLX\\Z]afhcYMLW\\XPOVPJWjhcjliquib]mlMRjx`KC79:58@@8>=?><89;:76<DC99?GI?34>B?A@A>;;=AJMMIFC@=BJIKE=<=?CE=5.258/-6=<655.)**))/49;8AKQqmot][ga_]Wi{zwnoxjihcekb]]ad_UYdcWKKcmPboscYTLTV[hcGLkjpod\\_p|v^Nip;6TJOci]JL?--;;149;::7::755:@>25EHDFHM_a>0.-6?46;AA4121.>R;099=;<;6.+),..+-..,+.2/FpY5<<>?>AWuT.=B14KM1$1<8/9MSTVWSOPW^XPQag:(/5>CGVfZ?RvQ==;98<A>;:876/298:?:9;;3.38=8337964467665540,.35201322102@E7;?999>IWU<24224466887998888668879=CGFFIF<<EMPRU[]SEEORQQQPRUUTTVXZYY[\\ZVW^dhhikmlljlmlmx~R568565666666666666666666666666666666668;4?ozvyxvtuxxxxyy{~~|zvtsttwwyzzyy{}}xutuvx{|}}z}~~{yyywtuussqmih===>?==<=>@ABBBDCAADFIKLPQQQPRVXWWVWYUF:;<99::;;::9:99999999989>=:>AC?=C>:AJMBCHEA@A<AWgaQHUTF@FIFGACGF<<GGCEEEBC^wr[HJNF=@UVFKPHDHOOORVXVRSVXYX\\hqkeXVYOHUhj[QNNE?@CHJPOKINSQMIEBEHJKMNNROB?ADN[a[U\\]Y`VMOMLVYXZPO^`___chkj`[hhaX[ilgje^adfq{urqqqmeb`\\XWdaQTWQM_nd_`^kmoyvumvsbmvsnr|}zsv|{ngikgf``cjmYPJRQPOKJDMWV[USSOQ]XT[ZZc^TQQY_VQKW_QUWZVW^`b]_iomg_e`Xdc_Z`_`_ZZ[Y`miggacwsle^dc_dkmg^Z]_YVTSeZ_jXZ_^VW_WZMKVHHGLP:7ILDNWYa[Yb`_^`ac\\[]``]_Y][YYYYZ\\ZZ[\\UUVU__^^_a_]ZVVWXSNW^XUUWVTXYXXY\\_]]`cgimlhk~|ȯøºʾı¾˽ǿ½}ʲ¨wkp}yʣuҴ̴̢κƾѪ·ǬƟz|edzmUR[Kxrewj]KUu`\\snjuhGMjzn]\\YZq|]hrkreXXYivvn\\kwvp^IXMdnX[mfwiqSMOsarm{^ubQb\\rz_Tk[O^oz}whyOD]qa~XAA_sv?GbbJPv|dby_l{]DyoGYZaPXmvpyiXD;@GEZiF4SjLE_`Tdlqkp{nWPL@@Vgjpoh[?6E9.,*190+-450-,**)()((*)-.($),-8<-#*4510/,(&'&&%%%#$&'&()+0+'(((,0,.64.**01,'''(*)'((()(&(**)&('&\"\" \u001e!#$%('%)/54..0(,412;E=5K@5236AL880.6?C824>LC-(02EA>0/;>;9/04AD7JJ+-.(.,-.2>/$8?4)+..-(4@A8.:;8=9@:3JH6:H?5:981*0;821.-1.27:=ALV<1HHFK<2MGRV[?V\\bZYsmWOdlEH[[THlgXTZWHHab=@PhO?C>NjOHWSC==OVLX[PILH<<@J>=>@A@>==>=<;:::=?ACDC>BGBCGDFMH97EQULEOZYW]bilcWT\\ZSKMQSQYhi_`hfgnmijnomZNM\\rZCGA8669A?9A>?>?::=:57;CD<=EKLA5:GD=>??=;<>=DB>@BELMHJKIFAAH=36>7-399326:=@D>/'+3/(-8CB:=>Cs|hokWbj]YXZdighhinrtmd_hncZ\\be[SW]VLFGNGKZekMUNJNQmpdlqkb^W`z{hOUqsT;N_U_mqldM/,??2/0388:@=6347?H>48=@GUfjJ/.20<B68<HG4111.BE'-6AIGKMLA8-)./37,.*,.11BWF8=@=<E?39LI3<7-4I@+,8BA3/CVUVTQSW_\\SRV`Z72@?;;@FB=8VX@B=:8?EA<::;:44989<:;:86303:4+-/002468511110/15970.15513875897678=HTU@/1235578888888888677779>ADDEHC89DLNQUZ[OCCKPOMMORUTTVVXZ[[]^\\XY]_bgklnnkkmoonw]75756656665666665555555566566666776668967e~}ywxxwuwyyxxxy{||zxussttwxyzzz|}zutrsv{|{}}z|}yz}~{yxwusssrpnlii?>?A@>>@@@AABDDEEBAEHIKMORRPOQVVWWUTYWH;9<:::9::::999999998789;<;9>BGHBA?EILQKKNGA<DJ>H`dTY`E8?KLGFDEJQG?BACCDD@HXWLBCFHJFM_\\MIIGCGNNORTUSPSOO\\a\\]hh`VLOOYbfldXOME@BLTNLKIGHOROHEGLHIIKNPTPJBDKOU\\YX\\YNHAHQOLLRXVOM\\^\\_aefjjda``_[Zgupg`^cg`dwtrqn_gkghd\\l~lUNUTHQdaU`z}x}oylehifc`gkemmtvmpuunpwtjiiiopkbVNNRRRRSSKLZVVWSYYVY`]b`^b[TVWZb_WIUaS[YY[X^cfdhknje[]_T`\\ZVVY`aU]caekhhhdbqole^b_]_gjbZQYYQLRQ_Sc\\P^\\\\QQYU_OIUUJDEE6@MKJRX]e]Z`\\Z[`]c[X[`^Z_U[Z\\\\^UQWVX[[QPUV^_``_a_^^XXXWUTX^WUVXWRSZ]UTZ_``bdgimlhiϩȽſù̻ùϿǵĹuαkjf}Ҿ³ΞتӽȭӹΡçzwz}Zhvq{]KS^\\q~l]tW>hvkbZT`|taN_|ea__]_pvQrq`hbUQTs{hpd`vjqWINGgcMh`fx\\\\|uVOtZkux\\hWQZYereXqQL^lpyz}pSI^wZtT?A[uiLTfYCDoTcik}_JrcA^SWI]`otw]@:9BFOaI0DZPLYYKXqulnxlTPPHBEEX^NQ^P>KJ?8*&282,122.%\"##$&&&')*+))*'%*8?1%'.32/,*()'&%%&%&'''((,1+'(((,,.363.++1.*((()**())**('++++***'$$!\"$%&%&$%*.21,++&*227=:24NI:39?EI+%1/5:<02//<-\"29+674'&44.22016A7@I1/2*.-2/,;.&9>3,,,,,0>=<6079;7<F8BO=6EF829:6(,;A91/)25-1:=?EOQ68SFHE3;JEPWV?WYbW]plTMsd<NZWWOpeWTTMF\\hO2M]eG;A@]gRV\\NA<>QUUTVLQWK=AERHB?@B@<<==;:9987=?@AAB@CBADDCHE98DPNIAHUXQU\\afaWV]YNGKPPPZggaaa]]cd`dklmi\\TOQZPEIHC?=>A?=CC?@A;9::9:8?DEDFFE?>CID>===;:;=>@A@?@EMKGIIEFDHK909B:/3::;;:89@ID2&,>:-0=FHEE?Etmae_[nlUPQQRSZdd_irsnSUnp_W[ad[RVXSNKICBNSLW_PWQHIG]y~ztsi^_W^oo`9Hnxa@:YZU]aekV1-@A3/29<:?GB7574=QR9/2.4JdP.#1>=EB;><DH6-225IS8&/;28SdfYK?1/6@@1.(-8:3?HC>8;>8@J9)+.31,+:G7*.<F@..FSZWUVXWUORT\\_F.1EJ=:?A960HyU:>>==FLG=99:;99858<8<<;:99972()/1,,1793,-..0348=;5/.670.5@ED:2577;EH=30113568998888877775667<@CCEGHC89CIMRUVULDDHLLLNQSTSSVWWY[\\^a`^\\ZZ^flmllkkmopou|n=486556666666666555555566666666677667;61Q}{}}|xwxwxyz{{zzzz{{{{xwwywtxzzz{}~~{z{~~|ysrw||z{|zwv}~~{ywsssrqomjjji@@ACB@>?@BCCCFGGGDCEHIJKNTUQNQVVVWUUXVH;9<;::99:::9899999988777858BB@D@==HSRTRPK@8<KVPVgcNOR:7P[MAEEBDWUJG@A>?AA@=BA@@=CLNTYJCDEEDGLMQTTUXYXQMRYTR]^fnjkZ\\haYSQMKHJMONLIGGFIPSPJIKKGHTYOQVRMFGS^[TW]ZTSMGKNLMJHQRMIPVX]copkjjh]XVVU^qsfcimf^`egijjdR^pkdpqv}`NQQIISWKciWYlfb[W]b`_cdlyuvvfmrojisumknpv}|lVQPQRQOOPMMK^[OVQW[ZX[\\cb]^TRX[[^^]KRdSZWY^X\\`ddghifd[Y]S[VZVRZdbWbgcegcfkcbmnlbY`b^[aa\\WLUQMIPQWQePO`ZYOMRQ_OGNZKB@@9HMILTXae\\WZXVX`YdZTY`[W_TXX\\afZPTTU[YQTWW]_ca_a__b[YZUWXY]VVWYZWX\\aXSYaehhiihnkfh˽Żÿξҫ°ѫ±wdkqČŝθٸºʸŬϹӮũlrk|\\vlrySPOahk\\`oM[sVMonUur_czUVegf\\dvoeWsh`omTC\\xhlp`mo_wVLGPhRPrsRl{hZmXiQwQhxtV^WKSTZogYnJPWrp~kf`VczRpP<B[u_Y\\fRE=myOf|`cPwhTGRHNPSVoodB?<??>ZN5=[PGVYUR]fjr{hSQRME=34519NP:6IKD3(+7:,'-1,'$#!\"\"%%%(((,-++&#$2;4)%+0/--.,'%$&')()()(&.3*'('(**.551.,-/,*)))*++)**,,)).-,-.-,(%$\"\"&((&%%&,,-+*()&)248=./3KG;5DCHY;278732//..-%&5E:'</\"\")$%0+#.+771I419,//91(7.)9;21,*,1CC:?5048=7DF=MF69F<1289-)8DD5-'(:2,29=?HNJ2LUGH=2DGFKZMDVWaT`ijPQT9SUWYWp`TSKANj_@=Ya_AEELj__]YLD9AUVYJOL[YG>GK^RCAD>@9;C?988889<>>>?@CCACCBDC:9DOL@;?NTPOW[][VY]]RMKIHISafa`b_[\\YTY`cjpk^UPMPQNMKIGFFFFDJMHBE=99:<95:CEGHB>?BEHDCFC@<7:?ECIPMFGKKLLFCEKNB53>A:1386;=;759@@2(3BA?ADGGFJBFh[QQU^kcTRRQPT]bZZeZ[o\\TkhWTZ^bZQ\\jfVMPUPUYOEPYVPOMNZkpx|wh[`^_`h\\,:YkRC9GPNMHKcY1.HI5/6?ABCEB86:9>QUE<3)AL=,+4BNKFBHUKDGG=9FRPe`,(20B_bRA5DI:<E>20(+=E9AQQM93;68CD6+(/)-19@1(,9?6*0>CQVUUMGBNWT[gH,)2CD;7423.@fH4::=BFLH;555648837;7=@A@@B@9734=C;/07;4/...0249>>93010($0CMK=7766563-.1013679::8888777775667<BCCDIIB;;@HORPQNJDCJLJMSVURRTVWWY[\\^acb^XY^ekmmmmmnprqu~|H356665666666666554555566666666777758<0Btz{zzyxxxw{~{z}}|{|~|xxzsu{|{}}|yyxwx|}|~|{||~~|{zysrsrommkijjiBBABDB>=ADCCDGKKJGDEHIJLOVXSOPTVWWUUWWJ:9::::99::9998899999777648CPMDILC<@FNZULEFFFU^]][YL>DD=MYXNE@=?PUQOE>9?DB?>GW[C:FIJMI>@JCAIHJNQPNNRX][[^XPQTZhmngTU_UIGIJMROJMIKNMMOORTRMMNJFKacOPYOFGHN[^VVXMMaj\\OLOXWLHKHACKU_fgll^[b\\QV^\\]hkiikrk`bimqrpnxxg^gtqcSPUSV`Y]mn}mSdccca]XX]ZVaqpdepiaqvjksxwjinusloVSRVYUEFIEJP\\[VWQTWYYWW^]XYQSXZZZYZQN`SSUWYRYY]`bbb``^Z[VZTc`Vaid^ji^de`foddpsg[T]ec\\YWWSHQONMNPQT\\NP\\WUTRQPUPDIXJDHG?EJFLTX_c\\WXWVYb[eYT]b\\Z]VTTZ`ebX[ZW^\\V[]X\\]_^_a][f^bbY]^\\aYZ\\```cdd\\X[chlmnkjpompƨyŻ¿Ыÿ|ği}y͔ʶĿƶӢźʫʮӺ·ĭhrb~cyrd{wZOX]^qznTglfqBJrb[tqbej|RMbmpp`\\kofg_`]qvM?mmfgfze\\|qWKETYHTfxpZl{UZxQ]uZywQkymSa]FMMRvjZbFQV~r}vtih_cxQvM9B^nYd`jLN@ouMjln_Sh`IKBGROFYs_P9P<@>GZEEU^a\\WY^[`goyu`TQOLIFA60//>D6->SKA0)2<5+**))'%\"  ##$&'&&./.*%!#/85+',//.0.(&%'),,*)*)(15,**(**+/4530./,*-,,+,++))*,,,,--220/-)&%$#)*)&&)(,-*(((+),1448-57>>4<PAL`H>33..31352)&,9JM-47(\"&#$+#\u001f629<-K>/9.5/:3*2/+:=01-+0;M=8A1.4<A<F;5H=2;>2.393*39BF0,\"0?-/56;DKKB5[QKF:9GHEGYHJNXaUcbgKYF9WS^[^n]KPC<\\iX9R[cUASD\\i_c[TP<5HVZPFHR[R>=HRaOCI@7D7AJC<<::;:<AA=>BEFFEBDB<>GLH>69DMMLSUTTW_cbXNGDDGPWYYZ\\^a\\TSY^ahusi_YTMOMOOMLKLNQMKMSMHEC??<;:;=@=CKFADEHJFJWQFA<>JOGLYWLKMTb[HFMSJ737?:711614666434755DGCHJIIIGI?@SE?DNR[\\\\[WSNQZYTXP1<hqcaYLS[]aWSel[PQYZS[e\\NJNQONKITd^anp]MS[bdpZ-3<N=BCDJJLBB]]6/MI407<@CCA?9367<NPII84ZS'/EMORK=3?^\\PORH:Mh[gU).2C]XQTDDI8BD;:5+/6:5@MQ[N605==A<11-*0/:A3)-02024,-AWVK7-=S\\TMba?3'7A94022/7I;3457?DF?524:936;;;::?==?=<:9:@AADG?227631/...28<;763,'(0:DJHA=<9:;><;50123668998888877776568:>AAEJIA<?ELPNMPNGACJLILQWVQRTUWYY[\\^aca^]]_eimnpponprqt[4476566665666665545555566677677777583=l|zyxxxwxxy}{{{}~|spw{{|yusrruy~~}}|~}}~|{{yxvruvroqqpponoCB??EC=?DFCDEHLMLJFEHIKLOTWTQPQTXXUSWYL<6889:9;<<<;<<<;;;;::;<@GIBRUG@@BB;5@RTG<O]X]ZPMKQODLXC8LcaPLLDDFILD>:CGABGHS`NCIDFPJ>=HIDGDFMPOLNRUXY\\[OPPFGGN\\XOLNLKLIJZbNKUNKSWVTTUSOKLMMJOaaOTWFAFFEJRURI@KhsgSINXZSHED?@FPbgc`]\\^aZXY]`afje_eom_`svywrpxtythhgeheVXgji^RU`eguMamfc`^XWYXXhul]\\]X]lmhu~tf`d^gwdcg]RTVaZGJGKN[YV\\VSTUVVXXWVUWMSZWXWWUTKWRNOUSLUTW[`_^^^^ZWWVSkk\\ghbdni]de^eqfhrscYQZde\\SSUNFOQNSJOPXQSOWRTaYYXPUDOVIJOIB@CHSUUZ\\ZX\\ZS]e]h^[dda^^ZWY`ccd`a^[`a^_^VYZ[[]`XVhbhldhhehdcehgdimi`]`dhjknnkqu˶ÁľƷðһù˶²õʭsxo{u֟ѬƿҷڵʾЪ̸¸˘pwfcqexpcO_^`klmZ{olsJ;`pRUZWKNZor`WkqloVNchlo[OU{oZKh\\}Taw~U^x`UPLQJDSfs}wba{qDXxPQ}btxUtwbQedECEXf\\VIPnlwrksj\\`vY}F8AbeWj_mGbKtztLgePRYYCB:QOFBekTIAV@DW\\ZUT[wiVV]^bnxx~ubWSPNLKKGB?:679;AJJE::01;620'''&%#!\"\"\"$&'&#'/-+*(%&.340-/211/,))*+.0-,.+(2800.,-+-1253210*+110//,)*---.00.24,-2/*)'&(+)'%'((,-*'(*,-..101.:415/FS:?>A;0,(.41880+.35AV80E7#--#*'\"7:0?1HG44.>576002,:=.3/+5EE7;5-38BB@?-1C71:2+-462268G=0/&?;,326?HGF:A[SKD<>ETEE[FMGYaU_^bFay@>YQb_eiZFJ<Ej\\PB`X\\MN[Bje^XXVJ4:J[WJFHTYJ:?LZ[HIO4DF=HJFFB=@?<?GD??DGHFCDEC@HLF:57>HJINQNOT\\`fcM@<?ELLJNTYaecYV^a_cnvmhfd]RLIGJIGFHQPGIIPPJDGGHDDEFFFCEMNLMNOMINVTQMFEQSPJKPOMMZmfTTYVC16;=51//1-.023247649IOKGBDKMH@79F56AFFLSTSONOW]XVS?)+LmkbSHSZ_^TZh\\LVhh\\Ycd^YPQPPIHJS_bSJPC9>EYjeF-369;>ADGINIF`b=2N?-1526>A@>8110,@Y\\N;?L>;PYOGHE=./INLKHA:D_af}4'08KMd}vaJ:>93>?5=9.3B?B\\`A.4A@<9-0./+(@P:1/0+.99('FbW:'*BX]TGPgaE:58754430143/:86<B=503:E?<<>B?;@D@<=>=;<=DKD7;A4,/230.,,,.498751/.2:?ACD@>>>>@HQR@00235788899888777665578:=@FJG?=DNRPNPSNC@FJIIIKPRQRSUWYY[]_aa_`eeacimoqsqnqssvp<475566666666665545555555577677888846b~|{{{{{yxx|~||zxzyvtvyyurrpqx}~zuy}}~{{}}~{{z{yxwutwwuvxxwvttt@@>AFC>@FGDDFHLLLKGEFIKLNRUURNPUXXUTW[Q>678:;;>ACDCBCD@@ABBCCCGZ^HISIAA@@;8AEB=;L\\ZWLBIRRMOWYHE\\_UVZUICBCFC@>DEB@A><AEEGGEE@BBCJIIFENTOHHKO[\\QPZbXLHIJMOPMKKJIFN]]HM\\RMRUTRROLKKKMPSRXZOXVCJJFIFKPLF?C_j]TPPWe]GGH@EIJTa`[^`de_`a`\\[ehbbkld\\\\bcmrrkhd~vuc\\\\bg[YgbYWW_fgcnnaii_ab_[_fedlpkibXYaegky|qa^f^Za[eWZXXZb]T[RUR\\WU]PRTTTRWZSRTWJOYWYVUSRINMNIQMIPOQT]]__^ZSQTOXni[e^\\emg^fh`gqiinpd\\OXbb\\SSSNILQIVHQRYMVMRR_iacc[\\K[WRUMAGBCR^WSUUXX]ZO`e`jaaide`a__aikhfhe_`eggg^VY[ZZ\\_SThfkrnoolnmlkjicgnkcacefghloqv̽ƢĭåǵüɶŒìȷsqv~ˣgļڴ}۷ɶįͻѸͺ˧zzpcmX~mb[YlbgvfZdNVEF^Z\\R]NLVnyxpUpvd\\GOfhqpSJ[twqpNUZLZspJ_`\\`YLJDCQl}noZi{cH[oVPeji{Z~pTSdeG<>j]`QGYvkt\\lyjP]vdkB9@e^Uk[oLpPsitMgm?SUW>9AQCAMf`HBFb@\\ibZZ_ssVT_ejt{sdYUTQONNMKIGB>:8FQ\\V=37429/-8+)''&%%$#$$%&&''*++,+)'(-2411562/.,,-/120040)182330.+-1212353,-34210-*-12013238/(/4/,+)*.-)'&&&(--+)*,--/1110/8//5-EN1?J<680.11:B926:55:TN>@=+49()*++<(@5@I=2,@>;:4/718>,73,7D85:)2<@A=>5/BD520,,14557:E<)559F023/:EEAA9L^PEEA>KY>O^FLC\\\\UW^^Det=GXPhcgh[KA<]lUL[XUXMbSVe_RWZZ>8AN^RGGJRRA:FV]OFNG=JHIGGROFEGB=AJG@?BCC@AEFEFG@626;AGEGMJIOSX_aRA?AFONGKX_bhia\\abZZafifjng[SLHBCE@=@JH>AAKLEBEHMIJKLLMQQQSRPQSQOPPPQTNGJLTH7>LMLZkja^]T<-7<=0*01..///04;DC808FOKA@IOI86;9(/>DBEIB=DNXcbWXT75DOinf\\QU[_YR\\bXT^jlc_d_[gzwZOLJP[dqr\\E55:?QbL605@AB>?EJMUUVcfH=P7'/0+09>@=:663%2gcLKDHRY\\XJAKULBBCA>;87:YfgZ%+<<3MqrP:3+1CA7A=-3C?@UcM7:;89<3)./13BJ@721+.61%)GaL0)+;U[PIAUjMJ6046885214;?I>5674349@F@BC@A?;?FGCBDGGB>=KQB772+,/30.,,,.5::934554235:@@>?AA>BNSA00225788899888777664578:>BEEC??GRTOOTXPAAIJIJKJJNRRSUWWXZ]_bcacgga`glnrvvsswvyN56556667766666555455555665776788985V}{{||||{wwy|}}}}~~}yzzzzwuvvuuutv{|zwvx{~yy{}|yux{{zyyxxwwyyyz{zxxwut>>?CFC>?EGDDFJLLLJHGGHKLNRUVSNPVXWUTUZUE<<=@BCEHKNNJKKGGHIHIKJFSWJEJHDA=>=@B=;;CJQULB?GSPMUTKM\\_LIRRHHIEBCCAABB?><=;7>DCDA@CEAAKKPWRQTKMVU[hW@GT^^\\WWUKLUTKIHCCKNGAT^PKEBECCDEJNORSVRPWPU]SXSKKJLJFGFBM]Z\\aZjyY7G^OELKLSVX[^d]U_c[\\becbfkcXX\\VS_lonkbxq`j\\WZY\\[X^\\PNe~zniegpriceggituniklnoia`bdku{rnf`bd]WY_TX\\^^_^ch`_UZVW^PQRRSQQWQNNVSLTY[[PQOIHBOINGELJGM[_`\\[VMMSQ`i^Y\\WYcie^fkbisjknpgfRXb_ZYYUSMJLGTDUTURTNRXlgcejndScZ_^SFRLO[`WSUUWX_\\Pacbid`fbf`gihhpsijoidfklji_W][ZZ]aVXhfjqpllmkkkjjiddkjecdbcdgknu~Ƹóá͵´εϛźɻv|zq|q͑iؚ[̞{ÝĹϸϲɪҹɨĺǻ~vjmU~l`b^tejuZlNNPGSamt^RLhrtzc_u_KOdgepiNSdpxrIQdW\\obKXNozTGIBCR`mPhtoaPcaI`u[vbhLVb_G:<zw_dODgulssYv}jE[udzeF8?cUQhaj]pUfcpNj9]ZU86LF;LW^UEC_eGh_YVeoid_drwy{}vka][YWSQPPOMMHF@;<=>UjX=-/22'%21*(&&%'%#$%%%%'+*++,--+*-0123551.,*+-020//551252120,),10..0483,3420//./24423664-2841-+,.10+)(&'*-,,*,/--1756653048.;@0[T9=C;<;=JMBBF9/:;GUQ;;43@6'((\u001f7,8:8@@1+<BB?30676;+;6-38366-6=D:64.?N:44/+-6961<H; ,:;I;2911;D==:;W`F@FF>RX:XdGPF[]SS]ZEdn>PUPme[j[S:BscQTfOU[ZeVdZQL[ZT=>DW\\GHJONE<CQWUGGQGDHKKBNZMLMID>@IGA??==<@FDFFB9246<BA?DFEHKMS\\WGGFLW_VRX]]^dheb`YQYdgfghjbYSNE@>C;79@?:9;IH;=?EGDJJJINWWRRQONQRRQOMMMMJEERK83?GM]iie]WM5)3>A1)9<1872-17>GME4+0?MMGHLJ<;C:-3AFAGM=5DUae\\TYVHK_innkf[Y_`TMTUNQ]dliaa``jiNLOR`lo{xK26;7?N?.159=DMPKKPUZaigQKO9-10-29<?<=>@@/4fy]\\XWWXZVD;M]ad^[^TH?:8d8*B=8X[;3-(5F@:AC53ANPWbQ:HI96J[;*4@HF?L<3/+,/))1>A2-,.0KXOF>BO@;6836;;70?]PA@9420379=?<9>?=>=:=BHIILPOI@5>PN;1/-,040,,-/16:;72311.**/5<@A?AHDCIG6/1125689999888777663478;?BDC>;@IOQPQTVPCCHJIIJJILPQSUWWXZ]_bedeec^_ejotxyyyyww}a96767667766655554445556667777889:4Gzwy{{yxywtwwyyyz|}}|}}|yyzywwyxvuuvxxwwwvwxwtuyyx|~{xz|~~~~||~~}}}}|{}}~{wy|zyyyyz{|}}{zzyxxvts@?@BCB>=BCDFHJLKKKKJHIJJMRUVSOOTXXVSTYWLEDEHJJKKNRSMKLKKJHFGILLNMD<@HLA?E@<9=GC?ET`P@AIPPVVMDT\\HKNA=;>DCA??@ABA=<;AB?HJDC@?DD@EH@K`\\SRNW_\\dcNIMGQY[_WJHGNVMHIJIFEBFY^TLA?BCDBEJMRXXSPSTON[d^VPKJOMFGHFL^eghjtpV?@Z_RQQRRPSXZ[SPYWQZ`]\\bgh_YXX_a_bklhhi_SV[[\\_dib^f`S`{~dQ]mliifdcfv{rdkpvxrnkdbgnwuqmg``a][YYWWY[_[Xbkde[XVW]WUROXTNTPLLQUQPUYZQMMJC;EIMDAHE@GX^XSVPKOSZadVTXUW_e`]fkgltjlpqlnXWb^Y[]WWPFHIPC\\VSXRPU`pa`aioa\\^[_`^XXV[^\\WUVVVV_^Sbaehi`a_e_hhgkqplklhghhgif_[^]\\\\]aa`gffknggieefffgddghfee^_dihpͿƿѿ̸ūһˮĭƲº{oyx̔޿cչɵ̦ӮҪӽȸwqskXq_bflfs_]gXHQ@SdiriQSi{o~[rkoelXDj]^p]Ghk~iIWhaWiaOMVwDTO;DOU{tNtcfE`WJju[rjdLQ]YE9BkdbLGltgule~gCXq`q|dK5@^JPif[rj\\^glQkpCg]S6?Q9<`VdQW`tL\\hZZ_pc_npq}xspplaZ\\]\\[YVTSQQQOLKA:IF@LYW?-.,(%'02-*('&&&\"\"$&&'(+,-,-/1/-///0343.*)'(+144/,17;961//0*&(.0+'*/86,220.-0211452483.1;:42-+0132++***,----/1,24A7.=925=<15=:J<AADOCDHCGCLG.0AA@NTC;0*=A+&$#/2.>5:>/+8AAA521757,<6-/.46456<@10/4LG19;0)3><:9F?#)=8AE2@9.6;;6=2BcZ==HL=XV:_jJRIX`RP]XEbfA[RQpdUk\\]7Q{UOc^KY]ac[^QBS_UID@J_LBJLMHA?MSPLKGWHEKOGDXVIQOMFA@IIC?@=<=BFBFDDA=85=@:<CCBCHKNTSRTQZ_XPQTTUYafe`]SSfphabgefd_XJD8<845::938FA9==D@=FEDDIRTNNRPLOQPPNMLKJMKINQI:;CQ_c`]UQJ9.5DH;0FH:FC=48;;@HLH<01DRNIJHDCFCCFJHDHNFCOY]WQW[SZ`^dlnmi_]d`OHI>2Ifmpnd^ae`iyfROVYclYV]@8;<8;AD70235E\\bSKOPUdnbRLI@>8/049;?;>CFE38c{n_[OIGA727>ITcaULERWKC[\\0CGOlrJ0.++18=EGF@:AU]^aS;L^J=[f1@IFPGVL5,,,,-:G:(&),,+BTTH6.10/:NB3<?9;nP441388899:743778<<9<?CGINRQKC76=:0-..-03/++-4:9;;500-+/3469<AFDEOPHF<00112568::99887776653589<?ABB95?IMNOQTTMGGIIHFFHKMNPSUWYZ\\]_bfgea]Z^bgmtwy|}zvv}~}N679766776666775444456665777788968_|xwxvtrqoqsuutuuutvxxwtssrrrqrtsqrtuuuuuuuvvtttvvux|}{yyyxxz{{|||zyy{||~~~~|}}}{||zyxyz|~~~}ywxxyustA@ABB@>>@ABFHJLLKKLKIHHHLPTVTOOTXXWUTXXPJKKJJJKKJNPHDILJFACJLJJKHMPA;CHWM668=DFFJ[eR?FVUOTQIJ[YHYR?DE<;?AA=<??><;>FIGC@AA?@CB@AC@ESUOT`g^ZcYHHHFNMHHC@?CNQKHKOD>HLS]]VI@BFIJHGGINX]ZVUSRQT\\YRPNKKKIHHGOZckoqrk]NFGT`]WWXUTUVWUUVVWXXV_ijnmk_Ufoiqvga^[Zbmnkmjc^WU]hfWZknr|uaZ`ullgxzohhfcehlmsnkga][[YXTTTW[WSZl`faXWUYZZYUY[XTPLNLKRQUURQOLLC=;IMF?E?@BVVPOSLKST`YhVSYNV]_Z]dkiksihmlpo]V][Y\\^Y]P?FLIH^TR\\QRXeg[^]ifV`TYX^aaYV][XVWWRUX_^Vaafef^\\[^\\d`_dnjeeecfhbaeca__^^]^aedeffbkcae^`bcdecdeegec\\]badwϷζпƻ̹¬÷μͤ{ɷ·xv|twyԫՅâЧԽͤ׸ε˱ʯ̽Ű;uwjmd{_`_djkTgZKILHa`RVQG^^Yg`MldouyoXDRWbaGN{zueFZn\\PmkJDdaDkS6EL]g^|Z[y^YcNUgizhjelKFZ[F7Kyd`\\CKnxkew{is|dEWiZit^S1@V>Uj]T[c`neQp}|dPjbR8MJ/Uahf^frYImiZbf`U_qvuoec_\\ZXZ\\\\[ZYYWUTRQPMJC:F[cL=GJD;,#%+21/-,+*)*)'&((()+,-.//01/011/132-)))),2893-.49;91,,-)$$*-+&&,31-/1/,+.54113355/-16620-+2332,+-.-,-./001+7;F/&A>5>GB42@6+@E<II9?C5;@B40<GH>@GE<0&0D=.)&*4*@559.'3=BA343732.60./-22456<7,.2@H>>C>/+?I=?D?(*CB7D6:D4-876582MeJ<<IQ?_N6hlMUKYaPM\\SGbcE`RUoXWk]`=gnD_fOM]_beVSBB`^KMIAUYEKMQ=GLJMJMSOUSBIOQFO[POURPGD@IID@B?;>EF?EFGHF=8997=DC>@KKLSW``\\YODGLRVWZ]^^_[Yboi_]bcbmqd]YJ9332477987C:6=<C<>@AABDIOJIOMHJOLKMOOLJLOQPQROJIR\\ZTRQQKC?AFJC>LMDIJD@>>?AGKPOF@EOPMMLJHHNQUUOKIIMRUWNEIY[LQc]Zipmjd_^VKLE++\\|zsnfcccaWSUUW]chkZH?<;=BF?<DE@=AJNXbc[TRVgoV==AEJ=/047;<=CDA:,6_r{pRD??=;:>=9:CKQV>3Y\\NFIw|EDKLZaXF2(&(*'0@IJKKKOV\\_UBI_YHWPIXE@JbU3)***3EH<7=<83.<NXWA-+018Xb7@@?fS?;9:?@=;;854445;><;<>>AGOUUQJ>750,-.,*+/-,+.;FA;9500008?>88;>HQLNYM=2.1013677998877677554568;>@@CE96BJLLLPTRKJMJFFDCGKMMOSTV[]]\\^aef`][Y^dejqsty}|xv{}m<3757788766777665455655667778;94Hlrputtspmjjnossrqpprssqooonmnnmnrrpnppoooqqsuvusqrqrwywwwwwvvxxzzzyy{{}|}~|{|~}}{yzyvyzz}}|zyy{}~}|{{}{ywwAAABB?<=@@AEHJMMLLLKIHFHLORVTPORUWVTTXXOHIIFEHIFDKLDDJLJHCEMPKIJAO[E?FM]R539;;<=K_]F=JTQKGJJLYXUWKBEE><?@A=:=>>><HTLEA?><>ABA@>@EJPQNUc_NNYSJCAIMC=?<;BKLLIIMMDEQTX]ZPC=?DGGGGIKNS[^YTRUVNJPQNNMIHIGGIMPXemool`UWWTX[XVVTTUUVYTRSUX[^f_Yinke`gpvijodZ^gnice`RIKUYYaghp~~uaYegVfns{vb]bjjfabikoikh`]]YWXSQQSWSNSd_e_ZYTRTZc]Y]a\\VMKPFGONHMKIFIF@?IKM>?@CEWTURXOLZT][g_]XHP]^Z_dgegrgcfgoraUVUV[_Z`O;HLEOYQU`QR[`_Y\\[haSVLRWZ[^WQYWTWZ[TV[]\\\\]^b`_\\XWZX`^[_jhbacbbg`\\bacca```acdcdghagd]aa_^]_`add_edb_]bljnɼǽɮѶ{ԺϴͣĶɧùưľũ{}~uyrjyǴɟyzڛȭ׽³κǸ͵̷upx~}]ZZXabca`XN^fqi\\UR_mJIrpK[_er|}bA@xlf_DEpq_m[?\\{paTsk?Aq}UPxT5FVoigiP`l^qhZ`WT~m`[vtPAV_M<SkS[X7Rplbi{ufoydITcXahW^0?L8`aQ\\}Shgp]Ppvms][jgT=W4=fYv_\\ipN`mX[np[_uzj\\WXVTTVYZ[ZYYYZZVRPOKGF=:RfVBITSM6&(*//-,+,,*,.-++)())+-./.-///111122.+++*,1871,*,/361*))&#!$)+'$)-+-+,+*(&251-.231,,,131/-+3333-+.0/,./001308AA'(CD;DJH;8<32@?>F<444:;B<5?=EPA8>:;@3+?F62/'1-=6100*-8A@65441011)&))-023862//3BAERK8*9LD@DB.'<E<>>9@9-.56443;WX8@:LYEaH4qjPYLWdMGYMJi^JeS[hMZl\\_RvTAn[GUZ[mXOD6NlPPVFG]NZRTA=RWTJLYXS]BGSRLMUWPURVSHGAIHGAC?<?GD=FFGGEA=507ADA>ELNNQ]haUF;CRY\\WPQUX]__bfbYUW[amtlad\\IC92//46;:8>64<>E?DBCCBAELEELHAELJGKPPLGLSTQOQUVSRSQOOOOMJLKIIHFNLDEFEDAFGHNLLPROMPPOONLKOSRSTROMKOUQMF?GTUHAP\\cospmh`XMGLC2N|xjeeecb[POV]ckpnh[KE=<FF:<OZYPKXQEN^_XTVclO027=C<0-1554;HFCEFPaluc>69<@CFHC=:66EOARhffedtxMCIKW_\\SH<4,&'.<IRY]\\WQSZTDJZZQSxyQT9*FiP.6,,*1@JOX^a_XLMYRSO6/313az>;=DSFIIFDCBA>62577989;=?>89AKVYWNA:751-++-/0.+,/;DB:75..359:82228GTOMWH42/0013666888777766543568>AACIF:<HKJJLQURHHMIDEDAFKMNQTTV\\^^]]_cb]ZZ[`eeflopw}|{y{}R416888988:;:9977775466667668;65Ysklrrrrnjehjjlnmmmprromllkjjkklnppommkmmmmnppqrqrqpsusrsuvvvwvvwxxvwzz{{|}|||{{{yyy{~~|}}|z{~{urtvy}~|{{z|}~}zAAAAB=9;>?@CFJMMLLKKIHFFKORTTROOSXURTXXNCBEDCFHEDKLGHNOMLLKIDGHC>CJGLMCJJ:5:CB@7=]aB8@CIHBQUOV[^YOGEC=;>A?>EHGA=EUREC@CEAAA@@?=?GRXVU\\[QMVeeRDJOONIB=>HLECFINRTXYZXQKIF>@FFEEHNOLNTUQOOPPKHLNNOQQNJHIJJJLNRZacc^Z^]TPRSSRPQTX[YYYYY^^b^Z`^]`dgjoxybkqf`hpsnmyoOCHPX[_dgm~x][Y[_^TZimrsbbftrfccccecca\\ZXUSTRPNPQSMK^\\`[\\^XRSSY[YY^`\\REHOCCBHMNG==DDAGDKA?HKQ^Ya]b[U`RW^ead\\LM]``bccafoedebhqfYTSOU]W^Q>PPGWUT[aQT\\Z[\\[Yg\\TPFT[VVZSOUXXY^bc][]]\\\\[^\\\\ZVUZY_a]]hia_eb]c_Zabfebbbacefcdijeeb[\\`\\[ZZ]`ef_efggig}оúĿШẕѺĸӬ̺οɴžzhknhn{~~~xwtrɬɰ`tիӱβƧʖϽ˾νïwzwdh|TO_OUgcQwjVwlrnZXiqaDPnVKeimlbtnY<KsavO:`vWPgND[vp`yh~]6KkHmE4Qixh\\`Zg`\\tthdLHyn\\WsvWDRc[FZ^IYM6_ogZr{sfc~eMQ_XW\\Yk1=JCiNIkp^fkmULkahj`[mfWFX3]b\\oUWkjofVD]shdgVRSSRRRSVXXXVWY]^XSQOKJIFJ^miR?LTV>&+*+,+*****))*++)(***-.///..0002332.++,,+-31+(&&'),+'&$\"\" !#&%\"%('*&&(+)%-31+(,/-*((-1//-)/123-*.200.1223346@9',CJCDGEDCA999IGB>::6:BBIJG;>IOMF:5B@.7A76;'-284.*1-)2;>:212795($)+)+113;:94/4=BNQD..FI>C<6,6C<9@:><,(-14655EZC2B6P\\NaB6uiT\\LUfKEXGOmYNhXaaJ\\m]choFJmRJ\\S_gHE8<hXL`VCVZ\\WUM<Ib]LL]^V\\JBWULINUQRQQWTIICIIHBFA@AJD?HEEGCDE=4;C@=CKMNIQa^TH>GX^ZK@DLUXY]a`ZRNQ]hmlklmo[JKB:2267=;6<54;BFDIIJIGDFHCEJEBFKHGHJIHGMQPNKKORQNMMNNNMMNMMOMHHNKBAEEDCLLLPMMOOMNSRNMNNPSSSQSTSQQTTMJKINSRMBBTdlolie`YNBFDBY_\\nwlfghe]YXX[`jtjUOSNKE@?A;A\\ll[GNL=:BGJLMWkX534433.+.0.+9C?BViigjkT55:>AGIHD?72B]cXX^zMDIPZeknquti[A.8GSbhe`WOTSEOml__l^9++6MS?D0,*'6MZaehibJ@UZLC5-.*4lU20E}RdeFJLJHGA74<<98638?A>:79CPYWJ;8544/+08<;2-,/28:752*-69520222:CAFOQ>.0/000255777766655664359=?CDHKC:BLLJMPTVPFCHFCEDAEKMNQUVX[^^__acd]\\\\]_ccdhjqy{{{y|ykB6::=@CBA@BB>;;;:85466667668;4;drlmoprqmf```behhjmnnmmjiihhghiklkkkjijjjjjkmmllnomnqqppqqssuuuvvuuutuuuwyzzyyyywwyxwyz{{|}{{{{{{{{{zxusuvx|}}|{{|~~{A@AB?;8:=?ACFJLLLKLKIHFEIORSTSNNSWUSRVXOB@DFEGJJINNKNQPQONPKC=<>@;9?AA9@F@?>DDCA:MbZH>>IPP`[MSVQNUKJJ=9?C@>MXSGDQYMDFAHWWH=@A@DLSTNJMONJGLZZLHOQRQLEBFLLC>CHLNSVUVTIBMTMLIEFFGKIFIJHIKNOLMMLNPQSTQMKLMLNNJIMOPPRRSUOHKRSQNLQ\\a\\]\\YVZWYZTUUX\\^cdaf~upzlnpjjrvv~xwmPEKWac``duqVOY]_ZUZijrvc`ish`fjmjjd\\ZZVQOPSPNLMNPMH[Z^X]b`UURPPPQTVURMBKH@=IHOL=9>>@LDFJOUV_eakilgdfVU[]ZeaZU^`cggccimdfhcdlja\\XNQ[W\\VGWXP[U\\_\\PV^YZ[[WeXWTM\\\\V]]XW[_`^^goeZ^][Z]^^^\\XW]\\`fb^hja^ebZ_]Zaciiedccfihgikjlfa\\\\^\\\\]]]cjkbfkpmp}ʪ̹ηƿĪӰƨü̚ưǾƽǽt¹oS`~r[Zchefovzzz}{uvus^^ҽxӺȲαſʣͼ̷{|{y~[]|SI_V\\]Ykait[eVFgrbLBQXS[hq`ZdeSRL\\^`tCJusjiPNXELWaYo~H6VpR[p6B]t}l_Nle_NSsgbMCop_[vmWHPjdJi[LUBAju\\W{zx_h{hPR\\TISfv3=NXk=IohmYjdLEg|Te[e_u_`PTMoVbcOinl\\DG_cfmRPRRQQPPSUVWVUVY\\^XSSOKJHTlycWU9LSQD%$+-..+))))(%%%'))*+++,///.012234540*+++(')(%$##$$##\"\"\"   !!!\"\"\"#%&$#'*(#'0/)%&))(&&*,++)&**-/+'*.+2+0332129@7-.BKKACEGLG7<V]C?@BMB=?>GH@BD=L]TD7:<-6H;0:-(1=1)(4/*09=80,0>;60=KA:3-,6AD<2/4<FJB>4>I@=>/2:BB88@=<1$%&*5<?=HS66?3RZR`=9ygX^MSeIFWFUlWQkYe]Obo`ao[GWmMPUThT?;5TaFXbEDXZZJSAGagNG_^Z^V>VYNEJLOOROSVQIICIIIDGBDFMEAHBBFCDGEA?@<=FMNGESZQKFHRXRMGHQWTQTZ]XSPP\\ih^^cdomUKRMG@??;A91A95<GKGIJNMKHHECEHHGIIFGECCEGLLGEFFHIJKMLKJFEMPLKPLHGKIBADEDCIKLNMOPMHJQPMMORTSQQOTVTRTUQLLSSTUTTRQUZ`b]\\^cgZCCFA@4Cermklgc]\\`cfjr|pM315@VU><ADXoo^POSME>>FJHRiZCB>511,')+*(3<=FXbabc_I368<BGGGGD927H^[?<][KPW^mvzlB),;GS\\ZZYSOKITgvyunZ**/-9[Y=(-+,@U_aa[L>.$;\\O2.+((0Yn3(Ws<QYSLIE;48;978407??><;=EORA458@D9138;=8/-16::8654<D?42579=E@4AXP3.0///135556655554666445;@BCEIH<:CIIKPTWVMC@BBBCCAEKMNPTX[\\^_accega`_[^^^bgksz||zzy~mupSGFEIORPKCKOHBDD?;7566557679:6Jlhfkmoqqh_\\[\\aegfghhiihefffdbbddcbbccccbbbdfikkjijjknnnnppoqqpqssrrrpqssssuwvvwvtsttvvvwwww{}}~}}|{{{{{zxvuuvutvxy|}}|{{|~~BBBB@:79=@BDFIJJJKLKIHFCGNOQTSNNRUUSRTVQGCGIHJNMKLKKQQJNRNMIC?BDC@;888:>@GVTC<AFDDNbi]SY]^dR?GNDFTRSXF?CBBCP\\ZUWWRNRRHM`eWKIIHLUTH?>>AGF@CC@EILSRMI@BLMKHDDIJEFKKKKKS`d\\QJGDGOMFFGEBCFMSRNMNPPQSQNNMNQONRTROKHHGGGIJIMOPPKIS`f`VXY^`ZYTIPTR\\_aa`aehpywrompttur``]UV_hc[acejaUXacZ]kpnpiabilgeghgcgh[WXSLJNTOKKKKLLEUWZUZ_iYVVPLLJMKNKQNEHFIHKHOCBA?FVNIW^_]ihfmopjmnd^[[\\ecc^`_bjmedmicijgilkiicXV]][ZW[\\W^W]_VNX^YXWXWaV[]Zd]]jgcdcbaa`fpg\\`_\\\\`acd`ZX_^bhfehga^daY^^\\cdgihgfgjmkikkirmgdcdehhfejqogll{»īзŷŸ̲ɯѽſ{ie^RdO>P^MJRW`kgqx|wqrmmzxiZiͺyʯͽʹǻҺ}z~tzo\\\\z]Q[\\_Z]prcjT`daspcQO_W[bd^djhUG_cuyViaG[dYc^PLDAOWSYosf:<KUkELZeynmUWt\\ODJuafXGqob_pfcQPp^RaRHDSoQ]|}{SxykRRZKEMvt2<Udd7MecoNeXGDfiK]Talo^hWUccLdTUtl~TGR]i\\QTSPQPOPSUXY\\[XWZ[WRTQKIHVmcC;G>XOFL,\u001e-1,5*#)()**)&&''(*+++.//.124544550*&&&$#  !\"!!\"#!   !\u001f\u001f !   !#\"#$#!#&&$#+,'#\"$'&&$&&&&$\"&#''%#$%#*'*,--./>A;23BIRDEDFNI4HeP:@PUPD=44249DPE8GSKA<:.9TH435'*<8()=6'.:;2.+)37<?KELK6,/=G@30/3=A@@?>IF=;3-9B>;9:>=6$\u001e %1:>?CAI5>:2T[S_<?|f[`NUcHJWJZj[TnYe\\Oeg^_hMHZjNPT]eI>4F_IF]I7IXZKSK@WqUDWe\\daGQ^PJMJKIQRQUXNGHDJJJEGCGMOEBF@@ECBCDEC?=BIKGAGRNKKIKKJIIHHMKJLPVVW[^aebZX\\]ckaRZ_ZQONKHI?8F@7=HKHACHJJIFCBEGIJHFFGDBBCDFGDBCDEFEFIHGF?CJNGGLHFEEDBBCCCBDILKJNQMHIMNMNNOQOMKKRTQPRRMKMSTSQRTTTTUWWTVX]g[><EB@Nkumrzrebcfilqu{b9+5SgQ:99?]iZZ[__WOLJEE]jL:BE=772(((&$3N\\fnh``^^K447<DHHHHF@5%.KMB40RoUTanwyN.'(-=FFKPTWRLOTSajpwwF',///EiT*+(7P\\\\ZUJ=:9-0OQ2)+($.\\>+cT?``XIJE;2488452,0:???>;<@G<7?EGA658::<94158;;86>NWU?6:?==JOLGOa[8.0-//135555555445567546;?BBFJD8;CGHMRVWTJA>@@@AABDHKMOTZ[[\\_aceghb_]W[\\[cjnu||zwvvzwxmefkeZXXVVWWWOINQKGLMF@:55567899977Uodbfhjnlc][^abbbbbcfffedeeca^\\\\[YYYY[[[[Z[[]behheghiklkkopmnnllmlllkkmopprrqqstqooprutsssttvwxxwwx{||||{zxwussuvvxz||{{{|~CCDDA;8:>@@ADFHHIJLKJHDBELNOSTOMPTUSRRTSMHIKLKKKJIIIOWSKJHFCBCGGCA>999899?SfXFGJNJBKdj_YV[_ODOZ[`]_d`HAECAIY`^``ULNUXQQ[ab\\QMOMICBFE@@FDGNEBPNHLOPPHEJIGGHGHKGCEGGHSce\\PFDFIT^WNIEA@ADKVYOKOPPRSPNNLLPNKLSUPIGFDCCFIJMNLKIIPU[[\\[ZeheaYNOSRY^aa]dov|zwtpnqrqu}}smle`bcccaiiZ`g]]]]\\^djnaPTbfijhhfa_fh^TVQGEMTNFFGIIKCOSVVVVl]Y\\MEJJMKLDLRJAHVQQOMJOSQ\\`WSaed_idhklidmrnjedciedba_^fpfdlealjilllkomebb`Y]c_YY^WX]UNV[WVUTV_X\\cahafqkjle]^abdlf\\cb_`ddehb\\[__cjgfeda^daZ_^^eddfiijjmqolkkksrpnnpmtvsmptokjhuʠԵwŤξ˵bVNPPDq}]MF8G}VE>@K^ljlwvut~{{qgfyoĭxX{yкuү̽ϵۼƑ̾Ͽ{s~|mxk\\mvc^b_iZ\\gk[N_~dp||{jW_l^V_dDmykZXspzhbeGU\\GW`YQ@;?PP[dcxrB<DD`OArklsyi^R_fKOGDm{^ynNxpe\\fmyXRs]joX=Obq~Se{pM~ynSNVAHNh3;^dZ8L^]gM[QEEgWFURcnkkg_]cJO_K\\jhyKSWhrWSSPNPONPSTX]c_XUYXURTSMKMNPG@<<=H:9J;,74(5,\u001f####$$#\"$%&'(++,././2464111.)$\"\"!!    !! !!   \u001f\u001f\u001f\u001f\u001f  \u001f\u001f\"\"!\"\"!\"$#\"!$'%  $##$!!!\"\"! # \"!!!! \u001f!\"##$%',89;78BGQHJEEGK:OJ<@LVQ@A<78476;GN>0DTL@;24LPB8>(*4?0*FE%);:*'.,&3@F9*@=68<?A971-4:6?J?@GC>4.4:75=A>=>/\u001f #0:<=>9CB:A51XWS]?Ixe^dQ^cGOXO]iaUqYf[P_YY_aNJVfQGd[\\F8?YM>QL.>Z\\ORUBNiZFTe\\ihXM^QOQXIEGRSQVXKFFFKILGICHURIDCA?CBAABDGD@EHD=?HJEFJIJLMMHBBCBDHLOS]fhe`XTX[]aa]_gdWSRQPNPMEGB:;DGF<=AFFECABBEKKHGGGEDCBACFEEDDEC??AAAA>AFF=>EA@??A@@ABA?CGKKIMPNKLKILMKJJJJJGNOMLMNKILPPNJJKJKMMNPRSUZ^TBBPXZapvz~feknqvwvyo>3F^cI844CUWZ]^TMLIA=Jlh@/6@;276+)'&4Vruqnjebb\\L96;@FJJJIHGFAAWji@05[n]TXcuwzpN/#&*'3DFEFNX_bepxponejvw:'-4523Xc<,.1FTV`mkN;>5)4I?*)(&;pN/A@6Smo}xYHE73:73/+,.17<;99868<;@MQG409DKMIC?;958988>ILB4189:EPQQVZbmK+1..0024455443444467548<@ABFI@8=BGIMRVWRG@@@?>@AAEIKMOTXYYY\\\\_dfd][ZUVYZbjot|xqlihk{zqnmkjldaaa\\YZZXWWVTQPOMKLRURME>;;=>>==<;?Wi`]^^_`_\\XVY[[YYYZ]`aa`aa`_[YXVUUUTTSTUUWWWY\\^acbdeefhiijkjjihiihhhhhiijmomklnnlkloqqppponopqqrrruyxvxzyyyyywvwwvvxz{{|||}}BCDDC<8:>>>?BDEGHJKJJHEBCIMNRTPKMSTSRRTTOKKLKGHIHIKKMbrV@DCCDDCCBA?:7779?CEVbUC=HLC=CKMKLQPLJR\\efba^ODDGIEFT]WVVLLPPSQNQV[WMGJGABKNGBBEGNQEGSMDEEKRPNJJLHFIJJIHHIKOW^YOHBAEN\\\\WYOCFHIJNWXOJMOOPPOMKGEHIEFLNIFDBBBDGIJLNNJFKQHU\\YWV`bb_[PMRRTT_bbq~~{vtnhiouupnhglidmohgdjmglpiijhfbail\\Uahhotomgc]cb_SOQIDKTOGDEJKH?JOTSQOiY[[KDNPUTNFKPSCLZZZ[XS[bdli]\\ffd_gcghfb^grnnolhmhffc\\W`rfdg\\_miikkljlljhc`]]b^[X[UW\\WNQTTUWP[`\\_gbhckqggkcY]_aejc[a`^`dedda^]_`cfbaa`^]c`^``afeehkjjijnolklmrsrpqrqturoprnhgqyٵԻkǷ̠ĽzSMQMKB`bMBHS_iY`THQ_m~yommmurtv}}yr}|ochssOx׎zĮɶuͻÓ̝ſľϿovuip`ienrocm[XjaGV}Yb]s|`]`]VSo^:qunh{gfrqMBfPH_RVK9=AW_Z]hyT2@P\\t}M`~pehaWQ[TLeS?_mcT{jb\\i~STpk||W<Wqqtfj~dQyspUKP=IW^8<a_L7S\\SeLSN:FjJFUUq`hefgL;[VQ[ZeeH]gmURPNNONNOSVY]a]VTVVTQTUQNQRMKKF@A?98>C>?6(3+'%!      \"$%%&)+-/00./243/+**%#\" \u001f\u001f   \u001f\u001f\u001f\u001f\u001f\u001f   \u001f\u001f\u001f\u001f\u001f  \u001f\u001f!! !! !\"!  !#\" \u001f!!!!      \u001f!\u001f  !  \u001f\u001f  !! !\"$,,677@CIFIDCINGS@<BHJD=BCFOJ@::7EP63KMC:41;IFA?/,1@:'DR')87,#21'0:>8890CE?;58G30743EGBDA;8216119AC@>9+\"$+68;==:>>@A63WUS[@Mte_fTa^JRXR_geWsYdVQYRV]\\VRY_JKjS_A?QK<HR46VbRY^GKciMVZU_kcU[RMT\\WDBJQTPVUIFCFNHLHJCK\\QKGFDACB@@BEFCCDB<:?F@>EHHLLKJDB@;>BFLOT\\fd`]XSUY[]]_cgdYRLKMMKKIDB;<?AD;8=DAAA@@@BIHFEIFEEEFCFHILHFE@@?====;ABB9:B>:7;?>>>?9;FGHMLMPPOQMHJJKJGDEGBLLIHHHIJLLKGEGGBEJIHHMPQU\\PLNONOLPriTbt|o>F[]O;106KWLKJ:6978=VmYD93:6+.2-+(-Khpkc_bbdeN?CA@AFLOPONPOFMnwU:BF@-]eEgecvzZ;($%(8C@@GS]eq|}zlhp{8',2421VtD/5+1EVe|zI0.'%AV4*-8RsT1,(-bsJH;77411-+.03652124468AID=@GDCKTZTIFB7117:@I>4:8ALLNPHFQWUVC,0....02244333444432248??ACFF<9>BGJMRUVQE???==??AEHKMORUXYYYZ]aba\\YXTVXX]bflsohcbaalpfca`_cc`^\\]YUQOORUWXZ]]^_dgfd_YWUSSSRONNNQWYVUVUUUVUTUUUVVVTTUVXXXXVXWTSSQRRQPQPNNPPOQSTW\\]\\^_^\\_`^_aa_^```ceeeffeegikjikjhfhknponmkiikmmnnmqqonpsstutx{wwxyutxxxyy{}~BBCEC=8:==;:>ACDFIJJIGDBCEJNQSPLMPSSRSTRNLJIGDFHHGFFJbz_ACDEFCBBBABEA98:::=CNK@CGFA><=GMKD@CBBLRPUVJ=AHHKKCELIGKJRTONGDILHFFABCBBDJJBBDIOMGEGGEBCGKOOJP^UEIKEGJJLNPPOQQMJIJOSPOXWOORTQPVVPJJNNLKKKHC@?CB@CDDBBA?ADHJIKNNNLMSKPXPRSWYW[]RKQROT_dlmnvzvogkt|uc[Z_ijhjllkhijkuzqklnokkga^`gijlmjhef[Z^aSISJBHTPIACJLG:BKSQNM_U[ZIGRX][SLR]]NT\\`egeahejnl]afdb]c^`b`^XbmlnnnjokgidZQ^thecS^nhjjjkjgage^cb][]`WVV\\\\YMQPTUZXgdbehahekjbei]X]Z_eh_[_]]aeheb````acd_^_^\\]b```bdfhjkmkkihjnllmorttqqrqrqppqokhl՟Ƙmĵӭw}ęfLOSROEWneX@A_hwdg}wbZdt}zg`bi|{xwsy{q}|nx~OtםǳhȻУͳ̷¼ŹovpqqiarRwfj`Z_S_oZIF\\{h[b[RXdwIEruuqpWbj@]iHWWCQC6:MmiO_kgF2Fdtlxm[gpnYo^^IRU_rf@O]l]b`]txRXlwvVC\\|mnujcTvlsUIKAIba><_ZA;dXRiLKN1Pj=KXaog]ldd?DdQRNPiTVm{hSQNMNNNMPSW[]`]UTTUSPTWTQTWVQKHDCDB@>?5:8'5**(%\"\"#\"\"\"$%&''(+-/01/-.01.(#$#\"! \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  \u001f\u001f\u001f\u001f  \u001f\u001f  \u001f     \u001f\u001f\u001f\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f \u001f\u001f\u001f!\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e ! #\"*,19>AAEFJOQTN<=<9DKF?=?FC>?C95OL;;HG=768@AJ>>0.AA&<S-)602,40'-4-8==@EB>5:CG2861=G=EE965354/:A;;<@7-()0589>>;;?@B:=VTSYAQpeahVaYTTZXadlXqY_TOYLTR[\\[YZDWf\\VBSG8=P?3P\\PX_LD`l^WUSUigYTZPO\\^R@DMPTRVSGFAFOHLGFCN_PMIIGFD@>?DIGBDB>:;@A<@FFHLMKFFF?8;AELPT\\a_\\[XSSW[]_bdee_XNBCMHHHBB=<<=D:59B>>?@@>@BCADIEFEFIKJJMOLHD>FA99::9AA@;<@<637=><<;6:FEGMJKRPORMFFIJJHCBC@KJDECDGJKKGBCIF?DIHGGJNORXOUTNLFHKfreWSbuw{]HVVG?42:LYP<1*)).:D]aEFOH>71/11/-.9CC?L`c_eZ:5GJDCGMNPQPMICJhQ6331+H~2Qvks_<'+>B=>FNXhnmsrsxxust8',0211Gc>$,++9Rd^RM;++**<]H,-QR*-/WEAGD>85642.,-/45212334567/0FXXOHJVZOII>307==?:ASDLTQKHB@GN@/+..//--/1133233344422039=>@CFD9:@BGKMRUVQD>>>><=?@CIMOPPRW]_\\[]^^^\\YWSVWVX]_aeec__^\\cg^]][UZYWXXZ]\\]bcgjlkklnrtvxzzxsqqqqnkjjhdbaa_\\]_adddddcdddda\\[[[ZZXWWWYYXXWUVVTTRQTQRQNOSUUTUUTUVURRSTSTTTVXYYYYZ\\]__bddcaacdfkmlkjihggjkjjjjjkklmllnnnppppromoooprx}AABED=9999878;?@CFFGGEBABCGKOQPNLNRRQRTSPLGECCDFG?7BUbfXFEGHE><@BCFON?88:<>@=@EJLE??DGJH@>@?<AGHFGF@;=AGOPJHHGLPRURMLGBFF>@HHECBA>@DCCEIMLC?BECBCDFIKMVigPFGEEHIJKKGHQSPPOMLLKMUXSRUVSRSSPJGKMJGEEFC??A@>>@A@?AACFJJJLNQQOQTNOTSQQVWUY]SKPRPVadhddousompvzsbUU]fhghehkgee`fyyg`ilmmc\\__\\aijghhceZV\\`]KPMAGSQKDDKME8>IPNJLTPZ\\JEX[a`_OUb^SY`ejkniebjjeZ_d`_[]RZZ]UV`biqgjhnk_fd^Q[ulehQVmgjhhlfcZa^Yed\\X]aXS^`[\\OYS[[_fkfihd`feigabfZ\\^UZef][][\\`efc__a__`bb]]^\\Z]a_cacfgkmmmkihfhmlklostsqqqpppoopqmuۯ̝yuxƿƑqrv˵bNPYVOEFpVSDCZpm{}bsvgn{^[^pxzzuz|{z|è\\fήttƿʹЊǸ·qyjyjhfoXie`XNhfpT?:m^ae_ZaodENdax{k\\NmZOkTJSDCM>5AdoUXc_T>9Olp\\pdO\\fm]wmeT>V`i{qBH]{|pxce_qnV\\gup\\Kc{kmzqgTslwUJCSNhxiA>_TBUkHmfIJU;`[=S^jhoklbT_VQIAMmpRbxcSPOOMMNOQTX[]_[URSSROTWUSUWVSLJFFGIE@@.,7(9+%()&&&%&')*+****+++-//---*&\" ! \u001f \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f \u001f\u001f\u001f\u001f  \u001f\u001f  \u001f   \u001f\u001f\u001f\u001f\u001f\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f!\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e!  \u001e!\"(-5=@@CKQSSF;;99?B:9:<<=;BI<0@RG@DJ@6799=J?C6/>A,7T.)30607/(,1)7?=B98<5@F0099AF@@J27G?;236AC;8=AC5*.36:@?=:=@;@9CURSXBRhfXjT^W[]`b`\\qVpYWLMWLOGW\\[TXGbb\\EQX99JF0@SMZ_I>VoiUMORajWBIb[R_^NBHNPSPWRFF?FPHLG@CP_OOKJLOD?<>ELGCDDA==><=AABFIKIGHH>8;AELOSZZVVXYSRVY\\addcddWN=AKFFFA?<=::B93:A<>@?>==>?>BGBEGHJKIINPKJEBJC99:99A====>;628=<:99;??@HGFFKNIIHCCGEHIBBC@JIAEEDGKLKIDDIFBDHFFFILOPLJPTNLPQVQ?9ES^lpy{||cDRV^k]HOOC>6<GO^\\D.,,)5FO[WBCNOH@=;:85333785Mbb_bL,9GJJDGLMIB;4@?9]Z@:0-,NpL\"UusuA.@B<>@DRdytonnorv}}8'/4688<@4*)*)1Wtc@,&+),.8TO/5kuQ1,3^|fPEFCA?;63/--/2564565430-*-DaaM;<GNMLOQQKC@A@<E[_UHCB@ADFG6/,//00.//0011023434432557<;=BE>6:@DINQRTVRF@@BEBCCCEJORRRSZac^\\__]^\\YWUUVVU_b]]^]]YWVUZZYXVRTQMV[afosow~}xvwutuw|}{|~{utwwsorutomqtwxyzxvvvvvtppqonqqnmnppomkmppjikjecd`WVYWW[_abdea_]][[\\[[ZWUSRSRRRSUYZZZ\\]_```bbcdddcceffffghhhiijjkjihjjifihgkkkorw|~~~@@AB@<;96544458<?BDDEDBBBCEHMPQOLLPRRRTTSPOOHBCC@;9K_b]NFIGED=9=CHEGJB97::=?:<DEBA@>CGD;8AIC?BB@@>:8::8AOPJMNNQPUXOHHGEGEBDILLIELIADEECEHGDDFFECDDDFGMV]_VIEFDBEHGGHIMPNOQNJJLMPSQMNRRPONNICGIGDA@CDAAC@<;==<=CHKLLJKMNSTQTURPSRPPVVVY[SNQSU\\dacimfjmbfqskgkibYZ^bccb[^ke]]\\\\dn`Yeghfa^a_Y_gfabdc\\\\V[`fVLSJHRQLGEJLD8=GMJGHKK[`NNc_ihm\\`g]]fjjlhka\\]gf^T\\]]^^YNVVXPRZ\\cp_^]hhY`daV^xpdfUQidigggc\\V\\ZS_a]V[_YXd^\\_Wa]dcglhcjfe[becea^b\\^]OUdd[ZZZ\\_cca^b_\\]\\aa\\Z]^V_daecgikmkmmlkkihllklnqsrppqqqqqrrvȦwxxw̹יkykt~ʲXJVjaLC>s|TMEA`uluzu`{{wfffdju{|xzyvƋvNzʱeǷŗɾᢲy{zfo{khei{[j^\\TYZnc<CovYflhW_mUPGN_vg\\NSrhY^O@D>>AMC:PfVI_bWC=HOcabgNGaoldi`Z:>h_mrJUi|ftmflani[^dpwm[kxfl~lVqts~WLInUmql?=aQOqRRO<bcV]KH\\ehrysf{aloGSCBWp]\\mt|dTSRONONPQUX[[[XRPRRPOSVUQSUUTQKHHJJHHF2#3+>,!'+)(('()**,,*+++**+,00+'%$! \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001e\u001e\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f \u001f \u001e\u001d\u001e !&289;ALRI>;8793+*19=<:<CIC76@CABHF71987CFC=16>64T:*/953</*,--:@;40/=FI9*-1?LFDK?>I@:74;AB;9=GD4)0;=:CN?;=?7383>QOSZDR^_PmS]ZZ]edbZnXlXQHPPSIDQ]VNUOf[GLRS?IH>AJEVdM?OidTEGT`cT@@RvbU\\WPFNRPPPYRGD<GOEMJ?BS^POKKMRF>;@FLGCFGD@@<::9<?BEHHIHG@>>ADJMRWOKPZ[URTVX[]]^ab^U@AHDDD@><?9:B:5<A;>@<;=>>==@>AEHHIHHHLLJIGOOE=<;<?D:<>?=<;59>;988:B=<BCA?FKDCC>@C=CICEFAJIAGJGGKMOMJJMIHGGFFGHLPOCDKOMPSQVVQQRUX[]eff]ovEGOPTVLGIE;4BKMSVPA9::BLPUTJBELJFEFE??=:BHBBUY^eV7+?PGMHGIJF=506>:H^PD6588;nw*'O~}u`]fikaD85?F?@;<OMWwonsuu}:,19>@BBDFGC<:EeqC-+*++-<C/@{pZ~~T.+/8W`==@9>F@8421//28><::852.*&'A_V;/:DEACOVYWJ?@@?EUcWLKE>CE;8//..020-./000/0355355469:9:9<DD;<CFJORUTRTUPHFGMRTQORUVVXY[]bc_\\^_^]ZVZZYXXWac\\[[YUSSRPYXTQQKNUZovqtxxw{yz{yvwyz}~~zxzzvv|~ywz|}||{zyyxyyyz|}||}|}}{{y}|}~~}~{rnifksxyyzzyvvtqorsqomjhgheca`_][YXXWYZYWWVVZZZZ[[[[^_abdfhighihfff``]`aciijmmosuvxywvz|}}{z===?>><94123225:>ACCDDCCCBCHKPQNKKORSSTTRT`pbE?=9;?OWTSJFHC?@A??BC@>>><978:<?@>:9<=>B@98<EKHC@==<=?<7:;?HJGJOPNLPRJEEDBB@BKG@TYJWVCAA@ACFEDFFFECCDFGGJOLMQNJFDDGJKJIKLLKJNMHHLMKKJHHKNLMNMH=AFDA?<?FB>A?;9::;AHLNNMJLNOSUSVUQQQQONWUUYZTSZ]XX\\]`kn^UUPZmtbU[aa```___^YW`b\\]^^XXZ_hfbdgegd_dhdXVacV]ZY`gaNUWKQRNIFGLC8:EIEDCGI[eX]qfqn{ollggmkhfghYX_hdXP_Z[ZaWLTSPKQUX_k]TQ]aV_fjabwoedXL`_ihgbaVOXWOY[]VU[U^dY^_`dcdeke\\`e^eY^e]daY_\\ZYNUbc[Z[\\[]a`^]d]XZY__^_`_^afdgeknpmimnnnnkhkmklnorpppppqqrtsȽƾŲxpvyϖ~ȱ|xkehsŲVE_wfTL8TXKHCa|{uy|jxxywiWrpqyuxfcbˢIсʷr·ɞиٿſ¾|q|ihs|idbny`hQNOlzdp\\;G[]Slh^RjpXK8@\\j\\VLUdNTI7BA;8;[JCRRFK^^E7NHMbdcTMXpbk_P]E.Mv\\nw\\gwzc{qfakivxgbaflw|ei`ksbsi}_N[bml=<bWewCno:@blKBa`ZplpnZ|xC^XM^t\\nojwkUXUPNOPQSVXZYWTONPPMOSVUQQTWVTMKNONKJK=*-8?-\"'++,,**+)'),,,--.//-..*#\"\"\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001e\u001e\u001f\u001f\u001e\u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e\u001f\u001f\u001e\u001d\u001d\u001c\u001c\u001f%',2:FIE@;234,*1:==>=;29E@6433>CC=--747?;>917<6M<+,:31=/-,.;FC:4./>CA7/.4CEFLHFME823:DC<8=D@30:<;?EB@?@@<.4518MHS\\LPTTQrQ]ZWZeb`WmXjWKAULVFGMZJOSSbLCQLUNQIGLDLaTCLZUICJX]`U;9TmedR]UNHRUPMOYNJB8GOBNO?@U^ONLNHQG=<FHJGDIGB@B@<66;<@CEGKJGEBABDHMPLHNQTSSVUSSTUUX]efWMFDBAA@<<A89A;6?@:?A87<>=::=;?DIIGEFGJIHHITNIJFCDIG>AAE;=A8;?999:;A<=CA?=AGA@@9<A;?EBGHBKICJNJGIKOMNRSNOJHGGGGKPNECHLMNNOQV[\\XURRUXWVNUnqWTWXVURMNMCAIKHFINHCGHHIKPRNEEJHGIKIDDDCHNNDBRe`@*+<VLJOKC@@>=:06EAKSQEBC3AH\u001f2InZ,*9>84>7AJBA<EY<,\\yvyzv{?37<?ELPQPQVVLKSYjmN4,++++*2-9`QOY0.312EshH9:;504<:75331029AC?;751-*()9MH87CE:4;JU[`O=;;BGMSMKNOJJ>-.-///020--/10-,.4776668:::<==BLJAGPNMOQUSMQ\\_WSPW\\YXY[\\\\\\]^___`^\\^_^\\YZ]^]]\\]cg`[ZZUPQQPXSIMO\\inx~xuvwz~~ywtuy{~}|~|yyyxz~~|zy|}~~}}{xvvvwyzz||z}~|~~|zz~}voqy}}}}||{xwuustvwwwx{|}~}vrmgdb`_]YWUVWVVUSRRTVXYYZ]`cffdcb`^^`bdefhiijlllllmnnoqtspo;;:<>=9620220157:<>ABDDDCAAEILMLJKNOQUTRQVaw}]B>=@LQOOLDAB@<=BADF=<?<;@>888;@?::@?<>>:9:?GKKHB?><=EE:9>@DEEILLKIGECBA@AA<<ON3FaUSTHECCCDHFBBAABBBCEHGGHFFKNMKHEGIJJHIKKJJJIFHJKKIHJKJKMNPPJBBCC?<8;GC<@?;8:<@HIKJJJJKMLQVRTSPQROMNXTRVVQS[\\RNVZ]adXOSV[di[NV`_acb]ZZYWTVZ\\`^]\\SY_ec_fojhg`afcVSdfYVb`bbbRRbWQXRKGELC9;EHCCENTdodl}kto{trpkljdfgh^_ii`TPcZXR\\RHTVLIWV[^i`PMY_]fmpjctoihYNWWehi_^SKTRMWW]XRZP^dXb]iec^gjZU^dWbY[cYacV[YVZVX^a^^^^^_`^_`e^]_]cccdfffgijiknpplgjmnppnlkliilmonmnnoqqp~ӻƺmnxyʸ}~cfftæZBXVPSIaQNMZq_r}phw|nv_nn|l]{kʼXs̜eΫֻғøâġ}vvizmbmu_`i{xchJBMoqnq\\?=K\\alVV]jqQ77?DacbJKUJK?JUHE:KdL@ECCOUC5IUC[mkX`\\b^UuOFS7>`o\\c{zoo}aprhZlv{uklggelfb^h{twflOg~nk>;_iqhOhP3`co;MtV]mj~oSmGolOghyhcxpW[SONOPQSVVXVRNJKNQONQUTSUVVSQOQUUUQKIC40B5##''*-----++*+../0222.'%&# \u001f\u001d\u001e\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e\u001e\u001e\u001f\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001f\u001e\u001d\u001d\u001d\u001c\u001e\u001e\u001f\u001e!-9==@;2-.146:=967?@2'0<=5..:??B8,///0069139;:1-02<24+0.8JIA<507<4A4*4CD>CGCCC8818>D>:=@>6=KC:>A?AED?6/19578HGV\\MGJNTsQ[YZWc^`UiZeOI@VN[AHPS?SP[\\CRLQ[TOYEHH[YGELKHHLTVXS<8TYmeXV\\TOIVUOJOXJJA8ELAMR>>U]OMMMEOH=>KMJHFJFABDEB;;;:>ACDGLPLHFDDHFCDHMOMMUZXTSSTUX_jia]PJFFFI@?E:;C>:=><>;6;ACA==@AGILJHGIGGFEEFNGQUNMLLJHMJOABB6<A:;<>?A:>FA=;>C>>>58<:=A=AC@HECJKE?BEJJLQRNPNMMMKLNPOLIIJNOONPQSTQOMLMNLLKS\\YYWUTSQNMPQMMNJGCDECDFFEFJONJFIJFFJJFCEGHINPC?W_H,&*3JTHRUG;<>?5-)9I@ITI?B5Q2%5HeG6HFHKJCCB@DAIQA7NxttrziA5?@@CS\\NN\\fibPRH7=94.,/1.,330Dl}q?16346Dr[96<A=:<>=;7631/-.6@@<868844653>FEA@>53:FOV]TF><EHHGEADKJB4,/.41//01./2452/479;;:<>ACDEIMRVVTTTROPSXUOU_c[VQXZTWWWZ\\[ZYYYYZ\\_`^^^^cc`beeceje][^VPVVQSQP_pvvvzywvtw{||zvvtux|~~wx{}~~}{yzzzyzzxyyx|{{~}zz}~yvvxvomtzxxz||||xrqrropuvvvvvxz{||}}yvqllmmlkhgecbb`_\\YWYZZYVTTUXZZZXWWX[^bccbcefhiihhghjjkmonki;;;;;96310000123579=>@DDCA?@FHHJJJJLPSTSPRYjvNDDHGFRLC@?BCEHD=JQF?EMA@@=:58==9<EGE;6BF9:ELNMD=>A>BGA<;?@@CHFDFD@CEA?AB@;>OP9:SVKHILIFEEFEBA??@@@ACGKHEEEFILMJGFGGFFHIIIIIGGIKKKKHJNJLOOQOHIHEE?;8;FD>?=55>CGJIIGFGHILKPVRRRPORRONVQNVWPNTSIKWYUVVRPTZ\\\\[TNT`dddc\\WUVVTUZ]bc\\ZXZ]_][kteagbX\\`[WbgbU`ig`^UPggRXRNICID@BKIDGR^altnugrkwtutnfjkilllilvn`SO`WTIUKAT_PKa_celbSS_elssroelppq^TRT`hk`\\UPRPOVV`\\U^Vbh\\c[mfa_ghWP[jX^YY_[_aVXWR]^\\[_``___ad\\]bgdddbdefghhhikklmnookgjklnnlkihgfjmmkjlooonj˷ĴrjtrwƒjppbǵƬyVG[obZ_|nVMUgXjtttottfoquqyĬjh|dͿѿڝƪÜzuoyazp`hi`gs{td}jF;Msx{otkA9[yp^NUXcpG8AAIprlDBWGMUliPXOZ`K=CDDI?3KYFNnnexa\\NorDIHBY\\b]XpysmyVeriav{|rrvohZdbabdt~ds[rwm<=`ujXTS>9|qpfAa~\\vahwXHWoVnr`m|}s[XPNOPRSTTTUSOKIJNPNLOSRSWVTRORWWYYVPIG;-9%!$&$&))+-//0/-...012/*# !! \u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001f\u001e\u001e\u001d\u001d\u001c\u001e\u001e \u001f\u001f%-1141/.-0662010-5BG6*4B@53:DD>;8/**,./21.2=1*363C4/,41?L@7:31:@=A21AC<9=<89?625>GB<:;<>BJC:?@;=BB=401=;997DRZYJGFJbqNWY`Wa]^Ue^`HGDRS^BKWH;ZN^SLPLU^LSQJJSZK?>???AEIQK4<V_YffZ^XTPKWUQGLVLFB=EJBMR>?U]OMLMDOH<>LOKIFKFDDGHGCB>;>BCDFPTPMH?@D?=DEEFKS[\\XUTUWZ]behid\\WLLNMBBG;:@>?B?=<;?FIIHGJHHQSOKHHJIEHG@EDBSUOLKKMNQNQGHC<EF@@@ACD:=G@9:<?<?=6898;@:;<;BA=@@>9;@CGFHHIKLMMMOOOPONLKJOSONMLMPONLIHEFFGRVSTUUTTSNILNJKJHGFD@?@@ABDKMIEFLLHIKHC@ADGJJNLLQD2+)129LEM[QB@?;('%(<>9<@@:2Sk,.5=Pqb586:GI>;55<>DJMPVvyrmkmm`XA6?FILRT<:YlWMAAJD=..75664BE@88ln>4NeYMWi[D?@=>AFJH>;64210..6?=:<@EIFHK@4:CFB:;>@CFKPVSTMELMNOICA?<:42412/049;58AIKFAACCCFHJKOWZWW\\_]]`^XUSRTVWUW[]VKHTXPSRQTWTRRPQTY]ab`^^affabhhecijaY^YSWURZjw~wtwwvxxww{{xvwyyz}~yy}~~}xx{{{zzzxwxz}}|yy|~zwwvrorwwuuwyzz{zwwxwvwz~ymimqtvx{{{yuttuwwxxwwtrqppnjilllmjfc__]\\[XVVUUWYZZ[]^`bcddgijlklnpmkj<;;;9764100/000014679=ADFC?@DEFIIIGGKQUTKFM_wtRGEDJQ_L;?AEGJOPLQWTHK]R98A@849<;;=EF9:UU;9BGLKB;?E@:=?=;>?=CGB?CC@DIFDGB8?NKEDEHHFDFHEEEDDC?>>>>==>AFIHDBABFIIIHFFFFHHHHHIIIIJKJJJIJKJMNMMIGJJHGD?>AED@A=49DIIIHGEDFFHMNOUPNQRQSSRQOJMTSNJMLDIYYNPQPRUZUTWWVV[ef`]^^WSUUW]`c_YZXVX]XVmqZYokRP[_]]ef]^mmcZVNfd[ZUTNEHGKLOHPY^jnqtrwajfkgmsk`hopqpnpt}pcYQYQOGQKBSgZRfhinwi[[imsvsrmednqsf\\TT^hmca[ZXXSZ\\faZddhmbcWgcc_bi\\I[k\\ZVY]^a^U[WTab\\]]__^]^agbaehkkfddegffeedhhiiikljillmonkhghijlnnnnoqsroyȺzptlq̰scv{a̴[Lc}uvc}^ID]jTyomt{rp|yvŬ{ijʽφӭʲtxvmqZyq^c}jlkqppfdE<L{~vtqlB;skXSLG`cE>NNhun_@MURefm^iUXVHMRGC@9N`JGZymrr``dzXAKI\\dRb`[svpjrH]nks}|zmtwtgTe`ap`hgwpzpACh|YK[O8L{_qfTjz_TaZqo8r~jkjffyuo|{_TOOQRUVVURQONMKJJKKLNTUTWZWUTUUVYYXTLI@+-\"(''&%&&(+./110...../)#!! \u001f\u001f\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001c\u001d\u001d\u001f\u001f\u001f\u001f\"$')-20-020*)..+-3ELFBBA@;;CHB7796,+1/0/(+:2-A;@<32055>@73?52=LI96E@46:::98199FDC@:66<A@;4>D<=D<.5;@EJ;>55F`[SPQBLphOR[kU\\]cVaf\\A?ITYSILR:@]KYGYDP_NISCNNUM<887;AFNWWIGX^U^^ZaUQQQNSSXEGVPACDCJCJP?AU[PMKMDOF;@OQLJGKFEINMHGHC<?BBALPPQMB:>A@CDA?BMRVWURQTWXXZ\\_dfcXHOSLFFG>=@=?FC>=@GLOMJOSLMX[RGHJKICGG=C<AOOLJFDLMNLLILHIPLGFEFGH?@F@8:<=<>;67757@:885=?88:857<?A@@BDEHJGLPOOONNNMKNPNLKJKOMJIGECDDCKOPONQQVYVNOLIJGGJGEBBCAABFLLHGLOMNNMJC@@@BEBJONF8685=<;A?ERPDAB9)--&4:67BI>9LZ?/2/,2YIca4%(,??56546@KQWYS]ijiihiaS[H>BKXYUSJ=IeW=15HMA04EEB>DZYPB4[}d<1PnQMFCD>;=CJPKA?<;;;978<ACEGLTXUQOE?ACFHEEKPRSUXZY[VRUX\\[YYSD:CGFE@837>JOGIV_b[UUWURTWZ\\]`cebbdd_^aa[WZWOQVTQTTGCRWNPQRRPPRPMLO[`aba\\Z]_^[]egaZag^T]]TSUf||sty{~|{|}wsuz}}~~}y{}|{|}|yzzxy{zxz|}~{yz|~~}zzzyvy}}{yxxvvwwz~~|||zzrkr{}zxxvtuyz{|}zurpnlkhfb_]\\[XXXZZ[[[\\_aeghikmligg<;;:9974100/..-.02468;?CFFDCCCEGGGEEFIPUI?@I]cQD?GOXhT;?DDB@BOYSRSJKZV96?AD95=?::?@=HaY?;?@CC??FKB45:;<?@@ENI?DHB?DGHJA8HZL=CJJFCEIECGCABB><<>><<>BEFFCAABFHHIIHGGHIJJKJJLMMMMLJIIIHILLMJBEIGFDDDEDCDEGDBHMNKHFDBDEDFNPOTOLRPPSSRPLEHMNOIHKFIZ[NOORTW^TR]a^]]`_[[^bZRSQV\\]^YW[TRUZSSkiM[yt[QZa`[ce`_kuhYVLf^f``]YTQIRUTNdobkxuqqs]c]bahqj\\fspomhnr|mfe\\[SUPVVT^oh_jikq{nbammnmmmd`\\fnljaSUbjofhbbcb_egid_hnllhf[hff[^icO_h_\\X[`ge_\\]_^aa]^]`aa`aeinhfinnfcfghga^]\\^__bdgnpoonuurnkmnprtsqrttrsy̼úxpmʴ{]auwþkfuwz}urFGnxfyzy~~lkr~vtzstxƾĪs|~jǺ֠ϴʵsxvkg\\}u]`{rtjmikg]J=MzuxhlF<~d_WIG_TQEUfdX^D:LS`cggl]LQITaP<CIMgRAQ\\{odaddjs`<>WWfd\\qbfy{tlpBXjj}zthnoxjT_}aa}\\as||wQMjwQGhX=_m^ii[o|cIRTP9Mkf_ichrio^PPQSTXZYUPLKNPMIFINQPTZ]ei`YYXTUWVTQLIB0*%**++**((),.//0211-)(&\u001f\u001e \u001f\u001f\u001d\u001e\u001c\u001c\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001c\u001d\u001d\u001c\u001c\u001d\u001d\u001e #&-2-,0.+'(,..**4BJLC89=7:EE@03A7(0744-(398FBI.8:-66530<F:6CJ87@=<>67@<4,5NMMD67226@?9<JD;CD5,6HLNQI;D16RkWPY[<SwfOL_qSX]fX]l[@6MSYNNNE8MYSGEVK\\SAOPJJOP;1449IV\\\\WOQ\\XPSSS]SPMVMIMO]FGUS@EG?HEHN@DSZMIJKCND<CUOLJIKDENSQGHHDACA<GMJJNH?;<@AB?=@CIJJMMMNONLLORV]edZNRVOJGLCBG?=FEABFHKNKIRSJNWWNEILLFBBB@:<BLGMJD@KIMMNMNMRTLKKHHLKHJJG?>??;<<98815?:8918>6364248=><:?@BFFDLNKJJJJKLJKLLKKJGGFEDCA??ABEFKLIHHQUTSOKMOGJLGIGGHEFFHJIGJPPMNLLKDB@?>==DIKFBFFDJJHHJGJMGEGA;A@;@>CJQSQJNLCE=41+Aqq3(DE/-;FG?DEEJQTZ]\\XW[abcdb[YaVNSZ\\]][[USbcK<DOMFCBLQVMK[Z^L9Kss_E79oLDEGEACGJOOKHKMNMIEAEMORUXZ\\`]XURQQMMSUXZ\\]^_`ba]XZ\\``^aghYNSXVTTOJKOUYXY]`a^^bec^[]`dc^^de_ada_djeaebVRTSOQWLLUTLRSRROOSPLJLZ`^_^XVVUUSU]d[PZ_SNZZPZrzusx{}~|~ytpqu|~{~}||}~~}{{{|~~~|||zyz{zy~}|zxussv{~{}|xw|}{yxwx{||}~|wsrtyzxtomnnjedeeeb_]]]]^_^^acb```<<<:9853000.--,-02468<@CFGGEBACEDFHEBBKVG557DSO36KJ]iN:@DCB><AJIEFFHLL>;>ANG8;A<9>BDMZRA??>@?@GONA668:<=BGCPSBELF>>DGGDDLRJBBFIECEIHEGFBBCA>=>@>=@FFEEDABEGIJKKJJIIJLLNOONNPPOKJKKJHIJJLJACGDCBDDEC@DKKKPOMNJECBABBBCILNSLNSNORTSQNHFIQUKFOHH^]MOOVXY_WX`b][a_ZYYVSVUPNTXW[ZVXRPWZPSl^E`xsi`_`bX[e^^izn[ULf^knmhec[M]fe`sflzunmo}[_T[_iigZcnkkhcikvlirkd`jfdijlrrgjjhoyjcbfefdbd]XS_oijcLYflolljjkigklidckonkkibkkg]`jf`gkeaa`hoifd`gfcaababeeeefgpihhmlebilnlcZYZY[]chjuysts}zxusutvzzxvwyytsѶv}į``gz±pqzwnYfpx}tuwxq}phvwo{n{wxrzwȷԭw}wke^|[]yyxmjcef}yZL;S~puxdtKDbfYNS_LXIKsZJQ<:LSOYjhdgGGEOk[<.Ma]YHIYbtcVOddlpeEUi[fqqxYoxzn|i?Vhc{}wqedfzsQVzdiwWbz~cV`r[Ht\\Acbeh[cvm>@YL]l7hh[W_fZZiht}x|WOPRSUY[XSOLKNPOKJOUWUXbink`ZWWSTUSONMKE8)&,*+-,-+*+-/112231,$\"\"\u001f\u001d\u001e\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001b\u001b\u001b\u001d\u001e\u001e\u001f\"'))+,+*''---,,.039;5.016@CC;2;H2)?87>..C@<GI,AC06.0.3JA68B=*EC;F>8<7.-:_WO:-4.,07>BEFGDB9.+@TTRKA98G6@doMQ\\a<[weOChvQU^iZ[kT<9WRVPUN:CVWICJSXW?FTOIMM?1028LYSOLGLWYSTSSXSJPJUFGLK^JKUU@FK=GHGMAETXGCII@M?7CWPKMNHAHQVPEDDFHD@BFFFHGFD?:?>;:<BECCEGHMOKFEIKMQZb`][XXYPLRKEKF@FDDIKJJLJJOLFMPMEDHQJ@A>=B7BAH@KKB>JIMOPRPOROFJIGINMNQRPIFGE?>?>?=56=?;9.3<4.11026:::<<<AFCDMJCEGFCEIIIIJIGI@??@BB@==>@DCHHGDBKOQROJKNGIKGIGEEFEDCDEDGJGILIHIEDFE@@9>BJIEEGIKNKQWPNPMLMNOSPOPKPTWWXWV\\]XSNG?<KZD7DQHDPVSNTY[\\]\\\\\\]_`ab_]^`]\\a]W\\__]\\aec`\\d^UTRTVXXTUaYPXRZTEEbndeSD<K~ZINLLQSQTVUQPT\\`]WPMQV[[\\^``ab__^^][WY^eb`_``_aa]X[[\\\\\\_dgf_XVXZZ_^^\\XVXZZ[[[_a^_`^_bdc]\\aa[_a`cikigmmf`\\ZVW]V[]UQXUNPPMUSMHJU[Z[WQSNONPU]]VR[\\KDTY[y|xvtuz~~ztoprv~~~}}~~~~|{|}}{yvrpqtz~}{zzz|~~|~}|~xssx}~|xututtuuuvtoljhgd`]YWX[[ZYY>=;:952000/-++-/13689;>@BDFDA@ACBDHF@?FNG424ARJ+7LHjkB9CFECAABBBCCEHFEB>?EPO@<CC>@GHIMIDDBCGGHMPK@:99;=;@JAEK@GKC>?ABDGJHFFECEFDDFHIIJKHGGCBBA@>>BGGDGHEBCFGILMKJJIKNMPTUQNOROKMQMNMJKILLCEGCEDDCCA@EHFHMHEGDA@???@A@EHMSLNVPIQRRQPIDN[VIIN?Ne[NOT\\ZZ_]`aa_\\agYVYMFN[ZRVZY`[SURRXWJ[mNIhmgjg\\[`XWea_i{s_VNhcnytmlnbZjvtsvlhrrikjwY[MTWe]dT]jiifbgktnnxsiitvorsrpvgjifnxhaa[]\\\\^]^XSbrlkfQejlnpnnnpkfjjifgloiijedijgdgjhinligchpriifbggfghifegghgefpgihklefmqqogcbbadgosrz}wxuyxyzxwwxzyy{}˿ʹ|̾ɶo}zu}|{`|y|zrw{~ypmssoxxpxko}smw}zes~r|swɽ֘ձ{wje_Z_|zvk\\^e|zoYL:[isuitIQ_jZRd[RWQ_wTISGIL?@[`WiWB<IjkB3@iuV@MSfgpfLL\\fogYi~nOxwzstbBQe\\sytoc`]vyNTftxZue{|zy|kX[xnLyaCd]kZPpmF0JcOgeDuyTKT`]P]ojnrq}oRORTTUVWSQPOOOOPPQU\\[Yahg_XTQMLLNPPMLMKJ=(&,)(***+,.0245310+(\"  \u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001d\u001e  ',.23122.///..-+.6.*+09AACE<EE+683B<2>C6HC8HH6.371=G3+0=1:G;KL9A5.2@Z`M5(-/,-16<@@BA@2*3DPQQNA42:J?KliJPai<`qdL?kvNQ_jZ[hJ<C\\PRQ\\C4JWRE?PZ\\E<QTFMYC41/7M[QNNNMT]ZUSQYZK]NNLFGFL]KPTTAHG?GIFKBFSWB@IG?I:6DXMKQQAAMWXKA@DJKGFEEDEDEII@:?<8;8AB@BGILPOJGHJKJMTYYZZYZ\\XUUSJLOJGDFLHFIIHFGEDKKIB>JUE<A<8?>?<B@HE?<JIMNRSPPOKIJKLMMNNRUSONOMIFCBDB>6:?99149302214689=?>>BEBDKE@EGD>AGHHJKICH<;>?A@><<;<@?ABFFEIMPPNJHIFGIHG@=AC?=;=?BDAAHIFFEFEHKHG<?CKI@<CDDKNRXVSQNMONPTPPMNQSTVVXVY\\[WVVQMRSPRTUWVXb`[[^b`\\^]]\\[\\ac^X\\`\\Y]XQX_\\QOW\\\\YVY[`aWVZ^`^^_\\Z\\VORPO[_Z^^URPVbXT[YY]ZY_^\\ZXX^]][Y[ZUXUSY]^_c_[Y^ZZZXY_\\ZZ]`a_]^\\[\\\\ZY[ac`ZVSVXXZ]^\\XURNS[^]c`VW]_bdc_^`ba[]_\\`hgacjlgeeba`_adaZ[^UNPRPXYPKMRVTXPKTHJGMU_\\SU\\[I?Ogzuyxvvy||yvtsz~~}|~zvtqpsxz{{||}}}~|zwuuwyz|}|zywvwtnhfc___[WV?=;:620.--.-,-/1357899;<<?BB?<=?@ACD??CFIKD3:A(+HLN`WB@FJIFEEEEGGIKJHFCCFGJKFDHIFEIKHGHHHFIMNMMLFA<8:<<88F@8<<CE?=?@?BGFDCCBADGFFGIKLNONNMGFFGD>=BECCFHEBCCCFMOMLKHKONQVVSONQOJPTMSQIMKNNIMIELHCCAAGDAABA??@@=====>?BGJPSIJPOHKNLUUIJV]WHNJ:Ug]PP\\a[^eadbceeik_]]WOScjdcdhk^ZXOTYTKda@Kh^amjZT[]]llkp}g\\aomwyuponhflqrxssaimgjhsUXINR`W_NYjffcbimxuuxrlhnuoononqhhhdjwiaa\\XYZhbfe_krnmi`pojjpmjmqkdhiiihllfhhggjiegjkhjmlljciqoffebdfjlmkhgfgjhdgommlopmlrtusroonoqsy{x|zvur~yvvuuuvsvy}Ϲxʿjhr|}qhzyrldkhgwro{itsms}xr^t}tw{{svž¦۶ǩtkae[czz{iUVdxuk]O?czdqnokJbanWUmZ[Yqz_HWYFQF;E]U\\hRF<YhT7Qhj;>Sgk`nWMNWgxe_hcPwrrqnbJQgXmtpla]Vn|PVlxtaio|qzqntmVizNyeEec^Kh_vw/5ai`nUHxjNMY]TUltgfioxzhRPTVUTRQQPOONOORTUX^]^a_TJGHFCACFIJJHHGJC,&,*&'()*,.12453.*%#!\u001f\u001f\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001c\u001c\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001d\u001c\u001e&/6;;;9223348==3,581,)->C;HG?I8-96:B;BC7H?QPD33A89E5*.<?0AAEOD:=6JT^\\E.),-.0226:;;A9:7<JNMOKC518LFIUl_GRhe<ckcI?jkLQajX]dD<QWOPZ[72KRME?]dJAHTMM]S:3/6K[QFOTZ]`[SNGM][\\d[]GCFDU\\QTPUEHDDGGFICGRU@;EJCC66HUIKUO=GQ\\UEBBFLPRIBDIHBHKG@;@<;=>??BEIJNOMMNLHGFGKOQSST[]YWY\\RPTQIDJLBAGFDBBABJHC>=MTC=@;7=C77?BC?<<JLMKRSQOJIIKNPQPOOPPPQQQRRMGFHII:;?888:;57;65;=:>BACCEEBEIB@CEC=@EFGKMJDJ?:>===;:86:959;BDDILNLLJFDEGHGE?:@?89:<?A?<>EEEDBEDGLMKGEFLJA?DFGOSTYXUMJJIHJMKJIKNQSTTURPQSPPVXV[[QTTSSSQXZWXW[\\XZ\\[[XST\\ZQX]VUWQKRZYLFNRSMHOQRTOORUWZ^^[Y^ZTTUW\\\\YWZZ[\\[ZTX_\\\\ZUYa[WXWZ]]_XU[[WXRPZ][^`WWWYXVTQXVQSUVY\\\\X[[]^]ZVX`e_URTSRQRUTPNNMLS^dceaYYZ[_b_[\\___]]ZY`d^Y^ec^`ba`_]aec^`^UTXZY[[WVTUZWZOLXKJFMWc]RTZVEOjxzy{xuvy}~|zw~zzz|}}}~{zwqov}ytw|zz~~~|z|}z{}~|zyvqkf^ZY>=<820.-++---.12367888:<<=@A@<9;=>@B?=ADIM\\TFD).GMUTKGFHJIGFFGHGGKNLIHEEIJHGIJJJHHIIJIHHHHJKKLLIFB<9:<<63?=6:<@A?>?>=@BBBBBDFGIGFJMMMPRPNNMKJKHB=@EDBABBBBAAFNQPQNGJOOQUVSOOQOEIRINSJJKMNMQMJQPICBFKE=?@BC;<?9=@A@?ELNOQURMJOKEFJTMCOXZVMVH?`i^TXfc^gidhghkmrpdffdcdknorruneiYJSXRSbJ8Tf_nwtcZbot}~sn|yw|{xwusplhhjplww^bifkeqSVGMQ^UYLYkddcdlpz{yunkegolkhhhgegedhuqgjjedgrmnpnqqmmlkroihokfkkhdhhilhlkffigfggdgjkhhgjmiehjiedcabhkkjggiijmonowvutuutrtuwwwwwxyxz~||~ypqozusqoquvsrw~ʿϻ{˷|[rp~vmnw~}uqj`dbY{vk|kykmloyppb\\m|||y~|rpƼȢէsggg\\fux|fPRcupi`SHhncniwbPoqfP\\jc^]xmOSeL<NHPU[Tec[NHQ_NRw|C6QctXZcK[VRat|lrgxs]]zqrzligRWl\\jnmja]RgUY~yxhcc~v|juifnoSsObH\\dQjnkS-LyotFMz`Wd\\UXbmmdcflssgTQUVURPNOONMMNOSUVX]^[TLEDFFC@@@BBADFEEGE3(+*%%()*+-/252/*&#!\u001f\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001d\u001e $,24::4-54:?IRK=/4=<94-5F?@HC@?39<6=?FI:?BiY57GB>79/2DQ92>PR>=BJPQSV;+&(/-++-/2;@CJWWYWLDFF?64@RG@OUfWDRi`CdcgD=hjOTbiY`dD?[RMN`M-8ORI9Mr^;MPKM]W<2/8LXOETfmkaXQGEQaj[itj`JGFE[U[UMTHHCJFDFFEHTS>6@QI@47MRFNVL=JX_MEECHP]]HGKRIAFGEA=A<=<>??BEEHLNNPQMEBBDGHJKOTXWUV]`UVYTLINKCCDCA@@>@EC>9:NPC?=86<A78@CA=9;NNLGORPLFEGJNQRQPONMMOQPSSIBDHKNB>=:47A>9AB9<@?@ABBCEECBHIACEEA;AECCIOJELA<@=::9866;3/89==AHKJIIIEBDEEAAA=>=68:?A?<;;=AE>=CBEJIHHHIJJDEJOOPOQUWUKLIHMMNNJKMOPRSQOMLLLKMSVQRZTKJILNIMONSSRUVY[[[[SNSUMNRQQPHFPVSIELLKF?IPMLKKLMMOW^_XWWWWWY\\]XW\\YXZYWTX[TUSOV]VQQQTX[^TQWYUWTPY\\W\\_UTSSRTRPSMKMONNPTUWUX]\\XRPYa]RQTROMKMOLGJRTW^a_`^Z[YVZ\\XVXXZ[[XRT^`VS_c[Y^^[[[\\`a_]_\\UY_b_^]\\\\[^c__USeSNLPZf^STTQ[x|}ywxyxwwy|}}||z~ztwx{|~~~}}~tquxxtwzwy}}~~~zyz}~{|}~~~xqida`==:50/--++--,/12478998:<==>AD?99:<@?;;@EONkrA8<?<JJEJIEFHFDDFGEDFHHHHGGHJJHGHHHGHJJJIHHHHIKKJJJIF@=<<?:8A?=CDDDDB@>?@==CEFIJJIGGJMMOPPPNONLLLJHFGJKGECDFGCCINOQVSIJOMORTQNNPNEFOHFRMCEHKMONLNUPDEKJC=ACE@6;@BIJJJKV]ZSSaaSPVMJIJMDHTYYTTYJLhi`_fhacmkjlhiimvshiiloqpmrztpjrxXMVRO[WDQilw~qlt~}|zxmlggmhtv^\\ehlcqTWILU_TVNakgjiipqy{{sjjfemmmebhbbgfffqwmpwtuvvurssqmllkoligdihfgffdihilhkkhfigcefddghffehkiggffedccfjlkjikpssstuv{xxyyxvwy|{zyzz|~|sjmnuroompvuwwzŽŨƲ~tlzf~~epnak}wzyomjc_]Pwt~{mswob~egitbiXWjjuvuqjyxĹ°өط|zdml_kxvzbMNbsnh`VTecbghz\\XyxTRb`l]hmjR^aA=SZc_XZh`aOGUkb{|S:K^sdQ^ZZfML]Ztv|zxf\\ixoqwgdm[\\maglni`bQ]|[Zxzx_{c^lw}fmf_tnQ|m\\]OJgxeK;t|l}hBZneqgV]ajgfkedltskWSUVVQNNOPONNNOQTW[^ZOFDGIHFCABCB>=AEEDED8+)(''((*,.124.)%\"! \u001f\u001e\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001d\u001f ! '482,/9PPO]U@78:89A7-<G?AC??:587;7<N9/OpU/FGEK.*6=OD+4UN@4?GHJILD8-+12('059>EJINNH>>CHHB?>CPR<JGU`NDRj^Ic]h=<ekRYbhVbjMD^QPJ_?(?SM6>meHL[JJ]^D4<GZ_TN]qtjYKCBM_he[grouiDMGIYNdPIUKGFOB@DDEGTO=5>YO?1;TPEPTI?L]YGHEFL[i[MMRUKCBBBBAC>@=>???@@EHGHKLIC@ABDDEFKPPQUXZXV[[YVTTLDDB@?<>==?<:69KKD@8248=9:@C====NIFCMMKJECCHMQROLJJKLNONSQD;<DMPD<<<4:;:>FB=AAAA?AA@BEBDLLCDFD@8?DB@DKEDG><B>;;::69>0/979:<BDCDHHEDEC@;<A?;<:76@@=;;:;?B:;@@CEC@ACFFGEHLQNIFHMQQKRLLPPRPJMOOOQOKDEGEDILNQLKROLIHGKHIKKPPQRTWZY[[VOOSOIHORJADNQOHHNGGF?HQNMMKKKIHP]`XTUVVVX\\[SS[WVWWTRTSOPKIS\\RKJLORW[NNWYTXXTUVUZ]URQPOQQPNFILLKJIMPNHLSXULIU]VMQTSQOLOSPKOWXY[XX\\ZW[WRWYSQTVTSURJMXZSS]^VX^]WVZ\\[]]ZZXVZ^]Y[]][Y`c_`YXh[UST^`_WTSdy~urwyxwwxyyz}}~}}{utwz{|~}|ywwyzyy|~|}|usqrx|}y{~}z}|y{|}~}xtoifdd=;72/-+,++,,-/1359;;::;==>?ADD?:9:><9:=AKP_S=D=8>ACMOFADFEEDDCCEDBDEEEGIJIGFGGGHJKJIHIIIJLLKIJLKHFECECAJIHKKLLJGEDDB?@BGJLLJJHHIJKQSONNPOMLLORRQQPOOMLNLIJMOPRXULNRNMQRPNMMNJFMLCMN??BFLKMNMRQHJLGA=AD@::@LYZWX_aeidY^mg^]a]XXZPK[Z[][^ZR]nfafkg_enfmqgeekvrmjjkqpmowumln}Y[aYW`_ex}|{prlbqmpr]UbhjcoYYNK\\b[^Vjonupmsqyyyrjligknpfbjbejkjhnvnoxwwvutssoiihhekfcebadedcdcgfhlhjkhffdacedcefeccfgfeefefffhnqqpopvyzxvuvwwwxz{xw}}||zzz{hdklnonnmpvxwwwòıŸ¾ĵzogszicbdU]qzv}zjehd\\VLiuujn~mVy_aaq\\cZS]f|vokgfwvrpʯϭկζ|yfovjozutZKH`plfa_]__^]gxZ]y~nLZb]mgnivS_[GCgn`\\T^lh\\GGodsk_<KSUd^[LVo^ACEevmp{`erglvf_la_icaike]kQTu\\Zsp|^xd]kq{ZcgVkZizvcOE{uyvQU~dbNDgx_uwNaoYg__gabnxxr_TRVXROOQPONNNOPTY[XNEEIKLIEBABDD@@CDDBCD<-)*+**)*,.121+&# \u001f\u001e\u001e\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001d\u001e\u001c\u001a$/3*+.L_P@MZI>:0*)463.=C::=;7404=/6I3([jK8O?VF,4>@H/,H_737;<:AFE2.3;5,:GCB@A<<=?=9/8FGEDDHLPB@ADU]GFSiZKb``2=`kS`bhQenSOaSUI`:-EO84[oETcQ<^dO9@`g[QWhrjZJKUcjnng_bhftmS>THMUMdGLSMHHQ>>FDBESJ<4A_M=/CTMFTTFCU\\OFKFJRhmXRQRSOECFBCCCAB@@?><:<DB<<BDC@AA??@BDHJKRWUSUZ]]^]WTOIJD@=;=<<=;918EGF?447498;@A:CA@KEB@JIHJEAAFMPQRJEFILMOLTQB88CMMB<>;6=:8@D@@DCA??B??DDBDOMDCGHC7:@C?AD?C@:>B@AA><6:>,/729:9>?=?IKIKIFEAAHF=<=86==:886:?;9=>???>=;ADDCGGIJE=?BGJJGPJLNNNLFJMNMMLH=<C@=CHIMKHONMKKJLJKLLONQRQUZYYYWQMSUNKORKBGMNLHMNCFHDJMMMMLMOMKMZWSQOQTWXZWLOWOVVURPOLNKDFQ]PIFIJKTYGFTXSXYTPPP[[RNPONNQOJHLOPRROPMHCGLPMDGU[NHTWQQRPRUSRTUTVURU\\XT\\XOUYRLOSPNPMDGRTOSYWTW\\[VUZYWZ[VVVWZ\\USUXVTR[`Z[[Z^`XUSa^ZVUf{{zvsvxxxxxxxyzz}}xussuwyz||~~zxx{|wv{}}~vppx||zz{zz}{}}z{|}|vsplhebb:73/,+))***,./1359;=<:;;;=@ABCB>=;:743569HYvS>E=5:EFVnV>CGHFCAAABBABBABEHFFEDFFFGIIHHHIIIJJIIIKKMMLLKMKJSQOOMPPNMMLHEHHCHMLMKHGHJHJTRLLMPQMKMPUYXVTSTTRRPNPPPRSUSMRSNNQSSOLKOOGINBGN>:;BKINPLMMMKHC===?IMJPahd`eqpmqh`jnbehmoddfa_h_\\`fd_]bmadgdg_fj[gpha`iskklclrjjsxkkv}{iuxrkp~|y||~wvxastmm_S]ghco_[UQejggartw~vqwrwuupnmgmnmsmgmghjojhmrlnuspmllnmiecccahedc`^_cb_acc_flgfgecb`abcaadfcabcddefdeklnswyxxvx~|yutwy{wwwyzw~~}||yw||{|zuddijlnnnnquwvszºªųźznfb|\\hW\\UWct|sxxf^ca^PIbwmfnsYoZ]`hY_^TMl`vmgaeqvztqxw͵Ժ־|zio|ym}smTHF_lifdfd\\]\\Wfx[_u~_T`[]kpfkyM]YKPumSZ_gh\\K@VjUyWRU?TMIZkL5`sO45VSGV~ljfkreZfcdeeefhbYpTTnXTni}axh_nk{y|vLZgOofZ~]YU`t|mbvnPjlSPe\\X{ZOvgRZUX_`epwzwdRQVZVQRQPMKJLSYZWSJDFJLMNIB@ADEDBBCBBBCD<-)--,+)*,.01.)$\"\u001f\u001d\u001c\u001c\u001c\u001d\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001c\u001d\u001d\u001e!&%&/@ZL;19PVMB8-,60:11=:49832,/>63F9._UFFWRZ94CEB81IaG03327?NI9*>=24FUOB81-.48237>HLKJJIHHG81BBWXFLUlSP^_N/BZfK`jfQinMX^TSIZ<5IF.LiNQnV6TgP>DgfRDPej_RNWcortpaUWZVelUP>YKRSO`ERMPLIN:<GDBCPD90@cL:4NPLGXSAL]WLKMFKZogZSRVSOGMJCCEDDCDBA@=:>A<9=AA>@BB@>@EHHHOXTMR[^]]_\\WVUTRMD>==<:<>5-9BEF@9?>29@<C@>FDCGDB>HFEICA@DOPQSI@DHJLOKTRD::EMH@@E<9:<<>@?AA?=>D?9@IDBDPNEAHML:6?B>B?=B=8=A@BDA=59<,330<87==:>ILNRLJNLMPOGDFD@=@7342;>66?>@?><?:?ACCIEDD>8=@CFFAIDHIHGEBBIJJJJG;8BA::@DKIFMLJJKMMKNOMONNPPRWWVUVRMSWXTQSOJLNMLKQPEHJHLJKOOJPZQNSXLPOILSWXXOENOJVRRROIJLC@HPTOIADEDPVA?QWQVZTOMMYZQLROMORNMQSTX]ZUTRPIJOPF@IWTJJWYPLPSRQRRSQPSQNU[US\\YNTXPIKNKJMKBDMONSVSSTXYTUXWUWWQUWW[YVTTUTRPX`ZZabbc\\XQ\\VSPh~~}{{yvtuux||zyzzz{}~}{}}xusqqtvwxz|~}}xwz}~{xwz~}{{zwsrqoos}~}|~|{}~|wspnkhecc651-)((**)*,.0246:=>><:99<??@DFDA>9/**,-0EX^^I=C>59CCGfjI@HGDA@@??@AB??ABEECABDDCEFEEFGHGGIFEGIJKMNLLOQNNQOONLOOQQQPLMOJFJMKKJFFIKGIROJKMPQKJMOSWXVTTVUSUUSSQQQQRRPRTQPQUTRNNPPGHL=?H<58AIHMNIIIIC@@=CEO^_^gnjddmvtoqldnm_hlrsffhjhee_akaed^dZdfcf^fhTdog]Yblgji`khakzyltslp{rz}zr}{kx~ppcY_ggfpjad_qusolvsy~uq|psqrorkgqpltqnohhjnhhlnikokgeggffgdbba`ggeaa_\\aa]\\_]U]id^]]_`\\\\`aZ\\ec_`a_dgjfciqtx}}|zzyz}}|zqnuxvzwwuw|y}{{|{usxww|z~odfjlknoorpryŹ~͵ô²nzzxnc]lfhqTURSZbu~ooreY_`cKF]|yexfosnjTWdhTW]UMrqYtxmn[rdiiqjpr|vмѼȧȿǣ{|lx|nwpiRFG^hffdlcWYVTdsZau~sVY^Q[kj_spPaVL_sYHbmgUF>BbYem<SbUVMKga;Mra<8Z|e*VpE_j^jm_V_abbegac`Zl[]gVKhawf{leoeotypFWhOgnT|oJkhZikqaDxb`S]LcrOerTRSTW\\_eoqtqbTSW[XRRQOLIHMZ_XRKFDJLLOPH@?CGGFDBA?@AAB;.(,-.-)+-/0-)($!\u001f\u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001c\u001d\u001c\u001e\u001e\u001f\".7MK5432?S`b^LOV-4633411:4/-*4:.DD<YBAVihQ?4EC8>VibK-'418AGD<=<8=DMSNC::<ADB:7<BFGGFA@BH<%1OIUQFSemFW[^I6JV\\DfuaWhh[\\JVOJO:=C?@XXHf_EGgQDIilH<M^\\QPYerqghh[RTXUXbeV`J\\NUQQ\\EVKOKDL=8HEABM@9.?dK<?TKKIYK?W]POTQGLbo^XRVgXQS[JCCIIGGFDCB@=>A>BHGCBDECBCGLKGKUULMZ^\\[\\[ZYZ[\\ZVLCB=<:<?117@DFCBGD;DHCHFEGD@@@?>GCDGA@?BKORUH>BGHJMJTQF>>GJFAAB:97>?>>>@><<CA8;AFDBCNME@FMO<6?A=B=<@:6<>?@A@=6:<4;34<46=>=@HKNPKIMNPRPLMLPOEF>866?C;7??ABDA?;@=CBMDAB>9=AAAC=C@DD@AA>?FGEGHF;8@A98>CJHELIHGHJJIKLIKMJIMORSRPTOLQTUTONOQOMKLMPQLKHHMKIPPIS^VY_VLROKORTWXIANGHSHJRJELKBCLLKQF=@@APS<=MTOUYUMKMVYSIOPLPUPQWWZZZWSUY\\UVZZJCPXTNRY[OEOWOKRQLIMUPLW[TSYYPRWRIJLHGHGBBIKNRRPPOUTQSXWTVQLVWUZZVTTUTTRXa^\\ceeb\\ZQVOMc~}}{|{xutuuz~}{|{{}~~}}}~{wtrpptwwwwy||{x}~||~|zwx{}}}}|}~~~~|{vsqoklw|||}zz~}}||}|ywwuspmjigfdc21/+(()****+-/137;>?=<:889;=?DHGEE=.'%)15BKHKE>A=7337Bl|Q>FCAA@@@@@@>>?@ACC?>BCBBDECDFGIHGHECHKJKMKJKMNMMNMLIJOPQQPQSRNLKMMKIHHJKLLNMNKKPTMGKMORVVSQTXTSVXWUTTRRPPQSSRPRVUSQRQOJKF=BA98?EHFIJFEEEBAEJOVbecmrljikouspojnukdlmqnbbccdahb_ndd`Y]\\dfee]egYeogZY]dbgb[gcbsw|}zm_eqkp|tpsgt~s{vvnflnilvvnsqzwstrsru|ur|plnqopjiuqlvuqqjhknhillfjlccddeeefcba``dhgaa_[_a[XZYPVdbWQW]^XV\\\\TYeaZ`a`fknhhpuy~{zzzxwuwzzkisurxywsv~|}zz|zqptqs{{vlbfnronqrz{~vпǵy|uqwwn_``r\\}XLKQVXmkajdV\\^aODWw{^hfosvgRTciRL^ZS[^a}ynu^af_adanmvxxʠТϸ̠wkrxpmdPFJ]cafeo]QPSR`lZcu}dRUUJ_hcdye[aXRhiAFcc[MDIQ]ZmXKas^WXXqTSmcQWssQ-<z^H]e}|XcfXRX^^]ak__\\]d_efUJj[pjnf{ofjpylzGUiXzc[Ue?ytV]~~Z=wcmIVYlcQ[\\RSRTWY_egfkk_ZUW\\YTRROJFIU]WOKGFHKJLPOHB@FHHFDB?=@?>@9.*2001(+--0,'$\" \u001f\u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001b\u001b\u001c\u001c\u001d\u001c\u001e\u001d\u001d!)<H8:>519GZouhqi,(.760,8B30-&&2.=BGE?CblZC?@K82On{dG08?08AD@?><DFNYSIDADFCDBADKKB>>=8BJF0,JO=QNHdydB`Y`H<NWO>s~]\\faaXEXMIM?@@?QULXcFJ]WKPYfF:IVRLR]cfgikie`[SXJ\\]eeeZ`QRSXXFYKNI?J@6IFA@M=9-BdJ?KVGJIYHHbWLSZPEMfjYVV^bX]m]LEHNOHJHEDCA?@CHLKGGHGBDJILPMLQRLNV]\\YVVVYZ^_``ZNJE>@AB=037?DEEGIKLMLLOOJHE?9==>GBCG@@?AHNSSH<@GFIJHSPGFBFIDC??<9;=>><=>=?B>6;@BDDBCMME@EKL@7>@=B>;=82;;=>??=:@@>A7?<9?>CDCIJHJJDDJKOQJIIOSNLFB@=@EE<=@?CJG<=E;=?JFC@=;<><=@:9;BB?=@;=BC?IDG?9@B;>EFHGDJHGD@BIIIGFIMHBJJIKILSJLPLOSLJNSSNIIKMNKJGGLLHMOJS\\Z]^XTTPQQNMTZG@I@KO;DNDGOMFGLJHLA;>=ARP8;IOMTYVLFKSXYHMRLRVQSUU[]XQQWXZYaecUNZYWXY\\[NCQ[LGRPFEPWOMX[SSVZRPWSJJJGFEDBBBGMSQKFKSQORXWTULKXXTZ[WTTUUUSXcb]bcdc]]QLW]~||{}|wuutu{~}}~{|~}xsqqsuxwvtwzzwwz~|xy||usv{~}zx}}{}~}~~}}}{x{{|zzwxz}}z{}}~~}}~|||~~zwusponjgfedcb//-*())*,--,-/137:=?=<;987:=@DEFHHD6)%)38=@AFA=>87508Af|U?@@>>??ACA><;=>?A?:=BCCCEDBDGIJGFGCCGJKJIGHHHKMMMLIFINNOONRTQNMNOMMMOOMRVUQNPOOUWLFLNOQRRQNQSTUUVWWYWWTOOQTSRSTVWVVVVUTRIDIIBBJNJILPMHKRROT\\^acbhrpkiiossrpnhtxmlpomjeaafmkmletrh`faefjid`fjfhng]\\cegg\\Yfow}zsxtttu`S]kenwkhi`iusuryyyxvzwtrz~|yz{wrrroppxtoumhjnmmiktpkutqnhgjjeiliehhbbeeeddfeb``_]hg^[^YXaVTRWOR[`TJX[ZQSWSSZ`aW^`hjlnjmux{~{vvvtspptwyifqrptwwsv~}ww}znpsps}}umeisxwpsư~xx}÷̨l|oorn^^[pz[yhIGNTR_}kYacUZ__TDRrzZahnryeOPWiYGZ\\YTcUkz|yptqZvgV`_WlklvyզժպѝqkjmmaOGK]`]ffiZMJRQ^iYevtVQQOM]^`kpbc\\X[q_;Tc`[LJXVSYaRTgrT^`cfVaaOwg?5EXƔOKbRQ|iXcUNW_[T[l][W[cachUEqXq}mjnculfimukytOTh_n\\NXXM|zVvXk>rzzBSmg]RQYSSSTWX_eadkh`\\VX[WRRQOKHKXWKIIFFJKJLNLGFCFHGFCA@?@A@>9,,::91*-,**+%! \u001e\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001c\u001c\u001e'<=<;:8?HG=Jcr~J660662fQ85+%\"%,79=6@LeP>@:VM4=Pit\\CN[92@>61@LGEOUUOIHLPKC?CCEE=9447FPI/7BNH6QLPuiVH`ZkI<RPEDw\\_b[^KGYIGME>>JSLSbQC[VKKM^ZEGNNKJS[]_eiic[PJTYb^]hlhc[PJS\\TFZKNH>JB6HFB@F:9,C_IBXQHILYCPcRNT[GHPgbXOTb]\\pv[QQWSPMOJHGEB?@DIIGGKHC@IPPRTPOPKJT[[ZSOQTVY^ba^ZPQL>EOK::78?CFGIJORNNPQQNJE=6:;?F@BE>@?AGNRPH=?FFIIIQNGHEFGDC@@;:=<>=;<??@@85>BABDBCLJF@BIKA9??<B=9<7/;;=>??><EDEC:FABCADIDHHDFIB=ACKPHFGJLKKJIGCABJC@E;@IH;<E<;=AGFB==<78;;818@>@<?8<=@>IEGA<AD<HQJJHDIIFD=@GGFBBGMF>GECFDIRFKMHLPIGMRQLFCHHGEFEHNKHMMMUZZYXYTTTUSIGYYC@H<MI5EJ>EKFEHKKH@;<@<@RP6:IPOTYVOKJUVWJMQLSVRSPQX]UMPWTWZ`ec[YdZZ`\\\\XMJT[ONTPGNVVPSZZRSUYRPURJJIEBCCB@?FNQLHCISOOQVUSULMXSUYWXUTSUVTWca[a_`a[\\RM^t}||}zvtuvw~~{}~ytrsuvwwutuyxwwx||yx{ztrw}~|{|}~|}~}}}}zwwz{|~~}|}}~~~}||}}~~zvz}}~~|zxsqmhdccddbc--+'(**),--,-01469==;>=978:<@CDFGEG?-*268=?@<5;9573-=N`fTB7<=<=?CDC@;:<<=>;9<ADCCEDCDFJHBCD@BDHJHEEFEGNNMMJEEILLMLMQQMLLLLLOTSNQZ\\UOQSTUWWMKPNNQKMOMMMTRPSUY[WXUQVVUVUUWZZY\\^]^^YRPVWQPW[XX]^\\[\\beabeecccjrojijpspooj`mzsvvokijklryuruu}~tqxpqqrohgmutknlgksrpribr~vuupgp}{pnroVMYc]lsedg\\eifkejvvwz}~|{yz||wsxunkonomurjlkeffejknqlktrkeefhb_hjgdedddeeedbefb__[R_eXR[XQ_QONSMNY[PIVXSGPSLW\\Zc]^akkkommtvwuqqpqkjhlpsugenomnrusw~~{us{ynotsryrlpx~wwŶyq~|þƴΣ~vmh}qffogWVd`orMBLQNUv~kTVbVY^^[FIgvYXinzqy`FLMdeKPX^XkxQZhutom`meUZY]hib~tyոӻǸѠprqj~jnbQIO^a]gea\\MFRT_iXitfLQHKS^\\dlehd^`frYEbg`VLRVCHMWKK^dZedaUUXRm`;?USZIF^P;VZ^SKV`ZOTh]YRTcb`hX?q_isghm\\smfgyojmlWS`mkXAWXqr`i__yviCpo<`qaaRN`TSTUWZagjpokd_ZZYVRSROMNNOJFHIGHIJJJIIHHHHHFECDDBABA?7*)9BA.+..*##!\u001f\u001e\u001d\u001c\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001c\u001b\u0019)7/1/6KKC933?Urj_E,-5Ma/>7'%*&1>3/?TZ31?9fI:R`rnVW_D:KI20;?=>DHGFILMIFCBCEEA;8:9;EMJ:<@LE7=SJew[HM[foG;YLBSh\\ac[OCIWFFMC=ILKMZ`QUUNKOYcXLJJIHMOMT_`XOJEGPV\\^]cjrl[SLBQ]OFZIMF=KB8HFD?><:.CYKF`LHIOWBTaNO^RBTTaXVK__\\k{ma_`dWS]XOOJHC?BDA>DPN@ANPQY^WOMHHQZXWSHJSVV[bb`]\\ZUJGTVDACBG?EGIKMOOKLOPPQOE<8::@E<?A=@>@FNLIG?@GHJHLOLEHCBDCEFB:<?>=:9>BE?32>C=?DDACJHFBBGJB=A>8@;7:44;:;;<@BCHGNCDIHLFGFHCABBAC@87:EMGDDEEDFHHIHD@HFFL=;FG>>D?@==DJF??<45:84/6=9@;?8>9<AGIFD@BGAMTOMGCHHED<@GGE>AHMC;DB@BAGOCIIEKNFEMQOKGEIJFDBBJOJIMLQVVUVWURVXYMAGUUABCFN>8IE9C?;CIIGA:;AB7=QG8=KWUUY\\[WS\\YRMKMKTWSTHMX[RLQYOPY]ZXZ]c[]bYYPMXZ[YZXSUW`VR\\[TQTVURPSIGKIC<BEA<=IMOFGFKRNMPUNNSMVXOUWSXVTQSVSWb]X]ZXYS[QV|~}~{utvwy}}{}~zvuwxwwwvuvxxxwy||{{xvw|~y{|}||~~}{xw{{z|~~}}}}}|zwxz~}}{zzxurlgca`aaaab++)(()***++,,.1248;<>?>:999;ACEFDCGB99<:9<=;99;8771-?U]ZWI9;<::>ABCC>;;:8889;=ABACCBCFHB?C@?BFIJGBEFDIPOLLHCEHJKKKLLIEFIGEHOQLHRYUPORSSVXUPPQNLLGMOKHJQLKOQWWSTST[\\XYXX[^]W[_^a_[Z\\_^XW[ab^aggd`digijhihfinokfgmpnnk`Vbno{xopouxwtxtsx~}~}}}{x~{umooz~povvz}yx}y}}~|nqsh]k{wlerlSKW^Xjqcbg`fe^cacnqvz{zyxxvuvqouskimmmkpogjifb`_inomhkrldadea\\^gidbceffffdc_\\fc]_YMUcVJWTRURJLKIJ[UJEPULCMML`\\[hd`dffjolkrorokojlgeafpoqecjjjikstx~yqnyxmotuq}~trv}|ĭxlqxx˿ñХy|rzz]mxhZ`iWP]wfe}wV@HNPQl|kRK[VW]]aLG]mVNfmwo{]@GDSdRGTZ[[}ZNYlnne}kcPUXglah[ss~{xԱݿƙ˼ʞ~y|qj{oraPKTab\\he[]NDQW`gWnqXMQEKT]Yij`i`eihoUPhhTMSYP8HN\\JMXacjZQMRZP>EZYBiuFF\\R>JhmZSITaZMOd]XQI]d]d[?llgna`pVqqdhkmcfZT]}dT4UadF\\mygdJsPCp`gaSQdTTVWX]djooklhda[UTTUTTWUOGEEFEGIIIIHEFIIHJJGDDDFDBAA?7*)3@E,+..+\"\u001d\u001e\u001d\u001e\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u0019\u001e*&\u001f\u001b+GH:614:8?dprpRA-<Z~o$>G6),1/F:*9SS/,8;sOE]qv`OSID]M+-?H?447;AECB?;:>CHFGHDECCDC;1BGB?6:LVOwmf?Q]vp@CaLHl_^ceVDCLQAHL>DQDDQZ`[XJNLYeYHDEFHJKJS_[OILWce\\PMV^hnnlZPI>P]LO[FLE;LD;GFE=;@:0BTIHcHFISRBVYMOa@NZUVSSUc_gxvdidgb\\ii`\\SMIFDFC>>HTJASWOYf_MHJKMTURQICMUTW^c`]^aaRJU[VKNHIF?FHLNLHHILMLOPJFA<99AD8;=;A=?DOIEFAAFKLGNMIFH??@BGJD:>C@=77@FE<2;B<:AFD@DHFFD@DHA<A<6=:6<8::::9;BBHHOMDKIIMJKFDCAA@;<<865>JGBBCCCCEEEHJGHGFMIGGFGFCABBDFMKDFB78;5/-696A<@=B?AIIIIJFFOJIORPH@EHEE:?HFB<>JM@7?==>>DH>FB@IJBFNONPKKRRMHCBKNJKLLSWONWZSNTYWIBFONEC<JJ6=L@7A<<HGCA??CF@7=P@<EP]^VY`fe\\a]PSNHLTYWVGIUZNIQ[JKX]QQVZ^\\_ZXWSV\\\\[__WV`adU\\e^PPUVPSQPDCLHA8<F@8@LLLGJSRQIHNTGNTNXROSTUTWPQRRSW[XTYUPSPYPgyqrxz}~~~~~~~~xuw{zwwwwwvvxyxy{~zvx~}{}}|z{{|}}}}}xvuuwxwwy~}}}}}~}}~}{ywtplgdba``__ac,,*('&(***,,,/01368:>?>:899;@CDDCDECCD@<<;:;;<;::7/0?HEZjQ>;;;;<>>@A=;98888:;9:=?AAAACCAACA@DGHHDBEDELNMIHFEFHJHGIHD@@DD@@EIFBIRRNNOOPTVVTQONLKIGNKCDKNHJLPUQRSORY[UTTY]]YRX]]___ac`\\XY]caXYeleX]dcilikjgegjgabehjlgZTY]euohppwztjmjlox{vxzvwt}toqmxwvz|~{tu}z}yvyyvv{{mttdYhwui_okTLVYUhqb_edfb^cgfpvyyyxusrpppmnqpmjolmnnolkkic\\aqrljimoh_^gi^[gmjhfhifdb`__]T`j`[[QJ\\XISUURREIGEH[RDAITOIJHUi\\aecdebgoojlpgnngkdfcf_aplobbjeihiuuuz~|unjssjkqvns~quvugsw~պ̻ķ±ǽΪz}yv|rzzlwcYur\\Q^aPSl}g]q{vaKLMOP^sjQESST]YaSHXdWMblviw_@F@C\\_KNTVYot^JOcbfd|slNRbYzYeXp|}qĦѸϜϱʻw{{oxu_QR[fg[ieW_TKRZ\\e]keQPQDMU\\Ykg\\d`kkhhOXi[JQWaMDKXdVTY[dfEIPR^Fs@AWMHgCM^OBR[\\SIP`[LL]]VQBWh^a[Fktfm[VwuWns`nnpZb`QfWX0UguSC^u{_lyPw<UiTvb_TbUXY[]abcedfrspi[TVZ_a`\\QIFHFCBDEDFHFCFHEEHIFDCDDDB?@>5++.<I,+,++&\u001f\u001e\u001e\u001c\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001a\u001b  \u001c\u001a\u001d)89996<GA@aMYwtoTVU|,.<@9*<CCI95FK995EyMJ\\ibRFAJW;'0CPWXVSOHB?=:;?CEHMOLHC=;>>67BJP;20IUZatlq9[izr:PcSSa^jgODVSMAOJBRM;CO^cXPNLM\\S><BCGMOOW_SGPesoZGER]`cfigm_QI;P]KWWDID<PK;IID;;C<3BPGPaHEFQIEVPLUYAYSPQSU^_dmziehce`qthg_RNKJMIHEDKQHT]QM^iZLJNNNQMLIBHQPOX^\\Z\\`b`UT\\[XUQRJAKHIOKHB?FJJJLIFGDA97?A6788@=>BMFFFB@DKKCLKIFI==?DHFE?AGB<;>AEC=<@;6@JJHHFFHFDBEG?;A<5==9>:><74=A@AKPSBEMFDKIIEBBDB=:9;<:49FB:>AAEBCCCDIKJHIJIOIGLMEEDBIJMLINJ@@A802<<6B?FEGHJUKJSQMKROGJQRK@BJID8>HEA>>JL>4:8::;AB;@;?KHBJOOSTMRYWUPGEKKFJJGLMHKVYQLOSRPJFLLGG?LE2<F9;E=CKB;=AEJG<>KSCBKR[]VY_ekbb_OTTHIRVYVLHNNLJU[EGV\\OPPU\\\\[NQX]ZT[`]YRX^ba]bb\\QQRVSUNPH?KJF;<DB<GSKLPSXUTKGHMENTOULRRSWSWOPPQRTUSPQMOQPU`~{|qrz{||~~~~}|~~{xvz~}{zz{{xy{ywy{}{z|}|yz~|{}}{zz|~{wvwwuuuw|~|}}{xvsojhfdcbbdgmp-,*(''()*+,++/003556:=<9999:>@@BACBBCB?=<<?><=<<=805B>;JVP?7:==;;<??><:9985:<98;?@@ABBACBCCCEGHFDCAAHMMKHFGHGGHEDEB=<@B@?@CC;?MSOMOPMPTUXUNNOKJJLOE>GRLCIJOOJRQJKPROMOX\\UQQ[_\\^afe_ZZZXbaXTOZj`QW__dgcghb]^`_^__adifYSUV^jd^aattndbceapqlmnolkwrmormtztwvyxqq{{~}|{~xqvvrtvtqt{{~~yruth^hqpj_okTNVRNfm]]cdcbcjoms{{yyxurnmonkjkljhlhjllmlkljc\\gwoiijlia]_ikbblqoigggdb_[]]]VcodWVVEMXLORSQRHEG@IYKACHZYTOP`i_c`_lkfntnhjmajlbeab`keanjnafmdkmkuvtuxxqlhqpgjnsqm}|ioľ̽ry֤żǭ¸¼°v~vyzo|szqlz{lbvkO_pdVS^YM^uhXhoogOQMINUghVEJNP]W\\YGS_YM[grcrb?C?<Ng[LOQTbiZLLZ^\\ibwxSOpXWeXlv}~|Þپμҫϭʲzxv~xva_aakmYjgS_WMTZSefgZUROFRWZ^ncYddpkeXL`_MWX_eHMJcdZWYWcM;RVVXEt<BURSPFV^NAQWp`RJN`[LMWYQQ@Rlb^[HmwhnbTqwUot^o}pvS`jRlLve8Vet~A_f\\yzu[nhW|a:XSd}nkVYWZY[_^\\]abiv{uj^[\\che_THDFHGCDFCCIJGEFFCBBCA@@BEDA?>=5++.:S0*()*&!\u001e\u001e\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001a\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001c\u001a\u001c\u001e\u001f\",=B>@EIC9LWatsvqaZO?;=E89VGCR@9=6O?QsGJUUN@;EM7.7DMOKGGJF<;<>AEJJILNMC;:<?A??L^XA21@P\\cmqve2_trp:^\\Ujm_odGNmYJEVIR_A;GMf^LUMATN;<CEITWWWSDKfqcTGAN^`\\\\dpyrgZWJ7KXJZTBAC<TP;MNC<?M=5FOET\\KCHLGHPIR]PLUHNPUYZ\\itl`gb_`m{nhd[UOHOSOTTKLRTaYKThh]VRPLKIHIABONGP^ZSX]^\\YY^_`_WVVJQMBMOCE?:DGGHHDFEB>87??8856>=?AJDFFA>BKJAHIGBG:8?IBBB=DKC>@@BC??@:5;EIHIKGCGEDEDFB>@;6=>;=:@B50EF:DQSI=FLB@HCCC?CGA<;:;?<69C=6;=>DAAAABFHIIJICHHFGIFJE<EKLLKNLFHJA<BIG@GDHJLLKULITUNNPNGIPRKCBLOF8@HDAA@GJ=14788:>?:88BMEBHKORPLSWX[VLKLEAGGDGHGJORNKHIOSNKKPGLLSG9@B8?F>FI;:DHLNC=GPOHHLPRVVX[_`__`QORKHMQTRNGFIILUW?IVYQJJRaZRENZ[RNW\\XRQ[W][__YWNINSSQHOO@NNOB9?I@KZONWYURSPFFJCHQNSJRTSUQWKLMORQONLIFMKLWzzyvv|~{z}||zy}~~{uw|{xy{|}}}{z{{|||}zyx|~}}zzzxxy}~~|{|}}zxwtplhffeeiqx||-,*(((()**+*).11342489:<<;::;<>?@@ACB@@?=@A;<?>?=:5<A98>NL96;><:9=????<:956<>:9<AB@@BBCCBDEDDFFFDCACJLMMJIIJIHHGGD>=@BA@?@C>:EPPNMOPMORVXRMPRLKNQNA?MVK@FMLFFMJEEJNKKOWWOLS^\\V[bd_WQX[Wb_WYOTcZLS\\\\_]Z_a_WUXVYYZZ]ce[RMPY\\]YX]kmfY\\b^Wkicfjgcdjhclrostpups{vqouyvy{{yzxnntsrrtqotvzsy~}utxtggrnpujroWNVKI`i^^ceghjrsoswyyyxtoifmojhgggehfffjjghjhcZdpfbefh`]`chjhhjppigfcbb`^__^]jogWQXJGVPOPPQRSAGDLUG@KOec]Z]ecgdfattmrrkfejbcicfeddomhpkncjqisrjosttutoienmgikqmg{}lnн|۴źʿºĲr||tv{lvylpwhp{ss_boXNbg^QP\\QPkkT^jecRRODHP^e^JCGIZYT\\KOZ\\OVajapa<@?=DafQJNMUZVOMSZZlZ|suaOk\\v\\g]ix|ܻѼƮt|y~xkrm_lqWnhQaWJWZQfe^U]UNKYYZeoaYbipcYIPePR`[hTHIMk]TcY_V8CZZUO[_:LVTUBL[]NBNXZeQMNb]JMTUMQBMof]]InzopvbiyOqv[mwylz\\XofeNejG\\_yhHPbsk]`Y_zJ=PLtzgPSUXXY[WY_ceoyzrhb_bicVOGDDFGHGIKGGMMIHFDDBBA@?@CED?=>?8++4:P7,&%'% \u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001a\u001a\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u0019\u001c\u001e\u001d\u001c#0@A=@EC@=@p{fPVi]h{ibK:<=<MS?KG7:5LPTY>LJE:0<F:/6;>@@CKRL<226;?AJTUUNC>AGMPNNTYG4-:AJXhjourR7fohhFe[UxyatUI\\rXEPWKa^;FFZkSLXFHKBGIHLZ]UONLZhaVUWZ`f`Z`ny|vd[Y^L4DRMZRBBC;POAOSE=CT=;MMCQWJ?OKJJMD]cHNRCSUX[V^mq__d[Zevpkg^]VGKWXZa]OT^`cTPdpga[VQMLHJF;FNEHZ^SPY[XUUW\\cgd^[[XYECOL:<?>DEDEDGGA;759??;945;;@?GDEDB=AKH@EJI>F94?H?C;8FMD=>?A?<?=69@A@ADKIBEDFFCEAA@;8<@<:=FF6:L:;GTHA@FG?BH=A?;?F?;;:9?=89?<8=<@BA@@@BBDGIMMCBEE?@BKD:@FHHEFFDHLIGLPRNKKIJIJFLJGLPNLKKGHONHBBKRJ;AFEBB>EG>2348::9:<55DLBACGJMONPPT[WOQODCFFFIIIJKHJKFBIQMJHPNMRVKKOK@BFDLG;BMNLG>AGJLKGHMJQTUUTVZ[_UMJLFKLMNLHDDGOQQ?LWURAGPeTJ?OZRIMTTUPQ[WXY[ZVUGBOQNLJNPFTOPC3=J<KYPS[[RMPOJFEBCKNPEPVPOMVKIIMRLJLMGADDNm}|}z|}|~~~~~}}}}~}zz~~}}|}}{|}||zy{{zwwwy{}}|{}}{}}{ywwtplgfhhkqxzxv-+)(((()('+--045676789;??>=;99=CB>BEDED@?B=9@@@?;::=;87C\\N59<<87<ABABA><85:@@<<ADCA@AACBADECCDFEC@BFILMMKIJLLJGHHCADFFEA@DE@BLNNMMPOLNQTTOMRTNMPSL@CQUM@?LMDEKFBDILJHMVVMKW[PMX_ZTPNXZW^ZY_RT^WOS[XVVRU[]VRTSVVTTX\\b\\PCGVSXRQ[fk_PX]YVigcegb`baabkppqonsmmrqplqwuvxyxwxohptpqspnoruvptrs~kuxuhoyqztwuaW\\ON^kiffilpqssmmpvvuuslc_hmifecbegdecghdacdbZag]Zadeaadfiihijkmigecbbaba``ckmi_U[TMYWVUTROXFHKOTOISVhdba`fbkjohvxpoligckjdimrjmoprntkljjomusijnssqqqkdnmgkkqmf{ǿ}nƺʾƾswzqr{{kl~{jet}j^wrrd[jhVZa^SKXUI`kSVmd]YOQGCNZa`R?BDQ[PcSQ[`[W_eakZ<?==@ScZOIHILPNKHQ^g[iqjo\\cbgbfag||{ȰÎƙ|yìzsYdsZqiSbZJ]ZXc\\UXe[OQ_][jk]Z[nl_SGY_K[_abEPERmPXlUaD:N^WMLuEBOTRXh>N^]OEMWPiRRPh`GIORLNGHno^jFr}qspdxMkzXhws`wpWizbUYkOh\\biNkfebQIo}p<:H[uuYIQTUVXUS[aektxxokiee_REBEFGGHHIKKJGFGIIEDFFEDBACEEB@>>?:/-;;@9-'##\"\u001f\u001d\u001b\u001a\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001c\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001a\u001c\"-:=>?AB?=;hvaLC[^btlc];/415;NLAE:<BCJKG<D;45APQECT[QJJIFGJLNJB?==@FIE>;<BHKLORG42;LRHLivgolcA<mjfaPdiXvzqejONqxPL[QSiVCKHfcLSPEIBRPMRXUPMNRZb`Z_c`]Y\\ivxupmdTQX]N<@NPVQIHB;PRHMWIBEXAHPGDWQF;THLRIFj^AQMF[[[ZY`mg\\aYW_mmghfb]PJU_afc[XgmfdZZosgf_ZVVTROBBKEDT\\PMSYURPPS\\hjaaa`bRENQG:>A?DDDCGJD<866;=@=:757;A?GCDD@;?JE=@OP>D;3?I?A5<LI@<<AA>=>;<?<<ADGMKDEEFDBC?C?<8;A;8CJE;AD;>GN?FDEA?HH;<:99A?;7:;=A=6:?=>>?@ABB@@@BFJMOIEEC==AKE:?CCB?===CJHGIKSSHKHJFE@CEEGJKFGHFEMLC?BISN@DDDBA>CF>662;<<99=43DL>=BBFNRMKNTXURTQGIJHIKKLLMBEKH@CNKFHJPKQWOTZXLGORQKHLTQF??ABHOKCFNGNPRPMOUU[XOIKDGJBGID?>DSONANWNPBDOaLB>QWMHJPPQPQVWRU^XVTCFXRKOTQOPTML?>FAAPSRSZ]RPOMMICCAHLM?MXNIHQHFGOQLNNJC=@G]~|}|xz|~|yx{}{w~~~}~~{{zyzwuy}||}yyxx{{|~{{~|yxxuqmjhfghhihgff,)'(((((&*0347<<<;<<;;>AED?=:;DF??FIHHEBB?<AC@B>::99956L`K7;=<:9=@??@@><88=BA??BECA@@@CCAEDCCEEDBBEDEILNHDHJIGGHGCDGHKHBDJIFKMMNMNPOLKMMOMJPSONRROJJPSPE?HMGLOEDGJKKKNVVKN[SHKTYSLMRXWUYVZ\\RY]WVVXURTNKTXXVRTTTSTUWa\\KAIWRRLL[hiZQVXUYgcbf_]_d``cgnonkjkiimjigmvspststunflsrrsplmrvutvqrxgutttwtu|tzyojjc^bntqjhlsrnmkehrqkorj\\[chede_Xch`e^ce`_`ad_cia[_cdhhfdjgaggbecfe```afcadhjlilccc]bb`^]YSWQOTWXa]]^dcfb`iiourirunlfhlhkplqyzoqypuqtmlkmnpoljllsrnotl`mphklotiwm~½»otynpv~}kcw|lajymYcxsgc_`h`YYZTKQTGPi\\Pgf\\^KQT>HY[ZU?BINXOc\\QS__NVYVZE4:;<ANY[SLIFHLMMIL\\^W[l]nbde]ze^cbv~{ѩ ʓŋ­̲zS`u`tl\\bbNaZf[UT[kaOVa\\`nc\\[Ykf_UO]TPcaePHTEVfIchSZ?FY_NHS{eAMNQQ^T>P]]QHHQGkPWQjfKELQHHJGl{doHlixhsUcY^z~qXky\\[gxTPkNmXoanXcpFH{vU07BftooOKPRSTVRU\\ajqssxsusncOECEFFFGHGHIIID?BIIFDEECBBBDFFDA@?><75<;37-(#\u001f\u001e\u001e\u001d\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u001b\u001b\u0019\u001a\u001a\u001a\u001c\u001c\u001b\u001a\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001c\u001c\u001b\u001b\u001b\u001a\u0019\u0019\u001a\u001a\u0019\u001a\u0019\u0019\u001a\u0019\u0019\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001c\u001e '4CJJFDA>?dui^V[WIne[U8.82(+9FLOD9D:;DVM>5CXUQRTYUC638;=BJTWUQKB>==;9<DLKIPSN>4:FI@8L^km]i\\W>DhimXNqglm_m\\QXoI`_L`fMRLQkUHUGBDZ[L\\WQHMZchjaW[[RNUgyvlea\\X]`_]ZRHBIOSQQP@8W\\OIYRIGYEMMFP^HC@UHR]GTiNAV@Paa\\X^ah^_^O]mrdcigcXSY^dhga`lvrlhdgqlhhd`_ca[QLSJ>KYMGOUQMLKPX`jb^cdcaTPPMGECABCDBCJE<9:<>>>D>::68=B>DBBD@;<F@:<PT>A=:=F?@6ELA<=@GD>=<?EA<BKMMMKEEFC@DA<B>=9;C98HHE=@BCBJCANBA@BIC99876==66><9?;4:?<??>@BCA=<>@DHIJKHEB?=DID;BDDD=88=AGCEGFOQBFEKI@<?BBBCDABGGELLA?BHQQGJDB@>?BE@<;3=?>::=65BL;7BAHORKIOTSRPQLINLIJRPNMNCBKKA@KJDECFHJUMQYYOPWUNTVQSMFGDCKOOMLPNKNNLHILRPVZRNKGEH9=F:8:CWMFANTHLHBQUH=@UUKHFJNKJNPQNUZ[YVGU_PQZWPOTRMG@OLCUSNVM\\bQTQKIGCB?DJK>KXMHFIGDFLOLQNE<:GNo~|zy{}~}|{usvyywwy{~~}~}|{}~~~~{yyyxwz~}}|||{{{yz}zy|{xvrlifedcc`\\Z[^^+(())*)&(18:<BDCBA@@???@HIB>9BLB;DJHEFFED@DJFDD?=??;63;KPE=>>>@?=<<<;;;99:>?@@?@CCAA@AEBACDCBDFC?CCA@CJJA?DEDDCGFEFFKKCAGKIHJNONNNONJHGHKJGKNOORSTTQSSRMIKJJRREGIJIILOUPIV[LLORWTLNWYTTWU[YW_\\YWUVUSRMDPSRXSUQRRSRR[WIJQXQOJN_ha\\XRWTY^[\\^XX_dacfgjmkfdeddiecdkrlhijknnkfirsuvnkkt|trxso{gsvn~qnwvmsvu{uunhiqyocdkleeedajh`gpiYW]dcdh_Sch\\c\\^ebgb_ediog\\`bekiebf`X^_]^]cb[^`cifbjljlhupkmhknlgbl]X]Za_\\jojfbelibknpvpdgpljdemlksrx~vpp{owqrtlnpopmhimlqjhntj_nrekpqͻ~wżȽ|po{wkmtuwlaqylchpq_Uenea][_`YUVTLKQJG\\bRYd[YMKYIHXZ]fJ<ACQKTSM[lngouuwpkjknqttuqjfdcba_]]^_Y_e^i]deXleWc^v~ʿ֫ñxÙ̻̐ʴ~Qbuasqf^kQc\\lVMT]qeQ[_]ij`\\Y]e]ZVY[MXlfWFOTEZ_OleVTFN]\\HF_oPJXNQOnDCSX[TIILFeJ][fhSDLRJBNNhiobj[rom_^`Rvvm`Yv\\NvmnQIhMi[zzewmQ`ARyb@,5D_qeaOMNPQSTTZ]cormjtt{to]JFIIDACFHHIJJIDBEHHFDA@>@ABEGGEDCA@?=:4;1/-(#\u001d\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001b\u001b\u001c\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001b\u001b\u001c\u001b\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0018\u0018\u0018\u0018\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001c\u001d\u001f#0?GIFA>>>^wpidQD=NUXXD;GLBB@3BYS;<ECCUV@KufE@EE5-,029EJGJMMLKIHHHIF@<=ABEA823<GI@?QVRc\\W^UQ?QffnQW[ynuZoWZj[PnWPf]L]NXfJGTEM`cMXPNHRdljbZROKHQfusa`c^RNWgic_YTOHFMQNU];5]fRD[[PEYHMHMc^GCITO]aSbWCLN:\\biR^accY^ZXlxl^fkeW[bbciieelwuolklookjjfbflh]\\cYDESMAJSPLIEHT\\bc\\`bbca]UOOMGBCABD<DF?@ACGGCFIC>>8=>A:>=CD@;8B?;:NU@@?==A??;J>??=CLI>?>IJCENNKLKIGGD>?F@8F=?99C5:EFF9<FKOJHKI@??@?998;647628@87857=:<@=<AED>9;>@BCCGJHEC@@HHB<EDHG=97>?C@DFBGP<??FG;5:@@?>>@BDFEKLBACEMOMOEC@:>CBA?>8??=7;>78@J=8BBMPTJIPTRPKLEFOKFDXONNPD?JOC>DH<;:@CBSLNTTNTVKLY\\KPMKSBKXLNWWTNLLJIBDLUPQWTPKJGF>9D94;?TL:<NRDFKASMNAFVUH?>FJGCHKJLTVWXWMZ[MU[OLQTPMDKSJSWMRSNY]TWTGIFAB=?AK=HWMH@DCBCIMKQKA;?CW|zzyxy{}}{z{vrsuwxxxz}~~|}|{~~}}}}{y{~|y{}~~|}||}~xtpjgdb`^[[]_abc*()+--*)0;>>CIIEFGA?CC?<DIE=9IK:=IIDACFFDDJOIFDADHF<8?CFGEDB@BFD>=A@>:8779;=???@ABEC@AB?@CDDCDD@>@>>?CIC:=CAAA@DEEDEKF?AFGGEHNPMMMPJFHFIJGHKKLONQVTTYXSRVUJJQPHIPMHFFNQOLTXPQQSXYQPYZVWWV[XXa[[ZTVURSOFNLIQPXPLVMMRRMOQUZOSRTbd[ZYMWPRTTTWWY^ccfgghlldb`]cdaa_hlfbabdgfedbjkkniiit}nmvkhzjqrqldoochooyv{zpgfomcadfbba`\\cdX[hg\\VXbcelfTaj^d``fhpjdhjlqk^\\__ba__b\\OTY]]Z`\\Y`efikglqlnfquoojlrqhffeZaa`e_dstlilsrfklmml`^jkjbcihkquzzlllrnsqpxnqrsunempmpjemogcpqdksu̸ñÿ¿ú̼y}|qmtshmsoqqbjtkbhipjWT`db_]ZZVSQQLINMFM][T`XUQFWTGVURfN8ERegy~|zyxwvvtrpnppqolkkdme[e]ur}}{ϲǴߵûuǗטʵ}YgqavugZn\\e`iRJV^ueVa\\^reaYUa`[TZZRMbo]IHVYHZXVvcWSHMXRIHf\\FV\\LPJl>ITTZUIJKG[Abe`fZEMSOFTXayxssyh\\etkf_~hHhmgkRoVKgvkUIeLddtvXp|O`RZhOB.4FVi[WRONOSTVX]]bknhfkkxqjYJFHFA@AEHIIKLLIGIHFDC=<=?ACFFDEDCCCC@;3:5/.(\"\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001c\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0018\u0018\u0018\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001b\u001b\u001e!%-5:;;;;;9Snc]Q<276?RWOS[_aaR=;TbYYPCGJKBRlF.250,-279@JPQL@65:CCCFJLLIFEC?948EORRRZMAUYUUXMMBP_`eP]Prjmgn[]vsUgoMX`VWbRZ^CNZRelRUJSHRdkbWNEACJ[hf]Yd\\IDObrtrukVVTKGLPM\\a98_cRF`bVG[IJHVdYIKUSXiacXLEVCIdieLfbecV`]fxr]^mhYVlkchkffntskhmqrqnlmlgdknhdplOFURADQNIIDDOW\\aZ[^\\aif]YZWNFE=9B;;DCEPOQRNJPPKFG@D@?;8;DB?86A?>7GTA>@?>?@>?E:?@?GNH>DILIEKMIFHIHKIB==C=2@9D9AC5??HA4<ITWMORG>>=:5369@50336=>6889<>9=>:<BIF85>>=>>@DHGFFCBIHA=FDHG><;=>?=AFBAM769=B927@=9=<>AACELMCBGFJNPPGDA7:AABA?=A;;::@<<?F<:?EPOQIJORROJICFKD@?VLLNQF>KTG@DD775;<?QMLROOTMFMZWDLSPTLRNGW]UMKJHFFABHQRMPRPLJKHMABD8@@HN;:KLBDIEQNTLQTPC7;DEA?ABBIPPNXWQXQLVQFQUPQPGQQPTMLLJQVTSWTKIF?C@<=G>EPLC<CA?@DHINH<=GFtyzyxxyz{||~~|wrrtuuwzz{|}~~~|{|~~~~}~zy|}~~~~~~y{~}}|wuqmkgedb_^``bdgi()*/54/2=E@=CJIEED>>EE=9CFE>;KD4@IA=?ABBB@GOIECAFIEABFGGFDEHFFIFCEKKFA=968<>@BBAACEC@@>?AACGGCA??><@>BI=5>B??A?CECADGB@BEFEBENOKHMPFEHGKKIMQKHJIMNNTZYQPXVMLMMKLQLGDDLLRSTTSVSTWVSTWXXYVU[WW\\X]_YXTPTRKPKFOPYSMVLLSNMVVWXRXWX\\TTWSOSGLVVRZ]^_ccfgffnmca`^a_b_[jmcZZ]`a_aaZff_geebkughibewthlroy|a\\iibdfhnruwrc]egccbceb]WR[aPP`ibZXdffpo\\amhgjfginmihdage\\ZXWXYZ^^^MPY]]X\\XZglkjmjkqmofgrkkhgmnhc_e^`a\\ic^oxrlouvjihjgh`[fjjdddfhnuzrdijmnqrt|ussvysgoplphelhgipqdlwrvƾƽɼsyxqooodjrlk|wedol_chjl`SQY`b^[URROLKIIHEDP[TY]WSCLTDI[d~{wwwvxyxxxyzyxwvutrstttsqomnige^lly{z~ʍáǖŗիŧɹ~amnezrc`qcig`PJY`{^[g^eof`TQda[T\\TKTihTGP_]NYQ^x^ZREMPNOKfKG^[LNSV@KQOYVJKKGU=`g\\_[KNSNO]c^rvkjkd\\wjgbzo@Wj_rUiWMb|m_[[OcrizrjW{z{M`iYUAW03GQbSQTPNPSVX[][]bggihctnaRFBBCBCCFIIHJJJJIGFFDA?>@@ACDB@CDCCDDA;5691-& \u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u0019\u0018\u0018\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001d '1>GHFCCCFSXRUVN:<BGRXW[[[WMCDDGPLVN6FSFE8K\\4,/12356878:><3*.8<?AGMQRLDHPSUZ\\[WSPOB3FULLRVENEK[ZXTivY]dmrk_av`cwjQaWPc`XcUB_icq[NTOMTfc[SJGIMRZ^VZe]G=ETcz~tyzj_`YRLLNMZ]C=[XZNah]G]JLRY^[RWbSdkebHRPZEYlm_Sp^l_Ygeouc\\gm_Nexjnojegopf`iuvrpmknojhmkgqzeNV\\KGPNEEEDPWV`aWXV^jfbgiaZHGF36>2FHJUZYYWQLWTPMPJID>=;;==>96?=<8BPC<??<8=<@;;EAAFPGCIIGFFEDEFFGILKGC=>9.82H9L:;?@G75ENSVORVLA>;7/159B4137DD=:<=BB>;9:>ACIC2:@<<<<>CFEEFFEJGB?FCFE>???=>=?FC?K2199:806B=5<=9=>>EOQEBGGKMPLED?58>BBB=<A;9=:B@?>@<<>GNILJKNOQNGFAEH?<9NHFLPH@IWMFEF>;8;?EOLHNLPUKKTZSCNTMTUMEKXUMGDDEEBABDKQLJKMLHKHWM@GFDCBMB>FD@EGKOOSVZKI?6>B=87::<EKGGSUPPKKMJLXQMTRJOQQJHKDGRONTSNKJE?CA==D@CLLB9B@>>AIHKE9FK]zwxyyz{{}}}wtvwttx|{y{~}yz|~~|{~}|~~|z|}{~}}v{~||~ytoljijjjigfgfhkkebdgh,-/6==8<FI@=BFFDC@:=EC<;BCC>;H=3CC99<>??<;DKEA@AGGEDBDFFC@ENIEHEDJOPKHGB>ACAAEDCDEDCBA@@B@CKKD<=@=:@?BH91>@<?@@BC?>CDA@ADFC>CLNHFPLCGIHIMOSQKJGKKINRROKNVQMOLLNLNGEDELLW[TNQYTQSSTWURTUPQYURUR[\\[\\SRVVRWQJRTYUTUTOSOOTUUSXXT[WNUWVVRMW`_]`a``a`dedclk_abca]d[ZombYZ]`_\\a`Tckbabe\\doa_``dglednhrkYXb`^_\\_ijnur^Zfc^cbaebWOKSYKN_ihcchjkomchlhdmjedhjgd\\VZ\\[YVQRRZ^[aOPZ][UXX_jnkihigillf`lhdddggb^^c_^d^oncktsoprvnieigda_fgjgfddgluznbfhotrty|xuuyywprolphemeilpqemxtz»ʶȿ·|oxxsplgjbkqjgtyh`jn`af_ddZMHS^`\\VPOLHHHGEEAGXUVZMJFQr}{zwvwwxwwxxxxyxwursqomlkjjjjjg`dm{yxzӧ|ӚԟÏsϯɻlmkmxjhjogroUOMZc{W\\pfjki]OQid[YVOO`i[LOZg[QZTfj``LDQNKRN]CH_YNHpJGLLKXUJLIJR=]h\\\\_VSYOTeqkn{ujgxne[}|ifgvFIgZlYeYMb~piuS`fegnTYiuJ_mOJ?g+2EP[ONROORUWY\\[XW[`hla_nfUJCABEFGGGIHFGGGGFCCCCAAAA@?@?<<@BCCDDA;64:1*\"\u001e\u001d\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001a\u001a\u001a\u0019\u0018\u0018\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001d\u001f\"1DPZYPOPQMTfefc[WWVTSQRTRIGRZNDD?>?3AaVGX|8-03112770)*,/0,-5=DKUZYXUWa_chf\\XZ]]S@:MEA@VP?RJJWH[Ys`pVelsidhr[useZbTUp]dgGGrqioJTPQZd_QRWXVXWNIKakcPRV^p|ttxuxsdc[USQQQTZODWO^WclaDYLW]TWb_ep_kglUK[Z\\Nbrl^ekbmYgkjog\\algOUvvqsnfdgjg\\\\wyonnjlqsmjfgkwt_\\dVOXWECEBMVPYeXUS[ni[fuog^POB7>5:OJRYYWVTOIVQONROKI?@<;88?=6;:89BHC<@@=49<@59ID@EQCEEFFEDDDFDAADJNOKE?6*1/IAL6A@GD7?ONONKQZPG?<91239B87:?OLCDC?FH><9;C?BI=4B?8999<ADDDFFGKFCEGCEEAAAA@@>:EB?M2-985714B=2<;8<:;AMQEAGIKLPHAC=88<ACG<:A><?=@AB=<<=@GLGJKKKLPMCC@BD=85HFBGOK@FROIFIHDDEGNNIGJJQROPRVOAJQKNPDJNMKMC>CF@<<?BFOKHFGKJLHQTBDNIGIJFBA>?EJNVLT\\VGIC<=;62357<BC>DQQMMIEFPTRKQTPIMPLIKHGJLNTRHHNHCA@C?<BACKND9A>;<AHHK@@IRy|xy{{{|{}}xwzzwz|}|{|~}w{~~~}}~|z{~|zy}y{|{~~{|~~~}|zuokhgfhhgfcbceimnmljjll89:>CC?@GF??BCCBA?8<DB<<>@B<;F:5C?79<<>>::CHD?;@HEDA>@AC@;CPHACADJMLJJKIHJHEFIIIIIHFEFEB@?BIJC>=?>6<@?E5,=;;C?@@A==CA>=?AB?>ELLEHQJBHKHGNQRNKMKLLNROHHKOTOLOKMPLLGHKIJLWWRKOXSPPPQXTKOPMNSROMNVZYWPQUXX\\TNVX[YWVVTTRQRWUU^WU_ZU\\`__Z_cgjic_^^ZWbb\\bid]acc^]dW^rha]\\^__]_^Vbfc_`cWbk\\\\^`ZYfdabefZXY\\ZUUW_iclwu\\Wfc[ac^_]SOORVOZgkkiiilojeflhe^gi`^`cbbZQUYXWVQOQX]X_TT[\\WTX]ejigdefddihd]ggdbbdaZZaccdmisvomnpqoptokeiifaflegggdefgrzld`fpwurww}}oxwxusnjmeaigmnqsclyzͬĳ{ʮ»óĴ{nwwrrkch`lthiorhbeja`cU]b[OEFS\\[WQMJGEFHLJDBGHP\\_y{wxwz~||||{{yy{xwtqnljjjigbp}vusʲִoغñʻwhmqpkmxoozpOSUZisTcykggkXLZld[YOQZhdPNXalSO\\^a`j`GIWKITOQCK]YMF]JMJIKWTJMJHT@Tf`\\`]S[RXk|wmkxromdaiv~daf|T@_]d[]YS\\mlVrm~kYlG^\\pFbcNMGh%5EPTMLPOOQTUXXZVUW^igVZh^LFECEFFGHGHGFEFHHDAAAABBBBB?>=9;ADBACEC;64:1( \u001e\u001c\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u0019\u0018\u0018\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001f .?DLSSQZgpxwi`Y[d]UPJHLJD=CQaaZTNKK=<epNrg2/2.2=HPUYR>0457=BFLQZaefebabaa\\SS[_XP6;G>EHaE<TLITCe`vZ|Sngqfepjavn``ZZhy`wY:[lhlJWK[lSJO`edcUF@Qewq_bgiw{s{ywmdaZTXSSVVZWN[J^ckqeDORdbNThjs}mpmpUYcf\\MiqmdmZjaZqlkj_]ekXKlywyjegdcc\\\\qwjhllkpuqkg[cnui]ed[cdQ@DFKTMPaXNRXmjX_qpggebVGNI9KPJRQPPNLIERLOLMMLJGF<979?>49:9;BEC?AEE79??47EA>HL?A?HIFEGHGA:9?JOMNMF8&-2FLD9ACHC>JOHFGHOWPHCEC878>CAA@GPNGHGBHI=<9=B<<D5;B;46;7<==CDGFDJEDJHACCDA?CFB<6DA?M5+6976/1=81;9;@59=JQDAEIHGNF@B<;<=ADJB=@@??BB>C<;=>@GLHGLKGHONB@>?A;92EE;DOK@BKMGGMMKOLLSLIIFJQQOPRSG<KPBBEENF@HM?<EC979=@CJGGFEIMOKIQHCOIGTJHBA>?GLPZJUWJGLHA;523557<@?9ANKKQK@ERRIKVRNKMHFOMFJMLPVOCHRIC?>E@:?BBHMF8@@9:EIJIAFOwv{zyz{}~||{z{{|~~~~~~|vy}|}~}|}~}}|}|{z|ywxz}~~}}}~{||||}{yxxwuttuwvtoigghjkjjnqsuvFECBDFAAFDACCBBABA:=EA<><>B;;C98C=6:==<::;BDB=8AIBB@:;>B>6ARF;><@HJHHIIIIJIIKKKLMMMLLKHA@?@GGDC=<>2:D<@6/=:=B>A@@=>A=<;<<;:>FKIFINKCFKGHORPNKMPMLQVNDLQMQPNNKPQNMJKNMKLPPPJNUPMNNKPPILNLLNNLKMQRSOFKUWUUQQVW[ZXWWY]YSZ_XYa\\Yadcbbbb_ffjql`[\\XTU`_Ybf^[`b`\\`bXbldb^^^aca^]__[_^`[P`dW_aXMV`d_X_[XVWZZTS[hkgnrs\\Vgf[ac^\\]YY\\^^[dkljedhjjebaefb\\eg_[\\\\[]ZPPXZWURORY[V_YW\\]X]diljeb`beabdhe[aeca`a_[^kgimwvuusnloqonqnkgiihekodfhiadb`puje^dovummr~yqsstsqniia^bdoqsulr{{ȺȟĮ~nyurvk_c_nsdfmkbcba]`cOU]WTJDGQVTPLHGHIJIGBEXo}xsuty}|{{zyz}}}yvsonnomkdnt}p~uk˚sƙơrâŬɽ{frqjnphz|iS\\][pjWn|q`hmQLeka[QJUdf^KWcjaGR]`ZfmWDOYEIUOHDN[\\GNJTPIGJWQJRJNxZKNcaY\\bV\\\\fsxpqtwpqp^Yvp}c^\\~cESfd\\VYZRymdhnvnVr@_^vBg[aXKd%@FLNJKLMMMNQUUWWTRZd`RZcYJFGGHHFEFGIHFEFIID@@ABDDFGDA?==CFD@?AED:5473&\u001e\u001e\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001d\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001e&1>@?HQT^kqja\\UGI\\^OFBCGF:37DUagp{~gNMVQckD0499AFOVQP\\^SOOPU^gjhaYNHKIFCKU]^\\_`X>,CHNPcb8FVMHVGkgu]x_{djZepbfnj_d]hr}l{NEvjciPZQs_=Qmpfe]GKUiuxdcsxxuqroiys|zb`[V\\SUZYZWRYI^lqpcEK_n^KUdqpvum\\ckoQKnpomdXh\\fsljf\\\\hcK]vz~r]de]]]Zduj`gijlrskkbXamm_[gdhqeNGCKPJK\\\\NOTghSUkocbeiaRY^LCKKJNMKJHFDBPKMHGKMJRPA8;>A>67:;;BGECCHJ89B<57;>=GB>==GIFFGGF?89CKFCLOG<+'6ANA=?A@?@MIBADGIQKCCKLBAEGEEFCHKJDEGEHE@?;@?;?B7A>54954<:?BDLD@IDCLH?BC@?=CHD?6DC?G9)2><2,/54198>B48:CKB?AHGBLD?B<=@>BCIGA=@C?CB<A:9>@@FMHENLFGPRE?;=@:;/EA8ALJ@AHKDEKNMOKLNJHGFIOQNNRPA@OI<@HIH<<EG==A<318=@BFDEFFGMQNKHJGLLGWODBEE?LHPXJPKBFMIB967:879;@><>FCMSI@GNMIQYRONMADSMEINOPPHBJMHDA>F?:@A?ELG8?=7=JIHGEGl}v|xww|}}|z|}~yxy{~~~~}~z}~~}yvttx|{}}}}~}~~||~~~~|{{|}}~}{{yyxsomquz}~LKGCCFCBEBCFDDA?CC>@E?=B;=C<<?7;B<7:>?<::;?B@:7AG@A<37<?91@QB8=;>DHHGIIHIIJMMKJLNPPRSOJA@DDFFEE@=<2<F=?87??CAAIA?A??=<;5336>DDBFIGKDEKGJQSNNLKSNIQWQBHQMNSSNLOPPQKJOLKNKKOILQOIHMEKNGJKHHKKJJJMJOI<KUPKJJNQTWUUTUX^YW_`Y[`ZZ_df_`_\\[bafph^[ZVVV\\\\Z_aYX``]^_Z]`cc`^^]bg`^bbZY]_]NQ_\\W`[FEU[\\WYZUZYU[^]\\esnimno_Yekabccccccfifdegkg`ceceaZS[hb\\bc^[[ZUY\\SPW`ZWZXZ]_[_^^`c_foqmg`b^_b]_`fcV[cf_^dhknopnry}xqolkmommkkjfghihjndeki]c]\\npihchoyuhio|vqlllopmfe`]_fqsvvwx}yռһпõ}l|rrwh^``ol^cje^a_\\Z_hPGTVTLGGJPQMKJIE:7CZs{}}~~}|{vrsqw|zxxzzzxxxxusronnomlgljjqk{~l~̩tͻzyĬɩĽwgvomorcse^g__qg^twq]lhMTjg_WOR\\d_VLcmkGI\\]c^hjMDSVDKQL@FRZZ?kD[PKFJVMJUJWmYZIY^Z`ccekrtpntwsgowiRvg}l[PmSDnr\\U[]Moubzeril}}r<[~qAg{TtaP`,G=KHGHIIGHJOQSUWTPU]_[]]VJFKKIHFEDHIHEDFIICAACDEGIJFC@?CIHDA@ADA:5453&\u001e\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001c\u001e\".:BBEKOUZ[QQURJQ]XLGCDFD:2.5AYlcf_W\\ZTQSMIA47ABBHYgbOBIMYdnoppqlZE737@IPU\\ckjhaW?EUWXMgU6]XPL^NhhndpsbbZci`jdbYfhus~kxP_yfleZ\\h~FHzwfSnXOh`bpqYw}|f_jao|}i\\a_^_SZ^YWPKVN\\mok[EInpUHU_yyq|xj`kqjFXkron`]efkojf_Y\\fZSjsy\\[jaYY\\ahgc`dflnpoki`[cjbU\\mghpg[OIMLJV_UMOadQRejcbdgi\\\\h_MBDGGIHHHGGDANJKECJIGRRJABCB>:58=>BFEFDBG;8>;87:;>@>:@<HJHIEDEA>DKI@@EFA<6'9@J?:;:89?HB?>BDBIG@BKMGJJIEFD=BDGA@GDEDB@=B?;B@9?7/7;27:;@?HK>?IFENG=CD>@ADHGB5DFBD:+2@?2*-00167=A259@D@==FFAJB>B>?B@DAFLI@>CE@@@?9:@C@FLHGOIDHQTIA==?:>2A?4>HF>?EH?AFKKMFEDDCEFENPKLQKCHME?AGGA6;?>==;60->>?@CEDFHEGNJKGHEKLHWS?DGJ@NGQTJJCAENKA:<AB89<<A?=@ACNNFDIJHLTUSSNJBJPGCMQMMH?DKHD@?AB?=AA?CGC:@?<?FFHHH\\z~{tr~~~~z{||~}}~}z}{zwsqt}||~}}~~}}~~}}~~|z{zy~~|}JKIBAHEBCBEGFFB?DGBAF@>F<=D=;;6<B;7:@C;9;;=@?89BD?B:/5=<50?L<6AA@DGIJJHGJIKNLKJLOPRUSPLCFOKEGGGCBA=FGCD=@AAJDKMBEGB=>A9/037<@@>EDDHCGLIKQSMNNITOFISS>BOKKUTMMMORSJIQLHOKHNJKNMFFLCIKDHJGGKKIIHIKNB;MTLDDFKPPPQRSTWZYZ]]\\]`Y[_aaY^]TX_^bf`][XUWWYZY\\]SVa\\T``U`_`cX\\^\\ddZ^f\\T][^[JR]SW[K9DP]_RZXT\\[Z`ceeerrjklkc`cgdbbfkhbcchdbb]c`_ab_a^VOZkb\\ba][ZYUV^]X\\id`gfegfedfjhghjonmd]b\\]a[^^caQSaiggms{|xustu{olfcgmljhhjechfeglecjeWd]^mlhnjnoxtgni~uqlhgkpkcedbcksuy{{{}|sϷұͿϾɯlpuva`_amd[cga[_]YW^hR@KSQNGGFINOJ@;CSl~~{{||{zzzxtqqoquz||zwvwz~}wuttrqqpnnonlijdbehqlͯǳpŸ˩thzltgs{feiclaemhfvtp[mbRakc]PTY`c^PRlpX>[\\\\fbiaHIXUELLI=KUYUB\\D\\PLFKUHIWL_lV[HRafjnqqpsrprswvkqpnOtc|{XHwtc9l^YZbLcwhhvhqjpBUz=bkKxnUU5J6KEFFGDEFHLOQTVUTY``c`[RIHMNKIGEEGJHFEEHHDCCEEFGGGEB@AEGGCBA@A?:5331&\u001e\u001b\u001b\u001c\u001c\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001d\u001e\u001f%0:?DFGHKRUWSPVdcRKHEFIHGDHUkzy\\C9:DJJA;>4?MIOQXWRSPT]eegmoniaRIEGMNSOEHZgjja^X\\MTQBgMHnZa[cSfkhg~ulbV[`_^lfZXge}{ufwVqoiy]^\\qHkhXP{UdkR_pkoyragonojb^jgjYL`cXUNHWPUiohYGJymLGVb~{rwxibqp\\Ocguijc`jghmd]U[[iWakqaQgh[UU^aae^[]jmlookhadlh[WfsdgokcYOMUUUTMQ\\`OP`c\\^cfjigmh_QAADDEEFFGGC@GJKC@IBFLOTMJIGB>88>ABFFHEACA8::;8:<A@;7B>HKIMD@CCHOMHA@<=<;;/9@@785727=E?==AA;CIGDFHEHFCCCC:?CE??GCCDCA>B?=E?;;-,::6:6<9>MA8?JHGME<CE@EIKIGE<EHIH?67@=1*,..037>>.3:A?=:;BABIC>C@BGGGAEKNH<DL>?C<8;CEAGLHHQGBIRXRD=>>:A4?>16CD=>C@;>BFILEBBCBEBALPJJKGNOHDACEF=16:::87834C@>@AFDGJDCMEFHHEKLJXW<EJNDKIQRIFB?DPMB:@KA8>A?>:>BBFOHEFKHEORSUUMHBQN>DTTKKC<HLE?==C?@@BA@BEB<BA@@CDJJQ~}y||~~|{}}~|}~{xtqs|}|}||~~~}}~}}}~}~FIKB>IH@AEHIJIDCFHEBFA?G=>D=:<;=@;7;CE;:><=>=:=A@@A928:82/BG8=GCBJJMPKGDJILOLKIKMPSTSMIHQUJGHGHDKOKMHKHBE@GLFRGDLIE<DE60567:>><BCFGGKLLMSOLRKHTLAAOU<>NJIOPLMLLSQGKRKKPJINKJKLHFIEKJEHJHGKIIJIHOL?DQRKEHKORONSVTTUWWZYZZ\\^WZ]]\\V^ZQW\\Z_a^][YVXWXYVXXNT_XR`^Ua__[RY^\\c_W`eYV]X_[LU^SXTEHKV_c[\\ZV_`^cdhfeoqiijgcbaa``^bhd__`_`c^[_aaba^`^[S[kb]bb_\\[Z]Z]ceemnoojolkihjqlgkkmkmc[_^]_Y\\\\_aQTbkqsyy~}tutqwzojd]dkifdfhdag_^djg\\fdSha`ojltpuoprgsdztrniglqnihimnotvx{|xyr}̿ɸž˼˭~}pvr\\b_ajc]bd][[\\WUZeXEELOMJGCCMCEf~|yzz{zzzyvspolmorvvtstwzytsrqppqpnmlljigdddfzugȴ͵lzͿѾέ̾pi{mx`twq`delhjklhsvr^j`XhlaVOZWdc]S[i^HU`U`fbfUHLXSHNNI@PUXQ\\GH[PLKRVBNVMYV]Vervyyvsqrpis{woaZEnhqUCfxs5ZlVZcU\\m{j{gg_oMRq6Wa<vxV?EM-OEBBD@BCEHLOSTUW`b`ddZOHIOPLIGEGKMHFFFFHEDGHGGFEDB@@BBCCCCA@@>81./-#\u001d\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001d\u001e\u001f!+8@CEILMJJLJHYgcTHGDFHHFDJ\\s}|}yiZJ92CG;95GjexTQNDT_Xdgkptusxmolkf`WPOQX``abb]KIQNQ`N]p\\mmdWnydi|]cJ]]W_prXa_Xkhu\\|k|pXa\\mbeRevQkXMhrlsxwmiws~t^fcjrmoSJfeVXKK\\PSjlfYGTxoHIVd~ol{{ubhp^]b`lodk_ll_ik_VU_\\lRjituS]l\\YW[^ZceUYgoihjkjfcime^bnm_eomeYRX]XSKLU`RJ\\bWU_egjjnnibTIGGEEEFGGHDBDHIC@G>CGMXQOQOGC>:?CCDEIG?BC879<8:=E@:8EBIKKMBADELSMHHC81;<<39>:3844/6>C==>B<:@IQGA@?FB=BBB<>CD@>FCBDCA>B@>D?=9(,;98;7=<EG78CKIIH?<DD@GMNIGFDHJKKKD?@91,,--/12>;,28@<;89?=DGA=DDFOMLHIHLM@CN=?C=8:CFAGKIKPFAIQVSI@>>;B8=>04>B;=A;8<BCHLCBABCD:=JLIGFIQOHB@D=E7,166656:7=BA>>@FCGKB@KB@FFCKLMXY<GMRKLIPQHDC?EQM>9BG8<DHB<7EGFIKEFILFFNPQSOKGFTK>JWSJI?AIIA<<=A<>ADC?@A>;AAAABDJKr|~}~|}z|zyz|~~~~}yvqrx~~}}}|}~~}}}FGKC=ILCBFJKNNFDGFHEE@CI?@C<<?>>@<8>HD<??>>>=>CA=AC73:9623GG=GLFGSRQTODAJHKOLJFHKMOSRHFMVTJJIGKFOSMLILIDD@GJIPGINKE>KG34=:88<;9BCGMNMNNOQKIQJDRK;9KT=:IKGHLNRNJSREIRNMQNLOMIFKJEHHMJGKLHHLJJLJLVSHMRPPPQQTYVRX]WTUTVWTVWWYSSVXUU]UPXZV\\^][ZZXXXYYSUSJU\\SS[[Wa^\\QLY^^`ZZacY_[Yb[TYaY[VT\\[_dne`c_dfdgdegdinggfba_\\[[ZY\\`]\\\\]Zae^\\effcegcbf^_eb`bee^^`hlghooqvtronnqllnokfdgijmd[^^][W\\\\]d]^fm{{{~|{qqunitrib]`eecaeecad[[clhXdfXlf`pmrtoypimgqfqstvnjozyrqqvwqsvtv|wz|lkýɿɸĵȫ~}sul\\c``fb]`aZZZ[TSVdZLFEJMKF::Nm~{{~}{{|}|yvusnlorrqqoooppoommnnlljigecbdignzzpz¥ppʙϳҳ̼}{{mi}ux^vq{`[cnplnldqvtag^\\mk^LTYUg^^^e[MTgUTgcabPPPXSGNTGDTXXJdCJ\\PLPVYBSWK[cnqwzz{zvqqh]UrnYM>\\siXEVx;I]]_gUark^SdZVt;OR6|~P:RQ2>K?;A??ACFJNSTVX]\\_c^QKFIKIEEEEHLKGFFFFFEDFHGGFEDB@@A@>>>?@@@>9/()& \u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001d\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e $+27BKPVZ\\WJNafUEDD@ACDBC@AWx}nd\\WK;Eal]AKb\\VUhtmPHURSROOQV^cdefeaZWTRWWWVUSLA7GNN`T]`p`vwa]Wl{n\\_HaYT^sxZeQWfqpetu|b\\cf}xaWpiRdJWmbftumvlu~u`]kjwwogPTha[\\HR`OVjhdXK]eBPUdwhksqm]kdPkb^mggabrebn]UMb]p_WiftcYh^Y\\[a\\\\i]VephfefhifckjbhliXZfmnbSWnbTPNRXRL[`RR`eedjloopfWUVNIIFGGGGECEGGCCE@BCKKJPWTNJD>>EDCDHIBBA:9:;:;?HB8<GHKLKKBEEGNPJJQE54?A?9::2299207AD<<>A>AEKPC<<:FC9@BB>>FDA>FCBEC?=FDA@?@7(3=8;<9?AK>2=GKKF?=@GD@HONIFGJJKJMTQI@9743.-.//=8176?=:67:<FF><GHJRMONOILOEFM>BE@78BGAGKJNPEEKNOQQF?A>?>>>15<>:<>75;ABFHB@AAAB7<HHD@BMUQG@@C<A3*263369;;ABCA9CE?DJ?=I?9>ECLNPRW>KORNMKRSFEGAGN@5:A45CFRBDIPPKKEEIKKHINMOPDGFMRGETVOLF=JJ==>=>=<<AJE>?>:=BAAADII`|~{xwx|y{}}xuvxy{{}~~~FIKE@INHEFIMQNFCGC@BC?HMAB?8<??@@<:DJ??DA@ABBEIC>DE=;AA:3:LJEJLOQVUSSQC=KHLPJICEJJLQRFALRMGKHDJKKIHEDKIBBCECGJHLKJEDLC8?E@?@@==CEMQPOMKKJBCOF>MI85GP==FKLHJMUQJTUIJQQOSSONNJBILDGJNJHNPIHMJKLKNXYSSRNRYZYW[]XZ`[TTPUUPQTSPMMPSQSYOMWVTXZ[ZZ[YYY[YQRPLVYTTWWZa]WPQ[^`^Z\\cb`f[]e\\]_da_adiijjokbededcjecechkede^_`ZWWVUY^^^_`\\cgadghhdglfcfgcbcbcih`biswpmqqptpnpmpuommhle^dhrne]]_]ZV][\\hkinq{wy|vsonuobkui`]\\]bcadcbbb]_dph[hj[mf`popqiqpfhjomqtwytmv~wtsvtmsvos|{~|pnĽȻɻ̼ƨsyxwg_gdadf^]^WXZYPNQ_ZLLEGJCEdſ~||}}}~}|xx{ysopqppoligillljjlkkjhfeca_agimttwww¸̳ziӥˬԶο}tuli{x_xmx_V^rvipeaptu``X_pgWLYWWi]chfPUhaQ_f`a\\QRSXRHPVIHTZULNCK]PLQ]YBSXVq^mquwyuroh`YKE=sqVM>Ivj`KUsZ;ifWtQayrsdMYb^oHFLO{v\\Q_VFFOF>D;<>BEGKOPV[[Y_YLGGFEDA@ACDEGGGGFHIHECEGFFFEDCCBA?><:;====<2%\"!\u001e\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001b\u001c\u001b\u001b\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001e\u001e\u001f \u001f\u001f\u001d\u001d\u001d\u001b\u001b\u001b\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001f\u001e\u001e\u001e\u001f \u001e\u001d\u001d\u001d\u001e '29=AINPX_^^bXJDJJBABBA@;8=EJ]kpdVMPRBAQ`_DSCDebXPJKUP>2117=8;?CHOTXYYYTJ@BGF91BRG_[^a^sfts^jJhX^]PiSQ\\vz^_Tmnten}rs\\abuzc[ne^YGdjQ`meepp{{u}tackpyf\\OYg__XBZdM[jdbZRj~OAWS]vkgjpbbdYWsX_ljiZlobadUOVgdzP_cfj\\bbW^^^a]acXdnibedfihedmhkpi`QXgldTQlq]XVUWTQY^TT^c_[ajnottd_c`VKFGHHGGFEEEEDDCCCEIFEKTRPOJD>BGDBCHDAA<::;<<>DE9AKIMMLEAIGJMKGMSHAFIIC?;836?;//9ED:<@HKGJOG<=;8FH;=BDDAIEC>GCCFD>?JD=;@B5,7=<>8<?GH39DIIIB<=DHC@IMKHFEIIJJJRVND@?A@4+1/3>7576?>9348>HF>@LHIOIJLPJKJHIM?EHC66BHAFJKRPCINKKPUJADB=A@?159:8::349>@CE@>@@??8?FB<9BMRQF=@D@D?9=<9=@?;:>BI?4E;;BG<9G83<FDMNNLVFOMMMKIRXIJKFJG87?>0CILZEVYRRKOINLJJIMNILG@GETOJTWTLMAAK?===>??=?FLD==;=?BBABFKU{{||~~}~~}~}~}}|zwx~~}zwvwy}GJLEDJNKFFHLLGCBC@;<@>GNA?:39?@@>;=HF=BFCAEJHJLEBHIGJNMD>DNKILKPUXTONO@8JGKPJH?AIKIPTE:FNIEIA;IJECCAAHGAAEE?EFHLEFHHFBBEJHGJHEDEIQPONHEGH?@L@9IF56GJ>BGMQKGKSQJRUKJNNOVVLINH>ILBFNPIGLMGGKJJLLLU[XUQPTZ\\ZWX[XQ[]RRPTPLKQSLGGLMMPQMJMQTTVVVXVVXUY\\TRRUZYVVWWZ^ZWYZ]`b_]]adcg]`g\\]`bb`cegggflk`_bc\\Y`_]_`dgbbf_^ZVUTSUX]^^``\\acbbbbaZ]db``ceba^^dffjmtvplqpkomjnmlsngcaj`Zchtpk]ZcZV[b]_qvqqswrv{ztnrrpqfftm_]YWbgbbbbbbbchqfbnf[kcanlkmceohitsruwyyslw|zxsprpjrwrp{~{xôõϽüȿĥ~qt|{bajjcgk]Y[XXXWOMOWYNNF;N~y}yxyz{zxttvwwvtsqpomkfdefhhhihggedca^^^Zgyo~~hwrɸпfֲɯոƒ|xopmguarmr_V`yzgn_bnwo\\ZRgnYUV\\TZkbgm\\MfjSZ`bea[URSZQFT]QLQ]SdyEGN^PLPYTD\\ilf]msmksk^ZTK>222ptRPEEsl~hV`vu9|psPxV`jl|oU[be{tcg^rwnpnhf[UUSWNL=?A>=ADJNUZ`_[OBFDCCB@?@ABDFKKGFKNJDCEFEEEDDCDDCBB>;;;;;::8(\u001e\u001f\u001c\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001d\u001e\u001d\u001d\u001d\u001e\u001e\u001f\u001f   !!!   !\"! \u001f\u001e\u001f $1?CCAAGNU[^`cc_ZRHIHE>=<BH?23=S`ZTOH@:5@UCHOEfrkF?=CW^afcaPIEA956>ELTXUOE=B=1>TEGi\\ianseslZwfIbP]X`jMRe{zZWl~qq_ou|e[hb|~z|m[mhhQFhhK^]Zbos}wtwrlfpxsZVQ^f`\\MCefPeg]_^\\rk=GSIa}f_nn``WYfiS`mp`aoiZ_\\TUc_wnQabdb`b[]`^`b]_\\bmg^d`ffhe^ekjunh]W]gfTG\\ud^^\\\\[[]]XW[[WSWcloqtlhmlgZKIJGGFFEEEECCCCBCHHHHJMOQUTMA>GGC>BDBD>9<<==>>H@DJGNMLDFJDKLKJNRKMRPPIFB>>>>7/4BEB7DKSSDGQB9>97EL>:AFFEKIE?IHKKD=AF?6:A@10:?C=5@AG79EFGEED@>BD@?EKIIGAFGDKJOSOIB@HF7.578;8636;:4127DKGCFKEGJCDHKEHHGIN??HG84?L@BJKPNEMRKJQSKHHE=DCA14::7::::9;=@@>=<<=??AA<78BGMNE?FLIMOKLLMMKFD?ALI>:I6:@B=>E79ALILMLIVRMJJNICMSNPMFIJCDA>CPMTYL[WMMIWTUHFLLOLEJCBFKUNWZSRSMEICDJHCDJHBEKGA==DECEFDEJQt}z|}~||~{||{{z|~}{~}{xz}|~FJJCGMOIDJMHEC?>>>;8>@EG:7408===;8=E?>CEBBKMKMLHGHKMPROKIIJIKMHKRUPMIJ=8LDHOJG=?ILJQVE5@LHEG:7HFBDCB?HF?@FC?DDIGCHIGCGJHLJLOOKHGKNLLIECEH?AI=8GD27GC;ELPSJFILKFOPGIKLOTPGEJD;HLCGMMEDEHFFJGHJKKSXSOOQQWXXVQTUMTZROOTQKGOUMDCGHJKKNJELSRQSTSRTUQUXSSTWYXWWXXZXX_^Z\\^a][_cb_aY[d\\\\bab``bca\\`ij^V\\aYSUSV]]^`\\[a^YTVUSRWZ^^__]Z^bcb`__VS]]^^]cb`_Z]flnlrrnknpijlknmirm^[`eYZbbrni^Zd]T]h`cy}wptwrwvwrluymoodnnb]YYdgdeedcdegnogmr__jdemffhefqnt|rtvuuunjvxvwrloqptwss}{ʸüɳӼʿôû|zwrz^fltjdgWZYSXVUMKJSXMKh~zz~zxxxwyxvussvwvtqoooojecbceefgfedcb`]]^V^ppr\\~wyzҷȻŞl׵׿ŶӺ̖{nrlmapbwrm_V_|hfZgkyfWVRpfS\\[YQ^kdjlOTlbW_Yjh^]YSX\\PFXcULM`TZDMUaLHL_fg{}`ioid`^TMH@7/0@R~rqNPGMshym]rolGtw~NrdZasxsgfcj|tk}vjstia\\YXU\\XSIKG=88>GLOU]^VKEGCBA@@@ABDFKNIDHONFACDCCCBBBBCCBCC@?<::<8/7-\u001e\u001c\u001c\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  !!\"\"\"!!\"!\"!\"\"#\"!!\u001f\u001e\u001d ,@LJGECADKKABZaLDOQNKMKPWVTK?49FLE97>>;?@AEKR_\\<:AGZbgjibXNKQNHCBMVX[[[WPE7<UN3VjWe_wjeu`VZJg{QYPnaH\\s}xL[yfsfjv\\[deyvyw_rjlIGlhRcRSips}xss{qi{}iVY_egbTFOqdUk_X]`gqR<NGH|yV^oc`MQ_gXUbqkXkjbWcZU^aa~\\Tdaabf`]cb]ceYY\\nl\\_c[iha^[hkmrng]_ccZJNed^abaafh^Y_VPSNSajnmnjirsqi[TUKCDDDEECCCCBCCCEGHIKNPPQRME;=HF>;>AG?7;:?B:>LGGGGNLLDKIBKMMJNRPTUQQPNLHGC?:6?DA@>MSUODDMD7::9ELB9@HGGLHDBIKOPE;@B@;=@8.6BDB:;EID7JMGFCGJC<>@<;BIHGFBDE=KMMMMI<=IE<4<A<<=825553228HLFFLG@GIBBHD>CDCGL:9IE;6=K?AEHLJFKMFHMMBJHC@D?B46:<:89??78=><:9877@C@=97:?AIJCBKPSVTQSVXPMUPELSJEMQHCFHGIIEHKOMQOLDS]JHIRK>FHIOPDFOMLACSONWRNQRIFKWXTEJPOOCCMFCFSTW]RMUSKLGITTJJQUOIHMH@>BIEDMKHIMi~~}}~}}~~~~~}|zz}}}}~~~~|{}~~|{~}|}FIGCHMPJFNMDA@<99;;5=FD<11009:7866<@9?FGFGMMLIHJJIJMMLMLKLIHLLGGNPMKFF<;MAGOHG;=HKHMWJ6>KIGG:;ICCECA=GF>@FEBCEMD@JKEEMLKLKNQRPKIKMJIFECFH@BH=9D@3;G?<IPRPJHHGEBJJBCFKNNHDCE@:FKCGMIAABFFGKD@JLIQRLLMMMRUSRONPKRXOKLRUNHMUJ>@BFKIIKGFMQPPPOOQPMRUQQSTVVVVWYYXVZb\\VY^aYYbdb\\[VU`aacceb_ad`Y]ijZPW[UNOKT[X[\\YWXVYTXWTZ^[]]\\\\[Z]bfe^^j]Q][Z^]`a`a\\[hohhpnjhkmhhjmoomqk[Z^_XZ\\cj`h`VhcS]lbh{xqvwsusskiv{ikrahnc]\\befikkfgjgptposrcgjdilgghlmqtynsqnlmiltqrwoiqxxxy|}ҿҹնξ÷~z}rsZjrwjedSXTPXVTKJDAU{̾}{}~~wsstttsrstttqpnnnlihfccccdddba`_][^bXdzp~Svn}`ٹǨ}ٳԾѿƸ͜zgvj~rdmcsk\\T_xf]UiivXRS\\qX_eWTQ`jfqcL`k`__Xme[^\\U\\[QE\\lXIKaZKLO[ZEQ^w}Ui_NRVOI>23<CL_pzfOPE]vdoqYxthejRgt[^}rqkoesgavlmtrc_\\ZYX\\\\VUSOH@:=DHMQTXSIFDCBA@>@ACEFHHDBKQJA?ABBBCBBCB@?>?>>><;=@8(+)\u001f\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001d\u001d\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  !! !\"\"\"!!\"!\"\"\"\"#\"\"\" \u001f\u001d\u001b\u001e+=KNID@?A;20IXV]_WRNKIPZ_hjdQ9/;JI<8;=<;9?MG=GQWK=CE@@ES`gpy|raRRVSMLKF?<?V]<:`cMS_`cdwOYWIroS[^YSjwgDs{pawsa~Y[`ku||y{i}lnIKtn\\hMSrtv}zq|oq{_TdqmlaPI^rYXaUWY`phDDKAa^NdgXWAW`\\O[eladi`^`gWY_ZonT\\g[^ef^`e`_j`WZbpf\\dZblg\\W\\illnnebddbYQVXZ\\_ediqeYbZHOQM]kligddosrohbaXICCBDFEDDCBBCDDCEFGILPUZVKGEAFHD66=GE:98@D;@ONIEGMJKFMEBKLLFMSSUPMRRRQMMKJD@ICEEGPVSJIGEF85<8BLG;BHDIMCDFILPTG>GFIBCC83<DD>=DJODHSHEDCJMB;>>88?FFAAEAB=KMJGLG7;IC?>CFCDF@<:::656@HGEGMC@HICCHC;@AAAF78I@<6=I@A@AHEFFB?EGB<KGAGA;<989:>74=@728;763444@C<:899<@GGCELPSWTQV[TGMYNGQRQSY^ZRRRRSRNPQONWOKBP`LEFQL<IB>MTEFQOKAHNLJSMHMOFBQRSOFSZPF?LPGHQVV`TGNWNLMGY^UNVYYUNPSLEDHIGLPJMPd~~}~~zy||{|~}|yyzyz~}~~~|z|}}|~~~}~~~}~~xw~EFCCIKNIFNJ@<:656688@JC6.455<:8:;=BB>GKJNMNMI@DLJIKLLLMLKOGFKLKJMLJKCC@<JCHLEC:?HJEHTO>=JMIF>AJHFDA@=EF=>HGBBGLCAJKHLNLMKLMPURNLNMKFEKIHLFEH=:B?5?H>?KSSLJHECA@HG<=BHNKDBBD>8EIDGKF?@>DDBLB:INHNMFLMGKPNQOIKLGPWKFKQSMJJPD7=?GJEGEELNKMMIIMNHHSSPQQRTXSSYWVTPX_YXZadZX`dcZWUR]d`_ffb`acd`aji[NRWQLKHSVSZ[ZYWV\\\\]\\]cb\\]Z]WTZ_ahf[^oeSZ\\Y^___`cbckl_anlhddjicglmompk]ZYX]XTe^WhZQllX_kdk{|tsttqmnmfeuwchp_fnb\\blgenqmlnllytwwwwlslfjmmmjppovojqohffflpimvlhw~{}ȿڼԴµô~~}tsrjXmtuhf`OXTU]VOFAQ{|xwz~yxy}yupopooprrrpooomkiijifedba``__^\\ZY[n`X_{r~klxtr࿺¹Ĵִҹĭô͞tsuizzonctj[Qcn_RWijoKRUkdRocRTWbgouSPfd]a]bl^YbaS[\\QG_s]GG]eI\\RYWav}~zwvwyHPJFKE<43AVaY\\jo^RNAhzi_sXi}gd[`}f[~rkkfrctNzklrvqjg^[\\\\\\_XXWUSMJEBCHMPQMEB@@??=;>AAC@=<=AJKC>=@BCCDDDDA>=<::9;<;>B:)!\u001f\u001d\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f \"\"\"!!!\"\"\"\"\"\"\"####\"\"\" \u001f\u001f\u001e\u001e\"/=GMPNIFCDHPJEONMNNBAQYT`wrXA4476776:=AGFNYKQT[uwmbapy|stmPDEFHF<65EZU;N^YBMXP\\jnCg{SI{bTis~YgvvyOLxgdzzZ\\Zaltxt{iSYw`qI^~{~yk{|YXs|oaQJhiQZXNRXcm\\JKCS{tJVdVTQIXYRT_b`^n_]ah_X[]apbYd^Y`ha^bf\\hjWW]kpabZ_li^UYcmjfohfgeghfYSSTX`ehok]e^CJYNReie`^]goonkileRIIFEFEEDDCBBBDCBCEEFGJR\\_]XSF@LJ979BI@<:AG>CNOIDIJFIGJ>BLLJERVRSNMPQPOMOSTOHOGMJMPQNIMMBC>7;7AIHABCDLH?CHIIQWG@MKLJML?:A@C@CGKNINKCECELIA;>>43;CD;>F@?AHJIBKG7:HD@@CFHLMGFFKJ>@AHCBBFKA@FHCCHD;??>?@8:J;:8<E@?=;BBEC@=CA:;LFCOD;;=;75<70;@8-5944/138>@::9769@FCCEHHMQPOQPIEMNGJMPWXX`\\VWWWUQMQQNPXJLBQ[TECNJCMD:GVNJQSIEICLGPCGLHFBVPOLK^`H>FROJR\\W\\YDFUSNROS^[TS\\_]WTZWOLKLNOPPRW_~}}}}|xx{zy{||zyz{wx{{}~{|~}|yyyy{||}}~}}~~|DDCDHKLGGLG>8434628DIMI;6?AAAAACGFIGHQMLOOLMJ<DLIHIKLKLLLREBKLMKKJIJACE=JHHJDB>ELICITOCBPQHE@DOLEE@@>CG=;EHBFKG@AFJMRPLMLMMRWSPOPQMFKSPOTQKIB@EB>EG@BKRMFFFC=<=FC8:>CLIAC?A=6FGBFF@;><DA<I?5HOGMJCJIDLOHLLDEDBORLIIQPMKHJA3:BHGDFDFNNIKJDCHGAKPNSSOOSYRPTTRMHRZY[[bg_U[dcWQQPW`a]deb]]cdaclg[PMOMHCEPPPYZ\\\\a`\\_a`bd`^`ZXPNX^`hgW[qbS\\]Z`a]]^afjll\\Zmkgb_hiabgjjiol^VRV^WR[T]gTSpubeidkyxqtrolhgf]`tp]fn^gka\\fmhdpqmpsnv{u}|xyqtlfkouqlqlnuwceooe_fhkicgpkl}}}Ľ̻ŽҿڼԾŨvyliq~eZgntge^QRPW[OLZyz}{uuuy|}|{xstvrkkmmmnnnnlkhfhhhhd`^^^]]]\\[XYvsSRssvvuti{þԹѺǫͥpuivyyvbziYOffVJajj]PUZrV\\rYSXZ^eyiIXaY\\d]njYZgfN\\aSMds]FHZ|gLg_frzpljedlAC@=808KV`nnXWhnx[VMBd~tTq_kxeuji[xyZ~tgXd`sb^t|uimux{xsf]\\^\\[YYYXWTRLFDBDGGE@?>=<;98;>><8447<@=68;=>>?@@AB?=<98879:<<=9,!\u001b\u001b\u001b\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001d\u001d\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  \"\"\"!!!!!\"\"\"\"\"#####$#\"!!\u001f\u001e\"-:GMMMNMPTYVB4@NMJF@>IA>Wp~lH63<E@6ER]r_ZbXo}l]\\bjquh[PgodRMP^K84:GURHY\\OAJNFTr[AtxPRr|QWvzm^tywlKbt~edyau|pWdnvxxf^kczRkt~XhrfWOicU[TLRY_`UVILsw^N]ZQWVUSPV\\]ZWcj]_e`X^\\^dkb_gW]ci`^hf`k[YYaqkd]VpmcUT\\ml_eoeghhkscPUUUWadikdhdDAZWM\\hb\\YW`fhgefmocVRMIIGDDDDCBBA@BBCDEFGJNSZ`\\_YNNM?9;CHEC@CKFGLNHEJGBGDC:FNLIKYVRTNLNPOLLQRTTKPNLIKKKJJMLA@D=:7?CDC>?IK@>DGEHUUD>LMILTK?BC?BAGEIKLOFADCHKGB<>?409BD9<DB?DDHH@IF5:HC??DBDLIBEPURDIJI@@@CE;<CD@DFE<<<;=A:=K76:8A@>97<>DECB?=;=NCEPJ==><73782:@<07;9907=@<?=>9557>??BCA@FMNIEEEGLHGIFNSTTUTVWWWQIJSNKTTJMDRVYLCIINLG??UUMRWJMJ?JML;LCCGAZQNHOeXBDOQMPZ_Y[KBMXR[XUZ[XU[__[X[]URSSSSVSOU\\v~{}}|{zxy{z{|}}||~{vwz{}~}{||~}zxz||}}}}~~~|z{~~~~~~DDEFEKMGGJF@?;:;96AMVUNF@IKJECIMOMKJQYQMNOLMI>JNGGIKFCKLKSEAHLOJIJJKAFC=ROKPLHEMVNIPSRJP\\TJE>CPPED=>;<F=6?GBOK@C?CKNRNLKJNLQVSRRPSNMSUUSYYUSLIKJJIFCFLPH>AEA<:<D>5;=@KH>B<>:1FGAEB:8=8BA8C:3HJBLC?GAAMJEJJE==DMKSSKQPMKHE<6>HJGEGHHLMKKD?BDAALMISOLNNXVIKOLHCOVU[\\`d_SXd_RPNMV\\_]`b]YY]^[`kfYQLFHH=AMMNT[]`gb]^`_ab\\]bXQILU\\_afUYn^S[^ZbbXY\\^ejjm][lhf_Zgi]^^^`amj`UOVZTSPVbcZZryjkhchuuorsjddccT]qj[dj`ih`\\glgalloquu}yzxuplfajoumilelro\\cnl`^dfigaciq~zý̶׾Ʊ}zqsluctz\\\\ekncfYTSSYQgõ}ux{xxxyyzxuutqjghgilllllljfeeggb]\\\\[[[[\\]XYzXSrvkwx²ɟǛϺ˨ˮovksv`|~k[Qmz`NLmjfVZRcmZhhSW\\UWjuUI]WScc_rkXak`P__URir]FO\\VQks{zwmebZKWd:4707E\\osmhgTPhqnXVLD\\yxYalyvuchxqZo\\}yn]Kccs]k|tkouy}uic``\\XZYYYWUTQMIA=:<=<==;86547::6432230--244545778::9865678:=;72+\"\u001d\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f     \u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f  \u001f\u001f\u001f\u001f     !!!!!!\"\"\"\"\"####$%$$#!\u001f\u001f!*9HMKJKMPPONGIQLB=BT>7Jde^q}~pUI@Pwy^edcSlmmaR;@A>MPO\\ge_NDVWMUceTQLBL]OS`NK@AF<TsKBuwS[nvOZr`gywwbVrr{hbybir}dfuo|tg{g|kuvr|gsaZffdZWTW\\XQURDc|hXR_^`TZXMTa\\VVXff__cS]a[Z`l`jeYbgg_cobcUTa[gnedUgwh^RXep`ZkfbeintoR_bZMX_bddhjQEZbPPfeXRQY`_^\\^hnlgc[OJHDCCCBCBAABACCCCDFJMOTXZ^^XRQI?@DHGECHMKCHKHEGFAFB=5HMKKT[URROLMMMGLOORTFNVJHLCDGJIIB>E<:8<>BB>@JA<DHEEMTNABNLDMTD<D?@ABHEIIKJC@AFKHFE><;527@D:9BB@G>AH>EB6;GB<=D@@E=:DJMQDFIF>@?CB48@>=CCC<898;@=@H01:4:;<457;CC@G=;:?KBGIE?>>;867:2;A?=>ADE7GNK=AE@9789;:?BA>?HKEABEDGNJCBHNNMNOTWVVUPIMQHLVQOODPUUQCGHONID=QSSQTJTLAKSF@M=ECH[NKDUbKDGQQNX`_[SFNUW[c\\ZZX[Z\\_^\\Y\\VPTUUTTYUNMl~}}|{zzy{}}zx{|}~}|zxz~}{}}{|||}}{{}}|}~}EFIHDLOIGIJJIJJHBBMRXTOLFMOKIEKRPPOQZYPJHMMKHEOJFIHIA;ILJQG@BIOEBMOG@J?>WQPZWOO[`WUUTUW\\d^PG>AOSDC><?=A=5;DDSI?G>AJLOMLGFJGJPRQQQRNQTPRUYYWZTNRUQMIGMOND7>E?::<A92::?JG=?:?7.EFAD@64=5=A8=65FB>G<?E;>LKEGGB8;IMGT^VTPMKKJ?@LMNNKIGIKIKLC?CAAENJEMJHKISQCFHIGCQUV]\\]caRS_\\NLHJRU^]YZXSPSTT[dbXRQJHI<?MKMU\\`_cb]]\\]_a[V_YKDKS[[Zd[\\f[RU\\[bdXTW]fdblbZddc[VfiZ[YVX]ih`YUZZVWW^caciswnof`boqipui`]__QZmc\\ffble\\[enc[ehoov}x|wwtoh]\\jjofffahmi]dle^\\^`eg]^qz}|ʷ¿Ƕ»x{osrp{kawsWbhkmecSKOYq~{|~yzz{zxvttsomljiijkjihhhhfcbcc_^][[ZZZZZXWjnOk}epϩӤϾʨƵqyirvgykcTrsXKXri__ZQihfd\\VYYPYsjLQYPTf\\anfZihXX]YVVnsYDW`Og{ywlopb[SOE@\\]54MQY]eqvpgiVPhwlVRIH]p~fTgt}mhZ||w[aevxwwiZBjle_|soruxvoljgffgd^ZYYWUSQOLIA;7679964432344430//.,*-/--.//112345434678:==5+%!\u001d\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f             \u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f    \u001f\u001f      !!!!\"\"\"\"\"######$%%$$\" \u001f %0?KQURLIE>DT[XSSPGQ@?XvfwaYSg^YkaEMa]`;<GSVg{vrddogRIJNWVG77IXaP\\TOG7<;;Zj<RnoQallJ]bVnxwpZdzpuqbcfnqn|}hlyuq~djelwkYZ[_aSNSHNntcSVfhYVYTObeQMXa_fa[_Pd\\VVai`oa\\ce_clia\\M^_]kjeaaxoeZW_kfWck[aejny_^mcSS`[[]dlaVfo^R^cSJNX[XUUVanlknkaZPDAAAA@ABAA@@BCDDEGILPTUSTX\\[WPKKJJHHKRPL?BIFEDF@A>77HLJKTWSPPOMKIKBGLHMOCMWGGK>>EHDF@=D8::99ADCEF7=JICJOOJGNSKCLMC>@=>?EDCEIGB?>AHGBEG?96898=D?7:<@I=9C;A?5<G@;<DA?<67@@HL=AA??@AA>24::>B@=?777:>@AB/1:24680349E=;C:;5AECH?=B?=96?>5.?CGPFINOIRZQGLNC<A><<<?C=:BIF?BJD@INF==JJJJMPYYTTVSRSKGSWRUQDLTMKHEHLRKC;NLWOLJYNHOUCKO>E@TTKEDZZIKEPQRac_ZLUYZZia`_\\]ad`^^]\\WNNRRUSSTVF]}|zzzz}~~~}|xvz}}|zxxyz~~~}~}|zJKMJJNPOJGQRLOQKEJSPMIIJDKNKJIJNMOPU[SJFDKKIHKM@DKDE?6BIGKF?:ANA=JL?>MCGVQT^ZSZc`]\\XVTZaccWLFBLWIEH@DF?@=?DERHFK=AIJMLJDBEBFMNNNLNPOKJPTUTTVQOTUPQMIUUOC6>F?9<>?61;:;FE=<9A5*CFAA;03>28?8:79A;<@9@=5>GHBAF<1AROIT][ZSOMQULLTPQTSNEGMJHNGA@9<GOFCKHCGGKK?CCGKDR[\\^YV^_PLWVGEEHNO[]TQQPMKKPV[[XUWTOLDJSKNW[`]Z\\^][[be_W_\\LDMS[\\\\ebbb]SS\\^ae\\TXcj_[jh`c][WRbjZUXXRYe]Y^_bb^aeiiimosqmmc[[kocmui]YZYNVj]ZieckaW[ar]Xcglm{~uxtutph_^jiobgcafhb_dkaZY]ba_Xb~~ǹǿĺʻqxw~k|vur`bxj[lihgaZLJczxtrtwwtrppomkmlklkigffdbbba`__^^^^^]\\[ZXWWTnUZ}qfwxyy{ôֺԯ׵ǜǧwhp{{sjhYxlXRbmf^jR[hjh]YWVVS`s]OQLR_eXdhb^jcQX\\YUXppPE_`OgqibcibSQL>5GhRJ`xmhefn~wlm^Ufx|gVOERdkzsUWjco]yrw_Ozpkfsb]<drPȶ|trv{ykfhjjkw}ueZYYWUSQOMLJG?5134113321112/.----,--++,--//01222244567<A9) \u001d\u001c\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f             \u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    \u001f\u001f      !!!!!\"\"\"\"######$$%$$#!\u001f !'4DQ\\b`_[VTW\\ei\\LFKFMOd}`hwyc@YrgHK`qI]gnqrtpxzz~qiV>@D?>G@3HORUWZJNA4:6@``6[p^EgjcDcQUpxreTfshjygegiv~htuztwîvjrh^_bdcQITNYfqdH\\o_PbKV[eWGRaf]gc`]ZdVTZcjbob_daZkmbcXUbZcngccrvf_YVenYZjdXafilmcoecXhbTR\\ikit}lZ]_MAJYYPMMQZgjhlmjlkYGCB@A@@AA@??@BDDEGHIMPSRRV[^ZUWXRKHHOSNK;=FEF@E?>;3;HHIIOQPOPPNKHL@AICGIDKSEDF;>DE>A@AD8;948CEFFB9DKFGNKJNRTSKGIHIDA>;9D@??CA?>>BCBBED=638<67B@844<I@7?8;=4;E?;<AC?;77<;KN;==:=@B>;3358=@<:@859;>CA>43:2.22.14:F;9@9;0@DCA78AA?>?HA86GIRXHNRRPSWMNSPDFLA?;@JC<CIJEEMPDAJH?<?ACIKLPWRQTVWYWJLYVTSJBJVIAIAGKTMA7MLWMBHYNVUSCTQ?CHUMNBF\\VPNFQNTbb\\PUh][bf^^^`nhb\\[\\\\\\SPRPTUMPSJK{}{yzyz||}}{y{~~}}}|yuvy|~||}~~zwPPNNRRSUNJUUIJJDBIQIDCFE>GJMKHMJJPQQUOGEEJJJIII<EI;AC8<DEIE=5<KD=CB;EQLVXQUYXW__[[[ZWQYa``\\VRIN\\VNTOMUKDEIJHPGLL=CGFHKI>AC?GLMLJHMSKBHOOPPNPMLTUKPQNYXRH:>G?:>=;23@<9CE;39F4*@EC<4,39-8=:97:=8<=9>64=AE>AK;0IVMKQVYWRRQSZZTRSPRWRIAFNHJFB<14GPB?IEDF@HOEE@FPHQ_e\\QLRZNGSUF@CLPPWXPIJLJFFNTTX]^][XSKU^ROVX^^WX]d[\\gia]`_TNW\\bddmgefbTTacbea]akhZZffcdZTUO^j[SW[QY`QR^aekjjmpnpnilkhe]XVei_jqf]UTVNVfZXhd`d]W[^q[[eilp}{wtsmpqohifolqciccce^efg\\Z[ad\\VWnþ½лoy|txputkYgwb^pkf`WRb}{|zxtuvuspnnllkjjjjigfedb`_``_^^^^]]]\\\\\\ZXWWU^j`hzat}v{wl~ɾӺӰɮȫŤoo{pks]yi``ii_giOebobZXWXX[giSQEF]g_UhnWXidLV]WQ`qfTM_aRbqd^aVNPQN77b}Ugqkkqotlf]bwydXOIYpryzbKa]qkzy}lpdEtaTg_[BQo\\ʨ}wrryxhikjkozeZYYWUUROMKLKI@60..///.....-,++,,,,,**,--../1111224655=G@+\u001e\u001b\u001c\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !        \u001f\u001f\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f         !!!!!!!\"\"\"\"\"\"#####$$$#\"\"   \"(8JWahjhd`]V_n]>AODKguriSǸXNh|]IYbISS]eed_vs]`\\9B;8<<BLLFKWaVHE:8=0FXZ>]xpNEij\\GmuGZkvj]Udsa`oik`wr~{xxpĵùze}jpegb[KI\\UVav^HgkV]_?`d^IE^df_eei__dPX^aj_nedd\\\\nfeeY[ZXjjc_lsldYXVgcU]l^XcbgojljngcqVKPaloryp`b`PEJXTFJJMV_aafiit{q]PHCAA?@@@@@@ABCCEGHJLMOPQT\\c`VX\\YVKCJQRH8?IHG>C==53=EFFGILMMNPNJHMC>FEGFEKPCBA;CF?<BBDI@=41=FCEECAKHDLMHLWXQOKIGHKIC@97E?=@?<;<>><AGD=7314750;@:2/5CA4;67:68@=;;<>>>8557NP=<:8;>>89:3469<=;A;7::;CA?;5:2*/,*/4>F88>78/;EA:49AABBEICEEMNXPEMOMMMLMOQKDKJBAANOCCGJIJQWRKJHD>;>;>GHHLNLMNOV[TLTWROJABHUH<H>DHQK>6MLTH;GSJcXKEWQ=BQMOUBIYTSKKPHRa`TMne]dhWW[_hnfYYYZ[\\XWVXVNFQO=ey~~zxyyzzz|}||}|}~~~}||}~zwwz}~~~|{}~~~}}~UTNPXWYXNNYUMJGABIJBAEG=:EKOGKPHJOOKQOJIIOOMJB@@KE4?H<;CFID:4;JD>CADRRO]WQUVVY]^UU^\\UQ[`^^^^YSU\\[VZZT\\ULMPMKPHNH>DBEILB9BCAJMJLHJOTH:GPMMOKLKHQRGJOQWSNJC@C>==>:.8C<7?E7->J5.@C>95-65,8;=:7:;7<<9937<@EAKTG?JSNKNNPNKMMMT]TMTKKZQME=LMDEA<11FOA8CCEF@KQKG;GVMS_dUGHMTMGSWIBJUXUTQMJILIFLSYX]efb``^VYc\\TYY\\^ZYZb][fic`bb``bekljqlkkdX[iieegjlkaY]_^^bXPSMXdYSV[U[\\LP]XYijhnolnf[dj_[ZWS^b^jmd^RQWRWaVWga]\\ZWY\\mX^fnvxxw{stlfpgkinlqpqekdd_aaiib\\^ZigX^sƷƾκ|s}y~rr}trrjaWhm_amk[Xcý~~vw~~|{zyxvtsqomkjkjihhggefgfda^^^^\\\\]\\ZYYZ[ZZYXX`al_rkpu{wiνͰٳ~xqptZxlfone[l]Tbao_VVYZY_gZPM@Qbg]Q_oWZg[CU^UVika[QboUcqd^\\KKVRS>afv}mt{oxkvjaxykYQRc}}pRehrwtvuwjgiHyvXNZdUPCh̸xsrrr{~sinrmjtue[XXWWUTSPNKJKJE9.+.-+++*+,,,-***+,,,++--../0111124676>JE.\u001f\u001b\u001c\u001b\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001c\u001c\u001c\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f    !!!!!!!  \u001f\u001f\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f          !!!!!!!\"\"\"\"\"\"#####$$###\"\"!!\"#):KT[``^TVVLFB7BJ8ByŬĖhŻjfcWNTUD<>ALWnwg\\VdhHB989;FMIKFLTIGD:?9:ILVJepgDMegSJxcD]`jaUVezp[]nkrY{}}xv}lƨɻ~u`thoaPO]cRTjsTUja\\gSNhb\\EHgaf`cdod`aO[`_h^liieYcmbh`WZOYjb^amld_VW[eVUakZ]b`ipjhiydsgMN\\hnmkfWZi`SU]RBGKKT\\\\Z]agt}n]RICBA?>??@@@AABBEHIJKKNPQS\\gg]VXZ_WNNMNF9AMJJ=@==26>EEFEEHJLMMMJGHD>CDFGCKPD>9;JE>AGDDJE<05EC@CDBFJDEMJGO[VILKHEIJHD@6:L?>@?<7<=79EI@6203/15-1:;3*/=?1776657;::9;<@=87.2MM<9767<=07A5438;?=A@<<;<>=C>782+,*)-1?D46;63/8F=43;@BCDEFJPJMNSEFIJHHIIJKJGDI?@DLNIFFFHJNSUVWRJHA859BBCEFEFGEHUYPPVQLIB=BFSD:F?@CNK@9HLPF;ELFfYDEWK;CPJUZEIWSMFQJFPaZH_rZbh\\QSYch``XZUR_^^Y_aLAGQ=By~}zxyyyz|{}~}}~~~~~~}||z}~}|}}~}}}}~~}}~}}~~~||~}WTKO[[YULPWURNLHEKJ?AGC67DKMBLNELONJOOOMLVUONAAILA7BI>;DGG?55:D?BMNPWRO]XRVWWX]]QR`^QR[]\\\\^`\\WYZWUXYZZURQRNNOIPJBFCHOH8:FC?JKFIHMSTA6JNKJKKJHDKKADINQPMJH@==<:?7/?D<6=@31FK78DAA?:495079>;7;:7;<8636?DHMVYTQPQMIKHGICBFEKYULTKDSMIM>DKFIA>63FN@;A@HKMPPXK;IUSVY\\MCKQROMVXMNV[^YSONQOPRRZ`cdeihcbeda^be__^\\\\\\YV]ZZ]``ccdjhfkonkrnlid\\bmkcelpld^^`]_Y]YQWUW[WTW\\ZYVNT\\PSfedlmhkaS^fVVXVQY^^ih`]OMUSV\\TWc\\X[STY^gYdjuztsvrqfdmbhilnpqnfkdd]]ckj^\\d\\ioqƿǺκzzuvvlqyqq{zl_WXeb]`daa~z}}zttuwwxvrponkiiihhhgfedcbba`]\\\\][[\\\\ZYXXYXYYZZacrqmrzdpzya|Žȴٸu}s~tUvohqfahS[]_iXMUZ[Z\\[MTHJ[_dUOcl`feI?T_T\\mgaX]uwY^od]cMShenavmuwzqeyyvYVYt|hr{s|pwrnk]lSnwWMQgRYChƥruurv}yqmrqkkzukd\\WWYWUVXSPMLJLNI8+*++*))***,-**+++--,++--..0110124677>IE3\"\u001d\u001b\u001b\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !!!!!!!  \u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001d\u001e\u001d\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f            !!!\"\"\"\"\"###$$$$$$$###\"\"!!\"$#+9HOPNI@989;?DLOEEWkǽʵwr`TLJT`H@6LLdbXi]RKKSJBA::ITMNPDFFEDC?E7LDCRNjkX?Ra^FOVEX[aaOXk{neUY{fktVyxsrsi×ĺm_wksfQYrfT]ogR^d^`fYbe`dLNh\\labbri_`Sacbg`klk`Xmhaf[UQFZe[YbheaXVX``Q[ibZ`\\almdftnj~]Xbmlkb_XSbmgcg^LKKEQ[YWWWcw}zo\\MGFDB?===>??@@@ADHKJJKMNOQ\\joj]WT[ehdSG>;EMLH=A?<28=EFEDEFHKLKKIFCA>BAFGAFNE<4<KBAEGBBHC73AE>ABAAKA@GIEGSWMDIKECMKFE@9EO?>BA>;<93<FF<41.3/.5.*162)(6=136433478;97<A:87(1IF;77569:.9@7317<=?ADA>=<;:C>761/+**,+<@15751*8B810>ABDDDEMRIKKK@EEGBDEHLGGGBA;GJJCA?@FHKOOPY]VRRG719C??FBBDA>FTUPTSKIE@>?EQA9DA>BLOI?ANJG<DJ?`Z>HUB:CJJU\\EIUQDIQ@DWaPKlbVbdPOR]a_]]TSHVeaYYeW>ANA4dy}}{wwxxz|~}~}|{}~}~~~}}|{||~~|~}{}}~~|zz|~}}}UQHO[ZUMJNQTTRQLIPNCGF:39BJH?LLJNQNMNOSRPZXTQHNQKEFKME@GKI:05<B?CXZTVRO]\\SUVVY]ZNQa]NS[[[\\^^ZWYYRRWXZWSTSSRSOJROGGGMK<5ALD@MJEGELWP8<JLICJIGGBDGEDDLLOKGI<::88;24CE<4;8.8JE8DHAII@=;648:<98;:7=:6847FIKWZXZVVQKEJJBD@;=AERWORJ<ILBLGAFKMDA><IQDEEBMRVOR^LAMPVZVZQGNTRQRYYRX\\[_XPONUYX_cfijjigdcdedc`bf`^ZWWYVTZXXYY]c`bjbaloijoife`^aif`ejme^agf_e]]_[a_^^ZXVY_^QNVXY_ghilgah`Q[aSUWVQVZ[gf\\ZPKPTXURY^RVYOVWdbblovqrtrocbhZiilljohcjfb]\\ekm]aqfvƼ̾ȸ͹vz{zyrtnnrtonspdYUY`]Y`fĿ{ywuvwwtrnllkihhgfedcbaa^\\\\]\\\\\\[ZZ[[Z[ZXWVWY^\\]_gu{~j~|l{_uƱİԻmñ}vyr\\wql{qafS`_``LIW\\YVURZXFUSW]LToobcY<Ve`I^pgXXwjikpafjKg{}wyix}}W]Y}~~phnXk^j|aNNaOQHȽw~wrz}vqtuqmmooige[UW[XUY[XQPNPNKLH7)'+*)(')'((&**'&(*(()+-..0111124689@GB1\"\u001d\u001b\u001b\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f             \u001f    !!! !! !!\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001d\u001e\u001d\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f            !\"\"\"\"\"#####$$$$$$$##\"\"\"!!\"##(4DMMLF@@ELTWPHV`kʴƲwwxqhZIFWiXFJWSx^_WnE@LHFG=?QUKNOFDDDCBBJA];@NR`kN@U\\HBVYDNY[fN_orc\\NP~hywrSŢy~qifhkcyyhwpYZ|oeda^\\^^_`f_Xefj^ZhWte`aqu`bUhgedbkmh]`ob`eXSEFZ`XV]bb]TUZ^RXdj]Y\\Xelidmre}r_fnqjc^\\Yammjkk`VPCL[TPOL[y|sv|n^OKHDA?>==>?>>@BCEHJIIJLNOQ[gnpj[Q[clsmW><GJHD?DB:7;?EEEDDDGHGHIHDA>>A?FF?>HD<8?FBEEC?AD<1>I>;@@@HD:?GHBGQPF?EHCDMMFDBALM=?EB@@<59BFE=98368140*++2)%193*243104:;5+:A96/$/E>9855574,:<91/688@@HDCA?=8<=743-.**.*87-537/(?53..?CDFFCEHMGJJE<AAEAAAEIEFE@=BFEBC<=AEGJNNQXYV[`U?69?@@@@C?9=EORQQMIFDCA?>L9;@B<BISTC?NHGDJI;VT;MR>5AFEPZBHUH@RE9HZTJ[_SO^[LJUb][`WOJMZa^W__H?LO5J|}~{zwwxz|~~}}}z{|}~~}}~~}{{~|yyz}~~}~MIFQVSNIIKNSTUVOLSPMMI>7=AIHELJNOSNOMOVVT][\\YUYXTNVYXQPTQRA:?CMFG[[RVUO\\^UVUVZ]XNN_]NSZZZ[[ZWUWSKNSSXVVWRUXUMMVQHHNM<4@MN@FQHDDCLYF6EFGF@LGEG??FLB<KHHFFK<75875.7ED<47/.AM?<LHEMJIF;7:<=?<:<;A?;<=7>MJLZ\\UVUXSLCFOD=B>:>DPWSOE:?JAIPAFTNKKMSSOIKDEUWOKWZJGOOWZU_ZJPUSSTXZRX^Y\\SMPOT]adhkmnlkhdceeddabd^VPOTVTTVWWXX_`\\`bY[gjehfba`^^ae`]ehga\\cklikecidfhhgdbZXbeXTW_jnlnplb]h`OX_SSUVRSSUgeXURJMRYQQYXSWVW_[hfmxvsnprrmc`bYjikigj^^kg`dbhmpiv|ǿ±Ʒßěto|tkqskotrollg\\UT[ZRZs}}}|wxxvuuusqmkkkiihfecbb``_^\\\\\\\\]\\ZZZYYYZZXWVVX`_ZY^l}{{{mmvjwʲɭнl|ǷvzyorptugdScchTEMY[SQLVlPIWb[QI`on^SCeobIbp^UtqezucpiWjkhy^j]pht`fjn}mOLXLEWɾwosz{vrsxtsogiklnaUVZXWY[ZTSPPNIIMG2$'('&$     \" \u001f \"$%((*-..011103569=BG@.\"\u001e\u001c\u001b\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f                  !!  !!!!!!!\u001f   \u001e\u001e\u001e\u001d\u001e\u001d\u001f\u001d\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f          !!!\"\"\"\"\"#####$$$$$$$##\"\"\"!!\"##&*4@IIGO^gbVM@G^irȾҰf`adbPDNggXT^kbe^hSr{ENK?999@JJGJKFCCCA<TU^]5=LV\\lFBSTBO]SAKYZfOfkiZUHKpglZu~ͩqc\\oȾĶlil|wdzy^ZxtcT[iX]`dgZFkngrhgUvi_aodeWlgfeekld^fn`_cVJDIZ]VUZ_^WQTYWR]da[VT[iifemesreglnke_`__gifhji_SJOZVFCCRqtflxvibYQHC@?>=<>>>=@DFGHHHHJLNOSZdinsi[Y_jqxs^GECCAAFC:B=BEEEDCBEDDFGGC?<>@=GF=:DD=?ACDFB@>@?7:KA697;CF8>GGHEGJKA;FHCEMMFDDCME;AEC@?<;AFFEEFDA@E?;62-,4,(166'(54.-3;=- 3?7-(%-?79627641-79:23309<>EEHG@=:89744+0))/)50)027..@,.*-=CCIHADEGEIJB:><CA>=DGDFD>AH@@HC;=BDEIOOQVWV\\e_I<=@>=>?C63<CMPMKIIDHRHA9H0<@D:DGTXHEMJJTUK?JE>LRE3=CAMVAHUDCV95MVJN]UFJaPIK[b\\]YPJFU_^TZcWBBRG6p~~}{zxyyz|~~~~~~~zz|}}}~~~}}}|}~~~~~}~{xwx|}}}~AAGPOIHGHJNRSWVONTSVQRI??EJMQNIPPSMPMOWZV\\Zb_R[ZYV`[\\]^ZU]GOJRWKKWYUVSO[_USTUY\\XONYYOSYYZZXVTRPMHLQQSUTSST]XJPYQJNRD5@QVKBMOGCBDOXBAJAC=EOFCE??GJ>:GF=BKJ>65:7/2?AC@56/1BJAFQHFMMLF@BFFGIDDEDLDAIC<CNHJYYONRTWQH?IJ9>B=>FPTTOGB?FCGTGKZPRVYaYKJI?JYRGHQSJFMRYYUd`LQURRPT[QU[UUPLMMS]cdhnqokifbceeddbba[RKLQSQQSUYVT``X__SW`fcdb\\\\][Z_d_^eggc^dkomohgnhhmqlmk`aehhe`hxwsrrl_Zd`QW]RQUWQMJOe`QQVJPU[SY\\\\b__fhilk{yz}rqrtsnhb_ellljgfbdmkhllpzyŮΣɦti~}p~dosmqsnmkf_YUXUM_~ywxwuttutplijjhggfda``^^^]\\\\\\\\][YZZXWXXXWWVWX`d^WU\\k~s~|̨̱ͽonɻu~nxyeXkhhLKU[VLMKYZLSZraLHZie[QDqqYgq_lychuphwrxrh}k}~}ilr}_ZqintqPMRL?|¬pkotzzpq{zkagnsufVUXYZYZZWUPNMIHKO?)$%'$!-1-,-)$\"!\"$\"$%&*,--/001355:>BGA,\u001d\u001d\u001b\u001a\u001b\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f                 !!\"!!!!!!!!\"   !\u001e\u001e\u001e\u001d\u001e\u001e\u001f\u001e\u001f\u001f         ! !!!!! !!!!\"\"\"########$$$$$$$##\"\"\"!!\"\"\"%'*7HX[gmh`V@7UhnvüΧw~~ZQP[aQJXvjT[j_]tuQZbJJG;68;@ACDFHFDCB=MnjgP5<LQmj9COR\\]^R>RX^bNg``SMCSuachdzЮq[[sú§lmepb{~^[{yu_Q_m^k`kgWKjqbsrbVvi^`pgf`ofgjekja_il^]dREFNY_SQY[YSPSXOU__YWSS^hfdehjsecrokfdee___\\aiiaWY\\\\WL9:MhiZbtslifeWLE@>?>>??==@CGIIHHHJKNPT]ejovvpT\\rqlweLDAACDA@G?BDCEDBBFEBDFFC>;>@=EE=9DD<?BBBC=;=A=7QO;72.>D:>FLFHGDDG:9JHAFLKEDDCL?9BD@???AEFFGLPLNMQRGC?9961,243&'43,,29;/\u001e(94*&('<1690690**554/202;5<@BKE?;;71141/++)/)3/#*/1.86'+*09>ELIEEBEEHI@7<:B@;=FFBEC?DH?EKB;?BBDJOMPUUU]e`MAFH?9=?@18;?JNFHHIIQ`UNIL6;LF;ELTVWPIPS\\[RBB>FFVN89<DKQDHOJEV84NRMRQMDS^NGKY`U[QN?IV^[Q[dU@ESAO}zxyyyz|}|||~~~zz|}||~~}|~~~~~~}zyy|~:=EJFBDEEHOOPWSNOUV[U[WKINRWZQLSRROMKMU[X[Z^fTW[^\\^W\\fe^XeW[[[`WVUWXSQNX`UPRTTWWPJRUPPTYXVURQNKKGHNMNONPNR]UHSYPOUSCDSZWKKPMGFFJSUOPC>?:NPDA=<DGD:8CC<AJMG@?@<9=DCDC;>9<CCGPSJINNMHHQSPRPLQQMTOKULEJOGHTULNROVWREAF:9CFDGRVVVSRJNSS[UU\\UWVV^VLJG?LUKEGJNJHOUYYWa_NQTONJNULMTOMLJJLU`fgiorniheaceecbbcb\\TMOQRNLJR]TRc^V][OQZa`_ZXVXTR^cbbdgikjghpqqkktjhqxrrqlkirwplqxy|zqn_V]bXX[RPTWOHGNbXKSXQZ___cajrkprprqs}{z~}vywxvsrhcprntsnssoxssxv|ǿǯζǵpbz{myraotrrphjk_WUPNY|¹|zywutrpqnljhhfeeedda`_\\[ZZYZ[[\\[ZYZYXXXWVVUY\\`de\\VY\\o|vuw˧ҵȸwc¾{tievodUWYXKDKWZGU]XTZN?NbZ]NGXqpZmrcvypgktrknso}}{ĥyWSoh_prVOXODīulilysp{{rhehoqrk\\RSX\\ZYYYXRKKJIJOI8\"#\"\u001e,SUHIMOIC==?2.''('*-./01356<?ADA+\u001b\u001d\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001b\u001b\u001b\u001c\u001d\u001c\u001d\u001e\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !!!!!!!!!!!!!!!\"\"\"\"\"\"\"\"\"\"\"!!! \u001f\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f  !!!!   !!!!!!\"!!!\"\"\"#########$$$$$$$#\"\"\"!!!!\"##%'*<Semlf`^VLTwʽɯwzUEIZ^_]enrueXX~VUSMIA:8<JLBABCHFEC@Jlog[<8;JMygDYL\\w^]RD]YgTL`Y^JIN^u[by`wԴ}oT_~ҿprljd{~d^stnbYjrjxbrfYSltZqub[oh]dw{lljqcfnahb\\\\il^[cLCLSWbKMYVRMPSSE\\^USPQ[dbccbbj__ouheimmaVVUWclg`fh`XW?8K_]TZlrljkig`THA?@?@@@>=?ACHIHFGHJOPS`jppjjyoYfmcky|hKCCBBAIIBCCCFECDKKEEFGB<9>A?DF?;FC;>@A?;8;?DANP<<3,8E?AHIG@GD<B@6?J@<EHGCABBF:9C@>@BFGFGHJLLKLNPTKKIGG=7362-',0,*//031$)5,%(,(5-48373.-,/0.+,2?=565AFGD943/,0//+.)/)1-!(*,0=8$)368>EJKOKCDDEG@6;9C>8@LF?AABIBBRMA<EDCEOLIQUQS\\b\\MFOQ?6<;93:;?FHBHJLR]Z`e^TACV@BGRPVbTFRY^UWC>?NKSO=99FJKMIISIT:=LMQSF<LYUJIM[\\PUGJALSUVU[bTBKNEu~zxwxxy{{{z||}~~~{yyz||}}~}~|}~{|9;ADB>BECGPMNRQNQWX[Z_[VVX[`bWOXTQQKIKT_[YYQdTTZ\\]\\P[gg\\\\cYX___aa\\X\\TTPP[VJLNOQPLINOORRUROQNMLKIEHMKNOIKKOXLFTVRTXSPVZZPLQQPRQPTVW]S<G>>XJ>=8?HE=;@HJGHOXVPQSSUSRONKGMLNJHRVVMLRSSOOTVWVRSYWT\\ZTYSLMPGESPISRHOVXRCEC>JOKLVYXYX[TY`_c\\W\\XWQMWVMJHCINJDBIKINWYVWV[YKPPKHCFLFEMMJIHJRZckjkmnmgfd`cffc`cda^ZWSOQPKGPaVUaYTYUMKU`^YVVPQLL\\aegdglqvjfqmopovmiqsrqprrjs{toqtw}rq`SXd`ZUONRUOHCM_TJQ\\\\ekgknksytxxqstwy|||}}~{yxuunhvwqvvty~xϿ¿ëħl_xyhlh`nvttmahj\\TJJmzyyxtqpoliffhgebbcccca_]ZWUVXYYYZZZXXYYXXUTTST_cdb^\\b[\\uovm˶Ҵư~z}{zi{zŒ}soyxgeVRNBES]OEX]VFXQQ]ZVVDMUgt^XbpYZkzgmbO^jvwjpx˼}}fWmpUwucUaOPʫ}{ummt|wmkklklmmknqfWRUWVVWWYTLKLJILKE( \u001b\u001bAfdRR[cb^[[^LC;6.'(,./12356>@AA?/\u001e\u001d\u001d\u001c\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f     !!!!!!!!!!!!!!!\"\"\"\"#####\"\"###! \u001f\u001f\u001f\u001f\u001f !!!!!!!!!!!!\"\"\"\"\"##\"\"############$$$$###\"\"\"\"!!\"\"##$$%(6FHQV[YSSk~̹{^KKMdtiymYitp\\VTQH;528MYTE:;BGEDG]i\\XI8:CH^rl]kVguRaUUebfCLYcbGX`Wvt`|ohkռmRdȾtvqah||i`mrnkawus{gqkbVluZjri`ie^hzwpsppadk\\eZUYim_\\bGCUVY]CNWRKMNTIJZTOMNVcd`aa`bXTcyc]ksobTNTY^db`j^R`hN;O_VKU`defimmieZLCAAABBA?=>?@EIGEFFIOQRZenk`\\k~p[UY_fpj`TFCECHHFDBCHFCGQRGDIHA96>BADFB=HC:<==;9<BFDII=F;/:FFGIHH@;I<8B67FB7<FD?@?8AA7BG@ACGGBEHIHGFDHKGNEJMMLB?<83,.1+'+2-)00-,1*')+*/-2767++2,),+$,?A6/.3BFGJ</.50.4,-.)/)1.#(*+2;:-+799?BGNSNCCDBE?7:7C<5CPF<<?IGBNQE@GKGFHJFLVQKQX[XLEOSA5<95799BBBCKLQTYLgti_EQ]:HKSIW_OIR[gSXE>@P[MQC;<OKLOKISKT>EKHUHB8WVNJKP[UNL@JEPPPTZZ[SLRIf~{yxwwz{{{z{zz|~}}||~}yxxy{|}}}}~~~~56;BA>@DDIPLKJKONXVXY`[Z\\aacf[T]YQQKJLT`\\TXNZTSUS[ZKXgdUZ\\WX[X[_a`^_WYWMXXGEJLKHGGIGNSNOJHKJKLKFAHMIPRJKJLPIGQTSTTUXWXUMPQRX\\ZYZ[\\[JDTELZ@>EFOSKDLVVWVV[_^]_bilaZXYTP[^VKPZVXRQX[\\ZVPV^WSV_]Y``[[VQMNDDRJFSODKSXXINPKWTQRY\\Z\\YXYZ\\`c^WWUQKCNVMHJDDMOEBKLLS[XRRPRQHNMFE@@FD@INLIHOZ`fkihhiife_`ceda]cebbcb[TVWSOVaWVZSQTOKIO\\]WTSNKIM[`deadhnuibohkmlskdijlmjmreitpigms{{oobVV`e[SLMRTRF?N\\QJUdinnlosvwvvxumnpuwyy||xusvpjsxvuvwyŹƲԻ̺|iaxtec`anutsi]mm]WYý~~~vwvtqnnmkgeedcca``_^^]\\[XUUWY[[ZZXWVUVVWWUTTRSZkl]V\\d\\X`ms|pǚ˵zxu|ys|zuunwrpXNGKY]P;Jb[PLWZecX]iTLY`VYX\\hZh}doVQmmy^HNm|eutɰ~saqzUuwkZ_Moˤ}uolpqgbgmpnnlkqunaYVUUTUTUTPOLKKKJI5\u001e\u001b%LbgYS[`dcfipa]RG=6/+-034456@FA<7/$\u001c\u001d\u001c\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001c\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !!!!!!!!!!\"!\"!!\"\"\"\"\"#####$#%##\"\"!\u001f   !!!!!!!!!!\"\"\"\"#############$$$$$$##$#####\"\"\"\"\"\"\"\"##$#$&*/7EQSON_zȸÛ}dLI[soqnoj`VQME8:IRZehXIGECDHQRPPK>9FPSsqqgl\\cmMg~[dml^:TWo`Ol[Rvwm|mzl^wtMfǾqys^ox{l_kqnnj}xwzfn|jPgq_jqi_afhjwvtysj_agY_SOWgl`^\\EC[WbTCPRNFNKREQROKLT^fa`^__[NUriVeql_UOT`d`^^aYPi|fLZf_RQUUX^dlonli`TLHA>@CB?<>?>@EGGFDBDMURZnsg[[tmV\\]^`ad]NIIIIEEHEHKGEISTIGPRE;9>@@EDEAF=6<<<;:?HFDGBG=4?EKPODED9<G6:=1<F:4>EB>@:3E?<LMGIIF?=GKDADDCJFDH@ILKLJIF;98?<5232('140-./)'*,262233$,1,#)+(3@6,+/8>CIJ@1/<=3601/*++30'-/02474-3<;:>HQRMEEEBC>8<6C<8DLA8>HLHLLJJINMGJIFIXUILPOSTI?ITF9<84886?<?ENPPNKMlrncLVY9JOSEVWKVX\\m]XGBDJcNQMEDYOJQMGNPSDLFIQB@>YMIJNTWNLAAKKXNJV[VXRTQ[||{xx{|||{zyy{~{{~~}}xux|}{}}}~}}~}~~12:@?;=ACJNLHDMSMVURW^YZ\\bcbd\\Q_\\TPKPRT`^PRSTSSRMYVDTc^KUUT\\VQUXZ]]aXW_[]]QJLJCACFIHQTMMGDIJJLLE>GNJQRIHIJKHJRROPSWUSSNPQPW__[Y^c]RKU^T[VBNY]c`VUbd[\\_]]\\\\]aiqmaZWVSR]`UHRZUXTV^`bb[S]dZTWbc`a__ZZUOOFITLKTNDJTXVO]\\S_UOSZ\\]^ZWVTVY^]ROOLD<HVLGLEGQPKIMNQWZVOLJJJFMKDA<?DC=DPPIIVabgjedddbde[^cb`]Z_bacef`Z[[ZZ\\_YSSRMJJIJKW^TROMHGP\\`dgcafinlcofeihmg^_ahhcem__pl`^inqwlmb[Z[c[UOLRVTC?QZNQ`ommmmnrzytvvmillquutv~vstusomozzv˿ʶٸ˺}{qffyqecdfmuute[rm]}ÿ{z|}}}~}~zvsqppnmlkjhda`aa_][Z[[ZYWUTUWYYZ[ZXVUUVVWWVUVWYbmdRYcXT`[soysȢu~ttyuzrvƜǫgrqi|zdIUrkY<8^fTXPNfg`Y\\h_GUW]cbeak~tnsk~py}[CDG^of}}xvoz|Xrzg_ZZ|wngilljmpsttsonrpe\\ZXVTSRPORPMLLLLIE&!0JXb[PV]baacfdghUHEA7/15656:CG@2+\u001f\u001e\u001e\u001d\u001c\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001a\u001a\u001a\u001b\u001c\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f   !!!!!!!!!\"\"\"\"\"!\"\"\"\"#$$$#$%%%%%#\"!     !!!!!\"\"\"\"\"\"\"#####$####$##$$$$$$$##$###\"\"\"! !\"\"\"\"\"#\"\"$&),3CQW\\l̽fmaQjrmp~hgZT^jnsy}uzqd\\QOKRMA;A\\Y`vxibjUYoMhioskW:eTq_VrS\\kup}fpw\\wuпGjùf}sivs~o_gspptww{w^oiLiiaona]\\eojty|}qe``bVZLMUbie_UEE_XfMGMNLDNKMIPLIFQW^h`\\\\Z^PSbvUgrf[ZZZdg_^ahg^n~l[foiZOOMLV]`fmoome[RH@=?AAA@@?>@CGIHBAHVeabsky}c^aa`\\ddVSIFLFCMMPOIFJRQFIUSHA?A??ECD??64??><:>BAFHG>;GKKUSGBE=5AE7<63AB97?AAAA;=I?ERNKOL@:?JH;;CAFKBEECJIFKNNIAEJOKDC?2'/9664,6(%-2:?2,-3%,.,#-67::/+346:?FE?67BGA6;752-39337997598-2D>5;HQNKIGECA98>5A>;DE98ENNKHGOOLPOKJIHV\\LGQOJOOC;EPHDC;/569?<>IQPIFG^fdnkVUP@JQSGTRJb\\\\he\\QNNC^TQTUL[TCSI>NTPLT<PED?JTFGIPUPLN8ALN`MESXUWPOU~z{|yy{}~}xy}~}|}{~~~~}~~~}|~~}}}{z|}14<A<8?DFKNMFDQTRRQLT\\UWZ_aaa[S_\\UNJUUSb_MOSPRRSPWP>Q]YFRRM]PKQUUUQYVS^b`b_UOHBDHHLNPPLNICHJHLNI>DOKPSKFINKGNVTOPVXUVSQTPR[_[Z\\__VRX_^^_VR]cfhb[^f^S\\aYX[[Zbjjga[SMLPXYXNLQR[ZX^bcbaZ^c]US^da_ZZVZ[TWRUXUVVRKPYXW]h`Y\\RMRY\\]^ZWTOQW[ZMJPLA=GQHGNHPXVVQMQQSUOJGDCCAMJA?8@CA:ATZRT`dcgfbba_[bcZ^da^]Z\\aabed``a]\\aa_[SSXJCFEHLY\\OMHNEER]bhne^gjmremd[d_fd\\XZcc_`i\\WliZXfgiuljb]\\Wc`UNIRZSAATYS_lrhjklnnyyruujglhltsmv~~~ztvwupo|~}ͻʴŝƶy{them{kfdfkmqtt`Yr|{{zyxxxxxxwtnllnmlkjjhda`___][[]\\ZXVURRTTVXY[ZVUVVVVVUTV]bX`l_Xc\\S_Yy|poryp|zzortrt}ʴØZpieFuxZ?Ib^WZFMdmbiW`fM[]qouwtyxy}oSW:P~~invYx]eYsƻ~xtqppuyvnlu~{qikkc[[\\XVTRPNNONLLNNGL7$6BOZYPRW][YY[amqcPIME:3236=CEF@1\u001b\u001b\u001b\u001a\u001a\u001a\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !!!!!! !\"\"\"\"\"\"\"\"####$$$%%%%%%%$#\"!!     !!\"!!!!!\"\"#####$###$$$$$$$$$$$$###\"!!\"!!!!\"!\"\"\"\"###%')+1=DY̿oqxccwptjYy~{utuje]RXaL<D[i_dt|^_lJXsNcptldJFwNq\\XtXcbhe|e^`ktyǸApw^}uwywmceyunxvpmZzfMl`_pe_]^gqmu~|rfc_]UUINR\\fh]MFHbXbHGIOHFJHLRPJAMXS`g]Z[YZO\\sg\\sgZZfcgg\\_jmnmqvmfkrlXKSVMMW^agsuokfaWKA=>?ABBBCCCDFJQ`nzzc\\`ng`h`XIERH>NSSMGGKOIDLPOLJEE@>BCC;;46ADE<<@DFII@<IOKTZH@GB98DC<<29@=5:>;BACFKGBOQKLQI<<AG@6;@AGF?EEILFDJOMIJRVVUPRK:.46666+8**38;<6..6/,04-:HFC<6?:744>EA=7=DHL;@ACA8BA;FFGFDCGB1;MC6<HMJFGGEC?59>3@?<C=3=IMJB>MTJMSOLIMW[SGKRJFMK@9AOMMMD107@@?@JPLAGTbWZmx[WMJISRLRQKfU[]aa^[SAW^SN^SYU=QC9UYOVT9U8HATKBGHPTHLR?CPM`JBQY]SHKq}~}|}~zy}}}{}}|||~~~~yx|~~}||{|}}}}}{wvwy}77?C9:GIHKLKFGSTNPOHUZMOX\\^\\[WS]ZSNKRNQa[NORNTRVSTL;SXSHOSH]OGRUUQHPPOX\\\\`^WSJENUPLOMHKJECHLJLONGHPMPUOJPTOJPXVSTWXXVUWURTYYWY][UQZ_Z[\\ZYY]b^[ZVX\\RTd]QY`YXdhchgWNJJNVUYXIISce\\[ab^`]YZWNMZ^[[UUTW\\[d``[^`Y\\UY]U[hd^[UOLOVX[_ZWUHIUUXQJTOEEKOHMQMX^^\\QPQPQMHEDA=>@JE==9@B@>H\\ecbecdf`_a^ZX`d[ad_\\[Y]``beedeea]ei`]Y_`OFFBHNXSIECLBES]fgif\\flqxjgaV[X`aYUVZ[`_e]SdgXTa_dskgb^ZUb_VMFU]RCFY_[hkjihilnmttmstefnhkpnmy~zy}|tuz{}|wzy÷вùհͿò}xtzdbszfgfhljjpn]d~{||{{z{{z{{{yurolllkjihfdca^\\[[[[\\ZZYTSSSRSTTSUVUUWVUTSRRRWcb\\hgW`cdc\\fuqsqsøƻŎpwpx}o~yÐkcrn|VXoVXp_T[FOjqio~~jso~uplzq|_G<h|vwv|rjx~zrYVeXžzqtz{|zvojtvpmifb\\^c`YXWXSNNOMKMLHJC,7>ISZTPSZYYY\\crsgZQLKF=21=IHB?@9$ \u001a\u0019\u0019\u0018\u0019\u0018\u0018\u001a\u001a\u001a\u0019\u001a\u001b\u001b\u001c\u001b\u001c\u001d\u001d\u001d\u001d\u001d\u001e\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f      !!!!!\"\"\"\"\"\"#\"#####$$$%%&%&%%%$$\"!!! \u001f\u001f!!\"!!!!#$$#$$$$$$$$$$%$$$$$$$$#$#!!\u001f\u001f   !!\"\"\"\"\"\"$%$#%')*5Q_sžrflo`nwȸ{xqpmlib```Z^QHajihhqrPdkEfmK`ukaYCinIlUZ{aej_[tiVsjkkGvq}cx{u}mci}wi{mn_bv[UjX^iZb_frqovztje^\\VQGPPYcfZIIMcY\\GEHPBIEDPSKEEZVSh_X][`QUit]pi\\Zfgee\\btslkouriikleY\\c]UX\\]ctumijif_UJ@>?@BBCEFFEH\\z}zedq}kdfaRJVK=JPOHCFJHCGLKILPKGB?@A@<>8<FKKBEJNNMF<DMMLQL@BF>:9AC@<3::81<9:DCJQQDGQMINQG?@AC<7<>CGB@CEMOFGLNLIUZX[[X]RG<8630+,8157?9:@;8<>7?FCLQPM@EP@>65BAF;7>BFK@CHLMFJIGPOTTNLUO>GSL;?HIGEEFDC>59>4?>>@61ANK?7DSMGMRQOMPURLIKKEDKH?9=KPRTO=49GAEAILG=P^QJ[mx`ZLQGSZQQPNcMVVYab_TITdYH[ZVT:HA<Z_Q]HAS7DCTDAIJRQCNRDERI]HCRZ_Y>V}{{~}~~|{~}z{~~}~~~}|~yy|~~~~}{{}}|||zxvwyz|}<=CC=FOHILIGDIVQJNNESSGLV[ZXVPN[SPLMKHPYXNNORUTXRUMBXWQKOQD[MERTVKIPJMUU[]SPVRIMWTLLLIKGFEFOPOOPPOQOQUPOWVQPSXWVWWYXTVVRTTVXTX^XQV_[UZXVWTXZQTUQSPScbNN^^SZgfbiaOJJKPWVX]TMWij_Z_a^]WVTOIITWTVSTTRU_ha]Z`a^b\\]_V\\f[\\[SQKMQSY^ZXTFFOMRSRVQNOQTVZVS[``[UUUSULHLHC<:>FA::?IGGOWdlnkedeb\\^b\\VU`d\\ba^\\\\\\_abccfhifbckla_hnfXTNCMRUJHEGNGKR^ic`g\\bkqzn^`YXW\\_XSTTVa^`\\T^eXQ\\[frkgbaWSccWKM\\_[NOcfbiegggikomoomrsbfogghlt~|xz{wy|ļӻƳǽ}xk`]uxefgfghhmmp~}|yyyyyyy|}{zzyuqmjkjhfedb`\\YXZ[[XWXXUSSSSSSRQQTTSSTTSRRRRT`f_a]VZannSZxwvwОkzy|uk͛ˬ_mt|Zu{_ggZ_IYs|zjpbx`xhgxz^Tfwl{vwpj~|zqZ|V^[̻|psz{vnnnkzpippigebfh`]_``[SPQOKKJJII93:CPYTNQWXZ[X[eWPNLHIKG=;EEC?BKJA%\u001a\u0019\u0019\u0018\u0019\u0018\u0018\u0018\u0019\u0019\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f   !!!!!\"!\"\"\"####\"####$$%%%&&&&&&&%%$\"!! \u001f !!!!!!\"#$$$$$$$%%$$%%$$%%%%$$$#$$!!\u001f  !  !!\"\"\"\"\"$%$#$&+4Fsϼ]a˴~vhx|źzwsikidb_^^]XVR^qcbofa`Ok`LtaFgmbZOKTNbXXzeipg^glWo|nnY}~olwmy|oxlapshx`q|Xo{jV^dU[_\\c`mwqoy{vlgZ^UMHPMV`dUGLRbYXFEIJCEAITMGGP\\P^hU[``_O`sidq__^e\\a[f{ylmrtohegmmhioqkca\\apsebgkige`VIB>=?@CGIJIJS^uztsrommp}zx}qpl]SRL?GJHEACDA=GIGEGROKEA><<@E@ELOOMMRSQOKFIMMFB>;=@<:7<CA;38774<7@CFNRKABKIFNPEFE@?;;=AFJ@>@EMKFJJMJO[YW\\[Z`USLJ@90*085;;A;>HFAELHNQSVPOMGSQFG<<DBL;:>>IB?FIMNIIRQINZYMKXSIN[TBDDHGFIDDC>4797?>?803EPE5?OPIHKQROPPONPKFEBCHE@<9FRSYPEB=GEEAIIACWU<M_hof[KTLRaPRNQ^MOPSV\\]YQV__NWZNS<??>\\]RYALO??EMACJKRNENMFFMEYGBPZd^E{zwxy~~~~}}~zy|}}}|||}~~}}}||~~}}}|zzxxxxy{||ADGAETOEJKFD?EXNIHNCTPCHTZYUTILTKLLKHHNRULJNSTXZQUQQWYTKMODSKCRTQLOIFMSR]^QMRTNKSVPKNPPLLKISUONQQPPNQTPSVRSTVYXXYXYUPTTRUSRSSY^XQZ_SRYVVXRTLLZSQSP^gSIY_POckd`b[PLMMUZWZacUXega[]]^XQVVMFFSUNOQTPKO\\bXSXYZc_W[]W[^U^ZTSJLNPU[YVULJPRSRWXQRQW[^c\\Y\\_a[Y]\\W[TRYRIC?BG@;@JOQYacipqkbcfc\\]c^UU`dZb`_^_`bcfeagkibafonb_qvjcd`MPYVMOOU\\]ZX]f^_f_^ejxlX^VUW[^VQRPYf]\\ZX]bTMZVeqjfcbYWccZRZ]cgZXjhfhfjiginonokkrs`epgghowww˹¼¹Ǳ¦~|xc|~[]xwcdmfbc`pû{wvvvxxxz{zzzxwtomlkifdb`^[YYY[ZVUUUTSSSSSRQQRSSPORTRRRSRS\\b]`XXdhhpPTضysvy~ufȹӣֵezaz{v]uscKQo{vuxnZlqeyTN[gp|trypmh}r~znXwWYbposrjfloqsxkktsihjhgc]_ba_\\WTSOKKJJIKC33<JSOIKORQNIIIA>?BFIHGEE;<<BJU]F1\u001a\u0018\u0019\u0018\u0017\u0018\u0018\u0018\u0019\u0019\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  !!!!!\"\"\"\"\"\"####\"###$$$%%&&&&&&&&%%%$\"!     \"!!\"\"\"##$$%%%%%%%%%$%%%%%$$$$$$$#!! !!!\"\"\"\"\"\"\"$$$#%$+>RNmÿfU~zҿtvkaeecb_]ZVTTRg`^]cXc]`gbVsUHo|aaZJ\\GQd`V}epuubVk\\l}ot~tlpaq{tu~ivpilokp\\sqZrmd[]`WX]dddsrnq~|zqnfXbSKDNIQ[cRENU`WTDFGDF?CPUIHQTQOf]WcecVXpoapdf^]WY]g{ynprqolediqpnryyoc[aomgfghgffgfaVI????@BEGIKG<Fjoh`ZV[lwz{zdb_H@GFDB>B@;;FEDCDQPQLDA<<BGFHLOPONSPPOOKKOQA><37?::6:DA857689::GCILKE<<D?ANJDLHA@<@@DJH=8?FJEHIHMLXXSTVVU[VXVULI@<=<:?ACEDMKHMMMPURLPKFIXSFIFFGHG>A?@L>CJJLIEIXPALYQGLXPHO`SAD>JFFICDA=656<?>>2-7FI;;MOJDBIPKJMOOQPGCDBDFCB>;DQWXHFNCEK@@IG@MP@5S]elc[KTZQZLSMQ]QIFMJS\\YS[Y]TXXGS@>@@^ZSJEPLB@GIBDLKRRKMJEHABVGAL[^Zp|uuw{}}~|}}|||}~}}}}~|~|{||~~{|}zyyyzzxx{||}IJGCOVHCJHCC;AVLFBNCPM=CSXUPQEINLHJIHKMPRKGNQR\\XTWVWV[UNIOFOGCP\\PDNJCGQZY\\ZOKQSRV[ZUUTWSRTOSVMITTKLMRUOSVSRRUXXXXVVUNOQSTQMMRW\\WQY\\QQXQPURMFQXOSX[b[MV`VIVjh]Y[\\[TSX_b__ai_V^dcYYZ\\WMTYQEDQVKELQLFIYaRKRQTcaUU]YZ[T_\\URIKLOTYYWVVSUYRJPWSPQYYZa]ZYZ]\\YZ[Y^YZcZOFDHLEBJRT^ehijppg^cfd]\\b^XV`eYbb_^beefggcege_]flkb^qtliopZU^]X]_ehol`]f]XgbZ]_nmXYPRW\\]SRPPdj]XYacaTQXTdmjedgc]ceZZa^fg_`igjlilhejtqqqgdos`dogflvz~Ȳ־ǵƼyzvau~dezxego_Xct}zyyyxxwxxwwwvvwurnljec`^\\[YYXXXVTSRRRSSSSSQPQRQQQRSUUTTRPWe^c\\]~yscəѰöq}e||cĴצټtnf~zobt|Xgwhokej|p^`[`zzxjnnldltpxsuy{m_y]WjyκƷstvqjgilnpqtsurgegda__^^^\\XWURNLKJJJJG9/4@KLECGHC?>=;;<;<CHFEEC38=DKSTN#\u001a\u001b\u0019\u0019\u0018\u0018\u0018\u0018\u0019\u0019\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f !!!!!\"\"\"\"\"#####\"###$#$%%&&&&&&'&&&%%$\"\"    \"!!\"\"#$$$$%%%%%%%%%%$%%%%%$$#$$$#!    !\"\"\"\"#\"#%%$#')-9oU<pʽ½~oyʐq˻wmkb`baa`^ZWSRRS\\OcXOYnag`i_pOKsmYjaElBQlaZdp}w`Pl[etnz{Ũgpiaunyp{|th`vuwogjig`thakc]V\\XRXagcivkjtxxpgna\\fOKCNJNX_ODOV\\SLBHC?E<HUOELTULWcV_ig\\Wlu`infdXYSadtriornllkhhnpms}~tkgijfcgjkhebdgihaQD@??>>>AEIJFAMxvU=76B_syulam\\CMHEC?CA9;FCAACONSQLLEBDKLILOQPPNHJNPOMQTEC@5<B=;4<E?3788;=;>FCGFA?7:=7AMBDOHA@AB?BFA6:@HFAGFHNQYSOPPPOWRVYWUTQJFEFLGHJKOMNRLIMSKFOKBHWP@IKGGMAHJDIKDLJLKDCKVD?JOHESRHGPZI?:?LEC@CC?<66:>>?:2-9C?:HNHB=@JIBDJNRLA?HJBFEDD??DNUTCGSGIK<BGCIOC0AQXfh^ZMQ`NQHNJOXOG@FFKYRR[WXVS]GUFENF`XUBDQEDCKLDFLJSZVNKFG@COFDHZThyttw|~}}}}~~}}}}|||}}yz~}{{{{zwwz|{|~|ONLOWO?DKGBA<BTLGBOHKG8DQRNLPINJRHHLJOOPQKHMSUYSWXTXV^YVKNJPEFP[QBLLB>L]QPZRHOV[^``^\\TRVUVUQRMENUNIKRSOTZVNPTSTVUQTWPLNNMLHIOSZVLPUPOTMKMNKEQULT^`ZOR]\\RQaf_ZTT[^\\beghea`ibWZae]XZ`\\PR\\YKHJTP>DLJHKZ`NHPNR`dZT\\\\YYT^\\VPHKNRTVXXXXW[_YMLPPOPYSXaXUUTWZRQPT^VV_[RKHJMLMSW]gedghlla[ddc_]][]X_fZce[befhjfgbcba\\Vbgic[nnginueZbgcijklmqjefaR]bTSVbk]PNUWZZUUQZmh^Z]mk`Z\\ZVbehdcli^be\\eb]geikkjnmingejtqoma^ipadminr{в³ö˻|vvesrmxzkfh]f~~~}}|ywwussttttuuuvurqolfc`]\\[YYXVVUSRSSQRSSSSQOPRSSRRSUWWWVTYf`fieչŬڽûvz~`ðpb̰ӧut~|tn[q}psmkvSgcwy_n|{~jesregalmxz}tu{qwzpkvykZksųŪ{yrmhhmqwvomjgfc`afe_[[ZWUTQNLKKKKJI>/.8EIEAAA?=;;;<;::AFEEDA17>CIORC-: \u0018\u001a\u0018\u0017\u0018\u0019\u0019\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f!!!!!\"\"\"\"#####\"#####$%%%&&&&&''''&%%$\"    \"\"\"\"\"#$$$$%%%%%%%%%$$%%%%%%##$$$#\"!!!!\"\"\"##$$$&%$$(/9PgȲ՜{~m]ŷxxib`a`^][YVTQPQSWRjZNhj_j_dgoMLm^VucB|x>Oucbxaoj]^lQdtj}v{Ϫygq\\dojljznubq`xkvllvdffgvedd`QP\\PMZge^lpfjtzutech^dhLOGQOOSYPEKSXOE@F?=C;OQJEQRQP`]YcoaQf{g]sbmTRP_fllimmkmokhippjnwyqkihgfjokhfecbdfiicWLC@@@@?@CFGGTr|wrjK4<FJOcvz{vuvm`fvRQOIIEGH@AJGFCLRMSTUXRONQRNNOPQSKJLONRORSLIGCGJC<4=E:.98;<=?@A@@=<:3695CH;CK>?EC?;?<<6@BF?AFEHOTRNKNPNJVNPZXVVWLEKRTKHKMQNNSIEJPHFOI=HXG8HKIHHKPMIOJOPNQIDFLK;FGEEJSIEHJQE;7DGB?<H@;988>;?C60-5<9>ID>9<EGA>CMTL:8@LKDFHGDCDHKNPDLSJKE@ICERF53OHSe]]XPJZKKBHDFPLF>@DGQMOUUUQJaIWLT]QdY[JHQGLJOLCEGJS^_TPFBAIGGDFVX}wvx{~|zz|~~~}}|||z|{{~}|{yxxz|}}~}~~}~}}UUWZXKAFKFBDAGUMKAQKHA5CLLHMOPTKSNNOOURPQKKRV]TUSTTY[a^_VQORFIRTNIMM>9IUMFNOMSZ]adb^\\RJTSOVPPNEIUQEJQLLVZTLPSRSSRRWYSNKFDFFHLOSRHELIFMJCDKLFNSKS\\XOKRXVST_^Z\\VRY_ajjhhda_eaYX\\fcY^idVT^_URJPXC@HILR]XLOQQX]a`XZ][XS\\^YVJKSTSTVXVSX]]^\\TOMPTXPX`QOTMQXLHKPYQNXVTPKILNPWXci_`bbgi]Zc^``]YY_Y^eZcf[`fdfjegc_^]ZR^ee_Wlibffjg]_kjhjehgmkkf^PQ\\PLQZg`LS^[Z[^^Zemfb_gskded\\Z^^_^cmh]ccegablmvxsrtplpggiomlh\\\\gkckooȷçtyls|ztvzk]j|}~~}}|ywvrppqrrrrrssqpppmhc`^[ZYXXWVTRRRRQRSSSRQPPQRRPPRSRX[]f`uhf{Ѿ¹̹Ψ͹n{e»ipʭɧؼǶ|xearvwgvo^igwdyzmacuvb`ccgs~zyv}q||yp{vqkhv`goĶ{vspklpzwmecefd`cge^[YZXURROLKKKKJKB1+4ADB@A@@?=<<<;;;?DDDCA24<EKLNRU6\u001c\u001a\u0019\u0019\u0018\u0019\u0019\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f !!!!\"\"\"\"\"\"####\"#####$%%&&&&&&''''&&%$#! \u001f \"###\"#$$$$%%%%%%%%%$%%%%%%$$#$$$$$###\"\"\"\"##$$$&%$$*;DfحҺĬ}ݨ|gɾtoeeb_^\\ZXWTRQOP]Z[grZrddt]XqrLNfUU|[Fg=Qwgfj`z~^cw\\Qh|uqzx˵tym{sUeje_hyjxripikqdmhof`fdtp`^_[IRYJL\\i`]mfginsuo_cd^jgPUKTVRLRSFENWN?AC<>@>XIFJROPWaZ[jm][uw^mif^NNWb_felmjkmligjnjefknlhebaismdcbdehiggfc_WJ@>?ABCDEBGnvcTDLlzpNIZ^bfiktyvnfe`zqNTLNMNRMOROLMPSNPVYZVVVTTSNKLSUMUTRLUTTSQPOOPRMC7=F7,89?=>AB?;89:4+125C>6BA6=EB=;:=<;>?A;AFFEKOJIGIMNGSMKYWUUVKCJSRIGMLNKJPGCJQFHOD:KVB8IIHGIPNGJMIMLSTKIIJB=IDACIGCFFIPLABGA>7;G867=:A9>C5/,387:<879?D@=?GRL85CIJHCGPOFHKJIJKJLPNHCHLFOQ6/CMKN`T[TM@RGC=@<>KJG:;ACHGIQUMIGaNWL\\]\\c\\e\\WZQVROF;@EKS[`YVF?GRFFEGOpzwy{~~}~~}~}}{|~}|zyzz|~~~Z[]\\WNGHJFIOGJUOOFVKD>9DIJGRRVUMSQUQOXSONKNYXaZZHOY\\_b_cbWPUJNUQIGPN<;FJOHFLRX\\^_b`\\XRKPNHPPQMEFQREHPFGYXMMRSRSSOSYYWSNE?EJGEKNLHBCC@HJA@GLIGNJQWMKJLOPNOYYW[[[`gdfgef^\\__^]WVcb]inb[Y^a][QNYNEFHMT]WORSV\\[]`YTZYUO[^VYPMROT[UUWTX_^_c_UMTZXNW_MNTGMWJEJMSMLROPOLJKJNXYfdV]^[cg[[`Y\\^[WX\\Z_cWaj`cgbageid[YXYQ\\b^[Ucea\\`b`]Xjk`c_ffeffdZQOOLKMTcaV`e``hmfemhfdbklcimg^\\Y\\[Zdmiadfgffmsw~{xwwtopkjjkkmk^_kmp|zqĹ¾ʴ;Ȳöưszzqov~trjiɿ~}}|}||}|yxwusrrsqqpppommoonid`^[XWWVVUTSRPPQQRSRQPOOOOORQPSQTZ`sps׷ԽѹȰtg}mě|ézϯǦײtbzx}]gz{i{hoqr`ZasnZ_c`kx{wzw~gv}ctyp~q_b{dbmïvuuroosxocadfda_`^[[YYXVSRPNLLLKKLG7-2=A@AA@@?>>=;;;<>BDFDA85?EEGRXB \u001b\u001b\u001a\u0019\u0018\u0019\u0019\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f!!!!!\"\"\"\"\"\"####\"####$$%%&&&&''''''&&%$##! !\"###\"#$$$$%%%%%%%%%%%%%%%%$$#$$$$$###\"!!\"\"#$##%%%$+NzθʥĢ||ֳvzv[~kike`_]ZYXVTRPORm]bZjvfn}ZVurNP_S]~QU{XEVuiaiigesQ[tÝs{|skluaNfe`Wkzkwlx}cgud]fjiYced{a\\XTQPWOFK]c[cg^hegkod^cbdmcX_P[aSIOVHAJVK<AB;B=HYBIQTOQ[_]aog]nygcofiKRT_X]dfhjkkihhffdehjlmje_[aki^^`bcflkgecbd`UIB@@@ADC@NugTDNlycHKanvwqfgeneUPNQPWXVUROOOQMNVYTSVTQPQMIJQSNYZSKVWVUVVRSVXVN@AK;.69?>?DDA;6<>0*,-6>55<31;@?>96E@::;><AHC>EIHBBFHLEMIESRQPRKCENLEGMHIGHNEAKQDEK@8LR@;GFEFKMH@EEDDJSQPMNL>DBDB@B>EBBSQNJNG?7.:@17:?:A;893/+5;410248<;<?BGJ>4BNMIEAFUTJIKJIJLMJNNFEIHLXG.6MDPI[MWOH9LD><92:IKI89?A@BCQTEDH]TUH]Wa]_ilfc`^[PA5=HNST\\]YE@JVGHI:O~zz{~}~}|~~|~~~~~{{zyz|}~~~XY[ZWPLNNMUVLMSRQQYJIDCJLGIWVZVPUQWQJUSMMLO\\[_`Z@Q_\\_`_ae[RZPR]RJNSOCBEGOLIOTZ^]]a`[URMJMHLQPLGELPGGNDG[SHNRSTUQMQX[\\WQJBDHEDEGLF;:>?BKD?CKI=GHMRIKJGGIILWZUWbgjkaabccWV]ZY^UQ[ZcqcXYYZ_a\\VPSVRIHLN\\_SPUWZZ[_VLSVQKUYQVUPLGSbWR[VWabaa`VOX]YMU]JNSDMWGBHKMHGKIKKKJKKPX]fZO[YWbfZXZUY]ZVW[Z_cVZjfefa]ddgeYVUYTW\\XWV]e^V\\b\\ZTbfZ[Ybda_]\\XTQJJIMZeiggecjtogjlefbafaamnb[\\V]\\^imnhfiijmuvx|ywtvwrrmlllmqohlssyĻĽøĻıĳ~rpzsntqjw~~}|{z{}{z{{xvvtrqstqppnnlkjjkjgb_]ZXXWUUTSSQOOPQRRQPPNOPNQTTRTSUammªĿɬsvmƫ˞խzغٿѣir~u[twhulsw}aYYduj\\b_[oqontz}rco~td~qyyuoY`{c^kʼ~}yqlksmcbdfea^\\ZYZZZXVTSRPOMLLLMMC309>=?@@?>>>=<===>@CEDB>==<;FLJ?3\"\u001c\u001a\u0019\u0019\u0019\u0019\u0019\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001d\u001e\u001e\u001e\u001e\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f!!!!!!\"\"\"\"\"####\"####$$%%%&&&'''((('&&$###!!####\"#$$$$%%%%%%%%%%%%%%%%$$#$$$$%$##\"\"!\"\"#\"$$%%%'%GȺԼɬţuȻl{~mƷnmqc__]YYVUSQRX`yasf{yo|UavvZSVYmvQ_iMQWr]^xv`s]eȜ{u}sge}zVSmg\\Tqgzts[kpWYbi]Xf]lsXTTNHXUHGH[_]g[]e[afcY`c`ni\\`fVgdSMOXH@HRF:??=A>SO?PSRQS[`blpeevt^idn[JX[[V]eceihddffededceffc]VYae_WZceefjifefefd^WOF@>?CB?W{lluuhXNE@FXiwvojcdk|\\QNPNVYTSOMKJKJLTTOPRPOMMLJKMONS\\QMRTVTTWRSVWWUJFOE758>@?CGGB@HJ72//>>365*08<=>99C:89;?:@I@8AFG>>HFLFGE@NMMMPMDBKI@EMHGEFLDAJMADI>:LPC@FDCELMDABBA@HNOOQTM?I?D@>=@E<DZOKMRH@0,::2:=:9>91/2,+9<2/024568=A<<=<=IJIGB?FSSKFIIHIMMJMNFEGEOU?7IH@EIXERKF8B@@B7-8EKM58?@<ECVKADJSYNH[ZcX_hthdhcbYJ:?NQTNX^[F?OSLGE7i~|||~~}|}|z|~}}{|}{~~~~}{z{{}~~xVZ[ZWSTWUYYWOORTUVYLXKIQOCKUWYTQTRTLIUPJJKO][^\\UGZb^^^]^a[U^TT^TSVUQJGCDMLNW\\_a\\Z`_XRTPJJHKPPLHEFLEEKCIXNHOSUVUOMQWY\\USQG?DFC?>DE;6;9?MK@AID4?CJPHLID@BGNY_YYeljh_`ba`WYZXZZSTUVjkRSUPU[^YVRSY\\QNOO^`SOUXXYY]TIJTQLMNOVXSOKWcWS[[Zbb^_^UPY\\ULTZJNN@OUD>EIIECFACGFFLQOUafRJWTScgYVVQW\\YXVYZ_cVThihhb[aacd[TR]ZRWUZ[_c]TU^[WKY`WV[]]d\\SZWWWLOQVfhmnbbemqigijgdab_\\dmgYYa[`cgopskhmooqvvuwuuqswvrmpportrrvy|¾ÿ̾·vukvyqqtv}{{{zzyyxvvtqootvqnnmlkihhhd`^\\ZXWWVTTTRRPNNPPQQQPONOPQRTU\\_bfx|ĸþӷ̳ǧilӯ׭Զ}yuuxpvyllqywrfX[_lwi\\]R]kjgfpzx[s|wf{eq}rttz{|nW\\yaZi~Żtjimidceffcb_\\[[[[YWWVSQQPOONONH805;8:>>?@??>==?@=?BDCC<224<FKHC8&\u0019\u001a\u001a\u0019\u0019\u0019\u001a\u001a\u001b\u001b\u001c\u001c\u001b\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f   !!!!!!!\"\"\"\"#######$%%$&&&&&''''''&%$##!!\"###\"##$$$%%%%%%%%%%%%%%%%$$$$$$$%$##\"\"\"\"\"\"#$$%%&'&.pڼ~ѯɜ vphrż{gea`^]XYUUSPTkosm|vRl~oVPcvjUZ]I[VfRb}wppqsť~{sqsjcoT`{gTQke^ocTW[_X]`[phTJOLHXODCDW^]]QcaW^bXZb`euc\\bh\\maTUT[MAHN@8;=?@CVCDSRSTV]bhpniqtjdeihQR[]ZV[__fja\\eighmgZZ^ea\\SU^hg_`fkjgdedeegggfda[OC?>??DftjzmI:Zv|xx~{qxzmpi`fyjONPLQRPPLIHGGFINNMLNMLKJMJKLNNRYNMMQTPPSQQTUSTQKNMG:8AA@EINKJUWDC>>NH<:6-0978@:;;766<?9@F@6?CB<=GEKHC@<GHHIKKEBMI<DLIGCDID=IJ>CE>@LOFDHFDEHJCHEEA@@JOKPSJCHDBA==HA:KSMIJMJB41888:=1983-.4,/:94422432;@609<<=A@ED=>FNPOGIGEIKOIJHEDFENN=CYD=7MQ@OID99;AG9-7=KL3:?@:GHV?>FJMUDIZfaY[jqeafcce[JJTVXLW\\YKBNTXI=R}~}|}~~}|}}{{{|{{}|{z|~~~}z{{{|}}|}xzVZ[YXT[[\\\\\\XPRRUYZWSbKLTNDKUUVTQSOMFKNIHDEPUUVTTSab__]W]_ZV[UU\\YYYWSMJD@KMQ_edb[W\\_VPWQIHIJPPMIEBGEDHBKVKHPSVWUNMRWXUSUWN=BGA;8<AE?:4<OPA>G?1=@GNHLI@=AJP[dabfhe`^_c`]\\_WU\\TPVS_kWIQNKTYWWWTT\\`XTUV_aTOUYXXXVOGISQMKHLTZVUV\\^XT\\^Y_aZ]]UQZ\\RKTYKNMAOVD:@EDA@@;CDAFNPFPdbMFQNQdfYVUKS[X[UV\\bbVSdojjb\\\\]`a^QO_`WWV]bda\\ZSWZXIT]TW]SXg[PYYZ\\UX`fkkkjaagmidhijhc`cY[jncX^jgcksvstvssstvyxsqrtoqx{rnstsv̾Ž|yȿƼ{wyiryl÷~|zzzxxxvvtronossnjikjjjjhfa]\\YXWVVVTTTRQQNOOOOPQQONOQSQW_r~ҽڿʹĭ¤jv}ΫյկŽѬ|}l{nVe{}̴|~vnz}z{s[[dhsv`UROehdeeszfXt{zi^vc|{tpvzoxlSYx_Xgzvpkhfdceggeec_]\\][ZYZXTRSSRQOPNL?24937=>??@?>==?A=>ADCF;(4?CGKTRB&\u001b\u001a\u001a\u0019\u0019\u001a\u001a\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f   !!!!!!!\"\"\"\"#######$$$$%&&&&''''''&'$$#! \"##\"###$$$%%&&&&&&&&&%%%%%%%%%$%%&%$$#\"\"\"\"\"$$#%&'('+C׵ǮͲ̥Ǳw]ÿxc``_^]XYTUSPVuirs~|Up`PgphQZZI`YYQl{yq{tulquuqicldJ]xYes]SPSY[[T`o]JIGPUYH=>AU^\\OSgWU]YU]d_ko`^ij]i][]\\_UBJN;69>?@MR<KSQTUY_ckolorrji_tYQ]_[XX]^`kbWZhkjrkZTcgc]QO[giiirrkfc`^`beefghfcc]OB==?Nlk{pmmrn`UTfmowqtfap}YLPLNKKMIFFFECFIEKJGKKHHNKKMOQUQLIIORMIOONRTQQUQMNQF?EBAFJNNPZ[NPJJ[WLEC>;=5;C;<9544;?7@B@2=B>8>FEJIA<9ACDEEEGBPI:GMIGBCGD6IH=CB?DNOIIJLEDDGOJFGB=8NLHMSHHGFCC<?I@>OMLHFLLF@=88<<=1>5//77.3999813412;6).=>=;;AC:8>GKLTGIEBIKOIGDE@FEKH>IXE;4OHAKID=97AG;175HG5A@?>GJO<?KMSL@I`k^YWkgc`babigWYZYZPV[WQEKUbIGzx|~~|~}~}{{}}~|{zzyyxxzz}|~z|}|||||{xy{{|~~}~{tW[[ZXW^]^^\\XSRQX^\\V^]JNSIFLPNQPMQJIELFEGBEPNOPVY[bb__[V]_WW[UT^_]ZXTJMNOMOUbggf[UW_VNUVKEHJOPMJE@ECBGCLTIHQUWXTNMRVWRSVYREEIDA>=@MKB6;OQB?GA4<>GKHMIA?HVS[cbbca^]]`g`]_aWW\\SRXXdaJKOLKSUUUUUX]_YVY[a^SOVXVWWSLFHSPMHEMW\\XYb[VUUYYV\\\\X\\[TPZ\\QKSWMNMCMWD7=BBA?>>FFACINCF]aNEMNQcgYXYJOYW\\YV\\feWR]klia\\YY]^\\QO_fb_^`fg`]bXV\\[NT\\Uc_OXi\\Q[[\\^^^fljhgedbfjffhihfbba[alohahtqgmz|vwyssuuvupoprnnvztnrtsw·vuƹ;ʽĹ||nt{ko}n³©|{yxxwvvutsqopppnkhgfefhige`^[XWVUUUSTSQQONMPOPPQPONPQWX`oǡǽ̛x{qظԼбŶϚu|~}p{zeX`geqoSRQ_f\\fjp|s]dwtvtXirpzm{lrwon}lM`w^Wgvulheeefggegfb^^]]\\Z\\ZVSSTTRPQOND.+8049<?@?>?>>=<=>@BBD:48@DFKMH>0  \u001b\u0019\u001b\u001b\u001a\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001d\u001d\u001d\u001d\u001e\u001e\u001f\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001f   !!!!!!!!\"\"\"\"\"####$$$$%&&&&&''(((''&&%\"!\"\"\"\"\"\"#$$$%%%&&&&&&&&&%%%%%%%%$%%&%$$###\"!\"$$$$&'()(U|չѿűìŸƼyjc`_^[\\WXSTSPWncrwwVpUaekhTj^`haSWyo{~dsszltaMSvrZOHP\\VQPaeNEIGSbUC:;@S\\XHXcHSYVT^cbm_ba{h_`]fgceVENK66;A<ASHCORRWZ]bflpntmzradkUZgXXXX]bagLN`idgeXVemjd\\SV`dijprk`\\\\\\Y]addeghecgfWGB??Rinh^V^ibtvmWQP[bbru{wjm|rRMLKFCLHEECCBEFBJGEKICFOKFJMRRMHEELQKGMMKPROOVTLMOKGFBBHJJLOXYOQJI[YUQSOHB@IE==;787:B9?AA1;C>6>FDIHA:6>?A@ABGAOK@IKJHABEB5IF;BB?DLOGHLQDECIW@FHB9:PGHKQFLJFGF;DFBISRKIGKHHHJ@8;?;5>329A9159=?84764:6)(4?>;::??89>FHITHIE?EKNHEGE:FCGDBHMD?:OD?FIFFA4@F>97/EB6GA@GKJI=DORVCESf^[XTeaa^^[^ge[][\\^TXYXYMKW`NYxx}~}}~}{~|||}}~||zxxvwyz}|{w|~}~|zzyxvvwwz{xwwvzY\\\\\\\\\\]]__ZYZOR^_[X_VKRODIKCGOHGJFFFIA@E@GPKKN^_`^aa_[X_^SR[VS^a`]YVTTZXTXX_fjk^VMVWMO]VCGHNNMKB@GBBHFNRHIUZZVSOPSWVRVXWWSNPRNKKLPQO?;MQKHMJ=:=EHIOLHFSbXX]\\]_^\\^_dl`Z\\^[\\ZVU\\^\\XQMGNOORTRS[`^ZVW[aaWTXYUVWTQIDIPOKDFS^^YZ_UMPRUTQVUPYYPOWZQKRWNLKBLU>5>?BC>>BMLEGLSOO]`OIQQSbg[Z_ROXW\\^W_in\\PYgmf`]ZW[WUSQ^lmgddki_`lb[bd[\\`]obR_m_Z`\\\\`dbfgedecccdgdehieddc_]gosrnr|{oq~xv{rpsonomlnqlhpujisnpxŽyλؼ̿ƹyvy{kl~}ml}{Ĭ~{{ywussqnmnnnooonlkjfddccccb^ZXWVTTTRRQPONMNSTSSSQRPVT`sv¿úǿͽϻ˿͡zhgǣŴ˿ưƖĝ{zulfs|y}}{xbk{w{~nfbmf\\`ZHR_eSQps|zfafnpxgTutzje|{lrp{~kq\\Rnt[Ubq~}kkdfhigfeeeb_```_[]^YUSSSSPQPLE>9<0367868>A??@B@@>>@<668>AGGGCA>6'\u0019\u0018\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f    !   !!!!!\"\"#######$%%&&&'''((('(&''$!\"\"\"\"\"\"###$$$%&&&&&&&&&&%%%%%%%%%%'&%%$##\"\"#$$$%&'()&8мңtȶҵŽqf`][ZYXXUWRRSU\\`\\rzs[nayrjpm{idMcuo~ö½±vɫkyl{ljnqn[EIcZJIS^UIOKQ\\]@>:=@P[UKdSFQTVW]bdgWhj`aWapkkePLSD6:<@9DRCKSPY\\^bgflsrqxp]g^ZfdM[ZY^`]UFSd_\\`afkokhd]XaffihhcZTSUVUZ^bdeghehnjZPLGCP[RD?CIGCs{`SY^ZYT]||xox{\\MIHB>KCBA@?@DA=JEDIE:FQJ=GJPOIBB@JNJILHFKQNNURJJIIJHADJIEFKSVKJDESSQSVQLHIUGAB@?B@<G??B@57FD5<DDEEB82<=:9=AF?MNMNFKJB@CB=ED9??=AFFBCKSEFMOP>HKB;CMEJHPHLNHNG=HHENWPKKCLDEFPG87:89:58?C;7:;CC<<;;AB3,1589988:::<<CDGOJEGACJLGEED7F?FJHDDDEAN@=BDGQK<ACB?:3F>>JDIUQJFCLSWLERa[U[XW]``[XTZe^UWX_b\\[V[bXRZ`Tyzy|||~~~{{}||~}~~{yyyxxyy{~|~wy|}}|~~}|zwvwwuuuuwwtvrq[]]_``]_bbY[_LVe_XY]VSVLFSM7FKBIEDDKF=>CAHRQOT``cZ_d_[\\_\\PS\\VWcaa`ZX[Y[[YZY]_ejb^LGXOEY`HFGMLNL@DH@FILQOFLY`]TPQSTWWY][VYWTZ^[VY\\WUWNDLQSMRQA8<DGPRPRNWdVJSUW[[[]afjaXZ]_\\XXZ`bXPQIBQSJOSOVac^SSZ_`YQYeWOUWPMGAJNNJ@FXbbYSXQGHMVOKUNIVUPOTXPKPUOHHFLN97DCKQHGQ[YSTYceadbUR[ZXbhc\\`\\X[[\\bZ^dnfLQcid^XZWXTNRU]npkghok^cmieilcbcamd]lp`^d]\\`b_`b^`a`abacdfge`bde`altyyz{xw|t{ypnjkkjidkpkghpheu|¿¹ǲȶȼxrtuigq{zoj{úŹ~zyxyzzxvvspmjihiihgjmmmnmkigdabcc`ZWVUSRRQQNNNLLPVZYVUQ[W`fkƹҼƸkg๵ʨĸæȺ¦nupm{rw{e}ji\\v|zyykosl^_NG]]\\XScgl|ieeg{lwv^gntrZfwpgzjsjw}NcwnYQ\\jvnj}vppnhffefdachhc\\]`^XTRSSQQQONNQ@028612@GEEOQCCB<:>:/4;>>>CFFKQE#\u0018\u001a\u001d\u001c\u001c\u001b\u001c\u001d\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001e\u001e\u001f\u001f\u001f\u001e\u001f\u001e\u001f\u001f\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f    !  \u001f!!!!!!\"#####$$$%%&&&'''((((('''&\"!\"\"\"\"\"###$$$%&&&&&&&&&'&&&&&&&&&&(''&%$#\"#$$%%&&'(*)\u001f7ʽܵؿǽwh_XUUUUVWUTPOT]daZuzq}`qq{[Ll˹¦éɦjɹh{éªĞor]EahOLLVVLVUMcZK<15=@LYPU^ALPTXZaZjZ_pwoa[ToqnkVOUSCD@9B;HOFTRRcZ`ddbkupszf`b`\\mVPbZ__\\VJRYXO_lmmlmnndaglkjifa\\Z\\^b[X\\[^deggimpka^WMGFA<?BIK:5[w|RTYfb]TNiu|tbSHGC<GA>=<:=C;:JACG@8FRI:FFNLG??;HKGJJECFOLMQOIGGFFD@DFC?BGMQHA>BKLKPPMJKNPKLLJIHJLOE?EC>5EJ9;CCCBA82;;88;?G?GJOPDLMB@BCCBB6<=;>@=<?HNEHTTNEQRBFJIKJFOIKPJRH@LKGLVPJI?N?>CNF97>;6568>@<<?BHFDE?DNE87753566559<;;DFDFMBJABEKFEG??D=KPJBBDFCLA>A=GUOID@HB?EOCNMKT\\ROKLSYRGS__RYa\\_\\^\\URQY^ZTUVb]\\XP^d[Xa``|zwv{~}}|x{~zz}}~}~~}{yyzzxxxz|~~}|y|~||~|{yy~}ywuttssuuvvuvvurrnx^a]^hc\\cafY_\\K[k]WZ[Y[ZNQ^K2LLEPFEDOD7=EEJV[Z^__^T\\d^WZ_WNUZV\\c^^`]WYYXYYYYWWZ_`aPAUUBM^PKGLKONCNLDOORUNMW`c^UTUVVVVZ^][XTXbb_]`b_][VQQRQOQQC:?DJSSRUPRZPBKRTXZ\\]`caZUX[ZUVZ[]ZTPMBGVQHLOS\\_^XSWZ\\]XSceLMYWLLJFMNPOIM\\c_UMRMCBNTKJSHLVSROQSNHMVLDMOLJDFNP]aXZdgecbdnpkif\\]edbchia\\[[YYYa`^]apUE]c_[SXZTLHT[\\lokegol]clmiikfdfdgcenl^]`[XZ_\\adZcbT^b]^acfc^chhgjuz|}{{ysyvmjehgfh_ipfhiptt¾úԹμuy~}xomqiemllipƿþú²ȱʵ{}}|zxusrqmihklkifddhijjjjifffeeb`[XTRORRPONNNLJVeb_\\YOdgjxʾ¹ӼʍŜxukzްŤʼǼiwkitijkk|{uxwejl|xaQWbp~x~x}|y|ziaeTRnXGKp{iixst^puqhmn_pbXjrdjlk|je|{}v]kulULU`ht{nclywz|rgghgecadhga[ZZZYVSSRRQPPQJ]Q>2.-36EQROG?BDBBGC:8?A65:@GQ\\R3! !\u001e\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001e\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f  \u001e\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f          !!\"\"\"#####$$$%%&'''''((((('''%#\"\"\"\"\"\"###$$$%&&&&&&&'''&&&&&&&'''(''&%$##\"$$$%&&(((,8-Eþ̚ѽwyȭųȺ|odZVTTTTTTVTOPVcmh]t~vqau~XXv¿˿mĹgyă~icmVRLETOX`T[e[N;1;@CQXUZHAXXTZ^_]`UssuddL`wmp^MVWNORCAJ<KLJ[M^`Wahacsrjo`bbb]hNc`Xd_ZSMXULWlvf_fttjgoqjeghb^belk`YWWZccbfijlmjji]PIB=ADCFC/=NTj|oS^\\eha`RWy~}wgZJHD<D=::::=A;=H>BC<7FJGADAIHF=<7GGGLIABDNLLNKHFDDD@<@?<:=AGMD;9@FFFMJGILLLNQQPMKSXSLDHGD4?I<9@BBB?98;::9;@MEBEKLIRUFGLIFEC6;=79D;8<DEBFURMHRRBNIIMIFOIMNNSKDPNHIRRKJFQ?AFH@9:FC;:8;?@@CFGKLKHEPSJDA=9520/05967AGF@BOAH??CLHGJ:IBBRNJEDCECJFAA=LQDND@NDBYWFVMOXYQWTTZZNO]^YXbggf][UPQQTWWSPS]SUNO^aXZc^p|ztvzz{}~~~}zy|~}~}||{{{{zxvwyz~~}~|{|zz|}}}}~~~~|}}|}}yvuz}~~xvsonoqrrrrttttsqljbaY\\ibYd`g[_YM_mZWYZ\\_\\UZaG@VQOUKHDPE6AJIPZ`_^^ZURZd]UW[RKTUS_a\\\\_]UU[XUZ^ZUUTX\\\\VHPXIERUPILMOOFYPMYVWUSY`bb^[ZYYWUWZ\\``VT^a_^^^^_b^XZVSQPOMFCGHMRPMLHFMMCHRVY\\^`___VRX[WRV\\_ZQPSD>OWOIINWYXZXTSSUYXVa\\NXZTMKNOSNRUUX]_XOMMHCFQNAKNETZOOOOOKFOUJP\\WRSW\\]bkjdjqmkkkjnrmigbcgffbdhaZTVSOR[`c]QkdBR`]XOW\\SHDW^\\ilkcgrl\\dkkgghgfgebcini_]]\\Z[__ecajZSc^XZ\\_egfiqsns}||xzvqvqkgfch_fgdllqq}ṷ̂ĺÿ}{xnw|~xtnhnidjfadw±ɳñµìy|{vusqoljikkllkhcdefeddccccb`_]YWUQMOPPNNNPLEXtnee_Pgz|ŬӾ·ʽte|}ڱʻüĬzdwq}}obbgb|}xkbNSkx{e_yyqXm_DHSnr_\\q|yu{rZgjJRY~unnzqWul{xhubdlW\\kh_g^uneexmzqxyhsiQGOWaqy{w{}k^`hkimssqlheec_^^]]\\]\\XYYWUTSQOOOF[N>1(('5DA4.3EXSCUUG?BC>@ECELPK@63+$\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001e\u001e \u001f\u001f\u001f\u001f\u001f   \u001f\u001f\u001e\u001e\u001e\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f   \u001f \u001f  !!!\"\"######$$%%%'''''((((('''&$#!!\"\"\"\"#$$$$%&&&&&&&''''''''&&'''('&&$#####$$$$&'(()Bh^Ʒͽ΢εsdzxlaWUUTSSTUTU\\XTZgsd`rsqtes{]kͻ̼ΫxzįcwȯϬu`XT?MT[g\\b`ceU5GNHNTU]TFZ_YR\\`XdKf|sefSItoplVRVSP]XJSJ<MIMYPgQZce]eyhk|caii]bZXrT^a^YPNQPQdlYVctqhfptldffbdhknnhc]UTcg__egfhmnnk`VMD@ABDD;+GMLN\\ylXjghe]ibQcp`OIC=>4;>=>?FECF<?=87EDGFA=ECC:84DCFRJ>BCOJKLGEFDBD<8<:769=DI?56?AADKBEJLKKKMMNNPTYOPIJLL;=GB:<=BGB;>A@?>=FUJBFNKPVYPQUNLKJ;CE9<J;:8D>@AOKHCKKBNEFKFGLHMLPSLEPMIGPTNRSUBHOD78=GGA<;BA?EFFIMNNJMVTPNHD>:71,0654=FB=;AQ@G@CBMJIH?NEHRNPMKHGCJJB@EWI7K?>NFC^WBOGLVTO\\XZ\\YV[`\\Zbglnc^WQNNPQSUVIKULKGJZ]OXaY|wu{{y}~}{z|~|~}}~~}~|{|||{{zwvvwz}~~}}~}}|{{zwy||||}}~~~}~}~zy}}|}~~~~{wwy{||usqmlnnnnpqqppqoler^[TWd[Wa`b[^XL]jWWXZ]_^Z^]MXZXVWQIDOJ;GTPT[`^XZTQRZb^VVYPISPR_`[[^\\TT]YT[a[SVVVVWVTQUPGKWQMLPOON]TU]^ZS[baa`]]\\[ZXUV[`bZQZ`\\[]]\\\\^a_\\^ZXXTPMFHLINOLKCABGMJLTXZ^bd`\\_WRZ\\ZYY^_ULNOFGSTNGGPUTVXVSMPUSPQWUVa[WQLSUQOVX[\\ZYNKLBEHHKEEJGFUSNOKJNMNWVUeha__fhjnnmkosoljjkmpmigcdfcebch^VSSQKLT[cZH_hIL[[VNW^RGCW^\\hijcdpl[ejeeefhfec`ehlicdadb_gjfcjj\\^g\\V\\^^bmuqt{vy}{xvw~~tsulfcbZgieigm¾»~Ƣ©zvwhkwunmfhgbbefmͽԼôȻô{zzvtvwqmmmjiihijjda```aa`a`^]\\\\ZWVTROOQQOLNQLG]z|unf_eϽĪɿlhwп¤jjhb{ilrrom}~zs\\bgFq{ubXfsjLYZKP_q}xkf[c`}}|{vhwmli^rtebkx_frqitd[qaQYg]_ek}i^illqh}zcsdOEJR_jnppyw|{}teghd[^_Zckrphdiic\\YZ\\_cb\\XYXWVTQOMMKLPTE24BNK;9LgqcOYXMCDFFJPQLIHDABIJ8!\u001e\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001f !  !! \u001f\u001f\u001f\u001f  \u001f\u001e\u001e\u001e\u001e\u001d\u001d\u001c\u001b\u001c\u001c\u001b\u001c\u001d\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f \u001f \u001f \u001f   !!\"#\"\"\"#$$%%%%&'''(((((((('&#\"\"\"\"\"\"##$$$%%&&&&&&'''''''''''('('&&%$$$#$$$%%&''))._ηԱâ~tk`ZSQRRQRTXTWcgZbt{_bsyjowtnuzaĽһ²̺}ƨf{ȨƏyƧc^XJR_difca`p_:GaVSQPT]V\\aYQT[_UUSxslc_>eziqcYVTSZi]VZ@BOJSO\\^V\\a`\\qr]tq\\jriWcTonYh`\\YLRJO^fPH_nl^_jtocbccihgovsj^RN`d`\\_aachmnmjgZOJHDBFE55KHLNG[p]qsoi_gp]TlxjWJEA@9@CEFDLRLG?=96;D@BA=9C=?662?BDTL>ACOKJJEDGD?@9465413:BD913:<>DH<HLLJIKLNORTSRNOKNRPHEIH>??CJG@EJHFEBNZKEOTMUVTSSQOPVP@MPFEOA:6D>>?KEEAIDEL@CGEHDGMJPOKDLIIHNRPU\\UGMWE3;@FD>9>B?CEFFLONNORUVTPLFDGI>2377=ED957CR=EEHFRLMEKMHHOP[UUPGEJMB>PZ@7F9<IGDXI<BCIPNOaWZ[Zae^[^efki\\]YQLKLLPRPEIOHCADSPESV]vzzz{zy|~zy}~~||zx{}{|}~~~|{~{{|||zyyxvvx{||}}|}~}~~}~~}}||}|||}}||~~}{z||{{{|~~~}{zzzz~zuqokjkklllnnmmlkgjUPOQ[TV`_[W[VIYeSTVY]_^]]ZYeZ\\a]WIJSRFMYWWXbZOXSRTYb`RQXMISOV_][\\^WVW\\ZW]`YTVZWTTX\\UONMNXPOMRQOW[VY]d]X`c__^\\[[\\[XQT^c[KO^^WXZ[]^^^`a`^\\]]TPIHJGLMHKJHIIOSTX\\^aefb]b\\Y_abcad`RPOORVVRNFLSQW^XSRJSbYHIPLV_WULJXYLRYUYWWQFIC7FMHDFGGHHLLPPGJRY^_^cmkjkgjjopiikosolggkkhfffdfebe`ahYPSQRRKPX_XEQgSG[_VMXaUJCV\\[`ff^`nl[giccdghedaajjkjjpfjkbpxiepmkkiabhfhlqzyw}w}||{{uuuwwspqi`abZbtzǿžù³͹Ϻ|v}}wfbmz|phiecf_[co}Ʒͽֹä|xvurpppprrmgkqnjhgfeeb^]\\]_`ab`__^\\ZXVUSPNQRQPPROTj}yjwrǽƺ̫Ǿj|wƿ]si^kxsyhuWKSc}jsgf|~xsig{z[Wgozmi{dPIVg{zik{wwlxzpscfdsrzufmQdnYLUcU[a{zgZhdifh~hdp^MEIQ[abgoyxxyxnacsvbOU]TY[hsnjoog\\Z[\\_b`ZUVWVVTQOOMG>EG@9FQE=KevnXLYZI??GPUUUQONHHJLTI/\u001c\u001d\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001f !!!!!!!!!\u001f!\"!\u001f\u001f\u001f \u001f\u001f\u001f\u001e\u001d\u001c\u001b\u0019\u001a\u001b\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f   !!\"\"\"#\"$$$%%%%&'''((((((((&&####\"#####$$%%&&%&&&'''''''''''((('''&%%%$%%%%&''().2,jûͻšényumigb]ZUY\\RVaWYinXgij{qiq|ntzuõüãpϔ}˯v˨ƼzbjQ_liphfdbpjJNoc`UMJXac\\WULUYYX?msiegDO}lli_[RSUepebQ@NQQUJcV\\U]\\f{a]|wfcusaV[\\ehkaZWNVKTdTCYj`STdstf`bab`exraY[___]YX\\[\\`fkljjj^XYNBCF=.<GGNUXXoygqztrhfsq^[kwzr`LLHEGJMNPNN\\VOFA9;CC<<<6:?7:452<CBQN>?CPKHHEDGD=>81420-.8@>51378=HB:HKJIGNRTVVVQPQLHPRRPNLKGGKJIKHNQPPPNUZIJXSOZTQONONOYPDPURMPI:6E@<?JAD@K@FH=HCGG?JKKNKKCG?FJINPQ[QMS\\H;EEIG@:CBBHHLMPRNPQQSXVOJHLVUG>;;@EFD:88ETCJFLLRPJKQKEFMU`Y[PEHNO@=SU@;A8?CHJP9;9@GHIQaVWTWacWWa`eg]][\\SJLHJLMIBHJC?@DHDEMLi}~}zxwuvy{yxy|}{z{{|||||||~~|{|~~}{{|||{xxxvwz{|~}||{zz{}~}|}}{|}||}}}}}{{{wromiggijjjjiihhhc{LGKKRPS\\]WQYVFT^PPSWY\\\\ZYU[cY_e]YLTYXNOXXXVbTKTRSVX`bPLVKISQZ[[[\\]UWX\\ZX^`WSV\\VQS\\\\UNOPOYQPQTPP\\YTW]c_^aa]^_\\YW[\\QNWc]LGQ[WVVUWYZZ\\`]]d^`c\\VSLIIGIFJVWRLQ^\\[`dehhececbeilkgkeXXXXZa]UQLSTO]f\\WVNVhcMGHBQURP@CUWLNQPONNGAA77HND=CFFJEHORJIW^dffgghlnliiinkafiqrhjeejfa]bgcehcd``gWGLKQXOPX[\\BDcYJR_YOXd]RFTXWX`bZZkiYhgaceijdcccljknmtljphqqhsrtusrwvouww{zy~w~wxz~tttrutrsocaber}ƾļõķƿҾ{r{}tf^dtyiagdce]Ydwɹɹ¶ʾ˻zxwuplmpqolkieionjgfeb``]^^\\\\]_^^_``_]ZXUSONORX]QSUcyjӻдϴϰ½rʍzy~arh_uymuq{~biq`lytzyzpkextki}~ojjs\\lm[d|xn}soqtug_kZVofXG]]RWRdh[^d`b`hwvbhgWKILOS[\\cnu}~zwundmwoXQSZQWWepmje`WRVXZ[YWSQRRRRQONLLIDKA;=ID=GY^TMLV[K89HUXXVTPPTVSLQT> \u001d\u001f\u001e\u001f\u001f \u001f\u001e\u001f  !!!!!!!!!!!!!!!     \u001f\u001f\u001e\u001d\u001b\u001b\u001a\u001a\u001c\u001c\u001c\u001d\u001e\u001d\u001e\u001e\u001d\u001e\u001e\u001f\u001e\u001f\u001f\u001f\u001f   !!!\"\"\"##$#$%%%&&'''((((((((&&%#########$$%$%&%&&''''''((('''(((((('&&&%%&&&''')*(/@8k̾Ϻ׼ѻ{|kfic^[ZgoQWm][lrYqu|{je{puwyǴıçƤwzǋ{;Ȟb|oe{ttigmhmnaXojh_SMNeaUT\\RMSXXNPthh_R>iuapeaYPTYlpgfLKVOVPRcXWNZ_tjVhwqgutrWWVk~bmd_XXXNP\\S@Ve]JM^nuf[b`^_gtth^`ca]XZ_\\Y[XZ^dhhjqebl`HAFD6*@EHP]bhfr~vu|vsjbl|t_Zhz}~~{ys]RQKNPSSUTNZWVQKCDIE:;D6<>37344;B>LL?=BOJDGDDEE>?7031.+-7<943356AI9<GKKHFRWYZVVPSRJFPQQPPMKIMRPKMNVQQSSRVRGOXNQYRQONNMNOOFNRSOQM=;LC8>H@@=I@IF<K=G??OHMKIJ??:EDALMKUMQTZLHKKMKGFHEHLPUQSROPOMSXVNJJOYTHJFDJFEFBB>IWLOFLPJTEQOG=FNZZXYJENTP@APSF>=>CDMIJ772BCGCSZUPNS^\\SWa^e`W`_bUHNDHMKD>IH@=>CA>EIO{}~|zzzzz{zzzzz|}}~}}~~}|}}|{{{{{|{{}}}~~~{xwvx|~|zxz|~}~}|~}}{{||}~{{}}||{xspnlifffhihebdcc_jGDHDRNNY\\WMWTCNSNMNQSXYVSRY^W^b[YOZ\\\\POXWWVbNLSQSXX^bTOWKKUT\\]\\Z\\bTVZ^YX_^VRU]UQS]XRNPPPXNRRVMR\\WRS]baaa^\\]_[XUZVJNX[PFNURQUROSWVW[[Q[dV[`\\Z[RPQFHIHW_XMRd`\\chddefeeffjlonjmk``ba`_dZRUYUP[b_ZYUV[cUJJEPNNN;=PVOFHNJKEDF>7@LKBDEFFGHRTQMZgfeefdafmjikhikcYafpmbhabe^[[ad_chcd_`cXHGHNYUQW[]GA[]JN^\\TZd^ZLOPRUX][ZheZheahijmecfgmimrpvrpros}sltuwwv{vz{}zz~v|ut{xnsuqt}s˻żŴ¾̴~~uprytj]^oxg_eafeXZj|˺Ͽ±ͳƸɼy|vroqqqnjjiggjiggecaa_]]]\\ZZ[[[[]]\\[WUSQOMNUddSX`mxuyȺʸĶ˾μƼƻ}uw~}qfw|j^bxpb~rlqcacno~n|pW`m^nvnqqfTkujnz~px{zzuxgkk[kmeNRjWY_SNNS[_`acdtwjfj_QTTNOOV[ahmw~~z}vpedpp_^ZSVSXakc\\VLHHJLPTTROMMLLKKKKJIIHFD?CJG??DBDBGJPH:?KSQLOPPNQX[USQF3()%   \u001f\u001e\u001f\u001f\u001f !!!!!!!! !!   !     \u001f  \u001f\u001e\u001d\u001c\u001b\u001a\u001a\u001c\u001c\u001b\u001c\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f  !!!!\"\"\"#\"$$$%%%&'''((())((('''%$######$$$$$%%&&&&''''(((((((())((('&&%$&&&&'(((*'*=MJŰп̮Ǣʱz[_]`Z`{xSZrdZpu[{|vhl¬|symͫʹİznxvħzȬģrwnxhwsqpkfnfde_RUfnPP]ZYUWVOJmgfeQ;Tl_csddUOUdnif`VTSMWN`bYPP[jlTXnnotmlOWYrvcg[\\Wa^JYVBNaTFLYipaU^ga`doka]]]ZTTbiZMPUX[]`dbirbdiYOJGB0.EGHMWbpnkxz}|ssmaawpY^ow|{}y[QJRVUTRTLSTXVSRQRLBCP?DE55459;A:IG<;@MI@CCDAE>B816/,*,46543338FC4=HMMHGRVZZSVSTTKHMOPPPPLFMNMKOOTMLNNNTKERQLSTRRQQPPNNMFLPRJPMAJSD6GK>:<HCKE>H8I8AQIPKHF;7;C9?IHINNNPXMLKLNMLOLJLQVTQTSOMIJSVRPNKNVPHMKJOGKHJIDJYOPHGLETFOJ<8JUYQUQFJTYPDJSRI?;BFHO<G814?AG?URPFIQZVT[`b`YXagdRGNBJIJA=JF>=@BABBBf}|{|zyx|}|{{}|y{~{x}~}||{|}~~~~zz{|~||}~{~}{{z{}~}{zzxuvxuqnljhedfffec`_db`JFHBUKJW\\ZKSTCJNMMJJNTUQLMVWQY[XWQT^_NMXVWX_KITNQXUZd]U\\OMTU]f_U]bYY\\^ZY_]SOQ\\VQRVQRPPPPRPQTUMQYUOO[`fa\\WY\\ZWVSROJPSKEHTSLPNLJQUUUXYRX^RSY[XWVXYSQTNXb[MQa]\\fg^]_bdcedhklljmkbcfe`^g`XXXVSV[ZYZYVQ[]SQQRSTNB>LYRGKSSTKKOKJLRQLSKHJKUZVRYghecba]^glfhohheYSX`jf_c[^`ZWY^b]_ebd__`[TMKNY[WY\\_QEU^MK[`XZc\\\\RMKLTT[_bc`[jeeqnkmifikliouvyzxvvw}{twy||y||z~||y{|qyst{ulruvƿ¼ĴÿǼʭԯɬuy~trov{xp]Ylwh]d`eiXYnó̾Ҹĭyuqomljhfggeccddccbb`]ZXZYYYYYYYYXVSRONLKN]mcU^psn{¿õѾѷǦ˛ĽŽȺssnz|}seffnlnnwxhio]mk}vz}kMgq`_BCjzsrseV\\khdju~rz~mqxy~xwzu}zpkydVXmeWhkhUOUY_db_dsnkjm]Xb[OSNU[]_cjsv{xfgW`ji_dYQSVY`_SMKHHPNLLLJJIHGFFFFFFFFFFB>AIH@9:;9<>BA?@GSUL@@HKLMRUTRPI<693'! \u001f\u001f !\u001f  !!!\"!!!\u001f\u001e\u001f!!!            \u001f\u001e\u001d\u001b\u001a\u001a\u001a\u001a\u001b\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f   !!!\"\"\"\"\"$$$$&%&&&&'(())))(''&&$#######$$$%%%&&&&''''(((((((()))))('%%$%&&&'('))'((4ZҼıѺĨƺǥ̓VWUdWg[_uqVs{^~miuƤyx|v԰͹Ǥɑù|zzvssǼsy}|wrmme]okd\\fu`\\lbcja^WL]f^fZFBdaVpsa]MN[mjdi[^UQYVYjeUKWdjYV\\hluwj`PU^srb`VYUh]QXKM_R>BVec\\NZjaccpn^\\`^XUW_aTOY`Y^\\ZY]bjhcbWYcXPF/9QMOLN[nuop|}srtj]l`Uait}{}iOGHSPOOSKMUTRVUVWUOQYNPP?987@<?:F@77>IJA?CD<FDE:9=.(+-2303322;D74@JNMFHRTVUOUUTUMJLMNPQPMDJIEINJMIIIIKSFBNHIQRQQNOQRQPNEIMQGKKIQVG?PQ@:@MFNDDD;K8FNQKMFB78;A7>ECELLMMVMKMLNORRNLMRWOOOUMKGHOQNQRKNULJMGIOMRHIMDJZKQGBCEQDLA5:RSOMSMGQXYOJRSOH@>FFG@0E36:9A?@VLEAFOTOZ_\\\\WSYdi`OHMBJHEB>JC:<?CCA=H~{z{~|{z|}~}~|~}yz}{xz}}}|}{|}z{~~~~||{{yyyyyyxwuqnoqnjiigfdbbbaaa`a_Z{MHHFZGJW][IQTEILLKGFIONLEGSOLTTXNIK\\YIHXTY]ZIHQLOSQXgeY[SMOQXhhRW_``c_WY``SKO\\ZQONMTKMNMNPSTNIPXMMNWae_VSVYTTTRPIIRKDCIROOPLJIOTTTWXSU]VRY_YW]\\Z[^]Y^daOR_ZXbcZWW``adcfijjhjh_cgfcaig`WVVST^]Y^`]ST^SQ\\UZ^WPOY`\\VX[^dYU]_^Y[``bTRY]aZWYaeegb^\\\\dkjditheaQPS\\ea\\^UX]XRV]`]_bae_`c`_]YW^caaaaZP[dRIUb[\\d]\\\\UNNVVclefbbmhispkmmjklklow{{{{{||}}x{|~|zyzzzwsx{jtst{~rhozʻѽƵʹĽĸνæ~iy|utrwq^UfukV_bdncf{ŸƼƹòǴ|vrpokiigeeeccbccbcaa`\\WVXYYYWWWWWVTRRPMIKTdm`Y_wxnsƸįǭɧĶĥÝʯppmt|efz{nsnxwvrl~|qQus^zrNXwvkoqVI^a^`hqz{s`g{}ryvnylrzrdk]_rsW\\mff`\\\\aff^\\cnpnphabbWWYTVUVY^ekt~vos^`b_YXVVRVWWOIHMQQSQTNCADDCDDDDDDDDDDDBA=>ABDKKD837;>CNLD?>ADD@GOLLLCC@B9'! \u001e\u001f$\"   !!\"\"\" \u001f\u001f\u001f\u001e\u001f!!!!!          \u001f\u001e\u001d\u001d\u001c\u001b\u001a\u001a\u001a\u001b\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001d\u001e\u001e\u001f\u001f  !  \"\"\"##$$%%&&&'&&((()))))((&&%$$#####$$$$%%%&&'''''((((((())))))('%%%$&&''(()++-2)6xåĶܶӾȩΫTY^mTgnezXv|^jf{Ɵw~ŭӬ̼ͱͥĢyzcjx¾y~~yogrraZgrj^zjquofac]eXaaOIW`W\\znXLJOekfpd__XXdWlnhKS_c^T\\YanwmkZST]qra[WWVg\\QKPVN@BIW^ZNRc^dcml`_cd_[[]`de]YZ\\]YUT\\cccc_[hfVVP:M^Y\\VV]fqolw~|xsxwlmnSV_dy|moqUAAGIIJPHJSLMQPRVXYZ\\XZ[LE@=F?><C;25;HKA=B?:IHE>CD0.3781/7403?>4=FLKHEHPQROIUPNPMLLKLQSPPEGHDHIEGFGFCNR>AEAGNPMKJKOSTRPDHKOFGJMOQIJSOIEFJKOEOFCK7IKPFLA;598<8>A?CIHLMSKMNJKMPNKIIQZNKJTKIGJMJIQRJNRINPDEOOQFGLAGTIMC>?BMFJ91CVEHNRMMWZUOLONIBEJJE?1/A3A98A5FMB?EENMP`[XVNP\\hg[OJKBJGCA>JD::>GE?:i~{x|~}}~~~~~{{{{zwuy}}~~}|}~yvz~zx{~~~~~~||~~ywz~}~{ywwwuutsqnjgijgccdca__^\\\\[\\`a\\pNKKK^FKY_]GQSLMLNLHEFMMF@ENHJSNUGFIVPFGXV]cUHJJKQPPYghVSSQOLQaiOO[cbe[PV_dYOQ]dZMORZKONGLSYUEEMYFMOTb_VSPRSMRURMILPD?AHPPPPNLKMOQRTUPTc]U\\b__c\\Z`b_``fdSV]QN\\\\URRa\\aebfggifgc]aggffljc[VXWZdd`abd]YbRO_Yag_^chgfhgdckf\\dghfgkkd__djcWZbc`fgaZW`klebiwhc^NQSYa[VYQSYVMR\\_^acchabhgggfdeijlibb]bh[OQba`c`ae_XW^bqrmlijpmlpnkmmmnmmorx}zx{{{||zvzz{ywu}vxurnqwhtqs|tr̼Ǽúϰׯünivru~rjcV^rnSWgbkq{ɲúžŴǩvnllllmmmkhededdeca_`^ZWXZXVVUUUUUTTSSQQPS[egb]`tz{ryƱɿɭŨʵ~ǩȮ{xsip{peysltzg}qtzuefmXMUUSXhl~~gVrzdpvssnsfy{wma_g~zi[TXbZ\\bbgm`OU^_lxmb`b[Zee_SOPT\\ejqywpqrad``UOZZOOUVKGJPVWPRSL??AAABCCDDDDCCCCB>58FMJFE:9>>?@A@?<;;?@=BJHIIDEEF:&\u001f\u001f\u001d(1*\u001f\u001f! !!\"!! \u001f\u001c\u001d\u001f  !!!!!! !!\u001f!!\u001f \u001f\u001e\u001f\u001f\u001c\u001b\u001b\u001c\u001c\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001f\u001f !   \"\"\"#%##%$%%&'''((()))))(('&%$$#####$$$$%%%&&&''''(((((((()))))((&&$%&&'''(()*),+3rػŨĠջϱ[c|Wl}f^~~`kaÛv˾ү̴ƞ˿|qyn]a¼wrbZcuqltrjwpcntfg^d[QR_TUbz`NFOUhdmt]d`\\`bjwubL`]XVVU[\\lwvmm]TU[koa\\YVXf]LJSI=CEGVZUMY^Zjoi^[``^\\[[_hgUMW``ZTSWbecaaahl\\QZZQ^fejc_`fqomv}{vx|zv~{_SYX]ujam`><BFEFKFHNGILMNTUY[[X]aSPLJJA==B:259EJD@C:BNHEBGE4<BA<37@83:C@?JPNHFGHMJMLHRMJLMNLJLPRMQNIHLND=CDDB@OK9A?AINMHGIIMQQONCEHLEGIJJJGMPMLJEENQKXNKH;GLIBH>77;698=??BGFKMOGMNHIKKJHGGQZPGFPLHGLLDCPRHMPKRRHKOLKBII?CKIDD;;@IGG37LP<IQROU]XQOMMKB?JPHA815<:@1;<2G>>D?BLI[[TXRJQ`h`YQIIEGCAA@MJ;=DGF<I~zz~~}}}|}}|yuuz}~~|{}{wx|}z|~~~|{{zzwtux}~}z|~~}zwvtrnpspljheffdbbbb`^]\\ZXXZ\\XcNMNOaHM[a_KWXRRQQPMIJPNDAEMFMRIPCJLSKEIZZ_`NFGGJSSV[ccQJSYTJMYeNKU__dZLV]daYV_g_XY^bSWRGNZ`UAEMVHLQW_WNTOMMIWXTPOMJA=>HTRNPMPQNMNPQSNTf_[_bab`YZ_\\_dah`UWTGK]WOLL_W^e`egffceb[bghgflgc_[\\]ahjeabec_fYVbaejcdmmiinlhagl_eihihjifddgkbU\\fa^ebZUXcifabjwg_ZPURW]WUXNOXSJO[abfhhkeclokhjjgjnokehddf_YSehdeehkhfchnxuronqonlmmlmmnnoqsuvyxuwxwwxunu{otvrvrspnilukxmu}z~˻˻ŻŦеɣepvotrggY]omXSg_f|Ѻ»ʹòƿĿxnnmlqvtrpmgdhiggd_]^]YWXZWSSTSSSSRSSSSVZ\\]deeaaqz}oʿѿŵŭĬ|ȳ~~jqwkutzyƼwkx}zs_RUO\\UNKQcl}rX`y`Hbkw~clkf}y{spmko}f][T^f]ZYZWf_YYTFara]]^\\hmncRMNRX_dfdcaeb[^Y]VV^SMHWTIGINZYOOHC@@???@ABCCCCCBBA>95=INB50;EIJI??DB:46:=CLDDDAGLJC0&(%-A<&\u001d!! !\"! \u001f\u001f\u001e\u001c\u001d\u001f\u001f !!!!!!!!!!!!    \u001f\u001f\u001d\u001c\u001c\u001d\u001c\u001c\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001f\u001f\u001f\u001f   !\"\"\"\"#$$$$%%&'''((***)*)(('&%$$######$$%%%&&&&'''((((((((())))((''&%%&&'''(())*+.0[šÚǢǲкnǼȧdhb}flenbϯvʿҶʵ͑nqo|֚UYkƙ|z{p`lwzqyq}`hxlue^YZ]XNYhqOKMR^eer^\\cc`^izyy[\\j]UUYT^YjrfnmcTWWfia^YXXfaLPK=GD8HUXUS[\\bje`ZZ\\Z[VU^gfOGTda^VQV]``a`acig\\Z`_SJPQNQUY^jrru||yy{{z|||pZY\\W[nzrefbF<>AECGEGJEGILMRPUZTSZ_SUXXJAB@A>679@HJGG;KPFHHJE<GJE=9AD=>DHIOUUOKJJJMEILJPNMLLPNKLNPKNTPKOSB8ACEDBLA3?<BJKFEJGFMNNMK@ADHAFIEJFCOLLPHAEPRPZUOHFENC@D:99<787<@AACGKKIBJMHIKFEECFPWPECNLFHLLABQRJNOLRRPVTJGBLE;@DH<G=9;DCA3BOJ=KPQR\\\\RNOPNJCFLGA?9<B>@71A99A9I>4ACPbQU[NIUeg[[RGJIGCA@@MQ>EMGE;o~}{|{{}|||}~~{uuz}~}}|{}~{z{~}{~~~}~|yvuuuvy{{{yy{}~}~~~~{zz|}yvttrmmpnkifdddcaaaba^\\\\[\\]`\\YMPQOaMQ^e`T\\\\WVUUTRQRTPFDHOKRQLPDNMPKKPZ^]ZMFIJLSWZY][OFR\\WJMW`RPSY^dZMW]dc`[bjdcfii]aXQW^dXDKSQQNS[[SLVOJJL`\\ZXWSOG@>JXROQNTVNKMNOQNTf_^c`^^YUX[Y_ecg^VQKAQ]OKJHZTWb_bfec^``[aefdbica`__^bjia^bfcag]Ycdefccijgilkk_ak_ehbddbda]\\bk]RaeY[d\\PQ^ca_^bkue\\[VXRWZVTUMRXNJQ]eehkmohekqkdgjejqokijhgdcaZjmefholmpikopqponrqnikllmmppnu{sswvtttsrroirvilqp}~oonjkchun||lyz~{ƵʸǼļŻιɷȵ}wgwurufibanp^Te`f}ηǻ«}ywuuy|zwupgeihgfa\\]][YWXXURRRRRRSRQQQSU^^[fmj`dq}wĨ٧ع˾{yêƬ°®{wuzxt~}x|w}wipyxnc[TTWPUQN]jrdTkf[\\Vd{t_ebj{q}ddjp{wibdXdo^agSLN]bo\\HIdeaZb]hqnmcUOLMW\\YUSSTWXYTY[XYXHHHWMFGDLWRJF?=?@>=?@AAABBBA@A?=:<ACCFIKMJKGEBCEB:4=GIK@:;8@KJJE=84:IF*\u001c !!  !! \u001f\u001d\u001d\u001c\u001e\u001f\u001f  !!!!!!!!!!     \u001f\u001f\u001e\u001e\u001d\u001d\u001d\u001c\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001f\u001f      !!\"\"\"$$$%%%&''((****++)))('&%$$####\"$$$%%%&&&''''((((((((()))(('&&%%&&'''()**+-(-Kϧ˝ěοsoʱnio}qougҶşyë­ϨyzibfkuJ\\ƫzvwct~{sty{q\\ztxw_X\\bcPP^pcGMQWdclcQ]Zj^avx~s\\jk\\YZ[]YZkjaklcQXQdeaaX[ZcgPTH?I85RUUWY^^_dbZQYV[\\W^f`OQUbfaZRUZ\\^^^^acfdcf`WTLCD>CHLP[mvqt}|zyyx{}rqylejia[emjhcO@ACCADCFHDGKKNQMSWQOSYNT]\\JBGCCA:9<=ENKKCNNGNOKGIMLGACIEDJJMRWVQNLLMOQHPSMROOOOPNLLOPKMUWOMUG6>DEFFH?1=;?HHAEJCCIKKJJ>?AD>CGFLC@PHOQD>FPROWUOOMHOBC@7=99762>B>:?GIJF@JKGHKEEB@EKPNCDLJHHLK@ANMLQMJORRWULIFN@4B@E9F?=8@A=7IJFALONS\\TOMQROLMQK?A>=ENHB6;?7<;AF18>>\\YR^VJL[hcZ_QHLIKD?>AOUCLWJ:P~}}|~~~~}z{{{||}~~{utz|}~}}||}}|||~~}~~|yutvvvwz|{z{{ywy|zy|}}{yxy|{vromljgdeghfeeca_^^_^\\ZYYYYXUpHSVQ^WXbf`\\_\\XWWWUUXYYRKIKTRWWTRJRQTTVXZa[XPHKNQTVUVXVPIT\\XLOZaWTPXadZT]]ccc`gmgelokaeedd^f`MSXPWR\\XZOLSJLORb^^__\\ZPEHPTQPRPVWMKMNOPNU`[`e`YVVSTZZ]cbd_UIHBSXIFGFUVSa`_cbaY[^[aca^[d`_`[c__dd\\]`d`ag\\V_a^^``egackig\\Zi_cc[\\_^_^TT_fSQb\\TY_XIO`b_`_clsb\\`]YQXZTSSMSULPY`ifhmmoecfie]bf`fojgjegfbhnajj`biojimdfjkllmortlfjjkmmqply~rnutrsqpnmkhquefljx|lijiichsp}xm}|í˾̺úĲۿwnwzozyglh`lsbZfdizúĨ~ǿδ{z}ywseddaba\\Y\\[YXWXWTQRRRQQQQPOOPXa`\\hyvbjr«ͮӯ}ɽûʹwwͯwzwuyryym|tqqgWUU]XPQ[igWTi[Uacgqoc]]osq|gVOdru\\_fnpg_J]pTSS[in^VameXbbcrnljdYPEI^bRGMOPPSVP\\RQLJCFGQKMJHKLIGA==>?>=>???@@@@???>>BA:;BHOUVLNNKIHIB=IWYNE7116EKIJIE=?MH*\u001a $!\u001f     \u001f\u001d\u001d\u001d\u001e\u001f\u001f  !!!!!\"\"\"!\"\" !!!!\u001f\u001f\u001f\u001e\u001e\u001d\u001c\u001b\u001b\u001b\u001b\u001b\u001d\u001c\u001d\u001e\u001f\u001f      !!!\"#\"#$$%$&'(()****++)))(&%%$$#\"#\"\"#$$$%%%%&&&''((((((((()))(('''%%&&'''()*++,*/O֦Ƹ̡ŕȝ}ž{ulou}mӺȨϳ}wdZaYr`IsrsvovztuyyzyepueY]dlaMTcoSGOQbgdhVXT`jWkvv}kekg`__`bS]hfbel^QZN`bcd[_`]kQTGBC2ATSWYY]X`]_V[QW_`cghZ^_`ddaXW[[Y]\\]^`bddgh`OZ`UNHHIIPZepqrxyzyxwz}qdtxuvzxf[_bhmXGFFDACACFDEKLOPJOUMLNQKPYVMGKEEC<=@BGNLKJNLITPIHLNMJIMMGJPMNSSOOMJJPTSQ[[PQNNPQQOLMRRLORXRLTM;<DJHGHF:<=@IFBGHDFHIIHF=?@@=BEFI;BLHPLA:FQSNSRPSPKOFF>5>96971CB95?FHKG@JLGGJFG?@DDNLEDKJHFKM@?GINRLJMPPQSRSNN>5F=A<CDA;@@97IHEDMOMQSOOMOSOMRSKCF?CGPPF==:5:<D53>9I`N\\^MIRbf`[aSLNGLH=:HRWHPbM7z~~~}~~~~}}{yzz{{}~~~|wtx{|~~}}|}~~~}|||~{wuwvuvwvwxyzxvwy{yy{{zyywvx{vmgfoupfa_]YWVVTTRRRRSTRSVXTT\\\\]`_`cgjjllpvz}~FV\\T][]eg_e_\\YYYYUW]\\[WQKPY[^aZUSZ\\]\\_`_d^XSORTWVSMWVUSOT\\ZPR^bXUPXccWX`^ccbdkliimrmajood_idTVVPRVaW[LMQELS[a`baaa`UMPRRPPRQXVMOOOOONU[Xad_RMVROZ[\\\\`bYMBGDSRABCFM[N]`Z_^_XV\\Z^_\\YUa^ZYXf^U[^Y\\`^\\dfYTXZTYb[bb\\`fggYTf`__VTY][XRQ\\\\MU^RQ[\\PDR__bd_fro__gd[SYYSTSMSQNX_ahghlhjb_cc]U[_Ydna_ga^aamoceaY_kjghbacdddhmppoheikjlnpnny|slrtkppkkjhgqsebifs{jbghhbisr~rpíţ̿ÿǺѯ{{ow~mnlnkakteimemzȽ̽}zt~oeb]]]ZWY\\[YXWXWSQRSSQPPQONPPYbe[f~mpv̽ӾѦڵ{~̰ƽª~Ģ|~Ƞr|twuwzrwiru{n`SZeXUk^h_EXWKRT[hfo`Y_qlrs`PKhrgU``es\\[Tdj\\cKTope[co\\]abqsjkjcYKEVmgRHNMNSRSNQFECCAEELQWNLLHIFB>=>?>==>>?@@@??>>>AL>4<HKIT[LRSSQQRFQcYC?E>-6EMKIKKCAJG,\u001c$*#\u001f\u001f\u001f !  \u001f\u001d\u001d\u001e\u001f\u001f\u001f\u001f !!!!\"\"\"\"\"\"\"!!!!!\u001f\u001f\u001f\u001e\u001e\u001d\u001c\u001b\u001b\u001b\u001b\u001b\u001d\u001c\u001d\u001e\u001f         !\"#\"#$$$$%''())***++*))(&%%$$$\"#\"\"#$$$%%%%&&&''((())))))))))(((('%&&(('')*,,,,1FjزЪɟгƶytipӻǨĜʤȘvbU_OiǶRQ}ǣrqpµyxx{o|y}kxks|uxw^deprYNXceKJOTjec]UQLl^[rtuzhkkacecb`S_f``gk[T^O]`ddabb^jXUEAE2KQSYZZTT`Y[VTW\\^hggijaba_`a]`ZSV_\\\\^_abekg`^jhWJL]a]WY^cgptv|zxwz~vjnvw|~yd]ahziNIIGEC@BDCFKMQOHKRJIJIHNUROLNHFE?@CEIONLNOKLVOGJNONMNQOIJOMOPMILNIITVSX_[TQOORSSPLNSRMQNPUMUSA:DMHHIKKGABJDBGFCHFGHGB<>>=<BCGE6IGILF?;GQSOOOQSOJMIG=4>87;;<EB=<BCHLLBJMGEJFI=AC>KKECKIEDKM@>DHPPLJLNLLQUYURDCK<@BAFAA>@58DGEDLONOINNMJSNMPRNPGAGGOTKB?;7:=>4<=@ZPR^MIKYb_\\_aSQSHNPC:FQYMJeRU~~~||zyzxz|~~~}xtw{|}}}}{}~~~~||}}}~}xvwwuutrtwxyxvvwxxyyxxwusrrsohk|yuqmigd`_\\YWTRPKMQPQPPRQQRSSRSUTSSTUUUVVXXWXXZ[[]]\\\\[_ba`eijlprtvy}GX[W\\^bfgcc\\^XYYYSX^\\\\XQLW[_cdYXWcb^`cdhh`XYY\\[ZXSOZWVVUV\\]UU`bZXOXdZT[^\\ddadlmjggqk_jsoc^heWTTPO[`UYKLLDOX]^`a__acZVVTTQPRS[XNQPNOONSXXaa^OFSQLYZXW_\\PE=HCRK<?BEMaR[a[[[_[QVXXYYUP]^TRWgZKV\\WY[ZYbaVSUTNWa[d_[`ade[We_[]PRW[WRQMVQIXVKRZ[F?Ya_dgaium^`gfaYZXRWXORPP\\_addee^d_[_^ZPW[Sbk\\Z`[Z]aoma_UU]keacY^^```hnokb_bfjjlpomsyztlqtegmkjhedqtd_ebnyh^dghdkqt~nrĵĲͿĹĽ̵´psmtrdrqshktdivjm{~в˼ΰz~hebY\\^ZYYYXWWWWURQRSRPOOPNPTVU_hWkxvx~íҿ˯Ԛ֞zɿ͸Ʒȱw}uČm}uwp{rlrozziV[dW[uak\\@^O>IAVjfk`[epnqnVQYtl^^c_[mefoqamgSUxrlY_YP_bnxmlme^XPTjseWVQLMPOPKCCDBCAFEJTTMIGEFFB?=>?=<=><=>>>==<;<><0<CINW_OOQUSVYHU`S=5NP;?OSKFHIIHKC0+53( \u001f\u001f\u001f\u001f\u001f  \u001f\u001d\u001e\u001e\u001f\u001f   !!!!\"\"\"\"\"\"!!!!! \u001f\u001f\u001f \u001f\u001e\u001d\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001d\u001e\u001f   \u001f\u001f\u001f\u001f  !!\"\"##$$$%''(()+*+,,,)))'&%$$$\"#\"\"##$$$%%%&&&'&(()))))))))))))(('''('((()*++,,0@eѵǼӻqŕɕʗvuz~ipսǭӥÿǥxx`P]Ph̒IX|xŅqmxĠtlt{tzvnvwrwjhom}qSTYa[JLQ[g`bZTFNjW`pprufkjbdgfc`X_aZbmhWVaRY\\ccc`bafaZBCH1MPR[[YPT]U\\XVa[_iiijdbecXabb`XQW`Z\\^``bdlecjolZHKXqmc^`eipttzzwvz|zoltu~~~qhfh}WLNJGD@CEEFJORPEGNIGHGGLRPONNIFFABEGJMMLMMILRMFILMMLLOMIILMOPLIKLEHTSQY\\XSNKMQQRPMOURNQMKTPVTD<BMJGIMRQDGLFFJHFJGHHGDE??=<BBFB9JGFFCACIRRMIMRSIJKJG<4:99<EHFFEEFAEKPGLMIFJGN?CD;IKEDIIECHH;=EJPPNIKLIEJTZXXSQR=DHBEEG>@7:?CDDIONLDNLKHSOMNQSVHEGHOLHB@<;?=<@A<KZDXWAIK\\]WWbaTWVLMSH=CQYNKXL}}~|zy{{|~zuw{{}~~}||}}}}~~}}|}ywxwutsqruvxwvvuvvvwwuusqqpgdfz{wspnlc`_]ZXVTVVRUVSTUUVWXVVUSSTTUUUSPNMOPPRRRTTUVVVXZZ[]_bcegkmmqvy{z{K\\]\\[]bffg`UYXWVXP\\]\\\\YRNX[bje^YZc]^adhnm`___bcaZZ\\^ZYYZYZ^\\Yab[[MWbPQ\\XZff`blkic]jg_gsn`\\e`TNQLP`YRXMIGHW][[\\\\YX]b^ZWVVPPTW]\\QTQLMMKNTXb]WIDTQKWWRRYTGA?G>GG;9@LYg_bcc__d`SRRSUSQMZ]IIWhU?Q[UVXVW^\\TQQPOYb]da^`]ac]^g]WYOPUYWMJKMJK]PEPWTFIaeahkfoticchheb]ZSV[PPPSX]_][``V]]XXXWMSTK\\dSWWRVVaodZWPT^g[X[VYY[\\_flnf[[^fjjospq||zvntr_aeljdbatua]bYhwfW]fkinnu}ms{óʽȵ´Ρ˼qnuzukep~zx{shnddtlģ~q|~nccaZ^dc]YWWWWVUSQPQQQPPONNQUUP^fVz~wrơɶƺÓʴ̄лɹĲµyôà}zmsknj~xm{ot`\\ddcb^u`KcKZeBPaihmlttnmgTVixgklijfynnusgosZizrooaNMXmrtjqk\\Z\\`itmfidVNJFGLECEFEDCGFGLIFCA?BDA?===<<<<;<<<<;:99:95>C@GYeQTVKY\\\\MW]N>EheEDRUI@CGIJLI>:?<-\"\u001e\u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001e\u001d\u001e\u001f\u001e\u001e !!!!!!\"\"##\"\"\"\"!!!!!!!! \u001f\u001f\u001d\u001c\u001b\u001a\u001a\u001b\u001b\u001c\u001e\u001e\u001f\u001f  \u001f\u001f\u001f  \u001f!!!!##$%&&'()++,+,,,++)'&&$$#\"#####$$$%%%&&&&''()))))))))))))(*)))(('(()*++,-27Oӿs}ԘΞ|Ƹmyfoׯ©Ĳ~lw^I^WrqHT~pxxӪzsv̵|s{ti~vv|vowrpljytyfT_X\\WJMZf[\\`RJD_]`jfkoofblifdcbb_aWYjmaVYdUVXcaa`gdbc]CLE1LMV`XSNWQR_\\ddWchhjf^flhdeff[SZ^TW]ac_abidenqlbUNQ^gimlkiqsruyvvxz~xprsz{{vrlhzjPPOKDAHLHGLSTPCCLGGIHFKMPPLMKKHBCFGIJKJIIHGIGBFIJIIHHHGHGKPQNLMHDKQMOSSQMHCGNLLMKOURQRQOQUWUJCCJIGHLSTHMNLOQNKKKJHFIOAA?>CEF@AIFDCDEFJQPHEMRMEHJJF?:<??APMKGGOM@DMQMOKNNLKSMGF?FMEDIIEBD@7=GJMONFHKDBGRVW\\\\XUBJLBEIK@?<<>A@BGKJH@KJJDQOMMMRPLJJID8?@;?AEABHEDQPJWGCQJURNR^aWZZPOPMGFNVQPMb~}}z|~|zy|~{xxz|~|||}|~~~~~~{~{zzxvusqpsuvustuttuuusqrqph[dxqjjkdcb[XVTTTTTSSTSSUUVXWVUVWYZ[ZYYYYYYXXXXWXXXXZ]^][[\\]^^^Wd_]Z[_`fjZNTTTTXPa]\\]VPOV[fld`\\[]V[cfmmm`dbaddc]cf]^[]^YY[ZT__YYKU^MQZTZghabkjia[db^elj`Z\\\\QIJGS^QNVNECKYZWWUVUW^^\\YTTVPPX\\]]RTRHMNJLR[bZPGFUSMQMONPKBCAC<EL?9H\\gijjhiefheYSLQTMMJV]CDXhO7HYSSTUTYWTTUXZ]dhhfie^bcabf^XWNMQYVEGGFFNaQCLSSRXhkgikfopcefeddge]UYYQRSUVX[YTY^PT[WTTSKNOHY^ORPMQOamVTSLQ_bWSTSWWY[\\ekj^Y]^einwwrxyyrwq]^]lm`c\\sx\\Y^UcucRYennrkw|oxz¼ȹŲľíŕŸormwbwsmuu|phi_{lĭzni~~kemtwtsgcda[^cc_\\\\ZXWURPOOPPPPPOLMQSSU`[^ygιĺķʝҸкķȹͮǶɻŞu~nfmgew~}~ulyrot`gvj]g}mdtXivNIaga~|uojbbzwm}ulszwsovxsw`uvwpvkbM`onjom\\X^cjpplpsi_SHFHIFEIFCEEIDDDA@?==DHC?==<;<;;::::987767;A@5@Od_ZbY`g]RYXUUatpPNQND=AGGFHJKNMB5) \u001d\u001f\u001f\u001e\u001e\u001e\u001f\u001e\u001e\u001e\u001f \u001e\u001e \"\"!\"\"\"##$#\"\"\"\"\"!!!!!!!!!!\u001f\u001d\u001b\u0019\u001a\u001a\u001b\u001c\u001e\u001e\u001e\u001f  \u001f\u001f\u001f\u001f\u001f\u001f !!!###%&&'()++,+,,+++)'&&%%###$$##$$$%%%&&&&'')))))))))))))*****+*('(()*+++,1<KlûsҬϻhxh|oϼԹźϷizt]Jh`u]JWxev}sņ|z~yĩĢyyyllmpwqnzvurvnif}qw\\afWYTJQcbTa\\GGT`Zjf^ejh]amjicbbce`S]pi_[XgWV\\a__aje_f]IRD6II\\aOOVTINeacZ^gagiccqonkije[b`YRW^gg]^`gcgqroqi[MKVVclsjgrprxuuwwxzwqqwx{wrqqity^OQMFEOSPNPUVRECJEFIIEIJPQLMNNNGEHIHEIIEEGCCB>BFGFDBBDGFEHQSPPTMIMNLMMLLIDADJFEJINSOPSTRRX[\\RLJJHGGLURJNMNPSQNMQMHELNCCA@EIFEJHEBBDFJJKKGFMLB@GHFGEEGJEGSIHDFPT@AHJKKEMPMRVTLNHFOGEHID??<7?FEINHBFD?AHOSWZ[WUMRKFGHNB@??@?;CFDDDAIII?NOMJKKJMKSI=36<<AGIDFIIORMSN?GLFMMFIVf[[_UONLHDMTSOJ}}{wvz}}z|~{zz||{|~~~zw{~~|ywutropssrqqqrrssqomoqi^hwrplhc`^][YXVTUVTRSTVVVVVVVVVVWWWWXZ[\\]\\\\]]\\[[\\ZZZbgc]Y[^\\fiWMRTRQWUc]Z]VPQTYglcb[Y^VZegoil]daabba]dj\\b\\a_YVYWNVZRTJRYSVTR^higchilh``_bdhg_WWYPIFIZVIMWNEIKPQPOONR\\_YV\\[WUUWZ\\\\]SVUNQQOOUdcZPIKWSMLIKLMEBIFEAN\\KBXgoimnkldehfaYOOQLMLT\\@?TdM0BYMLYOQXWX^bddcjqllqicffdhi`[[SJNZT@EGGGOaUIMRYcbgjkgifjlaffbdbinc[^[V[ZXVVX[SS\\NNYSPOMIKMGSWLOMKILa`OTRMXeaYXWX]_^^agkgaacdgmu{wrzxyywwh\\Udkbh[m|[U]Vds`OTcqrskrvu̽ϮĹנ˼Ļw{wwrz{gexody|ei`muxrxmxqgnskefjmnljfdd`[[]]\\[\\YVTQNNPPOPQPPPNQTNP_\\Rmwmˣwʴʿεż̿vѻÕɹȽ±y~xb{jeq|~{ueevdtmk~wyw|||^_rbzlb|ytq~wymutn~xmo{ysw{oTpmoiq]PZeglqmqsqmiXLRPGGLNC@DCC?FDA??ACILG=::<;:::989986567:<=6<U`abaedrZZX^]^ryZCQSG<<BEEEEFLW[OC6%\u001d\"#!\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001e\u001d\u001e ! \"\"\"###$#\"\"\"\"\"!!!!!!!!!!!\u001f\u001d\u001b\u001a\u001a\u001a\u001a\u001c\u001e\u001e\u001e\u001e\u001e\u001f\u001e\u001e\u001f\u001f\u001f\u001f !\"\"##$$&&()*+,,-,+++)'&&%%%%%$$##$$$%%%&&&''()))))))))))))****+-,*((()**+++,Do{ƻrzоŠ~տj{i~|}s{ѿͬ˼нſԽħopzr^RqgxUJof`vkϕ{x|vtʶzztwu^gqmmqwpvkztqljevzycaldVUQPYdU[gQGNZTbf\\Zcl_Wgldi``dhfWOcsgbaWiZ[`]\\_cic_h_MTL?IId^JTYLERg`\\\\c][cgfpypmifiijeWV\\]fncVY_c_jtrv|sgWFIKOZlj]^msypoqonywpqtw{wjjlmw|nMLKHJSVUTVWVUMHIGHKGGKMNROOLLNLJIIICCIA?E?=>;@DFDB?>EJFDGPPMR\\TNQRSRMHJGBCDDDCCBILGMQTSOWY]VQQQOMJNVQJIIJKNMLLQIGHIJFEACMQKKMJLJHFDKICDIKH@;@FGEHJLQSOMOCEFHNVC>@@GF?DIHQTPPTMLSNGFHC;::<CDBHJB@D;@BHMSVUUTUWSINIIPDBBBB@9EFBABBGHI=JOJFJIIGJTSIC8<A?FHACIKMMKRG?DBBHH>EUgX[bXONLD@MTVL^~|{xwxz~~}~|ywx|}{|}~~zy{{yyxyxvtssrpnnnnnnmkloh^o|vpkgjjfc`\\[ZYYVWWWWWWWTTTTTTTTUWXXXZZ\\\\ghe^\\_][ceXOSXRRT\\b`[`[UUSXchdcZW[]]bchch]b`^``^\\df^d__a^T[[NPXLULPY^ZRW`fkmffhklfaehglmaX[_YNKWgWJRZTPTMNPLGJLS[\\RSddWU]\\Y[[[WXZVVVOQZje\\RLTYUROMQNPIDUSKN]kXQbgmeinlj^_ccea[QQMJKRW<;O^N2?TMMXTX^`dilmjfmslpthfkieljb`aZKNYUGKNOLXcZPPWbmcdfjigggjchffkelqiadc`fe^]\\Xb[SaTLVSILMEJMEPSHNIJFQbXQTTUek`dg`aimheflqolllklsy{vpxtu{sxv]X_him]ey]V]Xgs\\MSbqspnld}ξķŲ߶ɺ~}xh{r_qzgh|~mdeh}s纡xvsnmpnfcgjigghfedcbb```^\\ZZYXXWURQNOONOQSQNNRUQKR^TX|lǸ~»i´øƊ˷ǶǺļq˝лĊзƽʻƭ\\mkpyvwlZhvV}|o|sg`{yn{nxuvzioyzkfurnpgUW^dmrsrrmpsn[W`TKMVPB?B@=@KHDADDEGGF<89:9;;<;8576237:<:6<PXWSVcoqdRXai`rpF8KI?=FKGFHGDDQ[WQF/\u001f(.$\u001e\u001f\u001e\u001e\u001f\u001f\u001e\u001e\u001f\u001e\u001e\u001e !!\"\"\"#####!!!\"!!!!!!!!!!!!!\u001f\u001c\u001a\u001a\u0019\u0019\u001b\u001c\u001e\u001e\u001d\u001d\u001d\u001e\u001e\u001f\u001f\u001f\u001f\u001f !\"\"#$$%&(**+---,+++)'&&&%%$%$##$$$$%%%&&&''(())))))))))))****---,*))*++,,-.A̺oǿwi~hv~~wwmѼ̹ͩ¾ĠŶr}qm`^ttTS[g~lnʥ{{r{qűpu}sp{yoXkqgpttsojp}mhcdqun[lmbRVXUY^Qc`JOQQSe^TWeiV[kccc\\]in^NQjtieb[n^cf\\[^aia_i`QZWFKOjZMZQH?Ze]Z[[UZ`ggvytpgisoi^[`cdpiUNR\\]aopmz}slaMEIINZeeH]vzoiigfoqopuzzq`_`l|{unSNKKNSUTTWYVVSPMLLMLNNQPROQLKMNKHFGBBI@=B<;98?BFD?:>IIFCEOLKS]SMRUVUQMMJEDDECGCAEFBKMOPKRTXTPPRUSMOTRKIHKHIHLMLIHIJIFFEHRUMLJKQQMIIKD>BHG?7:BGFFHKNUWVMICDFLJPG>79DA>?BDKHJSQMVVQGFFA:9:@FEBDB?AA9GBHNSSQQVTYMGWMNVGGJDCB;HHFCBBFFJ;HNDBILGBJN\\QSHGG@LF?GNICAGNC???EIC=JUYOXWYURRG=JXVP}zz}{{}|{{{y~~|wtuy|{z}}{~~~~||~~~}{z|||}|ywtrpnlljiigjle`uzxwtonnkiea^__]\\ZYXVUUUUTSSUUjfd_^a`\\_aXWWXVTPccebb`]XSW_ddcZVP`a__^^c]`[^\\]\\[d_ce[[d^T_aTRYIWOP\\f`ZccbkrkgijmhbmrilslcfjgZXhpeW]d]_`YYTKLMX\\V^RVjcRW`YW\\[[][ZY_XHOYkfZUSY[ZXVV[VWROa^X`jn__adeagjiaXZY]cehVYOGLQP9>LZN9?NRU^_cejmorqkjqplsrdgnignifhe_RX\\XVY^[Vgf\\Z[_gkabaiidjlmfijmtnoslehllpofbf`ihYiaQYVMQNCLRKNRIMHPQ]b[XZ[asofqnjnvxpmksxvuttpntxxuptrs{osf^glop_bs]X]ZjnYQXepsstshz˼ƬȾϭ˩z~|r}{qfi}u_xztgdbu{rľȶrqpmljggeeffeecb``__^__^\\\\YVVUTTSQOONMOQRQNOUVMLNQSepħ}}zkâǺŒžƼǫ÷zxǟ¢Ѱ̱]trwuyirfXrvPuzw|}td~vo|x~z`w{jtxslo`\\abhyzppkhswndcgWXWfRDB@>>@NQOHJAAAGE;689:8=>=7483/8?<;=?LTNNQZjeVJOYokpdH>IPICMWPPOKFDHSTTUE.1>+\u001c\u001f! \u001f\u001f\u001f\u001f\u001f\u001f   !!\"\"\"\"#####!  !\"!!!!!!!!!!!! \u001f\u001e\u001b\u0018\u0019\u001b\u001b\u001c\u001e\u001d\u001d\u001d\u001e\u001e\u001e\u001f\u001f\u001f   \"\"\"$%%')**+---++++)'&&&%%$$$$#$$%$%%%&&&&''())))))))))***+,,,---,++,---./1Exպɹ~|xʿȺf~npwyv|pԹϬͽƼǪnh`ju}wTqh`pzzyncvtwumxvcoyzyk\\lmipkfujk}t`_ajpsr[`mhaSb^S\\^WaTMPRP]cRTWg`Shg\\f\\VcohLI[ltid_`qbih]e^`i^_gaT_aLJWmQRYKF<]dZUVWSX^hgstyoeswiiccikikWJJO_]kqhirvuocUQJIKQ`dLEvuiddb]bfjqu|teUVZbuyhl\\RQPQTURRUXVVVTSRQQSRNRQQPRMNNMMCCDACE>??9736>@DB;4@KHEADKFJQWJIQTVUUSQOJFFIBIEFEE@GIKKDKMRNLJLSRNNQPKGEKHDHOMKJJNNKKLKKSTMIGJOPMJNH@BGE<77?FEEFFINWSRJFGDEMGGG908E==;>BC@KTLOXPLGFCAA::AFGE@<=B?<NAGNSQMOZTVFE]QW[JMRHEICJKJGEBDDF:GLA@IKCBIKYQVTTRNXJGSPE=?KM@>DKJODAOTNIRNZ[\\ZWSTOC`~}{}~|||||||z|}~{xwx{}zx}y~{xwxz|}}~~}{z||~~~~|xwtqnlkhghhe_c~|xuttssqonljgedb`_[Yiff`]ad_^^Z_^][[Rchegab`YTV]aecYWL\\g[[ZX^^^UaU[X\\cYiaSVc_S`f_VWJ\\RRahgenj`fsnjjgkl_oxcfqqmptqddprrgjlgkhhg]T__kgZj^`k`V^`TXd`_eZU^fVHSWj_Ua^^a`_`ae^]][kecigda_^^_`gecVUWPV^ci^[NJOTPEKJQNC?K_dgjijmoorqkknmnrkainijlgmlc`Y_`[\\gnafve`cfiec_a[gldqvnjlnq|yrrnlknrwtoelmiqfmo\\]]ZXVLRWSSTNTR]cjgedefmyqrwlqsxzwslw{wxyvnkswsrpqwysswmh{o_otsubbm[X`]gfW]ioty{~þɿɯͺѶȳֻƸĸy}}s}nhdsz~frzxxk`ap{vѮ׼zxwqsxrnmiffeeecba`_]^`_\\\\ZXUTTSSRSSQNNOQUTNPZVKKNP^r}ktn¿óƥ~zmʯɫøʮ{novv`qf\\q]~yzzpz|extlz}~zz[xny{uolk]alxsgjcjyxmmho]gcvTJH>CBBU_cNOEEEMD88:986CB=5D91;EDADGNPGJOW\\RA?GX^giYMFEQZVY_Z][MJLNOPUWQINM=#&)\" \u001f\u001f \u001f\u001f   !!\"\"\"####\"!\"!  !\"\"!!!!!!!!!! \u001f!!\u001d\u0019\u001a\u0019\u0019\u001a\u001b\u001b\u001c\u001c\u001d\u001c\u001c\u001e\u001e\u001e\u001f\u001f \"\"\"$%&')**----+*++)'&&&%%%$$$$$%%%%%%&&&''(()))))))())***+,,----.-+,,,-./5PåջǮv¥lzwxqtx}Ͳֻүξƹƻyk_mvwkWXinljh^u}stt shk|{upZjxm|{i_jnni^cueq}aX^eu}qhia[igfc_i[Ug`XXOMPNW`YOYYeZ^r`[hYWkoX<Qbjsha`drdigbm``i]^jaVdgONdlJVQK@?\\bURUUQV\\fdostfhsuoldnriiZIKPYfjskdgkrzue^bRGGP\\^`2gtc\\`]TTZbnpzm[QRZZdzmeeVSSSTUQPRUTTTUXWURXTPRRPOQPPUPMHE?=D@>C>9408=@A=47CGED@DF@IRRCEPTVWWUSOMIHIAGHKDF?CGIJ>EGMIHFEQQNLMIE@DJFDIOMLMOSPNSRKJQQLECGHJIJMEDMLC67;AC@DECEMVGIHFIDDJEEI1.=?8>9?@;=QMHROGGFBAHG:9CEHD;9<B=FK>FNQOMLXSTAD\\R\\YMSWMIPOMNNHGBCAC;EJB?IHDBHIWRRX[XW]MO\\SDDKWNEBLTLUIKPQLGTVTXc][d`SM}}}|}}~~~~~~|{{zy{~~~~|z{}}}}{|~z|}~|zxy{|~~}}||||{{}}||}}zvusokifeheZe~yxz{~|{zywtlgggf_[ae``_Z^d^aaUbkbga`_ZUVZ^ccWVSSj\\VXTW_ZV^SYV\\^Zk[KRb_WbjgUVVYZ^jlmnpob]mpjmgfk\\jw`]iokqyoglswulmppojosj`hkwncsjhjihgcYcpehlUTilZWb]g^`oe`cbdhkjaaaapgbd_Z\\]ZYZ_ba]KRYMRZ^b_XPSTUYWVNOPNESljklkjnhlqnfeghnl`_jjijdgme^^^`]Ydpognvfbckma`cf\\gqjwqoqov|}xqpqnqvywujjshmutui_efdaZ^][\\ZX_bilpnmmmmqxswtgnpsutsirwpwypijtrnqopqsuxxlfpo_kxsvjdjb]cceick{˽ȼͺ}ȝɩθwlndapy{~nnxvyn_dq}{ƿ֮Ư{wzutvnieceecba`^]__^[YWWUSSQOPRTPNNQXTOPR[VJKMVixzzlypo~ĦufƸȫì÷Ȯyqt~u_}ug^mptz|on{isl~iwzzz[zp|{|qvpZhxzbeger{qkokwbuj}SSW=MDOllqNWSONPA;::945JB;GH17HFEPVEABAHIIG=?FRWX\\XHG@EQYaccdgYMTZZWZ[UO\\^O42<- !\u001f\u001f \u001f  !!!\"\"\"########!\u001f ##\"!!\"\"!!!!!!!   \u001f\u001d\u001a\u0019\u0018\u0019\u0019\u0019\u0019\u001a\u001b\u001c\u001c\u001b\u001b\u001c\u001d\u001d\u001e\"!\"$%&))*,---,,***)'&&&%%%%%#$$%%$%%%&&&''((())))))))*****+,----.-**++,--/[ʯѶżȧpms}~svwyy«¾·һͿԺôżǡydkvp|f`uYlf_^Z`olyzi^o~u`Xiog{cajql_[gscrrU[]kxqebX[fkggdjfW`k_XSPQRO^[OWX[a_oqXa`[erkEBabjsg`afnemhgt^_iZ^m\\XggV[reIXPJ:B\\_RPVPQVYb\\mnfalmopnmuzmaRPX\\djrmcbekqywlgf_NABOWc/SvaSYWPLP\\dgqgVPRYYZu|feUMQTUSQOPPPOQTVWVQWRRSTOOPQNXSPMG:;C>=C>944:<==:8@D>BB=EB?IQKDHOTUUVVYPOKHHAEKODI?AEKL<FDJJFFCNQOMJC?>DFBCGKLLQTOKOWPDFONH@@FFGFGHCGSNB;<?B=?CD?CLM?BFFDAFHGIG22=;:@;?>;@SHLPHCDE?DNF6<DDH>57<BAM;<EMKNQHSQR?DZN\\UMTWQNQXTTRIIBBAA;BFB@HHFBDFXRN]^YSVIM`\\HMXVNJJWXNZNQPQPOYVKR_V[obSkxx|||{z}~~~zuvzz|~~}}~~||zy|~||}zzzy{~~}}{zzzywx{zuqoljiecbZh~xuw{~~~~|uohgc_XZaab`Z[dcbaV`k`g`\\ZZVTS\\``VQTRccVUYSZXYXSZU]ZahXJTc^]holZ^bccknmrrooeWcnfliad\\_rfTcohlukinoxsgjuxokqtjfiiwofokiivwokjproqfXaqpclqjiiqsgcefgjlhcdcjo]OW_QV\\YVUa]ZWEPYRQVX[YVVXUV^]WRWTVS_sfhk`hi_hlb^a`^hdU^iada\\hh_][_a\\Zgplnushdiojbeplamrnyumopw{~{pqqnrvxywnfsjcvwwo`hlkighebgc_hqqkprsqnnntrqkacjpoonhrniwqhflqjlonmnvyngkncfwvvqjhhijlsz{}ھƷͽͺ»wwvзǶִɺx}zy~te_pzu~rjttvpaerz|н׵Ŵүʹwile`gdca`^]^^]YUUUTRRPNMPRONOQXUNOS_WHGP^kxxw|vw}Ĩ}cñĮõƯǲomsujz}h\\uyo{tjtwptapjr~xyy_{p{{}qh`yyl_jemwuhknlsixm|W\\_GRGf}~wOd^QPM>?>;86@S<H^72FRGUZL<;?E?@>DFCO\\PTXOGG;GNZagnkm`Wab`]eXNV^NLFG=0,$   !  !!\"\"\"####$$$%#!\u001f ##!\"\"\"\"!!\"!!!!   \u001f\u001f\u001d\u001a\u0019\u0019\u0019\u0019\u0018\u0018\u0019\u001b\u001b\u0019\u0019\u001b\u001d\u001d\u001e!!#%'(**+----,++**)'&&&%%%%%$$$$%$%%%&&&&'(((()))()))***++,,----./,++--//-9ɊuɷWov}zp|uqľԼýǥkgu|}zgseXpWUWUxxwdnl]]y{qUXhli{Y_iqgZ^msepkV`XptfbUOalkigfma[le]\\TWWSU`TTZU_ajsjSlXiov^AVi]jp^^_decmbvwXagV`kVZggajwZI\\QK;E\\`UQWMOVS]Rjc_^ahgikj{mb`dddgnnd`bgkquvsohe\\K.;WY+Nu_PRSQONUZ^dcUORZYXm}kdXGPVQPOLOLJKMPTUTQUQNOOONPSLRZPSM=;B?=C<68:;;;:;?CA7?><F@>FJDFMQVSQQS[QPMIE?BOQDF@CGNMBLHJKLHFORRSMCBCEA<<BGKLRQFDTUF>ELIC;=DDDDACAFQIBGEBB<?BC:AKD?CHF??FHKNG>>@CDAABBCIOIPKL@DEDKJ=5HDFG956<CFC2<ILALSBMRR=EYK[RMTURPR[[XSNNCAEC;>DB@ILIA@FVOM[VZRO@KabKQ[NMJX\\VSXOQNRRRSQKP\\X`f\\T~yvtw{~{uz}}{yuswyz|}}}}{{zxx|~||{xxwvvz~{xwuuusstsomljhd]]q{z|}~~~}|vpjhdaXW[^a`][^jc_X`d^c_WSXYRIX\\\\WLOX\\f\\U]WTX^WU\\X`bgi_U[eaeotojkookrtlsulhf[Yd`fi`bZTkiTbqgdphdjinlagw~tosqedliqobijcfxysruqqxkfjmrqmqspqqsqjinnmjllggjnjVGS]NRWUTTaZRSFNYVORVUUUW\\VU\\\\WWaaabjmbgcYa_YcbWW\\ZYc]Sbe\\[Z]if_]]gf]\\imouyrlntukeozrkuvr|zoopwy{yqqmkputxxpcnl]nutsdcmlhikhejkdjvthnssqliinnleZ]fkhmjjnafqhcfkjglnport}xmjoonxzwwokqzrrßųíȧˢtoʥϻëzyvwyk^l{w{uioptueasuyĳΪˢѻսz~jprhgdca_][[ZYWTTTRPONMMNPPPQMGUZLQ`VHHUhqqvyx}{z¤{yeϿǹɳ·Ĵï{ko}puryu~dbolqitpxwZq{ksuu{wf|qx{ugp~yhgnkrshdqnmpoxkybb[WRM}uTp^KRH<CE<5EVX@\\U6>\\]X`TCCDMBDMPUGFXSO\\ZJIFAMT[mx{oxl\\ggdafVT]QNORH=?8( \"!\" \u001f!#!!#####$$$$#!  !\"\"\"\"\"\"\"\"\"\"\"!!!  \u001f\u001f\u001f\u001d\u001a\u0019\u001a\u001a\u0019\u0018\u0019\u001a\u001a\u0019\u0019\u001b\u001d\u001d\u001e\"##%')*+,,----++**)'&&&&&&&%$$$%%%&&&&&&''((()))()((())*+,,-,,,.02/,,--.03Hʶ~{nx{}u}nl~~iмп½ýmeyxnl__eORP^nsk~v_S]{roLYdjsmTcipcYbuselhXa[sj]^LQhmlgcih]dm`a^X_^\\^[RbVZbgpm^\\k`sspSSgcXnfT\\__`ab`mSef_bbP\\glirqWPeNREL`fWP[KPTOWVf^YZ_c_aef|emqonkmmg`^gjkortvtmgdbE=YD.\\hXLLNNNNPVZ]_VNQYYWfthbZFLQLMLIOGDDFORSRQPKKNKPROSMNUUSSG@FF?D?7??:99;?DA99><CG?@CDDHPTWOMMOTPQOIF>@NOD?DHKMLJOMLKQJJRRRSOJKLKB9:?EILMH?ETJ=>DHD>8<BAB@>>@EGBAMJFEC?AB:BHBEHICBDHKPPKLMOQKGHKKKKJOMNIEEGMK@6=LEMG<56@GD78:LE;ML9HQR=EVKWNLRQPNU[]YSUTHEHE9:BA@JMI=@FRJJUQUPK;L][NY[NMLb[TZVRMRVTKRWRXWYdgSdzvuvy}~yy{~{xxzwtv|~~~}{{{zxxz{||{~~ywwwvwy{}xssutsqnmmljijf__w}|}zuolhed\\XXZ^^_b\\ji_U`^^]_VLPXQFU]\\\\MJ[]fd[]c[Zd]Zc_dnmrlbfjjotvqtputmsqemtj`b`TVZbfaaROhj]epgcmeZfhffahvwqupcdmknk`klbfwxurmqytbcqvqoqqrsrrqpnptutjluqlmoj[FKaTSSQQSVUMRKKTUQSUQSUY^WV[YU]jgejkea^[Z]VV_WQX[Y]f`Zje]YWajgfdjul`crsqz|vstz{ngu|moxwwzympqtwwsqqhhnpqssofghafloqh[ch^ahgefhdlwtilrqqheeiljaS[feemkkg\\hoghhggknqvwuuskp{}}y|xqvy͠˱ĺǭȲgpĵƪ˹ļ}||}x}n^e|~uuliiozn]jqv̯ڸĢδ;xlupkvsldcba^ZYXWWWVTSROOMLLKKMONLKWYJMXOFL[oogwq{|pv{ſİwzvzβɺͻþmxr}mrkpq~vatq~qolnsysy]y{kt|os~~~}uo{~pr|xrzwonrsjlagunnnswivmcWhPV~r\\qVKZB:KL2=ZaWT]J@Vmdb]XUQLYMmfbVKfKIc]Q@GD:N_ftn]jhe^g_g`MVQRFHJ6*))'\"  !#\"!\"\"####$##\"  !\"##\"\"\"\"\"\"\"\"!!!!!  \u001f\u001f\u001f\u001c\u001a\u001b\u001b\u001a\u001a\u001b\u001b\u001b\u001a\u0019\u001b\u001d\u001f!$%#%')*+,,---+++**)'&&&%&&&%$$$%%%&&&&''''((())))))()*+++,----../21,+,,-/7Dnţqytvxeghзͻid{p_pwbg]WRUiwx|xkYN_{r`I]]m^XgbkgZczsejg]gfn]X]R[kkhcai_]gdag__aa^iU[fTcbjnjXkfmnydYgjXXsWS\\^^`^`qbTkjh`YO`msloi][kNZR\\ffQW^PWVWV^d[SZb_X^_mmezztquqfb^akjmnqtrpljoppg_CIXUPIHLLLLPV]]\\VNQXZX^cb_YIIKHIGFJC?>CMOOOOKDHHHOPOSQPQSSQPKNMDIH@EB=;;ADCA<BDCHGDCDFFFOSRJLJJLKRQNM@AILD<HIKJKNQOJOPHNRQQOLMPURH@@BGHJE@>HI><@BD@<7=B@@>=<?G?>AKIMPJABBBGHCOLIDKJLQRMJORTSMKNROJHGRHNEJHJOE:9KIMSI>5=IH@9B<H;<MF7BLR?CRNSKKMLLLV^\\WUWVPNKJ>;@?>GKG9CEJGHKMPNG:OZUPabOKNbXV^VROYUPGbZZUX^gfN}xuz~}~~}~|zy{{ww}~{yyzyvuwwy|}~~~~~}}ywvxyz{|{|~}~~}|{yroqqpnkjihhfij__}}}}|}}}ztomgega[YY^[aeaileT^a^[`XMMUVLT]^]OK]chfb]mn]jc^igdsmxvjnqtxxtouqttoql^fokb_^XWZcd``PPimgkkfemfYekgfgltzurtnffkkllbmpehx}ynbpqb^m{spusrtqoooptxzxll{|utpmhLFd]VTPPRQTOQNGKQWXUTWYZZ[Y_`]hkbgoi____\\YTU[WSZ^^gqjfohf^_lkhmuyymdl|xxz|zusyyngsuajwssuxsioqnsulnq_ajikljjifacggijj[Z^ZYbddgebowqlkmqmc`_dii[N^hahpmid_jmlleglppw~}w~uqu}~}}ŷЦķȶ{lpyΥŽ˺zyub_yqvoefhuwdaiwһĎǚ͸ſȱvln{gvtjjb`_]ZWVUUUVUSSQPONMLJIMQU_g]RNKJC>Jasfft|~uyrmyĔƴǽxt{|ؼ˿÷þžs~iqzlzhnqzplxxuxool||ssn{x{uhuwiq||tosw{wml|~yystlwpchbpuonlsoftsbZqMa{ndmPT];@VF+Vab[aYMDoncb`gkT\\T|^WRmdK`XU@CJ=Kcu|vk^gcg^jjudWVRZMNH1663,$\"%\"#\"!!\"#\"\"\"\"\"\"!\u001f\u001e ##\"!##\"\"\"\"\"!!!!    \u001f\u001e\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001c\u001b\u001a\u001b\u001d !#%%%'))++,,-,,+***()'&&&%$$&##$$%%%&&&&''''((())))))()*++,,--../..10---...:W_yȩ}ǳ~vvyxvflø̾õе˹e]otjZtj`kij[^jz{}}cXK_xowXL[UtZ`cYiiVb{skmghsojZYa`eied`cfYbc\\fe]f^dgfUf\\[fbggf\\phmpzaeofTapRU^\\]\\Sfzu_\\rlf\\WScqqilgcefT_^ijbPi^]ce^Zd^YR`e[U^^tzak}xtuznd^^hkknpqpmmjnxwj`[MEHGFKNMNRYb_ZVRRWZXY[]]\\QIGHFCEE@=@FLPNMLHBEGFKLOTTQPPPPQRRQIOQKOHCFGGIIKKNNMNLLJFKIEMOHFHEE@FRSSSIBGLCAHIIKMMRPLSKHOPOPLHIOTSMHIHIJH@:?E>:@A@@?>=BDBA>:;AI9?AGEQTJEGFGKLGQMHGMLNQNKFKKKJLLLOLEFJQIKCKJHHA8BULRRG9?JIBBDKCA5>MD9<IRA?LRPLLGGIJYcXTXVUXVPPIBA@@EKJ;DEEEEGJJKB<RVTQdePKQ[UY\\SSXZNESj[QS\\`e\\X~wz|}~~|{|{{zy}{xwvvutttuy~}~~}}}}||}|z{}}ywxyz{{{yz|}||~|{z{ywuuqnnnljhfdcdfe]f|{zy|}z{~~zxz{zzytpkffhe^Z\\b_SmckkeXWd_^cZQPQXR[[[YOTbhhdd_tybli_ileqlwxpsuy|{skrruusqi]ajpka\\^bcfb_aVVhlkpkhimjcilklmoruqpsnhhigfmfjofjw~{pbhxti\\cxvqvuqrpnmlnuywtmjuyx{slr^Ndc^YOHSTSXTPFEN[[V[[[[ZbYcmllf^kqg`alja\\YYa`Z_bfqzulnlnjpskgpqkiv~xuwzzpnspigogXgnjlnqleoogqtfkpZ^ecffcdhlcalikgebQ[e\\_gejgbqvomijtba\\WcheUOcjamnkgbgmnnedmosu}~ytt|οʯǼоŻ|d¼ϩϿvotx|g[p{rskcgdjwn_h~ӶӸǨzkqyltqfea^\\ZXUSSSSTTRSQNQLKQZXQNQZ\\WUSIA?9Ban`fky}y{o̶ǴƨŴw}ynūɬǽzqzjruz{lsvvs{{nuwrqssswn~|sgtqeoz|liuvwslfwtuswmviffjxqpmiqidopcaqNlvtljlM`O=PV98fXfgh_DUvnUoevfXgqgLapNXORfY`cjwth^_dn]ijyd\\T\\eSLC:E824+).& !!!!!!!!  ! \u001e\u001f \"$\"\"##\"\"\"\"\"\"!!!   \u001f\u001f\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001d\u001c\u001b\u001a\u001b\u001f\"##%&&')*++,,-,,+***()('&&%%%$##%%%%%&&&'&'''(((())))))*+,,,-...///./0/-,--.8cµ°â~|uyvjӽ̸аƿɾǺdS_hhdsi]p}~kcewhq\\XKaskunUKTRv|\\`^WofQbzrqokxyqod^ehjd]i_dd^hZ\\g^]j\\hj``hVdbcba[enmhynegscYkiUV^\\ZSPiroaeqhc_WUcpmgjhfmc\\cell_^oblrs``e\\YXhe[Yb[wp\\lyssyuijbgnjlkpnknomowy|{vk]SGGGDIRPORXaaXUTSWYYW\\_``[LILHDIECDLNMTTMKLFEGHIKOSTSQOPQRSTTOQSSULLSPNMPRTURPQQPKHNLHJICDBAC?GRSRSTGKOGJIJLNOKOOOPGKNOOPJGIKMMNLMJJMJ>:BA9=B@?CEDEHIGFD9?DG8A@BCOMCHHHIKLCJLFEJLIKIHAHGDEJJGHGADKNNGEKEDAB:MXQNMD<JPE@IMQH=5>JB76GNB?GOLLNGGGH\\cUUZTT[ZTVPKGFJILPBFDCBBEMFI@AUTWQ``QQJPU^WTUZSHG_bPOY^_`Nn|~~}}}}~~{zy{{zwututsuvvwz~~}~~~}}}}~}zz|}ywwwxxyzyxyzzzz||zxwvusqoommmljhebce`\\q~||{zy|~ywxz}~~}|}}{{|zvvxxvvusqjeghf`[`hdRehokc_Tfa_e]VVPUPbZUWO[djhbbayxbjm`ekgolqvxyxx{}yomquxxsiceowsf_bkkjdbc]_hhjrqjknnnmlnpqqqroqrnhffcajhcgdiv{xtg_iumXZrtpttooonlilvwrnnhlqq|rern[gga[RFPZSaWTNKRc]Zeb]U_jXbvwoedsnjef|sfcaank_afmtzujmot{|qhep|ejowxtqsttljjfcej^WeecfhhdanjdopbhlY[__`ddcfvk`qqmjgibeneaojjietvnnjjs\\aZYab`OTeickjgdblmph^ktrt|}zusru~ɼǽԡƶŴÜ}oȳɳ{pd}zjy{h\\ftsnhafedquboѳ۞}͹urzpl~nfb`]ZYWTSRQSSRSSRPNPX\\]XSMQ_\\U]`O@?;=Zb`cbw|}v|x|ŹʴvsçįЪȸq{lww|tw~{x{wvhxvssm~|wg|xqhrnaly|{ffrvvslcszmsuwnnkjhs|opkgpffimdgjTmuekjnPe>M_L0S_Vouq\\>hunXbx_y}pPezzIJ@fzu~{{u}b^_ks[hgtb\\ZckWMHHH52=5:7#\u001e#\"!! !!  \u001f \u001f\u001e!!\"####\"\"\"\"\"!!!!!!  \u001f\u001f\u001e\u001d\u001e\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001d\u001f\"##%&&')*++,+-++*)**()'&%&%%%$$$%%%%&&&&''''('(()**))))*+,,--../////.00.-,--5f¡~Ũ°zr{dɼѽ̴ƽҮѿ´öfRW\\juv{y_tt^hwz~diUYOcmdgdSFNUvz_`ZYtbOdwqtpoyoxqdinlbak`dfheSa`Zcd\\li^i^[i_e_\\Vjmngybhju_`odWY[YRITjkf\\ihcacTXbphdjhejdbehojbndpw~vgiea]bmdZcgV|h\\lumqymjnqqnhciplkrsooqqnrvfabXPJDGOPNQTY]WTTUUZYT\\_be`RQQNKQLJPXURWXRPTOIKMKMRRPTPNQVVUUWTSVWTNQXTPOQRTTNMMONHHNJHGC>DDFFFJPRPPRLOOMQJJOLMLLMPKGMLLMMJIJJJJJKLIJMLD@CB>BDBDKJIKKJJLJ@EJE:B?<@IE;IBCEHE<BI?CFHDHFD<FD@@EEBBB@BGLPGLKCBCGEUVIIKEEKMFFKOSO?<>E@23EHBBCIFLMILELY^WUXSU[ZXWQQOPVSOSJMG?@BGLDIAGUU[SZZNSBKV\\SVSTKHP_TFOZ`^YN{{}~~{{yvuvwvwvuuvyzzz{{{}}}~zz|~}ywwwxxwwwwxyyxxxxwusrroljjkkkifdcdbXVv~~|zzz{{|}}{{zywwxz|}{{zyyxxyyvvwvtsqqqhfhhgb_djib`qjkgb_eddh`[]OROb\\UTO[gmg`^cyn_jo`bhgllowzzxxwx|rlnq{pikiq{uidfonkhebcigfitrkmonmlmoqromooppnibb`\\ffZ[\\fsvssiZbnkY[ornqsmmmljeluskflfcgctm`jm_dhe^ZWQ\\\\f]W\\Y^kecib_^gl[dxumkpohpfqqjieiwobgmlsxtmonxwlhbnp[hotqonmkohb^`]cgWXa__``_^ah]coi^diZY[\\afhcfzocqzztnswwsmiwommmywqqmondc^`Z]]P[hjbhhcagmoladsuvx~~tpoonw{w||̽ÐظͲüҼſätȮɿȾ~{yv^kw}ans`\\`prhh`addoqgsұ̕ɮ}s^vwhje^][YXXXWQQRPPSTTQIWicYT\\^OQXQWYLA=?>JZa_`x{y}tlyxùyɸαƶ϶į}|ȥũ԰ĳvtk}{||}njv~qstuqq|vzf}sqiqm^jv|tbfnxus||j`oohm~rgieoovzsqiiobihkineXjv[ghkX]?X^<?dQ]{~hALnudzue}odaQCPbvsr|usu`_cruYehr_\\Zcn^RRSH9:AAL8!($%#\" ! \u001f\u001f\u001e\u001f\u001e\u001e!!\"\"\"\"\"\"\"\"\"\"!!!!!!  \u001f\u001f\u001e\u001d\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001b\u001d\u001f!#$$&''()*++,++++*)((&'%%%%$$$$$$%%%%&&&&''''('(()**)))*+,,,-.../////.//.-,-1;\\ǲƙĤƿtkx\\ǵ¢ĔԲȶҰγǽo\\\\Yjeu]o~tulmhRUWg~ebcYOBHWwzx[b\\Zw^Miwquptyoznttmikkdghk^Wb`]eZ_okfeXafbe\\UWlnhjr^jvlVemdZ[YQIDSee\\Vl`_deQ[bmbcldeefdbipimsa}{wrpiaalqb[p``|_^nphnsjkrzwma[kpkkrqmpmdflkfike]QJIMNMNQSUUTVYX\\YSX^^icWVRRRWROUZXXZYXXZWQPTQPTQMRPNNTWVXVVSTXUOQVSQPQRSTLHILNHJOLFGD<EJLKHJOPNMNMONMPKINIHLKJNGFJHIKLHJKIIDFKLHIKKJIFEFIGFILKLLLJKMLGJND:AA9;F>7I=@AC>:=D;FBDADBB;C@>;AC?<>>>BLPLNLKKMOHXQCGJJIHJIHIMQPGA>C=04DECC?GFJKLMFNW[ZSVSU[[XVRQSWWWRQKTODCJKLEPHKTSXSVWLSFKSSRSNFAISXFMKZWURV~{zyy{||zvwy{{yyxvvyzzxxzz|}{{|}~|zwwvvwvtuvvxywvwwusqonmjgghhhgdbeaW[|~|||zxxyzzyywwwuvwwwz}}{ywwxxvwwuuutrpprqghhhgffgkllbqglnglhikmd_dVUUdbYPU`nof^agrdajn`affiinx|{zwtuyskmos{phqklztniiqnmke_gndejtpinrpihlpqrojnonnmj^^_S_fSRSdqqjraP\\hjZ\\mokolhlgedbjrkgele\\]]kgZag_bjhahbY_fogajflomjiabeio_f|smpnddohtxpnlkr{sjnnmswssqn|pkh`nxfT_nrhfpfgm_XW\\Z`aRY_\\ZYYVZd]Rbk`ZcgYZ\\^bjmck}rfp}v|wtrxsqsv|xssqsnihffX\\XTdjjcddc`honiiqwwz{z{}ullolnztrwuʽɼǱƔǯõʻſtɲzǼǲvywd]z}cgzq^Z^kndgb]bemmisũ߽¼ʮty|`m}f]gaZ[YWX[_ZQQTPNUVRXdpngb_Y^XMOMIDE@;EKB^cZ^o|{pytűɐ̮έ´|yå¨Ƴжvh~||z|eltkl~~mvnxxr}h}qpjqkYi}r|l^dm{tsy{a_m|gge}jfg]vsuxxqhknanijmrc[gupYcfb^RGZU;\\dQg{S@btwgluynojKUf~}yimrpro^_fvvXbhr^\\Zduc^`ZLACCGJ8,,&))#\u001f!\u001f\u001e\u001e\u001e\u001e\u001e\u001f!\"\"\"\"\"\"\"\"\"\"\"\"!!!!   \u001f\u001f\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001c\u001f $%&&'(()*+++,+*++*)''%&$%%%$$$$$%%&&&&'''(((((()))******+----.///00//////--,0Eqsѧƞƽox}gtsзʎڴŮ˵Ǭ~ih\\gqqbhpuxbt|mTO_mz\\^cXM>GWvwyTada}[Psvqwk|zv{wrvukkjjpf\\ff`\\[iklqZWfbe[YVWlhalfalxbXeke\\\\UH>FS^[NWj]^kaP[ciZdl_ehea`ipkupk{zxxrkacurciuYsuZboiallgks|{n[`tojkrlkplchhcbhkkhaWPNLMLMNORX\\[\\^YRSY\\gh\\WSSTVUUVUUWYYZZZY[XXWVURLMNLKMPTXWVSSXVQQUSRQRRSTNJLLNJKOMCFC=DNQOJJNNMJKNOMNQLINGDKJFIDDGFGHKHKKIHAELLIIKLNLJHMOJJNNLOMMJLOOLMPC<DB7:E=9H<>C@88=@>E@>?@??>CF@=C@=<==<ALQQNORTVQIYPCGNNHGJIEHLQNIB=@8.7DCDC@EFHJSMFOUYYSTSUZ\\XURQUYVVUQMWXQITRKFTQOSRWTSVORLJJJQNG<?JSMJKGNJUDk||yvvx{}}}{zz}}}||{yyz{{yxy{}|{z{}|zxwuvuroptttvvuuutronllidegggfedbV_~{zzzxxyz|{yvtuvuvxwvy|}{xwwvvvutsrssqoppphgjjfjkhntucmnnmhonqopg`kg\\ajj^Tajrrf^fjjedlldefijnqx|xxxsrtrkhiisselnbvupnhnkpla`gkbdgqjaoxqgjnqssmflqonnk_^\\N]dOOOcpobo\\IYdh[agkijhgm_[bcmoceghcZYXfbTYb^`ilkjidbn{nmuqrqolh`bfgn_fzojlld`igmpnmlmt{tmqoksvsuqm|oni`kqbSXlqc_odcgVUTXYWWPX]ZXWTR`cQQde[XeeV^`egnqhs}tkr}yyxuxuuuyxtvxwrmponb^X]onicb_bdjskpwx{v{xrvywwohjjgiuwp|x}˪Ƭ˝ҪſŴz}Ȼȸst{xv}u]|{{hitm]Y[biccc]^diieqĶïȸz|hljfvtgefc`XZXYfibTNUTMWVPkvod]^W^_WNICCCC?CPR_`[]xz~ůwÑɡx}ʶɮʻ¼ll~v{}vcmrXjrzmjqqtsk~}npjrhRk{oyea`p}qvstW\\oqaeivekdfwot{{phkmmrlmpq`\\ftgZae`^MJ]LMjZSslS_kuuwm~cosylblu{vpgmglql_`hwwWajp\\ZYcxffg^QJGFHG<6/.5:%#! \u001d\u001e\u001e\u001e\u001d\u001f !\"\"!\"\"\"\"\"\"\"\"!!!!! \u001f \u001f\u001f\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001c !$%&&')()*++++*)***)&'$%$%$%$$$$$%%&&&''''(((((())******+,---.///0000////.---,CxƼsȳƞƻx~zryjmմҼəӾ±êȼstn_}qicnxn`xmuYJ^tsS[cWL:MWux|[\\piYTzupwgzzs}ylpnlso_ij^XbpkpsU\\g`cMZ\\[j[^l\\dlm]e`e`b\\M>8NU\\OFZbYckYR\\bdXgi[dhd]^honvppv{xzujahwkjxlbxn\\hqc]kicju~}k]ozkfjnfnoloifb_dgmtqgZTNLKJIMT\\a^]^YQSW[ciaWTSSWWVTRPQRTUXXX[[ZYUTTNMPMIHLPRTURQUVQQTRQQQRSTQNPOOLNQPEIGIJQTQLJMMMKLOONMOLHLD?IIACAACDEFFGKLIHAEJKIGGIKKHHOOJJPNLPLNILNUMOQC?HA6?E<=E<=CA67?=?@>;>>=?ELMDEG?=<;::ALQPNOQRVNNVRDLTOJILJGHLOLHA?A6,;CADEEFFGMULGOTXWQSSV[\\XTSQVYUUUOLW[VMVTLLTTQRQTRQTRSQKBHQLDB@JPLLJGCILC}{yttvy{}}~~~}}||}}}}~}{{z{||{{}~~{zzz{{xvutsqllpqpqssrrqomkjihccdeeee_We}{zzxxxy{|~|yvuwxwxzvux||zxxxvuutrrrrrqonongfoldpshrzcsttpiquwspkcqqhiprh`kputjgjjljkponnnpvztvxuuwsojqla`\\fpcdm]ipqpdggqgZ[ad_b_kc^v{qikmrutmcnvsqpoeaYL`dXSUcon`jSEWab^begebafoYN\\dig]_ba_ZVS]\\LN_^^krrrqlhr~uqvtwsonh``cag]atj`_fdY`adhlkjku{tmqpjqvssnly|rstbgleXUhpbZll^^UQRUXVRNTXWWSNT_YLQac\\XhcSeijnssnz~vpuvxxutvwtzwr}}yuywxn`akwqihc`adqypz{vysyqjsuqrmijfdhtqy{ɹͽҽ|ռƸµzvv̹żtivuytnt~~}xmrvj_ZXXbc]a`\\cfdbrɼȽ˨{znsznptvxob[_ZXZ^nwoYIW\\MWY`wwg]VYVT[g^KA@@DKH:Ib_V][yZdyÊ¼µê~zʸӼũwwxp~ovtfnrzSlnrqhrdsrnskphncMmwkr_g]tnzniN\\rze]aw}jei`pojw|pkkowwqtuo_^hobZ^e^XFS_G`cP[]aietqrw~cbs|hst{~omjp_gokaaktuV^klTTXbwiihd[SNKIIE=6<JF).! \u001f\u001e\u001e\u001e\u001e\u001f  !\"\"\"\"\"\"\"\"\"\"!!!!!   \u001f\u001f\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e #$%&&')()*+**+*)**('&%$%$$$%####$%%%&&&'''((((((*****++*+,---.//011100///...18Fĩ}{ˢŶ~}}jphнɼԾǮ¤ɦ̷̿ķ~}|es{pmwlzxccwuixZK`xnR^fVN?W^wyc_~xU`upsf{p|oupr~vgnj\\_oyvvm[da`YFZa`cU]h[fmcafV^`kZI8BVXZEH]YXfaRX\\`Z[ib\\bj`WYfmqvoqr}x|vidnnhx{gstf`nta_ik`ix}tbd{vdchghqootjfffefovqjc_]RJLOTZbhdc_YQRVZ^heWTTQUXUOQJJIJPSTSTVVURRSQPRPHDJHGNQNLRSOMSQNNQSUUSSWTQOQTTLRMUVRSSMJLMMNPNMONNKHJ?:FE<;=?=ADFEFIKIIBDFLJFBDGFEGKLFGNMLMIOIJMOPQQGFM>8FF?@@=DC>:BC@A;9=@B?DOVRLQLE@<845ANQONLGMSIIPKESVMKNONMMMMJGDCD:5@CADKMIFGQQJHNSVTOQRX^^WSSRVXUVVNLUWTSVUVVTRQQRQNNQRTXODNSLGFEHKKLJGDIAP}zwvuvxz{{|~}~}}||||}|{zyx||{}~ywwxxwussqnjilnllllnnmkigfdd``^bcb\\Ti}|{||{yy{{}~}|z||zxxxutx{zzyxxwusrprsrpnmnmlgerqdruht{euvupjuuvsonmprrlqumjpruvlmkhqlqwwwxxzytuqrusldhm^XVYfa[f[ajll\\\\_k^OV]]][Xhblzuspnosyulfp~|trtnh[PjgeaecmlahPFZ^\\_ceg`Z]hoSJYfi_V[`^YYNKTWHH[`bmyxwtmknyskvsuvpqh__ZY^T]pbRQacTX[`gihhku|ujqrhoussljovsuujjhk`TcofXet`XXRUWYXRLQTTVNGS[OIS_b]XhbVmqnquuu{yuru||}rutsqpsp{uq~{z|ukqv{vrojfciwwq~ztsrwifrsnlihjb_mu{uuϼִȍΚͱʶ»}ǾѶzwp~}xzu{z~vv~pc\\^W]f[Zc]`ebduǴ˸rszzljxiz|r|q_`e\\W^atxdOXcLV^gl`ZWSURPX]UG<;@ELKCXjUO]TFYnZ]~xxųʹ˸~Ŵɟ~ǹ͓Ͻ¯wËxuu|~mx~yhp{hOnoksem[qm|rkksei\\Loogm]iY{o}zk\\I]tnY[a{df``mel}zqnmp||xyvmaajkaY^g[QLfZPlTRhp]j\\akw|bwoZmyyqnztgois_cmidbrrnU[nhLLV`rmkdggZWURNJCCMVB46\"! \u001f\u001f\u001f\u001f\u001f\u001f\u001f!\"\"\"\"\"\"#\"\"\"!!!!!   \u001f\u001f\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f !%%%&'())**+****)))&%&$$$$$$%####$%%%&&&'''((()))+++++,,*,-.../00122211000/./6KbjЪ{o~˫|ò~j|zɻ̚Ӭϯοпpzzspxjtyu]csoh}]Qd{r^hsUUOfkhj~Qqsqpg}{s|s{s{vrrcdku{~wjee]dJL]j`YT^^[jmah]Q\\fhYH9Q_YT>N[Q\\aRSYY`T_c[``hYQXejpvmpr~t|sgijesrmwp[cswedhm_hztfbn{oeggekpnqplkihgikmmkked[RS\\__djed`[TSUVXah\\VWPQZUIRHICDOQPPPNOQOORRRVXRGGC@GLHHMPMJPMKKPTWWTRVWTRSXYPUOUVSSTNJLNMRTMLPNLJGH:9CA:8:;9<ECBEHKIICDHOMD?@BABFGE@DNLLJEPIIKKNTSMNL<BLHC@>FKCAGHEIE9@IKJINTWUTWOMH@705EPMILF>GMCDICDPOGINOPQQNKHHGJNFAEBALMMJIGJHHJMQTPMORZb`VRSSUVTWWNKQTSSTX[YTQRQROJKNSUWVQXVLIJIGINMIGJN>`~yvwvuvxyxy{}}~{z{}~}}{z{||{zxw{}|ysstvvtrqolhfjljhfgiiihfdba`]\\\\_cZRl}|}~~|{}}~}zxwussuyz{|yvtuvtssssqomnopofgrrdongtzvhusroktsqpopsopwlpvpjqtwremnhnjp{xvxy|uoporrnmb\\h^SOOZ`U^[[hieXSVeZITXVZQYmm{wrsqqvyxupnt~~ususncZrkqpoiolhoYO`]X\\ade[QZimRKXiiWOYa[QPDJTWQRdmns{{yunigrqgqjnqmpkd_WTUOVh]MJZ]PUYblqohfqxl`jj_inlribfonnroqhmhYbln`]qg\\_WW[^^WMMOSYI>PZKGX__^]jgezxrttstyploow{tt~wloljhhhjx|ou{}~}~xtz|z|wqmjt}utxsppvgdrrhdefjf[htv|xĹ¥֬fͼ̶ǿw~¿įʼqzq}}}}~j^hZYmgU_`_dchsְ~{|}sjpyhbht}`gpcY`hqn[ZfS_a`^[XVWSPNOOKE?66@GGXpdMDBTXQWtt[m{Ы|ȣåu̶|»ɫnģśz~{~yx}lq}}~m|ufoXRust}lwcg]~iivr}fmuafUMpeeg[jXt}pdOG`oaTZe|uwac]_fbuyspls}yulfgoka\\fhXSanWchJZz}ae`Wiibnvlbdvuktq|irgvgfmgg`rlhTVjdGEVdllkahq_^\\YXSNPUTAA1&(&! \u001f\u001e\u001f\u001f\u001f!!!\"\"\"###\"\"!!!!!  \u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f!#%%%&'()*+++***)))'%%%$$$#\"\"####\"$%%%'''(((((())*+++-,,,+,-../000122211101/..1;jʫwþjsxùwtƺϩ˽Ŵй°}yzmvooq~sadrmid^l{zns\\afwn~xPnslgxr{wxyxur|pgrsu{~urleacFYeu^OU`XZmediUTZhaWAFecYP>YWM\\WLSQZ`Vb\\\\bccUS_gfpznnu{utymgkcj~|lprhZp{viejo`kwjafqunlkgfjnpqoolgiklhjkknigdYXafedeca``ZVWX[_jaWXRQ[VJOCFBBJNLKMKILPQSSUY]YPJECEGGGIKJEIIIJORVVROPUTRRUWMQIORONPJHMNMOQIIQONLLJ;;A>=57:4<AA?=GIIICHORKBAABACD?B=BNGGBCMGHIJNTQSTF>LNJE>CMICELHILEDOTQPPQPRSTVSUMC85=LQG@FA<EKBBCADHFDDHNOPOLHHKJLPKFEBELKJIGDCDHILQROOPSZ``YMOTPNPSTQJIMQSQSYZPKQRUPKHIORUVV\\ZTQMPOOUOHENVFt~{zxutqszyx{}}}{yyzyy|}|zz{||{{{|}|}|}~~}{z}}upprrppomjfdhjigeefffedda__[Z]^UOn~}}}~}zzxvusquyyz}~yrptwvuuspmklnpqreirnakjinlnjtronlspnoqsvlltimvofotum_imfjjpvsrstvwuheilsqlmfW^]NJIO[NRXSgi^VOO]UGRQSVQhw~}rrpmqz|xxvsw{xussqrievnzxtqqqqzh]e^Y]`bcXOXgiUMWlgRRW]\\QPIU`_hcs|zy{|xxjddhngkbelimkldWROHN_ZLHTYQT[clsoebmsdU`bVbgdmd]cmgempriqmejinj\\hldibZ\\`c]RLJW]F?RXKIY`abnrnwurtqlmsf`jkotnoxpegebba_ftqkw~xv{~~zutzyxstv|zy{uuqrujdpofdhgjn[[o{ȸŻƮźߧbҸ¿ýƫ~{yn}ÿſ̳·o}vqrbmcarv]Zbdecgo}vzs{ognvwi_|dmlntfYaggxg^fanb]ZZWTWUQLIKJGC60CSPY_J?BDEQdg^rqnvywȜx˿Ė}ۼ˷˾qĭu{||y|nzis{xvu_zicqN^wtqivxtwtd_ewdgrrxbns\\dPSm`cb\\k[tyfYGJaeVS[iqroe`\\_ad|xwpiw}xulimsjadpiZ`qh_nYSd~j^bTfkupgvhc]txpkoouklgpfm\\ohfVOcbE=Thfik`gxa`_`c^XXWPGH+57/(!\u001e\u001e \u001f\u001f!!!\"#\"####\"!!!   \u001f \u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f #%%%&&'()*+++*))))'%%%$$$#!!!\"!!\"#$%&''''((())))))+++-,,---.../00111222232100/03PƔy{umok{sȟòžҼҶγÿͻƻʺĖvzyottwqqo~qpzqsdsoxy{}jpwzpX{ksefxk~{p~|}y~vln{pr|yt|jgkaHcp{XKV_WZn\\gfYZVi^S>bx^TNEcRNZQKMP`\\V]Xaai^V[cfbs|mmxuqvugdiev{mjlj\\l}rmenoclodbgnqrokfgkopprndeoolkmlimmki`^ckibcbaba\\\\]^`cmbTWUT\\XLNCDBBGKJGKLHLTWYYYZ\\[XROMMIIKHHIEGJLNNPSSPMLQRQQOSKKELNKIJHFIJJJLHGLMLNNLBBD?>3574:<:97EDIGCJRMCBFEDDD@;>;BJBC>BHGGGHNOMUWHHRPNFBLMDGHIFHHKSWUSQQMKMLMPSWQFBCIPPE?C?@FIDCB@AEDB@FQONLHBGKIIKHEC@BFFIE>?DEHJMPOPRSTXZ]ZMNUNIMNNNICFNPLMUVJFNQVPKFCIIRSQXYZYPUZWYQMPXWJ~|xwunoxxuz}{{{zxuvyzz}}~|{z}}}{yyz}~}~}|{yxyyyvqnmnnmlkiecgigecceedcca`_[XY\\SJj~~{wxywusvz~}zzyvutuuutrolkjknpppcgni_igfgbfmrqokmpkgiqxwjdlditkalrog`ehbesokmnnmorg\\\\blunhjhXU[NHFGTMGTMdn]QIMWOGMGRV^r{tormksy{z{ywwyyrsqmqoouo~xuustwwkh^\\^_`aTMWcbVLXn`U\\\\^^_`^nwr{s}|zw|occhlgo`^igjjpl_YTGFYYLLW^WW_dklkc_kr^N[^Q^d[d^Ydmb_fjolusosmmlabfemj][[^`ZKF[ZFISSHLYbflyxt||mlpkcck`Zdeinlmri^`]\\_[Wblgjsrpqvz~|rsnswvvy{wv{xwwmbosmkpjlyaXnúĴϬܰސϺz}{uhy÷¦ĽkvyxiroorqVclhbfm¤|}yx~|{w{wwxnkmsp]qoj|wyqeW`ea}{mbacurrjf[W[WPGDFFB<1?aeSLF?>@JJDOotcv~hoy{xtp˵һŲįtwnstv{iyyiixp~wpi_w}ca|Rnqmi`~kywqkdZhqee~ooq^mo_eO\\j`b`aka}su]PCO^\\SUZjhqjiZ[^^g~{uwmg}}ywwlkotkgoui`mrfidUalq[_Y\\lhwf{h^Zgersqvgdrgs^gfiTI]aD9Re_fl_f|_`aekf_ZUOPC2FE3,#!# \u001f\u001f!!!$#\"###$#\"!!!  \u001f \u001e\u001e\u001f\u001f\u001f \u001f !\"#%%%&&'())*++*))('&%%$$$#\"!  \"!!\"#%%&''&'((()))))**+,--......./0001223444310/.-4PЕlp~mys}Ťpa|кıǳоʯʾɹɷēluxh~wgsz|ur~j~w{x}ofrkm_b{h~usz}x~~ft{kr}uu~giqXSnyvRSXZS\\mahee\\Xf[OLywXTQObNOVMKKW_VRYZ_`nX\\cgfcuwkmzpoxqecjp}o`he_ez|stohvnejhbcglrrnihjpooormcjtpmoqnkkmomhgjlfcddcb__`abbbg`STRTYVOQJHFFHJJGKNMQW[]]\\[ZXYXVVVSPPMKLKMQTUUURQPNJOOOOEQLHFLIDBABCEFGEJLHGGHMMMJKNF=68669864???GBBJLB=DGFJKA:<:7CF=A>AAIFEFHHIUYSRRRQJJQKHNNKJJMUXVUURPLJLFHKPUUSRSSPLEABAEFFFFEEDIJFFNWURPDCIHGHEAA@=>ACEB;AGFGJLNOOSVUVX[YONUQILNHKK@@JLFHQOB@IMQOLD=CGNOLQVYWOX_YXSW_`MS~{zyvqqutqx}}|ywutvxy{|}|zxzzyxxwuvy}~}~~}}}||}}||yroqssqmjllkjigdccccb_^```_^^\\YUUWRJd~}{yzzxvux|~yuuvwwusrrpmkiikmnonabig`ceeaYcopokcmme\\cpuqe\\e`hpf\\hnjcdac]cwj^iiihim_VX]ltjdfcZXZNGFISQCSMZn]IENPGHDB[cjuz~nqujkx{|||zxxyyprphpttsnzxuwnuz}rj````_[TIP_^YQXiZYbaehorv{z~}ywylkksoqfZdffiopib\\NHUWNQ\\g`]cfijha[hnZMZ[M[`Wb_Wdk^Y^jokuvsrsrjhc_cijbZST`dLE[TPWRUTXdjkpywstpdfkcZZb^U_b`jlikbX[UV\\SM^d`inmjlot~vlpjq{rsxz|ut{{wkt~ywsom_rħ̫Ӊů³|zunuıϱzuzɼ{nvsuqW^micemڴȵqrtwv{xvuzks{nbos^h~ip{}mhX]ea|}sc]_jzu\\QXTH=:?C=13Pf^H=BKMMLORJUp}lgmxqw|f~ʮɿžΛ»~ox}mkwpoxoigbxzgglnyu_fwxtb^uctjwg\\[|xmtqph`Z`qe`~gko_fqoaWgg`_]jikqtrSKCPXZUX[hgrieXY]_jsuugj~uwzxjmqrjpxvgeqojg]`ej^U]Tihng|m[U`t|g}y]brgqdajpLFX_A;W`[hlag|_^bgnoj\\SQO<CRK<.#*&\u001f  \" !%\"!$##$#\" ! \u001f\u001f\u001e\u001d\u001d\u001e\u001e\u001f  !!#$%%%&&&'())****)(&&&%%$$##\"!!!!\"##$%%%'''(((()))*)*,,---......../00133355531232.7`Ǹ¢x|z~ȡo[ΛĻӶȶĨƐɶһȾÐiwsfylsv{ou{sukkf\\gpho~}}o~}_vvix|uw}emuUhz{rQ][TQajhffi]a\\UTcziZ[]]cSNSGJNXWWMe`[aoUchfhhunlpzloxmhbmv}eai^^uwkivhrxlihgbdgkspmkhltonnppksskosqqoljnojipjafggc__fc^]]][WQQRSSSTTRQPPPPPPPRRTWY[]]\\ZWVXXVVWURROOQSUXXYZQQRPORPNMGRNJHNI@=<;=ADDAFNOGGFJKLLPVP@>A:9988:><DE?BGA:@GFFLK;8;87C@;A>@>IGCEFEGTYUQOSTOPRMPUUQPQTVWVXYUPNOMDKKNTZ\\ZZTJGDA@BEFFGHILNMLINY^[YUGIMFFHB:;@@>?BCBAEFFFHLNPPRVSRWWWRPUUKKPGEJA>FIBDOM@:CJPOMB7@FJKJMPXSIV]WUR^j`Mk~|zxvsqqoov}{{|xuttvvwyz{{ywwwwwusstx||z||z{{yz{{zzxpklmnnlijjhigdaaa__]ZXYZYYXXVTSURH^}z~~|||||{zyzzxxvwyz{xwvvtuvuqqqnjhhikooo`\\cf`_bg[SaljneXliaV`pof\\Y`]cob^bgmff^a_fvf_fca^jjYQW_lmd^b_[`[ODHLRR@OTTg\\?CNG@CEVprrsvursrgr~~|zxtpqpdpsvrksusrem||tj`bdc_VSHK[XTRS]TX`dmq{}|z~~|}xtn}}vn]cfbempof^XUZZW\\bjk`aeikbYTafTNXUN\\]Tab[gi\\W_kmmurim|vhnib`io`VW[fgRQ^]``]ilkrrnpprqhe]ah_TQY]TY]Yfibd[QXQPZLJ\\^_ikhhffq~tkmjtvqqz{{vm|~}{ytpez̼çܴɰəĳ}|hsoy|;ı¿˻}þǥqx{{s[Zkidbm֨ڽϵ~stzvtruvxtf||bq|_\\qx~kmh_hcw~|d_\\YgzcHBJHB:CKEEFQYPID=ANMNQIKQOqsxvppph̽ǺǞ̯ųdvjotwxngurcpg^tmZiwnumYgtwrmn`crrign_S[xnraove_ZYq^__hqahsWeiba[^xiw{jukIDCNR\\V^aejtgbWS`_lzktnctupwphpwomyzsgkpnlfdeb]T\\UWolmmyXRYkyr}|^drcnnavwJER_AE`]Wkkgl{_[egrws]RRKGSTHL423# \" # !%\" $#\"#\"!\u001f\u001f\u001f\u001e\u001e\u001d\u001d\u001d\u001e\u001c\u001e  !\"$%%%%&'&'(())((('&&&&%%$##\"!!!!\"\"##$%%&'''(()))))*)*,-----......./0112334554223228gydtƿǿŮ´˸¼˝ʷżmpjp}|wvsygg_crlont}~h~qaumryvzyevxduyys]`_STdjhfnghePM[pr]^ajknZSOFLORRT]rb]imShmdhmqiptyiowikcmyvaig\\hvm`nmfxnnmcdbefisokienuommsxq{rkwuqrnljnncjrfdikf_\\ekbY[][VSRQRTTVWXYZ[[\\\\\\\\[[ZYXWY[[[ZWRW[VPQRTSRRSRUXXXYQPSRTUSNLPROKKOMFB>;;<BD>BJYHKJHIHHOTSEFKCC?;:<=?JD@CA9:DEBDGD?:88<@;<@?@=HDDDEEFSTPPNSTOPSOTWWUSSTTXTW[VPPTPJMMRS[]Z\\TFDA>=DDFIFLMOUNKHQ]`b_VMRRHKOC67>A@?ACCCDDHGHKLQQQSPPRPTWRUXNKRH?FE=@IECIND6@IOOO>2?EEDFHKVQHRYWSO[eWQ~~~zwusqolntxzyz~}zwutuvuwxxywuvwwvssqquz~ztuvvyy{~}wxwxvutuvwuplkkmmjfgheeb]^`_\\ZYZVUWSSVWSQURGV}}}{yy~}{{}~~}{{{z}~|{{zwwxyzzzywwwvvwxxxxwtstvurpqnjiijlpqqaWadc[aeZT]fgliPjf`[^oh_TW^[]i_]]amnmbbfothmf`Z_mcNPR_lja\\a^Y`[ODJOOQ>JWP`Y<EOGDGYryuutspqunk|{zyqopq]lnqqimlmm`e|{zpj`aifbZPDEUPIPORTZ_irx|}|uy}|}u~yu~~tjgjhcfopldad_[_dbko_]dji`SN]_ROQOS^\\Q_dbda\\Q[mkoqibttmqpe^np\\Weonffijmkktzwvuojlikma`Z\\h]NMQZSTZVeg__WLWNHXHH\\\\^geaedcuuokkvusyxp~|xw~wkw~ylxȿМҼ¿Ĭӵ~}v}fikuε¾ɞ°|ȷþnz~ydTihbbnɦäyv|zvzzsn|{svztwfYzrivijdly}ha]WOX]M<EKHGFSYNRagVMIHJBCAAJQPQ]sty{psqy̼̗ϻźǡqjŒqielvnv}grrkkcr|j[l[}mplrlVbmjefhYsou^fdXK`npmTvt~a`\\WlXg|[gta_XreabWlmxkku_C=ENN`ZdjdttgfVTe\\mrhnciyvpm}fitunszxmionnolgh_SYaLdrlhvZPVgqwyybjrcm|kuUHM_?SbUTopiyx_Ylhwyv]V\\QXbMGXA@7'('\"$##&\" $#!!! \u001f\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001d\u001e !\"#$$%%%%&'&''((((('&&&&&%$\"##  ! !\"\"\"#$%&&'''(()))***++,--.......///0122344356753221G`{nϿ˿ͼϻϯ˹źĲþ|ĽzwuzwtebZl{hqwrq~vg}`kseqvpexsuqyyjbaVYhjjdygn]IK[umWcisst^\\KJSPRUVuv_dniTjqbjlhestvhoufndmxpakcamldgkfonkpg_`dhikqmiccrummmx|qow}psqojo{hckj`eimd^emh^_ab_\\][USTUWYZ^aacfgffffffcb`_][YUNSYXUQQUUTTVUVXXWWPRSPPTSOLQSNKNQSPMKD?=BE>=EXHMNGIFCKPNGHLMQC:ED@GIBAB=8:==AHIG@=<=A=;<=>>>FBHHGGGPRNQPPSLLSMTVWQQNTPSOU[PQQZUMNQXVY\\Z]UCC?<?GBKPKRSSSJLGR[[c\\XTZRKQQH><=BC?ABCFBINLLJIOPNOJNMHSVRVYMLQI=BE?=GEAHOL;;FOQNE;=GDCCBCUPHQYVRKO\\PT}zvutrnjlswxwx{|yzywwvuvutttuvvuuutrppvxtomkiprrt{tptqsqoorutqmjllnhcgfc_^\\\\]\\[XYZVUXRQVVPOVMLw~~~|zzywwz~}~|{xwxz||~}{zyxxwwwwxzxuuvussvxyxxwuuuttuvvvuspprrrpnoomlkklqrrf]`cf_ab\\ZW^dhkY]b_^]laUPXXOUcZUSci{sienyqnxjc^ciYLPUehb^Za^Zb[OHMPLNDQYT\\SCMSONZvzzxtvrrypryzznjlt]bhkqheeeg\\dzvthf`bjgfgV@AQQQPQ[[`eku}wu{qpuz~vnz|~{tvuriglmqmgfb``aakpb\\fpi^VP^aKMPNWb]P^gia[]Q_klvkbjxuutfbtq`apvrsxrptsuxvuvogdedde^\\XXg_NIO[NPVR`dYYSFUOGSFF[]^ea`ddj}yummyztqvpx{v}rmu~nl|ǼxuԷϾėyy~|vmi{p̰ϟûδ~κ»ȕðpyrZfcbhrÿƯв|hhy{{vilxw|kTt_{xpc^tyonpbJNj_SeeY\\UURRXVQF=DQSA6:?AUkfaq~q¶öµȤsǞwkm}{{zxtzgX~weyuiayakdgqmZb^nwvfepiS_b^_cbV~gqZa^QFfhsdZ~myt\\dXYhXpxXhvgLdwbgd_~urbmoT>;HKOa_one}qmgY_cXp~jedcptnjro`munqwuplmnqtuokk_VgTPtnemcKScjpy~vu||yxarsoxpcNW`P[gT`y{mwm\\tu|xz_^gYaiZZ_GGB66+(***#!!\"$! !!\u001f\u001e\u001e\u001e\u001e \u001f\u001f \"#$$%%$%%%%&'&&''(((('&&&%%%$\"#\"! ! !\"\"\"\"$%&&&''(()))***+,-,-.......///0122454368985322Ulw~ƻǽһ¿ϻüθ˽սƶĳ|lyeZ[p|am~py~sjj{t\\pjjyhqlovzuly}ng\\[`ijocuejXNT`vfWhowvrd`KP^PU\\cxs\\fhaXjkclf]\\wtrdlqfrdiskdkcclfdidmlflkdb`djmmhjd]drqklk|xqylzxpsprlz`imaagqmchnkcbjllefhbYVVVX[]acdfhkkjjlmmkjhgfc_ZVVXYYYXXXWXYXXXWVTQUSJKPOKIPRJKQSUWWXQGCKG@BJULKQLKHEKPLFFGKSEBLB>ED@AA<:::<CONLHGGFBAAAB==?BGQOMMNPPRVSRRLNRJRTVLKPTJMLQXKQU_YTQX]ZWZZ^U@A?=BEDMQPTUWNFGERUT]WSTXPQWSKJK?CLDA?CJKRUTTPPQMMJDMJDQTPVXMMTM@DCBGJKIIPQE>CQVPNGHJJIE?BSPGPUTOHGTE\\~{ywwvuurjmuxzxyzvwzxvwutrommoqqqqstrrmipnffjhhlikqsuonsplmmnpsronknnqlfggd^\\]^[[XTWYUSUTRUUNNQSpz{}~|yxz}~~|{{z|~~|y{|xvvvutvy{{z|}zzyxwvvutrqruwwvuuutssssrrttrqrrrppuwvvvuvusrsttrrpnmmnoqommmoonoqssrncbdkfccbaW]dfmbP`^]\\iXMOYVISbXQKnktnhrtrrkhihb`[bogb[`hbegZSRUWSPS`[`aZW^]\\arzw|zyu|yz|rux|lfhxg]gfoj^b`d\\fvrnb``deehr]ANX\\eY]ngnyy}{uwzolsxyqmz|y|}zzystqjmuulhgfdceorljntrfa\\ehJOZU[fd\\_dnga]Xhhnuffvwuwvggsofmutsxypotsrplotka[]_^_WVVSc_LENZJNQN`cTUO@SQGNAF[]^cgnmmt}vvwoyqo~{xqfkvmxŴwtnsΧ°ǵ~}}v{Ͻȶ¸ȾȼǢƯɿšxz{gmjgnvĸçϿętc{vnl{zu~lUnuZpi_mqwpaRYtj^loX[ahaVNMMJ>?JJF@>CGAjpewrҵοĻvհǲij{~{z}{luyl^XgokeWt[gd]on\\Wdcjc`lgSZZUYd`\\sapU\\]JEjjn_lepkXjS^c^wvTjxwmRxseohm|xmbmhO;=GGW[hwlonpigi\\]rlga^frkbd}``lpptxnlmkmw{yttmbgfJhwedkTT^ferr|ju|vx\\yrngabl_fhZrxwcy]ns_lqvtdLUO@?05;40\u001e'' *&\"!\u001f\u001e\u001e\u001e\u001f  !!$%$$$%%%%%%%&'&&'&''((&&&%%%$#\"\"\"!  !!\"\"\"#$%&&'''((()****+,---.......///001344436998663,C~~Ⱦ˷μӿĿзżƽӻ²}Ļ~gscTar{^qxm{vu}fmv|d_pawmen}rvpmy}qnZeb`lrkmdm^Wdjr^XlqvtsibWXgS[djum]d^[afdel`UT{vmbhnepbcnieldcljecjrdflhde`djqmdf^Zgqmhje|qppjvmpknpwngrk`fjxmfmjcbfnpmknmc\\\\[XY[]^_`bejjlmoppomlmmmkifa^\\ZXXWWVX[YVTUVXXYTMKMJDCKIBIPPUWY[XMKUJJPZXSMSUUQMRTPGGEEJFHK=;?>AA><=>>?EOPPNPQKHLLKMBAEGQZUSQQRSUXVUVSSSHRSSHHVTDKLMOEQX]XSRZ[YWZY]XFEDBA?FQONRSUHGFFROS_UQNWPW[OMVVBLTC>CGJORY[ZXZURQHBKEANPMQTLJRQDJJMMKUSNSVNGKTYYUPPPQQOHJSSLTSRMGHRFi}zxz{yvsv}|yslouy|{{xpswpkkmmkihgikijlopkjkjmh_agcdjeenpmlnvrklmnqusoompqsnlnhed`ba]_[WZXUUSRTUSRQUnzyyxywtsuxzyyyyy{~zuwyyzxwuuuxyrnrutqstuwwy|}}}~||}wrstqnnnonlmpqsqqqqqqqponnpqqoopqolntutvxwvussttpmllkkkllllmmnopqrstsrqmhirkgeiideffjiPc][^iTLPXWMSdXMLtr~vrkp~zu{wqrvwusnuzmlcotmwxlb]gngabmiklmnrkgoq}{}xnrruqgduqbh_jnY]^c_hslh\\X\\_`^ly]Hanlnhlsny~|}sqwwuqq|xsrsuz~uywq{uisx}vmpsonnuxwxx{wsknpW`lcbkonggyvlaeqequgo|stuukmpjmwxsuzunoqlhfdhnk`WY^^^ROTSc^KEPYHJLLggPTJ?URLNBK]_grx{y}~v|q{sjm~~ĺ{ɮ{k{tkͬǻ˽}uzwοŽԠùüîx˻yozzpqxŲʬy~~x|oqrlt`j{colkf~y~l_\\cpc[jiTXjvYJPTTOB?KIKUONNQRqpy³ǹ˾{ϼī\\fo~uiw}att|_U|muY|iSk^fgSjtcQvrceje\\ccRSRORb^agakO^YAFnmaazy_i_TmVb^_ylTsy\\hqnqox{znclcH<;BJ^Vtvounmtg[ee[n\\`ll]YguZ`fpsruhikeo{}xyogsU[vmeib\\`bam}n~dt{t~p_~z{lfvnzildf~s]vhyvyb^dVDA@EG70\"7.\"<2\"\"#\u001d\u001d\u001e\u001f \"\"#$%$$$%%%%%%%&'&&&'&&&'&&%%$$$#\"\"\"   !\"#\"\"#$$&&''''())***+*+--........///0013444457:95100Bx|x¡ʼ³ŵʸɾʿй·vbq_Pkq~|esnpttumemlr\\fka}seglzy{fpy}rp]jYXmqqpkp`_rrmZZmqwwqkge^l^cjmpoedZ\\eeaek`VQyvh`ejanc_jgckdaoq`gvnddljfeaekxpdd\\]imnfeaxklgilckhnn|unmrgcjrxnjlgdhjmlklpmebdc_\\[\\]]^`dhklnppppoooqrrrqmiea^ZXTQTXUROQW\\\\YVUVTOGEJKHIILUTPXTLSVKUYbVVRVZ\\XSXYVNMJHIFII@=<@C>;>AAABDHKMNPRNNSSQTLLQPWZTROOPQTTUVYZWTNVRRKS]RGNLLJ?QVWUSRZWVX[W[^RPMLE:FRMMPQSHHILPHT^UMO_U]^KPZXHQVEAKMKSSZ^_bcZZ[GDD=ALNJKMIHRXLIP]VO`\\YXZ\\UUUY_[WUVWXXSUYVRVRUQLOWVmnqolrz~}|yvrsuvyuqvzqnrvx{yvqhjqjabfgdccbdecceffebchid^]_]agbalnklowujlmnquroqnqssoqtihjffedbadd[VVVVZ]XU[lzzyywuvvttvwwxzzuyzsuxz{vsqsuxvlinssrssuxywxyyz{xtuutnkkjijjjjklnoppppponnnmlmopnmmnokinsstvywussttqnkiiiiiijjiiknoooqqpqplmmlrqkhmqpnhefrgkc`lnZUW[`YYi]O[uxzwttprwz{{z}|ptvzxxrpzxuqx{x|||zszxzowrv|{lfkvhiWcnTV\\bdkqkcXRZ[[]ls[Thzupuutw|ztru}tollnq}zrusn{wjwy|qtuxzz|~~vyzix~olrwzpqxiorgvwqvxrqwwptrntzwswzsorphb_``cke]Zbjg]OV[jeOMY[MJKJmpRXMI[Z[TNZck{wsrw~ǿyfizlϿնģũ̩z}nu}hv¼ɬɭ̻î}Ƶ˶wo{uy}~nyswzhdqyszkuhv{ra\\hucY^]VW^XHHRTRLFGXjgXYbf\\Yq}¾¶ĹoǫŵsUnts{|zl{y~fewqta_o`jX`caqP[gMkhZm}ogYZaSKIGN_\\dbc_NeP<NsdSboY_USo^YXgx\\Y{yw^xworpulhn[A=6@Q\\]~srpnub`fRVuWhncTVudY[esnlmdhfbp}{zynrjXorjmkghccjs{_r|jno~~sgo|mgetlmy|ngrp]OITMI<80E21P5\"--\u001e\u001f! \"\"\"$%%$$$%%%%%%%&'&&&'&&%%%$%$$$#\"\"\"!   !\"##\"$%&&&'''))))***+++--..-..-..///001344556798907W[q{óп®Ůúƹ͹¾t|}^oYQwl|unnerzqvveglciZmgiyc^diu|^syxqn`cLbhlpwoodl{vlZXmssxnnjiclgfjnlsocX^hcbejb]Rpve_bf_me_fdahe`pr`mynfbllhgehn}thcadlknd^`ughaic\\felnropoodfmxsonnmlmmnmmmlgdfjidaaaa``afikklorqoooprrssssqonkf`ZUUSPOMPWZ[YW[`_XRNQVYULMWRKVKKTVMVZ\\SRUYZ\\ZUX[XSSQOOJLMJG@F@=C@?FCCADPMOOPPQRQSUPUXSWSKMIIJMPPPPP[aUV^UUQ`bTQUSULAOOPSSRZUSVZUY_YVTTL=IQOOQPQKNLSPJVWTTW]RaeMOZWLSVHJNOPQX]`beif^gWJE>DKOHJKHKTXRMUi^Whegbaf`^Y\\dca^YY[[WZ]ZWVSXZXZYaffdb`_bhjmruvuuttsqssr|xsyunotvwyzvnaboieaagcbaabc`^a__c`^edbb][]eicfnnpsryykjklorpmmnrrsrrvohkklihffqp^XY[`fia[k~}yywy{vswxvuvvvxzzvw}{vvxzzxpovxythhmqqprtvxxvvvvxzxrprrkgffgggghjkkmooonlkllmlllnnmmmmmkkoqsstvusrrrpnljhghhhghhhhimnkkmmmmmehjpwvomquxrnmoquxjp{zpkdiqlowmcpw{ywxzrmt}~}~uy|~|}|||}z~~~}{pvwxukjsliP[lTQ\\adgmhaUMWVW`igYZhzyz~}~tty}~ztjggeqx{ummxvhttxuknuz{~s}wwvuytvpot{yxuz{uro{|wxwvvxuuy|upstka__`blmfdkw~qW\\gspX^ld[TRQx}]jbZirqagtsxzyqǻ}wikoѻ̷أÞ|ypȲǷĻëu˲wk~{z}|yxow}z|zzm||fqy~xhvtzmv`\\ovaPU[X\\^O@FMJGQWOVwfbrw{m{Ĭµ}lƝjeqmpqovs}Ɏ\\u}lidx}p^cSri^w`S}nKebWl|vkXQ\\TE@CL[Ydwa`ZTcJFYpRLchUTXWo]J[{mPdzyikwwirrtveqoQD<6DV\\otsxyrrbe_G`nUmk[K^wZU[iofgeae_crxyvr|dmrnqqovgfm{zr|x_tlwnu{kcyi`ikoz{ypdV]LLHB=@5KX0.=1 \"##$#$$%$$%%%%%%%%%&'&&&'&&%%$$%$$$#!\"!!   !!###$%&%&&&'))))***+++---.-..-../////02334456884QiZfz¨ƒ÷˿ëǸĻ|}tqyYiV]~hxosd_uvovvejj_gZoell[V^hqwhdv|uokaRNkclkwkphvytpZRnrptloldhkkihnhpudT`jaeehebUjwf`^c]mhadbcfg_ppaovpgbkliiklttkejlokoaXasec`g`[`chmhliqg`ilvlqnpqopopnmlicdhjifilifddegijjkmpqponppqrrrssssrpjfc_WPOMOTVWVWZ_`[XWY]b^XXYUUWNTYVTXXXTRUXY[ZWZ[YVVTSTQRSSRIMDHPHHPJHIPYRPOORPIIQQNUUOUPILGEFLNKJJISZW]f[^\\cd_Z^][QLNJQVQU]XTTTPTXTTUUTOQOQTUTSQSQUTVXXZ\\`^ReiQQWTPRVPQUVWX]dhhooniobTKHJNQHIJKQSTV\\kphiiltmiledbbggfhY[_[Z]^\\^YV^bba_ceddddb`bfgiklnpppprtvvz{y~rkmvxusurjdemmmfckgebcega_a^^ecbgeefb`djkfkqtwywy{nhhjmmmljlstpqpusginnkiilwwg`abhstgfv|xwwy{ywwwuuvvvvyzwv|zutvwwtpotwxqgjooonoqstsstttu{{rprpokhgggfffhiikmlkjiikmmllklnnmmkjnpoqrstutttrommjhfggfffgghhikkiijjkkidgnvwvrrtvxtrtrt|vr{}}{ry|{yyy{z}{xz{vpv~}|y}z}{|~}~}~~zw~|{}}w|{}|rqrsgNTgNKZ[^afc^WJVUYbeaV^s~tuy{}}xjfdemv~smoqsgntqlelt~~u}y{zyyr~pk{~wunvtrpn{xuxyuttrw{{wtuvpebfolsuqtvber~zdt|mod^dosp}|n˿ο~{}mrѹƨȕçʾqx|οɳƦɺéyˮvk}z|}x{|zy{ky|yxtzrskxvhstjwbe~r`dtsmnhO8;AEWgqnd}|¢q~p©|fukxxvkwspktztno}qw}hhwmPblcvu`|nKi~\\^fu~n\\JTRB<APTOazuc]^]^ZW]bEOjcQYe`mSDk}UTkwummp|ekmwwfa|oNL<8MU_{{vsouqcfSFl]WmePHmgXV]he`c^a`Zdqzvtux|nroptsxyes~nvy{pdvi~h{~x{}~ag~_Znu~s[]VWRHA4@\\O1;F1$&&$%$$$&&#&%&%%%%%%&'%&&'&&%%$$$###\"!!!!   !!###$&&&&''')))*+++++,----,--,--...///133455663>Sfoiyx}ʴѿ¹ǻ·øų{zxvl~tSeWldu~npXazqpvrdji\\jZmdk]VN`pur{[rvptedEaacqhwing{urrYKnponehp`ikmmglgivlU`l_gffedYgsfbZb]jjc`bcdh]ppbntpjajiglnm{tpkopqpubZgoa`dg_[Zgekhdis^_ijpinorsoqrqqnlidfhjhhlpokgffgiijjknomnmoooppqsssssrrplic\\VRPRSVVVVX[ZY[\\^a_^]Z\\_\\V]`^]\\[YXXWWYZ[[\\\\[YXVVWVVWWWPTSUXTVZTUW\\]\\WSSTSGINNLQQIQPOMMNPSSQVWX[a[]bZ^agabbfeb\\[PNTXSV^[WYRMPNMRTST[TOPSWXUTTSUV[XZfdjfZgp^TVWVS[[NWf^`hiliouqlyqeZQRSTKQNOVQUagzyqwloxwuokhilkggod[de`aa_a][gkkdbkjjjjkjhijjjmmnqpppqrtux{{olnw{upqqjmompqminjjhghihecacjiinjhkihilmgkq{{xxzrhhhkkijjgormqknrikoookinyxkhjlpvvpsx}zxwvx{{ywutuvuuuxwuw{xrrtuuspnqvyogmnonmnnnpqqrsssy{tkumtqjhfhgfffhiijihggilmnnmlopnmmljmqrqqttusuvtponlighhggdffgfggggghhijgnquyxwtvwxxuvwuw~vt}~{{{}}{||~{{}z|}|yy~{x}}{z{uu|yxw}z|zy~jS[cNJYUZ^_aa]S\\^cijdXqx~~|vxz{}zjdhlnuyropooemrmmkmu}x~z~um{~pgt|okgppikoxvuy{trqpzyvyxvwymdvxz~}vnp|xsxpm}w«ýŸvx̾ǾӫǾ}ͽ̵ȳʹuȨ{pvz{{~xs~ytnms}z{zm}kvzlpohy}nh{jRl}gjeRB436Iw{ǻ~hu~tsymssugl}ǥq}muemt^|{wsir|t[]kjvunRqy\\^\\lwaLRN@=ASKFbtf`d`fq_[TJ\\waNnllgGKriQ_kulmvnZpeuibo`lQU<9WT`|uwsjsoffJMtPZmZDQxr`YY^aZ\\_[_[Ydr{urns|ztqnqvtpj}~fsz{iixrqwi~o}o}s_uwU[yp\\eh_YUC>PZJ3>G9-'*'*$%#.(\"%%&%%%%&&&&%%&&%%%%$$##\"\"!  !!\u001f\u001f !!\"#$%&&&&''(())*+++,,,----,,,,--...///134566751aaMwtkpµ˸þľ¸ƪí~~v{w{m}oRc]x^s{mkQg|mpwo}{ejf[m]ihgSPIk{hzyqWxvvjqcXGfQgqlrlkhxqqr]Lkomj`coccknnfjh\\spY_l`dngedVemgcXb\\dkg[_cdi\\poblrplahffnol~{trrrstx|gdmm__ji^ZYkchi^opX^higjkmssossutpkiegijgjpquoihghhhjijmnkmmnnnppqstsrsstvuqlhd]XTQUTVSUWYY[]]_`]\\[]^^]a`ca__]\\]\\Z[Z[[]\\[[[XZZYYZZ[XYZ\\\\Z[_]Z[acb^YWVUQQQPKPNGLRRRSVYWYWZ[X[`_]^Y_cc_efgffcbUQTWW_]]Z]VSQLLPROSWTQOPVVUVUUVW[Z_jiimccyrWZfbZdeS\\jgkokmjjvqi{voj^[\\ZW`\\Y\\\\^enwytvqrwzqroorphinkiihfhkildcmpnfdnpmnomoqsqllnnoqpppqrtuv{}}nnpy~tnmpjpvmsusrqloqnkgmnlhcinlqrlnutmmpilqy}zxzvighjidjndfmkpklrllpprmhmwyokrttwxwzwswxwwx{}zwttuwvtuwusx{wqqsssrpopsyljpkoomljjmopqstrvxwhqrvtlfdhgeedfhggfddeimmoppqstssomllqurquttruwutqnmlihhgffeefefeeeeffiiewxyywvtvwxxvwvwz~ss|~}|{y{}zz|zz}z||}zy~~x}}{y}~zrt{zw|s|~~ximm`Xc```dbpkmjouv{rn~qw|{ytvyz}}kejrotvyrqnpgpnrxrnz~||v~~|smw}~qgnyniamqeflstswzrrqnypoy{wxsr|}~w}y~xw}zľϲĶ{y¾Ϫɰ˽|ν̿ãȺ{ykxvszx~xjyz}tuycy}x{ymunnooogu}{vxdX_UJDIFDNUNJrx~~ygn}zseu{r|jqjgď~ktafj~_l|suvl|m_rw~u_t~}\\[Xdy|dVOG?@HWHLlchb`|}d\\W^gS]smzeAVkdgZpnhypxfga]sadzZabWc>=`Tawrxr~konhfGYkM^fNAbyg_XYZYUXZ[[S[dtprfkrzyuqmrvt}mtspm}f|x{gjvlxsj{skj}diiQe|r_ppfb`NTRTI3=EB3*.//%%&=)!)+&&%%&&&&&%&&&%%%%$$##\"\"!!     !!\"\"#$%%&&&&'(')))**+,,,,,,,,,,,--....//123456641_tonj}ǮƾƦ}|xx|~w}rslkR^zm||^rylgRmwkqum{tjka]segncNLUrudvg[vtimegIOYNnpmlmmjsmpp]Smomi`blg^knpggjWmp^_jb_siffSbigdW_Y^km^Vcbj^mpahrol`edennk~vtrurstkpql`anl_Z]lbfc_plV^ghgeiksrmstwtoligiiihlooupjhghihkjhllilmmmmnnqtsssuttwxvsrnhaXSPRVTZ[WZ\\\\_`^\\[\\^^]`c`_^^`^Y[`a_]\\]]]^]]][[^a]\\]]\\]_]\\\\`b\\\\cdd`\\[XWYWVUOPOQUUVVX[[Z\\Z[]ZZ_b_\\[_c]]eedddeeYRSUVUb`\\^[YWRRRTRSVSONNTTSWTTVX]\\^kliplfuwi_pucnnddltvskljfsogvwmrpfa`cfihanmjquwutrsv|yqtppspiinnomkikompphnqoifpomnqmpprsnlooosssrqprruz|ylnoxunloksvlsutwrnrvslhuuolciomouqo{ypopilpt|zxzxljjjjfisi`gmpopqopqrsnjlvzonwwvxwz|vorwwux{~{vsstwttuvusy{vonpssqpojsxjnnkpmmlnllmopssrvwvjgxrvrkjjhggdhihheeefkooowwvx}{xppnnsyuuxuvrvzyxurpqmjjjjhgffefccddgegiezz{xutrtwwutuqr|zpqzzxxxwxzyxz~zw~|zzzyvv|z{}|~yw{~{~~}xot|yxt|~|{|up|}wptt~{nxxflwxs|qqrv{}~nluwoqvxpquppt~xsy|}z||~~{r}||vu|~uliuroakr`^gmqsquqstnofgu{x{z}~~x|~y}жȸ½Ͼȳɴ{wϿǩñžt~|~rv}wo}ytxyzap~vt{i}le{z{vsnqpqgtqxertyYOxugfl}{o{wwo~ebsr|t`smyxvhgltjluYlyb]uquzlw|{}n{a`Zl{sh`L=<MWZMa}jq`opg]bomSw{`K`hviVqitolilP`oahjUiz`ekCBeWbnmyp}m|~jpjdJi^Ma\\AKnrc`UXXUQUY[TOYhlhj_imwuqpntvsvn|tk}zlwt`}o}ehroiluin|o|y]|\\Qp|{xweynqhjhcN]I3>HI4.591''.I'!87'(&%%&%&&%&&&%%$$###\"\"\"!      !\"###$&&&&&''(()))++++,,,,,,+,,,,-...///012223529l}|u^gnvʿĖÿĵ~|u{ěmru{{ypnsqiW_rzwbqwid^vnjqrlymum[gkgr`GQit_itZerlbn_dEUHVskfhhkhjipmZatmoh^bhk`imsgcl[drc`he[nnhiY^defVZSXil_Ocbh`ko_fsoj_`acohg|pqsuqpqpupnejppd[fk`h]`qfQ_efb^eftmlrrqnlilnijklnpsljhfkkhmkgiifijknmllpsssuwvtuvxzztojb\\TTYY[]^]\\^__^]]^]^]ae___\\bcZY`dc^^aa_`aaa__bea`a`]]_^^]`e]\\fdca^\\Z[``]ZZYX`hhea`__[\\Z^`\\[^ba`^_bV_ga^^`dfZUWWVU_d^`cca^]Z[[WVTOOOTSTYSVWZcgilkkrmgtwnj{xhruqouywijienpeouipynejmjliguttqsqpooqtqrrqlosokinqspnilrqrspmopmklnllojnsrqnmnnotrsvmorpquy|}wmlnu|tnkoqtshrtsuoswvtpqxrnkflojkvxu{uppjjkm~|wuzxokjlnilxracpttvtqqqwwqloyyor|xuxxyzullxwsvy~zuqqtxrrwvvtyxsngkttpoqkwzkplkolmlolklnlqsqwuxmamruvutrmlkhookmgjjkrwsv|yy|rsust}zx|yyuz~zwytrrqrrkhhffddegkgefd}}xrrqrwvrstnowmnwuttvvvw~wvy}yt~{{yxvqs~zw~}{|xuvz}x{~{vt}~z|w{{y|z|kqt_g{ztwtnvnifpzz|rqzypnyuotvt}|txxvzx{|zm|z|~zzupzlmnbhlprltstxpmiiq|~|z}~y}{z~Ѹ½ǺҮŹļĶǾʯ̼ƾyrķĥ}v}vx~zpvr}{xpyp}`hxpzi{}yb}{nwjrqpkmyty}cno{}VU~sw}}vsuqfcZ{mmzw^klzxwo^ro{v{la_il\\lswq~lkqwwz~ndE?X_a\\]zz|lyq_jeoy^Zfncaonn]vqYOfche[[qpdilDFc\\c`gxm|j|udplbVlTRbTB[nje_RZWNPWYSLQ]g`baaclmjmprvuppmvxfjz|tlhazitbgrt|^lnimxpyi]zRPx}pysx~|xjzo{jsb\\lJ5CML43<=.*+8M$)K@))&%$%%&&%%$$$#$$###!\"\"! !  !!\"#$$$$&&&&&''(()))++++,,,,,++++-,-..///00011-/-0=raj^v}dXouȣĿżðȼŚvs{aixxxlkzrtkeipuftsceswdlkpovk|nTziiuYC_kxn^|}lQjmadeeSJNGbnecfhfbhpvlcuvjqe\\ihqhhktgak_^sebdcXinhjZ]bcg\\VOQgh\\M_backn[hsng^^_aod`{lopuqln~|svlpnsprk`mk`hYdn^Racd_]beufqloznllipriknmmrndkifnniolefecechnljiosssvywutuwyzz{ypfZVZZ[]^]]]_a_^_`_`_cia`a\\`d]Z`dc]_hf`aabcbceeecdd`^``b_`g`]hfdcb_]`cdb_\\\\hrzxngdb`]]\\ad`[]ddec`aXcj]Z[\\dh^XZYYZZ`abfggdcbaca_ZWSSYUW^_YYdnnlmmmtoirxqo}tjqxxrvvyggihjqihtkk{thnrlmijtvsqpkighkqonsohotnmjnswvsjnwtruplnqpllllknhmsrponnnowsuwjmrlmpuxxumjlrytojoxvkdqsqnmyzorwusomgfklggx|rw|sqjihft{pqzxpkjnrqpxwjetyz}xssq~{upr{ypwzvxxyzsggxxptxztontzpqyv{uzvomceuuonsn{{mqrqnlnnolkpsjlrqzvunfotvx{{vuvvrxvtusrtu||wy~z|twxxw}y}}x}{yzz{|qkjhgddfkohccc{}~tqrprsrqrtoq}vjluttsvusuzvvwzyrzywwurlo{|wv~}|{{zwuvz|}z|{wy~|z~ur|}}y}|qmo\\cttwtuqkvnedqwsttv{tknz}rsxw~}wuuqoxwy{}ymyrvtwwvyyyyt}yz{wwrm}usqzx~ӴŵǶ±±ƶð{jʾɮðŨxutmomk{xxusnqk`wzvrrnt}mne~^mn}|lmxwls|eexw\\Xjm}pn}qkmv[kPpfc{w[bgztxq\\qoxq~{wrfsozgpwytunwxfD^m\\f`qz|yyrxhsjp{wsoiXjpgIYcXj^WcmdaefCM`dcRcqiyb|oaphbdeOS^QRccdgWS\\VKQ[UILW^_Z^\\^[kfgmprssokioi^itunr{bbvkl_kstziYgmhi}ofv~z{xXejNTv{qi{nqvz{~ywnvtmz]rmZCQVV;=I8.35@L\"2UE-+&%&&%&&%%$$$####\"\"!\"!!!   !!\"\"###$%&&&&''(()))+++++,,,,++,*,,,.--..../130[xufhiw{xgbmȇľȯʾȳô}śymvektz}wzj{rvntrl}xiwb`wl_scsuvh~mVervQJldw^tnQXck[a^bCKGSgeigfdbcr{{ltwnx_`smzqlmtjdfc[seb_`Tbjfj^Zc`cbTMLddWQ]bZekmWirkc\\\\^bkfZzfkfsphj{wsuitvunuobphbhWflXVb_^Z[^jr_vdmqpkfhrqlklmosgckfhrmjsogfeed_elmhhmrtsstsqqrrsuz~}re\\ZZ\\^][[Z[^___bbb`ejaab__a`]_cc[ajb_bbbccdedeeefcadefa`hc`gfccca^acda^_dryyytogc`^^_efa\\_efng\\_^hdXYZ\\be\\YZYZ\\_]`ggffgghihihba`ac\\_jk`boroqqontqmquqrwhhluxotqytcekkiqkcsoguvjktohegqwsplfdabgnsrrmfnsnnijqsuxmlvsmqnilpnefhfelafspnmjkkpxqttbismmhpvrsoiglssldmyqdfpkhimytksvtqonb]chhesri}tmaafalvkisqlhgkrqrvvpmw|~zrrr{yvpszvqzyuyvzxqki{zmrx~{qlouvprzyz|qinifoysmspz{ntuqpmnonkmtwklru}ytorvvyy~|}}~x~~~|{{~wzzy}ux{xw}z||x}~yuqolijotumgfh{zwpnpqrrsrqqqs{vkkpsttwtquwuvvyxrxwstrpmry}xuu||yy{zwuuwy|yz|z~xqsx~||wrq__qpxxn}pixqjnrspmox|nbnyw~|{yzvor{y~~{qwov~~~~}vj~zykhizÿſѳſǹ¸¶ŷſ|uдëzmnjp|ykrvprvqk|q]}_i~u|rqxmr~{xggzZah{~ikxurvazeXyspd\\|z|n_|vvfosjiV}JeybUxtW`wrjsxmqvjiqu{z{|u{{|q~~|wy|~cQ{d_iprjo~zwh[]opXIc`\\j[\\me]\\b`HQ^mbM^eexYwncmdbk]LQZVe]ZbbPX[TJT_NDPYZYYXZU^cdgjlnotmhknc[bjoiztabsnyh\\portyZYbl^gud^ssmufLqcLaruflt}epuuw{zxqt{{o\\moW`aaGOQ-5A:MC\"6SG:/(*+(%%%$$$$$###\"\"!!    \u001f  !!\"\"\"##$%%&&&''(())))))*+*+*+**+,-+++,,----0/+<sx}tsxxyx{gblįxʴʾ׽µƮyš~~eq|xwg|ksxqxd{|{ko[f`cw^w}tokcesUaqgoi~pa>jZhX_bY:PM^jjqdf_fszn{x{\\n{q}tsuusmbf`qc_\\_PYedfaWc_adPJJ^bUWZbZeijVerg`]X[dkkXyai`nneewrrqfu}slvsftddgWjiWZc]XQX\\rjasainmf^fsrkinoopfelhkumksoihfge`fkjffmrttspnnmkkouwux~|qd][[\\^[VSV\\ZZ^aa`_ef_``_aa^\\^b_Waf]^cddcddddefggedfggbdngcgdcccc_`fd^[bikpqsspfd`ehafha]`fhshX_`f^UWXW[^ZYYZ]^b[^ighhgiihhiiiijlojjsogltonrromrtpososm[dgoqjohnlbcklfljdpqgntjdnpedfjtqmjdb_`diqqrmchomohfnprsolpojllgilk`Yfabh^aonlmghinunpqbgqmpkntnookgiorh^mxmbgmigfltpnttspqpaV]gnjn~weo|shZ[b^fpfakniefmqrtxwsqv}{pprtwsnsuvrzzwxs|yonl|mnt|{ohoutpr}|z}}sflvmgvxlqpuyovysrnoonlouyqqt|}xvvyyzz}y|}z~}y}wx{xw~{|{yy}}zvupmqv{{uqnq}unmlnoooqqooptyvljlttrxrotstuuxwrtsnpnnorvxsru|ytw|wruyxz}}tx{}~v{xz}~~}|mdrv}{o}tl|zvyvtupmx~kevy|~~wz~||u~}rbt|sticf}ɻ¼˴ȼȴúüƲĶ~~|ǽɽеpymjkzsƱ~muetpoemogh}XinUur}ud~nwrw}uiumj|cX^v~cis}}{py`yzjVpwnip{wyxvyuXesz}i_ymbvXQ_ujQvsWfs`oa|{qcnzpxwvpst{{[isapw|xv}~rh|{i\\dyuomSPibel`lp_\\\\`\\TQ\\r_NY]`sVqreibbjXHSWbkSWeYQYXTKZbFCUSUYWQXT^\\`adhlpwnlqnbWZehgm^aqmog[roqj{xV[`jVgja^miakXR{\\Oimqcqul`rros~i~|ns~ruucrvgigeQ\\P.?JDQ9#;RKB2+01&$&%$$$#####\"\"!!\u001f   \u001f  !!\"\"###$%%%%&''''())+++,+*((((')6,$(+-.033580>npN_tU]XcxgkpɛǿʻŽָȴ{§~vbliozuz_uyqa_palu\\y~vorhrcxulpkbNUk^cWbhP=TQhrvl`gfzzuuc}v|z{{x~s`kise_^]NTcdacWacciNHIVbT[X^\\cgcUata]\\VYfojXt_gZkmc_qnpmdprltulucfeXleW_a`ULYfxXekdemg^X`pnhikjlmggljnxnnqmjighgbhigdflpssplkkmlilquqnt|{of\\W]^[TORXTT\\_^]^dd\\_a_ab[VY]XU``[^bccca`dffffeeddeeadqjbeedfgiedge_[dhcjmlnlcb`jg[ehb[ZadnbWbbc[UZXUXYY^^]]`aY_iefffeedcefhhjpokqskhnoinrrnlqrnmnmqdV`ejgfkeegeahidhieovigpm`dmfeebmpkga``_bdjlpmaahkndbinooklljeghdehh\\U`^be[^kihlfhikqllpehposoouopsokkmtj^pvlgjlmmknrrrtursvqdX]krpluyhgvrcRT][epfagohagpqpv}wtsszymnoqtqkouuqv~|wvrxzmqt|mjoxzphouqlnwwtx|tei{tfptmoprxrwzwxrloooqw|vw{~zyz|||{z|z~z}}{yy{xy~{{{yy{|}zwvssx~yw}yoikonmllmonkpvyulikqqrvomtrrtsvyqqpkmllnrusppt{~xpuzurxzy|{quyz{yr~zy~z}zmw{u|v}}~yuzzsq~z{y}mZjyyv{qlo˼µ½ɯ¶͹¸Ϻŭ̫¹wmoĺū«|n~hvdmjȬɤyzs|fgwoubbifeiaWvsMao~|aljzo~uoiu`xhXYhwb`w||wltfz`ms}ypxvwyppsZYx~tfzveqjz`it`zy`lzZx_q|{uz`vw}oxm}wexlqutzxjnsv|y~Vc{yvjXWtinqgtl_Z^`Z[P[k_OR\\^lWnxdcabgUGX[nbMWdPVWVSLb\\;FTKZ\\PN[WWZ[]bfltstwpnbSYfeklZ^pjefYmopc}j[Y`kZfehbib\\_R\\lWWimy`uy{^_vnmr{~{c{~dxztftt|oiabQaG?LRLP.*@PL?2,53$''&$\"\"\"#\"!!!    \u001f\u001f    \"!\"#$$##$$%%&&&&&')*+++*)('())'HV56;>ACGJLIGXbWNot\\QSOfzkxqǦſͿɿ׿}}rbjz{y|~]py}y_c|{ess\\y|yvxotpyj}e^Nqbn^YfcNLSTuyv_\\nv{}ut}wbrqwlda]PVdhae\\aifm\\NMKbV^Z]_ag^T[t`Y^WTcsb[l_eWhib^jjkide}ofmyqr`ic[ke]`^eSL]rqNmgbgkb]S[lidgheiigjljpzooqkjjhiifkigchknsqnjhlonlklprpnrvund^][YVOMRQQX^\\Z]cc]_a_bdZRUYRQ\\YX[_cca[\\dgeffeedbba]coh_befhjmkjigfegiaklglj]_`g_S_dbYRY[e^Xdbc[[aZW\\[[`]\\]^a^dheeccbc_]bdffjnfhtrifkkfmqnllklkkigm_V^ddcffeccfdhf`ehgipmafpb]efef[dqjf`^]\\^_dhkla^beib\\bfiniigfabc_ccb_Z[]`bZ]ffehdijknmnlkjqovuosprwwqlnzpersroopossrsuuuwqwricdlpqpnnmepp`NPZZeohfgpjeiqpjwxtvqv{|xlllorkgjoomszwstpr~mv}|pkosxtnpwvkguxrtvsecosmmnnlnltxyzzxknprvx}|{|~z{}|||xx~{{yxu|w}yzzywz{z~~|~~~}|{wwvv|{phglqokjkkkkjr{zulhlportnosqsuqvxppojkkmpssqnntz}{rmswqrz{z~~totx{~}yxt~{~~~x~zy|||u}x~|~vdp}ϻ¹϶­óľŴsk¸źǬxzjoegj~q|˽̶unw}qevmeWcebViwVelkReyhzpho}wrdx]um[]UhrZuzy~kw}dvyq~|{uoz}zoymkkd[szvuq{qrayv|yn|r}~ku~tyxpw|uqv~|mx{h\\m~t{ykQzzulddnuriukbXcbX]T\\caNM_aeWkyd^_abUI[hpUIV]N]TUOOgL6NLKcWGU_VZX[\\bfnnixwmoaQah`i~pVZpi^f[emjazcaQemaahqdaZ[TMf]Y_jy\\xrZ`vilqu{|sj|uazufrwif_VQZHQTQMJ-4EOH=3-:3%/+&$#!\"\" !!  \u001f  \u001f  !!!\"\"##$$##$%%%&&&''&#\"%+1*,07BJPW^Q_]PEDGLORYuput\\\\^~Z\\itŠǼ¼ƻwtzx~rcixyz|w{x]mwzfcyiztb{{xuuvn|nrg^kub|d`j]XWTi|o^c}{~zfy{{vkf[[Xfugbhcnlqo_YF^Zc]^e_g\\RZsaQ]YLav[\\d]dUeeb_cegf_^wn^iyul`kc]kea`^aNR_rcTme\\ibZYQZgdbbaafdflljownorklnhhlinhfdjklspligklklmkkmsrilqolh_YWTNGLPPVZYY]bc]^a_be^YWTRUYWW[_abaY[eebfedfba`\\]elc[cgghilknpkkkmlakmeji^_[a_PVbcWQWWa]Zdcb\\_d]\\ba_c`[[_ecegfebccc^\\aeedkmbettifihempmlmkjhhifg_\\b_\\bdadeaehgf]^deckna\\gd[\\`ce\\]hhf_][XY\\]afg`^abed\\]Zhqic^ea__W\\b`_YYYca[[_dfdbhilnmlmmmrpv{qrrsw|yqs|umtv}yspqvuvvxxuxrwzklllnqrllklllaOQ\\Xeojlhqnllprhr~uuwopuywjiilofaaehintonroonv|russwyusx|vnvwwupoh^cmomjlijhpxz{{tqrtyz||{{zxv~~z{vqw|}xvwxu}v~tsttrw{~rz~yy~}~~urx{v||jikpqmkiikljitzxsjhkporqlpqotvosxmmnjjloqrqollrxzvmkrtns{y|znmsy{z{ywxu~~|~}|~||zz}zut}{|~z}y}¸ĺ÷ʧĻȴĮ³̲«ǿ¼ɮ|sgi|y|o{z}İ˳|z|{tjqmslR\\e_TYxbTgp]Vo{tnsuvzvh{^ur~r[ZM\\yfmvtxyersuû~{lry{iuyqfdqgpzpyrl~mx{y~z{rx~|v~lgvnXUht{}xdVq|pnls|szmmvueWkeX_\\ZY^MMah]\\ixb]\\_]WMYueMGXRU\\MPJX`<>UCXfMJa\\XXUX[agnbbxnlpc`hi[bstUUlj[ecake^w^eRgl__kud\\OZLHpW`fkdrm\\ftblrw|ze~tygnflnda_LTOSRQJE>7<HK@=5.@7+7-%$#!!!!!!  \u001f\u001f   !    !\"\"\"#$%%&%%%%%%$#$-4:;6;@MZ]]ZVSXccSMKMVZXWX]bcirZRxzgzɩżѾ¿įpe||p|nkkrtryvy{]hxtvgf}|qq~}wq~swk{|peltitkpingfwoy}n~~smXmXpphqntruuneNZafd]i_f\\Q[peHTZK^xXZ[ZbUac`_`bcb[\\sk[kxskekc]jfc`_[M[aq^YmcYkYUYR[`]_`\\]daemjhlojprjlphjnkoihgiijsplieijikmlghpojilpnje_ZVNEHMPUXXW[cc\\]b`dgeg^VVZZWU[a`ac]\\de`dcafca`ZZcjdY_ghgfkmnpoffpmainfjj`_Z\\aQVffZW\\\\\\]aeed_`ec`bedfga]]bcefdecbbcc`]cgaimaartjehhblqljolhhhjif_bc_[`c]aeaahcd\\R`g]gj`VZcXSY`e]W\\cf_[XWX\\V[ec_]_`^a_XU\\hmaS]c_^UZa_`\\YY]daWZfgcdilpnmlmmmsqp|upsswy{yx}qry|zxprytwxwxuvsw|osnhqpqlljfrnb[S[^qojqislumpnfovrvwmmtyvghhko`[Z^hajrhgnom|qt~t|ut~xtx~}~~wqti_jmrlknnmlu{{{zuwz{}~~|{zzpwz{voq|{ywruxr{r}}nopmpqxxow{vv|yxz}riz}t|jlpsqmkiiihilvwuphdkpnroiqpmwxlqvjjljjmnpqqmjjousnhgrsow{v~}sho}~y~}zyvtvw~|~~yxz|}||}zww|vq|}smr{x|{y¼ɹ´ɱʠűÿ˹iiiw~Ùzѥwz}}vnpsofv[O`dWIdlQWntUezrhy~}{mzzmz{^h|wmtx^QNTknnqonqmctxsrt{klwddqx~t|nzy~xuxv}tzyfqpZMTdo}z}vx\\fq}slrsuwxuoszzdXofZdaWUSOTdlWcgs[ZYZY[TX{WFF[IdTHFJ]Q5LQHg]JWfX[RVTYbfdYfrdnokvje]`jtZOgjYcgbj`Zw_hZifY]nwaXMYAIv|bmpomukasn_vww}zk~wrsfwqasu{\\V_TZSSRPG=DNEIDA?/1H9/;-##\"!!\"!!!     !!\"\"\"\"!\"#####$$#$%&&'+.6@QTOIFIHJIIIEER\\YTSYfloi_XWY^SKnv̿мÿɿϷxb{x~rvnpzjwwƩyzt^exktfmrr}ttxnyossrws}}zxqeqa{u{|{xxwwq\\dgojdmagaN[mlIMZFUxZXWVaXZa\\_\\^^[Y^oe\\kuokgja^igdW^UT[do^`j^XmSZ\\V[WVZ_ZY_\\bpmdeffqrjlphjonrjjjlghtrkgeiiiknnfgnnkkjmnmid_ZQFGMRYXSRYcc_bgbgmlmf]\\_]XW^b`cdbbdc_ca^fca`WVbi`Xafhf`kqlknebllbglfhibcaaeZ`lka`edbdhkkhfhjhegigjkd`^`dfc_db_ade]Ydi`ejbbmqgbhf`krjgonghhmmfbfgdY]i_ZdaZea\\[NWeU_g_SQ^VOP[gbXT[e_ZUUV\\VZe]_^[`][[XTV]gfTUc`^QUcab^YWVdhZ^ljfjlmtkjlmkjsrnxvrvrsxy{|nt~xvpszsx~zxrssu~|tqpnqrrqpofoqfb_`bzpgujsoollkdovsxzopwzwkljij^ZW\\c`hmecjolwv{|uz{~{y~|{tprv{woo{wsuz}~z}|}~~~}|vxp~|zvywqnuzux|vlrxnwnuvkkjgijspgsuprxtrr|pdzt|~z|lptqmjkiiihgkttrmebkllpkismj{zjrvhgiikmnpqplhhmsrjafttrzwt}vvmhw{s||{ywssuz~|}~{qu{~wzvw{yxy~wqu|onv|v{z~z~}~~y{~}|sĿƾƺƹǼ|ʲ¨}psnŔŮzǰνx~z}vjrq]~qfOOa^IQzwWPdm_sniwjxymqv_\\wumhjzyhQQTWckrtmblzfvwxvunzvojnq|{vy~vzwl{zp}nov`OPVdltu{{}~g[~uounktqrtxrtvywdXmc_ibUNPXYejSdelXVXRY_UZwM?JULkHEAMYD:TM\\cNQe^[XPRW\\dbZYihfmjlwhe_eingOaiVbgalWYvbife`U[pz`TLY?Xzswqsnh|eh|z}qxropmlyadtzZPc`c_[cZEHdfOPOM@5BP:3>.! \u001f!  !!!  \u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f!!!!!\"$%&,1;<=DILPONMKHIHHIMOSUURNKOUcrtm^S_cgii]|w||Ƹ˽Ĺįѿj}uyv~iuv|°~zmagxygsmoex|~t|wq{q}xvuzjx}~~}{jrsutmrfkiM]kpKHWDKw_XSR^YScY`X[[VW^ja^mqkkdg`afjfL^P[Yhk^fdZ[fWf[YYTUW_YX^W^sn^\\]eqmjkmelppwklpoehssmdcijghqpeeppjllknrofabYIKRV\\ZTSZcdaejdhppqkefjc]bga`effddc^a`_hccd]]gka]bhhg]hqielc\\ehbbfafjfffeidgpmhgghhjmooonnnkghiilmfb``cgc]fb^dhi\\Zjk^_ecbgkd_eb]hnjfmlejimqgcgigXXjeW]^V\\_UZPJ_WWb^UQYUJETifXOUc]TRRT]X[eZ\\a[ab]ZY[WS_gYPbb^RScdda^ZUfqbixqiqurvlillgesslvwsxrqyz|znr~wuqqwrsxvskotqwzvrsrsuvutuqiqnhgfizsfrhllmmifbqvsz|vxy}xoxthj^][]_]fmhfmqoqy~{vx~~|z{utz{}z}|}}}|}~wvuyy{xyvupqxwopyuhnvlumqqkhe`cdp}jbrqmqvposxpcx}r|~{twjvxohhihghfcirqnidbijjliktjj~yisuffhhjmnoooljhlqod_irswxpvwqqih{qlx}x}|qov{z~|~{}}wow~wtqy{qt{yxz~wvy|tt{zvx|{t~zwx|~~tp|~~~xx~x{~ty||tv|uvy}|pm}}}~þòûyԽƧx}|nŷ~}ϸȢ{xxy}ijn{_kufWHYcSEicUVphdpjywvhuvjipaRjldedtuk^UWKTbjx{gWm~eq{l~|q{}|}y}~y}{wzzq}|s}uy}ovlX[]Zhkk~qzvqZfmgojknnorxpqtqpbXh[ajaQCV]YddRgei\\PTIY`S_qG=NHWd@CDMO<DVUaOOba[cUJV]^^]W\\hdlhejmfiakmmqZ`kXbi\\lTZofjq`_Xdr{`OS]Iiupzyq~_vxogrmjkq^ks|^StvsottZMnm_gdQSX]VDBK=)*.*&&%$$\"!  \u001f!\"$$%(,/2/,,5;ACFO[lgRHFHHIIJKJJPXZVPNVZWVXY[didXV`bkie[ZoeXe¿Ƽÿ̷ιw|pssĺ~{hemwoiqwf}_yy|z}vrz|~rv|~}ywotqT`luRGWKDsfZMJXYRdW`TW[RV^e^^injgbb`gcpdH`NXYklbfZVbedh\\^UWWX_X[]S_vmXUWdrhfihdlopvkosohlttndekjegspdfrpinnjkrwofhdUSZ`c^\\\\_dedfkfirttoknphdhg^ahjkhfe`cdchddgfgmoebghfd\\enhag_V^c`ab\\bhfggimjjpnlkfghjmqvspookfgjkqrifddglhbmgcmmmdeto]_babbd^]c]]dhjggfbiikpigijg[P`iXSXRSXLSTDWYP[\\VNRTH?Jbf\\NN\\ZUQPQZY_g[Z`_chha_h`W_g_WcjgYYffeddbbhvorylr}|xpmnlgdvwmu{xvotytwxlmy~|xqmlqqqsqnhnrkrvutrttrxzx~yfosoklovwinbahijkedtwty{zz{~wt|nkccadedhpoptwrmy}zwwy{~w|z~~{||}~}{{{{y}tuut~{zvtrmpvkft~~sgiukqmllgc`]]_ovc_roimuknnxscx|s~}xtvywozxngfghgebajurkfcadehignrfnrfwqdfhgjmmnpnjhhlpka`lquzqjxxlojah{vggu~up}ip~}v~{qsy{~vpyynlotwoquvwx|~|yz}x~{tzztu|svrz|y|tjhr}yy{njvyrqwrgsws|{yyxrry{{yx}zmqwupjkz}zz|z}~ÿäŻxzö¥~t~rtĸάͺupqxkfguy]}g\\OTe^JUtrbXUtdeokyr|elqldfdM\\^\\`XrrfpdVMQafg}}]Xn}k|zs}ymy}}}}xyxrz|||pr{zr~xw{wth_sh\\noeypuv~aXpwecojqiggxvintjh_X\\P`i[NBY[_a`Zjcl]IRK[`ShmB?I@_W=BDKG;PYYPK__WibHNa][XWVahgjeblgbheklmocflden[n]_klkp_aasss`Pgf^{zrxbu{yxowihogar}~abv\\no}}k[vsgYSX\\N?BR?=<:87320149>BEDDDFJEEMY\\ZY\\aj|rWJIIHHIIJJLQUROUc~~mgkuw`]`ele[RI[olgmToҽƸШƳ{|rw|~zhfqphiox^`{}}vwv{~{wzv`dp}\\I[VDnk^HFTYRbW\\PRYOS\\b\\]_nf]aa^jcr^U_KV^kkbcWWhffd_ZT^YX]W][QcvhTQTdrfaedcilprkptojptsofhmjfktnbhsnkolkijuyqlib^^aededbdddfjggrutspnmkihfbgjlqnghgeklhhghknoneflje^]cjd]d[SX^^a]Wakgchjnnjoopngiklmqxtqpqmghkmtvolknpqniuokurropyqbec^a_\\WZ`X[baigacbeelpfimlf]OO]ZPQMIPGIUGLYNUXTMLVK>BXc_PKYZVTRT_]blb`ecimrmclqlmpkflwsbajihijjkmwyxoq}yssqsjgtxtx}zsktxnr|vkkwxuxslelqotqidjoeoyssnuxnt{xlnvqjltquon][dgjphfsvtx{|xz}txrpniimopltyxy}tkty~wvx|uw{|{|{xy}|zzyxw{~{npzq|r{vusiisi^n||qeeqjlkjgc_[XY\\mn^brldnthjl~uf|w}zwxyvv{umgefggd``kqnhedbbbggfpqdpmdumadhikllnpnjghmng_dopuwjkunjlb\\jzoadx|ktsh{tspjvxxto}~mfnpruqnoqtty{|zx}yym{t{|rrn~vqwyz{mdfjuyyxw{g\\mxpiok]l|omtyusstqpwvvrqxxofowogeju}|xttz~}{yźqʶn|oûȤxngky^tovf|eQMepYH]rmfQUv[tf~~~~xq}g_kla`^M[\\Z]QmxfttQLW_pdgxeipyo{|}v|xzytuppuw|tjrt|ovx{{uqkkg_wi\\tsunQ]twm^fopobXh|hdmndd\\XXS`dYWFWceY`gg]qUBTQXbTkiAB@@eJC>DNBCXVOIW\\RegNJ`]WTSRYgigedeid`ffhhimfkomjtcpjfqrid^dg|pjb[vvyzzhwtinmoc~itnq}nvk\\_ae`KQdNONLJIGFDBDHLMKJGFDACP\\`]\\_`_b\\SQQJIHFEFGJOWZ]evsry}cSXY[]XP[pdqpNƻżӹ˽ɺ̛ʶytwy}s{khpkadmvbe}~x|p|~}}~|xnlzcNddGhkdHBPWQ[VVKPWOQX^Y[YjbW]_\\ier_bXIYfmcZ\\Y^kgd_\\WX`Z[\\V^YPjwaONTfrh`d`^cglnjnrompsqoklnmimsk`hsnorklkcisvsnjdabefecbccedhfdnrrqommljjkgikluqilkiqpijjilpoldkshb[\\_d_Z`XQTYZ]ZT`pl`emmkglnomjjkklqwspoomjkkmtvrqqyzutpwvtyvvww{uhnk`daXS[\\Q[b]fd]aacckmairng`PHRVOOJDLJDTPGVQUWUOMXSGCTbbTN[```U^legrkilgmrwvlpv|}zxur|liolkllntrx~ztpx~xstvuskpsuxxuplsujpxoijqqlu{tdhqmtrjcfqcdxuojt|mpv|}xpmspjhpmrsn_[clquqouwtx}|uw{quwvyxwxxwr|||ukquzxv}q}wxx||yxy{yurw}|vtwu~}repwztnywtpfbni^i{ynb`ljiihd_ZWRTZjyg[hphaoxoijrul{~|}zwvqjgffeca_bjmjecc`_^dfjpoathdpf_bfilllnpnjgimle_gppqohlqnleYYnyiaftuk~htuj||ot{tx}qozsbfpnnlkjhmqruvwvuz~|~~~urxqvz||utr}xuy~y||jbgjrxxqnsxdThxqflfVitgoomlnopoospnkqvshantia`gku|xrsy}}{~{zzƸǚmw~{ƽǸsp}~sqph]kzyw[t|uqzssmdNPquTEVhsaJcemrio{ivjVajc^SM_YXZMhxuubCY]nwlvzz}}vnv|{ns~ppzn{gp~upykhopxzl|~r{y{uoonr|`dzZVquws]LcqpgZksqgYQspZbicbcU`a[]]i]JXj\\R^gdWrM@VTU`TkfB>:NdDL7IN>OXNHMVQ^mMHaaUNLLRbkefcbdcc_dgedililplnvpstn}rc^`jjzqllgvp|yuymwxzp[nk\\rXUgQQOMMMLLLKDA@>>??A?9?HIOZdj`RLIKMIDKRX[ewqtyk\\aeZf__\\Pyzl½ɿȾƱĖĨtr}|}zssmgsm[diwir{|zyyw|wvm|y{|z|w~{}}~~~xyqmVhrNejkM>KSSTWTILSOPVWUYUe]XU_[fhnngKQ[gl\\XW[fji`]XV^`\\^YUaUPnrXKJRepg_a[\\`cgiikmlmoqpooopplnri`iqkoqlomeehpuuphb`dbcdaccd`bc_gpromjknkkmhmpnwsjmlksqknljlomjditjd\\Y]c\\W\\WQRWX\\\\T^mrefkklehjllfgjghpwromnmkjjltwrrs~xzux|zzwx}z|yktuglhYVa\\O[c\\ccX_b`^ef`grnlhUOVTOONKLROZ_RXX\\bZTX]\\\\NQaeZSbkjiadwqjutqsmouywvux{~zy}vv}sowrmopowtt~{~{urv{wqsuszmkosstqnprplpuolknnhn{}kgmlsrkg]pi]pvohnxoqqtyyrlrolinknupjebnyvvy|}yy~vtxrt|{}w~|~wmqu|t}z{pxzxxszy|srostsop{~sptwst}_di|uinytpgZdi_d{uka\\fmhdhc\\URNOUhveZkmhaoqomns|s}|ytoighhda_^dijgdbc`\\Z]eope^x}dem_\\aekmklnooliknkfdjppmjimlmh]R^vxdalljttj}jptwwq|yssrg`krkjjggfjoqrstsssvyxx{pzuntwx|xxu{}zy{~x~lgmlpwxmorvgVmxqgj]Sjngpiedikmmnmhjhqunc_nmd]\\^ap|xqy}v{|vu~|{y¹¿ǲxn|ŵ¼¹oιw{vjpobYpjzdanzdbtolpcLVsH<KjoPNvvm~c{dpwiqkRXif^KMj[VWOaq[Rjfr|}Ư~rnq{}i~pxgmwgxfp|vmvegnnvrj|tozow{kklpuqZjtNUpszvkPQdgk^Vowl`O]v_Zad]b]Ri\\V[f|PNUiRP[icVvHAUW\\TXie>5;^UMH5QGAUVIINOXiWA[b`NFFK_njcfcaa]b_bhc`kiklkkpusuxwtgdjoq|xsztr~z}{{zy`brS~icoSPLDDDEIKJGB=;98776468=HU\\XNDFGQWSS[clqjdl|}n^YX[^fofrcUnZT}òȼů˳º¦ȷyquz~||}utqnftmfggztppozp~nxxowok|suzx{zvxut|~s}|w}|{}~}xztxajzYghpY@KQSRWTGJONPUQRXS_XXO\\ZdjludKW]hi\\]T]egf]\\VUb`]bTUiSOqjPJFPeog^`X[^`ddjikknopqorrqsnorf`jolppmpokffkouvogbc`bdaccd]^a[alrmjghmklljqtowuknmmsrnqnjkpliddomf]VZbZTXUPOTV[]V[fqifjkmhhfijdfihiltsnknniijipwurr{}{w~|x|}}}stzvvrd[hiRYd]__W]c]\\_\\^htonn]]aYUWZWYcbhmeedhmfchhcnh[`j`Yhssvpew}srvwwsqw{vwxz{{yy}ytxytuztqoqutqwz}xvsuzvortp|wimrnpokqqlmprpnjgknjqwikkrtmiW_o_gwofjtrqnqvuqlrnnjllnpqsqmswwz~{vrvssyz}z}ymru}qy~t}}uosxvwsxy|zuyqmhjrqnlqztinxxn|{w{gYapwmcrtphX\\f_^xsi_V]kh`ebXQOLMQcqe^lidfsmprsu|}~vplgfgfb_]]dihe`_a^ZX\\frm_f{pbcec[`cmjekllmmnonigijonhdklkk_WTdyp^cridzykunkzm{}ur{yvvrjamwkkiddgjnopooprqquv|}~{ttplwxtwzv||~|{z|~yvmrqswyonotrXmuudo^Sgpksfchjkmlmjejcpukb`mja[[ZZn}wq|xsxytu~|žÿȬvÛ̾Ŀzsβ}r~wpprgVbv~pizqZuncpeenjjm]TfufI;QiUEbxougvbeqmonSRhg]LPs`UUTfkdg{qx~îxono}¢}|lzo~naktaodr|vm~sbgklsmgxvmpshtodhiopcTokFUoq}rn`IW`edO[urhSPjfXXXYY^Q`oOSc{iIMSkQTllccw?BV][N_gY71G`FV>=R>HVQFHMR^_IR\\fVBCM]pneada__\\a_bbacikjjikrtuxsv}{sqvux~v~|{PrjS}rvfVPJ=768789522225897569;;:=<;>GRRY]]_fku|qx`mikvhfec[_\\YVVU[eY`cfYzO^~ýòɮ§¤ļյ̻ʷwvz|x{kunqmjxrnjgyq{|winshziuli~vkjzxymplyytsqkpy~t}n|wt{zz|z}~yxywyep~ekkofHQQRSUSGHNMPSLOVS\\PXIVZbjjuaMX]gfdd[_bcd\\ZSVca_`Q\\kNQrbKFEQdnf_]UY]_`agfgilnmootrruoorgajsssonrpmhghksxsnmg^`c^abcY[aVYdolfegmhlknyuoxvkllmqrqrnklmkhdajkh_W[bZUXVTQVY]^[]cnjhiiljjehkadhhfjstpikoggidmwrpo|~x|x{~{u|ypdk{`Wd`^]X]c^\\[Xahnonobgklf`mjlssxuvrmntvsqpnuyofkohoyw~ykt~wuxyvry}xxzz{{yz}{tvyvt|vulqvuqtx{vvtu{vprtny}kjqmpplqpmnprpomfkqikz~lijqrmm^Sqaevqhgqqrnpttolqnnlllmnuw|w~y}zxussxwx}~psvvu~vtor~~zvu}vu|qrsieiwvnnnvpcip}lk|twn\\TevoedqqhXQ[][mqi^UVfkW^`UPLJMThimorlblwkrx|~{rmgefgc^\\[]cfd`Z\\\\\\XW^krd^o|faa_]\\^cnhcjllknpooifjklicekijjYRXivg\\hndn|nj~xew}tszssyz{{zunhfqunlgabjklnokjmrrnstyzuvuur{plvvrt|yw}|{}}}~~{w{{{xvsqosyfvtym~jbssuvofuspompjiopqtkdfjg^Y]\\\\p}xurqqssy~½¼ơ|~ȾķƿĿz~¹vvzzr{m\\Sas|merl_Z\\sb^ibcc]Xho^D?Z[DJhvtdgrfewprpOLlk`SV}iWRc~kt}~ópklr{æ|vpwulvaZenZze`t|wn|q^giiledmiitigma^ddkgWVp]AYmo}vfgXMX_eTHkxl^IZfOPQORXXTt^QYx}TIFakRpq_kqk7HZcQS[eA1A\\TLR5GK<SQIBFTVXVOWaa>?Pbqo^\\`a``^^``bjcdnjeflmntypw}|zz{h\\~v_fpu]S\\^I6+-/./32258999;<=;;96139>BIGFKU^cejsvouc]eajg]_g[TfkbXZZ\\li`XojzkǱɫǴװ·Űzuz|bvitquypum{u{|wl`tmbonq^c{tnjssohieutqoedkszvotuwly|mnyvvxw}wvr}xuyzluusqkpV`TQTXSJFPLNQKJUXXHTEPW`cjqZRW_gfonda[Zc]SN\\c`c\\NhfGZoYF@FUfoc_ZRV\\\\V\\cbdfiijjnursvqopjemryunosonjihinqqqqlbba[`bbVS[US^oibaeielko~vtvijlnortqllmkiecafigb\\^b^\\]\\\\[_aabddeighmghkqjhk``dfdentrfdlecd^futonz~wy}y~|ryref`baW^f^\\XUehiokmhjqsnjwwx~~yysry|~{vx~yqoswy~}{{}yx|yvy|wzz}{z||{wtvxv}x|uszxrstywvuuywqqqqt}tjpqrrpprqrrvrrtkqvieqtkiopnrhWneftsjgpptoqrqonprnnoqqr{z||}uuyuwwx{z{}tu{}}u|wx|{vujioysrwz}racjwwfpxuoeQ[rnd^mti\\NUZZhlg_US^i_YWPQMJO^sou|~ukp|x|lhccff_ZYY\\cd`\\WWYYVU_praatt``_[Y\\_elebfilklnnlhgjjjfcgjgkjWR\\ko_\\jebtugqyil{otqnpw{yz}wpjdhstold^bmmjlnffjrsoprvxrnloxrq{rltsqpy~}~zx~~}w~|~~}~~zy{yxy|v{~y{uxy{qy{qsssuyyvtjklfgb_hefx}yztlnkpq}Ǵ¼ƻ¬Ƶęv{wvty|Ɯ~oxw|n|~~|dVRjs|sjr`d{T^nilg]^[U_kdOAO]K<Snv|hZmpk|VTvnid[b]xwykjftxvªsytvxoriqZS_iVt_]w|yoxn[geff]bc_imad^SY_ai_M\\mQD]kmug__UQWaYDVyljVK]RBIJQY\\ZlcNYj}cIFWsZ[{V[tpX<S`eLPVZ/;Y_N^E5IDBZHE?LWOSSPXjFAUhtm]Z^]^b`\\_Vakideke^iqijy|rv~|zwyuvztds{lb}ulBQWbO<654/-3569=@AIJGC?<;=?@FJLSWYWNKSX^m{u_YWYgg_\\dYVaWVX]ccuyVV{}ƷžɬƢԸɷĦ²yynv}ewouy~v}}rlsxodYzj\\gqmTbyrnjmmhfdaprnh[`krwsrhsmktueiurrsttq|kmz~zqq{wrw||zskscp^TVaWWHSNMOKJWaSCRGOT[ZjjPNOaoqthecW^g\\JNac`eXXoZDbkRA:GYgg``SNS[YPW^]`befffnwrtxtonnhlu|ulptopokhjmpnnsplj`W]baWQVWSZni_`eecojstxvkikolsxqjmohgbb`hhgebabcddcdadiffggfechqidjupgk^\\`cbaksrd`id_`X^rsmpvwuz{~znlhfc[bh_\\VTimfmilrqsvrp}zyx~tqx|x{}wurs|}}~||~y~|yzvwz{|~||zrs|w|~zv~{tuswwwwvuxssstttvmotutuxtuwu|wuvmy|idn}zlhlortqdmkksxminovpspprsq{ossusv{~~w{z~|yz|vv~{~~y{}nyyqouy}w||tegmtol|xol[Wjic]gsn^QUUWehe`TR[ikXUQQQPWlw}wv~~|leaihd\\XWY]bb^ZWVWWTUctpahvkZ^_VV\\`fi`acfkijljgfgijhddgedljXY`jiX^h`fsijulj|yfqwehvwuz}wpnd_mytmicbholkokcektvpposqlkhmxtoxwpqsqmx}}}zv{zu{~{y{}}|~}~~vx}wv|}vzldtttyuu~||zpnrptt}˷¨¿ž´¦xwuvn~w}wγuήrgqv}vnys[K\\l}ukamqS`vysj]ZTVfdTFK_P<Ghryw]e{wfess|frs~isfxuzl|t}wow}~vzvinflWO\\gTn^awyzqnk[hab_Va^\\f_[]MJV\\fkUHbaIKaghiZYZTRWZHDis`iUOMB?GOZV[nfMV\\uhGBNleNemEjyiKA\\g`IJUD4T`R[f<>H>EXAABVLITLLbZK^hmo]VZ[^cfc_UXnnWaidX]ngirtqv|{yʪ|~yy~kt{zsxpskw^Oh\\ZSLIHD=00004333576239:AGEFKNST[b_QIHNOGL`gZQWRjokhtspjUU^fnktsgĲžǨûϾƿī{~|}s~|vhury|y~z}tq|lfkxj\\V{lRaqvyhQcusnghgbga]kqh_S^jmxwvterblsqciqmlnnmotajw|sip}{stsv{nnpixj\\]fbcTYTOPLQUgQCSIOPTSi]GLVlupiadY\\k_OGWe__aYejJEfaL=8K\\ia^^JLTZWKT\\\\^`baafospsusnqsfmy}tmqsrttmjosnekutttiY[ec`ZTWVWkk^ae`ftmyt{xlnqply{pnpqnlbdgpjggfdedegfe`ckggdcga[^lmbcopiga\\Y^b_ftsd]eb[[SXlrqttunx|~x{z~tuplgbgkc]\\Zkqejhn|vuvvt{xx~xvpw{zzwuwtx~}}yy~~zz~yuv}||~}|{uwwv~}uvruz}x{trvtrqrrsvsuwrt|}}zz}|kjfo{}snortywppoqu|pnoruqvrqtuuqwvwww~~|{~z{~uuzt~~}xnvz{wy{}yprwu|szpsi`inneempd[ZSSaffbUS]kt^UTT[\\`z}}xlddmi`YUVZ]b`[XSSSSPWjymanvaU]ZTT]chg^``djfgifdffggfeefdeni[]bhh[ab`klepslx{`^rmgotrs{xnhh_dyykijiinoknnebhqvsopppnliflwqmwvqpnlox|z~{sz~wt{}}yts~|{~~|vz{wtp~zrz|x|}|yç̽o|pyrkqp~ǿŧtslgh{gppXPiq}~wtvt[bxk[ZRXaVHGaWHIe~s{ldxy|w}{{g}psr|gu~l~~~p|z{osw~{yyyutflfzjSNZfSh`gwwznci_j\\\\[T\\YY]YWTDFRXmiIFaP?Qb_`^TWZURVK@Qh\\bfSE?@?OXQTqyZaZhoNFPgnSWp_Vxt^FLlbXGIP8JaVQm`8IK:DW??LU@JMIY_[ecbjdZTR]bgg`WUlnV\\eiYRfidrrlt~{~{y}rzsylzx|xws|Ym|w\\\\\\IONUG>:776695298777;>=<AILFL\\nteTNPTL`r_bjV{|uuyrWX\\ftmmxŽƟšü²z|{}pxq}{sjt{vyps~|ggxg^cxfYS{sL]onrfSeotqcce^d[Xhp^UR^fgyygml]jqn`hogfiihnmZiswjgs~~smroq|hmqhsobcglj_dZRVU[RkTHSKOKQRbVKTaljf\\_`VgkQLScb]`\\]k^AKh]H77N`f[\\[CKY]RHTZZ^_^[^flmnqqqoswgl|plrsswtlowwldlvuvxn]ajfhcUX]Zjl`ba_lsr{zu|wotypoyostuxqfkrzqhlnghihhgf^\\efc^ae^VT_i]boqmge_[Z`afurd]daW`WWlrrttsiru}}uwy|umkgmriceckqfkkq~wqryuutw|~~|vpx{zwxxrqst{~}}{~xv}{qszzz~}{xzxt~}utsszw{vpx~poyytvvz}qs}~kplvxqrtvz|vrsvu}uorqxowvuwvuuxyyyzy}}}}|x{~m}~uv|s}}{{{ztpv}x|~}zz~}vyvonuxfhrhfaZU\\ccaZV^n{hZZV^fc|{wkejoe^WUWY[]ZUSPOPMK\\uxecsrYWZWTU]fjc\\bacigecccefeeecdhfhpi^`bee_]]fkehpouxbScjcjssturmid^du{kdiklnqmimfbgqwqlpqnnkhffnxqkvrnpjfow{u{ypxuqvxv|ytsrszz{|xrx}{|x~wz|~}||êɺhmvmlsiƾúɮ˩~|ȕznlbg|ozvlcUjn|{w`cziWXTWYRF_d]Sk|z}ulvf|~|zjrvk{~{lzxwx{wnnxq|xv~vnrxjkfthQKWfQdbiwwzk\\eel[YZUUWURSXNB@LUpa@HYE?XZVVUUWYSPPACV[PgaF:@@CULBfmbccn_JVho]TjiYorcaOok_UIGFBZ^OblV>TL5LYA@UJ?IJT^`l`T\\iaXPZbchbXXfiNPlj^Q`h`oofryxxz|~{u}{npw{y~t{~prmoWHW`YOJD@=<===>A?>>==@>>CFGHSbqufYX`[nwY\\n|xwr[`ckxnh¶Ǹ®yx{|{|vxqx}t~~wrt~~qx|rx}{vzwhgut^btbW]v`YTx{zLZkkicSdjum^_eZ_UUglTPS]agzvbvg\\ilg[fndcccfigYjnoegu|vmkoipvinqdknacipicmeV[]cUl\\RSQQHUX[VRX\\bc_ZaaaiaTWen`^c^eiSGYiXC6>TdbVYTAP`\\MLWXX[\\YX]ehhqtoopuxgm{{klttvxtmt|wjbq{wvwoejpkokZ^f`lncd_cpqw{vv{~wszwnvvqwux~wkuzxhqujkqliikbX^ca\\^_XTOWe\\gpnndede`^dlwoddib[e^`ooqvqy}pbnnyxrvxqqjptnllgipiprr|ulozsopw}xsxzysxzropv~z|~upzyoovwv~w|~~}~py|vttsvvzxqxqk|yu{uu~q{o~xzvry}yuu{x~woqrzpvz{}|z{w~z{zw|~|{{~|}t~{{m{vu~{u|{|}}tzoqu{~{y||~{y}nizmoifbcb`f\\Xdu{sabXcuq{~y}w}kkqla[VVYYXXSPNONMILg|q\\fviTYYTTU_jh[Ybachhf_bbdggebaeiikpibbbcda\\^hgbiknseQXfddlqsvpffja]pxjagklomkigfadmvqgmvnimkhffmvpktpoohdjuulxypv}jm{~xvywrstv|~ywvyvtjo}w{{}||wz|~x¿djrwej}sļƵǲ|v}Ŏwx}~mg`zxju~hjXet{|yjazgaa\\X_Xgpsi}y}z`xyw}zzxmmqlzzu~wyns{~rvu~qumkpp|vxzufqppkepeMFThQ_bhwy|gVcjl[Y\\TMSOIQVLA;ERo[?JR@BZQKQVXWXSOKAEUOPjV:EC@IG=Qvs`\\_ch]\\llZVigakoemcspbdUHFCR]\\WncRNXF7]UDA\\EBKUWYj_NOde]PUfbgaVYciQLigcQZf_gmahrszwprsz|xq}zy}}~{zfs||zou|xepd\\TMIGFEDBB=?IOJJKOOMJGFEB@CPbhda]fiZS{}xr|pcdirznkʿ~µŰtz}xtqzyy{nx{{u~}vvuzvw~z~{rqysstsmtwfankY`{p^S\\u[]Yxn|OVgj^_U`fxiU[dW\\PUfdHNVZZjxt`wd`gg^Wfla`[bafbXlgjbhrtohikfqljsqchk`]krgbnoaaagajf\\SWXH]]\\ZXZ_cia^jjb^bcenibdddncSVgiXA;L[d^VWKFYaVISZUUXZXX\\ddfuvjlsvvekxxijqrtssoyugdv{wwyqkssqvn^gi_lnhf^hoo{xsuy~uvyupvuuvz}yr~~uluxqrupmlokZW`_[_YTXRXhat|osmgfpmchs{nhpnfcnhjxopzlzuvtn[glq~pt|z{zrvprtqrnigmmuwoqphqsjowzv|}zw|zslt~~|wz~~|z}tkr|yokqvv~{xzzruzxptupvyzsutow}{~y}qzxup{y||jkq~uy|}tyyzyv}|vt|}{o||x|y}{|~~u}|x}to}ts~~}~w{zxy{lzxtsopl`kc^jyymqi`~}~zywyyxkqtj[WUX[XTTQKKONLFQq|k\\hqaSZVTTV`jaTX_]che_]abedde_`fkknoifdbcca^bebdfhjaRO]fcekssldacbakuj^agillcehba`fsrej{vhholgghmsolsnonebisrdwxvuwjo~~xvwvstwxyzyvsvwp~kk~{~~xz~z{zyz|~~y{v»|}{`hnnhkǩûľv}v|wzѽyysoyhhi{smmu]c{z|{}pr|vfXfy~zzz`puqzwzvniqmy|~tqzs}x{oruxy|mus|ksmijr~uytyw}dpprkaleJARhR]~cfwy}`Pajh\\Z_THQLDPUL@9?RlWBFI>DWJBPWUVXRSKBIQFZjD<L=BB<Kjtf_U\\fecon`asm\\hnfpwuz\\ifWIIIY\\`dk]SWW;NeNCFbDFSVO^`TTYc]XU]cebST\\^YMff_PXdZ_k]`omopommsyxwwlư~|uxtcwu~yuqse]OVPFC>AEECCBCGMOPTRPQUZUNGIPSTP^cUNtupslfhtyns|}ɵv|w}wvon{umnvyyu~~{wv~{vxvxomx|~uvsrniptqomimud^heU`wkaQ]vTc]smxQSdf[\\VZdvdOUeXXMUf^BNVXRmvp^ubbdcYUfh\\\\Y_[g\\Vkeg_jkmkchiepxgjzqdjiaYkqfakrgdegjiieT[`PfcbaZaloogfql[Zmqmgchifjrg\\`on\\CIZbf]YZJN[`SJVYTSVYWY[dccswihtvtfkvwggklqqpkzqghz{wwzsqysv~sekdZjpoi^fms{sruy}wzzsuuvtvyzx~yspqyurwvtopvdT^c[a_X\\Y^oi{v{yjgyzjlv}vq}wikuqusozlmmx}xkiZ`jj~mrx|utsw|zrtuqlfkpz}lmqkvxms}x~{z}pn~x|xw{puwooxvpmmvx~vxu}trwynuxlzuywqvu{|x~xvpzvxkgl{~vvzs||~|~{w~ut~{t~{y|{j{zpx~wiw|v~qszx}xy~x~{vwjtqinzx}h|~}~yv~vu}vlstiWUTW^UPQQIIPLJJX}wc]klWRXVSTYdh[TZZZch`X]aada_`^`hjknnihfccdbbbeeedeaRJQaf`dmqka\\_^^ksf_dfdgh`^fe^]`iqg^ungmnlghilqmkqnmmc_dorpty{v{|mn{ywvutswyxxxtpuxpsnrs{y~{{{{xzz{}}}z~z~vx~{u~`ihikr˲÷t}vzryȶzx{quul`nzkxqo~yaeux}s}o`mu{}^k~vnwu}zurnurmvv{nsvo}z~~{~xvoz~qouszktpzgrkicszt}yorzyenpsk_cdFAUjT_vdeusy^N`fa\\]`TFNI@MSK?7<TfUFE@=IUD>SWORVZYA@KCDhY7AB;:BKamk`VYjrjqocevn[begrxu]bpmVMJTY`dhhWTUR=c\\MAOaCITNRWRX]ZXWW[a]aWPZ]YS^dWSV\\[UaaWeljmqglnvxqxrizƥwupwyrgz~t}rxu}z~}}qnVbVMC;@EGHIB>AMKORRPMKQ\\dfigafjgcSSp~txyrlmyzq}wyxеt~~{wnzvdty{zzrtltw{zs}}t}zyzp||xsr~kqp|yjimv}|nkzyohecfrnljecpd\\_bRbucaQYvNc_lnqQSb^]ZTR`pbROc`TNWbTEOVXLrug^qbbcaTVe`WZXXTdXXfe`]hdjbafcdmpam{kdjieZjneberhbgehjddV\\`^qhfh[dpwsnnpk[dttmcglmnnuoddux]LZeig\\_^QT_`RS]YUTXYX\\[db`qwmetzokmsuecffinjl|lejxxwxypv~qvufkbXimni\\hqu{qruu~{xtxrtstvzz~yspoxtrvvurr{u^_kbbiddeaot||jf{ppw}xmsuu~yqzpdrtwuie]]hinot|ws|v~x{pvzukjhszwulnqzvy~vq{x}{vyru~zxsyytpo}x~yxvxu~wvv}wyor{v|xwsw~~zxwswut{js}uzr}{~x~}y~wz}tu~|{}~}nizrw~znrs}rmx{|y{{~yvz}u|z|||z{}yu~vsv{krseSTTW\\OKOMHKPIELfnY_m^NSVPOU_hbXWZWZcdXT_a_`^\\[\\aikjmolkheeeddaddba]UKJUfd^fpl^WWZ^hqj^]egfhc]bc]^^cki_c}}kllgkiikmoljomijd_foqotz~y}{ks|zwvtssuvuwxrlt{rozqsnytzyyv}uy||{z{z}z{x{vwwxux{vuxpz~zljbeoyĿ|yq~yzu{t{pxvUpp|lxvrgzhcvv~}pyou}qq{|whg~xjr}u~xvurqtotx|j~r}w}xyrnxnzvz}{{zwv~yutnz|oknpyhsm|jqiidutnxujoxyaipuj_^]AE[lXclfenot]L^b][]bTAIE:HSKA59SbQFF:APT@EZQHKShR6@I<OgC7?@>9PTbd[Rayule\\^jb[bbenvuwf\\nzjSGF^VfgedLTYSQdRQC]WDPNKSIPXXPTVY]\\YUUSe^SSaSKO^XJWdXXifdfmemqyujynf}ĵ|rz|~k_~u~{iskuvwwy{i_d`I:=DNTVU[_eeab[ZZQEFINX`iwymdZ\\szmw{|ss}|lq}|Ƕ{ƚźѬq~uoj}keyuvyww~|nouxyuqyzm|}~v}zvkx}y}}rqjl~whihlziefjtyiajqpd^\\\\iijeZace\\W`Vet]]VTxPY_ehkNX`VX[PLYf^TKZfVLY^GGJVUNvzq`]ka`cZQXbXQXZOS`VY``X[aaf]_a]aihYtv`hhkl^ijge`mg`gbilc_Y[_ayijhcjnqompqj`msqhbmrsxurnin{qZ[kpog`fe[`i_Wcf^\\Y^Y\\_Yeafwuol{{jmnqtd^_`chbfzte_gttvyvq{wlu}tii[Wiqld]jvvyqtut}yu}pssswyw~}z|ocorottsssx{tmstimtoonkwz}qjz~wuu}v~xuuvqeqqqpkh]Zjmplpuryzv|~ux|kmpy{vynnv}y|z{~{z{{z}~~z~tryx~wrv{z{x~~us{z|xyzzu~yu{stxyz}{tx}z}|s{}uyx~{~yx|wy~~|wdzw||zzxyvpv|{w|{}~{}xwtx{{xytzzlqrbQRVXXLJMKIKMFBQsxaPahSMRQMOXbi\\WXYVZd_RW`\\]_\\ZXZahijmnlljgeeeeabca]TMHN^f^`mk]SQRZenla\\_dhgf`cdYY_]gjb_kyplkcdjlmmmmkimlfjgaionlt}{ykvy{xvsrrttruxon{~xwsxjozpzxyty}~xz~u}~zwtt~zu~sqorx}ws{}nzorwwoõð}}vu~otlryyxtm[irµ{}ue||ytr}vxq{}xu}|enrwzt||nvm~uem~cm|y{~}yvpgyxxwtvi{lp{|wvxyumxtt~}wk|ssxw{ozwru|xpo|wzgtox~~z|xxwuoy|qqui{{qmgq~{xgqiyo|ofjetpjsnfjqx_hpwj_]V=Lal]jfhbkmo]I[^XX\\bWAEA5CSMB15U`KGG>IWS<JXLCBQoE/BG>[Y98@B=H\\U]YUl~jSOZYXZilcplksk[e|y^N8P]\\jecXEUa\\^\\RTPbQKRGMJFOQVNPYY[VOVTYhVMVUFI[YMM_`Y`cb\\jejlwquv^m\\z}}|rztns]}tx|s~rnyuftvmrzv{{{f~lNIHFKZ`^ZYXZTXRPNMLGGGFC><DKNMUjxtcz}~mtekt{ũsq¯ĺѩo~~qop~gk{qt|vzzrnruxxqpv}vg~}twwrqyvzol|tuw|mkij{wffacvkfdefrh]afhda]UafggRX^g^XY\\ktYX][y[U^]ecH[\\LUYHFUZVTMMg\\JZ[CHGUQSxrlU\\ea^dQM\\]PNUYOP[VUX]SY]_aZ^[U_ga\\vjXhajp`gfgf\\ghbj`jkcZY^]bxfidiohikmtrgfpophjsrx~upoox|l`htvrhgmkionehohheab`e^^hakytrwyilmpwgZWX^c]ewj\\]gprtrqtthq|snnWVirgb_k|xyuutu|yv~osusyxyzv}mbrqovtsqt|wv|}wqy}wvts{{}to}~x}|}u}uskuropjlm`boq~wmrpl|}y~wqxxx|yxy{{}|~|}}z|vvx~uw|}{zt}}}z{~y{o~v~zvysu{stxs~zt~wu~|~}{fty~~}~wv}~z{}x{z|yq~wy}}}y{kqt^OTXZVKGNKJLJ@E^znUQe^OMOLNOYggWVXVTZdYO]_UW[YUUWbfegkmmljgeeedcff`YRMKYc\\Zgl^PLOV`ij`Z]aefb_abXV^[_lh^_kpkhdafilljjkkehmfjidjnmjty}wlyw|}xrttpnqyxmt{y{wkst|w~x~ywu|vy~ynnmhzw~~uuligqrxrl|tpfugjnlp~|zqryxzgpjmoxs{r}{uam|¸}ro^usu{{uoz|sx}w|vnwxtwo}lrpqnskqsmjzvry|y}vzw|~svz|m`rtyryx}lzqu}xsxzwm{|t||qt{itp|}p|yhzzpmn}tqnny}tbllw{s{urtwueq|mizcx||vubo{|vvjrfpuzrajeoqjpmbfnu]gnuh__T9Qekapdegikj[HZ\\UVX_ZCB=3ATQD.:Y\\FIK?P\\R9IQI=>Zj8-CA@]G49AAEX\\WVXkzrviP<USK`pvkpsajh[eseYC;a^ck[^MEWj]aUPW]^PWPKPBILP\\MO\\USWN^PcbNOSHKS\\OMXa\\Zc\\[Zifirzh{eXiWtusxswzwgw}sw{nwx{lvo{jxznmyjywq\\bdRG_mbZZVPJLPX]ejgcceda_XPMPZkneYszwegkt}wj¾é¶Ω{}wm|}trlt|xvy~}yx{iquutysqw}obrzjt~~wunmu{swqvotzpxmvkhwph{ydeW\\jqcig`edYZ^]^`]SXcchWN]g^_SVmzZMYgudY\\Y_[G^UCRTABOPLONEb`KYYMGIPOYxjcOX_a^eLJa\\MLUVSMVXOR]NVX^\\W]WQ_c_ds]Wi^bmbacgfZdhcm_gcaY]e[]oijajrfhgmztehoqnhoqoz|trrtzykgouvrlnqruuqmrsnrnjjjiaglfovpt~vlnorwm]RU]^\\hq]Z`ekoplmwuhlvnqs\\[ntgecrxzxvtx~yvqwxs{w{xu|qmyvv{yvx|{u|yx}zzy{{w|vn~xx}vvsqp{tpvkmtinuw~wxol|~y~z}x{|{}z}~|~~}}w|uw{yy~~z{|{}|{~zrq{u{mtrpuk{{|yq{{~~}~yjq}~z}|}}y{w}{qvx~jptXMX\\ZTHCMMLNH=NjvbOUgVNMLMOO[i_QUWQO]aQQ`ZQVZUPQXabbfjmmmjhfgeddlk\\[\\KKa`T_naPKLU^ckeVWaa`a`_`UO^a\\hm`Y^gpj``bejmhefhjabnffjfjmkiu|uvtkp|}}uz|qmsqhiqxriw|}rqzy|x~{xvv|{w~somhdvv|~{toiccvrsidylfdn`fyzidt~yxx~v|{vppspp`kgddu|m~t}|}rwȿ}Ǵwqlj^ohnzz{rqtv}yyzw|voyx~zgylrp~{wb~uyvoiv~zs}wzuvo|w||~qw|}~r}{{vxh]ls}qnoxszov|yqw~~u|yq}{crjwpk{qc|whhj{nsjl}k^chvwjt~pfktzw_j|naxz~cqz{wdn}wxrmwflyzv]iekujhpbcos^elqf^aX9Rhjbtdfgdmd]PXZSUSXZJB;/?YWD4L^XCMPCWeQ5EMH:AcZ01D:E[@6:>H[WSTSbo`msO7KcNb}vtkzfajU]prYQ9LkcfcRZHE]nV\\KK]\\WRaSUO<KKZ\\BQWLR[\\WXjVNOFGYXTQQX_XZ[ZW_el_zujTfgg}won{}o|v{eq{rww{{~xnunyvu|phuzpyztzyupddmmVLNIILN[flsuwx}~zl]TVci[Seyqoj_rjt|wvwҾ¼¢tprq}}~v{x~uznguzrq}tovzj`nwiv~}sosqut}r{y|wx}sk|nmkcdpj||ceNS\\vdfjf_^WSXZYWYUR]bdcQSc]aYRgxdEQllg_ZWZRH^O?PO=AKHEHNEYbMWW\\FKLM^u^VNWZa_`KGc]JHTTWLSYNP]ISV[YU\\UQ__`ijVWh\\\\ibYcfd[_dcj^c]`YbkW[kql^krfifo{qbhqujfnlnyutvuwxslnqstqnoqvyxrquvxvstnmjiomjqtns}{rnpqtytbSX`^bnfQYfgjlmkn|tklohryihqrojix}xzzvsz{wvq}|tzywu{{{|}}|{y}}zz{xvyyrr}xlyyvy~v~wswr{vqyruyt{z~|ymo~z}|}~~xz~t}{|sx~zr~}~zx|wxy|x|~yxsnvvwgmvnphqw{xqy}}|}}z|pt{~~|zw}|s||y|hnpSR_[WPEAKNNPE@XojYM[fOMLLLMRabRLUUKQb]NV\\SRZXMKOYa_`eimnljgdefcfrp[]`NR`YUfiUKMS]]cm`W]`_[\\acYOWc^iq`SZ^jrc^bddgieabfi^`ncbkffhfeuxmoleozyvpxuihpjaipojiw}~upx~z}zvuxzzx|wmo|{z{}~opmcjznmgfqgb^dWbtugex||w}vpzqrtornogi^hfa]svfvù|ɶrf~lh[scgx|~wmjxoqnmt{u{xgvqsz}ldyuw}ĩ}z~zm~~~wjpz~~~j~nssqvxzhtuxt~yw{x}|hcmstjrvops}zwzzn|slvzwaifrhixi`u_eqwmyfp{uc\\\\ftn{fpzkZdtrz_hzyqYnuf{pvxspnt~pshk{|{xZggjyl[mb^qr^egoh_a`?Rhj_wjfkck^c\\X]RWSQYTMC/Aa^I?^aZJOVR^lO2CLF<G`M/7DANYE<?@UaKRLYg_[t`BDcei~tmjpv]j[Og}YYH;[saeUTWDGjjQZAP`SQWg\\]I7QUaQ=TRG[[`OkeHRJAWWXTVXY[YYUZ[afgbyojSxf}|~}nsstvnmwhmy~ptzsrer}smq~m{~||}yor{usho|eNTXIIJMOMZcnw||}xi]^cb\\cpxdeUQ|~x{su{pͽmĽȳxhs{||tklqrsmswhbottyv|wwx}uxwseubjZUrnzdcQMTikifg`\\YTY[XVWVNS]ag\\O^]\\^QcmhJNfgf_WTVNJ]L@PL;?GEAAMGP]NUUdHIIPbnUOQRT^`XKGf]GGTVYNTWLM^JUTW\\WYRQ\\[bgaWYd^\\b_[fd]YZbcc\\^Y_X`iX[mrh^kohkgovlafruffmgqztyxruulinpoonlnrvyvqux|vvvpnjornotumnwunmpsvxshY]eblr[K_kjkklkn{~vqoljsxqrwtqop||{|{ztzwwzvwz}x{w}xvtssoquk~pyox|s~~v|y}vs{y}uqyz|z|}}~|vjs~~xwzxuw|~xq||umw}sj~tzzvwyx}||{~}{x~zwrxxwgl|vmeoz~}xwy~~{yzzz}~|}{y~z{}vhmlQ\\aYULBAHPMLBHcneSOc^NMKIINZcVPPRQHWdVSZTOSWSIKQZ][^chmmigecfhceuq[``SY][[e`POTX^_hgY\\`^^\\^e^QY`]dtdSTVcwh\\a`bdedb_`ef\\_ma_hfedcdsuiihbnyvoiw{iagi`_hgdejwz}w~{uz|{~}zyxr}|}}}|{yv{|wz|swwko|kjlo{mjd[[Wguxot|x~x}xx|}zuol}{vp~qltosjg`kfhZuy`oŲ|ŵzZuloa|_bv}wrgzsdufl}{lvur|s|ʰw{}lyx}zim|w}y}xfnlmnhmrt_uzy{{v|{||zkknuyjwykso}xw}ugxlf}qxgabdkbkr^bk]kyum{`vunb[Xergwglvh~T_vi}^gq~wsYct}nortvp}ptyowmmv~XdmmynUobYtr_g`kibckKQdd]}qeofh]g^`iSXYMS_\\M=Vf]WLlbaYPW^blK:FIGEJ[F4>DNPZRBDK_VIQK]`ZaiTQ_cjrn]`f{cbdOUrZYXHChq\\]K[O@Qt\\T_?YYKSZo^^F4__^MERNM_X\\XqS>TGN`TZWWXWVZVZY[_i_kqnf]h~{}zs{pi{s~skn`~z|{pey}yvlgvtuspflt{wnsqqty{ohrg^ft_fRV[][YX]bmw{vphlqld[KKT]l~lg\\DXr|VWy}{uv~muПrǴ{˫ȿet~~vptvx~ootwqjrsvzv}sz_yZiTQrnyf_^LOWmgfe^^_YX^[[]ZPPTX[`]Y][[SdgdZQ`b__VRQNNUMFRI:ABB@;IMJXMOPcNFFTefROVLN\\bTMJi]IIQYYSVWKNbLUSR`ZWOQZ\\`c]Y[``[\\`aqeWXY_ea^[X[U]eb]qj^^jjgjgnqf]`pscejfrxsvnrqgemojkilkowvsosyxwwsmkrqouyzomsqmkmorrondejhsoSQiqmilmjo|~xvunmvxxxxusqv~z}y~ut~twyttw~~}zxyyvvrtqqvjyquz}tyzsztvsq{{~vsuzyz{{|xmdwzvlqtsnozz|trzlnuxojrwvwx{vy{~}{{{|zz}||}~}~{~~z}}xt{{lq}wfjxw~|t~{{}||}~~~|zs~jli[b^XSJ@BKRMBASfnbLXgQMMJHHT^VPQTQJM`]PWYMLUULFKS\\[Y]bhomhdcegfbhxqaedVW_]_e^WXYZcnk]X^`^]\\fdRUc^^piSSSXrq]_`^beca_^adc[^mb^geecdcmpgeb`pyuldxq\\alaW`ic_cluyzlx~oxyvwv}ozw|||{|{svu}{w~vx}rtxvxqrodbiw{~|}{}~}p|xz}wzy{~~~{zwwvwl}{|uwokvsyzbfwjjc|hyǰ{}Xoin~_Zu}wvl~_hr|~t~yvƱw{qxr~|~|~|pnztsxqzhclemeepnc}y{}|ynos~~l}gvm~wxqb~qe]|nw^__dc\\liRq_cp}tmw_xzmlaWWfpesghyd~~RXwc]fizus[\\wtwmtrzrouwupwxmrW^uqyrYobWptehZfjdeoTO_`[vdrid\\g]owX__OWjeYZrb\\iaq`hhWU^klNHFAIQNSE:D@PLZX=FZ_NMOWW\\_^b^c_`r_WP[swXdYNcwQ_WJNsbYPN[EB^oOd]H_PMYbtYZC9gcWTQPKTcUZchDAWG\\Z]\\ZWWVSYT_X[]hdjojeon|}usu~b}y}y{kifv}Sewzzilvtsc`j{}skoopi|~p~zstxr||u{GDOW^[PFFNWdY[PHKPQNNJGO\\f[VH>yz^;@^zx{p||nuɸ|k}yyx||lozvo~w{s~_|r\\iSUmmv|j[cSJRhahe[\\i_P`]ZfaRQGJV[hZW_TTah^fW\\_X^VQONQJMMRH8BF<??@UISQNLcVHDXh^RPWMMWaVKPkZMJOYYYWWIVeNWRQ_^UMQX\\]^\\Y\\]a[S`dseSXX]e_`XWYSZcd_p`Y]bcghbjj`YYlobccctsrumqofcmnhedljmxurnq{|xyumkqqox}wmlmljkmonltpjoqsmZ[mtqhmmio}zwzumpyxxyxttsv~z{{xvn{{lty{|ssu}~|z~}~x}qypzvvw|swynutqno|~~truvzv}zwvwwqg`xszmgorpip{xt{z{{vxruqgpusjjpuswy|tz}~{yyzwx{~ysz}}s{~~}~~|w|zw}~|~|z|zt{pxsgzv~}swx{}~}~uq~z}}z{~yskmgha\\WRH?ISSJ:D^dkTMfcOKJHFLZ\\QNQSNJUcXPXTJMTQHFLT[XV\\agmjfcdddcajvpioaTP`^`f`W]^`kpaXX[^^^dfTQ^aZgjYRPPhsc]]\\^`cb`__`db[[hfZfcdcbbgkgb_`ovrf_x~fUcjUTac]\\cnpusiz~rvstzy}vtvuw{{|{y{{s}|vt{{{|~~w}zxxxzv{ux~|uv{|ny|{ywwxrrzy~yvx~t~zovup|onpu{buwguy|źigjyaXt}wys|e~n{zzr}{zxyyqztnslvi^zj`kadqps{|~{zyypsyn~|g{xk}tvn_{m_ZzvlsY\\bbe_fcMwbkq|qopavnivbNWfppqif{d~USww_\\fiuvr]Wwylyvupzpo}vtwln|Z]~txu\\nbVgtnhUcldfmVP^b]yesjd]i`}_icSerfhw^cwxq^lxcVVuoTRF9FYPDD@M;LJYQ.Ng[MLRWVb`\\ajiUdlWIKgve[]VVph[f^M_pUVNSTEGj`WpUV_LR`npVU;IifLVQMOXaT\\h[BKWKgWa\\ZXXXRYUbY[^injpih{qw|nyuuausmfis|{]Qq{t}snut{m_cr~{{}hjkloi}}p{~trtr~zv{rwC@SQLJD?AGJXmkVEHOYZTNLPZ[^[JWyR>8Omsqwxo~s{wż{w}{zgv{~}x||k}v[bU^jkzti__[IUf\\fdZWghLb_WedTSM>NSccQ`TRWk]g^\\^Z\\WQMMRFIRRK8AO=>H?VLRPONbZHCXgXUSPPKQ^[INnYQMNY[]WWGadQYRR[_ULQX]\\[YY_[a\\I`dphRVX\\h_`XYVRZac_jcYYZ]kf\\gc]RRejba[_rlntinmccjjg`bkhmysplo{zwytllonp{|oinlijknllrtrowwjegnzvgjlio{zw|vlpzywyzttts}zwxt{wkpxfixw|woxqp{|}~}{z~{z}yvwy|vx|zp}uloq{wsvu|xsyzvtrpmc_w{qqbbmqjes}xstoztsxv}qwtw}mhrrrkl~ruryzr{{~}~}yxzwy}yzqp{|wq||{{~{}~{~wyv|~~vw}{zzwyysy{}wy|v{~wxz~}svwzyx|qls~y}~}yx}~}zxvmkf_]ZVSJBS_REAMYdeLVj[KJIFFT\\QHOMMKNa_OSVKKSRJEFOUUQTZchgdabdcbacnvplp_SZd_bia]eghlhYWZ[]_ci]N\\e^aj^OMN]qiXY\\\\^^\\]_abbcaZ[fcVbaaabaafd\\]dnqj]]wrYVb[KXbYRZfnlnjfwvtzsmmyykosrtyxxu~ysyzwx{ttxx||~}~~vihqslktz}}||pqtvtqmnifuz~qx{|s}{osxvs~zmzuu}q}óypijYsy}xxx|}|uyz~fipptdsj[jggnx}}s{v~r~xix}}yjzqo}l]w~kVXymmlOZk_kd]dUnforwosjdpgt{]KUdu|unil[Qmue~]eqlvq`Pn{hz~~wmsmo{z|zykf~a\\twwbmcWautlO^qdgnZT`h`}etkjbbim|gaxqk|frsbsnWSzt]YI8B\\Q9@QZ<NLZD/WcQT^UV]g_\\bn_NhfNIbiiZTWZauvecseRmeNVQVMGPi[mlPbWJ[hrkTN@UgdGRTQUZ^VbcRNXUYdXbYWY]TUUZeW^dqxileopmz}txyjryou~hrmpakpy~{~qF\\tn}~|tu|q|adqttu}kedhlfw~stsllny{xy|{sl|nWXb_UMJKQPOYai^WZUVZYVcrtihikqcLIEZpvtvx~wwqyª}t|z|vd}}uvxwe\\\\k`dupe^dYHVeY^aWP\\nYdeTcf]WVCDL]hQX^RPj]^d_Y[]XTMKRD=PQR:@WR>SRNVTRRZ``JJZdTYWLSKL\\\\JIrZTONY][VUI_lW\\RT]^ULQW][WUZeZ`\\I`doiOVY^ma_[\\RR]`c\\`[UUU[iaWbcWKQch_ZR^lgkwkbki`dhedbejhpysmir{txyqlkkkp}srtnkmmmjkqsutuqiiknxukiiinxtr~wkv~{yy|urvsy}wtswsnmocesptpfo}nhtxxx{}~||y~}|}}}ox}|~}|tzxtzxvtrroabuts{iY^nqigxvytp{mjypmtqsy}vrxw{ylnvqsqrvwt|{pyzy}~~}xy|tywu{~}z{qr{rvst|y~}~xxy}{xx|{{{wrz}ztu{|zvssvvsvv{qvyz|z{~wuxuyy}~{u{kel{{wx|~{s~}}}tswwoh]Y]XTTNI`hRAMOXhXIbeQKKIDKYUDEOJEI]dQLWNCOZPC@GSVNMPXeh`\\[`ec``fotnpm\\Vagbcicbjfgj_Y[\\[]fldSVdd^ddQJMWkpbYZ\\]]][[]dfedaZZc_S^__`b`]b`V[hnldVbyfOY`LH^_OO^jkilflsqv|wkgls|thmnoqsvzmpwkttsstsstv~z}wwuyoc]goidluxyqr{smlnpmcb_^l}}{xoy|x}zqusxvp|pŷ|pwnyZm{wzlhxmwxvopbnpnxrrr~|w~}tkvxw{hvmfv{hYoviSTw{fmbL[oVl_bl\\fjkprrsehmk|oVSTfwxurlTe~ti|e\\zltrdMh{euzzmmgoyt{m_wdZvwzfneY]txtKWtejp]Yhgatfvuk]Wu~gqns}v}uotZRwtd`T<@[O3CchKVW\\;D^SGfmX\\]b^\\bhOOkcJdqX]OMU`gpscocQr[HUVTKKWegvbZ`OR`gjbSOF^e]GN\\\\X\\ZXeZPZYT^bb[VT[`PWQ^cUehq|hiay|uw{ulrp}fewsmvh||tcrbz|~p{cJc|pr~yr}i`xrlotr^bmhhj~xlofinquytojp|pkifkkc^[^bacdgnoqg\\X_dehlia[XbzlZW\\gzbjqtzzu||kzokt{½ŷy}r|xpdzwtrs|tjYbpY`pkf\\hbIXeVY^TLYafhkUVieZZKDIZhRTa[NfbSaeYVcYWTLPJ:HPYD=WkKKl[X_\\TjcbLYY_WZXOOLJX^RCq\\XQK\\`WRRR]p^aSS`_WLRV^WQQ\\iY_VL`bj_PZ[frd__]O\\d_cYXURNS^fZWa_NLU^d]TO`gcdhcYgg]dfbdfgiktwrjju|pyznlkgfpurwplpomilqrtrlmjjlntqmgfgktll}vkz}zy~wrxwyzuwsrrnl`boklkaiykeosstwy}y{uz|~~tvy~~xsuzsflxnwsa^fqolp}srootgivojppqxtpvy|tmt{x{vv}xy|}txpw{z}y{zz{{wn{nxxrz}|}{}pt}os{uyy{z{|{ws|{{ytsyz~w}vl{|~~trtv{ypnoqrrr~z{}~nxvxz}~~}{zw~y~|wxtyuz{y}{w}|uxhdhw{uwy}r|}}znnuyn^U\\`X[_TQjhGENP]fNOfZMJIJJSTIAILDEUdWHSTEFVTEABJRPKOT\\daYVX^ca_bknnmsi_^bedekgdjfdf__c_^_hn]U[ee^c\\LKUenhc^[^_^`aabgigea[[b]QY[^_bbZ]_T[ljg_SjyZIXXELcYHRcjhijfnnmuzr`cjlmknnnoov|igyufllmnopppu{|vy|{}~zxpq}{qkgc\\ahidhqttmev|fcejg]YWXdxvpy~~}~z~z|upwxcwykuw{~rr|qrsntrsmswu~mx~|xp}{|swgtnepteWfnfOUtsahXF[gPlYtnbsenmoquk_hnouide^vsx~]\\wvlzgT{pmvgNazbkzxnkbnyntsb}riZ~wwzine^YkyzMOtfls`fph`l|k|}dUXo}o~|t|zZRtnbd_@@VO6SnjX_dYE\\\\GKqnaZW_ZZa[ETl]U~_HVLQ\\ieknd|URpOEXYNJNZgqrgaPO[V]\\YSOIg^VJNahY]\\]aPR[VWX`eWQVa^NTV_aXgbo{iidw~gnuuzrupetugvyWcm_gmpxsuvxZ_plzx|{xrqXmwqgnraZsmkf|{krbcooxkcjq~nhqe]jgdh`]_]\\\\\\[[a`WS\\bc`YWZZZukYQLbiVZpwv}orz~|ljuplx}mvñ}zu~st{{{z~gm|~|{}o~rrin{pkXfsU^hie[chHYh]R\\NK`Vair`Mci^ZLKG\\dYSZdWagRYg^SjaVUTJPBHLXSEPxiGso[fkZnpbNbSWZVZVHMKS[VAm`^RG`cSOR]\\naj[L_`YPWTbVKP\\iZ]PK^^dUX`\\kqc_`[TehdbZZUMIX`^U[`WKORYaXLK`b[[bZUf`Zda^abflooqrlnqvwq|xklidbnpuzpnsrplnrrspgimmklmmndcdkqfhzvn{}zx}zty||~x|tuxomcdmijidjuidjotvtszysw|l|t|~z~}~v}zz{qx{n~jdoptrr|}|~spmmm`hpjhkpqwso}}}uv|~z}}rwwohxzx|zwttywuyy}vjxny|tyuy~svqqz{y|||yx}wqt|}wywouy~u||wi{||rvx~v~~~yznlmsrrpy}tv|zkuw{|~~}xw|wy~{~ww{yw{|yuw|ww~}zxu|w{vvebes~{rv~y|xytqsx|hZXdd`eaOXn[>JRT`[H]fNLMINPSG@FJDER`\\JKWJDPSD?CEIMMNSY^^XURW^a__dllirwhcacddfmkekigebcdabbik][\\dbafVMS^khgd[]___adeifihd`[[d]RUX^acbXV^V[phb`YllOISPDOdSDZhecihfnnlqui[bhkqflmkmrrsvkfprg`behjklmrxwur{{uy|}wwnfxt_h`VacgdclnmmZg}hU`hbXXZZcwyw|zz{y|z}ry{ast{~xu{wjzod{h||{t}{}|qskqwnip}ze[aidP]pwlabMA[`PkZfhginttqreYhssvzzuwvveXnwkunOuvj{pT\\yh_jol\\jy~mlwfvnp^wsvyklbbXftyUGjensatkf^atpz]O_txpry^aui[baEATXGdtc\\hlX]gTGUtqfTX]UX^NAUgYexG?YSSmj_eifwKXeJN[UCHM^krnfPEPRKXQVQHShQVMQeq^_Z]ZMRYX`PYeVLdh^OS^^dahbsxqolmvt{pm}m{jgoyn^pfyvnQiwx}yiho|ylt~po~qztsR[ntkmmgRpxonx{jpc[gyvyebkvybrm_`i`dl\\UY\\a`_][U^d_ZWRQTZafozywr`ROdq^TY{wh}wvz|tjjmnyu{{grrqxx||np{~p{y}{f~{y}w|wy}rp~tqo{gmwni[juX^^ja][eI]jpKURRgX]iuoQXi`\\GQFda_WThe[iWQ`_OljUSZL]KLPN][MnUswgftll|eSgRQZSXZKMMSRXDiceYE_fUOTh_japiI]cVO]Q_YLK[hZVNIW[^OZc]klc^_][koh``aWIO`_UU\\WPKGHW^RFI\\ZTVXTS_VY_]]`adkljlpmkkowqr}wjkgcanz}iymotsurqrstofgtpglhlk`acmpejzsn{~}yv}ysy~~x}wy|psnionnkipsgfhluwqjqtlr{x}g|syyyx}~{zv~y}{}~~{}thk~tw{x~|ww|~xvnnkakkdfepqqvxz||x~||sos}uhd|tt~{wxvnrt~}xuzwy~yqkuqyxvuwtvwnw{y}}ywzxvtt}yyuuytsz|yk||~s{~zx{z|z}nipzvsnw}~{rs~|qtw~z}~|~u~x~yxx{tv}vp~}||{zwvww|}vtyywuuxu|yyucbap}lr}}{titw|~~_]akhgfXMbqO>SPSdTLb]GNMHSVI=AGEAP_]NHONGLRIACBCGILQUY]XQQQX`_]bfggkzwfdcbbbckidjjhfdfeaddkl`]`e_`aVVbijcji^`_acddfkkkfcaZ]b`VUZ_bcaWU^V[rh]_]i_GGMLIPcRF_ha`fdejifmp]Wegq}igkkkjtunqpdmrf^^^behhjqurrpryytxz|{{vzvgrz`a^X``ceeimrqX]wgMYeaVS\\^dz|uxt}{y}~xxt|zzy}rgcs`}ryy{~|z|vsqzupsxukcb`]YcgmkbYFD]aSji~ceimmw{rn`[ksw}}x~r\\dqjmrKl|kw|]ZwmZnqnWev{sj}xjqmrcrsurii`fW`lxZEbbqrb~fe\\[nswWLaqmz}ruxotwp\\[^JLZc\\lt[ZnqcqcRK[wyaXZWOVWE>O`\\ja8AbURzeYagi|gGZUP\\TF;GMiqocI9FMELTKSMH_aNZKVhvc\\XZXRQV^fNRbQPhqbQQeZiqjcpu|ruwq|x}]}zbizgaczsg}~pySydfnq|zlcjtw}tppwyrw]]bjzmjgTcp{pxchkRXswopnfsmcicb[]ael\\VY[beosoXZ[ZTTOOSUTUaqlZX\\YVORZ`d`XWlvcvxqonlefwsov}srthehmtuwtgqot~v}}~vp~wwzyxs{~pu~~zhymtpnmcinje_nwXY[j__[dR`ntHKZYh^Xkuq^Wha^GYEihe[Shk\\l[KXaSigSTXNgTNXN^iQZftvndt|j~k[kZTXQUUTMMSKZNeeb^F[g[UZjdeaxyP[bZN_R[YMHVeZSKFSXZPW\\age]X\\\\_qse_dbYOZdWOXZTOE@FWZMBHZTNSRJLUTY\\[[[\\fogdimjfgmuoq}tekf^_mvz|l|{lptuwtqtvspgjwtijgmh[`gqpfo{njy}zuu}xr|}|x}xxyxtotuupmqslihkvzochnhlrr}vg~yov~rsy}usxzryvu{|~~}zy}{{u}~~~|wnsxzx{|yu|}|{qoonrgdlfmrnxzvv|~z~~xlnsx}qgkos}|urstw|muuzwzzxvsos|twz~{wutv~ns~~vw}wtwy}{s||zyzwrx{zv{yw{y{~||oms~{upv{}zttwtt}zy{|}s|y~yyuvpnxwl~~~~~~|yvutxxtrtvsssrr|xxki_rmy}w}{v~tcqz||Ycilhf_UWjmLEYTW^OTaPIOLMUM>?FE@IZ_QFLNGIOMFGD@CGKORVXWSRST[`\\Ycfbfq}odeg`^`ahgeigcdgfc`bflj`_ed]`bZamniclm_]^bgfcjqnleca\\]bbYV[adcbYU_Y]sh[_afWEDGLNTbTMbb\\_a_dgabmhRZii{qgkgfkfrwnppilohd[Y_cgjlqvqrrpv|}zyz~~xyw{|mr{ddccbbcegmnqx[\\udKTeeZPbhg{{zptr|qzz}}ıx}}}|s^da\\~uh||r~}zzx}||yvwtpcU[gh^ikaXIH_bXiv{enilryzjdmno{{{baenavS_{oph[wpYwttSat~zzkwyojmrgmuslbealUVfw^E\\^sqc`cXXisuQKbudqr}uz~z{wzb^XVd]cjkrSUwwovaVL^|\\]RSRWQB;JX[jQ5KePZybXaflqaMXM[XH:>HTxqkN1:HJCMK@KSTbYYUL\\lv_VYYXXTVafRT\\NVcycOVfYl{helqtr|}t~}ddravqe[u~pi{os\\le]oilvjnjmrttxmdrur[he\\lifVZuiu^ZsNOwpgsxemg]][`RW`ahZV^\\_YfpkUhKHJKJHQTRTdmfTXWLGHJTZc_]r|]w|xtnrdjpgaivhmwvtyvyhe^npjxlnkgp~w{kw~zx{voxx}qtzyvzxzwsips}tkwjynvddcbbb`qyUT]e]``j[`ooFQXVleMkskjifd^VaGstsSWmjjrTGYd^a_SVQSmXO\\V_iWLzjptngphxq`oa^]SSNUQLOJZY]iV]KQg_^`ejae}\\]a_MbY]SKIO^ZRIDOTTOSX`a_TT[X_tp^]fc^]`^OU]UQMB=CXXI>GYPKRKCJS\\YX]]]^cmc`gmiggjwpm{rbkf]]ksxwnxqkptwytoxyroglxumkili\\eovtjx{fi{{wss{tr{yzxt|utyzysrturpmnxzob`hfimnule}|ukvxlt|~}sss{yuxvwz|~y{y}vwtloy{}}{{}}yyyvwyw}ux|yuvz|~z{wrrx|pfrmjzpynr~{|ztuty~}wolorv{|tjtpo~xyxokrtxxszy|wxzwrqx{w|z{~v~qo{mqy||soytpwxw}}z{}}|{|ux{zv}xz~}}pux~wwyz}~zzvwytzyzzyq}z{}~xyt~tpjw|hz~~yzzxxwyywtuxuvvut{v|tp_xuzrxwwx{}sav~~Zlmjgd__grhJM\\XYVMXZIKKLTTA7CC?DRYRGFLLGIMKIF@@EJOPQXWOPTUX]_YYcb`kxxebgf^]_`eggga_aif\\Zagkgace`_dheinjfbmn^Z^dhedpvqjeda^_bb[W\\dfcb[W``drgZ^ecPDCDLTWaTQf_Z`^\\ee]aj`Q_ooyzhdjdclepuooopmljp_Xadiknrvstxuv~|{yz|vx~x~ww||jmmkihachqqmy_bzfQZimfYmrm}{||qsu}y~}z~psu~|{{~yz|zeZh[hymeuv~{~}|ry}p\\WfvjZmp][RH_b\\kvskviiv{ppry|z~lj]q]ocWxrlq`vs\\yuyPZsxzkyyshnrkjwqla`cnWKbs_ES[npd\\bTV`wqMGojdrn~qws{x|zw|kdWhwXbojmOW}xtsg[N`wZVL[_VKA<LR`hF>SdSgsc[`difeQYRZH>:DHfyoi>8HKJFK;;UaZXW_EObqpWS]YWYY[bfY[YNW`ybMaf_tygljh}tbqiuwxcm~_nxo^tztourhec]Ysphnismmt~qkjY{dnrXofSuohkVVz{fr^QnRNrkej{mhbV]UTP[X[f[V`__[o}nQjGPRRPNPPPRWWRJRSPW\\dsplkvY[ov}X[bdhxt\\bnn{fixvxzrrzxnpZmtjepvjcqkm{~}pmz~|tzxyxrlwx}xrtkr|wx}zsrnho{o}puqqvn|`gVY\\batyTTa[]_imabpcN]RSrgHkrjnuhi]hnZw}|Rcvw~tQNbcd\\YVWL\\m\\R_c_g[IsjkllinfpwcwgdfcVMRWGKNZ`ViQUSOgccacpbi~d`aeMb`]QEJKW[SGCMONMMTb\\TOS[WaxhX\\hfedc^X_]WSNF;BZTF>GYLFQF>GVfYV^^abhoecilkmlmvtpwsaikb[f~strppgjosvztpwvrpioyupnjlmdlvyulzzhq|vupqzssz|}yzwr~wx}~|wwwxxutqw}ugacefiorhcw|{ritxohrz{~tvqs~|wxxw{|x|zy~w}trthnvwywxzz{z}~vyxzr{qxvv{yuuz{~|~xz|xv|krxjzv{mpwwxmklr~unkgmvux}{}vjvqlwuwsidrx{{{~~vx~~su|~{x|{z}}ojumoruv~qls{towwvz}|}~|xx|xu}x{~~{rw{{z{~~|~}zw~x{q{t|y~~|zwpyyw|yzs{uohvkv~~{zyv~{yzz{|zvvyvy{ww{u{th~|snstwz{fcdljgeedgpucHQ\\WUPOWPHLHMZN;9@>>OYMDDHLKFHLNJ>;@FJNPQXVLOVXZ\\]Y[_bfszqedea]]^`dfgdZX`ibUWahhcbbb__gnklnhbcmm]Zafhdgsupkeda__``]Y^ggcb]YabfqfX]f^NGBBKSYbTRd\\Y_\\[eaZ`bWXelqqjdbabejjopnnpmelmhjkgilmorwuvywv{wxy{zvx|z~}xw|poqxog`^httkukk}n[jnppesyt}}ts{xrzxr}}~}t³t}}x}y{sz~z}uf_jwau}xfjz}z{{q}bchtyk^rrY_UKa_`ormrqjjxy}~z~r{]p`cmYoxhz|`rtcg{zPSpry}k~xupzpqnjwsja\\ej[E`n_GRXkne`_TT\\vtmINr_fno|qmvuztzwuzsf]wyTbnnfNavvqq^Qet]RUjfQF@GQXn^IFTc]hraZ^e\\dcNaUL?8?BOylp`9KKPHGH<Sl_QK_T;Z`saYY_YV[ZfbfXaXLVetdNhlcxuhumewffnut~|dvywkksqwqeb[Rct`gywmjktvff_vasrss`Koufo_Wq}~ho]SgXOhfge}ph^Y^WQPQTVe\\Ua``afu\\iOcTJNPONOLJHEAFMOQY`]Z\\f[F`fTZZd|pWqwjzynizt|qlo|ii]M_}|hqsibcrv{}p~~v}z|otxwo|wuhw{|{qwpm~lcizuzzwppmhoxo~|px~rsosl[hKT^]artRWcS]_mrgbrU[`M^y_Pkrolle[t|fx|gp~u]dl]bZSWXR^j_Vaf`dUJoklehimfj|fzrm`q_SM[CJMYaVaSI[Sbebecqfj~m`bkMYe^XAJOO[UHAHNKLEMcVISSZVcu]W[hgedeeea\\YRPL:?XSD;EYKEOF@E\\iWY_`cehokghkmmprsvutr`fmjaf|wuopmbflqu{sptpoqjnzursmmkkppxtozwpxzttmnxrt|yyyxuyto{}|y|{x}zyzz|us|phbfihpsmioz}plpsulpxz~tvrpz}zxyytz|w{yv}~w{wrunoxyf|y{ruyy{{vywu|o|zowwvzwrtyy{||xxxxyy~xs}vuv}plyrxjioq|ulj`gxyzytlzrlttvrbfs|~ww}~yz|~{x}z|||y~~~~mhu|mfnqo~qknxtpuzxx~|z~|||xx~|xv}yxvyy~vwl}{{~~|~~yv}y{tttzywx~yurtxu~~z|ty~vohwvu~}{t{u~}z|{|~{vwzvz~xz{{zqv~yonvxx}zfxxygfdeecdjtnXJQWUQORULKIIRYF8=?;DTSDBDHLJDGNPF8:BHJLMPWXPRZ][XTUY]bourkffa\\]^^`cfeb[[bh_SV`eb^aa][^glklmd_dmj]\\begdlwrrpdbbb`aa_]`hfbb]ZcbemdX]aYPIAAISZf\\U^ZZ\\YZ_ZWa`TYfmog`^[[`enolipopnnpqpsrnqrqpuwvuvuuvr{{{|{xwwy{~|ywysxz{{rminzzq~ws~mtttvly{}xwslz{s|{rzy{~w||~uï}}oy~s|{x}pkmpzr~{squ~}{{~|ywyvjqrw|ujsn\\kXJ`^bpqrvwrlv}~}{~ufqianchwgtemug_}SRnlysyyou|xwvwrqtjvugb[jadH\\g[IOVjkh~Z[XS_ion?Wf\\iaxw|mgzvrvqw}ss~ygerUhssZVq{xumw`\\rw`Xjq]J@KVWnm^FDRj_hm[]^_VdRWcKC97<HjpjvGBPNIJND]pdPCSgLL]]l[dd_XXd^icbYaYRZnmgSqrky}n~qvqnvtm|~fv~|s}vcccR\\wbwggfm~{^pe{ypiv}[Oinike[k{rnZbedYhVegukj[W_YSOMJLk_Sbb^dd{fgUdWFKLMMMMMLIFIKORUY]\\`p|dJOrn_qphvbypgurfj}l{jiv{`dPV\\y{{mnmbqz`{{v~|ut~xzzltyy{~{hzuxks{}ywwmref|qa\\j~uq~vvruojtxwypy{rjl{~Y_bH]bVbnpL]`M]cq{jfpRg`Nj}d^lrsn}a`v[yv}mo\\aWSYX\\Yf`]fbb^MPkgj`dgkhp_{|temgbL\\GFJSaSXVE^[\\kbmookn{u^diOYjdWLMUIYUH;CMJH>KaLKTPWOckRWVhggefjoc][QQS@BYVG8EUJDNICMci[Z_fiklmommqqqvvov{spadppggyzwpri_flqt{totkksnqyrsurnmqqptsq{wr}wotknxswvswvrquojv~xu{{|~}{z~ur}zpkflmiprnmqx|rptqqquxwuwwpt~{xxzvz|wzyv~xvyyxorvtwx~cx~trlsvxwuxsuyqzwrywvztmsxuw|~|ywwstz|z}|zzv~wk}|rvllpox{ujdcts}zwqsuquvxrgqxzxw{~}{{}|x|zy~~ztx}zymdlwj\\itnvhkwxqwzxw~|~|uzx{{~ww}wtvytxyort{rru|~~yzz|xz|~}~yw|{yzwxvz|xu~ywxuxu~~xy}~sp~}v||ov~~~wz|y|{y~~zz~x}u}mp{{{tt~z{gedfb`fnpbPRSTRPOQSPOGJUUC<<=CLOECCBHQHAJOH96AIIGGJR[ZTT[[VSPU\\_grnhgea\\Y\\^^`beb^ZZbf\\QV_a\\\\`_[Y]fmlmj`]eni]_cdedowqypcbdebbbacfifbb^^fdejb[_^ZWM@AJS\\icVZXXXWZYTZbZR\\ilg_ZVSW]ctldpwoqtqqrrwytwwqryxstsssu}r||{yvuvuwz{~|zvvs|zwurw|xz~|z~urj{znx~wy{xu~szw}u|}w{vz|v{pzx~y}tw{x|}xs{~}ww{}~}|}{x}vwx{|qlnetfT^^font}|xls}}yxv}{|{yz}tvvqemieulmhhve\\XRkcwgqvtr{yyuutqxkrwaf_nWfJZaXINWhgnxR[\\N[are:pv\\_j^p`nxouqmswprzgkjcoyuTevp|snufs}u^fyfMKF_`gwkV=P_jXceV_]UVZUgQG@7>A`pcs\\7XSGGYJRq]HFNgdV\\V^khnhZWagbgaY[]]_jqpk^yr|tsgdw|q{vfntandfth~Tg|tly|kSaggiim\\iyy{s\\wjqg_PkjlmhVXaZSOH>DpVKYaabdi~shV]YOYYXUUYZWPICBDEFHMU]ffXYqs`irr~~^Y`cZjxglft{n\\cYildh{{mhilkh}wu|}zpp}uy|z}~otyzyvu|{cz~xxmrynzskhh[fweXWm{wsvzxvpw{y|vpzxoen~wTc\\NjeU`opQgYM`i~}nrcTp\\Uzhjotvxzegywn~v~fl`TPXZ\\Td`ci^dVGVjciXefs~jzW}wokpkT]RFFJ[WPZD[g[khlqkqkw{ZfeQbleYUV^GWTA8CHIF?O[ELPPTKa\\KXThhfdbln_`\\MS^ML^XG;JTJDMPMZimfadnpssrqqsvtsz|puvmfgqurpx|ysriehknq|tmskirsrvqtrronupossu{vrrjrjqvu|rnxtnoskhu}vt{}z|~~|{~tt{xqlipsmtrlsuxyuxztqsvwv}xxznn}}vu|wuxvyyw|pu|{ymn~vvy~vgvttpmwsysxwrw|usxst{wwypjrvpry|~~zxxtrsvzwxzv{}x}m}~qxsrwquztjhmxywtys}yvwxyru||~xxwz~~}{{}~y{yyy{~xsvyvngfrhZgukz{lju{sw{y{{z~|t{yvy{}{vvz~trstqvqipox|mktt{{vywx~vxz|}}yxz{{z{|z|~~v|yz}zwt~z|vww}lx~y|~{}}|zz~pu~p}||dddd]akme]VYSQROOQSXMDRYM@==>HNGAABBPSEGRI:4=HLF@DP^aVPTZUPQU^behkhfb][Y[^__`bdb]W\\gdYSW^^\\[][YZ]eljji_\\fmhaabfcdqsr{oaaegbacdgkgecb^_hfehc``^Z[UFENT\\lhYXYWSUYURZ^UR`if_[YROU[etdg{xmswtstruxtvtoqwupronqt~ywy{zxpquuwyy~zxuttzuz~|xy~~wq{p{}vxwzy}vo|}~q|~~|sp{ts~{s|~}s|{~x~vt}vvxy~~~~}w||}|}~{ywu~uqujyva\\anoowzrs{|ywv|sr~wx}}x{yyut|s}xhkiaqrk|ldqc[{bVf[tz[jsus|{zswvmynow`ignUfQZ[XHMWdlutN_[EXdvTBlUdbdpqawrmtjipslq}qcreuq}tYlnnqokuzxfartRHUYjirnfHIch]N\\ZX[UKP]fYIL=8HVidleARbG<YX>g`BBPgja]VVfsnf\\Wai]]aZP\\eim|s|yyu{ur~|~v|uj|lnq\\nwrogxd_jmu\\iptuirwnXUpdiv^OW_YQOF:MzMBO]_aabp|tW]\\Yhm^RU]\\TJDDFHHHHILQUVZdpiWYirtDSSY^]gqm}dd~ti_cdoyhquezndnu|enn~|}~tn|{x|}{y{v~uuyru{n}y`z{}zynu~yttmee_Xhn\\SVp{~v~}v|~rnxpoln{t\\f[XpiZ_vk`sXSkmwzR^w`aguvs~qhl~yz}xsk{`TKXYSSi_ff^iQH\\mdaXgp}|s}^vyqyoiebRGRT_R^FWpehihqjxhrv|WabSpkgfWXcMQP>;CEHGDLOAIPUPM]OHWSgidbbll]_ZN[jXYdZQIRSJHV^[fnpvnjqwzytpqy|yv|wuzljmrx{~{vojllkkoxkrpiqyspqtopoptnoruy{ur{mjplwtx~mozoknqjht}vsz{vz~y}zqwxupmnsrpwrk|yuyy|tpsvtr~~yz~rnx}~tqyvqtvwwz}qqvv{nk|x{zzthustopyr{y{rtxvtvwsz{txwmjrsmouwz{xwwspnpzwsxrr~{}v{t{xx|rtzwopuz{|~xv|x~~ywx{yv{x}|uwvy||{|z{yvtvuv{|wssy}wpmhlj^gwmv|pnv}wx{zyx|}uvxvw||ywww{~vqopqvkflmuym|jt}rvsqwuv|ysw{|{{}{x|{|~y}|~}}~{y}wyu}p||~~}~~y~u~~}baa``hkg`\\\\YTSQNOTWXGI]WB??ACJIDCBAHUOGNN>4:CFD=AR`hZNR]YMKTabbfhggc\\VW[]``__adaYXgp`WV[\\[[\\\\WVZ[clgbc][gkba`bf^doopwi_chf``bfklddca_ahhffea^_\\[WIJSW\\ln\\VWTPSXSQZ\\UUae]YYVQRV^klaqsmtvsrttpqqrplpwsnpllwvtwxxywslpuuwyx{vtrosv||~}uxu}xxoz|qxz~rprwrq~zv|uyy|y~x~xvst}~uz{xuwys{|y}yz|{s~{rvzrm~e]itsu|}xor}~{spsvphwrx}xvutxly|rx{hki]mqmlvhg^_xl[dVsrQeoywtz{q~zjysoscjomYf^ZRZFLS^qxsM`O<XfqHIt\\QiXuygj|~{ompdjtoforafyre{sr`mpvvhgj~xthYitbIR\\anljbZQajdNGVUYPFDYjXEPD;CQ[dgl\\XbLAOdGFlU?Jcha^OM[koeYUdl^W\\\\TR_sxz{x}zzunwus~~~sW_itm]hhzxmyoY`hblxWPXWWSPGCcI@KY]`ab`rzd`X^grbKKE?>ACDGJJJJJIJHIOSSKLVZdswuj{TVyn[^aglotpddvfca^cjiyokr\\Zv|obhzsxx}~stw~zzvxxzxsqvxmyxtk|t_{uqynx|otfbfXUgeXSUq{~upmrispmywedXdridjzcxt^cvr~xGpyjmp~{n}nhl{uvuhzaSOYZQYhdg^itONfqc[]q~~}uv~x{yqnvlWi^k_gOVrrmcdpfvjop|YaeUwlioWSb\\TJ<?EHHGFFEDHRZPNYHHUUbij\\_mj]_[Rbs^`gba[[[UXdihnnqxmrywrr}}xzzxpnrnwzqipqkjnmrqir}rmrsmpnnpmos{|vsvxklmo~r{~krykhnojjt~rqxupx|s|~wqwttplqtttwppws|}urrtsoz~x~sqvz|spvwstuuy|}qnttxnlvxy{xjqutlotw{{quwttusr}xnvtjjonlorquvvvxrkkmvtsvpq}w~}y|~z}zy}vw{zvwxzzz{|~y{~}wvxztz~z}zw}{wxwyz|||{y}vupursuwurqvw}sxqllef|utypmwyxzxyuxzwqwsu}|xxvtx~unmvvmelpstnuks}tpkpsqsu}vqqr}~|yz||}}}}xw}xy|u}w~}~~~}`]]akmea_Y[VQUSMOY^REWcQ@AACIKIFHCDNRIFJD97?D?<BTaf`SSa_PHP[d_[flga[WUX\\`aa`^^ba_bmp]VZ[ZY\\aYSV[Xcla\\^[Zgh\\Z[beYdrmotc^eid]\\bhnibcb_`bfgffg`_`YZWPTVW^hmb[YSNTZTSYZVYb`VVZTPUY_jccwwilwusrtqijnmkkqtonrklytsyxvvsojmstvxwzurpmtrx~}s}{~x}rzy{z{y}~s{xqu~wtyyv}{}w}y~u~|~z{{~zvxnp}|yswuwrqwyuttwzx|}}wxustv|ov}zox~oujbryt{|vjjy|xpkptr_otxzyurnzip~qs}ikj\\hpqfxsbZa{n[`VsjPfksztszr~lquqlcdpm`ed_U]GFRemqsOaI:XgdBVhNTiaz_uummmfr{lakb^szikztpktwoibdqtojU^pmKNX[`fa`]_dffY=BTXOE:NgVGLI<CJO^jjc^ZGITbVE^kNFZfXXPLV^fbacbrgRcpc[_dw}ty|{qdUmnulZgu|dl_icpmjXXXSYYRGRryECHP`^_b[jvigV]dnfJB?<=@CB@@@@ABEIHGIIIJRW^hrz{XMhqW`opjioj`e|~vcgbV[devkjm[`suse\\njttxt|}pw|qyttsvsqoptl|zw~miymdy~nujwnx{tp_beUUe_[XXo~{qnmetqpzzi^`qrjjtwd}hs{xyxPzzpo~zony|ikpmkw~|sxknq\\UZ]eZ\\dhie{xSVjs^\\j{{{z}zyzsxtsvv\\_qxt`eidmkppy`fi[ulkt]R^f_HAEKLFFFDDPJT\\QKQEFTVafkU^pi]``Yivchpklgecbkonqusv{pt}yxy}spsq|tksxolpoopls}qlspmrnllmpv~zutxtjmjrpy{lvxkhpojnu}}notomtvpx|{uqsqqnnrsquwnoxv|urqqqnvzu{svrsxsptwsrpv|~~srrorllqw~yzlqupjou}|uvuruvunnzsjqoihllhlmmrsruwnghmqmqtlo{{sy||~}zx~zx}}~}{{{xyz~~vruwq|z~zyxt{~xxxyxvz{{yz{tvosqqsssrruuu~zqnmlyvvomvyxyy~{uyyyqwtv~wwxuy~{olzxpinusto~upv{vnjqppsrv}vrqszz|~~y|{}}wtz~}{~z{}{xv{z~{z|~y~~}^\\_hpk_^^WXUPXWRQ`bOLeaKEFEGKMLHHDKSNGHG=:@IF>GXa^ZWZa]NIOZ\\]\\]ehb[VVUY_ceeb[[bdcfnl[UZ[X]c`RP[]Xdk^WXU^jdWTW`bYfshmo_^eibZY`ime_ba^`ceeeef`_`[[ZV]\\X_gle]ZURVYXYZZY\\]YXWXUTX\\`cdkvoflssuvtqhhklklqqlopjnuprwvutplintqtuttsrnmw~}ynxz}t{|wx}~{}w~~z{w|wusv|tz|}~}wzwz|nzvyuyy~wtqs|{||pswmo|{xovrqpo}ux~tvnsztvwwsqmlkv~rmswq|rw|u~z~wwuixxs|xskdq|y~xlglxt`bz|v|vvtkxnk}so|kkk`gmsctzdV^x|}m]ZSqdRgjp{om||qxshptkaZilhdfd]^HCRfffqQbH=VbXElZJZkt{s`{sjppjy~iagZjtgpyq~ou~zbdcgoigXUrt[CUVX]Z\\aamh`[C9CYTD>C]ZBLMCDDIVomdXLIUdafWWj`TZdZZZX]_`cfisjue_zjhoo~xuzmadvtz}^k~qou^ognb^\\]UU`\\QOdz];@DBNa_d^bnnl_afkr\\GC>>?AAAA?>=>CFIOQSSSSW^fnt}kTWqfRmta^qmVhp|ufriTbidtgbi`dikne[tozpt}nw}ry|q{syqnzqppqkqn|wvyjgyxjkp|o|iishtyz|}g^^hZWa\\d^]murmeppryyl\\kwvlgquopyz{pzcw|lwu~pbmuxphpoepx|rkjr`fX\\^_rYYeikwq]anne\\x|xy~}}jjz}}ghbfgfts{foi`tpmtkXZjfTPMNOCJIHS^KU]RFRKJVYadoSarf_cibnwinrqwljjjuwwuzyy~wy~~x}yqsw~~sov|omrplpot~plumpwmlikoxzwxwohmiqyoxxnuvljutnsv{ylnpmlrtquwxtnmlllmppottgk{ww{yppomnns{yttvmkpsopvqpsxzwt|pkqljnx|{|ptwqkqyvx{rmuuqlmwnfmlhejngihhloqrtj`dklinpkmwxqs|}}}}z{~{~|~tls{s}{vywrxzuyx|ztx{yvxzuzntrrvvrrvvut{{tnnm{wtpmvz{zzw|yzvxwwvtyyz|}ok||smq{vvr|xtvzzqnusvxwuzywtwz{{|~yxzw~~z}}zrty{{|y}{{{yx}{txx}{vvz|z~_afkkb^]^TT[^][WZ``PVfWJJJLQNLMKHJPTLGHA;EJIEKX`_\\[]`VKHNY]\\Z\\_b_\\XTTV]begdXS\\ggcflgXW[Y\\kiZOP_^Wfj[VRTel]RTY`]Zmsfkf\\_fi`WW^eg`\\b`]adddeegb_^[\\ZYa^ZafleYWWVW\\]\\ZZ\\]YY\\WTW[\\\\aenjidchimxzojggiklmrpjpojprmqvutrnkhovorsrrrrlm~~yrowyzzv|~}z|uzvs~{~{~|xz~|ssq~p{~zs{z}ux}w}i{}y{trpqspy}pkjpyxxsmqtmpzzyzjtplmp|twytyhpyquwvsmeggvwivmvkouq~}uwxxwvwoxxr~tpkblx}v~xidi}vi^sr}sw{nstkv~umz~zlhlfigvckwkS\\uuzm]SQm`[gjnydkv}orbj}mZTalmghia]IBQha^nUaHAUbTKz}PKeuw_f~{yqgwsn~g`e`zqgtyjwq|yacjgddZTjziIJY]VWVY`tobVA>BOWI<AUULFJMECE[o{dWBGctjmnf_fZdlb\\lkob_dkrkxpvxysrz~}{yfuzxjzurbf}gWcc][jjZUZswM6;>A?Pcea_grokeminkQIA>??BBBA@ABEHRVSUWX[]]ceaeUGN[}|^XzsXTsnUmoztoyoVireta\\]^_bindas{psnmuxhouzw{|s}qtnhsonoshop}{|rvteervin}nxysxaipdoxv[^Zjc[[Zte^m}yvmempsyyvYk{zneotxvw{yzt{q}vnvk}oxkbiqvr_qxfuwpcjasekq_X^[_tUWhfyrffsqrns~~~}uvvmehjeur}jwkbvtptrd[mi_]]SSIRLMceQV^SERLM[[advYbsjgjrkrxsuswyqmpuzzxx|z}|o{zps{}yxotzymosplppsqkunrxmjfiqyzvzwoiljnspwunssmjyzruvywkmpmnqqquwtqljhhjknmjlqegvwyx~skpolln{y|woxrfhmskmwpnrzzv{mlnilrzy}tuxpnvy}zt{~pmxunkmqhcjjhdilegdcfjorrdZbjidekklpvplv~}{~}~|jqvz||vyxpuwszy|rw|utvzx|nvrv{xqsywv}~tw}xopn}wspnt~xx||zyxwpvxzxok{}tnqzxtzzwxz}vrxtz||swz|vx{}{}}yz{qxxuz}yz|}poswz{x||{yxy{zzswvy{zrsy~yz~~dgihc]\\\\WS]jgY[^_]\\W\\TQPPOTTKLONNNORLHG;DLHHP[]]\\\\\\cYNGHQX][Y\\`a^XTTX^bdecZV[iiddgicVZ]ZkvaTMUaYZjgYWR\\niXOSZ_Z^rogn_Zafi`UY`aa\\Z`a]_dcdddec^_][Z\\c`[bgkbUVXT\\k\\RY[_^Z]WSWX^]^gnjdc^_eejtvocbfhjlormjqnjpolpttsrkhhptlrrppqqln{uvrq{x}}{y~vwwwvznp|zzwpu{~n}xpz{y~|}wup}ztv|w~{{i~quriowgprlrupefqutppqoorvux}|vmumgnt|swwtygpzrsuuulcfiurakp~fbt{ttzxtxxsnvwyupuvr~qol_hx|u~xhcg}wiboz}rvyqmujw~vku~ynameq_udasiSYsm{xk\\LRf`gdkpu\\iuql^hpWU^hmumha\\LBRh^Wq]^HBU_VQjHOr~vcg{ywpg{sofbfknjtvjurxecqeaaXarmXEN^ZTTTXitfWEBKSUL@=EPMJDQZ@C[r~hSHHduomsheZkayqgoyxfYimrtjxy|}n}v~yfjwu|]sqcipYaeyiA;9@DAE\\fh_crooeojlqYNIB>@@A<<@CELY_[TWZ`eebVPYVKIQhyY`rXPrldrwzutz|[owit_\\W^_]jpdcnpgsfmt~ocjlmy{|{s~pplennmosgmj}wspusdeix~gsmrquvVk|nfmtmV]Vkh_WXl]m|~xumejntyy|[j~{nemrvzzxxwnvp|}ojk}yufddloq^tpw~hY^_ayshuyfUY`YfrVVgs~sjhkyrw{}w~vstipkvs{k{k`xupssi_nj]`meWPUPShhVV^TGTJP`_cg{dcvpknxquxwytyzuqsz~{x{~|~{i{{nt~|v~xmyunpspioor|olvptxnifipx~vyynnpiorpwtprqniztuwyxnjpqlpqpswurghleklmmlmmbgtvxr~mlmljipw{soxoadrmfsqnmty{xqfrmhkx}vwx|roxz|zt|}omxumkmpgciihdhkdhdafflql`W`jgbcfjlnsoiu~}|}lpwz~zwz}{quvp{x|qv|ttvzy{nvtt{yrr{xuy~tt|vnpmxqonry~xu~~zyw}mvw{s~pky~vor}zyvzzvsz~utzwy{}tw{~xw}}zy|z{nyqn|vw{stvy}|pnpvx{y|}|zyz{{zyxstuvxxxqqx}z{~gfec`\\ZZUZhe[U[daab^WTYXVYZOLQSUTRQRNHFHMOMR]`\\Y[[_XNMMQW[`][]`a[RQW^dgf^TR\\eld`eig`[ZWavpZRR]`U_mcUSSeocUMSZ^Zbplfg`[_efYQW\\\\]^]bb[^deecdfc]]]\\]_da\\fnk_VWX[djWU_^`c`\\ZZ]\\^`fjfb``^bggorkf_agiclqojigmjjllqqopnfeinnlqppnnplp~xqzsq}zz~xurqopstzsqv~upuv}m~snsvwz}|z~zn{~v{w|ur}yx}yz}{~ylymoget}ohoidoog]btvtmmwqnu{vw}wlwlcq}ttuvzit}sru{sj`imonfesy_^swtuutswyjfxsmosllxt|omm\\ewzt{vfdd{wkll}lu|tgtkv|thlzwn[rfxgjbXohSTpnspgZKT`egbism\\eovafcsVQZbb|sa\\]POTe\\RkgZGJYTXXeGVuysxefyywkm~rrigoy{nosplvrxilsaf[dggaJE`[MRRThp_OJKX^YH6:JJGMM^Z>B`p{jHTbnspjkc]\\_uspzzp[_wxvxw}zxu{zqxhi{ur}qy~aa`khQ9@=BQ8=Nerc`hfrc`jnsk]VPJC>?CCFJKMRTUZ\\YWaknfXQMHGWtkXjqg^apbio{{z|ir~vt[]_^^`qrehjkjpyvejormc``adpxr}||wnmjciknrqihf|ojmtscegw~fqvjmtnVlolrip}lU\\XincVUs`lz~~utoddlswy~_i~unkmnqyyrsp`mpxl[h{o]fadfphwt{cOT[ZgrjqpkZK_aYmnOUp~pggggy{y}}twv}swmxldtrpsoncjndgvra[aZ[ee_X_WJZLSighp~no{quu|yz~v{~{uu|x}|~wj|yju{u~yxrogs|pfoopwrpttsvqhfiqz~x|yqxrissnwuqrqohzyxvyzqksvosrqu{xuhjpihhoqmmk^hsuvm~efhjhjq{sumpvm^bqffpjjkrtx}hmsliq|v~|vqz||{v|}qpzvnkoqgciigchjdhcaebhrq_T_kic`^honpmkv||}pq{{yw|}suvp{x{pw}ttvyyznuvt}|tqwxsv|wruqkpmy|tonqx~yz~~xrssyu|okw}zrpz{zyzzwsw}zyzxv|w|{}y~}{v{wynvojwxstrmkxpw|yxzyrnoswyy{~~|{yzz{zywtuwxyywqqw}|{~fdb`^ZYYX_f`[Z^heeg\\VZ^]`c]NQVVYVRRQPIFRTTV\\]XXZ\\ZZTQSSX^cd^\\_a`WNR^dfe]SSZfifcdjlcYZUQgtbXXW`_WemaPR^mm`SKT[^\\emdbf^\\`edURUWY^`^aaZ^eeebcfb]]]\\\\bgdclmi`Y[\\^ehWXdefga\\^^__adigca__aeijje`]Y`jf`ltleffkjghkqnhlj``jmfjqnokkolrwwsqvqr{}||z}{~zuz|{~ujllkjjt~l{|}~}|ou{o}m~plktsw~~{{vs{t|{ms}ymy~|qn~|~x|sz|{|umyniehsynhmfboj_Zd|{vojzuow}|vwm}t`uvqrx{qxzoypj_orkonxfvw[bswvvxtswudf{wigmqfjyuz}nkmVbwwrwtdd`rwnqmz}lrxeoot{sheyupYqmvxe_RlhTNgjkhcVJS\\fgafwe^bn]xr`{r\\TVaUtwXT\\P]Uc[OimYCQaJ_fcF\\urstdfxuyvdsqvokwtqqokottxlut`jefaYSCT_TTSQ]eVNTS[bWD9=HMIRcpmSPgmslLXsgb^ae_[rwx~pdn}~{q}wvv~stxyor_~qwtm`YXWOC;FFI_>@ARrh\\Z]npYhopwh^]XQMIECCGHHIIEGRYZXUXXSLLQTg}}d]sxfajp`^jizzpr\\lg_bixohijiinymdfdcb`^\\X\\jtslyuuxz~mlg`bhnuokccwjblrs`ego{fmhjrhViciyikz{kSZWivgZSzfl|}qsqc_iruz|fg~toplekwzjnlXeprmSbylYe^\\^rts~u`JMVW^klnk^\\PQha]iaQ^{zq`ahcyw|~~~tunylllmpslnferqmx{kbeeddci`aZOaUXpnkvxuvxwz}y|x~y~~}zsq~rdzyv{uz|ki}~|mfoopsslmyrssigjsz|~~vu|mlypkvvqtsnm~}~wx}ultwsyusw~}yknxqmmswrsmcsustm}`cggijrtrrkrqj\\bqcijcijnt}rpiuumj{wzv~|z~}tu|ynkqqfbhfbcgggkacd^gqp]P]mjd]Xernljkw{}|ww~}zx~~vvvs|xzrzttvyzxnsxw{vpuyqq{{molgpmv}xomv{~{{qtz}vokuzztoxzz}z{yqu}zzzv{~{}{~}}{ryy~prrowrpqjgjoot{vrszwsnlpuxy{}~}|yzz|{zvuwxzzywqpu~}{edb^\\\\[Z]bda[]bkige\\[b`age]QX[]^WSSTUNJY\\[\\\\ZUXZ[[[YWSYcehg`]__^YU]jg`[UW_dhifcdlg\\UXSXpn[[[[da[hj\\PVdnh]RLZ^a`gj`ac]\\ad_PRVWZ_a``_[^defadg`^_][^ehejqid_Z]]^gh[`ljge_`da_cggeecaaacfgje^`XVhk^corh_`gkebfknfcid\\_ihbimnphimmtuuqqrqp}yyx{}{}}{x~tzz~{{}ysw}utwphnnmkkozq|xmuxlp}snhrlt|{|xz~{loovssvynl|ygs}xywp|x{x~ukunilrsvqgklinf_]g}tizzpyt}ypydv{np~~v~w|~sncvwityyiwu\\ktr{zwqsvo`lyncguk_jur{~v{mmhOfwqkqmbgcn|wtrzxnp|iiruwumc{wr^hwrgZRfjTJ`bbb\\THQVhm`gyab`lybe~iqpg\\Q_WevUP\\RfU`VMhqYGVaJix`Fcumrmajppxsaxyqy|ko~}lrsnipnwvo{vfso_USINaXWTPTTQUWSS`^QHHM[`^gqhV]cdc_N[xmmcYmukou~|rz~{~~}|u~vky}~ukjynqu~wyx{vpx}{{kRPKAEIEOUScQJGOqraW[hybdecjbOLNPTSLHDEDBFIHFILNFENRNKJKTjtkaixlZaonN[dhzx}fjxj_iuxflhfdcu{bdf^\\X_`ZSXbjjgpmi|zwnhe]\\howhkdbrg\\it|\\`gguflskrykZcZerjh{|n|nV]Vr~i_Zngy}|nqqf]dqrz|mn~qlqnbduvdikX]kl{mY^pjSb^V]wti|fKNNSV`rpp^OQVbla]aabjih\\djq}~}zx~|z}vqzoqjhqsehherwx{|tjjljf\\jhgeZg_dxxrxzyzu}yy~~{~x{y|x~~rv|hj{~wxkw|zzmcotrongkzstoeggpxy|r{}kwlhxyuwvosxu|wnvvt~{vz}ou{vtw}yvtnz~xutbfhjpqu~nnllrmj]dqhkdadgovuwwfnywnqz||~~z{~zoltsgbie]eiemnafb\\msn^O]nmjXSjtnkjoy~{}|~~~z}zwx}zy|~w}~{yxvt{wulx{jmnssjtvwv}sz|}s~omvswxpsxw~{zwps~yx{tv~~}{|}v}~tqwy{uutihmmntyuqrvrppoosyz}|}~|yy{~}vvxddb_\\]\\YZcjcX^gpkhfeda`cfc\\W_`e_XX\\WPIW_]a_ZYY\\``__\\YZegehg_Z\\_`aell\\V\\`djigjg_`cZRTZZgvhY^\\_gcaifYQ^klcZQS^_`agi`ac^^ab\\NPVX\\bb_]]]`feebdf^\\_ZX`jmemrhe]Y][_kgeptib``efbchkhda``bbbege_^_V_qe^jplb\\ajg\\^fjf^bf^Y`gc`glomhiilstsqqrqt}yvx~x~{|x|r{x}zzqqv|{suyoimtyyvt{k|umzwkzwskseu~~~ywuskpyomr|spwkpzsk||xzsn~zvws}zluuqvypvsisytpcahlxix{qy~t}xs}iypqy~}wtn{yhyk{x_txpvqssfbsuh^nx`Ygquxjurq`Tprhhjdgkdm}t{ztpq}xhuusxrh|zs`gyqnVX_g[HX`Y\\YSFRPgpcisddblsxeYvtnomgQZd[sUT\\VoVWMKgv[Ma]Yoy]Litjoyb`qhkuqbypozsisxppojjljzpprquj_VNMZ\\SVSPOMLQIGVdZMMZkofhm]NWbaXSSb}sde|rwxzvyy~~z|xy~~z~}~xtz~x}zo{bq~we`tmqq}zxvxy|}}|w|~lD[GIBJJP[Y`\\USSkvk``mywq[bf`TD:989;=AACB?CHJJHGDEKMJJMPT_fcbmpi\\eqbKQ^i~}yglkdquvclgcbf~v`cf\\XW_e\\TY]_aeinlxxui}ba\\elwelgdlcVjqb^gcolkofrnvse]Wipii{ugy[gUvdfdtkvy}~|jqnh\\^psv{oszmkmodbtyl_diZZdkvi_a`uiQ^^Vczk_ySAPJWW`~puXQRbjjhaflll~rcidox~y|qw~tu}|uwughqsc]kgivy|}pprql]ipmoinmsz|xy~}}u{|y~}}|w~||vuw{|{uyyiwyv~zv{{zqix}snndjystmehjovw{{szsfp{vwwyq}yry{suwv~}z|}tw|w}|w{y~}}rllim||t|ujkjqqilcfmqm`^\\hrv{wznbrzou~}~}sqzvjelialjbqm`ha]oum]P_pmjSWrsqlku}|}|z~~~}~||}zz~~}y{ytzyyxhv}yv}z}|zzy{potqv{nnvp}|}xop{tq}tn}z|~}}w}rs|oqw|wroprqrsrw|}~}}|^_^][\\YVZio_Ubonljjjha_ef_]^acg]ZZ\\ZSR_c`^\\[ZU[fgec^`glhejdYX`gfhlm]R^jghnliid][ZTSW^dpp`]b`cjgdfbWScok`[VY_^abgidba_^__YTUW[bea`^\\`cigfbbd][]ZYdpnehigi]WZXanmrztfbghgdciljgb``bddfffa_e]Xhjchnlg``gi_X^ee][`bXWbf_\\dmngfhgkrtsqppow}srvz~{}{|yuwx|ttw~}}zw~z~|zym{xmyuj~{vo{fv|~{wlmpxznf{|mtwrw}my{~zxpnzxwws~|py|ryzq}|qehtt{lw{q{}w}|stlyvry~xw~yjwo}jxnuotqckwk_asjUWbqyn_w|n^ftjgjcerm`l|xyvuuzjuwqyto}{_prssY[]ddNSaWWXQCVLbrgomheknjs}fZmvqklln^VfbpZT\\[wWSLJbz]Pk\\go|v`Xnpbmn\\`zyegpqevlpxwjcrtrkedmei|}fsl}fjgUKUSPPQLHGIG>DYg`U^lrhY\\eZMPY[WSVfywtwzzx{rn~v|t|{yv~vvx{{{v~xv}tuyns~wq{y]g||}u]Yookm|~t{qwv~syx~}zywxwphOfYYOJKQ]\\_]YVL[khgdi|ljojdYOFD;79@CCDEA?FMV^`\\WVVSV]cca`gpmifrr[NU\\nvxveknontelfebppccf\\XYci^WWVYaegnnvyq|eh`kowhlkei]Rkim\\iajpl~e`ujlqk^Vkxmsuupl}bv]pfmi}tst}yjokka\\mqsymqvjijke`sydZbm^W]iufafYghS^Y[job^uGARPZRgn\\\\Zgmggouqmmvfgnm}su|tkwyr{pzoeputb[qkdrvyxv{ztdity|vzzzy{~}xy{~x~}{xsyxzwszzw{|wxtr~w}y{}{zxuoodkwsvpjlmpw{}zv{u~zjyxww|y~wu{}tsz||{z{zvx}y|y~}~zzsjuvzplmmrljmhgjxi^\\Yirw}~{mdw|nw}vt}xojmlfojbngbg\\axwj[RcpofSfvrvonz~z{u~}}}}|}~||wy{{y~u~uv~}{}}zssuttysuwjwz~{mmzsj|xl~{}}~sx}ytuvvx{z[]YUVYUUdqhVXjnhfffgf`_fd\\_cchd\\[Z[[W_b_\\ZZZZX`ihffeflmglj^Z`hlghkdW_pmejolif_XXY[]`bjqh_ceeiojb`_\\^flkc^]^`^abdgcaa__^\\WXVV^hf`b^]egmkid`b^VV\\agmidcaifXXYYdor|wihhjicajnhfeccdfffgfdacd]_igfloke`djeZY_`]VW``V[gf[[enjbegglptsrpnpzwlpttxvz{~{y~||{||uvzyp{~}yvsytm~wwtuyyzxjpu{iktl~{x|wl~x}xqnmxyvw~tsx~spq~swvmvzv|wpmnuz~}t{||{{nuwvsoqqqlgmtg[co^PTbt|zbh~wkoqplhhirtlcj|y{yx{uns{qvnu|atrv|v`^``eVYdSTYO=\\Nctfqlmetp_ovdZlqlbhfkq\\dop\\OZeVOMI]zbUtamnmrbgpm^qd]b~yjggoiqnnsmcdr~ssh]dlbn~n^}{lyZpcMMWLKOL@:=<<I[\\TNYifVPTUNHHNUXY_gpszzxwv|{}~ywiexyzvuq|ukyzvwtxz{{wyu~rt}xymlpvr~wY_yyys]Vgqfj~yqynywyrx|}~ry~oxuci\\frfZLHQ^\\\\[ZVO\\[ckd`m{pckd`bdPMF>9=><<>>BHFBCJPPRUYZWVRMJKSTVbndTWbdw|zhnonlmqglhfdu{mdbf_W\\hl_YZRVdfcjlp{zyfphruzlmtigaSlc|Xhcink|wbfxjinoafmy|igs~ksjrstysl}wus|}kjekf`pqu}hluihhhh`qybT`vcUUctfalYZiW[Wbob_cm@GZYSMvmeh\\imbiwyxooohtvw~v|zy{~{ln|wrdyz~s{n|fiquubbwkds~tv{z}zrnw{{}w}{uwy|w~}z~usvu}wuox|vu{~~{xxqw|}w{}wpripzw|notw{}}vqv~qr~}vy{z}|vw}wyyzzrx}xxx~}wo}vtnsmlrjprnfizfb^]kn~{jmyu}~uy|wrrtooicmfbg]dvtiVTfmq^[uprypt{||xv|~sv|{|zxxyz|qv~|yz||{~w{{wwxwuyx|hpw}|lqw|ti{zp~~{||~[\\WSTTS[niUQ`mlcabcdc^_da^abfi^[[ZZ]\\baVV[^[T^mkihfikkdfqj[dmljgnofetxljnlkh`[X\\^cecbknhgkjjnpg^abbnljlhddd`^bcbdb_`c_[[]`YWdkdba^chktnkd_`_WV_gihdb^_i^TXW\\hszzkchheb`hqleeedfghhghhdhl__jihoonjbbii_X[^[WQUa]VajcX[fmf_efhlotsrqpt}{qhpuppmw}~~vx{}ry}prsoz|çyyprz~vywxxotu~wnxrp}~{nryw}~|ummp{yx}~{~y}{~}rsqkpzvruungvtr~v{~u|}z}y~y}rs|qtwswnlkmrbYeiVMWiswlar|ssumqfbrz~tokmz{z~mrqvsg{|itvxvyhakadWcjVSZQ>[Ripbqmpf|p[gnaZmrn`ba`tkbsr]IVjUKKJ]{k^zejtbncork_vw_bewqhanprnlpg[et{ssf]cfdu~x^]qklci[MQTGIIC87AFPZVJN`ndSPRMFCFJWeiknnmmsopv}y|||~}rdc|zpqlvservvxqvv~yutqsy}x|{ohzhvo{p]UrzzxdSjygizxyo|vrvvz~{qxpgi^pZf}ibUCP_ZWX[VVdR_jb[bt}zX^VLRbF<:=>??@A?;BGDDDDFC<>NKCENQICEIS^YJHWcn~vuv{}cmvpeeplkkjhfuukfbecZ]jpfZ\\STehaej~i}whrouzlotkmZoi|`fjpmj{zqounmsnewuyc[tth|~}vup~rju|mmuwlg`jfewqwjjvhfjdicqyaS[|hVN\\peau\\QiZVYioZ^gf:KcYGS|ofg\\lh_kuzvrs}{|pv~y~xrsxzxw|jgzyr`~zu~y|o~fqvy|ag|pjt|z~zpytz~uy{ysuw|v}{{|{~srro}zrup}s}tpyyw{{quz~y~xtyqx}sx}}pn}uouyxuzwu~y~}{~}vwyz{rz}}z{~xu~sorwhnphtwtek{ffjilryitv|~u~yvxupifjfgd^ivqgWXhkoZgyivzpvy~u{mrwy}or|z||xwsrzzmt}{zyw|xxw}}~|yxyyvzyiou{~kuvz}nz}v|}YUQRSQVfkUIXhkfa`aaa_]`a^_bdge^YXYZ]^_^XY]_UOhmjgggppggnrjanlklhrvgl|vmrqmja`^^`dgdcjlilpmkmoh^bhmqgfjkagha`_c`adbaca[[^gb[ajjbebcieoxnmf_`a_ekfefc_]ag\\SVWamv{mfjgccbepqgeedegihghifij_`mimwtohfbincY[]ZWUTZaZXdg[T\\hj`^efilosrspqu{xnfouommu~zy~tv|}{tsuvrkou~y~ynsxsywwzlotuxw|ot{~|~zl{ouxz}nmnty|}}|}sonkqurprvpgo~mywxxxww{r|~xwqsuxkvjrpachaLN`punchx{tukmd\\{}vrmq~{|z{isqypg~|osyyxvhjmn`XbjaTYVE[Rlgbqmpf}o]bg`\\mrnd\\^Tkybgs^DUi[IJK_togvfgvdmdprjd|hYeguuj[ksslto\\Qbwzytqgbdchw|mQhhgii`TOYQ@FG=:FW_YQOU_ih]USQJFHMZnyvpljiuurv}~x|z~tymdo{yrphss^q|~vuzquz}wxuqoszvzqu|rsmkgrux~iJp{iRidi|r{upwx{}pvr~r{sucam`tskgZGP`SYW[U[fWYbaYOXifRPYEJ]Z@8<@AABEECDJJFOUXWK=??<?DEGJLNPRLCCRevykjoo}ocsvj_eqhnholhttkebdb^_ipj[\\RQek`bi}hu}y{}vmqux|lo~mxlnrxolwyog|pwv}{nvpfy{s[iyr{}uur{gjlwfjqsdk^ifh|qvpgsgdmbkgpxbRTxiWIVlc^xfJsm\\OYhn[]h\\7OiSB]qufeZlf^kr~|xuz{l}}}}morywszik{~yr^~zy}~zyq~ht}xum|gf{~~rz}xm{~rvxv~qrt{uyux~z}tsqk|xjpq|vo|~rmwut{zrtz||yx}xz~|lp{qqtyytrkvzvy}x{}xuxzz}{|}}|sk{zdrkgwusfozfkyoizqoux{{s|wwklochkcaivod]_hli_qulzxquv}yrxfuxy{zop|{z{{x}tqnxvptx{zwuxsuwu}zw}|zxyzxz}pptymrvupw~|vy{RJJOOO[f]KM_id^[\\`a_YZ`\\\\_`dg_ZWVY[][Z[Z[][P^okgfghslbkvpimpjmpmrpht|tpniggeicbdefefmnovunmmnjfourl^cmjelfbade_`fdcca\\]dmc_hmhbljilhrxmnh`adfjjdccb^\\bc]XSZiqxtgjoe`dgkqjcffcehhggiijjcbjlpyvpjcegnm_Z]\\[VW\\_][_daWS^ie\\^cfklorpsrsswumgmronnu}t||~xy{tx~uqwzunvy{mrxxxvzpmnx}~wv}~x{v~|virtyzntqxx}y}{uokhnplpppugjquyswwry}nvywq|vyvpyrxmfkj[EVlsnefqyvplnjg|vu{wootxz}|wbtq{}lh{nrxxwxjptwiY`ggYZ\\IZZhaanlohzpaaa\\\\mrmd]YH\\{cZjfFU^{`EKNconkpgdkwmcmrho_Ummxzt{l`lsrlsgYQ_zvqrnmfgdnuwbNztcekeWSSZH>DB?GMQKKPW_ebXU[ZPKNXajnromknuxv{~z}~o{id|wysoiqw]px|tt|svv|}vxouvvwz~wzvh_x{|{HinRrmkytny}s||}jqkpl}pxyy_mer{jlh^S\\`NRS\\R[^WZY[ZUMWQKQTE>R`K:<ACCCDA?>BDDFIOXWNPQPNOOKEA?><;?IUgw|sopvqgcso_Yltnnfshhopjbbc`bcepp^]RPgpa`h|gk|{x}rs}x|qjtv|nmt~rvw}uwnu~yzrl{|jn|v}{p~tut||`ih{p\\am|oZkbech|rrrfmhanaigpu_SQpkWFRg^WtpFkzmYJZdkdgc\\EYiLCdo|Xblid\\mv{|}{ym|}~rrqyonzttt}|xf}~~{{}yrnzxssbk~{s|~swmx}nrrr{okq}uwqt{x{usqiyxflsxok{{nmsvyrt{zsqz~~zzz{ykwvnuy{{pjmzxns}~}}zsz|tqvzz}}rn{sjthktrsjptduml}}izr~wzx}w|xvrusfnjefk{tfghjojgyxu{uquyxrpsfurt{rpxixzz{{wzrllurortvusrunq{ms}v}{|}{~{yz}zzvruw|tlw}~xz|~txyJEHNOUb^KFS`b\\WVX__YS\\`WY\\\\abZTRSX]WUXXYZ[ZYghgffilpebovmfoliqpopko{yrnhegjoohcehkjkpru|vmnrrjnyrhfagqmmocabfg]`gfedb]`mnghpmfcnlmqkuylomffkmmh_cd`^^bb][Yantuoinoc_flqk^bjebfgedhjkkifhnmw|pljfhkmg_]]_]X]c_Y]cc]TS`ha\\^agmnnpprtvttrjgkoooovwszyoxz|}zzyzz~}y~~~}lu{{xu|skl~|x}wyvrgnsxtq~y}}~~~y}~wtojhkpgmskxnez|xxo{tnw|noyzrx{~}ww|ugrvg\\Scuqcgntvnhmosqot|qkopr}}n^vqtfi{ksrsw|swxwsa_\\oaZ^L[edZ_llmhxuh`ZY\\nrld\\W=Nsj]]pUOWpfFM^jhimjibcrdfplwaRxvnvv|lkqqmkq`VR\\|umrlreniqrmR[gcgk]SVWUDCEFFDDDDSXUUOHJ[cVQZcifi`eorttwx~~z|~z}k}hevyumilydp}}{vw~uusx~zzmtru|mjPgvRz|xq}|j{ws~{mkjhowvtrzlgxfzdrjgec_XPO`S[WW\\UXX_QKIJXRH?J[T@<CECAB=:>@CCC?AFJKKIJLPXXRSUMEBADEHPZ][[^bklg^a[gcXWuwkdesehnpiabbahe_mq`^SPgtb^c{ma}yxzxyjjuzwservwoeuwxvx|}y}xu{rszyzypymztwsq\\lwgxnY]isg}}Vggc]dwtlsefgcmggconYQQfmXDQcZQivMeoeXL]bafp[\\S[bKNjxm~Sgxj_Zs~~vtz|yy|hmz}t~q~t|yrs~xq{|cv|zuxi{xlr{yljko~xkfn|vtrors|vtphtvdgttjhwxljmpxzot|~uow|{t{{zxts~|sr}}ukoxsfjv}}twzurtxuqy}xsqwrvoirpoupmpe|kq|{ynwm~qvx~zz|xy{vnqmmlr|ynqmkqmt{xyxrpyzqkngtnov~ptqgryz{wvpfjsllopusqpollv|itvzyzy}z}z{||yvx~ylv|txx}yBCGMS^`O@HX[WUTSU[YQP]\\QUXX]\\UQPSYYQQXWTTZ]cfeebajok`gtrjemhmsnlpnv{tpmhioqtogdinonnsu|ulpuphrsgfffjsmonbbbff^ahkjfcahsmjqtlhgmosuoxzlqqllqroi_ile`ahf^afhoqsqjnphegloaWelcdjeagljhfdgkntyrkiikjnlca`_a]\\eg^Z_cb]SSaf]Y]ainllnpqtvsrphgkonkpy|rszwwzt}||~z{yuy||||||gq|z|}yx|vml}|z|yytqnhmu}tw|}}x|~zyqmljjkviftix{dr|msrswpfw~u}}x{y||y|mh~zdgfl{m`nrqohhpy{ckuvskjmlv{f\\uso`kzw~ewnkuzxtxigWmfZ^M\\m_T]hlgesujcZZ\\ppe_W]:Cimj^snQTffPPekbejmsZb|zgdimxoR|msxzqwtlinuaPV^vtpqflhuponbKp{`ghgZXZ]RGFFMJ>CKTVMGDBHT\\ZRXfgeajcm}~xuuy~uxuiyliw~}{ywmlixnq}|usp~~}wvxnv~oyv{_gZsw}wk{uxxu|}wfojmw}tnpv{|ktynngrlto_hmSSo^TRZ\\TQVj_HKNVVSNKY`O@EHD@DD@@@EQSQQLEJJEBACIQX`e`WNHEGJJJHFBAEGECDNK^a]d}hamtfiurg_bbchaVem`]TRcse^`xq]{tssxoxxhemuwqamrqp]j|uz{vwvwv|yuv}vq~|}rxloxrwq}j`srhto\\Yen`wzWglfZ_qxlwrdfhjjkd_jfWQVekYCR\\WN_uYabYYV_eXcsQXZY^S^omhwmXtwrP[}zx{}iq~||{}q|yswvrwg{wws|sduyiksukafn{sc_m{vuphgizzwtpfqwabvrggttjfgnwvkstou{v|{lw}vz{u~|zwsqytdfwwt{wqvsosxto{xyurtuzlpxpmxtilghqxyyrojzjsy}|y}|~}yz}pp{wk~ypsmlss|{w}wlq|rkliv}igq~pq}kfpuy|yvoj`hpgiklqnmmljltxgtp{|~yt|yz~~|{|z{{wv|ywv{zŽ<@GQZ^TB?NXUQSSSTTRPTWPOSXZZSNMNQVRNQWUQQZbfedc^blrc^ktleelhqtlmppuysqomnsvslikqtonrtxtnstknvmeikkpvmmgcdegc`iimkhdhvwkitsmkllqyvr}{loqonnssj_hmhbdkh`eoporvqlrupjhmk\\Zjkcijacklebbaimowqgjhmqnplfdccdeglf]_ddeaSTefYW\\bikjkopmprnqoihmroho{ulqtx{{pt}}|vquzz{w|~w~coy|}z{}|~zy~~xooz~}{~uosmhq|w~zty|}|u}qfiqmfxn_tqrnnmsutu|yht}{zox{zz~z}mrxeuqvjnqnoheitxalmhkjjpqs|{`^{qsrZjqquvgfcp~xv{jk^gi[[O\\o]P\\esa_imhe[\\\\rm]XU`C@fpujnzdZ^ab\\hgZ_hrwaar{ldbmr{awwqvvxynelzeJ]ipnwradp{vjfYUt\\mec__]]THFHIIHIKPH<<BHOUWWRSjkgq{lytu|wy~vysixsix|zy{zsmgq{pyzqtl{{ruwqx}|uj}}oprpy}tyooiqyzxuvfgnmq{|rjuqyqqzt}]ufv|k_{gQ_mcQP^\\JJNmlEKNRZYUOX`[QMIEEEBEE@BRA@@::EFDGIHDAFPW[\\XVQLJJGGJH@;<?CCEOahkzxhh}ukuqfbefcc]Wbia\\WW^nf]^rp\\vojjvlp{k^jmro`jnk{sXewtvztsvqoqsou~{~~rv|tzylfttuqw}de{klqqaWgn]qwZepmY]jvtrl_imommbdi`UQ[dhZDWWTO[rd\\YRS\\bbSdtPYYUcSlsacv`[{zvT]}zos~t~wy{wrrmvvt{n]o|ueiosp\\^lx|p`\\jwtwpdz`fxyuuqcnv]]xreeqrgacjutjtzlou}uq{wex}}{|v||}t|{u|xjfpwnpvpqtnswpnzwwxvwxxpy|tozsgkmgqt|trjjvjrz|z{|}u~|~y|}qx}s|qpkkruwxuimtljlz|hfm}rlufdmow~vuhd_flihijqijljhlvnfpqx~z{~xqvz{|}}~~}~}}}vy|z};?IUZTE=AQVQNQRRRQPQTNGLSVWTMHILPQMMQTPPS\\fdcdb]erq`_mofbehjuphlnpvxstsqtz{umorttppsu{|tqvwpvzmiommu{rjbcehjdenoojiinzvgkxrmmmlr{vszkpqqopvwmbloheimjfknnpu|umw|shgmg\\akkhihccig__cejpsqihjjrrnolmgeefnspb^fedh`QVgeWW]dhhiknmjlnkopkjmrplrunjpo}}pmyt~{~xumrpxwwqv{r~|z{jq~{~yxv~}vwyqs{|{~~wtpvigs}~wr~~|zt{ycdttdtybn{qzq~mxtsvvyqtyyju~}zxyy~~pv{rv}}uzopqfdl|{eficcdjqvuz~^awkrzUhlkpqd~camvu{lmifn\\XQ_n]Radx`[ajfdZ]]mjVSUaMAeqyumqxeaa_nseRSdmrxenxvecmnuxqt}txvuvcf|fA]sni}x_dswyfaWf~o]pedkcY\\TBCJHF?CRI:<ACEKPV[UVvztn~quzyy~{}vo{xny{yz~}{nhj~nuu|~pugw|qvsm{q{wlhvhtz~fy}akzqvsq]ihpn}|iqrrqirzseboh}widZX_e`UZe\\EHSrnOLMRZYWV\\]]]VPIKHINIBSZLVF9=DDEJHCDDEFFFDBB@?FOPPRRH<;?ADAGS`ctyidmuyoggmja^]]_c`^][Wfh[]om]pobcpnfyw\\ghoh[blixx[`ptszxqnsmliliry{w{~uw|upysz}kg{rtpx]h~dpqsdWjp\\jq_eruZ`emyugXjuulkefieXT`eh]E[XRU_miVUSN[hbQcvXb\\YcXys_ck_cyrkh}zxxyu~vtvs|yu|k_mvqaehns^Zguxl^Yfrpwnc~x\\`t{vxo^mtZYusgejle`biq|sjtsfqtxnoz}s`yx{yww|ytr{~vzx}qppmiguuoomssihzuz~~~}|}{xz~vr|rjsu~jqtruhqtpt}xu|u|~ut}yyqnmnqz|n|vjhyzont~ztfg~wij`blmuzs}ti`\\ehegliojkmlgrsigltz{~|v|~~wrsy~yy{x|~~yz~½½AEOUTG;=FQQKKMOPQPNMOGFKPRQMIGGJMLJLPPNRX_ebba_]itd^dkg_ddckujflmptwtuus{|unqsqsqqsx}xusx}uyzmotmo|ypfbehlkgksrokhkq|vgnvoknmmsxsuyjpqssqxypgopjippklnooot~|vz}vgfld`glmkjkheca^^dilrsjfklouolmoqihgjuwkdffdgjaU[jfYY`fihikkigjmknokjmrrsumjlqr~vnq~tvy}z~}txkngzuptmo}zlw|r|~t{|{yyywyqs{lq}~vv||y|rvqsiis|}}~~y}trw~{zyxe]p{nmri{}w}{rvwoy|xzwuw{xhuzy}{yvv}tqv~qq|tih{~dbe_hlmt|yxz]fobr|pTaggml]xccoquxrnngz]WT`kbSgexb]^kg_O\\^jgXP[cXEcpzxmjyrlfNivkWK\\ek~vkn{hbjjnpqp~ywqokaui?Yrkgx\\essvfd^pthapikyfY]TBGJIC=JRBDC?BHMSYadjyuznt}{|z{v|u{|wy~|nghmvpuynvewywuyqmqz}ucnzt}mnzwav`huqrnsq^cfmhxcvhqegkvOmcr|qkxuQf^\\\\\\ckZGOXpcaRIV^XW]a^\\[XQMTGMTKHheZ_GEKC;?A<9AGFGGECCKPLKLLHFGF>=>@HEEXhdtoaev}uxkhlnfab`^^`_W\\eU^i\\[kh[enb[fn_q^ddl`VXheuz^]iorvqljnigbdent|swzsst}|qv}rgg~kxpxdg{_uwtmcsq`ejcfrw_dhgwviWgvzlmhifg`Ydil`HZYW_hljUSWP]f_Ugu`a```]s[c]`pszxwz~}~z|ys}{yw{x{z~leqrlbf`fscYequhXWdohr~hcysZ^s~yxj\\mrYWrshbge`^ahmvrkqpcqtrkpw{g^|tqrpr{{nnszy|~x~z}zwzmgemxrlknqjhzuz~zy|~z|yxpsy{{ox{xzpxywv~z}uyvr~tu}z|{rnrtswwq}zoku}zrsx}id{~kebdnmrvsyqha^cdcfkimjjlnlspjgkv{{yx{~~z}sv|}{~~zz~}~}ǿ¾ÿ¿»GNUVM?7=KRMHIKMNPPPLFBDKOOMIFFFJKHHLOMLU]abab`]`mqX[jk_]fd_luhelmnsxxvuy~zuoqqlsrrvz}}wvt{y{woxynpyigijkpjkqyslmnot|ugoulhnonrsowxkqqvwuzzpoqnlpsonoooppu}{~xgeibejkpoikoia^_cinrsmegnpusljkptnlknxrilkffjld[bng]_dihfiiigeinlnohhmruxpeilrvzuoqxzvw~u}|}~tz|uyikespjvrkkxumwxonp|vxzxvmxer}uqq}{vy~woxrmjkt|yx|xy{vy}utu}y|z{q\\fyyqz|lz{vwtyk|x}}n{uutiuxw}|zst{}wmvl|vnrx`^ds{wvz|~u\\ib\\ryaS^d_iiWvbep~iuuurpf]V[cgeSjluc]\\hfXP[]ed_O_g_RbrzwkjqqopOYnq`NU^ctlizr`dggkrm~wjjv~semhCVlfgzs^mqkmfgdpjcdpkti[ZOMRKFB@PMGJHLTPQYdlpuwzqu{}|}{{}~{~tz{|~{mhekukmwkscv~lyr{{nmrwu~t[sr~unzzq{ftdflqlg|_a_ielmfn`f\\fiyiWqcwlqj\\qZ[WaglYO[Yh\\mSC\\cX\\a_XXYZSOSGSUGLzpYXP_XEDEEFDDGGHIDBDEIKHIKEGGHJB??JIKgjeqg]fxuvnhhmf^cfc_]]]RZj^_j]\\gaZ\\fcU]l[eg`bd[QP]csya[fkntoddie`_[amk{xvzvrpusuqki~mzryui~czyxynywhdfggrycficwxjZgxknkkcfi]gmpbKWX[jhmkXPZXde\\Zku_cc`bllYeX^pw~zz|z}{{{rxvyy~{~~mltnibhZ\\ufX_krdUSamcoyddvpYZq{vg^jo[Sowjad`\\Z`iiqpfl|k_stm}}hrt{{`d{{sijloywgftrux{|{|~{~tgjnxueelrrr~s{x|xrz~}~z~}||w{y}|}||uvqstuzxxluvuvstun}s{zuwr`yrgdiomprsvngb_aabfjjljikortnkgkw{|{vy{r~}}~||||sx~yy||Ż¾ýĿĻJSUTH;8?KQLHHILOOMMHB@EKMMKGDEFHHGGKNKLX_`_``\\Y_ml\\^li[^gc^mthgkmnpyzuv{wrnrqosqqv{||vwtz~}wowvlxvhgjippku{xpnnpqw|lessgjommrqnxtkqqvwu|zpsyonrroppoppos|{~tdegfjjlqminme_]ahlrusidlpuyskjinurnnprpljjmkigcdmle`cijfdjihgegkkolejpsvobckkmwwonowxuw|}}u}{}{p|~{w|w|yhgdometqknuqrsuwiq|ryyyqq_tx{om}ysu{uk}~xqiiktzw|o}yryysu{utu~}{yz|bcuzwnwsv}tyszj{vxzkstywqmsuv}|{tsx}xm}{{uyvxr_lz~~z|{v{|kZi]YrvWT\\_YheVmbfqxevquvng]WagefUdpqd^[ccVU\\\\aabPZl`[bqxwjikmoogUesjTSWZh~piw{dbdchqkwiil|zwmleLWjdfvobhoggfhfjbcfonxk^TK^\\QIB@LKIRU_aUWcgxxxwvvw{|{x}}~vv{|y{|lhdktidpzlkbw|~irrvnmstr{sT|zp}t|x~pr{nwmrfhepjeY_]e_prdgb]XVam}XchkmoyvhvoeTRhlkY][``loOF]^W[eXTXYWSOQKRUF]l]]Ub_^eNMTPOMJIIECDB8;FE@B@AD=?=>GKJkgcg^\\gwqvtfdin]^dfc`\\^WX\\aaci^]c]X[acPYiY\\v\\b_YPMTaqwaZfiirn^``bd]]`sko}|wupp|yvtzptrrx|t~rw}}uv}pnfigtyeglduwl^jvloklfd{cimpeNUU^ngmo]W]\\ec\\^ltdmyae}kboU^fzyyy~w}}}st}z{zyp{{}}~npumgchWUsjVZereRL\\n_mu`fumYZq}te`hm\\Qiwl`b\\\\Y`ihon`h{i]stjukqt|x]gzvrcchlxub`yxvnr{v|zwwyxqyvjmtytdcmpwwsu}}~{lw~|~}}}||}||tuq{tv}yxtmtwuspv~{r}uyyvxyax~jjoqnprtumhd`a`bfhjljikqwsmjejx~~x|~wp~|{zz}z}|~zty}vy}~|øþĿļƿMOPN?9=CIKJHGGLPLFB@CDIMLKIDABDGGFFILLNV[^^^]ZYbje]eja[bf`assehklnqxwuy~|yvmnurosrsxzzzuvw~{sowwr~kekkktvqx{uppprswvhiungnnkopnpz}omopuvv{yrxulrvqnppopons|zy|m`fhjlimnjlrj```foqvtlehrswxnhjoxxonnppkkorrlgfhlphdafjieekihgdkmglkfnssrh_fpnlqrooprrrsv|{}|~t|||~|u}|y{u}xrs}|xxyfcdii^lrkn|so|lq}kxznz{{g}_uyt|oit{{wroyuix{ypdfjsv{uxiypjwwmp}ywuv{xyx~mhqx|mqtw}t{uyxixtm|ykl}sv~unnqtw}zwq|t{{p~}}}ywz}igwxx{z|~zxys|ZWgXZopTVZVWk_Ygbfrofuhvyhlz\\[mleg[cpkf`\\]`\\b_Ya_i\\Yhfaajvwifonkjocbmg\\UUZWutnp{mbaabll{vmjfsvuvqcQ^c`drpfipfhdje`Zfikq||naWXg_XTG?NKOaink]clm|ww{|}|~|}w|}u{z}zvuy}txz}jhd~kpg^kuecbw}~y{~fmorplssrvmTmrul~xwrj{ps}|qfgejjfY[_[_pci`\\[PV_quVj_sqlpxnlkpLQicb^kZYcqgLQ^\\WebJOQX]RPOMWQKpaVY]njkhPWWSYUHIIFECB=?CFJE><<:=9@BR]l`[VS^hrruujdikhY_fic`eWSYZ`hlg_c`YV\\baPPdZUvcb^TNHNYou_Ygkeqp^[Y^dc[b}tg|}uru~yx}ktz{zw}ys}zlkjwxfpshuwmdsuqojjmc~pmloiUTPeqfmkdlf`dc]glss|bjtmjvk`hw{yzz}|}tuwv}xpn~}z}yyo{z~~|||pvvldfkUQsqWP_m`OJ\\m`pr^kvk\\]rpcaemZNeyp_^X[W^ielkXcze]uqe}oknv}t`ivsvaaekut_^}orkott{}||mn}|{t}vs{~zsrvyxohjqyt|r}~~}{pv|{||}{|}}~}}|uvvxvywyrs}{yooy{|zxuvdumqttstuwuojf``_cjkmnljmx|smiek{~|~~yv}|yyyy{|~||{v|~}x}~~}¶¿üĿü¼JJKI:6AJHFGIFELRI;;>BHMLJIF@=?BEEEEGJNPRX\\\\[ZWZehabhf[\\fd\\cwraglijqxux~|ywsjnxsotssyywxtvy}xonxyt~}ifmlowyvx{tpqrsuwohnohjqklsmmq||noootuvyyvypjtwpnpqppporz}vxzi_fijkilliquiacelssvnhfmvrtshfmtzuonnpnkotvskhlnpqhdbiliegkjieepkakkfqwtqfaktportrnoplmruwvx{||zu}~zz}}{wyx~~vz|rt{n}wok}|nx}zuyd_cdaYhokhqohrvxl|}~`|bu}yxtwodhutwuohvteqxzo_bjsr~{}xttduidsodjz|ww~uw}yvwt}vkptyrlt}zxx|t{~wt~whtqbxz{ifzqr}tlnprxyznwpz~v}~yu{zoosqsvv}qztszwQXcV[kjQXXQVm\\^ecft|vehpcxwejv[\\urfc_hshfb\\[`did``gkgcjleefqqgbqp`flkbhg`Y\\aPetrntrb]_VblpvqnlknnyxhR^[YhrpnipicbmeYXmies{xpe`hgehbJETOZptxoblrq~x}{|x}{}ysy|z|rwp}yvrw|ptwzgfexn|ieWcq`^cszywxz}d|hmnrktsq}zpcXg}x~kp}k}uvj}yqrtx}g^mcigx|\\W\\[bi\\kZZZJRfryg]f_vaosqjnnt?TfXastXWmpYMY`ZWhSHNKYdRPKS^NYtXTVbukndWecWSMFA@AABDEC?DMJFKLHDCBA_fdXQPUbinrtlihnf][dijcafTRS^hnpe_kbYWXb^SO^\\Ukp`^QJFISkq]Xilcpq_XUWfi_g}n~wo{~y|dt{}xy|{swnmywi{ymtvphxt|xxiixdzztlnnbRKjwgnam}mfcbejlr~cn~mpl~csxyyzzlytvmt}|xn}poj}x}~~{{yn}{~zwryxk\\joRQsvYL[g]LG]lbssepum__vmbbcmXKdxq^\\U[V]ibjiU_uc`vod}{lnkx{pfhsszu]`fjrs[bukkhmquwxzsduxzsq|ynwzx{uqv{yrpoptw~wy~{}zvwyz{y}~yz~y~}|xv|wttz~~m}nm}~{wut|kqwwxxxxy{tqsja_^enprpnko|~rlihp~|}}||xvvvx{~}}z}|xz}|z˿½¾¾ǿÿ½Ż¼GKMB57FMFACEFHPOB9;?DIHEHIC<:=@CCBBEJPPOU[[ZWUZfgegg\\W`e^Zgxm_hlghqxu{{yuqioztorttzxuwtv{~ytloyyt}{hiolpw{zz{topsuywijphhnpgltkkq{zoollqsuwxxyjjzzllqsrpppqvvquvh_fijjinmjvzicgiovurjnlpwnppffpxxposqnlkrwtqljooqriglunfgjklkhiri_ijgrxtngfqwqsyxtomnjirvqx}{|{sxxs{|z|x}}|~zwvv}|{xzuqtsszuzjxyoktexyhp~|ryd[eb[Winmhs}nz|~|nv]{zmzx|t{ztqfkqmvrgdvwfgr|o[Zdrnw~}y|tqm`t|gang_hxytv|xuyy|wstrx|kksuvklxtstvrz~}qvvhrs\\s|whbuppzskmoqyy|mtky~{zz}yw}xupnklvy{u}zxwwsqpohMY_TZf`LXTLUi]ccadtuibgg]|rcbv^`yvabdgsjeh`_hjkifdphjkljed]beb]hr[`dkdck_\\dcRZntuonfY_UTdhwtrohdfu|sUVXPlsnqlpqa\\kcTWqg_nxqldcmekuiOS`Te|z{rhtwr~|}ux|zy}}vqx}x|uv}sti{|~{zlrykouxdffsqx`cT^jZ]cqxrqsvwexcqnsfqqrsl`agz{twvexzu~zju}trmy|rqm{mViahfo{dXSada[iVYZDOjlj]a]gq]rrflnvo_7V\\OntRbqcQX^g[R[GQNS_dTRN^gQdgX_^gsimc^omZTLC=:<>AABDDGLJHKMLJIEMf[WHGT\\ajpqkcggeYY^fjhfg_URQjl|hecnic_Va\\TP[_Vh{y_ZLHDDKeo[Sgmbmo`YXVfpjkwwzz~~o~{~{vtdw~|wy~tuszi~quwrgxuz~jhnwz{qvrlYTrwkkbymgjeninxwbuwqonym~{u}u~qdtpkktvyvll|hln~|{|ywy~{}{y{nyz}~y~rqyzn]llQZwpWOW^ZLFaoevwmssrb^zmddemVLcws\\[W]Y]h_dcT]macshb{vjmkz{qlinuhW`kmrsWi}gihflpsstsfjy{xnsupotopvppvxussosw|}~}y~~~}{}}ytvxxx|{v|||vvvz}z|}zttw~}|}nvv|zwuqu|rq~{{}~~}yzzmea`mvuusqnxytpnkx}|}~{wwvw}}~||}~~~ʾÿľ»¹ƼHKF849EIC>DHIOQE55;CJHCDIH>8;>@BBAADJOLKU[YWTU]cfggaWY^`\\]mvfdgffiswv|}ywsoiq|umqtv{wtvrv{}zwpinxxt{xhjomqw{}{{torswzsimogjplentjkr{zqnjjopqsw|zhl~zklstrpmllmnovtd^fkkhhnnoxwhdilszxpkolpqinpeet{thlvrljkrwsqnjqstqhk{}mdjlkmmchvg_kmjswsmggu{qt|xwtmljirvl}yzxsrz{~{s}wtxu~{~vy}||}}xx{|yy~tym}~wjvrvjfjbvwfg}{pydWfdYXkpvi{|zxrn}^t{~zx}xwptuerresqc`w|jco|o\\Ybn{luzyztwrof_txe^h^[hyunruqwwutrompowz|hgtswqfpnjkszn|{snogp~uZl~wi^qnlxqiknqxy}nqgy|vwv{{z{yrolajzztpwtkonnjd\\LXXRYa[NUQLVg^bbbcmi_`_][{k_\\r]b{u^abcsghrbcqpophoggmnlfbYWVZ\\]p`X^if\\j_^hiXYhqwukfVWZOZ`x|tsqh`_n|v^NWJbqononweWkbOTqi^kvkib\\kelraNcl\\oy{voxyuzytx|zw}{}~yrs|xw}rxqqxupczpzyz|gqxdgst^dgluoX_TZeZ`aowjmop{ojp\\rnqfjot{lldozmuuoqlfzwxhly}fkw}wrpqnusQcdnbh{r\\QYiY\\gQXYEOroaY`Xio`mhelmnqN;ZXU~pOneQUccl\\TSM[U]fb_aShlTk`\\ehjqjk`gyoOHJDABGG=@DDAGMICGJD>DRZ]ON@MZ^bnpi`]if[S[dghdhaTTV_lndi_opocWb\\XMY^UbuudUIG@?JcmVQakchhdYb`gpplq|x}{vs}}y|zxp~kkzyt}uz||i~ruwrjyuxonysxyuuaf|vnyhxmntlzho~{un{{oot{vo{{v~lniot|cksz}tgbqzikx}xywzvvs|~x{wzmxz~y~{yooxwn_jo[avnWNSVWILemnw{owzukbz}kcfik\\S`upZ]`g\\_g[\\[Q[g\\dpfaxsklm{{qnmjucRcsnwqZpr_jfcjooojg_xq|wlrspvpiprlnqruwrosxzy~z{zty|xszzvyztouxwy{xw}xxttru{~{|}}~u}}vtvwy~xyxzu|w|zyxvorzxu}tkhiuyy{yvq{tqss~~|xvy~ƻÿļûȾȾEB:7:<AD>?LMJPK919AKLCCIJC75=@AABBBGKKFIVZWOPYbefgcZW\\]\\]bppdgjedmtuyzuuqnis}tlqvx{vrrouyxwvngmvwsyvhjnnrv{|yrotuzxqkpnimrietshjr|xqnijmllou|vgp~wkotvsnjhhijkwq]]gklhgkmqwqedjow{tpsnfkkgnpfguynbnvmiilrwtpljuxumhsykiommrmbmwe`lmjsupmiiw{oszxzyolnltts|r{yqos{z{~uv{~yyp~tt{y|y{x{{z{{}}{~lxyxhpntcecbtti\\|oweUhfV^ozk|}}~wvjy\\q|}|}xnlrufumdvthc{ohqzm\\\\`h{vinwwrwtvpi^bvreZ`WZjztjnonwqmnmjilgnvwdbtqtvchidap|fsx}vjhgm{v[g|tfWmlgtncalqv|x{nog{tqrqvzx|{upohct~ulnxv{ebejle[TMTOPY_ZPQSMWd[bbieb_]]YX[xfZ^iWeykWXZdk[mzbhysurj~kkiloih^TLQ][gaSXci]agcar`Vbkq|rf]M[TVYhqpomdUbzvePQI[lnhlmxlXffTUljajrfd]VefnmYQnv`ixx{yqttrrus{}yv}x}{vntxw{syltmqstg\\|gqswgqwa^opWbgjuiT[UX\\\\b_qugjklw{jteXuoqj}forreonxwuppepdpvsve_nXgq|x|~qrll|uO]hy^fx}gXNkYafUXYHXshZWWXclcf^mhholRLdUh~xgTmYLaiikbVP[]\\eihtv^qp[sadmtnwxqchwsWQYQIW`QAGNI@FRHCXUD?IabSKHDV]_jqj]V_m_X[cndacbQSUcihpygexzsaZk_cT[YW\\rplUHHA<OefQO\\geebi]ijhnnjl~r|zs|y|wv}z{v|mh|{~kp||ur}|~w{xn{ptytqzrztos{|{{jrywooxyrip~}v|onyjj~wvxvpirhts^lr|n[_vynn|}vruuuzwkx|x|}vxjwz}||~vlmvxobjkajvnXPSRUINenu{r~tpj|zkcjnj_Vatm[ahoaciVVXNW_Xeoedtlmln~|smojv|^Pl{p{qhwkcldakmjjebezk}tmtuxsglrkhnppvulinxoxsmvxo{swqgnrru|zzxnjrvswvsz}zuurt{nr}w~xxyyyr}zsrrx{~ywrvyx~|zyzwppx|{{urw}|vuwyyx~~÷žǿŹʿA=;=?@DDBGOHEK@17GIIB@JQF837?@@AAABEFEDLVVOHM]fgfe`XVZ[[]frkcghcclptz}vtuqljt}rkpxy|tqolsywsrjdkuwsvsjklmqu{{vqosx{vnoplioree{sekt~vpmfgihiouwpfs|qiptsolkihhgkum[^hjjgfgiqvlccjqyzstzncghgmofhuxkerrgdfltvpoppzyqhjtknsoosngs{fbmnnonnkhisulqtxvppnqyrx}orzskmsyy}u|}rx|pmp~tttv~xzy{~x~|r{yihio]g_`ss}mVxp~vgZlgRdsk}x{{{ftXo~|~z}~qjopthymaywnh}ujszj[\\]dxtdewujtvsmfZfslcU[U[m|qfljjvjdijfdgbhoo`^pmrv^bgcXlglzxyujaimvs]fwpxiSikbqk^[lst{wwxnki~llonv{syy{polgn}{ohnzsyk\\\\_gh_TQLNOPT]WQOWQ]b]fblh]\\d^U]_q^Z\\\\UktbPTUa]Uow`k}sutplpllppseZSU[]XXNP[g`^km[lhV^fowwieQRWXUYztgljnURpueYPGScgffkuq\\aeVVei`enecYP`fkfQSrxbfwxzxolmolpu}yyu{z|wkvt{zwymvjmkvowcV|ehmtdp}v^XjnT]ekr^RUYUZ`c_wrbgejpqh_Z|}nqp|bkljetwr}km[h`zoxwmwjfSNiq{~|xwyjkuxNYh~]ZwsaQd`lkYc^O]m^T]R[^ce[_tabui^`kV}pq_ckY\\jotiq[T\\^bhptf|xiw~gpyvzoowvg_h_[dhSHU_XS[cTWncSU]hfUPHR\\[fqkbSUgkVbjnz`\\`\\S\\`mdgwbvo`arbre_VX[nijYKKH;Rk`JL[gfdaiejmemtee|luyqxywno|yr}vucb||smr}vmlz{x}ttupt{tuzr|uqv}}p}~wu}v~ukwwxzknwqbk|q}iy{lsdpj\\ixymW`ytq{{un~tpvz{ydv|{}}vxmwy}}uilrwsggckzxkZZ[NMJYhpzz~ywph|yicnoh`Yfth]huvfihUTUKU[Tfqejsgqorvjmmy{YVu|z~xwtqlofbmjiea_n~no~qnxwymkunhlrqtunikp|monkituhtzptl`fmmpy}ts|xdimqqsqoz{zsmmntxkoyyq{yuttsrzz~}}pqm|z{}yw|vqst}y}|}}vtz|}~t~~zļſǿɿʿEDCCACJJILHBB@<=BKH@>GQL<13<A@@?@ABBA@GQTPGFRbfgea[VVVW\\ajpfbgebcfjs{{stvqlkv{rkoxzyqpninvsqogbkvwrrojkhhnt{~yuporvxrlqpikrq^ioflu}tojdefcgptqjjwxliqsqmkihhgekrjadghjhebfophbcit{ztuylaeggmpghuuhgtka`bourjnrryumenqmqvrpuqlv{ihtsllmmlkknnkps{sptpv|swxptskinswyxt{|~q~z{~udxtt}pvyr{rw{kafkW}iZdrqyoPrrzuj_rhPmyo|tt}zy}gtVnvv|yy|{|zmkpqslvc{zqkz~hqxh[Z]eup]^uqesvmmcWlshaTVR`p|maidgsb\\efb_`]acgZXieppZ`gdVinkwwyul_jlqlZesjq~oRfn_nj[Xmtrvuuumhkdhkixrqt|sxmljkyxkkpxuwuc[YZccWLPGMYSPWOQPX[h^do_oi[gjTVibiVZVSZlkaMPOYW^ik^o}srtyugpukpxvedd_T^RROKSa_edqfal`^]hotjh[NV]USc}hfgs`G^ob^VHL[ca]dnzc]]UX[j`\\ghdSHWch\\IYssahyxywmehlhmxz|x{|}}szyx{ktrqtperjfjymz_Rycagu|akw}tXTdmVYdnnNKOVZYcc_zm[b`giikwW^~vkutzcgedh||oyljWekzt_]FTq|}|fmxxJ\\hv`Ns|wfbdftwTqcYZgVMgXZ[YgYen[_t_gpjX|hf_roeqpu{l`YVjkoz~nt}n{{}yzsoa`mrc^gjkklnkpsnhgjor^\\Ybcduqg`Wbp_XkkuyW\\bhhjliat~vjjdfqg}vg\\ailbe\\MMTATl]GJZiedfeilncl|j`vwgmwps}xpgl{sj||vq^c||vuwhroci~zwv}vqzzrsz~suzt}}~vt}z~|w{}}xvkv~|wltvyzf_uxo|annlcla[m~vq[e~qr|yykytizxxygvyzz~}vxovx}}yhknrwne_voif^YLMSiqs}||qwmd|tdfsmgb`jth_ozini[YVN[_Rgriuvetts{jmr}|Wb}yptrvlgoghdc]rzeu}omsypkronoqvxyvskqz|ysnffhrtfmrnrjadigny}rlnvv]k{giproiw}w{jcfgrtgjw~pkzyusrprwzyz{|opl~w{wxvuqpqq{~|{w{~}ȿſľĿ¿»ĺGEBGMOPRMFBB>:<GMEA;CPQC4/7@A???@@AAABKTQIDIWaeec_XTUUW]cmnbcfdbcekt{zptvpjlyznkrz{vqolhnsqqmdcnwtnpmigcgpsyzxsmnrsupnplimtmYwfgmvztnhbedagqslemzsgkqpnligggeekohegfikid_dmjfcakw{ystwl`fjgopdiuremtde__pphhqstuohdtxqstvtptrr{zkltnmrmjopjikiow{yttrv}zv}zoqqkjnsv|~}|xwy|sowu~xi|tv|xouqo~~}xu{kbdoVzjXgtqxpSmsutjduj`yz|~ru{y~}yv|j{Wlkt~~zx{z}tnlossqtb}ypovlrud\\Z]fpjY]ylarumjWToqg~`QSRar~l^a_hn`Yab_^[YY[aSSdbpfQ_hdWhrlxwyvl_lkskVfpfnzqParakkVTntpssuwiglxagicrznrsvotjkgm~xmmuwyylb\\UZ^\\SETFObTNQGOS\\aw]poavZht_Qagc_RXURehi_LIMS]bcb^o}rorkbntiuqcqw_Sa[VSNU^`bcqsjif`UaknmiaOZ\\[PZ{i`cpeGUhaWWJKX\\\\W[exo\\WUXXcbYcpgQCJ[`VEZsnfsuqwxma`efkt{{w|x{yy||syy}~xz|nmrg|qkclk_h{j{^Oxd[gvq^ko~{rTR\\jWXdokKEISgXcc]tfV[adfcqnNbzriwtyddaekoxmgVmtu|zihwN^u}yxsrypJccr`Gqxxftlgr}]nq^bcTFeiZ\\Ydahdbesg`~iZus\\^|rkpuwpjY\\ylxwuxxyxonvuqlkq||ryur|r|zjkkneszkmeezu^ikjyr\\`lvxojbq|k|xmelnw|gelwp\\j^XNaR\\iXPMYidafdkho^hzmaptgjtoo~wmdkytgsywn[dz{vvtx|lapkXp~ypv|~qn{npv|xuzzzz}vx~|}zq|ww|uq{zuqrlysicmswofogdiWUowu}char|xhvt`rvvsqt}trz~~{vyrwv{}}|ijmrzqgj|bkl^OIOapqvy{zorfe|qadvpffbgth_v}snpg`^UclYdwpvxgqxx|hru~en|}oow{nnpgiiebztawusomsnmqoosxuwzzxtv~xqneaerucbikoja`gfmzqiliiuWft^hqnmdtmrx`^bcq}o`evwii{~yussrruzxxzsmpf}syuwxvmmsq}{{}~}ʿºĽľſº¾ʾMIGSXSPNHDC@?@FJH=9<NSD5/1<B@>>?>?@ABHMPMDCO[`ccc[USTX^`doj`dda`ablvywotspilywnmrz{tpnjgmrrnjcfqvpjljedbipsvvtrkkrsrnnlilqug^~clqtwtnfbdccirsicpymelpllmjheeehnkgighjkga\\bjdbbbmxyvttvk`hjgpndjoicop`b_bplcisrsqfagzsvxvyupuuw|{ompryujjnmifgkrxysrttx|vx|knskjlrvz{yyyxwxymow{uosztyststwmu}zv{macoZv~pUjvm{vnUcuwvkq|quyypjox}zvr{m\\jcqz~|zwzqrqmsqrxf}{morlqr^^Z]fofV^ve]rojdPYomg~]ONQbsiYXYhk\\X[[]]UQUV[QP`am_M^hgYjwktyytm`hkrgTgqfkx~uS[schnURntnmqsvegmp]fh`qtrornnnfkemzqpxyyrji]RZZ\\UGTSRgZMLFWXchxhyhirixsR^eddURTSZe^lWHCJPf^\\_br{tnq{gcnnnlcw{eZhk]ZZ[\\]bdfptlf^ZZiklhfR\\a^PSmxk]^kdNSabWNLRRW\\SP]qt[SVYZ_eT\\oiQ@BTTQGUrgo{phtxkYYbejvyz|}{xyy}xyzqvzz}wvxv{qhpbt{ohbfj[e{jy\\NudZgum[lm{xoQPXg[WbphHDEWqVcfWhaRV`cc^qeKavqwx}hwswc__inz{yptocYt{nx}p[ozn{mOhZjjKo{xkocnfrsfk`UIbr]eZgifahjssdi\\tx_ivsrttpeS^|q|wyyzxvtnvtu}{q}|{wr{zlropujjqv}ummyytqnjrxmrywvfnfjZdZipYZRZjcdfafbjW]uofookouol|ticl}ukpqwp\\hz|~rwu}yqamjVw}}vsmx~{}}stvlozzu{~xw~v~~|uw|oyvs|tlxjjmomnm{yanddfOYwxpunk\\u}v{~is~u^gzpnwr|unx{ztzwwvy{~oklr}wo||nnso\\NUanssvx{~spl`e{n]fsnfgfjulj|~~orrkfapz`c|vvxhq{|htwqwzoq~}quugkrik~lhxpqmgmploqqwzxyyy~vmmfdfsx`Xehkm_\\ddpxldfcd}pVk}jWgqljatwdppYZ]bs|k[dtrhiz}{yywtwrvy}zuv|rksbzrzux|wkotq}žźĻýýſº¾ŻVUW[UPOMJGC@DHGFC:6CVJ3+07@A>><;;;<>CLNLE?GX\\_`cbVPPSZecepg`fb^^_cmyyuptpsglxuooryyspmhfmrplgdhsvmgjgbcdimprrrpiinqnnmhiorsafqeprqurlgdecckspgfsshgkkglokfbbcikgopehljd]Yah```bnyvsussiaiigplfjicdlg[_]dnfdmtppj]]i~zrytvztqux|zolt~|ojkkmh_bnrqolpvx{{u}|joumjkptvwuuwwvuumq{|w}}|wxj{}vt~lnxsrl}~{~xxusafoap{wvUiqkxqk_U{w|l|~zx~~sl`gyyurlzodgao~vxwrw{pvvjssocxjilkpsZ_Z\\enbObw^[qli`L^ogdYLIR`ueWQUfhXVXVYXQMNPVOP_ahZJ`kjcp|gl{zomcelqfVgtjmz{yYTtiepUTjmkhmpu`ipjZee^rtuisxgpgcnenzrnx|xmlqbX_^`YLYcZh[SIPe`ltqr{rnu|kUl[bfMPPU_Z^kMFEJ[dTYaiuwnio~xkkkmq|~ihwzkemwi`dd^]hlddmqgb`_hcehkYWi`WJ`rj^XedVY_b`MEWQT[OHRhp\\USU`bhSWjmO=>IMKEOj`}~japykUR^dg{t|w}|}}zxwu{yuytou{}zwqpmr{uek`ixoe``iW`{hu[LseWgtmYikwvhKMZf_W\\ohEDD`wTbhZ]_TV^a^Xr]LaunpsziysvcY[ttprrxtqYe}uspsf~l^jVds[pzwslcnxuukpa_Wdqcvblmefmstpi`m|e{xszptqp`M`{tx}~{zmy~z{{zzsyzvro}{~~yx~}|{}voix~uv~ywvkhogg\\ow`e`_k`fm\\]_cSXsskojouxqjwqgeo}pvrswcj~~~x}yyvxho}m\\{x{{ioz|x{zwqpu|xwts~|w~x~zxtwm|w}jgj{rcpfo~m`j^jaM`~snuynev~u{xkq}u`_xnd{oxvjvwvs}{ywzxx~unps~y|qwqtg`ipwvuww}}soojbfyo[gqniilpuot~~rszyxs|ge|yzkrzlzt}||wsuy{xruwqx~lu{mnlfjplotw{z~zskrmmlv{`Ydagp`Xacosf]b`dxfXpwaReplfatl[niVXWdwyfXcsnfnz||yy}wvzqvyx~rr{qivcqtuz|quzu|}ǾŻ¼Ļÿǿ]]^[PR[XLC@BFJHDCDEQQ:++3<=;<<:899:?HLJD?@Q]]^`b_SNRV`jcgrgbh_\\^ahr|zsrqmthlxsppryyrqmgekppjdektvkehebcgjjlnprpihlkkniekqro]mihpootrkefhcentniitlcgjffklgdb^amjgvqbhni`XXbe]_`dowqovtpgcjfgrmijcbdkcZ^]dicfptmkf]bnsqunrwsrw}uko}xonhgphZ`lmjhiqwxzwvxipxokjptvuttuwussrv||~{nwwx|ztwpj~{zqr~jkzxonz{~}}x~~zzmxbkomvwnw\\_nnnveoUs}xswxjkZ^wvnkhzoygc\\owv~y~{swoszxpx|mrypanibgxnntY^[[bi]MguUWohbVKdmdg~UJCSbx|^UMTdcWTVQRTMFGNSKL\\`cTJclnqvda|oe`elpi^hvoo~|x_Rqpht[Xegienro]ordVecZwnnfxperbdqak~ywmgw{wkqygalhf_Vgnfka`Oaqix{lt}i~|bfhXi_IMNW_UddIFEMdYMVckpnihnwzqpioouwhmz{rnl~xljlgdmrkdglhecfnb]dl`Ofd_KVil^Q[dXYd\\hYAUYVYOAG\\gb_URfjiWRbnQ:=DGG?O`Z{cbovnVK\\dg{uqzs{}~{{|souvp~oouyx{}slkfoxtdfa`spd_[fZ[|moz]KtdVhqo[cjtt`EJ`ka\\VkkDAFdxUbh_W_RX^]VQqVNfqijkvmxwt_QZ{ryljtwlPrz||{tkztqgUgznsvxx}mhmx{worcjgjjjlnuhoq{xwkgm}hukqktor|aM_tux~ww~~yv|{}z{w{{u|vhr}wuy|uwfglgpakwhlifk[cuVRZ`U[tuoqhs{wntqilup~txmf|}{vuzpqw~rg{~u|{gqz{{v{}unt|~vy~nqsq}y{{jz~~tohx{^hlgrvdab\\m[Mipjuvpx{~u~~}wkp|ta]sl^~pquessrp~{xuwv|~{tuv|tv~ouowzzyzyx}zrrpmigvtdouriht{wt|yzokz{pzwr~o~vxz~~}}|s|vorqlkroqy{toxurp~|_^f]eq`U^cmmaX]]eu^XpnWNbmfaeraVneUVSh{r\\Ucoiequwy{{y}ssxv}ro{pkvdiuw}vy|~Ƚɿĺź¾ľɾccc]W]aUHDDFKNMJKQRS?*+39<99<96787<FJIE?>KZ[[`a_\\QOSXgj_grfdh^[^clr|zsrpmuhlwrppryyrqmecipqg`elssieeaacihhlinsphhigjnfcnqolYjkjrmorqiciidjrqljjqf_cebekheea\\cljpzkblme[V[`[[b_boslksuneejejsmmi]_eh`[^\\cdaiqrkhc_gv|orphqvrqx}olytroajtcW`kgggiqvwwuztkqxnkjrwvrqrvwsrsw{|ywqqstqutqtkn|{z{|xplr{ljxxlnty{}w}}}z~z{|xs~{kwcqorw|htfTgwhvbvhpuwuv|{p`bZVorfacxjok^Xlyn~{yz~vzlntupxrn|vu~cfi\\cprirY[Z[^bZNjoLTnb\\NLjici}tPICTd}wUNHTb`WUSLMPIBEMOGI[c_NKfqtx{hVxz]Ximokbkvmr}veXoqkud`bcdeqsjburaTf__xtehiwgfs`ho]lxusedutrlvvdpxjigiotipjj\\qx{~xkx|gwdydhoYNKRSXTfULIMY^RKUelkhhkp~|lnnmlswnryuqsn|sosrmrqmgfdfeehum\\XdgRYfcPP[caPPdYOf[ddHR\\\\XQ>BS__hWRfgdaUZjQ7GEAF>QXX~bgnplUK^bjymsytz}ww{{mmqqjympu}vs|woigcmqre_c[lucZTcaWytis`KsdTfjvr]`glm]CFbkb^WerC>Ff~^bf`SaQV[[QLpxYObmefhopru~nYI`zjqk`{|w^X{~w}nw{}luk[djyw|sqivxsypvljhlf~xq}nyv{w~lplstemhqmxufN[myv}}}ww~ww{z|}~~pk{|rx{wyvtcejhsijskpfgmYYw\\HRZX\\v~rwi}~tsrnt{twvvh{~uuxzxomyzw{{x~~ndrx{ztz}vrxx}y}wktsrt|yz~}|{sxvu~tn|c\\jcith]`X_kZTp}zojw~wut}wz{~zik|vc]omY|sorarpll{|vz~ovpz{}y}wlvt|zxy~}wvsroiu|sz}shqu{~|o{~{y|~o|zw}xwx|upvqt|~uv{wq}chi_ftaV_fmg]V[Zbo[\\shOK_h_\\lszxWTm`TUPm}fSWeideqou~}xz}z|upwuxtn}pnrji}~y}}}½Ⱦøƿ÷½ǽfed`aaVHFIMRTTRQQQRG1*3:;;:<=85249AGHFA<DT\\X\\aa]VQQT]lj^iphhf\\X^dnqyztqnlsflurporyypplcagoqd]dlrneec\\`imedhgmsnefebgnddmolfWhmmmlopnhdiigosnkjlnb^``bgjgee`\\elisyhdmjbXT^^S[e^^mrhfqtnefhdlsnqgW\\eg\\X^\\_a`irpihebjyvmsjeswrrxwlrtyoaqvcXbjefjlrtrstx~rlqvnkmrtrpqqvyrsx}yyutquzqxoqsvvrpkqxvvwvriltxlmvsni~xvy}zzy}{tus}{x~y|nx~|iscxots|mspXZxmqcqsty{|q~z|l]ZXQeo`X^vgg|k[Vhri~|ry~jgprmsyizzovc_zjV]htcp\\TWZ[]VOihFUl]VKSodbl|nMHHYgrQLER`^XVOGHKHB@EGAH^cWGPmty|uSqaYlpplcqzlwzh_ptjtrebcfjprpiwq~_Ve_gwf\\eoq]frcii_osqm^drmopwpg{~ijosvwiqronw|xsr~ll~tnvipdXUNVMTWeQQT]bQWV]knomoptvjqsklz{qttrqprzsvwwuurokgcdeedrvdTYd]UdeUOS\\^XK]]H_d^hTSXb_VA@N`a`aXbeaeYVaM:PE<BANOPzflhkiPN`couguvx{xooxyikkmio~lqvxsl|qmhdblmldVc\\ivcWN\\cRlvijaJqbScbko`_bb_[EAZd`dZ_sD:Bigdb]QaSQW[LKpt\\L[kdefoqlpygOHgsdkf]}wpVjxy|m~o~}mn~y~t}qg|zztnox{xeeswn~{st}ntmygllplsqkQVi{y~~|~uvwwuz|~pyyzs{n{swqe_ilnmkkeobam\\SniGKS[_{x~pytrqzyzp{n}{v{wtv{{hcu~~yxuywgcqtyxpxzxx{xzy~}mm|zjttss~x}vvyxy~qpfOfebms^Z_Ucgb`vwuqiwsnr{xuv~}{~idw{h]koXrvkq_noghywo{xhxluy|z~}~zy}zzzvrtoy~{x|{sx{yvyqx}r~x|{muqgjxe_cjqd\\UZZaj\\bvdIK^dVXsrtsQSkZQURrz]Q^fbbimfu~{zvx}~zzwnqvttn{pqnoo~zȽ¼ƾĿźeddb`[OJQUZ][ZWVRPN=149===:;85636=ACB@@@LTYZZ]\\YWUVX`lg`kqkhc\\\\_enptywqllpeltqopsyxnoiaafmod\\clpibaa\\^qn`bbemqkdd`]hladkkkdVg~okhjmnmecikkuqkkjmi_^__bgddgc^^fijutcemh_TS`ZSdeY_lpd`ntnffecmroreV[edYZ^Y\\aahrnehkgiuqkoceuursx~pm|{}hctpb^glgjnlppmprtyzokqsnlmpqpnpqvwru{ztwpsqnnurhnrvvtrnmrtsrqoqjow}mnxpvqj~}w||zxy}py}pk{yrqwyxzjuyy|~jkcvur{{yphYlqolgywxy{i}|{|tdUWO]o_RYrihueVVfmioiemqjj~ktyjobYsiNUc}s`n^OW]YTRQiaCWkWSO]m`ekykKHP[kkQKGQZ[XTL@CJG?;BE>GcdPAVwyyw\\hmcmrokdu}lvj`yvgz|gfgjkmvxmvn|w^Vfell\\XdsgXeoegfbqmlfYajhnqsmjzdipwvskmvoqxoqs}tho{}}tknm[]\\SWUX[k]V`n_Jbdfnpnmv{yxnptltzrvswrouvzuvvsqtoihfefckpd]RW]W`bYMPXZ\\QV[LVi^gaSS`_\\E:KceTgmhd`f_UYM<UK<@CHLRy}fhbidKRagqodww|{zqmfryjkfglgzymtzushzqjeaaklfcObagvdVMQ`Scue`^Ln_Pa[bl_Za_ZYK@U`_i`_pD;?dnk^UU\\YLTYGMlo_JVhdebkmemw^JIlgcj[[wtwl]wnxop|z}jpnf}wx~xvwelpytx~qsqnkwqmmrkTUl~~z~zwx|yxt{|y}{yx{m{prpn\\dkilha[ma_g]WbpOJS]f{}~y|wwtxs~vwwov{umpxv^Zpz{wrqwreclny~sjwsxyz{xuu~yhsvyrgvnkqvvtysruyz}}}os\\Yg_aonYXbXdgllxuqok~u|}|mipwwqpz{{t~m`oyj`gk[lwi|o[goefuviyti{ku{y~z{}|yv|xtx}}zwyzyu~}|v}{v{tlo}jekbnh\\V^^\\e_gvaEK\\_O[{npqPQfVNVXusZV_a\\ciedx|}}w~vwvyzvvrohxsrmvqrmq{|~Ĺù½ýeddb_YTY`aca_a]YSNKB:=;>?>:716;<?@B@=;?IQTW[ZZYUXZY[emfbmrnha\\_`flpsy{skknaltpoqtzwlkf`acmoc\\bkne^^_[dwj^\\]dlnhcc^[kl^digkcVf|pjeeinmb`jmoxnhkioc]_``cb]be_\\_ghmzp`fkf[RXaUWobSamk_^ntleecdrrmsdV\\c_V\\^T\\bbipickpigoliiahsrssw{wmq}~}dfvldglmlqnilmklnrxuklqpnmmnoomoqwurwwpuuosqfkv{rkpquxynsrlprpooliqlp{snzsgkox}xvw~{{}ss~xzz{ldvvmjsy{}uugsvy|z~qbc|wt|nojnttxe}z}~zuud}~xr}kTRNZm^MRjjio`PVdmsv|}hemqgarppvgiaUkeLP`xq_i\\NX_VNPVj\\AYjQPVbe]ijveGJV]m}hNFHRUVXRI@BHG=:AB=MmeIA`~{{r{mfxqrrmhk|~mxmbvl}mljmlmxpukxu^Yjkf`STel`W`jgb`fogi]V_aenhnjl|p_houqpnjmpn~minuvkfqt}hfrm^_a[Ub_^riZm{[Mnnjqsnmx{zrourw|zuzqusmuxyotxnpwujkkhhgji_`\\QOZ[_]KKRX]UPWOWma_fQO]`fR<G[gVbmq`ahiTSNEWODFIFM[ywc_[hbOS_ltle~}{wwol\\n{nlaeowewuqz{xuiyth`\\_klf`O^efreXNG]X^rbWZMl|]N[T[i^Vc^SYTEV^`nbaoG<@]tlYQZVaLQY@Pkj^JQ`dg^cd_orPIMj`hgTf~lquhgtftcx~spypxmpo|w{{ukv{w{wqqtvmxto~sbbyvy~yy~vzzz~zys~}~|~y{z|t{onqxcdhblf\\Tgb_d^YZkYO[gm|~z{yv~yyq~~rioxtglwu\\Vhqtsnkqlc^bhzwnfu~mxwz~wwnq|qf{}kpleugiwnyxpzrqoqouz}|{}|rkeb^liZ]m^gktwusojmzzquz{xgfnrvmiur|wj{p]fvmcdebdxgwnYb~odesxeuplyityrx}y}zvwx}}}|vz||z~}{w{~yuukfsWgs_W]_\\cakuaEJZXLb}glpPQbNIYewfW\\^^Zdk]c{wz|uyuyuqtspmpeyvpmqssnvx}Ƽ¿Ϳ¿dcca]\\`fghgcee`YUQMFDADA@?<68;?CCA@@=<ALSSU\\XXWVZ]\\]hmccnrng`\\``hmprxqjlh^msooqvysgib_`cnk_[ckj`^]]\\psd\\X[fmkeb`\\Ykj\\cffk`Vg{pgcdgnk``losufijjpb[__ab]Y`a\\^bijsukbgkeXTa_Scl[Tcqi[_nskdeadvqmucU\\a\\V^^S^gcjmdbopggihkd`loprrvzwjrzzitxiekppsoiikmlkntvnjnonmmlnonmnrwurwttvtqrrinuvslqqs{vrlsqjqrnkmkdqmp~tlwwfekuttsz~yzupytwrzkavvliu{|ytsfrvx{j`muvt|ip{xuyzs}}|ouoc}qpx~oR@NY^]LSfjim`OUcp|s~gfmrg^k}tipfc`SgcHMbup^fZNY_VOLWlX@[iRIXjc^gkw_CIX^o{bI>IWOQ[QMDBHG<8>@AUs^KOmw{sxwi|wqtkfo~m{rgqwztnmontvstjwt^bmj_XTUdeYWake_`hke_YV]]ck`ijmwi]onnlmmgjpmdfoujehnt~dgtn``dc_ah_|j^uXTtojrrmmx{zsovuwzzv{pqqrs{yxotxlqxykllliklh^_eWDX^_^LHPV\\ZTTQUoe[gTN]^o]AF\\j[]hv\\_hrVQPRUPTRSJK_rk\\[XgcQS^rwlc{wungQk{qlYjpqfrqv|~z|vnyug^W_klf^P^idne\\SGY]_n`UWOly[LWQRf^Uc]RZ[ET]`qbcnJ<Ab{|hWQXNhOPW>TglWGO\\aeZ`^\\o`LFUeaohPqulougqlcocxygqrrjotvuzyz}izzx~pqrsx|xspywtzp~x~~tzzx|zt{}~|{z|y|{{pks}kdn\\mhYQce^`c\\ZcbN^pr~z||yz~{zpv|thjutejvt[Vdipoijoic[Zcyrhdqzkuty~rwjm|fe}y]leetahvnnyrkorqlknkv}|~qoebjg\\nsctn~qtsifmvulntyv}cenovieqmwvavr[eslcdcdazgtlW^{ocdq~eqllvg~umiz~{y|~vx}t~~~{~~~v{}~z~|{u~{wyne}b]pcXZ^_^hwj\\LLYWOjybjpQQ\\IFYnvZQ_^\\YdiZe}tz|rsqyulpokkodwyolossqwyûÿ¾¾üƿ̿ÿĿbbbb_adehkgghe]ZYZTJIHOHBABACBA@?@?EIGIQSTUZXXYZbb]_rm^fproh`]aahmoowpfhe^mrnorwyoega_aeni_[cif^\\^]axo_[UZemic`]XYmi[`dgi\\Wi{pcachog\\_mopndigkpaZ^`caWY`]]_biosqkegldX]gXVkeUXeofZ`osjbeafvmlucU^aWW`\\Sckekh_dpjchfci`cpnrpnwxsktx|tmzuggouxtmghmmhhntskhomkjmollnnnrxusttsssqqqqovtmlmmsxqpkrphrqlmnmkpmo}{wnnkjjq}tqow}uzy~{}}z}~ul|}zsrl}|ma{zrostqit{z{v|l^tuvt}prw~{~}xi}`g|xiqy|pQ8OZVZM[ehej]MWbyv}g`lrgZdwteifb\\Qd`GM_ol]bZQZaVKMZlYB]eKL\\ic`eowWBKZ^pz`D9Q]MU^QRJBFF<>?<L[sWOduuztup~spwc`s~{o|tl{uxtpppssvrjxrakmcVTRU`^TTbk_ZbgdcXWVXWgg]bkmpf^fiiclfaglqr`gor`Yepx|lhfumaciiehlcvldu^Zvlhqnjmv|zztluvrz|yrqjlppt{wootktx}jlmllmpnaYe`IVmc_QCITZd^UO_siWc\\PTXgoOJLopYeza^gvYUTTSOic[GNdmcWWVf_QR]xxieytvo_Kh{ujVrnjgpmxx|{rzwg_S\\hkf]R`mcib`ZPW\\^jaUROktXLSJFccRa]RYeRR^atb`kP>Dcv{hYQVKhRNQAV^aMENR^_X]U]lRUS\\fevjTvmjnlizcbhgwldoqvpbx{nkwz~{uwurmuo{|~r~tnulxv{}szyy~}x{}{|~xxz~}}z|visjvbijXZhh]aicaZh[duu}{|~{~zyrtwytfgrschts[WcajmdimgaYTcvl`^logqnu|qsimw`d}m[h\\fl]ipkvyeq~xmnofefdwxx~}|}{znjol`txg{u{srqdckrqjgmxvxacpovgeohst^orZanjbcbbc}zeqjV\\ulagjhlgjwc{vfd{y{x~{xwyq{}}v{~~}x|~}~}|{xz}~~{z~qkeTiiZSZc^d{jXSPWQQos_hnYRUHDWqnNT`[YYffXn{sxzlfk{uiomfjmhvzolmrvz|t{¹¾Ź½¿ż¿Ž̾aaaccbeknjilmg`_ccXOTYSHEOMGGDA>>DGLLKQVUTUXWW[_ge`bui`mqrph`_cbimnnvobdb`lpmoswxmcfa^afpi][aec\\\\^]e{n\\YTYekfa^XTYpgX]bgbZXk{n_^cjlaY_nnqjbhgon]X`ce\\PW`^aaaissjigghd_bdUYkaU^hiaYansi^bbhtjmu`Wa`UZbZVglhjc_gne`gcadcgkoqilutokx}vro|sfhurmhmslefkushgokggnqkjnonsyutrrrsrppqsowtlmlnuupnnoohtrkuznqpporvz}hhjrsxynlszuyy}~w|{z~{{ttyz~{wjvu~|{{skhyqd}vosolw}wtynbuvu}~yw}}vwlfZswlds}zzpO=\\\\ORNgfcam[JXg}{xf\\fqiZ\\kqebbbWPd^HO^lkZ]\\X]c\\KQ\\l]Ne_FQ`fdddtwPEP_`pz]<:\\\\I]bT]QCEE=C?=V`r\\Yrw}vztux~trxa]{tp{~yovz~uusrrws{pjxphql[RQPSYVOUehYWdb_]UTWRRiaY_lnfc^]b`bj`\\di{d`gphRTeoyncdexm`flfaiofsqipwd]shgqignt~}wyvjrxpz{{lrffijk||trnljxxiokrpovqh[]`XTqk`[FEQWfhWNXyrW]iQJT_z_SC[b`xpjfk_ZWSTV|j`LRfj[RSRc[OP^zuglusyjSDfyzh[yhigoky|wz~u{xg_QXbjf]Talabad_X[WYebRLQjnTOKGC`hO[ZQTeaQ^bsb[gYCFamokdPPHgULIIZVVIBLJZXTYQ^gOYkjjmzm\\whdf[tzYedr{wzaaoryufdzdiv{|{|{gij~r|}uiqhstx|r{yy~~}y}vy}tuu{~y~{r}sxrimceywbfsin^ilq|{}y~|~}~xsrrrqeeprbirr[Yb]gk`gib^XRapg`Ygd_ignvmigon]i}}b`bWhb`hmiwqhy}enii`bYcxnr~{t~ztrrozp}|uxpmfcdqngfiuuu`bvqwdckcor]mtY_jhbcaacsvckgUXqg_jcmebjv`{u]c}|ux}{w~}|xwvnt|{yt}~}}y{{~qsz||~yup`klZO[fdb}sXYUTOYtlYit^RQFG\\oeIXeZVXhc]wzpvrg`g}vemjbhkkv|nkkry}{z}¹Ŀýĵ»ɾû̽abba_bmsnknqlhffieZ[ebUT\\VIEFCCFKRTNLSZXVVX\\XY]dlgahshhnostj`_eeinokto`ba`kmmnswwlad`^`gph\\[`ba[[`_h|lZWUXchc`\\RQ[reUZej_UYm{o\\Zbii[Vcropfafgql[ZadcUMW__cdaksngjhggfcaaX[i_Uajf]Zbnqh]adkrhpt^Zb^T]cZXdkih_^kl]\\d`]bfegpmdlrpmkw~xx}lsrgo~}somstiadlvrgjqj`dprjhnomszsrrvronprsqrzumnnruqqnmnnmtsmu|pumqsolz|i`pvtysmqvw{~{ys}wv}~uw~w~~xontyswzz{wxzi{rq{yvyz{mdz}o}kxkz}~~ywzpntxv}y}x|}up}wlniten_ezvn~zlTNb^QMXn_dluWJavy{|zhYanjVXchd^acRRc[MR^kjWX___gcMWamc]m[HXfhhhevpMLV`_ryX>JkaOgjYd]LJJ?E>Cflmgesxzuxvv|ysrsa_mnz|}pr~uuxrov~t{~llxqsvgUPRQPPOKXg_TZ_[^ZUUXPPhbY]qp`^]]``cf[^^ns[_glVIYhlp_aYisj_hn_Ygqdqtikmc`la`peeotx|uvxgkwoy{ympf`chdv{oplklzr}hrirrlysniY\\_Ztil[]HUS\\jdQJqy`Yq^GQ`wh^NIvelqvibe_^TNjj`WXeeWPMRcUPRdytlmoqw`GAexzgc}djfmk|u{zz{whaUV\\ff^W`lea_ea\\_ZV\\c\\OPinUOLHG\\jPVUQS^kU[ereWc]JK]dckmMFGjWHBQXKRLAEGSTPNUed]]zosvmbsad^J{{Rfbxzvy]`tywsbhxbkryty[lk|mw{vhmeq}}~st{r{zz}}~w|rq{ssxov|x{|pzuornylunhx|q}z|}yrqomnedpqcioq[\\aYek_eea]UP`mgbX_Z]c`hombfng]m}s^e[Yj\\`fhjqmry{w_mhd_\\Rjthp|ur|~vvz~w{~u}jnga^rkdghurs^f~zuafkepoZlrT[ie_b`_bipaidVXqb]j_qa_kx_}tXhwnwy|~|{~{wy{yytjnvv|ur~z|zt~wwy|~xlnvy~~~z~|rro_Zfjphx~\\Y\\TQewhWixg[PEOciYF]fVSVhkmzunrlc^f}taghafloz}nomtw||yw~ſýôú¿»ſ˻`ab]Zgtojnqnkihiijhmlb_ecUIGJLPUY\\_ST``XW^daYY_hlebnqgjkmu{j``eqjopip}o]`_[glmkowwk`b^\\`gpgZW]`_Y[bbfzkYXRWadb_WKP_qdRZil[TZn}pZXae_UWfpmncbcgrk[^bd^ONX`bbadooigihhjjda`Y]iaZcke\\\\fnne]aekqiss^]b\\S]bZZbjid]bogUXb\\Zeg`eogblnkmltxrtvlgxqmxxrpqskaalwxnjro]Yfsrhgmnouxprvxpnnprqnt|smoqvtoqpoonoqtntywvttxmsyz{|pbevwtsoppwy{w}ty}rsz{|rs}~t||}ynxmlxtttsrrt{l|sqwqmy~~vl~vllw}yoq|wr{s}z}st|wkq|phyvs_pxbZmmtyig^ZmRQbj_uvOMs}|x|{sy{f[`fkUSabaW\\gPOg_R\\_kiUVafalgScfpmhs[K`psiglxgMQ[eartYM^xjWovcmo[KKJODQuqgqpq|}nsyz|~unoqb_||klx{{lo{xmpvqjwuwwbowr|v]STUPLKJKZ_XVZZ[^W[_\\RQljZawi_`\\heca`^]_][^f`HJaghbWYTlifbgj[T`kaswehcagdY^ncgopqzpuwffqv}yxljd_^g`p|jjielwiwhrejnhytsv^]ecvpo_^_\\XTbk\\KdxdTmhKOctg[YIv|okixt]gbcXRxgc^Zdh[TQ[_KWYgx{lgilpV?Dftufm}eibnm~}qzrxjge_\\_e_\\_klg_bfb^_\\]dc[Wfo[VPLNWcRWRXUYk]]aqeU]\\QOU`TckNBEkZD@YTFUPADFMUKQjpsdnytsliq[cTPwySiey|uyVa}uo`nreno{rs{{z}euvx{in~zjieqyw|~ypqyr|z{~|x|qkzoro~isz|}x{{|xysys||~l}x~z}}yrtnjkbgooefop]_b\\gj`cccaQOchbkYWW]][aolWfp`]m|j^jW[i^bcenluywxy}lekk`]Y[qijp{qv{~{|y}xzdphcaqidffspqZrrdokkvnZjpQVha\\a[]abi\\fdX\\s_^lan[ao}`}uVnuzjwv||v|yzzsxwuoohl~}povqs{uw}m|vos~vontxzwz}u}y}}~zqnmprut|m^e]\\mvo]hrgZIVggVKdfRRWjyytoosh\\Zezs``fdemt|twpvv{|wr~~x}~øŷú¸ʾüʸ_`_^dlnijppoidfloruqjhibWPQTWY]eggd\\bg^Y^ji`Z^eiibhuoiijmv}j^agvlpphkxnY\\][cmnhktvmbb[Z_fogXUZ^^WWfef{l\\YNV^baZNHUco`P`ogVUZnoXYbaXT\\immkabahtjZ`fdZJL[ca_^gsmfhhfjmifgaV\\if^cje[_illc[afkoisp`a`ZU^_Z\\`kl`[gk_RW`XZii^akcckhglmrsnqlch{}stz~}wonnlhhoz|pmuueYcktmceklptqpx|vooqrunls~qkosvqlpqpqnposnptxyxwvnutsstxmgvzs{wqpqyw~|q~{quwoswuw}pq{z}{sw|{z|||rwjfxzpmkkjhn|jxwzpnsmgyywpw{{z~unlfx~p|~z}rry|phvwlpzq{SrlX]x{bx}~t~c^lL]gjppJSvxz{zztwsxmb_a`i[Ra^_U\\lRJij[bdogSZfjerk\\plywpwXQk{zjksveX\\bgaovgaps^uosuaQVZ]O`wo{vp}{kw}z}z{}qmopa`|xegwv}wilxqfjqjdvtyj^swt|kWY[WRKFHQWWZWW[^XUcc`VYtn]otejd^pk^X_`XuhW[^cPDSdd`UTMXg^cigaZRRc`sq^f`[e\\R_l`glliumwviim|vukfa^Zb`nzfedbapdphpbajgvttydahjn{jgXig\\[[lgU`tdOelXLdpiYdRozqxioy]cgd]`zsji[Xfma\\Y^RFb^i}~ef{_ikM8Kkoogt}if`on|p~zk}{kjpng`ba]_jnmeafh`[adgeechoc`_VUY`UYTd^\\de`YkbRUXPMX]JWgRBBg]D@\\VHZ[JEBPe[p~utx|xskolScYUzvTnlvztwPdwibppiqlw}zs}{|~n~u}z~{z|q~qrx}pifwz}}mdeourz}molvpyyxwy|{}z}pbukoi}cpvz{}|r~}~~{{zzk~z}{}~ztukgj`hpkghwtb^cdmicgihdQTnebx^YXUTU[scQlmZ^jxdhqV]edecehqzutqzjljma_anocns|q~~{v{wverjggmfedgskm]}}nnwot{q\\foPQc`Z`[]`bi\\df[cx[^rdiXgwf{x\\swxjvtz|~}t{wsxuqxutiiei|zliqovys~{u~hywlt~{tuwyyx{~syw||{}|xwvx{z|thnpnsv{gjwspZ\\lhXWkeSSXn|ompsh]\\g~|f`mpfkz|r}z|yzyss}{uy}v~¼¼ȾŸº»ùɼºǷa`_ekjhjmnnmgagsvrmjlnfZWY]]^ahrskfjlc^djni_afhijirxmiijltzi\\bkyprqfgrlYZZY_oqdfpundbXW_fneWSX^^SWjfi~m]YLT]b_SIKYfl[Qfp^UX\\p}iTZa]UWdlhlf\\`cotdZdg`VIL^b`^ansighfcjngjl_TZikaahe\\aikmd[chlnksnbd`YW_][^`ln`]geYPV]UZhf^`ecehdeknpoplcelx{stz}|tjlmouy|}wmt}q_^mysebgijmpnu~znmruuwpkrzrlqvwpmnprsnomronrtvxwnwyorpmzvsx{uy{pmqxsyps{ylov}}krumpznr{uy~wpuyyyy{|}y}ihtzqhdccbi}xero}}rkilkl{|~pwu{yrul{czju|yumsy~rkhuwqutofOsw_P_~wZ||pYaeIigpfKa~svzz{uxqqqqvd[^cadbV\\^_U[qXGevfgiqcUcnljyrjyvzvwUXt~krzxmf_ejcq~vswjxuvwe[dkk_q|r||r{zh|yw|wxwliom_bzv`cumushktkefkfbs|ruv_`tssr_U]^ZVJBLZVX]VX^bRZn[f_h|pfvijw_bsh^VgYanY^Wd[DD^a[WLLH^\\Vdqd\\[OO_]lhYe[W\\UN_f\\kiearjyvnqm}zrrkcc[TZ_nyeed_U_climc]ggmrvvhhgjiyje`ijhm]ekcbmfT\\ccP`ek`h`ntq~ocs^YgjejukpkRUfqhbZWISietx^noZjeC<Ujjlmv}ibamjpvyjumjqvslfg\\ajnomihke]fgmodnsqjeleZ]ka]]qii^kdVeZPPSUPXcDPbWC=_`FAXYL]iPDIa~||}z~wnsnUbh\\xpXlyszrxQm~chksposn{osnwzxzh|h|z~pzt{xuzzziznwu~jkciz~z}o_alo{ow{e}lgsmqsvs~ww~|yrvxj^mfliw|]kquzlx}}{ym{|~}|}|ytvifk_nsjkl}si`goskelumeYevjq{n`[QNR_qYWreY]cs[uyX\\fphadbywqo{mohpdfp|gmtxy~~wx|trmrllmigddlsfigqlz|xx|xcfmRP^^[aaabalhfj_j{de{kf[qq{{j{{~oyww~yyy|tstuywquiiegzyeepnwxw{{wt}~hxxny}|{{|x{w|z|{||{{xz}{|}unqwyyywq|yk_qo[`reTWbzwplqxqc`kpivznn}z}y~|swww{}s|xĿú½¿ÿ¾żþ¾ùſǻĴdccghghlnmiceimpqjfhki_[`ddacmutplmtiairqphbijfkqrxwmiiikrxj[dn|tpnbamkYXXTZqtadmtnd^UU^flaTRWZZQZnhlm]YJR]cZLFO]hjYWlkVVZ`rvaRZ\\WT[fhcjb[_fro^]ieVNJR`b^_htpkkhc`ijdon[T^mqc_jiadikne\\cfkomsnef`ZZ_\\[`alna^ebVLQXSZc\\]abggcbdhijkmd^ckvystzykfksy|yvuruzf_mtvj`cjhilnszzmenxwustmsuqnptspnoqpojlmrqkoruxwm|wlrojy{}z{vuxljosox|pty~tjnyvvgqqgjulszpxyrlryx|yvsy}kkpwsid_]\\bxvbjuzhrqjgdfmq}~~zzr|zwr|pqzu}hxmgo|y~gjt{}~voagt}xss}qRNxnQLc~oRzwlRdcQdgzZXtv|{s{yyynstmkouj_Yhi_gaW^bX^vbLf|spoqc\\lsqq~|u~}uWdz~ov{}o]flev}v}xzzjepvqhzvruud}vsx|pspgdkf_busZ`pcp}negpfcdddcpvnogZeologWVaa`\\IBX`Yb]Y[bfPiuXmkvrprbzzXeqi`\\jVxWc`XgL<Fc[QMJEL]TWioW\\aNS[WhdVdYSQNK`]Yoi\\]qfy|uuttmokgeTOQ\\oxaba^QT]fkjdZaaaouojlehhrhafjorx^]jj`lj^U]cZ^bghamkotvp`e]VfregnirbMWhwh_WQPjln~p^wb_m\\CI\\cgpsxzba_jfpjxpnrikrxvspjfoopttvqnglmk}pvxphsvdbwtjd{tucombbROS[eYXmEOYUI;XdD?V`H^pNQf|wvzmrtdaqhpf^e~s}|q~Sw^mfzvqsrtls~hvyusr{rjj|`p}tnq~tzto~xusdxrxs~~gz~m^b|}|x}sz\\_jisltzzyb{~edrmkmup~vswwqnqqe\\g`jkmx]ejqx{pu}u|yz}}~zqw~z{~yyyuuxidlbtxqprpqinwxmio~onnr{|ue_YSVlhXdq_[\\cp_w[crybeeo{znr}smkvis~|dz{|z|{vopnnprhhcfoqfiuln~}w|}lhnXU^_[enie]rzougptoqkd||{|t~}~}}|trqx}wnw}kmgg|zdhpkvx~xzst}~jz}x|t{|~x}|}}yx|}wu{|{}|uquw|~{wzwiyzghvj\\aqstsv~nkv|v}|v~}yr|z{|wuuľ¹ľƺ±eeefffjnoie`enokiffhg_[`dfggmxxqoqrmefswvqnlnkhovyztkijjmtwh_io{wmha]hkYXVUVrv_ckond[QT^fj_RRWWSO^phmj^XJQ]cVDCP]iiW\\obQXZbtoVPYVSS\\d`cg_[ahndWbl`VOKWbb]`msmklh`chekqdW[hrl_djgdgikoe]adjprtnih^X[^Z\\`bml]^d_RHORRZ`[]`ajh]^ccchhb[[bjuwru|~ofhlvutwwqmw~m_jwxq^]glggqtxzrfnvxxurprtoooopqnnopmmikrrqhlquwrpunolu{}}p|vuvkhnpowwp}zzy}njky{rqbpm`islsxmzvjnsxxyztkv|oiqwtofYXV`on\\cto_mmiebgpx}}|sqx|ysyymq|}mr{z~nivd`m|{~y~fiu~u~miThrwptoumIOxeGMhyYMzon{_i`\\ag{Xdu~tyvy|mmozlgoolf[kq^di\\`b^hsgUezsrqfhvytuz{m^n~zx|uranoozw}zgl|yppyz~upme}tntvispb_gb_apoW_m^oxjfcke_hcadipmg[XhgdjaUWadlfIMgb_icaYllT{udnuzzrtpltYppiedbbrXm]\\\\D8NeWKCA?MWP_fgQ[_QNRSgbTb[NSIK_XYqi[^oiw|vxwkmllZNMNZmw[_\\\\MQScmhcXZ\\Yauigfeeggeahlrzz]Zlf]lkdV[]agbdl^opnuumb\\[UgmaahinVQYryb^WRa|l}}ld}zVbhVBVabestzp]c]ke~oeurlzzkjpywy{{qyvvy{zurpwqy~tnykersr|z{ouppbSMamig^wPQOPJ@^dO>_jQjo\\xz|~}{~{esryfwpv]cY}lz~pd}fsfq{k}xp|jsrb}vvjksujob~v{wahurvwnsrsrlx{wmocu|qsv|zxnz{w^bq}zw|rv]Zibojryvudy{`bqmeirq}tor~}rmmnkc\\c^fjhq^_ej{zp~{{|uyw}}~y~uw{q|vxvquxkcpit~wsyqwst~{pmqrw{~phdd]cw`\\np_`]mlkv]lt`fi~zo||kilvx}|{uy|y|~|xwulpuqifbgniimnxw~ujsg\\`afguuk`sov}|um~|~~~uxw||sozynslh{zdktjuxvx~st}kv|y~~s}~~y}~wny}wuy{{||wrvxz~|ymnsxpdd~|}z}sz~z{z}~~}|}Ŀû¸Ľźȿcccddekqmd`cfhgdccdgd\\^degiotxussttjdluywrqollnsyywohilkmuvgeplxyhda]hkZWUQWtw\\agkldYNR]hi]QQVUKObqgmf^WHQ]aQ?BR]hhYgpXPYZdqeQOVVUU[`]ac[\\dgh^[hh[XPMYec\\cpqkkjf]eggrk^X^msf^fgehjhknc\\bfipvskih^Z]]Z^_bmhX]`[PHOPQY`b^[cngX\\cabda\\UYbkvvqt{ufhjluomrupq|t`ey~tfafkkdewxtsmmwyywtqppooosrnmlnpqmkjpsqqgkqssqrzrpmltwxwzzusukipppywpvpry{|jkvwnp}j`nd_honrxo{sgowwww}zrhq{xmrxusiWTT_kkX^meZjhhe`iu~|vz{zxfkzzwnkvx~fpyuls{thvm__pxxqtsfhv}zqxr`Rgpummgr\\ARpYFNjqKOuoozwej_^_lyqZtzuqpxz}zxjgoulbniilehrd^pa]iamrhYe~tzuls~yw}{~kdnx}{wrhuux|y~|}zhkzwqrrszvk_gqhpoeqo`\\da`aokV]gYmtgf`d`]g`acdkk`XWbb^a^WY_drkO[pecqpfa|haptj{wsrrq{o[|uijp_ubajZ_R<;_]OE?>;OOXcbWZTZULLRfaNZ^JNJN`Z[vj^anl{t|vmnlmSMNQ[fvUYVUHLP_mdbSSWOXoe`_`c_cc[ris|u[_lbdob`a[X\\efhh_lzqqtl_XVWkd[\\`mfMSapY]WUlzhlii~kRgcPHbb]dtsyg[c\\mh|mbrums}qhtywy}}|{t{{pzw~sit|yxx{svl]Qn{iml{hNM\\NNik\\Opyovu|s~w~ooswps~]cZyfspuuwjjzlxqsovulb{uu~hgpthy`nowmdajokzgnikngtyucjdn|yrp~xzzqyu|b_hw|vzqq_Vi_fgoxqrjwsZapm`hos{{}hlwxjhjibb]aZagcn_Xecte{zo{v|xxyxwj}trsmtyocsoxzst{{{~torsxmqqkjx{bnypcgfuwysexoinwuv|kcqszxr|x~~{v~x~z}|wiqytjechlemtvy||}zmwthjkqpyirzwx{}~}x}zur|~vyuoz}io|pwuvt|tt~nv|xx|~w~~|tz}{yy{||{xtvzz|~yuu}}vnk~~ÿſþĿ¿üźǽ»aaaceglnc[_hfc`_^_cfdbcfgimqsstvtokhltzztssljpsvxupiejkjnvsiqqfw}iaa^hl\\UOKWzyX_dhjfVJP_jh[PQTQJQfrgn~b]UGP^_L@HU^gfamhTT\\\\gk[LNTXYVZ\\\\_]U]fgaZ]gaWQLQ`jd\\fqpknmc]efpsd]\\boobaeegjhekn]Yddgrvnhhf]]^[[``akeS[]VQHPQOWbcYWeodV[`_^^\\WQXdovvpsynhmgksmjnqryxb_t}wmfhlnkgsxnqojtwxzxrnmnoqtttnjknqpkiloqrrfkqrqpppuqmjovvqysqrnmmkmznnpokt|tmm~veqxfanedfjqqxu{pfu~tvvzzpgowrrwxwlYQTbmjW^h_Zeagifkyz~swkutr__u{oairq{|blwsos{yjfxzc`koqpfpldgwqtsuptXQ`rtdfekP?WhJFLmhHRsletueeYX\\pxzvd`nu|krv|ts|necmnv^mhcuncli]obWigpqgYgy~r~{zziek}u~vyrovwy~wx|ywwkkvtqvpp}qtdXm{meo|hcok]\\`^^_ngX]^Wnqbfb_X]g\\^__gh[WX\\]ZZ[YY]`pmXfseezzgrfukvg{pqsnvidvktpi~x_h`]^I9TiSH=A<=IRfcYS_OP_PKOc_IR`JRMQe\\d~keelt{}sz}roprmOKOY[buTTPOBHM\\g\\YQOQLSfaZW[aXd]Zvkopo\\bg_ij\\^eVY_cgpeem~wmpk^VNVha[S]jZL[u|]X[V_rnkydgm~_WiYSVmk^eprsa\\a[mnzzkctuko{{cyz}x|r}wpz{tx|w{wral|nlruy]\\q]Uqoaxis~}rvssepa`_vanqy|xmauvirkswni_yrv|kanv|kw`elrfj[`kfvdjbehcq}wnXdckxtzm~u|}|ylz{~vg^btwwxpkaRi]bbkrmpmtiW`og_iiv{xggotddhc_c]`V^d`l_U_csa~ymxw{vxzx|sepnqitzrctu|{uwvrt~vz|lwzvy}g{ymqr{vrrryt~}j_xqyvoyz}{yy|xx}}~~~zygszymceiifn~m}z{n}~wp{yvrw}}wz|}zx~|y|ouyyy|vr{utrx|vx|~}|}~}~||{vv~|~~{x|zvwþ¸»þ»ĺǹ¼aa`bfjjd]^bf`][\\\\^cfccfhimpssqsvnddit|zuuvnglrtvunkjiihhqvtuyndzocb^gn`TKGUyyU\\cfffTGM_kgYOPRMGRgqhovZZSHQ`\\FBLU]eegm_T\\_^gdRJMV[ZTY\\XYVR_gc[T]eYSMKUenc^jnppml__ejwna_\\gsk_aegggd`jlYYeacswlfic]`_Y]d__ibR\\_VOIQOMWc_RYhn`T]^[YZWSS\\jsttsstjkqimsnhjrxwiZlwmhghondo{lltnosvz}tkhknptxqomijnonjjnnptykmnronosxojjnrsu|{sprqmhgmwhmlkkv}qrrzodtvikumokkts|{yjezpyyyxmfmu{vw{zsaQYgjh^ebYZb_goqq|xz||zwphmoo]Ymzjakrm|yblqtns~pcirm^hujfgan{gckqiqvxesoSOdywoacddG?[`@BIu\\DVr__sp`]RRVtysk]jvgryjswyniy~e_d_d{_ihbut]`k`lgWgloqgZi}rvvf`i~|szs|rnoqu|w}uswtqvmirrrqunmvkr_Ss~rhdpv^`ofZZ\\][^ldX[XTmm^de`UZfVWWZd`VYVW]USYYZ\\^mpcnrek~zhlisnuhpqjx{emtpzjr~nbi]eXENk^SA;E9AB`k`RVUGSeQMM^\\GNbSWXXgalnkei||sy~lptwkKKT`_awVPKL@FM\\`TROLOOQ^YSOX]TcUatnjclabedee^cdX]bditbdp~|kmi`RIP_fcQa`NSm}lXYSUeqgm|banzZ]cQY[qqaglojY_^Yrrqwjfytilwa|}||y~{sp~|~zvh{vomssg~z]ukyw^}ky{zjizq}`ci\\as_mqs~{tucqy}dtmptoi_vpt|o^puynob]jidnXYfdsy`c^`bamvrhS`ahps~kxn~{p}hv{{v~|o^etuvumfcNg^__gkjkmqeS`m``eeuzpgceqcbf_]d[^Q\\__hZPWhyh~urz~~w{wxmboknds|tbtzwux|xtt}}zyp~{jwyzyy~wj`~~tyvow|}z{{|ztx}yz{}{y|mt|}qfmkjijq{}luzz{uy~~u|}|~|yu|{{tz}x}|~~yw{~z¿üÿļľ¶½Ŀ¹ĺ÷»dcbdhie`_bb`XUUY]`cc_`ekmprsrsskebfqzxrsvmfipqqqniijjgfkstxxee{nb_]eodUHFRs{WYadddTEI_keWKMQKDRgninlSWOGSaT?AOX^efjjZU``[a\\LGNX]XQTVWVQT`a_WU^`SSPRYfk^^hmqnmj]_guveba`msh``ckhca`kkY[e^`rvkhhaad[Wcg[_k`S]bWNMQMLU`YN[mo]S\\[WWWUQSbrqprpoiamtkorhdnwxn^buzqjeeou^gslgvsnnluznjfimnqwympniijkjkknlouzmoqtjiouqghilnptxwqmonjefmsgljlpw|qwwtkixvnuytxrpvy~xik||nxvtxkakt|wzz|{mY^nkgfueU\\]^i|w}yy{uxv{|x|ykfikn^[iwialyslxsbosthrhbnhiasze^b`nracrigttjeyeTYn}npdba_CF]Z?@N}PEemUahh\\QKKSssm`[sqfjrjpys~tbtza[eTZwfc_\\s{[Uh_ilUkseofYknqsd\\h~}nqt~mfjiour{sozogspelpnkkzngmfr\\OyumibroV^jaZZY\\X\\gcVRSTliXajcV[eRQRV^XSYPR`VNUWY]]jpgppgo{wi~yroormfllk|}teu}qw{lzxgefbaURgdZX9?D8ALqdYTPFMb[WJEVYJQeaaa^nkvrkah~t}{iryzbNR]cdbuWJIG@FO[ZNMLHOPMWQMJSRSbXetrcZigea_bidf_d]fdls]]phigcKHJYnjU_WN^zwb\\SLXelhs\\\\wwRZYTa[sreiilaWdY[xti{ik{qfgsf~{y|~ts~qz{xhq~r}kix~la\\t}|wcbrz|okq[x^apck{rl}wol~zppwxluqrvujgi{q}w`qsumjh[{lbfo\\Oadk|s]][\\[`lprcU[`cit|{qti}ul~lu~y}uywt_f|vtupkf|kId^]\\bfhgjraNbi[aaftyxj^__ob`fZZgZ]LW[[cSM]xxzn|~|}zy~~|zvh_~ogmdo{vbs}~vvr}}tzts{||~w}rw{w}re{{wtpv{~|y~~}otyuxz~{y}~xy|}uovqoqgzo}~|sz{|yv{~|~{{}Ŀÿż¼¹Ļþeedefeccbb`[SQSX^cc^[]fmoqturtre^fpyumoumcfooklmjhhijfgqutock|k__`eofUHGQl}[X`abdSCH^keVIJOJCTgjjlfRWLEVaL9CRY_gkkfYYc]XWSFDO\\]URSSTSPT][YUV^[SUSU[gcV]fqrhoe\\_mpadahsmeb_fpibeelhY]bZaqrjhdagcUWgfXbm`U]bTPQMHKS\\TL\\np]RYVSSSPMUgpilqmib^msmokagvzqe^kvokg^dxi^ipensmlhjwvfadjkmszwpkffggeeijmkovwoqtogkqpidgikimsrqnlkgecgmphhjpru{tuttpo{urwywzspw|sju}wjqqrxi\\hqvzz~sdfunfso^bd^o}zssp{{u~z|~|jefhl^bgvkgipwktnbsrqdo{ebjbif|y]\\^`ol[dsfjypisza[gw{nvkc``KQ^Y@?[sMPkgW][bWIDEVshiX\\xzmeblhn}mo~}_~othVbRQmtbUUm~iS^\\ckWpw]ldXs}h~jmdXf~|hjpy{cYdbi{}povol{maqqbekidcqkhhapWS{qljesiP_e\\[XVZZ\\^`RNSVkcU`liY\\fPMPT[TNWPN`[MRWX[]iphmnjnurjwfopjffgfm{wpf}xmww{pbdbbZ[djZeQ2F@9EerZULCH\\_YU?BVZV^kkmlftu|uhdo{{wvis|x^V`jaiioWFGFAHO[SKKICNMIROLINKW`bjokhffjjX\\ihpf`m]a_rlW\\k}deedBHL[mfX[TUi{gZWGM[_giywV]{mMZY[f\\xqfkhh^]gTa~qe}fpzibdrxyy}{t~w~~~gm}~~wz^s{fvjcnz}tx}wc]lkqt`w}[~ibqjjwtf{q{mg{zj|usxwvw~}qrmwertoimt_xoeju^MadevpZX[UX`lnp^PT_bbvvqwri{or{xu}vywtumdh{}xrrnldyuI`\\]X_fhahqYLhdXb]fvxpgU_\\i`_gWYhV[MV[W\\TRly|vn{zwzx{|v~udZyoakfhwygq|}vw}kz{oyoqz}{p{{y~wzzv|tvizzxoyz~s~~rt~svxz}||{z||xxsuzl~t}~~}}}ty}~~}~}~»ÿŽüúż¼»eeddeeddb`[UUUX\\_`_]^agmoprunmfdbnvwkipqhgimhfijhffgghnttu~zjip{k`bcfkcUKKSg|aZb_bdQCI]jeSGILHEXgfijbQVJGX\\F:FT[ahkicW[d]TSMCDT^XRPPPROPTZWSQV[TNVVT\\h\\S_gongk]]ev~jdfdnofdabnskhjfhdW^`Wapohccik[P[hbZdmaW^`XWRFEMT\\RI\\pnZRUPOOOKM[hecnpgc^bppjja`jurfdglmjfbcjqbeiflqhgfhovn]cjijnswrncadda\\ciilimvsoophgrrjeghijflqlkjiifddjnhmempotwrmnssvzuuyvvvppx~}yqiuxtpmopuh[fm~tyv}skkysi~yigpbs~z}{~rphvx}~pighjdgfxoidjvirl`snmfqtgaifmlx|a_`csn_ipin|os|ebu|xvzpgbk\\_[SFEg~mSZlcZ[ZbSFAB]v\\^V^wpdc`hfm~gdv}fv~iklUZZS\\wdVQd}x\\UW`hWls_k^V~y~g{~affWf~ygjjwsYU_\\k{zxmlrmizm^nm_bdeb_miff_kTU{rokhtfR[^Y^XRTTX]]NNTXn`TbkpdaePLNT[VKTRL^^QUXW__gqhiljkrjk~xx`lg`abbblsqnmqoqzxk_a_`\\cldag=>THE[wfZM@FW[UY@<M]hjkus{spts}sgjx~yw|mnr}x^akr]qplY?DDDKOYQLJGBQCFNPLGKRb`inknonjmfWfpn~jkjZ[ctcS^f}qa`gb@HRa___SPQqt[UMANVZgg|fX\\qfMYZ^fb|vjjfbafcMi~mf}dsr`afux}wzy|~qyuz|mo}y~}hirvjqljqyv{zpw}xcYghf|_fzbvpctph|ybtorzlj|}fx{w|~yoysqytiofzvmq~[Qg``spVW]Q\\`jnlYIQbb^spkxnjwn}~u|}z{yz{jbixwrqmsfmxL^ZZV]cf^ftVNnaVaXhvodeX_]h^^iVaiTZPU[S\\b_~zzstxwtyvzz|}n~ueUq{yr`ijhq{kqwztuxhx{oxlmw}{pjqu~|wx{~u~u~ts~ql~}r|rx}zuxwyx{yx{xsv}vy{sy|}{zzx}zty~|~{ƾſĻǿ½edddeffec_WRVY^aa^\\[_chmopsqda_bhqpjgjnljmlgbdhifcbeiorqr{|okqt{zdagffi`YUQUg{h_d`beRDI\\haOEIJDH]gdij\\PRILZR><IU]chih`TZf\\RPHCJ[_SMQKLNMPVXTOOUWMIVXU]fWSbkmhfd^eixuhfeinhb`]gvumnf^ff[]\\U`nnfckocSVfibahkaZ^]YZQDFQX]RH[riTQRMLKJGN`e]`mk`]_jqkhd_enoiddifdd]Xgtdbcfimjc`cmssdWgoijprqokc__`\\Wbjijhktmlmkdjribejjjkempihgggfdehh`mgskfssoeequyytw{rppkoyrspjrsspilosh^eiz~}ssj|xqqpzvlrmzgr{uw{sogtz~~tqkmhljdxjcntfqk]rjnlssh_glvntcbihvpdirpwk}~nf~s}{mmhsagUOWRq}n]drbY[ZbQDCGavROUdug_dbbaitaepomiielXS]YRrjZQWozgRS^eYcpaj]W{~gxwz\\agVf~xfifu~lTQXZuzt{sjfkjewmZkkX^bba[gfb`^eNX|vqmjudTWY\\`XSUVU\\\\KORbqXRdktpidQMRZ[WNRTO]bTXYXbaeofdicenbnzk[``]^^]_mjklvxgyznzsg]`^ZajmciW6Y\\[aqoa[HHT\\OQH9Nbfv|v|{|{xtrzrhpzxw|vdsq~xbjqs\\|og\\?DBLROYSOHCFT:EMUIEJagdkjhr{vtpcdvq~zrtg\\brqaS[duf\\YkcIQT`XXeMIOqgSQMEHMXhg{oUWWkhNXX\\khxzmge^eiWJqwgi{dsg_jiu|wywwyuyprt|uyzvt}zx{vjouqprnfnsv~}rms{zbW]fdeWphopd|veanssyoqd}}zpy~{ntstv[TrfZuzRUaO^`gniUENgg[rggzfjoo}vyz~}xv_\\xssdpmhxUaXSRZ_eZavWUl^V[Ulr^bf`Y`eWgnYlg^bVZbVkti~~w|}~u}}vuqytxx|y|~kzvfRjxuztegojqwlorxqqtcsyowugju{ydepswp~yvri|nrztry}tv}}|y~xz~w{vw{ysv|v~yrwx{yx}|vs|~~{y~}t|~|{zz¿ǿþľþýeeedefedbZTUY]aa_\\[]bfjnnmnf^Y]eqmjefjkijlg`_chheadjorqqz~tlosw{pfijggh^ZYTUhznbeaadRCK]e\\JDHIBIbfbhiZOOHOYK;?LVafkif[RdiWPIBIY_[SPNJKMNQUURLNVQFLVXU]bUTbkmheb^gjrljhdkkc`]^o{umldbie]YVU_mlfini]Yahhcejhb__ZXZTKMTX]PFZs`OUNJJGCDTe_U_je\\Z_mnefb_gmkgcdfa]^XWikbabehkf`_enqo`^joijppomia^[\\ZXeiijhinkjkgdljc`gkglgiojgfffeccefedhjjgjpmjdhpwxwvuwrlfkmtwmopkoprnhklqj_cfuy{|qihngun|xozo~ouxorysolz}||yupphqmrymtpqjtk^qmpnttiaivxs}~frnnyphp{{qlvr{mnnnilTS[l|zoqwlc^W[dOBCLeuJEWkscSd_^_ak\\ekllivo^nZP\\ZVjmZQUdokSQ]dW_mdj\\[{m}ytxZ]hXe}vejetyhSPV]xuqqiidhkgvlWhhT[`aaZcd_[^XHdurlludUVXaaYW[VS\\XINWopTSfkvwndSQY[]ZPS\\X^bUZXVcbbmc`e^cfbsu`[Z[[\\[Y_jghmxne|woxpa\\a^WhqmbkGHi_fvlc`SRRZQMMGNfjo~}|z}vso}tqjsyxv}yqgtq}xhlxko{neXBE>UQP]UFA>NM7HMXGDPieifiltxzvoktytxuvhgroeW[dscZZrbSWV^UUgLCYo_JOMEEMYgisTMXZrcM^S_lauxddf^geLQwpamsfqbhqhy}xvtuvtq}ulnsv}p}wwzx|rz~snuz{psotegnu|sbrwybUTeanR^klqh{dkivx~xvf|s|stbZvvZsTOkPabgmiRBNkr^ocez~alks|vxu}xz|{jJw~rtbfqeq_eXORX_cW_vZ`k^VWUonWbg_Sa^Wvuapiigboppzuu{u~i~z~v~t}wmvswxuyyzxnwvfPf{yqwsfgskqsmmnwmp~q`m~xmrqdetzvb[ltsp{~tu}}o|dykrpzyz{|vn|w|zvzw|wwy{tv~~t~wquu}yvvyptp{{~z{uww{{{}~yz}}~~»ſ½Ŀhhhgggec^TS^]ac^]\\\\_emmloh_XX\\fjiecefggghf_[^cfebbiqqopx|vnnuvvrilsmeih_\\YOUivoeeabcNCN]c[HDHHBMceahgWNMHPXF9AMYbhkidWUpiNHCET^XTSOIILJNRQQNINRLIQTSW`[RWagigd`^ejnljhgif`][ct{rkifiia]XWYbonffic^bdcfeeggca]WX\\YTUVZ\\OI]o[RWKKJFAH\\eZTag]X^bgfeda`eeigaa_YXTS^hd^^aegga^cmnlf`immjjnonkg_ZWVZ]mkhjggiffhedgieckjhlglnjgfggdbbcddeikffljgdcq|xstusqogfolpqponlnqsnfjkokddcpvy{mdi}hesn{rr~xqmpuomvrqszxyy|wtmuqyttnxykcuvqowwlgq}~zk~zvxmlzv~qy{tqqivqYhexv|_edS\\gMALRcrFC[gq_K\\fSV[fWmkpepox_g^QV[]bp[QS`cdVN\\dT_mej\\f}ww~{s}v]Yf^c{vfljsqcTO[eurogcj`eg^rmVeeQX_``Zac`VXXSrxrmoudUWfh]XbiTQ^OHPezhMUjpw|reXWde`aZYjgabX]WScacf__^Z^blqruWWYYWYUVfe]ctw_hyuqsl_]cZ]prkbfJ_eewmVadd\\XQHKQYauqw~{|y}|rqlwnpqsurwxeftn{xnozfz{adZEEG^TTeX>;GWD:DUTBE^pgachqvw|up|v|z{ywkrsh]\\fo_X]ucZYW[YYgPAdkT>RT@@QZikbMMV]qaSaObiZjo\\de_h\\H]xncpkindrtc}{zxvortljwshlto|jv|tp}{sv~~vms|u}ssf}cdfszooquvmP[g`}wZPim|sgeqj{|j~x{}nfmingXuVehljkRBMt~eo]fx}gojzw{v}}vtz}N`tre^milfjXJOY\\aQ_v^igbVTXqhUehT[cQizosqrnz~{w|zuplxy{{~yyrv}jruxxpx|wpvtvgRcuzmqoiishqqljhs|lm{k^gwvkole_pwr`Uhvmqv|vtwzzyznqdrgt~p|zwg{w|xxx~xvzvxy~vt}s{~|~yystrxurur~mwpzy{uzspwx|||}{zzvz~~üþĿýkkkjjieaZSW`aed\\[[\\bjppjd^UT\\hokccddddddb^Z[_bdb^dpsnot{wmitzvqmnrumgkga_YS\\jrphfbbbNHU]`[HCGFARcb`geTLJHSR=8DP\\dhki`R]ucHBCP\\\\SQPHDLMHNRMMKHNPJNUSQX`XRYadeea__biomhfhfa^YZgwxmhhhki`[Z]`irnd_bbee_`feagf`a[TW^aXUX\\^NOel\\ZZLLIDBNbdXV_]VZccdcca`bdaff_YVVTPVdd\\YZ_dfc\\_mmdgeipnkkjlnnid\\VSRYepgglfeeccde`bgdephhnfjniffigcba`cghhddjkdcbl~}tlmqqnlghkjoqonlmnrspeklmokcbqvu|xj_gzielnxivzxs~kl}~qogoqv|}vu|w{yyww|{s}lkxsr{{toxy}wwmv~~y{qql~pewr}xx\\lgPbjKPVZ]nFM\\_oYANjRLU`YupkesnxiaaUUVfZm]QG_\\\\ZLZfP^lhj\\pxovxtz{`Sef`yvfnpqi^TNakjor]]l^ccSmnVcaNV_Z]]_a_YM\\l|zrntveVdqjZVunIV`LGYw|_IWrwytf`^omdeaeqqfb[`UOahkbXZZUYenhsfSUWVSUQTk`T_xkUowrqohZceXfpnhc]WkdryZZnqjUULOP[bguv|x|x}woihqjnrssh{tz_hpj{ynrqd~t]e]GET`U_lU8DTY?@HgKEGjscXfjxxwuvv}{xuyrjbjh\\]`rg^VX[\\`iPDgZH;W];DX[chXONXgp\\YcIedWba^a`aeRPdwpipgkmj|pcv{mytloqhapoejuxykyfqxpkz}|~{~{t~yorsx{rgng]dp~_kmyjxFZobtydPhx|zflzqp}~znyq~h}mqurfpWAMxumYkwnsm~yyx{zzxuv{gOqpi[dkhiqXHHYY_MbtikjfVQ\\wcThgYf[cx||s{~qwxlpz}umyx~v{zzumnfnwzxp}{z}tfzpvhR`p}hljjktgqolhcmxjjveZaqsgkf_\\kvo~\\Rbxjrpxrrwwwopplijfyxryuezxsut}w}yn}tvv}xs{rq~{z{zvur~mt|pm|sitm||nvup||tvxpl}{s~}}}{xty~|~}~¿ļiiiiihfb\\[`cegd[Y[_gqtj^ZVSXelkfdedbabcaZUV[^``]_jrpmrxxpjktysllqtunimgfd\\\\djprkfddcROVY_^HAFDBUd`_fbPIGHSL:;GS`ghhh[RgrXEBGX\\TOMHDIQHFNMLKFGPPMPROQ[`XRX_bba_\\Z_jpiehhb^]W[jwvnkjikga\\^efmnf`[]elfZ]fc]bd_`[UZbcTQ\\a`RSff\\b]ORNFGTebSTYVT^baba`aabcff_WRRPMR^aYTSW^bc]Zdla]jprnjifdhnmfaZVSS^ijgikd```acc\\`gbhreklbjlgfhkib_^^ejhd^ahgdfp|ynkjlnnnkjkghmpqpnnmvxsfkqqqneestowwg]jwhcdiscyzsrpzihvpocg~px{uq|}w}syx}}tqyxz~|ww{}txyz~psxsvxxz~u`kcXkhVa^dYeG^[YpW9@c^ILVYjueijpus`bZXPf]icP?UTYZO\\iNXlfhhtwlprq|wfRcl_pvcjzo^XYOcualvVXo\\`cQjmS]_OV`W\\b]__^Qo|zwowyf`trgW`jG`ePLeyWI_{{{skfbsochdm{umc[bYOYir_QRSRVfibrw^QRVUORO[iXSdu^Tsylkm`YifbljjebZfio~n[iwy[YVUUR^bkt{|wzwyqkdikelsslcytrZlmfzxmwhd}k^f]JKc`WmkL=T_[FHYhGONrm[cgo{tuz{{~~}~}wmla`geog`TZ\\YenLIcJDG[[=P]Z[cZSMfvmVa^HaXPZ^`_`b\\RZdysnkfnptgjx{wu|}ezpehnh[ji_j|rpsfsfosoeu|xzz~|{t|up{rzqie}oX]j]abxi}ILklqukUdmy|r}{~~~t{~yxkqiESy~m\\syu|v~o}wruv{t}zwU`xj\\_edgwYDER[YOirvqmiSMe}VSkllecyykunosu||eg|xxt}uwyrmlem{}zr}{rw}|yr_y}p|ufT^l}ejghnufnnjg]frhhr`X_nndib[[hsl{YR]zgmkrkowrusjwnu|hoelsy|ncwwmomwz|w|wkoutuv~{rsvjuz|zryq{otwljzqel}~tokovir|x~|rrwpgvn~~~yvz{~y|~}~Ŀÿľ¾ûÿÿǿ»¿hhhgfffeccffig\\U^bfnupb[YXZ`higccdc```aZRRWY\\[X[fnnmnrtpkilttifnrtunjkghjihjkqtmhgeaVRU[caJ=DCEXc^\\b]NGFKO@6?HTcigedYWqpPCFQ_XLIIDGQMBHPMJGBIPPOOMMS^aWSY^`bb^ZZ_knc`ge]ZYW^mvtoljiiea_chjmf^^[_jneY[edZ\\_]^ZX_d_PR_gcW]e^]bWTYMLUYg]NPSOQ`b]___`abgkbXROOMNY`ZRPRUY]][`gaVcxwmmlgaajoi`^\\WSVdkhfhid_\\\\^caZ`ealpdjebkjddimi_[_`ghd`__achs{xkfkmmmnoikmfglpqqpqow{uilqqqokmutltsf_kulc]fn`{phfiwgduml_^y}m~zto|w}~w~yz}z{w|~z}y}w|}qw{yw|{{qbfbhphmsjp\\_Mj\\Un]=;TcUKPYZtkiesv{bb[XNafgiN>OPTWT_lIWobmywztjiik~yswpYbk`itdd}rTNYVhx\\hvVXrdc_PjlOV`SVaW^m^]jbf|r{xhn~thYrbPfhTTsvUNpxx~sqigwocqjqumg^a\\VXeq_KKLRXfddqk[SPQQNOQ^_QRhnTYxwhlk`ffmshdjb_cpg}ygepzWa^eSQemsyzswusgg`mfeitvd`tvlTkke{unydkwb]e`RYlZ\\wfMRcecUSgWMR^uddljvupv|x||wkbipsrgj^dcQisPQaEBV^RDW_\\YZaOSwt^RcVP]PPZ]`^]`V^Zlyvpikspwdwr|rsyz~rb{xl`blqjWdaYgxlinamglmp_pwsvx|}|u}wr}qsoffqv]Xexea[fi{ZDZlpurdh{xryx|~|rsyWYrs^u~|{{ixkzvvl|wx}zutfUukY]aggw\\>DM`STlp~tmlRNqzM]mupdtmrktwvxi_g|}rv{nsyp~ohck}~{vwmpy}uzo^u}qytdX]hwhedfovdkvkgYbnffo\\U]jh`gbWZfqiv[PTzedfm`jwopzgg~nks{rkzy}cpw{~letxjlkot}yxsngt~tqts~{vmyi}~sy|yp|{t}svtkn{odjz}|fogtpmxxwxspzwclnw|xw{zv{~|~}~ƿþûÿ¿ºž»gghdcggffeefff^Wfnqtqh]]__aeggdbaaaaa`ZTUXXXXUUbmmilmmligiorngjrtstmjihlnoomlsullle`YRSblaJ;ECI\\a[Z^XJEELH63AIVfkea`Y_ymJBJYaRFFHGKQHCKPPF>GQRONMLMTacUQY\\]__ZY^bki\\[c`XUTZdnuqljihgfbbhkig`_^]dmi`YYa_UX\\^`\\]ce]QYdb`\\bd[ceV[bVUY\\gXKPOINddZ[\\\\]_elg\\VQNLLV^YPLLQSTUY_d`TYungqkb_dmod\\ae]V\\kobdkjd^YY^b[Wabalhcgbgmf_cjme\\Y`cjea`__bdkzvffimmklmlhmmdflpqqqoqyxummmmpsstywlpnggnsqd[hnd{{h^\\aqh`o}kh\\]xwmzrm}s{uzv}~{z{}{|wws{yrv~sz~mbaesuq~vx_dSicXh_MAGWbWQRQkuejuzkc[WO]mejK=KQLV_clJaqavxtpgbaexxklvdeh`iqhczxOHSalq[^lXZtpdWNjmQSbZZ_Vfw\\Vysxtsl{vea\\\\liWcvTYuv|z{or}phxko{oh`a[[\\`m\\GJGQZdaflc\\TPNMLJT^TMWoePgzqhlkigjzn^hk]aqllygekvj^hnfL\\rx}|{rmtrl_b]obeftxb]nwhTjhi}pnwbqsYWad[hmVe~cZfmkm`\\eGWYmmilmsvmqz{w}~{z|njpx~qnyjtoRgtYW`HD]_PM]b`WVaQb|bQahR\\YRX[`ZXZ\\\\b]x|{tnuuqnlgxnryuqgfzyuk]]oi{lW^_Wesigh_gigko]n|rqszy|uzvx{rqlcagp^Wbnzla\\SevkFNflw|ruvv{qu{uq}~~z~yyxnczqf{}y}}pi{fox|mzyu~}yzyxvso[avZ]_ojr\\9@LZS[ksonmQXpRlpwmqwsokyxxx^eewuuwjpwm~sech|z~}uhlx}qqj]s}rvqaY]espdddquekzol[aifgq]S\\ac]dbSXbldqXOSw`\\`k]dtljq]a~vfenyqfos}br~vsitxjmmksqrzppipttmvrvxzmxkz}qvy~yov{wvtqpv|~ikoq{xwcvwelumuwptqp|}`eqtzvw|zwz}~}zy~|¾½ýĽž¾¿gghebfhded`bgigchqutme^`defhfdedba`a`[RSZYUUTT^lmhfjjiigfjnnjjottsniihjprrpomsvmpof`[SVmq]I=HFM]aYXYRFCGJC46DKYknc_^[j{dEAM`]JBDIJMLGKPSOBBPVPLIIJKYf`PQYYZ\\YTZ_bkfVYa[URU`hnqnjigfggcflid^\\_abjndZUV[ZSW[^a`bd_XU\\ca`]bdcldYbd_XVceSLMJJRedYXY\\\\enm^VURTNLZ_QEFJOQPQYbaTQgr^hsf]`fmkb_ele_dnj[fpld^XV^_TW``ad`debkh\\[bhiaYY_gjb`_^bhioui_gjjiijjjiplbdkqppolo{vtmllmquxy{xnpmjortrb`lmkwreYX^meZlsjd[azsowoo}ys|tww}|y|wz|~}w|xy|zyzns~{vyp{uzzkc`kvwxsgn^]k_faXULN`gWJT_{kkv|wiY\\RZsfiH:FOEYlfocjlq~tojd]]crxdcvwokdcikmju|TCOfmj_]bZ`szgOKfnVQccb_^tyV]n}pusbnbfop^vx_ntwtzvkullrjbe[]b^jXDKBP^c`fh]^UONNKIVWMN`t\\Wssngfskd}s^epa]ntesi`no|v^jsv\\Rky}|xjiqqfZ]Xs_fetwa\\lxcTljj{kntduiVX`gemgZp}ggprrq`d]Ieepjwlqzqcw{zvs~yxty}{w|qproykywUis\\UcNNaZQP`d_SW]]pqTSxhQcT\\Z\\bSSb]f^iyv}ttsuz_}motuqfcprsshZWqeooa\\[TcqhfdXbl`km\\jyqrpz}wyvtrmc\\_iaV`hpp`aN]pxRIcez}{||rnxunovqk|ww|wtv~zpxwngxvuylkzlbsq{p{}srrrwkhW|wad]mxoZ7;MWT_it}knjUje^uvrs~woo}{yt]iaqyvrgntj|~vfae|y~xhjv{mhh]t}ttn_YYepxlheqqgn~upcghgipbU]\\\\[_aTU[iap~VNUv[Y]e]crqglY`|s_`j}vo]js}gx~|wzprzmhtgpmpxlsjjmqjvtrw}{o|wly{puxy{uq}zzpoy}{dsvjxwogm}fetorvpsqr~|}}[cnpyvwz}yx{}|{~z~{}~¿þ¾ſ¾¼eeeefiheb\\[foljikprnjdcdefgmpga\\cfd^YWUVWTSQS\\jogbdffeefhjjjkmrurnhfghnutrqpopsqxsf``WYtxWHAJIQ_aVVUK>BHI=2;GM\\nn_[]]r|Z?CUbXD@CGLNIGMQQHERUMJGEEEL_fUJSWVXXSV\\Xdm]R]_TQS[ekomikjfeghdjpg_]]`gmnh]VST[YRV[\\accbYUW\\\\^a_`eoo]]hb_ZYhcLFHLS[gcXVY^anujWUTW]SQ^ZKDEGNQOR]aYPXsyb\\imb]afigbbhmjilje]frrldZT^[T[a^_`]cadi]RXbgf[Y]dhfba_]cijpn_elhgdfihiksnaejnnonjnzurklnpsw{}zwoqoosrstahpmosncWZ\\icYn~lg[T]xrvqpr{uw}qt|{~xzr{}su~vy{||qy~vzxrz{wriuwy{kx}ztjfeou|~mqyiWldmgek\\Y\\pcNVbxskw~q\\iUUsieH;DMEgkh}fptwxqjec]_dgu|g\\iuwuafigmsp~`APfllc]]`gkzsPG_p_TdjgbmxYsmtnj}xhnywj|py|w~yosnjun`h[]g^jTBJ=Obb_cc_bXONNONWNMWhlXhunj_gscv|edul\\nvhgp`ptrzdbw|xV\\v}}zv~xegmmaUYVv`geuv_[my{]UnllsgoohveWYagikbevynorrxm\\kW_pqsu|pzvm^{vromu}{stozx|yutt{rpsp}ksvXot\\WeVSc]RQ]dWUb_fwgL\\bPgXZUe]Tciag_v}~pw|tp]ykr|urm_h{fs~|mgSPrcevjVYN_mfd^Q_pZhi]fvusj~|}zwrrh[`haU_finaeWVhxePf`r}zrwkfqnjiqyyynlwuoovtokpz}tmjkdzqprtmny}ff|vgu}srxkmhvbb`ikhk`_~y`95J^T_hqylmhc{`k{{p}|yuu|ickar~xqcksg}|zyg^_}x}{hkvvibgZsxvq`YWhn~vporplstpsohgkh[bWYZ]aYTUg\\m|SKZv|]SW[V]x{feUazq[ZfyrnZes}q}}~y|yur}rb}dilpsjvpheqkwtpwz|qzumvxoutr{{p~qr}{awwhz~ye{jezh`ruswqtsu}w}zWdjm|{|}quzzw~}y~}yv|{|~}|ÿÿþ¿ľ¿üľbbaekjfc`Zevvnjkmnnkgedfhinxqd^`efe_YZZUQPPR_lne^_ccccdhiiikmptrlgcfgirwusponorsxtg^a[aytRIDKNV_aTUTA9AIG92>HN^okZY_bxzP>JcbN??EHMMGHMNJEOVMFCACCESe[KKSTUXUS]XTnkUVaXMNXdijnihjheeggdmqf__aeqth\\STTU^ZSTY\\adc[VUWZ[^_`cmpgchja[Z`dYKHUXX_fcYV[afqtaTXSZeVR]SEEEHNOKP\\\\PWiznY\\fh`_bfhhccimnopib_hrumh\\S]_]^]Z\\cad^eeRKXce`XY_dgfba`dlfjvfmmjijjkggilrhaeiklnnjnxtpkloqtx~~yvrspprprufrxjqplcYY]d_]qtifUQfuw|nku}wzwnrwx}x}whwtmqyuw|s}{xpw|xuz|~~xp}vsrhct}s|v~ouvsrgkmots{}n^jsmmqnthc}rWPh~smxsarbSskcFFGMVtiszey~|q}qhfbc_^bjm{kVd{wsujhebp}kygCYjnng[Siqbs}UB_qeailhh{pj}w~zprjk}|up}}~|y{roqr~{ys]g[Zh_hUBJ:Kd`][]daYNNXUMTHUbk^[qqp`aohrpgsz^fxn]jcbupvp^q}sQf||vs~{xbgmjZNVVvakfxv^[oysVVollmeofks`\\[dglgbpzttotvwfad]px~vz}~zrjgzrmnfk{omyqlnwrhgn~tlmsulrpYsud\\ddYfaSR[bSbn`q}]Kj~YWi_Sbm]frgbgf|wmw}nf`tqrzuok]s~_x}{jwjNNr|b^ryWWH[iebZM]oWbe[ft|rf}{{syn`ni_X^cfedibX_rpehkn||qrl_lmj`ipxulsslpiny~kieh~t{~ztp}\\erptqyrstvzvr}]myrb{puwqkcdl`XagtjjvdfTr}mD0BbV^gp{topnhv|o}z}{u}ggnhu}ylciqe|{w{i]_|x~~ipvvgchdx|zwi_]or~vxuttyxytnkggefXYY[a\\TNd\\hsRMdzv^OURP\\rd[ShupZZfoqm`d}t~vu}}{q|{}z~sgbfmxqrhvvheonwvovy{rxtmusrqom~ru{se}vn~|{bnl^zj^q}xxssrwvowUfgkzy}|u}ouyyx{{{|}~vu|{z~|zÿſ½ÿƾſÿccbflib^\\_qymhjnnmjfdcflqyzb\\ene`^\\\\^XOKLR\\kod[]_a``acghikkjnpjebbdfnvvtsqomntwytkba`mjPKJPVW^`TWT>6BHD74?HO`qiTXdh|tGBWi]C:AGKKIFKOLFJVMBEC>?EL[aOINOOUWUVZQ^q`T__MGP\\hgiifjkecdffgnmc`choul^XUVW[bYQWZ^ac^WUVWY\\^^cklhcgjd`^_^\\RLP``V^gcWVaehsnYTYYbi\\PSOCCDGNMNX_WS`vy\\P[ee__cfhfcdklnsvjachryhlcU]ddaXU\\igd\\d^LLZcbZW\\_`fe`bcmsdjwhnjgktqiegjliacdgjkkkhmwqllnoqux|}xwurpopnqwmtzqsomb\\a_^Z_spicRXjv||mlv|~{roouwy|yysez}zsnjuvuurz|souysu|~z{~uqwmnn_bsnv{qyrppvw~~{lgoomtw|}udiuuvypxpk}hRmsny}vjyoWrkbTOPR`tu|huwqxp_^[_a^_dnzpZfvurqpnc`ycpqTbkqogcWlvhvdIgtllmtjnozy~sy_s}nr~{{|pktx{vwt]`\\ZfahUCK=Jc]XS^ga\\JMdRNPD[gdVcqmgahgnwpu}iYtn[]g^nqqshj~~cVp~{sq|vdfjfRMUVvdog|u]]ryrNYoklhco_kqaW^einabrussmx}rce`hrv{}ssmnooomegpyfaqojgp}n^_i~tgdvlxmsl[urnaitiicSR__\\jlcvPVtqVceZYrmauq`fho}nlvyj`c{wlytli_~|c|||fjymUOrubYl\\SFWfdbXIWmU\\f^fswb}}}uywlh]\\fjjemc[dqwvjty{{{}wpmts[cml\\_lsrgxpiihgtwed_d|zp~wuv~~ukr]cvwz}trunr~fnslabWnrlxvitp]bbcQXcrhbdmRbunM6?`Z_er|ztwumxq{yv|glunx|qidijby|w|kj`xynm}{ljkquigu|}xx|z{ufhol]ZWYb^WOZX`iTZmsu_UTOOZciXRhvo\\Xbimqhdxv|q|{tp}}}~|rlbbnurtcq|kfoqzwqwy{ryupwqoqoov|y|ooqnv~{cd}w_vk`n~zuqsyrkrTheixtz|uzltwtvx}{x~|wt{{}}|}|~Ŀſ¾ÿ¾ſĿggfike^]ajx{pjhkokigdcdlv|{j\\eok`]\\]a_UNMT`ehc\\[\\\\__`adfghiffkjdbba`grustsqolmu|{uni`fygUSTU\\[\\\\TYS=4BHB99BIQcreR\\jl{nEM`dQ<:CKKFFILMHDPUF@DC;<GT[XIJMINVVVTPShiUXdXGGR]bcfegnibbccdkohadhmqnd][ZZ]ce[Z^\\_ab[STUW[^_afkgbgld^^`aYTQQZbZVahaZaeajsiYVZejf[PRSHB?JTTX^_WZdskQN[e_\\]aghccgmilwzjbeipzloj`_ff_YUcqg]_cXLP]b\\WX[\\`fa_cgpsfmmgkibmxofefnjbefcejjhiglvlgpqnsvx}}xwvtponmqwpy~xvqpcembXWbupm_Q`lvztllt}tqplutyy|uqk}rxrujtuplx{w}ztqtwpv~~tyv{sonikh[eo~h|plwikl{|y{t`mslis}{ssv~ymiq}zuzs|ublwoz{yqz{dqmdb^YVi~^muy}vnq^RWZa^]bnuvbkvttiqt_`ajynmloolj^orryrSi}{lmzlvsq~~r}siwmz}~~}}olxyuqruaY[YccfWCL>FcZPP`eb\\IUbOOGLcd\\Ximebcbi||nyvYltbTefivrpnku}sXdr}vrn~rhffeNMV\\vkqo}u^`vxrG\\nqmcbp_kmcY`bkm_drnqllzyg`dhor~ulqqhekukfmavcXjjigkzkXXeztb\\zwhpnpi^topdvod]ST`egkiiaKgpc\\hZWeumlvgbnjy}}{ekttiakwiwriekun}~|d`rm_Qq}qaVhaNEQbadWDPjTWlkjs]zy}~wybYjwjeudclvywxwuz~tsnkra\\elYZgrsdt}ig_gcp{m^\\]bxvtptypm~qx~telicrrtunkdmzbnultk_v]drklrlgxw^a[cPL\\oidxnjXYmoVGB`\\dctyyzsntq|yuv|uju|v|xhhfmgayz|kyittpxrr{vs}~~~hmutdcYWcb[USSY`TgvkvZXYMS^[wvZSc|o][^aftrft}zmwtyzts||w|y}rrhboqsvalqgntzsx~{qxvuzpmpnt{uwwq}ior~zcasfvkco}|rw~mfoRmehqmxyvw||wissouv}}s{xyv}|}|zz}ǿ¾¾ÿ¿òĿ½ſffffd^[`jruogghkkhffddkv~ucbjkdbacge]WTWahd_\\\\[[Z\\]`abffcacfie`ab^_lspptuqlkox|qjj`l{c[]XVa]YWV\\S<5AEB>>CJSfsbPbmoxgKS^VB7=HPJCIONICHUPCCD=8<ISUSIIHIRVUTQP]i]V]^RHHS]]`ccikb^a`adnmcejlmnib__c]]lnca_\\bdaWPQVY\\aachhdcde`\\_b]WURVe\\LYhf^\\kh\\jqfYX^mobYVYXFADO[Y[a[Y`c`XSRZ`X[_bfd_dimikwwfbegiytmlhcihb]^mp`UcbWNS\\[VXXVY`d]^ekmmjpegnhbpwkdfiqicifbchgdeentdgsnktuxzruvqomllotpz~{svinzdU]jttucTam~unjjs~}xrtikvvzyrx|lppjtp~ktyoh|xw}tsppumwqowsyrkdikaYejujzemp_dk|}t~h]uphgr}{yskpr}{spozxxrpryoxxyyy|msoiqqX]rhZx~lqqyywmmaOTTba]gqvxluwssdoy_baj}~wlplxqclmx|t]iin|t~}{ywq{|z}zqqxqp{}x~z~y}}wzpozwtqoxeZ][gceYGO=FbUMUccfXJ__KGHYc`Z_lgacbbuznty\\awjWbolvrmklovyxf_ntyupj~plgceQLW`urtw|tacwxsF_mtp`bqdkjeac_mmbgnfpio|p\\`htop}zqmmpa^jwkeqZpgV`dghiviUS_tq`Wvufmklh_soog~f[ZWZbjkmor|KTmd_fdR]lqqrpdprmyxy]jr~ojfsqlwrcd|yo{{yudZnfaVown^RigNEM]]fWBLhVTnspua{tt|{h\\uifyimt{|yx}rquzswogniZ[lV^astbqt~buiWe_gwgYWZczqmzspsmuxkj}jtqcisvkmysxlpic_dmmPczrTlflumgjibp{f`Y_VIQejjn{d]WglYVLc^flu|{{oorpt}vu|tzlttaikmgg}}|i~su~w{y~lz}mnd[hm]ZSQZ]Uq~hnTV_TVfZm|`Zbvw]_]Y^u}pvtgqlywtwxzyow{z|}ptoiql~|}`eyjow~w}svx|}popn~yoysubooxbcmmxjepy|t|hciPpffkftxyt}}z~~}wktrmtsx}t}szxx|~~|y{Ľſ¾¿¾»þƵĿþ¿þ```_[Y]fqurkffikhfddcgt~zpeglhcahnn`UY`dieb[T][YWZ[^abd_Z\\fjf`[\\^]gsqkovtmjksxjegcss``bYVd^XSY_T=7?AEA>@KUgs`SfkptaPUSG77GQRGEMQMGDPWG@HC78AKRSOHGIMSUTRQXeaX^_UKDGU\\[_cfjcYY]]_gkffnpnlkhb_df\\ctqgddcgg[POU^aaabehgbcd`\\]_aZZRObcNIcib^afacjm`X\\dlkc\\[]UCHU[\\``XV[`\\WTTRXZUZ_cc[]chjfjuvedgggx{kpognkgaerlZXd`SOX[VS[XUW\\[W^gjkkjoigpfdrwjcinsgbjfbdeecadpo`jnglsrx~wsvurmkjlprtz|w|pui^jqx{kZcp~miiir}x{ortboyzxuxtw~wkuzfjrsotkg~vvy|nolowjvgowpwsd\\ko_XbkiqsbncX_kysrz[fumiisvvtlglrux{uo~{{tlworw{{xywytv|y^kvvrebmajmurrmghRMRaeWevztovppbnzahwbm|ort}uqlf~rhsiq|}~~xl~iy{wyvupwx|zorvxuw~~t}x|xzuuzpn{xvspvfdgbgadYNUBP_PQ\\`ckVNhYFEM__^\\bhcd`dpvmj{e]xuX]usuvphgjpuwrdiuz~wsnezpsiacTO\\ctwwzxrcfwzsM^nqpa_uijkkfe^nohggbnltxeVdp|ms|urunhl`\\qpkdsWhjUW`ildlbUPYmm_Tqqdkiggdmpum|y\\TZW]hmiprxlFddfhhYSblqtumkyqr{|~uuZkn}mlmwymvwq[kpsxxicZi``[lvoZOlpTDKYYgX@Mg`Wmzvyltkrx{}}qhhm{qu~|~{sxp~qootu|kbdlaSiU^^kuduq|bniTf\\]qcYYXeunfxrpwtemlng}{}io}jgavj~lnyeufogY`acmOkfszKhwosobfb_iwk^Y]^FL\\alpd`YdhU]Xeahvz|~olrop}urty|qy{m{talsmjqzwytuz}ztwvlat|c_[T[cZgkgPO\\_\\ieg{h^fl^ccWZr}}}~{pejj|jow|svlru|}~yquvruj{\\d~rp{{}yw{qqrvxyupolxfon~rbdf|qujfrtxwd`ePrgbibqtwo~||~~{lvtmtruw}|qwz{~|~}~{y|ÿĽÿüĿ»¼¾ɸľ¿ĿYYYXW[blqpnjffhhgeddfp~|slillgcfmqmaZcjihdb^Z`ZVVZ[_ca]XXbkh_\\[Y[dsskjrumijo|oecfgylaed^[daXS[bYC:?BHC<@MVfq`Wgirs^USE;5?PTMINRPKGJWQ?DLB59FNQOLFGKNSSONT_a[[b[MB?JW[]afli\\TW[\\agfckpnljigbbhd_nujeillh`SMS]dgf_djidbba`_^^_ZWSZdSHWc^^cedbefb]\\`higa\\_`XQYb[\\e]W]\\\\\\YTNMSVV[^_[W\\diidhttdefgkw|isulmmhehqm__b`TRZ\\WT^YSUXRR]fkjfijcgndivuibmtqdfjececcc`eogclhdlqrxxrruurkhhkoqvyy}~uy}onvx}ram{zlikptxuumug`w}~ss|svwvurwmbsqxuzbh}utuz|wgjinxgq|cquiwu]Zmo_XaobypegVUblvyipkYorjgkrrrqjaitpyss}{zvmrmnw}yuxzyv~q~sinia`idirgnk`j\\NR`iR\\yqsvqmas{blsbjzqx}|znfotj}tksz{vsyzuiqfyqvxvzmozvqxznnmrpv}vowpvzxrmx~pm{zywssmnpg^ciVW_N\\ZV[]\\cjUWkQCCPb^^_bdca^mthez}mgs{aWvxspoledhruvnil{{yxtobuptmaaXRagtxzwsqbdt{sV_rlrd^ukjmqhcZpwmcbcmpwt^Yl{}n||ppmvjihdcrilduY^jQR^kr`c]RNUgkZOjmbeda^eipzmusVNYY`mkhqqp[Th\\rk]QYaht{zpuxqv~w{soaji}klswrovnXyhxzz`]_e`^^lvnXSl{t]QFN[g]DUelan}sufupx{~|ysgx{~w{zxwzfsrpkktj^ZfiSaTXdcrfyswyckyeQiZXj`[b]cmdd{pl}rt]cdvcy|}ff~}dg_mzjzherageqiVY_bhVMrlOen~wi`cf[^oqaX^iEJXYjpi\\bgbQZaeen|}}{|pis~on{}pnrvw{}nt}u}wfozss}utywy~od}qig\\^jbd|pg[VXa`kqi}pZmkacl\\`t{}uumgej}bly}jqjoozzvtwx{ym}}Zn}{~|}|~pprzv|ns|kk}|do|mxnadfxsujiu|qr^]bSulegbopu|k{{n|vlzwtz}ztz|~{~Ŀû¿Ǿǹľ½ľ¾ſɻ¾ü¾UUVW[_djokffddeeeccdlz~vpnpnlffqqmgbfkhecbbaa]YXZ[]``[W\\djg^\\a_Yamtlfnuohikuwfeddl}yhched`abZT]b`J<=CIB:BOUdobZgivsZTJ?:<GRROSVTOJIUZICLJ<7AILOMJFINQSRMQ\\a\\W_\\PE<?NX[bejlbWVXZ\\aeddihggfhechkehvqehopnbVRT[flljafphde^\\ee_a`]VYcZIO`^Z^bec`_]``bbeeeb_effeebZeg\\[__]ZRQLMSTX`]XVV[chgafpoeedfhv{iqwmknhcgmlgab`XUX\\]XbZSVTNRZeke`hg^hj`myqfesyodkiacf`_dbfjadhcemqqwwqpttoifhjmovwxzv{zry}}uls{wmklswwvvqrZgw|ssvqvwru{wefwn}{{Wj|tsqsw~tafhjuij}{dqtbrv^Zkn_Vcv|e~kd\\N[cmvshjacomiikntxpg_jqp|p|wyyshnikv}vswurreqkhewyafqdlo]am[YckXWxotwtmasfll`ezux~~jojwqnosxtpmzy|br~hkrmvsw|ogp|tqov|nhfinu{xlkqiq|xsjny{qo~|zvsqwraXflXeg^cYge`[chX`iRCCRbaba_ca^grg_snprxjUmzrnllhd`jvtusqlywzspcsrtsj]]Vbiux{tnqabq{tbdujue`sijqtg_Rul\\dhltuo\\bt|s{rorouklingokmirZZgNNZlrY][OKPaeSKc{h]^^\\R\\afsgkmTOZ[drmqngaUcc`ycVR_cp~zusrqz~|rzopgbj}gnvuoownc`zv~z[T]ha`\\nrlWWlvsacMI\\hcNdjvmo~yu|awouyzy~|l{q~xrvjdptjbmn`Y[l\\YXMiapfw{qtchrbRh]Yd`blaah]h}pivnt\\\\et`t}g\\rabhjtjrhXba`~jnr`QT^fYAe|lbem}]vr[fZReuk\\YoZMWXkqpWkpfT\\ccmuyzwwokrnky{nkortwzlo{}}zyxor~{}qt}yri~uqhgqootrkge]_el~u{zXhwo`odl{xzprigelz_k||fohjlr|yxvyyy}t~~e|}oms|~u{|kvynk{}ivvjui_fhuxxklxxqn[]}]Wyqfdcnmtzi}y}s{r|t~xy~ºÿĻľĿŽʾ¿ľ¼þÿ¿ſ˽¿½Ŀ¾SRTY^bejkd_accbbbbcfqvopqqmkjoumgdiojeedegb_\\]\\^^^\\ZX\\hmg`_ba^^kogckrqihkl{ndbcdq~sdhkgke`f_V`cbO=;DJA:EPTbmc[ekxmULC@AELQWXZYVRKM[UFLPC<BHILMJIGNSRTTQVa_WX]QE>:BRZagiic[YXXY\\`bcdedcdcddglkhsxjdnsni]RV_gonmndgieokX[heaacd[\\]QKT]]``]bbYY[ageaacceijhkjc_cpd^_`eaUPVVUTU[a[SUZ^bdb^fmkgggfeu{mozokpibfklica`[XW[`aiZSWQKQ\\ek_ah`^ke^rwmgjwxkgog\\cg^]hdbhabbcgprovxqmpokfegkmmuvy}ux{xu}~~xsv|~vysqsvywwxwkWtx|ztuoowqjqwhprd~{Wo~{trnns|r^dhgsmfs~hqv\\mw^Zfl^RhwppyddUNeemx|pk`bnnknoip|ngcqoo~|r~myvqclgeszurwsvxhruvrqvzfhpamr[Zuk`ii\\Zvovxupgsjj~f]c|xv}|esov}llqtljmnuzc`}|ahpoomvtgemupnpuyh`bcmtwqghlgoyzohrwyrq~|ytr|r^\\ijalmqcc{dbcggYeiWGEVbbgb\\a_cnj_h}rpspp^evwofijddcpyvwvqyx{vteptruu\\a]ahux}sil`bp{ujmxhqfdqfoureZP|dZfikutk^n{~|xunwvqwtiu|jkposgX_cPOUflUYWLIMZ`NH\\saYYWVMQTZgbbdPS^\\lyt{j_^[jglt\\WXcg~rstssr~|uqylreYs|drqypg|psy\\zo|}ZKWjbbYjnjWZnrrefeT]hk\\up|~o|||tv]xnpypw}xu~ut~xnpn[frr_c~xc\\QeeU]Ge`ngqpqdck`ThbZ_dps]cgcq|tf|kdt^Vgr_q}kWg}gcmmrjngXV]^ssjvtQN\\f_Av`ld]cv{j]Va_Rdvrh\\kq[\\]oyxUm|ofhear|stuusl}ls{nixzkionqwxjlxz|{}ywxvyxmszzw}l{uswzzvrqkv`^ikzb_|fsmt~z|x|ooihepxy^j}{enkijqyxsvz}{z}w|tqu}ytwynv{ysn{y}{q}nemd_ehs}|npxosm||X^}\\[|yjfgnjttk}~~~z|yʿ¿¾¿½Ľº¾ļþQRTZ_aegf`\\^abbbca`fx|mlooonkmtulhjlkheeiokda\\^a`^\\WW[ejgbbfa\\^hkhbhpqlilluvfc`akyyidlkgjk_kcY`bbS?;EK?<HQTblb\\dmudQG@@DILSZ\\XUUPMUWNLQOFADEILLIGIQTSTTS\\bZX\\VIA:;HV_fggd]\\[VWZ]_`cdcccb`bfkollsoehosme[V^jqqlkkfeglpb^hiddegb]XMKRXX]da^c^WW\\dgd^_adhnjgjdbfrjcccae]RUX[\\XYZ[[[\\]_cd`]hokgghfbtzonyniphaeijfdb`\\YW\\eil[UWOJT_dj``h^`m__vwljpwukimd_hd^_kcaga``cgqshtypjnmjfdfikkruw}vyzxu|}~}}zwyz{{|xuxz}xx{xieww{wtsmqrghwwmufd{wdn{zsqmjnyp\\_gdopekxoquZova[ak^\\lyiuu_bQXgeruxta\\hlnfujkvhjqspuy}|k}tqnhjeao|xzpwsy~lu|{puyhloapn]_wrdni\\Zunx{zohv~gjzg\\e|vsz|{cr|rupijmnggq}ugrs[fkZfnlimoiedhklmpvq^]ackvwifjhfnx{mlvvwss~zqs}uc\\kohp~y^w\\krla]le[QHWbejd\\cbgogerxopsohawtukbhhegktyx{tsxvz|zfoupzxY_e`ouysgh]`nxtrtzhlgfoesypdYO^Zfemttjdwyurv~xr{unlksrxa`b_SSQ_lWXYKFJW]JE[oYVUSSINPU``^bS\\ccqzw}g^`bloomaZaio}{jotssvy~rquop__vcv~plcov^vzmz~]JSdfa^fpkVYptpfesl_ipows~px~y{spZymnz~i~v~u|yqyvmluYZava_u}n]PVm_^N__jnYppeagdYhj\\Zf~xYg_v{vfzd_pbQgpbnznT[xphmmmkli^YY\\fwks\\JYccHgbclZ[jxzar^UcUfwnrklmnhjqYktysgbvokqsjj{{oqxnhv}|{jfolpvvhkvx{{xvsy~~wjr|z}vzoz~{~ylpr~nYkowz|rgkrwsq|}|~|vwpnmmgpvtal}{eonkey{xxnvy|z{wv}wvv}zu~w}ysxxyyv~o`eb^fgo}rtvkwn~xsVa~`\\z{rjgmhupn|{~¾ĽûſôľýQRVZ^_dec^[^`bbccbbongnollkowwpjjnniffhqujccbcd_]ZX\\bigbagcWXbhdaenojglonznaa^`q|nafnoienaig]`a_W@<FL??LQUeka^eor\\JFDCDIPVYZUTRNQWSORTPIB@DIJHEFMRSSSUX\\\\Z]YKE>9BP]gigb^\\[WTX^_`bcbbcc_]bimnnpmeekoojd]]gqronmidhmqn`bpmgffe[TRLKQUX\\bb`]WW]dgc^]^dgklhddbmnlehidc_[\\W]hl]\\[]_ca__cda`kplljfc`wxmkvnjmdchihigc_\\ZY^nql\\[WNNXagh`cg]bg]jxmkoqpoljibbic`gmbch__aflsmjvxmhiggfefhijqtz~zvwwwx{|z}|{yuw~|u|z{}vlpzzyxsqouhan{submtvrpsxrrmefsqYXhccughsttxXpvea`bakkvqfq[aUcfhtpyoY_lmmnzov{tfz~vy{~{yk|uqpmbfe^jsvylqq~{|t}rsyrqogsmahvqfmpe[smxz{mjx|jisfZgz~~vrvzwbr{qshddeedeq|meqd\\qz_Xhoigold`afjmpqviX[`elvscdiefnxwjnuvvrzxlv~z^Ymjg{uct]y}g`gqabbNUaikh`jkkmepvsqqqmfpzstgdhhjmruz~qovuy}hpxlw~XYm_ouz~scbY]ktsry}hfhimgw|mcVLY[e_musjnuvs|wy|tx|kmwxvanc]XQL]lYUWJDFV]GE]hMVRNOGGHQ[b\\d_gnszxzwf``hmjkia\\lps}qoppqqzzu}spsumaulfz|}bpssjtqlt}eNT_idghrlY\\nqi]udlr~urztv}v{xpzjZkk~zfz~}}y}ouvhft`PXpe[itvbLNom_S_`drRrsrfbdh^ix`agz_mUzhztf[giLjpkkxsnXVtorsfikkn`^Y\\crsh{tWXZfSakd~oY]iu~mibMb\\g}jyqlqsufnw{~mdtlempdiywupwojv{{}j`pknttgitvzzu~mnvugrurs~wv{~nn}]oumzy{w_u{ypz}{|}ywsnt|kquyio}|lrrnm~wxynuz|{||{yx}~zysz|yruvhda`kkpxzxr{n}tnWdfb{zsqkkiwlq|}{¿ƾ¹¼ĿźþQSUUV]ca^ZX\\^bbba`ez~jinmkhjuzqlprpmgbhsxrfdddec\\[\\`fgghhiaSUde^`djmjefihsqh`]\\bsugbiosmbkbgk`^_]UC=HMABNQTcia_fslOFLHFHMQSRTTTPNTTQRWXRFAEHLJEKQPQSSQU\\[Z[[RG>9>KWenkc]ZWSTW\\__`dc`bc_Z]flmmqofafmnjfcaepqknsiadktuibktqkif]TRRPNNV^^`d]RRX`ec]\\Z\\gplffadnqkegnlea]d`Rc|o_befffb^_ddefnrsqmf`byukhrmjk`ejhikje_][[aprme_XPR]ajg`fd^be`suhrvlmligfcgibdpmfge]dfjpretvqliieeffffhkpt}{zxuuwy{yy|zyxv{~}}v}uqxz|}wsosxkj{vwjx}tuysovprvdapsVRh`^yienwy|Youhe`Zeqjxr`p_`]lfnoo|bUftlmt~rx|sq}~~{sgxyrnkjZ`d\\douxgjm{~}x{zuzysnnwocrxqgjul\\l{kw}wyjmyyoile[jtx|sqrx}scpwjrwg\\\\cbderyhejXczjU]noegpka\\^glorrtcW\\]gorm`chegr~seksuur{ujyx[fqfkqnib~hhktbjoVSannlgsqoknwsqrrpjnzwsqbdggnuvs}mmyyv~js{il^Sq^iu{vta]UYhpqpibjljkzxkcOR|[`e\\muqhy}rwt}w}vwls{}ti{ea]KMbjVRVI@ET\\CE_\\IULIJC=FLUcZifiv{}w~vibdqmitnaewvvyvwnlmrxwv|unvxnv|io{i~xtnwxkmq|}oZU^iiklsnedhzlWquortmvx{z|mstltd[}ihwiv|w~yzlntc^pjNRfhYaiyjKKqtcU]]amXhxrieamahfhm{fqR~kzkk^eoEmqnhxrxsd_Uplq{ndlkg[a\\[moxrp~kYXbba|h|voZ[ls|wmbLfeiwzzkq~vwu}qjp}hahlbhvtzotplux~zzyj\\nikrrhhuvzxw|~|jdswdrsqyxutzx~|~tn~msm~vw}m|p}}sw~x}~ymptytv~}vzxmusx}qu|}|~}u|{mt}xl`cosq}~||{rukZhwk{q}tmnynw~wûſ»¿ÿ¿RSSRT]c^YWWY]a_\\\\`ntikljifnztjlssokffqzwkdeffgc]`fffgjljaTSakb\\aejigedddy~uqd\\\\_grofdgmtqdjceke]]USF@MQCDPQR_fcbfs`@ESIEMTQQVVSQPPWVQV_ZRMIKLKEGUVNPWVSW[[[ZTRB5=KS^gnf[ZXVUXXY]bge`aebZ[bhkmnnjdchmlheeflpgepnbbflvugerwqnnfXTXVQOR]b\\adZQR\\a`]ZWX`qtfhgaorkgfjqmd`ag[Z|}ihhihfda_bggijox|oeba`stjfqljk`gphilmhb^]]eopnjbZWZ_bghdca_cdfxpjttkmkcdcemhdjvojg`_gpsrlg|mjlhkhgfegejlnu}{|}xruww{ywywvww{}z~||yw{|xrpwxjn|zu{{v~u|vjtrr}janp\\Qea]tmeotw{_mtjiaYgqmwk`pb`gtimntwYYkujowmu{s|z{u{ulatwqnhjV^e[_msvdfjw~xzw{}u{~skq{ocz}peexn[gtfpvuxhnyvtjdc[jnuxkmpvwjbnuldvr]V]]acgrrbddVnvWVelibfgc`Z\\iotrnr]U][grmia`iehyj]jqstwwll}sdmpjtuy~kksihwnut]Wjrsonxtsptwsvrrqmq{sskafdgszxrjm}s~nw|yldeMq`duznuc[SSflnmi]npfo}pgbJevbbaZovpkuqxw~z}|tt{~vtli_NUfgTPRICEUZ?IXRMTGHI@=HGU`^qbkwxywxodpwjrzngszyvvyqjikqv|~voxwztqtz|vowzjqqw{tjbcjoogrwul_qYozquflss}q{cgqgq^bzegtvq~uz{kiqaYksRL]i[]avtRKquhWZ[`j]d~sig_tcleoy{ouYkvingjvBgqinlqs`]ZmlkzxfklhXaa]uuvzn{y_[]kowq{st^Upv}}vaQjop}}pf}u|oml{~c^fg_iuv~uq|rls|uz~wwvk\\kkiqqiftyywz||xkbmzzz~mrpqw~ujtvry|~zup~wqxqtztuz|y}ptlv~}~q~|sysv~~|~~|vwzknw{w~z|m^mzzvys{}pzÿľ¸ÿ¾ÿÿ¿NPPRY`_YVTUX\\`]VXgz|kghggfjx{oiomikhis|yqiegghe`dihedhmh^VW_iiaaccdedddfmxrno_Y[ainlgfijrufieegb]WPQNDPXIIRSRYadegjP:HTJFMUQQZYQNPSWWX_^VUUPNQJGQRKJT\\XVY^^W\\ZR:;LUZagiaUT_[Y]VZbilc]cg`\\dhgilkiffgjliecfjnh_irf`dgmwshkvvrrmc\\[\\YQRZa`\\`_WTW^`^ZUV`inhhngkunggilmib_e``{~kmojgfdbcdegjkin{yhabccoohhmiijflsfinokd`^`jrrmhb_\\_adghde_`eclvppunjkgdfcgngfovqjc^cisuoetsemkhjihfffelnhwyw}}rovvvywttsuwwy}~{z}}vsu{zr{w||yxw|{v{vitwnt^joaS_`Zoqgqnuxgqujme\\ixqolgmd[swmim}nSYkrkrxmz}q|t{qkxwof`pslmdfS^eY_zgos`dhr}ptpyz~vyvhmxod~|ncaxo]eo_jruudoxtwf\\c]giqqgjnpnbakiccu|lWR\\\\bcipi^c\\`zgRahc`ea^bZU^kq{slnYWZ\\kqggeclhnxZZloqvx{fq}~ukprp}z{ltyhltt|vabvrurqzz{usstuosrmpxrtmceflu|seo~oxxxwrkb}oKkd^xxdrd[QOcgmkjXoucqzlf^Nyre`^[otkonrxx~~{v|{z~ureZbhgVMQQGBWV@OTMQQFJLCLLF[[kn^ltvx}wkkvriytdo||zxzqnkiim}ztw|ztx~~}}ypspwuvzstvmp}xcgy|]uu]nr{w^bim}ky_bnapWmw_g}vtzxvvjgo`UawZHTi\\[]qz`LpzoYY]dgcbrhk\\tox}cu}ywl|kt{nnlt|OZngcjum[_mmkwyodmy\\gggyusuzmccn{tzyz~jYr|h]zvxz{b}{u}ynkl{qa_gabltzxpvsnrwqv|vyvl_fmhomjgq{zv{||vlckxyxyzzwmmv|~zy~~te|}sumtvu}wp~yznwusox{~yl}z~m|~zx~w|~ws~z~}}zzykr|~wƽýſ¶ûľ¾¾¿LLLT`bZTSTTW]^UR]rtdabacgu~vljojedgt|oigggilifilgegji_XY_fihda`_ab`bgovqjljZY^ehghhfhhrxhkgec`]VMOTJQ]SQVURU]cggaD8JRKHKUVWZWNLOTX[`^UY_UMSUKLRJET^ZVX]_WX`]H=NYZ^ehc[SUc`ZXWbkmh_`ec_ekjfhjihhiiiiga`hnh_bppaahjqvoiowtrtk`aa]XUZ__^\\``WUX]_[UTajhbbqlkvridfimlcaa^c|jjsniffeehhffkkiq|rbccdhpkbjlhfgkrqdhmnjfdbfotrkfb__acdfgec^dheptnrtkigeffdjnhisqkgc^dmrokjijjqkhiihggddmomxtuwkpvrtytrrmnzus~{ux~{~~xv|}||{zxxywuwzujovm]cleT[\\Viseonsuswvjoe`z}pjijkfV{upet}cP\\mkmpsx{|ymtl~wrfcsthcbmohl`dQ]dSctalk]bgl}lnjs~xx}ytwsfgtme}{ja`wq`ehZgospapvpt_Xd^efoj`klidZ`i`_fquhTQU^dekmbY]\\rvVag^]^fY^aQP_gunpgW]ZcpjfnkhmjweP^qoou{qsgw{wsrtu~{xozykvtxzukpzputu{~wqqsplpomnsqtpeekpyresipzmgdawzPbh\\zu_nf^MM_dlijVpteosli[bvja\\_^nngv{}ktxx|zx}w}{wpijkhXLX[FEXZQYVRWSKPUV]IL^_rj\\csu~}whmtjqxkdx{|yrxojep{xo{}z}smwuzqtz{h`ogdz\\fsvq[[ae|hvbff_~eVtq]mvzt~szqtlkmcRWvbHPg^Z[myiRqp\\Y]lddhqjkWg}vev}xy|~tmrwull}z^\\vi`gv~e^nikt|ygkvmrtvrux}{yot~qky|}g}}zt{rohm}i``l`lpxwptspr~}vlr|uzz}~unc`kimkiilzysz{yvlegpx}w{u{~ynfpz{x}}t~yw}}zvcvqwitt|pz}zoyulwqn}{~yqx}|s~~y}}~~v~z~zy¹ƽƾ½µľƾþ½ľHHLXb^SQTTTX[XQSg{wf\\\\]\\`n~ynmnmfdgt}pgehhillihnmiiigd_^`fllf`^\\]^`adkrrjhlbZ]chgceecfhqwhlke^\\]XOOVTT]YXYVSU[cfcZB:HPMIIV\\X[VLLPT\\b^VYgeUUYRNPOKO]`XY^^ZVabTFQ_a^`gd\\TS^c]XVammh_]abbhlkifghiiihhgec^akk`^ipibdhlrsllrsrrphaed^Y\\efc`^a_VSZb]TS]ikednkfrslgchkke^_aavlhssiffgghhhgikkksvjdfdeloh_kmfcdmrlejmmkjgfmrspidc`decdfidc`gimwpnutkgcdcdglniktheeddhqmjhggiormfhhhhgeilnrwrxqkssntxroojovq|~{~tq{~|}yxv~||~zux|vqwztijtozi]aj`WYTbqfjpsqx}wite_~rmhjjgY|rxgv|ZM]likjyszsyojmkyxsj``oncbellgk^bP]dNfp]heZbgg{hggk|wnr|ljmecpme||cY`vscbbYimqj^ntppYYc^bbofbfgdaYab\\difnfPOQ^filj]UVczb[pbZY`bZbYIN]fipbZa\\hpfjsqnmo{WOdsokvtxkkz~w{vuvy{~usxw|twuuoyvnpv{{{xsrolhnpplprvphjqt}riwhnvh]]em|][jZzqamhbHK[djdhSnugkimi`{g`YZ]`keh}q|}ivxuxzxxx~}}xrvka[VfbLT`mga\\Z^XSZgm`FVdjwmUcwzu}}lhfhvupnxt|ski{muy}n}zopughwy]oc\\w~{som[WY]tdreh^bv[[u}hbwxywxss~vw}}qrkdRQumJNd^WUmylZpn^][uecmqnhV\\xkv~{q|{reprznmsbjq|{eerxgxnrsvmzx~|zvy~~{o|{xvtvxlobr}dcerdvq}tnrsop{~yrdrzswyu{}uog\\fimkgijwxrr~ssmggmp{ytpz{rfks~~rwsu{u|~lzzz|z|as|o{frrtpttvmt~r~qtzvt|~}t{z~z|{z}ǿ¾Ľǿķÿ½½¼FIQ]`UNQRRTWYRN\\qwgWV[]bjx{mhkmebiv|ofdgillkkjklljihffedgloj`\\ZYYY\\ekonibgj\\]]`ccca`ahipvinndYX\\]VQYZX_`][XUUZab^SB@HOQJHX[X\\VKLQW`c[Vbk`WZVOQTOOYc]X[_WR_f]RVca^`fbXXUXgdYX`lmiaZ\\`flmljhddklfefgfd`^hm`Wcojeefikoqopqppqngdgfa]_fhhfbdbYXafZS\\ddjkpvcgunifjmhf`Z`eq{kerxmadhhgffhkkjklqofiihhlkecokgjkijjhikklmhhqqnlgabfljb`ijcddiiuslrwsia_abchominoegedklphffdgmrrkcfhhgegmllsur|mnsnluulkkkppvz~~xxwxps}}xyun{xv~|xsw{usz{uihojuzaWcq][VZlgbjspvzl|i\\tpiifdb}jtowSI[ceemqrsnvhjzfhntoa]^lk``emjfiY`P^eNjjXccYdgevd``evvhj{yfah`_mle{{[Tbtrea^Zhjoe\\lqqmU[baa_rb`bba]Xd][kh]ldHJUcinmeZTYppTnrVWY\\\\c^PJPYn{kl_bf^iiguxtno}jSVhkjmxp|nmzxu}wxz{~~uy{|ytwvm|ypkw}}uyurnhdsznepwvqlouvxuly|luscWYjbsj[gXuoeheeFFVfh`hSn{iefpjls_YU[ZdgZi~xn{ukvuruzx{syu~~}|}g]chtl^gs{kcbbe^[est^LbmngQv}~zkfglv}xux|{utx|~uq{vxt}wmpb[sr`pstskkYRSYl_lhbYmjT_{slgvx|q{~~}{wwueeVTqtNLaZTQnuj_spc`^}j_p}tocUZ}{qs}{xkyq_nlzwrncovmo}~xy|{yv|~svtwuzsqovufp\\x}fmswf~qomnslny}xl^rtptsr~z}vtl_aikjejgqusj{qmmjgkl|xzkuzvmmtwlpqowrzzj}~~~~x~^uxnz{}cjmr{~~tkmu{olrvtwzs{r|}v}|z~uzzw|þ¼ǺĿû¿½ž¾üHMW_ZPMOQRUWTMPeywi^TV\\^fqwrebfc]fvzkbbdfimljjjllihhjjijlnpmf\\VVVWYajnlf^_ih_^Z[`bb[X`jinshni^XW]^[XZ[\\_da\\[XU]^^[QB?KQTKHVZY]TJKRZ_^YZfh_XWTWVOKRae[X]^TWef\\Ycd^bhdYUWY`gb[]fmkc_]`jtqlkid`djhdehhgc^epfW\\jlechkhjmooqpnoqmgegfabe`glieee]aj]Ubhahqkxqcpohfknhbba\\cqyocpwndaiihgefilkjlnmjifilmkiehmimqgckjkjiknjipqllhaahmlcbdjebdhkjxjiuwpb\\]e`bipjhrhdhfempigcacfosle`djib`glllrtw~vkpoinvrjkjoqv~vrwqz{utwvu{zuxzxpoxst}}wurpsvw{{qgigbzmWYujbZTdh`gror}{n}r^}|sgdd`e|czloKGX[`alnqrjqkevqcebre_\\\\ih`^fncfhX\\O^fPkhV_aWcgdsrb[Y_ntdc{{utb]c[ZhjaszWPdrrha[\\fhk`_hlvkR`a_^`pbbcb^X[][dkdVkdGIZeqqjdYNa|a]zhRU[Z\\g]OJO[}smidgddfcp||visy`T\\igmp|~uxpixsw}wy}}xzw}y~zmwwlx{qlvvnxwrpef~hbtxurouxp|~rxnuaOYb]ht_aYooifcgFBPjg`f]p~jaeulx]_WT[VccVmmnypotrps~}vyuqrs~sg^ozxpnp}ygedgh^aluoZXpm~Yh|{wkllvr}|nzvozgUcrdmjrrliVMOYh[jiYayaQczpsltzxx|wvoYbZTnvXHaVTTio\\crf^`k]rztkaUXu~rn|yvf|yq\\mhzlfvy}||nx}ppw~pwyunluvmqc}rxyxop{jkltknz|zqe^w}mosin|y|~wwp`ahjicighsskmuhomhjervzqpwxqrtzlnrqts{tjzu|~}{\\xsoxz{achpos{viikulmpo||uzv~t}|{~r}|t{¶ȼ¹ý½Żſ¾¾úIRYYSNLNOOSVNLXn|o]UUY[^issh^_a\\bt{th__bcdgkkjkkkkihjmnllmqngaZURSYclnje^Ycjgc\\VY`c^UTaiinpindYVW__^]^_^``_^^]U\\]\\YQEFNSTLISXX[OIMTY[YV\\gg^WWWZSMPZedZX]\\Ydmf][]`eokVT][\\ac`_ceihbbfluwokhb[\\egbeiiif`cqlZ\\hkicckleimnononopmihifbhgclnjiiidfg\\_jb`uvlwhdrjbhmga``acrynclwob`fhhgggikkkkllmqjehljgjjienvh_gmkkiinohmqkjic^djkfccfhb`ekkothiuxjZZ^`\\alrfenedihgmidfb\\afqsh`_eli]]hnlknsrmpljovsiihozurozqnxtnvyxqotqvzmfrzlrxvstunkw|}ysgff[qyu_Sosi^P`f^dnpkwzn|zdpqib`\\l{bxkgGIVV]^giommmm_ikaZ]qb^[[ae_[gp^h{eUWQ]eWlgU\\a_jgcmraWRXhpa]wzmna[_WXci]gxZRhqqh`[]dhg[_eivjXfb_[apaabb^V[bcik_Vk_FM\\jujgcVSl{]l{_RVY_j`WULLfkkrqk\\gbb~wl{}xbVcjmtw|zhivoy~z|~vywzw{zwkwvjv}tounmuvtrak|ffyw|uouz{i}r~trv_J_WWgtf_]ljr`bgF=Wkgicez{k^b~ltTaZQZ\\h^[u~gnwrrsonu|{t}npps~|pje}|xwzszsjfclg`fkqhYfossbs|l|rm{|pt|rt}T]xffkrrmgSKQYgSegVovWPlrwwx}y|}xw}}jV`cTor\\JaR[Y]nUbuhbckZryrkbWWrtjtzvhv{r^ok~wo|}~{}{ks|rm}w~xrw{yomuw{ys~xvzxzwekithny|ve`\\{gnrekww{~xyrbdihl^fdbprkhshstkjemstwpswuutvjhrsrszpq~zs{z~y]{pswwz}`bdrijy|ichoipokvwrws|}ns|~ÿ÷˾ɾ¹ƿſſ¾¾þŻ¾üLUWTOMLLLNQPLRfuwaPPWZ[bjnh\\WYZ^pxob\\\\^`bdfghiikkighmqpnmkmjc]VTSS`lpkd\\X_hihdVRZ``\\TYeggnnhm^ZYYb__bb^`c_[\\aaWZ[[YSJLVWVNKQVWXOIMTWWVT[gg\\TWWTOU^dfaXY^]\\hnf\\XYbpq^S]a\\^_`cbccffdhqxvliibYV]dddjmjibaor_\\iiggadkffjjiikonnolffiddljjqpljjmmie_hi]h}oor_mraakj`^a`gqwrcatub`cdefgggiihjljjrslkliginiflwp`bikljhlnkjoljib^afifbehiebafklonfjuuaU[^^[bmmdcdbckhhiecc\\Zbentg_]eleZ]hllklu{qqklopxqehlv|wtouqqwpoutqjirvuobbp}siprooswmhw|zyyk^dWhyygSjxlcP[a_`kneqzmv}khtka_[quczndGLTP[\\afkfmjk[dg[S\\pf[\\X]i\\Wks`jwbRUS]dZlgWXafpgakp_VLTcgZ[s{ifbZZSY_f]cudXirlhbZ`efdZbcftg]kc`Ydq_cfebZ`hhll\\arWGQ\\trahcY^xvcsvaSXXimT\\]OVvht~uh\\j_nvw|yyd^hpuy}v^puo||wrywv|twlwtjuzysuiqsuvsbsvkj~w{qpqwm|rulws`OdOVhnlcdhgy\\dhI@`ehvbtvl]q{mfWf`KWen[kytemwrsrlox}yu~emrv~z|{}~}wnxwz|ylrumbckb`efha`mmltql~}tqu{s|}|}qXcviarqqnbQORYdKafcwpOPy~r{}oueSaiVqs_U_Oe_VhU`xqcfkWswpni\\[t|uipzvr~v|sbtv||yzy~|wvksxxm{y|x}yw}rnv~ssz|u^kgseou|ua[\\{|hmidspuz}y{vfhmdk_c`]kqjiogq~olnlynuusuwyusjbttmv|r}yq{wx|yb~n~wwtxs^iatj`vhZfmfusks{sz}u|r}||z¾ɿüķ˾º¾ǿ¹¾¾þĿ¼ŻþĽLTUOKKKKLLLKM]qseOHOYYZbif[SSV[hrmaZ[\\]_bdeegijkkjjottqmkkihaXTX\\^gnmd\\W[hljh\\MR]][[Y_hdcijhk\\^^]b_bicZcg^WZddXVXZZVLM^]VPMPUVVOJMSVURR[gbURWUUW[^bb[UY_^ahkg^X[jwfT`g\\X^__b`^aeegr|zofhdYTY`cbflmjd`kvfZilbffaii_dkhdeknlnrjaeiciohkrpljmrnjgeid]uhqobtm]gog^^denwpe_gsk_ab`bfgffefhkkhjprpmjggkmeiywd_ghiihjoplkoiif]_fgecafjieaaflmmjdlunYT]__]enica]\\diebbba_U\\eeorg_\\dk`V^hjjijxspqgnpozqafq}{ssqustuorsnkkgoypa^iszz~jgnmkntymgz~wx|k]c\\jt|yhSgvlVVej]mj_mzlo~rgx|tm^_arnk}sbNQRKY_`ehbmek\\dfXQ\\qgW\\W`o[SnvhlqcSTU_c\\hi_Pbipf`jp^QKSa^SYo{gaa\\WQ[\\dcdrl]jvfeg\\dged`daergcpd_\\jtablicbhjjmmZesTGR\\xp^bgdf~qowvgSY_rdQhfWj}o~vefm`|x|s{udijsv|o\\usu}zqqvt|stlvqlrv|pvxhtrtttewqonuxooptxvvog{md[bMbgknmhen|kffRHfep|k|xmenzdajdGVom]zsngnsqrpkrz}xxw`ntw|xz{y|}~}{ryp~mdtue_bb\\`dcbaeqz}kwhtyuy|{sfkvkavqqoaTSV^bTfxt{nO\\~z}zurxzeWciWpyf\\]PheW`V_w}gm}kZsvstl^`vvven|xy~y|tlz~~uwt{x~vqjtvzoz~|z||vsp~nq}wywYnqmdlvrwhX]xtq\\`}lrx{z{|lmtcghiebimklqgpvqumqu|wr{wq{~}jayvn|~}xxw~tpvzj~p~{wsumWlavpVolVanfy{mpxy}~zx~~~yľȿþķʿķ¹Ǿſž¾¾ýƾ¼Ļ¼ýÿžMRRMHHIIJJIJTgqgUIKTYXYcf^VRW^ejjbZY[\\^`aacefhlnnpruuroljijcYTX^fgkme\\Z^ekjleQHT^^\\[[ahcaefheZaeb_akjbXdl]SXdeYRWZ[XK\\ccXRPOSTSNJLRUTPP[c\\TTVWYYSSY]XTY]^ckncZTZtpYYgcXW]^^^\\[_dcjy|ofifYTV\\bbchllhahwm\\eofcjeeld]djgcflmjop_Yegenoilppkhsxokhfg_]{{colhreaqpd]^gkqqf]^jpe^ba]_fhffeeiljiknoolighlkeo}n_eidjiijsolljfge_cgc``bhlkc_aglmmedoqeWZ````hle`]X[dd`]]]]\\\\^aenne]]fi\\T]egiegy~nomgpmo|m[gu|{ssrttttosqmkmfhun[^ptswmgjjggnsvsox{wz{k\\[jok{ufRfw_Tdp`nkVexnlxxlrvmn]_jsgy}ucQYRK]fadhdofm^egTQbtbTZYgs[VoxrpleVVU_e_fjgL`jsb]hk]JHT_ZOWo~dZa]UO[Y_jfmsdqzdchcgkggfd[drihpe]^nsdaklikhflodSjsSHQki]gmin~txxteV^mu_\\nd_x{u{tdpmlztqhmsvqzh`vtz}{vrro{p~vpsqqpwymztionpsrizytsqvtnpzuqpe}nid_Umelsxkiv}lc^Wjpzv|ztymjnohAXyjhhtioqrsllv|}xykfrsxzzxwy}{~}zruqkzt`dyl[^ZZY^ccfgev}du}kzt|~}}zyqzvixwyudSSaljizyx]wzzpx|{nlWdeVne_\\Ugj]Z]axos|mau{z|m^`wqw`nz~|xwz}}wtrvv}ujhtxxk~}z}zxqq~}iptnvxYlyhckwmpy^`vV_|nuy||{~tw~ihlxnimmpnykt|w|v~xy~yp{voy{{gb{xsz~~~}rpsznq~|yovmPihzwUixsZ_ni}sox{~y}u}|~zſſǾ÷ǿǼ¹Ż¸Ľþ¼Ž¼ýNQPICFIHHFHR`mjXKKRUWY^daWQW_dgf`ZXZ[\\_`aabdehmqsssqonljjjf[TX]ckjjfa_ekigkl[HJTZac`X`ia`effaZdea\\eqjbVci\\RWcfZPV[]\\ObihXRROSSQMIJPSQMOZ`XSUTTVOHMX[VVYY[dpq`SP[qaWcbURW\\]\\[Z[`ccozqddh^QSZ`ddfikkfgvvdbolcjkdimc`gicbilkkqjVZdagpkhornggwynlhgi_a}vcmjknchtk_[_hprlc^akl`[a_[_fhffegjkhimllmigfgklmrufckf`kjmtupliedgebfd^]^djie\\Z`fjlibfpl`Z_bccbhh`[YZ[a][\\\\ZWY__]dlg][^fhZR[cefbgvuiokhojqwcZjx|xtwussstsrrplihhqo_dttouyoafjcahoqootuwwxxo][yil}qePe|i_dpjnpU[ssow|prthq\\`pqj|ufV^SQbkefjjogpbhiUVluZUZ]mv`\\oxxtnhZ\\U^i`dgiM_gs`YfgXFGR\\VLUm}dS_bVO[V\\tjgyku~f`gjjpldge[dojkof\\]otfglnllcdnq[NqvRO\\uj]jsmtzwuucYgsq`mudm|y{x}rktlsuypnp{vq~~bgvz{~~vrrpnwpxsqtsq{tp~uhijkqooy{vk|~urmr}x|ote~xrnib`sjqyjqzrfjjr}}}vu{vf>]zmv}_}hnstshpy|zw{}kptu{||yvx~|upjqlqh\\kvaW[QVTX_dmigxsYuytwzox}~|~{u|uv|jR]|twyqys}zxjrWfcWiica_prf^dc}}zy|un{oac~r~z_q|||~rzs|zwqosqxr{khrzqd|x~uy~oo~~zzgpmfm~`muodjwkanhzxyffiz{}~|~unnxqxs{rx~|~||}s}xn{x}fbz}|~r{|{vow{vy}}mrqUfj~~bgmycfmk~wqxxp}sx~{þ¿ƿž»ʿǾþ¿úľ¿Ŀûƽ½þNPMFADHGDEO_kk]NHNSSV]feZQS_c_]`\\XWYZ[\\^acccdhnrtpmlmkjjll`UY`befeddinngbdnhPFNY^fh[Rbla^bbc_\\eb_]hsgaW`eYRVaf[MTZ^^SbjlYMRORQNMIIOQNJNZ\\SOOONNIFNZ[VUTT]hrmTHMbjZ[`WLOWZYXWW[`disticd`WRU^efegjhfhrykcmogjoiekjcdfd^cmjcls^S_b_ipfgpqkdj{zkklieammclnpifmnd]^biooj`]emfY[_^^cefffegihghkkmleddfjmtsidhifckluxpmkgcehdega[[]ekd\\Y[bfjhdemoh`^adeede_ZWWY[_YX][WVX]^]ch`[Z_ffWPZabcagsmfoihojpo__muzvsusqrsssprrnjmlnpkoqsoqohdhh`enpngltsrvxurdhcq{pg[g~pklosor\\\\mrtx{rsvlobfppq~ythTcY`glmjlopkqgllZ]vrX\\[aoxdaox|xqn_dU_h`c`eQ]hs^UefT@DPYNJWeziS]cYMSV_|kd|qs{ibhmmqsecfaemkknh]_stkkmmtnfgooYVwuX[fwk]jymvzswt_blrpfsunzxzzzyrrmnzv}rrtxnuz}z|_l}ystsjvlyyurttuzot{seecgnnry}khytqlx{~|t|m{qe~~wspjbhwrs}iy}wsvvvt}yaEixtlagkvtniuy{wxxzwwy}~}z|zsogplmb`qn]XXOTNO]mmaoscZsxsufruy{~wx}zy}|||v~~y~~q~t`yw||ut~xpozXgfZolfje~|oikfu}{uimv}^t|uw~u~zpvxvxqnqornykjrznZzsqv|ymk}wuuckfdi|jthukltpVwxk{zw`~x|tx~z{z}~{~o{sjew~z|q{|}~{}oxw}z{vksbdjniiylqmquvxpysq|{z½ǿýķ¾¿üƽ½ĿKMJDACGEBHZjl`QLKNPQXbfaVQW^ZVX\\ZWWXXZ\\^`bccbfnpomknnmkjicWU`cdeeejrvreY]flaMLT_fh`OTln[Y_`^]]e`]`lre`Z]_WSU^c]KOY\\_Wakp]IMPUOHLIIOQLHNXWMGHJJIIKTYWRPPV`hmbHBPliXYWNJNWYTPQSYcglokfdc[RR[eifbhmgfqwqeimkjnoihlhcdcaagkdbpnWT_`dlibhspgem|{ebpm`atwbbnrmfinh]_cejnk`XZho_V\\^]djfdefehhgfgijomcaceiqzm^bigfhku|wmjmg`fidhi_XY]ei_YY\\bggdemnkea^ciida_[VSUXZ[VY_YSUY\\]^cd^[Z`ieUOZ^_aagnhfnehplkh_eorxrqqomnvzpknqpnolkotxorppljhffdjqpjgnsorvtqml{wezrmlhl~yurqtvopa`ms{zzstusnjmpow|ywsiToblklpnqtprsjooffzp[bYeryefpt}{vudgW_f_d[bT]is]QdeN<CPUEJX\\wqXXa[INWa~ibsqukikpos|pahkflnmni^atvrplmzphjpm\\f}t^ajzzl^i}mzypys\\hnqpnsryu{y}}zvtvhoyxuwwwiuw}x`q{ru|ogxi}zxtuuzvl}z~qbb]emns{wby~rpljzy}}xrp~qmsig~{sstmjdrxxymq{|{u~y^Twvyak~ej{snmyywu{ztuwqoenlh^cqi]YXNQGI`qfepm~^crvgrlutqzn}usuqr{|}yzzzpvtrw|p{vyzru{vox[go`vpksjvvrlu{}sv|}]s}zs{mz|w~|ttutrz~zqnplk|oviktyoX{r}snrsifv~pmq_eabjyq}gfzory_q]w}mzw{z~~zqmgtvoqzzyz|ozsxznpmchumgtq}mz~pxrvz{xl{{wwý½ĿȽȿ½ÿļǿ½ľHHF@>BDBBMalgXLLLNPU_c_YTUYWSW\\\\VVVVVZ_aa`abcglnmkkmnnkg`YW_dcegkotythZT_iibIKZdhaUM^riVYb_\\Z]c^[blpd`[\\[URU\\a\\JKWZ`\\_lr_FIXYOGNKNOOKGMVTIDGGEGJOUTSPKP]bcdZEE^saUUOIKSYUMKPU]fghkjb_aYQOalib`gmnqvvgfimjjomjmlgdcaadjfaindUV_agicbhpnfen~vYauoaeul^grqdclmd_cfikmeZU]igZV[\\_iidegfeggeefhiok``bfjsuf[biffknz}tklngaiichg\\XY\\de[VY\\bgccjklgbabgkic_\\[VQRVYZW[`TMZZ[\\^a`ZZ^alcRZ[^__`giafk_gpje`cknoyulpoiiqysmmlmoplhlsy{moomhhjhcgnrkbkslirtpkhuro~rmqruzztstuvnljmqx{ztstpmlooowxvvrhmpionosquvrusnqpmq{o`dTgs{djpt}{yuelZ`ebbYaU\\kr[QceK:AOQBOWXvv[V^ZHOVd}ibtpslllppszhdqikomnha^pxusmo|oilpm`it`blzyl^j|mxwpzo[jnoporpsz}}}xrrwfr}|uvzwtmzquteoqzfoqo}{xvrrvzrnv|oaaZejmqxkcxofli|}swqknzhwznei}ulwvhli}{{vkxyx[a}v}^zsfkqno|xut}xnx|wwpdmle\\`mh^ZUMPKKdijulrqdhpnbkturmvziwrp}pmnvz}xuyyumlmlr~zzpztlquxvp]gwh|tqyqmvxyu{{hq}suyky{}{ry}|nvtrqp|yqnnkitpuhhvwo[}zq{wkhhfco}zlie[`]_iv}uk_tqzrrjsy|}~}~pipvhr{}xwvw{ozquyrlpjizseout{|pyru||}~{}jxy|z¾ÿ¹þ¿ü½¿ľžſ¾ĽFDB??@?@GUcc[PMJJNRX`_YVVUUSUZ[YVTTRU]dc`^^_bgihijkmmkicZW_jgdfmrvxqcWSYbhdZNT`hcZW[ms^PW^[VW]`[\\cllc`\\[\\VRUX[YIISW^]]lr_FM\\_PIRLVSQLIMUPFFGBAFKSRPSPIT`__aZGQlnVSSJFLVWOHJR]figiig^[_VOZgic]dkorsonhhhmmoonkmkfde[[ii^_kl_TW^de`agknlghuiOi~hcqq^^rvj`dkgcddfhhi]UVdh^WWZ]dmgbhhdfhgddfjlkd_`dhmsj\\\\ehghmx}zplqk^fmfdga[YZ^a]UTZ_daaiojke`dhkkc][Z[UQSUWX[bZIQf_ZY[^^VYcdgaYbY^acdfeclkZeoeafknjp{xmmkjiisyolkjlpoiisyzxmnnifmnidkmne`rqcismgcf|mxykpwvrw}zrrwwslouss{xtrtpmlmppstttssvroquuutwxsvuqrsnv|pihTjw|bkot|{{sit]^jj_X^XgnmYRbdJ9@OO?QWWtz]S_XOUTh{kf}snqnoorrqo^sqkopoecaoyusopzojklncg~wbcnxxoamyntyts}j]lknnlps|py}|ywnovjsz~~}uy{wrwvowqszjypdn{y{{{kn{vjw|n{lb`Yejoquaq{yibgc|utzqkgosenkbkxkhy{ajsw~|m}yv_p}unblhkloq}vru~n~~paoib\\[kj`[PLQORhfrxi|gnkidfsh|unh~zy{o{t|fptnwljlsyzrswsoifhfo}{zvq|kepv|sxs~anzr~wt~vox~x|wwqn~|qzxhyq~vuiuy~ntxpokt{}{romognoricytnbzzpxwibb^_huzticWT]\\Xhuxyx_w~txyxxp{zyxkl}zgrzxwuvvnxoy{{qzwxipsltycmz|{~xq}rv{vz~utylmu~y|~üþý¿żĻ¿ſľĿ¾¿þCA@?@?=DP[]XQJHGIRX_a\\URPOOTYYTQRRPR[de]WX\\_cfecejlokea[Y^ikffnuyysgSMT_ccd[YX_bZV_ntjRJV\\VQV]]Z]eliba]XYVUUUYWIGQT\\]]fr_HN]dQLTNYWPKIMQJ@DE>>GNQONUPJY`Z^cYLYmgOOMDEQXRHFKVgjehkgbXW]UWcfc^_ghqsinuiilqqtrnkljedb]`ha\\foeWUU^b\\\\gnlkjgj~[PrcfpdYk~r`\\bfdfiffffbVU_igYTXY^ln]`ojchhfcbfknh_^cfkpk^Yahhhkq{xmoqcapobeg]Y[\\_^SPUZce^eokhkd`gjih^[[\\]WTTSUWadRL_i_XVV\\\\U[ihgd^^W`ihdegikcUdkcdookirvpnnjfhjtqjkijmqnkr|ztyllngirponojiimsleptg^]km}riryvou{xrtxxomrwqx}|wprupmmlqqprpqtwvqkrzvwy{|vx{suvox}qlmToypalnp|{zpt}cjzq`]Z]tmeWY`cK8AOJ<S\\[s}^SaX_^Tlunjurkopsrutpv[ntmnrpceeo{wsprzollhmef~{ddruvsppupptpwb^ohnljmvwmw|usuilvnuy}}zt|~xompzuqmjt{q~xz~akqdy{hyhc_Wehkrg^~nxfb_iyquslfenjefh_mpdfx{_j~r}s~|}zuhzsaizkjl}iquxrpw}u~petf__Whlb\\MMPTZhmyxo{avh_amigvg`{yqzwj~nwcg}um|v}hhkq|}yxorvlkfgefnzzzor}b[ow{nzvbyx}zw|}quzz{|ro|{x}waykzzuseswyxrztnlixz}tqirgeotk^uvhfvsnuth\\ZZ[`mxog^ROWZTeyuelwxzy~}tl{w}}~ng{~yziprw}srxofuxpxtmzwu~hpvno|em|{w~{}xq~~rw~}qw~t{okomgu}{uv~}¾ýºÿĽûÿºÿľľ¾ÿA???=<?JV[VQLEDKPX]baXQLJMSVSOPPPNPYdf^USV\\`abcdeikhb\\WX^ejfepzutrgYMPZ`a_fb[Z_[S^lsl\\MNYYUQV\\ZY^ejfbbZS[YWUTUUJIPPZ^]bm^IP^cURUP\\XOKKQPB>DA<?HOPKNXOL[]X^bZS_i`LJGAFTVJDGN^kb^jhe_UU[Y`d`_[`ffrlctyhjsstupkklgbc`_de^^kk\\XYYb`ZboqkhfdrwTXxzefdX_y|eXZbbcklfacc\\UYej^TW[[dneZfoedjgefhjom`\\bdipoaRZhhgjnsy|slqk^ivlafe][[^aYOQX\\b`_knfhf`cgheb[W[_\\YVSRTXc`W^jb[WPS^[S]okhdXW[infcfnj_[Yhjgipkinrsppojchktjejfjqqnnw{utxmlldsvmmpqmlnsskjsob\\^tso{jlwwnmu{xouwskksuo{{zsnrrpmnmsomqkoyzumhuzquz}}r{|ovyrzrrqXwugflomz{yqykyykbUiufa\\_^dXACNJD]dav{[Y``p_Unjqnovlmpwsvyp|aiplotqbehnxxsnoummlbjdg|wdgtsy{vprpknpy{Yaqgjiiovsfuxmptfixtsy{|y|w}~ussix|z~|{nvzvyw}xy}bp~layybuja]S^hkkY]vhsf_]rsnskfcbhcft^b^mjbgp{^ep{y~~xz{wvrnws]jrggmzfswrmluu|wvztnxbbbUgreURQQ^]gt~vp_y^Yfqzgetb_{}qryte}itb_wvnxzz}hjmqy{xzpsxfkdkido}~{pz{}_Snwy}|p{~{k{|{{xuoq{zw{vpoxvyx}wZmvxzutg~vyz~txwpmbqy|tuelj^hxn]g{eesmjspdWSUVWi~qidZNNTYRdvsnvwx~x}ywyo{uv||}|ph{~nunmmy|umq}b`wmnusopzsipuplunp~z~r}zu{wz|~~|t{rytwvmsxj{zmggm_{zzvsw}zz|ſżĿ¾þ¼ž¼ƿȿ¾ûľý½¾¿?>=;8;ER[ZPJGCISXZ\\a^PGFJSWRKMPONPU_gcWPTY\\]^`dfeed`[WV]bfgcjwynkgZOLT^`^^`d\\Y]^^mrm_OLT[YTRVXUX_ddbabWQ]]TTTPRKLNNY]]_a^JS^bVUWR^XMOONJ@>D?<@HOMFQYNO[ZY^`ZXddUIEABKRMEDIScg_agdc]TV]_ba\\Y[cffrffzxgjsrtskgjia_cccec`dlfXXY]dXXisogdbf~mS`}vdcYVnr\\X[`afmlb\\a`ZY_ebURW\\`hjacmicghegjklqh[[cfioiVPajeeknquwoild`pwhagd]\\[``VQUZZ[[fngce^^eghe_\\W[`\\YSOTZ]bcfjh]ZTOYdWN`qnd]X`injcfpk_]Zbmjhjniknnppkmiclsrbejclpporywtuvokin{ohjpqppqrspnnld_eztjrugo{rhkv{uitxngmsqo{zyonrqqpnpsllpiq}wsjhuwmrv{xn||mvzs|txtc}pcgppn{~vp{}|zrhWnrgfac_nmRFR[XchfvqXccky[Zobsquliqvp{}p}jgjjnsn_bcjuuqlkqlig_cchupblunyskpnfjoyvSbqfhijpv|lbvvfnteeuvs}zvxu||zyvzkls~z}ws~~yy}}|w{{fqxf`wv]nkaZLWjjeS]zm`laX^qgkof`^^a[e|iY\\anddeh|_^ny{|{ysyvqppuso\\jkeanzfsvnhgqnxnrxyz`c_Vix`M]TWg^h~ywhczZWeoujfn_c|thtt]vj|}sb[owmo~}u~|jpsrwyy~qwxcpepobr|y~}{{{dVowp~~t{x{{|}|ysz~xkusyzssiouv}|{i{Zwsysux{l~||~~~zyxrnbeqzsvlai`^wyd\\yfgqwrhptaQQOOPif`a[LMW[Qc||vjvw}qqttuzzwsouwz{wqi{|hssklxtnjszU]{eksx~whyskqssjq}tqx}rwytqv~us|zw{uvrpÞqzrktxslszy{llitu^p{ttz}|wÿǾĻľľþƿĿø¿žĿ¾¿><:66>KX\\TKGBGTUVY\\YRFCHOTQIHNPLNU[df[RQUZ[\\^`efb^[ZXW[cefehptpig^QOSW``YX^e_W]homicXKLW[WTRUTRX]bbaaaURb`PUSMQMLKJW\\^_`^LU_aVWXTaYLPQPG@=B?=AGKHHRTORYYZ^_]]a_QD?=DNNHEFLXdb`ee`^ZSW`a`]YW\\fgioal}rgpqotqgfje^^ddfe_agiaXZ]cbV_rsg]`cpcVkqa^Sa|}gYY[afink`\\`_\\]baZSUY\\ckhemlhffcimkkppcY^gjkk_PWggafkmoushhg`etqccf_]__c_TRWXZW`oi]bb[`gfhc[\\XZ`^XNNY`_eljcb^VQXdcQSgpkb_bnnigikpg[]\\dmjihjhjminphglkqul\\hjemnopuysqppokmvujppnmpsrquummohdmvkmvmirxlenvwoewvmhlqrr{zvnpqpssqrqilnhszrrkkppmpqtsk}|luxp|rtqj~mbgqps}~qs|xuxq^oqpofgiz`HZmgcikpgalfsz_bjfvrggrnkq}xrgadksl[^^cqphegkfc`Z]bjpkbmtl}ieplcilxqOdpbgknquyg_up\\krbbrwtxzturwvsy{jqs~zu{uz}}vx|y~zvuiqt`\\xsZki]TESki^PbvcXh]R]f^gfb_YZ[UfvbX[elch`gy^^pz|v}xsp{pmfp|sk^ja_]oyirshcfphuem|}}~cb]^pyXWgZdj_p~xehzZTbmqkjibnz~vcqsVppyzvpcXjwhlzm|{pyyrwz}uthulqpmx|~z{zv{}mcpxt}~{{}w|xtv~tmni{|tpramqv{|}ev\\rysuvs|||{{{tmf_esprxbegYklZqjhut|xilvaIMSLGj^V^[LN_bSeu~~|grtnjwusyvvw~snorrz}zy{}}uiz{hv}vigxthjvsP_xbjtyduszlrqtjrzst|v~z|qqsrlr}umzzu~yuwytsjŚmyqjssqqqswxpumk}hmztw~}tƻľŽÿ¾ſĻǽþ¾ÿ¾<:87;ESZULGCCMTRV`_RGACJSQHFKPMLQY`ieVQRTWZ\\^`ba]XVUUY^giffloookbUNV[Z__XT]hcZdnnd^\\VOT[ZTNORRQU[_`_a`UXc]RVULMMOMIUY_^a^OW`_UXXUc[LQRMCA=@??CDHIKNORVZYY]_]\\]\\Q>;>FNLGGKS\\aaaba]ZVWZ^^]ZXY^dhmj^q{hirmpskefga\\_ddfd_aghaZ\\bg_[kvn_Y`iyu^`x~k`USk{q_WYZahipm^\\]^\\[_]XXZWZflhhkhfc`crrhmum`^dlnldUTahc_djkqtidfaamukage\\_cee[SVXXW[jm_ZdaZaffh`Y\\WZd\\OLS_]]mn`^fZRWbcWO_nhfbgkoifkrmlg^[_kniffijkklmieirvqth^lkflmmpvtnlkgnptwrqrqnnpxtltvnopjjpnimseksrfhrvrhcyrkgjotszxsopnprttuogkmhrtosmkjmnplnpj||htxo|nrrn|i_gvoxz|mywuw|pfmp~uklq`Lfuidkmjfnrm|zihjqwrejrgi|trviY_hrkZ[X[ijb_ef`_[VV\\dif`mqi{c^oeeplunOdnafmpsrxh`qfWhm_]nwvv|{wppsyvoz~uqv}yjqwp~}}yrvzy|~yw~mnrm[\\vqZgiYOFUgbYOcp[Th]N\\^\\`]_\\WYTVkp^W\\gjcgamp^aruu|v|xsskf\\mtjaj]Z[ovkppaahnet[mymjglssZmocqjhzgmuZT_msqnik}zyzxtbonVnxwssmaZiuerqhy~ytv~wu|umu}{|~x{|tzy|wqpwuz~x{{txs{xtvwlrjc{mrqot^kpu{}hngyruvxyzz{|wxmlc\\gmn|jdg]_x[hpf}xxymiufDGXKCkdQ[cMNmkTev|rnqrvrcvxvuwrusxunhmmmz{yysvzy}z~mw{m{}yibwykoynZi}l`nzzgqp|rkvrvnx{szyvy}vyomkpjq|vizyu{tpvsutiĖvo{tkqrwsssuttrhxxrvy~sûĿ¸ʾƽ¿ƿ¿ļ¿¾ÿ¿ĿĿ:87:AOYULFBBJRQQV^YH?BHMMHEGILMLS^eg^SQQRTX\\^^\\YWVUTVZakjdekmoqi\\ST^a^\\[WR[klgomc^^\\UU\\]WMJMPPPTX[\\]`_Y^dZPWVLKMUSKRU\\^b^SX``XYXWe^MQTO@C>?A><AGJLJMUYZYY]][WX^Q:;@GMJHMSZ]^__^][ZXY[\\ZVUW[_bimabwscknipocced^\\_ced__dgh`]chgagtuh\\[bn~kcm|paYKTqxiZUXZaektl[Z\\][ZYX\\\\ZZ^gkjkhgdb^juniqpd`dkonhZR\\hf`_fjmtk_db]htqfflb[dggdYUYWRVfocX^b[[begi^Z\\V\\dWGM[`\\bncYfePW`]VTYeg]efklicjomgie_]enjhfefjjjoh_itqtlrldplchkjptnjjhgpwsqsulnsqnxsgpuooomqojkmldntlcnutlbdynddjqtty|tsplkvwqzskflniprpsnhhmprgkoi}zctwmyznuwtxe^jynxtwnwpyxqlmxvpsrUZsrljlmhlyt{yonqwys}ounfhmmzpY]fnkXRRU^f_Ydf\\XVROV]^_^nphz\\Wh`hvmvtTcm]cmvtqujdk\\Sdd]\\ixwswzwprotwkytl{zv|hprp}w|x~spwxwz{yyyhqqi\\]pk\\fhWMHT_WTScgWUiYL[WZYWYXXYQWohWX_elebkpj^`vxw||~vtiy{vx|vh`Ugtjbg[W[nvlmk\\ahgetwWn|{{xruwqrk~smunz~sum[W^mx|pnvtwwpxtenfZs|rnqjd_hrez~kdwww~|p}{~}vtxrs|v|}y~~ypoux{t|xl|uqttmyniu~i`g|mtynt\\kqvz|pi|xpsu}z~z~{z~mqnX_kmxsgdcZaasg}xzrhqlHA[JCkjQ]mXRzvUf{|xu~tqtn}x^jxvwrumnuznfglhj|qupr}r{}}uvzvz~}jbu}q|~ifpudZv|~}osrxjn~ryu|yxxvvxvnieo~iqysj~vuwrozopzpeqz~ppr|x{{{wuhux~v¾ǽžøþſȾýøýĿ½¶ÿĿÿ768?JUYPFCADNRPSWYM@AIJHGEEHILPPYbd^UQOPRTX[^_XSTTTVY_jkdcimoqk^STZa`][YUR\\msnmg^]]ZTXdcREJOOOOQUWY[_^[ccYOWXMJMXVLKQY`c^RW_c\\ZVWdaNPTR=EBBD:7AHMLGJY[ZXX][WSU_Q9?DIMGKTY^]\\_^[[[[[ZZZVQRX^_aliYhvjfnliph\\`db]]_bcb]_egg_blkcbnuob\\]dr~uflxvcVLG]wt`SRW\\_eqtgYZ[\\[ZXWa^X\\bgkmkgfd_atoelqg\\_copjcWYdha^bijpp`^c\\`ptldii^`hkkbYZYSP[kj\\X]\\[]ceee]\\[U\\]OJQWZ_gf^djYVY]UWada]`fikmkjnkeegb_dkififdeghhgabqxqnerolqllfhipoihijostrqtmknsmoqllornonpsliklgitpafttne[fvjbclsusy|vrpkr{uuylkgmnhqqosnhinppemmd~x`sxmvxorssth_lultumnur|wulrvtsqyXsyjrwnlfszutuvzs|zwlgq|{qkysZ\\digVKLNX`ZUcf[UTOLPQ[]^nngzzXXc[k|r}yVan\\brtssokihUMc[V_hturswwqsjmxjyofxwwynoot|yxv||onvvvwuywvgqpi^^jh^dhXLIT_SNW__XXgUMXSYVSTUXYL[n\\S[a`qi]triacvy{wxw{rty}nwuvtmeYRf{qj`aUO\\nwkkdVch_gt|kWo~t||y||~r{}{rx~m_cgrq~xqusjxpfd]dzwmjpkk]jok~ygdw}zw{~~~pstpk}g{}t~{~|xthtv||pvi{x{{xooei{x}xgh}irluv|mr\\qrwx}x{z{ost~|{|jqy`Xonwuicea~nZsfuysfoqN=_PCmvP_pg_~_p~~n}{nunv{c\\sp}p|jlvrpgelibmqnqrsoz~w}kgxsilutihxzvw~|ww~z|x{tyoxsl`_l{jqp}pk~tskrmunz|efow|qu}}{}yľ¸ļľȿƾǻüǿþÿŽĿÿĿ68:CQVTLDBBIPQSVVOCBILHCADGIILRWcb\\UQOOPQTX[^[TQQQSWZafa]dkmoqiZTY_dc]YZUR\\r|nb_]^[WU[cYIBNURONOQTUW\\]\\caWQXXNHO]ZLFNV\\d_TW`f_ZSW`bPNUU<EHFE:7BJSN@I[\\[WW\\YTPVcP9GJKLGQ\\]a^[]\\Z[[[\\ZWXRLR]`]ambVlnfimjkm^Zcc^\\]^_a^\\aegg`fqiciqqh]]clvyokvyjVKENkvfSMRXZ`jrocYYYYYYUZbZZ`chkkhdb_Zetidnk]Zagqma]_dfg_^dfkpfZ_][fpogehb^fijk`Z]XTVcmbY\\\\XZ`ddb_\\][W[WMNSYaeb_fkaW][WX_da\\[bgjlmnmidgid_bjkfghacggeeabjvumfjxsnqkgeekohdhjnusnoqsommmmnmlrqrnnmmmkijgiste[jxphaZkogccmtvsw|{rnlvxuuvilhnnhrpoqmhkoqp`om`s_rxkpvnqrrribkqippkoqu~zsnxwwmzlo~np{tmkm~nyyvzsz|}smewuvqktt^]cd`SFEHTZTS`e\\UNIKONW[\\nmfysOYc]n}yTbp[axoovhkqiQJ_XQdmmqsssuqrhg}q|}ofuznrxunwxmyzp||mnvuvuuyuqgppi`_de`feXMGR\\QNWZVY\\dQNSRZTQQRXWK_fSR]d]tlbvlgfkwzvusyuzmuv|yrxosp`_RPiyjj~_YPO\\mtfh\\QklXhsxcVr{n}xxywvdkrvyvmsoitkh[hjzqgglwiZolrsdfwyyt}~t|yx~mxun|tfqiz|svxyz|z|mrrwysythzq}nmicf}uvjqwotovyrkobvrz}{tkrp}}qppQmtutmhf`~~z[gmzxtfjuY?acJq`auunfw~ro}yloslykVefwn}grk}tjblqa_rxjps~{k~{x~}mq}nuxxvz~|~|{{{rpj}pl^[qyjpiz}nlsqkqmrsv\\jns{{ýǿɾľſþÿĿ½ľ8:>HQRLGCDGNQRTWRFBGLIDAAFIIINW``XSPOOOOOSY[YRNNNPRX]`_XXhqmoqf[\\_`de`ZYWR]s}ob`^]XQU`]JDJWYSOMLOQRTX[]a^URYVJFSd\\JDMRV`dWW`d_ZRV^aSOVV:ELGG<6BMVJ=L[]\\WWYVTO[iK<OOKKPX^`a`\\\\ZY[[[]XUUMGS^__eiZXlgdklhlfX^fa\\ZYY\\`]\\cefgcouhekolc]aitysovvkWIEFZunVMPTVYcnnjcZXVVWXS]_W\\beinjcd_\\YjpchoaVZcnob[`dghgc_cgnp]Z_[akmhcfc^ekikk^Z_VP\\hh[Y]YW[beb_ZZ\\YYZTPPTbjd\\cle\\ZZYY]`_][\\`fjknof_dke_`ffeghc`cgeccbiqulefm|sjokcecilggklpqpmorsllmnonoqsqrmlklkkhgdmunb`krnf_`mgefgnvwtvzzplrxvr}nhmioiironplimoqnarjbk`jrkjsnnoprmdjlelkkonv|}st~utlm}skwvlmmv|l{xwxru{zqmjyspnorujbab]PB@GTVML[cZRIEHJKQU\\mkasiFXb`svZks[bzhjyajwfPL]TKcokotvopsqlh||woju{zkplpoe{zn{{inwtvuwzu{nknmnh_cgbgfYRJOXSRURNY_^MKOS[SMMOWZVdaQP^c\\smixkhiok{srgytw~iqv}yspz|mktyYYOIm|wejv[PNR\\ko`cUQwlXinr`Wyk}sv|joxxmjqngonh^whw}hcdsYbshy~lajwspzw{r~|uuplmwkq{lgjo|}}zsyuuvuonrysssk~yp~~khdebq}wxozvurxxy~ohltqpw{hqq}|y{lUk}urnpl]|}fYpvuikweGdqU{ke}ypy}ywewwndqgssZW\\kp}tm}oszppcarn]c{njp|t{x{y{|w}uyxy|y}ohilk`ayujog{whnvvqmpnk\\m~qt~|þ¾¸ľ½ÿ¿ýý¹;?DLQMGEFHLNPSUTMDCFDACEGJKILW``WQOPPMMPRV\\XMIKKMORVZ\\ZX]jrjfmf]accegb\\XZ\\aqtda]XUQXbXIMY\\RNNLJLNOOTY\\]YUUZNBFXf[GAJMQ[dYU^b^YRU\\`UOUT:DOGI?6BQVC<N\\^]WWXUQPfmDBVRKL\\_^aba\\]YUZ[]\\XUQHHW]^emdS_iadmifk`Xbe_[XVWZ[X\\ddfeftthhmlgb_eluuruwiXLFCMhs_LKRTT[jpjidZVTTUVV]\\X^cfineab\\\\ani`ihWS\\hrj]_fhggc`_entlZ^_[bggbbe^_jkkpl\\[aROajdYY\\WT[ba^^YUV[^YRNP[fd\\]klb\\YYY]^\\]]\\\\bhkmnh^`gh_^dfbcif`abcdd`hponljkm|shmjcechjhknmmopoorrjlopqsrrrpomlnqnjgeboumhikmqf`ghddfinwtrvwtmlwvps}gjmlrhhqomnkkoopnhrdibbcpnhrllnnopdhgdiejlluv}|qwyporysyfuzlloq{|rpywwxrpuzvoouvxoppq{zf\\d^OA;CSRGHYcYMEBDIJLS\\ih_maCZabvxkuq^g{bg{ae}hIL]SE_mlppvnnvrqirwnpy{skoukj_z{oz{ipvtwv}}uynlmptlbejgfi^SPOTUUUMJY]WKEIT]TLKPZbdh[OQ]a\\pjnzoblvdwwixt\\wps~cmt}znn|zldylWUNLozpaklUNPUZhm\\^TZ{dYiila]d||rt|ur{{pmqujjqhlydyvadb}tTsok~sf^q~pps~zqtoyz|ynsj|x~{~}pf}wnk{ud|re{|vyw~n~~xslslqxqrrqymx|kd_cb`|||p{mz{|~qfm~nqvzkn~|yt{~nbd}sqyv\\tpYjxwmnulPh}biq}|q{}clwsaiggrePR\\|jlszc~gqlWcvj^ovjov}z|vw{uxz~ieplp_puojnnofq~rlmmwe[twvx|~¼ø½½¾¾ƽž½½¾ûýÿAFLPPG@FMOMLPRPNKECB=?EIKIGMXa_RNOPOMJIPWZWKDFJLLOSWZ[\\^`hngdoj_bfghid^Z]aan{e]XUTXZZSR\\bZJILJHLMMNSWXVVWYYG=GXcYE@IFIVd[S\\b^YSUY]WPSS<BOGJA6ASR:=O\\^]XWWSOSkfDKWSJQ_```ba\\^WTZY^]YVMCJZ[^noYSed^emffi[Zba\\YUSUWXW^eceeiwsfiplea_ioqqrsoZIHFGZpiQFJRTP\\pmgkaVTRSTUY^][afegh`_]X\\hlb`e\\NSajpc[chihc]Yaksud\\b_^dea`e_ZahfnwjY``PWhkc[YZWU[b_]_ZPP]aWOLTbdZVaje]ZYYZ[ZY\\\\Z^gklmh_\\bdb_`cccfha]_`acdakqjhnnlpzsjjigefhjlnnllptporqglopqwrrqomnnsvnjgheouoellnuh`dfhiiiq|oouqijpyqjpzdnlntggqlllklpnpomndt^fbppirgjllmqcgeegaghktuyvup||onjxnwrk}xlmpw~||yowvtwvpptypkqxq~}trrvdWg`L?8APOCEUaWH?<@IOKQYa_]jYA]ady|vzrclz_g|c]zsJI[UK`hlumuukpttlk~xlpy|mjixpl]w{qvzjpusxzuwpnpvzlkjlofldWUPSWWVNMZ[OHABTbZRJP[eofQOTZ^[ogn}s_kxfkwjnsYpnm|_ivywko}|l`x}v`UMKYlxk\\icSMSWVekXTVgs\\Zkeiddubu}}nr|vz~|vw{riqjuxf|k\\adyibxdryfab|~hsuzz|lmxkuxurhodvvwy|twzyueuwqms{gq~gy~s}ztytymvstunrqv|mpzoge^nZy~rnvlp~~vr{urg{tk|w{xv~sWxs`mwbl{|onwvUhqky}{vp}idtyuhcj_imWLSjqv}i`tigq_Xhuei{|mrr|{pw~t|{|||xei|swgvs~rnu~jm|ulkzpd_wxzżľĿƺüŽĿ¾Ⱦ¿¾ÿý¾HLPRLA@MUQLLRSOHEB>=>DILKFL\\d^MCNQPJEGLSVRICEFGIKQW[^^^]]ckfcnofefhhhebabccmdWRRV^[UU\\a^VIHKHIKLMPTUTSW[\\TB<HV`WDCIEDQb\\SY`^ZUUX[XQRP@COFMG7BWP9>Q]]\\XWUKJWodBPYTKU``bac`\\_TTZY`\\[XF@O[XatfQ[f_]died_U[`\\XVQNTWVYbfbcdmwqfiqmebdnpqsrpePBBISgl]KCJSQL]nggj[USQRUY^a\\\\ceadd_^XS]he_a_RLVcih_\\bhieZZaekvp`dga`ea]cbVWddeu{eXc]Rakie]WZWTZ_[]`YNRa`RLOZe`SWgi`ZXWV[WW[ZXZcjikh_Z]`^^___bfhc[Z[^bdddjmffmojrvrliigffhkoqnknprnopoimnopvrqqmknquskilnnnwrakqpulbdhnomkwvgotlbjrxmgnsaonopffnijkkloqonokh{|^hbprjrgfhjjm`gfge_eeispx|ooqlmkhzxkxnq|rkks~~|{vnq|qpxrortwjipvs{tqtx\\Un`D86BPJ@CPZVG9:>AOMNU\\\\^eM?eccy~~||rgnwbi|gTpVGYYWcdnyms|kjpxvgt~jqu|}zkgdowzp^qyptzkqtpx~ttsss}nspmrkhgd[TPY[VUX`]MIEDTfdXLR]gq_JOUWYXnelt`mvheymfq\\hlgx]cxtqhq~kcs~r_TBEgkskVb`RKWVSfdQO`piV]kbiighbtyfp}}~~}|}|{xqto}zlxdZ_ilmon`vs\\]rw{~{}noxsyxxpwjh|}phrvqhei_nxttwnszszfxnvwronoiu}x~u|~v~zo}uopotrmypjiZxey~x}x}}xzrroy}}qhxvww~Xxilzny~rpy\\mzxz}|irmbkvtpbe_chcONZtfrpm]{dlj_Ziwiv~trwt~{|{}{wwuz||ngmqutquwu}l}~{mus`ixy~}ÿǻżǾ¿ÿľþLMPNE?HUVOLPVULCCA;=GLKHFIZf^K@FRPJCCIRTNEAADFGJOSY^^]YWY`ifbmqkhhgggfdfffdl}cOOVY\\]^`]ZXTONJGIKLNRTTSTZ^\\O?<IWaUFDHDBL`]VX^\\[VUXZYSPMCCOHQL8CZO6@S\\]]ZXSGG\\s^BSYTMWaaaac^\\^RTYYc\\]W@BUZ[jr\\WeaZ]eeb`WV]^XWSMLUWS\\daa`etymgmoidflnpnqliaI=DS_iaVHELPNObjdheVWTORZ_c`Y_db`bb][TV]c^[`VKQX`dc]\\bee^U\\ginwmfnlfcb__aXQ[ebhxu^[f[VfigdZVZWS[^Z]`WMYc`SOT^cXP[jgZVTUUUSY[VW_fiihaZZ]^\\\\]\\^cgc\\WVW\\deddijegmnpqrqihnh`ekopqnimpolnomjnnmpuqppkjnstojknrqmwvdovrsnffjnmlltohmpjelptifnmapqqljekfihhjorloonn|z_ibnrhqidhlhjadgja]cekqqzpjiu}uemiixlpwkvxjfky{{wpluxnqroprvsdgnuz|vmqu{zY[r\\?7:ENG>BKTTF67@BMNMX_ZbbH@mj`t|||{qijqknzjSdbIX^a`br{qq{pjmu|ko}nnly~wkebk~{tycnrqsznssmw|puxuvmxulqmhdleZSZ^^`cb`SOQOUge\\VU[im]HKTWTXjeh|tdongg|}keoecgdq\\_xtldrnisysgYC@orqlX^^PKZSVj_ISmr_T_laikkact~vamzy~y|~{|~~sx}{s}}vrbZ`fjoscdupY^}s|vzzvwhv|puwwlsggxvkgrspc_d\\j~wtrqiowpz}jpmqusro~wey{~~z~|||sqor{zmv}tnk[wq|umpzxxyx{mcwvwzftwsxu{wv|m{~y{}z}|mlidkpsti`^__hXOQhukkxwWnrcij^^xzt}|n}uwxy}}{v|uy|~}~il~yfpyus}wv}ubuy}{º¾Ľ¼ɾƼȾþ¾ÿ¿OOLF@CQZULNWYQC@@BBHOMGDIW`XHCFNRHABIPRMC>@@BHLPUVX[[ZXUYcjigmohhhhgeefgihffv{cPQY`bcdd\\Z`_VMIGJLLPUSSSU\\]XL<;JY_TGCEDCL^^YYZY[YWXYYTQKDEOITS;F\\N6CT[\\^]YREG`tXCUWUP\\b\\`cb[[]SVY[c[]U>EVV]ppX_i\\W]gb]YTY^[YVPIKVUP^c]``jytifmphdinqmjmcg_@>Q]d`ZPEHKKKXhgce\\RVSKYcdd[V`f`_a`]SPY`bYX[QKTZ\\_^X\\ce`WT_gixyikuqebcbbZPR_d_jxkYaeY^gfgbSUYRQ[[Y^^WS^d`VQX_\\RQbk`USRUSQU\\WR[bfijdYVY[[Z[YX]cd^XUTU\\eeceihdhlmppqmcltb^eqtmnmjopkjnnklnnlpsppnjintqnikpvskvzjqwtsojikmllmrkhllglnokafnmfutqkndeeidddoqjnppozv`kcktgnkcgnfgdagm_[benos{}lfkvvmemhlrdumj}pack}yzrinxulqqnqqslacov}{oglp}t_frZ>6>GLB<AFPSE42BJROLabXh`AKvl^p{||zqlhlorwmY^|iLYei`au|vpwtlnoxqowtjgsulc_k|zmz|hjqqt|qutkvzmv~wy|myhnoh`kh_`aeijicc^X[[_gfbaX[jm]KHUVOXheestlrjgp~~whejna``i\\]ttkboxrouqspcQBjytna`]NLZOYlXG\\qhTUbocikndhuxvfkzw|s{~zy{{zy{~}pu|x~}o_[eepurblum_d~|rsttur|veu~ps|vynshhvvgguro`[}b[i{xuqlblrjv~oh~nmtvyq|hqtv~}w}}sopw~twyywsp^wt|pgm|yw~}ytxf^uv{ws}xy{yz~xyy}sy}vogekklqwa\\\\X`]UQ_uexqnu]d~e\\chckw~ox~rvtu{zxx~t~{w{|~{ixsexzxv~vu{}yz½¾ĿÿǼþƻÿȿÿþ¹ÿPNHBCLWXQKRZUJ?@CHMPNFELV^TC?EKQMADHOSLC=;=@BHNRVWWVVUVVW`lpoolfeffgfffgjifeuzeSRYcgfhd\\ag_RLHGIMQQTVTTVXWWP?;HU[TMBEFCL\\][ZWX[[YWYZVOGJNQKVXAGZJBFQY[^_YQFE[uVDRUWX]b[Xba_YVUWX]bZ\\T>ESS_ro\\cgYV]ca[SS[][WPKFLWWP^d^^coxpfhonfflnoklnbgS:NchcZTFEIKGNbkeb`TOUQL\\gf`WVce^_`_YPP]b[XYTOOSX[`[V[cdYQU_glzzkp|qacdb^QOXaa]juaVec]gcbi]PWXNO]ZX^\\UW_daXTY]VP[jfZURQUSQWZRR]behg^USWYWZZWYab`YVRTWbebcdifcgmmooohdts^bmzsjljjrohimnjkmmlponomihntomilqwsj{zjqtssnllpnllnojillhqold`iojjxuoina`fh`\\^omhlopnvvakfcwfdncjnghfbim]\\bfnqu{{hgrtoffohjgclbn{d_blyymfpyrkrnlrqne]diz~zxhfjn}odinZ=7=GL;8ADNSE4/@PWONidWj_H^zl\\mzz|yplcgsuvo]^{pTZioacx|unvumnmswopyhdm~tma\\izyks{ifrtryrvrhuxkwv|wq}cjpegjcfifhntmfefg_afhgifZYln^MHSWPXefenqrolkz{ofdim^\\`dX]kpjaittvwursmaLfzypmdbNK[O]fPGik]VZixhkioknuztuij}{uzoy}wv|~}{}{yttvz~qn||zte`nuyupiqsljk}{tr}trsq|wds~qryv{nrihuwcjwsn^X|~a[izyvqi^jmgu~qc}smty~uzlotxw}|xrpty~xuw{vqk{xw{x}oclyzv}zzxuvw_Zrv|wy}{|{~wxv|qwxsgdkiglzjZ[XWYYQ]iuouiq`^sq\\Sdicy|vuowqpnu||qxt}~~|~tvy~rv{s{wyvwÿ¿ÿǼÿ÷ȻǿÿĿºúſQLEBKW\\VMLUYMCBCGOSRIBKX\\RA;BGLPIBHMROC99;=?DLRTUVVUUSRST^oxsnjccimmjhfgjkgeqxgXX`fhfb]bjhYMLHHLQTUVZXVVSPSRC?KRWTNBFGDL[[YXVW[\\YWXZVNFNTQMW[EHVFFKQXZ_aYMEH]nQFSSW_^^RXf`]YSTYY^aY\\S?GPQdvnce^TW`c^TPV[[ZTLGEMXTQ`b^_fpujekpiciomjijghmG?foeYVJCGLKLXhhba[MMUOL^fcXOZeaX\\_\\SPV`_WWUNLNQVZZYW\\c_TQW`hqyuozibia`[LS`a[]lmZZgc`e_biYRYVMO^ZY\\YY\\_dcWT[YRUci`XSOOSQRXVOU^add`VPRUVUWXVXa_XXTPT[cc_`cgdbgmmmmjejyo\\fpzskljlsmfjnmjkmmkomknlffptomhnttqqukrrrrnmnpnllnnjkpomwnfaflrfmxumil]aifZW_nhdmqrjppcmhcvf_lhrqkkhioi\\\\bgmtx{ycgtrgcntkc[bdetrZYel~xvfiszrksnmspkc\\hj}zxobdfk{wkfllX>8@FK:7BEOSC3.?XaQVseYl`Uhzk\\kyxvxuol^_qxyo`]wv[[lsfew|tnsumnmq|skmddt}tm`[fu}yhkxjduzoppxpfuukx~sxur_imbfg`oulir~uqnjrkechist^Vmx_OLSY[Zchglorqkl}vnfdil[X]cX_fkfberuxwxoopo[et}trjfNP]UcaLNlf`[cl~nkep|rrtursmjs}uyoz}vq~}|}zrxy}{|zrkityz}{smwx}xskqtqvssotw}|zvvvpoq{zdq~vstx}otoiv{bp|to]^{~`^jz}wpgZjkmx~vez{os}~}rwzyx}zsrx}svx{vs{zz~yyvl]lszw}wyxm|{u]Xpuyxz~vzx{s|vuxkajiedtuYZXUWXPYfxqtkleX^x|gRVhdjvtjwznjjpxz|psv~zxurzyk}|~vwü˿ƹɼſ½ŽŻĿPJCFR]^UMOWUG>CIMTVLDIWZN>9?DGLMJJLONE;78:<BHPSTTTUTQORY_epulghgkppnkihgjmh_hulZ^hgfecink`UQOLJOTWXV\\\\XTMLORIEPQUTKAIHAKXYYWVU[\\YWWZUMERVPOWZIIRDJLQVX`cXJCL`iKHSSYa\\YMYg__YSUY[^]Z[PAHPVjxmdaWRWacZPOVYWVQHCFOVPQcb^`iomefkmfeknjhiihrb;ZzjZTOECKQPU`hdbaVHLUNOagbQL_h]SZ]UMP\\aYTSNHJNPTXXST]`WRSZaisyrqdbjcaUL^g^V]khX]ifdaZeiVSUSMO_ZXZY^\\]fdXU][V\\ge]XRMNRPTXSPY_`dcZOPTUSTWVWYb[WUOPX`ca__ab`ajnmknhhqwi_jrvplliosieknlijmmknkhokcdqtolgqwroynkrprrmourlllnlinzrr{nebjqvgqvukil\\dicY[aj`bmsuehpeohgvh`jnvuoolopha\\bimy}{tahuk`gyyjZV`_lueWXhl~wo`lw{pjtnntmjd`jrzuze`abkxpgfnkW><NJH86BEOSB2+=^gS^zh_oibkzj[hx}sruqnl[Zmv|qa\\otb_jtmgqytonrnnnm|ykvrg[jysk^Xdsxuegvi`w~llo{nbuwrkzzopvt\\hh]gc\\w|nlu{wxrwymeik|hSoaPUU[c]`jihkwq^l|pkedliWQ[bYafhbcdp}rvxrjotjhq{wpreL[^\\f^KZiagYlirjaqxvuryrlrmiv~uvuz|skzyxuotty{s{{ugbnvwywsovzw{{zutwr~wsryy{xz~zkjqy|fo|}tq|owvlwiz}wvai}~^`j{zpcWjhu{|kwss}yr~wo|r|xvu~xs}}}vyxypmTj{m{{yzytvxydvzrYYlu{y}t|{~zvwuoxodjneai{\\XWSVYPSdkxtmbgWUk|lUO`idx~rikxqgcitwysq}~}wyup~uswu·ɺʽĽ¿ž¼ǿȽ¼QIGOX`_UOTTLDBJQRPN@@S[N<5:ADIMJJLLMF;679<?DLRSSSSQOMOXekjiigiptxtjfefffimeWbxsa`hfhorvqbWWZRIJQVXXV]^WQIFJRNMSRUQIERH?ITXUUUTY\\YWWZTJFTVOQV[NHNEJKOUVbbTFBVlfJIRXc_VRO[g``\\XYX[][ZYPEGP^r{naZTQYc_RLPYXTTLCBGQSKUfb^bnnfaflhchmjghhhnvWIv{_TRIDGQWUYcfbc\\LCNUPWeeZIPcbVSXYQKS^\\SQMGGJKMSVSNR\\ZSRVY`mzvnxxehifaRUggVU`g`X_iih\\UggQQSPIP[YYXZ`Z]ifWV_]\\aea[WPLLPRZZQS]^]caTMQVSPSUTVY_VWSMOZ`b_\\]^]\\dmlhklamskcalsrmmjhspfglokhilmijigqkaeqrnlhrwnrzjksqrqnszrjnmomksruwogfmtwlsuukklcgja\\^bdZ`osudcpjmgiqidmr{}tmoplpk]alnu~o^mtc^pwg\\\\b^lqaT[mm~ul`qz{mivoqtilfgqttr{]]acgmidhrmX@D\\NB58IKORE3-FfgWfyjhrsjlwfXcx|sopojm^Vkqzta_lnddirphhttpjnliqkynnzmWcvsj\\Uaprmdlvf^t~lgl~m^trzpmxqloyw{ZbaXfaZ{}pouxspoknPnjSZX]hcdnmgk{qZo~khdhpfUMY`Zbfg^`dptisxvglttonvtmvjIef_gbQad\\g[qnpf_quvxlppkoghx~ux{{}sjz{}}~ywpwrw{|rx{vf`gsuurorxswz|zyxxz{u{y}|lkrx~kpyvqn|uqxs~x~js}bek~m^Znn|x}t{xuyu|~}s|ut}xw~x~}tx~~r|~~lmOmt~lw{zstsqvs^mxmVZjs{y~~}q{~wytsrqridodaa|eTWTRXSI]aro_b]QXunYNZhcmsgcrun_anv|{xwu~}u{uyw}|ºúĸɽ¾ĽºɾQKNV[`^VRVQGDHOTTMB9FWQ>68<@FMNJHIIE=535:?BGOSRPOMKLPX`fea`gpuy{wmddddffhlbVbzvcafglvvnf]YbaTKOUXYZ[a`QJE@ETYTQTYOIKWF>IRTSSVRY\\YXWYRHHWWNSVWQIMGIHMUVg\\M@B`yaIKTakXTNR_gb`]\\]YZ_\\YWRIHQcx{l]UQN[cYKIUZSRQF@AHROI]f^[dok`ahidcjkgfggivvTbnWTOGFOX[U[ee`]QCBPVV`dcQDVd\\RUXRKNZ]VQNGCEHIKRSKLVYTRX[Yat|rk~qkoig_U`lbQWc`YYcjliXSe^QQPNIUZUY[^a\\`jcWXbb`a`_[TNIJTX]YQV^\\^f^PQXWROSTSTY\\TWQLQZ_^XW[ZW^lohffdbvn_acmtqiifhslcgmojfflmgggfriahqookhprkyvhlsprnpwyrinoqmns}qzrqjlotsptvsnpqjeicaagbYbqoslbnnjiklffpsvmpmiuq^`mps~jaspbfw~tfded`kpfObpvutmbt~}livousdmkmtsqpx[Z^acbcbfqoYDQbO?9EQRPXO2/NhdcsvjnqpjlpaWavypljieidXhlsub`ke\\fknrjakqqghieskqqivz~rV]sri[S^ongdpucZpj`hmZpormpvhkq|vtY\\YTb_Yz|qqt}zull~wWox\\\\]dqrrqmio}pat~{jiboubUOZb]dhd]_bopdnwzklw{nmtpnuoQnpbfe_i`\\hexjd^strxekvolahzx{wj~yz{~{xswrvx~wxyufcdovqnotyr{yw~~z~zqyz~|}nlrwquw~ztnouzw}vy}~gikjZ`swx~~z|z~{x~w{yy{|ssz|}~p}|~xliOomzwhmwznmnmtqZhtfRUgs{~sz~~~{rw|uysqrsxumbkeb^tmRUROUVDVY{shd\\bZPdraRYfccxtb`issaYit{yzx|}twĪƻƺµžļɿTOU[]`]VRSPJIMRUMC=BRTB67<=@JROIECB=6247=BEIOPNMJDFPZac`\\[apyywuofcdddeffgd]k{sa`cfmuoeefhlaWSUY]\\\\_d_MB@?EXd\\S[\\NLOTE>JSSSTVRWYXXWVOFJYWMTXTRKLGIFKTXjXC;JiuXHP\\ihQPMVcgeb__ZV_b[VWVJJWixweUQNL\\aSDKWSNRMB=AIQLNadYZfng`cfcbfhffgggk}s[w}\\RQLGKT]]X_fb\\UG>DQY^bb^KG[`VQTTKHU`ZQNICCDFGKPMJOUUPVZXXexxjo~lnmdg^Zfj^SY_XV]gpqeSRaXRPLKHUVRY``a_di_W\\cca`ab\\RLGM^^]WRX\\Y_eYMV[TPORRQSYYWUOMT\\_ZRUZVWfniedc\\kybZchpsmefdfpjbgmokeclmefeetgahmnqkinpp|oiprnnkqzzoilqqmpryqyntopqsqttrrptxmdjgcdkg]fqksvdkpigljdiqstonijxo`alpxugfqmfnyzqfjjdfipoJpt|lxmfv~iivotqhpnwtntot]X[^^^^_gso[Q`bREDQZ[T_T.6\\gboxqlomihgg^Vattnh`a_ah_ehitg_nfRdmipn_blpibdbqmgxinqypZZprh[OZpkcbpubWmh\\d|mZokkhru`dp~w~m[[MMb]Xzyrrrvlo}~jthdei}zqnqy}ofzrikcrv\\VX]eaef`]acntikw|vq{xkktqrqq_svk`blradptdbatnmxcn|oi^m~{z{kz{}{xwtwt|}{wxlccqvroowxvwvy{|qw}zqpqtuww}x~qkt|x{|~jnoi[ftz{}}w||}z|}|}x}{}un|xz}vvvwkdPpivmegqxmhhkplVf~n`PQdq|}}|{vt{w|yz|~y{vw|uzurq}ozymcjhb]hqUYSKLVGKUg~adZ[_URlhVXdd_i}v]_glrgWbp{yv{z{s}{Ⱦ½ýɼøĿŶþĿľǾYT[`^_[UQQPOPPRPH>BOVG637<>DNRMGB>:5357:AGHIKKKIDAJYbb]Y[`hsyunkigeffddcdffjrwrc`cekpmhnrrl_YXW\\a^^_f\\F>?EN^iaYfcOLRTA:FRTTSSOVWXXWTKCKZVNV]PSJHFFEKSYhO<BUmnSLXgk^PMOYbfkde_TWddWTYWJM[mxr]NKJO^]LCLRNNPH=:AKPKQb`U\\ileba``cifbejieonenRPPMKS]a\\Xaf_UN@<GW_bc_XHM^ZQPRPEI``RMIC@ABFHLLGISROT[UR]mvnhvrhngbf`ahf]VXYUXamso\\LU_VRNJGKSST^dbc`cd\\[`ddbcgh^RLITed]US\\YXfbROXYRNOQOPSWWVSNOV\\\\WRVXU^olcdd_`rrVXeiqqhdhddohaglnkc`ikbebhsc_fimuiimrx~xikvrllgqzwmgkrplpqsqulrrrsrovtppnuzodjgchqi_isinshmpgekjdltq~yvqjgoxlddlqynhjnkirwuojnlghhptR~zz|l}oku{ghspqqnqpzrnxpqaY[]]\\\\]kvm`cld[KGYbc]eX2Dkg`qtfiqibe][^[cnmldY[Y[hfcicmj[olJ]oinob]gombc^kscx{lhhtmWUptdZNWohaarvbVhgZ_ul]qjgisuYYnxwg\\ZGJaXXysquq}}skt|}{sohszss~~pg}onsewxYYbapgcfYZcgmuymmrzzumnfx|qjudxt[awqfs{`ckqgjwwcs}kd\\s}~~n}}}~z~{nx~y}qciyxvrrxxzx~x|~~swzyx{lrvzx~x}zr|irzy~qtwk_mrz}v{}{{x|z~v{~}|z~v~~zlv}}xx~zquzk~_Trdsh`fnvkgikmiUf|k]ORfqu~{xzizyvx{~vyyx}yxwxxtzvxqommghlc\\`oY`XHGSNESZh][XZ[MahYU_feauu`_dfmq\\Zs{ry}|}u¨|ýÿ¸˿żþƹ¶ſ^\\ab_]XURRSUTPOMEBOTI8589<BKPMHE?84357;?EHIIIJIGDJW__ZUXahlotrlhhiiihfecceglnvwhacekpmlsvpf]ZZX_g`^_h]C<BOXahc_kgQQVU?9DPSSOPNSVXYYRGBLZVNX]NSKGFDEJRXaG<H`oeQTdkfVPNTYafnghZQ_hbTR\\ZNR_numZOLLU_VGDMPMNNC:;CLOMUa[Valhca]^bhiccilgethl~aMMPPR]ec\\Ybe[PG<>N^deaZOER\\TONNKBQeYKHC>>@DIJJHDKQNPYXNPcqpjo|vhkmeec`dhf^XUSV[eoqhVNY_TSNHGOSSX`cdb\\^c^`bbdegkj`RJM]id\\UV]X[i[MV[TOOONNPSUTSPMOX]YPRURXcnebg_[iufS[fmonfcgacngbhjjfa_gf`d`lo]^cfpveinxzscp|rkhdq{umhkqsnnqqopjnrsrpovtrpkszodhgelsgamshknlpnefkjfnvoxuwqihrwiefmqqupikmlmssqppokkigqy_usoqppxefpolstrs|sp{sog\\\\]]\\[_oskejreaRDXadde^BRse\\jlcfmg`bUR]bgfeg`TTTUbg`gcehXiqJTnlkie_blode^bwhoymfapnTSqu`WPVlf^`qubTc~fX^pkbrjefsoMTr~|sod]TCP^Q]unsto}y{rkuxyroy|tk{wv|jx{\\^hdwjcjSYcfgpw~osm~ljtp{znkrhq^jvjn}waknmfkumavga^}l}}xgxxhu|zyxxx|}yy{}}{yuzxirx|yw{ttxlp|~xyz~pfou|zuz}|yxzz|~~~~wqq~x~yuz|~kypxzwu~y}{|yqx}mx~]^s_qa[fpulgkolk]hvk[QViq~zwzxzuzuf~rwxzz{vvwsv~|||r}tqxvutk|nifkf^\\k]dcKDMPCPWtw[\\WS[QZd\\UZgobouid_eiqcc~|pxyxŮľÿȿǻ´½ƺƹž`_ee`\\VUUX[\\YNJIKOTO<27<<>JTPGCA:3136:>AEHIHGHHEKV^]WSV`jkhhnqkgikkjhfdaacgfftyjabdipmmtuj^ZZ[Zahc]]gfG<IWX^fd`iiSS]T;:DNPPPOMRUXYYOEALXUOW\\RPKFFFGKPU[D@LhmYP\\pj]TPPUYahnleRWhi`OTb^VXdmtiYQPSZ\\PEEMPMMI>:<DLPPY[UYgme_\\Zahkeahnjdey{fuvWJKSW[ega]^ebTK?<IYahfYTKJWUNMKGDIZ\\NGC@=<AGKJEBEKMLVYQOWgoilwwjgof`e`_cfe]WRPXajolfXT_^XSLGKSUT[ade^Z`b_acceikki^PLXgiaZWX]Z`eQN^ZNLONLNQRSSRNIP\\]TLRRQZdk_cfU\\msZS]hmnjbce^cpicghgc__ee`d_ll\\^ddoqkip|{zjavurlehqztmgjpwplpoklilrsolnsrspipuodggemqgipnhksoplcfjkjnvmstuokisvgcgoolsrilomospppqpklignxj}tmu}qokwefmmju{rt|rq{vmsea]\\\\[drqlchqb`UFV]`de^U`p`[c`ddeic`VS]fjdch\\NQOQai[`c]b[cuNHlokdfb_hpdecWvqixjd^ijQQqycTPVje[ZovaRb}fW_lkiticaqjGXx{rmjgbL<V\\Mcogstq|wp|vnqs~w~{tvxpzh`mkuhgkS[ghbnxqrnbo|tlkppygnspivjbwilgmud]~|d^lym}}tg~}k~~|{y{{{vw~}{}tv{mu~w}y{vx|zrtskqxz~wmoz{zuy{||yxxwvsz}}{ywxt}mj{t~}z}wq}yziomvzvswx~{{yv||rszafpcp^Xhqwnipulnjntl\\Wemr~zxrxzwz}mqn~ku{}~wx~tj{pu~{~nqnuv{jspjljhcZm_hlQAIODQXg~z`ZXSXTWg`XZgsjotluadnmos{m{tvǺ»ſż¿µķýƿúȼſ^`ffa[VVZac`VHDPUUPG927=<BPVMEA<61157<ABDGHHGGFIU[\\UPT^hmjddlpkffiihgda^^bf`dtzna`binmmrocXWY[^bca][fmSAOWTWbfajsYR`R8:ENJHSPNQUYYYLBBLSSUXXRQJFHHJMLRTCHXmdSVdqhXRQSXYblvt]Sdjh\\M]iYV^gpsfWRRV^[LCDLNKKD99<CMQSWUV^gkb[VXclj`alod_ivjxiRINWZ`he`^ci_OC<CU`ci]PRORVMHIHABR[OFFB=:;DJIGA@GJIOXRLR_kjfpsheol]`c\\^cfe\\TQS]elokfZYb^[TJGOWZXZbieXZba^adhlljki_STbjg`ZY[^^c`MSbWKKOLKNQQRSPIIS\\VKNVMV^fgad`ZbqgPUbikkeZ]b]frkcdfgb\\^dc^^^lh\\^dekksis{xudczqrdbmpytkehqvpmpmgkhjrriinnpsojmrnegehmmlolfgmwsokdhknnnuloqrlmjuueckpmjtsklpnprmoproimjhortxsmy{ollteeimisxntzpnzzm{oc_^^^ernkecma_VP[YYfd]dhf\\Ya]ba^ii`WW\\dlebeWILKK]g^X_]YZ`uVBdnna`f^eodbgTqxcpga[_cNQp~lRMTffVTow`Pc~dV_hnqwj_\\ngK_}ujkincACYWTfkanzy{~wojwvqml~|usxyscqruolgUbnfbw{rk~mf|jgorvnjrmnzcc{iliou|]^rda{mpzqkj~z|x{uv}|y|z~rxsx}u|xsyuuusoqoint|~tk}|zvzz|||yp{}sskwvxywtqpzsqolouuz{wz~qs|{qr}~wfihv|yrtyt}y~}zwzinkeog_nt{rnz}srxxyneatus|z~~mxzyvpdykz|{x|t|}mb}tty{~mrmrw{oknipjhjYlfduZBENHTZ`wtlcXYUXcvjacivxqsyeaunkvyvt{{}}ùþ¾½øû½Ⱦ¿ýüǿĽ`agfa[WZ]ac`TFL\\[QH?749?AISRJD>5/0368=DDEFGGHKLOWWTPS]fjgdaekkgefggfda]\\`ef]bs{n`\\\\ajlmnfYMNW]acb`^Zeq`HPUTT]feoy]X`P6:FNFEQPNPTZZYJACLQQQZSOSJFIKNLJPNGVcjZP^hpcSRTUX[ds{oTXlkfTWegXYbkrpbWUUX^VE@FMLJH>68<GTSNPT\\efb\\ZUWhqf]epk_^oupq`NHR\\]cif`_gjZH@BN\\bebRMTSSOGEFD@HWTIED@96>HFBA>@GGGRUKKWcgffni^jueZc_W^dcb[RQXdhloheb`_]]TJJT^^Y[fmbW[ba_agmokhkj_W\\hje^YZ^abdYJZbRJMOLLOPORRKDLVUMHRMIZ`fcbdZ`kpVLZgigh^TZ_^hqjb`de^Y\\``]W^lbX[eghgpjuwsj^g{rn]dnqxtjdjstmjojdgehsofhlloqnjklleefijiome`gp{rnidjmqpnrkmppknlvseemojjtslnqppskmqrninkhlquytq|wljpnedgmhotkuzmlzzl{tfe___frjgide`fYVaTSceahba\\YaYaaYjod^]Y`kgb`QFIFFWd`V[^VUYo`GZhobYfc_jf]bSl|bja[[W`MPoqRFQ`cVRnv^Nb|cV_etzxk[YibUi{qjknvZ=MaZYefbp}}zxzqhgqvqkix|zusw{jsuuulh\\lt[g|urkkyvcnxvd|znov}z^e}ilnotw\\bofngtx}qpm{|{tw|zx|x}z}pkyw|uwvpysrnolmmfgr||jz|yvx~y|y{~}zwnptqip{xrrqkjp}vloigrqv{vw~|lq{yiow~~}t}dpdw}zov~v}~}tuopstrx~xu}xsqp{~z|}}|pzzztt}b~x|z}vyr|f_}z|sq}}}pzno{{uoelixrhqcsngwcMDPNT^ctmnqaZXatwnso{twf`ys~}uv}|wx~½þĿû¿ž¼ƻÿſ½Žcbgfb\\W^cc`]TN[eYIA<56>EHMTQF@;0*/8=:>EDDEFILQTTRMKNYfkf__`begdabfgdb`\\ZdkeZ_r{q`YZ^fkli_RHLW_a```a[ctgNRXVX`ggrx^[`R78EMDAQSONR\\]XHACKNRS]QKNFEKNPJKNMRdfcTQaml[QTXXZ]jzybP^lmbUagc[_fmql`YWVZ^N=AILJIE947@PXPKPXbhbYZ\\T]tra_koe^cu}vtiYKIW``fke`cjcL=AMY_ac[MOVSOKFDC>AQXOFGE<47CF>;;<@FEIRNJOZcbbhh_arp[]dVS__]^]VS[hjlldfg`_`]PJMX_ZW]kjZW^b`_cjmlhhmj_]afif_Z[`cdbRN^^MHOPJLPPPSQHFPWMEISEP__d`b^XcngJPahhefXS\\]^lpe^__`[WZ^]ZSak\\UXbhdelnwtk_^k~rf_fotwrjbmvrkhlhcccisldfkloomkjijfefhhkpja`gs}qliejnsponglpnknlvqfgmnhkrqnosqpsknsqmkoliortsut{sjlpkdbjogjpftxkjurm|pgfeb`ipgdliafq]\\bWXadgh^fha`U`d\\injjbY]ghc\\MEHDASa^YUURPQefOQagbYej\\efY\\Tfcb]T[WXMNn}qRAN[_ULmw]I_w_X_bzwkWVgbcospmo|vODSg`Zcdfx{~yvtme_munii}}sr{|~z}qss{nvzwtnskux[qqqzzjiw{}rrtpq}|~v{]iipvltp]knqzgvxz~qto~{|vyzyy||xtwx|na}xxsrqp{qngjkkkcfsz~ov~}zvuyyx}uuy|wrnhn~wnihtyknpffisvnwqdfkppwtr}}mk|zygnx{|~}v}}j||ey|tz~{{}}|z|~~{z~yw}uxnzve~zsxl{ti}bbyvwxjo|r{x|on}shmilzslq~mv|l[L\\YYkqzpo|nbcr}w~woeq}u|~~zuxyƿſľüľþļ¼¸ľºŽddgea[Zchga[XZekR@A>6;GLKLRSD871-5?@<?FGFGKRTSUSMHLVaig_\\__\\^a_^bhhc__]]ceaX`pyq_VV[agkeWLHOY`b````[culRQUSYdjiqt_\\_U88GM@?RVRPS^]WG@CKRTUZOHIDGPNKLKPQ_hf]RTapiXUXZX[`o~q\\Waln_[fg_^chnpj^YYX]]H>FMJJHA848GWVLKS]ee]U][Qi|j]cmi^^iy~xrcVKO^a`jkb`giX@;KX[]aaVLPVRKJDA>;ETUIEIE72=D>99:<>AFNOHHQ[`^_c`[grbUb`NPZXX^_YW`jkkhflg\\bd\\NJR__WVaibXY`a^_gmljgkojcddfgfa\\]cfd^PSaXIGOPILRQPSNHIRRHFISDW`_b\\`[]cjZKZdhfdcTRZZ`om^[\\ZZZWVZYVSdhYQVaf_fhrxpd[_nqacgpuvngbpvohfmj``cjqhcehkollkjiigffhknmd`cis|pkhhlpsooielrmlnowphikkhlpqnowsrvkntollplkqtrrzvvwokqrwiaboqeimdrtijojnxefhf``oqhgmjf{x`b`^_cgokcqtphYcigknqmd[Zahf]ICJHBPb`]SLNMM[dTO^__[alcbcXXU]fTZNXUQIMl|qS@KV_NEkuXD]q]Y[_}rgTUeimmnwsupOPbn_Zdgp~u}ssrg^Zijglgwxjj{zsvx{ynuq|q}vuww~zi|ns|jgw|zxp}zttt|w~}tscqix}isiavy~|~gv|t~y{pv}pz}~z|vwywyzztqtv}m^|zupoor}njbfmhkagtz|}vvtx~zsvzvv|tuws}vnne`uvlmantlilc_fgqtnqfailllunw{lixuvehzvwx~xyo|so}{x|{|x}{tunrk}z{stfnscvzecovk~ia{szw{usthtkuzy}lqg]mij||zy}vlm}v}w~~~xvtyyĿ¿½º»ļý½ĽŽĽdcfea[\\eggeccchiO>DA<FPPLIPSC4542<DB<AJKMNRYZRMIGMXaed`]_a\\Y[]Z\\diha]^^__``^doxq_TW[\\bf_SJNY^aa_^^^[dwsVOQT\\fkjpo^Z^W:9JM;?U[TOV_ZTECDKYVUUOIIDITNFJKT]ggbXP[fmfZZ]\\Y[bu|i_ZbojY`ge^`ehnph][\\]`XGIQOIJE?63;MXOGMZcc^ZZ_UVy|b]ejc[`my~xgZVMT`]akh]`jeN;AW]Z\\`]RLOWRHFB=:=LTKEJK>18B?789:<<=FPKEMY\\Y\\_]X]ihUV`UJPSTZ`^WZdhhgfmqc]dc^SMXb^U\\kf[Z]a`[_jkhfimnkfeeggfd_ahhbYPWbUGHQPGNSRORMIJRNGIKMPX`__]`YaccSV^adda[OPYYcog[ZZZZYVTXWSVedULVab]efwth\\Y]sibgfqtsjcdorjdfqk\\^ekmfcefkojkjjjjhhhjnohbbdis{nhdinqsnlgemsllrsumjiihiknpmryru{iktokmqjisuqwvvutmmvurfafqngijdqnegidnp]hig\\atpkkkhj~igedeimuopzw~wdjpqqpplg`Y^ehcMBFNKNacbWKMKKO\\WO[a_ZZfjb[TRSWzmRSHQULFIk}oRAGV^GGkoQA\\k[VT]laVV_mrij~|~mX_ro]Xir~ro{oqn^WXebfoerrdauy}xnxwrvvkvqvqt~~u~{|}m|qfo~yx{upzsqsxyr|yu{qiw|i|dpee}|}{dr|xq}~lw{rz||{yyvxvsywwqnrx}zi]}v{tklnt}kg^eofi_htw{zzztyvs~xru{vvzuwvkt|wljg]gpnpcgiochdZbaeqmpj]ebkaumn}mjrxrsic|vuuy~t{gzz|{tyx{wso}uz~rpjlqakuhadthp]|}swy}xv~xnus~|srzt~|{~o}k~{z}~}txz|þþ»ľ¿ſþ¾ǿ¿ƿdbdeb]^giiikjfgfLAIGCMUOHFNQA5678?DB>GQPOPTYYOFDIT^cb^\\\\^`YVYYW]eiga]``^]chc`kvp^SWYZ]b_SMXb`^^\\Z]_]bwx[OTZ_fjkme[^_W<;LJ8AY_UPU[YTIJHKXVWVRPMFJYMFLMXgnf[QQamla\\`_][\\gztfb[gteUafc`bgjnme_^_aaTLXWJJJC<36EWUGFS`b]X[aYOgr[`gh_[cpyxmZSVPV\\\\ci`[bfZD:J__Z\\]YQMOZSED@:9AQOBDNF31=?7688:<<?FHFKV^ZRX^YT^g\\PVUHIPQV]^XU]ceeeeopa`fa^WS^`WVdnbZ^_a_\\clgcdinnigeeeghe`ckh`XR\\bSEJVPFQUPOPMJJQLGIOSW\\^]\\_^\\_b]V`]_b`aSJMV\\jo`WZYXZYSSWSRYd\\QJW`^_dgym\\WW^|zacfepongafmmfbjtiZ^inkbbedjojjkkklkihlplffeeitzlfciqqrljegnvmoxsqkjiijjilmmrwryzbmtolonejuvpyxusulqzurgeinmjjidkccdcalgZdih^esomigfg|sedkjfuvo{zw{kq{xrnnlkg\\_eihTHDMSN]ae`PKJJKRSPSbeZU^nfXMHOTppTMDJRJBDk}jSAEY]CMhiPD]hXQP`|f^ZUZnocl}|m_jyhYXp~hmwiliXSUa`hm\\mn`[svwxrqsqsuiyqy~}pw~{{zxwn}josvuwrrxqtmnqwqrztyvokwuotbofmzw}zytep{|rp|xkx~~wqz}www~}tvvsqwstpmox~uf[}ypysiglu|kcYfqcgaissx{su{s|yt~yrvxtzyprvmouujdh_Zjnokcl}xbfg[^bZgqni]^Vg^mpgzmintnsueyttt}u~szfox|xz}z~~us}~svnd{tjl_hqj^Zqgw~xb~uuzwy~vvz~{|wyw{}xrzzſû¼þ¾Ŀ»½þÿfbccb^ajlmlmlfc_MEPPKRWMCCORE=<;<?CDENTOOQU[XNIKQY_a_]\\Y\\_XSWXW_fge`_accdfjb\\grm]TVYWX``YX`c_\\\\[X\\``dtx]QX_bfjlh^[_`X@?MG8H]_VPTWYVQRHJWX^WRWRHMZNKOR^mobSMYilia`d_]\\^iwof^^qv`Ucdc`eknoicbbb`^VZ_SHLIA94=R[L@KZ`]ZY_bPSwdWbhcY[fswo^QOVVYZZbc[Yb`O@CXc^[[[\\SKN^QDD<7=HNF@JL;/6>934789:<BFDHTYYSOUWTXb`TRSJCJQV[[XUW^cbbceli_aea_VWd_S[jh[^b]]]_gjccfkomkgcdfhjd^dlhbZT\\bQCL]KIUTOOPLIJOJEJT\\\\\\\\[Z^Z[Z]][a[^a^]KFJSaniXWXUUYWQQTPQ]dUJKW^\\aagvfVUV`q``afmmhaagmiaeprcYaloh`cecjpkkklkmmjimokghhejtykfhnqookicetzmtxomjjhimjhjlmrvr}xaoupmrlajxwn{xsqvlrzrshkmiklkidd`ec`_g]Wahidhlophdddrxbdvl`{wn}xw|tu{snllmma_hlg[VIQ\\Q[bcd\\OIMQQOOJ\\i[PYlk\\JAGQfrYHAENG@Bl}gSBD\\\\DSfdQG]eWNLbwa[[R[wj^n{woguyaXd}vckr_fdPLS^_ikSlk]Wsts|tetsqsizpty}zs{~}yyuso{vmrnruvltrllqnoivvmwnpjuuuthqmwp}}zvrpfs|wprz|}{zqkz}{vrwz~~wuu~{|{wqusootssqokt{sd]}qlvqicdr}o_Uhs_dcmqkvyjp}q~~zu~}qwwryihsrjnqiacaT_hitcmr~mghcZcV`olg^XQ_\\bucm~mgmtpq|ouqtsxr{~s{kg~q|u~wvw}~{{ossZk~fk^eijbYjlow|dsv|z{|y{u|{ux}up|qyýľŽþþŽ¹ü¿dbbb``ionmlmjeeZHJVVQVXL@AQYOGC==BKPQSVPMQUZWPOSUZ]]][WX][SQUXW_efdb`bdefgaXZgpk`ZXURV_``bb`\\ZZYW[`actw]S[\\afjkd]^__WC@NC>N__VQUYYXYPFLYZ[XX\\SJSZQOPYhulXNTiohddda_\\\\`jrle[dwqYWecbainoofcbcc`[_fZPLMG?98F\\WCBT^^ZZ^aYMcw\\Zae]V]kqpeSKNWYYWX^]UW`[KDO`e`][[\\PIUbOD@87BJG@CMD339:313679;<BHHNWVQMPTPT\\bXMSNBEMSZ\\XUTX_baaceea`cc`_W^fYQ`laYcc[[]cgc_cijlnjcbdfjk`_ike^VXcgPBRaMPZWOMPNHJMHEKXc_YYZZ\\YZ[Z]_XY]`]SGEJUfpbUWVPRXUNORNQ^bPEKU\\\\a`gs^TTVsk`^^gkkd^aijdbirm[Zcmoeacdbiolkklknnkjlnlghhfluxmelqmlliicc~wnvqkkjjfjpihjlnrvrvcptonri`kwpr|tntrmvvtmjpjkmmmieaaia^^dVV_iidihnpgbaejyzcctk\\uqyux{wuzrlkkkkeafmfb`PZeT[d`cf\\NNWQOLIXg]KWhmgQ?@N_o]G@ALI>DozdTCD^]KUbcSJ_eUJKf~t^ZYOfye_m|~tmm~u_avzmaln[daMJS^_jiTnyi\\Yw~pp~qevsqux~xrutyx~xzusoxqqriruufrhrqkkhwpmqlom{uvjttzpn{|{s~lnfwzrnryz~}zpmkz}ytrsw|{vtt}}}}ytw|wqounfknrutnhr~|wqgfwhltpj``ppYUjr\\adtohtzhm}ry|zx~txwtvibotjgkha\\bVTcfzfiouigj]eVZkle^VQXZ[pd`{sflvsr}yrqsrrpvqwoe{l|x~xux{zvms|^a}cl^dckf\\ajfuzhvx|~}zpvx|~qo~nv½ýýĿùľƿûþc`abacmqpomlhedYIMWWU\\[LBHSYUMIDCJPSRTVPMRY]VPVYXZ[]ZSS[[UQPRVY`eddcacdeecYRYfmjcbZOLR[`ec`\\WUXYVZ^_arvb[]\\ahjg`^___[GANGDUa^WSVZ\\\\[JER]_]]b_QR]_WSUbsyjTO`plehida^]^enmhcamwiV^hb_cornkfedddbcjgXSRMF>:@U_NBM]_ZY]b[OVvm^__\\WYdnoj\\MJPVUVVX[XSX^XGEU`ee`Z]^MH[dL?75;GK?<HH5.573013469:>ELOSTQKKSRPZa\\PJNE>EPUYXUTTZ_a`aed`_bdb_^[bbRSfj[]f_YZ^dd]_eiiinibcdekk``jle\\Z]fiPCZ`SVZTNNQMEIKEDJ\\d]XXZYYWY[Y^[RY]b]LCEKYklZTXRLSYTLLQMS``LDJT[\\a`fn]TS\\{zd\\\\afgi`\\agebhjpgX\\bmnedccbinljkklppkjlolgjihnwwmfmjfihhhaiqnuifkkgcoohgkmpswr}vgppnomfcmtptyrovrlu|wnrqckqomkhefl`]_aUVblhcggkng`^lhhxiclhqzs|otzzvu|xokihghhdhmfcbYilV]cdfcjXG]\\NOJRefMNanqaE:K_l_G<@KH=HpwdWFF]aTT_eTLffQEOl|o\\XQLtu[el}uqlv~l`n}z|pfcmjZd^KJS^`jeVpsh\\b|mozlszuuz|vxuzz{}xyytoz{z~xtieswvl~oiyoihjwnrqnorsyltt{inz{zsrkjg}xkqovw{ux|mkhw}}zspnsyyvst{x{|sqr{smqtidjkqwuldj~{rqknpcjsmma`npVWjs[afyoiqzmi{w~z{x|~|zyz|pkfftjbddbW][O_`vteowndmia\\Xhod\\XTVYYeh^v|mlxxy}yrorrplsqrrg}m}~}xtyx~|~smrh`opg]c\\io`^ffmvq|y|~y}~|}x{y}~xnpnqȾ¾ý½c^aefkrtsomigedYIN[\\Za_MFNVZXSPIJPTRQRSQPU_`URXXWZ\\]WNQ^`QILQVZaedccbeeed\\RPZeihdf\\KENZ_aa]WQRWYWY\\]artia^^ciib]_``_]JEONLYa]XVX\\_`YFFXddcfk`VZ`_XVYgyxcU]kohfkie`^]^gmkf^hvtbYcf^\\fpolieggffgfmfYYTLFBCM^ZII\\b]Y\\a^QMcf`^\\WU`imk_RHJQSRRTXWRSXZTGN\\cff`[a\\FI`dG;44@NH9?J<-04200223689AKPPQMIHNUPWdaSLLF>@KVXWTRRU[`_]`e`Y[bda^]^b[NZjdYbeZWZ_aa^aehghkd]bedki_dljf^]`cbMJ_dYUVTONPKDJGDJScaZXXZYWVX[[^XTZ^cZE?EQcocSTXLJTYRIJQOV_YGBISY\\a_fjZRSgt_WYcige\\^bcaamlld[`golcedcbimkjjhltrkgmqkglkjqxvkgofbigggaskqsddjjbctlgekprtxr|vkqllpichoppvtmswokzsqyp_oyqonlgkl^[``]_ejhcfdgmg]^rg[pn_dmgzyix|ywu{ukhhfdehgjnhc``pmZ`^^fdrdAWlYXWUgoUK^rxtX;Kbm`G:CRI?Qsrb[JHZaXU\\gWPjgJAXtygYUGSyfWij|zmlkyyhbtwuwhbgog[cZHIT_bkaXsuog[iyhhx~|wz{~rswy~~|~}xx~uo{xyt`gw~wzhtzjnfpvqvqupvw{ntszwfq|vxilzgm}qlqio}xxp{ztwpicsz|ys~ojnvvsrryv~{yknr{}qmql`aiip~uicc|{qpmpl]fshngbjlSVjqYag|ojq{nf~z}yw}~wknfcuj\\Yaf[T]U]]fcm}tljlvecYcofXZWRWVcnZkul}~~~yrkpqoinqmsh}sy~wqzv{~|rlnwbh|k]eWfyd_bfhq{zu|}w~vzxz~yzxy{}|z}{rlqtt¾þ¿ĸĿĹſÿa\\bilqxxtnjgedcXJP^`]caOLTX]][YPNRTOKPTVV[cbWTXTRU[[QLVc_PIMSX\\adcccdddebUKPZbgihhZFCNX^b`[TNQVVWY[\\artlf]\\fji_\\cc``]LISUR\\^[XVWZa^REI[fffgkb`hk_TZ_m~w_Yflidjngea^]`hkifenwo__g`Y`jmiijeeghjkloe`\\QKKIK[`PGTa_[Z_]SKSmx`[ZXV[fhigXIELRSOOSVTPSXWOKV^djgbaeT?Kf_G837EPC:FF1,32-.022358=FOMLLGEIQRSbdSLLH>?IRWVTRPPU[][X_dZSYbc^]]__VQbh[[iaVW[`^[]cgheeg_Zbccid^gkhf`bd`\\JPbh_UQSPNQGGIDEQ\\h_UVZ\\ZWUXZ^[ST\\abR?>G[hgYPXTEJVWMGLPRY^R@?HQX]`\\bhYOUqkZSYehf]Zaa`^auiib]dkrjdeebbikiggbkxtieotjgnmkqyuhjqd`hihec{yirqbdif]eqldblquwxr|wklilnfcjqnowslqqlo~}nszncxvhnqmkmna^djjffgfggcdke_frk^knY^w|bgnz}xwtysgffedbehlpjc^aroadZSdfnrMKsg\\fckoaVavxuDOimlP<O^SRasod_RMVd^R^jXWl`GF`rsfTKKft_aij|whit{uifusqqbdqph^a\\IMXbfj]Xsmll`n{jcxt~{os|xz{}}yyztq{y{s^py|nskwevwuxtwn|~{ost{~{pewuw~gnqbswjrmam}{umztttpf_qwvxqxogkttmpqwv}zsgjs|ymuucY_hgozhda{}qooohYgtcmpgfxjSTjo[ai{mnszndyz}wnqkougYT`geVZabb\\og{vbvmspfbbjo\\Y[ORV`q_bx~v{sjlsrceytkpkz~|vy~z{zynztw}zpjligws[gWd~mc_jdp}s|~|tz|ozppxq|xrqt}s|zqowy{ø¿ýƺ»ĿļĽ_]cilrzyrjebbb`WSV_a`gcUUYY`bb]QNRRKHQ[]\\^b\\TV[UOX^WKL[f^OJOW[]acccccccc_OIPZaehkjTADOX^a_XQMPRRUY\\Zasvne]`hmka`cba`^PNYVQ[\\[YWV[aXOKR^ghjkjfini[V]buw`]difdorgda_\\bjigfmuvi_dhZWfkhhjlgcfgjosnmiVLNNMVe]IM]`]Z]\\RKL\\wnYWWVWbiedbQEGPWUNORSONSVSMOZ^hkgfi`H;PjZF939JQB@I<,051,.22125:CMOIGFCEKNO]hVEGJ@:DPSRQPOOQWZYWV]_VSZb`Z[[[ZXXebWdm]SY]`YX_egfcbb]Y]^`ga^ijggbfd[YNTam_RRTOMPFJFAIYbe[TY\\ZWWUWW[ZRS_e\\H;ARbd]QQWLBMVSKHLOT[YI>AIQZ`^W`hVN\\zz`RP]ee`Z]a`]]gxeea_glskded^_ijebabpxmegstigrokryufmtc`hihfk|okrjahhbZbkg\\_msuwus|shhfkibdkonquqllllq}wltxln{qhppjpsnddjsqjhefghbcfceiqtgdjZa{suq`u}w{sstypddecaadchpmd\\arogk^Q]dgtbNpo]kpoklhiy|UZrz~WOegbdhtvle\\T[sfTag[\\icTRapwfQQ_srelnsvjpyyvmk|qkoelxogce_NVcmnh^^tprskt~jhy}ys{}r}{~}zzz~vu{z}sgv|v|nu}c}{wxzvrxouwrtll|j|}imlevqltdao|}roxtusladqqrvptocis}qhlsvv{xndis}qm~u_W_igr{fdazsnrneVludo~kctkTVhm``m|psuvoe~v{w}|wruoc^ZcclbWdrlYwgydsxrympmkudUZPRT[pqgm}vmjt{d]m|ylnpvzyr{xtrxjwsmyyokixd}}zck^ewpdreru~sqq|{ir|~jkok}{}vomtwxŰnzzps~{||ɿ˾Ŀ¾þľ¹º^_fkms}{sjd```]ZY]aadhe\\ZY[bfh_OMQQLMW`a_``WOV^VNZ^QIPai\\MKQY]_abbda\\aca[OJPZaegjkTADNV]_]UNLMLOV[[Yevvn`X^imgadda_``WTZWP[[[\\WV]`SLT[aginnjjljbZ_ae~ub`deehureca_^djielrvrf_eaW_lkhlkjifehjsvrraKOTTV`fWJWc_[\\^TLMUg}aTTSRXdha^VHELVYTONONLMRTPMT[_ijfiiU<?\\lSA:9BQMBEC1.64-.230/49@JROFB?BHMNTe^EAFC?EORPNMKLQVXWVUVXVQSZ^YVZ[Z[Y\\d\\bofVTZ^_YYbfdb`aa\\WXZ_b[\\iighege^]UUcuaOTVMKLIMC>Pbc]UUZYVVVWVSWWSXceQ><L]`]YPRSACRRMKKMMU[VC;CHPZ`[S_dQOf{lTLS^a`\\\\_`^Z_pqbbbchlrjdfb[]ijb\\^cqtg`jvtfguskqxtgntd`jhiktwglmfhme^Y`e`W_nqturtwkecejdaglmmrsnkkijqzsjtvjswompllxvnhiq}vnjggiicdfdikrvkbc`n}qagzxuumnsvlbba_Zad^cmle]_lrnmj[S[crqYjq_jqrpqrq|lh}fruoonnv|sib^nk]bcddmod`iyyb_ksxrnux~vtvwyzqvnkrnvwkilmdXcqwrieiwwz|tv}lz|xzxs{uzyx}|snzwp~g|xv|wxrswwkpkumo|zdnhkxpoi_hp{{qswtvsjailkqrqs~m`gvzofktuv{wldhr~jqm[W_ie{saehyzjqo`Xqtfrk`siU[jld_p~twxqok|ttyqzz}~uiaeakemo_atuZllunny{ryvkrlXSVZ\\_qvuqz}zpiqr`bt}tquz|~}{mxulnkjurftxnjfh{|pnlj|~}k}lu~sr}xtlhz|eiv~~gfhgzuyuhl{~xêo{zo}~{žſ¾´½ſ¿ÿþĻþ]cikpx~vpib^_^^^^_abeig_]\\]cgh`QNQRQU_ec_^^UOW^RL[^OKXhiXLNSY\\^`a`d`[cc]VOIOZbeghjS@DNW[\\ZRJJKMPV[WZiuuiYUamj_[cc]_`b[[YWUYY\\^WV\\_PM]adhjrokjkg^]cfktbaefdnwned`^^eghgnsvoe_`YXhnhhpmhheeiltxxhTP[XY`icOPbd[Y\\XNLR^rqVOQNN[gb[XMDHRXVROLKIKNRQNOW]bjhhiaJ:KgfLC=ERUFAD:28711651-09@GOSLB>=DNPQ^dO?BEBEPSMKIHIMTWVSRTWSNMPWXST[[ZYX^__rnWQUZ\\\\Y_hfa_^`_WQTX\\^Y]gegigkg_\\URhubRVVNLLLJ@E\\h^UQSXXUVVUTRUST^e\\F=EVaZX\\TTL;FRNGFJMOSWL<=CHR\\bXP^_NQiubRMTZ\\\\\\]_^\\Ydwj`abdhkqiefaZ]fg^Z^coob_lwqcj{rhovriprddkglqumgkhgpq`^]^`^\\fnnpzsqneb]cf]bmnklpnijiegovpktpisslllkrxspolx|pkhiliddhgkmsrke_hxw{w\\m}vrmkostlaa`]U\\d]^eeb_\\eqomqkRMart`erfjmtyrv{}}uqy|svuvsngp}llggos{vgl~yoz~}wwzuv}}ujr{z{sovvwmcqy}wpopzxuxx|zvx}{x{v||y{ts}}~zym}ys{|||~~ysvwsqjmnv{ozleogmvpj]enu|towtrvsgdkfhplqoxl[exuoeltuvyvmbiq}lok][aidl]jp{}jor]_uoksg_ogZemfeesswxnlqxuqrq~{wx}~|lbjgpqqtqdu|fevrxq}~z|{pio`T_bfnunzz{|sil~lan|{zyxz~voyuhjbuquqhormlev||yrwt|uvwu{fxzpymjcv|c`p}wa^bcuswzhiƿʸäs~|||}ÿĿǶſÿȿý½]gkks}zoke^^___`_`aaejha^^`dghbURSSU[bfc_]]VQXXMN`^OQbkeTMPUY[]^^^^]ahbWRMHMYceeggQ@CNW[[WMDGKNU\\[W_lsqcTUcnbZ^eb^_`c_^ZWWYX\\[WVZ[OTaefikomkjje]aiiosddgghprlhd_]^begknqqka^[W]mhfhongedgllv|u^Q[`Zdnm\\Q^j`WXXQKPZh}ePOOKL`g\\XUGCOYYTMJIGHNQQPMPW]ckgigXDD[iZNMKQWJ@>;;@@56<81-,3@JOURE<9>KTOQ`[D=BFFIOKGEFFJQVVSRPPSNHJORRRUXX\\YU]_jvaOOUZ[Z]chb\\\\]_\\TOQW\\ZW_dchhgkha\\TTpl_ZZVMMLRJAQffZRPTYYUUWUQRRNXa_PBFT^a[]^TPF<HNJFEJILXR@9?DHT^`SPZZITlmXRRUWWY[]][YYjwd_`behkqiee_Z_dcYX`ekg`amumcp}jflrpmqqeimgnqofiidkxo`a_`abekjhukij_YZb]Weqkeingcif`elpmmsicrqihemvtppnl{oiijkiefhekqsoigcnvqf]sylmpnqrqjd`_^WY`\\[^``__bilnoo^Sdpsgbpllny|oy}|}opyurrqtzv{pmxph~~yq{~zwj}}{x}|}rm}~zwu~xxu~{{x~{~|y{{p}x{yxx}rt~}yt{v}|uv}uozikmsu{|siomlnuqb\\qt|}kpzlpsngjmgilgnlujWctlofnrtvwvm[gs{}urzocadijk^ku{~cqy_iwnotf_ifapl^gmvmxylhruqk|}pqyz~v~ux}~vkslt}pzry}thw|}{}{chibghmuxt~svtknz|oqv|}xuv|}|v|z{uhh^lwyrlljkqf~}zs}z}~{}{}o^s{smqdgaoxa[k|oYW]aqru|vj÷Ųµ|{~~|ǿͽ¿þ¾¾_hilx}tlic\\]_``aa``_flhb_`bdfhe[WXUW\\aec_]]WSUQNV`ZQZil`QNSVX[]]^]XXcg^YTLEM_eccjfP@DNV[ZRKCFKOW][\\gprn[Q\\hi\\X`fb__acb^XVXXY[YVWYUNYccgijlnjihd\\cmltqeeggkpokhd][^bdhnolje\\YY]gkafimpfadgjnx{m[X__apwl]djfZWXTNNV`rxYLNMIPbbZYM?HY\\XPHEFGLPQQNKQX]ekeidRGVhbVWXUNN>:8;HG;7<=0(+1<IQVWJ;7;BNULO]S>;DILLFBCCCFMRTRRSONMGEINOQUVX]_WT]aqnXPPSZZX\\ef_XX\\]YUNOV[VU`dcihgnlcZT_tg`b\\UMNNTIF[i`WSRV[YVWXURSQOacYHDR^c[^f]QKGHIIJFGIFMUM:8@CHU_XPOXSKWkdQPRTTUX][YZXZno___aehkoiea]Z_b]VX`efa`djmhetvcehnompqeilgnpnihfbo|ndb`bbfikfk|s_kiYRY_VXkoa\\hj\\_ib]dhkknqa_pnjcdqvpnplmulijjiiejgbltqiggissyxcfunaktpnsjgf`][WX\\YY]]]^^_eknkljjnipkcnmlt{q}{{|}zp{urrt}us~|my}uv|{vv{t|}yxy|~~{vy{{y|oizzzz||{ow}~yzzns|wp|ootimoxx}wqnwknosn_ezw{bw|ioojkqrkihfihrhUdqeoiqqtvvuoVct|v{tmgghfqk`lw{xis}kn}ppvmccdlvj\\etxhzzkeqtnlwvrry}us|rwqv}}|~|w{u|r|r|vy}e`kupjmtwpp}vnnxux|tstw}wwz}tlk]mz|trmglwjy~}yt~{zy}w|}jafsmijf^`hs`Ui}hPV[cqsvrsü¤{|½Ŀ»þýŶſÿ¿ž¿¿¿ÿÿ`hio{xnkga[\\^_`bb`^^flgbbccefge]YZYX\\ceb^\\ZYWPJQ^aSPcoj_RQUVXZ\\\\[YYafcYWRJIWdd_bf_MBEOUZXNIFFIPWZ\\`ioqfUUfmdX[ceb_`cca[VVXXXYVWWWTU_ccfhhjhihie^fop}{qeeggkppjgc\\Y^bchnoki`WUXdlfbiilod^beirzwh]bccjvxokpj]XWUPLQYb{lPKNJJU`\\[U@>Q]YQKEBDJOQSPIHQX`jjdf\\ORae^XTWNHJ=69FI=57;9+(0;GQWYQ>4;BFNNIQYI:=HMMHA?AACKQQOORQLIFDEHKMRY[\\\\TR[`drdSPNSZXW[edYUWZYXTMNVXRU`ddiffnndXVioecb\\TMQVPHQffYSSTX\\ZVWZSXSQXfaSHS_eb[baXMLIHHHHGJJEOUG9;>@IW]TNOSPO^h[MOPRQRY]TV[W^og]]]`cgjkgc_]]_^[WZ`ba]_ceegevpadbjonmoeghfmolhfddsyngcbeehikenwa^ncSQZZUaohWWgdT]g_[cgfgnk]`nhd_ftrknpknnfhjkjjikalptohfgnut|oelqd^kqnkuheg^`^WV[YY]YZ^^]djmihoxscnpdmklyvx~uwx|~urspruwqtwq{|r}~~~{}yw{zvz{~suy}{x||ruqy~}||wpv~}rm|}qw~uky~nilt~xrwrpnnqtjcszxpbxgpjlpuslihjderhScr]mqspsvwvrXav|t}vjmmldq~sfjx}suw}uqsoy|th^ewwk^hxw|myjdst|lorouxsp|qi}zyqqmv||~y|~|}v|~qTm}lft~qpku|rpzw|~}urz~uur}z}yroesy|yuht}o|~|u}yy~~|}wy~kug^nlig}oW^dnaRi}_MSbotwyizĽ½ĺžĽɾſ¿ÿþûÿ¾bhjpzujhe]Y\\\\]`cc_\\]eidcffebdfd\\YYYX[beb]ZXZUKIVa^SXjqeXSTUUWZ\\[XW\\egaXWPIO\\da\\^aWICGOV[VJEDDJRX[]ekmocX^ge][_cdb_afd_XTVXWSWWXXVX[dcbfgggfggigdfmt~|zqeghilmmjhbZX]beinkgd\\SRUgmbdkijg[]ackwzqf`bbfr}|sppg\\YSSUNR[g~{[JNNHKW]_aL<IXYRMGB@CKORVOEGRWdoeabWQYa^\\TJQFOL;7COC88783)-:EPV[YE46@BFMKKTR?;ENOF??@?@GPPLLPSNHEDFGGIOW[_\\QNXc_fnZMKJTYWT]gbVTWXVWTLMWWPU`cdhedoqaT_khffc\\POYYRNYjcXWXY\\^[WY\\UWTU^h`SQ_ge``e_TJNLEGHLJLJEPQC:?=>KWXQMNONR^`SJMOOOQXWQWXU^kdZY]_^gggda__^^]\\\\\\^_^\\]__bigulaf_goninffffkmlgeeisupkbdgfillejl^cm^ORZX\\jm^PUedS\\f\\W_lfckaZdic^[gskhoniojdijijknkcyptlhhgptuulejka`klkiskbea^]ZVWW[^WW]][bgighoyvdnrgmkmxzu{{ns~u||nsrpsr}rnquy~}~z|xt}|z{|zv|zv~x{wrs|x}www}}s{x~~~~}~upu|vyxs}nq}xkhm{}wsyv{qqqsufl{wy}ggufllnsvrnhgod`pgYbpXfytortx{x_`v|s|}jrtpco|yyrjwvx{{{tzo|}wk]f}wocnwt{uulfqr}~temkmorxjzkcxyvpqhwuxou|wrWumcuz{|golqur|~z~z~}ysts}uso|~vtoxy~zyp}t~xv|wyz|xx}}qlrXjkif{uUZai`Ql}^JQizkt~tźþüľƺ¹ÿ¿ľ¿»þûžÿcghovqgf`YW[[]`ec]X\\egdehfc`adc][YXWZadb\\YXXRKR`cYWero`TQSSTVX[YUX_ed^ZXPMU_d`ZZ\\TGCIS\\^TFCDDKU[]^ejnmd]_``^_`_bbcced\\WVWXWTZ\\YUU^aebbdffgghijigelvzxxoghilniilhbZW[dgjkg_^ZQPVim`cjggaUZabkyzncbddkz}rmlf`XPYWKUbokNGMKFMX_i^AARYSLHB>=BLRXWJBIQXmo\\_^TTY\\[[PLOJWK9;IQB=<:90,9ELSYZP;5?B?ELKKNJ@CORJ?=><:BNPKIPUQKGEEGGEIUZ[]TKSa`ZhiOGFITXTS^h`TSWWVXUMNXWRXabdgcdppaZgljigc\\NQ__VVcl`Y]_]^`]Y[]XQVYcl]U[fidbcf[RMPICGJQNLJFMK@;>;>MVTONNNNS[YNHJLNOQSQUXRR^haWX[[]eedb`_````__^^]\\\\[[[`igqh`e[enlgnfeeeillgcehptskafhfjolgjidgkZLSY[eofTNXd_U_cXVaja`gZXec\\YZgnehmjhqwhjjffilniowlpjiihnruslhge`cjgjhmmahec`]SRU\\^US[\\Z`cdfjnvwgnrkmjnvutxulrzws~sqzhtnnrqz}zlmuuvw}y{xvyy||zz}vu~z}xxu~rqvyp{sw{}wxq~yvx}~~~~}~~wrr{~}zs{yvwy|tejtx~u|mztrtsdszuzzcnqhjlpytotieugXmkedm__}zpspxf[v}r~oqyyin|xw{mu~~{u~vr|xn_iywlvtn{ywomjoqy|qbdchknif_sztnsewotip{rm~og~{z{ikqu~{u~~vy~{{rmu|q~{wqm|}~}{yz{z~pvwu{w|yy|yqxxW_dfcq|ZXbf_Ro{hTWj|yjw}z}~rŹſĺžýöĻĿſ¾ûǿ»bdfmplgcZTUYY]aeb[W\\eecded`^aca^]YXUXad_ZYYVQPZdaT[nqj]TRRRSVXZVV]bc`^^YRQZee]XYZQEENV\\\\RGCCENX^^_cjnkc`]YZ_aaabdefe_XW\\^YUZ]]WUWafdaaceegiijomgfmvwusjgghljfjlgd\\YZfijf`]\\WON[mj]ekeb[SY^bn}zj`cehs{qmkgaUY^IG^kyxTHHJDFPXehN=ERXRHB>;=EQZYNCAIP`rhYZWQRUWZZQTRVZF8AKL@=;;;55DLOSWP?5AKC?FNKFEFJPUOC>@<8;DKIGLUULIHEDB@CPZVXZNN[aY[j]JFDJVUOS_e]UUVUUUSOS[WT\\`bceceqo`]hihiid\\TWc`W`mla_aba_a_]^^XQYYirYYciiedfdYWUQF@IQWSNIFII@;?;@NTSOONOOSWRIFGJNNOORXVNS^aZVXWY]bcbbbbccbcb`a^\\\\[YZY`ifkc`bYdnkflgfdbiklgcegnqpfehgemqkgijhjkXPY\\_kk[QVbd[\\c]U[ge[bcY\\c_VTXdebikihqxpkoldcjmonspkniiihnoppljhdcdfdjiglbkhgeaSOV__TOY\\Y_aacjnuzkoslmhkrqrsnlrtspxulfwbthloqo|xfpzypxzzzy~u~vx}}z||{|v}wtv~q|wxmqyln|qsxovu}~vlq{rux{}}}|||{z}rszzquyyww~mkuz~x~sr}tqwrfrzuzycynjikpzqk{makUepmhifc{rvprnWqr|voywqxvtsq||st|zzvgoz}pyujvvmlmlnpry{pe\\_dge|nc[m{qlvexmsll}|tsq|~~ulqv~}v}sw{{ymjyxwqxzy~q||l~x~||}~lutzz|{}y|xt{[Z^cdha[ff`Soxtdeln|yt}ozqƽ´ǾÿƼþžĿùƼĿƽŽºľacgkljf_SOUXX\\`b`[W]cdccca]^bb^]\\YUSWac^YYZUOU``XT`mmeYRSSRRUYXTV_aa^^^YSVafd\\XZZOFJSY[XPIDDHR[_^aelnjecXRX`bccdfgfc[VY_`ZY][ZSW_egbbcbdddikpumghovusohgkljggkkhg^W[ijje]]YSMQaof\\djd`XQW\\dvtc^aelz~tlmmh\\YcV@SimtdIFID@IR[i[B?FUZPD>=;?JY_SC?CGSkp\\UWQOQUX^\\VZ[`XB>KPN?<>>:8;HPRTOA6APLABINIFHIPXTD<??9;DHIFISUMIMKC<:>JWTOVVMVb\\T`eRIECKVPNVbaZXYVTTRPQZ\\XZ`aacdagrnefdegjjd^Y`ga\\emjdcccb__a_^]WUZYqxW\\hiigfhaX^`RBDRY^WNHEIM@:B>DPRRVSMNPRRJDDGILKKOVWPKT_WTWVSW\\_``aefeeedcbd\\[][[YYbidcaba\\fnjbihhd`iilidcentndjlcershehiilk[Yaadj_UZ`ca_cb]Y_h]YhaU^cYQQ\\b^chijiqsnoohbblmqrlnkkiiihlmlmnmlfbaabjhdmkshbhfUMUcbQJX\\Y_`^`hjt|npqnnhipqqpnlpsqnrtpmewy`rweilpxk|tdy~|~}vn{w|vw|vr{yrvwxx|wzz~xq|{qtu|wmvtncqphp~vkwqjss~whh~|popuwuvvsvxwuzyoyvq{zuswwp|{{y~n||rrtqiswytholhjn{ng}p_vZ^rtohglywusnvZeytzqu}uvu~yov{vw|{|{rv|}rzwiqsijlknnmryp~gZ^bdboy`Wj|phyk{junl~xmztvv|u{qxy}wkfwoswy|}t|xzm~~y~{~}s}ots|szzy}y~~x{bYZ`jkv~feojgWnvyrwxqu|pwzypwupǾƾƽ¼»¼ĽĿ¾ž»¼achjiie[OMTWW[`_[XY_bbaa`]Z]aa]ZXWSRX_a\\XWXTR[c[VWakk`VSRRRTXXVTY`ca^a_WT\\ceaZWZXNIQ[ZXRLGEELW^`_dgjllh[OR^dddddefdaZY_b`_^\\ZWU[ejeabccdcdmsuqhflttsrmijoohchmkhi]S]mkjb][WQNWfj`^bfa\\UQY[k}}hY]`en}~vlinlf\\acNHahfhSEGFADMS_gO=AO]ZK?>>>DR][J::CN`qcRRQLNTX]ed]\\aeP?FTWQCBF@98<JQSND>HUNCFMMMKKLJSVG;;><9?HJHHNTOGING;6:GUTINXSO[aVWf_MJBCLRNNWb_XZXRUWRNXa_]acb`ccbirlhhfejmke\\\\dfaainidcbdb^^a`_^SX[^zvYbigiigh`\\ddSHP^bbXNHFOPA>DAIRQV[SMPQMJHDCFJJIHQYSJKS[QTZRRY[\\^_bfdcegdeecZ]_]][\\bfbb`ddbhmibiiib`gfkkdcdownepl`erpgghhimma_eeeaY\\d__bdgc^\\bh\\\\g]Q`_TQV_c`eeijlromqnedflnwsemghgihhlmlmnnmg_`]ejhfrwwhchi[RYffSKZ^\\_^\\^efqyjmonngfmnnonknto}oqpjkjvo^ppdfkpxul|ri~y}|{ppy{v|}ruopx{uorqux||}}}qxw}zro{ussswpu~~sqf`x{khs{mjrikkr~{q_mslloonquojuxozu|y|zpozy{|vqouy~zz||m{rpptlytwrpxtnjio{phzt_ccp|thflx~sqpy~f]{s|}vrzwuu}uq~~z||{~~xw~z~wuyrqrijqkmjgmvoziY^defd_Tmqgxozmusrv|py{|}x|n~z}shdvkvyw}{svtxl}{|w}zn{ruwtr}{umx|w|~z{~oYY[irryikuulZmtzx~{|wr~wjo|rxn|q|ʽľǹžǾŶĻſ¼¼ý÷ľû^dhhgfdXJLTWW[`\\WV[aba``_ZX\\a`\\XUSQRX_`\\XVVTXdcXUZcjh\\TWVONUZWTV^bda`b^WX`db\\UVXUNMX]YUMJGFGOZaa`cgjklaNJWceffecbcb`^_dfdc^[[Y^djgdabccaciuysjcgptqrqlkmomd`jokhhYSaqkh_\\\\VOP]he[_ad_YSSZ\\o~t]V]`gr|{oehoka`g\\OZhbc_JEHFEKOTb`D=JW[UD:>A@JZ_TB4:G\\olUNQMKSWZckh`\\caI@P][PEFH?8:>LRPE@N\\VDAJPOOPJEN[P>::;;=AEGHKOOJIOL=6:DSVIETYSU]YS_j[KHAEMONMZa[V\\XSWWPSagfdddbbbacotkggfckqne[^ggeehnof^_fd]^a`_]Q\\]f~o[gjfhkhhdbjdUO\\efd[NGHTREFFBMUUZ\\QPUQKIFDCFJIGHSYOGKSTQWZPS[XW^^bebbfkcfga[__]^]_bd```gihhlgdjiha`fdkkbacovmgqkbjpliihhjnnhhhhe_^ff]aehje^\\hh]ef[Zc[WWYbecccijntmktlbeimnzrcnefgihglmmmmnke_c_iejkt{vhdimbV\\jjTK\\`__][]cbpvgimmngdfgknnjovnv~roigmjne^okcdjpusm|ppw}|{skryuu}wpt}jnu}xomomrxz|v{zjxyt~xujmzyuupruj{yrnh]fogitugjnhlir}ype`x{jhlkfgnpgkrpr~iuywsrs{yppnszwzxlzrnmxszyqur|qwokho{vpxydppr{vlicwrqrpocqwp{ntsvxlx|y|~xz}x{o}~uqhlxlmfekvqzh\\cndkd~fSoqjvstnu~~{wzuy~||o}{naftwgzu~sqpuv|k|}}|zr~y~|p}|}uw|umz{y}rgu{zu|~r~}}c^V_urslio|vain{w{zpytxriikuz|~xlwyryŶµ½»ü¿˿ºļ¿ûýû^ehfee`QHNVWW^^WUU\\ba`_^\\WV\\`_ZVTRPQW]^\\WTTT\\e_UU[dhaVU\\VLPYYTSX]bb``b`Y[de_YUUURORWZWPJHGFIQZ``aegikhVJQ]cfgfdb``a`adqia__\\]_dmnec`bccdmsyvjefjpsrsnjmnkg`cloihgXYiqlf_]\\TNRbfa[_`b^WSU[^o{iW[_^gr{xh_hpj^aj_Wbd`aTGIJGHLNWcV?EQVXO<7?ADT^ZN=3<Oio]NNMKQXX^jmg`^aWDH[a]OHLH?;>BMQLDK__I>EIIMQQHIZ_L<:89;<AEGJPQJELRJ<=HRWLCLZYSY]WU`_TNHADNOLQ]`Z]bYSYXRWemljjfbefafwviffbfpsof^bihcfjnof\\_ge]^aa`^T[^gzm\\glfgkijefmh\\]a^dg\\QIMWMHIDLXW[dZOSXRKFECCHLHGLUVKGMSTVYVQVYUZ^_bdabjgahg`]`^_^^`ba``aimijljfjhg`afckicbalvoipldkmkllhfjpoknkie`ckh^dhkle`ckh`ge]bc[[[]debacikoqjntjdjkmp{qckbdehghmmlmllic`cdibkrtwvieildZ_jjVL]ba_][]bamqdflnngbbeinnlpvkqxmdkrhgcgojddjpttl|os~w|{xohrvou|snsshmt|tlllkqx~y{sxxivutwuqgmyuutmqqiyrijaWotgejtodjmigjuyvgXnpfghb^elhdkqr{koxrylswty~|~npnswz~svsl~~xtnj|tytptrjvnlgn{|zxynz~xxqqk`vqosmrhsyo~|qr~vu}jv{z~}wt{|rzpiw}mmcfjxqzgdkwcpm~~lXsrrwtrru~{~zwy|y|{~}o}zkZjrpd{t}jomvwyj{~{{z{p{x}s}v}}vxzkl~~uu|oessxuz{m|~ycTWtuolil|~jdi}w~w}ktttniecp{{yltw~swľĵĽĿûƺĽŽ¸½¼ƿĿýýľ_egedb[NIOVXX^\\UTW^a_^]\\YUV\\_^[TPNMQV[^[UQRYaaVRX`fdZRX`TJU[WSSZ`da]_ab`aeb[WSTRRVYXWTNIGGGKT[```dgij^OQZaefffbaabbdhhqib``^agjnkaba`bdluvvkaelnprtrlkmmie`gomghcZalplda^ZRLWdc[[_ba[VSW\\arw^R\\`_ivzm]`oo`^ficaZ\\cZKPRLHIIP`bNGOQTUI66BAK`_RI<8G`odQMMKPXYZbnlb^a]MIZbaZMPVK??DGNPMMZbT@AJHHQROU_cVC:::::<CIJMSOCDORGAIQUQBHW[XU\\\\UY_XVUIBFNPMVb^]ccYT[WV]kvjckhdgebq}pffcgswtmebhmjefmqma\\bgb\\^aaa^Y\\`nvh^jkehjlmggng_cccde_SNR[TLJHZ^Y`fYUUWTJFBBDJMGHTWNGIPQPY[PSZTRZ^bbc`ch^bje`_a_a`_aa_``clokllniihf`aedihddcjommpjfmklroffkpqormjhhimibgimkfenmhdhcfc`a`^bde_bijlmhiwqghkknqxrghbcbgikomlkkjga`eiidkwsrsjgiiebejjYO`ceba^]bckkbcmojd`_ekmmlprdm|jcrrcaakplddlmttizqw}v|zsiispguzknt~kjktymjifhqw{zxxqvsjsqwtpiglutsnlpkmtyiffW^xvkedktlcjliejuvl\\axwffgaW^ge^bkp~mjkoqpczxt|{msnrq{~zmtpm{~wrnkrxorq{gtnjeo|~~vwvpwumjzrmqruumv}|z}}}yr|~vmv~}}yow||~sqpnhhpq~gp{{fu~~ud{v}~}uxtys~~~v{}~|}p~}~xiUnqfc}zt}gomx|zi{~x{}zvnzup{wtr~yyyoeu|{qrxigrquvtvis|~nXWo|rkghst`b{|sxsygmoolkek|x{mq~wzuwõϼ¿ƽĿſº»½º¾¾ſú¾þ`eecc`VLIPWXZ_]SRYaa\\\\[YURV\\]]ZQLLLPUY\\ZROR[c\\QQYch_RO\\\\KN\\[SRU^gi^V]bdbaa^YUSSRTYZWSPLHFFHOW]__`bfjdUNU]adcba_acdejmlogdbachnole^`a_ajvvtncagnooqsnjkljfdelofdha\\dlomfc_ZPO[da[[ab_YTUY\\duqXR\\``mwtc\\gqh`eki`^V`cTSZQIGEHWh_RSOOTSE7AGDVbXNE:?WigXPNJP]_Y\\hqh^abXOXa``VMUXL@@GJNMKSb]E<GJHOSOTdi`K53<>97AJMOQOG@HQNBDPTOE?P[WWY_[W\\ZV_[JDHPQP_g^agbXV\\Z\\drzjckhih`i{heeeozxsnhjnpmggpsk^^hia\\]_`a`[\\fpqfajjchjmnggngbbcccc`USY]ZMIWh_\\ghYZ\\ZRIGFCHQNGNXVMILQOO[XNTYRR[`ea`^cc`fgdaacccbaabaa`epplnlniigdadfdhgffeiloqrjimgotjeelrqrunkklmmkflkplgouphfknh_ajd_ff]_kmknlflynfilmosvrhc`a_fjoqmjjjjf`akljem{smlljihhkjjk^Wcejgeb^adhe^_mpfa^Zennlkmk`m}hfuqd`cqqneeoktuexv||uzxkdhtibvsenuujkisvjgfaepwxtvtnrmkmn~qjbelpqrkjghuqoce]Uj{o__clsgclldcnrl`ZkvlaefUSdh]W_k~rjreoidgys~zqxjqp}|sismmvxpnkqvptnxiqnhbo~wy{sslxrkosq|xoy{z~z~vxv}~~y~lrz~wosk}}jztz|yr|s~}zsmy}||v}~n}}peVtzo~ad{zs|gpr|{izz||qkrpr}}|uoxyv{wdg{vxlnpdhqqr|xlpln{{wraWjzkfdj}wc^wqrrrfjmkjkf{|}}~npz{wu{wvɸûǽƿƿżþ½ſû½úƽľ¿addba\\RJJRYZ\\`YQT]b^YZYURQUZ[\\XOJJLOTXYUONU]^WQQZeeWMT_ZNT\\VPRXflbWT\\bfd`_\\XTQRSVYXURPMHEGJRZ^^]\\`hh[RU_abba_^`cegjnpmnfceckqrlf`___`fsyrnifgilmnopljijhefkpm`bh`^gknojeaXOR_c_[\\aca[TW\\^etlSR\\`botm_`llbcjnh]\\`cZV^TIHEETchaZRKNTQC=KJN_^PIA:Jag[ROLLYb[W`mm_]bZQT^^__SQ]WKDCFIMMLS_V@AKHJRLL`f_WA.7A;5<JQQPMGAEQPCCOXUF>EUXTX]^\\[ZVZe\\KFHQQVeebdd`VW]_bl|xghiinhctrccfny{vsolqtplhhrti]bmi^Y\\\\^geX\\iokedlhcghoqfhoieeccff`WX[_ZKTkl_digada[PNLKGQSOLT[VRNMOMR_VOTTPU]bec_^addfdbdcchgbabdbaakurllllikgccjgdkjgffgloqrllieqthfglqrsumlppnmmhkjpoosvojimlh`fmedgbblsjgomfpujiijjnrrqjc`_^gjrulgfihgcfnllem~sjlnmjfkqnkng_fhpoifa`dje^anod`^Zdqrpigf`ozgkvqe_ftqodhphuucvy|{umkgbgndeukfouokmjqthba^dpuvvwupmjjhsvgeaflonoqc_mxlf_`U[ord[]dlnacqh[erm`V_oibei^N]j]SWatumcfr]duvyy{z{wzfor||{~ngtlhsxoqsotxrlqgjrfao{xw~~mkxtllqoy{oz|{ww~{~nssrtw|~t~{xupk{wy{~xt~j{}~hc\\xztnu_g}y~zszgrwxmz}~~ohlpv}vulm~quyp_mxrrfjielvw}nxxfhlxktzprgZg~oeagxxe]pvppm{djjhign{}pnuxvt~{}}x˿ǽ¼ļŽû½ļ»¹ž¿aa`a`VMKLSZ\\__WRV_a\\XYXSPOTYYZWLIKLOTXTNLOW^\\UQS^haPMZ^ROYYPLRbpgWRX^cca`^ZUSQRUZYVSQPMFEGLU\\^[WXag_QQX^`a`][\\bgimpsqliecehmpoj`\\``]cotnhgfgjkjiknljiijjilqpe^eg_agilrngaXNSac[[^acd[TZ`ahpfST\\`bqqg^aje_flnhb`gcY[XKECCQaff`WLJMTOEFNPZbYKE??Tb]RPPOU_]WYelbW_`TSY]\\a^RXbVKEFHJLLOVZPCFJGIKGTfdZL62CD9<JRQOICBFKQLDNZZI:AQWUU[^_[YWVagXJKQSQ]ieegc`VWbcgwsdijlnjky}mbbfu~wstoluxqlijsuh]eme\\Y[]_idX`kkihglgegfpsfhoigeaaih`^[Y^YOctf_gjolk^ZUSSOMVSQR[\\[WPORNU_TQTPPX^bcb^[_fdbabedfidabdea`dovsliijjmgadlgfqneffgnqrrnkfettgfgkprssnmqrmmmhjhnpqrvnlmlkfenmfedbltneisjhsqgjighmpoohca``ejuymdfkfghjllndi|shkoojfltojvrjghssnnb^flgdgnmd__]crvrfbc`nxipypc^kwsodnpfvvbsvz{qedeahlchskhlw~nnolqqd_^_forsvwuqejngxlfe`jnonqr^`lyc]\\VTfoeY[_elf]lr]ZlpbUWfj_ciaUVe`NOYfy{xug_gnVl~txxsw{z{ymutxzynitceuyrvrwznlmcivcap~zxww~~ydlo{wnkrpx{tt}y~yw~}|~tzwsroguwwy{wu~i{~||ddfxuppl\\n|w~~xt{lw~{s{{~~ncgrv{omjvvlprg[qrqkddedmxrntu`copkks{qqh[cx}qd]cu|f\\k|pojqzgohjkewrno}{vs~}y{|ǸȾ¿ɾþý¼ľ·^^\\_]QLMMS[^a^UUY`aYVYWOLNSWXZUKIKKMTVPKLQY_[SQWbfYLQa]QW\\SLKUjr^PT[`aa_][WRQSUYZWUPOOLEDJPW]\\XUXabWOV_a_]][Y[bjmoqqmheeglnqoieb_cabhqnecdgikkgghkhhiijmnnpj^^gfaegflurg^SMYd`Y\\acdg[T]dchnaSV]^fqnd]afaeinigkihb][PLG>J\\cce]MLKMQOLNSXcaTJB@HZ^SQRSTY[XW\\fh]V`^TXYY[`ZS\\_QJGJMPPOQWYLEFFFHHN]eaT?/=LECOWTNH??JPMHHQ[\\P>:KVTUY\\`aXVVWfgTMQWUScjhgb`^W\\fdnmehjnmmv~yiccl{{ssvqmwysnjjtuhbimaY^b^alf[bffkjhlhffdssehpifeaaji`_[V_[Youeailstm\\ZY\\ZPRZRSX`__]RQSQZ^TRSNQY^bc^\\[`dcc`dgjmh``ehebafqsplhfhlmfbfkfhuoaefgnsrrnidfvtgfgjopposmmplklikinoquzmlnmjhknjigcgvxjgtuhmsohhfeejnmmgdcaaejuxlbfkeglhflmdbysggppigktqjw|mhgrsqsf^fmijlljc^_^dtwqb]c`k}wku{mb_mxtmgtohxvcquyzkcheahlgjoonkwxoqspql_\\^_gnprttus]gvky}hihaoomqth]ej|qXZXNWmiYXZagj\\axhUcpfYR]g^[jgUUb_MGQ[j|xrrp^XhgYu~x|qwn|x~wv}xt}xsqs`o~yvy{|wjoj`jwfcnwsuvvzs}|wg{lu|qmvx|{wm|zy~v|{ttoqoepxvty{|x{iz|xcfmtqlr{dXr}~u|tv~v|}}}magxupijowlijle\\qpohb`adltw}jmoq]`qikegvtrj]_qzqcY]oi[mrmdhrnzpqnp||zwspxyq~zyϿÿ˿þ¸ɸľý¿þ¿üûɿº¿ž\\\\Z]XMMNOU`db^UX\\d\\UYZSLJMQUWYSHGLJLRTMHKR[_YRS[b\\NL[g[S\\ZKGK[onWOW]ba_[YXVRPSUVWUUPNMIDELSY[YTTZ^YQR\\aa\\ZZXX]dimnolidbhnpqsofabdeegmofbcegjjgdefhggfilnmlib\\`gfdjiiotmaYTTad\\Y]aehgYVagfil_SX^akqi`\\ademklhkqpd`]VNOEEXccbaUKQMQQPOTY`e\\RKBBL[[SSSSVXYXW\\bdZXa\\V[WU[]SQ^[LKMRUUWTQTUMFECCDJW_b]L83HTOUYVPHB@JUPHGP\\^WF:ASZTV[_c`YXW^mdQSXVSYgfmh\\]^\\eidtwigfjrmo~tfbht|vrw{soyyuojmvtkinl^Ybgacoj^a`emkjlfdddsqdiogffablh`_YU__htnecjotun`___[RSWVZZade\\TSUU]ZTROLT[]bb[^_b`_cbhloof`bhjgcahsqnlgdjmmdbgiglvj_cefmsoqnhcgwsfddfnojmxkjnhimkmhooqw}ommkjnnggkgeo{qfpyrkrpmhfedejnkjffcbeikrwmbflfgohdjie`tsjfnsjghopjs|rkfprnphbholmpjif_^`hutn`\\d`h|wkx{hbeputplwsnxugps|vjgibbgknoqwrlx{sostqoh][^_elprrsst\\d|pz|ghhdqrmvr\\]fkeQ[SK^k^RV[chdWkv]^mk\\TUaaR`o_R]eUEKV_pz^e|]XUjdd}|yyqt~z}wz~|suzui|}||wret}i\\lvkhjnovsusnzwou}ftxqy~|wtz~}y~zuo}smpmel{wrzxxzy}kw|~pehponyjvtZZx|~s|px{lblztjinxxjgeeiicmupd][]dirnjfdil[_o|cicfomqn^[jvqbWWf~qYksnbajuw|||z}vw{q|{øſýÿŷþƿſþƿźþºYXYYRKNQRZghc]X[_eWT]ZNJIKPTWWPFHKJLQQIFLSY\\WQX`_SFMchXSXPFEL_qiQPX_ba^YTWWRQRTSRUVRMHCCHOXZXSQVYVOQX^b`[WUVW_gjnomicaemqrrrjaaegeehmlcbcegigeceegfddiokfgc^_cgghjelsod\\YY^ed\\Y]cilfWWchhii]UZ_iolc\\\\agkmihlqtl`a]USMFVcdb_WQTST[ZUTW]c_VWPDHS[ZTRRQSWZYZ]aaXX`]YZTTZYQW_SKRWYY\\[RQTRKHC@ADOZ_`WH<@RZY\\XQKEGNWYNGNZ^[RB>JX[VY\\^ea[YWfo`RX^WR^fembX_]`lgev{kfhinqmr~oaalx{tqz}soz{wojnvslmqhZ[giddqn^[^enllkdddesnbjohgfadnh`]VU_gtqiecknsupb`_^^XTX\\Y\\dhf\\VVW\\_XRRMLX\\\\caY\\cc]]cdnpljd`fnkebclsomlgejmkcbgjjnse]cdemqlpnhagwrfaaekkcmyghlfgmomhnoqx~pmjhkoldhkgkwzleqtooplkiffegjnjhefddilkqwnbdkfgohchgd]mrkjopkfgkojpyrjgnpmokehnoqqkjg`^dmuqj^\\ebhzwkz{eelqtsppxwtwumpr~tkigbcgjqpt}qoyzvrpuxrnd\\]_aejnrqrstbcvt}zifihpvoyrY_jp}YS[NQdeUPYaehZ[tiZlqbVSXaURnjTWa\\KCLXez{[UxfQVVkho|z~vys~u}}xpys~tmbzvfXpyqelnuvkqlkuvntd{}w{~|}}|z~~tnzslz~nkdfzznwvvzxyov{zjjjtknuhzkTd|z~s{n{zkbowownjpzkbh``fnhfyp_\\UYdgpjz^b^hhX_owagcehglp`XbsqbVR^yuYg|rukdi}wxz~u{Źʺ¿ĿĹþ¿½¾ýøŽ·¾ýVVXUMIPTWakg_\\\\_`bSWaVJHIJMSZXLFFIJNQNGGOTWZUR[_ZKDTf`TWSECEOdo_OPY_aa]URXYRPSSSQVXPIC@DKU\\]VRWZUOPV[ac^XTSUXaikmmjeacjpqrrofbfiieglkfcbceggbbceedbadnribcc]^dhiidboshba]]chd\\Z^dikbVYcghhe]WXdqoe_[\\bilhhkourfdd[TSMR`cb^UQYYW^^YVV[`^WZ_PIQ[[XURPPTXYX[_a^YY_]YTQTYWW_\\ORY\\Z]`TOQTRKHB>BHQZ`_RHEK[`_[UMHKUZXPJQVY][RABT\\ZXZ[_d_[WZkk[U[_XU^bej]W^^flbhwpbdgnsjjvze^eoyypr}xmq{|vnlpwrlmofZ_ijeetr_Z^fnmmjdcbeslbjjegg`dng_ZUU`pvhfedllruq^_^^_[VZ[Y^gieZXXW]`VSSLLX\\\\c`X[eb\\aaftrigb`hpkcbgppmolggjmjddgjlqqa]acdlmjong`euqd`_cgecluggkdfmomgloqxpliglmfgkiioxzgisonokjlhegikkmjhghggiklpqjccifgld_eed[jnjjlnkfeimlnuqkhlnllkghnqrplkha_fouri\\]fchxvmzydfmprpppxytttqrt|tjle`eenvpw}pqwtrqpvytmb\\^``ejnpqosukcmv~xmhihrqyw_epsqNZWHX``TQbigcSgw`app^SRYWLdrZN[_QDALZn}eMlqPJZVqr}|z|ztp~z}}}|m|tybrdWv|tfkmyqdmhkpwrpl||||}|yz|ytuyqjyspv{ofedr|nvxuyyzqv~{sklothnqg~fRn}ysywzmdopluuhosa`j_[arkczlX^XYdfmhmY`ZifT^qv`c]ddckpaWZoncXPZvz`iv}xzpr}z}zѿĹź¾Ŀʽ¾þþŻ̿¾TTUQJJRX\\fmd\\[^`a]V`aPGHIJNVZUHEFIJLMIDGOTVVRRZ\\RFFZe\\VULCCESjlYMR[``]UMPZ[RPRQQW[THDA@GPY^ZTUYULNV[^baXSRSUY`hkliebchmpsvqiaelniehnicbbcefc^^becb``hpneaa_]agjiebhqk_cebdehc\\\\_fjk_V\\bghgd]W[lrh_ZV\\fkfchmqsibfbXVSR]dc_SMZf`b`VRQXa_W[i]JOZ_ZVUQOOTWYY[]^]Z[]\\TMNT\\\\]`WQY\\YZaZNRRTSMG@>EPR\\`ZRDFU]abYRQQU\\^THOZZ[]YNFJU]\\XVYad`ZU_neXY]]YZaadg[X`bmj]ntc_cfrufk~~m]_ksyujstku}|tmmsvqknmaZbjjfgus_Z]gmllha``cqh_gfcffaene^ZUVbsocfbdjiptpa]__\\YY]YYbihdZY[]a^VUUMRZ[\\b^X`g`]a`l{qfebbjpjcdkqlkmjggjlhfffhlqm_`acejiinle_brp`^^aeablracicdkolejnr{okggljdkmhlswtilnknlgjnjfilmlkiiijjkllmnmfcchghib_ded`gjjihihgeejkmonkiimljhijlqqpnlhcaipsrh\\_gdixur|ufelrpnopvwsruvtt{yolkd_bftwnz{oqsqpppxyrlddfb_gnnqrkrvofjuz{qkmhyqwxhjsv{bN]OM[Z^RWkmg\\Xsubgnj[QPRJWwfR[a[G?IS`vtRW}xYGLY]wtwy}xmv}~yn||}jsd[{wljlym^ieiq{x{nwz{}uyw~z{v}|twxs~tri~xswvvvfcbozzv|sx~}}{{rw~|zmnksqcqme{bQ||wsuy|qkpnjzudng[]jaT]sje|eN`\\[aejh_X]Xk_P`rua^Tbd[pob\\ZffecVc~im{|±}|ŻƸƻǼ¾Ŀüɿ¾·ʾÿTTSNHLW\\bkk^Y[]__^]e\\LHIIJQZZODGHIJLIECGMSVRMPVVLEM_c[VMB?BGWliVLT]a_XLJT][RONOPZZODABCKU\\[VTVRJKTY_ec[RNPRTZafjidbbglnqutjbclsohhimhcbcddc]Y]bdca_clnfb`_^`egjgcdmoe`hieijjc\\\\ajli]X`bfgfd^Zdsoc[VU^hf_ahoqi_acZZ[YZcg^SQ^lokdWPRW_aXZliLET]\\UUUQOPRVYZYY[\\\\\\]ZNHR_c_^_WVZZW^cUMYVTVQGCEKU]e_PIBO_]_bUQ_]T]bUMU\\Z^_XOKPX_^VSYbd`WVfm_YZ\\]X[a`ab[Yahmb]oi\\__fupdru`Z`ktvmhwqku~yrnou{rjnk][ekkghuq]Y]fkkke_]]cne^ecaff`goc[XVXesibfbeigoto`\\_`[Z\\^WYfjhcYZ\\^a]VWWRV\\[\\b\\Ybf`_abv|hbfbcmoicekmggjjhglkgljfhmqi\\_bbehdhmje_^nm^\\]cd_akm[ah`ajnkdhnr{ojfhlgfnlglswpihhkmihnplgkpplhkmlmoqmmnkhfcdhgggc_bec_chiiiihhechllkkljgklgefhlrspplfehlnqqh_aifkyvx{qkgmtolmmrtrqvxssvrmljc^`jyqo}wrqoppmr{vlhflmd`nunqsjsvmjmputnrkqszrnvxsRT_LU[ZYS_oneZfwqikleZQOJKmvXYdaWECMXg|jMi~iHBS_nutvu~y~wqq{}~{zpzw{ufc}zqhn|j[hdhty|r{|vw{tv}yuwwou~z|yqvzzusg~xty}w}na]}mr}x{t|zz{xyrx}yxjokxjczvkhyYTyxspyx|xulvs{xdk_XYfgO[sff{cP__`bdgmzVUXXlVQ`ruc\\Vbd]ondaZdfnxkt|mz̺þɿɿľ¿ýĿļ¿þ¾¿úɽTSPKGMZ_fpi[Y[\\^^_ceVIIIILU[THFHIIJLJECFLSVPJOTOEFWfbWQG=<BK_lbQLW`a]QFL[`YPLKMT\\VH??CHR\\[WUVTKIRY]ab[QMLNPVZ_dgd_`dhlnqvpc`gptnhkmnfcbccb`ZY]bb`_`hnib```[ahhfcbhmkcfmlkmmkc]]fjhe_]aceeec`cpvk_YVZcf`\\_hqma[aa\\_``aeaSQcvyne\\UUZ]_ZWhnR=KXYUTWTQONOX]XSTW[[ZZSGNai`Y]`\\[YXZabTV_ZYYTLGMP\\jhXFAFWc_abX[fZTdfYX^\\ZbbYSMR_b\\RR\\bc]V]ig^\\Z\\]VX`b`^ZZaif[al`Z^]kuhi~eUYbltpdj}kkv|vqopv|sjoi[[hlkhiuq^[^fjiib]\\]dka]ca`feaim_YXVYhqcbgbegeoto^]``][]]Y_hjhbZ]``b]WXUV\\]Z^c\\[ddba^i~u`cf`erofcgmkdgjjhinigslehnpf]bcdgfbgjig_\\hj_^_a`^bikY_g\\_jkhcinqyqkfhlgjnigktxnigikljkpqlinqokiqnjowqimnieeegjgegb^aec^bfhijjihf`bjmighidegd`cfhpuonlgginqnnjdcjfjywzypniprlikkorqqvvqoqokkha]`q|hq~mnlnqmkt{ndghjogarykqtksuklpmp~xptksoyyotzcJ[ZMVWXT[ipqe^qwmjkic]RKH\\whYca`XFDRdnxcZuqVELgkyq{|jv{yy{x{xmwv}v}p{~v|{ji~sjr~h\\kfmv~vy}xz|wpqzyp{sp~p{kguxurnv~tr{sg{{yz~yi\\wnkx|xyxzywqy{wxnsj}aamlnzQ\\wzspx~|tz~|iy~ndYWX[kZ^pcguf````accrqWQR[iORats_\\ae`gjlee_mp~{}wþøľü½ľûſ¾ýŽȻĿSRNIGNZahogZY]\\\\[^fcQHKKLS[VKCFIJJKKIEDHNSSNJOSJ>I_g^TH?;;CRdkZLOZa_SGGR^^ULIKP[^QC??BN[_ZWWUNKPVZ]b]RLLNOQW[^cd_\\_egjpssjbdmrnjgnplecbbab^X[_a_^^bkmf`_aa_chhc^aimfdlokmnnke`ahkhc_`bghebbckurc\\ZZ`d`\\\\_hnh][abeggeeaUPdwyl`[YZ\\\\\\[[elY@CU[VSWYQMKJR_]QNQUXWWXKGZmgVU_a^ZVX\\b_W`b^^XSRQUVjt]MBDO[bbcefg`SZlg\\bh_ZbbYRNWfcXOT^a_YYbd`]ZV\\_TW`a\\Z[[`e[Vcf[ZZ]oodvrYT\\dltk`qvhnvsqqpowznkpg\\]injhiuq_\\_dhghaYZ^dha]a^_ecaji_\\XW[gh_bgbgeemrn^\\`_[[\\\\\\bjjf_Z_cca\\ZZSYa]Z_c]^fgfa`r|l`ffaitmdchmgckmjgknelwidgnlfbddeie_cijg_Yehda`_^]bij[`g[]ggfdhloxslghlhlmgfkvxnggjkklnqsnjpqpkovnmzxjjomeeijjkfdeb`beb`ddfhjihgg`]ejhdchb^ca\\abdnpjkkhfhoqnmkebiefuxwvplntqjhijmpnpuunmpkgkhaZ_ywawxffdllhittcajifpnbvmnsmoulhpmo~znuouyjx{rsv_RbVN[ZVUhortefwrghife`RHQmu\\`iafXKO`poodkwcNPcsp{rtgxx|ryv}|u{yqxzw~}to|zv~~st~vqwi`qhr{{rx~twynloyyoq}|knzqwciutnfjxwxvy{~|ti~}}z}{du{gu~}}z~wx}v~pyzwyxxlzZ_xmpswSgy}tx|wyq|yxnqxcTUURblkk_eleilc]_i`vkbQM_eLShxk\\]cicjgpieh~}»˺ǺĽǿ¾ĿſĿǿýüƿƹRPKIIP[agmfZY_\\WX_f^OHKMQZZOEDHKLKKIFDDIPSPLLPOD>OghWLB;;<GYhhUJS^aWHENW[TLHJQY`[I@>@HU]^YXTLJNVXY]^UIGKOPRV\\``_Z[afhkrqjcahsujegmnhda_`cc]X[`a^^`dkjd`_acdgfd_\\djidfnmknnmleadkmjd`_akmga_gqrha_^^ce]WZ`gic]]bhmkigdZQ`wudYXXY[\\\\\\`im^GANYYTVYRJHJKYbWKMQSTUXRENfk^RWac^WUX]ca`fdb_TU\\[[]usRJHKTai`_nuj[Saqi`hnaYadZRP]lcUPV^][YYac[WUR]`RXc^VW[Z]^UUb`YXWbpjm~aRT\\enpdayqhqrnimomvxkmqf`dmnighusa\\]afff]TV]dd_\\]\\_dabjf`^WU[ee]`eadbemol]Z^_[ZZ]^ejiea^bcca[[\\V[b][_`_`figagxwebkhdmsibchiceonhfmnerxdbinjffdffic]bkki_Wcieb`_]\\eii^di^^fgdeilmtwkghijljdejuwkfhjlmmnrwpjnppqtrnw~pgmqidmmnlhcbcacdd`aeceijjheb_[_fc_^da[\\]Z^^`mohkjeaeoqnnjc`hfcszrrpkpqlhggglnlouslnmddlh`Zc{mdumf`aifeirj\\bkjgtwfuqiprmrpfkllzopvi~guzutre`eTS`[WbrqwtclujgmjceaRNaxr^jnglYXcpvpmjrp`Yhulrxxkiyw}tmvqz}yvxyuuzyy~yw~l|wsz}yxx|jgymv~uoxxlqthjnw|yoks{yxfqwt~capvpdbouy}~t}}~}v{|wp}}yzvxms~|||xxu}oyxxy~zurVcoqrvu\\oz|xxm{}ws|~xp{pYRTOZppg]ef`gnidZoez~akaSc]GWptgd`Vipgmnes~Ľҿ¾ǻ·Ľÿ¿½ŽɿŹTNIJLS]bimdYY_\\TWaf]NHLOTYSGEGKPPLIEBACKRTNINQI@EYjdNC?;:?NbjcQLV[WJEKRVTLEGMW^_RD=?FPZ\\[WSKGMTWWY[WLFILOPSY]_]WW]cfjprkcacowobdgjhdb`^chcZX^a__`bfjhdbabedfb_\\_fhfcinmptmllgdioold`]cnlebbmrmedc_`feWS[bee`]`hlmjigaZarudXZ[XVY^abgndNBFPXVUYSHBDISa\\NIKORVZVID[kbWUZbc\\WVY_cdiibf_U^hd`bxnLPUUXdm^\\s{jZWdtmcjlbX^f[OQbnbSU[\\\\ZYYaaWTST^\\R\\dZQWYYXVSWa]XTZijh{nTOU\\foh\\j}hjrlhhmmlttkpnedinmhhgxxaY\\`febZRT\\cb\\[[X^c`aifa`VTZda\\_a\\``ellk]Y^^ZXY\\_fihd`_abdaZ[\\Za`\\_a_`dghd_jzraemhhppgbdfcaiplfemmjxsaakohfgghhjb]dkjiaXaifda^Z]jkj_cl`\\giffikjq|gefhjkgbdluvjehjmomntwnknprssnu|wlioofksmmiaccdcbb`^_cehhlki_[[Z^caWX`_XYZTZ[[imegfb]`loljic\\gian{pmmkplhgecciklnqpmke_goj`^jtejkdh^diceild_djljs|ll}ujoupprkfhirujuitnoywponieUXf[busp{seophjolegcZ_l|uhvtuq\\nuy~rlmukfo{ueus~ejyz|olmmwxvwuyxqx||}x~}~}n{wly}uyy~npwz~yvowvjkphfnwwmhgv|yyvoxzy}k]irsj^iss|~x|zwzxw{~s|zw~{wt~}}~}vuu}oyxuv{fVjyrtu|zhuzzj||upyz~xzxgVXX]osk`gf]cnuj^nnyzWcudeUH_tqardOa|purgyɽķƿ¿¼ƾ¸ȿŸ¼YLHKNW`fllaY[^YVYcf\\NIMQXYLBDJOTRIC@@AGQUSLJPNA?RfiZE>=::DVfj_OPZVLEHRURMFEKS[^XJ?=AJV^[VQKGJQUUWXWMEFJMOQTY[[UPV_cgnsod_cjtth_dggeba`bhh_W[cc^_bdfigefffedb_\\]bgfeeknmoqjkkhiorura^alledhipqlhgb]dg]QT]baa^]aikjjhechqrg`baWTV[cgghfTEAHRXVWSG@AHOa`NFGHMS[[NDSheWWZ]_][YXY`ceofaf`ZfoibcwmSZ\\Z\\bf\\`v{j\\ZgsniljbY`i[MSfraT\\\\ZZYYY]ZPORV^YUbdVOVXVSNO\\`YTRcndkz]NOU]hj]^xmbmncdhmllsrmmefloplijgz}aU[`fc]VPS[b`XWXW^c`_ifb`UTYd`Y[[X^`ejjhYT]\\XVX[agihd__abfaZ[\\`d_]`a_cjkh``nxkajkglqlebdeacmojegomnznbclohhkkhjjb]ekjhb\\ejfd`]Xbnkj^fr`Xknfgikho}edegije`dmwtfchknpmoyxljosvxnryyunmrljyrkle_ddefc_]^]`ilgmofYVYZ\\`aTR\\_WTUQSWXelcbc_[]inkhfaYei^hvpjjkoheed^aiijlnojd`^jqkfdlodkdbiaiiaeigddcfnqs{scqzqpssstrfdgm}gpomvkywlltndXYjhlzqtmgqmnmnlglifkt}yv}~lh}tmmwvuvwmrwszfny}ygjklvtuxuyyqx~~{xz{}rzyfqy|~sy{rx}yw|ou~vjfmicnwqfgi}|ytqz||nbiutmbYrws{z}wy}pu|wp~{~w~}~utu}oyxtt\\Tqrt|xt}}h}|tmv~~y|su`\\cfouriifabnwncmwyx[]wteUQiuncoTa}uqyŹùĹ½þÿǾɿĸ¿ĽYHGMQZdjli^Y^_[Y[ce[NILQXWIAEMTUNE><@HQRJGILOH=FajaQ?89:<J]ifVOSXQGFMTSMFCHPY\\YNB<?EP[_YTNGHOTTVXWOECGLMNQTWXUPOW`bemoh^]epuj^_efeb`adig_XXbdb``bdffeghggeb`]\\_ceeefkonmfhpmimsvzk^_lphcfkmqplhha[ibTQ[`a_\\]]``jjkjinsndbfg\\ORZ_egebXF=BLW[XTG?COW]eTEFGIQ[^SFOegXRZ]]\\[]\\Y[acgodadb_hrjaanm^caY_ca\\dx{h]^hrqmmjb[flXKSkxaZaYY[YYXXRLMQX^WWdaSOTVSOJO_aTPWknbqkQKOUaicZiybbkg^bgllkqpmegmippiiifyz_SY_fbYQNT\\b^WTTT]d^]gd`]STXc_XXYU\\^befbSQZ[VUW[bhifb_^_af`Z\\^ba_^`a_gnmc^guoeemgfpribbeb_gnkhejrltzldenlhikkijib^flhfcbjkhb^[Wipik]ot\\^pmhghkhtrccefjie`cnvscagknpkq{wljpuwto|{zvpuvjszkmia_deefa\\\\\\ZalkinhaYVY[\\]aTMV^XTQPPTUaja^`^Y[djjfb\\Xad[esnihknbcdc]bhfijloga^]iqlkhmh`heeihlgafhfdgddous{raq}tppvyuuicglikwn|nyumnsnf^Yp}tysyzhjrmqlnljsrnqx}}yj{wlmzvvtywuviu{~udllnwrz~wv{ytzzwxz|vz{zgmt~|uy{t|sr}nv{sgfmhcowmdjp}zuvzbduzsh_]wywyynxkuy{vpzx{uru}nywuw~WVvmyy~zi~|rlt}~}n|yibhjovuojhjclyqfnzvuhhz{f\\aorogZk||ý¼žž¾¾ÿþ¿ý»ſźžYHGPVaiikh^Z^]][]ce[NHKRXUFAHUYTLA<=AISQHFIKI@>PgdSE;69<BRag_RRUSLFKSTLEDGMV[ZQE<<ALY][UPKHLPRTVWRFBGKLLMPRSSQNP[bcgli`\\`jrqeY`gdc`_bgkbXW]ddcaabefghljceb]_^^aeffghlqoihkpljnuzud]gnneejlotojjgaci\\SYbc`^Z]][[iqopssi^^ca^UOU\\bddaYK==FRYZUI=@R_bcXHDHHLX]WLPadWOS]`\\X]aXUaacljacdegkph`_ilccb\\_db\\e{yf^^hrrnlhc]inVKTl|g_bYZZXXVQLKKQZ^UWd\\ONTTNIHT^ZPP`lffvx^KLQZff]`yi]ef`]`fkllomjeilkrohliexz]OV`e`VNLU\\`[TRRS\\c]^gd]TPSWc`UVST[\\`ceYPQYYUSVZcggea^\\^`d_Z\\`b`^^__`iof]_msgblkcgrti`ce_bnngfgnqlwvhdiqkgjkljkjc`jlgefhkjfa^]_trhiaxmXkshhhikjzdaadikhdaenupbdgjqpktzulkovxvu~|~vtwmzrlmb`cdfec^[[Y[glhom`a[XY]]Z_UKQ[WSPOPUSYg`\\][YY\\die][TY_Y_mmgflnabdaZcgafhkl`[\\[guplhkiagedkqoeaghcgmfdszsyxfkxwslwvumehmyqf}szwvrlmpnlb]yyxxvpnpqrsmopr{vry{|~xtwiwwtw~}vw~vs~zneropyt|wv{{vy{xwy}z{tzhk|t~xz{{z}s|p~oyqibnpgdnwgfu{}{{o[ozpabmxx}v~mriwwpx|trwru{nztq{}{UZtzmwo}qltz~}nx|lntqswwtnmmlizwipzusst~|pljfpvsoxv}ļĽ½ĿƽÿĿ¼ſǽ¿LCJT]fgefc\\Z]^^]`de[OGJSYRB@KZZPH?=AGNSMGHKJB<EXdYH=769>HYedYQSUOGHQUNFFJQW[ZRG?;>FT\\ZTPLIKNOQTVRGADKOMKLOOOONPU^ccgha[]emoh`]aeb`_`ehg\\U[dgdb``bhhlnoi__^]_`befffiknqnilnmkjpz{jbemmgghjlqumike_hgVUcje_[X\\\\Z[jtpqpg[Z_\\USRTZ^``_[PC;AMWXTK?<Occ`[KDEJMRZZSSag[NNV_bYWa`S[haekd^belknqf]]gjbbf^_cb[i~sb__isrnkid`moTJUj}jac\\\\YXXSLGHIP]^TXbZMMTRICJZ[QNXfg`ixqVJNS_ga\\mp[^ea\\\\`fkljigbdmjksoioebxwYNU_c]UMLU]^YRQQR\\`[^fc\\XPRVc`SSNSWW]ccTLPVURQTZdffb\\Z[]^\\XV\\ab_]]^^bjj_[eplcfldcmrpf`e`\\hsjcdjonltnfdlpgflklkljdbmlefhjlkf`^amumjfnyd_qqfghjlrk_a^clmgccfnqoggfjsomwxtmmpwxtxszqq{rrj`dgegf`ZYYW`ljirh]`\\YZ_^Y]ULLVVRONNTPTb_XXXXWW^gcZVRW\\VXgldbloabdbZch^bhlk]ZZZjytmhgiflhcqzpdfjhgnslhw~tvzijvxwft{vrgjnt{h{tptplnnmngew{}rqqrttunqsxxw|y|~y~qt|wvxuy{zwmntrsyyww{~zzz||ywwzlwgjwyxwx|zzt}{|twj[`tlfenw_j}~}`d~zm]g}{p~{|smnkwtl|vysyqvyn~qr~}zWawxyst~pkuw~{uv~mr}vuyyystmtk{ts|wos}||xpam||}u|ÿſſ¿»¿»ÿ¿ĿȽĽ@BLYcc__b`[Z]_``bef[OHLUXOCAP[TG?<?GMROIGJKF>@PbcQB:54;EO\\c_VRUSKGLSPGEJRZ^]VJ?;=EOXYUPLJIKMNQVTI>@IOMKJLLLLLNT\\`ccc`[Z`kpj`]__`_]^bhg_VU_iib___cjntsmd]\\_`baceffginrplmomlklu~sbgjkieillltukgib`hdU[knf_Z[_\\Y_ptnlf]Y\\ZTRRTX]_]ZXSH>>GSVSLA=H`g[UTECIPRUZXY]d`UNPXcdWYd^Sakbbb`^_eppqqbX\\ehaaebaca]mziaa_itqmigfboqUKTlocg_]ZZXOGDFHQ`^SXaWJMSMABQ]VKPaga]iujRKQXac\\cyv^WaaYWZafjlhd`^fpllrnlncayrRLW`aZSLNW[[WSROP\\^[^eb\\VMRVcaQPLQTRZbaOIPSQPORYded^WWZ][WUV^`_][[\\_dif\\\\gpfcjf^eqrja`e\\]oqfadkomnpidckkbekkllljfemmdfjkkkdaagsoilkysakumcfhkn|~a_a[erpgfgfotqgfhlropz{umnrxxt}~vmyzvtfbkjhkf_ZWXZfkglm`]`]YY``YXSJHQSOKKMSMMZZUUVVUTZcaXSPUYRScicako`bec^dh[_imi\\WW\\o{rmhdiloibr~oelkhlqtqn~ruynnwxyeuxtjnpmlzwj|~snkookligvkumpwtyosx|}}wy|w~~{u~}sy}zxz|ytsxyzx|{tz~zvwwfrhj|tz}zo~wzyyuw}}h{dZkthkgnwbv{]t}pfqvitpskkxz~pk}|t|zyzzqxxnqu}|_izvtvqoxvz~|w|qr~yv}|{v|qwqy~z{wno}~ueox{Ŀǿ¿¿¿ÿ½ɼ¿?CQ_d_\\\\__YY^abddefZNKOVWMBFTZOB=>CMROJFHJHB=FZg]G:538BMV^^XUUUQIJPPIEJRX]]WM@89ALTWTMKJHHJJNTUK?<EQPIGIJJJIJQZ_aba]XX^fllc\\\\^\\[\\Z\\bfbYUYekga_``entxpd][\\`bbacfhhjkoqlkmnkkjo|}kdhkigglllp{sjgc_bhc[fqkd_ZceZX`pomid[ZZVSTUVY]]XTQLB>ENVSNF@FYh`RPPCFUZVVY[`_\\WRPS\\hdW^h[Thoc\\[_\\]hsrrp^X\\ce``ffdbaampded_gqqkghidotXLTmrgnbZ\\]UJECEJWc]RX^RHOSG=GY[OKXfc\\^ko`NMU\\a]]nyeUZ^VRUZ`eiie_[]kqmioopkaezqPKX`]TOKOWYWUSQMNZ\\Zag`[VLQVcaPLJORPWa^LGNROLLQZcc`ZTTWYXUVYa`[ZZZ[`dgb^`gocci`^gmng^`cZdumcbfkmnpjeccgebdiklmmjffnjbhlkllbcensiklp|lertgadjmr}v`d]Zjvpkjggvxibknmoos~rlpuyzwxwo}y|ufiollmfbYVY_hiikc[]_]YY`aWSPFDMPLIIORLHQURRTXURZc`UNNTWORagcbhkbcec_bg]_ini\\XV_v{rngchqsicumhpljsuvvtrtypqxwzftwvnnpixoy~irsmjpmgmjazw|lsl|yr|pt|~}}xzvvr~}x}q~{{xvyz{y}zov{t}upaofjxrxxvpxxxvzwt}|hngfqrlsntyq~qwvsg|gikxxyll~{v}~pmzsxwoty~ln~zx|svwx}wxuq{|vywwvsx|}xwom}}qw|y~ÿ»¾ſ¿»ÿȼ¾¼?IXdd\\YZ]_YZadeffd`WOMOVWMEJWWK@=@GPQJEIMIC?@PabM:326AMSY][VVWTMIMOHFMSVYZWOC:6;FQURLHIIHFGJQTMB<AOVPGDFGGGHLU\\_`_ZVTXbike[X[]ZWY[_ca[UW_fg`__`cktwrh_[[^`bb`eikkkmmkhimjggks|uikmkhhknlmv}oig_^egfgmojb^^kfYZejjlkd[WWVSTVWYXROMKGCBKSSMHCDSedVPRPHS`^VW[_b[RPSSU`jdXdgXWmqaYY]\\^muqskXY[ac``fje``bmjahgchlpmgimfpv[MSlrkue[^]RIDBEN^eYQY\\PGOPC>M[SKQ_e]X_lkXJOZ_^]gvnWS[VNPVY`deda]X_pqkgnopgal~nMKZ`ZPNOQUVTTTQMOWXWbf]XRJQVeaOIIMQNUa[GFNPMJIP[b`]XRRUXURW]a_YXWX]_ba]^cgg_ef\\`ilja\\a]YlsgcdgjmophbbccbcdijlnmjgfnibjkjmkbeippflkpxihplcbfimsxpddX_qurohboqdhpmlooy{mlptx{~}y}ry~zsmpnmnlg`VZ[cghjeYW^`]WWbbUOMA?HLJHJMQKEJPPNS[VPYbaTILTUOR^ddcgidddbbaha_gng[Z[fxyrnhdhqsjdr}okplnwxxyw|osvrrwtwgqxuonrlryoxln|sliqkcnh\\ywyljtwu|rsz~{|xtsqp|z|}wy~v~||vjt{s{rk^meitrvvu~x{svux}wryjbrwuooyx{|{}~{rkp~bijzytgp~xx}{{jyu|z{syvv|vzx}xtwsy~x{s~{wtwy|zz}rl{}|}{{z~|żž¾Ŀǿƻ¾ĿDQ^daZWX[]YZbfeedb]VPMPRRMHNXTF@?CKNJEFNQH@>H[bW@458@LTVYZXUXXRJKMIDLVXVWSNE:8:COTRLIHIIGEFKRPC<@MWYMCCDEEGIPY]^_ZSOR[dif^VVZYVVY_cc^WT]ec`^_`bhtzvlc^\\]_`b``hllmnmhggjifdfmvxoijljjjkllqzxkkg]`jkhlpmgaagpbY_fhjjgb\\XUUSSVWSJFIJGFCDPVOHEENah]SSVUT`c[XZ[]\\UMRXVWaic\\daUYnn`VR^^_nspsfWX\\^`_aime`bdme]ikdfjpmfkqiqv\\NSmpm{i_a[QKFBFQadUOZ[NIOMCCSXLMZb_YX`khPES^_^bnp]PUVOKOVY_cb_\\XXdpmgflolbfp|jMM\\aXMOSUSRTUUTLNTSWbbYVPJRWddNHGLMLS]TDELNJFIQ\\b]ZVOQUUQQY``\\WWVX]^][Z^cf`]ebZckke[^aW`rmeeeglnmlf`^^^`cdgikonhchnfciijnhbgkqlfjhotjjlgbbfjnrsmhbUiuuundhywjgqtljnvqinqtz}|{uwxv|{{uqrnmrkh[Vc`dhij`TU_aYSXdbSIIA=EKKEGQPICELNJN[WQX`_TMPUSLPZaccfgehc`aagc^hog]]`kyvnlieiqrkepzplpnnxzx{x}zlntsotormowonnqklsnvpmwsljphbpg^~t{tfg|rw|vtw}xtyw{~lpyjqztwy~~x~qguzpzph_jfiprvzu|xx}qwwr|xr}ym^{wqs|{zzrxtopvkjyzzsfut~roxxz}|}|{z~{utw{}|{twwyxv{|x}ury|~zy}}ľ¾ľ¼ýʾþÿ½¿ƿƿź½þLYca\\YWYYYX[bdccb`]VPMNNNLKQXOAADGLMIHLQNICCTa]J89>CIPWYWVVUWUNKMIDKVXVWSKB;56?KTRKIIHHFDFHMOG>?JUYRFACCDFHNUY]^ZTOOT_ge]WTVXTTY^ce_WW]egb_`_`grzwpg_`^]_``_bjllmljfdfhgfgjrxrkiiiijlkilv{qije`fnokopnf`fnk`\\cfggfda_YRNPTTOGCFJGDDDHRQIBDN^icXUUY^`caZZ\\ZXVSQY^ZZbhd_c\\TZlm_PQ^^aorpsdUY\\\\^]akkbacfka_njdfgllglqiqv^NRokml`bYOLHDHUdbSNZ[LIPJFKTRIS^`[WXblaIEWb^_gncQOTQLJNUX_b_ZXU\\mrjceloifinxgNQ^`ULQXWPOUVWUKLPPWb_VUNIRWh`LEFKIKQXOCEKJFDIV]`\\WQMPSQNQ[a_ZUWUZ^\\\\ZY]ba\\\\c_^dhga[c_Rjvgdddinoigd\\WY^bcceklnldakmddiiloc`hnqihjforkkkdbbflppqok]\\syyuhft|pglwvlhq|hipqt{{ywpw{~zywwtsnpumfYdjbfjjj_X\\c`TQ]c`QFF@;DJKCHTMFDEJKDK]YRZa^SPWXRKMYaccgggnd\\cage^ipe_aeozsjlieiopkhmupmojkvvqwuxviisqjoioqmrjmoohhqnqvjpomlkbbpedlyp_gly|wssyzpnttyxgntetsnrt{|~zok{vlzrjb~ifintxwtv|{to~xs~}vywra{uzz~vwwm|hsnp{|x}|tgy~v|wz|x}y~~~uo|{{xvu{||~w}x~u{}u~¿¿¿ǿ»¾ȿƽĻľX_b_ZVVWWWW\\abaa`^[VQMLKJKNUUH@EIKLLJMQQMJMRZ`S=:CGGJQXXUTUURLKNKDJWZTRQLB<75:FQQKGHHGECCGLNH@@IQXTIAABCEGMSUZ^\\RNNRYbe^VSTVSQW_aa_WT\\eha[]_^anyxrja]bb__`__ellkjigdcefhhjmtulihggikljhmxwnihdekqoooold`iqeaaeeecccb]UMJPUPGEJMF@EJHKPJCAL_jh^WVW^edcb^^]YUUUXaa]\\agfbaXSYkm]QV]]bopop`TZ[Z[[ajg`bcdhadskcffihgnohqt^OTo{emnbbYNNLFKYdaQNZ[LJNIIOQLNXZ\\[TWbgWFK\\`\\cjdVNOOMKJOUX^_ZUTT_qpfeeingfjmudNU`^QJWZTONTUWVLJMPXaYTULJSWlUGCEJGIPTJAEIGCBJ[\\^]UNIORONU^c^YWXUZ^Z][Y\\^[Y\\bacdcb]^eXTrtab`bmrngc^UTZadcdgknmfahnjbfjjnl^ajrngkgiqqllibbafmonopk`iw{zqgn|yjiq{wkhyqfmqpt|ypz{oy|ywxwvrortmefqhhkihjdadc]SXab`PDC>9AIKCHTKEDFJE?K][X_`]VW^YQMQZacchgiqc[dbhg^ioe_ekqyrkliejnolhlrpmmfgsplurqrhgqqighnmk{ohnqnggnklzjmnmnf]bmhmfxmXc}hx{vknxtgjqqwqdnobu|nlknuyx~}nmsiytlk|gijlu{tvu|tzv}xx{~wwujz|x~}qu~j}ys|woyvz|sj}}}sxuxzvo{v|wv{~z|~y||~pýļúȿŻ¼¼½ƾ»ýĿa`]]ZVUVVVWZ]^^^^]\\VQMKHHJQXQCBILMMKKTVQMNTY_[I<AFGDJXZVTTUTLFILFGTZWSPJC><98ANQIDCEFC@ACIOJAAJRTUMEAAACIMQSUZ]WMMOU^caXTUTRPQY__ZVTYcgc]Z^^akuwtkd]`cb_^]]ailjggfecccehkmosqihgfgimkiirxrjhgdimpppnlh`bkjigggdb`bbbZNJPVTNIIMH;?MPIHIGEKZijc]YX]dgfdcb`^YTTXbfb`]_ehd^VRZlm]QV\\_foonm\\TZ[ZY[bie^abadbfrkacfgefnoioq`QXrt`mpdbXPSQKP]d^PO[[MMOFIQPLS[UY[SVa^NGR]]_ifWMLMMLJJPVY\\YURRWgrhbbcmneggkr_NWa\\OJ\\`QLMTTYVJJKPY^USUJJV[hLFAEIFHOPD?EGC?@N\\\\ZXPJENQQRU`e]WZYS\\[W][Y\\\\XW\\adfdb`\\b`O\\si^_`fnrkf_VRW]cddfhkmhacmnfbgjkkd\\cqqkhieltolkf`aahmmlkrmopz~pilszqglu~wfkzjmqmmtwtotn{~utuuvvsrttkiqtnomeflkhfc\\W^`aaN>@=6?JKBGQLECHF@?J]`]_`[ZbcXPPV\\bdcghlm_]eagf^jnc`gmrvpjkhekoolilqokkegrokolnqgeooihfikkx}ldnsoegleg||hhnmmc]^glvzcrjUaxfsupfksi_gnquiblecyvhifipru||nnsh{tqy|jomlvv|vy~r||~xy{xwuu}zy}zlq~rpzwqys}}v~snt~xzì|w{v{{{{}zs~Ǿ¾ɾÿĿǾ¼a]Z[YVTTUUWZ[[[[\\]^XQLIGGLSVLCGLLNOKNXYSQTY]`WC=GJGFR][VSTVRIHIGHQZYTSNE>==;>JQMDBBCA??CGKKCBKRPNPKC@BEGLOPRUWVOINTY_a^WUWRNPUY[YTSW_fe____`jvxsmf`adb^]\\[\\djkfeeddbacfjmnprlggffhjljhnxwmhhggjmopomjf`dkkjkmkc^`bbbVHP\\[RNMKG?;GOMFBCLOVagda_ZX]bggedb``ZUUZdeca^^dhb[TR[ml[RV[_homlhYT[\\YX\\fic^``__bhpi]_ceddmoimnaU]sp\\lrgbWRWVQT_d[PQ\\[QRPEJQPQUWUZYTZ^UJKV\\_fj]LGIJLMIHOUVWRPPQ[kocbbcliekcgq^PZaYLKdbMILSUUUKJKQYXQPRGO[_\\FGAEIFGMKA?DC?<BQZ[YQKHCNTVWZ_eaVYXT]UW_ZWYXTV]addfb`aaTOdl_\\]ckmhgdWPRZaedffhigb`jpibdghji_\\jsnhigfrslmkd`_aillhlvvqt}helwtkjr|}lcwmmslflpppu|mm{woqtuutttvqhnxvsqgdlrolhhbY[]c`H;?<8@KLBENJDFJC?@J]eba_\\_geWOU\\^fgcgkpi\\af`gf^jmbbjqssmiihhmpomklqqjhdhpkjnilphemnhhehjirxiajrodfi_`y{cajli`^Zan|salhT`~tbkogdij`^chqobah`gxkagdinpzzw{rotivy}turjvr|s~}xx|zxw~{~}}wz}~ufq}mqw}wqtxw~vxuq~{{~{|{}|ý¾¾ü»¿ļý½a]ZZWTRPPUXY[[[Z[]`ZRLHGJOSRIGMNMOPQVZXXZ^aa_SFDJMKMZaYTTVUNHHFFQ^^WROGA>=<=FOMDBDD@>=@EIIEBIQNILRIAAEILNOPRUUMGHOW]`]XWUPLPUVVWUSU\\cec```agqvsmhfdfd^\\[ZZ^fjidcccbabehlmnpoigedehjjhjsztjgiiklmmnmliecimolpolb\\_bb`UNZd[OMMH@=EPPI>@HUYZ`dbaa[Y\\chigc^ab^\\ZY`cdd`^cgaXTQ[ki\\UUX_kpkibVV]\\WW`hhb^aa\\^fjngZ]addakmghiaYcrl[j|sgbWSYZUVadXRUZZWXRGIORUTRU[WT[[PINY_cgcTHEEFLMHHPSRROMNUblj`^[ekcjn_eo]R\\_UHNicKHLRTSRKIJR[SMQNJT\\^UDFAFIDGLH?>B@<<DSYZWLGFCPZZYZ]gcUYXY]T]aVUUQRW_badhbdcWKYjbZ\\^fmibe`NPX]bdegghhddjlgdbehiha\\anoniifkuqkmjc_^bkjgfwtjzo_fmvtqrv~weitkvqdajplk{rgnzzojpuusrrvypfp{yvmcjvvplkqhWW]e^C;?;;FNM@CNKHMLA@DK]khb``dhfYU_`_kkchpre\\fg`eb^jkaclrsrkiihjnqpnnorpjfdimhilgjnjklkkiegiiqumcahmcdh``twb^glf]^Y_m~k_g`Tb~t_fnb`if[\\\\eri]aa]jqb^_]gns}z}}}xy{vq~ukv}|zvkx~s{u|xx~yzz~}{~{~zwy{|}qew{oowzyvuazxwr|t~{~|ĭûÿľ˿¾º¾¿_^[YUPMKMSWYZZZY[]aZQJHKMQSOHKQPNPRUYX\\cbbdd`QHKQUUW]]UQSUQJHHFN]d\\TOIC?=<>DLJC?ACA>=?BFGDAEKMGIPMA?GKJKNOQSUQFDIRY]^ZVTPIJTXUTUSQV_decaa`forplihiiha[ZZY[afiebdeb_^agklmnomifcbegijjnwxohgikkllmmljifglprssmjb[^ba^YYafYNNMG@ERWPG=FR\\\\[`bbbb][]bimh`[`aa`\\X_dffa^af_VRQZig]UTXalojg`WY^ZVZcihb`cb\\`kkkeX\\acb_ingfga^ipdYiwnfaXVZ[VWceXTZ[Z[\\THIOVVPPV[XUXUMLS[bebZOGECDNOFIQQONKIMYgkd[XZehdlfZgjZT^ZNHXncIFKRROOKGHTYOLOKMY\\\\PDC@GICFKF==?=:;GTWYRFEFIV_[W[`jaTYW`aXcaTTPMSYabamlaf^OMch^[^`glfb`ULU]_cfgiijkikkg`adghhd^`hlljhgiornllic^]fmjcmko|d`jnsusvz~ogt{prwj^_inhj||g`mwrhhpusrprzznep{}xlhqwupnpsdW]dh^HC@<FNPMCKSOMRMADKScmfbcegid[\\dbcokciqmabccad``kh_dpuqqmgggiptqnnrupjgfijhjkfkolllkkgdihiqwqc\\emcbhd`lq`YdlbZ`Z\\m~d^c[Sg~safj^_gaWVXepb\\_[_ni^^YYenv|x||v|z|}{zu|{tmw}{rz~~~wz{yyxy|~{}z{x{||z~|yxxxz{~}me~}|no~qtpv`yvw|zsyì¾žĽý˿º¿¿ſ]\\ZXTNJJMTYYYYYXZ]aYOJJMOQQMHNTRPQPRVXbjfcdc[OKRZ__]YRNPRRLGGHN[f`UPMHC>;>BHIB?AB>;<>BFFE@BILIHMNF?CLMJJNPRTVOFEMVY[ZYVOHJQUTRRRQSYaddca`bkqmjjjlmjd]YXWX^cefcdgf^[_ejiilmokfdccdehhktxrjghjlllljkjijhkotxusmkb]`e_]^`deWOQOLLRVTPJGOW\\Y\\bcbbb^\\Z]jqi`Y^bab\\X]ehfc`af]SNPZgf]UTYcmpje_Z]_ZV]eig`bfc[`mlicY\\ab`_imfeea`lm^Wgrie`WVZZWYcdVT^][_aXJIPUSLQ[\\WWVOLQXbf`[SHDFADRPFIPOLKIHO^hg^US[fdhjWYjeXX]TII^qdIDKQQJLKHKTRLLNISZVZKE>@HIBEGB<;=:8@KUUWLCEHK]`[Xabm`SYYge^i^PSNNW]cdjwl__WPUdc\\]aagifaYLR^acefiknoqnkgbbdgfdeccgijjgfforommmia[^emhcsuhzjbemlqssxzvil{{ssxqb\\`hjcj{s`^krjcgprqpns}yjdq~vlntusrpqpe`higb[MBLUSRQOPWSSVNDLV[emhbdghjf^acajtkaipgacdbad__jd]ftxqomhghkrxumpxvqlefijjljemolnnomeekghrxqd]dlfcghbfm^Vbj_ZaZ\\ozvc]_ZVltbfg[]c^UV]jjZY\\]joc\\ZXZeqzy|yyqtx{{~yzxxq|{xz|y|uzz{{}~yw~|vt{{|}xy~~{xuvzx~uii|lqvisudgvtyxn|Ⱥµÿ¿ʿ¿]\\[ZSKHJNTYYYYXWZ]^UMJLNPPMKKPTSPNNP[`dhfeeaXRT\\ab_XRNMRUQKGEJYedXOOPJA:<BFE@AFF?98;@EGFDBGKKJJJFEGHHGHJNQSUTLEHSXXXXUPKJRTQPQPPPW^bcba`bhnmhhkmlkd^YWWVZ_eecdghaYZbigdekokdbeedcdfiovumgfhlnmkkjikjlkmqtxsrokd`cga_acd`UQTUXWTNNSURSVZY^dc```_\\Z_mrf[V[abb]X]eklhccg^RLO[fd\\VV[dorjd__aa[X`higabec\\annha[\\ab_^gjedd`amkYWfled`UUZXW\\dbTV^ZYce[PNRTOLV`]WYTKMS[fdVUPBCF?ESNCKRNIGEHTag`VOR_dclcQ[h_XZ\\SHNdpcHCKQMELLGKPOMMLMXYUYM@:@JJCDA=;9968BMSUSGDFIRda^\\c^oaS[`ngimZNTMQ]bdhs~d_YST[aa^`caegc[UT\\cegghlqtvqjgeddgebbggefghgefjoolmnmg\\]bimdl||kkt^dhnmnorvwmhnyuruvdZZ_gfalwiZ_ika^flrqomtyqeet}qlpsrqqpsvnimlkmhNM^^WTVYYXUYXQNXbbfmhceilmf`bbcnrhaiof`ccbaa^`hb]gtunmkediouzunu{uplghjlknjeoqopsrhbinghryrfacjjhlqc`iaZbg`bd_dquqc[_]\\tudde^_`YW^fjbX[cltl\\XWV\\lz}{vxmwm~}zvzzyvwuyuy~|z||}{svx}~wvxvs}yqp|~xz~}vzz|zuv|v~t|gnzlzilupcjsrv|jʶȶúÿÿƾžʿ¾\\ZYZSKIKPVYYXVVWZ^]RKJMPQPKJMSSURLLT_deffgg_WX]bdaXRRNLRWPIGGRch`TRWTF:9@GHCAGKC::<>BEEDDHLLKKIFEGHFCBFKOQSUOEDNXYWVVPHKSWSMPQMNS]bdb__cjnmgejlnid]YWVVW\\cebafgaXW]ec`afnpg`egecbegmuuohfehnomlllkkllmoqssrqpkedhibacb_[UWZ\\_\\TLTa`UTWXY_ec]^`^\\\\cpteWQ[addZW_dprleeh^RKN[eb[WW\\fqrjdabfd[Ydlihfbcc_boofb\\[bd^^egccc`bnjWWfhbe`TU[WW^e`SW_XVdg\\VVVOJM\\g^WZSJMT\\f[OTLBFC<JTIALTLFDDIWcaVMNW_aeiZQ\\d]YXURMVgkbIDNPF>POGILNMLKQ[WUXL<8CLICC=988769ENQQPDAJL[lca`e_raU_gqlpkWSVLSdihlu{aXTX\\_bd``cace_VW^beghhjpvxslhecdijd_gjkfcdfedemplkmoj]Z_gmkhs{tism^fkplknpsoigpqmtwl]XX^fc`kr_V_fcZ\\birrnlqsi`fv{omqppomowzmioorqgX^b^^]`b`WV_[WZbigjmgegjnnhee`dppgaiqg`ccba_^bf`]juqlljdajqv}unx}tomhilmmojertnsvofejkhksxshehjlnqqa]gdacgiijknrtpe`fgltfdeff`Yakjfdgorwtd[[Y]hz~xtznrh|}vuy~~yuuvtzywy|~{~yyrv|{{tstztpwkm|vxzyv{|~zxv}}wsvufvxqxew|fllpw{|rvȳʹ»ÿǿ¼ɿ¾ZWXVQKKNSXZXWUUY[^[QJLNPQNIJOSTUPJNYadfffhg_X\\`dc\\SQQLLSWPHHKYhh_Y[[P?6<EHEFKMF:9==>BEEEGKNNLKHEFFHEABFKPTVRE>FSXXVUTMHNXUPORQLNZ_ee_[akpnjffkole_YWUUWY_fd`bgdYTY`c^^ckplcckhcaceiqvrjfeflqomlllmknnooqrprpojfflibbda]ZW_`^c_WUdoeUQVXYbgd[]_\\[]dlufUMXbchYSbaqrlhii^RMO\\e_ZYZ^iqrjfddig]]ilhlmcaefdmpia][`d`^bdabb_bqjUWfgcd_QTZVW_e_QY`TTdg^][TLIPdl^XYQLQV\\_SOQEDG>BRSHBMTJDBCN\\bYKFNW^agaRQ\\a]YVURM\\fkbHEPN>ASMEHMMKJKW\\UUXD9:GMGCB;87775;HNOPPG>IL`qgbbfbpaW`krrrjWYTJXlmopsybNTabcgha_cbcc_\\^bdeghhlvyvmhfcbgkibdlkjcaccccfopkknndW[cknkq~tmr|u`eensjipsnlggpnkttfZWY_f``ihYU\\a_WW]dmpokknf`hywmmoonmlnwzljpprqljfc`ceiibW[ecbdjljnlfghjnnidc^conhbhpe^aaba^\\bf_]lumjlgabkty|to{}romijlnonietujz|igjljintwsjhjjlrskaahgegnpmrwuqrrmjpvthjkijeanwpouwvoca`_kx}~sszoneu|uty{|{|yrrtryzwv}~z|zw~st}zzxsoqy}}sntim~~xwwwx{|}uzxmzoh~rznmylolqwpƳĽſǿþVUVROMNPUZZWVSTZ^\\XQMOQQPLIKPTTTOMV_adfffgf`[`cb_UPQMKOVXLDJTbhf`__TC88AKLHJOI;579;@EEHKLMMMMKIHHFFECEHMS]ZL@COVVUTTQMNSTLPUSNKSacba]]fmlihfhmnf]YUSRSW]bcabfg\\TV]`^]biomebijeaadgmsqmhdchprommmllmpqpnoppppoifjljaff^XX^jdbe]ZdqqbONUX[hkbY[]\\[_hksdWQYbek[Sggosmkli_TOP[d^[\\^clrrihjjmibckjhpsfafjhmnga][bfb^_b```\\briSZgecc\\QUYSWae\\Q[_PRdgdf_QHIVhk`YWSRWY^]RPKBEDCNSKEDMRIEBFT\\YLEGPX_deWNT[^\\WTVUS_fi^IHQG6@SIBGLLGEKWZSVW?8=KLFB?768866?MONPNA:LVnrdcefdraZdpttrj]XOLcqntorx^L[feeiha_ddffcbbeddhhjqyulhgebckjdcoqkc^`gfefinnlllg\\Z_fmpp}rqvwocikqrjjrskjfiomkqmb[Z\\_c]`e_VVY^[VV[bmplhijdal{}rknnlkklmvwllpoopuqhgilnlkaY^gklmomorlfgjlmmga_[bmmgahmc]a```[Zbd]_mqkkja`emw{yqszyromjkmoonigxvo|ekqmkkntwsljjimusjhfgkkmrqrz|wpswsv{}voqsopljy|~zrtpmielx~{~rr{qhimuswxyzzzwqpsryyw}s|~~~sx}xvzzu{yvywqjn{{{~roqhp~~~}zvuvxzy{~|uyyonnus~rwrn{yx~~öʿƿÿļÿÿUWVQJKRTWYXVSPU^a[TPOSUSOIHMRUTTNR^bbdfggffa^cc_ZTROHKW^UEDP]eedb_WI<:?HQPJLL?568;=CGJNNMMNNMJHIHDEEFHJS]`TDCPWUTTTRNOTRKMTSKIQ\\cb^[]djkhgghlnh\\VUONORY^abaeg`UUZ]\\\\`hpldbiohbabfkpsmjebdkrrommonnosspnmoopolfhmnkfjf[VXdlebc\\`nsl]MKQV]jnaXY[Z[`ikobXUZbfn]RkoosnmmjaXQQ\\c^]`bgnrqjlpnppffllirui`fomoleb^\\che_^`]]^[_ohT[fbccYQVWRXceZPY[NRcgfjaPDH[llbZUUVXX][POGBECLWNDDGPRHCAKZ[OCBJRX^eaQOVZ[ZTUYSR]ffWIJM>5FPC@HKJEDMXWQXU77AMHB@;528<46CPMLRL<=Tg{jagfhjtb_ktutrlaUKUorptkvx[Ufhhkleaeggljgfdfdcjjluukdeedaknhcmtka\\\\djihimnmlmi^\\_ckor}zqxumjlkptljlrnggdknkknf`Z\\_`a[`c\\VSUYVRT[bllfdfgbfqxwomomjiilouulnqolovpjlosqkliddmrmpqoqrkdgmnmme^\\Z_jlf`eh`]____WWbc[apnike\\aip{qmx{vrpnllnpqnlkywrygpqmmlpvwtnkiltwqlmjkooquwy}{wrwzu{}~|xuvwxvwzsuwpsqmq{z~~|qq}re}hirpwwxwwwunmqrxyx{o{}~}ptxtu~uz~xqrtnei|~|wy}pomgt}|}{wrpswxv|x}{vrxqs||y}sq{|y}{ŶĻƾþ¿·ÿWXVNJNUYYYUSRU\\_]XTUVVVTNJKNSUSSRX`bcfhhhgb_adcZUSSNHO\\]MCKZbcddcXIA=AHSVNKOG735;BGLQPMJJMPONLKGEDDFHJR_cTEBMXWRRSSPNPRPNUUKGMZ`_][Ybhkihghjnj_UQRLLQV]__`cgaWRW[ZZ^fnqe_gqnc`adjnpoigc`gotqnlmpqrrrtojkpqpmhfjpqomkdZW]iid^]]dooh]MIOU]ioaXWXXZ\\hnj`ZX\\cgp_Qisqsonnje[RT_ca_acgnrpnprossgfmolrvl_dtuslda^^dhhc^^\\[[Y^niY_d`caWRTUTZcaUMVWKRbcclfOAI_njb[UWZZW[ZRMCDGDRUE@ELTPC?ESYQE@DLSXae\\NMTYZXSTXRR`ldRJKE79JKACIKICDOWRQXO27ELEB>831;>38JSKJSG8D[q~a_jhjqtbemuurrn`POewrrrk}v^dlilpocbmkjwrifegeejlntnegfbbiplilrn`Y\\dkieilmnnlea_adfmpwvt{rjmolqvkllngceelmlliea^_`_`[aa[TPQVSORZbifabb_`jstollkhgfglputrpnllqtnlorxshoqgfssmtqmopibgpnkkc\\[Y]ii`]de\\[_]^[RUcbZcokgj_\\fkq||lmy{vrqollnppqrrzxxuktomonrwxvokjrzuoqokppqxz~}xww~~x|~|~vt}~|~}wv}zovxrq{x}|qp}te{ijupsuwvtrqn{gkrxwxym{}~x{~qr{uw{y}y|}vjnrk`g{~uy~lolnz|yz{xpkntqtuu{xyzr|tu{~uy~~||zw~{y}ǹÿȾ÷½»WURLOUXYXWQQ[a^\\ZZYZ[ZTPMKMPTUSTZ^_`bgkkie``cd]USSRMMW_WGJY^ab`caTIECFRXTMORC415?INTUNHJORSRPNJECDFGIR_dZG@HW\\RLNPQQQQQOSVMGLW^^^YW[fkkjigjnj_VPMMLOV]^__acbYSUYZY[bkpjbgqoe```flppkddcajttplnpruvvtpkhkptohbelrromke\\Zcke_Y[`enmfZKJPV[ek`WUTXXYhpd`[[`fkraSivtrnnnlh]TYbebabdhnrqqrsrtqfgnsqswoaarzukcb_]dkmh`^][ZY^ml]_c_a_VRUTT\\a[PLVSHTb`_niOBObljb\\V\\`[X[ZSJ@EIIVN>DHMVM=>KUSG>?GMQWcfYMLPY\\VRWXSXfn`OMLA4<MI@EIFCAFORPTWI7<JIBA:534??2=PULLTF<Obv|]cmimrrbglsupto\\QZkxqsrpvgkljotpcdtqr|qfbgiiijnpqjfkfbgpnlpplc[]fmmddjnoolh^`dcdjntzswvpmopnssomjieacellnlfefdcb^^]a_WQMOTQNPXbgcaa^[bmqnljigdbafmprsqplknrqmopryuitudjvmoummpog`hpjgg`[[Y]he\\\\c`WZ^][VNUc`Ydlcdh]]jns{vkoxyvusnjmrqnq|yx|~~srvmlonsxzwokovypmsqlonu{yzvw~|}~|qr|z{~yrxzwwx~~rrtgzljusstttqomn}xdgqvv}un|vz}tz~}ur~{uv~yu|w}}uhkrogl}~~v|ks~nuwr{|xnilrmszqtyv{ysvy|tvxy~{~|zwuz~v}{̿¾øĿ¾VSONTY[ZWROT`cZXX\\^_`\\SNLLPSUSRX_a_`chlmgaacc^VSRSSNQ]]UNU\\]___a_UNLIPZWQPVO<23<HPSSPIKSUSRRPMGBCFFGN]fZIDIV]ULJOOOQSSRTTOJLU]_^XVZahkjkhinl`SMJIHLU]`_\\[^_ZRRXZWX]elickvse_`^`gmqmfbcbfsxtnkouxyzxrlhgjsvnd`gptrnkid^^ei_YU]cdkh`SJLTW\\di_XTRVXYhqc_]]cjqteWiwvpllnokbZ_eecadfinqrtvutupfhpvrrwqd`qzwlfc_^gmpme`]\\\\Z^ml]]a__^WQVUT^aYOLSOHVb\\]ojNER_iid\\U^b[ZZ[SD=HLP\\I=LOMSK=DQTI<8@IOQVbcSIJMX\\SPWWV\\giXMNM?2@NFBDEB>@FLMOTPB@EMGA?715:B>4CSTLMQDCYhyy\\eplospdglttptlZXbnvpvtr}khilrupelzsxzkbbjlkkkqppjjjfhkmmoqle_]eoph`clrrle`^fgcelo|rqxqoopvqtuqljefebfllomdfkcee\\^^b]UNKMTRMOX`ca^^\\\\gnmkihfb`^`goqssqljnrronsoqzvnzwgnujswjlqpd`kogdd^[ZW\\gbXZ]XRY][VPKTa_[de]eiZ^lpwxolpvwvvsnhmwtlpyxx|uklposxzvmmtztllprqqowzzwv{}|{||tw{{}|y{yz}yuwrgzrnruvutrpllp}ubdqut}ut{qy{vzzwp{{wx}zpzv|~}}ufittoqz}xkx|rtmyvjgkrkpytqruuzlqyu~syz~}~}z|wurvrz~xwz~¶UQPTY[Z[VNR^d_VWZ`cbb[SMKNQUVTSZ_`__djnia]ae`WVUUUURW][WVZ]]^^]`_WQNQY\\URWWH728GSXTNIKSXWSTSPHBACGGLZe]IBJT`\\MHNPOPSTVWWQKMU]`^ZTV^fjkighjmbTKIGDHQ[``[X\\_[QPUXVV[cggcgvxg\\^`^bimnleb``l{wpnmqy}|vlhginwvjbairwuniffbaegYPQ_cdieYKGOWX^fk_ZUQTXXhqe_\\]hqwwg[jwvnikprogafhfbcghinqquvvwvofirvrsvpfbp|ymgd`bioqqib^[[Y^ml__aaa^WQTVY__XOLPKJX^Z\\lfOKS\\hif]S\\`[[\\]SA>NUY]GBWTMPHAKVQA58CKORXc^KGKMX\\SOUZ[_fcQGKK<3EPDAFE?>@FJJNTK@JNNDA?3/8@@<:ITUMOOHM^iwu_golpvpcglssopi[[enssyrrfcioutnhv~pxyh_fokkkmtpplkjhkmmormd`]`krla`kqrrg]\\cigcels}mpupoovxrvynjhdghhinnnkdllbhj_]beWNPKMUTMQW\\a_]ZV^imggheb_]\\`hoopplijprnlqumo{xq{vjrpjwthlql__mmccc]\\\\WY`^ZXVROW]XSMJTa_]d_[ifYcoqvrlpquvtvungpvqnrxu~~qikqprw{unry|rlnnstrszyz}tx}{xz|y{|z|{{z{y~yysiy~wurw{wtsrnmtwbaqvs|}zy{o|}txx~wo|}{|}~{mpw{}uegvwrsy||j}ztozvgblrhlpkkorsy|sesxsv|||}zxx~wtpqss~z}t~xw|Ÿÿ½SQRV[[YXTT^gf[X\\_cfec[RNNRRTUVZ_```aflkf_]abYSUWXVUW]_ZXZ^_]\\]]^^[XXZ^\\VYYO@57CRYVPJLSWTRQSSMA<@FKP[gcOAGV]]QFIQSSUVWWWUMIPZ^_[VVYafjjgchkdULIEDIT[^\\ZUV__UOSVUVZbeeadqxj[X]__eklmjgb`guzqllnt}woiffmtvre`dlsywmhdfdaffVLUbeei`TKKUYW_hk^[UQTXVfrgZW_kuzyi_nwwlgjqtqidjkgbeihjpqpuvvxvmfirvrsupgcp}znhdbfknpsnf`[[Y`lld__cc]WRSW\\a^WOLNHLY]Y\\kbNOSZfhe]S\\`\\]^^R@CY^YWIN]TLOHFQWM=7;ELORY`VEFJLY\\QOVZ\\^aYHCKI99JMBBEB<=@EFIMRMGPQKCB:,1=D>;?NYVMPQQVcjtsbhokpvn`dlrplkg^\\ejqx{nvx_`lrurlk|}o{ygblrklnruormkjjlmnpng^]`fqob]hppnj`Z`giebep|tknqnnqyvrxxjifdggijnrnfhqhdoj]akcOMPLMWUMRV[]_`US`khagg`\\YZ\\`hmmnmjgjqojmsrin|wtsjqmlvnemoi]`liacc]\\^XTZ][TQON[^YSKJTbb_aY\\jaYgpstjirpsurvvngrwrrvy}zxpmiosrw{untzzsqqlturw}}{sy~{y~||z}z||{z{{|tkz{zvx~|tssstx|y{c^tyvx~}xn~tyx~yq}~~}|ql|{}vikzy}zlup{wc]ttejmfhnorx{vhezvtw}yz~|{~w{xut~}{soo{pu}}|qw{s}|y¾¿ÿ¾}}RQTX[[WTV^gg_WYaefhfbZSPPQTTRV]ab`_cilgb]_d]RPTWXVU[a^ZZ]^^\\\\^]]^\\Z]aa]ZYPD:8APYYRLKTZXRQQSM@8<GLR[deVDCO[`VHFNTUWWXXWVPKLU]_ZUUX_bdhhbbkdUIGECJW^_ZVVUX\\XQRTUVY^bbbblvm]VY]]_fjmnjfbfryvkhjp{xoklffnyvi^_dmuyulgffdcfdTS^feff\\QPT][W_hg^[VPUWUfuiRVbqx{yjcpwvkfjpushglkgcfjjnqonqtvxtmfitxqrtnhdp}yojdbinmotqg`]][akmg``dc^YQQY`b_XOKLIMWZX]j\\LQSXfhe\\R]a\\]^]N=Hb^PPQ]`PKONLTXH:9AIMOU[^NCHIP]]PNUYY[\\OCBIH>ENB?DGA:;AFGHMOQSNLHB@6+2BD=<BRZVNPZV\\gjrqfkmlsuiaelqmiig`^ejpzwk|r_eoswrln|{ruffpnknutppsljjkllkke^\\aglpf\\doolh`YZ`hiebgw}ljikilqyusxtiheeggljmsnflpjksb\\ko]OTQLNWTMRUZZ_^RUal_]fd[VVZ\\`ijlomgemojkpqoin|wyojnlosjeloh^`heacb^ccUNX`[PNLP_^XRJKTed`^T]i\\\\koqpfitoruquvngrwttxyy~qvselux{zuntyzvvrktxtx}zsy}}{|{|{zz{}}{}|}tn{||xytswz}{~z{{b_v~|v~vn}t|~{s~~~|tn||vqvzrxq{v_awdjkeglmqywobnrxvu{t~zuy}ys{zsou|tmnyvn{~{~}uv{pxv}~y|¸¿ſ~|{}QSVZ\\\\VTYfmfXQZdijie`YTRPRWXZ^acca`fllg`\\_aVMOUXWWX__[[^`^\\\\]^^^^]\\aec^ZTJB=<ER[ULJR\\]WSTTOD9:FQV^feXGDLX]YKENUW[[YWWWSLLR]b]VUX[bdcea]dgZICCCJW]\\YWTRV\\YSPSSRV\\``_`gqo_VVZ]]agkpmjcdmwunhflwrkllhjrztd]`fpz{qhfhgdefbVX^fede]QTY`\\Y_he]ZVPUWVgwkUXgu{|ymgrwsiehpxvihmlgegjmppnmnruvtmfjvyrrsnifp{yqlfdkqmmtqica_[cnqjdcfe`[RP\\gf`ZPJKKPUVX]hYKTSWegcZS[][]_\\L@Qf[LMVjeKFPSRXVC:>FLLNU\\ZJDFFP^\\NMUVUWTJBCIGCKM=?FC<8>DEFHMTXVMIE@;2-8FB>>GWZWPR^]`hmrqghklssgcelpjfheabgmrzqkmckoswqko{yusghoomsyslrtkkkklmhd`\\_hllibclojgc_Z\\biic`i}zyvgkegckqwrsuoigcghhljnrnkpporn`gpj\\TYPKPYTMRRV\\_WPU`f\\[caVRV\\]bhghjf`elidjopkep{x|~jgjkqneelng]aeb`b`cmeOJWaYOLJR`]YPIMVgg`\\R_hY`mmnmfjvptupuumgqvuuzx|zu|sblz{{ztqsvxy{tku}yw{|vsy}}{zyyz{y}{|}||~up{}~~yvry||z{}hdvwsnt{|w}~ws{zy|r{tenvckldhklsyuof{|onvywyy{~pw{vu{~umr}wmmwlt{w|}{xnvtyxƾþ~{zz|QSX\\]\\WYbpobQM[fllhd^ZVTQUZ[^`cdddgjmke`^\\XRMQYYY\\__XV_ba^Z[]__^_^^cf`YVNFB>?IV\\PIMZb[UTVSG;;EQYafg[ICLW][PIMVZ^`ZVVWSMMT\\caXRSX\\ceb][af\\QD?AHU^[UWVQQY\\VRQSQQW\\^\\\\cmqdUVYXY]dkqqgedisupjijrvolnihpyzna`bfr~|ndehgeffaZZ^hebd_UW]`\\[`gb^ZWSVWWixmXYht{|{okuyqjfhqyvjlolighkpsqmkmprusmhjvyrrrokhqyxqlefmqmlsqkgfa]dorlfgigc^RP]kkb[QJKMRQPW^fXMVSVcecYSYZ[_`ZMFVi]KK\\sdEERWT[VC>GJLMNV[UHEFIT^XMMRSTTMBBHHEIME8@D>88BGFDGMUXQGEC?8-3BHA?AKX[XST_acjotqfgimrlcdelledecbehltwmo~mikntumio{vvsihnoow{qmvtkmmjoj__a_emifghkmmjc__]^dkd_cp{qzofiddblqsponjgeafhhnknrllprqrhcnpcWY\\LMRYUMPQV^]QOT^c[[`ZQPX]^begic]\\fgdchomedsxx}zdcglrkefkme]_b`_aanv`GFWbXPOLW`]ZQLQWij`XPafXaljkldivqttoutjfpuuv{vxr{qbp|wtvurv{vmwyvvutz~}~yxyzzyz||||~}~vs{~y~xqy~|zz}nkx{uow~}|~xx{~v}mushoicikkv~wpurrumvyty{~{{nvz~~syyykp~|}rmu}so{vw~~~vwtvzſþ¼ÿ½~~|zyyzPTZ^_[X`lpeWPXflmkgb^ZXWVZ]\\^bdedgmolgb__ZSOQV[]\\^`\\V[cd`\\\\^___`aaade]SMHDA>CQ]XKLVbaVQSTK<9DSY]ehaPCGTZXTMNY_`a\\UTWYUQS[``YPOUZ]ab\\W^gbPD=>FT^]VQUTMP[[TRQQPSX[ZY_inhXRWXTT_kssjabgmqqmikr|pnoniiu|ugccdft~yjbefgefdaZZ_jd`b`\\\\_aZZbgd^WWWYWVhxnYZgt{z{qmwypjikryvmnpolhfjsvpiimoqtsnjlvysrrmkksywrjcdmsnkqrmigb_dnrlgilid^TQ]kmc[RLLOQNLU^dXOXTWabaYQTX[__[LJ]l]HNaraCFU[X^ZGBKMMOSXXRGCFQ][PLORSSSK>@JHDKK=5?A:6;GG@>FPTRJB?>:53@LHBCGR[Z\\VVccbjpuqefinqhadejgcdaafhfjuskq{yolkpurhfnxtw}phjopqw{royrmpqokbX_ddkkafqnkkkfb__^_gk_]lwrm|hgea`cmqonlifdaadegnlmonlpuqkejtm[R`[MQUXTMSUZaVJOS]a[[[UNP\\_]`cgk`V]fc^ajojbhrr{~t`afmqifhkkc]]___aewxXCFXc\\XSNZa^\\ROSWlobUObdYbjiijchvrtsnvrggovvs|utn|pbszstyupt}xnyxuysvtz}}~xxz{xvx~{~|}z~~~|zv}}x|{ry~xx|ur{vr~~yz{t~p}npvg_jlj|wn}lyonvxu|~~y{zymux}sy|lmw|ztywmywr}x}wwuÿÿÿƿ¿~}{ywwy}OU]a_\\^jpk]SWdilliea_\\ZZ[_`]afgegnqogb``^YSQUZ]`_^\\W[eda_\\\\^```aaabdcZNGEDA@K\\aRJUac[RQPJ?:CNUY^dcVIGNSRPMOYcc_[TRSVXXVZ^]WQMOW]]\\[YZbcTD<=EQ\\^VRTUNIS_ZQOMNQTWYY]flgZRUVRQYhstkb`eikklkjr|vpppnjpzzmccbdgvwfbeeeed_[ZVaje_a``aabYXblg\\SV]\\VThxpZYeu|z{soyynkjlrwvoprqnhekuumghnnpsrnlmw{utqllmsxwsjbdmqnmrrokhebenrlilnke_VS[loc[TONOSMIT]cYQZZY^_^VMOVZ\\_ZLNemSEUdp_CHU]_b[KIPNMSY\\XPGCIU\\UKINQSTOC=DLIGKD79C>45?GD;>HPRPG>;957?LQGEKQY\\^b[Zheakrvoefjmneadeheca]adefmupjpxxslkquqfdnusw{jelqrrwxtuzqoutmbYXdgfkcatxlilkdcb`^agh_brthkwhebZ]emnjkke`_^cdagnlknnjnunegtvfWVeURWVVQOZZ^bNEPS]_[YXSMO_a\\^cjhWR^c`\\`ilfblqq|{n_`gnlggjljb\\\\__`glxuYIKXhh^SO\\a_\\QRTWpucQPdc[bfhhh`hwqrpmwobfosrp|uon}neyytvzuoszpxyvuqtry{}|wxz{ytu|{||~z~}}x}~yz}uyxxwz}}yx}|}~{tyjw~f^jlmqrvo}zmowx{zwyy|wlrwyty~nls~~{vvvyszy{rĽ¾½ÿÿǿ½ƾ¿¿~}zwwwx{QY_b__grof[Zckjihfcba^]]`cdcfkljlppkc_``\\WVX]__a_ZVXajd^^\\\\^`bbbaacc\\PGFFDAFVaZKO`d\\TROIB=CMTW[_aZJCKRPMNLRag_WRPQSUXYUUZYQLOV\\^]WUX`^TC<=DOY[UPSWQJQ\\]TMKJMQUWY\\dkh[PRVQNWittj`^agighhjq{xqqqpliu|se`bbbgvtdbcdee`WTXV`geaabbbabYYdle[QW`]TUjunYWdu|xytr|xlkkmqusprsrpgdluslgjnpqsroonw}xtpkmnruurjbdjmmorrokhebfnrlimplfa\\V[lqg_WSSQTOIT]aYS^^Y\\]\\THIU[Y_YMQhkJF`hn]EKV\\aeZOQUOMTXZUNGFNXXOHINQTWK9=NNFFG>6<D<47?D?9?JQQOH;866=ISPEHQY[[di_]iebkruneeimldadcgcb_Y]bdhpsliovzvlkquobclsswxidmtsruvz~zpqwpdZWbkgff]h~wijmjeddb`cieekqm`iqda\\U\\fljgjg`\\Y\\c__jlkjmjgosiclvnbY`aMXZWUOU`\\a`LHPR\\_ZXWRLPcbX]fk^MP_b\\Y^ehbeqrv{ti`bikffilida][_^bnqsq_QN]rm]UT\\aaZQTVXrxcOQea\\`dhfd^jtnnonuk_gmoon{v{no}omxwzwtps{qxzxsqtsx|y}{uvxyxsyyz{}x}}}~x~~yw~|}~uw|u{|~~|~ztf}d_kmupu~wt|{mv{~}t|{u{|vwwyxmqxxx~|{rqv{~xw|w{qĿ¿ſ½ƾ»~~~~~}{xwvvw{U^bccflpld]gnmifcccdda__dhfejppnonlf`^a`\\XXZ]^^_\\YV\\dd`_][[_bdcaaa`^QDEHHHEOa_QL[gbWSOIBBFLQUY_d]OFINMNNOOYfeZOOOPRTXVQRUSNOU]_^YVY^`UC:;AMXZTPPRQLMX]UJIIJORUX[bjl_RNRQPZlwvl_Z`dgiiiioz~yqmppnilxylabdbbgu{naabbbb[SUXY_decababcaY]gkcXQY`_W\\jpi[[et|vwtt}vjkkmptroqrqofdktslijnqrtroonw{unjmnrtsphcdgknppqoliecgmojhlomfdc\\]kqjc[XWVXPIS[_YWcaWY[[RFGTYV\\XMUeeKPhim\\JQW[adZUZZNLQTWSLGKWZRHFKOQTVH:HTKAAC=:@D:49@EA:@JNQRJ:878APTNEMRY\\]jm`_gcckqtlcdhljcbdfiba\\WZafjnmjinw|vklruk^bmqrwvifouqotv~wotti`][ildfd`s~tkkljhhdb`ckggkmg\\jpb]VU^egdegb[YVZb\\^mihikecmnegttja^f\\Na[ZSO^f\\b_LKPQ[^ZXROMSibYckcRKVb]UW`jg_ersuwqeachgcikjeca]Z]afqmqqeXWerk[[[Y`e\\PXXZtwaPUe`[_cgc__kpilnkpg^gklmlxt|wmp|}pqwvzurrt~|sx{z~qpqquyw{xtuvwwt}wxw}{~s}~}|}~z{}}zu~~}}}|stxz{|}~|{|{~~||qfa_lr{qu{zw{r{yvv|}~}xrxzvvwy{oqy{}|~~|uv{}y}~xz¼þ¾þĽÿ}{{{{{{zxxwuuwz}Y`cehkmnkdfmokgdba`cedcefjihnrromhec_`ca]ZYY[\\[[XXYac\\]`][Z_efda`a_WH@CIJJLYaWQXfd]WPGCCFMORVZabVLJNLHLNOXcf]RLNOPPRUQOSSPMR[^[ZUZa_UG:<AJVZVNNPMJKQYWLEFJMQSVZ`hldUNNNP]ozui`[]cddfikmv}}yrmoomiir|uf_beabguzl^aa`_^UTXZ]bfgebaadd^Y_hj`RQ[b`Zajmg\\^erzvtsu|tjjkmprpoqqqmfdktsliknqstrqomw~vmjmorssohcehlpqonomiedhmmihlomgeheclqkda_[X[RJRY]ZZgdVWXYQCFTXTZVOXd`OWhgj]PTW[bb[`aZNMQSWUMJSYUKEGLOPUTICQUF?DIB<FE:7@GJB@DIMQUK888:EVVPKPP\\bbooa`gcelqukcdhkgbbhkj_]WUZ`iljijimy~rkntugZamprwvifqwomsxuourcacdmi`ebd|qmlkjjjha_fokfggb_jmaYRT]bb`cf_VXUZb\\digfhjdbihcmtphabiT\\i\\ZQSdl^d]LLPQY[[WOOOZkb^hhYKR]e[OYiof]esttsncbdgd`kniaa`]Z\\corkorkbbjsj]c]V^h[P\\\\_wt\\R[f^[]bga[_llemjdme]hjjjkvtwtlq|{qs}wvzusrs}|tv}||{poootwuz~vsuuuwuyu|wtzy~mz~|{|~}}x}||s{~{y|rsuzz~|ytzz~}~{tmh^^nwsy}||~vzvx|{{x{~~y|ptwvvx{}pq||z{{}~~xz|~}»¿ľſÿ~|zyyzyyyxwvstwy|cffiknpnijqmjifccccdeddfhjhjqsrnhcaaccca][ZYYYWXXZ]a^Y\\_\\Z\\aefdaa`]SE>DJJMU`_TS`b]WRMEDIJNQSVY]YPMNLIILNQ]e_TMLMOOPSRNPRQQTY[ZYV[_`SF;<BKTXUNLONJHNTTNFEHNORSW]ejhWLKLMWmyuf\\Y[bcccehiqz}{zslmqniemz|n`^aeccftxh__^]^[SVZ[^bijgb^bhb[Zbhh^PS[b`]ckld\\^erxvssuzqijjlnqonooomgchrsljknrssssqmvvljmorssoicejnsrmlmliefikkiilomgfljflqkfea[Z]UKS[]]`jcUSWYOAESVSWUQYb^Q[hdf]STV\\b_[eg\\SMOSZYQT\\\\RFHLPRQUVMHQWJ=BKHGME7<FJKDBFHMTUG6799I[ZRTRRafdrm[agdglqsjegijgbanui[WTV\\cmlfglhjwtknvtfY^jpruvkgovootw~yosrdbfine^fciqnmlklmg]`kqjfeb`ajf_UPSY_a_bf^TWUZ`]ggefhjaafcerlkhacjUdg\\ZQXjo`dYLNOPZ][UPSSakdeibSIUbeWN\\kpf\\dtusrnaacfcamng`ba]Y\\erphnrnlhjsl`e^V_i[Ra_cyqYVaf^ZZ`f_X_liflc`kd^fihikt~rtrkq|{pqyywyutqs}{tsz|{|xpnnnruuyzurttuvvvtyvrxx}~iz~{||z~|}w~|{|rx~zu{zqqt{y|}wpwy~|}~}ysok}^`mws}~zv~}yy{}xywz~znrwxwz}~~qr}zvwy}|{{}{~þþÿÿ~|zxwxxxxwvusstwzfghjmnonlormihfddefgffghjkklqtpjcabdedb`^\\[ZYXVY^^`]XY\\^[[adfecbc_XLDAFJKS^`ZV\\__ZULDCILNPTVX[[TMLKHHLNPWbcVLKLLMNOPONOOPQX[XTTY`^TD9;BJRVSLJKLLJIOQMIHHKOPRUZahg]NIJJPdutf[XZ_cccfefkv{zyvnlnojhgr{vh_^cddegrsd]]\\[[YUX[[\\clnh_\\bkbZ\\cfe^VU[abafkja\\`grvtsstwmgijknpmllknlfbhqskijmssrrsqmvujimorsroidfjpvslllkighkjiijmpmfimigmojhg`]_aZQV^__elcTOUZN@GSTQUTSZ`\\Wbg_a_USV]a\\[gf]TMNU]\\Y\\`]ODJRUUTWWRQVXJAMPJPPD;CKKJFDFKSZUE<;9?S]YTTSYihjwf[dhghlrsiehiigaavv`VTRV^ksiagmfi{rkqyp_V_jorupkmpqorvw~yooldfkkkdagfo|qnnnmmmb_goqjfeb_cha[TNQT[`^^a\\SSV[]]afdfjh]^`_iqijj`ckcgd^ZS^tqbcWPOOQ\\_XQTWUelehi]OL]hbQSdmld]guwsql`__ddcmneafb^Z^gokhpqrnfisncg_Zbg[VgcgxkXXdg\\XZ`g^V_jhff^bi_\\efehjr}{qrpjp{zmmswuywtps|zrov{yyvommmrtsvwsrssuwwvsw}uqvw{~i{~y|yv}{}|v~xxzpv}}{xtuwsqrz}xz}{tpuw{{|{}~}zuts{adlt~v}~}}yyzyyxz{yyy{zmqx{y{~|~qtwtwx|zxx}~º¼¿ƿýľĿû¿}|~|ywvwwwvvussrtvy}gijlnnpmkrrhcddeefhhhhhjmmlnssld`acded`^\\\\[YVY\\]c_[ZVZ\\\\Z\\eigdbde]QFACIKMXb_WY_^\\XSE?DKNOQUXY[YQJGDEMTUTX`]NEHLLKMOOMNOPQSYYTRV^aUH<9?HRWSKIJJJJKNOLIHJLLNOS[bfd]QHIHJ[qseZWX[acb`cdgpwxvsnjlnkhjmvyma^`cddeionc[[[ZZXXXZ[bkpnf[[ckaZ_bec^[WZabchkg_^biqutrpqrlghijmnijhiljeahrrkihmtrpruqkvshinorrppkefjrxunmjiijmmkhhknplgmojjmmjjgb`bb^ZZ_`aekcSNUZL@IRRQTTTY^Z[fdY^aYTW_aZ\\gg_ULNY^^]]c`MEOWXXXYYYWYYMITWV[TKFKONMIGHO[\\PGFC;E[aZUXWcoktve`eghhlsqgehiig_f{nXSSQVerocakmdj}pnwym\\V`jnqsojnpnntvx~ynmhcjpmhaciirzqnopopo_bnqojhgb`ef]XPMOT]_XX]XRSX[ZX]ccfk`X]^alpjki`emigd^ZUgzqecZWPQU]_VOYXWhkfkhYNUjjXN\\lnib^kwyrpk^][befoncbjd_[ajmhgrqwoehtpfja_fg]^jdmvgWZjiZVX`g\\T_hge`\\bfZZccbfjpxxpomip{zjho{spxxtot{{yrltzwurolklqsrsrqrqqxzyv}roysosuxy~i||v|wr||y|{u~ttxns{{yvrptuqouwx}w|pnruvy|wzz}{zvy}yeijr}{||vwzuwyxy~yyy|{{|zotz|||~{~st~u~rtw|zyut{ľ¾ſ¿¿½žÿü½|{}~zywvvuuttssroqtvzjkmopmijrwqf^_beegiiiiknonopqoib`bddcb_][[YVSYabf`UVY[Z\\^bikfcceeXG@CHOPS\\a^\\a^\\YSJDHMMMNRVXZYTLFDGPWWUWY]WLEILJJNQQNMNPRTVSPS]bWE=;?FOXVKFIJJHHKPOIGHLLKMOUage\\RJFFIThsgYVXZ]aa_^_bjsttpmjjllhfjoywh__cdccgkli`ZYYYYZZZZ`lpoj_V[ci_\\bac`^ZWZbdfije]^djoutrkmmighhfllgffhlic`irpkggovrmrtokvqhjmoqpprnfglszupnkihlqokghknplimolkkkjlhdfifbb`ab`cidTOUYNDJSSRSTWZ\\Y[f`S]e[TZa`Z^fhbVKR^a`__daMFU^\\YYY[^]\\ZOPV[faURPRRPTPGIUb[MNNKEO`d_X[alpluuebfkjhntoggijje^n|fRQSQXlrfbglian|ot{sgZ\\ejmopljmomqvwz~|olliorid`gjku}yrnqsqqo_gvsnkkjabkdZVMJPU_[SU[VVW[WQR\\acheZUZ\\blojkf^gnhhd^X\\s{oe`\\ZSVX_aVT\\WZiigmgWTaniPTiupfaamvyvoh\\\\]glhllefmfb^djljnspxqegsmjjadhd_bihrsdW^pjYTWag[R`hfc]Z`aVYa__ejovvnmjemzzhdjwqoyyqnvzvwqkuzuqpomnqssqqropqnu||v{uissoqquv||fz{xq|un}z~y|{u|rrxlpwvvupmqvoiov|u~zxsvlnpq}}sx|txv|}{}|x}yqkfx~~{zps|ywz|}}}|zx{}~zt|{~}~}~tw~}x~t|}ppvywwupv{½¿¿ſ¿ĺ~{z|~~zxwuutssrrrroprtyjlprrjcn|ync]_beghkkkkmnpooqplfb`bccaa_\\Z[ZWV]de_[WW\\\\[^cfjlebee^O@AILRWX]_^_a][XPGFKMLLPTWZZTJDCHR[ZSRV^YLFHIIHINQPMKMPRUVTSYa\\G<;>EMSRIEIKIHHHLNLIGIKJJPT^fg^SLHGGPanj\\UV[^___\\\\_fnsrpljijkhdelqyse^adedehlkg]VWWWX]\\Z^gllkfZV\\ch_\\`_`_\\ZY]bfgihb[_ciottriikhgggfmjcbehkg`^kqpkggpxqkqtnlynhjnooopsqklpvyuqpjiknrrmhhjnplimnmllkkmigklhfgdee`aifUNUYOFLUUSSUXZZY\\d[O]g[V]b^Z^fibUMW_`bb`fbLJ]a[[\\Y[a`^[PX^`mbZ[XWWUYTJO]b[UVUQLVbc`Y_jtplxvgchnlhnslefjjjd_ry^LOSR]opdckleatzpxynbV]hlnnomkmomqvwz~~okklqpgd`ejnx{wrmqvqqoamzvnmpkcgmbYULHPU\\SQV[WZ[ZTIO\\_cg]TRX\\bjnjjd`injjc\\\\iyzne_`\\VZZadZ[^Y`khhmfY^fjcPcvwoiedkv~yof[^dqrfhkghoidafjkmrsnwqdhrnjibegdadilqmbW`rjYSVahYSbfecXW^[TY]YZcjnrslkf_gwzhajx{oq}xplvxsuokvztonoorvwpnrrmoplr}txxissnmlstx|dwy}vo{tl}z|y|zt{qrwjntstsplkqngi}|v~zs~w~tsqkmmo{xpwyoxzsy~~{}{{}{{yji{z{~nruz|}~|~{vzy{z~~v~~~~{s{|uz}omvwwttnrxý½¼þÿ½þþ¿¿ù}{zyz}~zxvtssrqrrrpnortxhnuungkywkb]adgijmmmlnoonnooida`a`acb\\XZ^\\XZche[XZ[[\\]afikkgfgaUIBFNOR[^]]]]^[YULGIMMLOSUYYUI>@JV^]UPQY^REEHJEEHMONLJKPSUWY[`\\M<:<AGOQKEHMKHHJLLKKKJIIIKV\\ff`ULIIHO_ki_VUW[``][Z[ajqqnmhfeggdbhqvxod`cdddeglid\\TUUV[a\\Zchhhgd[V[cf^[]]_^ZXZ_bfhhfaYbhhottpfgjifeijmha_chid\\_mspjggrzqjorno|{khkmlmmntupqruwttqjjlpttpihknpmimnnmmnnmhinllmjehibbjiXOUYPHOWWVTUY[[Y]bXO\\f]Y_a^]`gjbVT[]\\ce_gbLTe_Y]]W\\da`\\U\\dhmgab^Y[\\[TLUba\\\\^]ZT[aca_eqxno~vfejokhnqjdeikkbg|rSKSTS`noccllbezxszvjaYaklmmnmmopqtuw|nijlsrgd`dkszxuqlqvrolgu~vpptnglnaWTIGPWYMMW\\\\[ZWRGO[_caXRQW[ajmjhccillja[bt}wnccga\\^\\cc^__`gjfime]ing[\\s}snoidlwoh\\`gsseglijqkechhimqqlwpdfookhbfgedgjlniaWbujYUW`gYUdddbUU\\XTZZRTaklnqmjb[dt{j`mzxlr|umluwqroluwromotw{yomsrloqlr}xuyirqljjrssgtv|qlyqk}xyzzyuzqqxilrrqstlhmked{~zzwxs~~u}nt|ljlknz~tnusjzsp~zw~}}z}{~{pv{{}~}r{r||{~y|u}x}~}}~~~{~|~xow~~|{zznjuxvqsnnv½·ĿüĿþþĿ¹}~~{yxxx{zxussrpprrrommqsv~krwrgfurha^afklmnmlmppnlnplfa__^_ac`YSY`^Y\\fjd_]\\ZZ\\`ehjllkhcWLIHKPQT]_^]ZY\\\\VQJHLMKLTWYZSG=<FXcbYPNV[XKCEHFCDHNPNLILQTVY[]ZM?8;?ELOMIILLIHIMMIILLIIGHQ_diaVKHHHMZijbVSUY[^^[XY\\cloljiecccbbeltxticcdccbeijgc\\STSY__[\\cggfeaXT[ec\\Y[\\]\\WWZ_begffaW\\efqwuneejlfahomf_]bigaZ_msnhgitxojnpos}vkijkjjjltyvttuutsrlkmptxrjhjnpliorpoopokgltqmolgknebkk]RTXSMSZYWTWZ[[Z\\`WP\\h`[`a``bij`Z[\\[[cd`f`PYf]Z`\\W`fdf^Zckmlhfgc\\ad_WRZddbdefb]addcdkwymtsfflokhnnfceimjamlMLWUTbol_dlhbl}vw{rf^_hlkkjklmpqsvuyojlntrecadp}|trrnsxtnllzxrsuomppbVQGGRZVIKXadYUURKS[_`[XQOVY`ilifbeijlg^[hy}smdeje`^`bcb`adhhggihgplb[j~|onqifvqpj\\bhqqeglilrkfdhggmrplvodckkjfagggfhjlmh`Yfxk\\XW`fXYf`b_SUZVUYUMQ`kijrmh`Zbp|n`n{yirwqlkuwoppntuoklpy}wprtqmqsmq{{t{hpqlihqrpnpt|yymkvmi|yv}yxysyrpzlkppnsxmfjhccs{xwv|yvs|{u|wks}sihiilyzplsmh}mo}}}zxwx}{z}~|zz}}|{}r|}}yyt|zy{~~|~{vms}~}|~}yoguysnvnit¹Ǽ»ſ¼¿ÿ¾~{|{xvvvw{{vsrqponoqqnlkoqv|rwumcjzznfa^bgkmmnllmppllnoib`__`abb_VT^d_\\blmf_]\\ZZ^dhiklmmh[MIMOPRTY^_\\YWZa_TJFHIJKNVYZVH;;ESac\\RNS[[PCACDCBGKNONKKOSTTVVUM@;:@FNRPMMMKJJKMOLFGOLHGGN[egdXOHHHJWeicWRSVWXYXWWY_hnkfgecbba_bilqsqhccdcc`fljcb]SSV__[[]cffda^VS]ea[Y[\\[ZVTY`bcefeaWY^er{ufcfklebjsmc]\\bie_X_ormghksunjmpsw||qkkihhhhkt}{wvutrssmknqtxsjhjnpljrwtrprpllousopnknphdjnaRVZVTX\\ZXUX\\Z[\\]_YR[ic^cccaajh][^]Z\\ccad_U^e`]^[[dghj``lqnmkjkh_ahf`Y^fijjjjiffhgehozvlu|qfflojiokbbdhlhcr~dJMYUUdog[dmfdq|t|{kb^conkjiiknpqswv{plpswqcbcfu~rosptxulkp}xvwuqsupdXOHLU\\RHOZffRPSTQW\\^]ZXPNTX_ikiebiihibY[o}wokfehhe_`ced`bdfhihjllohbfwulsqhqrlsj^dipqefkhlrlhehfgmqqksmcbhiif`efhgijlkf_[m|k]YW`eY^g_a^RTYTRVQJP^khhrld^Y`kytel}xirsnmjswnoqqsqomnuutusqouumpzn~ipqlkhppr}~sm|w{wriipiixzryywxqxso|ynknolu~nefccdq|xxwvzwttyuszqiqvmgggfkwsjkpifxwio}z}yyx~uw~v~v~}||~|t{}}}xw}wwy~{~|~ukq|~~~zpev{tlyrht¿ſɾý¿þ~}{{~yvtttwz~~~{vrpponmoppnjknpu|wxrhdp~|slfa^bilmlljklnollnle`^`acbcb\\V[ef__gnmf`\\[ZX]fijllmkdYOMQQQUX[\\[XW[bf\\NFFGGJNSXXTJ=9DR^c]TPQW[VE>ACCEFMOMLJKNQSSSQPKC=9>HNTTOMMMLJJJKKHEKPJEGNYdebWOLIIKP\\ge\\RQSTUVVVUVZbjjfdcbaaa__fllmoohddddcdfjhaa]RRYc[V[]_aa`_\\VT^gaZYZ\\ZYTSZ``aegf_WY]ft~sabhlkflttla[[bhd^Xapslhikrsmikqvx{xokkhffffju~~yuqqprtolmrvwskhjnommtzwrpsrpsrqqqqpmooigjofTW][[\\\\ZXUY]\\]_`b\\S\\fcbeffcaifZ[_]Z^b`ce[Xcfb_[]egiljdfrroommllb^jmb^`fimnllkjighilp{slvxofhmniilfa`chjhhx|]IQYTWhobYdkfiv{v}sd_^hpnljhikmortxw}rnquyq`aegx~qntrtxwkkt~xxztsyyri[OLVZ`PJZbhbNPQUTZ\\^[[XPMSW`ikhcchhheZV^s{poifefhg__cfeabcehihkllmggq}|nnypmmmsl`eipqdejgkoihghfglpqiohabgegeadfghijkkd]^t~k^ZX`cZcg\\`^PSZSPUOHO^jfgqib]X`gv{hnuhqsnkjrunmprsooru|zuzupstxxnoygylpqknlpoqy~tkyy{vnghlghr~~ntzvunvsn{{pmmnkyleeacfovvxtuyvttvprvmjnoiedefjrlekjcgrnhovu~ux|vyrw|u}u}}|w}{y|~vvz~x~~}vmn||sey{xkwvitüýƼĿ˿¿Ŀ¿ÿƿ~|yz~|wsrssv{~}||{|vrpomkmmopmjjloszxslfkzzoiea_bhlmkiijlmmkjkhb__abccc`ZZclg`ekmie`[[Y\\chikmmlf\\VUUSRSWZYWWUYchcVJFFFHMRWXTI=:AP^e`UPRUZWL??DFFJNRQKFEJPRSSQMIC=;<HTXUNIJNPLIIKKGCIROGFOZ`e^WLJKIJNXcf[QNQSSUTSSTX_ghdca___]^^bimilpnhffffcgkjebb\\ST\\cXTZ]]\\]^^\\UTag_XYZ[ZWST[`_afig]VU\\hxqabhlkisyti`[[bhd\\Yaoskhilrrkhjpvz{vnjjhdcdfjt}toonqtolosxztkhjlnnqx}xqmqxyuqstrsrnoqolinlXVa``^][WV[____afeZ\\geeijkf`heZZa_Z``_hf\\^egb\\[aiklmklosurqqomldamqgcehjnoooomkijmpszqoytmiinmhiic__bhjgjywWJX[RYll^Yciflzxyob`cpsmkigimnprtyxtqqvzo__ghx~oltsv{zjjw~xzzsu}{uoaQR^fdNLbjl^NSPXZ[\\a\\[VONRUbiic`egfg`TTcvulmhdcefb^^dhdaacfhihjkljgltzukryltvjounadhnqedhgjjfhhigfjnohld]`dbedbbehgghkjb[`w~j_][ac[dgX]]OT]RNUMFM^lfgoha[X_j{yeusfqtpkirtkjrvsnpv{wx~sntvzzpoxftpppiqrpnkr}ukwz{~unggiehnxlo|vsmstmy~qlpojied_ehmrsxsswtrsrnrskjkigdcdejogekf`ioeeoos}|tx~wtunvvv|w}~{{}x{twz}w{zmm}~xi}x}kv{kuüÿŹ¼ÿʾƿ½ľ}|yy}yuqqrsv{}|{zzy~}wqonljllnolhjlnqy~tnfguvmfa_`dhlliggilmmkhfda^_bdddc_^cjmd`krofda]\\[`gkkjnmg`YWZXTSUYYYXZ[_fg\\NIGHHLRWXUNB:AN\\efVPRTVVKEDFHKMNSRNDADLSSRROKD>;=FUYUMFEJPRLFGNNGITWNJQ[a`\\SNJKLLMT`f_SNOQRRRRQQV]dga`a_][[[\\agmkekpmigfffegojcec[TW^`VSY[[Z[\\][TUeg_YXYYYUST\\b`cike[TRZi|n`bhmkmw{tg^[Zbic[Ybprkhklrrigjpvzzvnjjhcacfjs~rmmkoupkptxzulhjmmqu|~xqkq~qotuttrnovtniop[Vaccb^]YX^baaacioe_hhgjknh_dd]^ab_aaclhabghb\\_hllnnotvxunorponhdnsjghimqsrtqlmmmoquxopwrljkomhjf^\\`chiel{pOP_[Q^mfYYdggmy}w|kbbjwtljigknpqqv}zursx{oa`iiwnhttw}jkw}xxxsz~xtgWWdmfTPfoo^OURad]^ca]UPNQWdig]^gfde\\RViumhle^_cb`]_egc__bgjijjjiihovunjsqjkeovpddhnrebffgdcgghhegklhkbZ_e_cdcbdggegie_[cy}j``^ab[ehY]]NW`QMUKDN`jdgmfaYW`o}tdzpeptmgjsqfeqwrpv}w~nowxz{qnwen~rrqhrwqnio{xls{}zrnhefdhjqml}~vpkptlxsmspjjed]djnpryssurqqpmpokkhgfccddhlddia`kj^cnmp{ztwzttrmv}sx|z~}y|u}|vx|{z~}}or~z|lzjvov½´ʽ¾ʼĽ¿û~}|zz|~xsqpprvz~{zyxwx|}wqnmlkjkmnkgjjmow|ricj|{qjb[[afhkkhedhmmkifdb_^_bcdcb`bikf_cptmcca]\\\\bimljmi_\\[[\\WSTTVWXXZaghaULKJKLQX[WNE@AKYbe`TPSSSPIGIMRTUSRME>@HQTRPMKGC=;ESZRJDBGPUSKDIPKIV\\TOSZ__[SKIKMORU_d`VPNPQQQQPQU\\df`[^_^[YY[^dkmgdkoligfeefjmfdieZW[`^TT[[YY\\\\^[U[iiaZVWZZTRT\\dcflleZRQYi~l^aimlp{}tg`Z[dibXYdpslkllsrigipwyxtmihhc_bfjt|pmkiovqmotx{vjekqstx||vomw|opuuttqkq{wmlstaZ`cfc__]Z`eeeehknhdkiimpphbecacbdd`bjniceiib_dknpptz{|}unqrrqqmimrmjjlpttuvsnnnoqrssqxujklikjff_WY`ehgeo{iNUaXTek_V\\dehqxxz~xgaft|tlihiknspmw|~vrsyzqcdnjuohtvzjkw|}vttu~}xm][jrk^Xhsr^WZWlmcbhg`USPRWghcZ_igeaWP[orggj`Y]a`\\[_cd`\\]cijjjiefhksuofkrgl~gflurfcgotf`eddaad`cgccgjii`Y`c]bdccegfccfb]Ycw{kab`bc\\eiZ]^O[bONUHCPbgagkd`XTat{oj|}mequibowmcenvtp|~ylr}}y{tpxgk|tuthnyvpfk|zmp{}vnnjeccggkohx~wmhotlyrnxrhxoad_clrps}rruqpponoljifggabddhhace`agc\\cllnvysrtqt|zomw|}|yqz~|{|w}~w~{uz~~{r|wqlwvy·ƻ¿½ǼſûžĿ}zzxz||vpnnoqvz}zxwvvwz~vpmmlkjkmojgijkov{nfcovng`[[afhjhgeehkkhedba_^_bdcbabfje\\\\ispg`aa_]]flmmlke]^_^[WUUUUTX[^cig]QOLMPTY\\[RFBEJT_d`YSRSSSOKKPX\\YUNIE??GPTTQMKIFA;?P\\TGDCEMUVOGGQRIS_[TSUXZYUNHHKRVX^a\\TOOOQPRPPQU^ceaZZ^^[XXY[^fmmfekmmiecbafnjbgkdYX_b]TV[YUZ^^^\\ZdljbYVX]\\TSV]fegnleZRQZkk^bkmnt~|sga[[eh_VZfrsnlmlrqhfjqvxvsnjjha_bfir{omkhouqopsx|xhcnwzxxxytmo|ynpuvutqnu}wnorsmc`dhe``_\\bkigilmmmlliirvrggkddgeggcgpofdilgbcfkppqyrntrporplnoonmotvttwuqopqrrrstzthjlghfc`YUY`egeerxeQ[`VYhgYU\\ceirvv}rdbk{}tjfhhkormmy}|xtsyyrfeoltogtx{ljvz{uqrwzqfcqwne_kvtc_a^oqifnkdWUST]jf`Xbjge\\TQ`qmdif[WZ^^YY`ba\\Y[biljfabfhnuqicnpbwoggksrf`enxh]ed`\\_aZ_gb_djhd]X\\][adaacgfa_eaXXbrxlabacb\\fkZ]^P^cOPUGCSbdbhjd`WSfzwmszulfpugcvxgdelxwtrnuy|xrwjiyvvuhjz{rghy|noz|rjnle``ghgscr}xjfmtl{qq}sfos_ebcmrnupqtpponnmllhdjhabdeie^cd`dd\\\\djkltvqpposytkny{zxsozv~~~u}z}~zt{z}uvxsy~ľ¸ǿľĻžž~{xxwy|~ztnlmnpuz|yvtsttx}wolkkjllnnkgiiknuz}jddq~zqle_]]aegihfcdfhhfdba`^]_acbaabee^Z_mqjb``aa^_hmmllkc^ab_ZWUVWWW[_beeaXQQPQX]_\\UMGGKPXa`YUQSUTSOLPY`]TLDABDIOTSQOONJE??JY\\I@BFMVZTLGMUTU^`WVVVXWSOLKMSWYZ^\\TPOQRQRRQSUYad`[VZ][XVXY[_fongeilmica`agje`il`W[cf^XZZWS\\a^^^aikgaYV[_]VVX_fgjnjdYQPZlk_fmmryypic[Zfg\\TZhssnmmmsofgmpuvsqpnmib`degqznkjintqoptw|yicoxyvvvvsorwnosuusppy~vqrrwufafkhbcc`domhlonopomgjw|rfhnfgiejkimqjehjkhdegmqqt|rptrqqrpmoopppptwtsxvsrpqrrnu}zpjkkffd`]WUX^fheequaS`_U]gbVV]bejquymcdqzmedfhjolhnz|}{xtsyytjfljtphux|plv{{uory{tnkv{ojktzvifffqpljsndZXXZhlc^YdjhdZQSdogbg`WUXZZWY``]ZXZbilg^[agjprjehqifvhieiqqe]bmyiYae^X]aX\\gb\\bihbZV[YW`ea^aee`_c\\SUanumbabcb\\hm[]^R`cPUVFGVaddhhd`XWkyrtzsmjhqsfe}xadinyz|{mpy~w{xrujhwvvtjiwzqjiw{omw|ofooe^]ghb|wan|yjdosj|qvsfm~vdjfdospznssppponlmogemhaddhk`\\dc_caZ\\elkjrsmmmnstmiqzxvsrpyy~w~}r}~{y}{r~}z{zz{õŻ»ĺÿƿŽ¾ý|zwwuwz~~yrmllmotz|xtrqrru{wnljjjllnnjfiijlrx|~hbcqytnjb^^_ceefedbcefeca`^\\Z[\\_``__ab]ZY`kngaaaaaabjnmjjieceb\\XWVXYYZ^aaa_XSRTVX[\\]VMJHKOUZ]ZVTRTUSQJNV^^UKECAGMRRQQPSURJB@JVVNCCEJS]ZRMPVWZ_`]XSTXYVNNNQVZXYZY[VOORSQRTSVZ\\\\ZWWXZ[YVVWX[_hrngdillfba`cgdaakk^Yagh`^^YUT\\b```elje_Z[``[VVZafinlhdWPQ\\n}jahmmt}woleZZffZR\\lsrmnmnsnbiqprqqqromjecddgszmijhlrqopru|{qkrxvsuutppxunortsrprz{usss||jbglidegdfoojlpopurkho{{qgjojkkgkmosngjmihjihkprqwvsurqssolnprssrtwtruwwroqsqlu~{mhjiec_[XTTX^fgdeqp[Ua]X`eZRX_cekou~wicdwvhb_bgkmhfq{{{}zxtsxxumgjjvqjwzsnx{ytoqzwrnx~qmv}~xmlkltrqpwqha\\\\anq`[\\gihfYOWdleedZUUWWXV[_]YWWZafgaYY`fknjbakmbrmpmbfpre\\`kyiT[c^VY`XXdb\\`ghaVU[WV_da\\^aba``XPS^jqlc`aca]hm]\\[UfaPZ[KMX_dggfdb\\_pus~xdghinocjsagjq{{}tnt}|vzwnp|nhsuxvmktxrnluzpjs{mbmsi^\\fea}yam}}kcqqipwqfm}ykpjgrvv~lwrnqtpjkpogipfbdgnj\\`fcbd`Y\\ipkjqoijkosohht{xrqssy{~w}~t}xv~}u~}~}}ƻǽȽ½Ŀÿżÿĺ~~~~~~~{xuustz~{vpmkkmpty~zwsqppqty~wnkihjlmookggghjpvz}eacouqkga^`bddddccbbeeca_^\\YXYZ]^^^_``[WXajleabbaacdkpnihhgjjb[WVX[\\\\]`a`\\ZVUVY[]]\\TLHGIMSZ\\ZUTSTUUSNJW_]TLEDJLOQSQMRWYTMFDITYPFCGKR\\_WSTW[]_``\\VTVZXTQTVY[WX[[[ZTNNRVSSWUW[[WSRUYZYWVVUX]bitmffilke`abdec`alj\\[hjicb^XTU^ccbcimid^Z`da[WV]dflplgdWNQ^p}|jbhmmu~}uonfY[heWSaptqmnmnsiakspooqssonmgeddhtzmijhkrqpqqt{~wsvwtrsurns||rooqqqqqv|xtutt~jcgljefghiorpqrpqwtklv}ypimonpmkmoy{lfnpkjmoortrszyutqpstnklmsuutvxtptzzqlqrolyvifigc`\\WTSUX^dgcdnkWXb[Yc`SQY`beimuulad{qf_\\agklghuzw|}zxssxxtoiikwrkwzvox{wtoqz|sp~ro|}zttsqvtvvztohbahsv^ZbkggjYS[chhicUTVUUWU^^WTUW[adaZWY`eike_`ihd~yowl`irqaZ`kwjSVb_UV^YZa`[\\dh_RUZUV]ab][^``a^VNQ\\gonc`acc`il_[WXj`P]`RSZ^flgcec^etsvs\\bikmjbunckks~}npx|wzvnoyrhntyxqlrwsqnsupiryl`jvl]\\fc`zal~jasrjpxogn{}uvnisyzo~qjryuhiuqgotebditgXcgced_X\\ovjirmegjorkdjw|vqpsvx}~w}~~u}vq~}|Źɿþ½ÿ»¾ø~}|||||}}}}}}~~{vtsrty}ztnkjkmoty}yvsponosx}wnkggjkmpplheefinty}c`dnspjea`cdedcbba`bdea_^][WVXZ\\^^]]_]ZWXbiic`aaaadglpmghhhljaYXY[]^^_`a_ZXY\\\\\\]^^ZNHGHKQW[\\XUTTTTTSPU\\`ZPJGJOQRRPOSZ_^SKINSVULFFMT^_ZW\\]_`ba_\\XXXWXVRYb`\\SQZ\\_\\RPRTZ[Y[][XWWUXUUYZXXWWWYahkvmdhjkkeabeffb`bij^\\opkkh`XUV^ffbdkmg`\\]cd`[WX`fgnpkgdWNR^r}|kbjllu~{topfY]hcVUfptpmmnppfaispoopvtqpogfdcdp~|ogigipqpoppw}tsvvrqsror}{tponopqqtzwuvuu}phfklhefgkntwwtpsxslr|}wokoppronmr|jgoplkpsuvtrt{}wurqrtpjhkowzwtturot{xolprmmywffhfa^YUQPTY_eebeleVX`[Ya[PPY^`eiow}{sk^f||maZZ`hkifkwvu|}yxtsvvuohhlyrnwyxqvxurnowvsup{{zyuxxx{{wrmjjr{w]_kmfip[Z\\adnkaQSXUTVWa\\RSVW[bc[UVZ^dghe]afepotue`jup^\\bgolYT`_TU\\Z[_^YZbh_RUXQQZab^]\\]^`\\UOP\\ellc_`cedhi`ZT[oaP\\`WUY]hngaefaivq|kXaikkhjkhnmu~}~~wls{~{wyuknw~thktzyqmqutsprupjqwj^iwn_]ebc}cli`vtloynhpxzplw~~toit~ueivqjurceelvcWfidgf`W^tvmmrjfhhoqfepz{uqptxz}~x}}x}tn~}~}Ƚ·ÿ¾ɾ¿½}{zzyzz{{||||}}~~zuroprx}}wqmjikmosx|ytqommmpu{xmigfilnppmhddehotx|a_dmqnhdaadeedcba_^`dda^\\\\ZUTWZ]^]][[ZXVZdiga_`a`adilljgjiijf^[[\\^``aaab_YZ]`a___\\SKHHLSZY[ZYWWVUUUVWaa[RPOQTSRQPQRYa_[WRRTTROKKNU\\a__acdcabb^[YZ[\\[YZbf]QNU]`_THLUZ[]]\\[ZXXUV[XWZYWXYYX[eel{mdhllkebdghfcbdjh`fupmrk_XVX`iibdlmf^[age`\\WYafglpigdUOV`q{ykcjllu}zsoqfZ_gbWYjrrommnqoeamroojqyvrspjhfbdr~zngighnqpooovzsttrqqpqw}xtrnkmpsrwxttvutogejnhdegkovzxrqvwppx{ytmkprrrqnmt|vhgoqlnsvwwtrtz~yvtqqqqnigjr}~wtspnqy}skprnlsofgfca]WSONRY^aabfi^TZ]Z\\]UMQZ]_ejr{}voi]i|wg[Y[ajkfepwor|~xvtsuutpihnyrmtx{ruutrmmwwvuq~}}|{xyy}}zxspt{x_gsnhot]]]`ewk^PTYTTWZbWPSUU[`\\RQUZ]deb_[`hjywkvqbalvp^_ecgm_R\\_URWY]^]YX`h_QUVPMU``]\\[[\\][UNPYahjb^^ageefa[R\\pbR\\b\\WX]ime_fhdmvr^Uckmjgskpppw~}ypnu|z{zvxtjkw~sgirzxplorttpoonhoui[fyr_]dagenjaywopz~miqu|pn|}ynhxpalvoqwkhjhpvaZijgjiaYc}wnpoiihispgmv||xuux}}y|~|sj~~~ĻĽ¿¿½ƾ{zyxxxxzzz{{{{||}xrolmrx|}|~vpkiijlptx}ytpnllkmqwxmhedhlnqqoicbcglsw{^]cmpmgcaacdecaa_]\\_dc`\\YZXRRVY]^]\\YVUVU]gic_^_``belligglkjfb[[\\^_aabdca`]acca^`a[NHLQY\\]][YYYZYVVVYbg^QNPSTUUSQRY`da][[ZVTSPMPTY`eccdeddbaa`^\\[]__\\]bc\\PHNY`cYJHR^`\\]]ZZZZXTYa]ZYXY[[YX\\cal}nbhlkjebehigddfifeqwmoxm^XXZblibekjea`chf`\\XYceeklheaXRYaoxwkekllu|wrpqfZagbY\\krqomloqncbnronisyvruumjgbgu~xlfgghnqqonmu~urrqponq{{vssnikpsvutrvvttmcejpidefkq{~vnqvtrvzxtpllqvurqonx|qghoqmotvxxtrv{|{xtppqrpjhgjtvrqoms}zlirojlwzlggd``\\VQMMQY\\]^bheXS[]Z\\[QLSZ]`eks~{rng\\l{pb[XY`kmdertlr}}zxutrrstqjgpvsjpvsrrqpklvxwus}}~{xx|~|{uu~udpwmhru^^_^k}l]PU[QUY]bTOSTT[\\TMQVX\\ba_\\[ahslkvmaamvn]aga_lcQV[UPSW[^]XW^ibSSWTMMY]Z\\_\\WXZTOPV]efa^\\^ilebb\\Q\\peU\\fc\\Y^ilc_gifpuswUUcloif~xjssu{~~{|~opx|wyyuxshjw}tgfqzxpklotvrlkjhntj[cyua]dbihnjb{xrryznkqu~op~}}mg{lbrunwxhmnlww^^nlkomc[kzpqnhlilwqiu~~~|z{~~{{{|rj~~~øľ¼ƿĻ¿¾¼ĺ~~}ywvuuuvxxxyyyzz{~{vokjlqx|}|z}{tmighiloty~ysplkkjkot|ymhddhkorrqhbabeiqwzZZbkolecabbdeba^[YX^ec^YWXTOQVY]][ZWSSUWaif_]]]``bdhgehkomhd_\\]^_`abceebbbhjfc_aaZRPT[aa`_]\\\\]][YZ]becXOORRSTTSTW`ijb\\^a]UTVSQV[_dmlgdiecbaba_^^addbab\\RMLV_`^RIM\\ea\\]][ZZ[YW]ecZUV]`]XYZ`apznbhighecehhgffhgcjxvjs|n]YY\\emicgjedb`egb^ZX]eeejgfe`XSZ`kuvjfkklvzsppod[bfa\\alqomlloogahormkkt{vrw{olgdjv~xjcgggnqpokjtwprrnmns|ytssnikosupnrwvst}}pfdjoidfgjt}|qkqutwzwurnllrwwspooz|nfinpnptvxxrqvyz|{xuolnrpkffflw{spoljt}sfjrlhnyvkgfc_][WRMNRYZY\\dicUT\\\\[ZTLLVZ[`flr{xpne^nwi_YXYbmkdhrplt{xyvssrqrvtliqv|shmv~tpoopklv~zwut}~}wx||{w{whu|pirua_`\\mq]UW]PY]_bRNQSSXYPLSVV[^\\[[\\ak|tfosg`bovl]ch`[heSRXSNOQX\\[[X]geWPW[SIPZY\\f]STWTPPTYae[W[\\ipe_b^P[qhVZii]Y_fib^ehirsunQVepqgjtmwyy|t{znpyztwwtxrhlx|seeq{xoiijrytjeeflrm\\`xydZeglmlld{xt~qwwnlqv~oq~~{igggvsq}wfpsr}u^grnnspc]q{qunkojnzsmz~}|~|~~xuqp}zľſǿ¾¾·~}}~{wutsrstvuvvwxxxz}}}ztnhhkqw|}zy|~zrkhffhkoty|xtoljihjmqx{ohddhkosrria_aehovyVYbkmicabbabb`_[WUXbgbYUUVQMPX[^]ZWSRSUXdid][\\]^`ccfdcgoqmhd_]_aaabceggdbfjigb`ca\\Y[_cdcb`__`b_\\^acebZSQRTSSTVZ]_bffa^d`X[\\[\\]]`eikljemdabbcdccceggd`ZTTVW^d`XOMXdd_]`_]\\\\][\\efdZWY_^^V]baaquk`fededdfhghhijdbozrju{m]YY\\fojdfgee`_fe_[XX_feefeed`WTZ`isthejkluvololb]beb^dmpnkkmomcajqoijkv{vtzxokfdku|~wgahhgmrqlgirxorslkovz{wrqrnhkoqojlswsruzzrgdjlheegnxzrklruuxztpqnjlsywspmq}xifjkmoquwwuqrvvvxutqjhoqkeccfnx{vqonihvzkemqihr{{rkhe`^]ZWRNPSXXW]di_SU\\\\[[SKMV[\\`gmqutpmdapte[XX\\emhclrmmvzvxuqtrpquvniqvz|rjmu{toooommu~|}{wtt|~uw|}}|zp}tntwdb_\\lu_XY_U]bbdQLOQQVUNNTURW[VW[\\bu{kisn_^isuj^dh_ZgeTQSQONNSWZ^]\\dg[NT_YKKZZYegYPRSQSVX\\bXTZ[goe^a_QZogW\\ig]\\adeb^bfkrqxhOViuqgqtq{}}o|vmszwruutwqinxvndcp{vkgggoyvjb`chmk]^xgXfmlxqknf{xv~rutolnzoo~|}xgjcjwptreryv}pdnsqrvrddz{wwoosnr{vs}|||}{{}yvt}rw~}|x{ſ¾ÿµ¿¿Ⱦ~|{{}~yusrqqrststuuvwwx|~||xrmffjpvz|zzy{}xpjfeegjnsy|wsnkihgikov~{pgbchlptsqia^`dhmtxUZdmmha`aa^^^\\[XTS\\de^VSSTOMRY\\_\\VSQQSVYcgb\\Z[]`accdccltqmhf`]_`bbcegihfdehhecceea]`higedcabcb`^`ccc^VTVVWWWWX]dgeda_dha[bcafiedlprqieke`cdhgggfgfd]WUTY\\_bd`XQUdh`\\`eb_```]bkicY[^a_^Zcgc`kog^dc`bbdffgjjlh_aqynjvxj]YZ]gqmeeggd`_fd]YXZ`heccccb^WVZbjsshdhkmstmilia_debbelpngimmidckpkgjkv{vvzwnkgfktz|ufahhfkqomijq~{osrkiovwxslmroikmmlioxvqrvxyrgdijgdbhv}vlgmrtwzvqoolgiszwrnlu}sffjjmpruxurprvtsvsolhionfabcfpxxtoljfjxuggnphiu|xoihc^_b^XSNQUWWX^fg\\SX\\\\YXTLNY]]bioqpppk`ctp_YWY^jmfeorkovwtvqptqnovzpjquwxqlnuzuooppmlrz|zz{v}}ut~|{|swz}}~{zruxgc`]mwc[ZcY`fhfOKNOSVSMNTSPUYTSZ\\i~~njnqgW`qvqd_hi_[gfTOOPOLLPSVZ`^_gaRO[_OGU\\Y^k`ONRSUWXX^[UX[ckd[^]P[ngY[gf^`cceb]_dkrs}~dOXnyqlywu}yqtmsyuttoruokrxrjccpzsigdblxvka^`dgf^]xnXeqkrrkph|ww~rqrojlrm|{wgl{bkvot|mduz{}omtsrsvren|~ypturu|{yz}|w~}}~vwy{~|uts|x|}~u{}}||yy½¿¿¾ĸ¿½¿Ż{zxy||wsrqppqrrrssstuuv{}{yvpjediovz}{ywwz{~vnhddefhlrw}}xrmigffgint|}rfbehlpssqhb^_bflsw~U^gmlhb`_\\ZZZZYUSS]ed\\TQQRPOSZ]\\YTQPQRX\\`ca]YY]bcacdbgsvokgd_]^``acegjhffghhfefiib^fmmjhfeccca^`bbb`]ZZ]\\\\[[Z\\`ilic_ahhcbeggjlgfouvphfgedhilkjjhifaYTWXY]acb_XU_hg_\\cheaefebhoke[]cb_`agh`ajke`da]_cebagjkleZ_qxjjtuf\\YY_iqoeehhd^^fc[YX\\cjdabbba^YV\\ckrpfdfilsrjgjg`aeeddekpnehnhgdekoiegkw{xx|wnmihkqxzsdagfdjonnkkoy~nrrkiptuuqkkqrkhjkiisyursuvxrgdggcadqzoihmrv{{tonlhgltxtpklwzmcehknrsuvqoqrrrstoifdioia_`dirwtpjgedmxndinlimuxunhg`\\bhaWSQSWWWY`id[W[\\ZVVSMP[a`dinppnng]fsj\\YYZammegqqkpvvsuspuqmow~ulrstvrmmsxwooppljpxzxx~yuyzttzwy~xqwxz|~tuvjfb_owe`\\i_diojPGJPTSPLLSROUYRQY^rtgjpm_Vetsi]`onbZceUONLKIIOQOS^b]beYOT`WGL[\\YafVMPTTVYXWWTVYahc]]ZP[keY\\hd_bddb_\\^cksx|dR\\t}suww~sttmuystqlqtmktyribcpyrheb^iwvka]]bec]\\usXevjnsntmzvx~olnnhjsnyytfpxdmtotxjfx|~oqwtrstqlw~{txurz}|zyysy~zyuxsw}yx{x|qz}sq}yr{|}}zzw{z{~zyþǻ¼¾ùzxvw{|yvsoooooppqqqrrstvy}}{yuoiddiov{|zxvvyz}|rkfbbcehlrw|~ysnifddehmrysgdeilpssqha\\]adkrv|V`ilkgb^YWWWXXWTQT_gdZRQPPPOT[]YTQQQQSZ]`ba]YZ_ddbaacmvsmgd`_]^``bdfijhffiihfghkgackomjjgeedca^adbba```_]][\\_`dmoi__hlgddfhhjihjsutnhffffmklllkjie]TSZ^_`ab`_YWcic_bghdfkifhppkd`bf``cfjg`aiiddc^^_cd^_gllj_YcnqgiqqdYWZ`hsqedhgd^^fa[XX\\ejbaa``^]ZX\\djnmffeglsnfege`beedddjplchngeefknhdciw{xz|tmmkjmotyqcagfdinnnmlovoqrjjqqrqpljpsmefjjksxssuvwxrhedca`l~|njigkrx|wpnlhfgmtspngkywgaehkprttqnnqqooqpidbbimd[]adjsuokhc_bqthclkfkqsssmhe^ZflbWSSUWWVYcjd[Z][WVWUOR]eefjnoomlf`lqdYZZ\\frneirpjpuurrtpuqlnx~xnrsstromqv~zooqojhnvyuv}xuvvsswsw|smwwy|vuukjf`pvgdamfelxpPDIRTPOLKRQMUYQOXcz~jdjmjXWknhb]ito`YbdVPMKHFFNPJLXa]\\b_SOZ_QIT[UYb_ROSUVZZUUTQW_ed^[WQ\\hbY\\fc`dda^]Z\\clu|yfVa{x~v|}}r|vovyppplptnmtwqibcpxrhd^[gvujb][`db[[rtYfziksq}zswuy~jglmhksruz{ohsueosntuhj|zoswsrtrmo|~z|vu~}}{ywwou{wv}tyytuw|xuvsy|nszspztnxz{}|z|zqzyx}z{ĺ»ľʾ}xvvwy}yvtqonmmmnnnooopqrtx}~}{ywsngcbhntz~|zxvuxz}yqjdabcdglqv{~ysnhfdcdgkpw~uideilpstpha\\[_dkqt{Xcikkg`YSSTVWUSRQWahcXQPPQQQU[[VRPQQRX]^ab`\\Y\\cedba_eqvoic\\\\]]^__bejjjiggjigfgjjgfhlpmiiheccdcacecccbcb`^]\\]bfillf`cmnhfeefgiijnuuslhhfffhklnlkjjgXOV^cfecbbaYYeidchkhejojhpuplecfe`bfhkgcchhbfb\\^aeb\\akmlfYZfkieipmaWW[`htsfdhhc^`d`YWY_gi``_]]\\\\[[_dhklgfeflqjddee`befebcioi`hlfcghjjfbafrwxzzpmlkkmmrwqeafdcgmppomot|uqqkjmmnonkkpsnedhmqruqrwxwxsiedbahwpfhhhmuzyrnkhecfnsqmhckxreadhkorsqnmnqpnmnkda`bij`X]bckttnie^]espcdmhckqrqrnhc]]kl_WUUWWWVZfmf^\\_ZRR[YPTahhgjnomkicdqqbY[[^isnfktokqutqquovrlnw~xprsssqrnls||poqnignvwsu{~wttrqsuqvzojwyvxyz|}wttmjgbo|thfdnjeooOFOWRPUMJRQO\\[PNZl}t`ckjbV^me^afprh[XbcWQLIFDFLOMIP\\[WZ_ULV`ZMLWVTWa\\PQUUY\\VPOMPXcd_ZVR[f`Y\\c__dc^\\[Y\\dmy|wk]gv~yxwowxnoplnpnmoqoiccoztjbYVdtskc\\Y]baYXouXf{kksu|v}wttz|heikfmvzyrzukivtgprotrgm~~wqqusrrplq|~|ux{y}|uvmryvt{uv|utuzxtuswyloxtp{pktwy~|ysy{ntww}{}z}ľſ˿ÿľ{vuttt{{wsqpmlllllnmnnmnoprw||{~{xuqlfbafnuz~~{xvttvy}xogcaaadfjotz~~zsnhecccfjou|vjdfglpstoh`ZZ]bhqu|[ejkjf]SOPRTTSPNQYdjbUOPQQRSV[ZTONPPRY]\\]``]Y]ceb`_]etumf]WYZ[]^_bejkjigghhgfhjlkjkoqnjigdcdefggfeeedec_]\\^`ejhhfcbiolggeeegkjkqusojgiffhkmnpljjkgYS^eghhebgdY[fhgilmkkoplmvvmjhgfd`cgjkgcehhdf`Y\\bf`[cmnkfXYehedhlh]UW\\ahuugdjia]`d`XV[djh`^^\\\\]]]acfgijgffflngcddcabegebbinf^gjcahiifcbadnuxzvnmljkkkpupgcdaafmprrmkq{{rokhhgjmnmkpuoebfossspsxxvwsjeb_duufehhioz{snlhd`afmrpib`muka`djkoqqnkknpnkjhea_`dhcYW^admuqiea\\^jtkbgjdcnsqopog_[`oj[VXXXYXW^hpldabZOQ]^SVdkkhimnljieisk_\\]\\`ltlgntojrvupquovsmnv{rrsstqtqhq{~sqpmheluwqsz|urronstmtyjgx|stvut~z{yttoljfoyrjjgnkfugONX[OS\\OJTSRc]OM^qyf[ekfZYfk_ZdormbVV_aYSMHFEGIPRILVYUU[VLQZ]UKPRROZ`WRTSUZULJJLS]da[UQ[d_XZ[Y^cb^\\ZX]ep~wyo`nx~~}z|xp|zlnplllnkgkmjedozyl`USbqqjbZWZbbWWntWgnk|tvxq~{stzzebfhemyurzqgixqhrrnsqgo{vrprtsqnnu}{t{x{yzuuknutsy}tvwstxwwsqtxulmvtq}nhpuw}|x~~ox{nouw}|}tzù¿zttsqryzurpnmlllkklmmlllmnpuz{{{wsojda`dmuy}~ywusrtx}wngb```cfinsx}~zsngdaabeimszxkeggjortqh_XX]bhqv~^fjjhcWOMPQSSROMR]gk_PLOQRRSV[YRNMOPT[^ZZ_`]X]dc`^]^fusje[VYYY\\^_beikigggffffhlnmkmppnihfcbehghgggffed`^]]_ehkheccfjkigfcceimmlqvqnhgfegkonoojjkje]\\fmmjhecfcZ]hihknmkourlrxulijlic_cgjjeeehjie\\VYbf^^innjdXZbeddgjeZTX`agsuidlk`]ab_YW`ilh_\\\\\\\\]`aeeijihggffjkfcedbabffc_`gjd]gibahigd`__blsxxpllkjiihlsohdb_aflpssmjpxsnkgecglooknupdafnssposxzxwske`_k}~jchghjpzxoljdaabgnqmd^alnd__dkkmpplikmligfda_]`edZSV^aepsmeb\\X^lshbgfcfqrmnpqg[ZdrgYVZ[\\ZXYakqpfccYMQ_aVZgoojjmonljflpe\\_a_doskhqtlkswuoquputnnu|usrstpurgpzusqlecjsuoqxztqmkmvsjs~xedw~tpturpz~wy~ztsqmlkqvqllhomfydOQ[WKYeRJUSThaNMdrm]YflcX]lhZWewue\\TV\\]ZUOIGDCGPSMIQVUUYWLLS\\[NNONNR\\^YURQUUMIILQXae^TR[b]TUUU]ca^\\YX^gv|t}scx{}|}xt{joplikneaknjffq}|n]QRanokbYUZa`WXl|rXkpjuvsso|{stzwc_aego|}{qrz{mfj{ogssnsqjqyvrlnttomou~yr{wyyyyukmqqpw}uuzrtxzxplrvrklvtq}lfmsv{|y}wlu{uqtw|~qzǼļxrqpopwxtpnllkjkkkjklkkkkmpsy}zz}{wsnhc`^bluy}}yvtrpsx|vlea`_`bdhlqv|~ztngc``adglrxznggginrtqh_XW\\bhqv~bfijg^PKMQRSSQMMT]ggXKIMRSSSW[YOLMNPV^^WYab\\X\\da^\\]^hunecZW\\[Z[]]`cgkjhfffeegjoqnlopolifecdikhgfgfffec`^_abeiihfegljdcfdabejmmmqtplgedeikmnonjjkjb_emsqkffge`\\ajkjnoljpwsmv|umklkgcadhjifegjmkcYVZaedhnpokbX\\bcccehbXTW^afrvidmma_a_]YZemng][\\\\\\^acfgkljgfgffhgcceda`afea]_efa]gibcihfc_]]ajrwujhjkjhfdhonic_]_fjottmjov}umjgc`elpojnsmecenrplnsx{yvskc]`stcdhghltxqmlg`]_ekpng_]bhe__aeijlonkjklecddb`\\Z^c^TPW^bipnie_VT^nodbebbmtnknpqgYXetfVX__^ZX[dmrskebXMRabZ]jrrnkmpomjjmlb]cebgpskjruljtyunq~wsusnmt~}xrptupvuhnx|{xqicahqslpvwsohglvqhq|xdctxnmqqoluzsvzw}ztsqnnosrpmljrmf{dRV^UOckWOUUVgeVQhqcWYfl`WaldXWg|t^ZVXZYZWQLICAFLQSJLUUSWXNFNWYTPMLNOX_]VSQRSQJGJNR[fcVS[`ZSRSV\\``_]YY`iyywti{x{zlrslgjj_cqoiggs}n[OQammjcXSY`_XXiypYqpho{xoloyxsu{~sb\\\\ahr~zslsz}wjdj}lguuospmvvwqhkssmnqt~wp{y{yy{ulmrnlv~vt{~svwyzqkqwqkmusrxkcjqwxz|~vlsxztvy~~pzɾÿ¼ſ~wronnns}~vqnmkjihhhiiijihhilnsw{|vx~}zvqmhb^]akty}~{xusrpsx}~ukd`_^_acflpv{~~zumgb__abfkpvzohgginssqj`YY]cjrx}cfghbTIINSUURMKNU]edVIHMSSSTXZWMIKMPX^[SXdd\\W\\b_\\Z\\^jsjb`XW^[ZZ[[^bgkjgeeeefinrrmlopojgfeejnlhddhgfdaaaaccdfhijjkkkd_bdbacfjllmospifdbeiijllkjikicdlruphfhhd_`flmnpnkksvrq{~tmlkiecbehihfehjmjaWW[`hmmloqk`Y^bbbcegaVRW]afrthfoma``_][_hnpf]\\\\\\\\^cffglmjgffgfgdacec`^aee_[_dd_^hhbcihea]\\]`hpwshdhjihd`ellic[Z_egowwmiotywlkhb^elpnjqtjdcfnrnimrx|yvtl`]e{k`fhfjpwtmkke^]`emnha`_afb]`defhmmihjkgacdca]XX]`YPRY]ajniebYSUboj`_a`frpjimpqgWWguhV[d`^\\Z^gntvogcWLTcc^alssrmmqqmjkmja^dfchrskkutjiv|umqyuttoms~ysoruqvvkoux|rhcbforjntusmebitogoyxddpqjjlmkhqwppts|wsrroorvsomloumh|`S[bVTgk]WUVZigaYlnZQYhj]Yce]XZizq\\ZYYYVWXSPMD@CGMRMIRTPSXNCJRUWPLJKNU[[VTRQRRNGHLOWdeWS[]WROSW[_aed[[bl}|}sq|z|outjfif^ivoight~lYNQalmjbVS[`_Z[gvo^xnejxwkhoyxru|zo`XX_it{{nlux{qebj~}igwxnppoy~svodhpplptu~{tr|~{}|}yuolrmjw~wtwxxxyzslourmnuoqvlbgmvxu}xkot}{wz}u|{º¸Ŀ¼¿|upmlkkpz|toljjhggfggghhffgijmqvz}ytv~|yuqlga]\\`isy}}{wsqoorw|}sic`^^^`bfkouz~~{umf`^^_aeiou}{pihginsrqjaZY]cjsyegheZLGIPVWUPKJOV^dcUIHMRSTVYYULEINQY^YQXed[W[`^\\Z[_kqha^VW_]ZZYZ^bfjhdbbddhlosrnmmqpjfecflnkfbeigd__acdeeefhjloomg`]bbaaeiklijmnjecbdfiijkkjjjjijmqupighigc_bjoopqmimvupurmkifecbehigedfkoi\\XY[bnohgmqi_Z_a`bcff^TQV]agqsjiomc_``_^dlppf_^^]]_ghghnnjhhfghgb`cec`^aed]Z_dd_`jjcehgc_]^_biouqgbfhgeb]clmhbZX^cfowwnhnrvxmlia]ekmnlrtjccflpmiilt}{vsl`_ovfchhgmtwqkkkb]^`fkha_``be`\\fiddhmjchmhaaccc`YUW[YQMSY[`ilgb\\TRZhoe]]^ajqkegkoreSVguh[`gc`_\\_gnuyqieXNXffaequtupnstolkkiaahifjttloxtijx}rms}|vssqlqzsmpusuwlotv~ukcagoqilsurmc^fsoemxxdenliijkifovnlpq||urrsoouvsnlmtylj~^U]eUUhmg]UW_lkh_plTMZll\\Zc^SW[kxm\\ZYZYTTXTQNF?@EJNNINSMPVNAGPSXTMIGJRXXWURPPSSKGINW`bYT[[SNOUTXbemj]]ep~ty}|tvsiehfeqvlhiiu}jVNR_ikiaUS]ba^`hqof~jcgtugeoxwpv}vl_UW`jw~y{{lnvw{~ndal|gg{|mnps}{qvoadookrvt}zst}~{y~~rrvmpljxvsxzzxyunnssqqunq}rzmaelvxpzmiq}y|~~~ļÿý¾¿zuokjiinwzqlkjhgffeedeeeefffhjouy|~}}}wsu||zvqmga\\[_gqx|~{vspnmpw{|qha^]]]^`ejoty~{tlf`\\\\]_cfls{}qihginstsjb\\Z^dluzhhhcUIEJRXXUOIHOW]a^QHIMQSTVYXRIFLQTY[VR[ebZWZ^]ZWZ`kldb`VY_][ZWX\\adhgb__ceimprqnnopoidbdjligdbffb_]_ceeefefhlprqhb_^`bcdimljghkkea`aeiiijkkjkkkkottrieijifa`dlooppljqwtrz|mjigeddbdhgfddfmogZX[^fqnffopf^]aa^`bfd\\RPV\\ahprllnlgaacecipqoga``__dkkijrnjhhgggea`ceb_]`cb]\\_ccaeljeggea^]^aciosne`dfeb^Zajmhb[W[afmsumhlouyolha_cikmmrujccejnmifgr~|wsmcdtzmdhjghrxtmkmj`]_afga____cbZ`kgbdgkgbhkd_aa`_\\UTWVOKNUY[clme_XPS^klaZZ\\cmmdbhloqbRVfsi_gjdbb_agnvzskgYPZghgjtwvvqpsupmmlhacllhlvvosyshky{rmq|~wrurlq~zqkrutuwnnrsxlaagnnhkrtqla[csoekvzeeojeefhfdmtjhmr|~wsppronxwqnmox{km~cY`gUWotnaTZcnpncrjQK^qk\\[aVOU]lwkYVXZXPQVRNNJB>BGJLHLRKMSPACOUXVRLEGMQVVTQOPTUOHGMU\\a\\UZ[QMRYWXblxo^aktv~|}~}zyulghhoxshgjkuyiXQT_iiibTS_edbfkppngaeqoceowtnv|tj\\SXalx~y{znqvv||lddo~hjnmsv|{rxp_bpomuvs~z|ytx}z~~|x|}pqqsomzwszxsvrquwwuwpzvpz}pdfnuvrxuip|u~~Žü¾Žÿÿ~ytniigglu~{rljhfedddcbccddcddfintx{|{{z|~tqsz|zvrlga\\[^fovz|yurnllpw{~zoe`]][\\]`dioty}|ule_\\[[]acjpy~tiffhnsutld_^agnw|ijg_RHFKUYWSMGHOX]_ZOGIMQSTWZXPGFNTVYZTR]eaZWY\\\\YUZbkh`caVZ`^\\ZVW[adgfa^^agjmpqqnopokgddhmjbabdfd]ZZ_dggfgeehmsunb]]^`aejnolhgijga]^aeihikkkkllllqtqlhhijhdbdhlnnnnlnttpt}ujhhgfedbdhgeddgnodXY\\`ipmgjqnb]aca]^cfcYPPV\\cjoqomonhacfijorpmgabb``glljnunjhiihea_`ceb^]`b`]^_bbdimkghgd`^]^bcjpqld_cee_YYbikic[WY_glqsmijntyqmgaacfklntwkcccflkhdco|{wrninwtgejkhjwzrklpi`_bccb_^^^`c^Yglcadgfccgfa_``_\\WSTUOIJQWW[fnkc[SNUcjf^XVZhqi_`hlpp_QWfricgjeddcdgmv{skgZR]hjjmvyxwrqsuqomlgbfnokmvwtuxqgmyxqnq{uqtsnr{|zokswuuwonqr~zlbahmmhkrspk`W^pndho{zgdlgbbdecblpedjr{zsommomnzyqmmq}|kp~i_biV[tyr_T_gotrjr_ONgre\\]ZNMU]mwiWSW[ULQTOLMNF>AFFGHMQKKPOD@LWXZYLCDGLRTRQNRVWRIELUY`^VZ\\PLU\\YWbto`irxw~~z}~|vmjilvxoffklu|th]VU_hhibRQaifglknpue`cmh^fpwqkw|riYQYblxyzzruwv}{jdgqomnlty{{r{r]aqonwxsyzxx|{t|~}|w{|npwvso|xrzxpvwuv{{ywypnzzrhfouusvmp{u}ǾǾÿƾ¾ysmhffeks|{tmigedcbbaaabbbabcfinswz{zyxy||qoqw{xvrmha[Y\\enswxxsonjjnvy|xnd_\\\\[[\\`chntz}|umd^\\ZZ\\_binxuieegotvtnfbbdipy}gif\\MGHMXZVQJFIRX]^XMGJMQSTWZWMEHOUWYWRS^e_ZVX[[XSZbje_cbX[`][XUUZ`bef_[[bgkoqonnopkeegilkc^`baba[Y[affgffefiowwl_[[]_afnqokggike]Z^befginokkjjknqpkikkiheadhjmmllmntwnkv|rifgikhcabgedcdhnocXZ^dknkflrk_^ee_[_dgbXPQV]elprpopojbehjnstqmhdccabfkllpspkijkifb^`cda]\\`c`]`abbekmkghfc_^^`bbjppkc`cee^X[dkkic[WY_flqrlhilsxqle`abdkmqwujdecdfgecbjxzuqomtwnefkkjlwzrmorlcaaba`^\\\\^``Z`qm``cdb_dfa^^``^ZTRTRKGKSWX_hjc\\VPNXdhbZVS]lof^_gkon]PWeokdfhdbdeeditytlg`V[gkkluzwvsoqtspnlgbhqrloxytuwpgn{vompzqpsppty|ynksvuuvonoq~zldbhnmhlrsoj`S\\lidho|xefidbbcdaajne]hqwtmiikkknzyolmu|lv{lccjX_wxv]TdkowvsqYNPmsa[]WKNU]mugVPV\\SJPRKINQJEEDEEIOPMKNOH@IUXZYMBBEJPQPOOUYYTIFKSW`_WY\\PNW]]Ydyneowy}y}~zw~~||}~vmpmqyqkeejktyqkaWVahfhbRScihlplnq}|c`cie_grumjy|qhXR\\elwxyzvyxvyhdjsrnpkt{{{t{r\\crpoyvrwxzy}zq|}|}yz~osyxvs}ws}xpwzyz{}zz~mpzwsmhquuuwqt}~ǿǿ¿xqlgefeir{|tmieccba``__`a``abdglquxzyxwx{vnnqw{xuqlg`[Y[clrvwvrmljjouy{vlc^\\[ZZ[_chntz}}vlc^[ZY[^`fmvwkeegouutohddfjry~egcWKFJQZ[UOHDIRZ]]VKHJLORUXZUKFIQUVXWSU`f_XWXZZVRYbha`ec]^a[ZVSTZ`bdd^Y[chmpqonnpofaelnle^]bc_\\[YZ^dfffefefkt|vgZYZ\\`flqolhfikia[Z_befimpqnkjjkppkfgjkjga_djnnmkjmswrimzyneeghkfbacedcbcjomaXZahlnjhmqf]`fd_[`hjbWQRV^glrsrqqpkchlnruurmhfeedegkmqttokkllid`_adfc_]`c_]`cddfkokijfa_^becdjppkc`bcd^X[dkkhb[WX_fkqrkfgks~vpjdba`cimrwvi`dccddbaaguzusqrurhdilmlpxzrmquneb```^\\Z\\_`]Zlyh\\_aa^]cd^]^^^]VPPPKFFLRUZchd]XQJM[dd^VPVemg_\\`fhlj[QWdlifffcacggcfsxrke`]ahkjkvysrpmouspnlhfltqlpzzsruqgp|umlozqoqpruw|zmltvsuvpnor~zjdbhonhlrsoh_SZhfdhnzyhegb^_ab`aimbZepqnhdegfio{xoloy|pzyqceo_dwvv[SckowxvnWNUxu\\[]QIPU]lqcVOUZQHLNJHNQLLHBFEGNPMILPLBFRYYWNDBDIOPPQQVZ\\VJHLRV`aYWZRTY_c\\kqhszy~{y|}~|vw}{|}{|uqvqsxnhffijktysbVXcgefaTXfihlqlksxa`acccirohn{{rfXUahlxwz|}yyxgfov}rsmu}|}v|r^etpqzsqww|z|{rz{|~zv{{|zzxtxv~~}|~~umxywuqnrtw|zy|~ſĻüſþxqkfcddhpzzslgdbba`__^____^_`cfkpsvxwvuvzvlmou~{wuqmg`ZXZajquuspljiiouxz~}tja\\ZZZZ[_chnsy}}wnd^[YXZ]_ekt~ymfegqwwwskffhmt{cd`UKHOW\\ZTMFDIS\\^[SJIJLNQVZ[SHFLSVUWUSWcg^WWXYXTQYcf_`geaa`YYURRY_acb\\W[djpsqnllokdbhqqh\\Y^bc_\\YY[bhhfedeegnyuaXY[^djproieehhc]Y[adglqsrpolhhlqogcfikje\\\\dmrojhimrsifq{|tgbegjjeb`cccbadkoj^X\\cjmmkknlc`ced`]`ilaVRTX`insttsspkeiortvvsmihgfffilntwsmlmnmha^_cffc_]`c__bdedgmplkkga_`ficdkqojdabde\\X\\ekkgb]XW^ejrskeejr|}toidcbbbhlrwvfY`b`acb_`gtzussrqlefknmosz{rnqvpgc^^^\\[X[__\\fxsa[_`_]]a`Z\\]\\\\XROPLECHNQW[cf^ZWMGP^c_WPQ\\ika[\\_bejfYQVchgggfc_cihbdrwqjda`djkikvsknmjnuroomjkqupms}{rptqhp{tljlz~onppsvw{ymmuvsturonryiedhppjmrsoi_TZdddhlxyide_[[``^`hl^Xdllidbccdho{woko{|tzyxsbhs`iwvtYTcjqwutnYP]u[][LJQU^loaTPUVMHIJHIOPNOHBHEENRLJLPNDBNYWUQIDDIMORSRV\\_YLKMPU`f[UYZ[\\agatrlw|wzzzz|ztu|y||zz~vtzvutjfggiheuxbW_gfceaW[fiilrljuua_^`cfmsjes{qcY\\ehm|vy~|}vgisxwxpv}z}r_hwqt}poxw}{|{uyz|y~~yu~}uozyuwtsusz~}{ſſ¿ùyqjeaccfnx~yrkfca`_^]^^^_^^]]_cfimruvusstytjknt|yuspkf`ZXX_iossqojhfhntxy}}si`\\ZYYY[_bhnsx|~yoe^[YWY\\^bir|{ohffpwyywphglqw}ba]VMMV\\^ZSLFCJU^^XRLLMLLPV\\]RGHOSSSUUV\\ecZUVXYWSRZcd_elhc`]YWSPR[_`a`\\Z]djopnmkljeaelqkaYY_b`^]\\]_dhhfdccdjtp\\W\\^fknppmjgcbc`\\Z\\afmsvupnnmgelqldaeijhbZ[fprmgfjnoldgu}|pb`fhhgdb`accbcfknh]Z_dilmlmoibbded`]cmm`XWVZbkpvwuutokhlsvtvwtnjihhghkorvxqknoome^_bdhfe_]`c_`efedgmolkkhaaciidfmqohdacde^Z^ekkhd_ZX]cirskeehr|{uqicddbdjprutiZ^a__a`]_gtyusssphbgmnmptz{trvxpib[Z[[ZW\\_[]vk]Z]^]]^]YX]_]ZTNNOG@CJNRW]bb[VSKHUbc[RNSblh]Z[^`cidWQV`cdfffb^cigbeqtoidbbejjgktmfjjhmuqnnmjnsuqot}zrospjqzsjimzxklnptuv{xmmssstsqpouwigfhppkossokaTZccdfjvxkdc^XX^_\\_jhYWejie`^__bhnwslip{|wwtxvdjvhmxvoWVaiqunmr\\Sir[^WKMRU^km_RRUTKFGGGIOPNQIFJEEOTMLMPOF@IYXXUOEFJLRXXUV\\aZNMORWemZS\\_cbeih~~sq{}xzzxx|yqs{x{zxz|vy~xuofdimkfdyze^fhdbheY]fiilrlivq`_]`eiooghvra]ehhs}vy~uhmxy}ux~raj|uv}onzy~|}}vy{|{x{w}yxy{ztv~|xſ÷û|rjd`abdlu}~}wqidb_^^\\\\\\\\]]]\\\\[]aehlpsttrqrxrjimszyurokf`[VX^gnrrpmihegntwy|~{qh_[ZYXXZ^ciosx|~}zqd][XWY[]bhq{{qjgfpxz{yrjgmrw~b`]XOPX^_YRJDCJW^^WQNNOMKPW^^PHJQSQQTV\\ce]VTUXVUST[ba_klhd`\\YVSOR[_`_]\\\\_cjpnlkkkib_gpme[WY^`^]\\[_bejhedbadmxjWV^clopqoljga_a`][]cjptronomiefmof``cgjf_\\`murjfgkonhely~xi^bhiebaa`_aacehlle\\[bgjlmmmle`bcdd`^grk_ZZ[_emsyxuvtokkpvxwxxuokkkkjjmrtvwqmopqnd]aefige__bd^]eifdilolklh_agkiejoqmecaaef_\\^fkjieb\\Y]ciptmecgr|{wthaefbdpvrrtj[\\`_^_^[^dqxvsppmd_gonmqw{|wx|yrjcXWYZYW]^Xci][\\\\\\]]YVZ^_\\VQMMKC?DJNRW_b^VRNHJYa^WONXfjbXWZ]^agbUPV^abcdea^cihbeorngbbcgkidirkehhilpollllpssoru{woospmqwrhem|vjkmptsv|xnnrrrrrrqpzvjhgjqpmqsrpocTXcddgjtxlc`[UTZ[ZakeWXeheb][Z\\`hksoggp{~}xurzvfl{pnxudWYahqujfvdWum\\^TJQTT^kj\\TVUPIBCFGHMQQRONKEEPWOPOPPI?FWXYXTKGIMX`^ZVZb]QQTY[js]R[fojgjo|ss|~u{yyvxyworyv{~ww{|{u}yphdenrmeh{igmkc`jh\\_fijlqkhyoa_\\`flpmfkzs`cnjj~zwy}vjq|{zy~~scmyw}om~|{~xw~{{}~sw|v|Ĺ¾Žÿļukd_``bjrz|~|vohc`^\\\\[\\[[\\\\[[ZZ[_cgkorrspopv~phgkrzytqokg`[WX^ekoonlihefmtwx{}~zph`[YYYY[_djosx{~~zrg_ZXVWY\\`foz}skhgnwz}{vnlotydca[TU[_^YPHCDKX^]UQPPPNKOYa]PJMSQOPSZ`ecZTRTVTRRTZ^_cpmgd`YWURPT]_^\\[[\\`cjomjjjjg`aimg_XWZ\\^^]\\\\_bgjhdb`bhp{~dWZbgmmopnjieacb_[]ahoqonnpqlecioka]^bgie_]htvqifhknjdfo{~ra[bjhb_`a`_`acfhlkc\\]chklmnnicbbcdd`_jod][\\^biptzyvvsnklptwyywsnkmmlkloruwupmopoja]bfgigd__bd^^gigdimmmknf^bjligkqqkcdb`gha]_hklhfd_[]biptngcerz|yug`fhbesxposj[[bb^]][^dovvsolf_ajonnsy|}y{yrmeXUXZYX][Zrzc]\\ZZ[]\\UU\\^\\XROLIE@@EJORY__ZSOJEM[`ZQLP^ie[RTY\\]`d^TOT]_^_bd_\\ahf_dnqld_`bgjhcfplcegilmmkjklpsqmpx|tnnrpopumacq}|qjkkotsu|xoopqssrsrs}skigkrqnqssrpdSVbeeghqwla^YSQWYZckdVXdea^[XWZ`hgnmfenz~}wrrzxiosmxtaW[`fmqifwn`zna^TMTXW_khYWXTOHABEGHMQRTTXOFJT[UUTRQOCCSW[\\[PGHQ`jf_VYecXZ\\`amv`Saptlimt{us|~rwwx}vvvsnrwu|zrv{{wwjeehsvlgs~omtlabig`bgikmqhhymb^\\bhpqhcn}ubgslmyx{{ulr~}|{|thp{y~ok~|xw{~yy|wy÷źþɾ¿¼ý¿~}~~~}~~~~ymd^^^ahpw{~|vohc_\\[[ZZZZZ[[ZZZ[^bfjnqrqoopv{oggipx~yspnjfa[WW\\chlnmlhgdfltwwy|~}wof_\\YYYZ[_ejoswz~}ysg_[WUUWZ]dny~tmiipy|yrptx}eec_Z[^_^XPGBEMY_\\USSRRNKQ[a]RLQTOMOU]ceaYTSTUSPRSX\\akwohf`VUSPRV[][Z[\\\\_ejkjghjhc_dihaZVWZ\\^_^]^aegjhb^_djryb\\bfjklopnjebdfb]Z_imoolnrspieglle^^`dggfbdotplhghkkgbhs{zm^Zcie`_^`_`aacgjkib]]dijkmonfbbcbdd`bljb__`afkptzzxurmmprsty{uomknmljlptvwsnmoolg_\\cfhigfaabc_bghgfilnmmnd`eklkjnqoiefdaghc_ajmljgfd_\\`gnsnhbcqz}ztgbgjhisvnmsk]Zce`\\[Zaemtwtpkb_elonns{~}}zrphYUY[[[\\Ya~o^[YYY\\^XRV]]ZTMKHC@@BFKQUZ^[VOKFFQ]]TMMWdhaUNSZ]\\]a[QNSZ\\[]`a^[_ed^cnpg_]_cfhebhpi_afgikkjikmpqolpwxqlnpomosi`hv{wnhjlorqv|wopqquursuz}qljjnsqpqrrtqbVYbeeffoum`[VQPTXYcjbVZca]\\YTUYbgejifgmx|spqyxnutmxr`[_aejkdfwyj{~mcaWOUZY`jfZVUPPJACHLMLRUV[dQHQ\\aZZYUX]NFQY`ccWHJVhsneYZjibcddeq|gYhstmjnx|wvt}|nu|vu~|ussqnrtt|tnw{{{whfinwwon{spwmbdigeegikmohiyma\\]dktncduwelxoqyz|y~unq~~~||zvls|{~ol}{zy~~|}}wuż¹õ~|{|}~|}}~~}}}}ne]]\\_fnu{~{vohc^[[ZXXXXYZYYXXZ]`djnpqpnmowzogfgnv~{spmifa\\XX[bfjllkhgdelswwyz}~|vme_[YYZ[\\`fkoswz}}ysh`[WUUWX[dmy~uokms{~ztsv{hgda\\[`a^VNFCHPZ_[VUTSRNKR\\`]RMSSNLNU^ce_XTSTVSOPRW[gt{ohf_VTQOSVZ[YZ[\\\\_ejjfdfhgc`fie^WUX[]]__^_bfgif^[_ektvb^ehiikoqnjc_efa\\^airnmlnqqnheimi_[^aeffffkrrlgghiiihglu{ue[_efc^]]^^`acfjjhea^_fjjkmojdbbcbed`dlhdbbbejkouyzyupmnqsrryztmllnnljlrvwtqnooole]\\cghjhfaabb_ciihgilnmpncagkllkoqnhfhgfijdadknlkggg`\\^fmrnibaqz}zugbgkmmtvmkqk_Ychb^ZZafmtwtpib`glnmnt{~~yrqjZVZ[\\^ZXo|f[VUWZ][SRX[[WPIFC?>?BFKQW[\\YTMFBJW]VNMR]ebZOLU]]Z[]WMMSXZZ[]`]Z]bb]cnnd[[^befcbjof]`dggghiikopolkqusmkmnmlmmebnwwrkgikmppw}unppouwssw{plkkosqrrrruqbVZcffddmum`YSPPPTZcf`X]c_[YURSZegafgfilwznnqxxrzpltm`accehe^dvqx|mdf\\QX\\[`gb[VNMPJAGQSPLRZZajUNZdfa`_^ch[MT`fik_NM]pzuk__mkiiiiisrdnvtolo|{tvw~xktyss|{ropomoqs}~ply{{~whhmtzzxyrrxpdejiihhilnngjym``dhowlaizyjp{stz{~x~}vnq}}}|{xqv}|qm}z{{||w|~xvŸù»¿~||{{}|z{|}~}}~~{|rf]]\\^emu{}zvoha\\[ZYWWWXXXXWVWY[^dilopommowynfefnv}{uqmhe`ZWXZ`fikljfedeksvvxy|~}ztle_\\ZZ[[^bgkqsvz|~}yrh`\\XUUTWZblxwronu}{vuy}jjfb\\\\`a]ULDFLS\\`[XWWTQMJS]b^RNTSNLOW^cb]WTSTURNORX_mxymge]VTPNSX[ZYZ[[\\_eghedehfabihaYUWY[\\]^^^_bfhhb[[agmyr`^dghilpplhb`dd^\\afjnllopnmkhgmod[\\^afhffjorngefgggggjpuyq`[afe`\\]]]_`behigba__bfijknmhdbbcbca_flhedccgkkouyzyuolnqqqsxyqlklmnjhkruwsnnmmmgb\\\\cgijheaaba_diihghknorlbcgjllmqrmgfhijijdaeknmkiih`[`flpnibaoy|ytidimnpttnlmjaZdkf`\\Yaiostqpkcbfhklmrz~~~wssl]W\\^^^W\\}wbXUTW\\\\UPTYXWTMFB><<>BFKQX\\[WQJEDMYZRLOW`c_TJOY_[XZZRKLRWXXZ]`\\Y]a_]dmlbZZ\\addaajne]_bceffghjnpmikpspjjlmkiljcdpwumggjkmnoy~sjnqouwrszzplkkourrqqsuqbY^efgcdmum`XQNMMRZcd_[^a]YUQNQ\\fc_dffjkv~slmqwxt{{kjoldhefff`\\dr}wvxjcjbU`_]afb]SFLRLAM]YRNP[`fkZYhliigihkoeV]jlmogSSfw~zpfgllmmnmmsymsutqmn|yuxy|thrxqqzyokmnlnos~{lk|{z}{~xjlty}{|{ou~sffkjkjjjlonhly{mchmkqxmcm}{ls|uu|}w|{xpr~~}}}|{sw~tm~y}}{y}q~}|~|{ķǼȾŻ}zxyz{}~|z{{}~||}||xxwj^]Z]dmuz|zuof`\\ZXWVVWWWWVUVVWY\\agkmmmkkovwleeelv|{uplhf`ZVUX_eijjhdcbdjrvvyyz|~~}}xtle^\\[Z\\^_dhmqsvx{~~|xskb]YVUTVYblwysrrx~{y}lkha]^`a]TKEHNV_a]ZYZVPLKT_c^TPTSNNQY^b`[WTRSSQPORYdsxsifd]WTPKT[`Z[Z]\\\\afeddefgfbcie]XVWY[[]`_^`chig^X\\chpl^]cfghmqojfacfb[\\fjkkklppmkjijmj^W\\`cghgioqnieddeedeglrvvl`]aec\\Z]]]^`dfhhe`]\\^aeijkljfdcbcca]_hmheeefikkovxywtplorpotyvnjikmmhfjswvqllkhhd^[]dgiigd```aafijhhijmprkdegiknosrmgegikklfcgmpomklj`[`fjonibcnv|xqjfkpuwuspnkic[dnjb]Zckorrqrndbddilkox|~wrrl_X^cb]XgscVSTX\\[RQXXUSPJD@<;<@CFKQY[WQKFDFOXVOKQ[a_WNIQ[^YUXXQKMQTUUW[]ZW\\`^[dmj^VWZ_ba_akmd\\]__addefinohglpqkfhllhfhc_grtpjffhlmkm{rhjprvwrvwokjkpwttqqtvpcbcfghccnsk_VQLLKOYab^\\]]ZVSOKR`f^]defkju{mhlpvvv{vhjkkjlejhf^Ybp{ztreblh[dbacff^LANUPFUj_VQM[gkldflpqonorsto`alqstk[]o}{rklmopqqqrwyqttsson|xuxyzpeq~}tnow}wmhjkklnt}xil~zxvv~~|}ymqx}~|}vnzvgfklmmlkmqnjo{~ynfnrnsznfr~|qvzux}x{x|}ps~}}|~~}ux~wpz~~~zx}k|||}ƾ̾øǼywvwxxy|||~zxxy{~|{|||zyvv|~pa]Z[bkvz{yuof_\\ZXWUUUUWVUSTUWY[`ejkkkijnvwleeelu{|uplhe`YTRX`dghjhdbadjruvxy{|}}{zwskd_]\\]^_aeimpsvwz}}~}xrne^ZWUUTX`kv~|utw}ljhb^`ed\\QIFKT[cd`Z]]UOKLVbc\\TRTRMNSZ`a_YVTRRQOPQSYfvwpgdb\\WSPOV[\\\\[\\]\\\\beecbdeedddfc[XWXXYY\\a`^`fihc[X]dirzd[\\bfghmomhc`cf`Z_ikghkqrojijklkaYW\\aeghkpsoiheabdcbdhmsvpf_^bb]WX[[\\^bfhgfc^[[]bhkkjjifcbbcc`]ajmhedfhjlkpxxwwsmkprnovyrkihikkgejsxwokmkfdd]Z_dgihfc``_`agjjihiilpokdfhhknptslgefikllfejopponolb]bginojbenv|vojhls{|vqspkhc]dnke_Zbkprqpqlebacikimuz~~vrpj_Zaif[_v~o_TRUY\\XQSXVRPLFB><:<@DFJPXYRKEDEIQVSNNT]`ZOIJS]\\VSTUPMMNQSSVX[UT[_\\[engXQSV\\__]bkj_Z\\\\\\^acddiokehmpogdfkjecd^]jspmjedhlmhm~rfflrvurv~tljjlrxuuqntvjbhgcfhceprh]XOJLGMX`^]^]ZVSQLJTbc[[ddfkjsvifkottwwpeggilmejje]W`pzzqmdbjh]cdbdef^ICQWXRatdYQN`mlnmmmsxuqrvwyvidmtusndhw{tpoosuutuux{xtusswpo|~wtvwwldo{ypjlv|siegijkmu|tfmxsst}{{|~zqu||{}sqyhelmooomospmt}}wolsuruyniu~vxywy~xz~wyqt~~|~w{zt|z~|~~xw|}gz}|{{~~ƺɿ½~xvuwxwwzzz}xvvxz~}zyz{|{yvtw~uf]ZZakvz|zunf_[XVUSTTUUTTSTVWY[`dhijihilt}vledejsz}voigd^XTPV^cghhgdbaciqtuxy{{||{yvrkda^^^`acfjmortvy|}~}ytof_ZWUUUYaku~xwyljhdaegbXMFHPY`iid]_]UMKNXbb[SRSPLMS\\``^XUTRQPPPQT[huvnfc`\\XTORWZ\\[Y[[Z\\bca`_bcdbccda\\YWWWVV[a`^`bfc]X\\aejun[W\\aehjmnjd`acd_\\bhhfgkqrmgfjmkcZWY^begintulfhc]_aabdhmttjb__b_WTWY[\\_dhieb^ZXY\\cjmmkiieccdda_`fklifegiknmryywuoiinnkpwxpiffehidcjtxuokljeb`[Z_efggeb__^^agjjihhhlpmifhhgimotungefhkklfekooppqrne_dijoqlcfnx|tmlhlw~tquphgb]fnkgc[_irspmmlfa^`ghgjpw{uroj__hmc^lykZQSVYZURVXSOMGC@><;=@CGLRXUNHCCFLQROKNYa^TICHW^XQQRQOMLLNPSTWXRRZ^[\\flcTOQUZ][ZdlfZWZ[Z\\`abbjniehnnkebejg`__[_mpljhddilkfmocbkrtrqx{qjihmuxutnmutc`ljaeieipmb]XNLJELX]Y[^\\VSRNGJXdaZ\\ccejlrqfejnprsokbcbhmmejle\\Xaqwvkhfdge]cddegf\\OPUYd`fykVN[jnmprpmt}wsuz{|zqlrwyuqmt~~zusrtyyvtvwuvwxwstysp|wsuutibmxulgjuyoeadhhhku{pfqtpqt}}xx{{~}w{{x~~vpt{hcnqooqoosrpw|tqry{wvwolv~zzyyzzy}}{vwtu~|~v|}vx{~||uuzydy~|}|zzxxzzŹʿ¹¿¾½}wttuvvvy~yy|vttvz~{yyz{|ywrqrxzla\\[akuy|zuof_[WVTSSSSSSRRSUWY\\^dhiiihhls{ukddekrz|wqhec]XTPT\\bfhhfdc`agosuxy{||{{xvqjea__`adegiknpsuwz{~|yupg`[VUWX\\dmv~|y{ljheegf\\RKGKV^elld[`]TOMQ[db[SRQOKMS\\`^[TSQRRQPPRU^jwvmeb`\\ZSMPY_[VX\\[Y^dc_\\]bcdbbba_[XUUTSU[`_^^`b`ZX^bgmzy`TV\\adfilmha_ced]_fgdehmqqjeeijeZVXY_cehlpsphfh`Z]`aacgovqe__`b\\SSWY\\_bgjib]YWWX]cioojhheccdd`^dkmljhgikmnpuzywtkfillkpwwphfeceebajvwsmjjhc`^ZZaffedb`^^]^bgkjihgglpkihjhfimotvnfefhkklgeknppprsnhbdjjormdhpz|sklinz~ttyofgdagnmie^^gruokkkfa]^ehfgmuyspmicdklegw~|viVNTX[XTTWUPLIEBB?<<>BCGMTWRKFCCGLQPMLPZ_YOFBK[^RMOPPOLLKKNRSUURRX\\Z\\gj_RNNSY[YZdjbYUWVWZ^aaekmfcinojc_cgd^\\\\\\clljiebdkmicp}kaajqqrryyoheelvxtqlmuo`boj`ehekof[ZVOLHEMX[VY[YTSQLEJ\\f`Y\\dbejlplbbhlnqnig^]_hmjekld[Xdtvpghiffc_cdfghgb^]W\\medyrXTfsnmpsplt|xvy{||{wruz{xuv{}yvuvw|zvtvwtvy{xsv{tp|usttrgalvsjdhsvla_cgeelxxift}qops{~}zuv{y{~|~wvysor}}fcrtppsqpssryzqrv~xtuqow{zyz{~~xzzywxwx~~~uz~wt}}~~zrryuaxyx{zxwvvxwǽĺſÿ{uttuvvux~}ww~{ussuz}|~{xwxyyytpoos|re^]ajuz}{uof_YVTSQQQQQQPQQSVZ\\^bfhiihhlr{~ukccdjr{~wqicb]XTPT\\aeggfba``dmqsxy{|}|{xtpkebabbdfgghjloqtwyz{zxuphb]WWZ[_gpx}~~~jigghgdZPLJQ\\cjomdY_^VPNS_ebZSRQMLOU\\`\\YTTTUTSPQSX`mxvkeba^ZSLT^_XTX^[Y^da]Z]abcba`_][WUSQQT[_^]]^`]ZX_chqoXRX\\acegijg__deb^afdbdhnqmd`eje_XWXY^cgmqroidfg^X[_`adhnsnb^ab`XRSUY]`dijf_ZVUW\\`ejoojgfeccdc__dkmlihghlooquyxwrjfhkllrxwphgdbcdaakwvqkiigc`^[\\bedc``]\\\\[]bgkjggfglpkhhjhfimosvnfdfhjklgcioppqrsojefhjprmcisy{qkljp~{rw}odedfgmnmib_eqwrjhif`]`ffcelsxqnjhffjllu|}{ugQNX\\[WTVVSOJFDDD@;:?BCFNVWQIECCGNPOMNU[[RGADQ\\ZOKNPPNLIHINQRRSPQWZZ^fg[OLMRWXW\\ff_XUTSSW\\_bfmlfehnkfb`bc`^][^gkjhgc`dkmgduva\\ainooqx~}xmdbemvxrlhltm`eojaegemm`WXVPMFDNXYUUWWTSQJDK^f_Y^faejkoi\\ahknnjdb[Y]glgdklcZYfvsjfkkfca`adfihnrkc\\cnfewsa_ntnlptokszxxz|||{wux||zxy}|yxwxy}zttwwtw{|wuxztp}~tttsqe_ktqidhqrh^^cfbbnxpchu}zoomq{zxxtuzvv~qv|supp{{igstrrsrortt{vnt|xstssz~zzxyzzzxxxy~z|~}~uz~wr|~~|xoow~~t`uvvz}xusstvv~~}~}»Ƚ¾¾ÿ¾xssstuuuyztv}ztrqtz~zz}~zvtuuwwtollouvia_aiuz}|vog`YURQOPPPPPPOQTWZ\\^adghhfgjpx}tjcbdjq{xphba\\XTQSY_ceed`__^aimqwxz|||zxtojecbbdegghijkmptvyz{{xvrke`ZZ\\^birz~~iiiiifaZSQOWaglokc\\][TOOXdfbYSRPNOSW[^[ZXYWWUTQQTZcowsjfdb^XQP[`^WUX\\ZY_b_\\Z]`ab``_]\\YTRPNQV[]\\[[\\][YY`eku~fTSY]`abehgc_`dda_adbbdhmnh]\\eh_YXXYY]dksvogcdgcZX[]^`cimph__bc]URRTZ^afihb[YVUY_dhlpnifeccddb``elnkhhfhmpqsvvutpifhjlmrwungfdbaaaakwwpihheba^\\\\bfdb^][ZZ[^afigdfggkmjhjkgehlosuoedfgijkfbhopqrstqjgfgiqtkekuyxojklsyrymbddehlnome`drysjhif^\\`efbejpxolihffjmox|~scOQ_`[YXURPLHDDGE>9;@BDHRWSKECCCGNPLLRY[WNB<GV[ULJMOOMJGFINPPQROPWYX^fdVKJMRVVV]geZTSSPPUY\\dgjiddhmib_```][[[`ijhhe_^dlleewp[W`hkmopy{{via`fpwunhcislbgnibegiok\\SVRQPGDPXVRSTTSSPFCOcd[X`fbfjjleZ]chlke`_YY]gkecjkb[\\grngeoldabcdbfjlvyqliklgjushksqmnrspnrvxxy{||zwux|}yvx~}wwzxxy~zttwwtw{zwxyxtu}stsroc_krngchpnc\\]bb^bouiakt|vlkiqztpvsrvrr{zrzsoxqo{}xmlsssrsroptw||ply~vsuuv|}zzywzzxy{{}z|}|~~v{xs{|~wmks}{}u`ruu|ytrpoquw{w||y~ÿ¼~vrrrsttuywsv|zsqoqw~yxz~~yusrruwsnjjlpz|mc`aisz~}wog`ZTRQONNNOOONPTX[]_aceffffjow|sjcadjq|zphb_\\XUSSY_aced`^^\\`fjruwz|}|{ytojfcbcdegghijkmosuxyz{ywsmhc^\\]`dmu|ihkkie_YUUW]djopkb^\\ZSMP]ghbYSSNMQVY[\\YZ\\]YXVUQQT\\fpwrihfc]UOU^c^UVW[YZ`b^[Z]_`a_^\\[[WQOLMRXZ[[[[ZZYY[afmy}r[QTZ_a__chf`^adc__bcabdimlb[^fcXVXYYZ]clttka_dg_XXZ\\\\_djnlc^`bb[SPQSZ`dgge^WVTVZ`gjnokfddcdddc`ahnlihhginrrtvvsrngfhjkntvrjfed`^]^`iuumgffc`_^\\^cfda]ZZZY[^`fgabgfgkkihjkgegknuwoedfghikfbhppqrstrlhffistkekvytnjkmuys{maddehlnqpgcft{tkikf`^cgebfjownkhffglnpx|~|q]OXeb\\[ZTONIFDEGE<9=@BELWWNEA@BEINOJJSZXQH?>HWXQIHLMMLHFEINPOPROPVYZ_fcRHJLRVUXah`TQQPMNSVZdfgecehkfa_^^]\\ZXZbjihid]]emiaj|~jWV_hkkmpyxzuf^`hqwrlfckqhaikgcefjoiXRURSPHJSXTPQRQRSPDEYh_XYbfbfjjg]WZ`flh`^\\WX^ghbcjia[\\goliiplc^dheagsvyursnlljntsrssomossrrqtxxyz{zyxux}}xtw{sv|yxz{ttwwtw{xw{zxtx|stsqna_lqkdbipj_Y]`^Zbppbamt{shhgoxplusnsqrx}vv~{lryppyxupottsrsqnqux|zno~{vsuwy~~{{zwz{vz}}~||}{|v|yuz~~~{wlip}{y}u_ptu~|wqpolnux~vy|s{{v|Ľſ|toopssttyvqtzztpnqw~~xwz||wrqqruurnjjjlsreabjtz~}xogaYSQPOMMMMMNNOSX\\__acceeeehov}{ribabir}zphb_[WUSSX]`acb_^][^chosvz{}}|ytokfddddfghhijkmortwyz{zytojd_^`aemu}iikkhd^ZXX[ahmmlic_\\XRLRajhaYTSPPSWX[\\[[\\\\ZYVTTRU]gqvpihfbZQNV^`]VVXYYZ``]Z[]__`^[Z[XTPMLMQVYYWYYYYXX[bhpyxdROTZ__^^bgd__bdb``aa`behki_[`c^SUXYY[_fnsri`_dd]XXZ[[_fkke^_bb^XROPSX^dfea[USTVZahjlmhdcdefedcacilkihhgimrrssssrlgghghmsuqiefea\\\\\\]essjefea`_]\\^bdc`ZXXXYZ\\`ee^_deehjhhjjfdgkmuwodcefghieagpppqrsrlgedgpriekrtqkhjmtxu{k`dddhlprpjges|vnjkhfbdfcbhkl}wpmhfffknnt|{}tfNXea\\_`VMLGDEGHB:;?ACHPXVMC>=CIKLLJMTWPG?<FOSTNGFJKKJFDDHLMMQQLPVX[`d^PIJLRUU[dg\\QONLIKPTZbeeccehhd_^][[ZYW[cjighb[\\fng_m~veVU]fkkloyxz~sd]ahqupjdellebhigdefjoiVQSTUPJOSURPQPNQRQEE^l^T[ehafiheWUX_eje]\\]TY`fgbdjh`Z\\fnomppj`_jlebj|{uqrmllknrrtwrnnostsrqvyyxzyyyvsu}~xsxyqv|yxz~{usvvsvzww{{vt{{rtsqmaanoicdjnfZX\\]ZYdpj]ams{~ogeeowmhrqlpppyxw|skwxmqvtrpqtsqpsqnqvxyvquzvruy{{|zvx{v{~~~{{}zyu}zuz}~|yxkgoz~zw{v`osw~{upnmkmtw{yqxzr{zu|¿ƾ¿¾yrooprsssyuqrxzrpnqw}~{}wvy{~{tpppqstqmiiijq~vgbcjt{}}xohaZTQONMLLLMLMOSX\\_abbbddddglt{{rha`bis~zphb_[USQSW\\_ab`^]\\[^dhmrvy{}~}zuokhfddefhhhiijlnqtwyzzzxrmid_`cfmu|kklifd`]ZZ]fnomkhc_\\WQLXejgaYVUSTUVY\\__]YYYYWUVWZahosokie_WNNV\\]\\WWXYZ[__\\[[]__`][Z\\WPNMLNSXXVTVXWWWWZbktxp]OOSZ]]\\]ad`]`bbb`````adfea^[_`UQTWXZ[dnrqld_ad_YWYZZZ`gjf_\\_daYURMNSZadd`[VSQTY]djkkjfccdfffdddfhkkiggijmpqqpqrpjffffflstphefe_ZZ[^gspidec_^^]\\^aca_YWWXXX\\aec^^bddhjhhlkfcehltvmccfffggc`goppqqrrlgdbfnnedlqrnhgimu~|xv{}k`bcdjnqtrjihv{vqmkhebehddijluqnhffejmls~}{rfV_fd]bdXLLJFHLJ@:<ABEMTYVKA=?EJLLJJOVTJB=AMSQNKCAHLKGCCFIJJKQOKOUWZbcZOKKLQUW\\eeZQMLJIKPV^ddccdfhf`^][ZXXWV]eihgf_Z^ildao|n]SU]fijloz}uz|l_]binqlgdchgcafhifffiogVMPV[RMQSSQPRNMRRODIgo[QZihafhgaUSW_dh`Y[\\T[cecbfhgb\\\\elortogcenmebn~~tqpljkmqqquyrnopstsrrvyxvyyywtrv}|vry}uqw|xwy{wttuustuvx|ztt~yrsrqmbgqneafkkbXX[YVZgmb[clq{widcepthcmljnln}ypwzjkwskquomoqrqlkpqnowyspv{}xuruz||zvxw{~}zz~z~xu~zvz||zx~xlhnw{|yuyxco}uzztnljimtwuvow{s|yw¿xpnnpqrrrxuoou}{sonqv{~|yy}~utwy|ztonoqrrpmhggflx|lfdlu{}}xpibZTQOMKKKJKLLOSX]`bbbbccddejry{qha`dkr}zogc_YTRQSVZ]_`_^\\[[`dgmrvy{}~}zuolhgfefghhhiijmnqswxxyzxtokgcbfjpx~mnnhdca`]^bkrsojgd_\\VRS_jlf`ZXXXXWVY]cc]VVYYXVX[_ejnommkd[SLMVY[ZYXXY[]_][[\\^___\\YZ\\UPLLLOTXVTRTVUUUVYcoyvdRMNSZ\\ZY\\``\\[acaaaa^_`add_]\\\\_[QLRWXZ\\hrspia^cd]VUYZY[bijcZZ`c_WTQLMT]dda\\WTRQW^agkkhfdcbdddeddefghigfghknoppnoomidccdflstmgeec[WXZ_hqlecda\\[\\\\]_aa`]XVVVVX]bc`]^aabhjhhlkeabejsukbbffedea_goqppoqsngcbfljcemoolhgimu|zxv{{j`abdjnqvskklv{vsomiebgjghkintqmiggfjkkt~wpkbgje`dc\\PMLLLOJ>9>BCIQXZTI?;?HLKJJMRVPD==GPROMH??HMIDACGIHGKPNLPTW[a_VOMLLRVW_fbVMJIHJMSZadcabdhhc][[YWVWUY`egggd\\W_kkacqvfWPS[eiilq{~ytzyfZ[cimmidbdfcaadhigfejpgTKPV`YRRRRQPQMKPPMDMkoYO\\jjbhhf_URV^bb]ZZZVadbccfgfc\\]dkotvmehmmifep}usqkikosqq|yrooptttstxytuyyytqrv|{tq{zpqy|xwywustssrqqtz}zruwqsrqlfmslbbhlh^VVWTU_ki\\Ycko}ofc`fpobaihikippkzrdlskiqqhhorqnggpqimzzkl}}{{usrv}~}}{wwx{|yy~y~}~w|}ryu{zz~xu{xmimswywsv|zgo{tzysligglsvqqrw{s}{z¼ľ¿wolnoqrrrw~voos||sonpuy}~zxz||truwz}~{zuonnoqqnjfdedjtrjhow|}}yrjc[UPMLKJIJJKLOTY^abcbbbbcbcipw|ypg``dkt~zpjd`ZTRPQUZ[]^^^\\\\\\`cflquy{}~~{vplhgfghiihhiijmnpswxwwxwusnlihjnt{psnecbdc_aforqmkif`\\YXZelmf_\\\\]\\YXY[`da[VWYZYY]`aeimooolcYQLNVX[ZZYYZ\\_a_\\[\\_aa_[YY[UOLLMRUUSQQSTTTUV[ftylUJKMSZ\\YWZ]]Z[__`bb`^_aaa_\\YYZ[WNMRWXZ_jrrld^_cc[UUVWX]dhi_XZ`b]VUOJNW_cb^WSSSU^ddgjheccbbbcccccegfggfdehkmoonmlkjgbbbaflpokfefaYUVZ`hmid``_\\YZ\\]]__^\\WUSSTY]a`][]``afhfeikd_`cksqfabeca`cb_foqpnnqsogbaejhcglnmkhgims|yvu|wg`bbejnqwskoquzxuqokidimjkmjo~sqnhihhkjmz~tpohmpgbda\\WNLNQQJ<9AEGMTYXOD;:?IMKHIOUSJ?:@KPPPLB:?HKGA@CHHEEKPMMPTX\\^XRQOLLSVXag`SJGFGIMT[cc__befe`\\[\\WSWXRVehegf_YZ`gfafsr`TORZbgijr||utws`V[ejlkf``dca`adggedblrfPGNXc`URRSRQOIIMNLGRhlYP_njbijf_SRV^a^[[Z[Yec`ddfhfa\\`fmqvvkdkqnehjtyuuqjimqtsvxrropvtssuzxqsyzwpmpv|woqtmtz{wuuuppqrpooptz{wpysprrqnksvkacjleZUTSSYcjbWYdio}{jcbagng]agffggv{fh}jdnngiokdiprpjcgpldl{uis{xzqqv}|~||xw{{{yyz}}vy|s~yv{xx~wt{xollqtwwttz|npxt||wqjedelssnqty||vz|üÿ¾wnlnpqsrqv|wonry|tnlosw{}}|yy{}|truwy{}~}y|ztnmmnppnjdcbbgq{xolry}}}yrkc[UOLLJIIHIJLOTZ^acdccaaaachou{ypf``fmt~|qjf`ZURPPTX[]^]]]\\\\_aekpuy{}~}xrmiihijkigggjlnoqtwxwwvvttrpmlnqxrsjbcdffcejprqnmkg`\\\\\\`hllea_`a^[Z[_cb]YWY\\\\[\\`dcbjnnoqlcZRLPVWYYZ[[\\]_b`\\\\^_aa`\\ZZYTNLMPTUSPPQQRSSTW`lxr`OJKNUZYUUX\\ZX[]\\_bb`^_ab_][YWXYRLNSVX\\cnsqi^Z_a]XUTTVYafge[W\\``\\VUMHPZ_ba[TQQT]dggghfccbbbbccbcdfgghfeddhlmnnlkkifcaaaaelnlgdff^USVZahjgc_]\\[ZZ[]]]\\\\[WSQQUY^`^[Z\\_`aefdcgjc^_ajrodadb_]]ab`doplmnqohc_`dgedhlligfhilqzxtu|teabdeknqwrlrtuwyurqqjdinlkmkq{qrngihhkho{qooforhcda^\\QNPSSH>=BIMSXZWK@9:BHIIHJPUPD<<EMNNNF;8?HJF@?CGGCELOMMPTX]]SPQPLMTVXcg^QHFEEHOV\\b`Z\\cfea\\ZZYUSVUPYggbef\\TWchc`ismYONRY`ehjq{zssvm[T^fhhf`\\^aa_^`bggebboqaMFNXedWQSTTTOFFNLIMXfiYRdpjdkke[QQW]a`[[\\\\\\ea`edhjd\\\\bhntyuifnrmbjnvwvxmhjpstyvrtqrwussv{voryytkkpx|qjr}oluzwustsnnonnlmptxxsp}zppqqrppvuibflkbYTRQV^ef[V]dgp{ueaa`fj`Y`ecbclo`lwdhoieijcblrqjecgjcbq{nj}ww}vot}|}~zw~{{yy~z}~vvzs~yv{vx}vtzynmnnpuxvtx~|rrvs|{vqiccfntrlqvw}{|~÷ü¾wnlnpqsrquzxolpx|snllqvy{{{yy{|trtvyz||{wyztnmmmnnlidb``dlv~{tqtz|}}yrkd\\UNLKHHHGHJKOTZ^bcddcb`__afmtz~ypfaaenv~}rlf`[URPPTX[]^^^]]\\_bdjpuy|~}yrmjiiijkigegimoqrvxyyxvvvwvusrtw|~~sqhbefghfhnpppnmkf`^^bejmkfdccc`]]_ada[VU[_`````aeopooojcZSMPXYZY[\\]\\]`b`\\^___`_\\][ZSNLOTVSQNOOPQQQSYerwjWLJLOTXVTTVZXVY\\\\_``__``^[[YVUUTNLOTVX]fptqeXV^^XVUSSTZbfeaYW^`^YUTLHQ[_a^VQRRXbhiigebbcccbba_acddefffdcdgkmlkkjhhda`_aaeknkebff\\QQTY`fheb]\\[YXZ\\\\\\[ZZYVQOPV[^`\\XX[]_begbbehb\\]akrlbad`\\Z[`b`cmnjjmpmd_^_bdcdikigeehjlnwwsuzrcabdeknqtnlqrsvxtquujcinommks{pqnhhhhjgrwmopeoridecc`UQTVSFADDJQVZZTH>:<CFFFHKOPI@>@INLLH=68@GGB>>CGFBDLOMNPTZ][TQQNJNTUZbdZMGDACHQY]^ZU[efb\\XYYWTSTPP]gdaeeZRUceaajqeRLNSZ`egjrxwrrthVU`gfda^[\\^^\\[]`ffcbfpm[NLQZecYUUVXUOGEOMHQ\\di\\ThoihnkdYSRY_a`]]^]bdabhdjmdY[chow{ofkrridjqzwwykimqts~|tststvtssvxtotxwpgiqxxmhr|wmlsusqpqpmnomkjlosutop}toqqqrtuvrheinj`WRQRZdgbWW_dhpxna__`eeZW`c_]br|e^q|lbnpedhd^botmd`egc\\dxwgpsxyopz|y{{zx|{~~wvwr~}yuzuw{utzxopollqxwtw||tstu~zupibagquqlq}}y~~÷ƺļ¿Ŀ}}~umlnqrsrprwzpknu|}tnjjotxzzzxy{}|rqrtwyzzytv|ztnllllmjgc`^]`hpxzvx{}~|xskd\\UNKJGFFFGHJNU[`bdeedca_]_dkqx}}xnhcbfnv}|voic[TQNOSWY\\^]]]]]`bdjouy{~~zsojjjjkmlhfgilqtuwz|{zyxxyxyyxz~|{}rnfdghjjjmqqommnkebadgjnomigffeb``bcc^YVX_ccb`a`_itqpmlhaXSMRZ[\\[]^^^_bb`^^___^]_ab]UPPSWVPMMOOOPPPU_jsqaPJKNPSTTSTVVVUW[^___^`a^YVWWTQRPLMPTVYbgoqmbTU^[TUWSRVZbd`]Y\\a`\\XTRMLS[^\\WQOSV_gklhd_^adddca^]_`babeffdbceikkiihhfb_]^__dkmjcaffYOOSX_efc_[ZZZZZ\\]ZXYZYUNMOW]``YTTY^]\\bi`^cfaZZamqh_ad`YXZ`backlhhkome_^`bcbchjgdbdjljlruquypb`acejnppkjqposvrrwukejoqonkxxprnihghhixrjqpfoskfefidYUUWREEKLPVZ\\ZPC<;?CFFEHLNKC>AFLNLH@759?DD?<>DGB@EMOMNQV\\\\YTRQKJNSUZa`VKD??CKU\\]YUT]eaZVVYYTQRQNR_daacaWQVac`aik_OLNTZ_cfjrwspppbQUchda][Z[\\\\ZYY_edbclpiWSSU[g]WZ[]]TPHENNNV]cjcZjrmlqlcXTT[acba_baddafkeln`\\`eiouwkeltqhfls}wvvnlqtv{wuuvuvwtrsuusptwvmehqurjhrwrklpooonmkkmnkigiorrnlr|yopqppswywoihlni^SNPU`ji_Y[aehpth^^__b_TV`a[Ybwr]_uxddtpddd_]eopf`aed]\\kwjewrxtlt}~|{z~}{x{}~~~xxts}{wsysv~zuuzxopomikvzuuxyurrwytqjb`jsuqnpz}{}øɾĽ|z{~}tmlnrttsqqu|rlmrx~vpkjnswzzyyy{|}{roqtvwxxwrtxztnkkklmjfa_][\\blu{~}||~~|xsld]UNLIGEEFGGJNU[`bcdedca_\\]djqv{~{wnhcbgpv|~xqke\\TPMOSVX[^]]]^^aceinty|~~{vqlkkklmliggilquwy|}||{zzz{{|~}yx|pkeegjlmnqsqmlmolebdhlmqqmkjhhgdddddb\\XX[affe`abfntrpmjf_XTPU[\\]]]^^_`bb`_^`_]\\\\_dd]TRXZ[VNJLNOOPNPWbpsjXMJKOQRRQSTUUTSW\\__]]_aa\\VTTTROONKMQTVYclolg^TUZVQUXRQX_daZXZ_daZWSPNPV\\]WSPOT\\ejlje^[]beedc^\\\\\\]^_adfecabehhhgffhe`][]^^bhihccfbVMMQV^dea]ZXZ[[\\]^ZVWZYTMLOW^`\\URTY][Xaj^[be_YX`npe\\`d^VVY_aabjjhgjomd_^_abbcgiea`dikjkptpuwnb_aceinpnijqonrurs{viejorqnk|woqnighihkohsqforlgehjg]XWXQFKTUX[_`XJ>:=ACFFDHMNH@>BJNMJD;46;@DB>=@DD@?FNNLORW^]XTRQKJOSV[`]TJA<=DPZ^ZTQU^b[USRYVPOQOLS_`_ac^UQW_`^agfZLJNTZ_bfjquqnnk\\NUdfb_ZVXY[[ZXV^ec`coqcU[\\X`gUT\\]b`TQHEMNR\\`flfaltposlcZVX^bdcbbceddbimhmj]_hhiqtqigntohhnvwvupnsxyztywvwvxtrssssprwtkdhrtnghrtnjlmmmklkfhnnjfcgormikszsmqqoruy|vnklmoi\\PMRZgnhcabddjqpbZ]^_`ZQV_\\UYh{~eVdwpamwkbb_\\ailha^__^[crn_onrunqz~~{}~|~z||wz~{~}}xzqs}|upwru|yuv{wnpomijuyuuvvuqpxytrlbblvvrosy~~|||ĺ¿ſý¿~{z|~}|slknqstsppt~|rklpu}{tmjmqvyyyyzz{}|soprtvwwupqt|{rljiijjhd`^\\YZ`hry}~~~|xsld]UNKIGEEEFHIMTZ_bcdeeda^[\\binuz}~yunhccipwz{slf]SOLMQUX[]]^]^_bcfkpuz|~~|wqlkjjklkjhfhlrvx{~~}}|{z|}~|wvzkhggikmopstpllmokebekoprqmljjihfeeee`[XY]dhhe`ahlnsqnljf]XTTW]]^]]]^_`bb``_`_^]_egbZRU]^\\TKJNPQPONSYdonaRJJKOQQQQRTTTRRX]`^\\\\_`_YUSRSQONLKOQSVZenmicYTUUQOUWQQZ`a]VW\\`d`XURQOQW[ZTQONVahkigaZY_efddb\\YZZ[Z\\`cdcaabefeefgfgc^\\[[]^bggdbcf_QJLPT\\bc_\\ZYZ[[[]\\YVXZWRLLOW^^WRRSX[XW_i]Z`e^WX`nob[ad\\TTX^``bggfeiojb^]]_`adgfb_^bikiinpputlb_abdhmplghpmnqsqu}vhfjpvqlk}wnomhhikjo~nhtqhnplgfijg_YYYVPUZWVZ`^OC=;?BCFFFIMMG@@FKNKE>627>CEA=>ACA>@GMLLOSZ`\\WRPPLKNSV[_[QF?:=GS]\\VRQW_^UQPTXTONONMU^\\^a`[SPW^_^afdUIINT[_afmrsnjjeWOXeea^XTXZYYXVV^dc_dqqbYaf]gfOS__dbSQJGNPT_emoggoumpskc^Y^bddcbbeefddjmmmc]bjhjqqlhiornkkrx}wxvppx~}xv|xvxxwsqrsstnnuribjstichrrlklkkjihgdhmlhdbgmmhgjsunmqpoqv|}vompqohZPNS`nnhiigcekok\\W[]^]VOV]XS\\orZUlwhfvtc^_\\^ekid`\\\\ZX\\jrfa~{ksrnu~}|}~~{{|wx}{}|{x|}or}}{~~{uourtyxwx|vommmjksywsqvvppx~~xtrnddnwyurty|}|||żøſ{yz|}{~{skikptuurpr{|rllns|}wnjlotxyyyzz{|~{soprrstusnnpw|rkhhhhhfc_][XX]dmv{~{wsld^VNKIGEDEEFHMT[_bddfffc_[[aglsx{}}yuniefkrxz}wqi`UNLLPTWZ]^__`acegkpuz}~~}ysmkjjklljifgksx|~}||z||wuyjfhkmmoqtvsnlllljedgmprtqnlljjigffed_[Z[`fjhd`_ipqqqlkid\\XVVZ``_^^]^`bddbbaa`_]bkh`YTZ`^XOIKQSSPNNV_hmeWMIILOQQOOQTTRQRY_`][]`a]VRQQQNMLKLPRSV\\hplf_VTVQKPVUPV_`][WW\\bb]VSRRQRVYWOLNOZdijfb]VXahfddaZVXYYWZ_cca``acdcdfhif_ZZZY\\_cfd``df]NFJORY`c_\\YY\\][Z[ZVUXXUNKLPX^[SOQSWXUV^f^[_b^WXamm^YacZSSW]__`eecdhmh`]][]^`cec_\\\\bjjggknnspib_`acgmokefnknqppuvihlrxqlk}xnnkhhjnntxkjrolnnlihijia\\]]^^]\\YW\\`XG>=>ABDEHIKNMFADKMLH>4029>BD@=>AA=<AILMNPT\\a]UONNLLNSX\\_XJ@<9>KW]YSPRX]YQNPUUOMMMMPYZV\\`]UOPW]]]_b^ODGMU[]_emsrmif`RP\\gfa^WSY]XVUTU^bb\\dtsf_dkjidNQ`cgeVUMLSUWbkutkkruprulc`_dfgfebdfgffgjmql`_fijnnjhhjmopoot{~wxurs~{x{wxxxwqqrttukltsf`kslabionmmkigfgfcajkhcbcfjiddhopmlpnnrx~|snpssndWQRYgrninphcelneXUZ]^XOPX[UTcv{fT[rsfmxl[]]\\`hjgb_[ZXW`lkbmrqvqsz{~~}~}z~ww~||~zxy{mr|zvz}ztmsssvwyz~uomnomin{~plwvoow}}xtspfhoy|xtuy{|{||ƽ¿ƽĿ{yxy~{z{{skgioswxtppy}slkmqz~ypiimsvxyyz{{|~yrnnooqttrmlmr}{slhggffda]\\YVUY`gqy~{wsme^WNJHGEDDEEGMTZ_acdfggd`[[_dkqwz{{xsmjghmtxz~|umcXQMMPSVZ]_abbcfhimqw{~|yvoljjkmlljgglt{}|||~{vvzhhkmooqsuurmlmlkheeiorstqnlkkjigffeb]ZZ_fjjhdabkpqpokigd\\XXZ^cc`___`bdefdbbaa`bhkf`[Z_`]TMLOTVTPMQYfll`RJHILPPOMNPTTPOSZ__][\\``ZQOPPMLLKILQQSXakmib[UUUMJPVSQY`^[ZXW]a`ZSRRRRSUVSLILQ\\dhid^XSWchecc_YUWWUVZ`cb````bcbbegie\\XXWV[`dfb]^efYLEHMQX^a_[XX^`\\YYWTSXXRKJLQX]WOMORWWQS]d^]^]ZVXcnj[WabZSTW\\__`ddaafkf^][Z\\]_cc_[Y[bjjeeklmqlgb_``bgmmicelkmoonxviimsxrkj{xnlihhlnpsijronnnnkjkkkc`aabc`\\ZX_aPB<>@ACFGILMNLDAFLLH@4,.6=?AA>=?B>;<DKNOPRW\\`]TLKLMMOU[__SC;::CQ[\\WRQUZZTLLRUPKLMLLRZWT[_XNKOX[[\\^`YLCGNU[\\^emsrlgd[PQ`ieb_WSY]YVTSU\\_\\Xdusf_dnqlcQQ^bgh^YRSYXYam{yllsustulcafjghhgcefhhhiloqkabfilmifgillmssqu}}vwusw}ywvyzyuqsstuugktsd`kpc[billmolgdddebajid_acfheaaekljlniks{~xpprtsl_VUYanummvtibflk`UTZ]\\RKRXXUYjz~p[Tfvohtu`W]]\\ciiea\\XWV[elggy|pxytw|~z}|yyv{~{|~yuyzlpzwruzzsjp}~~~trtvy{~~tnlnpmho}}mmyvnnw}|xttrjiqy~{vwzzzy{}ƾ½ÿ¾ÿ|yww{~{zy}|ujehnrxzupow~tnmnpx}ypihkquwxyyzzz|~yrnllmosrpkijoy{sljhfffd`]\\ZWUW]emt}{wrle^WNJHGEDCDEFKSZ^abefhhe`[[]ahpuxyyupmkiipxz{}{reZTOOQSVZ_acdefhjknqw|~|zwpnlkmonljiiox~}|}}yvv{gioqppsuvsqomnljgfgkqtstrollmkigefda\\[]clljhedimppomkjhd\\Z\\_bedb```acfgfedcaaahmkea_^__ZQNQUVUSQRU^imh[PKIILOONMMPSRNOTY]][\\]_]VOMOOLJJJHLPPR[dkkd]WRURJJPSQS\\^ZXXYZ^a\\URRRRRSSRNJIKR]cffbYQPZdfedc]WSSSQT\\ab`_^_``a`bfhhc[XYWUZaee`Z]fdUIEFKPW\\_^ZVX`c]XWUQRWVOJLNRX[ULJMQUUOQ[b^]]]XTXenfYYa`XSTW[^^_bca`dhc]\\ZZ[\\^bb]YWYajicdkklojfb^]^`gllfbejimonozvijosxrihvznjihinntpijpnmnppnmnmleegggd`^^\\a_K@>@@?EHGJNONJEDGIHC9104;?@@>=>@@><?FLPQPTX[][VLFJOPRY^_\\N?:<@IU[ZURRVXUOKMSTLHJJJLSWVUXYPHIOWZZ[^^THCHNTZ[]enrqjc_VNTejdd_VRZ^ZUSRU\\[YXfurf_dorpdST]`hme\\WX[YZcqolsvuvulfhkkfhjheggighmloqhaefkojdegkmlouvsv}|wtxts||zvwvz}xsrvutuufitrgeml^Zdhikormdcbbccchea\\`dffc^_bgijllfjt{{tqrsurh]Y[`iuvpv|uhafkg\\TUY\\VMLUXVW`p|xfX_rvlnxlXY``afiie_ZURU`jkjq~us{zxz}{~}|z~{uz}{{}ytyyknxtoqwyrhmx{|~|uqquy|}|smlnpnisyjn{xqpt{|xuvwpkqzxx{zyz|ſÿ¶¿Ŀ¿ÿÿ~zwvz}~}~|xx|~|ukeglrxyuqqw~upnnpv}{sjhkptvxxyyyzz|~wqnkklnppnjggmv|smjgeeec`\\ZXUTW[bjqz{wrle_WNJHFEDCCCEJRY]`beghhfa][]`fmrvwwtpmjknsz}}~wh[UPPQSVZ`cefhiklmorw}|zxromloqpmlklr{~}~wuv{ijorrrtvvsooookigijmuxvvtqnnmkigeecb`abgpnjgdfjopnmllkjc^\\`ffgda```bdfhhecbabcjmjdb```]VPRY[XVTTWZbllcWPMKKMNNLMNQSQNNUY[][\\\\]ZQLMOOLHGGILNNS]ehi`XTQROJKPQOV\\[XWXY[``XRQRSRQQQNJHIKS]cc_\\RLS^cddab]TQQQQV^aa_]\\^_``_chhf`YXYVU\\bed\\WZebRGDEKPUZ^]XTXbc\\XVSPQVSMKLNRVVRJGMPSRMQY`^\\]]XTWembX[`\\VTVYZ\\]^`aa`cfaZZXY[[]a`[WUVajgbejkkmhbb^\\\\_fkjd`cjjnolo{vkkpswrifszmjhgkpowngkpnmnqppppmlehmnmedgf`[UHA@A?@ILLNQPLIHHGFD@934:???>=>?A@??AHMPOOTY\\\\ZWMGMSUVY[]XI<=DFKV\\XSRRUVSMJNURKHIIJNTUSTUTNGHQWYZ\\^ZNECJPUWZ^goqnf`]SLXijcd_TR\\_YTRRUYWWYeqoe_eotocVY^`isj_Z\\^[\\fxqmsvuvwnimmkginjhhgifimlppgadglmgbegklkoutswz{wstwts}{wxuww}uptxuruujhssmmmf^`hgfiotpcaabcdefa][_efe`[]aehhihdjtyvqprutld^]`eovuv~|odagje\\WWYWOJNXXUYgu|r`]lwrltt_V^cegiigb\\WSS[hmlpy{vty{zyz~}}|~~{z~{uy{~~z{|xtzykmwslmuxqhktxz~}{ytposy||zrnklqqox~tho{ztquyzxwy~umsz}~|{{}ľ¿¿¿}xwy|~||~~|xw|~ztlffkqwyvrrvwrpnou{}vmijmqtvwwxxxxz}|vpmjjklnnmjggks{}tnkheddb_\\ZXUTVY_env~{vrlg`XOJGFDCCCCDIQV[^acfhhgc_\\]_elptuuspnloqu|{l_USSUVY]bggijkmopruw}|zwspmmoqqnnmou~{tsuzmmoprstvvrnnnmjhgjlqvxwvsqqomlifdcabceeipnieegknonmllkjda_bhgfca`abcehihda_`eillhdba``ZVRX^]YWVWY_ipl_TOMMMMNNNNQSTRNNUY[\\Z\\][ULILONJGFGIKKMT_fee[TQPPMJKNPQVXVWXYZ[^]VQQSSRONMJHHINX]a`YUMLW_bba^^YRPQRSY^`_]\\\\\\]_`_chfb]YWWTV`ee`XSXb^OEBFKOTX\\\\WTZcb[VTQMPUQLJLORTSNHFKPQOLQY`^\\\\[XTWel_W[^ZWVXZZY[]`a_^ad_YXWWY[]`^XSPTahc`djjikd``]Z\\^fjjd^bhjnljp}ulkosupifs{mifhmrqx~lglponoqrpnnmkfjorqiing]VNHD?>?CMTRRTRMKJHEDB?;55=C@>==>@CBABDINNLNUYZ[YSKJPVVTSX[RB:@GGMY[URRRRPLIJQVOGHHHJNQRSTRNJGHPVXY^^TJCEKRVVY`hnokb\\ZSO^khcg^SS_cZVTRTTUVYcklc_dmqlb]\\`blukdaaa]^i}rosusuwplokkgkoliihhijkmspgacglidaceiiimsttwxwsprsqs|{ttxvwy~totyuqstnmsutrka^ejfeimttf`acdghd_[[^ehe]Y[`dffggdjrvqmpsupgb`abgpuuzvhaaghd_ZXVRLJQ[XS]myxk_fuvmowkWXbegkljf`ZUU[fppotzvry~xvxy}~z}~{}~{z}ztwy{{xzzwuz~xmnuqikrvphipuw{}zyvqnnrx{zvqnllrwv|znjr{{wruwxww{ypty}~þ¾¾¿¿{wwwx}~{{}~ywy|yumggjpwzyutv~wqonpu{~xnjikortuvwwwxz|{upljijlmmlhffhoy{uolhecc`^[YXVVXY]clt{~zvrlgaYOIGFDCBBCEIPVY]`cfhhgc`^^_ekostsrpnnqtx~oaWVUWY[`dkjlmopqrtwy}}{ytqonprronmpwyrrtynmnqrtvwuqpnmljhhjotwxvurrqomjhfcb`behhknkgefiklmmmmlkjecbehgedcbdeefhhfbabejpmifdba`\\VWZ``][YXX\\fpsk\\SONOPOPQRSTUTQOPVYZZYYYVOIGKOMJGFHJKLNU_cc_XRPOOLJKMOQTUUXYYZ\\\\XSQQRRQNMKFEGJS[\\_^VRLLX`a`_[YUQPRTVZ^^]\\[[[\\^^^bhd_[XVSRYbec[SQX_ZLCAFKOSX[[WV_gcXRROKNSOJIMPRRQMGFKOOMLQY`_\\[YWSXch_YZ\\YXYZZXWWZ^````b^XWVVX[]`^WQMSae_^chhiia^_[XZ^ehgc_bhiligtulmpsuphfq|mgfimusx{jflqpoqsrpnnmkhlrstpnkbWSOLH?<@FSZUTTSPKHHEDEA=;<BGD@>==BGECCFLOMJNUYY[XPIIPSQORZYK>:BIKQXXRQRQMKIGMSPECGGHJNOQRRPJEDHOSW[]ZNGDJNRUVZbjmlg_WVRTbhbei]RVcf^YWUSSUWZaijc_diokc_^admtjhgdcaclspruptvpopjjgmomkkhiijimuofbdgkhb`adffgkqtvxwpklppnryuorxvu{|z}~tpt{tqqrtquwyuj^^ejjhlmtxkabehjje_[]^gidZUZ`cdefdbipsnkpvskdaccbfotv{|pe`bhgb_ZWSPNPX_XTbtxrhdltqlrteZ]cgjlkheb]Z]gpsqquwrr{|uuwy|~}z}~{}~|~{{}ysvwxxwywvwz|{|vmotnhjqsohhorty|ywtollpvywspnmlr|~}tknw{~|xvuuwy~{tvxý¿¿¿ÿ¿~yxwx|}zyz}zwx|{yunhgiovz{wvw}wqnnpu{~xokjkmoqsuvvwwy{~ztoljiikkkjfddgnu|~}{uolhecb`^\\ZYWXYZ]bksy}yuqlgaZQJHFDCCBBDIPUX\\_beghgda__`djnrsrrpnpsy~re\\YXZ[]aelmpprtuvxz|~~|yurpoqssqppt{xrrv{nmnqtsvwsqqonljiilswwwvutsrpmjgecbbdgiklmjfcfijllmmnmlkfedhigddddfghghgeaachormhfdbb^XSWbe`][YZ[anvtiZROOQQQRTVWWVTROQWZZZYWTOJGHKNKHGFHJKLOW_`_\\VQOONKJKMOQRSTX[[[[[UQQQQPNNMHEGIMTY[[YROKMY__`^ZVRQQRUX\\^]\\[[[[\\]^^bfb\\YXUON[de`XNOX^XJBAFLPSX[ZWWckdVOPMILQNHINPPRPJFFJMNLMRZ`_\\ZXUSXcc]YYZYXYZYWVUX]^```a]XVVVX[]`]UOKWca\\]dhhgg_]^YV[^ehfc_bhilgfwtmmpssnhfq|mggkptszuhflqporsqonnmkhnutvuqh\\UTSOIBAGU\\\\XWUSQLIIHGIHFEDFFB=;=BGIFBCJOMKKPUXZ[WNIJQSONT[WH<9AMQSWTPPPMKJHIPSMECEFHJNOPRRLDACHMSW[ZULEELQTTV\\djlic[TSTXac_eh\\RYeg`[YUSSUWZ_ghd`dgmib_`centkihfdcfntqrrotupppiiinommmhggkjnumdbdghf``abbdeiosvupifhlllrvqmrwuswzy|{squyuooputuw{wj]]ekmnnmuznbbgkmle_\\^`hkdYTZ`bceecbiprlgovrg`becbfmqvzwlb`cgfc^YVSPPW_`XZmxwoggmolmqlc_adinnjeccdcgpuvrrtrpuzwtvwx{|{z}~{|||~{{}~xsuwwwvy~}vvz{zzzsmprlfioqmhinqsx{yvsnkkotwvplmnlq|lkv{{wstw{|wwx½þ¿¿{xwx{|yxyz}~{vx}~{yupjginv{}zww|xqnnpv{yqlkkmnprtuvwwyz}~ysoljiijjjiecbeksy||zupkgecba^\\[ZXYY[]bjrx|xurmhc[QKHFDDCBBCHNUX[^adgigeb``_dimqqqpporv}uga\\[\\]_bgnqssuvxy{}~|zvsqprstrrsv~wqrw|mmmrwwvvrqpnmlkjkqwyxwuuwusolhfdccdehjllliedgiklllnmljjhgeghfeeffgihhhfc`afkpplgedca[TT^if`]\\Z\\`isvobWRPQSSTUXXYWVSPPSXZYXXVQLJHHJKJGFFHJKKQZa^\\YTPONMKIJMOQRRUY\\\\\\[YTQQRPMLPMFFJLNTYZXSONJMY___]XSQQQTWZ\\^][ZZ[[[\\\\^`ca\\XVTOS^ec]TLNX\\UIBAFLORWZYVXemdTNOLHLPLIILPPQNHDFJKLLNSZ__\\ZXTQW``\\ZXXWXXXWUSSX^_a``_\\XVVVY[^`[SMK\\d_[^ehghe^_]WV[]efdc`chijdgw}tmlnqqngeozlggntuqyqfgkoonrsommmljgmuuwupk^UYYQHEKVca]YXWWVTQNNMNQPMLKD:69ENMGCBGLMJILSY\\\\\\TKJKQRNOW[SC:<GPQVXRMNLJIIFLSQJEC@DIKMPQQNGA@DINTWZYSIDFMSUUX_gkkgaWPSV[__bifYS^if`]\\WRRTXZ^dhebcejida`chnqkjhfefhptppontupnmjijpqmlmf`emnqtnfdfgd][]`a``cinstohedehikqrlkqusruxy{wppuurllnuyxyzvi^`hknqomu}qdcimnlgcb`biniZT[``bggcbhpskenuod_becbejosuriaadfidZWUUTU\\c_[duwsmhikjjnmfbbbeknlgdcfikmsxurrqnpwyssvvx{}{{}~zz|{}{{}}~}wsuuuuvy}}vu||yzyrnprkegorlhjoprwywtpnkkptuvpgkpnrzjnz|{xrrx}}yxwÿ¾¿ÿ}zyz{|yxwy|}{|~~zvw{zxupjhhmu{}zyx{xpmnpuzyqlkkklnqttuvwxz{~~~}xrnkiiiiigfdcabhmtyzyuqlhecba^][[ZZ[\\^bjqx}{xvrmic[RLIGEDDCBCGNTX[^adghheda``cgloqqpoqtyvkd`]]]`cfmqtuvy{||~}zvtsrsuuutuzwrsx}kkntz|xurqommlkilszyywttwusokheccdfhjlmlkgdfhijllmmljhjjkhfffffffhiihfcbbdhlpmigedb_YS[gkf`^]\\`hptqi[SRRSUVXY\\\\\\XSONPTXYYWWSNJJIJLLJGFFHJKMS[`]XVROMMLJIKMOPQSW\\\\\\[ZXSQRROLLOKCDIMQUXYVOMNMPY^]][WSRSSUY[\\][ZYYYYZ[[\\^a`[UPPQ\\ed]VQKNWZTG@@EKORVYXUYglaSNMIGLNLJKMPPOKGDFJJLLPTZ``^[WSPW^^]ZXVVYZXWTQQZ`abb`^\\WTUWY[]]ZRLM[c]Y\\cfghf__\\SUZ\\cdccbcjkgahy|uolkmoogck|xlegt{wmvoghkomnrrmkkmjhgnvwxspk^X_]SMMT^da^ZZ]^\\YWVUTVZYURK>47CPSMEEKMKHIJOY`daWNJJMQQOS[[O=7DSUSVWQLJJIHHFMTMHEC?CIKMQRPIB@AGLPSWYXSHCGOTUUZbilke^TMRY__]cmfUSckfa__XRRUY\\_cffedeihda`dhlolkighjkqtppmmurnnkiiltwpkjc_enoqsmgffe`ZY[^_^^ciotpicbddeilmmihosqpqvzxsnqtsqlkmu{zyzxl`aimpsqnv}sffknnmkjgefmsjZV]`_dkjecgptjdmrmc`cedcdhmorqf_`dec^WSUXW[cd^_mxsnliihhkljfbacglkgfgikjntxxvsqporvvttuux{}{|~~{yyz~||}|}|xtvuttvx}}vu~~zyxrnppkffmslglqoqvxuqnmmmsvttogioqv|or|}}zqqx}{xw¿ÿÿ}{{{}zwvwz~~~}{yy{~}zvvy~|xupkhhksy|{yy|yqmnpuz~yqlkjjjkmpstuuwxz{|}|xrnkiiiiifeba_`ejpuwvsplhecba_^\\]]]]^_ciqw~}zwurmid\\TMJHFEDCBCGNTWZ]_cfggfeca`bfjmoopoqu{yngc`_^_adkptvy{}}zwvtsuvxxxywruzjjow}}yuqonlkjkjmuyzyursvvtoifcabfhklmmkhecfiijlmmmkgejmpledehhghikkhd``dhlnnjhfeca^XWbmjda^]_fourkcYUVWXYY[]^]]YPKKQWYYXVVPJGIJLNLHFFGHIMPU\\^ZURPMLKJIILMPPQSY__\\ZXTQQRQNLKMHACJQTVWWSMLOPSX\\\\[XURSUVX\\]\\\\ZYXWWWXZZ[[]_[QKKSbhdXRNIMVXQE??DJNQUXWS[jl_QNKEFLLLLLMNNLGDCEHIKMRWZ``^[WRPY^^][XWX[[YVSOP[bcbb`^[XSTY[[[[XPKPZ_ZW[aeghe_^XQUYZabacbcjmf_gyztokikoofagwvlehyujvlhhkmkmqpmjjkighqwxwsqlc`b]VRS\\fea_]]cea^]]]^ab^WO@58COTOHEJPOIHNRX_fdXJHJLNPRRV][M:8KXVTVSMKJIGGHGNRKFEC@DJLNRTNG@>CJORTVXVPFAIPTTV[cjkicZQLR[`]\\fncSTdieaad]VVXZ]addfgggiheaadhkomkgefhkutpnklqpnmjhinxxpig`_hnprsmhgfb]YXZ^]]\\ahqskd_`bbchkljhhnsqnovxtqoqqpomkltzyyyxmaejosurowviinpoopmjjlpsk^[_`bkomgcfptkfkokb`decbcgknrnc]`dd^XSNS[]agc]gvulijihffikhebbejmgbfmpnlpz}yvtpoqtuttsuvw}{z|~}zxwy}}|{|{xvvvsswy}~vu|ywqnpolgfltlensopvwsmklnpvxsrnggpv{}tw~|ooy~~~xw¿þÿÿ}|~~{wttv{|}{{xwy}zvvy|}wuqlhgipw||{{}zqmnquz~zrmkihhgimqrstuwxxz|{wrnkiiiiheca`_^chnsvtqplhecba`_^`aaa`adipv}|zwurnje_VPLJHFECCCGMSVY\\]aeghgfec`adgkmnnnqx|tlhea___bhouy|}{xwvvwy{}~xsw}ijpz~yurqoljijjnw|{xsqswwsmhdb`dhjlmnmjgdcfhiikmmkgegmrrjbbehhhhikifd`afjmnlhffda^\\[\\fniba^_birupe[WW[]^]\\]_aa]VMJKU[[ZXVTNIHKMOOMJHHHHIOTY^]YTQPMKKJIKMMOOPU\\ca]YVTRRSQNLKKE?DOUWXWTPKKPUVXZYWUSSUXZ\\]]\\\\ZXWWWVWXYYZ\\^YOILXfi`UPLKNTXPD>?DJMPUWVS]ll]PMLDDKLLLMMMLJEBCEGIKPTWZ``][VPP[__][XY[]^[WRNS]bcaaa`[VPT][[WZWOMPW[XW\\acfgc`\\UQUYZ^aabbelme^exzsmiikoof`et}vjem}pht~khikkjmpokiiiggksvwvurnged^XW\\fjdbbbbgjhedeegih^RE:;EPVUOKJLONKOUY_feYIEKPQRRTVZ]XL<>NVUVUOJJJIIGHINNGFECBFKLPUTLD>=DLPQSUVULCCIPSSV]diie_VNLR[_Y\\ko_PUeie`dmf[Z\\\\_cddfgiijjeccdfjmmidceehz|rpliknomjhhhozxnge`bjoprsojifb[WX[^][\\bksne`\\]^_`fiiiihnqnlotvqooollnnlksyyvutpiilpssrsw}wlkorpqrqonnqunb^`chpqnicgpumgjniaaddbabeimoh_]`b_XSRQU[_ceaanwogghgeefhjhdbdhkibckpqons{|xvsqqsuvtssuvyz{~|ywwz~}}|{{zwwvrtwz~}vv~|ywqnpolifktodlurqwxrkhlqu|{sqnhgoyzy~rpz}}~{yÿ¿½¾~}|xtsuy~~{zzyxuv|~{wwy|~xurmhfgmtz|}}~{plnptz~zsmigggfgjmpssuvwxz{zvrnkjiiihdb`_^^aejptsqolheccba``abdedcchov}~|zwurnjf`WQMKHFFDCCFMSVY[]aehiiigdabcfiklmnqz~wplgc_^]`elty}}zxwvwy|~xuxilq{}wtrqoljikloy}|wspsvwrlgca`ehkmnnmkgedegghiljfddlswoa^adefghikifbadhjkljhfec`\\\\]bkmg`^^aemuumcYW[`a````bc`YTMHLX\\[[XURLHHLPQONJJIHHKQX\\_\\XSQPNLKJIKMMNNNV^eb\\WUSRSSPMLKJC?ERYYYXSMJLRYYYYWUTSTX[]]]]\\\\ZXWVVVVVXXZ[[VMKR_ifZQNMMOVYRE@@EJNQUWVT_lj\\RNJDCJKLMMLLKIFDEGHINSVXX``^]VOR]__]YY[]__[VNOV_bbaacbZQNYa]XUYVOMOSWVV\\`beec`[SRVYZ\\_acafmmc]hy~xqkhgkoog`cr{vjgu{ifs|ljjlkhkpligggefmvxwvvtpjkg`Z^fjjgeegijkkjjjkkkcUH@AIRWVSPNNMLMRX\\`eh]JCKSWVTTVZ_]VKBEOTUXTMLKKKKGEIOKEHKEEILNRWUI@;@JOPPRSSRH@DMPPSX`gie_YRKJR[]W^nnZNXhkc`gqk_]^_adffghikmkeccdghkmidcddj~wrqliinnlhdfip~|oebaelppsupjhe`[VW[][Y]gppf_\\[[[\\_fgegijmojhnssonmlijmmmkrwvurpomlmprrruy|vmlprqsttqqqtxpc`chmqrojfhqvnhklgddedb``chnmc]]__\\UQRTY^`ccbepsjeghfdefhigeehiheeioppqsuxywutsrtwvtttuxz}y|~|yyy{~~}}{{yxxvrsw{}|xuz}{wqnpomjhjsuhjvwtwyskflty~sonjiq|}z~wsz}|}|ƿ¾¾ÿ¾ý~~|xuttv{~{xxwwttyzyz|~xuqmhefkry}~{nklnrx~{tmigeefgjmnprsuvwyzzvrnkjiiihd`^]\\]_chnrqpokhfddcbabbcegffeipu{~|zwurnjgbYROLJGFEDCFLSWYZ]adgiiigecbdfhiklorzytpjf_][]cjr|}{xwwwz}yvykmrz|xtrqokiilmqy}{vrpruupkfb`afjlmnmmjgedeeegikhdbeovuh[\\`bbdfghigebbeijjjihfeb`\\]ailkd^\\^bhqvsi_ZZadcbbbbcc^TPNJP[^\\ZWSQMIJOTVROLLKJKNT[_^\\WTRPNLKJKMMMLLNX`fbZUSQRRQOLLLHB@GTZYXUQLLNTYXXXVTTUW\\]^^]\\\\\\ZWUVVWVVWWY[[UMOYdiaVNKLLOWZRF@AFLPRUXWV`li]TOKECHKLMMLKKIGGGHJKPUVWW_`_[SQV]`^[W[]bb_XRMQZ`bcccecWNR`b]WUXVOMPSUTU[`bege_YSRVYX[\\`cbfmkb_iy~xpifekqof_arztln{ygdrzkjjliehkheceecfozywuvvronjb^gnmjihiklmlkkkllniWHCFLTXXTRRONMMSZ\\bki^ODESZZYUUY^`]WOILRUXYRMOONNLIJKMJEIMHGJLNRXSG=<ISQPQQQPLE@EKNOS[cggaZTNIJRZ[X`okWN[gga`jrmd_^_aeghijkmmkfcccfmmiecbbcnsrqlhhllidafhp}oc_`enppuwpjhd`[VVZ[YY`joi`\\Z[Z[\\_ggegkmmmgflqpmmkhghlnmlnqstsppmlnpplov{|umkprsvwwuutxzqechlqrrolijswoikkhffhfc`^`hoka[\\^\\YTQTY\\_cddafolfeggfeefgfffhhgeehlnoorvwwwusutsuxwuutux|{y}~zxxy{~}}|{{zyzwrswz|{xtv{}{xropomkijqyqiu|xxytlflwz~unnljr~z}v{|{ž¿¿¿~~}}}}yutsuy~~{ywwvvtsw~{yz{|~~}}~yuqmgcdipx||pklnqw~{tnhedbdgjlmopqttuwxwurnkiiihgc_]\\[\\]bgmqppnkhfddddddefghiihkpv|~}{yvtrnjgc[TPNKHGEDCELSVY[\\_cfhiihecbdefhjkos|{wsmia]YZ_fq{|zxxwx{~yw{jmr{|wsrrokiilmqz}{wrpqttojea`ahllmmmligeddcehkkgbbhpuobZ\\abadfgghec`aeijjhiifcb`^`ekkga]]_dltvpe][_cdddcbbba[RKNMT^`]YURPNKOSYZUPNNMLMQW_`_\\WTRPNLKKLMNMKKNZbfaXTSRRRPMKLLFAAHW\\YVQMLLPV[ZXVTRRU[^^_^\\\\\\^[XVVWWVVUVX[[UMP]ij_SLJLMPWZRFABGMQSVYXWali^VRMEDHLMNMMLKKKIIJLOTWVUV_eaWPSZ^`][Y]cge_WPOU\\`abcegaSOZfb\\VUYUOMPSTTU[_`eih`WRRTWVXZ_cdhljc`gxyphfeltqf]`rztosvgco}zlkllfbdfecabbchrzxvvxwvtoidemsokhjmnnoomlkkjkcTLNSVZZWUTTTTPT]_dlmaPIMX^\\\\[XW\\a_\\XUSSWX[[RQUSQQNJIKMKGNRKIKMOUXRF?JYXQQSPOOJDCHLNPU]efc]VPIFJSXYZcngUS]eb^^jqmga``aeghilmmmkgcbbfuodba`_bq|rrrlhhjjhb`egr~oc^`fmopuvpkhfaZVW[[YXalm`\\[XYXZZaiggimoolefkpomkifefkoomlnqrsrpnmprpgly}{umlpstxxxxwvyzqgfkpsrqommmswojlligimjd`^bjoi`[\\][XTUZ[\\`efdcgkhffgggeefgedfjjfefilnoorvxwurrvttwywtutux|zz~}{xxz{~~{{||zz{{wrswz{{xtsw||yspqpnljjo{ymt}{yzvnfmw{~wnmmkrz}{}{z}Ž¾¾¾Ŀ}|{{}~{wtsuy|~|yxwvvutsw~~}}~~zyyz|~}|{}~yuqmgbbfnv{~~qkkmqw~{uniebacgijlnnpsstvwwuqnljiihgb_\\\\[[\\agmponmkigeeeeeefghijjjlpv{~}|zyvtqnjhd\\URNLIHFDCEKRVXZ\\_cfhijhfdcdeggikos||xtnkc^ZX[cnz~|zxxwy|yw{jmr{{vsrrokiilmqz|zwrpqssojd``chllmnmjhgeedcdgjkfacirtk`Z]`aadfgghec``djihhiifca`^bjmid`\\]`govunc]]beedddccb`ZQLPQW_a\\XSQPNQX\\_]VQPPOOPTZ^`_[WURQNLKKLMNKJJNZbf`YTRRRRPMKMLEAAJW]ZUNKLMPW[ZXUSQRW^a__^\\[\\^\\XVVWWVVUUV[]WLO_lj^QKKMORXYRFACHPSUWYYYbli_YUNFDHMMNMMMKLMLJKNQVYVTV_d_UQU\\`a][Y^fjg^WLPY`aabagh_QP_ga\\UUYUNMPSTSV[^_fjk`VRRSUUVY_cehjic`gxypgeelusf[`rzspvshdnyxnmlldadgda```ahsywvwxwvupgfjqurkimoppppolkjje[QNPSW[[WUTUXYY]bagni[MIQ]`^]\\YY^b`]ZUPT[Y\\\\SSXVOQRLJJLLIOTOLMOQVYQDH[bXRUTOONIDEJLNPV`ee`ZTPIEJSXX[dneTT^da]]jrmic_`bgiijmoonlicbbhtmb``_]aq}prrmihhiga_cgs}mb][blnpsupkgg`XUWZ[YVakl`YYXXXXZ_gggjnqpjddinomkhfdfkppmlnoqttrnmqrofly}{tmlqstwwwxwxzypgfkqsrqpooosvplmljknnkf_]dlnh^Z[\\[WVZ][Z`dgfefhhgfghgefggfcfijgegjmoonrwyxtqsvusxzusttuw}zy}|zxyz|~z{||zz||xrsxz||xtqtz{yuqqqnmmjlz|ps}|zywogmx{|ynmolq~y|~{z}ûþ}{zz||wusswz~zxwwvusrqu{~{{|}}~}yxxy{~}|z|~yvqle``dluz}tkjlpw}{uojeb`behjkmnqsstuvvtpmkjhhgfa^\\[ZZ\\`gmonmljigfeeeeefhhijkjmpuz}~|{zxwtqnjgd^WROLJHFDBDJPUWZ\\^adghihgecdeghikns{|ztple_[WYalz~~{yxxwy|~yw{uuuuutuuuuuvvvwwwwxxxxxxxxxxxxxyzz{|}}~~}}}}|{zzxxwwvwwwwy|~zxxwwwwwxxyyxxwxxzzzzzyyxxxyyyyyxvutsrrrrrssssttsstuvwwwxxyyyyxwussstuuuuuuuuuuuttstttssttuuuutttuttsqruyywofbdhloonoqqststuutnb[RVOFBQbiihefijlmlicVNO`moqpooqqpnlknqrqpnmkie^\\^cgkmorrrqrrrrqrsuvx{zurnjfa`bdgmqpib^\\^adfgfgfdhqljlijomrvxz|yrllmmkhhimqqqqswz{zxvspmmorsusokbYWWYYUQRVZ[Y\\Y[cmtwxxvrjmwxwvutqnmnpqqqpppoprtvz}zm]X`jidceknokd`epx|}{yvrrqrrqqqppoprssttuvwwuqnnnmzqpprtwvuuuuvutuvuttsrrsssrrrqqrsstuuutssrrtuvvvwwwwvvwxwwvuuuttuuwvvvwwxxy{{||~}~~{||f`fkptvwxvrrsvwvutuuutuvwwvvx{}yxvvyyzz|~~}}|~~{zxvutssstuuvvvvusrrrtvxyxxxxxxxyyxwvvwxyz|}}||zvsqrtrssux|~~~}}}~~}}}}|zywwyzzzyyzzz{{zzzyyxwwwwwxy{||{{zyxxxwwwwxyyyyywuutsqqrttuvutssssuwyz{|{xuuy}~|{~~~~ue]jpr|}rn{|ytz}~~xtv{~~~{{|}~}|}~~~}||~~~}|}}~~~}{|{|~~~~~}vvvuuuuuuuvvvwwwxxxxxxyyxxwwxxxxyyz{{||}}}}|{{zzyxwwwwvvvy|~~zxxwwwwxxyyyxxxxxyyzzyyxxxxyyyyxwvutrqqppqqrrrrsrrstuvvwwxyyzyywusrrstuuuutttttttsstttttuuuttttstttsrrsuxwmb[[`inppopqqssstustlYSSSQGEUejjjhhikmmjd^UON[hnppomnhgkkkorsrqpnlieca_`acdgmrtsssrrsstuvyzwspnkidaacflomga_`cfgghgltrmlhadkyyxxxz}|zvsrolkklorrrrtwzzyxwtpnnpstutrog\\WVWWUSTXZZY\\Z^ipuxyywkisxyxxyxrlkloqrrqpooprsuwxyyvqg[VW`iib]ainoqtoecmx}~}|{xtrpqqqppppppqrrsstvwwuqnmoqrqqstuuuuuuvvuvwvuutsstttssrrrssttuuutttssuvwwwwwwwvvwxwwvvvvuuuvwwwwwwxyz{||}}~~}~~jdimostuwvtuwxyyxwxwwvwxyxxxx|}{zyyz{{|}~~~}}|~~{zxvuttsttuuvvvvutsssuwyzyyzyyxxyzzyxxyz{{}~~}}{wtrststsvx|~~~~~~}}}|{ywwxzzyyz{{{{zzzzzyxwwwwwxy{}||{zyxxwvvvvwyzywwwvvrqopqstuvvuutttuwy{|}|zxy|~}|~}~yh^jpt|~roz~u~~}~{~t{~~~}}}~~}|}}}}|{~}|~~~~}}}~~|{{{~~~~~~~~~~~vvwwvvvvvvvwwwxxxxxyyyzzyyxwwwwxxxyzzz{{{{{{{zzyxxxwwwvuuwz}~}zxxwwvvxxyyxyxxyyyyzzyyxxwxyyxyxwwvtrqppqqqqqqqqqrssttuvwwxyyyyxvtrqqrsttttsssssrrrstssttuttssssssssrrrsslf_]^ckpqqpqrrrsttusslVOPPRLN[fijjjkkmome[URQOT^koonkhbdlmnpsssqonkhhlmfabcbcfnsuusstttuwwywroonnnjdaadjlidbcfknnmkl}|f\\Xcs{wwwy{{{zwtonnnopssttuwzzxxxtqpprtuvusunbZUQOPUX[[YY][fqswxyxtflz{zx{|sjhlprtttsrqqrstuutsoiaZZ\\bjkc\\^flnqzzpgjry|~}|xrsqqpppooppppqqqrsuwwspnmoz~srrssttttuvwwwxyxwvuutuvutssssttuuuuuuuuuuwwwxxwvvvvuvwxxwwwwvvvvwwwwxxxxzz{|}}}}}}~~}pjmoorstvvvxzzzzzz{zzxyz{zzz{}~}||||||}~~~}}}}|~}|zxvuuutttuuvvwwxxwvuuvxyzzzyxxyzzzzz{|}}~~~~|xvrststtw{~~~}}}|{ywwxyyyyz{{{zzz{{zzxxxxwwxz|~}}|zzyxwuuutuwyxwx{ppoqqrstvwwwvvvwy{}}~~~}}~~~~~lakrx}|t{xz~~~~ly~~~}}~|||}~~zy~~}~~}}}~~~~~}}{{}z|~~~~~}~~~~vvvwwvvvvvvvwwxyyyyzzzzzzyyxwwwxxxxyyyyyyyyyzzyxxxxwwwvuuvy{||zxxwxwwxyyyyzzzz{{{{{{yxwwxyxxxxxxwvvvutsssrqqpoqrrrsttuuwwxxxxxvusqqqrsssrrrrqqqqqrsssttttssrrsssssrrqrrjf__aejoqqpqqqqrttuurlXNNOQRYbfhhklmmopk`SNPRTQTemonjfjppppqstspmkigksupjhggeefmtussuuuuwxyrmlnpqrpib_afihffilruutprkbalrqvqsvxxyyz{xqkmoooorsutuwyyxxxusrrstutpmmkd`VNIKU\\^[WZ]^mvvwwxwvsw{zzy|xmhnqtvwvutsstuvuutsoke^\\_floia_gmqsyyyvnpx{|zxxzzywtppppoopoonoppqrtuuplnor}{ttsrqqrttvwyyyzzyxwvvvvwvutttuuuvvvuuvwxxxxxxxyxvuuuvwyyzyyyxvvwvvvwwxxyxyxyy{{{{{{{|}|yropqqrtuvvwxy{{{{{{|{z{||||}}~}}}}}}~~~~}}}}}~~|zxwvuuuuuuuuvxz|||ywutuwwxxxwxyzzyz|~~{xsstssuz}}|{yxwxxyyyzzzzzzz{{{zyxxxxwxz}~~}|{zxwussstvxxz~yrqrrrrtvyyyyxyz{}~~~remt{~}|t|~|~}}~py~~~~}}}}|}}{~~~~}}~~~~~}}}|{|~}}~~~~~~vvvvwvvvvvvvvwxyyyz{{{{{zzyxxwwxxxxxxxxxxxxxxyxxxxwwwvvuuuxyzzyyxxyyyyyyyzz{||}||}|{zxwvwxxwwxxyxxxxwvuutsqppoqqrrstuvvvwxxwwvvtrqpprrqqqqppppopprrrrstssrrqrrsrrrrrqrqke_`cgkmoonooooprtuvrjYMNPTYafhjknoppppgZPLOS]WO[iomkinrqqprssromlmnqvwuqihhhfdioqrsuvvvwxytmlorttwoc]^cghijmptw{zvzyxqlnlknoswyxxyy{wokmponnptuuvvxyxxxvttttsrlea]_bfaUHFU^_ZZ^_cowwwwwwyyxwy{z{ulosvxyxwvvvwwxxwvtqojc`ahosohdhmruxz{ztqwz{uonsz~{ysqqqnoonlkmnnppqrolhjns|zssrpooqsuwyzzzzzzyxxwvwwwvvuuuuvvvvvvwyzzzzyyyzywvuvwxz{|{{zxwvvvvvwxyyzzzxwxyyyyyyyxywtqprtttuwxyyyy{{{{{{|{{|}}}~~~~~~~~~~~~~}}~}{ywvvuuvvvvuuvx{~~}zvtstuvvwxxyyxwz~~{vsrrpu~~|{yxxxyyzzzzzzzz{{{{{yyxxxwwy{~~}{{yvtrrrstvw{tssrsstw{|{|{|}}~~~~~ynov~|{~~}~|||~yz}}~~~}}~}~~~||}~~}}}~~~~~~~~}|}}}~~~~~~~vvvvvvvvvvvvvvwxyz{||||{{zzyxwxxxxxxwwwwwwwwxxwwwwwwvvvuuuwxyyxyyyz{{{yyxyz|}~~~~|zxwwvwwwwxyxxxwxxxwvtsrpooqqrtwwwwxyyxwwvutsrqpqqqqqppppoooppqqqqqrrrqqqrrsrsrrrrrqjd`cfikllllllmnpqsuvreTMPS\\afikmoqqqqql_TONOSdbTSeomllprrqpqrqpoopsuvxywsjfjnniehjqsvwvvwxywrqrtuvyre]\\agjkmpsvw{zuvwpotqmkjkmqvyzyyyz{womoqoooqtuvvvwxyyxwuuuutph`\\XW]gh\\KCQ]`XZ`ahqxyxwwwxxxwy{{|xmquxyzzyyyyyyzzxwuttphccipsqlhimquxzzzxswx{wroquz{~ytrqnmkjhikmnppookjfhnqwvvqqpnnnpsuxz{zzzzzyyyxwxxyxwvvvvwwwwwwy{|{{{zyyzyxvuvwx{||||zywwwvvvwwxz{||zxxyyyxwxxwvtrprtvvwwyz{{{{{{{zzzzz{{}}}~~~~~~~~~~~}|~|{yxwvuuvvvvvuuuwz}}}}|xutstuvvwxxwww{~ztplmw}|zyyyyzzzzzzzz{{{{|{zzyxxwwxz|}~}|{zywtrrrqrsuzvssrsstx}~}}}~~~~~~~~}urw~~}}{{|~}}}{|}~~}}~~~|}~~wpx|~~}}}~~}~~~~~~~~~~~~~}~~vvvwwwwvvvvvvvwwxyz{|}||{{zyxwxxxwwwwwwwwwwwwwwvvvvvvvuuvvvvwxxxyz{{|{zyxxz|}~~}zxxwwwwwxxxwwwwwwvutsqpoppqruxxxx||zwuuttssrpppqqqqpppppooopqrrrqqqqqppqrrrsrrrsrpifcfikkkjjihjkmoprturaQQV\\cgilnqssrqpohYPNOPTfj`R_mllmqqqpqqrnigmsuvwyyxqgdjqroifhosvwvvwxxwuttuvxyrg^[`hkmpuvxxwuqmpnmlmljiijmrx|{yxyzzvrrrqppqsuvvwwxxxxxwutuvutmd^YV[cd\\NFN\\_TT_emsxyxwvwxxxxy{{yyywttwz{zzz{zzzzzzxtstsqkeeiorpmlkmruxz{{yuuuyzyuqpqw|zvspmkihhikmopppokifinqsrrrqonnnpsuyzzzzzzzyyyyxxxyzyxxxxyxxxwxy{|{{zyyyzyywvvwxz{{{|zyxxxwwvvvwx{}~|zyyxxwvwwvusqqsuwxyyz{||||{zyyxyxyzz||}~~~~~}}}}}}}|{{zzxxwvuvvuuuuuuttuxyz|{yvuttuuuvwwwxz~}ysjp|~}{zzzzzzzzz{zz{zz{{{zzzyyxxxyz{|{{{zzxussrqqqrv|xtssstux~~}}~~~~~~~~}~~wux}}zwy|ryz|~}||}~~}||}~~~~~~~~~xnv|~}}|}~~~~~~~~}}}}~~~~~vvvwwwwwvvvvvvvwxyz{|}}|{{zzyxxxxwvvvvvvvvvwwwwvvvvvvuuuuvvvwwxyz{||}|zyxwxy{}}}zyxwwwwwwwwwvvuutsrqponpppqsuvwwzywtssssrqqpppqqqpppopqqqppqsssrqpppppqqqqrrqqrrnidfjlklkkgcacglnoqsus`RYbeilnprtusrqpmbTNMOORbmjWYjkklppppqqrokgntuvvxzxncbiqsrnkkosvwwwwwvuutuuuxxqg`]bimquyzxuponkimonmkjhhlrx{|zxxxyxvuvusrqsuvwwwxxxvvvtrqrrsvria[X[_`\\TNM\\aOP^lstwxwwwwxxxxwwwuuuwzxxyz{{zz{{{zzzywsommnkffjoronnlnrswyz{zxvtuyzurlinqsrqmkkiiiijlnppqplkgkprrpqrrqooopruxzzzyzyyyyyyxxxyzzyxxxyyyxwxyz{zzzyxyyyzywwvvxxyyzyyxyyxxwwvuvw{}}|zyxwwwxxwtrqrtwyzz{{|}}}}|zyxxxwxyz{{}{||~~~}}}}|||{{{{|||{{{zyxxwvvwwwwvvutsqqtuwyyyxvvvvvuuvwy|~}~{sz~|{zzzzzzz{|{{{zzz{{{zzzzzyyyyzzzzzzzywutsrqporttspwyttsstuw|~}}}~~~~~~~~~~}}}~~ywy|}|}|y~z|}~~}}}}~~~~~~~|~~~~zz}~}}}~~~~}}|zz|~~~}vvvwwwwwwvvuvvvvwxyz{||||{{zyxxxxwvvvvvvvvvwxwwvuuuuuuuuuuuvwwxyzz{|||zyxwwxyz|~~|zyxwvwvvvwwwvuttrqponnopooprstuwtsqrsrrqqpqqqqpqppooopqqqqrtttsrpoooppqrqrrrrqqnieglmkkll^TRVclmnpstq`Ycklnqrssssrrqpk_QLLNNLZgldZgjjloppopqrstrsuuuuutpibahoqqqplosuwxxxxvtssuvsrokgb`ahrxz}zvrnkmoqsrrrrrqrvwz|{yxwxxwwwxwtssuvwwwxxwtsrpnljiimqokfa]]aa`^YP\\aRP\\lsuwwwwwuvvwvvutrruvyyyzzzzzz{{zzzyxvrnkkljhgkmrqqqoprsuwx{{yvtprvuromnoppnjjkiiiiikmoqrrplimrtsnpqtsrppqsuxxxxxyyyyyyzyyyxyyxyyyzzzyxyz{zzz{zxxyy{zxwwtstuyywxyzzyyyxwuuuy{}|zxxxwxyxwtrrsuwy{{||}~}}}|zyyxyxwxyz{{zz{|{{zzzzzzyyyz{{{{{{{zzyxwwwxxwwvvvusqqrtuwyyxwvvvuttuwz}~|{|}~~~}|{z{zzzz{|||{{zzzz{{{{{zzzzzzyyxyyyyywvxvrolowxutuwutttttuyz|}}}~~~~~~~}}}}}}}}}}~~}}}~~}zyz{{{||~~~~~~}}}~~~~~~|}}~~|~}}}~~~~~~~~~~|zy{~~~vvvwwwwwwvvvvvvvvwxyz{|||{{zyxxxxwvvvvvvvvvwxxxwvuutttttuuuvvwwxyzz{{{zyxwwwwxz|~~}{yxwwwvvvwxxxwvvtssrpppomkkmprrspppqrrrqqqrrqpppooooopqqqrstuutrpoooopqrqrrrrrqmjgkomjjllWHGOakklnqrmbcmpqsuuutsrrrqpi\\PKJMNJTaiibfgiknnoppqstutuutpkjihecchlnoppnortwyyxywtrquuqlhggfcbjw||~xpnoqsx{zwvyz||~~}|zyxxywvwxyyvuuvwwwwwvsomjgda__bhjkkmkheghhhf\\[``UWgouvuuutpnnptuurooruwxxyyyyyzzzyyxwvtrokjkkjjknsttsqqqrruvz{{zvokoqrstttsrplkkjiijjjkmqrrrmkotyxrqsuvtrqqrtvvvwwxxxyyyzzz{wwvwyyyzzzyyyzzyyy{{xyzyyxvuwrorqwwwxz{zyyyywuutvx|{zxxywxyxvtsstuxz{{||}~}}||z{{zzyxyyzyywwwwwwwwwwwwvvxzzz{{{|||{zxwwwxxxxwxwvtsrtuvwxyyxwvvuuuvx{~}zvvvwyz|~~~~}||{{|{{zz{|}}}|{{{{||{|{{{{{{zyyxwxyyyywurqnknx{wvvuuutttvxz}}}~~~}}|||{|||||{{||}~}}}}}|{{{{zz~|}|}~~~~~~}}~~~}{||~}~~~}}~~~~~~}{z}~}}~~~~}}}~vvvwwwwwwvvvvvuuuvwxyz{{{{{zyxxxwwwvvvvvvvvwxxxwwvuuttttuuuvvwwwxyzzzzyyxwvvvvxz|~~~}|zyxxxwwwxxyzyyyyyyvtsrplggjnpppoopqrqqqqrrrqpoonnonnnopqqrtuutspnnnnoqrqrrrrrqnmmpoiggjiRDFRckiikopkgksssuwwuutrrrqogZOLLMPTZchihgghkmmnooprrstvutma]bfedfhiilmnnpqtvxyxyvsqpstnkiiklkhnvyvvrqtwvx}~|yy}~|yxxxwvvwyxxwvwwxyxwrmie`[[[\\`ekmmnqqpnnnnnmi^`l\\Uekqssutqjhlqqppnkmqstttvwwxxxxxxvtsrrrqnmmmllnotvvussrrqstxyz{yunlnqsuuvutspmlkjjjjjjknoppnmptwwustuvutrqrsuuuwwxxxyyyyz{{wvuuxxyyyyyyyxwvvwyzyz{ywtrrrrrspsvxyz{zyyyxwuuuuvzyyxyzwxxwvtstuvy{{||}~~}||{yz{}{{~xxyywttssrstuuuuuvvxzz{{{{{||{zxwwwxxxxwxwwwvvvwwxxyyxwvvvuuvxz{yvuvwwxy|~~~}}}|||||}||{{{|}~~~}|{{{z{{{{{{zyxwwwxxwtsrpnkltywwuuvwssuvy}}}}~~~~}}}||||||}||||||}~}}}}}|||}|{{}~|u~|~~~~{xx}~~~~|}}ws~||~~~~~}}}~}}~}|{{|~}}}|}~vvvwwwwwwvvvvuuuuuvwxyz{{{{zyxxwwwwvvvvvuuvvwxxwwvvvuuuuuuvvvwwwwxyyyyyyxwvuuvxyz{}}}}}|{zyyyyyxxyzzzzzzzzxvusqniiknppoppqrqqqqqqrqqponmmmmmmnppqqsuvtspnlmnnpqqqqrrrqppqsofcehhQGN[fkhginolmpssrstvvttrqqqneXONOOTbehijkjjjkmmnooopqstuvuqd[_dfhjhdfiilopqsuvxxwurpprrnlklpqrnhnkafou{zsx{y}~|yxxwvvvwxxxxwxyzzyungb]WV[`chostttsrqqqqqqopdercYhlprsssplkprppnljnrssrstuuvutttuusrpqsspoonmmpqsstuttrrqqsvxzzzyuomoqtuuvvurpnlkkkkjjiklmnmnprsttttuuttsrrstuuwwwwwwwxyz{zwuutwwwxxyz{ywvuvvx{{}|xtpoomswvvtwyz{{{zzyxwvuvvwxyxxyzvwwvvttuvxz|||}~~~}|{zxxy~wwxxwtttuttuvvuuuuvxzz{{zzzzzzzyxwwwwwwwwwwxxxxxxxxwwwvvuvvvwxxxvvwyzz||}~}|}~~~~}|||||}}}}}|{{{|}}{z{{z{{{{||{{zxwwwwwztnmsz{xvwvvwytrtuy}}}}}}}}}}}|||||}}}}||||}~~}}}~}}~}|{{~{vux~uv|}|}~|y}~~~~~~~}~yl{~~~~~~~~~~~}}}~~~|{zz{~~~}}|}~~~~vvvwwwwwwvvvvuuuuuuvwxyyzzzzyxwwwwwvvvvvuuvvwwwwvvvvuuuvvvvvvwwwwwxxxxxxxxvvvvxyyyz{{||{{zzz{{{zyyyyyzzyxwvvusqnlklnoooopqqqqqqqqqqppnllmmmmlmooqrsuvusqnllmnpqpqqrrrrqrrsoicdghTNY]dihhinpoprrqqrsuutsqqqpmdWPPQQWejjjlmlllmmmmopnoorsuvvunc`chmpohikilopqstuvvutrppqqpnmosttndk\\Rdquwslt}|xy}z|}xwwwvvvwwwyyyz{{{ysja[XX^dhkpuxyyxvtsrqqqqqqllskemnp}tpoqpttspqpkinqrrrrsstsrrrrstsrrrttrppnmmpqpnorssrqppqsvxyyztonnprtuvvvtrpnllllkkjkllnmmopqstuuttttttttuvwxxxwvvvxyz{zwuuuvvvwwxz|{ywuvvw{}zrmlmnvzz|yz{{{{{{{ywvvuvwyxxxyyzvvvuutuvwy{||}}~~~}|ywuuu~wwvwwuvvyxxwwvvvuuvxyzzzyyxxxxxyyxxwwwwwwwwxwwwwwwvuuttttuvwxxwvwxy{||}~~~}|z|}~|wwwz|{|}}}~|zz{|||}}}}||{{{{}~|{zz{z{|{{||||{zyxwwx~rotvuvwvvvvwyvstv|}}||}}}}}|{{||}}}}}|||}~~~~~~~z}wov~{wz}|z{yz{}~~~~~}~~~}~~}~~{}~~}~~~~}~~~~~~}|{zz{~~}}}~~~~~~~uvvvwwwwwvvvvuuuuuuuuvwxxyzyxxwwwwvvuuuuvvvvwvvvvvvvuuuuvvvvvwvwvwwxxwwwxyxwwwxxxxxyyz{{zz{{|}}|zyyyyzzyvuuutrqnnnnoooooppqqqpppqqppnlklllllllnoprsuwvtqnlllmopqqrrrssrrrpmhcdhhVV[]ehhhimpqstqooprtsrrpqppmdXRSSSZejjkmmkjlnqppqqnmnrstuuurkddjoturrplmnpqrssuusrqqopqqpoqtuuoeeQYlsvupmlptty}}|{wrryzzwvvvvvvwwwyz{{{{zxrg]XYbjlnruxxyzzxwvurrprrrqqrqppqr~qilqtuttrqswpusqqqrrrrqqpqqrssrrsttsqpommoppnoqrrqpppqrtvwxyolnmmotuvvvvtspnmmmllkmmmommnoqstttsstuuuuuvwxxxxvvuuwxzyxwvvvuvvvvwz||{xwvvxz}{rnkosy{|||}}{{{|}|zwvutvxzxyyzzyvuuutuuwyz{||}}}~~}|vtrruy}vvuvxvxxz{zyxwvvuuvwxyyyxxwwwwwwxxxwwwwwwwwwvvvuutsrqpppqsuwyxwwxz{|}}~}~}vsrtwwyzzzz{~{xxzz||}}}}|{zzz{|~}|zzyyzz{||{{||||{zywwy}vqvxwuvvvwwwxxusw|}|||}}}}|{{{|}}~~||}~~~~~~~pw~{wq{{yz{~~~~}}{~~~~}z}~|~z{~}}}~~~~~~~}||||}~~~}~uuuvvvwwwvvvvvuuuuuuuuvvwxxxxwwwwvvuuuvvvvwwvvuuuvvuuuuuvvvvvvvvvwwwwwwxyzyyxxxxxxwxxxyyyyz{{}~}{zyyyzzyvtsssrpoonnnnnnoppqqqpppqqpomkjjkkkjjkmmoqsvwvtqnkklmopqrrrrsssrrpmgcejj^[VagiijlnpstrpllmoqqqqppppmeYTTTT]fjjljcZZ]dkprrpmknrssttsqnhekoquvvsoooqqrrrstrqpqppqrqqrttvtj_Vgqtwxuncahnv{zyxwsonruuvvwvvwvwwwyz{{{zywrgZV]joorvwwxxxzzyyxuspqrrrqqssssrxnhiosrtuuy|ussqppppppppoppqrsrrstttrpommnoqqrrqqppoppqrtuuvmmonlmstvvvuuurponmmmmooppnllnqttsrssuuvuuuvwxxxxwvuvxyywuuuuuuuvvvwy{{{yxxwxz{~}ytqnqw{|||}~~|||}}|zwuutwx{xxwxxxuuttuuuwy{{|||||~}|{usrrvvxzwvwwyyz{||{zyxwuuuuwxxxxxxxxxwwvwwxxxxxxxxxwuttssqponmmnnprtwyyyz{}~~|upqtuvwwwxz|~zwyy{||}}}|{zy{||}}|{yyywtuz{{{{{{|||||{xx|xtz{xvuvwwwwwxvtx{||||}}}||{{{|~}|}}~~~}|vq{}}}~~}|{~~~~}~|}~||}~~~~~~~~~~~ttttuuuwvvvvvuuuuuuuuuuuvvvwwwwvvvuuuuvvvvwwvvuuuuuuuuuuuvvvvvvvwwwxxxxz|}|{zyyyxxxwwxxxxxxyy|~}{zzzzyxvtsssqpnonnmmmnoppqrqqqqqqpnljijjjiiijklnpstuutqnklmnoprrrsssssrttpjdglneVVdijkmnnnqromjijmoppqoooong\\WVUT_hkkmhYNMPSZekmlkkorssssqmjggjnmsvsnklmoqqqqqrqppqpoqssoopsvwnbitstvwvl\\X_flqstuutttvvvwwwwwwwwwwyy{zyxvuqeXVampqvxwwwwxzzzzzwuqqqqqqqsstssuomkknpssuz{{sppppppppqqppppqssrrsttutrpnmopqsssrqpoooppqrrssnpssqprsuuuuuusrponmmmopqqnlkmqvussttvvvvvvwxxxyywwvwxywtsstuuuuvvwwxzyyxxxwxxyzzwutruy||{|}~~|||}||ywuutwxyvsoopsuvutuvvyz{|||{zz||{ztsrrvutyxxyzz{|}}|||{zyxvvvvwwwwxxxxxxxwwwwwvvvttstssrrqqponmlllllmnpsvxyz|}~{x~yrpttuuuuvwx|{wxx{|||}}|zzz{{{||zyyzzuopxyzzz{{{||||{zz{y}|zxwxxxxxxwwvy|~|{|||}}}}||{{|~}|~~}z~~~~{}|~~~~~z||}~~~~~~~}}}}~~~~~~}tttttuuvvuuuuuuuuuuuuuuuuuuvvvvvvuuuuuvvvvwwwwvvuuuuuuuuuuvvvvvvwwxyyzz{~~|{zzzyyxxxxxwwwvwx{~}{zzzywutssrqpoponmllmopqrrrqqrqponljhhhhiiiiikmoqrssrpnllmnnpqqqrrrrrqtsokgjmoeP\\hmnnoonlpokgfghknopponnnnh^[[ZT`jmmmgYKKTPQVZahknqrsssqmjgggknmruncZZcjnppqqppprrrqqsojhktyytovxussttk[W[^`flqstuvvvvwxxyyxxxxxxyy{ztsttqaQXgortxyxxxxxzzzzzywsrrqpqqstttstqppopqrssvxwrpppooppqrrqqqqrrsrrstuvvtrpnoorsuutrpnnnopqqqqroqttsrrstuuuuuutrqonmmopppomlmquvutttuvvuuvwxxxyywwvwxxvsqrstutuvvwwxyxxxxxxxxyyywutvyz{{zz{||{{{||{xwvuuxxwtojkmqtwutuwy|{|||{zxxzzzxutssttstvy{||}~~}}}|{{zyxwwwwwwwxxxxxvvtsrpnkkklkkklnpqqponmmmllllllnpquwy{||zxwwwx|yustuvvuuuvxz}}}zwxyz{{{||{zz{{{{{{zxxyzvsswxyyyzz{{||{zyz~~|}|zzyxyyyyxxwwyzzz{||}}}~~~}}}~}}~|}~~~}}~~~~~~~~}~~~~}~~}~~|{zz{}~~~~~~}tttttttuutttuuuuuuuuutttttuuuuuvuuuuuvvvvvwwwwvvuuuuuuuuuuuvuuvvwwxxyyy{~~|{{{zzyyyyzywvuuvx|~}{zyxvtsrrrrrqrpnlkkmnoqrssrrqqpoljhggggghhhijknopppponnnnnnooppqrrqqpppmjijlmgUblopppomklic^_beilooomlmmmh_]_]T_koomeXQXedcaaaflqrtttrnjgghijppqrpbTOUZ`hoqsrrstwwwuohhnt{||zwvvusqqsn`[]\\[aiortuuuvvwyz{{zyyyyyyyysjnstqbS^mrtvxyzzyyyyzyzzzxvtsrqqqrsttttsssrrrrrrssrrppooppqrrrrrrrrrsssstvwwwtsqooruxyvspnmnopppqpppqqrrsrrtuuuuuuutrnmllnoppomllnquvtttuvvuuvwxxxxxwvuvxwvrpstuuuuvvvwyxxxxxyzzzyyyxvtwzzzzzyz{zzyyzzzyxvuvxxsmlkmptuxvuvx}~}|}|zxvwyyywutssttttwz||}~}}|{{zyywwwwwwwwxxwvspligdbacfhikmoqrssqponnnnmmmmmmnnqosx|}|yyzxxxwwvutuvvvvuvwx{{{zyxxyyz{zz{zyx{|{{{zzxxyyxxwwwwwxyyz{||{{z|~|zzzzzzzzyyyyyyyz{}}~~~~}~}|}~}}~~}||}~~~~~~~~}}~~~~~~}{y{|}~}{ywvw{~~}tttttuuvuuutuuuuuuuuutttttuuuuuuuuuuuvvvvvvwwvvuuuuuuuuuuuvvuuvvvwwxxxxy{~}}|{zzzzz{zzxvuttvz}}{yxwutqqqqrssrqolklmoopqrsrqqpoljiggffffghhhijmnnnnnnoooonmnnnoppqpponmljikllg]fnoonooomlia\\Z\\`fkmnnljjkkga^_\\U_lpom_Y_inomkjgjnsstutqlhhikllpppqsl_WRNOYjmstttvyzzvpmpx{ywvurpsspmkjhbbgeacinqsstttttwz{{zzyzyyz{vlflqtsj^fqsuwxyzzyyyyyyyzzzxutsrrqrrssssttsrqqqqrstuurpoopqqqqqrrrrrsstttuvxyyxvsppruz|xurpooopqppppppppqrrrstuuuuuutrnlkkmnoonmlllnsutsstvvvuvwyyxxwwxuwxywrptuvvvvvvvwyxwwxxyzzzyyyyyxxyyyyyyyzyxwwxyzyxwuwxwoikmqtvwywwwz}{~{wutuxyxwusssssstvxzzvy~}}|{zzyywwwwwwwwwxwuog`][[^cgknprsttuuusqpoooonnmmmmmmnlou|{zyz|}|{zywvuuvvvvvvuwwyyyyxxxyyzzxwxywuxz{{{zyyyzzzzzxwvvvwxyz{{|}~|{yz{{zzzzzyyyyzz{|}~~zz{xvuw}}~{{}~}~}{{|~~~~~~~~~~~~~~}~~~~~~|zyz|~~|zwttuz~~ttttuuuuuuutuuuuuuuuutttttuuuuuuuuuuuvvwwwvvvvuuuuuuuuuuuvvvuuvvvvwwxxwxz|~~~|{zz{{{{|{xvutvx{}~}zxwvusqoooqqrqlegkmnpppqqrrqpnkigffffggghhhijklmmmmlmnpononnnnoooooonmlkjjklkhejnoolmnnnnlgb[X[afkmmkihiigc_][W_lqplbgnsnnnnmklpsstutpkiklmnnnppqqqmi]RLQaclrrsuvwwusssrpmllllnrrokfb`clpnjilnopqqrrqqw{{{zzz{zyz{umnoprrpgmtuvvxxzzyyyyyxyzzzxuuttsrrrrsssttsrqqqrsuvwvsqppqqrpppqqqrrstuvvvvxyyzyvrpqtz}{xvtsrqqurqpqqpooqrssstuuuuvvtromlknoppomllmptutssuvvvuvy|{ywwxyvxyytquvvvvwwvtuwwvvwxxyyyyyyyxy{}yyyyyyyxwvuwxzyywuwyvlinqvwxyywwxzww{wrqrswxxwusssssstuvvwtuvxz|{{zyyxxwwwwwwwvvvvtk`XVV[bjoruvuttuuuutrqppppoonmnnnnnmmq~zyxyz{}~~}|{ywwvvwvvvvuvwwwxxxxxyyyyvstuustw{{zyyyyzz{||zwuttuvwxyz{|~~{yxy{{{z{zzzyyyzz{{}}~~~~}|{ywvuvy~xrnov~~~}}~}|{~~~~}~~~~~~~~|{{|}~~}}~~~~~}{z{}~|zwttv{~~ttttuuuuuuuuuuuuuvvuuuttttuuuuuuuuuuuvwwxxwvuuuttttuuuuuvvvvuuvvvvvwwxxwxz|~~~}{{z{{{|}{ywvuuwy|}|zxvutrqonnopqpkdglopqqqqrrrqnlhfefggghiiiijkkklmmlllmnoonnonmmnnnnnnmlkjiijljjikmnmllmnoomliaYXZagkkihhhhgeb^\\Y`kqpnkqrrnnnmlmposrrtsojjlmnonmrqpopqqof\\[_T[joqrsuusqpmjihijlnqtspmi`_gsuollmnnnoopqqtz{z|}yvvxyzzursrpppnjntvwwxxzzyxxxxxxyzzxrtuttsssrrrsttsrrssstuvwusqpqqqrolnqrqqrsuwwwwwwyyzzxtrrsy||{yxwtrszzrqrrqpprsssstuuuuvvtsrpomnopponllmquutstuvvvvsx~xvuvwyvuvwwwwyzxuvxxwwwxxyyyyyyzyz|}yyyyxyyxxwvwxyyywvwyvmmqtxyzzywwwz}|nsxlnopsuwwvtssssssstuvvvvuvwyyyxxwvvvvvvvvvutttrh[UTYajqtuwwvutuuuuussrrrrqonnopqpnmmoyzyxxyy{|}}}|{ywvvvvvvvuuuuvvvwxxxxyyxtqqrrqquzzxxxyyz{|~}zvtssttuvvwy{~~|ywy{||{{{{{zzzzzzz{|{|{{zxvursu{|ursu~~}}{~~~~~}}~}}~~~~~~~}}~~~~~~~~~~}}~~~~~~~}|}}{xvvx|~~ttttuuuuuuuuuuuvvvvvuutttttttttuuuuuvwwxyyxwvutttttuuuuuvvvvuuuvvvvvwwxxwxy{~~~}{zzzz{{||{zxvvwy|}}{zwutrqpoonooomjlopqqqqrsrrqmjgffghhijjjkkllllmmmmmmmnnnmmnnmllmmnnmljihiijklkkklmmmmnopppomg]YX]bgihhgghhgfc^Y^jqqpqttpmmmkifkknopsqnjjklmnmmsrqqqrsutomiZWclortuqnlkkiiloqtuuvusqob\\fstnnonnnnnoprtwywxyyphnuwyyvuutqppnnqtwwwwxzzxwwwxxxyzzxqstuuuutssrstutsttuuvvvusrqqrqrtsnnorrrrtvxxyxwwxyyzxvsrruy{zzzyvssv}rqrsrqqrsssssttuuvvuutssqopqqpommnrvvutuvvvuutwzvuuvxwxwxyyz|}}|}}yxxxxxxyzzz{{{zzzzzyyyzzzzyyyzyxwwwywqrvxz{|{zxwwz{xlntfkmorsvvutssssssttvyzyxvuuvwwwwvuuuuuttttsrrrpdXTXajqvwvwvuttttttvuuuuutsqppqturonnnt}zzyyyxyyz{|zywtttuvvvuuuuuvvuuvvwwxxwtqpppooryxvvwxyyz}~{vttsssssrrvz~z{~~zxz|}|||||{{zzzyyyzzyxxwwuuuvy~}}}}|{{zz{~x}~|~~~~~~~~~~~}~~~~~~~~~}{zzz~~tttttuuuuuuuuvvvwwwvvuuttttttttuuuuuvwwwxxxwvutttttuuuuuvvvvuuuvvvvvvwwxwxxy{}}{ywyyyz{{{{zywvxx{|}}{yvtsrrqqpoooonopqqqppqrrqpljhhhiihhhjkkkklmmnnnnnnmmmmlmnmlklklmnmkihghhiklkkkklmnopprttqohb][[^cfggggghhhhcZ^gorrqqpommmhc_hjklnpnkhfghilmmsssststuvvtrmecjnrvrlihinoqsvwywvvutuudV_pojlonnnoppqsuxsswwte]lvwzyuwvurqqrstuxwwwwz{yvuvwxxxyz{trsuvuvtsrrrtuttuuvwzyvtrqqruuuwxvmmqssstvxyyxxxxxxyxvtrqsuwwwvuurqqtqqrssrqrstttssttuvvwwvvusqpppqppopsvvuuuvvuuvvx|wxsuvxyyyyy{||zyyxxxyzz{||{zzzzzzzz{{|||{{zzyxxxzyvxzz||||{yxxz{xqklgiklpqtutssssssstvx{zxvtsttuuuuvutttssrrqqppqrbUWblquwwvuttttssttvvuutuvvuttuxxtqqpnpw{|{{zyyxxwxyzxwusstuuvvuuuuuwvvuvvvvwwvsqpponnqxwutuwyyy}~{wuutsrrqoptz}|}~zwyz|~}}}}||{{zyyxwxxwvvuuuvwz~}|}|zyyyz{~{}}}}~~~~~~~~~~~~~~~~~~uuuuuvvuuuuuvvwwwxxxwvvuuutttttuuvvvvwwwwxxwvuttttuuvvvvvvvvvuuuvvuvvvwwwwwwx{}~{xyxxxyzz{{ywwwxz|~~}{xvttrssqooppopqqqqqqqqqpomkjjjjihgfghiijjllnoooonnmllkklllkjjkmnljhgfhhikllkklmmmnopqqqpmhdba]\\_bfggggggilkc_emqrqonmnnofcfponmmnlgcbccfknnrssstsstvvrrurlloruokigjptuttuurrrrsuvjX[llkkmnoopqqqrtvvvyyvd^nxyzwv{zurrrtvwwxwvuuyzyvuuvwwwwy}vrrtuuutrqpqstuuvvvy}|vrpqquxwxxxvijptstuvwxxxxwwwwwwvutsrsttsrqrqpopqqsrrrrrstttsrsstuuvwxxvtqooopqqqqruvttuuuuuuvtux{y~uuvxyyyzz|}~}{zyyyyz{{|}}zxyz{{{{{{||}~}|{{zyyy{{z{||||||{{zyz|zxoikklknpstussssssstuuxuusqrutssrtuttssrrqqpppqqpaXbnuvwwvttstssssstvvtsrsvyyywxyywuutssty{yzzyxxxxxzyxwtssuvvwwvuuuvxxwwvuuvvvutsqqpnnrxwusux{z{}|xvuusqqpprvz~~~}wwz{}~~~}}||{zyxwvvvvuttuuvwy{~~|{{{{zz{{|}~~w~~~z~~~~~~~~uuuuuuvvvvuuvvwwxyyyxxvvvuuuutuvvvvuuvwwwwwwvutttuuvvwwwwwwvvvuuuuuvvvvvwwvvvx{}{zyxwwxxyzzzyyyyz{}~}|zwvtstttrqpppqqqqqqrrqqpomllllkigeddefefgikmopppoonlkkkklkkkklmmkigffhijklkkkllmmmmnonmmliefhga\\^fghhgghjotocelqqpnmnoqr_^ionljkmmjhfeeglooqrrrqpplsvpqsspnorrniiilqutqponmkjkpuwrgckvunknpqrqppqrtvwyzxfdqxz{vxwrqrtwwwwwusruwwvuuuxrrrsyupqstttronnprtuuvwvz~xuqpqruwwvsnf_fpsrtuuvwwwwvvvvvvvwwvsrrrrppqpppprrrrrssstsssrqqrrssuvxywusponnoppqstvtttuuuuuw{{y|}wuvxxzz{{|}~}|{zyyzz{{||~|yyz{{{|||}}~~}}}||zz{{{{|||||{{{|{zz{{zsimnmlnoruutsssssststusrrtuvusqqrtttsrrqqpooppqmacqvxwvvussssssssssttronqvzzzyxyyyxxxwurwzyzyyxxxxy{zyxtstuwxxwwvuuvwxyxwuuuvvuuttsrporvwuuwz{{{}|xvvtrpopqtx|}}~{x{|}~~}}}}}|{zyxwvvvuttttuvwyzyvw~}|||{{{{{||}~}}}~}~|}~~~~~~~~~vuuutuvvvvvvvvwxyzzzzzyxwvvuuuuvvvvuuuuuvvvuutttttuvwwxxxxyxwwvuuuuvvvvvvvvuuuwxxxxwwwwwxyzzzzyyyz}}}|{zxutsssrrrqqqqrqrrsrqqponklmmljgdcbbcccdfhkmoppponmmmkkllnnmmnnjhffgijklkjjjklllllmnmmmligjnoi`]`cfhggjkpyxigjppomlmpvzfgmmkgdfloponkijoqqppponmmjmpopqqpopqpmfgkprsqnmmkjfcdltvurmk|xqrsttsqppqrsuwxwgktvyusz{spqtvvvvvtrrsuuuttssjiinuslmoqrrqnmnprtuvwxvz|vsppstvutqlaUT`nqrsttvwvvuuuvvvwwyyxurrrrpqrrqrrrrqqrsstutsrpppppqpqtwxxxwtqnmmnoqttttsuvuuuuw{{zywtvwx{{||||~~~~~}}{zyyzz{{||}{yzzzz|||}}~~}}}}}{{|{{{||{{{{z{{{zzz{{{nssqnoqtwwutssssssrqrqquvxwvtrqrrssrqqpppppppnifmvxwtsutssrrssssssrrpnorvyzzyxyzzzzzxunrx|zyxxxxyz|{{xuuuvxyyxwvuuvwz|{xvvvvvvuuttsqpqsttuvxyz{}~~|wuuspnoptw{}||}}||}~~}}}~~~}}}}}|{{zyxxwvtssstuvxz{{unu}}}|}|||{|}~~}}~~~~~~~~~~~~~~~~~~~~~~}~}}}~wvvuuuvvvvvvvwxxyzzyz{zzyxwvvuvvvvvuuuuuuuttttttttuvwwxyyzzzyxwwvuuvvvvvuuvvvuuvvvvvvvvvwxyzzyyxxy{|}}}|{xvtsrqqqqrrsrqqrsrrqpomklnonkgdcccddccefilnopppoooommnoonmmmnjgffhjjkkjhghijkjjjklmnnkjikmooi`Z^ehhiklryynijopnmlntz~suupg[[ajnopopnnqqpnnmlkkklllmoqpopqqqlehossqonnmkid`ahrvvusl}~tstuutrpoopqsvvtiptuupv||tqqtvvuttssstttttsqnffbjrphilnnpponoprttvxxwywsrqqsutqpmgXNMZjoqqrtvwvutttuvwxxyywtrqqqpqststutsrstttuvutrpoopqqnnquvxyywtqmlmnrttrrrtuuuuvv~uwxxuvwy{}~}|||||||||zzyyz{||}}~|yz{{z|||}}}~~}}}}|||{{{{{{zzzzz{{{zyz{}svwsoqswyyvtsssssrqpopqvvxwvtrqrrrrqppppqqqpomklqtutrqtsssrrsssssrrrrruwxyyyxxzzzzz{ywqqv{yxxxxyzz}||zwwwxzzzyxwvvvwy{zxvvvvvuutssrqqqqrrtvwyz{}~|wutrnlmpuy|}||}|{zyz|~~~~}|||}}|||{{zzywussssuwyz|}yrq}}~~~~~}||}~|{~~~~}}}~}}~~~~~}~~~~~~~~~~~~~~~~~wwvvvvvvwwvvvwwwxyzzz{{{zyxwwvvvvvvvuuuuuuttttttttuuvwwxz{{{{zyxwwvvvwvvuuvwwvvvvvuuuuvvvwxxyyxwwxz|}~~~~|yvrqpppqrssrqqrssrqpomkloqplf``adefddefhkmopqqppppoooomkjklojefgijkkkigffghihhhhjlnolkkllkopeW[cgijlmquwqllopnnnqvy|w{xo_NUahhlmmopqronllkjijkmmkkoqpprssqnjlqsrqonmmkjfa`dovxwuownpstsrqooooprtrnmtz~yt~}tpqsutsrrqttttsttsplijdiongijllnooopprsuwxyxwtsrtvxwurnjdZRQYfnpqrtuvutsstuvvwwxxvsqppqpqsvwxyxvuwwvvwwvurpnoqttqnptvxyywvrmmmosutqpqstuuvvwznvxzywxz|~}|{{{{{||zzyyz|~~z{||{|||}|}}~}|||||||{{{{zyzzz{{{{zxx|x{zuqtvz{zxutsssrrqppqrwvwvvusrrrqrqpppqrrrqpnmorsrrrrssssssssssrrstuvyyyyyyyy{{{{{|{zztrwyxxxyyzz}}|zzyyz{{{zyxwwwvxzyxvuuuuuttrrrrqqrrsuwz||}~|wvusollpw|~~~~~|zyvvy}~~~~}zz{||||||||{{ywusrstwy{~~xr{|z{}~~}}|}}~}|||}}~}{{~~~}}~}~~~~~}}}~~~~~~~~~~~~~~~~~~~~xwvvvvvwxwwwwwwwxyyyyz{{{zyyxwvvvvvvvvvvvvvuuuuttuuuuuwxy{||||{zyxwwwwvvvvwxxxxwwwvvuuuuuvwwxxwvvwz|}~~|xspooppqqrrqqrssrqpomkkmsog`[UZdgfeeffhkmopqqpopponlkihhjjlhedghklkihhgefggggghiknomlllklonh^[bgjkklortromoommoswyzyzwsgPSagfkibhoqqnmllkjjklmnjkqsttvvuspnprrrqomlklkiebbktvust~rmorrqponoooprrqlqw~x}|tpqrrrrrrrstsssssrnkgjlkljfijkklnopqqrtuwxxxvustvwwvtqlgc`]\\]eloqrsttutsstuuuvvvvusrqqppqtxz~~{ywwwwwxyvurpnoruvurrvxxxxwurnnnptwvsqrsttvwxx{~hhuy{{yz{}~}|{{||}|{{zy|~|}~~}|{{|{{|~}|||||||{{||zzzz{{{|{{yw}||xtwz|}{zwussrrrqqqrtxvvuutssrrrqqppqrsssrqppqqqrrsssssssssssssstuwxyyyyyzz{|}~~||~zvwxzzyyyyy|||{||||}||{zyxwvvxzywutttuuttsssssssstuw{}}~{wuvwuokpy~|{yxvuw{}}|{zzyxvvwyz||}}}}|{ywussuxz|~}y}{yz|}}{{z{}~}|{{||||{|}~|{z|}}|~~}~}}~~~}}~~~~~xwvvvvwxxxwwwwwwwwxxxyyz{zzyyxwwwwwwwxxwwwwwvvuuuuuuuuwxy{|||||{zyxwwwvvvwxyyyzyxxwvuuuuuvvvwwvvwwy|}~|xtrpooooqqqqrssrqqonmkkmc\\]ZWV^fffeefhkmopppomllkjihhhiiihfcbcbb`cgiiihhghihhiiknonnmmmnoold]ahllllmnpqqonmkmpuwyyyywws[S`feje[bmopnmmmmmnooopkkruvwxxvuqppqqqpnljjkkkjfbgptsqv}xpoprqonnnooppqrqmpwzyvwytrrqppqrrrsrrrrqqqme`emkkhfjkkklnopqrsuuwxxwwvvuurqqqpjfaabb`dilprsssttttttttttuuvw{ztooqswy|yxwxxxyxutrpnoqtvvtsvwxwvvuspoopswwvtsstuvwxyyumjkclvy{|z{|~~}|||}~}|}}{~~}~|{zz{z{}|{{{||||{{|}|{{{{{{{||zvx||x|~~~}{yvutsssrruvvyvutuuttrqrqqqqrsttttssrrrrrrssssssssssssstuvxxxxxyyz{{y{}||{zyyyyz{{{|}~~}}}|{zxvvvxyxvuttttuttssstttttuuvy{|~zwvxz|wosy}~~~|yxwvvvwyzyxwvvvuqnpty||}}|}}|{ywutvy{|~~{yz|}}{zzz|~~||}|{|||{u~|~~{yxy|~~}~z|~~}~~}}|}~~}}~wwvvvvwwxxxxxxwwwwwwwwxxyzyyxxwwwwwwxxxwwwwwvvvuuuuuuuuvwz|}~}{zyxwwvvvvvwxyyzzzyxwvuvuuuvvvvvuuvwxz{}|yvsqonmmpqrrssrrqqppnkcUT`\\WU\\fggeeehknopomkhggggeddghgeba^_b]SONU_]cijjjkjjklnpponmmnnopmg`bhlmmllmmopomkknrvyzzyxxwvhYahfjj_dlnnnnnoopqqqqrmoqvwwyxvuqpopppnlkjikkllhefnstovvspprrqommnooopppnkmqswtvyxpsvttrpooqrrqqpppppppmkcbhkljiklklmnopqsuvwxxxxxwvvtqnnooid_^bfcbfhmqrrstuutssstttvvv{~vsqsvx{ywxxwwxxxwtsqomnqtuuonqtvvvvvurqpqruvwvtsrstvxwvoiilkrvy{|{|}}||}~~~~~}}}|{yzz{}|{{{||||{{|}}}}}|zz{||{xtt{}{}}|zxwuttttuxxwxvutuuttsqqrrrrstttuuuutttsssssssssssssssstvxyyyyyyzzywooz}|yxxxxzz{{|}~~~~}|zxvvvwxwvtttuutuutttuvvvuuuuvx{|{xyxv|}uuvxyyxxvvuuvvvwvvtttuvrlhjpuvvvwwy{|||zwvxz||}~~zxx{|{zyyz{||{{~~~~}}~~~{{{{{{||{xvx{}~~}~~~~~~~vvuuuvvwwwwxxyxwwwwvvvvwxyxxxxxxxxxxxxxxwwwwwvvvuuuuuutuwy|}~}{yxwvvvvvvvvwxxyyyyyyyxxxvvvvvvvvvvwwxz|~|xtroifknqqrssrrrrssql]SVZWNVbghfeefiknnnnkhfeeef^]afgfc^ZUUeic][RCQZaimmlnooqrrqnjihikkljfbchklllkklnnnlklpuxzzzyxvsrrbellnnijlmmmnoopqrrqqrorswywwvtsqpnpqolkkkjjklkkjimruowtssssrqonnopppppmllllilkptssrsrsrqoononnmlmnpopqolb_cjmllllllmnopqtuwxyyyyxxwwurrrqpkd^\\dlhdceimprsuuuttttuuvwwuv~xtsuwyvtxwwvvutvrqpnnqtwspjgkptuuuvvutsrrstvvvtqrqvxtpjiimpuwz{{{|}~|||}}{}~~~}}|zzz{}|{{{|}}}{||}~~{xwyxxyzvpmv}}|~~~~}|{zxwvuvwyxwvwvvuvuttsrrsstttttttvvvutttssttsssssssssstuvxyzyyzz{yurkjq}{yxxxyzz{{|}~~~|zxvvvwxvvttuuuuuuuuuvvvvuttssuxx{}|xutrpsuqqsssuuuuttuuvvvvvuuuvwskegknjjikoswz|}{yx{|}}}~~~}xvvxyzyxxxyyvx{~~}zxyx{{{|}{yxx{}~~~~~~~~|}}vvvvvvvvwwwxyyxwwvvvuuuvwwxxxxxyyyyyxxxxwwwwwwvvvvvvvutuvx{|||zxwvuuuuuuvvvwxxxxxyyz{{zxwwvvvvvvvvwwy{~yrojc`inpqqrrrrsttsrnZRVYSRXafgfedfkkmmnmkihhhjbSVafgec[RP^fjhfb[[XVY`kllpqqvujdb``_adeefdcdfjjkkjkklmmlklqvyzzyxvtonkeiorrrnmlmmnonppqrqqqqruvvwtutrrrqprqnkkijihijflrnnqtnxvvvutrqpoooppqqphknnlghjnrsssrrrrqnkiiiijjlnoopsrh\\[bgkmmmllmmnopqsuwyzz{{zzyxwuutsrokc^fpnheefjoruvvvuvvwwwxxwutw~{vuuuuuuvvvsrrqqprrppu{yuplihjlmrtuuwvutssstvwwtrqwyrkhhjnrwy{{{{|}}{{|}~~~~{}}~~~|{z{||{{{|}}}||}~|xtsurv{wrjfv|}~~~}}||{zywvwxzwvvvvvvutsssrrttuutttstuvvutttssttsssssssssstuwxyzzz{{{vqnkpu}|zxxxyyzz{||}~~~|zxvuuvwvvuuvvvuuuuuuvuuutsrqqrsuvvutqnnmnnopqstttstttuvvvxyxxwwxwtmffiiedcdglsy|||zz}}}}}~{wuuwxyyyxyxwuwy~~}||{ywyz||}}~|{zz{~~~~|z|~~vvvvvvvvwwwxyyxxwwvvuuuuvwwxxyyyyyyyyyxxwwwwwwvvvvvvvvttuwz{{{yxvuuuuuuuvvvvvwwwwyy|~~}{zxwvvvvvvvvvwz|~|uofaaimoppqqqrrstssr\\MT[\\Y[_dffeefkillmlkjiiieXR]eggd_XTZdjjgc__b`XTQTZcouuugZX]_`abbbabbbbdgikkkkklmmlklqvyyywvtrnkihlqtusomlkmnoooppqqqqrvywttttsrrssrsrnigeeeeggclvtrsso{{ywutqppoooppsrnelqpnkknpqssuuvsolgffhjllmnppqruti[X`cimnmmmnnnopqsuwyz{{{{|{{ywvuutttkcirqkjklnqsvwwwvwxyyyzywvwxzzyxwvvwuutsqqponnquyzvsy~}zvrledcbfmsvvwvuuttuvyyyvqz{nhhikquxz{{{z{}}{zz{{|||{|~}}z}{|}}~~~~~~~~|{z{{{{z{|}}}||}}xssytppospgnz~}}}}||}}|{ywyz{wwvwvttrtuutttttuutsrrrstttsrrrssssssssssrrstuwxyyzz{}|volis~{xxxyzz{{{|}}}~~}zxvuuvvvvvvvvvvvvuuuutttsrqpopqrrrrqommnnoqqstuttsstttvwxz{{{zzzywrjghheb``cgpx{|}|}~~~~{wuvwwxxxxxxyxxz}~|vy{}}{zzz{{|}~~~~}}~~~~~~~~}|}~~~~~~~|~||vvvvvvvvwwwxyyxxwwvvuuuuvwwxxyyyyyyyyyyxwwwwwwwwwwwvvvuuvwxyyyxwwvuuuuuuvvvvvwvvvwy{~}|zywvvvvvvvvwxz|}~{tjdbhlmnoppqrrrsrrsb]`Y^\\\\]afgeeeihjkllkjiihZT^hihfbXX^ehjhe]US_d_^[Y^amvsg\\Y[_`__aaa`_`aabehkllklmmmllmquwwvttsqnliimqtusolkjlnnnnopqqqqsyzrfflpsutsrstrjdbbcceeddnuwxvqq{~yusrpoooopprsrihnrqppppnmmnquwrjfdfilnppqrrrrrvvn^V[_flmmmmnoopqrstvwyz{{|}}{wuuuutsrmlqtqnprtttuwwwwwxxxyyyxwwxxvuuuvuvwvurpmnnnnpv|~{y|~~}ztleb__cfhkquvvvuuvwy{{{x~tjghkmt{~~zyzyz|}~{zyyyzzzz{zyz{{}uvuvwwyz{|}}~~~~{zzz{zzz{|}}}|}~~zvtxyvqlloou|}}}||{{|||{yxyzzvvvvwussxyxvvuttssrqqqqqqrrqqqqrrssssssssrrstuvwxxxyz}|tnir|y|~{xxxy{{{{{|}}}~~}zxvuuvvvvvvvvvvvvvutssrrqppooopppppponnooqrssttttttstvxxz{||}|{{{zwriffca__afox|}~~|xwwxxxxwwwxyzz{{|~|qrtw{||xxy{||}~}}}~~~~~~}||{{~~{{vvvvvvvwwxxxyyxxwwvuuuuvvwwxxyyyyyzzzzyxxxxwwwwwxxwwwwuuvwwwwwwwwwvvuuuvvvvvvvvwvvwx|~~}|{ywwvuuuuvvvxy{||}~zrhadjlmnnopqqqqqqtjmn\\a_^_cjkighjfgilmkihhgY[fkigdaX]eijifaULGKXafa\\YY^kiSXZZ[[ZY[]^^^^__`cgjlkklmmlllmqtvusrrqqpmjjmprrpnljiklmmmmnopppsxvfTPT^hotsrqrof__acdfgdfptwzwqquwtrqponnnopqrrrfkoooqqommlnoquvphehknpqrsstttsruvrcVX^ejlmmmnoppqqrsttwxz{~~|ytssttsrljotutsuwwwwwwwwwwwwxxxxwvvwvsqqrstuvvvspmmmnorx{}{xwwxyyxsmgdbaeb]]jptuuuuuvx{|||~mhghlpvyz}zz{||{yxxyzzyyzzyxyzzyoonnoostvy{{}}~~|yyxyzzzzz||||}~}zwox}{tsx|~{}~}{yyyzzzyxyyxuvuvvxy{|zusrrrrqqqppqpppqqqqqqrrrssssssrrrrsttuuuuvx{|tkpxsov~{xwxy{{{{||}}}}~}{xvuuvwvvvvvvvvvwwvtrqppoooooopppqqqpppppqrsstttttuvyzzzz{||||{zzzyxkeeca``agpy|}~|zyyyxxwvvwxyz{zyy||uvvz}zxwwz|}~~~~~~~~~~}{zyyy{~}~~||~vvvvvvwwxxxxyyxxwwvuuuvvwwwxxyyyyzzzzzzyxxxxwwwxxxxxwwvvvwwwwwxxxxwwwvvvvwwwwwwxxwwvx||}~}|zyxwvutuuuuvwxyyz{}|sechlmmmnooppppqtqrrifa`djoqonomeahmqmhgfe`djjhfb_]bghge`YPNNPV_cf`RTZ]]UQLJNTXZWY[[\\]]^`cfjlllmmnnopprtusqpppqqomkmmlkikkjiikklkllmlmoswo_TKGKPXfnrpljecbbfhijdktuwxuqqqrqpoonmlmnppqqrimmkmqqnknprsuusmhimoqrrsstuuusqqrqg][_dhklmmnooppqqqrrtuwy{{yvqqqrrrqniiqvxyyxxxyyxxwvvwwwwwwvtuvtpooopprtuusromnnprsrsqonnopqrqoligfd_[\\gmqttuuuvwz}~~zgiigmqt|}y{~||{{{zyxyz{{zz{{zyz{{xqpmmlkmnpswx{|}|zwwwxyyyzzzz{{}~}}|yxyz~}|~z{zxvwwwxxyxwxwvuuuuux{}|xrpopqrqqqqqrqqqrrrrrrsssrrrrrrrrrrssstttttuy|qoqnlu{xxxy{||||}}}}}~~{xvvvvvvvvvvvvvvwxwurponnnnoppqqqrrrrrqqqrrrttttttwx||zyyz{{{{zyzzzxohgfda`cir{|}}~}{zzzyxwvvwxyzzzxxz~~}yttxz|}~~}}~~~~~~~}~~~}}{yz{}~~~}}}}}~vvvvvwwxxxxxyxxwwvvuuuvvwwwxxyyyyzzzzzzzyxxxxwwwwwwwwwvvvwwxxxyyyyyyxwvvwwxxxwxyyxwuvxy|}}|{zxwvuttttttuuvvwxz|~~~zsllnmmlmoopppqqrssrpkdaemqsrpqmfbmsulgedefhjjiga^`dghgdOIRYZWRSQYb[Uba[VMEGMU\\]VVXZ[]^`beilmnnopqruvutttrqoooqssolifdccffgghijjjjkkjlosvm]STUTNIMXfnmebcdfikkkdowwtsrpppqpoonmkijlopnnngjkijqpllptuutrljknprssssttuvvtqnmmidccegjkmnnooopppppprsstsssqooopppqspowz{zyxyyyyyxwvvvwwwvusqssrnnnnnoprssrrrnnoqstrrpoooooooppponlea_`ijjlqtuuvwy}~wekifpssy}|zxz||{{zyzyz|}||{}}~|z{|zxvutrpmlmostwz{ywuuvxzyzzzzy{{}}~~{|}yttz|}}{zvvvvwxyyzyxwvvvvuuuvvxyzzxutttstssrrrrrrssssssttttsrrrrrrrrsststuuutuw{xpnnmv}yxxy{||||}}}}}~~~{xvvvvvvvvuvvvwwwwwusqooooopqrrrrstttsrrqrsstutttuwxzzxwxyzzyyxxyyyxsmihd``emu{||||}~|{{zzyxwvvwxyzzyxy|~~~{vvx|}~~~~~~~||}~~~~}}{z|~~}zxzvvvvwwxyyxxxxxxwwvvvuvvvwxxxxyyyzz{{{{{zzyyxxxwwwwwwxwwwwxxxyyyzzzzzyxwwwxxxyyyyyyyxwwwy{|{{zyxxwuttttttssttuvxyyyzwtrpomlmnnpqqrqqqrqpojdflqqqpomjjquvmhfefgijjjja^bfiicS61EUZUKFCHYi^`aYPKKNV]^^XWXZ\\_aehjloopqrstuwxvusrqqonorvtqmieffffeeggjjihiijkmptvrlaVWYWRJHP^geacfiklmmgqwwsqqqpqrqpppnkhiknnmlleflihoollruusnjgkorrsstssstuvvsplkkjihhghikmooooooooooqtvtsqppooppqqstvwz{{zyxxyyyzyxxwvvwwvtroopqpononnnopponnllmmortsttttttsrrqqsstqkgeejc]_lruuvwx{|}viiihtvvz||{xx{{{{zz{z{~}|{~zy}|||}{zxsrqqqqruyyvutvy}yz{{zy{{}}~~zz|xpovz|{ywwxz{{||zzyxvvuuuuuvvvvwxyy{zzyxwwvuutssrsttttuuvvvtsrqqqqqrssssuxyyxwxz~|tpoox{yyz{||||}}|||}~~~{ywwwwvvvvuuvvwwwwwvtrqpppqqrsssssttttrrrsttuuttuuwwwwvwxyzyxwvwxyyxuqlhc_aiqx{|||||~~}|{zxwvuuvwy{|{zyz|}~|ywz~~~~~~~~}}~~~{uv~vvwwwxxyyyyyxxxxwwwvvvvvvwxxxxyyyz{{{{{{zzyyyxwwwwwwwxxxxxxxxyyyz{{{zyyxxyyyyyyyyz{zxxwwxyzzzyyyyxvuuttssssttttuuvwwvtsqommmmoqrrqpppppqplknqpponnmnprupkhffgiiiilb`chjjdE,*.9HLNMMOWfg__YMJOW_c[[Z][[_bfilopqrrsuuvwwvtrqpqpomoqutsoljjmmjhghhiiihhikmprtutslb[TW]\\URV\\a`afjkllfgrtrpnlmmoqqrrrqonnnmnnnpllolinpnnrvuqkegostssssssrstuurokjklkkkjijknoqqpppqppqruy{yusqqrrrsuwyxzyuxxwxxxyyyyxxwwwwwvrolmprqponnnmnmkjiheikklmooqqrtvwwwvutvvvtrnlkf^[^hptuvwwyz|xnhhixyz|||{yyyz{{z{||}}{{|z~~~|{{yxwvtsqqwywuuvy}yz{{zy{{|}~~|z|tnkqvzyzy{}~|z{ywvwuuutuuuxwutvwwy{{{zxwxxxxwutstttttuvvvutsqqppppqssqquz|||{|}~ysppz}zzz{||||}||||}~~~~|zxxxxxwwvvvvvvvvvvwvutsrrrrssssssttttssstuuuuttutvvuuuwy{zxwvvwyzzyxtpjc_cnuz{||||||}~~}{yxwvuvxz|}}}{zz|~~|zxy~~~~~~{x~vvwwwxxyyyyzyyxxxxxwwvvvvwwxxxxyyyz{{{{zzzzzyxwwwwwwwxxxxxxxxxxyz{{{{zzyyyzzzzyyxyz{zzxwwwxxyxyzzzxwvutsrrrssssssttuutsrpommmnpqqponnoprrqppqponmnopopromkighiihikcaeikkl[?-(*0?OXYZY]gec^NJV`ed]Z[]^_cfilnpqrttuvwwwvtrqppqqomnoqrrrqommmlkjjkjmliiiknqsutsromg^[\\]^`^[XW]eiha]\\iqmheehjknqqstrsqqqpnnoopnoonloqrrtutqjejsvvtsssssrrrstrnkjjklllkjjknprtsrrsqpqqty{zursttttuwyzzywvwvwwxxyyzzzyuuwxxyrkloqssqnnnmmlkihggfhiiijklmnnqtwxyxwwwwwvtrpnke`_crvwwwwxx{yrjglz{|{{{zyyxxyz{|}~~~}|~~}zzz{zyyxxwtwyywuttwyz|{zz{{|}~~}{||rmkmquvxz~}{ywuuuuttttuuyxvtuvvwxyxxvvvvwxxxwuttstttuvvutrrrqppprttrruz}}}~|wrr{~{z{{{{||||{{||}~~}|{yyyyyyxxwvvvuuuuvwwwvuttsssssrrssttttttuvvvuuuuuvvutuwyzyywvwwyz{zywsldagty{|||||{zz{||}~|}~|zxwvwyz}~~}|zz|~~}|zyz~~~~~~~~~~~vvvwwxxyyzzzyyyyyyxwwwwvvwwwxxxxxyzz{{zzzzzzyxwwwwwwwxxxxxxxxxxyyzzzz{{{{zzzzzyyxxz{|{yxwvvvwxz{{|{ywutsrqqrstsrsstuuuutsqoomnopppomnoqrrqrqqponnnnooopnmljhiijiijccgjloopcF0)+7JWXXQLQae`QNYbdb][]_bcglnppqrsuuvvvvutrpoorrronnopqrstrpoopopoppqnjjloqsttsssrqnke`XWaea[XZ^SKHM\\ni\\YZ\\aegkpquwtuvwwtooppppoppqqrstuuuqjhnuvvtssssssssttrokjjkmllkkklnqtvvuutqopppsvuvvvvwwxxxwuuvvwwxxyyyzzyxtuy{y{olptuttpnnmlljigffhjihhhijlllnpsuvvvvwwxxxuttrrrlffpvyxxxwwzzvnhoz|{zzzyxwvvwz|}~~~~~~{zyyxwvwy{xxy{yywvuuwzzzz{{|}~~}~~~|{{yplkknptty}~{xvuuuvuuuuuuzywuuuuvwwvvvvvtssuwvutsrrstttssssssrssstuvuuwy{||~~yut{~|~~|z{{{{|||{{{||}~~}|{zzzzzzyxxwwvuuutuvwwwvvutssrrrrrttuuuvvvwwwvwwwwwvvuvwyyyxwwwxyz{{zyuoeenx{{{{{||zyxxyy{}}zyxxz{}}~~}{{}~~}|||}~~}~~~vvvwwxxyzzz{zzzzzyyxwwwvvvwwwwxxxxyzzzzzzzzzzyxwwwwwwwxxxxxxxxxyyyyyyyzzzzzzzyyyxxyz{{zyxwwvvxyz{||zxwutssrqrssrrrstttuuutrponopppmlknqqqqppppoonmmnnnooonlijjjihhefhlmlnrxnM3*-:ELMHDG[f]RT\\cge^^`cdhkorsrrstvuuutssrpnmqutronoqrstuuusssssssronlllnprststtssqonkh`Y\\bgfdZXKEXcfqcRU\\afhmqttstuvwxwupoonppqqrrqrstuvuqlkoqtutsrsttuuuuusqmjjjllkkklloruwxwvtroooopqquvvwwwwusrprtuwxyyyyxyzzyvv{~ywpsuwwurnmmlkkigfeegihffgiklmmnpstrqpsvwxxywvvusvywlju{xyxwwyzzsjtz|zxxxwuutuvz~~~~~{ywvutssuxvwx{z}{{yuuwyyzz{{|}}~~~}|{zywqnlklmrtz}{xvuuvvwwwxxvvxxvuuttuvvuuvvwvtpprrturppqsssrrsssstvwwxyyyyzzzz{}|xw}|y|~~~}{zz{{{{|{zz{||}}~}|{zzzzzzzzyxxwvuutuvwwwwvvutsrrrrsuuwwwxxxxxxxyyyyxwvvvxyyxwwwwxxzzzzzxrgkx{{{zzyzzyxwvvwy|~|zxy{|}}~~}||}~}||}}~~~~~~~}vvvvwxxyz{{{{{{{zzyxwwwvvvvwwwwwxxxyzzzzzzzzzyxxwvvvvwwxxxxxyyyyyyxxxxxyyyyyyyyzyyzyyyyyxwwvvwxyzz{zyxwvuutssrrrqrrssstuuutsrqpqppmihknopopoooonnmmmmnnooomkkllkkhghikmnnot|pT8*+09DMQT]gZRZbhnnaadfgjlpssrrsvwuusqqqpnljqwuqooprsrtuwvuuttssrpihlnnnlkmoqsssrponmlje]`ghdOS^gpllpibeknlmqrrokkpssssohfginrrrrrppqstuurnloprttsrqstvvvvvusoljijllklmmortxxxwusqonnmnnrurssttssrqpprvxzzzzyyxz{{yvv|xpwyxwutpkjkjjjihgfeehgfhijlmnnoqsspnmquwxxyxwwvvxzyrhszzzywwxz{wlxzzxvvutssstw{~~~~|ywusrqrsutrvwyzzz{z|ywxy{{{||}~~~~}|zywvtpnklnty~|yvuuuvwxyyz{zxwvuuttttuuuutttuwvrppprusonorrssssrssuxz{}}||}}}|{z|}~~|{}z}~~}{zzzz{{{{zzzz||}}}|{{zzzzzz{{zzyxwvuuuvvvvvvuutsrrrrsvxyyyxxyyxyyyyyyxxwvwxxxxwwwwxxxyyyyytjp}}|zxwwxxxwuuvxyw{~~}zz{||||}}}}}}}||}}~~~~~~~~~~~~~}~~vvvvvwxyzz{{{{{{{{yxwxwvvuuvwwwwwxxxyyyyyyzzyyxxxwvvvwwwxxxxxyyzzyyyyyxyxxxyyyyyzzzywwwxxwwvvwwwyyyyyyxxwvutsrrqqrrrrrttuttsssrrqqmhgikmnnoppponmmllllmooonmllmmmjhiikllkjntxtfJ2%*;MVY[fZV`lqrocfhhijjlprrrtvwvspoooomjhpxtqopqspifkptttsssrrofhopnmjhikorrrqonlkklmgcffRDZdmrpoqqoja^hrskcedhlooopi_\\\\]mutssqoooprstsqooprssrqpqrtuuvwwurmjiikklmnnoqsvwxwvusqonmnmmopqqqqqqprwzz{{||||{{zzzxvtrtvusyyxwutsolkjkkjjihfgjigjklmmnnpqssqppruxyyyyxwwx||zwmpzxyxyxxyywouwwvtstsrrrtx|~~~~~}~~~~{yvtrrqqsvywvwwwxxxz|}zyyz{||||}~~~}{ywvutrommqw{}wvvvtuuwx||||zywutttttuvvvutsqqrsttrppstqooqqssssrrruz}~~|{||}~~}|zyyyz{{{{zzzz{|}}|{{{z{zzzz{{{zzyxwvuvvvvvuuutssrrrrtxy{zyyyyzyzzyyyyyxwwxxxxwvvwwxxxxxyyywsx~~}zwuuwxxwvvvwwvvxy~~~~|{{||{z{|~~~~~}|}~~~~~~~~~~~~}}~~}~~~~~~~vvvvvwxyyz{{{||||{zyxxwvvvuvvvwwwwxxxxxxxxyyyyyyxwwwwwwwxxxxxxxyyyyyyyyyxxxxyyyyz{{yxwvwwwwvvvvwwxxxyyyzyxwwutsrrrrqqqrssttsuuttsrokiijlmnpqqqpomllkkklmnnnmlklmmkiiijkihgilnolaM5*2FUX]b_^emookfikjjjjloqqrruvtqnmmmmljipuponoqrneadioqqrrrrsqlnqqomliiknpqponmlkklnmhefRSjjnqqppkf^T\\owsjbbbcejlmok`XTRguuttroooopqrrrqppqqrqpopqrsuuvwurnjiijklmooopruvvwwwutrpoonnooooppppqt|~~~~~~}|{yursrnmnquwwwwvvwvqmllmnmkjjkomjjjkllmnpprssstuwyyyyyyxxxy}zsqvvwwwwwwvtpqstsrrrrrrruy|~}~~~~}|||{{{{zxvtsqqqruy|||{yxxwwy|{zzz{||}|||}}~}|yvtutsspoosx|~yvwxxuttwz~~}{yxvttttttuvvutsrqppqsusqnoqrqnoqstttsrrvz}~~}}~~}}}{zzz{{{{zzzzz{{}||{{zz{zzzz{{{{zyxwvuvwwvvuttsssrrssuxz{zzzzzzzzzzyyyxxxxyyxxwwvwwxxwwxxyyyy{|xtuvwxwwwwxyyz{|~~~~~~|{{|}|zzz|~~~}}}~~~~~~|~~~~~~~~~~~~~~~}~~~~~~~}}~~~~~wwwvwwwxyyz{{{{{{{yxxxxwvvvvvvvwwwwwwwwwxxxyyyyyyxwwwwwwxxxxwwwxxxxxyyyxxxxxxxxyy{|{zyxxwwwvvvvvvwwwxxxyzzyxwvutsrrqpqrrsssstuuuutsqomlmmoqrrqpnlklkkjjkllmmlklllljhhiihhggijjhjgR:0@UY^`dfikljiijkkkjkmooponpusljkkklklmqpilopqqokiijjjknpqrrrqrrqponmmmooononnmmmmnmifgagrnnqrpla\\Y\\kusokfca_afilmneWON\\ouvvtrqppqqrrsrpooponoopqrstuvvuspliijlmpqrpoprtuvwxwvtrqpnnnnooqrsrtx}}|zvpmqrolknsuvwwvwxxtqppqqomklnqplkiijklmnprtuuvwyyyyyyyxx}zy||yspuusssuutsqprrrqqrrrrrvy|~~}}}}}}|{zzxxxxwwutsrrqstwz|~~}|zyvuwyzz{{|||}|||||zywtrrrpqqppqrw}{uy{~zwttw|~~}zxvuttttttuutsrrrsqpoquusomoqpoqsuuuuuuuwz|}~~~}~|{|||{{zzzzz{{||{{{{{{zzzzz{||{zyxwwwwwvutssssssstuwyz{{{{{zzzzzyxxxxxxyyyyxwwvwwxxwwwwxz|~yuuvxyxwwwx{|}}}~~~~~|{yy{{{z{|}}|{{{||}~~~~~~~~~~~~~~~~~|~~~~~~}}}wwwvvvwwxxxyzzzzzzyxxxxwwvvvuuvwwwwwwwwxxxxyyyyyxwwwwwwwxxxwwwwxxxxxyyyxxxxxxxxxyz|||{yxwwwvvvvvvwwwxxxyyyyxxwwvutsrrrrsrrqqrrssrrrssrppoprsrrpnmjkllkkjjjklkllllkjihikjjhghhiihd`TLLZ\\`dillmmlllllmmhhjkmmkfktrcbikijiknqjbkppqppqqpnifhjmprrrrrrqqppoooooononnoonookhgdhnpooqrqofddkppnid`^]`cegikmhYNLRhtwwutsrrttrstsqonnmlmpsssstuuvvttnijlmpsutqnnprtuvwxxvutsonmmmnqsttvz~~|xupossqnnoruuvvvwxxvtstutrommnqqomjjjkklnoqttuvxzyyxxxxwwz{yv|}vmwuqpqssstrqrqqqqrrrrswz}}~}{{{{{zywwvvuuuutssrrrtvy{|||}}{ywuwwxz{||||}|||{yvsrqpqqnoopqstx|~yv||yuuy}~~}zwussttuuutsrrrsutqpmptvtpnoqrruvwwvvwwwxz{|||}}}}}||{zz{{{{{|{zz{{{|{zzyxz{||{zyxxyxywussttssstuvx{{{{{{{{zzzyyxwwwxxyyyyxxwwwxxxxwwwwxy|zuuwxyywvwxz|~~~~~~}}{{ywvvwyz{}~~{yxxxy{~~~~~~~~}~~~~~~wwwvvvvvwwwxxxyyyxxxwwwwwvvvvuvwwwwwwwwxxxxyxxxxwvvvwwwwwxwwxxxxwwwwxxxxxyyyyyxxxy{||{yxwwwvvvvvvwwwwwwwxwwwxxxxxwutssttrqppppooopqsssrrqrsrpqpvslmmlkkjjjkkklmlkjjjlmljhgghijgfdb_^bdefjmnnnmmmmlmmia^fkkhbiqiZVhjhhgilnhbjqqqqqrsrpnkjjnopqqqrrrrrrqpoonnnnooppqrokiihknnooqrqqopoqqolic_ZX]ceggghi_QNN^qwxvvuttvvrrssrsqnmmnqwzuttuuvvuwqjkmoruwupllnqstuvwxxxwtrpnmmmorssv{~}yursuutssrstuvvwxyyxvuvwutpnnnqrqoljjkklmorsuvwxyzzxwwwwvvwwuyzvqwurqrtttutrqpppqqqrstx{}}~}{zyyyyxxvvvvvuuutttrqrux{||{{||{zxwxxyyz{||||{{{xvtqpppqqssqrrtvyz|yz}ywx{}}}~|xursruxvusrrrtvvtromosutpopqsuvyyxwvuuuwy|}}~~~}}}}}{zzz{{{{{zxxxyz{{z{{xvwy{{{zyyyz{}|zywvttsstvwyz{{{{{{{{zyyxwwwwwxxyyyxxxxxxwxxxxwuuxvv{yvvwxxxwvvwxz|~~~~}zxxvuttvxz{}}|{ywvwxz~~~~~~~~~vvvvvvuvvvwwwwwwwxxwwwwxwwwwvvvwwwwwwwwxxxxyxxwwvvvvvwwwwwwwxxxxwwvwxxxxyyyyyyyxxxyz{zxwwwwvvvvvvvvwvvvwvvuuwxxxxxwvvvvvusrpnmkjklnqsrrqqqrrrpqlkmmmljjkkkklmmlllmppnliiihiiijjiggghiilnnoonnnmllomibbhfcbgl`QObgdcehjljikopqrrsssrrrpoppppqqqrrrrrqponnnnnooqqrtrmjklnoopqsqpnoqqporqpmhb]^cfhgfdfd\\QLWlvxxwwvvxwplppnklnoqsuwxvvvvvwwwysmlnpsutpkhjnoqrsuvxxxxvtspmllnooou{~{wvwwxxxwuuttuvvwxyyxwvwvurppprssqmkjkllmortvwxyyyxvustuttrrsuuutttqruxxxyxtqpoopppqsvz|}}}{zyxxxxwwwxxxxxxwwuusrrvz||||||{zzzyyyzyyz{|{{zywuttsqqqprrqqrtxz{zzy}|zy|}~}~~~zurtruxtsssstvwvtrpnpsutqpquwxyzyxwtsrrsvy{~}~}||}|{zzzzzzzzxuttvxzywy{xuuvwyyzzyyz|~~}}|xttsttvxyz{zzzz{{{zyxxxxxxxxxxxxxxyyyxvwxz{|zxxtsw}wuuvwwxwvuuvwy{}~~}}~~~|{xvutttuwxz{}}|zywvvxz~~~~~~wwwwwwvvvvwwwwwwwxxwwwwwwwwwwvwwwwwwwwwxxxxyxxwwwwwwwwwwwwwxxxxxwwvwxxxxyzzzzzzzyxwxxxwvvwwvvvvvvvvwvwwwvuuuvvvvvvvvvwxyzxvrqokiiiloqqqppppptr|~tnmnnmlkllllmmmllmmppnljihiijklllkkiihhlnoppooonmifehf\\VPNX`cZUSbb\\aikkklmnqrrrstttttutsrqppppqrrqqqponmmmmnoppqruvqjkoppqrturpolknmlqrrsrokijkmjigfhhWNRapwwwwwvtngelmjeeffgksuuwwxxxxyyytomprsspkgfjppopqstvvwxwvvrnlllmmms{~{yxxyzzzywvutuuvwxxxxwwwwvtssssstrolkklmnpsvwxxxwusrpmnqrqooqsssssspqortuuwvppoopppqswz{|}|zxxwwwwwwwyyyyzzyywvtrrw||||}}|zyz{{{{zyyz}}||zvttutsrqpqropswy|~}zzz}{{{~~~}~~}yurtuspqrttstuutrpppruuurrswxyyzyxwsrqqppqs}{|~~~}}}}}~~}|||zzzzzzzzzwrqqsuxxtuyywutstuxyxwyz}}}{wuuuuuwyz{zzzz{{{zyyyyxxxxxxxwwwxyyyxuvx{~|y{zustuuvwwvvutuvwz|}}}}}~|{yxvuttvwyz{|}}|{zxxxy{~~~~~~~~xxxxxxwwwwxxxxxxxxxwwwxxxxwwwvwwwxxxxxxyyyyyxxxxwwwwwxxxxxxxxxxxwwwwxxxxyyzzzzzzzxwvvvvvvwwvvvvvvvvwvwwwwvvvvuttsrrstuwxxwvvuspkhgjlnoonnnnoqqzxzpmmmmmmmmmmnnnnmmmnomkihhhijklmmmlkigfkmoppoqoldWQ`o`J@;?O]_ZYXa_\\dikllmpqsssstuuuuttsrqppoppqqqppponmmmmmnnopqqsvsilssrrsuutrpkhmkkooqstsrssrqnnmklme`[^mtvvuutqhejsttttrqqrrsuwyzzxwxxxvrortrrliilprqnnopqsuvwvwxtolllllmt{~~|yxwxyzzzwvutuuuvwxxxxxxxwwwwuttuspmkkmnpruwwvvuspnlkjloqqpprssssssrrnnnnoprqnnoopqqtwxxx{{ywvuvwwwwwyyyyzzzywvtrqv{{{|}}|{yzz{{zyyz{}}xuuwwusqpprsru{{z{|}{|}~~~}}}|xtsuwqkpsuutstttrqrtuvutrstxyyyzyyxtsrqrqpq~zvy}~}||{{|}~~~}|{zzzzzzzzywrpopruvsqswzxtpoqtvxwwy|}}~{zxwwwwy{{zzz{{{zzzzzzyyxxxxwwwvwyyxwuuw{{usssvvvvvvvvuuuvy{|}}}}}}{{~zwuvxz{{{{{|}|{zyyz|~~~~~~~~~~~~~~xxxxxxwwwwxxxxxxxxxwwxxyyxxwwwwwxxyyyyyyxxxxyyyyxxxxxxxxxxxxxxxxwwwwxxxxyyyyzz{{{zyxwvvvvwwwvvvvvvvwwwxxxwwwvutsrppprtuuutttttrlhfhklnmmlllnnosxtrqlkklmmmmnnnoonnnmmmmkjiggfhklmmmnmmjh`innopnlj]HDViodJ;8;GY^[[[a_ahilmnortuuuuuvvvusrqqpoooopppooooonnnnnnnnopqrrtnirwvttttsqpnjhjjkoprttuuttsrqppopopokhmrtutrokinuxxxxxzzzzuuvwyzzxwwvwvsprsrnkjmqttqmmmmnrtuvvvtqmlllmlqu|}}z~~ywwuvwwxvtssuuuvwxxxyyyyyyzywuuvuqnllnprtvvtspnljihikmpqrqrssssssttuvtromlmonoopqrrtvvuuxywusrsuvvwwwwwwwxxwvvtsqqxz}~~~}|z{zzzxxx{||xjqvyzvsrqrrqux|~{{{|}}|}}~~~~}}{zwttvxqlrvwvuttvvwwxwwxvutuvwxxxzyyyutssvvwy~urw|~~~}|{zz{|||}~~|zyyyzzzzyywrpooortqnpv{zvqopsuwwxz|||}~~}{yyyy{{{{{{{{{zzzzzzyyyxxwwwxvvxxxwttvy|}ztqrstwwvvuvvvvuuvxz{||||~{xwy|}|{zz{}||{{{||~~~~~~~~~~~~~~~}~~~~}~~~~wxxxyyxxxxxwwwxxxxwwwwxyyyxxwxxxyyyyyyyyxxxxyyyyxxxxxxyyyyyyyyyxwwwxxxxyxxxxyz{|}|{zyxwwwwwwwwwwwwwwwwwwxxwwwuusqpoooqsssrqqqpokgefijmmlkklmmmoonmjijjkmmnnoooppppomllkjjhgfehlnnoonnnlicinnnnlhgWCMdpmeP>8:BR_^]\\`cegimorstuvvvvvwwvsqpponnoopppnmmnoooppppooopqrrrphktwvvutrpmkihhhjloqrtttutssrqqpopqrrpooqstsspqtwxyxxwwwwwwvvuvxyyxwwvsrpoqqplklpuvurmlklntsssrpnlkllklljgsupjkowvptzzwsqqsuvsqqqtuuvwxxyyyyyz{|{ywxxwsolmoqtuuspplkjihijloqrsstssssssttwz{yupnnoopqqrrrrssqqtvusqpprsuvwvwwutttttusttquxzz|}{|zzzzxwvy|{xmQQpy||vqqqsrtz~}zz{||||}~~~~}}|zyvuuvwrptxyxwwwyy{{{yxxwwvwxwwwwyyyyvutuy{}~xvx{|}~~}|{zzzzzz{{|~~|zyyyyyyyyxwsppnnopompwzwusrstwxyy{||||}~~~{zz{{{{{{{{{{zzzzzzzzyyyxwwxxuttuuuuuuwx~~zussvyyxwvvvwvvuuvxz{|}}}|{z|}}||{z{}}||}}}~~~~~~~~~~~~~~~}~~~~~}}~~~~~~~~xyyyyyxxxxxxxwwwwwwvvwwxyyxxwwxxxyyyyyyyxxxxyyyyxxxxxxyyyyyyyyyyxxxxxxwwxxxxxz{|}}||{zyxxxwwwwwwwwwwwwwxxxxxwwusqooonopqqppnmlkigeehilllllmnllmmlkjjkllmmnpppppppponljiihggffimpqpooonmkijjklmmkj^RbknmgYB:9?L]`_]^acgkpsuvuuwwwvvvvurpooooopqponkkmoonorssrqpqrssrrkhnrsuxvqnkihgghilnprstttutsrrqponnopqppprsssuuxyyyyxwvusrrrssstvwxwxxumjikqtromoswxvsnjgcagjmnkjjllkkihi`Uble\\\\fmi`fox{zustrstusooqtuuvwxxxxxyzz|~}{z{{wtplkmpsssqpomkjkllmpprsssssssssrrrtx{|ysqpqppppppooponnoqrsromnnqtvvxxusqqqsttvxvuvsruxwyxyyyywy||zfG9]w}~|wtsssv|~|{{{{||}~~~~~}|}|{wvvtwvvwyyyyyz{{||{yxxwwwwxwwwwyyyyvssuy|~}|{{{|}}}~~}}|{zzzyyyzz{|~|zxxxxyyyxwvsqonmnnmptxwutvvvwxyzz{{|{{{|}|{z{{|||{{{{{{{zzzzzzzzzyxwvwwusrssttuuuvx~|}yxwvvwwvvuvwy||}}~|||}}}}|{{}}||}}}~~~~~~~~~~~~~~~~~~}~~~~~~~~~yyzzzzyyyyyyxwvuuuuuvvwwxxwwwwwxxxyyzyyxxyxxxxxxxxwwwwxyyyyyyzzzxxxxxxxwxxxxxyzz|}}}}|{zyxxwwwwwwwwwwwwxxyxwwwvsqoponooppoomlkjihfegilmnnoopnnnnmmllmmlllnppqrqqpppoomigfggghlqssrqponmlkhegkmnmme`ilkkidJ=;>HX^^]]]_goswwxvvwxxwwwvtpoooppqrsrolhipqonprtusqqqsssqokkortwwrligffghjmnpqsttttttssrqonmmopqpoprssrrtuwxxyxvutrrrrtuuwvussuwtmikpttsqqsuxxvtqno`NR]giiiijkkkhfecVZhe[Ydnnhfltvqkmvvvvwsopqtuvvwxxyyxyzz{}~~~{wspniinrssssrpnopstuurqrrsssrssrrqpprw{ysonnnnnnmmmmmmlllnpssolkklnrtwxvrpopstvwxxwwusqstvvxzzzz{}|yY5Dy}~{wvvuu|~|z{||||}~~~}~~}~|wwwuy{zyyyyzzz{{|||yxwwwxxxwwwwyyyyurqsy{}{{}}||{{|||}}}}|{{{zyyyyyz{|}~}yxxxxxxxxvusqonmmmotxxwvuvwwxyz{{{zzzyyxyyz{||||||{{{{{{{zzzzzzzzzywvvwvuuvy|~}}|zxy}}zyxwvwwvvuuwy||}|{{||}}}|||||}}}~~~~~~~~~}~~~~~~~~~~~~~~~~~yzzzzzzzyyyxxwvvuuuuvvvwwwvvvvwwwxxyzzyyxxxwxxxxxxxwwwxyyyyyzzzzyyyyyyyxxwwwwxyz{}}~~}|{yxwwvvvvwwwwwwwxxxxwwwwtspponoooonnmkjiihgfhjlnpoppoonnoooonnmlkkmopqqqqppppqojgghhiptvvtssqonmmmifgkmnomjikllmllYB<<AQ^_]]]^hpuxyyvuvwwyyywtqprsrrsttspjgkrrnnoqrsponoqqqnlkmpstvsnjfeffgiknpqsstttttsssrqoonoqrvshiprrqqstvxxxxvtssrsutvwwvtssuvuolotvvsrstvxxwutuviQGXdhijjjkllkjhidfrsomsy{yuxzyrhfowzxwtpqstuvvwxyyyyyzyz}yurqppnpuwwwxxusuwyzyxtqpqrrrrrsrrrpnnquupmkkkllkkklmmmmllmnpsnkmplijmptusqqqtuwxxxwwxwttvwwz{{zzz{~zS/\\~}~}zrruwx~~||{||||||}~}}~~~{xvvvyzyzxxyzzz{|}}|zxwwwxxxwwwwxxxwxuqqvz}zz|||||{{{|||||{{{{{zzyyyyyz{|}~~zxxyyyyyxvutrpommnsxzyxxwwwyzz{{{zyyyxxwxxz{|||||||||{{{{{zz{{{{zzyxwwxywwz~}}~~~}|zxwwwwwwwvvvwy{|~~|zz{||}~}}}}}}~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~zzzzzzz{yxxxwwvvuvuvvvvvwvvvuvwwwwxyzzyzyxxxxxxxxxxxxxyyzzzzzzzzyyyyyyyyxxxxxxxzz|}}}}||zyxwwwvvwxwwwwwxxxwwwwyxvrponnoonmmlljjjiihjknpqpommnopppponmmljjlnpqqqqqqpoqnhegihkvyyyvutsqonoomkkkmmmmmmmmmopqkP?9=K[```^]jsvxxxvuwxxz{zvttvwuttuutsqjinpomlmnnnmlkkmmlkkknpstukhfffhiiimprstttttssstutrrsstvx{xheorqrrsuwxyxwuttuvwwwwwwwvuuuvvuuxzzxustuwyxwvtusn]Q[eikkklmooppoopt{~||snkjsxxvtrrstuvvwxyyzzyyxy|}urqrsvuvz{{|}}zwvwyxutrpoopqqrrrrrsrpprttolkkkjkjkkmnnnonmmllnklrwqlknqsuutstuvxyxxwwxxxxxyy{zzyyyy~zG8p}}|yooty{~}||||||||||}}}zzxvvwwxxxyyzz{|}}~~}zyxxwxxwwwwwxxxwzyvtsx}|||||||{{{{||||||||||{zzyxxyzz{|~~{yyzz{zyxwvutrpnnpuz{zyyxxyz{zzzyxwwwxxxxy{|}}||}||||{{{{{{{{|||{zzyxyyzxwy~|yzz||{xwvuvvwwwwvvuwz||~~~}{zz{|}~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzzzz{{zyxxwwvvvuuuvvvvvvvvvuuvwwwxyyzyyyxwwwwxxxwwwxxyyyzzzyyyyyyyyyyyyxxxxxxxxy{{|||||{zyyxwwvwwxxwwwwwwwwwwxxvronmnnonnnnmlllkkjkmopppnmnopppooonmlkjjlnopqqrrrpoolfdikkq|zvzwwvutrqqonlkllllklmlllmnoqaG8;EW``b_eqtsrpqsvwwwxywtuyyxtrrstsrqklpolkkllkkjjiijihijkopqrqigghjkogenqsstutsrpprtutrtwxxyzzzphprqqstuwxxwwuttuvvuutttxyyzxxxwwxyyxvuvwxzyxvrolmgacgkmmmnorrsssssv|~~~ypqrnpuwuutsssuvwwxyyzzyywwy~}urppqsstuxyz{|{yvtssrpooommnopqqrrsstttuusnookighjklnooppomkjijkpxzwtswxyyyxwwxyyzyyxxxyyz{{{|{{yyyz~yNW{|}}{xqqvxwwxy|}~~|}}||{{{{{{}}~}xzxwwxxxyyzz{{|}~~~~~}{{zyyxxwwwwxyyxxxyxtw|~||||||{{zz{|}||||||}|{{zzyxyyyz{|}}|{{{||{ywvvwvtrppqvz||zyyyyzzyyxwvtuwxyyyz|}}}}||||||{{{{{{{{||||{zyxxxxvuvy|{wwxywussstuvwwwwvuwz|}~}}|{zz{}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~yyzz{{{{yyxxwvuvuuuvvvvvvvvvvvwwwwwxyzyyxxwwwwwwwwwwxxyyyyyyyxxxxxyyyyyyxxxyxxxxxyzzzzz{zyyyyxwwxwxxxwwvvvwxxxwvuqnllmopoooonnnnmmmmnoonnmnonoooooooommkklnnopqrssqppnhgnpsyzuzxwwwwvsrpnlkkkkjjjkjjjkllmhO<:?Q]__`lurkfbemsrpnmonquwvrnjknpqqpmnpnkkknmlkkjjkkjiilmpqpomihjlnqq`dorssuutqommorspptvxxyxwxvoqrqprstvwwwvutstuuutttuvwxyzzyxxxyyxxwwxyz{xrljjkjjijmnooprttsrqqru|~~~~vmmqtqruvvurrrtuvwxxyzzyxvuvzwoopppqqqqrstuwusrppppoonnnnnnnoprrttuuutsqookedghjlmoqrrpomjiikqx|||zz|}}}}|zz{{{{zzzyyxxz}|}{{{zxwy|w[o{}}|xuwyvnmmnstvx{|||{zyyyyz|~|xzxxxyyyzz||||}~}{yywwwxxyyytuvwtvz|{|||{{{zz{|~}|{|||||{{{{zyxyyyxyz|||{{{|||zxwwxxvtsrsw{||{zzzzyxwwvuttvxzzzz{}~~}}|{{{{{{{{|{{{{||||{zywvvutsrssux||xusrrqqrsuvwwxwvuwz}~~~}|{{{{{}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xyyz{{{{zyyxwvuuuuuuvvvvvvvvvvwwwwwxxyyxxwwvvvvuuvwwwwxxxxxxxxxxxxyyyyyyxxxxxxwwxxyyyyyyxxxyxxxwxxxxxwwvuuvwxyxvtrollmopoooooooppoononnmlllmnooopppponmllmnoopqrrrrqppnnpsy~zxyxxxyxwurqnmlkjihhiihhhhjkkjUA;<LZ``fjppgZX[cda^`diknmjhggZ^iknnnmnnkjkkopnmlllmnnmklnqqpnjijmoptlajqsttttrolkklmnnqtvxyxxwwwrqqpoqrsuvvvutssttttuuvwwwxyzzyxxxxyxxxxyyzzvmggijjkkmnopprsssrpooqu{~~yoljmqqqsvwuqpqstvwxxyzyxwtstuwqnopqqrrqqqpqqqpooooppppooonnnmnorsuuvvutqole``dillmnpstsqpojgjry|||}|}~~~~}|{{}}}|||{{zyyyxptvz|wuyyodv~}|}|xz{xtmkklnnoqwzz{zyxxxxz||y{yyyyzz{|}}~~|{yyyyyyyyvvuutuuwvyyzxxzz}}}}|zyz{|}{yy{{zxwxyxxxz||{{{z{|}|zyyzzywvuvx{|{zzzzyxxwwvttuwz{{{{|~~~~}|zyyyz{{{{{{{{|||{zzywuttsrppooqsv}{ussttuuuvxxxxxvvx{}~~}|{{zz{|}~~~~~~~~~~~~~~~~~~~~~~~~~wxyzz{||zzyxwvuuuuuuuuuuvvvvvvwwwwwxxxxxwwvvuuuutuvvwwxxxwwwwwwwwwxxyyyyxwwxyyxxxxxxxxxxwwxxxxxxyxxxwwwvutvwyxywuspnnnpppoppppopqqppponmlllmnnnoopppponnnnoppooqqrrqpppqpt{}yyyyyz{{ywtrpnlkjhhijjhhggiijj]K><L[adfchd[SLILQOLQYac_WRSX\\RW_eikllljhgikorqpnmmnprqmmoqqomjjmpqrpggqtttttspmjiijnpsuuvxyvtqrsqponnoqrsuuutsssttsstvxzxxxxyyxxxxxxxxxwyyyysjefiijkkmooopqrrqpopprv{~~wnmllnopruwtpoprtuwxyyzywurrrrrpprrsssssrrqpopoooopqqqqppponnmoqtuvvwvutroia]_dillmoqstssrsolpy{{zz{z{}}}}}|{|~~}}|}}|{zzyn^\\Yiqwwuzzpnwyzy{zw{{wrmkjkkklntvxyxxwwwxz{~~|xzzzzyz{|}}~}{zzzyyyyyxwvttsrqrsvwx{|}{xvvvvxz|}|xvxyzyxyxxxxyz{{{zyz{|{zyyz{{zyxxy{|{zyyyyxxxxwvvwy{{|}}~~}|{yxwwwyzz{{{{{{|{zzzywuttsrpoopqqs{xwwyxxyxxyyyyxwwx{}~~|{{zzzz{|~~~~~~~~~~~~~~~~~~~vwxyz{|{zyyxwvvuuuuuuuuuuvvvvvwwwwwwxxxxxwwwvvvvvvwwwwwwwwvvwwwwwwxxyzzzxxwxyzzyyyyyxyyyyxyyyxxxyxxxxxxwustuwwyxwusrqqqqqqqqqqqqpqpppppoonnnnnnopppooonnopqqponooooooppqptz}{yyyxyz{{ywtrqommlkjklkiiihijjigZD>M\\abahmd^XN@AECACGRQIB@FMRTYY_cfhjhffgijlopponnprssomnoomlklmnppockttsstsrmkiiijnmjcdkswqnhknonnmmnopqsssrrsssrqqqsuwwwwwwxwwwwwxxxxwyzwuoiefhijklmnnoopopoppqrtw|yqpnmnooqsvtpoopstvxyzzywtrqrrrrsttuuutsrqqpopooopqqrrrqppommmortuvvvvuutrohdcbehklnprtssssuxyywvwuuvwz{{{{{{||}|||}}}}{{zvkcX`\\\\aquvwuvutsutswvrmljjkkloqtuuvvwwwwxyz|}{}{wzz{{yyz{|}}|{zzyyyyyxxwvwvrnmosz|||wtrrrtuwy|}|xttvy{zzxxwwwxz{{{zzzzzyyy{||{zzz{{|{zyyyyyyyyyxxxy{{|}~~}{zxvvuuuwz{z{{{{{zzzzzxutttrqpqqrsuy{}{zz{{{{zyzzzzyxxy{~~~~~}|{{zyyy{|}~~~~~~~~~~~~~~~~~~~~~~~|}~~uvwxyzz{zyxxwwvuvvuuttttuuuuvwvwxwxxxxxxxxwwwwwwwwwwwwwwwvvvvwwwwwxyz{{{zzyyzz{{{zyxxyzzzyzyyyyxyxxxyyyyvsqrsuwwwvuuutssssssrrrqpppppqqqqponnnnoopponnmnprsrqpoommnopppqqtxyywwxwxyzyxurrqqopppppnmkiiijkkjneN?K]a_bfihef[ECA><>DPI?>ENRRV]__`cefdcglmliijlnppqqstonmnnmllmnmmmjilstsssqokjjiijljZMOSV[acgknnmnmnooooqqqqqrrrpoonnpsuvvvvvvvvvwwwwxxzyunifffghjllmnnnnnooprstuvx|ysqonnooprttrpnnpsvxyzzywtsrrssttuuvvusqpppoppooppqrsssrqomijloqrrttuutuuuuqlhbadiknprtttsov|zvsststuuwwvvvwyzzzyz|}}}~}}||~zrsd[`jegtwusponmmonkhkijllmsvxvssuwwwwwxyyyx{~{xz{{{yyz{|}~~{||{zzxxyyxxyxyxupoqw}|yurrtttuwy{}}|xtrsvz{{yxwuuvxz{{{zzyzz{{||||{zz{{{{zzzzzzzzzzyxxyz{|}~}{zxwvvuuqswzyz{zzzzzzzzxvuuusrrrsstvwtty|||{zzzzzzz{{zyxy{}}~}}|||{{{zyyy{||}~~~~~~}|~~~~~}~~~~~}}~~tuvwxxyyyyxwwvvvuuuuttttttttuvvvwxxxxxxxwxxwwwwwwwwwwwvwvvvvvvwwwxyzz{{|{zyyyz{{{zyxxxyzyzyzzzzzzyyyyyzzxtnoruvvvvvvvuttttssstrqppopqqrrrqponnnnopppnmmnortsqrqonnnoppppqtvwwvvvvvwxwutqqqpqqrsrqpnljjjklkjmj\\CJ]a^djjjikdQA><;<FRK@<IT\\^dfc``bcccdkssqkghlpqqqrstpnnonnmnonlkjijmrssssoljjkkjklkie_VQQTX_cfiklmmnnnoopooprrpoonnoqrtuuutttttuvvvwwwyxsjecddfhjmklllmmnpqsuvwwxy{}~~}{vsqponoopqstsqonnrtwxzzxwutssttuuuvvutqonopppoooppqrssssroifhmnppqrsttuuvwvspmifgjlnqstuutqtwvtsstvwxvttrrsuwxwwvwz{|}~~~}{}wrrpd`kuvvtpmkikjhhkjlosuz}}yutuwwwwwwxwwxz||zzyzzzxxyz{|}|y{||zywwwxxxxyyxvtrty{yvttuvutw|~~}}|ywtsuxz{zywuttuxz{{zzyz{z{|||||{zzz{zzzz{{{{{{{zxxxxy{|}~~}{ywwwwvurrtwxzzyxxxyzzzywvvvxvttsstvwsqt{~z{{{zzyz{z{{|{zyyz{|||{{{{{{{zyyxz{|}}~~~~~~~}{~~~~}~~~~~~}~ttuvvwxxxwwwvvuuuttttsttttttuvvvwxxyyyxxxxxxwwwwvwwwwvvwvvuvvvvwwxyzzz{|||zyxyz{{{zyxxxyyyyzzzzzzzyyyyzzzwrqruvuuvuuuuuuuutttttrqpopqqqrrrponnnmoooonmlmorttttsqqpppqqqqrstuuuvuuuuvutspooorstuusqoljjjjkkkllfKM^b`fjijjki^K=:;?NZRE>N[hnsngb`acccgpusslfgjnnlloprqqqqqqqrrokhghjnrsttrmlmmmmmllmpqnje`]ZVUX_fjlmnonnnnnnoqqoonnoquwwvtssrrrsttuuuuvwwrjdcccfilppppnmmostvwxyyxy{}~}|ywtsqpoooooqrttsronpqtwyyxwutssttuuvvuusonoprrqpppppqrsttsrnggmppqqqrrstuuvvrlhiknnlmnqtuvwvtsttsstuyzxtoqooprttuuvvxz{|}}}|{|~~}{unmsvxxuqnkjhghlklqw|}xvvxxxwwwxwwxy{zzyxxxxwxy{{|}~~zx{|}{yxwwxxxxxxxwutuyzxvuuusrsvz|||||{zxxxy{{{zxvuttvy{zzyzz{z{{||||{zyzzzzzz{||||||{yyxxxz{|}~}{ywvwxxwvtrruvyyxvuvwzzyxwvvvxvsqrrsvxvtsw~wxzzyzyz{{{|||{zzyz{{{zzzz{{zyyyxz{||}~~~~~~~|~}}}~~~~~~~~~~~tttuuvwwwvvvvuutttttssttttttuvvvwxxyyyyxxxxxwwvvwwxxwwwwvvuuvwwwxxyyzzz{{||{zyyyzzzyyyyyyxxxyyzzzzzzyyzyyyxwvwwvuuuttttttutttssrqppqqpqrrrqponnnoonnmlkkloqsuutrqppqrrrrqrstuuuusqqrrrqommnpqrrttqnlkkkkjklmmiXT]bdfgghiiih_B99AR^ZM>Ofvyxqjd_acdfmttpojgijjjiijkorsqpssssqmiffikpstttsmnrrpoooooqrssrnfa\\XW\\begilnoooonnnoonnmmnrvxxusrrqqrrtssssstuurlgfffiloquwvsnoqrtwxyzzyyz|~~|ywtrrrqpoooopqstutsppqruxxxvutttstuuvuutrpprtvvusqqqqqrstttsnjmuutrrrrsttvuutmd]]diihjmpsuxyvtrrrsstwyxsokppnnoqqsvwwwyyz{{{zz|~~~~~zrsuwyywvrmhhikjkpr||{zyyxxxwxwwxyzyyywwwwxyz||}}}}~}zy|}}|{zyyxxxxxxyxxwxzxussrqpqtvvwwxzzzzz{{{||||zxywuwxzzzzz{{zzz{||||zyyyyyyz{||}~~}|zzzzz{zz{|{ywuvwyyxvtrqrsvwvtstvyyxwvvvvutpoqrsuwxxxx|~uuxyyz{{{{{|||{zzyyzz{zzzzzzyyyyxyz{|}~~~~~~~~~~~}}}}~~~~~ttttuvvvvuuuuutsttttttttstttuvvvwwxxxxxxxxxwwwvvwwxwwwwwvvvvwxxxyyyyyyzzz{|{{zyyyyyxyzyxxxwxxxyzzzzzzzyyyyzzyxwwvuutssssssssssrrqpppppqqrqqponononnmlkjijlostoloqqprrsrrrrsttsromjjlnnnmmllooqqstronnmmkjillkia[^begfffgffkhG98EU^\\UGQn{|xrkfbbefjqsspllnpmjlllkkmrroostspligffilqttutrppqqqqqrrqrrsturomjgdbaaaeikmopponmmnmmllmpsttqpqqqmlpvvsrrrsstsolkkmqsuvwxvtprtrswxzzzzyxz~|zxurqrsrqponnoprsuvwvtrpruyyvtsstttuuutssrrsuxzzyvtrrrrsttttsonpwwvtsrsstuuuutqg]Y]^_aejkotwxwurqqrrtvxsljinqoooqprwxxxyyyyyxxxzz{}~}~}}vutuy{}}zrkikjijmlw}{zyyxxwwwxyxxxvuvxyz{}}~}|{{{{|~|{||}}||{{{xwwxxyzzyyxwtqooonorvwuttuwxxxxy{{||{}|{}zvwxzz{{{||{zzz||||zyyyxxxyz|}~~}|||}~}{zzzywvuuwxyxwusqpqstsrqrtwxxwwwxyzxsqsttwy{}~}|~}tsuxyz{}}}{{|||{zzyz{{yyyyyyyyyyxxyz{|}~~~~~~~~}~}}}}}~~~~~~~~~~~uuuuuuuuutttttsstuuttttsssttuvvvvwwxxxxxyyxwwvvwwwxwwwwwvvwwwwwxxyyyyyzzzz{{zzyxxxxxyyyxxwwwwwxxyyyyyyzzz{{zyyxwvuttsrrrrrrsrrrrpoqpooopqqpoooponnmlkjihhimstjempqpsssrrrrrssrndcfhkklmmnnnooprsssrqpqib\\gligfa_`beffefgfhqlE8:IZ_\\_Z]s{{wsnmicchmpqrrmorspnnnommmrokosrpjfegffilqtttsqpopopqrssssrstutrqpnlhb_^aeimpqqponmlllkkkmopnmmpqqpnouvsrqqrrstrpppstuvwwwutsvxwwxyyyyxwtw~~{ywtrrrssrqponnoqrtvx{{urpsxxvtssttuuutsrqruvwy||{yvtrrrrssttsqopuwvutstttuuuuvvnfa`_^^addhqxwurnoqqrsttoiijlrqqrrruz|zy{zxyywuuuuwy{|~}~ywtuy{}~zojlljjkiq}|{zyxxwwwwwwvuvwz{|}}}}|{ywwwy|ywxxyyzz|{{wwwwy{|{xwtpnnmmnoqsuvutstvxxwxyyxxxx{|}~|{{yz{||}}}|zyz{{|{zyyxxvwxy|~~}~~|yxyxvuuuwxxxxvurppqrqppqsuwwxyz|}~~{zyyzz|~zz~|trsvxz|||||{yyzz{{ywwwxxyyyyyxxxyz{|}}}~~~~~~~}}~~~}}}}}}~~~~~~~~~~}}~vvvvuvuutsttttttuuutssttsstuuvvvwwwxxxxyxxxwwvvwxxwxwwvvwwvvvvwxxxxyzyyzzz{{zyzyxwwwyyxxwwwvvvwwxxyyyyyz{{zzyxxwvutsrrqqrrrrrrqqppspnnnopqpooooonmlkkjjhhhkqumekrsrsssssrsssqonjjkkllnppmhdhoruutttspmYOYedca`__`beecbeghmxuO;=N]_]gmlwzywtpnibahnoorrnoppnnlllllnqonqomkgeghffhkpsssqommnnnoprsrrrrtutqpopqomiedehlpssqponmmllkkklmlllnorsqqsrqqpppqrsponmopqrssttttwxwwxxwvvuuqs~}zxvtrrrsrrrqpooooprttxxrompwwusrsvuutttsssuxxxz}~}zvtrqqqrrsutrpruvvuttttuuvutuupmmllhedd_bjwzrqoopqsrpolllmostuvvvwz||{~~||}{xxwwxy{{|{|~{yuuyz}unnolkkkr|zzzyxxwvvuvwwvxz|}}||{{zwvsstvz~}}{rpqqsstuvvvvvvvz|~|uqqmmllmnprtuuuutuwzzyyzywutuwz||||}{{||~~~~|{zy{{{{zyyyxvvwx|~~~{xwwvvvvvwxxyyxwtqppppoppqsvwy{}~~}vwzxtrrtvy{~}}|{yyz{{yvvvwwxxxxxxyyzzz{||}}~~~~~~}}|}~~~~}}}}~~~~~~~wwwvvvuttssssssstuutssttsttuuvvvvvwwwxxyxxxwwwwxxxxxwvvvvvvuuvvwxxxyzyyyyyyzzyyyyyxwxxxwwvvvvuvvwxxxxxxyzzzyxwwwvutsrrqqrrrrqrrqqruommmnpqqpooonnmmllkjiiikotqjkmqtsssssttsqnoomlllklnqsrolorsvvuvtsrfIM^a\\ZYZ[]^_ecbadgkpzbB@U^_aovtxxxwtqlgdcglmkpqmljjjkjjklloqrtrlhgfikkggiloqrrpmlkkkklnpqqqqrssrpppppppoligilptutronnnmmmllklmmlllpqrqpoooooopqqnlihiknpqqsttsrrpswuuuutrqq|{xvtsrrrrrrsrqqponopqsrnlklovvtrqrvutttttuuwyxwy|}|ytrqppppqruurprtuutttttuuvusrqoquuvqmmh\\Zfsytrvvrssqmlmoqrsuvwxxxxxyzyyz}yzyyz}{y}vuz{zvvy{|~{uusollmt{|}|{{}{zxzyxxwvuvvwwxwz|||{zyywusrpqrsvyyztllnnooonnoosssuz}}qmooommnoqrttuuuuwxzzyyz{xvtuuxzxxyz||||}~~}{zy{zz{zzzzxwvwx|~~{yxwxwxyyzz{{{{{ywsqqpoooopruwy|ztvxwutssuwy}~}|zxxyzzwttvwvwwwxxyz{||{{||}}~~~~~}}}}~~~~~vvvuuuttstttttsttuuutttttttuuvvwvwwwwxxxxxwwvwwwxxxxxvuvwvvutuvwwwwwxxxxyyyyyxxyyyyyyxxwwvvvuvvuvwwwxxxyyzzxwvvvuttsssrrrrqqqqrrqrvnmmnopqrqpoonmmmmnmkjjjlnsspmknrrssstttsqoqqpnlkjkmpstwyvspkmqwrsvfGYebYTSVY\\]]`a`cfhjmvkDFY^cosoruyyytokghfeeeagkhhffhilnpqqqrssojgfglonkjknpqqqpmlkihhikmnoppqqqpppppopqqqpkinrrwwtpoonnmnmmmnnnnnmoqrrqonlmlmopppmihhknstuvwwvutstuqvxxuqpq{~ywusrrrrrrsssrrponnoqsqllkopssqpoprsstuvuvvvvvvxzzxtpoonnoprsvtrpqsttttttuuuutrokmsxwwsstnXUikryr|}vwwqnnpsuutuxyzzzxvuvvux}wxvxz}|xx{upt{|zzz{{}}}ytpmpuyzyyyyyyzyzyxwwvvwwxxyy{|{zxwvsqqpppprtvwwx~tlmonnnnmmnmopqsy}~|qmmoommnoqssstttuvvwxwxxyxwvvuwxttuvz{{z{|}~}|zyzzzzz{{{zywxx|~}|}|zyyy{{|}}~~~|zwrqpppppqrtvy|}yutuvutsttuuy~|ywuvxxvtuwxxxwwwxy{}~~~~~~~~~~~}}}}~uutttttttttttttuuvvuutssttuvvvwwvvwwwwwwwwwvuvvwwxxxwvvvvwvvuuvvvvvwwwwxxyyxxxwyyzzz{zxwvvvvuuuuuvvwwwwxyyyywvuuutttttsrrqqppqqrqrronmnoprrrrponmmmnonlkjkmoruvuomrrsrstsssqprsqpmkjjlpstwywtk\\]htqttdUimgZQSY]^]]_``dghhjsoGK]dotolopxzuponkljcaecdeefgijloqsssrqrpmigfhmppoooqqqqqpomlkiiijjklnoopooppqqppqrtsoknssyzxtqonnmlmloppppopqrqrqpmkjjjiimqnjjkoswyxxyzzyy{uqqw}yroptz|yvtrrrrrrrsssrrqponmiqrnomnoponnnnorsstvvutrtuwwsqommmmmnopsuvtrqrttstttuutrqpnkhkrxwwtuwoWS`[qzutuy{|rnqtwwtrrw||||zwuuvvy{zwy{~|ywsuzwuw|~~~|{{{}zuqsvxxwwwwwyyz{yxwwwwxxyyzzz{zxvtrrqpqqqqtuwvux|vpppoooonnnnnoortwxxwsponmmoprssstttuuuuuuuuvvwwvvvvuutuwyyxxy{|}}{zzzzz{{|}|zyxy{~~~~~~}|{{{{}~~}{urqqqrrrrsuy}}zvttuttuuuttv{{wvtuwwwvwz{yyxwwyy{~~~~}}~~~sssrrsstuuuuuuuuuvvuutttttuvvvwvvvvvvwwwvvvuuvwwxxxxwwwwvwwvvvvvuuuvwvvwxxyxxwwxyz{||zyxvvvvvvvvuuuuvwwxxyzyxvutuuutuutrrqppppqrrsqqpoopqsssrqonmklnqpmkkmoqsvyytqqrssttttsrqrttspmjilosttuvvsj`[lsvnacie`SNT]ab_^_`^bfggir}qKRaqtokmnnvuomorrokddlnpjghilmpqrrqqqqrpliihimpqrrrsrqpoppqppnmljhiiklmnnopprrrqqsvxwomqv{~|vqonnmlkkquusttsqrrrqoljijjjkosomnquy{|zz{{||{|rpvzztopsx{{ywtsrrrrrrsssrrrqpomgmqpnllmmmlllmnprrssssttsrqqomlllmmmmnosvwuttsttstttutrnifeddenxxxuvytYQTe~wsstz~{rosvwvrnox~~}|zxxxwy}}z|~}{rorz}}}|zz|zuvwwwvvvxxyz{{zxxxxxyyzzzzzyyxwvvuvuvxzzxxwuuw{{vuttrrqqqqponnopsw{}vqnmmpqsttssstttttsssstuvwwwvvwvuuuwyyxxyz}}|{{{{{{|~~}{yy{}~}}}|~~||}}zz{wtttstttsttx{~|xttuuuuvvtsuw{|||zuvtuvvxyz}|{zyxxyz{}~~}~~~~~~~~~rrrqrrstuuuuuuuuuvvuuttttttuvvvvuuuuvvvvuuuuuvwwxxxwwwwwvwwvwwvuuuuuvvvwxxyxxwvwy{{||{zxwuuvvvvvvvuuvwwwxxxxwvvvvvuuvvusrqqpppqrrssrqppqqstsrqoljjknrpmklnqrtwyyvrqrssttttsrqstttrlihkorsssuvuqj_kqrnfieYSHLXbgf_]\\_\\bffgipzrV\\lqoklnknrqlnqttpkhlrrqdbjmnpstspmmoqtqnkkkloqrrsttrqommostvutqmihgijllmnpqssrqqsvvusnmpuxwrnnnnnlklsxzyzxupoqrroljhhjnrsrmmrwz{}}{{||||zvpu|yolqwx{||{xvsrrrrrrrssrssrqpnkkmonlkklkkkkkmnnnnnnrvvqmllonnmmllllmnrwwvtssssttuuutoh`]^``^hwxxvuyzj\\]koursuy}vqqsuvupmox~|{xwzzy{{~~vqq{~|zz{}}ywvvwwxxyyz{{{yxxxxyyzzzzzyxxxyz{{zxz}wtrruvy{||{|{{ywvvuusqponoqw~{tomnqsuuuttssssssrrsssstwxxwwxwvvuvxxxxwy||{{{{{{|}~}{zz|~~}{zzzzyxwy~||zxustwwwvvvvuuuvwxxz|yuuwxwvuuuttuvurwyvvuuwwwyy{{zyyyxyz{}~~~~~~qqqqrrstuutuuuuutuuuutttttttuuuuutttuuuuttuuuvwwwxxwwwvvvvvvvvvuvvuuvvvwxyzxwvvwxzz{||zywvuuuvvwvvvvvvwxxwwwvuvvvuuuvvvtsrqqpppqrrrrrqppqstsrqoljjknqpmlloqsuxywtqpqsssttssrrstttrkghmqrsssuvuroopggonmfYPKR^fmn`\\V\\]adefgowvadkkjlnnnoooopqrrommoqrqa]jmnqssqnjjlpsspooooqrssttsrpolmmpqoqtrokhhiijklmoqrrrqpqrqpoljlnopnmmnnnllmswy{{wrmnqrspkhffjqwtplouzzyzz{{{|zxurtx|uagv|}}}}|zwtrrrrrrrrrssssrqookkmmlkkkkkkkkkjjjjjmsvsnnoonnmllkllmmnsvvusqqstttuutsia[Z]_^[fwwxvuxyvn^Xpqptvxztqrrttsqory~~|{xxzzz|~{~{uuy~~~~}{{||~~~~~}ywvwxz{|{{||{zxxxxyyyyzzzywvvx{}|{}ysnnpsxyyzyz{~~~}|{{zzywtqpporz|vqnosuvuutttssssrrrsssrswzyyxxwvvvvvwwxxx{{{{||||~~|{{}~{xwuuutssuwxvvuusrtxxyxxwwvvvuutrsvz~zxwwz{ytssuvuutqmtxwvuvxwwxxyyyyxxxyz|}~~~~~~~qqpqrrsstttttutttuuuuutttttttuuuttttttttttuuuvwvwxwwwvvuuuuvvvvvvvuuuvvwxyyxwvuwwyy{{{zyxwwvvvwxwwwwwvwxxxwvuvuuuuuvvvwvtsrqpppqqrsssqppprssrqomkkkmqommmortuxxuqopqssstttsrrsttsrkfgpssssstutrrqqj_ipoj\\TU]dioq`XNX^`bceckwzjiigjnomlnnnoonnnmijlnopifjkmruollkkjmprsrrqrrrsssrqonnnnknmklqqoljjjjijkmnoqrqpnnnmlkjiijjkklmmnnnnosuuopwqmnprtqlcbgossqoorrtsuyxvvwwtqmqyvwj]fv{{||}}zxtsrrrrrrrrrssssrookjmllkkkkkkkjihhhhikpqmorsromllkklmnnosuutqpprttuuutpd^XZ^`^\\gwwwvvwyzqU_omosuvvsqssutsstwz}}{zyyz{{}}{~yvwzz|}~~}}}}|||||{zxwwy{}~~}}||{yxxxxyyyyyyywvtvz}|}yrmlnsx||{yxyz}~~}}|||||yusqnnt}|wuqpuvvuuutttsssrqrrrrqsy{zzyywvwwwvvvxyyzz{||}}~~~}|}{wusrrrrrssssrrrrrtvwxwwvvuuvwxvsstvx{xrtuuxxtpqqtuuutrqtvvvvuttvxwxwxxyxxzz|}~~~~~~ppqqrrrrsssttttttuuuuuuuuttstuuutsstttttstuuuvvvwwwvvvutuuuvvvvvuuuuuuvwwxyxxvvvwxyzzzyyyxxxwwwwwxxxwwwxyxxwwwusstuvvvvvusrqpoopqrssrqpqqrstrqolkjiknnmnnoqstwwtqoprrssssssrqssssqkgjprrrrrsttrrqqpdfookb\\`filorbUOX]^__`]exvhfhglnmkkmppnlkkllhgilorrpljkmnhgklliilotttsssrssqpnlmmrronnmjmpomlkkkkjklnnpponlkkkjiihhhhijkklmnoqssocZeyupmptvsmb`hrusqqsuooruzupppqokjqyqra`irvwxz||{xusrrrrssrrrssstsonlklkkkklllkkjihggfffggglqtsnmllklmmnopstsrppoqttuvusl`\\W[``__jwxwwwvyzt\\`jlnrtstrrtvxwwuxz{||{{{zz{|}}{~|wuvuw{}~~}}}}}|||zywwxz|~~}|{zyxxxxyyyyyyxvuuw{~~~|qlkosz}~{yxxz}~~}}|||}}|yvtqoox|{xwsqtuuuttttsssrrqrrrrqtz{yzzyvvwvvvuvxyzzz{|}~~~|yvtsrrssssssrrrqqsuuuuuuutttw{ysvxwvuvz{srsrqqqqqqsttuusrsttturmntwwxwwxxxy{{}~~~~ppqqrrrsrrsssstuuuvvvuuuuutstuuutsssttttstuuuvvvvvvvuutttuvvvwwvvuutuuuvwxxxwwvuvwxyyxxxxyyyyxxwwwxwwxxyzzzywvsqqrtuvvuutsrqpooppqrrrqqrrstutspmljhhjllmmnoprvxwsqqqrrrrrrrqpqpqpnjknonopppqrrqqqrrmhmpmhdgkmnoqeVTXY[][YXcsldfhgkmlkknrqnkjjkmkkmpuvurmjgdb_ajmlggilsttssrqrqpnkjjkrtqnlkjlonlklmmlkjlnnoonmkjijjiiiiiijjklmnoprtsm^Vcyvsopwywqdairutstvtnqusvsollmlklpwol\\clprstw{||zvsrrssssssrsstuspmkkkkkklmlkkkjihggfecabejnoomllmlmnoprsttrqpppqstuvtph_\\X]a``bmvwxxwuxzwf^fopsuttrsuy{zzwzz{{|||{{{{|}~}|~~wssrtw{|}||}}}|||ywvwy|~}|{zyxxxxxyyyyxxwvuvy{}ulknuy{yxyz|~~~}|||||~~{yxxvpuxxwvtrstttsttssssrrqrrsrrtyzyzzyvuvvvvuvxz{zz{|}~~}}~}zwtssttuuutsssqqqrrsssssrrru{|q{|xusqt{}~wrppprrqqrsttusqpopqsqlmtvwxwxxyyy{|~~oppqqrrsrrrsssttttuuuuttttsstttttsssssssttuuuvwwvwwvuutstuvvvwwwwvuuuuuvvwwxwvvuvwwwxwwwwxyyyyxxxwwwxxyzz{{{zwsrqrtttutttssrqqpppqrrrrrsstuvvusqniffijlllmnopvyyvrqqqqqqpqpponmljhgkolhjlmmnooopprspmnpolikmnoopjZVVTWZWSWckdejggijjklprrnkklmnoqstwwusnje\\W\\bikjddgjpssqoopronkjhhjoolkjjjjjjiijmnmmklnnoonlkjjkkkkkkkklllmnoprrtrokbhxxvsry{yuifksvttvxtnusmrupnmmlknosogYdloppqtz}}{wtsrssssssststutpmkjkkklmnmkkkjihhhhhfbcgkmkhjklmmoqrtvvutrqpqqqssuusme_\\Z^aabfouwwwwuwyyncjtquwvuuuwxzzzyzz{{|||{{{{{|}~}}wrqrtvxyz{|}}}|{{xvwyz|~~~|{zyyyyyyzzyyxxwwvwyz|}}|zupoqw|~{yxxy{}~~||}}}~{z{zvwvvvusqqrrrrsssssrrrqqrssstwxxyyxutvwwwvvwz{zyz|}~~}}~|xwwwxxxyxwusrpppqqqrqqqqpsyq|wtrrsru}uqoorrrqqrsttsqpooqssrstvwwwyz{yz|}~~~~~~~~~~~ooppqqrsrrrsstutttuuttttttttsttssssrrssttuvvvuvwwvvvuttstuvwwxxxxxwvvuuuuwwwwvutuvwwvvvvvvwxyyyyxxwxyyzzzz{{zxusrssssssssttsrqqqpqqqqqqrstvwxwtsplihijlkkmonov{zwrppppppppoonlkigefimifhijkklmnoppqpooppnlmnoopom]TRPUUMOWba^fifgkkjkmqsrnlllnopsuvwwvtokcZX\\djjhdceioqrponnoonljhhijjjjkjiiiihhjloppoooooonlkklmmlmmmmnmnnoppqqrrqoolnwxxwwxyxukmruvstwxspxomsurppmkkmmppe]fnppoorz}~xxvsrrrsstttttstsoljjkkklmnnljkjiiiijkkhhbjoleiklnoruvwxwutsrqppqrstsqjc_]\\`abdiptvwwvvvwvqlnsqtvwvxwxyz{{{{{{{{||{{{z{|}~~~}vrqqstuvwx{|}}|zywwx{yz}|}{zyyzzzzz{{zyyxxxxxyyz{zzvqnrv|~|yxxxy{~}}}}~~~||{{{zvutsrqpppqqrrrrrrssrqrrstuvwwyyxttvwxxvuwyzyxyz{|}~~~}}~~|||}}||{zwtrpooppqrqpppqrvyv}vtttrpqv||unmoqqrrqqrstvspooruwxwwwwxy{{zz|~~}~~~~~~~~~~~~~~pppqqqqqrrrsstuuuuuttttttttttstssssrrrrstuvvvvuvvvuuutsssuvwxxxyyywvwuuuuuvwwwuutuvwvuuuuvwxxxyxxxwxyyz{zzz{zzxvutsqqpqrrstttssrqqrrqqqqrtvxyywvupnmllnnnnpopw~{yspoppooooonmkjhgeeghfdfgghijlnopppoppooooooppqqp`TOMTOELYaYZgdbeoolmorsspnnmnnoruuvvvurkbXYckligdcehloqrpnljfcddfghijkmmjhiiijijloqsrqqoonnmlmnnmmnnooonooppppppppooqrvwyxxxxwuqtwvwtswwttytsttrpoljjkmoqd_empqpopw~yqusrrrsttuuutttpkjiijkklmnnljkjjjjjjkjlob_eigklmnptwxxxwutsrqppqrssrokd`^^b`dgmqsuvvuuuutqqrrrrsxyzyyy{||||||||}}|||{{{|~~|urqprrstuvy{||{yxwx{}|}z~zzzz{{{{{||{zzyyzzyxxxxxwsopy~}zxxwxz~~~~~~}||{{{{{zxvusrqpooppqrrrrssssrqrstuwwxyxwtswxyxvuvxxwwwxy{||~~~~~~~~|zvsqpppqqrqppqqrstvz~~ysuttsrqru|{qljlorsrqqrtvtpmnqvxzyxwxy{}}{{}~~~~~~~~~~~~~~~~~~ppopppppqrrsstuuuuttttttsttttssssrrrrrrstuuuuuutuuuttsrrstuvwxxxxxxwvvvuuuuwwxwvuuuvvvvvvvvwwwwwwwwwxyz{zzyyz{zxvuromoqqrrsttttssrrrqqqqrtvwy{zxwtrqqqqtsqnnry|yspooooonoonnlkjhfecccdfghhiklnoponmoolllpqqpopqrcTMLTNCQbhZYc__cmpnoprtsqpommmopsttuuutncX\\fnlllkgehjnpusmgb_beffghijlopkhijkkjjlmpstrqpnmnnnooooopqqqoooppoooooooopqqsuwwwwxwwvvvwxtrvvuvxwurnhgggffgknpfdgmpqpqrvtusrqrrstuvvttsnhhhjkkkklmnljkklmmkkihmvk^\\bjmnmnpsvwxwwvtsrqqqrrssrplea_`caflqrrsuuuttsrqqstusu}}|zyy{}}}}}}}}~~}}|{z{{~~~ztqppqqrrstwyzzyyxxz}~|~x{y{{{||||}}}}{{{z{|{zyxxyxtrvz~}yvwvvx~~~~~~}||||||{zxwutsrqppppqqrrssttsrqqrtuwxyyyxutxy{yvuuwvuuuvxyzz{{|~}~~}|}~|yvsrqqqqqpppppqqrsttvwwvstttsrrxvnigioqqqrrrspkilqvxzxwwwz|}}||}}~~~~~~~~~~~~~~~}~~ooooppppqqrsssuuuuuuttttsttttsssrrqqrrrrsttttttssstssrrqrsuvwwwxwwwwvvvvuuuvwxwvuuuuvwwwwwwvvvvvvvvvwxyzzyyxyzzywvtonpqrqqrsssttttssrrqqrsuwz|{ywvuttttvusooqx~{xsponnnnoooonmlkjgdbbcdfhijklmoppomllkiijnqqonoprgWONXRL_modadb`bhnopqrstsrqnkknorrsssuvqcT[hmjqsrlgfhjospg__abdefgijkmrsmhhijjjkllnqtsqommmnopppqrtttrppppooooooooopppqsttuvxxwyvswwrptstturoieaaba`]]flkcgilnppqruwrqqqrsuwxwvtslghiijkljijnnkklnponkjjovrndajoommnruwwwwvtsrrrrsssssqmfb``bbhmqqrrsttssrqrrvxz{|}{yxy{~~~~~}~~~~~|zzz{}~xsqpppqqrrsvxyxxxwxz}|{x}wxy|||}}}~~~}{{|}~}||||{zvvz{z|}tttnimoru{~~~}}~}}}}||{ywvututrqqqpqqrrssstsrqrrsuwxyzzzywz{zxvuvvvuttuwxxyyy{|}~~~{|~~}}}}~~~~~}zxutrqqqqqqqqqqqqqqs{~wstuvvvvz~{unheinqrsrrrpiejpvxywuuwz}~~~}}}~~~~~~~~~~}ooooooppqqqrrsuuuuvvutttsttssssrrqqqqqqqrsststsrrrrrrrqqrstuvvvwwwwvuvvuuuuvvxwvuuuuuvwxxxxwwuuuuuuuuwwxxxwxyzzyxwusrrssqqqrrstttttsrrqrrtuwz|{zxwvvvvuuuusqqx}ywrqpnmmnnopponoomkhedefhjklmnnopomkjhhggimoonmmpoj`YSXSWiqpkihgcaeloprrstttsplkmnqqrrrtwtgS[ikisyupjghjnnkfaabcddfghikmqpjdgikjjkllmorsqolklnopppqtwwuspooonnnnnopppoopqqrsuwxwvzsqvytooopponmjfecddfhjkib`inqoopqqsy~xuqsqrtwxyywuskgkjjlntriglnkjkorrqmllnprxoeelnnnortvvwwvtsrrrsttttsqnhcaacdjlnpqqrsssrrsuwx{~~}|{yxxyz}~~~~~~~~~{yzyz}~~wrqqqqqqqrsuwxxxyxxy|~~}}zxxvxy|}}}}~~~|{||}||}}}|{vy|{}zw~xdde^Z_bghnu|~~~~~~}|}||{{yvutuvutsrrqqrrrrsstssrsstuwwxyz|}|}|zxvuvuutsstvwwxxy{{{{~}~~~zuvy|~~}|||}~~|zyvtrrrrrrrrrrrqrty|xuuwz{{{z|~}yskdbgnrrrssuunjqwxwtstvz~~~~~~~~~~~~~~~oooonoopqqqrrsuuvvwwvutssssssrrrrqqppqqqqrrrsssssssrrqrrrstuuvvvvvvuuuuutuvwvvvuuttuvvwxxyyyxwvutttttuvwwvvvwxyyxxwvvvvtrqppqrstssssrrrrstvxz|{zxwvvwwvvvvtrry}xvrqponmnopqqppqrqpnmkkklmmnoooponljigffgimnnmlklljgc__]epoponmnjfinpqqqssuuvsnkmmoqqrsuvwlU]ikjrwsplgfgijhdcddddefghikmqqjdfjmnnopppqstrpnlmnnnopqsvvusqonooooooopqqppppqstvxwvuvppvuqlilllloppmljknsxytg]]fimlkopqsv{|ywupqqsuxyzzxurjgiijlpzylfhlljkptuuqmmmmousjdbhmmoqsuvwvutsrrrstuuttqojebbehjklnqrsssrrsvz|}}|{zxxwwwxy|~~~zyyyz|}~}urqqqqqqpqrtvwwxxwxyz||}}|{zyzz{||||}~~~}{z||}|}}}|{zx{}}z|~s__^XVY\\]ZX_luy|~~|{{}|{zzxuttuvvvutsrsssrrrsssssttuvvwwxy{||}{ywvuvuttstuvwwwxyyzxy}{{{}}}}ysstw{}~~}{{|~~~}|yvtsssssssssrrtuwz{||~~~}{{{~~|wphaahprrstz}wquyxurrrt{~~~~~~~~oooonoooppprrtuvwwxxwutssrrrrrrrqqppppqqqqrrssrrrrrsrrsssstuuuuuuututttuuvwxxxwvvuttuvvwwyzzzywvtsssttuuuuuvvvwwwwwwxxwvsrqpppqrrrrrrsrrrtvxz|{zxvvwwwvvvutstz~xurppoooppqrsrsttsssrqoopqqpoopppnljhc]\\dinmmlljjjjihggfnvtqppponmnopppqrsuuwtpllmoqqruwuwn^bilmqsrpkhecdggdfigeddfghhjmtunggjptwxyxxxxywussrpnnnnopstsrqppppqqqppppqpppprtvxxvutsoosomkjkklnqtutssuyzyvpledfgilnprrsuzxtsxtoqsvxxyyxuqighnpmkuzpgejmkkovxxupommmptrmacjmnoqtvwvusrqrrstuuutrpkgddhkklmoqqrsrrquy}~~|wvvuvvwwwwz}~zyxyz{|}~ztqqrrrrrqqrtuwwxxxxxy{{||}}~~||z{{{{|}}~~}{{{|}|}}||{{z|}}~wwwpeca[ZZ\\YUQXbjmqw}{yy{|zyxvtttuvwwvvuttttsssssssstuvwwxxwxyzzzywvvuuuuutuvwwwvwxxxwy~}{ywwxyyywtstuwxy|}{z{}~{xvtsttssssssssuz}~{zz|~|xskb]bkqrtw}{xyzxuqpqt{~~~~~~~~onnooopppppqqstvwxyywvtsrrrrrrqqqqppopqqqqrrrrrqqqqrssssssttuuuvvvuuuuuuuvwxyyxxwvutuuuuvyz{{{yxvutstttuuutuvvvvvvvvwwxxvutrpoppqqpqrttrqrtwz|{zxvvwxwvvvtttu{~yurppooopqqrsstttsttsrppqssqoooqqookeUAAVkoonnmihhhhiifcdkklmmooopqqqpooqrtttqomlmnopswwtqmgfknopqqmkieachigimjgedfhiijnqsokjjlrw}~}}}~~}{{||{yxwqoopqqrrrssttttsrqpppoopstvwvusssollmnnonnoqtuxxyyz{utsrrpnkjlpustutwvr~|rrtxyxvvvtpkjnwyqisztkggklknuz{ytromnotvuoffmlmptvwvtsppqqrtuvutrpmiffjnnnoqqrrrrsvz|||zxsqqssvwwwwz}~~zyyyz{|}~yurqqrrrrrrrsstvwxxxxxxzz{{}}~~|{yyyzz{|}~~}}|||{|||||{z{{}}zxtntwrljgcba^YVV]dc`_jwzxxzzxwwuttuuvwxvvuuttttsssssrrsuwxxyyxxxxxxwvuuuuuvvuvxxxwuvwwwwy}zzzxvutttttsrrssttuy~}zz{~~zwutssssttvwvvwy|}zxyz|{xtne\\^eprty}|{{xuqpqt|~~~~~~~~~onnnopppppppqstvwxyyxvtsrqqqqqqqpppooopppqqqqqqqpqqrssttttuuuuuvvwvvvvuuuvwxxxyxwwvuttttuxz{|{{yxvutsttttuuuuuuuuuuvvvvwwwvtrqqqqqqqsutqppruy{{ywuvwxxwvutssv|~ztqpoppppqqrrrstsrsssqppruuronopopokbC:O`koppsngeeegiic[YZbhklnnoopqqpnoprssrpnlllmmnrwuqokhhkmmloliljdcfijilmlhefiorttuutsqpmjnrtsstuwyz{zz|tqonoqqsttuvvwwusqpppppqsuvvusrqpnlmpqrsstutuvx{{y|yuyyxvvtnmlmoruvuxw|{utw{{wtpptqmqsyzupw|yqidgkjlruxwvuplpqtwxvnijknquwwuspnnopqstuuuspnkghlpppqqqqrrsu{|{yxwuqmmpruvwxx{}~~}|yxxyz{||}}sqpqqrrrssssrrssuwwwwwxyyz{|}}}{zxxxxyz{|}~}}||||}||||{{{||zxtpuwzytrronlid^_dfbXU`nvwxyxwvvuuuvvwxwvvuuttttsssssrqrvxyyyxwwwwvvvvuuttvvvvwyzzwuuvvwx{}{xvvvuttsrqqpppqqrrrsvxz{~|zz{~}yussstttw{zyxx{~}{ywxyzzyvrk]^hqrtz~}|wtropt}~}~~~~~~~~~~~~~~~~~onnoopqppppppqruuvwwvusrqqpppppppppooopppqqqqqqpppqqrstuuuvvvuuuvwwwvvvutuuvwxxyxwvuutttuwz{{||{zxwuttssttuuttttstttttuuuvuvuuttttsstuupnmoswzzyvuuwxxwvusrsx|~zurppppppqqrrqqrqpqrrqpoqvxuronooook^GOeknonmmjcbbcfhhaWSU]fikkklmnqsqnopprrqpnlllmlnsurnljhhkjhehghmmhgjklklnmifjrxz||||{{}~}{vronmlnrtvvvuv{|vqnnpruvxyzz{zxwsqppqrtvvutrqponnprsssrpooopswyxsyvw|~|zyxsokklosvvwyvuszux}zwqlpopvvxxuuy|}yofdhijlllnrspkopuwxwrmjosuwwwvspmlmnoqsuuuspnljjnqrrrqqqrsvz~|wvutrplkoruwxyz|}}~{zzxxxyzz{{}{vsqprqqqssrsqqqpruxzzyyxxxz{||{zywvvvwxz{|~}}||}|}}||||||{xutsu|~~{vvvuuttqmlljd^Z^gpvwxxwvvuuvwwxxwttttttttsssssrpqwyzzzxwxwwvuuuuuuuvwwxxyzzxvuuvxz|{xvuutstutsqppopqqrrsstvwvw}}zwy}~yuttuuuvzzzyz|~|zyxxyz{{y{wb`puuvz|wtrpqu}~}}~~~~~~~~~~~~~~~~~onnnopppppooppqsttuutsrqpppppooppppooopppqqqqqqppqqqrstuuvvvuutuvwxxwvvuuttuvvwxxwvvvvuuvwyz{|{|{zyvutsssttttttsstttssssssttssstuuutrqrmkklptwxwvtuvwwvutsrtx|}zurqppqqqrrrrqppppqrrrqoqwywuqnonnlkc^hnnnlkifgdbabehhcXUWbijjjhjqphbjoopprrrpnmmlmlosqolkiihgffhjmooonllklkmmnlmovtstwyz{||~{yvtrtvxyxxwwyy{~~zsnmpsuwxyyz{|{xtrqqrtvwurqppooprtvwvsnhc`bjqwuokxzx{{zy{zurnmkmpsuutrt~wvvtw}||zrjjpxwwxvwz{{{qb^cijhfcdghhfikpsuuqmlpsuuuuuspmllmnprtuutqnmlloqqrqpppru{ystsrqommpsvxzz||||}}yxwxyxxyyz{}~{|yvsspnnokimoolijnsvwvttuwxz{zwyxwvuuuvyz}}~}|}}|}}}}}|{|xsrux{~{wvvvvwwwvvspljgfhlsvwwvutttuvvwwvsrrstttssssssuspwyzzyxwwwvutttuvvvwxxxyyyyxwvvwy{|{xvvvutuuutrqppqrrrsstuuvtswzzuwy~}xuuvvvvxxyy{}}{yy{||}}~lg{{wy}{vsqpqu}~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~onnnooppppoopppqrrsrrqpooooooppppppppppppqqrrrrqqpqrrsttuuvvuvuuvwxxxwwvutttuuvwwvvwvvvuuwxzz||||{zxwuttstsssttsstutsssstuuusrqrrrrpmlokjiknruuuutuvwvuusqrtxzzxurqqqqqrrqrqqpooopqrrqoptuuuronnnookjihlkiheehifdcehig`ZXciijkhinnc\\hoppqrssqonmlmlorolkjjihhiknqtqppomlllklmmpomkjkiknpqsuy{z|{{yxxxz{{zzyy{ywz}{uonqsuvuuvx{|zxtrpqsuvvsqopppqrtvwwvtpia[]mvwncf|zzyxy{{tkopljlptvvuvy{xvtsx{{~}sjmuwvwwy{zsk_VUbknmieccbbccehkmmljkklmnoqpoliijlmoqtvutronnnppqqpoooqw}~xrrqpponpsuxy{{||zzz~{xwwwxwwxzz{~~|z{{|{unkkkc`gkkgcbflnnljkostuvvvzxwvvuttxy||~}||}|}}}}|zyxsswz|~zvuuvvvvvvvussstspmntuvutsrrsstutsppqrtttssssrsxwpvyyyxwwvvutstuvwwxxyyyyyyyyxxxyz{||zxwwwvvvvtsrqqrsssrstuuutstv{|ywxz|zuwyxvtuuvx{~~~|{{{|~tq~~{urppru}~~~~~~~~~~~~~~~~~~~~~~~~~~~~ooonnoooooooooooppqppoonnnnopppqppppppqqqqrrrqqqpppqrsttuuuuuvuuvvwxxxwvvuuuttuuuuvvvvvuuvwyz{{{{{{zxwvttsssssssstutsrrrstttsrpqrrqnkklkjjkmprrrsstvvuttrpqsvwvvtrqqqqqqqqqqpppoopppppnnopppppnmnok_[[Y^dffeehhgfeegijj`[dkmmlihjlfdkqppqrstusommmmoqmjjkkkkljgbjpoooomkkifghjeghiiihikmnppmlmowzzzzzzzzzzyyzyxz{{vrqsutrqqrtwxwusqooqrssqppqqrstvvwwwvsnf]`vtocht{{zyyz|uepvxsmnsuvvuw{xsmlnoqsy|}wtvzwuvwyo]SMXehnttsngdcddddfffgghijklkjjjjfcdgikmqtutsrqopppopponnory|wssrpoopruvz{||{zwwx}}ywwvvuuuuwwy}zxxxz}}yqigkecimkfbbgmnmkgiloonmpvyywwvvuuwxwy}{{|}|||||{xwsvz|}}~~}yutuuvuuvwvuuvvyzwpmqstsqonnooooonnoqstuuttssrswxtuxxxwvvtssstuvvwxyyzyyyyyyyyyzz{zzzzzzzyxwwvutsrrsttsrsttttssstuwyzz{|~|wxzyusrrtvwyzz{{z{|}~}{uqpqtz~~~~~~~~~~~~~~~~}~~~~~~~~~~~~ooonnnoonooooooooooonooonoopqrrqqppqqqrrrrrrrqqppppqqrsttttttuuuvvwxxxxxwwvvvuuttuvvvuvuuuuwyzzzzzz{{zywvtssssssrsttssssssssrrqrsttrpsronmmmnoooprssrrrrppqrssssssrqpooopppppppooooonmllmmmnoponlk`RQRQWaeedgihklkggilog^fnrrpnjikjjmppoqrsssqmjjklmkhijkkklmke`eklmnnliea]]]dfjllljihjmptvwwxwxxzzzxxxxxxxwwwxyzzywvvtsqoopqstssqpoooopqqqrssstuuuuvwwwtnffshgbq||ywwwwxz{zls|rotuvvuv}yniijhggmt|}|}yxriTEFZqtopwz{{uoljfeeghheeghkkkjfeffb`bdeehmqqpqqrppponnnnnops{~|yvutsqpprtvw{|||zywxy~~{xwwtsqpooqqsx~|urstwzz{wplonopppmlmrvvutrtttrniltyxxwwvvvvuqtzxy{|{{{{{yvtswy{|}~~}{wtuuvuuuuvuuvxy{{xupoqpomkkkklkklloqstuvvuutssstyyuvvwvutrqrsuvvwxyzzzzyyyyyyyz{{zxwwyz{{zzyywvuutttuuttuvuutsssssv{|{z{|~zyzwttuwxyyyyxyyz{}~{tqprw|~~~~~~~~~~~~~~~~~~~}~~~~~~~~}}~ooonnnonnoooooopoonnnooooppqrrrrqqqqrrrsrrrrqqqppoppqqrrsssstttuuvwwxxxxwwwwvvvutuuvuuuutttuvxxyyyy{|||zxvtttssssstssttuuuusqrrrsuvvuwvtsrqponnnnpqomnoooprqqqqqrrqponnnoooooooonnnmmmlmmmmnoooolcUMORU]deefhijossigiklheirvvsolklkkmnooprssoonhhijkhijhikklmljhjkkklljcZSPUY_jnooomlijmpsuwxyyyyzyywvwwwvvuuuvxxzyyxwtsrrrrssstssrqpppqqrrsrrrstttttuwxwusqk]chtztqqqqtvxx{wuvvwxyzwgggfeceq{}~~{u`I=Hbt{vtsw{|~}zxrlhcadeefgiklkigfffdbddcbdilkimoqpoonmmmlnpqu{|yuuuutrqqsvwx{||{yyy{|~{yvupmmlkjllnu{xolnnqsuxxvssstqpokkkprswz|}}zxunmpuwwvvvwxywtprvwxyyyyzzyttstvwy|}}|yvstuuuutvuvvvy|~|xxvppomjhiijkjklmqsuvvwwwvtsstuyzxuuwvusrrstvwxxxyzzzyyyyyyyzz{zxussvy{zzzzzyxvvvvvvwvwxywusrrrsux|}zyyz{}~|{zwvwz||||||zzz{}~z|ztrru{~~~~~~~~~~~~~~~~~~~~~}}~~~}}~oppoooonnnnnnnooonnnooppopqrrssssrrrrrrrrrrqqqqqppqppppqrrrrsstuuvwwxxyyxxxwwwwvvvwwvuuuttsstuvvwwwxyz{zxxvvutsrrsssrtuvvwvutsssstuvvwxwwutsrqpoopoljkmnnqrrqppppqponmmnoooooonnmlllmmmmmmmmnoool_PKOT[bgfdegiknsqeeiibgjkqutqmllkkkmmmnppqroqqkhhhiimlefiklmlllkkkikhbWLEFUedinpqppomnnopruxxyyzzyywwvvwvuuuvvxxyyzywwuuuuvvssuwvtsssssrrrrqqrssssrrrtuvuvvg\\dmwvqnllosvxyx|xvwvwzudfha`fm{~~}{|xtb@-?f~{zywxz{}}{{xvogdccfgijjkkkjjjjiggihgijjhhkopnmmmnmmlmoruxyvrsttttrsuyxz{|{yxz|}~~}zuqnllkkjkkmtztlikklmppruvutrnkigdcdefnu{}~|{zwtrrsuuvvvwxxwttuuuvvvwxxztvuvstvy{{zwtrsttuuvzvvvwy}~}|{xtqolighjkkklmpsuvwwxyyxvtttvzzyvuwvutsstvwxyyzzzzyyyyyyyyzzzxvrppswyyzz{zzyxxwwvwwxxxywusrrstvx{|zxwxyz|}}|zyxyyyyyz{{{{{|}~}y{ustx}~~~~~~~~~}}~~~~~~~~}}~oooonnnnmnnnnnnonnnnooopopprssstttssssssssrrqpqqpqppooopqqqrrstuuuvwwxyyxxxwxxwwvwxwvuuttssssstuvwvwwxxxxwvuutsrrrssstuuvvvutttsssstuvwwwvuuvutsqrpmjklmortrqppppppnmllmnnnnnonmlllllmmmmmmmmnnol_OKS\\cghfddgiklojbchh]gikosqnllllkjlmmmnnnoqqkfffegikliijllllkjijkjkbPD==H`mgiooqqqpoopopruwwxyyxxyxxxwvwvvvvvwwyyyyxwwvvvwvsssstuwvvutsrrrqpqrsssqqrstsrswrfgqvrnkigmuwyzx{{xvvvvwzsmqqdeox}|{zy|}N2-Ux~~}{y{{{z{{xohddegiijjjjkkkjkjkjjkjkkjihjnomlmmmmlmmprxtutrsssuvttt{zz{{yxy{~~~|yvsrrrrponmmmtwplikkkjmlnruvsqmjgfcba`_ciry|{||{ztsrtuvvvwwxxvvussttuvwyywzywtssvxyxusrtttuvz{wwwz|~}|yusrmjijklllmosuvvwxxyzyvutuy{{ywvwvuuuuuvwxxyyyyyyyyyyyyyyyxvspnoruxzz{{{zzzyywvvwwxxwvutsrstvxy{ywvvvy||}~|{yyywvwxyz{|||}~{|{wvx|~~~~~~~~~~~~~}~nnnnmmmmmnnnnnoonnnnooopooprssstutsssssrrrrrqqqppppppppqqqqqrsttuuuvvwxxxxxwwxwwwyzyxwutttstsstuvvvvvvvvvvvuttsrrrssstuutuuuuuuussrsstuuuuuvwvutsrpnmlmmptvsqpppoonmllmmnnnnnoonmllmmmmmmmmmmmmnndRNXbhiigddhjlkhbabcecimopuqljkmmkjllllllllmljkidadikmmlllkklkjijkmn^E:;EXmrmnpopqqpppqqrtuvvwxxxxyyyxwwwwwwwwwxxyxxxxyxxxvurpprrrstuvuuttsrqqrsstrrrqqqqswypjqpkigfdkuwyyxxvuvvuuvvvx|xz~xhju~}{zz{{~G)Cr~~~~}{zyyy|{xphdfijkkiihijkljkja`hllmmmlkknpnjnmmmmmmqtupusssttvwwvu}|{{zwxz~~~|vrruxz{{ywvtrqstqomnnmkkmmquvtqnkhfdccdccemtxyzzyyuuuuvvvvvvwwvvusrtuvuvyy}xusrtwwvuuuuuuvw||ywx{}}|zvuupmkkllllnrvwwwwwwxyyxvuvy|}|zwvuuvvvwwxxwwxxxyyyxxxxxxxxvtrpooqruwyzzzz{{zxwuuvvwwwvuuusrtuvwywvttux|||~~}{zyywvwxyz{|||}~~}}~}|{yy|~~~nnnmmmmlmnnnnooonnnnoppqpopqrrsttssrrsrrqqqqqpppoopqqrrrqqqqrssttuuvvvwwwwwwvwwxxz{{yxvtststtstuuvwwvuttttttssrrrrrrrsttttuutvuutsstsrrsssstutssqponnnooqvvsqqqqpoonmlmmnnnoopoonmmmmnnnnmmmllnqpjUQ]fikjiefhkmlifhhhjkoqsqvokklnnmlllkjjjjjjhipkc`djlmnnlkkkklkjkmoobG<AVjrroppooppppqrttuuutvxxxxyyyxwwwwxxwwwxxxxwxwxxwvxxustutqopqrsttttsrqrstutttsqqpsvywrpjddddbkvwxxwwvuvvuuuuvx|}yy|~vhnu{}{zyzzyxy?,_~}}}}|~}vrppsvwrkdfilmjhffghjkifY?<KRYcknonmmqrnnmmmmllprnowrrrtuwyyyy~}|zxx|~~}{xttvy|~|{yyxwvtsssqomnptwwuroligfggiiijnqssttstuvwvwvuuuuvvvvvtuxyxvvvw|yywusrsuuvvxxwwvxx{~zzyz|~~}}{wvwvqmljjklntxyxwwvuvwxyxwxz}~}{xvtuvwxyyyyxwwwxyyxwwvvvvvvtsqpooooorvyzzz|{zwvuuuuuvvuuvxvtttuvwutsssu|}}~~}}}|{zzxxxxyz{|}||}~}zxw{}~{{|~nnnmmmllmmnnoponnnnopqqrqpppqqrssrrrrrrqqpppppppooprsssrrqqrrstttuuuuuvvvvvvuuvxxz{{zxvtttssttuuuvwwwvutsssrrrrrqrrrrssssssttvvvvtuusrqqqpprssrqponnnopptwurrsssrponnmllmnnnoooonnnnnnnnnmmmmmosrnSTahjkkkhhjlnmlijklnqrrsqwolkllmlkkkjiihihjggnjedgklmmmmlkjjkkklklj]G@G]mqqoqqoooppqrsttuutqtwwwwxxxxwwwxxxwwwwwwwutsvvrsuvutuuwsppqqqrssssrqrrstwxxvtrrsuwywqf`aabclwwwwvvvuuuttuvwy{{{{{{vrtwy{zzzzywwv>Bs}z~~}{y{~tmifekrpmghjmslgedfgikh[@DF8+1D\\hllmkptromlllkkmmlstqqrtvx{|||~~}{xy{|||zywwxyz{}}~}~}|zyywvwxwsppuxyvutrpljkllnoopqqpooopsuvwwwvuttuvvwwwx|~|ywvuuvwvutrrrstux{{zyxyyz{{{||}~~~~~|yxy{vmmihjlpuyzyxwvuuvwxxyy{}~~|yvuuvxzzz{{zywwyyyxwvuuutttssrqpomlkmqwzzz{{ywvuuuuuuuuuxz{wuttuvttsstu{}}||}}|{{zzyyyyz{|yyz}}|ywuv~}~}}nnnnnnmmnnnopoonnnopqrssrqpqpqqqqqqqqqqqpoooopppoprtuuussrrsstuuuuuuuuuuuuuuuuvxxz{{zxvttssstuuuvvvwxxwusrrrrrqqqrrrrssrrsstuvxxwutsrqpoonnopqqqponnnnopuxsrtvvtrrqpnmmmlmnnnnnnnmnnnmmmmmmmmnptsoZ\\ejkklmjjkmnooonooprrrrqomlkkkjjjjjijiijihhikighjkklmnmlkihjjkmlj_Q@@Semoooqqpppppqrssssuurtvvvvvwwvvvvwxxwwwvwvusnkklmortutrpttrpppqqrrrrqppqrtxzzxvuttuvwwqhedbaenvwwvvwwvvuuuvvxyz{|||zyyxxyyzzzyzxyyI[x{||zxy|xwtoiiihhfgkqrigfefijkmiQIGCHKKLKSbnopsqollllllmmmqpqtqwwz|~~|zyyxxzzxwvwwxxyyzzzz|}|{ywwwvvwxvsruuuttttspnpqsttuttrqnnprtvwwwvuutuuuvvwwz}yxvvuuvvutsstrru{}}}|{{{{{|}~~}zz{}vookgilqvyyxxwvuuvvwxyy{}}}|zxvvwyz{|}~~zxxzyyxwutttsssstsrqonljjnuyyzzywvuuuuuuuuuux||yvuutssttstw|~~}}}}}}|{{{|}|zyywux{{zywuvz~~}}~nooonnnnooopoonnnopqrstttsrrqpppppppqqqppoonoooppqsuvwwutsstttuvuuuuuuttttttttvwxzz{zyxvutsssuuuvvvwxyywutsrrqqqqrrsssrrrsttuwyzywspooonnmlmopppppooooootwrtyzxusrqpoonnmmmmmmmmmmnnmmmmmllmnoprqndehlmmnonnmnopppppqrsrqqpnnljhgghjjkjjjjjihgijjijjjhiloomkiiiijkmgYNBMajmoppqrrrqqpprrrrswvrsuuttttttuuuvwwwwvvvusrkc_`hmosuusqoopnoqqrrssrqpppqswzzxvvvvvvwvqhfebbgpuwwvwxwwwwwwwwxxyz{{{zzzzyyxyxxxywxtViwy{{|}{tpsxy{||yrkhggiovn`_]\\\\alhchq^BEX]WUV[clqqqpnllmmmmmnnopotpuvz}~|xvwyuuxxwvvvvvwwvwxzzzxyxvttttttuutsrqsqqstsqptuyzyyxwtroptuvxxwvvuutuuuuvvwy}|{yxyxwxxxwvutwutw~~~}}}}|~~~|}}|vpqnghksvxxxwvvvvvvwxyyz{|||{zyxxy{{|}}}{{{{yxwvtsssrrrsttsqnkjhhkswyyxxvvuuuuuuuuuvy|{ywvvuttutrsz}~}}}}~~}}||{wwuuvxyyzxwxy|~}~~~~~~onnnnnooppooonnmnopqrttuttsrqqpppoopppqqqpppppqqpqsvwxxvutttuuuuvvvvvvutsststtuvwyzzzzzwvusstttttuuvwyyyxvutsrrrrstttsrsstuuvxz|{zuqpoonnmmmnoppppooopoorspu||yusssrqqpoomllmmmllmmmmmmmmmmmnoooonkkkmnnooononoppppppppqqqqnkjhfefiklkjjjiihfhikkkkjhfgjnpnljigfhimeTLF`kknrqqqqqqppooqrrsuwvstuutsrrrrsstuvvvvvuttttneZZdilrvxwtqqqlnqqrsstsqppppruxywvuwxvvvundcc`cirvwwvwxxxxxxxxxxxyyzzzzzzzzyxwvvvwxvpgpvxywwyxrmpvxyz{uqnlkmrfUNEEKRX\\XQ[onXA<HWbkqrsrqpommnoooonnpqmwrquy|~}vrqtyutvvvvvvvvuutttuuvuvutssssstrrsrpqrqoqsrpptx{|{{zyusrtwxxyxwvvuttuuuuuuvxyyyyxyyz{{|{zz{~~~~yrrrhfltvwxwvvvvvvvwxxyzz{||{{{zyz{{{zyy{}}{zxvussssssrsstspljjlnosvxzyxwwvvvvuuutuvyzzxwvwyyxwtrt}~}||}}~}|}}wwvvwxxyzyyyy{}~~~~~~~~~~~~nnnmmnoopppoonnnnoqrstuuuutsqqpoooopppqqqpppqqrrrrtvwyxwuttuuuuuuuvvwvuuttsssstvvwxyz{{zxvussssssstuuvxxywvtsrrssttutssrrtttuvx{||zvtrqqpnmmnooooooooppoppnpvzxtssssrrqppnlklmmllmllllmmmmmnnonnnnmnnnonnooopnooopooonnppm]WglihgffghiijkihffhikkjkjhffhkmmljjiijlogSMOegnqrpppppoonmmprstuvvuuvvtrppppqqqrtuvvutttuutngcgilswyxxvurmnqrqrttsrrrqppruvwwwxxvvwum``a_dlsvxxwwwwxxxxxyyyyzzyyyyzzzzzxvttuvxwrrtvwwttuvwqruwwy}~~{vsoiaWJCEL\\e`TKa[XWcofO@JY]_eorsqpnnnnoonnnqro{wrtwz}{sopsxvuuuuuvuuutsrrqppsuutsssrrrrqpqrqrrrqrsqoquz||{{{xvuuxyzzyxxvutttuutttuuvvwwxxyy{}~~|wuvmjovwwwvvvuuuuvwwxxyzz{|||{zzz{{zyyy|~}{ywvtsssttsrqrrqnmlqw}|xx{}}{yywwwvuuuutuwxwwvuvwxxywvx}~}{zz|}}}|}xxwwxyyyz{zzz{}~~~~~~~~~~~~~~~~}~nmmmmmnoopoonnmnopqrstuuuuusrqpponopqqrrrrqqqrrsstuvxzywvuuuuuuttuvvvvvvuutssrstuvxxz{||zxvtrrrrrrrstuvwwwvtsrrstuuutsrrrttsstux|~}{zvssrpoonnnnmnoooopoonmmrxwsrrrrrrrqqomllmmllmmmmlmnnnooooonmnnoooonnooooonnooommmnopgCOjkgd`^ZZafiihfbbfiiiiiiigfegjlllllmnnnoj^QU]gorrponnnmmlkloqstuuuuvvvurponopppqstuutsttuuvvtqljmsxyxxwvtqopqqrstsrrrqppqsuwyyyxwvxwoeabbfmsvwxxywxxwwxy{{{{{{yxyz{{{zzxvttvwxvrrsttsrsvwwttuuvvz{~}wqdVJA@FR`kkfZEPea_altqf]RJLYfnrqqonmmnnmmorttxvtsrrv~~yrpqswvutsstttttssrrqqqsutsssrrqqqrqqrrrqqstsqorw{||{{zxvuxz{{{zxvuuttttuuuuuuuuuvwxyz}}zxwqntwwwvvvvuuuvwwwxxxyz{||||{{{{{zyy{}}|zxvusrrssssrppponmq{~~zwvuuuuuuutuvvuttttuvxxy{}~{zxyz||}|{{{yyyyy{{{{{{{{}}}}|}~~~~~~~~}~nnnnnnooopooonnopqrstuuuvvutrqpponopqqrrrrrssssstuvxyzyxwvvvuuvuuvvvvwvwvvuttssttuwxz|}}}{yvtssrrrqqrstuuuutsrrsstuutrqqqsssrrruy{{{|{wusrqponmmmmmmnopponnpsutrqqrrqqqrqqonmnmllmoonmmnopqqpooonnnoooonnnooooooonmlllmopfIcl_WSRSQS]egfda_chjhggggggffhijjlmnooonnkfV_dlstqnmlllkkjjknprtttuvuuutrqooopppprtuutsttttuwvuqnqtwwwvvvtrpoooprsrqqqqpopqswzzxxxwyyrjeddgnsvxxz{{|zyyy{}}}}}|yxyz{{{zzxuttvyxuqppqrpprwxwvussrruw}}vjWIDCEM^klkop]DLac`eoxzsfUHO`hnoponmllllmprstqonmkgl{|wssttvutrqqrrrsssssrrrrstssttstsrrsrrssqpqtvtrpty|||{{ywvvy{{{{zxvuttssstvvvvvvuuvwxyx~}zwvvwwvvvvvvvvwwwwxxxyz{||||{{{{{zyyz{|{yxvusrrsssrqooonnou~}zwvutuuuuuttuutsssstuvwx{~~~|yxvvxz{||ytx~}{zzzzzzzzzz{|}}}||~~~~~~~~~~~~~~nnnnnopppponnnnopqrstuuuvvutrqpoooopqqrrrststtuuuvwxyzzyxxwvvvvvvvvvvwvvwvvutstuuvwxz|}}}|{xvuttsrqqqqqrsttsrqrrrssuutrrqrrrqqqsuvvvy{zxvsqonmmmmmlllnppooprrpopppqqqqqrssrqppomlmqrqoooprrqpoooooooooonnnnnoopoonmlklmopgbnhWLELRQS^ehfcbdefggggfeefgghhhikmnmmllljg`gnsutpljjjkjjjjknopqrssttttsrqppppqqpqrtstttuuttsrqpnqrttttttsrpnnnnpqqppppooopruxxyyxxxyvoifehouwxxz~~|{{~}|zyzz{{{zzxuttwyxuqnopponpuwwwusqpprux|v`LDDGPZcjinsst`JVbefirwurm_S[bhmnpnlkkjkmoqomgbchfbjy}zvuuuttssrqrsssttttsrqqqrsstuuvwwvuussttpnptusrrvz{|{{zxuwuwzzzzywuttttsstvwyyxwvvvwxyz~|zxxxwwvvvvvvwxxxxxxyzz{|}}}|{{{zzzzzzzzyxvusrrrrrqpooonorv|~~~zyvvvuuuuuutsttsrrrrsuuuv{~}||zxvtuwyz||yusy{zzzyyyyyyyzz|}}}||}~~~~~~~~~~~~~~~~~~nooooppppponnnnopqrstuuuvvusrpooooopqqqrrsstuuvvvvvxyz{zyxwvuuvvwvuuuvvvvvvvuuuvvvwyz||}}}|zyxwutrrqqpqqrsssrrqqrrsuvusrqrrrqrrrrssssw}}|wsolmmnnnmllmooopppollnnopqqqqttuttsromlnqssrqrsssrqpooooooppponnnnnopponlkkkmoojlpm]MFMSRU^fjiecdefffghgffhhhggghjlmkjjjjhhgkruurhbdkkjjjkklmmnppqqrsssssrrrqqrrqppqsttuuuuspoonnopqrqqrrqpnmllloponmnnnmmmoruvxyyxxxvnjffipvxxwz|z{}}zz{{|||zyxvttwyzwsonoppomorvwwtsrrsuwzydLCFN\\dhklmopngWKXehgnssppmc]`flnpnmkjjklnmie]Y]gcgpy|ywwvvtrrrsrstuuuuuutsqqqqrsuwxyzzyywutssplmstrrsx{{{{zywuvttw{zxwvuuuuutssvxz{zzywxwxz~~}{zyyxwvvvwwwxxxxxxyz{{|}~~}}|{zzyzz{{zzyywusrqqqpoooponorv|~}}|{||{xxvvvuuuuuttsssrrrqrsuvwv{}{zyxwustvwyz|zvuvwxyyxxxxxxxy{{|}}}|}~~~~~~~~~~~~~~~~~noppqqqqppoonnnopqqsttttuutsqpopppppppqrrrstuvwwvuvwxz{{zzxvuuuvvvuuuuuuuuuuutuuvvwyz|||||||{zywvsrrqpppqrsrrrrrrqrtvvurqrrqrrrrrrrrruy{|{yqllmnnnmlklnnoooomkklmnopqqrtuuuuusollnqsssstttrqpoppppppppppooonnooonljiijlonlnpp`KITVX]W[fhfbbdfffgiiiijjhfeggjjkiiijjhhjnsttoc]bjkjjkllmlllmnoopqqqrrrrssrqppopqstuvvvtusommmmnoooooommmkkjloqpmkkkkkkkmoqqstvvuusliffjpvxvv{{xx{~|zz{{||{zywvvvwz{{wropqrpliosvvuvwvvvvxzpSDHYlkjklmmmlnfU\\nuoqtsrpomgbdloponljkklkhb[S[dfdqw|}|{{zxurqrsuwxyyyyxwusrrrrstwyz{|{{{ywustqkjqsrsuz|||{yxvtutsw{zxwuuuvvutrrtwy{|{{yxwx{~}}~|{zyxwvvvvvwxyyyxwwx{|}~~}}|{{zzz{{||{zyywusrqqppoopponoqu{~~}||{yxxvvvuuutttttssrqqqstux{yz~~{xxwvutstttuy{zvtuvwxxxxxxxzz{{||}}}}}~~~~~~~~~~~~~~~~~~~~~oppqqrrrqpoooooopqrssttutttrqpoooppppppqqrstuvwvvuuwxz{{{zywvvuvuuutttttttttttuuuvxyz|}}}|}}}}|zxutsrqqppqrrqqqqqqqtuuvtrrqqqqqqqqqqqrtttuuplkmnnmllkklmnoonlkjkklmoqsstuttvvtokknqrrrstuusponopppppppppppoonnonmjhgiklnonopseOQ\\`_[Y_ec`_^acdegikkkljgeeghiiihhijighjnstsrjedikkkmnnmllkklmnoppppqqqqrqpnmnprttuuuuttqmlkkkmmmmmmkjjjkkjlpsromkjjjjjkkkkkmoppqpmjhhjpvwuw|}vrtw|~|zz{{|{{zywvwwyz|}{uqqrsqnhlnqqooqopruwxsZIQiukjklmnoqsqppz|wuvwusstslfkmqqpnlllkid\\TN_hci{}~~~zurrstxz|||{{zwtssssstvyz{||||{zxvtsqlkorstw{}||{zxvuvvuy||xvuuvwvutrrtvy{}}|zyvw{~}zyxwwvvvvvwxyzzywtvy{}~~}|{{zzz{|}~}|zzywusrqqqppopponnpsx}}zyxvvututtttttssrqqqstv{~{z}}yvvvvuuttsstwy{vsuuwwxyyzz{|||}}}}~~~~~~~~~~~~~~~~~}~pqqrrrrrqqpppppppqrrssttttsrpooooopppppqqrstuvvvutuwxz{||zzxvvuuttsssssssssssstuuvwy{}~~}}~|zwvtrqqqqpqqqrrqppqrtuvttsrqpppppppppqrqponmkklmmllllklmnppomkjkklmortuttssuwtniimpqqqqsuvspnmnopppppppppppoonmmkiffhlmmnnnotgTZbkfZ]a`^]^]_`acfijkkkigfeghjiiiijjiffiorqruoihikllnpqpmkiijklnooooooooponjjknqrssuuuspmkjiijmmlkkiihhijjilpuurpnnnmmllkjiijlllnonlkikpuvuw|{spoptx{||zxxz{{|{{zxwwxyzz{|{wsrrrqpkjjkeabkfcmtvwraP]ppjjlmnpruwxxzzxwwwxxxxyzwnkmtutromlkicYOPcedo~~~~ztssuw{|~~~}|zwtrrsttvwz{{||||{zywurpmlortux{|}||zxwvwwx{}}yvuuwwwusqqtwy{~~~{yvw{~}}}}}}~~}zzyxxwvvvvwxyz{zxtuy{}}}|{{zz{||}|}|{zzywusrrrrqqppooonorx|~|zvutstttttttssrqqrrtx}~~}~}yvvwwvvuuttsuvzvtuvxxyz{|}}}}}~~~~}~~~~~~~}}~~~~~~~~}|}~qrrrssrrqqqpppqqqrsssttttssrqpooooppppppqrstuuuutsuwwy{|{{{zxwvtssrrrrrrrrrrsstttuwy{|~~~~~}|zwusqqqqpppppqqpnoqrsuuuttrppooooooopqqqomlkkkkllllkklmopqqnlkkklmoruvutssuwtmhjnpqppqsuuromlmnnoooppppppppomlkigefinnmlllmpgZ`gjkbaYV][VXY\\_behjjjjigggffiiiiijkifehoqmopnnkkkllnprsoihiiiknooonnnnmnnlighjlnpqtttrmjjjiijlmljihiijklkklqvwusrstsrqommmlnqrqnmonljkptutv|}wsqnkkmnooqvxz{{|{zyxxxyyzz{|{xtrrrrqnlkgZQ`nc[guvwveVkpliklmnqw|wnqz{zxxxyyxxx{{vpovyxuqmlkjfYLPgcis{}}}~}yutvwy}~~|zvsrrsuuwxzz{{{{{{zzxvqpnnpsuvy{|}}|{yxwvwxz{|{xutxxwtrprtwy{~~~|yvx|~|{{{|||}}~~||}|{{zywvuuvwxyz{{yxy||}}|{{zz{||}}|{zz{{{ywtsuvtqqpppppoorx|xutsttttttttsrqrssuy~~}zwtwvvvvvuttsvywuuvxyz{|}}}~~~~~~~}~~}~~~~~~~~~}||}~qqrrssrrrrqqqqqqqrrssssttssrqpoooooppoppqrstttttsrsuwxyz{{zzywvusrrqqqrrqqqqqrsstuvxz|}}~~}}|{xvussrrqqpoopoommoprstuutsqpnnnnnooopppomlkjjjjjjjjkkmoqrqpnkjkmnprvwvussuvuolnppppqrttrpmkjkklmmnooppppppnmkihgegjqolkjklnieiklnga\\Z`YMPTX\\^bfhhhiifhgdcgjkkkkkjhdgqnknqrsoljklmorrnihihhkmnnnnmmmmmmliffhjloptutrnljjijkllkihijklmnnlmquvvtuvwvuusrqooqtxtnnoomjkpsttvz|ytqonlmnprsuvxy{{{zyyxyyyzzz{{zxurqqrroljfYK`mc]duvvrgbsrljjlmoqvzthmz}|zyyzzyyyz{zvqyzytokjjkmeJPkgpv{{|}~}|xvyxwz}~~}zwursstuwyyyyzzzzzzz|zwsqopqtvwyz{|}|{yxwwvwyzz{yuuxyxusqsty{}~}}{yvw{}|||}}}||}||{z|~~~}{zxwwuvwyz{{zyy{}~}{{|||}}}~}|{{{|||zxvw{|vpppppppoosy|~~wtttttttttstsrsssuz~}{xwxwwwwwvutuwwwttuwxz|}~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~|||}~rqqrrrrqrrrqqqpppqqrrrssssrrqpppoooppopppqrssssssrrtuvwyyzzzyxvtsrqqqqqqqqqqqrrrtuvxyz|}~|||{zxusrsssrqqpponllmnopqrtutrpnmmmmmmnoonnlkjjiiiihhijkmoqssrpnklnopruwwusssttrpppppqqrtspnlihhhiklmnoppppponljhgffhkupkjjmoomkmnooga^\\aZIINUX[^cfffiiegea^dillmkllkjhlkjnqoomkjklnopnkhhkjikmnnnmmllllkkihfghhmpuuusqnkiijkkkjiiklmorssqqrrrtvwxxxxxvutstuxyvqpoomklpssstwwtqmkmprstuwyxzzzzzyyxxyzzzzz{{yvtrqrqqnkicRFbkd_`tvtrmouqmjijjlnorldkz~|{{{{|{{{z{{wwzywuplkklspQPklv{}}~}|zzzx{}~~}~{wttsttuvy{zzyxxyxyz{~|zwtrqrtvxzz{||{yxvvvuvvvvyxvvyzywtsuwz|}}}}zyvw{~~~~}~~}}}}xxyyz|~zvtttuvwxzz{{zyy|}}{zz{{|}~}}}||}~~}{yx{~vopqpppppptz|}}~~zuuuttttttsstttttuz}}|{}~{zyxxxxwwvvwwvussuxyy|}~~}}}~~~~~~~~~~~~}~~~~~~~~~~~~~~~~}}|~rqqqqqqqqrrqqqpppqqrrrrrrrrqqqppppoppppqqqqrrrstssrstuuwxyyyyxvtsrqqqpppppqrrrrrstvvxy{}}}|||yvtttusrrrqrqpnmmllllmpssspnmlllkllmmmlkkjihhhggfgikmnqsuvurpoppqsuwwvsrrrrqppooopppqqomkhggfghikmnoppooonmkigghikvqkjnrrqnlnoolfa^]c`MDITWWZ_dddgiege`[_dhlmmmnnolfhjlnmllmklmmnnljiilkklnonmmlkkkkjiihgfghmqvvuutqljijkkjiilopprtutqrsomqtuvwxyyyxwvvvtrqppopnmnqrrrrsrqommprssstvxy{{zzzyxxxxyyyyz{{xtrqqqqplhbZHBcke^\\rvuusrpnmjhhgikknidjw}||||{|||{z{{yyywuwtpoopuvaSfo{~}}}|y|}}}|}yurtuvvwx{~~|zxwxwz{~}{yyvssttwxz{{{{yvusstttstruvwxz{{xvuwx{|||||zxuw|~{z||}~~}|}}}vyzz{||wpooqtuvxyz{{{zyz{{xuutuwz}}}}}~~|{|~}toppppppprv{{{}|{y}|xvvuuuttttuuvvuuvy|zxxz}}{{zyyxxxwwxxwvuttuwxy|}~~}}}}~~~~~~~~~~}}~~~~}}}~~~~~~~~rqqppppqqqqqpppppppqqqqqqqqqqqqppppoppqqrrrqrstuttsttttuvxxxxwutsrqqqqpppprrrrrrrsuuwy{}~}||}|{xwwutsssstsqpnlkihfgilpqqpnmkkjjjkkkkkjjihgggfffhikmquvyywusrppruwvurqppqpoonnnnnnnmmljigfeefgikmnoooooonljihhijurlkruurojhikhda`aedXHITYXY^bcbfigjie`YZailmnoppphgilnoqstqsqihjljijlllmnoonmkkjjjiiihgghinqtuuuutonmmmmmllmooooonoonmmnprstuwxxzzxxwvsqppppppopqrrqqqpomnoqqrsstvxy{{{zyxwwwxyxxxy{zvsrqrqqolge]KHfme\\Zrtqpnmlkkjhfegjnpnifr~}~~~|||{zyzzwwwuuywustswzs\\cq{~z}|||{{wssuxxxxz}}zxvvz|yuwxtsstvxzzzyxvsrqqrrsssqsuwy{||zxxyy{{|{{{ywuv{}xxz}~zurrty|}}|||||~x{{{|}~~}zvqqqrtuvwxz{{{zyxwtqnmlmqx{||}}~~~}~spppoppopty{zyzy~~{yvy{zywwvuttvxyyzywvwy{{z{|}}|{{zzzyyxwwxxwvuuvwxy|}~~}~~~~~~~~~~~~~~}}~~~~~~~~~}|}}~~~~~rqqppppqqqppppoooppqqqqqqqqqrqqppppppqqrssssstuvuuttttstuvwwwvutssrrrrqqqqrqqqqqrrstvxz|}~}{|}}{ywustsstssrolifdbbdfjlnmllkjiiiijkkkjjihgfeeefghjlpvz{yvtsrpnqvwutqqppponnmmmllmmlkkkjigfeeefhklnnnoopomlkjiiiurmlrttspg`chgbabehjgYSV\\_cfhc_dhikljeZUZcjmnoppqmjhlsvxyyvwmcfmnkiijllnooonmkjjiihhhhhhikmnoqrrsrponooooprrpnmlkklmoppppqrruvwwxyyxwvtsqqqpqqrrsssqpoonmnoopqsuvwyz{{{zyxwwwxxwvwyzyvsrqrqqokii^MUjlc[Ysullkjjjjjigghjnqpigk{}}~~}|||zywutttttvvttww{}yhgqw~~}}~|{xvtruwzzyy{ywvy}|xyzwtssuwyyxwusqpppqrssrqrtwxz||{zyyy{{{{{zywtuzsljkmpqponnnpsv~||}}}|}|z|}}~{yxwutttuuvwxz{{{{ywvroljhinw{||||}~}}tppoopppqw{|zyxw|zvvry}zywvuux||zwvx|}|}~~}|{zz{zzyxwvwwwvvwwxxz{}~~}~~~~~~~~~~~~~~~~}}}}}~~~}}}}~~~~~~~~~rrqqqqqqqpppooopppppqqrrrrqqqrrqpppqqqrsstttuvwwvvuuuttttuuvvuttssssssrrqrsrrrrrsrrsuwx{|}~~~|{|}|zwtsrrstssqmhdcaabcefghijjiiiiijkkkkjjhgfdcddfhjkov||xtrsrpnquvtrrrrqponmmmllmmnnmlkkjigfddefhjllmopppnmmkihiurnnqsttsh^_fgdcfimnnibdjknqnc\\bhikmlg_XUZfmooortvslmvyzzyupcdlrqojiijlnooonlkjiihhghhiijllmmoppppoonnnnnpqomjjllnpqqpooppqswxxxxwyyzywutsrrrssttssrqponmnoopqsuwxyzzzyxxwvvvwwwutvxzxtrrrqqokjhYLZkjb[[vwopnlkkjjiklmmnmlgfgw}~}yupkiilpqsssssrsuvyzxplptz~~|}}}|yvsrswz{zzz}~}wrrttvvuusqqqqqrrstsqrtwxz{{{{yxx{zzzzyxwuux~ljihhijlmmmlkloz{|~~~}}~y}~~}vuuvvutttuvwxz{{{{zyxwurqkhlw{|||||}~}}tpppoopqtz~|yxyz}urqz{zxvuv{{|xuv||}}~~}||z{||{zxvuvvwxxyyyxz{|}}~~~~~~~~~~~~~~~~}}~~}~~~~~~~~~~~~~~~~~~~rrrqqqrrrqqpoooppooopqrrrqqqqrrrqqqqqrsttttuvwxxwwwvvutstttutttttsstsssssstssssstssstuwyz{||~~}{{}~~|yvsrporrsroiedbbbcdeffiijjiiiijkkkkkjihfeddegjjlow~}xrrsrppruusssuvtponmmmlmmnoonmlkjihfeedegijkmnppponnmkiivsooprtutnbZ^fhhlnpqqqonjgilkd^bfijlkgc\\TT`joppsvzyqmuzzyxra`horqrmkhjkmoonmlkkihhhhijjjklmmnppoooomkkkjkkd^]`gmpnmklnppppqsz{zzzyzz{{zywuttttutttssrponnoppqqoprtvwxwvvvuuuvwxwtqsuxwtsrqqqoig_OGZjjc\\_uutrpnllljkprsrojiihiw~~{wpf]XX_dlprqrrrrrrqrsvwtoprx}~{ywwzz{||~|xutsuz||y{~~zsrrrttssrrqqqrrssssqrtvxyyzyz{zy{zyyyxxwvvxxillkjhjlllkjhfgv{|~~~}}}}~~|utuuuttstuvwxz{|||{{zzzyysmmx{||||}~|vqqpopqsw}~zxyxw|xpu}~y{{yvvy}}{~zut{|}~}}}||{|}}}zxvuuwx{}|{zyz{}}~}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~qrrrrrrrrrqqpppppooopqqqqqqqqrrqqqqqqrsstttuvwwwwwxxwutsttttuuuutttttttssstsssstuttsttuvxyyz{}~~~~}|{|}}}{xusnlmnqssojfddeeggggiijjjkkkkkkkllljhgffffillmowxrssrqqsutsstvxupnmmmmllmnnonmmkihgfeeeeghjklnopponnnmllxwqppqsvuqi][djloqrttsoi[Y`gjhdcgiijifd`WRYfnprsuyzwptyxwuh\\gmopprpkdfimooomlllkjhhhikkkklmmnonmoomlighjmcVUZ`jlida`acehjkos{}|{{{zz{{{{zyxwvvvvuuuutrpnnopprsqomoqstttttttuvwxwurrruuttsrqqoid[PK^li`]hvsusomllmosv|}yrjgijlvyne\\VPQXahjknpqrrrrrsqrstvtooouz~{vrsxxyz|}{wsttv{|zz}z}ytsrrsssssrrrrrrrrrrqrstuuuvux||{|zyyyxxwwxzvgjjifadhjiihfbbqy|~~~}}}~~}yxxxvuutuuvwxyz{|||{zzzz{yvvy{|||}~|wrqppqsvy~}yywtu{rw~zv||{ww}~yv{|}}||{{{{}~~}{yqmrw{~}{z{|}~~}}~~~~~~~~~~~~~~~rrrrrrrsssrrqppqqpppppqqqqrrrrqqpppppqrrsstuvwwwwxyyxvutttttuuvvuuuutttttttttttuuttttttuvwwxyz}~~}|yyz{{zywsnklmoqsrmhgggghihgijjjkmnnlkklmmmkjihhhhkmmmpxwrrsrppqsrqrruzvonmmmmllmmnnnmljhggggffghijklmnoonnmmmmowztqqrtvuuqg[clnpsuwwvuhUT^gllhfhjihgdce\\MJZhortuwyxtuxwuncfkoooprplccimoonnnommlighjkllkkllmnmkmookgfgko`EPPQ^gga````abegiqz}}|||{{{{{|{zyxxxwwvuvuuuqomnprvwvtpnnopqsrsttuuvwxwtsrtuuuusrpoie\\SQ_kg^`lvwsqnlllnpsx}tkhiijibYRHOZfpqnljlorrrqqrtrsrstsonosy~~zxtsvvyz{zzxsssw{{huzxxy{xuussstttssssssrrqrqqqrrssstuwz}}|zyyxxxxwx{weiifc]afhhgfeaamx|~~}}}|}~}~}~~~}|{zxwvvuvvvwxy{{}|zyxxyzzyyz{|}}~}wrqopsx}{|xwvvx~~xz}||~}{xxz{|~~~}|{{{{|~~~{tmoy}}{z||}}}}~~~~~~~}~~~~~~~~~~~ssssssstttssqqqrrqqqqqrrrrrrrrqqppqqqqqqrrrstuvvvxyzywutttuttuvwvvvvuuuuttttttuvvuuutttuuuvvwxz}~~~{xwxyxxyxvromkkmoturnlighhijjjijkmnnmllmmnnmlkjjkkmonoqywqqpomlnonmnoszvppnmmmmmmmnnnmkigffghhhiijkklmnnnnmlmmmnuxtrrrtuuvvqegopqsvxyzykUU`kpplijjjhfeeidSIRbmrsuwxxuuvurijnpoonoppmabhkmmnnopoonkhikmlkkjkllmmnqsrkgghlt_@KIL_hfccbaaa`__`eow{||||{{zzz{{{zyyyywvvuvvromnqsvvuspnmmnqrstttuuvwxxwutsuvwusrpomjbWU`kf^crwuqnlkllmmpxyqkgd\\UMHLM_o|{smjjlosrpppsusssssspnorx~~}{zwtuwz{|{{ysstwy}j|wwwut{uuvwwvuuuuttttttssqqrrrqqqqstvuw||{zxxxyyxxy|~zegfc`\\_dfgeedb`gv{}}||||}~~~}zyz|~}|{zxxwvuuvwxz{|{ywwxxyxwwy{|}~~~~yurpqty~x|ywvttw{|~~}zx|}||}~|{z{{}~~{us|~~|{||}}}~~~~~~~~~~~~~~~~~~~~}~}~~~~tttttttuuuttssrrsrrrqqrrrsssssssqqqrrqrqrrrrrstuvwxxxwuttuuttuvwvvvwwvvuuuutuuvwvvvuuuuuuuuuuvxz{||{ywwwvvwwwvtqnlllmrvsnjgfehkjihikmnnmllmnoooonnmmmnoopt{vonmkiikkjijkowuppnmmmmmmmmnnmkhfefggijjkkkklmnnnmmllllnstqqrssstuutjlopprsvwz{oZZeottqomljiffgmk`ST_jqsuuvvuttsqmmnoonnnnomfiklmmnopooonkijlmkkjjknnoprsrojijmrwdMY\\bnmkihfb_][\\\\\\^bhqz|||{{zyyz{{zxyyzwwwwwwsqnoqrtuutsqnnoqstuuuuuuvwxyxutuvxusrppmh^RR_kf`dqsnlkjkkkklmv~}tlg^SIEFX^ds}xkjijmpssnihotsttttsqoppv}}zzzwuvx|zrvz{z||tvutrt}rsuwxxwwwvuttttttsrrsssrrqqrtxyxz{{yxxxyyyyz|{kfc`ZWZadeccb`bkx|}|||}}}}|||{yutty}~~}{zywvuuvwzz{ywvvvwwuttux{}}~~~{wtqqsy|twxwusrsx}}||~|z|}||}~~||}~~}|||}}}}~~~~~~~~~}~~vvuuuuuuvvvutsssssrrrrsttttuuuttsssssssrrrrrrrstuvwwvvttsttttuuvvvwvvvuuuuutuuvvvvvvuuuuttuuuuvwxz{{yxxwvuuvvwvtrommkmrrmjgffikjiiijlmmmmmnooopqpponmnnoqu}vnlkihijjhgggjpqonnmmmmmmmmmlkjigfffgijkkkkklmnnnmmlllmorqpqsttttutslnooopqrtxzsa`iqtttromkigfhnpi^X\\gptuuuuutsrqppoponmmnnnknnopponmmmnmlkkmmkjjklprsssrlhhinrwyl_ehlqnnnnlgb\\ZYY[]`bhqxz{|{zyxxzzyxxyyxxxyyxvtqppprsttutqppqsttuuuuvwwxyyvuuvxusqppnf\\QR_hebjrojhhklkkkjlq}wme_RGKUlleo{xkghmqsttpcckstuuuutrppou~zuwxxwwy~zr|yxywvsrsxsruxzzxwwwussssttsssttttrrqrsuvwxyzyxxyyyyyy{y{xj`^USW^bccb`\\cr{|||{|}~~|{{zywsqqu{~~}}~~}|zxvuuuwyyywutttutrooptxz|}|~~~~~|zvrqswysu~vvusstuz~{zz{{}~|~~}||}~}}~~}}||}~~~}}~~~~~wvvvvvvvwwwvuttttssssstttuuttttttsstttsssrrrrrrstuuuuttssssstttuuuvvvvuuuuttttuuvuuvuuuuttuuttuwwyz{zzywwvuttvwwurpnmmnljhgghjljiiijkllmmnoooppqpponmmnnpu|tmjjiijjjihgfgjllllllmllllllkjkkihgfghjjklkklmnnnnmmlmnopoppstuuuutrnooonnooqtxtgflrsttspnljggiknkbWVcouvutsssrrrppppponnoonnppqqqonkkkmnmlmomjijkmqrrqpnkiikpv{{vpmllmnpqrqojd^[Z[\\_^^ciovxzxwwwyyxwwwwyyyyxxwwurppqqstvvsrprrsuuuuvwwwxyyxxwwusqppqpjcQJae^fqpkhijlllllkln{xoi`OFTjlnfn}wlgipttuvtkfhostuuuusrqnr{yvxxz{{|~wu~|y~{zusrttsuz|zwvvvussrrstttuvvwwusrqrrsvwxyxxxyyzz{yyxw}wa`]TT[acba_Zcs{}}|{{|~}{yyyxwtqqsw{xx|}}~~{ywvutvxxxvsrrstromlmqtw{}yx~~~~~~}|wsqsvyut||uvvttstuxz{|~~{yyyzz{|~~}{{}~~~~~~~}}}~~~~~~~~~~~~~~~wwwwvwwvwwwvvuuutttsssttttttssstsstuuttsssssssssttttsssssrrrssstttuuuuuttttstttuuuuvvvvuutttttuwwyz{{zzxxwuttuvwwvutssronkiijkmkjjjkklmmnooppppppponmmmnosz|rkiiijjkjihgffghiiijkkkkllkkjjkkjihggijjkllklmnonnnmlmnonmopsuvvutsqooonnmllmpurjjnrtutsqomkiijllkfZOZjtwvtrsrrqqpqqqpponooopqqrqpomiikmonnnomjhikmopnmmlkkkmpv{|{woklopqmfbbfhgd^ZYZ[[\\_emuxwvvvxxwvttuvwwwwxxyxurpoprtvvtsrssssuvvwwxxxyyyyxwtrpopqqrnSC]fbmuollnnnnnnmlmnyxqjUEMkrjmilysjfjqstuwwsmilqsuvuuuttopv}{{}~}~}|}~wx|zz~wssuutvzzxutuuvtrrqrttvvwxxxwvtrqqqsuvxwxxxyzzzxvrotd^_SPX`aa`^Ycu|}}}|||}|zxxyxwtrqrtxtty{|{yy|{zxvutuwwvtsrrsrromklnqtwzwtx}~}}~ytrruxvtzxtvwvuttsttuvxz~~|zzz{|{{|~~|zz|}~~~~~~~~~~~~~~~~~~}}~~~~wvvvvvvvwwwvvvvvuuuttttttttssssssstuvuutttssssstttttttssssssssttttttttttttttstuuuuuvvvwvvuuttttvvxz{{{{zyxwvvvuwwxwwwwvuutrpnmmlkkkllmmnooppqpopponnnmmnnqy{rkijjjjjiihhhgffghiiijjjkkjjjjklkjihijjkklllmnooonnmmmmnjilnsuvvusqonnnnmmkklnpommortutsrpnmlllkkkjaSQcpuusrsrqpppqqpqponnnopppqqppmhhkopponnljijllmnlkkkkklmptwyzxqmosqcOCERakonf\\XZ\\\\]^bintvvvxyxvusttttuuuwyyzwsonprstuttsttqmqxwxxxxxyyyxxwtrqppqswxYAZgkuvtqsrrqponmmooywrgNGZrlkkffhcfflqsttvxxriinrtuttuuvpns|~}{zzz{}|yy{zytstttuwvusstuwurrpqstuvxyyyxwutrqqqsuvvwwxyyyxurmlp|k[XMLT^_`_\\Zhw}~}}}}}}{zxyzzxuqppqty~trxyzxtrtyzzwuttuvvusrqqrrqomkklnpquustz~}}zvsstwuuyzwvwxxwvvvuttttuw{~{{{z{{{|}~~~|yy{|}}}|}}}~~~~~~~~~~~vvuvvvvvvvwwwwvvvvuutttttttsssssstuuvvvuuutttttttutttttsssssttttttttttttssttstuuuuuvvwwwvvuuuutuuvy{{{|{{zyxvvuuuwvvvvtssrrpnmmmlllmmmnopppqqpooonnnnnnnnpy}vplkjjiihiiiihhgghiiiiiiihhiijkkkkjjjkklllmmmnopoonmmmnoifjmruvvtrpnmmnnmmllmnonnnoruutsrpnnmmmllljfZSamrqqqqqonorsrqpponmllmnopqqpniilnpponmkjijklllkjjkkkllnqsvwvssvvrU:?Tcmqrrnf]_eda_`gkprsvyyxvtsssssrrstuvyzuopssrstuttuuqjnywxxxxxyyyyyyvtqnnqvwycGXgpwrwwwvtrqpomnoqx|tviPYjqgkjcYPN`fmrsttuwxrhflpsstttuxtnow{xwwxxyz~||xy}{}vtttsttuuttuvwvsrpprtvwxyyyxxvtrqqqrsuuvwxxyxurrrus{xcZNJPY^^[Z^p{~~~~~~}|{{}|{uqppqrt{urx{{zywsqwwvtstuuttttrqrrqonlklmooqrrsv{zy{~|xuttvuuy~~yxwyzzyyyyyyxxxwwx{}}||{{{{|~~||{ywy{||||{{|}}~~~~~~~~}~uuuvvvwwwwwwwwwwvutttssssssssssstuvvwxxwvuutttttuutttttssssttttttttttttutttutuuuuuuvvwwwvvvvuuttuvxzz{{|}|{zxvuuuuvuutsqrqponllmmmmnnnopoopqqponnnnnnonnnow~wqnkiihhhiijjjihhijjiihhhhhghijjkkkklllmmmmmmnopoonnnnnnhfilqtvutromllmnnmmlmnnnnoprtttsrqomlmnmmkjjaT`lnnnoopnmorrsqpoonmhjlmmppppojjloqqpnlkihijklkkkkklkkllmnopruxvuqX;Rcmqrrrsrfbmog`_djopruxyxvtssrrqpqqssswyvprusrrtuuuvvsnpwwwwwwxxxxxxxvypjmrvxxs^\\hrwtwxxwusqonmmnqxvprd[frpilh`MEI]gnrttttvwrhginqrsssvzxtrt{}{xvvwwvuuwxz{~wy{|}}yvssrsstuvvvvvvsrpqstuxxxxxwwvusqpprstuuvwxxuposx{y~sfRILW^]Y`ku}~}}}~~~|uppqpqrwusw{|||yutssrrsttuuvxvtrrrqpnmlmnppopqrtytquy}~zwuuuvvy{{yx{~~~~}}}||{zxwx{}}|}|||{{|}~~}{xvxz{|||||||}~~~~~~~~~~~~~~~~ttttuvvvvvvvvvvvuttttttssstssssstuvwwwwwvvuuttuuuutttssstttttttttttuuuuuuuuutuuuvvvvvwwwwwwvvvuutuxyzz{{}|}{yxvuutttsqpnnmlkkklmmnnnnoopoooqqponnnnnooonont~}ysnkihhghijklljiijkjijjjjhgfghijjkllmmnnnnnmnoopppoonoooigilqtuusqnlkklmnmmmmmnoooqstuutqmlllmnnmkileT`kmmmnnmmlmnnonmnonmediilopppomlopqqpnmlkiijjkkkkkklkjkkkkklorsppo^Lclqrrrrqtnemtme`ainoqtxxwvtsrqpppqqrqqrsutvyvrqsuuuwyvstvwwwwxyyxwvvvsvkjnrtvwxj_kruvwxxwvtqonmmmpw}omlchqtrplfZIEJXhosuvutuvqighmprssstxz{{xwwyxwwwxxwttttut{}y|zy{|~{xvuurrrstuuvuuutrqqstuwxxxxxwvvusrqrrtttuuwvtmpy{}|~~|u\\IHT^\\Vhv{}~}}}~}uqqqqrrrrsx}~}zxvrpqqsuwx|}{xtrrqpnmmtuqpnnoqtxrpqv~{ywvvwxyzywwy{zz{|}~}}{zzyvuwz{|{{{||}}}~~|xvwyz{{||||{|}~~~~~~~~~rstttuuuuuuuuuuutsttttsssstssssstuvvvvvvvuuuuuuvvvutttttttttttttttuuuuuuuuuvuuvvvvvwwwwwwwwvvvvvvvwxxyzz{{|{{|{zxvuusrqomlkkkklmmnnooooooooppponnnnnoopopmosvuqnljihhhiklllkjjklkjijiigeefghhiklmmnnnnnnmnnnoooonnnnnkhjlqtttromkjjklmmnnmmnoooqsuuttronmmnnmlkjmfUbkmmmnononlkkknppppneafhlooonnmmopqqponmkiiijkkkkkkkkjjlllklmonmmlebossqpnmmpqkmrqmfbhnpqsvxwutsrqqqqrsssqpruvusrqqsvwwwxwuvwwwxxxyyxwvtspngpqsrqprjalqstuvwwvtqonmlmov}zollkqxvtrldVGFKZjoswwvtuurkhilpssrqqrx}wvwxxxy{{zvsrsts{yx}|{zz{}zyyzzqqsrrttuuuusrqqsstvxxxxxwwvvutrrsuuttsuttsw|z{{|{{~}jLER][Xrz||}|||}}uqppqrqqqsx}~}{vomnsvy{~{xtsrpootuoonoprrqrqv~|zywwxxyywutttsstx~~}}|{xtsw{|{||}}||{yz|{ywwxzz{{|}}|}~~~~~~~~~~~~~~rsssstuuuuuuuuuutssssssssttsssstuuuuuuuuuuuuvvvwwwvutttuuuuuuuuuttuuuuuvuuuvuvvvvvvwwwwwwwwvvvvvvvvvvwxxyyzz|}}}|zxwutsqpnlmmmmmnnooooopooppponnnnnnnnpprnjlopomkjiiiijkkllkkkllkkihgdbcceefgijlmnnnonnmmmmmnnnnnnnnmljjkprsrpnlkjjjkllmnnnnnnprstutttsrqqppnljjnfTamompsvtqlotsonoooprmdejpqmllkklmopqppomkihhikkkkkkkjjjkmnlllllkllmpstromkkknonnrrqneclprsuvvussrqqrssuvvvuvyzzwsqqrtuuuvvuvwwxxyyyxwvutrqokwtsrppqmhkpqrstuvvuronmlmpvzwqlnqtwwvuo_NFEO_npsvvvvwvtmihjpuusqrtx|~|xwxyyyz||zwtssst}}v{~|{{{~~{{||ztttqqrssttusrqqrstvwxxxxwwwxwvtssttssrsqqw{yyyzzyy{}vTCM\\[]x{{|}||||~|vqppqqpqqsx}|pknry|~}{wtrpps}|rpnopppprpt~}{zyxwwxxwutrtttvx~~~~~~}|xuwz|||}}~~}||{{ywwwxyy{{}}~}}~~~~~~~~~~~~~~~~sssssttuuuuuuuuutsssssssstttttttuuuuuuuuuttuvvwwwwwvuuuuuvvvvvuuuuuvvvvvvvvvvvvvwwwwwwwwwwwvvvwwvvutttuvvwxy{|}}}|zyxvusrppnnnnmnopoonooopqpoooooooonnpppolklllkjiijjjkkkklkklmmlkjgeb`bbcdefhjlmnnooonmlllllmmmmmnmmljjloqqpomkkjjjjklmnooonoqsrsutstuutttrqliiohUanomnqrmns{ytqoonoqqjcfloifjkjjknopppppomigfjkkkkkkkkkkkopmkkjjklnprrromkiikmnnnppqqkegorsttutssrqqrsuwxyyyz{{{zwvussrrstuvwwwxxyyxwvututrqrutrqpoonmmpqqrrstttspnmmmoswuqmortuvwwrdREESkqrsuuwwwvtnkjinstrqsuy{zywxyzzzz{{yvtsrrt}yu|{z}~~}|||{xwxvppqqqrstsrqqrstuvwwxxwwxyyyvttuvwtrnosxrkuyzyyzwt~dDJ[_h{}||}}}|{|~|uppqqrqqrtx|}wqnr{~{xtrqsy}zyroqrrrrrqt|z{yxwwwwwwvtts{~~~~zz{|~~~|ywz{}}~~~~}{ywvvwxy{|~~~}}~~~~~~~~~~~~~~~~~sssssttuuuuuvvuutttttttttttttuuuvvuuuuuuuuuvvwwwwwwwvvvvvvvvvvvvuuuvvvvvvvvvwwwwwwwwwwwwwwwwwwxxwwutsssttuvwy{{{{zyyxwvutssqpooooooonnnoppppoooooooonnpppomkjkjjiijjkkllkkkklmmmllkhebaabbbcehklmnoooonllkkkkkllllmmlkjkknooomlkjjiijklmnooopprtrrsssuvwvvutrmjjoiWcookjhgjrlkoqqponprmedkni^\\ehjjloqqqpnmljigeijkklkkkjkklopljiiiiknooonmljjjklnnmmmnppmikqsttssssrqqrstvwyz{||||||{vsrsuutttuvvwxxxwvvuuvusqrqpnmmmooopqrrrpoppstpnmlmmptromnprtuvwvo^DFXsstttuxyywuponklqtsrtuxzxwwyz{zyyyxwusrpqsz}wuz~|z||}}|zzzywwxuppppppqrrqqprstuvvwwwxxyyzzxtssrqpoouy}wtxzzxxyupwsVLXes||{|||||z{|~|uooqqrrrstx|~|vqs~~|yvsqqu{xwqsussssxy~{zxwvvvvvvwwz}{zwvwwxyz|}~~~~~}zxy{~~~~zxvuuvwy{|~~~}~~~~~~~~~~~~~~~rssssstttttuuututttttttttttttuuuvvuttuuuuuuvvvwwwwvvvvvvvvvvvvvvvuuuvvvvvvwwxxxxxxxxxxxxxwwwwwwwwwvvutsssstuwxyyyxwwwvvutssrqpopoooonmmnnoooooooooonnnooonmkkkkjjjjklmmmllllmmmmlllihfdcbaacfjmnoooooomlkjkkkjjkllllkkkklnnnmlkjiiiijklmnoooonkhlprrrtvwvvvvupkkli]hpnhgfgipebkqrqqprqiginjd[Wbhjjloqqpnnmkkjgdhhkllkkkjjjklkjjhijjlnnmmlllkjjjklllkkkmppmjmprsrrssrqqrstvwyz{||{||||xsqqttssstuuwxxxwvwwwsqqppnkjjmoqrrsstuurolkmoonmmlmnpnmklmosuuvxzlFJausuuvwxxxxwttrmkqttstuwxwvwy{zyxwvuutronpqwxvvu}{{{{{zxxxwvutrpooooopqqrqqrrsuvvwwwwxzzzzxvtsrqpqswy{xy{|zvtvvsrxlRUnz|{{{|||{{yz||uoopqsrstvy|~~~yuv~}{xurrswz|y}zqtttts|{y~~|zwvuuuuvwx{~}zwtusstvwxyz{}~~~~}{zz|~~zxvuuvwy|~~~~~~~~~~~~~rrsssssssssttttutttttttttttttuuuvuuttuuuuuuvvvwwwwvuvvwvvvvvvvvvvvuuvvvvvwwxxxxxxxxxxxxxxxxwwwwxxwwwvuttssssuuvwvvvvvutssrrrqpooooonnmloqpppppponooonnnnnmlkkkkjjjkllmnmmmllmmllllljiifdb``chlopppooonmkjjjjjjijkkkkjjkklmmmmkjjiiijjklmnoonkia[ekopqsuwwwxwuqlllialrnedekaYafmqrrrqnljjjjjlfYbijmmnnmllmoqrokfgilmmlkkjjjjkjiiiiklmmmlllllkjjijjjjjjjkkklklnrqqstsrrrstuwxyz{{|{||{|yrompppoprsuwxxyxwwywrpqponllnprstttttvvtqljjlnnmmlllmmkkjklquvvwxnJOhursuvvwwwxyxutroqsutuvwwvvwyzyxvuuuuupmkmos{}wuttz||yyywvvvvusqponnnnopqrrrrrsstuvwwwwxzzyvwxwutsttsutuvy{{ytqtwtxxvYTqzyzz{{{{zzxy{~|wqopqsstuwy{}~~~|yx~|{zxusru|z|wqttuvyyvwxzyxvvvvvvwwzzvustttxxxywy{{zxz}~}||}~~zwutuwz|~~~~~~~~~~sssssstttttttttuuuuuuuuuuuuuuuuvvutttuuuvvuvvvwwwvuuvvwvvvvvvvvvvvuuvvvvwwxxxxxxxxxxxxxxyyyxxxxyxwwwvutttttsttttutuuvutrrqqqponoooonlkknoooppqqonooonnnmmmmllkkkkkkllmnmmmllllllllkkkjheb`aejnqqqppoonmkjjjjiiijkklkkkklllmmlkjjihiijkklmnnmjhmagmopqsuxxwwvtpllljcntpecddVSainqrqromkkkjjjkibbikmmlllklmoturmhhimonmllkjjjjijiijkmmllmmlmlkjjjjiihhghijklmnoorqssrqrrrtuvwxyzz{||||||tmlmmmnnpstwxyyxxxxvrpqpnmllortvvuuuuvvurmkkmnonmlllmlkjjjkptvvwwrVRmvsstuuvvwwyywuuqqsuvvvvvvvwxyxvuuvwwvqmjkmrwyxvttx~~|{wxwuttutsrpoonmnooprsssrrssstuwwwwxzzzxy{{xvvwurmprsw{{xtsstsw{xcUqxvwxyxxxwwwxy}~}zrpoqrstuwyz|}}~}{y}~{zzyyyvtru}~|~ttuuuwvuwwwwwvvwwwvww{}yutuuuvuuvvxyzxwz|}}}}}~~~~}zxvtvy|}~~~~~~~~~~~~~ttttttuutttttttuuuuuuuuuuuuuuuuuuuttttuuvvuvvvwwwvuvvvwvvvvvvvvvvvuuvvvvwwxxxxxxxxxxxxxxyyyxxxxyxxxxwvvuuutttuuttttuvutrqqrrqonnooonlkkkkmmopqqpoooonnnmmnmmmlllkkkklmmmllllklllklllmmlifceimqrrrqpponmllkkkjjjkklmlllllllllkkjjihiijkklnoonmkggjpqqstvwwvuspmklljfqvsgb_\\OUdkoqqqnllmllkkkjkjfjkllkkklmoqtvtpjikprpnmljjiihhijjkmonlmlllllkjiiiihggegimnqqrqjadqrooqrrtuvwwxyz{|}}|}}vmjkkklmpstwxyyyxxwtqqspnllmpsvwvvvuuvvutqonnpppnmlklkkkkjkmsvwvxv`Wrvtsssstuwxxxyxvttuvxxwwwvvwwwvutuvxyxtnkjmsu~ywwwvx}}~}{zvvusstuusqpponmnppqstutssrrrrtvwwwxyz{{{{{zxxzwpjklptzzvsttstuyxl\\qwttvwvvvwwwxy|~~~~}vpopqrstwz{|}}~}}}}|{zz{|ywwxxywuqr}|}{yyvuuuuuuvvwwwvvwwwvwx|zvtuvvuttuvxy{{||}}}|}}~~~~}~~~~|zwvy|~~~~~~~~~~~uuuuuuuuutttttttuuuuuuuuuuuuuuuuuuttttuuuuuuvvwwwvuvvvvvvvuuvvvvvvvvvvvvwwxxxxxxwwwwxxxxyyyyxxwxxxxxxxxwvutuuvvuuttuuutrrrsrqonnooonllkkkmopqqqpppponnmmmnnnnmmmlkkklllkjjjkkkkkklmnnppnlhjloqrrrqppponmmlllkkkllmmmlllllkkkkkkjiiiijkklmoopomfmprssuvuurqnjfbfmonlsxuj`]RLZfkoqqpommlllllmnppmlllllllnoqstusplklqrqonmljiiiiiiijlmmllkkkkkjihhhhgffegjgaXTSUMCOkrpnnoprtuvwwxy{|}}||{tkijkklmortvwxxxxwvtsrspmmlnsuvwvvvvuuutsstssssqomllkkkllkjlrwvvwuf]uutsrrrrtutrquvuuwvuwwxxwwwwwvuttuwyzzvqlintt|zxyyxy|}|{yxutssuvwurppponmnpqrtuuttsrqqqrtvwwvvwwxxwwwwvvsvxqoswyyustssstwwskrvustuuvxyyxwxz|~~~~~}wqopqrstwz||}||{{zzyxxyzzxvuwxzzwsqz{}|u|{zwvtttuuvvwwwwwvvvwx|zvuuvvvuuuvwx{|~~}||}~~~~}~~~}yxz~~~~~~~~vvvvvvvvvuttttttuuuuuttttttttttuuuuttttttttuuvwwwwuvvvvvvuuuvvvvvvvvvvvwxxxxxxxxwwwwxxxxyyyxxxxywxxxxyyyxvvvwwvuuttuutsrrsssqonooonmlllmmnpqqqqpppppnmmnnoooonnmlkklllkjighijkkjjlmmpsusronnpqrrqqppppoonnmmllklmmnnmmlllkkkkkkkjjiijkklmnoooopstqqpuvvrmliTQ\\hnqqptvvnd\\MPafimqqponmmllmmnptusolkmnpqrrssttspmmmqrqponljjjlmkiiijkklmljjjjihgggggfggji_I>;=C=8Kjsrlkmpsttuvwwwxz{|||ztljjkkklnpquvwxxwvuuutrmjmlotvwwvvuutuusqqqrrponmllkkklmmkkmquvvvvlcussrrrsssrmfdfisttttvwxxxwwwwvuuuvwyzzxunhmrr~zzz{{zz{|zywvtstuwyxusrrrpnmnqrttuuttsrqrrrrtvvuuututtuvwwypu{uuwwwwtrtssssuvvutuustuvwyzzyxxz{||||}|wrpqrrstwz|}||{zyxwwwxyyxwusvx{|{xtv|{}txy{yvutttuuvwvwxxxwvwy}yvvuuuuvvvuvuux|~~}}|||}}}~~~|{|~~~~~~~~}vvvvwwwwwvutttttuuuuuttttttttttuuuuuuuuuuuuuuvwwwwvvuuvvvuuuvvvvvvvvvvvwxxxxxxxxwwxxxxxxyyyxxwwxxyyyyzzz{zzyyzyxvuuutsrqrsstrppponmlkklnnopqqppppppponnoppppoonnmkjkllkigeegjlljjklmptwxwtqppqrrqqppqqppoonnnlllmnnnnmmmlkkkkjkkjjjjjkllmmnnooorrqpnqsnhhlmUFZosrrrtvvph\\KTefilpqponmlllmnoopqpnmlnpqsssrsssrqonoqqrqpomkkloqnkihhiikkkiiiihhgffggfghkcO?88;E<7Mkqkiilpstttwvwtoqv{|}|wpkjkkklmnpsuvwwwvuuvtlhknptwyxwyxvtsrpmlllmlkjiijkkklmnnmmnmouvvxsksrrsssssroh`^^aqtrrsuwwxyxwwwwvuuwxyyyywpglqs~yzzz{{z{{ywutstvwx{xutuwwtolmqrttttssrrrsvuuuvvuvxvutttuy}|xzyp|xuutssssttstuuvttustuwxz{zyxxyzzzzz{{vsqrrrrtw{}||{{zxxwwvwxxxwttux{}}|xw}xzxyz|zwvtttttuuuvxz{wvyz}~xvuutuvvvuutssw|~}}{{{{|||}~~~~}~}}}~~~~~~~vvvvwwwwvvutssstttttttssssttttttuuuvvvuuuuuuuuvwwwvvuuvvvuuvvvvvvvvvvvvwwxxxxxxxxxxxyxxxyyyxxwwxxxxxxyyy{{{zz{zzxxvutrqqqrrrrrqpnljiiklnnpqqppoooppponnnopqpoonnmkjkkljhebbeilmkkmomptxzzvrppqrrqqqqqrqqppooonmmmnoonmmmmlkkkjjkjjjjkllmmmmnnnnpqqiTL\\dfioseR`tvsrstvurl]KVggilooonmllllmopnlmmnmmoprrrrssrrrqppppppqpomlkmpqpnljihhihhhhhhghgfffgghjeUA:89>G<7Okkdgjlnqsssuuuohjqw{}}zunlkklmmnprtuvwvvuvwthhlquxyxzyvrpmlmqttrpomkjiiklllmmooponiiptvwuqrrrstttroja[ZZ]rurqquwwxxxwwwvwwwxyyzzyxtjmrw|xyyz{{{{zwusrtvxzz{ywvxzzwomnqrsssrqqrstvyzzzxwuuxwwvusrvy|{{ys}yutsssssssttttusttstuwxzzzyxxyyyyxyzyutrsssrsvxz{|{zyxxwvvvwwwvttux|~}~wxz~|xwuttttssttw{~yuz~ywuuttuutttsux|~~{zyyyzzz{{|}~}~wx}~}~~~~~~~~~~~~~vvvvwwwvvuttttttttttttsssssstttttuuuvvvvuuutuuvvvvwwvvvvuuvvvvvvvvvvvvvwwwwwxxxxxyyyyxxxyyyxxwvwwwwwwxxxzzzzzz{{zyxvtsrrqqpppqqqqnjfhkkmmoqppoooopppponnooppooonmkjjjkjgdaadgjmmnpqnotyzzvsqqqrrrqqrrrrrqqppppoonoooonmmmlkkjjjjiiijkkllmmmmmmmoprs_KWglnqtqijsvsrsuuutp_KWhhhjkkjjklllmoqrpnooonoppqqorrsssssrrrrpoooonnmnoponlkjigfeddfgihggfffghihWD:99<@E:8Pjnmpollnpsstwrjiknsw{}|wokjjllmnnqstuvvvvvvskjlnqtutrnjjjjknqtutroonmlmmmmmmnpqqrnhfiouuussstuvvurmbXWXW\\qvtrqtvwxxxwwwwwyyzzz{{wzwposz{yyz{{{{zxusrsuxz||{yxy{}}yqnoqrrqqppqstwy{|||{zvuwxxywvssu{|{yw|vutssssssstttststtsstvwyyyxwxyxxwwxyyvtsttssstvxyzyyywwvvvwwvvutuvy}yx}{xvssssssssstwz}u{~}xvutssssssrrv{{yuttuvwxyyzz{|}~}os}~~~~~~~~~~~~~~~~vvvvwwvvvutttttttttttssssssssssttttuuvvvuuuuuuuvvwwwvvvvuuvvvvvwvvvvvvvwwwwwxxxxxxxxxxxxyyyxxwwxwvvvvvwwxyyyyyz{zyyxwutsqpppoopqrqlijlkllnpqpppppqppponnnnopooonljiiijigdbbdeilnoqrootxzzvsqqqrsrqrrrrrrrqpqppppppppponmmlkkjjiiijjjkklllmmmmmnpqrupacnpqrssrnpusrstttutbJVfhhhedchkmnnnprronopqqqqrrqonqrsstutuvusplkmmoonooonllkjgffebbfiihhffffhg`I;89<?DC:@\\mqu{pmlkkosuwoijkknsy{|wnjjjlllmnoqstuvvvwurmlmmknpqrrstsssrplkkkllmmoopoonmoqrrrpnmmpstsrstuvwwvsn^RSUU\\qwtsqrtvwxwwvwwxyzzyxyzvzxvsw{|zzz{{{zyvttuvxz|}|zyyz|~~{roqttrooorsuy|}~}~}||xvvxyz{zxtv|}|zxwqrsssssrrsttututttsttvvwxxwwxyzyxwvuwxutttttttuvwxxxwwvuuvvvvvutuw||y|}yurrrrsssstsrst}}~}zxvutssrqqstuxxvsrrrsuwxyz{{z{|~~{qw|~~~~~~~~~~~}~~~~vvvvvvvvuutttttttttttssssssssssstttuuvvvuuuuuuuvvwwwvvvvuuvvvvvwwwwwwwwvvvwwwxxxxxxxxxxxxxxxwwvwwvvuuuuuuvvvvvvwxwyyxwvtrqpoonpqqpmkklkklnpqqqqqqpppponnmnopoooomkjjiiigdccefilnprrpqtx{{wsqpqqrqqqrrrrrqqqqpqqqqqqpponmmlkkkkjjjjjkllmmmmnnmmmprruupmprrrqomlpqqssttuwxdIXegggbbehkmoooppokjloqqqqqsronorrttuvvwwtqjilmnonnnnmllljhfedaadghhgfeefgfWC989=@E@:Kfoqrspmlklnrrunikkklpwz{wnjjklllmnoprstuuuusqommmlnnoqsvwwwvtqolkkkllmnoooppnoqrsrqponqrttstuvwxxwuq\\MNPR[rvssrrtuxxxwwwxxyywurruzyvwxz|~}{{{{|||zxuuuwxz{}}|{zz{|~}ztpswvsnoprtwz}~~~~~}|{ywwxyzzyxz}~}ywurrrrrrrrrssuuuutsssstuuvvvvvwyyyxvutwxuuuvvwwvvvuvvvvvuvvvvvvvuuuy~|z{{zytpppqrsrsrrstuy}{xxwutsrqprtvzzxurprrttuxyz{{{|}}}{x{}}~~~~~~~~~~}}}~vvvvvvvvuttttttttttttsssssssttttttttuvvvvuuuuuuuvwwwwwvvvvvvvvvwwwwwwwwvvvvvvwxxwwwxxxxxxxxwwvwxxwwvuuuuuvvwvvuvvvxxxwvutrqponoooonlmnllmnprrrrrqppooonnnnooooooomkkjjjifdehijmoqrrqruxyyuqooppppqqqrrrrqqqqpqqqqqqppoonmlkkkkkkklllmmnmmmmmlmmqrrsuvusssqpnllnprststuvzdHZhfecdeijlmooppoldciorqqppsvrnmqsvvwxyzzxukgklnonmmllmmlkjgdbaa`bghffddehdR@::<?AB:<Slsrqppnllklnnrljklkknsz{vnkkmmnnnoopqrstttssqpooonnlmmpsvxyxxvuqoonnmllklntsnpqrrrqpooqrsttuvvwxxwvtZJJLPZrvttsrtuwwwwwwyxxvtqllr}xty}}}||{{{{{{{zwtvx{|~}|}|{{{||~|yvtwzysmpqtx||}~~}}}}~~|yxxxyzz{}}}|yvtrqpoppqqqrruuvvtssssttttttttvxxxwvutwyvuvwxyyyxwwwwvvuuvvvvvvvuuvz~zzyz{vpnoprsssrrrsuw{~}zyxwvutsrqswy|{yvsqrsusswyz{|||}}|{{|~~~~~~~~~~~~}}}~~vvvvvvvuutssttttuuutttssssttttttttttuvvvvvuuuuuvvwwwwwvvvvvvvvvwwwwwwwwvvvvvvwwwwwwwxxxxxxxwwwxyyyyxwwwvvwwxwvvvvvvvwwvutsqponnmmmlkmnnnoprsrrsrqpoonnnonnnooopponmlkkkkljilmmnpqqqqruvurnllmnoooppprqqqqrppqqqqqqqppppomllllkkllmmmnnnnmlllklmoonmnpqrqppqqonprsttttsuyeEQbdedefghjkmmkjhebekprpmmmptsnnqtuuvxz{zywmhkklllkjjjmoomlidagme^befeddehbN>:<=@B@9?YqtsrqonlkjklnollmmllmqyzupnmoqqqppqqrsssssrrppppponnnossrswwyzyvtrpnkifeeirvsrrrrqponopqrstuvvwwxxwvZGFINXrvttsrstuuvvwwxwusomkntzuv}}|{|{{{{{{zwuwz}~}|||||||}}|zwwy|zukqsv{}}}~~|||~~~{xxxzz{}~}|{xtrpnmmnnooopqtuvvussssstssssttuvwxxxwvyywuvxyyyyzyyxxwwvvvvvvvvvvvw{|yxwwwtpnnoqrssrrrstvy}{yxxxvutsrsuyz}}{yvsuvwtswxz{||}~}}||}~~~~}~~~~~~}~~~~vvvvvvutttssstttuuuuuuttssstttttttuuuvvvvvvuuuuvwwwwwwwvvvvvuuvwwwwwwwwvvvvvvvwwvwwwxxxxxxxxxxyz{{zzyyxxxxxxwvwwwxvvvvuuttrqonmlkjjkmnopqrsssssrqponmmnoponooppppoonmmmnrpoqpoopppopruvrpkjjlnnonnopqrqoprqqqqqqqqqppqpnmlllllllmnnnnnnmmllllllmlf_befjmnprssrrtuvvvvuuulPEVciggfeefgiiga\\[^flpplihjjoqonprsttvxyzzyrljjjjjihhjmopnmkidksna_cefefgi]H;8<>@A@;DasssrqqoljjkmnnnnnnnmmovyusqqrstssrqrsssrqqppppppqonmnqurmmqtyyywtpkhfeddbdirrqqqqonnmnoprrtuvvwwxwwvZEEGLWqvttssrrstuvvwwvsplkmrxwrx~|||{{{{{{{wvy|~~~}||||||||}{zyyz||wlswy{|~}}}{{{~~~{zxxyz{|}}~yvrpnlklllmmmnpstuuttsssssrrrssssuvzzzyyyxvuvxxxxyyzzyyxwwwwvvvvvvvwx|}{yxwusqqpoonoqssrrrstuw{~ywwwwvuutssvyz||}}{yzyyuruvwz||}~~~}}~~~}}}~~~~~~~~~~wwwwvvuttsssssttuuuuuuuutttuuuuuuuuuvvvvvvuuuuvwxxxxwwwwwvvvuuvwwwwwwwwvvvvvvvvvvvwwwwxxxyyyyxyzzzzzzzyyyyyyxwxxxywwwvvvuusrpomkjjjklnoqqsssstsrqqponnoqponopppqppoponooqrrqpppqponorvwuromlmnonmmnpqqpoorqqpqqqqqqqqqpnmllmmmmmnoooonnnmlllllllg_W]b`djnqsuutuutuuvvttswhNK^gfffdcbbceed`[V^imkhffiimonnprrrsuwxzzysmjiiihgffimooommlehruiabegghifVA99<=>?><ShrrrsrqoljjlmnooooonnmoswuusttsssrrrrsrrqppooopqqponmmoqpkkmqtuuqmjgedcddeegijmnnmkijlmnoqqstuvwwvwxvcIGGKVpvuwusrqrstuvwwvrnjiltxvr{}||{{{{{{{wwz}}}}||||||||{|{zz{|}}ypuz{{{~~~~{{|~~~|zxxyz{||}xtqomllmllkkkmnrsttttssssrrqrrqqqrvz||{zxwutuwwwxyyyyyyxxwwwvvvvwwwxy|~{yxwtrpnoquunoprussrrsuvy~}ywwwvutttssuxyz|~~}{{{zxvtru|||}~~~~~~~~~~~~~~}~~~~~~~~~~wxxyxwvutssssssttuuuuuuuuuuuuuuuuuuuvvvvvvuuuuvwxxxxxxxwwwwvvuuvwwwwwwwvvvvvvvvvvvvvwwxxxyyyyyzzzyyyyzzzzzzzyxyzyzyxwvuvvutsqpnkkkklmnopprrsttssrrrqppqrrpopqqqqqqqqppppnoooopqrqpopsvxxwspooppoonoprrpnoqqqqqqqqqqqqqpnmmmnnnnnopppoonnmmmmmmmibZ[ab`cjmqrsssrrstuvusrvxvbNXbbcba```acgifb\\`ggeedeghknnnprqqrsvwyyxslhhhihgefilnnnmnnfenvpeaeiijjeS?89<>??>HdrssrsrqnlllnopqqqppooooruutsuusrrrrsrrqqpponopqqqpnnmlmmmllllnonigedcbcdefggffikmopplmmmnpprtuvwxvuwwkQIFJSnutyxusrrrsuvwwvsmifksutu~~}||{{{{{|{xx||||||||||||||{{{{|}~}ytxz|||}}}}{{{}~~||yyzz{{z|wqpnllmlllkkklnprssttsssrrqqqqpoopu|~}yvusrqrstvxxxxxxxxxxwvvvvwxyyy|~{yxvsqonoptxpoorvttsstuvx|~|xwwvuttttsrtvwy|~}|{zwtpt|{|}}~~~~~~~}{{}~~~~~~~~xyz{|zxwvussssstttuuuuuuuuuuuvvvvvvvvvvvvvvvvvwxyyyyyxxxxxwwvvuvvwwwwwvvvvvuuvvvvvvvvwxxxyyzzzzyyyxxxyyyyyyyyyzzzzyyxvvvuutsrqomllmmnnnopqrstuutttsrrrstsqpqrrrrrrrqqpppnnoooqrrrrqqsvxxvsqpppqqpooqrrrqqqqqpppqppppqqpnnmnnnooppqpppoonnnnnnnmi_Y`cb`empqppponpruwwvtstvxoXV^^__``abcdhigdefc`abccbbejlnpqqpprvwyxwrliiijjihhjklmmmnogejrqjefjlljgYE<;>@@>AVostrrrrqnmmmoqrrrqpppoooqtttrttsrqrrrrrqqppppppqqpponmlkkkmlkijkkhedcbbcdfhijhfhijlnrtsnllmoqstvwxvvwxs]IFGOlssuttssrstvwxxwtng^gsvrw~}|{{{{{{|{xy||||||||||||||{{{{}}}}{x{{|||}}||{z{}}~}}{z{{zyyy|rmnllmlllllkkkmoqrssssssrqpqqpoonnt{|yvssqnlmortvwxxxxxxxxwvvvwxzzzx|}|zxvrpnnnosyuqorwvvvuuuvxz|zxwwvuttttsqruwy{~~}|{yvru}}~~~~~~}|{|~~~~~~~~~~~~yz|~~}{yxvtssssttttuuuuuuuvvvwwwwvvvvvvvvvvvvwxxyyyyyxxxxxwwwvuuvvvvvvvuuuuuvvwwwwwvvwwxxxyzzzzzzyxxxyxxxxxxyxyyyyyyywwwvvutsrqonnnooonnoprstttutttsrtuvuspqrsrrrrrqqpppopqqpqqrturqtwxvtsqqppqqpooppqqqppooooppppoonnnmmmnnoppqrqqpppoooooooomi_]ddbbjrsqnmjgejpuwwvutqrup`\\^^^_afgfffhhgec`^^`bba^_djlmnppooquvyxvpkjklllkjjkllkloonihjpqoliknmjgXE>AB@?>E^nopqqqrqonnnpqrqrqpppponpsssrtssrrrrrrqqpppoopqqppoonmmlkklmmiijjiggedccdgjopjgjlkiijlnlijkmoqsuvwvuvyxdIEGPjutnoorrstuvwxxwvpfYaryqv~||{{{{{{|{y{|||||}}}}}}}}|{{{||}}||{|||||||{{{{|}}~~~|{{{ywvuwmjmllllllkkjjkmoprrsssssrrpqqponmmov{ywwutspmmoqrrstvyyyyyxwuuvwx{|{x|~~}{yvronnnopyytpswx{zwvtvxyzyxwvvvuuttrqqtvy|~}{{{{yvv~~}}|}}~~~~~~~~~z{}~~}{ywutsssttttuuuuuuvwwxxxxwwwvvvvvvvvvvwxxyyyyyyxxxxxwwwvuuuuuuuuuuuuvwwwwwwwwwwwwwxxyyzzzzzyxxxxwxxxyyyyyxxyyyxwwwwvutsrqppppooooopqstttttssrstvxwtqpqrqqqrrqpoooppppppqrtxtrswyvtsrqqppqonlnnoooppoonnooooonmlkkklmmopqrrrqppppooooooomh``bbchouuspmjdbhmtvvutsrqsnb]]]_afiiigggggec^\\^`aba^agkllnponnoswyxuplklllmmlkklkilokfgfkprutnmnnjfW@?CCA??G\\mnnmnqqqpnnooqqqqqqppponpqqrsssrrqrrrrqppponooppooononmlllmmllkdhmmkgfgfdfjljffkpsrnigghggiknprtvwvvwxvfIFLRjvuqppqrtuvwwwxwwrhW]oxqv~~||{{{{{{{{z||||||}}}}}}}}|||||||||||}||||{{{{{{|~~~}|{zyutspmklllllkkjjijkmopqrssssssrqpponmlllrvxwxvvusqqpooppu{}{zyyxwuuuvxz}|vz}~|yuqpnnoorwxustxy}{ywuwzzzywvvvvvuusrqqsvy|}~~}|{{{|}{{~~~}~~~~~~~~~~~~~~~~~~z|}~|zxvuttttuttuuuuuuvwxxxxxxwwvvvvvvvvwwwwxyyyyyyxxxxxxxwwvuuuuuuuuuuvwwwwxwwwwwwvvwwxxyyyzzzzyxwwwwwwxxxxxwxxxxxxxxwwvuussrrrqppppppprsttssrrrstxz{xspprqqrrrqpoopppoooopru{vsrvvtsrrrqoopnljjklmnnoooooooonmlkjiiiijloqrsrrqppppoooooonlidc_]fnrvwvusmfdhlrtussrtspidbaaeinomkhhghgeb]]^`aaaciopkimnmmlnruxwtqlkmmnonmlkkkhkkc^_ajprttqoomjdS==CCA?@J_kllklpqqpoonooppppqqqppoooqqssrqqqqqrqqpppoonopqpooooonmmmlkklliccjqmnqqppnnmjhhhknmjgeffggilnqrtuvvwxvkRKMWlwvsrrssuwwwvwwxxtl[\\ktqu}~||{{{{{{|{{||||||}}}}}}}}||||||||||||}}}||{zzz{|}~~{yxxwsnlkjkkkkkjiiiijkmopqqsssrsttronmlkjihmtywvvutttsqoqu{}}zyyyxwuttuvwz~{ux|}zurpnnpqsvxwutxz~}{yvx{{{ywvvvwwvutrqqsuy|}~}}||||}~~~~~~~~~z|~~~~}{zywvuuuutttuttuuuvwwwwwwwwvvvvvvvvwwwwwxyzzzyyyxxxxxxxwvvvvvuuuuuuvwwwxxxwwwwwvvvvwwxxyyyyyyxwwvwvvwwwwxwwwwxyyyyxwvwwuutssrpqqqqqqrsssrqqpqrtx|~|vqprqqrrrqqpppppnmmnosuzvsruxusqqppooonkjijklnooppoooonmlkihhhhhiknqsssrqppppoooooomljiib`hqtvvvwtqmjlmpqqqqrttqmlmmnqrsrolhghigeb^^_aaadiosj[enomklmqtwvtolklmnoomlkkjiib[[XXainqqqqqokh\\K?>AA@CQdlllkloqqpoonoooopqqqqqqqpoqqrrqppppqqqppooonnopqqpppooonnnljjmpjdfnsqqtvyzywvtplfdhhhggfggfhjnpqstuvwwvteTIYmvutssttvwwwwwxxyxshafoqv}~||{{{{{{{|||||||||}}}}}}}||||||||||||}}}|{zyyyz{|}~~~~}{xtxyqmljjjjiiihfggikmoppqqrsrrrvwsomlkihgelv{wtssssuvwxz||yvuwwvvussstuwy}ytw{~{vrponpqtvxwutvx|~|zxz|||zywvvwvvutrqqruy|}~}}||||}~~~~~~~~~z|}}}|{zyyxvvvuuuuuutttuuvvvvvvvvvvvvvvvvvwwwwxyz{{{zzzyyyyxxxxwvvvvvvvvvvvwwwxxwwwwwwwvvvvvwwxxxyyyyxxwxwvvvvwxwwvvwxxyyxwwxywvttsrqqrssrrrssrqpppqrty~yrprqqqqrqqqqpponllmnqsxtqsvywspnnooonmkjjjklnopqqpoonnmljihhgghiknqsssrqppppooooonlllmmjjmruvtrssrponopppppprqpppqrstssrqnjiijhfc^^addafosnZF_qrkijmpsvusokkllmnnnmljjih]NNUZ_dlpoorrokklgP@?@AK]immlkkoqqpoonooooppqqrtttsssrsqqpqpppppoonnmmmopqrrqppooonnmnnqtgksvwtrssv{|ywvsogceffffffffgimqrrstuwwvyt_J[mustttuuvwwwvwxxyywqkjnrw|~||{{{{{{{||||{||||}}}}}}}||||||||||||}}}|zxxxxyz|}~~~}||yryymmqplkigggfddfjlmopqqqrsrqqrspnlkihgeakyyuqpqqsux}}xqooprrrrrrrrrsuyz{wx{|xsqonpqtvxxvuuv{}{y|~~}{zxwvvvvutsrrtuy|}~~}|zzz{}~~~~~~~}~~~~~z||||{zxxxxxwvvuuuuuutsttuuuuuuvvvvuvvvvwwwxxxxyz{||{{{zzzyyyxxwwwvvvvvvvvvwwwwwwwwxxxxwwwvvvvwwwxxyzyyxywvuuvwxwvvuvwwxxxxwxxwuttsqqrsttsssssrqpppqruzysqrqpppqqqqqqqommmmnqqrqonnoonmmnnoonlkkkklmnoqqqponnnmljiiihiijlnprrrrrqpppooooonlkmnoopqrrssssusponoppqppoooonmllklnqqppomllje`\\\\`fechqr^I?Ujlihlnpsvtplkkkllmnmmllkjii_NPX__]jrnqsplmt|hFBADThpqpnmlnqppoonoooooppqrtuutsrrrpppppnlmqrjikklmnpqrsrqqpoonoooponkszzxvtrqrxyyxvsskeddeddeeegilpssttuuvww{vgL]ovtuuuvvwvvvuvwxyyyurmprx|}||{{{{{{{||||{{{{|||||||||||||||}}}|}~~~{zwvwxyz|}}}}}|}zszyrrwvljifeeff`gjlnopqqqrsrrqppnlkjihec^izxsonoprux{xtnkjlnooopqpppprtww}xq|}ztqonpruyzxwvvv{~|z|~|zywvvuutsrrrtvz|}}|zxutstx{~~~~~~~~~~||}}}~~}~~y{{{zyxxxxxyxwwvvvuuttsssttuuuuuvvvvvwwwxxxyyyyyz|}}|||{{{zzyyxxwwwwwwwwwwwwwwwwwwwxxxxxxwwvvvvvvwxyzzzyyxwvvvwxwvvvvvvwwwwvvttuttsrrstuutttttsqqqrrsv{ysrrqpoopqqqqqqponnnnooonmlkkjkklnnoonmlllmmmnoqqqponnmlkjjiijjjklnpqqrrrqpppoooonmklnqtuuusppqqrrqonnoqqrqpolknnqplhlopooqqqppmgb\\Z_ddfmupXEBRbfhkppprurmjkkkllmnmmmlkjjkjdYPQWXamkptpnpx~pMABGZovvuqpnoqoonmnooooopooprttqonpmkoppojgfjjedfgilnqrstssrqpooooonnlsyyxwyvtrptwxyxuwrjefdcdddeimpsuuvuttvwwzwmS_ovvvvvvwwwwvvvwxyyzxusttx|~||{{{{{{{{|||||||||||||||||||||||}}}}~~~{yvvwxyz|||}|||~{x||yy{wkjhdaced\\eknoopppprssssrqoljihheb^izvqnnoqrtvvvrpnmmnoonoppppppruu|yt}~|xsomorvz{xwvwx~}|~}{zwuutttsrrrtwz{{zxtqomkklr~~~~~|{{{|~~~xyyyyxxxxyyyyxxwwwvuutttttttuuuvvvvwwwwxxyyyyyzz{}~~~}}||{{{zyyyxxwwwwwwwwwwwwwwwwwxxxyyyxxwvvvvvvwxyz{{zyxwwwwwvvwwvvuvvvvutstttsssstuuuvuuvutrrrsstx}ytrqpoonooooppqqqpponnmlkkkkjijkmnooonmmmmnooopqrqpponmlkjiiijkkllnpqrrrrqqponnnnmlklosvxyyusqponomonnnqrrrrpnnonlilqrqpoooqrssqmi^Z^cdjsumRBL\\cimnooprurmkijklllllmmmkihhikh]POYbhkqrooqsojVGDI_txwusrpoonnmmnnooopponpqrrniknhgnppmic_`ba``bejnqsttssrqponnopqrruwwxyywvtrruwyxwwvrkhfddefinrsuvwwvttvwxxvs`dovvvvwwwwwwwwwwxyyyxxwwvx{~|z{{z{{{{{{|||||||||}}}}|||||||||||}}}~~{yvvwwyy{{{||||}zy{}}|}vhgd___a`Wckmoopppprsttssqnlhfffc`_evsooopqrsuuutsqpppppooppooopqssxzz}}zupnqtx{{xwvx|~~}}~~|zwvutttsrqrtvyzxurpnlkigem~~~~~~~~~~~}|||}~wwwwwwwxxyyzyyxxwwwvvutttttuuuuvvvvwwwxxyyyyyyz{|}}}}~~}}|||{zzzzyyxxwwwwwwwwwwwwwwxxyyzzzyxwwvvvvvwy{{{{zyxxxxxwvwwvvuuuuuvutuuuutsstuvuvuvwuuussttuy|}xsqqponmmmmnopqrrrrqonlkjjjjjiikmoooonnnnoopqrssrrqqqomljihhijkklmoqqrrrrqqponmmmlkklorvyywuutqnnmlmqonqrrrrrqplijjpvvtspooprtutrnaW^dfnvumWFRbdjnkhilsspnkhgjjkkkllljgcbdeffecRV_ejpllmljghbQCHduxusrqnlmmmnnnnoopqrrqqqpojhlmhhmnnje]XV\\b^[_bglprsstssrpnmnprvyy}zsuwyxwusruvxxwwwtpkgecdiostuvwwvroruwxvtxijpuvvwwwwwwwwwwxxyyyyyyzxw{~~zyzzz{{{{{{||||||||}}}}}|||{{{{{{{{|}}~~{yvvwwxxzzz{{|~|zz}~~|vhf`VVZ]^Ubkmnnooopqrssttqnkgcba^[\\domoppqqqrsssssrrrrrqqpponnnoprquw|~{wqptx{{zxww{}~}|{{{{|{zywvutssrqrtvywsrponmllifq~~~~~~~~~~~~~~~}}~vvvvvwwxxyyyyyyxwwwvvuttuuuvvvvvvvwwwxxyyyyyyyz{|~~}~~~}|||{{{zzyyyxxwwvvvwvwwwwwxxyyz{zzyxwwwvvuvxyzz{zyxxxxxxwwxwwvuutttuuvwvuutttuuvvvvvvvutuuuux|~}wrpponmllllmoqqrsssrpomlkiiiiiikmooonnnnopqsstsstttttqnkjiiiikklmnoqrrrrrqqponmmmlkjknquxwusutroppsjmnorrrqrrrpgekptutttronoqstusqeW\\ejrvupgRZa[gheecipplmmkiiijkkkklifdbcbccce\\X\\cgjjjihfefkdGIguwutsrnklmmnqonnoqrrsssqomihllijlljfa\\TR\\a^Z^`dioprssssrpnmnpstwwyzwwvywvussuvwxxxwuslfdcckuvuuvwvqifmtwwwvwplpvvvwwwwwwwwwwxxyyyyyzzywz}}zxyyz{|||||||||||||}}}}||||{{{{{{{||}~~~{xvuwwwwwxyy{|}~{z{|}}|xpf\\IMTY\\V_mlmnnnnopqrsvvsojd_\\YTQWpuopppqpppqrsrsttttssrqponmmnoqqtv|~~|zvtx}}zvzyy}~}{xwwwwxxxxxwusrqqrvxyupooonlnsrgw~~~~~~~~~~~~~~~~~~~}uuuuvwwxxyyyyzzywwwvvutuuuvvvvvvvvwwwxxyyyyyyyz{}}}}}~~~~}|||{{{{{zzyyxwwwvvvwwwwwxxyz{|{zyyxxxwvuuvxxxyyyyyxxxxwwwwvvvvuttuuwyxwuuttuuvvvvvvvvuuuuux|~|uponnmmllkkmnprsttsrqpnmljjjjjjlnoonmmnnoqrtuvtuuvvvvspljjijjllmmnoqrrrrrqqppnnnmlkjknruwurptutssrmdsssrrrrqssogfmsurkiiiloppqrutrmYYgpuuspq_]UYgabha]ijccdhlljjjjkjjihgefecabdc[ZchiiggggghqtROowwvvwvoklmnrupnnoqrsstvrkikmmkijkkhd^ZQPZ_\\\\__bfknprsssqonmoqsuuvx{xwwxwvvtssuvxxxwwvkedeblwvvvvuvngdkrvwwwwsnrwwvwwwwwwwwwwxxyyyyyzzzxz}}{yyyz{|||||||||||}}}}}}||||{{{{{{||}~~~~{xvvvvvvvwwx{|||zywvwy{{ujX?GOUYV^omnopppoopqruxurlc\\XUNIPtzqooopopqrststvutssrrqponmmnorsww{~~~}~zy|~|w{z{~}zutssssuvwxwvtrqqsxzytooooonqxyo{~~~~~~~~~~~~~~~uuuvvwwwwxxyyzzzxwwvvuuuvvwwvvvvvwwwwwxxxxxyyyz{|}}}}~~~}}||||||{{zzyxxxwwvwwwwwxyz{|||{zyxxxxwvvvvwwwwxyyxwwwwvvvvvwvuttutvwwwvttttuuuuuuvvvuttttx||tonmmmlmlkkloqrsssrrqppnmkkkklmnpponllmmoprtvuttvwwxwuqmkjjkkmmmnopqrrrsrqqpponnmlkkloruvtolqttttqhhyxvrrqqqrrojinrusoke`afkmoqqrqmb\\kuvrqpshWJak_enfV`b^ZX_lomljkllkjihhihc`acfd`bfghffggihjlVVv}yxxwwqlkmqvxronnopqqsurjhllkjijjihf_YONY]Z]a`bdglorstsqpnmnrwurszzwvwxwuusrrsuwwwvwwhdhkdmxxwwvuupheiouwwwwuptxxwwwxwwwwwwwxxyyyyyzzzxz||{zzz{|||}}}}||||}}~~~~~}}}}{{{{{||}~~{xvuuuuuvuuwyyyxuurpqtx{xqX;DLRXU[mklpttsqnnoptwxulbYTPJDJnyqnnnoopqrtuuuuutssrsrqonmmnorq|z~~~~~~}|~~z{{|~{wttrqqstvwwwtrqqtx}ytopoooot|}z}~~~~~~~~~~~~uuvvvwwwwwxyyzzzyxwvvvuvwwwxwwwwwwwwvwwwxxxxxyyz||||}~~~}}|||||||{{zyyxwwvvvwwwxz{{||||{zyxxxxwvvvwvvvwwwvvvvvvvvvvvvvututuuuwvutstttttttuuuutsssw|}tnmlllmmmlklnqssrqqqqqponlllnopqrqpomklmnqrtvtrptwxyxwtpmlllmnnooppqrrsssrqppponljkmnpsvwuoimsuutqns~xuqqqqqqqpmnpruusrnhec`bekoppfjcpvsooqrnVJekeiomVU]\\ZX_lqomjjlmllkffhhdabcghcaceggggeiiji_^v}yxxvvqmlnrwwsqpoopppqqnjjkkkjiiiiji`XLM[\\Z^bccbdjnqrsssqpnnsxvsu{zttttttsqqpqrtvvuvvffnqhnxxxxvtspichmtvvvwwuuwwwwwwwwwwwwwxxyyyyyzyyxz|{zyyz{||}}}}}||||}}~~~}}}|||{{{{||}~|yvuuuttwwx{{yvtqqomnosxyt]=@FLPOZpkmtxzwrnmmnqvywmaVNIC@Lntommnoqrstvxxwvttttsssqonlmnort~|}~~~}||}~{wvtrqqsuwxyurqswz~zvqppppqw}}~~~~~~~~~~~~~uuvvvwwwwwxxyyyyyyxwvvvwwwxxxwwwwwwwwwwwwwwxxxyy{{{|}~~~}}|||||}|||{zyxwvvuvwwxyyz{{{||{{zyxxxwwvwwwvvvvvuuuuuvvwwvvuuvusrrssvuttttsssssstuttsrrrw}|tnmlklmmmlllmprrqpppqqppnmmnpqrrrqqonlmmoqstusqnrwwwwvwsnmmnmoopppqrrssssrqppqqoaYgnprqsutob`rutrqot|vtqqqqrrrrrssledmttumrpg_ilmnlngsvpnprts_TdkjhloaSY_\\]`hopliijllkkc`efffeeed^^`dfhkjgggjkfenttvvusrqnotvutssqqprqomjjkllkjjkkknlcUKMZ\\\\_accbcilprtusrqrpsxxvy{xsqrqpoommmoprssstrmlrqnowwxyxvurjcintwwvwwwvvwwwwwwwwwxxxxxxxyyyzyxxz{{zyyz{{|}}}}}|||||}}}}}|||||{{{||}~~}zvvvuuuxz|}}|yurqonnnpvyve@<@CGHZwllv}}ztommmotx}p^QJD>@^psrpnnoruvwxyyxwsqtutstrpnmmnptv||~~}}|~~zyvtrqrsuwyvtswz}~{xsrommsy~}~~~~~~~~~~~~~~uuvvvwwwwwxxxyyyyyywvvvwwwxxxxwwwwwwwwwwwwwwwxxxyz{|}}~~~~~~}}|||||}||{{zyxwvuuvwwxxyzz{{{||{zyxxxwwwwxxwwwwvuttuuvwwwvuuuuusrrrrtutuvutsrqqrstssrrrqu{|wqnmlllmmmmlkmopqpooppqppoooopqqqqqqqpnooprsttttrsvuroqrqmmmmnooppqrrsstssrqqpqqqeVfpstqsyxj][qutlgkossrqqqrssqi^TKHHQbqttgmvxslgdfimlrspoqqrofbhnkefno\\R[b``dlpjgikmkihUFLZcghea[WZ_dinstnhggihiklnppprvvqruvtqstssqponkijlmmllnnonomibOIY\\]`bbbabgkorsttttvsuxyxxxupnonmmllmmnprsrqrpopusrqvwxzzyyvldkpuwwvwxwwwwvwwwwwwwxxxxxxxyyyyyxyzz{zyyz{|}}}}}|{{{|}~~~~}|||||{{{}}}~}yuvwwxx{|~}yvsqpnmorwxkC59;@DZ|qoy~{vqnmmnqu|lUGE@DUlsssronosvwyzzzxysrvzvsuttqnmnpuy~}}~~~~~}~}|zwtrqqstwxuuy}~~}{wuqmnv{~}~~~~~~~~~~~~~uuvvvwwwxxyyyyyyyyxwwvvwwwxxxxwwwwwwwwwwvvwwwwxxyyz{|}}}}}}}}||||||}}|{{zywwvuuvvwwxxyzz{{|||{zyxxxwwxxxxxxxwuuttuvwwvvvvuuusrrrrtssuuvtsqopqssrrrrrqqpppooonmmmmnnnlklnnpppppppoooooppqpppppqqpqqqrsttuvurtsmgilljllmmmnopqrsttttsrqqpppqlWetwwusspgcbqtrldinoqqqqqpmeR>8;FR]hptxwhkmrvtpmllnnpqpqppqnjjknjbbincQR^`_ahlgeghkjhi[G;@L\\fhbWRV_hpvzyuqmjilkjjjllmpvxttvvsposwwupmljijkllllmoqpnmmm[ET[^``ababhknprtssuxvwxzxutqnnnnnnmmoppstttrqonpuuusuvwzzy~xngnsvxxwxxwwwwvwxxxxxxwwwwwwwxxxyxyzz{{zyyz{|}}}}}|{{{|}~~~~}|||||{{{|~~|ytuwy{{~~|xvsqonmpu{pI368<BX}ut{~zwromlmosyhO?AI_qqrrrqmnpsvy{{{{yyuv|~xtwxytonnpvz~~~~}}~~~|zvsrqprvzww{~~~}|yysopx{}}~~~~~~~~~~~~~~~~~~~~uvvvwwwxyyzzzzyyyyxwwwwwwwxxxxwwwwwwwvvvvvvwwwwxyyyz{||||||||{{{{||}}}||zzywuttuuvvwwxyzz{{||{{zyxxwwxxyyzyyxvvttuuwxwwwwvvvsrrrssrqqqtusomopssrrssssrpnkjmpqommmnnonmmnnoppppppoooopppoonnnoqqqrrrrqrsuuuttsnjjllllllmmnopqrstuutssrqpppqq`bw|xlkonllkqsrngfkpqqqpqfPA>BO[gmpqonkrhe`fstuvtqonnnruspxynllnicbb^PHNZ^__cgd^^ciihii^J??JZfh[OS_lvz|{y{xrqtqqpmklnmqttvxvsnlqxzwrmkjjkjjiiijlnmmllmlRRXZ\\^aa`chlnpssssuwwvxyxtpmmnoppqqrtttuvvvsqpoosuwvuvwyyy{wqkruwxwwwwwwwwwwwwxxxxwwwwwxxyyxxyy{|||zyz{|}~}}}}|{{{|}~~~~}|||||||||}~~xsuy{~~~~~~~}{zxvsqomot{tO4469BW}yx|}zwtpnmmnqzeH>=Snsrsusrnmpsvxzz{{yyv|ywy{{xsqnry{~~}}}~~~~~~|~~}{xtrqrswzww{~~}||urtz}~~~~~~~~~~~~~~~~~~vvvvwwxyzz{{{{zyyyxxwwwwvwxxxxwwwwwwwvvvvvvwwwwxxxxyyz{{{{{{{{{{{||}~}||{zywuuuuuuuuvwxyzz{||{{{zyxwwxxyzzzzzxwutttvwwwwxxxvtsrrssrpppssqllmorrssssssrpomlmpqpnnnnooonnnnoooooooppppqppomllnnpqrrrrqqrstuvtusollmmmmlllmnopqrstuutsssrqooqsh_x}vtrtqpnpqrromlmrrrqniE6GZelprph^\\]RflaeprttutsonlmqurqyypmmmgdcaZTMGPY^_cda\\[bihhikh_QD=>N`aRQbox}|zyvtqsrpppmmoonnrwyyxtnklppokijjkjihgghiiklmnmmqbURTX]ababhmnsrqomswwwwyxsommpqsstuyxwuvwwwusqporuvvvvwyyyywrnsvwxwwwwwwwwwwwwxxxxvvvvwxxyyyxyz||}|zyz{|}~~}}||{{{|}~~~~}}|||||}}}}~}{xz{|~|{z{~~}{|zysnonowzx[5226@U|{z|~}zyvronmmpzaE?Kaqsruwurnnqqtvx{||{yy|~~{x{}}zwsos|}}}~~~~|vsttvx|~~~{}wqquyzwx|~~~}||vux|}~~~~~~~~~~~~~~~~~~~~~vvvvwwxyz{{{{{{zyyyxxwwwwwxxxxxxxwwwwvvvvvvvwwwxxxyyxyyyyyyyzzz{{||}~~}}|{{ywwvvvvvvwxxyyz{{|||{zyxwwxxyyzzzzyxvuutuuvwxyzzyvtsrssrpnnpomihlpsssstttuutqpnoqqponnopppoonnnooppooppqqqppnlkkmnppqrrrqpqsuuvvutrponnnnnmmnnoopqrstttsssrqoooqn\\sywvwsqorrnqsvusttrpk]9Jjrsutpi\\MQYKTnjlutrpqrqpolkjlpsvsqqomfccdddYFFPY]_`_^agiiijllg^XJ:>Qb^Xcmsutttpnnnnnlmnoqqpotz{ysnkiijlljhjkkjhggffffgjpstssk^UQT[aa``jpnsuusrtwxwwxupnopsuwxxxzzyxxxxxwvtroosuwwvwxxxyxuqtvwxwwwwwwwwwwwwwxxxvvvvvxxyyywyz}}}|zyzz|}~~}|||{{{|}~~~~}}|||}}~}~~}}}|wtttwxyyy}~}zspnoxz{i@203<Kr~~~~}{zxtponmoy\\AG_nttruvwzplonqtw{|||zz~|{~}zvpu}}}~}wtpprtvy{|ytrvz|yz}~~}}~zy}~~~~}}~vvvwwxyz{{{{{{|zzyyyxxxxxxxxyxxxxxwwwvvvvvvvwwxxxyzzyxxxxxxyyyzz{||}}}}~}||zyyxwvvvwwxxyyy{{|}}|zyxwwxxxyyzzzyxwuttttuwwyzz{ywussrrpoonmkijmpttttuuuuuurqnprqpnnooppqpponnopppooppqrqponlklmnoppqqrqpqsuvwvutrponoooonnooooppqrssrrrssqonmppgnxuuvvtrqsslptyvtttsn_CEauruutncSGSZMNdportusqrswvrliinttsttqhdcdflnaGBJSY\\]adghjmnorqhcfeXLKW`^bpqqpqqomnmmomnpqrpnqv{vromliilrtpkkkkjhggghffehouwwurmbSPY`a`boupsvxyxwwxwvvqostsvvxyyxxyyyyyyyxwutqprsvwvvwwwzyvtuwwxwwwwwwwwwwwwvwxxvvuuvwxyyxvyz~~}|zyz{{}~}{|||||}~~~~~}|||}}}~~~~{wtrsuwvtttuz|}xroqyz|qN3/05?b|~}{zyvrpnmowXEYlrrrqqsv}xolmorvz||{z{~~{||yrv}}}~|zurqqqsuyxsv{}|}~~~}}}}~}||}}vvvwxyyz{{{{{{{zyyyyyxxxxxxyyyxxxxxwwvvvvvvwwxxxyzz{zyyxxxxxxyyz{{|}}}}}}|{{{||yxxxxxyyyyy{|}~~}{zyxwxxxxyyyyxxwvutsstuvxyz{{ywtsrqqpponmllnptttuuuuuutrpopqqonnoppqqqqpooooppoopqrrqpommlmnnpnooqrqqrsvwwutsrpnnnooooopppppppqrqqqrrsqnmmpomhuuuuuutstsqrtwwuuusmUF[mstvutn^MFW[U[[qoiosvuuwz{xsnnorrvtrob``admpbHAGPX[]dijhipqrrqigork]LCIZfqstvwvrppooooopppompuwrostnjiluwpkjjjjiiiikmkggjruuonss[LV`bcjvzpsuwzzyxwwvtrqtuvvvwxxzz{zzyyzzxwvusqqruvvuvvwxxvuvwwxwwvvvwwwwwvvvwwxwvuvwyyywwxz{~~~|zy{{||~~}||||||}~~}||||}}~~~~|vrrrux{wvsptvz{zvst|z|uZ70/39W{~}{yzyvrolopPQjpqrqqpprszxnmnptz|||{|}}}{}}zux}}}~~~~~}ytrpqsu|uw{}~~~}|}~~~}}}~~~~~vvvwxxy{||{{{{{zyyyyyxxxxxxyyyxxxxwwwvvvvwwwxxxyzz{{zzyyyyxxxxyyz{{||}}}}|{zz{|{zyyxxyzyyz{}~~~~|{yxwwxxxxxxxwwwwvtttstuwxyz{zxvusrrqpooonnprsttuuuuutsqppqpponnopqqrrqpoooooooopqrrqpoommmnnommnqrrrrsvxwtsrqonmnoppppqqppppppqppqqrrqnmmpqoktuuuuuutsqlmruuuuvsjXVgstuuvtp^KGZUT]hpqiehosuwz|{xuqolqurolhgfcflpaIGLKV[^ioniiprrrplnuumg`SKXiqwz}{zxvusqpoooooolotusuvuoljjnomjjjjjiiiknsrpljosspotxbKS`^hsxyutsvzzzyxwutssuuwvvwwxyyzzzzzyyywwvtrqrtvvuvwwwwvuvwwwvvvvwwwvvvuuvwxxwvuvwxxxvvz||~~~|zy{|}}~~}{{||||}~~}|{|||}}~~yqrtwy{{{z{xvttqpxztv}{}ylE2.28Kt|{yyz|yrnkrcOessrssrpnootvromnrz|||||}}||~}|{}}}~~~~~zvsqquy~zy|~}|}}}}~~~~~~~~~~~~~~vvvvwxz|}||{{{{zxxxxxxxxxxxyyyxxxwwwwwwwwwwwxxyzz{{|{{zzzzyxxxxxyzz{||}~~}|xwxxyyyxxxxyyy{|}~~}|zywwwxxwwwwvvvvvutttttvwxyyyyxvutsrqppppppqrstuuvuttsqqpqpponnopqrrrqponnnnooppqrrqpoommmnoollmqsssstuwvtrqpnmmnopppqqqqpppoppopqqrrqonorssovuttuuutsnhkqstuvvumddmttttuuraLFZ[\\cowzsjjosuuvxy{ytomrsommqpjfgmq_MW\\KSY`otqkhnqrqppsxunjkh[Zmx{}~|zzywusrqppoonkouwwzwsljhhhiiijkkkkjjjlrvxwspstutuxhNP^`nwyxxwuuwzzzywvuuuwwyxwwwxxxyyzzzyyyxxwutsrsuvuuvvvwvuvwwwvvvvvvvuuuuuuvxxxvuuvxwvuvz||}~~|zz{|}}~~}{{{|||}~~~}||||}}~~vsw{|zyyz{|{zxutrux}wx|||xvkVB34Aj|zxyz{zpmlu[]wxxttutsponorsnlnry||}|}}}|}~~~~~~~~}}}~|}zvtsw{~{~~}}}}}}~~~~~~~~~~wwvvwxz|||{{zzzyxwwwwwwwwxxxxxxxxwwwwwwwwwwwxxyzz{{|||||{zzyxxxxxxyyz{|~~~~ywxxyyyxxxxxxyz|}~~|zxwwwwvvvvuuuvvvttttuvuwxxxxxwwvvusrqqpppprstuvvvuutrrqqppppppqqrrrqponnnnoopqrrrqpoommmnnokmnqtttttuuusqponmmnopppqqqqpppoppopqqrrqpopruurxusqstutsqnpqprtuwwtporvwutuvulSEVbfkrxxnklswvrpqtz{wsromnootrmiiopZR_bORYestpmjnqrqqqtwuokloe_my}}}{yyxwuutsrppnmlouyywnljjjkkkjhiklkkkkijsxz{zwwwzzxzrVQ]gwyyxwwxssyzzzxwvvwyyyxwwwwwxyzzzzzyyyxwuutssuvuuuvvvuuvvwwvvvvuuuuuvvuuuwxxwuuvwuuvx{}}}~~{zz||}}}}|zz{|||}~~}}}}}}}~~~yw|||yxvwxyzzzxywts~yy}~~~{}sdE27Y}~|{yz{zynmnzhs|zttwwxvqmnpqmlnrw{||}}}~|}~~~~}~~}||}~~}~zrqw~}}}}}}~~~~~~}~~~~~wwvvwxyz{{{zyyyxwvvvvvvwwwxxxxxxxxxxwwwwwwwwxxyzz{{||}}}|{zyxxxxxxxyyz{||||zzzyyxxxwwwwxxy{}}|zwxwvvuuuuvvvvvuuuuuvuvvvvvwwwxwwusrqponoqrtuvvvvtsssrqpppppprrrrqpponnoooooprrqppoomllmlmmnpsuutttttsrponmmmnopqqqrrqqpppppppqrrrqppoqrsqvrpmptttsqoppoqrsvwxuuuwxwttvwvaEQenqttm`amuwwtpmquxytoklppnqnljknhZ[emVPZjsrponppqrrstusqpqsngiu{}|zxxwvuuttsrqnmkouyxrloppppppokigikkkllpvz{{zyyy}}{xxaT`o~zzxwvysqvyz{zyxxyzzyxwwwvwxyz{{zzzyyxwvvuttuvuuvwvvuuvvwvvvvvuuttuvutstvxwvttuuuvxz|}}}~}{z{|||~}}|zz{{{|}~~~~~~~~~}yy||{wusttuwxzzwzxs{xx{}{yh@3Dp~}{z{|yvqpqzw~yurruwyzvspoollnsx|||}}~~}}~~~}~}||}~}~yuu|~~~~}~~~~~~~~~~~~~~~~wwwwxxxxyyyxxxwwvuuuuvvvwwwxxxyyyyyxxxxxxxxxxxyzz{{||}~~}|{zxxxxxxyyyyyz{{{{{{zyxxwwwwwxxy{}~|{yxxwwvvvvvvuuuuvwvwvuuvutuuuuvwwvtrqqonmoqstuuvuusttsqpqqppqqrqqppoonnnonoooqqqpoonmlkkllmortvvuuuttrqonmmmmnopqqrrrrqqpppppqrrrrrponoqrrusfbnutusoklpqssrtvxwvvwxwusvvuqVPepstsnfjpuvwvtrqpvytlqqppnnllkmid_hosdO_mrqqpppqqrrsstsrssvvmhsy{zyxwvutuuuutqnmkntxvsrtuuuttttpkfhiklmpsy{zyxwxx{|}~zkTcu}|{zxvwrptx{{|{zzyzzxxwwwvwxz{||{{{zzyxvvutttuvvvwvvvvvvwwvvvuttsstutrrruwwussttuwy{|}}}}}{z|}}}~~}{yzzz{|}~~~~~~|yy||zutsrrsuwyzzyxwxvy}~~}}|jI;Yz}|z||yvsss{~urpqtuy{zwrommlnsy||}}}~~~~~~}}~~~|{}~~~}xuz~}}}}}~~~~}}~~~~~~~~~~~~wwxxxwwwwwwvvvvvuuuvvvvvvwwxxyzzzzzyyyyyyyyyyyyzz{{||}~~}|{yxxxxyyyyyyzzzz{{{{zyxxxxxxxxyz|}~~~~~~|{{zyxxwwxwvvvvwxwwvuuutssssrstttqpoponmnpqrrssuvvuusrqqqppqqppoonmmlkkkklnopqpooonmkjjklnpsuwwwwvutrpnmlllmnoppqqrrrrqqqpppqrrrrrpomnooqsofcnuuutojlsuvvtstvwvuvxywrtustg]grwvuttuutuxxxvsptzskrsqomkmomhddltuvkRapsrrssrrrrsstttuuwyyqgnyxxxwvutttuuutromlntwwwwwxxxwwwvurjfgjlnrtzzxwuuwwy{}~qWgw||{zyvurpqv{~~~{{{{zywvwwwxy{}}||{{{zyxwwvutuuvvvwvuvvvvwwvvvutrqrsssqpquxvtrrrtvxz{|}}|||zz|}}}~}{yzzz{|}~~}{{||xssrqqrstwz|{yxwwx{}~{|lMJo|}|}|xwwxxyqooopqu|xqnlmot|~~~}~~~~~~~~}~~~~~}{|}~~}wv~}}}}}~~~~~~~}}~~~~~~~~~~~~~wwxxxwvuvvvvvvuuuuvvvvvwwwxxyzzzzzzzyyyyyyyyyyyz{{{|}}~~}{zxxxyyyyyzzzzzz{{{{zzyxxxxxxxyzz{|}}}~}~~||{zyyyxwwwwxyxwvuuvvutsrqqqqolklnnmmnnooppppsvuusrqqqqponmllkkjjigedehmnpppooonmkjjklnqtvwwwwvusrpnlkklmnoppqqqrrrrqqqppqrrrrrqpopqrttqootvvuurnquwvtsssuuttvxxwqruutsnnsvvuwxwwuvwxywtqu{vsrppojknmkfemwytwqVcqtttstssssstttttvyxtqmnuvvvutsssttttsromlotwwxxxyyyyyxwtqokjkmorswvvtstuuwy|}vany|||{zwvspntx~|{{zzyxwwwwyy{}}|||{zzyxwwwvuuuvvvvuuuuuvwwvvutsqpqrrrppptwuspqqtvxz|}}}{{zzz|}}}}|zyyyz{|}~~}{||{wsrrqrrrsvz|{yxwyz|~}{{|}lTbx|}~|wyz{{}uonoopps{{tonmou~~~}}}}}~~~~~~~~~~~~~~||}}~~~|x~~~}}}}}~~~~}}}}~~~~~~~~~~~~~~~~~~wwxxxwvuuuuuuuuuuvvvvvwwxxxxyzzzzzzzzyyyyyyyyyyz{{{|}}~~|{yyyyyyyzzzzzzz{{{{{zyyxxwwwxxyyyz{||||}~~}|{zzzyyyyyzyxvuuvwwvttsqpnkiiimonnooonnnnoqttsrrqqqpomkjihhiiiiihgfhlmopoooonmlkklnpruwwwwvutrpnmlkklmnopppqqqrrrrqppqqrrrrrrrqqqosvvvvwvvvvustvvussstutrrtwwwtsvwutqpqtwwxwvvvwwwwvsrtyzyxrnjeghfgjnpsqmut]hrssstuuttttttttuwztkjorvwtssrrqsssssrpommosvwwxxyyyyyxwsrqpqpmmqsvttsrrtvwy{|||nv{}||{{xwwtorv|~|{zyyyxwxxxyy{|}}||{zzyxwwwwuuuuvvvuuuuuvwwwvtsqonopqqpootusqnoqtwyz|}}|{zzz{}~}}~|{zyyyz{|}~~}}{||zwsrrqrrrrvy|{yxx{|~~~~||zy|zh`n{~}y{|~|}yspoqpqqqx}uspmov~}}}}}}~~~~~~~}~~~~~~~~||}~~~~~|~~~~~}}}}}~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~wwwwwvuuuuuuuuuuvvvvvwwxxxxxyzzzzzzzzzyyyyyyyyzz{{{|}}~~~~~|{zyyyyyzzzzzzzzzzzz{zzyxwwwwwxxxxxyzzzz{|~~~}}|{|zywvy||zxvuuuvvwwutrpmjiinppooonnonnoqtsrrqqqqpnmkihhhiiiijjhghkmnooopponmllmoqsuvwwwvtrpnmlkkkllmnoppqqqqrrqqpqqrrrssssrssrsswvuvwwwvvvuvvvvusstsrppsvvvtttuutrrqtwxwvvvwxwvuusssuxy{xncacbbhnqpjadstkortrstvuutsttssrrrrnfiptwvpnoooprssrrponnnpsuvwwxxxxxxwvsrqrvxqmqtvwvtrrssuwy{||yz{{{||{zy}}vtv{||{zzyyyxxyyywwx{|~}|{zzxxwwwwvuuuvvuutuuvwwwvusqommnopqnmnsrqnmoptvxz{||{zzyz{}~~~~{{zyzz{{|}~}}}||{zwsrqqrrrrvy{|zxy{}~~~|}~||}}{zsqv|~{|~~}yuqppppqqqv~vxvonv}}}}}}}~~~~~}}}~~~}}}~~~~}}}~~}|~~~~~~~}}}}}}~~~~}}}~~~}~~~~~~~~~~~~~~~~~~vvvvvuuuuuuuuuuuvvvvvwwwwwxxyyzzzzzzzzzzyyyyyyzz{{{|}}}~~}}|{zyyyyyz{{zzzzzzzzzzzzyxwwwwwwwxwwwxxxyyy{}}~}}|||{{|{zy{|}|zywusssuvvutrokghlppoooooonnqstrrqqqqqpnlkiiiijjjkllkiiklnoopqqponnnpqstuuvvvurpnlllkkklllnoppqqqqqqqqqqqrrsssstttuvwwvvvvvwwwwvvvvvvvuuspmlnrvvuutttttssrswwwvvwxywvvuttstuvxtjjieb`krpn^[huupruusuvxwvtssrrqpljhhjmrwusnlmnoprssrpoooooqsuvwwxwwxxxywusstx{vpprxyxtrqqrstuvwxyzyyz|||||~{wvx{{zyyxxxxxyyywwxz{}}|{{zxwwwwwwvuuvvuuttuvwwvvtrnmkklnpqnmnrpnjknqtvxz{{{zzzyz|}~~}zzyyz{{{|~}}}|{zyvsrrrrqqrux{{zyy}~~~}{{}z{}}|{ty|}~}}{wspoppppppu~x~yqnv~}|}}}}}~~~~}}}}}}|}~~}}}~~~~}~~~~}}}}}~~~~~~~}}}}}}}~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~vvvuuutttttuuuuuvvwvvvvvvwwxyyyzzzzzzzzzyyyyyyyzz{{|}}~~~}|{zyyyyyyz{{{zzzzyyyyzyyyxwwwxxwwwwwwwwwwwwxz{{{{{{{zz{{|}|{||{|zwtsqqrssqplieflppoonoppooruurppqqqponlkkjjjjjkklnlihjlnopqqqqpoopqstttuuuutqomkllkkklllmnopqqqqqqqqqqqrrssttttuux{yuuvvwwwwwwvvvvvvvvsmjjnruvuutttttttrtvvvvuvxxxwvvutssuuspoomfb`krkd`irvtqsvvsstuttsrqpqsqlcekoqwytqnoppqqrssspoopqstuvwxyyxxxxyzywvuvyyyrprxyxtrppppqqqrstuuvy{||||||{ywwzzzyyxxxxxyyywwwyz}}}|{ywwvvwvvuuuwvutsttuvvutrolkiilmoponoqlihjmpsvxyzyyyyyz{|}~~~|zyyyz{||}~~|}|{{zyurrrrrrqruw{{{zz}~}}|{z{z{|}}}wwz}~~{vrppooooopwz~upx~}}}}}~~~~~}}}}|||}~~}~~~~~~~~~}}}}}}~~~~~~~~~}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~}~~~~vvvuutttttttuuuuvwwwvvvvvvwwxyyyzzzzzzzzzyyyyyyyzz{||}~~~}|{yyyxyyyz{{|{zyyyyyyyyxxxxxxyxxxxwwwwwwwwwwwyyyyyyyyxxxz{{zz{|}}{xurrrsqnkgcfhloponnopqpqsvvqppqqqponnmllkkkkkllljihjlnopqqqqpppqrrsttttttsqolkkkkkklllmnoqrrqqqqqqrrrrrrssssstuvxxvvwxxwwwwwwvvvvwwuspmnpsuvvuuttttttrtuuttttuwxxwvutrquyvsrmh^`cnsodr~uutstvussstssssqpruvqhfmqtvvrsrsttsssrrplmpsvxyyyyyyyxxxxyzzxwvwyzytsswwwtrqrqqsrqppppqsx{||}|zzyywwyz{zzyyxyyxxxvvvwy|||zyywvvvvvuuuvvutrqrstuutroljhhikmnoooqngffhlosuwxxxwxxy{|}~~~~|yxxxz{|}~~~}{||{{zxussrrrrqsuwz{{zz}}|~}|{zz{|||~{z|~~~zvrppoooopqx~|zt|}}||}}~~~~~}||||||~~~}~~~~}}}}}}}|~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~}~~~~~~~vvvuuttttttttuuvwxxxxwwwvvvwwxyzzzzzzzzzyyyyyyyyyzz{|}~~~}|{zyxxxyyz{{{{zyyyyyxxxxxxxxyyyxxxwwwwwwwwwvwxxyyyyxwwwwxxyxxz|}zwutsrnie`fimppoonooqqrtxwrpprqqppoonmmlkkkkkkjjihjkmoppqqpppppqrrrrrrsssqnlkkkkkklllmnoqrrqqqqqrrrrrrrrrrrsstuvvuwwxxxwwwwwwwwwwvtsrssstvvvvuutttttqsustsrrswxxxvusrruwwtimg`clrtqtttssuuutsssssssrprvxtninsuutrutsttttsrolhmsvxz{{zyyyyxxxyz{{ywwwyyyvutvwvtrqrqtvwtppsonqw{{|||zyyxwxyy{{zzyxxxxwwvvvwy{|zyxxvvuuuuttuuutsqpqrsttspmihggijlnoonnicdegjnrtuvvvwwxz{|}~~}{xwwxyz|~~}|z{|{{zxvtsssssqtuxyz{{{}}}}~|{zzz{||~|||~~~zvsqpooooopw}~~|v~}|{{||}}~~~}}}}|{{||}~~}|}~~~~~~|||}}}}}~~~~~~~~~~~~~}~~}~~~~}}}~~~~~~~~~}}}~~~~~~~}~~~~}}}~~~~}~~~~~~~~~~~~~~~~~~~~vvvuutsttttttuvvwxyyyxwwvvvwxxyzzzzzzzzyyyyyyyyyyyyz{|}~~~}{zyxwxxyzz{{{zyyyyxxxxxxxxyyzzyyyxxwwwwxwwwvwxyzzywwwwwwwxwwyz}|zywupke]bhoqpppnnoppruuurqqrqqqqqpoonmlkkkkkjihhjknnopppppppppqqqpppqrrqomkkkkkkkllmnopqqqpqqrrrrrrrsrqqpqstuttuxxyyxwwwwwwwwwwvtuvwvvvvvvvvuuuuutrsussrpprvyyxxxwvvwvkiiqlbkuxwuw~ynttuutttsssstttsrstvwunpttrsuwsoopsttrkdhsy{||{{zyxxxxwwxy{{ywwxyyywvvwwxwutsruz|xttxvqpv{{z||{yyyxxyy{||{zyxxwwwvvvwxz{yxwwvuuuutttuuutrpoprssroligfeghjmnnomjdadefimqrsttuwwy{|}~~|ywvwxy{}~}|z{{{{zywtsssssqtvxz{|||}}}}~~}{{{|}}||}~~}|}~yvsqoooonoqx{{z}z~}|{{{||}~~~~}}~}}{{||}~~~}|}~~~~~~~~|{{|}}}~~~~~~~~~~~~~}}}~~~~~~~~~}}}}~~~~~~~~~}~~}}~~~~~}~~~~~~~~~}}}~~}}~vvvuttttttttuvvvwyyyyxwwvvwxxyzzzzzzzzyyyyyyyyyxxxxyz{|}~~}|{zxxxxyzzzzzzyyyxxxxxxxxyyzzzzzzyyyxwwxxwwwxyzzzywwwwxxwwwvxy}~}}{yupjbbhqrqqponnoopssrqpqqqqqqrqqpnmkkkkkkjihijlnnoopppppppppppoooqqqpomkjjjkkkllmnoopqppqqrrrrrsstssrrstttttvxxyyywwwwwwwwwwwvwxxwvvvvvvvvuuuutsststsqpquxyxwyy{{yrgkruldovyvttwrlsuuuttsssstuvvvuuuvxxtrttrtvzwmeptuuriir{|}|{|{zyxxxwvvvwy{ywwxyyyxwwwxyxvutru{~}|vu}xrvy{{|||yyyxwxy{|||{zxxxwwvvwwxy{yxvvvuuuttttuutsqomnqrrpligeddfhjlmnnke`_deegkopqrsuwyz|}~}zxwvwxz{~~}}|z{{{{zyxussrrrqtxyz{|}}~}}~~~~|{{}}~|||~}||}}yvtqppoopnrxzzy||~~}|{{{||}~~~~}}}~}}|{{|}~~}}~~~~~~~~}||}}~~~~~~~~~~~~~}}}~~~~~~~~}}}}}}~~}}}~~~~~~~}}~~~~~~~~~~}|}~~~~wvvuutttttttuvvwxxxxxxwwvwwxyyzzzzyyyyyyyyyyyyyxxxxyyz{|}}}||zyyyyyyyyyyyyyxxxxwwxxyyyyz{{{{{{zzyxxxwwwwxyzzyxxxxxxxwwwwy|~~~}}{zwsnnnrrqqponmnmnpppqppqqqqqqqqpomkjkkklkjijlmooooppppppppooonnoqqqqomlkkjjjklmmnooppppqqrrsssstttutuuuuuutvxyyyxwwwwwwwwwxxyyyxwwvvvvwwvvvuvvtrttttrqruxxwuvx|}{rmuusjhqvxtrsusotuutsssttuvwwwwvwyyxwutuvuvwvzzssuxwtpsz}{{zz{{zyxxwwuuuuwyxwxxyyyyxwwyyxwuusv{~~zw|}vwx||}}}yyxwwxxz||{zzxxxwwwwxxyz{yxxwvvuuttttuttromlnopplhgedccfhjklmjfb^_dfghjmnpruwxz|}~~}ywwwwy{|~}}|z{{{{zzxusrqqqsw{{{{|}}}}}~~~~|{{||~}}}}|||~|ywtqpoonppswz{z{~~~|}}}|{{{||}~~~}}}}~}}|{{|~~~~~}}}~~~~~~~~~~~~~}}}~~~~~~~~}}}}}}}}|}}~~~~~~}}}}}}~}}|~~~~~~~~~~~vvvuuuttttttuvvwxwwwwwwwvwwxyyyyyyyyyyyyyyyyyyyxxxyyyyz{{|||{{{zzzyyyyyyyxxxxxxwwwxyyyyy{||}}}||{yxxwwwwwxyyyxxxxxyxxwwwwxz{{zzz{||}|yyyxwtsqponmmmlnpppoppppppqqqpnlkjkkllmmmmnopppppppppppoooonooprrrpnmllkkjklmmnnooppqqqrrssssttuuuvvvvvuuwxxyxxxwwwwwwwwxyzzyyxwvvvwwwwvvvxwtqttttsrsuwwvssw|~|ututplmqtxtssvtstuusqqstvwxxwxxvw}~xvtsuwxxyyzwutvxyyz{~}ywxz{{zyxxwvuuuvvwxxyyyyyxxxxyz~yrryz|}|xw|~zxx||}}|yyxwwxxy{{zzyxxwwwwwyyz{{zyyxwvutttttutsqmkjlnnlifedbcdgijkkjf^]]`dfgikmortvxz{}~}|xwwvxz|}~}}|z{{{{zzyvtrpqquz}}|{|}}}}~}}}}~~}}|}~~~}}}}}zwtqponnpptxzzz{|{z|}{|}|{{{||}}~}}}}}~}}|||}~~~~}}~~~~~~~~~~~~~}}}~~~~~~}}}}}}}}||}~~~~~~~~~~}}}}}}|{{|~~~~~~~~~~vvuuuuuttttuuvvvwwwvvvwwvvwxxxxxxxxyyyyyyyyyyyyxxyyyyyyzzz{zz{{{zzzzyyyyxxxxxxxxwwxyyyyz{|}~~}|{zxwwvvvwwxxxxxxyyyxxxxxxxxwvvwy{{}|||ywrsqqpoonnmmoqqppooppppqppomlkkklmnooooppqqqqqppppoooooooppprrrrpnnmllkklmmnnooppqqqrsttsstuuuuvvvvvvvxxxxxwwwwwwwwwwxyzzzyxwvvwwwwwvvvwwtruuuttstuwwvssv{}|xuuttstoksuvvwwwwvurqnruuwxxxxwuvuxzzuuxxyyyxvsrsuxy{}~~{xwyy{{zyxxwvuuvyzyyyyyzzyxxxxyz~xssz{|}{yy}~z{|||||zyxwxxxyzzzzyxxwwwwxyzz{|{zzyxvutttttttrnjhhjlligeedcdfijjjgeb^]adeghkloqtuwy{{}~|zwwvvy{}~~~~~~~}}|z{{{{{{zxuspqtx|~~~|||}}}~}}}}~~~~}~~~~~}}~}zxvtrpnnprvyzzzz{{z|}|{z{||{{{||}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~~~~}}}}}~~~~~~~~~~~}||}}}||{}~~~~}}}}~~uuuuuuuutttuuuuuvvvvvvvvvuvwwwwwwwxxyyyyyyyyyyyyyyyyyyyyyyyyzz{zz{zzzyyxxyyxxxxxwwxyyyzz{}~~}zxwwvvvvwxxxxyyyyyyyyxxwwvutuuwxyz{{zxronppoonnnoqrrqpnnooppponmmmmmmnoopppqqqqqrqpoooonnnnoppqqprrrrqponnmlllmnnnoopppqqrstttttuuuvvvwwwwwxxxxxwwwwwwwwwwxyzzzyxwvvwwxwvvvvvvvtuuuuttuvvvvuuw{|{xvuvvvwqlsvutstuvwvtoghpuwwwwwvre`lzzxwxyxxxwsooqtvxz}~}zxxzz|{zyxxwvuuwy{{zyyyzzzyyxyyz{wtvyz{||zy{~~~}}{{{zyxwyzzzzzzyxwwwwwwxyz{{}|{{yxvuttuuuusoifefgihfededcfgjkihdb```dffgimnqsvwxz{|}~~zxwwwwz|}~~~~}~~}}|{{{{{{{zzwuqrwy}~~~~}}}}}}}~~~~}~~~~~~~~~~}zyywtroopswz{{{z{|||}{{{{||{{||}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~~~~~}~}}}~~~~~~~~~~}}}}|}}~~}||}~~~~~~~~~~uuutttttttttuuuuvvvuuvvvuuuvvvwwwwwxxxyyyyzzyyyyyyyzzzyyyyyyyzzzzzzyyyxxyyyyxxxxxxxyyyyzz|}~}|zywvvvvwxxxyyyyyyyyyxxxxxvuuttuuttvtmgmppoooopqrsrqqonoooppomlmmnonnopoopqrqqqqqpoooooooopqqqqprrrrrqpponmmlmnnnoopporrstvvuuuuuuvwwxxxxxxxxxxwwwwwwxxyyyyzzzyxwvvwwxyvutuvvvuuttuuuuvvvvvvy|}{yvuvwxwtsvvrqooruwwvsjiquxwwvvvqbfu}{ywxxxxwuqmpqtuxz}~|{yxzz{{zzyxwwvvwy{{zzzz{zzzyyyzz{xxyz{zzzzz|~~|{{zyyxxz|||zzyyxwwwwvvwyz{{{{{zxwwvttuuuvribaadedddccdeeghjjgfb`__aceghknpsvwxyz{|~|yxxwxy{}~~~~~~~}||{{{{{{{zzxwrsy{}}}}~~}~~~~~~~~~~~~~~}zz{zvqpoouy{||{|}~~}||||||||||}}}}}}|||||}}}}}~~~~~}}}~~~~~~~~~~~}}}}}}}~~~~~~}}}}}~~~}}}}}~~~~~~~}}}}}}}}~~~~}}~~~~~uuuutttttttttuuuuuuuuuuuuuuvvvwwwwwwxxxyyyzzyyyyyyzzzzzzzzzyyyzyyyyyxxxxyyyyyxxxwwwxxxyyzz{}~}|zyxwwwwwwxxyyyyyzzyyyyxyxvuustsrrtsllnpqppppqrrrrqqpoooooonlllmnnooooooppqqqqqppppppooopqrrqqpqqrrqppponnmmnnnnooooputsuvvvvvvvvvvwxxyxxxxxxwwwvwwwyyyzyyzzyxxwvvwwtxwtrtuuvuttuuvvvvvvvvwxz{zxvuvwxwwwwwtsqqttvwxvspruwwvuvwtutx}{xusswwuupmprttvx{|{zxxyy{zzyyxxwwwxy{{zzzzz{{zzzzz{{yy{{|zzzz{}~~||{yxxxxz}~}{zyxxwvvvvuvxyzyyyyyxwvuuuvvvuqe]]^abbbbbdefghiihfc`^__adegilpruvwyz{|}~~}zxxxxy{|~~~~~}|{{zz{{{{{zzxyst{}}|~~~}~~~~~~~~~~~}}~~~}|zz{{xrpppu{|}}|}~}}}~}|{|||}}~}}}|||||}}}}}~~~~~~~}|||}~~~~~~~~~}}}}|||}}}~~~}~}}}}}}}~~}}}}}~~~~~~~}}}}}}}}~~~~~}~~~~~uuuuuuuutttttuuuuuuuuuuuuuvvwwwwwwwwxxxyyyzzzyyyyyzzzzzz{{{zyyyyxxxxxwwxxyyyyyxxwwwwxxxyyyz{}~}|{zyyxwwxxyyyyzzzzyyyz{zzxxwwvuttsrrrrrrrqqqrrrsrqppppononmmmlklnooonoppqqppppqqqqqqqqqrrrqpqqrrrqpppoooooooonoonoqzwtuwvuuuvvvuuvwyyyxxxxxxxwwwwwxzzyxxyyxxxwvvvvuytqptuuutttuvvvvvvvvwwyzzyxvuvwwwxyyxvtstuttuxxwvuvvvvvxz|}}{zzvqkjouutqmqttstvz{{zxxyyzyyyyxyxxxyz{zzzzzz{{{{zz{||{{|}}|{zz|}~~}}}{xxxxy{~{{xxxwvvvvuvwxxxxxwwvvvuuuvvvum_WX[^__`acefghhhfdb`^^_aceghknrtvxxyz{|}~|zxxxxyz|}~~||{{{{{{{{{{z|vw|~~}~~~}}~~~~~~~~~~}}}}}|{zz||zwrpsw|}}}~~}~~}|||||}}}}}||||||}}}}~~~~~}}~~~~~}||||}~~~~~~~~~~~}}}}||}}}~~~}~}}}}}}}}}}}}}}~~~~~~}}}~~~}~~~~~uuuuvvvvuuttttuuuuuuuuvvuvvwwwwwwwwwxxxyyyzzzzyyyyzzz{zz{||{zzyxwwwwwwwxyxxyzyyxwwwwxxxxyyyz|}}~}}}~~}|{yxwwxxyyzyyzzzyxyz{{{zzxvvvvvwwvvuttssqqqrssrrqrqpoonnnooolmnooonoppqqqqqqrrrrrrrrrrrqppqrrrrqppppppppppoooonnr}zvvvvuttuuutstwxyyxxxxxxwwwxuuvyyyxxxxxxxwvvuuxyknquvussstuvvvvvvvvwwxyzywvuvwwwxyyxwvuuvuuvwxxwvuuvxy{|}{wxvofafqutplqtsqqsx{zyxxyyyyyyyyyyyz{{{zyyzzz{{{{zz{||||}~~}{{z{}}~}}}}|{xxxxy{~~|{yyxwvvvvuuwwwwwwvvvuuutvvvvtjYSVY\\^__bdffhggfca_^^_acdehimpsuxyyxz{|~}zwwxxxy{|}}}|||{{|{{{||~y{}}}}~~~}||}}~~~~~~~}}}|{{{zz|}{|uqvy{|~}|}}}|||||}}}|}||||||}}}}~~~~~}}}~~~~}||||}}~~~~~~~~~~~~~}}}|}}~~~}~}}}}}|||||}}}}~~~~~~~~}~~~~~~~~uvvvwwvvvuuttttuuuuuuvvvvvwwxxwwwwwwxxxxyyzzzzyyyyzzz{zz{|}|{{zxxxxxxxxyyyyzzzyxxwwwxxxxxyyz{|||||||}~~~}|{zxxwxxyzzzyyxxwwxyzzzyywutuvvwwwxvvvutrqqqrrrqqqqponmnnooonnopooopppqqrrrrssssrrrsrrqppqrrrrrrqqqppppqqppooonotzwuuuttttutroptwxxxxxxxwwwxzrptzyxyyyxwxxwvuttzwfqwuuspqtuvvvvvvvvvwwxyzywvvvwwwxyyxwwvvwwwwxyzzxwwx{}~}~~yyxpe`fottsmqttsonqyzyxyyyyyyyyzzz{{|{{yxxyzz{{{{z{||}}~~~~}|{{||}}||{{{{{xxxxy{~~}||{{ywwvvvuuvvvvvvuuuutttvvvwtbSRUX[]^`bdffgfdb_]]^`bbbbdjmpruwyvvxz{}~{xvwwxxy{|~~}||||||{{|~~~{}~~}||}}~~}||}}~~~~~~~}}}||{{z{|}{xtx{{}~}|||{{||||}}|}}}}}}}}}}}~~~~~}}}}~~~~}||||}}~~~~~~~~~~~~~~~~~}}}}~~~}~}}}}||||||}}}}~~~~~~~~~~~~~~~~vvvwwwwvvvuutttuuuuuuvvvvwwwxxxxwwwwwwxxxxyyyyyyyyzzzzz{||}}}|{yyyyyyxxyzzz{{{zyxwwwwwwxxyzzz{{|}}|{{|}||{zyxxxxxyzzzyywwvuwxyxxxwutuuutsqqtuuutsrqqqqrrqqqpponnmnooooooppoopppqrrrrstsssrrrrrqpopqqrrrrrqqqqqqqqqqpooonqyzwuttttttutroosxyxxxxxwwwxxyroszzxyzxvvyzxxvupwuouvtomnqtuvvvvvvvvwwwxyzywvvwwwwwxyyxwwwxxyyz{|{{z{{}{zshqnosutmrrtspmpxzzzyyxxxxyzz{{||{{zxxxyyzz{{{{||}~~~~~~}|||}|||{{{yyzzwxxxy{||{z{}}zxwvvvuuuuuuuuttttsttvwvyq[OQUWZ\\^_bdefec_]ZZZ]aebaagmppqwxyvvxz{}}ywuvwwwz||~}|||}||||}~|}~~}}|||{||||}}}}||}}~~~~~~~~}|}}}|{z{||{~{wz||~~}}|{{{|||||}}}}}}}}}}}~~~~~~~~~~~}||||}}~~~}}}~~~}}}}}}~~~~~}}}~~~~~~}}|||||{}}|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~vvwwwwwwvvuuttttuuvvvvvwwwwxxxxxxwwxxxxxxxxxxxxyyyyzzzz{|||}}}|{zyyyyyyzz{|}}}|zywwwwwwxxyzz{||}}~~}|||{{zyyyyyyyyzz{zzxvvvwxxwvvussuvutronpssssrrqqqqqqqpppoooonoooppppppooppqqrrrsstsssrrrrqqpppqqrrrrrqqqqqqqqqqppoopw{wussstuuvutstwzyxxxxxwwwxwxvvw|{yxywvrwzyyywrxyuttrkimquvwwvwwwvwwwwxyyyxwwwwwwwxyyxxwwxyz{|}~~}xr{sossqlsstuutrx{|{zyxxxyzzz{|||{zyxyyyzz{{{{{|}~~~~~}}}}}}}}||zzzyxyyxxxyz{|{{z{}|zxwvvvuuuuttttssssrstvwwzkULOSVY[]_acdd`^YXWY[^bd`aemqpotyzywxy{}~}xuuuuvvxz|}}|}}~}}}}~}~~~}||||||{{||}}}}|||}~~~~~~~~}}}~}|{{{{{|}|z|}|~~|{{{{||||}}}}}}}~}}~~~~~~~~~~}|||||}}~~~}}}}}~}}}|}}}}~~~~}}}~~~~~~~}}}||||}}}~~~~}}}~~~~~~~~~~~~~~~~~~~~~~~~~~vvwwwwwwwvuuttttuuvvvvwxwwxxxxxxxxxxxxxxxxxwwwwxxyyzzz{{||||}}}|{zyyyyyz{|}~~~|zxxwwwwxxyzz{|}~~}}|{zyyyyzzzzzz{{{{yxwvwxwvvvtttuvvvvtqqrssrrrrqqqqpppppooooooopppqqqqppppqqrrsssssssrrrqqqqppqqrrrrrqqqqqqqqqqqqpoqz{wtsstuvwwxxxyzyyxxxxxwvwwuvxxy{yvwwvuluzxyzywzpeovunlosuvwwwxyxwwwwxxyyyxxxxwwwwxzyxxwwxy{|~||qlwwqjsstuwxwz|}|{zyyyzzzz{{|{zzyyyyzz{{{{{|}~~~~~}||}}~~~}}{zzyxxxyyyyz{{|{{zz|{ywwvvvuuuuttsssrrrsstvxzy^OJNSUX[]_`bc^ZXUVY\\\\ahd_aioqpqwzzxx{z|~yttuutuvy{}~~~~~~|}}~~~~~~|}~~}||||}|||}}}}||{{|}}~~~}}}~}}~~~}|{{{{||{{}~}~~|{{{{||||}}}}}}}}}}}~~~~~~~~}|{{{||}}~~~~}}}}~~~}}}}}~~~~~}}~~~~~~~}}}}|}~~~~~~~~~~~~~~~~~~~~~}}~~vvvwwwwwwvvuutttuuuuvwwwwxxz{{yxxxxxxxxxxxxxxxwwwxyyzz{{{{{|||||{{zzzzz{|}~}{zyxxxwxxyzz{|}~||zzz{{{{{{zzz{||zywwvvvwvvvuuvvvuwvvuutsssrrrrqqqqppoooooooppqqqqqqqqqqrrrssssrrrrrrrrrqqqrrrrrqqqrrrrqqqqrrqqqt~zvtrstuvwzzyyyyyxwyyyywruwwwwxxxtpswtrjvzxyzz{|xpswwutsuvwwwy{~{xwwxxxxxyyyyxxxwwy|{ywwwxy{}~}srywlrsuwxyz|~~|zzzz{{{{{{{{zzyyyyz{{{{{{|}~~~~}|{{}~}|{zzyxxxyyzzz{||{zzy{zyxwvvwuuuuuttssrrrsstuv{uTMMOSUWZ\\___[WTUVWZY[ehbadknqrtwyxyxz{}~}vsutttuwz|~~}}}~~~|}}~~~~~~~{|~~}}}}}}}}}}}}}||{{|}}~~~}}}~}|||||{{|~~|}~|{{{{||||}}}}}}}}}}}~~|{{{{||}}~~~~~~}}}~~}}~~~~~~~~~~~}}}}}~~~~~~}~~~~~~~~~~~~}~vvvvwwwwwwwvvuutttttuvwvvwxz{{zxxxxxxxxxxxxxxxxxwwxxyyzz{{{|||||{zzzzzz{{}~~|{zyxxwxxyzz{{}}||{{{{||{|zyy{}|{zxwvvuwxxxvvvusuvwwwutuuttsssrrqqppoooooopqqqqqqqqqqqrrrrrsssrrrrrrrrrrqqrrssrqqqrrrrrqqrrrrstwyusrrsuuwy{zzyxyxz|{zyvptwwwwxxwrnswtrlxzwyz{{{yxxxyxwuvwwwxz{|ywwxxxxyyzzzyyxww|zwwwxy{}~~}vuzzuortwwxz|~}{{{{|||||{{{zzyyyyz{{{{||||}~~~}{{{}~}|{zzyxwxxzzzz{{{{{{zzyxyxwvvvvvuvvutsqqqrstutyeOLSVSUXZ]^^\\WTSTWXYY]egbchkortwxxxxyz|}~|yttusstwx{}~~~~|||}~}~~~~~~~}|}}}}}}}}~~~~~~}}||{{||}~~}~~~~}}|}}|||}}}|}~|||||}}}}}}}}}~~~}}}~~}|||||}}~~~~~~~~~}}}~~}}}}~~~}~~~~~~~}}}}~~~~~}~~~~~~~~~~~~~}~vvvvwwwwwwwvvvuuttttuvwvvwx{||{yxxxxxxxxyyyyyyyyxxyyyyyyz{{{{{{{{zzzz{{{{|}~|{zyyxxyzyyzz}~~~~~~}}{{|{|}{{z{|}|zyxwwvwxyyxwvusstvwxwwwwxwvuttsrqpppooooppqqqqqrrrrrrrrrrrsssrrrrrrrstssssssssrqrrrrrrrrrsttux}wtsqrsuutv~|uyxy{}x~zvktxyxxxxwtrwyvtu|zxxz{{|{zzyyyxwwxxxxz{}|yxwwxxxyz{{{zyyxy~{xwxyz{|{y|{{{yvstuxyy{}~{|||||||||{{{zzyyyz{{{{|}||~~~}{{|~~}{zzzyxxxyz{{{{{{{{{zyyyyxwvvvvvuvvutsqqqrrsssr[MQVUTVYZ\\[ZURQSVXXY`fcdhkjlqtvxyxxxz|}~}xutvvtsuxz}~~}}}|||~~}~~~}}}~~~~~~}}~~~~~~~~~}}||{{{}}}~~~~}}|}~}}}}}||}~}|}}}}}}}}}~~~~}}~~}}}|||}~~~~~~~}}}~~~}}}}~~~~}~~~~~||||}~~~~~~}~~~~~~~~~~~~~~~~~~vvvvwwwwwwwvvvuuttttuvwvvwx{|{zxxxxxxxxyyyyyyzzzzzzzzyyyzzzz{{zzzzzzz{{{{{|~~}{zzyyzzyyyy{||}}~~~~~}||{zzz||~~}}||}|zyxxwvwwxxwvvtrrsuwxwwxyzzyxvusrqppppooppqqrrrrrrrrrrrrrrrrsssssrrrsuvvuutuusrrrrrrrrrrsstttvz~wusrstvusjxzyxy|tgpwzpuxyyyxxyxwxyyyy{yxxyz{{zzzzyyxxxxxxxyzz|zxwwwwxyz{||{zyz||yxyyyz{}|zy|~~||{{ywvwyyz|~}|}||||||||{{{zzyyz{{{{|}||~~||{}~|{zzzyyyyz{||||||||{zyyyyxwvvvvvuvuutsqqqrrrrsiQORSSVWXYYWURRQTWXZ^egeehlmptvvwxxxz{}|~|vtsuussux{~~~}}}}}}~~~}}}}}~~~}}~~~~~~~~}}|{{{{|}}}~~~}||}~~~~~}}||}~~}}}}}}}}}~~~~~~~}}}}}~~~~~~}}}~~}}}}~~~~~~}~~~~}||||}~~~~~~~}~~~~~~}}}}}}~~~~~~~~~}}vvvvwwwwwwwwvvvuuttuuuvvwwxz{zyxwwxxxxxyyyyyyz{{zzzzzyyyyyyzzzzzzzzzz{{{{{{|}~}||{zz{{zzyzz{{{{|||}|zxwvxyyz|~~}~|{zyyxvvvuvuuutqpprtuuuuvxxwwutsrqqpppoopqqrrrrrrrrrrrrrrrrrstttsrrstvwxxwvvusrrrrrrrrrsttutuwz~wutttvxwtov|yyyyyv`cnyyxwwyyyxyyywwxzzzyxxxyzzzzzzzzyxxyyyxxyyzywwwwxy{|}}|{y{}}zzzzzz{|~yzz{|}|{{zzyxxyz|~~||||||||||||{{{zzyz{{{{||||~~|z|~}{zyzzzyyz{|}}}}}||||zyxyyxwwvvvvuvuussrrrqqqqp`LQPOT\\XVVUTPOQRUVZ]dfeeeinqsuuvvxyy{|||}ysrrssrsvy{~~}||}}}}~~~}}}}}~~~}}}}~~~~~~~~}}|{{{{|}}}}}~}||}~~}}|||~~~}}~}}}}}~~~~~~~~~~~~~}}}}~~}}}}}~~~~~~}~~~~~}}||||}~~~~}}~~~~}}~~~}}~~~~~~~~~~~~~}~~~~~vvvvwwwwvvvvwvvvuuuuuuvvwxxxyxxxwwxxxxxyyyyyyz{{zzzzzyyyxyyyyyzzzzzzzzzzzzz{|}~~~}}|{{||zyyyyyyyyz{{|}|||zyxwxz|~}~~~}|zxwvtsssssrpnoqstssssttttsrrrqqpppoopqqrrrrrrrrrrrrrrrrrstttssstuwxyyyxvsrrrrrrrrrsttuuuuvy}}xxwxxxyxwvwyyyyyxgkvsxwuwxxxxyyyxxyyzzzyyxxyzzzz{{{zzyyyyyyxwxz{xwwwxz{}~~}{y{}~|zz{{{{|}~yzz{|||{{zzyxxyz}{{||||||||||||{{zzzz{{{{|{{{}~|z{}~}|{zyyz{zy{{}~~~~~}}{zzyxxyxwwwvvvusrrrrrrrqrqogYPROTYWUTSRRPQSSTV_dfdcdgkpsuvvuvwy{}}|{{urpqrqrswz{~~}|}}}}~~~~}}}}}~~~|||}}~~~~~~~}}|{{{{|}}}}}~|{||~~~}|||}~~}~~~~}}~~~~~}}}~~}}}}}~~~~~~~}~~~}}}}}}}}~~~}}~~}}~~~~~~~~~~~~~~~~~~~}~~~~~vvvvvvvvvvwwwwvvvvuuuuvvvwwxxwwwwwxxxxxyyyyzzzzzzzzzyyxxyyyyyyz{{zzzzzzzyyzz{|}~~~~~}}}~|{zzyyzyyyzz{|}}|||{{{||}}}}}~~~~~}{zwtsrrrrpnmmnqqrqqqrrrrqqrrrqqpooppqrrrrrrrrrrrrrrrrrstttttttuvwxyyxwvtrqrrrrrrsstuuuuuvy}|xyvvyyzzxxyyyyyyvjt}vyttwwxxxyyyyxyz{zzzyyxyzzz{{{{{zyyyyyyyyxz|xvwwxz|~~}zy{{zz{{{{{|}yzzz|||{zzyxxyz|{{{|||||||||||{{zzzz{{{{{{{|}||zz|||{zzyyzzzy{{}~~|zyyxxxyxxwwvvuuusqrrrrsrrplaUPSTWVRRQQPOPRSSU\\dieabfjnqsuvvuvxz|}}|{xrpopqqrtwz|~~}|}|}}}~~~}}||}~~~}|||}~~~}}}~~~}||{{{{{|}}~~~|{{|}~~~}}||}~~~~~~}}~~~~~~~~~~~~}}}}}~~~~~~~~~~~~~~}}}~~~~~~~~~~}|}~}}}~~~~~~~~~~~~~~~~~~}}~~wvvvvvvvvwwwwwwvvvvuuuvuvwwwwwwwwwwwwxxxxyyzzyyzyzzyxxxxyyyyyyz{{zyyzzzzyyyzz{|}~~}}~~~|{zzzzzyzz{|}}|}}~}|{zz{{{{|}}}~~}|yvttssrpmllnoprqqpqqqqqqrrrrqpooppqrrrrrrqrrrrrrrrrrssttttttuvwxyywutsrrrssrrssstuuuuuvy~zxxrrxyzzyyyyzyzyvu}|rzzyyyyyyxyyyxyzzzzzzyyyzz{{{{{{zzyzzzzzzz{{xwwwxy{~{yyz{{{{||||}||zzz{}}|zyyxyy{}{z{{{{|}}}}}|||{{zzz{{{{{{{||~~{zzz{{{{zzyyzyyy{{}~}zxwxxxxyxxwvvuuuxvsrrrrrrpog[RQTWUQPPPONOPQSV\\chga_eimprrtuuvwxz|||{ytponpqrrtwz|~}||}|}~~~~}}||}}}}}}}~~~~~~~~~~~}|{{{{{{{}}~~~}||||}}~~~~}}||}~~~~~}|}}~~~~~~~~}~~~~~~~~}}}}}~~~~~~~~~~~~~~~~}}~~~~~~~}||}~~~}||}}~~~~~~~}}~~~~~~~~~}}}~wwwwvvvwwwwwwwwwvvvvuuvvvwwwwwwwwwwwxxxxxxyzzyyyyyyxxxxxyyyyyz{|{{zzzzzzyyyyz{|}~~}}}}}|{{zzzzz{{||}|{{{zzyxxxxyyz{{||}}}{zxxwusrpnmnoprsrrrrrrssrqrrqpoopqrrssssrqqqrrrrsssrrstttttuuvwxyxwutssssssssssstuuuuuvy~~yxxrqwxzzzzyyzzzyyyzsmx{yyyyyyyyyyyz{zzzzzyyyzz{{{{{zzyzzzzzz{{|}{xwxwxy{~|z|}~||||||{}{{zz{}}|zyyyyyz{{{|}}}}~}}}||{{zz{{{{{{||||}|}}{yyz{{{{{zzyyyxxz{}~~}|zwuvwxxyyxwvuuuuxxtrrrrrsog]VQRSRPRSPNNMNPSW^cffc^cilnprrstuvwyz{{{yuqnmnprsqsvy{}|{|}|}~~}}}~~~}}}~~~~~~~~~}|{{{{{{{}}}}~}|||}}}~~}}}}||}~~~~|||}~~~~}~~~}}}~~}}}}}~~~~}}}~~}~~~}}}}~~~~}}}}~~}}~~~~~~}|||}~~~}||}}~~~~~~~}}}}~~~~~~~~~~~~~~~~~~wxxxwwwxxxwwwwwwwwvvvvvvvwwwwwwwwwwxxxxxxxyzzyyyxxxxxxxyyyyyyz{{{{zzzzzzyyyyz{{}}~~||||{{zzz{{{{}}}|{zyxxwwwwwwxxxxyyz|||{zzzyxwtsqppprrrrrrrrutrqqqqqpppqrsssssrrqqrrsssssrrsttttuuuvwxyxvtsssssssssssstuuuuuwz|yxwttxzzzzzzz{zzzyywqswzyyyyyyyyyyzzz{{{{{zzzzzzzzzzzzzzzzzzz{{{||{xwxxxy{}~|~~}||}}|{}|{{yy{}}}{yyyzzz~{{||}}}~~~~}||{{{{{{{{{||}}}||{yyyyz{{||{zyyyxxyz|}|{}~|zxuuvwxyyxwuutttwwurrrrrsk[RQPQPPORRPNMNOPU[aegc]`imlnqrruvvwxyz{{ywpmkklpqsqruxz|{|}}|}~~}}}~~~~}}}|{{{{{{{|}}}~}||||}}}~}}}}}||}~~~~~}|{||~~~}}~~~~~}}}}}}}}}}}}~~~~}}~}}~~~}}}}~~~~}}}}~~~}}}}}}~~~}|||||}~~}}}~~}}~~~~~~}}}}}~~~~~~~~~~~~~~~~~~~~xxxxxxxxxxxwwwxwwwvvvvwwwxxwwwxxxxxxxxxxxxyzzzyyxxxxxyyyzzzzzz{{||{zzzzzyyzzzz{|}~}|{zzzyz{|}~~~}|zyxwvvvuvvwwwxxxy{{||||}}|{xwuusrppqrsstuwurrrrrrqpqrssstttsrqqrrrsssssssttttuuvvwyywvtssssssssstttuuuuutvz|yxxwy{{{{{{{{{{zzyxwtvxzyyyzzzzzzzzzz{|{{{zzzzzzz{{{{{{{{{{{{{z{z|}~wxwxz{~~}||}~}{}}{zyy{}}}|zyz{{||{||~~~~~~~~~}|{{{{{{{{|}}~~}|{{zyyyz{|}}||{yyxyz{|}{xxz|{yvuuwxxxwwvtssttvusrqqrn`RNNOOOORQNMMNNPT[adddZ^emnnoqrtvvwwxy{{zxsmkijloprpqsvx{||||{}~~~~}}}|||{|{{{{{|}}}}~~~~}|||||}}}}}}}}}||}~~~~~~~~}{{||~~~~~~~~~~~}}~~~~}}}||}}}}||}}}~~~~~~~}~~~}}}}~~~~~}}}}~~}}}}|}}}~~}||{{|}}}}}~~~~~~~~~~~}}}}}~~~~~~~~~~~~~~~~~~~xxxxyyyyyyyyxxxxxwvvvwwwxxyxxxxxxxxxxxxxyyyyzyyyxxxxyzyzzzzzzz{{||{zzzzzyyzzzz{||}~|{yyyyz||~}{zyxwwwvvvxxxxxxxyzz{|}~}}|{{yyxvspqrstwyytqrrrrrrqrsssstuutrqqrrrrrrsstttuuuuvvwxxxvusrrssssssttttuuuuttuz}yxxxz{|||{{{{{{zzyyywxxzyyzzzzzzzzzzzz||{{zzzzzz{|||||||||||{zzzy{yvwwy{~}{}}||}}|{}~|{yxz|~~}|zz{||~{z{|~~~~~~~~~}||{{{{{{{|~~}{{zzzzz{|}~}}|zyxyz{|{yvuwzzxvuuvwxwwvutttttuutrqpodVNMNNNOPQMLLMNRTX[^]df]bjpnoprttvvwwxz{{ytojihjknpqopruw{|||{|~~}}}}}||||||||{||}}}}}}}||||||}}}}}}}}|||}~~~~~~~}}}}~~}|||||}~~~~}}}}~~~}}}}}}}}}||}}}~~~~~~~}}~~}}}~}}}~~~}}}}~~~}}}||}}}~~}||{{||}}}~~~~~~~~}}}}}~~~~~~~~~~~~~~~}}~}}~~xxxyyyzzzz{zzyxxxwvvwwwxxyyyyyxxxxxyyyxyzyxxyyyyyz{|||{zyzzzzz{{||{{zzzzzzzzzz{|{|}~|{zzz{|}~}{zyxxxwwxyyxxwwxyyyyzz{{|{{z{zywtssssux{ztqssssssrssssssuutrqqrrrqrrstuuuuuvvvwxxwvtsqqqrssssttuuuuuuutsu{~yxxyz{{|{{{{{{{zzyyyyyyyyzzz{{{{zzzzzz{{{{zzzzz{|}}||||}}}}|zyyyy{ytuwz{~~||}}|{}~{yyz|~~}|{{||}{y{{}}}}}~~~~}||{{{{{{{{|~~|{{{{{zz|}~~~}{yxyzzzyxvvxxxvuuuuvwwvuttttttuusrqnfYPMNNMMOOMKLKLPX[XUYbibaemqnpqtuvvvwwxy{zvplgggijmnnnpswx{{{{{}~}}}}}|||}}}}|{||||||}}}||}}}}}}}}}}}}}||}~~~~~~~~}}}}}}|||}}~~~~~~}}}~~~~~~}~~}}}}}}}~~~~~~}}}}}}}}}}~~~~~}}}}}~~}}|||}}}~}}||{{{|}}~~~~~~}}}}}~~~~~~~~~~~}}~~~~~~}}}~}|{|~xxyyyyzz{{|{{zxxxwwwwwxxxyyyyyyyyyyyyyyzzzyyyyyz{~}{zzyyzz{{{{zzzzzzzz{{{{{{{|}~~}|{{{{|~~|{zyyyxxxyzzzzxyxyyxxyyzzzzzzzyxxwvuuvwzztrsstttsttsssssttsrqrrrrqrrsuuuuuuuuvwwwvtsqpppqssstttuuuututsru{~zxxyz{{{{{{{{{{zzzzzzzyyzzz{{{{{{zzzzz{{{{zzz{{|}}}}|||}}}}|{z{{||}|{sswz{}||}}{{}~|{{|}}}|}}||||~z{|{|}}}}~~~}||{{{{{{{{{|~}||{{{{y{|}}}|zyxxyyyxwxxywwvuuuuuvvutttttttutsrpjZQMMNMLLMMJLNKIS_VRU]fhabgnqnpsuuvvvwwxyzvqkgefgiiiikmqtwyzzz{|~~~}}}}~}}}}~~}}|{{|||||}}}~}}~~}}}}}}}}}}}}~~~~~~}}}}|||{{|}~~}}~~||}~~~~~}}}}}}}}}}~~~~~}}}}}}}}}~~~~~~}}}}}}}~~}}|||}}}~}}}||{{|}}~~~~~~}}}}}~~~~~~~~~~~~~~~}}}~~~~~}}~~~}||}~~~xxyzyyzz{{{{{zyxxwwwwxxxyyyyyyyyyyyyyyzz{{zzzzz{}}zzyyyyzz{{{{{{{zzzzzzzzzz{{|{{|~~}||{{|}}~~}}|{zzzyzyyyyvuvwwwvvvwwwwvutvxyzzyxvvvutrrstttttttttttsttsrrrrrrrrstuuuuutuuuvwwusrqpppqsstttuuuuttttsru}~zxyzz{{{{{{{{{{{{{{{{{zz{{{{{{{{{{z{{{||{{{{{|||}}}}||}}}}}}|{zzzz{qotxy|{||~}{{}}}|{|}~}~}~~}}~}z|}||||||}~}}||{{{{{{{{{{|}}}||||{{yz{|||{yyxxxyyxwwxxwwvuuuuuuuutttttttttsro`OLLMMLLKKKKNPLNYVTTZaggceioqoruvvvvvwwxxxrkfbdeghgggkosvxxyz{|~~~}}}~~~}}~~~~}|{z{{{{|}}~~~~~~}}}}}}}}~~~~~~~~}}}}}}}|{{|}~}||}~~||}~~~~~}}|}}}}}}}~~~~}}||||}}}~~~~}}}}}}}}}~~}}|}}}}}~}}}}|||}}}}~~~~~~~~~~~~~~}}}}}~~~~~~~~~~~~~~~~}}}~~~~~~~~~~}~~~~~xxyzyyzzzzzzzzyyyxxxxxxyyyyyyyyyyyyyyzz{||{{{{{|}|zyxyyyz{{{{|{{zyyyzzzzyzzzzzyz{~}}||||}}~~~~~}|||{{zyywusttuutuuuuuurommnoqsttutqquvtstttttuutttttvvsrssssrsstuuutttttuuuvvusrqppqrstttuvvutttssrru~}zzz{{{{{{{{{{{{{{{{{{|{{{||||{|||{{{{{|||{{{{|||}~}}}}}}}}~~}}|}~|rjnru{{}}}{{}}{||}~~}~~~~~|{}~|||||}}}}||{{{{{{{{{{{{|z{~~}|||}}|{yyz{{{zyyxxyxxwvxxwwwvvvvvvvuuttstttttssocSJKKLLLKJJKNPRRTQQTZagfecflprqtvvvvvvwwxwvngb`bdffeeimquxyyy{|~~~}}}}~~~~~~~~}|{z{{{{|}~~~~~~~}}}}}}}}~~~~~~~~}}}}}}}}|||}}||}}~}||}~~~~~}|||}}}}}~~~~~~}}}}}}}~~}}}}}}}}~~~~}}}}}}}}}}}}}}}}}}}}~~~~~~~~}}}~~~}}}~~~~~~~~~~~~~~~~~}}~~~~~}~~~~~~xxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyz{||}}}}}|}}|zyxxyyz{{{{{{{zyyyzzzzyyzyzzyzz|~~|||||||~~}~}}|{{{ywvvuuuttttttsqonkiikmooqpoquttstuutuuuutttuwwtssssssttttttssssttttsssrqqqqqrstttuvvutssrsstw~{{{|{{{{{{{{{{{{{{{{|||{|}||||||||{|||}}|||{|}|||~~}}}~}~~vkimsz~}{{}~|{|}~~~~}|~~}}}||{||||{{{{{{{{{{{{{{{|~~|||{|||{zzzz{{zyxxxxwxwwxxwwwwwvvvvvuuttssstttsshTHLLKKKKKKLNSUSPPMQYajldachnqrsuvvvuvvwwwvrjd_^aefddfjotwyzzz|}}~~~~~~~}}}~~~~~~~~}}|{|||||}~~~~~~~}}}}}}}~~~~}}}}~~~~~~~~}}}}~~~}||}}~~~}}}}}~~~~~~~~~~~}}||||}}}~~~~~~~~}}}}~~~~~~~}}}}}~~~}}~~~}}}}}}}}}}}}}}}~~~}}}}}}}}}~~~~~~~~~~~~}}}}}}~~~~}}}~~~~~~~~~~~wxyyyyxxxxyyyyyyyyyyyyzyyyyyyyyyyyyyyyz{|}}~~~}}|}}zyyyzzz{{{zz{{zyyyzzzzyyyzzzzzy{}}}|{{{{}~~~~~|{{{zyxwwvvutssssrqponmmnonnnnnprrrssuuuuuuuttsuwwutsrrrstuttttsrsstttrqqqqqqqqrrsttuuvvutrrrssuy||{||{{|||||||{{{|{{||||}}}}}}|}||||||||{{{{{{||}~}yqgisx~}{|~||}}~~~~}~~}}~}||||{{|}}|||{{{{{{{{{{{||}}{{{{z{{{{zzz{{zzxxxxxyyxxxwwvvvvuuuututssrrsttrl]MILKJJJKKKOSXVQKMS[aiom^_hnqrstvvuutuuvvvsmfa^_adccehmqvy{|{{|}}~~~~~~~~~~~~~~}}}}||}~~~~~~~}}||||||||}}}}~~~~~~|||}}~~~}}}}~~~~~~~~~~~~~~~~~~~~~~}}}}|}}}}}}}}~~~~~~~~~~~}}||||}}~~~~~~~~~~~~}}}~}}}}||}}}~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~}}}||||}}~}}}}~~~~~~~~~~wxyyyxxxxxxyyyyyyyyyyzzzyyyyyyyyyyyyyyz{|}}~~}}|}~{zzz{{{zz{{zz{{{zyyyyyyzz{{{{zzz{}~~~}|{{{|~~~}||{{zyyyyxvtsrrrrqpppppppnnmmmnnoprtuuuuuuttstuwwutsrrrstuttttssssttsqqqqqqqqrrrstuuuuvutrqrtvw{|{{||{{||||}}}||||||}}}}~~~~}||}|||||||||{{{{|}~}|{wlgnu|}{|}}~~~~~|}~~}}||{{{{{||~~}||{{{z{{{{{{{|||}|{{{{{{{{zzzzzzzyxxxxyyxxxwwvvvvvuuuttssrqqssrncRKJJIIIJJLNRTVRMJPYbjopj\\bnsrsuvvuttttttutpga_^`a`_cekptx{|||||}}~~~~~~~}}}}|||}}}}|||||||}~~~~~~~}}||||}}}}}}}~~~~~|||}}~~~}}}}~~~~~~~~~~}}}~~~~~~~~~~~}}}}}}}}}}}}}}~~~~~~~~~~}}||||}~~~~~~~~~~~~~~}}}~}}}}}}}}}}~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~}}}}}}}|||||}}~}}}}}~~~~~~wwxyyyyyyyyyyyyyyyyzzzzzzyyyyyyyyyyyyyz{|}}~~}|}~~{z{{{||}}~}|}||{zyyyyyzz{{{{zzzz|}~~~}}}|{z|}}~~~}|{zyxwwwwvtrrrqqqqqqrqqponnnnmmnoqttuuuttssstuwxvtssrrstutttttttttssqqrrrrrrrssstuuuuuutrstuwx||{{{|||}}}}}}}||||||}}}}}~~}}||||||||||||||{|}~~~{zz|~||zskjrz~|}~~~~z}~}}{{z|}}}}}~~}|||{{{{{{{{{||}}||{{{{{{{zzzzzzzyxxxyyyxxxwwvvvvvvuttsssrqqrrpgYKJKIHHIJLNPQQQMMPW`hkonh`hpqruwvutttttttuslc^]]__]^dhnrw{}}||{{}~~}}~}|}}}|||}}}|||||||}~~~~~~}}}||}}}}|}}}}~~|||}}~~~~}~~~~~~~~}}}}}~~~~~~~~~~}~~~~~~~~}}}}}}}}~}}~~~~~~~~~~}}}|||}~~~~~~~~~~~~~~~}}}~~~~~~~}}}~~~~~~~}}~~~~~~~}}}}}}}}}}}}}}}~~~~~~~~~}}}}|||||||||}}~}}}}}~~~~~~~}xxxyyyyyyyyyyyyyyyzzzz{{zzyyyyyyyyyyyzz{|}}~~}||~}{z{||}~~~~}}|{zzzyzz{{{{{zzz{}}}~~~~~~~~|{|||}~~~~}}|yvutuutsrrrrrrqrstsrponnoommnoqsttttsssstuvyyvtsssssttttsttttttssrrrrrrrrrssstuuuuuuutuvvxy~~|||{|||}}}}}}}||||||}}}}}~}}|{{||||||}}||||||}~~~}}}|zz{z|||~~|}xoipw}}~~~}z~~}}|{|}~~~~}|||{{{{{{{||}}}}||{{{{{{zzzzzzzyxxxyyxxxxwwvvvvvvvtsssrrrrsrm^OJJJIHIJKMPOOOMLOY`gjlnmhdjpqstvutttttttutpg`\\]]]]\\`fkquz|||{{zz}~~~~}}~}|}}}|||}}}}}}}}}}}}}}~~~~~~}}}}~}}}|}}}}~|||}}~~~~~~~~~~~}}}}}}}~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~}}}}}}|||}~~~~~~~~~~~~~~~~}}~~}}}}~~~~~~~~~}}~~~~~~~}}}}}}}}}}}}~~~~~~~~~~}}}}}}||}|||||}}}}~~}}}~~~~~yyyyyyyyyyyyyyyyyzz{{{|{{zzyyyyyyyzzzzz{||}~~~~~|z{{|}~~}|{zzzzz{{{|||||}~~~~~}||}~~}|||~~~~~~~~}{wtsstsssrrrrrrstutrqoooppnnnoqrsttsrrsstuvyzwtssssstttsssttttttttssssrrrrsssttuuuvvvvwwxyz~|||||||}}}}}}}|||||||}}}}}}}|{{||||}}~~}}}}}}}}~~}||{{zz{|}~~}}~}ztoqv~}}~~~}}~}|}|}}~}}}|{{{{{{{||}}~}||{yyz|{{zzzyyyyyyxxxxwwvvvvvvvtsssrrrrtqgVJJIIIHIKMOONNNMLR^ejjklnjdiosstttttttuuuuskb^\\]^\\\\^cjotx{{{{zzz|~~}~~~||}}|}}}|||}}}}}}}}}}}}}}}~~~~~~~~~~~~~~}}}}}~|||}}~~~~~~~}}}}||}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}|||}~~~~~~~~~~~~}}|}~~}}}}}~~~~~~~}}~~~~~}}}}}}}}~~~~~~~~~~~~~~~}}}}}}}}}}||||}}}}~}~~}}~~~~~yyyyyzzzzzyyyyyyzz{{{|||{{zyyyyyyzzzzzz{{{|}~~~~~~~}{y{{}~~}{{zyzz{{||||}~~~}}|{{{|}~~~}|||}~~~~~~{wuttssssrrrrsssuusqpoppponnoqqrstssrsttuvyzwusssssttsssstttuuvwvusssrrrrsssstttvvxxxxyyz{~|||||||}}}}}}}|||||||}}}}}}}|||}}}}}~~~}}}}~~~~~~~~}}}}}~~}~~}yttw~}~~}||~}||}}~~}}}}||{{{{{{||}~~{y{||{zzyyyyyyyxxwwwwvvvvvvvtttsrqrsuo]NIHIHHIJLMLLMONMMTafjjknrmegotssssstuuuuvtoe]\\\\^]\\^bgnqwzzzyyz{{}~||~}||}||}}}|||}}}}}}}}}}||||}~~~~~}}}}~~~~}}}}}~}||}}~~~~~~}}}}}||}}}~~~~~~~~~~~~~~~~~~~}}}~~~~~~~}||||}}}}|}}~~~~~}}}}~~~~}}}}}|}~~}}}}}}}}}}}}}~~~~~~~~}}}~~~~~~~~~~~~~}~~~~~}}}}}}}}}}}|}}}|}}}~}~~~~}~~~~~~}~~yyyyzzzzzzzyyyyzzz{{||}}|{zzzzzzz{zzzzzzz{{|}~~~~}|||{zyz{}}~|{zzz{{||||}~~~|{zzzz{|}|||{|}}}}|||~}|ywvutttsssssssutsqopqqqonnnpqqrssstuttuvyzwustttttsssssttuuvwxxxusrrssssssssstvxyyzzz{{|~||||||}}}}}}}}|||||||||||}||||{|}}}}~~~}}}}~~~~~~~~~~}~~|xxy~~~}|~~}}}~~}}}}|{{{{{zz{|}}~|z{}}|{{zyyyyyyyxwwwwwwwwwwvvvutrqrsvjRGGHHHJJLLKJKNPOMOXbfijlrrmfipsrsrrstuuuvvsj_[]]^]^afkqtxyxvwz|||~}}}}~~}}|||||}}}|}||}}}}}}}}|||{|}}~~~~}}}~~~~}~}}}}}~}}}}~~~}}}}|}}}}~~~~~~~~~~~~}}}}}}}}}~~~~~~~}||||}}}}||}}~~~~~~}}}}}}}}}}}|||}}~~}}}}|||||}}}}~~~~~~~~}}}}~~~~~~~~~~~}}}}~~~~}}}}}}}}}~}}}}}}}}}~~~~~}~~}||~yyyyzzzzzzzzyyzzzz{||}~~}|{zzzzz{|{{zzzzz{{|}~~~}{zzzyyyz{||~~}{zz{{{|||}}~~~||{{zzz{||{{{|||||{{|}~~|zxwwvvuuuttsrrtutrppqqqpooooppqrstuvusuwzzwttttttttssssttuuvwy{{xutvvutsssssrtxzzz{{|||}}{{{|||}}}}}}}}||}}}|||{{{|}|yz{||{{|}}}|||}}~~~~{z{}~}|}~}}~}}}||||{{{{{z{{|}}}~~~{{{}}}||{zyyyyzyxwwwwwwwwwwwwwwusortt^LGFGGHKLMKJLOQPNNU\\adgjmsphhlprqrrstuuuuvuod]\\\\]__aejnsvxwvtx{}~~}||}}~~~|~|||||}}}}~}}~~~}}}}}|||{|}}}~~~~~~~~}}~}}}}}}~~}}}}~~~}}|||}}}~~~~~}}~~}}}}|||||}~~~~~~}}|||{|}}}|||}}}}}}}}}}}}}}}}|||||}}~~}}}}}||||}}}}}~~~~~~~~}}}~~~~~~~~~~}}}}~~~~~}}}}}}}}~~~~~~~~~~~~~~~~~~}~~}}~yyyyzzzzzzzzzzzz{{|}}~~}{zzzz{|}|{{zzz{{{||}~~~~}{zzyyyyzzz|}~~}|{zzz{zz{{|}~~~}}|{zzzz{{zz{{{|||{{{|~}|{yxxxwwvvvusrqswvtqqqqqpoooooopqstwyvssu|{vttttttttttttttuvwwy{}}{zxwvvutsssrwyyzz{|||{}}{{|}}}||||}}}}|}}}}||{{{{|}|yzzz}wy{|||||||}}~~~~~~~}||~~~|{~}|}~~}|||{{{{{{{{{|||||}~~~~||||}||{zyxxxyyyywwwwvvvvvvwwwwurorrdOIHFGGIKLMJJMRRNNNYeadflnqjflopqpqrttuutwuth_\\\\]^aadhmqtuvvtvz|~~~}|{||~~}}||||||}}}}~}}}}}|||}||{{{|}}}}~~~~~~~}}~}}}}}}}~~~~~}}}}~~~}|||}~~~~~}}}~~}}}|||||||}}~~~~~}}}|{{|||||||||}}}}}}}}}}}}}}||}}}~~}}}}}}||||}}}}}~~~~~~~}}}~~~~~~~~~~}}}}}}~~~}}}}~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~}}~yyyyzyyyyzzzzzzz{{|}~}|zzz{|}~~~}|{{{{{||}}~~~~}{zyyxxyzzyz{|~}|{zzzyyyzz{|}}~~}}}|{{zzzz{{{||||||{{{{|||{zzzzzyyxxwusstvurqqqqqppppoooprtvz|xttv||vuttttttttttuutuvvwx|}{zyxwusfcr|xwy{|||{}}{||}}}|{{|}}}}|}}}}|{{{{||~{zzvprjv{{|||{{{||}~~~}}|||~}}~~||~||~}}~~}|||{{{{{{{{{||||||||}~~~~~~}||||{zyxxxxyyyyxxxwwvvvvvvxwvtqqtmVIHIGGHILMKIJPUTONOV\\_diopnhjppoooqsttuuuvvo^\\]]^`cegkosstttuw{~~~~|{{|}~~}}}|||||}|}~~~}}}|||||||||||}}}}~~~~~}|}~}}}}|||}}}}}}}}}~~~}||}}~~~~~}}}~~}}}||||{{|}}}~~~~}}}|{{|||||||||}}}}}}}|||}}}}||}}~~~~~~}}}}}}}||||}}}}}~~~~~~~}}}~~~~~~~~~}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~yyyyyyyyyyzzzzzz{{|}~~}{zz{||}~~~|{{{||}}~~~}{zyyyyyzzzzz{|~~}{{{zyyyz{{|{|}}}}}||{yyyz{|}||}}}|||{{|||{{{z{{{{zzyxuuvwvtrqpppppoooooqtwy|}yutv|{vtsttttttttuuuuuuvvwz~~}}|zwqkkv{xvx{|||{}}|{}}~~}|||~~}||}}}||{{{||~}}|xfdvsx{{{{{|{{{|}}~~~~}|{{z|~}~}~~}~~~~}~~~~~~~}||||{{{{{{|||||||||{{|}~~~~}||||{{zyxxwwxxxxxxxwvvvvvvvwwutstudKGGIIGHIJLJHJRVTPNMSY`eimnkkpqommorstuutuwueY[\\^`bfhjjnrrssuwy|~~~}|zz{|}~}|}}}{{|}}|}~~~~~}}}}||||||||}}}~~~}|}}}}}}|{|}}}}}}}}}~~~~}}|}}~~~~~~~}}|||||{{|}}}}}}}}}}|{{|||||||||}}}}}}}|||}}}}||}}~~~~~~~~~~~}}}}}}}||||}}}}}~~~~~~}}}}~~~~~~~~~~}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~yyyyyyyyyyyzzzzz{{|}~~~~}|{z{||}}~~|{{{|}}~~}{zzzyyyzzzzzz{|~}|{{zzzz{|}}}}~~~~~}|{yyz{}}}}|}}}}}}||||||{{zzz|{{zyxuux{zxtrpoppponnoqsvy{}}zwuv}{utsstttuutuuuuuuuuuvx|~}ztho{~ywy|}||{~}||~~~~~~~~z{|}}|||{{||}~~}ykl~|{||{{}~~}||}~~}}|}|{{{}|}}~~~|~~~~}~~~~~~}}}}|}}||{{{||}}||||||{{{{|}~~}|||||{{zyxxwwvwwwwwwwvvvuuuvvutstwqZCFGIJGIJKJHHKRVTPOPX^^chlllopmjknqrtuuuttvmZ\\[\\^aeijkknqrrsuwy|~~~~}{zyy{||}|}~~}{||}}}}~~~~}}}}}}}}}}}~~~~}|}}}}||{|}}}}}}}}}~~~~~}}}}~~~~~~}~~~~~}}|||{{{{|}}}}}}}}}}|{{|}}|||||}}}}}}}}}}}||||||}}}~~~}~~~~~~}}}}}}||||}}}}}~~~~}}}}}}}~~~~~~~~~~~}}}}}}}}}}}~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~yyzzyyyxxyyyyyzzzzz{||||{{{{|}}}}~}{{|{||~~~}||{{zzzzzzzzzz|}~}||{zz{|}~~~}{zz{}}}|||}~~~}}}}}|{zyzz{{yusrtuz{{zwtqppqqpnnorwz|}}|zxwx~|utssstttuuuuvvvuutttvy|~~~~~ywwz{yy{|}}}{~||}}}}~{nyz||||||||}~~~~}ywu{}}||{|}~|{}|}}}||||}|||~}}~}~~~}}}||~~~~~}~~}}}}}||||}}~~}||||{{{{{|}}}|||{{|{{zyyxwvvvvwwwvwxxwwvvwvussszbKGGHHHGJLIHHJMRVTPPTZ\\Z`hplornhhloqstuuusspf\\]]^`cgkmmmoqrrsuwz}}~~~}}{yyyy{{{||~~}{|}}}}~~~~~~~~~~~~~~~~~~~~||||}|{{|}}}}}}}|}~~}~~~~~~~~~~~~~~~~~~~|}}~~}}}}||||{{{{|}}}}}}}}}}|{{|}}}|||}}}}}}}}}}}}}|||}}}}}}}}}}}}~~~~~}}}}|||||}}}~~~~}}}}}}}}}~~~~~~~~~~}}}}}}}}}}}}~~~~~~~~~~~~~~~}}}}}~~~~~~~~~~~yyz{zyyxxxxyxxyyyyyzzzzz{{{|}}}}}~}|zz{{|}~~~}}|{{zzzzzzzzz{}~}}||{{|}~~|||~}}||}~~~}}}}||{zyyyz}sa_ksvy{{{yvsqrutqppquxz{|||zwvx}vusssssstuuvvwwvutttuwy{||~~~}||||}}}|~||}|||~|rzz|||||||}}~~~~}{z{}~~~}||{rov||}}}}||{{|}}}}||}~~}}}||~~~~~~~~~}}}}~~~}||{{{{{|||||{{{{{{zzyyxwvvvwwwwwwwwwvuuvuusrsrWFHHGHHGKLIIIKMPTSQRVXZX^gloqrmginprtuuutroia]\\]`cfimoooqrsstvx{|}~}}||zxyyzzz{|}}{|}~~~~~~~~~~~~~~~~~~}|||||{{|}}}}}}}}}}||}}~~~}}~~~~~~~}|}}~~~}}}}}}}|||||}~~}}}}}}}||{||}}}|}}}}}}}}}}}}}}}}}~~~~}}}}}}}}~~~~~~}}}}||||||}}~~~}}}}}}}}}~~~~~~~~~~~}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~yz{|{zyxxxxxxxyyxxyyyyyyzz{|}}}}}~}|z{|}~~}|{{zzzzzzzz{|~~~}}}}}}~~~}||{|}~~}}~~}||||||||{{{zzzyyzy~oUUjvwy|{{ywusvywsqruxyxyz||zwvx}xxvtsrrrssuuvvwwvuuuvwxy{|~~}|{z}}|||||||~z|||{||||}}~~}}}}~~~~}}|xhfx}|}}~~|zvu{~~}||}~~~~}~~~~~~~~~~~}|{{{{{{||||{zzzzzzzzyxwwwxzyyyxwwwwvuuuttsrrdPHIHHHHGJLIIIJKLQSSTUW[_flnnoolhkoqsuvvvvqjc^\\]^adgjmoqrstttuwxz||~~~|{{zyxyyzy{{|}~|}}~~~~~~~~~~~~~~}||{{{{|}}}}~~~~}}||{||}~~}}~~~~~~~~~~}}}}~~~~~~~~~~}}}}}~~~}}}}}}}||||||||||}}}}}}}}}}}}}}}~~~~~}}}}}}}~~~~~~~}}}}||||||}}}~}}}}}}}}~~~~~~~~~~~~~}}}}}~}}}}}}~~~~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~~~yz{}||{yyyyyyyyyxyyzzzzzzz{|}}}}}}~~~~|||}~~~}|{{zzzzzzz{{||{{{{||}}~~}|{{|~~}}~~}|{|{|{{zzyyyyyyzy}t_arzzz{{{zxvux}{urtwyyyyz||zvuy}}{|{ywurqrsuuvvvwvvwwuwxy{|~|usu}~}|||{|~~~~}||{{||}}~~|}}}}}}}}~|xmn|~}}}~~||qiy~}}|}~~}}}}~~~~~~~}}||{{{{||||{zzzzyzzzzywxx{}|{zywwuuttssssrqlVKJIIHHHHJLJIIIJJNSTUXY]fkmmlllljmqstvvvutld`]]]^aegimoqrstuuvxyz{{}}}{zzyxxxyzy{{}}~~~~}}~~~~~~~~~~~~~}|||{|}}}~~}|{z||}~~~~~~~~~~~~~~~~}}}}~~~~}}}~~~~~~}}~~~~}}}}}}}||||||||||||}}}}}}}}}}}}}~~~~~}}}}~~~~~~~~}}}}}}}}||}}}}}}~}}~}}}}~~~~~~~~~~~}}}}}}}~~~}}}}}~~~~~~~~~}}}~~~~~~}}}}}~~~~~~~~z{|~~}|zyyyyyyyyyzz{{{{{{{{{||||}}}~}}||{||||~~}|{zzzzzzz{{{{zz{{||||~~~~}{{{|~~~~}}~~}|{|||{zyyyyyyzyz|wqrvz{{{zzyywv{~vsuwyzz{}~zvuy}~~{qqssuuuuuvwwyyvxyz|}~}uhp{~~~}||||}}}}}}}}|}|||{|}}}~~{||}}}}}}~|yrv|}}}~~|~oay~~}}|}||}~~~~~~~}|||{{{|{{{zyyyyyzzzzyxyy|~~|{yxvusttssqoqpbRJHHIIIIIKLIIHHIJNRUW[[_jlmmmlllmprstvvutohb_^^_`cfhimorrstvvwyz{{{|}~~|zxxxxxxyzy{|}~~~~}~~}}~~~~~~~~~~~~~}}~}||{|}}}~~~~~}|{zz{|}~~~~~~~~~~}~~}}}~~~}||}}}}}}}}}}~~~~~}~~~~}}}}}}}|||||||||||||||}}}}}}}}}~~}}}}}|}~~~~~~~}}}}}}}}}|}}}}}}~~~~}}~~~~~~~~~~~~}}}}}}}~~~}}}}}~~~~~~~~~~~}}}~~~~~}}}}}}~~~~~~~~{|}~|{zzzzzzzz{{{||||{{{{{||||||}||{{{{{{|~~~}||{{zzzzzzzzzz{{|||~~}|{{}~~~~~~~}}~}|}}}|zyyzzzzzz{{zxyz{{{{{zyyxx}usvxyyz{}{wvy~}rprtvwvvuwy|zzz{|}}~~{vrw|~~}|}}}}}}}}||||||{|}}}}~~{|||}||||}||z{|~}}}~~}~yp{~}{{||~~~~~~~||||{{{zzzzyyyyzzzyxxxyy|~|zxwtsssrrqrvlSNIGHHIJJKKKIGGHILPSX[^]`lmklmnnnorstuvutrkeb``acehjkknqsstuwwyz{{{{||}~}{yxxyyxxxyy{|}~~~~~}|~~}}}}~~~~~~~~}|~}|{|}}}~~~~~}{{{{{|}~~~~~~}}}~~~~~~|}}}}}}}}}}}}}}}}}}}~~~~~~~~~}}}}}}}|||||||||||||||}}}}}}}}}~~~~}}|}~}}}}~}}}}}}}}}}}}}~~~~}~~~~~~~~~~~}}}}}}}~~~}}}}}~~~~~~~~~~}}}}~~~~~~~~}}}~~~~~~~~~~~~~~{|~}|zzzzzzz{{||}}}|||||||||||||{{{zzz{|}~}}||{zzzzzzzz{{{{||~~~}|||||}~~~~~~}}~~}~|{z{{{{{{{|||||{{{{{{zzyy}ppvyyyz{~}wvz~usvxyyywvx{||{{|}}}~~}}}}|~}}}}}}}}||||||{|}}}}}~|}|||||||||}|}}}}}}~~~~}~||~|~~~~~~~~}||||{zzzzzzzzzzzyxwwxxy|}zxwtsssrrrrrbLLIIIIJKMMMKIHHIKNRW]`babhlkkmmnpqrtuuutspiedcdfilppppqsuuvwyyz{{{{{||~}}zxxyyyxwwxy{|~~~~}~~}|||~~~~~}}}|||}}}}~~}}||{|||||}}}}}}}|}~~~~~~~}}}}}}}}}}}}}}}}}}}}}~~~~~~~~}}}}}}}|||||||||||||||}}}}}}}}~~~~}}|}~}}}}}}}}}}}}}}}}}}~~~~~~~~~~~}}}}}}}~~~}}}}~~~~~~~~~}}}}}~~~~~~~~~}}~~~~~~~}~~~~~~~~~{|~~|zzzzz{{||}}~~}||||||||||||{{{zzzz{|~~~}}|{zz{{{z{{{{{||}~~}{|||}~~~~~}}||}}}~~~}||||{|||||}}||{{{{{{zz{wflwyyyz{~~wv{zzz{{{zywx|{|{|}}}}}}}}}~}}}}}}}}|||||||||}}}}}~}}|||||||||}}}}}}}}~~}~~~|~}}}}}}~~~~}}||{{zzyzz{{{zzzyxwwwxx{}{yyuttttrpk_SOLKKKKLNOOMKJIIJLPU[acefefjkilmoqrstuuttqnifffhjnqtutstuwxwxzz|||||||}}||zxxyzywvwwy|}~~~~}|{|}~~~~~~}|||}~~~~}|||}|||}}}}}}}}~~~}~~~~}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~}}}}}|||||||||||||||}}}}}}}}~~~~}}|}~}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~}}}}}}}~~~~}}~}}~~}}}}}}}~~~~~~~~~}}~~~~~~~~~~~~~~~~~z|~~{zzz{{|||}}~~~}|||||||||||{{{{{{{{|}}~~}|{{{{{{{||{{{{|}~~||{{|}}}}}}||{||||||}~~}~~}}||}}}}|}}}|||||||{{{q`mzzzz{|xw|~~~~~}||{{{yvvz~{||}}}}}}||||~~~~~~}}}}|||||||||}}}}}}}|||||||||}~~~}}}}}}~~}|~}~}}~}}}}}~~~~~~~~}}}|{{zzyyz{{{zzyxxwwwwx{~~}|yuuvwsiaYSONNNNNNPQQQOMKJJKMQW]bdghhfgjmnoqrstuuttsoligggjlortuuuvwxyxyz{}}||||}}}{{yxxyzywvwxz}~~~}~}|||}~~~~~~}|||}~~}}}}|{{||}}}~~~~~}}~~~}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~}}}}}||||||||||||||}}}}}}}}~~~~}}|}~}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~}}}}}}}~~~~~~~~~}}}}}}}~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~z|~|{{{{{|||}}~~~~}}||||||||||{{{{|||||||}~~}||||||||}||{{|}}}|{{|||||}|||||{{z{|||}~~}|}~~~}}}}}}|}}}}}|||wnx}{{|}}zy}~}}~}}||{yvvz~|}}}}}}~~}}||||}~~~~~~~}}}|{|||||||}}}}}}}}||||||}}~~}}}|}}~~~~{{|}~}}}}}}~~~~~~~~~~~~}}}|{{{zzyyz{{{zyxxwwwwwx{~{vtuniaZUTSRRRRRRSTUTTRQNLJKMQX]acijhhhmrprsstuuutsqmkhggilmoqrsttvwxyyyzz|}|}}}}||zzxwxyxxvwwy{~~~~~~~}~}|||}}~~~~~~}}}}~~~}}|||||}}~~~~~}}}~~}}}}}}}|}}}}}}}}}}}}}}}}~~~~~~~~~~}}}}}}}|||||||}}}}}}}}}}}}}~~~~}}|}~~}}}}}}}}}}}}}}}}}}}}~~}}~~~~~~}~~~~~~~~~}}}}}}}~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~z|~}{zzz{||||}}~~}}}}}}|||||||{{|||||{{{{{|}}~~~}}||||}}}}}}||||}~~}{z{{||}}}}}}}||{{{{|}~}}}~~~~~~}}}}}|}}}}||~}{{}~~||~~}}~|zzzywuz}}}~~~}~}{zzzzz|~~~~~}}|{|||||||}}}}}}~}}||}}}}~~}}||}}}~~~}}}~~}||}~~~~~~}}}}}||||{z{zzyyzz{zyxwwvvvvwwz}}}~scfg`WTVZ[ZXWUTTTUUUUUVUPLJKMQY^cfkjgeimpqsttuuuusqoligfgilmopqrssuvwxxyyzz|||}~}|zxxwwwwwwvwwy{~||}}}~~|{||}}~~~~~}~~|}}}~~~~}}}}}}}~~~~~}}}~~}}}~}}}||}}}}}}}}}}}}}|||}}}~~~~~~~~~}}~~}}||||||}}}}}}}}}}}}}}~~~~~}}}}~~~}}}}}~~~~~~}}}}}}}}}~}}}~}}}}~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~z{}~~|{zzz{{{{||}}}}}}~}|||{z{|}~~}|{{{zzz{{{|}~~~~~~}}|||}}}}}}}}}}}}}~~~}|{z{|}~~~~~~||}}}}}}~}~~~~}}}}}|}~~~~~||}z{~~}~}~zwxzyvuz}~~~|}{zyyzzz|~~~}|}~}}|||}}}}}}}~~}|}}}}}~~~}|||}}}~~~}}~}}~~~~~~~~}||}}}||||{zz{zzyyzzyxxwvvvvvwwy{{zxuj_`^^[\\`cc\\WTOSXRPPPTUXYSNLNQU\\dgiliefmqqrtttuuutspmjgeegilmnoqrstuvwxyz{{{zzz|~}{yxxwwvvvuvwxz|}|{|}}~||}}~~~~~~~~|~~}||||}~~~~~~}}}}}~~~~}}}|}~~}}}~~}}|||}}}}}}}}}}}}||||}}}~~~~~~~~~~~~~}}|||||}}}}}}}}}}}}}}~~~~~~}}}~~~~~~~~~~~~~~}~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~}}~~~~~~~~~~~~~xyz{}~}|{zzzzz{{{||}}}~~}}|{{{|~}{zzzzzzzz{|}}}}~~~~}}||}}}}}~~~~~~~~~~}{{{{}~~~~~}}}}}~~}}~~~}}}|||}~~}}|x{~~~}ytvyxvuy}~}{~|yxyzzz{{}~~}~}}|}~~}}}}}}}}}}}}~~}}}}}}}}~~~~~~~~}}|{{|||}}}|{yyz{{{{zzzyxwvvvvwvwwxvrme_^_a^^_`]ZWSPNQTOMNOSTYZSNMORW^fikmjhinrrrsstuutsrolheddgikmnoqrttvwxxy{||{zzz{~}{yxxwwvuttuwy{}}|{||}}~~}}~~~~~~~~~~}~}}|||||}~~~~~~~~~~~~~~~}}||{|}}}~~}}~~~~}}||}}}}}}}}}~~}||||}}}~~~~~~~~~}}||||||}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}~~~~~~~~~}}}}|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~xxyz{|~~|{zzzz{{||||}~~~~|}|{{{z{{{z{{||||}~~~}}||}}}}~~~~|||}~~~~~~~}}~}||{||}~~~zw{~~~~~}|}zvrtxyvuz}~|{|yxyzzz{{{|~~}~~~}~}}|}~~~~}|~~}~~~~~~}}~~}}}}}~~}~~~~~}}}}||||}}}|{yyz{{||{zzyxwwvvwxwtplfbdcbbbccba]URPLKOLLJILNQTXXSPMPU]djllljjlpssssstutsroliecbcfhkmnortvvxxyyz|~~|{{z|{yxxxwwutssuwxz}~~|{{{|}}~}}}~~~~~~~~~~~~}|||||||}~~~~~~~~~~~~~}}||{||||}}~}}~~~~~~}}}}}}}}}}~~~}||||}}}~~~~~~~~}}||||||}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}~~~~~~~}}}|||}~~~~~~~~~~~~~~~~~~~yyxyz|}~|{zzz{{|||}}}~}|{{{{{{z{{|||}~~~}}}}}}}~}}}~}}~~~~~}~}|{{||}~~zv{~~~~|xvxxwwxyyvty}~~}{{|yyyzzzz{zz|~~~~~~}|}}}~~~~}|}~~~~~~~~}}}}~||}~}}}~~~~~~~~~~}||}}}|{{{{{|}}|{zyywvwwwuofa`begfdcdedb`]WTPNPRIHIKNOQRWVRPMQV_fklkkkloruttssttsrpmjgcaacfhlmnqtwxyzz{{|~~|{zyyxxwwwusrsuwwy|~}{{{{|}~}}}~~~~~~~~~~}}}}|{{||~~~~~~~~~~~}|||{||||||~}}~~~~~~}}}}|}}}~~~~}||||}}}~~~~~~~}}||||||}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}~~~~~~~~}|||}~~~~~~~~~~~}~~zzyxyz|~~|{zz{{||||||}~}|{{{{{zz{{||}~~}}}}}}}~~~~~~||{{|}~~zu{|tswz{{zzyvuy}~~}{{}zxyzzzzyyz|~~}}~|}}|z{{~}|||}~~~~~~~~~~||}~~~}}}}~~~}}}}|||||||}}~}|zzyxwxvne_^_bghc_aceffc^\\VSNNONHGJLPQQRTTRPORXagkkjklnruvvutstsrqnkhfa``cgjnmmquy{{|||}~~|zzyyxxwwvusrsuwwx{}~~|{zz{|}}}~~~~~~||||}}~~~~~~~~~}|||{||||||}~~}}~~~~~~}}}|}}~~~~~}}}}}}}~~~~~~~}}|||||}}}}~~}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}~~~~~~~~~}|}~~~~~~~~}}~~~~~{{zyyz|}~~~~}|{{{{|||||||}~~}|{{{{zzz{{|}~~~~~}}}~~}}~~}||{|}~~zv{wvz~{{zzywvy|~}|{|~{yyz{zyxyy{}~~~~}}}}}|{||{uuy}||{{~~~~~~~~~~~}~}|}~~~~}|||||}~~~}||{||}}}}}~}}{zyxxuja`aehheb`beeefheb_ZSOMMMKJJLMQRRQRRQPRW]cgjjjlnqtvwvutssrqoljgda`behlponrv{||||~}{zzyxxxwwvttssuvvwz|~|{zyz|}}}~~~~~~}||}}~~~~~~~~~~}||||||||||}}}}}~~~~~~~}}}}}~~~~~~}}}}}~~~~~~~~}}||||}}}}~~~~~}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}~~~}}}}}}}}~~~~~~~}~~~~~}}~~~~~~~||{zyyz|}~~~}}||{||||||||}~~}|||{{zz{{|}~~~~~~~~||~~~~}|}~}zw{{z~|{{{ywwz|~}|}~{zz{{zyyyz|}~~~~~|||||||zzzolx}}||{}~}~~~~~~~~~~~~~~~~~~~~~}~~}|||||||}~~}}||||~~~~~|{zxurjdabfhhhfebbgkhggid_aZOMMMKKKKMNRSRQPPQRV[beefilnpsvvwvttrrpomjgebbbdhloqqqtx|}}||~~}|z{{yxxxvvuttssuvwxy{}~}|zyy{|}}~~}}}~}|}}~~~~~~~~~}}}}||||||||}}}}~~~~~~~}}}~~~~~~~~}}}}~~~~~~~~~}}|||}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}~~~~~~}}}}}}~~~~~~~~~}~~~~~}}~~~~~~~~~~~~~~~}|zyxy{{}~~~~~~}||||||||}}~~~}}|{{z{||}~~~~~~~~~|||}~~~}}}~~}zw{~~}~{{{{zxw{}~}|~~|{{||{zz{|}}}~}}}}~}}}}}|||||||xwzwvyzz}~~~~~~~~~~~~~~~~~}}~~~~~~}}~~~~~}}~~}|||||{{||}}~~~~~||||~~~}}|zyvof\\\\bknmjebdgikllhgffaacWMNMLLLLMMNRTRPPPRTY]bcdgkoprtvvvutsqpnlifdbacfilqqrsuwz}}}|}~~~}||{{zzzzyxxwvvuttttuwxyz{{}}{yy{||~~~~~~}}}~~}}}~~~~~~~~~}||}}||||}}~~~~~~~~~~}}}~~~~~~~~~~~~~~~~~~~~}}}}||||}}}}~~~~~~~~~~~~~~~~~~}}}}~~~~~}}}}}}}}~~~~~~~}}}}}}}}~~~~~~}}}}}~~~~~~~~~~~}}}~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~}{yyyz{|}~~}||}}|||||}~~~~}|{{{|}}~~~~}}~~|||}~~}}~~~}||~~}}zw{~~|{{||{xu{~}|}~|||}}|{{|}}}|}||||||||}}|||||||{{{{|~}z~}|~}|}}}~}~~}|}~~~~~~~~~~|~~~}}}~~~~~~}||||{{{{{||||}}}|{z{{}}yxz|zti^\\_ejjjjjihijklmlheda^bbSQPMKLMNNMNQSRQPPRUY^bdfkorstuvvuttrpomjgca_aeimpsttuxy{|}}|}}||{yyyyyyyyxxwvuuuuuuvwxyz{|||~}|zy{||}}~}~~~~~~~~~~~~~~}~~~~~~~~}}}}}}}}}~~~~~~~~~~}}}~~~~~~~~~~~~~~~}}}}}}|||||}}}}~~~~~~~~~~~~~~~}}}}}~~~~~}}}}}}}}}~~~~~}}}}}}}}}}~~~~~~}}}}~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~}~~~~~~|{zyyyz|}~}|||}|||||}~~~~}|{{{|}~~}}}~~~|}}}~}~~~~~}~~~~}}~~}{|~~~|~zw{}}|{|||{rz~}{|~}|}}}}||}}}}|~|||{{|{z{{|||||}||||{|}|~}|||}~}}}~||}}~~~~~}}~~|}~~~}|||||}}}~~|{{{{{zzzzzzzz{|{{zyyy{ujqy{u_UU]dlmkjkkkkkklkljgeb^^eWLTQLJLMONMNQSRRPORTZ^beinqstuuvuutsqomkhd`]]aflpstvvwz{|}}|{|{{zyxwwxxxxxxwwvuutuuvvwxxz{{||}~}zy{|||}~|~}}}~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~}}}}}}||||||}}}}~~~~~~~~~~~~~~~}}}}}}~~~~}}}}}}}}}}~~~~}}}}}}}}}}}}~~~~~}}}~~~~~~~~~~~}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~}|{zzzzz|}~~|||}|||||}}~~~~~~~~}~~}||||}~~~~~}}}}}|~~~}|||}~~~}~~~~}}~~}{{}~~~|{w|~~~}||}}}|qz~|||~||}}}}}}}}}}}}{{{{{{{{{|||||}~~~~~}}~~}}}}~~}}}}}}|||}{{~~~}}~~}||}~~}}}}||||{{|}}~}|{zzyyyyyxyyyyzzzyxxxwwmbqxrcPQ\\gmommmopppomjhhhfda\\[XPRVQJILNPPOOQRRQPPSV\\aeimpstuuuuutsrpmkiea][\\ahnrtuwxxyz{||{z{zyxwuuuvwwwwvvuttstuvwwwxxy{{|}~~{z{||}}}~|}}}}}~~~~~~~~~~}}~~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~}}~~}}~~}}}}||||||}}}}~~~~~~~~~~~~~~~~}}}}}}~~~~~}}}}}}}}}}~~~}}}}}}}}}}}}~~~~~~}~~~~~~~~~~}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~}}}~}{{zzzzz|}~}|||||||||}}}}}}||||~~}}}}}~~}}|||~~}}|{|}~~~~~~}}}~}|}~~}|zw{~~~~~}|}~|rz}}|}~|||}}}}}}}}|}}{{{{{{{||}}}}}}~~~~~~~~~}|{||||}{~}}}}~~||||}~~~}||||||||{{{{||{{zzyyxwvuvxxxxyxxwwwwvtiavtcSPYeonoprssrrrqnkjjigeb\\TGJVOKHILOSSRQQRQPPQUY`eilprsttuuuutsrplifa]ZY\\aioruvxxwwxxyywwwwwvusstuvvvvutttsstuvvwvwxyz{|}~|z{||}}}}~}|}}}}}}}~~~~~~}~~~~~~~~~~~~~~}}}}}}}~~~~~~~~~~~~~~~}}}}}}}~~}}}}}||||}}}}}~~~~~~~~~~~~~~~~~~}}}~~~~~~}}}}}}}}}}~~~~}}}}}}}}}}}~~~~~~~~~~~~~~}}}}}~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~}~~~~~~~~}}}~~|{{{zzzz{|}~|||||||||||||||{{{{|}~~~}}}~~~}||}~~~}||||}}~~}}}}}}}~~~}}|}~zw{~}~~~}~~~{s{}}}~||{||}}}}}}||}}{{|||||}}}}}}}~~~~~~~}{||||~{{}}~~}}|||}}~~}}}|||||||{{{zzyywxwvvtsrrrsuuvvxxwvwwxxtiavmWMT`lppoqtuusrrrponmkheb[PDCQEGHKNPUVTRQQQQRT[^dhloqrrstuvvutrqpmfa\\YXX\\`horuwwwsrspuutsstttsqqrstuuutssssrstuvvvwxyyz{|}}{{||}}}}~~~{}|~}}}}}}~~~~~}~~~~~~~~~~~~~~}}}}}}}}~~~~~~~~~~~~~~}}}}}}}}~}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~}}~~~~~~}}}}}}}}~~~~~~}}}}}}}}}}~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}~~~~{{{{zzzz{|~}|||||||||{{{{{{{{{{|}~~~~~~~~~}}}~~}~}||{||}~}}}}}}}}~~z{}||}yw|~}~~~~~}zw{}}}{{{|||}}}}|||}}{|}}}}~}}}}~~~~~~~~}||||||~|{||}}~~~~}}}}}}~~}}}}||||{{{|{zywwttrqrrqpqqpoopqsuvuuvwxythfj_QOZelmmoruvusssrqonljfb]WL@=JGFIMOQVXUTQQQSUZadiloqrrrsuvvvusqqpme]XWYY[`gnqtvwuojlgnooooqqrqpqrrrssssttttsttuvvvwxyxyz{|~~||||}}~~~~~||~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}~~~~~~~~~~~~}}}}}}}}}}}~~~}}}~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~}}~~~~~~~~}}}}}}}}}~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~~~}}{{{zzzz{{|~~}{{{{{{{{{{{{{||||{{|}}~}}~~~~~~~~~~~}|||}~~~}{{{||~}}||}}}}}}~x|~~|{}yw|~}~~~~|yx|~}}}{{{||||||||||}}||}~~~~}}}}~~~~~~~~~}}|{{{|}~~|{|}}}~~~~~~}}}}}}}}}}}}}}|{{{{{{yyvuqolopqrruuvuqpnmlmnoqruwwyshd^TPT^gkllosuvuttsrpmkjf^UPKF?=GGGKOPQSUTRQRSUY_gjnprsssstuvvvuspppmdZUVXX[`flpsuvqjdhaghjkkmnpopqqqqrrrstuuttuuvvvvwxyxxxy{}~~}}}~~~~}|}}~~~~~~}~~~~~~~~~~}}}}}}}}}}}}}~~~~~~~~~~~}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~}}~~~~~~~}}}~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~}|}~}~~~~~~~~~~~}{zzzzzzzz{{|}~|{z{{{{{{{{|||}}}}|||}}}||}}~~~~~~~~~~~~}|{}}~~~|{z{{|||||||}~}}}}~~~~xw|~}}}~|yv{}}}~|||||||||||}}~}}|}~~~}}~~~~~~~~~~~~~||{{{{{|}}|{}~~}}}}}~~~||}}}}}}}}}|||||||{{zzywvttstxzwvvxvusrrpmihghlnsvvxsh^TNQXbillmpsuvuutspmifd_RD@@@A@FFHNQQOPQRRSTUX^djnqstttttuvvvutromnneXTUWW[`ekorttnd^f_abehijkmnoppqqqrrstuvvvvvvvvvwyzxwxyz{|~~~~~~~}}~~~~~~~~~~~~~~~}}}}}}}}}}}}}~~~~~~~~~~~~}}|||||}}~~~~~~~~~~}}}}}~~~~~}}~~~~~~}~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}|||~}~~~~}}}}}~~|yxzzzzzz{{{{|}~~}|{{{{|||||{||}}~}}}|{{{|}~~~~~~~~~~~}{|}~~}|{zzzz{{||{}~~~~~~~~xw}~|||}}yw{~}~}~}}}||||||}}~}~~|{{~~~}~~~~~}~~~~~~~~~~~|||{{{{{|}}||~~~}{{{|}~~~}~~}||||||||||{{||}}}||{zyzzzyyxxwwvwwvvutssrokhjghkqtvwsfYPPU]fjklmpsuvvutqlga][SD;;<?CDHFKPRPMMORSWWZ^cioqstttttuvvuutrqnllmeXSTWW[`eiloqqlc]b]\\`cfghiklmnoppqqqssuvwvvvvvvwxyzwvwyzzz{}}}~~}}~~~~~~~~}~~~~~~~~~~}}}}}}|}}}}}~~~~~~~~~~~~~~}}|||||}~~~~~~~~~~~}}}}}}||}~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~~~~~~~~~~~~}~~~}}~~~~}}}~}}|||~~~}}}}}}}}}~|xvzyyyzzz{{{{||||{{{{|}}~~}|||}~~}|{{{{||~~~~~~~~~~~~~~}|{{}}}|}|{zyyzz{{||}~~~}}}xw}~|{}~~zv{~~~~~}}|}|}}||~}~z{~}~~}}}~~~~~}}}}{|{{{{{{||||}~}|{zyy{{}}~}~~~~}|}|||||{{{{{{{|}}}|{zyyyyxxwxwwvvvvvvutsspkhjhgimrtwreUOQYafjkklortvvusph`VWQE9<>@BAFKFLQSPJJPXZZZ]afmqrtuuuuuvvutsrqoljjkcWRSVVZ_dgjnpokc\\_[[_bdefgijklmooopqrsuvvvvwwwwwxyywvvyzyxvxy{||||}~~}}~~~~~~~~~~~~~~~~~}}}}}}}}~~~~~~~}}}}}~~}}}||}}}~~~}}}~~}}}}}}}|||}~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~~~~~}~}~~~}}~}}}}}}}}}}}}}}}}~~|yxzyyyzzz{{{{{{{{{{{{|~~||}~}{zzz{|}~}}~~~~~~~~~~~~~~}{{|||}}}|{zzyz{|}}~~~~|xy}}{z|}zuz}~}}}|}}|{~}|~}~~}}~~~}}||}~~{{{{{{{{|||}}}{xxxxxzz{|}}~~~~{|}}{{{{{zzzzzz{||}}}|zyyyyyzyyywvvuvvwwvutslegjiijoruqbRQT[bfhijlortvutqm`WKHC:6@DDECJOGMQROJMS\\`^\\afjpsstuvvvvvutsqomljiih`VQRUVZ_dehkmmlg^\\YZ_acddegijjlmmmnoqruuvvvwxwwxyyyxutxywvrruxz{{{|~~~}}~~~~~~~~~~~~}}}}}}}}~~~~~~}}}}}~~}}}}|}}}~~}}}~~~~~}}}}}||}~~~}~~~~~~~~}}~~~~~~~~~~}}}}}}}~~~~~~~~~~~~~~~~~~~~}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~}}}}}~~}}}}}}}~~~~}{zyyyzz{|||{{zzz{{{|}}|}~}|zz{{|}~}|}}~~~~~~~~~~~|{|||}}}}|{{zz{||}~~~{xy}~{z|}zuz~~{~~~||}}{~}{}~}~~}}~~~}||}~}~|z{{{{{{||||}}|zwwxyyzz{{|}}}~~zzz||{zzzzyyyyyyz{|}}}|{{zyyyzzyxvtttuuvvuutsogchgghlptn_PRW]bdfhklorsutsnh[O@=;;<DHHGDNTJMPQPNQX`a__flpqssuuvwwvutrpnljifffe^URRUW[_ccfhjkljbZVX`^abcdfhiijkllmnoqtuvvwxxwwxyyyywuxwusopsvxz{|{|}{~~~~}}~~~~~~~~~~}}}}}}}}~~~~~~}}}}}~~}}}}|}}}~~~~~~~~~}}}}|}~~~~}~~~~~~~~}}}}~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~}}}|~~~~~~~~~~~~}}zzzz{||}}}|{zyyz{{|~~}~~}|zz{{|}}{||}~~~~~~~~~}||{|}}}||{zzz{{|~~~}~~|wvy~~}}|}~{uz~}||}}~|~}{yz~~}~~~~~~}|}~~}~~~~}|{{|||||||||||{zyyyzzzz{{{|}}~~{{{{{zzzzzyyyyyyyzz{|}}||{zyyyyxwutsstttttssspkcdcdfjnsk[PUY]`bdhlmprsssqkbTH7:@DDFHHHCOWMMNPRRV]aa`bjrssttuuvwvusromkigfdddc\\URSWY]_abcfgimlh]VU_]`abcfhhijjkklmnpsuvwwyxwwxyyyzywzsqpnprtvy{}|z}}~~~{z~~~~}}}~~~~~~~~~~~~~~~}}}}}}}~~~~~~}}}}}~~}}}}|}}}}}~~~~}}}}}~~~~~~~~~~~~~}}}}}~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~}}~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~~{zz{}}}~}}|}~~~~~~~~~}}}|zzz{|~~~}|zyyyzz|~|z|~~|{z{{|}~|{{||}~~~~~~~~~|{||}}||{zyyz{|}~~}}~~xsty~}||}}~}uy~~}}|~~~{~~{ww|~}~~~~~~}~{~}|}}~~}||||||||||{yyxyzz{{{{z{{{||}~uyzz{{zzyyyyyyyyz{|}}|{zyyxwvutssstsrrrsssrmda``ackuhWRUZ^_adhmnprrrqoi\\M?43CNGDGIJAOYQNMQUT_edegjnrtttuuvvvutqnjhgfedbbcb[USU[[^``e`deflmmc]X]^_`bdgghijkkkkmmortvwxywwwxyyz{{{{qnnnqrsuxy||yz{~~~~{}~~~}}~~~~~~~~~~~~~~~~~~}}}}}}}~~~~~~}}}}}~~}}}}}}}}|}}~~~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xtvy|~|~~~}||}~~~~~~~~~~~~~}|{{{{zzz{}}{yyyz{|~}}}{{{|}~~}|{||}}~~~~~~~}|{|||||{{zyyz{|}~~~}~vrty}||}~vy~~}{}~{~~}zy|~~}~~~~~~{~|z{}}||}}}}}}|{ywvwyz{{{zz{{{{{|}wxyz{{zyyxwwwxxxyz||||zyxwwvuttsrsssrqrrtutoha][Z[cpdSSVZ^`bgkmopqppongXE825;PNFFJM?NYSMNSY[fjhiloqtuuvvvvvutrokecccbba`ba\\UTY_hib^aY^`bkmnmi^^^``deghhijkkkkmnnqtvwxxvvvxyz{|}|{rnmorrstvwyzyzz}~~}}{~~}~}~}~~~~~~~~~~~~~~~~}}}}~~~~~~}}}}}}~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~}smsx|~~}}~~~~~|z}}~~}|||}~~~~~~~~~~~~~~~~~~}}~~}{zyyy{z{|~|zzz{{|}~}||}~}}||||}~~~~~~}|||||||{{yyz{{||}}~~~zuw{~~~wy~~~wx~{}}{~~~}}~~~~~~~~~|||{|~~}|}}}}}}|zwuvwyz{{zzz{zzz{|}}yxyzzyxxwvvvvwwwy{{{zyxwwvuttsrrttrpolllorng`YVRRXf^RSVZ^bejmnoppoomi_O>439<IRJEJP?KSOKPX]cikkmprtvvvvvvuusqnkgb```a``aba]WU]emhb^`VY]`hknpqfa``bffgghijkjjlmoopsuwxxvvuxzz|~~~|tpnprrrrtuuxy{{{|~~}}|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~~~~~~~~~~~}}}}}}}~~~~~~~~~~~~zpkry}~~}|||}}}zwux~|~~}}||}~~~~~~~~~}}}}~~~~~~~}}~~|{zyxy{{{|~~{{{{{|}~~~~~}}|}}~~~~~~}}}}}}}{yzzzz{{{|||}}}|~ww~~~uu}}}~~~~~~~~~~~~~}|~{{}~~}}}}}}~}|ywvwxyzz{zz{zzzz{|}~|xxxxxyyxvvuuttuxyyyxwvvvuttssqsutjorniefijd^VOLJKYVRRW\\`filnnopponi_PA843:IELJEHS@HOKJS\\`immoptuvvvvvvusqnligea__`aabccc^XXaje__^dWW``cfkprmjd_dighghhjjkkmnopprtvxwvvvy{z}|vrnprqpprssvx{||z|~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~}~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~~~~~~~~}||}}~~~~~~~~~~~~~~~{vvz}}}}}~|snpx|~~~~}|}~~~~~~~~~~}}}}}}~~~~}}~}|{zzz{{{}~|{{{{{|}~}}}~~~~~~~~}}}}~~|zzzzzzzz{{||}}wv~~~{y~~~~~~~~}}}~~~}~~~~}{|}~~~~~~}}}}}}}|zxwxxzzz{{{{zzz{{||}~}xvuvxyyyxwwwtttwxxxwvvvuttssrrsqdeosomhdcc^WOMID@ELQUY_chkmnnnonnmaN>9696:MNKICFRAGHIJS_bkopqrttuvvvutsrnkhgedb``_`accca^YZdjgVY]gUO`^`bhnqpmk_fkhihhhjjllnopopqsvxwvvvy|z}|wsmoroooqqrtw{}~|z|}~~~~~~~~~~~~~~~~~~~}}}~~~~~~}}}~~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}|}~~~~~~~~~~~~~~~~}~~~~~~~~|zz}~}}}~~|pgqy|}~~~}}~~~~~~~~~~~~~}|}~~~}~~~}||||{{|~}||||{||~~~~~~~~~~~~~~~~}zzzzyyyzzz{{||}~}vu}~}|}~~~~}}}~|~}}}}~~}}}~~}}}}}}}||zzzzzzz{{{|}}}}}}}}}|yzwuvxy{||{{|{zwwwwwvuuutssssstsb^jstojf`]^ZQKHD>8:FRZ^ehklllnnnjhaR=25:?@<DRHKHHOGMKKMVbenrssrppsttsrrpnkfdcdedda`_`aba]\\\\ahhdTQZiRN[[Z\\bjnpqqbhljjhhhjjlmnopopqstvvuvvy{z||xuonpmmpqprtvz}}yyz|~~~~~~~~~~~~~~~~~~~}}}~~~~~}}}~~~~~}|||||}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~~~}~~}}|}~~~~~~}}~~}|}~~~|lbw~}||}~}}}~~~~~~~~}|}~~}}~~~~~||{|~~}}}}|||}~~~~~~}~~~~~~}|{zyxyz{||{{{|}~~~}xvy}vt|~||~~~~~~~}}}~~}||~~~~~}}}~~}}}}}~~~}|{{zzzzz{{|~~~~~~~~}~{uv~{xvuwy{~}xwwvuttttssssrqg\\ehjlkc^YWZWMGB=76=NZadikmljgfe`YRJ?505@GJDAQGNUONNSONOXdinssqnccjlnnnmlkidbbccdcb_____^YX]fjfaYLZhQVVWWW\\dkmpthjllliijjkmmnoopqqrrtuuvvx{y{~{wurppmnrsqqsuy{~}ywxy|}~~~~~~~~~~~~~~~~~~}}}~~~~~}}~~~~~}}|{{{{|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}~}}||}~~~~}~}|}~}|tn}~{{|}~~}}}}~~~~~~~}}}~~}}~~~}~~~~~|{{|~~~~~}|||}~}~~~~~~~|zyxz{|}}|{{|}~~}}~{urw}vs|~~~}}}~~~~~~|{{}}}}~}}}}}~~}}|{zzzzz{{{{{||}~~zwss{{xutvwyxwwvttsstutspmbX]e^]dh_WSSVUMB843=KZbegjllhc\\[TLF<67:99FPPMISKP[TOQSONP[cgqrsohUS_agfghihhdb`aab`acbb`]\\WYdjgcbdOVeUXUYUUW`gilsrlmmnjjkikmnnopqrqpruuuvvxzyz}~}yuttrropttrqqtxy{|zwvvwy{}}~~~~}}~~~~~~~~~~~~}}}~~~~~}}~~~~}}|{{{{||}~~~~~~~~~~~~~~~~~~~~~~~~{y{}}|{{{}~~~~~}~~}}~~~|z~{~}{{|}~}}~~}}}}~~}}}~~}}}~~}|ywwxz|||}{{{|~~}|||~~~~~~~~~~~~{yyy{{}~}||}~|{{}ws|~~}}}~~~~|{|}|~|||}}}}}}~~}|{{zzzzz{{|||{}~~~{}yst}~~zxstronv|{t{ynorqqqqsuvuph`UQRVXPZb[UPPQPJ?47AMPX`dgijjcYKMLED=8<BB@GRTNOUOOQWTRROOQ]chrqql]KIUX^abcd_fdcbba`^__`[VXX[brn\\_dlWRcWVX^VST\\ccdoynnoojjlglmnnopqrppsvuvuvwxxx{}{wsstssssuvtrprvwy{|vtssux{{|~~~}}}}}}~~~~~~~~}}}~~~~~}}~~~~~}}||||||}~~~~~~~~~~~~~~~~~~~zrrwyxyyz{}~~~~~~~~}z}~|{zz{|}~~}}}}~~~}}}}}}}}~~|xrmllqvxz|zzz|}~}|||}~~~~~~~~~~~~~||{zz|~~~~xs|~}}~~~~~}}}}~z|{{}}}}||}}~~}|{{zyyzzzzyzz{|~~}|zxz~~ywz{|{xvrspc_ehgamsilbcdddfhkllg^TMHHJMRKPTSOMLMH@94AMQQW_cfhiibRB:BBCB@?EIIKOQNRYPKJTWTPNPR`ejoqndUFFSUY^^]^Y_abbb`^\\]]``\\TZgoqcScfkaO^YY^bXSRX_^^i{rpqpjjmelmnnnqqqqqsvuuuuvwwxz|zvrrssuuuwwusrrtuwzzusrrsvyyz|~~~~~}}~~~~~~~~~~~~}}~~~~~~}~~~~~~~~}}}}}}}~~~~~~~~~~}toppprvy{}~~~{|~~}{|}}zwwy|~~~}}}}~~}}}}}~~}}|||||}~~}{yuonqokkmty|~zzz{}~~~~~}{{{|}}~~~}}}~~~~~~~~~{xz|zt|~~~~~~~}}|||~~}{yz~~}||||}}}}}|{{zyyyzzzzz|{{{~~~}|ywz~}zz}|vwxuroihaUOSTSOZ_ZaWVUUVWZ\\\\YQH@=@CFHJHJGHGFGHA75=KPNPV_defgg`K:56>DGC=AKPQOMMR[OKHTXTOMPSaekmqjYMCITTX]ZY[VY_bcca^[[]_ba\\crvcPLik_dR\\[^ddZTTV[YYdzvrroijlfllmllopooqsuttttuvvwx{zxsrrsuvwxwvttsttvwvrssssuwxy{}~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~zpqtkjow}~~~|{~~~~}}}yuuz{yxy}~}}}}~}{{{|}~~~}|||||}~}{wqjegrzqkkisz}}}}zzz{|}~~~}}}~~~|{zz{|}}~}}}}~~~~~~}~~~}||~~zz{~|s|~}|||}~~}{|zxy~|{z{|||{zzzzzzyyxxz{|}}}~}xwx{|||zz~rrpmj`XVQJEGIIINRQYPONNNNONLHC>;;=CFFDBD>AAAAF@9@HNNMNU^efgfc]I614;BJHABKQTOLNPZQOMWXUOMOT`fllnfSHEOUP[_ZY]XZ_bcba_\\]^__`hmqpeUSiiV\\Z[]bdb[UTVVTWaxytrngikgkkkiklmlloqurrrsttuvvxyztrrqtvwxwwuuuuuusmlqtstuwxxy|}~~~~||}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}wxwpouy}~~~|}~~~}zvux{pip}}{{~~~}}}}}~}{zz{}~~~~~}}}}~~}ztj_]drvmdbhtz}|{{zzz{{|}}~~~}}}~~~}}|{zz{|}~~}}}}}}}~}|~~~}~}{{||}}{}~t|}{z{{~{|z|{zx}{yz{{|{yywxy{zyxxxz|}}|zouz||}ut{|{{wuyxpe_^[QHGIFCEGHHKMNPPONONMKHEA@=:;=CEH><=<=@?>D@@JPNLMNU_egfd_RG6/17;EMKFKPUPLJMUTTW\\\\XNMOT_flll`RHHWSM\\`XX\\WY`ccba_]__acgnolki]Yi`YW][_dd`YUUUTSXau{vrlijjhiiigkjkjjmospppqrssttvwzutrpsuvwwwvvvvutqkiosstvwxxyz}~~~~~}}}~~~~~~~~~~~~~~~}}}~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~|{zvvy{}~~~~|}}~|xuqnkmx~wffv}{}~}}}|{}~{zzz{}}~~~~~~~~}}zodcgklmjioruwxz{zzz{|}}}}}}}}}}}}}|{{z{|}~~}}~~~~}|~~~}~~zy{{}||v|~{yyz~}}ztw~{yxz{{|zxwuvxy{zyyxz~|uty}{xustxrkfejmh[RNLFBCFFEEGHILNPQQRSRQNKEA@>?@AACCE?68>CCB>CFLOPLILOW`ghfaXCD;1366@MSLKLRPIFJQY^ba_XJJNU^flojYOJLXRL_^UUWUYadcbbacedghhihdcfb]]ZWU]Z`hf^VVWUTXafoxzskmljihhhgmjkiiknqommnpqqqqtuyuvroqtuvvwvwxvvurlhjmqswxxxxy{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}||}~~~~~~~~~~~~~~~~~~~~~~}}}~}|xrmheem{zplv~|}}}}|||}~|zyzz{{|}~~~}||}}~|vpliiinrtsmklry{zz{|}~~~~}}}}||}|||{{{|~~~~~~~||~~~~|xyz}~|}w||{{~{vsyv}|zyxyzz|{yxvvwy|}{zwy|}}}vvz|ztypae`XTTY\\YOGCBAADHKIHIJLNPRSSSTSQMIC@>@BEEFFD?C96@HHGFGAFOOJDJQYbhhcZP=;74474:FTPIELNKILWaihb\\QBGNU]flngTMLQWQRcbYQQSX`bbaa_]^cfea\\[\\ZUYZVUUW`\\_if[WXWWZemlhnyunqnlkjijlpkljikmomkklnoponrsutxspprstuvuwxwvvtrokkqswxxwwwx{||}{}}~~~~~~~~~~~~~~~~~~~~~~~~~~}|}~~~~~~~~~~~~~~~~~~~~~}}}}~~~|zumfa`gv}zx{~~||||||||}~}{zzzzyxz||{zyyz{||~}vljlqvzyqoou{{z{|}~~~~}}}|||||{{{|}~}~~|{}}~~zyz}}}x}~||~xr||w|{|zyyzz{{zyxwwy}}{yw{}}ywyxrinaJJJHGGILHE@??@BGMPMKKLNPSSTSRQNKGEB??BFHJJIEAD?==JLIFA7@EFB?JTZ_edYND:7656655<PSGAHPSQVbkmdXQE@HNT]ekldWSMRURS`_YPMTY`abca^XSTX\\ZTSWVMQXXWWV`\\[c`\\ZZ[^grvqdbnyurpqnkjlpsmmkkllmjijklmnmlopqsvtqqrrqsutvwwwvtsspnsuwxxwvuuxyyzxz|~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~}}}}}~~|ytje`^jz~}|~~}~}|||||||||}~}|{{zzwuwyyvttuwxy{{sqrtvz}{zyz{{{{|}~~~~}}|||{{{{{|~~}~~}|}}~~~~}}{z|~}}~}~y~~~}}~xuxvzyuz|zzyyz{zzyyyz|{zxy~~}wwul\\RQMB=?ABCCA?>>?@ADJPROMMNOQSSRPOMIDA@BACFILMMKHDEBD@HHD@:3:756?NZ]\\\\YNA;865677656CNI@ANW\\bhf^UIE@AHMS\\dkke_ZOSVRS^bZNMV[_`b`_^\\YVVVSRRVWTRZ^]YV`YVZ\\\\]agkryytf^cuxtstsljmrrmnmlmkhgiiklklkjlnorqtqrqpopssuvwwvsssssuvvwwvusrqqqsuy{}}~~~~~~~~~~~~~}}}}~~~~}~~~~~~~~~~~~~~~~~~}}}}}}~~~}{ulgb`kx~}~}||{{{}~~~||||{|}~~}|||{zwuuvunlmptvxxyxy{yxvvuuwww{|~{{|}~~~~}||{{z{{{{}}|~~~}}~~~~|{}{|}~}~z~~~wy~|y{~~|zyyz{{zzz{{zxw|~~~}yvq_LB@@>=>?BCA==>@CDEGKOPOMNOPQRRPKIGDA??BDGILNOOMOIFKLJH=87644108GUZZXVMB87655678665?FGCET`ff_OEGEA>?EKRZbimhc_RUYUS[cZOPY^]]``_ZY]^]YSQSWXWU\\ab]ZbVQVX]ckrtwvtqkbcltwtrpmknssnonnmhffjjlljjiijlmposprpnnnqqsuvwvtttttvvvvvutrqmmmorvy{|}~~~~~~~~~~~~~~~}}}~~~~~~}}zy~~~~~~~~~~~~~~~~}}|}~~~~}~~~~~~~}}}}~~~~~~|yrifiqy~~~{wwy|zz{{||||{{|~~~~}}}~}}}}~~}zwuplgfinsvwvtsv|}|{wqjlw}{{|}~~~~~~}|{{zz{{{|}}|~~}~~~~~~|}~|z}}}~}~~~~{yyz{{{{|}~}zx|{~}{~uvyzvkS@;;<>@BACEC>>?BFGHJLNNNMNOOMMLMHCCBA@ADGILNPPPNNMKSRFB62124612>NXYRTLB95555567:98;DAFMYcge[L>5?EB>?BHPY`gmhb^TW[VSXb[RV\\`[ZY\\\\][ZZ\\YTRRW[ZX[_^Z[hWTY[`luwwvpmlnhhfmwwonnlntrnooplcdgjkmmihgjklmoorprpnnmoopruuvtttttuuuuttsrplkkkptwyz{|}}}~~~~~~~~~~~~~~~~}}~~~~~~}|xurv~~~~~~~~}}}}}}}|}}}}||}}}~~~}|{|}}~~~~}}}~~~~~~~~}|xnjqx{~~~~{yxxzqwy|||||{{}~~~}}||}}}}~~zskhddhntxyxsmoy}|{xtrt{{|}~~~~~~~}|{{{{{|~~||}}~~~~~~~z~|{~~}~~~|~|{}{zyz{{{{|~y|~{ywx}}{yy|{yvutndM;9>@ABDDEEC???CGIKKLLLMMMPNJFFGFBBAABCEHILLOQPKOTVTE:862013646@LTXJJA=66666779==<BOIO^lndVHB@7<CE>BCFNV]dkf`]UW[XRT`ZVZ`a^[ZYX^`]ZZWTQOV\\a\\UW]ZMXY]]^iv{vtrojlnjkhiryuspmnspnmpoj^eikkkmiffkmmnnopopoonnnmnorssrrrrsssssssrrrolkknqtvxz{}~}|}}}}~~~~~~~~~}|||~~~~~~~~~}vptz~~~~~~}|||{z{{{}~~~~~~~}}|}~~~~{wwz|~~~~~~~~~}~~}}}|{urx{}~~}|zwukx||{|||||}~|{{||}}~{uongelrxz|{uhfq{{yxvw}{z{|~~}}|{{{|}~|||}~~~~~}~~~~~~||~~~{|{y}}{{}~{zyz{{|{z~zzzxvvw|{wtm|vpomm`TF::DHCCFFEDB??@DGIJKKKJLKJNNHECCCBABDBEGHIJJMPQMPVZP:24432248;<?DKYB=>9566767;;;CJIQW_ki`WLA@?::CD@FEFKQZ_fhd_WU[XQR`^W[cc`\\YXXZ^_][XRPMMWcaRU\\[SSYfdjt|ysporhmnjjjiowwvronpnnlplh]gllkjlhfelmnopoooooooonlmmoqqqpppqqqrrrrrstrnmmnoruwyz|}~|{{}}}}}}}~~~~~~~~~}|{|}~~~{x~~~~~~}{{zzyxxz{}~~}}~~~|{|}~{utw|}~~~~~~~}}~~}}}}|{yy{}}~~~~~~~}~}{trt}|{|||||~~}{{{|}~}}|||zwvqompvy|}}ve`nyyxwwz{{{|~~~}|{{|}}||}}}~~~~~~~~~}~~}|}~}||}}||~~zxsw}}~~~|{{{{|||{z~zxwwwvw{}wsm^fadfd^PB=>?FLHGHGFDB@@ACFHIJJIIJHFJLFCBCBBDFIFGIIHFEGNRTPLPG43235634<FD==@XB<>8478:7:ADIRVOP]geVMOJDD@:<DDBJHHKPY[bggaXUZXTS]]VZggb\\YZYYYZZZ\\ZQG@FRXQUa_TR[mmtvxronsxnroihajlrtwvqonmmmphf_ilkkikgggmnnpqpoppopooommnnmnmmmmnopqqrssuwvsqpooqtwxy|}~~~}{z||}}~~~~~~~~}||}~}}v~~~~}|zyyxwwwz{~{|}|}~{rpuz{~~~~~~}}}}~~}}||||||}}}}~~}}}}}|}~~{vuw}~}{|||||~~|z{{|}|{ytrtx{}zwux{|}}}ymhqwwvvy|||||~~~~~}|{|}}}}}~~}}~~~~~}~~~|{{|{{}~}zy{{{zz~{tnv}}}{|}}|}}{}~{ywwxwwxyyvpl_INJORNE@<;?FHKJHGECBAAABCEFHHHHGHFCGIEDDDBCFHJFFGHHHEIMOQQBDA36467976@QK@<<SB<;8474:@IRPVTYRO^cSFGNLHF@<?FDBJHILPVX^dfaYUYYXWYUTV_c`_[XVWZ[UUW[[TMHFHCRlcOSattusnnkjrzoqmmpookmqxzvpllnnmehckkihkjgfimmnpqpopppppppooonnmlkklmnopqssswyxvtrqqrtwwy}}~}|{||~~~~~~~~~}}~~~~~~s~~~~}{zxwwvvwz{}}~~~xlktyz}~~~~~}}}}}}}~}}||||}}}}}}~}|||||{||}{yxwxwwy|{{|}~}zzzzzyywplpv{|||z{|}|{|~yvyxvuwz}|z~}}~~~~}|||}~~~~~~~}|{{{|}{xwyzxy|}}z{z{~{|||||}}}~{ywvwxxxvusnhbN<DA@?<9:>=?LJGGGDA@?@BBCCDEFFGFFGFDFHFFEEABCDFA=CFIJKKOJGPA:<3:86789;EQQH@@J<9874::FKMRPOEOMR_XJHGJIHF?>DGFCGFJOPTVZbda\\WVXZ]TSSUW\\_`^YVV\\_\\XUWY_ca_YGUn^MYmwusoilkerwrjfq|ugmrzyqllmmkgihjifgmgcdmjkloponopppqpqpppoonmkkklnnpqrssxzyxvusssuwxy|}~~~~|}}}}~~~~~~~~~~~~~~~p~~}{zxvvvwx{|}|}}~~~~~|tjirwz{{{~~~}}|}}}}}~}}|}|||}}~~~}}{{{{{{|}}|ywwyxyy{{{|}~~{zzxtrssrqsvwx{{|||{vsv{|}~xvwy{|}~}{{y~||}~}}}}~~~~}|||}{yxyxuw{{{}{v~z}}~zy}~|}~{xvuvwxwspj`\\R<=CA?;9:<DC>IGEDC@????ACDEDDDDEEEEFEFGGGFFAA@@BA;@DHKNOJF>B@684<<6579?GHMKI>B<7765=EOHAGGIDDHS`NGOFFGGG>AGIHDDALSQSUV]bdeZTWX`RRSVVZ[^]\\\\Z\\aaa```^en`[aiaVQ]syurolkjt|xuiq|sjouyyrnmlkkkjjigegmf^`ogffkonmlooopoqpqqqplnmilinmopqrswyyyxwuuuvxyzz{}~~{{|~~~~~~~~~}}}rx~~~}}~|{wvuvwy{}~~}{xx{}~~~}{wqgkqtxsx|~~}|{y||z|{}}}{||}}}}|}}~}}}}{||}~}{wwx|}{z{{{|}~}|{zvlejmuz{ywvz|}{{xphfhrz|{yz{{{{||zyy}}}~~}}}}~~~~~~~}{zz{zxwyy{~{t{zx{{{|}~ywx{xy~}|ywutvxxupg[PLF;==9:89;<AEAEB@??>?@??ADFFDDCBCDDEFFEFGEEGD@><>?<?CGJKLGA:5:533<<7458=C>CFG=?;7998>IN>5<?DC@FT^JFRGGFGIAEKLJHE@MUSTVTXahj`VTU_QSTWWXYXY\\]_abbcb_\\VXek\\`n`USavxrmknjhsxqxznuvvmqptrrrolijkflhechkecYleabfkkigkmnpmpppppokmjhjgllmnpprvxxxyywvvwy{{yy|~~~}||~~|zz~|~}w{}|zwvvvvxz|~~~~}xrty{}~}}{|uehoiajt{~~}{z{}|zyxwvuwy|}}~}|}~~~~~|}}~~{xxz~~{{{||}~}|zzui`alv~}{{yy{}vkfnw}}|{{zzzzzzzy~}~~~}}}~~~~~}||}}|xyzz}{z{xpx||~zwwyvx|{zxvutvxxreVJ@><:;84::===>DCA=<=>?ACA@BDGFCCBABDEFGFDEFBBEE@:8:<;<?ACDDF>6165347986369>8<?>=<;79:;>AD948<AA@GR[LFPIMKIMEJOMLKJDNTVVTRWbkldYQS[QTWZYYWUW[]aa]\\[ZZXVOUoidn`WScvxqickjmrvtktwyplmnnrspkgjjdnhc^hfdiWlfa`chgfdfkmolnnnnkihi`ehekjjlnnptvwxyyyxxxz{{zz|}~~~~y~~{z}zz~vz~~~|{zxxxwvvy{}~~}|ytpsxy{}~~}|{zzzrto_Xgs{~~|zzwuy{utqoqtx{}}~}|}~~~~~}}~~|{z{}~||||}}}~zvxvohjnw~~}}yvstvx{zv{}z{|}|zzyyyyz{|}~~~}}~~~|||{|{yu{}{xwyvvyxwvvuuwzufRC<8787886<>@A@;@@<::=>ADDBACEHFBBBACEGGFFDDDA?@B?96677899:;:<94344433466567848@;::989:;<=?85;===@IQYPIMLQNLQMPSQLNOHOSXWRQWahibWOPVPVY[ZYUPX]_d`[[XVX^a^\\knib][Tduxob`gkompqmp~~ux{vqslojijhcqg`Weba`[lg^^`cca``fkniiihgcbce\\becihijlmortuwxyzyyyzz{{{{|}~~~{{uz~yz~~~~~}{zzyz{ysty{|}|vtpqsvxz{}}|{yxwwzyxh]clwz}}z{}{piklnquxz{{|}}|||}||{|}}}}|}|{{{{}}}}|}}}|~~sox}zurnrz~~~~zm`eu{zwzxstxzzzzzzyz{|}~}}~~}~~~~}}{~|}~~{xvuuuuvvuuurplVD966887678:=?@BA;=>;9;>BDEDBCFGGEBABBDGGGFDCCA?=<<;85445566787753455531256555635>;8899999;:975:>::@HQXSLJQROOUTRWVJOUPQRWVPQW`di`WQOTPXY[[ZURWZ^c_\\\\ZXYZ_ehhif[ZZTcuwn_^fkntinrvz{xjmliifapfaXbd]L_ie]\\^a^b_`dikfce_][[c_[_aaiggikmnprtvxxyyyzzzz{{{{||||~~~~~{}}yz~}x~~}{z{{{|}zqry{|}~|shlquwyz{||zxwusqquviajvyy|yyvnmmnpu{|||}}|{{xvuwy|}||||{{z{{{{}}}}}|{}}qry~xomr}}~~vkhir{{{zyxyzz{zzz{||}~}}}~~}~z}}ywutssuvvvurkVI;656689888<=?@@CB;:<::=BFGFDBEJLJEBBCDEIIGDA@@=<;97654223345455444577640013565424:;7899986756778;79>DQZSMHUUMOTSV[ZKPYXYWWURSX_di_XWUWSX[\\[ZUTVUV^[^cca]XZciedbWVUS`swl\\]eikj^lwz|~zvilpjgd`caddX[bQ_fb[YZ]Tgbeed`[Z`WTVWa\\YZ^afefhklmnoqstuvwxyyyyzzz{{{{{|}~~}}~~{z|~ytyz}~|zz}}~{qry{{|}~~~}{qlpuxxz{||zxurpnkirufhx|z~zy}~rpuwwwy|}||||||}|ysorux{||{{zzyzzzzz|||{{ywuuxyxy{}yyzxpegu}~{tkny~|zyxy{|}||{||}}}}}}~~{{|~}|{zwutsstyzwtn_L<4477789;:;<@BB>?A@;;=<=@EHHECAENQMHCCFFFIIJD@=;98875335443446457544799761.-03775337:79:::9552367788:9=OXNLJWXMORRVZ^WU][\\\\[XSRW^`cg_[VYUZ\\][ZWVUQPUV[[cfb\\X`ffdbZXRS^rxjY[cfd^\\r{{vzvs~ommjgifebcdTO\\\\_dc_UZ_M^Ydj[WTVZNMTU_ZXW\\dccfiklmmmmnnpstuvvwwxxxyyyyyz{}}~}}~~~~~yz}zz||vt}~}}|}~|tw}}||}}~~|pjkqxyxvuwwwurnjjkjtzkr}wx}zxzzvwywvxz{zy{}}}}|qjt{~~}||{zzzzzyyz|zwuurmjsxyy|ztx{}vbZfvyz~}xyvv{}|{{zz{|}}|{{{{}}}}|}~~~~}~|~~~{wwtsrrsty|rhbXD742269:9;>?AACFF>>>>;>>=@DHJHECAEORNJEDHGEFHJE@;7556643356655554577668=<8720.04896444669<<;;651357788<67KTIJKXZRRUUVXcdce``^\\VRQV]baki^Y[V[]^[Z\\ZSNMNQ\\V]e_WUafdcb^[TQ[qxl^_beb\\d|uszoz{oljjsmjc_[UTXd[cgiTivZNM]hXXWVUFJTU_]XV]fadfhlmnmmlkkloqrssttuvvvvvvwxy{|~~~~~~~~~~~~}w{ww|yw{|{|~|~|yonqwz|||||{nms{zxxndlorurgekps|x{wrpxvutw{{wonty{zxz|}}~~rl{}}||{z{||{zz|vmmomgjw~{z}xtvx{xgZ^pwutnin|}|{||{{{|}}}{{zy~}~~~}}}}~~~~}|~zy~{wtttrqrsx~wUFB;744568:;<<?CFHFGG?>>><@@=BHKKHFECFPSOMFDHGEEEDD@;64456544666777778:;;89AA977.914;:6666776@>:<723454777<78ELHHLX\\ZXXYZ]bc`_bbZSQPPTZ_`aaac]XZ\\^[[^\\SOMOQ\\VWdhWRY`_aa_\\UQXpzocacedejrzrry~{{vpyljgjwibgb`S[X\\]YUfa}yZjnnfWZ[XJBNUVa_YW_chefhlmonmlkjklmoppqrrsttssstvwy{~~~~~~}}|}}}}~}~|v}}}~~{}z~{~~~{qc[Yav|uncfrnpquwvytdlos~oZgty|}xqhjsy{{{}|tihry{zyz||~||~}}}|{{{||}{{|tgbdc`kx~|ujqwxwxz|wjervpmkn~wy}}||}~~~|{zy~}~~~}}|}~~~~~~}|}|~~|{zttuxsrsrmi^B620259::<=??@ACHMJHF@@A@>CC@EMOMKHHFHRWRNIEFFFEC?@=:6445776567789:;;;<<=;9BE95;<9=1=?9658997??=?956743665:79?DDELU[^^]\\]\\]^\\[`c\\RPONQSSRRU^kj]U_`[\\`\\TPTLKXZT^j\\OPXZ^__^XRWo}thefhlmomtvtz{wx||inle[hqaYca`T[VP^TCURhfVvve[^\\U?FVPO^b][bfkggimnpomlkllkkklmnoopqqpppqsux{}~~}}}}|{{zzzyz}~~||}{~{zo}zo`\\fpspd^hvpvqmpnjrtyy{}odu}}~~xrjfs}|{|~|vlmu{||{{||~~}|||||{{||||{sid`bnz{{zns||yyyxzvtqfdfiv~{urw~}|zxw{|}|{zy~}}~~}||}~~~~~~zy~~zx}{~{tuvwwtrkWG@510247;=>>@BBBDFGKLHD@BDD?EEBFMNLKJJIJSZTMKEBDECA;:99655688877789:<=>=<;;:9@A63;D<>28A=579:;:BFDNA95852664:88;>@BJRW[aa^\\\\]`\\[`b^UPNPRPONNRVevlYb`\\]_[TSVJFT]XVa[QNSW]cc]WUZn}wjegjptsjmirxsxtrffc\\Zfhc\\_WY`XSQ\\YOUUg|w^_accbTL@QVDK^e^_finiijnnonmmlmllkkkkllmmnmmmmoqtvz}~}}}||{zyxxwwwy}{|~|}}y~}}}}wpqurvc]``eh^blvuuvpqjfy~~}|xs|||}~|zvt{}}|}}}zvw{~}}{{||}~}|||}}}|}}}|rmnv{{}|~}zyxywvsgemkgsyz|~zwvz}|zvrotutwxxx~}~}|||||}}~~~|xxzx}~}|xtuwy~}q[F8333478:=ACABFEBEIJHIG@?CJG@FFBCGIJKJJLLRXSLID@??=;76787557:;9868889;<=<:8778<;43:>A:64<>99;:;?NPFPB=8;62675<779:==GSRX\\a__^`b^Z^`ZRMOW\\[^beaZ[txfb_]`a[VY[KEV_\\SV]SQUW^hibYVYl{wjfgktwriijrrlqw|xoyxqf_bfbddk`]Z[`TMUdbuosz}Y\\mleaIHJWP>Nbf[dhlqlkkpnnlllmnmllkkkkkllmlkkkmqrtx|}}~}}|zyxwvutrtxy|z{~}ywvz~zrzxi^UTTUYhx|wzyxsu|}||{}xxxy|}}~~~}}}}}}}||}~~}||||}~~}|||}~~{{|~~}~~|zywtquvpyyolw{{|~~}yywwwuokikihptuv~~~}||||||}~~~{wx|xxz|}~~zvtuwx{t_F;532479;;=CEBBGFCFKLGGF?>CMJBCA??BCHMLKMMNOMGB?=;97555777657;;996778889887455554549<A984:;97<==HYX@IA=8;73688>988:::ETQVY___^_a`Y[^VPOTcdciqun_Xkytd_^aaYW[^MMX^\\TO]USVX`hme[YYj{xkghlrumigkqhjlurvtjafngfgfcab^Y[XZTKWim~~ma_clca`DETWKBJZhZiimnmlkpmllllmnmlkkkkkkkklkkkknqrsvz|}}~}{zyxvutrqrtvy|{|{wunp~yv~~~~zm^][Z`n|~|{{{{{{|xvy{yuuwz}~}~~}~~}}}}}}}}~}}}}}~~~}}}}~|}|y{~}}{zvtqqpszvux{{|}||wvnmrsqlhedglpstt~}~}|{{|||}~{yz~}}xxy{|utuuvvugO;43447:<>=>FJFDHHCFKNECGA?DMJA<:<=@BELOMLLIE@;889876556798766;<88767655655533458798<::9:97444?JOS\\T9A?;6<859:;A:9:;84BZUSSZ[\\\\]`aYWYSQU^egknlj_UScw{ja_c^WZZbUW_[ZZP_\\WZ^cgllb^Yjzxlgilmlpwmnqtkilpvkb`ifbbdca]]]\\b\\RTPVhprqh\\tvr`]^MUXPBDE_][gjnnmlkolkkkllmllllmllkkkklmmnoppqswy{}~}|{zywutrppqrtx}}}}{zu~qoy}}|~~xmnkhkv~}}}}|ytpr|ysru}~||}~~~}}}~~~}~~~~~~~~}}}}~~~}{z{|}~}|wtqppv}yy{|}}|{yvn`_jlmjdaahorrqq~~~}|{{|||}~~{zz~}y}~{{|}~wvwxxtqkT>63357:;=@@?EKIFIHDFKNDAFBACFA=:9<?BEFIKJHFB=854578898888887668:7875443343466<DIMPLB?;88<>:68>N\\\\VRM:CF>:99:<>?C=:;<85?Z]OQVUWZ\\^_ZUUQT^egnqkhe]SM[r}ticf\\Y\\XbY_a[Y]PYb`]bfbfohd[jzyoijkkfsm`plo{mwcedffaa_\\gh`]aclfRRVagaQgmrta~viU`[XdWE:CHaPYdgkkjimlkkmmllllmmnnmmllllmoqrrqoopsvy|~}}|{ywvtrpooprtx~~~~|yq}z}~v}{|{xy|~~~~~~~}{yslqrqrt{~{yz|~~}|}}~~~~~}}~~~~~~~~xwxy|}~|wutttw{xxyz|}|{xm]Yfpnnmfbahmnnop~}~}|{||||~~|{{~}z{|~~~}~~{{|zwsfWC556589=<=BC?CKJHIHGHKKB?CA@?=::;;>ADECBBA?><975468:;<;:88878789:77743223347>EQWZ\\WRHB;;:;@@AIS\\aXKEGAAF;869=@BDG?;<=89>W]NMTRUZ[^]XSSU\\dhjrrlifbYNTizztgdZ\\^Y`^a_ZZ]TUadaddbfnli\\iyzpjjkigouebmexjedeed]be_Vkg`ZSXdd]Z`zw^eioz|i~nVIWJLUW;6DQUNSfcegggmiklpnmllmnooonnmllmnqtvvvrqprswz|}}|{zxvsqpnmnpru{{~y{~|t|{~u~xzy{x~}||}}~~~~vf^hqsv{~|yuty}~~}|{{}}}~~~}}~~~~~}}}ypuvwyz{{ywwxwwwutsuy}}{vlcktrpppnlkmnonmo}}~~}|||||}~~}|||}~~~}{|~{{~}~{yyoiiXE;::98:;@=<BC?AJJIHHIHJHA=??><::;=>?@A>;999888776679;<=<987888:;=<976322547<CKRWTPWSMJA:;;:AGPTVVTH@=CC?G=88:=CEHIA<@A<7BLUPKSRUZ[]]VSU\\hjgnqoljggaSM^v}wligfa\\_gb]Y[]Z[`ddfeeinom]iwzqkjjijljddddmnccb_[VRbdZOhkdd^VZ^[\\iv^}usOTNTSUV9:IPINXm\\^fbilfknqnmlmnnooooonmlmnpuy{|xutsrrw}}}|{zxvsqonmmnprv{z|qyrz|ys~}|}}{zz{|}~~~{j_eqxxx{|xtpsx|~}xvy~~{z~~~}|}}~~~~}~~|wuuuuvwxyyyyxwuspkhnv}~zwqnnhfortwwvtrponp}}~~~}}||||}}{zzzz{|}}~~~~|{~}|{{|paVTN=9@?=<<=C?>CD@?ILKIIKHHE><=<;::;=?@@?<8545667888889:;;<;7679:;>?BA;77535:=DKJHLRPNTNFD>9<>8GPPID>>=9:ACDI?<<;@FIJKE@EE>9HKJTNQUW[Z[\\TT\\fkefqonnmkkhZNVl{xlgjklgajaZX]`^^aegghhkmrrajxzqlllkkkgcb`afeeecbcZXc`TKTd^bdaVZ]\\hjgbu||qrXZGZQ^W9ANIKKbkVZdcgifnqpmllnooppppponmmnpsvy|}zywusv}||||{xvsqponnnoqtw|~~z|~}yux~~~}{zz{||}~~~wimuy|{|}{vrosx{wsqpptxwuy~~~}||}}~~~~~~~zwwvvuuvwxyzyvrnmkjmtz|{{{tnkcfrwyxxxvutrtu}}~~~}}}}||~}{yxxxy{{||~}}{y~~{y|}{~}zn]QDCB@?AABA>>DA@DEAAJMLJJLGFB::<;;:;<>@A@=85434579:::::;;;:97558;??BCED>:<<<?EDJQMKMLNMQI@>==;ADLOAB@:9::<@DGKAEA@CIKILGEKG=;JLJRTNRV[[YXW^fhjgiooooomnleTQaxtfdfmojqfYX_baadfhiijkotuelwxqonnljhgdd`adeihgij_^_ZRKBNPQT\\MOfgvj_nliq{thr^PCRIgQ=HLDNGjdR\\abgfjqrolklopppqqqponmmnopstx|~~{yux}}}}|ywtrqpoonnpruy~|~}||{{~~~~~zz~~}{z{|||}}}~zr{~}~~~~~~{vspswxmdfgg_]hlt|}~~~~~~}}}}}}~~~~}~~|{yyxvwwxyzyxtmhgikr{|usvx{{|zvuvvvvwy{}}~~~~~}}}}}|~~|yxxxxzyzz|~~}{~~~|}}{zzz}~}{~~~{oh\\KA9:>DIABDCAAECBFGDELPOKJICA<67:;;<=>@A@>:6444568:;;;;;<;:8657:=AEHIJJJGDDDDEHIMMLHGGJHJF?=ADBCKMB=AA=:==>AFHLCLIGGKKCLHIOF;?FJRNVMNQY\\XS\\hlqtojnlpppppnl[QXn}}truwxuzsdX`eccdfhjkkmostgowxrqqrjhhhfe_^degffge`ZUVVQGFQU``UOT`{ycvn`fuht|qWGIHiGAMJKKMh\\Ucc^keosrnlkmooppqqqponnnooopqty||{yw{~}|}|{xvtsrqqoooqtv{~{tpptuuuuttsrrrvz{}~}|{y~z{}}|~||}~~}}}}~~{~}}~~|||{zywwxyypggfh`\\]clv{}}}~~~~~~~~~}|||}~}|}}~~{{zywz|zyyxyyyyzyxtmgfgggpuutsmkoux||zsnquvvwy{|}}~~~~~~~}}}}}|}~~~~~|zyxwxyyzz{}~}|}~~~}w}|{|z}}}~}xx}~mVLI@97;=DDBBCCBCDBCHIGHNRQLHF?:757:;=?@ABC@<87654578:;;;;:;;697AFILORUUTTSROJEDEHHJKKFFFECDE@>CJGAIL@?@@>:>>?BGJMIPPNJKJBMHJOF=AFHTOUMLOSXVUant|zpimkqpooonnbST_u~zwsrtr{sabefffgilnkkmsriqwwtqpogpkhgf^Zdefed^ac[NRWTGCPWb_\\[ZXmpokxwfhqfszxXOGTc>FNMRL]fR[gefdeqtqmmlmnoopqqqpoonnoonopsuuuwwx|}|||}|zxvusrqppprsux{{mhkllmnnopnmnrrrtvvvvvutssx}xy|~~}}}}}}}}~~}yy{zzyyzytrqlijhbbiikty|||}~~~~}}}~~}}|{|}~~}||}~xxumipwzzzzz{zzzyxvuqkhgmrqhabdimmswzxrdgquutvyz{}}~~~~~~~}}}}}}~~~{z}}|zyxxxyyyyz{|}~~}{z{~~~~uyy|}vy}nXB88769=@DEDCBDFECBELMJJPTSKFB;7568;>@BDDEEA;8997678:;;:9879<DIWY]\\[\\]][YWTPMF??ABDDILGGEB<>DBAEKG@DHBBAAA=@?BEHJNMVVQLJIBMIINDEFGCUUPKLMOQSWdqwyvlfliqpoponmgXQXl~~la]`jhvxkfgijjjjmnkijqqnuxxvpmkgnmjjg[Vehhfc`heUOPUXF=MYYLSNLJ`gmb`dbcg\\oipRTI[\\?KOSUUgbUclgg`gstqonmnmmnnopqppoooooopqrrrqsuz}xwxz|}}{yvtsrqqrstvxy~xolllmnorsrqrsqnnmnnpponmnrw~}qw~~~~~}~~}}~~|xvxxyyz{uhjsrookfipqotwz{|}}}~~}}~~~}}|{|}~~~}}|{{|{rfabcfnx{{|}}}|{zzxogfomjqzvh_]bhkknstob\\eouuqsvxy}}~~~~~~~}}}}}}}~{y||}|zyxxyzzyz{|}}~}{zy|}}}~~}}~~~|w|yxy~zvx~~x_IA85679;>@CDCCBEGECCGNOJHMTSIB=9658<?ABEHHGGA:<DI@:9:::86559@LWLW_a`]\\\\[XURNID?;;<>@AFJHFDB;;ABBFID@DFGC?AD???CGHJPQ]\\RJIKGMJHNAHJI@RWHHNPNNQWerwvrmljippopnmlk\\PTbw~eYZ\\gdoutmlmopnkkmljjprquxxvmimkmkggk_ahhjhghmbPROT]NEJUVHUTRPboj^_f_\\e]db_RXQ_VEPSX[\\i_]kolfbkvurpnmmllmmnpqqpppooppqqqqqquwwutstwz}~}yvtsrrrstvwx||ttttuvvvtsstrponmllkkjjkmrxphr~~~~~~~}}~}yy{zzxvx||wuurmiiouxxzz{|}}}}~~}}~~~}}|||}~~~}||{||{qfmg\\`t}~~}|~skmqqvxyqgcgkiflqsk_diirtnortt}~~~~~~~~~}}}}}}~}zz{~|zyyzzzyz{}~~~~|zz{}~}}}}}}~~~}~}}}{suyzx~ywz{|{~wdI4478::;<=?ABCCDGIGDDHNOKHKRQI@:877:>BDEIMLHD?8?S]SA<<974249@EQVJLUZ[YUVVRPKGB>;::9:<>ADGCBA;;>@AEG@@CDH>=BF@?>DIIKRUc\\NGKMJLJIM>JMJ@OYGJQTRPRYgsvwtrpnkoonoplkf\\TTZm}n_`emfjkxywvuusnknnllpstuxyujhmmplcbkcgkjlgikn_LRSZ\\QPP^eZ_\\WOVeypmrfcql\\^dWZ[`QQTW^``hahtunbapxuqonlmlkklnqqqqqpppppqqqqqrtzroqqrtx{|~{xvutttttvwy{~~~zz|zwsrrrponmmkihhhhikmsyyjo}}|~~~}}}~wqu{}|xnlv{yxxxqlpuy}~~}}}}~~~~~~~~}~~~}~~~~}|{{{}~{t|wijz|xmmpqrszzpjnsqhhosplrmiprmklll~~~~~~~~~~~}}}}~~~{z{}~|zyzz{zy{}~~}{{|}~~~}}}}~}}||}~~~xsu|{zy{~saWQF<9:=<;;====?ACDEHLKGFHMPMIJMMIA;:::<@CEGMPJB?=:CORK><;73027AD?FIGDINUSKOROJD@<989:::9:<?ECA>;;=?@CHA?EBG>;CH@<=EKHJRY^W@DONKJIJG@NLJCMWHMSWUSU\\hssrnopololkmpkib`ZTSby{ie_gpmcjtwvtsspnnnmnpssux{yrmmmljfhkdfmnjfhjm\\MY_[[_TSVba`XFBLYgb^`bn{w[Zc\\^``Q\\Y]bdcgdqxuoaeuxuqnmlnnkklnrqqqqqqqqpqqqstuvuroopqrvyz|}}zxwvuuuuvvxz|~|~|wsqonllllkjhffgghjmpu{qs||{{~}}~~}}~~~yvy~{sqvzyy{||yz}}~~~~~~~~~~~~~~~~~~~~~}|{{|}~{yxzy{}}}zxzwklngj{yvw{ylfltuvwtqqqmjcbe~~~~~~~~~~|||~~|zz{||{{}~}}}|}~~~~~~}{{|~{~}~~~|{{zxxxzz{|{wt{xrsstx{}||{{z{}w_E::97:>A?==??>==AEFHJNPLJJLPOJHHFD@=<<<>BEFIOOF;;AIKC;647841059@A<=?>?CGOMCDHGD=9668:;<;::9<CBB@>=>@?BIFAFAD@=DI@>@FMJKSWVL8EPJJIDHFDPJIHLSKTWXXVX^irolimooonjfjpkhdc^XQZrtdXeuqbclsqnosrrppqqqrsux{|wsqojjjlnagpkcjlpgY[af[_kW]Y[`d\\VTZ\\TPHEHXca]Xb_c__V`Y`ddnojvzvpgnywsollkoojkknsqqqqqqrrqqqqtttsqonnnpswxyz{}~~{yxxwwvvvvwxz||y|~yusqomkiiihhfffgghilnpu{{y~~|n~~~~|{}~zxy{{{}~~~}}|{|}~~|{}}ypjkrwxo^d{}xvutmejty{{ywtqola^`~~~~~~~}||}~}}~}}|~}|}~~~|{|}|{{{{{{zzyyxxxyyyxwvvwvuuusrrtttttrsvy{~}|~tljkkklmorsssuxvaH50156:?BA@@A@?>>AFIKLMPONLKOOJEC?>?>==>?CGLLSXI<DV]K853123212468::889;?DIF>=AA?84358;=>>>=;=BCDDBABDCCGKDHBCCADGA@AFLMNQRM?7GJFFIAFHJRJIKMNNYXZZXZajqnZbjimpolbjqmkgb^[SUh}za[ism^`ionlmsvrqqrrsstvx{|{wtpjjlnmcjsl_kgbY[akgXcjSib`iog^^ca]bb[XY]\\a[ade\\_\\^Zbbgtrpzzwsosvtqmklmnnlkknsqqqqrrssrqqrstsqpnmnmpvxxvvwy}~{yyyyyxwwvwwyz}zvvuttrpnljiggggffghhillnqv}~|{{||r~~~~~}|}}~~~~~~}}|||}~~}~~ztqpuwfh~|wqoqoqx{||zxusssd[]~~~~~}|||}}~~}}}~~~yvtutssssssrrttssssttuutsrrrrrrqqppqqppooppllqqnmmmkkkjjjijklmmongJ:322679>BCCDDDBAACGJNNLLMOPNONGA?<<>>?>>>AIQKNVKER`]G641/11112333685777<DGB;;>>=62259<?ABCB@@BDFGEDHKHGJKIHFCDDEFADCDKPQMLE99HFAFIFHJPQNILMKQ]Y[\\YZalrmVbf`komkfnrnlhd`^VS^s~fbmpeZ_imljnrtrqrstuvwwwyyxvtolmmnngkqpfhb[bjdpeWheYfciijcaaa_bda_]]adf_aibafa^bfcjplvyxvrprsrplkmnoollmpsqqqrssssrqqrrsrqonmnmptttqqsvz|zyyyyzzyyxvvwxz}yusssrrpnljjihighijjjlmmnnuz{~~{~~~~~~~~~}}~}}||}~}|}}{w}ywwxy{|}|zwutvwj^]~~~~~~z{|}~~~~}~|zyyzzyxyzzzyusrqppppppqqrrrqqqqrrrrsrrqqqqqqppoooppoooonnmmmmmmllkjiiihhhhiihe_Q>6323679=BDEGFFEFFFHLOOMLKKOQNKD=<<<>@?=<;>FLBAMMHKME:554211011222465666:CG@::<=:8657;?BBDGFEDDFHIGFLPMLMOOIICEEFFCCCEKUJIE?@?AACGIIHNXWOKMMLR`]]]ZY_msn]beainlmlornkhd`^ZSZk}tfuk[WarljkossqqqrsvwxxyvsqommlmnonnlnnniecjialfahdbfblfZ[_c]YUZZ_]\\^ekdchaeic_hhelnowwvsqqrqqommnoppnlnqrqqrsssssrrprrrrpnnmmmnqqpnoqtxzyxxyyyzzyxwvvwy{}|xutssrqomlkkjiiijkkkllklmnsx|{}~{}}~~~~~}}~~}~~~}}|}~{yxxyz{|~|yutwyspn~~~~~|z{}~}~~~~~}yutssrrrqqrrqqpooppppooppppppppqqqqrrrqqqpppppooooooonnmmmlkkkkkkjjjjihhggggggc]SE62335899>DGHJJJIJJJJLNPPLJGKPLF?:;<<=A@=98:=>=EMG?;:864333210012345657748BHA87::::989<ACCFIHGFFHJKJIMSSQQVVMNGEGGFEEEFMQJIBAFA>ADGGIMV]XRNPQPU```_[W[mtqcfdaiilrsolkifc`^]VWeyzom_VYivgimttrqqqppsvwwuqmjhhjlnnllqnhhigfglefihfkfiibiaY\\cd_\\[[V^^_ajoojeeilfdnhglprwyxxutrqppooppqponpsrrrrssttssrqqqqqoonmmllllkkkmqtuuvvwwxz{{zxxxxxz{|}zvtssrpnllllkkjjkkllllllmnrv|{~}~}}~~~}~~}{zyyzz|}yxy|{zz~~~~~~|{|~~~~~~}}}~|{|~~}xusqqppoooooppppoopqqqqqpppppppppqqrrrrqqqqpoooooooooonnmmllkkjjjjjjijihhhhgggfd[RF:21357:;;?FJKMNNMNNMMMNPRPLHGLJB==<=<<>>:77668>>:9:::842123310012357988847AGA96899:;::;@BCFGGFFGIJMNMOTUUPXZQQKBGGHGFHGRONLEKH?@GDDDHU\\\\USRSUUW\\c`a]VYkpnfd`beeoojhggfdb`_\\ZZ`q|vfZXcsrbjoutsrrpooquwvuqmgehlnonlionga`behkgkljjnjpvogiidbaaced[_`cfnqtpifgllimgdouvxxyywurrqqppqqqpooqssrrrsstttsrrqqqqponmmlllljjjknpqrrssuvxz{zyyyyyyz{|}~zvsrqomlllllllllllllmnnmmnpwz|}~~~~~}{zyy{~~~~~~~~}}}}}}~~~~}~|xuuuuutsrqppppooppoooppppoppqqqqqqppppppppqqqqqqqqqqpooooooonnnnmmlllkjjjjjjiiihhhhhhged^PD;412579=??AHMNPQQQQQQPPPQSTPJHJHA>=<<<98767755>G>47:<=:51/2443101237:=<:868AD>96667;==<:=ACEEEEEGJLQRSSTTXPQYVUN@GHKJIJKXRPPKTKAELFCEK\\^XSQSTXWWWc^c`Y\\imjdb_aadnc`_ddca`_][a\\[kzzkabnti^jrutsrrqppqrtuvuqmjlopqponqpjd`_dlokoonorrspejnoh]Z_e`fbcdginorpjggmrnmggqxyvvvvtrosrqppqqqpopqsssrrsstttssrrrrrqponnmmlljjjkmmmnoopqsuwxxwyyzzzzz{|}~yuponlkllmmmmmllllmnooonnnpzyxz~~~~~}||}}~~~~}}~|||||{zzxwvutsssrrrqqqqpoooopppoooopooppppqqqqppppppppqqqqqqqqqqqpppoooonnnnmlkkkkjjjjjjihhhhggggfb[QD8212369;>BDEINPRRSTTTSRRQRTURMOMFDA=:;;73026755?E<57;>>940/2444200259=AA<878AB<97546=@@?:<@CEEEEEGKMSWWXTTZRCTZWP>DKMMLKQXVUQRUOFINIGMY\\\\TSRSTYWYU^\\b^]djlje``\\ceha\\[`aa_^]\\bd_Ydv|mefkidcknsssrrrqprrstppupoppqrrrqqqnifgkpppqrsttspmghkmi``dfcfghhjkmopolkknpnmhlsyyvuuuspmsrqpoqrqppprttsrrstuuttsrsrrsrqppoonnnnnnmkjijknnoprsssvwyzzzzzyz{||ztqmklmnnnnnmmmmlmnopqqpnmouw{|y{}}|}~~}~~||}}{zyyyyxwvutsrrrqqppppoooopoonopppoooooooppppqqqqpppppppppqqrrrrrqqqqpooooooonmlkkjjjjjiijjihhggfeb`^XMB:301148;=@EIHKPSUVVWWVVUTRSUVUQQPMKD;87753//255358548<?=61/0245541026:>CF>659A?899636@A@@<=@DGFEEDEJMUYZXRU[WEV]YTEJPPRQNT[ZXRTXULKOMMV__YQTTUSXX\\X[ZbZahjlmi^\\^bdf]Y\\___^]\\]dc`]_q{leddadhjmqssrrrssvvsqlosooopqssttstrqqsuusrruvuuspollklliebfgjlmllmnonmooooonliqvxwvuvxtqlrrqpoqrqppqsutsrrstuutsssssssrqqqqqpoooonnkiggillmnnoopruwyzyyyzyz{|~~~{vpnnooonnnnnnnnnopqrsrpopqsn}~~~~~~~~~~~~~~~~}}}zwwwvvvuttssrrrqqppoooooooooonoppppppooooppppqqqqppppppppppqqrrrqqqqponnmmmnnnmlkkjjjjjiijjihgffeaXQLG@84311369;=@EJJLRUWWXXXXWVUSTUWVTRPMH@9644332014554368:<>:4//0246642125:>AEB858@>7:;837A@=@>?BEGHGECCGMUYYVRW]]KVZ[YORTQUUQV]]ZTW\\[NJNNV_c`WQWXVSXZ^\\^ZaXahiknl[Y]^ceYY`b`__^]_dafc]m}neb_]hllmqsrpoortwwufmttpnnoprstttvwvvwwvtsstvttrmnonlljgbkolkmopnooopmoqsqonmjrvuusstwurnrrqppqrrqqrtutssstuttttsttttsrrrrrrqpppoonkigfgkkklllmmoruxwvwyyzzz{}~~{vsrqpponnooonnnopqsssrqqqs|kt~~}}}~~~~~~~~~~~~~~~~~}}~}wttutttsssssrrqpppopopooonopooqqrrrqppooopppppqqqppppppppppppqqqppponnmlllmmmmmlkkkjjjjjjiihhgfec[L@:763233459:;<?DILNSWXYZYYYXVUTUVWVURNH@:74222321257:;9<=;;:62001357754224:>>AB;56<;7:;936@><@@BFGGJKFBBFMTXXURW]_SWVZ^XYZWYWUV[][X]a^OIMP\\dd^UQXXTSZ[^\\bZ_Ybffglk[YYZ`cXZcecba___bbif_n}pe`_aknmnprqpprrrttrntrhmopqqsststvwwtqssuttstrqoloopmlmikpoonprtqqstumoqtrnpsoptrrppnproqssrrrssrrsstutttsuttttttssssssrrrstrpprqpolifghkkjjiiklmprtttuwyyzz{|}~~|{zwusqpppppqqonopqrsstsrqrw|ppw~~}}}}~~~~~~~~~~~}}}}~~}~~ytrrssrrrrrrrrqppooooooponnopppqrsssrqppppppooppqppppppppppoonooppponnnmlkklmlllkkjjiiiiiiiihfeedcW<30/0013557:;:<?CHLPUXYZZZYYXVUTUVVUTQJD>964212321259<>>>=;96300124688643249>?>=:669858:957=<<@BFKIFMNGBBGMTXWTRW_^YWUY_[\\\\Z\\ZXTY[W]dcZNLQ\\b``\\UOWURS[[[Zb[]`cdb_ikZ^UX^aY[dgeda```cdig`n}na^`flonoqrqqrsrrtuttwtpppqqqstsstuwwsqrsuutsrrrqppppmmnnoqopqsuusruvumpqtqnqvsqqqnoqomnmsqqqstttsrttutttttttssttssssssssrrrtrpqrrqpmjghjljihhhikmoqqqrtvxyzz{{|}}}~}{xurqpppqrqpnnpqrrsstsrqprv{~~vz~~}}}~~~~~~~~~~~~~}||}~~}zvrpqrrqqqqqrqqppoonnoooppoooppqrstttsrqpppoooooppppppppppppoonnnnnnnnnmlkjjkkllkkjjiiiiiiihhgeeedcZA4/--.148<<<<::>BHLRVZ[\\[ZYXWUUUVUUSROF>:75421233357:=>?>=:74101345777654437?@;876797469857<<=ACJNHFMNHDCHOTVUTT[`^UTXYa_\\^``^[PTYYae`VOPVa`Z[ZUMRRPV[]X]`[]cdegdhk\\_UX[`[Zeeba``abehjgbo{k\\Z`inoonrtqruuutuvvwxvsqpprsstttstuuvuuuvussrsttssrpooppqrrrsuwvtsuwtnpssqnqxytqomopqnkiqlmqtuuttuvuuuuuuttvqstssssssssssrrspoqrsrpmjhjlljhgffhjlnoooprtvxzzz{{|}~~~}{yyvroqssqponoopqqrsssqpoosx|}z~~~}}}~~~~~~~~~~~}}}}}}|{||}~~~{wtqqqqqqpppqqqqpponnnoooopoopqqrstttsrrqpoooooooooopppqqqqppoonnnnmmmmmlkkjjjkkkkjjiihhhhggggfeedeecM90---/49=>:9:<?CIMRWZ\\]\\ZYXVUVWWUSQPKB;755433345568:;<<:9742101357876654435=@:556687346547<=?BCJLGIMNIFGLRVUTTW``YR[^Wc_X`cdc\\MQZ\\ccYQQVZ_ZTW^WPPQW[\\\\Xa^_abbeifkk`]WYZ_]XdaY]^`bdgjkfcoyfXY_jqommuvosuvvvvwxxxwwvtstutttsstvwwwwwvutttvwvtttsrqrrrrrstuwwttvutqrrspppuwsqppolorqqsfgqrttttvvuvvuuuuuuqvqssssssssssrrqopsssspnkjllkigffegilnnnnoqqtwyxzzz{|}~~~|{zzxvrqqqqponnnopprssrpommpw~~z~~}}}}~~~~~~~~~~~~}}||||||{z{{|}~~~{xurqqrrqqqqqqqqqpponnooonnnnnoqrrsttsrrqpoonnoooooooppqqqqqpponnnnmmmmmmlkkjjjkkjjjiihhhggffffeeeeefhU=1---.28<;669=BFKMRWZ\\\\\\ZYWVVWYWRNNMF>9655566688788998865432123469:855655439@=634698434447<>@CFJIILONJHJPWWUTUZa\\TYc]VaYR]ace\\LQZ^d_QPX[YYTRV]XRPS[\\\\\\Z``bda_dddljc\\Z[[`^Va[R[^`abfmmecqvcXYblqnmnuursvwwwwxxxxwwvutuutttssuxxxxxxwvuuvwwwuuvutsssssstuvwwuuttttsssqrsvvrqoqpkmpopuppqqrsttvvvuuuuuuttsuqrtttssssssrrqprttsrpommnmkigfeegiknnmmnonrvvuxyyz{|}}}||{{|{wqqtrqponmnopqqrqpomklrz~{~~}}}}}}~~~~~~~~~~~~~~}|||{zzz{{{zzz{|}~~~zvsqqrrrrrrrrqqqqqqpoooonmlllmnpqrrrrrqpoonnnnnooooooppqqqqqpponmmmmmmmlllkjjjjkjjiiiiihhgffeeeeeeeeedW>0.--.26:9348=BGKNPTWXXZYUTSSUWUNHHHB=865469;<;:987886544444334469;966666548??733699655458<?ADHIGJNONKILRYXTTY`_[ZZWPZZLO[^`d[PRZ`a_KW^ZWVOX_ZXQVYX[_\\\\_`ee^]cfghfc[_\\\\b^W\\XR[^ad\\fplddrkaX\\dmompqtttuvvwwyyyyxwwvuuututtttvxxyxxxxwvvvwwvvvvvuttttttuvwwwvvtssussrrrsuusqorsommkjmqpppqsstvvvuttttttsstrsttssrrrrrrqqpstssrppooomjigfeegikmmllmmmstprtuwyz{{|||{{{|||zwstrqponnnoppqqpnljkov}||}}}}~~~~~~~~~~~~~~~~~|{zzzyyyz{{zz{{|~zvrqqrsssssssrqqqqqppooonlkkkllnpqqpppoonnnnnnnnooooopqqqqqpponmmmmlllllllkkjjijjiiiiiihggffeddeeeefb\\N90.../2698237=BGJLLNOONTUNLNNPRNHCBB>;86546<BB?>=:8775578877777679=<87677767=@8336:;976568<?BEIHFKOOOLKPT\\\\UY_^^[QPTT_TLLY[^c[SU]e^WM\\bYUVL]dZZV[[WY_^^^bgc\\[aefcaa^d]^e_XYVS[_bd]ing`isc[Z`fknptvxxxyxxxxz{zzyxxwvvvuuutttvwxyyxxxxwwvwwvvvvvvuuvvvvwxxxwwwuttvusrrstsssropurokijnqpoprstuvwvvutsttuuutstttsrrrrrrrrrrtsssrpqponlihffeegiklkkkllkpqnopqtvwxz{{{{{||~}xvtrqpoooooopoomllmnos~{y~~}|}}}}~~~~~~~~~~~~~~~~~~}{zyyyyzzz{{z{||}~yurqrrssssssrqqqqqppoonmlkkkkklmoponnnnnmmmmnmnnnnoooppqqqqponmllllkjjjkllkkjiijiiijiihgggffeddddeee\\N=3//0014798325;@CDEEEEEBINGBEGHIFB?=<;:98766?GGCB@=:98658<><:::;9779:886666669;74359;:87678<?AEIHFJOOONOT\\aZPV\\Z]_W_``aYKR^_`c[UX]c]UQ]aZWRIX_\\`\\__YZ^^_^cha[Z^deb\\\\bg^_hb[YWU]`facljb^oqb_^chlqty{}~}}zyxxz{{zzyyxwwvvuuuuuuwxxxyyyyxwvwwvvuuvvuvvwwxxxyyxxxwwvwvutssrrqttpmsqolklnklnrtuttuvwvvuutuvvuutttsrrqrrrrrsssutsrqqrqpnkihfeefhijkjijjjkmmmmnoqrsuxzzz{||}}}ywtqpppoonnnnmmmnnmmnqx~~}}}~~~~~}}}}}}}}}}~~~~~~}|{yxxy{||||{{||}~~|vrqqrrqqppppppopqpponmlkkkkkkklmmnmlllllmmmmmmnnnnnoooppqqponmllkkkkkkkkkkjjijiihhhihhggggffedddddb_R>001111258974348:;<===<;:@GB=ADEEB?=;:::::;96?KKGDB?<;9769>CB>;>@<7544477655566654358::87778<?@FIIFJORSQU[_^XV[\\]ea_bbfaXT[a_a`\\Y\\\\\\_ZT]a\\[SHRVZb`ca[[]^a_afa\\WYbhe\\Xbj_aif_[[Y^_fbcjf^amkhfdgkmprw}|{{{|||{zzzyxwwvvvvuuvvwwxxyyzyxwwwvwvuuvuvwwwxxxyyxxxxxwwvwvusrqqsromqqnpsrrnoptvuussuvwvvvuvwwwvttsrqqqrrrsttttutsqpqqqpnljhfegfiiiihijjjjkllkmooopquxxxz{{|}{}~}}zvsqpppponmmmnpoonnnkjow~~~~~~~~~~~~~~~~}||||}||||}~~~~~}|{zyxz{|}}}||||}~~~yupqqqqpoonnoonopppoomlkjjjkmmlllmmlkkkkklllmmnnnnnnnnooppponmllkkkkkjjjkjjiiiiihghhhhggggffeedddcb\\N?515642234787423588858:964:DA<@DDC@><;<<;;<?=8=JLHHFC@>:76;?BFB=ADA93311666544663334579987777<??FJKHJPUVTZa_]WX]]^_`\\[aaXX`cb]a`\\`g\\[ZXW]b`^TLWVVa`ed[\\]_d``ad^UR^gg_U`l^agld[`\\X\\feehe`fmpmljjnsstx}}}|}}|{zyyyxxwvvvvuuuuvwwxyyyxxxwwwwvvuuuvwwwxwxyyxxxxyxvwwwusqppqpomqqorvuspqrtwvusrtvwwwvvwwwwwusqpopqrrsstuututrqppqpomlkheegfjhhghijjjhlmikmnnnmnqttuxyzz{{||}|{yvtppqqpnmmnopqponmlllnt{~}}}~}}}}~~~~~~~~}{{{{{{{z{|}~~~~}||{zyyz||~~~}}}}~~|{}}}~wrnopponmmmmmmmnooooonlkjkklnnmmllkjihhijkllmnnnnnnnmmmnooonmlllkkjjjjjjjihhhhiiggffggffffffeddddb`T=313:<93345675322354347;<84;C@;>BB?=;;<>?>>@CB;<GJGJKHEB=98>@>DE?<?F=1542334432441134578876676:=?FKLJKRXYW]a^\\Y\\`c`^_]X]V[cca_Z``Yah\\\\YXY^ddaVQ[W[`_hb[]_`hc^af_UQ[ehbW`naadlg^c\\QZhhiigdlpqnmmnszzz|~~}|{yyyyyxwvvvuuuuuvwwxxxxwwwwwwvvuuuvvvvvvwxxxxxwyxvxxywtqqpoommqrqrvusqqsvxwvtstuvwwvvwxyywutqpopqrssuvuuttssqpppponmkhedifkhfehjjjjhkkijmonmllnpqsvwwwwwxy{|}|{vrpssqonmnoqqqpomllkklosz}~}|||}~}|||}}}}}}}}~~~~~}{{{{{{zz{{|}~}}||{zzyz{|}~~~~}~~~~}{{}~}zrommnnnmllllmmmnoooooonmlllmnnnmllkjihgijkllmnnnnnnnmllmmnnmlllkkkjjjjjjjihghhiiggffffeeeffedddcb`WH7005<>:5478884212465447<?<7<@;8:=<<;:;=CEDDFHF@>EFELPMJFA?><AB<?>97<D>:;843322232/1345678755756<@FKMLMSYZW[`^\\\\`chgfhe[XT]aadb\\b`W^fY[[[\\_fieXR]Z`bbca\\\\bbke`be\\VTZbiaZbmdaaig`cXL\\jkkkhiqojiilrx}~~~{yyyyyyxwvvuuuttuvvwwwvvvvvwwwwvvvuuuuttuwwwwwwxwuwwxvsrrqomllpqpoqrpnnruwwvttuuvvvvvwxyyxutrpppqrttvvuuttttrqpponlkkhfdifkheehjjiijjjjknnlllklmnqsssssstvyz|}}yusttronnnopqppomllkkjjnrvyyxwwwxyz{{}}~~~}||||||||||||}~~~~}{{{{zzzz{{{|}|||{zzzz{||}}~~}~~}zxvvvuuz~xtpmmmkkkklllmmmnopqppppponmlllmnmllkjihgghjklmnooooonmllllmmmllkkkjjjjjiiihggfgghhffeeeedddeeedddcaYF::216::859=<=:4102587658<@?778556789:=AFKPQQSSOJGFCDMRPNKD?A?AE=9??><GH;=<53212331/0345666544656=BHJLNNRXYX[^]^`dedbeh`W[\\]]bcb_b^U]eV[]_^^ekgXR]^aeg\\d^\\eemgafdZXXXajb]clfc`edabWN^ilmkjknhegipuz~{yyyyyyxxwvuuutttuvvvuuuvwxxyyxwwwvutttttuuvvvvwvuuvvusrponmlmoonjmnnklpstuuuuuuuvvvvwwxxxvtrqqqqrtstuttuuvutrqonljjihgfigjgdehjjiijklklnmlklkklmopppoooqsvxyz|{zyvtrpoonoppppomllllkjloswxxxxxwwvvvwwwvvwxz}~~}||||||{{{{{{|}~~~~~~}|{{zzzzz{{{||||{zzzzz{|}}}}}}~~~xutsssrqr}~~}sonnmmkjkklmnoppoppqqqqqqpnlllllmlllkjihgghijklmnopponmlllllllkkkjjjjjjiiihhghhggffeeeedddcddeddcc`YM>437605776?CAB<411489:999<>?50234437=BGMRX]abccb_ZPFFMRPNPNE>?@><;>GLDBB;;;52013552/0345666533458>CIIKONQWXY[]^^aeb_geb`]_`Y`dZ]gcUYdf\\_bd]\\cmeWU^`_fddda]efnf`ic[YZV_jeaclhbabccb[Y_fklkjlcf_gnux}{yyyyyyyxxvvutttuvwwwwwwxxzz{{zyyxwwvvvvvvwwwwxxxwvtsrqomllmmmnnljlllijnqrssuuvuuuuvvvwvwvvutsqqpqrsssttuvwvuspnljiiihhghhifdehiiiijlmllmlkkkjjklmmmmllmoqtvvxy{~}yvsqppooppqponmmmlkjlnrvxxxxwwvwwwwwwwwwwwvvwx{~|yyyzyz|~~|||~~}~~}|}}}|||||||||}~~~~~~~~||||{{zz{{{{||{{zzzzz{|}}}}}}}~~~~~~~xtsrqqpoq}|z|}|||~~zsommoonlkkklnnopppqrrqqqqpomkjjkllllkjihhgggijjklnooonnmlllkkjjjjjjiijjiiihhggggfffeededdccccdddcb_VNB6/28:1468:CGEE>5347:<=====;<4023345@NWXY\\afijigggfd^VSVSLPRMFCCA>>@GUPAA<;>86413773/045666643237;@FJGJOLOVXZ\\]]][^]]abgd`_^]ce\\^g`V_hg`YZh^Yam]VZbcc^befd_gfhdch`\\Y\\U]jheclhedcced`_`dgijjg[`lrtu~}{zyyyyyyxwvuttuvwyyyyyyzz|||||{{zyyxxxxxxyyyyzzzyxvsqqolklmnnnmlllkkhilopqqtuvuuuuvvuutuuvvutrqppqqrrtuwxwwuspolihhhhhhghgfefhiiijknnmllllkjjjjkllkkjklnprsstvz~{xusqqppppqqqpnmmmlkklpuwwxxwwwwvvvvvvvvuutsttuvvutuvvwwxwwwwvuuuvvwxyz{}}z|~~}~}}}~~~~~~~~~~~~~~~~~~~~~}}}~}}|{|{{{{{{{zzzzz{||}}}}}}}}}}}||||}zusqqrxwrx}}~~}|zyxxyzyz|~~}{z{}~|ymnnmnooonmlllmmnnnoopoonnmmlkjiijkjjjjjihhggghijjklmmnnmllkkjiiiijjiiiiiihhhghgghffeedddccbbbccddb^VH>60.16;567<@HIEB;558;=>@BBB@>>500017FVbgdbdhhjkhfcbdfghgbZSQSUPHDCA?ADPL>C?:?=>=33784/157666643459=CHKGJPMOVYZZ[__\\__`\\afdaa``aa_`fa]hkfaZcodVec[Y`dei\\]cde`ec_^fc]\\V^V[ikfbkghfbeggec_`cekleVe{uss|zzyxyyyxwvuuuvxy{||||||||}}}||||{{zzzz{{{{{{{{{{zxvtsqnkklmmmkklllkiiknpoortttuuvuuutttttuuurqopqqqqsuwwvvttroljhghhhhghgffghiiijknommlkkjiiijjkkkkkklmopqqqsw}}zxusrqqppqrrrpnnnmlklnqtvvwwwwwvvvvvvvuuuttuutuuuuvvvvvvvuuttsrssstuuuuvvsuvuw|~{yxxwy{~~~~}}|||{{{{zzzzzz{{{{{{|||||{{zyyyz{trrxxv{}~~}}~~}||{zzyyxxwvuuuvvvvwwwvutuwy{~}zxtpkjnmnopppponmlllklllllkjjjkkkkjiiijiihiiihhhhhiijjjkllmmllkkjiihhijjiiiiihhhhgggggfedcccbba```abbc_RE:31/-/39:9:@FLID=747<?@ADGHHECA81//8J_jnjgiiedeb^\\YWW\\cgijif_[]YPIFD?<?LQFEB:>?DE748:5027865665467:?DJLIKQQPVZYXY^`_a`d_a`abca`]]adgfemjec]lf_[`_^]dcbhcV[`d^b_XXc`[YT_YZgkfajehhcfgihd\\\\_aioeYrwonu}{zyyyyyxwwuvwxz{}~~~}}}}}}}}}}}}}||||||||||||||||{zxwuqnlllnonnmnnmlklnponprrstuvvvvtssstuuurqppsrqqstuuutttroljjhgigfghhgghhiijklnnmmlkjigghijjjjkkklmnooooptz}||}zwusrqpqrssqppoonnlmortuuvwxwwwwwwvuuutuuuuvvvwwwwwwvwvvvuutsstuvvvvuvuvwvuvvyzxvx~~~~{vutv{}}~~}||{{{zz{zzyzz{|{{zyxwwwx}svvrw~~}|{yxz~|zxwuuutttsssstttstuuutttssrrrsux{~}|||||~{uspnkjjmmnopqqppomlkjjiiijihhhjkllkkjiiiiihhihhiiiijjjjjjkkkkkjjjihhhhijjiiihhhhgggffffedcccbba`````__YN@521///029;<=CINLE<648>ABCGLMNJFB;219Nfmlkhhjf]`_VRQPOLOV[afgfcad\\UKIIA98COKDA:>@CI@68:6237975565689<@EJLLNRRPVZYVV_b^^`gabbbbge`cbcejljlieeik``ab^`bebZcbXZ_a[^_WT`]ZVS^ZYgja`hhfbedehh`WX\\^hmd`pvnmv{zyxyxxxxwwxyz|}~~~~~}}}}||}}}}}}}}}}}}}}}}}}}}}}|||{wuspnmnooooonnnllmooooqrrttuvwvsrrrtuutrroprrpqrrstssssrpljjjgifefhiiiijiijklnnmmmljihhhhiiijkkklmnnnnmorwzx{~|ywusrqpqrrqpppponmlnqrsuvwwxxwwwvvuutttuuuvvvwwvvvvvvwwvvvvuuuuwwwvvvvvvvuuvwvuuvyz{}}}wuvx{|{zz{{{xvvwy{~~}zz{zzz{zzzz{{zyyywwwww{uw}~~~~|zxwutvxz}|zxusrrrrrqqqpqqsssrstttssrppooooqrwzyyxxxwy~{xusqnmlkjihjkmnnopqqpnmkihgfffggfffhjlmllkjiiijhhgghiiiijjjjjjjjiiiihhhhiiiiijiihhhhgggffeedcbbbbbaa`____[SH=4012233469=@AEIQRJ?86;ADEGKQSRLGA739PdhggegidYW_YMLMNNLKORUZ[\\^\\aVUIIKC83=NNGB<?CEJE;9:8337:755667:=?AEIMOPUURX[YUSad\\Y_ibbb^allchgggkmjjihhmk_^bdbdefaZ][[]_\\V[^YS]ZXSTZYWa_X_ibddhbbd`URXXYgc`druopw|{yxxxxxwwxyz|}~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{zxtqpqqrrrppoomllopqpprsssuvwvsrsttttsrmrusqqqqqqqrrssrplkkjgifegikjjjjjjjklmmnonmlllkjjhhijkllmnnnnnmnquxuy}|{zxvsqppqrrrqqqppnmmoprtuvwxxwwvuvuutttuuuuuvvvvvvvvvwwvwwwxxxwxxxxwvvuuuuttttsstttsuvtvxyyz{|{{|}|||}}||{{{|~}|zxwxyzyxwwvvutrqqrtvvuttssrtvx|~}||}|{zyzzyxxxx~{{{}{yz|~}|{xvtsssttsuwyyvtsqpppppqpppopprssssttsrrqpoonnmnosvvutsssrv|||~}{xupmiffhijihhijklllmnnmljihhgffffffeegikllkjihhiihgfgghiiijjkkjjjiihhhhhhhhiiiiiihhggggffedddcba``````_^^^\\SD920234569;=<=BDGIPUOB;9<ADGJNUVSLE<4;M`d^^_agdUMU^UKLOPRRPQQRRROSRTLOKIKD:39KPIC>AGHJG>987547:856677:?BBCIOQRWVQY[YUTbeZV`i`bebfmhcjiddgjhhijili[\\_cdddb_\\ZX_^aYUX\\]QZYWRRUVSXTQ\\g]bfi_`aWNW_Y]bXagvxrqx}zyxxxwwwxyz|}}~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{wutssssrqpponnmopqqqrsrrttttsstttttsssvqlqqqppppqrrsqnjijighfefikjkkkkjjklmnooonllkkjihhijlmmmnnnnnmnqttrvzzz{{zusqqqssrqqqpqpnmmnprstuvwvvvuvuutttuuuuuuuuuuuuvvvvvwwxyxxxxxxxwvvuuuuttssrrstsrsstuuuuuvutstuwxwwvvxwwwxy~}~~}}}}}}|||{{{{{{{{|}}}}~}}}}|{zyyyzzyxwvutrrrssttttssrsssrqqrrrrrrrsuwy{~~~~~~~~~~}|zzzzyzzvvy~}{zxvusrqrrstsrstsrrqpooooopqpppopprssssssrrrqpoonmmnnprrqqponklpprv{|yxvtrpnlkjhghiigfghhhhhhjjiihhhiihhhhgfedefhhiihggghhhggggghhhhijiiihhgggggghghiiihgffedeeeddcbbba`_____^^]\\]]TG9200479:;>BBA?CFHGIPLA::<@CFIMTUPHA99HXUPUX[_`YNNUXRMPSTUUSSSSSQMONIHJOMKG?8:HNIC@DGIGD?:666458745789<@CBCJPTSTYQW\\ZVWddYV_e\\_fcfkeflib`chfhjhgie]_`adda\\][WXab_YX[[^PYXWTSQSOPQOXaZ_cd^a^RSeg[dVXinz{ttx}zxxwwvwxy{|}}~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{yxwusrrrqqqppnnoppqrqppqqrrtssssrrrptppstrqppppqqqqokihjhfhgffgkkkkkkkjklmnopomiggghfghikmnnnnnnnnnoqtqnqvwx{~}ywtrqrsrqqppqqponnnpqrsttuuuuvuutttuuuuuuttsssttttttuvwxwwwxxyxxwvvuvvuttssssttttuuuutttuuuuvvwwwvuuvuuuvwywyzy}}|z{{y}}~~|}{xuw~wxy{{|}~z~}{{|zxxxxxxxxwwvvvvtssrsttttuuvvvvuutrqqqqoonoppopqqrsttttsttssrrrrrrrsvwz|~~~}}}}}~~~}}}}~~}}}}{|||{|~~~~~~uuwwvvxzz|~~}~~}}zwwy{|{{{{ywvtrqpppqrrrrrrqqppoonnnoooopponoprrsssssrrqpoonnmmmnopooonmlkkjihjnopomkijmoqpliijigdccddddefffgghiijjjihgfedddddfggfeefghggfffgffghhgggggfffffgggffeedcbbbccccbaaaa`__^]]]\\\\\\\\[\\VG:1/0169?@@?DBGCEFGGFGD?<:<@CDFHMMHB<<ENMGHPUZ]ZUSVXTQPSVXYWUUUVVSOPPOIIRQIGE@AHMKDBFGHB>?:55633663479;=ABBDJOUSRYQV]\\YZbbZX_aY]ebbeffkkcbgidieaiacail`YffW\\\\WYbb_Z[][_RWWWTTPRNIPVY\\W]bc`]ZQ`lbZfSbqtxywvx}zxwwvvwy{|}~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|{{zwtrqrrrrqqonnooqqqopnoprssrsqpqqpootutrqppppppppnhhhigfggjgeljkkllkkjklmosmiijjjhjfglnnnnnnnonnnpqrolotuvz|||{yuqsttsrpoprrrppnnnoqrrsuuuvvvtttuvvvuutsssrrrrrsstuvwwwwxxwwvwvvvvuuuttttutttuvvwwwvttvuvvvvwwwwwwvvuvwvuuuvvwwwwwvuttssstuvvvuuvwvtrqqttutuuvvvvvvtttsstvwxyyz{}{xusrsssttttttsrrrrrrqqpqrrrrrrqqrrsrrqpqqqqqqqqqpppqrrsssttssssssssrrsvx{}~~~~}}}}}|||}}~~~}|{{|}}}~~~~~}}}~~~}|||||}}}}}}}~yvvusqstttuuutsssrsuxxwvvvwwvwwwvtsrpooooppppqqqppoonnnmmnooppppoppqqrrrrqpponlllllllmmmmlllkjihgfedfhihgfefjmomjfffeb`__```abdddefhjjkkkjihfedcbbcdeeeeddeeefffffefffffffeffeeeeeeeeedcba```````_^^__^^]]]\\\\\\\\[[XPF92/147:>EGDBCHEEFFGGDB@=;<=?@ABBCA>;;?IKFGJPVYYWUX\\YTRSVY\\\\ZXXXYZYXYWSPMQTOLKHHJKIFFHHG?;=:5453244337;=?ACBEJOTRQUPT_`]]__]\\__Y^d_^bffigddghb`]gf_cdoneYaie_WXZ`a_\\]_\\`UTVZUTRPNFTZZYTZ^a[VRQec\\[eYiwwvxyxy~zxwvvwy{}}~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~}}}}}}}}}}}}}}}|||{xvsrrqqpppponmnpppnpklnqqtptlppopruwvurqpppooppojhhghggfefecjijlmmlkjjklmlhghhgggebdjmnnnnnnnoooppqljnrstxwvyz}}|zyywusqqssrqqpnlmmnpqstuvvvtttuvvuuuttssrqqppqqrstuuuvwwwwwwwvvuuuuuuuuuuuuvwxxxwwwwvvvvuuvwwxxxwvvwvvutttuuutsttttsstttsrrqrsttsrqqrsstuvvvuvwwvutsssssrpqqqsttsssrrrrrrrrrrrqqqrrssrqqqqrrsssrrssrqpppqrrrrrrqqpppqqqrrsttttssrstuuvy|~~~~~}}}}||{{{{|}~~~~|{{{|}}}}}}}}|||||}~~~~~}|{{{{||||||}}~~~}}}}~~~~~~~~zwusrrqqqqpooopoporrssrrrrssssrqponnnnnoopoooonmmmlmllmnoppqppppppqqponmlkjhiiijjjijiijjiihhhggfefgfecaabdddc`^^__^\\\\]_``abcccdegiijihhgfeddcbbcdeeeeddddeeeeeffffffgggfggffededdccba``_____^^]\\\\]]]]]]]]]]][ZQB30016:=@CIKHDEIDFGGFHD>=<<=>?@ABA@?>>@EIJILOSXYWYY^c]XWWZ\\^_\\[[[[[\\^][WTQRVWTRNNNLJHJJHG?:=954420233249>@CEDFJMSQPSQU`b_]^^__^^Z_c_]aegcbbcgf_\\bddadckkm]cick^\\]^``^^`\\aZQW[UVSOPHX^[XVW]_NQUY__V^bboxz||{yyywvvwy{|}~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~}}}}}}}}}}}}}}}}{yxutqponnnopnnnoqpnpkjmopqpioppoqstqppppppoooppojigcfhjgbbcbghjlmmljjijjkjihfeddedbdilmmnooooppppookknqpqtrprsu{}wtrrrrqrponlmmnoqrtuvwvusstuuutttttsrqqqqqqrsttttuuvwvvvvuuuuuuuvuvuuuvwwxwwwwvvuttuuuvvwxxwvvwvvuttuwwwvuttuvvvvvvutttstttsrrrrtsuuvwwvwwwvtttstttsrstssssssssttsrrqqqqqqrrsssssrrssssstssssssrrqrrsstssssrqqqqqrrrssttssrrstuvy|~~}}}}}}||||{{{{|}~~}|{{|}}~~~~}|{{{{{{|}}~~~~}|{{{|||||}}~~}|||||||}~~~~~}ywvutssqoopttqpqppqpoooppqqppoonmmmmnnonnnnmllllmmlmmmnopppopppppomkihgfeefghhggfffggfffghggffgfec`^]^^^\\[\\\\]^_^]_abddddcccdefgfffffeeedddddddefeedddeffffggghhhhiiihhhhhfedccbba``__^^^^^]\\[[\\\\]^^^]]]\\ZVJ?73249>CEHGLMJEDEEEFGHFA=;<=>@ABDEEFGGGHKMOPRTWZZY[\\`eb^\\[]_`a_]^]Z^aaa_YWWWXZYXUSSPLJLMKI?9<954310122226=@DHFFJLPNORRVac`^]_a`__^ac`]_bd]cbcfe`b^_cbdckmnZhjcchba_`___a^b^RWZWWVMRL\\`[W[U^[QWZ[SbU]bjtz}|zy}xvvwy{}}}~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~}}}}}}}}}}}}}~}}|zzxurpnmkklnnnmnqqpoliorotfaonorrqohlkoooonnoopqmicafgjhb_abfijlmmkiiiiijlkifdddehefknmmnpppqqpprpmjknonopnmkkjqx}}xsqqppqpoonmllmnorstvvussrsssrsuuuutssrrrrrsttttuuuvuvvuuttttuuvvvvvvvvvwvvvvvvuuuuuuuuvvwwwvvvwvvuvwxxwwvuuvvvwwwvutttuuuutsstuuutuvvuvvvuttttttttvvwvuuuutttttttssrrrrrrsttssrrsstttssrrrsrrrrrrssuuuuutsrrrssssssssssrrrsuwx{~~~~}||}}||||||||{||}~~}{{|}~~~}|{zzzzz{{{|}~~}}|||||}}}}}~}}|{{|||}~}}}~zwussrrrrqqpqppoppppqqqqpooonmmmmmnopppoonnnmllllmmmmmlmnmlkkkjihgfedddfffffeeddddddeffgffeedc`^]\\]]\\]\\[\\^^___`deggfedccabcdeedeeeeededeeeeefeddeeefgggghhiiijjjjjiiihgedcbbba`___^__^]]\\[[[\\]^^^][WUOG;22368?FJOMHLLHCBABDEFFC?;:<@ADFGHJLNNNOPPQRUUXZ\\\\[\\^`ec`^^`a`b`_`]Z_cdda[Z[YYYYZYWVUQJKLLJ@:;964210001104;?FKHGJKNKOPRX_ba^__b_^__bba^_aa_`acedaa`acccdjlfVskd^egf``aaab`c[YYZXWWMSU\\`\\\\aVXUYXaZW`W`ekuz~}zy{xvwz{}}~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~}}}}}}}}}}}}}}}}}||{{zwspmljihkmlkmqrpoljrrloa_gloqqomnmnooonnnmnopnh]bdfigbZ`dgijlmlihhiiijjiheeeefhefklmloooppppprqljlmnmmmmkijjlprux}ysoooonoononnmllmoprsttrrrqqqrsvvvutstsssssttttsttuuuuuuutttttuuuuvvvvvvuuttuuuvvuvuuutuvwwvuuvvvuuuvxxxwvvvvvvvvvuuuuuvvvvuuuvuuvuuuuuuuuuuuttttttuvwvvvuuuuuuuuttsrsssrrsssrrrrrsstssrqqrrrrqqrsstuuvvutsrssstttttssssrrrsuxy|~~}}}}}}||||||||{{|}~}||}~~~~}|{{{zzzzzzz{}~~~}}|||||}}}}}~~~||}}~~}|||~~~}zusrrrqqqqppooooppppppooonmlmmmnnoooonmmmlllkkkllkkjjjiihggggfffedeeeeedddcbbbbbccdddccbaa`_^^]]^^^^^_acccbdgijjigedc`abbcccdeeeeffeffffeeeeeffghhhhiijjkkllllkjjkjgecbbbba`____``_^\\\\[[[\\^__^ZTLHA:4137=@GJMOQJDB@;::<?@@?;99;@DFHJLMOQTSTTVVXX[\\^_``^`aadedcccdadbac_Ybggfca_^][Z[]][ZZTKKLMKD><:742210034249>GMIHJHIGLOQW]aa_``b^^abcb`_^^^^`cdfecbbbddbejh^Ztgf^`iia`acdcad[\\Z[ZXXNTY\\_^`cVUS][a]\\_Xapkrw~}{yz}xuwz|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}||{yurmkhgehjjhkpqomljsrih`cimonlmprqpoonmmmlmnnkdZdbbge`Z^eghjkkjhghhiijihgfggggfddhlmmooooooonsqjjmnmllljihhfghiknu{}xrnmlmnopqponnkjjklnpqrrrrqpprsuvwvuuuttttttttttuuuuuuuuutssstuuuuuvwvutttssstuvwwvvuutuuuvuuuuuuutuvwwwvvvvvvvvvuuuuuuvvvvwwwwwwwvutttuuuuuuttsttuuvvvwwwvvvvuuuuutssrrqrssssrsrrsssrrqqqrrrrqqsttuvvwwwutsstuuutttttttssstvyz}~}}}}||||||||||||{{{{|}~~||}~~~~~~}}|{zzyyyyyyzz{|}}~~}||||}}}}~}}}}{|}~~~}|{zz{|~{vvxyy|~yz|}}}~}{wusrrrqqqppooopppppppoonnmlmmmnnoooonnnnmlllkjjjiihhhhhhhggghhhhgghggfffeddccbbbccbbbba``````_``````abdddcdgikjihfedabbddddeffffggfggggfffeffghhhhhhijkkklmlkjjjihgecbbbba`````aa`_]\\[\\\\]__][VJ?<72149<BFLNPPKC::86568:::978;?DILNOQSTVWWXYZ[\\]__abccabcceffffffdccaea[ejjigedb`_\\\\]^]\\\\VLKJILIB=<942221156569>FKIHIDCDILNSZ`_^``a^_bbba`_^^^_abdfdcccdeecgkf[eqcga]jiaabdec`d[]\\\\[XYQWZ\\]^bbUTUZ]````Zkuely}{zz}xux{}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}|{zvsmkihffghgjnomkkkppkjgknooifjmpponnmmnnnoojc]\\i``ec_[_bcfhiiiffhhhiihhhggffedcchkmmnnommmnmrojkonllkkhhifeedefinrqomkjklmnoppponkjjjjkmopqrrrrrrstuvvuuutuuuuuuuttuuuuutuutssstuuuttuvvutsssttttuvwwwvvuttuuuttttuuttuuuuvvvvvvvuuuuuuuuuvwwwxxxxxxwwvutttttuuuutttuuuuuvwwwvvvvvvvvutsrqqqrssssrssssssrrqqqrrrrqqsttuvwwwvutssttuutttttttttuvwz{~~}}}|||||||}}}}|{zzzz{|}~~~~~}{|}~~~~~~}}|{zzyyxxxyyyzz{{|}~~}}||||{{{{{{zyyz|}~~}|{zxwwxy{|~}{xutuvuv{xuuvwwxwuututsrrrrqqpppppppqqqqqponnnmlmmnnoooooooonmmlkkjjiiiiiiijjjijkkkjjjjjjihhhggeedcccccdccbaabbbdcbcbbbbbcddeddfghihgfffeeefffefggggggghhhhggggggggggggghhhhiijjhhhgfedcbbbbaaaa```a``_^^^^^^^^WNF<442016>BEGMNPM?865434566778:<?CHMPQSUVXYYZ[\\^_`aabdeffeeeefhhhhiifcdbfe`joonmkjhfd`^_`__^XMJHGJKE>=;4111237999:?CFDDD?=@GIINV\\_^``_]`bba`____`abcdedccddeegikf\\lnbfe_ki`bceea^a[_\\[[W\\UZ[^\\^baVTTXZ\\_bbasq_o}{z{}wvx|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}|{{wtmjihgghijknnljjjlmonklmiloqkkmnnmllmoopmmf`^ahcada^\\^``deghgeefggghgghggdddcbbfiklmmnkjiklomjlnlkkjjfgjfedddegiihgggghhijklooonlkjjjjjknpsstutsrsstuuuuuvvvvuuuuuuuuuttutsssstuvvuuuvuttrstuuuvvvwwvvuutttutttttttttuuuuvvvvvvvvuuuttttuvvwwxxxxxxxwvutttttuuuuuttuuuuuuuuuuttuuuvvuttssqqrsssstttttttssrrrrrrrqrsstttuuuutsrrstuuuuuttttuuvxy{{}~~~}}||||}}}}}}}|{{zzzzz{||}~}}|{|}}~~~~~~}||{zzyyyxyyyyyyy{|}}}|{{{{zzzzyyxxxz|~||{yxwvutttuvxyzyxusrrsssux{zusrsssttsssssrrrrrqqqqqppqqqqrrqponnnmmmmnnmmmmmmmmnnnmlkkkjjjjjjjjkkkklmllkjkjjiiihihgffeeeeefeedddfgfeddddddddddeedefefgfeefgfgggggfghhhhhghhhhhhhhhhggggfffffgggghggffeddcbbbbbaaa```___```___^^]]YI<3.024436@GGGFFGC913432445677;>ADIMPRSUXYY[[[\\^_`abddffghgfgghijjkllljjlnonquvutsssqpljjigfb\\RKHGJKF=>?8311369==<<??<=><9:=FGEHOZ^^`_\\[ba_a`__```abcdedccddddihif]rgcfgakh_bcdc`\\^]b\\Y[U]Y\\^^[^aaYTTYVX`aclupht}{{|~wuy}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}|}}}}}|||xunjihggiklmmmkiggillpdqqrspommnnmkjkklljkhfbcehdcc`]\\^^_bcefedcceeffgggfecccb_^cejkkmniffhklkhijgjiihegiedddcdeeedccdeeeffghlppmnmmlkkjjlpstutsqpopqrttuuvwwwvvvvvvuutttttsssstuvvvuutssrrstuuvwwvvuutttttttttsstttuuuuuuvvvwwwwvvuuttttuuvwwwxxxxxwwvutttttuuuuuuuuuuuuuutttssttttttuutssqrssstuuuuuutttsssssssrrrssttttttsrqrstuvvvvuuttuvvy{|}}}~~~}}||}}}}}}}|||{zyyyyz{{|}|}|{|||}~~~~~}|||{{zzzyyyyxxxxz{|||{{zzzzzzzxxxxxw{xxwvutssrrrssuwwwvtsqqqqqrsutsrpqqqrqqppqqrrrrrrrqqqppqqqqrrqponnnmmmnnnmmmmmnnnoonmllllkkkkkkklllllnnnmlklkjjjiijihggggfghhhgffghhggfffffffffffgggeeddeefhiiiiihgfghhiihhhiiiiiiiiihhgffffeeedddedddccbaaaabbbaa```_^]^__``_`_]\\[SA3,*/289869?FFA?>93.13334578::>BCGKORSTVY\\\\]]]`abcdeffhhiiiiiijkmnooqqrstvwwxyzzzyyzyywwvurplf[QJHIKH=>C<62026:@A?>=:678767<BDAFLX]^]\\Y[b`_`_^`aaaabbcccbbcdeelffdeqgegfblg^`abaabeeh]XZR\\]_``Z]`_[TU\\TWaafputnx}|{|vty~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}||}}}}}}|yvnjhgggjmppmljgddfiheZqxsqopqrqmkhihfddfhlkifggfda^\\\\]]]`acbbcaaceeefffecbba_\\[_bgijklhcbeijgccdcgghecggfdddddcdefedddddeefhjmmmnnnnmljjlpuwwuroooopqrstuvwwwwvwvvvuusstsssssstvvwvvutsrrrstuvvvvvuuttttttttttssstttuuuuuvwwwwwwwwvvuuttuuuvwwwxxxwwvvuuttttuvvvvvuvvvvuuttssrrssrrrtuuuttrrssstuvvvvuuuutttttttssrrssssrsrrqqrtuvwwwwvvuuvwxz|}}}}}~~~}}}}}}}}}}}}||{{zyyyyzz{||}|{{{{|}~~~}}|||||{{zzzyyyyxxyz{{{{zzzzzzzzzyzz|~uuttsrqqqqqrrsuuvutsrqqqqqqrrrqpppppppoooopprrrrrrrqqqqqqqrrqpooonnnnnnnmmmmmmnnoonmllmmlllllllmmmllnnmmlkkkjiiihihhgggghiiiihgghiihhgfghhhhhhhhghhgfefffgijjjiihgffghhhghiiijjjiiihhggfffffedccbbbbbbbaa`aabbbaa```_^]^^____`^]\\ZR>0+*/4;?>;78@B;8520/1445679;=?CECGLPSTTX[^__^_acdffghhijjkkkklmnoqqsuvwxyzzz{|}}}||{{zz{{zxwvqg\\QJKMH?>C@:42139AD?;:6335547=BCAGLV\\\\[YX]a_a_]^`abbbbbccbbbcefflecbomhfedblg`abefhikkm^X\\PXa^baZ[\\\\YVY_RUc`gpuvu{~}||}vuz~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}||}}}}}}|zwplhfffjmpqonjd_]`ed`]rvnkjkjjgddefffcbegkljghgeb^[[\\^]]_____`_`bcdccdeca`^\\[[\\^aeghijhb`dghh`]``ccfcchfeeeeeddefhfeddcdeghhhghknooonmkjlpuy{yvrqooopqrstuvvwvvvvvvuussssssssssuuwvvutsrrrrstuuuuuuttttttttttttssstttuuuuuvwwxxxxxwwvvuuuuuuvwwvvvwvvuuttttuuwwwwwvvvvvuuuuttsssssrsuvvvuusssssttuvvuuuuttttuuuttsrrssssrsrrqqstuvwwwwvvvvwxx{|}}||}}~~~~}}}}}}}}}}}}}}}|{zzyyyyyz{{}|{{zz{|}}}}}}||||{{{{zzzzyxxyyzz{zzzz{{zz{||}~rrrrqppoqqqqqrttttsrsrrrqqqrrrqpopopppooonopqqrrrrrrqqppqqrrrqpponnnnnnnmmmmmlmmonnmmmmmlllllmmmmllkmmlklkkkjiiiiiiiihhhijjjihghiiihhgghiiiiiiiiiihggfgghijjjjihhggggggggghggggggfffffgfffeedcbaa``aabaaaaaabccbbaa`__^^^___^^\\[[ZU@/+,04:@A?9798521012455789;=@EGEEGMPRSUY\\^````bdegghiijkkllmnnoqstuvxxyzz{{||}}}}}|{zyz{{{zzyvodWNNNIC@CC=73116@F>874335559@EEDKPV[[ZZZ]_^`^]^`accbbbbbbabceggke`csifddbdgfdfhlolkllo_X]OTb\\__\\YWXXX\\cPRechpuxz}~~~~}||}ww|~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}|||}}}}}|{xsnieefiloqpqk]TS\\chelnleeeeb][\\^abdfeefhkhgfefb_]VW\\`]\\]^]\\^]]`a`_`abcb_^\\ZZ[\\_adfghhhdbeghi`[^_aadccgfgggfffffghgfedcdfghihghkmnnonmlklnqtz~}zwwvurqrrsuvuuuuuuvuutssrrrrrrsuuvwwvutsrrrstttttutttttttuuuuuutssstttttttuvvwwxxxwwwvvuuuttuuuuuvvvuuuttsstuwwwwwwwwvvuuuuuuttuuuvuvwwwvvttsstsstuuttttttuuuuuttssrrssssssrrssuuvvwwvvvvwwyz{|}||}}}}}}}}}}}}}~~~~~}}}}|{zzzzyyyzzz{{z{zzz{|}}}}||||{{{{{{{zzyyxyyyyyyzz{{{{z{|}~~}}}}~~~qqqppppqpqrrrrsttsrrrssrrqqrrqqpoooppppooonopqqqqqqqqppopqrrrqqpooooooooooonnmmnnnnnnnnmmmllmnnmmlkkkkkkkllkkkkjjjjiiiiijkjjjihhhiiiihhiijjjjiiiiiiggghiiijjjihhgghhgggfffgffeeeeeeeefggfeedca``___`aaaa`aaabbccbba`_^^^]^^^^][[ZZXF1,-/37=<975442044456778:;<>DGHDEHMPRSUZ^_aabbcefhhijjkklmmnoprsuvwxyzz{{{{{|}}~~~}|{zz{{zzzywsj\\RPQMFCED>95002=F<56545556:BHGGLQVZ[[[[]^]^^__`bcbabbbaa`abdfgjd]ooiecbadjjjmouulglss_WbSNbYY]\\XPTVY_aKWfglpuw|~~~}}|~{{{}}~~~~~~~~~~~~~~~~~~~~~~~~~}}}}|||||||||{ytokgefhjmpprl[MMUahhimecbddddb`^\\ceeffghkgffde`]]OW_`][_^W[\\[\\__\\X[_aeb_^\\YY[\\^_bfggggdceghha]``abdcdffgghgggfghhgfeedeeghhgghjlmnnnllkklnqv~~{yvsrssttttttuuuttsrqrrrrrstuvvvvutsssssttuuttsssssttuuuuuttrrrsttttsstuvvwxwwwwwwvvuttssssstuuuuuuttsstuwwwwwwwwvvuuuuuuutuvvvvvvvvvvuttttssstttttsttttttttsssrrssstttsssttuvvwwvvvvwxzz||}}}}}}}}}||||||}}}~~~}}|||{{{{{zzyzyyyyzzzzzz{|}}}|{{{{zzzzzzzzyyxxxxxyyyzz{{{{z{{zzzxy||||zxxxxxoppppooppqrssrrssrrrrssrrqqrrqpoonnppqqpppopppqqppqppoopppqqqqppooooopppppponnmnooonooonnnmmmnnnmlkkjjjkkmmnnnnmmlkkkkkkkkkjjiiihiiiiiiijjjjjiiiijihhhjklkkjiihhghiihhhgfedcbbbbbcdeeeghgfdba_^^^^_`aabbaaaaabbbba`__^]]]]]]\\[YZ[Z[J5/./1376543211/4556899:<=@BGHIDHIMPRTV\\```bcdefgiijkkklmnoprsvwwxz{|{{zz{{||}}~~~~}}|{{{zzzyxun`VTTPIFFFB=82118C:35568767<FKJJNTXZ[]^_^]]^^```cebabca``_acddeg``qkgddcbhopsuwzwjakxxbV_YP[YPZ]YMQUZ`^O[kqux|}}}|~|||}}~~~~~~~~~~~~~~~~~}}}}||||||||||zwrmhfegikmpqrmeb__ejkkhebgnhhghkkhgdfjlkmggfcc`\\^R\\``][^[X[\\YZ_]WSW\\_eb__\\XXZ[]\\bfdfggeegiihdbbccdddefghihgggghhggfffffeefhhijjkllmmmlkjjjkow}ztrrstttttutttsrqrqqqqqrsttuvutsssstuuuuttssrssstuuuuuttrqqrssssrrsstuvwwwwwwwvuutssrrrstuuuuuuttsstuvwxxxxxwwvvvvvvvvuvuuuuttuvuuutttssrrsssssssttttttsssrrrsttttssssttuvvvvuutuwy{|||}}}||||}}|{|||||||~}}}}|||{{{{{zzyyyxxxxyzzzzzz{||{{{zzyyzzzzyyyyxxxxxxxxyzz{{{{{{zzzz{||zzywvvvvoooooopqqqrrrrrrrrrrrrrqqpoqqppoonnppqqqqqpppppqpppppoopppppooooooopppqqqqpoooooooooopooooooooooonmmlkkllnooooponmmmmmmlllkjjiijjiijjjjjiiiiihjjkkjiihjlllkkjihhhijiihhgfdcccbbccefgffggfeca`_^]^_`abccbbaaaaaaaa`__^^]\\[[[[ZYYYXWVG50..0143221111/25679;<=?ACEIJIELLOQRSW]`__bdefghijklllmnopqsuwxxyz{|||{{{{||}~~~~}||{{zzyxwuod[WUQLHGHD?:6413=82568:967=GLJJPUWX[]_`^]^_`aaacdbacda`__accc^f^fndeffffovwxwvqia]ixyaX\\WUWYKV[ZOQV\\^^Zbpz~~~~|}|}}~~~~~~~~~~~~~~~~~~}}}}|||||||||{zxtojfefgikkkibZ`jjgnopmjegkdbb``aehgkmlikilgcb^]_U``_]\\]WY\\\\XY^\\SOSX]d``_ZTUWXZ]aa_effffgiifddffeeeefgghhhggghhhggffffffefghhijjkkllmmlkjihioy}ywtstttttttsrrrrqqpppqrsttsssssttuvvutssrrrrsstuuutttrqqrssssrrsstuuvvvvvvvvutsssrrrstuuuuuuttsstuvwxxxxwwvvvvvvvvvuuusrsrrrsssttsssrrrssssssstttsssrrrrrrssttssrrssstvuuuutuvxz||||}}}}}}}}}|{{{{{{{{|}}||{{{{{{{{zzyyyyxxxyyyyyyyz{{{zzyyyyyyyyyyyyxxxxxxxxyyyzz{{{|||}~||{zzyxwxwwoooooopqrrrrrrqqqppppppoonpqpqqpopoppppponnnppqqpppppppppppponnnnnopppppppoooopppppppppppqqqqqqqqponmmlmmnopqpqponnoonnmmlllkkkkkjkkkkkkkjjiiikkllkjiijkjjjkkjihhiihhggfeeeeeddeefhhgggfecba````aaabcccba``________^^^]\\\\\\\\[ZZYVRNI>3/../123321122/2578;<?@CDFGKLJHOPQQSVZ_```cefghijklmmnnopqsuvxyyyz{{{{{{{|||}~~~~}}|{zzyxxwsme_YTQMJIJG@<8620752558<;78>HLHIOUVVY\\_`^]_`abaaddbbdea`_^abba[e^jl`eikmmw{xtmg`[VZixv^[\\UUYVKSZXRUZ___clw|~y}|}~~~~~~~~~~~~~~~~~~~}}}}|||||||{{{zyvrlheeegijllneRNZlonlhedb]da][Z[^bhkljfikpkecZ^_Yba^]^[RZ]\\ZW\\ZOKPSW`[[[VOPPPSYZX\\bddeeghhgfgiggffgggghggggghhgfffffffffffggijjjjklmnmmkjggks|~zwuttttstssssrrqppopqrrssssttttuuuusssrqqqrsstttttsrrrrttttttsstuuuutttttuttsssssstuvvvuuuuutttuvwwwwwwvvvvvvvvvuuttsrrqqqrrrrrqqqqqrsssssssstssssrrrrrrsssrrrrrrrrsssssstvxz{|||}}}~}}}||||{{{{{{{{|||||{{{{||{{zzzyyyyyyyyyyyyyyzzzzyyyyxxxxxxyyyxwwwwwwwxy{|zz{|}||}}|yyyzzyyyzznnnnnnppqqqqqqqpponnnooooopqqqqppppoonnmnmlmlnoopppppopppppponnnmnnoooopponoppqqqqqrqqqpqrrsrrrrrqponnmmllmnooonpooopoonnmlllllllkllllllkkjjjjklmlkjjijiihjjjihhhhggfeeefeeeefeffgggffedcbbbaacccbbbccba`__^^]^^^__^^^\\\\[\\\\][XVOHA:410/0013443211112477;=ACFHIJNMILQRQQTX^```bdfghijklmnnnoqrsuvvyyzzz{{{{{{||}~}}~~~~}}||{zyxwwurkfaZTPNMLKGB=9632531557<<78?HKGGMTVUWZ^_^]_abbbbeeccedaa_^aba_`b^mjijouvrvqke]\\][W[ixt]W[NVZVNTYVVX\\b``iu{}~}w|}}~~~~~~~~~~~~~~~~}}}}|||||||{{{zzyuoieddchplnlRLKPW`a_]]dbgfaXYX]ddgflfbdlpoefU^]acb]]bVVZYZZUXWJGOMMZRVSOLKJIIKORZ^^dgeffffeghggggggggggfffggggggffffgfffffghjjjjkllmnonligglt|xvtsstttsssrqpoopqrrssssttttuuutsssrqqqqqrssssssssstvvvvuttttuuuutstttttttttttttuwwwvvvvvvuuuuvwwwvuttttttuuuuutssssuttttrqpppppqrstttttsssssssssrrrrrrqqqqqqpppqrrrrsuwy{}}}}}}}}}|{zz{{{{{{{{{{|||||{{{{||{{{zzzzzzzzzzyyyyyyyz{{{{{zzyxxxxxyyyyxxxxxyxxz|zzzzzzz{}zxxyyzzz{{|nnnnnnoppqqqpooonmmmnnooopqqrrqqpponmlkkkjjjklmnoppooooppppoonnnmnnnnnnnnnnopqrssssssrrqrsstsssssrqpoonnmmlmnnonooppqppoonnnoonnmlmmmmmmmllkkjklmllkjjihhghihhhgffffeeeffgggggfgffeeddccbcdddefffedcccba`^^^^]^^^^___^^``a`^WSNIB;4/00/1135554322334699=?DFJLNNORJOTUTTX\\aa`bdfghijklmnnopqstuvwxyz{{zz{{{{{|}}~~~~~}}}|{zyxwwvuqkd_XRNMOOLFC>9532320587;=:;AHKEDIPTTTW[\\\\\\^acccceeddec`cdbcda__a_okpttsqif^ZWSTYYX]lwnZV^SVZUSW\\WY]`d`cny}}~yw|}~~~~~~~~~~~~~~~~~}}}}|||||||{{{zzywrmgb_bdfknfHEDHLIBL^\\dch]^VVW\\epokpjegnppgcU`]cbc[_cVX[TUZSPOFCKHFRMQPOLGDA>CGMVZX]addddefgggffgfffgggffffghhhhgggghgfffffgijjijjkmoonmjhfho{zvttttuttsrqqppqqrrssttttttuuutssrqqqqqqrrrrsstssstvwwwvvvvuuuuuutttttttuuuuutuuxxxwwwwwwvvvuuvuutsrrrrrrstuuutsrrrsttssrqponoprstttttttsssssssrrrrrqppooooonnooqqqrsvz{~~~~~}}||{{zzz{{z{{{{{{{||||||||||{{{{zzzz{|{{zzzyyyyyyzzzzzzzzyxxxxxxyyyxxxwwwwwz{yyyyyxyz{ywwxyzz{{||nnnnnnnooooppoonmmllmnnoopqqrrqpoonmlkjjjjiiijklmnnnnnnoopooonnnooooooooonnpprsssssssrrrrttuttsssrqpnnnnnmmmmmmnooppqqqpooooppoonmnnnmnnnmljihijkjjjiiihhggggffeefeddddeefggggggffecbbbccdeeefgggedccba`^^^^^^^___``_^^_]YUSNIEC?6/-./022344333335568;<?AEGLOQRSSKRWXWW[^cccdeghijklmnnopqrtuvwxxz{{|{{{{{||}~~~~~~}}|{{zyxwwvtqkd\\VQMMNPMFA=74334426<9;>=>CIICCIMQQPQVYXX[_bccdeeefjhbbefggc^^`_plgmkf_WTRQPOPTVY^jsfNMYQQVVVZ^X\\ace`fq|~~uw{}~~~~~~~~~~~~~~~~~}}}}|||||||{{{zzyxupjfegggii\\<:79>G@BR\\fcinnb`dibnqnrnmlnmlh`\\b`dad]ebX\\[ROZQHGH@FECFILNRRGB?:>BHSXTY]abbcdeefffffffefggffffgijiiiihhhhggffffhhiiiijknoonliggkx}zxttuutsrrqqqrrrrssttttttuuttsrqqqqqqqrrrrsttssstvwxxwwwvvvvvuuuuuuuuuvvvvutuuxxxxxxxxxwwwvvutssrrrqqqrrstttsrpooqstttsrqppppqrtttttttssssssrrrrrrqpooooonnnooqrsttwz|~~~}}}|{{{zzz{{zz{{{{{{|||||||||||{{{zzzzz{{{zzzzzyyyyyzzzzzzzyxxxxxxyyyxxxxwvutwzwvvwwwxyywuuvwxyz{zzooonnmmnnnnoonnmmmlllmmnooooppoonnmllkkjkkjjijkkmmmmlllmnnooonnooopppppqppoopqrsssssrqqqqrrrrrqrqppommmmnnnnmlllnnoooppponoooonnmmmmmllmmljigffghhiiijiihggggfgfffecccbcbcddeeefedcbbacdeffffghgfecbba`^^]]]^_```__^^\\ZXUMHFECAA=5.+-/133321013457779<ABCEGNQSUUUPVYZ[\\_aedeefghijlmnnoppqsuvwxxyz{||{||||}}~~~}}||{{zyxwwvsoic\\UPLKLNMF@<73367:68@<:?ACGJIBDIKNNKKRUQRT[`abcdghit{nabflrg^_``tzccg\\SKNNNNKLPSW[bgZ@AMHIQTVY]Z\\bedais|tx|}~~~~~~~~~~~~~~~~}}}}|||||||{{{zzywvsnid_^cf]N30/35;DNW^gcimlemfrjpmmqnrqliii_`ebc_b`h^[`\\RNZSDCI=AB@>DLLWUGB@<>ADPZVY]_``bccddeeeeeedefgffffgjlkjiiiiihhhgfffghiiijjjlnoonkigiswttsssrrqqrsssssstttttttsttsrqqqrrrrrrrrsssrrrsuvvwwwwwxxxxxwwwwwvvvvwvvutttwxxyyyyyyyyxwutsssrrssssssttssrqonnpqstttttsrqpprstttttssssssrrrrrrrrrqqppooooppqrstuwz|~}}}||{{{{{{{{{{{{{{{{|||||||||||{{{zzzzzzzzzzzzzyxxxyyzzzzzzyxxxxxxyzyyyywvuttuwuttvwwwwwusstuwxyyxxppoonnnnmmnnnmnmmmlkkkllmmnnoonnmllllllmlkkklllllmmmlllmmmnnnmmnnoooopprrrqppqqqqrrqqpooopppoopppponmmlmnoonmllmnnnnnooonnnnoonmnnmmmllmlkihfeeffghiiijihhhhhgggffedcbbaaabccdddccbbbbdeffgggggfecbaa`_]\\\\\\\\]^__^^][ZVQLIECBCDCB=4-+,.13320/.02469:98<FEEEGOQTVWVUY[\\]^aefffgghjjklmnoppqrtuvxxxxyz{{||||}}~~~}}||{|{zyyxwusmgc^UOMLKIHC=:945::?;:C?;@FIJKIBDJIKJGHPQMPRT]^^bdhjfuzehknwg_ehctz]QVXNKLMNMJIMRUVYXM=@D@GJOQX\\\\\\becbit|~wz|}}}}~}}~~~~~~~~~}}}}||||{{{{zzyyxwwuqie^ad[L9+,/37<DLVcadhigejnrommoqosqhelh^afba]`abaaa\\TNWWG@J<?A>9AKK[WHCA>@@AOUUZ]]^_aabbceededdbdegggffgjmlkjjjjjiihhgffgghjjjiijlnnmmjginw|ussrrrrqqqrsttttttssssssrrrrqqrrrrrrrrrrrrrrqrsttuuvwwxxyyxxxxxxwwwwwvvuuttuvwxxyyyyxwvusssssssstttttttsrqqpoooqrstuuutrppppqrsrrrrrrrrrrrsssssrrqqqqpppppqrstuvxz}~~}}||||||{|||||{{{{zz{||||{{{{{{{{{{zzzzzzzzzzzzzyxxxxxxyyyyyyxxxxxxxxxxxwwvussstusrsuvwwwvutttuvwxwwwrrqppoommlllkklmllkkiiijkkkklllllkklmmmnmmlmmmlllllkkkkllmmmmllllmmooponmmlkjjjloooonmmmmmmmlllmmmmmllklnnnmlllllmmmmnnoonnnmmmnnonnnmmlkigfdddeffghiijihhijjjjjihgecba```aabbbaa``aacdgghhhhhfca__^]]\\[ZZZ\\]]\\[YXVRMHECBDCDEFEA;3-+,.1442/..0257:=;9=GHHIJQSVXYZ\\\\\\^`bdghhhiijklmnooppqqrtvwxxxxyz{|}}}}~~}||{{|{zyyxwtqjdb_VPONLHDC@;;86?BD?=GD=@HLMMJDGJGGFCELKFMPKWX[agjhhrrgl~|qmghu~lhb_qkVJJNMNMJJNQRQQOF=@A?EFKMUY]\\adabis{~~|v{|}}}}}}}~~~~~~~~~}}}}||||{{{{zzyxxvwvtmia^VI;/',05:@FEEXi``egiosutrmrrpqhbhjg`cgb`Z]_abbc^WSR[PCK>=C>8>HI[WIDECDCANTUZ]]^_____bdeedccabdghhgghlnmlkklllkjihggggghijjihijlmnmkhggo||trrrrrqpqqsttttttsrrrrrrrrrrsssssssssrrrrrrqppqqrstuvwxyyyyyyxxwwwwwvuuttttuvwwxyxxwvutsssssttuuuuuuutsrqpoonnprttvvutrponnoqrrrrqqqqrrrrsssssssssrqqqqqqqrstuwy{|}}}|||||||||||||||||{z{||||{{{{zzzzz{zzzzzyyyzzzzzyyyxxxxxyyyyyxxxxxwwwwwwwvutrrsssqprstuvvuttttuvvwwvvsrqqpponmlkkjjllmmlkjjkjkkkkllmmlllmmmmmnnmnnnmmmmllkkkkllmllkkkjklmmnmkjiiihghjllmmlkkkkjkkkkkkkklllkjklllkkkjjjkkklnnonnmmlllnopooonljhgfedddeeffgghhhhhjkllkkjigdba`aacdccbaaaa`aacdfghhhfeca_]]]\\\\[YYYYYZYVTQMKHDBACEGGGGFB;50.--/2441//02368;@=:>FJMOMRUXZ[]^_^`ceghijjjklmnooppqqqrstvwxxxyz{|}~~~~||{{|{zywwvsphcb`ZSQQOJGC@=;><BGGB?JI?>FKMKFEFECCCBEGEFQPJUUXcosjt{cj}|i_bkno^[[_pOKPQPPNNQRONMKEBCDCDFIKRW[Y_c`agpy~~xu{|}}}}}}}~~~~~~~~~}}}|||||{{{{zzywwvwwurqgVD6.+,/6;<<GLJJXfZafjmmpsvw{|yvmeiffbegb_X[_aabb_ZWSYWHKD?FA9?EGZWLFJEJHFORTZ\\]^^^]]^bggedcb`acgiiihilnmllllllkjihhhggghhiihghijkllkhfehs|sqrrqqppqrsssttsrqqqqqqqrrrsttttssrrrrrrrrqpppppqqrstuwxxyyxwwwwwwvutttttttuuvwwvvutsrrrrsstuuvvvvvvtsrqppoooprstuvutrponmnpqrrrqpopqrrrrssssstttssrqqqrrrstvxy{|}}|||||||||||||||||||{{||||{{{{{zzzzzzzzzzzzyzzzzzyyyyyyyyyyyyyyyyyyxxwwwwvutrqqrssrpqrstuuuttuuuvvwwvvrrqqppponmllkklmmmmlkklkkkklmnnnmmmmmmllmmmnnnnmmlllllkkllmllkjjkkklllkkjjjkkkjijkkkjjjiihiijkllkkkkkkjjkkkjjjjjjjjkkmmmllkkkmmnoqponkigeffeeeeedeefffgggghjjjkkjhfdbbaccefeedcccccbbcdeeffdca`_^]\\\\\\\\[ZYWWUSOLIHECBCDFHGFGGFA<40..//022211234567;@?<?ELNPOSVZ\\]^__`diihikllmmnopppqqqqrsstvwxyyz{|}~~}{zz{zyxwvurogbb_\\WQOLIF>;<<CEFIHA?JLA<CGKHACB???@@BCEKVMNTSUgwy`keTV]^XSTROYlg^azgbkZTRTRRUSNMMLHHHHGGHIKQVYX^ea`dku~~~ts{|~~~}}}~~~~~~~~~~}}|||||{{{{zzyxwwwwwvssgQ<-(+47>DC>BD@AEPa^bcdbhpvx|}}}{ncbdcgfdbZ\\_aa``_]Z[TWJHGCJE>BCCVXQKNIPNJOQTY\\]^^]]^_dihfdb`_`cgijjjklmmlmmmmlkjihhhhhgggggggggghiiihffekxxrqqqqqqppqqqrrrqpppppqqrrstuuutsrrrrqqrrrrrrqppppopqrtuuvvuttttttssrsstssstttttttssrrrrrsttuuvvvvvvtsrqqppppqrsssttssqonnnopqrrqpoooppqrrrrrsstsssrqqrrrstuwyz{|||||||||{{|}}}}}}}}|||{{||{{{{||{{{{{{zzzzzzzzzzzzyyzzzzzzzzzzzzzzzzzyyxxwwusqpprsssrpprstutuuuvvvvwwwwoooooooonnmlllmmnnmlkklkkkklnnnnnnnnnmlkklmmnnmmllllllkkllmmlllkkklmmlkkkjiiiihiijiiiiihghhiklmlllkkjiihijjjjjiiijjjklklkjjjkllnooonjhfeeefffeeddddddefffgfghihhhgecccbcdfgffecdcddcbaacddcb`__^]]]\\\\\\[XVRRKCAACCCCDDEFFFECBA=81.-/00001212446778:@BACELOQRUW[^^^`cegjjjjklnnopqqqqqqqqrstuvwyzz{|}~~|{{zzyxwvutqnfa_XTRKGD@<9::=DHIKI@=ELD;@CGF<??::<??ABFJQLRTTUhtp\\]nkSFBIMPNKJLWaceb]`h|aTUXVWXUQPPOLLNMJHMKJRVYY_icaado}{zprz{}~~~~~~~~~~~~~~~}|||{{{{{{{zyyxwwxwwvrrdR9/+-5?EJMCCCCC@ET[^^^`hqwy||{||sidcceeef[\\^``_]\\]`^TRKFEIOIFFDBRWSWOLTRIPOUZ\\^_^^^`cgjigdb`_`cfhjjklmmmmnnnmljihhhhhhgggffffgggghfffeefhmx~~xrsqqqppoooopqqpooooppqrrstuuutsrrrrrqrsssssssrqpooopqsstutssrrrqrqqrsssssrrssssrrrrrqrrsttuuvvvvvvtsrrqqppqqrsrrrssrrqponopqrrrqppoooopqrrrrsssssrqqrsssuvxz{|||||{{{{{{{{{{{{{{{{|||||{{{{{|||||||{{zzzzzzzzzzzyyyyz{{{{{{{zz{{{{{{{zyxwvtrpooqrssrqqqrsttuvvvvvvwwxxllmnoooonoonnnnnnnnmlllklkklmnoooooonmkkjkllmnmmlllllllllmmmmmmmmmnnnnnmllkjjiiiiiihhhhhghijlmnnmlkjihhghijjjjiiijjjjkjjiiijkklmlllkgedeeefffeeddcccdeeeeeedeedddddeeedcdeeeddddeeecba``aa`^]\\]^^^^]]\\ZSMFC@<>?CDEFGGHHGEA?=<;60--/21/./135678999;@DDEGNQRSWY\\]]^dijihikkmnopqrsrrrrrqqstuvwxz{{|}~}||{zzyxwutqnh_YTIB><<;86568=DIKMI?<AHC<@@DD8;;6767<?BFGMMTSOKOY]ZVUPIA<@EOOLJJKRUY\\`pc`ZWZ[ZZ[XUTUSRQSRMKQMNSVY\\bnga``gu{}woox{}~~~~~~~~~~~~~~}|||{{{{{{{zyxwwwwwwuod<A;043-6>AHHEEJMKELXZ[\\^grxy{{{{yridb``aei^]^`^]ZY[][LHCBEKPLKKF@OWW]RP\\RHRSX\\_````adgkljgdbaabcfhijjkmnnnnnnmkihgggghhhhggfeefgfggfffffeehpyyio{rqqqqpponnnnnonnnnnnopqrstuutsrssssssssttttssrrqpppppqrrrqqqqppppqqrrrrrrrrrrrrrrrrrqrrstuuuvvvvvvutssrrqqrrssrrqrrrrrqpopqrssssrqppooooppppqqqrrrqqrsttvwy{||{{{{zyyyyyz{{z{{zz{{|||||{{{{{{{{{{{{{{zzzzzzzzzzyyyyyz{{{|||{{{{||||||{zxwurponopqrrrqqpqrstuuvvvvwwwwwjkllmnnnnooonnnonnnnmlllkkkklmnnooonmljjjklmmnmmmmmmmmllllmnnnmmnoooooonmmlkkjiihgggghhhhiijklmmlkjiiihiiijjjjiihhhiijiiijjklmlllkjhgedffffffeeddcccdefffeeeeddddeefffeccccbbbbcdcba`_^^__^\\[\\]]]\\\\[YUME?;;:>DDGHKKKKJJGB?<:984.-./11.-/14689::;<>AGGIJPSTUYY[]^ckkjhghjmnopqrstsrrrqqrttuwxyz{|}~~}||{yyyxvroie^SKF=5213543457;CIKLI@==BB=?>BA68969;?BCBB@JMOREDDRYVQIBHD@@FSSOLIGKSZ\\aa][W[][\\\\][XXXWVWXUOQTQRTUX^dqkca]ajsx|vqpvx|~~~~~~~~~~~~~~}|||{{{{{{{zyxwwwwwwukG/-2.49537:<BEEHRUQPSWX[_hqwyzzxwtmc[ZZ[^ag^]]_^\\YVUVR@9<AFIMJNPJCPVV^SR_MCTUY_bbcbcdgjmmjgeddddeefghikmnooonmlkigfffghiihhhgfffggghgggggfefiq{zblz~ropppponnnnmmllmmnnnoppqrstsrrstttsrrstttsssssrrrrrqrrrqqqqqrrrqqqqrrrrrrrqqrrssrrqqrrstuuuuvvvvuuttttssrrqrrrrqqrsssrqpqrsttttssrqqpoonnnoppqrrrqqrstuvxz|||{{{{zzyyyyzzzzzzzz{{|||||||||{{{zzzzzzzzzzzzzzzzyyyyyyyzzz{{{{{{{||||||{{yvsqooopqrqqqpqppprstuuuuuvvwwwkkjkklmmlmnoonnooooonmmlkkjjklmmmnnmlkjkklmmmnnnnnnnmmllllllmmmmopppppponnmlkjiihhhhiijjklkkjkkkkjjiijjkjjkkjiiiiiiiijjiijklmnmllkihgfefgggffeeeeeeedddeeffeeeeeeefffedcbbba`abbba`_^]]]]^]]\\]]\\\\YUSOJA;99;>CHIKLPOMKJIEAA>9763/-.///..0258:<=>@@CFJKLNSVWTYY]adgjihhhijlnoppruutrqppqrttvwxz{|}}~|{{xwyywtmcZTMD=:620123334679@JKKHC@<=><==@>5676>KRNJGE>TnhjVEERTQMEGOIFEJUSNMMIKT\\XPWYYZ]_^``_][[[ZZ[\\XRVVTVTSX^esngd_^dlqv{~}}~uqqtw{}~~~~~~~~~~~~}|||{{{{{{{zyxwwwvvvumO+,,+)7E35788:@EHLTWSTV\\aiqvwyyvtogYMOUYZ[b[[\\]^[VRLID638AHGHFMTOCLRUYNQ]D?RPX`ceeefhjknmkgeefffeeefggilnoooomkjhfddefhhiiihhgfgghhihhhggggfgjp{~{|xoooppppooooonnnnnnnnooppqrqqrrsssrrrrssssssstsssssrrrrrqqrrsssssrrrrrrrrrrqqqqrqqppqrstutttuuuttuuuuuttsrrrrrrqqrrsssrqrstttuuttsrrpoonmmmnoopqrrrrrstwy{|||{{{{{zzzzzzzzzzzzz{{|}}}}}}}||{{{{{{{{{{{{zzzzzzyyyxxyyyzzzzzzzz{|}}|||}}zvtrppqrsssrqpqopprsttttttuvwxxkkjjkkllllmnnooooppponllkjjjkkkklllkkkkllmmmnmnnnnnnmllkkkkkllmmnoppppppoonmlkihhhihijklmmmkjjjjijiiijjkkkkjiiijiiijjkjjklmnprqqmjhggffegihgfffffffedccdeeeddeeedeefdcbcbba```aa`_^]\\[[]]]^]]\\\\[ZRGB>:7779=AEHJMOQMKJJJFCBC<752/.-.////1369;>?ACEIKMNOQUWXUZ[^ceghgfghhjlnppqrttsrqppprtuvxy{||~~}|{zuuwvtn`OD?<964432123346886=MMJHDC=;;;;;;95679CPOMW`NE]lXNLJFJPMOYYQKIRQRQNMPNJSZULRXXZ`dfed_[\\[]\\]^][XXXWVUSX]etrkhddehknx|}||trrtvy{|}}~~~~~~~~~~}|||{{{{{{zyxxwwwvvvunZ8,+,149;348;54>?<?JSTUYcipuvwwtrlfPAKRXWQW[YVV\\XQJA:6578;GGDAHRSCHNRTHQS:AKMU]ceffghilnmjgefghffeeeefhjlnopomkhfedddfhhiiiiihgggghhhiihhhhgfhkt~|uqpqqqpppppppooooooooooppqqqqqqqqppppqrrrrrsttsssssssrqqqqrrsssssrqrrrrrrqppqqqqpppqrstttttttttttuvvvuutsrrqrrrrrrrssrrrstttuuttsssrpnmllmnnooqrrqqqrtvy{{{{{{{{{{{{{{{{{zzzyz{{|}}}}}}}||{{{{{|||||{{{zzzzzyyxxxxxyyyyyyyz{|}}}~~}zvsqpqrstttrrqppopqstsssttuvwxyjjiijjkkkklmnoooopqponlkjkkjjjjjjkkjjklllmnnnnnnnnnmlkjjjjjkklllmmnnopqpoonmlkiiiijiijlmnoomkjiihiiijllmlkkjjkkkkkkkjkkkjjklkjihihhhhgffgihgfgghiihgfecccccccdddccccba`aacba`__^]\\[[ZZZ]^__^\\[YRNF=96657:>ADFHJLMNLIHIKIGEHC9210/.-./01358;>ACEHIMPQQSTWZ\\[]^cffeddefghhhiiklorsrpoooprtuwyy{}}~|{zwpnqoi^O?643222223323458::7;JKHIHE>:99899657:>CBCMUZQTu{l^LJGO_TaQDNSghVNROOQXdj_TSUWZZevtns_^^^]]__`_]\\[[ZXVX\\fvvoljjjjlnuz~}u~~}||}}wsrrsux{|}}~~~~~~~~~~}|||{{{zzzzyxxwvvvvutrjH2.--/22;1/=C?9;96>LTX]flqttutqoheOFNPTSNPROLNXPF>84248:6@H=:@MSBDKNNCHD:F@GPX_eghhhglnnifeghihgfeddefiilnonlkhfedddfhhhiiiiiihggghhiihhhhhggilt{sqqrrqqqqqqqpqqqqqppoopppqrqqpppponnnopqqqrsttsstttsrqqqqrrstttsrrrqqqqqpppppoooopqrsstssssrrrrtuuvvutttssrrrrrrrrrrrrrrssssttsssrqonlllmnnnnppqqqpqsvy{||{{{{{{{{{{{{{{zzzzzz{{||}}}}|||{{{{{|||||{{{{zzzzyyxxxxxyyyyyyz|}~|vsrqqqstuuttsrqqpqrstttstuvwyzzjihiijjjjjllmmmnnooonlkkjkkkkkkkjkkjjklmmmnnnnmmmmllkkjjjjjjjjjjkkllmnooonmllkjjijiiijkmnonmlkjjiiijjlmmlkjjkllmlllllkkjgfffdccbffffffefhiihghijkjihgfdcbbbbbcdcbbba```abcca_^]\\[ZZZY[\\^^^\\WUQLB<976567:<?BDEFGGHIKKJJMPICDB:10/.../023579=ADGILNPSTTVWZ]^^`eeeededefgggfgghjloqponooqrtvxyz{}~~}{yxrgbfd[NA721012344554468:<=:;FJFHJD=;;:98767<ACDIUYVOGSoupdSOK[wZ>APak{_U_[PRiymXXeyaSX`bis_db_\\^_`bba`_^][XX\\hxysqommnorwz}~nxvtqpqsvtqqqqstwz|}~~~~~~~~~~~}|||{{{zzzzyxxwvvvvutrmK30.-+.01883@HDAA@@GT^finpqqqplicbONRLMQKIKHEFOF:55645985;F=:<GPCDKMKDB:EC=EKS[bdeedejlkgeefhjihgfddefggjlmmlkigedddfhhhhijjjjhhggghhhhhhhhhggilyvrrqqqqqrrrrrssssrqqpppqrstttsrrrqponnnoooqqrrssssrqqpppqqqrrssrrrqqqqqpppooooooopqrrssssrqppppqrstutttssssrrrrqqqqrrrrrrrrssssrqonmlllmnooooqrqqqqrtvy{||{{{{{{{{{{{{{{zzzzzzz{{{|}}|||{{{{{{||||||||{{zzyyyyxxxxyzzzzz{}~xonopqrstuttssrrqqrstttttttuwxyzkkjijkkkkkllllllmmnmlllkjkllllllkkkjjkklmmmnnmmlkkjjjkkkkkkkkjjjijjjkklmmmlkkjiihihhghikkllkkjjjjklklnnmlkklmmmmllkkjihgdbbbccddeedeeeefhiihghijjihhgfedccbbbbbba```____```_]]\\[ZZZ[ZZZZXUOHD@=63143579;=?ACCEEDDEHHFFJPJC=;61/.../013469<?BGJLOQSVWWYZ\\_aacheefgfeeeffghiihijmonnprrstuvwyz|~}{xvsk^WZXMA:53212367887658<>>>?>EJFFHA<>=<<;98;BGGFNVZfgQRVVQUcbLGcz\\ABMU_i^Ydi_jmcna\\\\Zlz_TVWZZ[b`]Z]`bfdfjeb`^Z[^hw{wvspppsvxz}}~osqnkijkmllnooqsvy{}~~~~~~~~~~~}|||{{{zzzzzyxwvvvvutrmQ5...+-,02754:AEGGCDR^gjnmmmmkhbZ[MTQEIQHBHHB=C<448;778479CA@@GMDHMMKD@=K;CEIRZ\\]\\^`afgfdddegiihggedfgffgiklkkjhgddefhhhhijjjjihhggggghhiiihhhhjr}zsqppppppqqrrstttsrrqqrstuuuuttssqponnnnnoopppqqrrqpoooopppppqqqqqqqqqrqqppppppppqqqqqqrrqppooppqqrsssssssrqqqqqqpppqqrssrrssssqonmlllmnoqqqqssrrrssuwz{||||{{{{{{{{{{{{{zzzzzzzzz{||||{{{{{{{|||}}}||{zyyyyyyxxxxyz{{||}~slkmpsttstsrqpqqqrrstttsrstuvwwwlklkklllllmmlllklmmlllllkklmmmmllkkjjkkklmmnnmmlkkjjjkkllllllkkkjjjjjjjkkkkjihhhhhgeefhhijjjjiiijllmmonlkklnnmlkkjjhfefefffffffgfeeeeeeffgggghihhggffedccbbbbbaa`^^^]]]]^^^]\\\\[ZZZZXUPLIE@:546675245779<=@ABCDCCBBCCCBDDFB=830/.../12468;>ADHLNPRUWXY[]^`bcddegiifdeeffghhhhiikmnoqstuuuuvxz}}|yupldZNLKC<865543589;<;:9;@A@ACCEIGB@<<??>>??>AHNNNU[]mr^WSc^p~qMIQQMBEEFCMOLSZiznZd`\\^^^_]YZXUUY][YX\\bdgefqmba`]\\_gpvyyurqruwy{|}}~{qroomjiklmmmnoqtx{|}~~~~~~~~~~~~~~~~~~~}|||{{{zzzzzyxwvvvutsrpeC./000013776:@=23??EMQonjcjeefWPPIYN@GTD=IC:99746<@;=956:?CHFEIENPNICAGF?CGJQVTSTVZ_abbbcddfhihhhfeggeeehiijkkjgeeefhhhhijkkkjiihhgggghiiiihhiimryuqppooooooprsstttssrqrstuvvuutsrqonnmnnnnooppppqqppooooonopppqqqqqqqqrrrqqpqqqqqqqpppqqqpppooppqqqqqqrrsrrqqqqqqpppppqrsrrssssrponmlmnopqrssrrsssstuwz{||||||||||||{{{{{zzzzzyyyzz{{{{{{zz{{{{{||}}|{{zyyyyyyyyyyz{|}~~yniilnrtvurpnnnopqqrssrqpprtuvussnmmlmnnnmnnnmllkllllmmmmmllmmmllkkkjjjkkklmmmmlkkkjjkllmmmmmmmlllkjjihiiiihhhhhihhgddefggghhhgghhjjiijigffghihhhhggfdcddeffghhhhhhgffedeeeeeeffffecddedcbbabaa`_^\\\\\\[[[[[[[[[\\\\[[ZXRG?9643555666534579;=>ACCCCCCB@??>?@BBA<61//../02468:>BEHJLOQSUWYZ\\^_aceecdjmkecdefggfeffggikmqtwxxwvuuw{~}{vpjd]VJA?<9788:946<=???=<?CDABEFGIF?<:=ABABCCCFKOPTVVWamZUhoblrZIMNGEDFFBDKLHJMWb\\_i`^_inj__bb^\\]]XVVboefmhopefme^adiow{xutuwy{|}}}~|pqnnmlmnppmnnopswz|}~~~~~~~~~~~~~~~~~~~~~~}|||{{{zzzzzyxwvvvutsstmK125555559:9:@DB91BABGg_cUa]^`QIIEWH<HQ?7?:346658?E?@>:7<?FNPJHFTRNGCDJEBIJKOPNLNQU[^__``abceghhhffhgfeeffghijjifefghhhhiklmmlkjiihhhhijjjiihijjlqvzrppoonmmmnoprstutsrqqrstuuutsrqponmmnnnnnoooppppppooooooopppppooppqqqrrrrrrrrrrrqqqpppoppppoppqqqqpppqrrrqrrrrqqpooppqrsstttttsqponnopqstttsssrsstvxz{{|||||||||||||{{{{zzzzyyyyzz{{{{{zzzyyzz{{||{{{zzzzzzzzzzz{|}~}sjghiknpqrrpnmmnppqrrrrrqprtuvusrommlllmmnnnnmlllmlllmmnmllllmmlkkkkjiijjjjkkllkkkkkkllklmmmmmmmmllkjiijjiiiijjjkjhgedefgggggffefghhfefecbcceeffffffeededefghiiijiihgedcdcccbcdeeecbbabbaaa``a`_^][\\\\\\]]\\\\\\\\]]]]\\[YQH<52//39;;97554868:<>?BDEDDDCB@>>@BCBA>931//./01358;>BFILKMOQSUWY[]_`bcecaelomgccdfghggggiiiknsvyyyxvvuwz~|yqic^XSH=8768:;==89>?ABB@@BDD@?@@@A@<98=BCBCEFFIKNOPNO\\ptPHLRVSK==GIGGEIKFIMOIKKHT\\thY^afjja_cknda`[^_cebbjhjtlfzsdcbbhszywwxz|}~~~~~}pokkklmooonooopruxz|~~~~~~~~~~~~~~~~~~~~~~}|||{{{{zzzzyxwvvuttstuqQ54679::9;;=;<?AII8<:D\\OTGVSVYLEEBPC9FH:264.13435<CABD<9BBHUZQFKZRMHEGHDIRMJKLKIJNSX[]]]]^_`beghhhgihgfffdeegijhgffghhhhikmoomkjjiihhhijjjjiiiihilq|{~tqpooonnnmnoprsttrrqqqrsssrqpoonmmmmnnnnnooooppppppppppppppqqqpoooooopqrrrrsssssrrrqppppppppppqqqpppppqrrrssssrqpoopppqrstuutttrponoppqrstssrrrrstvxz{{{zzzzz{{zz{||||{zzzzzyyyyzzz{{{zzzzzzyyzz{{{{{{{{{{{||||||}}~{tmkjkmopqrsrrrqrstuvvutsssuvwwvtsnlkkkklllmlllkjklllllkkkkkllllkkkkkjhghhhhhijjjjklllllkkkkkllllllllkjjkkkkkkkkkkkjheefghiihhggfffhgfffedcddffggggghggffedefghiijjihfeddeddddddeeddbcbbb`_```a`_]\\\\]]_``_^____^]\\ZUH>511115<?=965448789<>@BDFFFEDC@@ABDED?:631///01247:=@FIMPMNNPRTWXZ\\_`abda_fnqojfeefgikllklmlmquxxyzywwxz|~~~}zumc\\YULD<659<?>=@?;>BDFEBBDDB>98757989;?BCCDEFFHKLLKLHLUKG@@?XO=:@DEGIHKPP]\\SKLNMY[e\\VZ^ablqkggffda^ckhanjabe{ycopga_`emrstwy|~~~~xnjggfghjkkopooopsvx{}~~~~~~~~~~~~~~~~~~~~~~~}|||{{{{zzzyyxwvuuutsssrY=667::??;=DB8::ELDC;ESLHANKOSKFCBNB7@>5110./12137<BBD=;GGKYaWHS^QNHGJHFQWLGJNKHJNRWZ[[[[\\^_`bcfhhhihhggedcdfghhggfgghhhhjmppmkjjjihhhhiiiiijiihghkvyxqpqqppponnoppqrqpppppqqqpponnmmmmmmnnnnnnnnnoopppppqqqpppqqrrqqppooooopppqrsssssrqqqqqqqqqpqqqqqppooppqrrssssrqpppppppqrtttsssrpooopppqrrrrqqqqrtvxyzzzyxyyyzzzzz{{{{{{{zzzyyyyzzzz{zzzzzzzzyyzz{{|||}}}}}}~~~~{yyz{{}}}|{|{{{{z|}~~}{|z{||{yxwljjjjklkklkkkjiijjjjjjjiikklkkkjjkjihffffhhhiijjjklllkjkjjjjkkllllkkjjkllkklkkjjihgffgjkjjjiihhgfgggfeedcdefghhiiihhgffedddefghihhgedeefffffffefedccccba`____^]\\]]_``aaa```a`^\\[WK=4310125;?=764457789;>@BCEGGEDC@@AABC@=8420/./13469<?DGJPVQNOPQTVXZ[]_`ab^_hppojhgggfhihfdjnnoruxxxyxwxy{}~~}}|ztl_USRF><679=BB@?@??DEFFCCDB@<6334568:=@CDDEEFFGJKHEDD@=HMC=>GIA>ACDGIHJO\\fZTJMPPWYYXUW[]arqhfhgeb^_bhcbljd_bllcgsn`_`cfhiouy|~~~~ulheccddgjlnonnnnqux{|}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~}|||{{{{zzzyywvuuttsrsqtfK7258<@B@?DC:=@CC?D=LOLJEGILMLHCAOA544200/./001248<==<;FMNZb[IZ\\RPHILHLVUJBJOLJNQSXZ[[Z[\\^__`beghiihhhgfdcdeggggggggggggilopmjjjjjihhhhiihijjihggiq~y|rpppppppoooppppppooppppppponnmmmmnnnoooonnnnnooooopppppppppqrqqpppppoooooppqrsrrqqqqqqqqqqqqqqqqppoooppqrrsssrrrqqqppppqrssssrqppppppppqrrrqppqrtvwyyyyxxxxyzzzyz{{{{{{{{zyyyyyyzzzzzzyyzzzzyyyzz{||}~~~~~}spqppnnprtuvwxy{}ihiiijjiihiihhggghhhgggghijkjjjklkjigfddfghhhhiijklllkkjihhhijjklkkkkklmnmmmlkjhhhggghjlmmmllkjihhggfeeddffghjkkkkjjihfdcbccceegggffeggiijjjjihffeeeeddca`__^]\\Z\\]_abcccbbcba^\\ZQC513212359;:54345678:<?@ABDFGGEDABA@=<:86421//02479<?BEHINXSQPQQTVWXY[]^_a]`joihikjihgiijijlopqsvwwxxxz{|~~~|{yytjZOLMG:=@=9?FHEDBCBGGGGECA><:6334578;@CEGGFDFGGJKE@?@>>HH<9:>@?ACBBEGGJO^[USJLSSTX]^XSTVYa][]_a`^XZ]_[[`^Z[\\_`^_jj^`bcbbbgnvy|~}}}~|wpjd`__`begjkllmmmoswz{|}}}}}}}}~~~~~~~~~~~~~~~~~~~~~}|||{{{{{zyyxxwvuuttsrrprbG<=:5>CAGB?B@@CC@:EAOPMJGGHJMMLC@L?1//000011101246789:<DNQ[`[ObWWTMPOMQXRFDNRNOTVWZ]]\\[\\___^_`dghiiiiiigeddeffggggffffffhjmoljkkkkjihgggggijkjhggfjvsmnooooppppoonnoooopppppppoonnnnnooppppppooonnnooonooooppppqqqqppppppoooonnooppqqppqqqqqqqqrrqqqpppoooopqrrsrrrrrrqppppqrrsssrqqrrrqponopqqppoprtvxyyyyyxxyyzzzzz{{{{{{{zyxwwwxyyyzzzyyyyyyyxxyyyz{|}~~~|qlmopomllkllmmnopppppqstwy}ffghijjiihhiihhgggggggfghhijjkkkkjigfeddefeeeefghijkkkjihhhhhijjjjjjjjjjkkkjjiggggggghjklnmmlkkjhgfedccddeffgijjiihggfdcbbbbbcdeddddeggikllkkjhfedcbbbba_^]]\\[ZY[]_bbbddccba_]\\UH:2133234467733345679;>AAABDFHHFEBCB>:8655431//1359=?ADDDCKWTRRSTVWWXXZ\\]`b^aklecfjjjihjjkjkmppqrtvwxwvy|~~}~}{ywyufULGFF=9HB>>GMJIFGFJJHFEC?98975678:<?CGIJIFCEJJKKC==?=;>>;<878;ABAACDEGKWSRRKMVUV]^]VOOPUW\\VWVYZZRUVVUV[WVZZ\\]\\X\\`^`cbaa`bglpsx|{xxy{}|vrmieba`abdfgghijkmnqvy{|}}}}}}}~~~~~~~~~~~~~~~~~~~~~~}|||{{{{{zyyxxwvuuttsrrqpY;6=A>8AEAEC@=>CCA;EBOOMLJIIJLLKA:C:2000001222223455679:@KRZ]XV]QYWUTQRSUNCITTSTYZ[]___^_aa__`acfhiiijjigeddeefffffeedddefhjlkkllkkjihgffffghiihhhfejuwmmmmnnnooonnnnooopqqqqqqqppooooooopqqqpppppoonnmmnooooooppppopppppppppponnooopqqqqqqpopqqqqrrrqqqqpooooopqrrrrrrrqpppppqrsrrsrrsrrqonmnnooonopstwyzzzzyyyyyzzzzz{{{{{{zyxxwwwwxxxxyyyyxxxxxxxxxxyz{|~~xniiloponmkihhijklmlljgfefjlqtuvwwxz|~defghhiihhhiihhhgggggffghhiiiiihggfeeedddddccbbcdefgghhgffffgggggggghhhhgghgggghhhihhhjijkkjjihgfeedcbbcddeefgfeeddddccbaaaaaabcbabbcedfghihgecaaa`^^_^^]\\\\[ZZYY[\\^_^_aba`_]ZXVJ<3224545545543345679;=BDEDDDGIIHFDBA=96545421/1359<@BDEDCBJTSRTTUWWXYXYZ]bc_biidbehiiihjkjfemnnooqsuuuwy|~~~~~~}zvuypbSLGCDA?AME?GOOOLJKMMJFEC=7799889;=@EHJLNMGADIIJKB<;;;;=:79878:?AABCCBEJRVSPMQWVX]XVRNNPXV_[XUVWYPPQTTTXVWYZ]]ZXY]``ba`abacdfhovuonquy~~{zwronlihggcbdffbbbefhjlosvzz||}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}|||{{{{{zyyxxwvuuttsrrqoT4<:8;=@CIEED>=@DD>GEOKKNMJKJIGD;48432222223234434556789=DNY\\YYUS\\[[WSTPPKFSZWTY]\\\\__````ba_`bbbdghhhiihgedddeeefffeedcddefghijkkkjjjihgfffffghhhhgddjtznnnmlllmmmmmmmnooppqrrrqqqqpoooooooppppppppooooonoopppooooopopppppppppponoppppqrrrqqpoopqqqrrrrrrqppooooooppppqrrrqqqppppqqqqrrrrqpponnnmmmnoquvxyzzzzzzzzz{{{{{{{{{{zyxxwwwwvwwwwxxyyyxxxxxxxxxyzz{|}~}vjgjilopnmmkjiijjkklmlkjihhikoqrpqrtvwy{|}~ddefffghhhiiiiihhgggfffffggffeefeddcdeeeeedccbbbbbbcddddcdccccccddeeeeedceeffghhiiijiiiiihhhggfedddddccdeeeeedcbaaabbba``````aa``_`aabcdefedb`_]]aa`_^]^]]\\[ZYYXYY[[[[]]][YUPQJ:1025666654433345579;=ADGHFDEGIJIHEDA<865443200136;?BDFGIIIKPTUTUUWXXZYYZ_ff`adeccegghhhjkkjipnhhknqstuwy|~~}|}~}|wssum_TMGCEGGEKLIFKNOMKJIJJGDA;679:9:<<?DHKMMNNHACHHJJB<:899:97888:;>ABCCCBFJRVROOSWWXYSQNLORWWa\\XTVY]PLNTVUWWWXZ]]ZXY]^`aaabbbbaabhpnediou{|ztppmiklljjlgaeehe^[]`degjmptvyz||||}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}|||{{{{{zyyxwwvuttssrsrpW;9?;5<BDJGDD><?EG>HGMGJSNJHE@<9523344343433245444556789;?IV\\YZQV]`\\UVSMMOO^ZUW^_\\]__ab``a`_bb`bcefffgggeddddddefffeedddddeefgijkjjjihhgggfeeffghhhgefgmyrnooonnmmmmmmmnnoppqrrrrqqpooonoooopppppppoooonnnooopppoooppppppppppppppoppppppqrqqppoopppqqrsrrrqqpppponnmmmnopqrrqqqqppppoopqqqpppponnmllmprvwz{{{zz{{{{{{{{{{{{{{{zyxxwwwwvvvwwxxyyyyyxxxxxyyz{{|}}~xqmkjjlpqonmlkjijjklmllljihhjlosuuuuvwxyzz{|}}}}~ddeeeeefhiijjjiihggffeeedccbbaabaaacceffeedccbbba``aabbaaa``````aabaaabbabcdfhijjkkkjjhhgfeddcdcdefeeedeeefedb`_^^_`a`______``aa```````abbba`_^]_dcbba_^]]]\\ZXWWWXXWWWXYYWUQONF5/269:986653333568:<>AEHKKJFEFHJJHFEC>97764210135:?CFHIIKMNMOOQSTUWZY[[Z[`gh``bbcceffgghjkljhmkghjmpstvx{|~~}|{ytpnmpqf]VOJGGKLJHMMKKKKLLJCAHIB>:779;;=??AFJLMMMKGBDHHIHA=:76777789:<=@CEFFDCHKSVROPUWWWTPMKKPSVXc[USVXXMLPWZWXYYZZ]][Y[]]^``abccba``dkha`ekrxwqihgcbfhebdbeedhh_WV[_abdgjlpruwz{{|}~~~~~~~~~~~~~~~~~~}}}~~~~~~~~}||||{{{{zyyxwwvuttsrqrqoX=2<D@;BCGFCE><?FHDJJLDETLBB>84211256555655545654456789:<>DR\\ZZTZ^`[TSOKQUV`ZX\\ca]^``ba___`aca]acdddddddcccbbbcdfggffeeedddcceghhhhhhhhhhggfeddeghhgebcfmuvoqqpoonnnnmmmmnnnnopqqqqpooonnooooopppppoooonnnnnoooppppqqqqqqpppppppppppppppoppppppppppppqqrrrqqqqqqqqonmllmnopqqqqqqpponmlmnonnopponmlkkmprvwz||{zz{{{{{{|||||{{{{zyxxxwwwwwwwxxyzzzzyyxxxyz{|}}~|vrnljkloqsrqonnlklnmnmmmmljijloswywxxz{{{{{{|}}||}~cdddddddfgiijjiihgffeedcba``__`````bcdeeedcbbbba`__`aaabbbaaaaaa``````aaabcefhiihhiiihgffdcbbbccbccccbbcccdcb`^]]]^`bbbbbbaabbcbbaaa``_`aa``__``bgdcba__^]\\[XVUUUVVUUTUVVUSPKB:/07;=<;86543234689<>ADGJLLKFEFGHIHGFEB=:863100246;AFIKLLNOPPONOQSUY\\[\\]\\\\ahia_`abdfgggghjlmkihjjhlpsuuwz|}~~~~~~}{yurmhfhjmke`XQLKKNOMHKMJGEDDFJC;BG?:989:;;=BBCGJKLKJHGFHKJHEA?=:87679:<=?@CFHIIGDILSTROPRSTSNMLKLQVVY`WQQVUPNPSY\\XY[\\]]^^]\\^_]___abcbbba`cgeaadiossi`bb]^^][\\][ca\\XUQQV[_`abdgilorswxzz||}~~~~~~~~~~~~~~~~}}}~~~~~~}}}||||{{{{zyyxxwvuttsrqrpjU<04@H>A>ABBD=:>GIIGKOC>QD::720//3697657877667765679:;<<=@BP\\[YX\\X[XROLQYZZ`Z]`fc^^a_aa^]]^__^]abbccbbbcccbbbbcdeggghgfeeddccdefffffffggggfeedddfghgebcffhoyzpoonnnnnnmllllllllmnoooonnnnnnoooooonnnnnnnnnnnnnnnnoppqrrqqqppppppppppppppppppoppppppooppppqqqqqqrrrrqqpnmlklmnopppqppoonmlmnoonopponmlklmpruvz{|{zyyxyyyyz{||{{{{{zyxxxxxxxxxxxxyz{{zzzyyz{|}}~~yqmlllkllmlmpqpoomllponnnonliijnpuy{zzz{|}}}}}~~~~cccdccccddegfffffeedddcb`_^]^^`a``aabcdddedba``_____`acdddcccddcbbbbabbcceghhfeecbbbbcdddcbbbbbbaaa````a``bba`___abddeefeedcdddcba_^]\\Z\\]^^^^^^^`db``_^_^\\[YWUVWXWVUVUSSRQLHB8002;@>;;:75334578:;>@DGIKLKHDDEFGGFDEGGB>:73111368;BGLNPPQRRQPNPRUW[^]^^]^bhfa^^`bceffghgilmljhjmmortvwy|~~~~}~~|zz|}{woiffgikllkgb[SOMNOOMJHGECBBADHC<?C=9:<;;::?FEDGHHIHFGHILNLFCA@@?;88:=>?@ACFIKLJIHHKRSQQONOOPMMNNNTYTZ[TOOTTOTTVZ\\[Z\\_``___^aa_`__abbabbaabcdbceilolc]`_ZZXY[VP]_UOMMT[[]_``ccffhjmosuvxz{|}~~~~~~~~~~~~~~}}}~~~~~~}}}||||{{{{zyyxxwvuttssrqojN;917FFF>>A?C=:=FKKFKQD9I:3320//04<?<979;987698768:=>@A<?BAM[YWUWTXXURLV]]]`\\bdgc^^`^``]\\[[[[[\\^`abbaaaaccccbbcdeghiiihgfeddcddeddddddeeffeedddeffgffdeeedfmxqmlllllkkkllmmmnnmmmmmmmmlmnnnnnnnnnnnoooooooooonnnnooopppoppooooopqqqpppppqqqpppqqppooooooopppqqqqrrrqqpnmlklmmnooopooonnnmmnnooopppnmllmnprtvy{||{zyyxwxxz{{|{{{{zzxxxxxwwwwwxxyyz{{{{{{{|}~~{vrliijkklmkikoppopnlmnmkmoppolkkorwz{z{{|}}}~~~ccccbbbaabbbbcceecccbba`_]^]]_aaaabbbcdeeedb`_^^^^^__`ccddccdeedcccccdddehiihda`a``_`abcccbdddcba``_______`aa`_`abceeffgggfedddb`_]]\\XWY[\\]]\\\\\\[\\^_^]]]]]\\YXXXZZZZYXVTPNLE>=84413<C?;;<75436899<>@BFHJKJJFCCEFGGFDEGHC?;72012468<AHMPQQRQRQONPSUVZ^^_^]_bfb^^adcbdefggghknmjiknoqsuvwy|}}}|{{{|wurz{wocbcfhklmljhe_YRPPPPMJFCBBCCBDGC>??>;<==<::@GFDFEEECACGJKJID@??AB@::=BCBABEJLMMJKNKLSSQROIKMOMNOOOWYT[XSQOTTRYYXZ\\[Z]abb``aaccab``aba_`aa`abdccehkjha]`^ZYYXXRQ[WJIKQW]]_```cceedgjlprsuwy{{}}}}}}}}}}}}}}}}}~~~~~~}}}}}}||||{{{{zyxxxwvutstsrrohD8=20DJKB;H>B<8=EJKGIND87401011027?CA;89A:877:986;?BDFH>AC?IUYUSUVVXVSPY_]]`\\bdea]\\^[`^]\\ZYYYYZ\\^_``__`abcccccddefhjjjihgfeeddddcbbbbbcdeeeddddefffffeeeeeegkpxulklklkjkkkklmmnnmmmlllllllmmmmmmmnnmmnnoppppppoonnnnnoooonooonnnopqrqppoopppppopqqqpooooonnnopqqqqqqqqppnmlkllmnooonnmnnnnnnnnnopppommllmoprtvxz|||{zyxwxyyz{{{{{zzyxwxxxxxwxwwxyyz{||}}||}}~}vrnjiiijkmmnnoppqqomllllmopqqqpopstxz{{{||}~~~~~cbaaaa`_^^^^^_`bbbbaa_]]\\]]^_acddeeeeeffggfca^\\\\\\\\]]^_aaccbbdeeeeeefffgikllid`]]^__^^^`cdefgggfeca_^____^^`aaaabbdfhiijjjjifca`_^\\[\\[YXY[]\\[ZYXWXZ[[[[[[[ZYYY[]]]\\[YVQHC?;54336639EC:9>97669<>>??ADHJLKIGECDFHHHHGEDEE?941135779<AHNQQPPOONMMOSSUX^___^`bf`]^adcbdefffeejppjkmoqrtuwyzzzzyxwuuwrokrtofadgknoomkiiifaZUSQPMIFB@AEFGFEBFC>=>@@?=::@GFCB@AA><?EJJIIEA?ADDDA>AGHEDEHMPPPLJONPTSSTOKJLPONTSQZZT^XWVTXUU^\\\\\\]\\[^dedbacdfeeecbbba_``__``bceeghgd_^__\\[[[QLTVMEHKQZ\\_aa`bfdgd``dhknoqtvyz|}}}}}}}}}}}}}}}}~~~~~~}}}}}||||{{{{{zyxxxwvutttssrpe;1:=<EJLD<P@C<8<BHMIDF>200/0233249@EC>97@<777<:97=EGIKK>DC<DPTSSSSTUWVQZ_[[\\[^^_\\YXZX^]\\ZYXXWWWZ\\]^^]]^_bcddddddefhiiihhggffeddccba``abbccccccefffffeeeeeeedegls{znkllmlllkkkklnppponmmmlllkkkkllllllmmnnnopqqqqpponoooooonnmnnnmmnopqqpooooonmmnopqqpooonnmmmnopqqpqqqppponmmlmmnnnnmmlmnnnnnnnnopppommlmmoprtvxy{}}}|{zyzzz{{zzzzyyyxwxxwwwwwvwxyz{|}~~~~}~~wqnmlkjjklnopqqqrrromlklmoqqsttsssuwyz{{|||}~~~~~baa`___^]]]]]^_`aaa``_``````aceghhhijjjjiheb^\\[[[[[\\\\^_``__^_acdefgggfggfec`]XY[\\_abbcbddfghhgfedbaabbbaa`_`__^_acdegiijjjhda_^^]^___\\[]_a`_^\\ZYWWXXXYYYXWWYZ[\\[ZYXWSLA64554699:35AF<79:;::<>@@@@BEIKMLJHFEGJMNMLJGDCC<51136789;<AGLNMLJJIHGFILLMS[]\\]]_bf_[]adddfeeddccfkqtttsssuvxyxvuuutqonpqkcgkf``eilnpokijjkhc\\WTRQNJGFCDHIKHEBMH<;?A@><99?EDA><=>=<>CFGHHGDCDHHIE?BJLIGGJORRTQLNQTWUXWNRNOTTTWUTZZU_\\\\ZXZVYa____\\[_eedbbdgifffdddca```_^``bbccdddcaaa`^]\\WNOWRIEJOPXV]```bgfib]]`cgikmpsvx{|}}}}}}}}}}}}}}~~~~~~~}}}}}||||{{{{{zyxxxwvuttttsrpe;1>LQONJC=VEB:;=@EIG>;70--/1345458>BA<86=?788:::7>HIJKJ@FA:AJOSVTRPPSTRWZVXVWVVXUSTVU\\]]YXYXWWWYZ\\\\]\\\\]^`accdddddefggghhhhhgfedcbba``abbcccbbcdefffeeeeeeedddeghlprtxz|yspqrttrpomlkllnoonmmlllllkklmmmmmmmmmmnnnopqqqqppooopqqppooooonmmnopponmmmmmmllmoppppqqqponmmnoppoooooooonmmlmmnnooonmnnooononnnnnnmllklmnpqstvx{|}|{{zzzzz{{zzzzyyyxwxwwvvvvwxyyyz|}~~~~~xrpoonnmlmnpqrsttsssqolklnqrtvwwvuuwwyyzz{{|}~~~~~aa``````__`````bbaabbaccccbabdfhijjkkkjiifb_\\ZZZZZ[\\\\^__`_]\\\\`bdehihgfda]XVVUSVWY[]^`babbdfeedddccdeddccba`_^]\\]^`bdefefeeca_]_aabdcc`_abdedb^]\\ZYYYXXXWXWWXXWTSTUUSKB9329<?AA=;65;B;57;=???>???ACFJLMLKIHIJKMPPNKGDA?93136899:;=@FJKHFEECB@?BEGIOWZZZ\\_ae_[[`ccejgecbcde``irxwtttruwvpjkmnkihijhabebacfikjlkjklkjhaWRQQPLJJIFEIKLJGCQH89<=<;999=AA?<;=??>?ACEILKGEFLOLHBDKPNKKLQUUUVRSVWYY\\ZOVRRUYZZYY\\ZW_``^[\\Z\\baa`_[[^ddbacfijgfeddddba``__``abbabbcddccba`YUOQRNMKMNQRO]_]]bhghbZ[\\^bdhjloruy{|||}}}}}}|}}}~~~~~~~}}}}}||||{{{{{zyxxxwvuttsssqpc>6=BHNMFA=VHC;?>?BD@742/./01356546:>=976:>8;9:::8?HIIHIAB<7>EIPWTNLKNPMPQOQOTOORQQQTUZ^^YXZYXXXZ[\\\\\\\\[[\\^_acdeedddeeeefghhhgedccbba`abccccbbbbbcdeeeddddcccccdddddegknrxyz|}~~|ywrpnmllllkjkkllllklmnnooooonmmmnnnopqqppppppqqqqqqpoonmlmmnnnmlkkkkllmmmnpqqrqqpponnmmnopoqrrqponnnmlmnnnopppooopppppooonnmmllklmnpqrsuvx{{zyyxyyz{{{{zzzzyxvvutssrrstuvvwxyz{|}}}~~|xurrqqpooooopqsuvvvvutrpooqsuuwxxwvwxxyyz{{|}}~~~~~a`````aa``abbbcbbaaba`bccbbaabdfgiijihgda][YYYYYYZ[[]^``__]\\]`bbekjiigc[XUVVYZZWWWYZ]``aabbaa``bbdefedcbba`_^\\[[\\^^^^___`_^^^^`cdfefeabdfgigb_][YXXXXXXXWWWVSNFGKPSL@77:<BGMMG<95454635;?EEA?>>?ACFILNMLKIJJJIKNNKFC?:52248:99::<@FIIFDCA=<:9=@DHNUVVW\\^`c_Z[_bbfmjdcbbdfaZW^mtrqpkltug_aflebbcba`_agfehihhghjjkjie^RKLLMJJKJGGIKKJGFF?:8:;;:99:=@@@>=@DECAABDIQOHGILOPMHFKSTNLNSWWTUWXYZZ[][STXXWZ^`a`ZYYadca^^^_bbba_[Z]cb_`cgjlhdcccdddbabaaaaaaaaabcdeedba`YTONNNSSNMRMK^^VT_fdf_UWXZ\\^bdgimpuwxxz{{|||||||}~~~~~~}}|||||||{{{{{zzyxxxwvuutssrqo]A7=EGJHC?=JHC=A?>@<720//./013443346::8768;8<::;::AHGFGG?<47<ADKQOKIIJMMLKLLLPJKNQTPUWW^_ZYZZYXYZ\\\\\\\\\\[ZZ\\^_acdddddddccdeggfedcccbbaabccddcbbbaabcddddccbbcbbccdcbbcegiknu{|upmkkiijkklllllmnnooonmmllmmmnnopppppppqqrrqqpnmmlllmmmmlkkkkkllllmnoqqqponnnmmmmmnprsqrqonllmnnmnnnnoponmnnoooooonnnmmlkklmnpppqstvwyzxvtuvwxxxxwwwwwvsqonmljiiiijkklostuvwwxyxwusrstutrpoooonmnpruvwwwwwvutuwxyzzzyzz{{||||}}}}~~~aa``aaaabbcdddddca``_^^^^_`___`abdeedca]ZXVVVWXXYZ[\\^`aa``__acdbbfda_]ZWVTUVXYZWVVWYY[\\]]^^]\\[\\^^`aaa``_^^__^\\ZYZ[[[ZZ[\\]\\]_``beffgggdegghjgb]ZWUTTUUVWXXXVRME;;BJMF:58?DKORL>754222224<@DDA><<>@CFILNNNNMLKIEEGHGE@;53258;;989:<?BFHHDA>;878=@CFLSSRS]\\]`^\\\\adaiqmfdccglh_WWcmmmkgbbndYY]fb]\\^^]^]_dgecbdfghiihge^UJDEGGGGJJFFHHGEDB?;999889:<>@CDDCBEJJGECACKRTKFLPQQQMIJSXSOPTWYWWY[\\\\\\\\^aWV[\\Z^adec\\Z]dffdbaabddca^[ZZa_\\^dillgbaabeefedccccbbbaaabcceedcb^WTQOPSXUOOUNN[WNP[]^bXORTUVX[]`aginqstvwyz{{||||}~~~~~~~}}||||||{{{{{zzzyxxxwvvuttsrpp]E>ACCFE@<;DHD?A?;;71/..//0012333346::877898>;<=<>DGEDED=927<?BEIIJJJJKKIHIKMPJILQWSXYW``[Z\\[Z[[]]^^]\\[ZYZ\\^`bbbbbbbbbbbcdddcccccccbbcdddddcccbaabbbcccbbbbbbbbbbabbceeffjpw}~{xpkhghjkllllllmmmmlkjjkllllmnoppppponnnoonmlkkjjkkkkkkjjkllllkklmopqqponnmmmmllmoopommljikmnnoonnnmlkihijjkllmmmmmlljijjkllmlklllmnonllnpqqrrrqrrqpoljhgfecbaa```__bfhijlmnoonmlmopqpnlkjjjiiikosuwxxxxwvvwxz{||||{||}}|}}}}}|}}}}~~~a````aa`````_`a``^^^]ZZZZ[\\[[[[[[[\\]]\\[XVTTTUVVWWXYZ[]`acdbbdggdba]YWVTSSSTTVWXXX[\\\\\\[[\\[[ZYXWWXYZ[\\\\\\[[Z[\\\\\\[YYYZYYXYY[]]^^^]^``abbb_`baaa]YTRQPPPQQRTUUSNHB<65;CC=76<DIPQQF725542567;=?AB@><<>@CEHKMLJIHHIHHEDCCA;62148;>=;::;;>?DHJGC@<:9;?ADFKPPOQYYX[YWX^edhnngedchmjbYU[cghgd^Ub^VVXb^XWYYZ[[X^`abdfijiea^\\[VJBAACDEFIHFFFFCA@=;::9999;>ABDGIIHGJNMJIGAAIPSMFLSQORSOLOVVSTVXXXWZ\\\\[\\[]a\\Z]][_dghf_]`effedccdddca^ZXX_\\[^dimkd`_`befhgfedeeddccbabccddca_[WUSSTW[TLRWPRYOIRZRY]QIOQRRRTUWZ^agkmortvwy{||||}~~~~~~~~~}}||||||{{{{{zzzyxxxwwvuttsroraKEEB@DC?<9CGC>>?;62.-//001123444479;<<;:9:9>=?A@CFFEEFE>94:>?BDEHLLKLLKJJLOOSMLKRZX[\\W_`\\\\\\Z[\\]^__`_][ZZ[]_bcbba```abbaabbbbbcddddccddddddccbaaaaaabcbbbcddccccbaaabcccceglsvxz~{rmjjjjjjjjkjjjjjihhhiijjjkllllllkkkkllllkllmmmmmlkkjjklnnlkjklmnoomllkjjiihhijjkkjhgfffgilmmmmljhfedefffghhiiihhhgffffeeeddca`accb`beghijkkjjjiigfdbaa`_______^\\^`_`acdeeddcdeghhgedbcbbcdeglptwxyxwutsuwyz{||}}}}||{{{{zyyyzz{|}~~~~^^]]]^^]\\\\]\\]\\\\\\\\[[ZYXXXXXXYXYXXXXYYYXXVUTTTUTTTTSSTTV[`cda`_cdaa\\WTSSRRSTTUVVWXY[]]]\\[[ZYXVVUUUUVWXXXXXXYZ[\\\\[[[[ZYYYYYZYWWWVVXXYZYZWVVUUTPNLMNOPPPPQQROJE?;989<=;87=BGJMJI=4257558:;<==>?><<<>@CDFHJGC?=<BFJJFB>9421359=@?<<;<==?CGKKHGC@?@CDFGJMNMOUSRWRMPV_dbeihfedegfdYTWZ^cc`^SYZTWX\\ZXVVVWXYXZ[^]_dghd\\VQMMKC==?ADDGIGEDDDA?><<=>>><=AEGGFJNNLLPQPNLKEAENQMEISQNQVSOLPVXZZZZZY[ZZZYVW_]\\^^\\^djjg`]`bbcdcbb`ddcb_YV[a]]adhkib`_`behiggfeggffedcbccbbaa_]ZXWXWV[[SQRXTVYMKYULY[QJOPQQPNNPTUZ`egimpstuy{{{{}~~~~~~~~~}}||||||{{{{{zzzyxxxwwvvutrpmm^RNMC;=?>=;@B?;8;930..002334456677:<?@>=<<=<AABDDFHEGFHIA;9@CCDDEJOOMNOONOPSRSONMR\\Z^]W[^]]\\Z[^^^^_aa]\\\\\\\\^acddba`_`aabaaaabbbbcdddccddddddcbbaaaaa`ababcdeedddddcbbaabbddcehknqv{}~~}sjhggfffgfffffffgghgggggggggggggggghjlmprssutsroonjjkpsrmkiijkklkjjjjigfdcdeeffeddcbbbdfggggffdba`aabbbcccccccccbbbbaa`__^^]]^^^]^`aaabcbbbcbba`_____^^^^____^___^^________`aaaa`__```abcfjmruwxwtqnnnpsuwxyzzzywuuvuutssrsttvxyz{|}~~]]]]]]]\\\\\\\\\\\\\\\\\\[[ZYYXXWWXXYXXXXWWWWWWVVTTSTSRQQQQQQQSVY[]]\\[ZZYWUSRRSTUUUVVWWXXYZ\\]]\\[ZYWVTTTUUUVVWWWVVVWYYZZ[[[[[ZZZYWWVUTTSSSTUUURSQQPONLLMLNNOOPPOPNKE<899::;;658>BCCB?95436777:;==<;<====<=?ACEEFDA?=>BEIJGA:621247:=@?=>==>?ADGKMMJGCCBEEFGJLLLMTQOTQJOVZa^`ffeedadddZUWVY]`_^UTVSVYXXWUUVVVXYWY]^][[ZUPLGADB?==?BDCGIGDBCB@@??ACEFECCGJNMHMXXQRUTSQONKDEMQIBENQKOWWSRNOUYZZZZYWUTSSMPUX\\^]Z\\diie]T^\\X]__][Zdccb]WX^aaabdghgb``abdhjhggefghhgfeddcbaa__\\[ZYZYX\\\\UUWZX[YOQZMK`ZSOQTTSNLJJQNT[`acgnppquwxyy|}~~~~~}}}||{{{|||{{{{{zzyyxxwwwwvutpmkb[U[QD9;>><;<;:75320///12455667889:=?AB>>>?@BCEFGFHJFHHLLC=>EFEECELQROOQQPQSVSRLMNQZ[_^XX]]][Y[]]]]^aa[[^__acefdcba```aaaaaaaabbcddddddeeeedcbbabbba````abcdeeeeeeedbaaaacbbbdefgkpuxy|}|}~|sigfdddcdcddddeeeeeeeddeeeeeeeeeedfhjlprtuvutrpookikouxwmhghhiiiiiihgfcba```__`aaa`_`bccdddbba``__`__``aa```aaa````__^^]]\\\\]]]\\]]_^^^_^^^__^]]]]]^_^^]^_____^^^^^^]]\\\\\\]]]^^_^_^]]^_`abcehknqttrmhhkifhjlnpqqonmihkplhggffffhkopsvz|}^^__^^^^^___^^^]\\\\[[\\[ZYZYYYYYYYXXWXXXWWUSRQQPNNNOQPPOPRTUUTSRQQRRRSUWXYZZYYZZZYXYZ[[ZYXWUSRSUVWWWWWVUTTUVWWWWXXYZZZZZYVTTTUTSRRRQPOOONNNMLKKLMNOPPPONMHD<768:<;:8559==:976544568:;<<<<;:;=>>=<<=?ABAA@@?@BDEEGH=6201589:<?@??@AACEGINQSNIJIGFDEEHIIIKRMLRRKOYTZYZ`cced\\`dc[VXTTZ_`^VPSPW[ZYXVTUUTXZVXZSOIGEDDCB?CCAAABEEDGHEBABCEEEEGJMMNLKKNTUMOY[UUXVVVSQOJHKQQHFNSKKUWUVRLPWYYYYXUPNMNIIPUXZYUYbfc\\UOWSRVZXTQU___`[W[beededefecbbbcdgjhjihhijiiihgfecba__^]]\\]\\Z_]YY[]\\^[UXYINd\\XTUXXVOJHJQKPX]\\]bfijmrtuvvyz|}~~~~}}|||{{{{||{{{{zzzzyyxxwwwwvtufciYVXYUH:9;><9854210//01234678889::;=ABEG>@@CDEFHIJIKNKLLPPHBEJJIGDFMSUPPRQOPSVSNILPPVX^]WVZ]ZYZ\\\\[Z[]a_]`aabdfhifdcb]\\___``aaaaabcdddeeffffeddccbbbba``__``abcddfgggfedcbba`aabcccdhloqtwxy{}sgdabbccbcddddcccccbbaaaaabbaaa``acfjnprrtrrpnnrmkkmt|}uidccdeeeeeddba_]]\\\\\\]]^__^^^_`____]^^^____^]^^^^^^^^^^^^^]]]]]]]]^_^^^___]]\\\\\\]]^^^]\\[\\^`a`_^^__^^]^^^^^^]]\\\\\\]]^___^^]\\]^`aabbcefgikkieaaca_^`abdeecba_^abb^]]]\\\\]^`cegjnoort_````__`a````__^^^]]^]\\[\\[[ZZZZ[ZZYYYYXXVTSRQPOPQRTSRQQQQRRQQPOPPQRSSUWYYZYYYYYYXYZ[ZWVUTRQQRSTUUUUTTSRRSSTSSSTTUVWWWYXVTVVVSONNNMMLKKKKKJIIIJKKLLLLKJHC>64369:964558:866555678::<<<<<<<<=>???>==<>AA@@ABDFEDBCD:42147::::?B@ABDEGIKLPSVLGLJFCABCFGHGJLJJMQNQZVUWY]bcde]\\d_\\YWVTY]`]WNROV]][YWUVVUXXWWSH@<:;>@BDBFHHGFEEECEECBCFGKLKKMOSTUSPMOUYRNUYVUWVXYVUUROOSXQKSVNKRUTURKKPRSSSSPKIHJGJLPSSRQV]^ZTQPQMRWXTNNUWY[^ZY^cccdeddeedccddegjhjiiijkjjjjihgecbaaa`_\\^`__^\\]^`_a_]^VHTe^ZVX[[XPJINSLQXZZ[^`beinpqrtuwy{}~~~}}|||{{{{{{{{{zzzyyxwvvuvuutri[[d^ZONVRE??>;7320//010123446899:;;<<>ACFGBABEFFFHIMJJOONNTSMGJNLLJGHMRTPNMLKKNRQLHLQOQUXZWWY[VVZ[YVVXY[\\^bbccdfhhec`[WWYZ[[\\\\]^_`abdeeeeeffeeeeedddddcbba````abcdfhhhgggfedbaaaabaabcfiknpqsux{~vgdeddcccddddccccbaaaaaaaaa``___aceghgjjmmmljjnlmmknsupfbaabbabaaa``_^\\[\\^_`a`__`````aa`_^_^_`aa``_^___^________^]]^^^^^^^^_`___^^]]]\\]^^^]\\\\]_bccba`_^^]\\]^____^^]]\\]^_____^]]]^`aabaaaaabbca_\\[[[ZZ[[[\\\\\\\\ZYY[\\]\\[ZZZYYXYZ\\\\^`bbaceaaaaaaabbbbaa```_______^^]\\[[[[\\\\[ZZZZZYWVVVUUTTUVUTTSRSSTUTSRPOONNOQSTUUVUUUUUUTTUVUSRRQQQQQQRRQQRRRQPPQQQPPPQRSSSSTVVUTTSQNKJJJJJIIIHHHGFEFGGHHHHHGEC=9423578765567898777789:<<===<==>>===>????>=>==>@BDGGC>>@83247:<;;9=@BCEGILNOOQRTJDKLE?>@BEGFGJKKKMNPTZ]TWX]beffdY^`^[WVVX[^\\ZRVRW_`_ZVUWXWUTRNH?;:<>ACEGGHJJJGFDC@BBACFJMPQPPRTWWXUQMMPUQLMPPPQPTWVTUTRRSVTNRUOKNPONLHGIJKKKKKIGHKIKLPQQQQUYXTPQQQNVZ\\VQUWSV[\\YZ\\``aaccdefeedeeegjhjiijjkkkkjiihfdcbbbba^`b```_aaa`aacaULY`\\YUX[\\XPLOTUPTZWXZ][cfhjmmnqqsvx{|}}}||||{{{|||||{yyyxxwusrrtsqpkc_c``WF@PSKB?;7420/1122112345789::;;<<=@BEGCBCEFEEFIMJINRQPVUPLMOOOLJILOPMIGFDEHMNKHJPOPRVYXXY[STZZTQTWWVX\\^aaabccc`_YPORTUVVWXZ[\\]_bccccccddddeeffffffeddccbbbabcdfhiihhhgfedcccccbbbbdfghjjlnqtw{wlgggffdcccdddeddcbbbbbbbbaaa`aaabccaefjhjjhghhhhgghigdcbbbbaa````_`__^_abbccabbccccddca`aabbbbaaa`aabaaaaaaa``_^^^^^^]]]]]^]]]\\\\[[\\]]]^^^^_`abccbaa`_^]]^_``a```__^^^^^^]]]\\\\]^_`a``_^]]^^]\\[ZYYXYZZZZZZZYXXX[\\[[[[[ZZZZZZYZ[[[[Z[\\abbbbbcdcccbaaaa```````___][[\\]]^]\\\\[ZZYXWWWWWWWVWVUTSSTUVVUSRPNNNOPPRTTTSRRSSRRRQTSPQRPOQQQQQQQPQRRRRQPPPPPPPQRRRRRSTSSSSQMKIIIIIIHGGGGFEDCCDEFGHGEB>;8532356787778999:98889:;<=>===>???>===>@BA@@???@ABDGFB<:863359<==;9>ABCGJLNRQPPPOHCKMD:=@ADGFFIKKLOLPUX_XXX\\adggi^Y__YUVVVX[[[ZZYZbda[WWXYXPKF@<<=?CFFDDGGHJIHFDCA?@@@EHMORRSSTUVWWTQLJKJIHGFDFFFMPPPPQPOOONLLNNKJJHGGGFFFFFFGIIHIMMMNQQRSSUVUTSRRSU[b_\\YZWSU\\\\Y[\\^__`bccdffeefefgijkihlkkkkkjjihfedcccba^aca```bcb_abf`VPVZXVQZ][WPLU\\UVXZTX[Z]dffgjjlnooquxz{{{||||{{{{{{|{zxwwwvusrpqqpnlihd`ZPVK8DIE>:74211133321113568::;<==<<=@BDFCBDFGFEFJLIHLTQQVTPMOPQQNKIKMNJEDDCAFILJGIOPQRVY[ZYZTUXWPMRUVWWWX[[[ZYYWUQMKLMNOPRTVXYY[]^_^^___`abbcdefghhhgffeddcbabcdfghhhhhhgfeeeeedccbbcddeffghjmosvy~|ojhfedcccccddedccbbbbbbbbbaaabbbbbccefedeffeedccccdedbabbba`a`````a```bcddcddeffffggfcabcddcbbbbbbbbbbbbbbba__^^]]]]]]\\\\\\\\[\\\\[[[[\\]]]]]^^_`aabbaa``_^]\\]^__`aa`___^^]]\\[ZZYZZ\\^_``_][ZYZ[[ZYYYYYXY[[[Z[[ZZYXZ]\\\\\\\\\\\\\\\\\\[ZZ[[\\\\[ZYYbcccddeedddccbbbbbaabbbaa`_]^^_``_^^]\\[ZYYZZZZYYYYXWVUUVVWVUTQOONOPQRSTTSRQSSUTTSQSSQTVTTTTTTTTTTUVVUTSRQPPQQQQQQQPPPPPOOPOMLKKKJJIHGGFEDCBAABCDEFEA?;97545678:::::;<<<<;::::;<>>??>>?AAA@>=<>@CEFFFEEDDDDEE@:75346:<>??=;?CCEJLNOQPNLJIGDLOC:>BCCIGFJLLNSOPV]^[VW\\behhjdZ]_[STVWYZ]^^^^]^cd]YXUYYNF@<;=?EILJHHKHFFEDBAA@AA@@HJNOQQRRSTUTTPMIGFEDDCA@CCCILLLLMLKKKJHHJKJHFDEFGGGFGGGILMKLPQQQTUVWWWWWVUUUVY]aa`^^WW]_Y\\\\]]^_`acdeghggggghijljhmllkkkkjihgfeddcba_acaa`aadb_bde_WSSTRRMX\\YUNNW^VV[WQZ[UYcb]_edegijlptvx{|{{{{{{{{zxwvtttuvutqonnljhhhijd\\XWOCAA=74322233555321159;=>>?@A@@??ABCCCCDGHHGGJMIEISQPRPONOPQQNKIJKLGCDEEDHHKJFGNRSTW[]]YYRRTSMKQSSSSSTTSOLJIJJIIJLNOPQSTVWWXYZZ[ZZ[[[\\]^^`acehiijihhgfeedccdefgghhhhhgfffghggffdcbbabbccdehjlorx|ogeedccbbbbcdccbcccbbbbbbbbcdcccbaabbb`abb``````abccbaaaaaabbbbabccbccdfgggghiiiijjhedeeeedcbccccccbbbbbbba_]\\\\\\\\\\\\\\\\\\\\\\[[Z[[Z[\\]]^]]\\\\]^_`___````_^]\\\\]^^_`aaa_^^]\\[YXWVUVVY[\\]]\\[YXWXXXXWWXXXYZ\\\\\\\\\\\\]]\\ZZ_^________^]\\\\\\\\[ZYYYcccdeeeeeeeedccccccbbbbbba`_``abaa`_^]\\[[[[[[[ZZZZZYXWWXXYXWUTRRQRSTTUVVUTTUWYYZYXYYWZ[YXXWWWWWXXYZZZYVTRRRSSSSSRQPPPQPPONMKIIIIIIHGFEEDBA@?@AABCBA>;975555679;<<<=>>?>>=<<<<=>?@@@@ACDCCA@?>?AEGIIIIHGFDCBA>9667::=?A@?>=BDBDJKLKMLKHGGHEMOA9>IECJLHJLNPVVST[\\[TW\\_beige`[]]VSUX[]_abca\\X`e^ZXVTSKD><=ADJOQMHHMHDCCCBDEEFEDCIKMNNMMMMNONNKIGEDCBBBB@CDDHJJIJJIIIIIHHJKIGEDFGHHIIIIJLPQOOSSTUXYYZZZZZYYYYYZ\\^_cb^W\\b`\\___`aabcdeehihhhhiijkmlinmmmlkkjihgeedddcb`ac`^^^_``]]`]WRPPONOLVZUQKKRYUXVQR[SNR[UQTZY[]_agkmotxyyyyyyyyxvtrqpqstsrpmjhgdcdfffgiea]RC<952334456888753239?ABBBCDEDCBABCCDEFFHJJJJMOIFIMMLLLKKMOPNKIHIKLHEHIKILKMLHGOSTWZ]^^[YPOQQKJNPOOOOOOKGECBDFHLOQRSTUVWXXXYYYYXXWXXXYZZZ\\]_bdghiiiihggggfeeffgghhhhgffghiiihhggecbaa`_`acdfhijqzyhdccccbbaaabbaaaaa````abccdeeedcba__`^^__^^^_____`_^]]^_`abddddddcccbadijhijiiihhgfdccccbbb`````__^^^^__^]\\ZZ[[[[[\\\\\\\\\\[[\\\\\\]]]^___^^]\\\\]^^^^^__^^]\\\\\\\\\\\\\\]]]]]\\[[ZYWVUUTTTVXYZZZYXWWYZZZYYYYZ[[]]]]^^__^]]a`aabbbaa`_^]\\[ZYXWWWdddeeeffffeeeeeedddcbbcccbaabbbccba`_^]\\\\\\\\[[\\\\\\\\\\\\[ZZYYYZYXWVUUUUUVUVVVVVVWXZ[\\\\[^^\\^_][ZZZZYZ[[]^__[XTSSUVUUTRQPQPPPOMJKHDDGHIIIHGFDCCBA@@ABAA?=;:9888865679<==>???@@@>==<=>>@@AAABDDDDCBBCDFGHJLLJHFB>;:::98:?B?>BCB?=>DDBEIIIHJHICFIJGLMB:?JLGIONKKNQX[YXZ\\]YZ\\]_aagec`^^YVXZ]_`bcebZT[^\\ZUQOLE?==?CHMSSMHFHFBADFGGHIIHGFJMMMJIHHHHHIJIGFEDDDDDDDFGGIJJIIIHHIIJJKLLJHGGIJKKLLMMNPTTRRUVXZ\\\\[[[[\\]]]]]]]]^bec_[`dca_`acddefeefhiihhhjkllmkjonnmlkjihggeeddddcaaa_]\\\\\\\\[YWVRLKLNMMNLSVQMIHLQOSPKNVMHMSMNPRSVXZ]cggjpvxz{zzzzzxwtsrqrspnkigfedfeegfdegaVVL:742456:87:=<:87878>DDFDEFGHIFDACEFGHGHIJKLMOOLHIJKJJHHIKLLKHHIKKKJILMNLNMNNKJPTUX[\\]\\YVNMNNKKMLKKJKKLJHFFGHKOSUWXXXYYZ[\\\\[[[ZZYYYYYZZYYYZ[^`cfhiiiihhhiihhhhgghgggfffghijjiiihffedcbaaaabcdefipzsifdddedcbaa```aaaa`aabcdefgffedcb``a__``^_`````^\\[ZYYZ[\\]_abcdeddcccachiddedddccbba``^^]^^]]]]]\\[[[[[[\\\\[[ZZZ[[\\\\\\]]]\\\\]]]]]]]^_``__^]]]]^^]]\\\\[ZYYYZ[[ZZYYYYYYYYXWWVVVUUUVXXYYXXXXY[\\]]\\[\\\\\\\\\\^_____`a`_`cbbcddca`_^]\\[ZYXWWWWdddeeffgggfeeeefeeedccbbbbabccccccba`__^]\\\\\\\\\\^^^^^]\\[[[ZZZYZXXXWWWWVVVVWWVWWYZ[\\\\\\\\[\\\\[ZZZZZZZ[\\]_`^ZXTSTVVVTSQPPPPONMKHIGCDGJJJJIGFDCCBAAAABA?=;:999:996678:<<>?@@@@@?><<<>>>??@ABBCEEDDCDEFHJKMNMID>997668:<>BEA?BDA>;>ECAEHHFEGFI@FKLIJLD?AKRNIOULLNPW\\\\ZZ[]\\\\]]]`affec`^[XXZ^a_`a`_UPQSSRQLGD@>=>@DIOSSMGEEECBEGIJKKKJHIKNOMIGFGGFEEGGGFEEFGHHGGHIIJJJIIIHIIJKLMMLJIIKLMNNNORSRSUUTUVXZ\\^^\\\\[\\^^___`a```deb`_beed^ceggffgffghhihghjllmljoomnmljihgffffeeddcbba^\\[ZXXVSRQPNLLLLLMMPOLHFEFHHIHJLKJJOOKPOPSVVX\\bcdgnuxz{{{{{{ywutsrrqnkdgifejfffheeb^ZWH=944356;?;7=E@;9<?;=DDCGFGIJKKKGBCEHIJIIJJKLNOOLJJJJJJIIIJKKIHILLLJJKLMONONOOLLPSVWYYXWTPNMNNLKMKIIJJLLLLLMOQTZ[Y[\\\\\\\\\\]]]]^^]\\[ZZ[\\\\\\\\\\[YZ[\\^acfgghhiiiiiijjihgggffffghhijjjjihgggfedcaaabbccccfnx~rhedfgfecb``__``a```abccdefeedddcbaa`_`a``aaba`^][YXXXYZ[[\\]_accdcccbbcba`^]\\[[\\]]^^][[Z[[[[[[[[ZZYYYYZZZZZZYZ[\\\\]\\\\\\\\\\\\]]\\\\\\]^^__`_^]]\\\\]]]\\[ZYXWWWXZZYXWWWWVWXXXWWWWVUUVVWXXXXXWXY[\\]]\\\\\\\\\\\\\\]_____````acccdded`\\[[ZYYXWWWWXXddefghiiihhgggggggfedccbccccdddeeddcbaa`_^]]^_``a`____^^]]]\\\\\\\\[ZZYXXXXWXWWWWXYYZZZZZZYYXWWXXXXYZZ[[ZXWUUWWVTRQQPPPPNLJGDIGEIMNNMMLJHFEDCCBCCB@>;9:;<<<==99:::;<>@AA@??>=<<===>>>?ABBCEFGHHHJKMNPRQNG@:632359?CCFHD>BC@=:@HDBGHEBBEDJ;ENOLJJGDDKPTOQUMNMNSY^^]\\]]^]]]_adghgb^\\ZVUW[[YZYVOLLKLLJFCA?>?ABEJPSPJFDDEGFHKMMOONMKLNRSPIFFHHGFGGGGGGIJKLLKKKLLKKJJJIJKKLNPPPNLLMNOPQQQSUVUVYXWXY[^_``]\\[]_accddedddghdcceihgbgijigghgdegghhfgikmlkippnnmlkigffffffffedcb`^\\YWVUSQPONMLLKJIJLLLJFCBCDEFGIKLMNPPNSQRTWWZ\\__bejrwzz{{|||zywvtrqonmijigefghhgd`YQLKA:746679=?<8CI@9:@C>?CDAIGJLMNOOKCDFJLMLLKKKLNNNMMMLMMMMLLMMLJKLOOLKKKMNOPPOPQOPSUVWVTQOMKKLNONNNLKKLNPPQRSUWY[__^a``___```aaa`_^^^_````_^]\\[[\\^`bdefghijjjkkkkjihgfeefhhhijjkljjiiiihfedcbbbbaa_afnuz{zulhfghhgeca_^]^___```abccdeeddddddcbbbbbaabcddb_][YXXXXWXXXY[]`bcdcba`_^][ZXWWXYYYZZYWWVWWXYYYYYYYYYYYYZ[[[ZZZ[[\\]\\\\[ZZZZ[[[\\]]^^^_^]]]]]\\[[YWVUTSSSTVVVUUTTTTVWXXWWXXXWWVVWXWXWWWXYZ[\\\\[ZZYYZZ[]_____`abbccdeeeb\\XWWVVVUUVVWXYeefgiijjjjiihhhhhhgfeddcccddeeeffeeeedca``_^_`bbbaa`a``__^^]]]]]\\[[ZYYXXWWWVVWXYYYYYXXXWVVVVVVVWVUTRRRSSTUTRQQQQPQQPNLIFDLJHLPQQOONLIGEDDDDDDCB@>==>>>=<><;;::;;=?BBBA@?>>?@@@@??@ACEGIJLLKKMNPRRSQLC<744558<BGFDEC=AA?=<@IECHJFCEGGK9DOOMJIJLHEOYUQRLNMNQUY]\\ZXXZ[ZZ\\]`ced]YYUNLLRRQQPNJHHGHGFDBAABBDEGJMOLJFEGHLLKLNPRRQPOPRUUSKIIKKIHIJKJJKMNOPPONNNNNMNNMMNNOPRSSRPOPQQRSTTTVXYXX[[ZZ\\^aa``]\\\\^adffghigghjjgffikkfgjlljhdggedffgfeghjkjiinnonlkkihggffffffeddca_\\YWVVTROMLKKKHEDEHJJIGDEFHIJKLNPPRSPOQOSUWWXYYY]^ahnruwyyzzyxvusrpqoqkheb_[]_cb^TLHC>?>959;<=ADAAII<9<CD@?DEBKIKMNOQRNGGILNOOONMMMNNNNNNNPPPPPOOOONOPRQMLLLNNOPPOOOOPRSTSRPLKIIJMPRSSSRRRSUWWXYZ[\\]_baaeecbbbcccdddcbaaabbbccba`_^]]_`accdeefghhhijjihgfeddefggijklllkjijihffedcbbba`_`ceilmnmjfdfggfdb`^]\\]]^^^^^_`abcdddeeeeedcccdccccccca_]\\ZZ[[ZZXWVWY[\\^``a`_^]\\[YWUUVWWXXXWWVVUVWXYYYZZZYXXXYYZ[[[[[[ZZZ[ZYWVVVWWXYYZ[\\\\\\\\\\[[[[[ZYYXWUSRRRRSTTUUUTTTTVWXWWWWXWWVVVVWWWWWWXYYZZZXWVVWWXYZ[\\\\\\\\]]^_```aa`[VTTTSSSSSTUVWXgfhijkkkkjjiiiiihhggfeeedccddeeeeeeffeecbaaaaabbbbbbbb`___^^^^^^\\[ZZYYXXYYYYYZYZYYYXXXXWWVVVVVUUSROMONQRRSSRQRSRQPONMLJHHONLNQRQOMKIGEDDDCCDDDDB@@@@A?<<=<=<;;<=?BEEEDCBAABCCCBBABDFHJLMOONNNORUTQJD=9677:;;=AFD@A?<?@??>BIFEKKGGIJKN=EONNIHLSMEJWWRQLNNOQTVX[ZWVWWVVVX[^]YTQQMHGFKLKKJIHFFEFFEEEEEFGHIKKLLKIHIHMRRPPRTVUTSRSUWXVNLLMNLKMNNNNPQRSSSSRQQPOPQQPPQRRSUVVUTSSTTTUWWVXZZZ[]\\\\]_acca`^]_adfhikkljjklljiggmnimnmligbdecbcddcdefijhhilkllkkkjihggfffffeeeeca_\\ZXWUTPLJJJIFC>@GKHIHGHKLMNNNPRSUUONQQUVWVUUUUYZZ\\aelrtvyywutrrrqooolib]ZSSZ^^ZMFGD>CD=9>A@ADIGEID:;AEB>?EHELJKMOOQRRKKKNOPONNNMMNOOOOOPQSTSSRRRRQSSUTQOMMNOOPPONNOPQRRQPPNMLMORUVWXYYYY[\\\\\\]^___`bccehhgeedeeffggfedccdddeeedcbba`abcccccccdeeeffgfeedcbbcdeeffghiiihhhhhgfedbbaaaaaabbabcdcdcbdeeeca_]\\[\\\\\\\\\\\\\\^_`aabbccddccba`````_____^]]\\\\]^^]\\ZYXXWYZ[\\\\]^]\\[[YXVTSUVVWWWWVVVVVWWXYYYYYXXYYYYZ[ZZZZZYYXXWVUTSTUUVVWXXYYYYYZZYXWVVVWWWVUUUUUUVVVVUUUUTUVVVVVWVUUUUVVWWWWWWXYYYYXWVVVVVWWXXXXXYYZZ[\\\\]][XVUVVVUUTTTUVVWgfhjjkkkkkjjjjjjihhggfffedccddeeeeefffeddccbcbcccccbcba``_^^^^^^]\\[ZYYYYZZ[[\\[[[ZZYXXXXWWWVVVVVUSSTUUTSSTUUUUUTRQONMMLKKMNOOOQPPNLJHGFEEDCDDEEDCBBBBB@===@@>==>>ADFGGGFEDDDDEEDCCDGIKMOQRRQPPPSUXL<66:<<=DBA>ADE?>=<>?A@@CJJGPOGKOLPNEEONOIIMRSPBQWSRPPPPRSUVYYXVUUTRPPQSRNKIIIJJKLLLLLKKIGGIIIIIJKLLLKKKKKJIKKLQWWUSTVWVVTSTUXXVPNNOPOORTRQRTTUVVVUUTSRQQRSRSTTTTVXXVUUUUUVWXXXY[[Z\\^]]^`cdda___acehkmmllllmmoljhglmnqonkhfgc_abbbbbcdfijfghikkkkkkkjihhgfffffggfec`][YXWUQLHHHHFD8?GLGJLLMNQQPPPQSTWWRPQSUVYYXVUUWWVSVYagkpvvtsrrrqqooonje]^MMX[YTLJVSQKEA9EH@DCIFBCB:?EE?=?GLKILOMOOPQRLKKMNONNNMMMMNONNOQSTUUTTTTTSUVVVTROMOOOPPPPRQPQRRQOQRRSTVY[[\\]]^__```_`aaaabcdeghhhggfgggghhgfeeeeefgggeddccbbbccccbbbcccddeeddcbaaaabbbbbccdeffgggffeddbba``abccabbaa`__`bcdcba_][[ZZZ[[[[\\]^_`____```__^^^^]]\\ZYYZ[\\]\\]^__]\\ZZYYWWWXYZ[[\\[ZYXVTSRSUVWWWWVVVVVVVWXXXXXXWXXYYXXXXYYYXWWVUUTSSSTTTUUVVVWXXXXXWUTSTUVWWWWWXXXWWWVVVUUTTTUVVVVVUUTUUUVVVWWWWWXXXXWVVVVVUUVVVVVUUUVVWXYYYXWVUVVVVVUTTUUVWihiklkkkkkkkkkkkjihhhhhggedcccddeeefgggfeeeddddddddddda`````````_]\\\\[[[\\]^____^][ZZZYYYYYXXXXXWWWXZ\\[ZYYZ[\\[ZYWSPNMMMMNOPPOOOONNLKJIHHHHGEEEFFEDCBCDEDB@@CCA@@ABDGIIJJIHGGGGGGFGGGJLNPSTVVUTSQSRSF724<AABGED@?@@<<;<>@CCCFLNLTRINRNQPIGMPPJKORUSIMUVVTTSSTTSSVYXVRPOLJIJLLJHHJLMNOPPOOOPPNLKMNOOQRSRQOOOOOONMOOPTZZVTUWWWVUSTVXXTRQQSRPRWYWVVWXYYYYXXWVUUTUUUVWWVWYZZYXXWWWXYZYYZ\\\\\\^`__`bdec`__adfgjlnnmllllmnmkjgmpqsokifca`bedcbabcdfjgdfjfikjklllljiihhhhiiiihfdb`][YXVQKHGGHHI=AHMGNPPQRSSSRSSTTVXVTTVVY\\\\ZYXYVVWTUVX\\bjqqqqrrqpoooopnjdcQPZYTNILXUUOKI@IJBE@NB:?>9<@B=?BKOLINRKNOPRRKJIKMNNNMMLLLLMNNOQRSTUUUUUTTUVWWWVROQPOOQQRVVTTTSRRUWWYYY\\___``bbcccccbbccccdfgjkkkjihhhhhhihhggggghiiihggggfeddcccbbbbccccccbaa`____`_____``abbcddddcbba`_^_acdeddcba_^]_abbba`_][ZYYYZ[ZZ[\\]]]\\[[[\\\\\\[[[Z[[ZYXVUUWY[\\\\]^^][ZZ[[ZXWVVVWWXXXWWVUSQQRTUVVVVUUUUUUUVVWWWWWVWVVVUUUUVVVVUTTTSTTTTTTTTTTTTUVWVVUTRQPQSTVWXYZ[[[ZYYXWVUUTTTUUUUUUUTTUUUVVVVVVVVWWVVUTTUUUTTUUUUUTTTTUUUVUUVVVVWWWVVUUUVVWWhhikklllllklllllkjijjiiihgedcccddeefghhggfgfeeeefeeeeddbbaaabbbba_^^^^^_``abbba_]\\[[[ZYXXWXYYYYXYZ\\^]\\]^_``_]YUQOOOOOOPQQRQPOOPPONLJIJJJHGGFGGGFEEGGIHEEEGDBACDDEGJKMLKJJJJIHHIJJKMNQSVWYYXVTQNMKA657@IGFHGD@==<;><<>@CEEGOQOVTLQUORRLJNPPMORTVUPJQUWVTSTUVUTTURNIHGGFEGIIIIKMOPQRSSRRSSSRQPPRSUVWVUTRQQQQQPOPPRV[\\WQTVVVUTRSUVUTSRTWSOT[][ZYZ[[Z[[[[ZYXWWXYYYYYWX[\\[ZYXWWWXYZZYY[]]_a``abbcb_^_`degikmmkiijjjklkkinppqkfhidacfdca`bcdehheehjfhjjklmlkkjjiijjjjiihfeb_\\ZYWTQMJIIHINDDJOJQSSSTVUSTVUTTTWWWVXYY\\\\[[[]YXZ[ZYVZ^`efjmprpommllmnnnkY\\eYSUSPXTRPPOFGEA@DL<:@@:9<CEDFNRLGNTHINQOLGGHJLMNMMMLKKKKKKLMNOOPQQQQRSTTVVUVRPPPNNOPPSUSRRTUVWXX[ZZ]bbaabcdeefeedcddccefhklmmllkjihhhhhhhhhhiiiiihhhhhhgffeedcddddeeeedcbbba`____]]]]^^^_``aaaa```__^^__bdeeecb`_^]^_`aa`_^\\[ZYXYYZZYYYYYYYXWWXXYZZ[[[YYXWVUUWXZ\\\\\\\\[[YYZ[[[YXXWVUUTUTTUUUSSRTVWXXXWWWWWVVUUUTTTTTTUUTTSSTTUUUUUTTTTTUUUTTTTUUUTTTUUUTSRRQQSSUVXYZZ[[[ZXWVVUUTTTUUUUUUUUTUUUVVVVVVVVVVUUTSTTTTSTTTTTTSSSSSSTUTTTTTTUUUUTSRRSTUUffhjllmmllklllllkkjkkkjjiigedccddeeffggfffffeeefgffffedddcccdccccaa``aaabcdddccb_^\\\\\\\\[YYXYZ[[[[ZZZZYYYZ[\\\\[XUTSSTTSSSSTUVUUSRSROLKKKKKKJIHHJIIHHHKLNLJIMKGDDFGHGIMNPNLKLMKJIJLMMNOQRSTUUUTSPLGCA=9:<DKIHFC@=<;<<@>?ABEEEFNQQTSOSWSSQMKMNNMQSRSROLNQRQONOPQPONNJFDEEFFGHIIJKLNQRQQTUUUVVVUTSSUWY[ZYWSOOOOPPPPQRTWZZTPRUVUUTTUVVUTTUV[WRX_a_]]]]\\\\]^^^^[XXYZ[[[\\[XY]^[ZZZXWWWXZZYY[\\]_aa`aabcb]\\_ababdffffdcegfhkklknmmnhbghedeebcbbdcddhhghjigjiikklllkjiiijjihgggfdb_\\YXUQNOMMKKKNIJNQPSTSSSSUUUXXUTSUVVU][[[\\[[\\b\\Z]`]\\Y]\\\\^]bdioqrrqooopqpndgkXVfbXWQRQRTKJFBBMJ@@B@98=FJLKPQLGMSHIOOKHEFHKLMMMMMLKJIIJJJJJJKLMMMMNOOPSUTROLMMMLMKIKNMOPRTWYWX[\\[]abbbccdeefgfeddccddfhjllllkjjjihhhhiiiihhhiihhhgghhggffeeeddeffgffedeeedcbbba`_^_``__`__^_```____^``bccccbba_^^^^^__^^^\\\\\\\\[[Z[[ZXWWWVVUTTUVWXXYYYXXXWVUVWXYZZ[[[[Z[\\\\\\[[[[ZYWUTTUVWXXXWVVWXYYYXXXXXWVVVUTTTTTSTTTTTTTUUVVVVVUVWWWVVVVVVVVVVUUUUUUUTTTSTTVWXXXXXXXWWVVVVVUTUUUUVVVVVUVVVVVVVUUVVVUUUTTTUUUVVWWWWWVUUUUUUUTUUUUUVVVVVTSSSTUUeegilmmmllklmmmlkkkkkkkkjihfdcccddeffffffeeffffffffffeeddccdddcdccbbbbcdeefffedca`_^]]\\[ZZZ[[[[[[ZYYXWWXXXXWUTUWWXWWVVWXYYYWVUUSNKKLLLKKKKJJKKIIIJLMONMMQPIEFHHIJJNPQOLJKKIHIJLNONPPQRQPPOMLKG@??=<<?EJIFC@?=<>>>?ABEFFFEFNQRSQPQVSQOLJKJKKMNONMMJLNOMLKHHHHGFDCBDDEFFGIIJKKLNPQQORUVUVVUUTTUVWY[[ZVQNNOOOOPQQRUVYWSPQUUUUTUVWWVUTWY]XU]ab`^^^]]^^^^`_[XXYZ[[[\\[YZ__\\Z[[YWVWXYZYZ[\\]_aaaaaacb\\\\`aaZ]_]]__^]_begjklkkiikfdefefgeeebfddcchhhikfgkjijkkkkjjiiijiiggffeca_\\YVSNKOMNMMLNNOQSSTURSRRVVVXYUURTUUT^][Z[YZ]f]Z^b_]\\^]\\[[__djnqutqoopponljbW\\nj_ZOURSVROLMNRKJFB?<=CIMOOQQOLMLJJMKJGEFHLMLMNNNLKJIIIIIIHHHIJJKKLLLNRTRPMLLMMLKJIIKLNORTVXZ[]]\\^`abcccddefggecccccdfhjllllkjihhgghhhhihhhghhhggggghhggffeeeeeffffffffffeeedccbbaaaaa`__^^^____^___``aabbbbaa`_^^^]]]^^]]]^^]]\\\\][YXXWVUUTTUUVWXXXXXXWWVVUVWXXYZZZZZ[[\\\\[[[\\[YWUTSUVXZ[[ZXXXYYYYYXXXXWVWWVUTTTTTTTTUUUUVVVVWWVVVWXWVVVVWWWWVVVVVVVVVVVUUTUVWXXWVVVWVVVVVVVUUVVVVVVWWVVVVVVUUUUUVVVUUUUUUVVWWXXYYYYXWVVUUUUUUVVUUVVWWVTSRSTTSefghkmmmllklmmmlllllllmlkjigeeddeeeeeeeeeeffffffffggfffeeeddeeeeeeeeeffghhhhhgedcba`__^]]]]\\\\\\\\[[ZYWVUTSSRRSTVY[\\]\\\\[\\]^__^\\ZXVSNLMNPOMMLLLLNNKKKLOOPOOPTSKHJLKLNOPPPNJIHGFEEGKLONNNMMLJIGEDDA?>@??@BDEEB@>==?ABBCEFIJJJIIMPRPNMMPOLJIGEEFGHIJJIHFGHIIHHGFEEEEDDDFGIIIIIIJJIJLMONKNRSSRRRSSTUVVXZYWTOKLNOPPQRSTUUUTPOPSUUUUVWYYXWWZ]`[Zbdd`^^^^^_^^]][XVVWXYZ[]]ZZab\\Z]^[WVVWYZZZ[\\]_``aaa`bb][`c^VZZYWXXXWX^cfhjkjgegjfcbdfgjggggjddcahjkkjeimmlkkjjjjihhhhhggfeedb_]ZWTRMHROOLNNOPRUUUUVRSSRWUUWXXVTSTUQ]aYYZVZ\\ba\\`ea^_```\\^]\\`dgimnllmnmmlkg]U`kkhfWRUUVUUUUVVQSLD??CINQSSSSRPNLLMLIIIHJJLMMMNNNMKJIIIIIIHHHIIIJKLLLLQSQOMOPPOOONMNOPRSTUWY[\\]__`aabcddddefhhdbbbbcdegikkkigeddddeghhhhhhhggggggggghhggfggggfeddddegijjjiihhggffedddcb```__^____^^__`a```abaaa``_]\\[[[\\\\]^_``__^_^\\[[ZZYXWWVVWXXXWVWWWWVVUUVVUVWWWWXYYZYYZ[[ZYWUTTUXZ]^_^]\\ZXWWXXXXXWVVWXXVUUUUUVVVWWWXXWWWWWVVWXYXXXXWWXXXWWWWWWWWWWWWWVWXYYXVUUTUVVWXXXXXWWWWWXXWWVVVVVVVVVVUVWWVVVWWWWXXYZ[\\\\\\ZYYXXWVVUUUVVWWXXYYWUSRRSSSeefgjklmllklmmmmmmmmmmmmljihffeeeeeeeeeeefffffffffgggffffeeeeddefffffghhijjjiigfedcba``____^^^^]\\\\ZXWVUTTTUVWZ\\^`a`_^_`abb`]YVUSPOPRSRPNNNNOQQONNNOPPPQRTQLLNOOOPOMKKJIHGFFEEFHJLLLKIHHFDBBBBA@ADBBBBCCB@??@ACEFFGIJKMNMLKMNOLIGGIGFDDCAABCDFFFEDDFHJKKKJIIJJIHGGHJKLLKKJJJIIJKMMLNPRQQPPQRSTUVWVVVTQOPPQRQRSTUUTSRPONQSSTTUVVWXWW\\_^[_hgc_^^]]]]\\[YXVVVVVVWZ]`b]Z_b]Z]`]YWWXYZ[[[\\]_aabbba`ba[^h\\WYXWUUTUTU\\acfghfcbcggd_dhjmiiiiicddaiklkidjoonmlkjiiihgggggffedb`^\\YUTRMITPNIMOOPRUTSTVTVWWXTTWZ[ZXUWYSYZYXZVYZ`d^_c`^_bcc____acceikjkmopoolgdbgjjgn_XZYYZZZYXWWYPJHKOQTVWWWWUSRQPPMKKMLMLMNNNNONMLKJJJIJJJJIIKIJMPOOORRQQQSRRRRSSTTTUUVVWX\\^^^_aaaaabcccccdffc`a``bcefhiihfdba``abdfgghhhhgfffffeefgffgghiihgedcbbdfhiijkkkjjiiihgfdcb```__```__^^]^_``aaa`aba``^]\\ZYYZ[\\\\]^^^___^]]^^^][YYXXXXXXWVWXXXXWVVWWWVVUTTUVVWWXXYYXWWUTSUWY[\\]^]\\[YXWVVWXXWWWXYYYXXWWWWXXXXXWXXWWWVUVWYZYXXXXXXXXXXXXWWWWWWWWWVWXYYYWUTTUVVWXXXXWWWWWWXXWVVUUUUVVVVVUUVVVWWWWWWXYYZ[\\\\\\ZXWWVVUUUTTTUVWWWWWVTRPQSSRedefhjlllllmnnoonnnnnnnmljiggggffeeeeeeeffffffffffffeeeedddddddddefffghijjjjjjihfedccccbbba`__^]\\\\ZYXWWVVWXZZ[\\]]\\\\[ZZZ[\\\\[XUSRSRSTTTSRQQQQQSSQQQPQPPOOPPNLMQQONLJIGFGHJJIIIIJKLMNNMJHHHEDEEFDEEGEEEEDCBABBDEGIJJKKLOMLLKJIHIFECBCBBCDECCFEFFFEDDEHKMNONMMMMMLKJIJKMMMLLKLLKKKLNONNPQRRQQRRSTUVWXWVUSRRSTUUUTTTSSRRQPQRRRQSTTTTTSUY[[[`heb^\\]\\[[ZXWVUUVVVVVW[_ac_Z]a_Z[_`\\YXXYZ[\\]^_`bcbcb``cc]_f]\\[YXXXWVWWZ]`ccdba`^cdc]chlplkmffededjlnkhekpoomkjijjiiggfffeedb`^[YWTSRNLUPQHMMNPQTRRRVTVXYWTTW[_`\\XY]XWVTX\\V]Z\\ba]_``_cefc_abefgikjhilorsrpnmnqomii_b`^a]^_[YZ[ZVSUXZZYXZZZYWTSSSRONNQQOMNPRRRRRQONMMMLNNNMMMNKMQTTSSTUUUTVSRSTVWXWWWXXXXZ_ba_`bca_`bbba`_`bb^\\]\\]_bdegggedccb`_^_`cdfhiihgfecccbbdeffghiklkjhgedccefghiklmmllkkigfdb```````aa`__^]]^____```a`_^]\\\\[[ZZZ[Z[[[[\\]]]^^^^]]\\[ZYYYYYXXXXXYYYYXXYZYYXWWWWXXXXXYYYXXXWUTVWXYZ[[[ZZYXWWWXYYYXXYZYYYXXWWVVVVWWWXXWWVUVWX[[[[[ZYXXXXXXXXWWWXWXYYYXXYZZZXWVVVWWWXXXXWWXXWWXXWWVUUUUVVVVVUUVVUUUUUUVWWWWXXXXXWVVUUUTTSSSTUUUVVVUTRQQQQQdcdehilllmmnnooooooooonmljhgggggfeeeeeeefgggggggfeeeeeedddcddddddeeefghijjjjjjihgffeeeddcba_^^]]\\[ZYYYYYXYZ[\\\\\\\\[[ZXWXXWWVVTQOPPQSUUUSRRUVTRSSRRQQPONMMNNLKLPONLKHEDCDHLMMMMMNNNOOOMJIIHGGGHHGIIJHHHGFEEEFFGILNMJLJKOLHIGFEEDDCDEFGGGGHEINOKHFDEEGILOPQPOOONNNMKKKLMNNMLLLLLLKMOOOOQRSSRQRRSSUVWWWVUSSSTSSTTTUTSSSSRRRSRQQSSSSRSSTXYYZ_bca]\\[ZZYXWWVVUVWWWWXZ]`a^[\\`_[[`a]ZYYYZ[\\]^_`bdccca`cebbe^^]YXYYXXZZ[[^aaba`_\\`da^dgnpkjjgeeeefjkoleekopomkihijihgffedba_\\[[ZXVTQOONRPQTNMMOQRQOPRRPQTTRRSY`fcWQ^^[_UWY\\[WX_a^^`_^bfif`cdejkkkjhhjmnprrqqtrpokhda]ce[^aba\\[ZYZ\\`g]\\Z[ZZZVTSRQROSTUTPNOQSTTSSSSRQPPPQQQPOOOOPRVWVVVXYZ[[XTTUVVVVWXYYYZ\\`ba_`bb_]^ab`^]]^_^ZXYWX[`deffedccca`^]\\]_behihggfdbbaaabcdeghjkmlkihgfdcdefhijlmnmlkjhfdba__````````__^]]^_^^^__``_^^]]]\\[[[[ZZZZYZZ[\\\\]^^^]]\\[[ZZYYYYYXYYZZYYYZ[[[ZZYYXYXXXYYYYYYYYYWVVWWYZZYYZYYXXXXXYYYYYYYYYXXXWWVUUVWWWWWWWWVVWY[\\\\[[[ZYXWWXXXXWWWWXYYYYYYZZZZYXWWWWXXXXWXWWXXWWWWWVVUUUTUVVVVUTUUUUTTSTUVVVVVVWWWVUUTTTTSSRRSSSSTUUTSRQQPPPdcdegiklmmmnoopooooooonmkiggghhgfeeeeeeefgggggggfeeeeeddccccccccccccdefghhhiijjihhhgggffdb`^]]\\\\[[ZZ[[[[[[\\]]]]\\\\ZYWVVUTRQPONMNOPPQQPPPRTUTRRSRQPOMLKKLNNMLLLKJJIHHHGGKNPPPPPQQQQQOMKJJJJKLLMLLMMKKKJIHHHIIIKMNNJLIHOJEECBAACEGIJKLKKKLILSTPKHFFHJMPRRRQQQQQQPONMLLMNNMLKLMMMMNOPQQRSSRQQQPQSTUUVVUUTTTUTTUUUUTTUVVVVVUSQSUWVUSRRTVWXY[_a`][YXXWVVWXXXXXXXYZZ[^_^\\\\^`\\Z_ca^][ZZ[\\^_`bdecefbbegdcca`^[[[ZY[]]]]_`a`__^\\^aaabfjjhhihihhhilnqh`gloooljhgiiggfffeb_[YXWWWVTQNLMPQOPTNLKLMNNLKMNLMPPNMOTWWVOKXZW[PSUXVPU\\b`]cZ\\_cifbfggkmkomhggijlpsuuvtrrokiggf`X_fid`]]]]_cj`_\\^ZZ[VTSRQQQRSUVQPORUWWWVVVVUTTTTTTTSRRRSUWXWWW[]^^^[WUUUUUUVWYZ[\\]`a```a`]Z]_^\\ZYYZZXWWUSUX]aceecbabba_][ZYZ]bfhgffecaaa`aabcdfilnonmkjihfeeddfghiijiihfdb`_^]]]]^_````___^]^^^]]^___^]]^^^]]\\\\\\\\\\[[ZZZ[\\\\]]^^^]\\[[[ZZYZZZZZZZZZYZ[\\]][[[[[ZYYXYYYYYZZZZYXXXYZZZYYYZZYXXXXWWXXXXXXWWVVVUUUVWWWVWXXXXWWXY[\\\\\\[[ZYXWWXXXWWWWXYYZZ[[[[[ZYYXXXWXXXXXWWVWWWWWWWVVUUUUUUVVVVUTUUTTSSRSTUUUUUUUUUUTTSRRRQQQQQQQQQQQQQPPONNNdcdegijklllmmnooooonnnmljhgghhgffeeffeefgggggggffeffffeddddddeeddddddeffggghhhhhiiiiiigfeca_^^]]]]]\\]]]]]\\\\]^^^^]\\ZXWVUTRPONNNNNOOONMLMNOOOOOPPONLKKLNPRRQPMLLLMMLMMKIKMONNOOPPPPONLIIJKKKLNPNNOOMMLKJIIJKLLLLNQMPLIOIEDCCDEGHKMMOPONOPKMSVSMIGHJLORSSRRQPRSSSRQPOOOOOONMNNOOPQRSRRSSRQPOQQRSTTTUUUUVVVVUVWWWWWXXYYYYXWUTVYZYXVUUVWWXXY[\\]\\ZYYYXXYZ[[[[ZZZZ[[\\]^^][]a`\\_cdc`][[[\\^_acdedfgccfhfeda_]]][Z[^_```aaa`__^]_`adgggefefikkkkjnqldcfjlmljhhghfddccc`\\WTRQRSTUSQNKLPWPLNNLKJJKKIHJKGJKKJIJLKJKKMMOLTMQQQOLTZ`^[`WY]`daafgghlltskgfggglquwvuuurooong]^ckceca__^`ci``^`\\Z[VTSSRQQQRTURPQTWXYXYYYYXXWWWWWWVVVVWXZZXWY^_aa`\\WUSRSSTUWYZ\\\\]__^]\\\\[YYZ\\[YXYYYYVVWUUVX[^abba`aaa_]ZXWVWXZ]_`aaaaaa```aaabehjlmmlkjihhfdcbbccddddcba_^]\\\\[ZZ[\\]^^^^]^_^]^]]]]^__^]\\^___^^]]]]\\\\\\\\\\\\\\]]]]]]]]\\[[[[[ZZZZ[[[[[[ZZ[\\]]\\[[[[ZYYYXYYYZZ[[\\[[ZZ[\\\\[ZYYYYXXXWVVVVVVVWWWVVUUUVVVWXWWWXXXWWWWXZ[[ZZYXWVVVWWWWWWVWWXXYYYYYYXXWWVVUVVVUUVVVVVVVVVVUUTTTUUVVVVUTTTTSSRQPQRSSSSSSSSSRQQPONNNNMMNNNMMMNNMLLKJJJddefhhijkjjkkllmmmmmmllkihghhgfffefffffgggggggffffgghggffefffffffeeeeffffggghgghhhhhhgfeecb`___________________^^\\ZYWVUTRQPOOONNOONNMLMNNNOOPPPPPOPPRTUUUTSPONNNNLLKJHIIJIKKMNNONMLJIJKKLLLLNLKLLJJJIIIIJJJJJJMMLOLHKGEFFFGHJKMNNNOOONOKKOQPKIKKMOQSTTTRPPSVWUUSRRRRRSRRQRQRRRSTTSSRQQPQQSTUUVVVWXYYZYYYXXXXYYYZZ[[[ZYXWXZ\\\\[ZZYYYYYZYZYZ[[ZZ[[[Z[\\\\\\\\ZZ[[[\\]]^__^]_bb_`cddb`^]\\]_accdddfgeeehgedc_[^_\\Z[^^]_``aa_^]]^`bcfiigebegklmmjjklebgfgijhfeeddb^\\[[ZWSQQOOPQQRQQONMPWPLNNMLKKLLLLMKHHIKLLNLKJIMMMLIPLRSRMKUY]ZX\\TVZ[_[^bdcekovunjgfhffksxxwwwtrtwqjfdoedccca_\\]_e^_^a]\\]XUUVWWWVUVUTSSVXYYXZ[[[[[ZY[ZYXXXXY[[\\[ZZ\\__``_\\WTRQRSTUWY\\]\\\\]]]\\YYXYZY\\\\YY\\]\\YXXY[\\[[]_ab`_____]YVTSSTTTTVXYZ\\]^_____``abdfhiiiihhgfdba_^^^^^__^]]\\[ZYXWWXY[\\]]\\[\\]]]^^^^^____^]\\\\]^__]\\\\\\\\\\]]]]]]^^^^^]]]\\\\[\\\\\\\\\\\\\\]]]]\\\\[[[[[[YXXYZYXWXXXYZ[[\\]]^]]]]^^][[YYXWWWVUUUUTTUUUUUUUTTVWWXXXWWWWWWWXXXXYXXXWVUTTTUUVVVWWWWXXYYYXXXXXWWVVUVVUVVUVVVVVVVVVVWWWVVUTUUUUUUUTTTSRRRRQQQPOOPPPPONLLKKKKKJKKJIIIIIHHGFEEEeeefhhhiiiiijkkkkkkkkkjihggggfefffffffggggggfffffghhhhggfffffgffffffeefeffggggggggfffeeddcb`````````aa`````````_^\\[YXVUTSRQPPOOONNNMLMNOOOOPRRRQQQRSTVWWVUSQONNNMLKKIHIIIIIJKLMMLLKJIJJKKLLKLIIIIIIHIIIIIHHHHHIHIIIGIGHHIIJJKLMMMMNNMMMKJMNMKJLMNOQTUUTQNOSXXVVUSSTTTUUUTTTSSSTUTTSQQPPRRTUVWWWXXZZZ[[[ZZYYZZZZ[[[Z[ZYXXXZ\\]\\[[]\\[[ZZ[[[Z[ZZ[\\\\\\[[\\\\\\[ZZZZ[\\]^_``__addabdedca`^]^`bddddeghfeefgedc_\\^_[Z[_][]`^`_^\\\\\\^`cegiihfbehlllkiiigddeddedb___^][XVSRSRQPQNNOPOPPOONNOPPMNOONMLLMMNNKIHJLNOPNLNPPQPVMNRVWVTPSYZXTUTTXYVPZ[Z\\dgostslhfhecgryxxxxtssspnmpldcdcdc_ZXZ\\^^^^^^\\ZWWYYZZYWWWUTUWXYYXZ\\\\\\]]\\Z\\\\ZYYZYZ]\\]\\\\\\^`_a`]\\WTRQPRTVVZ]^]\\]]\\[XXY[[Y\\\\ZY]_]ZY\\_^][\\^`aa`^]^^\\ZWTSRRSTTSTUVWXZ[\\]^^__``abcdefgfffedb`^]\\\\\\[[\\[\\[[ZZYXXVVVWZ[\\[ZZZ[\\\\]]^^^_____]\\\\]_`_]\\[[[\\\\]]]]]^^^^]]]\\\\\\\\]]]\\]]]]]]]\\\\[[ZZYYXWWXXWWVWWXYZ[\\\\]^__^___^]\\[YWWVUUUTTUTTSTTTUUUTTTUVXXXWWWWVVVVWWWXXWWVVTSRRRSTTUUVVVWWXXXXXWXWWWVUUUUUVVVVVUVVVVVVVWXXXWVUTSTTTTTTUTSSRRQPPONMLMNONMLKJJIIIIIIIHHHGFEEEDCBBBBeffghgggggffghhiiiiiiihhggfeeefffffffffgffffffedefhiiiiihgggggggggfeeeeeffgghggffeeeeddcddddcbbbbccccbbbbcbbbaa`^\\[YXWVTTTSRQQPPOONMLMPSTSSTUUUUUVWWXYXWUSRPNMMLLLKJJJKLKKJJKKLLKJIIJJJJJJIHGFFFFGGHHGGGGFFEFEEDEEEFHIKKLLLLKKJJJJJJJIIIHIJKKLOPPPSUWVTPMOTYXVXWUTVVWWXXXXWVTTTTTSRQPPQRTVWXXXWXY[\\\\]]]\\[YXYYZZZZZYZZYXXYZ\\\\[[\\]\\\\\\\\\\]]^^]\\[[\\\\]\\\\\\\\[ZYZZZZ[]^___`bdefeeggfca`_^_acdeefghhhgddeccb^^]][[\\_\\Y\\]\\^^]\\\\\\^aefiiiihhikmmjgdeffebaa`_\\[XXZYXVSQPQRQRQQOPQPPOONNNOPPQQRRRQPOOPQRQLJKMORSTQPRUUVT[UTW[[ZWSVWWUTRQUXVRMUTWbjorononhifeceqyyxxvuuuutsrrleeecef`WTVXZ[\\]^_^]YY\\^``_][ZXVVWXXZY[^]^_`^[]][Z[][]a__^^^^`^^^\\[XTRQRTVVW[__^]]]]\\[\\]``Z^^ZX^b_^^ada^]_aa``_]\\\\YWUSSTTUUTSTTTVXXWXXY[]^_``aa``abcccbb`][YXXXXWWWWXXXYYYXXVVUVXZ[ZYYXYY[\\]^^^_____^\\Z\\^`^\\\\[ZZ[\\]]]\\\\\\]]]]]\\\\\\\\]]^^^^______^]\\[ZYXWVTTUTTUVWXYY[\\]^_`a``aaa`^\\[YVUTSSTSSSSSSTTSTTTSSRTUWWVVVVVVUUUVVWWWVUTSQPOOQRRSSTUUVWWXYYYXXXXXWVUUUUUVVVVVVVWWXXXXXYZZXVSSRSSRRSTVVSQPOONMKJIIJKLLJIHGGHHFFGGGFGHFCAAA@@????ggghhhggfeeeffghhhhhggggffedddeeeeefffffeeedddddeeggghhhhgggggfffeeddefffffffffedddccbcddeeeddcccdeeddcccdddccba_]\\[ZYXVVVUTSSRRPPONNOQSTSSSSRSSTUUUUUTSRPOMLMMMMLLLMNPQQPPOONNMKJHHHIHHGGGFDDCCDEFEEEEEEDCDEDDCCDEFHJLLLLLKKJIIHHHHHHHHIIJKMNQRRRTVXVSOLNSXYWYYWUVWWXXYYYXWUUTTTSRQPQSUWXWWWWWWXZ[[[[ZZYWXYZZZZZZYZZYXYYZZZYZ[[[[\\\\]^_``_^\\[[\\\\[[[[ZYXZZZZ[\\^^^^`bdfgfgjkhc````abcdeeefghjgbbbbaa^_`_\\\\]`][\\Z\\___^]\\^aegjjjjkjgdcbcehgedb^]][YWWUVVUTRQQRTUUTSRQRSSSSSRRRRSSTTUTTSRQQSTTTNLMOPTUWUTWZZZU][ZZ^_]YVYXXWVTQVYVTQRN[hjnnkhkpkhffgiovxxxwuuuuuutsolkjghhaWTVXZ[\\]^_^][\\^bcdca_]ZXVWXX[[]]\\^`a_[\\]\\]^`^^a``^]]]^[][YZYVTTUWYWX\\``^]]^^]]__`c__`ZX_b``acda]^aba`_^^\\ZWTSTUWWXXVUUVWY[ZXXWXY[]^__`_^^^^_`_^]]ZWVUVWXXWVWXYYYZZYYWWVVWZZXXWVWXYZ[[\\\\\\]]]]\\ZYZ\\^][[ZYYZ[[[[[ZZZZZ[[[[[\\\\]]]]]^^^___^]\\[ZXWVUTTTRRTUVWXXZ\\]^_``__``a`_][XVTSSSSTTSSSSTTSSSTTTSSTUUTTUUUTTSSTTTTSRRRPONMMOPPQQQRTUVWXYYXWWXWWVUUTTTTTTTSSTTSTUWWVVWVVTQONNONNMNPRRONMLJIIGFEEFGHGFEEDEDDDCCDDCCDCA?>>>==<<<iiijjihgfedffgggggggggfedddccddddddeedddddccccccddeefggggffeeeeddccccdeffffffedccbbabbbcdefeedccdefffedddeeeedba`_^]\\[ZYYXVUUTSRQQPOOPQRQPPPOOPPOPPPOONNMLLLKLMMLLLLMOQSTTTSRQOLJIGFFFEEDDDDDDCBCDDDCBCDEEEEFGFFFGHIJKLMLKKJJIIIGGGHHIJKKKLMNPSRRQRTWURPNPSVVUWWVUWXXXXXWWWVUUUUTSRQRTVXYXWWVUSTUVWWWXWWWYZ[[\\[ZZYYYYYXYYZYXXXYYZZZ\\]^`a`_][[ZZ[ZZZZYXYYZ[[[\\\\\\]]_abdefhjjhdaabccccddcdefhiea`aa`_^`b_\\\\^b`__\\]`a``__`cfhkmmkjhebbeikifc`^[XUTUUUVVVUSRQRTWYXUSRQQSUVWWWVVVVVVVUUTSRQRTUVVRPPQRSTXVVX[^ZV^]Y[]_]YUXXXYWURX\\YWVPO`haejihkmmjkhkmquwxxwvvvwuuvutwsqonjaZY[\\^^^^^_^^\\]_ceedca_]ZXWXXZ[]]]^__^[\\]\\]^^[[^\\\\\\[\\Z[XYYWXYYXXZ\\]ZZ\\``]\\^_`__`aadbbb^[`bbcdeeb__aa`^\\[[ZXVUVWXYZZYXXXYYYYYXXXXXYZ[\\\\]\\\\[ZZ[[\\\\\\[ZYXXYZZYXWXYZ[\\\\\\[[ZXXXXYYWVUVVVVWXYYYYZYYZYYXZ\\][ZZ[ZYYZZZZYXXWWWWWWXYZ[\\\\\\\\\\]]^^^^^]\\[ZXWVUTTTSQRSRTUUWXZ\\]^^^^^_`_][YWVUTUUVVVVVWWVVUUUUUUUTUTSRQRSRQQPPPPPPPPPPQPONNNOPQPPPQSTVWWWWVVWVVUTTTTTSSRQQQPPPPPOOONPQPNMKJJJIHHHHJKIHGGEEDCBABCCCCCBBBAAAAA@AAA@A?>=<<<<<<;;jjjjkjigfeefggggfggggfeddcbcccccccccccccccbbbcccdddeeffffedddccbbcbbcdeeeeeeeedcbaaaabbcdeeedcccdeeeeeddefffdcbb```_^^][ZYWVUUTSRQPPOOPPOMLLMMMMMMMMMMLKKLKKKLLLLLKLMOQTUVVTQONLJHGEDCDCDCCDDDCCCCCCCBCDEFFFGHHGHHIIKLMMLKJIIIIHHGIIKMOOOONNPQRRQQRSUTRQOQSUUTVUUUVXXXXWVVVVUUUTTSRRSUXYXWVUUTRSTUUVVVVVWYZ\\\\\\\\[ZYYYYYYYZZYXWWXYYYY[\\^_`_^]\\[[ZYXWYZYWYXX[\\\\\\\\\\\\]^_acefgiigdaacddccedccefghea````_]ab`[^`__bb^]``````acfilnmligfffghgda_^\\YWUTTTUVVVVTSRRUXYXVTRQQSUVXZ[ZYXXWWVVUSRQPQSVVWSRQSRQRWVTZ_\\XV]]WZ\\^[YUXYXWXYRW^][YRX^a`cghhklmjginnqstvuwwwwvvvvuuttssqmgddddcca_^__^]^_ceedcb`^[YXYY[[]\\]^^_^\\\\\\\\\\[[Z\\\\ZZ[\\[YZ[XUWY[[[\\^_`^]^``]\\^____acafdcc`_`bcddeea_`aa_[YXXXWVUVWXYYZZYXXXXXXWWWWXXXYYZZZ[ZYXXYZZ[\\[[ZZZZ[\\[YXXYZ\\\\]]\\[[ZYXXYXVVUVVVVWWWWWVWWWUUWXYXYYZZ[ZYYYYYYXWVVVUUUVVXYZ[\\\\[[\\]]]^^^]\\[ZYXWVUUTSRSRQQRTUVXYZ[\\\\\\]^^]\\ZXVVUUVWXXXXXXXXXWWWWWWVVUTSQPQQQPONNNNNNNOPPQPOOOPPQQPOOQSTUVVVVVVVVUUTTTSTSSQPOOOONNMMLLMMMLJIHGFFEDCDFFFFEDCCBA@?>?@@@@@@@????>>>??????=<;;;<<;;;kjklkkiggfhiiihhhhhhgfedcbaabcbbaaabbbbbbbbbbbbcccdddeeeedcbbbbbbbabcdeeeeeeeecbaa`aabbcdeedcbabcdeedddefffedcbbaaaaaa`]\\ZXWVUTSRQPONMLMLKIIJJJJKKKJJJKKKLLLKLLLLKLMNOQSSSROKHGHIIHGGFGFEDDDFGFEDDCCCBDFGFHIIIJJKKJIKLLLKJIIIIHHIJLMOQSSSSRQRRSRQQQQTRRRRRSTTTTTTUUWYXVUTTTUUTTTTTTVWWXWVTSSURQRSTUVVVWWY[\\]^]]\\ZYXXYYYYZZYXWXYZZYY[[]]^^]\\\\\\\\[[Z[][WUYYY]]]^^^]]]]]_cdehhgecbcddddeeddeffeddca`_`\\`b`[^__`dc_^```abbbdfimnnljiiihhea^\\[ZYWVUTSTUVVUUTSRTVYYXVTRRQRTVYZ[ZZYYYYWTRPPOPQSUWXVUUVSPPTVTWZXUV\\\\TXZ[ZXUXYZYZ[V[`][[V[\\^_abehjklnklnnppprsvvvvuvvvuuvwwwvtqrrqpnjea_`^^]^`deedcba`^\\[[[\\\\]]]]]]]\\\\[[[YXWYXXXZZYYZ[WUVX[]^^^`````a`^\\___^`adagfedccccdddddcbaa_\\YUTUVVUUUUUVWXXWWVUUUUUTUVXXXXWWWXXXXWWWZ\\]^^]]]]^^^][YYZ[]]^^]\\\\\\[ZZYXVWXYYXWVVVVVVUTTSTUUVWWXY[]\\ZYYYYXWVVUTSSSTUVXYZZZZZ[\\\\]]\\\\[[ZZZYXWVVUUTTSRPPQRSTUVWXYYYZ[ZYXWUUVVXYZ[[ZZZZZZZZYYYYYXWTSQQPQPNMLLKKKLMOPQRRQQRSRRRQPPQRSTUUUTTTUTSSSTUTSRRPNMNNMMMLIHGIIJHFDCCA??>=>@ABA@@???>=<;<>>?>==<<<;;;;<====>=<;;:;<<<<<klmnnljhhijkkkjjjjiihgedca_bbccbaaa`aabbbbbbbaabbccccddddcbbabbbbbabcdeddddddccb``aabbbdeedcbaabcdddccdeffeecbbbbbbbcba_^\\YWWVUTSRQPOLKLLKJKKKKLMMLLKKLLLMMMLMMMMMLMNOONNMKHEEFHJLLKKJIHGFGHIJIGFFFFFGIHGFHHJJKLMNMLLMMMLJJJKKKLLMPQSUVVVVUTSTTSSRQQTRSTUUTRRSSSRSUXYWUTSTTTUUUVVVVWXXWVTSRSURRSTUVWWXXYZ\\]^^^]\\ZYXXYZZ[[ZZYYZ[[[ZZZZ[\\\\[Z[[\\\\\\\\\\][XVUYY[_``aaa`_^\\[\\_bdggfedccccdegfdcbcdbcgfb^]a_^`^Z]]_bec_^``abbbbcfhmnnmmmljhe_[ZZYYXWVUTSTUVVUUUTSTWYYYWVTRRSTVY[\\[[[[ZZXTQOOPQRTVXYXWWYWSPQTRRRSRQXZRVX[YXVY[]\\Z[\\`_\\[]Z\\Z__[_cghiknkjlklllnprssrrsuvvvvwwyyxwxxwvsmfb`^\\\\\\^`deecccba`_^]]^^____^]^^^^][YYXXXXXUVWXY[WUWZ\\^^^]^`bbbab`__]\\]_acafgfdddddccccbbdb]ZYVTSSSSSTTTSTUVVUUTSSSTTTUVWXXXWVVWXXWWWXY\\]^_`______^][Z[[^____^^]]\\[[ZYXYZZYXWXXXXWVTTSTTTTTTVY[]][ZYYXWVUUTSRRRTUUVWXXXXYYZ[[[ZZYYYYYYXWVVVVUUTRQQQQRSSTTUVWXYYYXWUUUVVWXYZZZYYZ[[[ZZZYYYXWTRQQPPOOONNMLLLMOPQRQQQRSSSSRQQRRSSSSSSSSSRQQRSSRQPPNLKLKJKLIEDDFHGEB@??><:99;>?@>>==<<;;:9;==>=<;::9999:;<<;;<<;:::;<<<<<mnnppnljjklnmmmlllkkigeeb``eddcbba`_`accbbbbaa``abbbbccccbbbabccccbccdeddcdddccbbabbbccddcccbaabbbbbbccddddccbbccccccca`_][ZYYXWUTSRPNLMNMMMMMMNOONMMLMNNONONOOOOONOPPONMLKJJKLNONMLLKKJIIKMNNMKKKKKKKKIGFGHIKMOPQPONOPNMMMNOOOPPRUUVWVX[[YXVUVUTRPPTSTUUVUTRRQQQSUWXVUSSTUVWXYXXXXYYYXVTTUVXUUVWXYYZYYYZ\\]^^]]\\ZYWYZ[Z\\\\[[\\\\\\]\\\\ZZZZZZYYXYZZ[[[[ZWUVW\\\\^bccddccb`^]]_adeeeddcbbccdeedccddcdiid^^`_`b_\\]^`cge`_``accb``dgjllllkigd_ZVVWXWWWVUTTTTTTTUUTTUWYYZYXWVVVUVZ[\\\\\\]]\\[YVTSSTTTUWY\\[YYZXUSTXUSPRPPWYSWZ[YYY[Y^]]^_db\\^a_^]__\\_`bgggigfghijjjlnopoonpstvwxxwwxwwwvusmgda^\\[\\_aeeedccccccb`__`cca`a```ab`][ZZYYXXUUUUVWUUVX[\\\\[Z\\^`___`a`_\\[\\]_`_dedccbbba```__a_ZWWVUUVUTTWWUUVVWWVUTSSSTUUUUVWXXXXWWWXXXXYZ\\]^`aabccbb`^\\][Z_`aa````_^^]]\\[[\\\\[YZ[\\\\[[ZXWWWWVUUUWZ\\]\\ZYXWWVUUUTSRRRTUUVVWWWVVVVWWXXXWWWXXWWWWXWWVVUTSRRRSTTTSSTVWXXXWVUTTUWWWWWXXWWXYZZYXXXYXWWUTSTSSRRRRRPONMNNOOPPPPQRRRRRRRRRSSSRRRRRQQPPQQPOONMLKJIHHIIEBABDEDB@??>:8767;>?@><<;;;;989:<=>=<;:98779::;;::;:::::;<<<=<oopqpnmllmnnnmmmlllkjffeb`bffedccb__abbbcccba```abbbbbbbbbabbcddccbccccddccccbbabbccccdccccbaaaabbbbbaabcccbbbbccccbccba_^][[[ZYXVUSQPOOPONNOONNOOOONNNNNOOOOPQPOOPQQQPONMLLMMNOPONMLLLLKKLNPPNMLMNMMLJIGGHHJMOQRSRQPPOPONPPRTRV[TTUXWXZ^][YVTWVTRPPSSUUVVVTRQPPQSUVWVTRRTVXY[ZZZZZ[[ZXVUUVXZVVXZZZZZZYYZ\\]]]]\\[ZXVZZ[Z]\\[\\^]^]\\\\[ZYZZYYXWXZZ[[ZZYXWVX[_adddeeedcb`^^_bdeedddcbbccddddddddcdggd`^_`aca]^^_`ceca__bcca^^ceghiheddb^ZWUXXWWWVUTTTTTSSTTUUTUWYYYZXYYWXUVZ\\]]^^^]\\ZXWUVWWTUWY\\\\[Z[XVTWXWTQPQPUXSWZ[YY\\[Y^__a]fc]`ed_^`^^^a]hgdedbfghiiijkjkllkloruwxwvvwvvvutrlgeb_]\\^`cdeecccccdddb`^afga`c_accb`]\\[YZYYWVUVVVVUTUXZ[ZYYZ[\\]\\]^__^[Z\\\\\\]]abbbaa`__^]]]]^\\XWWVWWWWTUXXUUWWWWWUTTTSTUVVUVWXYXXXWWXYYYYZ[]_`accdccb`_]][Z^abaabda_^__^]]]\\\\\\ZZ\\]]]\\\\[ZYYYXWWWXYZ[ZZYXVVVVVUTSRRSUVVWWWVVVUUTUUVVVVUVVWVVVXXWVWVVTTTSTUUTSRSTUVVWWVVUTTUVWWWVVVVVVWXYYXWWWWWWVUTTTSRSSSSRQPONNNNNOOPQQRRRQQQRRRRRRRQRQPPPPPPONMLLJIIHFFGFA@?@BCCA?>>=85678:=>>=<;;:;:888:<===<:9987789:::::99999:;<<===pqrrqpnmnoponnnnnnnlifgea^digeddcb^^bbbbcccbaa``bbbaaaaaaaabccdddccdcccccbbbbbbbcdcccddccbbaaaaaaaaa````aaaaaabccccbbcba`_^__^^]ZXWVUTSRRRQQQPPOPQQQQQPPPPPQQRRQPPQRRRRQPPPPPPPPPONNNNNMLMNPQPNMNOONMKIHGHIJMQSSTTSSRRSRQQSTUXSX`WVWYWV^_`\\^URUVSQPQRSUUWWVURQOOPRTUVUTSSUWZ\\^]\\[[\\]]\\ZXXYZ\\]YY\\]]\\\\[[[Z[]^^]]]\\[YV[]]\\^\\[]b__^]\\[ZZZYZYYWXZZ[[[ZYYXY\\_cdghhhgffedcbaacddcccccbbbbbcdefgggffffdb`^bfgd`__abdfeb`^bdda]\\`acdeda__^[XVUXXWWWWVUTTTSRRTUVWWXYZZZZY\\\\Y[VV\\^__```_^\\[ZYZZZUUXZ]]\\[ZWWWZ[YWTSSTU\\VYZ\\[[_\\XZa_fZdd`ahfbaa^`f`]kgc`bbdcgjiggggghhggjmqtvvvvvvvvtroljgc__^`bddeecbabccdfda]ajkbaeabddb`][YXYYYXXYXXWVUUUWXYWWWWWXXY[\\\\]\\[Z[[YYZ]__^^^]\\\\[ZZZZXWVVWWXYZYWY[YWYZYXXWVVVVUVWXWVWXYYZYYXWXYZYYZ[]_`bddeeea_^]_ZY^bcccbcb`aaa`__^]^^[]^^^]^__^]]]\\[ZZ[ZZYYXXWVWXXWVUTSSUVWXYXWWVVUUTTUUVVUTTUVWWWWWWVWXWVWVUVWVUTSSSTTTUUUTTTTUVWWVUUUUTTVWWXWUTUVVVUTTSSSSSSTSSRQQPOOONOPPQQQQQQQPPQQQRQRQQQQPQQQPONLKIHHIGEDGB<;=?ABB@>==;52457:=>>=;::<<;:988:<==<;:98778:;;;:989999:;<<===qqrqqpnnopponoooonomjhfd``gjffdddb^^bbbbcccbbaaabbaa```aaabbccddddddddccccbbcccccddddddccbbbbaaaaaa``_``aaaa`abbbbbaabbbba`aaa`_][ZXWVVUUUTTSSRQRSTTSSRRRRQRRSSSRRRSSRRQQQRQQQQQQPOOOOONMNOPPOLMOQOLKKJHIJKMPSUUTTRQRRSSRQUX[[TWcZTYZWV^``[^SPQQRRRQRSUWXXWURQOOPRTUUUTTUVX[\\^^][[]^^^][[\\]_`\\]_``__^^^^_______^^\\XZ^^]`^\\]b`a`_]\\[[ZZ[\\[[Z[\\]]]\\[[Z]bcegiiihhgffedccdeeddddcbba`aabcdfhiihgfedba^bgheba`abeiifb^beeb_^bbbdca^]]]ZYXXXVVWWWVUUUUTTTVXZZZ\\\\[[[\\[^_\\^XX_baabbba`_]]\\[\\]WVXZ]^^]ZXYY[]ZYVVTOUa\\VWYYZ^[WXe\\d[adaagedbaacfcahda`cdb`gjhecccdcb`adgknppqrqqqponllkfb`a`abcddc`_]^``accb^bjlcbgdccba_][YYZZZ[[[[[ZYXWVWXWXWVVVWWXYZ[\\[ZYYYWVVWXXXXYYXXWWXXXWUSTXZZZYYZ^]WV[\\ZYXWVVWXWXXXXWXYYZYYXWWWXYXXYZ\\^`bdeeed]ZY[^ZX^bcbaa`adddb``__^^^\\__^]^^___^^^]\\\\\\[[YYXXXWXYZ[[ZYWVUVXYYZYXWWVVVVUUVVVUTUWXXXXVUVWXWWXYXVUVVVUTSSRRRRRRRSSSTUUTTRRRRQQRSSTSQPQRSSQPPPPPPOPQRRRRQONNNMMMNNNNNNNNNNNOOOOOPPPOOOOOOONKJHGGHGDEF>79;=?@A?>=<:534469<>=;999:::9999:;<<<;:987789;<;:988999:;<=>>=nnnnoooopqpppqqpppomjhecbdkkffeedb]_bbbbccccbbbbccbbaaaaaabbccdeedddddddccccccccdddeefedcbbbbbbbbbbaa```aaaa``aaa``aabbccbbbbaa`_][ZYXXXXXWVVUTTTUUUUUTTUUTTSSSSSRSTTSSSRRSRQQQQQQQPPPPOOOOPONLNOPNLLLLKKKLMOQRRRROOOPPQQRU[_^WXe\\X\\\\XW[]\\XWSNOPRRRRUVWXZZZXUSQQQSTUUUTUVXZ\\\\]^]\\\\^__`_^^^_``_`bcbbaaabbccbcbabaa_[\\_`_a`^_cccb``_^]\\\\^__^]]^^^^^]]^adfhhiihgfedddcdeggfeegfdba`_``aabdfhhhgedcbb`cgifcbcddfjjheacffdaaeffeca^]^_]ZYXWUVWWWVVWWWWWXY[]]]__^\\^_]a`^`ZZbddccedcaa``^\\^_YXY[^`^]YYZ[^\\XXXWSOZdWPRTUW[ZXZf_bZ^d`_eddca`badbba_`aa_^cfc`^]^^\\[ZZ]^beggggffffefhgca_^``___```][YZ\\]^_``_bgibbgecbaa_][ZZ[\\^\\]\\\\\\[ZYXWXXXYXVVVVWXYYZZYYXXWVUTSSSSSTUUUTTUWWWUTV[]]\\\\[]`]WWZ[YXWWVWXYYZZZZYYZYYYYYXWWWWVWYZ[]^`abcba[XY\\\\[Z^`aa_]]_dfc`^\\]\\Z[\\Z\\^[YZ[\\]]\\]]\\[[[[ZXWWVWXYZ[\\\\\\\\[ZYZ[\\]\\[YXXYYYZYXXXXVTUWXXYXVWXXXWXYYXVUVVVUTSRRQQQQPPOOOPQQQPPOPONMMMMMLKKLMMMLKKJKLKKKLMMNNMMLLKJIIIHHHHGIIJKKJJJLLMMMMMMMLLLKIGEDDEDBCC;47;=>>?>=<;955557:<=<98889999::99;<<<;;:97789;;;;988999:;<>>=<llmnnnopppppqqqqppoljhecdfjjgfeeda]`ccccccdcccccddccbbbbbbbccddeeeedddddddddddddcdeefgfedcbbbbbcccbbaaaabbaa`````__`abccccb`a`a`_^\\[ZYYZZYXXWVUUUVVVUUUVVVUTTSSSSSSSTTSSRSRRRRQQRRRQPPPPOPOONMLNOONLLMMMMMMNOPRRQPONNPQPPRU[`^XYb^]\\]XWXZZVTRMOOQRRTWXZY[[\\ZVTRSSUUUUUUVWYZ[[]]]\\\\^``aa`__````bedbcbcddeegfebcba_]\\]_```_^_bcdcaa`_^[\\`a`____^_^^]^`beghhhgfecbaabbceggfffgfdb`____``abdeeeedcbbabehjhfeeeeghigedaffdcdghjjfa^^_c_YYYWUVWXXXXXXWXZ[\\\\]^_ac`[_a\\ba_`\\[cecddhdcbaba`]__ZYZ[^`^\\YY[\\^ZTWZWSQY[QOOOQTXXXZca_][a^]baccccccb`___^aa^^bda^ZXXXVUSSTVYZ[\\\\\\\\\\\\\\\\]^^]]\\[[\\\\\\ZZYYXXVVXY[\\]]^bffccddccba_\\ZZZ\\]^[]\\[[ZZYXXYXW]VVVVVWXXYYYYXXXVUTSSRQQQSTTSSSTVVUTTWYYZ^^\\^`]WVYYXXWWVWYY[[[[ZZZZYXYYZYWWVVVVXZ[\\\\^_`a`^ZXX[]\\[]^__]ZY^b```\\Y\\XXYZXZ\\WVXXYZZ[[[[ZZZZYXVVUVXYY[\\]]\\\\\\\\\\^__^\\ZZZ[\\]^Z[ZYYVTUWXXYXWXYYXXXXXWUTUVUTSRRQQPPOOMLMLMMNNNONMMKJJIHHHGGHIIHGFFFGHGGGIIJJJJJJIIGFGFEDDDDEFFGGFEGHJKKJJJJJJIIHFDBABCB@@@:47;===>>=<;854557:<=;87789999:;:::;<<<<;98789:;;;989999:;=>>=<jjklmnooppqqrrrrqpoligedfgiigfffdb\\bcdccccdddccddeedddcccccddeeeeeeeeeeeeeddddddcdefghhfdcbbbbccccccbbbbccbba``__^_``bcdddba`_``__]\\\\\\\\\\\\[ZZXWVVWWWWWWWXYYXWUSSSSTSSSSSSRRRRRRRRRRRRQQQQPPOPONMNOPOMNOPPPOOPQRRRQPOOQSSSRSUZ_\\ZZb`^]]WVUVURQPNPQRSUX\\]^^^^^]YVUUUWWVUUVXZ[[Z[]^]]]^`abcbaaba``chebcefgghijjhcdca_]]_`aba`^_bbcbbaaa^[]bcbba``____^`abdefeeecb`^]]^`cfhhghijheb`_^^^___`abbbaabbbbcdgiihgghhhhhhhhegeedgijmmib^_`eb\\ZYVVXZ[[[[ZZYZ\\^^^_`acfc\\bd[ecab^^efddejedccedb_a`[Z[[^a_][YZ[_VPW\\WSUXUQPNMPQTUUX_a\\[Z^[[\\]``````_]^_^\\`a__cb_[WUTTSRPOPQSTTTTUVVVVWWXXYXXXWXXXVUTUUUTUWXYZ[[^bcba`abddcc^\\[YY[]^Y[ZYYXXWWXZZX\\WWWWWWXXXXXXXXXWVUTTSRRQRSSSRSTUUTTUX\\]^`a___\\YXWWXYYXXXY[]]\\\\\\[[[ZYZYYYXVUUUVWXYYYZ[\\]\\ZXXY[]\\\\[[[[ZXW[[Y[\\YVXUVVWWWYTSTUVWWWXYYYYYXWVUTUVXYYZ[\\]]^^_`aba`^\\\\]^___\\_]\\ZXVUWWXXXYZ[[ZZYXWVTSSSSRRRQQPPONLIHHGHIJLNNLIHGFECBAA@?ACCCA@@?@ABAABCDEEFFFECBBBBA????@@BBAA?@CDFFFFEFFEEEDB@>==>>=>>947;=<=>=<<;85578:<>><9888::99:;<<;;;<<<<:9789:;;9889::::;====<ghijklmnoopqrqqqqpoligfegghggfggeb]bdddccdeedddeefffeeeeedddefffeeeeeeeeeefeeeedcdeghihgecbbbccdddddddddddccba`__^_abbdeddba`_`aa`_^]]]]]\\\\[ZYXXYYYYYYYZ[[ZYWUUUTTTSSSSSSSSSSSSRRRSSRRRRRQPQQPOPQRQOPQRSSRQRSSSSSRRRTWWVTTWZ^\\YY`_^][URRRQPPRKSTTUWZ_a`````_ZWUUVWWVUUVX[\\\\[\\^`a``bccdddccba_adhgefghiiikmmidec^\\[]^_`a`_\\]`````___^]^acdcbbbaaa``_aabaa```__]\\[\\]`cfhhhijiheb_^]^__^]]]^___`abbbcdgiiiihiihgggikgfeefhklonjc_`aeb^[XVZ\\\\]]]]\\[[[^___`acehe^de\\gedeccgedehlefccdeebcb]]]]`b`_\\XY[]UOW[XVUXVTRONQRQRSTW[XVW[YXXY][XX[[[Y[\\[X]`]^ba^YURRRQPONPQRRRRRSTTTTUUVVVVVVUUUTSRRSTTSTVWYZ[\\^abaa`acdedc\\XWVVX[ZUWWWXXWWXZ\\^[YXXXXXXXXWVWXXYYXWVVUTSSSTUUUTSSSSSSUX^a`abb_][ZYXXYZZZZZ\\\\^^^]]]][[[[ZYYXWWVVVVWWWVVWXXXVVUWYZZZYXXXWUWXVSTWVUTRVXWUUTSRRRSTTTVWWWWWVVTSSTUVWXYZ[\\]^__`abba`^]^_aa][a^]ZXWUWXXXXYZ[[ZZXVTSQQQQQQPPPONNLKIFDDCCDGHJKIFEBAA@>==<;=???>==<<=>>>>?@@AAAA@@>?@@?=<;<=>>>=<;=?@BBBBABBBBBB@><;;<<<>>956:<<<=>><:86789<>@@=:99:;;::;<==<<;<<<;:8789:::9889::::;====<ffghijklmnoppppponmkigggggggfgghfb^ceeddcdeeeefgggffggggfeeefghhgfeeeeeeffffffeedefhiiigfedcccdeeedeeeeeeedcba`__^^_`acdedcb_^`aaa``_^^^^]]\\\\\\[Z[[[[[ZZ[[[ZYXVVUTSRRSSSSSTTUTTTTTTTTTTTTTTSRSRQRSTTTUVWVUTQRTUTSRSSUWZZXVUWX\\ZXX\\\\[ZXRPORUSSUPWWWWW[`bcdb`abZSQRSTTTTUXZ]^^^_acddcdeddddcdca_begggiiiiiklmnjed`[YZZ[]^`_]Z[]]]]]\\\\\\^]]aefedddddedcbbbbaa`__^^]^^__acefeeeffec`^]]]^__^^^^^^^^_`abcdfhijjiiiihgghjifdccfijlkhecccgc_\\YX\\^_^__^]\\[\\_aaacccehfafe_ghgfefhfdfjlefcedfgdfe``abbda_^\\]]^WRZ^[ZY[YVTQQRQNPQQQVRSTVUUTTYVRSVVWWYZWTY]ZZ]]ZUSSTRTSRPQSVTUTTTTUUUVVVVVVVVUVUUSQPQSTSTUUWXYZ\\_aa``bdeec^XUUUTVXXSUVWXYZZ[\\^a^[\\\\\\\\\\[\\[ZZZ[\\\\\\\\[ZYXVUUVXYYXVTTSRQRTW\\`__`_\\Z[[[[Z[\\\\[\\\\^_`````a`_]\\\\[[[ZZZZXXWWVUTSTUUTTSTUVVVVVUUTUUWXTQSVWVTRWXWUSRRSSSRSTTTUVVVVUUTSSTUVWVWXYY[\\]^_`aa``_^_`a`]]b`][YXWYZZYYYYZZYXVSSQQQRQQQQPPONLJIGDA??@@@CEGCB@?==<;;;::;<<<<;;;;;;;<<<<<=======>>>=<;;<==<<:879;<>>?>>?@@@AA?=<;;<<<==:669;<=>??=;879:<>@BA?<;;;<<;<=>>==<;<<<;:8889:::988:::;<<====<eeefgghijlmnoooonmkihgggffgfffhgec`dffecbcdfeeghggffgghhffefghhhgfeeeeffghhggffeeefghhhhfedcccdddeeeeefffgfdba____^__`bccddb_^abbaa`____^^^]]\\\\\\\\\\\\[[[Z[[ZZYXXWVVTSRRSSSTUUUUUTTTTTTUUVVVUTTSRRSTUUVVWXXVSPQTVTRRRTUXYYXVUWXZYWVZYXWUPNKRVUTURXXWWX[`ccgb`ccWPPQQRSSSUX[]````bdeeedeeddccec_`beffgiihghjlnnjec_ZXYZ[\\^^]\\ZZZZ[[[[[[]\\\\aehgfffffffedcccba`_^^^__```abcdcbcddcb`]\\\\]]^___^___^^^_`abcegiiiiihhhhgfhhgcbadhihhfedeeg`^\\TZc`_^__^]\\\\]_bbbcdddfedfeaghhgefgecfklffcfffgfhgcbbcda__^^_^]XV[_][ZZZXVSRRQNORONSQPPQPSONRRQRTTSVYYVSX[YYXVSTSSTRVVTQRTWTWWVTUUVWWVVVWWWVVVVVSSPQTTTSTUVWXYZ\\^```bbdc_ZWUTTTUVVVVVWXYZ[\\]^_____``__^]\\[\\]]^^_^\\[YXWXY[\\ZYWUSRQQRSUX[]^^]ZZ[\\^^]]]\\\\\\\\_`aaaaaba`_]\\\\\\\\ZZZZYXWXVUTTUUVUTTTTUSSSRSQRTVWXVTTTUUVUWXWUSRRSTSSSSTTUUUVUUTSTTUVVWVVVWXZ\\]]]^_``__^_```^^``^[YXXYZ[ZZYYYYYWTRRRRRQPOPQQPONLJHFC?>=>=<?CC@?=<;::9999::;::::::::::::::;;;;;<<==<<;;;;<==<:87789:;;;<=>>>????<;::<====:658;<>?@@><97:<>@BCB@=<;<==<<=>>>=<;;;;:98999:::9889:;<<=>>==<eeeeeeeffhikllllkjiggfgfeefgefhgedbfgfecabdfefijhgffghiihfefiijjhgfffffggghhhggfeeffghhhgfeddddddeegggfgghgeca```_`_^`abcdcc``bccbaa````__^^^^^]]]]\\[ZZ[[[[ZYYXWVUTSSSSTTUVWVUUUUUUUVWXYYXWVUTTUVWYYXYYXVRNNTVSQQRSUVWWVUUVWWWVUVVUURONPVYWVVWZ[XXY[_bcf_^e`RLOPQQRSTVZ]^abbbcdeeeeeeddaadc]_befeeigedehjkkfda\\YWXYY[^^]\\ZYZZZZ[[ZZ][[cgiihhhghhgfedddddca``abcdcbbcccba`acdb`^]]\\]^_aaaaa``_^__`abceghhhhgghhhedggd`_bffdfedfffg]\\[X_gca]``_\\[\\\\`ccccccbcdeeecghjigfedbejkhgdhchhgmjgdca_\\\\]_aa`^ZZ\\`]][WYYWUUSROQUPMSRQORQSMNQTTTUVRTYXUUWYXWURQSSSSPWYWSRUZVZ[YWVWXYYXWVWWXXXXYYWWRRVUTSSTTUVVVWYZZZ[\\_^ZVUTTTTUUUUVWWXZ\\]^^_```aaaabba`_^^__````_][ZYZ\\^^^\\ZWTSRRQQRTWYZZZXY]___^`_]\\]]_accdccddb`^[[\\\\[[[ZYYXXVTSTUUVVUTSSSQQRSRRTUVWXXXWXXYYYXWVUSSSTTTTTUTTTUUUUTTTTUVWWWVVUUWYZ[\\\\]^___^^]^^__```^\\ZZZ[\\]\\[YXXWWUSRSTSRQQQRRQPPOMJHEB>;;<<9;??;;::98888789::9999998889:::::::;;;<==<;;;;;<===:8789:98899:;<<==>>=<;;<=>>><857:<>ABB@<99<>@ACCB?>==>??>>?@@@?>=<<<;:9::::::9889;<=>>?>==<ddddcccddefghiihhgfffffdccffeeggeeehhgecbbdffgjjhgffhikkigffijkkihgggggggghhhggfeeeffgggffedeeeddefgggghhihfecbbbaa`__abccca_accccbbaaaa``________^]\\\\[\\\\]]\\[ZYXXWVUUTUVWXXYXWWWWWWWXYZ[\\\\[ZYXWXYZZYWVTTROMMRROPPRSUVWWVVVWXXXWVVUUTRPPV[YTYZ\\\\_W\\ZZ]ab`Y\\cWNOTRRSTUWY\\_`cdddddccdfecba^^ba\\^adddcda`^`dggf__^[XXXYY[^^]]\\[[[\\\\[[[[][\\eghhhhggggfedcccddccbbcfgffdccddcbabefdb_^]\\\\]^`bbccbba````abcdefgggffgggdbeeb_`cdcaddcffddZ[[]ejda^`a_\\[\\\\]`aba```abccb`dfggdcbcdeihhifjbjggljfa^[YWX[_bb`]Y[^_[\\ZVYZYWXUTRUWSPUUSQTUUORUWXXXXTUYYUWWWVUSQQTTSRPYZXTSV\\X]^\\YYYZ[[ZXWWWXY[[[\\[[VTUUTSRRRSTTSTUVVTUUXYVUTTTUUUUUUVWXY[]^_^^___```abbaaa```aaa``^]\\[Z[]^_^\\YWUTSSRQRRSTUVWY\\]^^^^`_[ZZ\\_acdcbccb`^\\ZZ[ZZZZYYXXVVUTTTUVUUTSSRQRRSSSUWXYZZ[[\\\\[[ZYXVUTTSTUVUTUTTTTTTTSSSTUVWVVVUUUVXYZZZ[\\]]]\\[[\\\\]^__^][ZYYZ[[ZYWVVVUSRQRSSRRQRSRQPQOMIFC@<98::87;;789887777789::99888888889:::;;:;;;;<<;;;;;;;<==;99:;:998899:;;<<===<;;<=>?><967:=@CDCA=::>@BDDDC@?>?@@@@@AAAA@?>==<<;:;;;;::999:<=>???>=<;ddddddddddeefggffdcdeddcabdedceeffhjjigecdfgghjkigfgijlkihfgjklljihhhhhhhiihhggffeeffffffffffffeefggghhijjigfedddcca__`bccdcbbdccdccbbbaaaaaa``aaa`_^^]^^_^^]]]\\[[ZYYXYYZZZZYYYYYYXXXYZ[\\]^^]\\[\\\\\\[YUSRQPOOPSROQSTVXYYYYYYYZ[[ZYXWWVUSV[\\VX]^``cY`][\\`a\\V]aSPSZVUVXXZ\\^`acddcdcb``bb`^]\\\\`_[\\^`a`]]\\[X[`ccbZ\\]\\[ZZ[]_`a``_^^^__^^__^]`ffeeeeeeeedcb``abccccdfhjjigfeeffedfhigca`][\\]^addddddccbbbbcccdeeeeeeeeebacc``cdbaadccdca`Z\\_bfga_^`b_]]]\\[]^^^]\\\\]^``^]`aba_^^^bdfefhgjbiecfb^ZXVUWWZ]_`_^Z\\\\\\YYXWYYYZ\\YXVX[VSWYXUXYYRVX[[[[[WWZZWXXWTTSRRRSRQQX\\YUVW]\\__^\\[\\]^]\\ZYYZ[]^___^]XUVTRQQPOPQRSTUVVUTTUUSSTUUVVWVUUWXXY[]]\\[[\\]]]]]^__________^^^][ZYYZ[\\\\[[YXWVVUTTTTTTUUWY[\\]]]]^]XUUX\\_aba`_`][ZYXWXVVVWVVVWUUUTTTUUTTSSSRRSSTTTUVWXYYZ[\\\\\\[YWVVVUUVWWVVUTTSSSSSSRSSTTUUTUTTTTUVWWVWXYYZYXXWXXYZ[[ZYXVUUVWWVUTSSSSRQPQRRRQPPQRQQPNLFB@=:83897777367777666679:::988888888899::;;;;::;;;::;<;;<==<:9:::99899:;<<;;<<=<<<=>?@?=;97:>ADEDA=;;?ADFFEDBA@AABBABBCCBA@?>===<<<<<;;;;;;;<=>>>>=<;:eeddddddddddddccbcbcccba`abbbbdefgiklkigechhggkkhgfhjkmlihfgjklljjiiiiiiiiiihggffefffffffggfggffefhgghhijkjhggfffedb``aacddcbbcddddccbbbbaaaaaaaaa``______^___^]]\\\\\\[[[Z[[[ZYYZZYYYYYXYZ[]__`a`_^\\[XUSSRQPQSUSSVXY[[[ZZZZZZ[\\]]\\\\[ZZYXY_]VZ`fde`Zd^\\\\`a\\W]SUUXXXWWZ[]^_`abccccb_][]][YXY[^^\\[\\^_]YXXWUX\\]\\[ZZ\\\\]]^__abccccbaaabbccccddffdccbbbba`__^^_`bbccdfijlkhfefghgggiigca_][[\\]adeeeeeeddddddddcddddddeedbabc`aedbabdcbba^]Z]_bfd`_]ab_]\\]\\Z[[ZXWWWWYZZZXZ[]\\[[Z[_aa]`aefed_^WXXVUTTWWY[]_^^[[[ZWXXWXYZ\\]]][[\\ZWY^ZY^a`U^b_^^^]YY[ZYYYWUUTSRRQQPRX\\YVWX]]```^]^_`_^\\[\\\\]_aaaa``[UUSQOONNOPQRSTUXWTSUTRRTUUVWXWWUWXYZ[\\\\[YYXYZ[[ZXXY]^^^]\\[[[[[[ZXWXYZZZZZYXXWVUUVWWVTTUWXY[[[\\\\][WTSUY\\^]\\Z[[YXWVUUUTTTTUUTUTTTTTTUUTTSSSSRSTSSTTUUVWWXZ\\]\\ZXWVVVUUVWWWVUUTSSSSSRRRSSSSTSTSSSSTTUUUUUVVVVVVUUVWXXXXWVTRPQQRSRRQRRQQONOPQQPPPPPPOOMJD@>;8656976544567776665789:::988888888889::;;;:::;;::;<<<=<<;:::::99899:;;;;;;<==<=>>???>;97:>ADEDA=;;?AEGGFDCBABBCCBCDDCCBA@?>>>=<===<<<;;;;<<=====<;:eeeeeeeeeeeddbbcbbbbaaa`abbaa`bdfhjlmlkifbjhgglkiggiklnlihfhjkmlkjjjjjjjjjjjihggffffffffggggghgffghghiiijkkjiihhhhecbbbbdeddccceeedcccbbbbbbbbccbbaa`````__``a```____]\\\\[\\[[ZZ[\\[[ZYYXWXZ\\^`bcba`]YWUUUTSSTUXWW[\\^^^^]\\\\\\\\\\]^_`__^]]\\[[a\\W^ehhd_^c_]^b`]Z]SYZ\\[ZZ\\^`aba`abcccba]YXYXWVVYZ^^\\[Z\\\\[YXXYVX[\\]^]]_`aabcceeeffedccdeefgffffecba``__^^]]\\\\\\\\^`bccdehknmiffgijjkkjhfca_[ZZ[\\_ceefggggghhhgffedcccccddc`^^__cgfcbcdcba_][[^abc`^^^ab_]]]\\ZXVUTSSSSUVVUTVWYXVVUVYZ\\YZ[\\]]ZUWRWXVSST[YZY[^_`[ZZXVWWWXYZ\\^__\\[]\\[X`\\[^eaY`dbaaa`\\\\[[ZYYXVWVTRQPPRUZ[YVWY]`abb`_`aba`^]^_`bdddedc\\TTPOOONMNOPRSSSWXVUVTQQSTVWXZ[XUWZ[[[[ZXWWVVYZYXVVWYZZZYXWWXXXXXWVWXXXWWVWXXXWVWXYYYYXXWWWXYZ\\^]YTSRSVXZYVTUWSQQSSSRRRRRRQRSTUTTTUTTTSSSSSSTSSSSSSTTUUUTUWWXWVUUUUVVWXWVVTTSRRRRRQRSSRRQQRRRRRSSTTSSSTTTTSSSRRSTSSSRRPOMMMNOOOOOOONMMNNNNONNNNMLLKHB?<97656887543456776665689::::98899988889::::::::::::;<<<=<<;:::;;:999::;;;::;=>>==>>>>>=<:7:>ACDCA=;<@BFHGFECCCCDDDDDEFEDBA@@?>>>=====<<;:::;;<<<<<;:9fffffffffffedcbbcccbaa`bddbaaabdfhjklkjigbkifimljhgilmomigfhjkmmlkllkkjjkkkkjihgggffffffffgghhggfghghiiijklkjjjjjjgeccccdeeedddfffeddcccccbbbcccdccbabbaaa`aabbaaa``_^]]\\\\\\\\[\\]]^^^_^[XYZ[\\^`aa`]ZWVWXWVUUUVXZ[^```_^^]]]^^^__`a`_^^]ZZ^X[effggZ`a`_aee]`[Z\\_]\\[]_acddbaabcccba\\VUVVUTVX[__]\\\\^]\\ZZZ\\XZ]^_``abccceeeffghgfeddeefghhhgfdba`_^^^]]^^^]\\\\^`abbcdgkllhghikkjjhfdb_^][[\\\\\\^`bcehiiiijkkjhfdcbbaabbba```_`dhgdddddcca^[]`cca^]^`aa`]]]\\YURRQQQPQRTUSSTUWWUTSRSUWZYWUUVURXYY[WVTRZ]]\\\\_`_ZZYZZYXVWXY[\\]\\[Y\\]]U\\\\][ea]bfdaccb^^\\\\[YXWWXWVTQQQTWZ\\ZWXZ^acccbaabcba``baabddeedaYQSPQQQONNOQSSSRUXXWWURPRTWXZ\\]YUX\\]\\[ZYXWWVVXYXXYYYXXXWUTSTUVWWWWVVWWVUUUVVVVVWWXXYYZZZXWWWXY[[ZXTSQRTUVUSQQRNMOPRSSTSSSRRRSTTTUUUUTSSRSSRRRRSSRRRRRSSQPPSTTTTTSTTTUVVUUTSRRQQQQPPQQRQQPPQQQQQQQQQPPPQQQQQPPOOOPPPOONNMMLLMMMLLLLKJJIJKKKKKKKKJJIHEA=:86546887543456777665579:;;;::9::9998889:::::;:::::;<<<<<<;:::;;;;:::;<<;;:;=>>><;;;<==<:8:=@BCB@=<<@CGHHGEDDCCDDCCDEFEDCBA@????>>====;:999::;;;::998ffffffffffffeeeedddcbbbdedbabbcdegiijiihgcjiikomkiikmoomigfhjkmmmmmllkkkkkkkkjihgggffffeeffgggfgfggghiiijkllkkkkkjigfeeeefefffghgggfeedddcccdddeeedcbccccbbbbccbbaaaa`__^^^^]^______^\\ZZ[\\]]\\]]\\\\ZXYZ[ZYWVUVWXZ\\__^]\\\\\\]]]]\\\\]]]]\\[ZYWXYW[ecbddV]^`acfe`e^_`ca__`bdffeedcddddb^YUUVVVVW[\\_`__`aa`^^^`\\]`abcddccbacdeffghgffecbcefggggfdcbccbaaaaaaa`_^_``a`acfigfeghhihec`_^^^^]\\\\\\\\\\]^`adgiiiijjjjhfda_^]]^^^^_cbaaeggddefgggda_`bdca^^_aba_]\\\\[WROQSSQQQSUWTSUXYXXVUUUUWZZXUUVVV]]^^ZYYTZa`_^^`\\WWWXYXVUWWWWWXYWUY\\ZRXZZXbb^cgc`ced]_^\\ZXWWWXXXVTSSTVZ]\\XYZ_acdfdb`_cecbbba``aaaa_[SMSSTUTRPQRTUUSQRVYXXVSQTWYZ[]`\\VY^_^]\\[ZZZXY[[YY\\[ZZYXWVUTTUVWXXWWWVUSRRSSSSSTVWYYYXYYYYXXXYXYYZYWVTTTUUUTRQRQPPQTTUVUUTTTUUUUTUUTSRRRSSTSSSRSSSSSSSRSQQQRSSSSSSSSSSTTTSSQQQPPPOOOPPQPOOOPONNNNNNNMMMNNNNNNNNNNNNONNNMMMLMMMLKJJIIHGHHGGGGGGGGFFECB>:874446888653334567765568:;<<<;:::::998889::::;;::::;<<<<<;;9::;;<;::;;;;;;:;=>><:999:;<<:9:<?@A@>===ACGHHGECBBABBBBCDEEDCBA@@???>>=<<<:98888899998777eeeeeeffffeeeeeeddddcccddcabbccdefghihhgfeijjmonkjiknooligghjklmnmmmllkkklllkjjihgggggfeedefffffgfgfgghhijkkjjjjkjihggfeeeefghhihhgffeedccbcddefeeeddddcdcbccddcbbaaa```````___````_^][\\\\]]\\[ZZ[\\YZ[\\\\[ZXVUVVWX[\\\\[ZYZZ[[[[[ZZZ[[ZXWVVVWX[]^__\\XZ]_adfebb`cddc```bfggeffeeeeeb[VUVWXXWXZ]``aaacbaabbb_`bcddedca`_aceefggfdeda_bcdddeeedccdeddcdeddcba```__``cffcbceggge`^[ZZ\\^^^]]\\\\\\\\^_`cfgghjjjjigec`][ZZZ[\\\\\\^aceeffedfghhgebaacdca^_`aaa_]\\[YUQPQTTSRRTWXUTXY[ZYXXXVVWXXWVUVWY\\__`][\\Y[ca_^\\[XUUUWXVUUWVVUTUTTRTTUPUTUU]]]```^cec[__\\YWWWXYYYXVSSSUY\\]WXZ_bccgdb^^cccbab_^\\\\[ZZXUMOTTVYWSQVVUVVSPPVXYXWTTVY[][]`^WY`_^]\\\\\\\\\\\\\\\\\\[[\\[[ZYYWVUVVWXXXWXXWUTRQQQRRRRTUWYYXWXYYXXXYXXYYYZYWVVUTUVUSQSTQQRUVWWWUVVWVVUUUTTTSRQRSTTTSSRSSSSSRSSRRRQRSSRRRRRRRRRSSSRQPPOOOOOOPPOOONNNMMMMMLLLLLLLLMMLLLMMMMMMMMMLLMLLLLKJIHGGGFFFEEEEEDDDCCB@>;97645678887542235666654479;<<<;;::::9998789::::;;:9:;<<<<<;;:9::;;;;;<<;;<<<;;<<;98889:;<:9:;=@?>=<<=@CFHHGEB@@@@@@ABCCDDCBA@??>>>>=<;:988887888777655eeeeeeeeeeeeffffedddeeedcbbcccbbcefggffffghjlnpnllkmopolhgghjklmmnnnmlllllllkjiihhggggfddcdeeffggfffghgghijjjjijjjjjihgfedegijkjiihgffeecbbcdeefeeffffeedccddddcbbcccbaaaaaaa``aaa`_^]]]^^^]\\[[\\]Z[]]\\\\[YWVUUTUWXXWVVWXYXXXWWVWVVUTSTUVWWXZZ[YWVX[^abccbbceffeca`bfghfhggffed`YUTX[[ZZ[]_abbccedceeeeabdeeedc_[[]_abcdeeebcc_]_````bcdddefgggfffggfedca__^_aabb`_abddd`[ZYZ[]_```_^]]]^^`ceeffffghgec`]ZXWVVWXXXZ^abdffedfhiigecbbcccbaaaaa_]\\[ZWTSTUWWVTTWZ[XV\\]^]]]][ZYWWVUVWWY[\\_ab`_^_abb_\\XVSRRSUUTTVWUUTQQPPNPQRMQPQQWVVWYY[acbX`]ZWVVWXYZZZXUSTUYZ_\\XY_bbcjec][adba_^ZWVVUUTRRMPTVY[XSSYYYZZVOMTXYXWXYZ\\]^\\]`_YZa__^^____^__^]^`][[\\[ZYXYZ[[ZXWXXWURQPOPQQQPRTVYYYYZZZYYYYXXXYZZ[ZXWVUVWWVUWXUSTXYYYXWXXYXXWVUTTSRQQRSTTTTRRSTTTTTUTSRRRRRSSRRQQQRRRRRRQPOOOOONNONNNNNNNMLKKKKJJJIIIIIJJIIJKLLKKKLLLMMMLLLKJIIHGGGEEEDCCBBBA@@?>=:864446789998742124566654369;===<;;:99::9988999:::;;::;<==<<;;:::;;:;;;<;:;<<;::999987689:;:999;===<<<=?ADFFECA??>>>=>@ABBBBBA@?>>===<<:8777777777766544eeeeeeeeeeefgffedddeffecbbcddccbbcdeeedffghkmnpnmllnpqolhggiklmmnnnnnllmmmmlkjiiiiihhgeccbcdeffggffghgggghiiiihhijkjjihfedfhjlmlkjihggffdccdeeefedfgggggdbceeeddccddddccccbbbaabbbba`___^___^__^_\\]a`]ZYYXXWVUUUUUTSTUVWWWVVVVVUUTSSTUWWXYXXXWUUW[^]\\]_`acefgfcb``ceihjihgedc^WTU[^^^]]^aabccdeddeddeabdddc`]XVWZ\\^``bbbb^`_\\\\]]\\]^`acefghiiihghiihgfca`]]_`a`_^_``aa`][Z[\\^``aa``_^]]^_`abbb`_`ceec`][YXWVUUVVVX\\^^\\_ccdehhhfdcbbcccbaaa``^\\ZYXWVVWYZZYWVX[]\\[_`a_^``^][XWVUUVWXZ]_ccba`abcb^ZTRPPPQSUVXZYVVUSSSTRSSSNQQMMSQQRSUW[[\\X\\WVVWWXYZ[[[ZWVUWYZ]_[[`bbblha[\\__`_[ZVSRRQQPOPNQSW[\\XRW]YY\\\\WOMTYYYXZZ\\^^_\\^b`YZa__^]^__`aaa`_ac^]]_^]]\\]]]][ZYXWUSRQPPQRRQQRTVXXYYZ[[[ZZZXXWXZ[\\\\ZYWUVXXWVZZWUVYZ[ZZYYZ[ZZYWVUTSRPQRSTTTTSSTTUUUUVUTTSRRSSSRPPPPQQQQQQPONNNNNNMNMMMMMMLKJIIHHGGFFFFEFGGFFGHIJIIIIIJJKKJJJJIIHGFFEEDCBA@@@?>=<;;:865345779:;:9853123567664358;=>>=<;;::::::99:999:;<;::;<===<;:::;;;;:;<<;::<=<:87888776789:99889;;;<<<<>?BDDCA?>==<<;<>?AAAAA@??>==<;;;:8666676666654433ffeeeedeeeefffeeddefggfddefffdccbcccddcdeehjkmnmllmoqrokhfgiklmmnnnnnmmnnoomkjihiijjigdbbbcdeffffffggghgggghhhhhhijjihgedegiklllkkjiiihhfeedeeeeddefghhhdbdfffeddeeeeeedddcccccddccba`````aabccba_`c`\\ZZYYZYXWVVWWVUVWXXWWVVWWXVVWWWXXYZ[ZZYWVVVY\\\\[YY\\^``ccdcb`_]^afhjihfcb`[VWZ_ba`^]_``abbccccdbac`aaa`_[XTSWYZ[\\]^^^]Z][YYZZ[[\\^aceggikjjigiijihfdb_]]^_____^^__^][[\\^_abba```__^^_`aa`__][\\_bb_^][YYYXWWXXXY\\]ZUY^``bdefdbb`bdcaa```_^\\ZYXXWXZ[\\][ZYY[^a`_abdb`cca^[YWTTUVVWY[]bba`_`ab`\\VRPQQRTVXZ\\^\\YZYWVVXVWWWRUSNOSSRQTUVWSWXYRWXZZ[[[]\\Y][ZZ[]^_a__abb`lha\\[]\\\\[XVSQQPOPPPQQSSXZZVSX^YZ]^ZROUYZYYZZ\\^^^\\]a`WW^\\\\[[]_`abbbbbce`_`ba`__`aa`]ZXWUTTTSRRTUTSRSUVWXXYZ[[[[[ZYWVWYZ[[[YWVVWXWXZ[YWX[[[[ZYY[\\[ZYYXVUSRQQRSTTTTSTUUVWWUVVUTSRSRRRRPPQQQPPPPPQQPPPOONMMMLLLLLKJHGFDCBBAAAABCDDDCCDEEEDDDEEFFFEEEFEFEEDDDBBA@>===<::9887654445789:;;:975223577886448;>???=<<;::;;:::;:99:;<<;:;<=>>=;::9:;;;:;<<:9:<=<:87788765789998788::;;;;==>?AA@?><;::9:;<=>>???>>==<<;::::8655566666654322ffeeeeddddeeeeddddefggfeffffeddccddccccdeegiklmkllnprqokhfgiklmmnnnnnmnnooonlkjijjkkigdbbcddeeeffeffffghggghhhhhhiiihhfdddfhjkkkkkjjjijihgfeeeeeddeffgggdceggfddeefffeeddddcccdddddca``````abccba`be`[ZYYYZZYXWWWXYZZZZYXWWWXXXYXXYZ[[[\\\\\\[ZXWWXZ\\\\ZXX[]^^]\\\\]^^]\\[_ceggeca`^ZUZ]cdca^^^^_`aabaaab`_a^^_^]ZWUSTWZYYZ[\\\\[ZXXWXXYZZ[\\^`beggikjihgiijihfda_\\\\]^]ab^]^^^][[\\]`bccba`__^_____`a`_^\\Z[^`_^]\\[[[[\\\\]]]__]][U^`___`cdca``adba`__^]\\[ZYYYYZ[\\]]\\ZZ[]_ababbee`eec_]YYPTUUTUXZZ[ab___`^\\XTQQSTUVXZ\\^`]\\[[YZZ]\\\\\\\\YZUNSWUWQTUXYWQaaUXZ\\]]\\[^^X\\\\\\^^^^`bb`bbc`jia\\[[ZYZWTSPOOOOPQQSUWYYXUTXYYY]^ZSQUXYYXXYZ[[YVX\\[WVWXWVWYZ\\]_`abcdd``acca`_`aa`]ZWUTTVWUSTVWVUTTUVWXXXY[[ZZZZXWVVWYZ[ZXVUUVWVUZ\\XXYZ[[[ZZY[\\\\ZYZYXUVSQQRSTTUUTTUVWWWUUUUTSRQQPPPQQPPPOOOOPQRRRQPOONNMLLKJJIHFEDB@???????@ABA@@AAABBBBBBBCCCCCCBBBBBAA@??><;;::98766554434589:;<;;:85323578897547;>@@?>=<;;;;;;;;;;:::;<<<;:<=>?><::9:;;:::;;:99;<<:876776657889887789::;;<<<=>??>><:99999:;<<====<<<;;;::::97654556666665433ggfeedddddeeddcdddeffefghhgfeddddedcccccdegijjjjkknqrqnjgffhklmmmmmmmnnoppoomlkjjklljgeddeeeeeeeeeeeffghhggghggghhiihgedddfghijjjjijkkkkihfeeeeddcdffeffefghhfddeeefffedddddddeeeddca`aa``_`abcb`_aa^\\\\[ZZ[[[ZYYZ[\\]]]\\[YXXYZZZZ[\\]^___`___^[ZZ[]]\\[[[\\\\\\[YXWYZ[\\[[[_`aa`_`_^[V\\`eeda^\\\\]^____^^_`^]]\\[[[ZXVUUWY[ZYZZ[[ZZYYYYYYZZ[[]`cfffhihhgghiihgedb_\\\\]_``_^]^]]][[\\^`bdca`_^^^_____```__\\[]^_^]\\\\]]^_`aabbcca`]V`a^^^_`a`]\\_ec_`_]\\\\\\[ZZ[[ZYZ\\\\]^\\Z[]_`abbbcgfaffc_\\XYPUUUSTVWVSZ\\[\\]\\ZXTRRSVXYZZ\\_`b`_^^]^_aa``a^^WQVZZ[TVX[\\\\T`bZ\\]_`_^[]bUYa`a``abdcbbcc`gf_[YXXXXWTSPOOPPQQRSUWXXVUUUVW[^^[VTVWXXWVVVWVURRUUSRSSRRRSUWY[]_`bddbaaccb`__aa_[WTSSUY[XVWYYXWVVWXXWWXY[[ZZZZXUTUVWYYYXVUUUVWXY[YZ[\\[ZZZZYZ[[[Z[[VTTSRRRSTUUUUUVVWWVVUTTSSRPOONOPPPPONNNNOQRSSSRQONLLKJIHHGFECA?=<;;;;;<=??>=====>??@@?>>????>=<<====<<<<:998876554455445689;<<<;;97434578998657;>@AA?>=<;;;;;;;<;;::;<=<;;;=>??=;:9:;;::::;:99:<;:877776656789887789::;;<;;:;<=<<:8888999:::;;;;::::::99:::8765556667775433hhgfeedddcddddcceedeeefghhhgedddefdcccbbddfhijiiiknqrpmheefillmmlmmmnnoopppomkjijlmljhedefeeeeedddddefgggffffgffgghhgfedddefgghiihhijkkljigfeeedcadfedddfhhiihggfefgffedeeedeeffeddca`aaa`___``_]\\]]\\\\]]\\[\\\\[ZZ[\\]^^^^][ZZZ[\\\\\\\\]^`abbabaa`_^\\]]^^]\\\\]]\\[YWVUVYZ\\[ZZ\\]\\\\]]^^`_Y^`ddda^[\\]]]^^][[[]\\\\[[ZZYYXXXZ[]]\\[[\\]]\\[[[[[[[[[[\\^`bddefggffegghgfeca^\\[]^a_]_^]]\\\\\\\\^^`bcb`__^^^____`````_^^__^]\\\\]]^_`bdeeehgec`Ybd``abba^\\\\ae`^b^ZZZZYYZ\\\\[ZZ\\\\]]\\[[_abbbcccgfbfeb]YVZSVWVSTWWTQVXXXZYVTRQSUZ\\]]]^_adba``_`bddbbda^YTY]`_UX[^__Y`c___abba^`_[Wa_cdbbbccbaba_ecZYXWWXYXUSPOOPQQRSUWYZYXUSRSWY\\\\ZXUVWWUTSRRSSQPNPPOOPOOOPQRTUWY[\\^``__`bba_^^__\\XUSRSW[]ZXY[[ZXWWWXXWVWXZZYYXWURRSTVWWWWUUTUVYWXYZ[\\\\[YYYYXYZ[ZZ[ZVTTTSSSSSSTUTTUUVVUUTSSRRQONMMNNOOONNMMMNPQRRQQPNLJIHHGFEECB@><;9989989;<<;:::::;<===<:9:;::9988899999::9877765444445545689;<<<<;97545679999766:=@BB@?>=<;;;:;;<<;::;<<<<;;=>??=;:9:;:999:::989;;9877776657889987789::;;::::;;<;:9767899:9999999888998899998876656778887644iihgffeeedddcdcceeeeeffgggffeeffffedcccceefhhhhhhjnpqplgeegjlmmlklllmnnnooonlkjjklmligfefffefeeddddddeeeeddeeeefgghhgffeeeeeffggggghijjjjhfeededcaceedcdfhihhggggeefffedeeedeeeeedcbabaaa`__^^^^]\\\\[[\\]\\[[[[Z[[\\]]]^]]\\[Z[]^_`^__`aabbbcccb`_]`_^]\\\\\\]][ZYWXVWY[^^]\\\\[ZZZ[]^__[^_a`ba^\\\\]]^_^][Z[]]]\\]]\\\\\\\\]]_`___^]^```_]]^]^]\\\\\\\\^_abbbcddcccdefedca`^\\\\]]]^__^\\\\[[[\\^^`bb`__``_^_```_`a````_^^]\\[[[\\\\]_bdefgijhfc^egedddb_\\\\_`a\\^`[XYYZYYZ[[ZZZ[[\\\\\\[\\_bbbbba`aa_a_]ZYW[WYXWSTXXVTVXWVVUSRQSWY^``````abcaaa_abca``c_\\YX\\`c_VY]a^\\\\aebbabccda_Zb^_^ceb``__^^^^^b_ZYZYYXYYWRPPPPRRRSVY[\\\\ZWRRSVWZZXXWWWVTRRRQQPPNMNONOPOONPSSSSSVUVWXZ[\\]__^]]\\\\\\ZWUSRSVYZYWY[[ZYXWWXWVUVWXWVVUTQONOQSTUUUTTSTUXVVXZ[\\[ZXXXXXYZZYXYYWVWTSRRRSRRRRQRSTSRRQQPPOOMMKKLLMMMMLLLLLMNNNNMLKIGEDDCBAA@><;:9877666788998877789:;:9766777776567777888887776655556666669:;<<<<;:87667799::9767:=@BAA@?>=<<;;;<<;:8:;<==<;<>???>;99::9:9:98778:::98777777788998778999:::9::::;::865788:;;;:::99998888889998877767788999866jihgggffeddddcdddddeefffffefffgggfeddddddefghhhhgimopnjgeehkmmlkkjjjklmnnmnmkjjjlnmkigfffefffeeeeddddddddddccdefhhgghggffeeeeeffeefghhhihgedddecbbcddcbdfghggggffeeeeedddddddddddcccbbbba`__^^^^^]\\\\[[\\[[[ZZZ[\\]]]]]]\\[[[\\]`aa````aa`aabccb`^\\b_]\\\\[\\\\\\[[[ZXXX\\\\__^]][ZYZ[[\\^^]^^^^``^]]]^^__^\\[[]]]]^_^^]^`baa```___aaca````__^]\\\\^_``a`___`aaccdcba`_^]\\\\[\\^_^\\ZZ[\\\\]^^`aa`^_``_^^_``_`a_```_^]]\\[ZZ[[\\^`cefgjjhfebgigfeca^[\\__^\\]]ZWYYYXYZ[ZZYYZZ[[\\[\\^`a`ab`_^^]]][YWY[X\\YXSUYXVUVTTTUSRQQSX[^aaa`````bbaa_`a``^^a^ZZY^ac_X[`b]Y]adbbaaccec^]_^^_cea^\\\\\\\\\\\\\\\\^]ZZZ[YXXZWRORPPRRSTVY[\\][XTSTVXXXXXXXWVTQQQRQPOOOPOOOPPOMPTUSRRTTSSUWXZ[\\\\\\\\[[[ZYVTSSSUXYXWXYYYXWWWWWVUUVVVUTSQOMLLNPRSSTSSSTTUTVXYYZXXWWWXWXYXWWWXWUTTSRRQRRQQPPQQQQPOOOONNNLKKKKLMMMLLLLLLKLLKKKJHFDBAA@@??><;98765555556777666666789985456666665565556888776676555666776689:<<=<<:9767889:;;97779=@ABA@?>>=<;;;<;:989;<==<<;<>??=;:99::99997678:::98888778888888888889:::9999:998765678;;<;;::9999988878889887777778999:986kjihihggffedddddeddedeeeeeefghiihgeeddeeffgfgghgfhlnnlhgggikmmlkjiiijkllmllljjjklmljhggffefffeeeedddddddcccbbceghhhhhhhgfefeeeeddddeffffedcbccddccddddcdefffffeeeeedddcdddddcccccbbccccbba``__^__^]\\[ZYXYZZZ[\\\\\\\\[[[[[[[\\]^`bba```__^_`bbcb_^\\e^\\[ZZZZZZ[\\[ZZ[_`cba`_]\\\\[ZZZ\\]^^]\\]_______`a`_^^^__``aba``bdcbbabcba`bcecbbaa``_]\\[]^__^^]\\\\]^_`aba`_^^^]]\\Z[^^\\[XYZ[\\]^^`aa_^_aba^^_``_`a_```_^]\\[ZYYYYY[]_cegikigffhjjheb`\\Z[]]]\\ZYXXZYXWWXYYXXXXYZZZ[[]]^^^_^]\\ZYZ[[YX[\\Y`[ZRWZXVUTTTTTSRQRUY]`ccca```]bbaa_``\\][[^\\YZ[^`a_Z]_c_X]aca`^^_acc_\\]^]]ab][XXXXXXXYZZ[\\]]ZXXZYPPTPPUTTTWZ\\]]\\ZXWWXXXXYYYXWUSQRRTSRQSSRQQQRRPMQXXURRTTRQRTVXYZZZZZYXXXVUTSSTUVVUVWWWWVVVUUUUTUTTRPOONLKJKMOPQQRRRRRSSUVWWVVUUUVVWVWVVUUTTSSRQQQRQQOONNNNNNNMMMLLLLKJJJKLLLLKKLKKJIHGGGGFDA?>==<;;;;:976544444345665554445678986434556665454456788877776666778899889:;===<;:988889:;<:9889:<ABBA@?>>=<;;<;9878<>??><;;<>@><;::;:999865689::9888888888888888888899999988776653689==<<<;::99::99988789888778888999:;:8lkjjjjihhgffeedeeddddddddcdfghiihgffeefffgggfgigfgjllkhhiijmmmlkjhhhiikkklkjijkkklkjhggggfeffeeeeddddddddccabceghhhhhhhggffeeeeddcddccccbbaabcddccdddddddddddddddddddddddddddccccccccccbbaa``````_]\\[ZYXYZ[[\\\\\\\\[[[[[[[\\\\]_accba``_^]^_bcda^_]e_\\[ZYYZ[[]^]]]^abcdcba_^^]\\[Z\\^_^]\\]__``aaabcbba``abbcddcbcdfeccbdeedbcdecbbaaa`^][[]]^]][YYZZ[\\^^_^]]\\^^]][[[^\\ZZVWYZ[\\^_`a`^^`bdb_^`aa``_`ca`_^]\\[ZYXWWWWY\\_bcfhfdehgfggdb_[YZ[\\[ZXWWXYYVTUVWWVVVWXYYYYXYZ[[[[[Z[ZY[]^[Z]^[a\\[VXZWUTSTTTTSSRSUY]acdcba__Za```^_^XZXX[[Y\\[[]]]]^]a`Z[__\\[XXZZ[][YZYXX[\\YXWWVVVVXXYZ[\\]]ZXXZZPQVRRWVUUW[]^_^\\[ZZYYYYZZZYWVSPSTVUTUVUTSSSTSRPUXZWRQTVUTTTVXXXXXXXWVVUUTSSRRSSSSSSSSSTTTTTSSTSRRPNMMLLKJJKLNNOPPQQQQQRSTTSSRRRSSTTTSSRRQQQQPPOPQPOMMLLLLLKLKKKJJJIIIHJKKLLKJJJIIHGEDCDCA@>=<;::::::9865433333456654444334668986544455666545677888888887666789::;::9:;====<;:98889:;<;99889;?ABA@?>>><;;<;9878;>@?=<::;=?><;::;:987644689::9888888888888888888899999998886654689<<===;::99:::::9988999988777899:;<;9llkkkkkjjihhgfeffeeddcccccdegghhhggggffghhhhgfhfffhjjihiijkllllkjhghhijjjkjiijkkklkihgfggffffeeeedddddddddcbbcefgggggffffggfeeeddccbbbbbaa``acddddddddcccccccccccdddddeeeeeeedddddddddcccbbaaaaaa_^]\\\\\\[[[\\]]]]\\\\\\\\\\\\[[\\]^_accbbba_^]]^acda^_`fa^]\\\\\\]]^`a`__`dddeddb``aa_]]^``__^^_abcdcccddddcbbcddfedbceecccceffdbbbca`___``^\\[\\\\]\\\\[YXWXXYZ[\\]\\[[[]^]\\[ZZ]ZXWUWXYZ[^_aa`_^acec`_aba`^_cdb`_^]\\[ZYXXXWWWX[^`cdb`bedbcdb`]ZWXZZYWUTTUWVSQSSVUTSTUVWWWVUVVWWWWWY\\\\[]`a^^^_\\a[ZYYWUTSSSTSSSUUTUZ^bcccca`\\X^___]__YYXWXZZ[ZXYZ[[[W[\\YWXWUSQPSSSUVVVUUUWXWWWWWVVVXWWXYYZYWWZ[ZSTZUUYXVWWZ^__`^]\\[[ZYYYYZYWVSRUWYXWVVUUTTTTTSRUXZXTTVZYXVWYYXXWWWWVUTSSSRRQQRRRRQQQPQRSSRRRSSSRQONMMNNLKKLLLLMMMNNNOOOPPPOOOOOPPQQQPOOOOOONNNMNOOONLKKKKKKKJJJIIIHGGFGIIIHHGFFEEDCA@???>=<;:9899998876543344455775444333456898654444567655678899999999987789:;<<<;:;;<===<;:98889::::99878:=?A@@???>=<;<;9878:=>><:89:<>=<;:;<:98764358:9:9888988999988889988889::::9888766479:=====;::999:;;::99899999888899:;<=<;mllllllkkjiihhgggfedccbbccdeefhhhggggffghiiihghfefghhhhhijjkkkkjihhhhiiiijihijkkkihhhgfeefffffeedddddddddccbcceffefefeeefgffeeddccccccbaa```bccdeeedddcccccccccccdddeeeeeeeeeeeeeeeeeedddccbbbbbba`__^^^^^^_^^]]]]]]]\\[\\]^_acccbba`^]]^acc`_`bgb_^^^^_aacba`_aefeeedaacccb`^`bbb`^^`acdeddddccdcccdddeecaabcbcdddddca`a`__^]^``]\\[[]\\[ZYYXXWVWXY[[[[Z[]]\\[ZYY[YWVTWXYZ[^`bba_^adec`_`a`_^^ceba`^]\\[ZYXYXXWWXZ\\]^]]\\_cb`____]XTUYYWVSSRSSSQPQRTTSSRSTUVUSSRSSTTTWX]]]]bc`^^ab\\YYXXUSRRQQSSSTUUTUZ_bccccb_\\X]^]]]_`YYXWTXZYWTUVUVSRQQPNMLMLKKMNOQSTTTUVWWWXXWWWVVWWWVVWXXVV\\\\[TW[QVYXWWVX]_`_^^]\\[ZYXXXYYWUSSVWZXXXVTWUSTTTRRUWZYVVY^][XY[ZYXWWVUTSSRQQQQPPQQQQQQPPPQQQQQQRRSRQONNNNOMLKKKJJKLLLLLKKLMNNMMLLLLLMNNMNNMMMMMMLLMNNNLLKKKJJJJJJIIHHGFEEEFFFFFEDCCCBA?=<<<;;:9877788888765445444568865344334568986544445777667899:::::::::9889:;<<<<;::;<<=<<;:99878899999878:<>?@???>>=<;<;98789;==;:889;==<;:;<:9765324799:988899999999999999889::;;::998776589;>>==<;::999::;;;:998999999899:;<=>=<nmmmmmmllkkkjiihhgedcbbbbcdeefgghhhggffhiihihhhgffffgghhhiijjjjjjiiiiijiiiiiijjjjhhggffeefgfffeedddddddddccbcdefedcccccdefffeeddcccdddcaaaaabccdeeeedccccccccccccddeeeeeeeefffffffeeeeeeeddccccccbaa`aaa```a``______^][\\]^`aabcddca_]]^aab_]^egea```abcddcb`^`chdeee^cdfgfcabddcb``acdeddcccbbcbbbcbcddb`_^``bbaaaa`_^^]\\[Z[[]][[[[]\\ZZYZZYXWVWXZ[[[[\\]][YYXXZYXWVWXY[\\^`bba_^`bcb_]^__^\\^dd```_^\\[ZYYZZYYYY[\\]]]\\]_b`^\\\\]_]WSUVVUSRQPPPQQQQOSUTRRSSTUTSQPQRRRSUX\\]]\\ad_]Z]]XVUUUSQOOOPRSSUVUTVZ^abccbb_\\X[[[\\]__ZZYWRWXWTQRRQRPPMMLJHHIJIHJKNQSTUUVWXXYZYYXXXXWWUUUTVVUR]\\[WZ\\TWZZWWVWZ]]^]]\\[ZYXWWWXWUUTTWX[WWUSRVURRTSRSUWXXWW\\`^\\YZ][YWVUUTSRQPPPPPPQRRSSRQPPPQQPPQRRSTSRPOOPPPOMLKJJIIJJJIIIIJJJJIIIJIJJKKKLMLLLLLLKKJKLNONLKKKJJJJKKKJJIGFDCCBBBBBA@@??>=<:9889998765567888876445555668875455433568:875454348876789::;;;;;;;;;:99:;;<=<<;;:;;<<<;;::998877889987789;>?@@?>><;;<;98768:;<:97779:;::::;:9765433799:9889999::::999999999:;;;;;:99977658:<??>==<;:9999:;<;;9989999999::;<=>>=<nnnnnnnnmllmlkkjihfedcccccdeefgghhhhggghihhhihhgfeegghiihhhiiijkkjjjjjkkjjiiijjjjhhgggffegggfffedddddddddcccdeefeecaabcdeffeeeddccdeeedbbaabbcdeeeeedccccdddddddddeeeeeeeefggggggffeeffffedddddddcbbabccbbbbaa``````_^]]^_```abbbaa`^]^_``_\\^efda```abccdca_]`dgcdee^cfhiifbcfedca``bcdccbbaa````abaabb`^][\\^``_^^]\\\\\\\\[ZYWYY[[ZY[[\\\\ZYYZYXWWVWXZ\\\\\\\\]^][ZZ[[[XXYYZZ[\\]__``^\\\\]^^][Z[\\\\[Z\\bb____^]\\ZYZ[ZZYYZ[]^___acc`][[]_]WTWUUUSRQQQQRRSSNRVUTTTTUVUSRPQRRRQTUYYYY^`[VTVVTSSSRQPNNNPRRTVVVUW[]_``aa`^\\XXXYZ[\\]YY[UPUVUTOOONPQQMLKJHIKLJHIKORTUVVWXYYZ[ZYYYYYXWVTUVWVUR\\[[X[XXXYYWXVVXYZ[ZZYXWVUTTUVVUUUUWXXUSROPTTRSTSSTUUUUVW\\a_]Z[\\XVTTSSRQPOONOOPQQRSSSRQQQPQRQQRSSTUSRPPPQQPNMLKJIHIJIHHIIIJKLKKJJJIJJKJJKLLLKKKKKKIJLMNMMKJIIIIJJKKKJJHGEBA@?>>>=<<;;;:98766777765445679:877555555668986555444579:976565337:87889:;<<<;;<<<<;::9:;;<<<;;::;;<;;;:::98877889:98889;=>???>=<;;<<:87679;;:988789:::99:9875433479::9889:::::::9999::::::;<<<;;::988758:=@@?>><<:::9:;<<<;::89:9999::;<=>?>>=oooooononmnnnmlkjigfedddddeffffgghhhggghhhhhihhhgfegghiihhgfiijllkkkklllkkjjjjjjjiiihggggggggffeddddddddddcdefggfdcbbbceffffeddddceffedcbbbbbcdefffeedccddddddeeeeeeeedeefghhhhgggfffgggfeeddeedddcbbcddccccbaaabbba`_^^___^^__^_``_^]]^__^\\^acb`___`aabbb`^\\^acbcdc_dfjjjgcdffeda_`aaaaaaa``___^_``_`_^\\\\[\\]__^\\[[Z[\\\\[ZXWXXZYYYZZ[[YXYYXWWVVWY[^^^^___]\\\\]]\\YZ[\\]^^^^^^]\\[YYZ[[YXWWYZXX[`_\\^__]\\\\ZZZZZYYXYZ]^acdefea\\[^aa_ZWXVUTUUTTTTUUVUQSYXWVVWXYXVTSSSSPOQRTTSTXYVQQSSRQQQQQOMMMOQSWYXXVXZ[\\]^^^\\[[XWVVXXYZVVZWQUUVWSRRRSTUPNONLMPPOKJMQTWWXYYZ[[\\[ZZZZ[[ZZYXYZZZVUYYYYYWXWWWWWVUVUVWVVUUTSRRRSSTUUTTVWWSSQOQWUTUVUTUTSSUVW[_]\\ZYXURQQRRPOPPOOPQRRSRQRRRRRRRSSSTUVVWVUTRQQQQOMLLKKJJJKJJJKKKLMMLLLKKJKKLJKJKKLKKKKKJIIKMNMMKJIHGGHHIIIHHGFDA>=<;;;98877777655455555555568;;:87566666678999776666679;986565438<98889:<<=<<<==<=<;:::::;;;;:99:;;::::::9877789999889::;=>>>>=<;;;<:98778::;:988889::9998765433479::98999::::::999::;;;;;;<<<;;:::88758;>B@@?=<<;;:9:;<<<<<:::;;::::;;==>???>pppppooonnonnmlkjjhggffeeeeefffffhhhgghhhhgiiiihgfeghhiiiigdiijllllmmnnmlkkkkkkkkkkjiihggggggffedddccccddddefgggfedbbcdeggfffeedddeeeedccbbbbcddeeeedddddedeeeeefeeeeddeefghhhgghggggghhgffeeeddddcbccdddcbbaaabbbbba`___^_^^]]]]]^]]\\]^^^]\\]```^]]]^__`a`_]\\]`_`accadfkmnjbbdfdc`___^^^_```___^]^____^\\\\\\[[]__][ZZZ[\\]\\[YXXXYYXXYZZZYYYXXWVVWXZ\\^^_```_^]]__^\\\\]_`aa`_^^\\ZYXXXXWVUUVWYXX[]\\[^__^\\\\[ZZYYXWVWX[_aceffd`]^_bc_[ZZWUUWWWVVWWWYYTTZZYXXXZ[ZWUTTSRPOPQPONPSUUTSSRQQQQQQONMMOQSWZYXVXYY[[\\\\\\ZY[XVUUVWWZSTZXRUTVYTTSTTUWRPQONPSXQLJOSVXYZZ[[[\\\\\\[Z[Z[]^]][\\]_^YWXXXXYWWVVUUUVVTSSUUUTSRQQPQQRRSTTTUVWSRSSRYWVXWVVWTRSUVW[^][YWURPOPQROOQPPPQRSSTRPQQQRRRTTTTUVWWXXVTRQQPONLLKKKKJJKKJJKLLLMMMLMKKJKKKKJJJKKJJJJJJIIKLMMMKJIHGGGHHHGFFECA><;:99887555565544434455555457;<:976556666689::977666779;:97666448<:8889:;<>===<<=<=<;;:99:;;::98899::999998778789989999:;;<==>>=<;;;;987679::9877889:99887665444568::998899999999:::;;<;;::;<<<;;;:97659<@@?>==<<;;::;;<<==<;;;<;;;;::;<=>??>>pppppooooooonmlkjjihhhgffffffeeefhhhhhhhhhhiiijigfeghhijjjgcjijkklmmnnonmllllkllmllkkjihhggggffeddcccccdddefghhhgfddddeghhgfffeeeffeeddccbbccddddeeeddeeeedeeeefffffeddfghiihhgfghhggghgffeeeedccccccddddcbaaaabbbbba`___^^]]]]]]]]\\\\\\]^^^^]^^^]\\\\\\\\\\]]^__^]\\[]]]_bccddjlkfa`cdba^^^^[Z[]_`aa`_^]_```_]\\[\\\\\\^_^][Y[]^__^\\ZYZZYYYYYYYYYZZYXWVWXY[]_``aaa``__````_`bcdcba_][YWVVVVUTTUUVXXX\\\\Z[^__^]]\\[ZYWVUUUVZ^adeffc^[]`dda_]\\XVVYYYXYZ[Z\\\\XU[[[ZYZ\\]\\YWTTSRPNOONMLMPSTTTSRRRRSRRQONMORTX[[ZWXXXXXYZYWXYYTUUTTV[QS[YSWVX[VVVVWXYSRSRRTUXTNNOSUXZ[\\]]]^]]\\[[[]`bba``ab`\\XVWXXXXWVUTTTUVUTRSTTSRRQPOOOPQRRSSSUYTSUVR[YXZYYXYUPRVXXZ\\[YWUSQONPRSOORSSSTTUVVROPPQRSTUVVVWXYYZZXVTRQOMLKJKLLLKKKKKLMMNNNNNMMLLLLLKKKJIIJKJJKJJIIKLMMMKKIHGFFGGFEDDCA><:9876665433345554432445565446;>;876557777679:;:98877779:::8665448<;98889;<=>>=<<=<<<;:98889::997767888899877788888899999::;<=>>=<;:;;;9876789987788988876654444445899898888899999:::;<<;;:;;==<;;;;:865:<AB@>====<<;;;;<<=====<====<;::;<=>>>>qqqppoooooonmlkjjjjiiiihgggffeeefghhhhhhhhhiijkjhgeghhikkkhcihijjkmnnoonmmllmlllmmmlkkjihhggggfedcbcccddeefghhhhgfdcdfghiihgffefgfffeedccccddddddeeeeedeeedddeffgffffeefgijjhgffghhhggffeedddddccccccdddccbaaaabbbbba``__^^^^^^^]]]\\\\]^____^^^^]]\\\\\\\\\\\\]]^^^\\[[\\\\]`aab_dfeb`_^__^]]^^ZWYZ_bcbba`_aabb`]\\[]^]^_^\\\\[]_aba_][Z[[ZZZYYZZZ[ZZYXWWXYZ[]`abbbdbbabbccbbcdffeca_][YWVVVVUUVVVWYZ\\^ZX[^___^_^]\\ZXVUUUVX\\`cccc`\\X\\^dda`]\\YWX\\][YZ]]\\\\][VY[ZYYZ\\\\[YWTRQPPPPONMMNPRTUUUUTTTTTTSQPOPSTX[[[XXXXVVWXXUWY[RXVTTWZPU]ZTVUW[WVVYXWWRTTTSUUTQOPQRTXZ\\^____^]]\\\\\\_cedcbbba_[XVWXXYYYXWUUTUWWVTTUUTSRQPONOPPQQQQRTXSRWWRZZZ\\[[YYUPRWXXYYYXVSRQPOQTVQPUUTUUVWWWROPPQRSSUVVVWXYYZYWUSPNKIIIJKLMLKKKJKLMMMMMMMLLLLKLKKJJIIIIJJJJIIHGIKKLKKJIGFEFEDCCBA?=<:987655543323345554334455553349>=:87667887779;;::9988889:::9755448<<:8879;;=>==<<<<;;::877789998654667889876667887779::::::;;<===<;;<<;:987878888789988876543444445899887788899::9::;;==<<;<<==<;;;;:8769<@B@?==>>=<<<;<<<==>>>=>===<;;:;<=>>>>qqqqppppooonmlkkjjkjjjjihhggfeeefghhhgghhhhijklkjheghhiklkidhhiijklnooonmmmmmllmmmmlkkjiihggggfdcbbcdddefffgghhgfdccegijjjihgfffghggfedddddeeedddeeefffffeeddefgggggfffghijigfefghhgfeddddddcccddcccddddccbaaaabbbba``___^______^]]]]^_```____^^^^____^^____^\\][Z[\\]^^[_`__^\\Z[\\\\\\]^]YTX[`cefedcbcdedb_^_`^\\]__\\\\\\_bcdb`^]\\\\\\[[[ZZ[[[[\\\\[YXXXZ[]^`bccegeddefgfeefghgeba_^\\ZXXXXXWWXYYZ\\^a`[Y\\`a```a`_^[YWUUVVVY]_``_\\XVZ\\aa_\\ZYXY[^_\\Z\\^^\\[]]VVXXWWXZZXVTTTRQQRRQQPOPQTVWXXWWWVVVVUTRQQSUX[[[YYZYXXZZXXXX[UXUTUY\\RU]YTUTVZVUUXWUUQSSSSUTSPQQQQSWXZ^a____^][\\\\_ceec_``^[XWVWXYZ[\\[[YXWWYZZXWWVUTRQPONOPPQQRRSSWSTUWQWXXZZZXXTPSXXVUVUUTSRSRPQVYTRWWWWWXYYYTQQPPPQRUUVUVVXXXVTRPMJHFHIJKLMMLLLKLMMMMMMLLKKKKJJJJIIHHIIIIIHHGGFFGHHHIHGEDCDBA@?=<;;:9876655544332234765434455553337=>;8767788878:;<;;::98889;;;:865559:<;88779:<<<<;;;;::::876678987533457889776556788779::;;::;;<<==<<<<=<<;9887878899:99998754444566678877778889::::::<<>>>=<<=>>=<<<<;9879<@BA?>>>>>=<<<<====>>?>>>===<<;;<=>>>>qqqqqpppponnmlkkkklkkkkjihgffeeffgghggghhhhijjllkhdghijklmjegghhijlnnoonmmmlllllllllkjiiihhhgeefdccddeffffffgggfedcdfhjkkjihgffghhhgfeeeeeefffeeeffffffggeeddffggggggggghijigfefghhgfedcccccccddddccddddcbaaabbbaaa``___`aaabba`_^^^^_`a```_______````____```^]\\\\[[\\\\\\]^^]]]ZXZ[\\\\\\]^XRW[_beghgedeggfc````][\\_^\\[]`beec`^]\\\\\\\\[[Z[\\\\\\\\]\\[ZYXXYZ\\^`bccegggfhjjfggghigeb`_]\\[ZZZZZXXZ[[\\^acb_^adcaabbba_\\YWVUVVTUWWXYYWVTVW[[ZXWXYY[^^\\[]^^\\[\\[URTTUUWYXVTTUUTSQTUUUSRRSVXYZZYXXWWWWWUTSRTVYZZZZZZZYY[\\WYXXZWWUSUY[TU\\VTTRQRSSUXUTSRRSRRUUSQQQPPQTUX[`]]^^^\\ZZ[^aa`][YYXXWVWXYZ\\]]]\\[ZYY[\\][ZYWVURQONNPQQRSSRRRTTQPTQTWUUWWTTTRSUTRSRRRRRRTTPQWYUVXXWWXYZZ[XSRQPOPPRSSRSSSSQOMLJHFEEGIKLMNMLLLLMMNNMMLKKJJIIHHHHHHGHHHHHGGFGGFDEEFGFEDCA@@?>=<;:9988876655554443223665434444543337<>;9777899989:;<<;;::9889;;;:8655589<;976689;;;;:9:::::9866678876532246788765455778779:;<<;::;<<==<;<<===;::988789::;::998765445666677766778999:;;::;<=>?><<=>>>=====;:978=@BA@>>>?>===<<===>??@??>===<<;<==>>>>qqqqqpppponnmmllllmmllkjjihgfeeefgggggggghhhjjlmkhdghijklnlgffhhijlmnoonmmlllkkkkkkjjiiihghifdfgeccefgghgfffffeedccehjklkkkkifgghiihgfeefffggffffeffffgggfeddefgggghggghiijigfefgggfedccddddccdeeddcddddcbaabbbbaaa``__`abbbbbba`____`aaa```````aabbbaaa`aabba_]]\\[[[\\]]]]\\YVWZZ[\\]]_XQX\\`bgjkjhghkjhebbba]YZ]^]]_acffda^]\\\\\\\\[[\\\\\\]]^^]\\[ZYXYZ\\]_`bcegghhhkkfgghijgda^^^]]\\\\\\\\\\ZZ[\\\\^adfd``cedccccba_\\ZYWUVVSTUUUUUTTSTUWXVTTUXY\\^]\\]_]]]\\]YSQRSSUWXWVTUWYYWSWXYXWUUVXZ[[[ZYYXXXXWVTSRTUYZZYZ[\\[[[\\^X\\XXWXVUSUZZVTZRSSNKLQRTWTTSSSRQRUVTQQPPPPRQUW_Z[[_[\\YXY\\^]\\XVUUTTUVXY[\\]^__^]\\[[\\^^][ZXWVSQOOOPQRRSSSRQRURMQQRSOORRPQROORPOOOOOPQRVUOQXYVVXXVUUVXY[XTTQOMMMOOONNONLJHHGFDDCEHJLNONNLLLLMMNNMLKJIIHGGFFFFGGFGHGGGFFEFEEDCCDEDCB@>=<;;:9878776776565555444223886444444433346:>;:77889:::::;<<<::::989:;;:8654579;;98656799998889:::9766677776533236678764344777889:;<<<;::;;<<;;;<==>=<;:9889:;;;::998876555788766656789:::;<<;;;==???==>>??>>>>><;989=ACB@>>???>======>>?@@@@?>==<<;<=>>>>>qqqqpppooooonnmmmmnnnmlkjihgffeeefggfffgggghjjlmkhdhijjlnnmhfhhhijlmmnnmmmllkkjjjjjiiiiihhijfdhhecdegghihgffeeddccdfhklmllmlheghiiihgfffgghhhgggffffffgghgfeeefggghhhggghijhgffghhgfedddeeeeddefedddddddcbaabbbbaaaaa``abcccccba`````aaaaaa`````abbbbbbbaabcdba_^]\\\\\\]^__^\\UU[\\[\\]^_^WQZ\\^chkmlkjkmlifccbb]XX\\^^^_adggd`^]\\\\\\\\[\\]]]^^_^^][[ZYYZ[[]^`bdfgffhjieggghigda^^^^]]]^^^\\\\]\\]^befe`aeffdddcca_][YXVXXUTUUTTTUTSSTUUTSSTWX[\\\\]__]]^_]WSTSRTVXYXWVWZ\\\\ZVY[\\[YWWXZ[\\]\\[ZYXWWWWUSSRSUXYYYYZ\\\\\\\\]`Y\\WVUVTRPRVYUTWPRRLIIOSUVTUUUSRRSWWURPPPPPPPRS[YWV\\YYXWXZZYXTSSSSTUWY[]]_```_^\\\\\\^__^\\ZYWVSRPPQQQQQPPQRROUSMOPPPKLOOOPPLLOONNNNNOPRTRMRXWTTVVSRRSVWXUTTROKJKLLKJKKJIGEEDDCCEGJLNOPONLLLKLMNMLLJIHGFEDDCCCDEEEFFFEDDCDDDCBABCB@>=;:98877666666666666665555433776545544434446:=<;8889:;;:::;<=<::::999:;;:86445789:98655688887778999876666776654444456787544577788:;<<<<;;::;<<<;;<==>>>=;9889:;<<;;:9876555578876666789:;;;<==<<<>>@@@>>>?@@?????=<:9:>ADB@?>?@@?>>>>>>?@@@AA@??>=<<;<=>>>>>pooooooooooppponnnoonmlkjihgffeeeeffffgggghhjjllihfijkklmnmihhiiijlmmlmmmmllkkjjjiiiihiihgjjfeiidcegghijihgfeeddcdefiklmmmnjfehiiiiihgghiiijiihgggfffefghhhfeffgghhihhgghiihgffghhgfeedefffffefgfeddddddcbaabbbbbbaaa``abccdccbbaaaaabaabbaaaaaabcbbbbbbabcccb``__^^^_`ba`\\VY]]]]^_`]WU^__cgjmmlklnmjfcbb`]YX[]__abdfec`^]]]]][]^^^____^\\\\\\[ZZ[[\\\\^`bdddccdeecddegigeb_^^^^^_```^^^\\\\^acec`beggeffda`^\\[ZYYZYWVVVUUUVVVUUUVVVVVWXYZZ[_][]__[UUWUTVYY[[YYY[]]ZVZ\\]^[YZ[[[\\\\[ZXWVVVVVTSRQRRSVWXWYZ[[\\\\]XXTRRSSQOPSWUTRQQQMIKRTVYVWWWVVUV[[VRPPPQRPPQPWURPXWWVVVVWUUSSSTUVWXZ]_`abbba_]\\^`a`_]ZYYWUTRSSRPMNLLLPPLSROOPOOLLNNMPPLKPRPPPONOPRQLJPUTRQRRPNNPRSSQPRQNKIHIIHGHHHHIGGGFFFFFHKMOPOMLLLLLLMLLKJIGFECCBABAABCCCDDCBAAABA@?>?A@?=;97666655666666667888877766445666555554455569<=<::99:;<;;:;<=<:88:::99::986444678998655677877677899876556666654444345678754556788:;<=>>=<;;;;;<;;<==>?@@>;:9:;<<<<;:987665556887666679:;<<<=>>==>?@AAA????AAA@@@@?><;;>ADC@?>@AA@@@@AA@ABBBCBA@?>>==<==>@@@@oonnnnnnoopqpqpooooponlkjihggfeedefffffffggijklkhghjkkklmmmihiiiijlmkkknnnllkkjjhhhjigijhgjjffihddeghjkjjihgfedddeegiklmmlliefhhiiiihghijjjjjihhhgfeedegihhfghefhhiiihgfghhhgfghihgffggggggfggggfedcdddccbbcccccbbbba``abcddcbbbbbbbbbbbaa`aabbbbbbaaaaabccccb```___`abbb`]WZ]^^^^__[X[^__bejmmllmomjebbb_\\[Z\\^_`abdeca_^]^^^]\\^^\\_ba___\\\\]\\[[[[\\\\]_bcca`_abbaabcfgfdb`^]^^_`aaa`_^\\[]`bca_`ceeeffc`_][ZZZZ[ZXXWWWWVWVVWVWWXXXXXWXXYZZZ[\\]]YUUWUTVZX[[ZYY[]\\YWZ\\\\_[Z[[ZZ[[ZXWVUUTTSSRRQQQQTUVWXYY[[Z\\VWSRQRRQNPSUUTQQPQOPKRVZZXYXXWXXW\\]WSPPQQRQQQQRSOPTVVTTUUUTSSSTUUVXY[]_`abccb_]\\^`aa`][YYYWWRUVSOFHIIIMNKRPNNONNMMMMLPPMKPRQPPPOOPPNKJNPOOOONKIJKMOPONPOLJHHGGGGGHHIIHHHGGGFFGJLOPOMKKKLLLLKJIHFEDDBBA@??@@@@ABB@???@@?=<=>??><976555455556666667899887777653456555555555568;=<::::;<=<;;;<=<9868999899987544557898766567877667788876556666554433223567754456678:;=>>>>=<;::;;<<<==>?@@?=;::;===<<;:98776656776676799:<<<=>>>>>>@AAAAAAAAAAA@@@A@@?>=>ACBA??@BCBBAAAABBCDDCCBA@??>=??@A@AAAnmmmmmnnopqqqqpooopqpomkjihhggfdddeeefffffgijkkihgikkkklmllkjjijjklljiinnnllllkjifijigjjgfiiffhfdeghjllkjihgfedddefgijkllkjghhggijjiiijjklllkjjihgfeedeghihgggdfhijjihgffggfffghihgfhiihihhhhhhgffedccccbbbcddcccbbba``abcddcbabbbbbbbbba``aabbccbbbaaaabbbba```__``abcbb`][\\]^____]YY^bbaceilnlllomhdba_^]]]_``abcccb`^^]]^_^\\_`^_bb`^`[^_]\\\\\\]]]^adcb`\\ZZ[\\_[]abdddb_^]]^`abbba`^\\[]_``__`bcbceea^]\\[ZZZ[\\[YXXXYYXXWWXXYYZZZZXWWWWWWWXZZYVTVUSTW\\X[ZYXXZ[YWVYZZ_ZZ\\\\YXXYXVTSSSSRSSRRRQPORUUVVXXZYXXUTRQRRSRPQSTUTRQOQPTMSS`\\[ZZZZ[[Y_`XSOPQRSSSSQQQMMRVTRRSSSSTTUVVWWXY[]_abcdcb`]\\^abba^\\[[[ZYTXXTMDFFGFJLHPNMMMMMMMNMLPPNLOQQQQPPOONLJIKLKKKKJGGGHIKKLLMLKJIHGGGGHIJKKKKKJIHGEDHJMNMLLLLKKKJIGFEDCBBAA@?>>>>>>?@@><<===<;::;<<;:8653333455666677789:::98888864455666666566668;==<;;:;<>=<<<<<<98568988888876444467788765567666667788776666655544332124667654445679;=>?@?>=<;::;<<===>?ABA?<;:;<====<;:98876557766789:;;<==>?@@@?@ABBBBAAAABBBAABBBAA@>?ABAA??ABCCCBBBBCDEEEDDCBA@??>@@@AABBBllklllmnoqrsrqpoppqqpnljiiiihhgeedeefeeeeefhijihhhjkkjkkklllkkjjjkllihhnnnllmmkjihjihhjidehhefgeefhilnnljihggeddeefgjkkkjihgjkfgjkkjkkklmnnmlkjjihgeedfgggghgedhkjkkihgffeeefghiihggijjijiiiiiihgfeedddcbccdddcddccbaa`acdddcbaaaaabbbbba``aabcccccbbaaaaaaa````___`abccb_\\\\\\^^___^\\Z\\`bcbbdgijhilomgdb`___``abcccddcb`_^^^_``]aa``aba^b[_`_^^^__^_bedb^ZXVXY\\XZ]^___^\\\\\\\\^_abbbbb`\\Z[]]^^]^___`aa^\\[\\\\[[[\\\\[YXWXYYYXWWXXYZZ[\\ZYXWVUUUTUXXWUUWTSTW\\WYYWVWXYWUTWXX]XY[[WUUUUTSRRRRSSSTTTSQPRTUVUVVXWVUSRQRSTUTSSTUUTRQOPRUPVV_^^\\\\\\]]^[b`XTPPQRTTTTRQRMLRUSRTTSSSTUVWWWXYY[]_abcddca^]_bbba_][[[[[VWVSLDFGHGIJHOLLLLLMMNNMMQQNMNNNPPPONNLJHGHHIIHHHGGFFFGHIJKKJJJIHHHIJKLLLKKKKIGECBEHKKKJJKJJJIGFDCBA@?????>======>??=;;;;:::989::987542222345555778889:;;:9899986555566666677778;<==<;::<>>=<<;<<:8547787788876543345677765456555566788776666665554442212467655445679;=>?@@?=<;::;<====>?BCCA><:;<======;:99865579878:;<<<=>??@ABAAABCCCBBBBBCCCCCCCDCCB@@BCB@?@BCDEECCBBCEFFFEDDCA@@??AAAAABBBjjjjjjknorrsrpopqqrqomljjjjjihgfedeefeddeefhiihhhikkkjjjklllllkjjlmmihinnnmmnmkjihiiejhfcdffdefeghjkmomkjihggfedeefhjkkjhffikighjllklmmmnoonmlkjiihfeefgfggigdejlkkkihgfeeddefgghhggijjjjjiiiiiihfeeeeedbdeeeddeeeecbbabcdddccbaaabbbbbbbaaabbcccccccbaaaaaa````___`abba`^\\[\\^_``_^]]_accbcddffdfkokfdcbaaabcefeeeffeca``_`abbaccaabcb^b\\`b_^``a`_adfda]YWUWZ\\VWYZ[[ZZXYZ[\\_``aaaba]ZZZZ[\\\\\\\\\\\\]^^[Z[\\\\]\\\\\\[ZXWVVWWWVUUVWXXYZ[ZXVUTTSSRTWWVVWWSSTWZXXYWWWXXUSSTVVYVWYZVSTTTTSSRSTTUUUUUUUSTVVXWVUVVVUTSSTTVWWUVUUUTRQOPSXTZZ]]`]\\\\\\]^[a`XTPQRSUVVUPSRNNSURSWVUTUUVWWWWWXYZ]^`abdedc_^`aaa`^\\[YZ[[UUTQLFIIJHKKJOLLLLLMNOONNQPNMLJKNNMLLKJHFFFFGGHHHHHGFFFGHIKKKLLLKJKKLLMMLKJJJHFC@@CFHHGGGGHHGGEDB@@?>=<;;<<<;;:9:<==<;::98876789998764211134456677889::<<;:989987654456777777789:;<==<;:<>?=<;:;;<:734466778877654334677765445445556677777666666655442212468766655679;=>?@A?=<;:::<===>?@BDDB?=;;;<===>><;;:86568:98:;<=>>>?@@ABCCCCDDEDCCCCCDDDDDEEEDDCBBBCBB@ACDFFFEDDCDEFGGGFFDCAA@@BBBBBBBBhhhiijkopsrqpppqqrrpomkjjjjjihgfedeefeeeeeghiihghijkkjjjjklmlljjkkmlhhjmmmmnnmkihhiihifccdffdeffholloqkghihhggfeeefhjkjhfefkmggjmlmmmnnoopponmlkjihgffggggghfdfklkjjihfeddccdeffggfhijjjjijjjjjihgfedefcbeffedefffedcbabcdeedcbbabbbbcccbaaabbbccccccbabaaa````__^_``aa`_^\\[\\^`aa`___`bdddbcccccdhigedcbbabdefggggggfeca`abbbcdedaacec^b\\ad_^aab`_aeeda]YWXZZ\\WVVXXWVVWXYZ[]^___``_]ZYYYZZ[ZYXYZYWXZ[\\]^]\\[ZXWVUVWWVUTTUVVWWXYXWUTTRQRRTWWWVWWTTTXYXYYXXXYYVUSTUUVTVXYVRSTTTTTTTUVXWWVWWWVVXXZYWVUVWVUUUUUWYYWWVUUTRPOPRSRWX[\\_\\YYXYZZ[ZWSPQRTTVVVPTSPPTUUUXXXWVUWWWWVWXXZ[]^_`bcdb_^_`_^\\[ZXWZXRQUSPLIJKLIKLLNLKKLKKNPPOOPPOMKJIKJJIIIHGFFFGGGGHHIIHGFGGHJKLLMMMLLLLLMMLKKJIHFDA?>BEGFFEFFFFEEDB@>=<<;:9999::9878:<<;;:976655567888765200133456678899:;<=<;:888887644568887888999:;=>=;:<>>><:9:;<=932346778877654334668875444334455567777666666655443212357776766789;=>?@A@><;:9:;<=>>?@BDEB@><;;;<==>>=<<;97679;:9;<=>???@@ABCDDDEFFGEDDDDDDEEEEFEFEEDCCDDDBAACFGGHFEEDEFGHIIHGFDCBBACCCCCCCCgfghhijnqsqoooqqrrqomlkkkkkjihgfeeeeffffffghiihhhijkkjiijjlmlljjjknlhjlmlmnnmkihhhhhhhcbdeeeeeffinmnpojhjjihgffeeegijjigfehljghjmmnoonnopqqponmlkjhgghiiihhgfehjiijjigfeddcbccdeeeehjjjjjijjjjjjhgfefgfccfggfffggggedcbcdefeddcbbbbbccccbbbbccccccccccbbbaa```a`_^_`aa`_^]\\[]_`abaaaabbcdcbbaabbcddccbbaabceghihghjihfdbbcdddefgfbbege`c]af^^bad_]`ddc`\\ZY[]]]YWVXXWUVWXXYYZ[[\\]^^]\\ZYXXYYZYXXYYXVXZ[]^_^\\ZYWVUUUVVUSRRTTUUUVWVUTSSRQRRTWWXXYYUVVYYZZZZ[[\\[YWVUTSSSTUXVRSTUUVVVVWYZZYXWYZ[Y[\\]\\ZXVWXXWWWWWX[[YXUTTSQOOPQPPTVVWYWUVUUUUVVVSRRSSTVVUPVTQRUWXYZYZZWVXXWWVVWWXYZ\\\\]^^_^]\\[ZXWVUSRSXTNPNPMLLMMMJLMMMLLKLJJNPPPOPPNKIHGGFFFFFFEEFGGHHHHIIJJIGHIKLMNNOOONMMMLLLKKIHGGECA?>BDEEDEGEDBBA@?=;:::9976778875358::;:98654433457898763112356677789::;;<=<;:877898754568888999999:;<==<:;>>><9889;=:31134677876654334678876543223445566777666666665543322335778877788:<=?@@@?=;989:<=>>?@BCDCA?<;;;<======<;:878:<;;<=?@AAAAABCDEEEFGHHGEEEEEEFFFFGGGFFEEEEEEDDDEHHIIGFEEFGIJJJIIGFDCCBDDDDDDDDfeeffhjnoqonnpqrqqonmllklkkjihgfeeefgghhhghhiiihhhijjiiijjlmlljjjknlijlmllmmkjhgghhhgeacgeddeefehlloqlhjljihgfeefghijihfeglkfhjjknoppoopqrrqponmljhhijkkjihgffhhgiiihgfedcbbbbccddegiijjjijjjjjjhgfgghfbdhhgfgghhhhgedcdefgfedccbbbcccccbbbbccccddddccbbbaaa`aa`_^_`a``__]\\\\^`abbbcccccbbaa`````aa``_`__`bdfghhhghijigeddeeeehjigbchhfbe_cf\\^bac\\[^bba_\\[[]`a`]YXZYXWXXYYYXXXXYZ[\\\\[ZYXXYYZYXXYZYXYZ\\\\]^][XVUUUVVWWUTSRTTUUVVVVUTSSSSSTVXYYZ[[XXY[[\\\\\\]]^^][ZWUSRRRSTWVRSTUWXXYY[\\]][ZXZ[^]^__^\\ZXYYYYYYYYZ[[ZXTSSQPNOOPNMPQQOQQQRQQQQQRSRRRSSTUTRRYTSTWXZZ[\\\\]ZYYXWVUUUUUVWWXXYXXXVUSQNNNOOLPUQKLJLJLNNMKIJMKJJJJJHIMOPPOPPMIGFEEDEEEEEEEFGGHHIIIJKKJHIJLMNOONOPPOMMLKJJJHGFEDB@>>ACDDCCEDA@>=<;:9888887555665323789998764322234689987532246888889:;;;<<=<;:8668:9865568899:;;;:99:;==<;;==>;8558:;941123677776554333578987643222344556676666666665543322234689:99888:<=>?@@?=;988:<==>>?ACDCB@=;;;;<======<:878:<;;=?@ABCCCCBCEFFFGHIJHFFFFFFGGGFGGHGGFGGGGFEFFGIIJIGGGGHIJLLLKJHFDCCCEEEEEDDDeddeegikmomlmopqpnnmmlmlllkjihgfeefghhhgggiiiiiihhiiihhhjjkllkjijkmkiiklkkkjhhgffgggfcadgfeddddehikmoihjljihgfffghjjiigffhljchjjkpqqqpqqrssqponmlkiikllkkigffggffhiihggedcbbbbbcddeghhiiiijjjjjihhhhhhgdfihghhijjjjhfeeffggffeddccccccddcbbbccccdddddcbbbbbaaaba_^`aa````^]^_abbbcdedcccbaa```_`__^]\\]^^_acdeffefghiigedcdefgjllicchhfcfbff_`ca_\\[]``_^^^_addc`]\\][ZZZYYXXXWVWXYYZZZZYYXYZZYXXYZZYYZ[[[[[YWWWWWXXYXWVTTUVXWWVWVVVUUUVVVXZZ[[\\]Z[[^]]]^____^][YVSRRRSSUTRRSUWXZ[\\^___^\\ZZ\\_`_```^]ZZZZ[ZZZZ[[ZYWSQPNNMNONLKNNMLLNMONNNMMOPQPRSTTUURUYVUVXYZ[\\]]_\\[YVUTTSSSSSSSSTTTSSRPNKIIKLLLNONKILIGJMKJJHHJIGHGGGFFJLNMLMLJGEDDEEFGFFFEFGGHIIIIIJLLJHKKLNNPOOOPPOMLKJIIIHGEDDC@>>@ABAA@@@=<99877766568754454432468999986543322468::986433579:::;:;;;;;;<<;:8668:986567899:;<=<;:99:;<;;:;;<964359::6201356777655543346789865422223455666666666666555445444468:;;:9888:<=>?@?><988:<<==>?ABCCA@=<;;;<<====>><:89;=<<=?ABCDDDCCDEFFGHJKKJGGGGGGGGGGHHHHHGHHHGGFFHHJJJIHHIJJKKLMMLKIGEDDCEFEEEDDDdddddfhjkkjkmnnmmmmllllmmlkihhgfffggiiggghjjjjiiiiiihhghiiklkjjiijkjhiijjiihgffffgffdcadfffddcddghkljijjjkheefghjjkkjiggghhhggjjlprrqqssstrqpoonlljkmnlkkigggggggghhhhgfedcccccccdeggghhhhijjjjjihiiihggiighiijkkkkigfefggggffeddcccdddddcccccccdeeddcbbbbbbbbb`__`aaaaa`_^^`baabcdddccba`a```____^]\\]^^_`acdeddefghgfdcccefgjmliccggecdcee`bba^\\Z\\__^^^_acdeca^]][Z[[ZYXXWWVVXXXXYYYYXXXYYYXXZZZYZZZZZYYWWWXXYZZZZXWVVWWYXXYYYYXXXYYYYZ[\\[[\\^\\\\\\^^^^^_```^\\[ZVRPQRSSTSQQRTVXZ\\^`aaa_][Z[`a``a`_^[[YYZ[[[[\\[ZYVROMKLLNNLKLMMLJKNNOONMLMNNPOQRSUUUSUXWWWXYZ[\\]^^]ZWUSRRQQQQQQPQRSSRRSROMMLJLLMLLKKJKHGIIHGHGHGFEFFFEDEHJKJJKKHECDEEEFGGGGGGGHHHIJJIJKKJHKLMNOOPOPOOOMKJIHHGGFDCCC@?>?@@@?=<:86555555444566433334434578999876433222469:98754468:<<<;;;<<<;:;<;:866798777678::;<=>>=;99889::999:7422478:741024677666555444578876543222334566666566666655455555568:<<;;98789:<==>>=<989:<<==>?@BBBA?=<<<;;<<<=>?><:89;<;;=>@CDDDDDCCDEFGIKKLKHGGGGGGGGGHHHHGHHHHHGGHHHJJJIIHIJJKKMMNMKIHFEDEFGFEEEDCdcccdfgijiijklkkkklllklmmlihhhhgffgijjgeeilkkkjjiiihgggghhijjjiijiihgggghhhfeeffghgebccdfgfddccdfgjjhijkkkgdeghjklmlkjiiihhgghijmprrrstutsqpooonmmlmnnmlkihhhhhhhhhhiihfedddddddddeffghhhhhijjjiiiiiigehjhgijjjkklljhgfghhhggfeedddeeddddcccccccddddcbbbbbbcccb`__acbaaaa```aaaaabccccbaaaaaa```__^]\\]_``aaabbbcceffedcbaabdfhjjhbbdedbabccacb`][[\\]^]^^`bdddca_]]\\\\[[ZXWXWVUVXWWXYYYXXXWXXXWXZZZYYYYXXWWVWXYYZ[\\\\\\[ZXXXZ]ZYZ[[[[[Z[\\[[[\\]\\[\\^]]]_`_^_```_^\\[ZWQMPSSSSQPPQSVWY\\^`baa`^[Z[___``a`^\\ZXXY[[[\\[ZYXVQNKJKKOOMLMOMLHKOOOONMLMNNOOQRSUVVVUWXYXXXYZ[\\]]\\XUSQQPPQRRQQQRSTTSTVUSQROKLMNMLLKKJGEFEDDGGEDDDDDCBBCEGGGGIIGDCDEFGHHHHIIIHHHHJJJJIJJIHLMMMOOQPPONNLJIHFGFFEECCBA@??@@?><;974223355432456532223333567898876544333469::9754468:<==<;<=>=<::;:9876788888789:;<==>>><:98789998775200267:853114577666655544467887643222334556666566676665445788778:;<<;:9888:;;<<===;:99;<<=>?ABBA@?=<<<<;;;<=>?>=;::;;:;<>@CDEEEDCCDEFGIKLMKIHGHHGGHHHHHHGGGHHGGGHHIIJKKJIIIIJKKLMNMLJHFEEFGHGFEEECdccdefghihhhiihijjjjjklmlkgfhhhgfghjkkhdgjmkkkkjjiihgggggghiiihhihhgfeefggfedeffghgdacdeggfeddccfgjhfijkkjfdhijkmnmlkjkjiihgghijmoqqssuutrpooooonnnmnnmlkjjjjjiiiiiiiihfeeeeeeedddeefghhhhhhijiiijjjigfiighjllkllmmkihghiiihhgffeddeeeeddccccccccddccbbbbbcdccb```cccbbbbbaaaaaaabbbbbaa``````a```^^]^`aabbbbbaabddccb`_^]^_`abbb`_`a`_^^____^\\[Z[[[[\\\\]^`abaa`^\\[Z[[[ZXVWWVUWXXWWXXXWWWVVVVVWYYYXXXXWWVVVXYYZ[[\\\\\\[[ZZZ[_[Z[\\]^]\\\\\\]\\\\\\\\^]\\\\][]]__^^^_``_][ZYVPLPTTTSRPPQSUVX[]_``__][ZZ[\\^^``_][XVVXZ[[[ZYXVTPMKKLMQPNMNPNMILPQQQPONNOOOOQRTVXXWVXXYXVVVWYY[ZYVTRPPPPSSTTTUVWXXWWYYVTTQLLMONMLLKHDBAADEFEDCCCCCCCCCDEEDEGGGEEFGHIJJJJKLKJIIIKLKJIJJHHLMMMNOPONNMLKIGFDEDEEDCCAA@????><;:863111355432347742223333457788876544333468:::865579;=>>=<=>??=9:;:987677899889:;;<==>>>=;:87767776541/.04799763235777666666544567876543222445665555666777764237888889:;<<;98789::::<=<;:99:;;<>?AAA@??==<<;;;;<=>??>=<;;;:;<=?BDEEEDDDDEFGIKLMKIIHIHHHHHHIHHGGGGGGHHIIJJKKKJIIIJJKKLLMLKJHFEFGHIHGFEEDdccefgghhgggggfghiiijjllkjfeghhhhhikmkfdhlnkkkkjjjihgggggghiiihhiihfdddeffeddeeefhfcaceghggfddcceehedhikkhdejllmnnmklmllkjihhhikmnoprrtusqpooppooonnnnmlkkkklkkkkjjjjiigfeeefffedddeefgggggghiiiijjjigggfgjklmmlmnnljiiijjjjihggffeeeeeedddccccccccccbbbccdddcbbbceeedddddcccbbbaaaaaa````aaaaabba`___abcddcccbbaaaa``^]\\[ZZYZ[\\\\]]]]]\\\\[[ZYYYXXXYZ[ZZZ[[]]]]\\\\[ZYXYYYXVUVWVUWXXWWXXWVUUTUUUUVWWWWWWWWWWWXXYYYZZZ[\\[[[[[\\_\\[\\]^_^]\\\\]][[\\]]\\\\\\Z[[]]]\\]^_^]\\ZZYUOLPVWVUTSSTUVVWYZ\\\\[[[ZXWWWY[[]]\\ZXVTUWYZZZYWVTQNLMMNOTRNNPQQNJNQSSSRQPPPPPPQSUVXXXVWXXWTSRTVWWVVTRQPOQRTVWXXYYZ[[ZY\\\\XUTRMMNPONMLJFA??AEGGEDCDEEDDEEEEFDDFIHHFGHIJKLKKKLMMLKJJLMLKIJIHHKLLLMMMLKKJHGFDBABABCBBB@?>===<;988752001356532336974323333356778887655433468:::98778:;>??>==>?><::;:98777789999:;<<==>>>>=<;:9765566541.+-157897434567877777765555678765433244457666567787777643578889:;;<=;:98899988:<;;98778:;<>@@@??>=<<;;;;;<=>???>===<;:;=?BDEEEDDDDEFHJKLLLJJIJIIHHHHHIHHGGGGHHIIJJJKKJIIJJJKKJJKLKJIIGFFHIKJHFFFEdddfghhhhgffggffghhhijkkjideghiiiijklifdinnlkkkjjjihgggggghhhhiiiigedccdefeddeeefgecdeghhhgfedcbbcbcdhjjigeilmnnnmlllmmllkihhiijllnpppstrponoppooonnnnmkjklmmlllllkkkjigffffggfeeddeefffffffghiijkkjihgffhjklmmmnoomkjjjkkkjjihhgffeeeeeeddddddddcccbbbbbccddcccddfffeeddeeddcccbbaaa````aaaaabbbba`_`acceffeedbaa````^\\[ZYXWWXZZ[[ZZ[ZYXWVUTTUVWYYYYYYYYZYYXXXXXWXXXWWVUVWVVXXXWXXWWVUTSTTTTUUVVVVVVWWWXXXXXXXXY[\\[[[[[\\]\\\\]Z``_\\]VZ[[Z[\\\\\\\\[YYYZZ[[\\]]\\\\[ZYYVQNRWYYXVVVVVVVVWXWVUVUVVUUUVXXZZYXUTSTVXYYXWUSQOLLNNPQXSNORRSPLPSUTTSRQQQQQQRSTUXXXVVWWWSRRSUUUTSRQPOPQRVWYZ[\\\\]]][[]\\XVTSONOPPONLID@@ABFHGECAEGFEFFGGGFFDGIIHHHKKLLLLLLMNNMKKKMMMKHIIHGJKKJKKJIHIHFECB@?@@@@A@@?><<;;:88765320/0356643235875433443346777888766554579:;:::989:;=???>=>?=<:9::9887789:::::;<==>??>><;;:9875565541.++.2689864456898777777665567886543334445677766778888775445789:;<<<<;98788987789::987679:;=??>>>==<<;;;;;<==>?@?>>==<;;<>ACDEEEDDDDEGIKKLKKJIJJIHHHHGHHGFFFGHHIIJJJJKJIIJIJJJJJIJJIIHGFFHJLKIGFFFeefghihhgfffggffggghijkkifcdhiiijjkjkhehlnmllkkjjjihggggghhiiijjiigedccddeeddeeefhedfgiiihhgfecbbaaacfhjhgglnnoonmlmonmmlkjiiiijkkmnnnqsqonmoooooonnonmkklnonmmmmmllljihgffgggfeedddeffffeeefghhjjjjhgfghijklmnnooomllkkklllkjiihggfeeeeeeeeeeeeddccbbbbbbccccdeffgggffefffeeedddcbaa```aaaaabbbbbba``acceffffeca```__^\\[ZYYYYYZ[[[ZZZZYXWVVUUVWWYZZYXWWWWVVWWWWWWWWWWXWWWWWWXXXXYYXWVUTTTTTUUUUUTTUVWWXYYXWVVVWXZ[ZY[\\\\[[[\\^\\_^\\Y[VYZYXZZZ[ZZYXXWWXY[[[ZZZZZYXUQTX[[ZYYYYYXWVTTSQQQRSSRRRTUVWWVUTSSTVXXWVURPNMLMQQSTZTOOSSUSORUVUUTSRRRRRRSSSTVWVUUVVUSRRSTTTSSRQQPQRTUWY[\\^^^__\\[\\ZWUTSQPQQQPNLIEBCDEHHHFDDHIHGHHIIIHHEIKIIJJMMNNNNMLMNNMLKKMMMKGIIHHHIIIHGEDCCDCB@>=<====>>>><;987655444220/0356653234666543444456777888877666679:;;:;::9::=?@?>>>=<;989:988889:::;:::;<=>???>;:989985444541/,+,0479875556899888887766567887654443456677777777899897534679;<<<<;:9767887657888765579:<<<<<<===<<;;;;;<<=>?@??>>>=<;<>@BDDDDEEDDDFIKKLKJJIJJJIHGGGGGFFEFFGGHIIIIIJJIIIIIIJJIHIHHHHGFFHIKJHGFFFeefhhiihgfefggffgghijkljgbbfijjjjkkigdeknnmllkkkjjihhggfgghhhiiiihgedccdddddeddefgfegijjiihhgfdcaa`abeghhhjmnnoonmmnonmmmlkjjiiijjklmnqrpnmmnooooonoonlkklmonmnnmmlllkjhggghggfeedcdeffeddddefghijjigfefghjkklmmmnnmllkklmmllkjjiihfeedeeefffffeedccbbbbbbbbbcdefgggffffffffffffedcba``aaaaabbbbbbbbaaabcefgffecba```_^]\\\\[[[[[\\]]\\\\\\[ZYYYXWWWXXYZ[[ZYXWWWVWWXXWXYYYYYZZYYYYZZZZZZZZYXWUUTTUVVUTTSSTUWXYYYWVUUUUWZYXYZ[[[ZZ[_[][ZVZXYYWWXXXYYYYWVUUVWYYYYYYZZZZXUUZ\\][[[\\\\[ZXVSQPMNOPRRRQQSTTUUTSSSSTVWVVTRONLKLOSSUV\\UPPTTVUQSVWVVUTSSSSSSSSRRTTUSSTUTTTSSTTUUUSRQQRSTUVX[^__^`_]ZYXVUUUTRQQQPOMKGFFGHIJIGGHJIHHJJJJJJIJKJGKKKNNOPONNMMNNMKJKMMMJEGHGGHGFFECA?>>??><;:9:::::;<<:986554333222001356653234666544444567888889988876789:<<;<<;:::<>???>=<;:9789989999::::::::;<==>?>;86689864434541.,,/2689976668998888877765678987654434566778888778899::865579;=<<;:986567764467776545789;;;;;<===<;;;;;<<<=>??>???>==<==?BCDDEDDDCDEGIIJJJIIJJJIHGGFFFEDDDDEFHHHHHHIIHHHHHHHHHHHGGGGFEEGIKJHGFFFffgiiiihgffgggghiiijjjjhebcgjjkjkkkhdbgnnnllllkkkjiihhgffgghghhhhggedddeedddedddeeffijjkiihhhgeebbbbcefghilnonooonnommmnnmlkjjihhiiiknqqomllmnoooonnnmlklmmmnnnnmlmllkjihhghgfedcccdeeedccbbcefgiiihgfefghhiiijkkkkkkkkkllllkkkkjihfeddeeefffffeddccccbbbbbbbcdeeffeeeeeeeeeeefgfedbaaaaaabbbbbbbcbbbaabbdefedcdcbaaa`_^^]]]]]^___^^_]YZZ[[ZZZZZ[\\\\^^\\ZZZZZ[[[Z[[[[[\\]]]\\[[\\\\]\\]\\\\\\[[ZXWVWWXWVUTTSSTUWXYYYWVVUUUWYYXYZZ[ZYYY^X[YYVYXXXWVWVVWWWVTSSTUUVVVWWXXYZ[YWVZ\\\\ZZZZYYYXVTQPNNPQSSSSSSSSTSRQQQQRTTTTRPNMLLMQUUWX^UPQUUXWSTWWWWVUUTSSRSSSRRRRSSTUUUVUVVVVWWWUTSSSTUVVX[^_^^^]\\YWVVVWWWSQPPOONMJIIIIJJJHHILJJIKKJJKKJKLJIKLLNOQQPOONNONNKJKNMLIEFEEEEDCBA@=;::;;:9876777778898875443222222001356764334566655554568999889:::::889:;<<<==<;;:<=>>===<:986578889:::::::9999:;<==><964689965457641--/1489987668999999988766689:97765445667789998888899;;97668:<<<:99886555544456665445689::;;;<===<;;<<;<<<==>?>>???>>===?ABCCCCDDCCDFHIIHIIIJJJIGGFEEDCCCCCDDFFFGGGGHGGGFFFGGGGFFFFFFDEGHIIHFEFEfghijjihgfgggghijjjkkjigdbdhjkkjkjhfcejonmllllkkkjiihhgfffgggffggggfedeffeeeeddddefgjjkjihiihhfecbbbcdfghjlonqqnnoonmlmnmmlkkjhffghgjnqpnlklmnooooonnmlkmokjlomlklllkjihhhhgfdccccccdedcbaabcdefhhhgfedefffffghiijjjiiijkkkkkkkjiihfedeeeeeffeeedddddcccbbabbcdedddcccccdddddefgfecbaaabaabbbaaabbbba``abceddccccbaaa``__^^^^^_`__^_`^XZ[\\\\[[\\\\\\]^^__^[[\\\\]]]\\[]]]\\]___^^]]]^^^^^^]]]\\ZYXYZYXWVUSRSTVWXYYYWVVVVVVYYXYZZZZXWXVVZZXVXXXXWUUUTUTTTSRRRSTUUUUUVWXYZXVUYZYXXWWWWWVVSQPPPRRTUTTSSSSSRQONNOPRRRRQOMLLLMQVUW[_TQRVVYXUTVVXYVVVTRRQQSSSQRQQSUVVVWWWWWWXXWWUTTTUVVWW[]^^\\\\\\[YWVWWYY\\RPPONMMLKJJJIIIIIIJKKKJJJJJJJJJLJIKKMNPRRPPONOOONLKKMMKHDEDDCBA@@?=<9889987654555655667765433222222101355664323566556655678:::899:;;::989::;;<==<<;;<<==<<<;9987545668:;<<<<;:9889::<=>;8534789755676641.--159;:9667899999988766789::996454677888899998889:;;98768:;<<:987765554333455554456789::;<==<<;<<;;;<<===>>>>?>>>=>==?AACCCCCCCBBEGHHHGHHIJJJHGFEDCCBBBBCCDEEFFFFFFEEEEEEFEEEEEEEEEEFFHIGEDDChhijjihgfghhhhhjkkkkkjhfdegjkkjjjifddimonmllklkkjjiihhgfeeeeeeefgggfeeefffffeeccddfgjjkjjiiiihgfcccccddfgjmonmlkmoonllmmmllkjigdefggimpomkilmnoooonmllkkmnjjnomjjklkjihggghgecbbbcccdccba`aabcdfghgfedefffedcdefggggggghijjjjjjiihgfeeeeeeeeeddddddddccccbbbbcddccbbbbbbaaabcdeddcbbaabbabbbbaaabbba`_``abccbbbcccbbba``______```__a`_W[]__^^]]]^_```_]^^^_^__^^`^\\_ccaa`____`aaa`___^\\[[\\]\\YWVUSRSTVWXYYYXXXWWWWYYYYZ[ZXVVVVUWXWVVWWWVUTSRQQQQQQQQRSSSSSSSTUVVUTTUTTTTTSSSSTTSRRSTUUVWWVUTTTSQOMKKLNPPPPONNMNNOSWVV]_TQTXXZZVUVVWXUUWUOOOORRSRQPPSVVWWXYYYYYZZYYXVVVXYXXXZ\\]\\Z][ZYVWYY[\\YJONMLKJJJIIIHHHHHHIJJJJIIIIIIIIIJJJKLOPRQPPPNOOPPNLKMLJGDCCBB@>>=<;:8777776554444433345554322212222222355665323466545566789;;:999:;<;;:99::;;<<===<;;;<;:::999864235689;<<<<;;988788:<=;853256:975577763/,,.27;;966789999998876679:::;:644558899889:::9889:;;:98789:;:98777776643334555555678899:;<==<<;<<;;:;<===>===>>>>=>==>@@BBBABBBBABEGHGFFGHIJIHGFEDBBAAAABCDDDEDDDDDDDDCDDDDDDDDDCCDEEEFGGECBBjjkjjhgffghiiijkkkkkkigeegikkkjjigccfknnmlllllkjjiiihgfedddddddefggfffffggfeedcccdegiijjiiiihgggcdddddddgjlljijmonnlklmmllkkijgddfggilmmljimnonnonmlkkjjkjhkomkiijkjihgggghgebbbbcccccbaa``abcdfgggfeeeefdcbbbcdeedddefghhhhhhhihggfeeeeeeedddddddcccccccbbbbcddcbbccbbaa``abccbbbbaaabbbbbbbaaabbba`_``abbbaabcbbbbba`_______``___`a`Y]_``__^^^^_`aa`^_``__```_b^^aedcbba``abccaabbb`_^^_^][XVUSSSTVWWXXXXYXXXXXXXYZ[[ZXVUVVTVWVUUUUUUTSRPONOPPPPPPQQRRRQPPQQQQQQPNNOPPOOOPQSSTUVWWXYYYXWVUUSPMLIIJLNNOOOOOOPPQTXWW^_URUYZ[[WVUUTQNRVSLMMMPRSSQQQSVWYYZ[\\\\\\\\\\\\[[ZXYZ[[ZZYZ\\\\[Y\\\\XZUXZZX[NDRNKJIHHHHGGGGFFGGHIIIHHHHHGGGGHIJJKLNNPPPOPNMNONLKJKJIFBA@@?><<;::97656666554433322223443322211223332355665433467544566789:;::99:;;;::999:;;<<==<<<<<<:987777654123579;<<==<;9877789:<:75324589865677641.,-06;<;8899::99998766679:<<<;7546589:8789:;;:9889::987779::9777787766543455555667899::;<=>>==<=<;;:;<===============>??@AA@AAAAAACEFFEEFGIIHGFEEDB@@?@@ABCCCDDCBCBBBBBCDDDDCCBBBABCDDEFEDBAAlllkihgfghiiijklllllkjgfgilmmllkifbehkmmllllllkkjjiihhgeddccccdefffffffffffeddcccdefhihihhhihghgcefeddccgkjhghjopmlkkllllkkjijgdeghhiklkkjjmnonmnlkjjjjjighlmkjhiiiihhgghgggebbbbcdcbbaa`_`abcdeffffeeeeedcbbcdeedcccdeffffffgghggfffeeeeddccccddcbbbbccccbbcddddccdddca`_``abbaaaaaaabbbbbbbbaabccba````aaaa`aabbbbba`````________``a[_```____^^_aaa`_`a`^^`__^a^`efedbbbaabddcbbddca_`aba^ZWVUTSTUVWWWWWXXXWXXWWWXZ\\\\ZXWWYXUVWVUUUTSSSSRPONPRRRQQPPPQQPONNNMMNNNLJJKMMLLLNPSTVVXYYZZZZYXXWUSPMJGGIKMMMNOPPQRRTUYWX\\^WTVZ[\\\\XVTSPKHNROJKJMPRTTRRRSVXZ\\]]]^_^^_]]\\Z\\]^^\\[\\\\]]\\[\\\\WYSVXVSRGEPLHFEEFFFFFEFFEEEFGGGGFFFEEEEEFGGHHIJLMNMMNMKKKKIGFHHFC@>==<;:9999976555655433222222112333221112234444556775445774335666789:;::999::::9999:;;;<<;;<<;;9876665554212468:;<===<98766788:9653334588766777641.-/5:<<:999::99986566789:<==<8656579:9889:<<:8778999878889887667877776656777766789:::;<=>>>===>=<;::;<=======<<<=====>??@@???@@@@BCDEEEEFGHGFEDDDA@>>??@ABBBCCBBAA@AAABCCDCBBAAA@ABCCDEDCBA@mmmkigffghijjklmmmmlkjhijlnmnnmkgdafjkllllmmllkkkjjjiihfedccccddeffffffffffeddccdeefggghhhhhhhiedfffedccfigefghijkjjkkkkkkjjjkgdghhhhjjjjijlnnmmljihiiiiheillkihgghggggghgggecbbcdedcba``_`abcdeffffeeeefdbabcdedcbbcddeffffeffgfffffeeedccbbccccbbbabcddcbcdeeeeddeeedb````aaaa`aaaaaabaaaaaaabbcccbaaa``aaaaaabbbbba__`a``_____^^^``_`a`````_^__aaa`_`a_]]`_]^`_affdcbbbbbcdddccdeda`bbc`]ZWVVUTTUVWWWWWWWWWWWWVWXYZZYXWYZXVWWVUUUTSSSSSQQRSUTTSRQPPPPPNMMMKLMNNLIIKMMLLLNPSUWXYZZZ[[ZZXWVTROLIFGHJLLLMOQRSTTTUYWXZ^YTWZ\\\\[XTSRNGGLOMHJJMQSTTSSSTVX[\\]^___``___]\\]^_`\\[^]]\\][\\[RURQQNKGDEJIFDCDEFGFFFFFEDDEFGGFFEDDDDDDDEEEEFHJLKKJJJHFEEDCDBBB@>=<;:9888888765455554210/02321001223211123455556678864457742346656789:::9889999988889::;;::::;:87655555654234679;;==<;98666667876433234687678887420..27:<:::;::999865567898:==<866656799889;<<:8667888889998776566788787778888766789:::;<>???>>?>=<;:9:;<=======<<==<==>????>>??@@?@ACDDDEEFGGEDCCC@?==>>@@AAABCBBA@@@@ABCCDCBBA@@@@ABBCDCCBA@mmlkigffgijkklmmnnmlkjijlnoonnmkfbchkkkllmmmllkkkkjjjihgfedcccddeeffffffffeeeddcdeeeeefghhgghggdeghhfedddfaagfghhihijkjjkkkkjjgfiihhhihhhhjlmmmljhgghhhhffjkjjhggfffgghiihhgedcdeefedcba`_`abcceffffeefffecbbdeedcbccddefffeeeeeffffeeeddcbbbbbccbaaabcddccddefffefggfecaaabbbbaaa`aaa````````abcccccbbbaaaabbbcbbbbba_``aa`____^^^_``aaaaaa```__`a``___`_]Z^^\\]^_bffdbaaaabcddcbbccb``bbb`]ZXWWVTTUVWWVUVVVVVVVUUUVWXXXWX[[ZXYYWWVUTTTTUUTTVWXWVUTRQQQPONMMMLMPPPMJKNPOOMMNPSVWXYYZZ[ZZYXVUSQNKIGHIJLMMNORTTUUUUYWWZ_ZVWZ\\ZYXSRQLFHILKIJJNRTUUTTTUVXZ[]_````````_^``a`]Xa^^Z]XZWNOLJHFCCEFFFDCCEFGHHHGGFEDCDDEFFEDCCCCCCCCCBCDEGIHGFFFDBA@???>>>=<;:998777777655444443210/023220001232212345666567888754566312455556789::98777888877788999988899766544556654446789:;;::87655566654433333577678888641/.159;::::::9998645679668;<<:7666679999:<=<:8656788899:9765556778988878999888789:;;;;<>?@@@@@?>=<:99:;=========<====>?>??>=>???>??@BCCDEFGFECAAA@>==>>@@A@@ABBAA????@ABCDDCAAAAAAAAABCBBA@?mlkjigffgijkklmmnnnmljkmoooopokhedgklkkllnnmlkklkkkkjiigfeddddeeeeeeeffffeeeeeddedddddefggfggfedfhihgfdea^`egfggghhiijjjkkkkkigilihhhhgffghjllljhgffgggffgiigihggggghhiijiigfddeffgfedcba`aabccdeefffffggfdccdeedccdeeeeeeeedddeeffeeeddcbaaabbccba`abcddccddeggfffgffecaabccccbbaaaaa``_____`abccccccbbbbbbcccdcccbba``abaa`__^^^^_`aabbbaaaaa`````____`_]X\\^]]^`bdeca```aabbba```__^^_``^[ZYYXWVVVWWWVUUUUUUVUUTTUUVVVVXZZYX\\[ZYXWUUUVWWWWYZZYXVTSRRRPOMMNNMPSSRNLNQSRRPNOQTUVWXXXXXXXWVUSROLKIHIKLMNNOPSTUUUUUYWVZaYVWX[XWVRQOKEFGJKJJLOSTVUUUUVXXYZ\\^_````_`___`aba[Z`\\ZZZSSQLIHFDBBBEGFFDDDGHJJJIIHFECBBCDEEDCCBBBBBAAAAABDDFECBBA@>=<;;;;;;;::9876666676555433333210//234321001222223457776678887544553123554455789;:9766777766667778867777776654567877646778999987654445555443222357788899976421147999::9:99886445797569;<:8666778899:<=<:865678889:::743456788988889:;;::989::;;;;<>?@@AAA@?><;99:;=>>>?>>=======>?>>>===????==>@BBDDFFFEB@?@>>==>>@@AA@AAAAA??>>@@BCEDDBAAAAAAAAABAAA@?llkjigfggijkklmmnnnmlklnpqppoligeglmlkkmmonlkkllllllkjihgfeeeeefffffffeeeeeeeedddddccdeeffffeecdgiihffed`Zdjefggghhiiijkklllliikljhhhhgeefghjkjhfeefgfeeffhhghhhhhhhhijijjjhgeefgghhfedcbbbbbbccdefgggghhgdccefedddeffffffeedccdeeeeeddccbaaabcccbaaabccdccddefffeefeedcbbcdddcbbbaaaa``_____`aacccbccbbccdeeffffeeddcbbbccb`^^^___`abbbbbbbbbba`__^^^^___]X[]_^^_acb`_____``_^]]\\]\\\\\\\\]]][ZZZZYXWWWXXWVVVVVVVWVTSTTUVVUUVXYXZ^^]\\[YWVVVWVWZZ]]ZXVSRQPSPMNPPOOSWVSONPTVUTQOPRUTTTUUUUUUTTSRQOMKJIIKMLOPPPQSUUUUUVYVSZcXTUUYTTRQNMJDEFIKLLMPRSUUUTVWXXXYZ\\]]^^^^^]^^^__]XX]YVXVOMMHGGFECADGHHGGHHJKLMKJIHFECBAABCDCCBBBBBBBBAAA@ABCCA@??><<;::99999988765555665554333333210//2344210/1232334568887678888754443123554444579;;:8655665555555666655566666556679887566777778766554445554432223567898999987533467789:9:99876445677657:;:8767777889:;<<;976567899:::74345678998789:;<<;;:99:;<====>?@@ABBA@?><;:;<=>>>?>>=======>?>>=<<<>???><<=?ACDEFGEB@?>>===>?@@@@@ABBBA??>>?ABCEEDCBBBBBBBAAAABA@@lkjjigfghikkllmmmnnmlmnpqrrpmjgeejnmlkkmnonlklllllllkjihgfffffffggggfeeeeeeeedddddcccddeeeeeddcdghhgfeeeabeggghhhiiiijklmmmmlllljiiiihfddefhiiihfdeffeddeeghghgghiiiiiijjijhhgfghihhgfeddcccbbbdefghhhhhhgeccdfedefhiiihhgfedcddeeeddddccbaabccccbbabccccccddddeeeedddcbbbcdddcbbbaaa```_^^_`a`accbcddbbdfffghhhgggfeedccddb`^___``abcbbbbbbbba``_^^^^^_^^\\XZ]^]^_`aa_]^_^_^]]\\[Z[\\[ZZ[[[ZYYYYYYXWWXXYXWVVVXWWXVTSSTUVVUUVXXY[^^]\\[ZWVUUUTW[Z\\\\YWTRPPPSOMORQNQVYWTONRUWWUROQRUSRSTTTTRRQQQONNLKIHILNKORQPRTVVUUVVXVRZcXSRSURQPOMKIEEFIJKLMOQQSUTTUWXWWXYZ\\\\]]]]\\\\\\\\\\\\]ZVUWWUSOMLKFEHGEC@FHJIIHIKLNNNMKJHFECAAABCCCBBBBBBBBBBAA@@@@A@>==<;:988999988887654455555443333332220/024542100122345678997667888765432112344443468:;:86445544444445565555566666544679:986556555666654334455443212346878999::987544577899:9888654445766679987777777899:;<<;9866667789:975445678998778:<==<<;::;<<==>>>?@ABCCBA@?=<;;;<=>?@?>=<<<<<<=>?><<<<=?@@><:;>ABDEEFEB@>====>>??@@@?@BCCB@??>?@CDEEECBBBBCCBBBBBBBA@kkjjigfghjkkllmmnnnnoopqstrokifehmonmlmnnnmlllllllllkjiihgggggfgggggfedddeeeeeeeddcccccddeeedccegggggfgfdeghhhiiijjjjkllmnmmmlmmkiiiihfeeefghhihfefffedddefghgggiijiiiijkjjiihhhiihhggffeeddcbbceghiiiiihgeccegeegiijjiihggfeeeeeedddddccbabcccccbbbcccccccccccddddccbbbbcdddcbbbbaa``___^_``aabbbbdedbcegghikkkjiihggeeeffc`_```aaccccbbbbbba`__^^]]^^^^]\\Z[^]\\^_``_]\\^^\\]][ZYYYZZZZYZYYXXXXYYYXWWXXYXXXWWZYXZWUSSUVWVUUVWXZ[]]]\\[YVUSRSQTYWZZVTROMMPULKPTPNRY[WSOOSWYWUQOQQSRQQQQRQPONNMLKKJIIHIMPJPSQQSUVVVUVWXUQYbVQOOQNMKMKIGFFGIJKKLNOOQTQRTVVVVVXXYYZZZZZYZZYYXWTRRSROKJKIEEIJHD>GJLLLLLMNOONLKIGEDCA@@ABCBBAAAABBBBBA@???>>>=<;;:98778888777766555445544433333333320/023432101222345788876667877654310012333334569;:86444333333444555544566666655579:98755655556665433344445542123588899:;;:98766666689:988765445566677888777778899::;;<;;:987767789987655568987667:<>>==<;:;<=>???>>?@ACCCBA@?><;;<=>>??>><<<;<==??>=<<;=?AA?<:9<?BEEEEEDA><<==>>?@@@@@ACDDCA@@??@CDDEEECCCCCDCCCCCCCCCljjjjhghijkklmmmnnnnopqrssqokhegkmonmnoonmmlmmmmmmmmkjjiihhhhhggggggfedddeffffeeddccccdddddddcdeeffffggfffhjjijjjjjkkklllmmmmmmljjiiihgfefghhhhhfeggffeddefgggfgjkkjjijllkkkjiiiiihhhggggfeedcbcegijkjjiihfddghffijkkkjiihgfffffeedeeeedcbabcddccbbcdddccccccccccbbbbbcccccdcbbbabaa`___^^_``a`aaabedbbefghijlmlkjjjihgggggda`aabcccccbbaaaaa`__^]]]^^^^]]\\\\]^]]____^]\\^^[\\\\ZYZZZ[\\\\[YXWWWWVWXYXXWWWWXYXXXX[YZ[XUTTVXXWVUVWXYZ[[[ZYWTSQOROOSRVVSQOLLMSVIMSUPOTZ[VROPUXYWSPNOPQQQPQQPONMLLKJJJIHHHJNPKQTRRTUVVVTUUVSPW\\TOLLNLJIKIHHHHHIJJKKMLMORMOQSTTTUVWWWXXXXXWWWVUTSQPOPOMIHJHDEJKJE?ILMNMMMNNOOMKIHFDCBA@?@ABA@@??@@AAAA@?>==<<<<;::987666776666665555555444433333333320//134421101123446788776667776543100123332234568:97533332233344555555555566655568998776655556665433344455553112478899:;;;:988776667999887654566666777778777899::;;;<<<<;;99877777777655568987667:=??>>>=<<=>?@@@@@?@ABCCCBA@?>=<<<=>??>>=<;<===???==<;=?AB@=:9;?BEEEEEEB?=<<=>?@AA@@@ACEFECA@@@ABDEEEEDCDDDEEDDCCCCCDkjjkkihiikklmmmmmmmmopqrrqonmhdilnnmnoqpnnmmnnnnmmmmlkjjjjiiihhhhggfffeddegggffedddccddddddddccddeeffggffgikkkkkkkkllllkkkkllmlkjiiiihhfgghiihhhffgffedddefggfefikjjjijlkklmkjkjjjiiiiihhgffedcdfhjkkjjiihfeehiffjllllkjjihggggffeeeeeedcbbcdddccbcdddcbbccccccbbbaabbcdccccbbaaaaaa```__^_````aa`adcaadfghjkmmllkkkjihghhgebabbccccccba``````__^^^^_____^^^__^^```__^^`_\\\\\\[[\\\\]]^^]ZXWVUUUVWWXXWWWWXYXYWWZZ[\\ZWUVWYYXWVUVWXYZYYWVUSRPOROMQPUVSPNKLNSSJNUVRRVYYUQPSVXXVQNLMNPPPOOPONLKJJIIIHHHIJLNPMQTSRTUUVUSRQRNORVPLJJLJHHJIHHIIIJJJJKLLLMNJLNOPQRSUUUUVVVVVUUUTSQPNNMMMKGGHHDEKLKF@JMNONNNONNMLJHFDCBBA@??@A@?>==>?@@??>><<;;:::9888766655555555555665544444333344333220/123432101223445677765555665543100123333344457998644322223344556666665566766668889898665455544433444445664312467899:;;;;9999:866688877765457777777777788899:;;<<<<<<<===<;:9876667776678988778:=??@AA@?>>?@@@@@@@@ABCCCCBA@??>=<==?@??>>===>>??@?>=<=?BCA>:8:>BEEEEFFDA><<=>@AAAAA@ACEFFDB@@ABCDEFFEDDDEFFFEDDDDDDDjjklljijjkklmmmmmmmmnoqqpponlfeknmmmoqqponnnnnnnmmmmllkkkkjjiiihhggfffeddfgggffedddcdeedddddcccdddeefffffgijkkkkklmmlkjjjjjkkjihhiiiihgghhiiihhhfffeeedddefggfdehjiiiiikjlnnlllkkjijjjjjihggfeddfhjkkjjiihfeeghfgklmmmmlkjihhhggfffeeeedcccdddddcddeecbbbbcccccbbbaabbcccbbbaa``aaaaaaa``__````a`abbbabbdfhjlnnmllkkjihggffdcbbccccccba``````________```aaaaaaaaaaaa```a`\\\\]^`aa````_\\YWUTUUVWWXWWWWVXYYYVVYZ[\\ZXVWXYYXWVUVWXXXXWUSSTSSQOOQSVXWVTPMMNSQMQXXUVWZYUQQTVXWTPLKLMNNNMMNNMKJJIIIIHHIJJLOPORSRSTUUTSQOOLLMMPNKIJKJIHIIIIIJJKJJJJKKLLIHIKLMNOQRSSSSTTTTSSSRPONLLKKKIFEFFDEIJLEAJMNNOONNMMLKIGECBAA@@?>???>=<<<=>>>==<;;:99988777655544444444456776554444333344433332012232111233344456765444455554321012333445444589865443223333445666776666778888766889766544444433344555678632235789889::::::::97656777776656899888877788999:;<<=====<<==>>=<:876667776778998789;=?@ABBBA@?@@AAAAAA@AABCCCBBA@??>==<=>??>>>>>>??@@??><=?BCA?<::>BDDEFFGEB?<<>>@ABBAA@@BEGGFCA@ACDEEFFFEEEGGHHGFDDDDDDijkmljjkkklmmmmlllllmnooooomjfimmlmnpqrqqpooooonmmnnmmlklkkjjjiiigffggfddfgggffeeeddeeeeddccccccccddeeeefghijkkklmmmlkiiihiijihhhiiiihgghiijiiihfffcefeddfghhfddhjihhhijklnmlmllkjjkkkkkkjihgfeefgijjjjjiigfghhgilmmoonmlkjihhggfffffffedcdeeeeedeeedcbbbccccccbbaa`abcccbbaa`_``aaabbbaa`aaa```aba```aacegjkmmlkkjihgffeedcbabcccbbbaa```_____``````aaabbbbbbbcbbbbbbba`^^`acccbbbba^YWUUVVWXWWWWWWWXXZZUTWXZ[ZYXXXYYXWVUVWWWWWVTTTUUUSQQSUXYXWVTQOQUPPU[ZYYZ[YURSUVWURMJJKLMMMLMMLKJIIIIIIHIIJLNOPQRSSSTSSRQOMKHHIKMLJJKLKJIJJKKKKKKKKJJJLLKFHHIJKLMNOPPPPPQQQQQONMLLKIHHGECCDDCDFGHECJLMNNNMLLKJIGECBA@@@?>>>>>=<;;;;<<<<;:99988887766544333333333456777655444333334443342111232211233334445654322344544332112344444433468875544333433345667777667778888766788765444333333445556688754345788778899:::;;<87456666666579::9999888999::;<========<=>??>=;9866789999899:989:;=?@ABDDCBAAABBBCCBAAAABCBBBBAAA@?>=>>?????>>??@@A@?>=>@BBA?<::=@CDDFGHGD@=<=?ABCCBA@@CEHIGDA@BDEFFFGGFFGHIJJIHFDDDDEjjklkkllllmnnmllkkkkklmnnnmjhimnlkmpqqqrqpppponmmnnnmmllkkkkkjjjigffggeddfhhgffeeeeefffeedcccccccccddddeffghiijjllmlkjhhhhiiihhgghiiihgghiiihiihffecfffeeghiifddhihggfgjllmllmmlkjkllllllkjhggffghijjjjkjigghihhkmnnpponmlkihggffffffffedeffffeeeffecbbccccccccbaa``abcccbbaa`_``abbccccbcccbbaaaaa`__`abdfhjkkkjihgfedccccbbabcccbbbaa```______`````aaabbbbbbccbcbbbbbaa__abddcbcdca]ZWWWXYYYYXXXXXXYY[ZUSUWYZZYXXYYYXWWVVWXWWVUUUVVWWVTTUWYYYXXWVSTVRSW\\\\[[\\\\YVTTUUUROLJJKKLLLLMMLKJIIIIIIIIJKLNOPQQRRRRRQPOMJHEIJKLLKKLMLLKKLMMLMLLLMLLLLLKFGGHIJKLMMLLLLLLMMMLKJIHHGGEECBABBBABBBDEDHJLLLLKJIHHGECA@????>>>==<<;::::9:;::9888777766654332222222223567776654443333344333332223321112333333345443212334443321233444554434699865543334433456778877678878887666665654444433444455567887654568877556789:;;<=:855555666568:;;;;;:9999::;;<<=>>>>?>=<=>@@?><:877899:::9:::::;<=>?@ABDDCCCCCBCCCCCBAAAABBBBBAAAA@?>>>???>?>>?@@AA@@?=>@ABA?=;<>@CCDEGIHD@==>?BCCDBBA@BFJJHFBABDFFFGHHHHIJKLLKIGEEEEEjjkkjkmmmllmmlkkjjjiijklmlkihjllkknprrrrqpppoonmmnnmllllkkkkkjjjhgghgfddfghhhgffffffffffedcbbcddccccccddeeffghijklljiihghhiiihgfgghihhgghhggggigfedcefeefggihfddhhgffegiklkjkmlkklmmmnnnmlkihgghhhijjjkkkjihijijlnooqqponljigfefeeeeffedddeffeeeeedbaabcddddcccbaa`aabccccbba```abccdddddeeedcccbbaa___`abcdfggfgfedcbbbbbbbbbccccccbba```_________```aaabbbbbbcbba`````_^_`abbaabcb_\\YXXZ[\\\\[[ZZZZZZ[[[ZVUVWXZYYYYYYYYXYXXYZYWWVVWYYYXVVWWYYYYZYYXVWXTTW\\[[[\\\\YVTSSRQOMLKKLLLLLMNOMLKJJJJJKKJJKLLNNNOOPPPOONNLIHGJKKMMMLMONONMOQONPNMNONMMMMLHHIJIJKLLKJIGGHHHHHHFEEDDCCBBAA@AAAAA@=ADDFGIIIHHGFEEDBA?>==>>===<<;::999989999888776665454433222222222356788765444444444433333334432101233333334444321123344333233344455443359:8665433344434567889876789888887655434445654454445556778776656788754455689:;==<:76555666668:<=<<<<;;;;;<<<<=>>>>??>=<=>@AA?=;98789:;;;;;;;<<=>?@@@ABDDEEDDDCCCDDCCBAAAAAAABBAAAA@???>??>?>?@ABBBAA@?>@ABA@=<=?ADDEFGJIEA>>?@BCDDCB@@BGKMJFCBCDFFFGHIIJJLLMNMJHGFFFFjjkjjknmlllllkjjiiihhhijkkjihjllkkmopqqqqppoonmmmmmmllllkkkkkkjiggghgedfgiiihhggggggffffedccbcdccbccccdddeefgghjklkjihghhihiihggggghgggggffeefggedcbeeddffghgfdehhgfffgikkjikkjilmnoonnnmlmmkhhhhiijjkkkkkjijjjknoopqqqpnljgedddddddeedddddeedddedca`abcdddccccba``aaabbbbba```abccddddeeffgfedcccbaa`````acddddgfa``aaaaabcccccddcccbba``____^^^___````______````_____^]]]^^^^^^_``]ZXXY[\\]]\\\\\\[ZZZ[\\\\\\[VVWXXYZYZZZZZZYYZZ[ZYXWWWXYYZXWWYYYYXYXXYYXYWSUWYYYZ[[XUSSQPLLLLLLMMMLMNPPNMLKKJJJKKKKKKLMMMNNONNMMMLKIGHJLLNNNOPPQPPOQSPNRPNNPONNNNLHJJJJKLMLKIGEDDDDDDCBAAAABBBBA@@@AABA@ABDDDDEFFEDCCBBA@?====>====<<:9988888999887777666544443332222212235678876554444333433333234554210123333333444442101233444334443445554214897665433344544445789877788877888765433445665555555667787666657788653234578::<==<:87666667679<==<====<<===>>>>>??@@>=<<>?@A@><:989:;<<<<;<<<=>?@@A@ABDEFFEEEDCCDDDCCBAAAAAAABAAAAA@???>>>>??@ABCCBAA??@@AA@?=>ABDDEGIKJHC@?@ACDEDCA??CGLMKGDCDDFFGHIIJJKLMNNMKIGGFFFjjjijlnmlkkkkkjjiihhghiiiihijkkjjkmnnoqqponnmmmmmmmllllklkkkkkjihgggfefghiiiihhhhhgggfffedccccccccccddddddeegghijkjihhhiiiiihgfffffgffffedccddeedcbbcdcceefggfeehihgggghjjihjihikmnnoooonmonkhijjjijjkklllkjkkklmnpppppomkifcbbbcbbcddcccccccccccba``abbccccbbbbaaabbbbbbba````acccddeeefghhhfedddccbba`__`aaaaacb__`aaabbcddeeeddddccba``__^^^^^^^^____^^^^^^^^^^]\\\\\\\\[ZZ[[[[[[\\]]][YXYY\\^^^^^]\\[[[\\]]\\[YXYYYZ[Z[[[[[[Z[[\\\\[ZYXXYYZYYXXYZ[ZYYYWWYZYYVTUUVUWWYXVTRQPNJILMNOONMLNPRSQPNMLLLLMLLKKKKKKJKKKLLLKKKJHHKJLMOOOPQQSSSQSUSPUSPPRSQQPNMJLLLKLMMMKIFCBBBBAAA@@@@@ABCCBBBBBBCBBBCDDCCCDDBA@@@??>=<<<<==<==<<:998888788887776655543333333322212233467898655544333333334433345421001233333344444210012345444444444445310389876543224465433468987789876677887654445566666666666677766566678865312467799:<==;:8777778879;===>??>==>????????@@@>==<=?@A@><;:9:;<<<<<<<=>>?@ABBBBCDEFGGFFFEDDDDDCCBBAA@@@AAAAAA@@@@?>>?@AABCCCCCBAA@ABA@??ACEEFFGIKKHC@@ABCDEDCA@@CHNOLHEDEEGGFHJJKLLMNOPOMKHGGGGjjkjjlonljijjjiiihhhghhihghjklkjjjklmopqonmmlllmmmmlllkkkkkkkjjihgfffghiiihiiiiiiihggggfedcccccbcddddddddddegghijjihghiiiihgffeeeeeefeedcbbbbcddccaaccbbdeffffefhhhhhhghiihhihhikmmmnnnnnoomjiklkjjkklmmmmllllklnopqqqomljgebaaaaabcddcbaaaaaaabba``abbbcccbbbaaaabbbabbba`__``abcccccefhiiihgffeeddccb`_`aaaa`_`_]_`aabccdeffffeeeedcba``__^^^^^^^^^^^^]]]]]]]\\\\[[ZZZZYYYYYXXXXY[ZZYXXYZ\\^_^^^^]]\\]]^^]\\ZYYZ[[[[[[[\\\\\\[\\\\\\\\[ZYXXXYXWXYYZ[\\[[ZZYYZYXXUUUUTSTTVUTRRRPNJJNOQQPPONOQSTSRPOMMLLMNMLLKJJJIJJJKKJJJJIIGLKLNPPPQRRTTURTUVSUUSRTTSSQPNLNNMMMNNMLIEBAAAA@@@???@ABCDEDCCCCCDCCCDDDCBBBB@>>>>>>=<;;<<<;:;<<;:98877788777766555543333333333222223335788765454433333333444434543110123333333444431001234555553455443420048987554221457653246898779:975567788765555566666677766677766566678865301487778:<=>=;:988888889;<=>?AA@>>@AAAAA@@@@@@?>=<=>@@@?=<:9:;<<=====>>??@ABBBBCDEFHHGGGFEEEEEDCBBBA@?>@AABBA@@@A@???@ABBCCCDDDCBBBAA@@@BDEFFFGIKKIDAABCDDDDCA@ADIOPNHEEFGHHGGIKMMNOPQQPNLJHGGGijkjilnkjghiiiihhghhghhhghijkjiijjjlmoppnmmllllmmmmllkkkkkjjjjihhggfgijkjihijjjjjjihhhfeddcbbbbbcdddcdcccccegghiiihhhhiiihgfeddccddddddcbaaaabbccbaabbaacdfeefffghhiiiihhhhhhghijkkkllmmnoolijklkjjkllmmmnnnmmllnopqqomljhfcbaaaaabcddcba``````aa```abbbbbbbaaaaabbcbaabaa`__`abbbbbbceghijjihgffffedcba`abbbaa``^]`abcddeffgggfffffedcba`__^]]]]]]]]]]]]^^]]]]\\[ZZYYYXXXYYXWVVWXYXXXXWXY[\\]]\\\\\\\\]]\\]^^]\\ZYZ[[ZZZZZZ[[[[[[[[ZYWWUVXVTVXYY[]]\\[[Z[\\ZXVUWVVSRRSSRQQRSROLMPRSSRQQPOPRSSRRPOMLMNONMLKKJIIJJJJJIIIIIHFMLLNPPQQRRTUVSTUVTUVTSUUSRRQOOPOMMMNNMLIEA@@@@A@@@@ABBCDEFEDCCCDDDCCDDCCBAA@?=<<<==<;;;;;:989:;:99887767777776655444333333333333333333467874455532234443343443455421112333333333443210023445665444443342//38976543222568753246898779:975556788887655566777777766677777666667976411276778:<=?>=<;::9999::;=>>@BBB@?BCBBBBBAAAAA@>=<<=>?@?><;:;;<=>>>>>>??@ABBBBCDDEFHHHHGGFEEEEEDCBBA@>=>?@BBAA@AAAA@@@ABCCCDEEDCBBBB@@@@CDFFFGGIJKIEAABCDEDDCAABEJOPOJFFGHIHGHIKMNOPQRRRPNKJHHHijkjjmmihfhhiihhggghhghhhijjjiihiiklnoomllllkklmmmmllkkkjjjjiiihhhghiklkjiijjkkkkkjiihfedcbbbbabcceedcccccdeggiiiihhhhhhhgfedccbccdddccba``aaabcbbaabaaabdeddeffghijjjiiihgggghiijkkkkllmnmkkllkkkjklmnnnnnonmllnoooomkjhgeba`abbbcdddca`__````````aabbccccbbbaabcccbbbbba`_`aabaaa``adfhiiihhggggffecbaabccbbba`]]``bddeefggggggggfedcba``_^^^^]]]]]]]\\\\]]\\\\\\\\[ZZZYYXXXYZZZXWWXXWWWXXWXYZ[\\[[[[[[[[\\]]\\YWWXYYYYYYYYZZZYYYZYXWVVTVVURTWWY\\]^^\\[[[\\ZYVVVUUSSRRQQQRSSSQNOSUUUTRQONNPQRRRQNLKLNOONLKJJJKKKKJJIHHHHGGMMMNNOQQRQTUWSUTVUTUUUTTSRRQQPPPNMMMNMLIEA@@@@A@@@ABCDDEFFEEDCCDDDCCCDCBAA@?=<;;;<<<;;;;:98889::99887667777766554433332233333333333233345553234532245543343344556532112333333333443210012345665445554332..38976553223578753246898779;:75556789998766667777777766677886654456887410256789:<>@??><;::::;:<<>??ACCCAACDCCCCCBAABBA?>=<<=??@>=<;;<=>???????@@ABCCBCDDEFGHHHHGFEDDDDDCCBB@><=?@BBBBABBBAAABCDDDDEDDDCCCCB@?@BEEFGGGHIJJIFBABDEEEDDBBDHKPPOLHGHHIHGGIKNPQRSSSSQOLJIIIijkjjnmgffghhhggffgghhhhiijjiihggiklnonlllllkkkllllmlkjjjjkjjihhhhijkllkjjijkkllkkkjihfedcbbaaabcceeeddddeefghhiihhhhhhhggedcbbbbbccccbaa``aaabcbaaaaa``bcdddeefghijkkjjiihhgghiiijjjjjkmmmkjkkkkkkllmnooooonmlmooonmkjhgfdba`abccddddca`__```````aaabcccccbbaabbccdcbcccba``aaa`_^^^`ceghiihhhhhhhgfdbbcccccccb`^^``bdeefggggggggffedcbaa`____^^\\\\\\\\\\\\\\]]]]]\\\\\\[ZZZZYYXYZZZXWVWWWVWXWWWXYYYYYYYYYYY[[[ZXWWXXYXVWWWXXXXWVVVUUSSSRUURPRUUW\\]_^][[\\\\ZYXWVUTTTSSRRSSUUUSPRVVVUTRPONMNNOPQPNLKLOOPNLKJJKMNNLKJIIIIIHILOMMMNQRRPRTVSTSSRRSUVUTRPPPQRQPMLKLMMKHDA@?@@@AAABBBCDEFFEEDCCCDCBBBBAA@?>=<::::;;;;:::9888789988877665677765554322222223322222343333334553235653234433343333467654323443333333444321012345554444555442-.2897655433477886434679988:;97655678:::987777788877776667788775556788864013578:;=?AA@@>=<;;<<<=>?@ABDDCAACEDDDCCBBBCDCA?=<;<=??>=<<<=>?@AA@@@AAAABCCCCDDEFGHIIHGFFEDDDDDCCB@?<=?ACCBBBCCCCBCDEEEEEEDDDCCCCBBABBEGGHHHIJJJIFDBCEFFFEDCCEJMQQOMJJJJJIGGJKOQRRSSTTRPMLJJJijjiiliecefggffffffghhhiijjihhgggikmnomlklllkkkkklmmlkjjjkkjjjiiijklmllkkjjkklllllkkihgedcbbaaabccdeeeeeeffghhhihhhhhhgggfdcbabbbbcccccbbaaaaabbbaaaa```acdcccdefgijjjjjiiiihhhiiiiiiiiiklljjkkkkklmmmmnoooonmlmoonlkjhgfecbaabbddeeeeca```aaaaa`aaaabccdddcbaabcddedcdddcbbbbaa`_^^^`cdfghhhhiiihhgeccddddddddca_a`adddeefffffggffeedccbaaaa``__][[\\\\\\\\\\]]]]\\]\\\\[[[[ZZZZZZZXWVWWWWVWWWWWXXXXXXXWXYYZZYXWVVWXWVUUUUVWVVUTTTSRRRRSVTQPRRQRY]^_^\\[[[ZYWWVVUUUTTTTTUVWWVSTWVVTRQONMLLMNOPOMMLMPPQOMLJJLNOONMLKKKKKJKMQNMLNRRROPRTRRRPNOPSUTSPMMMPQPNKJIJKKKHD@???@@AAABBBBCDEDEEDCCBCBA@@@??>=<<:999:::::9998766667788776556677655543222222222222222344333334543335664224433344333456655433444333333444432101234444334456542.-1786655433479997545779:99:;98656689:;;:98888899887667777788876666789986202479;<>@BAAA?>>=<=>>?@ABBCEECAACEEEEDCBBCDEDB@=<;:<>>>=<<=>?@ABBAAAAAABCBBCCCCDEFGHHHGFFEEDDDDDCC@?=<?ACCCCCCDDDCDEFFFEFEEEDDCCCCBACDGHHHIJKKLJIGEDEFGGFFEDEGKNRRPMKKMLLJHGJKOQSSTTUUSQNMKKKiihghhdccccdeeeeeffghhhijjjihggfhjlnnmllklllkjjkklmmlkkkkkkkkkkkklmmmmllkkkkllllllkkihgfecbbaabbbccdeefffgghhhhhhggggggfffdccbbbbbccddccbbaaaabbbabaa```abcbbbbceeghiiiiiiiiiiiiijjjiihhijjiijjkkjklmmlmnnnnmlllmmkjihfeecba`abcdefffdcba`abbbbbaa```abcddcbaaabccdeeeeffeddddca``__`acdefggghiiihgfdccdeeeddddcbabaadddddddddefffeeddccbccbbbbaa_]\\\\\\\\\\[\\]]]]]]]]]\\\\[[[[[[[YWWXYYXXXXXXWWWXXXYYXYYZZYXWWVVWXWWVVVVVVVUUUTSSRQRSUWUTSRQPRX]^`_[ZZ[ZYWWWWVVVUUUUVWWXXWTTWVUTQPONNMNNOOPONMMNPPPOMLKKMNPPPNNNMMNMMLPRONKOTSRNNPSQQOLKLMPRRQNLKKNPMLIHHIJIJGC?>??@@@AAAAAABBCBBCCAA@A@>>==<<;;;:999999:999877555445677765555556655543222222222222222343333334444434665313433454433456665444554333223344442111123344444456663/-057565644458:;:8655689:::;;98777789::;;:9889999887667788888877777899;:951247:;=?ABBBBBA?=<=>?ABCCCDEEDBBDFFFEDCBBCDEEB@><;:;=>>=<<=>?@ACBAABBBBCCBBBCDDDEFFFFFGFFEEDDDDDDC?>==@BDEEEDDEEEEFGHHHHGGFFEEEEEDDCDFIJJJJKLMLKIGFEFGHHGFEFFHMPSRQOMMNNMKIHJKPRTTUUVVTRONLLLhhfefeaccbbceedeefgghiiijjihggfgiklmmmllkkkkkjjklmmlllllllllllllmnnnmmmllllllllllllkihfeedcbbbccccbcdefggghhhhhgggffffffgfeccbcbccccddddcba`aabbbbaa```aabbbaabbcdefggghhiiiiiiiiijiihhhhhhiiiijjjjjkkklllmmllkklljihfeedba``abcefggfdcaa`abcccba``__abbcdba```accdeeefggffeeeda``aa`accddefgghihhgeccdeefedddddbababccccbbbcccdeeeddcccccdcccbba`^]\\]]\\\\\\\\]]]]]^]]]]\\\\\\\\[[[ZXXYYYYYYYXYXXXXYYZYZZZ[[ZYXWVWXXXXXWWWWWVVVUUTSRRSTUWVUUSQQRX\\]_^ZYZZYZYXYWWVVUUUVWWXXWVTTUTSRQPOOPOOOOPPOONNNOPPNMMKLNMOPPPPPOOPOONRTPMKQUTRMNNQPONLHFHLOQONJIJMNLKGFGHHHIKE?=>??@@AAAAAAAAA@ABA@???><;;;;;::::988888988876654323455665555545555554332222222222222233333333444444456531233344433446766554555543222223333211112333454445665310134556655558;;:965469:;;<<;:9988889::<<;:99:998988766778888888889:;;;;:612379=?ABCCDCBA@><=>@ACDDDEEEDCCEFFFEDCBBBDEEC@>;9:;<>>>=<=?@@ACCBBBBBCCCBABCCDDDDEEEEEDDDDDDDDDDC@?<=@DGGGEEEEFFFHHIJIIIHHHGFFEEEEDEGJKKJKLMMMKIGFFGGIIHHGGHJOPTSQPNNOPOLJHJKPSUUVWWWVSPOMMMggfdecbbbabcddddeeghiijiiiihgggikmnmmllkkkkkjjkllmmlllmmmllkklmnooonmmllllllmmmmmmlkigfedddcbccddcbcdegghhhhhhggggffffffggecccccccdeedddcbaaabbbbbaaa``aaaabaaabbcdeffffhhhiiiiiiiiihhhggggghhhiihiihhhhijkkkkjjjjhfedddba``abcdfgggfdba`abcddcba`___`abcca`__`abccdefghhhggggecbbddccccccddeefgffedccdeeeedcdddcbbbccccbaaabbbcddddcccddeeeeddccb`^]]]]]]]^^^^__^^^]]]]\\\\\\\\[ZYZZZZZZ[ZYYYYYZ[[[\\]^^]\\[ZYXXYZZZZZYXXXXXXWWVUTTUVVWWWWURRSX[[_]YXYZZ[YXYXWWWWVVVWWWWVUTTSSRQPPPOPQRQQQQPPONNOOONMMLLMMOOPRTSRQQQQOSUROLRVURNMNPNNLIGFGJMPNMIGHJLKIEEFGGFGIF@<>????@@@@@@@??>>??==<<<:888899999878888887765443222344555544334544443333222222333222223322233345554335653323444333456766554556654332222233211123444344345665420124566766669<=<975579:;<==<;;;:9888::<<;;::;:9998877767888888889:;;<===862368<?ABCDDDCB@>==>@BDEEEEEEDCCEFGFEDCBBBCDDCA>;9::<>>>==>@BBBBCCBBBBCBBBABCCCDCBBAABCBBCCDEEDDDC@?=>AEHHHGFFFGGGIIJKKKKKJJIHGGGFEEFHKMMLLMOONLJHGGHIIIIHHIJLPRTTRQOOPQPNKHJKPTVVWWXXWTQPNNNffedcbbaaabcdddeefghiijiihgffghjlmnmllkjjjjjjkllmllllmnnnmmllmnooponlllmmmmmnnnmmmmkjhfedddddddddccdefhhhhhhhhghggggggffgffcccddddefeedcbaaabbbbbaaa````aaaaaaaabbccdddeffhhiiiiiiihhggfeefffghhhgggfeddefhhhhhgggedcbccbaaabcdefgggecba`acdedcba`__^`acdca_^_`abbbccegiiihhhhfccdeeddcbccccddefeddcbbcdddccccddccccbccbbaaaaaabcddcccdeeffffeeedca`_^^^^^________^]]^]]]]]]\\[[\\[[[[\\]\\[ZZZZ[[[\\]_``_]\\[ZZZZ[[\\\\\\[ZZZZZZYYXWWWWWXXXYXVTTTXYZ^[WVXYZZXWYXWWWWWVVVVVVUTTSRQQPPPPPPPQQQQQQPOOOOOONNNMMMLNOQRUUSRRRRPSVSPMRUVSNMNOMKIGGFEHLNMLIGGHKJIEBBDEDEDD@>==>????>>>>>====>=<<;;:987787777777777777665433211223455544433344443323221122333333333332223334565433466432345433246776554455665433332112332113444444443456553112466788878:=>=:75468:;<>>===<;:998:;<<<;;::::999988777788888889:;<=>??:84468<@ABCDEDDB@>==?@BDEEEEEECCCDEFFEECBBABCCBA>;99:<=>>>>?ABBBBCCBBBBBBBBABCCCCBAA@@AAAACCDEEDCCCA@>>BFHIHHGGGHHIJJKLLLLLLKJIIHHGFFGILNNMMNPQPNKIHHIIJJIIHJKNQSTTRQPPQSQOLIJKPUVWXXYXXVRQOOOeddcbbaaaabcddeefgghhijihgfeffhjllmlkkjjjkkjklnnnlllmnoonnnmmnoppponllllmmmmnnnnnnmljhgfeeeeffeeddcefghiihhihhhgggghhhgfgggddddddefffeccbaabcbbbbaaa````aaaaaaaaabbbbccceefghhhhhhhhggfeddeeefgggfeecbaaabcddeededdccbbcbaabccdefggfecbaabcdecbba`_^^_abcb`^]^_`````bdgiihhhhgeddeffeedccccccdeedcbbbbbcbbbbbbcdcccccccccbcbbaabccccccdeefgggggffecba`____`````_^^]]]^]]^^^]]\\\\]]]\\]^^^]\\\\[\\\\\\\\]^`aa`^]\\[[[[\\]]^^^^]]]]]\\[[ZZYYYYYYYXWUUUWXY[YUSVWXWUUZXVVWWWVVVUVUTTSSRQPPPOOOOPPPPQQPPOOONNNMNNOONLMNQRUUTSRRQQSWTRNRVWTNMMMLIFEFFEGJLLLHFGGIHHD?=@AAAAA@==<======<<<<;;<<<<;;::98766777666677666555443221112223455544333454432222221233343333333222233445664334665434455432467765444556654333321122332234444555444566643234689:9989;>?>;85468:;=>>>>>=<;::9:;<<<;;;:::99:99988888888888::<=??@?;97567<?ABCDEDDCA?==?@BCEEFFEDCCCCCDDEFECBAABBA@>:789;=>>>>?ABCBBBCCBBBBBBBAABCCCBA@??@@@@BCDEEDCCCBA??BGIJIIIIIJJKKLLMMMMMMLKJJIIHGGHKNOONNOQRQOLJIIJJKKJJIKMPSTTSRQPQSUSPMJJKQUWXYYYYXWSRPPPdccbbbbaabcdeefffgghhhihgfedffhjklmlkjiijklklnnmmkklmnoononnnoppoonmllkkllmmnonnnnmljihgffffffeddddefghiihhiihhgggggggfehhhddcddeeeffdbaaaabcbbbbaa````aaaaaaaaaaaaaabbbcdefgggghggfeedcccddefffgfecbba``_abcccbcbbbbbbbbcccccdefggfecbaabcddcba``_^]_abca_^]^______`beghhhhgfedefggfeeddddccdddccbaaabbaaaaabbccccddddddccccbbbcccccccdeffhiiihgecba``a```aa`_^^]]\\\\]]]^^^^]]]^^^^____^]]]]]\\\\]_abb`_^]\\\\\\\\]^^__`_____^^]\\\\\\[[[ZYYXWVUUUVWWUTSSUUUUTUXWVUVWVVVVUUTSSSRQQPOOOOOOOOOOOPOONNNMMMMNNONMMLNPQTTSRPRQPRWUTNQVWTNMLLKJGDDEDFHJJJGDDDEEEB>;=>?==>><=<:;;;;;;:::99:;;;::::9876666655556655544333322111222345555333345543222222233334444333322223444566544456544445433245666544445665544432112233234565456555567766433478:;::::<?@?<854679<=>????>=<;:::;<<<;;;;9:99:::988998778888:;;=>??@=;8668<>@BCDDDDCB@>=>?ABDDEEEDBBBBBBBDEEDBA@A@@?=:778:<>>>>?@ABAAAAABBBBBBBAABBBBA@@??@@@@BCDDDDCCCCB@@CHJKKIIIJJJKLMNNOOOOONMLKJJIHHILNPPOOPSSSQNLKJKKLLKKKLORTVUSQPPRTUUQNKKLQUWYYYYYYWTSQQQcccccccbacdeffffffghhhhgfeddefhijkkjjjijjkllmnnmlkklmnnoonnnnooonnmmlkllmmnonnnnnmlkjihhgghhgfedccdefghhhhhihhhggfgggffehhidccdddeeeeeb```accccbbaaaaaa``aaaaaaa````aaabbcdeefggfeedccbbbccddeededca``_^^^_`aaaaaaaaabccdccddddegggfecbaabcddcba``_^]^`aba_^]]^^^^^_`acdeeeeeddddfgffeeeeeedddddddcbaaaaaaaaabbccddeeeeeedddddccddddccddeffhiihhgecaaabba`aa`_^]\\\\[\\\\]^^^^^^^]^____````__^^^^][]`bbb`_^]\\\\\\]^_``aaaaaaa`_^^]]\\\\\\[ZXWUTTUUUVUTSRRSSTSTVVUTUVVVVUUTTSSSRRQPOOONNNNNMMMMNNNMMLLLKLMMNMLKJLNORRPNNPONPUQQOQUVTLKKJIHGDCDDDFGGGFCA@AAC@<:9<=;<<<;<<::9::::988789:::::998876665555555544444433332111223445665333345544333333333334444333222223444566544345654444432235666543345665544432001333345665346666678777544589;<;;;<=@A?=84457:<=?????>>=<;:;;<<<;;;;:9999::988999889988:;;=>??@?=;889;>@ACDDDDCB@?>>?@ABCDEDDBBBA@@@BDDCA@@??>=<9667:<=>>>>??@@AABBBCCCBBBAABBBB@@?@@AA@ABCCDDDCDDDCBAEJLMMLKKKLLMNNOPPPPPPONLKJJJIIJMOPPPPQSTTROMLLMMMMLLLNQTVXVTQPPSVWVSOLLMQUWYYYZZYXUTRRRccccccbccdefgfffffghhhgfeedeffhiijjiihijjjklmmmlkkklmmnoonnnnnnnnmmlllkkllmnnnnnmlkjjihhiiiiihfdcbcefgghhgghhhhgfffggfdcghidccddddeeefb_`]`cddcbaabbbaa``aaaaaa```````aaabcccdeedccbaaaaabccdddcbba`__^^^^_````````abcddddeeedefgggfedbbbcdeddcba`_^]]_aaa_^]\\]]]]]^^_`abccbbbbccddeeddefffeeeeeeddccbbbbbbaabbcdeefffffeeeeeeefeeeedddeeffghhhgfdbaabbbaaa`_^]\\[ZZ[[]^^]^]]]\\^````aaaa``__^`]Z[]aba`^]]\\\\]^_``aabbbbcba_^^^]]\\\\[YWVTTTUUUUTSSSRRRSSTVUTTUVVVVUUTSSSRRRQPONOMKKMMKKKLLLLKKKKJJJJKKJJGHHKLOOMKKMMLLRMMOQRRPIGGHFEEDCCCCDEDDC@><=>@>:87:;::;::<;99899998776789999:99887655555555554433444333322122345677643334544433333344343333332221233454456654434555543322123566543334566665544200134444567544667777888876679;<==<<=>@A@=954579<>?????>>=<;:;;<<<;;;;:999:::9889:9889989::;<=>???>=:::<=?ABCDDDCA@??>??@ABCCDCBAA@?>?@CCBA???>=<;96679;<>>>>??@@AABBBCCBBBBAABCCBAA@@ABAABBCDDDDDDEEDDCEJMNNMLLLLMNOOPQQQQQQQOMLKKJJJLNPPPPQRTUTSPNNNNNNNMMMORUXYWTPOPSWYXUROMNRUWYYYZZZYVUSSSdddccbbdeghhihgfffghhhhgedddefghhhihhhhiijklllkkkjkllmmnnnnnnnnmmlkkjjjjkkmmnnmmllkjiihhiiiihgfdcbdfefhhfffghhhgfffggebbfhheddcccdeeeea__\\_deedbaabcbbbaa``aaaa```````aaaabbccdccba`__``a`aabcba`_`___^^]^_```____`abcddefggfeefhhhgfdccccdeedcba`_^]]^_`a_^]]]\\]]^^]]^__```````aaabccdefggfffffeeeeeddddcccbbbcdefghhhgffffffffggffeeeeeffgggffeca`abcba``_^][[ZZZ[[]^^]]]]\\]^`aaaabbba``__`][[]`a`^\\[[\\]^__`````abbbba_^^^^]\\\\ZXVUTTUUUUUUTTSSSSSTTVUTTUVVVVUUUSSSSSRQPONOMJKKKJIIJLLKJJIIHHIGGGFEDFFGHLKJHFJJIGNJJMNMMLECCDCCCCBBBBBCBA@=;::;><8669:9::::;;998999998766789999::98765555554444332334443332222234678875433343333333334444333333322223345455665443456665321123566654323456666555421013455567865577778899998779;<=>>>>??AA@>:65679;>>?@@?>>><;:;;<<<;;;;::99:::9989::999:::::;<<=>>>>==<;<=>?ABCCCBA@???>>>?@ABBBAA@>=<<?ABA@?>==<;:97778:<=>>>??@@AABBBBBBBBBBBCCCCBBAABBABCDDEEDDEEFFFFFGJMOPONNMMNOQRSSSSSRSRPNMLKKJLMOQQQQRSUVUSQOOOOOOONNNQTXYYWTPOQTXZZWSQOPRUWYZZ[[ZZYWUTTddddcccefghhihhggghhhihgedddeefgghghgghiijjjjjjjjijkllllmmmlllllkkjiiihhiklmmmmlkjiihhghiiihgfeddbfgeeggdeefghggfefgfcabfghededdcceedea^^Z_eeecbbbbcbbba`_`aaa````````aaa`aabcccbb`_^^_````abba`_^_^_`_^^^_```_____acddeffghgfghihhgfedccdeffecbaa`^]]^_``__^]\\\\]]]]]]]]^__^^^^^_`_`acdefggffffffffffeeeedddccbcdefghihhgffggggggggffeeefffffeedcca_`bbb``_^]\\[ZYYZ[\\]^^^^]]\\]^`ababbccba`_^`][[]__^][YZ[\\]^____``a``a`_^^_^]]\\[YWUTSTUVVVVUUTTSSSTTUVTTSTUUUUTTVSRTTSRPONNNMJJKKIHIJKKKJJIHHFHFFEEDDFFFGJJIFDIOECIIILJFIHB@@CABCCCBBBBAA?>;:889:98667889999::999888887666788889998887655555444332123334433222223467888644333333333333334433333332222335655655544445555420013456665322234566666653101345656675457778899:::988:<=>???@AABBA>955679;=>?????>==;:;;;<;;:::::::::::9:;<;:::;:::::;<==>>>>==<<=>??@@AAA@@@@?>==>>?@@@@@?=<;;=@A@?>==<<;:87778;=>>?>??AABCCCCCBBBCCDCCDDDCCBBBCBCDFFFFEDEFHIHHGIKNPPPPNNMNPQSTUUTTTSRQOMLKKLLNPQRRRRSVWVTQPPPQPOONNPSVY[ZWTQOPUY[[XUSQPRVXZZZ[[[ZYWVUSeedddddfghijjihgghiiiihfeddddeefggfffffgghhhhhhiihijjkkkkkkkjkkjiihgggfgijkklkkjjihhhgghihhggfeddchhdcfgbcefggfffefgecaaeghfeedccdddcc_]]\\`dedcbbbccccc``_``a````````aaaa``accccbb`_^_____`aab`^]]^_````^_``___``_`abddefghhgfghiiihfedeeefffecbba`^]\\]^____^^]]]^]]]]]]]^]]\\\\\\\\]]]^_`acefffeeffggggggfffeeddccdefghiiiihghhhhhhhhhggffffffffeddcca__aba`_^]\\ZZZYZ[\\]^^____^^_^_abbbbcbbb`_^^\\[\\\\^^][YXYZ[\\\\]^^____^^^]]\\]^^]\\ZYWUSSTUVVWWVVVUUTTUUVVVUTTUUUUUUTWSRUUTQOONNNLJIKJJIJJLLKJIHHHFIGFEDCDFFGGHHGFFHLDBIIHJIBGFA>?BABCEDCCCBA?=<;:87999888789999::::9999998777767788899888765555544433211233443332222346788875433322233333333444333333332233566555554444455531/0136776542112445566667641012578765655577889:;;;;;::;=>?@@@@AABBA>:66789;==>???>>=<;;;;<;;;:::::::::::::;<<;;;;;;;;;;<===>>>=<<<==>>>??@@@@@?>><<<==>???>=<;:;<>@@?>==<<;:97789<>>?????ABCCDDDDCCCDDEDDEEEDDCCCCDDEGHHGEDEHJKKJIJLNQRRQONNOQSUVVVVVVUUSQOMKKLNPRSSSSTUXXWURQQQRRPONNPTX[\\[XUQOPUZ\\[ZVTRRSVXZ[[\\\\\\[ZXVTQeeeeeeegghijjihghiiiihgfeddddeefffffeeefffffgggghhhhiiijiiiiiihhhgfffffehjkjiiihggfggffghhggfedefdhhcbefbcdefffeeeffdbabefgededcddddca^]\\^abddcccbccddda_^`abaaaaa`aaaaaa``accccbb`_______abbb_^]]_`aa`````````aa``abcdefghhggghiiihfedddefffdcbbaa_]\\\\]^_____^]^__^^^^^^]]]\\[[\\\\\\\\\\]^`bddeeeeefhiihhhgggfeedcdefghijjjjihhhhhiiiiihhggffffffedddca__aa`^]\\[ZYYZZ[\\]]^___```````bbbbbbbbba__^\\[\\]^^\\ZYXXZ[[[\\]^^^^]]\\\\[ZZ[\\\\ZYXVTSRSTVVWXXXWWVVUVVWWWXVVVUVVVVVUWSRUUTQOOONMMKKLLKKKLMMKJIHHGFJHGFDDEGGFGHHHHIJIDCKKJIHAGD@=>BABCFFEDDCA@<:::77999999889::::999999:;:9987666777898887655555544433211233444332222346888865433322233333333444433333321134676554444444444420/025676543101244555667765200269987666678899:;<<===<<==>@@@@AAABCA=;77789:<<>>>=>=<;;;;;;;;;;;:::::9:::::;<<<<<;;;;;;;<===>>=<;<====>>>>?????>>=<<<<====>==<;;<=>??>>==<<;:8778:<>>@@@?@ACCDEEEEDDDEFFFFFFFEEDDDDEEGIIIHFEFILMMKJKMOQSSRPONORTVWXXXXWWVTSPMKKMNQSTSSSUWYZXVSRSSTSQOMNQUZ\\]\\YUQPPTY\\\\[XURRSUXZ[[\\]]\\ZYVTReeeffgghhhijjihhhijjhgffeeeeeffffeeeeeedddddeffffeffgggggggffffffeeeeeeehjihgggfedeeeeefgffeeddefeifbaefbcdefffeedeecbbceffededcddddb`]]]^aceedccccddeeb^^`bbbbaaaaaabbba`aaccccbb```````acdcb_]\\^aabbbbbbcbbbbbbaaabcddeghhgfgghhihfedddefffdbaaa`^]]\\]^_____^^^______`__^^\\\\\\\\\\\\\\\\]]^abcdddddfghiiihhggfeedddefghjkkkjjiiiihiiiiiiiihgghgggfeddda_^__^\\ZYXXXXYZ\\\\]^_```aaaaaaaccccccccba`_^\\\\]^^^\\ZYYZ[\\\\\\\\]^^^^]]\\ZYYXYZYXWVTSRRTUWYZZZYYXYXXXXYYYYXXXWWVVVVVYSQVUTRPPPOONMMMMMLLMNMMKIHHGEKIHGEEFGGHHHHIILMJ@ENLLJIBHE?=>BBCDFGFEDDCA<9997699::::99::::999999::;;::9876656778877655444554443311123344433333334688886433332223333333455543333332123467654444444443331//036776532//0244555567875200269:98667789:::;<=>???>=>>?@AA@AAABBA>;888999;;<=<<<<;;;:;;;;:;<;;;:::;;;::;<<==<<<<<<<<<<=>>>>==<=>>>>===>>?>>>>==<<;<<=<<=<<;;;<==>?>>==<<;:8678:=>?@AA@AADDEFFFFFFFFGGGGGGFFFFEEEEEHJKJIGFGKNNNLKMMORTTSQPOPSUWYZZZYYXWUTROLLMORTUTTTVXZ[YVSSSTUTQONORW[]^]YVRPQUZ\\]\\YVSSTUXZ[[\\]]\\ZXUSQeefghhiiihikjhhhijjihgffffffffffeddddddcbbcddeeeeeeffeeeeeeedddddddccddffifefeeddccddddefeeedddegfhfabfgcddeegffeeeebbbdeeeededddfffeb_\\]^adeedcccdedefc__abcccbbbbbaabbb`abccccbb```a``bcdeca_]^`cccdccccdccdddcbbbbcccefggfefghhhgfdddddeeeca`a``^]]]]^_____^]^^_`````a``_]]^^]]]\\]]^`bbbbbbcegghhhhgggfeeeeeeefhikkkkkjjiiiiiijjjjjjiihhhgfeddda_^^^\\ZYWVWXXYZ[\\]^_`aaa`abccacddddddccba`_]^___][YYZ[\\]]]]]^]]]^]\\ZXWWXXWVVUSRRSTVXYZ[[ZZYYZZZZ[ZZZZZZYXXXXXWZTRWTSRQQQPPOONNNMMMNNNMKIHGGELIHHFFFHHJIHGHIMOL@GPNLKJDIF@>?CCCDFGFEDCCB>877779:;;;:9:;;::998899::::;:987655667776654444544444331112334443333344568887543333322333333345554333333222346765444444443322100146776531..0244555567876300269::975789::;;<=>?A@@@?>>?@@@@@@AABA>;888889::;;;;<;;;::;;;;;;<<<<;;:;;;;;<==>===<<======>????>==>>??>===>>>>>>====<<<<===<<<;;<<===>>>===<<:8778;>@@BBBABCEFFGGGGGGGHHHHHHHGGGGFFFFFIKLLKHHHLPPONLNNPSUUURQPQTWXZ[[[[ZZYWURPMLNPRTUUTTVY[\\ZVSTUVVTRONPSX\\^^^ZVRPQUZ]^][XUSSUXZ[[\\]]\\ZXURQffghijjjjijkighiikkigfggggggggfeeccccccbabccdeeeeeefeeeeddddccdddccbbcceegccddcccbbbbbbdedddddeffgheabfgddeffggfeedcbbcdefffeeddefffeb_]^_bdfeddcdefeegd`aabcccccbbbbabbb`abccdcbbaaababcefeca_^`addeeeeeeeeeeefedcbbccbdeffeeefgggfecbabcddca````_^^]]^^____^]]]^_`aaabbba`__``__^^]^_``aa``acefggggggggfffeeeeefgijllllkkjjiijkkkkkkkkjiiihgeddca_]\\[ZYWVVVVWXYZ[]_```````cecbdeeeedddccba_^_``_][ZY[\\]]]]]^^]]^^]\\ZXWWXXWVUUSSSSTUWY[[[[ZZZ[\\\\\\\\[[[[\\\\[ZYYYYXZUSWUTSSSRRQQPPOONNNNNNMKIHHGDKIHHGFGIHJKHFGIMQMAIQPMJIFJGA?@CDDDEFEDCBBB?95678::;;;:9:::::988788::::::986544566665554444444444331122334444333455667786543333333333333345664433333322346754433443433221101257776520--024445555677630/169::975799;<<<<<=?BAAA@??>?@@@@@AABA><99988889:::;;:::::;;<<;<<=<<<<<<==<<<=>>>====>>>>>>?@@@@?>>>????>>=>??>>====>=====>>>>=<<=>>>=========;9778<?ABDDDCDFGHHHIIHHHHIIJJJJIIHHHHHGGGJLMMLJJJNQRQPNNOQTVWVTRQRUXZ[\\\\\\\\\\[ZXVTQNMOQSUVUUUWZ[\\ZVTTVWVURPOQTY]__^[VRPQU[^_]\\YVTSTWY[[[\\]\\ZWTRPgfghijkkkklkiggiikkigfgggggghhgedccccbaaabcdeeffeeeeeddddddccccdddcbbbceeebcccbbba````acddccddeffgheacggdeffghgfedcbbbdeeeefeedeefffec`^__begfedddefefge``acccddccbbcbbbbaabddedccbbbccdeefdb`^`bceefgfgggfggggffedcccdbcdeedcdefffecbaaabccba`````_^^^^^____^\\\\\\]_`aaaccbaaaabbbaa`_^_```___`bdefffffffgggffffffghiklmmmlkkkjjjkkkkkklkjiiiihfdca`^\\[YXWWWWWWWXYZ[\\^`a`````cgecdeffedcdddcb`_`aa_^\\ZZ\\]^]\\\\]^]]]]]]\\ZXWWXWWVVUTSSSTTVY[\\\\[ZZZ[[[\\[[[[[]\\[ZYYYYWXUTUUTTTTSSRRQQPPNNNMMMLKHGGECJIHGGFGIHKLIEGHMPLCJQNLJHEHF@>?BCDCCDDCAABA?95568:;<;;:999::998777888999987543246665444433334444432122334444444456677777654333333344444445666443333433344675433233443221111235776541/-.1344444445687410169;;97679;<===;;=?BBBBA@?>?@???>?@AA>=:::98899::::::::::;;<<<<====<<<<==<<=>????>>>>>???@@AAAA@?>??@@@?>>????>==>>?>>>>?????>>=>????>>===>>><:878<@CDFFFEEHIJJJJJIIIIJJKKLKKJIIIIIHHHKMNMMKKLORRRQOOOQUXXWUSRSVY[\\]]]]]\\[YWURPNORUWXWUUWZ\\][XUUWXWVSQPRUZ^``_\\WROQU[_`_\\ZVTSTWYZZZ[\\[YVSQPgghijjkkkllkihhjkkjihgghghhhhhfedddccb``abbcdeffffeeddccddddcceeedcbbbcdddccbbbba`_^_`acccccedfffggcbcfgffggggeddcaaabcccdeeeddeefffdb`^^`cefeeeeeffffhe``accdeedcccddddcaabccddccbbccdeffeca``bdegfghhhihiiihhhgfeedeecbdedccbccddcba```aba`___````__^]^____][Z[]_```bdedcbbcdddddba``aa`___`acdddeeddefgggggggghijkmmmmmllkjijkllljjkkkjhihgeba_][ZYYXYZZYXWWWXYZ\\]___`bbabeecdefedccdddcb`_aba_][YZ\\^_][Z[\\\\\\]]]\\[ZYXWWWWVVVTTSSTUVXZZZYXXXXYZZZZZ[[]\\[ZYVVWWVUUUTTTTSSRRRQPONLKKJLJJJGFDCDIGGGFFFHIKKHDFGLOKDKNJKHFDED?=>ABBBBBCB@??><85568:;<;;:99999987666666666676542248764343332223444432233444444444566777766554333333344444456666543334434455675433343444221222235676530.-/1344333345688620169;;:867:<=>>=<:<>BCCBA@?>>>>>>=>?@@>=:::9999::;;;:::::;;;;<<=>>>>=======<>>?@A@@?>>??@@@ABBBBA@?@@AAAA@@@@@??>>??@????@AAAA@??@@@@@??>?????>;878>CEEGGFFGJKLLLKJJJJJJKKLMMLKKJJJIHHILNONMLMNQSSSRPOPRUY[ZXUTTWZ\\]^^^^^^]ZYWTQPQTWXXWUUWZ]^\\YVVXXXWTRQSV[_``_\\VROPS[`a`^[WTSTVXZYZZZZWURPOggiijkkkllmkighjkljhggghhhhhhgfddeddbb``abbcdefffeeddcccccccddefeedbbbcddcbbaccbb`^^_`acdddddeefgggaceefggggffdcbba`aabbccdddcdeeeeedb_]_`deeedeefffefge__acdedddcccdeeeccbccccccbbccdefgfdbaabdeghghiiijjjkjiiihgfedffdbcdcbbbbcbbaaaaaaaaa`_^__```___^^^__^\\ZYY]___acdedcccegggfecbaaaaa`__`abccccdddefggghhhhhijkllmmnmllkjiijllkjhjkjihhgec`_]\\[ZZYY[\\[ZYXXXWYZ[]^^_`bb`bccddeedcccddcca_^aa`_]ZYY[]^\\ZYY[[[\\\\\\\\[ZXWWWWWUXXWUSRSTUWXXXWVVVWXXXXXXYZ[[ZYWUUVVUVVTSTTSRSRRQQPMMKJJIIIIHEEDBDHFFFEEFHHJIGECFJKHELLGHGECCB><=@AA@?@A@>=<<;75568::<<;;:988776555555444456553114886433333223333333334444334444456777666655444333323433356766654334333456666543333444321112234566542/--/1343333345689731159;<;978:<=??><:;=ACBA@?>=<<<<==>???>=;::::::;;<<<;;;;;;;;<===>????????>>>??@ABBA@>>?@AAABCDDCBAAABBBBBAAAAAA@@@@AAA@@@ABCCCBAAAABBAA@@@AA@@><98:?EGGHHGHIKMMNMLKKKKKKKLMNNMMLKKKJHIIMOONNMNORTTTSQPQSVZ][YUTUWZ]_______^]ZXTRPRTXZZXVVWZ^_]ZWWXYXWUSSUW\\^a`_\\VQNPSZ`ba_[WTSSVWXYYXYXVURPNghijkllklmmkighkmljhggghiiiihgfedeeeca`aabbcdefffeddccccdcccdeffeedbbbcddccbaccba`__`abddeeedeefffe`deffggggedcba``_``aabbbccdddeeedb`^]_acddddeeeeeefge`_`deddddccceefeccbbcbbbbbabdefggecbbbdefghijjkkllllkjjjihhgfffedcccccccbba`_`abbaa`_^^_`aaa`__^^^_^]]ZWX]`^_adffedddfghgffeddccbaa````abbbbdddefffghiiiiijklllllmllkjhhhkkjhghjihhfec`^\\\\\\[ZZZ[\\]]\\ZXXXXYZ[\\]]^_``_`abcdddcbbcddcba_]``_]\\ZXYZ]^\\YWXYZ[[\\\\[ZYXWWWWWTWXWUSRSTUVWVVUTTSTTUVUUUVWXXWVUSRSTTVUTSRRQQPPPPONLJHGGGFFFGCFDAEFDEFEDEGHIIFCDEFFDEHGDDCA@BA<9:=?>>>=>><99997655688:;;:9887665444433333345554214996323333223333333334444333444456777666666554333333433357775554333443456676543333444332111234566542/-.01344444445689842258;<;:88:;<>?>=;;<@BB@?=<<:;;;<<=>>>>=<<;;;;<<===<<<<<<<<<=>>?@@@@@@@@@???@ABCDCCA@?@@ABBCDEEEDCBBCCCCCCBBCBBAAABBCBBBBBCDDDCBBCCCCCBBAABBAA?=:8;@FHHIHHIKMNOONNLKKLLKKLMOOONMLLLKHHIMOPOOOOPRTUTTSRRSWZ]\\[WVVY\\_aa`````_^\\YVSRSVZ[[YVUWZ^`^[XXYYXWUSSWY\\_``_\\VRONRZ`ba_\\XUSSUWXXXWWVUTRPOfghikllllmlkhghjlkihgghjjjjihffeefffda`bbbbcdeffeedccccddddddeefedccbccdddcbbddcba``abceeeeeddeeegd_cefffggecba``__^_``aaabbccdddddca`^^`acccddeededdefd`_adedcccccceeffedbbbbbaaaabceghfdcbbcefggijklmnnnnmlkjjjiihggffeddcccddcca``abbba`____`abbba`__^^_^]\\ZVW^a^^adfgfedeghihggffffedcba````aaabddeffffghhjjjjkkkjjijkkkjhfffijhffgggfdba_^\\\\\\\\[[[[\\^_^\\ZYYYYYZZ[\\]^__^^^`bcdccbbbcdccb`^\\_`^][YXXZ]^\\XVVXYZ[\\\\[YYXWWVUUSWXWUSRRSTUUTTSSSRRRRSRRSTUVUTSSRRPQQTTSQPONNMMLLMLJHEDEEEEEFBEC@CDCEEDCDFHIGDCCCCCBCDCAA@>>@?:99<=<<;:;=;6668765447788888876654333323322334554214::73333333333344333234333334444567776666666553333334333578875543334434566655433333443222222345654320./1234444445568:963357:<;;:9::;<>>=<;;>@@?=;;:9:::;<===>>=>>=<<<<=>>==========>??@AAAAAAAAA@@@ABCDEEECBA@ABCDEFFFFEDDDDEDDDDCCDCCBBBCDDCCCCCDEDDDCCDDEEEDCBBBCCA?=:9;AFHIIIIJLNOPPONLKLMMLKLNPQPONMMNKHHINPQPPPPQSUVUUUTSTWZ]]\\YXXZ]abbbaaaa`_]ZXURSVZ\\\\ZWVWZ^`_\\YYYZYWVTTWZ]_``_\\WSPORY`ba`]YUSSUVWXWWVUTRPONeefhjkllkkkjhfgjkjigghikkkjigfeeffffdbbccbbceffeeeddcccdddddddeeedccccdeedcccdddcbabcdeffeeeddeeffb_defffffcbaa``____``aabbbcdddddcba_^^_`bbccddedccbddb__bdddccbbcceeffedbbbbba````ceghfdbccdefghjkmnnoooonmlkjjjjihhhgfedccddddca`bcccba``__`abcccba`____]\\[YUX^`^^`dffeedegiiihgfgggfedcbaa```acdeeefffefghijjjjiihggggggfdccdfgecccdcba_^]\\\\]]\\\\\\\\]^_`_][ZYYZZZ[[\\]^^^]]]_abbbbaa`aaaa`^\\[^^]\\ZXWXZ\\][XVVXYZZ[ZYXYYXWVTUSVWWUSQRTUUUTTTTSRQQQRQQRSTSRPPQQPNOPRQPNLKJJIIIIJJGFDDDEEEFF@CB@CDCDEDCCFGGFDCBB@@?@AA@?>=<>=9879<:9979:94447755446665666655543333212222235654215;:74333333333444333233332334444468865555665554333334333578875543343345566665543333332222333456765310//13455555555689:754579:<;:9:::;<==;::;>>=;99999:;<=>===>>????>===>>>>==>>>>>>?@AABCBBBBBBBAAABDEFFFFECBAACDFGHHHGFEEEFFFEEDDDDDDCCCCDDDDDEEEFEEEEDEEFGGFECCCDDC@=;:<BGIIJJJKMPQQQPNLKLNNMKKOQRRQONNOLHGJOQQQPQQRTVWWWWUUUX[]^]ZYX[_bcccbaaaa`^[YUSTW[]][XWXZ^`_\\ZZZ[YXVTUWZ]_``_\\XSQPQY_ba`]YUSRSVWWVUTTSQPNMcdegijkjjjihffgikjigghikkkjigeeefffedccdcbbdffgffeeedccdedddddeeeddcddeeeddcdeeddcbcdefgffeeeeeeeb`beeeeeeeba`aa`__``aaabbbcddddddcba_^__`aabcddccbabbcb``bddcbbabcddeffedbccdcba`_acefgecbddefgghjlnooppppnmlkjkkjjiihhgfedddeeeca`ceedba`````bcddccbaaaa`^\\[YVY^`^^`ceedddegijjihghiihgedcbaaaacddefgffeeefghijjihggfeeedccb```cca```aa`_^][\\]]^^^^^_`aa`^]\\Z[\\\\[[[[\\]^][[\\]_aaaa```____^][Z\\\\[ZZXWYZ[[ZXVVWXXYYYXXYXXWVTTVUVWUSSSUVVVUUUUTSRRQQQQRSSQOMORONMNOPPNLJHHHGGGGGGGFEDDDEEEG@BB?CDCDEDBCEEEDCDBA?>=>???=<;<<<9878:98768874346755445444455544443233111122235564216<:64433333334554432233332344543457765555565554433344333567875543333344555666554334332223444567875310012456676655568998655679;;;:99::;<<;:9:;<:978999:;<=>>>>?@@@@@?>==>>>>>>>>>>>?@BCCDDCCCCCCCBBBCEGGGGGFECBBCEGHIIIHGFFFGGGFFEEDDEEDDDDDEEEEFGGGGGGFEFFGHHHGEEEEFDA><;>DIJJJKKMORSSSQNLKMOONKKOSTTRPOOPMHHLPRRRQRRSUWXYYYXWWY]^_^[YY[`cdddcbbbb`_\\ZVTUX]_^\\XWX[^_^][[[[ZXWUUWZ]__`_]XTQQRX^aa`]ZVSRRTVVTTSRQPOMKccdfhjjihggfffgijjhgghijkjihfeeeeffeeeeecabdgghggffeedddedddddeeeeddeeefeedddeeeddcdefggffffggfffbacedeeddca``aba``aabbccccdddedddcb``__````abcccb``aaaaaaddccbaabcddefeddcbdddcaa`abdfedbaefeefhiknopppqqqomlkkkkjjjjjiihfedefffcaadggfcba``abcddddcbbaaa`^\\[YW[_`^^`cdddcdfhjkkjiiiiihhfedccbbbdeeffffedddefgggggfedccbbba`_]]]__^]]^^^]]\\\\\\\\]^_`````bcba_^][[]]]]\\\\\\\\\\[YZ[\\^_````__^^]^][YY[[ZZYXWXZ[ZZXWVVVWXXXXWXXXWVTUVUVXWVUUWXXWWVVVUUTSSRRSSSROLKOQNLLMNNNLJHFGFFFFFFFFEEDEEEEEG?BC@CDBCDCBBCDCCBCBA?=<=>>><;::;;8766887767874236755444322333334433222101222224453127;964333333345554432233333345654457654555555554433333224567865543334444556666655444443234445678875310134577888766678998765579;<;:99:::;<:988998767889:;<>????@ABBAA@?>>???>>>>>>>?@ACDEFEDDDDDDDDCCDFGHHHHGFECCDFGIJJJIIHHHHHHGGFEEEFFFFEEEEEFGHIIIIHHGGGHIJJJIGGFGHFC?==@FKKKKKLNPSTUTROLJMOPOLLPTUVTRPOOLIJMQRSSRSTUVXZZ[ZZYYZ^_`_[ZY\\acefedcbbba`][WUWZ^_^\\YWY[___^\\\\\\\\[YWUVXZ\\____]YURPRW]aa`]ZVSRQSTTSQPPOOMLJccdfhiigfeeefggijigggghijihgedddeefffggfe`behhhggggfeeeeeeeddeeeeeeffffffeeddeeeeddefghgfffghgfeebacfdddccba`abbbaabbcccccdddeeeeddba```````abccbb``aaabbbddcbaaabcddeeeddcbddedbbaaccddca`gfffhikmnoppqrrpnmkkklkkkkkkjiihfefghfdbbeiigdbaaabdeeedccbbbbba_\\\\ZX]a`^_bdddccegikllkjijjjihgfeddccdeeeeffedcbcdddeddcccbaa```_^\\[[\\\\\\\\\\\\\\\\[\\]]\\]]^_```aabcddca`^[\\_`_^]]]\\\\[YZ[\\]^____^]\\[[\\\\ZYYZYYYXWWXYZZYXWVVVVWWVVWXXWVUSUVVWZYXXXXYYXXWWWWVUTTTTUUTQOILNNMKKKLMMJHGFFGGFFFFFFEEDEEEEEF?BC@DDBBCBBAAAAAACB@?=<<>>?<;:9::7655776656674236655444322233444433221012322234553137;954333334455665432234434456654456645555555544432233334568766554444544566777765555543334556788986421246788888777789998765678:;;;:99:::;:99988766789:;<>?@@@@ABCCBBA@??@@@???????@ACDFGGGFEEEEEEEDDEGHIIHHHGFDDDFHJKLKKJIIIJJIIHGFFFGGGGGFFFFGHIJKKJJIHHIIJKLLKJHHHIHEA?>AFLLLLLMOQTTUUSOMKNQQPMKOTVVUSQPOKJLOSTTTSTUVWY[\\\\\\\\[[\\__`_\\ZY]adfgfedcbbba^\\XWY\\_`_]YXY\\_``_^]]]\\ZXVVWZ\\^_`_]ZVSQQV[_`_\\YUSQPQRRQONNNMLJIccdegggfeedeefghihgffghiihgecccdefgggggfc`cgiihhhhhgfffgffffeffffffgggggfffeddeeeeeffhhhffgghgfecabefdcbbaaa`bcccbbbcdeeddddeeffeedcbaaaaaaabbcccbaaaabbccdcbba`abcdddddcca`bdedba``abccbaaffffijlnoopqqrrpnlllmlllllllkkjigffhigdbcgjjhdcbbcceffedccbacddb_\\][Y_b`^acdddccegikmlkkjjjjihhgfeeeefffeeeddcbabbbbbbaaaa``_^^^]\\ZYZ[[\\\\\\\\[[[\\]]]\\]^^``abcdefedbb_]^aaa`_^^]\\[Z[[\\]^^^^^^][ZZ[[YWWXXXXWWWXXYYXWWVVVVVVUUVWWVVUSTVUWYYYZZZZZYYXYYXWVUUUUUUTPNKLNMLJJJKKKIGFGGHHHHHHGFEEEFEEDDE@BCADDBBAAA@????@BA@?====>><<:9:97654665544574236654333332223455443210023422345543248:964333334556666543223434566764356544556555544433333344567776555555555566777776656544445566789986432357899998777789:99876668::;;;:9999::::98766689:;<=?@AAAABCDDCCBA@@@AA@@?@@@@ABDEFGHHGFEEFFFFEEFHIJIIIIHGFEEFIKMMMLKJIIIJJJIHFFGHIIIHGGFFGHIKLLKJIIIIJKLMMMKJJJJIGC@?AGLMMMMNPRTUVVSPMLNRRRNJOUXXVTRPOLLNPTUVUUVWXYZ[\\]^^]]]^_`_\\ZY\\adghhfdccbcb_]ZXZ]`a_\\YXY\\_aa`_^^_^\\ZWVWY[]___^ZWTRRTY]_^\\YURPOOPQPMMLKKJHGccdeefeeddddeefgggfffghhhgfdcccdeffgfffebadhiiihhhhhggggggffffffggghhgggggfeeddefeefghihhggghgfdcbdeedbbaa``aabbcbbccfggfddeefffffeeddcbbaabbccdccbaaabbccdcbbaaabddddccca`^abdca`__`abbba`dfffhklnoopqqqqnljjoqommmmmmlkjjhgghigdcehjjhedcbcdfggfecbbbdffc^\\^\\[`b`_aceedccegikllkjkjjiihhgffffffffedddcbaaaaa```````____^^]][ZZZ[\\\\\\\\\\\\\\\\]]]\\]^^``abceffeecc`^`bccba__^\\[[\\]^^^^^^^^][ZZZYXWVWWWVVVWWWXXXWWWWVVVVVUUVVVUTSSUUWXYZZZZ[ZZYYZZYXWVVVVVUSPNKMNMKJIIJJJHGFGGHIIIIHGFFEEFEDDDC?ABBCCBA@@??>>>?@A@@?=<<====<;:987765555544464225654333333223355543210124433456542258:86433333346677654322233456777424554455555544444444444567787766666666666777777666654445566779::9754346899988876678999987656789;<;::8889:::9976679:<==>@BBBBCCDEEDCBA@@AAAAA@AABBBCDEFGHHGFEEFGGGFFGIJJJJJJIHGFDFILNOONMKJIIJKKJHGGHIJJJJIIGGGHJLMMLKJIIIJKLMNNLKKKKJGC@@BGMNMMNOQTVWXXUQNLNRSSNJMU[ZWUSRPNNPQTVWVVWXYZ[\\]^^______`_\\ZY\\bdghhgedcbbba^\\Z[]``_\\XXY\\`bca````_]ZWVWX[^^_^]ZWTRTUZ^[ZYUTROMNNONMKKJIHGGcdddddddddddddeeeeeefgghgfdcccdefffffeedbbfijjiiiiiihhiiihhgggggghhiihhhggfffeeffffghhiihhgggfecccdfedbba`aabccdcccddghhfeeeefgggfffeedccbbcccdddcbbaabbccdccbbbbcddddcba`^^`bdb`_^^_`aaa`_beefhklmnopqrqpnlklqqnnnnnnmmlkihghiifdcgjkjhedcdeefggfedccdeghc_^`^]abaaceeedcdegijkkjjjjiihhgffffffffeddccbaa```____________^^]]\\[[\\]]^^]]]]]^^]]]]^``abdefffedcaacdeedb`__\\Y\\]`a`_^____][ZZZYWVVWWWVUUVVWWXXXWWWWWWWWVVWVVUTSTUVWYZ\\[[[[[[[[\\[ZYXWWWVWVSNNMNMLKIIJIIIHGGHIJJKKJIHGGFFFEDCCA?@BBCBA@?>>>===>@@@??=<<=====;:987765554444454224544333333222345543200134433455542248986433333345777764322223456788423444345565554444444555667788877777666667777887776665556677789:;:7644578::988887678999987655679;<;;:98789:9::8778:;=>?@BDDDDEEEEEEDCBAAABBAAABBCCBCDEFGIHGFEFGHHHHHIJKKKKKKKJHFDEHKNPPPOMKJJKLLKIGHIJKKKKKJIHHIKMNNMLKJJIJKLNOONMLLLKHDBBCHMNNNOPSUWXYYWSNLOSTUOJMT[ZXVTSQOOPRUWXXXYZZ[\\]^_`aaaa```^\\ZY]adgiihfdcbbbb_^\\\\]``^\\XWX\\`cdbaaaa`^[XVVX[]^^^\\ZWUSSTX[XXWUTROLLLMLLJIHHGGFcccccccccccccccdddeefffgfdcbccdeffffedcbdehijjjjjjiiijjjjihhggghhijiiihhggggfggggfgghhiiihhhgfecccefedcbbaabcdeedcdefhihgeeffgggggfffeedddddddeeddccbbbbcddddcccccddddcba`_^`ab`_^___```_^]`dddgijkmooqrponlmoqolnonnnmmljihhijifcciljihfedeffghhfeeeeefhid__a`_abbceeeedccegijjjjjiihhggfeeeffffedcccbaa```_^]]^^__^^^^^^^]]]]]^^_________^^]]]]__`bdfffffecbcefggedba`^]_`bb`__``__^\\[ZYWVVVVVVVUTUVVWXXWWWWWXXXXWWXWVUTUUVVXYZ[[ZZ[[[[\\[[ZZYXWVVVVQMLNNMKKJIIHHHHHHIJJKLLKJIGGFFEDCBA@>?AAB@??>=<<;;;<>????=<;=====;:97776555444555422454443333322234554310013443345653125798543333334567777643222235679952244334556655555444555667787887777777677888789888776666678889:;;:8654679::988888789:99876555579:<<;:98789::;;9879;<>?@BCEEFFFFFEEEDCBAAABBAABBCCCCCDEFHHIHGFGHIIIIIJKKKKKLLLKIFDCFJNQQRQOLKKLMMLJHHIKLLLLLLJIIKMNOONMLKJJKKLNPPONLLMLIFCCDINNNNPQTVWXYZXTOLNSUVQKMTZ[YWUSRPPQSUXYZZ[[\\\\]^_`bbbbba``^[YY\\adgjiigecbbcb`_]]^`_^\\XWX\\addcbaaa_^[XVVXZ]^^][YWUSTTVWUVUUUROLKKKKJJIHGGGFbbbbbbbbbbbbaaabcdeeffffdbbbcdeeeeeedcbceghhjjjjjjjjjkkkkjhhhhhijkkkjihhhhhhhhhhhggggghijiiigfecddfgedcccbbcdefgfeefgjjigefgghhhhgggffeedddeeeefeeddccccdeeeedddddddddcbba`_`aa^^^__````]\\\\_ccceghikmnpqpommnpqonopooonmkjihhhjiecckmjhhgfefghiiihgfffghjjeaacbaccdeggfedccdeghiiiiihhgffedddeeedddccbba````_^]]]^^^]]^^^^^^]]^__`aa````aaba``_^^^_`bdffffedcbdfghhfedb`^_aceb__`aa``^][ZXWVVVVVVVUTTUVVWWWWVWXXYYZYYYXWVVVVWWXZZ\\\\[[ZZ[[\\[[ZYYXWVUUUPKKMMLKJIIIHHHHIIIJJKLMLKIHGFEDCA@??>??@@?>=<;::999:<==>><<;<<<<<:98777655544455532244444443332223456542001344334665312688865444333456778775432223467897423333445565556655556666678887777777777889989::9987766678889:;<;:8655689;:988888899:99876555568:;<;;:9889;<=<:88:<>@ABCDFFGGGGGFFFEDCAAABBBCCCDEDCDDEFHIJIHGGHIJJJIJKLLLLLLLKIFDCDHMQRSSPNLLMNONLIHIKLMNNNMKJJKMOPPPNMLKJKKLNPQPONNNMKGDDFJNNNOPRUWWXY[YUPMNSUVRMMRXZZWVTSQQRTVY[[[\\\\^^^_`abccccba_^ZYY\\`dhjjigecbbcca_]]]__^[XWX\\acdcbaaa_^ZYWVWZ]]^][XVTSTSTUSSTSUSOLKJKJJIHGFGHGbbaaaaaabbba```acdeeffeddbabdddeeeddccbcefghijjjjjjkkkkkkjihhhijklllkjihhhhijjjiihgfgghijjjihfedeeggfeddcccdeghhgffghkkjhffghihihhhhggffeeefffffffeeddddeffffeeeeeedddccbaa__``^^_```___]\\\\_bbacefgikmoponmmoppoopqqponlkjihhhiiebdlljghgfggijjjiihhgghikkc`cdabeddfgggfeccdeefghiihggfedcccddddddccbbaa````_]\\\\\\]]]]]]]]^^^^^_``aaaaa`abbcbbaa`_^_abdeeeeddcceghihgedb`]`bdd`_`bbba`_][ZXWVUUVVVVUUTUVWXWWVWXYYZZ[[[ZYXWWWWWWYZ[\\\\\\[ZZZ[[[ZYYXWVUTSROKJLLKJIHIIHHHHHHHHIJLLLJHGFEDBA@>>=<=>>>=<;:9988778;;;<=<;:;;;;;987677666644455432244444443332223456642011344334675312699865444444456788876533333457887543222345555556666666777778887888887777889999;:::97777788899:;;;:9656789;;:9999999::998776655679;<<<;:99:<=>=;98:=?BCDDEFGGGGGGGGGFDCAAACCCDDEFFFEDDDEHIKJIHHHIJKKJKLLLLLMMMLJGDCDGLPRSTRPNMNOQQNKIIKMNNOOOMKKKMOPQQONLKKKKLNPQRQPONMKHEEGKONMOQSUWXXYZZVRNNSUVSNNPUYZXWUTSSSTWZ\\\\\\^^____`abcdddcb`^ZXY\\adhjkihfdcbccb`^]]__][WVX[_bcbaa``^]ZXWVWY[]^]ZXVTSTSSTPPRSUSOLKJKJJIHGFGHHaa````aaaaa``_`acdeeeeeccbbcdddddcbbbcdddeffhiijjjkkklkkkjihhijkmnnmlkjihiikklkjjihffgijkjjihfedefhggeddcccdegihgfghikkjhfghhiiiiihhhhggffffffgfffffeeeefgffffeeeeeeeddcbba____]_`aa````]\\[_aa`bdefhjlnpnmlmoooopppqpomlkihhhijjeaflljhhiiiijkkkjjjjihiiihbbfebcedefghhhgecbcdefghgffedcbaaabcccccbbaaaaa````^\\[\\\\\\]]\\]]]^^^^_`aaaaaa`abcddcdcba`__aaccccccccdfhiihfeca^^`cd`^_abbb`_^][YXWVUUUVVVUUUUVXXWWXYYZZ[[[\\\\[ZZYYYYXXY[[\\[[ZZZZ[[[ZYXXWVUTRPOKJKKJIHHHHGGGHHHGGGIJKKIGEDCB@?>=<;;<<==<:987766667::::;;:9:::99876666666644455433344444443332223456642112344334565313799865444444445778887643334457887643222345665567766677877788888889998888889999;:::9887788899:::;:9865679:;;:::999999::98887665779;<===<;;<>>@?<:9;>ACDEEFGHHHHHHGGGGECAAACDCDEFGGHGFEDEHIKKKJIIIKKLKLMMMMMNNMLJGEDDFJORTUTQPOOPRSPMKJLMNOPQQOMLLMOQRRQONLKKKLMORSSQPONKHEFHLOONOQTVXYXYZ[WTOOSTWSOMOTZ[ZXWVTSTUXZ\\\\]``a````abcddedc`^ZXY\\aehjkjhfdcabcca_^]^^]ZWVWZ^aba``__][YWVVWX[\\]\\ZWUSRSSRRNNPRTSOLKJKJJIHGFGHI``___``aaa``__`bcdeeeddcbbbccccccbbabcdddeefghhiiiijkkkkkjjihijlnnnmlkjiiijllmllkjhgfgikkkjihgfefgihfedcccdefhihhggijlkjifghhijjiiiiiihggggggggggggffffgggggggfeeeeeeeeccba__^_[`aba`___\\\\\\_```acddgijlnmlklmmnopooonnmlkiihiijjcbgkkjiiiiijkkkkkkkkjijjhebfifcefeefgghhgecbbcdefffeddcbaa`abccbbbaaaaaaaaaaa_^\\\\]]]]]^^^____``aaaaa``abcdddedcca```abbbbcccceghhhgedb`^^`bb_^_`bba_^][ZYXWVUVVVVVUUVVVWWWYYZ[[Z[[\\]]\\[[ZZZZYYY[[\\[[ZZYZ[ZZYXWWVUTSPONKJJJJHHGGGFFGGGFEFFGHIHGFDBA@>=<<;::;;;;:87666555669988999899988765566665544455433334444443332333567642123344444564313789865544444444677888754444557888643212345666667887777888889888899:999888899::;;::988888899:;;:::9865679:;;;::999889::9998877778:<=>>>====?@B@=;:<@CDEEFGHIIIIIIHGGGECAAACDDEFGHIIHGEDEGIKKKKJIJKLLLMNNNNNOONMKHFEEEINQSUTSRPPQRSRPNLMNOPQRRQOMLMOQRRRQPNMLLMNORTTSQPNLIGGHLPPPPRTVXYYYZZXUQPSTWTPMMSZ][ZYWUTTUXZ\\]^`abaa`aabcddeeca^ZXY\\aehjkjigdcabbbb`^]]\\[YVUVY]`aa`_^^[ZXWUUVX[[\\[ZWTPPRQQOLNPRTSPLKKLKKJIHFFHH`__^_```aa`__`abcdddddcbbbccccccbaaabcddddeefghhgghiiijkjjjjjkmoponmlkjiijkmmmmlkjigfhjklkjjihffghhhfeeddddefhiiihhiklkjigghijjjjjjjjjihghhhhgggghhgggghhhhhggfeeeeffffdcba^___[abcba``a\\[\\_`aa`abcehiklkjjjkkmnnnnnmmllkjjiijjgaciljiijjjjkllllklmlkklkhdbgjgdefeefgghhgfeccbcdeeddcba``a`abbbbaa````accbbbba`^_____^_____^^__`aa````abccdedddca``aabbbbbccdfhhgfedba_^^`a_^_````_]\\[ZYYXVVVWWWWWVVVVVWWXYZ[[[[[[\\^^^]\\[[[ZZZZZ[[ZZYXWXXXXWWVUTSRQNNMKJKLKIHGGFEEFFEDCCDEFFFECA@?>=;:;::::::987765555556887777788887544566555554444433333344444333333466775322334444455431368887655444444445689986544556788875421234677777899888898889999899:;:9999999::;;;;:9888899::;;;:::9976678::;;;;:99999::::998888::;<=???>>>>@ACB><;=ADEFFFGHIJJJJJIHHHECA@ABDDEFGIJJJHFDDFHJKKLLJKKLMNNOPPPPPPOMLJHGGGJMPRTTTSRRSSTTQOMMNOQRTUTRNLLNPRSTSQPONNMNPRTUTRQPMKIHILPPPPRTWYZYYYZYVRQTUXUQNMQY^]\\ZXWVVVY\\^_`abccbbbbbcddeddb_[YY\\`dgjkkkhfcaabaa`_]]ZXVTSUX\\_aa`_][YWVVTUWXZZYXWUQNMPPOMLORTUTQMLMMLLKIIHHII`_^^_`````_^_`bdddddddcbbbbcccccbaabcccdddeefffffffgghiiiijjlmopponlkjjijklmmmmkjjihgikllkkkjhgffhhgffffeeeegijjiihhlmljihhiijjjkkklkkihhhhhhhhhhhhhhgghhhhhggfeefffggfedca^^_`\\cccbaabb][[`aa````bdghjjihghijklmnnmmmmmkjjijjieadjkjjjjjjjklllllmmmlklljgfffgffeeefgghgffedcbbcdcccbba``aaabbbba```_`acdddccba_`bab`^____^^]]]`````````aacdedccaaaabbbccccdeghgfdcba`_^^``_]_`_^^]\\[ZYYXWVUVWXWWWVWVVWXXYZ[\\\\\\[[\\]^__^^]\\\\[[[[[[[ZYXWWVWWVVUTTSRPONMMJJKLKJHFFEEDEEDCBBABCDCB@>>=<;9999999999876555555567776556667654344665545433332323333333343233445667753222344444554323677777665555434456899866545567788864212246877799:9889999899:9999:;;;::::999::;;;;;:98899::;;<<;:999877789:;;;;:::99999:::99989;<==>?@?@@@@BCCC?=<>BDGGFEFGIIKKJJIIHFEC@@ABDEEFHJKKKHFEEGHIJLLLLLLMMOOPPPPPQPPNLKIHGHJMPRTUUTTSSSTTSQONNPQSUWVTNKKLPRTTTSRQPONOPSUUTSRPOMJJJNOPQQRTVX[ZYYYYWTSUVXVRNLQX__][YWWWWY\\^_abdeedccbbccdddcb`\\ZZ\\`cfiklkifdaaaaa`_^\\ZWURRTWZ]``_^\\ZWVTTSUWXXYWVUSOMLOONMLPSUVSPNMMNMLKKIIIIJ`_^^_````_^]^`bdddccdcccbbbbccccbbabcccccddeefeedddeffgghhjjmnpqqomkjiiijkmnnmmkjjihgikllkkkjhggfgggfgffffffhjkjjjiilmlkihhiklmmmllmlkihhhhhiiiihhhiihhiihijhhgffgggggfeeca^_``]dddcaabb]\\\\`aa____acefggfeeefghjklllllllkiiijigbbejjjjjkkjjklllllmmlkklmjgfgggggfeffffffeedcbbbccbbbbba`aaaabbbbba``_abddeeeddcabcbca_```_^]\\\\]__`````_^__acddcbaaaabccdcddefhgfdbaa`____``_^^^]]\\\\[ZZYYXXWUVXXWWWVVVVXXYYZ[\\]]\\\\]^``____^^]\\\\\\[YYXWVUVVUUVUTSRRPONMLLKJKKKIGFEDDDDDCA@?>?@A@?=;<;::88888888887766665556667654334454422356654554322212333333234432344445667532233444444443234566777765554444567999877556677888753233468889;;;;::9:9999::9999:;<<<;;::::::;<<<;::989:;;;<<<;;::9987789::;;;;;:999::;;:::::;=>??>?@AABBBCDDD@?=?CEHIGFFGIIKLKJJIGFDB@@ACDEEFHJLLLJHFFGGIJLMNNMMMNOPQQQRQRQPONLJIIJLNPRUVUUUUUUVVUSQPOPQSVWWUPMLMPSTUUTSSRPOOPSUUUTTRQOMLLNPQQRSTVX\\ZYXYYYVUVWYWSNLPX_`^\\ZXXWXZ]_`bdeffedcbbccccccb`][Z\\`cfikkkifdaaaaaa`^\\YURQQSVY\\_``^[YUTSSTTWXXWTSRPNKKNMMLMPSVUSPNNOOMMLLKKKLL`_^^_````_^^_acdddcccccccccccccccccccccccddeeedddddddeefggijmnqqpnlkjiiijkmnnmmkjjigghkllkkkjhgggghggggggffgjkkkjjjjmnmkihhikmmmmllmlkihhhghhgghhhhhghiijiijjihgghggggfedca^^`a^dedb`adc^\\^aba`_^_`addddccccdefhjjkkkkjjjiihiheacfijjjjjjjjklllllllkjklmjhgghhhgfffffeeddcbbbbbccbbbccbaaaaaabbbba``_aceffffffdbbcccb``a``_^\\\\\\_______^]^^_acbaaaa`abccdcddfggfdb`____`````__^^]]\\\\[ZZYYXXVUUWXXXWVVUUWXYZ[\\]]]\\\\]_``___^_^]]\\\\[YXWVUTUUTUUUTSRPONNMLLKJKKIGFDCBCCCCB@>=<=>?>=;:;:9977788899988777666556678765445565533467765654433323444444345543455445677543334434445543345656788876555444568::999755678888875434457999:;;;;::9::::::::::::;<=<<<;;;;;;<<<<<;;:9::;;;<<<<;::9988899::;<<;;;::9:;<<;;;;;<>?@@?@ABCCCCDEEDA@>@DGJKIGGHIJKLLKJHGFDB@@ACDEEFHKMNMKHFFGHIJLMNNNMMNOPQQRRRSRQPNMKJJKMOQSUVVVUUUVVWWUTRQPRTVXXVQNNNPSUVVUUTSQPOPRTUVUUSRPONNPQRRRSUVX\\\\[YYZZXWWXYWSOMQX`a_][YYXYZ]_acdeffedcccbbccccb`][Z\\`cfikkkifdaaaaaa`^\\YURQQSUX\\^___\\YUSSSSTVWWVSRQPMLKNNMLMPSVUSPNNOPONNLLKKLL`_^]_`a``_^^_aceeedccccdddccccccddddddccccdeeeddcccdddeffgijlnpoonlkihhjjlmnnmmkjihgihlmmlkkjihhghhggghgggghjkkkjkjjmnmkihhikmmmmllmlkihhhghggffghggghiijiijjiihghhhhggedca__aa_cddba`fe^]_bbba___`abcbabaaabcdfhhjjiiihhhihhheacgijjjjjjjjkllkkkkkjkkkkjiiiijjhfffffedccbaaabbcbbbcccbabaaaaaabba```acegggghhfcbbbcba````_]\\\\\\^^_^^]]]\\]^_`aaa``__`abcdcdfghgeca`_^_`aaaa`__^^]\\\\[ZZZYYXXVUUWXXXXWVUUVWXZ[[[\\\\\\\\]^____^^^^]\\\\\\[YWVVUTTTTTUUTSQQPONMMLLKKJHFEDCBBCCCB@><<<=>=<;::::98778999999988876656888987656556554466776565555554455555545665456555667864344454555654345677778:998665555678::999766778899976434457999:;<<<;;:;;;;;;;:::::;<<====<<<<<<<==<<<;:;;<<==<=<;;::99889:;;;<<<<;;::;;<=<<<<<=?@A@@ABBCDDDEFFEBA?@EILLJHHIJKKLLLJHGFDB@@ACDEFGILNOOMJGGGHIKMMOOONNOPQQRSSSTTRQPNLKKLMPRSUVVVVVVVWWXVUSRQSUWYYVSPOOPSUVVVUUTRPOOQSUVVVTSPOOOQQRRSTUUX]^]ZZ[[ZYYZZXTPMQYaa`^\\ZZYZ[]_acdfffeedccccbbbcb`][Z\\_bfikkkifdaaaa```^\\YUSQQSUX[^___\\YTSRSSTVWWUSRQOMLLONMLMPSVUSPNNOPPOONLKKMM~|zxvtsrrrqqpppqtvy{}~~|zxz|}~~~}}}~~}|z||}}}{yzzzyxwwvwxz|||{zyyyyxurpmkmmnnmkmqux{{zzzz{zzyz{|~~~}|{zxvutstuuvwyxwussvz|zumlnqsssuvy|}yxx|~u}}{}{zyyxyxxxz{zzz|}|{zyxvutwzzzzywxz{}|||}|zxxyz|}~ypa^dkpsttvxy{ysqzvwv{|~}wsnmopqstuwyyxwwwwwwvvutttsuvwxxupg`\\[\\[YVW[__`^XWery}{z|wuuuvy{|||}~~}|{{{|}~~ysnlnrrpruz{{zyxwvwxy{}~~}}}|zwvusrrqqqqrtusomlosvxyxwxwxxxz{{zyyxxxy{||||{{{z{{||}||}~~}}~}}~zzz}~~|{|}~}}}|{{zzxue`diow|||{zzzyzzz{xvvtuvx{{xx}}x~}|||{zyxwvwxyzyxwwwvutsssssqmkjpx}~~~}}|{{zzyyxyyzzyz{|}||||}}~}||}}zwuvx|}|||}}|zyxxz{{{{|~|{zzzz{|{z{|zxwwxwxxyyyywusqonpruyz{{zz|}}}}{z}}{{zzywtrpqruvul`WX^fdZWU^mqrpwz|ytssoglhfsyvuz{|}}{xuvvyz}vt}|{yxxz{|ymgimv}|wuzw}}vw||ndiroyxqlrz|hYpyyz}}zyyxuvvnmppooqssosyvsvwwxy|{z|}||||{{{zx}~}{xusqqqrsromqv{|}}{ywvwxxwusuxwttsuy|{wuvwxyz{}~~}|{~}zxwwvuuttssrstvxz|~~|zxx{}~~~~}}~~~~~|zzzz|~}zyyyyywuttuvyz||{zyxyxwtpnlkkllmlklptwzzzyzz{{{z{|}~}|zxvvttuuuuuwxwuttwzxqidgkorrrtvy|}{{|{xytplm{}{zzzzzz{zyyyyy{||{zywtonsyzyyyxyz{|||||~~|zyyyy{|}}ztlghoruvvuuqsz{smvwus|zwtsrrqpppruwwvvvwwwvutsssrtuvwwurkc]ZZYXWY]___]Y]lstwz{{sprstx{|||}~~}|{{{}~~{tlijnrsqqty{}~~|zyyxy{}~}}}~{yvuttssrrrrsuurommptwyzyyxuwyyyzzyxxwvvwz{{{{{{{z{{||}|}~~}}}~~~~}yyz|~~~~~}|{{{{ywwyyyxxxyvhchmsy{zzzyyyyz{||zwwvxz|~~}}~~}|||{zyxwvwxyzzyxxxwvuttttrld`akv|~~~}}|{{zzzyyyzzzzz{|}}}}}}}}||}~~zwuuwz}}|{|}}|zyxyzz{{{}|{zzz{{||{|}{wwxyxxxyyyywuusqqqsvy{{zyz{}~~~|{~}|{zzzyvsrrsvxxsg[WVZZXVYdnnjhqvzxvtssvxi`pusry{||{yxwutvx{~~|||{yxxzzyy|xqw{}xnixjswptx{zohoxx|zuqu{~}qhxzyz}{zyywwunqvupmnnjoz}{wuvy{}~|z{~}xvvyzyw{~~}|{xupnopqtrmkqw{}~}{ywvwxxwussuutssuxz{xwwxyzz{|~|yy|~|{{zzzyxwvwwwxyz{}~~}{yvz~~}||||}}}}{{yz{{zyvtsrtvxz|||zyyzxuromkkllmlkklosvyzyyyzz{{{{{{|}}}}|zxvwvvvvvutvwwvvvwwpkfimpqqqqsvy{}}~~z}{pc[Z`w}{zzz{{|}|yxxxxy{{{zzzwplovyyyyxyz{|}}|{{|||{{{{yzz{zvplpsyz{zyvpagztisxtr|~{zyxurolllptuvvwwxwvusssrqrstuuvuqi`ZWVVZ]``__^^isuppy{xqpsuwz{zyz{}~~}|||}~~}yslilqtusqsw{~~}}{zz|}~|}}ywssttttsrrrtutqnmmptwz|{{yqxzyxxxwwvuttuwxxxyyzyyy{||}}~}||{|}}{{{}}{zz{}}|}||{{|}|zxwxwwvuvxumhnsvyyyyyxxxyz||}|||}{{z|~~~}}|{zyxwvwy{|{zyyxxxwvvwxxunedlv{~~~}}|{{zzzyyzzzzzz{|}}~}}}|{{|}~}yxvuuwz~}zyz|~}{yyzzzzz{}}|zzz{{|}|}~xqry{zyxyyyxxwwvuuuwz{|{yxxz|~~~}}~~~}||{{zyvtstw{|{ti_WRRSU]ceffgosvwwulp~fYlwvv{|{{vuuvuttvxv{zw{{zxusqnhosotz~zo]qfr|ypowupwsqx{{}}zwy{z|ztyywx~~|yxxz|{ywsljjnmmjq|~xrtz~}yxzukjptwxwuy{{{{zwukdhlpusonty}~~}{yvvwyyxwwvsrstuvxyzyyyxxxyyz|xrigoy~~}||||{{{||}~}|zx{~~~}}|}~~~~~~|zz{}}{zxvuttvxyz{{yxyzzvqomllllmmllmoruxzyyyyz{{{zzzxxyz{{zxwxxxywvuuvwwvuuvupnjloqrqppqty{}~~~}vh[VYaw~|zyzz{{|~}yxwwxyz{{{||{wropsvxxyzz{}~}}{zz|}}}}{yxyyxursx{|wo`g{qmwxwt{~}{xsoljilrtvwwwwvuttutsrrsttuwwvof\\VST[aba`__eqyyrrz|wwxy{}~}xvwz|}~~}|||}~~~~~zuolnsvxustw{~}|{z|}|}|zxvvwwwussrqstsqonnqtw{}~}|t{{zxvuutsrqrstvuvvxxxxxyz{|~~~~|{{zxwxzzxxxy}}}|{{}|||}}||~~}|zxwuuvwusptwxxxxxxxxwxyzz{{{{{wtsstuttx~~~~~~}{zyxwwyz}~~}{zyxxxxyz{|}xsoqw{~~~}}|{{zzzzzzyyyz{||~~~~}}|{z|}}zxvutvz}}zxx{}{zzzyyz{|~~|zzzz{|||}{pdguzzyyyyyxxxxxxyy{}}|zwvvxz|}}}}~~~~~}|||{zxvttx{}}|wnaURQSZ_bhoptuuuvvnuxfYk{|wstw{spquxxxtsrtw}}{ywvtocfhbbkv}~~}{kyvx{yvvxlsssuvv{}x|}y{}xxtqsz{|{xsqtvwwy~r]Ykssrrw~ytx}~|ytod\\blsuwvtvuwx{xspf_bkosrruy|}~}|ywuvwyyxwvusstuvxyzzzyxwvvwxwvrjZU[b~~~~~~~}}~~~~}~~}|||{{|}~~~}}{zz{|{zyxwvvvwxyzzzz{|{vqnmmmmmnnooptvwyzzyyyz{|}}{ywutuvvvuuvxyzywuvwwvvusuuromnqrsroopsx{}}}|pbZZ]iy}{yxyz{{||zwwvvxyy{{{||{yuqoptvxy{{|}{{{zz|~~{ywwwvvwy|ysqw~zssvvvvx|~|zupljjkpuwwvvuuuuwwvvuuuuuwxyxupi]RQ\\cc_`aaht{}{{}}{|}}~}wtux{|}~~~}|{{|}}}}~|xsoquxzxvuwz}}{z{}||||zyvsrrqrsrrqppqtw{~~|}{xutsrqpoprsuuuvwwxxxxyz|~~}|{yvqqsuwxxy{{{{{|||||}}}}~~zvuwwxwvtwxxwwwwxxxwwxyyyyxwvutsronmknw~~~~~~~~~}{zyxwxz{~}{zxxyz{||||xvvwz}~~~}~}||{{{{{zyxy{|}~~}}}|{|~}|xvvwz}~~{yx{~~{{|{{{}~~|yxyyyz{zzqa_\\myyyyyyyxxxyz{|}}~}|yussvyz|}}}~~~~~}}||{zxuux|~~~~{qaVRSVZaluzxwvvwwxyvrhfqyxncciuqlpvxxxsrqiiz~{xx{yxvwvrqrvz|~~~{}|{{|}}{rsrvptwz}}y|~}{xsqqsux{zrgjpnnprwtijtzzxvx{}~|xz~~}|zwrjcbfkmuyywncoxzuh]fmlnprqtz}~~}|{xuuuvxyxwutrsuwxxyzzywvvutvwukbbcadd~}}}}}}~~~~|zyz}}|{yyyyz{|}~~}}}~~yvz{{{{zyyyyyyzyy{|{wrnmnnnooqstwyzzz{zyyyyxx{{zywtrpqqrrrsvyzywvwwwvutrstqonpstutmlmsx|}~~xj`^`cpz}zxwxzz{|ysqvuuxzz{{||{{{yvqopqvy|}}}umrxz{|~{xvvvwxz|}~{xy||yxywvvvw|}{wsponnrvwvtsstuvyyyxwwwvwxz{zzxwhUPZcc]_bckt{~~~ztqty{|}}}}||{{{||||||}}{yurrvy{ywvwz|~}}~}~~}|yvtrqpqrrrqqprtvz~}{xtrollknqtuuvvwwxxxyyyz|~~~}{zxuuwwyzz{zzzyzzz{{{|}}}~~}xwxxyxwwxyyxxxxxxwvvwxxxwwvvxz{{yurmmr}~}}}}~~~~~~{zxwwyz|~}|zyyz{{|||{yxy{|}~~~}}}}}|||||{yyz{~~}}|||}|zyy{|~}{{|~}zyzzz|~|ywwwwxyyui\\b_lyyxyyzyxwxy|}~~}}|zwtrsvxz{|}}~~~~~~}|{zwvx{}}}~|yrg\\UUXboy}}zxwwuqkd_Ydtog`YYYeigoxyxxuvxpjy~|zyy{vsy}}{yxy{|~~}~zplpox||{{zzzzyxvssvwvy{yljleipuvxzxz|~~{vrruwzzy{|zywvspoqqnosrrvldpvyucXiurrrrpv}~}{yvtstuwwxustwyyyyxxyzzwtuvwxzxpjjmotp~}}}}}}}}~~~}yvtsu{}{zxwwwvwxz}~~}}}~}{|{{|||}|{zyyyyyyzzwtpoppppqswy|~}}{zzzyzxwvwxwvurqonooppptxzyxwxxwvtsrssqpqtvwwtlikqx}~~~~||}}~}shceghtz}~zxwwxy|}xpknruxzz|{{zwxz{zwroouy|wgk{||~~zwuuvxz|}}}~}zzzyzyz||zxwwy}~|xtrqqrtuutsrrtvxz{zxwvwwxyz{{zz{q_SWbd\\]cfmtz|}~}ytsvz{|||||{{{{||{{{zxwwwvurrvyzxwvvy|~|z{{}}||yusrqqrrqqqqqrtvz~~|xsojegkosuwwxxxxyyyyzz|~~||{|~~~|{zzz{{zz{{zzzyxxyzyz{|}}}}~}zzyyxwxyzyyyxxxwvttwwxwvvvwz}~zsppty}~~}}}}}}}}}}}{zxwvxz{~~~}}|{zz{{{{{{zzz{}~}~~~}}}}}}}}}}|zzz|~~~~}||||||~}{{||}~~~}}~|zxxwx{}}zwvvvvxwtmjnntyyyyyyyxwwy|~~}||{yvttuvyz{|}}~~~~~~}|{xxy{|{||yrmleYUYamv|}}{zyvpjg^Q^p`WVX[TW]frtmhinpqqp{}|{|}yvy|~}|||}}~~~~~~~}}}ongu|}|zzzywussuvxz|yz{wktrdq{~~}}}~{qgcgjmtxyyvtttuuvxyxvsrqjhqvstqebpuquuvw{}{ywuutsstvwvsvz|{zyyyxy}~|zz{{{{{||yyzu~}|{{||}~~}|ywtrqu|~~|zxwvuttux{}~~}}}}}}{zzyy{}}{zyxxyz{yxvuttsrrsvz|~}|zz{zyxwxxxtpnoooonopopty{zxxyxwvtrrturqtyzyxumjjpv|~~}|||zz{{}}|pkklmlsvz}|ywvvwz|{tmkqwyz{||zuopw{|zvqquy|{wv}{|}}yvuuvy{|}|{|}|zyyzz{{|~}{zzz|~}{xutstutsrrrtuuwxzzyxwvvvwyz{{z{{yn\\V`f[Zbkrw~~}zxxz{|{{{{{{z{|||{{zyurpqqqqrtxzyxxwy|~~}{uuwzzyywtsrqrrrqqqqqrsuy}~}{vrkehosvxxyyyyyzyyz|}|zxyz|~~{zzzzzzz{zzzyxwwyyyyyz{||||}{zyxxxyyyyyxwwvustxzzxwvvwy{~~zvtquz|}~~~~~~~~~~}}}}}}~~}}|zyxxxxy{|}}|}||{{{{{{{{z{{}~~}}}}}|}}}}~~}}}{{{}}~~}}}||||||}~}}}}}~~}|{zz|~~}ywvuuuutstvwxyzzzzyyyxyz}~~}|{ywvuvvwyz{|}}}}~~~}||{yxz{|{zxwrjb[WUX`kty}}}}|zunkjWYeWQSW[VW[gnh[_jrsivx{|{|}{}{y{|}}}~~}}|}}||}}~zsu{|vqq|~~~}zy{zxwwwy{}~yyyvpyxpy|}}{{||~|tfXV^gintxwtppsuvwyyuplpn]fxuroljnxvsvwxy|}}}{xvtuwwvuuwxuqruxz{zyyyy|~~|{|zutv~ywvw~~~~~}{{{{|}}|zywussux{|~}{zwutrrsuy|~}{yxwwy}~|zywxz{{zxvxyxutstx{}~}|{{zzyyyzzxsomnnopppqqquz|{{zzzywtssvvttx||zxvnikou{~~}{zzzzz{{}}}qnpvnrsrwy}~zwvuwyz|wtsuwyzzzxsnilu{}}zvtvy||||{zz|}}}{yvuuwy{|}|{z{{{{zzz|~~}}|||}|zxvuuuusqprtvvvvvwwvvuttuvxyz{{{||xk[`g\\Yanuy~~|yzy{{{{{{{{{{|||{{{zxtroopooptv{{{zxy}~{zz{yvuwxwwwvsrqqrssrrqqqrsux}~~~~~}{wokmswyyzzzzzyzyy{}{ywwx{z|}zyyyxwxyzyxwvtuvyzzyyyz{{|{~~|{yxxxyyyxxxvutttv{|zxwwvwx{|}yttx{{||}||}}}}}}}}||}}}}}}|zzyxxyzz||||}}}|{{{{{zz{{||}}}|}}||}}}}}~}}}|||}}}|||{zz{|{{}~~~~~~~~~}|}~~{vsuxuutstwzzzzzzzzyyzz{}~~}|zxwwvwwxyz{{|}}}}~~}}|{zyyy{{{zvtrg\\WXX[aepy|}~}}|xqjkfc]TRTY\\_`^Y`kmsx{zwxyzzy|}||zzz{|}~~||{|{{{||}|{|{zxuy~|wy}~|{yy{}}{ywvz{{{}||{{z{~}ypa^\\dhjnsvtqnoruvwxwtpllfboyurolosxvuwwwwuy{zzvttuxywvuz}tmmpswzyxyzyxxz|{|zsigptrppt~~~~~}}~}{zz{|}~}|{zywvvwy{~~}zxurppquz~|zxwvx{}}zxxy{}|zwwz|{xwvwy|}}~}|{{{zyyyzzyxsnllmoqrrrppu{}}}||{zxustz|zz~zxwrllpu|~}}{yyyyzz{{}|ynlr{rzsotwz}~{zyzzz{zwvwxxuponkjimv{~~|zyxz}}{||{zz|}}{zxwvvwy{||{{zzz{|||}~~}|{||{zyxwwvusqrtwvutsssssssssuvxyz{{||{{xe_kfZ_v}{~~}zyyzzzzzz{{{{{{{zzyxxzxtpooonnrtz~}z{~~{vtxxxxyyyyxwtrqqrssrrrqqrsux|~~{vstwzz{{zzzzyyyy{~zyxxxzxx}~{wwwxxvuwyxvsrqsx{{zzzyxyz|x~}{yxwwxxyxxwtsrs{}{ywwwwwz||zxxyyyyz{|||}}}}}}}}}}}}}}||{{{zz{{{{{|}}}||{{zzz{{{{{{{{{{{|||}}}}}}}}|||}||{||{zzzzz{~~~~~{tuwvvutqooxzz{{{zzyyzz{|}}|{yxwxxxxyz{{{|}~}}}~~~|||{zzyyyzz{ysqsnhimmosw|{{}}}}{ywtsqpiffiorvsnely||~{xttyv|}}{ywwyz{}}}||{{zz{|~~}ywtvx}zrrz~|ywwy~}{z|~~~}|{{zxw|{voqvooooruuolopstuvvtstvvomxyttqqwvvvvxxtnmrvwvtstvyz{zwutquwsqtxyxwxtqpruwyzumluyumhj~~~~~}}~|{{{|}~~~~}}}|{{zz{|~~zwurppsw{~}{zzzz||zxxz|~}zwvz}|zxwxz|||||{{|{zyxyzzyxsnlkkloprrpquz|{{|||zxvvx}~}||xxyvonrw}~}}|{zxyzz{{{|}{unpw~ztpsvy{~~}~~}|{yxyyyrf`dhimtz|~~}|{zz}}||||||}}}{yxxwwxz{zzz{{|{|~~~}{xwwy{{|||zywutsuwwtrpoopppprsuvwxyzz{||{|{pakq_`u~|~~}|xwxxyyyyyyzz{{yz||wuw{|xtrqpnmprx~}~~~}wtvwxyz{{{zyvsqqrrrrqrrrrstw{~~}yxxy{{{{zzyyxwwx|zyxxxyyyz~zvtstwxvuvyxvsqpruyz{zzzyxx|w|~}{yyxxxwyxxwtsst}~{xxxxwxz{~|zyyyyyz{|||}}}}}}}}}}}}}}||{||||||||||}}}||{{{{{|{{{zzz{{{{{|||||||||||||}|{{|~|{zzzz{~~}||}}}~~~~}~~~~|zwvvvurojwy{|{{{zyyzz{|}}|zyyxyyyyz{{{{{|}}||}}}|||{{zzzzzz{{xuwxx{|{z|||}||}|{zy{|~yxwwy|~zy||z|zxyxr{|snruxxz|~~}}}|{{z{|}|||{ywvttz{qqwz|}xsv}}|}}~}|{{zzxvxxvt{|qpptwunikrturnnmkpuy|yvyvvvtszxvuwyyslkptvvtstwyz{{yqkoy|xusvxyxvronoruy{zyy|~yi^]~~~}}}}~~~~~~~~}}}~}{yvsqsvz||||}~~~}|{{|zxy{|~|ywwyzzyxxyz{{{{zzz{{zyxyz{zxsnjkkloqssqrtxywxz{|{ywxyzyz{|{xtv{zpnu{}}}|}~|zzzyz{||||||{tw}~~xtuvwy{~~~~|{z{zzuh]_dhr{~~~~}}}||}}||}~~}~~}|{zyyyyzyvwy{|~||~ywtvxvvy~{xwvvxyupmllmmnnpruwwxyyzzz{|{|zvjnyfcv||}~~|zwwwwxxxwxxxyyzyzyvw{|zwutrooqrux{~~~}}zvuuwxzz{{{zwtrqrrrrrssssstvy}~~|{{{{{zzyyxwvvwy~zywxxz||z|}~~~wrqprwyxvwywvtrppptxzy{zzzy}|{~~~~}{zyxxxwxxwvtttv}~|zwxxxzz{|~~}|zyyyyz{{|||}}}}}}}}}}}~}}}|{{|}}}}|||||||{{{{{{|||{{z{{{|||||||{{{{{zyyyz{{{{}}{zz{{{}~}{xwy{|}~~~}||}~ogltwwvtpwz|||{{zyyyzz{}~|zzzzz{z{{{{{zzz{{{{{{||||||{{{zzzz{|{ywuvsqquwzzz{}}|yttzxx{{}{{z{xvx{{yy}~~~xr{}potxyxz|~~~~}}}}|{{||}||}~}|zxrw}}zwvuwz|}|ww}}}|z{zzzzyyxvwxxwzwnpswxumlqvvpf^]YYiwyzyvtpttuuzxwvvxxvpnrstsssuwxyxwytnrrsvwutuuuuuuutuwz{|{tpprkee~~~~~}|zwuvx||yvrv}~~~~~}}}||{zz{||}ywxyxxwwxz{zzzyyyz{zzywyz{{ytpmlnpsuvurrruvuvxz}|{xyywuwyzwuru{zrpx|}~~}|{{}}}|zyyyz{|}|}}|yt~{yyxwwxy|}}~~}}~~|zy{zzxrdacmy~}}}}}|}|}~~~~|{{{{zxwrsx|~||~|xwuvvsuw~{yxyzzytmjjjllmnqsvxyyyyzzzzzz{zytuzpmx||}~~|{zxwvvwwwvwwwwxxxz}~yxxy{{xwutqqssror|~}|}{tttuwyz{{{{yvtrsssrrstssstux|}~~~~~{zyxyzyxvtuw~~}ywwwy{{{{|}}}~~|upoprx{zxxxwvusqonqvwy|{|}y|~~~}|{{{yxwwwvvvvvwxy|}}{zvpox|}}|}~}|{zyyyz{|||||}}|||}}|}~~~~}}|||}}}}}||{{zzzyzz{{|||{z{|||}}|||||{{zzyxwutsuwxy{}{yy{|}|}~}|zwwxz~~~~~||{}va[mwx{zwy{{||{{zzyyyyy{}|{{{|||||||{{yxxyyyzzzz{{|||||{ww{ywy|zuokmompszwy{}~~{vty|tty{|zwxyursvyz{}~}~~~}}|sqw|xxy{{||}~{|~||}}}||~qlvwyzxqw{vwz{}}}{}~}|{xxxyyxxyywwyzzyuprtwyxpswythXPMHLeyzzyvrptvxxyyxxxxwwsputpqrsuvwwwwwvrqquvvsqmjjnpqvy}~~wqqlghqtuu~~~~~~}}}}|{zzzzyvspsz|}}~~}~}}|||{}{z|ywxyxwuvx{|{zyxxxyyyxxxy{||zvsrsuvxyxvsqqrsstvy|||zxvwvwxwutqtz{tx{|~~}||zz|||{zyxyy{|}|}}{xr}{{yvtssvxyyywx{||zy{zzzyshcv~~~~~|}~}}}}{zwuqtz|{||~~}zyyxwvsrrtx}}{zyy{||ytlhhjlnoprtvxyyyyzzzzyyzzzyzzwwz{||}~~}{ywstuuvvvvvvvvvwwwxxxwwx{{ywuussvvvppy~~zrstuvyzzz{{zxvttttssstttttuwz|~~~{yxwy|zwustw|x|zwvvvvy{|}}}}}}~}}~ztqpqty{zyyxwvuspnmotwz}{|x|~~|zz{{zywwvutuvyz{||||{|ypmy~~}~~}}||{{zz{{|||||||||}}||}}}}}|}}}}}}}}||{{yxxxwxxyy{||{{{|}}~~}|||{zzyyxvtrojjnprtvvuv{}~}}||}~}|zyzz{~}~}|{}|aWiwy|}{zz{{{{{{zyyyxwy{||||}}}|||||zxwvvwwyyyzz{{||}~~slttjgpywrmptpru|z{}~}z}{rrwz|{zzzwrprw|}|||}|{zxz|{tqoqvxz}|yrt~|~|{|}~~|yse]lzzyxw~zwyz{{{y{||zyxxyzzzzzyxxyzz|ulnuxzxrvzyq`QKGAHdyzz{yvuxz{{zyyyywusruzytqpstuutsrttqnnsuutoifgjlnrrvxwploolovz{{~}}}}~~}}}~~|}~~}~~~}|{wtuy|}~~~}}|}}}||yxzywxyxvsux|}||zxwxyzyxwxz{}}|zwxz{|{zywtqpoqstvx{|}{ywwzywvtsrtz~{}z|~}||{{z{{{zyxwxyz{||}}zxq}|z{zupnnpqttssuy{{yyzz{{|}sh{|}}}||{zwurw}|{xwy}~~~~~}{yxyxxvspoopw{yzzz{}}|ztmhhjnprstuvvwxyyzzyyxyzz{z{{zzz{{{|}~~|{xusuvvuuuuuuvvvuvvwwvvvwzzywuuttwx{zwywuuuuvxyzz{{{ywvuutsssssssstuxy~ywww{~|vtrsw|{wuzywvvuwz}}~~~~~}|{zywsrrsvy{zyyxwvtsqooqux{}||z~~}{{||{zxxwuuvwz||||||}}|wv{}}}~}}~}|{{||||}}}}}}}}~}|||}~}}}}~~}|{zyyxwvuuuuvwxyz{{{{|}}}}}|{{{zyyyxvtqnggjnpqrsrry}}|{{{}~~}{{{{|~}{|~~}{{xhhqyz}}{{zz{{{{{zyyyxxz{}}}}|}}|||}}zwuttuuxzzzzz{{||pfqwohkooppv{yz|~|}~~~~~~~{truz~~}||zxtv}|xxyzyywvvxz~vljvx{~tu|x|}|{{}~zrsqspuz{zz{{xyyzvstw{}}|yxz{{{|{{zzyxxyzyoiijpwwrvzynZONIAIfxxxz|{z{|||{zzzyvrosxvrqqqttsqmkkprsqprtvwtpmkmpqodgpoptwutwzzxv}|{{{}~~~~|{xxy{~}}~}~|vsvz}~~}}||}~}}|ywxxwwyxwtux{}}|{zyxz{yxwxzz{||{{{|}|{zxwtrppqsuvvy{||{zz|yvtstsv}zy|}{z|{zzzzyywwvwxyzz{||{zs|zyzzunkkjknoqruxz{zzzz{}}}v}}~}zz{{{zxwvy}}{wtvy{|}~~~~||{{{zwupnnnvzz{|{||{ywtlhikprtuwwvuvxyzzyxxxyz{{z{{|{{{{zz{|}~~}|zywvxywuuuuvvvvvutuuvuuvvwxxxuuuuuwz||{~xyxwwwxyz{{{{zxwvvutssrsssrrtuv~~wvwy}~wtrsvxwsryxvuvwz}}~~|{{xusstuwyyxxwvvuttrprtwy{}|}{|wwx|~}|{|~}{yxwvvwx||||||||||||}}}~}z}~}|||}}}}}}}}}}~~}}}}}|{{yyxyyxwvvvvuuutttttuvwxz{z{||||||{zzzyyyyxwuspmnprsrqqppw{~}|{zz|}~~}}~~}|||||{xy~~}zxvt}|}{}~|{zzz{{{zyyyyxyz|}}}|{{|{{{|{xtsstuvy{{z{z{{{|~}qkw~~ysfbgnx}~~~~~~~~~xuv{|y{yzxy}|yy|}~}zz{{yz}{z{}|~~~wlxywy{{teps|{{zyxv|}x{|zzxuvy|~}}||}}}||||{zyxxxxuhekiqzwqv}|lVPRMDLgvuux{{zz{|||||{ywutuui[[hquuroighoquyxvwxyxurppqsunqrpt{xwyz{zrh}{{||~~}|{xusux|~~}}}xtuw{}}}|{|}~}||zyyxwxxwwuuwz}}}}{{z{zyxwxyyz{{||}}||{yxvusssstvvvxy{{zyyyvtrstuzrw|~}~}{z{zyvrrtuvwxyz{{|{{x}zxzzvojikklklptx||zz{{}~}{utwz{{zyz|}}}}|zwvvvwz|}~~}}|}}}{zxvvvx{|~~|wuvurliimqsuwxxwvuwxyyyxxyyyzzz{|{{zzzzyzz||||{zyxwyyvutuuvvvuuttttuuuuuutuxuvvvvvx|}z{~yzyxxxxyz{{{{{zywvtsrrqrrrrrrsv}xx{~xtstuvvrqwzwuuwyzz{{~~}}}{wvuvvvwvvvuuutttrptxxxz{z{ywtsw{}}|y|}zxxwxy{|{{{{{{{{{||}~~}||{xtpu|}~}}}~~~~~~~~~~~}zywurpononnoqrtuvvuuutttttttuvwxyyz{{{{{{zyyyyyyyxxwuuttuutrqpopvx||{zzz{|~|{}~~}}}}|{zz~~|yxv{||}}|zzyz{{zyyyyxxyz{|||{zzyyzyyxtrstuwy{||{|{{{{|~|vns{|xqigmu|~}}~~}~~~~yw|~yw{wtz|~}}~~}{{yv{{}zz{}utz|yx}yuvxvvy}}~|{{{zyxyzz~{zy{{||~~~~||~~||{yyxyyukhmkpvsrx~mRQRMERmvvwy{{yz{|}||}|zyvwvsiRLZszutplkmuvwzzzzzzzxvurqpoqtssuxwy{{|{pZ~~|zvssvy}~~|{|~|xtruz}||{||||{{{{zxwwwvvuuvy|~~~}}}{vuvxxxxyz{|}}}|{yxvvvvvvwwvvwxyywusqnnotwx|~swtwy{||{{zxrgiotvwxyz{||||{~zxzzupmlqvwsstvz}{{|}~{||z{{|||srvz||||||~~}{zzyxwwuuxz|~~~~~|{|~ulptspljjnrtvxxxxxwwwwxxxxyyyzzz{{{{{{{zyyyzzzzyyxxwvvuuuuvwvvutsssstuuuutpqxwwwvutuwyxx{~{zxwxxyz{{{{zzyxvtsrqpqrrrrrrv~~}{{~zutttuvsqu{uvuuwyvtuz~}}||{yzxvsrsuuutttsssrpuzxwyyxwxsqrux{~|{z|~zxxyz{|{{{{zzzzzzz{|}}|{ypf`boz~~~~~~~~~~~~~~|wpmifcdfilmpsuvxzyxwvvvuuuuuuuuvuvwxyyyyyyzzzzzzzzyyxwwwwwvurqppqtwz{{zyz||}~~~{y|~~}}}}}|||}~~~~}{zz{y|}}|{zyzzzzyxxxwwxyz{zyyyxwwxwvtstvwxzzzz{{{{{{{|~{rkrtrrsvx}~~~}~~~~~~}~}ws{{{{}~~|ztz~~~}pbgiekv{}~~{xwwux|~}|{{}}~|zy{~{yxyz}}}~~||{zyyyyvpnqmehhu~oNJLFEYsyyz||zxz{|}}}~}|{yxtqkSISkyxwvsrsyzyzz{{zzzyyxvronsxxvuvwz{z{|zh~~}{vstwy{}~~|yxz|~{urty||{zzzzyyy{||zxwvvuuuvx|~~~~|zwrqtyyyxyy{{{||}{zxwwxyzyyyxxwwwxvsnlkmt|~~vtklmosuwxwupbajrwyzz{|}~}||~ywyxropsw|~yussw{||{|~}zyxvwxxwwux{z||||}}~}|xwwxwwwuuwz{}~~~~|}nhnrqolkkosuwxxxyyxwwvwxxyzzzzzz{{z{{{|{zyyxxxxxwwwxxwuutwwxuwxuttsstuuttsonx{yxvustuwwvw|~{ywwwxxyz{{{zzzxvtsrqppqrrrrqt{~~}}}wvuuuvtruxtwwwyzwvw{~|{{{zz|zwsoptuutttsrsqquyxwwxwusppswy}~|z{}{yyz{||{{{{zyyyyyz{}~~~}|qfadoz~~~}}}}~~~|vkd`^]`ekptwz{||}}|yxxxxwwwvvuuuutuuvwwwwxyzzzzzzzzyzzyyyyyxvtsrrsuvxyzzyyz{}}}}||}{wz~~~~~}|||}}}}}~~~~~}}~~|wqt{}}|{{zzzzzyxxwwvvxyyxvvwwvvvvutuxzyywvtvyz{{{{z|~|sfinorwzz{}}~~~~}|{vx|~xqxz}xw|~~~~~~~}{wz}}x`QTQ_ltz}~~}|~}{yzzy{~~}{{|}|{|yzzyywxzz{xw{~~~}}{{{zzyyywuuwpd]d{sYKHGQgxyxxyzzyz{}}}|}}}{yvrolWNTbuxxzyxxzzzzyy{{zzz{zxutux{yvtvx{{zz{~{zvvvvxy|~~}{xwvy||yvux{{{{ywvusuy{{zyxwwvvwwy{}~~~|{xurpquxxyzyzz{{{|{zyxyz{||{{{zxwwxwtomlryzskfdehjllmnplggkqz{{}~~}~yvvurqqtxz{somlpu{}|}{y{zyyyyxz~{z{||||}~}{wtttvwxwwxz{}}}}~~~~~}|{~qqrqpnllmptvwwxxxyxwwwwwxyzzzzzzz{zz{{||{zzxwwvwxxxxxwuuuxyyxzzuttttuutsrrqov{yxwvttuvvuuy{~{yxwwxxyz{{zzzzywutsqppqqrrrrsz~~}}}~utvvvvuuvyxwyz{|}}|}~~}|zzzyyzyxwqqsttttssrrqruwwvvwxvqpsvzx{}~{y{||}|zzz{||{{{{zyyyyyz{|~{vsrv~~}}}}}}~~{qc][\\_gpvz}~~~~|{{zzyxxvvuuutttttuvwwwxzz{{{{{{zzz{{zzzywutttvvwwxyyyxzz||{zyz||vx}~~~~}||}}}}}}}}}}}|}}}}~}odhrz|||||{{{{{zyyxwwwxyywuuvvuvwwwwxyzxwvtrquy{zzzz{}}{umjopruwxz{{{{||~~|{yxtot{~~zy}|}zy{~~}}|{{|}~~|zz{}|{rWAGPmqsy}~}{|{xz}zwy~~}|{}}||x{}yxwtpfenuz~|||||{{zxyyxxywpgo}|rh[V[lxzywvwyzzz|}|{{{|{ywurkkZRUatuyz{{zzyyxwx|{zxyzzywvwy{xrvxz}}{{}~{xvuwvux|}{yvuwz}zwuvxz{|zxuusuy{zzyyxwwwxwwz|}~}zxvtrpqtxyzzzz{{{{{zzyyz{|}|||{zyxxyxupnrw}|unkigghgfeipsnf`dqx{~~~yuutssrsz}xpppptz|||}{z{|}~~{z{||{{{{|}}}{wtrruwyyz{||}}}}}~~}{zzzyy{|tzvqoonnoruuvwvwwxwwwvvwxy{{zzzzzz{{||}}||{zyyxxxyxxxvuuvwx{|~|vrrtuutsrqqrquxyzywwvttvuuwx|~{{{}~|zyxwwwxyzzzzzzzzxtsrrpppqqrrrs{~~|x{zjouuwxwwxz{z{|~~|{zyyxxwwwwxusqsssrrqqrruvutuxzystxz|yxwyzxy{{|||z{{|||{{{{zzyyyz{||~}}{|}~~}~}}}}}}~~{qb[[airy}~~~~~|zyvvuuuuuuvuvwwwxyzzzzzzz|{{zxwuuuvvuuuvwwwwwwxxwyz{{yxwwyyvwz~~~~}||}~}}}}}|||{{|}}~~{niovyz{|}}|{{||{{zyxxxzzzywvvuvvwxzzyyxxwvvtruy{yyyz{||zwtprssttuxyyyxw{}|}~~~}{yzyxvwz}|{{}~~}{|}}}}}}|{||~~{zz{||}{iPR_osty}~}zyywuw|wuz~||~}|}}}yyxxxvrhekqw}{}~||{|{zzyyzzywtx{ylefefmttrxzwwy{zz{|{{{{zywttrli^QYdrwyyz{zzywvvx||vnlrz|yxw|~yuz||}~}|}~|yvvz{|~}zyxwx|}{xuuvy{}}{wwvy}|zzzyyyyxwvvx|}~}yusrrrsuxyzzzz{{zzyyzzzz{||||||{zyyzytqpv}~wrpnllkkjgkrwzrdafqz~~~{wutuutryvqmmpruyz{|}~~}}~}{z{|{{}~}|{{{{|}}~}|xsruxy{{|}}}~~~~~~}{wuvvtw}}|~xrppqqstuuuuuvvvvvvvvwxz{{{zyyyyz{||}}}||{zyyyyyyxxwuvwyzwrruvvtsqpppruvw{|z{xusuuvxy{}~~}wvxyz{zywwwwyyyyyzzzzxtsrrpppppqrrt|~|uu}udjtuxzyz{~~}}~~}}}||{zyxwwuuvw|ztrsssrrqrsstutsux{zvy{|~}zxvvvxyz||{{{||||{{zzzzzzzz{||~{wwxy{~~~}}}}}~{oa\\`jtz~|zwvvuuuuuwwvwxxzzyyyyyyy{{zwsnlmoqsuuuvwwwwwwwwwyyzxvutuvvvvy|}}||~~}|}}}~}}~}|{zzyz|}~}|xw{|{xyz|~}|||}}}||{zzz{{|{ywvvvvvx{{zyyyxwwwvxyzyyyyz{{zxwvvuuuttwxxxy{~|y{|}~}}||}|{yxy{{{}~}}}}}}~~~~~}{z{|{vw|wtqoqsuy||zwwzzxv{|~~~}~}|{zreccnuz{zysoprw|}zy}~{{{}~}{zyzzyzz}raaimoqpliqzyxz{{{||{||{yvussttneVbksxwuuwxxxvttvzzxtmdluwtw|}|yz|}~~zuw}~|zyxxz}~|ywuuwz}}zxw||zyzz{{{ywutwz|}{xsqqstuuwwxxxyzzywvxz{{zzz{zzz{{zyzzwsptzxusqpooppnouzsibisy|~~~~|xustvzzyuqqmnqqrvyz{{{zxxz|~~~|{{}~}|||}}|{{{{||{{|~~{urtwxy{|}}~~~~~}zvtrrqw~|tqqqstuvuuutttuuuvvvvwxzz{{{zyxxyyz{||}}|{zzyzzyxwxwwy{~zutvvvtsqppqsuutvz~|wtrty}~|{z|||zvvwwxxyyyyzz{yvutsqqqqppqsv~}}}y~{m\\eqvy{{|}~~}~~|{yz{{|{zyyxwuuvy|{wttttssrrssttrsuxzzx{||}~}zwvvvy{{{{|}|||{zyyy{{zzz{{|~|||||~~}}|}~{j``ju{~}zwvvvvvuuvvvwxyyyxxxxxxxzzxslghijmruvvwwwwwwwwxxxxxvsqqsuuuvxyzzyz|}||}}~~~~~~}{yxxy{}{yty}zy|}~~}||}}}~}|{{{{{{{zxwvvuuxzzyyzzyxxyyyyyyyzzzz{{yxxxwvvvvxxyy{|ztvy{}~~}{{|~~~}}}}}~~~}|}|z{}}{uv||{ywuuwzyyxts|}wy~}~~zz{|ynjstovz|{zytsux{wst{|yy{}}yxyyxz{~xpnrstusmggu}{z{{|}|{zzywtsrtwyvpbmquwsonqtwwvtrsvwy{r_Y^fkryxwywwz{|}}~~}urv|~|{zyvvz~}{xvuux{~~|ywxzyxyz{{||{yxwwy{}{vrpqtuuuttttuvxxvtuy{}{zyyyxxxyzzz{zwtsx~}yvutsrqpppquy~rdbgnx}~~~~|xtrsopxyzzxtx|{xy{zyxvttux{~~~}}~~~|z|||}}}}||}~}|xvx{{zvusuxyz||}~~{xvsppzzsppqtvvvuvwwttuuvwvvvwwyy{{{zxxwwxyyy{|||{zzz{{yxwwvz|wuvvusrpppsvwxsryzvrw~~{{{|zwwvwvwxxxxyz|}~}|yrrrrqqqsw~~~~xqu{n]dv||}}|}}}}||}}||{yxwyzzzyyyzyxwwxz||zwvuuttsstttsrsuwyxyzzz{|}}{ywutvzzzz|}~}}|}{z{{{{zzz{|~~}}}~~}||}zgbkv}}{zwwwxwwvuvvuvwxxxxwwwvwxyzxrjfhgiotwxwwwwwwwwwxxxwvtpnoruuvvwy{yxxz|||}~~~~~~}|zxxyy{}|zy{}{{}~~}|{{||}~~}}||{zzzzxxwvuuwzyxwxyzyy{{zyxxyzyyzzzzyyyyxwwwxxyz{zzxstx{~~~}||}~~~}|}|{|}}|{}}zyyxyzzuxtr}|y{~x|~}~ysw|}|v{{xz|~{xxwwvxzwtv{ywxz|}~|zyyxuvtty||zwyyttxvpit~|||||}}|wuvuttuwy{{znqtwvrmlquwwvuuuuvwwtgRIVgrzxuwwvsoqz}~~~~|wtu|~}|zxuv{~~|ywutvy}}|zyxxxxxz{|}||{{zxy}|z{rpsuutqooprrrsrqqty|}|zzzywwwxyz{||yvu{|xwvwwtrpoppsu}~sfa_ap|~~~}~}{xsqrqrtvyzxx{~}{|{{{yxvvw{~~~~~}|wz~|}|||}}}~~{upswxxwwrvz{{{|}~~~~}zwtqr}|{vroquwwwxz|zxwvvwxwwvvwxyzzzzyxwwwwwwz|}|{zzz||yxwwu}yw}xvwwtqppqqtx|}zy{~{z|}zyzzywwwwvvwwwwwvz|{vuspqqqrv}~~~~wlmvxmpz}~~}|{{{{{{zzyxvvvyyyxxxxz{zzzz{||zywwwuuuuvvutttuvxwxyyxyyz{{xvusuxyyz{}|}{}{z{{{{zyz{}~~}}}~~~~~~~~~~~}}||{xfk{||zyyyxwwxxwvuuutuvwxxwwwwvwxy{zumffgmsvxxwwwwwwwwwxxxvvtpmnquvwwwyzyxxz{||}}~~~~~|{yyyyz|}~~}|}~}{||}}}|{{||}~~~}}|{zzyyyyxvuuwzzvros{z{||{yvwxyyxyyyyyyyyxxxxxxy{||}xtuy|}}}}~~|{{}~~~}~}}}}|}}}|}~~|{zyy{zyxwxyx~~~||}vytmrz}~}}~}{}~{wwxxwxzzxxzxvwxz{{yvuttsqkhnvyxvwtjlvyvsw~|||||}}vstttuwy{|{wrqtvwqknuvwxwwwvuuuxyr_J[nqtxxyxvoghruy|~~}}}~|{~~|yx{~~}{xutuvxzz{{zyyxyz|}~}|}}}{yz|}{rqtwvtpllnpqpqponqw|~}|||zxxxyz{|{{zyz~zwwwyyurppqqpn{xpgfd`kw~~~}}}}{xusssssuxxwwy{|yz}|yy{~~|}||{vy~|{{|}{rlotwxxysx~}|}}}}}~}zxux|}~}yspquwyz|~|zyxxyyxwwvwxxxyyzzyxxxwwwz}}|{{||}|zzyytdXZn|{|~zvzyuonpstuz~zvvwxxxwwwwvuvvwvrnr{xvvz~{wqrrrsv|wjbgv}~~~}{xyyyyyyxwvuvwzyxwwwx{}}|||}||zyxxxvvvvwxwvuuuvwwwwxxxxyyzxutrsuutx{|zzsx|z}{{{zzz|~~}}~~~}}}}}}}~~~~}}}||zqjw~~}ywwwxxwwxxwvuttuuuvwwxwwwwxyz|~yqigluwxxwwvvvwwwwwxxxvvtrpoquvwwvwwwwxyz{||}}~~~}{yxxyz{}~~~}}{||}}|{z{}}~~~~}}|{zzyyyyxwvvx{|yrin|{{|}|yvvwwxwvvwwxxyyyyxxxxy{}~~{wx{}}|||}}~~~}||~~zx||{ss}~}||~~|{{{|}~}}}ytv~}~upps|}}}}}~~}|{~{xxzzywyyzxwwwwxxyyxsqpqqohdjsvwxxpeityyz{}}|||{|~}xssrsuwz|}yngjpstoloyz{zz{{zwuuzyvncowsotwzyvofdjnu{~~}|{{|}~{{}~~~}{zxwutuvwyzzyyyy{|~}|}}~|zv{|vqquxwuqnmorsstronory~~~~}{zzz{||{zz{}}xvvwyyurpoquuu|zojgijihny~}}|{ywuutssvxyxxz{ytrw{}~}||~~||{{zyz~|zy{|~{rlmrw{zxw~~~}|||}~~}{yzzz|z}{tqrvxz|}~~|{zzzz{zxwvvwwwxxyzyxyyyxw{}|||}}}~}zy|}}unnu|}yxz|v}}wqotwvwz~|ywwvwwwxxwwuttuwwskjpmov}|urrrtw|yn\\Wblx~zyxxxxxwxwvvuvxzxwwwxx|~}}}|{zxxxxvuuwxyxxwvtuvwvvwxxyzzzywvtsrqqvz{yswfiw{}{{{zz{}~~~}}}~~~~~~}}}}}}}}}}}||zrs}~~~~|xvvwxxxwwwvuuuuvvvwwxxxxxxxyz|{skmtywvvvvvvvwxxxxxxwvvusrqrtvvvutuvwwxy{{|}~~~}{ywwxy{|}~}}}}}|{|{|~~~}}}||{zyyyyyxxxz|}}xnm{||}}|zvuuuvutttuvwxxyyyyxxy{|}}{wx{}~}||~}}}}}}|}}}}}}}||}~~}}||||}}~~~}~|}yz|||{{{{{yvx}~|zyyzzxvxzvttxwxxzywspooonhdhptvxwqjpwz|||}|||||{{{xutrrsvx{|wldhppooqtyyzzz{||yyy|{zyxzzvruy|{vncaiknv}~}}|{z{|~~~~}~~~~}||zxvtssuwyzyxxy{}~|||~|zwwwtqruxxvsqpruvvvutsqqw~~}||}~}{z{}|xuvvwwusqopvxvwqhghkoqgeu}|{{{yxxuttvyyyzz}|tlmvyy~~}~}{}{zzzy}|}~~~}|yxy{}|vomov|zw|~~||{z{|}~~{vsy~pzxx|ztrsvy{{{{{{{{{{{{{zxwvwvvwxyyyxyyzyx{||||}~~~|zz~x{}{{{yxz~|||ut{}yxz~~}zyxwwwxxxwuttuwy~ulmpv}|trsuy}~yh[ajy~~{vtxyzyyxwwvvvvvxyxwxxy{~~}}||{zxxxwtrqsuuuvwvutvwwwxxxyzzzzzywrlkovyytmudfl|}|{{zz{}}~~}}}~~~}}}}}}}}}}}|{y{~~}}~~{xwwwxxxwvuuuvwwwwwwxxyyyyyyyz{|ytlryxusrsttuvwxxxwwwvvvvutsstuvuuttvwxxyz{|}~~~|ywvwxy{}~~}}}||{{{||~~}|||||{{{zzzyyyzz{}}~~wq{}~~}|zwuuuuutssttuwxxyzyyxxy{{{{yy|~~~~~~}~~}|{{yxx|~}||~}}||}yuuy}~|||~~~}|}~{|~{y{{|{xu|}|{{{{zwwvvxxywyz{zwsqpoong]`mrrttqoruvwxz|||||}|zzyxwqmouwyyyuqpvrnpvxyxwwwyz{zzz|}||zxwvvy|}zqhgjhenx~}}}{zz{}~}}|{{{|~~}}}~~||zxvtsrsuwxxxxy{}~|{|}}{xvsqqrvxyxvtstvxwwvutsrx~~~}||||||}|xwvuvvvutrquvutlefhmswhat~|zxy{zywttuwyzz{}~}vkkvxy}{uz~}{|{zyzzzy}~}||{zwwy{~}xtnmszzw~}~}}|{yyyzz{{ypq}vn{ytwyyustwyzzzzyzz{{{|||{zxwwvvwxyyyyz~{zyz{z{|}~~}|z{~|~~|{zyzz||~yx||{{~}zxxwxxxyxvttuw{uqv~|uqs|~wtu{~|{yvttw{|zywvvwwxxwwxxxzz{}~}||{{zzyxxxwsplnooptvvvuvwxyyxxy{{zz{{xnd^nyyxtnrlmit}}|zzzzz{{}~~}}~~~}||||}~~}}}|}}~~}zxwwwwwwvutuvxyxxxxxyyzzzyyyyzzzxuootsqonopqsvxxwwvuvvuvvwvuuuuuuutuvwxxy{{|}~~}zxvvwxy{}~~~~}|||{zyxyzzyxwxyxyyyzz{{{zyyz{{|~~~x{~~}{xvuuuutsstuuwxyyzzzyyyyzz{{{}~}|}~~}{zwtsnt||ss{}|}|}}zwxshly~{{{|||y{~}zwvu~}{yx~~||~~}}|||}|{wrtyzywxy{zxtsrpqq_W[hoqqqonpqpprvz}}}~~}|{z|{tmotvxyyywvvsnqy|zxvttuwyxwvwz||xwwxx{}~}wpmkihpz~|zz|~}|{zzz|~~}|{{|}~~}}{yvtsrrsuvutuwz}}~}|{|}|{zxusssvy{yxvvvwwvvusqqu{~~~}}}{z{|}|yxvuuuvwwwwwvtsneeksy|nbv}|xuuwz{xurruxz{{}~zojtxz|wow||{||zyzzzz~|{||{zxyz|~~|{ypkovyx{zz{|{yvuuvvvxwqx{sv~|yyzywvwxyyyzzyyzz{|||}|{zyxwwwxyzyyz{{zzyzz|~~}}}|{}}}}}~}|yxzz{|}||~~}~}|zyxxxxxzywutux|}xz~sr~~~~~{ywwuvwx{|zxvuuwxyyxxyyzz|}~~|{zzzyyxxxxxvtrkjkkptvxwvvwyzzyyz{{zz{zyqiap}|zxvwyympz~~|z{{vtrz}~}}~~~}}}}}~~~~~~~~|ywwwwwwwvttuwxyzyyyyzz{zyyyyyyyyxvrhlmljjklnquwwvvuttuuuvwwwvvvvvvuuvwxxz{{|}~~|wuuuuxy{}}|||}~~|{zxxwwvvwwsopsvwwvwxxyz{{zz{||}~}}}|ywuuuuutuvvwxyyyz{zyyyyxx{~~~~}~|{z}}~~}{ytpmgn}yxtjjnqsvy}|xofgoz||{{vsyx|~|zrmvxwuvvw|~|{{||||||}|}{sswwwvvx||xvutrrhW]_fnrsroorspoorw}~~~~}{z{zuqqtuwyzzyvsqpt||zxvtrsvwutrtw{{wyyyz{|}}{xrmjnuz~}}}~~}}}~|z||}~|{zz{{}~~~}}{ywusrqqrtstvwz{||}||{||||{zywwxzzzyyyyxwvuusqs{~}{{{{{z|~yvvvuwxzz{{zxwumiox|~set|ytqruxyvsrsvx{|}~}|pjrz{zwqw{{z{~|{zyyzz}zz|}|||}~~~}||}vnntyz}xwy{|{xusrrssvwv{}wrty{|||{{{yxyyyyyyyyyyz{||||}}|{zyxxyz{zzz|uxzyyz{}~~}||}}}}~|{xwy{{|~~~}}~~~{}~~}{zyyxxwxx{zxvuvx{~~{{wr~~~||{|~|ywuutuwy|}zxvuvwyzzzzz{zz|}yxxwxxwwwwxxvuumhiotvwxxwwwy||{{{{{zzzyzwsnp{|||vuy~}|||ohlw}}}}~~~}}~~~~~}{xvvwvvvuuttuwxyyxy{{||{zyxxxxyyyywrfhihgghjlorrtttsssstuvwxxwwwwwwwwwxxxz{||}}}ztuussvy{||{{z{|}}|{zyxwvvuuusnikorrqqrtuwy{{{{{}}}~~~|zwutuuvvwxxxxyyyzzzzzzzyy|~}}~|yxyywwwwwtnidn~|~|i[bilouz}zwulistx|~{{}yvxvzzpjimruwy}}zxy|{z||}{z{}}wuwvuwy{}}zwutrn^[`\\fqwwustwwusrpsz~~~}|ywwvtsrsuwyyz{xspu|}|zxvsqruwvvtuuvzy|xz{zyyxvurnlr}~}||||}}~~|y|~~|{z{{{||{|}~~~}|yvtrpppqsvy|{zz|}}}|{{z|}~~{zzzzzzzyyywvttssw}~|zyzz{|}xvvwy{|}}{zxwsquy|{wjq{~}ytpoprstrqqtwyz|~{xunmtwwvvvy{{{{{}|{zzxvy}}yy{}}~}|{z|xqtx{|yyz{||ywvututvx|ztqrtvxz|}}}{yyyyxxyyzyyyz|}}~}|}|zzyzz{|{{{yqwzzyz|~~}}}~~~~||xvz~~}~}~}|}~~z{~|zyyzyyyzz|{zwvwy{||zxx|}~}}z~~{{}}|zwvuuuvxy|}zxvvwwyz{{{{{zz|{wvvvwwvvvvxwvvwqikwyxxxxxwvy}~}||}||zxxyyvvqt||}{|~~yxx{~~}{j^k{~~~~~~~}}}~~|zxvvvuutttttuvxxxx|~}}}|zxxxxyyzzyxrgghggghjmopprssrrrrstvwxxxxxyyyyyyyxxy{{|||{yvwwwwxxz{{{{{||}}|{zzyxxwvvutmfilmgefhnqtwz{{{|}~~~~|ywuuvwxyxyxyxxxxzzyy{{{~~~~zvrtqqrwyxurqlv~{{z{qhlpqrorkajoqyxwwy}~yy{~~upu}~}~~~}sjltuvxz}zz|{{}~}xqty{|{yxyxwz||}}{yvurkfmdjuy}|ywxyyxtqpqv{}}|zyvutsttttuvxyz{zvruz|}zxurooquxywvw{|xyxzzyyxsqrsrrv|}|~|{{{||~{|~}|{|{{zyxyy|~{xurponoptxzzzz|~}}|zyyz}~|{{zzyyyyxwvtssw{~{yxz{{~{yyz{}}{yyxwuuxz{zztsvywrpnnnpqqqpqtwy{}~{umkjlopqsuxz{||zy|~}|{zyxy|{yxyz|~~}||{zyy{wrv|{z{{||||||{zzzy|~xtrsuwy{|}}{zyyxxxyzzzz{}~}||{{{{{|}}}|{zz{{{||}}~~~~~}}zv{~|||}~{|~}|yxxxyyz{{||zxwxz{{{xvvxxxy|}~}||}zyvvvuuvwz||yxwwwxyz{{|{{yz|}ywvwwwwuuuvwvvvvsmqwxxxwwxxvy}~}}~~}yyxxyxxrry|}{{|{zzyy{|~~zh^n}~~~~~~~~}}}~~~~~~|zxvvvuuuuuuuuvwxy{~~~}{yxxxyyz{zzwrgfggfghknqqssssrrqqqsuwyzzyyyyzyyyyyxyz{{{zzyxyzz{zyy{{{||||||||zyxxwwvvwvpfgllb_behlqvyz{{|}~~~|zwvvxy{{yzyxxxxyz{z{||~~~~~~}~|xuruyzy|}{{zxy}~|{z||zxttttvrgpwz{{wuu}xvux|}uonpv|}~}}|tqsvxxxz}|}}}}}}~}}odoxzzzyyzzz{|}}}|zxvsntvinsuyz|zz{zxtortrx}|zywussttvwvttwxyz{xtqllwzvrqnjgiqwwww{|yxxz{zz{wwyttwy{yw}|{{||~~~~~|zwuttw{}}zvtrqpnnpsuxyz{||}|xvvy|}~}||||{yxxxwvutrrx}~{yxz{}~}}~yssuwxxyxxyxzywxyuponmmnpqqrsuy{}~}{vpjfggijmptx{||{zz{~|{{zzz{{xwwyz{~~zyxwwwx}~uw~{{|}}}~~~zxwvwxyz{{{{zyxxxyz{|~~||||}||}~~}}}~}}}}}}~~~~~~}~|x~~}|}}~~|yxwxyz{||{{zyxy{{||{xwuuuvy|}~~~~~~~}~}yxvvvuuuwz{{yxxxxxxyz{|{zz{}~{yxxxxwvuuuvvvwxwuruvwxxwwxyvy}~}}~yxyy{zyvuvy}|zyyz{zwtu|zkfv}}~~~~~~}||||}}}||}}||}~~|zywwwwwxxwvuuvwy|~~~~}{yxxxyzz{{yvqhfggffgkortuutsrrqpprtwzz{zzzz{{zyyxwxxyzzyyxxxyx{zyz||}}}}}|||{yxxwvvuuxzuigklc_addhnuyz{{}~~~~}{xwxz{||zyyyyyyz{|||||||{yyz{|}}zxvuvx|~}~}}}}xwy|{}~|xuxzrosxzqkljq{}zxttuy{{zz{z{|z{|~|jdt|}||zy{|~}||{{{{zxxwzytodnonx{}{zxvtz{w{}{xwutsuwxzzwutvwyz{yvqkmyzurpom_X^htwuz|{xxz|{z|}~yuvzz{xu~|{|}~~~~~~~~|yvrrtvx|~|ywutspnnorw{{ywx{zwssw{{zzz{|}|zxwvvvvvsqw~~|yy{|~{trtuvvxxxwwwxxxyywtrommnopqrtwz|}|zwvrniedfimotwz{{{{|}}|{{{{{wmmqvy{}}wvuuuwx{{~z|~~~~|||zzzzzzz{{zyxxy{||}~}||}}}~~~}}}}}~~}}}~~~~}}|||y~}||{}~{ywxyy{{|{zzzz{|||~}zxutstwxz{}~~~~}~|ywvvvuuuwz{zxxxyyyyzzz{zz{}~~{yyyyyxwvvvvwxz{zwuvvxxyxwwxwx}}~zxy{}|{yxwy~}zxx{{zxsrz{sq}}}~~~~~~~~}|{{{{{{{{{{{{{|}~~}|{yyyyz{zyxvvvwz}~}}~~}|zyyyyzz{zxtpheffeegjosvwvutsrqpprtvyz{{zz{{{zzxxwwxxyyzzyxxxwzzz{|}~~~}|||{zxxvutttux{xohhkf``abfmuxyyz}~~~|zyz{|}|yxxy{{zz{||||{yxursvyzzxuuvvx{~~}~}}~}yy|~~}|{{{~ynltwtmkrru|~zuqrvz~~~}~}~yqt{}~~~rs{~~~|{||xxyz||{{}{zzulrhety{yyyxx|}~~|wttttvxz||yvtuvwyywurptyxuqonhTKVkxvsyzyvvx{zxw}{{|zz{vv}|{{}~~}}}}}}~~~~~}yuutrtvx{~~|{yxwtqonquxywtuyyurruyyxxx{}~|zxvuvxz{xtx||zz|}~||~sprqrspqtwvuuuwwxyxvtqpoonnpruxzzyxvuusqlgfhloquxzz{{|}~}|{{{{yo`]bkqv{|}}ytttuvyz~}}y|~~|{zyyyzzz{zzyyyz{||}}~}|}}}~~~}||}}}||~~~~}}}|||{{z}{z{|}zxyyyzz{zzzz{{{||~~|zvutuuuvx{}}~~~}{xwvvustuvzzzxxyyzyyzzz{z{}~~}{zyyyyxxwwwwx|~~}yvuvwxz|yvvwy}~~|zy{}~~}|z{|yy{zzxvw|}zz~~}}~~~~~~~}}}||||{{zz{{{||{{{{{||}~~}||||}}|zywvvwxz|}}}}}|zyyyyyz{yvspieeedceinsvwwvusrrrqrtvyz{zzyyzzyxwwvvwxyz{{zyyxwzz{|}~~||{{zyyxwustttw{zshgkic_`afnuwwxy|~~~}|{||}}{xwwx{|zz{|||||zyvrsvywvustxyz|~~}}}~~}}~}y{||z||}}|yyz||{rlonlmtyvw|zqqs|~xruz|}xwwv{~~}{}{ssx{}||}}{z{{vtmlttwwyzyyz||vtutssuw{|zuqqruxywtqprtusrolh[W_hllryzxwwxyzxw{~}}wsxzxw~|{z{|~~~~~~}}}}}}}||}}~}}}}~~}yxtqrttvy|~}}{xurppqtuustxxtrstwxwvxz|}|zwvvwz~~zz|}}}}~{y{|}~|{|}}}~qmkhinoqqssssuvwwxxvutrqonnpsvxyywutuvuspljkorsvyyyz{|}}}zyy{|xja[WZ\\box}z{zvstuwy||~~}|}~}{xwwxyzzzzzyyyy{|}}}}}|{{~}|}}~~~~||||||{}~|}||||{{{{z{{~{z{|}|zzyyyyzzyyzzzz{{|~}~{xwutttuxz|}~~~{ywwuuttuvwxyyxxyyzyyzz{{{{}~~|zzyyyyyyxxxxy~}}{wvuwx{ywwy}~~|zxz|~~}}|zy{|{{z|}~~}}}~}}}}~}~~{zyy{{{zzzz{{|~}}}~~~}}~~~~~~~~~}|zxwvvwy{|||||{zzyyyzzywtrrohedbbdglrvvvvuttssssuwyz{zzxxxxwwvvvwxyz{||{zzyxzz{|~~}|zyyyyzyvtqrstuwwtmijjea`bgpvwwwxz|~~~~~}}}}}|zwvvvx{{z{{|||||{xvvwyvsruy||}}}wv}~~zz}x{yxuz~}vuxz}}xqigpx||xx}|rwz~|yx}~~{tefruqilxz||yvuy|}{|~||wrwwxxxwrswyz{zz{|}{vuwutrqquwywpjooijqokjmqsttqnmida```guyxyyyyzzzy|}ztsvyvs~}{yyyyz|~~~}}||||||{{{{|~~}}||||}~~ysoorvyyz}~|yvsqpqstttxxuttuwwwwy{|}|zwvwy|{{{|||{yy{{|}}~~}|}~}{{z}pifcfmvxpoprsuwwvvvututsqooptvxxwtssx{{yurppsuuwxxxyz||{{wxy{}|kdeb`ZVZet||yttuxz{}~||~~~~~~~}~~~~}{yxxxyz{zyxxxyz{}}}}|||{z~||}~}|{|}~~~~~~|{{{{||}||{|zzzzzzz||{|||{{|~}}}}}}}~~||zzyyyzyyyyzzz{|}}}zxvutttuwy{}~~~zxwvuuuwxxywyxyyyyyyyz{{{{|}~~|zyyyyyyyzzzyy|~{||zxuvx}|yx}~~~}|{yy{}~~|{|}}}|~}~}}}}}}}}~~}~}}||||{zzzz{|~~~~~~~~~~~~~~~~~~~}|{zxwwwy{|||||{zzzyyzyvtqqsumedbbcfkquvwvvuuutttuwyz{zzxxxwwwvvwyyz{||||{{{{z{{}~~~|{zzxxyz{zwurnlpsvvtqmkkfa`djrwwwwxyz}~~~~~~~~~}}{ywwusrwz{|{{||}||{zxxxutty}~~~~xx}~}~~}||}y}xuv|xv{~|wrs}zxwwwy~~~|~~~|zy|~~}{zytloxzoYdruwyy{zyz{zz|zujgrwzyxvvwxy{zz{{z{}zvvxvutrpsv{xoglmbdlgcdkotvvtrpkedfgbcovwzzyyzztswyvpszytp~{ywwwwwyz|}~~}}||{{{{{{zyyyz{|}~~}|{zyz{}~~~~}yvvvy{zxz|~~}{xussuvwyzzwvwyzzxxz{{{zywwxz}~z{|}}||xvxy{{z{|}}{{zzyx~ylgfgmrvvrsrrtvxwvuutsuttrqrtvwxwtprw{}~}{ywwwwwwwwwwyzzx||ww{{}~|rkefe_WU]ktvssvz|}|}{}~~~~}||||}~~~~}|||{{{|{zwvwxz{|}~}}||}|||yxy{zyz{|~~~~~~|{{{{zuqryxwvwxyy{|}}}}|||}~{{|||||}~~~~|{zzz{zyyyzz{{{||}{ywwvutttuwz|}~~ywvvvvwyzzzxzyyyyyyyyz{{{{||~}{yyyyyyyyzzzyxz{z|~|wvx~|x{~}{zxxwx~~~~~}}}~~~~~~}~}}}}}~~~}~~}}|{z{{}~~}||||||}}}|||}}}}}~}|{zyxxxy{|||||{{zzyyyxurpquxrgdcbbejquvwwvvvvuuuvwyzzzyxxxxwwwxxyzz{||{{|}}|{||}}}|{zzyyyz{{yxvumgotxxvtqnle_`hotwwxxxxz|}}}~~~~~}{zyxvspvz|}|{{||}|{zxwwvvw{}~~}~z|}|}}}~|wwvzqopz{z~}|}zz{}tqvxwz}z}wuz~}yssy{yxxxwz}|irussvz~~ywtqqrnjhltz{xvvy{zzzyzz{{{|zwwywutqosv|wqqwvpqsniimquxxwtrnkmpsoknswyzxyzztqrtqmr{zxw}}~}{xwvuuvvwxyz|}~~}|||{{zyyyyyyyyz{{{{}~~{yxwxz|~}|}~|||}}{wvwz}~|zwvuvwxyzyyz{||zzzzyyxxxxy{}}||~}|{~xuuwyzyyzz{yyzz{z}{kfinuwsrsuttuwxwvutssttttttwxyyxtsv{|~~|{yyxxyxxxyyywy}xwy}|~{vmdgmja^bgnqsw{}~v{xy~~~}|{{{|}}}~}}}}}}}}{ywuwxz|}}~~}|||{}{wvwyxxxy{}~~}}|{wjck{xtuxyyy{{}~~~}}}~~}|||||||}~~~~~}||{|{zyzyyzzz{zyxwwwwvuuutvx{}~~~~~~zxwwwxxz{{{yywwxxxxxyyzzzz{||{zyyyyyzzyyzyyxxyy|~yuxyy~~}xmmoqy|~}~~~~~~~~~~}}|}}~~}~~~}~}{{|}}|{zyyyyzzzzzz{|{{{{|||{{zyyyz{|||||{{{zzyyxtqoqw{vjdcbbdiquwxxwwwwvvvwwyzzzyyyzzzyyyyyzz{{{{{|}}||}||||{zyyyyz{{zxuuxrkrwzzyxvrle_bmsvwxyyyyz{||{|~~~}|{{{ywuw{|}|{{{|}|{zxvwy{{||}~~~}~}{}|wz}ww{}~~|xsvvmkt~|{}{srwzv|{utvwuz}xy{mpux}}~}zvnovzyyyxvttwywyusrsv{}zyvrqrqprwy||{xvw{{zzxyz{{{{zyyxwusplpv{wtw{xuutrrrruvxzxvutsrtyxsqtwxyxzxxxutusompv}}~}{ywvuuuuuvwwxz{|}}~~~}|{{{zzyxxxxxxyz|{||}}yvuuxz}}{y{~}yvuux|~}{yxwwwyzzz{|}~}|{zzyxxxyz{}~~|||~~}|{{wssuwyyxxv|}zyzz{z|lfnvzxussvuuvvwxwutrqrrsttuwwwwvuvxyz}~~|zzyzzyyyyzywxzyxz}|}}~{rokiknjd`dis~ytt{wst~~}~~~~}}||||}}}}}}~~~~~}|ywvwyz|~~~~|~||}}zwvvwwwvwy{~}yrlj|twyzzzz{|~~}}}~}||||||||~}~~~~~~~~}|{zz{{zyyvuuuwwwwwvuuvwz{|~~~~|ywwwxyz{{|{xuvwxxxxxyyyyzzzzzyyzzzz{{zyzyyyyyyz|yty|y|~ztqoqruwz~~~~~~~}|}}~~~}}~~~~~~~}}~~~|{|~~|zzyxxxxyyyyyyz{zyyy{{{||{zzz{{|||||{{{{zzywsqpruzxldbaadkrwxxxwvvwwwwwwxxyyyyz{||{zyyyyzz{{{{|||||||||{zyxxyz{{{yxwwxwtvy{|{zxtngahrvwwxyyyzz{|{z{}}~~~~}}|||{{yxy|}}||{{|}|zyxvw{|{wsw|}}}}{yzzx{|qltz~~}yqt}xos|~|z}}~~uadkkq|}|{zxvty}yxyqqtsuw||{{zwsoory{}|zsfnwxyxxwxvrrw||||{zwstx{|}{zy{{{{zyyz{||{{{zxvvxvqooprv{zwwvsqrsuvwwxwxxvuuwz{xvvwxxyywwwttuurmir}z~}}|zxvuuttttuvvxyz{|}}~~~~~}|{{{zyxwwwxxyz{|}~}|{zywvxz||ywx{}~zvssv{}~~~}{yxxxyzzyx{}|{{zyyyyyz{{{{{{|}|zywtrrtvvsqpou}{yyyyyoisyzxvtvwvuuuwxwvtrpqrsuvutqppruuuuy}}|{|||||||{{xx|~|{}}|qfcnsmdddlhb`izpmjl|}}}}}~~~}}}}}}||}~~~~~|zyy{~}}~}{{{zwvvvwxvvx{~{wwxxz{|||{|||}|}~~}|}}}}}}||~~~~~}{ywutttttuuwxxxxxwvvwwxyz}}}}~|yyyz{{|{zywvwxyyyyyzzzzzzyyyzz{{{|}}}{|{z{{zzxz}}zuz{{|~|wrportwz}~~}~~~}}}|~~}}}|{{{|}}}~}||z|~~|ywz{}~}}||zyyxyxxxxyyyyzzzyxwwyz{||{{zz{{|{{||{{{{zzzwrrrsovxpda`aelsxyxxwvuvvvwwwwwwxyyz{|}|{zxxxxyz{{|||}||||||{zyxxy{{{yxxyzzzyz{|}|{zwsgerwywwwyyyzz||{z{}}~}~}}||{|||{z{}}}||||}~}{zyxz|~}xx{}~~~|wpty|~zqiu|~~~|}zqqu~|xy{yx{}~~~{wtiaoy||~~{vttz~{wwuvsjk{|rrvtlfelw|oct~|||~zrovzz{zyzyusy}|}{zw}{{{zzz{|||{{|{yxx{{wuuuvxzywywsnnrvyywsptzxvvy}}{yyyzzzyvspmnqvwslowv~}{ywvuuuuuttuvvwyz{|}}~~~~}}|||{zyxxwyyz{{{|}}zwwwx{~|wsu{~zustwz|||}~~}|{zzz{zwvw}~~}|||{{zzyyyyxxyyy{{yxvutttuqljjkpzwxxxz|sqvyyxvvvvuuttuwwvtrpqrtvwusnjinrqqw}~}}~~~~~~~|zxy}{{}{qehrutsjfaco|tjint~}|||}~~~~}}||}~~~~}{{|~~~}xwz{wvuvwxwwxz}rq||}~~}|||||}~~~|}~~~~}}}}~~}{yvrnmmosvxyzyyxxxxxxwwxy||||}}~||}}}}{xvvwxyzzzzzz{zzzzzyy{{|}~~~}|||z{{{w{~{zz}~zqloqruv{|||}~~~~}}}|||{zzz{||}~~}{xwwy|zvvwyz{{{zyxxyyxxxxyyyzzzyxwvvxyz{{{{zz{{zzz{|{{{zzzywsstsoqvufcabgnuxxxxwvuuuvvwwwwwwxyz{|||zywwwwxyz|}}}}||||||{{zyyz{{zyxxyz{|||}}}}|{zwfjzzzyxyyyyyz|}||}~~~}~~~~}}}||{z{|||{{|}~}}}}}~}}|{{z{|~}wtrrstwxipx{|{xxs|~}{}{utrz}|ytpt{~~|ywy|ywy{||}||zyy}~|{{{yssrzxjnwrdZ]jx}}~{ql}~}zwx|xrw~}|{yxxvuwz|}|wlpz|zzyz{|{zyyzzyz{~|{z{zywwz{ytposx{{yqimwutwz}~}{|||{zywuqonouxvtvxy}{ywuttuuuuttuuvwyz{|}}~~~}|{{{{{{{||||}~}|}}|{|~~zwvvwxyz{}}~~~}||{zwww{||}{xwwyyyyxxwwxxxxzzyyxxwwwunjjkmq|yyyzz}{zyxvvvxyyzywvvuuttsstuvutrqrstwxwupjhkqsuz~~~~xxz{{yz|~|{}ztmovzvgdju|vuwz~|{z{}~~~}}}}}}~~~~}~}xx|}yvuvxyxxyz}|xx{{{||~}}}}}~~~}~~~~~~~~~~||||{zvplimswz{|{zyyyyyxwxxx{{{|{{}~}{wvwyzyzzzzzz{{{{{{zz|}~}~{y|z|}~{|||{zzz}~{tmpppruzz{|}~~~~}|{{z{zzzzz|}}||}{zwuuy{yuuvyyzzyxxxyyxxwwxxyzzzyxwvvwxzz{zzzyyyxxxyzzzzzyyyxtsuttqsthdcdjpuxxxwvuuuuuvvwwwwwxxxyz{zyxwvvvwx{}~~~}}}}}}}||{zz{{{zyxxz{|}}~~}}}}|{xjp||{zyyyxxyz|}~~~}~}||||{{{z{{||}||}}~~}}~~~~}|||{{|}~zunkhimu}nt{}}~z~~}{xv{|yvqrw|~vmio|~{||}}|}~{{}~~~~~{ytiuzqtzpYLZp{||}|xv~}{rknzzvx{{{|}zxwwvwy{}|ykfy}|zyyzzwtrsuvwwy~|vsqutsu}}|wtrtw{|{rijpppu|}|}{{{}{ywwxxvqqtvvusty|zwutsrstttttuvwxyz{|}~~~~~~}}}~}}}~~}}}}}~|zyxvvwx{}}}|}~~}}|{yxxyzz|ytqqsuwyyyyyyyxwwxxxxxxz}{qllmnrpmqrsux~~~~{yxutrw{{zywvwuttsrrstuutrrssuwxxxumikpuy}~~}tw|~zxxz~~~}}}}|||{{uruzj_kr{~~zt~{zyz|}~~}}}}}}}~~~|}~~}{wvwxxxxy|~|zzyyyyyz|}~~}~~~~~~~~|zyyz{||||wqkmsx{}}}|zzzzzyxyxxz{{{{{|~~}zxwxz{yzzzzzz{||}}|||~}|}||~z}||||z{zyxx{}}|{||ywwusuv{{||~~~~~~~~}{zyzzzz{{{|}|zxxyzyvvvyzxvuxxyzzyxxyyyxxwwwwxyyyyxwwwxyyyyyyxxxwvwwxxyyyyyywttuvvsssjdcgosvwxxwvuuuutuwxxwwxyxxxyyxxwwvvuvx|}~}}}}~~}}}|{zz{{{zxxyz{|}}~~~}}}|{ytv|||{zyxwwx{{}~|}||{{{zz{||}}}}}~~~~~~~}}|}}}|{||{{{{vqqs|}y{~{||{}}||~|yz||zxxy|~}yx{}z}}~~{{~}zz~}zv{~~}}sYJ_y~~~}||~{yodoz{wusuy{wuuvy{|{||||yuz|{zyyxvqijnrstpnvyxqomsqqx|{zxvuuvxzwpjjoqrw|{xvvz{}xrtyywtsrsuutnfg{yvtsssttttstuvwxyz{|}~~~~~~~~}}}|yxwuuxzyvw{~~~|{zyxyyyyvrooqsux{||||zxuttttuy{wqpoptxknuttursuusw~{yyvusw{{zyxxwuuusrrstuttsssswzzzzzslkpvz|~~~~~|xz~~}zxxy{{{zzz{|}||||xvyihwuz|tmo}zyyy{|}~~~}}}||}}~~~~{yv}|yvvwxwwy~}xxxwxwwwy{}}~~~~~~|xvvwy{||}~|wrrvz|~~~}|{{{{zzyyy{{{||||}~}zyxyz{yzzzzz{|~~yy{|}{zy{}|||}}~|{yz|}{zzy{~}|{zzz~}}|}~~~~~~}}zyz{{{{{{{|||{xwwyzxwuvwyvuvxz{{zyyyzzzyxwwwwxxyyyyywxxxxxwwwwwvuuuuuvwxxyywuuvwvuvukddktwwxxxwvvuuuttvyywwxyyxxxxxwwwwvvvx{}~}||}~~~}}|{{{{{zyyz{{|}}~~~}||{zzyz}||{zxwxyz||}~~~~~}|||{{||}~~~~}~~~}}|}}}}||}~~}}}yy{}}}~~zwvux{zyx|~zx}}|}~~~y|~}}|{{|}~~zi]l~~~}~|{wox||yqqv}zvuuwz|}}}||}~|wppuwwuqkilrttnlsvwtstunhr{{zyxwwxzywqmntxx{~wmlvywokqutojmnpsvxveZ{ywvuuuuvvvuuvwxyz{|}~~~~~|{|}|ywvvvvtuy~~~~~}{zyyzzzzxusrrsux{}~}~{vsqqqpqtz~~|xussv{ysw}|{}{wxxwwy|}|{zyvutwz{zywwutttssstuuuutsupvz{zy{wqnpvz{|}~~~~~~~~~}~}|||~~~}zyyzyyxwwxz{|||}~|wwsw}xz~~ujky~zyxxz{|}}~~}}|{|}}~~}~{qcn}~|zwvvwwx}~zyyxxwwxz|}~~~~}||~~{vsuw{|{{{|}zxxz|}~~~~}||||{zzyy{{{|}}}~~~}{yyzz{zzzzz{|}}yy{{}{zyzz~}||}~}{|}~|yz{}}zy{~~}{{|}}}}}}||yyz{{||{{{||||yxwxzzxutuvutvx{||{{z{{|||{zyxxwwxxxyyxyxxxxwvwwwvutssrsuwxyywvvvwxxxvkcgqxyyxxxwvwwvuttvxzywyyzzyxxxxxxxxwwx{|||{|}~~~}}}||{{{zyz{{{||}}}}|||{zzz{}}|{zyy{|}}}}}~~|zz}}}||||}}~~~}}~~~}}}|}}}|||~~~|}~||~|sot{~}|x|}{|}}{|~x|||}~}{yyy{yv|yry~~~}~}{z{|}}|zww}}||zyxy{}~~}|zxxwkeuywvuuqruvvsruwxwwxxsmoswxxxy{|}|zwtt{|}}yvnjrvl]ivxtpliinsw|~sg}zyxxxxxyyyxxxxyz{|}~}{{|{yxz}~~||{yxwvvx{}}}}~~}}|xy|{yzzywvtsttvx{{{~{urrqsrqrssrs|}xuuwyyxyyqpx|z{|zyxx{|{{zwwxz}}|yvutsssstuttxxwwvwjlstsrtssqrvyyz|}}}}}}~~~}}}}}}~}}|{{{zyyxxxxzzz{|~~}{xy}}|}|vtx~{yxxyy{{|}~~}|||}}~~~}|{|}~~|sZby}||xtuuw{}zxwxxz|}~~~|{{~}zvtvy|}{zxz{{{{|}}}}~~}}~}|zzzy{{|}~~~~~}{z{{{{zzzzz{|~~{yz{{|{yyyx{}|||}|{||}~}}{z{|~u|{~~~}|{{{}}}}||{zyyz{|||||||}}{yxxxyzyuttuuuwy|||||{|||}}|{zzyxwxxxyyyyyxxwvvwxxwvutsrsuvxyywwwwxyyyvjemvzzzyxxwwxyxwuuuw{{yz{||{zyyyyyyyyyz{{{{{|}~~~}}}||||{zz{{{zzz{}}}}}}}{zz{||{{z{|~~~~~~~~~{ty~~}||}}}}}}~~}}||||||{||}yz~~||~~xsx}~|}~~}||||~wywwy|~}zxwy~{w~~}}}|{}~}}}~}{z{}}|}}|~~zsuz~~|ywy{rjz|yxy|{xxwwxxwxxxxyzxuqquwxyz|~}z{zyyz{|ywsroostgZnyvtttnmptz||yt}|{{{{{||}}|{{{{|}~~~|zxy{~~~~}zywvwxyz{||}~}|vwyzyxyyxvututuvvxv{wottrtutrmkntyxvttvwwvusnpw{z|}{{z{|||||zyz}}{wusrsstuuruxxxwwtfakoomnpsttvwzz|}}~~~~~}{{||}~~}}}|{zyyxxxyy{||}}}}~z|~~~~~}~|~{yxxyy{{|||~}}}}}~~}|{zz{{}~}}xnoy~}|}xttux~|yyyz{|}~~~~}||~}zvvx{}~|zyyz{|}~}}}~~~~~}|{{{z{{|}~~~~}}{z|{{{zzzzz{|}~~~{yxz{{zyxxxxyzz{||~~}}{z{{{|||}}~~{}}~~}}||||}}}}|{{zzzz{}}}}}}}~}{zyyyyzzvtuwvwz|}}|zyyyzzzzyyxyyxxwxxyyyyyyyxwwxyyyxwvtttuwxyyxxxxyyyxvmktzzzzzyxwwxzzywvuv{|{{|~~}|{zzzzzzz{{{{{{{|}~~}}||||||{{{{zxuwz||}}}}~}{zz{|{zz{}~~~~~~}{{~|||}}}}}}~~}|||||{{{|||}}tw~}|{|}~zx{~~}~||{|~~~}|xwuuy{}}yvwzzv}~}}}|||}}|~~}}~~~|{z{||{|}|~zpt{~~}{z|~}y~|zyyzyxvwxyyyyxxyyxvtqruwxz{}~|wvvyuljtwuqnorurgeuvrstvqootzyvvw~~~~~~~~}}~~~}||~~~~}zywvvvwyyz{{{zvwzywvwxxwwvvutuuuvynhtvsuwxslkotutrrruuvtqprtxxxy{{{|}}}}}}}~~zwtttstuutxywvvtk`\\innnnprtuvx{{|}~~~}yyz{}~~~~}|{yxxwwxyy{|||}}}}|~~~~~}{zyz{|}|{z}~~}}}~}|zyyz|}~}|||}~}||~~~}||~yttu{~{z|}zzz{|}~~}}~~~}}~~|zxx{}}~}{{zz|}~}}||||}}||{{{zzz|}~~~~~||{z{{{zyzzzzz{{{zzz{{|~zxwy|{yxvvyyyzzz{|{{z{{||{||}~~~~~~}}|{|}~~}}}|{zzzzzz}}}}}~~}|{zyyzz{{xwx{|}~~}{xvvuwwwvttuvxxxwwxyyzzzzyxxxxyyzzyxwvvvwxyyyyyyyyyxvrrwzzzzyxwwwyz{{zywwy{}}~~}||{{|||{{{{{{{||}~~}||||||||||{zvsxzyz|}~~~|{zzzyyy{~~~~~~~}~~||||}}}}}~~}|}}|{{{{{{|{xjow~}{z{|}}}}}}||{{{zz{|}{yxzzxvtw{{|{ywy{xmy~}|}||}~~~~~~~}|zz{{||{zyyzzz}}wow~}~}~}zyxwwvuvxyyzyxvsqttpprtvy{{||ztrswrdhwxrnmortphjssrsttpomnqpkov~~~~~}{zxvutvwwwvuuutuwutttuuuvvvuuuvw{ykn{yuuwzwnlpsssqqrttvrnosxzwvxxwwvwxy{|}~|wsqqrvutplilrqlhailmnorsvwxy{|}~}zxyzz|~}}}|{zxwvvvwxxy{{{||}}~}~}}~}}~~~||{|~~}}}}{zyyzzz||{{|{|{wvxy{|{{}ytty~|yx}wu}{{|}~~~~~}~~~~~}{{zz{}~~~}|||}~}}|zyxxz}|{{{zzzzz|}~~~~~~~~}||{{{zyyzyyyzzzxxxxxxxz{~{xxz}|zywwzzzzzz{{{z{|}~||}~~}|||}~~~}}}|{zz{zyz|}}}}~|{zzyyz{{||zyz}~~{vtsrtuutrrrtvwxwwxyzz{{{zyxxxxyzzyyyxxxxyyyyyyyyyxwvuvwyyyyxwvvwy{|}|{zyyz}~~~}|||}}}||||{{||}~~~}}||||{{{|||zwwzwwxz|}~~}{{zywwvy}~~~~~}}~~~~}|||}}}}}}~|{{}~}|{{{{{|~om{~}{z|}~}|{zyyzyxy{{{||vvwy{wtptxz{{{z|}ypy}~}~}}~~~|zyyyyz|{yvwyz|~xus|}~}}~|yyxwvuuwyzz{zyvohjomnqrtwyzzzyvusvtoqleeijmttpkilosvvtpnnjeddnw~~}}|{z|zurtwxwvuuuuuusrrqrrsuvuutuw{}{s~|wuwzwonqtutrqqrsurmmuz{xuvvuutssuxz{~~vpkjryvrkechpqnliklmnpsuwyzz|}~~~}zxwyyyz|{{{zyxwvuuuuwxyyyyz{~~~}}}}~~~}|{z{|{{z||{zzz{{yvuvxzz{}|xw}yxvtryult{|}~~~~}}}}}~|zzz{|~~~}}}}|}||{ywvvx{~}{zzyyyyz{|}}~~~~}~~~~~~~}{zzyz{{zzzzywwwwxwwxz|~zy{~{zyy{{zyyyz{{{|}}}}}~}}|}}~~}||{zz{|{z{{~}}}|{zyyyz{||||{{z}}}}~~|vrqqstuttsrsuvwwxyzz{{{{zyxwvwxxyyyyyyyyyyyyyyyyxwwwwxwwwyxxwvvwy{|}~}|{z{|}~~}}||}}}}|||||}}~~~}}}}|||{{|||{}{ztvwxz{|}}||{yvtttw{~~~~~}}}}}~~~{yz|}}}}|||}}~zttz~}}}}}}~~t~yw{~|yxywxzyuu{}||~~~|vvy{{xuswyyz|}}~}z~~}~~}||zyyyz|yxwxyz||srv}~~}}}{xwwvtttuyyz{|{ytigmnorrssvxwvwxwuuuulYXdlprvvrnkipwyyvpltqe_huy~~~~~~}}}|zz|{vqsuwxxxwwvuttrqppqqtuuttuwwz|wtttwuonrvwvtrppprrllu{{wutuuvvsrrtxy{}{qikow}xpiecfnppomllmoquvyz{|}}~~~~~}|{ywvwyyxxxxxxwwwwvuutuwyzzyyy{}~~}}}}}~~~}}|||}~~}|~}zyyyzzz~{y}|vtxwsry{moot~~~~~~}}~~}~~~|{{||zzzz|}~~~}~~|}||{zxvvwy{|{zyxxxxyy{}~~}|}~~~~~~~|{z{}~~}{{zzxxxyzyyz|~|{}}|||||yxxxy{zwz~~~~~~~~~~|{{zzz|}|{{|~}}}{zyyyz{|||}||||{zxwz}~|vrqquvwvvusttuvwxyzz{{{{zxwvuvvwwxyyyyyyyzyyyyyyxxwxyzxvwxxwvuvwz|}}~~}|{{{|}~~~}}}||}}}}}}}}}~~~~}}}}}|||||||||{yvvvwxy{||||{xtrrsuy}~~~~}}}|}~~~}zvsw{}~~}|||||}~vlku~~~}}}~~~{ujq~{xwxzy~wlq}|x{}~{zz{{yyyz{{|}~~~~~~}}}|{{|}~||}zwvwusu|~~~}zxwutsrsuxyz|}{||urtwwwvtqtvvtuwwtstpaX`jnnrvwusrqsx{~|tr}}mds|{~~~~~}|||}}~~~~~~~~}}}}}|zyyyvsssvy{{zxwustsqpopqrstttvyvx~|wtttutrpqruwxwsqommnkktzzwtstuxyvrqrtvxz}~{xqkpzzqidbcinpponmnorvy{|||}}~~~~}{yxwvwxyxvsrstuuuvxxwvvvxz{{{{z{}|~~~~~~~}}}~~~}|z{{xwxvty}{yyrpmnx}}}||||{z|}zwxz|{{{}}}~~~~{yzz{zzz{}~~~~~}}|{zxxy{zzyxwwwwwxy{}~~|}~|{{|~}{zzxyz|}~~~~~}~}|yxwwxzxyzz|~~~~~}{zzzz{}~}|}}}}|{yxxyzz{||}}}}}}{yvtx|}|vrqrwxxyxvtttuvvwwxyz{{{zxwvuuuuvwxyyyyyzzzyyyxwvvwyz{ywxxxvutux{}}}}}}}|{{||}}}}}}||}}}}}~~~~~~~~~~~}}|||}}|{zyxwwwwwxy{|}|yusrsvz}~~~~}|||}~~|zvsrw|~~~}|{{|}~}ulir~~xi_w~|yuvyz{yuty}zv{~~|||}{{}~~}~~~}}~}}}}~}{{~}zzzvuv|}~}~~}{ywtsrstuvwxz{z}~|||{zxurtvvstxyvutj[Yaipqqvwxyxvvy}|{tnz~}~~}|||||}~~}{zzz{|}~~~~~~~}|}~~~|zxwwuwxxyz{||zxusttsrqqrstssuy}{z{}zwvvvvtrsusuwxwvrnljklotxxwtrru{{wrppqsvx|~~{xru|ukddehmqqpooorux{|}}}~~~~~~~~{yxxxyz{{wrmlnpsrrw{|zzzyy{||}}|}~|}|}}}~~|tonry}usros{{{|{{zzyywvxyvstyzyxxz}~}|}}}}~~~~{zz{{||}~~~~~~~}|{{{{zyxwwwwwwwwy|~}|{|}~~|{yxxz}|z}}}~}|zxwxvwy{xwx{||~~~~~~~~~|zxyyz{|~~~~}|zywvwxzz{||}}~~}}{{xwz||{urrrwxyzywutstuuvvwwxyyyyxxwvtttuvwxxxyyz{zyxwwvustxyzzyyywutuvy|}}}}}}}|{{|||}}}}}|||}}}}}~~~~~~~~~~~}}}}}|{zyxwwwwvwy{|~}|xvuvx{}~~}|{|}~~|zwvwy}~}|{|}}{upls~~yhe{z}~~zxwwuy{zy~}{z{}~~||||~|{|}}~}}}~}|~|}~}{{~|||{sis~|}}||zwtrprstuvxyyyy{|}~|{{xvssrqprxyyytj`achrvuwy{||ywy}~}{xw{}{~~~~~~~}|{zzzz{||}~~}{zyxyz{|}~~~~~~~}}}}~~{ywvvxyzzz{|}{yursttrrsstuuuvz~~~}{zyzzyvtwvtstvwwvrlihjotuvwvutwzxtqqppsvwz}}{wuy}}xnfggelpponootx{|~~~~~~~~~~~}zxxyz{|}|wphgkoqppy~}||{{|}}}}~~~}}|~|~~~}~~~tjnzsuuokmu|}|zz{{zyyyxwxyxwvvyzyxvy|{{yyz|}}~~~|{{||}~~~~~~}}}{yxwwwwwwwwvxy|~~~|{|}~~~~}{yxy|}yxz~|}{ywwvywwzv}|||~zz|~}}}~~~~~~~~~}|zxvwy{|}~~}{yxvuvxz{|}}}}~~}}{{z{|}|zurrswxyzywusrsttuuuvvwwxxxxxwutuuuvwwxxyz{{ywvvuuqswwy{|zyvttvy{}}|||||||{{||}}}}}}||||}}}}~~~~~~~~~~~~~}~~}{yxwwwvvvwxz|}||{zzzz{|~~~}|{}}}|zyz{}~~}{{}}}{xtry~}}~~tuz|~~~|{{{zxw{}}{{~~}}~}zxz}~}}}}|}~||~}|{||{~~}zy{vlu~{~~~}|{zxtqnoqruxy{{{wrsy|zz{yvssronqvxyytljlmnrxyux||}{yz~}|||{z}}}~~~~}|{zyyyzzzz{||}~~~|zyxxxzz~~~~~~~}}||}~~~{wutwyzzyy{}|ztpqrttsrsvwvvvxy{|}}}~}~~{yuuutstuvwxunifglqstuwwwxzvsssonquwy}|yvw{}~~}{odbc_empnmopty|}~~~}}}}}}{yyz{{|}~}woffjppnpz~~~}}|||}~~~}}}~|~}}}~wrv~~}|}{utvtkeox{{{{{zzzzzyyzzzz{{||||{}~}{wuy|}~~~}{{}}~}|zxwwwxwwwwwvwxyz|}}~~}|}|}|}~}}|{|zwwy|}|}~~|{yxvwwzyy}{||}}}}}~~~~~~~~}{zxvuvy|~~~}}|zxwuuwy{|}~~~~~~}}{||}~}zwusqruxzzwusssstttttuuuuvwxxyxvuuuuuvuvvw{}|xwvuuxutwtw||zwuux{}}}|||}|||{{||}}}}}}}|||}}}}~~~~}}~~~~~~~~~~}{yxxwuvwvvwyzzz{{||||||}~~~~}}|}}|{{{{|~}{|}~~}|yz}~~~~}~{}~~|||{|~yv{~}{|~~~|zxy}~~~~~}}|}|{|~~~|zwtry{|~}zywtx~~xx}~}}|{yuqooprty{wzxsrry{xxyxwrtsporuuvxqqrowwsvyuxz{{zyy}}}{~}|z||}~~~}}~~}||{z{{yyyzzz{|}~~}{yxxxyz|}~~~}|||~~|yxxy{zxwwz{{{vsrsttsruyyyzxtruxz|~~}|xvtttsstttvxuoiffjmoqsuvxz{vvyyplntwy|}{zxuttvy|}~th`a\\`kpnmprv|}}~~~~}||||||zz{|{{{|~}woggknoorvy||||zzyz{{||~~~~~~~~~~}}~|~~|xux}{z|zrjpwz{{{{{{{{{{{|}}~~~~~~|yw{}~~~|}~~~|{xxwwwxxxxwwvvxy{}~}~}}{{y{|||||||~|zwvvwyzxy{z|{zyxwxy{|}~~~~}}}}~~~~~~~}{yxvuuwz|~}}{zxwvwy{}}~~~~~~}||{|}}}|xuwtrrsx{yusrrstttttttttttvwxyxvuuuuuutttttuy{{{xw}{wvsu{~zwuvy|}}}||}}}||{{|}}}}}}}}}}}}}}}~~~~}}}}~~~~}}~~}|{zxvssuuuuvvvwxy{{{{{{|}}~~~}}}~|{{|}~}||}~||~~}|z{|{|{{{||}~~~}{{y|}|~~~~~~~||||}}~~~{xtqowyz}{x{{rorx~~~}{xtqqrrtyqcjmmmqvwutvyxnjjsuvxunnovuiddhouuvwyxxyyxwx{}}vu|}|z||}}~~~}||}~~~}}}}}}|{{{|{{{|}~~}{yyzyyyy{|~}|{{|||zyxyzwuuuwyzzywvvvtssuyzzzzwuwz|~~}|zxvttssstutsturlhfggjpstvwyzzx{~ukmvvwz}~|{|{{yvwz}~|qca]_iponqv{}|{zz||||{{{{zz{||{zy{|}yqhhmoqstsrtuyxwwwwyy{|~~}}}}~~~}}~}zsry~~|vtvxzzz{{|||||}}~{~|}}~~~~~~~~~~~}|zyxwwwwxxxxwwvvx||zywxyyxxxyxxzzxwuuuvvxvwxxzyxxxxy{~~}|{}}~~~~~~~~~~~}}|zxvvvvx{}~}||{zxwxz{}~~~~~~~~}|{{{|}}|wtxusssxzxussstuttuuttssssuvxyxwuuuuuuttssromry{{|~zvsty~}zwvwz|}}|||}}}}|{{|}}}}}}}}}}}}}~~~~~~~}}||}}}}}}}}~}}}}|{}yurttttsstvwyzzzzz{|}}~~}}}}|{|}~~}}}~~}}|}~}~}zxy{zz}|}}~~||~tqwzz|~~~~~~~~~}||}}~}}}}{xvsqwyz}|zyqgkrt|~}{xvusuzzq^X]einsvusuy{smktuvwvnmtzwbHD^pvyxxyxxyzvsv{{znnxyzx|{|}}~~~~~~~~~~~~~~~~~~~~~}}}~}}}|}~~~~~}|}}|{yww{}~~~|{z{{{yxusttttuwyzy{{zyxwutvxyxuvy||~~~{xwvsstttuwxxvtsrnjijkilvxxyz{{{{}rs~xvw{zwx}|h]]]fnnnqy}{xvuvxyzxvwzyzyzzzyutx{|{uhjortvvusrrv{}~|zz{|}~}}}}}~~~}~|~~}}yz}~|{|xwxyzzzyzz{{||}}~~yy|~~~~~~}}}}}}}}}|||}}}||{{{zyyxwwwwwxwwwvvvw{|~~zwvuuuvvvvvuuvwvuuuuuvxwvxxxvwwwyz|~~{zyyzz{}~~~~}}|{yxwwwxz|~}||{yxxz|}}}}}}}}}}}}|{{|||{vtxuuusxywutttuvuuuusrstttuwxyxwuttuuttttuvsjdfjv~|xuuw{{ywwxz{||{{|||||{{{|}}}}}}}}}~~~~~~~~~~~}}}||}}}}}}}}|||||{{~|torsstsstuwxyyyyyz{|}~~~}|||||}~~~}}~~|{{}~|{{}|{{{{{z{|~~tt~{wrv{z}~}}~~~~~~~|}~~~~}~~}{yxvtz{{ytpotus|~}}{zyvw|{vePO\\krsvvuwz{{zuuutqpomrws]BDi|}|{|}{zz|zxz}|xoouvvt}|||||}~~~~~~~~}}~~~~~~~~}}}~~~~~~|{{|}~~~}zwy}}ywtrsttsuwz{{{||zyxwxyxxusrtwxyyvsonnmqvuvwyzzxusplhnuwsswz{{|}}~}z{ywwzzy{l[XWamrrsvywtqmnqrpmnrxwvttttsjkrwyywlmqtvxxxxuttw|~}~~}}}~}}}y|}||~~}{zzxxyzyxxxyzz{||}}}~~~~|zyy|}~~~~}}}|}}~~~}{zzzzyyyzz{zzyxxxwwwxwwvvuuuxxz{{{yyz{}~}{{}}}~~~~|xuutuuuttuutuvvwvvvvvwyyyzyxtuuvxy{}}zyxxxxy{~~~~~}}}|{{zyxxxz{}}~~}|{yxy{}}}}||||||{}~~|x{||yvuvututvwwvvwwxxwvtsqrsuvvwxyzywuutttttstuvvqh_\\j||wvwxywvvwxyyzz{{{{{zzyz{||||}}}}~~~~~~~~~~~~~~~}}}}}}}}}}}}}|{{{z{zzzxtqsutttttvwxyxxxxyz{|}~~}|{{{}~~~~~~}{z{~~}|{|}}~~~}~|xvptz{~ysrv~~~~}}~~~~~~~||}}~|zvx{|{~}xvw{}ws{~~~~~~}|||||zy{zwj[NVnuonsvwzzzwuvvtsrmklmqaRbw~~~~}}{yxz{yuuvxwu~}|{{|~~~~~}~~~~~~}|||}}}~~~~~~}}~~~~~~~{ywy|{zwuvwxvwz~}}}|{{{||zxtrpoqrtusqonomsxwvxz|}zwtqlhpwwsonsz}~|}|{z|}vaYU`ntuttvusldceec`fmspkgfghgacipuuuporuwxx{|{ywvw~~}~~}{~|~}{zzzyzywvxyz{{||||}}|}~~}{zz{{|}~~~~~}}~~~~}{yxxyyzz{{|{{zyyyxwwwwwvuuuuwxyzxronprtvwvutuxyyzz{zzxwvvuvvutsuvuvwwwwwwwwyz{{{ywsttuvwy{}~~}|yxwwwwxy|}}~~}}}||||{zzyz{|~~~~~~|{yyy{}}}|{{zzzzy|~}xy|zwututtutuvwxxyyxvttrrruvxxxyz{{zxvvuuutssstuvvqi_ar{}xxxxwvvvutttvxyzyyyxxxxxz{{{||}}~~~~}~~~}}}}}}}}}}}}}}}|{{zyyyxxwwvvwvuuuuwwxyyyxxyz{||~~~|zzz{}~~~|{||~~}vpqtx|z{{uw|pknv|||{||~~}~~~~}}~}~~||~{x{yrrxz|tlv~~}}}}}|{z{|{zzyyyvoWauxqouwwusqqrvywxvnkilwsnu~|{z}|zyz}|{||{zzz|{{}|{z{}~~}}}}}~~}|{{{{|}}||}}~}|||}}}}~~~~|zxww|}{yyxxuv|~||}|||}}{xuqonoprttuvurrwxtuw{}}{yvsploqpkhjqz~}z}~}{|}~|{{{|}qaXantruxzy|sh_]\\]\\_dfb\\YY\\^\\_bdkpqqoopswxxz}~~|{x{}~z{|zz{{{zywy{|||{|}}}}||}}|{zz{{||}~~~~~~}zyyyzz{{||}|||{{zxuuuuwwvvvvwxyywrnkjiikmoooquvuuuwwwvwxwxxvsqrtvvwwwxxxxwy{yyyxzxsssttuwxz|}}||||}}}~|{zwvvwwxyz{||}}}}}}||||{{z{|}~~~~~|{zzz{|||{zzyxxyx{~{yyyvuttttuuvwxyyyytrrstuwyzzzyyz{|{zxwvvuuttttuwxvqkadovyzxxwwwvvvtrpqsvxxxwwvvvvwxxyyz||}~~~}}}}}}}}}}}}}}}}}}}|{{{yyxxxyzzzyxwvvuvwyyyxxyyz{||}~~~~}{yyyz|~}}~~~~~~|wsvzxutvwrs||topw}}|{z{}}}}~~}}~~~|{|~zxx{~}zpqxwyodr~}}|{{{|{zyyzyyzywx{vykvxwwxxywtqjdfqvuywpjjr}~}}~zutuy|zxwy{{|||~}zyz{}~}||}~}}||}}~~~}}~~|yyyzzzzyzyxxxzz{||}~}}}}}~~}zy{ytuxz{zywuvy~}|{yyxvwxxwvurpoqrsuuvxwtkqzzxz|~}|zxusonmkhhnv|~|{xz{{zzyyzzzyvtuvy}~lZbnrqx}sd^]_^_b`WTVY[^[bhhjnoonnmsy{zyz{}~~~~~~}~~}~{z{||{zz{}~~}||}}}~~}{{{{{{||}~}~~~|{zzz{||}}~~}}~}}yohjpuwwvvvvvvwwvurnkgfgijlmpstsssuvwwvwwxvqmoruwwxxxxxyyx{}wwwu{yttttttuuwyzzzzzyxxxyxxwvvvwxyz{{{{{}}}}}}|||{{{|}~~~~~}|{{{{{{{zzyxwwxx{~~zxxwvuuttuuvwyyyyxrsuxxzz{{zzyyz{||{zywvvvuuuvvwyxuui]dlruwxwwvvvvtrpqsvwwvvutrtuvvvwwxz{}~~~}}}|||||}}}}}}}}}}}}|{{{zyxxxz{{zzyxwvuvxyzyyyyzz{|||}}}}|zxwwy|}~~~~~}|}}~~}{~~{~}wqt}vqu}}|{|}~~~~}}y|||~~zvy}{vrtxz|zxz}zz~ytjdr~~}yyyyzyxxzzyyxxvx{xvsvvwwwwz{vpfeejompsvppx}~~|wpkmuz{yyzzvvwxz}}tlmt{~~~~~~||}}~~}||}~~}|zxyz||{{z{|{{zz{{|}~}||||||{yxyzxvvxzzzxvvwzzzzyvsqoprrrtutqrttuuvwxxvpqvxy{}~~}{xvuqnkjilow}~}}zzyyxwvvwwwvsssvy}}|}~pYanqr{{j`^___bbXVUY^ffkpnjklmnmlt}}{zxz~~~~~}~|yyz{{{{|}~||~~~|{{|{{{||}~~~~~~}|||||}|||}}}}}~~~xd\\eqwxwvuuuuuuvuvvtpnljijhksrttttwxxvuuutmjmsvxxzzzyxxxxw||uvwtzzuvvuttsstuxxyzzxuutvvvuuvwxz{|}||||}}}}}}}}}||||~~~~~~~}}|||||{zzzzywvvwwz}{zzyxwvutuvwxyzzyvtwyzzzzzzz{zzz{{|{{yxwwwvvvwwvuvwysfagpvxxwvuuwwutttvwvvvusqopsuttuuvxy{}~~}}}||||||||}}}}}}}}}}||||{zyyyyz{zyyyxvuuwyzyxxyyzz{{{{||||ywvwz}~~~~~~}{{}~}}|{{||}~}plu}~wrw}}|}~~~||~|w{}{||~~{vwzyrptxzzwtw}~~|nbhv~~{xwxxyyxx{{zyxvtx|zxwwwxxwwy|wsssqpqlirusqv{}{ysijpv{{zxyyuuuwxzzmbepz~}||}~~}|{{|}}}{yyz|~~}}~~~}|{zz{||{zyyyxwwwxz{zzyyz{zyyxxxxwvtqommnoprvwwwwwwwwvwwvsrsux|~~~}|zxusomlmqsy}~}}|zywvuttsstttstvyz}~w_anru|~}~rhb`_^flc\\Y\\fpswxslikmmnov}}yz}~~~}~~~}{yyyz{{||}~~}}~~}}~~}|{||||{||}~~~~~~~}|}}~~~}|||}}}}}~~~x`]myzxvuttttttutnllkpty{wqnqqrssuxzzvtssphkuy{||}}|{yyyyx}zuvwuyzuvuutttssuwyz{{yvututtuuuwx{}~}}}}}}}}}}}}~}}}}~}}}}}~~}}}}}|{zzzzywvuvx{|~~}||{zywvuuvwxyzzxvvxzzyyxyz{|{{{{{{{{zyxxxwwwxyywvwyysgjsywxxvttwwssstwvtsuutqkjlnnpsuvxyz{~~~}}}}||||||||||}}}}}}}}}|||||{zyyyyyyyzzywvvwyzyyyyyzz{{{{{{|{yvuw{~~}}~~~~~~~~~~~}|{{{{zy{}~~~}}zy{ywtofhpsy{{vy}}}~~zxz}|zy|}~}{xwxvvxzzyuqsxzz||ockv{{ywwyyzzyz||||zxuyzzz{||{yuuy{z||{zzyrmrpjgkqusrnouy|~}{xttxvvxxysjgkpr~~~~~~~}||{zz{||}}{zyy|~}{zyyyzyxwwuuuuwxyz{{{{{zxvuuuvvuspnnnoooprvy{yxxxyyyxwtrqrtwy|}}|{zxurqqruwz}~~|zxtropppprrssux{~|yzkgnty}~|{~~zo`]]^hqlc[^nx{{|wnijlmpv{~}{{~}}|}~~}zyyyz{{{|||}}}~~}||}~~}|{{|}}}|}}}~~~~~~~~|}~~}|||}}|}~xck~|xutssssttttj_YYcipv}zspoprtwzzwutqllt||}~~~~|zyyzy~zwwxvyytuttuttssvyz{}}}zyxvuuvvvwxz|}~~~~}}}}}~~~~~~~}||}}}~~~~~}}|{zzzzywvuwx{}~~~~~}|{zywvvvwyyxxwwxzzyxwwxz|}}}|{{{{{{zzyxxxxxy{{yxx{yppswwwxwutvvrrqruspouwxvmihhhmswxyzzz|}||||||||||||||||}}}}}}}||||||{{zyyxxyyz{zzyxwwyyzzyxxyzzzzzz{{{xvvx{~}}}~~~}|||{}~}|}~~~{wry}zy}}w{}}|ztrusqnnmmljrzzy}}|||}~}zxy|~}}|~~|~~zxyz{||{zxutxzyxytnonlighox{{{{|}}|{{yvxusw|}}}ytuwttzzy{|}{xuja^^dijjlry|~{rouzzz|{ynjswm^~~}|||{{zzyyz{|}~~~|yz~|{yyzzyxvutssttvwxz|}z|ztqprtvwusqonopoopprvwwwxz{{yvussqqpqty{|{{{zxutuwxxz|}~~{yvspnljlpsuwx{}~~}}ulov{~}||}~{n]XZ^iomi^^t|~~}yrlilnt}}y}~~}||}|}~}yzwwyyz{{zz{{|||}~~|{{{|}~~|||}~~~}~~~~~~~~~~~~~}~~}|||||}~yiy}wtssssstuuvseWRZZX[ky~wqnnqtwyyxwtpkt|}}}}}}~}{yyyyy}zyyyxzyuuuuvutssuyz|~|zwvwwvvxy{|~~~}}}~~~}}~~}||}}}}}~~~~}}|{zzzzywvuwy{|~~~~~~~}|{ywvuvyyxwwyyzyxwvvxz|}}}|{z{{||{{zyyyyyxy{yyx{|wutvwvwwvvwwvutsqojjrwz{wqnlhltzz{||{{zzyzz{{|||||||||||||||||||||{{zzzzzyyyyz{{{{yxxxyyyxwxz{{{zzzz{{yxxy{~~~~}{zywvy{||}}||}~|{{}~~}vir}~|||tx~~zrqy{zuuyvlhox~zwz|zwstyyuv{}~~||}|}~~~|{|ztkq|}|{wtxzzxxyxtk^UOQcv|{{|}~~zwz{xsotz}~}}zwwvngowy{||{xwpe^ZZ]_`hnt|~~vgl~~ut}~q`~}|{zzzyyxxwyz{|~~zx|~|{{{|{zywwwwxxyyxy|~yywomnqtwxvsqoopponoopqstvxz|{wtqqssrporwz{{|{{zxwwyzyyz{}~~{y{|yyz{|}}}}}~~}|{wopw~~}||}{mZUX`jnnoghx~~}zuojmsz~|}~}||{{|~}}~|uxsrtwyzzzzyyz{{{{{{|||||||}~}||}~~~~~~~~~~~~~~~~~}|||||}}{u}{vssssssstuvwtpkb]WTZdjjpooquxyywwsrpw|{|||||||zxxxxy{{{{{z{zwwvvwvuttuxy}|yxxxwvxxx|}~~~~~~~~~}||{{{|}~~~}}}}}}}||{{z{zzxvuwy{||}}~~~~}}{zywtuyzxwwyyyxwvvwy{|}}}|zyz|}}}|{zyzzzyyzxxwyzywvvuuwywxxxwwvsqmiiouy||xspjkry{|}}|zyxxyyz{{{{{||||||{{{{{||||}|{{zz{|||{z{{||||zyyxxyyxwx{|||{zzz{{zyz{|~~~}{zyxwxyyyzyyz|~|zz{{}~|zz~~~}{y{}{}~|xy{x~{laep|{vvz}}{tmowuqw}~~}~~xvvwsal{}|}}{vtwxyyz{{yq]LCC\\u{zz{}~yvzzyqmv|~~~}{{zzqacu{||{yyzxm`XPMPQbxz||||xsw|z~~xq~}}{{{{yxvvvwxz}|z}~}}}}}}{yxyz{{{{yz|~ywtmkmpuz{yurppqpponnnnpruxz{zvqpoprrroquxyz{{{zxwxyyyyyz|~|vxyzz{|~}}}}}{{{{|ywvvuqqw~~}|}}}zo]VXcloqrrsz~}{vqllv}}}}~|}~|~{{zzyy{~}yyonsvxz|{yxwxyzzzzyzz{|}}}}}~~~}}}~~~~~~~~~~~~~~~~~}|{{{{{|~{||~|yusrrsttssuvxyvpkaa^^lppqvyzzxwtvwyyxyzyzyyzywvvyz||}}}|}|zzxxyxwvutwx||zzyxwxyxv{}~~~~~~~~~~}}|{{{{}~~}||}}}||{{{{|{zyvuvxzzz{||}}}||{zzywvy{xvwxxxwwvvwyz{|}}}{yz|~~~|{zzz{{{{zywwwwyyxwvttwwwxxxxvtqmihnsw|{zwsnjnvz||||{zyyyyzzz{{{||||||{z{{{{{{|}|{{zz{|}}}|||}|||{zyyyyzyyy|}}|{zz{}|{{{||}~~~}~~|{zyxxwwvwy{~~|yyyyyz{|{z|~||}~~~~~}}}~~~yw{}|v|q]]o~xtvxz{{}|uswzsr{~|~~~|{zov|ytx{yvvwxxxy{}|wjR=Gevyyyz|~~{xyyzuux}~~}|{{{|{ndlw}}{{{{ypcTFAHOc}~{yz{~~~xtxzyx~~}}}|{zyxwxy|}~~~~}~}}}|{zz{|}}|zy{~~{vqnnqvz|{wsrrrrponmmlmosvyzyvrppqrrqpqtwy{|{zywwxyxxyz|~{ywsoqssstv|~~~}|zyzzzurrssrsx}~}|}}}}yreXYhoptw{z|~~|wqmlv}||{||zzz{||}}}|{ywxz}}uswx{zywwvtstwyzzzzz{{|}~}}}~~~~}}}~~~~~~~~~~~~~~~~}{{zzzz{|~{{{|xvtssrsttstwz}vrgbkqqptx{}{xuy{{xuvvuvwwxwvvwz|{{~|||~||zz{zyxvvwxz~}|zyxyzxv{}}}}}}}}}~~~~}||{|||~~}|{{|||{{z{||}{zwuvwyyyz{{{{{{{zzzzzxxzxwwwwwwvvvvwxz{||}{yy{|||{zz{{||||{zxxxxzzyyxurquwwwxxwurniilpsxz{zxrkksy{||{|{zzzz{{{|||{{{|{|{zzzzz{{||||{{{{|}}}}|}}}||{zzzzzzzz{}~}|{{|}~~}||||}}~~~~~~}{yyyzyywwy{}~~|yxvuwzzxxy{~|{{{|}~~~~{wuw{~~|su~|vr}}j^nz{wuuuux||xz~tv~}}~{w{}{z~}{vxyyxxyyyyz|~~{xbEWswyzzz{|~}{zy{{zz}~}|{{{{{}xgbpz}}}}{ytlXCBNcoyzzyxz|~{{~~{uosxz{~}}|{{{{}}~~~~}}|||{z{}~}{zz}~{wusssw{||yuttsrqonmlkkmquxxxvsrrrrqqqqtxz}}{yxvwyzyxyy|~|ywtrpqsstwz~}~~}|zz{zzsqprttux|}||}}}|zum[[jprv{{{|}~~|xsrrttsqtvwxwxyz|~~}{yyz|~~zw}xrooqsuwyzz{{{{||}}~}||}~|~~}}~~~~~~~~~~~~~~~{zyyyz{|}~{{yxutssssstutv{qlnrsqpv}~ywz{yursstwxxxxwwxz|{yzxzz||{{|||{yyxxy{~~|zyzzzy{||{||}}}}}~}}||||}}~~|{{z{{{zzz|}}}|xwwxzzzzzzzzzzzzz{{zywxwwwwvvvvutuuvxz{z{ywwwwxxxy{||}}}}||yyyy{{{zxwsptvvwwwxwuqliiomovz{{wplrx{|}|}||{{{|}|}}}|||{{|{zzzzz{{||||{{{{|||}}}~~}}|{{{zzz{{z|}}}|{{}~~}||}}~~}}|yvuwx{|{ywy{}~~}zxsqw}}{zyz||}}||}~~|}}}yqnqx~vemzyyw}~wmrvuyxuutsx|}|~~yz}|}}yxz{~|y{~{uy{}||||{zzzzz|}~zwm[fux{|{{{|~~|{{{|||}}||{{||||{oisz}~~~}{yveQQ^ssljspqy{xvw|}yuw|}}~~~~~}~~~~}}~~~~~}}|{wvz|}}}|{zxwxyyxxz|}{xuuutspmjiilortuvwvtrsrqqqpqtx|~~|ywvwyzzyxyz|zxvutsstuvy{|zy{~~}|z{{|zspqttuvy||{{~}}}|xq\\_msvxyzzz||~}{xvxwqnqqrquwwz{|}~~~}|||}}~{uljntxzz{z{{{{{|}||}~}|||||~~~~~}}}}}}~~~|{zyxxyz{}~||zvsssssssttsqx~olptwsqr|~xwyxuqprtx{zzzzyyz{zzvstuwz{yyyz{~}}{{zyyz{}~|{{{{{|||||}}}}}}}}||{}}~~}||{{zzzyz{|}~~}|zxyy{{{zzz{zzzzz{{{zxwwxxxxvwwvvuttuvwwwwutsssttvy{|}}}}}}}{{zz{|}|yxursuwwwxxyxsnkjntoty{|{wtsw{|}~~}}}}}~~~~~}|||||{{zzzzzz{{|||{{{{{{{|}}}~}}|{{{{{{{{{{|||{}~~~~~~}|{xtqpswyzxxy{}~~|zxspu{~|{zz||}}}}}}||}||zokpx~~}pYcv{z|yy~{yvywzzwvvvz~}}~}|}~wppuy~|z{|}~~|wy~}|{{{{|~~}wvtlovy{||||}~}{{|||{|||||||{{|{wrw|~~~~|zzzumlsvxrpm^fy{{{y{~~zwz~}~}~~~|{{{|}}~~~~~~}}{xuswy|~~~{wvw{|}{z{|}|zxwwvurnlnrvxwuttsssrrrqppqqty~|ywwxz{zzyxwxyxxxvtuwxxxwtsrrv|~}}}}rorvuvw{{{x{~{}~|yt^drvyxxyyy{|}|{yyzwoowxyvxyy|}~~}}~~~~~}}}}~~~{wy~~zzqjouy{|||{{zzz{{||{{|}||{{{{||~~~}||||}}~}}}{zzzzyyyz|}|zvsssssstunb\\fpidq}pmmrywroz{wvwvsqrux|~||||{{|{xwropqsuuttuwz}~}||{zz{|}~~|||||||}}}}~}}}}}}||||}}~}|||||{zz{{~~~}}|||{{{}}||||}||{{{{{{zyxxzyxxvwwvutsssttttsrrqqppqswz|}}}}}}}}}|{{||{zywttvxxxyz{zwqmkn|wwy{|||zwxz|}}}||}}}~~~~}||||||{{{{zzz{{||||{{zzzz{||}}}}||||||{{{z{{{{zz~~}|xrkhjnquvxz|~~}|zxwuv{}~}{{|}~~~}|z{|}|pisy{~~||q`q}~wpqz}|}~~|}}{}~~~~~}{z|}}qilsw}~}{{|~}|~~~|zz{|~~{rsuwwx{||||}~~}|||{{zz{}~~~{zz{|{}}{wx{}~}xwzxysbeu{~~~}{{~~}}}~~~~~}{zyyz|~~~~~~~~~}}}}{wvwy|}~~|yvwz|~}||}}}{{zxxvtqosw}xsponnorsqnnpuuv{|xwxz{{zyxyxxzzyxutvwxwurqsuvvv}~|~~onsxvvx{{yv{|y{|{ywdkvxxyyyyz{{|{zz{{wru||ztv|}}~~}||~~}|}}}}}}~~~~~|vu}~wwyxu}xmnvz|||||{zzzz{z|{zzz{{{zzz{||}~~~}||||}~~~|{{zzzzzzyyyz|~}{yvsrstttvqaLQ^YMOkvrnrxyupx~yuuutqrtx|~~}}~~}}}{xtomnnpqqpprsw{}}|{||||}}~~~~~}}}|}}}}}}}~~~}}}}}}|||{}}~~~~}{{|}}}{{{}}}zzz{|}}||}~~}~~~~}|{{|||{zyyzyxxwwwutsssssrrrqppqpnnoquy{|}}}}}}~~}|z{{{yyxvvwyyyz|||xspnlz|z{{{{{{zzzz{{||z{{{}}}}||{{{|}}|}}|{{{|||||{{zyyyyz{|}}}}}|||||{{zz{{{zwtz~~}}zsjfeeinrwz}~~}|{zzzz|}~|||}}{yz}~~wnwxw{}{|xt~~zwy}~zy{}~~}}~~}|yxxz|ylhnvy}~~}{||~}~~}|zyz|}}zruy|{{||{{||~~}|{{{{yy{~~zxyz{|~}|{{zwx|~|ysruwxxttqpy|}~~~}}|xy~~}~}}~~||}||{yxz|}~~}}}}~~~}}~|||}||}}|xvw{~~~~}|zzxxwvtrqtz}vpljihkorolmntwx{~}{xxyz{{zyyyyz{|{zxvwxyxwutvz{zxy{}|||mouyxxxyvvuyxwwyyxyjoxyyzzzzzz{{zzz{zyvy}}|ru|~~~~}|{{|~~~}|{||}}~~~~~~~~~~}{||vpx{vlsmnwz|}|||{{zzzzzz{{zyyyyzzzz{{|}~~}|||||}~~|{zzzyzz{{zyz{|}|{xusstuuxudSJ^iULQk}vopwzytw{wvvtsruxz}~~}}~~~}|zxrmmoopoonnpqty||{z||}}}}}~~}}}|}}}}}||}}}}~~}}}}}}||{{}}~~}}||{{}~~~}}}zzxwwyz|~~~~~~~~~~}||||||{zyzywxxwwtssssssrqqpooppnmnoswz{|||||}~~}|{yzzzyxwxyzzz{}}|zvtulv}zzzzyxxzzzywwz{yvvwyzzyyy{||||}}~~~}|||||{{zzyxxyyyz{||}~~}}}|{{zzz{||zvpw~~~~yqkecehmt{}~~~}|||||}~~}}}~{y{{xxuw{~}{{}~}~~uty|~}zyz|~~}zwvvy|~~vmpw{|{y|}}}~~}}}~~~}|{zyxy{|}{tx{|||||{{{|}~{z{{{yxz~{vxyy}~zwvtvvxvvvvurqrtux~ylrvy||zxxywxzzzz~}}~~~}~}}{yyz|}~}|{|~{{|}}~~}~|}}~|vty}~}{zyxwvvusqqtutnhfeehknmkkkorw{~~|zxyz{{zzzzyz{||{{zwxyzzyyxy{|{ywxz~{xzprw{zxxxsuuvustuvx|svyzy{{{zz{zzzzyyywwxz|}xx|}}||{z{zz{{{|~~}}|{{|}~~~~~~~}|||}~~~~~~zs~~z~okyxtxonv{|}}|{{{{zzzyyz{zyxxwwxyyzz{|}~~~}|||||}~~~}|{{{{zzzzzz{zz{|~}}|zxutsuvxzkRKUiiPIQlyopwzw{wswwsttwz|~}}|}}}}|{ywrnnoppoonnoprv{{{{||}}}}}~~~~}}}}}}||||||}}~}}}}}}||{{}}}}||{}||}~~~~}}ywvwwz|~~~~~~~~~~~~~~}}}}}|{zyyywxxxwtstttttsrrqoooommmnpvy{{|{{{|}~~}{yyzyyyyz{{{|}~~}zxy|uuxyyzyxwvwyzxttvxxtrsuvvvuwz{{{{||}}}|{{{|{{zzyxxxxyyyz{|}~~}{{zzyyz{||zxux}}{vmgdeipw|~~~~~~~~~~~~~{y|~||yyy|}|z}~}~yx{~~~~|wvz}~~}zxwwy|~}vsy~zw|~}~w{~~~||{zxwwxy{||yz{{|}}}|{{{|~}zxyzzxx{|yrswxwxzwxxwuutrponortsrsv{}|yy}zwwtruyxvvxy~~~}{{{|}}~~zxwz|}|{{}~~}}||~{tty}~~~}|{yxwvuuusrsuwuoifdefikkjiiknrx|}{yyz{{zz{{zyyyz{{z{yyz{||{yyz{ywvvwz~{w~ytvx|{zzzuvvtrppqtxzvwxxy{{{zzzzzzzzzzywxy}||}|yxwwyzzyxyz|||||||}~~~~}||{{{|}~~}|||}}~sov}nm~~x{|ov}}~~~|zz{zzzzzzzzyxwxxyyyyyz{|}~~~~}||||}~~}{zzz{|{{z{{zzzzz{|}~}|{zwuuuvxzx_JJ^i]IHYv}qovztxstxxsvwy|~~~}|||||{zyvrooopponnnnoqsy{|||}}}}}}~~~}}}}|||||||}}}}}}|||{{{|}}||{|~}}}~~~}}|xvvwx{}~~~}}}}}}~~~~~}~~~}|{zyxwxxxwutuuuuuuttsponnmllmpvz{{{zzz{|}}}|zxyyyz{{|}}}}~~}{zz|xttxz{{zwuuw{zvtrsvurrsttttvyzzyyyz||{{zz{{{zyyxxwxxyyyz{|}~~}|zzyyyyyz{{zyyz|~|zz}~~}}~|umfcdjqx~~~~~|{}~}~{z{}~~}{|~~~{yw{~}{{|~}yx{}}}||{{{|~|ww~{x}~ywzt{}}}|||{yxwxz{||||{{z{||}|{{{|}}{xxxzyxx|xtsnrwwtssortwwxwstupmpwyzz{{{|}~{yz{ypsuwzwsty{}}}}~~}|}}~}{ywx{~~|yxy|}}||z{}~xsvy{{||{zxuuutsrrrvz|ztnjhgghjjjiijlpv||{zz{{{{{|{zyxxxxxxxuwxxz{{xwwxvuuvwx|}y{ywyz||{{{zzvromlnrvwuuwxzzzyyyyyzzz{{|}{{|}|yvtstwxxwvwy{||{|}~~~~~~~~~}||{|{|}}}}|||}~~}sqq{}nr~sz}~}}{z{zz{{{{zyyxxyyzzyxyzz||}~~~~~}|{{|}~~|zyzz||{{{{{zzzzz{{|||{zzxvvxzzzqUIObbREJjuqvzv}wx}}wuxy{|~~}|{{{{zzywsooopponmmnnoqxz}}}}}}}}}~~}}}}||{{{|||}}}|||{{{{{|||{{{|~}}}~~~}|zvwwxz}~~~}}}}}}}~~~~~~~}|{yxwxxyxwvvwwwwvvutronmlllmqw{{{{zyz{||}}|zxwxy{}}~~~~~~}|zxvvvyz{{ywutuzzxwurstttuvvuwyzyzzyx{|}{zzzzzzzyyxxwwxxxxyz{|}~}|zyyyxyzz{{{zyz{|}|yvx}~~}{|~~{ukebejs|}}~~~~}}~~|{~}}~~}|~~yvuty|}}}~}||}|{{|}~}zvy~|{~~yt}z|~~}}}}~~~|{yz{}~~}}}}|{z{{}|{{{{{zxwwxyxyy~~tnqsvxwuurnklrw{{zyxsnpw{~}{xxyz|}yvxyrv}{zvstz}}|}}}}~}zyyz{||{xwxzzywvux{||{zz{|~|xyxxyyzzywtuuusqqty~{vrnjghjiihijlov||{zz{|}|||{zyxuspoppotusqrrrqqrrsuuwwz}}z{ywxy{|||}~xroljmtuuvzxxzzyyyxxwxyz{{|}}}|~}zxroqtvwwttvx{|||}~||}~~~~~~~~~~|||}}}}}}~~~~~~|~otrvyv|~}~{{{{{{||{zyxxyzz{ywxzxz|}}~~~~}}|{|~~}{zzz||{{{{zzzzzzzz{{{zzyyxyz||yjMJU^VLFMxzrtwz}wwz{||~~}}|{{zzzyxtpooppoommmmnqw{~~~}}}}}}}}~||{{{{||}}|||||{{|{{{|{{zz{}|}}}}|{zyxyz|}~~}}}}|||}}}}~~}~}|zyxxxyyyxxxxxxwwvvtpnmlllmqx{{{{zzz{||}}}{xxxz|}~~~~}}|zwx{}z{{{ywvutuvwwwvvvvwxyyy{{z{{{{||{{{{{{{zzyxxwxyyyyz{{}}}{xxzyxyyzzzzzzzz{{{zz|}~~|{}{shbackwz|}~~}}}~|~}y{~~~~xrty{~~}}~~}{zz{}~|ywz~~}|}~{z~}tvy{||}~|{|}~~~|zy{~~|||{zyxxxyxxyy}~ukpx{|{xtoh`blwxzyvusqrwyzzwuuxxx{}yvvz|~|{wtuz|~|{z{{|}}{xwwxz|~~~zwttuuuuuvxz|{{{z{}}}|yvvxyzxutuwvtqruz}zxurnlkjjjklnpv|}{zyz{|}}|{zywuplkkilprolkknnnoprtvwwvz}|{zxvvxz{||ypkegntrswzxz{zyyxvutvxyzz{{{zxz}~|yvpnquwvvtsvxz||}~~~~}|{z{|}~~~}~~~}}~~||}~~~~}}~~{}wx}{~~}{zz{}}}zyyyz{y{yvv{uxz|}}}~~~}}|}~~~|z{{{{{{{{zyyyyyyyyyyyyzyz{{|}zlHKVWMKKa}~|||}~}}yqtuz~{zz{|}}}~}}|{{{zzzzyvroopppommmmnqw}~~~~~~~}}~||}|{zzz{{|}||||{{|||{{{{{{{{{|{||||{zyxyz{}}~~}}}}}}}}|~}|~~}|ywwwzzzyyyyyyyxxwvromlklntzz{{{{{{|||}}}{yxxz|~~~}}||{zyz|}|}|{zxvussttuwxyxwwxz{z|}}~}|~~~~~}}||||{zyyyzzyyzzz{||zwsuyyyyyzyzzzyyyz{|}~~}{}vkd`aguy|}~~~}}~~~}~~zwz}|}}~ystyz}~||~voty|~|{{{|~~{{zz|~~|{{}~zxtrlkqutuz~}}}~~}{z|}}}}|zyyyyzzyy{xyztjmt{||ytnh\\Yiwtspsywvuwxyxvtuwyuquzzyz|}}|wvvy|~|zyyyz{~}{yxwx{}~}zvssstuvvvwy{}}|{{||}{ywvvxywursvwuwx|~}|zxspmnoopqsx|}}{yyz{|||{zyxumgfffhklkjiijjklorvvvusuwxyxxttuwy{}xng`frwoqvwwz|||{zwuuxyyyyyxxvvw{}|zyunntyyxvtsvxz|}~}{zyyyzz{|}~}}~}}}~~}~~}{~}zzzz|~{yyy{|z{yuryquy|}}}}~~~~~~}|{zzzz{{{zzyxxyyyxxxwxz{|}||}{nHP\\SKLRuvxutuutttwqsvzvs{|}||||||||||{||{zzzzzxtoooppommnmorx}~~~~~~~~~}}~}|{z{{||}|||||||}|{zz{{|||{{{{{{{zyxyz{|}~~~~~~~~}|||}||~~~zwwwz{zyyzzyyyyyyxtqnljlqx|z{{{{{||}}}}}{yyy{}~}}|||||{zz{||}|{zxwutsttuwxzyxxxz{z{}}~}|}~~~~}|{zzz{{zyyyyz{zwqnrwxxyyyzyywwwy{|~}|z{}}~~{rha_fvz|}}}}{}~~~{||wx|~}yuw|}yvy{}~}{~tacr{~}||}}|yx{}~{zz|~}unjmoeijdfs}~~~~~~~~~~~}||||||||zzzzzzyxxyxsprigluyzyuqlc\\iwokir~{ywyz{zxuvxyyoltyzx{{|{yxxz|~}{zyxyz}}|yxxz}}yusrsuvvuvvw{|zzzxwwyzzxtsvxvqruxxxy|~}{xwwwwvuvy|}~}yvxzz{zyzz|zsligfghiihiiijknqsvusonrrortxvtuwy{}wngcmz}npvvvy|~}zyz|{{zxwutrtwy{zywsmqxzzzywvvxzz|}~}zyvvwwz{||}~}}~~~~~~~~~~~~~}zwuvvvw|}{yyyz{yzzxovmsy|||||}~~~|zyxz{{{zyxxyyyyxwvvvz|}~|||zlGUbQJKVz~yuvtttspmnqorw{trzz{||{{{{{{{{{{{zyyzzzzvonnooonmnmotz}~~~~~~~~~~~}{{||}}}}|||||}}|{zz{{|}~}}||{zzyxxyy{||}~~~~~~~~~~~}}}}|}}}~~zwwxzzyyyzzyyyyz{zwtpljlsz}z{{{|||}}}}~}{zzz{}~}|||}}}}|{{{||{{zywvuvvvwxyzzyxxz{zz||{{{}~|{zz{{zyxxxyz{{wnkorwyzyyyxvttvy}~}{z{ywxz}|zkbamz~~}|}|z|~}|}|z{~{xz||wpou}~|~~|{|~}yhiw}}}}{xvx|~{yyz{}{tpouwkhcQVn|~~}~~~}}}}}~}}}}|{zywwz}{yyzzywwxxtomiecjqtvwvtnekxroos}}{z|}~|xtssvypkopv|}}zyxzz{}~|{{zyyy{~yvz}|ywvuvvutuwxyzyxxurrtwxxwuvwwuvxyxwwy}~}}~~}{zyz{}~~{uvyyyyxy{||wrnkhgfhhgiijkmpsuvuqlkpnffowyyyz{|}wqjhv}zssyzzy|~}{xsponswy{zyvrmqwz{}|{ywvwxz||{xwuvwxz{|}~}}~~~~~~~|||||||}~~~}z|~~~}}{wusqppooqx~|yxyzzyyyxnvkry|||||}~~~~~|{yyz{{{zyyyyzzzywvuvy{|}{{|znJR\\KIL^x{zyxxxxxtmjlmsy|xw{z{||{zzzzzzzzzzyyyzzzzvpnnnoonmnmpv{~~~~~~~~~}||}~~~~}|||||||{zzzz{||}}|{zyyyxwwxyz{||}}||||}|}}}~~~}}}}}}~~{xxyzyxxxyzyyyz{|{yvrnlou|}{{{|||||}}}}|{zz{{}~~||||}}}|{zzz{{{{zxvvx|{zzzyyyzyyz{{{}|{|}}|{{{{z{z{}}|zyyumfisyzzyzywtrtx|~~~~~}vpsy|~pdct}~~~}~}~~~|zz|~~{y}}zzzzyspv||zy{}|{z|~~yy~}|zwvx}vrwzz{}~}zxwxvwpl`HWv}}}}}~~}|||}}}}}}}|{yywwz|wtx{zxusrqqmjec_horuxxxunqyxxzz~~}|~~|vroopsvssvrv{}}{xx{z{}~}}|zyyy{~~~~~~~~}||zwtsuvwwxxxwurqqtvwxxxxxxxyxxuvy|}~}}~}||||~~zxxwwwxz{{zxvwurnkmmkkklmoqrtvuskgmj``lw{|||}}~yvnmwzuv{|xpmnqtwz|{ywtkovy{~~~|yvvvxz{ywvuuvwy||}~~}~~~~~~~~|{{||||}}}|}|{}|||{|ywutrqqppswwutuwyyyxxxyyvkp{}}|||~~}}~~~~~~|zzz{{{zzyyyz{{zzywwwxyz||}|xaQVKK[rxzzzzzzz|xmjmquz|{zzz{{{{zzyyyyzzzzyyyyzzzwqonnnonmmmqx|~~~~~~~~~~~}|}~~}|{{{||{zzyyyz{zzyxwxwwwwwwxxyz{{{{zzyyyyz{{|}}~}}}}~}{yyzzywvwxyyyyz{{|zyuoosy{||{{{|}}}||||{{{zzz{{|}}||{{||}|{zyyyyzz{zxww|~}{yxxyyyz{{{|{{|}~~|{zz{}~~|xxzzsgcluyyy{zxtqsx|}~~~~~~~|rnsy~uhew~}}~~~~~|vy~}|}~~}~}{zzyyyuv~|vpw~}}~~}~~~~}{ywx{~znmxz{}~}zvtuyuvws_Pj}xy{|}}|{{|}}~}}}}|{z{||{xniqy{vqpoomjia^eiosvvswwpqw{}~{{|}{vqnpsuyzy|{uwz||{xwyx{}~}~~}|{|}}zwutttuuvwvsqpqsvy{{{{yyyyxst~}}~~~~~~}}~}zwvwxy{{{zzz{zzzwvvurqpppqqruutkdfd`alx}~{zuuwvou{trswxz{}|zxumouy|~~}zwutwxyxwvvvvwy{{|}}}~|{{|||||||}~{zyz{z{||}{zwutsuwwuqosvzzzzyxy{ufn{{}||}}}||}}~~~}~}|{zzzzzyyyz{|}|}|zywvwx{|}}~vXUKRp~zzzzzzzz|yolsvxz{zyyz{{{{zzxxxxyyyyyxxyzzzxsponnonmnnry}~~~~~~}~}~~~}~}||}~}|{{{{{zzyyyyyyxxwvvvuvwwwvwwxyzzzyyyxxwvvwxyz{||}}~~}{yyyyxvuvwyyyyzz{{{zwrqv{|{{zz{|}}}||{zz{{zyyyz{{{{{{{{||{zyzzzyxy{{zyz}~{xwxxyy{||}||{|}~}zyxyz{zxy{}|||{xocdoxyyz{yvtvz}~~~~}}}}}}~}wuz~wliy}}~~}}~~~~~y}|z||z{}~}{zzyyzzz}}~~zv{~}~~~~}}~~|{yyy{|xpsyy|~}|zvvx{xx|ygcvypnv|~}{zz{}~~~}}|{{|}}|yneit{tnmppjec`ckmquwvuwrhjrz}zuuxxvsoquy|~}{zxuwz||xsuww|~~~|zyy{~|ywvutsrssrqpprux{||{zxxxxsr}~~~}}~|ywwxzz|{zz{{yyz{{{||ywsrrqpqtutmglqsvx}~}~xou{yyzyy{|||zwrrvz|~~~|zwutvxyxxxxwwxz{{{|}|}~~|{|||||{|~}}{zyyyz{|{yvvwyyyvtuwzz{{{zyy|qt{x|}}}}}~}}~}~}}}|}~~~|{zxxyzyyz{|}~~~}{ywwwyz|}~}cUJ^}}{zzzzzzz{zrrwxzzzywwx{||{zzxwvwxxzzyxyzzzzyurpnnnnmoquz}~~~~~~~~~}}}}||}|{{|~~~~}||{zzzzzzyyyyyxxwutuuvwxyxvwwxyzyzzzzzyxwvvvwwxyz{|}~~}|zyyyxwuuuwxxyyyzzz{zwssw{|{{{zz{|||||{zzzzzyzzz{|{{{zz{{{{{z{}|zyy{||{{|}~~zxxxxyz{|}~|{zz{}~~zxvvttsstw{|{|zzsfairwyz{zyyz|~~~}|||||{|~~~yqm{}|~~~}{z{|~~~~|xz{z|}|zyxyzz{{||}}}~}}~}~~}~~}}~}}{|~~|zyz|}zytu}||}}{|{zutyzttz{vhcq|~}zxy|}~~~}|zz|}}{ywqluxslkornd\\gqpqrstuvtj`elqt|}xqpttsolnuz|{vvwvwxz{ztoprtz~}}zxvwz|~}|{yxvvuutsrqrsvyzyyxwwwvrsy~~~}~~}zxxwxzz|{zzz{yyyy{|~~}{wtsqqqtttqow}~~}~|~}~~}||zzz{|}|zwvwy{|}}|zxvuwyzzzzzyyy{{zz|~}|{|}~~~}|}}}|}|~{xyyyzzyz{}|yxwxz{zyz{yyz|}}{yu}xy{vy}}}~}~~~||{|}}~{zywwxyzz{z}~~{yxwxyz}}}kWKi~zzzzzzzzzyzwwxyzzytqsx|}|{zzxwuvwxyyyyyz{{{zxtqomnmnqsx|~~~~~~~~~~||||{{{{zzz{|||~}{zyyzzzzyyyyxxwvuuvwxz{{zxxxyz{yz{~}||{{yxwwvwwxyz{}~~~}}}|zxxxxwvuuvwxyyyyyzzywttx||{{{zzz{{{{{zyyyzzzzz||}|{{zz{{{{z{|}{yxy{{{zzzz{~|yyyxwwy{}}|zxwwyz|~~~|yvusssrsttuxz{ztiadmvyz{{||}~~}|{{|{{|~}zvs|~}|}}~~}~~~~~}wz~|yxxyzyz{~}~}xx~~|}~~|{}}}~~}}}}{y{~|yz}~}vkq~{{~~}|wpqy|{z|zvniw}ywx|~~~}|zyz{|zxyyvvuqonowwmas~wwrjmrvunbddgjpwyqpuutnknuz|{yxwuwyzywpjgdfs{~}zwuuwy{}~~}|{{{{{yxwvussuuvvuuvvursvz}~~~~~~~~}|yxwwxyz{{{{z{zzyz{}~~~|ytrrssttuswy~}|{{~|}}|}{{zz|}|zyxxyzz||{zyvvwy{|||zzz{|{zz{}~}}|{|}~~~~~~~~}~||}}}}}~~zxxz{{{{{}~~}zxyyz{||||}|yy~zyxxwqv}||}}|||}|zz{|~~}zyxwwxy|z|{~}{yxwwwz|}sWTq|yzzzzzzzzzzyyxyzywomux|}{zzzywvuvwxxxyyz{{|{zvrpnmmosw{||~~~~}|{||{{zzz{{{zz{}}{yxxyyzyyyyyxxwvvvwy{}~}zxxxyzzyz}~~~}|zyxxxwwwwxz|}~~~}}|{zyyyyxwuuuvxxyyyyyzyxuux{||||{zzzzzzyyxxyzzz{{}~}{zzz{{{zz{{{zyyz{{zyxxxz}~}||{yyy{|||zwvuvvxy{}~}{ywusssttttuwyz{ypdcnvy{{||}}}~~~}}||||}~|{{zx}~}|||}~|}}~}{|~~~|{{{{xy{~{vy~|~~{y|~}}}{y{~~{{}~}wpv~||~~~}{uosz|}}|zxtwz}yvx|~~~~|zxyz{ywyyysrqsusxysv|}~|hZdqwuroe^`dlw|vvxyxusuy{}{yyxwyzzxvqkjg`p|~~|xvutuwz}~}}~~~~}~~}{xwwvtsrtvvtrrruz~|yy|~~~~}}~~|zxwwwxx{|||{z{{|||}}~~~{uqruvvvvwyz~~}}|{{|~~~}|}}}|||}|{zyxwwxz{{zzxyz{}}}}{{{|||{z{||}}}}|{|~~~~~}}~~~~}}|||||||~~~}~~}{yxy{|{yutvxxzzzzux}~~~}|zz~|||}w{~}{}}}~}|}~}{{|||~||zyxxxyzxqv{}|ywvvw{|w]^wzyzyzzzzz{{{{yxxyyvlnyy||{zzzyxwvvvxyyzz{|||{|xtqomnqv|~|~}}|{|}~}{{{{|||||||zxwwxxyzyyyyyxwwwwx{~|zyyyyzz{~~~}||{yxwxy{|}}}}}}|{zz{{zxuttuwyyyyyyyyyuuxz||||{zyyyyyxxxxxyzzz{}~~{zyzzzzyyyzzyyyz{{zyxxx{}}|zz{}}|zxvutuvxyz||}~}zyywtrrstuvwxy{{||tgeqxz{|{zz{|~~~~~}}}~|{{}}|~~}|}}}zx}~~}zy|~{z}}~{z}~}}~~|z|~}|~}~}|||||zusy}~~~}||}}zy{~~~}~~~|zxxyyxvvwtnjrz}|yux|{y|t`XgsyxyznXTdu|{zyz{{{|}~~{zwx{|zxwvwptxs}~~}~}zwutttvz}~~~~~~}|{zzxwutvwwusrprv{~ystz~~}|{|}~~|zxvvvwwz|}|{zz{|||{{|}}{xuvxyyxxyxy|}}}|{z{|~~}}}~~}}}}|{zyyxxxyy{{{{{|}}}~}|{{{{{{{{{z{|}}|||~~~}}}~~~~}||~~~}}|||||{{{|~~}|{zzz{}~zqgdefmtvtrnzttw|~~~~~|}}}}~}}|~~~~}}}||}|{zzzzyyzzsx~~~~~~}{ywwwzzyihzyyyyz{{{{{{{zxwwxyvoryz|{{{{{zywvuuwz{|}|}}|{}zvqnnosy~}{{{zy{{{ywvxz||{yyz{{|}{z|zyvwwxxyzyxxyyxwwwxz|~|{{{zyz{z}}{zyz{{||}}|{{zz{|{zxtsstvxyyyyyxxxvuwz||||{yxwwwwxxxxxxyyyz{|}}{yyxyywvvvwxxyzz{{zyyxz{}}{z}~|zxvuuuvwwyxxy{}~}|zxxwusstuvwwxz|}}|vkhty{||zwvwy|~}}~}}~~}}~{z}~~}~}|~~}|}~}{|~||}~}}}~}{{{{{{zxy}~}~~||||}~{z|}~~|{yxxwvuvtpklsw{}|{{zxwvf]duz|{{~w\\Ndz{{zyxvvuwy}~~~}}~~{yxxvz~~~~~~{ywvtstvy{~~{yyxyyxxxyz{zxwtsqrtx|{wssy}{yy{}~}zywvuvxz|}}|{{{||{yxxyzzzyyz{{zzyxxy{||{zyz|~~}}}~}}}|{{{zzz{{{{{|}}}~}}||||{zzz{zzzxvuvyzzzz}~}||}}}}}}}}}~~||{z{{{{{||~|{{{{|}~vjb^_ltsl_h|vggw~~~|{}~~~}}||}~}z}||||{{zzzyyy{w{z~~}|{|}}}~~|{yxyxzusywyzyz{|{||{zxwvwxywtuxz{{{{||{zxvuvx{}~~}|{|}zvqnoqu{~{wwsportuqonqtwvursuyyzyxx}zxwwxxy{zyxxyyxwwxz|~~}||{yxyz{~~}{{||{||{zzyxyz{zywsrrsuvxyyyyxwxvuvy{||{zxxwwwwwwxxwwwwxyyz{{zyxwwusssstuvxyzzz{zzz|}~}|~~|{yxwvuuvwvutvy{|{zxxxwvvwwxxxxyz{yzwlivz{{{xtrsw|~~~~~|{}~xx~}}~~|z|~~~}~~~~~~}|zyz}|{|~vv|~}{{{zzzyy{}}|}}yttx|{vw{}~}||zywtsuxxsoopqu{~|zwtrnbdr}{{zj]kzyywwurpqrvz}~yxxy{|}~x~~}{yxvuuuuwz}~|{{{|{yyyvvxyyxvtstuvxywvvz~~|yxy{}}{zywvvwy|}~~}}}}|zwtstvwxyyz{{{zxwvwyz{{yyz{}~}~~~~~~}|{{{||}~}}}~~~~|zxwwzvxxz{{zywtrsuxzzz}~||||||||}}}}}~~~~}|zxwxz{|}}~~~}||{{|}rc[_ppl_av}hZq|~~{yx{|}}~~}}~|}{rtz~||||{zzyyyyxyz|{}|w{yxyz{|~}zyywzyxzzz{z{|}|||{zwvvwxyywwyz{{{||||{ywvwz}~{zyz{yupoprvz{vvtppsuvronosvwuprsvtrqsy}zyxxyyz|{zxwxxwvvx|~~}~~~{xwyy{~~}|||{{{zywvuuvwwwvtsrrssuwxyyyxwxxvuwz||{ywvvvwwwwwwvvvvwxxyyyyywvusqpooprsuwxxz|}||~~~~~~~~}{zxwvvwwvuttvyz{yxxxxyyzyyxvssutvxyspyzz{{xtrsv{~}~~~|ywz~~~rl~|~~}~}yv|~~~~~}zyy|}|yy{~~st}}{{|{zzzz{|||}~{topv||wtw{}}|||{ywuuwz{xrpmlq{~}{xoihlqw|}|{|}|vrt{{zwuronkkry{~~zy}yxwy{}}|y~}{|~}|{yxvttuw|~~}}|{{~~{vstuuuttuvvvvwwxy{|{zyxz|~}{yywusstw{}~~~~|yuqoqtvwxyzzyyxvtstwyzzzz{|}~~|trrw~~~}||||~}ytppnvxyz|}}|zwuttvxzzz}~||||{{{{}}~~}~~}}|{zxvx|~~}}|{{|}{sgenfd_p~{y{}|wnwx|}zyy||||{zz{{{~pmqy||||{zyyxyyyzz{{{}wzwvvvwwy|~|yxxxyyz{|||||~~~}|{ywwwwxyyyyzz{{{||}}}{xvx{~~}ywutuvtspopruxz{~}zzzyyyz{ywvuwzzyxyyxuqmnwyyxyyz|}|{yvvuuuuz~~~~}zwxz||||||}|{{{yvsrrsttssrrssrrrtwyyzzyxyzxttw{{zxvttvwwvvvvvvwwxxyzyyyxwutrqpooopqsuvvvz}~~~~}}~~~}{zxwxxxwuuvxyyyyyyyyzzzxvsnnojntzyvzyzz{ywtsu{~}~~~|ywy}~}}{ztryxz~~~}|~~~|vv}}{{{|zxx{~~zsmrz||||~}|||||{{{|||{||}~{vsty}~}zvuy{{{{{||zxvspryzvrkho|}|yrlmuwxwwx{}~{{||{xsoomgbfquy}~}vsyzyxz|}}{y}}~|zwtrrux{~~}||{{||zyyutstttttuvvvvvxz{zzyxy{}~|ywvtrqporw|~~~}}{xurqsuwxxyyxwwvsrqrvy{{{|}}~}}}~}z{rrux}~}~~}||{|~xnhehlrz|}~~|{yxwwxz{|{~~~||||{{{{}}~~~~}}}||||}~}||{{zth^bf||okjkotvwwwwrnkt{~~||||||{{zu{|y}}utz}}}|{yxxxyyz{zzyy{ywvvvvuvxxwuvvwwxz|}~~~~}}}|zyxvvwwxyyzzzz{{{|}~}zwy}|{wtrqppqpqoopqstrsz|{}{}~}}zxvsrqqprx{}}}{xusrtyvxxyyz|~~}|xvtsrsx}~|yxx}~{{{{|}|{{zxtrqqrssrqrrsssssuy{{{zzz{{yurvzzxvttuwwvuuuuvwxxyyzzzyxwvuutsssrqpqrstttvz}}~}}}~~}|yxyzzyxwwwxyzzzzyyzzywuspplacjtzyyyyyzzxvtty~~~}||~~~~~yy|zv}}vtw~}}|||xx}}zxy{~||}}{xx||qb]fprsuy|}}|||}~}|||}|||{zz{~}yxy|}|{ywwxyyzyz{{zxsjeju{xunfiuzzz{xvxyywttv{}~|yyzytoomia^imow}}xw|{zy|~}zx~|yvsrrtx|~~}|{{z{{}|zxvuwwvvuuuuttuxz{zywwy{}~}{xusrqponptx|}|{xwxvtstvxyxxxwwwurqrty{{{|}}~}}|{|~yuz{vwy{||~}|}}~~~~~|}~yk`]_hwvz~~}|{{{{||{||~}||||||||}~~~~}~~~}||{}ye[cntdbbbfmqrstuqpsw{~~~}ywvxxzwyyw{}~~}}~~~~{{yxwxyyyzyyyy~{yyy{{zzzzzyyxvwyz|}~~}{zyxvvutuvwxyyz{zz{{||}~~|xz~}ywtsrrqpppqppprrqporsvyz|}|zvomjiggffov{|{zxyy{xtvxyyy{|~~~{zwtrpsx}~|{|~~~~|{{{{}|||{wtqpqssssrtttssttvz}}{zzzzzyvuwyywuuuvwwvuttuvwxyyyzzyxwvvvvwxywvtsqqrststwy}~~}~~~}{zz{|{{zyxxyz{zzzzyywvwvvvp`]ahqwyxxxyyyxvuz~~~{{|{zz}xyy~~~}{|zvvvw}}ss}}|}~}~~~}}}}||~~|yy|viglqpmrvz}}}}}~~~~}}||{yxy|~|{{||}|{zxuvxyxxxxxurifmuvwwshcgmqx|{xxyzyvuvyz{||yvuuyzuqollgadeht}~{z{{{{|~yx~}~~~|zwrqsw|~}|{z{{z{}~~|zxxwxxyywuutuwyzzywvwz}}|zwusrqqpqrtvwxxxvvxvttvwyyxxwvwvuqpsv|}|{{|}~}|{{z|wrv{}{yyz|}~}{{}}~~~}~~tg]YW_r{y{~}}}}}|~{zz{~~}|||}}}}}~~~~~~~~~~}}||}~~|{|}vbatwmedb^coqrrrtuz~{|~~~~~wnotvprx{z}~}}}~~~~~{zxxxxyyxxxxyz{yyz{}||||{{zzwxy{|}~~}|zxuttssrtuxxyyzzzz{{||}~~~|z{{xvuvwwwuttsrqpprrpqopprux{}|wrlkihgffdgkrvxxxz{zvvxyyzz{}}}}||zvsnoqty|}}}~~}}~~}||||}}}|{xusrstttsruutsstuwz|}|zyxxyxwwxyxvvvwxwvuuttuvwxyyyyyxwvvvwxz||{xvtqpqsttstv|~~~~}~~{{||}|{zyz{||{{zzxwvuvvxxsmh`cisxxwxyzzxxwz~~~~~~~~}}|{{}{{~~~~~~}zz|zuuvy}~ru||{|}}~}|{{|}~}|{}{sr{|ysrvz|}~~~~~~~~~}}|zyxy|}|{{|}}|}}zvuxxwvutsrqggnsrwywnebco{|zxvurqprvz{vqvvtuvxzvqopomighox{}}}}|{{||}}yv}|}~~~~~~}{yz|~~}||{{||{{}~|{zyxxyyyyxwxz{zyvuvy}~|{xvtsrrrstttsrssrsuvvvvxxyyxwutxxwsrvy~~}{{{}}}|{zyv|vrtwxyzz|}~~~~}{z{|}}~n\\WW\\h|~~~~~~~}}zxwz~|||~~~~~~}~~~}}}|||}}{zz{~oetmdbc`]cqrrpqsy~~~~~|zxyxrrw{}~~}}|zxyyyyyxwwwy{}|{{yyz{|}}}}||{xyz||}~}|zxvsrrrqpstxyyyyzzz{|}}~~}|zxuuwy|~}|zzyxxwutttstrsrrrv{~{vqmkjiihhgghotvvwyz|zyyyzzzzz||}}}}|yvrqpqsw{~~}||}~~}}}}}}|{zxvttttsrrvwvttuuwy{|}|yxxwvwxyyxwwxyxwvuuuuvwxyyyyxxwvvvwxz{}~|zwtrpqsstrrt}~}~|{|}}|{zzz{|||{{zxvutvvxwunkebeowvwxz{{zyy{~~}}~~~~~~~~}vy|~~||~~}~~}}~~~~~|yy|}xv{}||}~~yz~|y{||}~~~|{zz{||}}}~zsfVTahqw{}~~|||}~~~~~~}|{ywz||}}}~~~~~xvwvuusqpprfhpfjuyysg[`t~xwtqmiecfmsvuqvss{{yyuprsstqot{{wvx|}}}~~~{yx~}~}}}~}}~~}|||}}|{{}}~~|}}|zyxz|}}||}}{yvuwz}~|{yvtsssrstvwtrppqquyyxxxyzyxwutty{zwvz}~|{||}}}{zxvwvuuuuvyz|~~~~~}}~~|z{|}~~|n^WYft~~~|wty~}||}~~~~~~~~~~~}}}|{{{|{z{{}ztrb[]^\\[crrsrrsy~~~}}zxy}}{yzzzzxwwvvy{{xz{{zyy{|}||}|{yz|||}}||zwtrrsronquyyyyyzzz{|~~~}|yvwy{}~~~~~~~}{{zzxxvvvy|~{wrnlkkjjkllmqsuuvwxxyzzzzzzyy{|~}{zxvssswz|~~~~}||}~~~}}}}||{{zxvusrqqsvxwuuuuvwxz|}zxwwvwxyyxxyzyxwvvvvvwxyyyyxwwvvvvwxz|}}|zwtrqqrssrru~~~}}{{|}~}|{z{{{||{{zxussuwwyygekecmuvxz{{zzyy{|||}}}}}~~}}qfo{~~}~~~~{{}}}}~~|zz|}xu{}{yz}~{|}~~}{z{{|||~}zxxz{z{|~}|xgIGbkox{}~}yz{||}~~~~~}|zy|~~~}|z{ywtstqnoppfcrcdpyxsh\\gzzwyzwrkd]\\bksxy|vwypjsxnmruzyx{|wvx{~~|}~}vuxy}}~}|{~~~~~~}|{zyxyz{|{{{{|}}~~~}zwwx{~}{yxusstutuuuwvtrsttwz{{zzzzyxvttx}~|zy|~~~}||}}}}|zxwvvuvuttx{{|}{{~}}}}{{}~~~~zwri_Z\\n{~~~~zsw}~}}}}}~~~}}}}|||}~}|zzzzzz{|}~~r_XZ[ZZestttst{~~}zyzy{yuttvx{{vyz{zyxxxzz{||{z|}|||||{zwussvsnmqtxxyyyzz{{}~~}|zz|}~~|}|||}zxtronnnnoqqtuuuuuvvwyz{{{{zzyz{|}}}|{{{wtsuy{}}}|}~~~}}}}~~~~}~}}}|{{{{zxuqpnosvxxwvvuuuvxz|{yxwvwxyyyyz{zyxwwxxxxyyyyxwvvvvvvwxyz{{zxvsrqqrrsrsw~~~~|{{zz{}~~}|{{||{|||{xtonrut{kcrndkvz{||{zzyz{{||}}~~~~~~}vgox|yww{~yy|~~}{{{{yxz}||{|~}xxz|~~~~}z{{}}~~|tu{{y{~~}~sa_uuvz}~~}zy{{{|~~~~}|ywy|~~|zw}}{xusromopogZgnpxywtolw|vvz~~{xocZ]eosw}yyyqlqwmglv~}z|~~}~~ysjlz|wqlf~~}|z}~~}|yyy{{||{ywww{|}~~~{yy{~}|zxwvuuuuuutuvwxwwxyz{||||{zxwvstz~}~~}}}}}}|||zxwvuuuutux{{|}|}~~~}~}}}~}}~}ysld^_gt}~~~~|tw|~}}|||~~~~}||{zzz{~|zxxyz{{|}sb[[ZY]hrutssu|~~~~}|zzzzzvsrsuy}|wyz{zyxvwwxzz{||}}||||{{zxwtuxvpmptxxxyyzz{|~~~}||}}~~~~~~~~|ywxxyyztprrrrstwwwvuvxyzz{{{{{{zzzzzyyyyz{zxssuyz{|~}||}}~}}}}}}~~}}}|||{{{{zxuqnmnswxxwwvuttuvyz{zxwwwxyyzz{{{zyyyzyyyyyyxwvvvuuutuvwxyxwvusqppqppqty}~~}~|zyyyz{}}||}}yvx{zwsojnvvv|wiwykgv|}}|{zyz{{{||}~}tkfwxoouzywz~~}|{|}|zwz~|}~~}ytuvz~~~}}~{y{|~|rt|{|z|}zw{{{}~~}|}zyxxz~~~}|{xtsuz~}{yuz}yvsqoomljjfn{|z|{upy|xwz~~}zoa[^ffjuxuvvtuvm`br}wz}~xqiTVv~zztdc}yx|}|z{}~}~~}{xvz~~}}{yxwwx{~~||}~}zwvwwxwwvuttvz|}{{{z{{|}}{zxvurqv}~}||}}}}|{ywwvuuuvvxzzz{}~~~~}~~~~~~}|||}~{sjd^eqy~~~~~~~~~~wy|~~}||{{}}~}|zyxwxz}~|~{yxyz{|}~sb]\\ZY`jrtssru~~~~~}}{z|}wqqrtvwxwrtvyzyxwvvvxyz{||||||{{{zzyvx{ztpptyyyyyz{{|~~~~}}~~~}}~~~~~~~{vsrrtxz{urttttuvxyxxwy{||{{{{{{{{{zyxwvvvwxxwtrtxyyz|~~}}}}}}}}}}}}}}||||||{{zzzxvrmmouxxxwvutsrsuxz{zyxwwxyz{{{||{zz{|{zzzyyxwvuuuuuttuuvvvuusrpooomlrz~~~}}|}}~~ywwxxy{}~~~~}wnqxzxvtmkt{x{|qw~uju}~}|{{zz{|||}~whkr{wrty}{wy}}{z{~~yvz}}~|wrrtz~~~~~~{z|~|z}~}{wqvzvvx|}~~~~}~~~~~}|{xvtux~}||{yusuy}~~}{xwx~}zxusrrsstvsqwxuvwpku{vuvx}~|z{ui_Z[]bltvx{{zyqdfrxz}|xz|tfoubd}}z{ymt{yxy|}}|{{zz~~}~~}{xuvxy{|{z|||{}~~~~{xwxyyyywussvz~}zywwxy{|{yvttrpt|}{{|~}{zwttuvwwwwy{{{zy|~~~}}~~}}}~}|||}~{shb^mw{~~}}|}||||~|{}~~~~~~}||{{|}~~}|zxvuvy||}zyz|}}l]Z[[[bmrssrrv~yx|~{yy|vqsvwwvsokmqtwyxxwwvvwxyz{{{|{{{zz{{yz}}ysquzzyxz{{{|~~~~~~~}}~~{zwtponnprttsttuvvwxz{zzy{}}|{{{{{{zz{zxwvutsstsrrrswyyz{|}~~}}||}}}}}}}}}}|||||{{zzzyxwtnoqvxyxvuutrrruwy{{yxwvwyyzzz{{{||}}||{{zyxwvuttttsstttuuttsqpoomkht~~}}}}}}}}}}|}~wvvvvwy{}~~wlmwzxyytjp~~{|xy}|st{}}|{z{||}}}}~~{oky}xyxx||xy|~~}{{~}zx{}}~|vqpsz~~~}~}|{{xx{{{wrpw}|vxyy{}}~~~~~~}|zyvrrx~~}|||{ywx{|}}}{{zz{{{zywuvwz{~|xsvuqrwskkkjpsv{|{z{wrj]Xcfkquvxzzyxtojm{xkjtg^vyz~{{zw}|zyx{~}~~|{zyw{~~{{{|~|ywsrswz{{}}~}~~~~~|yxyyzz{yvssvy}|wsrrtvvxwwustuuw}|zz|~}{ywssuvwxxwz}|{wwz{|{|}}||||}~}|{}~~~~}{z{wrf_apty~~}{z{{zzzy|~~}}}}}}}}|{{{}}}~|ywwvvy|}{{}gYXZ\\\\dnssrrsy~|}}vrmvyxwxyqqopqtvyzyxwwvwxxyzz{|{{zz{|{|}||wsv|{wwz{{{|}~~~|xtplikklmnomnrtvwxyz{|{{{}}~|zzz{{{zzzyxuwvuqnponnpswyz{{|||}~}}|||||||}}}}}}}|{{{{{{zyyyxxxvrstxyxxvutsrrsuwyzzyxwuuvvwwxxyz{|||||{zzyxwvutsssstuuuvvuusqppomieryx~~~}}}}~~~~}}|{{y|~uuuuuuvxz{|~ynotyyzzzrt~~{}|}{~{wy|||zz{|}~~~~}{u|~|x{ywz~|yz|~~~~}~}|{|~xy||}~~||}~}wsrtz~~~{yxy{~~{wutv|~~xz}{|~~~~}|z|yttz~}|{{|}}|{{{|||{|}|{yxwwtvy|~{xy~}xu{|sgcgsvxyz{|{yzwfaqsqrqpmouttvn^k~}p][iddz}|yxz|zzz|~}~~|{zxwy{}~~}~}|zvstvxz{{|}}}}}{zzzy{~~~~~|zxxyyzzywutux|~{upquuttuutstux{|~|zy{~~|zxutuwxxwwz}|{vtrvtoox|{{{{|~~~}|{{||}~}~~|ywxwvldhlsz}~}|zyyyyxxx{~~~}}}}}}}}{{{|}}~~{xwxvwy}~}}p^YYZ^eossrrt{|wrs}yxy{zsronpruyzyxxwwvvwxyy{{{zzyz{{||z{yuuztpvz{{z{|}~~~~xvsohdgnllllikoswyz{|||{{|~~}{zzyzzzzzzz{yzyvnklkkklrvy{||||||}}||{|||||||||||||{{{{{zzyyxxxywuuwyxxwutsrrssuxyyyxwvuutsssrsuwy{|||{zzyxwvututttstvwwwwwvurqppnjhgrw|~~~~}}}}}}}}}~}}}{||zuttuttttuvz}~|trtvyyyzxx{}}~}}|}|{z~}{z{|}~~~~}{z~}{wzzy{~|zz|~}}{|~}yyz|}~}tw{}}~~||}~~zwwx{~~|yxz~yuyxx}~~xy~~z}~}{{zxwx}~}{z{{~}|{{|zz}~{ywvutv{}~}zx{zw{{wnfjtzyy{}~}}|}vquusrpmfgnpnmkdn}zp^V`hly~|xtww~}|}~}}~~|zxwwwy}}|}~|ywutwz{|||{xtstvusv{~~~}{zxxyyyyxxvvvwyxrpu}{tppprtvy|~~|z{}~}}{zyyyyxvvxz{vnkiigktz|zyzz{|~{|||{z{{{{{||zwwy||tlutx}~}{yxxxxwwwxz}~~~~~~~~~~}{z{|}~~}}zxxwxz}zf^[[`gnsrrsv}zvrxyuuwyz|~xqimmorw{{zzxxwwwxyyz{{zzz{{|{yusrppogivz{{z{||}~~}yutsrqgciijjifhnuyz{||||||}~|{yyzzzz{{{~}ypihhhhjpux{||||||||{{{{|||||||||||{{{{{zzzzyyyyxwwxxxwwutsssstuwyxxwwwvwwvttsqqstwy{{{{{zyxwvututtttuwwwxxxwwurqqplgjx{}}~~~~}}||||{{{}~}yvuuttrrqqswz}~}xutwxyyyyz{}~~~~~~~~|z{{|}~~}~}}~~|uwz{|~|{}~|zwy|}zuuv}~ts}|}~}}~}{{|~~~}{{}{qox{{|{|xuv|znr}{{zxy{}~~|{yz{}~|||{xy|~{wsstx~}{xwz|~~xwz}|wqsxxttw|~}||||zywsqonfgorogfkvzwqcW]ks{}ulo{{~~~}|}~~}~~|yvuuuwy{~~||~}{xuuwyy{|{upruwvssx|}~}{ywxxyz{zzyxxyywwz~|wtssuy{}~}{{}~~~}||{zywuuvwxsggfbiuyyxxxyz|~}|{{{zzyywxy{{{|~~yu}~{~|spuyyxxxxy{}~~|{{|}~~~|zzz{~~ma\\\\`hprsrtx~{yyxnssvy|}~|sfkmoruz||{yyxxxxyzz{zz{{{|{yslfbdgd`jwz{{z{|}}~~~~~~~~|xvrrrtw}ue[bggedir{{|}}}||}|~}|zyyzzzzz{|~}vmffffhotx{|||{{{{{{{{{{{{{||||||{{zzzzzzzzzzzywtsuyxvutsssssuwyzyxvwwvyzzxxussstvyz{{{{zyxvvutuuuuuvwwwxxxyxwuuvtpjt~~}}~~~~}}||{zyxy{|~~~zvvuutrpoopty{}~zwvwxyyyyz{}}~|z{{}}~~}zz{}~{z{~tt{}~~|~}wtvz{xsqv~~rw}|}~~~~~|{ywz|{}|shkw|~|{wmnrwzkk~~}}||z{|}}}|ywxy|~~}{xz}}{ywwy|~}yxz|~|vrt|~~~{z{ytstyzyvvvyzzxtqoplovyujdkuztm_^oy}|shw~|}~~~|||~~{xutsuvwwy}}|}|zwutux{{tptwxxussuy{|~~|zzzz{|}}|||||{{|{z{|||||}~~}|}~~~}{zxwuttuvslmlgswipwxxy{|~}||||zwxwvxx{}~|}sddq{zyyyz|}}~~~~|{|}~~~~}|}~~}k`\\]ajqsrruz~~}~|ytkpuvwz|~~|yphkprtx||{zzzyyyz{{{{{{||{xqj`YX^b`etyz{{{|}~~~~}||{{~~zwtrrpppv|oW\\ccaepz~}}~~}|||{}~}{zzzzzzzz{|whfdejpux{|||{{{{{{zzzzzzz{{|||{{{zzzzzzzzzzyyvqosyxvussststx{{zyxvwwvwyyyzzxxxxy{{{{||{ywvuutuuuvvwwwwxxwxxwxy|{xu|~~}}~~~~}}||{ywvwz{}}~|wvvvusqoopswz~|zxxxxxyzz{|}~{{{{|}~~|yvvx{}zxy}rs~}|}~{wxyywsuy|zy~||}~~~zuvtkiv|yynkqy}ylorpuy}~ur}~}}~~~~~}}||{xutuw{}}{{||zvtxyyy{|}~}|||uqt|~}{zxwvvvtqonotxwurrsruz|zrpqu{utkjtx||{z}~~|wp}~~}~~}}~~}}~~zwsrrtvuuvy{}~||}}zvttvxzvsvxyzyuqopu{~~}|||}~~~~|||zxy}~~~~~}{xwvuttttrnsqmnliu{|{{{|}~}||~tqvwwy{}~~xjadnwzzz{|~~}}~~~~}||}}}~|~~}}~~~xh^[]ckrsssv{~~~~}}~}z|}}ypywwxz|}~}{sklqrrv{{z{{{zzz{|||{{{||{tiaWQV]abq{z{||{|}~~}}||}}~~||xtrrqpqpszw`T]__jw~~~||{zz}|zzzzzzzzzz}~lecgoswy{|||{{{{{zzyyzzzzz{{{{{{{zzzzzzzzzyxxwsrvzxvuttttsty}|{zyxxxxwxxz|}~}||||||||{zywvuuutuvvvwwwwxxwvvvwwy{|z}}}}}~~~}}}}|{ywuvyz}}}||wvwwvtrppqsvx}}{yyyyyzz{{|~~~{z{||}~~~~|yvtsuz}{}rs~}{}~zxyzz{}}{||{|}~|qjnphgw~zxqswz|{{}|wxvmkr{~}{|~~~|||~~}|{zwsnnq{|}~~{wurnpstwxxz{|~~}~~}ywwz}~{zxvpsroopplmsuuttsuwyz{{{{|zuvvuvw|{lit|}}zvy{z~|}~}}~|yutstuuttvwy|~~}|}~~}zxwwwzxvzz{||ytolqy~~|||yvwz|~|{}}|zxvttttttsqmspnnsy|}}|{zz{}}}}~pmvyz|}}}~~~xqoquxyz{{|~~}}}~~~}}|}}}}}~~~~}|~~~~~{uia]^dmrstux||}}}{{z{|}~~}~|ywxy}xzvwy{}~}}zvtrsrqtxzz{}|{{{{|}|{{z|}zqdYQOX^`iz||||}|}~~~~}}}~zwspqrqoptx{kTY\\bs~}}zuu~{{zzz{{zzyy{}{neeluwyz{||{{{{{zzyyyyyzzzzzzzzzzzzzzzzzzyxxwxwwz{ywvuuuustx|}||{zzzyyxy{|~~~}}}||||{zywvuuuuvvwwwwwwxxxwvvusqtwz{||}}}~~}}}}}}{ywvvy{}}{y}{vuvvwxvuttuuw{}|zyxyzzz{|}}}{{|||}}~~}||zwsrw~~~}vr{}z|zw{||}||}~~}}~}{rhnvuu}~|}}wuvx}|vtw{|xqmw}}y{zz|~|zxuqihlx||}~ymb`gqvxz~|}}~{|}|z{|{{{{|}|ytrlrpnqrvoouxwwvuvwvwx|~}z{zxvxygU^rz}|yvvww~~~~}|}~~~{wutttssttx|~~}|}}||}}~{zzyxyww||||}|xpkox~~~~~|{{wutuuw|zx|}zywutsssstutojmnnqy|sqwzzxxy{|~~}}~~spv{|~}||}~~zwwxyzzz||{~~}|}~~}||{{|}}}}~}{|}~~~~}~~~~{wskc`enrsuvy|{{{}|yxxz{{{yxyyxvvwz~u|~yxxwz~}}ytstsqprtvx{~~}||{|}}|{{|}{scTLP[_cs}|{{|||}~~~~~~}||~yspqqqpnrz}r^Y]m{~~ytr|zxz{{{{{zyyyz|}wqnggr{z{{|||{zzzzzyxxyyyyyzzzzzzzzzyyyyzzzyxxwxyz|{yxwvuuuttw{|||{{zyyyzz{{}}}|||{{|||{zywwvuvvwwxwwwwwxxxxwwtspnouxyy|}}~}}}}}}}|zxwx{|~}{yyxvtpruxxxwwvvvz|}}|zzyzzz{{|~~~}}||}~~~~}}~~}xux~|z|~z{yrw}{z}~~{}~~~~}|||}~~~~|{{}~{~yqx~~~|zyxvvz~}xwz~~|vrz}~~~|vyyz|~~|xtrnfcdt}{|}xjbdinpqqruvy{}}zx{yvwyz}}|{{{z{zxqpmromoqrqv}}zywvvussty|}}~}|zxxzu[M]px~|wuvww}|||~~~{wtsrrsssssuz|{|}}{|~|{zz|~~}{{{zxyxy|}|{|~{qkmu}~}}}~|{zvtsrrt{~xw||yvttttttuuvvuqijnqsvqecnwwutuyz}}~~~~}tsw|~}}||}}~{x{{zzyy||{~~{{|~~}|{{zy{{{|}~~{{~~~~~~}|||z{~|ztjbenssuxz{zzzz~{xwxz{{ywvwxxvuuwz}}{|}|zysiozuvrijtsqppqsvy|}}~}|||}||||||wiUIQ_bmz|{{{{||}~~}}}}||}ztqoqpppqw~wk][x|}|z}wwyz|||{yxxxyz|yropskju}{{||||{zzzyyyxxxyyyyyzzzzzzzzzyxxyyyyyxxyz||{zxwvuuuuuvz{||zzyxxx|}zz{{{{zz{{||||{yxwvuvvwwwwwwwwxxxxxwwwupjltutz}~}}}}}}}}|zzyy|}~|zxwvvrklsxzzzzywwxz|{{{{zzzz{|}~~||}~~}}~|y|}~}z{}~|z||vv}~zz}~~|z|}}{||}}}||}|{z|~~|y{{z}||zzyzzz{}zz}}~~~xqu~}~}}x{|{|}}}~~}ytqomb]`r}||}zqjlnnkgddkvyvvzzwyyutw|~}zxxvssrtssrnntsqty}{zxvssqooptxzuv}|zzyzzp^`ksw{{xwxyy}{{|~~~zwtrrrrsttttuyz||}~}{x{}~~|{zy{~~|z{|{zzz{}}|{||qkqv|~~}}~}|zvuvvvx}{utwz{|}~}yusqrstuvwwwwwuoorsssiccputrrsuwz|}}}~~{ssx|}}|||}~~||}|{zyxyyz~~{z|~~~}|{zzyyyz{}}}}}~}}~~~~}}}{|~~}{sadnstvxzzzz{{|}~~zwxxyzzxvuwwyvtsux{{z{}}}{zxligciicesvtqppqsvz|}~}|{|}}}||{z|ucJPafv|{zzz{|{}~~}|||||}~}wrqprqqsw|~~zsjazz~xwxz{|||zywxwvurnotwomv}|z{{|{{zyyyxxxxxyyyyyyzzzzzzyyxxxxxyyxwxyz{{zyxvutttuuvy{||zyxwvvz{xwwxxyzz{z{{{{{zxwuuuvwwwwwwwwwxxxxwwwxvpjmtsu{}}}}}}}}}|{{zz|}}{xwvutpmnptvw{|{yxxyzzzzz|{{zz{|}~~~~}}~~}}~~yz}~~~}|}~~~}||~~yv|~~||x|xz}~{{||||{|~}}{|}||zzzz}}yyzyyz{{}~|{{|}}}~zrr~x|}}||{zz{|{vrppla[`r}|||xtrrrokilnpurlnw||zzvux|~{wuwysmruutqnpvxuw{|zwsqpponmmnvukt{{zz|}ywuvtsv{{ywyyy|{{{|}}yvtrqqstuuuuw{{|~}xxz{}}{zz|}|{{|}}}}}}}}|||}zolu|~~~~~~~}zww|}xsqrtttvx{~|wrqpqtwzzyxxxyyvuwxyzsmgnrtpqqrtvyz||}}|suy{|}||}}}~}{z{|{yyyxz~|{{|~~~}|||{zzxxyz}~~~~|{|~~}}|wcemrtvyzzz{{|||||}}yxxyyyywutwxyvtssvyz{}~}zyzxqb^cd_dsyvsrqrsuwz|}~}||}}}}{zx|vSMbmy{zyyyz{z|}~~~}}||||}~|vtrqtttw{~{x{p|{~~|yyz{|~~{zwvurqrrruttrx}|{{{{{{zzyxxxyyyyyyyyyzzzzzzyyxwwwxxyxxwxyzzyxwutsttvvwy{||zywvtuxzvutuvyyzzyzz{{|zxwuuuuvvvwxwwwxxxxwwwwwxwqltvuz|}}}}}}}}}||{{||{xvtsrrttokoqswy||zzzzyzz{}}|{{{|}~~~~~}}}~~~~~~~~}}}~|utvxz|~~}}~~|~{u|{xysp{~||}}}}}}~~}||}}|zxwwursyx|}~~~yyzz{|}~|xpvsy|xuuwwwpnpsn_Yas{|}|ywwxwtstxyxrignv||yy{~}|ywuw{zwwuutpmr{zxy{zxurppnnqv|vioruy{|{zxot|{wvx||zxxy{~|{z{||~|yvsqprtvxyxww}|{}~}|{{{{z||zyyzyy{}~~||||||{wnmx|}}zvx~|wsrttsrrtwz~~{wrqqrswzzxxyz{{zz|}}wikszsppprsvxz{{}~w{{{||}}}}~~~|yy{}|z|{z{|{{{}~~~}|{|{{zxxy{~~|zz|}~}||{zlhmruwyzzz{|||{z{|~}{{zzyyyxvtswxywtssvz{}|yx|~qjd`^cqxwuutsstvx{}}||||}~|{yw{dKarvyxwwwxyyz||}}||{{|}~~}zvutsvvwy|}}}~}}|}~~}{yyyxz}{wusstttttstx{}|{zzzzzzyyxxxyyyyyyyyyyzzzzzyyxwwwwxxxxxxxyyxvtsssstvwxz{|}{yxvuvxyutstuxxyyxyz{||{ywuuuvvwwwwwwwwxxxwwwwxxxvquzxy{}}}}}}}}}}|{{||{wtrppqstomklmls{{{{yyyy{}~}||||}~~~}||||}}~~~~~~~}}{vwz{|{{|}~~~|}~zyz{~wy{uxts|~~|{|}~}{z|{xstsstrsvvz}~}~~zyyzz|vpu||xusuuupnqtrf`hu|}}}{zyxvtuyyxvnhkrw}~|{zvssuwwwy{|{xxwsqtyxwvwxxwwwtpnpw~wbo{x{{tl^i}~}|}~{wuvz~}|{{||~~|xtrqqsuxzywtzzvvwy}~|zxxyz{||}{ywvuvz}~~|{|||{{wqpwz}}~~{vsu{~~|zwttvxxvtstw{~|xutsrsuxywwy{{z{|}~~ooyyqoqrsuwzzz|~z~}}|}}}~~~~~}|}~}|zz{||{|}~~}|{{{zz{zyz|}zz{{|}}}|||{y|umpsvxxxyyz{|{{{|}~|zz{zyyxwussvyzwtrsvz|~}||zyxrkcblxwwwuttsuvx{{{{||}}|zyx{tQbttwvuvvwxyyzz{{||||}~~~}}{xwwvuxxyz{~~~}~}~~|{{z{|}|zyzzvz|zvwvuuttsstu{}~}|zzyyyyyyxxxyyyyyyyyyyzzzzzyyxwwwwwxxxxxwxwvtrrrsstuvxz{|}|{yxwwwwtrpqtwxxxwxyz{{{ywvvvvvwwwwwwwwxxwwwwwwwwwvwzzyz||}}}~~}}||{z{{zvtrqqqpqqmfhkemx~zzzzyxyz}}~}}}}}~~~}||||}~~~~~~~~|}}{yvtu{z{~zx{}{w}~|z}~~~}}}|wtw{|}~~|zz|~{l`mts|{vsqu{}|{|}~~|zwxxzzr{~}|{||{ywwxxxutx|}xssy}~|||{xvtqrvxywrprty{~~yrkjkswwux|}{xwwvtuuqoopvzyxwtppuz}zp{~wl`l~|wrtz~}}||}~zvtsqqruxwvstw|~~||zz|}~~{xuttvxyz|||zxttw{~~|{|||{zwsstv{~~y|xpnpuy{zxxwwvvxzxvttuwz}}{zxusqtwwwx{{z{|}}}~~}wuzysrrswy{zx{~~~}}||}~~~}~~zw{~~|{{|~~}|{{zzz{{z{}~|{zzz{{z{{|||ytsuwxxxxxyz{|||}~}{yzzyyxxvtrswyzwsrrv{~}zxz|{pcivxwvuutsstvxyzz|}||{yyyz|}wafstvvvvwxyzz{{{||}}~~|{{zxwxwwzzyzz|{|}yxwxz{}~|{zyyz{{{{zyz||}~uvvuzxutsssuw{}}}{yyxxxxxxwwwxyyyyxxyyyzzzzzyyxxwwwwwxxxxwwvusqqrrrstuvxy|}|{zyxwvusqoorwxxxvwwxz{{xwvvwvvvvwwwwwwwwwwwxxwwwxyz{zyz{|}}~~~~}||zyyzzvtsrqponkb`akfjsxxyzyqsx||}}~~}~~~}}|||||}~~~~~~~~~}zyuuyz{}~|~{vz}|}}}||~~~~}{wtx{|}{{zy{{|}xdo{y|||z{xuuzvt{}~{xxy|}}zvw|~z{{zywxzz{}~}}}}}yz}~|zzyvsrpqw|}{zywvuvxz||xrllouwtqt{|ysptwxuqmmoqv|{xvqqu{~~~}|{y~|hUbz~}xtvz~~~|ywusqpsuuvtrssx}~~~~~|xussrttuvx|~zursw{~}}|||{xsoqsv{~y|zrmmquwwwxxxxwwxxwwvussv{~~~|xsqruwxy}}||}}}~~}{y{~xwwx{|}zwy~~}}}~~~}}}}~~vw~}{{z|~~}|{{zzz{|||}~~~~}{yyyyz{||}|zxuvxxxxxxxyz{|}~~}}|zzzyxxwvsqrvxzvrqrw{~|{{|{rifswwvutsrrstvwyz{}|{yxxyyyywnmrsuvvwxy{{||}}}}~~~}{{yxxwwvvxxxyyyxxvsrqrtuwyxxyz{{{yyyyzz{{{{zz{~~zqwzy|vutuuxy{|||zxwwxxxxwvvvwxxxxxxxxyyzzzzyyyxxwwwwwxxwwwvtrpopqqpqrsvw{||{zyyxwvtspprwxxwuvvwzzzwvuuvuvvvwwwxwvvvuvwxxxwwxyzzzyzz||}~~~}}|{ywxzzvtssqonkbW\\`jgioswxyxtv{}}||}~~}~}}}|||||}~|{|}}}~~~}{zyz}}}}|yz~}|~}|||}~{{{zzyxyz|}}|xrknsqsztz}xx~zvimx|~|}~}|yvz}}xyyxwvwy|~~}|{{}|zyxwtrqsw|}||zxwxvwxy{{xtrtuxxtoptxunmv|{vrqtwxz}}zxvw{|yuu}q\\f{~~}ywxz~}}~~}{ywtqqstuusrqtv{~}{ywutssttuwy~ztporw|~~}|{wqlmrv{}|tqqrtvwxyyzyvuvxxwurprx|~}{wtuwxz|}}~~~}~~}}|}|{yy|~{wz~~}}~~~}||{|ts{{zx{}~~}|{zzzz{}}~}}}~~}~~{{|~~~}{yxxxyz{{|{zxwxyxxxxxxxy{}~~~~~}{zyxwwvtqnpvxyurrsx{}~~}|{zxtpksvvsqqqrrrsuwyz{|{zyxyzyyxxtsrsuwwwx{}}~~|{z|zxxwvutuuuvvvvusqpnopqstrqqsuvwwwxxyz{{{{z{|~~~{xt{~zwxxyz{{zzzzwvvxxxwwvuuvwwwwwwxxxxyzzzyyyyxxwwvvwwwwwvtsqpooonopqtvz{|{zyxxxwvvsstxyxwuuuvxyxvtrrsuuvvwxxxxvtrrsuwxxxwxyzzzzzz{|}}~}}||{ywyzzwutsqool`U`bgehlquuxyyy||{{|}~~}~}}}|||||}~|||}}}}~~}~~{xwwxw}~~}{|{y|}|~~{z~~zuuuuvwz{|zxuqlcii^k|}}}}~}}z{}xiltx}~~~|}zxz}|{zxvvwy|~~}|{z{{yyywtstyzwvwxwvuwz{zzwsnnsy{|xspnmqrps{{wwwxz{{}~|||~~{vssqss|}tw|}~~}|zxxy}}~~}~}~}zurrrstttstrqw}~|zxyxwvvvwy{|~xrnnosw|~}zvroosvz}{|vqppruwwxyyywvwxxwvrpruy|~}{yyzz}~~}|}|}}~~{utx}y{~~~~~}|{zz}{sy~|ywy|~}}}|{zyyz|~~z{|~~~|{z|~~~zyyzzzzzz{{zyyz{{zyyxyyyyyxxxyyz}}{zxwwwvtpmovzxtrsuy|}~~{zz{|}|zxvvutsrsonpqssstuwyz{|{zxxyyyyxxusrrtwxyz|~~~|yxyyxwvtsrssrsssstutronoopqoopqrtttvvwyzzzzzyz{}}{yyw~}{{{|{zyxyyyvtuwxxxwutttuvvvwwwxxxyzzzyzzzyyxwvvvvwwwwvutrponmnopstx{|{yxxxxxxxwwwyxxxutuuwwvsqpprtvwwxyyyxvsnmnquwxxxxxyyyz{{z{|}}}}|{zyxzzzxvuspoqreZhgdbfkpssuz{yzzz{|}~}}}}}||||||}~~}}}~~~~~~~|{}|wrruw|}~}z{{xz~~||}}~~zvw~}sopvxy{|zroqmfbgfZo~||xw}}}ytw{wortxy{}~|}~~}}{{{~|xwvwy|~~}||}|zy|}zwvvx|zuuuvvvuuz}xxvrptz~}yrlkjmsx{zyz||zxxyz}~~~~{wtsuhW\\x}}~~~}{zxwx~}}~~}}~~|xtrqqstuuutxxz}|zxxyxxwxy{}{uonnoqtz~}{xvuuvwz{zz{|uonoqsuwxxxyxxxxwvtrrtvxz~~~}||~~|}|{|~~zsqx~~z{~~~~~}{zz|~uw}~~}zvy|~~~}|{zyy{}}zz}~}|{yx{~}~~~~}zyxxxxxy{}}{yyz{{{zzyyyyzyyyxxxz}}wz~{yxvvvvtqnnuyvsssvy|}~~}zxwx{|{zxvuvssqnomoqttttvwxyz{zyxxyzzzyyvtqqsvyy||}~~|wrvyxwustsqqpppqsvxyvrqppoooopqrrrstuvxyyzzzzyz{{zyyy~~}}|zyxxzzyvstvwwxwutssstuvvwxyyyyzzzzz{{zzyxwvvvwwxxyyywurpoooopruz{|zywwwwxxyyyxwwwvuvvvvtqooprtvwxz{{zyxofhimrvxxxyywxyz{{{{{{|}}}|{{{{{{yyyvrpsvm_kj__ciorqsz{xxyy{|}}}}}}}||||||}~~}}}~~~~~}|{|~}wnluw{|}}|}||}~||||~~}yy~zor{}}}~rszyl^mshwzwtt|||zojx|yxy|{{z{}|rsx{~}||}}xwvxz|~~}}}}|}|zxz{ywvwz}{vuttuvuuxz{zywwz{zz{wrmgjnuz|xx{}{xvvwy{}|zwwy{|ywz{{y|qXa|~}|}~}{ywww}|}~~~~}~~}{yvurqrtvvwxx{{|}}{z|xuvz{yyz|ytonooquz~~}{yyyyz{{xy~~~wqryxqnnoqtvxxxxxxxwtrqqsvxvu{~}}}||zrry~~}{{}~}~}|||~~~~x}}|}{wx|~~~}|{zz|}{}~}|zxxxz~~~~}}}}}|{zyxxwwy}~{yyz{|{zyyyzzzzyxxxy|{qs~}zwvvwwuroptwusstwz|}~}yvuuy{{yxvsqorvwtnoquuuuvwxyz{yxwxy{{{{zxurqsuxy}}||~~}{wptyxwususppooorvz|}zvutrponoprrrrssrtvxyyzz{zzzzzz{{|~}||zxwvx{{zwsstuuwvtrrqrsstuwxyyzyyyzz{{{{zyxwvvvwxxy{{|{ywtromllmqx|{yxvvvvwwxxxwvwxwvvvvuspoprtvwxy{}}|zzqcbbgouwwxzywwyz{z{{{{|}~~|zzzzzzz{{xtsvyqagja`aflrssxywwxxz{|}}}}}|||||||}}}}}~~~~~~~}~~}ypoxy||}}~}~}~~~~}yvuv{}~}}ufyy}|vqor{ywojt}}|~~zy|th^ew}|||{{|}}|zyyz|}~~~~~~|{{{||zxxwutvy|}}zxvtuvvusstwutyzuminqprsqosx|z{}{vsqruwyzvokotvqmrtohdquks}{|}}{yxwx~||~~}|{{|}}}||{{yvtsuvwwvvtsuvy|~~~~yuv{|zxxz}~yuqpoorx}~~}|||}}}|yz}ywvwxsonpy~~{tomnqtwyyxxxwwvrooqtwzvqx~|}~}}zru|}}|{{}~}~||}~}}~~~yy~||{z{~~~~}||~}}}|{yy{|~|{||||{zyxwwx{~|yyz{|{{zyzz{zzyxxwy|~}~zx|{xvwxwuqnotvtrtvy{}~~}yutuy{zzywromtzzqgfluvvvvwxyz{ywvxz{|{{{yvsrrtvx{|{|}}~~}||}~~}{zxuvzyxvstsonpssvz}~zyxwvtrqqrrrsttstuwxyz{|{{{zzz{|~~}|zxvuvx{}|ysrrssvusqqppqrtuwxyyzyyyzz{{{zyyxwvvvwwxy|}}|{zxvokihhmsz{yxwutuuuuuuuvwwvvwwvusqprtwxxyz|~~}{|wh^\\`ktvvwzywwxyyz|||||}~}|zyxxxyz{{yvvxztabiga`cirutwxvuvvyz||}}}}||||||{|}}}}~~}|zuw~}}}~~}}{z{~}q^\\ny}}}~|w{tpprzwtqt~~tryyuy~|jRbutrz|}{}zx{||||}}}~~~~|xxy||zxwvtsvy||}{zxwwxxvomowsoxzulemrootttvx}|zxusqsuvvvvspnswwpnxvmXRmsppw|~~}y{}~}{z{|~~~~~~~~~~}}~~}|{{{|}~~~~~~zwvuvvvvvxywvwz}|{}}{ywvx{}|yxutrosz~}}~~~z{{wuuuvtrooswwwz}}{vqoqtvxyzyyxvutqoorvy{xrv{|~~}~~~~xz|{yz{|~~~}}zz~~~}}|}}}~~~~}{{|}}|{|||{{zyyxxy{}~{zzzz{|{z{{zzzyyyxz~~}~~|~}{||xuwxxtqmostsstv||}}~~}yustwyzyxwrpntwuogaktwwwwwxyzzxwvwyz{{{{zwtsqsuxz{{{{{||{zz{|}}{zyxwyzzywttrmntwxz}~{{}}yusrrrtuuuutvwxz|}}}|zyy{|}~~}|{xxwz|}~}{wsqqrttrpppppqsuwxyyzyyyzzzzzyyyxwvvvvwxy||}|||{ysnjhginy{xwwuuutsqpprtuvvvvwwusqqswxzzz{~}z~zn^W]kvwwy|{yzyxyy}}}}}}~}|zxwwwxyzyyxwxzvd^eib^ahquvxwsprtxz{||}}}||||{{z{||||}}~}}zx{~~~}|~~zut~}~}|r_]u}~|{}~~~~|wuuxxpx|~}lmrmr}~sarxplv|xy|}}}}~}}~~~~~{wvy~~|zyxvttvy|{z{{{{zzywyxwpqx{xutvvpgiu|{y}zwuwututsuwxwxz|||xv|y`[yuf_py~~~{xy{~~}}~|||||||||}~~}}}}~~~~}||||||}}{}~|yvuvwyy{|}}}|{}~|ywvz}|zz{|zuqtz~}||~}z|zy~}ywwwwutsrqrrpnpswywsruyyxyzzyxvtsrqrtwyzwqqv{~}}}}|zxx{}~}}{z}}}~}|}|{{||{{{{{zyyyz|~~|zzz{}{y{{zzzzyzyz~}}}}|}|xwxyywqmnrtttuw||||~~~|yvttwyzywvrrsstsqkceswwwvwxyzyywvwxyz{{{zxutqsuy}~}|{zz{{yyyz|~{yxwwxyy{zyuspnq{~~|z||yurqrsuvvvvvwxz|}~}|zyz{|}~~}}{yyz}}}{yzyurppsrrppoopprtwxwxyzzzzyxxxxxxxxwwwvwxy{{zz{|||xtpligixzxwvvuutsomloqstuuvvvusrruxz{{z|~}y{{q_Qcx{yy{~~~}|}}}~~}}||}}{yxwvwxxxyyxwwzym[aida`fpuxxvqmqtxz{{||||||||{zz{{{{{{|~~~~~~}|yx{~~~~~}|}~}|y|~}}~~|ytnp|~|}}}~~}zyz|xsy~~zqrusw}}z|xrqz}}|~~~}~~~~{wuy||{{zzxuqopswy}~~|zz|xtllsyyxxurrpiipx}||ztqpommpsuxzzz}~}}zyywqoxfap|~|~|xx{|}~zzzzzz{zz|}~~~~~~}|||}}~~~|ywuuvxy{}}zyyyz{}}yvuuw}~||}~yrsz}{z|ysvwwxwxxxxyywvvtsrqonnpswwutwz{yyzzzxvtsrrtvyzxsmmt{~}|~{ywx{}~~~|{}~}|~}||{{{|}}~}zyy{~}{zy{}}z{{{{zzz{|~|z|}|}~~|yxyzzzunmqtvvxy|y{{}~~}zwttvxyyxvuuztrsvriarvuuvwxxyyyxwvwxyz{{{yvsqruz~~|||{{{{yxyz{|ywwwxyyz|{zvroot|yxz}~~|{wtsrstvxxxxwxz}}~~|{zyyz{}~~}{z{}|yutwxvsporrrqonnnoqsvwvwx{{{zxwwxxxyyyxwwvvwxyyyxvwy|zxtplhhwyvvvvvvurnkijmortuuvvutssvyzzzz{|}}{xyysaUm}zxz~}||{|||zxwvvwwwxyyxwyypY^hfbagpuwvvsruwyz{{{{{||||{zyyz{zzzz|~~}}}~~~|zyyy{~~}|{{|}|{}~}~}{yz}}~}|}}|||{y{}~}}zwpsx}yov|vux}~}~~~}|}zxyyyz{{{zxtoklry|~}ws||zvoorqrstwyzzxtonqx~~xtqnjglty{zww{~}~{wuvz{{wy}|xw}}zz{{|}~zz{{{{{{{||}~}|{{|}~~|zxutttux{~~}zxxxxxwuutttvtx~}vuz~}zz|xtuwyyvvwwyzyxwwvutsqppqsuvutvy{yxyyyxwusqrtvyyvqlmu|~~~zwvx{}~}y{|vrrv}~|||}}~{yz{||{zyyy~~~|{{{z{}}~~~}|zxxy{}~~}}|||{{zyy{}zqlqtyz{|~|{|}~~{wtsvxzyxvvw|vstyyoesvttvyyyyyyyxvvwxyz{{ywtqqty~z{{}}}||zyzz{{wwxxy{z{||{wrppv{vuwyz{{{zyvttttwxzyyxyz|~~~~}|zyyz|}~}|}}}ytqrvwwtqoqqqqomlmoqsuvuuvyyyxwvvwxxyyyxwwvvwxyyywsrtvyyvspljxxuvvvvvvrnkhgjmqsuuuuuttuwyzzyxyyyyxwxyteaw{{z|~}}}}~~}|||{{zxwvvwvvwxyxvxxlVYah_`krsuuuwzzz{{{{{{{{|}|{xwxy{zyyz|~~}||}}}}~~~~}{wwz}~~~~~}{{z{|}~}}~~~}~~|{}~~~|z}}{{||}zywx|}lq~|vw}~}}}|||}~}|{zyz|}||zwsnmquwy{ztsxvtqliggmqvz|{}zlcdv~}|vmgiqxyywy|}ywxzz|zywpe^gx~}{z{|}~~|||||||||}}}~}{zzz{|}~~|yvtsrrsw{}}|z|}~|zzzyxxyy{y{~}}}~||~zwvx|~|xvtuvvvuwwyywvuuuuuuuvuuuvvvwyywurqstuwywutv{~}~|yvuwz{||~|vtx~~~~~~~|{zz{||zzyz{}}|{{z{{||~~|ywwwvvwz}~}}}}~~}}|zy{~~vopw}~|}~~{wtsv{|{wvttxzxvyxqjtxutw{{yyyyxwuvwxzzzzyvsppswzz|~~~~}{zzz{{wxyyz{{{{{zvsqrx{vuuwwwwyyzxwvuuwxzzzyz{|}~~~~}|{xxy{}|}|ytssvxyyvtpqpppnmmnqsuvuttuvvvvvuvwxyzzyxwwwvwxyz{zyvsrvwvtsonyvvxwwuuutqnifinrttutttttuwxyxvuvuvwvvxzvjm~|||zzxxxttuuy{}~~}{z{zxwvvvvvwwxxwvwjUSWhadrtssstw{{|{zz{{{{|}}|zvvxzzzyyz|~~}||}{{{||||}}||zz||zz|}}|z{{|}~~~}}~~}|~~~~~}||~~~|zz|~~{zy{~||~~|}~}}}}~~~}~~~~~|yvsqrstuyy{|pnjgc__emsyzwvw{vmgdnz|}~~zrlmsx{yx{~~~}|zzyuvyh\\nmvfIVx~zz{{{{{~~~}}}~~~~}{zyyy{}~}zwtsqpqrvy{|||}z{}{yxyy|yx||~|}~{xvx~~zuttttstuxz{zxwwxwvuuxvspppqtxywtrqtyzyyyx{}~}~|}{wvuwz{|xw~~~}y{|~~{yz{|~zzzyz|}|{{{{|{|}~}zzxxxy{|~~|{z|{rpx}}~}zwssvz{yvvotx~|yxwqlwzttx|{zzzywvuuvxyzzzxtrooqsv{~~|zzz{zxyzz||||zzxussuz|ywvwuttuxyzzzxvwxyyzz{{||}}}~~~}zxy|~}}|ztqux{{{zxurqponmlmpsuwwvuttuuuttttvxyzyyxxxxwxyz{{{{xtrrrrssrswvxzyxvvvutohbltuuttsssstuwwwvtrrstvwwy{xqt|zrpopqqssrrrrssvy{||{{zxvuuvvwwxxxwuvlVNMaehpsrrstvy{{zzz{{{{{||{yuvzz{{zzz|}~}||{zxyz{zz{}}}||~~zxwz|}{{{}~~|}~|}~}||}~~~}}~~~~~~~~~}~}}~~|zz|~}|zy{~~~~~}~~}~|}~~~~~}~~}{xvvuuvvxy{|xrieegjmou{{utqnoxxjjxz|}|xsnotz{yxy||{{z{zzzyuuvi]`lzuVf|{z|{{{{~{zzzz{{}}}}|zxusrpppqsvxz||}{xxz|yux}~zwwy|}}~}ywy~|wtrqqppsx|~~}||{yxwx~ysonmmqvywtqqty|{z{}}y|~z{}~{vuuxz}{}}{{|~~~{yyz}z{||||||||{|||}}}{zyz}~{zy{wrz~~}zvursvzytstpw}vrpp|quy|||{zywvuuvxz{{zwrpnopqsz|~}{zz{{zz{|}~}}zyvttvy|~}{zzxwussvxy}~|xxwyz||}}}||}~~~|zz|}|}|ysry{}}||zyusonmkkmrxzzyxwutsrrrrrrtvxyyyxxxxxxyz|}~}{yurpoqrtvtt{}|ywuvvtohdqzwvtssrrstuwwvutsrsuwyyzzyvx{xuttvtsrrqqqppqrstvxz{zxvttuuvwwxxwuumUNM]dgmqpprsvxz{{{{{{{{{{|zwrv|}||{{||}}}{{yvstxyxv{|~}ywvy|}}}~~~|}||}zy{~~|yyy{|}}}~~~~~~~~~{{}|}~}}{{{~~}~~~~~|||zz}}z~}{zzzzz{{{xwxvnfgjotuux}td]qy}}to{{ywvtqnry}|zvtssrstuuvw{xuwrhbtuuyzxw||{|||~}}}}|{{{{{{zxwuttttsrrqrsy~|zzzxwy~}~~|sqrty}~~~~zxx}~zxvsqpqsx|~~}{zxy{}ytqpmmpuxxusqqty{{}~xty}~~|zz{~~}{ywvx{~y{~zz{~~|{z}}~}}}}}}||}}}~~~{y|}~}{zyxxyz{zuvw}~~yussrrvzxsqsw~vqvymv{}}}{zyxwvvvxz{{zvqnoqrqru}~|~~|zz{{z{{|}~~}zxutvz~~~~~~|zxustuv~{ywxz}~}}}}}~~~~~{|}~}z||{vy{|||{{yywuqnljjnu{|{zyxvutsqppooquxyyxxxxxxxyz|~~}{yvrmlnsxts|}{ywvusokmy|vttsrrrsuvvvutsrsuwxxxxxxx{}xtrqqqprtrqpprvyzzwtrstuwwxxxvvkPOU]aelpqqqsuwz||||||||{{{zyux}~}}}}}}~}}|yvsqtx{zy{}~~zxxy{||{||}~}}~{y~~~|yy{|zyy{|}}}~~}|{|}zz}}~}}~{{{{|}~~~~~~~~~}}~~|}}~}}|{zz{}|{{zysoppkfghmruwz}{se`w~z|{y~|yxuojdkw}}ytpmlllnmmonrz}{wpo|}xugq~}|}}}~}|||{zzyyxxxxwtqonnqtz}|yzyyyz}}~xtqpuz}~{xwz~~}{yvustuxz}}{{z||xqopoonoruwxvsqsw{}~~~}ywvwwtmmty{}|zyz}~~~~~~~|yy{||{|~~}}~~~~~~~~~~~{z{}}{z}~|||}|zxxwvuvvxxz{~}wsrqrtvxvtru{yrwloy}~}|{{yxwwwwxyz{zxxwusrponv{||~~{{zz{z|||}~~|zvttw}~~|{wttps{}zwwz~~}}~~~~~}||}}{tv|yxz}|{{{zyxxxvsoliiox|||{{zywvtrpommpswyyxxxxxxyz{}~~~}|zwmfhqywx|~~}zxwusppu}|vvuttsstuvvvuuttuvvvvvuuuw}|xupmmppprsrqqpprtwy{ywsqsuvvwwwwwiLS`\\`cjqrrrsuwz||||||||{z{||z|}~~~~~~~~~~}zwtsx|~}}||}}}~~wtwyz{{{{|}}~}~|x}~~{z{|{{{|}}}~}|{z||{z}~~y{|}{{}|}~~}}}|}~~}||||}~{zzyyz|}yxwuonpojfdehkpw{~wttxzx||||xxxslifmw}}wpproklokisxv||yz~|umcr~~}}~~}||}}}}|yuqpoooquyzxy}~{~{{ytptx{}~|yx{~~{yz{zxwwxz|~~}}}~|nhlopqooprvxwtsuz~~|{z{yroonmommlnv}~|zyz|}~~}~~{wz~~|}}{zz{{||}~{z}}|{|}}zxvuuuvvxxxxz~}xtrrstvwutsw||vu}{lv{}}~||{zyxwwxxxyzzz}}ysssqouy~~}yzyzzz}}}~~}{yvtux}}}yvxtsz{xxz~~~~~~~}|{{yvsrtvzuqzzyxwwwxwuqmjltyzz{{|||zxvtrolloswyyyxxxxxyz|}~~~~}}|tjgp{|z{}}|{ywvttuxzzwxvuuuttuvwwvuuwxwtrrrrqqt|vtqnnnrx{xsssrqqqqqsuwz{xtruwwvuutwvdX`b]]biprrrrtwyyz{||{{|{{{|~~~~~~~~~~~~~}~|yww{{{{{zz{{|}yuvxxxz|}}}~~}|~y~~}}}}}}}}|}~~~~~~}|}~}}}|||{~}{}~~{y|~}}}|}~~}|}}||~~}}}}}}}}}|zyyxxy{|xvvurrrnhb`djlpx}~~|zyy||{zwwwtporuz{zvrswsoprmlw|z{~}zxyy}vjpsy~}|~~~~}zvtrqqppsvvvw{|zzwstvy|~}{z}}zxyz{{{zxxz|~~~zmhlooponpruxwuuw|~ywutvupnmjjmmljkt}~}{zyyz{|}|||}~y|}|}~~~~~||~}~}}}~~|{z||zwvuuvwxxz{{|zwyz}|xtsrssuutssw||y|{t||}}}|}}|{zyyyyyyzzy|{ytvyxvy|||xyxyyz|}~~}|zwuuvy{~}}~|{~yw}}yy{~~~~~~|{zxvsty{}yxzzyxwwwxywsokpyzyyz|~~~|zxurplnqswxyyxxxxyz{|~~~~~~~~~zrjo{}|}}||{yxvuwyywwyyxwvvvuuvxywvvyxtpnooonnpv}zomorw}|vuutsrrqqqsuwyyvtwwwtrrrvugfjc\\]bhlpqqrsuuvxy{{zyz{|}~~}|}}~~~}}}}{zz{zzzz{||{{}xvz{zyz|~~~~}~||}~~|||}~}{||{}}~~{y{~}}}}}}}||||{~~}||||{zzyyyyyxwwxwuuuxxrnkeabisvw{}~~}zwxz{{xvuwvtuwyzxuvxywsprsqrz|zz|~|yxuuy{sjv}~~}{~~}{yxwvutvwyywy~||yywuuuwz~~~||~}xvvy{|}|zxxz~|uppnnmmmoswyxvvwxzxsqqqrroolihjjjimw}}|{zzyyyz{||||}~~~|z{}~~}|}~}zvux{~~{zz{||xvxyzzyyz|}~|vttvtsrsstttsrsvz~~z}}}}}~~~}|{{zzyyzzz{zzyxzzz}~zy{yxwwxy{|}}~{wuuuw|~~}|z{~~~v}~{z~~}~~~{yyx{||{{{{zzyxxxyz{zvqjs{{wx{}~}}{zwsqnosuwxyxxxxyz{|}~~~}}~~~~}wonx|{zz{|{yxwvvxwvwyyyxwwvuuwwxvuvxwrnlmmmmmlpvurry}|~{usuvuutsrrqstvwxxwwwurpqrutmmme]`gikmmorttssuxyzywy{~}{z{|}}~}||||||{zyyz~|}~zx{|{zyz{{|}}}~|{|}~}|}~}|~|yz|~~~||~~~~~~~~~}}~~}||{|}|||{{ywuvwxyxvtssqnpqvtlkliinu{{z|||}~{zz{|{zxxzyxwyzzywy|}{xvvwuvyxwxy{{ywvuuuqo|~~~}{~~~}}~~~~}}|{zxxxyzz{}|y~~zwwvtttvy}~~}}~{xuw{~|zwvx~~|}z{vqomlkkmsyzxwwusrponopppppmkgijihmv{~}{zyzyyxxy||}}}|~~z{}~~~~~}{xuqpqrv|~{zyyzzzz~~~yvuwvtsssrrsrrrux|~}||}~~||{|}{{{|}~||{zy{}~|yxx}|yvuvxz{}~~|uuvwz~~}~~}{zxx{~zz~}|~}}~~|{{}|zwuuvy{zzzyyz{|{xrkv}|wwz|}|{{zywtrprvwxxxxxxyzz{||~~~~~}}~~~yvrvyzuqvy{zywutuuvwyyzyyxwvuvvwtttuspmlllllmjnstrv~~~~}yuuvvwwvvvuttstvwxxxwvrpstwvroleakqppqpopwwvssux{zwy~}ywz|{}}}}}~~}{{z|~}|ywwxyzz{|~|{{|~~~~~}||}}xx|~~~}~~}}~~~~}~~}}~~}~~~}|||||xusuxyyvtpomjhklpnlmnnsxyz{|}zy|~}|{{zz{{||{ywustx{|~~|zzxvvxwutuwyyxxwvussu||}~}|~}||}}|||}~}|{zyxwxz|}~{y}}yvvutrrtx}}zwvw|}|yvux}~{zz{wspmjkoptyzxwwvttrrrpoooooonnljihktz}}|{zyzyxxy{||||||{z{~~~~}xtroprv}~{yxxz{~zz{|zwtrrqrrqqsuxz}{{|}~|{}~||}~~~~}zvz|~~|xx{~zwuuwy{}|}tvzzz~|}|zxxwy}|{}~~}}~~~~~~~}}}|ztopqsw|{{|{{||}}ztmw}|yxy{{yyyyxwussuwxyyxwwxyyzz{|}~~}}}}}zxuwyzxsuvyyyxusssuvxz{zzxvuttuussssrpnmlllllmprsst||{ywuuvwxxxxxwvutstvwwwwwvuuwywsojejy|ywxuqo|~ztstx|{x{}~xw{|z}}}}}~~~|ywwwxzzz|}~~zzz{~~~~~~~}}~~~|||~zyyz||}~~~~~}}}~~}~~}{{{|}}|||}~|xtstxzxvspnmhdilolnnknvzyyyz|zv|~|xywy{||}|ywtpnu{}}}|{zxvxxwsttvwwxyyxuttx~}yy}~~}~}|||||{{{||}}~~~}zytruy|~}{{}~}zywusqqsv|~|zxxz}~{yxvvw|~zxywuwvqjpyyvvwvuuuw|~{wrnoonnprvtmgfipx|~~}}|{zzyyyz{||||{{~z{yy~~~~~~~~~{vsssv{}{zxz}~{z{}|{vrrrqqrrtvwx}~{yz{}~~~|{}{psz}}zy|~xutuxz|~{~uz~~|~{zywvxy{~}|~}}}}}}}}|{yy{{}}}zwqmjjou|{|}|}|}}}{vpx}}zyyzywwxxxxvuuwyyzyxxwxyyzzz|}~}{{{{{yxwyyyyvsruxwwtqpprtwz|{{yvtsssrrrstsrqonmmlloqssssz~{yvuuuvwxxyxwwwvutsuvvwwxxwwxyxvpjis|z{yuozz|yxvx{|z|{zyyz|~~zy}|z{~|{||}}~~~}~|yxxxyz{{{||{xttu{|{}~~~}{~~}}~~~}zyyyyz{|}}~~~~~}}}~}{|~~|yxyy||||}ytsvz{xvtrpnjeinomprosxxwuttvzsw}~xttxy{|~}{yvqmsy{|{yyywxzxvtttttuxy{{xwwy|}|z{}}~~}}}}|{zz{{{{|~}~~|zvtw{}}{{}~~}|ytqpqsv{~}{yyz{{zxwvuvx{}~~|yy|ww~}wpx|tqstttsuz~vpqqomps||sjhiow{}~~}}||{zz{||}}}|||zz~wr|}xw}~~~}}}||}}}~~}|{{}||}~~|wttuwy~~{zy}~~~~|||||{xutsrqrsuwwxy||zz{|||zxz{~wqwx{}vstwy{|~w~~}}yxvux|~~~}{z{||}||{zyxwxz||{yusoonty||}}}}}}~}|xuy||{zxxwxyzzzywwwxzzyyxxxyzzzzz{}|||{yyyxxwxyzzzwtsuvwwurpnnqvz||{yusssrpqrtuutsqponmmoqrrssy|zwwwvvvwwxxxwwxwuuuuvwxxyyxxyzzwpmnw~}||zwvxv|}}zz|}}|ysrsuwz||||}|yy~|zzz{{|}~}|}~{vux|}}||{|{zytnlnvus~~}~}z~|zz|{{|}}~~}}|}~~~}||}|z|~}zwwwxzz{|~{utvxyxvuttssprsroswwzzyyvtqv~uuz}}}xkipstw{}~~|z}}||zwwtsuwyyvvvsrtv{}|{zyz{||yyz{|~~~~}|{{{{zyy{||||}~~~}|{z{}}}}|||}~~ysooqtw{~{zyxwvuttttuy|||zywy~z|}y}|vtvxvtstw~zvwvroou~ytsnpx{|}}}||{zzy{{~~}|zz~~~xmit~yy}~}~}||zzyyz|~|{~}}~wrt{x|xz{}|xuuvvw{~|zz~}~~~~}}|||{ywusrrstvwxxy{ywwwwtruw|~~}~st}w~xrtwz{xz~|ywvtu{~~~~}{zzz|}||{zzyyyy{{yxvvsrtx||||}}}}~}}{yyz{|{yxwxyz||{zyxxyzyyyyxyz{{{zyz{}xuyzyxwwwwxyz{zxvtuvxxxvrnlnsy|{yvtrsrroprtuvutsrqponnpqqrsw~zxvvwwwwwvwwwwwxwvvvvwxyyyyxxyzzxurrw||||}{{|{w~}|{{}~zyvuvyzyy}|{yxzyyyyzz{}~~~~}~{wuvy}~|xwwwxxuqrtzxw~~||~~|{|~{||~~}}}}}}|{{{||~~}|||||{}~}zxwvwxy{|~{vvxyxvvvxxz|zzyvsw{{|}||zzz}~vswyxsaVbnopvz}}~}|{zvsnmmmvy{xuroqv{~}{yyzywuprwwwy}||||zxwwxxxyyyy|~~~}{{||}}~~zspquxz|~{yxwusrsttrqv|}{wuux||}~ytsw{|}|wttw}}}vuy{|||||{zyxwuw|~}{{p}~~|skny~}}~~~~}~~}|{zzyz{|~~{{}~}}~tt}vxyvy{}}wz}|xwwwwvxz}~{~~}}}}}}}||{{yxvtsrsuxyyz|}}yvuutpmquz|||~xr}|{uux{|y~{xvutuz~~||}~}{|{{}}}}|||{{zyzywvvwuoty}|{{|||}}}|{zz{{{zyxxyz{}|{zyxxyyyyyyyz{{{zyxxz{tnuzzxvvwwxyz{zyvtuvxzzwtollpvzyxvtsssroqrttttsssrqponoqqqrw{wvvwxxxwvvuuvvvwwwwwwxxyyxxxxxxxwxwtvzz|||{{|}|}{{{|}~~|{wqw|zwr|{ywwvwxyyzz{|}~~|}~~{xyz{{|yzurptwxvutvz{{}~~{~~{z{}~~~~}|}}~}||||||{{{{z|}~~~~}|}}~~~{xutuwy{|}}}|zyy{zywwyz~}|yyxwv|~||~}|wuuspg_bkqsuxyz~~}}{yvx{{{unlmlqrtqjggmvz||zxyzumffoyxvu~~~}}|ywwvvvwvvvwx{}~~}}~~~{wuwz}~~zyxwutuxyvqnry}{usx}}|zssy}{{}~~|z{||{zzzzyxvuqrx~~||s|zuz}|}}~}zz}~||{{{{|}}zz~~~~xq{r|}ywz{}~ztw{~{zzzyxxx{~~~~}}~}}|||{{zzyxvtsssuxz||||~{xvtspnqsy{z{|~u~yw{|}{{vttvv{~|||{{|}|{|}~~}}}}|{zyyyxvvvvqv{|{zz{{|}}||zz{{{{yxxxy{|}|{zyxxyyyyyyyz{{{zxxyxxngryzywvvwwxyz{yvtuvy{{yvqmkntxyywuuttrqrsttttssssqponoppprvxvuvwxxxwvutuuvvwxxxxwxxxyxxxyxvooy{wwxy{||{|{{zzzz{}~~~~}}|xtz~zvr|ytwzzzzzz{{{|{{|{|}}~}}}}|zusyvvz|{ywuuw{|{||}~{}|zz{~~}}~~}}}}~~}}}|{{||||{z{|}~~~~~|xtrrxz|||{zywwx{|yyyz}~~}zxvtv|}||~~|yunkikmpsvxxvuuwzxvxxslmsv{xsqtuuutsnmouyz{zxxzzuh\\_n}|xw~}{yyxwwwvuuuuvx{~~~~~|{{|~{yyxwwz|{vpmoty{zs~~z{zss{~~}|{{zyxxyxwusoqy~~~~~~}y~{|~~|{{~|{}~}|||||}}~}|}}vwp~|{z{{|}~xvx{~~|zyyz{zz{|~}{{|}~~}|||{{{zyxwvutstux{}~|z{~~zwuspnpuy||{{}{z}~~zsqqtx|~}|zzzz{||}||~}~~}|zxxxxvuuwwz|{zyyzz{}}||zz{{{zyxxxyz|||{zxxxyyyyzzzzz{zyxxzywpgpxzyvvwwwxyzzxvuvwyzzyvqnlnsxzyxwwvusssssssssstsrqpoooopquvvuvwwwwvuutuuvvwwwwwwwwwwwwxxwsjjy}yxwy|}}|||zxxxz|~~|{|~|{yxuw|~~}|{{{{{{zy{||{{~~~}{tu|y{~yvwvwxzyzzz}~~~}}~~z~{}}}~~}|}}~~~~~}~~~}{{|||||||||}~~~~~~xssy{}}|zxwurquyyz{|{||~zvqu{||||||~~|yupmjirvxxyxwvvwwpjjopkimrywuttuwy{||{|}|{ywvx|{vi[Ygz{vt~~~|{zyyxxxwvtttvvwx|}|}}~~}zxxxy|}ztmmsrsy|z~z{}yy}~~|{zzxwvwxxwusrw~~}~~}y{xuy~~|z{}{}~~}}|||||}}|{{|}}~~}x{{t}|{z|}~~~{vxz|}~}{{xxy|}|||}~~{{|}~~~|||zzyxxwwvvvuuvx{}|zwxz~}yurpnouy|||{~~}unnqw|~~~}|zzzz||~}}}}|ywvwwutuyz{{zyxxyyz||||{{{{{zyxwxxy{{{zywwwxxyyz{zzzzzyxy{zxtqtwwwuvwwxxxyywvvxyzzzxurnlnsxzzyyyxvtsstssssssstsrqpoopqsvwvuuvuvvwvvvvvuuuuvutvwwvvuvwyxqjoz}{yxz}}}}~~~zyy|~~~~{uu{~}}}||||{{zzy|}}||~}}~|yxzxy}|{{|zyyyyy{{}~~~~}|}~}z|{~~~||||}~~}}~~~}~|{{{{|}}}||}~~~}}}~~}xy|}~}{yyxumhrz|{|zz|}vpu{||{zyz}~~{xvvvtnsz{zzzxwyyypfb`_dkuy{wtuvwyyzxwwxyzz{yy{~xokd]`t|ws~~~~~}{{zzz{zzywxxxy{}|}~~~~~~~~}}~zwvxz||zslmvrqx}}~~{|~~~|yxxxvuuvxyxusuy|{|~~~~wvw}}{z{}|wy}}}}}||{{}~~|zxxzy{{~{u|xy|{{|}~~zx{|}}~~}||wxz|~~|}~~|{|~~}||{zyxwxxwwvwwwy{|zxwwx{|vsqpqty{|{z}roqv|~~{zzy{|~}||||{ywuttttvy{zzyxwwwwyz|||{{{{{yxwwwwxzzzywvuuvwxzz{zzyy{zz{{zzyxwvuuuvwwxxxyxuuvxyzyywurnlmrwz{zyxxvuttssrrsssttttrqpoqsuwwvussstvwwxxwvttttwuuvxxwuttv}wmlw|}{wy|~~~}}~{vww|~~~~~|{yy|yz}~}||{{{{zx{}}~}}|}~~~|yywwz{z||{zyxyz{}~~}}~}||~|~~}}|||}}~}}|}}~~}}{zzz{|}~}}~~~~}~~}~~|{~~~~{{{~xqlq{|{{z{}~wux}~}{yxy}~{xwy|}zy{{~}zyxxzyqeVORZlwzzwuvvyzzyuqqrvyz{zy~}uonrjcq}zv}~}{zzz{~~}{zzyy|~~~~~}}}}|{zzz{}}~~~~zustz}|ztoo{wtx}~}|~~~}zustuutuwyzywvx}}zzwvw{|~}}}~~~zyz~|{zz|zrmsz|||||{{{~~yvvvxwwy|xu~t}||}~}}~~}xy|~~~~~~}||~~~}|zyyyyxxxyyy{|}ywwwwy|xrqpqtx{|{z|~rsy~|y|z|~{{{{|{yxusrstwzzzywvuuuuuvz{{{{{{zyxwwwvwxxxwvtttuxyz|}{zyy|||||{{zyxvutuvwwxxxywstuyyyyxwuromnsx{{zyxxvvutssrqrrstuutrqpqsvyyxwurpqsvyyzzywuuuwzyxxyxwvtstvtot{}~~|~}}{{{xppt{~~||}~}|{{|}{{~|zzz|{y{~~~}|}~~~~~zxxwxxyz{{zyz{|}~}}}~~~~|}~~~~}}}}~~~~}~}||{{{{|}~~~|z|~}}~}}|}|vuyttz{|||}~}}~}zxww{{xwz~}{yy{{{xwz}{wjYT_ekvxyywwx{|zxutsswxy|yuvvqqt|vjq{~}}~~~|{zyz~}||zzyz}~}||}}~}zxvvvx{|}}}}~{wtsy~~}zwuzyyz}~~~zxtttwyzz{{z|}~}ysrrstuwy{|{zy{|xrqrsssx}~}||~}z|~|~~{zzyzwtswz{{{{||{|}~|vttvxxxx{~xv~}r~~~~}}}|zzzzz{{yy{}~~~~|{zzzyyyz{{{}~}ywwvvxzzrpoptx{||{}}sxzwz||{yyzz{{zyvsrruxyzyxvtsssspoty{{{{{zxxwvvuuvvvutsssvyz|}||zyz}}}}|{zzxwuttuvwwxxxxvssuxyyxxvtsporvy{zyxxxwvutssrrrrstuutsqqswz|}||xsppswz{}}|zxwwy|{{zzxwwvvtolrz{}~|{yyyn`\\lw|{xy|~}}||}}~{yxy{{{|~~~}|{|}}~~{zyyxvvxy{zyxy{}~}}}}~}}~|{}~|}~~~~~~}}{{{||||}}|||yyyz}}}~}}{{{{siozxux{}~~}{yxwvsv}}}|yrrx{||zyxy{{{{|xvqihsvswx{zwxxzzwuuvwtuz{{tlnosxz{qu}~||||}}~~~~}||zyxxz|||||{{yx{}~~}}{zyz~{z{|}~}zwutsuz{|}~}}~~|xwz}~~}yzz{|{xuuvz~~wtqqqrtuvvuuvy~~~~{vtrrtvy{|}}|{}zunnnpprw~}{}~|zyyzzustvxyzzzz{{||~ysrsuyzzz{~z}zq~~~~~}ywwxxxyywvyz}~~}}{zyyyyyy{|}}~~}yxwwwwx|{spoptx||||~{v~~zvy~wsuvwwxy{{zyxtrsvxxyxwusssrqolpvzzzzzzxwvuutttuutttssvy{}~|{zz{}~}}{{zyxvutuvvwwxxxxvssuxxyyxvtsqptwyzzyxxxwvvuttssssstuvutssv{}|vpprvy{}~|zyyz{|{{{xvwy{zwnlrz|z{yvvtaKJZjwvtw|~~}}~~~|{zyxy{|~~~}|{}}||~z}}zwvx{~{xsvz}}}}}~~}{yz|}|}~~}~~~}}}}~|z{|||}}}~|wx~{wyyy~}|{z{zz{xmhu|xxw{|~{xwtrtwvsrrry}xrou{}~{zz{~}|xommqrtxuuw}~zyz{{vsrmkpstu{ztmmswy{yuy}}}~|{{{{{}}||||||zwuw|~~}||{{yy{{zzywuux~}zyy{~~{xwtrty|}~~~}}}}|{z{}}~}|{{{}~{uqppt~~{xvutuuuutrrsw|~~~~|yvsqquy{{|}~}}}ztrpqnjv~~{ywwx{|}xssvxyyyyz{{||}~|rqsuy{}||~~ut~|{yyxxxz{zxxx{}~~~~}|{yyyyxyzz{|}||||yxxxxxwz||sonpty|}~{}|z~yyz{{}xqmqsuuux{|{z{vntwxwwvuttttsqomntyyyyyywvutttttttsstttvz{~~|zz{|}}||{zzywvuuvvvwwxxwxwrtuyzzzxvutrswyzzyxwwwvvvuuuuuttsstuuuttx}~xqpqty{~~|{{{{|{||zvw{}}}}umv||{zywtsrY>CFZpmsx}~~~~ywyzyyzz|}~~}}}~|z|}~}wx~zy{|xrv{}}||~~xz}~~|zwy|}}}~~~~~~}}}|{{{|}||||||ww~}{||}}zxxxxx{zwtu{zzyz|~~yssvrmrxzxtoanytvvy}}{{||xodhqpmv{zz|y{||re^ROgwrqturnnquwxyuuuvx~~}}~~~~}}}||{z{|{zzzz{{xttwz{||{z{{z{|zxwwttx~|xurty~~|{yvw{}~~}}}}|{{{{|}||{z{}|zuqnno{~{xwvuuvvvvuwz~}}~}{xtpnrw{{{}~}}~zvrqqoy}~~}|zxwwx{}wvuwwxxxyzzz|}}|rpqsx|~~|~}|w|~{zzzzyyyyz|{yxwyz{{}~~~}{zyyxxxxxzz|||{{|{zyyyyywwx~unoqty}}~{}}{vuw{{rnlprvvtw{|{{}yqvywvvtsssttspnmoswxxxxxvuutttttsrrrttvx|}~{zxxxzzzzzzyxxwvvvwwwwwxyzzsvwyzzzxvvutuxzyxxxwwxvwwwwwxxwuttttuuuvz~yqqpqvz~~|||||||}zww{|}{y}{yyyxwtrsrX9;>Tpmu{~~~~||}|wuwyx{{{|}~~~~}~~|{|}~}wov~~~}zsx}}}{|~~~qhu{|}|zwu{}}}||}}}|}}||}~~}|||}}yx}~~~|xvx{|{|zrkty|{{{|}~~ysuwrknuz}t[aigrwwy|~}}}~~}yrpousnry|~~~{y|~}mTLKUajklnqponptwyysqqru{zyyz|~}}}~~~~~~~}}}~~~}||{zxxxxzyxvvvuwy{{||}||}|yxzwx{~~zvspow}~~~~~}}}}}}{{{z{|{zy{{|zyxurqo{|zxvuuvw{}~~~}{yvspquz||}}||}|xtqwy~~{zxvvvw|~zwvvvwwxxxxz||}~}qnnpv{~~~ys}}w~~~~~~{xuvwxzz{{zy{zyxxxxxxz~}|zzyyyxxxxzz{||{{{{zyyyyyywx|wppqsy|}|z~}vw{vponpswvtx|{xy~|uwxwuutsstttrommnquxxxwvuuutttttsrqqstxz~}zwuutvwxxxyyyxxwwwwwwwwwyz{svxyz{zzxwvtuwxwwwwxxwwvwzyxz||yvuttuwxy|~{rqoosz~~||}}|{{|yvvz{}~~}}zxxwwvutuy{`959Sxzz}~~~~}{y{|zyzzy{|||}~~~~~~~~~~}}~~{uqy~|wz~}|{|~}nixz{|{yvuz|y{}{z{|}}~}|~~~~~~~~}}}~~|z{}~|||}~~}}}|ywy|{~|j^lw|}}||||}}}}{ywvrnltz|s_`baiooopu|}|||}}|{zzxvtqos|~}{vstxqVRam`Yafjmpqrstvz{uosuvwvuuwy{~~}}}}}}~~~}}|||{|}~}|{yxwxxx{{yvvvyz{}~~||{z{}||}~~{yxwuqy~~~}}}|}}|{{zzzyxxy{{xy{zvts~|zyxvuuuwz|}~}zyvyyxxux{|{{{|}}zwr}~}~~}}}yvvwz|~~ywvvvwwwwxxz|~}~~tpnotz}~{xuv~~~~~yyvuuuvx{}|zxyyyxxwwvuw{||zyzzxwy{zyzz|||{||{{zzzz{zyxy|}rrtsy|}{|z}{sqnotvzzzz|xwu}}wwwvuttsttssqommoquwxwvuuuuuuttsrrqpqsy}{yxusstuvwwxxyyyyxwvwwwwwwyxruwyz{z{zxvutuuvvvwwwvvuuzzy{~}xussv{}|~zrpnnqy~~}}}|{{yxwutwxzz~y~zyyxwursx~kB9?^~}~~~~|z{||{|{y{||}}~}}~~~~~zuu{~~{|~~}{|~yx{{|||zxxz||~}ywwyz{|~}|~~~~~~~}}|{{~}xwxy{}}|z|}}~z{~}zz{m^nw{}~~}{z{{|||{xuvvqv|~ytpnkhgjmjinuyyxxxz|z}~|vttnglxprwqjjqvgfrqdZ^`glqwvspqswtnvzzvustuvx{}~~~~~}~~~~~~~}|{zz{|}}}|zyxyyyxxwutuy|}~|{y{|}zyyyxwz~}}}}}||{{zyxxxwy{zxyz{wuw~{yxwvuuuuttuvxy||y{{xtpnrv|{vw{{zyz|}~|{z|~~~~|ywv~~zwuwy|~ywuvvwxwvyy{||zrmnsx|}~|}vw~~~~~~~|vwvuutuvz~|ywxxxxxwvtssuwyz{|{xx{|{zyz{{|}~}||zz{{|{zyxz~|nmprx}||~|yssonrv{{zz{xwu{|wvttttttstsrpmmmoruxxwvuttuuttssrqpopqz~|zxwwuustuvwxyzzzywuvwwwvvxvptuyzzzzywutssstuuwvuuvutvwy{~zwurx}}~ysqpprw|~~~|{{zwutsstqtux~~sw{|{ywsrsz}tSK_t~~}~|{{}}|}{y{{|}~~}}~~~~~{uw{~~~}~~~~~||}|||}}}{yy{}}~}zxvxyy{}~~}}~~}}~~}|{||~}}|yxxz{||{z{}~~}|~}{zzompw{}~~}{yyyz{zzyx{}{{|}zwuspmknuwtqqroqsw|{y~~zzsUCI_IHbqqqrtsy{ug\\]`gmsywrnnptsox{|vusstvxz|}~~}~~~~~~~~~}||{|{{}~|{zyxwwxwusrux{|zyxz}||||}~~~~}|||||{zzyxwwwyz{zxy{}zww}|zyxxxxwvuronoprstuz|xttuqmigimt}zx{{yxz}~~~~~~y~}rsuwz}{yy{}~ywuvxxxxxz|}w{sllpx|}~~~~ux~~~ztuuuutuvz|{wvwwwwwvtsrqtvxy{|}yz~~}yw|~~~~}|{{z{|}~}|zyx{pilry}}}xstpotvywxxzyyy|zvtrrrsstssrpnmmmptwyyxwutuuuttrrqponony}}{zyyxwuvvwwwxyyyxustvvvuuwsptvyzzyyyxvtqpprtvwuttusqqtx{~}zusy{|}wsqpprv{}~}||zwsqqqsnpruz|uy}{ytrqz}rtferz~~}||}~~|}~|{|~}{{{||~~~}~~|~|xy|}|z{~~~zuty~~~~|}~~~~~~}|}~}|}~~||~~~~~~}}~~}}~}|{|}|{yyy{{||{{}~~}|zyvvx{}~~}{zyxyyyzzz{{|~}{zzwvtttuvyyxvpjlqv{|wv|}~zrZ<69G?:Idsvvtr{zsicdlru{xrnmnonqz||wusstvxyz{}~~~~~~~~~~~~~}}|{{|~~}|zyyyxwussssuwvuvx{~~|}~~~~}}}|{{{{zzyyxwvwx{|}|yyz|zww~|zyyyyxwwurmkklosyxx{~}ywwwqliiihly~~{|{yyz}~~~~~~llsgmx}|}~}|}zvuvxyxx{zixtmlox|~~~}yy{~ux~~~~~~|{{yuttuvvvvyzyvuvvwvvtsrqqw~|zxxy{|~}{wu|}{{zz{|}~~}{zyz~ynmsz}zvvros{}zywxy}{{xussssrssrqpommnnqvz{zyxvutuutsrqponmmkx}}~}|{{{zywwvvvvvvvutqqrtuutttrpsvyzzzyyxvtplosvwwvusttssuwz}~~~|vsz}ww~|vrppqruz}~~~}}zxsppqsmpquxxxz~}{wuuzzmusrqruwxz{{|||~~|{|||}}{{||}~~}}~||{yy|zyuy|}xqlq|}}}~~}~}|}~}~~~~~~}}}~}|{zzy{{|}||~~~~~~||||}~~~|zyxxxyyyz{{{xyyxyzyxxxz~{xxzzmakrx}{vtwx|xrbD313859Xongeeknsvsmkt{{|ytppssprz|{vtsuwxyzyz{}~~}}}~~~~~~}}~~~~|{{|}~||||{yvttssttttuwy|~~}}~}||{{zzzzyxxxwvvwz|}}|yxxxvux~{yyz{zwusolkjjov}}~~}}}}{qljiiimu|}||zz{|}}~~~}||zl`vhky~}}~|wtvxyyy|l\\swqmny}|~zvxz|~~~vy~}||~~}|{yuyxvvutuvvvvwwvvwvwvutrqqsy|~ukuyy}{{xt|~{zzzz{|}}}{{{|}vptz~~|yxtqr{~}zyyy{{zwruvurqrrqqpolmoqtw{}|zxwututtrqponmlkiu}|}~~}|||{zxwvvvvuusrpooprsssstqpsrvyzzxyywvojpwyywvusttvvwxz||}|zxw}zst|~{uqppqruz|~~~}}||{{xtpprsoqqtvuuv{}zyxwwpvsqoqtvx{~~~~~~~|}}~}{{{|}~~~~~}||}}~}|zzz}xsqx}~|yuqt{}}~~}}~~{}}~~}}}}~|}~~|~~}}~}~~~||}|{zy{{|}}|~~}}~}{zyxxxyyz{{z|{xwwxyz{{{{zyyy{w_M_fgpwuooqywwrN5346:G\\cXT_ga^gnqqtz~}|zwssxxsryzzuttwy{{zyyz|}~~}|{{|}}}~~~}}~~~~|{{|}~~~}~~~~|zwuuuvvwwwvz{}|||~}{{|{zyz{ywttttvwy|~~}{yyvqkmsxz{yyzz{{wtomkkkgky~~}~{wronnmmmptz|}||||{yy{||}|{|~{lunp|~~xuuwyxx|tZWm}~zsnw|||xwxzz|wy~|||}~~|zyxuwxxwvuwvxwwwvvvvwwvusrrrqy|yu_q|w{{|yw{}|zzyz{||||||~~{qt{~~}|{ystz~}|{yz||zwuwzurqqppponjmoruy}~}{ywuuuutsqonmlkigr{}}~}}|{zwvvvvvutrpoooopqrrrsqqqlpxyxwxzyvpmvz{zxvtsstvwxyyzzxuuz}wrsy|xsppppqvz}~~|{yvtssrpprstopqstrns|}zusssvuttvxz|}~~}}|}||}~}zx|{y|}|}}}}|{z{||}~|{{zrqtz}}{zwwy|yy{zyz}}~~~~}||}}~~|z}~~~}}|{}~~~~~~}{zz{|}}{y{{|||{}~~~}}}~|z{zyyz||}}{yyzxvtttuvxyyyxyzyfF;JYYbpwrpsyvvnE49<=CQXQIVndVZekotwz|}|yxvuxzutzzyvuvy|}|zyyy{|}~}|zz{|||}~~~~~~~~~}|{{||~~~}|}~~~~|{yxxwxz||}}|}}{|~}{{||{z{}|yvuxz|}}~|yxuopusvxxxyyzzzxtnjjnpquz~~~~}|xqoopqqqqrux{|||}}{wvx{{{z{{~~~~z{~~zzux~{z|}}~~zvuwwwz~mW[m|xnt|{xxx{~yz~}}~~|zywuuwzzyvyy|{xwvvvvxwvusrttuwz|ugtwtxz~}{|}{yxyy{|}}~~st{~~~xty}~}{{||{xx{|wsqonnmnmgmquxz}}|zxvvvutsqnmmljhfoy~~}}|ywuuuvwwvusqonnnnopqqrqqokltwvvwxxwtw{}}{xusssuvwyyyywsno}zwy}~yurpppoqvz|}|zwspmlkjknrstpoprrrou|~{vpqty{||z{|~~}||||}~~{y|xty}{z|{{{{zyyz|}~~{xxwvv{}||zyy|~yxzywx{}}}{{|}~~~~~~}||}|zz|}|{{{zyxy{|}~}|||~~}zxy{|}}{z{|||{z{|||||}~~|{}||}}~~|yxwurqnlkmoprtvxyyoXEEJPhu{zxxyutq^I?OUSRMKYkqaYXYgmpsx{||zzxwxxuu{{zwwx|~}{yyyz{|~~~~~}|zzzz{||}~~~}}}}~~~|{zz}~~}}|||}}~~}|{yxxxx|~}}~~}}}|}~}||}~~zvv{}{xwtsuuvwwwxyyyxwsnklpx~|~}}~~}|wpnnqrsttutvy|{|}}{xvwyyzz{{~~}zvz}z~|~|z{}}}~}|||~~{wuvwx|iWex|qt|}zy{{|}{{{wtsuyzxtwx{zxvuuvwwwvusrrx|txz}~xt{{}~}{yzz|}~vv|~}{}~~}{{|{zxx{~|spljjjlldmswz|}~}|{ywvvvusqnllkigfnx~}|{xvssuvwwvusqonmmmnnopqqpnnmrxvuvwwvx|~}|xvttttvxyyyyvngjz}|yz|~|vsqppooqvz{{zwtqmlljghnruuqnprsuwz}~{vuvtvxz{{}~~}}}|}~~}}|rpw|yy|{zzzxwwy{|}}}}~}zww{zz{}}}{||}~}{ywxzzzyyxy|~~}~~~~}}||}~{xy|~}||||{zyyz|}|{zz|~~|zxxy{{{{{}}~~}|{{{{{{}~~}||}~|zzzxtqkecdinoqtwyxxnWEHWlox}||zutvrVKjzvk^arzumeY[jqopvyzz{}{xupmpz}||}~~}{yyyz{{|}~}}}}~~}{zzyyyz{||}}~~}||}}~~|zy{|}}||}|{z{|~}}|zzutwxwwy{~}}~~}}}}|ztopv}{xvvuuuvvuuvwxwvtpoopu~~~}~~~}womnqqrsstttwz{|}}|yxwyz{|}|}}||zxz~|~}{{|}|z{~}xuuwz~l[k}|~xw|{zz{}~|{yz~}~~~}{}|xspqvyurvvxxvuuuvwwvvutrrvuz~}~{zz{~~~z~}z{}|zxwwz~}upidcfijclvyz|}~~|{zxwxxvtqmjihgfeox~~|{xvtuvwxwvusqonmllkkmopqqjljltutuvwvy|~~~|ywvutstxyyzywmcet}~{zwxz|}~ztrqqpooqvz{ywwtqnnolhinrusppprty}||{ysqsvy{|}~~~~~}~~||zqqx{vx~{zzywuuux{~|y|}~}|}}}}|}}}}~~~zwvxyxxyzyz{~~|zz{~~}{{|{||{wvx|~~|~~}|{|}|{yxwx{}|zwvvxxyz|~}|{zz{{{|}~~~}}}}~~|}~~}{|}{wtne^^jssosxxwyyiSdsrnz~}|zyxymqz|xx{{z|o\\ahjjltwxyywusplefr}}~}{yyxyyyz{|~~~~~}|{{||}~~~~~}|{zyyxxxz{||}}~}~}|||}}~~}{z{{|||||{zyz|~~~~}}{zwutqtw{~~~}||}~{yrnmsz|wvwvuuuuttvyzvtqorx{~~~|vmkmpqrrssttvy{}~~}{zz{{}|}}}|z||z|~zz|}}{{}~yuux{{hpwp|}{|~}zxxyzyz{{{~~~~~~~}|~|wsnntxsqvvwwvuuvvvvvutssqtx{}zyyzz~~}}|}{ywvu{~{of__cggckz{{{||}~}|yyyywvqlhedcdesy~}{zwuuvwxxxwwupnnmlkiikmnppeicbptsuvvwyy{|~}zxxwuqswzz{zxngdox{zxwvxz}|tqppooptx|{yxwtposxunlnrsspopruy|~~||}yrprvz{|}}}~~~~~~}{|zss{ztx|yzywtssw{~|y{}~~~~}}}}}~}~}}}}~}xrvwxyyy{~~~}}|zxx~~}{z{|||{ztrw|~|zyy{|}}}{yxwwy}}{{xusvxy{}~~}{zz{|||||}~}{yyy{}~|yvy{|}|{|zxvpjdclurqt|w{~}zu{~}}zwvw{{y{~}zvtvwyywonplijtvwvurooljiemu{}{yxxxyyyzz{}~~}}}~~|{zz{{{||||||{zzyxxxwyz{||}}|{|||||~~{{{{||}~~~}|{zz{{||||{{wx{~~{xvvtswz|~~~|y{}}|zuqmnw|wvxxvtssqrtvwtronrw|~}{tlhknprrsuvwwx{}~~~}}}}~~~}zx{|{}}~}~~zuuy}tsjm}~~~}||{z{zyy{~~~{uqkltxqqwvwwuuuvvvvuuussqpprw}zyyy}~|{}~~{xvutvw}~qd[[`decj}|{{yy|~}{{{{yxrkgdcbcfuw|}}{ywuuvwxxwwxvsoomlkiijkllodi`^lsttvwxwvwy}}|{zzxrrwz{|{wrniouxxwwvwxzyrqpoprwz}{ywvspot|{toorrspnoprsux}~{yyzwrqtx{|}|yy{}}||~}{|}}~~~}~~{y{sv|z{ywsrpty}}{}~~|||}}~~~~|{{yuwwxz}}||{|}~~}|{{|}{wu~}|yz|}}|{ypox{}}|||~~~}{yyyy|~~||{yvsuxz|~~|{{{|}}}}||~~}|zyxz|}}{wsuw{||zyxwxwwsoqxuuvzsx|~|{{}{vomqxxtu{~zupotuvxxyyvqrzzvsssqlflnghms}{yxwwxyyyyyz|}~~~~~~}}||||}~~~}|{zzzzz{{{|||{{{zyyxwxyz{|}}|{zzzzz{}~|zyyz{{|}~~}}}}}}}~~~}{zxwz|~~{zyzzzy{|}}}}~~|yz||}|{wqou}~{vuxxvsrrrrtwwtqnlmpsx~~~~yngilpsssuyzyz{}~~~}~}|xv}}}~|}~~~~zvv{}{obu~}}|{zz|~~~upijsvpqwvwwvttuvvvutttttspmnz}}{{{xzz~~||~|~|{xwuttstz~tdXXZ_abh|{{yurv~}}}}{xrjfccbchvuy}}{yvuvwxyxwvwwwupnmkiijllglhmdanquuyyxxwvx{{{}|zztrvy|~|yutprtvwwvvutty{vspprty|}{ywurpms{|yspqrsqopokgdmx{xwvwvsqtx|}~{uty|}~}|zzzzzzyz|}~~~~~~{vx}zxzyyvtsw{~}|~~}{|}}~}~}}|{yw{{u{}}|zzzyxxy{~|y|{xz~~~}{zqowz|}~~~~|{}}|||}}{{{{|}}|{{{zxyz{}~~}||~~~~}||~~}{{{}~}}}|zwssty{zxvuvwxzzwvvqpsztnnx~|{}zxxzzxvtstqiks||wtvvusru{}|zy|}ztsuvm^bptqlg~~|{yxwwwxyyyxyz{|}}}}}||{zz{{|}}~~}|{{{zzz{{||}|{{zzyyxxyz{|||||{{{zyyz|~}{zxwxy{|~~~zwvvxz}~{vry|yyz{|{||~~~~~~~}{{zz|||zvtu{~~~~}|yuuwwusrrstx{{wsoliijpy|tnnpuvvsuy{z{|}~~~||||zy{y}}z|~||~zy}~}ocy}{yxwz{~wpijtursxvwwvttuuuutstusv|urx{xw}}~~yuu~~~}|{|zzzxwvvuw|xhWVWZ^`fyz|vkhn{~~}|zqhdbbbdjutw}~}{xvvvxyyxwvxyzzrooomklophmnqomsowvz|zyyy{||{|{{zwuxy|~|zyuuvxyxwuutstxzyrppsw{}}|zxuromsy|zurrrrqoprj]Ucx}zwvvwwsruy}{ut{~}|||{|{ywxz|||}}}||||}|{yz}{zzy{yxvz}~~}|{{{{{}}|}~}}}}|||{{|~yz{|~}yxywvvx{||{x{~}{{rry{|}||}}ywxyzzz{|{|}}}}}|{|}~}||}}}~}|}~~}}}}}~~|zz{}~}}|{zxuqqw{yvtrruwxxwupnnrwsmpy~zqow{zz||{y||yncckw}wqpopqqswz{{zz|{tsuvn_^n|xph||zywwwxxyyyyxyz{{||||{{zyyyyz{|}~~}|||{{{{||}}|||{{zyxxyz{||||||||{zzyz|}~}|{yxwwyz|}~}}}{zyxyz}}{uuttvyzz{||}~}}~~|}~~|zxyyy{z|zuw{}}}}|zxvuuusrrsuvy|zwuplkihjv}}}|wtvxyywuwyyxy{}~~~}{{z|zw|x{~~zx{{x}|{}~}}smy~}~}zussw{~}}~ypihvutuxxxxvtstuuutrsusw~}}trzzt{~~~~}~zy{yz{zyxwvuvy}}nUTSUX[_kx|g`acy~}|qgbabdgltvy}~~}|{xwwwwxxxwxyzzxtqppommqtuuuuvuvntsx|zzzz{|{{{{zyywyy{~~}~}wtvyzywvttrsvxzwrrty}~~|ywspoptx{{xtrrqpoqvp^Sp~~|yvuvxxutvz}~|yz~}|}~}xuvy~~|||{zzz||z{|~}{x{|zw{~}}|{{xvy|~}||}~}}|}|||||}|{{y{}}zwy{ywuw{~}~||}~|{|vtx{}}}}~~}zxvxxzz{||}~~~~}|{|~~}}}||~~~|{z|~~}}}}}}}{xy{|||{zyyvomxyxwsnmntzwrysnnoquy|~zroyxwwz{zy|}{sigiq{vmijmpptwyz{zyxuonpsqicizyuq{zxwvvwxxxyyyyzz{||{||{{zywwxyz{}~~~~}|||}}~~}}}||{zxxxy{|||||||}|{{z{|}~}|zyxwxxyz|~~~~~~~}|||||{{{|}~}|xxuqsvxy{|}}~~~}|~~~~|yz}~}wtxzz|}~{ssxy{|}|yvutsqpqsuuuyzzxvsqrqnox}~|x|~vsswzzxxyzzywxz}~~|||||{{|zt||tou{}~~~upwy|~~|yzxv{~}~||~y{|~~}{vomou{~}}~wletuvwxwxxwusstuvvssxvwzxz~~~~~z}}}~~~~~~|}wy~}wxz|{zyxwuuwzsXVRRTVW^px^^hm{~~~|pea`bglpuxz|}}}{zxwwwwwwwvwy{zyxurpnkkr|{ywvskiak||z}z{{{zzzzyzzzz~yrtwyusvyzzxwutsruwz{uquz}~|xtqpsuxzzxusqponqwxjd~|yvtuwyxxxz}}~}}}~}|~}xtstwyz|}|{yyz}}|}~~{x}||z}~}{{{{xuy~{z|}~~|{|{{{{{{||{z|}x{|{{|{xwx|}}}~}{z{wv{|}}~~}{yz{{z{|}~~}||}~~~|{|}{ywxz|}}}}}||{|}|wsswz{{zyxyumkuuvsleenw}wnvwqommry}zttsqnpqstxwvxwplmwtjhlpnqwz{{|{ywqjeioqojittvx{zxwwwxxwxyyzz{{|||||}}||zyxyyz{|~~~~~~~~~~~~~}|{yyyz{|||||||}}}|||}~~{zyxxwwwy|~~~}}}}}~~|{|}}}}}~~}||}~|wttuv{}~}|~~}}}||{ywwz}|wrvz{}~zrpux{}~}yvusqnmnswwvuvvwvvx|}yy{{{|~zz~ytqpswxuvyzzzyy|~~{{{}}}}~{x||zwps|~~}|}~~~~}xqvvw{|~}}}yz}}}vvwz{{yumilt{~~~ufpsvwwwxxxvsrruxxvuzywwxzy~}}~~}}}|}s|}|~~~}|ypyxz~{vy}|zxxxvuvvxuc_YRPRT[lvhmwz~~|qd`chmstwz{{|||zxwvvvvvvuuuvxz||zuqnjjs}|vvtsmdVc~wzzz{{zzzyyzzzz}jbgnutsuxz{zywutstv{xrw|~~yusrtuvwvvtrponot{}wx~zwvvxyyyyz{||||}~~}}~|xusqoprx}}}zzz}}~~|x}}|{}}|{|}|{x{}zxxz{|{{{{{{zyz{|~||{w{}~|yvwz}|}}~~~}|{zyvy}||}~}~}~}}|{zz{}}||}~~~}|{yvuwy|}}||||||}~{toptxyxxxwtnihmovrkdfs|~xsutnljlou{~}rosrkfdfltxvx{wqqwrmouvpt{|{{}|zxsjccgikmnrqvz{zxxxxxwwwxyyz{{||||}~~~~}zzzzz{|}~~}{{z{||||||||||||||}}}|{zywwwy}~}||||yz}~~}|{||}}~~}||{}~|zwv{~~{z|~~}{{ywuuwyzytuyz}~}vqtv{}{yxwtqoosyyuqruwwy{~~~}{y{|x|~~{{|xsqqrttstuvwwy{~}{xw{}~~~}||~wttsx}~yuuz||{{z{|uxvtuz|x~}}|xxvssw|{rhjs{}}~~~~~~lnpqsuvwwwwsqsvxzyx}}{snnr}|{yx{~|{}~}|~}{xtowz{~{z}}ytuwwvurprkh^QMQ\\hpywz|{}|pfdiptxxy{{yz||yxwvvvuutttutvz~~ytohjuz|{xvtttxobjyyz|}|{zyywxwy{u\\[bjrtqsy}}|{ywvtuw}yvz|~~yvutuuvwwvtrpnnqv{}|}~zwxx{{{yyyz{|||}~~~~|zxywtpnmt}}|{~}}}|{z||{{||{z|~}~}{yvxy{||}|}|zwuwx{yzzy{|}}zuuwz{{|}~~}}|{{zz}}z|~|{}}{xwy}~~}|}~}~|zyyyz|}{zz}}}~}xtrsuuttttnebbfirusoopsqvwurnjedisz}~}sqywmcZaqvutuutsvwsrt{yux{xvw{|zzwph`]`gnrvutt{zxyyyywwwxyzz{|{{{{|}~}{{{zz{|}~~|||}}}|||||||{{{{|}~~}|zxwwy{}~}||||yy{~~~~~}|{{}{xxy|}}||}}}xw{}~}{y|}~}{zywtsuwyxuvwy|~yrsvz}~}|zwussu{xposwxxz|~~{y{}rq~{zwvrqqrsrrrsstux{~~~~~}{vuy|~~~}~zzwvz~}vqqx}yzxrro}|wmqx~yx|}~~}|{vrqsw{vjhq{~~}}~~~~~~}||}|}}~yrmmoruvwwxtqswyyz|}ttx}~zvrt{~}}}~~{vqpswzz{z{~~vpquyutqmpqe\\SOR_uwyy{{}~{pghluxyz||zz|}}zyxwvuutsttuuvz}~zsglyyz|zxussturv|}zyz~|yvvwvvw|ugbfkqsorz~}|yvwv|{y|~~|ywvuuvyzxurpnnsw{~}}}~}zwxy|}|zxwyz|}}~~~~}z{|}xrppt}~}|}}}~~}|{{{{||{{{{{}~~}zywxxz}~}~}xurtvwvwyy|}}||{ywvwxz{|~~}~}}|{|}}{{~~zy}|}~|vwx}~~~~~~}~~~}|||zyz}}~~~~~}ztssrqrsumb^_dgouxuomhltvtqpl`_ds|}~~zvwzunf\\jzxrpprqquxwtsstvxyuqqvy{|zvobY[goywusozyxyxxxwwwxxyyz{{zzz{|}~~~||||{|}~~~~}}}||||{{z{||}}~}{zxxxxyz{}}}||{||~~|{|}~}}}{zxvsrsvx{}~|{|~yxz||}~||}}|{zywtstvyxuuwx{|}}vuwy|~~}|{}||uonrxyz{||}}wy~zrppstutttuvutsuy||||||{zvuvy}~}|sjku|~yvvvsts~wlw~}yy{~}}~xs{~~~}yvtssuwpkrz}}|||}~~~~~}|}}~~}{z{{z{|}xnklosvwx|wttwyy{}tox~||~}yrsy}~}}}~tloqvz{{{{}ulnszvvtjot\\ZYVU\\rywxz{~~~~~ynhmry{{{||ysx~|zxwvutsrqqsvxyz}}wip{z{}}|ytqpsx{||yx{~~|zxwutvyyxtllmnmry{{yxwyyutv{}|~}{yxwuv{}{ytqoqu{}~}|z{{{ywwx{~~zwvyz}~~|vtsw~~~}}~~~|{{{{|}}|}}|}~~|xxz{y{~|vomqqrstwz|~}{yxvvvwx{~}~~~~~~}~~}}}zx{|yuwy}~z|~~~}~~}}{xy~~~{uqpqrtvxsg`_bfmtwskhhjqpoqur]Y]s}}}|ywxzwtrnx}tkgjollqyykcgjmrqljnrz}|zwk]Zoqosrolyxwxxwwvwwxxxyyzzyyyz{||}}|{|||}~~~~}|||{zz{|||{{|~}{yyxwwwxz{|||{{|~}}}}}}}||xutsqqsy~~~}~~~zy{|{{}||||||{ywtstwywssuvyzzwutuvy|~~~}}}~}|z|yrqtxz{{{{|ysrsvwvuuuwxvsrtvxxyyyyywvtru{}rhqoqztsuuqwyyzxy{zz{~uqy|{ywtprqpu{|}}{zz{{|}~~}~~~}}}}~~~|||||{{{|~tlkosuvz|wvxzy{|pmy~wtvrwz~}}}}~}ngsuxz||||~}usx}yzzmuw]`da[Ykwtwz|~~}~~xmlrv{|{{}|yoqz{zxwutsrqnorvz{z{{|{nq{{||}}xqkmqvwwyxzz|{{{~|zwvuuvvrpmjimruuqomllsurv{~|zxvru{~{vsruyz||{{zzz{zxwx{{wvxz|}~{yy{~}||||||{{{{|}~~~~~}}~}}~~}{vvz}||}~}zvqpsyvtstvy|}|{xvstvwx{}~~}|}~~{{z{||yvvwy||||~~}~~~}}}~~|}}}~}}~}}~}z{~}xuruyz||vmea^cktvogfjeflmotr]]_t|{{zwux|zz|}|yofckrlhjs|}jXZ_dpyrmfqz}|{ytliwpgjossxwvwwvvuvwxxxxyzyyxxyz{{|||||}~~~|||{zzz{}}zvu{}~}{zyxwwwxyz{{}}}~~~~~}}}}}}~}zyxvsprv{~|zy|~}{{zz{||||zyvuvyxtqqsuwzyuprtux|~~}|{z{|{zy{ywuvyzzyxy|~}{z{z{zxutvxxvutuwxurqrstuwwwwvurqsw|~vnpfjxpqrqltw|~}~ztuxvsu{~vsu{}}~}zwtsssw~~~}|{yyz{{|}~}~~~~~~~~}}|}}~}|||}~|pilruw|zxzzyz|~{x{~zwyruvz}~}}~~urzz{}~~~}}~|z|{ryzjnqme\\froty}~}~|wnpxz||{|}}{xpszzxwutrqpnosy||zzz{~}st}|{zzzunmmpsqopvz{yyxx|~~}zxwvuvutqmlnqrqpqkf]jtuvz~}{wqmpy}ywwy{zyyz{{{|}}{{|}zxvxxz|}~~~~~~~~~~}||~}zz}||{{z{{|}~~}}|||{yuty}|{{|{yspqsw{xvutvxz||{yvrsvxxz{|}~~~~|z{|}}}|zzz}}yxyz|zyy{{|}}|{{|}}}}}~}||{|~}||~~}}zx||wsmg_dpwwnechbckpsup`mrzxyzyvsuz}~~|wwsifqumjggoxkYZeirwvzqtz{{{z{{{zokjoy}xwvvvuuuvvwxyyz{zzyyz{||}}}~~~}||{zyyz|~}ywz{~~|zyxwwwxz{{zy{{{|||||||||||}~}|{yvttuux}}yywwz~~|zyz{{|}}|zyyy{xrppstxz{ywvuuw{~}|{yyyy{zzzxwwvy{{xuux||wvvw{zxvuuxywuuwyxtqpprssvwvuuupou{zwqlsxmnrsqruvtsu|yrpqroow~}yy{}}~~}|zxvtty~~}|{{{z{{~~}~~}}}~~~}}}~~}||}rhkqvz~{||||{}~~~zwvxz~}}~~}{}~~}~~~|{{z|wpv~{{zsidhnkow}}~zumry|}|{{|~|{xy{zyxvtrpomnt}~zxz{}~~|~{vuusontqtrigs|vtz||~~}y{}yvxwvvsonmmmprnechourtx|~~zuniny~|||}|yvwy{|}~{z||zxwyz{|}}}}}}|||||}~}|}~~|yz}~}}|{{|}~~}}}||{{{{ywx{||{{{zypryyxxwvutuwy{}}|wuvz{zyxy{}~}||}}}{zzz{|~}|{y{}}}}|{|~~||}}~~|zz|}}}~~|z{||{xxz}}~|xwxyz~~yvurlpy{xph`bhjntzvtrxzvpvwxuqrw|~zwqtuqqtmkkhdenojoyxzyuwwxxz{{{}|{wrsvt}xxwvuuttuvwyzz{||{{||}}}~~~~~~~~~~~~~}}|zyxxz~}~~}|zxwvvwxz||{ywwwx{||||||||||}}||{ywvvttx}{tsssvz|{yxz{{}~~~~}}}}ytrruwz|}}}zwux|~~|{yyxwz{|yvsstxyxuqquy~~yutttuxwvtstwyxvvxywtpoprstvxxwvurrw~}}|||}~}zw}ymlruvvvsuvtz|z}zspklki{~}}}}zxwz~}||{{{}}|}~}}{{{|}~}||}~}}~xkjqw~~}||}~yxwz~~|}~~}~}zz{|rlw~zwtkillhkv~~~wmjox}}|yyx}|||||{zywvromlnu~yuxz|{|}~}xvutrruwzrpvzyx|~}~}~{}|yytwvtojhghkvvoiinsstx|~|~|xslgoz}yuvy{}~{vvx~{yyyzz{{{{||z{||}}~}}|{|}}|x{~}|}~~~~~~~|zzz{{{{z{{{yyyyyz{{{xsv{zxvuuuuuvxz|||yxz||{xwwy|~}{yxyz{|{yxy|~|yy{|}|~~~}{z{}}zzzzywvwz|{{~ztuwxwz}~yvvyzzyyvnechpqrxwyz||ztyzywsprxzusortqsvnkkhcfnqs{}}{wxyzyz{|}~~}yxyuxyyxwwvuutuvxz{|}~~}}~~~~~}}|||}~~}|zxxy{~~}{ywuttuvy{|}|zzzz|}}||||||||||{{{zxxxwwtswyyvssvz{zxy{||}~~~|zwwyz}~~~{vux|~~}{{zyy{|}zvqqtwyxurqtw{}uvwyxvsqpqqtwxxwwxxvtrruwwwxyzxvtssw{zzyyz}}qmsv|~|wz~yw|{xwnmmey|}}|~~}|{|~~}}}||}}||||{{{|}}}{|}~~ojry}{{||yy{~~}|}~~~|z|~rfmuzmssmmpmgjupihmvz~}ytr{||}}}}|{zytokkqx}}wsvy|{zz}~~}~{yutvt|vvwqghs~~}{||{{~{rvvuphfggiuywnknptw{~|{{xtnjqz~~}ywvyz}zvrw}~}{yxxyyzz{{y{~~}|z{|}|{x{~}}~~~}}||{xxxy{{|{|}||{zyzz|~~|{w{|zwtssuuuvwxyz{z{{|{zwvvx{|}|{zxuuwz}}{zy{~~|zz{|||}~|zz{~~}|{y{zwttxz|}zxyy|ywyyxuuwy{|ysnmszzyz{vrkfqmlsvwxzzxsz|{zwpllopomopmowwpjghpust|}{|{yyz{zz{}~zusonp{{yxwvvvvwz|}~~~~~}}}|{{{{|}}|{z{{|}{ywtssttvwy|}|}~~~}}||||||{{{{|||{{{zyyupptwxvuuwyxvy}||}~~~}}}}~}zxuvz}~~}}}}}||}}{yustwyzxwuvxz~|~}}zwsqpqruwxxxwwvtrsvy{{zzzzxvtrqszzyzz{|~~yrsx~|{~|yxsrqrv|uu|~}~~~~|~~~}}~}}}}}|||||}~~~|{y|}~~~~vms|}{z|~}|{|~~~}}}~~~}}}~~~}y|xcbmpcrunnrplpu~~gdjpy}{urvx{}~~~}{{|vokjtz{}}xvvy|zzy{|xz~zwuxu}ls{xjYcz{zyyy{~zxpsuvpjnooorsrmjhkpuy|}~}{zyuurvz~|}}{xwxz}~~}}}yww}~|xuuxxyz|zy{~}}}}|||}|{xvy|}~~}}}~}||{{xxwxy{|{|}}}}{{}}~~}{}{vsprrtvvvvvwxyzz|{zyvvwxyyyyyyxwsvz}~}{{{|}}|{{|{||}~|zyy~|xxwuvwrsu}}}}yvqpvyyzxtrrsvyxtomnu{{zz{{wi]bceosroqqqqxyz{ytjb`gilnsvqqtukisz{uswxz{|{{{{{zzzz{|}~ztpljj}|{{zyyyz{|~~}}}~~}||{zzyyz{}~}|{z{}~~|yvusssstuwy{|}}}}||{||||{zzz{|||||||{zyussvwvvtsuvvz|||}~~~~~}{xuuv{||{|}~~}||||{yvtsuwwxwxxxz}~{wtqqrtuwxxxwvtqprvz||{{{yxvsqonqttz{}~~~uts}}~}|zyy~u{z~{vuz~~~~}}{~}}||}}}}~}{{|}~~~{y{}}~~~~~~}~|kv~{zyy~|{~~~~}}~~|{zyz{{{~y}uhh`[qxlpsqprv}~~|felt|wuuvx{}~~}||nhoiu{z|~|yxz}}}}|ztw|{xwxyz{rtyzo^Pm{woov~{storuwrksywroonoabhkrvy{}~}}{zzy|z{}}}}~~}{yyz||}|||yyy~~}{xtuyz{{{zxz{{||}}}|}}|zwvwy{{{{{||}}}}|zxwxxyz|{{|}}}|{|||}~}}zuqnqqrxxutuuvwxzzyxvvwwxvssvxxzyvwz|}|{zy}}{{|||{{{}~{yxx|}zsj^Wbieoz}}{{xuoorvz{wpostvxuqmqt|~}{wuwqf_bflrrqmlnpqwyyzzvk^[`djnrvuswxstx{{tqtwz|||{|{{yyyyz|}~zvrnif~~}}}}}}~~~}||}~~~}{{zzyxwyz{}~}|{zyy{}~|zwvuuuusrrtvxyzzz{{{||||{zz{{|}}}}}~}{zxxxwuruyz{|{{}~~~~~~}|xtrty|yvvyz}}}}|||{zxtpppprvzyyz|{xvuuuuuvvwwvttvvvy{}}|{{zywtpommrnu}~}z|}~~~~||}|}uvqy}~zxvz~}|zzy|}|{{|||}~}||}~~{{||}}}}~~~~{nz|zuq|vx{~~~~}~}{{zzzyxz}||q_VYqytrtuuuvz{y{}{v}}geoz}uqptz}~~|{tpufs}}~}{|~~{vx}||y||}wjeemuVe|wodaju}~vnoltzzunvywsmkkbVYekqux{}~}~~~~|{|~}yxxz{{|||{|}~~|yywvw{}~~{xvwwx}}|}~~}{zzvttvxxxyyz{|~~~}|ywzywxy{{{|}~~~}|}~~}xspkoruzvssuutuwxyxwvvwxxvnmqrtx{yz{{{zyy{}zy||}}|{||yxwuvz~}{xp[E=DRV]ly|wxtqnpptx{ysooquxvrotx~~~|vqrswyyzzzvsnorstxzzz{xpgccckqrnor{}zy{}{wsrw{}~|{{||yxxxz|}~~}zuma~~~|{{|}~~}{{zzyxvwxz{~~|{zyyzz}~}zyyxyxvsqqqstvwxyyz||||{zy{|}}~~{z{~}|{{ywvy}~}|{{|}~~}~~~|{{yuqoqstqmjjlv{|||{{zzxtpmmnpuyyxy{~|ywvvuuuuuuvvux}~|}}}}|{{zxwvsqnqssz}|||~~{{|wwosuxyyvz~|zxwz}~|{zz{||}~}}~~{z{|}}~}}~~v}}{vozvx{~~~~~~{{{zzzzy{}y}xwj`Ynxxwvxwuswxx{}ynxydeq~vpmrz~~|xxpnmhw~}~|yz}|~|zVT`oojxyrg_blw{qormuywtowywsmjkdZ[clqux|~~|}~~~}}}zvuwy{{|}}|||~~yuvyz{}~}|ywvwy|~xx||zxxzvrtvxyyxxyz|~~}}}ywzzz||}|{z{}~~~}~~}{yxpqsy}rpswvutuwwwvuvwxyzpkortx|{{||||{{}|z{{|{{|z}}}}}}}~}ywwvussvz{||}kUHBIWY^s|zxuolpprtvyyurswyxtqux|}}|zussx{|~~{xustuusuvwz|zvsqjepxxrno{{xxyzvtvx{||{{{|ywx{}~~~~~{vm]~|{{{|}~~||{{zxwwxy{}}|{{{|}}}~}|||}|zwsqnnprtuvxxzz{|{zxxz|}~~}{wwwy{|}}|}|yy|}||||}~~}~~~~}{yyvqnkmoqrplijuy||{yyyzyvqlmrwyyyxyz}{xwwwvtttttuvvy~~}|||{ywwzvtoprt~}||}~|su|}yu||vvppprvwuv|~{yz{||}|{zz{||~}}~{zz{|}~{x}}~}~|wq}}|{}}~~}}}}~~{zzzzzzz{~~~{w|}{uqxyrgr|yww}{rowtuz~yoqrls{ysqty{}|waYWZl{xv}}}~|||{|}}{_dko~vyxmb^dnuopspuwuvuz{zyussxsfflruy|~~|~{{{~}~zvuwyz{|}}}{{}ytvy{|}|yxuvy|}}|tsxyxuw{wsuyzz{zyxy{||{{{xyyz|}zxy{}}~~~}~~~uuv}rquvutuvwwuttuwwz}uqvxvy|yz{}}}~~{}z}|{{zzz}~~|yyxvtsstw{~~ynjbfeiv~|{wpmppqqrvxxyyyyywtvx{{{{{xspsxy|}{ywunmrrqqtyyvsrsplv}~wpr~~}zwvvxxvtuvy{{yy}{xwz}~|{}{tnjY~|{{z{|}~~~}}|zyxxy{}~}|||}}{xuqonnorstuwwxy{zxwxz|}~~|{yxxyyz{{||{{}~}}}|}~~|}~~~~}{zxtojilqtwwrllsvzzzyyyyyytkmv||{{zz{}~}|zxwwwvutssttuvwz}}|{{{|zvv{ywqqrry~}}ysr|}xz~yqqv}~|~~|~~usqrtugsuw{}~~|~|{}~t~}|{{z{|}~}~{yy{|}~{uy}{{~~yv~}|{z}~~~~}}}}~{zzzzzzzz{{|}{{xsnmu|{{}~ywv~xpowrqw~{mdfx~}}~~zvtvxsxzyiZOTrwk{zz|z{}|||~zzz}}|wyxobZYbinpqsutuyy{|}}}|~xsrtvy{~~~|~yxx|~~{xvwy{{|}~}|{}|yyzzzzxvtrsx}~|tsuvuux|xtw{{{|{zyy{{zywvwyy{|}yy||yyz}~}}}}~~}|}}zz{}zxywtttuvvtssuvwx{xx|}vwyyyz|}~~~~|zy|z|~~zyyyxx{}}}||zwuuwwx|~~~~}zxz{xyxwutrqqpqrssswzzzxwuv{{yutvwwvwyz|z{yugeuwtuy{yqjcgpuz||wory{||{yvxxxvutuyzxx}|ywx|}yuxse`f]~|||{{||}~~~~||zz{|~~}}~}}~|zxvsqpqrtutttuvvvvvwy{||}}}}{zxz{{||||}~}|}{zz}~~|{yuoihkqvzztpmpqtvy|}}{vvvqs{~~~}|{|}{vrruvvvutsrstuvwxz|~~}{zwvyzxwxxwuu{yzyyzyqsopw~~|{z~~uu~zz|~|xroqpjmcqxz|}|~~}r~}|{z{|}~}~{yx{||~|yy}{y}~|ywz~~~~}}}}}~{zzzyzzyxxx{{wtqrx~}vrt|xuu{wsw}~rbc|}|{zzzursuif}p_cvym|yww|}|}|~{x~~}yxxyrfZY`glnoqrqry|~~~}}~~xuvwz|~~}z}{wvy|~|yxy{}}~}~~{yzzyyyxwurqu}|xwvuuwyzwtx{{y{{zzz{{{zz{}}}{{}~~}zxz{zzz{{{{{|||{z||}}|{||~zvtsssrrrsuvvx{{|}~z|{zyy{{}}zwvzz|~}|yyzyxxz|}}}~|zyz{zzyy{}|z{slmqruxutusponmknruwwwuuxwtoknstuwxz|z||{rp||ww{zwspberuyxxrjlsy|}}{yyyxvutstvxz}}{xw|}wrpf[\\ei~}}|||}}~~~}}||}~~~~~}}|zyxxywttsqpqrttvwyy{~}||||||}~~}~zxz~~}|{xsmjkqwzzvqnmmpsw{}}|wtvy{|~}|||wompsvvutsssstuvvwxz|}}{zywtruxxwwxxy|vuwyw~{qr|usty~xtnlmi]hou}~~vpzv~~~~|{{{{|}~~|yy{|}}~||~}}{v~|yy{~}}}}}}}}~{zzyyyyzyyzy}{yxy{~~vrqyz{|zux{}xgf}|zxwvqlqsc_|}rjiv{|t}vyvtty}}~|uz}{z||}wpkgghjklorrt{~~{xxy{|~~|y|}xxzz}}yxz}}~~~}|yyz{zzz{{yusw{~~}|{xxxzzwvvxxwvxyzz{|}}||~z{yyz~zuvy||{yxxyz{{zyyz|~~~{y~~{vutttrqqqrtuvx{|}||{~{yyyyz|~}|ywuy{}}}{yy{zyyz{|}~~~||{{|}|xy~|z{|ytkefjlrxwwyvqomljjnu{z{ywutrojghjouxzzyz|~~~vqqrroqxljnprquskjqyzz{{{yxvtuuuux||||{zz||xurf`ipr~~}}}}}}~~~~~~|}~~~~}}~}yxwussttsttuux}}||||~~~}|{|~~~~}}zuqpswzxuqljkptwvx|~zxy||z}~|yyyytnmqtvvutstttttuuuvxy{{zyxxxsswwvyz|~psy}wy{sooqx~unlmqo^p~}|j~hwy}~~{z{|{z}{{|}}}~||kq{{~~}}}}}}}}|zzzyyy{|}}zz{zz|~}}|vmnsxtyyywujn~|zyxvsotrcdtzylikyzzwwvsrvz|~|vz~~|}~~}zvoifdeiovx}~{yzz|}|yz~~z~~}zy{~~~~~}|{{{zz{||}|yxz{|}}||{zy|}zwvwxuurty{{}}~}}}zywvw{ytrw|~|wwwxyz{zxwy{~~|w|xrruvvutsrpprstvz|ywuvywxxyvwx}~}zvxwuy}~}|zxxyxxyz{|}}~~}}||}{{}{trtxxwrmjjpvzyxyxuspqsprx{z}{yvvusqlgdgmqz|zzy{zpkmmlhgmppmjiny|tosz}}|||{vrpsxz{|}}yz{}{zwxxwqmsyy~}~}}}}}}}~~}}}|}~}}~}}}~}|{yxxvutssstvy|~~|{{|}~~~~}|}~~~~}{wrrswxvsojlosvzvt|}|}~~~}{xvxxuqoqsvwtrrtuutssststwyzyxwxzwtvvuy|}zu{{prtuy|srtotsszyxvy{}}zz{{zz}}{|}}~~|{|}f_|xx~~~~~~~~~~}}}|zzzyyy{~|{yz{|}}{{wz|{h\\fomi|{vsskr{zyxvwy}vhbi}tgksx|~zxyywuuvy{~{xz~~~~~~wpid[_cmvwv~~|{{{}~}zz}~~}~~|zyz}~~~~~}{|}{yyyzz{||{|{||||{zzz}{wxyzvvpjz|z{|~~{zxz~|zyurtyzsqwxyxxwywx{|{ywwz|}|wwuopvxwvuvtommnpuy|vlptwvxxytst{~}|yttvw{~}|ywwwwvxzz{||}}~}}||~|{}}yqkpuxxvsnkszyxxyzyywxxxy|{{|zyvvvusohefgmy}zz{|}{vqnpokgcfjllkkrz~zwy{~~}}}}vonsx{|}~}zs{|{xussuvuuvx~~~}}}}}}}~~~~~~~}}||}~~~~~~~~~|{{~~}}||ywutsrrrtvxzzyyz|~}}}}|}~{xsqssuusomnruxy{xsvy{~~~}zvtvxxutrsttqoqtwvusrrrqquyzyxvx}~zvtswyz~~~y{}}ys{|v{|||vxzzz{~||{ywy}~||}}~}xyy~pWnrr~~~~~~~~~~}}}}zzzyyy{~{zz|}{zxvrtxrsvqqsbWpqpsmu~{yxwx{~zoagyq`mwry|{{|{z{{zwvwy{~|{}~{~xpg`c^blspmy}|{|~~|y{~~~~}{zyy{|~~~}{z|}{zxwvuvwz|~~}|{zzzy|{z|~~|{s|~wtx{yspkms{}|yxxzzwuxtrruvwtsvyzzyy{|}{vrqpry{zyxvrlllmpuz}shkrwyyyytsv|vv{}zwvx{~}|yxwvuvwyyz{{||}~}||||||{zvnkotwxzzvryzvuxz||{{}}}}|zz{zyxxyxuppoojix|{{|}{xurrohb__bhnrsx}}|}}~}|vklry}||||}{ywuqomopqqqt~~}~~|||||}}~~~~~~~}}||}}|||}}~~|z{~~}}{ywusrqqqrtuuvxyz|~}}{yzzyyxxz||{|~~}zvspppqrqnlqxz{zxtruwz}~}~|xtuwzxvssuvtqrtvvutsrqppty{zyxy{||{xwwvw}~{z|uy|~zz|}zz{~{y|~~}{|~~{rqlv~}jy~~ss~~~~~~~~~~~}}}~z{{yyyz}|{{}~zvtvspokjjp}o\\xzlqwnt~}{xxxz}}tnryq`q~tn{zzz|zyz{}zwvx|~}{|z|yskeh^_bhkpx~}ywy{|{z{}~{yz~}}~{xxxxz~}||||zyyyyyxvtqopv|~~|yyyxy||{{{}{vvywsplmpxzxww{{z{zztmpuxwvsstwz}~~|{zywtssuy|}|ztnloqrtw}xmntxzzyyuuwypu}~|zz{|}~}}{yxwvvvvwxyzz{{|||{{{{{{{yvrqtwuttvuv}~{z{|}|{{{|~~zyzzyxxyzyvsvwytkp}{yy|~~|ywuri`^\\^hpwz|}~~|}~~}}|}vmmsz|zy{{|~}zxuplghkknps~}}~~}|z{||}~~}}}~~}{zzzzz{}~}{{~~}|}||zwttttsrrrrsuvwy|~~|xtrqqrqrtx{{{|~~~|{xutqqrrollry{|zwvx{{|~~~}|}|wsuzxvsqtvussststtuvspotz|{zyyyzz{zyyurv{wz|~{y{~}~rku~~|{|~~}ohdk~~~}{~~~~w{~~}}}}~~~~~~||}~~|zzywwxz~}||~}ysvvplkgffiu~tl}vmrxqt~}zxxz|~~~zz~}um|k|yzz{yxyz|~{xz||{{|~~yvx~z||xtqeZTW`ozuv~~vurqsuwyxy|}~|{x{~}~{wvvxz~~|zyzzzxusssvwxvrnns{~}{||zwuv{{|{}}}~|{{zyyxxyyxsopx|}}~{vpry}z{yutwz~|zxwvvuuvy}}ysopsvvwy}srw{}}}zvuxwsuy|}~}|||||{zyxwwwvtuvxyzz{{{{{||{z{{yvtuxzuspsrjq{~}}}|{zyxyyyyzzyxxzzywvwy|znjxwwz|}~~|zxtmdb``jrx{}~}{{}}~|zzz{xrpsy{wxy~qqv|uokdgkhlpr~~~}|{{|}~~~~|{zyxwwyz}~}}~~~~~~}||{{|{ywvwyywurqqrsstvy|~}tponopqsuxz{|}~~}|zwuuqoptvwwy|||zxxy{{|}}|{{}|yyzwutqqssrrqooquxywrptz||{zyyzz{zyywsu~~~~||~}|yz|wnt~}}}||~wmsqz~{ux~v~~~~~~~~~~~~}|}~~~{zyxvvvx|}||~}zsxwhigg_dty~ur{zyuuryuu~}|yxx|~~~}|~{}~{xz|{xyz{{|~~yxxz}~|rimx~}~}}{|{bMSixynmw~somnqtuwvxz||{yxz}~~~~~|zw~zvvwyz|}|zxwxyxtpnnoswzzwrru{~~~}~|trw|}}~~{z{}~}|}}}}|{{{}~xno}}}{|wtux{zyyyyz|~}~|yxwwwwxz}~xrstvvutvx|~zvuy}~xsrwxwxxz}~}zwyzzzzyxxxvsoswzyzyyyy{|}|{{{ywvwyzvtsyrmij}{|||{zzxwvwyzzywuu{}xwxzzzzvtxxy{}||}}{xvqlmjintz|~~|zz|}}yvx|}zursx{uwywrpw}{vrnjormprq~~}}}~~}}~~|{ywuuuvwz|~~}}}}||||{{zxwwz{{ywtttttsrsvy|~ysqqqsv{}}||}~}|zwtsporw|~~}}{zyzzzz{|zyz}~~}xvvvutrqpomlpvz{yutvy{|||}}}|{zywww|}{yyu}|yz{||~{{~||~~|}~}y~}{y|~~|rpx}~~~~~~~~~~~~}}}~~~}|ywuuuvz|}{z{}}zwxzmjcb\\azstusywutywyvw~~|yxy}|xz}|yz{|~}xvwy{zyjfmw~~~~~cSl|yoow{njmqsuvuwy{{zyy{}~~~~~~~~~}xuox}{xvwwy|{{{{yxwwxvrnlmpuy}~|yxz{~}xtuz~~~zy{}~}||}}~~}||}{su}}{zxwxyyywx{||}~|xyzzzzz|~tnrwyxustvyzywvwvx~|smnuvuvxz}|zy{~}|{zzywtpswzxxxxwxz{}}||{yxwxxxvtswuttiptxyyyyywvuwyzzxvpikquxyyzzyvvxyzz{yy{{ywtplloqtttsrsvxy|||xuz{uqrv{xxyyuty||xutsvxvwws~}}}~}{ywutrrsuwz|~~}||{{||{{{xxxz{{zyxxwvvtttvxz{xuuuuvwx{~~}{z|~~|{|{xxvvx|||}~~~}{yyxwvvxyyxz|}{wwvtrpoonnqvz|{ywxy{||~~|{yxvvx{}yv~u{{oq{~}{yz{zz~}wov~||}}~}|zw~{tz~}|idk|srz~~~~~~}}}~}~~|ywtttvxyxxwy{}}{x}xjYV\\\\mpvtsxvvv~|xux}zyz~|y{~}z|}~~}{xyzvzzwuqr|~~{z{~~uu|vvww{}|plopqrstwzzyyyy{||||}~~~~~}{{{}xpntyz{|{yyyxwwwwvrnnpsx|~}}}}}~{vtx{~~~~}~~}||}~}}||}~~|xz}{{{xxxyyxwxz{||}~}wwy{|||||~}vqvy{yuqprwxxxwwrmtwrmlrqoqwz}|{~}||||zxvwxyzyyxwxyz|}}||zyxxwvurilpv|sjquwxwwwuttuyzzyxwnddnrtwwxurruxz{yusuvuqrtplpvywvuttuzz{||xuxyywqoomsxvwxyy{||zyxy{{||zv~~~~~~~}|yxvtrppprtvx{}~~}||||}}~}||||{zzzzzyyyxyy{z|}zuuwwx{|~~yvuv|~{zz{|}}}|}~~}}~}}zwwwvusvyyyy{|}~~zyxusqrrroqwz||zyyz{||}~~}{yvssv|~}w{|n}yx}~||ywx{zz~ztps}~|}~}~~~yz~~}vnkvzry~}~vlpwpqz}}}~}~}zxutsuuvsqqwy}w~~nVJ]kclqsswyyy~ztv|~zy{~~~~~{|~~{}~~|zz{|{{{~~zyz||qq|~}z{{~|y{~zvvuslht~{rlmlmoprxyywwxxyz{||~~~~~~uqrwz|{yxwvwwwxwwwwsrtx{~~~}~~~~{wvy}~~~~~}}}~}||||}~}~~||~|{z{}zwtsttvyyyyyyy|yux{}}}}}}}}zy{{}{umimswwxxxwrsvtqqrqopuy|~|{}~~}}}}|{zyyyzz{zxwxy{}}}|{zzzxxxtfiqv|wsuvwwwwvttv{{yyxsmg_eloqtywsnioxzslghlomjtsllpwyxwqqx|~|||zxvqoqplgaittxyzzz{{{{{}~~~~|x~~~~~~~~~~~|{yxurpooqrsuvxz}~}||}}~~~~}}}{yyyzzyyzz|{||}~{wwvvy}}zwvx|{yyxz}~~||~}}|}|yvvvtrquyzyzz{{{~~~}{zzwusuvxpqxz{{{zzzz{|}~~~}{yvrqs}~|sq~~~|z~{x}{yvwzzy|~|uw~~}}z|}~}urz~}zsmouzxz|~~~|{{xv}}|}}|~~}}zzxtruuuqmmrv}wwyzr]hkllpttvzzy}zux{z|uy}{}~~~~}|}}}}}zxxz{{{}~zy}}tsz|{{{|~~{{|ztopphdj~ljhjmnlozywvvwxyzz{|~~~~{yz}~wutttvwyvuz{xwwy|}~~~~~~~}~~~~{wuy|}~~~~~~~}}~~}{||||}{}}||{{|~wrmnqsvxwwuuttuuwx{}~~~~}}}|}|}}|vlffltuwxxyutvvtstrpruy|~|{{{|~~~~~~~|{yxyy{|{yxxz|}~~}|{zzzzzwqqsw||xtuvwxwwwwuv{zuxxsnjffimsuzwtm`Ycpogcbinptttnjmuywwsqw{~}|{|zvokrqmlnruu{{{{z{{z{}}z}~~}}}}||}}~~~~~~~}|zvsqqqrsqppqrtwy|~~~~}}}~}}}}}{yyyyyxxyy{|~~~|zwtx~~}zyy{}|yvssxyzx|}{{{|xssrpnpty{||{yxwz{zyyz|}|ywvxz{vvyz{{zyyz{{{||}}|zywtpo}~xy{|{yxzs}}}~|}~~yot}xuvzyyz|}~~}|}wsy~uov~vttzy{{q~}}||{z{}~|z}|}{utuuusrrpt~~nqv}oonnoquvtwwwyy{|{{ytaWj}{}|~~~}|}}zzz|{yxy{~~|yyywvxyz{||~~}}|xsqokjrseiloopos{wuuwwxyyz{|}~~}~}||~{vuttvxyqpz}zzzyyyzz|}~~~~~}}}~|xtwxz{|||}}~~}~|xx{||||{}~~}}}}}~xmknsvwwvttttssuy{}~~~~~~~~zsljlqtvxz|zyxxxwwwvvx{||{{zyz}}}}~~}zyvuwy{|}~~~}}~~}||||||{zzzzzxvuuvyzyxxunkorrw{voqojhowz{xtpjYVgmjecirvutwwursvstutuwtty|~|vtuxwuvz|yy~|{zzyxy|}}}~~}|||{{{{|}~~~}}||}~~~}{xvtttvvutrqonprx}~}}}|{{{||{zzywxxwwwxxyzzzzzxvuy}~}{zyy|}~}{{{vtvyy{~~}{zz{|xsrrqpqty|}{xtsv|yxwwz{|{{yyyyyxxyzz{zyy{||{{{{|{zyxvsp}}}utstuw~~~~{{~{uqxyxtsvzxwy|~}{{|~ykwus{~|}|wp|}xxh{~~~~~||{{ywxz~}||~zuwyyusvxxz}|odox{sqpppqvxvvvwxz}|z||skb[\\t~}z|~~|~~zxxz}|zxy{~}{|~}ywuvwwvwy{~}|zvqjfjsviuy{|xww{{usuxxyyyyz{{{{{}~}|~zvwwwxz{vu}~}}||zyyyz|}~~~~}}~~~{vsqsuvyz{|~~|tsx{{{{|{||{{}~~}|tqquxyyxyz|}|yxxz|}}}}}~~~~~}ztqqrtvxy{ywwxyxxxxy{}|zzzyxy|~|{{|}|zxuuwyz|~}|}~}{{{{zz{{{zywutstvyyyzvlgmvz}|zuxwojpwyyxutuh]jsqjedffekx{~|uqsrsvzrcfsw{zswywttwz|{|~||{{yxy|~}~~~~}|{{zzzyz{|}~}||}~~~~~|yxwvwxzzzxvtsssw|~~}}}|{zxzzz||zwxxxyyyz{{zyyyxxy{{|~~}{ywyzzzy}~~|ww||uwzzz{}ytuvuttwz|~|xtposzyyyyzyyyyyzzzz{zyyyzyxy||}|{{xwx{{{{zx{y{wqnpw}}~~}{{~|}ytrqrsuywy{}~}{zz|~~sru|}||}xs}{}p~}~~~~~~|{zzxtqt{{{x{~{trxz{vw{}|zxqlizztssrrrsvvuvz|zz}~~~}y{vbX_egp~~|}~}~~{y{|~~}zz|}~}}}{wvwwx{||}}zwtkgdixwk~|{|{utuwxxxxyzzyyyyyzxy|}}}wwz||}~~~~~~}|{{{z{|}~~~}||}~}zwwxyyyz|~~~yrwz{zzz{{||{}~~}{yxutwz{zzxxz}}|{{||||||||||}~~}{xvtstvxxywwvwxyxxxy{||{zzyxwz}}{zz{||zyvvwyz|~~|{{}}zwwxxxzz{zxwusrrsuwz{zrnu|}|||z{{vsvwxwyzywrmpwwqmie`^jy|~tmstuz}rhortwwwyywtuy{}||}}|||{yyz{}~|{~}|{{zyyxxxy{}~~}{{|}~~~~}|zyxxxxz|}}|{{zzz|}~~~}}||||{yyxy|||zyxxxz||}||zyyxy|zx{~~|ywvxzxuv}}{}sptwy{||yuwwusvz||}wrommquyxvvvstwyzyyyz{zyxxz{yx|~~}{urv|}|~}||~|yy|qmu~|vux~~{~|zz|~ysqrstut{~}|zyy~zux{||zxvw}~~~~rrp~~~~~~}{||{silssqmqvuux{}zrurwvwz~|{zsq~|ursvvtpppps{~tx~}~|~}yyyfMFXmbo}|~}}}}|}}yvvvz~z{~zwtmqtty~~}}{ywvwvvvvvvwxzzyxxyyxxvx{~zy||z|~~}~|{yyzzyyz{||}~}|{{|~{yyyxxyz|}~~~~{vz}{zyz||}~~~|zwuuuy{zz{wpmotz~}|||||{zzzz{}~}{yyxusuwxxxwwuvxyxxxxyz{{{{zxvw|}{zz{|}|zxxyz|}~~}|{|}~zvtvxy{||zwutsrqqruxxwtsuxz{}}{{{zyyxy{{xwvtuwywtrpngcp{{}ypkrxxz}|xvuvtstuxz{{||{z{{|||}{yyyzzz|~{yy~}|{{zyyxwvwx{}~~~|{xuux{~~}|zywwvuvxz{|}}}}|||}}}}~}|{{}}}|zxyy{|}}}xwwy{}~~|{{||~wsy}~}zwutx}yst}~zmjrvy|~|yvwvssy}}zztponorvxwtqqqrtxxyyxxxxxxwyxwx}~~~|xtw{~~~xtx|ywz}~}zrps|}w~|zyy~zwsqrsr|~~~{{}~ztwzysmqu|||~}~uuu}}}||}|tegnopnljihmru}{u~zuw~{|~}vaw~~}xutwwunkkmgozxkp}zz}}|{yyz~thVBWcK[t~yzx|{yxzz|~zwvw{yqr|{yvuz|}~}{z{zywwyxvutuuvwy{yyxyzy{|{|}|xwy}~{|~{}}{zzzywwzywwyy{{{}~}zy{}ywwxxwvy{|}}}}~~z}}{zyz{}~}zxutvwxxwxztkefiq}~~}|{zyxxwy|{zxxwtstwwwxxwvwz{zyxxyz{{{|{xvz}{{|}}}|{{|}}~}|{|}~~yvwyz|~}zusstsrrrstrqqqswy{||{{zyxwvwxxutuwz{zwtrquqit|{wrnntyywuvrmmssrnrw}~~~~}||}}}}{xxwwvuwzxwv}}|{zzyxwuuvx{|~~~~|zwurprw|~~}{yxvusqqruwx{}~~}||||||||{zyzz}~{yywwx{}~zvuuwz{{{z|}~}utx{|zxvtuz|tt|~~~~~{srtuw{~|wuuroow||xtonqprtwwvsopsttvwxxxvuvwxxxxvw}~~}zxxz}~}~{x~~}|y{ztt{|~}zxwx~}smqqu~}||}}}~~~~|y|||}~|vxzumgny|{}~{u{}}}}}~}vheimqusrhefku|xno}~}{|xeey~|}|xvwvsnjjkaixxdeprksyz|{vxz{y|kDSSBUnzwy~|zw~{vrsuz||~~~|ywwy}~vjirx}~}zyz{z||zxzzyxy{zwtttuvwxyyyyz|}~~}}|yyz{|}}}|}}zyxwwxyzzzzywwyyyyz|~xuz}wwy|{zx{~~}}}}||{yz|{zzzz{|~|xtrtxzywuwzukfffn~~|{zyxxwvx}}{zyyxursuvvxxxxz{|{yyyzz{{{||yz~~}}}}}}~}}}~~}||}~{yxxxy{{ytrtvvutttrnmllouwwuuyzyxvvwwxvqot{~}{urpmkgbpywroqsuxyxusnhlutrnqv}~~~}|}}}~}zxwvvutuwutu~~}|{|zywutuvy{}}~~}{zwtroorv|~}|{ywtsqomnoqrvz}~||{{zzzz}|{yxy||{zzywvvxzzyvtuttvwxz{}{wyzyyxxvwz~}yx}}||}}}ytvz|yusspjjtyzvpkmqrtvxwsooqtutuuvvusruxyyyyww}~~~~|zxy{}|y}|~~}}}|zxwtv~vnrp|}|{zz{|}~}{zvsryzz{{}|{|wqnmv|~}rz~~~~~~~}}}~~}}zkbeinuy}tmimy}sq}{st}z|}zdt}}vonmmmnmkpyxiikd_hljrzxyyxz~wSIKKfuxty}}xx{~yssswwx||~~~||zyy}~{jfksy{{|}|{zyy|~|x{|{{}}yutuxywxwxyz|}~~~|{}|{z{{{{{}}}~~}{ywvvwxxyz{{yywwwwwy~vuy}zz}~}{}~}|{yyxyz{{{{{{|}}xtssw{||zyy{wqnljq}|{zyxxxxx{~}|zzzzxurrstvxxyz{||{{zyzz{{|}}||}|}|}~}||~~~}}}~}|zxywxyzyvtw{{zzyvqnmkiinrspowzxvuuvwwsmkry{zxtssqmilx{xtrtuuvz{{ztptupnpsw{}~}|{|}}}|zxxxwxwutssu~}||{yvvvwx{}}}}|{zwvtqoopvz}~~~~~}|{ywtrpommmnosvz|{{||zyxx{{{xxyzz{|zzzwtrruvvuussuuvwyyzz{zwvwxxz|~~}|z}|{{{~{styzxtrsqmmsyyvpknrsuwxwrorstuutssssrrvz{{{zvx~~}|zxxxy{}u~~}~~}}}}|{zyvurx~|{pow~~{zzyyz|~}|{xronyzyz|}}~uoms{~~~}~~~~~~~~}}~}}}||mceint|}uppywpo{zwy|{|}irzj^`hjnprstoljkjddgc_]nyzyxz}xhFFZwrkrx}~~~}}yx|zvuuvvw{{|~~}}}zz|~ykckrxrlov|~{{|~z||}}zutwz{ywvwy{|~~}||||{{{{zz{|}|zyxxxxyz||zxz{zzyxvttux~zvy}{|~|~}}|||}}}|{{{|~}xsvz|~~~{z{|xtqpkszyyyxxwxxy{~}zzyyzwtrqrtvwyzz{{{|{zyyzz{||}|yy{{|}~}{|~~~~~}~~}}{yyzzyyyxwz{{zzzvqnpngeipwtttvvtstttsqnmqvvuux{zxwuruwy{vqnmnrsrvzxvuqrsuxz|~}}{|}}||{yz|{zxusssu~~~~~}|{zzz{|}~~~}{zyxvtrponptw{}~}}|||zxvsrqpoonmopuxy|}}{ywvwwxxxxxyyyyz||yutttuwyyvtutssstwyxwwxz}~}|{|}}|zyxz}}tpvyvqqsuvvwyywusttstvwxtrtuuuutrppqtvz}~}}{wx~}v{{zyvuz|}u}{|}~|{{||{zxvrqp}~~ts{}|{z{{yxx{~}{zz{{xrljvxyz}snku~|}~~z{~~~~~~~~~~~}}||}ogllnu}}yxysnt{{{{}||~qunRNWafkppnjddhjlmnmhaYd{~}yyywmNRqubclv|~~~}~|y{~}}~|{|||{zyvy}||~~~~~{z|~}k`jw|rc]bjrwz|~}|~}xwz~~|xuwy|}~}|{{{zzzxxyz{ywvuvx{~}yxyyz{ytrruy}}|||}~~~~}zyz{|~}z}~}}|{ywwwrw{xxxyyywwwy|~}|yxxyywusrstuwxyyzz{|||zzz{{|||{ywxz|}}}||~~~~}}||||~}zyxxyzzyxxxuqonhcbdmwywonrrqpoprsqruwxz}~|zwutpqvyyrnmmnnpsx}{yuwzz{{|}~~~}~|}||{zyy{~~|ywuuvw}{{{|~~~~}~~~~~}|{zyxvtqnmpty|||||||{zxvuttrqpnoqvz{}~}{yvttsttvwxyzyxy{~}zwvvvxz|zxxwutsqqrsuuwz~|{|}|zyxwx{~~}}xswzvqqtuuwzzxwwwvuttuxzxvvutuutsqprw|~~~}yx~~{sx|~}wrw}z|y{x{}|zzzz{zywtrpr}}x{~~}{|}|{zwz|z{}~zyz{{xqlkuwxz}upkv|~{z|}}x{~~~~~~~~}|{{|xsuqrw}~{w}tuuntxxxz~~wxr]UY^^dgca\\W\\fppooojdfn}}zvnkdg~lT[kvzzzz{}~}yvy||||{yy{|}zwsmox~~~||yxzn`jvxpbTXdoux{~}}~~zz}~{wuwy}~~}||{zyxxxwvuuutssrty~~zvuutuxzwtsvz~~{|}}|~~~}}~~yuvxzz|~}|~}|||{zyxzw{|}{yyzzzywuvwz|}|{zyzzzywustuvwwxxyy{|}}{zz|||{zzzyyz{{{~}~~~}||}}}}}|{zyxxxyxwutttuuphehhpy}ujflqpkjkosssvurrx{zuqqrsw{|wrpqttsv|~}{zz{ytqsxz}}~}}||{zxusuy}|zyyyyyy~}zyxy{}~}}}|{ywtrqrtwyz{{z{{||{yzyxxwusrtv{~}}{xusqqrsuvy{{{z{|zyzxxyz{{||{ywtsstwxz|}|||{yxxwwy}~|zz{z{{wspqssw{{xwwvuuttuxzywwupqstuttvz~~zy|{yy~~{x}z~z{z}{}~~~{yxxyyyxvtrpu}yy}~|{|~~~}zx{vz|||{ytppxxyz|}ytqy|{{|}~}z}}}}}~~~~}|{{|}|{vutxy~|x{~w~sbntqr{~||~xc[\\SZ\\[ZUNWtqqlgfq}}yrprowgU]pxxsppptztsvwwvvvz|{{zwrkddr}}~zxxxz}rcglql]Xbsywy{}~~~~}||}~||}~~{vuxy}~~}||{zyxwxxusstutrqot}~|yuttrmlpvyxvx{|yxz{{|~}|||||{{z{~~}wsvyyxyz{{{~||{|}}|zxxx{{|z{zzyxvsstuwyyyyyz{{{zyxwwvwvwwwxxz{|}{{{|{{zz{{|}}||{}~~~~~~~}}||}~~}|{yxwwwvwvustuvxywqqxux{~uibhpogdejnrsrpnmmsvrppswy|}ytruyvuy}}yxz~vjbdnw||}|{{{zyvqorvyyy{||{{z~~{xwxy|~}}}}}{xvutttvwyyyyyz}}{z||{zywvuuvwz||{{||yvsrrqrsstw|~~}}~}|z{{{|}}{zywvx{|}~~}||{yxyxvx|~}|{{|}}|zxuuvuw{zwwvuuutuvwwwwxsklpqrtz|}~~~}{zyy}~{}~~~}zz{~~|zxwwwxxwusolu~vv~{yy{}{xvx~|zyyzyywv~|zx|~}|zzz|||}}}}~~~~}|{{|~{wnqs|~z{zz~}vxqfo}~}}~p^RNWU[^YOV}zvqmmv{~~{xvrpgcet{yljjihr}xttx|ysrw{wttrvqjhap|zzu~|qw{|}wjfl|qbbhuswy{||}~~}~~|{{}}|||}~|wvxz~~}||{zzyyz|xwzwxxuxpp}{vvvutrpnou{}{zzwuwyyz{~~zxvvwxwxy{~~}xvy{ywwxz|~{yzz{|}~}{yxyyy|~~|zyxurqttuuutuwxz{{{|~|{zxvvwwxxwxy{}}}}|{zzz|~~}}|}~}|{{{}~~}|{{{|}}|zwusssstutttvx{u|{|{~|{{{umfjqpihkrttqrrrrpszuoqstvyz{zz{yssy}~zxx}~wk`_kw{}}zzzzyzxsqsuvxz|}~~|{~~}zyz{}~}}}}~}|{yyxwvvvwxxvuy|}~~}{zyyxwutstsrrsstttttttrqonoruwy{|}}~~~}}}|}~~|||{zyz{~~}||{zz{zyz|}}}|}~~~~|{zxvuutssssvwvvwxwvvwvrrrlgkw|}}}}}}{zwuwx|zy~~|{{}~|{~z|zz{zxwvvvwwvuqppy}~~~~uv}wvvz}u|}~|{zywt~~~{wttw|{yz~~~~~~~}|{{|{sksxz~~{||}xmw}{|}{iUW\\Yag^SY~~||{xsqy}}zwogdghswuggig`Ri~~}~zttywmhlnqnlngqxuqht{tx|}}|{rhjywrokpny{||||}~~}|yz|~~~||||||yxy{~}||{{{{{{|~{y{{{{{~zyzuxvsqtwwtx~~}zuvz{zz{|~zvtrsuwwuy}~~|xwz{xwwxz||||zyz{||}}|zyy{zyy|}|zyxuqqttutspqsvyyz|~|xvuvxxxwwxz|}~~}|zyz{}~~~}}}|||{{{~}|{zz{||{zxuspooopsuusvxocluyy~{{zyxtprtsnmpwwwvvtqomlrrpuvqsxzxwwzyzzz}}zxx}~yqhaiwz||yxxxyzzxuutuwz}~~}{{~~~}}~~}}}~|{ywutuvy|xtsvy{|{zyyyyyxvtsrqpqpqssuwxxvurpoooqrtwz{|}}}}}}}}}}}||}|zwx|~}|||||~~|{|}}}~~|xsrpooprstwwvwzzwuuuvwxwneiw}}{{{}~~}{xvtomyxv||}~~~~~}}~{}|yyywuuuuvuusqmv|wvx|y{{tsux||yuvt|zz{{x}{vppv{vu{~~~~~~~~~~}|}}}}{yptxz~~||}{|}{y|}yjb`\\hldZ]{upx~|zyvkbcllpsocfihdWj}|ywwna^jnponsmv{uogenz{||{{}ximnqqeg}~}}}}}}~~{yz|~}}{zyyyyz|~~|{{z{||}}}}{yyvqpv}~~zxzxpnsyzz{~~|yuw{{{|{||||{uqqsuwyywx{|||zxyyyyzz|~}wvxx{}|{{|{yy{yyzzyyyywttuvuttqqqswxy{~{wuuvwxxwwwyz|~~~|{zz{}~~}}}}|||{{}~~}{yyz{||{yxwwusqqqvxvoqukZXivy|zyyyxxxvtqlkktvz}yrnknosuvurpnrutojgdm{z{{zz|}ywtkou{{|ywwxxz{zwurqv{}}|{zy~~~~~~~}~~~~~}{ywtrrstw|{wsrtuwxzyzzzzzzyyxwvwwvwxxyyzz{ywvsrrstuwxzz{{|||||{zzz|||{zz}~}{{|}~|{{|}}~|uonnnoqtutuuuw|}yvtrrtuywor{|{xwz}~~|zwtslh{zvz~ytx}~|}}yx{yxwutttttsrqq{{{{uqsy~wqpsw{~~~|{|{xvz||w}~{yz}~||yonxyxv}~~~~~~~~~~}|}}}|||zyxtuw~~~}|||}}}|{{{niafmkdenmnv|}{~~|z|{riekqkgnpgkkhkz~~}|{uh[Znvtrqtv}yvr]cz{{{yz|xhYThros~~}}}~~}{{|~~|yxyzz|}~~~|zyyz{|}~~~~{wtngfnw{{zz{{xqotxz|~}|xwz||~|vstx{}xsrrtwxx|zy||}~}|{zy{{|~~}wvxyz{ywyzzyz~}~~zyxy{|ywwvutsrrrsuwxz}~zusuwwxxyyyyz|}~}|{z{{|}}}}}||||||}~~~zxwy{{{{yyyxyzzxv{zvklsuhXcz~|{{yxxyxvqkffhtw|xoloqnmswtprmkpplfdgjy{{zy{|~{vw|xxx{||ywwxxz{{yumjryxwxxxx~}}||~~~~~~~~~}}|{ywutrqqrtwyyxxwwxyz{z{zzz{{{zzzzzyxyyyz{|{{zyxwvuuuuvvwwy{}~~|{yyy|||{{|}}{{{}~~~|{{|}}~}wrooprtvutttssw|{wtppqrx{yx{zxvvy|~}|zwtsqx}{wy|{zz~}}{}|{ut{yxvtsssrrqqpsxtx{{upsy~ytoosw{|}|zyzvrt{}~wy{~zxz}{~qpxyyyx~~~~~~~~~}}}}}}|{skrtz~}||zzz|}}~}||~}|}|wdfnqqqpmhn{~~~~{{|riiqtl_kpoonin~z{~zth\\^rytqqtzzxr`fww||wy{zk[_ksw|~~}}}}~~}|}~~|zyyz|~~|zyxz{|}~{wqliiox|{z|~}xsruy{}~~}{xvx}~}}{smqutwxvxyy{yz~{z{{}~~}|zxzz|{zzzyyzzyvuwxyxz~{~~}z{}~zwutttsrsrstuwy{}~ytrtwvwyzzyyz{}}}||{{{{|}}}||||||||}~}~}xuwyz{{zzzxwwsptxz|ohlr|zko||||zwvxxuphfgpyy}ypnrwvttsnhhgdegmqsruvyyxwy{|zwy{|yyz{{{yxxyz||{vmhkommpsxy~~~~~~~}|{z{}~}}}|}}~}}|{zxwsqppprty|}|||}~~}|zyyz{|||}}|{{{zzz{{|}||zwvuuutttttuvwwxxyxzz||{y|~~}|{{|}~~~|{{{}}~~~{tooqvxwvttsrquz|zvrponvxwwwvvuuy}~}{zwuuw~}{{}~}}~~}}zsq}zwutsrrqppoppvv~|xtv|}~~~uolnrwz{||{zvsosy||vtz~}zx{~wsuy}{z|yvy}zyz~~~~~~}}}}}~~|tlqv|{{{vutuuuwxwyyx{~~~~~|kjryz|~uxz~~~|}}~upqwvmggfnsrmr{x~~{wrmggx~uops|~|zsdjx}~z{}xqqstx~~~}~~}}}}~~|||}}{{zz{|}~~{vrmkmsz}|{|~{wuwz|}}}ytsuxxxwz~yrorspt|~~~}~~{zyz|}}}zvvy|xwz{{{zxusruxyy{~zx|~}|zwrpquvsqsuuttvxz|~~ztqtvuvxyz{{{{}}}|||{{{||}||||||{{{}~~}}{{||xsqtxzzzzzzxum]\\my|zidoxz{}|}{srwvrmiimsz|}zlgsz|zvokhgec[Tdt{{xrsvvvwwz{{||}|{||}|{yxy{|}}{wsokgdgnx|}|||||}~~~~}|{{z{|~}}||{{{~~}|yurponnptx{|}~~|zxxxy{||}~}|{zyyyz{{|}|zywvvvuutssstssstvy||}|||}~~~~}|{{||}}}|{z{|}}~~~~~~|unmquwwussrrruy{zxwx|yxwuttuwwx{}}|{yxutv}~~~}{x|~~~}|}|v}zvutsrqpponprz}~z}{}~~yplkmsx{}~~yrsvxyyvy~~}}~~|yx}|lacgs~~y}wtzy~~~~~~}}}}}}~{vqrwxu|~yrollnqrpqrqv|}}tfpy~~~zqru|~zyy{}|}~~zywwxwj^myzyz}z{}}}qhfmtu}{uqvx}~}ztjpz}~~zvqv}}|~~~|{|}}~~~~}|||~~}}~}{wspoqv|~}}}{ywwx{}||ztmntvsrrtxyvssuutz}|{{||{~|suy|{{{{||zxtqqv{{zz}|xx{~xtsninx|xsrtsrsuwyz{|}yttutvvvvvxyz|}}|}|{{{{|||||||{{{|}~|ywxyyvsswxxxyyz|{lWYly}{kit}{}~}yqhluvsnjjmpv{yxxolswyyuljnmlj_Tftzzvibgkpuxz|~~~~~}}}~}|zxy{}~~}}{tnheipz~}|zzzzz||||~~~~}|{{|||}}~~~}}|{zzz|~~}|}}~~~~~}{wsqonmmptwz{}~~~}{ywwwxy{{}}}|{zyyyyzzz{{|{{yxxwwvttutttstux{{||~}|~~~}|{{||{{|{{{{||||}~~~~|tnmpuwvsqqrstvxxxxxy|{|ywvvwyyz|~}zyzywwzz|}}x}~~~~~~}|{|~|}zvtsrqqoonnqx~|y~|}umkiltz}~zrswz||{|~}}{vsxseY]r~}~}|rs|~~~~~~}}}}}}|{vtuwuqx|xogfejmlfkosx~{~aKant{~}{{zxvvvx}xsvw{~~}|{{}~{xy|pgt|~||xsx|vkjjv||{zqpqw|xqu{yvv{}~zrlrxwu~~~~|{{{|}~}~}}~|{|}~}|yvtsvz}~|yvttvy{|zzxsmovwxwtrstttvwwz~}}~~|}~~~}z{{xy{{zzz{{{zxvtxzywwwzzx}|srvqjp}|vrqppqrtvxyz}|vttstsrqrtwz|}}}}|{{{{{|||||{{{{|}~}{xtsw{yvtuvvvxy{tccmw}{sry~}~~~xnnpuvtleaaityvsrqsuuwxvmnwuplgerzyxufX[epuwz|}~~~~}}}~}|zyz}}|||ysnnsw}}|zyyxxzzz{}~}{zxvtsuz}}~~}}||{zzzzzyxxxxyz{|{{ywusrqomortwxz{{|{{yxwwwxyz{{||{zyyyyyxxyzzyyyzyxwvuuvwvtstuwxyyz}}|}}~~}|{{{zz{{z{{{zz{|}}||zuqquxywsqrstvvvvwwwxz||||{yyyz{||{xwzzz|z}wz}{|xv}~~~{utuz~~}}}}|{{z|~|z~{yvsrqqponnnqv~~~~~{|zrmkglx}~}{opv}|}zsln{~sTczekw|}~~}}~~}}}}}||{uvuqrpq{xldfgmdeZ]muz}|xe`hrvy|smruxyutty{~ux|}{|{{{zytsvz}~}|zxzyxv{}~||{yusssuxyvmift|}}wmkt}wywtprx{|yupmstsvyqy~|{zyz{}~~}}{z{}}~~{ywwy{~|xusuxz||zywuqv{|~zusrstuvwxyz{||}~}z{|~}ywz|}|zxxxyzzzyz{~xpmoqvuw|~yru{ytx~wrpooopqstvwyxwuststssrsuy{}}}}|{{{{{{{{{{{{zz{}~~}}|ysoqtuvvtttvxz|{qfdpzyyz}}~}~{rqtlkpmhd^htxtpnrtusrvyxz{wpihmtwzysla_jsvxy{}}}}|{{|||{z{{}~}zz|{xttvz}}|{yyxxzz{{}~~~~}|zvronosy|~}}}||{{zywvttuvwvvvwvwwvvusqnnoqsvwyyzzyxxxxxxyyyzzzzyyxxwxyz{{{{{||{ywvxzzyvsttuuvwy{{||}}}~}|{{{{zyxyz{zyyz{|{zyyxwx{}|yusstuvuuuuuvwy{|}||ywwwyzzytuz|}y~}su{z}~~~|yx{}|||{zzyyzz|zxusqqpponnosx}~yx|}|~woljho|~~}~~vw{{us{sx{uyz|{~}~~~}|}}}|{|splfnrnzxlqzrkd\\QVmvxz~~}|ztnqswxxte\\dnz{spqwwtr~~y~|}{yurmlovz||{zyyzzwxy}~|{zvmjoy|}|ytpbeq~zywsqw}yyqooqty~~zvqllrz{ps~}{zyyz|~|{||{{}~}zzyz|~}|}~|}~}{{zxw{~|yxxvtuvvwyzz{||||}||||}}{{}~~|zxvuwxyyy{sihlpwvx|ytw{}~~xrppopopprtuvwwusstwxwsruz|}}}|||{||||{{{zzzzz{}}}}}{ytooprvwtstx|~~~u_Ueqwy}~~}}~~~~~vvypjosrqnosusqprtvvw|{yz{xrkcbfkwxqpjgkqwxyz{{{{zzz{{{zz{||||{xyz{zwwxz|}~}|{zzz{|||}~~~~~}}}}}}|zwsomlmux}~~~~}}}|{ywvvvvwwwwxxyyzzzxuqonopsuwwwxxxxyyyxxwwwxyxxxxwxxz{|}~~~~|zxwz||{vsstuvvwyyz|~~~~}|{|||{ywwyz{zyzyyxwvxyz{~~zwuuvvvuttttuvxz{zzyvtstuvwwrry|~~~tr}|{~||~}||{zzxwxy}zxurppoonnnpw}~~zwxz|~tljiir~|z{~}|~|z}{z{y~}}~}|}||{{|vqehpjn{xqxynl\\VZnw{~}|zxvrmwxzzywh`gqy{usu{xeo~|yu{~{wrnjjnuy|{zyxwxwttvz}|{ytmer{{wrnbdx{|xqpx~~}|zylorrtx}~{vokn{|{}}{zyyz|~}~|yy{~}|{}~}|{{|}~~~}~~|{~{zywutvwwwyz{{{zyz}}{{}}}{yxy|~}||zyvtstvvvw{~piinu~|~|wxw{{uqrrsqpoprstuvtstuxxxuuy||}}||||||||||{{zzzyzz||}|||{vqmmpvwusv{wcZfpvz}}{||~}}~xrqt}snkjqusqtutssssuw|voqxwtne[X[mwqkklknvyxxyyyyxyyzzzzz{zyyzywxzzyxxxz{|~~}}}}~~~~~}~~|{{|}}}|yuqnllqu{~~~~~}}}|{yxxxxxxyzz{{|}}}|zwtrqqstuuuuvwwwyyxwvvuvwwwwwwwwxyy|}}}}~}|{zy{|{vssuwwwxyz{}~~}||}}~~{xwxz{{zzywvvvxz{|}~}{xwvvvutssstuvvxyyxvsqqsuwxwrsy}|{~{z~}~{zz{{}}|{zyxwvw{{xtqpoonnnnpvy|~}~{ywx{|~xojijls||yxy|~~~~~}~}|{{{{}|zlwxiu}|wxy}}m__pz}wtqoiwvwyzyvrpkkpttz~yjmrhqry}}xwussrsvz}}{ywuusqqsw}}{yunlz|qnlfefhwvzwpv}~||{nutruwwz{ysmm|~pfk}{~|zzz|~~}}||zywxz~~||~~}||{|{|}|{}}{ywtrsvxxy{zyxustw{|ywxzzzyww{||zzxwtrqrtsrrv|zqllqy~~~~|{xz}~~ysuvxvuqppqstuuutuvvuux{|{{{{|||||||}}||zxwxy{{{|||{|ztmkotvvvx{~}xqnruvw|}yxy||{ytkfq{xrnkpqnnsvwuttvurrnlputqpmcXR^qtonnnrwwvvvwvvvyz|zxyyzywvvwwyzyxwxyzzz~}}~~}}{z{{{|}|yuqnmotz~~}|{zzzzzzz{{|||}~~}|zwutttutstvvvwxyyxwuutuvwvvvuuvvxxyz|}~}|{xwy|zvtuvwxxxzz{}~~~}|{|}~}|zyz{{{zywvwxyz{{|}}{yxwvvutsrrtuvvvwwvtpnquwyzxqs|~{}}y~~~}~~~}}~~}}~|{zz{yw~}{zzywvuux|}{yurqpooonnpsvy}{}{vpow{}}ulhhjmt{{ywz}~~}~~~}|{{{{~~~}{}~y|rlmz~~|uknliwstwyy{|uecmstz~xkkkikrxyxuwwuvzvv{}}{xwussrpqw}}}ywpq~zj`_YZ^aiqw{}|}~|xtqwvsw|ypmlojgkx}|{{{|}~}}{{zyww{}}}}}}||{z{}|z{~|zywurtwyy{|ywwsprw{zwtrtwz{{{zyyxxwvspoquurqsvvrppuz~}|}~}{|}~|wyz{zwtpoqqstuuuvuttuxyyyz{|||||{{|}~}|zxwwx{zz||{{||unlpstwyz{|~~|yyxzvuuz}ywxzyvuwwqrzzutrromkrvutttvvrnjpusqorrog]Xgxvsqruwwtsvvtrwyz|zxxzyxusuvx{{ywwxyzzy~~~~~}|{zyyy{{}zvromotz~~}|{{{{{{{{||}~~~~}{zxvuutstuuvwyzzzxvuttuvuuttuvwwvvwy{}}|{xwyzywvwwxwxyzz{{}~~~~}{{{}~}||{z{zyxwxz{{{{{|}|zxwvvuusrrtuvvvvuurmlry|~~yqu|y|||}}}~~|{z|}}||tl}}}{zzywuttuwy||yurqpooonnooou|z{vnhgt~}qkhikpuyzyx|{}~|{|~}|{{{|~}~vuw~}|}{vt|ujtklswy}zc_hrrx|vhbpzprtqqow|yy|yxz~~}ywustutrw~}|xx|yl_[VXZ[bny~zx{|tntuoq|~ullosvv{~~~~~~~~~}||}}}}~~|zvwz{~~||~}}}||||}}}{z{}~|zyxxuw{|zzzvuwxwy{|yuqpsxzzzyxwwwxxvsonqwxvuttuuttwx|~~~~}|||}~~}~~~~|xtqppqstuuwwvuuwwwxz|}}}|{{||}~~}zxwxz}|{||{zywtrrsrrwz{{{|}~}{{|}{spoy~~|{zywtsuwwy{|}|{wsqnptwwvuxyvqmqqlknuzxrh\\fyzvuvutqlhkrqnqvx{xxy{{zvstvy||xuvxy{{z~~~}|{zyxxy{}|xrnlotz~~~}||{zzzzzzzz{{{|}~~~~~|zxvvuuuuuttvxz||ywutttuutsuwyz{{{||~}|zzzzywvwwwxyzzz{{|}~~}zyz|~~~}zxyyxxxyz||{z{|||{ywvvvvurqtvvuttsrokkt{~xqv~}}~~~~wz}~}}~~~}zxy}pf{~{yyxwussstvy}|yurpoooonnpstx}z{{shgw{ojhjlrw|~~~vvz|svz|{sry~||{{{|~|~~~|{}z{|~|{zzzzuh]hfhowz~skjpsuzxidqusrpjkimrqquuuy~~ywvvy}|ux~~|{~{|rc^USQS^q}}xtv~~~}yy|thkwyzunnr{}z~~{{{|||||||}~~~~}{vvxz|{yz|~~}}}}}}|yz{{||~~}~|zyzyxz|}zxxww{}~~}{vrprvz||{zwxxy{yxvsqrvzyywwwwvvwy{{|}~}}|yz|}~~{wtqpqrtvvxxwvuuuwy{}}|{{{||||}}~|zyz}~}}|{yuqqvzxtsvyyxyz||}zy{|{snoz}}~}|zxvsrqrx}}}~}|xtrquzxxxy|}{wuwpkkqw|zwohowwtuurmif_\\hnliijvzx{|zwtstw{|{yvwxz||{~~}~~~~~~~}|{zyxwyy{}yrmmpu{~~}}|zxwvwwwxxxyz{{|}~~~~}{yvvwxxxwusstuxzzxwussstsrrvz|}}{yxvwwxyz{{{||{{{}~~zxwz}~~zvwwwyyyz||{{{|||{ywvvvvurqtvutsrommllv|~~}wrx~|||}~u{~~~~~yz}yvw}~vp|~{yyxwusrrrtw|{yuqponommotxxxy}~z{~sp{~wlhgkov{~}yqszx|~}~~oiw~}||{z|{~|||yz{{}~{zy{{zjZ_eiqwz~|xuvvtwzvuxtqoleb`aehjnqsv|zxxy~yz}}|yzugcYPII`x}{xtv{|||{|}|wwlabmuvtonoxyu{~zxy{{{{{{|}~~~|yuuvwxxusuy}~~~}}}}~~}{{|~~~~~~~~~}~~}{zyyy{||xvxy{~}wsqswy{|}|zwwy{|{yyyxvx|||yxxwwwxyzz{|}}}}yxz}~~~}||}}}}}~~}zvrqrqsw{|{zxvvvx{}~~}{{{||||||~}|{|~~}{xtnnu|zusuxxvvvwy|zxz}}urs{||}}|zxvssrrx}~~~}zwspkmuyxy|}z{{urrx}}{{xwxwsopttkcfc[cnmkhejpv}{sposwz}~}{zzz{|||~}}|}~~~}}}}~~~}||{zxwxxz|zpjknv}~}{zywuuuuuvvvwxy{|}~~~~}}~~~}zxvvwy{|zywvspqsuwvutssssrrqtz}}{ywwwxxyzz{|}}|{xy|~ywvy{}~~|xwvvxyxxz{{{||}}|zxwwvvusstutrqqmienrz~}usx~|{{}~}|~~}}}vy~zvw}~}}}~{yyxwusrqqruz{xtqonnnllpy|vsuyzzzzz~|{~{pkggks{}~skpqst||~}~}uhtwy~~~}}||{z{|}}{|||}~|}|~~tmlhmwypz{}|zwsuz}{wtqlfa]]_dhpsssu||z|~}}|~~}|zxywkfa]TIg~|vsmqzwuxwwy{~}{tneelrxupoquurqty|{wx{||||||}~~~{rqsutsvsmmu|~}}}}~~~}}}}~}~~}|{zz{|{xwy}~{usux{{{{{|zwvxy{zy{|{{|~~~{yyxwxxyyzz{}~~{x{}}}}}{zyy|~}|}~~}{xtsrqu{{{{{zyyy{}~|{{{|||{zxz|}}}}}}zxtolqwwttvyxurqqq}~{~~}xwxzz{|{zxywsuxz|}}}}{xwvtssvxzz|vrrsvy~~}~~{uolntwnglrnnpquxdYcr}|smoux{}~}}||{||||~}||}}~}}}}}}}~~~~}}|{zywwvwyywvuvz}{zxvuttttttttvwyz|}~~~~~}|||}}|zxvvx{~~||zxwtrqsuuwusrrstronqvz~~{ywwxyyxyz|}}|{yssx}~~}{ywwy{|}}~~{yvvwwvuwxz{{||}|{zywvtstvvuspprskfvy}trx}{{|}~z|~}}|}}vy~~{z}}{}}{yxwvusrqqqsw}~{xtponnnlms}uqqvxzyyy}wnighlu}umijkrquzx|~|}}nemjnpqy{{|}~~~}|||{z{~~}||~}}~~}zwtz}wirvvy}~zwsv~|vqpolkljghpyzwwx}~|xz||{yz}{z~}}}|zxvvxqmjgc_m{{vronoruuwvvwy|~|ungiovxuqoqrvx{|~|yuwz|}}}~~~~~{utttttupmpv{||}}~~}}}}}}}~~~~~}~}||}|{xy|~~~|xssvxzyyyz{zxvvx{zz|}}}~|{zyxxxyyyz{|}~}{|~}}}{zywyzyz{|}|{yvuruxyxxxxyzzz{}~~~|{zz{|||{yyz||}}}|}}{yxvqllpsttwywqoopq~~}z}{z{||yvttuvuv{}~~~||}}zyz{~}uq{~zqiecfilps{}|{zxurqsx{wvx|zwrryzcP]u{wsruvwxz{||}}|||{{~}}}}~~~}}}}|||}}~~~~~~}|{ywwvuuw}~~~}{zxvtssssrrrrstvxz{}}}}~|{{{{{{{yxvuwz}~~~}|{zxwxxyywusrtuutqoptz}~~{zyxyyxwwwz||{zwrrv{~}zyyy{|||||}~~~|zxvvwwutuwyz{|||{zywtqqsutrpmnsyws}~|srx}||}{|}}||~~}~}|}~~yy{}~~}||||}}|~}{yxwvutrqpqqty~zwspnmmmmnu}xtvx|{z{|~}qmhgipt{}~xkcclqjjvv}}}}fOUaqvx{{xy}~~~~}||||{z~~|yy{|}~}~~uklkpw}~{xvw}|zuonruvzyvvyzww{{yuuvzzxx~yuwyyzyyxvsvwwumefowtpllorrwvywwvwz~~vqknprwwtrrsy|~zxy|}}~~~~|}ytuuwvppvz{{|}~~}}}~~~~~~~}}}{{z|~~|}~}{xtsttvwwwyzzxwxz{|{|}}}}|{zyxxwxyyz{|}~~}||}~~|{yvvuvvy{|{yxwvvyxwxyxxxyzzz{|||{{zyz|}|{z{{z||}}|zyzzzyvplnsuvy{wqruvv}~zx{}}||}|xuvwvwy{||{zyz}~}}~~wry{kRJJPZ``aiw~|zyxvuronquz|~{uu|yjYbyywwxxustvy{}~~}|zz~~~~~~}}|{{{||~}~~~|{zxwwuux~}{zxvtsrrqqppppqsuwy{|}}}|{zzzyyyywutuwwxz|}}}|{zz{zzxvtssstvutqrv{}~~|||zxyxwuuwzyyxvtstvz|{{{|}}}||||}}}}|zxwxyyvqqtwyyz{|{zzztnoqrpnmjkrx~~}sry~~}~~~wtx{~}~~}~~|zxy|~|{zz{{||~{{|~~|zxwvusrqpppquz}yvronmllmpw}|{{|}|}|}vlkihkqtxx{~zjdqwreo{z~~^Xo}|z{|xy~}}}}}|{{}{x}~~|yy{~~~~~zvrngkw~}{wvvx{yrnrwwvx~~~}ssuxy{wrr|}||~{wwutwwx{{vvwz|tovypjfep{zyw{{zwvx~wsnmoovzywuw||zz~}||}~~~~~~~~~~}||wuvxwtw{}|{|}~}|~~~~~~~}|{zz|~~||~~}yvtssuvwxz|{zy{}}}}}|{{}~~~~~}|{yxwxyyyz{|}{yy{~~}{ywwutvxyzywvvwwzyz{{ywwxxyyz||||{{z{|}}}}|z{|}}|zyz{{{yuqruwx|}|xxyxz~}~yy|}|}~}}}|zz{z{yxvvwz~~ywxraLDCJW][]gt||{{|{zwrledlsy|}}|{{}}uijwxyyyuropsvy|}|{z~}|{zxwwy|~~~~~~~~}{zyyyz{}}|{zyvtrqpoooooopsuvyz|}}|{||{zyyxvtsuvvvxz{|}|{{{zyzxvutsrrtutprvz}~~~}||{zyxwttuwxwwussrsvz|{|}~~}}|||{{{zzzyyz{zwqpsvxyyz{{{~|uopqpmlkjlrxz{~}rsz}~yy|}~x~~|}}~{yy|~{zyxyyso|{wvx|}zxwvutrqppooqu{}|xuqnmlkknrx|~}|{{{}~}~}}|sjjjimtvvux|~{pqy{uru}}~wo}y{{xx~~~}}}||||~{sw{||~|zz}~~~}yurlfiv}|yust{ztruwtqtuqnzgepuxz{yxz~}{yttvww}{uvx}}zpjffr~~yw|~|xuv|}utporrw{zywy}zyy{}~~}}~~~~~~}~}}}}|~|xwwxxwz~~{z{}~~~}~~~~~~~}|{yy{}~~}~~~{xvuvxz{{|}|{z{~~~}}}zz|~~~~~~}zxxwxyyyz{|~{wwz}}|{yyywwwxyyxvtuvxzzz|{yuuwyzz{|}}}|{{{{|}~~}}{{{|||{{{|||{ywwwwx{~}{zzxy}}|z{~||}~z{{yywvvwvx|~~xuqrtl`WWdmimsz{{zy|}zxsneahqv{}}}||~}wppvvxxwurppqtux}}}|||}|zxvttwz}~~}{yy{~~}|{zyyz{|~~}}}{yvspooponnnnorsvx{}}}}~}}{{zxvtstwxutvxz|{{zyxxxwuutsrqppporw{}~~~~}}|yuxzzwvttuuvtrqnmrx|}~~~}}}}|yvwyzz{{{zxtrrtvxyyz{}|tsqokijorvy{|~}rs|}ztws~{}~}{{|}~~}zxxz{~|xxursy}~|ywvutrqppoooqwzyvtqnmlkjory|}~}}||~~unjhjls{{xvvz}~yy}|~}zw{wxyxy}~~~}||}}~|vm{}}yz{}~~~~|zskfefq|~{voms{{xyzwtqldbr^bovz|}}~~xvyxv{~wtst{}~uromw~zz}}xtvx|xuywuyxz{zyyz|~~}ywwy{}}~~~~~~}}|||}}}{zzzyz|~}zy{}~~~~~~}}~}~~~~}}{yyy}}zyz{}~~~~~}|z|~~~~~||}}}~|zyxwxxxyz{|~|xvy}}|{{}||{zyyxwvtuuwz{{||ytsvy||{{{{{|{{{{{}~~}|{{{|||}}~~~}}|{zxvwy|}}}ywz}}|yy{}}|{|~|xy{zuruwzywtrg{y||wrot~~zvrvuvurnmrtxyzyyvnikptx||}}}~|yttuttuvxusrrrpnnsy{||}~}{ywuuwz}~~|zwsstx|~~}}|{yyyyz{}~~|yurppqqpnmlmnquwz|}~~~}|{xwuvtvyyyz{|||zyyxwvttttrrrqonpsuwxxwwxyyxxuswz{zyustuusrpllry}~~~}}~}wsuyz{{||{yuqpqtwxyy{}}~|xrnpw|~~}|~{qs|~~~~~}|}}syy~}}}~}}~|zzz{|}}}|zzz|~~{wtxz|yxvutrqpponnosvvtspnlkjiory|~~yokiginw~{wvx{~}}~~~}zus}}{yyxxz|~~~}}}|}|pbww~}yzz{|~~~}}||rifhilx~}~~uooz}{{yxtnfmwdgqw{{}}~~}}~z~ysnntwx|~~z}{z|~{z{~}xtuzzvwzywzxz{zzyyz{||zxxy{}~~~~~}}|||}|||||{|}~}{yy{}~~~~}~~}{z|~~}~~~~~}|{{|~}|}~}|{|~~}}~~~~}}~}zyyxxxxyyyz{|zxx{|{{|~~~~|zxwvuuvwy{|z{|{vtuy|{yyyyyz{{{{z{|}|{zz{|||}~~~|zyyxwwz{{|wvz}}}zvsvy||}zxuy}{vtxz}||ygTjhswvpqw~}{zumqsromllnklouwuttxz|||||{}|zwvutrsuyyvutroh]ct{}~~~~|zyyz|}~~~}{yuqonpuz}~}|{yxxxxy{|~{wsqqrtsqomjkpuwz||~~~~}|zyyxyxttxzz{||||{{zywvuuuutsrqpnorqonmmmnpqsuuuvxxzyusstsrqojlv}~~~~}~|vsvz{||||zvokloruvwx{}~zx|}~zqsz~{{}}|}}}}|||~~}{xwy~z~}}}~}{{{|~~{ywvxz{|||}~~~}xxspu|}{|~{ywvutrqpoonnnorsrrpnljiinrz|~|~qkhgfipy~~{xvwz}~}~}~}|~{wv~|{xwwz~~~~~}}}}~~{]c{rq|}z{{{|~}~~}{yy|vjhkkit|xv{~{yvrqtnksnqpuz{||||{yyxxxxwy~}qijquwz~~|~{z{}~|zvs{zvxz|{wwxzzzzyxxz||zz{|~~~}|||||}}}}}}}}|{z{|}}}}}}|}~~}~~}|z{~~~~~~}||~~}~}}}~}}|}~}}|}~~}||}~~|zzyxxxxyyyyyzzzyz{|||~}{xuttwz{|~}ywyywuvz{zyxxxyyz{zzz{{{{zzz{|||}~|zyyxvuz}{zyxz}}~}woou{}~|wtsy||{{}~~~~zdR[jptpqw~~wssojolprohdb`_antxyx{}~|{{zy||{zxvtrtuz{zywvvn_au{}~~~}}}~~~}}|{ywsoklpx{~}|{yxxwwxxz|}}zvtrswwvsqkkptwz{|}~~~~|zwtrtzyvuwyy{zzxwvwxxxvuuuuuttrqrrrrrrrsssuvutwwwuvwwvstusppoily~~}}}}{utx{||||{zvokkmpstvx{}~}~~~~~xqsy~{{|{wwvyzzz{|}~~~~~~~|||{{zyy|}}{ywvxxyzz}}{zyvlfpzvrv}{xwvutrqppooonoopqqonljhinrz|}}~xmifeflsy|}{xvvxz||||~}~~~~|~~}~~|}}{zz}~~~~~~~}}~~}~}z[diytjj{|z||z|}~~~~~}|}~}yvvyyjjnkkr~~~|}{z|{yvrigrsjikllt{y{zumklnmliip~}|{zvnioy|xw{~}~}}}||~{utyywy{xwxyzyyxxy{}}}}~~}}|{{{}}}}~}||||{{|}}||}}~}||||~~~{yz}~~~~~}}|}~~}~~~}|zz~|}}}}}|||}~}{z|~~}|{{{zzyyyyyyyyyzz{||~~~||}}|xurtx|~wsvxxwvy{{zxwwxyzzz{{{||{zzz{||}}~|zyyxxv||{{z{|}~}yqou{}~}{ytpry{z}~}}||vdYhwxssvz{{yxwvsplnole\\_a\\\\jry|||}}y{{wxz|~~|zvtvw{}}{yxvphity{}~~~~}}}||{zyvqmmpw{}|zyxvuvvwyz|~~|{xvwz{zxvtssuwyzz{}}}|zxuqlmsvvuuwwyyxtpmntvxxxxwwuuuttuutttuvxxxz{{{{vqquxxywxxuqopru{~~||}~~yvy{|}|{{{wqmlmprsux|~~|||}}xquy{xyxuuvwyy{}~|}}|{yxxxz}}~~~}zxxxyy|~}{zwtuqnuxovu}zxxvutrqqqqppoonnoponljijorz{|~~}{rhfeehnuz|}{yvtuwwxy{}}||~~}~}}~~|yxz~~}~}}|}~~}}|~}}}}{lgZhjadx{zz{{{|}}}~~}zyxxwutswwlnromr|~|{~|yxywsnhajttkda\\h|~|yslmlnoooppwzyyyxurqy}urx~~~|z|{sv|~yvy}}zyzz{zz{{|~~~~~}~}}|{{{{}~~~~|{{zzzz{||{{}}{{|}~}||}|zxy|}}}~~~}||||~~}~~~}|z{|~}||||||||||~~}zz}~~}}{|{{{{zyyyyyyyyzz{|}~~|||}~ytprv|}~~vsuwxxvuvxxvvvxyz{||}}~~|{z{{||}}~~}zz{{{|~}|{{||}|yutw|~~~}zwtswxx{}~~||zyz{xqw~zxy{{{{z{{zxutnkmhcnsnhptx{|{yxy{{xwwy~|xwxx{}|zwsmghmquxz}~~~~~~~}}||{{{zxtsrty{~}zxussssttuuwy{~~~~~~|{{|}}|{|{zxwxyyz{|||}{ytkimrstuuvwyxxsnkpsw{{zxwuuuuvwvuuuvwywyxrsvz{{zz{xuqqy~~}zxy|}}wwy{{{zzzxtonoqsuwz}~~{yz|~{vquz|wxzxxz|~}{z}~}}~~~|zyz{|~~zyxxxy{~~ywztlqz}{wq{{}zzzxutsrrrrrqoonnonnnljijosz{|}}~~~~~~vmgeefjpwz|||zwuvvvwx|~}zz|}~}}~~}{yurty~}|x|~yx~||zxx~~~}}|}}}}~|}rX[`^gxyxyzz{}|}~}|~~{wsmkmppt{wmqwsnr{~}~~|ywtqljbgqwi]XS[u~xrnqqrrtz}{{~~}{xvy}~vty~~}}~}{~|wz}{y{|{{|}~~~}~~~~~~~}}{{z{|}~~}}{{zzyxyz{{{|}~~|zz{|~|zz{zxvvy{{{}~~~}{{{}}~~~~~}~}}}}}}||||}}}||||}}|}~~}~}{{||}|zzzzzyyyyyy{{|}}zzz|{uoosxz}~wtvxyywtrrstuvwxz{|~~~~}}{zz{{||}}~~~~}}||~~}~}|{{{||{zyxz}~~~}{ykemzzttz}~}|}~|z~|uu{|{{z{}}{ywtpoonpx{ztsstxyxvsy~}yvrt|}zyz{||zyvqielnjnrw|}|{|~~~~}}}|||{{{zzyxxyyz{{ywwvtrqqqrrrtux{}~~~~~~~~~~}|zxxxxxxy{~~}|wpnnoosuutvxyywtpopsz}}zxwuvwwwvuuuvuvtu|||z{zxwvyz{yz{ywxxz}~{tswzywupotxxyyyxxvrqrtwyz|~~}|}~~|zy{|{zuov}{wz}{{}|zzzxvxzz~~~}||}~~|zyxxxx{|yxytoszzwurw{z}}yvttsrsrrrponnoonnljiins{|{{{{||}}~|qhgfefltyz{||{yxxzyy{}xwz|||||}|zyywrppwxwrxyw|}yz{}|z}yvw}~~}}|}}~~}~{bYZVm|wuw{z|}}~}}|}|uodbnvty~ylq{uns{zz}{|~|urpmjegifXRW[^sz|yvtsrrtuzwt}zvtrsy~~zx|~~||}|{~~~~}z|}}|~~~~~}|~~}}||{zz{|~~||{{{zyyyyzz{|}~}|zyz|~~|yxyywutvxyz|}}~}|{y{}~}~}|}||||||||}|{z{||}||||||}}~~}|zz{~}xwyz{zyyxxyyz||{xxy||wpnqvx|~~zxyzz{{xsqruxxwxyz|~~~}}|{zyz{|||||||||}}~~~}||||||{{{|~}}~~~~nju~xoq}~}}|zzytxwprzzwuw|}|||xrsutvvtplmqttsqw|{yxux{||{zz{{{zwwvqihkgeglqy|ywwy|~~~~~~}}|||{{{{zzyyyxyzz{|{{zwuqonnnoopprtx|~~~~~~~~}|{zyxwwwwz}~~~zwsqnnqussuxzyywrqprx|{yvwvwvvuuutuutttwysrwwpqtxz|{zyyyyz|}|sqwyse_cafruyyywzxtstuxz||~~}{z{~~}{z{{{ztmv}}|}}~~z{~}{xwxyxqx~~~~~}{yyyxvz}yyzuuuwtrsut~yz}wwutsrrqqpoooonnmkjihns{|{zzzz{||zskgffegmvyz{{||yx|~~~}vtxzzz{|}zwwwwumhiwyrx|}|xpr~~}z{ywx|~~}}}||}}}|~sk`Rj~wsw{}~~~~~{|}rl_ax{wtojozvosyxy|~z{~}snxvmjmiMISminsxzyxvsrruvrot|{qlosw{~}{yy{}~~}}}{|}}~|yz|}}~~~|z{}~}}|{|}{zy||{{{zyxxyyz{{||{zz{~|zwxyxusuvwy{{|||{zyz|~~||~}}~}|zyz|||}}{yx{||{{{{{|||~zyyz|~uqvz{{zzyxxyyzz{yyz{|}}yvttvx}~}{zz{~}xvxzzzxxxz|}~}}||{zyyz{{||{zzz{}~~~~}}}||||{|}}}|{|}}zuqrvonx}~|{|{{yyyvstzxqpuz~|sknuuvustutpkiiorsrssuxz{xz{{zyyz{{ywvupijmb[^gmr|xspnqv{~~}}}}~~~~~}}||||{{{{zyyxvuuwz|}~~|yuqnmllllmmnpsx}~~~~~~~~~}|{zyxwvvuwy}~}{zvrnlmqtuwyxxwvutrpswzxtsuwvutttuuuuuroopswuqqrxz~}{yyyz{}~zwxxo_X]Z^msz||z}zuuwxyz|}~}{yy}~~~~|{{{tlv~}~~~~{|}{yz}|wqv}{{{{zwz}{{~zwtqlklsq|zu{|uvuutsrqqppooonnmljihms{{zyxyzz{yunheeefkry{{||}|xu|}zsswwuxz|}ysqtx{vdav~v{~x|ulmz~zzyy{~~}}}}|{|}}|~|wqisvsv|}}}yy}}oi_hrfehhhvwttwyz~|{{}yww}uXG[zywyy{{xtrtxxssz|{xtnls|~|{yyz|~}~}|{{{zyxz{}~~|{}~|||{z{zxz|~~|{{{zyxxyyyzz{}}}||{{~}|y{}zvttuwxyzz{{zzyz|~~|{~~zutv{{{}}|wtyzz{{{{z{||}~~}yy{}}}zrpwz{{zzyxxxxyz{|||{|||{{{||~|{{|}~~|ywx{}~}}||{zzyzzz{{{zzz{|}~~~~~}}}|{{{{{zyxvqpopppos{}{yx|~|yvuy{xolptzw_NT_ciqsuuvrld`gqssqpprvwvwyyyyxyzzyyzyqhileVRcrqztokilpvx|}}}}}}}}}}}|||||}||||zyyywwwx{}~~{wrommllllllmosy}~~~~~~~}|{zyxwvwwvw{}~~~~|zwqljmpuyz{zxxxvojkqvtpqtuutsssuwy}{tklsurpnqy}~}ywxy|~}}zxre`dbfrx}~{{|{vv|}~}yz}|}}~}}}|{tlw~~}}~~~}}|{}}{||}~~}|yrzxrqojkotmtsp{wpttvutsrqqppppommljiintzzyxxxyzyupiecddgnv{}|}}}}zx|}|}|}{uqtwwruy~zporxrgzz}y{vnnz}yxwz}~~}}}}||}}~}~}}}yxzyzvtyylh_nklurmjowzrlkfn~||xut{z~nYi}{~~}}zvtx}}y|zuqmlow}{yyz|~~}|{zzzyyz{{|~~xx~~|{z{|~|y{}}~}|{{zzxxxyyzz{z{|}||{}|{yz{{xvuvwxxxyzzzyz{|}~}{}~|xwz|{z{{zxwyzzzz{zz{||~~{||||ztxy|{{zzyyxxxzz|}}||||~|zyy{}~{xx{~~}}|||{{zzyyz{{zzz{{|}~~~~~~~~}{yyyyyxtnheehqwz|{ywuw|}{wxxxwtqnms}xcI@GMVcnuvuqmf`cnvxwuqqsrruxyzzyxyyz{}}ujlts_O\\w~xtoliijorw{||}}}}||||{{{{|}~~}}||{{{{{||}~~|ytrpooonnlkkloty|~~~~~}}}}|{zxwvuvyywxz|}xpklosy|}}{yyxvqpprpmmqsutsrrtx|ykmtvqjis}}~~|xuvwz~~}zz~{zwoloosz|~~vv}}zxyzz|}}}}}|smy~~}}}~}~~~~}|||}}}yxuirrlonkntymoomz~rntvxwutsrrqpponmmlkjintzyyzzzzxvqkgeddejsy|}}}~~~}}|{{{yvsqpuwvqrw}~sqrys}|}~}}|ut}~zwwz|~~}}}}||}~~~~|{}z|~usxzqngqxpw~xsmgwytpofn{qfVXmhhsynw{}{xw|~wplhekw~~~|{yy{}~~~~~}}}||{{zyzz{}{z~~|zy|~}}}~}}||{{{yxwwyz{{zz|}}}}}~}}|||{xwxyzyxwy{zzzz{|}~||}~~}|||yyyzyxz|zzzyyyyz{|}~}}{zz|}~~}|||{zzyyyxyy{}~~~}{}~~|zz{|~}yxy{}~}}}||{{|}{z{|||{{|{{{{|}}}}}~}}~~~~~}{yxxxyyunhe\\]l{zwttx|}|{{ywxzuvzvnhlz{mV;:BRfottrpnmfgqwzzxurpnpw|||{zyxxyyz{xst|~pbgw{xuqmjhiknsx{||}|||{{{zxxx{}~}}}}}}|}}|}~}{wuuutttqnkjjkoswz|~~~~}}}|}||{yxvuuvxwuvx}~~}|ywvuuy|~~}|{{zxvuvsmknqstsqqrw}~wquyulpv{|}}{wttuy~~{vv}|zxvutstvw{|ww}~~zywx{|}}}}zqmy}}~}}}}~~~~~~}|||}|{xupopromllnr{wqqqx~spwxyywutsrrqponmllljhlqy{z{||zusmhfddeeowzy{|}~~~~~|zz{wokoqtwwtsw}~tqptz{{|}~wy{}|||xxy{~~}}}}||}~}}||~||~}|usx|}|roxtsrprsokqwvwstx}{dQJN]WQUm~ywx|~{zz}~~slkihgz||{yyxxx}~~~~~~~~~}}{yyy{}~~|{{}~}}~~~}|||||ywtux{||{||~~~~~}~~~~}{yz||}|zx{x{xy{{||}}{z{{z{zwsuwyyx|}{{|zxuy|z|}}}}}}~~}yxz}~}|||{zyyyxxyz|}~~}z{|~~~}}}~~zwy{||}}}|||{|}}}|{|||}}}}|z{|}}|{|}}}~~}~~~|yxxwvvurog\\Tey~~zxvvxyyzxvvvxwsv}xnceqxvm[B7CYjpuwvtpmkmtxzzzywsoqy~~}|{yxxxwxyz{z|{wutvvyupljhiklqvy{{|}||||{zxvwz}~~~~}}}}}||}~|zyyzyyxurmkjjknrx{|~~~~~}}}}}}|{zywsrtussty{}~}|||{yxy{||}}}}|{zyxtolknqtusqopt{~spy{tvvyz{|{vtttx}~~ztt{~||{zvrqqrsxzxx~~~{ywvvy{||}zqn{}}~}}}}}|~}|||||xurpqtusqptqpqstsv{~zmjtyzzxwutssrpomlklllhhow{||}~zrnifeddgirxyyz{||||}}|zzywqkimryzywz|wvvy|}~}z||x|}~~yz|~~~}}}|||}~~~~~}}~}xyxyuttxzztpmvxqlnmjjmuy|zz|}z{~hREIVSPN^z{zz{~|{{{zzxz|vqnnoq||zxvuwy}~}zyy{|}~}}}~~}~~}|||~~~{}~~}|||||{xsswz|}||}~~~~~~~||rrux{{||}}zxxxy{|ywy}|{y|}|}}|}wwxy{{yyyz}~ywy|~}}~~~~}}{zyyyyxyy{}~~|yy|~~}{{{{|yvy{{|||||||{||}~~~~~~~~~~}||}~}{{{{|}}}}}~}|{zyxvrnkiii\\bz}}zzzzxsvywuuw{{z}yqgdfmrrmXDZqrrwyxurnmqwxyyz{|zvuz}}|||{zyyyxy{|}{zxyxxvztnjjjklnrvy{{|}}~~}|{yxxy|~~~}}}|||~~||{||||{yvtrpopruyz{|~~~~~}}}}}}}||{zvqoqqqqtxz}}|{{zzzyxyz{}}}}||{zyvrnkmorwwvronrx||x{}|zsuw{|{vttuy}~}zttz|z{|{tkjlmpvzxw}~~~~{{|{zyxxyz{{{{xqo|}}~}}|{}~~vrz~~~}}~|{{|||yvtssuurnktwunmptz}}|karxzzyxwutsrpomlkkllijmvyyz||wnjfdedehmuxxxyxyzyz{{zyzzyvrlnu|~|z}~zxxz{}}}||||z}~~}}}|||}}}~~}~|zvtuwuvvxxxzyr}ysrqmhlrvz~~{~~jBDTVJPl}}{yxz}~}{{zzytv}wrmkow~}|{yww{~|zzz{|}}|{{}~~~~~~~}~~~~}||||||||~~}|zzz{zyww{~~||}~|xwrrvy{|||}~{xxwx{~|~~}{z|}}}}~zyuz{ztrsy~|vuy~}{|}}~}|{zyyyxxyz{||zxy|~~~|wwy}|xz{{{{{zz{|||}~~~~~}|{yyy{|}}}}}}}||{zxtojd`koq{}}|{||xsuyyxxy|}zyvrkaepvsiar|yvxxwtpnpty{{zyzzzyy{{{{|}}|{{{zz|||{yxyyyyzwtqpoopqsvxz{}~~}|zz{|}~~|{{zz|~}}}}}~~~}{zwvuwz|}|zz|~~~~~}}}}}}}}}}|ytppqqqrtuz}}|{zyxxyzz{{{|||{{zxvrmklnt{|ztpnosx|{y{|ztuwz{zwtuw{~}ytty}|ywxzztjfkjnuy}xu{~}~~}wuwwy{|}}|zzzxpp{~}~~~~|zyz|}~~~}upx~}}~|zz}~{xz}~|zyxtsutspknstsrrtxzz{sqzvwz{yxwusrpomlkklljkmtvwxxvqkhfeeefinwywxywvvwwxyxxz{zzytty}~{z{}|ywussuvuttz}}~~~~~}}}|||}}}~~}}}}wxwvwyyxww}zytttplu||{}wOJOOEQ{xuvy|~~~}{zwwwxyyonokgo~~}}}{z{}{{{{{}}}}{z}~}}}}}||||}{z{{zzx{}~~~}|zyywvwxz}||}~~~~}z{||||}}}~~~}{{zz|~{|}}|{z{}~~}}{{y{||vrqx}|wwz~}{{|}}}|{zzyyxxxyzzyyz}~~}}~|zxz}||{{{zyxxz{|}~~~}}|zxxxy{|||||}}~~}{ywvunilx~||}}~~}zxxyxvuxxw{|wtstpjirvwu{|yzwvsqnmrvwy{{yxwxxyz{{{|}}}}}}|||||{zyyzyyz~|zxtsrqrtvxz|~~~}}||}}~~}{zxusuz}~}}~~~~~~}||zyxxy{|{yx{}~~~~~}}}}}}}}}}|zxxxvtsrrtw|~~}|zywwxyyyzzz{{{{zzwsnjjlrz{ztuurpuy{z{{yvvwz{zwuwy|~}zutxzywtuzztjjmlovxz~ytz~}}{}~~|wttx{~~|zzzyppz|}~~}zyyz{~~|~~{{|{ww~~~}z|zyyxxz~zy{~~{vzyttz{{vtstuutsvwwwxyvrory{zyxvtsqonlkllkjkmruvuqmkigfeefhkouwwxxvssuwwxxxyz{{zywy{|zxy{{yxuplpsttvx~{|~~~~~}}}|||}||~}|}~~}{vyxzyyzvtt~yx~zruvqnz||~tumS>Wn{wvx{|~~~~|{zwvvyzvkotrhjz||}}|{{|~~}|{zz{|}~~}|{~}}~~}|{{|}}|||}|zyyyyyz{|}}~~}|zyxvuvyz|~}}~~~~~~~~~~~~~~}~~}}}}|{|~~zz|{zz{|}~~~}|z|}}xwvwz|}}{zz|}}}}~~}}||{zzyxxxyyyyyz|~~|zz|}}}~~}{{|~~~|{}|{xvwx{}~~~~~}||zyyyy{{||||}~~{xwy~~trz}}}~~~{zxyxvqorvyzvrqsqkimsvtpmqxurrpmrxzyzz{xvvwxyzz{{|}}~}}}}}|{{{zyyzyxy}{xutssuwy{}~~~}~}||zxxz{}{wtrpmjltz~~~~~~~~}}|zxvuuvvxyz}~~~~~~~}|}}|}}|{yvtuy}{yxussrvz|~~{zwvwxxxyyyyzz{|{zvqljhlsutpsuvwz|}~~|zxwxz{zwwz|~~~}zutwvusprxyvorutuyww{yrx}|z~zx|~}xurx}}{zz{zoo{{}~}{ywvw~}zy|~|wuuw~~}x{~~{z}}~~~~}yvtyxtu|~~zwuutsswzxvusqqnjmw{{{xvtsqonmlllkkklorrpmjihgffehlnnptwxwtqquz{xwxyyzzzyxwxwvvyz{{{vmhlsvwxy}~}{xvvx{|}~~}}}}|||}||~~}|~{zzyzxyzyzqnn}tko{wokxzpq|~~||}}jUkx~ywx{}}~~}}{||xttzypks|zpjszy{}}{{{|}~~}~~|zyzz{|}~~~}}~zz||zyyz|~}|~}xwxxxyz{||}~~|zyxxxy{z{~~}}~~~~~~~}}}|}}~~~~}}zyzzyz{}~~}}}~}zxxy{||{{|}~~~}}}~~}}}|||{zyyxxxxxy{|}}|zxyz{{{|~~}}~~|}}}xuuwz}~~~~~~}{}~~}|{|||||||}~~{xwy||ww{}~~~~~}|{yyyxpgiqxyvssrmhcfknmbPQesrrqu{~{{zywuuwyzzz{{{||}}}}}|{{zzzyzzyxy~{xvttuwz|~~~~~~~}}}}{ywsosuxuqomljiinu{~~~~~~~~}|{ywtsstwy{}~~~~~~}}|||{{|{yvrnotz}}|ywtqqrvz{{ywvvwwxxxxxxyzzzzwsoliijknkmpv|~~}{yxxz{ywx{}~~}zvtvtrqnowyvolssrzz{~}zsw{zy}yx|~~xtrx}~|zxy{zooz{|}~}zwnqy{{y{~}xprst~}~}xz|{wvz|~}vqvxywqpvz|yvrnosy||xsmhknhlv{{{ywutronmlllkkkkkmmlkihhhgfejsttrvxxuqifny~yxxxxxyyxwwxwuwz||||yrmouz||||}}zvrprux{~}|||||||||~}~{uuwxyuporqcik|skhnhgovjmv~~|z{|}yprv{|{xyy|~}{}~}zz~vpswuvkpwvwz{zzz{|}}}}~}|zyzz{|}~~~}{{}|zyyz{}||~zxxwxyzz{|}~~|zxwz{||{{}~~~~~~~~~~}}|}~~}|{{yxyz{{|}}~~}}}~}{xxy{{{|}}~~}|||}}}}}}}}|{zzyxwxyyz{||zyxxz{zz|~~~}{yy{~~yvvxz}~~~~}}~~}|z{}}}~~||}}~~zxxyyvux{}}~~}{yxyzyyxxodhrwzyxwqhabnmgkeUFQmvqqv|{z|~}zvttwyz{z{zz{{||}}|{z{{zzxyzyxx}zxuuvwz}~~}}}||||||zxuqoqrtsqonljihilrw|~~~~|{zxuuuvxz{|}~~~~}}|{{{zzzzzxuqnpsz}}}|zvrortuy{zxvvwwxxxwwxxxzyxtqnkiihiggluzz|}{yxxzzywy}~}}zwuvutspquvtpqvsv~~}zuvzxy}{{}~~wtsy}~xxxuz|znpz{|}}~~~|z}yz}~{{}~|{}|v|}{}~yz{{xvvwzzxy|}|vko|}zuqopuvvtokp{zsnilpmpv{{{ywutrpnmlllllkihjjjihhiihggowyywxxwupeZct|{yxwwwwxxxxxyz||}}}|{wtrtz~}}~~}|yvspqv|~}||||{{|||}}~~|xspqvwpkdqq`mq{{xskblx}mimtz|||}~}{{{{}{xuvz{{zzx{}{}|toqnvmoutvxyxyyz{}~}|}}~~}|{zzyzz}~}}}||}}}|{zz{{zz}|zwxyyz{{{{{|}~}|zyxy{||{yyz|~~~~~~~~~~}}}~|zxxwwx{{||||}~~}}||}}|zyyz{{{|}~~}|||||||}~~}|{{zzyxxyyyz{{yyxy{|||}~~~~~}zxxy{~~|yyz|~~~}|||{zyxxyy|~}}~~~|{{zyusx{{||}{wsqtwyxwvphjrvz|{xsj`dqlde[UXcprrpsvuw|}yvstwxz{zzzyyyz{||{zz{}|zxyzyyy~|ywwwxz|}~}}|||{{{{{{zwtrqqrttsqomlkihimsy|~}|{{yvvvvxxyz{|}~~}||{{zyxxxyzywsrosy}~{vqmkpu{ywvvwwxxwvwwwyyxvromjjijjjnuwvx}~}zyyzzxwz~}}|zwvvvvurrrrsw~|rw{xx{}zuxyyxwz}~xttyy{vovtqz~znpz{|}}~|x{|{}~}}}~~}||||}|zxwz||~zz{zyxy|xqzwz}~~}|zrnu}~zusrtxwqqqns}~yttwwyyy{|{{ywutrpnmlllmmkihhiihhhiihhjsyyyyyxwvqi_lxuz{ywwwxxyzzz{}}|{{{{{zxuuy~}~~}yxvttw}~|||||{|||}}}}~zwvplstojjt|s}z{|qjoxwsqswwvvxxyy|}}{{||{zyvwz||zyx{}{|{nkjmoppruwwwxyyz{}}}~}{{|~~~~~~}{zyyz}~~||{{|}~~}|||{zyyyyywwy{||}}|||{zwuuvxyz{|||yxyz}~~~~}~~~~~}|}~zwuuwyz{||{{{|}~}{zz{||{zzz{{{{||}~~~}}|||{{||~}|{{{{{zyxyyyyzzzyz|}~}}~~~~}}}}|zxy{~~|{|~~|{{zzzxwvvwxy|}~~~}{usx{{{{{zuqoquxxxvvrkovz}}|{vh]`dc]RFRifgkrvvwz}~{xvtuvxz{{{zzyxy{||{yz||{zyyzzzy~}{zyyz{{|}}|{{{zzzzzzyxvtssstuusqpnljhgjouy|~~~}|{ywvvuvwwxxyz|}}}|{{zyxwwxyzzxwqnrw}~~{vrmiiktyxvvwxyxwwvvvvvtsqpnmkihghjortuz~~|zyzywvy}|{{zwvvwwvttuuuz}wztons{{vsvwvrt|~~zvuvwupsy{z~znpz{|}~{w{~}{zzzz{|~~}{wxz|}yy{{zyxy{rsty}~}|{zwty|zwtsswzxstwttuz||{wtv{~}||ywutrpnmlllmmljhhhhgghijjkmuyyyzzxxxvsltyvz|zyyyzz{||}}||zzyy{{}|zy{}~~~}yvwwx{}|||||||}~}}}~|{{{leloopokzzqnw{rpu{}|zxyukhkmmorvy{}}||{zxx{|{zyy{}{z||skhikoruuwxyz{||}}}zzz~~~~~~||~~|zxxy|~}|{z{|~~~}}}|{zyxyyxvx{}~~~}}}}{wrpqtwyz{|}}|||}~~~~~~}}~~~}}}}|}~{wvuwyz{||{zz{|}||{zzzzzyyz{||||||}}~~}~~}|{{||||{{{|}|{zyyyyyyzzz{}~~~}|{zzzzzyxy{~~~|{zzzzyxxyz{{|}}}}~~vuz{{z{{zwsqprvxxwxtqsw{~}q^[ce`]LCJOYfv~|}~~}zxvvwwxz{{zzzyxxz||zyz{{yyyyzzyx}~}||{{{{||{zzzzyyyzzzzxvuttuvvvutroligilpuwz}~~}|{ywvuuuuuttvwy{|}||{zyxwwwxz{|{vqotx}}{xvrmggltvwwxxyxwwwvusrpoppqpnmkihhikoquz}~|zyywvx|~|z{zxwvvvuuwzz{z{z{{ljkqz|tnotvqmv~~}zwxxut}|{zopy{|}~~|yy}~|{yyyyyz||~yvy}|xxyyvtqjwyyy{~~}{z|}|zwuuutu{|yrqvxuqvz{{zxy{~||}||zwutrpnmllmmmlkihgggghiklpw||{{zyxxyyxxzzx{|{{z{{{||}}{z{{z{}~||||}}yuuw{~~}{||||}~~}}}~~|{|}n]bfjoqgxyokvzsvz~}xsstqkf`]^eiov|~}}|{zyz{{yyy{~~~~~|xuuy~}{yohehmtxxxy{|}~~~~~xvtwz|}~~~~}{|}}{yyz|~~~~}}}{{z{~~}}}}}|{yxyzz{}~}}~}yspptwyyz{}~~~~~~~~}}~~}|}}}}~}ywuwyz{{{{zz{|}}}|zyyyyxxyz|}}}}}||}}~~}|{||||||}~~~}|{{zyyyyzzz|}~~~}|yvuuvwxwxy|~~~~~~~|{z{{{{{||}~|{|}}|}}}~vu{|{z{||zxurruwwtomquvz~~||{vple`cR<9EZkv~}{yxxyyz{{zz{{zyxy||zyzzxxxyzzzyx|~}{{{{{{z{{{zyyyyz{{{ywtssuwxxwurpnlmmoqrux{}~~~~}|zwvuttsrrrrstwy{{{{zzyyyxxxz{|{xwwy}~~~{{ytoklpruwxxxxwxxwvttrrrsstutspmjgfjlpuy}~~{xywttw{|z{{xvvuvwz}}{zzzuijotyz}|rkkpvtpw}~~||}|{{}vtxpqy|~~~|z{~}|{zzyxwwx||xx}{wxyytrpmqqx|~|yy{~zustvwy~zplostuwy{||{{|~vsw|||zxvtrponmmmmmmkihgggghikow}}|zyyyyz{{{{||}}|}}}||{||{yyy{~~}|z{{wyz~}|||||}~~~~}}~|y{|}s_bjiklozw||y}xzzzxojkopsnaTV\\bhmx~||{yxxzzyxyz{{}|{upmknvy{zyzqgdhnvzzzz{|}ztqtxyzz{}}|{|}~~|zyz}}||~~}|zzzzz||}}}{zyy{}}}~}~~~~~|vpptxyyyz|}~~~}}}~~~~}|}}}~~~{xvvxz{|{{{{{|~~~zxxzxvwyz{|}~~}}||}~~}}||}}}}~~~}}|{zzyyyy{|}}~}{vpoqtvwwxz}~}}~~~~~~|||||||}}~~{|}{zyz{}}uv|}{z{}~}|zvtuwxtllrsuz~}xz{plpdG9Hbtv{~~~~}|{{{{{{{zzz|}|{yz||{zzywwxyzzzyx|~~|{zzzz{{||{zzzz{|}|{yvtsvxzyxvsroonnnnpsvy{}~~}|zxvutsrqppooprsvxy{{zzyyyyyzz||||{{}~}~}|{xrrpoprtuuvwxyzyyxuttutuuwvtpkigghjnsx|}yzxqmpw~{x}|wvuvvy|~{z{zqiknrsrw{sljlqtv|}~}~|yywpqy|~~~~}|||{zywusqu{{xvy|{xx{ystzopru~~|{wx{}}~}wvxz|~|rmkkovyyvy{{{|~}qks|}|zwutrponmmmmmmljihgghhjkqz~}{zyyz{{||{}}~}~}|{{|~|zz{~~|{|~~}|||||~~~~}}}}z|}}ypqrmlloxpu|zyxrkkhnqongbXZagfn{~}}{zxwyy{xwxzz}|zjdcbcktxyxvqhgnsx{}{z{}~|zvuwyzz{||{{||}~}{zz|}{{~~|{zxwx{}~{}||}|}|||}}~|xsoptxyyyz||}~~}|}~~~~~~}~|xvvxy|||||{{|}zxyzxxwyz{{|~~~~}||~~~}||}}}~~~~}|{zzzz{|}~~{tnmquwwxy{}~~}|||}}~~}~~~}|||}}}~~|}}{xwxy{}}xsu{}|{|}~~~~{wvwvromiksx}}vw~}||sX;Viqwz|}}}}||{||||{zzz|}}|{|}|{{{yxxxyyyyxw{~~}{zzzz{|}}}|{{{|}~}}|ywvxz{zxvtrqqponmmoruy{|~~~|{ywutttsqonmmnnqsvy{{{{{zzyyz||}}}}}}|}}||zwusqpopqqruvxzzzzz{{zxwwvtplkihgghkry{|yphis{{x|{wvvwy{}}~ukghllmt{tolknty}~~}}}|{zwqrx|~}|||||zxusqprtttsuwzzyxuqljksz~}{yz{z{{|||zwxz|~~xtuutpkimswwxy{ynku~}|zwutrponmmmmmmljihgghjjmu}~~~}{zzz{{{||}~~~|{|}}|||}~}}}~|zzuqoksnn{xyxwljsomghljebbdhhgm{~~~}}{yz}|zz}~{f`dbbhkruvyyutuwz}}|y{}~|ywwxyyyz{{|||}}{yyz~~|{|{xutx{~|zxxyzz{|~~wronptxz{{|}}}~~}}}~~}~~}}~~~|ywwxz|}}|{{{{}~~~zz|}zyxyz{{|}~}}~}}|||}}~~}}}}|{{{||~~ysruxyzz{|~~}}|{z{|}~~|{{||}~~}{ywwxz{}}|zwsqty{{{|}~~~}wwunknmehpqsx|y{~xgYqvvxz{|}}|||||}}||{zz|}~~~~}}|{zyxxxwvvv}~~}{zyzz|~~~~~}}}}~~~~~~}|||{zyvtrqqpponmnpruxz|~~}|{ywvvvutrpommmoqtxz{{{{{zyyz{{{||}}}}||||{zxvsqonmnortwyzzz{|{zywvuspmmkigffimt{~xpijqy{x{zvuvwz{~}{|}|rgbcgilu{tngglty~~|zyz{~||{wpquz~}||{{{{xwusuwwurqqrvz}{wstmafos~|xwz{{{zyxwqsz|z}}zwps|~xoihjnqqqtwwomw}|zwutrponmmmmmmljihghikntz|}~~}|zyz{{{||}}}~~}}~~~}}}~~}}}|{wuqhijn{wqu}~{ki}{m^cjlifdadjmkr}~{{|}{z|~}}ytfcacfknrv{|}{z{}|}|{yyyxxxyz{}}}||||}}~}}{{|~{xvwz~}xuuwwvuvy}}voklosvx{}~}}|}~~~~}}}~~~~~{{{|~~|zxxy{}}}|{{{{{|}}{{}}|{{{z{{|}~~}~~}|{{|}}~~~~~~~}}}}}}|||||}~}yxyz{||}~}}}}}~~}zyyz{}~~|{zzzz{|{xuqnoswyyz}~~}}}zwxshdjkcfljioxz}}yuy{z{{|||||||{zyyyyyyz{|}~~~~~|{zxwxwvtts~}|zyyyz|~~~}|{yvtrrrqponmllnptwz|~~}|{zyyyxwvutsrrrtwxzz{{{zzyyyzzzzz{}}}||||{zywvspnnopsuvxxzz{{zzywuuttsrokgefghls{xqmmqy{x{yusuyx|~~~}zwuvtmgfilnrzzvqojjoy~|vttw{~}zzzxpqtx}}~~|{zzzzywvwy~}xussuxyzyxwyvpsrmy{yz{zyxvtvrkqz|w{{usy}~ztrrqpnmmlptuqpw~|zwutrqponmmmmmljihhijmqy|{|~~|zzz{|||||||}~~~}~~xuuy~~~}}~zy{xutukdmu}zxy|~qmz~s^akrpe^Z\\ksrty}zqsz~ztkeqzy~xrfa\\^_bfmpw|}|z{|||{{{{ywxxz|z{}|{{z{{~~}{zyz||yuuvvspoptxzvoijmqux{}~}|{|}~~~}}}}~~~}}~}{zzy{{{|~~~}}{yyy|}~}|zzzzz{|}~||~~}}||{|}~~}}~~~|zz{||}}}}}}||||||}}}}}}||||}~~}|||}}}~~}}~~}zxwxz}~}|{{{|}|xsnmoruwx{~~}}|zxxzwnhjiddiijouyz|~}{|~}~}|{||{{||{zwuuvwxxyz{|}~~}||{ywuuwvusqq}{yxxy{}~}{ywuttsrponlkjlnqtx{}~}||||{{z{{zyyyyzzzzz{{zzyxxxxyyyyz|}}|||{|{zxwurpoprtuvwxyyyxxxxwtrswvvtmgffffhmsy~~ztqpry|y{xsrtyx|}}}{yvuutstuwvxz~zwx|pkq{~~|rlsy}}|yzzwqqsw}~}{zyzzyyxz|{zxvttvwssswvurqrux~~}{zyywtrpqtwy{~{wz|zvruoosplkpvxxuwy}}|zwutrqponmllmmljihhjlquyyx~~||||}}}|||||}~}}|}~yrqt~~~}~zy}{zplopnju{uwy|wrmplfbfqof^hlntqsuvtmoz{wsdX[y|tqlrvzp^YYW_ivz|}|{yz~{{{{|~}zxxwx{xwz}{yyz|}}|||{z||{|}}}}|~|zyz{yyvnlmquvrkikpvy{|}}|||}}~}}~}~~~}||}~~~~}|{z{{{|||}~~~}}}}|zzz|}~}|{{{zz||~~}}~~~}}||}~~|{|}~|zz{{{|}}}|||{{{{|}}}}}}|||||}~}}}}}}}}~~~~|{}~~~~|zwwz~}~~}}|{z}}vonnoqsuwz}~}}{wwy{ztnmljhkptwyzz{}}|{{||||{{{z{{||xtsuvwwwwxy{|}|{zyxxwtrsuutqnm}{yxxz{}~}{zyyyyvsqomlklnpswz}~}}}}}}}~~}}}}}}}|||{{zyxwvvvvvvwy{{}}}}||{zywusssstwxwvwxyxxxxwvsoptstspkhfffgilpw|~xutsx~{|xrpryv|}{zzywvuvvy{|{~zy{}vx|}}|}hmy~|{{{wpqsu{~}|zyz{{{z{{zyxwutuwwslnqsqmmrx||xqoquxxwtrtvyxwx}}zywwxpeipsnkt{|{}~~|zwutrponmlllmlljihikotyzxw{}~~}~~}}|{zz{}~}||~}fg~~}~~~|yjbbgqqxwwy{|yvvpkhkqxshnzvprqrrqruqx~vkpohcnzzrdds~zdSQblnyz{|{zyz}}zy{~~{yyyxzxvy|}~|xvwy{|}|{{zz{{zyxwvuvwxy{x{ztpqvxyxsmlqvz|}}}}|}}}}}}}}}~~~}}~~}|||{zzz{{|||}~~~}}}}}|{{|}~}}}}}|{}}~~||~~}}||||}~~}{{|~}|z{{||}}}}}}|||{|}}}}}~}||{{{{|}}||}}}}}}}~~~~~~{zz|~~}}~}{wvz}|zzz{|||{ywsoifefinsuvz}~~}yvxz{yuuxywsswz||{{{}~|{{{|||{{zz{}}|xuuuuttuvxz{|{zxwvvtqpqrrrpki~|zzzz|~~~~}}}}zvtrqppppqswz|~~}}}}~}}~~~~~~~~}||||{zywutttttttvyz|~}}}||{yxvuttuvxywwvwxxxxxwvsmmpppqqolhhghgghmqy{zyuu~{}xqpqxu{|{zzzxvvww{|~}yxz{{}~u~~}|{vorvwz|||}}}}~|zzz{|}|zwwwwvtstx}xmmqusqpqswzwibkrvz|{xxxwwtsy|zxuqgijijknw}~}|{|~}|ywusrpnmllllllkjiijmrw||xwxyz{|~}|{zyy{~~}||}~~|~}|~}{xqa_ggtnm{|xzz|~}zxyxqcXgpajsi`hoqtuuuvpv{veqysspy}bV`nvoci{|zzyzzzyz~|~}zyz||{zy|yx{{|ywwy{}|vwx{|}{zzyyy|~yxvtommqwyyyvxvrv{|}}~|wssw{~~}}}||||||||}}}~~~~}||{||}}}|||}~~~}}}}}}}}}}}}~~}~~~~|{|}||||||}~}{z|~}|{|}}~~~~~~~}}||}~~~~~~}|{zyyxyz{{{|}~~~}}}}}}}}}~~}zwuuz~|}~}xvwz}~ztpswyyyzwofca][`jswwz}}xuwwwvtw}~zyz|}}}}}~}|||||{{zzz{}~~|xtsrqrstuxz{zyxwvvtqnnnppnie~}|||}~~~}}~~}{{|}~|zwuuuwxxwvwxy{}~~}}|||||||}}}}~}}}}}}}|zywtsrrrrrrtvx|~}}}|{zxwvuuuvvvvvuuwwxxxwvtqqusqoppmmkjjkhfghmtxz|}xw~}{|xrqrxvz|{{{yvuxyvxy~yvyz{~}}{|}~}||}{unu|{||yvx{{||}~~|z|zw{{{xsrtvurprvyytvuwxxxwvxxylelsuyz|||{zwuuz~|uil{sgfqyx{~xrsz|zxvusqonmllllllkjijkpty||yvtw{|~~{{{yyz|~|{{||}}}~||xwttrhWa|hqlkuzxyy{}~zxss`HJ`rda`PSblotuxwuosyvmwxpssx`NQ`nvy|y~|zyxyzzz|~}vxzz{{zz{{{z|zwwwyxxwxz}ywwy{{{{|zxvw|}}|{yxvsompu~|xwxmfv{||}}xvy~~}||||{{{||||}}~~~}}||~}~~~|||}~~~~}||}}}}}}}}~~~~~~|{{|{zz{|||}~~}|{{}~}|}}~~}}}}~~~~~~}{zzzyxxxxzz{{|~~}}}||||}~~{ywvtrry}||~zsqv{|{{{uposwxz||ulkf[SZjuyz|}{vsqlmrrtw{|zy{|}}~~||||{zzzzz{}~~~}zvrppqqqsuxyyyxwwwvqlkknpkgc~~~~}|{|}~~}{zyz|}~|zwuuy|}}|{zyyz{|}||{{zz{{{{||}}}}}}}}}|{yvtrqqppooqqt{~}}}}|zyxwuuuvuuutstvxywvwvttsutrnpqmnljlokggfghmsy~~|{{wsrtxvz|{|~vmozzkgyzuwz~{xwxz}|zy|~|snv}{|zwx|{{{|}~~~{y||wzxuurlqvsqnpsvwvwwxz{}~|zumpknwvosz}~}~vwz~~{tqx}lhnqtz|yysr||zvuusqomlkllmmmlkjkmqvyz{xutx||z{z||~}zzz{}~~}|}yxusrtrqcfvhphequvnwz}~xwvugXdlfYbh]U]iknsvvtnsxrnmmpttv~|]RQ_ktwry||zyxxyz{|~~{wtuy{{yxz{{{{ywvvxyyyxz|~{wvwyzz{||zxtuzzzyxxxvrpoqy~~ztptsnuy{|}{ut|{zz{{{zz{{{{|}}}~~~~~~}}}}~~~}||}~~~~~~~}||||||||}}}~~}{zz|{zxy||z|}}||zz|}}}~~}}}~~~~~}}|{yyyyyxxyyzzz{}~|||{{{|}}yvutstwz|}}}}||}~~{pks{xvyzyvsswyyyzxtsqdW_nv{}~}xvumcempruy{zy{z{|~}{{{{zzzyyz{|}~~~|wrprsrqqruvwxyxy{{tljjlmigc}|zyz{}~~|zxwyz{}}{xtssvy|}~}}{zz{{|{zzyxxxxxyz{|}}}}}}}}|{{xtqrrqonmnnqx}}}}}}|{zyxvutssssrqsvz|zxwvutsrsrmoplmgisxrmljifdgox~~|{zwttvvxz{y{|nhpvherzyssvywsrsw{~~~~xuv{}rmwzyz{||||{zz{yvy~~|xs||zuqpppnqqqopstwyyyz{}~}tovwr{wqt{yrz|~|xplmpsrqtwwyxsnkly{zvuusqomlkllmmmlkjlosxz~{~}ysot{~~{zy{}}~~||~~}|{{{zprrsussrsjdqxzymppvz|~|uuvytiTV__bnfY]elpsrqrltvlmjgktvszoUTWiv{{wz}{{yxxyz|}~~}}}}|yvsu|}}yvy{{zzyxwx{||{zzz{yvuwy{||~~|yuruxxwvvussrqtz}|xsgp{|y{|}~}xkp|yxxyz|{{{{{zz{||}}~~~~~~~~~~~~~}}}~~~~}~}}||||{||}}~~}}}}|{||||wx{zx{||{{zz{|}}~~~}}}~~~~~~|{zyxxyz{{{zyyyz{~~}|{{{{{|~~{zyyxxyzyyz{{||||}~{upprrsvz{{zy{zwtvxxyztgfqy}~}xz}o`^emquy|yvwxyz}~~|{{{{zyyyyzz|}~~~}yutvwurppprtwyz{~{smkkihhg~|zxxx|~~|zxvxyz|}}zwtqsuwz}~}|||{{zyxxwvvuuvwy{|}}}}}}}}|}{wutttrpnlkmsz|}}}}||{zxwvtsrrrqqsty{zxxwvusrpnnqroqqtyzsoqpnljhlt{~}|zwutuuwyzz}xmlmpw}~xrppqrrprx}}~}}}}|{{}qpu}~qmw|wswz|}|{{{{zvqu|}zsjr{wtssomqttutwwxwwxz{{uolp{{tss{z{}|rv|~{xoe`bfptwyysjc]Z]qzzwuusqomlkllmmmlkkloswyz}~~xqmqx|~~{}{|||{|z|~}|}~~wmqsvwtkt}lbgvhz|||~{stuwvrd_jthmdZdkpuqonqswoeqkchwxswfQRVlz}}|~zzxwwwy|~~}|{{{zywtv}|z{{zzz{zz{~~|{zyyywwx{~~}{yuqrvwutsrpqrrtxyywtir||}~~~}yt{|yxwxz|||{||{zzz{{|}}}~~}}}}~~~~~}}~~~~}}~~}|||||||||}}~~~}|||||||}}}ywy{z{||{{zyz{|}~~}|||||||}~~~|{|}}{zzyxwwwxz{{{zzz{|}}}|{{{{|}~|ywz|{zyvuuwy{||||}~~}xkgnsx|}~~~~}ywwyz{|{tpu{|{zyz{z~~qbZ]hr{~~|utuvy{~~|zzzzyyyyyzz{||}}|{yy{{xsommptwz{z|~yvtqmlml~~}~~~}zwvwz}~}zxvxyz{|~~}yspqtvz}~~}}|{zyxwvuutsstvy{|}}}}}}||}|zyyxwuspmjimrx|}}|||{zywvusrqqppppsuuwwxvuutplmprrsxwnvsostqrsru{~~}{xutssstvz|t}xqmlotvru{}|{{|||{z{qow~~qlvzqjqx{{zzz}|}|yy{ztqjkx{vwvvuqpsuvyxyxvqtx|}zpfbdmrjosy|~{vt}|{||yunhdhmqrrrsi]UPQZrzzwuusronlkkklllkkjlnrtvz~~~~||{|}~~xuuux{~}~}{{{{}~~}~~{uuvzyuin|phb~xt~}}}vvvxwtphoxnmc[fnttspqux{vwwrim{znpk]SNevzx{|wyxvvvy|~}{zzzzzyxvx~~}~|yyz}~}{zzzzzyz~~{yxuqqvxtrrsrpprrtwxwvry~}}}}~~~}{z{xkwxy{|~}|{||{zzz{{||}}}}~~}|{{{|~~~~}}}~~~}}}~~}}|}~~|zzz{{||}}}{{{{||||}~~{xy{z{||{|{{z|}~~~}{zzz{{{|}~~~|zzz{{{{{ywutuwz|}|}|}||~~~|{{{{{{zzz}}zxsqruwxz|}}}|||~znjqx|~~~|{zz{{{|~~{{zwusqtwz|xtk^_lt|vtvwz}~{yyyyyyyzyyyzz{{||{{|}}{wpkmsx{||{yz{{{zyvtsq~}||{{|}~}zwuvz{uuxz{z{}~zrnptx{~~~}||zyxwvutsrrrtwy{}~}}}}||{{{{{zyxwtrnkjkrw{||||{zyxwvvutrqqpppsx|{xvuturomgisuvvxxwuwupsvty~}{xtsqqpptw{}}}~~~~xrqtwzysuw{ywz}|||{zzxy{~|qmv|odlz}{uuz}~~~ttrnrrtyrqpopqrstvwwx|yvtx|~woljjikpts|zzvvnnrxz|~}ywofemuyzxsmkgaYJKgv{{xvutrqomlkjkklkkkkloqsv}{zxxwy{}}pmvsv{~}z|}~}zyy{{vmjzqcct~zyz}}~~|{yvmlqwthhlckqohqxtx|z|}|y|zmmmn`S_sxvy}xxz{xwwy|}|zyyyzyyyy{~|xy{~}{yz{|}||}zxwurrwzvtuyxrpqrsvwxxv{~|}}}}}|{zustwtvy{{||{{{|{zzz{{{|}|||||{zzz{|}~~~}}}}~}}}|~}}}|}zwvyzzz||||{{zzzzzz{}}{zzyyz{|~~}|}~~~}|zxxyzz{|}~~}|{zzyzz{{zwustx{}~~}~}}}~~}|{{zyxyzz{}yrotxyxy{}~~|zz{{yy{}~~}{zz{|{yyy{}|wqoqqsvxtostiktv~|}zvwx{}~{yzzyxy{{{zyyyzz{{{|||||ysmpx|~~}}zuv{{zzyxvs~|{yxxz{|~}zvsrv|{utvyyyz{}~zspsx|~~~}|{zyxwvtsrqrrux{}}}}||||{{||}|{zzxwurpnnrvxz{{{zzywvvuusrqqpopuxyywussrppilvywwyyzz{xptxuy~|zwspopppqsvwz|~~}}}}~~yuw{~|uttyrpz|||}||{{|}~~{rnv~}tqv~|xxz~~vtrnrx}|rnllnnrvxyxtqtxxwyytptxwvsplnstpsmlmwwwrrxz|{{{o_[fptsxuoijigf]Woy{{xvutsrpnlkkkkklllkllmqx}{zzzzy|}wkjrsw{~~}|~~|||}zolzqc`o|{xxz{||~~|wpotyynll\\ajjmssmx}}||~}~|qpqvn_cuyww|yz}~ywwxz{{yxxyzzzzzz{{~}ywz|}~~zxy{~}}zxwvsty|xwx}|vssstvxxxx|~|}|||{yyxsprtruz|xxz{{||{{{{{{{{|||{{{zyyz{}}}~~}}}}}}||||}}}||{}~|zz|{zz||{{zyyyxxwx|~~}{zyyz{~~}~~~}|zyyz{||}}}~~~~}{yyyz{zywvwz|}~~~~~~}|{zzyyz||{{~~||wrv{}zwx{}~|z{~||{zy{}~|zy{}~|xspt||tljnqqrroihouzuruxz~}yyz}~~{zzyxxz||{zyyyzz{{||{yyyxvtvz}}{xssw||{xttt~|xvuuwxz|~~|xtonouz~{utvyxxyy|~{vtv|~}}|{zzxwusrqrrtwz|}}|||{{{{|}~}|{{{zzzywttwyzz{{{zyxwvvutsrqpoooquxzwrppqqoqwxxwxz{{|xosxsuz}}}}|yvsonmprsqpqrvx|~~}|||}~~zvw|~zwvyd^w}|}~~~}||}~|ytry~|yy{yxxxz}zxupuzxttpjjlnsxzzxrprxzxupmfswyyxspruwun\\`ew|~xwzzzzyy`Q_w~zxurkflnmpqku{|{xvutsrqomkkkkklmmlmnorx}}~~}yuvwwz~~~~~~~|uryqc^kyzxxzzzzzz|zwww{zrkbirrvplkx~~{{|||~ursvvko{{|z{}{ustvxyzyyz{|{zz{xxy~|xwz{{|||~~{xy|~}zxwvvwz{wvwzzxwvuuwxwwv{~|}||{zyxwwtpopv{|xwxz|||{{zzz{{{{{{{{zzzz{|}}}}~~}}}}||{{{{}}}|{yz{|{|}|z{}}|{{zyyxvuvz|~}||{zz{|~~}}~~}|{zz{}}}}}}}}}~~{z{{{{zyxy||}}}}~~}}|{{zzz{{}}zxyxtx}{{}~{wvy{~|zz~|wwxvtvz}~{yy|{unmvzsmjlnmnmf\\]jw|umkt}~~{yz||}}~}{zzxwx{}}{zyzz{{{||{yusstx{{z{}~{tpqsv{}|xsux~{wtsstuxz}~~~{wrmkkpuyzxxxyyxxxz}~~|{wtsuy~~~~}|{zxvtsrqrstwy{|||{{zy{||}~}|{z{{|||zxxyzzzzz{zyxwvvuutsqqponmpsvtonppooptwxvuvutwvnrwqoqstvxvsrqnmknqpnlnqtwz}~}|{|}~~yuw{~~~i[qz{}~~}|}}|{xvv{~}{zxwwyyyz}~~{xtpuzvnnhfbhqwyyxwtv{z|zwxscnruvvutrsuxnSYcuyywz|{|||uVQn}{|wtrlqstvvyy}|yvtttsrqomllllmnomnqstu~|y|~}~~~{yxzrc^gszyyyzxxvt}~~~yvy{}unry|tkmnw~{zyyz|xstutrx|zwy|{vqqqstwyzz|}}|zyywy{~yxy{{yzyy{~~~|z{~}}~}zxvvxy{yvuuvwxxxwxxwuux||{}}}|zyzyzvolpw||zxwy|}|{zzz{||{zzz{{zzz{|}}}}}~~~}|||{{zzxyy{|{{{{{zyyz{{{{}}}}|{zyxvttvvxy~~}|}}}~~}}}~}|{{|}~~~~~}}{}}zz{||||{zyz{|||||zz{{{{z{|}{yxvsx}ywx|}{yyy||{z}~||}ywxz|}{zz}~{uosywqnmmlnrn^_r}zrljt|{yxwyyxy|~|{zywuw{|{{zzzz{{|||{ytqpsy~}zy{}yoimquy}}yuvz~{wsqqsuwy|~~~~}}zwrnjjnrwyyzzzzzyyz||zwuronptx|~~~~~~~}{ywusrqqrsuwy{{{{zzyxy{|}}{yxxy{{||{yvuwxyxyzyyxwwuutsrrqponlnqsqnnppoopsvvtssoipqmqvpkjklnonmpqolklooljlnrtx|~~|{{{|xtuy}}{xkany{}~~}|||||zxtw~{zywvxzz{z|~}~{unnuzutvia]itxyyxvuwy{|{xwo]couwvvtqpqsp_Qjuvvwz~~xaXr{xvt{zvuuwwy{||{zwuuuutsqonnmmmoonotuwx|~|xww{}~~~~|{z{qb\\cpxxxxwwwshuvvwxsxyz}}yyzzkgopu}{y{zwz|xrurqrwzzwvuy|ysoqrrrt{}|}}~}zyxxz}~yxyzzyyxwy{|{{z{~~|}zuuwy{{wtuuuvxyxwxwwuuy{{z}~}|{zz{{unlpuyzyxvx}~{{zzz{|}|zyz{{zz{|}~~~||}}}|{{{{zyyxxxz{{zz{|zxyy{|||}}~~}}|{yxwussqw}}~~~~~}}}}~}|||}~~}}}{}}{yy{}}}||zzz{{|{{zyxy{{{|}|zxvz~xrorx}}{z{~~|{{~~{yy{|zz~|}~{z|{uomkkptyus|yqllu{yxvvuvvvx|}{zzxvutwxyyzzzzz{{{||zvssw{~|yy{{xrkikpx}}zwwy}xtqqsuwy|~~~~~~}|ytpljlotxz{|{{{{{{{zxtqomlllouz}~~~~~~}zxutsqppqsuwyzzzzzywvvy||{xvuuwz|}}{ywvwwxwwxxxxwwvutsrrrrrpnmmnmmnppusqrstqqmc`honosnjjklllmoonnmkklnmlkjknty|~~}|zz|~wrtx{{}}|rffhnv{||||||{{{{xwxzwvwxwwz|}~}|}{zwpghrwwtrgY`txxxxxvronqwzwtsibfgkoqsrnntwn_qvvtuy~~vidz{ojcgsxuqrtwz{|{zxvvwwvusqpoonnppnorvxz|{y|}}xrqtz~~~~~}||zp`Y_kuvwwvvupfqoknuwwwx|~~{{}}}rgipqrx|ytlmruwxrtoruvusqqty{{sopsqqry{{|}}{zzz}|yyzzzzzxwwxxwyyy{|||}yvwx{}zussttvxzzyywutuyyyz}~}}{z{|nfmnpsvvvtx|z{}}}~~|zyz{{zz{|}~~{{|||{{{zzzyyyyzzzzz{||xvxy{|{|||}}}}|{{|{ytory~~~~~~~~~}}}}}}}||}~~~}}}}z}~yxwy{}}}||{zz{{zxxxwuwyz{}~~|zz|{upptvz~~~|}}|}{y{zxwx|~~{}~}{tmjhhkr{~}|tqruvurqqrsssv|}{zzxwtrruwyyzzzzzz{||{xwwy|}{zz|{xtpnpty||ywuw}zurrsuwy{}}}}}}~|zvqnkknsx{|}||||||{zwtqomkihintz~~~~}}}|zxvtrqooqrtvxzzzyyxvtrv||yurqsuyz||{zxwwwwvuuvvxxwvuutsssttspnoonnooprqrtusokhcbjmonpnlmoponmmjgknlkmoppmihjouy|~~|{{{~wqsvzz||ypcltvxz{{{zzz{{{{zz{unqvywwz|||||zyvrlfhrwsxzwoevvwxxztg_[bpzxvxr_ccgjkqvsov}{qvuuuvvxz|zvrrt~~r][iwyzuqtwz{{{{yvwxxxwusrqppopolkotx{~ywz{zwrqw~}~~|||~}~}||yn^V\\lruvxxxtolupegvxqsvz}}{{}{}ugfliffkpoldfkprupvqruurnmnv|{ypqvvrpqvyyz|}}||{|}||{z||yz{|{zyyywuuttvxy{|zvy{~ysprtuwyzzzywussuuxz{{{|{z{}mdlklnruutx}}yyz}~}}}{yyyz{{z{{|}~}{{{{{{{zzzzzz{{{zyxy{}{wvxz{{{{{||}}|{{|||zwty}||~~~~~~~}}}}}}}||}}~~~~}}}}}{}zvwxz{|}}}|{|~}|xuvwvtvyz|}}~}||}|}~zwxytuyxxz}}}~}||||ytpvz~~}~~{wrjeehoy~}}}|xvvwuqmkmmoqrv{~|{{yxtqruxyyzyyyyyz{|zxxxy{{zzz}|zwuuvy{|zxutw~zvrrsuwyz{|{{{|~}|ytqmlosx{|}|||}}}|zwtqomkhhhkqx}~}}}}}|zywutqpoprtvxyyyyxwusqtz{ytooqtwxxz{{yxwvvuttuuwxwvuutttuvwvspooppponnnpuutohhloooonnnmnoqrqponmnnlijmpqnjhilpv{~~|{{|~~~xpqwz{}}{vrx{yyyzzzyyyzzz{{||vntxyxvxz{{zzywtpkjkqqfw{yxqpwwwxzoZOOYlxyxuwijmnmmtytpuz}vxuuwwxvvvsrqy{}{{fn{zw{{wvxyzxvyxwwzxwwwvutrqppolmotz}zy{{yvss{~}}|}z{~}|xl[QZpsutxzyuoovqfhwwpqtz}}zwwvzrejoib\\\\afgffgilpottssvqjimw{ytlt|xqppuxxy{|}~}|||{yxy~|z{{||{z{zxvutssuwz|}zx{|ztrtvvxy{{yyxwvrnotwvvvyzz}~wlhhjmqsvvuxwuwy}~}|{zxxxy{{zzzzz|}{{{{|{{{{{z{{|||{xvwz|zxxy{{zzzzzz{{{{{{zyyxz{|||||||}}}}}}}}}||}}}}}}}}}}}}{|yvz{{{||||||}~~zuvxwuwyz|}}}|{zyz{}~}||~xyzoksy{{}}||~}}}zsxy{|}~~~~}zpfgnry}|{z{||{yvphfiklnqty~}{zyurtx{{zxwwwxyz{|{yxwwxxyyy{|zxuuvxzzxuttw~~zuqqsvxz{{{zz{|~~}|xuqpruy{||||}}~~|{wtqomkiggjpw|~}}}}}}|{yxwuspoppsuwxyyyxwusqsxzxsnmortutuwxzzyxvussttvwvuutttuuvwvtqpqrrrqqqqsuvupmklmmnonnnmnoqrrqpnnonkgfjomkjijjlsy|}|{{|~~~xop|z}}|zxxxxxwxyyyxyyyyyz{~{xxyxxvvwxxxxxxvtqhb__VLl{vwvuwvvwyjNIM[nyyxxwtxvsxwxvrquqstvtrenwxtporru|~}|~{twzsqswyxyxuqnxvrvyvstvvwwvtsrrrqsv|~{|}|zwvw}|{yz}vx~~~}ymTMZrwwuz{yuommpglxvpqsz}ztomszyqsrxoZRVagecfcfjnptrsxqdfmvxwrosqpmptuwyzzyz||{{{wv{|}|zz|~~~zzyxxz{xutvz}~~|yyz}~}|{zzzz{zzyz{|xoihlonmnpuz|~~|tjbkonpvvqruvy{}}|{zyxwxyz{{{yzy{||}|||{{{{{zz{||{}yuvyzzz{{||zyxxxxyyyyyywvwyzzzzyxxxz|}}}|}}}}}}}}}}}|||}}}}ywz~~|zz{|~~}~~|yzzxwyz{}}}}{zzzz{|{{{}}{ugdntvvy{yuuxz{{z|~}|~~{ywwz{zxyz{{xnfpzvy{{zxxz}~{wphgjllnqrw~~|zxusuz}}zvutuwwyz|{yxwvvwxvtvwvtqnnqsttssss~~}{vrqtwy{{{{zz{|~~|{xwvy{|}|||}~~}{zvtrpnkiggjpw|~}}}}}||{zywvsqppqrtvxyxxxvutrswzxsnlmprsrruvyzyxwutsstuvuttsssttttrqpqstttuuutuvwvtpmkklloponlmprsssrpooomllmkffjkkjjqw{}|{{|~~~yontzyuuxxwwvvwxxxxyyzyyyyyuty{|{{z{wutvvvvunaYXVK@NnzxwwwwwwyjNGO_q{zxvxxxxx}u{|rnldiprqnkjdojjmsrv|}}{{|{zvnjkov{{xrkrypjtypknrux{zwvuuwwy{~~|{|zywy{su{{|~zq\\JTtuvsvvuuqihnkozvqpqwzvkdhpy|wpnupZKJV^__dhnrsotqsurgilqtsqoplkkotvx{||zwxxyzzwxy{zzz|||{ywxyz{|~zwuvz|~}{zyxwxz||}||{{{||zyyyxxpfddgiiiilqx{|||xpbgmmksvsruwz{~}|zxwwvwyz|}}zyxy||}||{{{{{zzzzzzyzyxxyzzzz{{{zyxxxxxxxxwvttvyzzzzzyyy{{|}||}~~~~~~~~}}}||}~~~{z{~|yxyy{}~|||}zxvvxy{|}~~}|zzzzyxwwz~{mgmqonoplghnsvy{||}||}~{xwvqruuuwzzvrwxwvyzyvvz~~|wrnpponprrv~~|ywutw{~~ytrrsuuvxzzyywvvwuokmmmklnmlklmpsso~~~}{xvuvxz|||{zz{}~~}|{|}}~}||}}}|zyusqpnljhhkqx|~}|||||{zzyxvsqpqrstvwwwwvvusrsvywrmkloqqporsvyzyxvutstuutssrrrrsrrppprtuuvvvvvvwwwvspnmooqrqnlloqqrsrqomllnrqjdeikkiiovz|{{{{}~~yonswwmmrvvvuuuvwwwxyzzzyyxwst{~~}}}{xuttssuukYSNJC>BavxxwwwxxzpUKN\\lwxxuxyywuyw}zongW_mrtuuladedhnoqswz}}~zrnmmnt||zvsvvmkswpnnpv|~|zxxxz{}zzx{zssvwy}{vpXYtsspqrsvsiemnnwuqootvoe_ajsvsjjqn]FBPZ^cjntxvpuqssrlommnoopokijnswz|~~}ywvxyzz{xvtw{~}zvrtvxz{{zvuuvz{}{ywvuuuvxy|||||{{zywvxxxodbbdeefhlrwz{{{ztkehnmosttuwz{}|{{ywvuvy{||}zxxy{|||{zzzzzzzyyxwwvy{{{zzzzyyyxxyyxwwxwwvvuuwzzzz{|||{{{{|{|}~~}}}}{{|}~|}}|tpqty{~}y{}|xsrtx{|||}~~}{yxxvutuy}}}}vppolklja[_iptxzzz{{zu}~}zyshimpuvxz{yyvuruy{wvz~~{wssxvusttsx~|yvutvz}}xqoprsstuwxxyxxwtngglmmjlvyuojlptsl~~~}|{yyyz{|}}|{z{}~~}}}~~}}||}}|{xwtrponmljimtz~~}}}|{{zzyxxvtrrrsuvuuvuuuttsstvxwrmklnoponnoswyzxwvuttuttsrqppqssrppqruvvvvvvvvvvutsrrrrrssspmllmnqsrqnjhimqqlihijjhinuz{{yy{|}}xomsqrqpqsttttuuwtwxyzzxxy{{z{~}}|zytqmnpsum[MFECNcs{xxxxxxyyyfTO]frxxuyyzuloquusskYblswyypq^b``dcbcjv~{qmopqsx|}zvqptvvvvpkmrz~{yz|}~~{~|vrpvwz}}z~olwssrpooutojnnnsrqoortnid^cimjeiloeLJZ_cltsvyuqussrrosnmkmouumkjnswz|}~~}{{z{|}ysruz~|upruwz{yussuwz{|zwutsssuvwzz{{{zyxvttvy{tjdabccdgpvz{||{zxxlhpqsxyxvxyz{y{{zxvutx{|yvuutwzz|||zyzyyyz|yxxwvz}}|{zyywwvvwxzxvvxwwwwx{{|{|}}}}||{{{zzz|~}}}~}||}|{{|}~~~~{sllpwy|}}{{}~}{wsruy{{zz|~~|ywwvuuuy}|zzyvslfegdXS]muvwwwvxyysz~~udacluvxxxvwuqnsy{xw{~~{xrptz|zyxx{~|ywutux{|yrprssrrstvxyyyyulfmuvtidq|zrjknpoj}}}||||{zz{|}~}||}~~}}}}~}}|||}}|zwusqponnnmlov}~~}}|{zyxxxwvtssstuvuuttsssssstuwvsolkmnonnmnqtxyxwvuuutssqqonoqstsqpprtvvvuvvvvutsrqrqrrrssrpmlklnpqppnkklmppmkiiiihhkry|{yxy{}~|wplqy{wsrssttsuvwwwxxyxxwy||||}}|||{zysjdhlptukXW`gpwyxwxxxxxyyxvkemdswxuyzysfclqtknljikrwyz}t[ZVX^ZVR`r}rjimorv{}}{qjnpvzwvngir}}yzz||z~{xrpwx{}}{zvuyutsqopsqpmnnnpqpoostqklc^adbaijnj`ftgjsxxwvtttssqqksrmkkpvvollpu{|}~}{yz|~zrquxz{{yrqsuw{zustwyzzzyuttrssuvwxyyzyzywuttvvwupjdcddfkuy{|}|{zy}xtsuxzxvuxxxyz|{zxwutw|{vrqstuxy{|}{zyyzz{|{{{zz{|||zyyxxwvvvxyxwwwxxxxy{{||}~~}{{zzzzzz|}}|||~}||||{{{}}~~}wnmmwyz|{||}{xwxz{{{{xvvy|}}|ywwvvuvx{}~|xxzxtkcaddZVfz|yywvvwyyx{~ub][cswxvtrronnsxzxwz}~|wq`fw}|{zz|~|ywuttvy{{wuvvusrrsuxz{zzyupw~{wg_rzojhhjkkj}}}||||||||}~~~~~~|zyyzz||}|||}}|zwusqpoooonnqx}~}}}}{zyxwwvuutuuvwwvtrrrrrrrrstvutqnkllnmmllnquxyxwuuuttsssqnnprtuspoqsuvvuvwvvusrpoonnmmnopoonnnnnmmnnmnooonmkjihiihhnv}{xwwy{~{uomt|xtttuvuvxz{zyxxwxyzz{|{{zzzzyzysi_ahktyusqxyxxxxwwxxxxxwxywurhqtuvzzyuoppknoopnljprtzzveWPV`[VRYiz{xrrrstx}~{l]drttuxrllt|unrv~x{~|wzw{t}~~}|zzzxwvyxtlhqqqnllonnqvurlrjded_[kiiihjlknuywsrttuuqppitwqklvusqqrvz~|ywwxz~|ustuy{~~xsssvzyuuvz{{zwuuvwyxxvwwvuvvwxxxwxxwvuttvodckptzz{|||zyyzxttwzzxvuxtsy~zyyxutw|{tmnsxurw{|{z{}|{|||||{|||{zyzz|{xvuvvwxyxxxxxxyyz|~}|{zy{zyyz|{{yyz}|||{{{|}}~~}zqnjqxz{|~{{xrsz~}{xvvxz||{zyxxxwwwwyzzxwywsi^X]kjeq~{zxwwxz|~{r`Z_pvxwtoligiotvvwwxz||wo[^m{~~}~|ywvvuux{|{zzywurrstwyzzzzxw{}zuhcwsdfdehhhj|||||||||||}~~~}{ywvvvwyz{|||}}|zxvtrpooopopsy}~}~}}|zyxwvvvuuuvwwxwutrrqqqqqrrtuuspmkklmlkkmorwyxvutttuuurnmnortvtqoqqstuuvwvutrpoonmmmmmnooppqpnlkknnnqsqnkjkkihijhgktxuppqsx~{unmt|xwvwxy||}}zyxxxz{zzzyyxwwxxyzzxvma\\htyzzyzyvwxxwwwwwwwwwwwtspplovzyywwyrfjorsrkdkihxyyu[PYigaZSas|}}|xvvy~~{hW]nootywvv{|slqzxxxyzxuwtv}z~~}|{xtrxzxrqrrqomlmlfituokxuqrnf\\gkedghimpsusruxxvtrmtntusor|xppqv{~~}{xxyyz{}xvwyz{||vrrrtvutwx{|{ywuvxxyywuvvtsstuwxxz}~{yvtvwunlqxyzyzz{zyyyxwstvwxxxswwrz}xxyyvz}|{vonovxwz{{yxwxy{~}||}}||||{zzz{{|||{yxvx{|zyyxwvstxz}~}{zyz{{yyyvssuwz~|{{{{{{|}}}}}{xtrjox{|}yxvpt|~}}|zxwxz{{{zyyyyyxussuvvuwvskdchsstvz{zzyxxy{~~~|xsf_m{zywtrqomqwvssuwwwyytk\\\\fy}}~|zxwxxxy{}}|{zwusrrstuvwwxxyzyxulennggfghhil||{{{{{{||}}~~~}{xutqqrtvxz{||}}|{ywusqpooppqty}~}}}}|{zywwwwvuuuvwxyyxvtsqpppqqrrtsqmkjkllllllouyxvtsrsuutplnpqstvtrqpoqrtuvuutsqpponnnnnnnopqssqnkjknooqrpliilljiijihinojffims|{vpns{~}zwvwxz||{yxxwy~}zxyxvtstwxyyyvqspfpxyyyyyyxyvuwxxyxxxwvuqoqtjagowyyxwvxtxwvwvmgnmkx|}}dU\\nuobP_pz}}zxy{~~}xhY\\glqvy{|~~vqy}{zz{zxxx{~}{smvyxwvusqqppol^`kpomxyyzvmaajeacksoqsstwzyxvsrlwoppruy~|snpvy|{z|}~~}{{|{z{{xx{}zyxvssqpqsrsvy{{zwvtuwtpoqsttsqpruxxxz|}{ywusqpuvvwxxyyyyyyyz|zwwwtstxw{{zvwzxxxyx}{zwssxuuy~ypmqqsuu}}}}}||{{zzz{{{{{}~|{xy{|zyyxwvstxy{|}{zzz{|{zzuoklruy}|ywy{{{{{|}|{zywxwppswz{|ywvsw{{{{{||{{{{{{zzzzzzzyxwvvwutuvwsrwxxvuuuxyyyxxy|~}}~~||zupkw{{ywvy|yuuvroruwvvvsnkddiy{{}}{yyyzz{|}||zxvtsrqooooqstvwwwwxrgfmnjiiiijo|{zzzzz{{}}~~~|zwrpmmmoruy{|}}}|{ywtrpoooopqty|~}}}}}{zyyyyxwvutssuy{zxvsqppppppqssqnkjjllllkjmquvvusrrsturnqsttuuutrpoopstuttsrrqppppnljkmoqrrspnnmlnonmlkjjklkjijkjhhiiechmloz{vqpsxzyvttvy{|~~|zxxwwy|{wtyxusrtwyyyxqimrswyyxxxxyyzsgrwxyyxwvusnljgafadsyx{wniz}xwyyvibfqyzxttdZpvvmXety}|{zz|~}xwqdckosx{~{}}~}{yz||wowywuutpnqrsrnjilprruwxyum^Ziddkmrorstuwyxvtrrsxpknrw{~zuposwzwuuw|~~}|{zzz{zxxz{{ywttspnnpppowzywvvusrponoqrrqonquyywxzzyxwutqlkqtwzzz{{zzzzz{{{|~qhoxy|{qpxzyxzzyyxyyyyzyvxzuolkpqsv{|{{{{{zzyyyz{|{yw|~~{xxzzyyxwwwwwxy{||{|||{{{{yztkiqx~}yxy{{{{{{|{{yxwyzvqotyxyyvvvxzzyyyz{}~}{{}~z{{{ywuvwvutuuxyywxxwuqpvzyyxwx{|{z|}|{{xusw{{zxwvonnlpuvvwvvrnnnkry{{|~}{zyz{|}}|{zyxvtsrpljhhkortutuwzxsponmkihgkp|{yyyyz{{}~~~}|zwrnkjjloswz|}}}|{zwtqoooooopsx{~~}}}}}}||{{{zxwvtsqsy|}{xuspooooooprqnkjjklmlkijlptvvtqpqsvwtuvvuuuvtsrpoooqstssrqqqqqqpooqrrrrqpmnsqmnonkhhjlnmkjjjjjhgjigaekimy|xtsuyyusrsvyz{}}|{yxwxz~~|y{{ywwxyyyywqjfhqtwyxxxxxxwpbfswxxwvtrpmi^gmrnjntvzzqfv}yyz}|unouzyus|wkvxzvkqxz~~{{||}}zrjijortvz~~~|z}|y{ytuxyzwwvvvsqpptuxxxxxtl]Vhmkqqqosuvwxyxvtsqotrjoprwzwpklptvvwxz|~}|ywxyzzxwvvwwwuuqfdkopolkpvwxwwx{{wsrqrqonnquyyvvxyyxwutvnjptwz{|||{zz{{~~}njux|~~|sswrsvxvuuvyxvvvwyzzxusswxwxyzyxxxyyxxxxxwwvrmu{|yyxwxyywvxyyyyzz{{|||{zxxxyzvonsz}}{zz|||||{|{zzyxx||vqqvzzxuuuwyyywwy{}~|zyz{{y{{zywvuuuuvvx{}}{z{xvqquxxyxxyzyxyz||||zyxz{|{zz~{okmptqlr}|{vsrstpv{{zz|}~}{zyz{|}~|{zywvutrokhedgotrrpqv}|yvttrlgdcgn|{zzzzz{|~~~~~~~}}{wrnihhilrw|~~}}|{zwtqonnnnnprvz}~}}}}}}}}}|||{zyxutqrvz}yvurpooooonoqpnljjkkllkiiilquvwtpoptvwwwwvuuvuttrpomoqrssrqppqqqppqrtsqponlnvtnnnnljijnpnlkkjjihgiihehgfn{|ytqtwwtrtwxyzz|}}|yvwy{|}~~|yxxyzzyyxwxyqbalvyxxxxxwwvjeqwxwuuuqoojfquwxrlpvuromr|z{{}~|zwx{yvvyyxysppsx}~}}}}}|yxvrrstvz~~~~}}~|yqsw~~|ywwxvuuwwwvuuvri\\Reyornmotwxxxxwvuusstpgqnilxyqlklptxyx{|~{yvuvwyyxvtrvwywwuifmrusohjqvxz||{soqssrpopsvxxuuwxxxwuu{tqwxxyz{{zzyz{|}}}|ytt|{|zz{z{vjkrwvuuwyvqonsz}xwzzz}}yyyxwvuuvxxxwvsokiicnxxwxzuvyywwyzzzzzz{||}|zyvuuvvxuuw{|||||}}}||||{{zzyx|~zvqu{xwutuwyyywvwy|}|zwvtsvy{{zxxwtrtwyz{}~~~~{xuuuvwxyy{zvtvy||}}|{{|}}||}}vmqvwzrmv~}|wxyzysvxzyyz|}~}{zyy{|}}|{zyxvuusqmifcfqvsqmkr|}zyxyvlc^]_e||{{{{|}||{{{{|}~~~}}{xrnigfhkqx}~~~~~}{yuronnmnnoqsvz}}}}}}~~~}}}|||{{xwutuxzxvuspooooonnponljjjjkkjjiijmqrvvsplosuwwwvuuuttsrpnmnppqpppoopqqpommpollmppqutommnnljjmonmlljhhhhhimnphgq|}ytnpsssvz{zzz|||}{wtwz{zz}}zwusuzyxwwwxxwngpvxxxxxxvvytptwxsrturosqiknywrmptsrvssyz|~~{yvuy|{{uuuthikov|~~~||}xopsuw~~~~~~~~~~}~xprw{~|zxwxyxxxwvurstwri[Qb|pommotzzyxwwvvvwotxlkhachpromjlrvvpu{{vvttvyzyyxvsvxzxy|xojpsrqnmorvz~|qostttttuvutttuwwwwwvtrlnwyzyyzzyzyz{{xxxwxz{{|{wvz||xkhpuwxwxxtnihnwywwyz{||zyxvusrstvwxvusnc]^bluvuy{tuyzwwzzz{|{{{||}|xtrttvvxyz{}}{{|~}}}}||}}}|||{z}~}ysrrsrrsuwy{|{wuvxzywtrrruyzzyxwvspqtwy{~~~~}zwtuvspsxxtsvy|~~~}||~~~~~~zvy~zvz|}}{|~~{ttwzwxy|~~}{zyyz{|||{zzzxvvvsqmkjkrutrkditzzyxvoc[WYVU}}}}~~~}|{yxwy{|}}}}}|wrnjhhimtz}~~~~~}|yvsqponmmnoqux{}}}}}~}}}}}}}}}}{zzyyxyxwusqpooonnnoonmkjiiiijjihijmpttsqpqrttuuvvvusrrqnmlmnnopponooooomlknmkimrtrpqpmmnpplklllmmljgfghhipunhhs|}ztonpqsuz{zz{|{|}zvuvxzyz{|yxursyywvvwxxxusswxwwwwxxxxwvvxupjstrpuwomptvrnoqrqopsxz~}zxuty|}|{xsjkmhhlqw{~~|{zyww|~~~~~}~~~~zsrvz|zyxxyyyyywusrtuxwh\\RXlklnomsz|zwwwwwxxsrzmNUXfhpqrqkkqtsnqz~wstttvxyyxxwtvyzyz~ogimppoqrqq{{tzyurututvvvvtqruxxwzxwusrkoxzzxwyyyzzz{{zzyyy{{||{ywwyzwtnopuwrsvtlffimwuvxyz||zyvtsrqstuvwvusqbWZdruwxy}xtxyvtvxz|}|{zz|{xussuvwwxz{|}}}}}}}||||}}~}}||||}}}|vropqqswxzz}zutstuwuprruwzzzyxwwsonnpvx|}|}|vstvqlinqtswz}~~~~}}~~|y}~||{{}~|}~{vvvyvwy||zyyxyyz{|{zzywvwvurpnnorssrjceqyxxwulZPVVMF~~}yvttux{|}}}|zvpnkiijov|~~}{xvtrqpnmmnpswz|}}}}~}}}}}}}}~~}|{{{zzyxvtrponnnmnnonmlkihhhjjihghjmqsttttrsstuvvutrponlllklmnpqqqppoopmljmkjhlrsnjnrnlnrsomjikllkigfghiksupkls{|{uomnopqwxxz{|||}yuuvxz{{zyz{xnnwywvvwxxxxxwxxwwwwxxxxy{xnehjstsrvxtsuuvspmlnqppuwz}~}|xvwy}|vqg^]`kpuy}}{{|~~~~~~~~~zuvwyyxxyzzzz{yvrsvwymc`PO^dhjjjouvwvvwxyzzxpfU<Cifkowyutsmmqy{zrqstuvvwwvzywwyyzz{yngjlosuwuqw|tdcakwwvvsrqttsoqvxskkmqqqtnpuvwyzyyyzz{|{{{{{{{|}}|xvvwww{xliuxqquwqkjmmtuuvxz||{yvtstuvvvvvutrl^TWcnwzyz||wofegkpw}~~zywrnprtwz|zyz{|}~~~~~}{{{{|}~~~~~~~~~~~}zvptuwxzzzyxvrpqqqssqvx{||{yxxwvtpnkmrty~|xy}{sosurmhgjntx{~~~~~~~~~}}}|{{||}}~~~~|xyxxsux||zyyxxxxzzzyxvttvwwvvtttsrsqmgjpvvuutm_WYUIE}~}ytrqsv{|}~}|zvqoljjlqx}~}||}}||{ywvutqomnpsxz|}}}}}}}}}}}}}}~}}|||{{zywusqoononnnonmlkihggijihgghjnqqstusrrstuutsqomlkkklmnnoppppooopmkjmnmjlrsnjlonmnqsqnjhhiihhghhiklqtqkjpy}{vqoppopttxzzz|||xtuwyz{{yttzysnwywvvwxxxxxxxxwwwwwxxxz{ysjamruxvtuvyzyuttrompnoruz}}|yxyz}}xogbblvz}~~~~~~~zyzzzyxz{{{||{xtuwwta[eUJXhmlmmnprtwwxyyz{}sgmyQ8cadlz}ywukmv||vstuuuusuwwyyxxxxxwvtrssuxxyywrphjgSNYnuvupifnusrvzxukfknnourpoqvy|zyyzz{||{{{{{{|}~}yvuuwxxxnlnrnrx|wrqwwywvvxz||{xustuwwuttsrpkd]b`fqx{{{||xpmkiiouvy{{zwrnrvy{~|{{|}}}~~~}|{{|{|}~~~~~~~~~~}||xwxxyzzzzursqponnnnpwy{{{zyxxwvvsplmpsw|~{{}|xokoqtvsqnpuy|~~~~~}}~~~~}}|zyz{{{|}}}}|xssrsprvz~|zyyxxwwwwwvuqoqvwuvvxxwutstusssttuurqjdempqz|}~ytrqsv{|}}}|zwurolkmrx||ywtuvxyzzzzyyxuroopty{|}}}}}}}}}}}}}}}}}|||{zyxwvtrqppppponmmllkjhfhjjiigggknnprtsrrrstttromkkjjkllkiilmnnoooommloppmmqpmijloqopqpnljhfffghjkkklnqnkhlw|{xtqstssuvxyyz||zustwz{{zwnltxutxzxvvwxxxwxxxxwwwwwwwxvtttlkumesvuwy{}|usvvvsljjmou|}zyz{|}xquuxz}~~~~~~~~~~}}}||zyyz{{}}{zwywvvkhmZNYotrpnqpsvwwxxxyzyjao~oQoccp|{vtrorvwvttvvuuutv{zwwwxxxvtttuxy{|zxwvtoRBINQOXotspcalposwyxyvqpqpoqqqosvxzyyyzz{|||{{{{{zz}}yvvvxyyxrlefjqz|wtu}|zxwwxz{zxvsstuvvtrqnmmb[\\^Zbmvxwx{|{trpruxwllvz{xywvwyz{||{|}}}}|||{{{|||}~~~~~}|||||{zzzyxxyxxyzuqtqomllkknuxxxyyxyxwwvvtporswz}~~~~|wpkmnsw|zvsuwz|}~}}}}{}~~}~}~}}|||{zz{{||yvqkijmqtwy{|~~|zxyyywvtssrqqoqtusuwxvurpoqvvtuuvwvtutpquxxtwz|~~ytrqsv{|}}|{zyxwurqqswxuqmjjlnqtwyz{{{ywtrrvz|}}}}}}}}}}}}}}}}||{zzzyxwwvutsrrrrrqomlllkkkjhhhiihgghjlnnpqrqqqrttromkjiijkje__hnppoooonmmpqqnmpkccfhptqppomlljgeegijjjhhkomkhiw|{xsqtvwwwwwxyz|zwtstx{zzxwqntyyxxyyxwxxwwwxxxxwwwwwvwtrlqwnptpcfnquwz{{vstsupdkhjhoz|zy{|}|~|}~~~~~}}~~}}}}||zztt{~|}}}zzywwrkl^W]eqrmnqquwuvyvwzwj`eq{zxkq{zwrpoquspopsvqruvvx{wqruwyyvtrsuvwxzyvttrskNFNTVdossqghmjltxyyyxwutqpprrrtxww{zyyz|}}||{||{yxxy{xwvzyyxuqjfjrwxvtxzyyxxwwwytnnrnqtuusnpecfZRUWWepuusx{||xvuurqmg^qy{zwssuwxwxz|~~~|{zyxxxz{|}}}~~}|{zzzzzyyzzyxyxusvxurrmlkjkmptwwxy{zxxyxxxvutrrstux{}~}|yurmkponsutuvxyx{z{}{{~}~~|{}|}~~}}|{zwuvvxyxtlhhmpsuuvx{~~{yxzz|yvsqppnghhkmnoppnoqlihlpuvxyyvuvtttvwxorvy}~ytqqsvz{|||{zzzzyxvsstsplhfefhlnruy{||{yxwwy{|}}}}}}}}}|}|||||||{zyyxwwvvvuuuuuttsqomllmmmlihhiihgggijllnoppopqrsrpnlkiiijjieeimopppponmnqrqpopldcegpurpomklmlifegijjhcchnmjgev|{wrptwxxxwxxyyzxtstux{zyxxxxyzzyyyyxwwwwwwxxxxwwwwwxwqjlrwsrogchhcgpuz{vqminkdjihch}{xy|~}{|~~~~}}|}}~~}}}~}z{vw||yy|}{zxwytnmb[W^knkjqrwtonsuyxobcht~ytwx{yrommnqqljjmrvvxyzwsuwtuyyxwurqrsttvwutrqruuZNR[Tdtssunrrmmsvwxyyxxwvsrsstvwyy{zyz{|}}||||}zwtuwzzvqtyvtrppmntuwutqqsuwvuwzzsjkmlqstuuxpeb[PKOREKdrtvz{||yvrpkfcd]muwyxvwwyxwxz|~~}|{yxwwxyz|}}}}}|{zzzyyyxxyyyyyyurtvussomkjknquvwvy|{yxzz{{wuqqqommquy{{||{vviljgntwyyywuuspsyysrvtw{|{{||{|{{zxvuvxyywspnoqrsrtvz}~{yxyy{yurppnkZ\\_dghfffhjkfcfkptwxyxututuuvwwknrw{}}ytqrtwzz{{{{zz{{{{yvsrqmjhfeefijmquxy{zyzz{|}}}}}}}}}}}}}}|||||{{{zyxwwwwwwvvwwvuusqonmnoomkihhiihgghikkkmmmnnopqqpomkiiijkkigfghilopnmmnpqqpoqpiiigotqnmkjjllkhgghihgdcgjlhdcu{{vporwxxxxxxyyxvsuvvy{yyxyyxxxxyyyyxxvutuxxxxxwwwwwwxuprwsssldgmkb_dmw|zupmjiklnkb]q}}|yxz}}y{}}~~~~~}|}}}~~}~~}||{|{yuvz|{xvvusnkf]PVagjipsxuokqvzrhlkjtxtuy{wronklnooihhlrvzzzwvstwxy{zvsqrrrrqqturpmmnnsaURYRVnlmrrvvrrsuwwxxxwvvuutuuttvxzzyz{}}}||{{zzwssuyywtw|xvutwuuxwvusonruvusuxvkchlpnqtussooeOHFKMEOlzyxxyzzzytlb[[XWlsrvxyzzzyxxz|~~}|{zyxxyyz{|||||{{zzzzzyyxyyz{|{wrtvvvwroljknrtuvuy||zx{{|zupknomggkpuwy||zuqpxmbluwuqrsvrib_ebYZcny~|{zyxxyyzzyxwwyzxwwwuuutrqquy||ywwvwusqokd`Y`bdedbdiolc`^ahmprtutqqsttuvwvkmqw{}~~}zvrprwz{{{{zzz{{||zxvsqnkhfffegikmqttuuvxz|}|||{|}}}}}}}|}|||||{{|{zyxxxxxxwxxyxwwutrqonnonljhhiihhghijkjikklmlmnoonkihhiiiifdcb`dkqpmkmpqpppppnkllipsomlljjkkkihhhhhgffghkhebs{{vporvwxxxyyyxvusuvwyzyyxxxxxxxyyyyxxvqosyxxxxwwwwxxvmjtxpohdbhoqjbbly{spooljpnpnf]cikoswz}}z{}{y{}~~}||}}}~~~~}|z|xxzzurrsuslml]MRZfmkquyxtqtutllmpuwy|wtqmnpnklmnnlifhruwwtrvyzyxvxuspruvvqmmpqokfhlhoe\\MKTN[Z_hqspoqkqsuyxxwvvvvvvurqrtxzz|||||{{zzzywttvxwutxyyyyxzyxxvsuuuvwvtuusoh\\V`mpbktutsqp]QKFKKLMVowxvxwxzywoi_YLD_qhiswyz{{xwy|}}||{{zzzz{zzz{{|{{{zzzxyz{{{{||}|xtuvwwxurnlkloqrsux{|{z{|~ztpnpomhimqqqsxzzus}{b^hpplhfjuth_[TSW\\hv~~}|{z{yxxyzyyzz{|zyyzzzyvroorw||yvtrqprqple[bkefgefku~t`\\\\]aghkpssqprrstuvvkmrw{~}{xuuxz{{{{zzzz{||zxvsqpnligffghjlnoppprvz||zxvuvwz|}}|||||||{|||{zzxwxwwwwwxxyyxxwvusommmmljhhhihhhgiikjijklkkklmmlhghhjjjhfdcabcjqolknqqpopqomlmmlrqmmkkkjklkkighgggggghhjgar{{vporvwwxxyyyxvtsuvwyzyxxxxxxxxxxxxxxvrqtywvwwwwwwxxskmtropibjlotrkmu{yuqspommnmmkh\\P[mrwz|~}z|}|urz~}||}}}~~~{~{zzytpqsvrciw^LP]ilmpuyxvtvtojpptywurqkjkmnnmnmnmmidenpprrqvyzzyvtrqqsxzwrllmpqkdekommmaIHTOU_gmlcO_^dbevxxwwwwwwwvutstvxz|}|{{{zyyyxxwwxyxvuxxyyyyyxvtiqxwuyxvxuwwk\\PNY_UQewuusqneUPLOOV]]^irvutwvwmmkfZSBCh`S_ksx}|wuy{{{|||||||||{yxy{{|{{yxwwy{{{z{{|||yuuvvwwusomllmoprtwz{{z{|~yrnnpolijqsoiisvtpnsm_^afjmjbfuxsi[SOP[gsz}||{|}}vyzxyy{|}}|z{|}}|wqmnruxzzxuqortoppmkjlkhffegkqwqf``_aproqtsrqqrtvwxworvz}~|{zzzzzzzyyyyyywutsrqpmjhgghiikmnnmnoswyxupmlkotx{{|{{{|{{||||{yyxvvvwwwwxxyyyyyyxurppomljihhiiihghhjnlijkjjjklkifegilmljhhgecejommjnpppqsspllnpqunjkkkklnmlolffffhiihhhiies|{vporuvwxxyyywuttuvxzzyxxxxxxxxxxxxxxyyyyyvquwwwwwwvojoljotliropswtw|~yrlononoopqrpiizzwxy}}|{~~xqq{~}}||}}}}~~~~}{xutuyr\\Lb_OP]lmnouywwwtrnrwwwuqrplihjlprsrnljljfdjlkghnvz{z{wuusrvy{yrlkhoupijnqkrsiTS[Q]Y]he`RDGLEVqvwvvvwxxxxvutuwyz|||zyyxwwwxxxzzzyyyyzzzyyxxusquvqq{|wuvyveTLIJNDLklajuqdWRSY]b^^^airuxx{xoddheb_J:QcV^immvyuwz{{{||||||}}{yxxy{{{{{ytsuxzzyvvxyxxxwvvvwwvusolkklopsvxyzzz|vjgjmoolmrsnggjkfdcfc\\^]agnokmvxsneaTL[jtyz{|{|}wmkpvyz|}~~}}}~~ztonruoiqrqmjikkmpqrrqqkeefgilonkjigiw{vvwvtrsrsuwxwqty|~~|zzyyyyyxwurqomlnpqpmjhghhiijklmllnqturolhggimrvyzzz{{{{||{{zxwvtuuuvwwxxyzyyzzywtrrqomkihhhhhhgggdippnnkkklligcbehmmljigfdabfhfljmmnnopqooomnonmkjjiimrqoqmhgggjkjhggdjiu{{vpnqtvwxyyywvtstuvxzzyxxxxxxxxxxxxxxxyzyxtpsxwwwwwvttqnswvnqzqpsy|}~~|wlnruvtrqturnnuyyxy~}}~~{}}}}||||}}}~}{yxyqV6PcSOZhikmuywwxsrsyzwrnnnmkjjlmqttrnifghhgfghfiovxyxyvuwuusvwvsnmjswppnklitqcXX^UW^_VZWQ=>=8Qksrrrtwxyyxwvwxyyz{zzzyxwwwwwxxyzzyyyyzzzyyxxwwywrk_i{xotypcUOLOW]dkf_muvl^TZalsa\\cinqtuvytmffidXSHBBPQisi]moiuz{{{{{{{{|}}}zy{|{{{{|zvsuxvtprtvwxxxxxwvwxwvtpmjlmoqruuvwwyzyoffhjmqmilllhffgcefedec_`elpsutollki\\Vfrvz{{{{{zmciqvxz{|}}|}~~|wrnkkmjjlnk`Z]flqtvvwxrgffhjnoppnllpuxwwvusqqqqsuvvux{}~}}||{zyyyxxwuromllkmpppnjhhiijjjjklllnqttrnkiggghkpvyyyzzz{|{{zyxwvtssstuuvwyyyyzzyxvutsqnkhgggggggggggkpqqnllmlid`_chpmkjkjfdaacc`gimmmmlklmoolnmgfiijjlpssqpmjjjkllkfdfajltyzupnquvwxxxxvttstuwxzzyxxxxxxxxxxxxxxxxxxwusuwwwwwxwxxuwz}yqxttx}~|~~}pqvy{xuqvxrsz{|xz~~~}|||||||}~|{xpYAWmXNUbgglvxvuvstyytpkjllmmmnpqstsrmlhgjllifkqsqtuvuvpotxvqsssqonmwyxxqijiwr\\TU_nX`^Ve]RE?>AVflklotwwxz{xxzz{zyzzzzyxxxwwwxxyyzyxxxyzyxyyyyyzsurTOoykpth\\WPMNVfnljhhikkb^chsvgdlmnnppptpmhjl]GEIMIKZov`Mc^[v||}{zz{{{|}}}wtz}{{{zzyyxwyunimtwwxxxwxwxyzyxurnnnpqrqrrrqty|{mehkggmiadimlihjkospophbbfkouwupjeabdkvuuy|zyzyynex{yxy{|}||}}~~zvrlgjpllmki\\Xansxzyxzwnkiiptrsrljmorrstrsqnmmnprstxz|~~~}||{zyxxxxxvtpnmllmpppmhgikkkjjjjklnoswwtpligfeefjqwyyyyz{|{{{zyywurqqqrstuwyyyyyyyxwvutqljhgffgggghjlmqrqolmpmkigeikmmqmjkjgdfhgbbglmmlllklnmllpleiklmnprsqpmklmnnle\\^fgilqtxtqnquvwxxwwutsstuwyzyyxxxxxxxxxxxxxxxxwwvvvwwwwwwxvwxwux}zy|zy||~~x{}|xwxy{zvx{|zwz}~|x|zz~~~~|||{zzz{|}~~~~~~~~~~~xldmo`NQ]gektwturguwspljillprstussstsnplgmnoskoutrrqqtyolwzvprqonmjoz}zmosyta[Y]osg`cdaXIGC[bfk_fmrwvrx|vr{{{zyyyzzzyyyyyyyxxwxxxwwxyxxyyzyywuxr[KVjiom^ZUPKKQV]]UbdVdgemrvywnmrpmgpflqnompsojdJR]PWinYK][Yp~|}zzz{{{|}~|zyy|}|zzzyxyxyvogktvwvutwxyyz{zxvsrqxyysoonmoqx{}qdiweagd`bhmqlelruuutnkcbjouvxxuod^cmx{xuxyyxyxwsvxyyyz|}}|||}}~~}zzywwxwqmmliedjqy~}ywwvvustuvttpiejmjpurqrokihjnprs||}}}~~}{zyyyyyyxvspmllnpqpojjjkmlkkjjkmopswxvpkigfedehntwxxyy{||||{{zxvrpooppqruwxyyyyyyxwvurmjhfeeffggimqqrrqollmkljjjifabf`[_gjlpqngbdimmllkjkkkhfegirrqqrrqqoopmmnoolh``efhihjpspmptvwxxwvtsrrsuwxyyyxxxxxxxxxxxxxxxxwwwwxxxxxxwxywuqos}|tuwzzzy~uwzzzyyxz|y|~|z{~zyw|~}~~}|{zyyyzz{|}|||||||}}}}~~zrtufPP\\hjlqtotjnookhhghlmvvsqpqssvuprpilyqoosvtrpopqwketxwpnmlkihr{vjtmas{{xp]YYMorohhf_UHEWTfSYjkfetlm}gYtmuzyxxyzzyyyyyyyyxvvvvvvwxxxzz{zywutj^SRVTqvg]SPOOORY\\NKRlgUexxx{xrswi^a]ltrurqtxvrcLVg`\\deZP``Vcwz{wvyz{|}}}|{z{|}}{yyxxxzywtnpvvvwwwxzzzyyyyxvtrsnkjiiikjfer~ykh~ukonifimqppuzzxvupmfjrvxxyyytljpx{{yxyyywwwwxz{{z{}~}}|{|}}}}}||{{~~uomnmjinv}zwuwz}~|yxpfbhkhntprvtjhginpqr~}|{|~}|zzyyyyywuromlnpqqrrqpnonmkjjkmprsvxvqmlkifdegmtvxxxy{|}}}}||{xsqonnnnpsuwxyzzzzyxwvtolhfddefgggfilmmlkkkjedehkkf^ZZYX_dgilpqkefhjklnomlljgbchnxwutsroljknnnnnnmkheaeghddflomptwxxwvustrrrtvxyyxxxxxxxxxxxxxxxxxwwwwwxxwxyxwsmloorxvqqswxyy~rrtuwyxtw|{||y{|xtvzy~|zyyyyyzz{{{{{{{{{{{|||}~z{pUS]hmmnsvpfokiedfgjnsvtrsuurqwvqqrjjvpprsuqooppom]RmrwollmljilncN]WTju}znU=<>]omkjjf\\JPQSZA`fedfg^djUASTnzzwvyzzyyyyzz{zywuuvwvvvwwy{|{zxtk\\VVfnIdym`WVVUTUXXJ>EjXRrpuuy{seX\\TLHfwpvsstxzujhnlrsk`]\\ebWRSeuxwwxz{|}}|{{{{|}}|yxwxyyxuqquvxuuwxyzxvuvwwvuwrikmmnlf]_br}}sm}|wwvrommnqtvxxwuutsqsxyxwxyzzwx|~|zz{{zyxwvvwy{{{}~~}}|{{{zz{|||y|vpmnnllpy~~ysru}}{zqfcjmloqpprphhjnstss}|z{}}zyyxxxxuspmlnpprtwwvsqpnlkjkmprtvxvspmlifdehntvwwwxz|}~~~}}|yurpnmmlmoruxyyyzzyyxwuqmifdeeefeffhlpollmkg]W]ckomfb``bgb^\\`ejhedefhkorpmlkgimmhmruvtroljjlmmmkllkkf]dghca_jnmotwxxvutuvtsrsuwyyxxxxxxxxxxxxxxxxxwwwwwurqtwyrgbdnvutsuqpsvy{~sppruyyrortx~}zx{{wsuy{~|zyyxxxyyzzzzzzzzzzz{{{|}x`Z]fjnnt~jfgghffgjnqyqpuuvpgoxxpqtmjkouturgghlhd^MBciqlmoqplijbYXb`fbmz{l_D<?Kmmmkif]VdV^dZ_RUcmc\\aNRA=Kguxutx{{yyyzz||{zywwxxxvtvxyz|||yse[[Y[`MOph_Z[[ZVTVZJ=?TTSdlsptvqeZUMA;Vvxysrruxxvwp_fqpa]ahh_TTgtvvvwyz{|}||{{zz}}}{yxwxxvtnmqvwspsusuqnoqstutrmimuvxxmfnsuxxtvtsuusqrrrnjilopqqsuuuvwwvuuxz||}~~|}}}||{yxwwwyy{|~}}}~||{zyxxz{{zy}}vpmnonlr{{tont}}zxwrjhptoooohcbejqx{xuq~|z{}{yxwxxwvtqnllmortvwvutrpmkjkmprtvxwurolhedfinsuvvvvxz|}~}}}|zvtqpnmlkmotwxxyz{zzyxvsnjgfgeefeefhkpnllnjb]^`ciqplebbffb[^^]\\XY^cfgfhlnkkkhijid`isvspnmkjlmmkiikkkhhihfc`emompuwwwvtsuvusrrtwxxyxxxxxxxxxxxxxxxxwwwwwtniksxoedisy}yrwmnqux{}}uqpqsx{wk_iu{|yy|{vttx|~|zyyxxxxyyzzzzzzzzzzzz{|}~}ti_eimmtqgffghhikoqrrsruutoloywpturnppsuusVJ]dYMLLFH[agjruuqlia[eedrlrwqgOBBDMckmkhddIQM[ef_VS\\llg_RI@=HYkutqwz{zyzzz{||{yyxvnqrrvxxxy|{yrg_ako]OScb^\\^^]WQRQMCAQ`fetqnpqnd\\aR?9HiywtsrrmqvrdUTcbU^hrniflvxxxwxxzzz{{{{zz{||}|zyxxxusmmoijsssomgfjmppswtmjillktumjqtttrsrstutoimqpkgefgkmnquvvvuuutux{|{z|}{{{||zxwwwxyz||||}}||{zxwwxzywwz|vlioqkmt{|vsmms{|ywwwuqrwuollib[\\do{{to}z{}{xvvvwwvurolklmqtwyxwvsqnljkmprtvxywurmheefkptuuuttvx{}~}}}|{xwuspnljklrvvvwyyzzyywuoljjjigfdeefhjlknpe[^elhemrpicdjibY`gkh^WZcgebchjiikiijhc_grsmmnnlllmlighjjjhjljgddnvsoquxxwursvwutrqsvyyyxxxxxxxxxxxxxxxxwwwwwtpjintrjfjt}}uwipuxyz{{ttsrsw{}qfkpwxwz~{wuvz~~~|{zyxxxxxyyyyyyyyzz{{{z{|}}~|ugfgkhqkfdghjkmptttsstuuroosyvqtvusstvwwuXIR]^WGHIIQWnuvxywqhabfcanptvqmf[MNRbijkh]VJBAQ]deZMOhygL=9<IWcmstttxy{{zzyz{{zz{xlY`jneossvzzxsoid[USUY_^^cfcZ[_RKEGNSdqhdkoklib]UH?=E^sxutqpnrxn[NNYQQbjrlknqsrtvwwwx||}{{zzzz{|}|{zyyzxvsnijkuwxwm^\\enqptvrnmkgfekkijrssqpppqsttmeipnhdb__cfkpttsssuvvvx{}}||}{yvwy}|zxwwwxz{}yxx{}||{zyxxyywvx|~zxskktspuz{xtrnnty}|ywuvuvvuvtmgea][`jr}~|vnk}{|{xvuuvvvutpmjjkpuxzzywuqnljkmpsuvxzywtnheehmrvvvuttuwz|}}}}||zyxvuqmiikptttuwxxxyyxvqmlnomjhedddeffmojhehmribhkkhfgllgfb^biaZ]bhe_^bhjjghiiigemsrnnppnlkkkhfgiiigjkjhefovtpquxxwtrtwwtsrrtwyzyxxxxxxxxxxxxxxxxwwwwwvvvutvuohlw}yvgtx{{zwvnrvutwz{vrrswy{}~zxwz|}~|{zyxxxxxyyyyyyyzz{|||{{{}}~~}slhdboigglnppqruuuuuuusppsw{uquxxvvvwwur\\TZZPFKSaV^\\qsvxzyuiacdggnopqqqq`S[YdihhdYHC@EKW_d]PJ`wmYMKSbmmptwwvvwy{zzyyyzyyytfQ]hofgonqvxqihjfYQS^ed`bef`S_qf\\NGILXic^ivupkc_[PLLV\\`lutqomrvkYUT[[YYWachqtspsuxxupx~{zzzzzz{|}}|{{{{||~yuuuzzz}yngklmnsvvuqmiilpnmmrsrqonnopstohfeffa_bcabiquvrpsxz{{{|}~~~{usqv{|{ywvvxz|}~xvvy|{zzzyyzzywvy|}zxwwpmx}ywxyxtsqrvy{zwtrstuustsoid^\\_hpqnlifef}|}{xuttuuvvtqmjhjpvyzzyxurnljjmprtwy{zzvohedhnuwwwvvvwwy|}}}}||{zzyyuqkjjnqqqrtvvuwwxwsnnqsqmjfedcccelmjknnqnedlkklllkjig]SVhcYWbd^YY\\dkkjjjkllorsomnrrokjjjgfgijihhihgdeouspquyxvttuwvtrrstwzzyxxxxxxxxxxxxxxxxwwwwwwwwxxxvsorz}|xlqx||yyujqyvtvzvstvxz{{{}|zz|}~|{zyxxxxxyyyyyyyz{|||}||||}~zskcaqkkmrtuuuuuuuvvvuspqvwxspvzzxwwwwtm^^bb\\TO`s_SMdjquyyvkb]aljkkilqqqlnfZ]fecb]T??FNW\\\\YWUdolVKZ^acfmvyyywtwyyxxvvwxyvk^NXZgqcgeglqtniiehgdhliedb\\[]`eb`]SOQS[W]ajusnf`UQZ`_XYhrsooplcZX[[acYVTU^fnsquyy{yqbmzxxyxxyyz{}}}||||}|{z}|{~~}{{{{wlfhlpstokhjnqqqpsuuurnlnorusnd_bfbbnnebjtwupmrx||zyz{|}~zussx|zxvvvxy{~~}wuuxzxwwyyy{{zwy}~zwvvvsux~yuwwxvutuwwwurooqstsrqpnje`^bjnhab`]`i~}zwuttttuuspmjhipxz{{zxvsoljjmoqsvyzyzwogcdhrwxyyzzzz{{{}|||{{|{{{zzxsomnppooorrqsuwvtomqtqnkhfdccbdfgjkipwlccfgknpmgfkjd``acbcfcYX[\\`ilklprusrrqnmnrrojhhggikjjihgghgfhqurqquxwustvwusrqsuxzzyxxxxxxxxxxxxxxxxwwwwwwwwxxxxvvx|~}yxsox~}{~ypv|xtwxvsuz|{y|}zy}}~}{zyyyyxxyyyyyyyz{||}}~~~~}{~zsmpqnsuvvwwvwwwwwwvvtrsuwvqpuz{yxxxxuk`bed^UNYaXNJT]hruysj\\P\\gcgjoqppruqfYC`W__]WSMK[USUWa^oleSP\\agflvwxtz|xvzv{wtssttobWSTVX[XUTXX`jomhjhflonidgf^[\\`bfgg[abRW[glkqtngb\\`a\\`aiquvmloi]Y[]^cga\\WWbhi_ct|{~xp_eux{zyxxyz{}}|||||||yxtuy{zz{}~|wohhnrssmfjpqrrruxy{vmnstvxuniimonpvumiowvtposxwtqorvz{|~xuruwvvwxy{|~~yzyywvvuvwxz|}zy|~zvvutsuvvsqsvwwvuttsqokfjptvurliefecbgmmfdie`clzwutttttsrpmjgglty{{zxvtqnlklnnpsvwxzxrkfffoxz{{{||}||{|}||{{{|||||{xtqooonlkoooprtutoklpnmkigeecbbccaa`gniccddfkpma_hkgdccfikke\\^b`_fknpty{xtqnkmnpqomkhghknlkihghjklpvvsqswwvssuvvusqqsuyzzyxxxxxxxxxxxxxxxxwwwwwwwwxxxxwxz|}}|vwwuz}z~}xyywuwy{}xx|{{~~|{zzzyyyyyyyyyyyz{|}~~|~{vwusuvuvwwwwwwwwwwvvvvutspquz{yxxxxwmdfgbZQJRZRKP\\`iqst[RNKRY^jnqrqpqpg^YARJZ[_agc^iRGNPOfnlbON]hoovwuxvwyzwzxwwtpnke_ZXWWVUQNNOSRW^fddlqqssqng^df^]bcflomtth`Zpxqpojfdfifbkotvuuruqlhc_ademidZYjpkdlw{wwodbhtzwwyyxxy{||{{zzzzzxurptvwx{}}|}{vrqtvtrnkorstttwzyxvuwyyzytpsuxxutstusrsqqptx~zncfkrvyx{zxrnpsuy}~~~|yvtttstuvwwz||{z|~}{wvvusttqnoquwxwtpmljgfhowyxwtkeejmihmqqlkolhkszvttttsrqpomkkjkqx{zywvusqonllmnosvyzyvromknuz|zz||}}|||}||{{{||}}}|zwusqpmkhkmoopprsojhjjjkigfgfedcca``bfjjigecjpoe`flkigggkha`abdbaeimosxyvrnllnnnlmmjihimonmjhfgkpty{yvtuwvtrsvvvtrrqsuyzzyxxxxxxxxxxxxxxxxwwwwwwwwxxxxxxz||{zwywsy}~||zyy{yy{zy~~}|~|{{zzzzzzzzyyyyyz{|}~~}{xusstuvwwxxxxxwwwxyxvtrprtxyxxyyyzphhgc\\SHPVONSbftskgJGKNKSastrrrqpnaHB?DHPVeimeXPHD;B@WVd^QRcouqomnqxndruqvxxvpg\\UQUY[[[XUQRTXTXX[[_hnpmhmqmfff`aeehovwy}xjfrztsroljlkghlnquyvtrqmlfbhjhtqma[kupntuvul^`dlwyvvxzxxyzzzyxxwwxxxvtuxzz{{{wsrtvy{zuqmlorssuuvx{zuqtxyz{zwvy{||yvrruurponptx}~o^ckrrlr}}zwuw{}~~~}|{ysomqstwxwx{|{{{zz||yxwvtuspmnruyzxsmhfffehosutrqpprtsmnpssqqsroqrzvtttssqonmmmmnoruxxwuttutrpnmllprtuvwyyxvusuyyyxxz{}|{{||{zzz{|||}|{xvvtrnkhjlnnooqrpmjjlmljhhikjiffefjjloqphddglpmd`fknkhfhaWX_ccb`aeimqttqnkjlopommmkjklopnmjhfdjsy||zyxxxvsrtwwvtsrqsuyzzyxxxxxxxxxxxxxxxwwwwwwwxxxxxxxyy{{wrsvrjpw|}}}~~}|}~|{|{{~zzyz~}|{{{zzzzzzyyxxyz{|{}}~|zxvuuvwxxyzz{zyyzzyyxvustuuuuvxz{}rlkif^YVZb]UUairiSKFJPSMT^nttsrqrqcOA@CHO[cnviSQOM@=BNWlgWTgruoelutpaN_cYftwuk\\QPNSW\\]]^\\YZZ]ZYXYZ_``f`S`nnmghohfhmtvwxvsnrtwvwwusplgchkkqvzxwoqqmiiopoqogUGXsspsnlsXKepnsvrqpuxyzzz{xwwurvxyxvruwxyzwpifksyzvqkgjptssuvxz{{vmmsvwyzzy{{||{yurrqqqqpquurukbenxsaajrz~~yxz|||||{xwqmlpqsvxxy{{||{z{|}|{ywuuurprux{|yslgfhljffhmlgehlrsqnoqqqpqsussqzvttusrponmmnnopqsrpnnnpsssqomlmqrqpruwyzxvuuwxwwwwy{|{zz{zyyz{{|||{zywwvtplijkmmoopqqomlnpnkjilmmkihefimmnpjdbehiki`XZjnmgcaa\\WY_a`^_adjoppoljijmonmmlkkkmoomlihfdiv{||{z{ywuttvxwvtsrrtvwyyxxxwwwwxxxxxxwwwwwwwwwxxxxxxxxyyzzuhqtpgglw{z{}||}~~|~~|{|{{|xxy{~|{{{zzzzzyxxxxyzyz{{|}~~{zwwwvwxz{||{{{{zzzzyxvuuutttuw{{~rlkkiaehUcYX`coriRONNSX\\]ajuvtsqrjTA>AELV\\afndONSTKBIRets^[nhjejrtk`UMOSUiqrhZNMMNQV]`__`__^^]XW\\bb_V]^MWfjnijmmhjsvtwwgjnrtwvuwppnnkeiljrvz{xsutqmnrtrqpfTKUmxtrigtOJey|vspptwzzzzz{wvvtqvwxwvtrsuxywpc]esvvqkggkpvttuvxz{xsmlrutx{|||zz{}|tpopqssrssrojfdfp}xkghpuxvwxyzzz{{{zxsnnnprsuwyyz{{{{z|}~|{xvuusrtvy||ysmihjpvtpowoaZ]jqrpnpqnlnorutsrzwttutrqonnnnoooonkigfgimpqpponoqqsqrtuxyxwwwwwvuuuwy{zyxyyxyyzz{{{zyyxyywtplklmmnnnoqqrqrspmmnprrpmjffjppnmf`ahnlhfgeamkika]`]Z_c^][\\^bglmmmlkjjjjijmmmkkklmlljhhdjy}}}||}zwtsvxyxvtsrstvwyyyxxwwxxxxxxxxwwwwwwwwwxxxxxxyyyxxrjbkrniiglrtvzzxwz}}zyz{{|{wusuz~}|{{zzzzzyxwwxyzyzzzz{|~~|zzyyz{|}~}||||{{{zzyyxxxwvuuvyz~pmlmminc_gSVT_umfYa``ejhggnuxusrtpeSMHDPZ^ac^L@CIPMGQevwi\\bplrpryr^SONOT`lde[QLOPRVZcgc``____aabghfaTSVOT]frmlotlhywndtoimtvwvuuqtsruqkbanuzz{vwwvstxxwsshZ^bhossfbv[QXYitonrw{}|{z{{ywwwuwxwvvtstuwxyum_euttpkgeimstuvvwxyyupptuvx{||{yz}zvnkkmqtvxwofdccggglkjnpuwxtsvxwuvwyyyyxvtrrtvvwyzz{{zz{}}zwuuuvxz|}|yuomnopvytu}kbbjomlnrpifhjmpqqrzvttuusqonnnnooonligeccegjlnooopstuvvwvwwvvvvwwvvutuwyzywwwxxxyyzzzzyxyzzywtpnnnnmmnoqrsstsrppopsssplfekrurj`aclpojd^ZWed`\\WYcba_[[\\[_adgklllmnkkihilonkhhjllmlljjhn|~}}|}ytrrwyzywtsrsuvwyyyxxwwxxxxxxxxwwwwwwwwwxxyyyyyyxvvslpuojhhhghlt{xssy{{wolvz|{wuu}~}|{{zzzzyyxwwwxyyzz{{{|}~}}}}}~~|{{{{|~~~}{{||{{{zzyyyyyyxwuuwx|ommmomrgij_SOSmmp_][Z_dginwzzvvvxsgTOJGW_`boraGCHOQZbpuukhoxjplpvnZQQUYYa]QVROQSVZ`fli`]\\^__afkopmgbXSSW`imqonnprmw}nZmvlkruxwwvvtmtwph`Ygsts{yyyyxxyyxtsidfmhhsuc[|vaJ?\\uvuuy{{zzzzyyzz{yyxvvvvwwxxz{|{omqqqojedfinuywvsuyzxttvxz{zyxxwxytpgeehnsuvtqmkhefaVRVetwxz}~}zwspoqtvvxz|zvtwyxxyyzyyyyz}}zxvuuuxz|}|zwsnmmmrtrrszpheeeejqvogehhjmmmiyvtuvusqonnnopppomjgecbcegilnnosutuvxyxvrsvwvvvwwvutuwxwvvwwxwwxyyzyxxxz{zxvsqppomllnoprrrrrqqpoprusnhfimpmifimsqnke^ZVdheb^\\aZ[^Y[\\\\``bejmmmmmlkhgjmppnlklmmmllnpns}~~}}||xtstyzzyvtsrsuwxyyyxxwwxxxxxxxxwwwwwwwwwxxyyyyyxwusoiqrkfefghfgpvspsxzzwplx|}|z{}~}|{zzzzyyxxxxxxyyz{{{|||}}|{||}~~}|||~~}{{{{{{{zyyyyzyyyxvuvuynlmmnmuqidkXRQYesd^[XZ`fhrxztqsptukc_UQ`dbeihTEHP\\aqrpidivutc`alsk\\VX[^`TRMOQTVX\\`goodYY[_``djnookc\\Z[\\eqsphjpnnqswl^Vcwpektxwvupe[imilqadnnkuzyyy{zywursjdgspnwv\\QypTII_nltwyyxyz{zyyzz|zxvsrtwyzzzzz{wy{tplhdbbfkpwzwrnqx{wuvwwxxvttuuvwvoga_biosolmkb\\]``ZU[kwwtrruywuqmlmorstwyyvuxyyxxxxxwwxz}}{ywvuuvxz|{{xtmhfglu{woqnea`_aioromlkjjiiifyvuvwutqonmnpqrsqnkhfdccdfhjlnptvutsutoomqxyvvvxxwutstvvuuvvwxywvwxxxwwyzyxwuttrpnmllmmnoooopqoigkqroighihihlrtwsokd^]^feZ`__dggc[[^^^`aejnommmmkiilnqrpnoponkjlptvy}~}}|{yvuuwz{zxvtsstvwxyyyxxwwxxxxxxxxwwwwwwwwwxxyyyyxxwurqoqppomjiikptvtssxzywqqw}~}|{zzyyyxxxxyyxyyz{{|||}||{z{|}~~}}}}~|{z{{{zzyyyyyyyyxxwvusqmllmmmpod\\a]WWZ[]_cn`_gheln`]Qg[`fjf]_addbfjgb`T_k`mppkjqsi[_ehnqj_]`b`^^`\\X__[_adhd^`YY\\cbcehjb^\\VVY^ahmeibkojnurvxcSZuvkjlprslbb_^dimmlnpkcl{wrsvvrlinrkbhux}ynMEkbW_\\chghnsvrtz|{yyyz{yurnmqvyywyxxyyyvromlidahosvvtohm}truxvruurnruvvxwslaZ]djqplsrf_^]^cglrwsljkorstvtkgfkqtwxxutvxyyxvuvwwwy|~~{ywwvuvvy{|}{wqkfgltxwurnga]`cjptrpnmlke``^~yvuvwvuqommnpstutpkhfddcdegilnpruwurokfjlszzxwvvvvtrqqstuvuuwy|{wwwvvvwxxxwwwxxvspnlkkjjklllmnlfbdipqmjhfdehnuvvqomcYX]^ZVX^hmne[Zbgfca`djoqponnmmnppnmnpqqpojjmrvxz{|}}|{xwwxy{{yxvuttuwxxyyyxxwwxxxxxxxxxwwwwwwwwxxyyyyxxwvttsrsstrpopsy{{zwwz{ytqty~}|{zyyyyxxyyzyyyyz{{{|||||{z{|}~~~~}~~|{{{{{zzyyyyyyyxxwwvtqolkllmf[fb`ea\\\\]]bfjopnmjbdf\\`NMOV_iiVU]jliiihjleiojmnmmmlkjaagjtylddghbUV`b]cb]cfged[`bYZW[kf][XUSPRW\\]ij[i|uifssrw}r\\Woxlfdbjnc^eaX`fc`hjmj]evncdgfb[[hoi]bsy{qYI@X_[Z^pk\\aVgxilwz{yxxzywspkkoxwpjosvxyxvsqrsomlqvwuronknsmottrpqsrrw|{wzywpcZ`ijquswxre\\]bjqtutphccgjkmprkb_emquvurqsuwyvustvwwy|~|zxxvuvvy|~|yuppsuxywurja^djpuvspnmljhkh_~yvvwxwurnllnpsuvurmhfddddfhjmnnmswxwojkootyyxwutttsqooqsuwuttwxxwvuuuuuwvvvwxyzyurpnlkjjjjjkkkjgccgoqnlidbcgntusnmlbXXdfa[Zeqn`[]`diifc`ekprqponnmnookjkopnmlklpuwxy{|||{zxwxyz{zywvuuvwwxxxyxxwwwxxxxxxxxxxwwwwwwwwxyyyxxxxwxwwwwvwvvwxy{{|{yz{|xtsw|~}|{zzyyyyyzzzzzyyyzz{{{|{{zz{||}}~~~~~~}||{{{{zzyyxxxxxxxwwwvtroljnnne\\\\_ddc``bekkZHimfa\\\\_YdcYQV_mk_acoofehmprqpjjnomkikolkijkoshcfjkd[YZUT\\[Xdjha_ZUZWUMMbYY`TSUPSVYY[ZXoqjbksqxzzweZpynhfdmqb^a_TZaa_cghaZ_kaXXZZYTTYa\\M\\uxr]??BSc^UHDGWeN\\q_dpvxxxyzyxtqnmpurnidny~zzxwvvvssvwyxvsolnurnloqnnorrt|~zvwtqme`foqswropwp]Zeovxwtpha]^achnpkaY\\diprrooprtvvtrruwxz}}|zyxwvvwz}~||zwxwwxywwvogejpwxurnlkjjn||yzwwxyxwrnkjlosuwvrmigedefgjllmlkpuwvroqsuuuwyvsprsrqnpqtvwtrqroqtttssstvuuuuwxxvssqpnmmlkjiihiihgfiqrmjhd_`fotvtpkid^_ejeZWbha`deacfeb``flpqpnmmlllmnljknmkjknpsuwxy{{|{zyxxyyyzyxwvvwwxxxxxxxwwwwxxxxxxxxxxxwwwwwwwxyyyxxxxxxyyyxxxxyz{zzzzzzz{{xxy|~}}|{zyyyyz{{{{zyyyzz{{{|{{zz{{|||}}~~~}}|{{{{{{zzyyxxxxwwwwwvvusrolmmaNGP[ccccejmpbPABUPVVWZYW`b[_grqoiT\\]X\\llksitqprqonnommnpmlifcafki_YY][V^\\[hlfYY[NNLKOIQO]kUPUTVXXVTRQbZ`bbamwwwxk_qvjhhhmphb[YTX`fhffbYWX]ZTSVY\\\\XRVTKWtypkWHH[i^X?=Pa[M^s`\\bhpvxyzzurqpnkignqmtvvy{|{{ywtvwwwwwwuvrvwvvuwsopqrtzyvrspmfghjrxvoehqsoa_jsvwwrnmeZW[biqsnfZPS\\hnnnopqrtutrqtvy{~}|zyxvuvwz|~}{yzyyxxxyzxxwtonpsvvtpliffgfqy~{xwxzzxsmkikosvxvqlgedb`dkonjhklosuussssutruxxsoqrqoprrpstqonnmmprsssstuutuuvxyussrpooonljihgghhhhjprjfgf__emuwxrkhfdeegd]Y\\ilhjf_aig``aflnnmmmllllmmllmnonopstvvwxz{{{{zyxxxyxxxwwwwxxxxxxxwwwwwxxxxxxxxxxxxxxxxxwwxxxxyyyyzzzyyyyyyyzzzzzzz{{{|zz|~}|{zyyzz{{{{{zyyxyyz{{|{{zzz{{{{|}}~~~~|||||{{{zzyyxxxxwwwwvvvvvtqooon^TU_cdeglnutP:BFKOUVV[[`ST^itxk^TCEJYbjcNcXhovvrnmkkmpwtpph``aglg[VTUZY^agnnaLFJJNRSNEHU_aWKSW\\_ZXUSXaX_`]aowxxunkzmWWgjouup`^[Y]add^ZWTR[aVSWY^^YOHOYQWpmliKH_gRQZh{cMMdxhPM[kvxyz{shprqnjkpvxwvrqx{||{xvvvuvxxwvvuvwwwwvtrqrstwtspoqojkmpuwvointof__ktvuunjrjZW[cjnnmh\\PKThnoopqqrtttsrtwz}~|zyxvstvy|}{yvwxxyxxyyyyywvtrqrqqnjgc`]W`qw|yxyzzytnkjkosvxvqjfdeeehpsqlhlnorsttssropruwwrnprlighilqpmjjjkknrttsrsuuuvvvwwustsqppponljigggijklnoheiliddhmpwumihiigd`Z]fpohgeb]`c`_aekmmnnnmmmmmnoppopqstvvwwxyz{{{zyxxxwxwwwwxxyyyxxxxxwwwwwxxxxxxyyyxxxxxxxxwwxxyyyyyzzzzzzzzzzzzzzzzzz{{{|}}~}|{zzzzz{{{{{{yyxyzz||||{zzzzzz{{{||}}}~~}}}}||{{zzzyyxxwwvvvvvwwvusrstoc_`bgikoqp{fKCEJPXXP\\_NQ\\kswupTG>6?WiroZIO^iyxqkihjmtwwsod^_cmodVMLLJU_fkpg[SGGLS\\VVYX^cbSKLQ_edgc`^SZa`cnwxyz}yvv]LQ]emttrfecWY^eaZ[[[Ydl\\RUZ_]YWSSUNB<LacOQgfLJWevaMQgyhYf{|{zyz~{uvwvsooswxzwoipvyyvuttttuwxxxxwwwwwwwutsstttstsqqpopqsuusqmnokfbeirsojhdhie_]fkkhhjg^PPhtssttttuuutttw{~~|zywvtuvx{{xurswxyyyzzzzyyxvrommlkigeaWR`pu|yxxyzyuqnnnqtvwuojecefghnppnmnoopqrrrqnhkqtvvqlkkgedfhoqnkiiiikprrststuutuvuuuvxwtqponmlkjhfffgiklmkedjqrica`cntokjlmje`\\bkjfcaeijfa_^`dknnoppppponopqrstvwwwwwxxyyzzzzyxwwwwwwwxxyyyyxxxxxwwwwwxxxxxxxyyxxxxxxxxwwxyzzzzzzzzzzz{{{{{{{{{{{{|||}~~}|{{{{{{{{{{{{zyxyz{||||{zzzzzz{{z{{{||}}~~~~~}}|{{{{zzyxxwvvvvvvvvvuuuumegfcklossosYAIHLQYPPa[T[mmtyxr\\E><JZkj_]RT^l{wrljijou}{k[`_`dh`SNIEHLVbilm_LFGLSXXSYaflncQLMS^eiomlUUfbjuwwtxz{v\\NYZjpnquuvp`ciea_decaiqcRUZ^YZemke]N<IceV]njOMtrZXhytrx{{zzyz{||yzyvssttuuwuqtwzywutrqpsvwxxxxwwwwwwvuuuuutstutqpqqqrsrpqomlhedeltvtrurppslhlnjd`hmk[Qhwvvwwwwwwwwvvwz}~|zzyxvvwxyzwtqqvyzzzzzzzzyywsommllkkli^^lvw|yxxyyywtsstuvvwuojebdfdgjnpppppppqpppoldekoqslhffikprrqqonnligkqstuutrttsvvuuuw{zuqpnljijihfffghjijhccgmplfa]^fnlkjkkkgddmneflf\\[_]]`^`dlqrstsssrqqrsuvvxyzzyxxxxxyyzyyxwwwwwwwwwxxyyxxxxxwvvvwwxxxxxxxyyxxxxxxxxwxyyzzzzzzzzzz{{{{{{{{|||||}|~~~}||{||||{{{{{zzyzz{||||{zzzzz{{zzzzz{{{|}}~~~~~}|||{{{zyxxwvvvvvvwwvvvurpplgmorutpqieXQSUZ]e\\N^]lorwvbLGAWjiqwf[W\\kyztrmiikqu{zvo``cff[SURHIPYbkmc[SNORU[Y_b^^lqeTPV\\^ehnyytsrqvxsppux}~}|dPVZafmpwzzxhkkeccehkjntk[[[^^aeowrk`ZLSUVfwq[Rcy|qa_hwpt{yyyzyyxxxzyxwvvvtsrsy}~~~}|{xrnpsvwwwxwwwwwwwvuvvvutssstrqppppqpoommlhecdlvxwwwvvvvustsqhdhmj_Zmxwwxxwxxxxyyyz{|~~}|{zzyzzzzywtuxz{{{{zzzzzzxvtrrrqqrtsmovyy|yxxxyyxwwwxxxwvuplgedfjnprsrsrrrqqpooomihjmnpqqrrqotuuqonpqmhekrtuvurqssrwxvuvwwwuroljiijjhhiigeefifbafdeiiefeddgiihgecbcffcddc^YZ`a^^acnwyxvvvvwwwxxyyzzz{zyxxxxxxxyyxwwwxxxxwwwwxyyxxxxxwvvvwwwxxxxxxyyyyxxxxxxxyyyzzzzzzzzzz{{{{{{{{|||}}~~~}}||}}}||{{{{|{{{{|}}}|{zzzzz{{{zzzzzzz{||}}}~~~}}||{{{zyxxwvvvvwwwwwvusrponnkvxwssusfad^bkc[fg]opstsi\\MF_uaconY\\qzjlulhgkpvuyvibbgjeYTKGHJR[`ko`OPRRSVY^^ZVamnidVRT\\dgkv{|truwrqqqsv{}}q[V^hrxzwvy|zsmgkofjqtxwriijliigluwe_gc]TWmzqh\\^qtgfmpswy{{{xyxxvwzzzyxxxwvsoovy||||}}xoltvvwwwwwwwwwwwvvwwwuttsssrqpoppppooomkgdbcjwxuvwvvwwwwxwvusrojgnvxxwwxxxxyyzz{{||}~~~~}}{{{|{{{z{yyyz{|||{{{zyyyyxxvvuwxwxxwxxyy|yxxxxyyyyyyyyxvuromkjiorsststtutrqpopqqqrrqpoqsttrqssqnmmljhgfmstuutqorontwwvtrprttqnmkijkjkmmle\\`fd_`f`_gkihggcefedccdeba``abb_[`eedccboy{zyyyyzz{{{{{{zzzyxwxxwwwxxxxwwwxxxxxwwwxxyyxxxxxwvvwwwwxxxxxyyyyyyxxxxyyyyzzzzzzzzzz{{{{{{{{||}~~~}}}}}}}|{z{{{|||{|}}}|{zzzzz{{{{zzzzzyz{{{||}}~~~}}|||{zyxxwwvvwwwwwvutsrqpoozzwvuyvqmnkmqliqrgkmqrrhZG<Zvc_hj^qyznSgulggkpsuulbegjkcXWNJILS[^kqr`OPPTW]c^Z^emnk^TTW\\dffjovrrvwssuvuux{~ua\\ft|}wtuz{smkvwhdnxzxqjs{pankjtr^YkreSZpt^bVZgypnyvlty{|{zyxxwwz{zyyyywrompwz|||~~zwv{xwxxwwwvvvvwvvvwwwvttsssrrqpppppppomkgcabhxwwwxwwwwxxyxxxwvtpovyxxxxxxxyzz{|}}~~~~~}~~~~}}~~}}}}}}~~~}}||{zzyz{||{{|||}|{zyyy~|yxxxxyyyzzzzzxutrqqspmmpppqrtutsqpopqrtuutrpoprttrqqonlnolffiknqqqrtsqpjhnsutojhknopnlggijkmljihddgc_`h`_ghhigc^_^^``dijgca``beb_cdfigb_oz|{{z{{||||{zzyyyyxxwxxxxwwxxxwwxxxxxxxwwxxxyyxxxxwwwwwwwwxxxxyyyyzzyyyyyyyyzzzzzzzzzz{{{|||{{||}~~~~~~~}|{z{{|||||}}}}|{{zzzz{{{{{zzzyyyzzzz{{|}~~}}|{zyyxxxwvwwwwwwvutsrqpq|zwvuxvtrrtwusnfnpfW[bcKFB;Heiqsmnn_Z]SkoooprsuuroonlnngYVTSNOSYalou]QRVY\\bgdflklkka_`Y\\dilifikuxxwyzzwvvy|~wgbkvz||xsuvvoknz|oclvxtmkw~sjvnnqlWVkseUfztd\\WT]r}|zyjkpwzzyyyyyy{{zyyyxvqqsvy{}}}}~zqnssuxxwwwvvvvvvvvvwvuttttssrrqppppppomjfb`agvwwwxxwwwxyyyxxxwwvvwzyxxxyxxyz{|}~~~~~~~~~~~~}}||{{{{|}}}|}}}~~|{{zz}|zxxxxyyyzzzzyxsolloqpomlnmoprssqonmnqrsssrpnnnoqsrppomlprnigilnmlklorpniikorpkedgijlkjgghjlnljfgmmnhdchcdedfilfa_\\Y[\\bgigggdbdeeb`^aegaarz{{{z{{{||{zzzyxxxwwxxxxxwwwwxxyyyyyyxxwxxxxxyxxxwwwwwwwwwxxxxxxxyyzzzzzyzyyzzz{{{zzzz{{||}}|||}~~~~~~}|{{||}|||||{|{{{{{{{{{{{{{zzyyyzzzz{{{|}~~~~~}|{zyyzyywvvvwwwwvvusrpoq{zxxwvtqkikpkon_ei\\JL_kYOE9<S_popdX__]^mmvzyxxwxrlnnoqni[[ZXVUVZblkhUf[ZbdilkmqhfehkohYih_`dbipv{zz|}|wvvwy|wqloy}{zysprolkoy|vkptsqgfu~uggvsmcR^qsaXhyzpdbijdxyoxsjgowvxxxzxy{zyxxwvsporrrx{~{|}qSCKUkuwwwwvvvvvvvvvvuuuuuttssrqqqqqqpnljfcaaeswwwxxxxwxxyyxxxxxxxxyyxxxxyyz{|}~~~}}}||||}}}}}}}}}~~||{{{~}}|{yxxyyyyyyyyyywrkghilnnljnqppqqqpljhknoqsrnlhnnopqqponmnqspjijlokihhkqnmmkijnmkihkmnnlifefglnkigiouulfdhkjfabhnfa`WY\\Xccadhhedefdb__bdefkuzzzzzzzz{{zzzyyxxwwwwwxxxxxwwwxyzzzzyxxwxxxxxxxxwwwwwwwwwwxxxxxxxyyyzzzzyyzzzz{{{{{{z{{|||}}}}}}~~}|{{||||{||{{|{{{{{{||||{{{zzzyzyyzzzz{||}}}}~~}{zzzzyywvuvvvvwwwvtsqopuxyyvmom\\MZ^\\deZZWLHMctkYD8>LRWimga_hknrrtvltvyz{wsqqolhgg`]dZ\\_dhkcTWVZfgmrpd^[Y[^fnb\\cnYWebdek{}}||wpnswyurwupz~zzxtmjgknqvyvtvqsqf^fwufkv}rhfkstpquz{ypgnmlsjegum\\_kuxxxyxyzyyxvutsnmllnvz}{{z{xcFJWfrwwwvvvvvvvvvvuttttttssrqqppqqponkifb``dovwxxxxxxxxxxxxxyyyyyyyxyyyyz{||}~~~~~~~}}}}}}}}~}~~~~~}}||||~}||{zyxxyyyyyyyyyxuqkkiknnmllpsrpppqqkfdgkmorqppiknoppqqpnmoqqpmloqqmmnnoomllkjjkklllopqolgdbabilic_`fqqfccillgbchleafgfddg_[_fgfffc`a`abbeiqx{{zzzzzzzzzzyyxxxwvwwxyyyyxxwxyz{{{zyxxxxxxxxxxwwwwwwwwxxxxxxyyyxyyyyyyyyyzzzz{{{{{{{{{|}}}~~~~~~}|||||{{zzzzz{||{{{||||||{{zz{zzzzzz{{z{{||||}~~~|{{{{zyxvvuuuvwxwvvtsppruxvmgtrSAXUT`cUT[[IB^zofCFKWTkkonhZ[eomj\\^^lswy}~|yvsmfge_cfagiic]ZSQQWbiqrq_MSUUZmp`YSaVVka[]kz|}~|tk_jzynotvsz}y{xupontxwmjnrrow{o\\Vovhirniuuw{|zzy}}}tihrm`V][yoflntxxwwxxxyywtsrsoibfkv{}|{y{xm^dlntwwvvvvvvvvvvvuttstttssrqqppqqpomkheb``cmwxxxxxxxxxxxxxyyyyyyyyyyyzz{|}}~~~~~~~~~~~~~~~~~}||||~}|{{zyyxxyyyyyyyyyxuqoonpqooonnqonppqrmgfhknpqpptpppssrqrromlnppmllmnoprssolllmoomkklmooomgdbabcimiecdgmk`_ahlkiecbgiklqmjqvjbcdffec^]abcccfmuz{zzzzyyyyzzyyxxxxwvwwwxyyyxxxyz{||{{zyyyxxyyxxwwwwwwxxxyyyyyyyyyxyyyyxyyyyyzzz{{{{|{{{{|}}}~~~~~~}}}}}||{{zzzz{||||{|||}}||{{zz{{zzzz{{z{{{||||}~}|||{zzxwvvuuvwwvvvutsrrtvvofpnO>OSPY]TTNBH;^sycGf_aUiturld[\\cbiZHQdntwz|||xrlfc][befmomaTSUTSWbjof_^VY[X]idYTQQT^oic`cir}}zsi_dstlqtvy}~|{yzyyw|{pjlonoxoZQNaruwqaTdtz}~~|x}}ztkbptn[V`|wssjuxxxwwxxyyxsnmpojcgnvxuwx|yuvrlrtxwvvvvvvvvvvvvvttstttssrqqppqqonljgda__blvxxxxxxxxxxxxxyyyyyzzyyzzz{|}~~~~~~~~~~~~~}}}|}|{zzzyxxxyyyyyyyyyusqonopqqqqnmmlmnoprpnlnpqqpolrssstvsrssnkfjnnmmmmmnoqrronnnqtuqljiknmkjjjgdbcehgfefgikdbbgknkgb]`ltokjlsxpffdgheb^abcdecgowyzzzyyyxxyyyyxxxxxwwwwwwwwxxxyz{{{{{zzyyxxxyyyxwwwwwxxyyyyyyyyyyxxyyyyyyyyyyzz{{{{{|{{{{|}}}~~~~~~~~~~}}||{{zzz{|||||||}~}}||{{{zzzzzzzzz{{{||||}}~~}||{zywwvvuvvvvvvvutssssssj_E<>IUU_hZUWZPCdjsohlgjmsvwrlYX][XJEHOaouxzxxxtmfigcabgllif\\SQUY[]fjja`\\P_ea`]ZUQPMYqvqcPQ^p{vpjhjnqooruxyyyyz||zv{|yuqpqovuVINasvsqnjqtwz}}{vzzzxrikjo`Re~}x|wvxyyxwxxxvuukhlrssoqtrkmx|tpsupzyxvvvvvvvwwwwwwvtsstttssrqqppppomkifc`^^`ivyxyyyyxxxxxxyyyzyyzzzyzz{|}~~~~~~~~}}~|{zzzyyxxxxxxxyyyyxtppooppqqrrqnllmopqrrrqrsrqpoqjhomossqqqkhchnnnmnomkmoqqppppqrrpkhgilkiiiihfdcehgfddddiiihekmokb\\`ktrlhkmlieediolfcdefigdgqwyzzyyyyxxyyxxxxxxxxwwwvvuuvvxyzzzzyyyyyxxxxxyxwwwvwwxyyyyyyyyxxxxxxyyyyyyyyyz{{{{{{||{{{|}}}~~~~~~~~}}||{{zz{|||||}}~~~}}||{{zzzzzzzzz{{{|{{||}~~}}|{zxwwvuuvvvvvuuuttsrpkjeTD<FX[cqY\\Z_cLjklsroknuxxxtn``]]]ZSOSdzvz|}{xtqj^^elllmkc[WRQUY^cghffi]T_hjhb^YVUU]szueU_q{}wooqqskjrkvvwxxqx{}}zuw{~}xsruru{q\\TivlXO^mpqoz|vwssvzwnf`cmXDQ}|ywwxxyyywxxwrtxunnstsnluriq~unqsuvwwwvuuuuuvwwwwwwvtrsuvtssrqqppppnmjheb_\\\\^cuyyyyyyyyyyyyyyyyyyyyzz{{|}}~~~~~~}}|{zyyyyxxxxxxxyyyyvqnopqqqrrrqpnnpqrrqqrstsrqomoqjcefjlnonkgfdjppommopnnoppqrrqqponjgdfjkiijjihfeeghgecbadgjjegjlh^Yalsvohfffefecdghggfcfhgfksxyzzyyzyyyyxxxxxxxxxxwvuuuuuvwxyyyxxwwwxxxwwwxwwwwwxxxyyyyyyyxxxxxxxyyyyyyyyyz{{||||||{|||}}}~~~}~~~~~~}||{{{|}}}}}}~~~~}}}|{{zzzzzzzz{{{{{{{{|}}~~}}~~}|{zxwvuuuvvvuuuuutsqomnl^K:EZZapinjrndulnqqquy}}zxwtsh\\`b^YZVizwxyyw|~tg_]`ijjg]TRQQSY^cedbgcVWfib\\`[VXY[^otncYUfx|tlgiownjptqnqqvswz}}zurwzwvw{|{ygVlssYDKfpmmwukqnlmoliuogkbQLyyvvwxyyyyxwxxtuzyusvwvsswvqomfjpsvxxxvuttttuvwwwwwwvtstuuttsrqqppppnljgea]ZY[`ryzzzzyyyyyyyzyyyyyyz{{||}~~~~~~~}|{yyyyyyxxxxxxyyyyxspqrsssrsrqonpstttrqqsttrpnlmmjjmjljllliggflrqoomlopoonnnpqpppoolgfhjlllllkigefhiheb`__beecaeig`^emqqjcb`_aca`^]aehgddgdgpvzz{{zz{zzzyyxxxxxxxwwvvuttttuvwxxwvvuuvwwwvvvwwwwxxyyyyyyyyxxxwwwwxxyyzzzzzzzz{||||}}}||}}~~~~~}xx{}~~~}}|||||}}}~~~~~~~}}}|{{{zzzz{{{{{{zzzz{||}}}||}}~~}}{zxwvvvvuuttuuttsrpoomgX?Qb_bkxwvyswxoqrsv|~{ywvuttjfiimmj^s{xwwwy{oi`[[aded[SPPRX\\`bcb_^]\\chliefd`\\Y[V`mg_Xaq}}|uoqsvrnktprrostux{|ztou~}}}}|n\\qnmUYtzumqyrhlhgffheuvppkcTvwvvwxyyyxwwxwwxzyxwxxzyy|{td[gpstvwxwvuttttuvwwwwwwwutuvuttsrqqpppomligd`\\YWW\\nwyyyyyyyyyyyzzzyyyz{{{}~~~~~~}~~}|{zyyyyyyyyyyxyyyyyvtttttrqrsrplnqtutsqqsttrplmpttsqprnmlkihgejookllnorqpoopqppqrrrokiikmnommmkhffhjigcbb`adgkgmlkijkmmha^_]\\]^a`]\\_bffedeejsyzzz{{{{zzzyyxxxxxxwwwvuttttuuvwwwvvvuuuvvvvvvvwwwxxyyyyyyyyxxxwxxxxyyzzz{{{{zz{||}}}}}}}~~~~~~~yrsxz{~~~}}}||||}}~~~~~~}}}}|{{{{{{{{{{{{zzzzz|||}|||||}~~~|{yxxwvvvuttttttsqppooqiUa_eoptuuvuwvtssstvvtpstrplnrlgoumizzxxww{|~zumf]W]`cc_UQRS[_`ccbabhgfefiidbaWV[TYbdja^iv{zyvvvvuqtsqmlnxwwwwz{vpvyxv{~|}}}qbqvp`Sm{yow{vmgfddegdw|qgak`wwxwwwxxxwvvwxzyyyyyz{|{|}~|pmwyvuvwwvutttstuvwxxxxxwutuvvusrqqppppomlifc_[XUVYfvyxyyyyyyyyyzzzyyzz{}}~~~~}}}}}~~~~~~}|{zzzyyyyyyyyyyyyyyxxzvttsqoqqroikorqqrqprssrplmqqqqqqqpomljhfehmnjimnoqqppopqpoprsrpmkjlnppppomigfhjjhdedcbddfghijmopnid`_`bcddbb_]abdddddfntyzzzzzzyyyyxxwwwxwwwwvuuttuvvvvvwvvvuuuuuvvvvvvvwxxyzzzzzzzyxxxxxyyyyyyz{{{{{zz{{|}}~~~~~~~~~~~~zwvxyz|~~~~}}}}}~~~~~~~~~~~}|{{{{{{{{{{{zzzzz{{{|{{{||}~~}{{zyxwvvuttttttsqqpppqqnnjlpstuutvvvutsrstrqrrrpoonmkjmoruwyxwuuxzywsplc^_acca]Z[T]_\\cbfbdlmhefiibVUV_\\Vcb^kc__dxvyyvuuwrprslctyvvusvyrqzujgq{{x|}{sorusqqx}xuxwwtfedcegcwurstl`xyxwwwwxwvuuwxzyxzz{|||{{||{xvwywvuvvvutttstuwxyyyxwvvvxxxvtsrqpppppomifb^ZXUUW^vyxxxxyyyyzzzzyyyz{|~~~~~~~}}}||||}}}}~~}|{zzzzzyyyyzzzzyyyyyxuvssrqonoonkjlnpmkqqprsssrpprsrrrrqqpnlkigfdbjlnpooppooopponnoqqpmmlkoqruvupihhikjhfgggfdcedefinqqnia^adjlnmifdeedccdceiquxyyyyyxxxxxwwwwwwwwwwvuuuuuvvvvvvuuuuuuuuuvvvvvvwwxxyz{{{{zyxxxxxyyyyyyz{{{{{{{z{{|}~~}}|{zyyz}~~~~~}~~~~~~~~~~~~~}}||||{{{{{{zzzzzz{{{{{{{{||}~~~}}|{zyxwvvuttuttsrqqqrssssstuvvvuuuvvvusrqqpopqrpmkifffhnuvwxxwvuvvspnnnjggfegfdbdja[ad`a]afhgfehleYUZe^Zmqjqkhgevswxtssxtmpvqswopqkinthbqzl_gmuruyxsopuvt{}xwzxyyndjogffvxvx}yqyzyxwwvvvuttvwywwzz|~~}{{{|{xvvxxvuuvvutssstvwxyyyxwvuvxxxvtsrqppoppomiea]ZXUUU[nwyyxxyyyyzzzzyyz{|}~}}}}|{{{||||}}|{{zzzzzzyyyzzzzyyyyxvpppqsrrpnmjllmmkjinpqrsstsrrsssrrqponmlkkmoljmqtrpnnoqpoonmllmnoomqqimlmuwvpkjiikjiggghgfdccdfimppnhcaceilnmhfhkhebdfgimsuwxxxxxwwwwwwwwwwwwwwwvvvvvvvvvuuuuuuuuuvvvwwwwwwwwwxxyz{{zzyyxxxyyyyyyyz{{{{{{{{{{||}~~}}}}}}{ywy}~~~~~~~~~~~~~}}}|||||||{{{{{{zz{{{{{{{{{{|}}~~~~}}}||{zyxwwvutuuttrqqqrrssuvwwwwwwvvvvvutsssrqqrrponia[`gsvvxyyywtsrolllpppolihfbchq`Wbf_a_a]^bb`ekh`^irkcszsqnlkcorxzvtsvui`ijjeiooklrs]M^|seXcuuruusmgrtqu~}tpxz{{tjyxigfjw|||}vyyxxxxwvvusqssuruxz|~}{yz{|{xvtutttuvvutsttuvxyyyyxwvuvxxxvtsqpoooopolhd`]ZXVTSXfwzzyyyyyyzzzzyz{|}~~}}}}}zz{{{{{||{{{zzzzzzzzzzzzzyyyywtmmmqrsusqjhnlkkiiknqprstutsuttvutromkjjlljlnonqsomlmoqqponlkkklmnmrsihccoqoonmlkkjihggiifcacgijllnojgeddfgigccgkgeadhmprtuvvvwwwvvwwwwwwxyyyyyxwwvvvvvuuuuuttuuuvwwwxxxxxxwwwwwxyzzzyyyyyxyyyyyyyzz{{{||||||||}~~~}|}||}|zwtx|~~~~~~~~~~~}}}}}||||||{{{{{{{{{{{{{{{{{{||}}~~~}}}}||}|||{{zyxwwvuutttrqqqqrrsuvxxxxxxwwwvvvuuuuuuuuttsxqd\\akyvwyzzywtqqonoprrqpnligcegf[U]eckkcYY^]`ehc\\cowrpyuoigfaZjrvzxvrrugS]egjvmfeiklV>InqfVf~|ssqnhelllgmsolt{|yuu~zmjpqytutjbvxxyxwwwvusqnortwyz|}{xwyz{zxvsqprtuvvutsttuwxxyyyxvuuvxxxvusqonnnnoolgc`]ZXVUTW`ryzyyyyyyzzzzz{|}~~~~~~~{{{||||{{{{{{zzzzzzzzzzzzyyyxvronoprtuurkhnlkkkilpssssrssrttsvvurmjhgikmmoqqppppmhktsrqpnlkjjlmoppomgdehmlkjknlmljighjida`behgefkpmigddhikfabdfeecglqtuuuuvvvvvvvwwwwxxyzzzzzyxwvuuuuuuuuuttuuvvwxxyyyyyxxwwwwxyyzyyxyyyyyyyyyyxyzz{||}}}}|||}~}}||||||{xusvz|~~~~~~~~~~~~}}}}}||||||{{{|{{{{{{{{{{{{{{{|||||||||||||||||{zyxwvuutttsrqqqqrstuwyyyyyxxwwvvvvvvwwwwvuuvuqoosvxxyzzywutttttsssrqpnmmlkjd[TW^eqpXPU[\\cgf^`inrrqjmjfde_`qsvzzwrqqeUbooprqmhh\\^P=A_pf_mwz{qkgddgedXTkolo{vopkmnfvuatsLXvvswvwxxwusqlkswxz{{|{wwz|{yyvsposvwwvuttuuvxxxxxxwvuvwxyywusqonmmnookfb^[ZXVUUVZfvyyyyyzzzzzzz{|}|{|}|||{{{{{{{zzzzzzzzzzzyyyxvsqprsrstsrolnljjjkmorsrqopqpsqrwxtponlklmmnprqponmlkmoqqqponmllmnpqrqpommnonnnnpllkjjkjjhc`^`cdcabgnmigedjkkfbceeeefkptvvvvvvvvvvvvwwwxyyyzz{{zyxwvvvuuutuuuttuuuvwwxyzyyyyyxwwwwxyyyxxyyyyyyyyyyyzz{{|}}}}}||}~~||||||{{zwttuwz~~~~~~~~~~~}}}}}||||||||||||{{{{{{{{{{{{{{{{{{{{{||||}}}}|{yxwvuvuuutsrrrrrrttvxyzzzyyxwwwwwwxxxyxwwwyyxwvwxyyyyyxxxwwwvvvvuttsssrrqqnhb``hpodTRV]efa[donnslZbilnje^rvwz|{rib\\[ktroorthd[>59?TkdXPN]sticceg`ZSLl|riuxd^clpgy~yZfpEL[qrtvyxxxwutposvwx{y{{xwxyxxxvrpquxyxvutuvvwxyyyyywvuvwyzywusqonmnopplgc_\\[ZYYZ[]cqwyyzzzzz{{{{|}~|||}}}}|{{{{{{{zzzzzzzzzzzzyxvusrtvuqnnqpmiiijjihknrqommnnnkkprrssrpqqponoooppporojhorqqqqponoprstttvuuuttttstmkjkkmmljda^^`a``bdiihgfehigcchihhhlptuwwwwwwwvvvvvwwxxyyyyyyyyxwwvvvuuutuuuttuuuvvwwxyyyyyxxwwwwxxxxxxyyyxxyyyyz{{{{|||}}}}}}~~|~}|}||||{{zyxxwwy|~~~~~~~~~~}}}}}}||||||}}}}|{{{{{{{{{{{zzzzz{{{{{{{|}}~~~|{zyxwvvvvuttrrrrrstuwyyzzzzyxwwxxyyyyyyxxxyyyyxxxyyyyyxyxxxxwwwwwwwwwwvvvvvsqmlnqnbPMUX[ZULUioeoud_agkkcctuy|zi]YZbpsqmkmtigp`G76Qf]OI[s|umfb_^YTQNqzij|ub]fvxqwvQZr]NL_`nvyxyyxxxwutuutuqtvyyustwwvrpqtwyywvuvvwxyyyyyywvuvwyzywusrponopqqokgdbabdegikntwxyz{{{{||||}~~}}}~~~~}|||||{{{{{{zzzzz||{yyxwusuvwsnnpqrnmlmljgknqomllmmnkjoqstsrssttsqommoqrrrmlqstssttsrrstuwwxxyxxxwwwwvwqpnmkmnmjea^]^^^beeefhhgeeecafkmllortuvwxwxyyxwvvvvvvwwwwwxxxxwwwwwvvvuuuuuuuuuuuvvvwxxyyyyxxxxwwxxxxxxyyyyyyzzzz{||||||}}}}}~~|}||}}}||{{z{{{yxyz}~~~~~~~~~~}}}}}}}}}}}}}}}}|||{{{{{{{{zzzzz{{{{{zz{|}~~}||{zyyxwwwvvusrrrrstuvwwyzzyyxxxxxyyyyyxxxxyyyyxxyyyyyyxyxyyxxxxxxxxxxxxwwwxwwvuvtqjZX]XUSNMGTheozojnuvsehpty{|vf^[^ipnnljlla`vx^;>cZUJE\\v}tpjaUOPSPNu{pe}|mY[syq{dFW|uE/3Cdtwxzzzzzyyyxtpnmoqvxuutsqprqrtvxxxxxxxwxyyyyyyxwvvwxyzxvuutssrsttspmllmoqstvwyyzz{{||}|||}}}~~~~~~~~~~}}}}|||{{{{zyxy{}~|zxzyusrsuspppstrspoqnnpsroonnmnnosqqttsstuwxwvqljnrttttuvvvuvvwvuvvxxyyzzzzyyyxxwwwttqnmmnmlhdb`__aceefgiihggghiknppqrsuuvwwxyzyxwvvuuuvuuvvvvwwvvvwvvvvvuuuvvvvuuuuvvvwxxxxyyyyyxxxxxxxxyyyyyyz{{{{|||||||}}}}}~~}}||}}~}||z{|{{zyxy|~~~~~~}}}}}}}}}}}~~}}}}}|{zzzzzzzyzzz{{{{{zz{{|}}||||{{zxxwwvvusssrrstuvwwxyyyyyyyxxxxxxxxwxxxxxxxxxyyyyyyxxxxxxxxxxxxxxxxxwwxxwvvuvttqojehbXcfhlnruqnsxvrmnrtwyxupha`uqklkloqjjttj@ZsIKMOP]osqmeZPRPKNtyvpquxgVgzzuuVMY{nH07Letvwyz{zyyyzytmqqonmqvvspqrrrstvxxxxyyyxxxzzyyyxwwvwxyyyxwvuuuttuuuuuuuuvvwxyz{|||}}}~~}}}}}}~~~~~~~~~~~~}}|{{{zxvx|~|ywwvsqprvvusrttstqlqvvtvvsqppopqrtqnoqsuvwyzyzvsqrtuvwwxxxxwwxxxxxyyyzz{{{zzzyxxwwxxwvrpppponljigggghhjkkkkmmllmoqrssttuuvwwxyzzyxwvuutttttuuuuuuuvvvvvvvuuuvvvvvvvvvvvvwxxxyyyyyyyxxxxxxyzzzzz{{{{|||}}}}}}}}}}~~~}|}}}~~||{{|||{yxy{~~~~~~~~}}}}}}}}}~~~~~}|{{{zzzzzzzzz{{{{{zz{{|||||||||{yyxxwwvuttssttuuvwxxyyzzzyyxxxxxxxxxxxxxxxxxyyyyyyyyyxxxxxxxxxxxxxxxwwwwwwwwwwwwwvwtnruuuwzywvwxwusstuwxxvsnilztkjkpuxrlpqmFptM?QjqopqqpmePNPRTrsoigeagdoz~|xvcPTsyrSOcqvwvxz{zxwx{{vrsuuslmprqpqrtuvwxxyyyyzzzyyzzyyyyxxwwwxxyyxxwwwvwwvvwwwwxxz{|||}}}~~~~~~~}}}}}}~~~~~~~~~~~~~~~~~}||{zxvwz{zxyxtrponqtuuutrqqrsnquwvwywtrrqqrrqsrpsvwxyyzzzyxyvvvwxyyyyyxxxyyyyzzz{{{{{{{zyyxwxyyywusrssssrrpnmljiilnnmnprqpqrstttssttuvvwxyyxwvuutttstttttuuuuvvvvvvvvuuuvvvvvvvvvvvwxxxyyyyyyxxxxxxyyzzzzz{|||||}}}}}}}}}}~~}||}}}}}||||||{yxy{~~~~~~~~}}}}}~~~~}|{{{zzzzzzzz{{{{{zzz{{|||||||{{zzxxxxwvuutttuuvvwwxyyzzzyyyyxxxxxxxxxxxxxxxyyzzyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxyzyyyxxyxxxyxwxyyxxwwwwwxwwusux|upmnrw{yusro[zu_GXmxurssssn^Y]ceuroigcgsrvwxurrhMUscXgkuvutuwxyxwuutwwvtvxwqpppqqrstuvwxxxyyyyzzzzyyxxxxwxwwwwxxxxxwwwwxxwwwxxyyz||}}}~~~~~~~}}}~~~~~~~~~~~~~~~~~~~~}}|{ywwyxwuxxvtrpoqstuutrpoputrmsvxzxusssrrsqtyyxxyyyyyxxxz{ywwxxxyyyyyyyyyyzzz{{{{{{zzyyyxwwxxxxwuutuuuutsqqpommopqqqstttsssttssssstuuuuvwvuttttttttttttuuuvwwwwwvvuuuuvvvvvvvvvvvwwxxyyyyyyxyyyyyyz{{{{{|||||}}}}}}~~~~~~}}||||}}}|||||{yxy{~~}}}}}~}||{{{zzzzzzz{{{{{zzz{{{|{|||{{{zzyyyzyxxwuuuvvvwxxxyyzzzzzyyyxxxxxxxxxxxxxxxyzyyyyyyyyzzzyyyyyyyyyyyyyxxxxxxxxxyyz{xyyxxwwxwxyyzyyyxxxxxxwxzz{vusruxwyxvuvsw}sfvuwvuvvutsqmnrsxvtqpnrspturokhpZ`reQpsvvssuvwxwwutrtuvuuuuuutssstuvvwwwxxxyyyyyyxxxwwwwwxxwwwwwxxxwwwwwxxwwxyz{|}~~~~~~~~~~~~~~~~~}|{ywxyxwvxxwvuutuuuuutttstsrrqsvyzyvuuuttuuvwxyyyyyyxxxzyyyxxwwxxxxxxyxxyyyzzzzzzzzyyyyyxwwwwwwwvuuuuuutsssrrrqrrssstuuutssssssrqrsssssttttssstttuuuttttuuuvwwwvvuuuuuvvvvvvvvvvwwwxxyyyyyyyyyyyyyz{{{{{|}}|}}}}}}~~}}||||}~}}|||{yxx{~~~}}}~}|{{{{{zzzzz{{{{{{zz{{||{{{{{{{{{{{{{zzyyxxwwwwwxxxxyxyzzzzzzzyyyxxxxxxxxxxxxxxyyyyyyyyzzzzzzzzzzzzzzzyyyxxxxxxxyzzzzzyyyxwxxxxxyyzyyyyxxxxxxyyxvvvvwxyxwwwwxwuttuwwuuvvuutuvvuuuvvuuuuuuttssssrqqrrsuvuuuuvvwwwvtsttuvuuvvvuutuuvvvwwvwxxxxxwwwwwwwwvwwwwwwwvwwxxxwvwwxxwwxy{}~~~~~~~~~~~}{yxyyyyz{{{{zyxxxwvvuvvvwvuutuwyyxvvvvvvvwxxyyyyyyyxxxzyyyxxwwwwwwwwxxxxyyyyyyyyyyyxxxxwwvvvvwwvvvuuuutsssrrssrrrrstuuutrrrrrqppqqrqpqrrsrrrstuuvvvuuttttuuvvvvuuuuuuvvvvvvvvvvwwxxxyyyyyyyyyyzzz{|||||}}}}}~~~~~~~~}}|||}}}}}||{yxy{~~~~~}|{{{{{{zz{{{{{{{{{{{|||||{{{{{{{{z{{{{{{zzyxxxxxxyyyyxwxyzzzzzzyyyyyyyyyyyyxxxxxxxxyyyyyyyz{{{{{{{zzzzzyyyxxxyyyyzzzzzzzzyxxxxxxxyyyyyyxxxxxyxxxwwwwwwxxxxxxxwwwwxxxwvvvvvvwxxvvvvwwwvvvvvuvvvvvvuvwwwvvvvvvvvvvuuuuttuuvvvuvvvvvwwwwxwwwxwwwvvvuuuvvuvvvwwwxvwwxxxwvwwxxwxy{}~~~~~}{yyyz{{||}}||{{{zyxwvwwxzyxxwxxyyxwwwwwwwwxyyyyyyyyxwxyyyyxwwwwvvvvwwwxxxxxxxxxxxwwvvvvuuututuvuuuuuutssrrqqrrqqqqqrsssrqqqqqqpppqqpppqrrrrstuuvvvvvuuttttuuuuuuuuuuuvvvvvvwwwwxxxxxyyyyyzzzzzzzz{|||||}}}~~~~~~~~~}||||}}}}}|{zyz{}~}||{{{{zzz{{{{{{{{{|||}}|||{z{{zzz{{{{||{{zzyyyyyyyyyyxwwxyyzzzzzzzzzzzzzzzyyyyyxxxxxxyyyyyyzzzzz{zzzzzzyyyxxyyyyyzzzzzzzzyxxxxxxxxyyyyyyyyyyyxxxxxxxxxxxxyyxxwvvvwxxwwwwvvvxwxwvvwwwwwwwwwvvwwwvvvwxyxxwvvwwwwvvuuuuuuuuvvuuvwwwwwxxxxxxxwvvvuuvvvvvvvvvvwwxxwwwxxxwvwxxyyz{|}~~~~}|zzz{||||}}}}|}||{zyxxxxzzyyxyxyyxwxxxxxxxxxxxxxxxyxwwxxxxwwwwvvvvvvvvwxxxxxxwxwvuuttttssssssstttttttssrrrqqrrqpppppqqrqqqqqqppppqqqqqrsrrrsstuvvvvvuuuutuvvvvvvvvvvvwwwwwxxxyyyyzzyzzzzzz{{{{{{{||||}}~~~~~~}|||||||||||zzz|}~~}}|||{{zzz{{||||||}}}}}}}}|{z{{zzzyzz{{{{{zzzyyyyyyyyyxwwwxxxyyzzzzzzzzzzzzzzzzyyyyxxxxyyyyyzzzzzzzzzzzzyyyyyyyyyyzzzzzzzzyxxxxxxxxxyyyyyyzzzzyyxyyyyyyxxyxxxxwvvvwxxwxxxwwvwwwwvvwwwwwxxwwwwwwwvvvwxxxxxwxxxxwvvutuuuvvvvvvvvwwwwvwwxwwwxxwwwvvwwwwwwwwwvxxxxwwwwxxwvwxyz{|}~~~~~~}{z{||||||}}}}~~}}|{zyzzyyyyyyyyxxxxxxxxxxxxxxwwwwxwwwwwwwwvvvvvvvuuuvvwwwwwwwwwvtttsssrrqrrrrsssssssssrrrrrrqqpoopppppppppppppqqrrqqrssssstttuvvvvuvuuutuvvvvvvvvvvvxxxxxyyyyyzzzzzzzzzz{{||||||}}}}}}~~~~~~~}||||||||||{zz{}~}~}}}||{{{{{|}}}}}}}~~~~~}||{zzzzzyyyyzz{zzzyyyyyyxxxxxxxwwwwwwxyyzzzyyzzzz{{zzzzzzzyxxxyyyyzzzzzzzzzzzzzyyyyyzzzzzyyyyyyyyyyyyyxxxxxxyyyyyyyzyxyyyzzzyyxxyxxxwwwwwxxxxxxxwwwwwwvvvvvwwwwwwwwwwwwvuvwwxxyyxxxyyxwvuttvuvvvwwvvvvvvvvvwwwwwwwwwwvvwxxxxxxwwwxxxxxxxxwxwwwxy{|}~~~~~}||{|}}}||}}~~~~}|{{zzzzyyyyyyxxxxxxxxxxxxxxwwwwwwwwwwwwvvvvvvvuuuuvvvvuuvvuutsssrrrrrqrrrrrrrrrrrrrssssssrqpooooonnoopppppqrrrrrssttsssttuuvwwvvvuuutuvvvvwwwwwwwxxyyz{{{{{{{||{{{{{{{|}}}}}}}}}}~~~~~}|||||||||{zz{|}~|||y~~~~}||{{||}}~~~~~~~~~}||{{zzzzyyxxyyzzzzyyyyyyxxxxxxxxxwvvvwxxyzzyzzzzz{{{{{{zzzzyxxyyyyzzzzzzzzzzzzzzyyyzzzzzzyyyyyyyyyyyyyxxxxxxxxxyyyyyxxyyyz{{zzyxyxxwwwwxxyyyyyxxxxxxxwwvvvvwwwwwwwwwwwwvvwwxxyyyyzzzzxwvutuvvwvvwwwwwwwvvvvvvvvvwwwwwwwxyyyyyxxwwxxxxxxxxxxxxxyz|}~~~}||{{|}}||||}~~~}|{{z{zzyyyyyxxxxxxxxxxxxxxxwwwwwwwwwwwwvvvvvvuuuuuuuuttuuttsssrrsssssssrrrrqqrrrrrsssssrqpppppqppooppqqqqrssssssttttssttuuvvvvvvuuuuvwwwwwwxxxwwxyyz{|||||||}}|||||||}}}}}}}~~~}~~~}||||||||{{zz{|}~zxz|x~~~~~}||||}}~~~~~~~~~~}||{{{zzzyyxwxxyyzyyyyxxxwwwxxxxxxxwvvvvwxyzzzzzzz{{{{{{{{{zyyyyyyyzzzzzzzzzzzzzyyyyzzzzzzyyyyyyyyyyyyyyxxxxxxxxxxxxxxxyyyzz{zzxxyxxwwwwxxyyyyyyyyyyyyxwwvvwwwwwwwwwwwwwwwxxxxyyyyzzzzxwvuuuvvvwwwwwwwwwvvvvvvvvvwwvwwwxxyzzzyxxwwxyxxxxxxyyyyyz|}}~~}||{{{||||||||}}}}}~}}}|{{z{zzzyyyyyyyyyyyyyxxxxxxwwwwwwwwwwwwwvvvvwvvuuuuuutttuutttssstttttttssssrqrrrqrrrrrrrqqqqqqrrqpppqqrrrsstttttuuuuttuuvvwwwwwwwwvwxxxxxxxxyyxxyyz{||||||||}}}}}}}}}}~~~~~~~~~~~~~}|||||||{{{zz{|}~zxyzy|~~~~}}||}}~~~~~~~~}}}}|||{{{{{{zyxwwwxxyxxxxwwwwwwwxxxxxxxwvvuvwxy{{{{zzz{{{{{{{zzzzzzzzzzzzzzzzzzzzzzyyyyzzzzzzyyyyyyyyyyyyyyyyyyyyyyyxxxxxyyyzzyyyzyyyyxwwwwxxxyyyyyyyyyyyyxxwwwwwwwwwwwwwwwwwxxxxxxxxxyyyyxwvuuvvwwwxxxxwwwwwwxxxxxxwwwwwwxxyzzzyxxwxyyyyyyyyzzzz{|}~~~~~~~~}||{{{{{||||||{{{{{{||||{{{zzzzzzzzzyyyyyyyyyyxxxxxxwwwwwwwwwwwwwwwwwwvvvvvvvuuuuuuuutttuuuuuuutttssrrrrrrrrrrrrrrrrrrssrqqqqrrsssttuutuvvvvuuuvwwxxxxwwwwwwxyyxxyyyzzyyyz{{||{{|||||||}}}}}}~~~~~~~~~~~~~}|||||||{{{z{{|}~{x{{}|~~~~}}||}}~~~~~~}~}}}|||{{{{{{{zzxwwwwwxxwwwvvvvvvwwwxxxxxwwvuuvwyz|{{{zzyyyyyzzzzzzzzzzzzzzzzzzzzzzzzyzzzzzzzzzyyyyyyzzzzzzzzzzzzzzzyyyyxxxyzzzyyyxyyyyyxxxxwxxxxyyyzzzzzzzzyyxxxwwwwwwwwwwwxxxxxxxwwwwwxxyxyxxwvuuvwxxyyxxwwwwxyyyyyyxxwwxwwwxyyyyxxxyyzzzzzzzzzz{{|~~~}||||||}~}||{{{{{{{{{{{zzzzzzz{{{{{zzzzzzzzzzzzzzzzzzzzyyxxxxxxwwwwwwwwwwwwwwwxwwvvvwwwvvvvvvvvuuuvvvvvvvuuuttssssssssssssssssssttsrrrrssttttuuuuvvwwwvvvvwwxxxxwxyxxxyzzyyyyyzzyyzz{{||{|{{{{{||}~~~~~~~~~}}}}||||{{{{{{{||z||~|}~~~~~~}}}~~~~~~~}||||{{|{{{{{{zzyyxwwwwxxwwvvvuuuuuvvvvwxwwwvvvuvxy{{{{zzyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyzzzzzzzzzzzzzzzzzzzzyxyyyzzyxxxzzzzyyyyyxxxxxxyyyzzzzzzzyyyyxxwwwwwwwwxxxxxxxxxwvvvvvwwxyyyxwvuvwxyyyxxxwwxyz{{{{{zywwxwwwxxyyxxwyzz|{{{{{{{{{|}~~~}}}|{{{{{{{|}||{{{zzzzzzzzzzzzyyyyzzzzzyyzzzzyzzzzzzzzzzzzzzyyxxxxxxwwwwwwwwwwwwwwxwwwwwwxxwwwwvvvvvvvvvvwwwwvvvuuttttttttttttttttttuutstssttuuuuuuuvvwwwwwwvvwwxxxxwxyyxyzzzyyzzz{{zz{{{|||{|{{{{{||}~~~~~}}}}}|||{{{{{{|}}{zz{|}~~~~~~~~~~~}}|||{z{{{|{{{zzyxxxwwwxxwwvvvvuuttuttuvwwwwwvvuuvxyz{{zzyyyyyyyzzzzzzzzzzzzzzzzzzzzzzyzzzzzzzzzyyyyyyzzzzzzzzzzzzzzzzzzzyyyyyyyxxyy{{{{zzzzzyyyyxxxyyyzzzzzzyyyyxxxxxxxxxwxxxxxxxxxwvvwwwxxyzzzyxwvvwxyyxxxxwwxyz{|||{{zxwxwwwxxxxxxxz{{|||||||||}}~|||{{zzzzzzz{{||{{{{zzzzzzzzzzzzzyyyyyyyyyyzzyyzzzzzzzzzzzzzzzzyyyxxxxxwwwwwwwwwwwwwxwwwxxxxxxxxxwwwwvwvvvwxxxxwwvvvuuuuuuuuuuuuuuuuuuvuutuutuuuuuvvvvvwxxxxxxwwwwxxxxxyyyyyzzzzzzz{{{z{{{{||||}|||||}}}~~~~~}}}}|||{{{{{{|~}zzz|~~~~~~~~~}}}}}|{{||||{{zzyyxxxxxxxxwwwwvvuttttstvvwwwvvuuuuvxyz{{zzyyyyyyyzzzzzzzzzzzzzzzzzzzzyzz{{{{{{{zyyyyyyyzzzzzzzz{{{{{{zz{zzyyyyyyxxyz{|||{{{{{zzzzyyxxxyyzzzzzyyyyxxxyyyyyyyyyyyyxxxxxwwxwxxyyzzzzyxwwwxxxxxxxwwxyz{{{{{zzyxxxwwxxyyyyy{||}||||||}}~~~{{{{zzzzzzzz{{{{{{{zzzzzzzzzzzzzyyyyyyyxxxxyyyyyyyyzzzzzyzzzzzzzyyxxxxxxxxxxxxxxxxxxwxwwxxxxxyyxxwwxxwwwvvwxxxxxwvvvvvvvuuuuvvvvuvvvvuuuuuvuuuvvvvwwwvvwxxxxxwwwwwwxxxxyzyyyz{{zz{{{{{{{{{{||||}}}|}}}~~~~~~}}}}|||{{{{{{}|{{|~~~~~~}}}||||||{{zzzyyyyyxxxxwwwwwvvuuttstuvwwvvuuuttuvxzz{{zzzzzzzyzzzzzzzzzzzzzzzzzzzyyyz{||{{|{zyyyyyyyyzzzzyzz{{{{{{{{{{zzzzzzzyyyzzz{{||{{{{zzzyyxxxxxy{{{zyyyyyxyyyyyzzzzzyyzyyyyxxxxxxyyyyzzyyyxxxwwwxxxwwxxyzz{{{zyyyyyxxxxxxyyyz{||}|||||}~~zzzzzzzzzzzz{{{{{{zzzzzzzzzzzzzyyyyxxxxxxxxyyyyyyyyzzzzzyzzzzzzzyyxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyxxxxxxwwwwxxxxxxwwwwvwvvvvvvvvvvvvvvuuvvuvvvvwwwwwwwvwwxxxxxwwwwwwxyyxyzyyyz{{{{{{|{{{{|||}}}}}}}}~~~~}}}}|||{{{{{|~~~~~~~~~~}}|||||{{zzzzyyyyxxxxxwwwwvvvuttsttuvvvuuuutstuwxz{{{{{{{{zzzzzzzzzzzz{zzzzzzzzyyyz{{{||{zzyyyyyyyyzzzzyyzz{{{{{{{{{zzzzzzzyyyyzzz{{{{{{zzzyyyyxxxxy{{{zyyyyyxyyzzz{{{{{{{{zzzzyyxyyyyzzzzyyyyyxxxxxxxxwwxxyyzzzzyyxyyyxxxxxxyyyyz{||||||}}~zzzzzzzzzzzzz{{{{zzzzzzzzzzzzzyyyyyxxxxxxxxyyyyyyyyzzzzzyzzzzzyyyyyyyyxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyxxwwwxxxxxxxwwwwwwwwwwwwwwwwwwwwvvvvvwvvwwwwwwwwwwwxxxxxwwwwxxyyyyzzzzzz{{{|||||||||}}}~}}~~~~~~~}}}|{{{{{{{}~~~~~}}|}}|{{zzzyyyyyxxxxxxwwwwvvuttstttuuuuuuttsstvwxyz{{{{{{zzzzzzzzzzzzzzzzzzzzzyyyyz{{{{zzzyyyyyyyyzzzzyyzzz{{{{{zzzzzzzzzzyyyyyyzz{{{{zzzyyyyyyxxyz{{{zyyyyyxyyzzzz{{{{{zz{{{{zyyyxxxyzzzyyyyxxxyxxxxxwwxxyyyyxxxxxxyyxxxxxxxyxxyzz{|||}~~~yyyyyyyyyzzzzzzzzzzzzzzzzzzzzzyyyyyxxxxyxxxyyyyyyzzzzzzzzzzzzyyyyyyyyzyyyyyyxxxxxxxxxyyyyzzzzzyyyyyyyxxxxxxxxyyxxxxxxxxxxxxxxwwwxxxxxwwwvvvwwwwxxxxxxwxxyyyyyxxxxyyzzzyz{{zz{|||||||}}||}}}}}}~~~~~~~~~~}||{{{zz{}~}}}~}}|{zzzyyyyyxxxxxxwwwwwvuttssttttuuvvuttstuvwxyz{{{{{{{zzzzzzzzzzzzzzzzzzzyyyyzzz{zzzzyzzzzzz{{{zzyyzzzz{zzzzzzzz{{{{{zzzzyyyzzzzzzzyyyyyyyyyyz{{{zyyyyyyyyzzzzzzzzzzzzzzzzyyxwxxxxyzyyxxxxxxwwwxxxxxxyyyxxxxxxxyyxxxxxxxxwwwxxyzz|}}~~yyyyyyyyyyyyyyyzyyyyyyzzzzzzzyyyyyyyyyyxxxxyyyyyxyzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzyxxxxxxxxxwxyyyyyyyyyyyxxxxxxxxxwwwwwwwwwwwwwwwxxxxxxxxxyyyyyyyxxxxyyz{{zz{{{{{|||}}}}}}}}~~~~}~~~~}}}~~~}}|||zz|~~~~}}~~}}|{zzzyyyyyxxxxxxxxxwwvuuttssttttuuuuvvvtttuwxy{{{{{{{zzzzzyzzzzzzzzzzzzzyyyyzzzzzzzzzzzzzzz{{{zzyyzzzzzzzzzzzzz{{{{{zzzz{zzzzzzzzyyyyyyyyyzzzyyyz{{{{zyyyzzzzzzzzzzzzzzzyyxxwxyyzyyxxxxwwwwwwwxxxxyyyyyxxxxxxxyyyyyyxxxxwwwwwwxz{|}}~xxxxxxyyyyyyyyyyyyyyyyyzzzzzyyyyyyyyyyyxxxxyyyyxxyzzzzzzzzzyyyyyyyyyyyyyyyyyyzzzzzzzzzyyzzzzzzzyyyyyyxxxwxyyyyyyyyyyyyyyyyyyyxwwwwwwwxxxxxxxxxyyyyyyyxyzzzzzzyyyyzz{|{{{||{{|}}}}}}}~~}}~~~~~~~~~|||}}~~~}}}{{|~~~~}}~~}|{{zzyyyyyxxxxxxxxxxxwwvvutsssstttuuuvwvutstuwy{{{{{{{zzzzyxyzzzzzzzzzzzzzyyyzzzzzzzzz{{{{{{|{{zzyyzzzzzzzzzzzzz{|||||||{{zzzyyyyyyyyzzzzzzzzzyyyz{{{{zzyyzzzzyyyyxxxyyyzzzyxwxxxyyyyyxwwwwvvwwxyyyyyyyyxxxxxxxyyyyyyxxxxwwvvvwxyz{{~xxxxxxxyyyyyyyyyyyyyyyyyzzzyyyyyyyyyyxxxxxxxyyxxxyyzzzzzzzyyyyyyyyyyyyxxxxyyzz{{{{{{{{zzz{{{{{zzzzyyyyyxxxyyyyyyyzzzzyyyyyyyxwwwwwwwwxxxxxxxxyyzzzzzzyzzzyzzzyyzz{{|||{{|||||}}}~~~~~~~~}zzz{{|}~~~~|{{~~~}~~~~~}~}}|{{zzyyyyxxxxxxxxxxxxxxwwwvutssssssttuvwwvusstvy{{|||{{{{zzyxxxyzzzzzzzzzzzzyyzzzzzz{{z{{{{{{|{{zzyyzzzzzzzzzzzzz{||||||||{{{{zzzzzzzz{{{{{{{{zyzz{||||{zzzzzzzyyyyxxxwxxyzzyxwxxxyyyyyxxwwwwwwwxyyyyyyyyxxxxxxxyyyyyyxxxxwwvvvwxz{||~xxxxxxxxyyyyyyyyyyyyyyyyyzyyyyyyxxxxxxxxxxxxxxxxxyyyzzzzzyyyyyyyyyyyyyxxxxyyz{{{{{{{{{zzzzz{{zzzzzyyyyxxxxyyyyyxyzzzzzzzzzyyxwwwwwwxxyyyxxxxxyyzzzzzzyzzzzzzzzz{{|||||||}}}}}~~~~~~~~}yyyyzz{|~~~|{{~~}|}}~~}}}}||{zzyyyyxxxxxxxxxxxxxxxwwvvuutssrrrsstvwxwutstvx{||||{{{{{yxwvwwxyyyz{{{{{zzzz{{{{{{||{{|{{{{|||{{zzzzzzzzzzzzzz{{{||}}}}}||||||||||{{{{{{{{{{zz{{|}}}}|{{{{{{{zyyyyyxxyyzyyyxxxxxxxyyyyyyxxxwxxxyyyyyyyyyxyyyyyyyyyyyxxxxxxxwwwxz{}~yyyxxxxxyyyyyxxxxxxxxxxxxyyyyyyxxxxwwwwxxxxxxxxxxyyyyyyyyyyyzzzzyyyyyyxwxxxyzz{{{{{{zzyyyzzzzzzzzyyxxxxxxyyyyxxxyyyzyyyyyyyxxxwxxxxyyyyyyxxxxyzzz{{{{zzzzzz{{z{||||}|}}}}}}}~~~~~~}}~}{{{zzzz|}~}|z|~}|}}}}}}}}}{{zyyyxxxxxxxxxxxyyyyyxwwvvuutssrrrrstuvwvuttuvxz|}}{{{z{{zywvvvwwxyyzz{zzzzzzzz{{{{{{|||{{{{{{{{{{{zzzzzzzzzzzzzzz{{||||||||||}}}||||{{{{{{{{zz{{|}}}|||||||{{zzyyyyxyzzyyyyyxwwwwxxyzzzzyyxxxxxxyyyyyyyyyyzzzyyxyyyyyxyyyyyxxxy{|}zzyyyxxxxyyyxxxxxxxxxxxxxxyyxxxwwwwwwxxxxxxxxxyyyyyyyyyyyyyyzzzzyyyyyyyxyyyyzzzzzzzzyyxxxxxyyzyyyyxxxxxxxyyyyxwwxyyyyyyyyyyxxxxyyyyyyyyyyxxxxyzzz{{{{{zzzz{{{{{|}}}}|}}}}~~~~~~~~}}}~}{zzzzzz{}~~~~}|z|~}}||}}}}}}}|{zyyyxxxxxxxxxxyyyyyyyxwwwvutsssrrrrsstuutttuvxy{}}|{{z{{{zywwvvvvwxyyzzzzzzzzzz{{{{{{|{{{{{{{{{{{{zzzzzzzzzzzzzzzz{{||||}}}}}}}~}}}}}||||||{zzz{{|}}}}}}}|{zzzzzzzzzzzzyyyyyxwwwvwxzz{{{zyxxxxxxxyyyyyyyyyyzzyyxyyyyyyyzzzzzyyz|}{zzzyyxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwxxyyyyyyyyyyyyyyyyyyyyyyzzzzyyyyyzzyzzzyyxxxxxxyxxwwwwwxxxwxxxxxxxxxxxyyxxwwwwxxxxxyyyyxxxxyyyyyyzzzzyyyyyzzz{{{{{{{{{{|||||}}}}}}}}}~~}}}}}}}}}~~~|{{{zzz{{~~}}~~}{z{~}|||}}}}}}|{zyyyxxxxxxxxxxyzzzzyyxxwwvvuttssrrrrrsstttttuwxz|||{{{{|||{zyxvuuuwxxzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzz{{||||}}~}}}}}}}}}}}|||{zzzzz{{|}}}}||{zzzzzzzzzzzzzyyyyxxwwwwxxyz{|{zyxxwwwwwxxxwwwwxxyzzyyyzzzzzzzz{{{{{z{|~{zzzyyyxxxxxxxxxxxxxxxxxxxxxxxwwwwxxxyyzzzzzzzzzzzzyyyyyyyyyyzzzyyyyzzzyyyyxxxwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxwwwxxxxxxyyyyxxyyzzzzzzzzzyyyyyzzz{{{{|{{{{{|||}}~~~}}}}}}}~}}}}}}}}}~~~~}{{{{zyyzz}~|{{{{yxy~}}}||}}}}}|{zyyyxxyyyyyyxyz{{{zzyxxwvvuuuttssrrrrrrsttttuvwxz|||{{||}}}}}{xvuttvwyzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{zzzzzzzzzzzzzzz{{{{{{{{{||||||||{{{{{zzzzzzzz{{|{{{{zzzzzz{{{{{{{zzyyyxxwwwxyyyyz{{zyxxwwvvwwwwwwwwxxyzzyyyyzzz{{{{{|||||}~yzzyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxyyyzzzzzzzzzzyyyyyxxxxyyyyzzzzzzzyyyyxxwwwvwwwwwwwxxxxxxxwwwwwwwwwwxxxxxxxxxxxxxxxxxyyyyyzzzzzzzzzzzyyyz{{{|||||{{{{||}}}}~~~}}}}}}}}}}}~~~~~~~~~|{{zzzyyyz|~~{zxzyxvx~~~~~~~}}}}~~~~}|{zyyyxyyyyyyyyz{||{{zyxwvvuuuutttssrrrrrssttttuvwxz||||||}~}zwvttuvwyzzzzzzzzzzzzyyyyyzzzzz{||||{{{zzzzz{{{{{{{{{zzzzzyyyyyzzzzzzzzyzzzzzzzzzzzzzzzzzzzzzzzzz{{|||||{zzyyyxxxxyyyyyyyzyxxxwwvvwwxxxwwwxxyyyyyyyzzz{{{{|}}}}}~yzyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxyyyyxxxyyyzzz{zzzzyyyyyxxxxxyyyyzzzzzzzyxxxxxwwwwwwwwwxxxxxyyyxxxxxwwwwwwxxxxxxxxxyyyyyxxxyyyyzz{{{{{{{{{{zzzz{{{|||||{{{||}}}~~~~~~~~~~~~~~~~~|{{zzzyyyy{}~}{xxxwvx~~~~~~~~}}}~~}|{zzyxyyyyyyyz{||||{zxwwvvuuvuuuttssrrrrssttttuuuvy{||||||~|xvtsttvxzzzzzzzzzyyyyyyyyyyzzzz{||{{{{zzzz{{{{{{{{{{zzzzzyxxyyyyyyyyyyyyyyzzzzzzzzyyyxxxxyyyzzz{{||}}}}|{{zzzyyxyzzzyyxxxxxxxwwwwxyzzyyxxxxyyyxxxyyzz{||{|}}~~~xyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxyyyyyxxxxyyyyyyyyyyyyyyxxxxxyyyyzzzzzzzyxxxxxxxwwwwwwwxxxxxyzzyyyyyxwwwwwxxxxxxxxxyyyyyyyyyyyyzz{{{{{{{{{{zzzz{{{|||||{{{||}}~~~~~~~~~~~|{{zzzyyyyz{}~~{xxxwwx}~~~~~~~~}|{zzyyyyyyzzz{|||||{zxwvvuuuuuuuuttssrrssssttuuuuvwy{{||||~}xvtsttvwxzzzzzzzzyyyyyyyyyyzzzzzz{{{{{{{{{{{{{{{{{{{zzzzzzyyyyyyyyyyyyyyyyzzzzzzzzyyyxxxyyyyzz{{|||}}}}}||{{{{zyyzzzyyxxxxxxxwwwxyz{{{zzyyyyyyxxxxyzz{|{{{|}~xxxxxxxxxxxxyyyyyyyyxxxxwwwwwwwxxyyzyyxxyyyyyyzzzzzzyyyxxxyyzzzzzzzz{zzzyyyyyyxxwwwwwwxxxxyyzzyyyyyyyyyxxxxxyyyyyyyyyyyyyzzzzzzz{{{{{{{{{{{{{{{{{|||||{{{||}}~~~~~~}|{zzzzzyxyz|}~|zyyyxx|~~~~~~}|{zzyyyyzzz{{||||{zyxwvvuuuuvvuuutssrrsssstuuuuuuvwyz{|||~|xvttstuvwyzzzzzzzyyyyyyyyyyzzzzyyzzzzz{{{{{{{{{{{{{{{{{zzzzzzzzzzzyyyyyyyyzzzzzzzzyyyyyyyzzyzz{|||}}}}}|||||||{zzzzzyyyxxxxxxxxxyz{|||{{zzzzzzyxxxyyzz{zyz{{~xxxxxxxxxxxxyyyyyyyyyxxxwwwwwwwwwxyyxxxyyyyyyyzzzzyyyyyyyyyzzyyyzzzzz{{zzzzzzyyxwwxxxxxxxyyyyyyyzzzyyyyxxyyyyyyyyyyzzzzzz{{{{{{{{{{{{{{z{{{{{{||{{{||||||}}}~~~~~~~~~}}|{zzzyyxyz|}~|{zzyyx{|~~}~~~~}|{zzyyyzzz{{||||{zyxwvvvuuuvvvvuuttsssssssuuvvuuuwyyz|||}}~~{xvtttttuwxyzzzzzzzzzzzzzzzzzzzyyyzzzzzzzzz{{{{{{{zzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzzz{|}}}|||||}}}}}|{zzzyyyyyyxyyyyyyzz{{|||{{{zzzyyxxxyyyzzyyz{{xxwwwwwwwwxxyyyyyzyyyxxxwwwwwwwwwxxxxxxyyyyyyyyzzyyyyxyyyyyyyyyyyyyyz{{zzzzzzzyxwwxxxxyyyyyyyyyyzzzzzzzzyyyyyyzzzzzzz{{{{{|||||{{{{{{{{z{|||||||{{{|||||}}}}~~~~~~~~~}{zzzyxxxy{|~}}||{zyxy{~~}}}~~}|{zzyyzz{{||||{zzyxwvvvuuuvvvvvvutssssssttuvvvuuvwxyz|||{{{zyvtttttttvxyzzzzzzzzzzzzzzzzzzzyyyzzzzzzzzyzzzzzzzzzzzzzzzzz{{{{zzzzzzzzzzzzzzzzzzzzzzyzzzzyyyzz{||}|||||||}}}}||{zzyyyyyyyyyyyyzzz{{{|{{{zzzzyxxwxyyyxxxyy{|xxwwwwwwwwxxyyyyyyyyxxxxwwwwwwwwwxxxxxxyyyyyyyyyyyyyxxyyyyyyxxxxxxxyyzzzzzzzzyxxwwxxxxyyyyyyyyyyzzzzz{{{zzzzyyzzzzzzz{{{{|||||{{{{{{{{{{{|||||||||||||||}}~~~~~~~~~~~}{zzyxxxyz|~~~}}|{zxwxz}~~}}}~~~}|{zzyyzzz{|||{{zzyxwvvvuuuvvwwwwvutsssssstuvvvvvvvvwy{{{zxwvusrrrstttuwyzzzzzzzzzzzzzzzzzzyyzz{{{{{{{zzyzzzzzzzzzzzzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzyyzzyyyyyzz{||{{zzzzz{{||||{{zyyyyyyyyyyyyyzz{{{{{zzyyyyxxwwxyyyyyzzz|~xxwxxxxwwwxxyyyyyyyyxxxxwwwwwwwwwxxxxxxyyyyyyyyyyyyyxxyyyyyyyxwwwwxyyyzyyyyzyyxxwwxxxxyyyyyyyyyyzzzzz{{{zzzzzz{{{{{{z{{{{{{{{{{{{{{{{{{{|}}}}}}}}}}}}}}}~~~~~~~~}{zyxxxyz|~~~~~}{zwvxy|~~}}~~~}}}|{{zzzzzz{|{{zzyyxwvvvuuuvwwwwwwvutttssstuvwwwwvvvvxzzzxvtrpoopqrsstuwxyzzzzzzzzz{{{{{{zzyzz{{|||||{{{zzzzzzzyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyzz{{zzzyyyyyyz{{{{{{zyyyyyyyyyyyyyz{{{{{{zyyyxxxwwxyzz{{}||}wxxxxxxxxxxxyyyyyyyyyxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyxxyyyyyyyyxxxyyyyyyyyyyyyyxxxxxxxxyyyyyyyyyz{{{{{{{{zzz{{{{{{{{{{{{{zzz{zzzzzzzzzz{||}}}}}}}}}~~~~~~~~~}|{zyxyz{|~~}{zxwwy{~~~}}~~~}}}|||{zzzzzzz{{zzyyyxwvvvuuvvwwxxxxwvuuuttttuvwwwwwvuvxyyywuromlmnopqrstvwyzzzzzzzzzz{{{{zzzzz{{||}}}}|||{{{zzzzyyzzzzzzzzzzyzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyzzzzzzzyyyyyzzz{{{{zzyyyyyyyyyyyyz{|||||{zyyyxxwwxy{{|}~}xyyyyyyyyyyxyyyyyyyyyxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyxxyzzzz{{zzyyyyyyyyyyyyyyyyyyyyyxxyyyyyyyyyz{{{{{{{{zzz{||||||||{{{{zzzzzzzzzzzzzz{||}}}}~~~~~~~~~~~~~}|{zzz{||~}|yxxx{}~}}~~~~~}}}||||{{zzzzzzzzzzyyyxwvvvuuvwwwxxxxxxwwvuuuuuvvwwwwvvuvwxxvtqnlkklmopqrtuvxz{{{{zzzzzz{{zzzzz{{{||}~~}||{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyzzzzzyyyzzzz{{{zzzzzzzzyyyyyz{{||}}}|{{zzyxxxyz{}}}yzyyyyyzzzyyyyyyyyyyyyxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyzzz{{{{zzzzzzzzyyyyyyzzzzzzzzzyyyyyyyyyyyz{{{{{{{{zzz{||||||||{{{{zzzzz{{{{{{zzz{||}}}}}~~~~~~~~~~}||{{||}~~{yyxy|~~~~~~~~~}}|||||{{{{{{{{zzzzyyyyxwvvwwvwwwxxyyyyxxwvvuuuuvvwwwvuuuvwvvtromkkkloopqrtuwzz{{{zzzzzzzzzz{{{{{{{||}}||{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{zzzzzzyyyyzzzzzyyzzzz{{{zz{{{{{zyyyyyzz{{|}}}}|||{zyyyxy{}~~~yyyyxxyyyzyyyyyzzzyyyyyyyyxyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzyyyyyzz{{{{{{{zzyyyyyyyyyyyz{{{{{{{{zzz{||||||||||{{{{{{{|||||||{{|||}}}}}~~~~~~~~~~~}|}}~}{zyxz}~~~~~~}}}|||||||{{{{{{zzzyyyyxwwxxxxwwwxyzzzzyxwvvvuuuuvvvvvuuuuuvuusqnlkjkmmnoqrtvyz{{{zzzzzzzzzzz{{zzzz{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{||||{{zzzzzzzyyyyz{{{zzz{zzz{{{{{{{{{zyyzzzzzz{{|}}}}}||{zyyxy{}~~}zyxxxxxyyyyyyyyzzzzyyyyyyyyyzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyzzzyyyzzzzzzzzyz{{|||||{zzzzzyyzzzzzzzzzzzz{{{{{{{||{{|||||||{{|||||}}}}|||||}}~~~~~}~~}}}~|zyxz}~}~~~~~~~~~~}}}|{{||||{{{{{{zzyyyyyxxyxxxxwwxyzzzyyyxwvvvuuuuvvvvvutuuuutsqoljjjklmnpqsvxz{{{{zzzzzzzzzzzzzzzzzzz{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{zz{{{{zz{||{{zzzzzzzzzzyyz{{{{z{{zzzz{{{{{{{{{zzzzzzzz{{|}}}}}}|{zzyxyz|}}|zyxxxxxxxyyyyyyzzzzyyzzzzyyyzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzyz{||}}||{zzzzzzzz{{{{{{{{zzz{{{{{{{||{{|||}}||||||||}}}}}||||}}}~~~~~~~~~~~~~~~|{yz}~~}~~~~~~~~~~~~}}|{{||||{{{{{{{{zyyyyyyzzyyyxxxyzzzyyyxxwvvvuuvvvvvvuuuttttsrpnkjjkklmopruwy{|{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{zz{{{{zzz{{{{zzzzzzzzzzyzz{{{{zzzzzzzz{{{{{{{zzzzzzzzz{{{|}}}}|||{{zyxy{|||~zyyxxyyyyyyyyyyzzzzyyzzzzyyyzzzzzzzzzzzyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzz{||||||{zzzzzzz{{|||||||{zz{{{{{{{{{|||||}}||||||||}}}}}||}}~~~~~}}}}~~~~}}}}~~}|yy|}~}~~~~~~~~~~~~}}}|{{|}|||{{{{{{{zzzyyyyzzzzyyxxxyzyyyyxxwwvvvvvvvvvvuuutssttsrpnmmmnmnoprtwxz{{{zzzzzzzzzzzzz{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{zz{{{{zzzz{{{zzzzzzzzzzzz{{{{{zzzzzzzyyzzz{{zzzzzzzzzz{{{{|}|||||||{zzyz{}zzyyyyyyyyyyyxyzzzzyzzzzzyyzzzzzzzzzzzzyyyzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{zzz{||||{{{{{{zzz{{||||||{zzz{{{{{{{{{|||||}}}}}}}|||}}}}}}}}~~~~}}}||}}}|||||}}~~|yyz|~~~~~~~~~~~~~~~~}}|||}|||{{{{{{{zzzzyyyyzzzzyxxxyyyyyyxxwwwwvvvvvvvvuuttssstuusrppqqppqrstuwz{{{zzzzzzzzzz{{||||||||||{{zzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{zz{{{zzzzz{{{zzzzzzzzzzzz{{{{{z{{{{{zzyzzzzzzzzzzzzzz{{{zz{{|||||{{{zzyz{|{zzzyyyyyyyyyyzzzzzzzzzzzzzz{{{{{zzz{{zzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{{|}}}}~~}}}}}}}}~~~~~}}}~~~}}|||||||{{{{{|}}}~~|zxyz}~~~~~~~~~}}}}}}}||||{||||{{zzzzzzyyzzzzyxxxyyyyyyyyxxwwwvvvvvvvuuttssstvvvutttsrqqsstuwyz{{{{{{{{{{zzz{|}}}}}}|{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz{{{{{{{zzz{zzzzzz{{{{{{{{{{{zzzz{{{z{{{{{{{zzzzzzzzzzz{{{{{{{{{zzz{{||{{{{{zzzzz|{{zzyyyyyyyyyzzzzzzzzz{{{zz{{{{{{z{{z{zz{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{zzzz{{{{{|||||}}}}~~~~~~~}}}~~~~~}}}~~~}}|||{{{{{zzz{{|||}~~~|{yyy{}~~~~~~~}}}}}}}|||||||||{{{zzzzzyyzzzzzyyyyxyyzzzzyxxxwwwvvvvvuuttsrstuwwwvuuutssttuvvxz{{{{{{{{{{zzz{{|}}||||{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz{{{{{{{zzzzzzzzzz{{{{{{{{{{{{{{{{{{{|||{{{{{{{{{zzzzzz{{{{{{{{{{zz{{{{{{{{zzzzy{{{{zzzzzzzzzz{{zzzzzz{||{{{{{{{{{z{{z{zz{{{{{{{{{{{{{{{{{{{{zzzz{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||}}}}}}~~~~~~~}}}~~~~~}}}~~}||{{{{{{{zzz{{{{||}}~~~~}{zzz{}~~~~~~}}~}}}}||||||||{{{{{zzzzzzzzzzyyyyyyyzzzzyxxxwwwwvvvvuuttsrstuvwvvvvvutstttuvxz{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz{{{{{{{zzzzzzzzz{{{{{{{{{{||||{{{{{{{|{{{{|||||||{{zzzz{{{{{{{{{{{{{{{{{zz{|||{}||{{{{{{{{{{{{|{{{{{||}}|||||{|{{{{{{{{{{{{|||||||{{{{{{{|{{{{{{|||||{{{zzz{{|}||||||||{{{{{||||||||||||||||||}}}}}~~~~~~~~~}~~~~~~~~}||{{|||{zzzzz{{{{|||}}~~}{{{{||~~~~~~}}~}}}}||||||||{{{{{{zzz{{{{{{zzzyyyzzzzzyyxxxwwwwwwwwwvutttttuvvvwwvvtsssttuwz{{{{{{{{{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz{{{{{{{zzzzzz{{{{{{{{{|{{|}}|{{{{{zz{{{{{{|}}}}}|{{zzzzzzz{{{{{{{{{{{{{{{{|}}}~|||{{{|{{|||{{{||{|||}}}|||||||||{|{{{{{{{||||||}}|||||{{|||||||||{{{zz{{{{{||}}}}}}}}|||{|||||||||||||||||||||}}}}~~~~~~~~~}~~~~}~~~}||||||{zz{{zz{{{{{||}}}~}||{{{{}~}}}}}}}}}}}}}||{{{{{{{{{{{{{{{{zzzzzzzzzzyxxxwwxxxxxwwvuttuutuuvvvwvvtsssttuwy{||||||||{{{{{zz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz{{||||||||{||}}|{zzzzzzz{{{{{|}~~}}|{{{{zzzzzz{{{{{{{{{{||{{{{|}}||||||}}|}}|||{||{|}}~~}}}}}}|}|||||{{{{{|}}}}}~~}}}}}}|||||||||||{{{zz{||||}}~}}}}}}}}}|||||}}}}}}}}}|||}}}}}}}}}}~~~~~~~~~}}}~}||}}}}|{z{{zzz{{{{{{|||}~~~}}|{{}~~}}}}}}}}}}}}}}||{{{{{{{{{{{{{{{{zzzzzzzzzyxxxwxxxxxxxxwvvuuuuuvvvvwwvutsstttvy{||||||||{{{{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzz{{{|||||||{{||||{zzzzzzzzzzz{|}~~}}|{{{{zzzzzz{{{{{{{{{{||{{{z{|~||||||}}|}}||||||{|}}~~}}}}}}|}|||||{{{{{|}}~~~~~~~~}|}}}}}|||||{{{{||}}}}}~~}}}}}}}}}|||||}}}}}}}}}||}}~~~~~~~~~~~~~~}}~}||}}}}|{z{{zzzz{{{{{{{{|}}~~}||{|}~}}~~~}}}}}}}}}||{{{{{{{{{{{{{{{{{zzzzzzzzyxxxwxxxxyyyyxxwwvvuvvvvvwwvuttuvvvwy{|||||||||{{{{zzzzz{{{{{{{{{{{{{{{{{{{{{{{||||||||{{{{{{{{zzzzzzzzzz{{{||||||{{{||||{{{{{{{{zzz{|}~~}}|{{{{zzzzzz{{{{{{{{||}}|{{z{|~||||||}}}}}}}|||||||}~}}}}}}}||}||||||||}}~~~~~~}|}}}}|||||{{||}}~~~~~~~}}}}}}}}}}|}}}}}}}}}}}}}|}~~~~~~~~~~~~~}~}|}}~~~|{z{zzzzzzzzzzzz{{{|}~~~|{{}~~}~~~~~~~}}}}}}|||{{{{{{{{{{{{{{{{zzzzzzzzyxxxxxxxyyyyyyyxxwwwvwwwvwwwvwwwxxxxy{|||||||||||{{{zzzz{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||{{{zzzzz{{||||{{z{{||||{{{{{{{{{{|||}}}}|||{{{zzzzz{{{{{{{{||}}|{{z{|~{{{{{|}}}}}|||||||{|}}}|||}}}||}}}}}}||}}~~~~~~~~}|}}}}|||||{||}}~~~~~~~~~~}}}}}~~~~~}~~~}}}~~~~~~~~~~}~}|{{zzzzzzzyyyyzzzz{}}~~}|{}~~~~~~~~~~~}}}}}}}}|||{{{{{{{{{{{{{zzzzzzzzyyyyxyyyyzzzzzzyyxxwwwwwwwwwwxxxwwwxyz{{||||}}}}||{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||}}}}}}||||||||||||||{zzzyzz{|||{{{z{{{|||||{{{{{{{{{{{||}||||||{{{{{{{{{||||||}}}|{{z{|~{{{{{{{{|||||||||||||}||||}}}|}}}}}}~~~~~~~~~~~~}|}}}}}|||||}}~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~}|{{{zzzzzzyyyyyyyyyz|~~~}}||~~~~~~~~~~}}}}}}}}}}|||{{{{{{{{{{{zzzzzzzzyyyyyyyyyzzzzzzzzyyyxxxxxxxyyyxxwwxxyz{|}}}}}}}}}}||{{{{{{{{{{{{{{{{{{{{{{{{{{{||}}}}}}|||||||||||||{{zzzzzz{|||{{{z{{{{|||{{{{{{{{{{{zz{||}}}|||||||||||}~}}}}}}}|||{{|~z{{{{{{{|||||||||||||}|||||}}|}}}}~~~~~~}}~~~}}}~}}}~~~~~~~~~~~~~~~}~~~~~~}}}~~~~~~~~~~~~~}{{{{{zzzzzyyyyyyyxyz{}}~~}}~~~~~~~~~}}}}}}}}}}|||{{{{{{{{{{zzzzzzzzzyyyyyyyyyzzzzzzzzyyyxxxxxxxyyyxxwwxxyzz{{|}}}}}}}}}}||||||||||||||||{{{{{{{{{{{||}}}}}}}}}}}}}}|||||||{{{{{||||||{{z{{{{{{{{{{{{{{{{{{zz{||}}}|||}}}}}}}}~~~~~~~~}}|{{|}{{{{{{{{{{{||||||||||||||||}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~|{{{{{zzzzzzyyyyyyxxyz||}~~~~~}}}}}}}}||||{{{{{{{{{{{zzzzzzzzzyyyyyyyyyzzzzzzzzyyyxxxxwwxyyyxxxxxxyyzzzz{{|||||}}}}}}||||||||||}}}|||||||||||||}~~}~~~~~~~}}}~~~}}}}~~~~~}|||{{{{{{{{|||||||||||{|}~}}}}||}~}}}}~~~~~~~~~~~{{{{{{{{{{{{{{{{{{{{{{|||||||||}}}}}}}~~~~~~~~~~~~~~~|{z{{{{zzzzzzzzzzyxxxyz{||~~~~~~~~~~~~}||||||{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzyxxwwwwxxxxyyxxyyyyyyyyyz{|||||||}}|}|{{{{|||}}}~}}}}}}}}}}}}~~~~~~~~~~~~}||||||||{{|}}||}}}}}|}}~~~~~~}||}}}}}~~~~~~~~~~~~zz{{{{zzzzzzzzzzzzzz{{{{{{|||||{|}}}}}}~~~~~~~~~~~~~~~~~~~~}|{{{{{{{{{zzzzzzzyyxxwxyz{|}~~}}}~~~~~~~}}|||||||{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzyxxwwwwxxxxyyyyyyyyyxxxwxyzz{{{||}}|}|{{z{{||}}}~~}}}}}}}~~~~~}}}~~~}}}}||}}~~~~~~~~}||}}}}~~~~~~zzz{zzyyyyyyyyyyyyyzzz{{{{{{{{{z{||}}}}~~~~~~~~~~~~~~}}~~~~}|{{{{{{{{zzzzzzzzzyxxwxyz{{|~~~}}}||||||||{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzyxxwwwwxxxyyyyyyyyyyxxxwxxyyyyyz{||||||{zz{{|}}}~~}}}}}}~~~~~~~}}}~~~~~~~~}}~~~~~~~}||}~~~~~~~~~~zyyzzyyyyyyyxxxxxyyyyyzzzzzzzzzzz{{||||}}~~~~~~}}}}~~~~}|{{{{zz{zz{{{{{{{zzyxwxyz{{|}~~~~~~}}}|||{{{{{{{{zzzzzzzzzzzzzzzzzzzzyyxxxxxyyyyyyyyyyyyyxxxxxxyxxxxxyzz{{|{{yyyz{||}}~}}}}}}}~~~~~}~~~~~~~~~}}}}}}}}}~}}||}}}}~~~~~~}}}}||}}~~~~~}~~~yyxyyyyxxxxxxxxxxxxxxxyyzyyyyyyyz{{{{{||}}}~~~~~~~~~}}}}}~~~}}|{{{{zzzzz{{{{{{{{zyyxxyz{{|}~~~}}}||||{{{{{{{{{{{{{{z{{{{{{{{{zzyxxxxyyyyyzzzzzzzzyyxxxxyxxxxxyyyz{{{zyxyyz{||}}||||}}}}}}}}}||||||||}}}}~~~~~~~~~~}}}|||||}}}|||||||}}}}}}}}}}}}||}}~~~~~~~~~xxxxyxxxxxwwwwxxxxxxxxxxyyyyyxxyzzzzz{{|}~}}||}}~~~~~~~~}}}}}}}}}}}}}|{{z{{{{{{{{||||||{zzzyxyzz{{}~~~~~}}||||||||||||||||{{{{{{{{{{zzzyyyyzzzzzzzzzzzzzyyxxxxyxxxxxxwxyyzzzyxxwxyz{|}||||}}}}}}}}}||||||||{||}}||}}}~~~~~~~~}}}}}}}|||}}}}}}|||}}}||}}}}}}}}}}}||}}~~~~~xxxxxxxxxxwwwwwxxxxxxxxxxxyyyxxyzzz{zzz{}}|||||}~~~~~}}}~~~~~~~~~~~~~~~~~~~}}|||||||||}}}}|{{zz{{|||||||||||{{{zyxyyz{{}}~~~~~~}}||||||||||||||||{{{{{{{{{{{zzzyyyyzzzzzzzzzzzzzyyxxxxyxxxxxxxxxyzzzyyxwvwy{|}|||||{{|}}}}}||||||||{||}}|||||}}}}}}}}}}}}}}}|||}}}}}}|||}}}}}}}}}~~~~~}}}~~~~~xxxxxyyxxxwwwwxxxxwwwwxxxxyyyyyyyzzzzzz{||{{{{{|||}}}}}}}}~~~~~}}}}~}~~}}}~~~~~}}|||||||||||||||{{{{{|}}}}}}}}}|{{{zzyxyyz{{|}~~~~~~~~}}}}}||||||||||||||||{{{{{{{{{{{{zzzzyyyzzzzzzzzzzzzzyyyxxxyyxyyyxxxxyzzzyyyyxwyz{{||{{{{{{||||}|||||||{||||||||||}}}}}}}}}}}}}}}}}}}}}~~~}}~~}}}}}}}~~~~~~wxxxyyyyxwvvvwwxwwwwwxxxxxyyyyyyyzzzyyzz{z{zzz{{{{{{||}}}}}~~~~~~}}}}}}}||||}}}}}}|||||||||||||||||{{||||}~~~~~~}}|{{zzzzyyzz{|||}}~~}|||}}|||||{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzyzyyyyyyyyyyyyyyxyyyyyyyxxyyz{|{{{{{z{|||||||}}|{{{{{{|{{{|||||}}}}}}}||}}}}}}~~~~~~~~~~~}}|}}~~~~xxxxyyyyxwvvvwwxxwwwwxxxyyyyyyyyyyzzzyyyzyyyzzzzzzzz{{{{{{||}||}~~~~~~}}}|}}|{{{|}}~~~~}}}||}}}}}||||||{{||||||}}~~~}}}||{{{zzzz{{{||||}~~}||||{{{{{{{zzzzzzzzzzzzz{{{{{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyxyyyyyyzzyyxyz{{zzzzz{{{{{|||}}|{{{{{{{{{{|||||}}}}}}}||}}}}~~~~~~}}}}~~~~xxxxyyyyxwvvvwwxxxwwwxxxyyyxxxxxyyyyyyyyyxxyyyyyyzzzzzzzz{||||||}}~~~~~~~~~~~~~}}}}~~~}}}~~~~~~~~~~}}|||||||||||||||}}}}}||{{{{zzzz{{{||||}~~~~~~~}~~}}}}||{{{{{{zzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzzzzz{zzzyyyyyyyyyxyyyyyyzzyyyyzzzz{zzz{{{{||||}}}|{{{{{{{{{|||||}}}}}}}}}~~~~~~~}}~xxxxyyyyxwvvvwwxxxwwxxxyyyyxxxxxxyyyyyyyxxxyzzzyyzzzzzzzzz{{{{{{||||}}~~~~~~~~~~~~~}}~~~~}}}||||||{{{{{{{|||||{{{{{{{zzz{{{{|||}~~~~~~~~~}}}~}}~~~}}}}||||{|||{{zzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{zzzzzzzzzz{|{zzzzzzyzzzyyzzzzzzzzzyyyyzzz{{{{{||||}}}~~}}||}}}||||}}}}}~~~~~~~~xxxyyyyyxwvvvwxxxxwwxyyyyyxxxxxxxyyyyyxxxxxyzzzzzyyyyyyyyyzzzzzz{{|||}}}}~~~~~~~~~~~~~~~~~~}}}}|||{{zz{{{{|{{{{{{{||{{{{{{{{|}}~~~~~~~~~~~}}~~~}}}~~~~~}}~~~~~~}|||||||||{{{{{{{{{{{{{{zzzzzzzzzzzzzz{{{{{{{zz{{{{{{{{{{{{{{{zzzzzzzzzzzzzz{{{{zyyyzz{{||||}}}}}}}~~~~}}}}}}}}}~~~~~~~~xxxyyyyyxwvvvwxxxxwwxyyyyyxxxxxxxxxxxxxxxyyyzzzzzyyyyyyyyxyyyyyyzz{{|||||}}}}}}}}}~~~~~~~~~~~~~}}}}||||{zzzzz{{{{{{{{{||{{{{{{{{|}~~~}}}||||||}}~~~}}~~~~~~~~~~~~~~}}}}}}}}||{{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{zz{{{{{{z{{{{|{{{{{z{zzz{{|}}}~~~~~~~~~~~~~~~xxxxyyyyxwwvvwxxxxxxxyyyyyxxxxxxxxxxxxxxxwxyyzzzzyyyyxxxxxyyyyyyyzzz{{{{{||||||||||}}~~~~~~~~~~~~~~~~}}}}|||||{{zzzzz{{{{{{{{{{{{{{{{{{|}~~~~~}||{{|}|~~~}}~~~~~~~~~~~~~~~~}}}}~~~}}||{{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{z{{{{{z{{{{{{||{{||{{{{{|}}~~~~~~~~~~~~~~~xxxxxyyxxwwwwwxxxxxxyyyyyyxxxxxxxxxxxxxxxwxyyyzzzyyyyyxxxxyyyyyyyyyyzzzzz{{{{{{{{{{||}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}||||||{{{{zzz{{{{{{{{{z{{{{|||}}}~~~~~~~}||}}|~}}|}~~~~}~~~~~~~~~~~~~~~~~~~~}||}~}}}||{{{{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{|||{{{{{|{{{{{{{{{{|||{||||{{|}}~~~~~~}~~~~~~~~~wwwwxxxxwwwwwxxxxxxyyzzyyyyxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyxyyyzzz{{{{zzzzz{{|}~~~~~~~~~~~~~~~~~~~~~~~}~~~~}}||{||||{{zz{zz{{{zzzzzzzzzz{|}}}~~~~~~~}}}||}|{z{|}~~~~~~~~~~~~~}}}~~~~~}||}}}}|||||||||{{{zzzzz{{{{{{{{{zzzzyyyyzz{{{{{{{{zz{{{{{{{{{{{{{{{{|||{{{{{{{{|||||||||}~}}}|}}}}~~~~~~~~}~~~~~~wwwwxxxxwwxxxyyyyyyyyzzzzzyyxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyxxxwwwwxyyyzzzzzyyyyz{||}}~~~~~~~~~~~~~~~~}}}}}}}}}}~~}~~~}}}~~}|||||{||||{{zz{zz{{{{zzzzzzzz{{|}}~~~~~~~}}||{{y{||~~~~~~~~~~~}}}}}~~~}|||||||||||||||{{{zzzzz{{{{{{{{{zzzzzyyzzz{{{{{{{{zzzzzz{{{{{{{{{{{|}}|{{{{{{{{||||}}}|||}}|||}}}}}}}}}}}}~~~~~~~wwwwxxxxxwxxyyyyyyyyyzzzzzyyxxxxxxxxxxxxxxxxxxxyyyyyyyyyzyyyyyyyxxxwwwwxyyyzzzyyyyyyzz{{|}}~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}|}}}|||}~~~~~~~}||||||{||||{{zz{{{{{{{{{{{{{z{{|}}~~~~~~~~~~}}{}}~~~~~~~~~~~}}}}}~~~~}|||||||||||||||{{{zzzzz{{{{{{{{{zzzzzyyzz{{{{{{{{{zzzzzz{{{{{{{{{{||}}|{{{{{{{{||||}}}|}}~~}||}}}}}}}}}}}}~~~~~~~wwwwxxxxxxxyyyyyyyyyyzzzzyyxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyzzyyyyxxxxxwwxyyzzyyyyyyyyzzzz{{||}}}~~~~~~~~~~~}}}~~~~~~~}}}}}}}}}}}}||{{|{{||}}}}}}|||||}}}}|}}}}|{z{||}}}||}}||||{{||}~~~}}|}~~|~~~~~~~~~~~}}}}}~~~~~~~}|||||||||||||||||{{zzzzz{{{{{||||{{{{zzzz{{||||||||{{{zzz{{{{{{{{{{{{|||{{{{{{{{|||||}}|}}~~}|||}}~~~~~~~~~~~~~~~~~~~~wwwwxxxxxxxyyyyyyyyzzzzzyyyxxxxxxxxxxxxxxxxxxxxyyyxxxyyyyyzzyyyxxxxxxxxyzzzyyyyyyyyyyzzz{{|||}}}~~~~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~}}}}}}}}}}}}}|{{zz{{{{|||||||||{}}}}}|}}}}|{z{}}}}}}~}}}||{||}~~~~|~}|~~~~~~~~~~}~~~~~}~~~}}||||}}}}}}}}}}}}|{{{{{{{|||||||||{{{{{zzz{{||||||||{{{{{{|||||{{zzz{{|||{{{z{{{{|||||||||}~~}}||||}}}}}}}}~}~~~~~~}}~~~~~~~~wwwwxxxxxxxyzzzyyyzzzzzzyyyxxxxxxxxxxxxxxxxxxxxyyyxxxyyyxyzzyyyyxxxyyxxyz{zzyyyyyyyyyzzzzz{|||||}}}}}~~~~~~~}}}~~~}}}}}~~~~~~}}}}}}~~~~~~}}}}}}}}}}}}}|{zyyzz||}|||||||||}}}}||}}}}|||}~~~~~}}|||||}~~||~~~~~~~~~~~~~~}}}}}}|||}}}}}}}}}}}}}|{{{{{{{|||||}}}}|||||{zz{{||||||||{{{{{{|||||{{zzzzz{{|{{{z{{{{||||||||{|}~~}}|||}}}}}}}}~~~~~~~~}}~~~~~~~~~~~wwwwxxxxxxyyyzzzzyzzzzzzyyxxxxxxxxxxxxxxxxxxxxxyyyxxxyyyxyzzyyyyxxxyyxxyz{zzzyyyyyyyyyyyyyz{{{|||||||}}}}}}}}}}}~~~~~~}}}}}~~~~~~~~~}}}}}}}~~~~~~~~~~~~}}}}}}|{zyyzz||}|||||}}}|}}}}||}}}}}|}~}}|||||}}~~~{|~~~~~~~~~~~~~~~}}}}}}|||}}}}}}}}}}}}}|{{{{{{{|||||}}}}|||||{{{||}}}}}}}}||||}}}}}}|{{zzzzz{{||{z{{{{{||||||||||}~~}}|||}}}}}}}}~~~~~~~~}}~~~~~~~~~wwwwxxxxxxyyyyyyyzzzzzzyyxxxxxxxxxxxxxxxxxxxxxyyyyxxyyyyxyzzyyyyxxxyyyzzzzzzzyyyyyyyyyyyyz{{{|||||{{{||||||||||}~~~~~~~~~~~~~~}}}}}}~~~~~~~~~}}}}}}}}~~~~~~~}}}}}|{{zzzz||||||||||||}~~}}}~~~~~~~~~}}||}}~~~~|}~~~~~~~~~~~~~~~~}~~~~~}}}}}}}}}~~~~}}|||||{||||||||||}}||||}|||||}}}}}}}}||||}}}}}}|{{{|||{{|}|||||||||}||||}||}}~~}}}||}}}}}}~}~}}}}}}}}}~~~~~~~~~~wwwwwwwwxxyyxxyyyyyyyyyyxwwxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyxxxyyzzyyzzyyyyxxxyyyyyyyzzzz{{{{{{{{{{{{{{{{{||}}~~~~~}}}}~~~~~~~~~~~}}}~~}}}}}}}}}}~~~~~~~~~~~~}}}}}}}}}}}~~~}}}}}}||{{z{{{{||||||||||~~~~~}~~~~~~~~~~~}}}~~~|}~~~~~~~~~~~~~}~~~~~~}}}}}~~}|||||||||||{{{{|||||||}}}}||||||}}}||}}}}}}}}||||||||||||}||||}|||||}}}}}}|}}}}}}}||}}}}}~~~~}||}||||}}}~}}}~~wwwwwwwwwxxxwwwwxxxyxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzyyyyyyyyxxxyyyyyyzzzzzzzzzz{{{{{{{{zz{{{{|}}}}~~~~~~~}}}}}}}}}}}}}}}|||}}~~~~~}}}}}}}}}}}}~~~~~}~~~}}||}}}|}}~~~}}|}}}|||||||{{{{{{{{{||||~~~~~~~}}}}}}~~~~~~}~~}~~~~~~~~~~~~~~~~~~~~~~}}~~}||||||||||||{{{{|||||}}~~}|||||}}|||}}}}}}|}}|||||}}}}||}||||}~}}}|}}}~~~}}}}}}}}}}}}}}~~~}||||{||}}}~}}}~~~~wwwwwwwwwwwwvvvwxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyzzyyyyyyyyxxxyyyyyyyyyyyyyyzz{{{{{{{{zzzz{{|||||}}~~~~~~~~}}}}}}}}}}}}}}}|||}}~~~~~}}}}}}}}}}}~~~~}}}~}}|||}}}|}}~~~}||||||{|||||{{{{{{{{{||}}~~~~~~~}}}}}}~~~~~~|}~}~}~~~~~~~~~~~~~~~~~}}}~~~~~}}|||||||||||||{{{|}}}}~~~~}}}|||}}|||}}}}}}}}}}}|||}}}}||}|||}~~~}}}}}}~~~}}}}}}}}}}~~~~~~}|}}|||}~}}}~~~~xwwwwwwwwwwwvvvwxxxxxxxxxxxyyxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyxxxyyyyyyyyyyyyyyyzzz{{{{{zyyzz{{{{{{||}}~~~~}}~~~~~~~}}}}}}}}}}}}}}}||||}}}~~}}}}}}}}}}}}}}}}}}}}}}}}||||}}|}~~}||||||{{||||{{{{{{{{{|}}}~~~~~~~}}}}}}~~~~~~}~}~~~~~~~~~~~}}~~~~~}}}}}}}|}}}}||||||}}}}}~~~~}}}|||}}}||}}}}}}}}}}}||||}}|||}}|}}~~~}}~~~~~~}}~~~~}~~~~~~~}}}||}~~~~~~~xxxwwwwxwwwwvvwwwwwwxxxxxxxyxxxxxxxxxxxxxxxyyyxxxxyyyyyyyxxxxxxxxyyyyyxyyyyyyyxxxyyyyyyxyyyyyyyyyzzzzzzzzzyyzzzzz{{{{||}}~~~~}}}~~~~~~~}}}}}}}}}|||||||}|||||}}}~~}}}|||||||||||}}}}}}|||}}|||||}}}~~~}||||||{{|||||||||{{{{|}}}~~~~}}}}}}~~~~~~~~~~~~~~~~~}}}~~~~}}}}}}}}}}}}}||||}}|||}}}}}|||{|}}}|}}}}}}}}}}}}||{{|||||}~}}}~~~}}~~~~~~~~~~~~~~~~~~~}}}~~~~~~yxxxwwwwxxxxwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyxxxxxxxxyyyyyxxyyyyyxxxyyyyyyyxyyyyyyyyyzzzzzzzzzyyzzzzzz{{{{|||}~~~~}}~~~}}~~~~~~~~~~~}}}}}}}}}}||||||||{{{{||||}~~~~}|||||||||||||||||||||||}}}}}|||}}~~~}}}|{{{{{{{||||||||||{{{|}}}~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~}}}}}}~~}}}}}}}|{{{||}}||}}}}}}}}}}}}|||{||||}~}}}}~~~}}~~~~~~~~~~~~~~~~yyyxxxxyxxxxxxxxxwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyxxxxyyyxxxyyyyyyyxyyyyyyyyyzzzzzzzzzyyzz{{zzzzzz{{{|}}~~~}}}}}}}~~~~~}~~~~~}}}}}}|}}}}|||||||{{{{{|||}}}~~~}||||||||||||||||||||||}}}}}}|||||}~~~}}|||{{{{{{{{|||||||||||{{|}}}}}~~~~}}}}}}~~~~~~~~~~~~~~~~~}~~~~}}~~~~~~~~~~~~~~~~~~~}}}}~~}}}|}~~}|||||}}||}}}}}}}}~~}}}}||||||}~~}}}~~~}}~~~~~~~~~zzzzyyxxyyyyyyyyxxwwxxxxxxxxxxxxxxxxxxxxxxwwwxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyxxxxxyyyyyyyxyyyyyyyyyyyzzz{{{{zzzzzzzzzzzzzz{{||}}~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}|||||||{{{|}|||||}}~~~~~~~~}}||||||||||||||||{||||||}}}}||||{{{|||||||{z{{{{{{{{{{{{{{{{{{{{||}}~~~~~~~~~}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~}~~~~~~}~}}}}}}}}}}~~~~~}}}}||||||}~~}}}~~~}~~~~{{{zzzyyyyyyzzzzyyxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwxxyxxxxwwwxxxxxxxyyyyyxxxxxwwxxyyyyyyyyyyyyyyyxxyyzzzzzzzzzzzzzzyyyyyzzz{{||}}~~~~~~~~~~~~~~~}}}}}|||||||}}}}}}}}}}}}}}}|||{{||||{{|||||{||}}}}}}}}}}|{||||||||||||{{{{{{{{{|||||||{{{{{|||{{{{zzzzzzzzzzz{{{{{{zzz{{|{}~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}~~~}}}~~~~}~}~~~~~~~~~~~~~~~~~}~~}}}|}}||||}~~}}}}}~}}}~~~~~{{{{zzzzzzzz{{zzzzyyyyyyyxxxxxxxxxxxxxxxxwwwxxxxxxyyxxxwwwwxxxxxxxxxxxxxxwwxxxxxyyyyyyyyyyyyyyyxxxyzzzzzzyyyzzzzzyyyyyyzzzzz{{|}~~~~~~~~~~~~~~~~~~~~~~~}}|}|||{{{{{|||||||||||||||||{|{{{|||{{{{||{{{|}||||||||{{|||||||||||||{{z{{{{{{|||||{{{{zz{{{{{{{{zzzz{{zzzz{{{{{zzzz{{{||}~~~~~~~~}}}~~~~}}~~~~~~~~}}~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}}~~~}}}~~~}}}~~~~~~~~~~~}}}|}}}||}}~~}}}}}~}}|}}~~~~~~~~~{{{{zzzzzzz{{{{zzzzyyyyyyyxxxxxxwxxxxxxwwwwwxxxxxxyyxxxwwwwxxxxwwwxxxxxxwwwxxxxxxxxxxxxxxyyxxxyyyyyzzzzzzyyyzzzzzyyyxxyyyyyyzz{{}}}}}}~~~~~~~~~~~~~~~~~~~}}||}|||{{{{{||||||||||||||||{{|{{||{{zz{{{{{{{||{{||||||{|||||||}}||||{{{{{{{||||||||{{{{zzz{{{{{{{zzz{{{{zzz{{{{{zzzz{{|||}~~~~~~}}}}}}}}}~~~~~~}}}~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}}}~~~}}}~~~~~~~~~~~}~}}}}}}}~~~}}}}}~}}|}}~~~~}~~~zzzzzzyz{{z||{{{{{zzyyyyyyyxxxwwwwwwwwwwwvwwwwxxxwxxxxwwwwwxxxwwwwxxxxxxwwwxxxxxxxxxxwwwwxxwxxyyyyyzzzzzyxyyz{zzzyyyxxyyyyxxyyzz{||||||}}~~~~~~~~~~~~~~~~~~~~}}||}||||{|||}}}|}|||||||||||{{|{{{||{{zz{{{{{||{{{||||||||||||||}}||||{{{||||||||||||{{{{zzzzz{{{{{zz{{{{{zzz{{{{{{{z{{{|||}~~~~~~}}}}}}}}}}}~~~~~~}}}}}}}~~~~~~~~}}}}~~~~~}}~~~~~~~~~~~~~~~~}~~~~}}~~~~~~~~~~~~~}}~~~}}}}~~yyyyyyzzzz{{{|||{{{zyyyyyyyyxxwwwwwwwwvvvvvwwwwwwwxxwwwwwwwxxxwwwwxxxxxxwwwxxxxxxxxxxwwwwwwwxxxxxxyyzzzzyxyyzzzzzyyxxxyyxxxxyyyzz{{||||}}~~~~~~~}}}}~~~~~~~~~~~}}|}||||||||}}}}}}}}||||||||{{|{{{|||{{zz{{{{{{{{{{{{{{|||}}}}}}}||||{{{|||||||||||||{{{{zzzzz{{{{zzz{{{{{zzz{{{{{{{{{z{|||}~~~}}}}}}}}}}}||}}~~~~~~}}}}}}}}~~~~~~~~}~~~~~~~~~~~}}}}}~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~yxxxxyyzzz{{{|||||{zyyyyyyyyxxwwwwwwwwvvvvwwvvvvvwwwwwwwwwwxxxwwwwxxxxxxwwwxxxxxxxxxxwwwwwwwwwxxxxyyzzyyyxxxyzyyyxxxxxyyxxxxxxyyz{{{{{|}}}~~~~~}}}}}}}~~~~~~~~~~~}}}}}|||}}}~~~~~}}}|||||||||{|{{{|}||{zzzzz{{{{{{{{{{{||}~~~~~~}}|||{||}}}}}}}}|||||{{{{zzzzz{{{{zzz{{{{{zzz{{{|}}}||{{{||}~~~}}}}}}}}}}}||}}~~~~~}}}}}}}}}}~~~~~~~~~~~~}}}}}}~~~~~~~}~~~~~~xwwwwxyyzz{{{{||||{zyyyyyyyyxxwwwwwwwwvvvvwwvvvvwwwwwwwwwwwxxxwwwwxxxxxxwwwxxxxxxxxxxwwwwwwwwwwwxxyyyyyyxxxxyzyyyxxxxxyyxxxxwxyyz{{{{{|||}}}~~~~}}}}}}}}~~~~~~~~}}}}}}}|}~~~~}}|||||||||{|{{{|}}|{{{z{{{||{{{{{{{{||}}}}}}}||{{{{{|}}}}}}}}|||||{{{{zzzzz{{{{zzzzzzzzzz{{{{|}}}}}|{{||~~~~}}}}}}}}}||}}~~~~~}}}}}}}}}}}~~~~~~~~~~}}}}}}~~~~~~~~~~~~wwwwwxxyyyzz{{{{{{{zzzzyyyxxxwwwwwwwwwvvuvwwvwwwxxxwwwwwwwwxxwwwwwxxxxxxwwwxxxxxxxxxxwwwwwwwwwwwwxxyyyxxxwxxxyyyyxxxxxyyxxyxxyyyzzzz{{{{{||}~~~~~}}}}}}}}~~~~~~~~~~}}~~}}~~~~}}|||||||||{|{{||||{{{{{{||||||{|||{{{{{{{{||||{z{{{{||||}}}|||||||{{{{zzzzz{{{{zzzzzzzz{{{{{||}}}}}||||}~~~}}}}}}}}||}}~~~~~}}}}}}}}}}}~~~~~~~~~~~}}}~~~~~~~~~~~wwwwxxxyyyzzz{{{{z{zyyyyxxxxwwvvvwwxwwvuuvwwwxxxwwwwwwwwwxxxwwwwwwxxxxwwwwxxxxxxxxxxxxxxwwwwwwwwwxxyyxwwwwxxxyyyxxxxxxxxxxxyyyxyyzzzz{{{z{||}~~~~~}}}}}}}}~~~~~~~~~~~~~~~}}~~~~~}||||{{{{{{||||||||{{{|||}}}||{{{{{{zzzzzz{{{{{{{{{{{{||||||||||||{{{zzzzzzz{{zzzzzzzz{{{{{{{{|||}}}}}|}~~~~~~~~~~~~~~}|||}}}}||}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~wwwxxxxxxyzzzzzzzzzyyyyyyxxwvvvvvwwxwwvuuvwwwwwwwwwwwwwwxxxxwwwwwwwwwwwwwwxxxxxxxxxxxxxxxwwwwwwwwxxxxxwwwwwwwwxxxwxxxxwwxxxyyxxyyyyyyyyzzz{|}}}}}~~~~~~~}}}}}}}}}~~~~~~~~~~~~~~}}}~~~~~~~~~~~}|||{{{{{|||||{{{{z{||}}}}}}|{{{{{{zzzzzz{{||||||{{{z{{{{||||{{{{{zzzzzzyyz{{zzzzzzzz{{{{{{{{|||}}}}}}}~~~~~~~~~~~~~~~~}}|}}|||||}}~~~}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~wwwxxxxxxxxxxyyyyyyyyyyyyxxwvvvvvwwwwwvvvwwwwwwwwwwwwwwxxxxxwwwwwwwwwwwwwwxxxxxxxxwwwwwwwwwwwvvwwxxxwwwwxxwwwwwwwxyxxwwwwwwxxxxxyyyyyxxyyyzz{||||}~~~}}}~~~}}}~~~~~~}}}}}}}}}}~~~~~~~~~~~~~~}||}~~}}}}}}}}}|{{{{{{{z{{{{{{zzz{|}}}}}}}|{{{{{{zzzzzz{|||}}||||{{{{{z{{{{{{{{{zzzzzzzzz{{{zzzzzzz{{{{{{{{|||}}}}}}}~~~~~~~~~~~~~~~~}~}}}||||||}}~~}}}}}~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~wwwwwwwwwwwxxxyyyxyyyyyyyxxwwvvvvwwwwwvvvwwwwwwwwwwwwwxxxxxxxwwwwwwwwwwwwwxxxxxxxwwwwwwwwwwwvvvwwwwwwwwwxxwwwwwwwxyxxwwwwwwxxxxxyyyyxxxxxyyzzzz{{||}}|||}}}|||}}}~~~~~}}}~~}}}}}}}}}}}}}}~~~~}}}}~}}~~~~~}||}~~}}||||||||{{{zzzz{{{{{{{zzz{|}}}}}}}||||{{{zzzzz{||||}~~}}|||{{{z{{{{{{{{{zzzzzz{{{{{{{zzzzzz{{{{{{{{|||}}}}}}}~~~~~~~~~~~~~~~~~}}||||||}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~wwwwwwwwwwwxxxxxxxxxxyyyyxxxwvvvvwwwwwvvvwwwwwwwwwwwwwxxxxxxxwwxwwwwwwwwwxxxxxxxwwwwwwwwwwvvvvvvvvvwwwwxxxwwwwxxxxxwwwwwwwwxxxxxxxxxxxxxxyyzzzz{{{{{{{{{{||||||}}}~~~~~~~~~~~~~~~}|||}}}}}}}}}}}}}}|}~~~}}}}}||}}}}}|||}}}||{{{{{{{{zzzzzzz{{{{{{{{z{{|}}}|||||{{{|||{zzzz{||||}}~~~}}|||{{{{{{{{{{{zzzzzz{{|||||{zzzzz{{{{{{{{|||}}}}}}}~~~~~~~~~~~~~~~~~~}}}||||||}}~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~wwwwwwwwwwwwwxxxxxxxxyyyyyxxwvvvvwwwwwvvvwwwwwwwwwvwwwxxxxxxxwxxxxwwwwwwxxxxxxxxwwwwwwwwwwwwwwwvvvvwwxxxxxwwwwxyyyxwwwvwwwwxxxxyxxxxxxxxxxyyzzzzzzzzzzzzz{{{{{||||||}}}}|}}~~~~~~~~~~~~~~~~~~}|{{{||}}}}}}}}}||||}}}}|||{||{|}}}}|{{|}||{zz{{{{{{zzzzzzz{{{{{{{{{{||}}||||||{{{||{{{zzz{||||||}~~}}||||{{{{{{{{{{{zzzzz{{|}}}|{{{{{z{{{{{{{||||}}}}}}}~~~~~~~~~~~~~~~~~~}~}|||||}~~~~~~~~~~}}~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~}~~wwwwwwwwwwwwwwxxxwxxxyyyyxxxwvvvvwwwwwvvvwwwwwwwwwvwwwxxxxxxxwxxxxxxxxxxxxxxxxxxwwwwwwwwwwwwwwvvvvvwwxxxxxwwwwyyyyywwwvwwwwxxxxxyyyxxxxxxxxyyyyyyyzzzyyzz{{{z{||||{|||||||}}}}}}}~~~}}}}~~~~~~~~~}}|{{{||}}}}}}}}||||||||{{zz{{{{||||||{{|}|{{{{{{{{{{{{zz{{{{|||||{{{|||}||{{|{{{{|{{{{{zz{{||||||||}}}||||{{{{{{{{{{{{zzzz{||}}}}|||{{{{|||{{{||||}}}}}}~~~~~~~~~~~~~~~~~}~~||||}}~~~~~~~~~}}||}}}~~~~~~~~~~}~~~~~~~~~~~~~~wwwxxxwwwwwvwwwwxxxxxyzzyxxxwwwwwwwwwwvvvwxwxxxwvwvwwxxxyxxxxwxxxyyyyyxxxxxxxxxxwwwwwwwxxxxxxwvvvvvwwxxyxxxxxxyyyyywwwwwwwxxxyyyyyyyxxxxxxxyyyyyyyzzzyyzz{{{z{zzzz{{{{||{{||||||||||||}}~~~~~~~~~~~~~~}}|{{{||}}}}}}}}|||||{{{{zzzz{{{|||||{{{|||{{{{{{||{{{{{{{{{|||||||||||}}||{{|{{{z{|||{zzz{{|||||||||}}||||{{{{{{{{{{{{zzzz{|}}}}}|||||||||||||||||}}}}}}~~~~~~~~~~~~~~}~}}|||}~~~~~~~~~~~~~~~~~~}}||}}}~~~~~~~~~~~~~~wwwwwwvwvvvvvwwwwwxxyyyyxxxxwwwwwwvvvvuuwwwvwxyvvvvwxyyyxxxxxxxyyyzzzyyxxxxxxxxxxwwwwwwwxxxxxwwvvuvvwwxxxxxwwxyyyxxxxwxxxxxyyyyzyyyxxxxxxxxyyyyyyyyzzzzzzz{{{{{zzzz{{{{{{{{{{{{{{{{{|||}~~~~~~~~~~~~~~~~~~~~~~~}}||||||||}}}}}}|||||{{zzzyzz{{{{{{{{{{{{|||||||||||{{{{{{{{|||||||}}}|||||{{||{{z{|||{zzyzz{{{{{{{{|}}}|||{{{{{{{{{{{{{{{{|}}}}}}}}||||||{{||||||||}}}}~~~~}~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~}}~~~~~~~}}}}}|}}~~~~~~~~~~~~~~~~~~~~~~wwwwwvvvvuuvvvwwwwwxyyyxxxxxwwxxxwwvvvuuvwwuwwxuuuvwyyyyxxxxxyyyyyzzzyyyxxxxxxxxxxxwwwwwxxxxxwwvvvwwxyxxxwwwwwxxxxxxxxyyyyyyyzzzyyxxxxxxxxxyyyyyyxyzzzzzzz{{{{{zzzzzzz{{{{{zzzzzzzzz{||}}}~~~~~~~~~~~~~~~~~~~~~~~~~~}}||||||}}}}}}}|||||{zzzyyyyz{{{{{{{{||||||||||}}}||||{{{{|||||||||}}|||{{{{||{{{||{||{zy{{||{{{{{||}}}}||{{{{{{{{{{{||{{||}}}}}}}}|||||||{|||||||||}}}~~~}~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}~~~~~~}}}}|}}~~~~}}~~~~~~~~~~~~~~~~~~~~~wwwwwvvvvuuvvvvvwwwxxxxxxxxwwwxxxwwvvvuuvwwuwwxvuuwxyzyxxwxyyyyzzzzzzzyyyyxxxxxxxxxxwwwwxxxxxwwvvwwxyxxxxwwwwwwxxxxxyyyyyyyyyzzzyyxxxxxxxxxyyyxxxyzzzzzzzz{{{{{zzzzzzzzzzzzzzzzyyyyyz{{|||}}~~~~~}}~~}~~~~~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~}}|||||}}}}}}}}|||||{zzzyyzzz{{|||||||||||||||}}}}}|||{{{|||||||||||||{{{{{|}}|||||}}|{{z{|||{{{{{||}}}}}|{{{{{{{{{{||||{{|}}}}}}}||||||||||||{{{{|}}}}~~~}~~~~~~~~~~~~~~}}}|||}}}}}}}}}~~~~~~~}}}}~~~~~~}}}~~~~~~~~~~~~~~~~wwwwvvvvvuuvvvvvwwwxxxxxxxwwwwxxxwwvvvuuvvvuvwxvvvxyzzyxwvwxyyzzzyzzzzzzyyyxxxxxxxxxxwwxxxxxxxxwwwwxxxxxxxwwwwxxxxxxxxxxyyyyyzzzyyxxxxxxxxxxxwwwxxxyyyzzzzzzzzzzzzzzyyzzzzzzzzzyyyyyyzzzz{||}}}}}}}~~}~~~~~~~~~~~~~~}}}}}}}}~~~~~~~~~}}}~~~~~~~~~~}}}}|||}}}}~}}}}|||||{zzzzzzz{{||||||||||||||}}}}}}|||{{{{{{|||||{{{{{{{{{{{|}}}|||}~}}|{{||||||||||}}}}}}|{{{{{{{{{|||||{{{||||||||||||||||{{{{{z{{||}}}}}}}~~~~~~~~~~~~~}}}}}}}}}}~~~~~~~~~~~~~~}}}~~wwwwvvvvvuuvvvwwwwxxxxxxxwwwwxxxxwwvvvuuuvvuvwwvwwyzzzxwvvwxxyzzyyzzzzzyyyyxxxxxxxxxxxxxxxxxxxxxwwwwxxxxxxxxxxxxxxxxxxxxxyyyzzzzyyxwwwxxxxxxwwwwxxxxxyyzzzzzzzzyzzzzyyzzzzzzzzyyyyyxxxyzzzz{{|}}|}~~}}~~~~~~~~}~~~~~~~}}}}}}}}}~~~~~~}}}}}}}}}}}~~~~~~~}}}}||||}}}}}}}}}|||||{{{{{{{{{|||||||||||||||}}}|||||{{zzz{{{{{{{{{{{{{{{{{||}}}||}}}~}||{||||||||||}}}}|||{{{{{{{{{{|||{z{{{{||||||{{{{{{{{{{{{{zz{{|||||||}~~~~~~~~~~~}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~}}~~~wwwvvvvvvuvvvvwwwwxxxxxwwwwwwxxxxwwvvvuuutuuvwwwwxz{zzxvuuvwxyzzyyzzzzzyyyyxxxxxxxxxxxxxxxxxxxxwwwwwwxyxxxxxxxxxxxxxxxxxxyyyzzzzyxwwwxxxxxxwwwwwwwwxxyyyyyyyyzzzzzzzyzzyyzzzzyyyyyxxwwxyyyyzz{|||}~~}~~~~~~~~~}}~~~~~~~}}}}}}}}}}}}}}}}}}|||}}}}||}}}}}}}}}}}}}|||||||}}}}||||}||||{{{{{{||||||||||||||||}}|||{{{{zzzzzz{{{{{{{{{{{{{{|||}}}|}}}}~~}||}|||}}}}}}}}}||||{{{{{{{{{{{{{{z{{{{||||||{{{{{{z{{{{{{zz{{||||||||}~~~~~~~~~~~~~~}}}}}}}}~~~~~~~}}}~~~}~~~}~~~wwwvvvvvvuuvvvvwwwwwwwwwwwwwwxxxxwwvvvuttuuuvvwwxy{|{yxvuuvwyyzzyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxwwwwwwxyxxxxxxxxxxwxxxxxxxyyyzzzyxxwwwxxyyxxwwwwwwwwxxxxyyyyyyyyzzzzyyyyyyyzzzyyyyxxyxxxyyyyzz{{{|}}}}}}~~}}}}}}}~~~~~~}}}}}}}}}}}|||||||||||||}}}}}}}}}}}}}}}}}|||{{{||||||||}}}||||{{{{{|||||||||||||||||||{{{{{zzzzzzzz{{{{{{||||||||||||||||}~}}}}||||}}}}|||}}}||{{{{{{{{{{{{{{{{z{{{||||||{{{{{{{z{{{{{{{{{{||}}}|||}}}~~~~~~~~~~~~~~~}}}}}}}~~~}}~~}~~~~~wwwvvvvvvuuvwwvwwwwwwwwwwwwwwxxxxwwvvvuttuuuuvwwyy{{{ywvuuvxyzzyxxyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyxxxxxxyyyyyxwwwwwwwwxxxxxxyyyyyzzzzzzyyyyyyyyyyyyyyyyxxyyyzzzzz{{{|||||}}}}}}}}~~~~~}}}||}}||}}}}|||||||||||}}|}}}~}}}}}}}}}}}}}|||{{{{{{|||}}}}}}|||||||||||||{{{{|||||||||{{{{{{zzzzz{{{{{{{{||||||||||||||||}||||}}||{||||||||}}|||{{{{{||{{{{{{{{zz{{|||||||{{{{{{{{{||{{{{{|||}}~~~}}}}}~~~~}~~~~~~~~~~~~~~~~~~~~~~~}~~wwwvvvvvvvvuwwwwwwwwwwwwwwwwwwwwwwwvvuuuuuuuuuvwxyzzzywvvvwxyyyyxwxxyyyzyyyyyyyyyxxxxyyxxxxxxxxwwwwwwwxxxxxxxxxxxxxxxxxxxxxxyyxxxwwwxxxxxyyxwwwwwwwwwwwxxxxyyzz{{zzyyyxxyyyyyyyyyxxxxxxxyzzzzzzzz{{{|||}||}~}}}}}}~}}}||||||}}}}||||||||||}}}}}}~~}}}}}}}}}|}}}||||{{{{{||||}}}}}}}||||||||||{{{{{||||||||{{{{{z{zzzzz{{{{{{{|||||||||||||||||||{||||{{{{||||||||||{{{{{{{||{{|||{{{z{{|||||||{{||||||||||||||||||}~~~~}}}}}~~}}~~~~~~~~~~~~}}~wwwvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwvvuuuuuuutuvvxxyyyywwwwwxxxxxxwxxyyzzyyyyyyyyyyxxyyyxxxxxxxxwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxwwwxxxxxyyxwwwwxxwwwwwwxxxyyz{{{{zyyxxxxxyyyxyyyxxxxxxyzzyyyzzzzzzz{{||}}}~}}}}}|||||||||||}}}}|{||||||||}}}}}~~~}}}}}|||||}}||||||{{{{{{{|}}}}}}}}|||{{{{{{{{{{{{|||||||{{{{z{{{{zz{{||{{{{|||||||||||||||||{{{{{||{{{{{{{{|||||{{{{{{{|||||||||{{z{{|||}||||||||||}}|||||||||}}}~~}}}}}}}}~~~~~~~~~~~~wwwvvvvvvvuvvvwwwwwwwwwwwwwwwwwwwwvvuuuuuuuttuvvvwxxxxwwwwwwwwwxxwwwyyzzyyyyyyyyyyyyyyyxxxwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxwwwxxxxxyyxxxxxxxwwwwwwwwxxyzzzzzzyxxxxxxxxxxxyyxxxxxyzzyyyyyyyyyyyz{{|||}}}|||||{{{|||||{||}}}|{|||||||}}}||}~~~}}}|||||||||||||||||{{{{{{||}}}}}}||{{{{{{z{{zzz{{{{||||{{{{{|||{{{{||||{{{||||||||||||||||{{{{{{||{{{{{{{|||||||||||||||||}}}}||{{{{||}}}}|||||||}~}}}}}||||}}}~~~}}}}}}}~~~~~~~~wwwwwvvvvvvvvvvvwwwwwwwwwwwwwwwwwvvuuuuuuutttuvvvvwwwwwwwwwwwwwxxwwwxxyyyyyyxxxxxxxyyyyxxwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxwwxxxxyyyyyxxxxxxwwwwwwwwwxyzzzzzyyxxxxxxxxxxxyyxxxxxyzzyyyyxxyyyyyzzz{{{||||{{{{{{{|||||{{{|||{{|||||||||||||}}}}}||||||||||||||||||||{{{{|||||||||{{{{{zzzzzzzz{||||||||||||||||{{|||||||||||||||||||||||||||{{{||||||||}}}|||||||||||||||}}}}}||{||}}~~}}}}||||}~~~}}}}}||}}}~~~~~~}}}~~~~~~~~~~wwwwwwvvvvvvvvvvvwwwwwwwwwwwwwwwvvuuuuuuuutttuvvvvvvvwwwwwwvvwwxxwwvwxyyyyxxxxxxxxxyyyyxxwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxwwxxxxwwwxxyyxyyyxxxxxwwwwwwwwwxyzzzzzyyxxwxxxxxxxxxyyxxxxxyyyyyyxxxxxxxyyzzzz{{{{{z{{{{{{||||{{{{{{{{|||||||||{{{||}}||||||{||||||||||||||}}||||||||||{{{{{zzzzzzzzzzz{{||||}}}}}||}|||||}}}}||||||||||||||||||||||||{{{||||||}}}}||||{{{{||||||}}}}}}}|||}~~~~~}}}}||}~~~~~}}}}}|||}}}~~~~~~~~~~~~~~~~~xwwwwwvvvvvvvvvvvwwwwwwwwwwwwvvvvuuuuuuuuutttuvvvvvvvwwwwwvvvwwxxwvvwxyyxxxxwwwwwxyyyyyxxwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxwwwwxxxwwwxxyyxyyyxxxxxwwwwwwwwwxxyzzzyyxxxwxxxxxxxxxyyxxxwxxxyyyxxwwwxxxxyyyyyyzzzzz{{{{{|||||{{{{{{{|||||||{{{{{{|}||||{{{{||||||||||||||}}}}||||||||{{{{{{zzzzzzzzzzz{{|||}}}}}}}||}}||}}}}}}|||||||||||||||||||||||{{{|}}}}}~~~}||||{{{{||||||}}}}}}}||}}~~~~~}}}}||}~~~~~~}}}}||||||}~~~~~~~~~~~~~~~~~~xxwwwwvvvvvvvvvvwwwwwwwwwwwwvvvvuuuuuuuuuutttuuuvvuvvwwwwwvvwwwxxwwwwxyyxxxwwwwwwxyyyyyxxwwwwwwwwwwwwwwwxxwwwwwwwwwwwwxxxwwwwwwwwwwwwxxxyyyxwwwxwwwwwwwwwwxxyyyyyyxwwxxxxxxxxxxyyxxxwwwxyyxxwwwwwxxyyxxxyyyyyyzzz{{{|}|{{{z{{{{{{|||||{{{{{{{{{||{{{{{{{{{||||||||||}}}~}}|||||||{{{{{{zzzzzzzzzzz{{{||}}}}}}}||}}|||}}}}}|||||||||||||||||||||||{{{||}}}}}}}}|||{{{{{||||||}}}}}}}|||}~~~~}}}}}||}}~~~~~}}}}|{{{{||}~~~~~~~~~~~~~~yxxxxwwwwvvvvwwwwwwwwwwwvvvvvvvuuuuuuuuuuuttuuuuuvvvwwxwwwvvwwwxxwwwwxyyxxwwwwwwwxyyyyyxxwwvwwwwwwwwwwwwxxxwwwwwwwwwwwwwwwwwwwwwwvwwwxyyxyxxwwwxwwwwxxxxxxxxyyyyyxxwwxxxxxxxxxxyyxxxwwwwxxxwwwxxxxxyyxxxyyyyxxyyyyz{{{{{zzz{{{{{{{{{{{{{{z{{{{||{{{{{{{{{{{||||{{{|||}~~~~}}}||||{{{{{{zzzzzzzzzzz{{{{||}}}}}}||}~}||}}}}}||||||||||||||||||||}}|{{{||}}}}}||||{{{{{{{||||||}}}}}}}|{|}}}}}}}}~~}|}}~~~~~}}}}|||||||}~~~~~~~~~~~~~yyxxxxwxwwwwwwwxwwwwwwvvvvvvvuuuuuuvvuuuuuuuvuuuuuuvwwxxwwvvwwwwxxxxxxyyxxxxwwwxxxyyyyxxwwwvwwwwwwwwwwwwxxxwwwwwwwwwwwwwwwwwwwwwwwwxxwxxxxxxxxxxxxxxwwwwwwxxxyyyxxxxxwxxxxyyxxxxxxxwwwwxxwwwxxyyyyxxxxxxxwxxwxxxxyyyz{{zzz{{{{{{{{{{{{{{zzz||||{{{{{{{{{{{{{{{{{{{{||}~~~~}}|||||{{{{{{{zzzzyzzzzzz{{{{||||||||}}~}|||||||||||||||||||||{|||{||}}|{{{||||||||{{zzyzzyzz{||||}}}}}}|{{{|}}}}}}}~~}}}}~~~~~~~}}|||||||}~~~~~~~}}}~~~~~~~~~~~~yyxxxxwwwxxxxxxxxwwwwwvvvvvvuuuuuuvvvuuvuuuuvuuvvuuuwwxxwwwwwwwvwxxxyyyyxxxxwwxxxxyyyxxwwvwwwwwwwwwwwwwwxxxwwvvwwvvwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxwwwwwwwwxxyxxxxxxxxxxyyyyyxxxxxwwwwxxwwwxxyzzyxxxxxyyxxxxwwwxxxyyzzz{{{{{{{{{{{{{{{{{{{||||{zzzzzzzzzzzzzzz{{{{{|}}}}}}}|||||{{{{||{{zzzyzzzz{zz{{{{{||||{|}}~}|||||{{||||||||||||||{|||{{|}}|{{{|||||||||{zzz{{z{{{|||}}}}}}||{zz{||||||}}}}}}}~~~~~~~~}||||||}~~~~~~~~}}}}~~~~~~~~~~~~~yyxxxxwwwxxxxxxxxwxxwwwvvvvvuuuuuuvvvuvvvuuuuvvvvuuuwwyxwwwwwwvvwxxyyzyyxxxxwwwxxyyyxxxwwwwwwwwwwxxxxxwxxxxwvvvvvvvvvvwwwwwwwwwxxxxxxxxxxwxxxxxxxxxwwwwwwwwwwxxxxwxxxxxxyyyyyyxxxxxxwwwxxwwwxxyzzzyxxxxyyxxxwxxxxxxyyyz{{{{{{{{{{{zzzz{{{{{{{{{{zzzzzzzzzzzzzzz{{{{{||}}}}|||||||{{{||||{zzzzz{{{{{{{{{{{{||{{||}}|{{{{{zz{{{{||||||||||{|||{{|}}|{{|||||}}||||{z{{{|||}|||}}}}}}|{zzz{{|||||}}}}}}}~~~~~~~~~}}}}}}~~~~~~~~~}}}}~~~~~~~~~~~~~~~~yyxxxxxxxxxxxxxxxwxxwwwvvvvvuuuuuvvvvvvvvuuuvwvwwvvvxxyxxwwwwwvvwxyzzzzzyxxxwwwxxyyyxxwwwwxxxxxxxxxxxxxxxxxwvvvvvvuuuvwwwwwwwvwxxxxwwwwwwwxxxxxxxwwwwwwwwwwwwwwwwwxxxwxxyyyyyyxxyxxxxwwxxwwxxyzzzzyxxxxyyxxxxxxxxxxyyyz{{{{{{{{{{zzzzzz{{{{{{{{zzzzzzzzzzzzzzzz{{{{z{||||||||||||{{{|||||{zzz{{{{{{{{{{{{{{{{{{|}}|{{{{{zz{{{{||||||||||{|||{{|}}||||||||}}}|||{{|{{}}||}}|}}}}}||{zzz{|||||||}}~}}}~~}}~~~~~~}}}}~~~~~~~~~~}}}}~~~~~~~~~~~~~~~yyxxxxxxwxxxxxxxxwxxxwwwvvvuuuuuvvvvvuuvvvvvvvwxwvvwxyyxxxxwwwvvwwxy{{{zyyxxxxxxxyyyxxwwwxxxxxxxxwwxxxxxxxwvvvvvvvuuuvwwwwwwvvwwwwwwwwwwwwxxxxxxwwwwwwwwwwwvvwwwwwxxxwxxyyyyyyxyyyxxxxwwxxxxyzzzzyyxxxxxxxxxxxxxxxyyzzzz{{{{{{{zzzzzzzzz{{{{{{zzzzzzzzzzzzzzzzz{{{zz{{||||||||||{{{{|||||{zz{|||||{{{{{{{{{{{z{|}}}|{{{z{{{{{{||||||||||{|||{{|}|||||||||}}}}||{{|}}}}~~}}}}}}}}||{{z{||||||||}}}}}}~~}}}~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~yxxxxxxxwxxxxxxxxxxxxxwwwvvvuuuvvwwwvuuvvvvwwvwxxwwwxyyxxxxwwwvvvwxyz{{zzyxxxxxyyyyyxwwwxxxxxxwwwwwwxxxxxxwvvuvvvvuuuvwwwxwwvvwwwwwvwwwwwwxxxxxwwwwwwwwwwwvvvvvvwwxxxwwxxyyyyyyyyyyxxxxxxxyyzz{{zyxxxxxyyxxxxxxxxxyzzzzzzzzz{zzzzzzzzzzzz{{{zzzzzzzzzzzzzzzzzzz{{zzzz{{{{||||{{{{{{{||||{{z{||}}}}}||||{{||{{z{||}||{{{{{{{{{{{{{{||{{{{|}|||||||||||||||}}}}||{|}}}~~~~}}}}}}}}|{{{{{|}}|||||}}}}~~~~}}}~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~~~~~xxxxxxxxxyyyyyyyxxxxxxxxxwwvvvvvwwwwvuuvvvwwwvwxxwwwxyyxxxxwwwvvvwxyz{{zzyyyyyyyyyyxxwwxxxyyxwwwwwwwxxyyxxwvvuvvvvvvvvwwxxxwvvwwwwwvwwwwwwxxxxwwwwwwwwwwwwvvvvvvwwxxxwwwxyyyyyyyyyyxxxxxyyyyz{{{zyxxxxxyyxxxxxwwxxxyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzzzzzz{{{{{{{{{{{{{{{{{{{||}}}}~~}}|||||||{{{|||{{{{{{{{{{{z{{{{{{{{{z{|}|||||{||||||||}}}}}}}|}}}~~~~}}}}}}}}|{||||}}}}|||}~~~~~~~~}}}~~~~~~~~~~~~~~}}}~~~~~~~~~~~~~~~~~~~~~xxxxxxxxxyyyzzzyyxxyxxxxxxwwvvvwwwwwvvuvwwwwwwxxxwwxxyyxxxxxwwvvvwxyzzzzzyyyzyyyyyxxxwwxxyyyxxwwwxxxxyyyxxwvvuvvvvvvvvwwxxxwwwwwwwwvwwwwwwxxxxwwwwwwwwwwwwvvvvvvwwwwwwwwxxxyyyyyzyyxxxxxyyyyz{{{zyxxxxyyyxxxwwxxxxxyzzzzyyyyzzzzzzzzzyyyyyzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{z{|}}~~~~~}}|||||||{{{{{{{{{{{{{{{{{{{{{{zzzz{{|}}|||||||||||||}~}}}}}|}}}~~~~}}}}}}}}|||||}}}}}}}}~~~~~~~~~}}~~~~~~~~~~~~~~}}}~~~~~~~~~~~~~~~~~~xxxxxxxxyyyyzzzzyyyyyyyyyxxxwwwwwwwwvvvvvvvvvvwxwwxxyyyxxyyxxxvvvwxyyzzzyyyyyyyyxxwwwwwxyyyyxxxwxxxxxyyyxxwvvuvvvvvvvwwxyxxxwwwwwwvvwwwwwxxyxxxwwvvwwwwwwwvvvvwwwwwwwwwwwxxyyyyzzzzyyyyyzzzzz{{yxxwwxxxyyxxxxwwxwwxyyzyyyyyyyyyzzzyyyyyyyyzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{z{{{{zz{{{{z{{{{zyz|}~~~~~}|||{||||{{{{{zz{{{{{{{{{{{{zzzzzz{{|}||||||{||||||||}}}}}}}}}}}}}}}}}}}}}}|||}}}}}}}}}}}~~~~~}}~~~~~~~~~~~~~~~~}}}}}}~~~~~xxxxxxxyyyyyyyyyzzzzyyyyyyxxwwwwwwwwwwvvvvvvuvwwwxyyyyxxxyyzyywwwwwxyyzzzzyyyyyxxwwwwwxyyxxxxxxxxyyyyyyyxxwvvvvvvvvvvwxxxxxxwwxxwvvvwwxxxxyyyxxwwvvvvvvwwwvvvwwwwwwwwwwwwwwxyyzzzyyyyyyzzzzzzzzyxxwwxxxyyxxxwwwwwwxyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzz{{{{zzzz{{{{{{{zzzzzzzz{{{{zyz|}~~~~}|{{|||||{{zzzz{{{{{{{{{{{{{{{{zzz{{|}||||||{|{|||||||}}}}}}}}}}}}}}}}}}}}}}|}}}}|||||||}~~~}}}~~~~~~}}}}}~~~~}}}}}}~~~~~xxxxxxxyyzzyxyxyzzzzyyyyyyxxwwwwwwwwwwvvvuuuuvwwwxyyyxxxwxyzyywwwwwxxyzzzzyyyyyxxwwvwwxxxxxxxxxyyzyyyyzyxxwvvvvvvvvvvwxxxxxxxwxxwvvvwwxxxxyyyyxxwvvvvwwwwwwwwwwwwwwwwwwwwwwxxyyyyyyyyyzzzzzzzzzyxxwwxxxyyxxwwwwwwwxyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzyyzz{{{{{{zzzzzzzyzzzzyyz|}~~~~~}}|{{||||{{{zzzz{{{{{{{{{{{{|{{{{{{z{|||||{|{{{{||||||||}}}}}}}}}}}||}}}}}}}}}}~~}|||||||}~~}}}}~~~~}}}}}}~~~~}}}}}}~~~~xxxxxxxyyzzyxxyz{zzzyyyyyyxxwwwwwwwwvvvuutuvvvwwwxxxxwwwxxyzyywwwwwxxxyzzzyyyyyxxwvvvwxxxxwxxxyzzzyyyzzyxxwvvvvvvvvvvwxxxxxxxxxxwvvwwxxxxyyyyyxxwvvvwwwwxwwwwwwwwwwwwwwwwwwxxxyyyyyyyzzzzzzzzzzyxxwwxxxyyxxwwwwwwwxyyyyyyyxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzyyyzzzz{{{{zzzzzyyyzzzzyyz||}~~}}}||{{{{{{{{{{{{{{{{{{{zzzz{{{|||{{{{{|||||{{{{{{{||||||||||}}}}|||}}}}}}}}}}}}}~~~~}|||||}~~}}}}}}~~~~~~}}~~~~~}}}}}~~~xxxxxxxyyzzzyyzz{{zzyyyyyxxxwwwwwwwvvvvuutuuvvwwwxxxwvvvxxzzyywwwwwxxxyzzyyyyyyxxwvvvwxxxwwxyyyyzzyyyzzyxxwvvvvwvvvvwxxxxxxxxxxwwvvwxyyyyzzzyyyxwvvvwxxxxxwwwwwwwwwwwwwwwwwxxxxxxxyyyzzzzzzzzzzyxxwwxxxyyxxwwwwwwwxyyyyxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzyyyyyyyzzzzzzzzzzyyyyyzzzyyyz{{}}}|||{{{{{{{{{{{{{{{{{{{{{zzzzz{{||||{{{{|||||{{{{{{|||||||||||}}}}||||}}}}}}}}}}}}~~~~}}}}}}}~~}}}}}}}~~~~~~~~~~~~}}}}}~~xxxxxxxyyzzzzzz{{{zzyyyyxxxxwwwwwwwvvvuuutuuvvwwwxxwvvuvxxzzyywwwwxxxxyyyyyyyyyxwvvvvwxxxwwxyyyyzzyyzzzyxxxwvvvvvvuvwwxxxxxxxxwwwwwxyzzzz{{zzzyxwvvwxxxyyxwwwwwwwwwwwwwwwxwwwwwxxxyyyzzzzzzzzzzyxxwwxyyyyxxwwwwwwwxyyyxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzyyyyyyyzzzzzzzzzyyyyyyyyyyyyyyzz|||{{{{{{{{{{{{{{{{{{{{{{{{z{{zz{|}}}|||{{||}||||}||||||||||||||}}}|||||}}}}}}}}}}}}~~~~~}~~~~~~}}}}}}~~~~~~~~}}}}}~wwwwwwwxyzzzzzz{{{zzyyyxxwwwwwwwwwwvvvvvvuuuuvvwxwwvvuuvxxzzyywwwxxxxxyyyyyyyyxxwvvvvwxxxwxxyyyyyyyyzzzyxxxwvvvvvvvwwwwxxxxxxwwwwwxyzz{{{||{{zyxwwwwxxxyyyxwwwwwwwwwwwwwxxxwwwwwxxxyyzzzz{{{zzzyxxwwxyyyyxxwwwwwwwxyyyxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzyyyyyyyzzzzzzzzyyyyyyyyyyyyyyyzz{{{{zz{{{{{{{{{{{{{{{{{{{{{z{{{z{|}}}}|||||}}}|||}||||||||||||||}}||||||}}}}}}}}}}}}~~~~~~~~~~}}}}~~~~~~}}}}}~wwwwwwwxxyzzz{{{{zzyxxxwwwwvwwwwwwvvvvvvvvvvvvvvwwvvuuuvxxzzyxxwxxxxxxyyyyyyxxxwwvvvwwxxxwxxyyyyyyyzzzyyxxxwvvvvvvvwwwwwxxxxwwwwxxyzz{|||}||{{yxxwwwxxyyyyxxxxxwwwwwwwxxxxxxwwwwxxxxyzzz{{{{{zzyxxwwxyyyyxxxxxxxxxxyyyxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyzzzzzzzyyyyyyyzzzzzzzzyyyyyyyyyyyyyyyzz{{{zzzzzzzzz{{{{{{{{{{{{{{{z{{{{{|}}}}||||}}}}||}}}|||||||||{|||}}||||||}}}}}}}}}}}}~~~~~~~~~~~~~~~~}}}}~~~~wwwwwwwxxxyyzz{zyyyxxwwwwvvwwwwwwwvvvvvvwvvvvwwwwvvuuvvwwxyyyxwxyxxxxxyyyyyyxxxwwvvvwwxxxwxxxyyyyzzz{zzyywwvvvvvvvvwxwwwwxxwwwwxyyyzz{|}}}}|{{yyxxxxxyyyyyyxxxxxxwwwxxxxxxxxxwwwxxxxyzzzz{{{{{zyxxxxxyyyyyyxyyyxyyyyyyxxxxxxxwwxxxxxyyyyyyyyyyyyyyyyyyyzyzzzzyyyyyyyyzzyyyyyyyyzzyyyyyyzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{|}}}}}}}||}}}}}|}}}}||||||||{{||||||||||}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~wwwwwwwxxxxyyyzyyxxwwwwwwvwxwwwwwwvvvvwwwwwwwxxxwwvuvvvwwwxxxxwxxxxxxxxyxxxxxxwwwwwwwwwwwwwxxxyyyzzzzyyxxwwvvvvvvvwwxxwwwwwwwwwxyyzz{|}~~~|{{{zzyxxyyzzzyyyyxxxxxxxxxxxxxxxxxxxxxxxxxyzzz{{{{{zyxxxxyyzzyyyyyyyyyyyyyyxxxxxxxwwwxxxxxyyyyyyyyyyyyyyyyyyyyzzzyyyyyyyyyzzyyyyyyyyzzzyyyyzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{z{{{{{||}}}}}}}}}}}}}}|}}}}||{{|||{{||||}}}|||}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~}~~~~~~wvvvvvvwwxxyyxxxxwwwwwwwwxxxwwwwwwwvvwwxxwwwxxxxwwvvvvvwwwwwwwwwxxxxxwxxxxxwxwwwwwwwwwwwwwwwxxxxyzzzzyxwxwwwvvwwwwxxxxxxwwwwwwwxyzzz||}~~}|{{{zzzyyyzzzzzyyyyyyyyxxxxxxxxxxxxxxxxxxxxxyzzz{{{zyxxxxxyyzzzyyzzyyyzzzzzyyxxxxxxwwxxxxxxxxyyyyyyyyyyyyyyyyyyyzzyyyyyyyyyzzyyyyyyyyzzzzyyzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{zzz{{{{{|}}}}}}}}}}}}}}}}}}}||{{{||{{{|||}}}}}}|}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~}}}}~~~~~~wvvvuvvvwwxxxxwwwwwwwwxxxxxxwwwwwwwwwwxxxwwxxxxxwwvvvvvwwwwwwwwxxxxxxwxxxxwwwwwwwwwwwwwvvwwwwwwwyyyzyxxwxwxwvwwwxxyxxxxxwwvvvwwxyzz{|}}~}||{{{zzzzzzzzzzzzyyyyyyyyxxyyyyyxxxxxxyxwwwwwxyzzz{zzyxxxxxyyzzzzyzzzzzzzzzzzyxxyyyxxwxyyxwwxyyyyyyyyyyyyyyyyyyyyzzyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{zzzzz{{{{{|}}}}|||}}}}}}}}}}}}||{{{{{{{{||}}}}}}}|}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~}}}}~~~~~~~~~~~~~~wvvvvwwwwwxxxxwwwwwwxxxxxxxxwwwwwwwwwxxxxxxxxxxxwwvvvvwwwwwwwwwwxxxxxwwwwwvvvwwwwwwxxxwwwwwwwwwwwwxwwvvwwxxxwwwxxyyyxxyxwvvuuvwxxyz{|}}||{{{{{{zzzzzzzzzzzyyyyyyyyyxyyyyyxxxxxyyyxwwwwxyyzzzzyxxxxxyyzzzzyyzzzzzzzzzzzyyyyyyyxxyyyxwwxxyyyyyyyyyyyyyyyyyyyzzyyyyyzyyyyyxxxxxyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{||}}|||||}}}}}}}}}}||{{z{{{{{||||}}}}}||}}}}}}}}}}}}}}}}~~~~~~~~~~~~~}}}}~~~~~~~~~~~~vvvvvwwwwwwwwwwwwwwxxxxxyxxxxxxwwwwwwxxxxxxxyyxwwvvvvwxxwwwwwwwwwxxxwwwvvvvvvwwwwwwxxwwvvwwwvvvwwvwvvvwxxyyxxxxxyyyyyxyywvvuuuvwxyz{|}}{{zz{{{{{{zz{{{{{zzyyyyyyyyyyyyyyyxxxwxyyxxwwwwxyyyzyyxxxxxxyyzzzyyyzzzzzzzzzzyyyyyyyyxxyyyxxxxxyyyyyyyyyzzzzyyyyyyzzyyyyzzzyyyyxxyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{|||||||||||||}}}}||{{{zzz{{{||||}}}}|||}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~vvvvvwwwwwwwwwwwwwwxxxxxxxxxxxxxwwwwwxxxxxxyyyxwvvvvwwxxwwwwwwwwwwwwwwvvvvvvvwwwwwwwwwvvvvvvvvvvwvvuvvwxxyyyxxxyyyyyyxxxwwvvuuvwxyz{||{zzzz{{{{{{{z{{{{{{zzyyyyyyyyyyyyyyxxwwxyyxwwwwwxxyyyxxxxxxxxxyyyyxyyzzzzzzzzzyyyyyyyyyxxyyyyxxxxyyyyyyyyyzzzzzyyyyyzzzzzzzzzzzzzyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{||||||||||||}}}||{{{{zzzz{{|||||||||||}}}}}}}}}}}}}}}~~~~~~~~~~vvvvvwwwwwwwwxxwwwwwwxxxxxxxxxxxwwwwxxxxxxyyyyyxvuvwxxxxwwwwwwwwwwwwwvvvuuuvvwwwwwwwwwvvvvvvvvvvvuuuvvwxxyyyxxxxyyyyyxwwwwvvvuvwxyy{{zzyyyyz{{{{z{z{|||{{{zzzyyyyyyyyyyyxxwwxyyxxwwwwwxxyxxxxxxxxxxxxyyxxxyzzzzzzzzyyyxyyzzyyxyyyyyyxxxyyyyyyyyyyzzzzzyyyzzzzzz{{zzzzzzyyzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{|||||||||||||||{{{{{zzzzz{{|||||{|||||}}}}}}}}}}}}}}~~~~~~~~~~vvvvvwwwwwwwxxxxwwwwwwxxxxxxxxxxwwwxxxxxxyzzzxxvvvvwwxxwwwwwwwwwwwwwwvvvuuvvwwwwwwwwwwvvvvvvvuvvvuuuvvwxxxxxxxxxxyyyyxwwwwwwvvuvwxyz{yzyyyyz{zzzz{{{|||{{{zzzyyyyyyyyyyyxxwxyyyxxwwwwwwxxxxxxxxxxxxxxxxxxxxyyzzzzzyyxxxyyzzzyyyyyyyyxxxxyyyxxxyyyyyyyyyyzzzzzzz{{{{{zzzzz{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{|||||||||{{{{{zzzzzz{{||||{{{{{||}}~~}}}}}}}}}}~~}}}}}~~~vvvvvwwwwwwxxxxxxxxxwxxxxxxxxxxxwwxxxxxwwyzzzwwvvwwwwxxwwwwwwwwwwwwwvvvvvvvwwwwwwwwwwwvvvvvvvuvvvuuuuvvwwxxxxxxxxyyyyxwwwwwwwvvwwxxyyyyxxxyzzzyyyz{{{{|{{{zzzyyyyyxxyyxxxxxxyyxxxwwwwwwwxxxxxxxxxxxxxxxxxxxyyzzzzyyxxxyzzzzzzyzzzyyyxxxxxyxxxxxxxxxyxxxyyzyyzzz{{{{{zzzzz{{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{|||||||{{{{{{zzzzzz{{{{{{{{{{||}}}~~~}}|||}}}}~~}}}}}}}~~~~vvvvwwxxxxxxyyxxxxxyxyyyyyyxxxwwxxxxwxxwwyyzywvvvwwwwwwwwwwwwwwwwwvvvvvvvvwwwwwwwwwwwwwwwvvvvuvvvuuvvvvwwxxxxxxxxyyyyxwwwwwxwwwwwxxxyyxxxyyzzzyyyz{{{{|{{zzzzyyyyyxxxxxxxxxxxxxxxxxxwwwwxxxxxxxxxxxwwwwwxxyyyyzyyyyxyyyzzzzzyyzzzzzyyxxxxxxxxxxxxxxxxxxyyyyyyzz{{{{zzzzzzzz{{{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{||{{{{{{|||{{{{{{{zzzzzzz{{{{{{{||||}}}~~}}}|||}}}}~}}}||||}}~~~vvvwwwxxxxxyxxxxxxyyxyzzzzyxxwwxxxyxxwwxxyyyywwvvxwwwwwwwwwwwwwwwwvvvvvvwwwwwwwwwwwwwwwwwwwwwvvvvvvvvvvwwxxxxxxxxyyyyxwwwwwxxwwwxwwxxxxxxyzzzzyyyz{{{{{{zzzzyyyyxxxxxxxxxxwxxxxxxxxxxxxxxxxxxxxxxwwwwwwwxxyyyyyyyyyyyyyzzzzzyyyyzzzyyyyxxxxxxxxxxwxxxxyyyyxxxyzzzzzzzzzzyyzzzzzz{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{||{{{{{{{|||{{{{{{{{{{{{zzz{{{{{{{||||}}}}}}}}|||}}~~~~}}}}}}}}~~~wwwwwwxxxxxyxxxxxxyzyyzzzyyxxwwxxxyyxwwxxyyyywwwwxxwwwwwwwwwwwwwwwwvvvvwwxxxxwwwwwwwwwwwwwwwwvvvwvvvvvvwwxxxxxxxxxyyyxxxxxxxxxxxxwwwxxwwyyzzzzyyyzzzzzzzyyyyyyyxxxxxxxxxxxwxxxxxxxxxxxxxxxxxxxxxxwwwwwwwxyyyyyyyyyyxyyzzzzzyyyyyyzzyyyyyyyyyyyyxxwxxxxxyyyxwxyyyyyyyyyyyyyzzzzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzz{{||{{zzz{{{{{{{{{{{{{|||{{{{||||{{|||||}}}}}}}}}||}~~~~}}}}}}}}~~~~wwwwwwxxxxxyxxyyyyyzyzzzyyyxwwwxxyyxwwwxxyyyywwwwxxxwwwwwwwwwwwxxwwwwvwwxxxxxxxxxwwwwwwwwwwwwvvwwvvvvvvwwxxxxxxwwxxyxxxxxxxxxxxxywwwwwwxyyzzzzyyyzzzzzyyyyyyyyxwxxxxxxxxxxwxxxxxxxxxxxxxxxxxxxxxxwwwwwwwxyyyyyyyyyyxyyzzzzzyyyyyyzzzzzyyyyyyyyyyxwxxxxxxyxxwxyyyyyyyxxyyxxyzzzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzz{{||{{zzzzz{{{{{{{{{{||}}||{{|||||||||||}}}}}}}}}}}~~~~~~~~~~}}~~~~~~~~wwwwwwxxxxxxyyyyyyyzzzzyyyyyxxxxyyyxwwwxxyyyywwwwxxxxxxxxwwwwwxxxxxwwwxxxxxxxxxxxwwwwwwwwwwwwvwwwvvvvvvvwxxxxxxwwwxxxxxxxxxxxxxyyxwwxxxxyzzzzyyyzyyyyyyxxxyyyxwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwxxxyyyyyyyyyyxyzzzzzzyyyyyzzzzzzzyyzzzzzzyxxxyyxxxxxxwxyyyyyyxxxyyxxyzzzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzz{{||{{zzzzzz{{{{{{||||}}}}|{{|||||||||||}}}}}}}}}}}~~~~~~~~~}}~~}~~~~~vvvvvwxxxxxxxyyyyyzzzzyyyyyyyyyyyyxxwwxyxyyyywwwwxxxxxxxxxwwwwxxxxxwwwxxxxxxxxxxwwwwwwwwwwwwwwwwwuuuuvvwwwwwxxwwwwxxxxxxxxxxxxxyyxxxxxxxyzyyyyxxyyyxxxxxxxxyyxwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwxxyyyyyyyyyyyyyxyyzzzzzyyzzzzzzzzzzzzzzzzzzyxxyyyxxxxxxxyyyyyyyxxxyyxxyzzzz{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zz{{|||{{zzzzzzz{{{{|||||}}}}|{{|||||||||||}}}}}}}}}}~~~~~~~~~~~}}}}}}~~~~vvvvvwxxxxxxxxyyyyyyyyyyyyyyyyyyzyxxwxyxxxxxxxxxxxxxxxxxxxwwwwxxxxwwwwxxxxxxxxxwwwwwwwwwwwwwwwwwwvvvvwwvvwwwwwwwxxyyyyyyxxwwwwxxxyyyyyyyyyxxxxxxyyxxwwxxxxxxxwwwxxxxxxxxxyyyyxxxxxxxxxxxxxxxxxxxxwwwxxyyzyyyyyyyyyyyyyyzzzzyzzzzzzzzzzzzzzzzzzzyxxyyyxyyyyxyyyyyyyyxxxyyyxyzzzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzz{{|||{{zzzzzzzzz{{{||||}}}}|{{|||||||{{{{|||}}|}}}}~~~~~~~~~~~~}}}||}}}~~~~~~~~vvvvvwwwxxxxxxxxxyyyzyyyyzzyxxyyzyxxxxyyyxxxxxxxxxxxxxxxxwwwwwxxxxwwwxxxxxxxxxxwwwwwxxxxxxwwwwwvvvvwwwwvvvwwwxxxyzzzzyyyyxxxxxxxxyyyyyyyyxxxxxxxxyxxwwwwwwxxwwwwxxxxxxxxxyyyyxxwxxxxxxxxxxxxxxxxxwwwxyyyzzzzzzzzyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzyxxyyyyyyyyyzzyyyyyyyyyyyyyyzzzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{zzz{{||{{zzzzzzzzzz{{{{|||}}}|{{{||||||{{{{{||||}}}}}~~~~~~}}}~}}}}}}}}}}}~~~~~~~~vvvvwwwwwxxxxyyyyyyyzzzyzzyyxxyzzyxxyyzyyyyyyyyxxxxxxxxxwwwwwxxxxxxwxxxxxxxxxxxxxxxxxxxxxxxwwwwwvvwwwwwwvvwwwxxyzz{{{zzzyyxxxxxxxxxxyxxxxxxxxxxxxxxwwwwwwwwwwwwxxxxxxxxyyyyyyyxwxxxxxxxxxxxxxxwwwwwxxyyz{zzzzzzzzyyyyyyzzzzzzzzzzzyyyyyyyyyyzzzyxxyyyyyyyyzzzzyyyyyyyyzzzyyzzzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{zzz{{|{{zzzzzzzzzzzz{{{{||}}||{{{|||{{{{{{{{||||}}}}}}~~~}}}}}}}}}}~~~}}}}~~~~~~~~~~~~wwwwwwwwwxxxyyyyyyyyzyyz{yxxxyyzzxxyzyyzzzzyyyyyyyxxxxxxwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwvwwwwwwwvwxxyyzz{{{{{zzzyxxxxxxxxxxyyxxwwwwxxxxxxxwwwwwwwvvwwwxxxxxxxyyzzzzyyxxxxxxwwwwwwwwxwwwwwwwxyzzz{{zzzzzzzzzzzzzzzyyzzzzzyyyyyyyyyyyzzzyxxyyyyzzzzzzzzyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{zzzz{{{{{{{{{zzzzzzzzzzzzz{{{||||||{{{||{{{{|||{{||||}}}}}}}}}|}}}}}}}}~~}}}~~~~~~~~~~~~~wwwwwwwwxxxxyyyyyyyyyyyzzyxxyzzzyxxyyyyzzzzzyyyyyyyxxxxxwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwwxxxyzzzz{{{{zzyyxxxxxwwwxxxxxxwwwwxxxxxxxxwvvvvvvvvwxxyyxxxyyzzzzzyyxxxxxxwwwwwwwwwwwwwvwwxyyzz{{zzzzzzzz{{{zzzzyyzzzzyyyyyyyyyyyyzzzyxyzzzzzzzzzzzzzyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{zzz{{{{{{{{{zzzzzzzzzzzzz{{{{||||{{{{{{{{{{||||{{{{|}}}}}}}|||}}}}}}}~~~~~~~~~~~~~~~~~~~~wwwwwwwwxxxxyyyyyyyyyyyyyxxyz{{zyxxyyzzzzzzzyyyyyyyyxxxxwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyxxxyxxxwwwwwxxxxyzyyzz{{zzzyxxxxxwwwxxxxxxxwwwxxxxxxxxxxwwwwvvvwwxyyyyxxyzzzzzzyyxxxxxxwwwwwxxxxxxwwvvvwxyyz{{{zzzzzz{{{{{{zzzzzzzzyyyyyyyyyyyyzzyxxyzz{{{{zzzzzzzyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{zz{{{{{{{{zzzzzzzzzzzzzzzz{{|||{{{{{{{{{{{|||||{{||}}}|||||{|}}}}}}}~~~~~~~~~~~~~~~~~~~~wwwwwwwwxxxxxyyyyyyyyyyyyxxyz{zzyxyxyzzzzzzzyyyyyyyyyxxwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyzzyyyyyxxwwwwxxxyyzzyyzzzzzyyyxxxxwwwwxxxxxxxxxxxyyyyyyyxxxxxxwwwwwxyyyyxyyzzzzzyyxxxxxxxxxxxxyyyyxxwwvvvwwxyzz{zzzzzz{{{||||{{zzzzzyyyyyyyyyyyyzzyyxyzz{{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{zz{{{{{{{zzzzzzzzzzzzzzzz{{{||{{{{{{{{{{{||||||{|||}}}}}|||||}}}}}}~~~~~~~~~~~~~~~~~~~~~xwwwwwwxxxxxyyxxxxxxxyxwxyyz{{zyxxyyzzzzzzzzyyyyyyyyyxxwxxxxxxxxxxxxxxxyyyyxxxxxxxxxxxxxxyyzzzyyxxxxwwwwxxxxyyzyyyzzzyyxxxxxxxxwwxxxxxxxyxxyyyyyyyyyyyxxxxxwwxxyyyyxxyyzzzyyxxwxxyyyyyyyyyyyyxxwwvvvwwxyyzz{{{{{{{{||||||{{{{zzyyyzzzyyyyzzzyyyxyzz{{{{{zzzzzzzzzzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{zzz{{{{{zzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{|||||||||}}}~~~}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~xxwwwwxyxxxxxxxxwwwwxxwwxyzz{zyxwxyyyyzzzzzzyyyyyyyxxxxwxxxxxxxxxxxxxxxyyyyxxxxxxxxxxxxxyyzzzyyxxxxxwwwwxxxxxxyyyyzzyyxxxwwwwwwxxxxxxxxyyxyyyyyyyyyyyxxxxxxwwxxyyyyxxyyzzzyxxxxxyzzzzzzzzyyyyxxwwwwwxxyzz{{{{{{{{{{||||||{{{zzzyyyzzzyyyyyzzyyyxyzz{{{{{zzzzzzzzzzzz{{zzzzzzzzzzzyyyyyyyzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{zzz{{{{zzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{|||{}}}}}|}~~~~}}}}}}}}}}}~~~~~~~~}~~}}}}}~~~~~~~~~}~~~~~~xxwwwwxxxxyyxxxxwwwwwwwwxyzzzzyxwwyyyyyzzzzzyyzzzyyxxwxxxxxxxxxxxxxxxxyyyyyxxxxxxxxxxxxyyyyzzyyxxxxxxxxxxxxxxxxxxyyyxxxxxxxxxwwwxxyyyyyyyyyyyxxxxxxxxxxxxxxwwxxyyyyxxyyyyyyxxyyyyzzzzzzzzyyyyxxwwxxxxyzz{||{{{{{{{{|||||{{{{zzzyyyzzzyyyyyyzzyyyyzz{{{{zzzzzzzzz{{{{{zzzzzzzzzzzzyyyyyyyzzzzzzzzzzzz{{zzzzzzzz{{{{{{{{zzzz{{z{{zzzz{{{{zzzzzzz{{{{{{{{{{{{{{{|}}|}}}}}|}~~~}}}}|}~~~}}}~}}~~~~~}}}}}}}}}~~~~~~}}}~~~~~~~~~~xxwwwxxxxxyyxxxwwwwwwxxxyyzyyyxwwxyyyzzzzzzyyzzzzyyxxwxxxxxxxxxxxxxxxyyyyyyyyxxxxxxxyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxyyyxxwwxyyzzyyyyyyyxxxxxxxxxxxxxxxwwwxxyyyyxxyyyyyxxxyyyyzzzzzzzzyyyyyxxxxyyyzz{|||{{{{{|{|||||{{{{zzzzyyzzzzzyyyyyyzzyyyyzz{zzzzzzzzzzz{{{{{zzzzzzzzzzzzyyyyyyyzzzzzzzzzzzz{{zzzzzzzz{{{{{{{{zzzzzzz{{{{{{{{{{zzzzzz{{{zzzzzzzz{{{{|||}}}}}}}||}}}}||||}}~}}~~}}}~}}}}}|}}|||}}}}~~~~~~}}}~~~~~~~~~xxwwxxxxxxxxxxxwwwwwwxxxxyyyxxxwwwxxyz{{{zyyyzzzyyxxxxxxxxwwwwxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyxxxxyyyyzzzyzyyyxxxxwwwxxxxxxyxxxxxxxxxxyyyxxxxxwxyyyzzzzzzzyyyyyyyxxxxyyzzz{|||{{{z{||||||{{zzzzzzzzzzzzzzyyyyyyzzzyyyyyzyyyyzzzzzzzz{{{zzyyzzzzzzzz{{{zzyyyzzzzzzzzzzzzz{zzzzzzzzz{{{{{{zzzzzzzz{{{{{{{{{{zzzzz{{{{zzzzzzzz{{{|||||}}}}}}||}}}}|||}}}}}~~~}}}}}}}|||||||}}}}}~~~~~~~~}}}}}~~~~~~xxwxxxxxxxxxxxxxxxxxxxxxxxxxwwwwvwxxyyzzzyxxyyyyyyxxxxxxwwwwwwwwwwxxyyyyyyyyyxxxxxxxxyyyyyyyyxxxwwwwxwxxxxxxxxxxxxxxxxyyyyyxxxxxyyyyzyyyyyyxxxwwwwwxxxyyxxxxxxxwwwxxyyxwwwwwxyzzzzzzzzyyyyyyyyxxxyyyzzz{||||{zz{|}}}|{{zzzzzzzzzzzzzzzyyyyyyzzzzzzyyyyyyyzzzzzzzzzzzyyyzzzzzzzz{{{{zzzz{{zzzzzzzzzzzz{zzzzzyyyzzzz{{zzzzzzzz{{{{{{{{{{{zzzz{{{{{{{zzzzzz{{|||||||}}}}}}}|}}}||}}}}}}~~~}}}}}}}|}}~~}|}}}}}~~~~~~~~~~}}}}}}}~~~xxxxxxxxxxxxxxxxxxxxxxxxwwwwwwwwvwxxyyzzyxxxyyyxxxyxxwwwwwxxxxwwwwxyyyyyyyyyyxxxxxxxxyyyyyyyxxxxwwxxxxxxyxxxxxxxxxxwxyzzyyyxxyyxxxxyyyzyyyyyyxwwwxxxxxyyxxxxxxxwwwwxyxxwwwwxyzzzzyyyyyxxxyyyyyyxyyzz{{{|}||||{{{||}}|{{zzzzzzzzzzzzzzzyyyyyyzzzzzzyyyyyyyzzzzzzzzzzyyyzzzzzzzzz{|||{{zz{{zzzzzzzzzzzz{zzzzyyyyzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{zzzzz{{||||||||}}}}||}}}}|}~~~}}}~~~~}}}}}||}~~~}}~~~}}}~~~~~~~~~}}~~~~~xxxxxxxxxxxxxxxxxxwwwwwwwwwwwwvvwxyyyyyyyxyyyyxxyyyxxwwwwxxxxxwwwwxyyyyyyyyyyxxxxxxxyyyyyyyxxxxyxxxxxxxxyyyyxxxxxxxxyzzzzyyxxyyxwwwwyyzyyyyyyyxxxxxxyyyxxxxxxxxwwwwxyxxwwwwxyzzzzyyyyxxxxyyyyyyyyyzz{{||}}|||{{{||||{{{zzzzzzzzzzzzzzzyyyyyyzzzzzzyyyyyyyzzz{{zzzzyyyyzz{{{zzzz{|||{{zz{{zzzzzzzzzzzzzzzzyyyyyyzzzzzzzzzzzz{{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{||||||||}}}||||||}}~~~~}~~~~}}}}}|}~~~~~~~~}}}}~~~~~~~~~~~~xxxxxxxxxxxxxxxxxxwwwwwwwwwwvvvwxxyzyyxxxxyyyyxxyxxxxwvwwxxyyxwwwwxyyyyyyyyyyxxxyyyyyzzzyyyxxxxxxyyyyyxxzyyyyxxxyyyyyzzzzzyxyyyxwwwxyzzyyyyyyyxyyyyyyyyyxxxxyyyxxxxxyyyxxxxxyzzzzyyxxxxxxyyyyyyyyzzz{{|||||||{{{{{{{{{zzzzzzzzzzzzzzzyyyyyyyzzzzzzyyyyyyyzzzzzzzzzyyyyzz{{{zzzz{{||{zzzzzzzzzzzzzzzzzzzzzyyxxxyzzzzzzzzzzzz{{{{zzzzzz{{{{{{{{{{{{{{{{{{{{{|||||{{|||||||{||}}~~~~}~~~~~}}}}}~~~~~~~~~}}}~~~~~~~~~~~~~~xxxxxxyyyxxxxxxxxwwwwwwwwwwwvvwxxyzyyxwwxyzyyyxxxxxxxwwxxxyyyxxxxxxyyyyyyzyyyyxxyyyyyzzzyyxxxxxxyyyyyxxyyyzzzyyyyyyyzzzzzzzyxxyyxxxyyzzzyyyyzyyyyyyyzyyyxxxyyyyxxxxyxyyxxxxxyyyyyyxxxxyyyyyyyyyyzz{{{{{||||||{{{{{{zzzzzzzzzzzzzzzzzzyyyyxyyyyzzzzyyyyyyyyzzzzzzzzyyyyzz{{{zzzz{{{{{zyyzzzzzzzzzzzzzzzyyyyxxxxxyyyyyyyyyzzz{{{zzzzzzz{{{{{{{{{{{{{{{{{{{{{{|||{{{||||||{{{||}}~~~~~}~~~~~~~~~}}}~}~~}}}}}}}}~~~~~~~~~~~~~~}~xyyyyyyyyxxxxxxxxxxwwwwwwwwvvvwxyyzyxxwwxxyyyxxxxxxxxxxxxxxxxxxxxxyyzzzzz{zzyyyyyyyyyzzyyyxxxxxxyyyyyxyyyzzzyyyyyyyyzzzzzzzyxxxxxxyzzzzzyyyyzyyyyyyyzzyyyxyyyyyxxxxyyyyxxxxyyyyyyyxxxxyyyyyyyyyzz{|{{{{{||{{{{{{{{zzzzzzzzzzzzzzzzzzzyxxxxxyyyyzzzyyyyyyyyzzzzzzzzyyyyzz{{zzzzz{{{{{zyyzzzzzzzzzzzzzzzyyyyxxwxxyyyyyyyyyzz{{{{zzzzzzz{{{{{{{{{{{z{{{{{{{zz{|||{{{|||||||{||}}}~~}~}}~~~~~~~~~}}}}}}}}}}}}}}}}}~~}~~~~~~}}}}~xyyyyyyyyyxxxxxxxxxxwwxxwwvvvwxxyyyyxxwwxxyyxxxwwwwwwxxyxxwwxxyyyyyyzzzzzzzzyyyyyyyyyzyyyyxxxxxyyyyyyxyyyzzzyxxxxyyyzzzzzzyyxxxxxxyyyyyyyxyyzyyyyyyzzyyyyyyyyyyxxxxyyyyxxxxyyyyyyyxxxxyyyzzyyyzz{|{zzzzz{{{{{{{{{zzzzzzzzzzzzzzzzzzzzyxxxyyyyyyzzzzzzzzyyyzzzzzzzyyyyz{{{{zzzz{{{{{{zyyzzzzzzzzzzzzzyyyyyyxxxyyyyyyyyyyyzz{{{{zzzzzzzz{{{z{{{zzzz{{{{{{zzz{|||{{{|||||||{|}}~~}}}}||}}}}}~~~}}}}}}}}}|||||||}}~~}~~}}}}}}}~~xxyyyyyyyxxxxxxxxxxxxwxxwwvvvwxxxxxxxxxxxxxxxyyxxwwwwxxyxxxxyyyyyyyyzzzzzzzzyyyyyyyyyyyyyxxxxyyyyzzzzyyyyzzzyxxyyzzzzzz{zzyyyyyyyyyyyyyxxxyyyyzzzzzzyyzzzzzzzzyyyxxyxxxxyyyyyyyyyxxxxyyyyzzyyyzz{{{zzzzzzzzzz{{{{zzzzzzzzzzzzzzzzzzzyyyyyyyyyyyzzzzzzzzzzzzzzzzzyyyyyz{{{{zzzzz{{{{zzyyzzzzzzzzzzzzzyyyyyyyyyyyyyyyzyyyyyzz{{{zzzzzzzzzzzzz{zzzzz{{{{{zzzz{|||{{{|||||||{|}}}}}}||{{||}}}}}}}}|}}}}}}}}}}||||~~~}~~}}}}}~~~xxxxyyyyyxxxxxxxxxxwwxxxwwvvvwxxxxxxxxxxxxxxyyyxxwwwxxxyxxyyyyyyyyyyyyzzzzzzzzzyyyyyyyyyyxxxyyyyyzzzzyyyyzzzyyxyyz{zz{{{{zyyyyyyyyyyyyyxxyyyyyzzzzzzyyzz{{zzzzzyyyxxyyyyzzzyyyyyyxxyyzzzzzzyyyzz{{zzyyyzzzzzzz{{zzzzzzzzzzzzzzzzzyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzyyyyz{{{{{zzzzzzzzzzzzzzzzzyyyyzzzzzyyyyyyyzzyyzyyyyyyyyyyz{{{zzzzzzzzzzzz{{{{{|{{zzzzzzz{{|||{{{{|{{{{|{{|}}}|||{{{||||||}||||||||}}~~}}||||}~~}~~}}}~~}~~~xxxxyyzzyxwwxxxxxxxwwxxxxwwwwwxxxxxxxxxxxxxyyyyxwwwxwwwyyyyyzzyyyyyyyyxxxxxyzzzzzzzzyyyyyxxxyyyyyzzzzyyyyzzzyyxyyzz{{||{{zzzzzzzzzzzzyyxxyyyyyyzzzyyyyyz{{zzzzzyyyyyzzzzzzzzzzyyyxyyzzzzzzzyyzz{{{zzyyyzzzzzzzzzzzzzzzzzzzzzzzzzzyyyzzyyyyyyyyzzzzzzzzzzzzzzzzzyyyyzzz{{{zzzzzzzzzzzzzzyyyyyyyyzzzzzyyyyyyyyyyyzyyyyyyyyxyz{{{zzzzzzzzzz{{{{{{{|{{{{zzzzz{{|||{{{{{{{{{{z{{||||{{{zz{{|||||||}|}}}|}}~~}|||||}~~}~~}}}}}}~~~~xxxyyzzzyxwwwxxxxxxwwxxxxwwwwxxxxxxxxxxxxxyyyyyxwwwwwxxyyyyzzzyyyyyyxxxxxxyyzzzzzzzyyyyyyxxxyyyyzzzzzyyyyzzzyxxxyzz{||||{zzzzzzzzzzzzzyyyzzyyyyyzyyyyyyzzzzzzzzyyyyzzzzzzzzzzzyyyyyzzzzzzzzyzzz{{zzyyxyzzzzzzzzzzzzzzzzzzzzzzzzzzyyyzzyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyzzzzzzzyyyyyyyyyyzzyyyyyyxxwxyz{zzzzzzzzzzz{{{{{{{|{{{{zzzzz{{|||{{{{{{{{{{zzz{{|{{{zzz{{||||||}}}~~}}}}~}||||}}}~~}~~}}}}}}~~~~xxxyyzzzyxwwwxxxxxxwwxxxxwwwwxxxxxxxxxxxxyyyyyywwwwwwxxyyyyzzyyyyyyyxxxxxxyyzzzzzzzyyyyxxxxyyyyzzzzzzyyyzzzzyxxxyzz{||||{{zzzzzzzz{{{zzyyzzyyyzyyyyyxxyzzzzz{zzyyyz{{zzzzzzzzzyyyyyzzzzzzzzzzzz{{zzyxxyzzzzzzzzzzz{{zzzzzzzzzzzzzyyyzzyyyyyyyyzzzzz{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyzzz{zzzzzyyyxxxxxyzzzyyyyyyxxwwxyzzyyzzzzzyyyz{{{{{{{{z{{{zzzz{||||{{||||||||{z{{{|{{zzzz{{|||||}}}}~}}}}}}||||}}}}~~}~~~~}}}}~~~~xxxyyzzzyxwxxxxxxxxxxxxxxxwwwxxxxwwwwwxxxyyyyyxwwwwwxxxyyyyyyyyyyyyyxxxxxxyyzzzzzyyyyyxxxxyyyzzzzzzzzyzzzzzyyxxxyzz{{{{{{{{{zzzzzzzzzzzzzzzyyyzyyyyxxxyzzzzzzzzzzzzzzzzzzzzzzyyyzzzzzzzzzzzzzzzzzzzyxxyzzzzzzzzzzzz{zzzzzzzzzzzzzyyyzzyyyyyyyyzzzz{{||{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyzzzzz{{{{{zzyyyxxxxyzzzyxyzzyyxxwxyyyyyyzzzzyyyyzzzzzzzzzzz{{{zz{|||||||||||||||{{|||{zzzzz{{|}|||}}}|}}}}~~}||||}}}}~~}}~~~}}~}}}~~~xxxyyyzzyxxxxyyyyxxxxxxxxxxwwxxxxwwwwxxxxyyyxxxwwwxxxxxyyyyyyyyyyyyyyyyyyyzzzzzzyyyyyyyxxyyzzzzzzzzzzzz{{zzyxxxyyzz{{{{{{{{{{zzzzzzzzzzz{zzyyyzyyyyxxxyzzzzzzzzzzzzzzzzzzzzzyyyzzzzzzzzzzzzz{{{zzzzyxxyzzzzzzzzzzzzzzzzzzzzzzzzzyyyyzzzzzzzzzzzzzz{{{{{{zzzzzzzzzzzzzzyyyyyyzzzzzzzzzzzzzzzzzz{{{{{zzyyyxxxxyyzyyyzzzzyyxwxyyyyyyzzzzyyyyzzzzzzzzzzz{{{{{{|||||||||||||||{|||||{{zzz{||}}|}}|||}}}}~~}||||}}}}~~}~~~~~}}}~~~~~~xxxxyyyyxxxxyyyyyyxxxxxxxxxxxyyyyxwwxxxxxyyxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzyyyyyyyyyzzzzzzzzzzzz{{{{zyxxyzzzz{{{{{{{{{{zzyyzzzz{{{{{zzzzzyyyyyxyzzzzzzzzzzzzzzzyyyyyyyyyyzzzzzzzzzzzzz{{{zyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{zzzzzzzzzzzzzyyyxxxyyzzzzzzzzzzzzzzzzz{{{{{zzzyyxwwxxyyyyyzzzzzzyxxyzzzzz{{{{zzzzzzzz{{{zzzz{{{|||||||||||||||||||||||||{{{{{|||||}}||}~~~~~~~}|||}}}}~~}~~~~}~~~~~~~~~~~~xxxxyyyyxxxxyyyyyyyxxxxxxxxxyyyyyxwxxxxxyxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{zyyxxyzzz{{{{{{{{{{zzyyzzzz{{{|{{zzzzzzyyyxyzzzzzyyyzzzzzyyyyyyyyyyyyzzzzzzzzzzzzz{{{{zzzzyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzz{{{{zzzyzzzzzzzzzyyyxxxxyzzzzzzzzzzzzzzzzz{{{{{zzzyyxxxxxyyyyzzz{{{zzyxyzzzzz{{{{zzzzzz{{|{{zzz{{|||}}}}|||{{{{{||||||}}}}|{{{{{{{{|||}}|}~~~~~~~}|||}}}}}~~~~~~}~~~~~}}~}}~~~yxxxyyyyxxxxyyzzzyyxxxxxxxxyyyyyyxwxxxxxxwxxxxxxyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzyzzz{{{{{zyyyxyzzz{{{{{{{{{zzzyyzzzz{{|||{{{{zzzzyxxyzzzzyyyxyzzzzyyyyyyyyyyyzzzzzzzzzzzzzz{{{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzz{{zzzzzyyyzzzzzzzyyyxxxxyzzzzzzzzzzzz{{{{{{{{{{zzzyyyxxxxyyyyzzz{{{{zyyyzzzzz{{{{zzzzyzz||{zzz{{|||}}~~~}|||{{{||}}}}|}}}||{{|||{{{{||}}|}~~~~~~}||||}}}}}}~~~~~~~~~~~}}~}}~~~~~~~xxyyxxyxxxyyzzzzzzyxxxxxxxyyyyyyyxxxxxxwwxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzyzzz{{{{{zzyyyyzzz{{{{{{{{zzzyyyzzz{{|||{{{{zzzzzyyxyzzzzzyxxyzzzyyyyyyyyyyyyzzzzzzzzzzzzzz{{{zzzyyyyzzzzzyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzz{{{zzzzyyyzzzzzzzyyxxwwxyyzzzyyzzzz{{{{{{{{{{{zzzyyyyyxxxyyyyzz{|||{{zyzzzzzz{{{{zzzzyyz{{{{z{{{{|}}~~~~}}|{{{{|}}}}}}}||||||||||||{{|~}|}}~~~~}}}||||}}}}}}}~~~~~~~~}}}}~}}}~}~~~~~xyyyxxxxxyyzzzzzzzyyxxxxxxyyyyyyyxxxxxwwwxxxxxyyyyyyxxxxxyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{zyyyyz{{{{{{{{{zzzzyyzzz{{{{{{{{{{zzzzzyyyyz{{zzyxxyzzyyyyyyyyyyyyyzzzzzzzzzzzzz{{{zzyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzz{{{zzzzzzyyyzz{zzzzzzzyyzzz{{zzzzyyxxwwwxxyyyyyzzz{{{{{{{{{{{{zzzyyyyyyxyyyyyzz{|||||{{z{{{{{||||{{zzyyz{{{{{{{{{|}}~~}}}||{{{{|}}}~~~~}}}|}}}}}|||||}}}||}~~~}}}|||||}}}}~~~}~~~~~~}}|}~~~}}~~~}~xyyyxxxxxyyzzzzzzzyyxxxxxxyyyyyyyxxxxxwwwxxxxyyyyyyxxxxxxxyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzz{zzzz{{{{{{{{zzzzzzz{{zzz{{zzzzzzz{z{{{{{{{{{{zzzzyyyyzzz{{zzyxxyyyyyyyyyyxxxyyyzzzzzzzzzzzzz{{zzzyyyyyyyyyyyyxyyyyzzzzzzzzzzzzzzzzz{{{{{zzzzzzyzyzzzzzzzzzzyyz{{{{zzzzyyxxwwwwxyyyyyz{{{{{zzzzzzz{{{zzyyyyyxxxyxxyzz{{|||||{{{||||||||{{{zzz{{||||{{{{{|}}}}|||{{{z{|}}}~~~~}}}|}~~~}|}}}}}}}|}}~~~}}}|{|||}~~~~~~~~~~~}|}~~}}}~~~~xyzyyxxyyyyzzzzzzzyyxxxxxxyyyyyyyyyyyxxxxxxyyyyyyyxxxxxxxxyyyyyyyyyyyyyzzyyyyyyyyzzzzzzzzzzzzzzzzz{{{{{{{zzzzzzzzzzzzzzzzzzzzz{{{z{{{{{{{{{{zzzzyyyzz{{{zzzyxxyyyyyyyyyyxxxxyyyyyyyyyyyzzz{{{zzzzzzzzzyyyyyyyyyyzzzzzzzzzzzzzzzz{{{|{{zyyzzzzyyyyyzzzzzzzyyzz{{{zzzzzyyxxwwwxyyyyyz{{{{{zzzzzzzzz{zzzyyyyxxxxxxxxyz{{{|||||||||||||{{{{{zz{{||||||{{{||}}|||{{{zzz{|}}}}~~}}}}|}~~}}}}|}|}}}}}}~~}}}}}||}}~~~~~~~}~~~~~}|}~~~yyyyyyyyyyyzzzzzzzyyyyyxxxxyyyyyyyyyyxxxxxyyyyyyyxxxxxxxxyyyyyyyyyyyyyzzzyyyyyyyyzzzzyzzzzzzzzzzzz{{{{{{zzzzzzzzzzyzzzzzzzzzzyzzzzzz{{{{{zzzzzzzyyzzzz{{zzzyxwxxyyyyxxxxwwwwxxxxxxxxxxyzzz{{{zzzzzzzzzzyyyyyyyyyzzzzzzzzzzzzzzzzz{{|{{zyyzzzzyyyyyyzzzzzzyyzz{{{zzzzzyyxxxwwxyyyyzz{{{{{zzzzyyyzzzzzzzzzyxxxxxxxyz{{{{{||||||||||||{{{||{{||}}}|||{{{|||||{{{{zzzz{|}}}~}}}}}||}}}}}}|||{{|}}}}}}}}~~~}}}~~~~~~~~~~~}}}~~yyyyyyyyyyzzzzzzzzyyyyyyyxxxxyyyyyyyyxxxxxyyyyyyyxxxxxxxxyyyyxxxxxxyyyyzzyyyyyyyxyzzyyzzzzzzzzzyyzzz{{{{zzzzzzzzyyyzzzzzzzzzzyzzzzzzz{{{{zzzzzyyzzzzzzzzzzyyyxxyyyyyxxxxxxxxxxxxwwwwxxyyz{{{{zzz{{{{{{zzzzzzzyyyyzzyzyyyyyyyyyyyz{{|{{zyyzzzzzyzzyyyzzzyzyyzz{{{zzzzzyyxxxxxxyyyyzz{{{{{{zyyyyyzzzzzzzzzzyyyyyyyz{{{{{{|||||||||||{{{|||{|}}}}}||{{{|||||{{{zzzzzz{|}}}}|||||{{||||||||||||}}~~~}}}~~}}~~~~~}~~~~~}~~yyyyyyyzzzzzzz{{zzzyyyyyyyxxxyzzzzyyyxxxxyyyyyxxxxxxxxxxxxxxxxxxxxxxyyyyzyyyyxxxxyyyyyzzzzzzzzzyyzzzzzzzzzzzzzzyyyyzzzzzzzzzzyzzzzzzz{{{{zzzzzzzzz{{zzzzzzyyyxyyzyyxxxwxxxxxxxxwwwwwxxyyzz{{{{{{{{{{||{{{{{{zzyyyzzzzzyyyyyyyyzzz{{||{zyyzzzzzyzzzzz{{{zzyyzz{{{zzzzzyyxxxxxxyyyzzz{{{{{zyyyyyyzzz{zzzzzzzzzzzyyz{|||{{{|||||||||{{{{|||{||}}}||{{{{||||{{{zzzzzzz{|||||||{{{{{|||||||||||}}}~~~}}}~~~~~}~~~~~}}~~~~~~~~~}~yyyyzzzzzzzzzzzzzzyyyyyyyyyxxyzzzzyyxwxxyyyyyyxxxxwwwwwwxxxxxxxxxwxxxyyyzyyyyxxxxyyyyyzzzzzzzzyyyzzzzzzzzzzzzzyyyyyzzzzzzzzzyzzzzzzzz{{{{zzzzzzzzzzzzzzzzzyyyyyzzyxxxwwxxxxxxxxwwwvwxxyyyzz{{{{{{|||}}||{{{{{zzzzzzzzzzyyyyyyzzzz{{|{zyyyzzzzzzzzzzz{{{zzyyzz{{zzzzzzyyxxxxxyyyzzzz{{{{{zyyyyyyzzzzzzzzzzz{{{{zz{||||||{|||||||{{{{{{|||{||||||{{{{{{{{{{{{{{zzzzz{||||{|{{{{{{|}}||||||||}}}~~~}}}}~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~yyzzzzzzzzzzzzzzzyyyyzzzzyyxxyyzzyyxxwxxyyyyyxxxxwwwwwwwwwxxwwwxxwwxxyyyyyyyxxxxxyyyyyzzzzzzzzyyyzzzzzzzzzzzzzyyyyyzzzzzzzzzyzzzzzzzz{{{{zzzzzzzzzzzzzzzzzyyyzzzzyxwwwxxxxyyxxwwwwwwxxyyyzzz{{{{{{||}}||||{{{zzzzz{zzzzyyyyyzzzzz{{|{yyyyyyyzzzzzzzzzzzzzzzz{{{zzzzzzyyxxyyyyzz{{{z{{{{{zzyxxyyzzzzzzzzzz{{{{{zz{|||||||{{{{|||{{{{{{{||||||{{{{{{{{{|{{{{{{{{zzyz{{||{{{{{|||||}}}||}}}}}}|}}~~}}}~~~~~~~~~}}~~~}}}~~~~~~~~~~}}~~~yzzzzzzzzzzzzzzzzyyyyzzzzyyxxyyyyyxxwwxxyyyyxxxxwwwwwwwwwwwwwwwxxwwxyyyyyxxxwwxxxyyyyyzzzzzzzzzyyyzzzzzzzzzzzzyyyyyzzzzzzzzzyzzzzzzzz{{{zzzzzzzzzzzzzzzzzzzzzyzzzyxwwwxxxxyyyxxxxxxxxxyyyzzz{{{{{{{|||||||||{{zzzzz{{zzzyyyyzzzzz{{|{yyyyyyyzzzzzzz{zzzzzzz{{{{zzzzzzyyyyyyyz{{{{{{{{{{{zzyxxyyzzzzzzzzz{{{{{zzz{{||{{||{{{{{{{{{{{{{||||}|{{{{{{{{{|||{{{|{{{zzyz{{{{zz{{||}}}}}}}}|}~~~}}}}~~~}}}~~~~~~~~~~~}~~~}}~~~~}~~~~~}}~yzzzzzzzzzzzzzzzzyyyyzzzzzyyyzzzzyxxwwxxyzyyxxxwwwwwwwwwwwwwwwxxwwxxyyyyyyxxwwxxxyyyyyyyyyyyzzzyyyyyzyyyzzzzzzyyyyyzzzzzzzzzyzzzzzzz{{{zzzzzzzzzzzzzzzzzzzzzzyzzzyxxxwxyyyyyyyxxxxxxxxyyyzzz{{{{{{{{{{|||||||{{zzz{{{{zzyzzzzzzzz{{|{yyyzzyyzzzz{{{{{zzzzzz{{{{zzzzzzzzzzyyzz{{{{{{{{{{{zyyxyyyzzzzzz{{||{{{{zzz{{{{{{{|{{{{{{{{{{z{{|||}}||{{z{{{{{||||{||||{zzyzz{{{zz{||}}}}}}}}}}}~}}}}}~~~}}~~~~~~~~~~~~~}~~~}~~~~~~~~~~zzzzzzzzzzzzzzzzyyyyyzzzzzyzzzzzzyxxwxxyzzzyxxwwwwwwwwwwwwwwwwwxwxxyyyyyyxxwxxxyyyyyyyyyyyyyyyzyyyyyyyyzzzzzzzyyyyyzzzzzzyyyxyzyyzzzz{zzzzzzzzzzzzzzzzzzzzzzzzzzyyxxxwxyyyyyyyxxxxxxxyyyzzzz{zz{{{{{{{|||||||{{{{{|{{{{zzz{zzzzz{z{{{{zzzyyyzz{{{zzzzyyyyzz{{{{zzzzzzzzzzzzzz{{{{||{{{{{zyyyyyyzzzzzz{{|||{z{{{{{{{{{{{||{{{{{{{{zzz{{{||||{{zz{{{{{|||||||||{{{zzz{{{{z{||}}}}~}}||||}}}}~~~~~~~~~~~~~~~}~~}}}~~~~~~~~~zzzzzzzzzzzzzzzzzzyyzzzzzzyzzzzzzyxxxxyzzzzyxxxwwwwwwwwwwwwwwwwxxxyyyyyyyxxxxxxyyyyyyyyyyyyyyyzyyyyyyyyzzzzzzzyyxxyyzzzzzyyyyyyz{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyxyzzzzzzzyyyyyyyyzzzzz{{z{{{{{{{{|||||||{{{{||||{{zzzzzzzzz{{|{{{zzzyyz{{{{{zzzzyyyyyzz{{zzzzzzzzzzzzzzzz{{{|||||{zyyyyyyyzzzzz{{{|||{{{{{{{{{{{{{{{{{{{{{{zzzzz{{||{{{zyz{{{{{||||||||{{{{{{{{{{{zz{|||}}~~}|||||}}~~~~~~~~~~~~~~~}~~~~~~~~~zzzzzzzzzzzzzzzzzzzzzzyyzzzzzzzzyyxxyyzzzzyyxxxxxxxwwwwwwwwwwwwxxyyyyyyyxxxxxxxyyxxyyyyyyyyyyyzzzzzzzzzzzzzzzzyxwxyyyyyzzyyyyyyzz{{zzzzzzyyyyyyzzzzzzzzzzzzzzzzzzzyyyxyzzzzzzzzyyyyyyyzzzz{{{{{{{{{{{{||||||||{{||}}}||{{{zzzzz{||||{{zyyyyz{{{{{zzzyyxxxyzzzzzzzzzyyyyyyyyyzz{{|||||{{zyyyzzzzzzzz{{{|||{{{{{{{{{{{{zz{{zzz{{zzzyyzz{{||{{{zyz{{{{{||||||{{{{{{{{{{zz{{{|||}}}~~}|||||}}~~~~~~~~~~~~}}~~~~}~~~~~~~~zzzzzzzzzzzzzzzzzzzzzyyyzzzzzzzyyxxxyzzzzyyyyxxxxxxxxxwwwwwwwwwxxyyyyyyyxxxxxxxxxxxyyyyyyyzzzzzzzzzzzzzzzzzzzzyxwxyyyyyzzyyyyyzzzzzzzzzzzyyyyyyyzzzzzzzzzzzzzzzzzzyyyyyzzzzzzzzyyyyyyzzzzz{{{{{{{{{{{||||||||||{|}}}}}||{{zzzzz{|}}}|{zyyyyz{{{{{zzyxxxxyyzzzzzzzzzyyyyyyyyyzz{{|||||{zzyyyzzzzzzzz{{{|||{{{{{{{{{{{{{{{{zz{{{{zzyyz{{{|||{zyyz{{{{{||||{{{z{{{{{{{{{{{{|||}}~}~~}|||||}}~~~~~~~~~~~~~~~}}}~~~~~~zzzzzzzzzzzzzzzzzzzzyyyzzzzzzzyyyxxyzzzzzyyyyyxxyyxxxxxxxxwwwwwxyyzzzyyyxxxyxxxxyyyyzzzzzyzzzzzzzzzzzzzzzzzzzzyxxxyyyyyzzxxxxyyyyzzzzzzzzyyyxxxyyyyzzzyyyyyyyzzzzyxxyyyzzzzzzzzzzyyyzzzzzz{{{{{{{{{{{|||||||||||}}~~}}||{zzzzzz{|}}}|{zyyyz{{{{{{zyxxxxyzzz{{{{zzzzyyzzzyyyyzz{{{|||{{zzyzzzzzzzzzz{{{|||{{{{{{{{{{{z{{{{{z{{{{zzyzz{|||||{zyyz{{{{{||||{{{zz{{{{{|||{|||}}~~~~~}|||}}}~~~~~~~~~~~~~~~~~~~}}~~~~~zzzzzzzzzzzzzzzzzzzyyyyz{{zzzyyyyyzzzzzzzzzzzyyyyyyxxxyyyyxwwxxxyzzzzyyxxxxyyyyyyyyzzzzzzyzzzzzzzzzzzzzzzzzzzzyxxxyyyyyzzxxxxyyyyzzzzzzzzyyyxxxxyyyyzzyyzzzzzzzzyyyyyyzzz{{{zzzzzzyyzzzzzz{{{{{{{{{{{||||||||||}}~~~}}||{zzzzzz{|}}}|{zzzz{{{{{{{zyyyyyy{{{{||{zzzzzzzzzyyyyzz{{{|||{zzzzzzzzzzzzz{{{||||{{{{{{{zzzzz{{{{{{{{{{zzzz{||||{||zyz{{{{{{||||{{{{{{{{|||||{||}}~~~}}}}~~~~~~~}}~~~~~~~~~~~}}}~~~~~zzzzzzzzzzzzzzzzzzzyyyz{{{zzzyyyyzzzzzzzzzzzzzzzzzyyyyyyyyyxxxxyyzzzzyxxxxyyyyyyyyzzzzzzzyzzzzzzzzzzzzzzzzzzzyyxxxyyyyyzzxyyyyyyyzz{{zzzzyyyxxxxxyyyyzzzzzzzzzzzyyyyyzzzz{{{zzzzzzzzzzzzz{{{{{{{{{z{{{|||||||||}}}~}}||{zzzzzz{||}~~}|{zz{|{{{{{{zzyyyyz{|||||{{zzzzzzzzyyyyzz{{{|||{zzzz{{zzzzz{{{{||||||{{{{{zzzzzzz{{{{{{{{{zzz{{||||{||{zz{{{{{{{{{{{{{{{||||}}|||}}~~~~~}}~~~~~~~~~}}~~~~~~~~~~~}}}}~~~}~zzzzzzzzzzzzzzzzzzyyyz{{{zzzyyyyzzzzzzzzzzzzzzzzzzzzzzyyyyyyxxyyzzzzzyxxxxyyyyyyyyzz{{zzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyyzyyyyyzzz{{{{{zzzyyyyyxxxyyyyzzzzzzzzzzyyyyyyzzzz{{{{{{{{zyyyyyy{{{{zzzzzzzz{{{{{{{{|||}}}}||{{{zzzzz{{|}}~~}|{z{{|{{{{{{zzzyyz{|}}}}||{{{{zzzzzyyyyzz{{{||{{{{{{{{{{{{{{{{||}}}||{z{{{zzzzzzzz{z{{{{{{zz{||}|||||{zzz{{|{{{{{{{{{{|||}}}}|||}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzzzzzzzzzzzzzzzzzyyyz{{zzzzyyyyzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyyzzzzzzyxxxyyyyyyyyzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyyzyyzzzzzz{{{{{zzzyyyyyyyyzzyzzzzzzzzzzzyyyyyzzzz{{{{{{{{zyyyyxxxzz{zzzzzzzzzz{{{{{{{{{||}}||{{{{zzzz{|||}}}}||{z{{{{{{{zz{{{zzz|}~~~~}|{{{{zzzzzyyyyz{{{{{{{zzzzz{{{{{{{{{{{|}}}|||{{{{{{zyyyyyyz{{{{{{{{{||||||}|{{{{||{{{{{{{{{{|||}}}~}}}}}~~~~~~~~~~~~~~~~~~~~~~zzzzzzzzzzzzzzzzzzzyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyyyyyyyzzzzzzzyxxxyyyyyyyyzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzzz{{z{{{{{zzzzzzyyyyzzzzzzzzzz{zzzzyyyyyzzzz{{{{{{{{zyxxxxxxzz{{{zzzzzzzz{{{{{{zz{|||||{{{zzzzzz{|}}}}}}||{z{{{{{{{zz{{{{{||~~~~~}|{{{{zzzzzzzzzz{zz{{{{zyyzz{{{{{{{{{{{|}||||{{{{{{zyyyyyzz{|||||||{||||||}}|||||{{|{{{{{{{{{||}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zzzzzzzzzzzzzzzzzzzyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyyzzzzzzzyxxxyyyyyyyyzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyzzz{{z{{{{{zzz{{zzzzzz{{zzzzzz{{{zzzyyyyzzzzz{{{{{{{{zyxxxxxyz{|{{{zzzzzzzzzzzzzzz{{|||{{{zzzzzz{{|}}}||||{zz{{{{{{{zz{{|||}~~|{{{{{{{{{{{{{{zzzz{{zzyzzz{{{{{{{{{{{|}|{{{{zzzzzzyyyyzzz||}}}}||||||||}}}}|||||||||{{{{{{{||}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~zz{{zzzzzzzzzzzzzzzyyyyzzyyyzzzzz{{zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzyxxxyyyyyyyyzzz{{zzzzzzzzzzzzzzzzzzzz{{zzzzzzzzzz{zzzyzzz{{z{{{{{zzz{{{zzzzz{{{{zzzz{{{{zzyyyyzzzzz{{{{{{{{yyxxxxyy{{|{{zzzzzzzzzzzzzzyz{{||||{{zzzzz{{||||||||{{{{{{{{{{{z{|||||~~|{{{{{{{{{{{{{{zzzzzzzzzzz{{{{{{{{{{{{||{{{{{{{zz{{zzzz{{|}}~~}}|||||}}|}}~}}}}}}|}}||{{{|{|||}}}~~~~~~~~~~~~~~~~~~~~~~}}~~~~~~~~~~~~~~~~"
  },
  {
    "path": "shell/resources/images/output_frame_900.nv12.txt",
    "content": "The frame #900 from the Big Buck Bunny movie. 1920x1080 NV12 YUV\n\n> ffmpeg -i bbb_sunflower_1080p_30fps_normal.mp4 -vf \"select=eq(n\\,899)\" -vframes 1 -c:v rawvideo -pix_fmt nv12 output_frame_900.nv12.yuv\n\nhttps://peach.blender.org/about/\n\nLicense Information\n\nThe results of the Peach open movie project has been licensed under the Creative Commons Attribution 3.0 license.\nThis includes all the data we’ve published online and on the DVDs, and all of the contents on this website.\nIf any content on this site is not licensed as such, it will be clearly indicated.\n\nIn short, this means you can freely reuse and distribute this content, also commercially, for as long you provide a proper attribution.\n"
  },
  {
    "path": "shell/resources/images/output_frame_900.nv12.yuv",
    "content": "YWWVTTSRQPQRRSSSTSRRRRRRQQQRSSSSRTVXYZ[[[\\\\\\\\\\\\\\\\\\\\[[\\]_abbegjlortvwwwxxyxxyxxxxyz{{{zzyxwtnf^ZXVUUUUVVUSRQONOOOPRTY]]bnsof[RRUWXXWWVSRPPPSUSPOPOOONPRQPSWYXWWVY]_[QHCFLONKLLKJIIHKPRRSTUUSNP_aRKGFNT[``nzm``df^OMTZNLZ\\_mi]luljop^Pd~yx{sofYW[]_`iaSVXXVUWYURQX]ZY^_\\ZUSUUY[VQNOPRTVVYdkkid`flbX]fa]^]\\_febdfd__[]juww|oQIPPMGHIPWYdmdZYUMUeju\\TVVXYPCACZqbXPROIKIK]SCXonk|©TUbNLQMOOPQRTTRRRRQQOQRV|[QONNOOOPQUWTRTWVSSSTZcUHOtqAB[m[MFHJJKIHXiadrulX_QFNONGBBKSRSWMGOLKNPOSPJFHHBCCCFDBBBC@@ABCEGJQQPEBJ`sonlhdcc^UKDBBEE@IL[űfjkd]ZZYTSRQRRTVTQROPY]ZSRUTROMIKOPPNJIIKSUSUX_chq]VYYY_ZPNMQ``RDDehY[YWTSSSTYZSPQSSTVWZ`_WQPRTVVVVUVWTQRRZ[l}|{z~yywx~{wTU`VOOYYTNHKZa`XinQMKIQURLMNOPRRPNMLKKKKLOPQRQRSUTRQPNOPRSOHEEFGGFGGFGGFGHJIU|gS^rhY_mkUHFHLIEBH\\ovvqf_[QLMNNMMLMNNMNOPOOLIFFFEFHKMPRSTTSRQRSSSRSTRPQRQNPVRKLPTWhvpUYVWUQQQQPPPOONLGQZSYWSPNNNMLIGEDGIKMOQOPQNHECCCCCBBAA@BCCHMOMMMJFDCA?ABBBA?>ABFJLMJDA>97:;;:9:879=BED>::::9;>??@CCC@?@CDBCCBBVviG<A>>=<>8BTE>CDBBA@@AB?<=>><<<<=<=>>>>>>><;:::<>?>>A@@A@@A??BGLGBDNxwio{sT=9?@=;:;=AGGFCDFIGE@988644668>BCC?;9999::::::;:98513BNIGF<577;=NB/6888677774457BC?@<989::87788766788778998886558<>???ACCCB@>>>>>@?ABBBBA?=?@??@?>=?FNX]XF1*+-0.=QWdnX>:==<<;9877699:<==@@?><>?@@@@@??><<;<<<>?AA?<=?:??8;;973/,(),,-28;:8776:=@DFFFGD;7520000110122236;@CC@80/246799999::;<:9:;<><=?><=@DEGPRE987768=AB>98:98889::;;9:;<<==;;;::<>?@CHIGGGD?<:989::9:::;>EPNILRWYXUSQSOE?966579710=D@813:<:89;=EB965798:AFGHJIHHGGFHIEADO[hni`XPICBIIKk_>2QvHD>FZwM1LTC=@@AAAGOSv`jneXYa<9BMPI;24:==:753222F[Y?669>>=;:60/=[pT7/4<DCHKF?:6>E<0-06;HXnywcQVhxfF71/-66AE98EI7,+,07:873122027983--2,,SlTUcURQ`dE9@DNfgS<.12440+L}WUB8GJ@;9630.-))5HIC>:<EGIR]N<:?<<JV]c`_ag^fiH0273M|Z5541=cW@>>;=CFDHH<2.5@@<947CC;9;===<<;7433DN<488::45?</1?E@>DHHJMPQQLGHHHF>JlylaZTQVY;'/2349??87BHGFB<;>>=:75454/2>QXMDD@9GJ1*-,./8GOME@===;;;:30575310.//1<B;1CYB.][YXVTSRRQPQRSSSTTSSSSSTTSSTTVVWVWXYZ\\[\\]]]]^^]]]]]\\\\]_abccdegimpstvvvwwwwwxwwwxyyz|{zzyxxvrme]YWVVVVWVVUTRRPPOOOPSY^agosrl`TRUVXXWWVTSRQPOQVXUONONNPPMNQUXWVVVZ]^\\WQLKLKKJKKJIHHGHMRSTVWXURS_lpaPQOITchurZX^`jiXSW[USwjnv^cyshmm[Ukxqf[Z]^`af]UYYXWWWYVSQW^[XZ[_]VSSW[ZWSQQQRSUTU_ijheafkd]bkd^__]`gfbcdb_`Z]jsvwwcLKOKGLXq|}vlbQVddxqZW\\YZXLCBAZraMIOOMMMKGAXwnƻRWYKLPNPPQQRTTRRRRRRPPOPwbSONNOOOOPU[XSSWVRPQPNHHNhv[@BCWaTKHJJJJGESbagnonorkejm~q`OQUTWSSURRQQORNIGHHBCDFFDBBCC@@@ACEGJNNNGBF\\ssnlhedc^VLEBBFF>IWV~jmib]YYYXTRRQQSUVTPPNOVYWRQSRPOMJKNQPNKIIKSVSTVY[WRcobZYZ\\^ZV[`kfSD@aYWYUTTSUUXZURRSSTVWZbc\\UQRSTTTTUUWTQRQVWdv}}{v{}ux{|{u{UjlUMSZZTLEK]aVf~|eJILLTVPJMPOPSUTRPNNMKJJLNQSRRTVTSQOMNNNOOJEDFHHHGFGGCGG;JziSMY`ZedIEILLKG<?Schjjjh\\TSRRPNMLKKJKKLLLLJJHEDFHLNPSSTTSRQRSSSRSTRPQRPNQVRLMPRTarqZZTTSQQQQPPPOONLL\\_PZXSPONNMLIGEDHJLNOPOPPKGECCCCCBBAA@BCCHMOMMMJFDCA?ABBBA?>ABFJLMJDA>97:;;:9:879=BED>::::9;>??@CCC@?@CDBCCBBVviG<A>>=<>8BTE>CDBBA@@AB?<=>><<<<=<=>>>>>>>=<<<<?@AAAAABCCCCBBDEHBAGLmulunQ?>BCCBA><;=CFFGKOQRQLF?935989>IKNMG@===<??>??>><:8513BNIGF<577;@QL35866777876557>@EB:8779877788766677678999896548<>???ACCCB@>>>>>>?ABBBBA?=?@??>=<<:=CIQ]nlI<Oe^jrw|kJ<<=<<<;9776699:<==@@?>=>?@@@@@??><=;<<<>?AA?=@@9;<7:;974113578998886678<?ADFFFGD;7520000110122236;@CC@80/445799999:::;:9:;<=<=?>;9<CEHPPB877768=AB=98:98889::;;9:;;;==<;;:;=?@BDHIGGGEA=;989::::::;<CNMILRWYXVUUSMD<86656981/;C@824:<:999=EC956798:?DFHIHHHGFFHIE@AJWfoi`XPHA@KNADecGEvc;9>LfãN9E?=?=KiZFEPq~|iIW{^UV7@HNSK<7:;<;9753369?XvhH??DE@?>94.5GUJ7/349=BDDEB>EB538<85<K_rrXQ^P3-+,*165953LWF602<IJ>4100179=?=9411)0WlXP`\\MH_cF<AHQ\\\\P8-356879MgNVG<GH=9861..0,*<MG<:8:?ENX[K=;>AJYbcb^\\_hgkh[G=ON8>=7;<::;?@?><8>GJG?8678=?>;78=945:>;87883243DM7/545625=8,,9@?BIMMNNORPKHHHE?>Yxte\\TONQXF-/2238<944=EHGD?;8877:>IOF8139BFFGGFSP6,,,./<GHID>;<<:997677540../135:??<DA,$``][YWUSRRRQRRSSSTUTTUTUVVUVVVWYYYZ[[[\\\\\\]]^^^^^^^]]]]_`aa``aadioqstuuuvvuuuutuwxxyzzzzzyxvsqmf^XWWVWWXXYZ[ZYXVUTSTX]ejosspgZSTVXXWXXWWWXTMKT_b[RNNOQRMKNORQSVWVWXY\\_^\\XTRPMKIIIIFCGNPSXZZYXWZewtnvdJSn|t]WYcwwf``Z^Uqqgv[p{cad\\ky~wj^^`_aa`^^][[[ZZZWURV^\\XUVfj]TQXYQQTTSQQQSRQT_ijgdfffinpjb`_^djgc`_```[]ktvthQHKNORWjvrqic`gaU[eY^je_N=@D>XpYJGHKOMLMMIx}wvǧYPYEINMOPRQQRSTRRRRSSRQOOnuXLMLLLMMLTeh\\UWYZ]YNML`kgUGEEFIFIQMMQNOQKRT\\rmitpgjnmf{rGBKQU]ZYYWRNOMJGFGEEFFDCBBDD@@AACDEFFEGKD=Lp}qlhgea]WLCAEGADc[cmkda][YYWVRONPTTRQSRNNLIMPMKNNNMNSYVPPNMLJJQUOQT[]ZSPXbZX[___^^^_TEERc`bXYZUTTUVVWXTQRTTTUWZdkh`XVVUTQPQSSSPNNMLOXix{~}}tz~u~aho^SRZ][SJCNZg]lu^cZ^gTRVMKNNMNSZ\\[ZXVQKIIJLOQTVWUSQPNKJKKKKIFEEFGGFGGHHFOjhUNMYbprPGKORVWJ?@JSZft}r\\YYVTSQMIGGHFFDABHMKEEGJNOQSRRRRQQQQQQPQQQPONMNRTRSSSRPObogaNNNPQPOOOONNNIVtcK[XSPOMKKJIGEGKNOOOOOPNCAFGDDDDDDCCBADFHLMMLLHDBBA?AAAA??>>=?CHLNMHB<9:::999989;@GG>9999:=@@?>@AAA@@BDCCC@?Lh^=<><;;79?N><=A?@??@@A@><;;;:;;<;<=???@AA?>>=>>ABCEDBACDEDDDDCDG@@JMXrpgO@ACDDGKNKEB@DJMPTTUSPNLFCEEEBBCFCTWMD@BCDCBCDDDEDCA>79S[KIB96=>@ACG=7876987876677868756557889788765688657899897458<>@@>?ABAB@>=<<;;=>?AB??><===<====>?><9;Hgsx}}xP7<?====;9866679:;;=?>>>>>>?????@?@>=;<<<>?@@==IB6997789::9899<==:876665:AEEEFFGF?>?4.0110110111210003>NSLC@:6566789::9::9;<<<<<>?6/5AELRJ9685558=@?:888887899::977879;=<;97<ABCFHHHIHFGHGB<999:<;::;:<GKJJOSWZXXYPE?547766881.6=;7679;9997<HD9678888;@CDFGGHGFFFGD?<=IarlbYOG??LN:+5cqwvG89;G_sΕ23????R``I9NaP@<3CxbOJF@EXZN@=@>>;98626AD9;tvQGEIJC=<9/,48:;4236;::GRD>B?<CA=;768<QfI/314.+-05;B62Zj^D7<O]XC11336BLLIEHD6,)7Sjxd\\aI;LP@68HLELM@BA88<GUVlu@>NIBE?6674/-/343@OJ68=81=PUG=?HQ\\fi`RIPUU[_ehfZSz~C%18=@A?99@FG?88@C=315:::8632573019?<9776/.12FO3+32111354//4:=GSVPKLOSPHED>@GJYd\\ZTMTRDGO:/212570+06?F@<9648;;@NZ\\TJ@:4.3>JNLPM?3---/6:9BG<:>?===;=?;73/,-0355106:7,),baa^\\ZWUTSRSSRRRSTTUUUVVVWWWXYZZ[[[\\]\\\\\\\\]]]^_____^]\\\\\\\\\\\\\\[Z]aflooqsssssrqqrrrtvwxyyyyyyxwuqnlg^YWVVVWXZ\\^_^]\\[ZWTSUZblpqplbVTVVVVWYZZ\\^^ZTV]dfaXOLNSRNNLMNOTTPOQSW\\befgda]ZXSRSQKHHINW\\^]ZWWTUbr}|pp|~ncv{gfld^ZPbi`xyhujZ\\jzn[\\fa]`grl]^_^]\\[XVTW]]YXX^f\\RTRSPNQSSQRQQRSOTelihghlstojb[[bjlida`a__^]euraTLRV^gjv}p^Z\\_bjl[LNVSQ_dXG;BIDN\\RHITTNLMOMO|έnHUSLNNOPQRRSRQSSRRSPRdsz|]IKLJJJKKQ`mh\\^kyyWSymmjTFHKJEGK]nUMaZWakpaRcqjsvsqutqm~sKCRZYXXVTNLOLKJFDDKSLECABCDAACCDEFFGHEGNE?[yvjgge^ZWLBBF@Ae[Xzhf]Y\\ZZZYXUROJNTZWQS[`PTf_bh`VVVOYk|hNRQPNLJMOILW`]ZXUUWUX\\]]abb_\\WSSWUPPTXVSTTTTTUXVSSTTTTVV\\cc]X^aec\\WUTSRQPPOQPMXoz|~qsy~}}~v{eUsaR[YWZXPJIK`^`RSr{iMKQMKGKOMRZ^^__\\WNHIJJMPUWURQOLKIGHJJJHFEDEFFEFHHEOuiUPLXpy}t\\LINPTZTFABFJVl`QXYVUSPLNPPNMJC@DEILMLMOOQRQQQPPONPOOPPPPPOLKLPRUZ[ZYWQV_cgQPOOPMLMMMKJHCXjSPYWRNMLKKJJIJNOOOPONNPQKEBFFFFFEEDCAADGIJLMMIEB@???>?@@?==>>>?@AEKKGC@=;<;:9989:=CHB;889<>=?=9<BCDDCABCDDA?@IK<=>??=?<RFB@<9:AFMLGA?<:98:=?@=<;<=?AACB@??>?@BDDEDDCCCCCDEDCEEFEGGKl}rcJ@CDCCBCIOPQQOORTUQPNLKJD<EGED@=<;=AKTG===?????@ABBBAA=:<BD?835>??=767877899787557764325677888976655566765689998868:<>@@?<=??>=;::9;<<;;=>=;<<;;<>===?@@?@AACHRn~|{yyvF4?>;>=;;976667899:;<<<<<==???AA@@@><;;;<=>><:<F=3DD:87;?@?>=<>><:::9855<EEEDDDC@>FH;2111011011111110.0=R]WQKC:43567899::9;==<<<==88CFGPSG<;843589<<878987678899977767:;::846>@BEEGIJJHHKPME>;;<>=::;;9?JMIINV[ULHB>;4477876544589::::::899<GC99::977;ADCDFGGFEEFGC@?=D]qof\\PD>ANJ<=79cQ:@CF_~߷[6HDACD;;HILF7-02F|jIFH6<PPGCCCB???:639EG:3KdhXF?IPC?>70,19>>:7:>>:;LU<026<@>=?@=50@``˪O(/6,,288Bop7OmoWCEaqY;/5=;:KaYHGQM;,0:@crSMH913/)/BA:EPLMI?<=BNPWa>4;===855653234779FA2AC739B@45BYhh^L9/2BLO]dca]XXtxP9688<?DFEGHA:5651--/59;8422342/5CEKROHA:429LN9487543105<==>AGMONIFEDCEOPFGUSFKYZI@JI=1:;022255/18:>B?8559?ECAGJHIPQPSC05GPLHFIF:56538CIA57>><;<;<==<92+.11698/%05*'+`a``^\\ZWVUTTTTRRRRSSTUUVVWYZZZ[\\]\\]]]]\\\\\\]]____``__]\\ZZYXXXXWY^beffgjllllkjkmoprtvwxxxvuusrquklkhaYVVUVVWXXXXXWVVTSPOR^horrpgXSUTTSTWWXZ[_bba``djf[SRTTRPMLJKPQNNOOQRX]__^]\\]ZTV]_]TJEKU[\\ZXWXXVY^cpz{ycgmlcff`b`dvp[\\vtXYkhaelqi^^`__^\\ZXVX\\\\ZYYWVUPNPQPPQTUTTRRSSMM]hjkntvuqmg][clnkjheba__`^^fcWT[emxztpiha]ZY[`cef`QGJLGNVRMNVTLGHHIKQRQPNOMYڷPRVQMMOQSSSSTSQSSRTSNbķpWNKKLJKMOZgecpx^FX{[UVLGGGGGOkpWX\\QOhlgcSZTPduroousm}MBLKJIIGFINKHIGGOOVVHB@?AA@AAACFIIJJGJRN<En|mgid]ZVOHD??\\cSp^`XTUTRSSTVVWQIFLjyjYf}Os^\\[[j~hSVTRPNKJKIKOXVRPRROSY^]]aehihhbZMOSTUVTSRRSSRSWVUUUTTSTQV]ZVV^dmng`[ZZYZ[[XWVPScx~qmnquytz|t{rJ^kXdshTTUNLHIy_cYOilOGJLOMQ_XIQY\\^__^YQKKLKLPSSPOMJIHFDDDEHHECCCEFEGHGMYt~z~kZSMUp}ywrcPIKLLOOGDCFDHWnnMKUUUSMJPTVVVVSQKIIMPPQQPPPPPPPPONPPPPPPOONNMLPW\\__]ZYUQT[iYTRPNJJKKKILAJnlLQTUQNMLKKJJORROOOPOMNQVXRKGGHHGGGGHIIHHHJJLLFCA?>>==<===<<>??><::@FFDCA?><:9989:;AGF=989=>;<<>BB?AFJHD??CB@=9;<??BDGS]OKBA;;AJNNHA:679;=AIIG=8877<@@@@>>>???ACDDDDCAAACCDCCCCIIBBG]uyiK>DFCBCB@CEHMRXXURMIIIJMJ;3>?>=<=;9989FK<889;:789878899;<63542237742213667899776567665467798886754433334444688998789:<>?@?<;<<:97778:<<:99;;9::;<=>>>???=?BGGB907Uw{y~hC<@<<=<::8777877799:::;:BA?=@>AA@@>==;;;;;<<;;>@92<FE@=>??@@??>><>A?<978>BEDCBBA@GLMJ?52110012221233200/8O]\\VSLC;5446789999;;<<==;@IIHJNNIHB96557899879;;96568999888647::972/3=CBEIIIJJIJMMKE?<=>=<;;;78CNJDHSVG;8656655677778:<?BBB?<98789;A@:;=;9879>BCCDFFEEDGHC@@>AUknhaQC>CLF:>?7Fxf?I_aUeC?KEB?:3\\zY94347WtOJG;9BFCD>:>?B@988>GI<EFNLMMMOWJ857:ANLA;===<AJJ<36:?AENSTK738P_US%0-.4<<>p??h|kPSqyR4/?TG8PoU;BORI=65<TXN?7=7-.225??>FNE==<8/0:>J_O915:<;:975566887:C=5?@?@;4337BOPHC;06GOPS\\fb]\\]XYsrD1129?DLKGB@<7420/..27;=>@;.,2CY[QU``VJHD>FPJA?<9742217DKHGFHIJT_XJFCVjaL@EMN[bR9.0152151121355?KFACC=56<ABB@<74>NR[_MKA;IFBELOD77A@=DB:68=<<;8402<A<3+/433NulWNJ4\"+Y[]^_]ZXWVUUTTSRRRRSSUVUVWZ[]]^^__^^^^]]]^_``````__^\\[ZZYXWVWWY\\^]]^`aaaa`acgjknprtutsokigddjohhhgbZXWUUUUUTSSSSRSSRRU\\eputsiYSTSRQQSRRRSUWZZYY\\_`\\XVUTTSQQKJQROPOPOMPRQNMLMPNMQV]cbWJIOSSQRSTUZ]\\Z\\`kv|yyoU^_]`drrdd]_hSWpg`nqolg`^_]_^__]\\[XX[[\\]ZZXYXJQdUMPNWZVVTVVML[fiorsqkgfa^fqurommjfa___`^YW]lutuvso{jtpjhfb_acdhllhkwo[RS\\edRFIHHHILRTONRO]ǒWRXRQOPRSSTUTUSQSRRVOWƴ^LKLOPRSX^`p~mOKTJVk`VXNGGFEAKftu`EJYZWR[tjULBEOQSQZa]Ys}O@DGHHGGILJIHIZ}gFPPD?>???BCBBGJIHIIKLJAG_urijf`\\YTLEIYfcteRTSPRSPNLLMOQYUKCR{|dfzK䛕c\\TWkom]XYWUSPNKJIGIMSPFEKOOOZ`Z[`cdgpvrdWUTTUVTSRSRPPTWVVUVTSRSPS[ZWV[`ced_\\]abcc`\\ZWRTRitlimoortu{tPOibRe_SQLKATb_kiWLKJLKMMTrtSFLTZ_a_\\YTNLLKLNPOMMKJHGECCACEIFBBBCEEECDKUhyz~|vh\\UOQ`syvsdPHIIIIIFDEGFDFM_o[EJRTRKGHJLNPQTTSSNMNNPQPPQPPPPPPQPPPOOOQQPRQLQ]ac`]ZYWTQV\\XSQRMHIJIIIO@okKLJPPNNKIHKRSTROOPQPOPQSTTURJJKKLMNPPMHFGHGHIFCA??><;:<<<<<>??>?=::ADBABB?<:9999:;?DD?999:;;=?BCEE@;;AKQOD>=<:9<>?<COXSJH@<:?FIC;97877:=?B><:978779=?>=<=>>>>?ADDDDA@AAAACDDDBFFDEE\\}xV@DIFCBBBA@ABDIQ[\\UMGHHKOJ;9:9::;<;<:8633<;69<;98655543356666432454345666777986545677666<:8::876654333212222466665479::;=??><::9755579;:99899999;<=>>?@AAABA=:522//Ebr}xR=A@<<=<::999877688889:;:PMM7@?@@@?==<::;;;<;;<>=?>;CJMNFA><;<==ACCC@;999@DEDBAAAFKKOPD732001112112232365/7S\\YYYVL<3357888779;<<===BFDFIJHKKC=856899767:==;75689;:887447::8837G^T<DIHJJIIIIJJHC><=<><:;:8;DIDEMK:37755656888:;>ACFHGEA;876679=<:;<;9889;>ACEEEFGFHGB?@><KemhaRC@DIC::=:8LqQN{w{}ofQ`xI=RIB><;X^:765Fs}[UYD5<D?9-+7=;<ABBEMKVbȒHm};?c`A:DA>DK?8889=BDAFMRQOMNYgm^OOCL[bf~304348=:Ic>6]iHbxk[73JSJNYmE08DQZO94>JH;11488;CD;:AFJI?::657;48@MVI<@FFDB>84235788;EE=>GIC9115895,,=PX\\jrk`Qahd`a[UUQF7//1458GNJEB=87642011148AGC6.Hsy\\PTUQIJJIJLHDD?9:82/..4BKLJHNUa{z`X]u\\6/8AL^Z@352.17741020-18HUNDEB:57=BBA?93/7CHUP;OM6<@EJIC8.6GA32579:==??81,.;B;101551Wp:)STVX\\\\[YWVVUTTTRRRRSTVWVWX[]_`aaaa`__`___`aaba```__^\\[[[ZYXWUVWXYZZZZZYXXYY\\_cefgijiihc^[ZWUYiifefgc[WVUTTTSRRRRRRSTUWZ`hpuujYSSSQPPPPONNNNMMMMNPONPRTTSSRTQNQRQQQRQPQQPMLLLLMMLMQ[ef[PLLLMNPPQUZ]_]YZbhjgggWbqSVXUW^krpof[bzaRRb{yipxsg`]\\]\\]^__^^][WST^b\\WZ\\d_RssOOR^aUTU_^OO^dehd_][Z[Z^kqprvvrmhc____ZZbhqvtuqjgb^hqqpnkkecbYdsuymVWeeM>ENKIHJLPPJMTRYv}vHTUQSRRSSSTTTWTNPPSVLmɩuTLMOPTYTVmsNHTTOQ[_VVOIFFKE6Tl___FWvaYRPZNMKHJKMNLLOHHu_EFOPPNOPMLJL[~CEME@?@A?IWWQPMIHHIHFEHHKbqomifedXLSgjdojVMKJHGHRTNIGHMQQUMIjogjHz|o[dZXcka[YXWUTQNLKIHIJNF>CHLLNamaY\\_a`dmorm`WRSTRQQQQPOTZXWVVUUTVVVXZXVZ^`ba][]acba_ZXVTWQTryomkmnnpvutrSZaaZ[lPMHOVmlT]a]QGHNMLNMYr`EFIOYac^[YTNLLKLMNNLKJIHGFEDCBDGEBABDHID@IKBWvyu|{wrf[UONTbpuscOGIHHIIFDFFEDEDCXcNEKOQTSNLJIGHKMOPPOOOOPPPQPPPPQOLKKNPPQV[_XPSXZ[ZZZZZYZUNNOOSTOHHIIIHEIj^JJEJMMJFIQWZUUSPPQQQPRTUUSSQONORRQNJFCBDEEFFGFDBAA>;:9;====>>==?>;<?AAABC@>::;;;<;=@@@<:;<>@A?<@MSKB==CRddTF?><:>@@FPPKH@<;<?=;76669<=<;;;889:8:;;;==<:9;<==>?@AAAA@@@BAACDDCBCCEFE^yeCAIGEEDDCBCDDEFHUcd[IJKMPL=:999:<;;;<>ACFGIJLNMKJFFEDA?><855556666555676777776654556764=D:8<;85666444344222356644326799;====;::96556679898999999:;<=>>?AA@>:633358436>jd=<A>=><:;:9975554567:<=>FL`M:??>>=<;:9:;<;;;<=>?><<AHPSMIE@9>CCCFGB<;;99@CBA?@CEILNPI<764122/033112222563/;LZXV\\WA235678989;;;;==>=?DFHKIHD>:767888668<>?;9:99:<::95259:9<<0KyH>GGIIHHIIHGHFA>===<;;:966EOIC>8777667779;=?BGJJJHE?=;988879=:8;;;98999;<@DEEHJJGC>=>=;G^jh^PCADC@<<<966:Qxo[xv]JJLTbigNDNMHAMutfY<889RxiTO;1:B7.2:B;.9MLHOSL^a9^^CGNbK@IG9185468:>@??IWZTS_ky|xhjiirzj`U:,;<8;99;71MpT8UaL\\@=QA@\\XZ=56=M\\YJ>@W^B206?CBEB50<FKLA658Pf_918AHDFMONMIA95312568<A@;BKG>:9;<:60,.6Poy~[FWl_SVYXQ9+-..022.:PUL>654320252-.2;EHDNliPJMLGFHMNGBCC>:?F@:024>NVVRTXnc]iJ1=?;FTJ68FB516831035311;HGDD?87:>BFB=;83198<FGVYC41@MF4)-?F:/047:;==@C>416:?;27;=<>]h>QRRSVYYYYXWVTTTSRRRSUVWXXZ\\_`abcbbbaa`aa`bbcccb`a`__][[[ZZYXVVWWXXYXXWVUTUVWYZ\\\\\\\\\\\\ZZYVUUTST\\jfcced_YVUUTTTSSSSSSSTUUYYW]lukYRSSQPQPNNNMMNMLLLLMMMORVWTTTSTTRSTTUTUVVUTRPOMMMMMLLQ\\gf_WMFHLMMNOOT[]\\^_][XWVQ\\qk]ZZWVY\\cnogd`[]ZRTtpmos}q[X^]\\]\\\\]^_^\\YWOO]b]Y[`lsbkfkw]^ZU\\kcORa`[YUTUTTVW\\acafqwphgc`_^^agorrtqsqnqmfdfghjmoh`XUjqr~iW`^OB?]^GIIJKLMJMRTUf}{quWHTVTUTSSSSTUUXWPLRZVXϓy`OLMMRRMdvaZVPSVSW[UUPKH?_xGImYV|lSjmgWHHGDGLNMMMMLKKJGjeHGKMKOSMNKOO\\dJLJEA@@A>Ldh[XRHGIGGGGGHGQgrsonoleaikca^OIHIJMICPYNHFFKOMOIRwxnbQ|kldTtqNT^]VWWVTSQOLJHHHJGDCDHKLlsYY]_^^blrsiYPSRQPQPQPPU]VRjdZ[YXYWUTUWZ]]^^]]]^_`cge`ZXZ]TZo|~|oklllmszrpvVOUUXWSjhKJLWkziUNQRRNLPNMPPQ]\\GK\\XPUab`]WQNMLLLLLLJJHGFGGEEEDGGGDCCAEIGFOL>Llvrv}~yvpcYTOOOSbtuaMFGHHIGEDEFDEGJDF\\ZIFIKTa[RPMBAFKKLLMNNNLJIIKKNMGMWU[\\[YYdhiVM][QSTVYZ\\\\]^VLLOUVOJJIIIJATK[NIHFFIKEJT_`[XXURQRPPRW]^YSQPPSTQMIFC@@BCDGHHFFDCCCA<::<==<=>><;<<;;;<@CDDA><<<=>=;=??@@>>?AAA?;=FLKIJJFDTnwhNIHIMPOLHB@@=;<?@?@@===>?B@=;;;;;;::<<;;;;98:;<<==>>>>==@@BDCBCA?@CCDCERZL?DGEEEEFEDGIJLIDIYjkXLJMPNE@>FID><@FINQQQQQRSVZ\\[\\\\\\ZWTSVK;4356656665556777787654454546ED69=;64577654444332354444246789<===;:::97666567777999;;;<<==>==>=;9754557:<=94>jrC5@=<=;:;::8767718==<>=>@?U^<>===;:99:<=====<>???=;>CHMNMLLLLMJCAEB<==<;?>=>@BFHJNSM?8876431.131111221464.+8OXW[YC223468999:;;;===<AGHHKKIC;767778867;@A@:8>@=;::<;7546;>>8DTvjEBEGGGFGGGFGFB@@?=<;;;;:7=GB978877667777;BEGJMMKMLB<==;=>=>@=:<;:9899997:?CEHJHA<;;<=;?Rdf\\MCBB>;;;<:<;25JbqR36B[vyaTNMQQEKeM@59@BKkpI742;?6=Wp_@2=O;E_TFHF'ZuB\\jo_VOBI^J/1269==@C?>DKE@LTThub]_qj~HUD4S_<33220/?WB18=9C?IL49IAA8988EXf^CPgZI;3AWWC76417BMUC.-4EUM8/7C>9FNOTTJA>@?:7799<CEBCE>9<DGCA@=854<TuzGEH[J8AOUTF6-++-/2-.IZJ5//01/,055248?GKP|}rounWIPRKFEKVSHHF:8BMWYVYZ[^__^^Wcva\\b{mCAQPOTK:5>G@305951028>?72;ABC@;8978>@>>?;14=KVRPRQF4+6@3'0>B:58:98679DLHBCFBB>;GJINQ_}xMRSSSUWYXXXXVUTTSRRRRTVWXY[]_`abbcbbaabaabcdeedcbba`_^][[ZZYXWWWXXXWXWVVUTTUUVVVVVVVVTSTTUUVVVV^fd__`^YWVUUUUUUUUVUUTRSVUQQWbbXRTTTSQQOOOMNPOOPQQONOPSWYXXWXXXWUVWWVXYYWVTRPOONNMNNNSZ]^]YRMHINNMMNPTX\\_bccabdda]X[]ZWXWZabZV\\ZVXQYy}twpWV_`__ZWY[[UQSX[XZ^__dmqsrg||VS]gkf\\Yad[TSVYYWVWY\\]]^aehgdeda^^^fqrsysoj^ltnkkkkli^RS]fiu~f_iUEIKkmIHIJKLLLLNUY_yvps{yLSVVVUUUTTSTVVWXRLT[RjĿՉTpVMKLMEMltihg[QSVTUWVVQNG=chKeb]ssThdIFFGECBEILLLLIJKC@\\`GBBELRLMHEHHLMVMLFDCA=@Ra[ZVHGIGGGGGHHIVkwxttwxcWURJHMNNMWNBLZSJHHGFIIGZkjgc\\icLbzncmZIlvTJWUSWVUTTSQMJHGGGHFDBFHMoyXY]]\\\\^glrqYMQRPPQPPRQU]WJZj_\\[TUVPKLTY\\\\\\\\\\]]][[fswqgb_b`PKcvojlmlopmmx{ECGGHHGNWPHKNQYXIGGHQWQMPMNQNZcNKgo[MP]hgaWPNLKLLKKJIIHHHHHGGGGGHHGGFDDGKOMGACUjoqw{xrl`UQONONWpxbLDEIHFEDDEEEEFHGDQ^OEDDNUUQQPBADIIHJKJLMLF???@DFOk~{vfZVYgf`VZ\\RLPSY\\[]]]_^UPQVXPJKKJIJEAJAEGGGDGIK\\b`^]YXWTQQNMPYc`XTQQQOMIGFFEEDCADIJHFFDDDDCA@>>>>==?><<<<;:::=DED@>====?><<>@?>>?ABB?=;<<<=?DMSPJRnoXPTVXUGA=;<<?@?>AFJHC??@AAB@?@?><=><;;;::9779;;;<=<<=<;9>EHFDBA?==ABBACDDDDDDCDFFFEDGIJJGDBEUljUGJOMHC>CFB>=?AAAA@???>@DKTY[\\]\\\\[[^]L7/453345566666778:865444344:C;5:>:44577653455543444444345778:<=<:::::866665555579:=>=>>?@?><<;:766568:<==CC8<?;=;:;<;;;;<<=?CB@HGD@?=>?9A@<=;::99;;;<=====<=??><;<=BKOMPTSOGFDDDA=>==??9:>IIHIKPJ@:8879646972122122157310/;R[\\[D1235779:98:<<;<<>ACFIIKLI@7578788989?CB=7<EE>99<=:966<B9A~v^Z<EEEEFFGFFFEDCB@><;<<=<:876776666555556<DHGJMNMPRI=<=<?BA@@>><;:679997544;CD@=9799:=<8CZbZKDC>978:;;;<<;89gn:A;>QYSRYTMOL;;evJA@13GH8M]@<=7=:BgojW861JfWC>N<Tg35Dho\\VGEUiWA>88;>@CFEA@>949;46EBFCLFENVhSM<<ezA/-+1/.6D;0//0-;OB-47333575:SfWD_\\GNC@Ye]D01:<<BJF:,./*+-469A@AIKP[RD?DLLD;8<;>O\\`_THCEMLFGMLC>=97VY6C>@:49BFIC70--.0440ATD.,-.01343579=GJJc~jikcUQQURNFDJTTKOV[cWMORJFD?@WmukX_gd_TWYKFU_`^J77<<3013981.06<BGGIID@>98<@>99?CGHEDTaRA@BHPR?/6<416>=8780-3-.?KSPLPM?7E_ZGHR]dp^TUVVVWXXXXWVUTSSSRRRSUVWZ[]^_`acccccbccbceefffdccba_^]\\[ZYYXWWWWWWVWWVVVVVVVUVUUUUUUUTTTTUUUVUU\\e`[[[ZXWVUTTTTTTSSSQQRSRSQLKPRRTUUUTOHHIKJKNNOPPONOQSVYZZ[\\[ZYXY[[Z[\\\\\\YUSQPPPOONOPNJKPX`d]RKIJKLLMOSVYagebchif_a`V[][_`_]WRV\\^\\WZfsz~}{vszu`[`c`eottpdWPLUhdWVYYallounxyn]Rerg`eih`[\\^]Z]a][^eimmd]abcec_^]bpuvs`^[U^xz}{ywogaXQV[[^asughYYTD\\qmSEKJIKLKKLUXdqzwdMQYWVUVVVUUUVVVUXWQTXOvĿ׎JvcPJMLM[agsm^VTTVTUTXYSRFD`zsVW`]k\\LNGHGFDDDDGJILKIIIIR^cqcE;CMSRMJHGNRRYKVYCADC9@VWXWKFGGGFFFFHGNgxzwxqRDDJJMPOOQQNDJ[[NIGEBNNFgwQ@CA\\[M`\\RgbTT]iXQURRVVUSSSQMIHFFFFGCBFEOtfRX\\\\Z\\bcbmlULPQPPQPOPPRX]_dg]WTOPRNKKOTXYYZ[Z\\]ZVbrzxpkeb`UHJ]rrikmlp|lklypHFBDJEA??DIF@?>=AGHIOSMMNMNMQa[QnmMIL[nmeWMMLKKJIIIIHHHIIIHIKJHHFGGGFGINSKDCACTfowywpi^SPNLMLRjvdLBDIIFDBCCCDEEEECHWRFEEIGJKNNGHBEFFFGGIMNIA=<A=Bqy^JBCJZb^ceWNQPQ[][[ZZY[XSSWZRLKKJIJEDDEFFGFFFGZhd`_^[YWSPKHJOQ[_VUSQOJGGGGFGGEDBCHJIFDDCDDDCCB@@@>>?=<<<<;;;:=DDAA@>=<;<;:9:;;<=?@A@>=<>>;879?HUULS_[SSQKC<;;<=>@A@==BFFC@?@@@@BBB@?===<<<::::8789::;<<<;:9:=GMKJGB=;<?CBAA@@DFDCCDDDDECCDDDBCC?BN\\\\PLKGCA???@?=>??@ABA??@ABAFPY[XWVWWVXR=1454566666666679;863453355:;47:>9235776443555544444433579::9:;:<<;;<:76566666668<??>???@@=;;;:76668::<<<@C:37=<:;<<<;;;;=?BDFJGB?@?>>>??><<<==<=====<<<=<<=>>>=<<;ALQRRLID?@CBA?>>>>B@><?GJKMQNB73::557:D?/.01001114620320AU\\\\K4036<;9:9::<<<<<>>9=GKJLMF:678878977?DBA:7CJE>:<><<<:>=;kmqsEBDDDFGGGFFFEGD??>==<=<:526866655556668?FIILNNPPMF=<<=ADB?===;:97788864203<=7423789:<8:MZWLD@;8789:9:<>A>8Bk?<B9;B@BPRFMO>37;707KI8R}n`tfHCDDBCFcnT0,KbhXCQTKQ[Y:,@IZWDQdd_VJ;669<BFFA>9:?>;634997686,1BXB;:CN822231127854413EN9.22/001455FQ@LcQ@DIV\\ID?55:>=EJ522/.0.379:<CKPDJ\\M@AEJJC:8;;B\\oog\\TPV\\VNQVRLHA:4<i~@0>767;CA58IL>55469;6;I>01/,-5??98:8>PLLwofhkk`UVUUTQG>:;>;>_R4=64643IvsEG\\b_H<WTANhtgF33540024994128;<CKLHB=8659AC:5;DLVZWYRA6<A;7HWF9?=36:89@D?AB607BPNEFE52C_ub]znggaOC`rUWYYXWVWWWWVTSSSSSRRSTUVW[]^^_acdddddcdcceffffedcba_^][ZZYYXWVVVVVVUVVVVVWWWWWVVVVVVUUUUUTUUUUSTY_ZXXXXWWUTSSSRRQRRRQQSRRSSOMPRSUUX_[TSU]ZLJONMONNPRSVZ^abba^]]^`___``^ZYUQRRRRPPOOLGEHMT[`b]TJFFIMNNQRVYYYZ_gjgfda`]_cdca_^_`^\\[XVY]m}o`wkfkfgs|ymbcd^hxo^R`gYRRQ_mkimls_Sfrj`eqtokib[_ea^eku}yi_`cchib]_itrtlWTXbeipstupf[TVaa[[[jkhnt`K^XOehXMKKJJKKKIMX]|fq`jqHYVVVVVVVWWVVVVUWXVTS^Ŀ֍J^oTLMR`e_ed][UUUVUTUUTVUFMnyshZ]jownWOMKGGECCDDFFFKKIIGUw{^ejRHNTSRUXPSTNZMTV<AfVI`YSUMGGFEEEEEGGGeyy{wvkWHGNMONLLMMJEGW`XME?D\\R>Vo[IHGVPGMISXXX\\si^inbSSWSPQTSOKHGEEEFCBEBVznPOX[[XYbd]`]NJOPPPQPMKOX_dec^UQOMNPNMONPSTUVWV[cd]_hrvrnifd^NHO`uykkmkrwlki{jWdZNKFB@AFHD?>?CGIIHLNLKLMLLOPKajKHKXik^MJLLLJHHGHHGHIIHHHJJJHGGDDFHHHPSJDEC@EXmxzule[ROLJLMO`qfOBDHHFECCCCCCDCEDBOWLGEGGGFGNQGBDEEEDEGJMJD?=D??YsqYJHMLLX^^_YRPVSNRWWSQPQQQRTY\\TLJKIIHFDFGFFFDFFF[hc`__]\\[VQTVTZUVZSPNLHGGGGGFGGECBAEKKEDDCCDEGGGECCA>@><<=<<>@><@BABA><<;;;9999:<>??>>=<;>BCA=979HWWJKVSIC<99<===>>>>;;>BDCCBBBBADCB@?>==<;;;:::9789999:<<;::;=>ENPIA=;<ACBAA@@DEECCBCDDCBCCA@@ACC@=CTZZNCBCCBBDDCBBBA@>=======<@KVXWVUVVXUF745689877667578:<8545543568768<>634459744254565344444358::;;;:;>?>=<:76567866678<@?====>=;999775579:<<<<>?=9:;;<<<<<;;::::;;:9<?=>>>>>>>><<<ADCBA@@?=<<<>===>===<<@KPNHA>?>?@A@@@@@A@?=;:9BGKSOG<31103;E<4;92/0010134113311CV\\R;//4EJ>76668;<<<>=52;HKLNG<677888:77@DA@<6<GKD<<>>=>>=7WP=CABDFGGFFFFGHGDAA?><<:75777655656789<CHJLLLNOLC?>>>@CDA=<<;<<978::9652124521125678:86BTVOG>9889:::<<;6899>_M4878866?LECUXJA=<>?Lw^`{SBEG\\hXY~ylU9D_pGENF;GJ6,COGFIUflhYC6348:>??=;9=BDFKF=;:88<:3<GfI3:;::75794232357:=;@MI5/32/...14377:]fRA@TZC1236;;:=GM@N]_J208<@B@@KUA?ULEEDDC?=;9=OgjP>NY]kn]QSVQMI<387<K9384317A?25TZC878;;;86>;6:8556;CF@<7?IFWpDFWY\\YWYXQLGCGQD/21B?7@57:;:X`76CSUH>JI@Muh;+///.-/38;=;:?DA<:;<:88;<:538=;?IJGGEA=<>;6..>C<887521:J[nkSKA9CL=495/1=fjUC6*?hrVXYXXVUUUVVVTSSSSSRRQRSTVY\\]^_acdddefeeeeegggfedcba`^]\\ZYYXYYXWWVVUUUUVVVWYYYYYXXXXWVVVVVVVWUUTSTUXVVVVWWWUTSSSSRSSTSRSSRT[_[X[`badntwy{z|kNKPOOOORSTVZ`ccddbbbbbcbbba^]]XSTUWWXXVUSQNIGGJT_hni]TMLOQRRRQQQRTY^^XXb`[^^_cdddefa]YXZ[Zb}}iS^h_VVVZacpvkgeabhoxf^mi]XU_oxtlikriagfjvysmb]^\\bjmv~vgabddhjedfnxuppf`ckqomkmkc\\UT]c[`_[jknRO[^RJFFIKKLMMLINYqkaUMWSXVWWWWXXXYXVVWVUUYSNyׁJUksVLKXbbgic`^[WUUUTVUY[VPUqwtk`mvk[OKNLHFEDDDEFEGKKIJGWvt\\UOkuTLPLNRPNUTFPRMz~`zM\\THRQKHGFEEEEGFE`{vutmnl`SONLMMLLLLIGFL[_TICHXPBFEFJFGLIFFQ`QTinlgemvZRTQNPTTPMKIHFEFEDDE_oVHKSZ[WW]a]TJEIMNNONMPWckf`_[TOLJKNNNMOOPPPQSUTVdmg_alrsqkgb^OLO[lmkkiqzlheZM`bZPHEEGHIJHGIJJKKJLMKJKNMHNMC\\tnWHJITgcMFIKKKIHGGGGHHIIHHGHHHFGGECDFFHOOFCEGFEOfxysjcXPMJJKMMXifRCCFFDDEEDDCCCCDEBHWRHJHFGHEJRHFGGGEDDEHMNHDBCA?QSMLLNQPNSUQNNNOUVPOPPONMMMMPUZ^TLHIHHGFDEGHHFDFGERfd_^`_`fgdpzj^ZUSNKJIGFFHHHGGGECBBCKJDCCCCDFGGGGEECA@??>>==?@?>>@AB@<<>=;;;::;<>@?=;;:;;<>ACB>;;DLMKADD>989:<=<<<;;<9:=DEEEEFFFFGFDCCBA?>;:;:::9777889:<<;<<;;6;JH@<=;=BDBBBBBEEECCBCCDCBBA@@@??@A?@EUd]IEEDCDFGGGIIIGD?=::;;<945AMORTXYZYR>2379:877667679;<:64554346778:=;54446:74333466644556658:;;;;;;<???=<:88889:866778<;<<;<<;9776765579:<==<<==;:;;<<<<<;;:::;<<=<=;;=====>>=<;;>CBAA@??=;;<>======<<=@FHB<>@A??@BBBB@A?>=;987:=>CHNJ=/)2?F:6:85/-/00/0221002422DZZB2.0BPG?9348:::;=;622<JPRF6267677963=FB>=87?IIA;=?>>A94ukD;@ACCDFFFFFFFINHBB??><:9967877876678;@DHKLLLKKE?>?>?ACC?<::;::989:::75322110/133467883:PVRK?7789;>>;;95//51,Fe{oXQ:48778?BBHNSWPHCDPfYIIT}knzmWQpjA<7.14-+.GM;AD:AinO:68::<>;8;>@<89JfdD:<;:;;;<BDH8137DF?9885444234<B>?GA311/--/0011.,Hi^NL^bI355.3>@9>IF=[xA4;AFID=DWOBHA>@@?>>=<:A\\lU:?VdsubI@BFHD>4/33-/11112/169;ISE79:9<:6325779<>?73>EA=9>@E_N07=>@AHORNFAEVfZADP\\oXDKE@>=<7WxUYB4B?CQQA8OH-./-+--,.39>B>>EFB?@@<9>DIH=118?LXJ76:;:989:537<<:<:2,/46F\\UADC;BG8.211,4Wpn_JBMRG7/W]BUVWVUTSSTTUUUSSSSSRQQQQSUY\\]^^`bddeefffffgghhfedcbb`^]]\\[ZZY\\_^[YXVUVVVVWWYZZZZZYYYXXXXXXXXWVUTTSSSTUUUVWWVUTSSSSSTTTSSSSU[bdcdgiimsxy{~zhJIONNPRRTVY]`bcefeedeeeeedcb`\\XWXZ[\\]]^]\\XSPLHHLVdkkf^XUTVWTQQRRNNQNWaZSTZd`Vankfijg_Y]\\d}layz}cQT[^[Y[[ZT[ptleb_YY`biu~|x}}plmd]fswvruzlp}~{k^[^flkkoldbccdgb_kurrwyysproonmkh`XWY]`^]a\\dk]KYYJAEGHJJLOMKKIWub\\HvcW]WWYYYYZYYYXWWWXUSXQYvKYYfYLJUZ[lpeehcXSUUUXSU\\Y\\hyyqk\\`gWRRNKJHGFEEDGFEMPKJJJJIB>QSUxiQKIGGEFSTDCGGS|O:HGOUKGGEEEDEHFCUntpnnmjaWQNMLLLKJIIHGHOXSNIEKKGKDBHHGGHGFagQJ\\tdXdgrnWQPNNOPPONLLKJHIHCNcZKJHOXZWVY\\]ZROMLMLMOSajjcZURPMKIGGMPNNNNOONNNORS[ehcahmssmjd_NJTeg}ohiglhdf`PJLWSMMMJJMLIIKMLLMKKLIHILIK\\V=Kg`KHJGT`RDIJIJIIHHHHIJIIIHHGGGGFGGEECBMWSNHFGGFFJ^tvoiaVNKIHKRPP^bTEBDDCCFFEDDCCDDEEFOPLHEEGIEGLJJHHHECDEFONIHHC>ANLGMPONONOMKLNNPTXTONNNNNNNPRUW_ULGHGGFEDEGJIFDFGEPbba`a_dr~}hTQSPLIGGGEEGGGFFFFEBCDGGCBBBCDDCCCCBCCBAACB??>;;<==?AC@=<=<;;;:;>@A@?<;:9::;;;=?@@ACFHG>5689:;::;:;<:::98<DEDCBDGHHGFFEFGFBA>;;;::9988877:;:;==<969A=9<;;?DEBBBBDEEDABBAABB@@???>>?>=ADAG[eTFECDEHJKJKKLJF@<:;<:;85577:ALU[ZYZTB5699766667689;::75454346777:;:96569974333455543556668:;;;;;==??=;;<<=??=;86677899::;;<:8554456669;<==<;<<;;;;<<<<;;;;;:;;<<:::<<;;=>===<;99?BBA@??<9:<<==<<=<<<>==??@BBBBABBBBB@=;;;98788::8;DKG><?A=<:77,'*,.////0//003710M_G2/-3>DIKGC@<88:<;9966>IRJ5/555667638EHC?<78BIGA>=??A:8e~uf^RB94::?CCCDDDEEDDFIFBB@?>97:947767776667<DGIKKIGGGB>>>>>@BB=:::976788:::8543001101223566745HSSK?::99;?@<9AX^\\WWJA;>awI89::;==AA;>FGFGO\\~iPLhzytxy|I9A;CNKNUYf\\QRF;7\\oL78>;47??>CEA5,.Aca?8:<9458<;712402=B?:4246752018:44960.,,/-,010/-<baFHcxV46<700;C;8HI7?eh=>EGIE<=HSN;.-2579::;:BdoKEV_~`?211479621/00/.-.021223?JDCXd\\QQVRC7/256:=@?<@B?=::CZ[;387::=?@BDB@GSRGL^V[[?GQKLHGI8O]DU_J34@UVC)Fd,.2//01110/2457;BFFGKJGDJLLMF=65@V\\L<8;=;7:D@7:>>=?EE>4-+*,..08=53<810030*.572%/JPE73MN=TSTUTTSRSSTVVUSSSSSRQQQSUY\\__``bbcddefffegghhgfedca`]]]]]\\[[\\_`^[XWUUWWWWXYZZ[[ZZZZZYYZZZZZYWUTTTSRSTUUUVVUUUTSSSSSTTSSSTUVXZYY^bdglonmqvycGGNRTTTTVY\\_aaegffhiiihhihgeb^YVUUVVWXYXY\\^ZSKJMOQTX[^ZTUYWSRSTQPPJ\\ujVRZqkP[qpikptqgd^eq^c|u^VX[^]]^]^XUgqhbaa^_bXWo}{w{|lfjrx~~|l]aklhdafh_]abcd\\Zow`dtyt||mnoni`XWVY]_]]]ZklMicVKAGJLJIILMMMMLGT|f\\LYGZ[ZZZZZ[[ZYYXWWWXUUVLvfN[XT[dMJQXWbrsnpeWUUTUXWTVQNe~p_VTRQQMKIIHGEFIHBG^`LHLHE?7JjbO\\wx\\HFFDCDQTDAAD@uTJI>BOSQLHGFEFEDFDEMeunnqnhaXRNMMLKIHHGFGIIJKKIGHGHHHIGHGGJ?LgZPMIOUT[\\^qq^ROMLIJMQSQOMJGGDDUVKNIGOQUYUVYY^dcUJLMR\\hni`WTPKJJJIFDHNONNNOPPPMIMTUYbgeciqtnjibKJ[mnsrghdvedk|pOJMLLOLJMKJJKMKIJKJJJHJNMT\\QGNXUJIHHOOGFJIHHHHHHGHIIHHHGGFFFFEFFEFABnmaSHFDCCEXpsnibVMJHHOZSHQ^VFBDBBCFGEDDCCDDDEFILJHCCEGEHJIIHHHFFFGFRMGHJE?@HOROONNNNMLMMNNPTYWPOOPPPPPRTUNdUKGGFFEEECEHGEEEFCHZdedZShj[RPMJKHGGGFGGFFFFFFDCEEFECDDDEEDBAAA?ACCCCDCBBA=<==<>AC@;;;;;99:>?@A?=<=;<<;;;979>@?AFIEA9799;<:79;;;<<<;9=DDA??ADGFGFGEFGHFCA=<;::9:::99899:;;<<98:=;;<;=AEEBBBACCCBA@AABBA@??????@A@CHEGOULEFEEGIIKIGHHHEB<7799776777678DQVY]`S>4897666777898325546435766799776669753323344444556779;<;<;=>>>=;;=?@ACF=;96677889;;:9876554467778:;;;;:;;;;;;;;;;;:::::;<<;::;;<<;=>==<;:77=ABB@>?<9:;<<<<====<<<<>BCCCCCBBABBB>;9::9879:;;::>=<FG<566561**))+---...//.056,7UL0/1256<IQRNG?::;;<;:85:GOC0364567778>HKF?:8:AHHB>@@A<?AIH844424867>BCBBBDEEDDDEECBA>;867765667775689?FIHIIHFFE?=>>?@@BA>;=<9768989::8643112102224446644AMRG89<<>;7;@?BPkuwriZFdm]?7;;;<<<;865668?JeͼoOYpxV6:J_y`[bg]JbtT;474019@DEC:0.16>>43588559=B?522124::4-,37867;90-6810/,*0<7.*/326ObK;Lwm7+:;9518@=7BQ@,5_SBMMID=;:BF5),/26789<<@ckG:9_`;3232./695468950/123132369Lp}kkx}oT?559;=BFHHKLF:9JXF1789:;CB;:@A<;;77UzqULBANWN@FSBSLB8JcO@LL?7+;]E+3311222352/40/@MJB?AADHQSLMKC:5:CHG=58;<<?B>78<==>?EMI;0,,+(-;<,(36420296)\"(..6@=5237?BUUUVWUTTTTTVWYVVUUUSRQRTTW[^_aba`abcdefffhhiigfedca__^^^^^]\\[\\\\[XWUUUVWWXXYZ[[[[ZZZZZZ[[\\\\\\\\YWUTSSRRSTTTUUTTTTSSSSTTTSTTTVWVTQRW\\_adipux{zuwwaIHQTTSTWY[]^^bdeikjiijkkkkje`[VRPPONNNNQY_a^WTRQSSPOOQSWYWRMRWVTUU_vra]^nu^^klommostpjhsxxx}}j]YY\\]\\]^^][\\ab``aa``b^\\lyty||xg^eroc^cidYV\\^^[[l}xgcpxwzsfotqdXUUTX[]\\\\ZXlzYW^fn`NFQ\\NHJKNNMNNNITlUSM~d]_\\\\\\[Z[[ZZYXXVVVVWYSR۳`T[WUSmtOJOVZaowqlf[TUVVYWT[SHcuQGJOOMJHHHFFHLG@QpsTFJB<??E[ZIO_p~bHEEDDCPRC@ACA?HHCEMIKXZa\\FEHFFFFEEIIYroptogaXRNMKJHHHGGFFHIIIGGGGGHHHGFGGHGA^cQXPJLOQOKKQ_]PLJIHGHPVSOMJGDBLSKIJFTUGRYTSUUVWRLJJUbikc\\WOLJIIIHGFCEKOPPPQTWXVMJNPPS\\b`clstnofJPqyrlzwifa~egu{mwkDEJJJKJJKKJKLLJHHJIIIGKY`ULKNNKIHIHHJIGGHHGGGFGFFGGGGGGFFEEEEDEEEFAAorvrklg[OIWlqmibVKJGIX^LAITTHBBBBBEFEEDDDDDDDEGIJLJDDEFEEGHFFHKJJLJPOGIJGA?FOQPOONNMLLLMNNPSWWRQPQSSSUVWWFZVKHEEDEEECEFFGGCBBBMfigXOfjMCCHHFHGGGGFGGGFGGGGDDDEB@CCDDDDB@??>@ABCCDDDDDDCBA?<;@C@=:99:99<@A>>>===>>==;;867:;;?DC@?=;:99:AC=78::;;<>BA>;:9:=?@ACDDDEFEDB@?<:::;;;:::98::;<<:9:=<<<<>BDCA@@AAAAA@AAACCA@????@@ADFJKLNKEDDGGGHIIIFDDBBCDA@?=86677776423<IU[[[I58:86666779:626;85656776667765556875443333444455678:<<;<<<===<:;>@@@@@>;9766667:===9666677789889:::::::;;;;;;;;;:::::9:;::::;;<<;;===<;:9:;=>==<;:8:=>>===>???>??ABBCBCCBBBBB@<:9:::999:::;<:=EB63798664/,*'&*-.--.--///32*?M3+466226;@FHEDA=:768:879FI72555666898;EIA:979CJGB@BB@>:534766667;;<ABBBBDCCDDDFDBB@=:86776656665468<CHIGGGHKIA:;=>?ADC?>>?>;878988886431001111112223334<GPD3489<839?=<9D]iNUw~O632;>>==<<:877778<AL^tƽmQqm|x_IIRRlqGE^O`tW85358879=;744686323247789;;AG911145641,+4:77CG:/2FA.29;;:FPTL=69CJHGFSlL+179@?;;>=;>LE/-9kpDIKEB>>;4343799=?=?B>A\\Y<16]U.186555525=<8:<:3362234751Ps|ifuzqeM;<?ADFIKPVTD=FE75::==<A?<AKPLH<4;c]>@AQXL6:U^feAC/-Q\\GD=4547B:001110/14788CEBKNF?=;;<@DFHLJC<59ADJF;889;<<519<;;;78EPNB1*++,9<0*/249;9AJG:21110012782/^^^][WVUUUUVY^_]ZYVTRRSUTQSW[^__^^acdeffgijjihgedba`_``__]][[ZYXXWUTUUVWXYZZZ[[[[[[[[[\\]^^^^]XVTSSRQSTTTUUTTTTSSSSTTTSSSTV[\\\\ZWUWZ`cco|ztphetz_LPTTTUUVY[\\]`dgjjjhfjlklmlid`]XROLLLKJKPW\\^ZURRWYXWRQX_^][W[\\YVW\\bsua``j|mggdmkfaclqstpluseq}zl`][Z[^_^_``^]\\\\_``b`_```aivvxz{}~uhdbaeni^]chgeecb`]fwulv|uw{xxqgqysaRSTTWZ[\\[YWl_X|wymrpidJJN\\WMNNPPKV~j[QLqnZfb`^][Z[ZZZYXXWVVVXYSbصl_`VXXcZJNU`ccb`dkcOR[[[XVTOHquo|nMJOOMLJIGEEFHICHb{nYLA;;?AKLGNLTlmNDDDDDOPC@BBC@:=IKKRUOVpeEDIFFGGEEIJK_kktrjcXQLKIGFGHGGFEHIIHHHGGGGGGFDEGIBUeQQ[VQQRRPMIGOTOKIGGFCIQRQMJHEGPJDIKQYSKORSRQQOKJLO[jrj\\SNNKJKJHIGJLKMPRSTTTVZ[YUPKGJMR_iklpxwxgM]~wqnzibjfkzqdfXB@DIIJJJJKKIKLKJIJIIIGFKZZJCHJJJIIHHIGHGEEFEFEEEEEEEEEFFFFEEDDDEEEFCAnsuv|pYZiomicVJIHK[]E>GNRKDBBBBDFFFEDDDEDDDEGJNQKECCDEFHMLKNSWRRLMLKLMHFKNOONNMMMLKKMMNPRVYUQPQSTTVXXWOJUNIDDCCCDDEHIIK@EBCBVb`_dcn|nOBEIKJHFFGGFFGGFFFFFFDCCDCACCBBBB@>>??ABBACDDDDDCCBA@<;?@?=:89::;>@?<<==<=>>=>=<:9758;>>@E@;:77;9;FLKD;5458::758:;?CE?;=ABCDEEEDCB@=<<<;<;;;98::;==<::>>><<?CEA@??A@@@@@AABDDBA@@?@AAAFKNNPQKA?BEIJJIGGDA@?@BEHLKB:878777644237BKSZQ;7;9776678:;9=CF>8678986666555557876553333445555789;===<;<<<==:<@B@>=;;::9996545:=:656679:::;:9:99999::;;<<<;;;;:::::9:;::::::;;;<<<<;;;=<;;<;<;:9:;>AAA@ABEEDCBCBAABBBBBBBBB@;99:::;:::::;<?EB605;=;8883.+)***,../011/-.2.0FB.2554221159;CB<95469:815B?435555788879>?=:77?GHEBDC@=<;:9:99777986?CBBAACCBBDEEDA>:87776677777657;@FHGHHIMOI<7<@@@ACB=:=>:876578787422200011111000/1318AJ>22545528=63>>6HLGfj`]PEB@@?==<98889:;;=>@Wp{{jtgo~o_XutOZ]LF?9Dn|FHeN4889=?845555689;?A<547656766<91/288634759;9=JB28BLC25AJK@C_ysS==?<COTUE61458A@<:87:;GL96-4eoC5:<=>=;3157:?=BFFIIBL^L:DII93<:746<;47DF?=5527:326432S|xf`hlimqcJ@CDCEJNSVXTFAEEFBFGB>=>AKUYXWRB;k5;@9BKL@G`hddN=A96CRE;>>8.33-38/-5658<?BIPV\\VJC<===?@B@AF@=;5;JPSTK?;=;96/0=@<;=4+0=MP8%2;,.=9,,.-<KKGLN>2/2899=BFA50hhfa[WUUTTTUX^b`^\\YVSRRTTNJQW[]\\\\]`cdegghijjjhfeecb``___^]\\ZZZZYYXWVUUUVWXY[[[[[[[[[[\\]]^^__^ZVTSSSRSTTTTTTTSSSSSRSTSSSSSUY^^_[Z[^bcagqtoiimt|uaTPQTURQSVYZ`jmgfjjjllmmmmljfb]UOLLMKJJLOQTRPPOQTWZ\\^_accjxq`[YVW[fihohhnhbad][bcgw{idlobP[x|z~vkb^]\\ZZ_baabca]^___`ba```b^Q]{}tuvrvxz{{|vuqc]acfha]]^hw{tolhinmadw}wy|yvlhv{q]QQTSVZZZZWVd}{{rPJKQXkeNNOPQL\\|hZUVXtkQ[_dc`\\ZZZZZZYXXXWVVZYSpăeaXVV[|fGT]d_ZZS\\ntf^^YXW[YPUmskb[SLPRQMLKJJHFFFHIIXjtyyo_VMA@BGJILJH_uOCCCEHQPC?BBDJLIDDIMJEKYTHFHGGHGFDCFDO\\cu{pe\\OJIGFFGGFFFFHHHIIHHGGFGFFDEJFG`UDKOSRQQPOMJKKMKHGGGHEDIPSQLJIMMCDIJMLORQQTSOMLGKT`pyq]OLJJKLLLLNNSVWYYXXYYYZZZZXXTKGP]hpmikrx{eQtvxpbb|iczgur_`UAFBDGIIJIIHHIJKKJMLIJJEFLRNHHFHIJIIIHHGGFEDEEDEFEDDDDEEFEEEEDDDDEEEECCn|snt~yjdillg`VKIIMUSD@DKRNECBBBCDFFEEEDDDCCEFHKMOKE@CFFGNPNNRZSUSOPMNOLLLNNNMMNMMLKLMMNOQV[XSQQSSRRTVWYJQRJCCBCBCDHLLLOGLB?@INUdljplVHHGJIGGEEEEDEEEEEEEEFDCCCCEDBBA@@?=<>@@BCBCDDDDDB@?AC@?@@><:9;;:=?=<;<==<<===??>=:888:;<=OTIE>:>@=?GO[_L72/357;?CGMTRE?ABCBDDDFDDCCA?<;<=;=<98:::<<<:;>==<=?BC@>>?@@???ABBBCCB@@@?@BACHLNNPQI@=@BGJIHFFD@??@BGJNNC;98888785434419HUZJ968977678;<;?CEB9569875555544446787654323455556678:<=;;9::;<;:;@A><:899;;<;64335:4356689;;<;:99988999::;;<<;;;::::99:;;:99:::;::<;<<;;<=;:<?@@>;::<@BDEFGGHHGFFEDCCCBCCCCCCA>;99:::;:::;:=CA:7534;?<::730.+,.)'.42221/-+/2,<H50233234456533687567421.6>75656677898459AA;68@EEEFDB?<;8:998676765=A@AAAAAACEEEFD>966866677777769AGJJHIILPK=8<BC@AAAA<7773353244441/0000/012100111/12.5@?912434335@\\_B<@QqkucCBBA?=;8678:<<<;DYrocu}qzozxyWNp~fH4+0;?<IV@;P@4>=;=>7235678;:8ALC856886531/61.5=<:99>><;;BG94?HH@967??652>JD8<7@TZ^N27=35454365479ER>35,2MF0/49>;743448:5<EFHMOUTE<AA@?><:53;?=AGEFH=5-25912>7(>|yi_addeheQADEDFKOTVY]KAFKIFGEA==DLRWURU`KD:(?>88GPIYe\\NMIAFF@CH@<?DFB<7/<E37??>>@CGMNOVUNC=>><=?>:AG:572=RUSZR?@J@4--4<IC:C;(&.;K:2IH)'>?-)++7JPOUTE7--CRNNUTE73dc`\\XVUTTTUWY\\`ddc`[VSSSROKOSVXVX\\`cefghijjjjhfeddca`_^]]\\ZZZ[[ZYYXXVUTUWWXZ[[[[[[[[[\\]]^^___]YUSSSSSTSSTTSSSSSSRRRRSSSTUTV[^^accedcb[Xaknoqqtxti^TNOSROQUV\\ef__ehjkmnoooonjgaYRNNNMKMNNMMMLMORTSU[__`ccgs|kVWYZZ^]azr_w|rd^`ZXbfenurj`\\[STn~{zz{~~yphb][ZZ_ffccdbaba_`aa`_bc`WRfxxy}wy|t{{sumo|so{udacec`^]]gvujggillb^o{vsx{|kUaxxkYQQQRVYYWWVVoZ@OXTaokXONQQMeg\\XYYZYTX]acc`]ZZZ[ZZZZZZZXX\\ZN~ǔm`ZXVS[tB_wudWWQS_lrob^^\\VYRXUV[]\\VRRRNLLJGGEEIMNQ[dfedbccXQKDBFGJNNIMtY@BDGNSPC@CDEIJFHOLC@DEFHIGGGGGFKUXVZ`bcswj^OFGEEEEFFFFGIIIIJIHGGFFEGBCMDUaDABBILKKJIIGFFFEEEEEGFACKSSLJJLHEHGHHHKONOTUOKJEJ\\ipoZIKMMKIIJOTY^dfghhfeeeed`bjnld\\\\j{vhjhcfpwj`iomlkf\\W{kohljMJDMFCDGGHHIIIHHGFGHECDFGILMMNOHDGJIJJIGGFFFEDEEDEFFEDDDEEFFFFEEEEDDDCDDIaxtdm~xtqnkjjf\\SJJKOQLC@BHSRGBBBABCEGFFFEDCCBDDEEEMURIEEDGEEKMKKIJKKKJIJJLLMNMMMNLLMMNMMNPQU[ZVSPPPPOQSSURTRNFDAABBCHMLKKIBB>?CBN`mmm_RMMJLHEDBCCDEDDEDDDDEECBBBCCCC@?>==<;<>@?ACABCCCCA@@BCCA@?>=;:<<;?@?=;=>>==<==>?>>;:;758::@U[UXTIDE=9:BTdeH9;CJLLMNPPD=<BFFDBCDFEDEGGB>;;@<>;98999;;;:;===<=>A@>=>>@?>?@AAAACC@@@@?@CCFKMLLOOE?=<>AFGFEEDCBBEEHIIFB;867776665443115>Q`O62:9999:;<;==<975677755554444346877543334555566789::988788889=>?;9766789874335872356789:;<<:99888999::;;;:999989899:999:::::;9;;::;;<;<=@BCEE@<::<>@BCHJIHHGHHFEEEDDDCDDCB@<98::::99:;>CFB;89857;>=;:73/--,**1:832310/,/203:9311134566556558756632216855566777788857?DB:7:?BEGFC@@AA;576555556<?@AAAAAACFFFHHD>8686665666668=ELLIHHHIF;4@JIB???>=832002432331.--0///0012233454332.3962234444425ig<;Mw\\DDDBA=:75668:;<>CShwmghec|tymi|`DKK:,/009?><@A<BJOLFF>85228<@HO@//AJA95>I?30++114?>;;=><847=>99?AD?8>4-.-*'<g[A=?EFG928;32.+./13446CL?.01(3:2147;;9742251-2:9:CLKC;526><86617B?<GI51:=:8401.4JIHm|os|zjadeb]]fU>AGIHJQTVYYKDHGA=;<::GRY[YUU^gU[c,/68=EDCL^_KBKNIJGAA=988@MSOQLKNHLHDBACFLOONLHDA?B@88<92BA3-+3IYOHSRILSM:/14?H@:LK3))*->ZU>1.9C9+&*.3Gdsq]I@BQ]XPYcU:0ZYVUVVVWVVX[[[^bfgc`ZVTRQRQOOPPQW]_adfgikkkkjigeddcb`^^\\\\\\[ZZ\\\\\\\\ZYXWUTTVWXYZZZ[[[[[\\]]]^___aa\\VTSSTTTRRSTSSSSSSSSRSSSTTVVVX\\`fgeedcb[RR_jkfgpx}vj^VTQPRTUWZ\\afhlnnopqrtsoke]WTRPMMNOPPPNMMOTSSW[^`abcb]ko^V[ilg^V[pynxo]^YN]z|rk``e`XVfz{wxyyyz{wne\\Z[X]imebeeefdbccbbafi[Piyy|xwtr~z||sek}|wraaca`_^]`b_[[[^``ao}zpinxy\\H]oj_TQPOPUYXUWU^o|GI[\\ZY\\hcQNSNOlr^WWWXXXXZ\\]`_^\\YY[[[[[\\[Z[\\[^ZLڽq][]ZUVhN^}sSMLHNXbi_`efZWXTX]]ZYVSQQMHMPIDBFPXY]ba_`\\[hgUSSNKIGNSWPE\\~mG?DGMUPDACEEGGFHNPJGGEDFHGGEFH>Lt}jm|}kooYIEFDDDDFFEGIJIIIHHGGGFFEG@HQLcZBNOIIJIJKIHIGGGFEEEEEEEDITTLLLHCDGGIIJKIHJRWOIHEQdii\\IEKLHGIJMU\\`fjjkmppnnqsru{}hanoZSYWQQUVQLLLNRPNNAb|p|SPyhMLKIFDEGEFFHJKFEIMLHKSSPKMONLLHAAGJIJJIGFEDDDDDDEFGFEEDDDEFFFGFFFFDDDBCFSY]`[g|vkggimqv{iMDHMPNGB?>DQRGAABAAADGHHGFDCBACDEEHRcjbTHBEGFHHHGEECEDEGGHKKMLMMMMNNOOOONNPQTWVTRNNNNMONONJPQNDCABCCDGJJHEBABCBCDAIYab^VORPOHEDBBCEEEEEDDDDDEDCCCCBBBA><=<<;<>?@ACCCCBCCABCCDDB@?=<::<;<???=<<=>>=====>>>=;<?;78:8@U[[^[RG=568;H`p[EGRUSSSQA7878BIEABBCDDFHJGA:;B>@;:99979:;;;<<<<=>@=<<=>??=?AAAA@BB??@@?ADFLPNKIJC:==8;<>ACCCEFGIJGIHECA<8576666664557<=;;MfP68:<;;<<=<9777545666455444432247666433355566666777778766500;><<8532234422225;<54456789:;<=;99877999::;;:98888787889:;::;<;<=;;98:<=>@BEGGGEDA<;;<<<<?CGHHHGGGFFFFGFEDEFB@>:88;;:::98;FKC99;:6579;<;951/--1=<1..02223311244212201567775444466555643444445556665578778>E@99;?DHGDB=6f^;54444345;>?@@AAAACEFFHHFA:77766765788:AIKHEDEEB:5;FLH@<:;<840//03556764123310/01223557<=<<94432133344554)EQ2Flv^[F:<FGG@9;9534579:=@>9?LKDSeX;@b}{wlgnZCJdvkJ<<6200006<:<>?>QshD>JHBABEMMFGQWJ86CG>;OW@0-.0/2;?5./8A>602:6488<C:5><86625YylG>>2277::611-./..0234=JE9:>9-),/579=@B>433/.00./38;83123667742:@=<=8/,5=DG?4214BYsqP:<CQ]`]_fg^VY_G.?W_]]YROMJEGKFA?=;=HSURROJKLNTelJ147:AF>5DZYJILE?:;AD?:636<DQ[a`YPK@=<=CKPSRMFA@ABFB76==8><86/ATRF@AIVWWYOA74;@>@IOK@4-5^_?@I;4AD:6<A>Ikz]PSRKMNHN[V?5VUVYZZZ[[\\]^^\\\\^dkjea^ZSOONLKHHLU[[]bfikmmlmkigfddcb`_^\\\\[[[\\]^__^[YWUSSTUVWXYYZZZZ[\\\\]^___acda[VTTUTTTTSSSTTTTTSTUUTSSSSTUVX]addccbbc_WYafghowxvz~|n[TROPRQQV^dfiosqqrrtvvrmg`\\[WRNMOQSSPMLMNOOQVZ[^_abdbbhf^[^db]YQb|yvs~cVVbnhmg_]ct}yxwvuutqj`[[\\[\\fokdfgghfcdedcelhZcsq}{tq~rfdl{zdab`````^][[ZZ[]]byvmfiodOIYfaZRNOPNNTSSZWeocWG[^Z[VV``QMRR[rzh[WUXZ[\\\\YXY[\\[YXY[[[[\\\\\\Z[]\\^YT׽m[^`]XWUlfW^}|LEMJMNQSLNVZedaUZ]]\\YUTTTOGN]dc][]__bca`\\\\cb[W[^]YMGKNSSHC`uU?DFKTPDABBDFGFCEOSPKGEGHHIIRUCFflZT\\f^imOCDDDEDDGEDGHHHIIGEFGFFFEC>SRZcLRTQOLLLMMMMNNMLIHFFFGHMTWTMNQKGCFGGHHIIHGFMWPGFGTgmcPGGIIIOY_cefffffinsxz|vlkx~pZMILPNJHHGFIIIGGGFE@RpzzZDndGJJNKFDFGGGFEFEHZjlhjiaVMJHHJJGGMOKJHGHGFEEDDDDDFFFFEEDEEEEDDDDDDDDEGJJKPRPPVanrnhcgjnw~pRMQQICB@=ALMDAABBBBCEHIGGFCBABCDDFQaimm_NEDEFFFFEDDEEEFFGIKLKMNNNNOQQQQQPNPRSPPPMLMMMMLLJJMKI@>?@ACDEFFFEDCCBCACEA@GTSMLOOMDBCBBCDEEEEDDCDDDEDDDDCBB@=;;;;<<>?@BDEDBBCCBCDDDBBB?<<;;<<<===<<<=??====>>>>===G]XF:72CYRTZUOIB<<=<Eer]GHQRVYT>7998>AFB@?ACCFHIGA9:@HB<;988998:<<<<<<=>>;:;<=>??@BBAAA@@?@BA?@FKMNMMGA;:<869;<>BBCCGHONGHGDCA>::6566887779=CEA;5>WVA<;<<<<<;75565345554555555331254444444444666565566665562;XO?887532244322227>;544555689::;:99998::;:999988877999999:=<:<=>>>;957=AAGHGHFEEEC@;99;;::<=@CEGGGEEFFFFFEDEC?<;99:<=:89:>CIE98;:88622685111/.04HVG3./002331.-0200236;;987654324455466446544445555544656515=?=99>CEFDB>:]r^;/2233459;<>=?AAABDFFFGGC=7676666558:>FJHDA?>><77<@?=;989:9887433579;;;=<9521000123789<>>??<86334433344530[t:6>O϶~C01;BCEB=86523568=A?84:5.HrgA?NWVX[gbF@IIB3.6DJYi`O;18>@>840/2599;:;d\\5=LNMLKHHD=66GWYODIDQcQ645673382+'*3?D=5686655>C>>??;989???;8;==<8?INQ[`G/464//-/006DQ[bYD43<>979BIJHG;2220////1678634333312=>8:967=CIKKJ>30/=Y^B/.14:@MWUXZTPSW@-IfgdaYPLIFIUWHBGJGGOTG79=<5//:L]M8:>><=ACIVSC:;;958DGFD;33BLLS`f]K@?@>?ELOPMIJLLKJHC<:<<:9DGCJNMFE=05IVVYYK;5549CDGK@>[meC<MQA;?<8;?CC=HfV;;>6.2BMOSXSPWVWZ\\]\\\\^_^^^\\[\\]emmgc`[TOMLKKLMRWX\\bgknnprpligfddca`_^][[\\\\\\_``aa]YWUSRQQSUUVWYYYY[]\\]^___bccdb[WVUTTTTSSTUUVUUVVVUTTUUUVWWUTW^cb``bcb`\\]cghfa\\XX[]^YSQNNOOPSUSXakqqqstuvwwqia\\YVRPNPSTSQOOONKMQTVXZ\\\\]]^`_^^[SSXXZ]X[wv^knYYŨ~o`^[Vexyvtrqonlg]XX_gcamngfhgccdbcggosbcqlvwyvekw}vebc`_bbaaa`_]^_badz~vpodPIJWbZQLKKPRMMRV`\\o[jKU[\\]\\[[[WRSSSato]XYWXZZ[\\ZYYYYYYYY[\\\\[[\\\\Z[]]^Y^˳nX^gf][U^yyh[j^INJLLKIGEGEP_d\\TY`]ZWVVTRNN_uxfddbcbbbheRNT^gg]MBCHIIH?KkbDCEITNDABBDFGD@DMNLKGFKLEGYgeQ?G]`RLNRi]GBCEEEIIEEDGHHHGGIGDFHHHE?EUZ^RKTQOMMMNNOPPRSSQMJIHEJSX[YLGVTFEFHIGIJHHHIEIVQFEFUijYHEFGGN^nttssrnnrysmrxs`OJNRRPPONMLJKKIJKJKKKM_q}[BZ|aCJIKQK=EYQEEDCTcbunbMABIPTOJLQSQLHEDGHHHGHGGDEGFEEEDDEEEFEC@ACGJKLOSSPMOOPRVY_deabgox}}hWOHCDC@?@HICABCCCCBDIKJIGFDCCCCCBCPY]dojVFBDEEFEEEEEEEFFHIIJOQQPONQSRRSSPNPQOOPONMMMMNMLKJIJGEEEDDEEFEEEDCCCBABEAES_YQONIG>ACBBCDEEEEDDCDDDEEEFEDBA@=;;;;;;=?BFFECBBBCBBCCCCCB><;;;<=<<====;=>><===<>>>=BJVaga[LE?IY[\\\\\\[VH?>>=?[l]IJPRRRE:6678:?A?@DIDEFGFB:<>NF=<:98998:;<:;<=<<<;:;<<=?CFECBBAA@>@B@AEKNLJLLC;=?=<<:;=>AKRAQEGIGGFDCA?;956778899:>DCC@>=;:MPC:==<<<;75455444344555544431033443322234557765554435666<G@63466544544524899645555457788989::::;;;9998788779;9:999:===>>>?>=;<>CFGHHFFDDDCA=:657779::;<?CEFGFEEEDEFFD@<:9:;;=<9:;>D@?=<=;:;;8214641/010115KZRH?80*++*+//1789=DF:4664444433444653455544444455445665446=B<8<@CCA@BBNdzaB74445666997:=?ABDDEGGHF?9775555557;AHIC@=<9777778788888:<=><8535679;<<:732211023368878:;>??>:6554344447*1jk=01StP>532?oG47<;:978@D@<8977Mh\\C?IQH>=E<-2;9521/.4:984007@AA>5220167;<CeqPBGIDAA7136DYUIL[^Y[RWWB4666740/*)*+/4<;698764:BACD=;:86784-''%1=;=JQPSP[kHA71-,,,,,0:TqnSA;@RT;028GMPQ@342/.//.3;BD:00/.--,3A?899449>EJMM?2/7FMD>@<88;FX]MCEIKJOIAWg]YWQMMMJPhkI8I[]RQVC.5;7221/5GN@77;BFLTNKOA24=>?MLADJC74EQOV^_\\WOJHGGHKKLKLX]NCB?:89;<:22BVc]OE?5,/6>=KTI814@F?==;6IggICKOOOPF1)--13('61\"&'%&&6WpvyWWWY[]^_``___]\\]Z[ennhca]VQNMOQQRTV\\cilnpuvrnlkgedcba_]]\\[[\\\\]````]ZWUTQPOPSSTVXYXXZ\\^^^^_`acddec^ZWUTSSSRSTVWVUWXXWWX[\\]]\\ZXVW\\^]^`b`_`][_bcaVLJKKMNPQOMNNMNPLHLUbknprrrruxtnfa_^YSPQTUTUUTTQNORTTTTSSTTUWWUUWYYXY]dbanxsc[gbX˭oVTXZanttsqonkjid^\\hqjcgjihjka_ea^bo~sbryjltyns}}}qfehgda```ab`^`addgq{ygXNOSY^YSR[_Zdtom^X[e^U~Yf]R\\_^]]ZW\\YRZgraOVZXXYYZ\\]\\ZYXXZ[Z[\\\\\\[\\]\\\\]]_Xg㱇oV]mpfe\\Yr~qesiQMLLJKLJIGFCGRYVZ\\XVUTSRPONN\\sidaecdtsb[WUV`aYRHXh`QOSOZcNDBGUNCCEFFHHABPQGIJEDJRFJb`[\\EIqwld]^p|`DEGGGGI?7CGDEGGFEGGMQKJKLNLS]jVFPONOOOONOOOQRQPPMGEDHTZVTOCIXOFEGJJHIJIGGGFKXUKHEZn`LEDEFISalqtx|shnsjWKILPSTTSSRPNLLLKIKLLMMLMVfWBOhz`BHHELNDRde^XPHZqn{|e_TCJYbjcNLMNLMJECDGHIJKMNMHIIIGFEDDEGHIHEBBGNPRRTVUQNOQRROOU[[\\dkptvrqrl_PGCEGB?@EGB@ACCDEBDIKLKGDDCBBBBDFINQWdmk^OFFFFEEDEEFFFFGGGJQVTRRPNPPQQRPPOOOPRRRQPNOPOMKNOLPVUSPKFDEDDDCCBCBBCCCTnqd[WTNHFEDBBCDEEDEDCCCDEFEEFFED@><;;;;;;<?DFHDDDDBAAABBBCCB?:9;;;;;;:<=>???==??><<=>>GV`_^][]_P>ENRT\\`]TPID?=@Sh^NOQOPJC<@C869<?@FRNEEFFD?>@GC><<;9888::::;<=<;;:;<<<<=DJJFDDCAA@@?>DJMMKIHEA<>>BNJ?;??CGXE]VBCEGECBA?<977777998:<<>>>>?<:<AB?@>===;8666544323345534444223333211023334777766655665665312376544555535;:43455554577777889979;999987777669;;::::;==?>>>>=>>ACEFGFFECCCDC=6565556889859>CFGFDDEEFGHF?9:::;;=:7<BB;9<>><99;;9743553101121,1ETVSND<::?GNZYOHFFD>512444444444455444445654434443354433203999;=ACBAACPWrx\\D85556457637:=ABBBCFGGE>8764455559>DGE@<;;97677779:::99;<>?><9465111125434532245566665579:<?=9776654431/.3;HK7Xc87/%\u0018<o49;568;Ok@/4@FHHFC<EDC?:=ACC;5;LRH=61*.7:7643345526;?==CB?=323018;=@FLF?9@X\\J8,)+,AvZYaMJa^SPD931463100121-.4832332/5AA7385145538JE546:;?IG>A3DQ5.-,.,-278MhV;BEDMG1,--;SZO<542.-./05?FE9/+*+++*8EA<:5/,*,3BNM@9>DA<DMF:2/B]^ZQC>DHCESW\\c]ZVOKIHGGQf^HRghZ`rY<@?77;9767;;48CGGED>BSI32B@E[Q;?IE<7;BKX]YVZ]QEDEEDDEFHX`F22056257;93CYfh]B01673.4BRQC?IVM99@ABLQEBKLMMUZJ50<EC:-++(&*+*,%*[VVX]_^_`bcaa`]\\^\\Y[ajnjc_]WRNLOQQRU[aeghjhgornlifedcb`^\\[[[\\[Z[[[ZZXWVSRPNMOSSTVXYVTW[]^^_aceeefge`ZVTSSQQRSVWVUUWWWWWYZZZYXXVUSRSX^aa^]]\\]abcaXPLMONOQQONNMONLMNR\\fiilrsqpqrqonng\\TPQSSTUUUTSQQSTSQPPSVUTUUUVWWYYY`illlgfhcad\\axVWimlnrusuwrhgjklmqqkgfhjjknh_aa^Zlvk~~klwzs}xuneglqsqf]]abaabbcehfivs`OR]jjZ^oc]kvhviZ\\TJSúȕ[nsVV_^^^]^ak]Tek_PLTYYYYZ[\\^^\\ZYXZ\\\\\\\\\\\\[[]^]\\^_UkUjfX`psnvfR_yya\\[XSOMLLKKKJJJIDELYYTXSPQOOONOJJljbafclqVXjdZW`gleZmyh[UJFWXMAJWJEFFGEKK?DXYKIIHRKQLVmOF[WRdf_\\WUWTHKRLLON>Wc<BDCEEEG@NfWHILUTVniLIOSSRRSRNMOMONLKIGC?J^aUKNPMMMIKGFLKJJIIGFGGNYZTMOglTEDEFKT]glorxnipl_UKFJNNOQRSSSRPNNNMKJLLKLNMKOYvVCL]p_BHIGIIZ]]hHL\\ry[RRKZmtqmYHKLPOKHFGGHJLNQQQRPNNMMKHFFGIJKIEABEILOPQRQMKLOPQQQRRRXbimoojjmf]TRJ?@C??CDBABBCDECDGIKLICBCBBBBCDFIGFM[ko\\KFFFEEEEFFFFFGGHHOXWTURLMOOOPOOOOOPRSRSRPQPONMPQLNSRQOMDDDDDCCDDCDDDEBJag\\SQPLHFEDBBDDDDDDDDDDEGHHHHGFD?<<<;;;:;<>BEEFEFFB>>?AABBBD@=;9::99999;>?A@?>>??>===?GU`^][X]eX>5;@BHPQRQRNECA=L_XOSQLIKMVQ=8::=?CSYKCDFEC??A?<<=;98889:::;<=<;;:;<<<;;BIJGDDDCBA@?AFIIIIHEA?<=<?GE?ABADBFCSkV<BFECCA?<:77676888999;;;;:::<===>>==<<:87754444333444344423334432122321467777766664444322235533345555787213454444677888877779878889777789;<;=>>=>>>>>@@=::>ABDDDEECABDHG;5777789:;977<@BCDDFFEEFHGC<8:;:;:;>@@<68:;;9899::953232211124523ESSQUWUX[`_TJBBC@9433344444345335654444566544554355443137<DH=79=CDA>??BIKA:743455456569;?BBACEFFD>755444545:AECA=99:::76799;;;:89;<?@><::960++-36887767786677666567669:8988;9765345./IdDKuB#/16=`}238646;><86229>CHKZaGJPI?>;8327BME:869::::987:EJA=>:7<>:BC>=865459?<64,*-&:m|`:.,/0+ZkTdJ>]_HU[JC=6323447;;//441/342-3A@3=TS<15758II<><8879734/.xk:2352.4CI?@QI>NZQ?102.2;LZV>222..038:==962/131/+=G<699973.0>MIADJF=<BDD>/6]hQPVG=BC>?S^\\abZPJGEBA5:o~tsljmFC@9:<:;<;9:@GJC9587AUN4/;;=LJ>AFC=947ERWWRPUO?=BCCDFJNWXD76/7GE37PFDFCU\\K12ITH:=DEOVTPLC824=EEEJHDCA@ELKB<>DGA2/0++2<@A>22bVVY]_^\\XZadc`^\\]]YWW\\gle]]^YUQNPRTW[\\]`a]SThrjhgeedccb_][ZZZZXWWVVUUUUTQPONNPSSSV[WPQVY[\\^`cefffhif`[WTSQPQRTTTTTTTSSTSSSSSTUSQQQSY]`_^^\\[]_`bd_VPOPPQSRQOOPPOOOOT\\b^[iuuusnpslb\\XUYXONOOOPRSSRRTTTTTTVWVVWVVWWWWXY\\`fhfhfcd``gWm}af{zuuuutx|sghjmqrommlkmmlknmfda`[^t}|}pr|y|quwu|hdimo|}iababccd`_ddgqbJQkxyrbjxhbfjltbUXTRpɺȵhffT[_^^]^akveWb`PKMSYZZ[Z\\__^]\\YXZ\\]]]\\\\ZY\\^][^`UxP^\\[brtmi[UWjsOEPVUPNMMLKLKLIGHHGKORWSPPNNNMMLKQrtbbeckeMViefxlVVbdaVMKABTVAKZJGIFEFJI?@HJGIENeNGMTobOQYWSQONMKBHZokPII[̶_6BBCDEFFDLaYGJJNMaxVDPNRUUVUROMLJKKIHEACQegVHHKTZNEOWQMNMKKHGGGHHLQPNMPXREDFDGTisw{~xoej|YFFHKMKKMOPQRRQOOOONLLMMLLLLKJRosMGILgXBIIKLJ]Te{jFO]qt_XTLXhg`[SNJLOPLJJLMKKLORTTTUUUSSRQONNLJJIF?;?BBEIKMOPMLLLNPQPPPQSUZ`inke]YST`eYJ@????@AABBCDBDEEGLNJFDDCBBBCFLHACJVedSGFFDEEFFFFFGGEHHHRXYXSKMOOPONNNOOPQPNOOOPONNMLNPQRQNIE?DDDCDCDEEDEDDCCHJIGFGGEEEEDDDEDDDDDDDCCHKKJJHFB>====<;;;;=@CEFEFFCBA?@>>@ACAA><;;:99989:<???????>>>?AMX``b_\\^bT=58:<<<@B>EPQDDC;IVSUTQMT[UGDB?<:==IXOBBFEDA=<:9;;988889:::;<<;;;::;;<==@EGEDBBBA?@BGHGFDDED@?>>=958<=@GHLG@>QP6:@ABCC?<;76676677677998888::;;;<<;<<<;9875444444434433333234454322220024455566532333332322332223654895322234445558888988877987788988899889:;@A?A@??>>?<69?BCCDDEC@KOIIGA>=;99;;;;9::9<>=>AFE@@DFFIB9:;99=CE@72689:9999;;:86232///0246776@NMGQZY^d_L59CBB@>=<:524553444335544444666665444579:<8=\\uoC/8=ADB<76;8-.24655454542688:?CBBDEED>864433445<CB?=;89::976888::8879:;=><<>@>:93/7;8787778:9765544455796546:=;;<<=;964;:3V^MfXWyndWDN\\K988DF>;;6232397jsGg\\F8/69<@FG>604DOOJCC=>?ELLKN@3686@DGLA98<:79<;4,,-,6Pi^;0/-.,Jy=EIL[U7@UYQF432//15:=9794269:65:@<7FXVD869;;<@>53461+02/./C;58:75@WVA7AKJLXK62650334GWD111.027=942148=BB?9/>G6,3;CGA::?B@?EHB==;>A;6Pj[JMQE;<>=>N\\[[XQHCGHG>5ja@DE@>=;;=@DJRSLIDDKGCPP;2688<BCDDB>966CQSRTTOHDGLMLIGJX]PB=;65MeRGVGA?:DI>9K_aQEHJIJMQM@46CFCDCACD>;;;=>:9872)&#&+2<CMX_YKKdzp_[\\VXZXVXXSQWbea^\\[ZYXWUW^ea[_b^XRPRTVVWYZXWTR^gcdfedcddca][ZZZZYWVUTTSSSSRPPOOPRTUW\\[TPTWWXZ]`beefgghge`XSQRRRRSSSTUVVVUUSRRSVWWVWWWY[]^^^]\\]^^^a`\\YUSTTTTSRSVWVWSNQWZUUemhnyvsshVMQQWd^SUX\\XRTSRSTUTUUTTSSUVUSTVWVWWXYZ[XY\\\\\\XYbcVnrvynq~zxwwwxwogfnqmkjlpooqpmlnnmjc^[Xj~zx}z}z|ncwwpuxvp_dkmmurf`bedeggaafaT\\q{|zvrrplkikmhrqZYVRj|]}XY\\]___^gpsm]ZXRMMV^\\[[\\]ba__\\ZY[]]]]\\ZXX\\`_]^__wWf^]`gf^[_hedfXWWWVRQONMMNMNMKIHEEKTUTRPNNLKLLKGL~igfegXHSa^g~zaRPRMFEJNG=LYCIYLKLHGGFD@<>?@BBCKGAKMI`p[QOLKGFGH@KpqTGJǽr=EGCEFFGHJJUVHIJIFomBKOQTVWWUPNJNNHCAEKQYfeTEDKPTQED\\plZNMLKJHHHHJJJGEGGB>?EGDI_z~uihp`KNPMKIIKMOQQQQPNNNNOOONMMMKJIJJNSHHIFZQJLHDDHJDQN_]PKNYYRROQZXPMJGFJNPJJVXQOPNNQTVUUTUUTTTSTWYWUQKGA?ADECEHJLNNMMMNOOOOPPQRRRXejdRLQXhypN:??==?@@AABBCDCCGLMLHECBABCCLRNIGHR`\\PHFFFEFFFFFGFFFGDGQ[\\RKMNNPONOONNOONNMMNNONNLLNRUWSOHDBFEEEFEDEEDDCCBBA@BDDDDFGEDDDDCDEDDCCA@FLNMLLGA>>=???><<;;=?AEEEEEDFGDB=>@@BBCC?<<::;:977:?=?=>?>?@@HOaea\\`deedP;6:;=<9;<<=>DOEGEBIQVXXPVcSAFGC?<;8?KK??DEDC=:79@@:997999:::;;;;:9:;;<>>>@BBB@?@@@CGIGEA?@CC@?@><;85:5<SYUOLA=379:=BDC=<=856666675667767779::::;;;<<<;9866444444344444333244554432210112244454321222221111222332555==4256788888889:::;:::::;:99:8888887434569<?AA@A@>?>>AEECCCEEEDHUcZJE?>><==<<<;:96667::>BBCEFFJF>:::=AC@;6567988989;;975321/.-14457738JQJOVY]_R=<IH@@@BDA:32354344333333444446666652149<<;6?`yc03BEDC=54::;;:86655544334677<BAACDEC;896553336=A=988788875468888666789:;<<>>=>=:9==8688876532210111246741587687540/0388:-4`[Ojo;Mm~lF:9=JJBA?830/25/<jM;76<EDFF@DXSGLTURKDC?@OZSI=9308?MWN;68<:79DKC765435DJ<6815Vooh63EMD?61=LB8<C?51357::8734<=::;;;8530*.999?=>HB0/24417EKA56eh67976?S^M:6:GQJ<16;8320004C@30..038:4/.04<EHJMF6=G>546@IE<;=;;>BBA<65;=<FVUNNHGJA;A@;JZUMIGDEHMNAX̻V3=DC@?===?EPYXNIIJLKBCC958;:9<BDB@=;86=KROQUNFPZYZWNFHVZI@<:?BFVVOOKA?=>IUXVVSMJJHIHEFFGKUgslZJ?:>B?>=61/.0-,176,5DKNYflhWLQK:123UX\\XQOQSSRW__]\\YXXXXWSS[a^\\ac^WRRRQQUYWUX[YXZ\\_cdccdfed`][ZZZYXWVUSRQQQQQPQRRTVWY[^ZVVXXWX[\\]^__^]\\]^\\WSTTTTSSSSTWYYYYXWWWWXWTQPSXY[\\]]][YZ\\]]]^^^[XXXYXWWY\\_`b_UOORSUYYV_ouofigYVTO]pmow|s[QTTUUUUUUUTSSUUTSRSUUUVTTUWTRRT[a]\\bZ]}zrnqw|~xsuy|{wogfnjdhlqporpmmlmomie`^l{}~zs{toq|m_ehowvvuadfifite`dfflpjdaT^x}{{zyxuqopskjpx|dUVY^hY\\Z\\]^_dyymtkYZXQNVac`]\\^ga_`^[[]_^]][YXX\\_`aa^bg[gb__^^aipuyphppd\\USUQNLKJJDCGIHGFKRSSRPNLKKKJLMESrihb\\PJB>ABOgvlUYunJ=DIMG@XMH[IHSOHDDB?>??????@B=BL8AprZMHGFFGGADdpNKZŀ>?IHDDFFGGDFTUJJJ?RsXHRQUVVUSPJLA7=>@KQ^aaYOJIKMSOKRT]mteSKKLKIHHKKJJIGEEDCBEGCKf~{mcfr~dORTPLJJJKMOPQQQPNNOOPPOONNLJIIIIHHGIHGLZ[OMLJFGJKTk\\:;EFDIRRKMPPOLJIIIJJHNZ_ZRQRPOQSUTSQRRQQRQRU[`a\\SOMJHFEFEGIIKLMMLMMMLMOOPPOMOZgcTU_ejr{|gH=@>>>>>????ABBACGKMLGECBBBBN[]YTPMOVTJFFFFEFFFFFFFEFFCHQYRKMMNPONOONNMMLNNNOOQPRNNOORSKIEDEFEEFFEEDEDDDCCBDFEEDDDFGEDDCCCEDDDDEEIPQNMLLE<<=>?@A@>===<=ACDDDDCFHHDC@=@ACEEB?<;::85479=@>====>@>FcypgaY[cieO;79;<<<;:;:>ELTOMJFFMTZVPV\\FFFDCB=7:?@<;ACDC>56AHF<99789:::::;:::9:;;<>>>>?@@??AADJKIEA>>ABA@??><:75989GQdjQB;67878=EC;=@85876555555665556889:;;::;<<97545533443333455443234455532221111222233222221222212223323427?;10479:999:;;:;;::9;<<;<<:9:97666653321245:<=>AAAABDDEECCCCDDFG>C\\ndOD?>><;:9:864456;:9CHHGFHHFB::@EC>=;;98787788999862000/-/35457855CRRTYZWLCFIHD@?BC@701223245444345455444455667537<<<987-:gzK/:CDC<6578:<;98876434223466:>ABCDEA98=?;85447:;75776777643787764468::99;;;<<<=>><:8777863/..0322223332329O\\H,379B=,)0,3;->WRwϐmUO>9BLKFB=940/022+F{n|IFMGORIFG@Kx]U]NCD@BSaWF@::KN?QX;06866:<AB?87::731765BHE_kc\\?0;E<9>86<:8DHJGBBA;530-/25636:86653/)+6;7::<DA747999OvtJ7<;4797:L^S=775APJ0->?744333,1840.00365301237@DGLG;?LMG>;@FB95<BA??=<8115:AECGNMGFKD>A?8FULAAAAEIIDZŽi94:9:=>@?>AIPQMC=:88764369;;;;=?>;:@?42@OQJEBCT\\Y[\\PFIPPHC><@CDCCCDEA=<BOXTICDEDEGJKHFRfjkum[RJELIA<82,())(1RmUCJPXbjh_L<@=2233RTZ][SNQTTQUXZYWUTUVVVSSY]ZZ`b]XSPPOSWWVUWYVTX\\_`bccdeeb_\\ZXYYWVUTTSQQQQQRSVXXYZ[]_`][ZZYZ\\\\ZZ[YXWVTSSUVWUUVUSQRTWWWY[\\\\\\\\[ZXVVVUWVTW[\\\\[[\\]\\[[[Z[[YYZYXWXX[]`cb_XPPRQPPQRX^^V\\mg[a^^pz{~mSUVUUUUUUTSTSTUTTSRSTUTQQV\\]YSUbljjhh|qlt{|ypjozunhdgeeinuvwzvqonprmiljq{qwvmkow}ccgfmvtwzebcm~vhddfhmoi[\\my|yusuv|zrqspov|yz}s_S\\qq\\a]\\]]^[ix}t_WVSQR`lgaadhcaa`^]^aa`^[YYXZ\\adc^d^^ecab`fqsruxtjgd`[VSQRRQQZ]WPKIHHFKNPRPONMLKJKMPPLbsdjdRDKJBG?42AGEYs~bF@?BJDNJL[D?QQEDFB?>?@BCA>?A=>GE8@W[NGIHHIIFBUxv\\JW[<GFGEEFGFGFAP\\PLH@ceHQUWVSPMIFDF:Q^lweXUPNOOJPPJRX\\ms_[ff\\NJLJJHIJJKJGFDCEFEEGCB]{yzrb^apkWUTRPQQMIKLLMMNNMMNPPPOPPPOMKIIIIHGFHHIIHJLLLKQTVY\\U@==FMPRPQQQOKJKLLLGJUZSNQQQOOPQRQQPPQPPPPOMQZ^]\\[WRIDFIIHHIIJKLLKIJIIMNNNONMS``XUbkmmmnlZE@@@???>>>?@@AAACGLNLHEDBABN^dcb`ZRPSMHEFFFFFFFFFEDFFEDHPPMMLLNNMONNMLKLLMNOOOQPPNOOOMEC@CEFEFFFEEEDDDDCCBCEEDDCDFFEDDDEEEDCEINOSTQNMMLA<=>?@BCB@?==;;@EEEFFFEEEEFCA@@AACDA=:;@AB?;::;;<=>><?>Gln\\\\kdY`fbJ89:9:;:::::;>;JTNKIIHJPSPOWEBACEG>8;A;:9?CDB?<?IMH@97779:9::;;::::9:<=@@??????@BDHKKGB>=?A@@@><=;88679724>oqP?4984459?A@;33:75555444554434689999:::886422332222212443344223445553333212222223221332122222222333446=A<779=?AA?=;;;;;:8789:;;<<:999744434444335678::<<;;;=BDECDBBB=CSOCB^|wgZK?>A@@AA?>>ADF@79<>AFGGGD??@C?>?=<;978887887773..//.0565568878=ISXYSG@AGIECCCD@4-.122224444445555555445667877<?=998532V~N6?DA:545547999:863222333467;@BBCEA77AF?85556776578865664478865558:;;98989:::<>>>=<955665544566667532286:IjoF3/DukZL9,/..@@^ЯnY;CHNHA=96100044.37;=3/ZsYHEBBIc}coXE>=>GUZWM@K]K9HG12>=:89985336>@?7*/3/8OV^]VOHH>?DFJG<5346EWXEDC@;941220-/157776676589512227<;:<>B[g<6556:<ERSA5551:HI@=DB9663-,.5::9412//25785239?AEB;CMLFCBBA=54=C?<:521102673:SaSGDA?<994DUJACB?@FKLwA65259;=???BDEFA95/-012247:99;>><88DE66HSRG<9@MTUWTJABKMJG@==;>A@@@DHB<FTSJCBB@>AGLPSWhzvprwrhhnhNHOI><:5/.211RlWGMPUZ[TI?89;8655RRTZ`_UPRTSRSUWUTSRSUUTRTWXVY_baYRQQQTVUSSUUUWYZ[]_``acda]ZXWVVTTTTSRRRSTVXY[]]^^^_bb^[[[\\\\[\\]]^___^\\YWVVUTUUTRSUVTVXZ\\\\[\\ZWVXZYVUTTX\\^]]]^[XWWUTUX[[VSUVUTUWZ[]cbZTQQQQQPNOQQQ_jddotnfdfgrjPTUUVUUUUUTSRTTTUTRSTRPPQX\\USZ`dlqmqxuyxtpjcgtxihkefllffqz|~xtnlopot{|stuonmo{pfsvtulbchjovvudhqvy~n`bcgnikpntz{qlsmntustor~~}iR[be`d`___^[d}z}{eWVSRS^nifjlihdba_]_bba`\\YZYX[bed^p^e_acedemrpqurniYOLSPJS[biv~u]NLJIMQSTRPNMLJJKLMORP_slrlO>DNEDFB<47@EIO_`TH??CDHCQ\\D<FHFHF@???@BBA>??=AGD:AQQIFIJJIHHDLlzeMӎJJFDDEFFFGFIHTgbWOUiWHQRUPIFECBA9OѵYULGJLLNWRNVZfqtpiciqcNHJHHIIJJHGECDEFDDEC?Phmwvf^apk\\][WTTWWQKJJJJJKKJKMNOPPQQPOMKIJJJJIGHHJJKMNLMNMOTF:X~^DJNLQUVVRLJLNQNGHUYNHMOOONNNNOONNPPOOONMKLORX]\\XRIHIIJJIIIIJLLIFGGGKLKLNNKP\\dYHKUblnjf^NB@@??????AAAAAAACINOJGFDABKX_`cbdd_WOJGGFFEEEFFEEEDFFDEIMNNNMMMNNMLKKKLMMNNNMMLNNNNMKGEACDDFFFFEEEDCCDDCCCDDDCDEHHFDEFFGDDCGNUSTSQNLJE>=?@@ACDDA><;;:>FFEFFFDDDDEED?>>>??><:::=CFNPPJ;99>A?@EKRV^ddb[_aVB69;::998:98985<LMKIIIIJMPW\\RBACEE@:@ND87?CEDBCEKNJC;88899::::;::::::<=?@????>=@CGHGGD?=>?=?B><::98877988807hiF38:8763;EB9.28655444433333113689989:95333222211222014433332112344433211124785311122111222333333325;@DEDCCEGKNNKIC>>>:76557777799987543210124535677889740049;==@BDF>;IMNKLhxwsrbY\\WNPOONJIJHC;456:=?DGFE=7:<??==;97886677531-,-,,.389778:::;;BQ[UF@ACEGFDDDB<2,-022322224455555455446667778;=;87675@xd88A=6333335789:9830123344469?BDDC?78DF<5555666678997666457886678:<=;98878888:;=??><8:;<;:<<98776753342462Q}f7/^|`PH<1)3`ŬoK78AJD>;7504:5//3//...!QiJEHIB1/AUueOB<::AKVbjeU=6;;7=F?88977:;::CIHKB7>D8:LTMQSXrY9JWSG941.-A\\hM@937:865651303898785578860//--3:<?ACOr}I9<75:>HK=/.12//5AKHFF>98:;97<>>C:230+06<@?979;?FC7>=89??99955:;659:96664542AcrdO>8989:2D[OEFD<8@LVƶ¬l;::<<7579;=>?>>@?81022467:>;57@A<::@@?KYYPE;>FIPWPKJD@FLLJA=BGHGGGHJMNDCVc\\SONJEEFHKLIRclopmfahy|ZDLK?HND;>FFHTOBFH@@FG@=>:57;;87TSRSW]^VQSSRRSTTTTQRSTSQRTTTTY_b_WSSRQQQRSUVVVUUUWYZZZ\\`a_[YWVUTSSTTRRTTVXZ\\]]^```acdb_\\\\\\[Y[\\\\^^^__^[TPRSSTUTRTWVTUVVWXXVSQQSSSUXZ]\\YYXVVVTRRSSSSV\\^WSTTTSSSUWZadb[WWTSSQPRSSRR\\\\T^ngSSUNZYOWUVUUUUVTSRQSVXXWTSSSQQX^YQZiifibowt~upnlmv{q__foonqlcbluw{}|yjeopr}|xzuuxspllx}~qabmogdhfdejrxysyyimtqqv{``eekjnrqvyysmicfiqsnmq|tgVXe|}bccbbcca_ahtqsudVWUUXcqjfpxshdc`_```aba^[[ZYZcfffnلbrgecdecfmqj~yZHNV[elsz{iYTQOLNUUTTQNMLIJMKHGHIRgowuR?@LPGDFC<;9:C@<FRSF?ACGAU^C>AAIMF@?@@@AB@=>@>?FDDZ[FAHKLLJHHDDd|fcVIQBFEFFFFFFGRdxufd`SIGGFDBBBCA?7Vx^hcTNKLLPOOVRUn|yxyurvt]HGHIIIHGFFECCEEDBBDCIXcsyiadzsSLSWWWWVXYVRNLKKJJJJJKLMMORRPPOMKKKKKKIIIJKKKKKKJHJM<EMpwTGLQUWXRHDJPNDNmpWLKOONNMMNNNNNNOPNNMLMLKKKORQNKIKKKIJJJJIIKLIFGHIKKKLLLKMWcZLD?EUfnh_SC?@????@ACCCB@@?@EJKJKJGCHLOQZ^Y[cieZRJIGEEEEEEEEEEDEDFGKMNNNNNNMLLLKKMMMLLLLLLLMLLNMKIFDCDFFGGFEDDDDDDDDDDCDDEGHHHFFFFFEDDHNRRSSQMKG?>AABADEEEB?<;;;=FHFDDDDDDDDEE@=<==<<::988:=ABKW]aTGHHMPOO`t[SZ[aVD:99::9:9:986779<FLNKKJJJMLSZaO@@BAC<@SH87@DEDCCEIKID=99889::::;:::::9;=?>@A@?==?DHHFEB>=>>>AB=;9999877887784J`F346;:848>A<432434443312233235679989853212222222221222344333101222322111113674211122111222444332107ADFFGFGIKMNLLLJEDE>5221344456565443310..023356778776533332348@FLMLLNOOIPmsr~}f[OGGHIIHGGIIE;98634=CII;4:>??>><:88866652.,+++-38;<::88:<;::@R]M>@DDEGGF?77;<82235344223355443344356666668::987651A~jM=8:?9322333346898832333444578=CEEE?9<CA9467656886798666645776432369878:;;;;:99;@B?@>?CEC?:<<8:88776322141<nR;7K}{bH@A:2*AWVXPOX]R5+18@>:953216<61148:766/0`IKLLC80',N\\PPI=;:6:I\\cP>8523<IL>4:B@=KSKBFRQ^[JO\\M21:8Sffu<@UPC;830/,=blP7-.2223663--65746>906986430-7C98AIH?O`jbH9;76;<<91./+.-'$0FMF@;:CQXQB=<;A=542.28=DJG?8;@KD12006=;55888;<45;CHE?<<:<EYgg`UGD??AA49RSLG?:9@:V¼ƺ^6@CGE932346:<;8;=845328@CBD?21:;989:@PZVPL@6@GABD@IRLGDFIGGHNWXVSQOLILJ@EZc]SLJHFC???99H[hnjb^eszeD=APmlREFILTTHA<57AKKA>>735:>=;SRQQOU__XTSTUVTTTTSRRRQOORSSSUX\\_\\USSPOQQQTVWUTSRSTUUUUW[][YXWUTSSTTTRSTUWZ\\]^_aabdefgeb`_[WVVVVTTUTUUSOPRRSTRSUWWVUUTTTTRPPQSSUWWXZYWVRPPQPPQRSUVX[_`\\VTUSSSTTV\\ab`]XSSTQQTRQRRPOKKQSNPZ]broSSWUTTUTTTTSSUXXYZXVUTV]`ed\\`stjh^l~ruotwwymXZcntvnfiorsu{}|ptxnp|ytwvvztsplq~|tqkeirnjkjgfeir{ztz}szzmtqdffhjjmqtustqa^gijrsplp|wj^\\Uazdkea_`cdcdeeb_cgmcWZX]_mvhnvxwlebacdb```_^][[Z\\ccm|n{^tvogdffaqǠ}cfjlimszsXTYWUOQTTSTSRPNLKNMJIHGHZjvbAIHOODABIE:AX]M?@ONBBCE?X_BAB?IMFA@@??AA?=?A?=CITVC:CGGJLKGHEFXaHds?KIHGFFFFFGEKdp|kaTHCA@BCDDD@?@B;13SocUQOMKILJAA\\w{xwyvqtvbLHHJJIGEEEDBBDDDCBCEJTasoe]wuLDKMORWYWYZZWSMKJIJJJJIJKKMORRQPNLLLLLLKIIJJJJIIIIGILO[XXTJOORUURLGHONLb~iOMLNONMMMNNNOOONONMLLLLKKJIIIHHIJJJJJJJJJIIIIHGIKLLKLLLLLS`WPLEBCFTdcWHAA???@ABBCCA@?>>@EGHJJGA=MRKNUTRV`ii\\NJGEEEDEEEDEEDDDFGHKMNNNNNNMLLKKMMLLMLLMLLMMMNMJIFDCDFFGGFEDDDDCDDDDDCDEGIJJHFEEDDCCCFKOQQPOLI@AGGCCGJIHFA=<;;<>EHGFEDDCCCDCB>=<==;9::::==>;887ANdo]PKMPOXg^VY[VE8;>:::;;;;:98:<;=CKONKJJKMLHHJEB@@@C<API98@EEEDDDGJJF?:977999:;:::::99;=??@AA?>=?EHGEB?=<=>AA@<<;;:::89989882:PWC40598768<?@9.24444320013323567998861/1123333322211234423331/012232212100233223222212233244423316<ACDDEFHJJJKHHHIHHJF@>;74333565311231//0003435667655668764568;BEHKOQSSRMLhv]NA?EJHIIHGHJJKMIC<302:@FJD;;>>?>><;:9866650-+,-,1:??=::8899998@TS@=BDDFFE@:34=CDB>4222321334422333344466666898889633B]\\G.('4?>6223333225898853455444678<CEEEA;>A<657755786458866665556531111,$$-8?@?@@CGIIC@BAEIFC?<879<<:::73343427uwI8HE1JzyX?7<TpvcI?5'%)2;4)*,6@;135224544454569649?)dٛPOLE<311104::=A><><<@BB90/325DTVNC?GF@CPNB@LGFOLGGE9/5?ITdj96HHBA9-,-'*EkX212304864:A60/205D@25:87672.NtX:M^Q<<FF<:==718943664,+07@F@JL;,1H_faRJHII=77406=AFNPJ>8<D</27<;<<758:9>?99<ADD?;<99VpdTOQam_RE;4?PMKH;8<?5s̷]8DFGGA81133478544365..8CIGE=1/2369;?MYTJEECDEA=<<@QYUPG?;@KSZ_djkbWMFHJA6?SXOEAABBA===;?M_jh`^chmeF6MozlZOKJMNC:91+;QYQD<951244:?QPOOOPX]^ZVWXWVVUSTTRPOMLNRSTVXXYZVTSRRSRQSTUSRQQRSTTTUTWYXWVVTTTTTTUUTTUXZ^aabccdffgiigfda^YUTTSSSRRRTTSRTTSTUUVVVVTSTTSSSRRSUWXWXZZZYUQQRRRTW[`cdb``b\\SQRSRRQQW\\^^\\XUQOQRRPORSRPPNMOOOXgpncrjRVTSSSTTTUUVXXXXVTSRPT[`gihjpqkfbmvuzpov~}zzbVZgrte[iyvnoz|{y}xfdo|xwvvw~yuxvmksskhhfiqmklikmlmu{yvzvoq~idhikmmmoqmmocarvkt{vmejztdZVSd{ndb]Z^cdadgkjadeie\\]_^bswlxx~ykfggfca`__``]\\ZZahwt́dmuwtmhg]yɮűwwuhjr}|b[^^ZTSTSTTTURQPLKMLJHCHRgzqGLKNWLBBJGAQbWC???LRECB;X^?BDAGKHA??>>???>?@@;DOWK;LWMGIHDEHGJP@>ECPJJHHGGHIJAZ}x{urdRJEDDDCCBA@?=:==>LTSQQPLLKD@JeusrrsqnvlSIIHJJHGDCCCCCEDCBEFIMS_z~meqvCDPNKMPUXZZXXWSMKIIIIIIHIIKMOPPPOMLLLLLLLJHIJJIIIHHGGGOUREPzZ]dOLPRQPQPGHMRWZQKGIMNMLLLMMNNNNMNMLLKKKJJKLLMMMMKKKKJJJJIIHIHFEHKLLLKLLLKV`TMLKID>;Q`ZNCA@??@ABBAAA@>=>@CEEBAEGIOOIEJNMKPZcbWLFDCCCDEDDEDDDDEEFIMPNNNNNMLKJJMNMMMLLMLLMMMNMIHFDBDGFFFEDDDCCCDDDDDDCEHJKJHFDDAAABAEIMOONMKEAHMGCEJMMMHA;;;<=BDGGFFEDCDCBB?<<=<;;;:;>@A?;9:::86<OelWNOMWe\\X_ZE:9=?<;;;<<;;::<>>@CHQPMLNNOMIDBBBA@?A8BNF8:BFFFFGFHKLJB;8779999::::::9:;=>?ABA?>=@EHEB@==<=@AA?<<<;::::99899997@FA732578754=@;30244310/023122457887753356677645432223444333432222343213111212445432110/122247;?@@BEFCCEFGHIHIJHGGGHGHKJKJF?86579842221/01232565678766567789:=?BDCDCEFHNQPN@I`ZMC??EHGGIJHHIIILPM>558986AIB=>>?>=<:88755640-+,001:><;;99988888?KF<>BDDFFA;669>CGJC:661/221133223333444556668889;967GK0,3./-2;<4223333336999864455434589;ADEDA<<?;66652585246656767656553/.1+\u001f\u001e(2;ABCDGMQQH@@BFGC>===::;=>=<:64454/:5Fw^3.3<@;FT>)Fu~h0(7=:30244><1.22236:<:875554326>/<nRQE?<61../4AG>9=;;@JI@FJ=455;HKQUJ<??7-3984866BA=<>DEBF>3BN?/2>EA<.+,./,*BJ.*4737;;=V}[30..1=B>9:757;57cPN`SC7;=9:><6,2=@?3////>SbW8<OF-(>T_h^RSVQ=46846;DIFB=72011/4:A=;;54<>8:<:=?=::::7/;gmXPNYss[G72EZTKKD8585?ͲW2@EDFHC:445228;721572/2:?AA912349?EJROEAB@FZihr|kPLQMLK=2=LS_jknsmXIJMNE63@JG@<<>?@?AED@FS`daab_afN:Vk_UOFDHKD7671-8ILA757545<ISVOPPPQQRTY]\\YXXXWUUTTSSQPMKNRTVXVUWXURTTTSRSSSRQPOQRSSTWVTUVVUUTTTTTUVWWXX[^aegfffghhggijhhghc\\XVVUUUVTSTTTUVUTUUUVUUTSSTTTTSSSUWYXYZ[[[ZYY]addfjosrni_^d[OPRPPPOSVVUW^_VQTTUVUSRRSRSTTSRQU`ecv`SVSSTUUVWWWXYYYYUROPQSW[bimmlhdguzyzssrz~x~kX[fkeYV`qwooz~|z}~o^_ryqprtuvwwxzxuyxplmmihihiifffgqzvu{{xvxxyurquz{ibgikljjmmhima^syqtywvkewsdWUVxiȪz`]^bcdgcbhpncdgkeZ^kffutpz}nbfkhfc``c`[^^[Z`ivppzlrnw|sjhcoŻxw{sc``\\VTTSTTTSSQOKGKNNNJOU^b}MPPMURHBBPJBFA@=>:=SMAC<X\\;>EFHJG>=@?>??>>???ANSIEVjooorkXJHGHM=X[<LKKJJHHIIJJB\\w{{vvri[NIEBABBAA?=<<<;=HOPMLIFFBIgzyurprrtvaJHHGHJIGEEEDDGF??KXTMPR_yei}HBMMJLLLNTZ[YWVTPLIJKKIHHIJKLNOOOMMMMMMMLLJHHIIHHHGHGFDGNPKAW_^~wSLOOOOPNHDCBEOLB>HLMMLLLMMMNNNMMMLLKKJJIKOPQPNNNLLKJJJHIIIIIIGGKLLKJKLKKUYPLLMKE@BDRZTF@A@@@@ABAAA@?=>@ACA>?>DNRLGEEIJGHNU[YLDCCCCDDDDDDDDDEEEGLQPNNNNMMLLLMNONMLLLLKKLLLLJIFDCDGFFFDDCCBCCCCDDDDBDFIIIGECCABAA?BIMNOMKIFJKKGDFJNNNJD;:<=?FFHGGGFEEDBA?:9<<;99;;=ABA><;=<:8764;TaYPMV\\ZYYJ7:>>==;;<=<<<<>?@ACEEGLMNMOQNIEDCBA@?=5?J?6:CFGFGIIJLMIA;8678999:::::99:;<=>ACB@??BFE?>>==<=@B@?<<<::9::88899:961/38855689822;=5/342220.///11245554555789::8875554233455433454445555887420.-.///001244578:=@CGMQRQLIHDCEGGGGGHIHGFEFFHJKLNMIC>=<=<96543233446677889666568:<??BBCCABAA@?CFKSMA;BQMC@@DGGIIIHIIHIIGD=:85123<D?;==<;;98664453/,+/5539?><;<:999999:<==>BEDCC?7468:AFA8=@<83321112222224444554556778<:6DX<-4212127842233333369::9864455579;::=@EF<46;;9765567543325:987678863.-1,+9BDCDGIKMNNK?;?AEC;78<>>>956:8434234/4RTLNB<41:87>;Frd0276654434763684224:?>:6566432124.28FKDFI=1...0EXI::61:OPCEF>7558;8=C@8683-*+20--178:<=AJF?4.**,--8FC7---/47/.6646712:BY~]8.-,,3>FC@;37?;Ci~[??DC407<<AC928EK@EV@05CNJ9*,?LB1.8EVPEGPQ>236987;>7-*,222124:=<9835;=758<?@<:8:?;3Kg[\\ZR\\aQB848KKL\\M6225+8ƾͨJ0AEDDGHB:6766:B@942<C:2247973248<?DBA>>BJJJ^sK;7;GB<BLPbqjejgN>ISSL>569:::::;=>BFGEFLU]fhb[[dP5:@FH;6@KH90236:<60,*-25519bzxOPQQRRRPQVYXWXXWVWWWWWWWRMMQUUUUTUXVTTVUTRRSSROMNPRRSTVVTTTTUTTTTTUUVXXYX]_behiiiijjjijllkiggc\\XXWUVWWTRSTTTTSTUVVVUTTTSTTSSTTTVXXXZYYZ\\\\_eiiijouwwusi[ah[NORQQQSSPMT_d`\\YVTVXUSRQQQQTWYWQNZlrzug^VWVVWWWWXYYZ[^`]YTRTSPVailhhijrxwzuqos|{{uTZ`_^ZX[juokmptwtjc[ax|vy{wvvwxxvutuvomnllmkjjifdddft~{z~{xvwkvvtvxz|zqeaehjiijmmfdifdpw}{trwpr|n[TTdro]\\acqxa[_gpmcfnph\\atldimrt}dfpkfda^ckjb]]]_dhh[kсfposqljjif|~tn~pYXXVSRRRSTSRQPKJRWTSTSTXKtRTTJGPVG>nsR[ooVA@<DJCC>[[9<FILKF?<@?>?@???=>MUOJLal{wRHHKFLj<IFGLIIIIIJJJFPv~ywvwwwp\\NLIDDCBB?>;=>>;?JMJHIFIAOouomkjnptqYIJGFILHFEEEFCA@CTcfXMPQfod}OCOKJKKKKLNV\\ZXVVTPLKLLJIIJJKKMNNNMNNOONNMMJGHIIHHHGHHGFGFHKIJOjycSOPOPPNJFFDHPLGFHLLLLLLLMNNMNLLLLKJJIIILOPNNLJLLLLKIIIIIIIKPPJJLLJJJKKKMMMMKLLEBD@DTWLA?@@AAAAAA@@?>>@@AAA>>CNQKGCCGHFFHOTSLFDCCBCDDCDDDDDEEDEHMPONNMMMLLLNOONMLKJKKLJJKLJIFDEEEEFFDDBBBBCBBBDDBACEGGFDDDCBCB@?@HONOMIGHKKKGDFIMNOLF=9<?CJJIGGGGGFEB<64578867:<>AA@?<:8999::719DLV`f^W[K<;<<=>=<?CCCA?@BCDEEC?6@LPMNRKCEFECBA>;4>G>8=DGGHHJIIJJG@:8779999:::9999:;;<=@DC??CFF@99<>>;<ACA=;<<;:;;::98988886679:8778:9507>3141-*---5=JA;;875434456677776665443335544444566666431///.059AHJMOPU\\ba\\VQMNSTUSRSMHECCCEGGGGGGGGGFFFFHIIJKKJGEC@??=;:8766554667788966677:>BCCBABCBCCCCA=6;FHJFBCBA>?BEGGIIHHIIIGFD?8223714A>::::;:98654353.,069739AA==<:99;:9::9:=>DGEA>:75579=B=38<=<63321222122234344445456558D^X8/5513233562233333336::99764567:=@?<::=CF:.16;9434555555208@>;989:<;9769<DJGBCGJMMKID?77=@>:535;==960/353466454(Mz^HB;<<87;51\\`<26467642147:=?@92/0587645566531.00+3;BJPH900/.6T\\B<<=LTM@62224455543665551./-...-01479:;;9;=90..+)/<A941//7>=13BI@81.8GYgG6.*-,-5@FHIE>=A>8?B>70-.2237>@@@83>ND:YlM6:>;40.04=KF1+3:74<GG<1134642/-,.336:;7589953444457:>?>=;:;>;>ST]mWEHGIJ>8<87QbB(105,,ƽɑFAKDBABCA;889:<BC<42:A:1023343028<>?>75<HS\\PY}o457AGDGIFSdb`e^E5ANPMD977778899;=>BDEGJMTbh`Z[YJ=58FI>?NVH4./3?ME2**,045401J}QQQQRRRQNOUWWWWWVUWZZZ]]WQPQTUUTTUWWWUVWUSSSSSPNOPQTSSTUUUTTUVUUUTTUUUUVUY^adiiiihgillllkhc_adb\\XVTSSSSSSRRRSSSSUVUUTSSSTTTTTTTVXWWYXYZ[\\\\^^]^dnttstvraZfhWNOQSWWVSOQTX_c`[WSRRQQPOOORTX_[TUYar{{nZUWWWWWWYYYYZ[\\][VSRTWUT]eghiedouswyopuqxwmzvyu_ZZcocZfme__\\[\\ejd`\\_fu{zzzyxxuyzupnomkjjihhgfddhq{|vuvwyvot}vuvy{~{tokhgijhgge\\Zbjkkl{tp|wfWRTzqb[_o`fqXW_figcm}}zggrmvg{rupgcbZa}jZ_]]acd`u؋cw}ujejllioeUWSPOPPPPQRRSRRSOMV^^\\YWSZIgZMPJDTiZBdxur\\I<<CEAa]7>FJLKIF?<<=?@??=;BPJHNUjhXJHPLMC\\eFEIHHKKKJIIKKJJG[|{ywvx{rWUVOJFCBBDFDCHJEDHJIHFGGFHHOUTUX]a^QIHFNSMFEFFED>ARn|hUOORQlýegx^GMMKMKIJJJJPWXVUUSRQNKKIJJKLKLMMLLLLMONNNMMJGHHHHHGGGGGHHGCFHJN^imkYOPNNONKHGJLMMNLJKLLLLLMMNMMMLLLKKJIIKLLMMKKKIJJKKJHHGHHHHKRWRLKKKJJLJJLMMMKLKGCFE@FUWB<?ABAAA@@?>>??@@AA@?ADINNGBBEHHFEILNMJFDECBCCCCDDDCDEEDFIMOMLLMLKLLNOONLKKKLMLKKKKKHECFEDFFEDCBBBCBBBBCCA@BEGGEDCCCCBB@>?FMNNLJGHIJIFDFKOPPNH?:=AELKHGGGGGGGA=KSJE>:9>CC@>??<977888:;;:?9<Zaqu]K<?=;<<@>?BEIJEBBCEGGF@89<KQIMQKBGGFDCB?;7>F?@CDGHIJKIHFEB?:9889::::9:::88:;::<ACC?=CIF?8:=>><=ACA=;;;:;;;::98999;<<878886669957/<4/3-+9JJYfc\\:<>975433344455566655454444554444677751-//19IU_jnqv}~~si`ZZZXVUSPPOIC@AABDDEGGGGGFFGGFEFFFGIIFFEDCCA?@?>=<:9887556777775569<?ADCDCBBBCDDDDB>;9;A@>BCA>>AEGHHHHHHHJJJIE;34469=BB=<=<;;;:9765452./48:73:?>><;::::::99;<=@FGB>;:8658:;=7358<744321221222344455444445545APB.234234334323333233568998754679;>AB=99;@C>77533335543567525>BA@=;:9899:>EHGEDEILLICA=:88:=962.3894/./13668?@=7402Sp_HFA>;8:KX_chpmgS:376676874237<?@?92015645665555322336;;BIE<211/.ATOCAG_zmF20./.033221/.00121/.--.15552.269;<DKA4/043+0=85<?A:<=8EVUG@;46>71+../00/:IIDHHEED?6-*('+./399;<=8213@F44E>9;=98725=;3?LB0/311:?:510/-/2/---/3669<:7423223312599<=<<;::86AHJh\\IHCDTPE@BDK[V7-3162(xżſsJRI<:==<86788:<>B<1.14312455652369:::98=L\\bZZuɖ85ABFCGH?BT]\\]Q=5;CEDA97;;867889;:;?ADHHIU]]\\[[__YVRHDEEHIE@53M_B/51-9@844.(VQQQQQQQQQRTVWWWVVTTWY[][XVSRSTTTTUVWWWWWVTSTSTSRSTTUTUUUTUTTUWWWVUTUUUTTUV[`acdeca_bfhfc_[WUX`c_ZWUTSPPSSQQSTSRQRTTSSRSTTSSUUTTVWWXXX[[[\\]]]^`cgjkmquuma^feWLNSXZ]]VOKLT\\bgg^SLMMMMMLOQTY\\[UR\\p{kUUVVXXXYZWW[VQRRONTWYXRPWafebenppoq}r{xkrkorkpnaesjYX\\\\ZX]dda_ZZx|{zwwwy|wwmvpolgeghhhgfedgq~sjox}{ttuuvwwvtvz}~~{sjglqrsstz{hexqur^QQjjizYWkrOUadceeddqqoȥyzrtmhbajrmc`a__`cdW~ߞjuumhdgimwsmaj}zoTTQOMNOOPPQQRRRQQTWZ]\\YUVL\\c>FCDQTRJDmxx`IBAFfZ9@GKLKKJF@?ACDDCE@DE;IdoSAFPMLLMIIEAHIJIHIIHHHHIIIHRfy{{zy{}|d\\cYLJMNNMMKJKJJHHHIHFGHHEDGHFEGGHIIIEBOTKHFEFDEPkz`RPV\\Uhpdq]JMRKIMMKKKIGKQTUTTQRWVPMJIJLMNNMLJGHJLMMNNMNJIHHHHHGGGGGHJLKHIJNTWZ\\VQPMMMLJJIJJKKLKLKLLLLLMMNMMLLLKKJIGJPPMLKKKJIIIIJJIGGGHIIMOWXOIIIGHKJJMNLMKKJJIJIEALZP@@AAABBA@?>>?@@@????ABAJQOLJIJKHEGHILLHFEECAABCCDCCDEEEEEHLMKKKJKKLMOOMMKKKLMLLMMMMIFGHDCFFDCCBBBCC@@AAA@A@DGFDBBABA@?>=>CKMNLJGGHIHFCFNTUSPJ?:>EGHFEEEEFGFF?A^sphYRKID?=??>:534679:;<=;:>MQRdXO=@DILKMORUWVUOHEEEFFGHHE?GPMPLB<BGFFED@<;?FHIFEGIIHJJG?AB>;:::9;;;;:::::99985;ACC?>EHC<:;<<<<<>@?<9:::;;;;998899:;<97676433445965@H8LaypD9<:85555534455666665566555455444222/.3:DT^iry~|{}vjcZWQNPQQOLIFBDGB;=AABDDDEFEEEEEEEEEFFFFGGFDCAABAABBAA@>;::976656767778<@BBCCCEDDDCCCCCB?=<:;=>CEC>=BGIJHGHHFGJLNNH;5568>B@===<::::;:7545422458;839==><<:::;:;:9;=@EHG>789755579842/3743432122112333444443443444446:5243346542/3543322466799764567889:<;969AA>>>=57<;<:73257:849BIHC>:99;=AEGIHGJLLIE>67:97643340.1760,/6;===>@@=86513arVLHA==RvpI9>>=<:<964656994111469854458989;97434338:98956842110/4EOUT?>HNF4/45676310/./022210/.-,05896/,-/6AJVWG4-2DI;5932LfbI?=G\\j_MIC;:8-/154331/8GJCAAADBAA;102358<HQE<:754781.24.5>=961.7C@10CN@1365760.01//132/--.59516::4022233135559<<==<;98<=HXNZ^OPd`Z[]efWB245/32&h»˰ZMS@45:;711577:;<@=2,-135654466323358987=MX[Z[q`3EGDCA@=:DRSND:7788876567655459;87:>>@ACJQWXW_jg^TD::::=ELL?:R]:.864<A:224*7yQQRRRQRQSTRSUWUTTVXXXXWUVVSRSSSSSTUUVWWVUUVWVVWXYYYXVVWWUUVUVWWWVVUUVVUVVTX]]\\[ZYXVWYZZXTPPPSW]`]ZXVSQPQQQRTTTSRQRRRQQRRQONPSTTTVYZYY\\]\\\\__]]_^^djpuutwoaajcVPPUX_b^TNMMPZhple[QONLLLMQRRW\\\\X[j{~l[TUVWWY[XUVVUXedTW\\X[VMQX[]bhjilz~y~qdXapi\\]`__``abaaa^m~|vnrxz|}|krrqplihhhgfeecdq~{sptz{{|}|xsstvwxywtuw|}sjjwzil{yhVO[\\lk[l`X^Ybc]_efo~uwz~ptricehcbeghdaabeXtjskgfdeajn}b]_ZSZTMZhhj}y`RNXZQNOONNPQRRQRRQSWXVSQMKzo?EDB>@DLHLo{{qINhS;CILNNLMLLKKLMMMLHC??^`JDHLMJFDGNIFGGHGGGFDFIGFGHFEH_vvw{z{}~rcg[KLMNNMMLJIJIHHIIHFFIJGFIIEEECDGIHC<=EIGFEFBXlTNO[eZ_ŭipfLLPNLKLMMLLKIJLOTUTSRWXVRLHIKLMNMLJBCIIILMMNNJIIGGHHFGHGGHGHLLJIJLQTRRRONMMLKJIJIJJKLLKKLLLMMLLLKKKJJKJHDM]YQPOLLLLKJIHHHGGGGJOPTZZQIFGGGJJIKLLLJJJJJKKJFHSXJA@AABBA@?>>@@@@?>>>??=CSYZ__QNPLGGIJMKHDCCCBACCDDDDDEEDCEJLKLLLMKLOONNMMMLMMMOOMMMLKKJCBFFCCBBBCCC@@AA@AA@DGEDBBA@@?>=<<BILNLKHGGGGECISYYVSNA;FMFCEFGFEFGGF?@_zzk[SF<64:>?>8546:;<;=<<<:935>H]`MEMRVVTSMGKOSRKHGGGGFECBBEKNQH979@GFEDB?>AFIIEEGHFFHFC???=;;;<:;;;;;:::;;97708?@@=@FC=9;::;;<;<>=;99:::;;;:888899::98756535587CH9MbU}V;788655555544555556655544345554222024;Nbo{yx~q]OLKMPTPHA=>;;98;@A@AABCBCDDDDDFEDEFEFFFFEEEDCA@ACEGGGEC@><<;:;:7899<<>>ACDCCCDFEDEBA@ABBBA<88:<@DDA@CGKKGFGGGGIKNPG>;889=>847779::;<:7666547979;848=<=<<<;;;;<<:=@CFD@:668755669<985122332221211222333443333333334:EE=43632549C@754322455678754457789;;;847AA99;=;9:;=??@@<67:9=GJGD?=@BCA@EIMLIIIE=5100556868;955895007=@AB??<8766663H]MKMMduR<6104688656744:<621/./155689::;;<:743233<C<001--2211/07MflU5,/12009BHG=303678999:8641/1599861/,).8BSXF0-15;852.=`}zeSKazw]NJA<;625433333567?DC>=?>@EC63557;ACC<9:9974-)/2028<@@8668@<505FN?:>>85334420/010/0034102697662/0133147;===>>=<:89?K]]SFNluquy|mD./3/)13&`Ƚ˽˔J>A8469=<2.489<<>>>8203466321/../1247;:8CV^ZVXhƞE>JGD=::7<EEC@;7511456534465469;9:?>;:;@EIMOQTYUNG:34457;CKKJLL5/47;=;73059.KRSTSSRRRRSSRRTTRQVXWUUTSTUSSSSSSSRRSSUVUUWYYYYZ\\[[ZYYZZYWVVUVWVVVUUUUVVVVXWWZZVSQQPPPQRRRPNNOQUZZYYXUSPPQQQSTTTSQQQQQPPQNNKJLOQRUY[[[\\^]\\][VTVTU_insuvzuhbghdWNOU\\ac^VPLOXdlkhhh`UNLLMNNPU]a\\Zcouv~~iYVUTWZ]c\\QTV]xkXccWWZYTRWZ]`aahr||{sdZZeg]Z``^^^^cgdddn}tot{xy}mquswxrmiggggfedmsw}xqnklrvusrrtxxwwutuvyzz|}simgeilkbZYq{Yp_rgy|jiolbchjgitvps˵|tsfbdb`dfchkbbdf_\\irhffeibip^\\``_YSRPIBGAGbhbZVSPOOOMNOPRRRRRRQPPQOJG:tDEGCEEEEJK[veiN;FJLONMMMNOSRONMMNMDOwrL?DJNLKKKECHIHGHGHLMOLLSTTUPKGARnvtvxyzc^eUNMNNMNMKLKIHHHHHGFDEGGHIFFFFHKKGAA@CGEEEFDgq\\OLOU]ZXrsnPMOOOMNNNNMMMKJKLORRTUVWXVRLIKKKKKJIAAIJFGIJLLKIIGGHGGGHHGHD=>HKJHJOSSQQONMMLLJJKIKLKLKKKLLMMMLKJIHIIIJIGDO]ZUUTRQQPMJHGGGHIIHMSTW[YSJFHHHIIIIJLKJKKJIIJKJIMWPHDBBBAAA@>>@AA@>>?>===AOUWgo\\NOOMKJKLPMFBBDCCBCDDDDEEEDDEIKKNNNNMNPPNNNMMLMMMOOONMMLKJDACDCBAABCCBBBA@A@@BDECBBBBA@?>=;=AGJLKIHGGGFEDGRZYVUOC>KOLNKIHFFGFHFBIbm`ND?7568;<>>:89>@@@?@>@A;?8575=KeolbQGEDDGGGMSLJIIJHJOVUMEEOSK9;;=DFDEDB@BDFDCEGGFEGE@?<;<<;;<::;;<;<;:;=:3856>>>@DH=79;:8:;<=<<<;8789::;:99888889:9876668:=A7D[JB?c}{vPG@)83143333234354344444433335553223<Rbky~}~yvzzux\\MHEB=:74589::9636=CB@ABCCBBCDDEGEDEGFEDFFCDDCCBBCEGIJJFC@><=>>?>;:<?@@CCDDEEDCEDA@@><<>BCCCA=::;>ADDEEFIIHGHHFFFFHFB=>;954444469;;<<;96677799;;<;:67:<<<<<<;;<<==?DDA9566566446568:@>75323212222111133333344333344348EB53//84GfbC67431122445543224567878:769AB=<=@?:659>?HTQC:76;FJECA?BEB?>EMLF?<:73.-0015<A@HME@?>9448;=?@A><;97555654Ifle[޶`FGC74;;53778832;>8432004756::979::;;832238<8+,?J?4310/14IhoW@425658HX^N81459<98;=??;85466:;652/.-,.3GO>/04/--/,-Ty{wphLNH?<72/024324970*1<BB@?<>A@8421025:>A?;:62/--/1025:BC@?98=;;=8:KPIGE=:>?;860,,./000/-.11235775447844:>><=>==<<;95:UT@:8>hy[0*122.25(Iķs=-2:68;@D=315:<?CD@931001146200/-//28DGBF]kjb]gͽa:HHEA;66:==>==<71279985057558:99@FB<968@DAIULBA>;514638?BHMJE;/.019;766105,0UUUUSSSRQSUTRRRPPQSTSUVSQSTSSSSSRRRRSSSUUUXYYYZ[[ZY[\\]]YVUVUVVVVVUUTUVVVVWWXYYWSQPOOOOOPPPONNOPSUVWVUURPQQQQSTSRQQQQQPNOOMJKJILPUZ]]\\^__\\ZYTQQOOSYfswvutphgige]POY`df`[Z\\_dlmhejaSPNLLMNMMS\\b^\\dimtufWVWVYY\\jjXU\\an}xfs|_U_f\\OTTTVZ^TNbu|{|ri_]cda__]\\[Z[]cimrqwtxz}~rmqurty{xplkjmorkhrywjcfjnssnlqsposutqppqstuw{~{pdapc`hiigch`odUdlm_lldbqvqgk¥|~pricb`bfdV^jbcedfV{ktkjihngnvi\\\\gbSMNPQNSgvyu{rieQFMQONONMNLNTSQPNKJKKED7oIFGCBBCBDIShxzL;AJKLMMMNKLTWRONMMKUoxjUA>GHIKIKLLJHGFFGIGGQX]_ajnosvtpohoykhkij|eNYYOMOOOMMMKHGHHJKKJJNKGHIHGGGGILKEAEJGEEEEGHc}YHPQSRUTSsvoXSXSRRPOONMNNNLKKLKKLQUVVVWUQNKKJIIHIDCDLHDEGGHJJJHHHFGGGGGGF@<DIJKLNPPONNMLKKLKKKJJKKKKKKKKLMMKJHGFGJJJJIGJPRSQQSQONMKIHHGIKMORSVVYXQLJIHHHIIIIKLKKKJIIIIJIMQUNFDDCCDEB?>@ABA??@?=;<?HMTeofRILMMLLLRSKDCCCCBCDDCDEEDDDEIJKNONNOOPPNMNMMLLLMOOONMLKIGC?ACCDBBBCCBABA@A@@BDCBA@@ABA??>==?CDFJIHGGGFFEEMWZTQNFCIIOZVOIEGHHHDFY_PC=??>=@A@@??<9>BCBCCAEGEB?<78677>HWilYB=CFDJPXKKJJJHLNRZWONPRPGEC<=CDEEC?>?=@CFGFFFEF>99:;<;;;:;;;<;<=:;?<4786<>?CDE;78;:99;;==<;9766899999887888898677545655767=@6;GYy}FK[>,60042221222233234433333334442212Kq}gL=:97421368889975567;?@ABCCBABCDGGEDEFEDDEDCCCBCCCEFFFGGFC@>==?@AA?>@ABBCEDEECB@?=:7678:<>?@AA><<;<?@CCEEGGFFGFDCDDB?=:<=97568:;>>=<<<;86668:=======848;;;<<<;;;;=>ACA9/1545753344556>EB;4343222212211333333333333443335832;QRNytG3853211112233210024556688:9:?B@>>?B>:88<=BQZVK?95:CEDCBAB@ACGG@7334214569=BFJKOKC@<::9:;====;889::87668/alkQKIB?=;78<:76348<975322333465323469=<3/010.39CSmc8+0.0129GYcaWC776>Zo^;-053353369<=9555558=80-.-.001IX@6;40242*2juCCPH@=93/-2767::2+++-3;==;976762/0/)*5@@964333332232:DC=7<ACCDD?7=LPLD?ADB<68=FQK6,)).540/011148=>>:57>A>:;?>968><5EM:0788SA+.0274346<_ŻW=14:9:=?EE=417:=CD90/.//128956=;3/.08BKD@XnuvmnϹh@DEFB:3159;;;=@<66:=<88;<967??:9>A?;8319A<C[WA=;7459::CHDAAB>5.--/;=9:;7210/WVVVTSSTSSUUSRRPNNORUUVTQQRSSRRSRSTUUTTUUUVXXYYZYYY[ZYXVSSSTUTTTUUUVVWWWVVVXYZYVTQOOONMMNNOONNOQRRSSTUURPQQRSSQQRQPQPPNNONKLJGINSX[[\\_`][YWWUSRQPO\\qwrpqoljiimm`ST[^__^\\]bhkmnkd\\QKNNLLMNMLR\\a]]bfkmcURUSUVWdme]emkp{gYgvfUSWUPknJtmiy|c_eggghfffc_`a^e{}uqyzqttuvphkv}{rllrxsdcvvnotwwxskgimkinsspnmoprrssuxuj[TbkdkikklklbwxSR[yw}lֽoc`cmog^X^cgcbic_bdec_hvppnlpezpeljgkbUPRRNWprib_SgmORSNMMKFKUTPLLLJGDBG6bSBDDAAAA>@GNUg~UYDHIGHJLMMLOUSONLL\\onWLJBCKKJKKLNNMKKJJIIHHNV[aksx~zZ\\[Y]g[ew`LRXQONNMLLKIGHHJMNMNT[OFJJJGDFIJJLGBDGFDCDCEId|iPPYZZXVRRlw]RXXVTSQOMMMMMMMLJJKIGJOSUUTRSPLJIIHIIIC?DD?ACCEIJJIHHHGGGFGGHHCDEFGHKMMMLLKJJJKKJJJJKKKKKKKKLLKIHGFEGKKLKKJJKLLKKLMMLJIIIHIJLOQRTVVYXNIIHHGGGHIIJJKKKIHIIHIKKLTRHC>@BBBA????BBBA@?=<;;<CTde_SHHJLLLMPURJECCCBBCDCDEGEDDEGILLMOOOOQQOMMLKJJJLMMNMMKIHEAA@BDDDDDCCBABAAAA@ACBBA@A@@A@@?>>>A?EIJJHGGGFEEJTYQMJGGHGJOUTJFGHECDLWM=;=<;<?ADDB??=;>BCBAAAAAA><<;:;=?<:>I_phM@DHHPWOLJJJHIILRUSPPQSHFIE=?CEEEA<:3;DGGEEEC?<8==::;;;:;;<;<<=<<><9579==?D@:=;7::98:<<=<:8777887898788888877666523555453//3.1;YoHLr^63313532112222233233333322222333.3\\}tR4.3345678::::644567556;<;>AAAA@@BCDCBCBBCCDCBABBCCDEFFEFGEDB@>=?@AA@?@ABAABCEE>7865311478:;9:<<<;:9:<=>@BDDCCDDDCAAC@=;;;;:99=<>CEC>===;86779=?>>==>:548:;;<<;;::;=@BC>2-44256532333237>@733676201134434433333223334444546<Qxy`}x@/363333322222322233445667:<::>A@>>?B@=:8;<=HTVSPMD<=DHFC@AA?;993387766=CCFLMMQRSPD;46;?@>>>=:414899988765Nsl^jfXQMME75:<989988;;987541//22210001248<8554511KhVa|L%./0247;=BHH@986@`gD,.0/.-147765654764239631103663@U@;?:46IK5<xQ5HQG?<961-1568:5/2760,/478804?@7000-*-49756::8763566;?6-4GKGFB?<84:GKD>@CB>;EXmyT?3*0<:00112357:97435:<:8:><88:?=8KB44889:Wb),//57310<?0O˹z@<79@===>?ADE>43:;;=3*-0234469::?A=7448;=:;SfozvtȤZ?HJD>833588887<@><?@;8?HD=:<=::<;6577548ADCQYJA@>:8=@?CEA=>A<2,-/4>A@?@=8432WVUVUSTUSTVUSSSQONNPTVUUTRRSTUUUTUVVVVUUUUUWXXWVVUTSQQRSRRRSSTTTUUUVVXYYYXWWXYYZXTPOONMLKLMMMMOPOOOPSSSSRRSSSSQQRQPPOOPONOOMIFGLQSTTW[][YXVXXTQQRPQ^koqjdloiijkpj\\SQUVVVZ__`cjqpqaIKPNNQSSRQT\\a``dinmbVONMOVZ_e`aquvjddT\\]Muɿwwrwejljloruusrl``vupy|novz{voihjqyxqmsylY[y{vrnkhghjknqqqqsuuttstrtxma`lxaillmnprnfmNWZu|~dɕQDZgoi[UX\\gljpfY^_accijxrrpooojdhlppnaWTRP_ustzzkonWVSONMJJPVUOKMPQJEDJ;Sc;@DAAA@?>ADHJOczv`zXDEJIGHIIIKLNKFYl`MCIRJMNJLONNPQQPONMMMKJIIMXhqusTYYYWTc|jQNMRSRNKKJHHHGHJMQOKPQKFEFFFAAGJJNTJBGIFDDCA?Ed{mWM]qof^YUYqhRXYWVSQOOMMMMMMLLMJNPLIKOQRQPQPNJIIIIHPA:>D?>@ADGIJJHIIHGHFGGGECBABCEIKKNOLIIJIIJJKJKKKKKKKKKKKJIHHFDIKKLKMLLLLLMJHJJIIIIIHJLNPQRUUUVSKGFFFFFFGHIIJKKIHHIHHIJJKNUMG=688:;<<EJB><;A??=<:7=RbaXQKGGHIJLLOSQICACBBCCBDEGECDEEILLOPOOOQQOMMKIJJKMLLMLKKJJFCBBCDDDDDCCBBBAAAA??ABB??AACA@@@=>>>M_FKMJHGFECDHPSOKHGHHHIHIMKGD?>EMQL?=?@AA@A?@@AAA@?@AA@?>>=;;<<=><>@@?==>COfoZDBDKMSMJIHIJKKKJJJJIKE?CHD<?GDD?963:CFFDA?:8<JJID><;;:<<<;<<<<<:7:7@@@??FF?FB88:9:9;;<;:87878:889998888887665556376435534566:7.Adh;-244333323322222222132212222235519b~~h@,,4646999::88765466556896568:<<<>===;;=>?ABBAAA@BBCDDEEDDEEDC@>=>@@@@ABBBBBBCCB=2021134578877788996579:<>ABCBCECBB@?@><;:9::99;<>@AA@??=;988:<>@><<==:436:::;;<<<;<>@C?600431674333322445753369;:4014653345544322332443477CsytE+4713477742221026874348878;<:9;?@=<=>><:::<;@MRQSTPGDIJFA@@=99677:;56;<?CGHFEIPSWWQQB8==>=;9:977:;9888778;46PinYRWTYXSG=<:;998=B=<A=:996420122100000000:BAISQG3BkREze//02369:5.-/3546APF2572/0245;;64469;8;?;:7:IF;:<<96=9;DNF<NVB?ppG?MQG@=;92-/158856:=DB==824;68KK=3002102678;>;9857<B?83/1>B?=940261,9FGABBDJXgou}whd_G10432026::75311124779;===???:8C>7:85=7/j~4)223651*)>E;BZn_+'--7?=>>>@??B@839=;<90/365548?>868:988<@?=>K]hpooïT?IIB<966763114<A@>?=88AGC?>;3/6?;,).5:=@CGDAHKGEB=:6;KOA9:;>@7/-/04775643210TUUUTTUUSTVSQPPQQOOPSUUUUTTUUVVWVVVVVWWWVTTUUUTSSPNLKLOQRRRRRSSTTTUVXXYZZZYYYZ[\\\\ZTQONMLKJKMMNPPOOOOPQQQRQRSSSSRRPOPPPPPOOPQJDFIMOOOQTXYXWWYYURRRRNP[glgcouhejmrsl`XVVZ]^_\\^ciorxtXKQQQRSTTRRQXabdgkqneYRKIQVX\\[_q}rrzpceh\\ԝztmqzrr{xoqnmosusrumbt{zxvwtnmrs|wqttpkktyvuxj\\[l|wqmkjihikmoppqrtwyxxxxw{o_p|egommonqvmb\\SWYnzt~|nȋRUdmk[RV[`bctkX\\\\\\]^^WrpvvwqsnurekjkoqlaWPP]rruu~|\\LOXSNONNNNRVSMLMPQKGDI@Jp=@BB?????B?IPCES]pq[YPQPJDFIGEEGD@QQ?DLOQNQQLOSQNQTSRROMOQOMKHITdpsw{aQSVUWi|QFLMNSSNJHFFFGGHMPRPMF@EF?9>CPWNOVW_aOHKFEDB?<Hgq_NIboea`fp~ZTWVTRPOOOPOQQNKMQRQUTQOLMNNOQPPMKJIIIL\\L7;CB@??BEEGHHHIIHHHGGHGCCCBDEFHKOMIIIIJLKLLKKJJKKKKKKJJIIJJGDIJJKKMMJJLMMKIHIIIJJIIKORSSSSSUTLHHHHGEFFFFGIIJJIJJIHIIIJJKSSOF8/69796AV`?@ELHE@<;8<OabWONLIGFGHHIPUOEACCBCCBCEEDCCCFIJLOPOOPPPNMJIJLLLMLKLLKJKJFCBBCCDDDCCCBBAAACB@@ACBA>9>CB@?=>>;L}vKNQMJHEDAADHMNKGFGFGGGEHKKF;8FPNF><>CLNOG?88<BGGDBAA?>=<;:;<=?@@??@>=:<CBDWkbLGEEQIHGFHLPNJGFFD@GC@@EJDCGE<8445<DEDEA;73;INPQNIC>;<>=;<<<<<;8;FQLDCBLQQMF<6:::9:;;::87878:89999888898776544.10123354566666863781344445554422000001122332223357868Ww}`:/38843689887433478776659:644456789:86216<ABBBAABBABCCDDEEEDDCCA=<=?@@@ABDEEDDBBA?:5433465897442./345556689;>BCCB@@A?>>=<<;;;<<;<==<<;==><;:9:<>??=<<;;:5/4:;;;;<>>=>>?=83024215643323234434434327>>635553346633322233443588GmxY=242,/46::854331/0477567;8567799;?>;99;<;;;9:79?DDDDBBA@=:;;:88998899516:>EJF=87<DIPVYL9:><8633<CD@<778877;><649>DIGMQUSHGot>/:>DF=>D@<=B=36677642100///.:HGXmk\\B3GNJ__?302687::0+++.5>A;26<8457755:;99::;B:<LNLC7FK@?@>;4386CQE66542MsXMDKUMD?:82--0568;=>;BIOTH53;;;KL9.../333798::6446;@?;8789:5/+'&''*+(,:FG@=DM`qqnh_]k}j<*154.29=;886521123567:?BB@>=;:7:?92==+IwX4<>:63301EbbXpcNi`&\"8:;?>86:>>>?=<847<===7267468?A81245668=FHECCVkopjWSE;@>=:865324<?<9;<845:?@?:2-/6=<78:;=@DC?95;FPN@;9/-KgM1433@@3,./+,,+*-/0//RSVVTTUTSTUSPNOPPOPRTTTTUUUWWVVVVVVXXYZZVRQSSQQRQPNLJMPQSRRRRRRSSTUWXYZ[\\[[[[\\\\]]]ZTQNLLLLLLNPQQPPQPPPQQQQQRSSRQQPOPPPPPOOPSQIHIIKMOQRSUWWWXXXVSRRQQSX_krusjaeqroqrmd^[Z\\acehlnnnvpSKRRPPQRTVUW_deeinomhaXLHOY[W_s|zkirtu|v~zyrtqclvqy~tnmmlmoqstz}wqnosutw|zwzxwtifpy{zskhktyywvsonmljhimooppppnrvxwxxz~xff|jomnnmonqxgswRYWU`rwt|s½ĐUVpkXSVY\\\\^rmWZ[[\\\\\\`Ystowxtlgimklpsui\\QRbttww_gzuV9>MTQOOOPPOSVQJIKIGGGDIDC|A<>B@>>>>>?KXVKC@J^o{qevXRXXJFEECB@?==GKKNPRPOQOOQQOQTTRRPNOPPOQKJPZkml{{fUPSR[m`IIHIMOPMIGEEEGGHMUUQKDDCAISTfrbT\\W[]HKGECA>ATjfRIK[w~rmkmmmjTZUQQOOQQOQNV[QT]]WZ\\YTVQMMNOQQOLKJJIHMccD>EFECBBCBBCEFHJJJIHGGGDCCCDEDDHMJGIIJLNNMLKKJJKJKKKKJJJIIKIDHJJKLMNLIKMMLIGIIIIIJLPTTUUTTTTQGHIHHGGFFEFGHJJJJKJIIIIJJJINTRIB53:7:88EhjepkaKGGB?=J^aTORSQIEEFEEKSTKCBBBBBACDCCBBCFIHINQPOPPPOMJIIKLLMLKLLKJKJFCBABCCDDDCCCBBBCCCBBBCA@GXG:?A?=?B>U}WMRMKIGECBBCLMLIECFHHGFGJMI>4:FIC;9>BFGJC;325=CFB@@@?>=<;:;<=?ABA@@@<:7@DC?F[_QJGGHIFFHIMNLKHECA@AABCJOMJH63436=CGFC?=>;:6>BHPRNIB>?=;<;;;<;;AKOLFCHQRSJEC:9:98:;::997788999998899998877644:7:>D@<9;987665664572335666655332001111112332223579;:3NwyT/-686346676653222478776668::6455546566547;?BBBBAABBBBBBCEEEEEFDCB?>?@???@BDEEDDDB@A@@;;:87689630-/4:BIJF@=737:>@;9>BBAA??????????>>><<<<;;:::9:=?@>=<<<<:9538<<<<>@>=?>:4342221244444431245433341/16?A<75332168303322224678::97GSE7146?H@8:9887668::4.1469840/113688:964579997555532334685568;;98755668<@<<>DIC:64.'(3FNSU@8?;4312;DD=8667789<><>>=<;=AA>ECOku4:JI@<GMJFGOG44579;;96431015CH@END==33<@JLB:207BD@<1.//4996/6@>98986458;<>=84;71<?65/127@?>925=:8781+,25:O~k[VODIWPG?5440147:;>?@>=FQTL;57;>EA1*,--/138:86544666726@D;2121/-/<B727649D>99<@L^lgXTaokQ7011.068643320/01100018<=<==:45<@;3;?5=MGDG?842./Owp_hraQXL4?NTVWV@.4?=>CA:4456;<;967646;>8.,28:98:AGHFGCNhuwkyjWZE48<?;996558<<97:><75679:5,/6;=CS`^RE<;>;325;II712/&0TL596/4>9./2.*))()*+,,SSUVTRSSQRSSPNOPONPRTSTTUVUWYYXXXXYZZZ\\\\YROQQPPPOOONMPRRSSSSRSTTSTUVWXYZ[[\\\\]]]^^^^ZSPONNNNMMPQQQQRRRRRRRQPQRRQOPQQRPOPOOOQUVRNKJLLMOQPQSVWXXYYWTSTTRPWgqokni^blnlkoqi^YZ]^agjlkjemfQMOSSSTVZ_abdefikllhgj_KES_UZmt{}|}~wpoty}mqyoqw{|yywpvupxxljllkmsyx{rquwvusrtuz|xsk^avvolrtqppsrponljiknoppppnlotutux{s^Wttx~tqonmnrwchT\\WU\\punx}v{mƉQgbNSSSTYXkiUZZZYZX]_O|d||u{ysnqsprvw|hQL`uxyymSb~d<>EMUROQPQOORQKEFHC@BCEJI@{D<>@@??>@AIROLHGHGGLSnc\\TZaXD;AHGEEGKPQPQPSRNPQPQRQQSSSQQPOOOPSOMIMdbaw{bWWYVhyo]MLKIHHMMHHGECFGGIJLPOJJBKTe{~kV^^c՘OOJGECC@G[h`JGMO[efjlln{\\WZSPNOQRRQQRXWPTaeaa^]V[VNLMOPPQPNKIIHJ_kR@DHIIHFECA??CFJJJJIHIGEDCCCCC@ELKIJJILNMLKJJJJJJKLKKKKKLM\\LDHHIJLOQRNKMMLKIHHHGHJOTTTTTVUWVPHKKIIJKIFGGFHIHHIIIIHHIHHJIGPSIIF=>;8:9;Eps{NNWOKGIVYRORTRKHEDEDGMPMD@@BBBACEDBAABEKLKOQPOOQQPNMLLMOPMJJKKJIIHEBABBCCDEEEDDDCBCCCCCBCB>DcrbKD@=>AEQj~aHTNJHGECBBELKGA<;=DHKKJHHG?88?FD=:>@@@A?9324;@@=<<=<<;;;::;=?ABBA@@>=96>DA=@LZXOMJEGGHHHKKLJHGD>=>BEHOOKF;7:5:@EIB56:;<:878;@FLQPKD>;::<=<:=ELRPECNPOLLONC:9999::::9878899999989999998886Dj`n^QG?@=;876766455333466553444455676631111355689;;;5VW.,5533456665544443356776668:964566654335;?@AABBABBBBCDDCCDDCDEFDCB@??AA@@BBCDEFFFDBBBB@@@@<5786419MUV_ba^YR?6149<AFFB@BCCA@@?????????>>??=;::988;?@><;;<=>?<9;<;;=@B?>C@746743312444344333453333310115>C>843328>;544222245:=<98934@=07Om~Z;9666778;@A:118962-,./0026656444665545689<?@?>>?=>BCCB@<866679;>CFFHG?4052)$,:>@IOH<621258:96555668;=<<==:;<=>8;A<CXa_ddB7BU]WOJF<3216;=??<;86448>:28=5152AU@A@=O@/5FLA63679<8/*0<?:99753459;;;5,-02200**-/.3==;85=D>4/8BLK<AE9:UG@WZNCFSPF>448789<???BB=58?@C>979?=3,,./1211462135762/.,4DF935;JZYUpyWON;4<=;9845G^bYW[WZY?0.23--11//0/133431/--.04776447:;96<A;885<;/,.-+>leUXZSRXNDMVZ`hdH+/>=@DA6.2504;9566446881-.05:>ADEEGGFDETowkqhP]O922:>;??92/4=A?<=@A?=>=:7304:>>AOY]]VE47>;62045/*,0./7:8996.-//340/120/,)((SSTUTSRRRQQQPOPPPOPRSSSTUUVYZYZZ[[[[\\]\\]_YOLOPOOOOONOQRRSSRSTUVUUUUVWXXXYZ[\\]______]WQPPPOONMOQQPPRTSSRRRROOPPONPRRRQONNOPRTVWUNLNNKKMNOPSVZ]]\\[YURRQRTX]_hsuhTQ[]Y`ec^ZYZ]`bccf_WetfNNRSVWXZ\\_adfghjllientaJKVROYdmsuxzxtnfjzwefovyx~tklq{rehkjkmoonpss|}}yspqurnorrupccetpirsokiotqnnoplinrqqqponmosutuxs_O_wwwsr{usrqpwtpf]T\\WW]kuss}}~kEËXTYVW[YZXijUZZVUVVW\\MjuRda^fkjknwxtpyiSbsy}ztqs~yx|hTXd_ZVPNPRSOOPMG@??>@ABGKM=pLCBBCBCBEIKICCEEFGHIDtoQxr\\X^fWGEGHHJPQPQRRPUVQTUSSSQQQSRQQRPOOPTRNQ`pnhgzi[Z[YriKONLMMKKMNNMJHGHHHFGKMII@Cl|r~t`\\fwLRGGFEFFGZmUFOMNQUW^a[e~dTVWTOOPRRRRRSTQMNYca^acX[ZPMNMNOTUQLJIHIVbVECIKKKJJJGC?@AEJJJJHJHEDCBBBAABEHLLJIJKLJJJJKKKKLLLKLMKWfiHHJJHIIOSNKMLMMJGHHHFGIMSVVWUUX\\WOMMLKLNPLFKLGD>ADHHIJGIIIIIJELVQFIHC?=>==<GO]}sRNPSSQOQRPOQRPOLFCDDEGJKE@@CDCBCDDBBB@DNRRQPQQQSSRTXXWVXYVPKJLKGGHEAAAABCCDEEDDDBBDDCBBBABA<B\\i\\H@?@@QsoteNVRKHGDCBAFIB:74457;@FIIFC?@@@CEA=====??;88:>?=;;:9::::;<;;=?AABB@?=<<79@CCB?GLRZWEBGHGFGHGFGHGDA??CFGHHDB?>7=DGC8/13489998779@IOUQE=9:===<@IRVO?FTRMLPTOF<9889::::9878899999998999989:;;6]jakMH>>?=<:8665434433334568765788::;;9843336999::;;8@jW58=7258852334455443335676668:85345665434;@AABABBBBCCCCCDDCCCCBDEDCA@@AABBBCCDEFHHIGEDD??BBDB96867GZfheedccbd^WRRZ\\[RD?@BCCBAA@????@@??????>><;997:>?:7:;;=?>===<;:=AA@@E>8;=<74312333344443452013311321:EE=43;??BA>84322335779826<:743HWX`J43655668:==<75:7.+,---.01234445444334668:>CFGFFHJIJJGFD<7755678:?BBA@<7671+09=:7>EFD:443688644555679<=<;;;9:<==AC@=56Vk@;FOSOI>12HL:<??@@@><:99872-1:BA:2KoP47f]15A?846:8787439<8776545657861-*4=6893342269:;;:9?@44?NeeB49D<57/.ATQABOOD;65<A>;>@BBCA70//2<@:4364-),-.398444./553/,/0-1?B==6=qs]MAA7>C@:;;>HU\\[UPVT?203;77;:766348==<9421.-.14;C=5799:>B>30362--.)7d|z{kYa_ONTNMPPQX`_VC07=AB;42360.:9124655653220/7DMNKECDDCA@TlnrfJR_D/03<ECCB?:58CFA>@??ADHHC;438:<=;8:Jbi\\LDDED?76:6+-6<=;;:9:70,,/42-1:9420,'&TSTTTSRRRRPPPPPPPPPRSSTTTUVWYZ[\\\\\\\\]^^^]aaWLLPPPOOONPQRRSSTTTVVVVUUUWXXXYYZ\\\\]^__`a^[VRRQOOONOPQPPQRRRRRRRQPPQPOOPRRROMOOPQQSUUQNOPMLMMPRRS[a`^^^XQMORPMMRarpkhQGOQRQPQSW[^aa_^^]bkpo_UQORVZZZ\\_dgggjklqicrtbPMQMLTaklnsqgb]dvs_aputxvjnv~sgkmiknkb^cm{{|~}zrglskqrowxosvyttxhchsvpkortrmryvrqqpppqtutvvhX]qso|lz~xvvusw}tjrzVV\\WY\\epuvy{y[KTѓ[`ihngaUet[ZYTTSSSUSOܕ]ellaa_\\_^aabpril~yvwg]XNOQHFNLW^E;DJOW\\TPOP=cXFFFGGHIKJIIJJIHFFDHIvoCR]t~iXV\\b[LDDJQRQRQRSQV\\XYXUTQPPQQPQQRTTQQRKMaihnl_ov^ZXXxrTXTONPPOOMMNLJHIIS[\\\\UFF\\xps~egaURRFGGFFGDcrHJUQ\\\\ZYX[WYb_URRSRPQRSRSSTVXRNIPagcch_Z[TNNLKMRWUOJHIHS\\TEBGIKJKLNNLHD?>DIJJGGHECBBBBACCEJMLKJIIJJJKKKLMLKLKKKMKS[VFLLJHHIKTTLMNOMGEHIGHIGIRXYZVVXYVQPPNNNOPOHHNG@7;@EHKNZQNKKJIEGKMAAA?@AAA@?;;AHOJRSSSTRRQQPPPPPOJEEFEFFIKEBEEBBDCCBBA@CNTSQOQRRTTUX[\\]]^`c_OGLMGFFDB??>@BCCCCCCCBBDDCBBB@=9<A99NMC?DAQzjTRPLIGCA?>=;7531001348CIDA@AAAA@>>>=>>@AAAA@@>;999667<>?>??@AAAA@@>==;99=@BCC@?BOa_OFIDCEFEDDCCEEBA@CCEEEDD@9;DD<766464558::;;;<>ENJ=9>?:;<<AMVNDMYSMPQPMHB:989::::987899999::9999999:<?FE@LMH=@@>?==;964433322333336::999::::::;;9889:;;;<<;;6P~Q3774679:853333456544334456667::6346653356;@AAA?ABAACEECA>@AABBABBBAAAAAABBCCDEFGJLKIGFFA?@ABCA;:3:[jedb`__`abdfhd^SD?>>@AAAAA@@????@@????????>=;;:;?@<8:<<=>=;;<<;;?CBBA?>?=;:98533333444443332//11013447>CC96?EEDC@9443344:??>>GF9:426?3.2048976678999:9663/-----...011344323333432369;?BABGGGGGEC;6662158:=>;::89:889AC87;<98==:966786335545689:::9889;<??<<=;;1-VoF?<77553-/HTE@ACAAB=9867750.02:HI70:51:akD003/1466349=>?=:877755774111.-,8A0-4115434:==<<;84,0AS^V4,6=?AC<6;NQB@KM<1/1=HB<>DFGC<2//+1>B:1--//,-.024556779;5-(*/4837BHF4>}t]UILmk@>O3;E<69<<=GW^RNSL:356=GPKF?8557<AB@;8741-.1:Q]E28<<<>@;5332111/*=^aW]XMX]KISIJVXYXZald>08;<65985226610279::732225ANQQPPMJGD@65HZeyiOR`T6256?JJFNXVMGE@76;?ABCHJE;46;;;=9/.NmnovfTTVQMRO9-5;<=@A@AFD70.....1<923550-TTTTTTSRRQQPPPPPOOPRSSSSRRSRSVVWYZ\\]^^^]^a`UMORQPQQQRSSRSSTTTTTUTTTTVXWWXYYY[\\^``abcb]XTRPPPOPPQQPPQRRRRSRRRSTRQQQQRPONOOOQQQQRQOQRQPNMNQPPX`a`a`]XQQRNLKLTgmnzrTHNPLMPRVZ]``^\\\\cihhljbZRNPTWYZ\\aeegijmrrf]cjcXUSMNX`flpje^V`vnZ`ttmu}ufkv|siojhjich}{yzz{ywrlswqopu|~||zv{ub]huvonqsutrtyzurssrrrsttuukeqzuzmo|ywwus{xrkaWXZWZ]fkox~~mvueON`\\]ܗ\\deabe[eq_[XRQQQQUWJZXk|}wnfkcWSUWZlry~`rb[\\VOLUcTJVogMZkicmzgZRNF]iBFGIKLLKKJJJJIIGFBFGtmBKIQ_oiXVPNSMLSXUMOSQPRNT`WTUTRPPPPQQQRRQQNJJISaVZgfcmaZS\\{x`]]]XROOOMLMMKHGMYde\\KIIbJtwouaՇMUQGFGFGAIvg@LQ^ga``[[ZTRUURQRSSTTSSSQX_[QMKO]kmjifY]ZROKKNPRVSLIJJPWRGBFHJKKLNNOQNC=@DHGGFFFDBBBCDFIKLMLKJJKKJKKKKKLKLLJJKKLIGGFFGGGFGFT`VNPONKGGGHIIGIPVXYYYWWTRPNNNOPQROIEA<;;=?EKKkqXLMMIEBBAA@@>??@ABBA>@DCDFHJLPPQSSRONNOOLIGFGGFHLIDBCCCDDCBA??DLOMNOOPPQPQPOQUXZ[cg[KIMIEEDB@>=@BBBABBCCAABBAABBAD=;>E<?IE@>CUWpsSOLHGF=;<=96675458867:?C@>???AA>>???@@BEEEDB@=9898644:ACA@AAAAAA@?>=<;98;<@DHIHCAJ_WFGGGGGHIHFDCDEGGECEEDDEA:6==9;;<<<9547::;;;:9<BG?8EH;8:<>DQQOUYSNWYQKLHA<:;:9::877899999::99898899;=CIGB?==<==>=<=:997776443454269::;;;:98::<==;:9;<<<<;<;4XH,17107:97665444445543323334555797433434467:>???==?@BCEFB?=<?AAABBBBBBBABCBBCCDEEGJLMJJHGFD@@ABCC<1?_fab```a`_cfbZPE<:<>??@A@@@@??>?>==>=??????>>><:<ELJFD@<<=<;;;;;<?ABED?A>778==73333444444332100120134445=@@><@GHB>:5333559UfOKh[46353/2549<;87666789889766662/--,----011223333333335789;;:=ADGIHA746640.16;?=97667:>DC=56=67?<==;85554323445688889879;;<<<<;;;8:9-0>A>40.,*,0239FCBDEEA>9633430-,./6>;5-.4:62,,,-363468:<:8744556655772--.00/.0-2;9668;64=AA;3///16BFB:24569@==@FJC@GE6,./;GC=;CKKB6..1.4=?<5/-.156663211006983//567>;8BFA8GcbA2*(BebBDO27A;58::;>IRRMI</2=ABMXRC921;A@=<9421./,-/9S[C4:>>=><6332/*,/,+3875226@J@FZA7HSY_hnpnU3-4424::65741/.17>EA71566@OPMMRVQJD?:4,.7B\\lRILNF::DMKECTkneXLE>21:@CBAEGC<<><::9409Wmt|ylfbY^X?0.=I@526>>AID4-40-215520.242TTTTTTTSSRRROOPPPOPQQQQRRQONMMOPRV[]^^_____^VQQQPQRRSSSSTTTUUTTUUTTTUWVVWWWWWY\\^``addb]VTRPOOPRRRRRRRSRSSRRTTTTRTTRPPPOONOPPPNPQPQRRRPMLMNPSZ^`baab]VQNNOMN\\v|zrZMLSSPRUX[^`^XZ[\\adeileYQNONPTW\\`cfhikkpseZ[\\V\\]UTTWamrljdX`t{ifu}x{vfejjiw}rkkhgbhwu{}z{|}yvwtqov|zywzzn`]huuqrrstttsvywtuussttuwwuttx{}iu{wtvutuqqr~QXXXWV[prmy}pp{bQWX\\^_Xˎ_Y\\]eaaja[VQPOPRTUQW_ce~ul\\VVWVX\\glvcIJVYV]b[PHPtwOdypl`[nq\\aQFIQvDIIJKLLKKKKIIIHGFEGL{mAMLLPV[[UVTNNPPPRPPQQQOTZ`WMSRQQPPPPQQPLLSSRZ\\[_``bcca̹jXXjxqg\\]ggbWPLIHILJGFIPUZ\\RLPvSBo~uvt]mRWNHHFHP?d{EBHLei``a_]SOUWSQRSSUUUUTVVVY\\YRLLPY]ghiZ^e\\QLMOPRTSOKILNMJFDEIIKLMPPPRQJECA?BFIHGECBCDGJKKJKKLMMNLLKKKKLLJJJJKKKIHGGFDDEEEBFS]XPQNNMJHHIIIIIMSY]]YWVSQMLMOOOQSRKE@>?=<=AFGY{_NMLFDBBAA@@???@AAAA@ABB@??CEGHJOQPNNNOOOOLGFGGHKMKA=@@CEEC@@@BDEGIJKLLKJJJILNPSS[ef[MHKECDB@>=?ACCBBBBBAABBAABDGVSKA?CBAB@<Pvtu~}[KHD>DHMG@636<@CLTRHDH@;<>?>>@@?>@AABCEGECA?=;::;;;8759?CAAAAA@???==;9889:;>DIIIB>DHD@ABCDEFHGDCCCEHIFCCCCD@:8:::;=@@@=;:99:;;;<==>A?8GRGB<;@=BSWUVTPUUOMMKD???;9:98788888889988888899:;;;=>=><;;==;;;;;;:;;:86567546689:;;998::;<=>?@?><;;:;93[M).24467776555555555553334556435677543333236:=<<<>?ABBDEEDBAA@BBCDDDDBBBCDCDCDDFGGGHJKJJJIIKIECAAGC2Ccfaba``abcgfVC;::=????AAAABA@>=>;:;<<=>>>>?>>><:=LVTRNE><=;:<<;;<@ADEA@<7;><??83324444555444210110023424:?@?;=DEA?=9534566JYGCMF512834MK>@;976666677777767896420/-++,./01133344323469;989<;;DKMJ@4466:;5347;>;8559=BGE926;8:@><=9656542112356787787789:;;;;;;:::>@73;@=52354573/MbGFLIB@B<42451,,/2249;43450----/1425<?<6431/243456664200.0231/5CMC9:?D?68<></-16756<<741.27?>?><?@@D=8:<9>DCA;;KMB643757;;951/14:=68?>5,++***+/:FIA16@?62:G<7(-/3IVH?FE24>?78==>><?IH9108ADHNSM9115DJA964/-.-+*((1?D=9<<<>?=614:;3++.154576458<6E]B18=CMZhv|c5-30046889:50/.02;FD<:>=;FNLKMSK>?A<;96322LlXFA>??>KXRANkrfZQKE?88?@BA@CECGIB=:;?@><Jdq~}kajT-*+@\\P53=?96<FCCND/-1242*&(++UTUTTTTTSSRQPOOPPOPQRRSUXYUTUVVWY[]^_`aaa`__^XRPPRSSTTSTTTTUUVVWVVVUTVVVVVVVUVX[^_`bcc`[UQPPOPQRSSSSSSSSSSSTTTSSTVSQRRQQNNOONMOPPRRRRQPNLLMORVX[\\]bcZPNOONMUk|x`LLNNPSWZ]_`[UTV]bdipof]XROOQTX]`chiihhpvl\\TTZZV\\[TXhxwmf`euocn}kcjfcdhmmorrsnikgh}v}rrz~zumkry{|zyzyvlfc`hvvsvxwtu{ztx~}yussuvwyywvvwztkxxxusuvxt{poQYXWVQ\\|}rw|yy~`UrdWV[]XRǴúYY^d_YkgYVQRPORWU[ml~ddkrrhjfeg`UQROS]YHKKJQVY_eWNR_n`ailj]Uhk[fVGIG}zELLJKKKKKJIIGDBDHKGM|kBLJKLNU\\OJXZVTJKRPQRRTRPU^WPQQQRQRSRPPNR]nsrh\\`_aac\\hŞpZdogkp`RU]bmriVGDEEFEEEDBEJLQHP_[mz{zrSoYWUKIIIMBOz`>JHOela_ba]QLOQQQSSSTTSSQPUTTZ_ZSNLKMXgk]]idVNOROOTWRLJJMJCABCFHJLMNOOOQURICFNNJHGECCDFJMLKJJKPSQOMLKKKKMMJIKMKIHFDECBABDCGKOVVTRQNMLIFHJIGIIIKQVWUUSQKGGIMMOOPQNKC??>==>@JHbjRHEBBBBAAA@@@?AAAAAABA@BFILJHIHLNNNNOOPQSQIFGGHKORJC?>BADDCCB??@AA@CEFIHIIKKKKJKQZadXHGFDDCA@??BDCBBBBBCCCCBBAGQYYWVIGC?>?=IonCB><5AWaWJBDKOUY]a]Y_WMB;<>>??AAACCEDEFD?=::;<=>?@?><76=CCBBA@==>=;9788989:?CEDCBA??>=<<=>>?ABBCA>@EGCCCBB?;;::;<=?@BA?>;9:;;;<=>==<7AKLME;:;>MXUUVRKJLNMLGEFG<9998898888878988888899999:;;<<;:;<;:99::::;;:977986422478:::::9:;;<?DDC?;:99:73\\}M.026666655545666655455443445653567978432259;:>?>?ABCDBCCCEEEDDCDEEFFDCDEEFGGEHJJJJHIIHHJIJJNOKD>>FH;?Zfba```bca\\WG;;?@>?@?@AABBBBAA?>979<<<>>>>?>>==9=KSSTSH@=<;:;::9;A?AE=76;@@@A>633344444544443211100244326<@@>>@@@A@95444560.1314630.1GWH<;87667765667767788999983-,,..-.1234455545679;:758;;AHMOD5364:JPH<4259954:@EG@7579;>><<;:866886445556777777778::::::;:99:<<;<CB62BXdXPG8O|PIMF>>FB62783//24424;>73-/0../0,+17?>75?B<:9412467511///1484/189546==75536;7358865641024=>87@>;=?@A;;CABBCEE?:FOD9=713:<;841.5=9<::<:0,11+)''.?RZS6.99+*0998223489558933:=:8AFC>:53A@16=>DECDB;55<II?9994389510./3879::<@B?<>CKTP<-5>:9<BIHA<3/>RMA:;?<5@oX*/5014669<;7310/,.;HJGB<=BCDHIOE:;@BAB?553Aj]BBCB@>AJJFY_MJMKGD@>ACAA@@A<<EGB>>?EJF:<INmjb^>'0/9TQ?GOC>:7BR^gY7*/442/,*((UUUUTTTSSRQQRRQRSQRSTVWXZ\\\\[]`bc_____abba`_``\\TRQRTSUTUUVVUVWWXXXWWUUUVUUUVTSRTVY]^`cded^VPONOOQRQRSSRRSSTUTTUTTTUTTSSRRQOPPNMPQPRRRRRRQNLLNOPQSTUWZWPNONNNN[pppx~|aHIRQSYZ]``\\VWY]ahntvrkbZVUTUX]^bgiijjkorld\\YZTZdbYXhutoffs|mbt~bahecghjlhiu{yojjl}o~~{pp}zz~zyyy}{qhfgchvwsx{yqsv{}vutuwxxwurqstrvxdlsuwwvvvz~sw}]RYWWSQhqn}xuw|~}~cY[[_[YZRVsW`ca]oiWZUSPOSZ[eql^udjlk[m|{xtppvwk]gXKMONNKKLT`]SVXWV\\XOJ^x|gY[X]^SL@r~GILKKJJIHGEIO\\SDHO?K~cBMKLLJK\\XCEKPVRONKJKIFMW^WQTQPRTTTVWXZaelWXfecca^jsedYQ[ooZONPQSZfjaULIHGFFGGFHMPPY]es|zkR݌UXQJJKST?iuHLNGL`jb`bc_TORRQRSSSTSPOLGM_]T\\aYQOOPPana\\ffXNLOMKOWVNKKKMIDA@CGJLNONNMNTWPIU`[QMJGDDGJMNLKJIKQVSMKJKJKLNLIHEIA<9;?ABCDFEBEUadYPQSOLKJIJNNLORQQRRRTWSMIFDBDHMQPLLIDB?>>==?GJVcLCBBBAA@@AA@@?@@@AAAA@BEJUSSQJNKMMMNNOPQTRLIIHIKNORRLGB?=AEEC@>=>=;<ACLMIIKJKKKIJOSZ]VJFEDEC@??BFDBBBDDDDBCBCAHSUOLOMJF@>>>:Pfjv|D@;:@5:Shd^`_XXWW[\\_bdeU><>@@@@AACCDDCC@;879:???AAABC@77ADCCA?;<>=;8666778;<=?@@@@@@A><<<=???AAAA><@CBCCBA@=<;:8=>?>@@?<99;;:<?>><:88<DLQF:7;;KTUWVPAAJONLGGJH<9:9888877887898888888999899:::::;;:8888999:;::88:754234568;;;99:;=<<@DDA<9::;7<dsB+0347766655444566776456544444664555952256?IJGBAAABCCBBBBBCDDEDDDEEFEEFGGIIIJGEJPOMKIIGFHJJJKMNKA::=BC<C\\c^^^_ce]PE?@@@@??@@@BB@AAABBA=979::;<<==>>===<<DOTUSIFD=:::;;:;<;??76=?>>=954344444555533331111/0244127=???>>>:8:74333234432445536>B?<<:86656664666666678789:95/.00000024565555679;<:755:<<BKOC6363-8Vf]PB<7754<CEB857889><9;;:877:;:9;;968766677678::::::::99::9:<@=329Qg_VH8JqULJ@79CA5489522330.16=;81//0022-,16<=8AJJF@82014785231*/2694--*)-2199223227:99;:720/014?C7.26:;=?AA<:=@ABCFHGD@H?10-%2A<873..:C97<:2,)0884204EZ^VOD;<9/))0884342001384116>:9HKD<;4*?^=,46C>9:::66CJD=;<<88?CEA<;666459=>ADAERXZeiR=DC668=FII>17JXXK9;@=4.PyU'.3124447963221.+(/AQM?9<@@??CB>89>@A@966.=_RFJGEB@>AEHKA8=AAA@>?DD@@@@=66:>@AACHG>;:;<_TZ[<:LA,299DI>768@O\\gfS?9<;;:7433UUUTTTTSTTSTTTTUUUTUVWXWVW\\]\\[\\^___``acba```_^[XUTTUUUVVWWVXZ[[[ZYXWVVVUUUUTRONORUW[_`bde^ROONNPRSRRSSSTTTUTTUTTUVTUTSRRRQPQOLORQRRRRRRRQOOPOPQQPONNNNNOOOOMY^R[gm|]NRTSVWY\\[VUY[^agknqsurg\\XXY\\^_adghijjjotn_]bX[mrk\\S`moidivtoz}mccbddeijlllpy}qjhfo}xisywts|{wnigfjfesxsqssnkyzyxwwxvrpnlkjhlz|jflrxzzywvxqTUYXWQZvwg{ysqqvwt{odxV\\]ZZT[b\\hc]njY]VPOOT[grqpk^ےejjqcZ_^m{xmhncXUoѨgYxeMOIFECFRRLKKJEKPJJTfogeaXUPLBhWEIIIIHGGGCFWmo\\JD3W[CPLLLJLSRNNPSRPPGI^mmv^LZRNQQSUZgmmhh]]nO\\c`a\\\\RjwrdKRP]qlYQPNNNLKPSNJJJJIGHHHKMMMNXoyndZtXVOJGU`S`xZCLLHIT^_`dea[VSSTSSSQSSPPNKMWa`\\YURQSRMTc_YfeUQZTVWRQWSLJKMNNIDDGIKNOOMMLMOQRSQPPPLIEFIMNMJIGGIPUPKJJJJJKLKHD@KMOZ_L=CJPOHDLeuvaLNROKKOOLQX\\]]]YSST[\\UMIHGEBCGLOJFFCC@>>==>=HKF=@BABAAAAAA@@@@@@??@@BHJJKPIGKJJKLLKLMNOQPOMKHIJMKRZ\\ZRLCAAA?=;;<?@CJVFIGIIKMLKIIIKOV^ZG@EFF@?ABFECCDDDDDCCCCBGKNRTHDDEBAA>;<=>ADN>;9;?=>AFU`eg_XVUX\\__^_aZ@=>?@AABBBCBBB=868;<@@ABA?@BC>9<AAAA?<=>><966789:<<<<=???@?@>==>>?@@ABBAA?=ABCBBB?>;;:97===<=<:9:;;:<?><;:89=DKPJDC;9@KXYRH:9FQPOEIND9::88888778878888888888889:::::::::8878878789;;98707765678:;;<;::<===<>CC@;<>>;NyvD+13458555565544555775446554444654456:31<DJSRQOHBBBCBBAABDDCCBCEDEFIHHJKJHGGGFGEFLKPLKJHGGIIIKKLMF;855>@;Od^\\^_giZF<?@@@@?????@@?@@AAAA>;9::999:<=====>>>>GRUPMPPI@:;;;;:852159;;==<975443235544443321111/132105=A@A@@>82362012112332243457@@56<>;9865665455666667788::85100012224457655557:>?:756::<BIH=43660)5Qdc]XL=549??9346689>>;:::887:=;:<==;98888667888888899999999;<=:4309C?<618IRJB935<:7678645762/156:::98776536523=HL@;94/0/.158859B>/07;1+15-00+03..12138=>@>60,/11:E=*%,-2:?AEG?769;>?@::C::4*0?>9@8240,1>=55850).;BA:57MdcO:587890).175112.//09F:0/4<<<IG?:9627X\\.'7?;<=?5,3BE@;9:;;;<@FFA>;<<<?CGFEHIKSUUerePG?88;?CFE54Vqk_R?56>G;:YR1.21112420./342/-,)3KO?:BJIC=9655787:;8551=VTOTOFA?98@IT^V>489759=@>@B>50118CC@FL>26BH>I}q>FJLcd@%*-(0>8,/;AIT`h_OJJIE@>?=:UUUUTTUTUVVUUUUUUUUUVWVVVWZZYXX]_^`aa`abaaa``_][XWUWVVVWXXXY^a_]\\[ZYWVVUUVUSQPNMMNPTVVUVYYTQPPOPRTSSSSUTTUVUUVUUWXUTUTSSSSRRPMNQSRRRRSTSTTSSQQQPQONNNNNOPPOPUSMRVYgrhTNQRQRSSUSSUY^de`\\`gnqi]Y[^_`abdfgggijmpqke`Zcz|dWY]hjjz{z{xuqoldbdejmkkjkigny||vidklbc{{wstwb[_elhbmxqgfjkghz|{xuttpjkmjouoopllszzyzzzvxzolsQXYYXUf~nnzpllom||mcW\\[VTtüŒTYcYilY_XPNMQYnxpnmcqejgaotkfhigrxspj`Za\\goOby^PUMXfbPLNEKTPC>EHNNJS_lp^LJNEZ~aHJFJLLMPPMIPXacTB3bXGPLLKKLNNOQQQPPMO}FM[NHNKQ[jyvfTQQnPR][[\\\\WYqfU\\TTcqaRPOPONMLKMMNUWOKKJJJJJLHIaqg`_`[SLIJYaX{oAGIIIGJRX`fea_XRRSSRPPQQONLKIJXaYSTSQPOMNW[Vck[VwmdfgfeZOKMONOPMJIIKNNNMLKKLPSSPOQROJGHJLMKJHEDFKNJIIIJIIKKIGR|{JFNSUFMtlJHNLJHLPNRZ__]\\YTTV[]VOKIKKIIEBEFBBAA@>>??;@CA==CBAAAAAAAA@@A@@?>>?>DLNJCFEHMFEHKJIIIIJKLOONJGHIKMPX_hqiUHCA@AEJMPZab:=CGIKLKLKJHJLMU[RGFFECBBDFEEEDDCCCCCCBCFDTuygYSFDEDC?=;<<::;;<AC>:528@KfkcZ[]^_``ad^C9:>@AAAABBBB@:67:=>>ABB@?>@AB<7:=>>>=<<<;9889::<<<<<<>==<<>>?==<<>A@AAACECCCBA@@>=<;<CB<<<<=<:8:::==>><;;7G[[OGL[c\\M4B\\\\N@67BPQROIKG?;;88888778878888888888889:::::98886657877779==;:85;=8899:<==>==;<=>@BBCEFC@BA@c}L1689764455576644555555455555433553446>?BINRNMKGC@@@ABBBAADFBCCCFFIIOOONIFCCDDDDDEJIKKKKJHGGGIKKKNPE843796I`]ZahlcM@????@@??????@@?@AA@@?=<<;979::<<==<==>DNVRMMLMNG?=;:<<::9;@=<?ACFDBA<53123334443332211013038:?BACC@<4..,)-/..013333333363/2469999756554455666666688752100011123456555579;>=977899:>FH<224540)1Ob`_]O:5::97435668=A>;:::98<>;<=>>=;::9:879988667878899889:;:985389-+.13<FF>:8:;:::9:946:743247837<A@<;9671+2CI:-/1....+/47;5ConB-:A;3Gkh_R6/44//257:?BB=61/1/.>F4'/677:=?HQH73669:9/+7610->_iP:71//.6://6453/0<INF=JedE1,)'%'*-,03525300244>L<..07>>===:986/6bK(6;<?AA4+7A=99869===;>DD;9AILOQQNIKQMHLXkwlN:>HIFBDH@3>rxedT?;EK@7AB730-/463,*.37741/.,0>DACMOMIE?<<><6225444;Unj[WVOGC>?EIVtuK225411259=>:33439DDBKI7//DR>1bK36/?b\\<8B8(0@:/3=DGP\\aVPVUJA?>=:7UUTTTUUUVVVVUVVVUUUUUUVWXXWUSW]aaaefddcccccbbb_[YWVWWUUUUWXX[ab`^]\\\\ZXWWVUVTSTPOMNRSRPNLMRSQPPQPQRSTTSTUUVVWYYXWXYYWWWVUUUVTRQPPRSQRSTVWWXXWUSQPPPPQQONPPOOQQQQSSRSUWTPNPPPPPQQRTV[afbZTSWXVSSW[]^`acefghhjlmool`Y`txmdTYcix~|zwspnlke`ehmojhkmiegfk~vicfddy{yuu~wb\\dliagpkdbehgfiszvv}|{pimojktwxpdqot}yzzyvyyiw|YTZXYX]r{en{okknmyuqP]WSx~LY[ioX[XQONUaqvnljkZffiieceghgqztsugW[h^`[Na`HJNHgcPIRWRKEGNRJKMNX^WMKPINxhHOLOQTX[[ZRLMNR]U=jXHNLLKKNOONNOPNPI^yCMINc\\QX^ac_WOLZX|aLV^]]_a`br[R[XW[heYRPPRTSRRPPQUYXRNMLKJJKFD[nj`MyS\\PJOYXVqwTJMIIIHINT_ggc^WRQQRRQQPQQONNMLKORSTSQMNPPSTQ\\ngaxshiox{gRLQVTUZTNOOOPPNLJJJKNRRPOPPOKIIJLLJGECBBDEEFHJJIIIHGDSNCMQR@kpJEJIIGHGHQ[aca^YUQPTYTLIGHHHJLJEDB@@A@@@@?<BAACCBBAAAAAAAAAAA@?>>@INONOLH@HMECFFHHGGFFFGIMOOLHFFEGMTV]sydUPSSWZ[``ZJ<;?CEJKKLKJJJJJJOUWLDCIMFGFEFFDCBCCCCCCDC@\\~vXMFGGC?=;<77=?CC<8888609Ufkba_^^^_adaN<>B@AAAABBA@>769=>>?AAA@@ACBA?::=>====;::998::;<;<<<<?==;:<>A=<;;<>=???ABGIFCCA@?>=<<FKB<;<<<:9989==<=<;<5@fm]LGViodC?UXI;:9>L[PMFYc?9779877887777888888999::::::998765556665459>=<;;<;:779:;<>>???;;<>BEDCCFFDC@MwzL39:75544356644445544345555666423443445<GMLLLIGEDCA??@BBBBBCEBBDEGIJNRTRI@AAABBBCCDGICFHKKIGFHJKKJNPH<59<72C^_Zej`OBACA@AAAA@??>????@@@@A?<<<<<=<;9;<<<==<BOYXMKJA?DC@=;<>>>?ADGC@DFGIKKIFC@=:74444333222110229CA>@AABAABA6*')+-00234344334332123367998764443446678765431/.//00////123444457;?>:658:;:89CI>2121261)5Sd`WH89<:96434556>D@<:;==>??<;=>>==;;:9:;<;98656789::9778::::96554.,04<BACB=?@<;;::;73485221143126@=96343+*4;4-27854/.-045749^^=1=C:6PsiOD1,340-278<??;5322204A@2/6<>:8;9:IK:/34542/,.//66<PYK764/-053-/3353.-2>KNN[\\C/.00/-')03557431368==CF922-0>=58><;;93*Ea@1?>79;76DC55@A9457987>A;<GOQTTTNDBIFDTgtpS;9AKMC<=<67DgymbQB>:55577650/385,+0589741/0566=HOPJGJPQNQQC2*+07B?Fk|o^^bVKKNQNDRdJ2333552158765667;@CEIC5/*:H=-FmT116+-HQJPT@1;>9?EA@EQ`g_V\\_M<=<412UTTTTUUUUVVVWWVVUUUUUVWVWWVTSY`acgihhhhffffdeea]ZWUVWUUTTUVWW[^``^]\\\\ZXWWWVVTRRPONQRPONMOPRRPQQQQQSSRRRSUWWX[[Z[\\\\\\ZYYYXWWXWUTTRQQQRSSTVXWWVUTRQPPPPPPOPPOOOPPQSTUTRPPRPOOOPPMKPUUW]dhg_VPMMMNQUYZ\\]`bcdfhjkllmnngajusoriSRgy{wplknlhgfeioponlllkkmlmtpcghj~|{xv}majkcbeeedfggfehkfbjuwwzqhgjtuv}xr||mw}xzzzvxttkNXWXZ[aq}}|}{kjxxpmnou}npseTYQpտzTTkoWSVRQ[ckpmmkhm\\qocijkjihhk{xynYSX]VlmXYYUQRIMv{ePZ_TPSPIQXLILJILRTNNLJznEW]ZWZZ]]YVTROQWYGpTJOLLKLOPOOOONPRG\\׌KRYJZ~nTUQINWVTT\\YrRR___`aig`RR\\WVXW__WRQRTSQPQRQNNV\\WOMLIIMLRbl^PE`[XPJ[fS]dF`]UNKIIKTaiid_WSRQRSSQOPSTUTTTPNQRSSQPQPNNPMQcjkqoilrx~s[OTajprfVQRRSRPLJHHKLNNNNOMKJIJJKLJGEBAABCDFHJKIHHFGCCV\\seUCDMOHIuPEHIIGFFCJ[ffc`\\SMGKPOJGECCBBIQNFCA@A@@@@?>?AAAABAABBAAAAAAAA@@@?BMWRRNLLJJJD?FFGGGGHHIIIKNONLGFDEGLQMWv}f[]]^[diP<:;<>ABHKJJKJLJIJKIIQQCAKUNIGGFEDCBCBBBCCCBAHf|lYNLKDBA>;::@@;858:<=>BGVghgfc][]_beZIADA@AABBCA?=67=@@@ABBBCCCECB@<;??>>@?<::998::;;;<<<<=II@9::=<=;;::;<;<=>DGHFDC@>>==;<FLC::::99879;<<<<:=43MijYCFTZ]RBJUG8=9>_RDPq[=;99899::7888788888999::::::998765555653238<<;;;;;8776657<>?>=99;=?@?><AFDD?d|S/6<9655555564234555432235554654334433446=EJMICBCDDC?@ABBCCBBDBBDFIJINNPI@=ABABBBBBCEH>:AFIIGHKONKJNG=<97686?Ya^i_F>@BEECDDCBCB@@?>>>@@@?@?<=>>ADA=;:<<<<=<ESQEDLH=:;<;;<>>>@BBDECCCCA>>=>BGHFC@=:6543332221233AMFABBCDCDHQI404-1=<754433456544322456788865444556679842.--,,,-//....001333457:>>85579::99?C=53212461-<_iZ@27;985334444=GA<>?CDBB@>=>>=<<::;;=AA<9:977889::9879:9::975444433>HNRE><9777788312100//10-358=:965961010/6>>930/1226889675/464,/@J=,)'*01/-/036883134432<D:3400514;709A<0/0000110.-11/29:2-.--./.0367630-+-4?IH7*0764554469<<;48@97:<@G?:;6-/;?7<@>;;9789S^==7./6<@HC68GLD=755526:;AGIJOQPJ?9=>EUfjV;=HD?<622/.08GYe^G<>:301344343377/,3777662027;;;DNNHFHHJMLIG=.')0=JKRn{~sbSGHQSVUF=CEA<439>:43311334755;DF?5.-276/3>519=3+ARNON>6:75DRL>Jcoqk`_b\\MC>3.0TTTTTTUUUVVWWVVUUUUUVVWVUUVVUY^`dfgghijjihgffgc_\\ZWVUUTUUUVVVW[^`_^\\\\\\[YYXVUUSRQOLJKMNMNOOPQQQQQQQRRQSTTTUWXYZZ\\^^\\\\][YYWWWXWTUTPPRQRSRQRQQQRSRPOPPPQQONPPPPQPQRSTUUTPPPOOOQPLIMRSVY[_flj_USQPQRVX[\\^adefhijjkorwupsjbgmjmv]jxphglongfefglvxpihkkjkmrppyjbf|{ywus}}~nile_bfffggghigjrtkcdjpmmh_o~zxxom|q|xzzzwvnVQXVXZ]cozzvrppkilnowv_mevv[ZTbǽұaPhoYOTSTfmjkjljhih\\_hjjklmlq{~zn[TWZVRrxYSY[SROHnic\\VabUPSUPTTKJLIKPSRMMPEz|IV^_\\\\Z[ZWVXWUURRGwNNOMLLMOPPOOOPRSF`RHVTMUdTFGMRQXYVZ]ZbeU\\]^_`ea[LY[VUWOMXZTRSPOOPSRQPPQ_eQLOIJPR`nieYcX[RKWhhYy|EQfcaVOKIIVglie_WSRRRRSRQTVWYYWUUSRRRRQQRQNMMNKTo{thcnxyspdSSct~vaTTUTUQNLIHIKKKMKLLJJIJJKLKJGDCBCCCEHKKHFFFGF>;:=DA>BMQONFz{cJIIFFEDACQegc`[OJFDIKIGDBBA@DMOHDB@A@@@@@@@CAADCCCCBBBBBBAAAAB@ABIPQQKLKJHFCGGHGGGIJJJJIKMMNMIHHHGFIFGio[[][^mW;<><<>ADFJJIIKLJJJKJDCJJCHQUQOJFFEEDCBBBABBCA<UmO???@?<<:8799899:>FMGFWenmh_[]]adVCBCB@@ABCCB@=79?BBBBBBDEEEEBBA=;?@?@CA<::9878999;;;;:;?IMF@;97<:::<:89988<@EGFFA>=<><9<JJ<:;:9999:<<<<<;:9;@^m[GDFJNRHBMD8=8AtdFV|wV@;78::::9888777778::::::99:898764445544459;;::9997642027<?@@?;:=<;::98<BFCCl`=6;9888767666343555664223445455444444434448AJGBBBABA@ABBCCCBBBCBDFIHIJEC?==BBABBBCBBDD>:<@EIIIKNMJD?BB<9549::PbebC7<?AFEFFEDDDCBB@>=?@@@?@@=>ACEDDA=::;<===@A?<?GF@=<98:<>?@BCCDEBAA>=8//413668887644433222115;CHHEBCEEEDDKK=8736=<86434447777654322334777656656788741/**+**,,......./1111359<><755678899:<;543234561.GdgN4278643223457BA<BFGGFDA???=;<=>>=?DIJB:>>777547::8789999876555658GRbdG:100134563/36611230-479;7769;:7203688::2-.21257768413551*-2-)-.-,-00-,,6A:31169:56BE723210/3>?946:6.,4;5/.//-----/20*)*++,./6<92./..,).52+,1322357999@A>;OR;9BKLK?9>8-/9AA@<98966=5:[X6.15=DHIE?@A@BDCA>:5315;>BJOLIHEAB?G[c]QLONMKGA8008=?ESUE67;432/11222566658::857867?A<;@FF@?KSJ@>@=<;72236;>K`m}xcI:=HPTRHCBDHF<57=B?764100121/03<>81-/00102339AD;1>LD<;632225CPHQlvtpfWOX]J=80.TSSTTTTTTSSTSTVUUUUWWVVVUVVVVWZ_badfijikliggfgfda^[YWUUTVUUVVWY]^_^^]\\ZZYYXVUVUSQOLLOOLKKMOQQRSRRQRRQRTVUSUWVWYZ[]]]^\\ZYXXYYWUWWTRSTSSQMLKLOPPPPPQPQQPONOPPPPPQRRQQQQPNOOOPQQOMLNOQPQU[cd]URTVTTVXYZ\\_abcfhijkpspruvrrrj`Zpxjrpotxyoccdcafr~yeahjjjmnil}w`k{wvuqqx}ky~jkgbfhhhhijkmljsn_^``jmdk~}||qjuri|zzyxwlubRWWVWXYdsvvqmkgdefilpyhknjieWVhrĹwSal^PTUWcmiluohigi_nbgiklnoqtx|p^Z\\[\\[WacYWY^VQOiuY]__]WQPRQNPQOMMORQMLNP>mNRUZ^\\Z[[YYZZWUSTExKRONMMNOOPQQSTURK\\CQOKKHV\\JIOTUTTT[`[RotYX[Z[^[S]qGZYXVWUKSYSTWXWSQSSSUVORaaXOKKQaa]\\vRWKQuyij~`@TZab\\ULGHWjmjf^VRRRSUVVY[YYZXVVUSSTTTSSRPOPQMMZjtulegrthccXRaqvzvdXUVY\\VOLKIHHHJJIIJJJJKKLLMMLIGDBBBCGJJGEDCDFECAA???BUXQMTî}w^MJGEEDA@BXca]SGDDDIKIGEDCCCDJNIECBAA@@@@@ABAACCCCCBABAABAAAA@AAAHNNKIMIHHGFLIIIIIIIIIHHKMMMKHIMMLIDC@M|`WZZbgG8A=>>?DFILKKJKLJJJKJD?@IFEFPRQLIFEEDBBAA@@@@?=Lz}~S25Qo>9<937==<<?EJMPI?BQgsoa]^_`[JBBBBA@BBCCB?;:=@ABBABBCDEFD@@B?<>??BBA<::98899989::9::6ARWQMKC9689987777:9;AFIJE>=<<<:8=HC;;:999:;<<<<<;:99<Jb]MAEKIPNEEBE@8GoL[|}rT<==:::::888778789:::::<:998887655566447899999787653217<??A@?=;=;976666<DBIS>7::9999888987555555775545554434433444434511:CCB@?@@?ACCCCCBCDCCDEFGGGC=;<==?A@@AABBCBBA?==AFHKJGB?A:=HG>44;<8FecD6686AMBEGEDDEEED@=>???@?AA?@CEEEED@;:<=<<=<::;=@B@>=<<>?@A@@ABDDB@><;95790+./0112433332222/0:BHJHFCCDDC@<;=9656656654333567999874300/13688999888884/-/-,*++,--././../1011126<>;9865777888:9643346554.2Nh]9/565332113522<?@EGGEED@??@AEIKMDBHKMH?DGABIZQ=7:8889998887668<:@PVdcD4/0/0023403AF;1245300233..02697578535;B>64.-/132,..,0340,+--,0451-./-*,;ME104>?=88DB5;@HH>8>B?:3/13..=A6/-//.,,..021-+++-..-262112000,,5972.**-168;?;9:=AMD6;Pl\\E8122,+2?B=5785:<673B`D/8?CEIIGEB<58;;@DBB>725;CLOIEHMRNAKbbbomVTcga[UHES^QNSJ@=BC?:1,.,-/-1878;;:976899@HE;:AB=4:Q]QINNIE@?>=9543;HSqa62>MTRNE:;AB<778:>A@=<:5100/,.4763/--/0122356:==<;==4.-...00-0@QZjtqg_N=LcUEA4-UTSSSTTRRRQQRSTUVVWWXXXWWWVVVWXZ`fiilmjhkkijigggfc_]ZWVVVVVWWWY[\\]^]\\[ZZYYYXVVWUSSRQRQMKJJNPQSTRRQPRQPRRQRSUUUWY[]__^][[[[\\_\\XYYXVUVVURNJJKNONNOQPPQPQQPPPPQQQQRQPPOOOONNOOQQQPOOOPOPRTUSOLMRVWWVXXXYZYXY]adhjimmotqnuvmltnntr|~~wjabcbcbbq{ggljilkknmynwzxvqommzinzyyvtruxzhjidgikkklkkklgdhprh[Xcry{}~}_N_{}}{xvunwQTWWWVU\\jmkopnjfeefgigefnjctym`PmaOȸRYk_LSV[`ffkuehfgf`upjhiklnomlvvecha[]^]XVXXWUUMc~_`b`\\TPONKJZ_RNPRRSROLNHtRS][ZZ]^_^]\\YURRTC}HTPONMNNPQQUXXXQVjDQVOIKISZLHSWXVVXY]ZOZ}]UXVV\\[F_eMa_\\TSWQPWUWbfb^ZWUVWUUMRhePKPO]pbVdTNKb}qa~IISJVb_]QGHXjmjf\\TSSRTVWY]^\\\\[ZYXWUUVVTTTRPPQQPQ^lcfstpppe\\`^U]nqmje]XZ^`]TNLKHFGIIJHIKKLLLLNPQRPNIFDBCFJIGED@ABENULHIDAZ^VSVs~}iRKGEDB@@<FYaTFDDCEJKIHGFECCCGMLEDDCBBA@@@AABABBCBBAAAAAABAAA=A@<?CCDFGFLMKJHIIIIIGGGGGIJLMLLIJLMKGEHD<PuVSZ[N@>>?@BDGKOPPLJJJIJJJJFA;@DDCCEHIIFEDCBA@?@??>>=A`}ztF:]m*7;88;??@EOUSNJHB;;Nmud_]ceR@ADCB@AABDDA=:=ABBCCBBBA@BC?<<@@===>>>?>;;;889999::999989EVW[cb\\PB8<=?DFJJ?9=AGIF><;<<;97BIA:9;:99;;;;::::9:<?U`UOH_WHLI>FXM:Jdy]\\~ntwiKFB<::::89999889::;;9:=:878887655566536888877665569::>AB@@?>====9534438?AHA768999:9999:98666655766567875532233332445535>AA@??@ABCEDCBCDEFFFGHHIJF><>>><<@@??@BDCA@>>@@@ACEA;=BH@<FLH;9>>:LiU21441>TMECDCDEFGD>=>>>??ABBABDFFEEED@=<=><<><<<==>>=>??BCCB@@@ADEA<;<;:8;=;3/2244322222222206HJ@AFEDDDB?;866664444444555555677777543212235669:966540)&)/1++-//.12111012100//058;;:85677788887654455442-8V[;-56333221341.3:AEEEDEECA?BDJMKKFDGHIDCKICIaylD38:78999988879=D<>JPXU?6520012205DJ>2/158542100/-.18<::7449?FIHGB3+/5;6/+,0010/-,,.0//14/+*,++177,,7@928B;12G]ZP@=D?411/-*+4>95520/-+)')26461,.14.)*.4?=/*+)(/:?:3.+(*29<@C=1-478439HWC-.-&(*(-6:64<43@?7:64L^;6A@>BA@>;9::4248>DE?;=CGGDFJLPVPCIR[w_U_ddfhdZWTDGQMSUSPTWOID:51136437:7434446<><;;<:932I\\XbjVIGA=<=>=97:66^]24AKQSNHB?:23:978<@BC@=<9:97227974341/03653775429BC;51.-,././-/E\\hgZPRMBVxt^K70UTSTSTTTVWWWXWVWXXYYYZYXWWWVVVVYckjjkkgehklkjghihfc`]ZYXWWWWYYYYYZ\\[ZZZZZZYYXWWUSSSQQQOLJJLMOQRRRRPPOOOMMNOQSSTW[_ab_]]]]]`ec`^YWYYXYXWTQOLLMNNNPPOOQSSUUUVWWSPQQQPPPOPONNOPQOOPPQSTSSRSSOLMQUVVVWVVX[\\[[\\aehihlppssjchffgpuv{zxm`^`abfe`b{xajlhnqpqmp~~{yxomkqnszuorwwxxtquncjiagjlnlkjlkd`ba`bbep|~ydU\\kwz|zxxvvdUUUVVUReuiemoonkhfefhhe]\\cm{iefvxT[dPföTWk`MSTY^`_hzlfhfege_hhhiiijheftsgmnd`aa`[WYYUQSJhe_eaYRPNNESndTQRRTWTNIKV{[O\\[[]acb_\\YUTQSSEFUPOOOOPPRUWXXYOVpLZZRJIKJKRSQVYXPTZWWXTO}dWXXW]aHh]Sa\\XQPRRPUVYjmfee`XWYVWPLZc\\PNNWlogp_XGXvq]OCO_wmZ_hYJIUgkheZTRSTUWXXZZ\\\\ZZXXXWWVTTSSRQPPOSRMcvjfstsnf_bd\\[hngca]\\^cb]XRMLKHGGILKJKLMNMMOQQRSSQOIBEKKJIGDFEA=MYPIJHIRXVWXQUbcgn{bQKGECB@?@AOZN>CDBFLLKJIHFDCDEJMJDCCBCA@A@BA@B@BCCBA@>AABCCBBEA<::>??@@GLKIGGIIIHHGGFGGIJKMMLKKLLIBEHGC@Qxz\\TXP@?AABEFHMPSVUNKJJKJJJHE@;9<?@?ACGIGECBA?==>>?>>>?M\\^k̾4.B<;=?ACGRYWQMJGD>:8\\ype^bgS>AECAAAABEFA:;ACCDDCBBB>==<;;>A<:<=<;:=><::889:9:<<::99::<FNXdmlf^VRPUXYXNB:9;>CFA=<;::98=GHA?=99::;;;::::9:<>DXf~rqUMG<HWR<GW\\uiejYksn^NB>;999:::998889::<>:?;:877865456665558876667877:;>==BCB@>>=>>?9424568;>FE:689999988887667877666667766753225543344557;AAA@@@ACFIGJDBDFJKLNOQUWOB;:;<>>>>@=>?ADEA=<>@A?<:7?EFKJ<6>FGA?BA?SaWQ?7579K_\\OKKJGGHD=<?>=?@ABBBDFFEFFEEDB?=?<;><;;<<>?@@@ABCCA@@?@BC?;:;;:;?BC6/344542022223234<NM95@EEEEC?;87776534445565554446666655556643211796223430/021.0455666666643320../1379:86567778899776444323/-@S?,15322221231038>CCCDFFFB?AEJIEBBCDEDBHLE=?PNJ=79:99999888899=A939DGB;:50./2222CG8/../488865544215<?>;57EJHIIIRYE02;C;=KLG>52//---,***+,/.(,.,+251484.8RI*,MljT;497/,01/)*9B=8751-*+.1*,99=;/-/0/*(.=F<,,312411354,*04;@BC>0+,/223:;3)'*)'*/1,-111419C?:::16VU9>B<998556==3/457:??>=AFA::HRQUQE:Fa{xZSV[_cheWC:Uhb^ZTMZpse[TJ;355//=?5011//2424972/11*2Lf}fC<=;;;<@C=543.GiJ.7;AGQXM:0-17868>BCEC?BDEE?:6347:<<74556546777?=:?A@:4.+,,,./,0HYQ@AMKE[|iD20SSSTUTUWXY[ZZZZZZ[[ZZZZXXXWVWXV[bb^`ba`acgijjijkjhea^\\[ZYWXXYYYZYZZZZZZZZZXXYXWXUSRPPPNKIIJKMNPQRRQPOPOMLLLMPSSSY_cd`_a__adhhhibWUXZ[\\\\\\\\ZUPONNNOQRSTUWY[[[\\][ROQRQPQPQQPPOOOONOPQRRRTVVVTSRRSTUWVVX\\`cfghjkkmnoqqrsthWPUn~yuy}{uttkb``bdfhf`decihrrjo{~~|{zyqevox}yurrvsxtnlchgbiijmjjklmga`dg_b|{utyztxusrnnqtwxx}yz_VTSXVTSp~pmopomkheehihe`baY]bgcjmuv]xf\\WXVgeUXUV\\_`fhcgkgeghjc_cghijnos~ueejjffe`[Y[XSPOPPWyjY_c^URQJPr|cVRQQSSMIGKPbjHLS][\\][YXUVXXWWV|CUPPPQRSTWZWUXUD~ETYXPIHIGISVSU\\YTSTTSTSO`v_[[]`eXwWS\\USSSQOQTTYbeehhb]``YTRRPYdWLO[iiXOFewZpjJ[MjtSO^cUIOdmhdZSUY[ZYYYYY[[ZZXXXWWVUTSSRRRQQQSNH`dVcklgcehf`dgd_\\[^djf_XTPLRWOFHJPQMNPPNLMOQQRRRPKGKNIHHGDKKHEINPLKLMRMMOUZ_\\[[\\toaQIFEECBAADJJE>BA>EMKJJHHFCBCCDJPKFBBB@@AABA;B>BCDABEB@BDDDCBEB;;:<@?BFJGFIHIIIIHIHHGGGHJLMMLLKKJHGCHLKHDWh_YQB?BBCEFINRUVXWTOJJIJJJIFB@<8:8;>ACEEDCA@>===>>>>>>I=;z,BE?@BBEFIRXUPMKGC@>@Bqi\\ceR@ADBAABABCCA;=CDDEDBA??=;969@A@78<=<;:<<::9:::<;<=?>>????>=GRdmhZSVXQQWTMB=;:98=EFA>768:98?IKD;9:;:;;:::::9:;<6Dq|iOC>JQM>COHfiuwPFcomc[HB>::::9:9898:=A@<9=@?<998765456775666655779::;::77;BCB@=<;;<:74357889<FF96678898887645578887666677655554455455444:BDBCBA@ABDFJHHDBDLOQTTTX^ZE742469>>??>>?ACEA=;<>><:97:BKKE=657<?@AABCBVj^LEEB?Ocd^`^[YVLD>9?=>@AAABDEDDFFFEGEB?><;<<:9:<?@BBBCBBCB@@@@@>==;989;?FK?2224443222223337?GM?3=CEJGD=976666654342344444446666753568876546;<;:;=?CGKLKC?@C@:76799::9665431/.014545557767:<:9875443322.0CF2/4432221221026;=?BBEGFA>@DHHB??CEHICEC<;73246::9999888877789;7.-776662/.13449>1&+/++29<<9655422699:73>UTJCDIYk_=/793AjjK>;841/-+(-3-.789;918;<B7324:@Ta?1Nck`F3063-,--05>B?72352,/:FL>7:7751/00-,0;@>?FJKE3*,-,/14;<;=BH@/*)*1548<5230-,2=?1,0/.+1AC=68:5-;^O@LF:;7225:AB;67668::8?HB<2<SSTT?4do\\XY]adliQOiqg^SORapmsrXSO3-646>:11220/2216:8331.*%5bkG8<<98:<?>:33;63`e319?GZ^A,.0-29;=@BDDC@CFDA>=956:@A>?@A;548=BHKG:28?@:5.)*+,.0/+8KE8?IFDPZ]O4,-SRRUWUUWVVXXZ[ZY[]\\ZZZZZZYXWYZYYYWWXYZ\\\\[_fkkllkllje_[[[ZYXZZZZZZZZZ[\\\\[ZZZYYYXXXUSQQOMKIHIKKLOPQRRRQPPOMNMLNQRRUZ_aaabbcdgjmnqpfXTXXXY\\__[XVSPONPSWZ[ZZ[][[^b^TONPQRQQRRQPPQPNNOOONPSUUUVWVSRSUWX\\_`_ahkjjknooonpqpvueXR\\spaipkciliihca]m{cahqocew}|xywopڸzzopmklfhhhkhhihiic`hkdbcbq|y{tllpsqprx~|xsveSQNQZWSiy}tqtsqpnmjjmqnfadf`d`Mcblmjh^Vv~STbfZ]]\\\\__Z]bjuojlno_X^ekov}gU[eheed]YXWTRPNROAYpUXeeYQTGfhSMPQQQRRJLLL~qL[ZXTTRRRRTUXSK^puCSRRQSTVXYWVVWKaILUWTIFIJJJMTTU_aWQROORUZYfn_^accZ~RV[UUXYWRPQRV]egbemprogdaUNS_ZNJISgwcTKMS_wK]`S^h]OFTe`LI]ljaWX_aa^\\[[ZYYYXXXXWWWVVTRQRRSSRQOMROkfSbjjfglpld`\\Z[]agmf^YTRMS^YMIGO[UPONLJKMMNMMLKJLLHEDFFFHLNNNNMMNQSaXjUSQS[\\ZZ]\\`OCCBEFCBBBBA<6?CAFLJHFFEDCBBBAEMRIBA@@?@AA@A>=ABCCIONDCEEDB@=M[SQA9?DKHFIJJJIIIIIHHGGGGHKLNNMLKJHA7>NWQFDR_dUAACCEIHNVWYXXXZVPJGIJJKJGEB<;:;;>?>?CCB@><<=>??>>AC8D8ECBDEFIJLLLKKKJGC@=<;D}wbZ]NACECAAB@AA@=;?CDDDDB?=<<;97;DC;9:====;;::9::<<>>>?@BCDEECB?APgriYUWY[[VHB>=><<;;CGD@;9:;;77CJB98::999989999::;:8IoaHA?EIF>AJ=PdkW?3ShggcRIA=;::999898;EI:15<>@;9985554577766664457789886627>AA@?<:9886555676788A<444666766655445556665566778645654464556557AFEDCCDBCDFJIFBBDLOQQSQURH71020359<>?@BBB@?>;9998::98::>KJ@835:>=;=?;9Smk^XVTPOZbeghfd]ZXO?=>?@BAAABCBBEFEFGFFC><<<;:;;=@BBBCDBBB@@@???==?>:89<?GNB321002233222469?AED:6??EJGF<67666666448<86444444445788999:::;<?DHKKJJIJMQTSQLHINJ=678888989:888851/02105668778;=<;:765433133,4B;0354222122212677;@@CEB??@BEEC?<ABIMA9557788887999:878889868;82.+/011.../3678:2')..-.4;@@8444447975312AWYPGIP_mmL*..-/BI=9:963117>PbSAGBKfZ<EH?A8663AJEMIQ`[beW?254.+(-7=;96.).=EB70:RK23--5874/,/15ACBS`]H952-&.?FFA<=FOA*(--4898952:>5-5EC2073**4B=753330.H^PTN?=:38<=BTZ9453227=FIFC:8GOVP0IqvyaLOUWYY`aTXd_[XQR]keVnjV_>-457302333101118?><@9/28;HC9>AGI=3147776;7)DlM6INO\\S4(/23;DD?<<ADB@CE@:;>>?ACGDBJG<8538@EFE;67:::72/++-/020+3EA:CKMOK?870++RRSVWVVUUUWX\\^][\\^^\\\\\\\\\\\\[ZZZ\\[XVWYXXZ[ZVZdllkmooookf^YYZYYZ[[[[Z[[Z[]]\\\\\\\\ZZ[ZXWVUTQPOMKIHJJJMPRTTSRPPONNNLMPQRSTW\\`bceffilnppqup\\RQPQSWWWWWWVUVWZaggd_Z\\]\\^cd`XPORRRPQRPPQRPNNMMMMNPRSSUVVTTSTVZ`a[W\\ehghknkjkloqqstusc]lz~zy|dgrggvxnfccebhhahmogbj|~|qӖҥ|xuoffggjkhggdaba^hrrkdj~{xzrjgnvwy||~iqo\\m|^Udntyzouzxyz{zxy|}rhjmfRa`rmouhyh_^eMTae]aa`^^_ahuw|yqjge`[alpwnUSZ_a`a`[YVTRPONRUJQtVSah[PNLfpQMRPPWcgYQQBwvOd^VTTRROOQPQKSdftFQRSSUVWZXUVVULQGSQRSKIPRRSRXjlhoha_ZZ^a`[U[{}a]```XtqOVXW[]^^]ZUTUVafenulknmjljgaUSPHMkmc\\]bcafOXQNKNSdd^caSLUa^XU_gcb`_^][ZZYXWXXVVVXWTRRSSTTSSRM]p[bjlkmrtnaWY_badhc]WRQKNSWXPHGYWMKJKKJJJIIIIJKKHFDDEGGGJLNLOPLOOS\\b|j\\VXYUTTV^PA>@EHDAA@=CHKSVYVNIEDDBBBBAABDDKHCB@@@@@??<IXB?CKSTPFCCDFEC?I_UbYF>EKHGHIJJIIIIHHHGGGFGJLNOMLKIF;6<ERVNEH\\oX;?DDINOVaa`\\YX[^]SKGHIMMKHD@>;::;;:=BCB@=89:;==>@@2_6=FCEGGILLIHHIJJJHCA??B>Gle]UEAEECCBA@@@?;;@@AABBBA?>=<<=AD@:;;>>>>==><9:=?@@@AABBDFGGEEC@Mm~q_X]cffJ?A@??>>?>?CBAA@=;:96;?B>:;;;::989789::;;8/F}OB9::;=<>D76IZG<5:Xbe[TPG?=;9998898:?BJYinU89876544567766544323554664348>@@><:99866456666566584233655556766444455664566566544443465445558?DEDCCDCCDIJFCABDGJKKNHLF:;=8;7777<?BDFDB<9777888:;98887@MG:48;>=::>?:Jfla^a``_][^abddb`_T?<>>@AA?@AABDFDDEFEFFA==<;::;>@BBBBA?=>?>>==??=@B?99=?BG@32235323322149@DB@<8:>@?DD@:8888886679=D=8654444334568==>>???BEJOQQMKIGEGRTLFEGGA;:97765789;:89<93//1/.36688889==;9875332134.,7;3155322112222479=@@CB>>?@ACB?;9<=:789777889876699999988899:::?:-/00.,./1479:81//./359>BA71.017628;854>T`b_\\_ciqW.,-..-2:732215F^myKPZ\\piL>:9:8995>H=<Njn^TQJ9-...0148;753-&*@UZH24CJ<-(+4<:3-,.17>7,@_^MRF25AFJNKB@CFPB,/49;=>;956>>2-6C?/0;8++7;324/-./,2L[PHB=@AEGC:GYB661/17>A@A@A<9AK81|VVpwbPNKIJJHCBNYUMIIQZenaKqcaL/110024310000017@C?=96BRSDBHD@HRQB2+/58632**UcCMQLNA1-.0:EHC;68@ECDFDA>;<?ADGJIIE:5742457449<::974.,1334331*->DGT[^\\K:785.,RSTUVVUSTVY\\^_`bbaa_^^^^^][\\\\\\\\ZXYYZYYZXUZcffhlqrqqpmg^XYYYZ[[[[[[[Z[]]\\\\\\\\ZZZ[ZXVVVSQONMKKIIJMORUUTSQPPNMNNNPOPQQSW\\bccdeffdbacgeYPPNNNNNNNPRSTUV[chjmi`YZ`cdcbb^UOPRPONNNNOPNMLKKKMOPQQRUVTTTSUXZYWX^b^^fopmknppqqonvzpjnrsvxyvg`kyvf`hpib~sdiklkffqyzsszx}xПڰz}|uebddfijiieagsx{|ryvmdhms}s`Ŷsjeglw{}yyv}uqkant_m|{lly~xk]ebacRPTij^dcba`_j{zi][\\^^alo{z\\W^\\[\\__\\YWURPOPQUWOLwsWS[b\\QLXdqX]YNNZdhg^YExMUWUVVUSQOOPRXg]MfFVUVVWXXWVTTVTXgZMSSMMSQQSTTSNUgnmvwqpprme^Y[Vbg]]\\\\WoiNVWY`eaadda`\\SUev|vofgoruyxm^YTWzrtxqt~qrqa\\PPDHURhj`^^WOORNR]egdbaa``^[YYYWXXVVWXWUSSSTTSPTURW~rxyb_ehiglqk^\\efb___]WPLWQLLXTLGNRNLLMMJKKJJJJJIHGFFFFGFGHHIOYYLFCEMWp}cYWVUXY\\XOHFFDCDDDGUdpyyvjUJGGFDCBBBABCABDCB@@@@A=BTf}LGCCSSMGECDFGFB>C?KQUEEIIHIHHHHIHIHHHGGGGHHKMMKKIID>=BELRPLGQXL@@AACGLSXZVQNMPV\\ZRLJHOTQNJEA?>><;;<ABAA@<;<=?@BD9bU;BEEIJJIKKIJJJIJJHCA?AB=9T`^O?BIEECBA@A@>=>?>>=?@BBBA?>>?CB=>>=@@???BD@89@C@?@AABBBDFGEEEDGe}d]_`bQ>>@????>@@>@BAAA=;<==:7=A>=>;::99868:;;;;;:8OfH537:;;<>809CE?:1CQRMQUKB>=:8889::8=Tsg7889754456776653221133468879>@><<:8876643466554554333334556678854434676567655553444334456446:@BBDDA@ACCFJHDDEEDEFHFHJTQ>@EBB???=@FHDBA=776668:<==<:8:88CJ@9:>@@<;?@;Jhpc^ccb`_]]_cgiicXMBA>=<<=>?ACDEGEDDDCDGF@==;889<>@@?@>;9;==<<=?A??AA<==;;:73279743222104:BBBB>9:=?OX=57999889887:>=65455543333326;@BEDDCEGILNMJHFHDM^d[SMG=54899:::988:9::;;731/--16777757;<<:975543222102531344222232125;@ACCBA?>>>>@@;668789;;9778899::9:==<;:98789884;D33011344356766651-/58<BC@><;977108>@>86AXcje_`it]41026:;<9521/9_kQiu\\VZO>3786678>?;E`lWD:887879;:<97=?<80)'5MUC38?JH2,2499.)-/.460*/@KX\\REJXVNKKFEB?NA.45:>AB>;9;@>238?9/09:5;@5.,-,,,,.*4VL<=AHNLI@12AE:5227<>=<@>@@;<8,[h]nxXECBA>8>RYOD>?CBEfyJ8oq_\\;.0012110.100249B@4.2;LXRGGONECHPQH9/18951/&9i_;AND2.0118>>:66?ECDIG@:<<;<@DHHIB32@B5/571/38944652//7<<855649GNYhjdWE954531SSRSUUSSUWZ^_aceeccbbcba`]\\\\]^]ZXXXYXXYWW[^[[bgklmnnole]YYZZ[[\\]]\\\\\\]]]]\\\\\\ZZ[[[ZWVWVSPONNLKKKMOQTTPOOPQQNNONOOOOPRSV]bbcc_[TOOQMJNQQPPOONKKLMNMMOPT]jlkfYU^a`b_\\_^VOQTSPOOOOPNLKKJJLNPPPRTUTSTTUVUVY^`ZVYbjmnopqqqqporsstnjnlnno}ub`jzp`gqi^k|djlkkfgjfdnoirys|Ġؘ}g\\_bbcgjjlifr{mp}zpvy~wgmx}zehuhcfgrulluxqbed``eSvVSvo\\ccedceo~xgcb^]Z\\lz|]Z_]\\[^]YVTRPOPRTQO[geuTTX]\\QRaex~_V]XRY\\Y^kliTxSPVRSUTRQQQUXYWML]H\\ZYXWXXVTTTTVQFOWRRTSRSRRSSRWe]S\\gjhnu{qefdjaQj_[\\X_iMTUab]Z[[]_[VQWgqocbiqvvvutroka[[ftvvxsonjgcWOSUSUUVXYTONNOWeiedcccbb`][ZZXWWUUSQPPRRTTRRMQUSRZ^Z_odU\\`][affbcfda^[]XQW}xULSROMEKMOPPOLLMMLLKJHIIHHHGFFFFFFNTTF??EKP\\zwg[VUWX\\\\]^]RD@DDER]jw{ucJHLLIHFEDCCBBB@ABAA@@@@A<Jrb\\XgL9BKLJHGFGGDBCBA>>MNHGGGHHHHHGHGHHHGHHIHFJMLKJGEBACCGMTRSOHGJIB??>@=>=><<<==@CLOMLHN\\[VPKFDCB?==>@BAABDFFGHHHDk2=ADHKLKKIIJJIIIHIGDBAAB<3BakJBBFFBBBA??@?<=>>=;=?@BBB@>>>@?=>@??@??AEE?8<BCBA@ABBCCDEEEEEFCNvg^d\\L9=>==>=>=>>>>@?@?=?CEEC>??>@?=;<=>;68;;:::;>;:WtfK<037::=>>=>9?><769:=LRMEBA<8889::8JwL8889754566776432111137:9:;:9<=<:97655543334445455441223345567875444656666777675445533345765:@CCBDEDBBEGGGGFIKHGGFGDJS\\]NBAABAACEHJD<;;7556679==??=<:985:FE?>CBA?=@?9Njof]^dfcda__djkl_SWRMJHDA>>?ACEFHGDDBACFJD><989:;=>==>>:8:<<;;=?@>>>??@>:74321>A887222104AHB?B@8:=GaX878899899888:9753455533333337=CEGGDBEIJKLMJGFFIchhge_QC=<;CILMMLG@859=:99850-,067775579;;;:85543211122111244222232128BFECECB?=<=>??:65788:<;9778::8657=D9-37:;87;F_lR>9412799755544453/-.39>BDEHKOPNHGKMSUOKEDT_`jb^lqV/-/27;;9:;:507]~f[ajcTMOLE=5468CEK@2Oq]:3EHLOKED@83.0?G?9/)%*8;38A<=@835136.(,+*.131/+9PQS\\\\WPKB@?@?8D;+253:DD=4/0:>;<?<50/7=;EIA<51.+*,/12KO68AEHDE>3.6?:2258=FLGC=>ABD8DlWdnUDCB<:::FWOB@=977-:h_4F[WcU5,//1/./332256:?8**7<FRM?=IUPHDBCLK;238950+)Wk:;L;.0244346756AGCDKH:25;=:9<EJG;4<JI9,8E5.442.03227::=<9;?ACIMKR`]MA=9-)/10RSRQSSTVUWZ]^`a```abcdfge`][]``\\WVWWWVWXXWVUUX[^_acded`\\ZYYYZZ[[[\\\\\\\\]]]\\\\\\ZZZZZZXWVVVSPOOMLLLMOQRPLIKPRRPOOONOOOQRQQYcfgh`SNMLJKLMPRQQQQOLLLMNNOONNVbefjkaUUY\\\\Y[ceZSUXXXWVVTROMMKJLLNQRRRRTTUVWWVWZ[ZUV[Y^hnnoqqqrsstttwuchiUVafddemy|bbhhecwxgnpmkjjkhcabfmqtsk|ޯu}|lS[bdedhjjmkv}|{ouz}wu}uphxdcmgedqwuoiadr`eccce`dbPpk[_bcdfs}~w{}yyxpgeuv][^]]]^ZVTRONOPOHJSqiosSX_aZQWbdf_VUPN[fd_ajpo[j]MVRRTTSSRRVWRQKT\\V_\\[XWXXVSTTTUSQTUSUUTSRRPPNQ`maOYf_X^df^XetzjZun]X]QieNT]j]QRTQRSNWlYZqhhlotttrjgehld^c^inhz}|zwutvuqssfZVTUTVUSSRQQQQU]bccccca`_][[ZWVURPTWXWWUVTSTTSSQOMIZw{ntygX[Z[\\\\^_]_egc\\[WNffILPKJFKPUVTOMOOMLLJHHHIIIHGFFFFGHHIGBGOXZd]{{oVKRSVZ\\_cifWFBEEWmsoaVJ=CIIFEEGFEEDDDB@BA@@??>?COP\\MU`[OB@BEGGIIHECCCDCCGIKGGGGHHHHGGGGGGGHGFDDIMKJJGDAABCGMNQTSRVQF@?=::==>>=;;<;::<?ADDHX]]XQLIGCA??>@BA@@JNKKLLHg@9?=FJKKKJJJJIHIIHHFCBA@@>:9HcP;CSFCA@>=;;=<===<;<=@ABB@>?@@???AA?AAACFE?<ACCDBABBBCCCEEDCDFDA\\uf\\[N=:=<;<<=<;<<<<>>?><BKLJKIF>;@B@@BAFD;<=<;868:<;2DSXK>7048=A@AJ@;789;649LNIEEC>:::::98Wa<5988775457667654211138=@<99869:76654333333344445541..022333455654344555556667765324533346775?AABBBEGGGGIHIJKNNLOMJJKNQSWVLC?A?@DIKB86885544568<>??=<:9867>BBFFB@?>@=9Plmf\\\\dfdcb_Z`gkkSBPRQW\\ZQGCCCCDDGGFECCDFCA@>:89;;<====<:::<<:;=??>>>???>>;6333686653110-7C@?=>A<A@@A><;999:;;:9989744344432233358<ADEFEA>ADDDFHDB=6@bldba`]WUZ^^aba``_WE65::88861.,0467AH:4879998665421112111222222222224=EGEDDC@=<==?@=9659==>><;;<>><4+..6IUSB7:=<9<AYtS4632476344654310-+*,3<@AGPSUVX[[\\Z[ZRMPPHG^konfna@,(.15898:<<754Jyy]^e^NKVQE@E<3DYfvfXWBVcH9JUNLE;53/+(,4AC>8/*&',*1IJ>;:721-+13.,591001106AX]``UGB@:0/626:.-118CE<1+/;=@BC<43-4@A@EGGC>5-,/396AP878=;<?@9137500312?NMB=AEJM=`mF?imA75=B>8678CMC:<<8593+N[C<@JWaJ/+/0/-1541/.19@=7>CAGME@CELTLB=8<CA831452-*BbQFE0,4323347:97=DDDKK>:?@?<427EH?79>?9,3LK734430,+3?C>728HQKHGD@@DB95:81/,*,RRQQRSTTUWZXY^```bcccdgjic_\\]`a^ZXWVUUUVVTUTSSTUWWYZ[[WUVYZXVVXYY\\\\[\\]]]\\\\\\ZZYYZZYYWUUSQONMLLLLMOOMKHHMRQPOONMMMNPSSPXekmoiWORONOLLPPPPONLJJLLMOOOPPPRUY]ilb]WTY^`bfe^ZZZXWUTUURPPONNMLOQPPPRSTVYZYXVVWYYX\\gmnpqrrrrsuwwuv{sfogM]oaVd~}}b_gibemknunhjjlkjjjhffdfhflȴ~p}vq{q^^cghfhiinn~yrssqwzƅx}~~˿prx|~dN|uz_hegfw}rmlvwibx}^d^bgedf\\ìkJ_h^\\c\\]svv|w}q\\[^^\\\\YTSROPRPMNTsvrbWaigZR]ege``]TQZ`c_Y[a[SYhGSOQQSUTRRTUSSU]Z]_\\\\YXXWUTUSSTUSSTUVWUTRSQOKS_gbT]i]QUYYOMU^kbxqkr[XZNz\\KUbeYVVQNKPLjqIP\\luqkigfcbadfghfczlttx|yvwxz~|sng\\UVUXXSRSTVXYX[__````]Z[[YZZYUPYbgljfaZWTSUUSQOLOd}|cbxpa^_daZXWW^dc`ZXRPxziZPLQXQN[cVKKNNLMLJHGIJJJJGDGEHIJJJHFMXbau`{zqxnLEKOSXY]\\^b`TJJWov_NLJBBEEECEGGFFDDHGCC??@B@>;>FUQFSUYUO>=ADGKKJFBAACDCBFIGGGGHHHGGEEDEEEECBAAINKJJF?BDEDCGVXVXY\\M>====???A@????==>==<?BBDKV[YTOJECAA@AAA??GFEFGIN4C>AKNMMLJJIIHHIIJIDBBA?>??@DVNFRPD?===<::;;>=<<;<=@BBCB@@@@BBBCCCBCDDEECCDCCBBBBBBBBBCDCCCDFCM]c]K>==<;;<<==<<<<;<<=<<EOPNLJGA>ABAAAAA=:?EEB86;:==;@V_USJ<028<@CHG806?HJ@;NLCCDFB>=<:;89\\S26:765565686675543333:><<;8775665444444443233444564.+,022222344443345555556657=A9112333346666@@AABCEGKIGIKMOPPOOOMKLNNNLNPOGBDADHHC738866656768:<>?=<;:889;>BEB?>><<<;Pmpi^[cfedc`YYff^I8IZZ[XTJDCBCCDDEGGGFFHHDBBA;988:;;=<;;;:::;:;<<::<==>>>B@:6440078555323:=?@:9@==>>=<==<;;;;;:898776543333344349=>ABAA@=<;;9889>?904Mhfb`][XXhtqmjheced]NA:8877641.0224HV</756788876532211121112111222226>CCDDDC@=<:68:9978:<=>>=<@IOKA3/604Owi;2;;7:8.-,.232453/.2520//00+()2@FFKRUYXSLJF?>:35@C@6KlolneK0++-03579:::;<79P[`cQFHPM=;OfV?ZxWXUO@6<IG:4-143-,2>DDA>:72.*''9OEBOG<4.-,-6;/18/.../5;JhfZRJ<6AOC64000*(-14;A:/2:?=<AA715,-BQMHGFEA;;:99=8=P;227998=;3.14/,.20/9C?=ELOK=ru=0;wu5/<?::;7654>HC><::9981AQKU[JG_`9)11/-01/-+,5BMQQQKHMJ@EJ=;KL;8===<;;;763.1@SYSP?,-.*1435:<;<ADELPMMMHB>;<97;<93454-*B]K725:5(,9@@=61<QUKDB=98:<==;89;5..QQQQRSRSUUWZ]ab_bihcegikid_]^___^[XVUUUTTTUUUUUUVVWYZZYUTXZYURRTX[]\\\\]]]]]\\[[YYYYXXZYVTTRPONLLMNOONLKLLPPNNOLJMMKLQSQT_imqseTQROKJLNNNNLKJHIKKLNOOPONMLLLUgpoe[WXYX\\cdcc`XUTSRPPRRRQPOMLNOOPQQRUWXYXUVXY[[bhefmrsrsttuvvvxzlhvd`ocOlw[ahg`diimspfflmkihiheca_dhinϲqfp|wv{l^aeffiiioqrxqrpmnwq̿tsu~nxwosxwrmybifhfgjkmntxl`fibb_fhcddakpSXgdZR`izy|~|zyxzt^Z_]\\YTRRQPUUN[|swSZ}v`\\Ubnjfdc]XVTSUPIKMNRTrIWQOPSUVXXVWUWSfmYYY[[ZYXWTSTSSTTSRSUUVUQRSSRU\\WTYRVXWVVUTTVLLIOUM[aVWRRQYYZ[^_XSV\\Ycwv_KIO\\_YWUUWWXWWbmgfwmpnpx||}ysvrcXX\\ZURSXbcba__^\\\\\\]]__]^`bfkjheb\\VTTRSSRQPQONVa~nQVwsa_bb\\WSRSVZ\\^ZSOLFD^tbNO\\UISYOJIJKLMKIHHJJKOOLLGDHIJKKJIKOWWljiyvwiGCHIOVUUWXX]]TVox^MILIFCDEEEFGGFFDDHIGEBB@AA@;:>HRCKMIB=<=ACEHIJGC@?@BFGIHHIHIHHHGGEBBCD@A@A?>EMKJJF=FHFOTJR^W`gh_QDB=:9:<>?@>>>>>?>>??@>;<@HW]XOJFDCBAA@?>DDDFF@p@8GFGOQONLKJIGGHKJKIDBBA??ABCBECOWCB@?>===<=<>=:;;<>BBBCCCA@ACDEDDEDDDDCCCCDCCBBBBBBBBBBBCCBCFDJ^jW?=@?<;;;=<>><<=<;;<;=DKNNLJHEDDDBA@>:87<CNLD>=;<<>>GVVXWO7247@CA>5/8ITTG>NJABDSE@=><;77Q}mE9:545565686665544458=>;99875555423445444322224445542.011122233343344455556545:E>333333454579A@AABCEFGHHJLMNOLNNJHHGFKKJJJIFEEEGIC82587766567779;=><;::989:<>??=;<:9<=Nlrk^[cgffdb[XccSD=Lb`PA=:9;>BDDDFGHGHHILIDD@:9:88:;;:;;;;::;;<=747:<=@@@BA?<8523<>99:;;<=<9:=@>=<==>>===<<;;;868976655444578999;9789;<;;;962336=>70-Hiib`]\\XT^ptnigebcgjh^H:8866641//.4IQ9065578898764311122111101221226;ABBCCCB@?:410/4;==<::;;<=DOSND87725=K\\X=2767?A2),,/012420/22/..-/0.-0=DGHJHEB?:41/,-217GG>97DKR\\K6.,,,045798899<>67FTM67FQLCCWj\\ADvoPHI>005:94+5Y\\F;159=A?=@DC?5($8IAASUKB5051/95*(.0/**7M_\\PC96537MeQ655011+1656502:?<7881151-B^e\\PE?<=BB@?@:9MA.27856983.051,.6:1,3:<>AB9LqM4,;mP<PC2.5;7530BF:779;<:838DYsdC8TkE,63.-.1347:?JSWUPMKKGBFC85AH=8CHA:<BGC94/5AEQX\\[I>BA:326;?CCCDELUZ\\ZUI?BF=6:;9;:62-)8ED:5397/4>;6875BQPD?=77>CBBA?==@B?;PPPQRRRSTTY`a^XU]fdcfillhda^]^_a`[XVUUTTTSTVVWWVWWXZ[\\]YVVXYWUTVY\\^]]]]]]]\\[ZXXXWUSWZZXUSRPOMLMPQPPONNNPPOOPLJNOLLNPPRV\\bhrs]NQOHGIJLMKJJJIGGIJLMMOOQRSTSU\\abc^TLGIT^dhlnkggg`UOPQQQPQPNMNOPPNPTVVVVUWWVXYYZ`gmolosuuuvvvxxzymlyzsik_\\fic^ckmjn{zz~ofgheddbb\\ewudýxdm|qfsrdceeghjjonkvsutmk|ȃqȡrnutz}jqkgxqmcfdfhhjosoihhkmkgigaceeccccb]\\g`^i_pw{uqpqsfW_]ZVRRQPUVOY|}~Lcda]hxmaab\\VSPNKJILORTP|OlhTQUUX]`]YYYU[]YWUXWYXYXTSTTTTTRRRRSSSQPRSV[]UM[aecb^VUTSSQVFcvQNJkkVVUHTXWVWY^^[_]`]SKSYRXVMLKJJJILKGUe^qr_Vcrwz{trm^^c[UQT[fc]`_]\\[[]ajrux{ztlcYRQOOOOOPQRTSQQSUluyq_MRmo_]][VRRPNMLPUTPTM@=Se`RONJFFHIGGILLKIHHIJKGDAGJHFHHJKIIJKMJWcgrsx^@>EHLVSOXZZ[[P[qqbTOKHFDCEEDEFGGFFDDCFFGHNF@=@EFEFEI[QAB@B>?@@CEHFDB??AHIJHHIIHFDCEGE@@AC<ACCB?AIJIJHJHHEP[_[gPL_mlg^\\]]UG?::>@?==>>>=>>?>?A:3B\\aWPHEECBBB@?BFGII@{7?@IKMOLLKIHHHGHHHID>>?>=?@BDA@N[K?B??>=>===>?=;<<<>?AB@ABA@BBCDCCDDBBCBABBDCBBBABBBBBBBBBCCCECIamP;@@?=;<<==>?=<==;<=>@FLONLJHGEDECBA><<=<A@JNJA><:8:<BPWZXJ7/2AF<1.2?TTIFAKHCCHi[B<A><95D~Y=965555557644444556986874564343212344433323443333587224433323466655545555555543::4563345558>A@AAADFFCDDFGGHHFFHHFDCABDFGFEEEEGGC6/4767765556688:<<;:;;989;<<==<:<:9=AMgtl_[bhgfd`_ZZeU??GLH>=><;<>BEEDFHHHHHIKIEC>87:979:::::::9::::96459;==>>?ABB@;;:79:<?>>>=<<;=>===<=====<;99997688877664438;;;<;63216:=<;:987789<>91.Adod_]\\ZSWiromkkiihjonZ@88887631/)3PK3265565699765410022122122332238=ABBDDB@@?820..39==;::::<=?B@>><9641.*.1112/1971/.-+-/244574320...06<HSNEFF:/+/020/21526FD3/-*+2<90-,-.057798774351047649DNOH@=<95->bgQCA920/.1515Lb\\K:/-.7@>;ALNG>0).;DFJPPLG>A8.1994440,-:MN=3343662:U[=69<HI3/:=00415;;6330330*=dulT?99:<>@@>94EI/15437<93/565348:83149:5-/]U07-A^MSQDEEB;5321D<)*.6;=;984?dfA32<bY213-/6>CDCBBFHGHHIIB>=<<;;>ACFKC8:BBCD=516<:H_WQ_q|g@06=BDGGGEEKU^fgjaOFECMO;:C?840/1.2;=407>>91,.15<B@955:EJD==>>>>>CHHRQQQQQQSUVY[WRMLS[^afjmlhdb`^_bee`[XVTTTSSTUUUUVVWYYZ\\^]ZWVWYZ[\\\\]__^]]]]]\\\\ZXWVVTSRUYYWTQONNNNOPPPPOMNQOOPPONPPNNNPQQQRSVck_POMIHGHJLJIJIHHFGIJKKNPTY[\\[ZUQONNPOKOW]dknrttutqi]SPPOORSSOJKNNNPUWWWVUUUUVVU\\gkiegostvxwvwwww{}{ww]dllb^fklmm~nbehfedddaezrȫll~}cbkiffghhimojptuvxsnwŉlu·glqqswz}Ʃʹieacdsqhdbccbdghhdcdcddcbbegcabbd]o}uopqmviXb^WRQQRTSOWsZvmjpynbdcYPONLJKOQRRUKwTls_UTTVW^^XVUSSWYXVVWXZZXVTUTTTTTSRRRQQPNQRTYYUUcswsmf`\\XUTZXLaOPGVw\\PX~IVXURRVXXZWTZZURLM[bYPOMLMLKLKEQgYlZIYqwyj[UWYY\\]UOQUWVSQPTZ\\_dkuyxwtodVRSTTTWYWTUTUVVUST^ry~yxjVIWndZXVVTPOPPOPQXXUUYL=Q_PKLJGEHJHHJKKIIHIJKHNajHHJFGHIIGHHIIGDK[lqrXGKIEJUSGLPQSQTfbTVWRMIFCEDEFEFGGFFDDBCEEMPNTJGKLKPKIY]SXUOI??@CEFFEEGFDBEHGGHGD@>>BGD@>@A>BEEHJIJJJJJIIHFBIWQ`MA`nkfievs[D67>??><==<<=><=@@98K\\ZTKHHEDDCB@ACFG:f?8CKMMLLJJJJIIIIJIIHB==>??@BEFBBPMAACDBAABB@???@>>>=<=?@@>?@@BBBCCCCBABBBBBBCCBBAABBBBBBBBABCCDDFSWF>?>>>=<==>>??>><<<=>@DLPOMLHHHEFEDC?=;;<A=EJLGA=9999:AJSRL@58FJ?4.8HPLDDFFFDC^u\\=;A>:::|~{W=9876555575434886568:99888643331244545689:;<<:99:;==;;;;:864369;:76545555555444345534467779=>>AABDGGFFDDEECB;9BIHGFEEEFFFFEDC??8137555565555668:<<;:;;9::;==<===<:9BJL`toc[bgggebbdcaM?>?<:<A?;:;=AEEDFFFHHGHJIFD@968:87998899999998666689;<9;>?@AAA?=;77:>@@><<<==<>>?=<<<<;:98777677787766435:==:631138====<;:;<;=@@=940:]rh__^[TWiqssonmlihkodD59:987533*0KB024444359977651//01122222331/28=>?@AB@=><72.-/3587789:;;<:89;<<<:73220.+051++-,.044013457875531.+0BMTRGC?;5246553692/*.73,'++*).41,,.0147754551-,+--07;;DOL=:7/*,,*.11370///0121@WPBA/+*+:KG<>JQJ@70-:SWOJKV_VH9456740///4:5.-5?A><;:58PK96:?D>7;>5/3448720/.-/1*;rcE4465579::70?M43006:=:548478::449:::=7/=P9001KSG?<jfF;B?;9G:*126;>><85BXF/33)CbB(--2?DEB:12>DDEGFB>965778:=CNN;2DLB:<<7357.6`c<JV45:?FIGHHDGKIPalxvZO``H6=LI:4302457645=>4+,22+)-/.,-5FRN@9;<;87;>BDRRQPPQPRTSRPMMLKNV]aejlkhdbbbceffd]XWUTTTRTTSSUVWXZ[[\\]^]ZXWY[]^____^]]]\\\\\\\\[XVTSVYVSQSVVTRPPONMNPPPQONPPPPPPQRQPPPQSRPPONQUTSOMMJGFIKJHIGGIGGHIIKLNRUVUSSQNNKJQVXYXZ`ehjklpqqrpg[SOPSTUPIILMNPSVWXWUUUUTTV[aa]aotruxywuvwwwz~znbguqackjhkslcfghggfeghjyvвo~f\\gmighhikookt~tuuvwqrĀgoqx|vlnquxz{~itɷmnm\\dm|e]adeedeedcdddcddcbbbbcdb``]^}zsryuq~yd\\gaVRQRTQLUo}}{ssvkgh\\RMMMMLNQQRSWIg~Y\\kh\\TSTUXZUUWWWWWVSRUX[[XUTUTTTTTTSSQPPOOQSSRSVYbjkkihge`\\YbS[SOMJQkdParLWXVURZebVOUTMIKJHTXSQNMMMMKLNFMdcveWM_n}usug_`YMT\\TNOU[WQONPPOLP^ffhkqpfa]ZVRPPTVUSZc\\WXWWXXXUTYis~zyu`MO`f\\WVVXRORTVUQVYRMUULDCGKKJHGIOVPKLJHIJKJIDW|PBFNOLJGGIIHIIH@HbrpXLJFGGMPECOMFKa[GIOQQOMFABDEFFGGFEEEDEEEDGHN[\\YONLMNOMLQQNKJAAACEDEEGJHIGIIIJHEDA>=ADC?>??CFHIMNLKJJJKIJIGFFEEHO@jkedinvzr`J=:9=?><<<;<<;9:<>:<FKLMKHHGGFCACDEAGe/@HNQMLKIHHIJIIHPROHB>>?ABABDAETP@?BCCBBCCBA@@@@@@>=<==>?>???@BDDDCBBACCCDCBBABBAABBBBBBBCCAABBA@@?D@@?==?<<>?>?@?=<<<=>@CKPOMLJHHGFGFC?<==>@>CGJKJHFFGA:9;FOJD<<IKFBADKIDCBCDDDEVgwV=C=89-cgVYA79897544556659A;46777778:964222245568<>>@AAAA@@@@BCCBA@@@?=;:=@@?<9766544334444224324566668:9=BABEIKJJHGGC=8349CLPLKLLIFFFEGE832695343444556668:;;:998:<==?A?==??;=JSLWotj`cfhhghiiidR@>EDA@?=;::;?DFDEGGGFFHJJHDA:68888888877888889888799::8:<<:8:?A@>;89;<=<<=>==>>>>=<<:98999766667877766668<=:61136:?>=<<<<<;<?FIE?9524@Wdfc^[WS]mrpommkighkeK78:97765514=5.134458;=:77761../0011222221027;<<<<===<962/..04446789:;<<<=?>>=:86324337;;741/0<JF;89<7335686311<KRSSE==855520117;63/14/00/.-./10.,---./133321-,,./29<8?IB;?=6/,,.-*,,+,,,.6:99AF;84-,+(3IQNJHLJ:750@bgSAJdi[B530.,*-1467725BKNHB<9:718HA4446?B:366558:5-(*,+491F~pC5021--01245.:O:50/7>;8;<8469;=8/2<?;99>F:6>12EB8-FP4H`]J@I:/6557;?=87>A8554-,GI/)-4==:9879?GIHDA@=:97557:=DLJABKIA;865200)&SuJ6e`.-;>>AFGIHFJI4<moD.4ERL8//05<9326::0%&2>=1''((&/?HHD<56743/6@:5SRPQQRRRQNMNPPOOPV]aeijigccedb`__\\XWVUTTTRSTSTVWXYZ]___^^]ZYY[]]]^^__^^^]]\\\\][WSRUYZVRMMRVVSQPONNOOQRQQQQQPQPOQRQRQQSTRRRPMLNQPOQOJHHGGGGGHHHGGHJJJKKKLLLKLMNNOPPPPORW\\acdhmrrpssk^UTUTSQOLJKLMNQSUUSTUUTTTUVV[kvrpwwtstuwwwyz|{zwmhm~xhekplkupdgjgfnqfdinogǬ~gamrkghhjmopmtyttssup~hmosvy~|tspu{sdcw|`S^lsgbhrrdbbbbcccbbbcdbaabcba``aaba_`Xjwnvrr~{wn_]faWQSRLJWn|zxx~xwuj][PMQIFIJPRSTTWJb`L`iaVTUWUUUUXYYWVUQOPOOVZYVUUTSTTSSSRQQOORTRS\\c___^]^cfhjiibFqyLNLKS^lwjRlgQWWWUS[e]RSWUQPOOJMRPOONNLKLLNLINtj]QP^ujXYZRGIEGkqUMPW]ZVSOSUXcoy|z{{|kWTSQOQRPOOOMSbg_ZYZ[ZVTVYagu~nTQYdaYXY]XOOQRQQNQRPNPULEHIHIHIKUYOOPMHIIIJCGfrODGNWSLHFGKLNLKTLCMfq[MIGKEGOQNSOCHUICHIKOPNHDBEFFFFFFEEEDDEEEFFMUXVMKIJIIHGGFECBCCBACDCCC?CIJKLNOLIFDBA?>CB@CCJMLKLKJKJJIKIIIIGHEEB^Ube``l{wuyolmeZM>7:==>>===::;<<<:9:=@FIKJIGDBCDG=t.<INONOJIHGGHGIECPTOHB?@BCEECCALUGACBBBBBBA@@@@@@@@>===;<?@@?=>AABAABABDEEFDBCBBAAAAABBBBBEDA?==@BDCCA@?==><<>>?@@?=<<<===@IOOMLLJJJHGGB><=>>??ADFGHJLKJHEA89BCC<<@?GNNKLJDA?>@ABEDYfznOE<78*TZ<=7588977555689:?A9567423345455468:;::=@A@?@?@ABA@@?@ABB@>@BA@@@ABBA@=:9864433443233334555467678;>@BEHHHIHFD@92243:GPNKMLJGEEHNQB34:632334335566688:::89;<>@AAAA?=??>CQYNPiuod_gkiikkjki\\ICFEA?>><<;:=CFDEGGGFFHKKJFA<667788899886667:;;::;;::::;<9656;<<<<=<::::;<><===<<;:845789:9886579887767:>>;6567:>?=;;<==>===AIKB<9532-8Sgg_[VT]imonmmljhfkmX=79777763232//12115;BE=75651.-/000022113103689:989;<964000-16667789:;<<=>@@>=:8654543479FUPEBISRJEFHA=<>@=956AMORQLA@?64430/29:86443105;60/11023.-,-,*.7:730--.0028;:8:9;>=731279542/-+(*38?@:4383355,);R[_L?=8=<2FgcI>KcYF93,*++,5<;9:>EOSQNF<620/0.55/-268<7/4>ABC?4-*.57835QfI01432.-./012/3J>41.394.276777:=<4/5:988;8/8=2284/.V],,RumK=I9-22238==<;=<97533++91),069;=BIJGFEB><<<;::;:;<>EGELPA8<=854213:7=j\\384*-27;6:FLLJMD.G@#,:JQF2-1249:;<>7/*(-8@@<4,)'(3=;640-,,,4=<=72TSQRRRSSRPQRRRQPRTY_ceggeccca]YSRSRTUSSSRRSSRTVWXY[^bdb`^]\\[ZZ[\\\\]^______^]]]]YVTTUXYXSMMQTTSRRQOORSSSSRQQRQOOQRQQSSTUTSTTQPQPOQUVTRNIHHGFGHGGFHIHIJJKLMNMLLLNONMMNOOPU]cjppssppoklh\\WSOQTQMLJJLLMPRRSUUUUTTSVcrphoslinsstvwxyzzy{yui]kxz}|p^oyhhjiiuqcd|w|yĹvmhtwkeikklopnr~}utssssrͅirkmwz|~wrrsxdp~m]Z`hc]daX``tilxzxj`[^baaa_^\\^ccbaabdba`^^`ba```Zhzyqiv~vtto`^b[UQOOUbr||yyxxz}s_STQKQ\\h_MOUVTSUNUlDUecTTYURTUVWWWUVRYxiUQRUXWWVTSTSSSSRRPOQQUhwqfbaa__achlnjW>dKPNPU[`jmUw]VWUVTTUTOPWYUTRQMLSTOPQONNMMLLPH>f[OYk{dR^\\]]QH@WzjQSW\\a^ZSPRV\\nzx{~kXTVWTRQPNKJJIIWild]\\\\\\YUTU^bo{bTT`f]YY\\YOJOOLMPKLUPLKMOLGEHTZNSdXOQMHHGFHA?`ZECOSPKHGNMKSWQN^bUEGc\\JHNNJKSUSUPIHECJIIKMNNMKIHGGFEDDEDDDCDDDDDKS[XNIHHIIHJMLGEB@ABAABBBA>BGGJMPQNJGFEBADIIIKLLMLKKKKLLKHIHIHGGGGF@O|f^\\\\kyyqjgeimmmeN:7;>>>>=:;<>>=<<=;9BOROIEDBDEFJJ8D[NIMMNIHFGHGIFDHLJFCAABBDFEDIdLCCECABBBBBAA@?@@@?>==<:<?B@==@AABBBA@ABDFFFCCBAAABBBAAACDCC>;;;>CEEBA?>??<=>>=?A@@?>>>===?HOOMLLKJJHGFB?=<>==?@@AABEHIIIPIB98>?<:54DRIDHHD=88<=@DGThnq[E<=;9_[D<55667778879:;<;866654110122478;?@@??AC@>???@AA@?>>>??@@?>??@@AABBA@><;9644334433355545665687875:@C@?BDEA:8;941324:CLLKJGGFEJQYSD;73343343444667778::9:8?DEECAA@>>>AKWZPOgupf]enmlkjjjkfWIDD@=>?>>=9=CDDFGGGGFHKMMIC=7466888887777689::::;;;<====;:;988889:;::::;<<;<==<<:973479;<:99766897788:==9537:;=><;<=>=>>=>?@A@>;;8430/=[ibZUWainqpoopnliprX=77677785112211100/0;B<31220,,.///1221121025788768;:7630222598889:9:;<<<>A@><;8554434441<OPKNSVYSQQOMMMJB<:;>HMPSD;@F=64530/3:94233214<>6005615614553/.6?=80//010059:88:<;95037:96563-)))+2==4/0234:@9+0QbhS;9BB95TgVCDFIE;61*+//06:99>JSTOFA;3/.+*+)*-.(*--41->RXRG@745:>;3-6D?55543331/121230<:10-/0/++253579;:85459;740/110355+,IT=0-UoA?L:020148;=>>>?<6434/)+,)()1;?BCDED@=;<<:;<9:;:869AACQO=:A?>AAABGTN0MkD/9;76:>=;=HONQNE`ȶ?\u001f)9?HQJ86;:56?EFC<78757:<>>6)$,32/-()48.%2MH67:TSQQRSSTUUTSQPQPQTW[`aegdbaa^ZVQOPRSRRQQRRRRQRUXXY[]aefc_]\\\\[ZY[]]^`aaaa`_^^\\][XWWWYYYXUQOOQRSSSRRTUUUTRPQRONPRRQQSUUUUUTUTTTRQTWY[][VPKIGFGGGHGHIILMMNOPPNMMNMNOPQQOKMVborolggqrmnoh_VNLPRQMJIJJKNPQSTTUUUUTYdia^db\\akppoquwwwy{}zkev~z|[`~jdhns|mi{|mcfzs`prkzthjolkoqqruustuuvoՉlrqprx~wqnnsxpehzwmoswmqo\\RyfZegeffgjmnopicefhjlifdbbcddba`^_lzrl|~|zt}zjlsmb_^VSQO[kx}|}|{|||wxdVh`QOQqpPQXXUSQMGxyGL`gXTVSRUUVWWUVWUw{`RSUTSSQRQQSTSSROMN_vljigedbcec\\TKTWMRTWX\\_^h_UXVSRRRQNMOQWXTRPLSYROPPONNLLLKQABygWKaq_MZ`XWWRHNmpWPUY]_YVTROQXiqorttjRNUVVTRPNMKJJKLQ^loia]^[WTTYYepZSXb\\XXVUNELPIJQKI[[MIKGDFGHUfUUwjJJJHGFFGA<HECMVNFNXWXQKTVRMYkl]EJOIIQQONMMQSNJHGFHIHJJJLMMMKIHFFFEEEEEEEEDDDIRfhVHHHHKSYWTPNIEA@BBCBBABCCDFJLMLJIHJLNUYVTRNLLKJKKKJIIGGGHGFFEBB?An{]Z_jvxohggiko{]C<<>>==;;<?@@><><;COTMGDCABF:ig4=JKJJOIALJIJJIJNMJKIFCBBABCFDEZVDCCBBBBBBBBAA@?????>=<;9<BEB@BEGGGFDCB@@BBCDCCBBABBBBBBACD?@;9::;ADECA????==>?;=ABB@>??=>=@HOOMMLKJIGFDB?=<=<=>>=<:;=?@ADDGLD;;<;624>K<<CA=;69<<>BDFIIHAB>=?NeLA<778777899:;;<:85345531013578;=>????????????@ABA@@?????@?>>>>>??@@A@?=<:645444556556665666689717??;65:<:5217:6113336BLKIFFFEHMSVO<4444333345555688999;:7CFCDA@@?>=?EPVURSi{te]eppnmkijlhZIBC?=>??A@;<CDDFGGGGFFINMGC?845666566678889::::9:<<>>>???AA?<:99::9999;<<<==><<;;:999;<==:9976666899::86105<=;;968>>>=====>>;:::<<73327Vlc]XX_jprrqooonnpbE6787777973/134210//.27762131-,.///02211110146666569855334579;;989;;;<<<=?BA?<:86421356546559AKUUSSQLIHG>3<ECFILOD/*>E=654422530//1/138;82./5933327:9730259944420.,.59:;::62..46674233-,158:=<52021/5=<2*DjdG7AI>9BabJ?=8:>?;5/,-,,,*+3CRTMC930.,*,0+*,-00+),2-+Mf^K>:;:9:8/,-366740/./0.-143465420.,,-,/6AIB:79:99955:;8431/006<;5-29??4Wf>FM=566:=<;<<<=><5342/-*((&*3?AAABB>9<A@ACB<8521007?AHPHBINKFGKNPSXR?Dqg?INJICH]]H?HPV__aÓH7IJGJJB;88>A;9AIE<?DA>:89>DB5,.2/,.,(4KP?,*BG548TSQQRSSSTUTRPNMNRXZ\\_beeeb`_^\\XUSRTTQQQRRQRQQRTVWWXZ]aeeb^[[[ZZZ\\^_acccca_^^]\\[[ZZZ[ZYVTTTQORTSSSSTWXWTRQQQONOQSRQSTVVVXYYWVWWWWTRUXZXRLJIGGHHIIIJJLMMNNOPPONMLLMLMNMIGRdmhba`eqyyh`kpkcVLJLLLKIHIKNRTSRTTTVWZ\\XWXWTV^glmnquwvvxyyzwz{{|jX[o|temtxv{oilnswb[`mmg}jhpmlpprttuutvzwqؚhospstw}}~upnpswxz}}~o_`td\\vics{{yxvw~{gfmmnqrqnkihhhihedc`^^a^ax~qzuaeni_\\\\VQJWopoxzy{|zz}usxp[uyUOY[el^SVYYXUQQDsLIRedVPSTVUUVWWVU_zpaVOOQPPRTUTTRLN^t|{zzxsmjfc_SMNBnNOU]_]_^Z]]RZUSPQQPONOPTURQPNRVRNNMLLMMLKMM?Sq[F[smY[eftr\\MPkw^OSVRQSTUUSOKTjrqqkd[UTSTSRRQQOMLLNQRSWgqmc^^\\ZWWS[~uaTQUYWVQOOGEOMHMLKTWPMMPOILMRUW_ofMFIHFHHE?ABDGQUOO[d`VOMONOJO]ikcSGEMTTPPONQQNLJHGHHIIGHIIKMKIGGFGGGGGGEEECCCFLaj_JHIKS_cZVSRRPIDDEEDDCCCCCDEFGJNQSW^]^ZSPOKKKKIJJIHIIJKIIGGEC@>>@Bt`ScopnibdilptzdK><=>>=<=??@?=><;@GJGEDCACB;|:;FGCLnbMNOOMLJJKMNNLJFCBBBBFC@OaEABCBBBBAABAAA@??@?>>><87<EHFEGJLLLHEEECCDCBACCBBABBBBBBAA>:<;;:98<@CDA???>==>>:EG??>=>>>>=AKQPMLLKJIGDCB?=<<<=>>>=;:;;<=@BFGB:8:9426;?;<A>9;?=<=>@>B@88:@>>>?A@>???<;98:;<==<<82265665678<?@ACDB@@@ABB@@?@@@ABAA@@?@AA??@@@?@AA@?@B@??=965666767887666566668749CA;6334333447:63213328EIIHGGGHIKNL<44432334455555999999:>A?=>>>=<<;?IRTRUS_wxl`eonmnliiljYFCD@???ACB>>BDDFFEEFDCFJHCDE<557654555789::9:<<<<>>=>>?????@A@=<<;:9999:;==>>=>>?>>>??@=:98777666899:97568<><;;7458;=>==>><<;::::988:87Shdb\\XZ`jrsqommkjfQ858677778840144430/022.2<8584/-//../110133113445546876445678:==<;;<=<<<<>@CB?<:986423667785477;JMPOJ=;=:5:GMGFGLB3''9C;55432553/./.03332/.-,.6422127841/./2446540,*,4<=;82/1:?>89=80478:>BFHH@6:;50.2564,8`U<JUHDFL_N;516BA=@B8-*)(&#$4KVTI<2-,++(*34/-,/1.,.3..LWD3.18;85/(++-4=;46>?;5,').,-4<9341.--,,4E_jS:;<:93/3:;60.1;62>?@A43BHF?J]OBILFBEIJHC;9:;;;;855210,(')/;CEEDCA==CIEFKG=94/.0009CKLGFLQRLDCCEJKLPLaqTOWPKBHgt]CEMPW_]S``Pryf_onI+*.3<@>@DB;<@:58:=DG=.1A8&(/13?MG;;55;500RQOPQQQQPQRQPOORZ_``aceedb`_^^ZWUUUTRQRRQQRRQRTVVVVVXZ^bd`\\ZZ[ZZ\\^`abdeec_]^_^]]\\\\\\]]\\YRPTTQQRSSSSUWYZVSSSRQONPSSSRTWYXZ]\\[ZYXYVTPNMLMLKJIHGGGHIJKLMNNNNNOONMNMKJJHJKJIM[c_\\enpnt{o\\ZkzxodWJINMKIHIMQRQQRRSVXYWTVWUWY]aefkqstwyxxxz|~ohorq|uyyvz{yz{poqog|sqyZ_^\\jafwronopjoxvvuvrxoŦqrsqqqsx}~|yvwz}}qptuf\\[a~j}wUkwcjtpmopqqomkjjjjkhgec_[]epy}y~yywcgmh]VURMVmxojopoqw|}~urzvnt~aIXa^\\WTUW[[ZWTTDnNGM\\aUQTVWVTUXYQTadzgSQPQSWXUUURTZ`ipsvxvpkg]SKLQEeMOU^^]^\\YU\\tR\\URPQQOOOOPQPOQQLNPMNNKKLLMMLPODfg]{{w||wntmYSUXVVWXWUSQLUkroia\\YVTRRQRRQRQOOORSTSLRetn\\^a`\\YUUxwqeVQOUWUSOOKFIMHJNMJIOOObkOJLLNRZ]YNIIIKNJEDHKLNPTX_`]YSPQONNLMN\\elkYDHOTUSTURONMJGFFGHGFGGGIKJHGGGGGGHJHFEECECC>VkhJGKQY^][YTQNOPMHGGFFFFEEDCEGJOVXXYYRNKJLMILKJIJJKJLNQOKJIGGECBBA?TbQTiojd_bjpvxxy{t_H<;>?>=>???>====>ADDDCB@C@7wt5FIIHLOPQNLHIIIIJKLKIGFECBBDD;DZOADAAABBAAAAAAA@?>?>>=><67<DHFFGJLLJHFFHIKIFDBBEDAAACCCCBA<79::;:748@CCB@?>?==<?Ia]F>?=<;<=<@KQPMKKJIIGDCA>====?>>>???=;<=>>CB>9787418:;>>?<9=@<<==@;BCA??>==<=>>?ABB?=;:<=>??<B@2/777:=>?BEGFFFFGDAADGGECBABAAAA@?>?@AA@@?@?@ABA@@AA@@@=9657999888996765666555=D=779755358756865411343;DGIGGGHGHJK=43652234555655:99889;>>===<<<::<BLRRRRKMmyqdbjoqqpljkgYHBC@@AABBBA@BDEEEECCBCDCBAEID846655556779<<<=>>==??>?>>>===>@?>><;;:::99:;:;;=>??@@A@BB=6677777666777778>BA><;:95324=AD@=;:;;;;;:9::;=:Hcga]ZY[fprommliijX;596677898523444320/13/1985751.----.0001431023332469:6354688:=BECA?@@>;<>ADD@=::96576666655997:<EKJ@36;9ANKJHFF?2,-/=B;4432025679:785/+++++*+1433/,1310.---/59675.+08;>;91+;POD@>8304=ILJDAFK<09A40/01230<QLXzoUsqNG6./3<C>9<?7-*)'&',B[ZPC80.,+)()*./*(*-/02325==2,*-2750-+-,+/68>Rjj[J7362/3>GF;7542//,*/Fb[=:A:3--6<7/(/CA0043=C@CIKE?:6:?FMPSUQJG?87898767753121+(*2>BFFD>;?FJJKJD?@A@?>>6/6EKJOPLLJIB:<?ACGMKL`bURNHEFMRK@EOPU^ZIH[afwxkjziM2&+4=@<989631037;=81,1=9)'0=A?I@1A>-0568QPPPOOPPOPRUX[^eiigcbefgebba`_\\XUUUTRPPQRQQRRQRTSSSTTVXZ]`^[ZZ[[\\_bccdfgea^^____^_____`[SNPQPPRSTTUWZ\\YUVUSSQONOQSSTVXYXXWWYWQPSWVROMKKLLKJIGGHGGIJLLKLMNNNMMNNMMMMNLIIILSY_iqojlt{nTSfmkmjZONNMKJKMMMONPQQRSUUVWVWYZ\\\\[\\ainruwxy{|{|zsltu|~xvvvv{qklkigbe|N^|lX_^^_aqm^svwvqfqxxwxqj~kstrropsw{{|~vtvx}}{~ypmmmpe[de|srv|jR~usk]n|oprooonllljjjhhfb]_gjotvv|}{|xswszzmqrjbXPTZq|{{{nbaesuqbg}oc^]b^gfRRY\\\\]ZVWMh{YPRPTTTXYUTWXZYQzi]|w^QLR\\YUVU[debaa`bgkidZPKMPLWRONR\\]]]YYP^lS[UTRSSQNMMMPQQTQS[UPRRPNMLNRRSTM^h}o}gixthe`VUWUUVUVVTVT[luk^[XWTSTTSRRRRQPPPRTTRPHMejWU\\^^\\WQmzrg]USUWVSRPNLJKKORNNNQQP\\dQIJKLNNPQRRNNUTRRNNQRTO[mh]WSTUTRQNRPMS]dmcMNVTUWYTPNNMJHFFGGFHHGGGHGGIHGGIIJJIGEDEEDC>H[\\JIMSWUTY\\[WMFJNMIIHGHGGFECEGMPSTNIGEFILMMOOKIIIJKKKOPMKJIHHHGFEFHCU`GH]jheelsxwwvsojbRD<79==>>>=<====?@CCCCA@DE>[>IJLIKFQ[NKKLJJIIIIGFEDDCBCDDCURC@DA?@@A@ACBAAA@?>>>>?>:8:;>AABBEHHFEEFGJMKGDB@CDAABCCCCA?;8;;:8988:<@EDBB@?==;Gfih^L@=<;:;:BMPMMLKJIIHECA?<===>>>>@??=;<=>==>;876556;;>=>>;;=::;;;=@A?=>==<;;<>>??A@>=;<<=<=>:@B81567:?CEEDEGFEEEDBBDEGGECBCEFB@>;:;<====;98:::::<;;?BA>966799988887775554545>C701478676787456555213446>BGGGHHHIKK>23654235556667:9888:<;<<==<;;9:>GNPPNMCBbyre_juussrokdZJ@AA@DBA@AA@ADEEEEBAACCA@BEIE:3456677767:>?>>>>>>?@??>>>====>>=<;::;;:9888888;<=>?@ABDD;355656766666767:>@?=;::954227=HIA9678999::;9:=;=Zld^ZZ]elonnljhko\\<5866799:987643445/-1223566321/,,,-//0014300233/035=>77656889=CGGHGGIE@=?AEC>:9::767766766688767=AB4-48>MPKHEC>56357?@<4211-/4:@AEIA4-,.++-/./573++.///.-,*,2>?<:1-4:8=?:21HVF8:81//1BUVM>1:D1'/3..2//1217BG_{pq]=1,).335@?5+'&''&$'0BOG=730-,*()*('***,,.4856976640//..,,04.*((1Dg}]OGKXZR\\e]J?:9:93130-.:F=7>;439=:0+,6E1&+/BPNHABD>97556CNRTOD:85234554113335884.*1:AFF?9<CHIJJE@CIILMI?><?EEJ]eYQOORZ`VBBRRLO`jYIIHGG=549GYabZNTdbbrtect~tx|U+*59<80-..-4<8332.040/83)2FG:MK1@B&&8DIQQQQOPQQRSW\\`dfhkjgeehhggeddb`^ZVUUTSPOSSQPQQQQQPQQTTUVWX[]]\\\\\\]^abdddegfc`_```a`aaaabcc_UONQRQQRSTWY[YVUUSSRQOLLNQSRRSWZXWXWTRTXZYVTSQPRRONNMKHGHHIIIJLMNNMNONONNPQNHFFILPTX^gmms{zfRSZVRX_YRPNMLLLJJKMOOOONOPSUVVXYZYWWYaiikovz{|}}zvev}quz}wuzwv{yupkgijkigccnoamiUa`]^]Vah]lz~yvqgq|zzxyxov|ttvrpssrs|}uonpt{||xrruvuvsnxwguj|ÅrmlltZ|}oaTczrpoonmmmlifdda]]ixwmsytsrpqtvv{|lnqmmjc^WS^py}aXX\\go~}ykwomnkrzuiffiaW``X\\`^]_]jya\\ZHNVYZYUU^]YXPvoe}oYLKQUVTcstnkgd__caXMLLNQEr{KPNRY\\]_`^PjcS]VTSSRNNNMNPPQQNZ^URPSRQQRUWWRO\\}s^vYY^_fmljh\\Y[UUUVXWTS\\e_bpm_WWVUTSTTTSRTSRRRPQSSSQNCHTXTTWXX[T\\{wqqqfZUUXZVSSSRONQXUOQTTSSQPPNMMLKLNQUWUUYWWVSSVT^}rURQRUUSQNRRNOYdcYSTXVWZXRNNNMJHGGGHHHHHGGGGHIIIILKJJHFFEEFGGFFKMKKLNQOOSY_^]QHGIJIIGHGFEECEHLNQSPLHGGKNNOOOJIKKKJJJJKIJIHHGHHIGGHDFWM;@Vcekotxwvvume^VUOD<;>>=>>=<===?@BBCCCCF?^PGHHJIJSZ\\NKKKJJJIGFEDDDDDCDB=Q^G@ACBA??AAAA@@@@@@?@@>???>=<::=?>?ACCDCEFIJKHDB?@@AABBBBBA@>=<;:8:998:>EGECA??<:Kdadi\\G<<<<;:BMNMMLKKJIHECA?=;;;<>?>>>>==<=>=;<9766558:<>?@@?>;768:;<==<<=<<<;;<=>==>====;:;:;:9776455658?CB??AAABBBAABBBB@<<BHLMF72445653442223446768<?=<:8889888776665444447??80134565666543443454224337<DFFGHHILH:24544445556657768978:;=<=<<;:;=DMRQNIE?<Optd]kwurtvskg`OBAABECB@@@>@CEEEEB@@AAA@BEGD<4366789878:>?>>=>>??????>>=<==<;9998998877667668::<?ACEFA8244555545656779<=>=;99:8532432>LMC;=?>?CD>988;<:GbmaWX]dikmoljkneK8666679:;9:;86444469220+-48001011,,0010242014544546:<9<=757889;=AGKMPNGB@CCA<87:;9877677766677789;;.,28FMJGEA>;7688;=;820//-/39A@IM>3242-,131-06413//2001/-.5<B?6/,05;C>72:KM6-20/1.-BVRC5,06-'++++-//0.,,27:BaeE2.+*-5/+7FG3,3850/-+0960.,,,,*)),-,+,/121/5<;7778=?4/212464.,-0:FMge=<?AK\\mtPA<==>60;@>:8<>;668:A<73.-.-.49Jek_P?:==<:998DKGA;831232345662.19>=;:5,-8AB?87?DDGI@<ELKKMHB:;>A>:Kpz]Obk}hKS_X[lqnZHGFED=7:AJVZXTWbjmvuoqy|zt9-8786.*&.:AB<4019BC<7<7.6CB>OJ.:F1*@PSSRQQPQQRVZ\\_bdddefghijiiigeedb`\\XUSSSQPTSPOQRRRRSTUVYZ\\\\\\\\]^]]^^`bccccddeda__aababbccdeefe[QMPQONNQTUSSSSTSSRPQOLLOPPQSX[]^__a_\\[[[ZWUUUUVVVVUSRQPPONMLKLMMMNPOPONORSMFFIKLIHShtwzy{|lZW[XSTW[WQOMLKIHILNNNNNLKMQSSUVWWVVW^\\U\\irssy}}w{yfksn||~}vfr}yw|vmklmljkkigkoq{hdbfa^]^bonmzv{tilmhyz|{|vxr{zzz|yuutpp||rmlnqu{}qˑoorrsuvy}uo\\Ţqonplq{dVVg}}oqqoonllkhdcbcjpz}lk|uqwqpqx}zu~|plb]ZYXSSYfv|zxZXUSWkv~vsjix~|rpsy}ytnfik[RX]]bempb]qSTZ[VSV[`[WWPG_x\\\\l~pMFMPSjvsponjb^\\WRNOQQPE`LQRWXX_krePgsXWZTTRQPLT][WVVVSTZZ\\YQSTSSRTQNLSbtkjooj^UWUTUW`gVMfujjl[RSVUSRRRSSSSTSRSRQQRTTOOGIRVUSSUVYWQ\\f]YYW_pp`WVY]][XUTSRTZVPPRSTTSSRQRTSQONMMRSNUXPRTVXW`ءiRPPQSSSRQOQOOU[URSUWWYZROONMLJHGFGHHHHHGIHJLLKKKLKIIHFFEEGKLNNLMMMMMMMLLOWXbg`UKFIIHHFDCCCEFFHKPSSPKJLNPQLJFIKLKJHIIJIIHHHHGGHGGIHCHLB<CPZelqxxrrrbYU[hljV<>?>>><==>>?@@BCDDIK=BJKJIIKTTTOJHGHIIGEDEDCDDDCCBF_FFFCAEC?ACCBA@>>>?@?@@?=<>??<::<>>=>@BBCDFGIIFDBAB@DEDBAABCC@><;98;:999;BIGCA@@>:Lca`g[TH<=<<:AMNMLLKKJIHECA>=;;:;@>><@???=>>===;98:988:=@?????>;:889::;:<<;:;;:;<>=<<<===;9:::;88756555568:<<;:;<======<<<:98:=GRS?--3100/0111245655688778987788988755545534<B?6234457756535423333343133217CFEDEFIKD8344334445565455688799;>>>==;;?CMSQOLFA>8>^qe[gvuqrwunkiZHAACCCCAA@>?ABBCBA??AAA@ACED@96666888779=><<<>?@A@???==<<=::9767666557766555678;>@DGC954445654455678:;=<;;:98875443100?LPQSTSROI=7779;;6BaiZUYbklormimgN867667789:9:;876443:A521-/7:2/1256-*0122332136886678:98<@:67667658?FJQUOFACA?:768:9878767777667799<9-29BLKI@59=>5-57863/.34/...5;DI>002.,*,11.,,.6@B5.122782141:G;/.12=E930<KE811.,.,,?LA520/--,**++*+/00..25639>0(..,;C34FB51EYZJ9785351+*()+-,*+////.1343128;7768?D<48@@?;1/;EHLMDEP?/42-)/XjZP:9<?:6=CA<=ACA9/18<8:>8/'(8GLXfig\\G::<>??CCFC9019;6443346:=5-3?D?;;9/+8C;759>BBED>>CCDLL@6567;;6YnIAWfyWQa^]ptjYJFDDFA:AFGMWajljjstg`ef\\[oB7>776.+*9EA:;848HSMIC8217=CGOD+-=DBIPQ[XTSRRSSUWY]ceegggjkkjjjjhfeeeb^ZWTSSRRTTRPQSTUUWX[[\\^_aaa`^^___`abbb`bccca`_`acbcdedeedfif]QLMLJHJLMNPPQSRQPPPOMLMNPUXVUX]__cda_]\\[XUWVRRWXWYYXWWVTRSTOJJLNORUXXWWYYRJHIJKLKRfpqsty|wbZgibYZ`^VPNNNLIIKLNNOQNKJLOPPQTUTTVXTNT`hhjqtyulz|yvms|h_t}~xl[Vjyzumnsqlqrqv|wwΪgaiaa^]iz~{z{xxjgii`~}z}|pouuvx{|{zz}ysxyqnoqsvynuȕkhrxzw`Qghptzj[[bdis|}toppqqnjgecdehs}}~|{{knzywlggimrihsznZWTTRRYaky|{y~{{jYUWW[envztrnehqyui[`rupnnh^VWYVW\\eoglSpcZ\\ZUSUXXUVYTQLRvnWVisTHMgqnlljc]XVSRRRSVPSOLPV[ZZdncWUPMSRQRRPQQQX^[UW`^_lupd]XSS[T[rvbkyu~q_RVVUUV]lf^sxqaQV[VSRQPQQQQQQQPPQQQQPQNLIPXWVUUTTTUSNMNOPPQ`smZWZ[]]\\XUUTUWUOORRSSUXUTUUVVVTSQKVf\\SQTWXYZ^QRPQSSSRRRQQOOSSQSWX[][WPNNMLKIGFFHIHHHHGIKMOONLKKIGHIHGEEHNPQPOPPOMLKKJJKNQXcjgWHFJKJGDBCDCBBBEJNRRLJLMNNFCBDGIGFFFFGHGEFGGGGFFFFEDEGECBCJU^ivwogaVX]jvzP==?==<=>>>?@ABCDEFC@~}>JJJKMLGNMMB9EJIGDDCCCCDEEECEZIGJJGEEAADEEDCA>>??????@?728>==???>??@@ACBBBCCCBBDEDJKHDB@ACC@?>==<;:9:97=GHCBAA??Sa\\Z_TUTG=<>=?KNLLKKKIIHEDB>;:;:84:=9=>?@?@?????@@?>=<>?@>=;>ACB@<979899:::::;;;<==<<<;<==;;<>=:876555545769:8789:999:::;:;;<:;=FPM:,0100112222456545643577789;<=;866456778>C>65555445796424323323444333325=BCCBCGHA734443335556556577998:<@@@@?==CJSTQOJD@?:8Ljj_frsoqttqpsdL?ACCCB@@?>>??????><>AA@@ACC@<:8666666889988:<>?A@>==<<;;:887666566667765466568:;>EH=544444555669<;;<=<:::::76656666669CQZ^a]M:5666667973FecTWakorupibN95766777899::97764366::2./5895112482+,.13434678:5/8<8;:59=8566576459=BOZZK@@?=8566788888766778889:;>=7=EJPRA/)5<:3/574.,*-33,-+*.498.+--*')+----,*/?K<)(-16;<:1.3IWF569AD98@JPQM>40-,),<?4.//.,+-,+,-01.3>939=B@5/22/,/EF:EP>'2VZJ<1,088/,-156750-.10.////..,-.233579<?;30/4?HMPMB8462-/32,+-\"1wGIVI>89=?@=70079=?518;9>BA>9>MU[]]]ZO?9;76@GHHH>205=>;863237==3-5A@9896/-;D<979=@B@>ACAAFML?43643/=ssE799=CIICIS[gvw_bXGF?ETL:99=PdkcZY\\^ULMI@:=Jg\\7EC<80.1;?76?<06CMPMJ5)5=BLMI?.$-AIFEE`_\\WTTTSQRW`gfegghjkkkkjihfegigc`]ZXWUUUUVUTUUVWXZ\\]]^_`abba``abbabbbabdedc`__`bbcdeeeeddehg`XVUUVWWSPQPQQPOPPPOMMNNQUURPRTUU[bddba`][[WPMORRRSRRRPOQRWVMKOPQTY\\]\\[\\\\XSNKKKNNPY[XZbfa_Y^f]^dec`[UQPPOMLKKLLNQPNKJMNMMPRQPQQRRRTZ^beflvl]cddut`ad_l}qYTY\\`t{{wprvrotus~{ul~ԹvW_aa]`szuxoq~kqxrieu|~zvuwwwyzz||}szwrpsttw|ȝyu{qcak\\kq`Ydnpoiltrpqoqsojea``dgjw|zz{~jrrgeedcada^irj\\VSSOQbhl|{w{{ndWX[XWY\\^Z]s|tk\\OQRRW`fmnkf__`^ZVY]aOptJ[aZXUSTUVTTY[TRZZP[n[_peSVdmokgaYVUTQORSWNlKLRXZ\\_c^NLURSUQPQPOQQPNLKMSVXbtvla_Xbrequdx|wbTTTQTjeartxgVV`\\VSQPQPQQPQQQQQRSQNLLLLKLUXYXWVUVUUTQRRRTRSeobXYYYZZXVUVVWVQOSSSSUUWYYYXWSWvaQg~sWYYZ[YS_|USTWVTRQQQRPPPUVOPRW[^YSQNLKKJHFFFGGGHHHGHJMPPMKIIHFGIHGEDKRTSQOQPMLKKKJJMOOPPW^_QGHIJIGEEGJMPNJHIKMLKLGFFCCDDGGDDCCEFGECDEEEEDDDBBDEGLMMHHKOVippaTYhot~lE;@?<==>>>>?ACDEEEB>_NAIIHKNLKKHB69ELKEBA@AACEFFEDHNHGKIGHE@ADFFECAA??>>>>;<?<33:>?@@>>@AA@ABBAA@?@@ABCCGJIEB@ACCAA@@@?<9::98:CHDAAAA<J`\\Z_VRVO?<?<>INLLKKJIJHEDB=9555<LZ:/>BECABAA@?@CB?==>?>>=<<>>=<9:877778889:;;;;<====>;;<=<;=?>:8766665368898667888888899::;>>>;=CMH7001/1122222343444335667:=?@><778:<>?AFE=656667673EC5455413323455443235:?CBACEF>535443445556666579<;:<>AAAA?=?FMTSQNF@=>=9AaqhepuqprrrrtfK@BCBA@AA?=<<>>=====>@?@@?AA@<:97666668865456899<>>=;::99878787788877776666655689<EE:65553444679=>>?>=;9::::865678:=>=<=FS_fZ?12355555784<]gVT^iptxudJ74876666799:::888643524?<10334411//7:1+./13369862/:C8054/3863545765679=HX]O=<<;755667788876777889::<?CHEDKQE6EJ>9720451-*-/1/00-+++*)***0:;2-+*-//*)3A;,'*-08CC30/4IQC=CGD75N_]`aO?5-+*-9<631/-,+,,,-.39,6F7,=GG?2---+-9FFCOR9+>R9'()&,<=*):IPSJ6(,20/-,,+*++++,.-*144@RJ4/=HNKDD;02;><886/,./*'Ib81?MQE89=<60-+)+4@DEFFFIGCCNXS]jdXOB51394.<FEDJB417<979963247;4(,792132/2@FB?<9=?=9;CGGJOPMC=755.,RfG57812309>@EOX^YK_VBGBFQE22>QhiUC@CEFIHKL;29DQjņ8@K?:7403:65=3/;58JOQG49FNVRF?7((34159_``ZUSSSTX`fhggijkkkkkkjihfegjkjgdb_[YYVUWWWVUVWWXZ\\]^`abbddbcddedddeddfggfdbaaabbcbcdddeeeghijhgda^WQPPOOOOOOONMMOOOQQPPPPOOT_gijhdb`^]VNKKMNNMMMLMOOSVTPNNOSUWXYXY\\]]VOLLMNNLIILPQKJPZYNTdhedb_ZVSRQPMLKJLOPRPMMLKLMOONMNPQQQU[_abehhcZUUdwp]\\cdl{{`\\illb`vxmqxyvnlqz~zwupnuw^ae`_aktkjgeigkx~xmaap~zxxyyxxz|~}u~|uqstu{wջ~ywoZdrbU[t|vtkmurpqppngdcbdefjbf{|x{y}{mffegjjkihihaYZ[X[^Z]hkq|~l^jucUUUTVVW[\\`vxhTILPX\\\\grtvqjhdeiihgbXmmV[YXVRPNQUSY[\\UT`\\XYXkl^[jsXZnyod]VRSRRQSQVKlMNS[][YRHIOMKMNNNNNOQQNNONNOLPZbgprkd^^cjvxrppnisgxzzs^QPKaei|hSOW[URSQPQQPQRTUUVVVUTNHEGLJKQWYXWWUVVUUTRRRTTRUbh^VVVVUSRRTWWWTRTUSRRPMQUYXTPbxiufXSXZZXTdM`gZTUXVTRQQPPPPRVQMTPIOSSQOMJJJJIGFEFFFFGGGGGKRRNKIGGGFGFECFPXXUQOQNMOLKMLLMMLLJMOYZSJGLPOLKMT^gf[YPIHJMPNMNOPPMKIHFECDDEDDCCCCDCBCCCBBNbWLOWSNIQ`siWbqxx||trS<<??>><>>==?ADDDDB@Eۧ@DGHJKLLJFA<9@LLGCA??@BCDFGFFGFFGHHGGDBBCDDDB@??>???=::<>;9;=?><<<@BAAABBCB@@@@AABBDFGEA@?@AAA@@@A?><:987<ED@@?CGX`][`VRVO?=A=<DNNMLKJJIFCC@>;757BclZ8IKJFDDCBA???@=<<??<:89;?B?966789;<====<=<;;;====?=::=<8:=?<:;;:8755888887777888766677899;;;;<CHC50//01123223334443465678:<>?=>>?AGKIIH=47999:;;>I_W67>:7554455666555548CFBACEF;435444444776645579;;<?BB@@?=;@HPVTPKD><>>:<YtpfnwuqrtrrteJ?BCCDBAA?=<<=====>>>????@@@?=:975555777764445448==;:8776666789;;8777776667765677;B@85667667678:<==>=<:9999876568:<??;77<L`_F2243455567988NcXR\\jqu}vW839:77755679999888865543:?841/0/0///098.-.0135574-8B7+,1-+1632445666668:?LUL:788644556777766668789:;>BGJECJR<2\\rD40-143/+-238CC4-///-*'*7ANT=)*),282,0562010*/9=7311AKDCGHA2&5O`a\\VQ>*++08<;>:41-+,,,/.5N=3N>%3KQ<,*+)+6>CHNPL8.FD.05649A?-*?ZgaI10:8/..,*))-,.//1/*)-.DldORQJ;.4<;7:BB;@HA<;6//6=:255;HRPG<98543289:?HKIMWULGVVD]fQECAA:463/7=:?LI=55;737<<952279/(,450/215CFB?;:=>86?IJIOTURJ=2364@L?=>785AM?:=@AABGIEWUEHLGB==HWfi[E@D@8:GILQ@39BCHd^:>=;<716C9..';I1-BQJJJ=BOYVIEE<3-%\".4]\\[YUTWY[bhihijkllllmlklkigfghhhhgec_]ZWWWWVVVVVVWX[\\_bdeeedeedefgfeefghhiihfdcccbb`_`abbbbbaba^ZVSQPOOONNNOOONNMMNNNOQQONOONP[gjhjhebbb_ZSLILMMMMMNNOQSWUMHKNPTVVY[[]`\\TNLLLMKIJKLNMKNPNKMWchjjhd`[USQONKJLMOQRPONKJLMMMLNQOOQUY\\acefflk_\\aqw_[_Zdyyh_oymll`fuxqhmtxslblwxywwursuichdbfe`_[`wxjc`bcdijmwrg]f}}xxyywvy}}w{urqxedЩ{rlkwzsYtyncZU`uxrrnmljkmpniedfhjigiabvzxyrlonjmnigijiklf`\\XYenuolmi|wnkhTAJ[ipiZTSSUXgtkS]ysRHX_ab^Xdeaffc`\\[bge`\\kpb[WVORZUOQWP\\]^\\OUPTa`]_r~WKRav}{{|yjdkpiaYRNPOQWWRVN^LRZa^ZRPQRNQTPKIKMLLNNLMMMMNOSQJS`hd^[^fmvwmf^Z\\]`ckw~xup_SPuslnWQRUUTRRQPQQPQRUY[[[[ZXUPJIJGLSXXXWWVVVVSSSRRSTSQV`_WTTTRQPORSUUVVTSRQRMD?LOOL\\tsoѥ\\IOWYZY[[WQQTSTUUUUTRQNNPVXGHUcKEKLMLLJJJIHGEFFFGGGGGHFKRSOMJHHFFFECFPWZZTOMLIJQKJNLKJIJKLMJMYZSNW\\YVTRT\\jlfdVOIHKW[XVTTROMMONMLJGGFFEDDEFECDEB?NfiQMWXYUNGJ_e``hv|zzyok\\B:??>>>====?ACDDEDG?H}FEFIMKLJGBA>AFJGECA>?@BCCGIGFFFGGFGHFBACDDDDBA@@@BAAAA@@>?@><>>=<>BBABAAAB@@@?@@ABABBCCA??>???>>ADC@>:8889@HC?=I]^_[X]WPTQ>=A>:?LMMJIIIFECA?><NK@D\\ojHPLKGFGEB@????BBBB@=979:?DD;:8:<?@BABBA?>><;;<=???=;<>=::@A@@@A><;98767998876554577655566789::=AB:323333332232334435656776:>BFKIECEHJH@735999::;GTQF7;>:86678::766666632>DDBBGG:44655445577764545799=AA?=>=;;ALRVTPIA>??><9Psyihx|vrttrqbI>AABCCA?<;;<====<=>>=>??@@@?==;64444677::887645<><:9777788889:<:7667776668977877;>;7689:<><;;:9:;;<;;:9998776569;<><9665@[U62654445778895?[]S]lqvlD8=:777764467779989875546568774/,/00/.484/-.0031477;6**,//-131255566776779?KI:36753345567876557778::<@EKKC=;A9.@S80+'*1/+.7<69LK0#)3::68AJ>?K7()))/DI@?=:6476-),.2567=78GNM>-)$2V[JKXJ.(,276?E?631.-,,/4Bom=Xe2$9R=()-1478>KPF?87C<?IF?78>?1*0Kkc92NL810/0/...--.,,..17AQbVIC6-19@?@?69@7>HHIIC==DA00AGEBCNVOFD?:=CD<41257=LRIAD=@WF*).4A@642131/8KID?9:6349=@ACD@?=:63651336;9558;::;AJJDDOX\\YD.,8;<@77=4222ANC;?DDB??EFGJHIIIFLTQKIID=>DD@>AELK;489:<:Mxt?,:=:9:FI2,-4@</,=S8+A=<GQPLNUTE-\"&/6[YWXY]cddgiiijkllllmmnonmkiihgfeffecba_[XXWVVVUUUVXZ\\_adeeeedcbdfgfgffgghhiiifddccb`_^^___^]\\ZYTOMMMNNNNNMMNONNNMNNNNOPQPNOPNOU`eehkkgfecb`WMIKNNMMLMNORVVRMJKMOTZ^\\[]`_[VOJHLNMLLMPPNMMMMIJ\\nolkhfb]UONONNLKLOQRSSQNKJKKKOROOOQSTY_acfimkghit{pc_aflpkekh\\ene^^_cgintvn`dwyvsttrsrrqkb]acb_Zdvxogca__`a`dnlenxw{|yyyyywuxx}zztqpkXL\\Һ~zwrljlxobbxk`[ZY]ejorpld_dstjhhhkkkjiibfwzxwljrusqnjiikjihb\\[WWhtxsgfjxxd[WUQW`TUba[ZZYV\\r{cQWhaI\\m]ahgbcecehqvyyumgciqh]UTb]VZSQSVMcd[]LMJR^eg_X\\zeZTUbklnqstvvxwj[ROORORY_]noLLZd^RIU`baV[qqe^WRPMMMNNNMLNPTPLT_c`[[`hnpne]^^_^^emuwuqx}ofltxyxpss`Zl~{m|r\\PPSUTRQQPOPPPPRTY[[Z[YY\\ZYSIELTWXXXVXXXWUSSSSSTTTUVWXVSRRQOOOOPQRSQOSWQIFAHJGGPYhqIOWXYWVPUQSVUTTUVWURQPMPTUKLSZOJKJJJIHHHGGGGGFFGGGGGGGMTRNKIGGGFFFALY\\ZXSOLJIIKIILJJIHIJLLJISXTS\\a^ZWUUV^daXTRNJLSWTPNMMJKOPPQRQLIHGGHFFGGFEC@RnnRGRUPSUUPNHO]T^myzvwqkbN@?@??>?>>=?ACDEGFFD:cj>DFINILKIDEEEGGGEB@>@ABCCFHGFGGHHHHHE?>CDECDBA@AABBBCCCDDCCA==????BBBBBAAAA@@??@@A@?@@AA?>>>>=@@BDDEFEDB?:=FH<?SaY^[Y\\WNRQB;>;9?IJLHFFFDCB??=:GE:5KPFIMLKJHIGBAA@@@CCDEC?;<;8668:<;<?CBBBBB@?>><;<<==???>AB@?>ABAABCBA@?<9667:;:;<<;85676555666689:;=:::9::864332222454467666679<AEKPQLC=CGC:7787764;DI\\Q1126766:>?;8677777524>ECAEG<7664544553564443578:<=<;;:::<DOSSRNG@@A@>>;In|igw}uquvriTA>A????>>><=<===<:<====???@@>>@=766665689:99877;??;97779;<<:::;;96678776679:98878::87899;>?==<;;;::;:988888788779<<<:85616KH346554457788986N\\T^osw{Z9<>878876346777889875431468<?=5/..23035385.-.-/15753-+++(.00202545667756667CL;24542235578876555568:9=@GKIA931/-+:83?JJ=576><1/@K=<=BHGDC?:6031(*,)'>YXPNH<37<3*)*/38::16OWOE4+)'ASGBNK<-*384>F=6441.,--Dr|KP`C('=8'(-0542;KG74:<CFOG;5--=B8,(6\\Y->XD018=><4,)'')*,7@IYZLD9.(.9DB:46;38@;KLLQJBBCEC@DGKMI>=HSVVNC?=614/*(,-4940.0;H;672*.;73311-,7FED?:877638@JNKE<8@H=27765530,0;><>CKMC;>DN[_E2CJC=8<@3(+.3;?=;?HHC?>BD?@GHIHPOE<9988:=?FKGADIB76769==9AK8-:?:9?M?,,DQD0./?U?',79>?BMYXUTD.'/7WWXZ`dfhkkjjihikllmooprqokjkjiihffcbbba`][[YWUSRRTWY[\\_aaa``_]\\]bffgfffggghjjigfedcba]ZXWXXWUTRQOMLNOONMMMMNNNNNNNOOOOOPPNNPMMQU[djlnmigffgcXNJJKKJIKMPSSTTSOKKLQXZYZ^__a_XOJJMNLKLMMLNNLLLKS`eiljhhe]UOMQPKMLJLOPSVVTONNLQUQPNNPPRW\\aeffjllnnjkk`gzrjlke\\]b`ZZ]cfhjnuvguxtstvvutrpoha_`a`guypjhfglqrprtuwwrmkq|{yzy}~ys{yytl{oRZ[T]ȫzwtqrqnlmmixqd\\lse^[\\[[]fruqleZ_vuhcflonlkkkhmxxrmkmprqpmkjjmmfb`XVUXchge]]d`TQTZas]NUQRX]^Z`pkTRZ]Wa|Y^jkleiooqsiivq\\WT]zqbQOUULfeX[NQQSVY\\]_`YYypaYZgluiNKVccahsvUadVPSVfnii_mn\\^cg^UTRNNPQROPY^[ZZ\\fmlgd_\\\\^_agjjnnf^\\[]hdYZ]^`a_[csjW]app`_UOT\\ZSRQPOOQPOOTXYYYZYXYY\\\\TFKUWWWWXZ[[YVTTTSTUUVVUUVVTSRQPONMLMMMNNQRJCDHHIIIFDHSeZMOXUVRNMMQVVUTUVVVUSRQOQPPSW_[ROLIJJHGFGGGHIIHGGGHHIFHOSPLIHGFGEFECP[ZWROMLMKHFEGJLKJJIIJKJJLPOR[`^[YWUVWZWNRSQMNORROOPPMLOPPQQPKGGGGGDDFGGGENkpUBHOQQOQTVSVTOMS]nvvvqlgWFBCCB@@AA?>ACEFIHGF;I_>GIICBFKJIGGHHHHD>BBACDDDFHGGHIJJKKIFA?BEEDCBBBABBABCCBDGGFDB?>@@@@ABBBAAAAA@@@?@@@@AABAA?@??>ADDACCDEDCB<;BGAAQ^^][Y[VMRR@:>=:=HKJHFDDDA@??=<646-.)<LLLKJIIHCDDB?@=>?BDCBC?9667<<<<?@A@AA?>==<:;;<;:<@CDEDA?<;>@@AABCCA?>>:45:<=AIIIH>:99899887889;=:7:?A?=854432345655777787:::<;=JQQLB?DD=9::889;<BACC;135667=A@=86677776329CDABE>75434554333434444679998998:;>DOSSQMFBCD?>><Jpwjiuxusuto`J>@A?=<==>?ACA>==>=9;<<<>??@@>>?>;8:;9778;:99867;><99768:;;;989;;:7788887779;987678899889;<:;;;<;;<<=;9666558;;:8;=;:986435;=645456666678990<VW\\pvvnG4><899975567778887664341/0>LJ;&+5654232433.-..05871/-,,-*+//102444666766677<C>2253223456677654578886<?IKD<69651.5?1DifNGD7651.7=?@ACB@912<?91/++,,&.M_XVRE88=3+(),375403N[OKB+*)1CJEDA=5-065;<85431/.--EsISeoeP>/')/24428@8--2=JTN>63+.@HDC<5EC,LZ<18DJC>41;ADCOR[WJJD7;??ADG?4++/0-5A?ZddXD=?<;<DFBBB?>>73?OVOF>3,*'&''(),///047Fc_?00354321-.9A974678;8129>>96/)/DJ;5::874115>AAHKJC85:99HXQT_[PE=A@4+*-6?C?<<EJEBC@AAAEHHFA=59;736?DCFGCDEA848724;GL;-39<:6;EE4'.M]K;AEMZZL>/*.0<O[[VZU7$-<STX\\_bbcghgfefhjlnnopprspkkmjhhgffgfc`____]ZYVTSRTVX[[[]_^]ZWUTUZ`effffghhhikjjigeddd`[WUUVVVTSRQOOPPOMLMMLMNNNNNNOOOPONONNNKKOOSad^cebbegjje^XRLHHFFLQSSSSSRNKLMNPSW]_`cdb]TMIIKKKKJLNNLKMNJHUgnlkkjgbZRMLMOPKGGKQRTYWUUNRYUQOOQVURW\\^_begijlkkmg`pxa]sqc`\\XY^gnmjkrrҰhtvqqtyzxvplkkic_^fx~tjgegkqwwtx~~utz{}~{yz{x}snqsSVXZ^Z\\ҰvromllntwdTlmbxib][[Z[`kwwqmdV]ophejqppplmpvyxtqrpmnonmllkjkiabfcfhigebcgaUTY[cxlXOONKJORV]ldTUVYi~~mabjh]ZZZ[ZXWUSOMJKV\\XXV\\otxpWPUUOd^X\\OUSRPPQU]^]]R[~c]^W^jvu\\ixbbUUcpsrpntnso_`jsmfc`\\XWXWTU[ZWXX[dea^][Z[]_adddeb_^\\YXWXYZ[ZWXZXXeugM\\}uWZaZWYdbYTOPONONMMRWYYZZZZZZ]``PHR][YWXYYZYWUSSTUUUVVWVUTTSSQPOMLJJKJIKOHBEEFFHIHHHFBGUlvSDLPSVhfVRTTSXVTVVUTTSTTTVY[[XTQLHHIHFFGIHIIIIGGGGHIFHQQLJHFFEFFFBDS[WQLIIIJHFBDJNMMKJHHHIILONLOV\\\\[YWWVTPOPRUTONQQQOPQPNMLLMNPOKGFGDBDDFHIMTgu`CDNLMMMNNNRW[XPNLXjtsnjgYKEDEDBBAA@=@CEGJIHF?:JHGGFAACLMIHIJKHFC@IDBBBBCEGGFHJJIIIHFAABDDCCBBBBBBBCCBBCEGIIGD@???@ABBAAA@AA@@@??@@?ACDBA?@?>?ABBA@ABDEDD?=BEFCP_]\\\\YYUMQP=;@C=<ELIHFCBBA@?>==<:8937BKMLKIIIHFEDBAB@=<<@BEECBBBCA<<=?@@@??<<;;<;<=<=?@DGFC@:6549?@?>?ABCDFIG@::<<>@BHKB>??@@@><97669=@>=>?><9766555677678899979:::;<<>DKIBAA>;=<;=?@?ADA=;9::99:=A@>76778878756=BAAC@55434796534355664589899999;<>ENRSNIEEIHDA@=GmvhluuuvurpeL;=A?=>?@@ADEB>=?AA?=<;;<==>>??>>=;=<:989;:<<83147766437:;:97689976789:::87897655679;:8789989<<<;<<<<;9656458<=<:==;:998555654554466677888943LZ]juoT;489:;:87677767987777654-.?PK6535;;:850+.000//138963,+..-+00//1223466666557767920323323555675137999:?C>BB>=<:884/.3.<`YMMD713442.-+)+3;@ACF>652//.34-<Z`YOD?=9/+++.220/,,G\\LHP;.-,9GD=;4.,299853221100/06PaNDe`1'1=@<50240.47<MVE9:936BBJXH8II7QWCV^SJ?31@V[SUBCA.-DRUVX_b^F1-,++*'-=<W}xU7450-.158<=951*$&7MWUPLGDA;3-)*/202563Hoa93854443457;@5/1567:83241//.-,)/EL92:;;7101677?FB95552.7KTTMNSNB<;76449AB<::8DQPQOG?BHHD?:9=AA@>?><=BEJNF81483.,1>D=67::40;E<,(/FTMHRVU]e_N8)')5HPZ_]P1)<ASUXYYZYXWZ]`fkmnnmmlmpqqqomnlhgedcdeghe_^][YXYXWVWXYZ\\\\\\]__]VRQQT[acddeghhiijlljiheccca\\YWVUTTSRQNMPPPNMMMNNNNNNNNOOPPPPNMNMKLLMPWTKNSUW[ahkjklg]USLDFKNQQRRQQMKIIKMRX[_cfhhc[PHHLMJJLLLLLLLKHQgkeiklkif^PHJNUVRIFJJNRSVYRQXYTPPSYZUQRTVXY[^^acgnqdeo^_|m\\W]`dehilnjhsuqquwyyvqonnllggvzpjhmvtgceflv|||}|yz|{y{smjtt[VXXYZ_ZTxҹxyz{}®ygjkq_]XX`a_cq|wpg[R^pkhsy{unpqsxyxzsuunstpmmljhc][gosz|~f_ksoVZSMKKKKKMIPdeYUV\\flg`[^\\UPPPOONOMKMMNUccXUbcTPKRXQPUTRbXX[LSPPNNNNQTX]]VSwt_UVTXdq{y~rmUKY}ztt|~v{iyd^`bddikfda__][XXXXZ]`a]ZYYZYZ\\_ddb`_]]\\ZYXWYabca][Z[[Y`fgxgW]\\ZYW_fh[KMMLNMLMPSWWVWZXYYX\\`]QMZ\\YXWWWYYVUTTTUUUVVWWUSSRRQPONMJIJJGHPNDFGEFGFGGIIGEN[\\`eogUOdh[UURQTRRTTUUUUUUUSSSQOKHGGHHGFFHKKIIIHGGGGHIGHPOKIHFFFGFFGFUXPIHEDDEGGFMNIJKKHHHHGGKTTMMTZ\\ZXVWVUSUXWWVRONOOOPOMMMMKIJLOSXWUZ`db^YX[dtrWCIMIHHLMJKOQUWYSLHQbghfh_RIFGFDCAAA?ABDFJIGEC:}BDGFC@ACJQIKKNOIDCEI@>>=?BFGGGGHFEEEDCDDDDDCCCCBBBBBBBBBBBFJLKHDA@@??@@?AA@@@??>>==?=>ABB@@?>=????B>?ACDDDAAFEDEXa_]\\ZYSMQK>:@HEADHGFDB????>>=<<:9:::BHLLKIIHHHGFDDEB=;;=ADHFIIJJD>>?@B@>==;::;<=?@@ADFFEB>:5/27:=>=<<<=AHIJKKF?;;99:>B@?@ABBBAA>:6338AEC?<967887777788888999:85545<@<9=CGDBA?>?@ABCCB@AAABBAA@?==??<477666788769=@AC@435249<9534567766688:;;;;:<<=DLPPJDCGLLJCA<CkwjkrsrrtsvsV::><=@AABBDC@>>AEIJE?;::<===????=<>96779::;<82-/34441037999766898879:::::754554667:;:9999889:;;;;;;;98666568<=;<=<;:999666655554456677788870;S_hq]<4557;=:77888777889;:8544-1A?1/697568971//23321377764-/2454721/1122344344457642454333222333563047879<GL@8;>?@><:72/-,2?7@>96468::961-.:ITWNA85676537=64OdZA3683006886--0-,G[A:ZY9,+0<@:5-+4>CA:52/-/1/1211026@HZkwsP249<850+(.48=@CFH<78748;1@K>:U]>B>Q|wUA6-,6GB98=51&>dkacfqoV6&),*)('*9:]l;*)'%%'(,035/'$&.:BLUM?=BIMOMKIHIH@77504C=-16855446:?FD932334642233322342'.GJ73=?6+**-,+.3567541/<E;4/16>A><===<<<834=:HYXXVG;>DA=?ACDFPZZN9(+8EOSG5.37/),4737964520;A6)-5;AGNTRSZ_[RI>5++7>JTL;2@NDTTRQQRRUZ_dhmpnnmigioqqqppoooljhec_]bfdcb`^^][ZZYZZZ[\\]]]^_`]VSSTX_cdefhhhjkklmlkjgcaaca^\\WRQRRSROMOQRQPNMNPPONMNNNOPPQQPOOMLLNNNNMIIMONOS\\bdiqsplkeXPMLMPQQQQPLIIHILNS]fklmnlfZMILKKKJKKLLMPOQZ[[emmkjiicSJV]TcgOKTdaIQ`WQW[XRRRU[YSPQRSUVXXXWX^fggim~x]WZZ[_diigۏ_rtstttvxwsppponoywspp}rggqwursz~rv~yvhemn`]]XUUV[`]Sqǲjkt|f[ZZ\\cijkswrmaUWfmhny~|lo|{zxvwqnrqquuqmnle`\\TXdds}hsu|h\\_TKJKLNQQPRPTZWXYWWWPMNOPQRRPOPRRSUOObbXYSmmZUNTOLPVST`RSWJPOPPOMMNNNPW[QPuiWXZXUX`jrsuuYJUONl|yjeu^hW_babbdeca__^[XVWWX[^ceca]^]Z\\]___\\YYYWWWWY[^cdeda]ZZXSLY{fX]_[YVT\\dljVMMLLKKLMNNS[VX\\QOPRVYVPUZYYY[\\ZWTTUUTVVUUVWYVSRRRRPPOMKJJJHINTNHGGGFFGIIIECCDFbmRIMTXYVQQQQPPQRSRQPOMLLMLKIHFHIIHGHJLMJHGGFFFGHHFHNOJIHHGGGGHLOTOHGHGGFEGHILKHIIKKLKIGFGTYSORY^]ZWUTUW[\\[[YVQKLMNNLLKLOMIJKMUdfev|xohbdocMGJLLHFJJJKMLMNNQTNFNV\\^gdWLHHHGECAA?@ABEIIGEE>G@CCCA@ADAJMNHHEDA@@?=<<=?CHIGGGEBBBCCDEEEDDDCCBBBBAA@@ABAABDGIJHDBA?????@@@@?=<<<;;<;<=>??@@?>>=>>@@@@BAA@@BEEBEXb`_\\[XSOPH=6?IJEDDDCA?>==>===;;:::::>GKKKIGGHHHGEEC@;9;<BILOMIGB??>?@@>===;==>==@BABBB@>=<8529>><==<;::=EDBACFA=>9<;<>?@@@?@BCCB@<841:EIEA>:55667789::::999843458;>@ACCBCDDCA@?BEDCB@>??AEFDEEA=@B=:577664677678;@AA=43314;=;544568756666:<:<<9;;<ELMIDBCGOQLDB;>cwkioppqtswrV=;>=?@@BBBA><=AGKMLGA<<;;<<<>?>>?>=:545899;;7432444434799888889;<<9788998754666:;9::99999888::9:::9987666568<<;<<<:98998998876565676777666621KbllH02126:;9779:9777779:;;742038.-851103798544567625887667:789974100122223223356522667643223333447:5589;=??>;<=>>=;:72-,+))(15/+-8BDEA@DA==H]\\J@;9;<=97:AA6A[P1'+-/37>AC>77:86JT94WW:-.*/84-3?IKIB921../0.-040.,8I@/-8;58HD90.-,)0:=@BC@=9643156,0766;@4,4[dN3*()'+:BQaJ4-(>]f`dkpdJ4/-.-+*),7?dJ.+'&)++-/2561.,0=KOPK7(&(*-2:@EJLNNMJA:42203775534454JWF:61/2443224799777/&1JK74=7,*,045444322201;9-*(&'-882348;<82038<HOTXO@<856::;94:RdeV5$*4@HQJ6/261)1A@767434426;619>96@QZY\\^VQPQKG=8<95301:FB8MLLPV[_dlonnljiiiggkpqqqqppppommljf`]ZY^abbca^\\\\ZXWXYY[\\ZYXZ[ZVUVX]bdfgikjjkkjjijjjgc`^`a`]VQPQRRPMMOQRQPNMNPONNNNNOQPQQQQQOMMPPOOOPPQQOLLNSW[bfhnpmjc[SMMOQQQPOMKHHHHLWekklnnlkbSKKMKJKKKLMOOPNLTcopmlknlbYc_Mn{hciePTi^MSYYTRPRY^XSRRSTUVUVVTRRY[]o}w^UWX\\_e|lxvrstuvwvrqrrqlq~wvwzwooz~xwvx}{zpx|rktnZZcb^[Z\\\\]beXpmbnq]XY]ejruprrofX\\vxejtw{ztu}yuvvsokknpqrommia\\ZV]`[mnorsjXZTOJJKNRVWSTTRVYYZ[[ZXVSRONNLIIJJOTONY\\WVVMje[^UbRIPVQVcNJRLQQQRQONMNMLMQRNRs}XQ[YWXVSbvsjkVT_MKOtueZRSy|ah[]baaa`]]bknf\\XTVYZXYZWWZ\\ZYejcedb`[UVUSUUVYZ]``_^^YVVUTJd{cXXZ\\YVS^vtehfVQPLIJKNNHMa`]kUMr`OTWVVXYZZ_a]XUUUUUXXWVUW[XSQQQQQPOMKJKJJJKNPKGFGGGGGFGFECCIPigWOPOR[\\VQPPMKKLMMLJIIHHHIKKKJIHIJIHILNMJHFGFGGGHFGHLNIGHHGHGIKIRMCGKJIHGEGHDFFILKKLKKIHEELVXSOT\\ba[TORX[]]\\XWTIHNMLKKMMKMRNJKKQUYjxviaacSFFFGKKJJJKIKIIJLOPONKLOS_e]PKKKKIGDB?>>?CGIHFEB;uq=ACBBBAC@CNLE><<?>=<<;=?BFIJHGFDBABBBDEEEDDDCCBBBAAAA@@AAA@@CHKJGCA@????@@@@>>=<<;<<<;;<=>>??@>>?@A@@@@??><@DEGHPSRSUWVSRPH?9AHHCCFDB@???>====;:::;;<<AHKLIGGGGFFECA<9==:AQKKFCA=?@@>>=<====??>>=;;@><::<@?:79?@>===<;:9:BG@?>AA>@@=:<8:@?>??BBCDBB@<75:FIHHE<5567889::99866;@FNSKA@@BCCABBA@@??@B@>=;<>?ACDDDE@;@GA96455446665667<=?835536;;8544454566778::9<=:;;=FKGDBBHMOTQE=>:QslgnopuwstlP>>>>@A@@@?<;<?EMOIB>?AB@<::<<>>?AA=;74578898777644315:;;;;:::;<?@@=766786645778;<98888988887899::99988887669<<;=<:9889::;;;:86666777778887561Fhqa=284258:8889876777887;>:4224543333223487658768625787699694556300222222222445533556664212699754650037<?97=;:<==<;;831.,))367?H@;PTOIIMG@3:^]JB<;>>=;9=HH95HB*')(+048:=<=>??@JN??OI?:61160/FXWNG<2/.**/7@A;M`H37RU;(')0<EC9578427844675310/+-31+*153-++.<C.'1IPE0*8_u]>757J\\emu|u^D988;610/2:@SW95/,498236;BACE>=CCEKA-'**(''''&,126?FSTROH?8544430231CfoaS?01366667:==:9850+4CA5980./37;>?<3,,..2971.-02(*9;11;>941234:CDQZK>=/,330.-,4I[`W=5>BFGMK:0153,,7977653453028BGD><?JX`c^PEHLKMLJJHA8369720OPV`eilmnmkjijllmmmoqqqrqonpqrrqpokc_`_XTX[[]]]]\\YVUVWWXVTRRTVUUWYZ]`dgijjiigd_\\`dijgb^^___\\XRPPPNLKMOPQQPLIKMMMMNOPRPPRRSSQOMOQQPPRRSSRQPLJKLMNOTWVXYXSONORSRQQQNKJHFHMU[^`c_X_jdRMNKIJLKKLMMOMJM^opmmhfghgf]Uhr^^hkgos`PQZXPMTZ\\ZTRRRSUUUVWVTRSSRVX_m~rXVWX]g|r^osvrvxwvrqqrrrmp|yz|s]Zk}uiv||{nus{uzvnc`^\\\\[adaegZmιl]}g[Y^fklrtqsqhWSmixvz~ut~urrstrponmlmoolid^YUW_c^f}Ű}mkrjUSSMJNPPSVYXUVUTVY[YXWWWWWQJFECACEFGEVh[X\\VSKmeXnemj`ROPV\\LHNOQQQQPOONNNNNQQTPMgiPRSUXVRikqv|`MTT]nLJXxzph[PROJorSWb]\\]^blyaUYYZ\\\\WWYV^beoxpfrqokcZUTTUUUVXY[[ZZYWUTUTP^hZSVSNQ^ns}bW\\eYQOLLLQTQNTXU_TFhUZVUVXYW\\^\\ZWWVUVXYXVUW\\ZURRRQQQOONKKLKIHILKHFGGGGEDEDDHJLMJNUUNMKOPKKMJJLKKKJJIHHIIGHJJKIHHIJIIJLNMJHGGGHHIIHIIIKJIIHIIIJLKNHCGJJJHHGIHEGGILKJJHHHHGEFOZWONWbgcXPOVZ\\]\\XVUIDHIIEFD?FSTMIIGFHIOpzjcaVHGEA@EIJMMMLKIGHJLNNNMLMNUbdVMLLMJIGFDA??BEGHGFC=Tl=@DDCBCCFFHFA@@?@?>=<;=ADHIIGFDB@@@ABDEECCCCCBABAA@@BAABAAABBEIIE@@????????>>>=;;<=>>>><<==>?@>>?@CABB@><<=>@DHHC>==@DJLLLJGCCFFCEGFB@@BA?<<<;::::;;<=>DKLHFGGGFGFDA:9<;:BPF??>=>==<<<<<<<<<;;:679<>8468<=;98;?>==<<<;;:;>FE@?DC@DJ=73368;>?ABCBCCCCA@829DHHFDC@<;:;;;877799AUddSFBA@??@?@@<978:9876668:;<>ABDDA<;@D=74234566554546;<53765996643333455689;;88>?<:;?GJE@=@BGKOPPK?8DmogmqtwusteI<>??AB@>>>?AEGJMI?:=BFGF@:8:<==@B@@>::988559:::864347;<<<<;;;<=?>?=974455457778:;:877888877778::888999:98989<:;<:88889:::;;977667777778998894AfpR97:635678;;;<932454469;:62233344675542675368851/1121255295485100/133222223454327845542136:9754/-.-,.2745;:9:<;<;:8530)*;UTGhwKZbUQWTI='4\\]J?77975538GD5-54+)+)')+-.0033448===BFEA;9<>=8?V]TKE9.//,,-7Txqg~X79>:2..1203017:76:3)*/143,+(%*41(*0246119A5.5_uH%1nj><9/6Vs{zM7;>@A:3455;@?>=636>>75:?FJMTPD>;6=E:/--.0220-+-/.+))-28EPTUL;/.0018<AKx\\<102579:;<><;<:771*0?FKI@<974242/01.,,.9@9:HK>0.C[VLOD1+---1===HMD>9-.3.-,.6<EOUXLIQQPKIH=1/23.)(*-11.02220,1FNDAD><DLMQXWRJFEGGEGMOHA><:4^`dgijkkjklmmoqpqpopqqrsqmmpqposrliic``]WTQQTVWYYXXVUTUTSSRQPQRSUYZXY^abbcb_^\\WRRYciifd`^\\\\]^ZTPNNMKKMMPQRPJJLLLMNOQQPRTSSSSSQNPPOPPQSRRTTQLJJGFDDECDHJINTTTVSQSRQNLJIHGFKNMOMJNZ]SPQNJJJKJKLLMLJKYgcb`Z^dfhgcbaZXXU\\diim}SR[[PLX[ZZWTTTTTTTTTUVVW[^WTZZevr]WTZjdpҧxwwusttttssrqzwt~jdovx{}sdl}}y{wnhmrw|vX]kibdgdeif]cӿzyv|p{r\\X\\ejkilonpkWVn}xz|{|}urxzvsqmmmmljkjgaZVZ^]^___fjuʽ|qoqQSPORUZ`_]\\\\WQPRUVXXVUUUUVUMFECBA?EI<CLSWSRHkfY}wnr{rZLXYNKJPQQOOPPQONPQRSRSQJKf[NRTWYZ}miiq[PXVkWLP[mg[ZZTSOUyxXU[[ZZXbwcJR[Y\\]^__Yoǻufjsmje_[[[[ZVSRUWXXWWVURQVTY`ROSXh|xk[WUccUQPLKQUYVJCHIOFTvPQWYWWWVY[\\[YXXVVXYXUUW\\ZVSSSRQQQPONLLLJIIJIIHHGGFEEDEIPUUSSUTSQPLKNMQWQQRQOMLLKJIIIHHIHLJHHIIIIJLNMJHHGEGHIKJIIIJLLJJIIIKLLJFJKJIIHHIJJIIIIKJHHGGGGGGEISYVPR\\fga\\WUXZ[YWUOGBBACBD:9UYEAHKJIHEIXrf\\KDHD><?DFJLMMLKIGHJLMMNPRQPZf^MHIKJIIHJGDCCCDFHFD@@^=ACDCBBCDDC?@AA@??><<<?BDJJHFDCA??>@BDDDCBBBAABAAAAABBABBABEAACDB>>>>>>>>====<<;<<=>@A?<<<<=>>>=>@ACDEB>;:;<=>>?>>;::;@FHKOKIGDDFGECA@BDA>;=<9889:<<<=>@FKHGEGHJLHHA:7789>D?==<;:864589::9966569<;8633457657:=?>=<====>>==AGB?EEEGJ:.+38:;;=ADDABCEDDC@818DGFHJE>===<:779:<<=GQI9:A><;=????<711222344445568:>BEFC<6:=95224555545646;:8:;:;<97665432555778;;67?B=:<@IJE?<?@@BEJQRE9=fnhpuyxrogTC@BBACBA@@BDJMMKF?<@DGIIGE?89==<?B>BA::;96239;<=;8789::::;;;;<===<=>:63355567778:;:999888777668;:86799:;::99:::;:888878999997777787888999999;5;_hG557754226?AAFG7,149?DC@<85331244688865877578:3220-+,,/5796463002484233233234300563343226874210/010/-)1<47:<;::;;:646=5,GcXBYttV`e_]ZTR:%2TWE8420,,-,2A@3-...,+++--.-----,-,-07@A9547@A=@LWQGA;6467:82,:hhXl^9)).01551,././3555.(+4<B;0,+*0:9.+0144027?PL4Z{vcK+.T:095-5Nzj9.9>?=7244088:B<4777737:DV]c_G<;65:>96634<B>512121/4:;109<9;HM@,(./1<A)ZS58734668::99;<<83<OSKNWZUPNJC=91*,474-+.00AVWHD@?S`^ZD(&.-(7A@?@><@<862-,,2=?BGOYROSPMMJD@4,1873.,/0-(*./1/&%8EA??;8863@T^c\\QMLJGGGHPTFE@2eedcgjjlnmopooooponpqqqqqmnqqnkoqnllib^]\\YVSOPQRRUWWUSRSSRRRQPPPRTVUTUXXVVVUUUTSPR[bddec^[ZZ[][TPNNMKMNNPQRSRRPONNNPPQTTTSSUWVRNMOQQQQQRSTTSRRPNMMNKGJIFMVXWXUOOSURMLKJIFFGGFGJLONINVUPJIJJKKJKKKLRVSSQRZ^`eijjf[RSVUSSUaujYTMSURUY[[YXXWTSTUSRTVWX\\aaa_UQ[chs~sZZkdxsqstx{yy{ur}{ojjpt|sibcmojjquuqjkfhzsuj{~uqtofccbYWu¦~ywytu~zQZdmrqpqlhh]Vl|}~{y|~ztpjijklljee\\Xr|keecchfaeƧ}ns[V^Y\\ab_`egc_c_XTQRRSSSTTTTTOLMMJGCHN8_ELPOOGdn^uytpuvTZZNKIOPMJLPNNNPQUWSQPQRMLhtTPUVb~kafpcUUV|MQTY\\TTUQN\\[QS\\[\\kyvbUZWRX[bif_~ɰk^jjklifffddgc_VPTVVUVVTRVYbe]\\apzxgUTVST[[WVQOQKSZUKMJKKCUVLINSSWZY[]]\\YWXWVXYWUUZ`]VSTUTSSSQPPNNNLKLJIJHHGGEEEFHMSXVTSRRQRQQSVWYZUTTTQPNMNLIIIHHHHLIGHIIJKKLMKIIHGFGGIIIIIJKMNLKKKKKLJEGONIIIJJJJJJIHIJIHGGGFEGGEFHQ^[TZbecc_WQTXUNJHLLORSZYWcbM??GKIFDDJGT{ymWEHIDA??BDDGIKLLKIGHJKMORTTQUffOBDHJIIIKIIGDAADHGEG>O=BCCBBBBB@??@@@@??>===?AFJJFDDCAAA@BCEEDCBBABBBBAAAACCAABAAA@A@@?>===>====<;<<<;;;<>@A?=<:;==>@>>>>@ACDE@=;<<==?A?8:<>?CEJNMLIEEFFAAABDFB>;:7555679:<==>AEGFCDFILHH@87899:::;;<<:8544799:;823;B@;3022333323:?@>=<====<<B<<>EI@ACAAF:2=>@A@><>CFDCDEEDDDB83<FHFA==>=;9889;;;=A@:9?>=;::<=>?@A?;642356566654458;AFIE<4699854455667756=:9;@AA?>=<;;:86677678::66<@=;;ALKF@>???==BGNUE@]ljqx}|scNB@DECCDBACCCGLLIEAAEHIIIIHGA98;<>@@>?D=6;:84359<=;9:<;;:::9:::<<<;<=;643355677779:999986676776689865799:;<;::9:::8877767787778777888889999::;;68W_?2677740.0=MJENH@HOQPOIA=;64412369::989;;<87986577740025786462003<?44243442232.0112332239=;50/./0211/+:G3-5;=::;;:50?lg7=E8/10=L^Y_hUGM:'4IH<42/+)*))3=:8553233354455444651-1;BOK63<??89@BB>;6.0667873,*8VS14<5.+-18@>4232232243-*.=H@3-,/28A@61220,,.++FG(0B=560*3).6//5<eL+,356430/.-00;B4/10127<5:[ssV87:669>>;8:EMH>527==82?UO>89<6.-;MH4)),1:*?dR=<:98444689::::54T{vZIJPSQOOSVUUOC:9=92/1;PZ\\UI?45?HM<'(0029<=??>=BEE?5,(,1;>FLPYVOMKIMLD>4(.<=87531/--.////26:9779991-59;ETUUW\\_]XTUbb\\R<]\\^dhklmnnnoopooonnpqpqrqpprqpqjgjkkgfjf\\Z[YVUSRPQSUTSSSRRQRRQPPPQRRRRSSSSTSRRRSSRT[^^`a_\\\\\\Z[[XTONNLKMNNORWXVRPNNMMNPSTTTTVVXYTQOOQQOONOPQSW[\\[[[\\[TNLJKOQSXVMLSWUQLHGJJGFHHHJKLIFIRWUMJKLLLKLLLMMNOONPTWZ^djkhhhd]XWQQYYSNNVVSSTWZY[][XURRVXWVUVWVVY[\\\\VTXTTb{qbdcq~zyyz{wy|zuwuf^ire\\oxw{mfjqlikhhqropi^pvlxwmcbghbe|Һ}{yqtoy~Vfsmojfnmga\\l{xv|xurnfejllkf_\\x{dqswyywkdyβjurYZ]bbglgbfiai}}qd[VUUTTUUTUTSTRSRNLRVBrhBFNMMH_tfkposx|w_RRKMPMMMJKQPLNSSUUSRPQRSOMjmPUTg}e^dnfUMg_SYUWWRRQZisTQW[Wk`bfeZPSTXcg^Շܾ`dlqwvrpprl|cORVWVVVUW^badoqrxwnfZRSUQNUXYXXVVKJSXQOQKJJGGIIGGLT\\]^`a^ZXVWUWYWVVY]]WUVWWUTTSQQOPPNLLLKIIIGFEEGMPQTVUSRRRPOOQRRSSRPQSRQQPQTMHIJIHJIIIHGHIJKKKKJIIIHHHGHGHIHIJMOPNMMLKJIDIKLHHIJJJKLJGGGHHGEFGFFFFFEBGW`VRUZZSSMDIRRLCGZ[^ggfcrnJAIGFFFFDBFJBMqtSGLKGGFDDDBCDFIKKJIHHKMOOOOQSaiTACIHHHHHIJIFCADGHGJ;L=BDCCBBAAA@????????<<=>AEIGCCDBBCCDDDEECCAABBBAAAA@BCCAAA@??@@?@?>=<=>><<<<::;;;:;<>@AA??===@A@@??A===@CB>;=><:=@?><<=>=?BEKNMGECBFGEFHIA;731257789=?>;::;??><:AKNFC8999;<99:;:9:879<=>=@>:8>A?721432112138=@?<;<====<::<<=@EB<@CH::>GECCDE?=@DCBCCDDDDEE;7=B@>?DH@;79::;<>?AA>?B><<;;:;<>?BDCA=853566666554359<@EB:46:?>95468998:<><66ADAA@AA@BCDA<978878778:<<::DMKE@?@?@??><>CDCbojsy~kM@>ACDDDB@ACDEGHEB@AFJJIIIHHD<78;=>??>>EB588774479;;;<=<;<<:89::;==<=<523333467776888:9976455666688657889;=>=;::;::8656767787888777888998999:99;96GO<26666654-4LTLJQ]hdRA;89<>;962247889988<;<9542238=ED434:98521/.03<;53334432122/1112332226;:410//121110=@+%+1767::971;gj:1/,,+$%5CDW]?23-)2>;5343-+,,0@F:<<=;:=BA:46789:<>;4,/;9=>54<=847;6/052//452////.-0:4'(-.,/9GJ?324/142/00-,2=E4(+,*,1;>94321-++'#)-+)/0,+*),//..-3?V{m1'+,,-./0.+,-2=;2..-/5:<4/Xk<0;=746?FD?LZO900/9LMAALO7.35995-)3HM<,,,...7;8634764589:;;::8@]so_RSWQHEEMS\\ksjS=:@=?M[a_XJ<:@C;37;2.256437::>BCELK?2-27=BNQPY[LCCGHFA9/'.;96AJC94572/1@QUME@9952;BCCBAABCEIGFLV]\\g}vkQU_fjnomnnnoppooonopppprrrqpoprnia^gldciibZY[\\YVSRQRSSSSSTSSSSSSRQSUUUUWWWVVTSRSSSRUXXY\\_]\\\\[ZZZXURNLJKLMMORSROLLLLKLMQTTUVXVW\\]XQLNRPMLKKNSX[[ZYXVURONLHGIKSSMOTTUVQHBEKJHHIHIJIIHGIOSPLLLLLLLLLKKNONNPPQPRWahijopkc[WVVVU\\r_PTVWWYYYXUPRZa^URTTTTUWW[_^ZXXTYbmoibs~}|vrpoou|ylgnrojicoxdgs{|zumiijjnqiYYyqvwikq|п{yxu{|rlqdhngdglojbco{{ysj|zzvquoehnmjcZlq_iiffgic_bkھfxlRQVZUWhmmmll|vuvxufYWUTSTTRQQPRTUZ^R[aNIJMOPJ\\linhiu|rcSNQRY]YVVVX\\_ZTUTRQQQQPPQSNOu]US`dPWfieTMgpUVZTQNPUg{jKUVYTcoJI_\\PQQRTRMoիpajt{zwvuvunrrZQUYVTUY^_^cssknk_XVTSRSPPWYWPSYQLOQLIPVPNLLIHGFIP\\_`ab_[XWWVVWWWXRPZYZ[YWWUTTSPPPPOMLLKJJJHFFGMTUSPRSRQRQQPOOPQRRQOOQPRSSTUNIIJJJKJHHHHFFHIJJIIHHIIIIIHDIKIIJLOPNMMLKJMGIKKIJKKKLLLKGGHHHHGFGHHGFFFEFGQNDBISE@A>AKQRNL\\aaihacdJ;DNOIEFFCACKKEPooNJMLKIHFDDDBBCEGIJKJJJLMMLJKOWe\\HCIGGHHGHJIGECFGHIJ=rI=ABBAABAAAA?????>?>==<=AGHDBBBBCDDDDEECBBBBCCBA@@@@ABBB@@??>@@?@>==<<<=;:::::<==<<>?@ABAAA@?DDBBBAABA=;;>===>=;:;==;;;<;<<<CJKIHEEKKJJJB611377<ABA@CD@:75668765;>HGH:;9:<<:989989:;>?A@@A@<DA62256632122149@><;<<<===<::;<<;?GD68B:9:;<AFFD@==?@AAABBBBDGC958=DHIIB>;;:9<???<=@A?><<::9::;=@ABCB>9532357887666777;><717;=>>:79;;;;=><87:<@AAABDGILKGC;7899::9:;<::DLIB?=??ABBB@BC?@anmtxyR<@A@ABBA>=>?BEDDB>?AEGHHIHHGA968;===>>=AB9677743689:<===<=><99:;<>>>>;41333125777777898876455544566568899;==<;:;;;:7667877778:988778889::99;;98998:=:777778982.=QRT__UJ=3324;BA>:63.,.3779983695.+,07AHD3+3@?531,.3505@?6222233222101012431..01//011334568;8,(*-125799:7357//121/-,--0AB3..))/3/5:8642108?<;8<>>@AGE94557<AB?82)0I@-++-/013664222044340-----/,1:7-++*/@LC3,02...-,)(,1893*'*($\")5843310.+(*,*&,/390*(*+--,,+4MIIP(,,,---.//../6:52221/4788,VL+4><723?NPS]K0(,,1HXNELJ=037228<;.'+<HA4/--,+*-3846=;:<<::;>BFMYbjjchj\\HBAEDJYenfI6=ELVVPKC<=I\\jhJ584/66679<:8>EB=DJC:9<?CIPKLZW@58><972-*264?UaZG6452.6L^`]\\WNI>5HacV\\aVJILLMI=78;BaU[dflpnllmonoonnmmmoppppstrpqqpqsm]Udm_[gle_]ZYYWURRRRSSSTUTTVVVVVWXZYXWWVUTSSRRSSSRTVUTY^]ZYZZ[[[YTPNLIJKKJKLKKJKKKKMOQTVWYXWZ][WPLOONMJIMSTRONMLKJKLNLHHJIKNPQQSUWXRFBGKKIHHIJKJIHGGKNMLLLKLLLKIKMLLLMNMLKKPZcfjnpmfa^WOY`RVWWVUWYVXbeb[RQTSSTUVUW`da_XVTQYgnmyzwypmmhgntqkkiivtf~zslb[^`_^nyqqw~Ĩ|yvvxqsnddhfeikptl^^myxxvsvxlpt|rv}|wqy~mfnpjahs_RWYXSQQOOONKck~uTMSUWWPR]_Zaswimw{}yh[XTSPNNOONNPQSVWUTSPPPORQJ\\fdjefopfYRZgkkic_^]`fie_YROQRRRRPPRTOYwsZS^qQO\\dddXUb`XVXSNVjz~zMTVUWTORdq{fVJQQOPOTMNǋ`botstttquzn]ZraOSWUUV`d]djeb_YURQQQQVLKipmVISQPQRPHKVQONNJHHGGM[a`_ab]ZWVVVVWWYRLV[^b_YWWVTURPPPONMMLKKJIHFJQUURPQQPPQQQPPPPPOPONNPRTUTQNNMJLLLKJHHHGEEGHIHGHGGIKKHHQXMIJJJJMNMMMMKQXKGKMKLMMMNMMKFDFGHHIHFIHHHFGFHGFGG@FWL?@BCINSVQVbjlddhRBJJJMKIGEBACHLJGUk\\LLLKHEDCACDDBABDEHJKKKKKLNKFIP^bPEGGGGGGHIIGFHHGGGEAFTAAABBBBA@@@@@???>>>===>?CHHDBCDDCDDCEECBBCCCCCCBBAACA???@@@@?@@?=>===<<;;;;;;<>>>>=?@@ABBBBB?DEBGEAAEJFA=;;===?>96:<878878::;>BKMKLJEEEA7//3:@CHIIECBD@:75546668938@B:=;9<<<;99:99:;??@@BAABB926557841/1138>@=;;<=<<<<<::;<:6:EK35899936?EB@><<<>AAA@@@???@>:;?EHFFDA=<98>A==>??>==<978789;>>>@BBBB?;98:;=>>=>>==;9:<<278:=AA=9:<===<;=>?>?BCDEEGJJLKIA;:;;;==98<::DLC=;;=@@@@AA@?<=]lrwypE7@@???>==<=>?AA@A@?@ACFGGGGGB:78:<===>>;BG:8;8448:9:<===;<?>98:;=???>94212202467777777666445544555468:9999:;;::;;:87789::8769<;:;9789:<=>>=@?:53479:;;;;989;:913I[c]G78:8755:@@===7)%1324:653463,*.06=?6-,5=<11017@<46BK5210033332210123442,))+-/023456789:5-*-.0478;;:85.,036731210/0620/.++,*-;A:69854226<;?BCFG@;85238BHA71-'1VU;90(*+/4976850.1200.-,-..//03620.+.=A/''-132/--)(/673/+,,-..3852443/--.,++**,5@9/)*+-,,,/;E3,~:)2222211//1212/-./0335643.L`-&473026FORYM2*12.;TQ??B>:133-+/1.,*%%4EB6-+,/1,/APOOOKA=>>@BGLNJM]egdbZNE?AADJPY]M=@GHGB@>>@CHMYtqT3%04569<;68AB;77:758;<?GMHLUI41441//...1/0H`fbO720.5EQX]]YTOKA7Iec^h\\S`cXMKH<4791=sp`bcfkjijlopnmmmllmnqrqppprqqrttonqk[S_j]WbjiaURXZWTRRRSSSTTVVVWYYYYYYWVTRQPQQQQRRRRRQSSPPX^[WXZ[[]_]ZWTOJJJHGHIKKLLJJLNOQSTUVXYYY[YPKMOOMJKNOKHHGHJJIHJKJKLJHKNNMPTVY[WNECHJIIIIJLJIGFFJLKKKLKLLJIJLLLLLMLJMONSZ`aclpmkkf``gtUVWWZZZZY`uy\\OTPQTRSVWVVef^cc\\SSVX]gs{{zuifhn|sijkhhiieeihiqxyvvjYS^gdnyuy}nnjedegkv~{λ~xstxpomfhiijklljb]gtvtxxqmprkfin{~qit|{ytwtgmoia`UPSQSTPTUMLKLNOq{[KTX\\bgZKTZVY`\\X]fkdZPU][ZZVQOONNOOOQRTUSRPOPOQPM\\_[cbbb_^[\\cmroib__]`egfe_TMOSSTTSRRQRLYsgS^zsYNW`a\\\\^ZXWVUUQJioc`bOVTVSX]MO`|rPKKLMOTTRWթi[ijikoqnqnuwZMVxr\\SQVU`i`[ZVQRQNPPPPPQOMfcRQQSURKKNNOOPNKKLJKR]_`ba]YWVXWWVVWTOTZZaea[YXVVVRPPQOOONKLLJIHKORSSRQPPNPQPPQQRPNMLLLMOQRQOIIKMNNNMLKJIGHHGHHHGHHHJJIHFTf`LJJJJKMMMMLKPVNFJMNNNMMNNNKGDCEGGJJHGHGGFFCJKGHNKJVYHEJIHINQS\\ltofi\\EGKGFHJJHGD@BGIIKHKNMLHEB@??@ACFEBBBBDEGHJKKJMMIGKUaZJFGGGGGGHGGGJIGFECA:<CFCCBBBA@?>??>>>>>><>?>@DFFDBDEDCCCBCCBABCCCCDDDDCABA?=;;<=====???>>==<::;<==?@??>=?@@@BCBBCA@ABCCBAAFIGE@;<==@@;8:;6311379:;:;ELG@@:998679;@EJLIGC@@B=:86678767967:97BG;=<=<;;:8888<?AABBDG76644578631128<>>=====<<<<<;::96327A7;<==7259<=>><<<=?@BBA@??==CFE@?DCFEB>>@@?=;;99:99::656568:<<=???BDCBAAACCABAA@>><:99=99::89?@=<=@AA>;=>@CEGFFEEGHHHGHEECA>:;<758:<EI=<::<>>><<<;;:;Yksww}b>7=<<=<<<====<=?>>?>>>@BEFEEEDA<8:;;==??8>KC88758<;:<=;;<;<>>:879<???>:7544433346654455554434444676469:9999997999;:878:<>>:75:=<<<;:::;>??@AAA>:768;:;;<<;99;@B50LfS=857987669;===<;429712@><<862,,/04640-15841016=?78:@A95/,-03332210/02242.+++-/258;:876530-++,/48:9:9945954697685/2?J>3/('+++4A?9897541/5<CFHKPL<1///3?HIB4))(1JI><4+.038;841/,))+,-------/132/..-),99('().341,,-16753258:>B@@;2.3<<34>:.++,+,4993-,./...2510,\\e,*222232201485-)()))+3::/*/95)+/0/028A=@E=@A:11:B:..08;998630/-,+*('2>9,+.39827Rif`ZF8<ACCFEB@CJT]ZPMMJDAELSTRNICCA8689;::;==@P_fJ189:9742/4=;5430/01238@FILI;4751/--,.0/,*:VdcU=>;-Bfieh[B4678?MWXhfHTshK@>615<?6,R]^_cddfilpqjgikmnmptrnotqmnoooqqnkkjhYO]h^U[ba\\WVWXVSRRRSSSTTUWWWXXVVTTSQONNNPQQPQQQQQRRPMLTYWTVWWYZZZZXTNJKIGHIJKKLJIJLMLLLMOTXYX[]WOLLLLLKMNLIGGHHHHHGGILKJKLLJLPUXZ^c`UG?DIIHHHJJHGGGHHHILOMKLKJJKMMMMMLJMSUTSWZ^fhghlqrjYTVj]UXWYYZZZYhu`PPdeQRSUUWVefX_dkd[VRU\\eloomlmmky}qkihgjlkjjjiimo~vqysfbedchr}||zw~|pgdd`YURW\\hvzvmjov~yxzymҴuurw{jpldgjiijklkhgqvtuxwssorwmhnv~vjow{{zwsxqfijdcpeJIMSSR[^ZWXX[cYurrgX[bf]Y`e_XTPSXXXZ[]aa`cdc_YVURNNOOPRSSQNNNMNPUXVZ]^^^^\\[\\_cfeb`^]]^afhhf^USTTUTSRRUVSO\\gWVaYRX\\]^YX\\VTSRRTY\\tyc_mpMXRUXSS_imi`RNIJNV`PÀ]dgeehlmliihgZRVsbNTYX^dWMRPMOOPPPPOOQKSqWSTSOLLJKNMPOPPNMIGR[^ba]YVUWWWVVVTOSWRU_gd]XTTUTRRQPONNLLMJIJJLOPQQQPPOPQPPQQQOMLKKJGHLMKLHGHMONMMMMJHHJJIHHHHHHIKKLNOQTaUGKJJJJKKLLLLJKMNOONNMMNNNKGDBCEFHIIGFFEDC>NJKLNONQZQKLKIIKJOew{qmgK?DDDFGGHHIFBDFJJJIJMMJHEDB@AAADFFDCBCEDCEHKLJKMLIILZcSHGGHGGGGGGGIIGEDCAB>ADCCBA@?@@?=>>>?>======BDDDDDDFECDCBBBCCCEEEEDDEEB?>?><;;::;:::<=====<<;:<=>>@AA@>=?@@ABCA?@AA@@@ABCB@EGGE=:;<==;:9943138<;:;:9:A?88788;>ACDDFGGGEC@@?;9988987889899=BKL:===<<;:8557:?AAAADA4454567764447<==<=====<<;<=>:753413;>@CA93357:=??>=<=?ACCCCCBCBEHGA?CEDCABBDC><;9764346533333346745569<<<<>@@@@>??<:899878::99856;@BA@AE=::9:?FHFFFGGHIHGFFHHFA:79626;=DC;:::<<;:9997899SjrusiI79<9:<<<===;;<;=<;<<<<>@BEEEEFG@88;;:<??:8BH<5769<;<<<;;<;:<<<824;???><;::;:::8555644555544444446766678899887556:;9779;=@?=84:>=<<;;::<<<;;<>?ABCA?;85589:898<J=/HR<3;=97789889;;;=?AB=?98KWB:740---.011203754359886.2:<951-*+-0112220..02331///.0259=;97641/0//--/2568;;3/3005:97:://:C;5,&)/-.8?<7761024527DLPTQB3,)(-7?A?F<-*+,21/0676679:7/,-,))*,--...-*+-23.*))$$8C0,.-0221.+-6<51:?==>?><82-+.=FBFK3-.+,.-,.00/12100130-32=@)-0112110138=7/-+**(&,7;20320565009752-15>LF3-13/,*)*2:C@==7//0.000,*47.,8@?=<48Zsm\\B248<BEA=CHHHHKE?EHKGHKLHA:=A>7117;<93/6GOB7KaR<@F?645437:5123210//37;AC<65631..--/397.-Bbk\\CKO1?sylK/,04:FNKQ\\RRowS?IF745434.5_E\\_b`fnqpqjaahlmnpsqibeospnmmljhiifegdUN_hZOP[b`WTUUTRQRQSSRSTUVVUTTRQQPONNNNOQQQQQQQQQQPNLJPSQRRRRRRQRRQMKKJIIJKKLMLJJLLJHGHIMSWXYZ[ZWTPONLMONLJIIIIIIHGIKJIKLKILPUZ`cdfh^H?CFGHHHHHHGGGGFHLPOKKKJKLMNNMMMNNMMLLOTY\\ZX\\chiigh_T]g^WYYXZ^aa^\\`bWJwzNSSRWYT_aW[Yah_WRTUX_dhjmmkszpsofgloomlkjhjlt}wn[mngaZXfxz{{qfefhkmnpxnY[`hmh`]bls|xleğ|sor}p`kghlkmnkilmopsutvwusuvznqxwqmuzzzzxqw{kchhR|bZZitywvopqyuo}iZ[_ahh`WTVVVUVX\\``babegggfb_UONLLMOQQOMMNNORXZZYWW[``\\Y[]]^_`aa`]]agkmlid]XWVTSQSVWWTQ\\_UTQQ\\a\\WVVUPPQOQ\\ft}unlON[[SZVN_}|lXQPZZCiԟi_fggjlllifeiXPXUc{cWSV\\a`QS^OGNQOPOOPPPObaQTSOLJKLLJONNRNMLGIU^dc^ZVUUVVVWUSMOVSMNXbc^UQSUSTSQOMLLLLKKKJJLNOOOOOOOPPPPQPNLLKKIFGKKIIIIILONLLMKHFHJJJHHHHHHIKOSUVPGGPGHKJJJIIIJJKKMQSRPPNMLLMLKGCCCBDEEGGEDDCCASKQRQNNPUUNIHIKKJNl|qeSCEEFHHHHHHHHFFGJKIJKLKHIIFDDDCCDEEDDBCEEEFEDFJKKJJIEOc\\IDHHHGGGGGGHHEDCBBC@@BABAA@?@@?>>>===<;=>@AACDDDDDEDDDDCCBDEFFFFFEEDCA?>====>>>>==<<<<<<<<;;<=>>?ABBA??@@>@ABB>;@?>>>@AFGDDEEB>;;<<;;;;;7779=?=<<<;<8:;99;=CHGHHFECCDCA?>=;:9999878989<@HOG75=?=><<<:747:>@ABB?9675567776557:=>=<=====<<<<<:842258=@BE?;5347:==>??==>?@ABBCDDEEGFFFCAECBA?<96676432/-/0/././..-./**.03779<;<9;=<:;9536765456555337=BB@BA98:746:>BDGGHHIJHEFHLHA;7:835;@A>;99::99899768;8Mio|rM9;9879::;=<<?B@=<::;;<;<>ADDEFGHC:79;9;?=:47FB6679<;<;;;<<;:;<;605>@?<:89<>A@@?><;:866655544444457777679:;:998657::8679;=??=;8<?>=;;;:::::99:<=<?ACB>9524679:98BB==66;<98889::::;<==??>;>ACN[=341.-,,,..0003535::9643.0520//.-,-./01221//023322122124578767850,+.../0147;;4+-.-/8:468/-,-/.//44..39841/,+/4623?PZR@4/-++/4551;A<50*(*'*9@<9;:60.,/52-+,--/.,*')+*+*)'(% 6R<5?BA<;=;2.371.7BB@@81/-..,+4EOSE').+/0-)*,-1531134420330.+.011110/039>8441,+-+*08@?56::::4/790-+-14=:0--.)*+*)(3AHIMI?94../-++0346CJE=><-4`x]8.0-3<?<86;A?79;99;BFHA74325;824:AEFHA30=HB66WY>BFD>@B=<?:1+,///00/013530/-,+-/,+-17AGG@9IYRBGM67k]3,9@CD>9::38\\mQ4AXSE@6/0319OY[Z]fprokf_\\bilkmolaZYY^ionllke```_agg]PP]bWOQW\\\\YSQQRQPQRRRRRTTSRQPPPPOONNNOOOPRRQQQQQQQPNMLNPPONMKMMLKKLKKJJKMMNNNLLLMLKJKKKKMPRSVZ_de`YQLNONMMLLKKKJIJLLKKJJJKLPTZbfedhmdPDEHHHGGHHHHHGGGINNLLLKJLMMMMMNOOMKJKLORRONRXZZZX^e`ZXZYZ\\]_dihfda]VThgUWXXje]g[[Y[]Y[Z[XWVX[^`cdfkpnjotrklsrnmkjkjlmxuvie~z~|mWVVbzmkiahqv}ngcbca_a_bhytk}potrqx~ooa`bXdlihlpssuttwwsrtwztnmlpv{z|{up[g_Hwntxupqstvyp\\]eih\\RPRONSVYZXY[^`aaa`aa^[WVTQQOONNLKLPRSUWXWVUTWYYYYY\\[\\_`bcb^\\_dijjgc^[ZYTROQVWWSPUa_USUYYVTONSUTRMVbehiabgucF_fQ\\YQRtrprniw|qbZWMERݸ|^cghknoponns[LURMN_ml_RW`fXNYXLIOQOONPPRRBaXYSRNHILLIOSOPOMOQMO^ec^ZWWXZ[WTSQPNPTOGGRafc\\WTSUTQONMLLLLKJIJJLMLMMMNMOOPPPPNLLMMJIKLKJHJKKKMNNMLIGHJJJIIHHHHIIJMONQPSaUFHIILLHHGFEGLVXVTRQOOMKKKKIDCCADKFABCDDEFQKSRPOPOPTVOGFKNKIOozhOBDHGHHHIIIIJIIIIHJKJIHHGHHFEEEDDCCDDDCBBCCEC@BFIIIGGEEWcN@GHHHGGGGGGFDCCCCDB?@@AA@@???>>>>==>?BJMMDAEEEEDDDDDDDDDDDFFGGFFGGECC@>=>>>>=>@??>====<;;::<=>=?@ABCA???@?@BBA>?DDA>@@ABFHFE?<;==;;;;;;;;;<<>?A??A@:::;<?AGIGFECB@A@A><;;;:999888898:KWKJ>19??=>>>?=<;;<>@ABA9488756776678;=>?><;<<<=<<;;:85215=CCCA=86247:===>?>>>??@AABCFGFFEEFHB<>CA?50/-,.//.-,--,-----..012/*+-158;>@=::;:7652256642311212336;?AB?76:865339<@BFHKLHFHIJG@=;:964:B?<:89889987777:?8IlwuP9::975566667:BID@>>>=<<<;=ACEEFHIH?8797:>>:55?C=889:9989;;;;::::613;?=86668;>??>?BB<77644554444446777789;<<;::9767::867:;=?@@@@???<;;:;;;;:9:;<<;;<@CB?;84479=???AB959::8888:;::;;<>=>??=<?CKC9831.-+,,,,--02108>9014531.-,,.0/.--/023311221222222233566667775238725764348:4///-,>L7-2/.+,,,.131.--0242,*.2562.5JSH73/.+*,--,+,<B;3,,-)*48:==94/-,/7:40.,-/-*'',0,&%'(,1.4P@8LPF<?KH8,**.0-7@GE?5-/77/.0:EG5'(*+10,..,178403575433440-.001110//3676675.,01,/<J>59988<:456-,.,-1485-)+'()((',>JJIGC:2---+**+4>ADD@;84,#8g]0+3//34780/463499675:>88<BE?;967=AEGKME4+.9HMXWF=<=CE>8<?:510,-1597541230/0/-36..>JGIPTUF57==9:5=rzF48AEHLG;83,=UD+/IRLF>56859@HITXdmica^[[^aegeee]USVWWZahkkje]Z[ZX\\ddXLNW[XQMPWXTNMOPPPQRRQQRSRQQPOPPOOONNOOOPQRQQQQQQPPPMLLMMLMKIKLJHHJKKKKLMMOOLKLMMMMOOOONLKKLPVWY^^WOMNONLMONLLLJJLMMMLJJIJMRTW^cdcbgpgQHHIHGHIHHIIIHFFHKLMMLKLMLLMMNNPQOKKMNNNMMPTVYZVSX^ca^^^aa`acdbdd^_nk]Y_e\\}{s]`d_lcV[a]ZXVWZZ^cbaeiknoqrrrpmkjjkjlovxxww|u}mg~cS\\]r{tv|}y~lq{ynfjd^Z\\\\i~}tp}ldn}|pku|tj^ZSOV`ciltuuuutvvtstv|okxvwwxqp~eaf^brstwvttsqprrmrnjb_gf\\SNNNONQZ^\\[[[[\\^__][XWVUTTWXXVTROMMNQRSSTTTTTSSRTVVVWX[^`aa`]\\\\^``_[WUTVYZWOPVWVUSSY^^[YVSSQP\\a[WSQUXXUOLNPhrTLheS`XSIbwmhlpq~jgsteG|ȔibfgkosuvtvhKSRPRRRj|dP\\e[NNjx]KNOOOQQQSIm[kfUXTHGLNILONPOOTYTMZgf_ZWWZ_^SNNNOOMNNMLNXbggaXSTVSPPONMMLLKJJKKLMMMMMMNOPOPOMLLMMLIKJJJJJKLKLNNNLIGHJJIIIIHHIIJJKHGIWk~\\DHMGBEEEGHHHLZ`YVTQQQOMLMNLEABCGa`G=ACCAD[IWPILPPOPRQHCHNLJLc|v_HDGGGFHHIIJJJKKKJHJKIHGFGFFEDDDCCCBCCCCCABABCDDCEIIFFFCPbSAEHHHGGGFFEECCCCDDB?@@@@>=<=>>>>???@DGOMHBBEGGGEDDDDDDDGGFFGGFGGFFEEDA=>@A@@?>?????>>>=<:9:;===?@ACB@@@@A@?@BBAADGFEB??>BFD@===>>=;;;;:<<>>>@ABBBDC><<=@EDFFDBBA@>>>>=;::;99999889887GZHF:9??>>>>???>>??@BC@7/378877887788;==>=<=<<<<<;:95213:@EEA=7111258<=<==>==>?@??@BDEFFDBADD>;>AC7//13425987776786332224:>A8/,,.4;AA?;78753212444312/032332358=DB85676544678:>CJJHHIHFCA@><=;5:D@;:99999998777;?6Ft}\\78<878754554469ADAAABB>;<;;=ACDFGHJD95668==966;@?::9887679:::999972/7=73333356899<AA;7764455554444567789:;=<;;:97689:758:<=?ABDCA@>:99;;;;;;:;;<<:::>DDCDC:2349?CFJF=88889999:;:9::;<=>><===@C9;70/.,*++,,,,//,098.-14541.-,-.///./012321231/00111123456777765459A<4<@<73256521014CZE,-.-++**)*)+00223576124551+,3?F@2/.++*+,+-.176553-160,6<>70-,+-15741-,0/-,-13.*)+15:65I>5LO<4?IK;,%%,3637AFD8.6E=21000.*)((+0/,2405<;633776533650-/010000-/22122330.//-.?F>65446;>646/-,--0564-*,,((((&*>LJF=30/,+,****0@A:6143**&&DL++:51-+2;70-069;>?<;934:AFFD@=999?>=>DI=/5EU\\SNJ=;=B?95478570+-17?@><40:>@IJGG@3:LQJJNOYZE6<<331FL7BEDEDKPD76:FG=5FM@97018::>@=4W^h`URTVWY\\[]_\\ZXTSUWXXVV\\diiea]ZWUTYaaVLKS[XQNPQROLLMNOPPQPPQRRQPPPPOOOOOMNOOPQRQQQQQPPPONMLKKKLJIJJJIIIJJKKJKJKMLJLMMMMOOOQPNKJIKNMKMOMJLMOOMMOPONNMLLMMMLKJJJKOSUX\\^`_^dgZLHGGGIJIHHIJIGEDHJLNMMMNMLMNMMOQOMLNONNOOOPSW]bc`\\\\`bcdccb`]^_]``ajlb[diZt_hp[lfSY_`]\\XXWV[a__dhhggjlmmmkjjkkjlsxquw{zvuws~~d\\mtn~~yyzxznpw~|ic_XRWZ[enpmu|v|{wsjdc^ZUOSTSTUWY]\\h{yuuuvvuuyu~ɮidaceaY_qlccw{~~s{ccc\\ROOOPQUX[^^^]\\[ZZ\\]\\ZUSPMOQU[\\ZXXWVQMLNNOPPRRQPOPSTRPQV[]]\\\\YVVTTRRQNNNLNRYXXXWXWUQQSW\\]TOQRSVfdSSTTSSTOMQPMTXUVY\\TXd\\XSN}{wx}lo_Uѩ{hedgkouxxy{XTRPTVPTr~bU\\[TKc}VNRQQONNORMnSicPWUIHLMLJJLOORXWNHUikb\\XW[[RMJJJJGGMORUTVWZekeYSVXTQPPPONMMMLLLMONMMNMMOPPPOMLLMNLIIIIJKKLLKLMNNMIGGIJJIIIHHIIJLKIFAGftVCIXVHEJLPRRMO[_ZWVSSRQONPQMGCCDHbtbFBEA@MLIJPWVNNMHHQMBBLMJLdwcIEIGGGFHHIIJIIKJIIGHIGFEEEDDDCCCBAABDCDDDCBCEFFEEEHHGFFCGZ]HBGHGGFFFEDCDDCDFEB?@@@@@><;>AA@AAABBCB??AFIHFFDDDDDDEHHGGGGGGGHGFFFDAA@BCBCB@?AA@???>=<:89;=>>?@ABA?@ABA@=>BBBBCEFHHCB@?@?=>=>>=;;:::::<>@AB@?AA??>>?ADEEEEDBAA@><<<;;;;:999998899737LD@4:A><=>>==?>>?CCDE=-*157887887778<=><<>??=<;:886226>CFC=:51012469;<;<<>==>@A><=@DDCDA<7;97;B@632348::<??>>?>>>;8643339DGB;5/)*4=>952353322245467669<;:765544;B>646666577768;?@DHJHDBAA?=>:5=F@:;:999::::98:==:Q|xI8>;::97558988879<?ABEF=9;;;<>@ADFGKE95557;<:977:<;::9886578:9988960.6<7222334345668:85554355554446788889:;;;:::986787668:<<=AFGED?;::9:::::::99:;:9::@EDFGB5-.037>FD=878999999::9::::<===>>>>>;950.--+)*,--..,*0420102122/..../../0222221331/..000234456776655444766?C>8235886009AHVQ;+-,++*(('&)/-3<97<?95553/*')6A<1-,*-440,/3367:<3,:F;0453-++*+**,3870,05754420367;:;44F;,DH52<BC;31--5C@;=ED:,8UK712.)(()))*.115766:841487555574.-/30.-+++-1211222022/,.3>A6,+/5;;647639;1333.+.47.,+(',?QMB;0+++***+-.1;8.*(/1,*,'+5)*8620,3<<627>>;?ACFA836<<:<BC>;:;:989>>>LYSB:CGEDA>32310221.,.14>FIG:1<FL\\dc[G9BF?<?DEIOKBA=781Re/3ADEHFKQC3137<FQVM?2)(.6>>9666X[ZSPPRSUVWWWXWUTSSTVXYXUW^dedb`\\XUTSV]^XPQUWTQONOOMLKJLNOOPPOQQPPOPPPPNPPONONPRRRRQQQPPPPONMLKJJIIIHIIHHIIJIIIHHJKKKMMNOMLMNNLJIIIIIIHKNKKLMQPOQRRRSPMNLIKMLJJIHJLORSRUVVUVTMHGIIHHHGHIJJJHFFHJLMMOQPMMNNMOPPPPOONNPOKJNPU_dc``^`fhfdcba_]Z\\\\[_a`_bdb_ttTprWbc\\__`b_\\\\^_[\\`bdeeeeeeegijjjllfk{ywzuplgjwumx}{{}}mszwszsgie\\VYZYX]abhqpuzd[kpiYOQTUTSSUWSSQUkxwutvvvx~vu{w]Z[ZSYqsuoYj˿t{ysq|ti_XWUSTTVXYYXZ^`\\WUSRVWVTRQPNRWX\\]]\\\\^ZPJKLMMKMNMOPPQQRQSXZ\\^[ZYWVTSPNLLMMMMLPQRY[YZYONRSUWWSPTY][RRTUVZ`be_VVPKMTWSPNMRX[[ZSg}~p}|WaԹnb_`beiosrwpUSTTTUQQkz`RX\\RR[aZOPRRNLMPTK^aQNff[VPGDEKOOJJNOSTOHFQhof]XW^TCEEFFC?EPUXXVUROR_jfYSVWTQPPPPONNMLLMNMKLLLLNPSRPMLMPNLJKLKKJLMLKLMNNMIFGIIJIHGHHHHHJLIFD><HIEHVa^ZZYXUSMP[]YWVTSRQPPQQMGCBCFIRlbLGDLZA?QajcONNJHLLDEMNMOsoQGJJHGGGGHIIIHGIJIGFFGFFFDDCCCCBCC@ADFCDFGFCHLLKJJHHHGGFBDS^NBGHGGFEECBCDEDEFFB?@ACHJIHGHHGEDDDABCA??AGGFECCCCDDFIIGFFGGGGGFFEEFDCCBDDDDDCCEECA@@??>:::=?@BB@@A@@AABB@==ABBCBCDFHIHECB@<<<<=<<:<;:::=>@AB????>@?>AFECDCCB@?>>=<<<<::::988889::;846C<55=@:8;=<=>>>>@DFEF>78577776776558<==;=>?A?;874435;@CB?:545313568:<;;<;==<>AA>;:>BA@A>50226::50243568<<;<<>@@?A?<:87615?BAAC>5,+/55546566788:;::<=;9::97656777<<866655455665656<EIHB@AA?=<:7?F?:;:9::::::::<>=7N~gEEA<<::976:=>>>>66<?@DF<79;;:<=>ADFJF;77669<:9756:;:::9886577688896/.48422234433310124444344444466899::889::;::::97665579:<;;AFIJE:9<<;;:::898658:99869?CHJKA3..039@A<87899999:::::;;;<<<>>>>=<:62.---,)(,/0672/00032010121000//./23444421330.,,-./2455556655436::869>BA725><;900HVMLQH6-+-+*)*+,/.*.;<9=>;741/,(().31/11/5::621269;??0+?ME?<1*'(((**++.340,/8940/17<=:55;63FB+;E>66637?A8-0@JID?@=-;fW8132/-++)**,2987776431056468861--..-,+)*-//0223432330,-2CD5/33343116;>BI?771**/8@E<0*).@WTE@;1-+*))-/1362)&(-3/**(&)))/36655>FCADD>;=?>@FD8037988;<@CA@@=;;:9BSVF<@DBA?:2165200.,,07BGJJJB;<>F_ssZA:>=;;?FFC>=>==??<`nQ@77=DHGJH>97/.:I[[QPC0+2EPJ?997QQRSTTTTTUVVVWVUUSRSTVXWWY\\^_^\\ZXVTTUTSX[XSQSSQQOONNLLKKLMOOPPPPPPPPPPPQPQRQQPQQRRRRQPPPPPPOONMMLKKJIJJIHHHHHGGFGFGJKLNPQPONNNLKIHIHIIIJOOKJLPQQRTTUURRTMHJKJKKJIHGJLKKJKMKKKJJJJJGEGGFHIIJJHGGGHJLNPPNLMNMMOPOOPONNPOKJNOPSVY^ghfffhfcbcb^]\\Z^ba_`_Z`_jub]qi\\kuwumknaVajlk`_dec`bdehghgghgkmhnugw~}xyztky~{yv}yzmt}agolbcnun`YXW[_f|w]ZgqmaVWYVRRSTSSSQSgxyvvvvx|xrwpdllZXVSUU\\u{ywh]qu}|sosniidiqk][][YYXX[[[[Y[^^YROOPPOOOOU[YZ`da]\\\\[VPNMLLJILONNQRRPSYbe````^_aegb\\XSPPONLNRRQRTU[QZgXRPPSVX[ZXXRTTRX^fdb^_ZS`aQQSPMMOMMQRQNosfw|zodq[[^^`adeedmmZRTUUVWXYir^U\\`ZVTVYYZ[WTTRRQPGMRhmiaZRGBEKOOMMMNOLJMTbni\\WVZNAEHJGBFNVWXYWSSPNSahf^VVVTSRQONNMLLLLKJKKJKMPSVVQLLNQMIJLLKJKMMLMMLNNMKHHHHJIHHGHIIIIJLNKHJIIHGN\\_]YWURPMPXZYYTRQQQPPOPMGC@ADADUebMOSTAOddT[[XWSKGIJNQQK_tZHLKIHHHGHJJJIGFHIGEEFFEEEDCCCCCBCDFJMICBCFHGJLJHGGGGGGHGDBIRMEEFFEEDCAACCCDFFGFDDFHKLLMMMKHFDBBBAA@??CFDCCBBBCDDGJIFFFFEEEFEDFEEEEEDFFEFFFGHHFDCDCDA=<;<@BDEC@?>@AABB@<;@A>>?BDEFIKIDAB>:99:;;;;;::<??@AA?>>>?ACDEEA@ABB@><;;<;<<<:999988899::;:99=;8@>A87>>===>>@BEGEC@?;:98788766658;<===>?A@:6546<EEA=;86655335889;;;<<<====>=;89=A>==84216962111133347;=@AACCDDA???=<88@BBBCFD:0,/8BBB??>????>>>;<8434566569;:889888764446656657=AC@?@@><<::AC<:<;:;;;::::<<;<6PvUBHA?><<=?>:;>@EIC:8;?A>957:::;;<=>@EF@;9655897766899:;;9984454666773123322234332211113223433334588::9::99:99:::;<;843468::99:@FLG;5:=<<;<<7034214899::87>FJKH=3048;AA<:;:998889:::;;<<;<<<=<<=<:4,(*,,,*(+/4?@:5/,,.//01232111/.21/355663110.,,,,,/1466545654336;;9;;<A=417E@;63BdhO??@9-+,,,+-18=:317::<9:92//.-*)()02033566775346:A@0,=GCFG>/)**)+-/0///-+,1/,,18@B=735=:7E@)8EB8+*,1<A6/.6GOD35<0=pS24531.,*)()*17855544632643686/+++,,+,1234400/.000001102<F=/5=61210.,/63=GHC:7667;D@2--3DYT@;6000-**,-.050))*/42*%)*((,367789BHGEC?<;;;85=F@0-7;:65<FJLMLIFFB55MXL=8=?>=:975445531/2BRNKJHGF=5AfoB5437=ENRTSJ>:<?DBH^[VS@;CEDHF50@G>9?IVSN][D4C^e`XSJ<RSUUVVWVTUVVVVUTTUTSTVVVWXYYYWURSTSTVWTPTVSQQQPPPONNNMMMMMNOOPQPPQPQQPPPQRRSTTRQQQQQPPPPPPOOOONNNLJJJIJJIGFFFGGGGGGHJLOPQQQPPNMMKIHHHIHFJNKKMLOPORWWWVVWUROMIHJJJIHHHHHHHHHIJJLKKJGEFFEFGGGHIIGGFGJLLLNLLMMMNOMLMNNMMOMMNNNNKTflkjjeabefecba`aa`acb`Z[brzodg\\e~qwnW_kiwrdiap}hamkenkbfdhnnf\\jxyc]u}ry}{znm~^gsz{tkbZORewtb^_ipaRPRRRRSSSTUQVft|yy{{{||~s\\XYPINWdsrinnl}wfeltslihjkjkfaba_][Z[\\[\\\\ZYZ\\[TQQPPOONNSZXWbd]WVVUSRPMMNKINTRNPUWY\\^bba`_^^afmplhb[VVWUWWPRVQNTRMJPQPSVUVUY[Z\\TOWYYZZVYPa}PRTSQNNOOPQQOKV`^oyqp{|ht{uty~|up˭}_]]\\\\\\\\]^[`i\\RSTUXZ`ddjh_X`ehdaccca^[YUTMQOPTaecfhhbYNFEKNLLLNNPUTYhh[WTRLLNMKHHOVZVVYTMOQVY\\`giaZXVUTQONNNLLLLKKKKLLOTURQQLKMLJGIJJJKLLLLNOMNNNLIIGGHHGHHHIIJMQQOKOYa[LGKSWVSSQOOMNVYYXTPPQQPPOOMGCBADHGBN]PUQHJTPDDN[SPHEGJPSSQIgaKLNKIHJJHILLKIGFHGEEDDEEDCDCCCBCFFIORRNIC@CFKHCCDEEEFFGIHFDCGIGEFFFFEEDCCCCBAABDFHHIGGIJIGGFDC@@A@??>@CEDCCCBBDEDGIGGGGFFEDEEEEFEEFFFFEEFEFGFGGEEGGEBA?=<?ABID@;=ABBA@?;:=B>;;?DFGJKH?:AC?:9:9;<;;<<>?@ABA?=>>?AGKG@>>?@@=;::::9;;::9:9::999:::;;:;=??@<?827CA=>>>@CFGB?;95666688667757;>?>=>>>=98;@CJL@8886654226799;=<<<<<=====;978<@>=:558:<:42101233335>EHFEFGGFFDDDCDDCDBBB@BEA<:427=>@CDA?><;;;765445667788;:979::998666556666568<>>>><>>>?A>:9::;;;;:::<<<:<5MjKCHBB@>=@GF>:;=CMPH<6:?>94689:9::;;<@DC>973267766788::;;:;:63233455554443233344433444443344333357::::999:<<;;<<<<<;8557:>>;989;BG>56<=;<<>>4,.//02579;;98:>BEE?86;>>@@<9<;9877889:;;<=<;;::;;;<<:81+,+,--./.6;996/)+-../012210/-**(+03456420-,+,/0146633534544458;<=;;=9201<I<410WwY93232.,,.//1588:=:9:==??=;:;<;974582-033479;<<<=?@@42<>;DI?4/,+)+/12211-)++''0<DEC=77>A><E@5IKE>13><761257@G=,-75@jH/6521/+(((((,/3441146338:865-()*+..,198664460)(()*-1126><1*1;72012.'$&(.DUL@>>==3+-,/4;GQE/./-/20+**++-3-&'*1770))*))/78788;=<;88:999:843<B<58:7756CGGOWWUTPC@RR>;@ABDC>:4102551/26>JKJIHIJA4>jT-6:;DILTSSYWJA?ADFJRUYVLIME?DB/+@MK@==A@ETiaGL`bbc]L9ZZXVWXWVUUTTTSSSTUTSTUUVVVVWVSRRRQRTSUVROPQPPPOONOOOONNOOOOOOPQQQQQQQQQPQRSSTVUTSSSRQQPPPPPONNNNMLJJKJIKLHEEFFFGHHHGIKMNMMMLNNMMMKIIHHHGGHGIKIJLJKRVVTQSWYVQLIHHHJJHHHGHIJJJKLMKLMKHGGGFFFFGIJJHGFHIIIKLMMMMNNNMMMNMKMOPNJLPPPY^ZTkgU^``cfijjhhjkjhgecmzuheauwnuZenlvrgc|lgulX[cma`eXdjp{g\\lww{wm|}~}xrrvx}gese[VR\\ddfc\\fp`ONRQORSSTUUTT`t}}|z|zaVX]iwĢrw|in{rorotnlvxvnc`dfghfedcbb_][\\[[[[ZZ[\\ZTRRRRPPPNMQWZ_]VTWYWVUQMNPONOSRLR\\_ad`]_bd`[[\\]abed`\\Z\\_bgcXSTQQXIwbHTTTSQQU[YVY[ZUUUTTTXWTYR]QdkPLPPOPOPQNLJLMOULFRYcrtvsmklhy[Fpa_\\ZZ[Z[YZ_YTRSWZ]_dcaie[Z\\ZZZZYYYYYXXVTSQNQZ^`cekppgVE<CKOPORUVQSae]ZQGFJKIGIPW\\\\YWVQNJMZca_`dfd]XVWSPOOOMMMMKKKKKLNOOONOKKLIHHIIIKKKLLMPQNNONLJIGFGGHHIIKKLNRNKPelcbTIJOQQOONLMLKTYYXTRRSSQPPPNFCCACGGCABMTQJJKKKJIHBAADHKOOMLIIMOONKIIJKIILKIGFFFEDEECCDCDDCDEFJMOQRPMPPJEBBFGDCGFEEEFGIHGGFGHHFEFFFEFDCDEECA>?@AEFFEEGHGEDDAA@??????BEEEECAABDFEFGGHHGGGFFFEFEEEDEEDDDDDDDDDEEDEFFDBDCBAA@@?B@=:>BAA@?::;@?<<<@DHMLC96>DB=::::<=;<???@BB@>=?@ADHHC?>>??=;:::::99:;::;:::999:::9::;===9<70+.?@<=>>?BCB>:666766777557758=@A>==<:;=?DJLH>335555579:;;<<>><<<<<====<9999<?==968<<:6310012233229ADDDEFFGGEEEEEFFDCCEDCC?<@?4.27?C>64455554446887787899:978:::;9899767655557::;=?BBA@>=<;;;:;;::::;==;;=7SZ>GHCDB@??BGG?::<HPNH>8:?A;8899999:;<@CEB97535677679989;;>?=85224344444554334334455555444444344569;;:999::<<=====>>;868;@B@>;999<>76<>=<<=?>4/../11135778;<;;<<:9>?>>=?=:::9887889:;<=<<;;:;;;<<;?B;41/..3851204683,-/////0101231039502335420-,--/04?EE=347533346:CD>56:2+-0AK940Dm\\6*12/,./012223/)*/2008?B@<;;<>>>@?==;9;@?9:?><>GKB8:98721:@9/12+),266532-))+(*6FMH=557::81<QTYJEHCEGI>748<:884,)3:BV<0331110/00+*)*-14212426;;51/)')*,-++6@:3.,362*+--*(*/36;62/2;<5<@70/1346AQH===82,'&+3=EFE:,++,/00.,+++,11'%)19;93+)(+,05<@:302345559AHF>62;A<55882/7<4=Zd_\\[RIOUPKKFEED@7.-..053.154=MKEEFE@56QX3-NbmwiSVVNTXNDA>@GNSUVWURMC9;A5/<FA7CI;:AD^i[Z]^[RH;/YYXWXWVUUUTTTRSTTTTUTTUVUUVVUTTSRQRSQQTTQOPPPPPPOPPOOOOOPPPOOPQQQQQQQQQQPRSTTUVWWWXVUROOPOPOMNNNLMMLLLJKLKIGFFFFGHIIIJKKIIIHJMMMLLKIGGGGGFEEFGGFFFIMNLIJPUSONMJHIKJIJIIHIKKKJKLKLNMKJKJHHFEFGIIHHHHHHHJKLLLNONNOOONMMMPRRNPO[ZGIQMX^UZWZ`eikijkmpqonmlpqpnmtt}p_spiwrdةxqvbRQ\\~\\n^^ikiw~h]qystx{~uuzrvxknupsobtui`VOVdbYgqcSOQOQRSTSTUSUdqtxuZba¿sfqknzwtolx¹tkywf_aa_bfgggfedc`^[ZVTWZ]a``b^XRPQQPOOMOZ_[YWTW]_][WSNOQRSQPOLUcea`_\\^fje`[ZZZ]_]\\[[\\_eigcZSQULT@QUTRQRVZXURS[\\TRRRQT]RzyI\\bPn|RQURQQPPOMNNMNNLKJLOT_imlda``eedZp⽀caa`aa__`]WUTOQY]]_`a`__]YWVUSRSTTTUVVVUTSTQQUYXY]agjf[FCLQRQSWVQOYb_[NDECFNSW^b_Y[a_ZULIWeea_^bec`XXVRQPOOONNLKKKLLKKKLKKKKKJHHIIIKKKMNOONMNONLJIGGHHHHIJKLLJJP\\ihhc\\WLIMNNMMMKKJIRXXWVSSUTSRRPNHECABFFGDALTQIIJJJHFDEEILMNOKHGIDKRPMKIIJKIHKKHEDDDEDDDDDCCDEDEIMQSSQOOOOOMGB@CEDFFEFGGGHJIGGFGHHFEFFGEEEDDFFECBBAAACDEEFGFEDB??@>=>@ACFGFDDB@ACDEFFFGHHGGGGFFFFFEDDCCCCCCDDCCDDDDDEDCCDDDCB@==@>;7:?AA@?:;:>>?=;;AHML@78=A?=:;::<<<<?>>>=<;>EB?BEEDA>>>>><;::::::::;99:::9:::99988:;;9:::70--3:::>>?AA=<97788:986665555:?BA=<<;8;CHJJNE5.044445>DEDCBBA>>=<<<==;:989:<=?=;<<?=621210112222116?DDCEFFGGEEEDDDEFFHJIFDA?>?;;58<:41354444344557667779::989::::989998863555788:<@DDD@;:::;;:::9::;======<JB8KLDEDB?==EKG>;9?HJKI?68BD=:<;989::<>@AB>98766776798667:?CA;63333224545643445445675455554443445689::989:::<<<=<=>>=945<AA?><;::<937@?==<=>=720110//01126:<;8964;B@>?>=><88;;98889::;<;:;;;<<<==<?A:322004843269473..//-////02456Jf[8177665322131.,3@JNEBG:1210026?C:-192.16?=307S\\3&,00-+0332120.-+('&'*3><72/---/00124=A@BD@=DB:8AF?8:82-*+156356,(*19:82/+)+-/28JQE::F>.,)\"1RJA@IKFC<BA958840.,**19?A2.0112245891+*)*-122310670)*-,)((**()2985*%,01024430*+16;;;::<7=QI339AFEA?JC42/*+4/'-9EJH@722/-.-.0-+,,.38/'*27663,''*+/9GI<005:=;:@LW]Q>625:73593/024.0Oc_[^UEI[bTB>BEFD=751139=;6535><37<;:;97,%En~\\VSIMULB>;=DNVVTWYSID98D</7>55`oRBG=KbjplbN;3/+SSTWWVUUUUUTTSSUUUUUUTTUTTUUUUURRRQQPPRRPPPPPPPPPPPPONOOPPPPOQQQQQQQQQRRPOQSTUVVWVUTSRPONNOPOONNMNPOLLMKKKKJIHHHHJKKKLLKJIJJJLMMLKKIHGGGGGGFFGFDFGFDCGHFILNNMMLJKMLKKIIHIKKJIIIJLMMMMMLKJIFDDEFFGHIIIIKKKLLNPONOQPPOOPQRQTYMYxfTQXR]``YQWY^`accdhfehjifhfgicgrzfeylpqhzveZ^SÉhn\\_`llfnyk]qxy|vtosy~ztz~jgimtpuubnwgRSqhTcqiYPORRQTVVSUWZiƑfqpXĴ}]fprtvvrns}uǮowwe]aabhhedbba`a__^Z[XRSV^ebabec[ROQOLOT]e`XUVTTY[[ZXTOOPSTSUVRWcf`]]\\]bdda]ZY[]`_]]]]^cffc_XSUE~WEUSQQRY]YROMLW^WSQRRVR^UP``Vt{SVWSQQPNMLMMOPNNMMPZab_`a____cejommzȖk_`dgjlknoYQTRW_a_^[YXWX[^[XXVSSRSTTUTTTTTTRORSQQTW[^ac[SQRRPQSSOMU]^XKHJJUdgdc`WT]ffaXPIP`ga_`bcde_YXTTQOONNMMKIKPOKKLLKKKKKKIHHHIKKLMNMKJLOONLJIGHIJIIJIJKKJM[fc^Z[YULHLMMLLKLLHGPWXXVUUVTUTRQMIECABFGDBISQNJGIJIIIJKKKJMPPNLLLNOPOKHHIJKIGJKJFEDDEDDCDEEEEFGGINPPQPOOOKIHEBBCDEEFGHIIIJJIHHGFHIFDEGGEEEEDEEDEFFEDCCDGHHGGGD@>>?>>>@ADGFDA@@ACDDDEEEFGGGGFFFGFEEDCCDDCCCCEEDDDDDDEFDEECCA@@>>@@>;::;?AA>9;99=@<9:<BDB>89<;<>:>=>><=<=;;<=<>?@@ABABCA>==<;;;:::::::9999:::9999:::98:;;999:;:40.5:;>@?B?::869999888777577;?AB>;;746BKLKH>62475557CFFEDDDA??><=><<975578:;==?ADGF=4/010//1011004AHEEFFFGFFFEFFFHHGGIIGEDCA???B>515544444433434666777799::<<<::::89989865566679;:=BC>9899::9988::;==>>?@@;69HPKIDB@>?DJH@=;<AEHHC:::?B?<;9999::99;?@;77887767767538>CD=5331132000345544675567656765333322346679:9::::::;<<<==?:36<>??=;<978626>>==<<;:;;62-,/0013788:76965=A?>?>==;79=<:::9::9:;::;;;<<<<;;:96211111014585/...,+,3342/01234LaK.020123455;<5/-04BNJS_D0544345:?7*18/0:@<-'.;F9)+,,-*-4621000//10-,09CB72/-+*('%)-.2:>759BB>;7403@PL8++.0446=<4.((.:<5-+)(/7:48ML:>IG;/2.(8J43EI?8889=:4410.,*(*/575.,/222221054-+*)*-....17/()/1-*)*)(()(*37-'+./0224>C6)+5>AA>844EL6,2:@BA>;?E1#(2@9*&4EJIEA7252,++)++)+-.185,+03/,,+)().8DGD>:;>BFILS]c_L637742561,.57543<RY]_L<J\\\\J75=CHNPPJ<8>BDHE?7..,+3:99CF9/@f}tbOD@==DC>:8>@FQSPQUSID>;E?1581D{Q44+7UiuvY6,02/TUVWVVVUUUUTUTTVVUUUUTUUUUUUTUUSRRRQPPPPPPOOPPPPPOOONMLNNOPPPOQQQQQQRRRRROORSTTTSSRQQQQPOPPPOOONNOOONMNMKKKKJJJLKKLMNNNLJIJKKKLNNJJKJIHIIIIIHFGGHIGD?AHIGFJONKLNNONLKJIIHJKIHIIJLMMNNNMLLKJGEEFFHHIJIJJJKLMMNOOOOPRRSSSQNQ\\XTzzc[Wi]zgc[MY`]ZZ[ZZYW[__^_]bcbdcl|zycnwnat~}mnb\\vLTUcvqpw}~~p]m|||xwmxwx}utxefjntrw{hlvfwkPXkk]SRSTX]\\RSKZƗphkjYzieqxzxwuuuypwxyg\\debbecadc_^\\Z^cddcaYUUWZZ[[^c_UPSPNS^gf]XXWSRTVXXVTONPWWUZ]YX]a_^][Z\\`ca^ZXY\\`cb_\\\\]`b`_]XYQR@OSONRY]XQNMNLP[[USTTRIzuKV\\^XxzQWYTPNMLKKKKMNMNOOR]d_ZXUW]dijkihifa[XYrxaY[bkrnoxkRR\\aba_^\\XVUTVY[\\ZWVUUUUWVUSRTTSSUVSQMLT\\]ZXXUTRRQPQRPLU]]VJEQchgc_\\SNW_`][UPKMZgb_abccefb]XVTRPNOOMKJLNIGKKKKJKKKKJIJJJKLKKLJIJMONNMKIIIIJJJJJJJKKLUXOMORURLHLMLLLKLKIHMVZZXWXVTUTRQNIECBDHFCKTMHJJCELJIJJKKGCHNNNOOOMIJLKIHIJIGGIJJGFDDDCEDDFFHHHIIJKMNOOOPMGDDCACEGHHJJIKKKKIHIHHIIJJGEGGFDEFEDDDFGFEFEFEGIJIGDC@>>>>?@>@CCA@?>>@DDCEFFEDEEFEEFFGGECCCCDDDDFFFDDDDDCDFFFFDB@>=>?AAA?=;;<>?A>:;98>@=99;<;:<99;9;><@BC?>=<;;;?ADA6:RN>ACA?=;;:::::;:;;:999:::::9:9::::98:9976689999468:=@?A?::989999889777578;?AB>97501;FNLA95699657;EFDCCCCA@???@???:543567:>BGF@@AD@869975762/113?IHGGEDGGGGEDEEFDFHFEGGEB@@@CF:24753354443433676677779;::<=<<<<;:9989998766688888=?=879:::9989:;;===?ABD>85AMHHFC??@DGE?>?AGIGFFD@;8?C>;::9999999;=;76886556567424:@C>6211121.,-14443566655567775321111123355788:::::::::;;;><9;<=??>=<:62478;>=<<:::>?:4,.2238977975438?BB@>=>=<?CA<:<<:::999::::;;<<=<;;;87531100/2431/.,...4;ABA9/-/12353-,+/6313466;=620-->RTVXM<6776669;4+24,2B@2)+,/./1-'+/,/77202221269:;FZXB410/.02,$4C<9>?6/4AE5)28.*GdV;.05;>:69;1,*).;=0(((*0<6,5E;2<91.0771?N96;:26978773../-*))+.012/-/000021+/20+*)))))+.02--3640--.+('()*14.++---,,0>?3+-4=B>71/5:2*,/57:960+=@16A?5.3@GGC<94.-/,))))))(*+/64/...-+)++,/5@A87=??=>BGIIMOJB<:;<832/*)/:>85309K]ZA8HND;78=CFKOTQ@8BEDHJHE>54?HJGFILGCSus\\PLLKLKB86:99?ACFEHIGGEEA9;:373-Qt;!&&*:]rC*/7:7WWVVUTTUUUUVUUUVVUVVUUUUUUUUTTUSRRRQPPPPQPOPPPOOOOONNMKKMNOOOOOQQQQQQRRRRQOQRRRRQQPPQQQPQRROOOONMOOOOOPOMMMLLLMMLKMOPONMKJJJLKKMNLKJIIIIIIIJIGHIJJIFCAEIHFGNRQPRSQPOOKIIGHJHHIIJLMLMNMLMNLMMKJJJJKJJJJJJKKLMNOOOOPQRSTTSQPYgkwm[`Ukgfmp_R_`XUWWZ[Z\\]\\]]_cdfsysxyrgvwr|tws|xsxdRnOay}~~}~~{z|obu~{xryfp}~vutrkjmrsvqnuw}z{hZXch]TQSX^fknehŝdXWU\\Xmyfmv~}zvvxxv}ttkbbdcb_^bjole`\\[^cgiheb]XTSWWUTWYUUWVTV]cd_[ZXTRRSVVVVTTW[\\XUWZXX[^^]\\\\^ab_\\YWWY\\]^[YYYYZXZXW]JncGROMP[]VNLLLNNOYbYSTUPMntSQUUVSxwMUXSOLKKKKKKMNNOSRORXWUVXWX`dfga^cb[URRNM_li]WZ_ehenrXQab`^Y[ZWUTRPMRVSPRQQQRSSSRQRRQSTURPKHNX\\YTSSTTSQOMONJQ[]ULPbleYTUULN^_XUSPNKLWfa^aadfkkge_ZVVTRQOMLNJFMSLIKKKKKJKKIJIHHIIJJIIHGHIKKKJJIHGHGHJJJJKJLNNMNRWZXVSSQMLMMIHJOV[[XWXVTUTPOMHEDDFFBJWP@BIHDDLMJJJJJGCEMONOOMIEFJLJJIIGEFGHHGDCDEFIHGHHHHHIIIIJOPNMNIDCEDBEHIJJJIIKLLKIIIHIIIIKKGGHFEECBDDDEBBDDDDDFHJIDAA?>>>>?A@@CB@??>>@DDCEGGEDBCDCCFEFFFDDEDEECDFFEDDDDDEDEEDDA?>==?@@@>===;<>?A=::9:>>=9;<<;;;:::9?GGBDC?>=<;=>@>;8FrvI9CD?>>;:;;;;;;;;;:::::9:::8:::999989973135789:999:=???><<;;;:99889887779<@AA<834528DNN>76678569?DCCCCCCA?@ABA@@>7421345;AEGA71.7CHGHKKGKB41224<GKHJGEEA=;866567AIFAEJFA@@@C<444446654444445565778999;9:<<>>>=;:998899:986688887:=;779:::9999;<<<>>@BA=:99<DHGDA@@ADFECBACIKHFEB@A97@A::::;;;:889987675445656532249?A;420/./0012455444443226665310/01111112322469999:998888;=<<=>>>>=<;8579:;>><;<;;;;:877747=;6787644=FECB@?@>?JPD77<<:::999::::;;;<<<<<;97432121222110/1109HPNPN>20011/-,.0.6B?633458973/+,=NRROTN=52122441./0/2;4$(,,+*22**2401651024556<CAJakS5/00..9=1.GUF<?=;30@G4#,882QlN;:64CJ<0031.,(+89,%')*,0+)/2-45,,0235/=M<3,039:430.,*,,,**+,-./0..,-/-/23.-11+))*('+032000420//...+''-11/**++++*)+..,.13584--//)%+-+./00,)%2HG@GFCCKLIGA831/+*+++,.-+)().42/.---,*),/5:;3-3;=:9<@?9:BB;<@A>@A9.*),3:852.+*6II;9=846:=>??@FLG95=AACFPSE68EQXXRKJHAP~dRSROSWXZRC;8:?AA81?G?:BE</,.02/*DgW0\"()$'ZW./569<RQQRRSTUUUVWUTUVVVVVUUUTTUTTUTTSRSRQPPPQRQPPPOOOOOOONNNMMNPPPPPPQQQQRRRSRQPOPQQQPPPPQRQRRRQPOPONNOOOOPPPOOOPOONNNNOOOPPOMKJJKLLLLLKJHHIIIIIIIIIJJIGGIFDDEGHNUWUTUSRTSNHGGGGHIIIJKLLMNNLLNOONNNNNMMMLMLLMMMMNOOOOOOOOQSTUWY[fwsd^YT\\ib}zy]V_\\Z]_adc^[\\aeecabsy{vrzvx|x|zxvuvx{n^gx~{wxz{ywwop}}wuugnmpzxmmnoqu}wtketz}xno{}wpb[bcXMMSZjyͱfKUTSWNPdfosvwtstty|xoiedccb_Z[gtvpja]]__`cgfda[XXZYXTQRW[[[XVWY\\^]YWUTPQUZ`aa`^]]_[UXXW\\`[SX[\\_`^[Z^ba[SRSSTUVTTWXXQKJPSQTZ]WNKLLLORRV^ZWWWUUTOQTPSNR}oKRTOMLJJJJJKNOOQVUPOSTRUbi`WXWVVVYWUUVWY\\\\Y_gfa]Y__]g_W]\\[XUTUSQPNNNONLMMNOPPNMNNPPNNNMMMKIIMQTTSSSUXVROLIHFJW\\UWile`WPPOMX`[TRPNLKMXea]adgmrl^`fe\\ZXXUONONGOe`JHKLLKKLLJIGCEIJKMKKLRVXUROMMLKLKJHIKJIIIMPRUTSV\\ege_[VOMMOKIKS]`\\VVVUSSRNNLHEGFD@ISLB@CGGDFNMJJIIHGGIMNNONJFACHJKKIHEDCDEEDCDDEGKKKJIIIHIIIHINPNKGEDFGGHHIHIIIIIJLLJIJIHIJIHKJHIHEEECBDDDCBDECCEEEFHGB???>>=>?ABAA@>>????ACCEFFDEDCBACGGFDDEEFFGGFEEECCDDDDEDCBA@=<==<>AA@=>?>>=>?@=99:;??><<<=;99:<;:K^RGEC><===><89Gih7?D@>>>;:;::;;;;;;;::::99998999:::999974113446789;<<>====>>>;:88778::9989<@?=;677957EPH75755512<CBACEEEECACDDCA<730023237;=<71...6ENPRTRL=12014<FIIKKHC93/00344469:<@FEDA@@A;9536755544544456579::::9:::<>@??=<<;::99999988888779;;8799998889;<;=???=:78<9:AEGDA@@ACEGGFEEJJHEB>@?95;>:9:::;:98655565424444455423239A?80./.033333464222320123321100000000001222467788888778:<<==>>=>>=><<<;;==??<==;:;;<<<:9<=;9776427BFCCCBAACGJF:49;:::;:99:;;;<;<<<<<;:8654432122210000/5GSRPNK:343321//1237>=4/17<=;841./6@NTRW[K2.,/1100/...,+)&*.0022/*1772/11/024679AFAOuoE%(00-1=;/;QPC?>;961<B3'0>D<Vg@4=89IP>4672.-**.0*%&)*)()++).443467640<B-.+172.00/-++*()**,-/.,,,,++,+.10/.//,+++*(-344421/,*)+++,,(&+01.**02/+***+,+,--+1530-)()*)((())+.12?H;<GAEOH?;740/0.,+,--152.+*.10,++,+**+.4740059:<=BMQKEHPJ>:8;?CEA6--2201.+,,,-24694-27526:<<CLE729=>>EOH8228BORICD>?epabXRPG@CPa]D69AA;0(4B@<@>2*)+*+*(/8-'&')#(]n9&/.+-4RTVVUVXWWWWXWVVWWVVVVVUUUTRSTSTSSTRQRQQRSRPPPNOOPPPPPPPPPPPQRRRRQRQRRSSSSSQOPPPQQQQQRRRRRRQQQQPQPONNPQQPQQQRQQQPPQQPPRSRQPNKJKJJKJJIHJJIIIIJJJJJIHGHLJFBCFIPUWXWVUUUVUOIGHGGHIIIKLLMMMLKLMMLMQQONNNOONMOOONOOOOOOOOOQSUXY\\^afcagg]cu`cvvf\\ahhbcgdabddgkid_g}zxxyx{vomnonvynmqorvwuprtuutspr}y{}{us}timio}zoopqqt{yrv}{hdlry~wnooookigcbc\\SQMOjp̺{NPTUTVSJ`ļhahijlljkmnxngffcaa`]WW_ioqleba`^]]bddb]Y[\\ZZWPQZ]\\[YWVVWYZYXVSPS[cikifffgmi[X]_el\\IKQTW]\\\\`gkncSNPRRQRRRUX_Lj`LSSV\\\\VOLMNQTUUTUXYXYYXVUTSRPTJRlGPNLKKJJJKMMOOOSVURPRRQQ\\gvrYSPOQRRRTWY]dgedlqj`Y\\[Yc`WWUVUSSSSRPQRSRQRQRSSQNLLLLLMMKLKHHLLNNMLNPQQRSW^^ZUWYXZ^`caZZ\\WQNMS[ZTPNMMLKMW]\\]dghmcUHG]fia\\[XSRPOYfcSLKMLLLKKIHGIWjoh_YURZs|fVRSPPXdh`SNKKJILSVUTUV\\fffb\\VOLLNPNJRbf_XVVTTSRPPMHGIE@FSN@?DDFECHPOJIHGGDELOLMNKFCACHKLIECBBBCCDDDDDCEGJJJJJJJJJIHHJLJHHFFHHIJIIIHIIIIKMLJKJJIJJJJKKJIHFFFDBBCB?@AB@@ABEEGE@>>>=>>>>@BBAABBABAABCBDGGEEEDCDGGGEDCDFFFGGFFFFDCDDDDEECA@><<==>?ABA>?@??=>>?<;;:<?CC@>>>;89=?><EVLGCA?=>>?;>LiǍD;FA>>>=><:;;;;;;;;:::::9::9999:::;:998632111114579<<<;::;<;99755679<=98:;=>;;;69:944BPB38943412@GBCGHGGGFFGHGFD@<:645443332221351/4BMPOJ:002225>FGGHHGFC<633455541125;?A?@ABA?9:;965664544556679::::9::;<=>>>=<<<<:;9999999888879999:::998889::9;>@;9969?<8?FHEAA@?CEGGHIJJHGFBCA:689<::99876444334443444333344224215>>3.0135443334300010000100000000011222334224666778889:;<===>>>@@>?>>@@<:<==<<<;;<<;;:98;;86687328ADCDDCBCGG>4159:99;;;98:;;<<<;;;;<;;:8755421222110100>OQLI@8101000///133465/,/ALC;644340;OUSSZM0+*04212110/..+*-/1553/,.45/)+--/37855:EHY}j;$(0114<1)7B?CG@=:86=:/-=NC=KR1)12:IL;570,////,+*''),,,,./02478867731?A'&)3<4,.0343/+))*++,//,*)))'(*-/,)--,-//+,+.3654310/,'')*)(*)(),004;=4+),252,)&(-28=;511/*&&(*+-/351292',-.5:73232///-,,,,/440.....+*(()*-.263,,7=<:<FPUVUWULC@<67?CDFB614/)57,(,/.+,381-13/+/<C@?DC;459=<>>753227>>9999V{cnmblhH7<CNRB29D?3/--5=><5/./.)'))'#\"$&')$3UJ/,*&$$&Z[\\\\ZZZYXXXXXXWWWWWVVVUTUUSRRSSSTTSSSRQRTSPPONOOPPQQQQQQQRRRRRRRRRRRSTSSTTSRQQQQQQQRRRRRSSSSSRRRQPONPQPQQQRSRSTTSSSRSTSTUUSONLJKKIGHIIJIIIIJJJJIHHIIKKIFEFIMRUYZXWWWWYYQJLMHEGIJJKKLLKKKKKKKLOONNNOOOOOQQPPPONOOOOOOQSUWWWZ`dddfmr~h\\hiktmjh\\]db\\^adjkkiflqkdiq|}}zy}{jedddgjltkVUbr}voqsqoqppuwnu~ysrvnhlkqzyrqrttv|}uroh]drvz|xtridnokkkjjfb]VUm}reZ̒MOWSTRRUNMÿ­y_fkgfhhhfmzjfedca`_][\\\\\\dkkiheb`]\\^aab_Z]]YVROV^][YYWUTTUVXYTMMYgllkjjoyweZ[cefrkREHNPTVW[_bgi^PORQMNPOOUR[k=WVSWYUPMLMPXXTVWUVWWXWWWWUSQQSLRnXENMJIILLLMOOOOPSUSOPQQQRO]{S[WXUPPQSUX[_adbbcca]WTZa[TSRRRRSTTSSSUUTTTSTVURPPPONNNNOQPLMRPOQPMMPPPOMSbijlt{xifeWFHLNOOLOUQNNLKKJKKMSWT]jmineVLACFZhf]WNJUad^QNSONMMNMFLOLWq`ZXb{q]XXVUavvaUPMLIIU\\XVVWY_a^]YTQONOONIL^faYVVUTSQQPMIIGADSNDBCCDECDMTOLJGFEDJOMJHFFCBABGKNHC@@ABCCEEFECBACFGHIIJJJJJIFGHIJMKIJJIIIJIIIIJJKLKJJJIJJJJJKMNNMHFGFDDC@?<<>>>?@CEEDB@@@?@@@@@BBABDDDCCDFFCFIHFFGFIKIGDDEEEEFFGGGGHGECCCCEEEEC@>=<<?@@BBA@@A>===>=<?><>@CDBBBA<;=AAC?;DB?A@?>>>=GhŠX@EDA@>=>@>;;;;;::;;:::;;::;;99:;:9:97764322233233459:9866664155468;==;8;?===;<;797532?J@7:84466>IIFFILKKKJJHJKJIHHE?:5565421024665305COJ@0033435@HGEECCDIGE<21469:65466:<>@AABA?@?><;;;87667777899:::::;;<;<<==<=<=;;;99899988887668;<;::===<;;9:<??::=8:@D;9EIGCA@@BCEJLMNHEFFGG>7799:::865554565554443443443332242/-6AA4.2554333332000/0000000/00000121244333213556778799:;:<<=>>?AA@>=>@@=;<<;;9:<;<<;<;7567667886568;>AABCCC=40136988:;:9999:;;;:9:;;;;;9754422222110005?GFB=41/00///0112357554-0FRE6/36688@OUTSZN1*,26687212133.''-27445-(.3-((*-/3872*->PjX1-341268,*/05CJB?729A4*5GI7786'&.543A@3-,.35540.,*)),/.-2962598755510AD+(+59744456861,)*,///45-*---)(+-*&*./-00)*-.266642443/,+,*)*+)'(,3@F>1*(-7>8/)%,9618??<6/)%'+.0111-(&,61'(--1BQURJ5+.-,*+..-,,+,-./.-**++,.10*$(1698>GJFELNC77>@@A@@BFC=6445:EA-*+,/1672/010/5@CB>=@B@=;;?BCB>62223<=96Bg|jfmdfvg>3=A@?816>:21006=:654530*))**)+0120->E0*480+($^^]\\ZZZZXXXXXWWWWWVVVVUSSSRQQTTSTTTTSQQQTTQOONOPPPQQQQQQQQRRRRRRRRRSSTTTTTTSRRRRQRRRRRQQTUUUTSSRRQPPOPPQQRSTTTVVWWVUVVUVVVVSSPMNMKHHIHHHHIIIIJJIGHJHHJJJFEFHOTWXXWWXXZ[XVUTOIGHIHHJJJJJKKKKKLMMNOOOPQQRRSSQPPONOONOPPQSSSSTX\\]abeszfom`\\ca\\]YXXY[^ceekvuppoorrot{~}||}~n^ZZ\\]^bjlbXXf~|vspnossutyrunrzwrsrkijjknyvttwww}|yn[dw~~}}~uuwqlvvuyvsrpd[]`li]^SrqWUUUTQPSOH}ſadpmkkkjgwplmgdddcb`^^_^]]aegheb`_```_bda_[UQOPZ`][XVTQRSSSTSOHJ]pqnprvrZW\\accoqVEILLNPPPQU\\deUMRSPNNKNPCJLYZVVUOLLMMQWVWZWUUUVVUUWWUSRRRNOOFHKKJIJMMMPQPNNPSSQOOQQQTId\\KQVchd][YTSUWVUVVUUUURQWWTSRSSTTTTUTRSTVTQQRSUVUUUUUUSQPRTTRTSONQTTQONOOPQV`mv{}yneWIFFGIKKLOMIJJIIIJKKMQZVVcmmwt]\\W]WXSITfeUMPTSQQQPPQ[hdX]wv_ZY]nwj^YVV_r~mbYRNJFO[\\Y[YZXZYWVTRQPPPPHFU`_YVUUSSSQOOMICGPODCEDCCCCDQXPLJFFGINLHFDCBCCAAELONNOOMIECEFEEDBAABCDEFGGHHHHEDGMNKIHKJIJJJIIHIJJJJIIHIIIJJJJJLPSQIDCFGFECA??AA@ABBCCEFBBDEEEFECBCBABDCBDHIHEFGGHHIKMMJIHGFFGGGGGGGGGGECCBCEFFDA?>==>@A@AAAAA?=<<<===A@>?BDDBDDDB@@@@A@>?A?@@@@@?;hq??CBA@>>?><;::;;:::::::::9:;;;9:;;96545455322344423347877656647<?;=@?=:>CB===::;:85333@B::;8677<LQMMMNOOPONLJKLJEA@;862344323346754431:IE90233449CIGEBB@=BILH?615:<<9;<>=>>??@@?@@A@@@@@?<8889998879::::;;<;<<<<====<;;:98888888886689::9:>ABD@;:;=ABGIB:;>@?=<AGEB@@AAEJLNMGCDDED=89::987656579<98743432334443234433213<C=225543332221000000000000000012246763211333456788999::;<>>>>=>><>?>>>?AEB::<;;<<<<:75678999:976579;>=:8533423677899999::::::;;;<<;;97544322100100132364325212111112358:@H>15>D?4/48<==@KVVV[J/*-479=<30420.,((17<745/+.30+)*-0463.(*7KszA+4:;3110-0202@JBF`dNJ<-.=2-0.**3A?1*3@=/+.26674/.,*),1..5>947::9754..@B(*1845797558740+)-41.67/.6;>/*)++(),,.00**,.1455324432/..+,,+))**3DF8-+)+4>=80.18704<=;5-*,-*,..,+**,0?G92552;ZuuX6*,-+((++*)+///16441/-,-.--.,('079?A?@DGB::@DCDDA?>=<;<>@A:<D@81-4:952235448<>@ABFHJKJLSSNGC94312>>:<Kbgcc\\UVXJ41567685.253..18=99<;641-)*+,,-3:=96=9+)7C603/^^][Z[[ZYXXXWXXWWVVVUUUTTSRPQSSSSRRQPQQQTUQMMNNOOOPQQQPPQQRRRSSSSSSTTTUUUUTSSRRRRQQRRRQSUWWWVTUTSRQQONOQQRTUUVWWXYXXXWWWUUVTTSQPPOMKIIIIIIIIIHJIHIIHGHJIGECDKQSUWXXYZYXY]\\WURKHHGGHHHIJIJJJJKKKMMMMMOPPQRRRQPPNNNNNOOOQQRSTRQUW[ZWe{{gbb_^_eic[YZY\\a_]`iz}rqtxxpmv}{vxzz{||zh`[Z]]\\aheabfnvvtqkggkw~rgl\\l{|xyuttnjkljlxso|yz|}wv}yw}x^fy~|ywvqouy{vpmfWTUXXcpj`xWli\\UTRPRRFcƝlcoqprsonrmcgkdcdecba_]^^\\\\]^bfeca`acb_bhe\\VRQRW_`[VTPNOQPOPNKIGK]lllw|dX[adiuxbIFKLLMMMLLORT_`RPRTPMLSHPuD[TXVSRPMNOPQUX`]XVVVUUTUVVUSRPPMMMJIIJKKKMLNRRQONQSSQPOPQRQKy~X[TVYykidZSQRRPPPQPOPPPUVOMORRTWVTTSRTVYXWVVVUSRQOPRRSRQSTRQQOOQQPRQPQOPRRNXluvsqiXKGJILMKLMMLLLKIHHJIJLTa^WWZ^niQJRQYmhSMPQSRQSSSQPqzbTXoi][\\iyh[XVZmyobYTRPSZ`c^Y[YVVUTSQQQPPPIENY\\XVUVUTURRTOFKTKACEDCCBACDQXPLJGFHLNJFECBBCC@@EKOUWZ[WOFCDFEEDBBAA@@ACEEEEDDCAFKJECJNJHJJIIIJJIHHIHHIIIIIIIIHHJLNMHBCGGFFDBACCBBBCBEHHGFHIIIIHHGEDCCFECFIIJIFEEHIJMHEHKMMKIHHIHHGEEEEDCBBCDEECA?>===?AAAAAAA?<<=====@@>@BBCBCCEEDD@??A@?>???@AA?@{X8>@A@>=>?=<<<<<;;<;;;:::::;;;;99:;;743346333345542344689::8886>EM?>>?=ACB?<>=869975437?91799768DOPPRVUSRSTRQQOG@95422333433234467544414>=6112333;EGEDDDC>9=FIIB745<><<=>>>=?@?>???@@@??AA>=::;;:8667779:;;;;<;<<=<=<<<;9887779998865799989@A@?=;;=?BDJI><><<?>8:EHC?>@ADIKMKFBABA<89<:975555457887644433444444433466557669>9455544344322110000000000111212468:87653223467878989999;;988;=<==>?=>BHIB=;;;;::;<96456788:::9876994023333112469::::;;:9::;<;;<<<<:85433221001110+*,.14761.00012333795?PD79889766:>>=;EUVUS=+,.347<;3041-+-4348@96564353-*)-01.,*)359bg92:@A5/.025872:GB6PveWK?-.+-./-3DM7+/..<?:0+-3650.,**+-//7@=9988851/*.B>,8@B>:74/.....--*073,---,1563/+++(()(,01.,+,1445311220//-++++**,/5;81..-.39>;41/.02585/*(0761.-+(&*.78@LG<577-5[Y(+,-,+)'&)+/7:1486551.--/04>D9.19<@?BKURKMRNGC??B?95:<>B?:20<IK?69:4/5977:;<<=@BEHHJNOQY`TDD@41;;558<R`ZYUMLOPMMI;559@;1/32,**+29@>:631-)*-..,*0:>>:5,)2856;<^__]]]\\\\ZXXXXYXWXWVVUUUTTSRQQRRTSPPPPQRRUWSOMLMNNOPQQQOOPQRSSTTTTTTUUUVVUUTTTSRRRQQRRSSTWXYZYWWVUTRQONOPPQRTUUWWXZZZZZZYXXVVUTSQPPONLKKKKJIIIHIJKKLKJIIHHFCCHLOTWXXY[YXX[\\XWVOJIGFFGGGHHGHHHIJIKKJJJKLMNNNOPPONNNNNNNNPRRRRQRSXlu]Phrb[^```dmi`^\\Z]^]]_fw{uuzzvsmnsu~ynmpuusvz|vf^^[[^__chgcdkniffc]]]arxaZp]]t|}xusqpoomjnln|{}xx{uvxx{}}x~]h|ywtouy|pgbWTTSU[hqjmbR[jcWSSSSTMKĿƱlmopsvvutvqrqcccbcc`]]][ZZ[]abcda\\Y^^]]_[SOPSY`a^XRPMKNQNLKHHJJNZhjn||j`\\]blttUGIJKLLMMMMPMKM]_NMSRMNQEfZM[TSPMOPNOQRRS[b^YXXWUUTUUUUTQOOMLMKIHJLKKMMNRQOOPTUSRQOORSD`^ejVXayw`[^a\\LDINNOOQSUX[`eZROKKMRWWSTTX[_abbba[SOOKKLLLJKOPMJILOPQPPPQTSSSRMRhsvsn^LKECHLLKMMMMMMLJIHHHJMUcfc`^Y_qgRQPQ`fXPTVTUUSSSSSQVuy_S\\w}e]]jsZSTW]fmmi_XUW\\`dius]V\\UTTSSQQQPOOKHKPUUVVVUTTRTTMLTM?BFDEDCBBBCOWOJIGGIMJEDDCDCDDAAEJNSTSTPJEBABCDDCBAAA?ABCCCCA@@?BEEDCIMHFIIIJKKJHHHIIIIIJIJKJIIHFINSRHDHHHGECCCDCCDEEGHHIIIJIHFFGGFDCEGHIHGIKJHHHFHKJHGHJJJJJJHIIGFFFDDEDBBBDFFECA@><<?ABCCBAA@??>>><=>?>?AABBAAAABA?@@A@??>??@?@=Dk?8A?@@==>>>>===<;<<=>;9:::;::;;;;:;<9533324457666653433359<<;89AAA@=;>?ACB?;;;74675433683.47985:JQPRU[[XUTTTTRJA:76554322233344467634423553113313=FFDEGGFB8249@GF;88====;=>>@@?>?????@>?A?>>>=<=<97665579;;;<;==<<====>?=:98888998865799;<=@?;9;<>AEGGG>9>@@>?><;@EB@>=BGKMOKECCA?;8:;97644664455444355554433322224667766779965555544444433210/000/001123345427=<<;:84235545777778767656:<>?>@A??@@B@>?<<;;;:89:65534556798788742232103310169:;<;:999;<====<;<<83311210123220../15762.,./0235447822>A;;9556779:;?=AMRRC1--.//.67..2.+)(++15==9678975/--.2/+)')65->E5;@F?/./17:<:34??,'5A>?UB55-13/9LG,+10)*7D>/$,551/-**+)*1:?9646762,)(.E9=MOLD?3--+))))*,+/86-'()+-,,331/+(&(,-.,,++*(+,0/0011..0-)()*)),.1/,..--15740..,(*.11/+&'4:;B@40+'()-13;FD9585%,]Z*./.-6B;-)-/19-1621/.+*+.4<CF@7436<?DOWUUZUIDGFDC?:9<=;84556=ILFF?1,1;<36===<=?@@BBDHIMU[P>BE6-=>565=ZXJE>AIMNPON>65=H@50351,*$'6?;892/-)*/10,)(.662/,**05:<?`````^]]\\[ZZZYYYYXVVVUUTTSSSRQQPQPMMPSTUWZYVPMMLNOPPPPOOQQRSSSTSSSTTTUVVVVUTTSRRRRQRSTTUWY\\\\[[YWWUSPOOOPPPQSVWWXYZ[[\\\\\\[[[XWXWSRQPPPPONMNNLJJIIKLMMMMKJJIGEBBFMTWXWX[[YYXXYYWSOLIGGGGGGGGGGGHIHIJJIJIJLLLLMMNNMNNMLMOOOPPLJKMNVwzwmcb`aacddddd_[\\\\]][`s|w|}yvnhktwrotxxxyz~we\\]^]ZVY[cjc^bjheca^]\\\\]`cb^pwskU_v}vsw{tpnijlnq|}{xz}vqqqqnkjiypai|wswxjw}q`VSSUT[opmfmvbia^_[SRRRSPEjȸ{kmoruwxy|~whbbbbba]]\\ZYYY\\___`_XSUVVTRQOPRV_b^YTPNNNNQPJHHJNMOannw}i``a`dnoiYOPLFFHJKKIKOMIJT[SLLNMQOFvsFRYUPJKOQPQSSRR[]\\YXWWUTSTTUVSOMNLLMKJIKLJIMNNQONOQVTTQPOORROuwJaiWXgwkYSNNUpkSRTSRTX\\bgimkcYSQRY^^\\\\[[^befgie]YZXUUUVVTSRPLJLNMKQRPRRSRRRRPOXktm]ROKDDHLLLNMNNLKJIHHHGHPZ_achok\\ahSOPSZXSTVUTVVTRRRSSSRk|_Uc}j]Y]ejsyymVKLNPQQPPNLKKQVZcuQW]VSSRQQPPPOLMOMMQSVVTSSTQORUODCHHDEEDBBBBMVNIIGGFDBDEDCCCDECAEINSSQQMHEDAABCDDCAAAA@@BCBCCAAA??@CCCGEFIHHJKKJIHHIIIIIJIIJIIIIGIMNOKJJKKJGEDEFFFHIHIHHHHHIHGFFFEFFDADKLHGIJHHJHBGJIKJIHGFGIKKJIHGFEEFGFEDCCDEEDBA>;=@BBBCB@AAAA@@AA@A@@@@AA@?@@@@@@B@@@??????????O·^5@@?>>=>?>=><<<;<<<??;9::;;;;===;:;:86554577777777533221168<>=;<>==<>@ABAB?;:864554433665347;849KSRSV[ZWSSSSPH@<:99765321222334356645532111243325AFFEEGGGHC:3257?D?<<<==;:===??>???@?@>>@?>>>=<>>;98665667:;<<==>>=====@@<<:8679<;86679;=?@@?;8:<=@EHEA9;DDHGC@=:;AC?<>BGKLLGBDB;:;;97665658;7433433445544422212224677777888875556654554444321011000221333552023578;;73444355667764455348;?CDFFEDEFGFGGB@??BA:<C?961/0244457976531110158623457:<;999:;<=>>><;;;611111102343210/03653.,+,-/48898770*3==;943344448>=?EMF3,,+,-+,22,-1.+.8>4-17<83598750/./0.)''*42*/-1;?=/.//18<=:22:4&$%-/@m\\99055/:F4'.32*(,3:/**230/-+++()177634563/+'(.C6:<42670',,)'()++++5;2)((+0896551,''*//+)+*+*)**+,.010-.1-(%'))**+*(,43+*/580',10+*-12475/0<HJ?6652/,*)**2CG<2::3LM4/0/-6LS?+..-,+/40,))*'(.5=?:774-,4<CMRQUYMFKLQQF=997310448:@DINTH-'4><01877:<@A=<=@CIIQT@4;F=/08;32MVF>AJKBA@@H</22>KD60365/.1-/999:3.,*+.///-,*('(()))-675:`````_^]]]\\[[ZYYYXVVWUTUVUTSTSPMMNNOTVXZ[]`^YVTQQQQQPONOQQQSTTSSTTTTUUVVVVVTTTSRSSRQSTTVX[\\^^^\\XXVRPOOOOPPPRUWXZ[\\\\]]]]\\\\\\ZWZ[YWUTRQPQRQQQRQMJJKLMLNOKJJJJGEDFKRUVUWZ[ZYXWZZXVTSMIHGHHGGGGGGHHGHIIIIIJJKKJKLMMMMNMLMOPNMMKIKOQQZwkaa`bdefccghfb____][k~|xwwpnx~||}{vuz}|dX[fdXW`gc`aaaba_ab_a_guz{iku{}uponpoosx}~|xwwvrkd`cjjaj|uwutt}utxgVQTWW_kigeca`aehkgfaXPLQ^dg¼nlmnpwyxww~rdadcba]YZZWWWWXXWY[WRXYTRSTTVX[`_XSPNNNPSTOILLKOMNbuszf_adlxxn^RNMLJGFGGFGHHIJKLORQLLKQMVgCJKRPLLQSPQTTTTVUXWVVVUTSTSUURLJMLLMLKKKKIJLNPPNNORVSQQOMMOJ]VHP_[YkufVSTKJĕyf^ZVVX]^]^]XZfkkjgfhfcabcdefggghjjhjjkkjhd`^\\][WTRTVWSPOPRSWROdl]RRUOHHMQQPPONNONLKJJIGHWb\\VV^khSYiRPUWUQSUTRQSUSSTRPQSPKi|fUQV``VOPNMMKLLKJIGEFHHHGFHHGKQSW`ylP]]TSQQQPPOOMNPRQKMSVSSURPRWRGCGHGDDEDBAAAJUOHHFFEBBDECBCCEFDBEHMQSRQMGFFDCCCDCCCBBA@>=?@BDCDB@@DEBADFHJIHHJJJIIJIIIIIIHHIHIIHGFHFGIIIKMKHGGGFGHIKKKHGGGGGGHGDDDEEBACEEGLKGEBBBCGGHIIIHFDEFILLKKIHGFGGGEDDCDEEEDA<:=CDA>@AAABCBABAAAAAA@@@?>>???@@@A@???@@???=@?8S̛F;E@?>>=>?>==<<<<<==??=9:;;;;<===<<:779988988867754212344357<???@??=>?AAB@?>;986644332366788:<959ITUUWXTONQPJE=:::86543123333334466645531122222229CFFFFGGGIKE834139?A?=>>=;;;;=>>>>>???=>?>>>===>=<:;:8764679<<==>?=<<;9:;:;<<=<::975467:<>?@?;9;<=<?CA<<EHHHID=::7?F@;<BGIJJHBB?878885577878;74212223333333211012235777889877655555555554443320111022211333221-,1444654344354579854433005:>DIKKLNLKJIHHEBDIJKFFHC:531025766787421011137<>>?=879;:9999:;<====;:96432112223544421332/-,,,,-.4<@A?961/9=<=;522223469:<AC9/+)*,+**----0/,7QYA(*.20-2632531/--*('(,.,*.*+79+&...18>@903<G:')+1>PMA;5=7-57*.553-)*(*-3/.0./-+*)++/0-24643,))().=5-*&'*./.02-()*+,,(0=8,(),,<G;574/)-21-)&)*+-0...00//..11,&%())*+,,+1=<.+0682+.21/,.7=@EF90H[H69;<><5/*('&1CHAEPMG>2,-0/.DcU3.-('+.1/-*(*()/5::631.*-7AGLNPRRLOSUXZI6.+-460-7=?ACDLJ5%)7=:567549=FFB??<:?DKMC71;DCA:0%AjT74ChfE<40JS5+-;LG8037:54>>1-9;92-,.-.,+++,-12-)))+.0013````____^]\\[[[ZYYXVWWUTUVUSRRRQPPRUWY[\\]^`bcc`]XUTRQOMNOQQQSUTSSTTTTUVWWWWWUUVUSSSRQRTUUWZ\\][[ZWVVSROOOOOONNQUWXXYZ[\\]]^^^][\\_aa_\\ZVTSTUURSVTPOOMMLMMJJKKKJKMKLNPRUUWZYXYZYYYYYXTNHGIJHFFFGGGGGIIHIIIJIJIIKLMMMMMNNNOOOOMLMQX[\\Z[cr|k\\_ffdgihgiiigfcbcc`dz{|pr|wpv|rorsngcfpy}snv|q]SW^__```ab_ejfnzxu|uqpv|tntv|{tleaelhal{yyxh]h}~qw}yroXRUY][\\]`cddffb_bbfgd_SYkvprĿkikgm}mnloztecfdba^YZYVUTSQORXZYX^b]YX[]\\\\\\[WTRONONPTQKLPOMNMLYlqre``esypmi\\LNWUQOKKNNMKJIIKRUPLNJAvzFILLKMLMTTQSWVVUSSUUUUVVTSTRMPNEHLKLMLLLKKJJLMPPPOOSSRQPNKLIHowGMN[c]fdaZ]b`Ryʦt_caWTRRPONNOWcifddfedcccccdefikkkjiihijjiijiihfecb`^ZVTTSSSOWiaOLPSRQOPQQQQPMLV`\\SNKHGIQUURNRZYOLgaOU\\XRSUUSQPQRQSTRPQRSPLQSONMJJLLKKKKLMLKIHHGHJKKKKJJLNPQRSWn~nYZXSQPPQOMMPSSSQIHRTTURNUYPHEEFFFDDDDCCCAHWQGHHGFCDDDCA@@CDEEFGFFKONIDFECCCDFFEEDDDB@><=@BCDB@BGGCCDEGHHGGHIIIIHIIIIIIHIJIJIHHGGFHHEEILIHJJHFGHHJJIGFFFEFHHGEDDBBAACCDFJGFFFGGHJIGGHGGFDDEFGKNNJIHFFGGEDCCDEEEDA>=>CHG?>ADC@@BBBAAAAAA@@@??>???@@??????@A@?>>><9s̿l9>A@>>=<<<<==<<<<<==>?@ID:::;<====;:88:977666666533457:;<=??@>ABDB@?@ABB@>=<98666544345579;;<=:5:JWXXXSMPSNF=:87:97544333333333456664653111111333;EFFFFFFGGIG9385./9@BA?>=;;;==>>===<>?>=>>>===>>=<<<:8876569<<<>>?>=<<::;88<CHHFB=:512358<=>=::;<;98;<;AIJIIE@<987@G@;<CHIIJGB?;65664579;:8674200234333223321112432356789:997554555544544432110011011001232////17866644554575479866653258:;=AEGIOUROMKKKJKONMMLID>;=BEA99:8998420023369<?AA>:888887878;<<==<<<9754233552344575465/**++,,--4>?>=7337>=:<:4100366688:>;50(&.1//.,,--...01,%!%***+02,.97/,+)(&')./+,11,57++//.-8BC8./<JC-'(-137?>:<5-2118665-*)''*,4>:,'+,('---*'-42+)(''('+4203>7*(.34.,))***+(,9>3*,+)7C:3331*,/+'&%&'+.//0021,*)/54+'&')*,-/489?>4.39933100/.07<?CE<9S^D8B@><951-)('$(6?>:94-&%*2<;=UY>/,((*-///-+++-/25521.('4DIJIJKHGKOPNMLC2)5N`cI/=IGDBDE1!&2:<<AB@=73;HMKKOL>5;FMLA9=ANaO06frC023ET@-/52QY:0:KJ=347755>G>*/>91-/354,'',+,9?91/,*)*,/0bbbaaa`__^]]]\\\\[YXXWWUUUUTRRSSUWXZ\\]^`_aaadfb^\\ZXWWTPNMMPRRSSSSTTTTTVWWWXXWWWUUUTSSQPRTTSUWVSQQPQQQSPOOOOONNOQRRRRQSWY[\\^`bb```bcdc``^]\\\\ZVWXVUTSPNMLLKIHIKLMNNMMPSSUYZVUYXWYZ[Z[ZPIGHJHFFGGGGGHHIIIJKJJIIKJJKKLNNNNPQPPNMMNRTX_^WTX\\`afjilokikkhhifefff`i~xnoxytwzi`cfdbcb``cpzor|wh[XZ``^_`bdfgw~ps}zvtssvqpuy{rkhefpj^gwtlbYWe{v~~^ZatiPOYcc`[\\_flmruwtrmjmsskgehplwĿicf`eihggmlfeeddc^XXXVUSSTRV^`^ZY`fb[Y[[[ZURQSQOONOOMLOPNLMMLN[kxfa]^hrrgistl_\\a`[[]`bdfbZTTTTUSOQC[[ALJLIJKMSTPSXWVURSTTRQSTWXMEecDHNNMMMLLKLLLKKKMPPKMVSRSTRQSL`XOTW]a^[[ZZ[_c[buVdtj\\SOOONOORY^`_____`abbacfgjjloi`^^____aefedccefdbaaaa_]YS^eYQQPPRTRONNMNONM[jj`WPJHGHKPPNOMMMIKiYRXYURRUTRQQPPPQRQPPPRTROOOPTYSNLJJKJJKKJIIIIIJJJJKLLNPRSSQOUbwpTWZTONMMLLSZUNKILSSRQNRXRGDFFFFEDDDDCCCAJWPEGHGGFDDCA@?>@ADFFHECGIHGEEECABDFGHGFEFEEEB@@@BDCBFHHHHIGFFGGGGGHHGFHIIIHHIILKKJIHGFEFGECEFEHJIHFFFDEDDCCCDFHHHFDCBBBA>=?ACBACGJJIHHHGGGFFFFFFDBFLLJJIFFGFEDDCDDDDBAFHFFNVODAGJGCBBBAAB@AA@@>??@AA?@@?????>>>=<::97:͖G7?>==<<<;;<<<<;<;<;<??AOD8=<=====:766776656445434338=@??@BAA@??@CB??@BBA><;977677554547679;;;<97BTYXVRMPUN@:9889:97666554331224655664444432123459AFHHEDEFGGFB9563029@CB@?=;<;==>>=>>???>>==>===??>>=<;98877899:<??><<<<>>=9347:@JPRPHA>:45:<<<::;<:7567:CIHHIF?;:769?A<=CHJIHEA=96564279:;:865310123544444433457753234578:<:97553455544553320//0000000000000//135897664555588448989986579::879:;<?KRQPMLLMNNMLKLMIFEGOY[H648:;:51013478:;;:966766788678:;<<<<=<9753234412444566663-**++,,,-4=:320,3AD<6530/./4966558986-'/6841.,,**++*(&$%),.+)+..,152,*)(''()063214332**-5737>A<1*3;;4.2578=><<:1/4786131,**))&&0AG9+*)*,0/,****''')-12./13.>]Y6%/KF+')())+--+2@</,++484/-.1.,+)')*.0222221230)%.97,'(()-125;A?=94236643222224304>B=CVR<?H@77=>5+'''%\"#*053*%)3DRYUDFK4.*((*,-//,,--//0110/.**8DC?AGFADHHHIIE=-*R{xgPIOPKLQL=<:9<>BEDFE>3/@PPR^aP<8ADA=965;XaOVgM.+5EEW[M\\rN7YU;?BAEC:4577;AA4(4?53:==;61//,,:GH?5,(*-./3bbbbbba`__^^^]]\\[ZXVVWWVUVUUWXZ]__`aabbdeeebYTSTTW[ZWRONPSSRQRSSSTTUVWWXXXYYXVUUUSRQPPRQQPOPOMKKLMNQQOOOOOPPPRRQQQPOOQRUY]``\\XVV[`cfhhgcbc`][XTSSRPNNONIGILKKNOMMOQSVZ^YQSXXY[[[\\^\\SJDHKHHHFGHGHIIIIIJLKJIJIHIJLLLLMQTSNLOPLHILNS\\]RLWfnqstrnkmokhghhghe`ap~onx|{y{{}~jaba`bddccdkoV[crtf^\\^^]_chlgd~rintz~yvulcgu}wyu|qjibdsn]gxtc[\\^dtz~zeZVO^qcOP]dcc\\_cnvllv~{~ztsrlqrdüyjf`^uucfeaabdddfd[RPRUVWY^_]_`]YVVZ_b^WVYXVUUUTSQOPOOPSSPNMNOOLO^}j^_agomc]aiklopqk]Yagikllib]\\[YY\\XQ{FLLJMLLLLOROTYVUSSUVTOORV\\SKj>SWROMMMLKLLJIIKMPOIPXQRUWVWVV|KWVXWYXVYYYY\\]\\TzyQVhvlXNNNNNPRU[\\[\\]]]]_aabcfihilpi\\\\]]]^``bba^[Z\\___abb`aba`_][]_\\ZYYWUSNJLMMO\\ggec\\TNHFGJMNLHKMKKYnzn^]TORSRSTRQRRQPQQPPOPQPRSQONOQMKKJJJJJIIIIIIIIIIIJKLLNQSTSRMKPYumUZ[RNKJMRYVQLHHMVSNLSWPHFFFEEFFFDDDCBCCMTJBFGGGFDDDCDEEEDABGLPNKHFFFEECBDFFFGHFEEEDDDCB@ADEDGHHHIIHHHIIGGGHHGGGIIIIIIJKKKJIHFDCDFEBB@CJHGGEDCBABDEEFJMLHIHDBCDDB@?>>?>?CHIGGGHGIIFFFGFFFDCFIJIIIGEEFEEEEDDCBBCJNKGJTXQGGORKDBBAABAA@>>?@@ACAAAAA??>=;::::85875ne:>?<====;;;<<<:;;;;<=??@A96;<<;<<;864677655655443457<BB?>==<==>?@CB@?@A?=<:965667765456889:;:9747L\\XVTONPH<68:9999999888754324446677643354333224:ADFHGFCDEEGF@74557:=??@@><;<<<>==>??@@@??>======>?==<;:99::9778:=?<;;<<=>=<853468=GPTUWQC<8777679:88989:BGGHHGD>8514:?@?BHLIEA>97646689;;:855321123566666666799::52343357:<:7554345444455520.-/00000000000/.014778876445546842368:<:;:99:::89877659AGNRSRQQPMNNNPOLIIKR[UA21321//0369<===:75335558:96789:<;;<<:753313576344445664/,+*+----.1:7-++'6KI<2./0.,.4872-.3575.3@?;8640-,,+))('),143-*,-,.0.*)))'''(+377:3164.()+3:D=67B@0;XL74/38;988::42671++,,,++***023<C=5022..-+*(''(*)+9HLF<10+9I>0+6A/%))*/122,,8>610042.,*-330,+,/048;::755685,&,99.'''*1557:<;9541.00003555551.3<@ALUI;@@=6;@:-(((()+/28HO:(.9K`oe96KF7*((((+130..-/0/.010003672/3>GJJDAJNP@4+6\\rrvyp_YXWWZYUQF@>??>BFGD9*2HRRYd[@388430/-,<XjZB;<20Jex_ZN<>5/@L@359:;=@<)'8=?HH?::751,(8PVJ7-.00255bbbbbbba`__^^]\\\\\\[XXXWVUUVXY[\\^``abbbbcefc\\UQONPQSY]][WUTTTTSSSQRTTSSVWWWYZYYXUTUSQPPPPOONMMMMKHJKLNPOOOOOOPRSSSSRQPOMKMPRUTPNMLOTZ^_``^[\\_^ZUOLLLMMNNNMKJKKKMNMNOQV[]baVOU[ZYZ[\\]``VIDFGIJHHIIIIIIIIJKKKJHHHJKKKNOOQWZVLLSUPKLMShrj^Zjx||wtpjlqnkgbdjkgecaflkip|}{~zjafec`_aeffaaip~}gWQX]\\^^^]Z^hlljfx||rgny~xvqceyu}l{uodZfvm`n{n[[`__ltbO^a]ggY[kqia\\VX[_aZST\\ixsifdc`airrpgxý­wlgdfb_bbb`_ceb[USU^a\\\\bhe`b`YUSOORPUXWUWYZYYXTSQQUX[\\ZWSPNPQQPNX~f`dmunb\\]acdejqz{m]SS\\bcdec_]`adi^s`JPMLPQOMMNPPVZVSRTUWQLQ\\dWKKGXVSQPOMLLKJHIKMNQMLTSORTUUVQbYSZUSTVYXWWWXWX[R]}TV`twaOLMLMNQUYZYYZZZ[]_`abdeddefbZ[]]^`ddbaa^\\[\\]][\\\\]^ba`_\\\\]bfggdca_]XSQPNMWccceb\\UNMJJLNLJMMKTa\\ZcmgPMQRQQQQQRRPOQQPQPPQOOPPOMMOMJJJJKKKKIIIIIJJKLKKJLLNOQQQQRRLJ]xeU\\UOMMPV[UOOKJLUOKSWPHGIGFFEEFFEDDCBBCHLEBDFFFEDDFGGIIJLJHHJKJJIGFHGEDDEFGFFFEDDDEEEDDDCEFFGGHHIIHIJJIGGGHHGFFGFGIJIKLLKJIHECAEBBCDCFKMLHECCDIMQQRSVSKJKIGEEDDCDDBAA@AEHGFGHHGIIGFGGFFFFGHHHHHIHFFFFEEEFEDEFGHHHECDMUQHJQRKB?@CBBA><?@AAABABCDCAA>;99:9:84:;0VD=@=<=<====;<<;:;;=>?@@@@><::;;:;;9754688868889::;;<=?@=<<<;=>>>?ABAAAA?<;<97545666666788899876519Q^XVTPND748;:9:::::;:<<;:8666555678643444443215@ECDBDHDCEEGGB95889<???>>====<=>>>>>>>>=<<<<==>?>>==?>>>=<:99:8668;=?>><<==<<;9:=:733;CT^WPF:65466538;;:<AEEGHIID82202;?@BFKI@<<86547:;:;;;7543112235666767779999853333347::8655555555544552/-.////0//01222124578788864555323211579:;=>=;;<<<;;<;:8669AMUURUUQOPPOPONMLKJNP:-40,058;?CEEEC@;9754456888878:<=<<<8421223478355455430,,-,+/0.---1/*+,,<IB;4-04/,0374,&'+.247BF=48A=1.1/+)))*,0560*),-+--+))**))))+44294+3:3//)*;LC40>E75NF73(*//*+047632.*(()+..*&*5:7/,6;;<=:2.-+*('((-+'2CO[T9+(,594/-,-'(+.6972-).:=51561,-02784-+-.-+.6:730000/,+,44.)''.7954676675-*-02555432117;67BMKEC9667></((('(*/5938HI8<GGRsr:2MXH/&((&)1741/,,/10/001232/+')5FOI<?OSD/(2JRDR{|{re^[YVMGJA:AC@CB@A:2+5EDBX_D1799<;999:SiP6<B=339_pXO>;9+(7FA2.599<A:)$-9CNH835540+*B[WC54;91275bbbbbbbaa`^]^_^\\\\\\ZZZXVVVVXY[]___aaabaa`^XPLNOPPQTWX[_a`[WVWVUTTSRSRSUWWXYZZZ[XSQRQOOONNMMLKKJJIJIJLNOONOOOPQRSUUSSQRROLLKJIIJJJHJLNNNOOLKNPNMLJIILNMLLMLKKLLMMNNPQW\\\\]`ZNOWUTW\\__cgdYMDCGJJHIJIIIIIIIJJJIGGGHIJKPVUQSY]VKL\\dXPT\\nx{xpwyvpgjrqnh[]innlhb[[_eijpvtw~ufkokfcitsid`_``kk`\\WUX\\]a`_ejkjlil}ypu~}yssnn~uvvstxr_Wlzjaps`W]^]^_ry[PSdp{zeRf|~o\\ZYUNQRNNQUYYVTRRQSX]cfeŸynmoolljihebb_VQewvqvo]Wa_TPNADPKKRVUUY[YVTRQPS[aa\\ZYVRQQPRRMZ~gclrnb[YZ^`bbcdlwyn[MJNRUWW[^_ahcduJOQMOPPPNNOPSYXTRSSTSKHVghL_t=QVRSSPPNMLJHHMOPQRNPWPNOPRTQT~yNVUTTTUUUVVVWVUUUPvXY]anoXILNKLQTVVVUVWXZ\\^__`bbb`^^^[[[\\^````^\\ZYYY[[ZZZ\\^^]]\\[\\]^aaaaaabccb^[[XW^abc`\\ZXTPMOQQSQMRadSO^h^PPQPNONNNNONNQRRQQQQOOOOONMOOKJKJKKKJIIIIIJJKLKKKKLMOOOOPOPRLGWgd]SMPQSVZULMNJLMIQYQJGIIHFEDEEFEDDCBCCDDCBBDDEEDFGHHHHJKLLIFEEGIGGHIGFFFFHHFDDDDEFGHGGFGGGFGGFHIJKKIIIGGGHJIHGGFFHIJKMLKJIGB?DEBDIJJILTVOHFIOWZ\\^^[WPIIJIIHGDDCEEEECCEGHHHHHHIIIGFGGGGGGHHHHJJJGEFFEFFFFEFHIJIFEEDBCKPKEHOPIBDGFCA?>?@BCB@?BCCCCC?98<:9:96::2Mk>B?<<<<<<=><<<;;:;>@AAABABBBB?@=<<74248<;<=??>>?>=<<==;<>==@BA@ABA@@AAA?:9;95345776666988886557:<BQ[XTPIB:57::::;;;;<==?@AA>:9964567764486333223;EEDB:>FFDEFFFE@:::;=???==<=>==>?>>==;;::;<<=@@ABAA@ACCAA@=;:;<<:777:?@=<<===???>;;:8866CVad_SJC:670/8<:::=ADGHIKH?8710;@@@DIE<::86558:;:::97531123346656788777778754323346785445566555544332100100///1233222468987888766530/110134679<==>>?A@?@@>><;:78<AHOUTRQRQNNPQQQMHGJB;??=>@ACHJHHHFEDDA;633458:::9:<=<<<832222221/26655431.+*-,,020.,*+-,,15=;484,04333450(()().6<?9/,6>6..-+))*-.-340*(*,+*,-/.,,,,-,*-2337637968744;ED93:@6-5668531,((*.0/,+*))('+/.)%)41--+()/;KSB/,+*)(((*28.-9_jN/*4851,%(*))+.783,*))4?82640-/59>??821-,)(-2.+)())*,,.0/,)()/:@;40248<7.*-4<<62000-1=@6.:GEEE3/3792-+)''(+,..*'2DJJLFD]jG6CWW4%((()/332/+),220/011/..,()1<A;3<SO2%+7GB3Q~~reSFEGLI:6BJJC:6664/.301FQ?4=@>AEGHGFLPL<2778C8dT\u001f-462,+/79/'.58=?5,.,+:G>,'+033-(FcW=6;A@:2/9ccbccbaaa``_`a`^^][Z[YXXWVUUW[^_`_^^\\ZZVTSNMOPPPQUWUUZ_a^[ZYYXWWVUTTUVVWYY[\\\\^]WPNOOOONMLLKIHHHHHIIKMNNNOOOORSUWXXVSSUURPMJHHJJKIFGHHGGIIHGHJMNNNLNPPPONMMNOOOONNNOPRRQQQJHMNMPTXZ`fgd^SKHIIHIJIIIIIIHIJJIHGFEHJJOVXXSNT\\VKSehfabtvuyvnikssnicafmplb_baabaansgftzqpnmov{|thfgede`^]Y[\\cntqv{tomigiqy|sttrpmvzsrsufn}kfjtzs]YujajeXY][]__itt}cHLitv{aPasv}cZ]\\UUYXTTTZ^YWVTROMNTZS|nkqvx|zrfb_^]\\jr_\\aj_IBBYcWPRVWWXWZZXXYUQTVVUS[bZUSRPRROX|abkh_YYXWWZ^`baciqqlaSKGGKJOTRU[Qp|OIONNONNMMLNPW]XSSRONLEI[gYG|٣CFRSSTRPPNMLJHKPQRYZQY]QNMLMSNdVRUSRSSSSSTSSSSQQTK\\_YYSYmlSJNKLSUTSSSSUVX[^_acddca_]\\[[[\\^_^]\\ZWUVVUWXWWXXZYYYZZZ[Z[\\[[\\\\^`cedcdea]_``^[[YUPOWZYTRZ_]OKRXZUSRRSTVXUSPOPOQSSRQQQOOOONLMOOKIKLKKKKIIIIIIJLLKKKKKMNPPPQRQPOLCK`cZPOQSUWSOMKLHJUVPNKIIIHFFEEFEDCCCDCCDCBBBCDEEFGGGGHFGFGGFEEFGGGGGGHHFFGIIHFEEFGHHGGHGFGFGIHGHIKMLHGHHHIIJIHIKJJIHIJLLLKJEAGKKJMMJKMQQUXTRV\\`a^\\ZTNIGHIHHIIHEFGGGEEEGIJJKJJJJIIGGGGGGGFGHHIJIFEEFFDFFEFEFGFIKIGFEECDGIGCFLNLJGJHA?>>>ACCBABBABDDA<:<9;;;:977cH@B?=<<=;==>><:::;;>@BAABCDCEEDDA?>:778>CB@??=;<<;865789:;;;>BBAAAAA@?@A>9::731357766789:898756;BDHRWUPF>;88::;;<<<;;=@AABDDC?<:655567649@=433225@GEDC95>CDDFGFE@;;<<=??>=<<==>>===<<999:;=>?@BCCCCCCBCA?=;;>?=;@>>;77;?;:;<>?@@@?==:99877@Wgffe_YO5$.689768;@BCEHFEC><>CECBFHC<::9889:;;<;965311135667678888877766544333245554334566555544333234431002223322357899888766631//00022223688;>@AAA@@A@@?<<;96:LZWQPPRTRQRRQRPMJFCDDGJHFDEGFDDCA?BFFB91355788;;;==<;<84222222111243332/,,+,-.133/-++---2891.2/.02454640/0/-.3773-))493..-*))*02/1.*&'++**.352.--.-,+-0.39;:999:99::;=;99;7159;8785/+))+,+**++*)(*--+*++'')'%%$4\\aD/,+*)))+#7L0,-<JNF58;4/+)()()()23-'(((,:@889632675/21/1/,++++*)'()+./-..+(')-25==3+-07>92-/5862/...+1:??89DFB>87654-++)((()))(&&'6HKFC>>B>34R\\9&)***+-.//-+-11000/////0002220/?TI,*2487;\\z}nN-3HI:48<?>;75433463/1:;47BB:<CILMLISNDB><9Mc\\\"(-02.---,*'+28>8,-95+0;9,(+.04.+LeP>CFA@@50Bfffecbabaabbaaa`_^\\[[ZYXVUTSTXZ\\\\[[ZXVUTTUTSRQPQSUVUSUXZ[\\\\[[[ZYYXVWWVVWYZ\\\\]_a]UONOOOOMLLJIIIHHHGIKKKMNNOOPTVWYZZWSSTUTSRQOMMKKKJJIIIIJKJJLOSUSRQPPQSSPNOPPPQPOMLLJHHHGGGFFHGGHJOUZ^`ba[RKIHJJJIIIIHGIKLJIHGGIJJJLT]]QJQ[VNQ`rnh}yo{~uokmtvofbb`drr]Vch`aoyumfbgorozshjnuyyzteb`_da\\\\]gnz|qmianxf_ij]\\i|xrzxsPhladlvyq[Zszhac[X[[[]`acddmo^Z`xypswhYfvvzyjZZYXWTSSSUWXZZYXVSQQQRWLmqklpt{wfbcdoxxxvsmryfZauyZTXYWXXWZ\\\\]\\[[][VazzbWVTOORSRRsw_a]XYWXWUSUY\\`eghjkmmgbVIFHJIGLLG]`KLNMNNLLLLKMR[]VQPOKJGDN^bQ;c;PQQRQOOPMLJIHKORV\\ZW`[QSPNMMXrMUSRQPQQQQQPQQPPRTINyo^RPLUohNIMMQWUQQQQSTVY]`egfeb_^\\[ZZZ\\^_[XVUUTUUUUVUTUWWXXWWWXXXXXXXXYZ\\]^___ac_]_^^^_]RSY]_a\\^dUNJKQPRSRSUZ^dieca\\UQSUTQPQPOOOONLMOPMJKMMMLKJJIHGGJKKKKKLLNOPRSUVTQONLFL_fYPORUTRQQMKJ\\\\KGLKIIJHFFEDFEDCCDDCDCDBBBCDFGHIIHFECBBFJECEFFFFFFFFFEFHIIHFFGHJIGFFHFEEEFIIIGHIIHHHHIKIIJIHIJKKJIGIKLMMKKLMNQNLKGKQROSbfeiic]VOKKHIKMLJKKJLKKJIIIIJKMNOOMKKJIHHGGGGGGGGHIIGFEFGHGEEEEEFFEFHIHGEDDEEDEECBDFHFDGKD><<;:>AB?>@ACDDEA<8:;;<;84D~q5??==<>=<==>><:::;<>@BBBCDDCCDEEDCBA?@@><=:97655566655566467:>>??@A@@?>=;;<;622357766789:998757@DBHRUQH@=>==<<<<<==<<>AABDEEFDA>65677768AGB734449CGECC>99:AEFGGF@:<=<=>>==<<;::986568<;=?AABBBCCCBAA@?><<:8:@CB>@?A?;8;A?::<>??@@?>>=;98865BU``_ddbO5243111358:=BCCEECBBCFHKLD>;=;:;;:::;>=933311146789789889987765334333233333224666555554323455543333222222246899899766531/.010221134448<AABAAAAABA>>?@@I^g]TRQPTVVUSSSQNMKGEFEDDDCBA@???=:<ACB<1263037:;;<<;;;83012223332112231-,---/12321.-++,.16620,-552345887::205876430/25202:92-,010/+('(++,.4895.,,,+**-027==<:9764200002224556:>64990+'')***++*)()*,,+*)(((&'02-FlX5,,+)'''($FH),/'$2E?:730*)))))))..+(')('1??9984321,$&0//0/--/0/-,+,,..,,,*)(,5AF70,**+1883130+---,,,,/25>CDD?86799751.,*((((()))(&+:IF;5/*+*&8J8(),+*++,--.-/0/010/.0234762//./AL@/25.06;UwuT/0EB68>A>7455321226639A;:B@9;@DHOLQ\\EL]MGEGV}wD<0,-11/262)')*/79/)-37506=956/./-0NWA>ML@867;Cedc``bcbcbbbaba`_^^\\[ZZYWUSSTUWWVWXXXWVWWWXWUUTSUURQRRSUX[\\[[[Z[ZYXWXWVVVY[[[\\]\\XSOONNNNNMKJKJIJIIIKKKMONNOQTWYYYXURQQSUWWVVUSQOLKKJJIHIJJJJLSYVRSRQRRSRRQQNORQPOOOMLJIHFEEDDDDEFHLLNRUYZVOJIIIIIIGHIHIKMKJIIHIJIIINW_^RJPWSGGYcdwse|{hlsmntvjZWXSXrv_Ybeaar|megddfcZ_rqijox~{yx`]_hka_l~lYWuzzxmdfc[Ybw~mxvWdugx|bKMbhX]dkrrgZW\\\\`c_ZZZ[[^`abbdfggmlmvwusplpvnh_WXZYVUVWVSPQQTWWVUSRPQQWP]xokijkc[comnxun{~z{oTXVUVWTTY\\[VRPVcketSPOQTQQUXVdzq_\\TQVWWVTSTTSX`cfgiiijpnZIJLIHJIHMNLMLLKLLJJIILSYYUOKKKIGEQ^\\JE@ILMNONLKLJIIHGLQTXXVY[TSUWUTG`LOROQPNOOOOONOONNOOKHj|eNNOIYo^HJNPTTPOPOOPPTY_decb^[YYXXXXZ\\\\XSQQRRSSTUTTTTUUVVUTUUUUUUUUUVVWXXZ[[[[[[[Z[\\_[RZdaabe_UVWURQRSTVXY\\bcabeid[SSTRQQPOOOOONNNPQMKLMMMLLJJJHGGHIKKLLLLNQPRTUVTSPPOMMS_[SPQSRPPOMQa]IFIKHHJJJHEDDEDCCCDDDDDDBBDDFHJIIIGDBBAAEGDACDDDFFFFEFFGHHGGGFGHIHGGGFECCCCEGIJHFFFHHHIJIHIIGHHJKKIHKKLMOPONONNLIILMNSfwttsuoRHDBCHKMPPMPQNLMNMKKLMMMNPQPPOLJJIHHFFGGGGGGGIGEFGGGHGEEEEEEEEEFFFFDDDEEEDDDB@>;<?BECCB:CYWRIGC@=>ACDD=569:<962\\L=<;;<=?=<====;::<;<=?ABBCDDCCDDDCCDCBCD=5545446667677764446789:=@???==<;<>?;434557765677997776:CECJTVMB=@CC@@>>>>>>>?@AACEGGHHII?979987<GID;5346=DEEDCBB=8=BGHFEC>>>=>>>><;;9899636:=?BCCDDCCDEDC@?>=<<<<:9:;@DF>=<??;>GG=9;=>????>>CHB:8995;S`^]\\^`E200/.,1359=AABBBBAACCCJRL@:<89;<=>?<=<722676789:<<<<<<;;:876643333323334332246655554442267755653221221112468888::864310//110111156446:>AC@@BBCDDEEGGILSXTNQROOQSSTTSQPNMNJCA?>>>=>=<<==:9<==<77:2).6999;<<<;8201113453322322-+,-../12211/+,.-.2564/+1982245:=<?<21447;?C<7474-1=C;1.--..,)+./-/67796/+**)(')29::9641/22.+)**,,,.103<<1/33.+)'(***,*((')*,+)''('&-AOGE\\hI.+-,+*+(#,O8%,.0.)AROJDD8--('&())*//---()5?;530-+**%,IF41000/----,,++*)))+,,-5LZ9()+*)+03111.*)+-,,,-,**.6?C:1024552.-,*+*(()&'5C</+490)(&&,.3>7*+.,,..+,----,,/0011234320--/-.675/8;2/7<H]aqn[E7<EQZWM?720127;5-385;IF;>?==;8@IKTM3Hk`F@ADeD\u0018\"-+12/1793*('(-1/*+--23.1=?<;52/*2C=+/>A9-+159\\[Y[^`cddcbbceca`^^\\ZZZYWUSSTUVTSTUWYXWWXWWXZ[ZWTROOPQTUWYZ[[[[[[[YYYXXVVXYYXXWUTSQNNNMMNNLJKKJKKKKJKLMOONNOPRSRONNNOOPTWWVUUUTQMKHGHGFFHIHFFJPRQQRRSSTUUSQPPQQQQRQRRPNMKGEEDCCEFFIHFGHIKMLJJHGHJJHGJIIKLLLLHFHJIIKKNX``VLJKKJKNR`cZpzaQXjnqxlWRSSOTil_adbcfdbdhhegh`Y[bilorz}{}{}|wq\\dutsolhb^]arsp~lf]OOVenu~~td_`homd_]PM\\d_ZYZ\\]^accceeenqhbip{hhhb\\WWXWVVXVU]_WQQPQRTTTSRQPPQTPu|pkjf^\\beqsoqozhTRTXYYX[cipsmlnlllab^\\ZeaTVYZ[`ji_[XUVXWWUTSPKKOSY_cfdbhriRHJIJLLLKJIGGGIJLJIHJNUVSPLIHIHHGQYX<{jAPIHMNLIHIHHGIJRYY[XTXUSXYVVRQysIMJKJJLLLMMNNMMNNLNQJZ{gLLSMI\\n\\HKMPSOMMMLKJKX\\__`_\\YWVVWWWWWUTQOPOOQPQRPSSRRSSRRSTTTTSTTTSTUVWWWYYXVVVWXVUVTVafa][WSTWWVTTSTUVZ^a`[UTXWSRQRRQQQQPNOONOPPQQLKLLLLLKKJJHGHHIKKLLKLOQRRTTUTSRQQOQPQUTRSQPONLQcbHBIJIGIJJKHFEDEDCCCDDDEECCDFFHIJHFFDB@@BDEA?ABBBDFEEFFFFHHGGGGFGHHFGGGEDDDBABCEKJGEEFGGHHGHHGHGHJKMMMMLMNPPONONMKJMNIQe}{{vWE@CDJNQTVX[YUROMLLLLKJKLOPPQOLJJIHGGEFGGGGGFGFGGGHIGDEFEEEEEEEEDDDDDEEEEDEDB@;6;AGHITdCHxiv~qWJD@>@>;779;967[o4:889<=?><;;:;;::==<=?AACDDDDCCCCCCDCACE?85355776776666643688669?A?;:==:<?BC;236678777777877756:EJJPWSG?>BFGDB@AAAA@AAABCDEHHHJLNJ>88877;CGE?723<CDEEDBCDDA?=CHGFEB?<==>>?==;98768:<?BABCCDDCBAA@;:::;;==><<96;ACA@=>@>>EHB;:==??>=>=FTPB::9:<;F\\cc__L7036.+458>?@BBBBA@ABB>@IRQJBDIKMMLH<;5467=@?AA@@AAACCCA><;:976655431245454334555444334327:877775312222212356999:;953100/01100002554578;@D??DGGGGIJGDBA@AB<=HOLHJPRRRRQOLPNA=>=<;<<<<<=><8877778;6--2589;<<<;82/00/1454421120,+,.10/13111/,-0002232//6:6212389763//./7@GI?5685+',265/,+,.,,3850385332/,++*)(+36640.,*(+/0/-,*+,-..-296,))*,-,*)--++)(--*,//.-,*',@W_OGMLB3+.-+/492?P3,-.44+:\\]_``T?>:420-)*3497/-)+6?80-*((*((>C1/661+&'*,--.)'(**+..//>J6(),**)+-..,/51-,,,,-,))(&,56.(*+,-/11/..,)(+/+4MQE61257645>GRP?/,0.-//-./0//,,.012221/-+*+-..////1>E;5;>;5/KWKD45LendN;8979<BDB<:978;;78?C?503;FO=,Kp`:/=DScK($,*+12/12,''('(+-,-.--,+.2569940-)08-!%/53.,*&-TUX[^_beeeeeeffc`_^][ZYXWUTSSTTRRSUWXXWWXXVX[[[XTTY[YWWVWXXZ[[\\[[[[[ZZYXYXXXWVVSRQQOMNNMMNMLMMLLMMMLMLKNONMMLKKIHHGHKMNOOQRQNNNMNLIGFGGGGHJKHEGKMMOQRRUVUTRSTSRQQRRQQRRRRNJIFDCCBCFHHGGGGHJJIIIHJLKHHHHKMLLLJEDHIIKHIW]aaXLFKPMJJMSWey}pc`YTalmgYPQTUSUab]adabd_[`bcgggb_a\\Yhyx|wu~~~~vx|vde{urqj_`c^]akx|w~{hggwm\\emlikk_Z_b^ZY[]]^bbbiiciyl`[VYlqi^XYZYYXVTTUUQOQSSQQRRRSSRRQPPPSMRymilf]`fgnqryÿ}xxrbcnxoo{t[XZYYY]gmgdd\\XXXWVVTQMFDGLRW]^_ajq`IFLLLKJIGEEFFHKJJJJKOTSMHEFGGHIKPVNJAMOJJNNKHHGGHHLPX^^^ZY][YWWSQI]SJPOOOQQSSQPNOQSPSTUWUXtdJMQRLI^kWFINQNKLMMOPTX[___^ZXWUUUUVVROMMMNNMONNNNOOOPQQPQQRRRRRRRRRRTVWWVVWWVUUVUSQPPU\\]]XRPRUVVUTTSUZ_ehbYSONNMOPPRQQQQPOOOPPPPPQQLKMMMMMLJJJHGHHIJKKKJLPRSSSSTSSSPPNRTPQRRSRONNP\\^OJJIJHIJJKJHFEDEDDEDDDEEECCEGHFFECBB@???BHF@>@ACBCEEEFFFGGGGGGGFFGGFFGEDDDCBABAADGIGFDFIIIGHJKKHIKMMNNLLMMNMMLMLLJILLGLrvd[TSSU\\holc]WQNMMNNONMMLKNPNLKJIGHIGGGGGGGHGFFFFFECDFFFEEEEEDDDDDDCDEEEDEEC@=@FLRW[^nb<s`SLA:<@><<=>BEN:=<====?>=;:;<=:<====?AACDCDDCCCCBEFCACEB<645566445555553468757:==;30<=:>AB@:4466888777766655549HNPWVMEBBCEFFDCCDDEDCCCDFGGHIJJLLJA977779>CFD<33@EDEEDCCCDFE?>CEEECB::=??><=<:<::@AACCBBCCCA@@?=989988:;<=<<:9;>>BBA?@><>BDA;;;>>>=??JVXO>9;;B?5Dakg[ND<550.8:>AAABBAABABBBAACFNSU\\^aaZM@=;7:ACBACCBBBBBBDFGFA?@@????=9741245555445544333224327::86775434432101136999:9642011/021////04566679?D><DJHGHIGB;;<<:91.;IMHGLPQPQRPJMLA==<<<<<=>==>>954552145311359:;<=<71/0100234531242-,,.12344222.,.12201110179410./11/,+,,,1:DI@2-671-+)(050,,,..3<;5332/-./-*./.0132/.-++,,+)(+.-,,,.-.,*,//.-+*-/00./1.-*.84*.35443/3ANUWJ;9=;5//-1;=IDJF=67.)-13SNGdrYCFKHHHF=.+6GD1,+(,;>4-/010,()-,0971)')+....+)*,-../0/03/++,*+*****)0=?4.,,,,..-,(&&'(&&$$-HOA=82.**.74+8V_R?7@IIF?FPWgQ++1/-+-2444441111100000012454333349AB<;>?6)#<j6,.*:URHE:36:@FHFCDMQME>73436>B:/+1@E:A\\dJ32<=:><81+*..-./-,.020+.34553/+-55.-430.0254+*3602:9.%'TUX\\_acegghhghhda_]][YXXWUTTSRRRRSVWVWWXXWWXXXXY[_cec]YVVWYYY[\\\\\\\\\\[[[ZYYYXXWVTTUSRQNNONMONMNNNNONNONLKMNMMLLKJIIHHGHKLLKLMMKIIJKJJIGFFGGFJMKGFHJKKMOPRUVUTUXWVVUUUQPPPRUVRONOLGFFEFHIIJJKJIIJKJKOPMJIHILMLNOKFFHIJNPV^ZYa_ULILNOLMRYegaajk``ntcTVVUUSU\\^]bb^]^__]Y]geij_]ZSh}|uzux|~}x~}|vkca`XZyuy{xwnaada``eqy{~nYcjjhhea_^_\\YY[]]_a`ckialo_YZTMQ`\\MU^ZYWVUUVVTPQNMNPSRRRRQQPOOPQPPK^vjgifeffkkddmruiu}n}^V^_\\\\]_elighg`WYZYZ[VSLDBFHKPTZ^dlgSGKLHGEFKNPLGHJIKKKMQQOIHIKKLOPNRXDz̀<NNLMMLJIIGGIJNSXY[ZV]`YTSRQNQrqNRNNQVaa]YSOOS[]XXXUQPQo_GKNNNII\\eRILOMILMEJqf]ab_[YYXWXWUTSQNLLLMNMNMLMMLMNNOONOPPPPPRQPPPQRTTTTTTTTSSSQQPPNNU[ZUPPSUVVTSSSYfnkd[QLKLMOPPQRQQQPONOPPPPPPPRONMMMMMLJJJHGHHIJJJJKMOPPQRRRQPPPONPPQRRRSSQNPW[MKQNKJJJJJKJHFEEDDEEDDDEEEDDEFECB@??>>>??AFFBABBCCCDDDFFFGGGGGGGEEEEEDECCCCA@@AA><AGIGFEDHKLMOMKIILNNLLLMMMLLKKLKIHHIKKFZz}z~vlf_Y]msnh_WTQNNPU\\]XTLGIKKKKIHGIKJIGGGGGGGDDDECDIJFEEEEEDCCBEFEDCBBCDDCAACFJLNORQLFgMamqy||\\FCAA@>>?A@@>>ACA????==>==<>>???@BCCCCCCCCCBBCDCABCC@<96655654454444455579;;963574>EC?=8766788877776664542:NSQVRJHGGFFGHGEEEEFFFGGGIIKKLLMMKC<766678;@FG?56AEDDEEDCBCEEHD??EGBD>==>>=;<<;>@ADDEFCCBCB@<<<<:98777999:;;;:;;:@CC@??>===?A@?:;<=>?BJPTRE<;9:KH3DckdXOH<454:?ABCCBAABBBCCBBBCFFDKUX[^WB7@CCBDBBBA@@BBB@@ACCCBA@@AAABA>931356655422343333233214898788776753212035699897420010/021///.06877878>C<;AFGFHGC><===;636:@GIHJNOPQTSLGD?=<<<<<<=>>=>?;435752244444579::<:5389994122337:=5-*++,04433551,/2210.///043/.-,,--.----/5<DC5*)--,---,031///.2:>4/53.,++.*).124673.-,+++-20&),-+-.0.-+(&(,/////24430000149414664333=JPRPF:;<9860BWT<736PZNG2+/11H@0DfT.-636>BD:0=NH6*+,*/==1055.'(()*,..-***+-,+**)*,021///-+*,-,+++++,--2?A6-,,./12/,-+'&)++*5LMA82/,*((+/2-,Jj^@128=93;LXmF)03/+)-7:767643322124589::::8545678:<==@@:2-<pzJ%(-8ED5/24459=AB<7AR[_bZOE;12>E?3,7HHDYiUC?:4-*18:5*+30)1;?DHC=704:84:<5157/*-/..025752596-,:C9-*TTW]`abfihijiihda_^]ZXXWVUTUTSRQQRTVVVWWWWXXYYY\\_`_][YWVUVYYZ[[[\\\\]\\[[[YYYYXXWUUUTSRQPOMMMMNNNNNOOMNNMLLLKKLLMMLLLJJJKKKKJJKKIGGHHIIFECCFFHHIIHFEGHIJKLPTWWWYYZ\\\\ZZXUPPQRUUTWZXUTROMLLLMMMKJIIMONQTRQOMMLLNPQRNFFJGTXVSJRW`f\\SNLMNKIR[]acjvpgkwu_RSTSSTY[di\\VZZ[ZYZ\\_bjh^^aakv{}{yy}vs}pkrz|}teT`yu{{snlgddc`bimvv[Ydgfa\\YWY\\^\\XZ\\]\\]_chifcd^[YXUQQX]hnaZWVX]cc`bclk\\TUWROOPPPOOORRNOOH[rhfefjkgg_Y][VQWfkqľösq}zvg`a``bdfidbgli]WXVWXVVSJGIJJJLOTY^c^NGIGC@IV[[SLMMNNLKNTUTRUZWVUTRPVZLaRLMMMLKJIHGHHJNSUQVUQ`]NMONOKd~PUv}jji\\[XPOgjijbSMMNIGapTGKMJIKHJ[bSJMLHJL=H^\\ca^YXXZ]\\WPMLNPSSQQNLNLLMLLMMMMNMNPPOOOPPNNNOPQQPQPPQQQQQOOPNNQT[VNOORTTTTTUValh\\SMJJIKOQRRRRRPPPONPPPPPPOMONMMNMMMMKJIHGGHIJJJKLNOPPOPQQQONOONNHGKRTTUSNNRQHMQOMKJJJJKKGFEEDDEDDEFFGFFEEEDAA@@>=>????ACEDDBCCCBBBEGGFGGFGGGEDDCBBBAABB@@AAA@>?CGGFF>DHFEC>EIKMNNLKJLMLKJJIIJIIIJKMMGXqk]u~zppg\\agdcaYVSQMPZcea[QIIJJJIHHHIKLKIHFEEFFFGJJLUVKEEEDDEDBCCDDDCCBAACD@<?GHEDDBFDA=O]?FMU{xu|[F>=<:<=>>>>@CDCBAABB?>=>@@ABBBCCDDDDDCDBBB@?>?>??>@@=85666655443445568;<9466882DGA<<:987888777666555764@VVRMILKJIJIIIIGGGGGGHHHIJKMLMNPOL@85655579?FG>56CGFDDDCCBCDDGFA@CC@;;==>>=<;;;=BDEEFEDH?>>=<<;:987879<:8:;<<<=;:BDEB@@@?=;99?B>;<==?CIJLPKB<;8DPG1DjjkaVNFB<@DABCCAAAB@BEDCCAAHI@>LU[_W@=DEECECCAAAABBB@@AAABCA@@@@ACC?;722566641/.12333333331368998:;;9731122133587774300000//1/.//.29<::;99>C?<=CGGDB>>@B@<846@C@BGHHJLPRVXOD=9:;<<<<=>>>>??:545786554455667889833@FFF<30234;C@1)(()(*.1136960/000.../...-,,+++-//010/15896.+)**+,-01100132/4<8--22/+('*-+*.35664110/20050)-0/)-011.-+*-,,,.1367874123441/6::7/-1016=DE?=?<8=DEU`UC181UiM;,,.-1A?03AA7/(#!&,466;AC@;:94.3;4,..*&'')****))(()*+)'&'*0443210-+)+,,+++++.113991,+.3753331.//*,7CPP<070)%%''),06.BkZ70350++<h}905540.3<=87985200147:=>:897687100027CG>889:8=NL9:;>B@2-3887588446=FTZ[fkaVB5DM@357?MQP]\\KLE/)*.20/,'+9<8DSSROE<538:21>B733/+14/-343/-01)&-2.-6:64UVX[\\\\`fiijjjiigc`^\\YXXUTUUUTSSQPPPRSTTTTUUUXXVWVSSRSTUUTUXZZZ[\\]]^]]]]\\[[ZYXWWUSRSSQQPNMMMNMMNMNOMMNNLJJKKLMNOOONLMLKKKLKJJJJHGFFGGEDDDFHJLLJHFDBDGGHIKQXZY[[Z]```_]ZYTQRSUV[^__^^]\\ZWWVSPNIIMRRPQRRRSRNMMNPSSMFHLTR][GMLQafcZPKKKMRTS[aer~utyiSOUUSSVatr^X_a\\TU^_WV]`_anwmkwqqzqx|pdaj|kforwtkje_dfdaaddjo]X\\bca]XTVX[][Y\\___^bjjdhlgba][Za`eyycV[^hkeecbjqy|wnpsiaXQNNMNNORPNOLIqoffcdon\\UUSSTRSTTV[ýlqvtywlecccdegifdgji_UTSRRSWVSQOONJHHJLOV[TLKHDBGSUTUUVXSOLLOQRSTTVRPPNMLQORARLLKKKKJHGFEFHOQQOSSU^UNPPOLMS\\p{pf_JXzfkZJHKMMJMMGHKLIIJIGLYVLLLGGI@YnI_g_[XWXZ]VNKJILORVWUNLNPPNLMMNNNNNNOOOOOOONNMMNOPNONNNNOOOOMNOX_TRRORPQTTQRVY_b[RLJIJKLLOQQRQRRPPPPNPPPQRQOMMLKMNMLLLIIHHHGHHIIJKLNOPPOPPQQPNNONOKECJOSUSQONPKKOPNMKJJJKKHEEEDDDEDGIHGFEDDCCAAA@?>AAA@??@CDCDCBBBBDFGGGGGGGFFECCCAA@AABBAABCCCCAAEFFGFDFJQXc[NMMMLKKJKKJJIJLNPOMMNMMNJDVri_v}~|x{g^dddd`[YUNOX`cb]VPMKIIIJJJJKJJJHGHLNPTX[]b[LDDFDDDDDBBBBA@AAAAAABA>@BBBCDEFFFGLbCDDADU[ag|hLDH=68;<<>=>?CCDEEDAAAA@BDCDDDCDDDDEEEDBB@>;889899;=?:7788753444444468974345673GG?::;:87888866765545864CYVPB<EIKLLLKJJJJIIIIIJJKLMMMMNOONJ=3676677;DF?9:EGFEBACCDCDDDFFDCA?65<<>>=<<;;=@CEHFHJ=<<;;:;:98769;>?:8:<<<==<=@CEDBBBA?=:8:?A====?CHIJLJGA:8>DOB.Qeim_Y[^_RDBBBAAAAA??CCDDDDEE?>FPZ\\PCHFDCCDCCA@@ACC@ACA@@ACA@@A@BCDA?=72355431.-0443333345458::989;<;9533221224677521//000/-/////03:=<;;:8<EC<;@GGB>=>???;515AGFGIHFFJOQVZSG<46:;<<=>>>?>@?<7445555655556668888309FIE@61258<@5,)))+*+-/02574/...//00/.--,++*+,0100/.-./00.,+,/200.-1640.--,094/010/,)')//+,4655545305687.*+--*.///./0/0/-**/34765422231*)0887/*.-&\"%+268854?H?80+\"$KGQX7,,,,,/=C9AF?@7+'$+/236867:=??>8321-++-42*+02/,)(()****-,./445667420-++,+++*-012110-*+1=>;:=9/+.&%9LTPA85754211110/-*9KD304310,(;x~5;:86459>@;9;960,/59;>@=74569;:42222AML9,28;:@@;;IG>3399;<726876<HNS_`VXdcWD@TS<4:<=@IRQGGN=()0430+*'-?INXXOLH=42442-/:=4/-26::43674/'&,4<@FJ;(+4:WWWXWY_fjkkkjkjif`\\[XWWTTUUUUTSTRONNOQQQRRQPRSRSRPRTVWVVVWYZZZ[]^______^]]\\ZYXWVSRRRQRRONNNMMMMLLNOONLKJKLMLNOONNNMMMMMLLLLLKKKIGFFHHHHJNPQWVOLPTLDFGGINSZ^\\\\]\\YY_bbcdb^\\XXWVVZ^___``^\\ZYWTQNKJNQONPQPPPNMNMNOPRQFFsoctZLLJNWbjeZRRVPJMV[^bhtz~qc^`_VPWn|vomppkks|{o_^a`sq^_ap~zuvwvutzvmidfp}sd`ktif`V]ghffjpkd}k__]^_aa\\TQTX\\]YX\\`aacjkbbouonqopuunpnaistu||skhaeow|z{}pbWRONPTROORL_oeebhxiPLRRPQOSVUWLPºýäs}lnpqqrrkfeefgghhfhj^ONRSUTUWWWXTSRMJIIIJKNSSOLIEFGJMOOQPMMMNOMKKKKKKKKJKKM@\\YDMMKJIKKJGGF@EHMNMNNO[[QONROIfn]|zYNGHKKKLJHHGIKJIJIIHHLPPMLIHEH}PD[e_XWWXURLHHJKJJKMPQRMQ_XPNOONONNOOOOOOOOONNMMMNOOOMLMLMNNONS_e\\YVTUTRSUUOOW]^TJIJJIIKLMOPPQPRRPPPPOPPPPQQOMNLJMMLLLLIGHHHIHHIJKKNPQOPRQPPQPMMNPONMKIJOSSQQPNONOPNMLLKJJJHFEEEEDDDFGGEBBBBA@@@??>?@AABB@@CEEDDDDEGHGFGGGFGGFFEDDCAAAABDDCCCCCCCCBDGEEdoEIJIIIHHHGGIOSUVVSQQRQMNOIH`sa_~}zjelkfed`XPOWaeda]YRLJKKLLLLKHFFGKS[^ahmssbKEFEEDDDDDA@A@@?@@??@AABA@>@CCCDEEGEP\\AGEFA?@BGYqziVYfupVA=>>>==>ACDFGFACEGEFFEEEDDDDDDEEEDB?<=>:8666668;:888875534444468:764344446FD<:9::85777777755567:63BXTG:7>CGKMMLLLLLJJKJJKMLNNNNMOOOQUG43876579@DA@@CCEEEDCEDCCDCEEFEE>536;>==<;;=>@CEEHD;<;:978987765<DB=89:;<<<<=>?CDDDDDCA?><:9=??==>@DGHHIKF>8;?=G93Zge_[\\_XIBBBBBA@@AED>=@BDDBBA@@COXL>BC@AACDDB@>?AA?AA@@@AAA@@BBBDDDDB<8533220..2543332457889::988:;;<<:64344336861/0/.000/.///00149<<;;:98@E>8?JG?=;:9789958>CFFFGGFGMSWYWL>5699;===>?@>=??:4245566666676788997129<;;83368:9/+,)),,,-.01340-,,-/1220.,,,+*)+-120.,,**.10-,++,,)()((00)$%')+/012///.---+/2158545462.16AE9,+-.11**-/21,-22-))+062.11//1-'%).12/,-,,+*+-/.,*-66*$#$\"4QMHB430,+./6GTWO<1*(,.=C725::610/028<8321001/*).40,'(+,,,*,8@B>701349:::6/*++,,+/1120,+*)+3;:ENH8,)%$:RXPB7;;998<?@@>8/'())01/.(=W==;SeC1532138AC=><960.5:=?B@87525<<59?;:=HLC0)269>FKEBED>3;F?>@;68859HPQ[`ZQN[gZHJXWPPK>436@E@@>1)-46.34417FQYVNNOD6.,./..+*/237CEC@;9879:2(4N]_bgZ;&&/XXWVVX^ejlkmmkkmi`\\ZXWWTTTUWVTTUTPMLMNOPPPPPPRSUVVWWXYXXZYYZ[[\\^_`___``_^^\\[ZYWVUSRRRSRPOOONNNNMMNOONLLLMMMMNONMNMLLMNNMMLLLMMLKJIIIJJKOUVVY[XV]d^OFGIIQW[_^]__WNPW[]___^\\\\\\XQNQQQQQSTQPRRQRSMHIKIHKNPPNOQSQONLOWSAjhsrOJPOJRdnlc]WNJNPPY^XXalqjhjihZQastsvvuwxxu|qXWdospx~{vttportuxqmnhdhqzh\\doqheaWYbhhgimxxsx}zf\\\\^`^^`[ROQV\\[XWY^acfki^^owoqwvpfdfmv~|zypdemw{{|~r_YWVYYVTTUPWnedct{f[\\XTRPOPOQSOAii|zitZcmnmtzsjhhffgfhgil\\GGMOSUVXWVUTSQMKJJJKJILNNMKGFHHJKKMLJKMNMJIJKKKJJIIKJLE|DLLLKIIJKJGGF??IPNOTMQ_TLNMROb}hQX^[^fp}dQFDHIJIGGGIKKJJJJJJJMQMMLHD^eAGVb]WVUTQKJFGJNNNKHKOPYY\\XSRQPOOONPOOOOONONNMMLLNMMMKKLKKMNPTalj^XXXXWVWVTSX_ZPIGIJJIJKMNPPPPPRQPPNNOMMMKLOMLLLJLLKLLKIHHHHIJHJKLNPRSRSWSPOONMLNPPOQRQMLNNMMONONONMLLLKJJJHGEEEEDDDDBB@@@@@?>?A>==>@BCDGIIIGFDDEFHHHHFFGGFFGFFEEDCCAAABDEDDCCDCCCBCGDFʒHCIGGGHHGIJLPW\\_\\XSQSRSONQQKHXlgf~zkiiggfbZQPTY[[ZZYTNLLNOOOONJFDFR]cgjouo[GEIHEDDDDB@@@@@>>?@??>?ABA@BDEDEEEEFCP[AFDDGEFGFBBI[ZPQj[@=?>==>?BDFJHCDHIIHGEEDCDDDDDEEEDA@>?A?;85786788888867752444569:752233329@<9:99:8767656655678::65FRC<:9::<@FKMMMNMMMMLLLMNOONNMNOOOTM80795578<AAA@@@??DGHGECCDCEFFEEC:436<>=<<;=>BFA=>999854447766<CGB;8:<<<<<;;==>?CDEGGFDCC?:79=?>===AFIIIIJF>488=A2<]fbbZNE@ABBAA@?@AGQJ?<<?AAAAA@=CMK?==>?ACDDDCEE><?@>?@@@AA@@BBBBBCDDBB>5120/..2531234678999::779::;=?=9888732683..0/.010.///0001368:;;:858@?9AGA;;99878:<===@AADHJGEIRWY[UD88:9;====>?><>?=84333566677778889::99778::645486/--*+--.../023/,,,-/2430.,,-+*)+.3310/-*,24/...,*('((()())(*,-./0210000-/0,/4678634221.*,QrU4,,0;8,)+/0/.3:;72..480+/1//0,&%'(-0.--./20/-+**,,,+++,)'?SKA=?9/+,,-3H\\RA9,'(176<7369;74.(&$',/1231/-,*+142//0.-,+*+1@MQ8+,./06=?=80***,-1//20*(*)+0/5IWH6-%*ETRUL86=<::89@EIKC2'&%073-& 7`Xb~vU8,00./05AC>?=:9:88;=?D@653/4<91:C<;@HJ:).44:@EDBBAB?FIA=@A;88859<>EPQHCCO`XIIO]fe`E11127::2.-/40+6I66MUXZSSUJ=3-17::6/++16@FKIC=;999:3)/DZjqmlgJ/,XXWVVV[`eggijijkga]ZYYXVUTUUUTTUURONNMNPPPPRTSSTUUUVWYYZ[ZZ[[[\\^_```ccbaaa^\\[ZXWVUUSRSSRPPQONNNONOQPQRPPPNNNNMLLMMLLMNNMLLLLMMMMNNMMJGHMQSTUWWY^cd^RJIKNPSVZ_bb]RHFJNSTRQRTUTPKIHHHILMJIKOPQSRNMKIGFHLNPTXWVSQOPT]P;aW\\VMLSZemi_YSLHJT[ZTV\\_accdd]`kmkjlmnul\\_ovxsljivzoruvvqopjbgqru}sia_aeb\\\\cefeikopmtkvsd_bc_^_YRPQV[YVUUX]ceda]^jpjmqtw`Nb{vry}}yw|}gWXb_[]bgd`^SlcebztVZ_^XRPPONNNPCZ[yPfvPO\\chktytlhfbdffgfio`IDJKMQTVWUSSSQNLKIIKKJHIKMKHHKKJKKIJJJKOPNLLLKJKKKLLNLabDPMLJIIJJHFFC?JY\\Z__SZ^OMKNGYxdY\\TPJShu{zwxwurjaUGHFGIIHIJKIJJJJJJKMNOTIC|PAGQ][UTQLJJJHHIJNTPMNOK[XOOPPONOOPPPOOOOOONNMMLLJJKKJJJKKKLMQTdnj^Z[[[[[YVSW_WHHJGIKJKKMMNPPPPOPOMNMMMLKKJILKJLLLLLKKKKJHHHHJKJKLORSTUVVXTNLNNMLMOOOQRSOKKICDJLPPNNMMLLKJJIHGEEDDDDCBC@?@AA@@>?@??@BDFHHGKMLHEEFHIHFFFEEFFEEEDDEEEDCCCCCDEEDDEECCDBCGCJžMDMJHIIIIIKPV[[YZ[XTSTSSQOPQPMHSgihvz{}yxwigg`^YRLLNPOPQRPNLLLNOQRQOOKEHT^afjjfNA@?@EFDDDA>=>>>?>>>??>=>@AA@BDEEEEEDFDPZAFCCEBDFFFA?EGGL\\qrN<>@=;<>>@CFHGFHHHGGEEDDDEECCCCA?>CA@?>:867:9877688877764466568965243324987999887777655555589898:LJ78;:87777?KNOPOPROONMMNNNMLLMONMQO9/4:7467:??>>??;6:BFGHEDDCEEEEEEA7239>==<:<>DE>5477633445537AIJC:78:<<<<;;;;<<;@CCFFFFCC?<8768<<==AGKKHEFE?9:<;?@/DbfaZGC@CC@@@???@FQRNHA@=?ABBCA@CEA?>>>?ADHJLQUQJJJGDDA?@A>?@AA@ABBCCDC;310/-/243114677778998779::;=>=:;;9531462-./..010///000002337897446;==@>99;<=>>@@>==>??@CFHHGGNTV[[L<::9:;=>>>>?@?>?=732245666777889::;>??<::=;620353/...../0/0220...-/24541.---+++,1444330,084.0/-+)*.1.+,,+-1454442000100-.540268740000//--BU@2/-1?E9,*--17==<==>>@<3/12122-****-..-04/(+1/+&,0.,+-..(0PXOD752+&%(+3HN;231--8>.0456893/-,,,*(&)/21.*(*5?>78<94/)*)*(-?L5$''&',2;@@;/*(,?E6/31,'((**$/MO<417KTFDTG3:><9758@FJNL<,&/::5/)#*GRl{W<42.,,+3=?<>=;@ID;7:>C@61-.360-6:757EL:*063141-7?<<>E?49A@9665550/28=4.2:CEI:2WmjhO52433413740.&)8F5:W`[SRSH:72/;EGEBDA3/435FMB8:=<95-%,CZ_``^ZK1.XXXWTUXZ\\]\\\\^cecba^\\ZZXYYVTSSTTTUTRQOOOPQQPQTTSSSSUUVXYZ[[[[[[\\]^_`befdeeca_][\\YTTUUSSRRRPQQOMLMMPRSTUSSQPONNLKLLMNNMMNLLLLLKKMPRQQQOKJLMNPRTVWZ\\_a_TLLJHIJMWadbcYHCCHKIHHJKLLLMLMLLNNNMLPSRSVVTRQPKHFGJQVVWWW[ZY[[B\\d_SROJDR_biiaTJIMQQQSW\\`^^b``iljjihikuo_ipnxub___lwupotvwxtph_gstvz{xyvfc`^`bcb_abdhfa`z|ikwwoggfa^^XSPQV[ZWUUVW[^`bb^cjhfjsrRZ~~|y|~ww{i^prf]ZZXOOTWTSTJkkbc`tiMQSTSOPPNLJINDVžİvXhyaMztWSVX[`grwungb_bgeeillXIKMKKLNRUUTTTQONLKKLMLKJKLKJJJJKKIHHHNTUURMLLJJMOQPPdir>MSMKIIIIIFED>Qqsnk`U\\fZLPLGSq_QbXWXRRWWcjijg`chkotzzzvk[LGHHLNKIIJJJJIIJLSWOAwCJHNZXSQLHFHHIHIJKOOOONJMOIJJGIMOOQQPOOOOOONMLMLLMKKLKKKLLLLLLK`miaaa_`]\\YVUWSIHJJJLLLKLNNMOONNNNNLKJJKJJKKIJKKLLLMKLKKKKIHIIJKKLORTVVVVWXUPMLMMNMOPQRRPNKKJBCJKPPOMMMLLKKJIGFEEEDDCCA@>?@AA@@@>>@EILMLLKIGEEEEFHKKGDDDDDDDDCCBBCDDDDCCCCCDDDDEFEDDBCFD@eİ_>JLIJIIJGJPV]_][YXVSSTUTSRPJJMOIM__UVZ]`abckojkgYTROLKLKKLNQMIIJLNOQRQPSPGHT[`ff\\OCA?>@DFDDB?>=??@>>>>>====?AAABDEDEEDDFDNZCFDCDGHGFFFCDEFHBGS\\el]E:>=<;;<<=?CGJHGGEEEFFFDEECCBA?<=?>;997768:9888788777664466556743443234876898887776555455687458?NE68;:988769EMNOPRTSTQONMLLLKLMOOPQG315:85469:<>??@>758?EGEDCCDDDCDDE<348:==:9>BCA8244332467626DMI@9898:;<;;<:;;;;:>@@?BDDC??B:736:<==AGKMFBBB?<6C=7FC;Ide[QE?CBA@@A@@ACHLMPNI??@CEEDEDA?>>>><>>@@?@K^dbb_\\ZRGBACBA@AAABBBBCB?:63001345457889987757899::;==<;=>:642353//./1111//00001111246631378:<<;:<?AAAABA?>=>>>>>@@BEGNTSVWMB=;:::<=??=@B@??>92235676568779;:::<?AA<9;<5-,.373/.////0-061+-///05664320/-,-./134420-*1:5251,*+-/0.))02--1:;643/.1211..6611675.,----0135613004DK:)+-,079745;CEB;:>9336423/,,+,-.381#&;@/&0100/013:D_k^O;-%*1.,.1D@3562./46,+-06;7,*++-482-/22222(*CPC56:73+'*)('(073+*++($(2=C@5,)-OY;-11-++-//(/J?02DYQ4-EN959=<9524;BHOOB23<835;1.),N|a=8642-+,,1:;:89:=C@848>A>5-/233/.11016FF1)143561-253122./9A<7650/440033324513@9);[leJ=;8=EA:=E>2..2<=5AUYPIC85:91,/48>JQF852)1DE:57::51&!0N]UNSN?/&%XXXWUTUUUUVVV[^]^``][[Z[ZWUTTTTTTSSRRRRQRRRRSTSSSSUUVXYZ[[[[\\\\]_`abehiihgfc`_^^\\XUSTSRRRRRQRQMLLKLOQQQQPOOONMLKKLLMNNNNLJJKMMNOQRRSSTUROOPPQTVWZ\\[\\`_UOMKJHGIS\\afi_SIEEEGHHJJIJMPQPOOPRRPRTUVVVWWUUTQMKIJNPRTY^`_Z\\UAWmVYUXXMHKKMZbb^[TJGJLJMPRW]``beeffhlnmu~mUSX^ghcbc`dnqkouv{xpkiqxxwxxy|~m\\_`acb^]]\\\\^`cgkfaan}jcffa^\\XRPRV[[YXXWUV\\ejd[]efbacprgdwxx~y{zkPJYbekbKMMMMHHGGENjaafm`UWTVUSRSPMIFFCRjmͽl^cdmxX]r\\T\\YYZ\\blsvqga`dhcgniYKMRNLKJJPUTTTSQPPNMMMNOOONMKKLLLMKHKMOVXONOKKKJKMPRRcf_uUERNONIHKIGEF?A`sql[QPan]RNHOocEY]QS^_TLTXORX]closzaKFIMLIIJJIHGGHHMRYPTCLFNXUOKHFGHHIJJJIILUTLGFMLJIFFNPPQRQPQQPPPONNNNOPPNNNMKLMLLLMGYhhdddceb\\YVTOIKLLLLMMMMMOOMNOMKLLLLJIIHHIKKMMLLMMMMLLLJJJHIJKKLLORSSTUVVVVTSROLMNONPRSRNKKMLHEJKOQPOMNMLKKJJGGFEEDDCBCB@?@@A@@A??@FLONMLLJGFFEEHJKJGEEEEEEEDDBABDDDCCCCCCCDDDCCEFEEBCED>xt@GIJIIHIIGORV[\\\\YXWUSSTUTRSW[_X\\nj]URRWWOFHOORT[cc\\YXVVURPQRSQMIILLMNOPOSRGJY^cd[MFFBAEGEDDBBAA?AAB@>>>>=<<;=AAABDDDDEFDEFQZCFDCDFFGFFDAEEEHFEC@>K[T@:<<;<<<<=?AGHIIGFFFGGDDDDCAA?>===;8887678:97778877766456655556544456677698777766644456668:;8;HH;48:9999998;DNPPQSUVTQPNMLKLMNOORO=3359866679::;<>>=;79?CEEDEDDBA@?DF>688;<8:BD?:43333447:86;JRI858;:89:;<<<<;;;;:=>><?@@@8=E=9689<;=EIIID@@@><;:D9=I=>Gi\\HICCAABBAAAACHJIHHCCDBFIHFFFC@???=<>><:89@IYhggjigcZTUQME@ABBCBAAAA?=:514556678889974457899::;<;;;<<;843444433567530000001101234679;:8;===>@BBAAAA???>>=<<<;:<@AGPRRRKGC=<;:;=?><==<=??:2035786468779:::9:>AB>:9:5-**-33--..///,-:C6*+-+,010.------./01220,+*)2;6241/.-+++,*'-2-'+6<631-,,+0445651-...,+,-/..2313771*2GF.),**),.-,*-7A?9<@:433110./,))025:6&*GO91834=:<?VgX\\mi^K<<DQF+.0?E9462+++*+**,/63,+-)*9=/'074476*/KQ;00/0.,+*('+--.....2-!$+9A<2-+,9>1+--,+.49:40:43HXG1&6J?.5998852149EPPE:<<33:?=5$$DtL?437887546<:878764335:<80176341/00//=F8)-03;>:531.,*)')-<F?;::?90.0333217:00760,;VS51BNX`abhiP48MVRPNRN?7740285.,*()/765BH71<@=516<;6//6DZbSMUM5,GYXXWWWUTUUUUWWWY[\\^^\\[[[[ZXVUVUUVWWWWVVUTUTRRSTTTSSTTVXZZ[\\ZZ[]]`degjljhgggda`^^__[USRRRRRRSSRPOMKKMMLLLLLLMNLKKKKKKKLLLKJJMPRTSRRQRRSVUSSSRSTUVY[ZZ^`]WRQRTQKKQZ\\aigc^SIFHIJJIHJMOONMPPPQRTVWWUWYWUVXXWTPNOPRRSVZZ\\_XHOXPOV\\b`VROJFHORRY[RKRSRZQDP^YU[]]]ZZcorx}|{[KMWcqqjccnvrlqurxwnotzyvvwxxutta[\\aa`^\\\\Z\\`cddcabu~~|vjaadb_^\\XQMQW\\\\ZZZYYWXae]Zdqyuiekx~y~zyxs[RWWXZfveUUUSMJIHJ?hjadgeZY^Z[]]\\YYVRPMT\\RWþidhfhwuX\\]]__\\Z[[^gszsg`agehqeRHJRVRMJIJSWUUSQPQPOOONNPQPOMKMOPPPLHMSVUQNOOKIGJNNMQfqKSqkgTKOPKJKJHECAJUWdeKLPS^``OPk`DMZPKTXXUGTZMKGFSenuu{|~|gVMNLIHIIHFEEGGIKSupFJIELTQJEDEGIJKJIIHIIXiPACJNLIHJPQPPSQPPLPPPPONNMMQRQQOMKLMMKKNJT^`addba_[WROKJLMLLMMNOOPQPNNMLLKJHJKIIHHJJKMMLMMMMMLLLKKJHIJKLNPSUUUUUUTTTTSUUVTNMNOQSTQPOONLIJKNSVVQNMKKJJJIGFEDDDCCCBA????@??>?@CGJLKLJIGFGFDJMKHGEEEEEEDDCBBCDDDDDDDDDDECBAACDCC@BEEDˉDBEHHHIIJMQSTSTUWVVVUTSSSROKV{~{kabc[LEIEBCFVih_]ZYZXVVWWUOKIHIJJJLPSTPS_dcXLGGIGECCEDCBBDECABBA@?>>=><<>???@@@@BDFDFGVZCFCCEFFEEEDDCDDIFDBC@;@SP?::<<<<<===AFGIGGFFGGFDDDBCCA???=;::77678987667777766455554566534798666699777778764456877APF<FA47977889:;:78IUUSTVWWVURNMLMOONNNB5545886877999888:>@<77>EFFEFFDB98BHG><6766>FC:66877788<<;BOTC716::999;<<<<<;<;:<==;;<<>><;A>;::9:;?ILE@@@?>>>B;?H:<><8GfM>FIBCCBAAABDFF?=@>CBIONKGFFDCBBCFLMF@?>=?=?Rdebbfjhcba_SE@BBA@?@@@@?@;4555788777762135788899::;<<<;;:767668::<>>;6221110/0254246;>?=:>@A@>@AAAAA????>>=;;<:99::=HPSQIDD@==<;=><<=<;<>A?61146766777778::99<?@><<:5-*)*./-..///./,2IO</./0/.13210//--.///-++++*4<6/../.,*))+34/141/59630,*(&,455542/-*)*))/72+.0/14;>/3C:141+%%&'()((2>H?764210/--4<9.)-4;=7)0IODBC>@FIHHYb\\fhZW_ft|lH+-,4I;683++*(()***/1,.50-45(#+32///*1JN954-,/0/*'%(00+*'+5:4)'(1;90---,++*****-2662//2IYE313;?736766643102;IPH?:7434=A:,*7\\k\\WOA>A?=;857:;9854112344/.352250+061-;C3*0.9LI8-,,,+*)*(*>IIK>7>FK@123/135620.-)&(11-<XgikljntdB:MTSSTRNC2/75.++,,./-(&'6TX<5:88428??7/BXY\\ZB<K<*FvXYWVVVUUUUVVWVVYZZ[[[[[[\\ZXWWWWXZ^a_[YWWWVUTTUWVVVVXXYZYZZYY[]^adegig`\\^acdb_]]^^]ZUSRQQQRSTSSTQOONMLLKKKKLLLKKLLLLLKKMNOPQSSTTTTTTTUVVWWWVWWUVXXYZ\\^_YPQX]ZWSQTUVaknojbQFHHGGGGIJIIJLNNOQSVWVVWYXUUVWXYXUUVUSRTWY]`^XU]a\\Z]_\\YTPPNIFIKIOY]ffdkeWXljSOV^e`Y[kx~||r[PV^ikdkvvmitwovsefiiknrturpwxpgedba`_]_]]dfdacer||}~||yod_bdd^YYZWPNQUXYZZYSKPTX\\cq~{{w}b\\[TWbsz}jWXSKMJIGKGZg`dbWT[cb__aa_`a_adega\\vfdehew¹zwbPTZdhg_Z[[Zdw}sgbbdevtRFILTWTNMMQWWUTQPQRQPRRPNNMMLMMNPPRQLJQVRQUSRIEJHKSOMbqNALsxTNNOLKKJHCAEMSQQQKKYZLOXZjgJAQYHGRWXTDR[PNJA<@FUiy}vkdheca^WROLEGGIHFEFHIJJLbVILJHLQNHDBEGIKLKIHGGFRuXBGLPMIMOQQQRI?:CRKLPOLJIIGJNOONMKLKLKIKHJOTX[\\YWXWUPMLMLMMMMMOOOPQQOLLPTSSKHJJKKKLLLNMMMMMMMKLLKKJHIKLPQSWXWVUUUTSTTSTV[^WPMNPQSSRRRQOLKKJNWXSONLJLLJIGEDDCCCCCBA????>?>=>??AEIJJJHGEFEDMOHDDDDDCCDDDBBCCDDDDDDDDDEECA?@ABA@?@BE>fǜFDIFGHHHIQWXWVTSSTTTTTTTSSQRNPm||iTLBBDBFZgb][YYYXXY[YNKHHGHHGHKPUZ]baWKGJJKIEA@DDBABDEDCDDA@?>>=?><>>>=<==>?@CEEEVYBDCCEEEDDDDDBBCCCDBB@78=SN<;><<===<<<?CEGGFHHGFDDDCCCB@B@=<;;8888867787776776645555456543478866567877768:966656895<MJ;==:;8789::<<::8>MTSSWWWVUTQNNOQRQWH0/54677556777766567;;879>DFFGHEC;7:CEA@;757AE>79;=<<====>HRRB226:99;;;;><<=<==<:<>=::;<==><==;;;;<>BJI>;?@?>>?><9D;6A:>1M]?ABCBBBBAABDEDA?>@>@JPLIHFFFDCDIU[YK==98;>>@O_e`\\^bcbceaK9997789877:AHE956788787652236899:::9::;<==<:879769<<=??<7211210.26754467;>>=>A@??@BBB@???>>957:99876776>LSQGBDDA@?>=<<<?DFA?@?;6455578777778:;;::<=>?A=2+*++**+....///.*3LSC9>EGFHHGD?;6.-./.,,,++**3=8/-,++++*(*9C=9<;7840/.-++--01.0321.+*+'%-70)*,,,/=J@3=O[M70)*)'(*++2DMC50.,,-,0:CJG7)'/=D5(4JRLJHGGFGI\\R1;VQ?:Nk]:00*+B@?:2..-*()**+/316<91+.3.(''+/+(3CA31-%&(,,,+)*02/,*/<:2/,),273/....,+****++,,)')*6=212+,27830.4654331.<ID;875217=;03=>I;B_gXU]^\\[\\\\]Q721233331,),0-+03,-;<.(7D7(*4I[ZK<2-,,.01))=HKN?0-:Z\\7,4751277.()*(*,+7Vnsstvy{}ydQRUUUSRTPB:;4*()((,465<BIUP8,-0115>?90.?TZ[K/)3.6gYYWVVVUVVUUVVVVXYXYYZZZ[\\[YXXWWWXZ^b_[ZYYYXVVXXZ\\\\\\\\ZYYXYXXYZ\\]_aaba]VTWZ^``^]\\\\[[[XSQPPQRTTTUVSQPOMMMLMLKKKLKKMMMNNNOPQRRSTSSTUWWXYYXXZZ[[[[XWXYZ[\\^_ZPMRTUUTQPOQ[cda`[PHIGEEEEFGFFGILNOPQTUUVWXXYZWUVWWWZZZZ\\\\\\]]]`a`cfda_^^^][WVRHK]^R[lmdduryjY[fuyoinv|`LJ[lptqjdanurwo\\]bcnurtywx}{sc`aeijejoi`_`alv{||{zyune`cfed_[XUUTUVVZ[brzysiddpv|~z{i``WO]nxiSPRNHLJIKPWSm~hdcZQRZcfb[XZ^beb`c^WW^x{dcbefa}fPQW[afi`XY[X^vxidbbmzbGINOSVQNORVURPONOQQQQONOMLJJJLMNPRTPKMRRJIVZLG[qfVSK_nSAGMV_\\XQNONMLIE@CQU[YRSPRa\\JFIehYZPVVIJSSVULSVNNJEBBABELYd^ZXXXVXXXZSIFHHFEEFHIGJebKMLLKMOLHFEFFGGGHHHGGDHdYLJKONJNPQOMJNdvmseMMNLIFDFGJLMLLKKIIIGHJJIJKLNPRSSRPMLLLMMMMMOOPQQQPMLQUV\\WKKLLMMNPONNMLMMLLLLLKKKIIKMRQSXYWVVTTSRSTTSTVXYZWSRSRQQRTSQOKHDEGILNNLKLLJJIGEEDBCBA@@>>>>>?@?@??AEHHIIHGGFCGPLDBCBBDDDDDDCBCCDEEEDDDDDDCCAAAAAABA@BC?QFKIIIIGIT[YWWUUTSVUSSSTTSSTSTQNohNFDD=B]j^[ZZZZYZ[WOKIIHGFEFFIT`eaXMIMOMLJD?=@FCBBBCCEEECB@@@>??>>>======>>=<=;RT@DCCCDDCDDDDBCDEEDDEC:72BVI<>=====<;::>BDFHHHGEDDDCCCCBF@>;;:878887778886766665555545555467776655665678:<:899778989:><;:::8789;;<;9;<<BEINUVVWUSQOOPRTU\\E1155777544566766655788878=DFFHGDA:69@DCB:7:A?87=>=?@@@=?KTNC867699:<<;;>=<==>=<9<>>@<:;<<=<<<;;;;=?BDA=<??>>>>=>=====:>;7MO8D?AAABBABCCBA?>@@@??AEFDEDCCEOVWVRI??>?@A=9EYc^X\\`a^a_H3//0/3320159DNF:7779888885358::::::99:;<==>=:9;769:<=?=:60.11/./378765448<=;<=<;>@@A@>==>?@8047743224425DSRFAEGEB@?=<=<>HPK?77:::744798777778;;99<=>?@;/+--,**+-.../11/125ENIHOVWUSSRNJ@53210..*)+/5?E;1-+**-152-7DGD<:82*((+,.01.,,,-0110./4-&*/,())*+-154/Aub8365-++,-048=;63/+*+,3@HQL82/(9H3&8P^TH?:8324Y_8'))//*6@>7553)'3BD<4/..+))++,-6><881.>F</+.8<?GD6*&))''%,@H>1+/;<4315410-**-21/.---,,*'))(($ +3-&\"&?@.,15750,).454451*0AD52543236856>/400Hnznu}}{_6.1245653.---*+/-/?J;('8G?-0GVSKB8-''*1<;+*=B@@:;37]X40;@91/9;0(-23>>13?L[`altrqwudXXYYWVSQQL@0+*'$%(.5D]m_D5/*),,*0740),3ATU?-',-7eYXWWVVWVVVVVVVWWXXWXXWYZ[[YXWWWWVUUY]]]\\[[ZXYZZ]___]YYXWWWWWX[\\]]]^\\ZXXXXZ[\\\\[ZZ[ZYXUQPPPRSSTVUSRRONMNMMLKKLLLLNOOPPPQQRRSTUTUWWXYZ[\\[Z[[\\]__^]\\\\\\Z\\__]WNHHMMLLJIMTXZ\\[PGFFHGFEEDDDEDFJMMNOPQRTXYY\\][XVWVVX[]]^^^`_^```ccfgfea``_ZUSQVgl`[ea\\s{~zoknzxttw}jcntvzthddgouuf^myy|}rq|~~~}vf]`q|x`Z^`]fv~}xsrpkdbbeffecd`[Z[ds}~qho}t~{tcfj`]VS^_[^`NMWNKKHIMTVUJW~mldTPTUYZXTSUZad`YUTTQWxdba_d`^WFMVZ_^]YVXZXWkoeacpmRIMQTTSPNMOPNLJJKNOOPLGKMKIJLLMNMNTUNLPNP\\TLIC^p\\T_nTCOOPPOOPPOONLKID?MZ[bWMRQU]WNK[cNTZY[SNRSMJTVTSLJJGEDDCBCFLMPdkjjjmvt`LLIGEFGJDNfUENLKJLMLJHGHKJHFGIIHJHHKMJGIMMJKLKKLa˭[FOMLJIIKKLLLKJJJIGFMX[ZYYXUSRPOONMMLLNNMMNNNPRQQQOLOPPYZQNNNNMNOPOMMMNMMMLLLKKJHIJMQOQY[YUTTTSQPRSSRTTTX]_]XTQPRTRRPMJHGEEFFFHILMLLKIFEDCCA?@@>>>=>?@AABBCFHHIJHHHFDLQHCBBACDDDDDEDCBCEEEEEDDDDDCBABCCCDEEAFAi`@GIHJKJIVd]TTVUTSSUVTSUTTUUTQRTOMyo\\OKF:GlcYZ[\\[[[YSNKJIHGFDDCFSaf\\PMMMNOMMH=9<EECBAACDCECBAA@@@@@@@??><=<=<<:;6QO>DBBACCCCCCCCCDEECEEGC:30ESA9>=;;;=<;88>BFHHGECBCCCCDDDED@@<878777777779877766555466555656876655455679:;<:899:99:<=99<;999868999:;;:;<=>?CNUWYZWSPPQTVX]C05667764435665555665358989>BFGFEB;439?CB=;AA:7<@??@AA@?OSG?=988779;<<;===<<===;:<=>E>669;=<;;;<;;<>><=><=?>=?A@@>>>>><;;;9HE@KBBBBBAAAABB@@@?<:9<@ABCDCDMTTUVYWCBCCC@<45<N[\\Y\\```UA4643032322239?HE<99;988885369;:::::999;<<>@?<<;7799;?@=:71/0.-.0268864348;:9:9879<<==;;;=?@=;94430012221:NUI>AEEEC?<>@>=FQL90028;9667876777778899<<;<93.-/0-*-0....12238<20DMC?IOOOPPNLKG?5111/17?EHKH;2.+)*,7CG:/>D<512+''(*,020...---/22114.**+,,,*)***.1.<t[99=71//-,-.-.24331--,*/AWM420'3@3-6M_T;0,(&$%%6JA0&.HH78=DIB0$%,=D>95/-+)*++)(2=96943NQC@;;DHNXL8,+*))/1-.2,)%(CF30+'-002/+***+,+,..-+(')'$#4RO4181<\\b^XC64/,)+-//04327VQ5--2333323771.06.CvxsxjT502455665420.,-/.9PN6(+6==?OaS:.++))+-2;9,0?>;49GB9[cWVG965.2@41:84@H7.+-=FL^b\\i~|nijkkkYFFNM@420,/1//1=da1)/+)*)'(*,++*+2ED2+-.-)JwxYXWXWWWVVVVVVVWWXWVWWWXY[[ZXVWVUUTTTX]]\\]\\[ZZ[[]^]\\ZYXWVVVVWWYZZZZ[[Z[ZYYXYYYYYYZYXWWSPPPPRRTUTSSRPNNNNMLLLLKLMNOPPPPQQRSSTUUWYYYZ[[\\\\[\\[\\_aaba`^][\\``_^THGIJJJHFFIJNZeh^OHEDFFEDBCDCEIKKLNNNORWYZYWVTSSSRRV]^]][[_abbaaabca]WUUSRQQXele_[STo~vqxyplv|xusw~yx|vmomacok`o{uoeht{{{}}zzyrb^_u}qb]a`]hw}wqjgffefffghhigifdio~{xzzx{yoninw^RSXYYWSRWc^S[\\ntPFJPW_^TQNY{|nlcXQUYTLPVWST]eaYUTUTT}pcecaebWhSGIRY^[VSTUUXTTqqcafl\\OONQTSPOMLMLNMJHILMONHIMKGGKOONNLPWUMMQLWhUHJMbi^a`nqUHNQQRSQLJOPLIGGGE@RaXWPNRPX^PO^fQEMOYYQRTSIBHQVSJGIIGEDDEGFGGHHXiuxuwz{|{oWOIEDFHGJNKLMMKIJKLJIIJOU[_YQLIHHKEFHHJKKJKHPR_y`MJMMNNLMMLLLJHHJJILVbjov}{iVOMMMLMMLLNNONNNNQRRQOMLMMLNPQOOMNLKLNONNNPOOONMLKKJHIKMPNPW\\ZUSTTTRPQRRSRSTSW]_]YTRRQPRRPNLJFDCA@DGNNMMKJFFDCA??>>?>>=>@BCDDCDDFHJJHFHGGQNDDDBCCEEEFFFEEDDEEEEEEDDDCDCAACDEEFFCGCxAFFDFHJHPabWRUVUSRRTWUUVUTVURQPSWNSxljpq[@Uj[X]\\^`]SNLJJIHGGFDCJZbZPMNMKKLMNMB7:=BCDB@@AACB><=>?@@@@@@?><=<<==>>=[L?FBAABCCCBBBCDDEDCEEFEB>41HH6<=;;==<;979@FHHGEDDCCCCDDCBC>@<88:888888878877765566466678:9:8766566668::;988779:;==<<;;:999987889::;;<<>@?><CPY]^]YSRSVX[^D776799544445555556666678888;AGGGE@528=BCA@BB?=?A@@@AAAMQD==;766789;<<<===<<<;<==>=<@:557:;;;<=<<:9<<:<=<====@CBA???>>=;<=<7DDDFFCACA@ABCCBBB@=;99=?AADGNSTTVXYWMB>?<:8876;K\\^\\]beYA9>=85323344567@IG<:;99:99648;;:::::999;;=?@??>;99::;==<<:752-,/02577655579889877778998999;;:<932322246764>PN=;BCGJA9<AA>BLF50.+17:;85676667777777:97740013578842/..0./7<?<5;EE@CJNNNLHGMKA7455<FLQQMHA93-*((,0<H@1373.*,-,-+*,369=>7.*+/5521.+,,-00/,()*-2531H[?5752000.,+*),.10..-,+%#8VO2++,03231B[I-)(()('$4UN@4%@ffgzrgY942,7A?<;831-+*)($%,14::@VWQQH=AIIMI?880'+75*'#(A<*==('('+-+.364.)'(+,.11-*))&/HXQ?;AG7,Zn@56.('&()),245]}O>>6/35851111//2:58ktzd6045655431.-.,,./9LK4(,/-3GgjG.(,2431///0+6?98,)<C3Tlor[<380,636>928@6//-9KXcfmttst|m?6>;89;::?D>87;SiQ.*.+)*)(&'+,+)'*..('(,-$.KJZZYYXXXXXWVVVVVWWWWWWWXZZZZWVWVUUTUWXZZ]]\\ZZZ[ZZ[YWWWXVVVVVVWXXXZZZZ[[[ZZZYXYYYYYXWWWUSRQRTTSSSSSRPNNNMNOMLLKLLNNOOOPQQRRSSTUWYYZZZ\\\\\\\\\\\\]_aaabbbaaccbaa]TPKGFGHGECCEJViun_OFDDEDCCCBDGIJJKMNNPSWWTQNMMMNMLNV_c`[TSZ]\\WTVVUSPOPQVXVUXfwuli^e}tnrsqxxhblty~~ztsx}}{}yxzpmpk_^fdkz}tkotvy|}{vvuk^achͱ|h`_^`ktqmkhffiijiiiiikjjfhjmmfowyvbUQO[\\ROU[XOSaotrk]Y[XSRTV[]ZW[XYZ\\flsjc_Vamne[]Z[sxrg\\XW[_RINXXQNS^b\\XXWWWtfdgffkf_ZsLLKPSW[TOPRTWTHTpocdi^MNQNQRQPOOOQSTPNNNMMPNLMKHHHHIIJKMSVRNNONQQFM_[Sevs~rJJeeYTQSPMNPNJHFEFFBN_RJOPON\\VG]iVJLMKWXRSQNIA<HWTKFEHHFDDFHJLIFEDFO[fieca`^_VNHDEIIHILLLLLLJKKKJJJNV`c`WOIIJKKKIIJKLJMJ_iU/IyeGMNOOMLLLLLJIHFHOU\\dntywl\\QNLKLMNMKLNNNNNNOQRRQOMLMNMLKLOOMMLKLNOPPPRRRPPNLJIJJJKMONOSYZUSTSQRPPRRSSRRRRUX]`ZVUROQSRQNMHECDDHHLJJKKIFFDB@@>???>>>@BDFFEDDDFGHHHFGFJQIBEECCEEEEFFFFFEEEEEEEDEDDBCCAACDEEFDCDDVDGGEHHIIKSRPRVVVUTSSUWXWVVTTUSQRTSSR[pxqukxe@\\iZ\\Z\\c^KHJHIHGIIHDJWa\\KHLMMMMMMMMG<<>@EEDB?ABCB>:;=?@BBBA@>=<<;<==>?@bH?EBABCBCBCDCBDDDCCEEEEDD>6;D>:>====;:998>CKHFDDDCDDCCCCCB?=:66:;9888888887777778865689:9;:7767789:<;;:;8667677:?>96:<;;;989979:<<===???>=<<FUbfc_WRSVY\\aC799:<><977644545555566677878;AFGE?:::=ABBAABA?CCA@@ACHNC?@=8789988;;<<==<<<<9=?@>>95455679:;>?@@=7:;;<?><;<=?@A@???>>==>=?==@?CIHDCA@ABCAABBA><99<=>@FOVUSVXWXWRNJ<03457:8;GW]^afdQB@>674455666667?E>988:::8558:::::999989;=????=<:;;<>>=<<:::72.-.02446665776678778865455444443455444468::77BM@8>@DKF<9=>=>FC4/0--19=73565446878867886542236=BD>41.//.--39:;96;DEDHNTUPJ?>C@>=;;FLOSTNA>>7.+))((.;;50/1//0340,)*,1@OM:.**,1475/+2522321..25443/*.+++,/0000.,++,.//)%')))&,BF0)-..-./*:P?+,+*))),682--\"$MkyaVaHHD,1;;9:;9840*((''-521>JQQ^T5)9OLNL;192(/6,%',:J>-3.'(+,-*&%*38741-*+,02/.,*'?XE+2FFE3,>qZ065*,1&&((+/3;uw9>@;975675301332683Q}]2265765431+(*)(*-1>J;+,6-%Cm[4,,01120/--,,<>14/\"(0(JjntkL345,-/8DA85400/,1DYao|ph{F152002448;;997:@9,)**))(''(()))+2698*&--++//^]\\ZZZZZZYWWVVVVWWWXXXYYZZZXWWWVVVVXYXXZZZYZZZYYYWUUUVVVUUVUWXXXYZZ[[\\]\\\\\\[ZZZYZZYWVVVVUSTWWUSTSSRPOPONPROLLLLLMNNOOPRRSSRTTUXYXYZ[]^^^^^^_aabcddefggggffeb\\URPMJHFDBABRkwti\\OGFGGGECBDHIHJKMOOPRRQNLLKLMMMLNZdd_TJKPPMKMONONOQQYb_ZTVk{{vr}|wxxvxn^X]dmv{~|xxz|zrmz~y{~pinkca`bhuyo}yqru{ve]ccdzykb[\\bmnkjkmmkmolhdgijknkghj}vbNEVb\\^fxtmqonlkrvh]ZVUUUWZ[\\\\^dpieosxvfckigegb]fqufYX]e_MFHT_]NLSZ\\\\YY^brzdeigilkaLedLPNPRTWSNNQSTRX[blfheUQSRRPPOOOPPRTQMR[VONOOPMKNOLKKKMORSTQOMMOKHJQWST_m}KPjmhd[QQNNSPKJKIFFECJWUPQQLU[JSdTLNMHNXQPQNIF@<JWUNFCFFEDEFHJKJIIIIEDFTf`][ZZXRLHGHGHKIJKLLLLKKJIIILLKLNQOKKLLLLKJJJJJKORb}JCG:Nu]LOONMMKKKKKJJJEIV^gnnnfVMRUSPLLNNMKJLNMMLNPQQQOMMLMONMOMMNOMMMMOQQRRSSSPMLLJHJLNMMMLMQX[VSTSPPPQRQQRRQQRSV[ae_WUSSTSRQPLIGFEEEGMSPKIGFDC@@??@?@@@BCGIIHFFDFFEFHKJHMMFCFGECDEEFFFFFFEEEEEEEEEDEDCDCCCDDDEEEDEBIJGGGIKLMQPPW\\[[\\YVTSTVUUUTRSSQUVPQ[gptf_jqqtrxZGecYXW_\\IGJHHHHKLHERa[LFIKMNNMMNMLHEFGCFGFDBDEEDCACFEEEDD@?=;;;;;;9:>=bF?BABEDCBBCDCEEFEECDEEDDCA;4=B<>===><<;:9;=EIEBCDCDDCCDDDEEBLNH<::87777887777788888747997546689:;<=@>=<;99899759><758<;::99999:<=>@@@@><<;;;>H[eec\\TTUWZ\\D<>CGFDB>>=:876654434666666777:CDDC<;;<?ADBAAAACDBBCEFIC@B@:989;:779::<<<<=>=:>>:=>:6675689::>DHKE<9;;;?>:;==>>??>>>>=>>>?@@A@@@FJID@@AAB@@AA@?<::::;@JQPORWZXUTSRQG87679:<<;>Q``cgcO>==867868;85679=;7889:9766889889999999:;=>>>=<<;=?@@>=;::<<83//.-/3766557769::;8444222332212356654468:;<;=GD9:<>DHC<989=CA3.21/.387555453587778988876335:AC@91-,../00//0210036;@BMXYN67FCBB@>@DLT\\R96?=5210.,.9>;7326;?<8420/))6LM5()())0:<516;7775457:8/01/-,,,.26422220/.-,/82&&+++*)-021111.**(7C<8940///01+('))%6d{f[eU;0/).9>>;987:91036774.-;KJ?NH$*HNNN@.+1-(+/*&(.:6()*)*.0-++)%')+-493+)(().20,+-+$$2<@D2'-PoD0745K^C*)0333?^P29:;;AB<866679733831jj809<;98879<6)&(()-/4HJ604+#H\\<)/81)+/011.,.@=073..+ /VkoXC?951+)8G>101441-/B\\ouuwy{G-230,-/34+),/0)%((((**('&&''(*)'2<?E?2.-3FL@a`^\\\\\\\\\\\\ZXWVWXWXXXXYZYZZZ[ZXWWVVVVXYYWWWXXXWXXYYXXWWWVWVVVWWWWXYZ[[\\^_^^]]\\[[[[[ZYXVVUTTUVVVVVUUSRQQPPQRQOMMMLMMMOOPQQRRRSTUWYZZ[]]^^^^]^_`abddefghjkkmnookhf_TMKKGEFA>NagileTJIIIGEDDFHHJKLMOPOPPOONLLNOONLQ\\`^ZMEHIIIIMPSSQQMNVYYTOXhqokp{zwsbRPUZ`enz{|zpip~ufjqhab^`kpip|pr|rd_aevpcaZYanplnmlnnorlgchjknlfivtrrgVJZ\\\\|}ŻhW\\WWXWVUUWY_ejptw}yo}jgdcefgecelrj_Y`fXJM^mxtXLQSWYV\\gjewdfhghifWLPZUPSSTTSSQNNPQSUjyklj`V[[UQSSONOPPPPMR\\ZRNNOPONQVVTRQQRSSQTVPLMNKHJLLORPl}VRjf__\\[YURONLIIJIFDCBGOQQRQPXVWcSHMOLHUWMNLJGC?BNTPNHCFGEEFIKIIIJJHGJLJGO`a]YWVRNKIHGHJJJJIIIJIIIHHGGFEFHILKKLLLLLKJIIIJJGMXjFKMQKEINPOMLKKIJLMKHIOYekom`UOQTVURNLJILQRSZ_aa]VQPQPOMNNMPOIKPNMNLMNNQSRRRSRPMOMKIIJLMNLKKMPW\\WRTSQPQQQQQPQRRRTVZ\\fi^RSTTTRRPPNKHECCM``PJHGFDC@>??@?@ABDEGIJJIHFEECCHKGLRKEFFECBDEEFFFFFEEDEEFEEEEEEEEDCDDDCCCEEFFFIJGGFGJPQRSX_ccbb_YTTTSSSRRQQQSVUOUftpd\\YTSTPVaj|zlnUJ_ZWYZSKJIGHHHIJGK[^OGJKIKNNMLLKJIIJHDFHHHGHHHGHIIJKJGC@<<=9::;87468:\\@<=>?A@@??????BEEEDDEDDCC@?65?A????><==<;;8=IFABDEDDCCDEADFH_rnL6:8888878777888788875345544569:<<=>>?>>==<<;869=;867799:998:;;<>>?@@@@=;998::<MaiibZVUUWUEAAEHGCA??><==>===;:98888987788=BFD?<;==@FDA@BBBCCCCDB@@CA=;;:99789:<<<<<<=>>==<8;=88:9:;;;<<>EIJA87:99<<9;<=>>>?>>>>>>>??@@@@@@>CLH@AAA@@@@BB@>=;979>FHJOUY[YSOPPOK@767::=>83AZ_abdY@:<86984<?9589879;:98:;:768776888999999;=>>====<>?@?>=<;;<;:964/,0564556899:;<<6223432222222244333368:<<<=BD<8::>EF?866;A>2.1200037754443477658997874468>@@?7.,-../0/.,-...-,-.035@QG.:I>@??@@AJRZP4)0642232138DKC947CHFCAAB>856AE6)))'&(5?;535532100363-/0012005;;74443221.*-670/00../,+.01372()0:?>=:5/*3EPC&&)('#)Rt{nzR+&')*2CKG@:57:88<B@0(-18IE-00'>UQTI5130,(,/-++)*($(()+-//*))''()(,1/,*()+02/.+\" %))(09+%8==8898@Xvh6/9;9679547:99>OG01765542332/4o}0*=>??<;:7;D@.&*,-031@PD4,'3M;\"0A@2+-.021../B;0;743.%$.7X\\RK:461*7A1(/034314H\\h_~}wB%+10/.1;<14>?3$#*,,,-+((((,131-'.CKDB?:46T[;cb`^]]]^^\\YVWXXXYZYYZZZ[[Z[[ZXXXWVWYYYXWWWVVUVWXYYZ[ZYXXXXXXYXXYZZ[\\]``__^]]\\\\]\\[[[ZXWUTUUUUWXWWXXUSSQPPPPOONMMMMMNOOOOQRRRSUWX[]^_^^^]ZYZ[^`bdefghjkklnnjfda^[UOMNMKIF@BLOR[b[NIJJIFEEDGJLLKJLOQQPQPPNLMOOONLOU[c\\GDMMHGILNV__^XQQSSRV`fgb`n}wsscPOUUWY_lxuutrn}oipqd_a_bihk{ty|ub^fttSUXW^ntpnlkptspkiijkmqkn~vwmYTTSn|y}tpgs}}~~|z\\RTWWWZZWUUX\\cjqtxzunssolllllhfgig^\\]XMPgwvytZOSTSSVaigaiocegghg`SNPJOQPSUVURMLMQN[qupmqkZQVPKQRPOOPOMPV^\\NGMSTRPOPTWURQPPOONQSOKMNKJJMPPO[sc\\ifkfiqlec`_XOIIIHECCCGJLNQPPTU]XKONNHHYTLNLHCBAEONIKHBCFFFHKMHHGGFGFHJGCGT\\][WTRNLIFGHIJIHHGGGHHGGGGGFGHHHIIJLLLLLKJKKKKKKIVvRAIIKNLMMMMLLJJKJLMLJTcovo_YXUUVVUTPHGJLS]bipqppk`SPQQOKLMLPQNRQMKKOMOPRUTRRRQLRZUKJKLNMNMLMNQV[WSTTRRQPQQQRRRRRSTWY]ef\\RQTUSSRQNLIFFIZdSHIGEFDA??>>??@AFGFGGHIJIHEDDEIGIPPKIHGDCBDEEEDFFFEDEFFFFDDDEDFGECDDEDCCCDEEFFGGFGJMQSTVXZ^][Z[XUTTTRQPQQQRRQR_jpi`UKJHHPRNK?DRce`p~XU]WYOHHGFDDEGFDK[YLGHIIIJLLJIGHHIJIFFIJKKJIHHIIIIHHGC?==?A<<=?<;;<>?W557998:=<:8789;?ACDDECBBB@?=77AB??@><=>?@?;:GF>=BEDDCCCBBCFN^gcI7888887777778877777753345456789989::;9::;;?:37==84677788999;<<=>>>>>?><;;:9;;:>Siqj`XUSVOCBBBBA@?>=<=>?AACFDC@<::;::98887=BDB>:;;?ECAAAABCBB@@??@BB@??><:99:;<<=<;;<:99899::8888:<>?<<?FIE<568889999:;<>>?>==>>>=?>???@@A<>INJHCAB@?@BBBBB?;679<>DQY\\[[XNNUVLC8779;;8587DTbcb^F9:68978?<8:;989::899::8667777888999:;;<<=>>===>??>=;<<;<<:::982035545579;;;;:84344454432220244344459<<<;;>@<89;;?D@888:>=4.122224544553136642489788569<???>4...//....--.-,-,-.(''(8>7=?<98=A>=FQVF1-..,,378;?<<JPB7;DHDA@AEFGFDBB@;3472/7AB81/.+''*,./0145444569=<88874331.*),29<965310-)*06=5((2=EH=1+*)-]U#$))(!'4GrR/-/+%&:HIHA;689<AG?/'-3;N?()&*?LPX;-01-*.21.,,*((((((**+,*'*--.--,)'))(0:841/+(**('%'('+1/+.00245Rc@2:<;:745578987547C91200112252JW&/=>=967877>=3-.1/03.1DA:61<>'$<M@31,*/10-./C90>:4551,'#LoqW>;:5/41(*.03424>KRF>htl?))-/-),5;>AC;*#*2432/*(+*(/993/-0>]U;7;50=;&fda`^]^`a_\\YYYYZZZYYZZZZZ[[[ZYYXXXY[ZYYWVVVWVVVXYYZ[ZZZYYZ\\\\\\ZXYZZ\\]_``ab`^^]]^^]\\[[ZXWWVWWWXYYYZZXUSRPPPOOONMNNOOOOOPPQRRRRTVX\\_```_]ZXWWY[^`acdefghgfdb]WVSQRSRQPPNLJHGIJJLOPMJJKIGFFEFJNNJIIKOPOQQQPLLNOOPOLLUgmWFLTNFEGFO[bge_\\XSSVY[aeit}~|~}rus_SWXWWYcpvyquxwtquoa^adefiwywx~~p_alztbTWdquuqmrwwspnmljjpsqsvca`Sp|xss{yzzzeUVTQVXV[\\URSTVYcjltnsx|zvpiec^\\b`\\[`b^`a]WRRVWWY`ggeXx{defhfgcYQORTSNNRVWVPIILQM]~pptscJMXVQLLOQPNS^d\\PGIU[WSPOMLLJJJKKKKLMNLJKKJKKOOHUn_S`UVdimrkihffcVHHIFEDEEFGHJMLT\\[UORQNMFKZROPOKEBCHNLHJHB@EGGILMHGFGEFFGIIJJJQWXWTROKHFHIHIHHGHHFGHHHHHHGEGHHHJJJKLLKKKKKLLMNF^fUKEGKQNLMLKKLLLLLLMPZkxvk^NJW[WSUXTNJMV]ceejmjd\\UUROPQTUVTRTY_hfVK[]SOPRRRRRQR\\feTKLMNNMNNMOQRUWUSTTTRQRRQQRRQQRSRSUVYaf_TSVVSRQPMKIIKTNDFHFECC@>?@@@ABDHHFFGHJLLJGFDGIGPQJIIHFDCBDEFFEEFEEEEFFFFEEEEEFFFEDDEDDCBCDDDEGGBEPTTUUVVVUVVVVUSRRSRRRQRSRNNc}smaUJDDCEN[WTGHMctqisxtxt[`Z\\C>CBABBCEDDS]KBHHIIIHIIHHHHKORTSQOMLKKIIIIGFGGDBA@>DIG?:?DFDDBBCO5468989>B>:8779<?DCDDCB@B@AC?79?=<>>>>>?B@@?@C=:>BDDCCCCEC??JD>888888888767789877677655568<<;:987778778633872786556778889:;;<<==>>>>==<<;;;;<<7<XpobYTSTKBBBA>>>>=====>??ACCA?=<<;::98878:<EF@<9;@DCBBBABCB@@BBCBBBABCA@?<99<<<=<::;;988889769;>@A@?<<?GH@>;9:::879:;=????=<<>>>==>?>=@?@>@AIPQLGDA@@AAACCA>><867=LY\\\\a^RJX`\\PE;7;<:89<:7DVbf`F679::<A<89;;:::76799::7766777788888:;;::<??>>>>>=><::::::::98754345665798997645765455443221244444469;;;;:;::::;::@?78<<<<6/03313543367400442004789:67:;=?=92//01211000232220.67044-0>A:;;::;=8@PP;38764.:D;:@=,;PG@CFH:*,.4;AFJC>BC@?CB=ADE?:751.16876789:::89>CDEDBA=9730.++-/8BA962--.**-065*(4EMH8*)-/+KD(0***'% !R^1/12-+04@GDA?==BMJ:2574;I:+,(*2?SD(%)-14589641,(+-)%(**)&%(-101/+''('%#);E>71-*((((*))4=7343/.//),=:068::::965449Fdi\\I5110/1134763^99B><50./014797320.-0.-9;;8;=*\"4A@:2-)+.---10E8.=90293(*(KvyZDB>71.,+..01444>JL;*dnBAF<89=<3+*0569:/$&*2?@6/)(+((264/12,3apH376.'%%hfbb`_`bbb`\\ZZZZ[[ZY[\\\\[[[[[[ZZYYZ\\\\\\\\ZWVVWWWVWWXXXYZ[ZZZ]``^\\XYZZ\\^_`acdca``_^^\\\\\\[[YXXWXYXYZ[[[[[ZVTQOPOONNPQPPQQOOPPPQPQRTX[]_^]]\\YWWVWXXY]^_``aba^[XVUTSSPPPTWSQPPNMMMMNMKJLLLKIHFFFFGJNMJHGHLOQQQQOONNPPSSNLXikXFHTSHEGFHNPS[a_ZVRPS]jv|ysry}qpwhTW[YZ\\bjqusuv~zotqhdgigfk|xx}zy|whe}zac_npqtqswskkmpomkkptz||sonq{z{ru|u}wq\\TVSWZTSQSMGLPRU\\hr{xj~Ǥwrzpvv|{tpmnq{}ldfiWMVXYVSRUZZW[ehd[wsbdfhfbZSQQSTSPORTURKHJLNMUm~pftdYqgVm~~kYSSTRZkfQIOZ_ZSRONMJHGGHHIKKLLJGFGIJJLPLVodKPROHM^dhkh`XRPMIHFFGGFFFFFHKKX_WUXUQONJSVKMQOKHEDGJIHHFB@CFIKNMIIHGEFFGIIKKKKNTTTSQMIFIKIGHJHHGGGHHHHGHGFGHHGIIJJKLLJJJKMJKMETqwfOILLMLLLKLLPPPPNR\\lvuhSPSPQPKP[_]_gknpngb_ZVTOLNNONS[`d[VUUge`Z`pbSQQQONNMQ^phVNLLNOLJMNNOQTUSSTTTRRQRRRQSSQPQQPPQSUZ^`\\TRTUSQPPNLIIHGIHHEBAAA@ADDEDFHHFEFGHJKMKHGEFILOLGFGFEDBBCEFFFEEFEEEFFFFFEFFEFFFFFEDDCCCDEDEGGGBIUVVUVWVVVVWXVTRQSSSRRSTTQUg|zmh\\PGDCCENZXYOPN\\vuxss`GWU]`eODHGB@BCCCFPMKKIJIHHGHGGFIQW_ca\\ULJHIIHHIIFEFGEB@@BKOJB>@DEBBCCKX:348;79>FD@<989:@DDCBBBBCBA>B@789;<?@?=>????=?<:<@CCBBCCC?85445789988887887689888899889::>A??=><:8887894/-48556448999:::;;;;<<====>===<<;;:::<95<Ujh\\UWUEBBBA>>>======>?>@AA?>=<=<<;:9998:<ACA=:=BDBABBABBA@@@BCBBABBBA@A>>??><;878?HGEBAAA>@FIOTPE:<==EF<>>=;==:9:<<>@A>>=<<==<;<<==>>?>??=@IRUND@@A@BCCCABID<:8:FRX^`^[KQ]b[TH;:?><>>?:<FWehJ6;;::=?988:;:::7669;:988677657778878::989=??>>><=>=;:99::::976433466657766665578886555333222343332568:99::9::::99>?66?>9;842223333336740/120/-.479967:8:=831001355545679;:;92<VTJE-(22;<986:@?COI3087:=8;93-15,5CFJIHK?-**,/8EL@12347;?<::==>=;98;>=;:98667853=NPNPNLG@:2/,++.,-9@7-*(,30.-+14/+:[_E'+:8339P910++--+-)1Oln;1;HF=5,1<CEEFIMSF2/9:6694/+')-;I1&*,.5;@;79990')($$&&((%,93,++++*+*(/33>IC851.*)+-/24<LVD394.275-*0024568988653.8I@/./10//11347<75Y8CD=8341,++/6;:520.++-3774266-473..-+,1/,-023D4-<9.052..$@srRHH:50.,,--./01-5BF?$G|i8.7?ENXN>:<==<641,&$7LJ6*)))')-+**01*,Sg@-86/)*+hfddbaabcdda]YYZZ[Z[\\\\\\\\[[\\\\[ZZ[[\\^^_`]ZXWWWXXWXXXXZ[[[Z\\aba`][ZZ[]]^bddedbba`_^]\\\\[[YYYXXYYZ[\\]^^_^\\XRNMMMNPRRSSRQPPONOPPPQTXYXXWUUTRSTTUUVWZ[[\\]]][VSTTTVXZXTQQRSRRQPPNLNONNNMNNLJHGGFFEDINLJIHJMNOPQQSROPPRUSLHPekQ>L[RGHLJGGIMRY_\\URVds{vkiosqlgjriYSVZ_]]eqllrrzquzkyzrkjkihmu|}||wouzyvw}yggwyxsZ\\{ornmorrng`dilnolkpuqgimmjdaurm{wtwz|`NWZ[WPLSRVcwvZWaesyi^ņ]_mnlouytolnq|w__debTQX[XRUVUTOSaec\\vlbbfkcYTPRVVTRRQQQQNGIKMMMQ]lcQX`OMyhd|q^VQYdYKR`cYPOOOMMLMMMLMNONNLHFEEIKLKGXneONRMNJFNZghZMHIIJJHGFGGGFEDFGHQWV[_YUUXWW[TIJFFHHHGFEDDEECEHKNQQPLLJFEFGGHIJKLLMQSUTROKHKMNNMLIHFHHGFFGGGGGHHHGHIJIKLMJIIKMJJMNSln_QKKKKLNNPPOVZXYXbjrl_TQRTTQKGR\\cp|~}o[SRPNOOPONMNNONMKLPOZYSXsgRPPNPNJJM\\shSNMKKMPNJLNPPRSTSTTTTTSSRRRQSSRQPPPPQRSWXXYYWRSSQRPNMJIHIJHGDA@ACBDHHGFHIHGEEFGGIKJHFFFGKJIHFFFEBAAADEEFFFFFEEFFFFFEFFEFFFFFFFEDDDDEEFGHGERXUVVVWVVWWWWVTRQSSSSSSXRVlynoc[MFFCCCK[YYTPXS`jtqzd::GY^iVSPLFCCDDCHLLNNKKJJJIHHKNRX\\YSLEDCCCEDDDDFDCFIGA??CMNHMTQMGEDEDM[9547:8=@IIE@;;;;=ADB@@@EDDC?@D<779<@@?=<>??@===;;=ACCABB@<9:88777888887788778879::;;;;;<;;<:::;:98877851/267568779;;::;<<<<<======>===<<;;:9766808XkdX\\U?A@@@???>?>>>>>>>???>==========<:::;?@?=<@BBB@@BBBA@@ABBBAAAAAACCBBBC@>:746GVRRRQRSQQRSTUWO@<=9AA<=>=<=><<==;<>A?><><:;:9;<<==<=?@@A?@JTPD@AA?ADCCCBFC@>;;AIQUV^bWNNV^_XF8<A@?@?BA?CVkY?==9998998:;998865:<;::877766777887888888;>>===<==<<;:::::9764334444556667787899986655433223444322457988::::::::8;>75??98;;7323323345531000/...038969;:9:52210/13344466788:996WkWMFEE6174/2>GNEHH2-24:94/,+)*044:FONKLE611108HN>0)/.2541/.133322420112563001/,:NQLOPMG;2,+)(''&#+72(')/62//-/133Imt]3+B:45:8>:0,+..)')'19Q=:O^O;>=-3JKA?JUL8)-/25872-*(*/;5,.2415>>4-,376.*('*)'%)/ATK<811/-*+*-=F?65553113550043DbL(*0-/322///02227;<<9630/243462/./1247<C;,cI;@>956;4-...4:830/,*(.330.012;:,'*'*.452356/7F1/<6-/1042'=e`MD=740.,++,-.0111555.;h{[15:AN]gW?EUWUJ95;6''@PE1'***,+)'),/1+%?X4)411100ddfecaabddfe_XXZ[\\\\]\\]]\\\\\\\\\\\\ZZ[\\]__`a^[YYYXXYYYXXYY[\\\\]_bda__]Z[[^^_deeeecbba_aa_\\ZZZYYYYZZ[\\]_``bcb`[TPNNOQRRTTSQQPONOOOPOOQQPOOOOONOQRSTUVVWXZYXXXURRRSUW[^\\TOQSTTTSRPMLNNOPOOPOLJJGGFEDDINMLKKKKMPQQQSRRSSRTTJDTkkSCOYNGLNKKNNMP\\bZRYo|xi_cgfcelpwvkaYZ_[[bp}sgpzqg|yuuoljijmq{{rrwyy~q`gouwux~z`Ut}uvaX[~vtmklqia``aehkmlmqtplklkingxtrbcqyu}~hPSVVRPPV^g˫vYR]to]W]^ĝhcgknlkuxnjfbiosr_[da^ecXWZXQSVSQNNV`c[od_fjcVPQQTXWTRSRQPNKHIJKNRQZdQENNGXiqw^SgxWQ]WNXhdTNNPPMLNPPPQRRRRQMIFIJIKMNKUi_LMPOOMMJIS\\WIGJLKKIHIFDFFDBADBASWT[YUTW[`di^RMEABBELIBACCDFIOQRRSRNOMHFFHGHIIKKLLNQTTSQMJKNPQQMLHFHJIGFGGGGGHGGFHIIIJLMJHIKNHGLSTWSLIIIKKJJKJNTY_`bddb`[UTY\\VOKHIScmw~}u[JLNMNNPROMLLKKKMMMLLJGRkmYRPOPMPGManhWNOLKKMNOMMMNPQRSSTTUUUTRRRRQSSRRQOPPPQRTUUVZ`^QOQSROMJIIHJHECABCFFGHHHHHIHGEDFFFGIHGGFGGGHGGFGHFABCCDEFFFFFFFFFFFFFFFFFFGGGGFGFFEDEFFGHHGGNTTVVVVUUVVVUSRRSTUTTTUWPVwwnmXXKFFED@IZWTSMVNOimnlRSV]gTb\\WUPNKIGDCKNJJJKKKKJLPSX[[YTIEBABAAAABBA@BA@DILHA@BEDJ\\b^XRKHHELP775123:@GGE@@?>;;=BA??>BBDFA<>=;99;>@?===>????=;:;=@BCBB>;98:9877788887777776779<<<<;::;:::8889878:8773/076/069::9;;;:;==<<<<======<<<;::987635986Gaf``V:@@@@A???@??>>??>>??>===>=>>>>>>=;98<AA@>?BB@@ABCACCBBCCBBAABCCDEDBCCBA=;4;OVTVWYZ[XUUVVVWSI>78<<<=>=<<<<====>=@ED<===<::<=<<=??@@ABA@ENOEABA>AECCCCCA?>=;<@JOOYbcOCKX[^S=9==>@?AB?<CXdTA>;7779::;:98899:<<=;:888767887887778887:<;;==;;<;;::988865542444345566788889999866666433234444323565678;;:::::8:=54=>97<>9543222344431///..01/-3898:<;8311///.---./035789:;4?cdU\\]XQ@245.6MS@<B5-1794-**--+/8==BMSPI=886309FH<4<6/34-+..--.-,031+.67552001/+:LQQQOK@7.*('&%&'%&-31()-20///0127Rvrsn;653548>91.*/51+*/>;23J\\Q2-CG,2OP6/BYE1-,(&*351,+++.1/-*+,).51,*).47887542.(+9MUPQPC73-***&1B8\"'333237;7.(,29UR)$,+,,,./.,,-,.159<7111//04682../014:AE?3?jR=@=835:513531443/,+),231/.///87)),)*06637:70AC/1:2,.0152*7GBB>231/.-*+-../0244/295=`mAOjF(33<OW^Z>Fhn_C2=JF:5?E:1+(),1/&'*-.0.$2P<(../232]_bba`aabcec^ZZ\\\\]]]^_^^^^\\]\\[[\\\\]_``aa_\\[ZXYYYZYYY[]^_abdecab`\\\\[]^_cfefgfed`^bdb_ZZZYYYZ[\\\\]]^``bdefda]WTTRSTTSSRQPONNMNNNNNOOPQPOPPPPRRSSTTTUVUUVUTRQPQQQSUVSTZ[XXXVUURONOPPQRSRPOMIGGGHFFJMNMMLLMOPOMORRUUTTWVMK_wsVITVKFJKJMONMVb^S\\yk\\[`_\\]k{xuzyufUU]^`qwtnihyvx{tpnllmnv|upjtohv}wvvuyvS\\abqhXWizyskour`\\_abccfjmtrss^ekklo{f[ibgos~|yqqrQJOOW`ioqtxƮ\\[zv_U_gcljztywhu|qic`epqlceib__in`WYURTUROMOS[c^gy^^miPKOSVWXVSRRSRQNJIKLLOSSY_RLPIKiwjqfUNRi{}mkgQShgSLPRQQONMNNOQRSRQNJGFJLJKNJYoZCINNMNMLKKMPOKJMMMMLLQKDFEBA@D>Ge\\UQORVX\\_a[URPOKFBDJJCBBBEIJORRRRSRSPMJHHGGHHJJKLMNQTTSQOKNPSSPNLJJJFDFFFGGGHHHGGHHHIOQJIGHMEAJNQOLJHJIIJKKKMS[]ac``[\\^\\ZY\\WOLJIIShsty}zn[KINOPNMOPNLNNLKMMMLLNKG[pbPPQLQGGM_phVQSQLJKMNNONONOQRTTUVVWVTRQQRSSTSRRPPQPPPRTUUX^gcVSSROMJIIIHHGDCGGGIIHHIHHHHHEDEFFGGGFGGGGGGFGHHKIEEGGGGHGGGGGFFFFFFFFFEFEGGGIHHFFEDEFFGGIIIOTTUTTTSSTUTTSRRRSUUPLLIFHWjtjaIZJHHHF?K[XTTPQJZupqkflpqT?CVTXUQMKGEHMKGDIKKKKLPWYZ\\YUNGID@A@AAAAA@>=A@>EMPMLG?@We_]_^XUUQPH>:=:9<DNIEGADA>=<<>?=<<;;=B@::<?>;<>@?=>>>?ABA?=<;:;>AA?=;;98898888887777787789:<<<<:9::::88788878:86630474/38:;;99:::;<<;;:;<=<<;;;;9878888647:935Kbij\\=CCBA@A@???>=>>>=>>>==<=>>>>>>==<<;;?BCBCBA??@@BCCDDCEECBBAABCCCCCBBBCCA=6AVVVWY\\^\\XVWWWVVWVJ=:<>;<==;<<<<=>=>>>@BB;;>=::<=;<=>?ABABDD@FNJBBA=AECCDED?>===;@IOSR[`SEAINXZI;;=>??A@AB=<TeP?>777:<;::9998:=>=<9997876677678777788789:;==;9::8888777655433443456678888999997666665433333433324445569;;:9899;=64:<98:;87632212344221////033/18:99:83////0/.-,+,-/48:999:50Usd^b]^ZA78/<ND9641.4:720/03/)4CKI@DRUG87;960.298;C<488-+42..10156409GC::964:7/;U[[WND70-*)'&'+023027,&)//.0222/7cpbD,484,4:943AQB=50=CDD/>C2#/B;+9OE,%8YD..-($(-.,*,02.04+$(')-0.-/../..//-.1,)4CKIHHFC?:6.*)')20(*132223333-+.0>J3&)*****+++**),,+-01////001341/./037BFGF@39GHCA8125555652274,)*.9??=95//-,1/341./3358767A:+/3/(+0231./-/75-..-,---/..-/275-.:7.13,07.(*(0>=BI8Jovc@126:84234;:.'/7.&)*+,-42&=B)&)+.35YZ\\^^_``abba_]]]^^^__aa``_^^]\\\\]^^_abbdda^ZYZZYZZZ\\]^`cehhhhfdb_]]\\^_aeghijjga_ceea\\[YYZ[[\\\\]^___`adeeeggb\\XUTUUTSSQPPNLLMONOQQQSTSRRSRRRRQRRQQRSTTTTRQQPONOPMKNSY__^^\\ZZXWSNOSSTVUTTRPMHGHHHIMPQQPNMNNNNMNOQVXWW\\XNWl{v^RXUIHJJIIJJPY^^ktXT^b^\\\\j~|pqtiWYmr_b|stmhqliwwv~}wpirtqsqqqpquvuzo}}z{xu_URRpeX_]]ltir~rb`aaabbcgkqon}d\\`lkmgY[cdgnw}z{{teosUVahqz}v_zětn\\`iZe`wh{tkedltsmddjic]cst_TVTTUVTPNMP\\fa_k^eeXMPTWYXXUSTTTQONLLMNNNOTXWQNQEZn]ZVOII]sp]S[hZILQRQPPOOOPOOOOMLIFGHJKIKKJX\\PLLNMNONLOTWXWSNLLOPOSXPNRPNLKJJT[[YWVUWWWTSPPRRRRSTOHGFDCCEJLQVUROOQSSSOKIHGGGIIKKJKNTUTV\\TNORRRRNMLFCEGHHGGGFGHHGGGGARjbWYYK^haYPNKIIJJILUcf_^bfhc[^dda]Z\\XOIHMJJVeouyweTLJMNNPNMNNMLMMMMLLKLLKIUjdQJLPZXAB`maSRSRPMKKKMNONNPOQSTTUUXXVSRQQRTTTSSSQPQQOOPRTTX\\dli]QPQMKIIHHIIHGIHHIIIHIIHIIJJHEFFGGFHHHHGGGHHJKLJLJIIIIHHGGGGFFFFFFFFEEEEFFFHJJGFEDEFHGHIKMQTTUTSRQRSTRSSRSTTPOXb^ZXPDRrvJGHFEAFVYSUSOIZvrrvssp]D@6ORWYSKHHGLKGHNNKJJKNRUUTVURPPRNE@?AAAAA>=AFC=@FLQUSIL`g``cb_^`a[VQPQRTVZ`\\PFACC@?>=;<<:8864;=<:<A@===>>>>>?ABBA@><;::<=?>=;;9899888887777878999:<<<<<:9::998888887777752395/4:<<<98889;<;:::9:<=;;:::96667778:9;;843=Ufn_7:;<=>@??>>===========<>??>>>>===<<>AABCDA=;=?ABBCDDDFFB@@@@BCCBBABBBAACA=KZWVWY\\^]YWWXXXVZ_[L>:;<<==;:<<;<@=>>><>E@;==;9;=;;<>A@@ACEDACKJDB?;?CDCCEC>==??8MTFUWUZVF;=@HTRC<?>=>?>???:>PSB6789;=<::9998:;;:999898655665766666689878;?@<8777666775655434433467877889::99976666665433233233333553579:::9878<;56::::9996310122332231///03425:<<;70,,,,/1000.-,-0579:97;6$:nu^dmfb^PC9=B=>80/287233335.);SRE@=COK?>=82,**-1796222--464347994./<IC9::98=9-2QcbYL@64210,*+.1687/13'$,/1586401alD[2&.54*-59<DmW>@;;4/20.,((/3+)=G5'%.MB//.((*)''(,14332-((,045566542../.*()**=YWIA:7B?:73-('*--/4863210.295-*+.65**,+)*)))**+-,+((),-/101011/////04=GIIHA33DHEA7..245544499-&%*28:====:4,)1;=<6/,14210.-/,''++'(042/./01/++++++-//-.//9A@:/-10.-+,(.<<0++.,0/)HvfM@.'&'&&'-=C4'2<*%*)'))07+18*&('+..XY[\\]^_``aaa``___``abbbaa`^^^]]^^_``abccc`\\[[[[ZZ\\]]^beikjhijhea]]\\[\\\\]abcded`_abca^\\ZY[[\\]^^`a``abbcb`^__]YVUUVUTUSQQPMLNOOQQQRSSRRSSRRSRQRRQQQRSSSTSSRRSRPOOMKOYabaa_^\\\\\\XNMQRSUUUWWXVQKGGHIMRTTSPNONOONONLPVYYZ][X\\eoqf_[QNMJHGHHJQYewzbUZaa^]]amwvsoc`qwk]mzgdieegmoj}knZbhbXOZtxrvtqoooqwzz~yynn|gUU\\qeY[[Ygxsiq|wibaaabbdfhcbdzscdkh^`abckv{{}pmmMv}}YVeϼ`]kaPguoegw|icimlfa]g||dUUSTWVSPNLS`caWadcTNOSWYZYXVUWXTQONNOOPPPOQTRNMKHfiLLTOKHEPVQW_XLMPPPPPOPRSTSQQNIHGGGHJKJJKMMKMMLMPPPPOPUYYXTQMMPPNNOJQ]]]]\\XTSSSSSSTVVQNPPPRTUW\\a_RIGFFFEGKRXYTOLNRSTSMKJGFGIIIIJJKPTTZc^ROQPRSOLKCHRPHHHGFGGHGGFEFCQqoV^pcrpTJGIOOMNOOadYbfimgeed]WWXXQKJJOIKamtzr^NLMKKKMNOMLLLLLLLLKKJLLHUljVKJJOnrW_k`UQPQQOMKLKLMNPOPPPRSTUUWXWSQQQSTTTTSSQQSRQPPQQTXZ]dkeTNQOJHHGGIIIHIIIIIIHIIHIIKQMFFGGGFHHHHGGHJJLLLKLKJJIIHGGGGGFFFFFFFFEEEEEEEEHIGFEEFHIHHKPMMRTTSSRQRRRRTTTVTMIZȺRBDCDBCRYSUSOKPl|qntpiF>FAIOUZWNGEINJGTZPKJJMPRTTRONNPPQND??AABA@>?DGC>>>?DIMPW_babcb^aglf]]\\ZXYZZX]^KABCBA?;9;;;97768;<;=@@>=>????>>@@A@==;;:;<;>>=::8798788887788878::9:<<;;;:999998::999777773156208=>=;9898:<=;:989;==;:::::8789:<>@AA=7457DZj]7567789;;<<==<<=<====>==>?>>>>==<<<=>==>?<9:;=ADDCCDDDDB@@AA@BBBABBBAACD?EV]YXY[`cb^YXZZZZ\\adXC:=<==<:::;<<?==>><<@E?<>=;<=;;;<A>=ACDDCBDDD@=:<ACDB><<=>@A7G]HDWXZXF8:::AKIC@=;;;<:;>=97CD49;;<<;:9999887547::9986544456676666898779?@;6555655554667654333555766889998887767666654322223323444545767;<967;<737<<;;<;6676897511342////1225;9696/+,--/2200/.,,0678898992<evb^ptjic[R>7@D>54674244566..APE9>72AHCD@5('+-054341**,-/01348=<4-2=B<54449@7,,@`hYH=8878762-+*+-1-,61%&+/7?=;4,QO0:0*'/2.012Nqi\\C5:90**-63-,/-)$'9>/&%1@>310+))))++,04872.,*,4::9::985/,.0++$&)MjaRNGB?=94-+**+++/6:<9633100/,-/.-.../.-,*(()*,,-,+.20269863////011/6CJJIC512:B>70-,0332345;5%$),.,)+.27=504:>@>6-164.**)('(&$'-34684225<:.&&)*)*,-.0114=DD@920,+*'$-@MK<344134-6lVARF1'%&+)(.23*17(%,,)*)*1560)('')('XY[]]^``aabbbaa``aabbbcb`__^^]]]^^_``bccca^]]\\[[Z[\\]^aehihdeiigda^[YYYYYYYZZ[\\]]]^_`^\\\\\\\\\\^`aabbccbbba^[VSTUTTTUVUUUTRPOMNOPQQQQRRRRRSRSTTSRSSSSTTTTSTUUWZ\\ZWSQNOY_abba_]\\[ZUPMNQRRUXZZ[ZUPKFFJPTVURPOOPPPQPLHLUYX\\ba^ZY`geZTVSJFGGGILP[mm]]c`__^^\\]grtuu|qWQ\\rnZ_ebbffghovqZRTXUL\\z{wzummmpsuv}~~yyyvdZjzfUV\\lc[\\\\]anpjmrpgbaaaaaacebbaksty``llgcbcr}{nQeyy~t_cdppVceZYqd}hdszh^lrl`bb^v|gYVRV[UQQONVa`aTv}a^UOQUWXXZXVWWZYTPOPPPQQRROKOQOPKMloQFHKKMNTcbW\\\\IHMNPQPPPPRUWVUUQHDGGGHJKJKLLLMMMLMQTTSRPRTSRRQPPONLKKGHQVXYZXWNJJONNPRTOMPRQSUWXZ\\]ZQJIKHDBDPVSPOMOQRSSPNKHFGHHIIIJJKRTX^^UPQPOPPLKKRWRFDEFFFGHGFEECGOhhOC|o_NO^\\NOQQOIKKU_dhijjg^UUVUTOLLGER[gw|v^JGJLKJKMMNNMLLLLLKJJJKMKOkoXJIHJQ]gucNPSQNNNNLLKLMNPQPQQRSTUVXXURQQRSTTTSSSRSSSQPQONRUUWYah\\NPOIHGGGHGGHIIIIIIIIIJIIKNMJJIIIHHHHHHHIKLLKJJJJIIIIGGGGGGGGGFFFFFDFEEDDCCCEEEEGHHIJJPRGDPXWUSQQRRRSV[ZSG8SǦPBBCDBAPXUWUPJIWromwlHCGHHFMSUYSC>IOHGZ[LIILORUUTQHHCOVPJ><=?ABAA@@CD@>=<:;8;M_b`aacdadmxn[[]\\ZZ\\ZVXf_FACEE@89<:;98889;<;=??=<>?????==<>=;;<;:=<<><;::899977888897899:;:;;;;;;;9899;;:;;;;:99886434336;>>=<::99:==;:98:=>=;99:::8:<>ADDDC@;6477;Nf^7666655568;<;<<;<<<<==<==>>>>>=<<;;<;78:;9899<ADDBDDCCCA@@BBBBBBBBCCACEEBFV`][]_cffa\\[[\\]^^`e_H<=====<:<;<=====><;;AD=>======<;=?@@AACCA@BA:97;?@E@87;=>>?99US?MW[YF99978?CB@=:89::;::84;@<>@@<99988789874/6;;::98653333345668987768::75554555444468875324445555787779877667666664332235312445545636<=;;::;:66:<;<<;:7=JJA=6013320.///11362-0320/////0010-**067998864@RaokU]tskgfeWLC<96666445677502<:16=7377=F>.$).05:9;;82/-+(')*-17966;A@920./;@3,*.QiS:7<:9<;5.+)&%'++(291()+3>985/Ft>#)-.*3821/2KfL,)*..,/24775321.*).1-&'0;81///-,.26820772.-,+-7?=;;;;9.*+/10/($(Qod`d[I>75.%&./++,/5-;O?660'&)().32/.01221-)(*)()*+,3::;>><83111110.2@KMJD7--//3420/*,34344495'&.1.,++,--.04:6595/2992-(')*+*'%'3?EE=777;C=1*((('&''*-./06??<:83-*287=HKJC::>:7<9.Be?&MaN6,-)''&',,-,'*.1.)0627:1)('&&')XY[]^__aaacdcbbaaaccbcdb__`__^]^_^^_aabcb`^]][[ZZ[[\\]`bba_]aebdfc^[ZXYYXXWVWYZ\\[[[]___^]\\]^`bccdddcbba`^ZTPPRSSTTTUUUSRQOOOOOOOOQRRRSTSSUTSSSSTTUUUTTUVXY[^bcZQOPPU^cca`_][Z\\XQNONORUUVX[\\ZUNIHINTUVURQRQQRRPKFKSUUZ_``]UU[\\[]XLGGGHKMKN^h`^aacdededadkpto]QWcjeadegfhgilg{{~ynYNRTRd~{uwwyuw~}aZ\\agnZTUZga]ZYcnpmjigfca```aacffffghfeqxiYanjfcdw|pZIq}~~{zvnd]cx~}qdqm\\[\\[V^y~qdkoszxriipn^mmQhzi]UQW]VQSQOVb`bYt|bRPXXXYWWYVUTUVTRQPQQRSSQMMORRPQHJfxjRGIJJKPS|u_eSFLLLMRSRQQSWWVVWWTKFGGIIIIKMNMLONLMU]]XTSSRRSRRQPMKKJIKJGHKKLIMPNFKONNNNNNRUSSTUTSRTTOJLMID@BKOIEHKNOOPQPNKJHHHHIIIJILRTSUWUNNNLLLKJLNMJFACDEEFHGGFFDKS``I6jHKjmPMMLMIkjYbcgd`]WZYSPLMJFYlut}vaPIIKJIJLLMNNMMLLLLJKKKNKKgxaKGHIJPXt}TOTSQNNMMLKKKMNOPQQQRRTVVXXVRPPRRSTVUUURQRRPOONMPSRST[gbRMNLJJIIGFGHHIIIIIIIIJIIHIJJJJJJIHHIKKKKLMKJJIIIIIIIGGGGGGGGGGFFFFFFEFFDCABCDDEGHHILNQMEES\\[UQORRRSRTYSD9Ap̲KDECCBAMUVWWRLNLQes]LNcVJIMLPSXQA?IKDHSSKJKLPUYURNFKHWYJK@;;=?BCBBAAA>>=>=;6;Uffaaaaddeoq^\\^^\\[\\[YXanO>FFEA<>;999::999::<?>>=<>????>><<<<=><<==<<;:99899977889:9779::;;;;;;;;;9889;;;;;;;::988753337=?>>>=;::99=<9888;=><::8899:@FHJKIEB?:65897?X\\77677654469;::;;;:99999:;;=>==<<<;;;:99:::9::<ACBBDDCBBA@@BBBBABBCCCBCEEBDR``[\\`cffb_]]]]^]_gaG;>==>=<<==;===<<=;;<>B@>?==>>=;:;@B@?@ABAB@8489<?@A=89:;;<>=7NWEGQYYK<;;:898;=<87768999:?@>?AA@=87766799:;848;;::98755422004887665556655543443344224666433556557777669:987667766654443245332345546538=?AA=;=<:88:;;;<=3;XXD?7111100//0/0220.-,/2100/-+-131.*)/58:9750)2@JdtcShynjmifeZF52344225555448:/-:=882.9C5()22025;A><<93/+*+-0///18AFD:1/-/58+)'$DbH29@=<=7,%(()))*+()094-+/3..02?H-)..006<30-0562,*)+//598689535540*))')451+*+-344:AC6.65+)12+4@CA?===:-*01//.'$-Tf_\\SF>:4+&(394-,-04*?L1-384.)++,1444212220+)*+*)((*-48:::96788653/+5JQNH;-*-//01341-2853147991*-.-..-,,,-276.-0-08:50,))+,-+('-8=CF<4457872-,,---.0210/0488301,).8@CDFHIFC><=98;5,60\";^bN>=/+=?)%+,++.03/)4CB:5-'&(,((.XY\\]___`aaceddddededddcba`a`_^^____``a`aa`^]]\\[[[[\\\\\\^_^[YY]^\\^`_\\ZYYYYZZYXXYZ[[[[]^__^]]^_`bdeeeeeccca`_]WRRSSTTTUUUUVTQOKJKLMNPRSSTTSSUUSSSSTUUUVVVXYZ[[\\`d^XUTRRZcda`_^\\\\][WSNLLNOORTWZ\\][VQKJJLQXWTSRRSTTUNHJPPNQSX^`XR[cb\\SONNMMMKHTgg^_fjijjhgb_bfhkcW\\fdaccbgllotxvps}pcWPLa{u|tpq{bW[YXXXUScha^Zaknidcccca`aaabccegfgmlbmvjd`Z]decf|}xxZQji~hougf^V^`_j{qtreZZ]XUYrt`el^buvsrlqpewNbwj^TT]bYQRRSZ``aYh}\\MSXUVWWWY[WLJKLNOPPPQSSQKMRPMLIEEOYLDFGEFHJSuwu`FLNOONQSRRSTUUUVWXZVMIIIIJJKMMMMNNMNXaa[WVTRSTRQQMJHHJKJIFFIJFFK\\]FKMQOJJLQX[VRPNMMLMNLJLOOJECEFDDDGKKLLLMLKJIIIIIIKKJMNPTQINLKKKIHGFEFGIIGEBEEFGFHILQUX`f>_mVA_oKDLJP¥fXdih^ZW[YPMLGJ`y{||`NLJJLLIKMLMNMMMLKLKLLMNOGQ{mTMLMPNTrdNORQQONNLKKKJLMNNPQQSRTWXWWUSRRSSSUVVUUUQPQQQPONNRSQQV`gYKMNNKJIGFGGIIHHIHIJIJIIGHHJJKKJJHHLPOMKNMJIIIHHIIHHHGGGGGGFFFFFFEFEDFFEECCDDDEFGFINOKEFOX][UQQRRRSPSQE<KoХ`?IDCBBISVWYTNNLFNXPjooWKILLNRXREDIDBHMNLKKMSZZRLLDBZgSJL?:;=?CEBBBA@@?>@??>BZgdaaa_`cekum]\\___^][\\Z^iX=CD@::>;=<;<<;999;=>?>=<<??@?>?>>>?@?>>==<:988889999778::97579:<;;:;;;;<:899:::::::::98875346:?@??=<;::::;98888;<<;9::98=FOQPLHECB?;758;97BF976776655679::::9876666799;===<<;;;;<<;:::9:<=?@?ADCBBBAAABBBBCDCCCCBCCCAAN`a\\[^adc`^^_]^_]_fcL;<<=>=<===;;;;:;;<==<=B>?==>>><<9?CCAA?@CC;338;=@@><::::99<?9JUG=BRYQ@>?>;:8888776479<=?CCA@A@?=:8755568=>>>?=<::88669878988985553445776543322332122222333466555576689:;98777777766653234630155556548=BB>78>>;988:;;<<3:TTC@;3210/0000//22/-/..0/...-,-03320-/58:962..105Gf|dZsummlhgicI4353/.011235;<527<:82.9;++7:1,*,3;<::644311593-(*6CGE9111/..*)'#:O:/:GFC?6/,-,/40+,+&'03/../46204.'.57549<4,,+)(*+*)-25=HDA@=754443/+)'*/*)*+(*485=HD4*36,*14/:GGC@=>@:/.23.+)&);ZeYD30460&\"3LJ7--/0/6G;')*/5642/-/13541.---..--..,*+,-033469<=<9740-3EPMA2+-0024444219<520589:4*)*---.---1671,*+0:<620,))*--+((2=>>>92/10--,)+379=?BEHH@9039=<5,.2547@HIIIH@7<@:;8,)+&-Ka^RL;8OP1#)1763..018DD<3*(,076./Z[[]__`aabeghiiklkhgfdccdcbb`___`_`aaa``a__^^]\\\\\\[\\\\\\]]]\\[[[[ZYYZZYYYYYZZYYYYYZ[\\\\]^__^^^^`acdefgggfedc`_`_YVTTUTUUUUVVUTQLIIKLNPRSSSTTSTUTSSSSVVVXWWY\\^```bcddba`]]`aaba`_^[YZYRLLLLLMOQSUZ\\[YVPJFGPYWRRRSTUVWRJJMLKIINTRLQX\\\\VTSRQNKLIJ]kgcfgge^[\\^^]^fkha^c`]_`behkqux|~hSctzyx{n_KPmkd|h]Y\\[`[Qjqa^`hjfbaccddbdgfeddcdeebgndbpg]bbabbae}|u{wMrtxmX_d_^\\Z]^[Z`hfeniU[][fǷmpva]`[isqvympPRro\\WXhvbNSY^`_a_S`tOPVVTUVWWWWQLKKPQPPOOOPQQPNMKIKOPRQMLLMLLMLINZkuTNQQQRQOPRSSRQQRTUWXZWQNLLLKKKKMNNOOPUWYZYYVSPNNMKHFFIKKJIIJIIQVO\\bKMKMRLHLU[WXXQMKKKJLNPTYYQJECDDDDEFHHIJKKKLKJIIHHILONLKPQLLNMKJKJIHGGIIKONJGEEFFGJHX[T`jEuUHeɸ`EJQRZk^hokaYW[XQNGHfrn|eMIJIKLJHJMLJNMMMNLLLOPKHMJp`RSONPNa}[MLLLNMMMLKKKKLMMNPRRSRSVXVUTRRSSSSTVVUUTQPPQQQPONSSRORZicOMOOKJIIHGHKKIIIIJJKKKKKLKJKMOMJJKNRPNJLLJIIHHHHHGGGGGFFFFFFFFFFFFFEEFFFEEEFFGHHHHMKGEHS[]XSQQQRSTSNGAHtʕd=HCBBBGQVWYTNJIE:Lv}hNKJIKLISSGEIEDGKLLKLQ[^VMIIB?TZKNSC;9==AEBBA@@@?@AACCEVeb`abc^`gnro]]bbbba^][]]aN9?;68>ABA?>>=;:9;<??>=<;=?@?>@A@??@??>?<;:888899999:99998548:<=;:;::<<<::;;:9:;<<;;:9898547<<=>??==<:9::::;;::;==;9967=EKMLJFB@A@>:645987899766666566679:999987767899:;;;;;;;;===;<;:9:<=?>=?CCCCCCCCDDDDDDDCCBCCCCC@I^b]ZZ`b_^^______^aeX<8===<====<===<======>?@@?>=>@?=;<@DCB?@A?8238<>@@?=;999879<9BVJ24CWXG?@?@A?<<?BCBAABCCBAABA@=;>?==;8348>ABBA@>>=;768:;=?AA=:7555335577644322112211110/123458;9667889:;;8777778999764322694.04454234588731:C@:889:;9::5>LJC>953211110110/21.,--.-,-----/2676215::950/23110>m~]`|znmkffne@284/*),-06;CF</4>=95362.296,++)+373+*37322373-((7FIA4-0330/010*/<30;NND;877644650./20-/4525BD6..+(++/1156/+*)(**)(),.5GVRFA=730-+,,++++*'%+0016;;=JB/+/410024=GFB@>>@<30232/()0?[jH-0110,%#:WK2-/0//6;830+()075222000.-,*))-131242020/25358::986433108FI<//24445543314831157772,)+--..../5983/,*0>@:73-)'-20*(.9BD>840/0.*()),59<<:;COVL6,-3@ID<;@>619DJKJHD;=B=55-&+($3MSH<4232/+)4;=>8237:;;94/16:@@6/[[\\]^_`abcdgknoopnkigcbdedcba`_```aaaaa`____^^]\\\\\\\\\\\\\\\\\\\\\\[[ZYYYXXYYYZZZZZYYYZ[\\\\]^^^^_^^_`bdefhihhhgfea`^]_`ZUUUUUUUUUTUTQMLMMORSTUUUUTSSSRSSSUVVWWWY[^`_```aa`__^]ZZbgdbb_[ZZZWPKIJKJJKLMNNMPTWVRKGNSQRRSUTRUXRMLNNLJHGHJKJLQQPOOOMJNNHQdkiecdYMQX[ZWW_a`bbffefdeheflpsst[IMVrwp{lPXqmvg_bb_Uts]`hlmnnnjfeeeggcbcdcbagc_nq`]db`cccbbdkxrۗRovoxuw~j_ejic]_\\XZVT]nmlpdWU]Y^zǸqhxzfd^M^sv}~n|^Mps`[\\qiN[hd^^^[PbfKTWUUUXYWUSQQSVXWSQOPRSQOONLMRTWX[\\XXZZ\\\\YSLLN]s_LRQQOONNRTTSPOOPRTTUWVURPOMKIJKLNQSTSRRSUWWSOJHFFFDFILLJJIIKHJksPWfQSNIPOKJPRKORQPOPPNPSWZ^]ULGFECCCCDFEFIJKLMMKIIIIINSPMKJORPONLKLLLLKJIGJNPPMHGFFDISh\\IWd||qCQsWtdObcPPopflqkbWZZRMHNfmbyiMHJIJLKGGLONILNOOQPNNRQPNG[bYZWPNMJenXSPNKJKLLKKKKKLMMNPQTTSSTUURRRQRRRRTVVVUTQPPQQQRPNSSMLMSchUKNOLIIIGGJKKIIJJJJKLLMMPUSNLMLJJJMMLKKMKJIIIJIGGGFFFFFFGGFFFFFFFFFFEFFFFGGGHHHHHHJIGELW[ZTQQQRTUVSJDFkܸZ?GBBACELVWYTNKKD?]yYDJIJHLCCYGDGHHGLMMKNYcZMJMKD?A>>IQEC??>=@@@@?@AAAAACBAOccbcfhc^gw{b]]^[\\\\\\\\[\\]`mK:866=BCB@@?><:9;<??=<<<==?>>@AA???>>>=<:988989:;:9:::99::<;;=<;;;;;<;99<==<;<===;;::89857<???>===<;:9:::;<;;;=><9876;EKIFDCA???=;:62137999887776566665688999987689:99:879;<<<===<<;:9;<=>=<>BEEDCCDDDDDDDDDDCCCBBDC?EZd_YZ`a__^^```aa__f]<7=;<;=>>>>=========>=>@A@><>AA=;;=ADC@@@=6139=@@@?=:88888888?SK527KXL=9<@CCADILMONKJGEA????>::>CCCC=546<ABBAA@AA>;;::;=>>><8656655656664433211221111/.011248<=@BA@?>?>;877567899865433258741255202432247;FJ?789::99;:7=GJC725532221111..242/---,,,---..3886448;;84//110./-<mw^myutngijR9670**-/035772,1=;2..,,/0/+)+,)+22*&-41.-.../2.)8IJ;,(,/1367:=70653<QM9//4225500311692/8:64@F7-..)'')-/00***)*++)()+)(8MI6/0.,*'&%%&,54-.---6@FJA8F@/-/241.17>CDA?>=??70,-1.&+19Yc2$.000-%%CS;/11////1631.05887<=511+')))()*.1137765349<9<;854321242/07=844555543122,,22223575323/-./01357;<:60$&=G?82,((3:4*/?HF@;2-5;<71,)/34;9315=IK>16819MUQOROG=;CHHGFDHKD7.//)).*'13.*)((*276769HMB:8755669<<==<95[[\\]^^_`abcfjlmnnmjhfcbcccba`___``aaaa``_____^^^]\\\\\\\\\\\\\\\\]\\[ZZZYYYYZZZZ[[Z[[ZZZ[]]]^^___^`aceehjkjihhffd^_c`_a^YXXWWVUUTTTRPQRSSTTUVVWVUTTSQRSSSSSTVWYXWWVVVVUSSRSSUUU^ihdd`\\[[YYVPKJKKKKJLMKMUZ\\`_XLDHNSTUWXXXZ[XTQNNPONMLLHEIPSPLMNIQSHJVdkidaVPV[[YWZ\\^]^aktrqommkikovzxeZTRjvuzyu}tf{l[b`_}s^cmstsqoidcccc`]^addbbgfclrg`cc`aabbbb_hoZ_yjgdgjf[cnpmcY[\\YWXdtqkhjcevV\\YWlʹ{zug[gqm`W_lv~wpQnxe`aqwi^jng_[WXO[hWTXY[XWXYVRRSUWXVSQPPRTRQQTTSUZYWXXZ\\]^^`]UNKKJLNLOPNOQQNPTUVSPQRQQRRSSTUUTPOLJJJLNRUSRSTRRSPLIGFFEEFIMMKJJGFIHK]k]W`UQRRWUOIJNGGIKMOTWVUUVWXWSOKGDDCCDDEEFGJLMMMLLLMNNOPPNNLOQPNOONMMLLLLKJJLLLMIGGEDI`aL>LwPINvۗxb@Uo`UT\\gprl`XZTIBKglUgtRIKHIKKIFGMNNJNPPPSRMNQTVJP~[[^]ZSONNqbV^ZSPNMMMLLKKKKLLLOQTTUVWWUSSTRQRRSUVVVVUQPPPPPRPNMOKLJJVd\\MLPNIGGFHJKJIIJJKKKLLMLNVjmf]TNMQSQNGFJIGGHJMKGFGFFFGGGGGGFFFFFFEFFFFFFFGGGHHJJHHHHFELXZVTSSRSPPQMHAUա|RAGFDBCBHSVWTMKKFE^eOIJKKNK4DQWJKIIILMNKR`bPFILMF?@>?D@CHIHGCA@@A@ABCBABB@@Odfcchfcbixa\\\\^[[[[[\\]]`ko@466;=>?@A?><:;;<>>==<<==@??@AAA?>??=::;:8898:<=<;<<;;;>@====<<;;;;;;;;<==>==>>;;;<:8777:@AAA><<;9:;;::::;;;;>>;869BLOKFDBAA@?<;=;743578998877765665554568899876;;9998647:<;<===<<:99;=??<<<BEFDCBBBBDDDDDEEDDCBBBCADXdb_`cggb__a`bccbbk_;6=;;;<>>@????===<<???????>==AA?=;;>CCB?=95138<>?>=;988888998@HC:79>MN?:@BC@?@CCDJKJGC@@AB===<;?DDEEA;648>BAA@@AA??><=>=<<<:6568877644545555323422221/01122348=FKIHHGDA=:876668888555333369:7452376569:<ADEE;6999999:;76AJB3/4632320/-,/245310..-,,--./.387556:;971-.010/14*>pp]o~xxumdbQ82/-/...+(&&),085*()))**)'')**,.+-6;6/-,.0/075-6FG:+()*+.126=;47949JA-*-0-,/0,,/1//11,/2844<;1//+(-1540/,++++---+*,*$'6;2)(((%$&'*+.<?3230*-:PXG49;.-3220,.5:;?@@><<:5-)()($+32QO)+--.4/$+MJ01530,,-01-)'*7A819:/-/+++*+*+--,-07=:545<CC@:58;7311320.//15534344//2/+.1320.1566761-.-+/799;>?8,\"*@C82/,(*6<3*9QVJ90+/;GHB6-18748<:99<A<04KWM?CV^[YWPEAEB4=GFLO?0--,+,5850+++*+**3AD>:>KTSI<22559AA<;9689[\\]^^^^__`cdeefgghgeecbaaa`a`__````abaa```___`_^^^]\\\\\\\\]^^]]\\\\[[[[[ZZZ[\\\\[\\\\[Z[\\\\]^^____``cegijmonkjhgecca_a]]c_Z\\ZYYYYXVTQRUWWWVUVVWWWVUUTRQSSRRQRTWYVRPOOPQPPOOPQRSRVcedhb\\\\[ZZZYTOLLLMMMR]eggcbed^QIIMSTTXZ[[\\]\\XRLILNMLOPJGN\\[PTTLSUKIKUdkgb^]^^\\Z\\_```bdgpvwvrorstx|zmmvleox~wkei{rh\\^cq^gqrpokfa``^^^^`aceddcgiffhfdcc`bbbba`d_a|[ogldfijdaikjkd[\\]XVduuoifjmcufXYUkvq[Xau|h^^bmz{X{kddgfguvigg[UTORWZ^]^b`]ZVSQRTWVTQQQQPNJINUZ[ZYWUTVUX\\[YYWSMKLLJHFIMNNQTVUSUWWVVXYTPQQSUWWYZXWVQOMLNUXTRSSROLJIEEGIGFHKMLHGFCGJJGFJMU\\PMU[]ZRHEKIIJJKKNRWWURQQPNNLGDEEEFEDEFHJLNMLLNOQRSRPNNMMNQPQQNNNMLLLLMMLLKHHJIHHJLQD=@XˬLBQR˨˜RA?]vgX]huul_WPHFQbhQUnLEMLHIHIECGKLLQXUQQQQLLOUQWyeKR]\\URNLOzZW_[WVUSPONLMLJJJKKPTUVVXZYWVUTSQQRSUVUVVUSPPPPPOONMPULHFJZaTKONIGFGHIKHIIJJKMLLLLJHGWamvsgaccee`XXVSTRRRLGEDDDEGGFGGFFFFFFFFGGHGFGHGGGGIJKIHGGFFMVWTTSSTRJFGIC=oŕMCEEDCCBFMSWRKJKHAU{lU]RILLPF<QI]QMKIILLLJYbVFDJJFC?>@?B@CGJKKMHFGFBA@ABABBA@Pddccca_hqz~d^\\^][]_^^__`]sX35699;;=??>=<<==>>===;<=@??@AAA@??=<:9;:989:<====>>==<=>===<<<;;<<<<<;<>=>????=;==9678;?AAAA<::99;;;:::9;<<<>>;87DOTPIECBA@?>:9@<8<9658:9888876666655346789:88:?<588643379:;;<=<;;:9<?AA=;;AEFDCBBABAABBBCCCCABBBDBBR`b`cfkkfcbabccddfjS65;===>=>@ACA?>><;=???????>==@AA@<:;?BB<886458;<<::999889::;:<?<8877AKFCJJC<9788;?AA@@ADNQB9<>>@BBDEDA>76;???@AA@??>>?@?>><9768:;:865555677765664444433444679;<?CDGLKFD@<977678887665323358<<964:>;;?A?:9999878999989:748?>75664332/,.7==:400/.--,-../0/486456:<96/,,0221141(BibZwvvztkjiQ2-20.,+*()+--.463.+--++)('&')*'*<D9/-+-041/3624=?:31-*)))),2424535>5-3::5-('*..,++*+)'(0877;60110145200.,,++153/-..,+.<E?6.)&,//7:7??4--.,('?UJ4./,,010.,-4517?@?<6.,))('&(,37O7&.-,,42$3L?-252.,-..--+)#1F>.02)'),274.+,01/./5;:668>EFB;8<>:43322131-.0001353./10/12330..022340,))+2:=;:;8/(.:>710.,(->=-+DYXQA./9?HJD8.GO@<358:9:<8/5IX`P8BTZZWOJG>/$/AC<<5.,**,-28:656:==2*,1<BAABCLRE2/45=IG>98788\\\\]^^^^^^_aa```aabdccca`````____``abbcb``````a``__^]\\\\\\^_^___^^]\\[[ZZZ[\\\\\\\\\\\\\\\\\\]]]^^____`cehkmprrqmkhechdZ_`ZY^]ZZZZ\\[Z[ZVUVXWWWVWWWWVUUUTRRRSRQQRTWYYUQONPQQQQQRSSTVY[Y]c^XZ\\[ZZ\\\\XSNKLOMPel]Z`dfhfb\\PHIJKNPPRSUY^^TGDGKNQSOFGQ\\_bZLVXMLIJYgkhdcb_\\\\_abdeggefpxwrpuzwrynas}tosv}}iXXdfbvdV^k_swolnkf`___^]aeddeecdggeddccedbbbccba_\\ݫ]wm^lmphffcjkjnf]^[T_tvromkjkkb|[SYo~vsz}^Xabkviaa[b{ksgfkqs|yqtm[RQW^bca^_`_]YURSTUWVSPOOPNGDLRUWYZXUSQOOTXSPNLKLLLKJJIJMPRTUWXWY\\]`cfdZOPPSVWVY\\]XVSRQMMTYVRQQPMJIGFFHKIHIKLJGDHUZSLHGD@MWOHVW[[TIFHGGGIKKIGLRRQQPNLLJFEFFFFEDEFFJOPLKMOQTTUUSQOONNOOPPLLLLLLLLMMLJIIIIJJKNOJHEYxŠǆJH]ټÅKE>@itg]e{xg]VJCUhcSHqnMDKKLKIGGGFGIIKNbZRQOLJJJINnnXTYY[QHMJL}xSTYYYYZZYWTQMMLLKJJOSUUVY[ZXXWUTSRSTUUUVVVTRQQQQNLMUYUKHFFQ`ZLLLIGFGHIIGHIIIJLLJJIHGFFDFQ_jkgdaeiouqkmg_WMJECEGGHGEFGGFFFGFGFGHHGGIHIJIGIJKKHHGGFMUUTSRTRRWXNKDIyҵ]IFDCCCCCDIQUOKJKICLljmpPHLKIHXJPNQKIGGLKJP_UCADFECA?>?>@BCDGIILLKKKGC@@AABBC@Kcbba_^]hpz{h`\\^^[_eb_``a^aj7577999;=>>==<==>>===<<=>>>>???@A>;:99:99:9:<====>>==<<<<<<<;;;<>><<<;<>>?@@?=====879<@AAAA><9889;;;;:99<====<99@LMLJGECBA?<;89B=6::538;:778886666655446799;:;==957875434689:<><;<:;<?BC?=:?DCB@@@????@????>>@@@AAA?CTc_bceffdccccdddh^A5359>@>=>@BEE?>><<=>??>>?>>==?BBB?;9=@=64699689546788889:::;::;:89:;@GIHKHA;99;:=@@@DKNPVTA7:<;<=?ACCED?:;=>@ABA@@@@?>???=:9:::>?<9778878999889778788776679<BD@<::>GIHHC<777668877766313469;;::<=<>?A@:5344256778988898777;==:8764435AOQME8/-......./0/./67446:;74/,+.212202+'HdW[rtpttpmoiD170.--./20.,+272.01011-)'''((&.@<*'()+,.-,-/2457763,**,...-,,+-01757;?=80'#(00+*,++*)))2<;8622331-++..,-.+-7<60-.0//1=QZL9)8F>0<CA?7/+*+,+*/?B4,((,/20+)0320156792-*)++*(/10?M6&--*-33*4@3,32/./..-(7NJ*9TM524,&&,39731134443015879?A>=;>=6003433345641011232//2101234431/--/0-*+/6:>=:74-).688661,*&1LI0.HUMLI=<A>DHA?<H^`U?,+27:;::83/8;1,6DNONQJ7)$(184.-/-,./+)+--,.4;BC>7*)<IE=0/EI4/79@LL@76743\\\\\\]^__`__`_^]]_`abbaa```````____`bcddba``aaaa``___^]\\\\^``aaaaa`_^\\[ZZ[[[\\\\\\\\\\\\]]]^^^^^__`cehnpqqpmifdb`]cfYW]YYZWYZZZ[\\^a_[WUVWWVVWWVVUVUTRSRRQQRSTUYZXTPPQQQQQRRTTU]d`YXYURUXYYZ[\\]]YQKLNOXZNN\\fec``fcUKHHIJIHOW[afbXNIKNPOIJIANfmXJWYKGIIN^lkeca`^^acdfjkmnlpuuttu}w][cfrwtpqtxydcd\\`ac~zZ`jdzxtphfca`___addbceecefdba`affa^bbccca]kuknehmxuicdjghmf__[]mvpqpnkkiiif{rSZu{{vbUX]^dfcdb]dzÇthqxw{lXS`ljfeb]]_[UUUUUTUVVSPPOKIHMUVTTTUSTTPLMSRMKIIKJIHIJJKJMSVUWX[]]bjpttiZPOOQSVX[`_TOSRRONUYWSPNLKKJHGHJLLJKKIEGISdfZOKNLLNMKHNLNTOJGFKJIHJKJGFIMPQOMMLJGFFFFFDDDDCKSPLKMORTSRRRSSSRPOOMKKKLLKLLLKLKIIIIIIIJLMPNHiҡV@RuƊqC>A;GfmRWytb\\UPV^[SIkjLIKOLJJHHIKMKIIIIfZQQNKIIFCasPVTUYa`SRJEeIKNQTUX]a`][TQQOKJJLQSTVY[[YXXWUSRSTUUVVVVUTRRQPMIIOSNKJIIMZ^NHJIGHIHHIGGHHHIJKIJIJJKMNMJJMS]jmd]^b`][[YSNLHBBFIHFFFGGGGGGGGHHHGGHKJJPPNLLKKHHGGFLTVSTTTLHT`ZPHX|ŦФQPGDDDDDCDGNTPKKIIGEZwoKIMLNOWHLNMHHHMJIM\\W?=@?BFB@@>>?@ABBEHGFHJJLLJIHECCDE@Jfdca^]]biu|rgb]_^]]a`__`abZi:798989:;<<==<=====<<<;;<;<=>>@@A=;988899:;;====>>>>=<=<<<;;;;<>>>=;<=<=@A@@?>=;;;:9:=?A@=>;;989;;;;:::9;<<=>;9=GJHEDEDBA?=:968B=7:961489888886666665445779;:;:76677765444457;>=<<<<;=BDA>:=@@?>>>>>>>>=>>==>>>>>>>?=@Ze`a`afddcbbddegV92013:B><=>@CDA??=<<>>>>>>==>=ABBEB><=;63369::9522467888::99:9789:;=ACDEFA=:<=@@?ADA@ELNNNI;67756:<?AADFC@?>?AAB@?>????==;:<>=:;?=::9899:;;;;:889:8788887667:BGC=899=CING?:756567777764322578899<=<=>>;7467534666789:99989:=>?<:::988?KPRWVJ7,/1231/.///.+0522697520/,+045301/'.H^Y]stqqpnmlY?9777753351+*173474444/)('''))-50*)('''()+,+-02431.-+,3874.***-104:@;542.++,.0/0/.-,,+**3<;86300/+),,----.:>3*./1434;@J\\J,*HJ3+7:?=0,++*+-0/,1494.3::0/331/-,+)%',-*(*+.0/,0BF.&***-110250/1/.--,--1N`J.5F?/,1.),485876543333.+-137??3*.55/)),.1455676443223321330012356644563./6;=??=851.15416=:.))$2SR76NP<;AA??<AE;9C@HVebD=?9536:90'\"(42&.EORUM@5/+',41-2458761(&((')-5?EB2%5MQD.#/:40<A=FL?42320\\]]^^^`bcaa`^^^^__aaaa```````aaaabdffedbbaaaaaa``_^^\\\\^`bccbbbba`_]\\[Z[[\\\\\\\\\\[]]^__^^^^__`bdfikjhea__`_YW]_]Y[^\\[]]]]]_``beeaYVWVVVWVUVVVVUSSSSTTTUTUVWVTRPPPQQQRSTUV^ghc`ZRQUZZ]bb_]_a^VMLMMLLQ[`]Z_dghc\\UOKMMOZdddfffbWMHNXNefFIYneSRUMGIKJSemhdccb__bhmljlptuvvyxs{{^Rfpku~vor~uch`Q\\c\\dvXff]hovm_accaaacfeecdeedddfijfbbchiecca\\X_n}pemigoldggekpf^]^ksomqrommlkkig|}_Wj|}cWZ]X[dcbd``i~skuztuaR\\kprke`\\]\\ZURUXVTTVWSQQNKLSYXVQQRPPTUOLMONLMLKMNJHIIJLKNTWWZ\\[_emxt`QPQSVZ_bdlfSNRRSPPVZVRNKJJKLIHKLKKJIHGHNU\\cf_QNPPPPNIIIHHLLNMGPWUNJIJJIGFKONKMMKGFFFFFEDECBLUQKKMPQOONNOPPPONNMKIIKKKJKLKKKJIIIIIIIIJLMBOlXDLSwnbG@A@:J`GGnsf]V[eZOMcwFINKRSIIJJKPSOLJHIbXPPNJHIGJ^NORKW^]\\`\\OTTGKIJMQSVY\\]^\\WVSLIHJORTWZ[[YYWWUSQSUUVWXWUUTRQPNNJGGJLKKKKJRaXHHHIJJIFFFFIJIHKJKKKJKLLLLOPMKPTk{ma\\YVRQNNMOKCBCDDEFGHGHHFFFFHIHGGIKKPTTSPJFFFFFGNUTTXVMEBCHOKFhȼϔTVJBEEEDCEFLTRKIIHKBGkv`IIOQRSRGJOF@CR]JKYYF<?@;@JD@A?>???AABDEFFEGIKNNNJGFFD?Jhihd_^__epqfdbdc_][\\\\___``_j<8989899:;<=>=>>>=<===;;;9:=>>@??=;98768::;;====>>>>=====::;;;<====<==>?BCB@@>;:9::9;;=A@:;;9989;;;;:::::;;<=<<BGFCACEDA>=;997:C<8;961479888987666666555788:996676656765433359==<;<<;=@DA?;;>>=<====>>=<===========><6MibbadhedcccddegY;02346<=<<<>ACBBDA=<<>>>====>?ABCDDA?=9755679=72345788899:;;:8557<>@BBA@<899<@CA@AB@??ADFFC=<<857:;<=>@ABBA??@@=:977:@A=988<?:9;;:::8899:;=><:878977888876668@EB=9877;DMLLG955678987765420246768979=<8458766655666889:::98<??>=>>==:67::ALWWF4/13321/.//-+-0135765323347:8530.,.*Jlenzytqpnk]D8::;94/3=8,(-49<72210-*('())(-2110,*((')**++-153///./26640,,/1105=@7,)**,11,+03132/-,*(*2:<:95/--01,*0.(+45*'+16<?@AA>J?),>7()4./2,+++*),/0(&4?>65=<3=G<1+*))'##&(&$!\").+3RV?,').0///137751---++,0ESC.*)+(&*.401=A0365420/-,,,.--2?B2((**+*((*-157302211158887640./2579;=@B@838?@??@=979;=:3/6>6()*\"/VYCGRE23975:9<@42=A<1Jf\\WVE3./342/+/?D32IVUQJB:63,*///69<?@@@<6-)-26759?=0/DRB0-+-00=D<AI?4/--/]]^^__`dfdccb`_^___``ba`````aabcddfhggfdcccbbcbaa`_^\\]_bddddcbba`_]\\[ZZZ[[[[\\\\\\^____````__`bca``a`_aeih`]Z[`_\\]^^`cbceefeegkkf_XVVVVVVVVUVUTSTVWXXWWVVWWUTQOOPOPRSTVVZ_``b\\SRY`adlmga_`cc[QLJJKOVXTS\\hiddca\\UOOZeggfffefeYONW[ZTO^si[WPLILLKYiiefgd^\\`ktqjdgqvux{zv}{mp~|mo~~wwudWPMMWabdufSnhahjmc^eeecdeggfeeedceedgqzviaixxfdg^giv{}~th}h^dijknouueZdttrwvtpnmmmntmishZ[jx__VX]beca`iwpkr}|q^WcmlgcXVZ[[[^YWXWUSUVTQOOTX\\[WTOQRKLUWNKMLNQOMNPURJHHJKLOTVW\\adky}zhUOPVX\\aeceohQNRRQPSZXRNKKKKKKIIJKKGDEIXhf\\Z_c`TLPQPONLKLJJIKOUQNTYTQOLHIHDFLMJLMLHFFEFFFDDCBKTPKKNPOKIKLLLKJJJKJIHIJJKKKKJIIIIIIHHHHHIJFF[xXHXKQXCDCC@BODHjth_]\\XQHZvLLKICAJKHKIKPQQOJILYVNPNLJJJIMFLSOQTSQUWS{NKMLKKMPQSTVY[WWUONMORSUWYXYYXWVTSSSUUVWXWUTTRPPPPLJNNLKKKMJL\\bQGHIJIIFEEHIJJJKKKKLLLLKJHILKKPML\\w|l[RQNLMLW_YQFBBDFHHGHHGFEDGLKKKHHJNQSVSLGEFGFIPSQRTOCACCACCH}}USNDEDDDEEFLSRJIIFJG?YoXHLPPNVQDGC8<I_UEQ]E@A>?>?CD@??>>==>=>@CHEBDGHIIHJJHDCALajiea`aahlg```dc_]]_^^_aa^ij5989899999;=>=>>><====<;;:;==<<=>><8678:<;;;;=====>======;;;<;;;<<<<<<>@ACB@>:88::9:::<>=:;:999:;:::::::::;<>@CEGEAABBA>=<;9:7=D=9;96246988898756666655578898855766467654432379::;;<=@BCB?==>>==>>>>>>>=<====<<<<<<<=9Badafkkgdbcccccg\\;/44557;<<=>?ABEHB<;<<<===<=>?ABCCDC@99;868889843457888999::86215=@?@@@=66<>?@@@@@?@@<<DJJIGGHEBA?<<;=>?@>:;>??:65447=@<9769:79::;:98999:<=<;:88887888887778:?@>:87679;AJOLB5365787766643123455683/5941477666655667889::988;@@=?@>=;50//14<GI=1///10/./.-,./023556544<@A>8631//:/,_xhq|usrjU=35651..4B<-'+27:511/-,*(())++.352/./0/..-++,-28:863/-01//--0471.2;:4+('(*-.,)+-3894/-*)*)-6:940/000-*,4.(())().5<BCC?8661/-+'*;5())*()*+*+.*#-5;;9669BF?3('&'((%'*53*+*(,D`J3/-,01100017960-,,++,3D=1+,+*'3<::54<A-)/000.-,+)+..-0;B81-+()*))+,/23/-///2459<<<94/-/48:;<==<;65:??@B=:6;>??=4/7=5)*+\"/[^LRH:37921757;79CEEIYdZQXS?0,*+07=@ELF>EQSJ@;86540'%1:<<BC=;AE</*042;@=FB01<3,21,,-6?<?C>73.-0]^__`achjhfddba````aabbbbbbbbccdefhihihgfedcdcccca_]]^_cfffeedcba`\\[YXXYZZZZ[\\\\]^__````````aa`_`adhlorqmgdc^]][[Z[^_abbdeghkmnlf_YXXWVVUUUTTTTUWVXXWYXXWWSPOPONPQSTUWWVUUVVSQVZ[`ionkfacfe_YRKIJMRRORYaehhggc\\X\\``cefcacfe_RMT|liiSZfj`QNPNMKP[]\\cigccfmqrlcclnpy|ytxxrv{~}{{qZKPPNUae_dprrehbhgg`ahhfeffeeeeffbbfgeiqvuv{yw~{~xxy|uzz{xirnq{}xtnkkkmovvmlhda^m`Y\\TQYcfbajkҳwqfnwpd]hlg`XQX[]_aed\\UVXUVVSOMR\\_\\[TOSTOIKUXMGHNVSMMOSXVNHGHHKNRUVYdr{~tj^SOORSVZ^dei]NNTQJOVVRKGIKLKJIIJJLKEMWR_mg[XXXWQNOPONNNNNIKRQMQRPQORUTNDADBEIKLLLLJECCCEECCCCGPQPQSPNLJKMLJIHHIKJHHJKLLLLKIHHGHHHHGGGGFEELRs֒MOSJCPXheJACCBBEEEPkoc^[TQJT}rIHKBAEDEIHJJKPQQOJHHTQMOONKKKJKLLJUSQGFPMRiPQOMKLLMMMOPPVVSSOQVWXVUVUUUVVVUTSSTUUVXXWUQRQPPQQNKKLLLMMNLKRa[JHIIIHFEEIIJJJKKKKKNOOOOKJKJLNMJFJfqOHLLKLXgidWHCDGHHGFGIKLMMPLKUUOLJKMQSSPJIEEMURONGA>;=CDE?U¹ fbZNDDDDDEDELSQJJIFFIBOcULNNJMWMA;31I`VE?GL?A@@??@@A@?>=<:989;=>ABAAEDDEFFHGGFHP`ghedbcdkke`\\]_a_\\_b``_bc`mi2;:9:9;:99:;<;<<====>>=;:::;;:9;<><8779;<===>=<====<<<=<<;;;<=<;;;;;<>@BDB><:99::;;<<<<=<;;::::;;:99;:::::;<>EMKGECCB@=<<;;:;8=F?:<:52469999997566666666777876546665776555445579::=>?ACDDA???>??@@?>>>>=====<<<======:AZedgooidccbcbahZ4/544469:<>??@BEH=779<=<<=<=>?ABEFEC<36<;877679865567888998885017>A?>>>;89=??><@B?>@A=>IPMKIILMIHEC@>==>?:479:<9757889;;9768989:;;998998:<=<<:88887888887779;?@;89668987=FKG<43566666665521233455@I@847965556655556788999977=?=>@>=;:731.*'-7720-.0//./...-.012446743<A?:6422.1:4'7glcv~ywtr_>3;;300-0@<,'*068200-,+*((*+-./484.-6;7662+*+/28<<:4-,.0-)).49:1-/552-+)))(+-*(+6?@;2-*))((,111343001+(7A6)&)*(+/7=@GD66;3**%\"0@;.,**,,-.-+,.'&*1896798:<3*('),'''/;?B9532BP6,4000,271/01430,,,,,,33//1///2HTF?504;2--.//.-,+**+-/05;72/-+*+*++,.0/,-+(-477;>>;84/.0589740.,.49:;=BE;3/4978?;36=92..$-\\YEI@63:9545329?EQJJhyo_QVW@1.+)+-5?BDJD;DME:876686*+:A>9CJ1)04DH6**(+6@JI4(+*+.,,.,/7<=?>;9422^___bdfjmlhedcaaaa``abcccbbbcddeghjjijihggfeeedddb_]^_`dgggfeedcb`\\[YWXXXYZ[\\\\]^_`````````aaabcccdfhihgffd`]\\[ZYYYXZ\\[]adgilnostnd]YVVWUUUTTTSRRSRTXZYXYYVPOONNOQSTUWVTTSRSSRRRSTZfnpmigfghhg_QHIORPNP[hnolkkhd^TT]dc^`cdccaXLLcbswDG]h_YRLKKNMOPZfjigjkillfeilpxzxwrppmjpxwsw|}zwmVOPQOTae]W`]fyy~z}gdedd`fjhgeeebbdcefedfgdhrsttxyvyjxxurmighlosvupmhfidnܕWOY^WNaidaiTuԲwoj{wyh`qsj_UY_]eh`age\\YXUVVRNQX]_^^VQWTLIMVUHCKY[OIMRTUTOHFEFIMRVWWfow|j\\WSQQSZenldehcOMWNHPVSLGEILMKIHIJIIICQYPOQRQPPPPPQPOONMMMMHMWTMNQQPPRUUQJECEFKMKKLNLFAABDDCCCCEIRXWSOMLLLMKIGHHIIIHHJKLLLKJHGGFFGFHGGHGGFGHJPoHSQFD<78=CCBAADELKYpj[YTQPNiqMJKDABHFIIIJJKNPPOIHGHIJMQQNMLJIIJIKQPNFNNOPQUPOMMMLKJKKKSUTWMQWZZXVTSTUUUUVVUSTUUVXXUQPPQPPPOOKGGKNPPNMMN^_LGIIIIHFDGIJJJJKKKJMNOQPNJJIHGHILLPcqraMJMLMYdfc_VICFGHHGGLQSSTQLLV`aXOKIJMSVTNEEOXTONJACCDDDE=Oö~ha[KDEFFFGGGLRQMKKJGGDLWSNNMHMWE?7,4R\\D@><<??>???@A?>=>?>:99;;;;<>>=??AAABDEFHIP_dfeefghqsja\\]`a_^_`a`abdahjA<::::;:99::;;;<===>@@><;:;;::::<=97799;=????=;<==<;;<=<<<<;<=<:::::<?ACCA:89;;9:;;<<<<<<;::::;;::99:::99::;?FJKGDDB@>;;;;;:;8=F?;<96336988889755775666667666554666678876555545;??=>?AABEB?@@@@@@@?>>>>=====<<<<==>==:=VhedorkedbbcbcjP,15323216=>?>@BE@5148<=<<===>?ACFHF>614:<867648:7666788799899757<@@><<<;:;<==;>CC?@AC?=FNLIEDHHEFGGEDCBAA?:77898778987997768888888888888:=?><:888878999988778?A:896679966:AIF71465666665421133342?alU;68764565555566789999768;====>>=8201.)',/00//////....,-0123354008?934423037/,'Kl_fszwusq`C@?303/0<9,'+.47210--,+))*+-00363-+4;9763,+,03568:5-+-.+((.5;80-.2230.,+)(+/-)/?EB;2-+*+***-/3773//0+&8C4(%))((+3;BKI54;613-*=>4010(4B:99/+672+*048:5-/5520.-4-*'%'*/38::?@302120*0?>60/10.-,,,,,11121157>RaTG;.,8;4/,++,,*))*+,.024620/.-+++,+-.+)(&&,2249==952//14420.-,,18;;9:@?5--/12:CB9699873#*NU?EE8486343008BJSKKiqlro]I94<?=0+5>82<@8:?;8:977997<B@88GF.)/'4UX>*/1(-<@4*+.-,++0//49<>>=<843^_``cffhjjhfecbaaaa`accccccbdefhhikkjkjiihgffffgfeb```befgggfeedd`][YXXYXYZ[]]]_``aabbbb``aaaaaaa`^]]\\[Z[Z[][[[ZYYZ\\`bdghikmmoqsrpj_UUXWUUTTSRQQRQSYYZ\\]_\\SOONNPPRSTVWVVVVTTUTTTST[fnpokgehopnfYOJMPOQV_gmpnjjkfZU[a``abdbafeYKKP^TBO^efURSLOKNNQ[eihhgcfmjgiov{|yfSYhkb^m}zxyzxq]NOOPU`d_\\]]^eag{{}|ygdcaaanlffeda]^babgihdd`grvppgvvrplhefjnoqtuxibyxpo{UZeygKbng`bNsʿϫwnt{}v[i}n^W\\_ZemYSY`d`WUWVTRX`aceg_Y[SLFMYNFN\\cSGKPUWVTQLHFFHLU[Z`kqz~yhXSRSV`io{dfkoSLf]JPSMHGIKMLKKKJKIB<BHKNRSRPOOPQQPNNNMLLKIIP[XNJMOPRRRSSUPJHHNPHGOQLGBAACCCCCECERYSMLMKJIIIGGHHHIIIIIKKKKKJHGFFGFFHHHHJKIIJJE@E^lpONPHHIFDBACCCCACNMXmfRRRNIKQPKLMFBCCEFHHJJIKNPNIHIIHIKPSNMMLKIKGIOPQMRFYӞCPUQPOMMLKJKJJQ[[[HMTZZYWVVWWWWWVVVTTUUVWVTLMPPPPOOONOOOORQOMMN[aODFIIIHFDEHIIIIJJJJKMOPPNKKIHHGIKNMMalfWLKLOYbc\\VVQGDGHJLMQRQPOOKMRZba][VOEGMUVQLPURONLLHHIEDFC<ô}b_MJIFIKNMMMMNPRONOLJIHKKPNLIIOU6>@6IZF?>>=<<<<>@>?@>>>>??=<<<<<<=>><<=>=<<?ABFFHRafdefinuxma^`cd`^_ba`aa__hkE;::9::99889;;;;<<=>@@?=;9;<;;;;=<878:;<??@??>;<=<<;<;=<<<<<==<;:::;=?A@=;8:<;668::;<<<;;;;:::;;;:9:;::99::;@EFEEDB@><::;;;:;8=F?;=:754578899864677666666666555566669;>D76555349<<<=?AABDB>=@A@@AA@>========<<<;==<;<<9Gafgnrleacccdle=-243441,4=????A@61046;=<<<==>?ACFF?65129;975537:86577778889999<AA?<:;=><:;<>==AEB?ABE@;BKJFFGFFEGIIGHLLFDD><<;99:97776766666665667:;;;88;=?><:988999999999766:<988645886633?H>33557756654322222430Al{_>/5:85555555566899975689;=<=>=:4//0.,,,./..//.///.....//1331/006<513334454.,(Bea]iuvtqurTJF4198132,*+-27;9/,,-./,)*,../00-++-----*,.....01/,*+,++-/10.,+.046431/,*,11.7ILB72//0//0/-09<71+)+('7<())(''((+9JVR:,2@A68?A5.5=7%1ZYOQD6>>6-+/26666669<:9510)((#%-430.5:>8-()./:@;30./.-,+++,,/0017BIHDRcaTH6/=E=72000,)(),../12430./11...-,,*(''(*+*),5;94120001//../.3;::;8694.-1335>C?9644;D=&(EPCNSC541-02/-:FKKIKams_829IRPDDSO3&088768=;999:;=<944BN<2:?5(@_XAA@,)2662342/,)05326;>>@>:55``acefedddffedcaaaabbccdeeefgghjkklmllkkkjihhhijkifdcbcdeefhgggggea^\\[ZZZZ[[\\]^```bdddca`aaaaa`__^\\[[[ZYXXYZZ\\\\\\\\^adhijkllmnmnmmnrtmaXWWVUUUTSSTTUUXZ]`baa\\QLNOPPQRTUVVWWVVWXWVVVVVZflkjgacmqppndVMMOQOPWdopjjmmib_^^`abcdddgh\\QQQWeaTNK[jYYe[W[WPORYdijicdlpjhr|}tppkhfah}xxzzZGJNOQV_ca_^_`O}ɐnw^u{~xuzfdcbckpjeeecbb`abbbbbcfhjnklx|{tomkigekolmptxrjp~bXmvz}wz{eZgjd^[Isϩtrg]us\\U]a\\ahaXONX_]ZZWX_fjkmrrbWZPIIUUDOegXKMSUWVUUSQPMJJNW^_es|ufWQRSX^^_wtchij]ZrdLPOKHILLMLKMNHBIPQ\\e_SSTPNMNMMMLLLLLKJIHMSYZWQMMOPONQRSROLGFLNFHOMIFCAABAABEBBMUPJJLGINHHHIJIKLLLJIIIJKJIHFDCEFGHIIJJJJJJJNLB775?OLJLHHJORHACDDE@<MJV]XPPPLIIIHKMLJEEBCGHGGIIJKMLJJIJJKKQUONQQQMKIIJORSV<auAZWQONNMMMLKJKJTh[FR_^[[YWWYZZZZXVUSTTUVVVTJJPQPPOONNNNPORQOMLMSdUDFJJKIGFFHIIJJJJJJLNOPPOMMKIHHHILMMXz}l[OLPY^_WNLNMIFIMQSTSQPNNMLRVZ]]`hiYIAFSXURPMNPONLGDDCFF@eāID@BEHHLRTSQQRQPPPRQMLMNPPOMKGLUTKV]`dWC=>>==<<=@B@@?@@A@@?=<;;=>==?@=<<<=<;=?>BBDIVcbceinuxoebaba^^`ca``___coH89999998888999:;;<=?@>=<;;>?>?>@;678:=>?A@@@>;<=><=>=<<<;;<=<;;<;<=???<87:@?8679:::;<<;;;;;;;;;<;:;;;::::9;ADCBDD@><999:;;;;8>G?<?;974457799844677667766666655655668?EO<544334678:;>??@CA==@ABABBB@>===<<<<<;:;<<;;;<>>LaikplebeddicG0333697326>AAA?>9101469;;<=<==?@BEA6241277874436::5466778879::<?@=965:==;==>>>?BB>???DCAFIEEFEGHJLLKIIHD@><;<<<;;;:877666655778;==?BCD@98::<<::989999999999877778986666535611?F;3566666666652012365->o^B847854555555677886348847>?>=9520-++,,----.../////////-023568:<:31225752.+*1C[f^equtqqfXSG6299312/.,025B;-++.23/)'*-,+*-,*('&&%&(+.-**--,**)))*-11+'(()-689863/*().02?NI932224335:866510+'(&*<@**,)(''&&(5K[L,/GB239:0.:A/''Tqgf`F>=3,.012047:88::73/2)*-+<LO>.,*,++*%$-;A3++.-1.,()++,-0-5EQVWODHVehZG>JXWQKID8-*)(+/014620.-/121110--+,///-+)'*28500111//0000//5<;874471-29;98<:45973=NM7/8PWTURA0++-/.2=EDDJJOguzvU54ALONPYbR0%+4876=A=;;;<:77968ED26BC>+*G]WG9/64.5<;752-')1337=>>A9257abcdffb`aabdddcaaaabbcdeefgijkkllmmmnnmmmllllklmnligffeeffgggfgiiifb_]\\\\[[[\\]^_abcdeffecbaaaaaa_^^\\[[ZZZZZYY[]_`acfhhhhknnnooppoprttog]WVWWWVUTUVUUVX\\_`_`cZKJNOOOPSUUVWWWXXYXWXWVUTX]^blof`fmnopkaVPPPOQ^mnhkmnnlha^^_bcdgghnlaUOLP]_QMesXRlldjaQPUTWakojgksplyxw}ngeenywm\\bPIONPRW`aaaa_\\L{mJx{exdnutuupyfdcbfpohjliefgecec`adjmlllnqg{rnlkjikrxuonopwk`fgdfo|wljgb_[_UnӨqsmdow^Vbljeff]YZYZXTTV_hmlljii\\PQNGPbPKhlYIS][XWUTTTTUROPRVXZ_qxl]OMOOPSTdkcefec]\\eWKMJLIKNNMMMH=Ba|uj`SMMKKKLLKKKKKJIIILQRSVWXTMKMNKJMMMNNMH@CPMCINLHD@@@@@ADA>EKJIKNKTWIIJKLOPPOMKIIIIIJHIJHFBBDFHIJJKKJJJIKLJJJ@@FKLIFGHDAAEEEHKI~cSUPONLKHHJIKMLKKIFEGHGEGHHIKJIJIHIIKQQMMNPRRMMNNOQUNEj_Pk]PONPONNMLJJHJtcITYW]^[WVYZZZZYWUTUVUUTXVJIPRPPOOMMOOPOONNMLJM]ZJIJJKKIHFHHJJJJKJKKLMMNONNMKIHHIJJMLmxaRSX[ZUOJIMPKKRXWRSRPNNMMQRTYY_mtrdM@EOTSQOOQQPQOKGFFDCnƽòX>GDEGHJNRSQOQQOPPQQQOLLMNMMNKJTXQct}ucOA?>>>=;<<@BBB@@ABBB??>==>>>??@>>>>?><<=<@@BAG[eaccfknjfdc`\\\\^accbbbccclC8998888878889899::;=>=<<;;>>?>@>:768:<>?AAB@=<=>>==?==<;969<;;;==>??>;879>=:99;;::9:;;;;;<=<;<<<;;;;;::;:;<BEDBBB><<;:9::::;8=F><>;:95346789844677767777666656777666=HI=62334579::;?@?==A;;>ACCCBBB@>>>===<;:;:999::;>=8J^hpnigggkiD04667;?:88;DDAA@<5123458:;<====??A@:33411358754459:755568889;;:<=;:767989AC?>>>@?===;<ABEIFADEFKQRPLFB@;87779=>==><<97877665679=DIJKJJH?9988::::89999999999989:8899887664236404;?;5556677778841113694.DqiQ<038755555567777736;3).:??>9540++,+,-..//0/./0112352.015;AFFB:42015731/*1DAFb^_nuupljT<8544379951.8:181(***+-0.-..,+,-**+)((&&()*,-/0/,*))((*-14/))').:?=92,**()-/8GM@0/334458>KKC910/.+*(*?D/-+)((()&$$(M\\7+4...,.*.9<'''9oqrkO963,-/-,*+-255451/02/20:VR@0+,,,,,+*)-6D<61135,*)**,..15L_c]VNG?=ZobQGXtwi[TH5++*')-1696/--...01120.///561-**+,142/12111210/--03662/17=616?>:98415:94<PYO@6NbYPVQA962/4:?@>;DD>JUclT99DNPQRX_L,'*3>=;CD85555403<=74.+0466-'3NXM@7:6,3>;575)%,0005<??=1(04abcccca___``abbaaabbcdeffgijjlmmnmmnnoooooppooopqomkijiihhggeddeeedb_]]^]]]]^^_abdegghfedcba``a`_^\\[ZZZ[[ZZYZ\\]_`aacdfhjmnoqrstttttttrlaYXXXWUTTUUTTUVWX\\_acXJFJMNORTUWWXXXYYYXXXWVTONRYfpoh`YTZagj`UQQQRYbefmpnnnmid_^`acfhjmnkfYOQW^[Tkz^Qgpjoq]Q^ZPU]gnkknkhjfjvzrjndcqn]ZXXSSSOQU\\aa`_^]YS[^TTYj~sThvzklxnimphpmedfc[eklqskfdggffccimnmkmojf_d|~uklmmoutnpowv]NOTapvyy{|~na^_^cajڬouvjnkzs_Vd|zljh^`hbTNRUSW\\]ZXUNONNOII^^Oes[IVed_[YXUTUVTRQRRSRQ[prbWKJPNLXbbTQegeb^[ZLFKLKKLNNLMJ@Ml~fTMKKJNNMNMMLKJJIFFFHRZVRSTRNKKKKKJKKKLLJHC=FQHCLNJGDA@@@ACA=@CILNNNMLIIJKORQPOMKIIIHHHHILQRMIHMNLKJKKJIIIIHHGEFFEGIIGFD?>CMIFO^a~eORNLKKKJJKMMMKMMLKIFDDDEFFFHHHHIKMOSSMLLKKLMKKMMMNONJ{OXncROPPPONMLJJOKkwJM[_^\\YXYZ[[[[YWUTUVUVUYVKHMQQQOOMMNOONMLMLLJJU^NHIKLMLHFGIJKKLMLKKJJJLNNNMKIIIIJJKNPnl_\\XTRPMJKRYSQ[XQQONMNMNONPUXahlqujSEFMPOPPPPRQQPMIHDHĸÝIEGGEHKMPPPPMNNOOOQUVSOOMMLLPLO^NCUw|gJ=@@>>><;<=@ABBBBCDDCAAA?>>>>?AA??@@A?>>>=>?@>>Reba_^ahifed`^```bdeddeed_=<:;:::99988888889:<<<<<=::=:<?@9978:;=?@AAA?;<=>======>=617;:8:=>>?<869:;;;<=<<=;:9:;;:::;<;::::;;;;;:::;;;BEDA?>><>><:::::;8=H>:=;9:63356677634577777776666678986679@=;9522478:;;=?BB>=?:9=ADEEDDDB@@@?>>=;:;;9733567>>;Jcqqnkihoc52658=C?;75=FA<>@<41466689:;<===>?=84344221467654567:855689:<<;:::9878986:ED?>>??=;;:9;>@DIFBDINQOLIA<;9767779=?===;;:::997576689@HNLGF@989989::99999999999998999::::8876544555208>833477678887421354542Ju~rgI05:7555667777883:HB30259:753/**---..//00//110127;710/14?MI<87327:=<83.>L92L]]kvxoh`@,.10-3=?<4/3?@3/.)(''')/4871-./0-+---,+)*)*.5651.,+*+,.-,.20*(*/;CA:0(',,,,2@KD<=5/.025>MWXOB70+)))**:?0,++*+.30).%,F1$*,/.+*&-:5*)23f}kN@512/.-+('(*/3687412.375LcI1*,-,-*)*+*')1:?AAA:11220-+/3H[c^WQOI8+NmaNB[vaQ<+)-*'(+0684-+-...01220-,,,1342/--.01//1236778850/320,().6;747=;9:9457400;HQSMA>J\\\\W\\[SH:5<?=?=5:BA8<[raC;DJPVSScU3)(0;::CB0')++)'*26412321221+4KUTNJI>5884263)'/3/,*,7=80*+0`accbba`^^`_`a`aaacdeefghhjjklmnnonoppqqqrsttssssrponmlkjihfecbba``________^^^_abdfhiihfedba```__^\\ZZZZ[[[YYXVWYZ[\\^bfhkmnprsttssstttuupf]YWVWVVUUTTTSPQYabffXGFKLNPSUVXXXXXYYXXXXWURNMPOScqocVLKRXXVSRRRQQU]kqmpqnoldaaabbceffhpp^NMX\\WhxlW`nmyr_icPQSXfmmlje\\\\eikrz}}nowkirtmfWWYZYUQW^a`^]][ZXTQUYURQXhsz|_ajkjvplqunc_cdefbTMdyutuhdhihgehpqnlopm^Zcfbqzs}xnknpuwrutziUW`strrsv{~sc^``ffd߮nrwpgdto_UYr{vthZVWV[`aaVLLKKKJHFINOGWjMT{eJVmndca]XUUVVSQQQQRQPYo}zgYQLPRO[e\\MGJXimiee[GDLONNNNMQE@woh\\MBDMPOPTSQPOMKHHHEEFFHPWVSRPNKJMLJIJJJKKJHIF>@NNCFMLJGDBABBCB??CLRPLHFHHHHILOQQONLKKJIHGHGIKNUZYXYTPNMLKJJIIJJIIHFDEEEEDDE@DI@ESabROOONLIKLLKKLLLLRPMNMOIAAEDDFKNORPYejjc\\ZXSTTTPJFGHFEDAH]li\\USRPONLKKLMM|MPhUMPU[[\\^^^[VTSTTUWVXQIGKPRPOOMMOOOONMMMKKJO\\SGHMNNMJHIIJLKMMMKKJHHJKLLLKIIIIJKINIGa~wdXROMMLKRb`SRUPOMMNOOONKJNV]dedhpkXFEIJORQOQPOOOMLEGYWQHIILNMNNMMONNMKQ]\\VWYXXWUTMT^IBHe^H<@B@====<<>@CDDDEFFFEDDB@>>>??AA??@ABBA@>=>>?>=Nddb_\\_ggeeddcec_`cfedde_F:?==;::::999889889:<>>>>?<;;8:@@9778:;=?@A@@=;;<=<<<===>=95:;9:<=>==936:;:99;=<=>==;;::998887779:;;===<;;;;<CDB?=<<=?><:889:;8?G<8;9885434343333246777766666779988667857:97534789;;<?BDA>?:9<?BCEFEEB@@@A>>>=;;;<8212349C?AYnrokikqX4777:<=;625=A:57>>43466668::;===>?;42454421465664346;:55789;<=;8777778:;88@A?>>>>=;99;=>@DHHFHOQKCA><<<::;:9789::;;::<=<;;96756658>FD>=9899:::9999999;:998788878:::::887655544432165434777777786421456;;0FwsO2285456667767624J]YL>665443/*),---...//012/-..3983/.,+6HA4555>HJLI<5@K@5(6W^iv|r^A+--/-+2?@5-,:FE<341*)*.357:73/.153..121.+-/15;<:72-,,/12/+)13+)*/=D?6-'(.1.*0CK;,)))+04?JWQLA=3+&&))--7<4-+,,-079-6@*1,(230171+-1,+09.O|Z2/0//..-,)()*-39<>;50.48E[V<-+*()++**+(%172.9736I?32/-*+-4;BHE<95+#@e`H:]~^3$+-(&(,/12/,,.../12220,+-/.07;70-/1/./.07<;<BCA>;50+*,-/2335699:<:6682-2;>>KTL98Xlb_`[PBAD=;C?7:A?7?^rdD7>?:IH<PY>*,21/4=:,('()&'-29ACDEGE@==7AQSLEQYLA=4-.//-+.8>5(&-1232..]^acbb`__^_^_`_abbdfefghhiklmnnnoppqrrqqrstvuuuuutssqpnmljigfcbaa`___`aaa``````bcdegijifeda`_____]\\[\\\\[[[[YYXVVVXZ[]`dgjmnorttuttsstttuurjaZUTUXXXWVUSQQW`fhkjWJLLLOSUWWXXXYYXXXXYZZZVPOLLR^r}n`SOQSTWXWSONRetnrwnnojhhgda\\ZZ^egjl_QYmtw~z_\\p{xznVT\\\\Walmqogbcdehilowzw~wnt{{o^\\Z]XPX_^]\\\\\\ZYXWXWVVUSX[Uan]_^Z_flw{~wnfacegdUP^wnhlljhimpqopqlg``dgg_gppuyuwwtno|uswvo[chhacqqglob^aail^ըkotieimov}xdUO\\kuxj\\b^\\nmWRc\\LLLMMMMNMLL]bJZlZ\\qskhffbYUUUSSQQPPQQQTd~~gVNNRO^p\\GIMKJ^okjhSDR\\UROOOMI8lfBMKNRY^`]XUUTQMKIGHGEEHIIILSVRNMMLMMJIIJKLJGFIHCAGNHDHJKKMLFBBCC@@DKONJGIKJHIEBIPQPNLKJJJHGHHHFBIZda[XVTSQOLLKJKLLMJHFEDDDDDFCYidSQV[SMMMMMJPRIIILMMQXRJNNdYCAFEDJW[ZZW`lpmigca\\`mvreVMJJG5JsFWfolbXTQPOLKLLNR|WqcdMFPY[]^``]WSTVVWXYVLGFIMOPOMMONNOONMMLKKJIVZKGNQPOMKJJKKKMMLKKJHGGIJJLJIHHIIKJJHBI\\nzfUNKJJLMT[``OINMLMMNOOMJJJRY_a_^dlj]LFFLSRQONMONNQG?ȼsWYNHHHHIJJJIKKMKIHOXZX\\_]_^[WW\\PGHFLH<>@@>>>=>>>@BEEFEFGHGHFDB@@?>?@AAAABABED@><>>>=;Offfcbeheccbdefc^^chgeeaS@=A><:;:;:9;;::;:99:<@??@A?>;:7=<97788:<=>??><;<<<<<===?>?=<><;=<=<<;968:99:::<<=>??=;<;98877788:;<=????>=<=@FD?>=<<<;;::999::8?E97;8765423431133456667777666778877778888987644578998=AB?;;9899<=@DEDDBBAA@@@?=<<=9423346=AAPnunigmmI4996988832577525<<4566666768:<>=>?;53445421466654345:;65779;>>:8655789;>;9=@>>>>=;988;<=@GIHIJIC<89;=>?>??=;765558:99;::9:955555668<;78899::::999999:;:886677678::::98866655443440/244589987777753125:BA0(KzyuT008445656665431:See^QFC<52-)*,--.../0/00/+)*+-3740/..2:80119LVSMD7>PF21,2P^fu}uP1,*.44,,;=0'+9A@=776202:=731000./32..///--179:;<;:6//02221/-00+)*0AD8-)'*02.)-?B1&*374-<PYWA4-3/(&&))./5:5.&)+,+270-EE3:2143680-.*',/+&/b=.*-...-,,+('(,/24872/867NV=531)'(+/10,/;ME53;2+3M@*)*/7;424587,',,'5R[G7cV1*/-*++,//0/./011134331//4600:?90//0//-,3=><>AABFD8.*4A=3110137:<;:8:=<=?>9<OVTQPXfhe]QNLJF;;D@98537CW_K7555671$,>7,073/4:6.---,,6>@ISOLOTRI@CAHQJ<9NWJA<3*)-/01/9LE/'*.144/+[\\]`a`_^^^^^^__acdefgghhhikmnopopqrsrrsrsttuuuuuvvvtrrqonlkigdcbaa`_`aabbbccca`aaabceggeed``_^___^]]]]\\[[[ZZZYYZ[[\\]`cfiknqstuuuttutttuuvtof]VRTY\\ZXVTTUW^dfhkeWQPNQRTWXZZYZXXZZ[[]^^^XQOPOQ^nw}xkaWRSY__\\ZXS_sootjfjkmomjfaXTY__^ehcgu|qhx~~yiXZj[N]adorjfggfeeiyxnw{sz~}j[X[VY]\\\\]\\ZZXXWUVVVZ`b\\Y]^]]\\XTWbgiou{}gbfgb\\^Zdvklmkjoqrssrmfdcbdglpgmtppsssw|xom|sq{cTbaZdrjadedafnszg˞grr_jrmlklste[_abcfjltnc\\RIF[lTHQOMMLKLKJPQNUeqrppmkiloh\\UTQQRQPQQRQQfoXOOKVykHHLNKEPcfk`FLgm`SMOPJ?erMX___`_][YVTSQMKJIHHGEFJLGCKTTRQOMLLLLJHJKJJFDJLHC@FMHBFLQXYPHEFEAADGIIHGGHIGEABCJPOLKJIIGGFFEEECAJ]g`YVUVTTPOOMLMMMLJIHBBBDFEGilTRQNKLLLLSVQHHLKPPPWXKIM_aOGHJJOY]\\[[^addcb^^ber|}wm_MQQ>fUPU`imi\\TQPOMMMNOR[aTmjPFKTW[]^^\\XUVXYZY^SFEGGKOOONNOOOOOMLLKJJKIM]RHMSSPOMLJKLLLLKJMJMHFHIIIIIHIIJKKHGGEEQcjaTJJLKLQVVTXVONMKKMNNNNLMMOTZ]]^_cimdSCBLQQPNNMLMSPFWĺRMKHIHGGFHHHGGFHHGFHMW\\``^\\\\WUTQEDAC==@@@?@@>=>>?@BCCDEFFGGGFDAABA>?@@AABCCBDD@=<=<=<9Jafefgijgdaacccb]]bhfdi_@>AA>;:;;;;;;;::;:98:<??@AA@>>=567787889:;=?><;;<<<;====?>?>===<><==<<;:;::;<<<<<<=?><;<<9778:::<<>@@A@AA?==>BGE>>?>=;:9:8989::7AMECH@<BHJLJF=33433577887776667777857788999876455567627=><99888679;ACCDDBBCBBA>>=<=942333569:Ggyshfl]94;9578864233322364356655554358>=?>:755554434566655437<;669:<?>964249:;=?@>??>?>><::88::<BKKIF@95688;<=?A@>=;:97437:778887765556666676567998889999899999866777677988998866654555431/035689876665555106:@>6.,P|}}|T2374455556656626I]hc]]L5,)(*,-./001321/,++,./38411110000/0AUXPB8>PM8,/33I]et~yN21,298/+35.(+./.0135238<:3-*()/1.,++++**+-15:>=<:86203311223.**((2CA4,)'*13,*3?;/07AF>7FN\\I2**04,$%*).-453/)141+2;5'2K6H=*,/25--*+0-,'$+>,**,.//.*(**++++.0140.24=IF=>:2*),-/475D^T5:A>;><@3&)--1>5)++,.8>EHB@IZM6jR--.--33-,//01321/02245442342.3;9201..0/,2<><:8653<B=4,9NI;984238:99:>BCJQOFAJTTZcb\\\\dmaJLQF=<=<830048=HF409:7B6'%'((*,130251/..-,8FGISQGBISRB49BLL8(0CH<564,+021215BH7%)540//,Z[[\\^^^^^^^^___bdefghhhiijknopqqqrsutsssstttvvvwxwvvtsrqpmkigfdcba__`abcdddecba`_^``aceeeca`_^_^^_^^^]][[ZZZZZ[]]]\\]`befinstssrponptuuvxzyywrk^WVWXWVUUVWZ\\^`ckg^YTSRSVXZ[[ZYZ\\]]^^`bd`VOOQQORX[bjg]TRW]_]]][[a`^_[Y_eimnmmke]ZYZ\\]`fkijrv{~ww~|ywvuxr\\QilSOQR\\ehigggfdgnlber}|y~rcWY]\\\\\\]\\ZYXWVUVWW[_]YYYZ\\ZYWUURQRVc~kcfdbbaWSgszxnlnknvwxxznigecdfim~{{m}upqsqpsxwvuvonxxTWXdsd[ca`_^`fkrg{۷}j|w\\]hnjnrohaVXjsw~tmgfYDCLKGbfIKNMKJIJJHFKSThx]akotvrm_UTRQRRRSTTRQomXRMLn}RCOKKJGJUbfUN_llbTEIOEXjRkmifa^ZURRQRQMKJJJIHFFFKLFL]\\STUQMKLLKIIJKKKGBHNKE?BNLADLQWXVTROIA?BEFFFGIJJH@BG?CNNLLKIFFGFFEEFHFDN^c[TQRSVVSQMMNNLLKMLGEDDDEAMrbWPKJJLKKKTVNIEIMJQQLWQJSQNMKLMORSUVXZ\\`ca^[[]_emj`\\\\ZOPWTTWZ\\_gg^TPQPOOOOOPFJNOY{WEGJQW\\__[WTUYYXUWLCEGFINPNNNPPOOOMKLMLLMKHWXJLTSPQOLJJLLKLLLMJTOIHIIHIIHIIJKKIGFHDESbd[LGLMNSXXPOTTPLKKKMMNNNOOMMRZ\\\\]_bekhT?>JRRPNMMNQSLOaFIFGGFGGFGFFFFEEFEEBGU_aa`^]TRIC@@BBBA@??@@@>=>@@BB@@CEDFFGIHDBCDB??ABCCCCECCC@=<<<<:9F]edeehllgcba_____`d`]h]:>@BA?<;;:;;:9999999:;=@AAA@=?<755688889:;<=<::;;;;;??????>?>===>=>==<;<<<<<===;<<<>>=;::978;>?>?@ABBBBBB@>=>CGE?>@A>;99888889;7E`a^_XWcr~zl[LB:643335655666677688656787898875545654348;988888679<ACB>>@BCBBA>>=<=:4344344536PtyhhgI/377899876444432212346555432236==?>:765666665466776423:<65:;<>>94336;>>>?A?>>??>>=<<:9::?GLKE=525998::;>@@=;<>>:77:;9878975355556666776687766777788999988666776678889998767665556443225677875566435;837<?;900[{W3.444555676685-.BZcbYD2*''*,.//123441/./12235663/.//002/0G[^N6:OL82234.;WerwL42/37630-12,)'&%&(-41.23/+)(,38620.,*-0.,,+*6CB<62320250/3111.-,)2?91-*'+32,1;;41<DHIA?NEP7*,+,64&*,(+1<31JWZG6*-;>+#52D;&%)+-+,-2:0)'(*+++*-0330*(*042+',340,/589856<:3*(-.-2?DVqJ4279AB:-)*-,*3;7:L7((?WUJLJI[T<of#\u001f***1;;2/000131+*,12221/-,++,254/01..1/2<>:73110-08@:-<PNKI?;87646=CIJGJMOONOMNTeh_X\\e^FBI?799228:<?948;67>@<<6,**)''(+,-22-+++).DMHMSE75:FJ:+-6?:(%/9;4-01024432201=8&$06641,Z[\\]^_^_`_^^__`ceeeggghiijmnoprrrsuvuttsssstuuvwwtqssrqqpnlkhgfcba___`bcddefedccb````acddca`_^^^_^^^]]\\\\[[ZZZYZ\\]]\\]`acehkllkjigfehottty|}}}}{ukaXUUUUUWXXXY[_hme\\XXVUVXZ\\^`a_^_^_aehfd_YURQRPMMNRVVSRSTVVVVWVQPPOORX^`clpooolf`[WVW\\cggecekiiv}zwssuvl_iubNOPOS^`_dgfbbgigkfiz||elueZ\\]\\[[[ZYXXWVUVX\\_\\ZYX[ZYXVSRRTQRbhdfeeb]UQMWimmponu{txzjhheddhkozoDcyopsuqmmsxvnt}tfp]RXdkXRWUUPSRQPQVQOWu~qc`X^ljkrpeVLMSYevdYMHHJMEIlfEKNLKIIKOLIOQVtbV`euwbZWTSRRQRTTTSRQljTPKVnaFLMKKKIFOaWObhfe\\OKLFSmdUX_de_XUUTUTOMOPOMKJIHFHIJKO\\faZXTQNKLMJHJLMMKHCDKLHECGLEEKMOPPUYZRF?@ABEELTWRKDEEBACJMJIHFGGGGHHHHIHITa_VQORTVUSPNNNNMKMLMLJHFG=?WRQTOMKKGNIMNOMIHEKISYKQRNNMMLMNMMNNQTVXZ_a^ZXY\\^baYRKNRTXX`\\WYffhg_WSRQPPPOOOPNPU_okPEFHLT]a`\\WUUY\\WOKIEFFGIMNMNNPPOOMLLMMMMMLHO[QKSSQQPNKJKLMLLMOKSQKFIHFGGHHIJJJJGFHIEMbniXIHLPTWUPNOSSNMLJLLNNNPNLIHSZYZ\\^_ako[@?OSQNMMOPQOLOyþVEBBCDCDEEFGFEFFEEEECBER^ab`\\TJFBDCBB@@@@??@@?=?@BDFA>@DGGHHIKIFDDDBA@BCCCCCFEBA?><<<<:7F]ecbbhpnhcb_^]]_a`b\\Zf_>?@BEEB=;<<;:9:::::9:;>@AAA@>>:86568887889;;:;;;;:9;?A?@@@?>======>==<<<<<><===<<<<<<<;;;;;<?CBCCCECDDFEB@?>@CFC?@@B>;:989:9::;8Hfhaa^`iuvlea]VOOKB92123455566666667789988775545665657:9899988;=@BC@969=>???>>=<=:534445665/;_pji[6/258<<9899755543223234555322235:<>=9875666776666677642698579=?<7456;>@@A?==>==>>?>>><:9:CHGD>7457876899;>?=<<=>=;;<;<:88974445456666776765556666556766887656666678888899887777778766446645776787444A=069:@=4,3bvxyU.-54456666554108JbmR1-.('(*.0123343212476443464//110130.<[hJ5IK3-3644-2LasrF01054432/11-('('&&)366420--/5==6442-,062+*'&4HF90*-33498460-454722720/,*,24368622@HB9//HL@,)+*).73/.)(8;)&Cl]3)**1:1%%.:3''*-../06<0&(),,,+,04640..04676-(-2/+0=@7/.3896*(--.1BOkl<1(1;?62**+(%3HC;hM0-/FL4.24CIAtC(*)+6=>??<987530.-/340/.-*)+-/010/00-.139=832/033/,-20/J\\VWSF<7413?MTXSHC?AQWPLKI_obYUQRF9?B=955@MOLF808BDD>631/*()*+,,.5<>:5.*))5GIJTN=:=;6640./1/()*.698620244455,*3:/-:LUI9-[\\^__```a`````adeefgggghjlnopqstttvwwvutsrssqqqonliiknooponmkigdca`__`abceghgggfedbaabbcddaba`__`_^_^^]]\\[[ZYXYZZ\\\\]_`adfecbbbbbbbcfjklprssusoqnic[WUUUVXXXXY]^_]XWYZXWXY]djh_\\_bdegfeedb^WSSSRPONNPQQQOOOPQQRPOPPQRUYZY_koopssplg_[[^aa^[XWV\\p}|yy{~~urugTSWSU\\]XZchfdfhhkpgidOHNhzm\\\\]]]\\[YXZ[[ZXY_cc^YXYXXVUSSVURTfgefhfaVUUP]khkrssvtq{qeffdcdjosmiumTLvyRUft|}~zssrsvzzsmoruvssyyqqaW`YUVSQOOQRRQPNPQQMHPjspf`eflsps|hVTRPQPKTqeMKKJJIJJBWvaJMOKJJLNNHGKO_~waYN]eTQSRRRRRRSSSSRNcmSMN\\]LKMMLMMKJQXPXfbab^KVWPea]_][_[POSVWVTQPPTUOKJHFGKLIJU\\Z[[XTPNMLLLIGILLKHFEGJIFDAHLGIKLNMMPUUOIDABBGQWXSMKGDEBCHIGGFEEFFEFHHHHGGN_b\\XUQQRSSQOMPQNLMMMLMJOLEJRTSNMMIMUQKHOOLIHKMOSVQRRNOONLKLJJKKMQTVX[][YXWY[YRORQOPWa]eq`W[ecdijh]TQQPOONOOOPYi~rLDGIIR]a`\\VTUZa[MIJIHHIJMMNOOPQOOMLLNMLLLJHGUXMPTSSRPMJKKMLKMPOTNE>DFEEFGHHIIIIHHHHFGVmun^OJPUSPMMMORPNKILLQPMQNNLDGPVWZ[\\^anu]FGLQPNNNNOPPFPy=HFSQPPMJHHIFFFFEFFEDEFN\\aa\\PFCBACBAA@@?>?>?==>?ADFD>;?DGHIIJLKHGDEDBBCCDDDCFF@?>><<<<<7?Zifabjrnhcb_^]]\\]_b`_f`<ABCEGEA?><;:;<;;::9:;=@BA??>=<9768:;88779;;;;;;;:99:<<:9;<=<<<<==>>>>>>>>>>>==<;;<<;:;;;<=>@CDEEDEEFHIE@@@ABCCA@ABB@=<;9;;:;::8Jcb\\\\Z`lqutj``addguyfO@8654566666666778:;:8886655688989:9:9999;?A@@@A:4588;;<=?><><64445556400BaofK,13479877<><9756521344444444443568==987777876677666896216:779>@<657:???@@><=><:;?A??@=978?@??;66875445666899;;==<<====:8543345455446677656765544543434555553344555676788888878999::999887668:<<;96659824617<81'@upwyT114355565425<@?>Vs[*(53,),/2444443446:><96348835643332*.We=9I6+1122224AZs{g=*/29645622/,*)**+++.8<9650.26894231..01/)('(7JB3++033:>??6.+588>>3/1320..18;85325DF7+$*?E3*+'&',51.,)0B4(%.`F.*,+)-.*&/82+++0/..0671)()-.--/3221/034457;8,(+..3>B91269::/--151:P~W3&2@A92-*'&(0?C;3cn:,0)/;0$\"!&-;T791((?J<:>967876579>@85640./2221/./10-068:8553.0230,'%$.Rhc]WQ:(*0=LVYZSF@;>R[WURN^lc\\SHIH@BF>55>HLIA6/8KPPPA1/.,)))*,-19@?937@:87<BDKM?7<E@,'13-*/0,)-3=GHB6001/-+-/7BC:JPC;5-*]]____`aabbba`acddehhfgijlnprstuvvxyxwutsqqpmljjjihfhklnnmmmkihecba_`aacdeghiiigfdcaaccdeedcbaa`_____^^]]\\]\\[[[[[\\]^___aaa`abaabbba`_`abbaaca]]_`a`^[VVWXXXYZYYURTVWXXXYY]fh^WZ`hjc__cfeca_YTSSRRRPQQQQPOOPPQSRRRRSRQSUTTYciknvwwuqojgebaaaa^bv}|}||trm]WXW[be]U\\lqkhhilqki}oPMLPpl]]_^\\\\XVReugYZ`cb]YWWVVUTSSTSRTWdgjllcWXWTcqmhpwtqtzzicbbb`dmqteXdSGan?CFP`bee`[WXfnmpzyx}}zwttwvuuvww[TWRRSRQQSTSSSSSSSUTQCOke|weefmyoSQSRQSUSQTPEHLIHIIJGBXp_LJLKKKJJIIKNNgsj[HQUSVVQQSRRRQRSSSNVmQPX`TLMMLMMNOQTNXfa_`aX[_W[Y]b\\ZYXPKV`aXTSWZVSTOKJHEHJHNNLNPRVYVQNLKKKJLJGFIIJHCDD?>?DLJFHJKKKJLOONKGFEGORSOMJGFEEILIFFFFEEFFEFHHFFFJWac`XSQPQQPPMMRQMMMLLLKOONNMQPKKLIOlYLONMLKKLNOMNPQPNNNMLKJHHJJGHILNRTVVUTTTRQRPMLQYb]fdZYTNO\\hnf]XSQQONQRRTd{~SDJKHP^cc_XUTZ`UKKLJHIJKMMMOOQRPOMKJKKJIIHIFLVNNTUUTSPJIKNMMOPOSTF8@ECDEGGHIIHHHHHHGFJYlvymVOSSNKKLMOOMKIJLPPMONMLGADMTY\\]]]anoZIIPRPPPOONMEDsĿVEUgvme`XRLHIFFFEEEFDFGGM\\`YPD@@@@BB@@@@A@A@?>?>>ADEA>==CFGIJKNOKIGEECDDDEFFDFGC><<<<<<=::Ngicfmomieb_]]^Y[]ab_bX<ACCEEDBA><;<====;:9::<@BA@>??=<99;=>=::99:;;<;::9877776579;;<;;<=>>>>>>>>>>>==<;;<;;::;;<<>@CDFEFFGGIIC@ABBBCB?@ABA@><<9<<:<;:;K^b\\WU^lpngda`bbdjv~pbM<6356997566668779::98565589:::::9:999;>BB@>@A>956778::=>>?>943335665426Wq_=-566555558@BA<78532344444444544546;<988888886777557998505;<:;>?:779;=???>>>=:98;@A?@@=857889==989855554455469;===<>>>=<842345555555677666665543443321333344322454465578888888999;;;<==;:;<<<>?>=<;;53565446:;7+6kv{D)454557755?GG?2DfU-+8<5./1355556566:BFB<747:856766554,-DD+3=--22136928VrsO-,16>9777542.--///1.-69631,(+1353010.--,+(&&'2>4*,1632=B<;0()29>@=4013321138:63119F>/+,3:50,-'&1;7+)$)9=.()*D<862,**)(+4<;5/.-+*+360)((,02//02.+-//23446893*)-037974469;=740380,Bm>*)AB90,)&$)8D>533<;83/02430-)'\":s2074.+:UVKIA3-.1455>HKB>>83352123.-.1..36576684///.++,*&-D]da^Z?\"$7HOPOKGED?BS^^^__bjfWLJKLOPE637;=>6($.I_^YUL@:1,++*+,)9LF72,-EKE@<<CG>43675+&*,+,2521=DGGC@=6,)('*7N`^B68:-%)&'^_a```aabbbaa`acddfjifgijkmprtuwxxzzyxxtrrolkihijiiijjklkkjhggfdcca`accegffgffecbaaabbceffedbbca``___^]]^_abaa`_^^______``acdccbbbab`^\\ZYXXWWXX[\\\\`dc]ZYXXY[]]_\\XYYWVWXXY]a\\QT_hfa_`bfigcabb[SRRQQQQQQQRQQQPQRRRQQSRQQRSRPS\\dejswtuwyupmkkjmnr~}|~|zzyutrf[XX\\bdc^_mriejqobft[LQM\\x{g]^^]]YUP\\icYZ^a_ZXXWVVUTSSTTTSN|cgmne_[ZXT[psjltvywha`^_^fnssd]\\QYtnQX[XWVVUUVTVbnnrzzz}|z{y|yxvtqxsVRPORSQQRSSQQQPPPQQKJcqb[nvloZYborVQPNLLOQRQLKKKIIIIGGFCVfYLLLLJJJJKLMKRYYTOUUTXWRQSQQRRSSSSNLkbNV^[QONMMMMORSSO[hb_bXMrdKQNdf]VRMTdffg]TSW[URRMHGDFLHFVWJLQWXXUPNORMHN^c[QMMONMQPFBB@JNFGGIJIIKIJKIGIGDHNOOLJGGIHHLKHFGFFEGHFFHGGHIILVa`ZUSPOOOPNKQUOKLLLLNKOUPMNLKKKKPZTMQPMLLKMPPQPPPNNMMMLLJHLOKEBBBBFGLSSSTOOTTNMPSVX[jsU_\\YTNIJNW__[SSRPNHKITi{RHJMGM_deaYUTXWNJJJHHJJKLLMOOPQQOLIJIKJIHHIJLSNNSUWVVTLJLNNNOOLDRS=:CBCEGIHIJHHIHHGHIHKTcqrUMPMJKJLUUNJHHJOPMONKIFCADLU[]\\\\\\^eeWLKSSQPOOKIDFi·<]hkm_USNKHHHFGFEEEFDFHIR_WKFBBA?@BAABB@AB>9@F@>=BGBCGG@CHIIIKPSOKGEECDDEEGFDEHF@==<<;<=<9?Uddfjklic_^\\]^\\]^`\\_`H?ABBCCBBA?<=>>???=<;::;>A@@????=;<=???>>;;:;;<;<;::9988878:99:99:;===>>>>>>>>==<:::;:9:::<=>AEFFFHHIGFCAAAAACEB?AAA@?><<;<<<<=@DM[b^TQ^lqmd^^^_bfkopolliYI@4-.257766778975898767668:;::::998:;=@CB@?ABB=85677889<>>>=74435888:::Tp[<9:87777543<CEA;7432355543334666778<=;::9888668754668:;725:><<>=977:;=>>>=<:86679=?>>=<8686559<;99988976652236:>??=>>=>?;96677665555666655445445434433233233433554445578888779989;;;;==<=>?@?>=<>?@A;553039<:98//S|W+17455898<FH@7-:XN//:<722245556777;BEA832366653574342-,,**48.,.001=>35Qqi;$039?8665553115:96641484,,*),0451/00-+,+**('(+-,(*2511>E@9-$'+6EB4/34323348<=9757=?618<:71-+)'2FE5.)$1A.'(,,+00//./1,(+6;?<5440.-89.$&,.132120-*-0211444444.)),./.,.2368=<6355.*7I0'6S;.*%&1-06;53450495.17:78863,9_J1343512Trhc^D,',//16BME=;5342--0/,,./,.///2466441.,(-9:1/2<ES_^G,-AGHJHCDJLA@OV[gniab^IALPOPM?46:9<>5-3G^kkaSIFH>5)'+/03EPQN@46=CD>;<EH>8<8,(+**3=>=><=B@832563,'(/=Q[Q:-./0220,*`aaaabbbbbcccccfghiijkihiknqruvyzz{|{zyusroljhhhiiijjjihfedcccdcccbbbceggfec``_^__`abbcfhhhfeeecbbba`__``aceeddb_^_____`aacdddddccbdec_[YXXWWY[_`^`dedb^ZY[]^`cccb^XWYYYZ\\\\XTYej^WajkkkjjhghfZRRSQQQRRQRRQPPOPQQQRSSQQRRSRPQX[Zdrwsrxwtrromortvwyz|}{{|{{{ulc]ZZ^_`bbgkhhkia`p~nMRUSavqb^^^]YUQLNYZX\\_^[XXXWVUUUUVTURMz{cgnkb^[XVUeuuqpqv}|wzod```abgntte_dXhvbglf`]^aa`^\\bouwwwwxuv~|urx|rshQRSUTSSSSRRPPPPOPPPOKdkMMKKV_ZRTUf{}iVQOPONOPSSPNMJJJIIHFHIDMUXLGIJKIKLLLRSNMPRTVVXVSQRRRSSSRRQQLXxz[PYYSOONMLMMOQQSQXghaeOfQGMRce[SQRf|eY`][XUTSSRLHGGHMLHORUVV\\YRSRMS]ZPQ]lrjYRSW]ikaVGAHJJKJKJIJJHHNPLJH@DJMNLJIINKFGJGFGGFFGGHHGGHIHHHJSZZVSONNOOOLNRTMJMMNOMNQNMLJKLMMPRMNPPNMNMNPNMNONMLKKKJKIJQTNGCDACEDGORRRNQUQOQSTTQNWTTWXXVTQJFIQSQPQPNQVQBBFLzpOGIKHFYeebXUWWNJIJJIKJJKKLNOOPRQOLKJLQRMJHILNQPPRUWVVVPLLMNMNNJ@CQK9<A@BFIIJJJHIIHHJJKLKPYlxgNINMLMK[eYLJIIOPMONKGDDBBDKRVY[[Z[a_SKNQQPONKGDBjµl7TUKOGCCEFFGHGGFEEEFEFFGQZHBDED@AEFEFHGB>;?ING>??IL@FLKEGKLJKLPTSMIGDCCDEFGFDEGHC==<<<<=<;9CUcgeikg_]\\\\]__^^^\\d\\>ABBBBAAAA?>=>@AA@?<;:9;=@@????@>;=@A@@?>;;<<===>=<<;;;;;;;<;:999;<=>>=>>>>>??><:99::::9:<>@ACFFGHHIHFB@?AA=<FHAAB@@@>?====?>>?AFKQXWQP_mojb\\Y[_flookfb`ZSNJGB=93156679:;<88899:;:779;:9:8898:=>ABB@?ACB?;7478779:;<=<:::99;;;?@=NlX9?;:88975558=BB<522335554554478999:<==;:9866565554568:<8446;<>>=978:<<<<<;9657778;==<<;;:;9536;<;;;;==98642115;?@?=>>>AA@?<987644444425524777566445454233234676434445567777677789:;;<<<<=>>??>==>@CBB@;6235794340@d{{pB/4657789;@<1,.3DE,,88422345555664?@50,/51/24627=733/+)).2660,-,.4<<74Hmc4+32<9323353./9@><@B?7169-+1763541//..+,+*,-./*%&')-/-1>GF</(*&+A?,)1421468=AA=<98:85<ED;50)&$/BD802//;B2067./64321692+-0445558656:;3('+/35552/./033/166543/+*)+,.,'(,15=@>;3320/1./,?j4)(%*C>40+.3243420-2=><<<:;62>91575771Elwo`?(&,./018D=43132.++,,,,...0/014414<>5-+(/>?60-,);U]G29?<BJNPOONB?DDTmrm\\KE=AMOF<7;>;<JN=5AHThqrfK;AONF4+1756=>UcG8A@BB@>HRSNIJF3$%+7KVKB@=<82112/-./.175383,3;A@<82.,baaaabbbbbcddeekmidcimlhhknqsux{|{|}|{zvtrnljhhhiijjijhfcba`acccbbccccdegeb_]^^^_`aabcdgijkjhffeccefggdb`acdddeb_^^_````aacddddeedcaced`[YYYXY[^aabcefgfb_^][_bbcb^YYYZZ[[[ZZ]dbYW_gijklnnmmnhYRTTSSSSRRSRQQPQRQQRSSQQRRSTTQQSSU^feacnvvurnpssomosuuvwz|~{qjb_^_a`abdlpso``ix~TPTPVgpe___]XSPOUYYXZ]\\ZYXXWVVUUWXVVUS}ubglib_ZUUfywtwwupvofsd__cjlihouvd^hb`sujjrsb_ecb`ZYkvwvxvttwy~|rsx{ʼ`QXZ[[[ZYYYWYXTSRSSQSfveRUWVX]`b_]W[tq^UQOQQOONPQPOMKJKIHHGGIE@JVOGJLJIJKLORUTRSSSVVWUSRSSSSSSRQQRPQcl]ZYTQONMMKKLNNQSQWfhb][yFPPW_\\SOQVclZSYZYWTTUURNQUWRNNIDKXZSPOPQQMOY`bZSXfqh[VX[emjbUKHFIR[YQNMLKKWdYKJIFHJLKJIKMGBFHFFFGGGHIIHHHHHHJJKOSVVSPONNNOMKPWSLLLMNMLLLLLKLLMNOOHKNNMNOOOOONMMMMLKKJKLEHQSMFDFEEKRQQRQPQHCJOKHMTQIUTRPTUTSQOMKKKMNNOJVxaI>91AOGEEDSRKei_WTXXLGHIIILLJJKLMNNORROLLKQWYRKGIKOQRRRTWVWXWRKLMMMLKJCEE=<BBCHIIJIIIIJIIJKLLLMNUdl[JPSPSRUcdTKKKNOMNKGFDCCBBEINUXYYY[]YSOMLMOQKGIER¶R>HBCFHFEEFFFFGEFCCEEDDEFEEDCDB??EJIGJKEAAHatYCF?BRFAEFFGIKJJLMOSSNJHDCCDDFGFFEHKC=<=<<<=;;::C\\gchlf^]^]__`^\\[jbF=ABBA@?@?>=>?>@AA@?>;:::;>?>?@@@@=?@A@@??<;=>>==>=<=<<<<<<<=<:9:;=>>?>>>==>???>=<;;<<<;;<@DCDEEEGGGGECA@>?>;9DD>AA?@@???@@CCB@?<?CBBCDGWfhc_]Z^fmoonkjg^UONO[fkeQ=56579:<>>;9:;;<;889:9998899;??@AA@?@BBA<85777799:;<;::;<<;=>AD>HdU;@>:8998765317?>7343344666565789999:<=;98644543454468;><5458;>>=977:<;;::977789:;<===89?A@<:9:==<==>>>;864315:?@@=<==?ABB@>;855433357;:48>AA@><9666654334435676555445546786666689:<<<=<;<==>>>>=>BDCEGFHA62441264<[uxv{g@2556756;<8,(1,/8.'-1222345556779<2/76;>6334656>C?2***,1/260+---8<;93>f^2-3151/13450(/=>26CHG=/190/587421/.-,,+*)*+-46.&'()*+,0=HD6..1-(17+).20169>EFA=>8252:AA=640+();B3.22./8>?<:5+*28<60570*+,2-,.,,0277993-/035860.02231.06;=;2*(***+-1.+*,0=CE=321123451D~B'%%7N@0,),.011210.5EFBA=::725206867?A=^lA+''+.018<>;5542000-,-/--0442369505>>81**19:8420+3EL;1759EMU][PME=97MgoqX6/7CPI5-7JQG?KK78NJEZnpbLEOYXVRC200014KS@<A>CCBDYe]URUS<%%+8@=95238:<AC8.06/(3ACDOUSTUZXL?3./bbcbbbbbabbdeffgfa]_dijihjlmqvy|}}~~}||xtspkihhijkllkjhfdccbabcccbbbccbcdb`_^_```aaaacdgiiiigghfeefhjifb`accddcb`__````abccddeeeeeeccefc^\\ZYYXY[]^adfhkllid^ZYZ[]]\\ZYYZZZ[\\[Z\\][YYY\\fnoopqqqqphZSUVUUTTTTSSRRRQQQQRSSSSSVWWVTUVURRTVTWaegfeginplkjimqrrtw~|smjigijhgiouuvrmqdYh{{RIOMX`_a_^_]WRPSVXXXY\\[ZZYXWVVUUVYc_WUscfhdb`[Ubxyuuqrzwtoljf`^dntqkoxvd^dd^[l|rub\\`acaZZ[cktywtu|pj|sty{ӪvYbfb^`ca^^a`c_WXXXYY_fa\\bcdm|~wqjfa^elcUTTQRROOMNOOONLJKIEEGHJKKLOZ]YPIKJKNRSSTSRSTVXWTRRSSRSRQQPQRRPYdffWPOONMLKLMLNQSRSch[aWOQRXVQMNPRSUTTTUUUTTTTSTYbe\\PKJIJMPMLLNPONMMRY\\RMQ`mg]ZY]ejjh`TJHO^e^WSNOOR[VMMJIGHJKJJNLDGGCEGFFGIIJKJIHHJLLLLLNRWVRPONNNNKKQUPLKMNMKLMLMMMMNTUMGKMNONOOOOPOOOOONNNNOPEFQOIFCDFINWVSURPRm]PT[aYXUUUTQQQPOOOMLLKKLLLLN_\\NcmUBFGIDDjeDOd]VTUOFFILKIKOMKLLMNNMQPOMNPUXXSKHIKQSSSTTVXYYYVNJLMMMKKIGDADIKLKLJFGGIKJIIKKKLMMNOWffTIMS[\\ST\\WMLLNOMLGCCDBCCCDEHOSUVWWXWXYSLJMQLFEGKimACHFFFGFEEEEEDFEECCCCCBCE?=GDCBBBGHHHGHITewrJGB<JJ?AB@ACGGFHJMOSRNJHDBDEEEFFFFIC?====<<<;;:99Laeinh`_`aabc__b[D:??@@@?>>;9;=?>@@@AA?=<;::<<=@BBA@??@???>?>==>>====<=<<;;;;;<<;;<;>?@@?>>==>???>==<=>==;<>ACDCDEEEEEDCB@@><;::::<AA?@@@?BCCB@@?<:=A:578<FOTXZYX_hmopokjfYQNQS`mxzq\\B555666;<;:;;;;;:9::9999999>@??@@@>@ACB>967788999;<;;:<==;;<>CADUPB?=999997653/0:>9554346666777999899:<<:86544434456568<A@9768<>><977:<<;:;98768:<===<;8:?@??@A?=<<>>?>>:76534:?@@?<<;;<>??>=<97754356:CFEKKIIIHEA>><965666654555566544445786566788:<<<?><:;=??>>=?BCEFHKLF=:9426626Plvyux}[6365767<;81-2/-42,,/1234455578:<41CHAB@=9568749JB*&*+/0.170**.3:>><27YT1*)*,/123453./43),6678.,23588520../,***+**)).1.+,,*)+,0=G@.+120-,-,-230158>IE:>>2-48AA953300.0<;,,0-)-7@G@80((3>B6,./+(+051.,''+./35<<6420275.-12122./5>D=1)(,*)+,.2,)*,8FG<410234673QX(%%II1-+(*,-./0/0/8OUNE98882,)08:77@G9JlR()*()*-/:EDAA>6/121../.,-12333794058;;5()277977953672348AHLKP]_T=215AWffE+)1<G<*9Wc_VK926FRH<F_eZZ`di_T__J,.53=I>7>919<?D\\k^JEPO7(*+*-./2.)4DGFG;,082&,BWVWZcipsm^G3,1ddcbcbbaabbdffd`]\\^_acdgijhipwz}~~~}ztsqkihhkllmnljhfdcccabccccbbbbaa```__`abbaaabceghffddhhgfeffedca`abddddba``aa``acbcddeeeefghfffdb_\\YYYYZYZ\\_bdghhjja\\ZYYYZZZZZZZ[[[\\[[Z[[YY`pvtutttsrqqm_TUWUTTTTTTSSSRQPPQQSSSVXXY]^\\[ZYVQUbWLTVVYZY^eif]_jrsrompsy}xwwtolkmuxwwtuqf^k~laKV]\\]a``^^]\\UPNRVWXXX[ZZZYXXWWVVT]~vPWqcfedb_Z^oyytsoox~vppmha_cltuoqvrc]bb^]contws[Reocbb__^^bp|yv|vyt}utx|~˝kWaefc^_`]_hfcc_]]]]^^XLPWWUWdw~}{xtqpfYTWYTRQQOHJLMMNNLKLIEFHKKNUNKalbQIKJKOTWVSRRRTVYXSRSSSRRQPPOPQQPX^kgOMNNNMNMNMLPRRRT^_aWGRPQQPOMNOPQRQRVWVTQPSTQQUXVUPLLNLHILKLNOOOMLJOOLJILXZVTUTU[_`[RJGMPX\\YXPNOOMKLMJMJFIKJIMKDHIADFFGHJKMMMKKJLNOOMJLOTUSPNMNNNMIKRRLKMMKJLMMMMMLMTTRLMOOOONOOORRQQQRRRSTSROMSQMLHGJORSUWWZRIՈTWgp^W]YPNOOONMMNNPOJJKJJJHENNfvr^OKGHxV>C_YVTQIDGKOMGNQMLLLMMMMOPQPSUWWVULJKMSUUUVUUXZYXVRLLMMMKIIJIHJOPOPQG;FHGJIIHJLKKMMNOR^opZMX^VOJQSNNNQOLKFBABBCCCDDEGJOSSRSSW\\\\TJLQLEDHSTKAGGFHEEEEEEDDDEEDCCCCCBBDABFDEEECDFGE@RhynOD<>AP@>?@??ADDCCFKNQSPJHEBDEEGGGHFC:>>=>=<<;;;;:9B[iloj`_abceghhY=9==>>>>===98;>>=???A@?=<;::::=@CCAA@?>>>?>@?>>?>>======<;;;;;;<;<==>?@@?>>?>>>?>>>>=>?>><=?@CDEDEEEDCCA@@?<889:77<AA?@@@@ABA?=;:97;C64443116?EHLU\\cknlicYQNOV`hoqrpeP<534437::::::;::::999999;<@A@??@??@BCC>976688899:;;::;=;::;<CCBHF?<::999976420/7=;65435668899::998899:::86654334468986:AB<;8:=?=9789;=<:;=;96699;===;;<;::;>AA@>>>=>@?<:87644;AA>;:8:;9:<=<<<<<:5235767BKNMMONMLJGHGB>;8776544546666444555775467768:::=?=<=>?><<<?BBCDEFCDGA=<;:633Cdw{uvvS535578<;764887554/-/133344557798.8KE=<<;8579736B:&%)-0/+070)+16;<>>2-NT.&(+01344554100+*+*'%*+*/35963/,,--,***-2/(&((*-//,*++.@I6*-2100,+.1550037?JB9<<7:=>DA9511249:60-,,+-18@FD5,''4AA7+)+((/:?;5/*)()),.04890)*24.+02/01//7@D;/+,-+**)(--*))/8;951/013453]B,&'G:&(*+*+,.//0008\\_Q<43671('08876?C7:G8(++()('*1@IFGA4130.,-,)+42,-125622326=8**589::;=<2/./8EHEHH;4H`P1$.68CQ@)%)/67))Tvl\\^[D/6EGC>@MRWjlfmdPI[`A07:DP@8<0+269<I\\W<0=;.+/,%&-89:3,8?=@<-)189.-@Y]YTZg}kH633ddcccbb`abbccdb_]^^__]^cffdgou|~~~ztrojihiklllnmjhfdccbbbcccbbbbbaa`a`___`abbcbbcddddcbbfgggfdca``__`bddeecbbbaa``abbccddddeeghhgfedb_\\YZZZZYXY[[\\\\\\afgfihb]YZZZZZZZ[[\\[[[[[Z\\gqssuuttttsqvs`RSVUTTTTTTTTSQQPPPRQPV[ZZ]``^_`^VTnnTRRSVYXUXbe^[^ensohel~|vpmou{zxwxuu|yigcb`^][ZXTMMWXZYXZ[[[YYYXWVXabzXklcecd_XZhvzvrrojmturstpeb`cmvwwqg`_``__`aafaeRTlbdif`_cpzzw{uzyz~wuy}ѡi_deca\\_[Y]clf`````^^^^WNNQSLVzxvtux{|jRLOPOPPOOQNLMMNNMMNLJLNNONMIGVe`OHKJJPTVUTTSQVXWVSSTTSRQPPPPOPORW_n]HLNOOOPPQQNNNNSYT`}~XLRNPPONONNOORSORUTRQPPSSPMNMJMQQRSPOMMMMOPPONONMJHHGGFFGJKKIIJGCCCFMGFKMMMJJLKFFKJQPHGIHHLMFGLDEFHIJKMPRRSQPPQRQQMMOPPSQOMMMMNJGKQOKKLJKMMMMLLKKNQQPOPPONOPQQRRRRRRQRTTUWWVTPMLNOOPQQPNRTNAdXPY\\caTE@CGKLMMKMQQRLIJJJIKKJMMO[SKID]QBE]XZRLHDGMOPHKPMLNLMMMMORUUWVWVWUNJNRVXWVVUUWYYXXTOMOONKJKLKJHHKPV^M:FHGGGIIHJKKMMLLLO^u}o]THFJNPNLMPNGEDB@BBBCCCCCBBGLNOPQSW`aUPQIDDITLi?EJGGHFEEEDDDDDDDCCCCDDCBCBCEHKKGEEGGC>YzwO>>ACJG>???>>?BBA@DJMSVRKGEDDEGGIJHC@;>>>>=<<;;;;:;?Vjoplb^`bcdjsYBBD@@>=>====:8:=<<=>>>==<;:::9<=?BBBA@>===>>@?>>??>====>=<;;<::;;;<<=>???@@@@????>>>>>??>=;<?ABDEDEDCCCBA@?;:989988:=??ABA??>>===;97;C75642101467<CENX^baXMGLT^iqusmf]TG:67789;<;;:;<;;:::99999=CCA??>>>?BCCC@<977778879:::9;<;::99@FCCD>998776654310/5;;854556788:::99888899:9786554444578747@@;:<==><968:=@=;==>=;:;;<<<<<<=;::<>@@>>>>=>@><:87755=D@86678:99<=<;;<>;536674229@HQTSSSPNNNNLE<::9768867533334444764458989:869<=>@@?=<==@DCBCCBAEG?<A>8573:]xzwyc=444567>;576;;96540/012345655667504:76653358::752.''+.1.)/7/).38>=><3*JS.-3045445524511,,296-)&(,02540(&*-,+.-,-31)()')/0.-,,*.=C.+5:3.-*+.242100/7=84536BA>EC<94/+-790-//+.357AH@/(&&6C90--3/*5AA:42-)()''''*12-((/40+-1/---09A@5,,//-+***)+*(),-8:2/,-./011YD(.1+9-*10.----.02327b`B.++260*(/8556;:200+*+++))*(%3JJB;440+(**',59/+.013005:9:><859?@==@C9++.8JVPIGB8,0>:-+4;?:0+*.370'\",Yq[ahT949::<@?@WpmackaNMZG,-48A>??3/23445AF4(+.//,.1*)9BCA<401371%.BK:$%C]WC6<cg;573cccdcdcbbb`__a`__^^__]^`aabdjs}{wrmkjiijjkmmlkhfeddccbbbccbcdcbcbaa`a```acddedbaaaa``cefhhd_^]]^_`bdeffeedccbabbbcccccdddeghhggffeba_\\\\\\\\[YYZZWY_`cjoqqph\\X[[[\\[[\\\\\\\\[\\[\\[[^bflrwwuuvvtuwq^RSVVTUTTTUUTRRRSRQPNPSSSRUZ^aaa_Ycj`UPRSX\\[[cie[TU^fifcjtyzzywvsoqz{nox{xsod_^_][YopddXX[ZYZ\\\\\\ZZ[ZYXY\\`s[j`dga\\V[n{ztoqrqrjmrturjfhhikqsi`aca`____``abdhebgfd^]_mxyiU`jsxvy{ӥjWeifec^]Y]ieec^dfcb```caWQSUNV}|zxr`QNNLJNLG^nfYOOPONQROMNOKHHGJFKfdJGKHIQTUTRRQSYXSQQSTTSQPPPPPNOMNUnnRMPNOPPRSUVUTQNRUO`oQGXYQPQNMOOOOOPOOQQPQTQQQQPNNNNPRTVVTRONNOQQQPNNRQMIHIJHFGIIIHGGGFDACLGFEDIICELNGDKKTSIGGHGLPIEHGGIJKMMNPSTUWVSSSTUUSMRVTRONMMMNKJJKLKJJJLNMNNLLJIJLMPQONNOQRRRRRRRRQPPPMKLJUPA?MTSPMOQLR\\KFJIhnXS\\\\aWE;@@CGFJNKLPNSQJIJIIJKLLIFDIIGVz[RGBP[Z\\NDCFFLONJJMOONMONMMORVWWXVWWWPIPVXYYXVVTUXZ\\\\VOKPVVQONNOMKIJPQeUEGFHHFHKHGHKMMKKJKMXjv[II]]LKMKJMMC@ABBBBCCCDCBCAABHNPRRV^faUMDBCGFELa<FJIIHFEDDDCCCCDEDEEEDECBAB@FQVSLKIGEC>Fgh@>CBGM?<A??>>>>>==AFNWYTMFDFGGGILKJ?>?>>>==<<<;<<;;<Qgqtoc``bballG;IGBAA>==<<<::<=;<=>>=<<;:::;;=>@@ABBA><<=>>???@@??===>>=<==<;;;;;<<=???A@@A@????>>>>?@??=;<@ABDEFEDCBB@??;9898897799<@BEC?;9<==<;:9;E76642342233578;@ELONIEHR_imonkc\\UMD;;::;;<<;;<=<<;;::999:=??@?=<<=@DDCCB@;8777776889:9:;;;:97;EGGE>8676544421011379966756998::::987889999886445651133359>>==>?==<;66:@B>:<>??>>??==<<<<>=:;=>@@>>?@?@A<8556669@A:55458989;;::;<=;9997778756?HKQVWTSRQPOJECA><>=;<:63444344476678;<;:9966:<<>?@?@DFEFFDCCAACC=98752544Rty{lG9523666?<6875322353112235676665794./2551,-28=@=4+(&(,02/)-6.)5:<><;966<:7<51664675015331/6CE>4*(+.02//+'*,**0/-+,,((*),11.-*'',54)*3:3+))+,./.-,+)**+++),64:FD<83-(&)---...-695?K6'''(6?1)).71+;F>520,)*+)*))()(((,22.-143/*(/9B>0(,1,((**++))(),3970-*(((,/08'+1?.-.1433100/035;57dS5/+*/1.,+-/25563-,++**,.132,$,NQ9344,()+(+7;0*/211115=AA@@@@=977:@C?.&4?IWYOJG:2.'$&1=CFE6'+3=D:*#!0^u^a]G966766:88G_ribmq\\@;4)'(%$/<:30/0/.**/.(&+1-(-87-0BC<A:)%*3617EI;,#+GYI)\u001c8^Q+&+(dcdddeddec`_____^^^^__`_`aabep{~~~}~uljjihijijkjjhfeedccbbccdddedccccbabaabcdefggfcba`_`bdfggda_]\\]_`bdfggggffedcccbbccdcdeefghhiihiheeeb`^]\\\\[[\\Y_hggilmnqqg\\Z[\\\\[[\\\\]]\\\\\\]\\[XW_ksvvvwxwvutuq`RRUUUVYXVVUTTTTSRQPMJJJKMQW\\^^cbZYa^VTQSX]aee`[WTWY]``bebfnpqtttrx{ggx{ty{ib^\\]ZVtWSUZ[\\\\]\\]\\[]_YSc~ioya^ce^]^dx}vrmrxxtlotuvwndgjhcdhhfhkjihfcbbaaba`ulX`ffc__`gz|xkkruywfW\\fhgf``ZYinhkd_eedbbbceaXRQQPNUqudUNNNMMJN`mkeUHPQOKHLORSQMGHJPLKf_HJMIKSTUTSQOVZPMONQSTSPQQPPPNNONQc_OQQOQUXXWWWX^^TJHHJHCGMQPONMMNOOOOOOPRZb\\ROOOOOOONNPQRSTSQPNNOQQQQONPOLJJJJHHIJIIIKLLLLLLNNMKJMKEHPOMKKKQSJGFIKLJGDEGHJLLMMNNQUXXXTRSSUXXUX]WRONLJKKJJJIIIIIJLNNMKMMLLMMNPQOOOQRRRRRRUSSVZ[\\]]TR^TLNWWSQNNS_k[JIME;FNMQVMEKME>DNTKJNNMLQPMJIGGHIIIHFHIHGdi?GED]W\\aMEGGGFFHJKJNRPOOONONRTVWXVWXYSJSX[[YYWVTUZ\\^\\UMHOYZWUSPU\\[[VTNPQRJHHHGIMQJJMNMKLLLLMPZTJY}KLMHGMNEACDDCBCCCDECCCA?AINORVZbcXHBBDDGDUU@IHIIHHGDDDBBBBDEDEEEEDBA@A?FRWTPMJFBB<?jV?BABMF<@AAA?>><==??DNWZWNGEGIHIPRNJA>B?>>>==<<;<<<<8Mhnqnc``b`cq]<<FEAAB@??><<:<<;::<<=<:9899:;:;<<=?BBA>:;<>>?@?@@??>=?>>====<;;<;<<=???@A@@A@@@A@@??>@@@?=;=@BBEFEDCA@@>><87888987778<ADEB=;=@@<;:9:<E864422333344445469=BB>@GT^eifge`ZQH?<::;;;<;;<<<<;;;:999999<==<;=>BDDCCCC?:97777666799:9:;:979BIJH?7455322211012247;878669:9:9:::8767788755335663//0136:<>??>=;:<<75<A=89<>??AAAA??=====;;=??@@@?@@@A@9435556<?:78744777789:::<<<<;:888787669<BHOUVSQQPNNMHB=>>>?>;:;:7444469;;;==;:::99;=?BA@ABEIFCCEDA@??>:51254560Dky_4864466/28887520136642223456676789733444/)+/49:4/))&'-010)+71,::<?@=867+*:8/0588:850.113217@CC<.(),038;92,..),0/,(&''&&+/20+&%')***)+//,+,02,)+,,+*+++++)(&(9IE830-(%&(,-./009=/6C/\")+,12.+*/3.*<G8/-,)(*,1-)+-)(((/1,+3:830,)+4@:,(-/*')++)*)*+,-385/,*(')-1.)+.1502445554334567859O=/2.-00-,-/3563/-+*,-+(*18:5.)&>D/,0/'',,-8;3(,10/0049<>?>><;4,((1>B<16HNQY[O?2.21+&'2BHF@1'+8JG/%16Bg~tf]G8779;6//41-Bm{w|gE1))+&%(!)7400/.--+(')*++*(),2994AA225)\",7<::<:751*5OT8 #11$!&'dddddeeghebaa`___^^^____```achnrwyzt{t~wkhhgghgfffgggffeddcbccdddddeeedccccddddeghhikhec````adeedc`\\]^_abdffghihgfgfedccddddeefghhikkkkjhgfed`]]][[\\^abehihjkmqpia\\\\\\[[[\\]\\\\\\\\]\\]\\ZalpnpvxxwvutuvsbRRUTVYYWVUVVTSSRRTUTSQPOPSVYZ]c`Z\\^]][XYZ[]\\YYYUSSUWWWYWX^dktvvtoswifqupa^^_Z[nLQ[\\\\\\]^^_\\VWYVgl_]``[achtohnrw{{tjjxwhcfid_dkkknpponkgccdffc]RMUbjgbaaazsxbqpqwxfoa^^alhecZY[anpkmmcdgedddde_XROOQNUrzy}}{p_RNMOPRLbv[YSMTYXUQPLP[b^TNMROLXTKNOPPTUTSRQPUWOMPNOSTSQPPOPONNOPOQQOSWY\\][ZWUUTPOIEFECDFGJLMMLKKLMMMNOPOYjgYQPOONNNMOONMMOPQPONNPQQOOONNOMJJJKHGIKJKNPSRORWZ\\YTRPOOPRRRRRNJNQMHEFK>?CKKGHJLMONNNQTWYXVUUTVXY\\sZNPOONLKJHIIIHHIIJLMNMKMMLMNOOPQPQQQQRRRQQN\\djoqsv{y|{l`[USTRMRej^LHLKMLIIJKOKIQQDAWnxnQADLMOMLKJHFGFFGGFFGHHOJDLFERT]_QKLIGEEEHJJLPRQOOPONPTVVWVWXYUJTX\\[YYWVUTVWY[YVTRSUWTRPW_`a]ZVOPYPPKIIJOZ\\TRNMMMOOOOMJMKS{qRJGGDIOHCEGECBBCCCDCCCA?@DILPTW]cZICEFGLDSMFIHHJJHIFFCBCDDFEEFEEECBA@AABGNOMJGJHDFLoj@B>;ML=@AAAA@@@????>CMV\\ZPIGHIHLTRLH?@B??>>==<<;;;;<5Ggopmeb_^`kkTB@BA@@BABB@>=;<<9:8667::999::;9889:=?@@?;<=>>?@>=>>=>???>====<<;<=<<=???@AABABBAA@AA??>@@><;=@BCEFCBA???>=:6688899988=@AA>=>?@C?<;:9<@G76431022334454444465546;BFO[\\\\]]YSK@=:9:;<<<;;;;<<<;:98889:=<==>@CEDDCCBCA>;86555677899::;:975<IOI=6444322211022346;;98878:;;::::876566543235750/221248:<?A@=:75:<66?A828=>@@BBBBA?>>==<;<?@ABA@?@A@@@;986646=>87975446667999:;=>??><:8766556568?HNPPRRQQPKD=9=@@CB@B@<853469;;<<<;:<;:<<BJLI@=????=?A@==<<;73124666.8fv}c6775571.357874568:;;9422344555589654553/,-1/-22//0.((,01/)+74.369==:531-/30.0268785331./127<>A@2(()+6CA5..0-*+./.-+('%$',13/,.,)()*('(*--/58.+/.--.00-+,*((+7E@4//,)&*46/,046<8,/3+&),-+,..+,.-.;@.(('(),01/**)**++-)&-:>92+,-+.54/0220/...-,,.0101210.--,-./*$,/0326578875346677768<1-2.-22.,,16663-))+,++)).44-+-(/1'(**%),/:@6/,21-+-25645:8432,)*.5?D@<GQJLXZJ2&0;522/.6953+%*=K=$*IXZgrm_L<:968;6-+01&1d`=2.,,,-(%0:8544222686377+%)-.-/17A=*(.(&/89676556777=C:*$\"#%$)0ddddddeghfedcb`_`_^____aaa`ab`_dmorjh|xgotlfeeeeddddeeeffeedccddddddeeeeeddefedddegiijjjigca`^_adedca^^`abdfgghikihhhgfddcdedeeeefghjllkkjigeeda`^\\\\\\\\\\Z[^aegilnppqne^\\\\\\[[\\\\\\]]]]^_`cgiimuyyxwvtttuscSQUTSUXXUTSRRTRSVY]]\\XSSSUVVW[_][[^dda`_^]^]]b_TRUX[[XWY``ajmnjbachju|w{dY^`Za_Za^\\[\\\\[kmwp`^zfhkd^_^]^`cffgow|~xsyvtx~vheie]bjihikmnprjedcdaXKR\\hklmj__]eymi^\\rjiotytjq^][aig_]]cruomjntjhiccdddc_XRQQPO[||th[QMOQRMNly\\W[]_invkNUeg`ZUVUNNPNNOQRRTSSQQRQRQPONOSTRPPOOOONNNONNRX]aba\\WRNNQTOFDJLKJIIIJJKLMMKJJKKKKMPY`VORSOMMMOQPLLNNOPPMJMNNONNNNNOQOJIJKGFJLNQSRRQOSVWWWTPNOPRSTVRVXMMOSKE?AThKDMJHJMNONLMORT[WZYXXYYZYtXHPPNONLJHHIHHIKKLLMMMLKKKMNOPPQPQRRQPQQOMF]sttvy}oWPQTTOUfxMGIJJJMNLLMJGELKOqzrG?JNKJIJIGHGEEEFGFGGEFIHHFEQ`UJJLJGFFEFHHJLOPQPOOOMSUUWWWWYUITXYZXXWVSQRW]djlgVLUVRRTWXYYYZZXTWVVSRRQOSb\\ROLLNQQOQPMLKHBRSJJMIJOFBFGDCCCDDDDCBAA?@BFJMQUZ`^PHFGIJNK:FKKJJJJJHHFFFFFFFFGECBBBA@@CDCDHIFEKLKQJ`Q8B=@T@BDCBB@A@@@???>BKX_^SKHHHJOOIEB:??>?@>>==<;;:::6@^tuog`\\\\cjSGGB>>>>@ABAA>;;<=<<?CHNQMGCBA@BFOUUSRMEDCBBA??ACB?>>>==>=>=<;<<<<=>==>?A?@AABBBB@>?@A?????><;<?ACCCAAA???=965799899::>@@=<9:>?@A?==<<@CI775422333444544565643323559CGJLOQSQE;:::;<<<;;;<<=>=<;:::;<==>@ADFECCBABEFD?:8656678889:9988834FVO>44542222211446788::::99:;;;:::876776655557640499659;<>ACCA?95788<>?<9<>@A@???AA?@><<<<<>?@@@@>@BA@@>>;8777::6665444666897899;=>??><:8422466799:BMRSSTSPLJF@@ABDA@AAA?:756679;>?=:769<<CNOPL@<:789854786995223332403btu]058577//7778=A@?@BD@:5323445676::3.0472+.65-+.0234.*+-11+&*64)(/121/-./11112342.140140,01125576.*'%(6A6)+-/-+,-.010+()*+-146771*),+((''+++-01/-,+**--,+*)))))26340(%&+690),2684/)''())+++./++157;6+()))+21/.,)'.100,'+7?<74.**+*+04655520-03/-+*/36310//00.+*('*.033557987544556557984,+,/34/)),0/30*''-.**-..,+*,0-*)')))+./8EA42221,)-354127422437>AADC=;ELFJPLE>:<<973*())'*+*2?B5#.Seaah^@3440-1641/47,/]h>294.9E@/7DC;7:==<?ABBC9'&/120'$.83''*()+--,037789=9.+-.--*(&&,eeeddeefedeedcbaa``_`aabbba`a^\\afecadqsdbmleddcddddddddeeeedcddddddeffeefeeggedeffghijjlmmkfb__accbba_`bcdfhiiijjjijjihfdddeeefeffghiklllkjigcabb_]]]\\VUZZZ`dhlnonnnmha[YZ[\\\\]]]^^^`bcdehovz{zvuussstsfUORTSUWWTRSSSSSTUWXZXUTTTTTTVWXZZ\\__^^adfiikpoe`abjl`Ybjfdbcda`_W^qorz||a^`Whl`e`[[[Ycyomqvktofb^b^\\]`djkmp{}spz|rpxzoggd`aeecdgkmprohdcabktpuwlfkib`dfjdnffdnd`bgkpky{xroddfd\\VYgypnpuuk`\\_abbba^YTRPQQLjp`WPNPNGXlaSS^eiwǠaR\\``bab]MFHJKLMONMPPPQRQPOOONORSQPPPOOOPPOMPT\\ab]USX^QEIPUWTOMMNMMNMKIIIJKJIHIIIILPPMSYYNJMLKQYUIJRTTUURPNNONNOONLMOMKJKKIHLMQVURPNPTWVTQQQPPQQQPQPRVQNNUREXJsN@MLKJJJKKJMLTh[X][XQTX[^RLIJKKLLLJIHHHHIKLLMMMMLIJKMOPQQRQPQSRQOMKJGUgknqu}ZOTRQR[tzOAGGIIJLMNMJFDLHPty`ILKIIJIIIIHFFGHGGGHIIIJHGP]MEIKIIGGFGGGIIIKRRMRWUUSUWWWWWVKUVWWXXWWX^fmqtzpZPLXZYZYUVVVVXXXVVWXYYY[UMLOOPNMORQOPQQTSQQMMPQPLPQEBJJFHHHIJLMJEBA@@BEFIMQW^^VHFHHHJGTZDKMLKIJKJHHHFFGGFFFECA@ABFHFFKHHHFD@CIUFAhoD:?GOEEKIDCBAA@@@??>>CKVabWLHGHMOE=><8;<=@@=>==<;;;;;<AWrvmd\\Z\\f`@>FJ<<>>>??=>ACCDFEEQcmwqcWLJJJKShrrqlaSJHGGGCEMTRKE?>=;=<;:;;<<<<=>>@@@ABBAABBDC<;<=?@>????=;;<?AA@A@@??>:756799:::;>??=<9::=>@@>===>BCG87544333344454445566533344455;B@BKSLC=;<<<<;:;<<<<<<;9:<=====>@CDCBABEGIJJHD?:976778889:9988875<QWE5354222223345688999::99::;;:;:86677774566556;AC?;;=<=?ACFHJLI=9BIFDGJJHDBB@???>@?><;=???>>>??>@AA>99=:89::85444322344587788789;<<<:7311124:>??;7?LPOPSQOOMGBAB@???BEC@>8116:;@@<:54:>=>BEKROC:87652145566534644233-OyoE0875652/1688IWLHFEDA93444456788;8.+1880,/44321110.,+.355.'-87.))**())'')+./0383*-0/56/-441+)*))))')*-..,--,+(')*-02/.1331//6=;4./1,**((),*(+10,)(('))++*))))(&)--,(+4610-(,/-,/.(()*)(***+...47761.033-/3110.-.3554148==854/)'*))/554440*'+22/('065310/00/-+))'),/244579755646650/6=:60+.254/)''',0,(((-1//488306:4-+****.0/8CD<53000,+/2321266668:EJIE@:56>FKMFCDKJC=>;/$$(+*-5;<<?8(/Tf^ckN('**&'+143476-2L`{f0/?819=66CIB87AMJB?>@FA0&(1132*'(,*'()('''&%(.7;@>:;2((0781++)'eeeddeeecbcdccbbbba`aabbbbbba__abbcdglmgeggedcbdddccddddeeeeddeeddefggghgggggffffghhhikmoookeb``aa```_`cdehjkkkklkjjkihhedeeefffghiijkklmlkkifbbba^]]\\YWWXY[\\bjmlkjilpk`ZZ[]\\\\]]^^_`bceehpxyy|xpqssttvyn[RQRRUWWWUTTUTTTTTVVUTTTTTTTUVXYYXWXYZ]bjllllkjigkvso}xgegbenkb`dqxmlwvh`Wr{{|}f]e`[YY_vyspc[ddf_abe`Z^djkklnr~|~}zywwuuxneedca_`bdefhlsphebcip}|}xmgddfiwnq\\dnh]_bfklkrnZ^vyuqofZSVuwwzxxvfXY^`a```^YURQPOO\\fqubVPNMORrl_ZZfqu{jU^^Y]icTLFGGIIJKIGJMNOPNONNNMNQQOOOOOOOOPRV[][WSPMJPWOGJSXQPUQPQPQPOQQNKFEIIGGHNQPQRWdfQBINKIOX[TRUXZ\\]^]URTWYUNKJJLLLLKKJJMORVUSQORUVUQONOOOPQRSTVNMRNLOJPǟVlQIMLONMMQTU]]g|YP^_\\V[ZZ`MGJFHIKLKJHHHHIKMMMMNNKJJJLMNPPQRPPOQRQNJFGJLQXirtxnNNPKRdx~gHDFGGJJKNQQOMLLLKSQGb֭]FJJKLLJIIIHGGGGGHHHIKMLKOOFHKLJIIIFDEEGGGGKPP\\`XTTTVVVVWXMVUXWWW\\dntu~s^LLNS_YTZYWTVVXWVTUUXYXXYXURONTVTRQPOPSV^^VNLRSNLKORJFMQNPQQQQRTPIEBA@BADHJNVZ^VIHLHGIJKJLMNMKIIIHGGGFFFGFDB@BBBCBLVLJNMLNJHLQMHFLpT>=?FKCMMIDBAA@@@>??@@CGP_cYNHFGNM=9:;8::<B@?>==<<<=>?BCNhri_Z[a_H77CRD:><<==<>O[VOMIKS`glbYRLJIINW_bcb\\RMKIIIIKQ[_ZVMBACCEEB>99<=><<>>@ADEFB=>??DKG@<;;>>@@@@?<;<>AABB@@@>;867999:;:;<=<;;;:::=>?@><;<=ABC776233334455533334665344565217>:7>KNPI<=>=<<;=====;:8778:;<==>@B?>CHKPROIGFEC>:98777898:99888843FYN8376312223565778:=<:999:9;;;;;8665565477:<=ACDB@>?>>==?@ACISVPKLUWTUURPMLMLKKHC>:;::@B@A@?=<<<@C@82377889:86654333344666777688:::;86445547@CBDD72>JJIMPPPNJC@A@@?@CECAB;536;=??>=<<??=98:>GI?766545556887546766557-Gz_357643566567=U^MLKHD=73464455788<8+*4:70++3>B@?6.++43-07=828>A<.)()**+02/-+**-45/.2?NM:-461*&&&()*,--,-164.+($$'(+25898530*'-9>;;;8/+++*)*+,,.,,,,,-/00-+*((*,00--27?93../.--,**(&(*****++,../.00257:98640/1210696645?C?:641-))*+-266523/'%&,1/@UP7./,//..--,*)(),.25455555664473*,8<635578631/+')./+)*()1868GOH@II5,-+)*,/,3AE<852-..,.00/0/055444;JKE?83467@LOMKEACHKKH=,&-2/2=@<AHD:=Sb`gc>&'((((*.368731890`V$3@83669BE>88@MRLDBA@B8,,+/31/-+))**)''(('%$%'7HJ<15;50122,).56eeeeefedcbbbbcccccbbabcbcbcca```acfgghhhihfedcbcddccccddeeeffeeeddefgghiihhggggggghhhikmoprrnga__```__adegillllmmmkkkiggfdeeffhhiijjkkklmmlmmlida_^]]]][YYYXWZcfffghkpqkfaYWZ\\]^^_`acdeehqxwv{xigqssvwxzwhTNSUTWXVVWVUUVVVWWUUUUTTTTTUVUVUUWXXWW^if\\Z^_``_pv~xlomhkopttomu{_Yt}xn`ag`]^[dsxvihdacdb`^begaZbknlllkkrz~zrsuwy|uhbeeba_`dedcdfkgfedtsah~rVWnteV]`bdhkwqcjsqrx}~wqfbnssurpuyraXY\\^__^\\\\[VRQPMYb[c}vaTPMJ\\gmuyzmssiqz~~bT^^Z[feUMLLKIIIJIGFINLKLMMLMLMPONOOOPRTUVWXWSOJKOKHKMPMLS[TPTSPQQNLNTXYUMIHGHOVYYZY]fbO@FMKHHJPXYUSUZbdb`YTW\\]ULKKKJJJKIHILOPRTTSQQRRSRPNLKLLNPSTS[\\SQNKMJHoMOEHJNRW\\aehqptUJafa]]YVTLFIIGIIIHIHHHIJKMNNNOPJFJOPOOOPOOPPOQROLMXUINGJg~}dLLMYiw}xxOFHGHHIJJKPVRNMKLMJH]ϾyQKONGJJHHHGGFEGGHHIKNONNPMIIKLLLNLGEEDCDFFFJQXUJJRRTUUVWYPRTYWS^n{~z}l\\VOMMR\\GFIKPXZ[YWUSSSUWWXXWTSX^cd^XTRRSW\\^YTPNUVNKLNOJKPSRQQQQRQMJECDBABBFONNNR\\[KLMHGIJLLLMNMJIHGGFDEEEFEDB?@DEFEBFNHMPKNHENeXFHGL]B>A?@AJOMGAABAA@@?>>@ADCIZcYNGFHIC:::;8::;?@A>>=<<<=>?A?AYmf][__N:7:9CL9::;<?>?N^aWMJKNV\\b\\SMIIKNSY[\\^b[TOMJGGHNV]]WUPIJMPPRRMA9=A><;=>@CII?99==<@KNJA749>@??@>==<?AABCBA?<9788:;:9;>;<;:9:::89=??@><;<==@A77602333445553332355533555534;=769AJQTF>==>==???AEEEDB@>===<=@A@AFOSSTQHDCCCDB<:9778899:9877763/;VU;376202235667779>DB;9::99==;;:8886568<ACDCCC@>?@A@@?=<==<<=BGUXQT[]]\\XVUVVUTSRK@=87=AA@@@>9537@FA544334569;:86443324444677668999:989:::::;>BABEA54AGEFLPOMJDAA@@?@AB@@?<=;45<@AA@ACCB?:889;865455446866BC54:866659.@uT,64542377667<HRRNLK@774454556788:6,.785/**4ABCD7,++:9+*7@;=CGI>-+,.1/.9>94.**)*//+-AT^R1).//+(*-.///.135740,*)'&'+269851-+)''-49<:60++++*)*,-.012345442-*(((*.7701CQO;,*030.-*('''()***++,/2.++)*046313551/01108=<5.1?C>:7640+'*1799;9542,*'')-SoT3-0*.,,,--,***++,02242./5764462-2;7,,38::7333/,,,/.)'')2;9>YgQARI.,-*)+/)-BFA<;50,-.,/0/.00/34018EMH=73154/6DLSUH<BPVTRJ4'-102989IQNRQIRb\\B,(((()+*+.47635:2*Un?%894432<E=16CKMLKIMNI@0.5/-3/-,+)''%''(---,)&$.DJ:+2;950,+'$-=Cfggggggeddcabcdeecbbbcccccccaa```abcccceghgfeddddddddcddeeffffdddefffghijihihhhhhhggghjlnotvtmc`__`___adgilnonnmmmmmkigffefgfgiiiijjkklmmmmnnmmib^]]]^_^^\\YWWXZ]`adjmmopnlh]VUX]__^`bddfiputsuskgmoquxww{{paUOPVWVWWVWWWXWXWVUUUUTTTTUTSSSUWYYYVXfj^WXYYYYgdesvvlknpssrnmkgyj[yrsib]^fb^`fmkhk}yogbdcbbacddfabhlkjkklmklv~yru{}yodabeecbccddeegea`eegylt|y{}tq~p^]ddcdcdl~xu}o^chgdcpwg[ZZ\\[YUX^^ZUSQPRbhde{t]ROMZutmprqp~kjou}ZRVYY]cngOIMKJKJIHKIFOROQOLLMLLNNMOQPPTXXYUOLKLMLMSWPMJIMPWWMJJJOPIJMNSZ[ZZPJUdgVMZghfO<GNLJHJMPSSPPQT`eb[TRSUSOMKKKJIIIGFHKMNOPPPOONNNNMMMMLLMLJIDPd`QMMOUTWVbPDHKQ_fjot{wwVEW]_[XOKGFFHGFGGGGGGHHIIKLKLMNOKGKRQPOOOOOPPOQPMKLYTLgSBX|aERgwwwyrRIJIHFGGHHJPWQKIHHGHXԩȢiWHGMHIJHHHFEEEEFGGILOPSRSSPMNOPQSQNNMKIEDDFFJHCEBISTTWWWWSNUTR`vkWVVPPQQWBCDKXa`^YXTSSRQUWYXURS^ffeb_\\ZZ\\^^WQPPORSRNMPPNPTTTUWUSRQLHA>>>>AFIMLNHMWbRPMHHIKLMLLMKIHGGGDCDDDEDDDBCDDEEDGFDNSL[ULOLNHGFHFCABAADNOMC?@BAA@?>?@@CFDBP^XNGGKB9999999:88@G>=<<;==>>@@@Qfd[\\_WE;9<76IA7<<=?A?<K[WNKJLOW`^VLJJMRUV\\^^\\\\WOLJHHIMQTURPNLJNPORUZYJA@><<<>@CFB73<<<:9=FONE<:@?9<=;;;=@@ABCB@=:77889;98=H:;;:999989=?@@?>===:<@56403333344443222357743433228??:98;?GQOC==???ACCFKOQQPNLLKGA@BDFMRVTOIEBACCDEEA<:977789:999876405LT?6;73022356658?BGHC;9:;:;==;;;::876:@HNME?=>=@CBAA@@@>><<;<;?GPXSRWZ_c_^]YVTTRNNM@>?@@?>>>90,3@G?687311258::987653344455675577999989:::9987;=>BA726>ACGPTOG@@A???@@@@@>=>>:45<@@?ABADD?:997666446789=@@SR:=B955657.4iR)7444225665765GXNDB<;<64544667766414984-**-22581.-.37/*5CDFHLK<,.014/08852/+,*%&(),?U]T3).0130......07;8344.,.,**+/3430,***,-,*/31/-+*++*)*,,/57889961.+++**)+160,;QK</,01..+*())(()***++,040*('(+-,*)*+.10///-287/(+7<::::=;.&-8=>=><6584/*&$%>I5,03+,***-,+**,+++,./20*(/55455469=4)*-08<84344/)'*,(',29<:BepG9K<*,*(*.+-?KE@C@5.)-0.-././//7<::HQJ=21210-+2=DHJJLPWTLE=1,.121108KQP[W@FS>*-.,,,,-,+,/222234<E;.,-*.224<?55FPKHHLPUVWK1.B>.23,++-/-*/217?HD70.(<VG,.3221..*#.?Ahhiiijihgfdbcddeeca`abbccddcaba____``_aceeeefffffedddddeedfgffeefffgghhikjkkjjjjjihggghjlmpqqlea`_^]^_`dhjmqttqnllmljigfffggghiiijklklmmnnmnnmmmida__`_^_^\\ZZZZ\\^_bfiiknortri_ZY]_]^`bccgmpqqpoqqpnmqxzxw{{nZMPVWXXYYYYYYXWWWVUVUTSTVVTSUWWXYZYX^fea_`_^]bg]Z`YWfvzvroruusljplk{yitua_XWW_eY[^bjofdzsfbba__cfeedbjnifimopmlnnprwzz}zlcbbbddbbbdefffecceefw}|{tvz|utrqohfefeX^e^cddeeor`WZ\\_]^eZ_eYWTQOUaijfys\\QMSm~x{kM\\iXSNQTTW]mqWFJKHJIIGJTUQRTURMKLLMOOOOOPPRTTVTOMNOQPL`nILLPPJGIIMNKKJINTWX_^]hooaEC[ndJGLIHJJKLLPSURLMXc\\QMOPPMLLKKKJIIHFEHHGHLONOOPQQSQOMPPMLLIGIDGPNNLMLOWMclTbVGJIVikmszx{VDMPWSNHDBCEFFEEEEFFEFFFGJKJJKMMMMOQRQPPOOONONNNKJJHGLZOBLf}aGc|qwV?HJIIGFEDEFLVOGEEEDAGmubEFUNKMJHGHGEEEEEFFGGKNQUVUUSRRPRRQQPSWYZMDDEFFCEJ??VXOSYWVSKNVigSUUURRRQSGSertppfWQWRRRQSVWXTQS[\\[\\]^^``cb\\SPOPQOOX]VS_d]WYaovqe\\WSRSSPIEGMPOQUYWPZ[OKGHKNQQLKKIHGFEDDEDCDDEDDDDDDDEDGEBKSN\\vqL@FFFEDCBAABFHONKE@@AA@@??@BBCDC<EUTLHIE=<;:998888;DLFFDCBCDECEGGP`b]^[QGA><<57J7<<=>@><ALPJFCFJNNJIIFFEELFGJIJKJFEEFHFFHHHGGFCBCFHKQXbeR>:<>>???>:;<>=;989>EKQQLE@>?A><;<?@CCA?>;977799985NN9::888888:<?@@@@?>=8=?5432334334444233238>::=93324:?@=988:>JRLB?@ABCEEGHHJKLNOPOLIGHKRWTOLFCAABCCDFED?<97778889::877534?LF<=7433335667CJJID?:8;;:;<;<==<:9:=CHKIA=<>@BDCAA@?ABA?>==<@LJISTSPOU]cba^ZWVURSQI@=@AAA??<3.2;A;47521113577::9975665444665456779:9:986654457:<<:637<AFOVUH<;>>>???@@?>===@=22<>=><<>>:7799766547:;;BTZVI@STF>86786/PN+3555444445547FGC@@CFA73554567554457863.+*))*-111/.,/410>HHMME8/0011.591,,++*+-++/0@Z\\D,/7416:9876303=?60463///,+,.0330*'*+-11,-0/-+*))))(*/1125;=733.,/1.*('%)4<94A;1.)-1/-++))*)(()+++,,-0/*()(%%'*&%%&)+-/-*,-**()/47:;<@@2,6>=@DB<21763+*.154.+4<0,,**+,,**-.*),/.01,&(.247768;94/,*/;>855422.*$&)047;><A]_93>3-,*+,*+BNC@?@;1+*0331010,,2=DCENN<,-7<90,258<;8GV[\\VJ6*+/1674/+3DKOWP>??./876765-),--..--,1<4$,3'%**-7<77FSPIFHNTVZb_C7KW;&++((*28>A<4-:WP:56*0PN0)-,/00/,*4:4jkllllkjihfedefeeda```abdddcbba`_______abbbceeffeedddeddghhhgfggghhijjjklkllklljjjiihghijkjiigdb`^]]^_`eilosvvvqkjkkjhffefgggiijjklllmmnnnnooonmmlhdb`^^]^^^^]]^_^__`bejruv|{rg`^\\\\]]^_`fhghgdgorlemz{xyzz~{fWRSV[\\[ZZZZYXWWVVVVUTSVX\\]ZTSWYZXVVZcihdekh]VX\\YT]hilrwuuwwwxxyvkv}~yqrofbYch[\\\\]`hjbltlfbb`^^cdeecbid_bknprnkiiiinv{yma]aabeedddcdedaefoszuvw{tsuwtqrjtmeugYa`accfki_Y[ZYZh|Zb_ZTQPT^hidqq[NMf~qzfRUVOKOOOPRQPR_l\\GGKIIIIGG[m`RQONLKJLOPQQPOOQRRSWWTOMONPQVi|oGLKNOJJLLMMKHIMGI\\qtswuyz^;>SNIHHGHHHHGFLVXSQPRSPMNPRSOMMMMKJJHGGJGEEGMRRRUX[[ZXUQRROMMIHLIJLKKIKJHEA<LIKLQMMdrmpw|z|XHQPPIGFDDCDDEEEEEFFDDEEEHJKLKLLLNNPRQPPPONNNLLMJHHJJGCFKQVU_uzWVytnsrKEIMT\\_YTPMIJPLFEHHIH@GFGQS^j_MV]QEGHGGGEEEEEEEIHNNQRXYWUSRPPNMRVYZ\\YOIHCEICJMAEZOBIX\\YVL\\yUTUTSSRQQPQQXj{urm^MLOPZWVXXWUTTTUTUWY\\___\\URQPRSOO\\je_jqj[Yh|zi^[[`lxysf[USSU\\[YLY\\IEGHMOQPLJIHGFEECCEEDDDEEEDDEDCBBDC>AHHMfx[BDFFBBAB@@@IMNMIEA@@@@@@?ABB@@@;>MRMMI=79::9888;@EJMNOOMKLLKLJMJP^aad\\NHJGCDC=FE<;==>?AA@CA=;<><=<:A@@;97348;;@CCCCCCDB@@@?>==<>AEFHOWhhK58AB@>=<>@?>=<;=A=7=HOSULDGKFEA==@BBA>;;;9789886;aB:998777889<?@@@AA@<7D@353233444434423323<A>BKI@868?BB?:99;;COQHAAEHHGGEEDEFGGGGIJKMRVXSKDCBCDBBCBCEEC@<87777667788867767BJA;97543567:CLLKG@;9:=::;:;>?==<AEHIHD?>>?@BDC@??>>??>?@@=ANSKKQOHDHLQWY]_^ZXWTRRLC@CCACA?=7103773432332223678::88887544554335579:;:8544345668;;98645>DJTYL<8:;;=>??>>===<>@848:::997446678756769;;=FYdS:@]cYRH>=>80FH36665444444536>2;HKJJC713455786367993//.-,*)+,2642/,*/2.3<BHH<2110.,053-((('(1;:772:PN9-.33049AGGB928>7/,+*+++*)((*1892*(+-..0001.,*('''(')053+0:7*+.)+;6-,+*((/BQQF5+)%+42.-,,,+*)(*+++,,*+-*'+,(%&+-+$'&%).,*+***)*+,17::98548<<BEA5++-.4.'D]\\ZS9.<>;;51.,+)*,,++/10030)),/156446542.*09:665/-56/$&/41038:<E@,)20-,-1,&:LE<<;94.047689:92,069;<<:814DSSKD>:66753?PX[\\WB.++.685/(*:FKOI;877:=>@BB@2()-/0,),++.+.392//+.<?6:MUNFCEKRZekj\\D>PL+&0+)'%'+)'(#:XE6693(6</,///.,**2510opppoonljiihgffffdca```bcbbcbbbaa`__^_````abcdeedddddfimsspnljiihiiklllnmlmmllmmlkjjiihghhgffedb`_^]^_bgmqsuwwxrnliiihfeeeghhijjkkklllmnnooppoonmlkhfb^_________`aab_]_bowvvvz}zhZYZYZZZ[[\\ZZZYZ_fe]ar|{{}~~tdXQU[][ZZYYYXVVVVVVUTTV`e_\\]YZ\\YXWV^kogerwcY__cgiha[brzzxxwy}xstst}uwuqrmjxuomjdgmgdeddcc_]]bcdc``_]\\_fnpoptxvyp`bbbedddeefhccimsrsyuuv{~tstvwxxvrkqY]_]^_ahka[[[XW^di[c]UROXeihgqymXPWptc[jeU`[SXTONNOPPOMR]XLIKKKJIIGOcok`NHKLNNPPPQPOLKMMQXXUPNNMMQKA@DedHKLNMJKLLLLJKKFJgxS=:=DFGJIHGGGFJTWUXSNRVSPSURMLMLLMKKIHHMHDGJNRTVXZ]]YWWVVWVTROLKKJKLKIIPRFA<GRQNPLZquq{vw\\KMMOIGFFEDEEDEEEEFFECCDEGHKJJJJJKKNOOOONMMNMKLLJIHIIIIIKOKCBXulPmrppdHKKRersokgcbaVLJLNNNORJFfveAZqV][LHIGGGFEDBEFEIECIOUZ^ZVSQPPPSW]ZVSMJWYFCJAFM?MYA4CQZVSdmMKTUSRRQPQOOKGOYheeifXDKOW\\^ZPV^a[VXYWWXZ[ZWRPPPPRSQSZ`jopid\\V_r|tc[\\`fmrvsj]SSRYbacNOaO@CLNNONKHGGFEEEDCCDDDCDEFDDCCCENRUUSLDIPaaIEFF@@AB@@DOSNMHBA@@@??@@@??>??;<JQONF;777898:>DIKLMMNONOMMMMLKIN[aedWJHIGGJLNNMB==?>?ACB?<<<=?>AB;;;<==?BGLMLKIHJKFAA@A?>>>=?@BDDFGHLVe^D9?D@>==A?>??@DFB805>?DOYVQOPPNJIEDB><:;=:8898:2M]6:988656788:<>?@ABB<6F@2553343444333233248:;@MSOD@CFFC>:99:;>FNLCAFLMKJHGGGFGGFGHKOUYWOF?=>@BCBBCCCCCA=965666666667879;95;GC;::63268;DJJJGB<<>><;<<:;>@AADKLID@>>>>>@A@A@==>><;;=?<?KVKDNPKEEHKNMMQV[\\ZXWTSNJIECCCB@?;2-0333233453111358:;98888644554446679<<:64335657889:777758=DNWN=689889=>===<<==??947988778766786568:<<;:=HVP>CV`^[YPC<57FC684253344333333,<RPJKE6123678:7646<9.+,./.,,.-273111..00,-6<9876651//,..)&(*1>FC=923AA63101225ALJ@7355+(++--+(&''().570,,.//../00.,*)))'()',32)/;.'')%.>84661.0/7L_E50*(,210./0.***()*)**+*+-,(-30*$,8;+,+)),--01-**+)&*3861/0116?D@8/((&&2MAbtnkjR59KMJF@9.+)*++,./22231.010..///012.+,./1584+,465/070')*-231.)(,.-,/1,6J<5<:66559=<79>A>6363.22.(-;Qdica^K304557?LSW^_S>+&+3651+(1<AE>1,1;>9<EHJL@,$+//))0+'')169:8645;=86DOJEDDEOYglifQ;<QC,5:5,&&&&(+*@A*1765530,0560*(&,40-4vvussrqomlkjjiggfeca```abacccbaaaa__`````adeefffeeffhkt|~|zxupkkjjkjklmnnmmmnnmnnlkjjiiiihggfgfdda_]]_chnrttsrsvtlggggedefhhhjkkkklmmnnooooppoonnlkihfbcdefb_``^`fhie^]^djecefijc[YZYYYYXWWWWVXXX[_\\V_pzzz~t_QQW\\]\\ZYXXWWWWWWVUTUY]]lxbYa__[W[hoigr|rdfjnrqmf_Zdrzyxx|vlpvx|ptwx}{qlmagr}wnqldnogcc`^^bcdbaaa_^]_emu}{p]_ccdddeeca_nronpuzuutzzqstuw{zyokαu^__\\_cejqm\\V]\\Y\\bex]]YVRQ]ihcmzpcUYqot}wnaYXSTZZ\\\\XVTRPQQRTQPSTQMKLMLKKHBC]uueTLOSQQQPOONKJKHMVXTPNNOPOMOTL?DLJKMLKKKKLLNNKSuxefO;ACDEGIHIIIGFOXXSONW]RMPRRLHKLKKJJKIHJHHKMMNQTVX[ZVUWXXZ\\\\XTONNONLLJIJMLLMKNSQLNYdr|zrk`WaQMHELHCHJHHGGFFFDDDEEDBDEGHIHFGHHHHJJMMNNLLMMKKJIKJIHJIILNGE?AWV\\tmp{XDJPdusooonnyycQPQQRRRUWHvvym`SIGGGGGECBDFFHH>@G[]\\bZWSQSUZ^\\\\VQJCI^WA@EBDJBLVB8AMTNYWHLQOQRPOOONNQOKHGOX]ZTOILMI\\rnSUmrd^ba_]][XUQOOQNOQRRSUVasiWVST]fg^XZ^cjlljc[VRT`lrnZSaUDCPPNMMJIGGFEEDDBABBCDDDDECALY^mnu}~cBJPTYPGCDB@@BABRWVNMHBA@@@@@A@<;;<?>==FOQND;:9:99<AGKJIIHJJJLNMLLKJIINX`e`PHHHHILOOPNKE??>@CDD@>==<=>@A=>BFLNS[hkki_YMTc[K?=B?>?AABCEEFEEDDIPXXQB??>==>>?AADKE<856>B?6JVVRRSUUUSNIA>=;;9877786RF698875456778:=>@BBB=3:;345333323343322433235:EORLGHIC=:98789;>DID@CHNNNLKIJHIKLNMMQTRH@<;=@ABCBCCCCBB?;87567666666788:::68GF=<;64368<DEDDB>:AE>:>><;;?GLMLIEA==>>=?@@??@@>=<<;;;:9?KPOHGNLIFGFGNOMIIS[[ZZXUTRKDCCBABB@<54543355553310256::99888644445446669;;:7534686566797556756=ITN?8897668;<==<<>?==96788878:97776568:;<:868BJF?JZ]YY]ZK<79=?7883423433322215COLIID95447789771183-,,./,),12561./64870*)-/.4>=;971.041*&'0AKG@;82.;D820/1336AKF>4/-)%'.9@>0'&'))))*+*-1100/,*-/-,+**+*),)(./.35+./.+.=DKG>0.1.*4F05B<40-02/.-,)(+*'(((((+032+.871,.68,5:40-/253-+*'&'+2420,*)+6CHC9/()(%DfNmxsnphMAKOMMJA9-'+/.001353420010/.-+,.0.+,01/2::30458>=96+&)))+/011/..--0-6LC/5<80179:>>87<><971++33,+9Obfaeh[;&*3568?IMWaaUB6338::72,.2560*.9?=76?HLRI2'-0-+--)()+-.0249;;9994<ICCMIFMT^da^XRFMQ>;<;5-(&(035B4!.78:::4/2990)'(/4/5<xxvuttsqpnlkkjihgfcba``aaabbccbaaa`_`a`aacfgfffffehnsuz~~~~~|vrommmkkklnoooppponnmljkjhjjihgfgghigb_^_aeijmlieiuukfeefecdfhhhjllllmmmooooooppqpppolihhghjkmka\\^^^`hkheb`\\\\ZXZ\\[Z[\\ZZYYYYYYYZZZ[[[[^_XRZoxpq~}jZQT[^\\YXXYYYYXWWVUUUVV`pd\\a_`]Z]djhglwwqmhgikjkmgbfrxsqnYlpo|vqmo}vle^jw~|vtwuuvt`]cc```bcddeedcaa`]lyrv{\\_fedeeeee\\kuoroqwzy|vtrzvqsutw{|{ypq`__\\bmqu|zk^Y]^YacayugdUSRW`bhq}}m]Sd|pzuhhd_ZXUSW[[\\]ZYYWUSTXZWTRRRPNLLMNNLIDFYkrgYURRRPOOOOLTej]QUVTQOOOOOONJIJJJJNPMKKLMMKEQuoPHngA@CBCDFGFDEBBLSQOOPTWNKLMLPUMKLLJJMLIGHJMMKIJKNRVWVUUVVXYZYUQQQQPNMLJIJKIJKMSRLJILUVRNKKJDFJOLNRNMLLJIIJJJHFEEDDDCEFFFGFDEFFFGHHJJLLKKLKKKJJKJJIJJINLHGEDIJvxlqfIDMZv}tqqpqvz`SQQRTUTSXGopaRB@DGGGGECDGFFFEJOJa^`e\\ROTY^ca_YSO@:L[C=DAEDHJHMD?EIJTzJ?GJKLMNNMMOMNQQKJKLMKKGFINLFQotVVmsjghgeb_ZUSQPPQOQRRRSTSNZwjVQQRRTTQQRTTY\\[[[XTOWbjjh^VZVOLRQNKJIHFFEDDDCCBBCDDCCIGAPkvu{[>MSSTOLLIEB@AAEOUSNKFA?@A@@AB>:78;??>=DMRPB=>=<;=EJKJHHHGHHIJJJJJIIIIMV^f`JFGGHJLLKKLLKFA@CCDB@?><:9;?AAIQTWXY`monjc^X\\ikaL<<?@ACBCDFFFEA<9<AFR`X??A>>>>@BDED;23433=:/9HQSRSTUUSSRNIF?:987752=E:7887764555678;=?BB@91482343323233433146510237<DMMGDA:6876568<<?DCB@EMOOMLOPNMOQQNJJEB===?BDCDDBBCBCBA=9765666666777789:;99B@:;;54568:>=>=<<<?B><==<;=EORNHC?>====>????>???=<;<;::@MROKEHLIFEDBAHOQJDITYZZZZWNFCBBCCEEFFA<97775566542223566899:96655654555579;;96558:75555776446757DSO>9<:7787:<<><>A?;88887888889867778:<:656=HIHA7B[c_\\]^YOGA<<:?=5675543332222AQOHB;6556678754343-,.010-+,277410/16;9/**,.-29:<:4./9;0(')2FKA95355@F1+++-248BKD<3.($(*5G?.*),++***(&%+4541.+)*--+))*,--,,+,*-22.1?C=3@U^M6+,.+('+&6RPH=0031.,+*)**)+)''*/4750144555/2)/240/0242-+--,.11121,+*.7BJJ?/)**'8GHyssprtcTPMPKJFD;,(/575456542100010/.//0111367;>9348:?C<;3&%*-,-069750.-,,6JE037<1248:;==869::93*+2645:HX[WY^W<()02579;;@Vb`ZIMQCABA<40000-+0>GA8425>FJC747841*'**,0..26=C@;8:<89CHLQQLQOOZ_[[ZTV`]J5.++()045595058877522255/+')145?Frrsvvvurqpnmmkjihgeedbbbbbbbbccbbaa`aabbbcefeeeefhlswwy{}~~}{wsrpmmmmnprrssrpppnmlkkjjjiihghhikifba`abccddcaelpkdeeeeedfgghklllmmmnnooooppprsrqpmkighjkjlpl]Y\\Z\\ehikhd_YWXX[ZYZZZZXYYYYYZ[[[\\]\\]]^^VO]nictziXRTY[YYYYYYYYXVVUUTSU[Z]b^`_]]abacelouodb__cekusikoleup[]]cotpegsyuqrt{xorxtuvtvvvu{}pdbdb``acdffgipmfacvvfdebcdeimu~uswxtz{sorx}uputsvx{zvlutdc``hs}yz}sf^Z]^_ie]t`ilLT\\chyjWYiqxuvriha^YVYYXXYXXYY[]^]\\\\[YXWTTTSROOPPPRRRU\\a^\\[TMJLNNOPLPi|hNOWYUPOONMMMLKIJJJNQPLLIGEAOswQ?LqjD?CCA@><:9<<=CGKQQQPNNKIHGOWNJMMJKLKJILOMKKJJLOOQRTSSSSUVUUTTUTTTSQNKIIJHJKLOLFFFCCCCDGGFGKMPT\\`\\WNIJJKLMLJHGHFFFFGFEDEECCDDDGGHHIIIJJKJKKKKKKKKKJJMKIHHKNNmwmpXEGPZpyvwxxxy[RRRTVVWUWHRwsSTPJIECFFFFGGFDFFFOFNt]URV\\aUJVX]f`\\WSVG;<U\\SQTLHEGILMIDHF^è_AFGDFHHIJLMMONRRONNMKKMPRRPMHHOVMNX^`cabc_ZVSRPQQQPRRRRRSQDLRf]PSSTVOLMLLJHHIIJKKJLNPPRTPRXWSTRMIGHHFFEDDDCDCCDEDGK]GFkkXDCORTNFLTSGCBBBFMNNMIC@?@A@@AB?:8:<>?>=BKTP@>>>>@EIKJHGGGHIIJIJHHHHHHJKS]g[GEGFHIIJIIIIJJFFGEFDB?>>=<<@CIW\\_]\\\\]deecba`aejndL>>BDEDCCEFFC?613:@BNXWIC????BCB@;833654;:6:BEHMQSTUTTTTTRJC=97951DD777777653445668<?BB>5277113222233333359;9432357;CFB>:53666558<=?@BA@EMPQQRSROKHGFDA@??>>@CGGFFECBCBCC@<87555665778877999;<<<86876578:;===;:;<<<;<==>>AIMMFA@A><<=>@@@@?>?>===<<:=ENPKHFDGGCBA@??BFILEDHQWYZ^UFBCCDDEFFFEDA;7:;777875322233368;;986576555554679::7577865545666546996<MN:5==<<<=?<99:<BB=9888998889755799:=<76<CIJA<?;:EVcc`bda\\VG;;E?5;?814433331+=OJA4*,045568742593-.034112367521/++361+))/4320496.,1:6+'(+5<<4/,/9<CE,&('*27;DI<61/-(,46<7-,.0-+***+)&(2:83.,--+,,))*,/2/,/20173+8NSD8I[R3'+,*))'&')MYWJ4053//,+))*,1.('.31/1551/022/+((+-.-/2651,7@9973121-,//57?EB:+)+)'+7>>@EIIPTWVRNKEH?0*/67544431110002212211243357865007CLC3<4#&*-/.28<763/-)-BE..714?HKFA><;65:85<7/3:;<=AFOTZZSA2/5>;<98707UfdhZ[_JDID7-.0-,-15:<4,+*(1:@>9::=>4%*6.,58:<@GKD;45:;7=RYPLKKIFYh\\Z[\\djaJ4&'+')24421688:951./0.,/.*')-3<CEfjqutttsrqnnmkjiihfedcbbbbbbbccbbbaaabbbcdefeeefgkotvy{z}~zxtpoooopsssutrrqqpnkjjjiijhhhhhhhgdba`__`abcddegfeeeeeeeghhjkllmmmmnonoppqpqsssrqmjigghiijpukZUY`cfjljjhaZWWXYYZZYYXXXXYYZ[[\\\\\\\\\\\\]_`WS\\^\\cswrvxdTRWYYYYYZZYXWVUVTUVVZddcaa``a`^``bjpndedbc_^juqjeefpxl_[YYdgbcmrooqpow{psxunsxqhqztxpfqbcddaaaaabdgn~uhdt~|uzm[`a^bgorxxuvzvqywyyyxwvutwxuruz|q~zhcbaft{|zwtkc]Z]^_hb]tpR_UR[fzpQ`gcjqpsqic`\\VWXWVVUUY\\]_cd_\\ZZYXWVXXWUTTQNNQdmd^VUYXTMILNOPMJOVUNIQYWQONLLLJKJJJJKMNNLJQZWhS@BUp`D?DDA?=:88:;<@ELPQPMMMKIHHOPOKMLJJKKKLPRNKMPRVSMLMNPOOPQRQRQSSTTUTRPLIIIIJJKMIFFEGJJJJIJJLNSSUZVURKIJKLLKKJJIJJIIHHGEDDDCCDDDFGGGGFHIKJJKKKKKKKKKKJKKKKJKMMQlwnhNCGR^itxxy}~_PPSUVWWVTTJS^TIBEGHGGFDDEEFFFGFT\\`zkaLU]OEnp[`b[UVYP<;E^]RLJHGEHSOJHIHAvѼVQSKIGEDFHHJLORXZVQPPNOQRSSPMLLIJPRPRZ[Z]`\\VSQQQQQQQSTSSSRQNSUcbNSSUTLJLKJKKJJJHGGGEDCCDHLLW[TSTNJFFHFEEDDDCDDCEFETfl@`~tSHGJOPPLCABGHBCCCFJLMMG@AA@@@@@B?9:;<>>>=@IWH<>?ACGKLKIFDEGHIIJKLKHFJFEHHObbNFDFEFGGHGGIIHIIHGGFFE@???><>CJV\\][Z\\\\^`bcddccdhrzjQCBCCDCCDFFC=5465;?@HZUE>???@@?>87458:;<==>?>>BFFGLQTSTTTTPI?8;9>J?668777553223557:?BA;33851223323333338=>=;73134568988644676559=???@@@FPUVVTNJGB=:;<>=>A@@@EHHFGECBBBBCA;8656666677887899:;>><7664578::;==<::::;;;=?>?BGJIEA@@?>==?@AABB@??><<<<<=CMPLFFFCEE@>>=>@@?@GLFAJVY[`SBADCDDEFFFDCB=9::887887433221127<;855776655554568;;87666665555546777976BK>5:?BDBBB?9798<A@;887898899645789<<86=FLH>64=DA77L_`^````P=;C@8<EA:7433330,7:43/+-13455433236565201/.0451012211250)(+2751./01-,073)((-45---,.8<:D0#))*048=94/000+-32.,,052.*)))++('/=?5/375-+.-*(+/3215999=6*7TTD9;D>)&,-+)))'&(IZUD30520/-+*(),0/)*284/04420.,***((./,*+39956=A=;:9520-+020,2=D?.)*(),21)&''$'.4@O[QC@>3/1354222/././//121232246541--//+)5MQ4-?C7)&+1235;873//-/60*-1,)1>DEC=:712=?;AD:8?A@@B?=R\\SHLJ47KM@;8209Qjlnjc^KDH?/+02.1;AB>9647734=C>4.4==5/?E,,;CFC=ADC<1/5==<KULFEAAOd`JPY]mgF/---,(+2320/6:8973-,..,(+/,())4?<9bflnnmnnnmllkjjiihfeecbbbbbbcddcbbbabbbbcddeeeefhjnrx}yx}~|yvsqoprsttuutssrrplghjihhiigfedddb``__``abbccddefeeeeefhhhjkkmmlllmmmnpppqrttssrnjhgggiikotviYZbcflmkigkke_ZWWXYZYYYXXXYY[[[\\]^]]^_a`ZUUVX\\abcss]TWYZ[\\][ZZZXWWWWRRclhfddcddc^]]^djjjklkhaYW_fe_cnpookea^YVX[^acfkqvvx{yrqspjoxyjn~w}|kb^chgcc`__`eiisuq||x}{mtsilrx~vy{sqztxxutttuuutvx|q{ha`aedlyxwwqhb_]\\\\`jb]h_UWvMXh\\pzneipsneb``ZWWUUUUY_`][\\\\\\]][YVTUXWSRQTTRV\\hqnhb_[[b\\QPPONMMMLNNJJPUSPMIIIIIJJJKKKMLJIVctd>CAYmS@@CDC@?><;=ACFKLKKLLLLJIIMNNPNKMJJIKKLNNMPUVUTKILLJKJIIIKKKKLMOQRTRQMKJJIJJKLJIIHHIIHIKLQSRVVQOHKNXUKJJJJJJKKJLKJJKIIIGFEEEEDGHEEEFHKLKKJKKKKKJKKKLKLLMLJLLIMmys_BDOcstuwvy~_NPTTUVVUUUVPPRGDKKIGFDBBCEFFFFFHbsnbOXYSxhY^\\XRVP:AHOYSEFMOJKNQJFKIEE~eS[ZRQMHFGIIJKLJQZUNNOMKLMKLNLKKLMY^YY[ZZYYVSRQRQQRSTUUTUUTQZbO_jLOSUPHIKKJIIJHHHGFFEEEFFHGFT`TOVUNEDFDDCBCCCEFFEGL\\v_Lvpt_S[aHNONIC@@?ABBBBDHLLLFAAA@ABB@@>;<=>=??>>HV>;BEHJKLJIFBBCDEEFFIKJHGGGGGGL`ZIGFHHHGGGGGIIIIIHHGFIGBB?@>>CJMTZ[[[[Z]`aefgfefiq|zn[JECCCBDEDA95668:=ADGRI===;:;;<:9889;<=>?>ADBB@==?EMTVTTUVUK=8<JI9888776545323555:>A@:5475234332333415@A>><73234544455544775568=@??@@@DOVUQKD@?>;9:=?@CGD@>DIHFFEBBCBBBB=:778777777889::9;=>><97446799;;==<;:::;;;<=>AEFDC@?===?@ABBA@AB@>>==;;<<@FLKGFGECEE@>==?@@>=BHHBEQX]aUEADEDDDFHGEED>865555444331000.05::745666656545568::876666655556678888857EF96<ACDB@@?=>=;=>:8877877777668:;;86?HIE>769@CEK:1JYZYZY]WC;@B>=BB?8433430.--/2344235530.10//6A@3+*)()+,+.58864134-+156522/,,.-.//+)(-3,+452044/B9,42-.-,+)+-/01,,-)-2263-*(()*+.-&+=A32=@6,*-/,)*0359<>AA<3*.MS>:0/0--/1.**++'%=ZI3-02/.-,,*)))+--.5@>50.1551-)**+-56+*),4:4,.2037:61/-+./-),684+))(,15CPOG?60*! *<KE9;972..001-**,+-/0220/--,,145/*+-,)&7PA%2@KQ2\"*56548761.3:2'%**()(*5>><995-.>F;6===BECBA99VaMLYP17PPD:3/2>ENUbslcXMC5+0;64@ILMMIFIONGCIJ>-(293;JVV:1AMQG:78AB0&0>H@@FF@@?DTUFCSZbkR/ &66./10///06:8742/./0,(+0+%&,699;iiihggghiijjiiihhgfeddcbbbbcdddccbbabbbcddeeefeegimpy{ty~}|ywspqtuvvvvuttssrpjehlifghhdb`^_`_^_`abbbccceeffgfgggghhiikllklllkjloppqrsuvuutpkhffghikopsvk^`jmmnqi^etvph`]]]][[ZYYWXZZZ[[]^_^_aaaa\\TRTUWY\\clooomnzr^VW[^^^^\\]][ZXXXX_gdadffgffeda__cfffggihd]VTVYZahfcgkkkjidb^ZY[\\]`itxurrrrohbe{zm|pZdhgcca__`gjhct}yr{}|zwvprxvxurqwwyywx~}tyjcaaac_csvvwof`]a_YcqfY\\[YRsZ]t{hwrjgefia]a_[XWUTSRW_`]YWVVWVUTQNPTTQOKNWZ_ca^\\]`dhffd^XROMLMPRPNNKKNRSOJGIJIKJJLLLLLINLMsADD?UbF=ACCCA>>>?FOPLKIGGIJJJIIJMNLXSINKIGHHHHJLS[]WPIINLJIHHGFGHHHGFGIKMOPOMLJJKJJJJJIHHIIHKPY[YUKJLQTNKTRLJIIJKKLLLLLKJIIJKJHHHFFEGIIDBGJLMLLJKKKKKJLLMNMMLLLKJIJHPn|xYEMe~}ywvz{XNRVUTVVUUTTSJEGFHJIGEDCCCDDEFFECMqgeqRRLzdQXZZRWP@BKNRUPVZ^XPJH??BHH?IrǵmOZ`^YUQNMJIIIHGEGURLMMKKJJKJJJJIHK]a\\[[ZXWUTRPQSRRTWZXVVWWUR_bNZo^MTVP@>JKIHIGHIIGFFFFFGHHIFKaUISYWFBDCBAABCDGHIFH^iuK}ockfdjquPNNLGAEHGCB@AADGIKHBAAABCDC@@?>>>>>??@?HN@CJKIHGFECA@@@@@???@CDCDEGKNLHOJIIIIIHGHGGGIIIIIGHGGFECA@@@>IVTSVZ][YWZ_cghihhhkouwvmaSFBDDFC@<53558:=?=<AF;8645779<;;;99<=?=>DIFDCA@AADKOQUVXYUG;=JC<=978865563334668;>>:756545544333334=D?;>>83324534555554576448=?>=>>>?FLKGB@?>???@BBEHKH>=CHHFFEBBCCBBA?<:9:99997789;=;:;<==;;943688:;;;<==;::;;::<AED?>>===>=>@BB@?>>?>>>==;;<?FKIEFHGFDDCA???@@@@>=AKGAIWabZIBEEDDFGHHFGG>51/10111220/////1588656666676554568::876666555456678::8866<?97:;<>?@@AABA?;::998666666777:;:79?HIB:89:<B<7]c72LXXYX\\\\J;?GKFA:6764331/.+/:>964245651000/.2AD6,+))(&&+0110-*),21264333641//..0/-*)-226=;50+).?D8<91./,()+++,4;.)).7?;0--*)+,-44++75+5B<.),./1,*155;CEF@5/,*;KD<0,-02353++//-%1S:'+10+,,,-+*))'+.18BF?5-/562/&$((*./+&$&*52//40147732220,)*,/.+**((-22Hjrpnr{v\\E9/2FF7861.,,./-+*+-/03420.-+(%'*+*01,)*)5A-\"7>HY=$):>4.2320/:>/#&(('))(-;>:<@9./BF2)3@CGHGFB9?`k^OENHLVI@9426<41;YysleQ<-(4@;;EGDJUVMR[XSWVNB;=>6.?T\\ZB<IORH50-3:/+7AIJC?>7:HJE88XfVPK8)%,?>0:A5*,/05874100011,(-0(#*466?Ekkigffffgghihhhhgfffeeedccdddeedccbbbbbcdddeefeffglqtvy}~zxvusqstvwwwwvusrqrrmgfijgdfhfba___^^_abcbbccceefghghhhhhhhijjjkjkkjjjnqqqrsuvwwvrmhfefghkmmlprgaltoptqc]gmklmic`\\[[[ZYXXYZZZ[\\___`bbbcc^XUWYY\\]\\[YYYW[giaXVYZ\\^^^^^\\\\\\YX^c`YUcojihghhfcddca`__`_aa]XUTVZ\\[Z\\ckowzxsmjhfba_abgkkhhjie`]grj|u]figcca``agmlkkor|{w{|s|}{~}}zvut{upxxwusquww{wj~icdbaa_dc[ixypf^]__gfcfa\\[\\Ucirre`hsq``eY[a^\\YWTROJNX_`]WTRPNMNMMMPSSRMIUaYNLIEK[gnnhfYMPROHFHIKLOQNJLRTOJIJKKKKMMMLLIOFNPEE@AQZC>DEDDC@AACPYUOKHGGIHGFHIKOLH_`KNLHGFGHIMNMQX[ZUMKLJGGHFFGGHHHGHIIHJKKLLKJJJIHIGHJJKKJLRXSLOHFLSVOJKKMMKJKKLLLMLKKJIIIIJHGHHHFIPZ\\UJGIKLKLLKKKKLMLMNOMLLLKKHJKGYtwUIZ~}{uUNRWUTVUUUUUSROKGEFFDFFFEDDDEEGC?B;GJ_OR?jyHZ[[XSVNHWPIQV[[PIHGCLKIIIJDGVĸQJY[][YROOOLIGFGGFNRIHHHGEFIIIHHFCI\\a\\\\]ZVSSSRQRRRX^__ZWWWXXS`aSRhmVROIZeO?BIHFGIJIHFFFFFHHKJK_YEFQWQFBA@??ACFJLLFKd{m_i^gc_ruyfGLJFBCMOD@>@CDEGJD?ACABDFC@???>>>>??@BCCDIKHECA@??=>>?>=====>@>>>>DJIDGCFHHGFGGHGGGIIIHGGFGGFDA@@?@@HXYSRW]][YZ_dhjjhhdcgnnkf^\\RABHG@8541249AFA:8998886678:<<=<;;:=ABDIFABCCGLIEFGIKLOUWTMJJ><=978864664334667:==9656577544343348@B>:;=83324434455554566547<>>=<<<;=@CCDDCCCBCDEFILOF77=BGEEFFGFDB@@?==;::::97788;>=;:;<;;=<53679::;;===;::::9>DJI@=?=>=>>==?@>=<<==>>=====>BHJGFHHGECBBAAA@@??@@=DQOBARa`YIADDDEFFGHFGF<3///0101110000/024687566667765556689:9766554555556789977754887:979;>?ABA<::99987655456567767=DFA:989;<>@7(N{c:9NWXY]ZH;?JPPMD;7554320-)+=H>5434679965430/8B?93/-,*+./,***++*.365.043666655651-(%4MQE;51/,)+<E410..144330.*+=7&'3BA:4363/**099/+-'&5;/')/431-*0426AJH=3-+&+AQE1131334<:0450).D5'+00,,+,.-+*)'()(.?G@8224520.-,./,*+(&$(+041464566768971,-/../0-)),02;]RnnjaD;K<54///,+.0.-.256764200.+'$%%'/3.-.,06*(;?CPB)):=2-/00//2/%$)-0.*(''1;;?D>9GRA)4AFIIIIHE>H]ilA)WfaZC;;:8610?F_{qncC0(&5?;:;<;@QULS[W_ji[MMRM<59BOE4=HLO@+.1.21147DMD>@8=PK902NZB/(14'.FF5:KE2++,-.01/,-..-)(-/./288;CCiiigggggggghhgfgfffffffeddddddddcccbbbcccdefffeefgjoos{~~|xussqqsuwyzz{{xuqooonmhcgkgeggcbba`^^_bdcddccdeefhiiihhhhhhiiiijjjjjjjlopqrsuvvwwvqifefghiikjdlukcovssur`W[]`dca^\\[\\[ZZYYYYZZ[]^_`abcefghe]WXYYYYWVUTTSSWXVVUTX[\\]]][[^[[]ZXWTawpfgikjgeeeeeb`_]Z]b_ZWUSUXZZWX_cjllkkkkheffgglqjaaabbbdjtjz}|{ydhjcaccbachrppnkkz}jei|{{zxspqqrsqsvqgqvm{y]^~ygcbbaa]hfTbx{rg][adqsa\\^]bcel{m\\fsvqhZ[c`_\\YUTNHKQ[cc[UTTSRPPPPOPRRRQJOgbGBEHSbmpnf_RDGNNIFGJJJKOQMIOUQJHIKKMMMMMMLMOHUVGIB@GWM?FJIGFEDD?>HPSSNJJIHGEEFHKOJDfnPLKGEEGIMONHCIS_aUJJIDEFEEGHIJKKLLKJJIHIJJJJIHHHLLJHJLOOONHGKLKMPONLKLMMMLKKLLLLLKJKMNLJIGEFDAGPV[cj`XNJKMNMKKKKLMLMNMLKKLKJIIIIKfvVFnpUPSWUTUTUUVVTQKEBAACFHGGFDDDDCFA<@:B@@GK>FMFS\\[W^SLS\\TLQTXRIEFBF_XZ^ZUYM^ȪcHNSUSUVTMJMRQMJGGFISJ@IHEBBCDFFFFCHS]Z^_ZRPRRQQQRYdigb^\\ZX[ZTa]PSWmiKKeLHDGJKIFEFFFFGHKJLYYH>AIZRF??@?ADFJLLHJYo_t]bg`lyw~}GHFC@BNRGB@BEEFFHB=BC@?CFC@???>>>>???ABCGIGDC@??>=<=<>=<;<===><;;;>BEA><>?ABCDEEEDDFHIFEEFFEFDBAAA@ACJVUPRY_`^_cfhikhfYPU_\\URMOWLEDB824=:>GOUL<877679:;;;;<<==<>>;@EIMMHECCBEKIDFGIGBFKNRUSI:7<:997556644334679<;8555697444345579;<:87664333332244454545546;>>=<<;9;?ACFHGGFEDGJKMPRC216?FFEDDCAA???==>;9::::8688:??=;:;;<=<867889:::;;;99:;:<FMJA<??>??><===>>>>>>=>=<;<@AADGGFFGGEBBBBBAA@@AA?>CPWTIAL]]UGADEEEFFGGGFB9320022111111100013686466666776557888876655545555468::977766787999:9;?BDC<548:97775455545613CKJF<469::;==:*5le;<SZX^WD:AKMMME<5343342/**7C=546769=<7:<4//2:CD<3/-.110.-062-..482*.43489999:4/.)(Dhp`F61/-+'5D,'()-376530.,*6=.(2<9348;82)),460-,'*11*),0430-,.115;=A@6.,'(EVC.263113AH;:62.,44.-/0//..,052+(('\"%8B96:97543444560()(('&'./-,-297479::9655444571)*,.0332inXipT6BA420//-,/00/49;:765322/--,+**,/10--1631<=:>9.(11/21220.,))-2597-((%*4;<>=EVV9%?PIJJHGHGFLOgv8\"Zjf`L@>@<2*8RO`zrqX-#$->?516<98FPPX[^kttjWQUTLE3'0,&/=KI5)7BDHJ<+-CMDEHAFMB72/385-&-1'/IE9;>E=2,()*+--+)**('(*+7>;66=:1hhhhgggggggggffggffffffddddddfeedcaaaabbbcfgggfeefiknty}}~|zzwtrqqrtwy{}~~zvrpnkillgghgfeedba``_^_bflojfeeffgijiiiiiijjiiiiijjiijjkjmqstvwwwwxtkddeffgghifl{tcmyustwlXVYXYZ\\\\\\\\\\\\[ZYYYYYZZZ\\^`bcdeghkmj`XWXXXXXXWWVUTTTUUUWXYZ[[[ZZ\\\\ZZ\\\\[`fic`dhhfddfgghfdca`b`^[YWUY`_ZXWX[__``befffgho}|i_`abbcipynp|yrwyvlji`aaedcfmusmmq}}sdbt}ytsvvsnlortruyr{xWTvebbba`^bf^cv}si^Zissy_][`kkj}u{|shintk`fh`]XSIKQVa`_a]XVXYXXWTSRRRQOPURLetWDFQ]emqpdTOHBHKKKKNOMILQQNOTRKIJKKMMMMNQRUVSTm`@JGEDEOJEONKHHFEE>99@LROJJIHGEDFHJLFD`sWGJHEEGJNNKGDEJS^a[PHHHHFFFGIJJJKJIHEEIJIILLJIFFIIJNPMKHHJKKJIJKMNMLLLLLLLLMLMMLMLJLNNLKEDNWJADJOKOYiphWPPOLLMMMLJIKLMLLKMKIIFHIFScOQmURVUTSSTTUVVRMJDBDEGKJHHGFEDFEB?>?A?@>@@FCA>H_\\W_QLTTNMSTSPOKJGESR^gd`]V~HIMORNPOPKGGMSVQIGFHSIKleYSLIGEBCDHMKPY_`YQOPPQQPQ^iifdb`^`d]XdWLXO\\hWnSIHGGEDDEFHIJJPVJ@?@QUMC?@ACDEFIKJIMV\\i_e^k~||RFB@DJNSMBADHGFFE@?BB>;@C@>>>==>>>??@BGHEDA@A?>>>=<=<<<=<=<<=<;<<<=>?@=;978;<?@??@ACEFDDDDBCCBBCDC?A?=IQQPS^defghgffc]RJJMKIGEFJRVMGA?DRZbhgU;59:989::<>??>>??>?>;AECGIIIC@>?BAAAFIIFHIIKMPH:<B>;865555443446689:8776798664445677665444443333222334345555359>>=<<;9;=>@EIKKJIIKMOQTN>656;BGFA<8:<<==<>=;9:;<<:7879@A><;:<==<;978989999999:<=>DKK@9;=<>??><=====>>>=<<<>?@BDDDDEEEEDBABBBBA@@AB@<@NWTSPGJWZQFCFEEEFFFGGGB843234223211110111357646655677555577887655544555568:::88976787788:;;<=AFGE=3379887544444443;IIFFE=789;<<9;41SQ2JYWa]H:@OMC=6442245545<<..668==;<A<4<?2-/.1:A:2--0452/.184*+/482).512:;:7420-,'6_mg`K43330'6D)#&*/584/,*(07/4G7(.6.39:52.-+.4321/11/./130----..08:08D705-+KU7-146513?GB?52.+-245322121,-64-,-.*&/953:?>8.1788620,00.,%*.'(*&'7=96788779;<<;983.----../\\P>KPJ9<?4-./.../..29??:4364200/000.//-/-+-10/4<4,+((('((/10///0147;;=;/)(%)49636CNP8&<PKKLJHIJLIDeO1S^cfSA@B@1*ASGWxqC\"$)>PA-,7;1-:EPTR_ttpqbRPQOJ6%-1*(:G=15CIQhkC$%>SNQNFH@2011-1;51,'%4J:25+4>4)&')+-.--,*'&(&'7DA6295-hhhhhhhgggggfffggfefefedddddefeedca`aaabbddbacdeeeggjr|~|xuyxvuspmmortw{|||{xspooniegkliffgededb``bbb`ewwlffhhhjkjjkkkkjkjiiiijjiijjjjjmqtvx||zyysidddddeeglptvrswvusuugWX\\\\[\\\\\\\\\\\\[[[ZYZYYZYZ\\^`ceegghikia[XWXWWWWXXXXXVUVVVWWXYYYYXXYYZ]_`^]^^]^`a``bfhgjjhhkkjkjihea_bba_]\\]^_]^_`begihlwwg_acccftt}}lmwmpolmlg\\lcfffhlosrs}naj{}yxvux}wsnprrw|yzyos{mLQp`_aaba^^`]]o|uh]^lt{oZ`_[ipmnx~z~~~~~~}wmopfaab_ZNEQafnqdWRRTWYYWVVTTRRSRQPVVJWtaBER]dlsp_LIKIHIJJJMSTMJNQRQQRNKKKKKKKMRX[]^_ZitCEGGFFDKRONKIIIHFEC>88@GKKJJIFDEFGGGEHSodFIIHHJLMKIIJJIHLYd\\PLLIHHGFHHHGGGHIMKACHIJLKIFMJGLVPMMGEEHIHHHIJKJJJKLLLLMMLLMMMLJIHHHIDGX`a_[TDAA@Mdk_VSPPRSSQONLKKJJJLMLJHEHHEDIGemUTVTSTSTTTVVQIJJJLMMKIJHFDEELI><=>><=>?AAAB=I[[[ULIKIFNSSPLIIIIDBKU]^\\TV׭YEKLNPPPPOMJEDGLNIIHFSHZykkfgf_RH>AGEDV_`[SNOPOOOPX_^_```a^\\X^dVPYVI[ï[HFEFFEFHIIILYNAA@DJMJCBEEDDFHIIHEPcj]_TrTD?BUSOSOD@DGGEEC@?A@=<>A>=====>>@A?CGGF@>>>>====<<<<<<=<==<<<<<<<====;;:98999:<<<?ABCDEDB@DA>>CCB@AB=?FRVUXbhd`^\\YVPLIHFFFHIHHHLTURU[]`gfcT<3:<<<==;==?@AA@?@?=;:>A=9<?D>8;=<=>?DHGFGIIJMLB<BDA?97555554444556777777898665455566543344443322221124345555449>>;:;:89:<=BKOMLLMOPRSRB:<;88;BA;779;=>>?ACB?=;;;97669?A@=;<<;;<<978989988899:<>AGJB98::;>??=<==>>=>=<;:;?DFFEFFDDDDEDCAABCBBAAAAA<:IVXSQSNHQYOEEGEFFFEFFGID9434444432111000233565455566665556677555543444446899998899667767999::;?EIJG;24778865444444:@>BFHKE969=>;8775BsU-?PVacV?>KF;61/12245546LO7)/7>B@<=@;466/.//.4;5-,.1685/+,/1.++/8://5/,8=93/,,-)&Ow]FC9-023.'6D&$2;>BA51/-).;9<SQD0-17;:2021//241014201111/++,-..1<?25>65666DH/.48<:33675632/*-7=<968621.,.../021*)0412<@:0-15330.2265/*:>-#()$-?D??=9788::8511/00/--..0FgCBA@@=:;3+,--./.--3=A?725950044/..-.-+,,,,,(*3=4/,(())'&*,+++.29;75:>=0((%)361/4@ISG9FRPQOLIIJKIB]sQKN[YC;<?A2/LM>GdvW-(19LSB+,4.$'/6@A;OpunumXSPC98@C9**<@53?E=AduN,(9RVUSNG5(+-/1;;*26'#6E1'*#+A6.;67>:2020,'&(&(2DI:6DJHhhhihhhghhhggfffgeeeeeeeddeeeedccba`aaba^`dhid^_ceffhqzyrljsyvsrpnljijmmotvsqomjhjlmkhfhjjjigedccbaaceggjysifhiijlklmmmllllkkkkkjijkjjjjikpqt|}}}xledccddeggkswvuvvusxwaV]^^^^^^]]\\\\[[[ZZYYY[[\\_bdeefgc^^edZXYWWWVWXYYZYWVVVWWWWXXWXXYYYY\\^``^]_]\\[Y[]_bcfhgipuusrrqqniebbfnja]Z^a`_abghhikngabcddfsyypokjimkkd[~hhihieky}|qv}xijkiirxttxusrtsw}xy^ZkaRTg_acbcd`]\\^[fwug]cluoUY^eopopv~}vn||z{{{y}vxrb^\\]\\QM]p~i_WSMNORSRRQPQSSSTUUSSSPOb^HLSXdopfUIGNTLHKHJJOTQLLOQRPONNLLMMLJP[_`beovjDGJIKLOPKFEHHHIGFGE@;8:BHHHHFGGFEEDEHLkmKIKJLMMLJJKKKJHDEP[\\UOJIIHGHHGGGGCOqsYGEHHGIIF]|bGF\\qXJBFHGIIIIJJJKKKLLKLLLLMMKGDCCCGPPHDLV^db_ZUNHMQUWYYXWVVVVTPMJJLMLJHIIHGIHIngUTUTSTTTTTUVPFHIGHKKIIIFDBCFMH<:=?==?@@BBCDEGMORHCDGHGNNNMJGGGGDDIKRROO?|IIJMNONQRRTQJFBCEGIHGQPMa^arzzxrfZLB9@@Vab[SNMMNNLRWXZZ\\\\]_`ZS_`TTSShОwz~fRDBDHIIHHHIUUECBCAEJKHHIGFHHHGGHGed[MUw~uU>APTRQQMFCDFGECCBA@?>>=?>=>>>?>@@AACEA?<;<<<;;;<<<<<<<<<====<<=<<====<<=;89889;:9<=>?@C@@AD><<??@ACBA?>IUVUY]XPMLIIFEEFGGGHHIHGHHNQU\\\\YYQH;6:<=<;:99:<>@A????=;::9?D>;=;8:@?<<<;@HIGFGHJLD:;;;>?=:755665644655566679998665455556543444333443322233355554449==<::9769=>AIRRQQQRSTUJ::==<:>@;799:;>?ACEFEC@<;866659?AA?==<<==;987888877699;;<BHE;99;:;>><<===???@=;;<AFHHHGEEDDDDDDCBBDEECCCCB?;CRYVRPQOIOWMFGGFHGFFHGIKC64445654321111221246653467776666566655554455455579:;;;9899755666877888;@FFGB52776777754347=><?DGHMB65<>=97988e]&/BMZdbC47485104974461<NPE1,8>=957:752.,-.01485./20276.*(*,.*'+4@=54-(044440++7Kno<-3.++,.,)8D/@PMJG>3/.,(*7ACA=7-+.6=6+*//12.,++,,.022/+*+++,..1?E8/469:DD:4.06::7210-,+.1101;BA=<=:3.0200/122410000/3763222/.,**-01.,8K@($*''2DPTG603420-+)),,+*+**.06[xf@;B<@=9782---..//+-5;:745:;41497/./.,-//..*-,,8@9@@=::74.+*)))-1:<527>A4)(')1433;CLRTRQRRTPMKIIJMGU{fC>G>1347707NB<=AF.'/6>CD@1--&%*-*,..>[lrul___I,=^R4%*7;56<>64F[P@79MRPW\\R9'(+-4C9\"6=,(38)&)&(;<?_eagW:.0/+'&'+-3EK<=]ohhhijiiihhhggggffeeeeeeeeddeedeeccca`_``_clu}zk``cfghmpnkjkntvroomjhfeffghhgfffffgikkjggiiiihedddccccejs{~zlfhjjlmlmnonnmmmllllkkjklkkkjihihiouvwxz{qecccdca`]bpuuvvwvsvzoZX^____^]]]\\\\[[[YYYZZ[[^abbafid[UZ^[YYWWVUVXYY[[YYXWWWVVXWVXXXYYXXZ[]^]]^`^ZYXWX[]abbhrrkihhjhdba^f||tgbhjkkigffgihfbcdeehqqp~lpgjnjgdakmimrt}~}sqskjmnmuzoggfgsxssqoqwwsy}{Y[[[\\\\ywa`\\V\\cbhc^a^_mqdZ_r}rW]celonorxzrszvuuwywyuzoZ_^SPUiuWPSSQQPOOOONNORTUVXXVQRZTPQQZ[V`g_RKHHLPOKEDJLKMONKMQSRQPPONNOPNQ_cbgsûa@LTVSMFDCBDFGIHHGGFFC=99;?EHGGIHGGEEGGauUFMIJLKJJIIIHIJGCCKV\\WPKHHHGGGFGB=EZdlePGIHHIEYkTOqkaMFFHHIJJKKJKKLKKLLLLMMJGDDB@GQJ@9;AKLRRPID@DEO[`ZVUWXXYWWUPMLLJIIHHHHHJHiz^VUUTTTTTTTUVPFEDAAACFIHDBBDFFD??@BA@ABBDDEFFGGHFEEFHIHMLKKIGFGFFFGJKIGG5tаSDJHGMKINPQVVOIEDDGGHHMWHGGN^klg`_^]ZSNAWed\\RPPNOMQ]_\\[Z[\\YZ^YMaaMSTUeuornqupY@=HIEFGDJTGABB??EMNKJIHHHHHKMD[}aUB^qMBSYKRUOIFEDEECBABCA??>>>=>>>>?@@@AA@>=;;;;;::;;<=><<<<=<=====<=<<<<==;;<;98889987899:<>>CFA=ABABDDDB@?<<DKLLKJGFFFGFGFFGGGHHFC@?><CKQUPKC;;>>=<;86788:=>?=<=<;;::8>JLE@;9CH?<;:9;CHHIJJKI<9:99;=>>:87877644666655589986544444445455555554443333333335554448;==<==;89?A@AMWVTTTVTOB>?>??@CB<89::=?ACEGFFBA=9676659?AB@>=<<=<;:8777887668998=FF<79;<;<=<<<<>>>>@B?;:>EJIGGFDEEDDDDDDDDEFFEEEDA=@NYZVQPQOJNVKFIHHHHGHHILH:2464665543333333224443468:975666555655444555555579;;;;:99765456666799879>DFD:038866664346:<=?AABJRJ:5<@?<:9:3Lu,#6:LceK/&,54018<<7573:MP>/0453/035561,+,-/14433661035-('''(),//7:32/)**,49736KlzW*'/+***++)7JF[_TNH:0.-,((1@D?>701.161)'+-/.*'&()').1/-++,.//0//6<3,-4=FPB,(-16962//-***,.29==?@?=?<3/0454343034641352000001.+)(((((,(*2A:)#+)(:[]8-.245675,,540+'(*,-.04515;=C=1162--,,/20-.45/.3:=858:851-./17820/.2/(<@7FNLLKD?8-*(&'-079668=B;-((+1335<?::LTMMONLKKLMLOKKm}\\B:51..01.1<<7HE.$$,/001<E:-*'+01,&(/7BUipe\\enX5JhW>1/3;;99=905CEB:5JVU[`_I,&*+7M?*@D.,-,(''+-,?NfxG+**)'&(/7;;=6H~~dhijiiihhhhggfggfeeeeeedcccdddedcca^]]aem|wkgffijijkknrstromlhfdccccbbdddffghijjihhihhhgfeeeeeedekv~ogikklmnopoonmmmmmlllkklllmlkjhfeccddfikmleaccddcb^^kttuvvvutuwgZ^^^_^]^^\\\\]\\[\\[Z[ZZZ[]`bbcfhigaVSVWXVWUTVWXYZ[[[[YXWXWXWVXXXXYYXXXXXYZ]aca]YWY[\\`d`[ag_\\__]^`^]fw}pknlgeeijgdeddegjee{{wrmjhdgedmlqw~|~yq{|wkefjlmkfkuphhfguyrsqmpxxsvz|^[Z[[\\lobf[SZ__fefg`Xfpe]`annVbffijlmmoonzxsmkpwvu{{gYXPUf{zvm`STWSRRQNNOOPPORUTUVUSRV[VMMU`b^ZTOJIKMNNPMEDFHJJLLLMPSSRRQPPOORPOW^]e}dTKOS[RKHCABEFGIJHHHGGHGE?75BMJGGJKJKHDGCRxcEKIHHGFGGHIIHHHHHFJPXZSMKJIIHGFDDC>>Pa[JIJIHGMhdFR|uPEGHHIJKKKJKKKKKKKMNNLIFFDCCILFC@@B?BABBDEEBFS^\\TQSTTSTUTPLLMJIIGGGFDHF`wXUVTTTTTUUUUUOEDDCBABEGGFDDDDCCDDDDCDEFFEFGFFFHIIJKGHIHKKKJHFGFEFFHLKKLMG|~FHIICMMIJJKMPNIFDEGGDAGTKLJFEKUWV[^bjsj[ZdcXQQPPNO^kg`_``a`ZONLbcOUOUbXRs³zusu{}Q@CBBE@@PH?BBBACHLJGGHHGHJLNOPrraIJSnxnFQfRJQTNGFFFFECAABC@??@@??>=>>?@@??>>===;==<;;;;<=><<===<<=<<==><<;<<<;:::99::97876668:9<FHCGLLKLKHFDA>;::>DGEFHHHIHGHHFFFGGFB?<:75AKUVG=88<==<;:98::::<==;:;:9:::9:AJKHC@BB>>=:89?HJJJJJH?=@A@>>?@A?<:87655666655567776555455554555555555554444332323544448<=<<??;;;?AA?@OYTSTVVJ?@@??@@@A<9::<@ACDFFEBA?;9898768=AAA>=<;;;;87777776565546AG>689:<=;==<<<>>>=?@?;<AEHHGEFEEEDDDCDFFFFFFEFFDA>GT[WURQPNJMUKFIKIIIJJJIE=5356555554553333333445578::97665554445444555555568:;;;;:987655466646899755@IF;0-3=>:985258::<?AA?JTQC9=A@>=::04s9!.,<YeW5'68203<@A98=61HH/-55202677861-,+,-03315985212/-+)&)066.)++02+*(*049CHMblQ7/.,+*+**(8V\\_XNG=101.,)'+;@>CB70//-,*++,,,*)))(*,0/,,15577875301.--4=GO6(+-26860./.,*-0.1>GD@@@=><2...//7;71-.37;<<:300/..,(()('&%$))#+:A2#')1NW1'-117>E=16BD@7.*,**+*))+-06<8-,21,,+*).32000+)3=;56;=:94('+3:7212750(@84EMKMLDA:.('*.32359:99?@5)'+02336:0/DNHHIGEGNSWSSL>S[IF=/-149505:/:VK.+3.0432=ND/**.253-+/6:DVfhgnmXEYjaSC::>><;?>44;??3*Fd_Z_cT5'**5K@/A=.1.+*(,=LJFLU}m=))'&&&'2A>,+0^`7jjjjihhhhhhgghgfeeeefdcbcbcdcdcb`]\\^dlvyqkiijlmlopopokiigccccbcddeeeeffggijiijjihhgfeefgfffgjpxuiikkmnnopppoooonmmmllklmlmmlkigfeb__``acedaacegiiebhrttvvvutuyuf^]]]\\]]]^^^]\\]\\]]\\\\\\\\]_abddfimne\\YWWWVUUVWXZ[ZZ\\\\[[ZYYXXXXWWXXZXXXXXXXYY]ef`\\_fnqqm`Y^aa``_didcu}{z{icaacefhhhggedccc_^sssifgmio_ipru~~|wv|~kpqnmllnoppqtusolhitxrpqqrwwxz~_\\Z[[Zbvygekd``^_\\elkcagldjhWX_UVagjlkkmmmlp{}vpotuw{~r`\\Zctqg`ZZWUUSRPNOOPQSUTSTTSSSRRYZSPTVWYZQGMQSUTUZ\\TJFBADHKLLNPQRRRSQPPPONNOSW`x]COXZ]TFCEFFGHHHIJIHHIHHHGB8BYWHCFJKKJGEIDFomGFIHGFDFHHHIIIJJJHGGLW[XSMJJIHGFFFECBFOIGHHIHOsdRlRCIHGHIIKMLKKLKKKKMONNLJGFEBEMJEBCDDCDCDDCDFCHZf\\SRSUVSQOLLMLHHIHGHHHGI^vvUSUTTTTTUUUVTLDEEFHEEEFFFEDDEEEFFFFGGHHGEGGFFFHIIHHFHIHIIIGFEDCDEIIIILPSN\\FKHIFOSLGFFGGIGFEHJHB=BM@IIGCACHOX_hnmkdY\\]TPQQQMQmvg`_da[SrZJa\\MSNKIDDD\\ƣnlux{eKEBBA=JLBBBBCEHKJIHHHIJKLOMGSuvWDNJOYgkP^bJNNOMHFFFFDBABBCA??@BA@???>??@?>=>====>><;;;;;<>=<===<<<<<==><;9:;;988778;;;<:8467876?FHJQRPPONLJGCBA@??EGFFFFHIJJJIGFEDDA=;;:8@U^YJ<559<==;98889:::;;;:9988::;<:8CQSKB<<?@@>>??DHKIJLKCAEEBAAA@A@>:86455444554433567665555554555555555555444433333334459<<:98857;?ADC6?SVTVZTEBA?>>==>><:9:>BCDDCBB@@?;:=<:88:=AAB@><<;;:657876775432/9FA55888879;<<<<<==>==>>ADEFGEDEEECDDEEGKJIIHHGFEBADPVWTSUTOLIKSKFILLLNPQJA:765555444444433333333566788887777766644324655545568;;;;;:8988878876568899606DF;1.*7JJGG?349;:;=AA?CSZK:;=?=<::2+a{;!/,-Fb^;+;;014?FA9;@98<;23;?<9:<::961---,,/3678886322231--4764/&\"'/2.+**+-<V`WV[WG5-,+****(:\\ZKID7.*/30*((*7?=BI=,--((*,,./..../.-/2/+,4=>>?@@=9632..7=>>0/-,-2540253.*/532?KKGFDAA>1)-/+-5<92*)/6@B@:3233.)(')+,,,5?3&(()8J7!,BOB*(,+(+2:4/>HHF<75/*)'*36,$*/00-,.0/-,)%(02112,*5>=98<?B@7$!&,//1128851A/2CJIFEB?4+((*173249<86;D<-%(03335978HOLKGECDKOVUOD9<?BH@/)2>@95756N\\F30/)5EF>?OG/),./3881/;?:Jblqnb\\akkh^LD@?>>>=;746:=4$:gj]cbJ..;0*71*1-*21.-*:U_\\?9DcD++)&&(&)9D9*&4mu7%kkjjjhhhiihhghhgeeeeedcbaaccccc`^_diqzyoiikllllljigggecbccdegfeffffggghhijjjihhgfffgggghgjnt|}pkllnonnpqrqqqqppnnmllmnmnnmlkiggebaa``abaaabegkkihinstvvvwtrx|rbZYZ\\\\[\\^^^]]]]__^^^]^__^_afiklone_ZVUUWWWZ\\\\ZY[\\\\]][ZZXXXWWWXYXXXXXXXXVX\\_`envyxz|ug^fhbhpstpw~}xgfgfghgfgiiigcba`_bimvjcefkprbiqstr~{yyvsyliknmlnpswyxx{{wqimutqporuxx}~sY\\]\\\\annbbdba``^aaehffgghmjdb```fiklmtxwvvw|w{x`Udsyph[YWXZXVWTPNMMQVYYXWTSWYWVVUXYRRVSONNHDKUYZWW[c_NFEBBDFJLMNNPRRSSTUTONONPVb~{MZh_QMJGGHIIIIJJIJLJIJIHHJFDXcN>=BGKLJHHJIEbjH>DKKHGGHHGGFGIKKHHIFGR[[RLKJIHHHFCCB@HGDNQKGJuvYfMCIGGHIHJNPNJLLKJIMPOPPMIFCBEKJDBCCCBBBCBCCGFBQhhXRUXXTNKKNNJHFGGEIMJFKjjTSUTTTTTTUTVRKFFFGHIGGGGEFEFFFFGHHGHHHHFEGGGGFGGGFGGHGHHIIILLJNSSMLLJLRTVHEHFGHMPLGGGIIIHIIMMKFABQ?ABDFEBACHR_gc^ZVZZQQPLOLZwtjehtyzikiW_bx`ACBDwxw{{p`TNT\\ce]VRNNJIMFBCDFHKKJJHGIKKJKMKEOmtMIHJFFR}w]\\ZKOOOLIGFFFDCCBBCCAABCA@BCBB@?>>>>>=<<?>><::::;;<=><=====<<=<;;:99::98766788;A<<44667?HHJMOMKLJJJHGGGEDCCFHGGBBFIJJKIGEC@>::998;VkeQ<6559<=<977788:::::::8778::;<;:?KWRIC@BDCDEFD@AJKKLLBCECA@A@>;8987544345432211234466554346555555555555544444444324457:<<876657;>@A?65L\\]_^QC@=;;:89;=<;9:?CCCC@?@AAA;;??;::;>@@BB@=;;:8678869;965412?C72444212468:;;<===<;=BDFFEEFFEFFDDEGGKOMIIIIIGCACMWUURRXVMJHJPJFIMOPSUTF96766554322442233222333455666676677889888756655445679;;;;;99998:;;998878:::7/+7D?1/+/KYSQH649;;;=?A@@ISOC<:<<;988-Rs: 1/+4R]='25135;>98:;>B<99;CGC=;;;:762//.-,-27;9641////013673/./.(&-330.+))JqqYJHLD3+*))))**9N83CC93,/61*((*6>?AF=-,+*)*,/465443210//-+,2<@@AA>72212.-<HUL89/)*/222254.-1546AKKKKGCGB0'.5312440++/4D?=81146/&%+/-(4CP=,*0-++6G@>RWD0(&)'$%')2EFDB96:3,)()-:6$'43./-+.0..+(',-/57118?>>?BDGE:&\"$',...03645?-/:CGEB?8.+,1*)20/4<>98:BC8)%.13347=?DGFGGEA>=>CD>856;CHE9./7:<>=5=[[D?3\"*CMG=;ID1*+../8>86@9,Kg^engr}tlndQJC=<=?:0---/56*0Ylbja9%<WA''+'(1:A91,*MqhQ0,4Df\"&.'%&'%.=>1,.C\\='/iiiiihhhhggffgggfeeedddcbaccdedcbfmqsy}z|~pkkkkihhgeefedcbbceggffghhghiiihiiijkigggghhhiiigiqy~vnlmoonoqrrssrrrqppponnooppoomkihfcba````_``cefjjjjhlpsuuvwskp|{n_YZYZZ[\\]]]^]^`__`____]\\\\\\_fjjnrnib[VTUUVY[\\[Z\\]\\\\]][[ZXXXXXXXYXXXXXXXXXWXerxxwy{z~{nfelxzzup~}tnmqvvfj|yoeddeijedb_aceedif_bbdggnyflqssqu~}|zwwxmvpyhbhmmnqtw}yyzunrvnmmmrvxxZZ_^]`mna__^_`_]fdge_chfhhiqrojfiigl~{z}|y|s][jxo^XSV[_a\\WWYTOOJMVWZ[XTRQW\\ZXZ\\\\VQSSNNLJIHMUXWWWUVadTFCBA@DLONNPQQSVY[ZVPMNPUmU]g^QJFIJJJJIJKKLKLMLKKJJJKLSf]C;<>BGJJJKKMF[lKEOLKJIHGGFFEDCGJLMJECGMTUQMKKIIHGEEEDHFDM_YIBfevMGJIHHIJJIRWMJKKJILMOPPMJGCADIHD@AAAAAABBCDFGBE[k`RSXVPMLLOPHGHFEEINKFPzt\\RTTTTTTTUUUWRKFGGFFHHHHGFFFFFHIIIIIGHHHFGGFGGGGGGGGGFFIKMNSXZaimgPQROQZWfjAFFFGGGGHFHIKKLKKMMOMJCBUC@@ACFFDCDHKNPONQYWOQWOJGMdlsܹ}\\=@>P{xzp^UQQSYZZZZ[UQMGDFJKJIHIIIIIIHIJJFVnaIMGJJFKr~cXPLMOOKIGFFEDCCBCCCBCDCA@DEFD@>>>>>=<<=?>><;;;<<<=@@@@?@AA?><:988999988877667892=A973@KLIIHHFEFFEFGJJBDHGEFHGE<AHKLKKIE@;9768;83EiiP>789:;<<97777668::9::9988:;<<<=@?@IPRQJGGHHKLNIBIKLMJBBB@?>?><:8975565467543333564455655358656555555535456554444444458:<;876689:>@@;61C]de`N>;:77767;>=;;=ADCBA@ACFGC=;>=9::<>>=?A?<:887655569;;9866;A801123555788:;=>===<:>EGFFFFFFEFEDEGHKNOLHGHJJGDAFSXVUSTVRNKHJLKFJPSTUXWI:87665445345422333443333576544544567789:<??;75544468:;;;;;:9989=><;<;;::99;60*.=B40.-FXUNB338799:;=BDDMUL=9;:987=0=c@#/22/>XH+14146655568=><<?BEB958;:8755200/-,.1443/--,++/376/./1470),47873(2c|\\=4220,**++,,,,:J*2DC=:3360)('(4??=<941-+**-27::;82.,-.-)*-05;@@;1+*)***2@M`O97,+,03786320/0249CJJKLICGE3$,895000.,-/2>65300670)*45,*FQK2-49785,1NZOKG9+\"((('%-:CA;8436730.-,77''6;31.+,/..-,,-+-5977::9>EHIIH;*))'.10100417>..,7GE>6--1382/--,/6;:9:@D@2((+1115;>;67>B?95212333/2<CGJE=418BE@7>XP@RK4E[R@8:CC5+,0/28=<94'3`b@Xrlz}fapm[KC;8>B9+'*,+07/&>SN]]8:XaJ-)-)4O\\[F6-4l~N,+,*G;\u001f&*%%%$'395215D@+,2hhghgggffffeeedeeeeedccccbcdefgikljhjqzxqkihgeeededcbbbcegggghiihiiiiijijklkjihfghhhiigis|wommoooprrssssrrqqqppppooqqqpomkigdccaaa`___bdeijjiikortuuwulo{}zrf^Z[ZYZ[\\\\]^^^_`a`aaa`_^][Z^ekmnnlhc]URSTWZ[[]^]\\]^][Z[Z[[ZZZYXXXWWXXXY]itsmr{zvszzuwzyvsqwyrmsuqv{rgios{qbbipokiccedefebbabbccbbnleknqpoo||{xxzxutwmrvmtmceknprrox||xvvxvqljmuxyz_\\`_^_jj__`^^__]ailhbekjedeidjnrgZdzwxyyvrrquxd^in~xYW`ecgph[VWWRRMIT[YXWUSQPUZXWX^^VOOONNMLIOWUTUTRNJSgcJ@A@?DOSQPPQRSUX[]YPKMOVwjVjXLKLKKJJJJJLLLNNPPOMMMLLLNYeR>>??@ADGHJKMGWkUSVDDKIEGGGHHFDCGMNIEGHDIRRMLKIJJHIHFFIGFBU_]LK}hKJMKJIIJHFOYQIKLKKJJMNKIGFECFKIEA@AAA@ABBCDEFECL_cVQVTNNNOPLBAGHGFHLMCXpXRTTTSTTUUUVWRJFFFFFFFFFFFFEFGIJJIIHGHHFGGFFGFFGGGGGFGIMQSWZ`gousfOKKKR\\VfUCHGFGFECEFGHJJKKLMMOOJCBUDBBCBDFFHGGEBBDGKUSNVecICTzڞ]ԇPqoKEFH^Ȼvxzrc[WVWVWWWYXXTIHLKIGGGIIHHHIIIJJSaOLLHJJGGU|dTFHJOOLJHFEEEDCCCCBCDDC@BFGC???>>>>==<==<<<<<<<==?BACBAACDC@<87778899988975568657=BDHOIJLLLMLLMOOQUTJDNIFFJIHB8CLMMKIG?855766<63QhP8579::;<:77787678::::::;;;<<>?@CC@;9DTYSKIJLNPSTQOLNPJA??<<<==;:;:7556889;987899987886775346666655555533466555445455568:;98778899<>B>83=Xfh_E98766667;>>>?ABDDBAACEHID=;999::<<;;<==;987531012589:98:?;212358>?>=;:;<=>=<<;:>GIFEFFEFEDDDEFHNPNJGFHIHGDBJUWUUWUMKNKJJKJHLRWXX\\XE88778666655554555555333355432332234555679=>;98665447;<;;;;;889:=>???<;;989:730-2>91.-AUXP=013367778=??JSM>886567:11JA-12322MS84515655657::67:>>;5/058876565430-,,,+-/--,,+.6974..3597/*.578;80Qv`7)('&'*)),/100-<Q/1BFA>976/*)'(3?=8;>;3-+.1336;<72-)')..)),,19?>6*)-+)*3=<>E1.4..-2:<870,---/17CJJLLJEBA4'*8<7210/-.123/.-./13/.5:535@?@2-:<;;8*1ZZE>:37@9+*)(7>7951247;:641.35)'283/-+.1210/./016;86743<FHIII9+21(-1240/,/=<//*3B;65,046652-+.--0235;?=81,,./0456545:<82/000122-/AGA><:@JLG:47<ND9]dU`i]G>BJJ7+/545665/(-CO>/RrkwzSBWj\\B@<8CJ@78:50381&.7+:QQhnN801,*HholU?.Fa=,+-(%'&''&&'')131436@:453fffgfefeeecbbbbbccccccccccdeffgijf^]gr}|pjfeccccccbbccdfhiijjjjjjiiijkjjlllljifhihijihkr{xqnmoooqqrtssssrrqqppppppqrrqpomkigfdcbb`__^`cehjiijkosutvzxtuz{{|vi_]\\YX[\\\\\\]]]_abbcdfeeefdZU[cghkorrndXPPSVZ\\\\]]\\]^_]\\]\\\\[ZZZZXXWWWWWW\\juk\\]nytpuz{{}~smnln||vphgecjupigffgjllmyxutpfgfefefhgbbcbbbaefflmmmmu}zxvwvususnmlwzt~sfekpqrpgsz||{ztloxxxyk__`__`cd`__^^__^_dlolijhecb_aeopZt~yxwtrrsswvaViwsYonaf^[[XTUTHTd`]XSRRRRUYWTTVVUQNOPOMPPSYTQQORXXQS_VEACBIQRQPOPRTUWYYUPRSWYsÑ\\iYOONOMLKLLLLNOOOQSSRQQOOOMM]dK=???ABBEFGGIIMY^LDEGKHGIHGIIFFFFJLIIKLIIOPMLJHJKIJJIHIGHDFXigTMxaJLLKJIJJIHJOLIJLMLMOOLIFGFEFILID@@AAA@AABCDEDFECL[YRRPOTTQOHCDGHIFGONB\\rYRTTSSTTUUVWXQIFGGGFFFFFFFFFFHHGGGHFGHGFGFGGFFGFEEEFGHHOTT^_gmnmfVKFGKOTSXTJJJHFGFEDFHIJKJIJKLLOPKDBUGCCCCDGHIHHGEDCDIRWTU[czݼ{TArr\\pJGNQdİlUU`gea[RSSSTUUVVPOPKFFHHIIHHHHIIIJLMNNJHIGFCAb~gJB>DNQMJHFFEEDCCBBCDDDB@BDB?>>>=====<;<;<<<<<<<<;:;<<;:;<@DB;777788899899777667;66COZXOORUXZZZ[[[]b[QU[OIGIHIGAGOPMHB>955466794FZQ825789:;<8789988998:::::;=<=??@CGDBA9<OZVOJJOPRSVZUPQRJ?==:;;<<::<<96679:;<;::::;;989988865556666555454334666655554676789989989999;=AD@7:PgjV;88766769=@@AACDEDEDCDEGFA<97888:;;9:::::;<;8774324556659<533347;>??=:99;>>>=<;:?FFFFFFFFEEEEEFJNOMIEEFGGEEGNTTRRRMCEIJJJIIJKPVZ^\\I7689;:678776577776555333331212212213333336889::876546;<;;;;:8::;=ABAB>=;9898631--472//:O]V?311145555458AMN@875667743895433627KG3046666:>?@@649=70-052-15566763/-,,+)*-,,,,,04744322231,(/95398Bd]4**+,--*+,/2322-<R.,?GA>:65.*)')5=;9=C<0,.24535<<3-+(''.0-,+(/:><3-,.149C@1-+'+31,*4=<53/+,,)*+1AIIKKHFA6.+/:<61/--,..1/-))+./0139:9=71>8&,4856,+La;/D=2>PD2*,'9G648216>=9652./2-+01/.-,.36552//37886430/:EGHIE2)32'+10-.1'/?7/0+/5/065235630/1540//./489746;:114779=?;840.00..13/3GJ7*&*<SXI5279G@9\\h`ej`K?CLG9335874/,)/EJ403<epzt@'=XK:A>:FQMILK>48<:573#+Qi|l3 (.+,HfstcH3bl@?2*0-%((&'&&''),/1307C>:87ddefeeddccbaa`a`aabbbcccccdefffgd`]amw~vkdaaaaaaabbbdegjkllllllkkkkklkkllllkiiiiijlllot||womoopqrstttsssrrqqrqqpqqrrrqpomkihfdcb``_^acehijkjkmpuuvzzyxxyyx|wg__[YYYZ[\\]^^_abcfijijkljd__`beinrusi]VVTW\\^]\\\\]_dgea^^\\[[[ZYXXWWXXW\\df\\W[chmwzx{~{xriflnmmnljgcaejmhor_ilf_mgcmpkeefefeefdcbccccegjltmkjm{}}|zwtusrtukqymcj|~|iekrrrph{~~zrpz~}~ymjfca``__aaaa_^^^__^^`lvulhfb``__bspt}~zwvwwvuzwm~֦mpwaV[]]VR`eW\\ghdZYWVVUUW\\\\Y[ZSSWUPPQOSUQQRLNVcmiaX]\\JEFFLQPRQOQQRRTWWVWZ[\\Wcz^IAMTQRPNNNMMMPRQPSUVUVUTSSNNffKGE>>CDBCDDBEII^gIDKLLKJJHHIHFGIIIJIOTRMJMPOLJIKLKKJKJIHHFBNfqv\\Kbw|YJMKJJJJKJJIHHJIKLMSTNHGFGGEFIKHD@@AAAAAAAABCCEGDDQZULKSYYPLHHIIHJIKQMB\\nXRSSSSTTTVVWYPHGGGGGFFFFFFFFFHHHGGGGFGGFEFFEEHHFEEFGGFDJOSY`hljdZOIILMNOPQOONMJGFFFEHMOPOIGHJFGNPPGDUJCDDDDHKIIJIGFDEISUHGpǉ[KQRWj׷mYy~x{}pJGUPLm~dW[gsx}dVZURSSUVUUTNDFHHHHHHHHHIJIIHQMIJIFFDAAqmFB:ALRMKIHFEDCCBABCDCB@?@A@>>===<<<<;<;;;;;<;:::9778654459@B;76667887899998788878@NPOT`\\XVWUVVWWUVVXXWZXVPGHHIKMMOKB:886656872?\\S:134689999779:;989::::<<<=?>?AA@AB@AD>;FW\\VOMPPSUVXYXTSK?<=<<;<;:;<?;778:<==<<;;:;<::9::98766656665544444335667655546989999:::999:::<AD?60AdjM8::87889:>@AABDFFFGFDCCBA<9877779::999:::?AAADEB??>;98768524557;<;::98669==>?>=<@CEHHFFFEDEEEEGJMMKHFEFFEDIOQQQQOIA?BCFHIHHJKOW^^Q?>CEDA;678788777876455423321112212323333324678897777;=<<=;;;:9::;=@ADC@A=98776331-,11./4DXQA@94334444445:ELC;76887786466556781;L>268779=HHB?00;>2*,39.%,2367641/--,+**++,--,./0111320/-)&192-4?RM0&*,/55.*-225641,>T0,9EDD;75/,)'*6<;:=@:015420/2::3/0-((.12211.4>;110/4>CE9//14682)-8;8402552.*('5FJIHEEB4(+-,---**+*,*,-,,-*,02225;@A7.41'(*,-+#6W7&(OO51123//'(JC/6727?<4343-+/046/-..../1243215:86420..7BFGG;-)//*.30*.7/3=300,+**/7643561.2998872.-356655AB236=ABD@:40...,,+,26<C<(%%&)5DI@311=93Sc`dgU@67<878668740+)8KI=2('Ho}_1,<G><B?<FNQSTPE59@CFF@2<avz]-&,,5BGXv}iLEqxF<E7)+)''&%'&&''&(/0/.9B:531ddeeeedccbaa`____`aabcbccddeggecbciou|~{xrlid`_`````bbcdehklmnnmlmmmmllmlllmlmkjjihiknrtx}~zsooopqrsttttsssrrrrsrqqrsrrrqomlkihggdcba_`bdgijlkihkswy{{zywyywzvgaa_ZXY[[\\^^_`__adeeefgknke^\\]_`ejlkjdZUTZbd_]\\_gmne_\\\\[Z[[YYYXXYYXY[YXZ\\XZkxtw~u{~ncgjhiiiiiigjnmou|klnmhdlolmqkeeffdeefdcdghjqsu}wnjgmyyz{}ystsstsnmkhin}zmelsqsyxwsuq|{d[Z]^_`__``aaaa_^^^^__]^kwwpmha]_^`drvnmpzvwxxxxwtxuxmfadgWQMJf~eSZZ\\`]\\\\[Z]n}{qf[WTOQSQONKLNOXfpnedeb_QGILNPPRSQOOOORX[[[[[XRUxic\\URRQPPOPOPRTRPTVVWWWVUVORj`MPG??CDCCCCBFLOVcSGMNPLJKIHIHGGIIIHFLUXQIMPONLJKLLLKKKJIGGCKimprZMWcqzUILJIIJJKKJJIJJIILORNGBCFGFEFHKID@?AAAAA@ABBCCCFHDJZZKJXZWOJIGGIIJKLKICP~lZSSSSSTTTUVWVNHGGGGGGFFFGFFFFGHHHGGFFEGGFGGHIIHHGGFFFEDEPTVcijibWOJJJKKKLORRPOLIGFGGNSSNIFFFGEDGNQJFRKDDDDCGJJIJIHGFGIICWnPRUUTY[{ʣYJ`jkfegi\\HINE>Mp||dbf[PRSUVVVOCFIJIIIHHHIJJHJNOIGJKHFEE<\\oBCA@DNNLJJGFECCAABCCC@>>??>>>===<;::;<;99:9:99:988898665557:8765567888999:89:999;HRRHIXd^XRKHILLKJKMKJQPVZUMGIKLKKD<877765786<WI9453369:987779:;::9:<;;=>>??@ABB?>;:>@<>=QgaWTRRSUUVXZXWN?;<==;;;:::>;788:===<=<:9;;:::9:999877666655444444456777555469:::99;::::::::<?A>5.9UXC<<<:99;<>?AAABDFFGGFDDA><9889999999989;<=ABCEGIHIIHGFDD@=98889::;97544568:=??>=<@EHHHFFFEDEEEEHLLKJHGGGFDENRQPPMG@@BABDFGHIIHNX[WNNTQKE?;878899777666545533442221112332212223557777899@EDC@;:99::;<<=CG@AEA=96554540+,///29FONI?87444556658>CB<967777777754678621:F<87588<7:@H@048/+/45/-355773//.----,,,,,,,,--../020//-('/6/,4CL3$)*,165-*-32496/,@W5-5>DG@752-*')5;:;=>70364000378763.)+0445<<..>:100/2>KE5169<983,*164435;<5-*)%,=HIHFEC5**+****''*+(*)+,/.((26566>EA31/+*((''%(=?**)PJ*!#%',,(&EK0053685./32.,.397.+-./.--/0555797672///6@HG@0*+-0225515=36:1..,*()/6853460-2:988840/355554BD48>AEJB;61-.-,*+,+17=A/#%&%#\"1?<3-/62,?\\ejaH7323-/6657772**5?>8/%#3OXF88=>>CC@?CGOY^YN@A>DOPMIL^sX/4419LH]ynZR`VFDB7*'&('%%''&('),/&%:B84;71dcdeddcccbba`_^]^_`aabbcdddffdehlqvrs{}zpqkedba`_``a`bbceehlmnnnonnooonmmnmmmmmlkjkllkjnu}{vspoprrstttttssrrsrsssrsssrrrqqomkijigfdcddeeghikkijpuvw{~~zwyzzz}ufcb^\\Z[ZZ\\]^^]][\\]]]]]`dge]YXXY[\\[Y_b[WUV_hfd^ahnsoaZZZZZZYYZZZ[ZYXYYYZ[XZefgxywqs}rcejkkjklmkjigghsmp}swzogghgfhfdejquz|wqkopu||xuuwwutsqmnrt}}q~timsquaRyv}|]X]_````````aaa_^^^___^\\fvwtuob]^`dinolpohs}vvwyyzywxȃnp]\\^jeZh|qWQW]afa__]]jyk`UOOSUURONPQSZeiheacfbd\\IKVVPQQQQNPRTX\\][ZYXV[all}kwQQQPQQRUTSUWTRTVVVVVVVXR[eWPRIBACFFFFDHKLFBJLKLMNKJJIHHIGGIJHFEHNUSMNPOOMJKLMLLKKKIHHGLajacdXYXVf~zPGIHJKLLMMMMKKIHIJJFCDCBDEDCEGKIEA@@@@@@@@ABACCEEDGV[NNWVTNJIGILLKJIFGGDqziYTTTSSSTTUVVRKGGGHHGGGGGGGFFFGHHGGFFFHJJKNPSSKHIHGFEEDFGPUVbijh_TKGHKKJIKNOQQONKIGJMVTMECEEEEGEEKJJFNMDEEEDCHMLIGGHIJLUrMWYVWS\\iR˦cWiuxxpqyY:AGD@AJ]|vrrj_hr[ORSUVVPDEJLLLLKKLLMJGMRLFEHIGEHD@VgCACGQZTKJJGFECCA@ABBA?=>===>===<<<::::9:::988899888987775644655567888889::::;99>EPRQJEH\\b^\\[TKKKJIJMJLOQWZUJFIKKJG<866666687:UW67753579:965579;<;;<<<=>>@@??@AAB?>;8<=<@9Jni^ZXXXYYZ\\]^aVB;<=<;;;<;9;:8889:<===<;9:;:9::98:99888887543344455557666544689:99:=<;::;;::;>><79>?<>?=<;:;<>?@BBBDCCCEFDBC@=<:99::999:::9:;>@???@BEHHGGHHIJIHGD?9;998742135659@??>=?BFHHFFFFEDFGFFILLLKHHIGECDHHJLNG=>AAAACDDEFEFIOSUVYVJ>;;99889:9776666655565444533333454423312556577788:>CGC>:9:;;<<<@KH=AEDC?6566441-,/./49:CSO:<;656779::;>=<;9677677777546784135<8647<=<567@IA63//01128<:6561+*,../1110-,,,+,,-./////0.*),-..39;50)),/0-)).0/268.-?\\=288:<>;:7/*)*4;::<:0055202689:<81,).79639D1'58/-,.2EQB118;;72/)'-564449<2****,2;BFGA:50-+**)(%%*.10+)/4/()-/149@E<,*,+,)+,.-3A>6-0F;&&**+'(('6L8-1-,,*(*,..237<6,),,./.*(*/267788732434=E?3))-034226:;:079.--+*(+.6963441/154444424443441>D6CJICB9210..,+*,0..5=>0(*)(('+-.1661/(-L^_VC745<<42676891(-53,))'*2513?@>AGMKCADGN[da]UI5?RSSSRPcg@6=<;<BKk{}|pTNXP?85-&&)(%$'&&('.5.\"3WM29F9/ccddddccddcb`^]\\\\^__`accdeegghptsqopuzvqz~skjieaaa`_`aabbdefjmopppoopqpopnnnnnmmmlmmlmmmlnty|}xvrpqqrttttutttsssrrssrrstsrrturonljjhffgikkklmnnnoquqmt|}{yy{{|}|seadc^YXY[[]]]][ZZYXXXYZ[[ZXYZ[[[XRQTVVUVX^ghecfjpvm[WZYZZZZ[\\\\\\\\[YXZ[ZZZ\\^Y_rzwzyejl]Zaffeeeedeeecioohlkghhefow{{umimpuwwywuvy|{xuwusuw|{sy}wqnvy|YRp|uv\\[^`aaaaaa``aaa`^^______clyxtsf\\]aijjkmmmlnu{xsvxzz{zxu{ߚvwbXgf\\Y\\^bhgeccupXRMMPTXZXUW`edbaa_^bdfecgbOJZ`YUQOPSVXZ[[[ZXW]`dhiewSB[MQOOPQSUUUWXVUVVWWVVUVVT]_TRRMFCDHIIHEMN>=DABKNMMKIIIIIIGIMLGHHGFMRSSPPPMKKMNLKKKJJJIIENcc`]YUVZ_lqPDIHKMOOMLLKIGFEEDCBDEEDDDBBEGKJFB@@@@@@?@AAABBCDEIPUORVRNKJJKNNLJHHHJKEZzgYTTSSSSSSUUQLHFGHHGGGGGGFGGFFFFEEFGGHJOTXZ[_THFHHHGHGFFEGKMU`ig^SIFFRNILMNORRQONLLNPVSJCFEAEEGHIIHHFLKEGFFEEEQPHFGHLJAzЌOWZUXYT\\jMCСlgr}W>FJFDB>Idzidb\\ilTOSVXVHCELOPOOOOQQPKJNOJECCCDFHC<LfSHFOcuwdNJIGEDBA@@BA@>>====;<<<<;<;:::;;::988888878788788777:944567879999::;:;:=GNOPMIFHMY_bmo\\PNNNNNOSTUXYZSHHLHD>8777676886>L778745679986457:<<;;<<<=>>??@B?=>DFD?:;<>@9Bbmfd``___accadXD:<<;;;<>><;;98888:===<;9:::9::98:999:9999754444455556667644689999:<;;;;<<;:;<;976667>@=>==>????AEGFCAABDCBAA??<:9:::9;<<;::<??;99;>AEFFEEFHIHIIIIC<:>=;87875528@?==?@BDFFEFFFEFHHHHILLLKHHGFDBABCDHI@:=??ACBBBBBBACINU[]S>;:97777888787776555677435555555686666433344455577977=A@@?>=;9:<FSM?BJJGF>776652/--.08=97EN@:<879:=>=>>><::87887777876567775466642>HD;?=1+6F?3.,-,/7==95352/./0./0-,-,,,,+*++,...-.0/-,,-//./36/)),.,+,-0065252,;aC592/05871.++*3999;5*.74/015?A?<81//4<=;8754-/1.)(/CWK4,+26641.((/5532032,)+,..,,/8@8-4;1*((''''&*47-'.60,-.,+).<?4+),/.*+/468GP8)7>4.8:2<3.)!,E=-3+%&&&&&(,9CIG7)(+**-.+)'(,5979:758:86:;5,),0112015;:5/:6--,+++,.5;84331000111122/---++.;E<HLFA=60/10/+)-6<>329<60/,)*03569<<531/7=HO@665CI?675696..8;.#%(&+201599:?HOMGFHJOU^cd[L6;MQTVSMSA37779:7Cm|~sOObU946.%'+(&&%%'))05/-MjQ6=A3(ccddddddedbb`^\\\\\\]__`acddefgjrvrkhkptsqw~}}||xpljgdbaa`aaabbdefjnppqqqqqqppoopomnmlmnoonmlpuvvwy{}~}xtssrrsttuuutttssrrrrrrsttstvvutroljigfhhjllorqrpjffcbgpz}{{||{|~uhhje_YY[[[[[[[[ZYYXXYZYYZZZ[\\]^]\\VRTUUUUV^bfccfgoylXUYYYZ[[]^__][YYYZ[[[\\\\^eioumiy}o`[_`_`aaacluoawkoojhjjkszxqkionl~g\\guxxxusv~zw|}vuvwxz||zzyyyxssqWY`gy}|k[\\_`aaa`aaaaaaa`^^______adsyyzm`_cmjejmjpttjo|xvvwx{~t˾w}riϧ|l[_]\\ckhemvVNLMSWYYZZX\\jsqk`YZ]`efdbecUNXcaUTXXY\\]\\ZY[XTW_`VZdg~FMSKEQQNNNPPHIPPUYXXXWWVVUVRWbZRUSPKEFJKLJHGFBCGFHLMLLJIIIIIIHHLLKJIGFHLSTRRQMKKLLLKKKKJJIIGEUb^USPQXgngrUHNLMLHFECCCBBBCBABDFEGHGFEDFHKKHB?@@AAAAAABACCCDFJNKHOTOMLMNLKKIGHIJJJILhjZUSSSRRRTTRMHFFGHGGGFEEFFEEEEDDDEFGGHLRZ_^YUKFHHHHHIIIHGGEDN\\hg^SHFKSKINPQRTTQNMMMMNRSSHDEEDEFHJIKKIQQGIJGGGDLNHFGHGGk˽Υ^VXUWX[UX_M?GǾrbflsuvtQEHHGFCBGKfsc`ZWnjPOT^S=>DJLMMMONNONLMKIIEC@BJRRPOKOPOXixlNHKGECB@?@BA><<<==<9::;;::9:::;;:988888877877779999>E?876776799999:::=BHMQPOKIKKMIO_jpn]TRSRQRTUYXW`^LEIA;67777676878<;6:8765679997469:<<;;;<==>@@@@?;89GOHC?=>>=<<PmnlgdaaacecbcUB:<=>??@B@?<;99::64;>>=;9999::::::99:<<;;:864444455446667665588889:::;;:::;::::821346:<>>>??A@A@AGKGA@ABDFEDDCA<;:9:<;=>=;:<>>=9568:>@@BCDEGGGGGILF<<@B@<<?:6549@>=>@@BDEEEFFEFHIJJJJKJJIGGFFEB@BCBEC<88:<ACBBABBB@BGNVZTF9:7867877767877764444898666779879:9999864333355457::789;?DEC@78<L[UCBONKLH>96652/-,-07<<86>K;:89<>B@=<<<;8887898888886521368876442:FD?;-0.06;B5')*09<;95244310/00/--...//-+)*,..///01.+*-0.,+--+)()-245412>9352*;^E7;63/.,*)(+--27886/'*5743108C?=:6426>BA>=;971+)',;TY8&&)/13310/.046661//+)*-//.+).43-162+)))(&)(',.+'-201;1+,('0520/-,)'*2:9B\\J0-6854;@=?614D>>L751((+)(((*.B[]M.(++*)*+*)%(3987888<<;98531/02..1.18;851;5,-,./0.+.331000/-0:<5-*))(('%$'3E?BBBAA;5///,*-3=GG;4682/31)/>BEF9575434-'=M=5786AFA629=3,4;4+042')-0564469?GILKHINM\\n^HLJ<;KZ^XSR>22558<;AWqcPY\\L676*'+-)''''''-44-9dmJ870'$cbcddddeecba`^]\\[]^_abbcdehhkolifgjimu{|~{xvusrnkifdcb`abaccdfhloppqqrrqqqonoooopoonnpprttw|}|~{wvtsqqstuutttssssrrrrrrtttuvvvwvsniihggghijihhikhb]]``er}}|}}|~znkkibZYYYYYYYYZZ[[Z[\\]\\[[[[[]^_a`\\YWUVXWVW]ec_`hvyfVWZYZ[\\]^``_^][Y[^\\[]^\\^bfefy}x}zmf`^__aabq|wzzqljjlnorvphhno|qobYckorxzuuwy{vuwwunlw}~xd^fmT^hlcqokvwfWZ^_````aaaaaaaa`^^^___^`ceen{ueadmmhnplqonhs|zyxvuuv{nqgsȻŨpmb`^Z^gcctzhSQSQUXY[ZYZWX`jqqh_^__bb_^`_[ZZ[QR]_^[^_]\\[ZSQZXOJUncXCQUVTTQNNMQEAafOR]ZWXYYWVXVS]eYRVRLHEHMMLLKHFHGFILMMJHHHIIIIIHGHJJJHGGGIKNQRQNKKLLKKKKKKJJJLDGVZXWWUU]c^pkQROKE><<<=?@BDDB@@BDFIIHHHGGGIIGA>>=>?ABBCCCCEEDEJMHBIQOOOOOKIIIHIJIJJIITk}jXSTSRRRRTTOIGGFGGGFFEEEEEDCCCCCBDEEEGMTWUPLGGHHIIGHHHIHFFDCK\\hiaSGEPPGGORTVXURMKJIKMRTYQECIEDEFGHIJHOSJMLJHFEGIHGFFEn˵Ͱd[_UUYW[PV]CED8uĬ]SX\\]\\Z_WFEHFCABGL=Ku}d\\YP\\ykLJ\\XB=CGIIJLMMLLKLLKIJE?DP\\ckptxyf[cnw~\\EIKFDCB@??A@><<===;:9:::99999:;;:988:98889879:<>>?CFD<;:98667999;<;;@EJLLNOMKLLGJ@@RajrlWVTSRRTV[YXeYFB@=868877677788:;@<:87567989768:;<<<<;<==?AB@:88:;CKGCA??>==:B^ppkhdcbbfggeYD:>BBBBABA><<;9;;867;>=<:::::::::::;<===;:8666655544567767876666678899:99::::::86;?D?27=>>@BAABABIME>?BDFGGFDB?;9:8:=<;<;:;====:678:<<=?ADFFGGGGGFA====<::;85549A@=>@ACDDEDEEDFGIKLKIGGGEEFFEECADDAC?74569>A@@ACDC@?ENTTF888677998887777775333469;;899:>><=>=<;;;963455565579:;;:89?FKJ>8>Na[ECQQLNMG>8764.--./49;;88B=99=?=>;89::867879:87799841/-179:7432119EB<1/29/3>@3)*.4786.*/598--1//0110010-+*)+,.0440.,))+-,+*++**)(*3<;5.5<531/):ZE;@:72/+*++,-09873-)''.6928TP;>=;:7319FJHJH=3-(%*2EZJ*$*.46653232456773//0/10//0120.131-,+*+,/*)**()+(*-++10,-//02431-+**,29D_j@,;=434357;4*LkL4TU10-+-.,++(%4Xo_0(-,,))***&&,45326;=<<;7543210,-/.089776:7....021-*)*+-.0/0;IH<0*()((()*&1D<79>>?90,*().27>EC9642-,220;HKI@/,20....+<I:3431=MM?=DA5055/1?H?-,111224778@JONECMPXdO7EP8)<`ocY[R7(+169=?@QiymeYC645/*).,')'&&&',0.&?n^4-+$%&bbbcdeegijifb^\\\\\\]^^_acdeghiiihhiihlswy~~|wv{~|wtttqmkjhecbaabbccefhlpqqqqqqpppoopprvyzvsqoorsstvz~zwuspqrruvuttsssrqrrrrrstuuwxxyyxsnjhfggghifcb`bffd__elty~}}}}}ztqnh`YWXXXWXZZZ[[[[\\]]\\[\\[[\\\\^`ba_]YXYZVSSeh\\^joxxbSW\\ZZ[[\\^__`ba`__^\\]]\\]_^]i{}xu{~yohfcaaak~}}vsx~kgimnoqqnlnqvzlb`bejsx||w}|syzruwzvljq{}}}wpstycn}mfw~qzkmkm|f\\_````aaaababba___^_``_`ee`_kuofcdjnnjolnlln||yyvuutx}woanȵo|rcacdcdciymSPTW_a]\\\\[[ZXX[^epsna\\_][\\^[__RNM`uf[\\\\[\\][XURSVSMIQa[{=MRQRRRQNKMKNtdPUYWXYZYWXVTZ\\WUWSMJHJONLOOKIHIIJMNLIFFFGHGGHGGHHHHGGFFHGHLNPONNNMLKKKKKJKLKGBHQTXVTSSPNinQNKD>;<==?ABCCCA?ABDHJIHHGGFFIIHEC@?=<>?@ABCCEFDEILKIJMNMLKKKIIIIHHIIIJL[o|{gWRTTSTTTSTNGEFEEFFEDDDDDCCBCCBCCCCBDIRXPFCFHIHGHHGGFEEDBCBFO[hmgSDHONGCLSUW[YSKHIILPUVXWKAFGDEFFFGGEKPJIJGEDEGGGGGFIϹmccZTUWTTETYBIOE3tĮf]`^[\\\\PDDGHHGGFHJAIrjYTRRezaKPWJ>@EGGILMNNMLKJKJJIHTejmxi^fl~nFAIKGDCB@?=?@==<<<<::::99999888:::999:;:::;=>CDDDEFDA<9866666899:>CDEIKKHHLMLOMB<<<<Dbkvw`XVVVTY[\\]a`ND>;9988976667898;:;=<;7588888788:;<=<<<<<=?AA>769<=>CDBAAA?=>;7BiomifebchjgjcE9@CA>=<<=;:<;9:;;:79<<<<;;:9::::::<<<;<:88888877667777778887566677778889::::99;AHMTL54:;=?AACCCDJKC<>DEEFDA?=<9998:><:;;;<<===;988:;;=>@CCDDFFECB?;876676665559AB<<@BDEDCDDCDEGILLJIGEEEFFFEEDCFEBC?7445788:<>?AA>:@KSM9477679998888787765333358;<<::;>ABCCA@@>><84466786579:<<<;::@HLI?>N`ZHDQQLMNLC98860,,,.279;<98::<CB866678886787887559:9531.25320232228C16<544224A=-*,032-*-4<CD=5.+-./00220/-++,-/2441+(('+-,,,,,+++/24;<03?6.-+)&;[H=>5100013321/9=7(&()''/507oY<=<;:637@KMKE4)(()/4AS<-/249963334883---.--0440.//131.--/-+*+**--*))(+11,))0564434764342./655?Zr`76@;42/,*&(2.^eV>Af;%*)*.--,*(0Fmq7(,++**+**)*.11//29:9;;741/-.0/..0036778:7010/0231+&%(*,.2;CDB>8.-./0133-2C9/3742.**,*.689=?62430.-.0<FKQG7+*,,++,,-1830-.7=FLMJE<689;<<BEE:>A;51,-49:ALLJFAJSPJ;06;/$+VvkQLXH'$,036;:6PrwlJ1470*.220-*'%')%&,-%@mR'')%'(bbcefhkmpsrnic^\\\\]_``bdfhhiiiijjjkoolnw}{uty}}{yvtssqmljhfedefddddefhmqstqpqponnooquy~|xropqqqqsw{|yvtqpqruvvututrrpprrrrrtuuwxxyzzzxqidegefhiijhhkloh_^jy{~~}}}|~|utqf_\\XWZ\\ZZ[\\ZZ[[[[[[[[[[[[[^_`a^ZXXXVN]kb\\fmu|rYRZ[YYYZ]^^_`aba``]]^]\\]\\_elvwy~}|~whaadjx}}}zy}~~ojklpqmnrmkjfgfehfirw{w{vpuvvspoqtyrdgnwnڎwzz~yxxqyljqlv_db``abbbcdbbca``___aaabeea]_`cffdbgnikmokjo{xvxxxyyz|~zldq¤}z_chhifejugRQS[f`Z]]]\\YX\\`ZW_hrkYX[YY\\YSOWr[_ZYUX]XTVXTTURLJIYpXEQRSUSONMMDM|`QTWWXYZXXWPJJMPSVYXYQMWUOMKKLNJHJLLIFFFFGGHHHGGGGGGFDEFGJLMMPRSPLLJJKKKKKMKIFEGJNNMNNLJP`SHEB==?ACCDEEC@@AAAADGIJJIHIIKMMNNMMLHDA?@ACBCDEEFHLMLKIHGHIJJJIIIHGGHIJMevcVSTVUVVVUTNGEEEEEEECBCCDCBBCCBBCCCACMYYLCEHIIHGFFFFEDBABBBITYhriRCJMJGDHKQW\\ZSHCJNORTVXXSHEFDFFFFGGEINGDEDBACGGGGIFEo¾rSjdXTTVSKEZ\\DDNO=FƶhhruzmLAGIJLLJIKNEJqeQPWS_p^MOI??CGHILLNNNMKKHDL[ekptv~w_^l|X>@HGFDCA@>?>====;<<;;:99998:::::<<;;;<====>ABFIGEC@<:7666656668:?DIIIKJIEFMMMQF:78=<@Wgw|k[XY\\]]^eaXA@@:878889765678999;=:<;9688888788:;====<<<<=><<99<>>;?AAAAA?===6:\\qmjigeegiio`B@D?;7678999;<:;<==;<<=<<::9999::9;<<;:::99:;::99888877778887677677788999999999:@HMRM;499:=?BEEEGKI@<@CFFE>999989:9:==;:;;;<===;:989:;99;<=?ACCA?><6345455666669?>:<ADFEDDCBDDEGKMKIHGEFFFEDDDDDEDBCA=;:::98:::9:988=IOF46788899::8867876554333568;=<::>BDECBBA?@<64457897579;;;;==;9<DMF>L^[KGRPKKLKE<8971,,,-27;<;;;<<?B=:67887886786677548<;973/0/-,+02.259<%(398634972,*.01/.5?EHLLLC5.,+,---/11/+*/00021-*''(,1/-+,,+++2BG;9<DH;,%%+'9_P42-++/123573,2=9+)*++(*132HtpH:887767<INJ:*%&*0528G;880098.-/1242.)),)*.3430./.-//,)()+*)())++((&,51><1;RZ[VE7,6<:;:5+*3>ASfbH7;910/-*'(&-9P[r?-\\O!(-/1/.../96MsO,++***(*+-/11.,-/46569730-+0431022357;=<726500133-(')*+-8DA5364+-279:;:/.>9.36543101-+13474,,....,+1>CPZI1)++-.*)*)*,-/*/=>69@?846<CFA:=ENQQME=0().27BJBADFFFD>2++('&'C^Y?6OW3$(-57==2MtnX:083.*0820.(('()%+31)GkG#)*'*+ccegjnqsuwwusme_\\_aabdfhihjkkllllmokkv~~}}zuuy{|{xvttsqnllihhgggggeefghlrutqooonnmnprv|yqnnpstrqrw~}zwtqopruwvvvtssqppqrrrstuvwwyz{|}}yqjgffeffhiklorsuqfes}{{}~~~~wrme[UZ^ZY]\\ZZZZ[[ZZZZ[\\]\\Z[]_ab`[ZZWOQbh\\UgwxvkZV[YWX\\`_]\\[]___^]^^^^^^__aju{zz}rjfds|z{~wmmpplmmkhghhijhehns{zxzkuzsquogkrtqszugdjdcbgm~vu{{|wupbϐcbejxrf^ob^^`bdihdbbb_``_`abccdcb_]^`cfifaacfilkjhozwty{||}z]s{qϸ~qoccdbcb_el]Waadha^^]^]XY^b^YYZbneVX\\RIP`߬`ZaZVSUZ\\ZYXSTVRPMMSLLRQSTTSNMKEFutZMOQUYYWYYPD@BFHNTV]VPYTGHLKPTLDGKKIGFFFFFGHHFFFFFFFFFFFLSRPQSPOPMLKKKKKKLLIGFEEGIJJKIJIHIIGFFEFFFGGGECBBCB??ADILLLMOOOOMNNPSVURNLKLKIGFGHIKLMKKIHGHIJJKJIHIIHHIJKfp_VUVVVVWVVULFGGEFEEECCCCCCBBABBBBABADPYSHFIIHHHFFFEEDCBAAAAGTT_phQEJJHFFFEJS[[THDKONOPTYZ[WLDCDFEFHHFLOEHOQOICEGGHHHCPɆIdl^XUSSOGF[YDGHGJCffeot}|_EEIIJKKKJKK?Cjx[OWXQZ_VQIAADGHHJLNPPNMKHDSjrpt|e[bu_EBADEECB@????=====;<;;:8888:;;;;<>>>>>?@@@?>???CC@><?A:56665569<BGJIIIIFGJKNOQJ<:967=EB^wyaY^bdadyXE:?<765677766779::9;<:<A=;88:767889;<=>>>=<;;<;:;;;<??=?@?@A@?=<=;:KnmmkiijhijfP?AA:76689999:<<<<=<;<=<<;:;;;;:;98:;::999:::;;;:;:89:96778887888777778888999988:>FLLKA489:;<@DFGHJG>;>BFHF=6699:;:9:;<;::9;<;;;:88888754344689999:74356555566668==:<BFGFFFDDEFGHKLIJHFFFEEDBDEDCDDBBABABAA@@?=:844768?><6789999:::98677665664344449>=:;>ABCBAAAA@:53445798768:;;<>=:78<CD@HZ\\PKQMIHGGC>:;:3---.39<<<;;<=@<6;77788766675787558;<962/../.,,++6=:7((*4<96662/...-/16?HLJIHHGC@<1(*,+,042-,02/-,*((''(+13-+,-+++-AI?EJD<2++*+)7dY--+,,./01362,1;93.-.3.&*01,6FC:566898<GOF3'&'/9=408:?://772022/,*(+.0-+.321/,--*+-,*)))(('''&%&&8DC<?@AFbtqE/-&,>FB:*&).COjK@>:84-)**))'%(.?i_-!M_68DE;20015>4/PT3*---,)*,/132/,+,/00132-,27973333347:AFC?6:83112/*'*,+(,=C3&*0,+148@FH@/*997:8;=9332,')+++)((()**)*2:9MXE2.00/.,)()+.14,0=:/.459=>?EF<:LSSY^WOE62>835BG@<FIB99:410(&*-4::63AV?(&+7?HD2HkZ@333..,0<0*06>0%%*:<.'Mh?%-,(**gghjmqsuxxxxxuogbabbdefijjjllmmnopprw{{||{yvvxz{zxwutsqnmmkihhhgghffgggjnqrpmlmmmmnorwz~~wplmoqoklqrquy||xuropqtwwvvtsrqppppprsqruy{{|||}}||xpifedeffggfgks|ypr{||}|}~giurgZUZ__]\\ZZZ[[[ZZZYY[]_][]]^ab`^^[VORbeSYsumrn\\Z[YY]__]\\ZYZ\\]\\^^^_^^^]\\[_mvsu|vfn~yz}|wrrqmlgjklkkjmlhhmqz}~xmoyo`grpptnfiprmkiiiijqf]eqŦ}}}uVTR^dfjutu{Wa`abdeghhdbbbaaaaa`acfe````aaaejiaZ[aehgfgnzyu{{||~{tnr|̴|{cmsg_[ZYTemS`tlkjlka^`][[`b`__^Z_cWUZZl`TbYXURSX][VSSTUVSPOLOPORTTSRPNLKh~eKFMQTVVVVSIAABDGHINQLFB?EKINYREFHJIIGGGFFEFFFGHGFFGIJIFIQSSRRKNSQQONKJKKKKKHFECBACGLLJGJMNOOONLJIHHGFFFEEDA@CGLMNOONLLLIHFHKPSUUVWWUQOMMMLNNMLLKJIJKLLKJJIIIIIKJKgxh[VVVVVXYWWSJEFGFFEEEEEECCBBBABBBA@ABENSJCFHHHHHEFEDDCBBBAAADRRSedQMOMIFDEEGP]aWJGKMKKNTY\\afYICDEEFHHHJOMRWXXTGEGFHHGFFK˪RGjiZTWRPMGH\\WDGGELGF|lZX\\ajeNFIIIKLKJHLJ9AjpVOWSDJYZJDCFGGHHKOQQOMKHJYhhisq^_i\\DBCBBCDCB@>???==>===;;:99888:;;;;=>>AAA@@@@?><::<<;:<AHGC>6556AILOOMKLLHFJRRPQP@6868=DC1Qpi]bfcfqsHFA:7865677667789<;9==6EC><:87567899;<=>===<;;<:9:<<=>?>@?>??>>=<;;:>cpplkkmnk[NA99;8889999999;<<;<;9:;;;;<;<<<;;:98988889:::;;;;;:7;=;8898877888777778888898888:<CJMJ?699;;<=@DGIJE=:;?DIG@98;;<;:8899::::;;::9988886532210011346757797667776778;<:<BGGHHFEEEGHIIIJJHFFFCBCCEEDDDDCBCCCDCBABBB?;88:73326879:::::::98777665664443348>=::>@@BBA@BC?8544557:<9568:;=?=87875;@CT_XMNLIFDB?<;=<3-./.3:<<<;::;<867677788655558:976777630.-/0/-*&/==:3/30289::74553.-/137=CEHHGEBFI=-(+-.2321100,))('''&(*-0.----,,,,0BM@3-),11*%4[a5),,,../0123.8A<6--.4/'(-0.-07=;9;><64AND1(&)3:82-3>A<0145440,)),+,.,,,**+/-*++)(*+++,+**)(&&&%1OYNF@CBJcn0\u001e*(%;J?/)((*@cU8766740-+))*&&&(C[I:#8gRLh[;11027<4)/>5*,-//.-/013552,,*++--*')0>=4/24337<@BMNLDA;5200.**/-'&3?4%*/17LQBCGLMC4058;>988520-)'*0.*(()('%&'*231?C=6331/,)()(+,2656;1*4AEHFCABHFHTSFHTY]TABFFG@@AA@ELE:875793,-/..0700C9*&+>JLC4;H;3365541,658JZV3\"(2>9)$<O8)0.,13fhkmnqsuxxxyxvtoifefgghjklkllmnnoqswxwxzyzywwxzyyywvtrponljiiggggffeeedfhjllllmmlmnnquy}}womnppmjfcfmu{}~{wrooqtwwxwusrqonnnmqphkuyvwz|}}||||vlfdeffghjkkkntvvx{zonu{lYkzl`ZY^`^][YZZYZZYYXXZ]][[[Z\\__`a`^YORfdUarqnpm\\[^ZYZ[]\\[ZY[\\]^^___^]\\\\Z[bimoq}~nhzxy{yy~~vqnjhikkkllkkjkmnqmjihlkfeeeiornllllidaciiijmwk|䩇~qTWSahet~xwƅW`c_acffdccbbbb`ac`]\\]dc]^`^_`\\_ff_Z\\`dgfegnz}z||~|yrw}ǲvzbtp^Y\\ZYnr[lveafniade_]]^_^]__]ZXURYhJYZXWWTTXXQOPRUWVVTPOQPPSTTSRQNNa~mZQRSTTURORPIDEHJKLLKB<BEFGIS[SHGHIJJHGGGFFEFHHIHHGGIJLJIKLMPPOOQQRPNLKKKJKKJHFEEEEHKNLIJLLKKKJJIHGGGFGGGHIHHKNMMNOMIGGGHGFGILNPQQSSRQQQPPNOPMLLKKKKLLLLKJIIIJKLKId~sdYUVVVWXXWVQGEFGGGFEEFEECBBBBCCCAAAABEIKECFGGGHGEEEDCBBBBAACENPOX[XVTSLECEGHM_gZIGOSSPLOX\\cheTDDFGFIHDILLTVUUSLDEFFHGHGD˶o=L_eXTVTPLGK]UDGHIFFCIw]TSTTWXLFHIJLLLKJJKE:JniOQTF>RbRDCFGHHHIMQQNMJHVksouhcleB?A?@ACCBB@>>??=>>===<;;:9:::::;;<=>>@@@@@@?A@=;999;9=>BEPOB><DNPQNMLKMMHHPTSSSE8653?KA64B^|udffdgrgG;777867666667789<;;<;38D?<88:777899;<=>=<<<;:::9:;<>?>>?>>??=<<;;<;9RpsnllsubD<;9889988888789:;;;;;;;;:;;<;;<<;::988888889::;;;;:87:;<;:99977777777778888889:989<AGI@9988:<<<>BFJKC=<<>BHGA;9:<<;:87779:::9998998887543222213455557899979:997778;<:=EGEIHGEEFHHHHKJHGFFDA@BBCDDDDCCCCB@?=<>>@BA@B@?=86778889:9::;;98777656643444436;>::=@ABBCBAB?8666569;<:6689;>>=87764799DPVVPKIFB@=;;==6/...3:>;<<;::657577778876556755410///-,,,/0/-))5B>:5::6206>>:653/12.-/049?HNJCACGC7+*.478410/-,))**)'&())+,---,,,*$.?8++-+14..-1Pf@'+*++,-//-02CJ8-,+*+**0//1005=DCA@:/*5@91)(*03-)+3AD:,/23360*)/21.+&&*)')--))*+.--.-..+++(&%-:AWaVLCGSKO^'#+,*3;2(-*'&>`<368::30341.1:D72@:7OB'WbGpj1,,.0990--0/)*+-/-03333564,*(()++)('(29602556=CBBNWVRPE71//0//1.(+64(4KOMZeT?<79>>>==97987621/+('+031//01.*'%(,-2787640.+*(()))(/:;;=1&.EVN85<@HPSMC89;CUXJLNOQO@:@BDNK>88:<>:74.-241*(1/*'-@LI<32115:;==:2$+KenmN'(454.*%'341200;Afhlnpqsvxxyyxvurnlkjjjkklmmmmnoopqtuuvwwwxxxwxxyyxvvtrqonljhhfeeedddcbbceghjjjjkklmnosx}~zsqsuwyyxvx}~}ytqoquxyzyvtsqomkjkpjbbnoemstywtrrqmidcddefgijmkmruxxx}pnw}~kc|}xnZX]^`^[ZYXXXXZ[YYXX[[ZZ[[\\^_abc\\OTgdVcsgeyh\\a_ZXZ\\\\\\\\\\\\[\\]_`___^aa]\\]_ekjp{{zxuvyzpflxu|vvyxwyzsokjighkmnliijkkjhfgikmheffhmmkjijkhedeghgfx}~{qbksbidop_[`cdedcbaabcbbbba^Y\\b`Z_`__]ZY__\\[^_dhhfem}}|~wnѻ~pgvk]_deqpctukklb^cki`_^\\[Z[[[[[YYK`JWYXZZXWUTVTTSQUXWWZVQRPPRTUTQNPXgxzma\\__\\]`^UOMQWWMHLOOMMJECIKE@GYWKGHHIIIGGGGGGFEGIIIIIHFIKMLGIJKLPOLOPPNLKKKJKKLIILMOONNNMMMMIGEFGFFFFFGFFHKNMNOQQOMMMKIGGGHIIJLMMMLLLLMNOQQONONMLLLLLLLNMMMJIHIJLMNHU~}rcXUVUVWWVVTMEEHIIHGGFDDDCCBBBCCBAAABCDFFDEEEEEFFEEEEDBBBBBACJMOPPSaXNOLFDFGHGVe[IKW]`\\UOY\\_aibMEFHHHFEEFGRVVSDONHFFFEEDB͑HCHTc]UVVOJGN]REJIGGGG@XuOJPPPOQRMJHIIJLLKIGGHFAUocSSJ>AXdRDEGHHGJLLMLLJHb~sgmzR>A??>@BA@@?>>?>>>>===<;;:;:::;;;<<<<==>>??>>AAA<:::;<8F:6@KMLJKLMKJJIGHHHNQPOOL>946=H?7666MdkigfhjRE76797576666679899;977508??877867::;;;<<<<<;:88999<>???>>>>>><<=<;;;5@nuqkkvtP7899879876666679::;;<==<;;;<<<<<<<::9:;;:9999:::;::99899;;;:99877777887788888:::999;?A;57::::<<>>>CMKB==>>BHHC=;;<==<:988888989899888864443222345555579::9::::97766;=;AB?CIHFDDGIHGHGFHGFDA@AAACCCCCCDEDB?<;<<>@AABDAAB=9;98:88779;<;987775554443344328=<;=AACDECBA>966656:<<:6689;<=;8766788655=RUOKHD@=;:;>>5.,.3:>=><::85565666788777662.,+)(*+**)),/0/,*19=G?9;65303:<861--10-/3445:@BDGGDBB=4,-4:;7,(-11.,,,)'()))*++**+,.,,53((/0-20,04/BcL**+)()-/-)*6JH1,0*))(-<7,///3<GGA8-'(-0/-)()+-+()-7@7(-3457752230,*+)(-/,-0/*+57467//2--+()6@EAS`^ZPJK73_G(+./.,))((-&,@J:<>E@92/1:B;9IPA21.&7T3<i<C[+%')/::-)-.)()-/0.1774332/,)'((()))((+9;8779>CEC@JXWWZM8//.24430/222DaqnhfU;00/0472,.121-.2111.-+%$/41249=7.+))08888885311/.-*''-44697/,A[R87ACHNNC6373.?ROIA70:;7=BINE87:;<>@?8..22,)&.,((+3?A3+047:<>@>4(+Myrg?(890*),-/124754=Egimoprsuvxywwwvsqpnllmmllmnoooqqqqsuuuuvvvwwwxxxywwvtqpomljhffffdbbcb``acehihggikklmnqw|~}yvx{{|~zvrqruxyz{xtrpnlihikie^]^^egfhfdbccbbaacceefffgghlpw|{~vmy~s`X\\a_^\\ZYYXWY\\_^XVYZYZ\\[\\]]^`cd[NXke\\dch{vb]c`[\\\\\\\\]]][[[\\]Z^dcfg_]]]_cilnpqtqnlnml^uzw|ssxzyzy}tkiigfjnoqpllkjjjkkkjirxohijkigfhikjffgghfi}zcls|mjw^hdynjaf_dfcbaaccccb``^\\]_^]`baa`_]]][[]`fkjgdqxrƠozaju}x~pY^hou~hcvxwxp]^fpj``_[YZ[[ZYYWWPYݢRU]Y[\\\\ZYXUUWWURSXXW\\\\USRQSUVUPLTdfaeebaed\\TUWVWZ[SLMRWYTIFGFEEFFDEFD@JZQFFGHHHIHGFFGHIIHIIIKLLIIJKIHLNLJKKKMNNMLLKLLLLLLNRSTSRPNOOOOKHHGFFFFGGHIKMNOOOPONNMLKKJIIHHIIJKKKKLLKLMNOOOONNMNNNMMLMMNONMMJGGJLMOIHh~rcYVWUUVUTUQIEFHIJIIIGEFECCCBBDDBAAAABDDDEEEDDEFEEEEEDBBA@ADKRRNOQP^ZNJJFEGGHEIZ[OS]`bdb[ZZY\\ehXLHKLLP_]LGRW\\j\\TYWNHGFJI;٩YFLEP\\ZWUSIEER^KCHFEFILNOPNLMOMOW`d[RKGJJJJHGEEFHFCSf^TKC>HZTFFGGHJMOMKKLLGZqr|ogq~{CDCDA?@@@?>=>>==>=>===<;;:;:::;;:<=;;<<==>>=<>@@<;::9;6G7766?FKJIJIJIGEEGKPQQKF?<:2@G@34650B[wrlihgZB;88997665555679899954569FF=>769<759::;<=<<<;97788;>@@??>>>>==<;=<;<=>Baspjkve=7;9777766666668::;;;<>><;;;<<<<<<<<:::=<;;:999:::::99899:;::99887789997787779:::999::6228::;;;;==<@JKB=>>>BGIFA;:<===>>=:776788998788787765324445666679::9899:86666;>>B;7CIGECDHIIHC>DJIEBAAAABCDDBBCDDCC?<<<<>@BCCBBCE>7:<;:886779;;876754553444355216<<;<?BDGHGA<96555569;;:779::;=;656789:861+9IMJHHDA?::=>952/4:>>><::8656666789856653-)('')*****)+.0/,-;95<9554565566541042+067765545;FKE@@?7..-/57.&+331.,+)''++*+,,*)*/452,*-03/,,+.44,4WZ4)+*)*+,+))3A=2580*+)-;:*-./2;IJ>3*'')*++*)),,+++,395,0368<;7310,'(..+/3-,4:1(2;:=A1)+,-,+-FL:-BXaZK8*+4:4*+//10))+%+4<BEEGKG<51-0CRG==40+(,*&>A0YP*7,%%,594,''**((4A>5277431-++++)()**)+1696642:EEEE?M]ZW[U;.-./1013569OirwsgWEA=>A:80'%&*95,*))*,-.185-.122;CB?5.28841379??<:71+()&'()/AF;8KbX>=EFJJJIA6515JRA2-'',.15>IG82556:>AB8.031+')/.*+*(,0,),6<?>?A9')Txvi=:D3)')/8?>:9:859>fhmnnqtttvwwvvusqpnmmmmmmmnopqqqpqsttssuuuuuvwxwwwwvspomlkjhfffedcbbba`accfffghiklmmmqvz~|xwutuw|~}||~~~zvsrsuxyz{zxtpmkheeegfb]]`aa`^]]]]]___`bcdeeefhhhgfioru{qhrxywlb^\\^__^\\\\ZXWYaa_aY[\\Z^\\\\\\\\]^_ad_VbriZ\\l{|l^]_^\\[[\\^]_]]ed][]bdeea^`_^^diiijmpmrwvrivxxrsrwz}{v|nefgfdioprsrqnlkmnnolis{qhhiigffgikiefiiien~yn؄}s|qt}z|Zge~p^_acdcbccbcccc`_a`^^_`_`_``acba^^^adfhjs{u~Ըqboq|wxyWNclu}wnabv~|vmkhgojcd`[[ZYZZYYWSVJsmN^YZ\\]^][[ZUSSSSSY[W[^YTRQRTVTONT`b]ZYZ\\`df]V\\[SONMLMPQQPJGHEEFEDEDCDDJQKGGGHHHIHHGHIJMOMKJINQSSQNJIJKKJJIHJLLLMLLKKLLMMNPRPNMONOOOOOLHHGFHGGGILRRNNOOMLLKLLKJKJJIGGGHHHJKKKLLLLLLMMMLLMOQPNLLLMNNNMONKIJKLNKHUmxvqbXUVUTVUUUOGEHIIJKKJIHGFDDDCB@@AA@ABCDEDEFEDDCDEEEEDCBAA@@P\\YUMOSQUVOKHFEFFGGELUVW]`accdZWXYagVMLNTXguoMGQW[ox[U\\VNIGLNAYw=IHFLRWXQFBKGV^ECGFGJNKHHMQPSY]_fnoi`WLHJIGFGFFDDGB>Pb\\MDCCGGEFEEGKNONKILLGUjqxggm]:CABA???>?=<====<;==<<::;;9;;:;;:;=;::;;<=>=<=>=<;:998>B5636?HLLKIJJIIHGKNPPOE=:8:@KA554533D_aspljj`E<5899876555557799:;62244>|bBF;HEKLF879;<=;:;:8878:=@A@??>=====;<=;=DILMToqhnnL6:;9767666667679:;;;:;>>=<;<<<<<<<<<<<<=<<<;::::::::::99::9:9999999:;;:876778:;=<:8764224799::::<>==EID>>>@CGIFA;:<<=>?BB<7767789877:9:;;843336657888999987777754665<AA@46EIEDDFIKKE7:IKID@AAAACDDCCCBBBBB?<<<<<>@DGLOLE?9;??96667768:7555555554444554349;;;?BEIKG=66555557:::989;:::::==98::9886/*1?IKKG@;:;:9:71039<<<;:98666898778754430,*()+,+++++*+.//,0:86002267997654328<3-6:751/0/04>DC?@?7/.,),000/...-+,*''-/,..-,+)/8:4/7951+'*0671-/M`>*,))+*)()*.246<;71+)-23,,-/05><788.)(',,*)),-)).04663413=>930//+'*.0/031/7=4&0NF:?4'&)+-.+61+(5IZ=,)*00*+*)+14754424AAFFB?;4//0,1KL>B>+&*)+2.-90Gj>&+)'/980++))+*(9US93797770+*-.,)*,,+-35/,,+-9DEGECWmi_^[@--+.+*-243;S_`gbTJLTOH?33004+)A@:>620++,-7J@00129@FH71;=7.)-68667;82-*++)&%+GTFAO_T>>CACFFD@745EO?*&'$*:A618>;31238<=BC91243,(+--46-&&()+/7?B>?@0!<wx{hHIC-''+3<CD?;9757:deiknprrqrtuutsrqponnnnnnnopqqrqqrrrrrrstuuuvwvvwwxwrnlkjihhfffeccbbbaabcdedeggijklmnqvyz}|xsjgmttstxz}~~~|wursuvwxxzzvqmjgdbbbcdecaaaaa``_]]^_```bcdddddfgijhfdefhqy{|yzy|~yqejjgini`^`b`^]\\ZYZ^Zen^c_U[\\\\[[[\\]]aea^ksdXdpswn]WZ\\[Z[]_b_`vxi[fncccabaaaaehjjkmqy|{pqzstuuyxwu~iefffehlptuuuroljgikjkpg`fhhhggghiib\\_gnjgtxr~o]ggs]`^`accdedcbcccca`bca``_]^^^___`ba```civ|zz̛pmyiu~m}lzwkrc_x|uxpfpnjh^ZZYWWWXXX\\ZNڏS[ZX\\]]_]ZXXUSSRTTX_[Z_[VRPRSTSOPVZ\\_^]_ZVVYWXhpeTJLMKLMNMLR[]UMKJLPPLGFHHHHHHIIJHHGGIKNQPMJJMQVYXURQOLJJJJJJKLLLLLLKLLMLORRNIILNOOONNJHGFHIHGGKU[UMNNMKKKKKKJKKKJIHHGHHGHIJIJLLLLKKJHIIIKMMLLKKKLLLLMPQOLLLMLKMRZg}sbVSVTTVUTSNHGHHIJLLKKKIGFECAA@@BCDDFFFFFGFFEDCCDEEDDDCBCBK[_VQMPSTUMLKHFFEEFFEHRWWY^_^]]WWX\\b`PKPTZ_rsNGPY[ZuhSWWRJHJJI>ߧUHNHHJPXUJFJKD\\_BMSLOW[\\_ZYX\\bimlfc`^aaVJFGHHGFGFDDEACR_TFEEBABDDDEGLNMKIJNEWytciqi?>??????>>======<<;;<:;::;=<==<;::::;9899:;=<<<<;:9:876E=357@KONLKJJIIIILOMONF:867BO?=:97753Ed[dnmmlS969999776777777799:500135HqV9=<ACCZ\\=6<<==<;:98899:=@A???===<;;;=A@GOTWOLepjmY99<:9866778777779<<;;::<=========<<<<<======<;:::::;:::;;:;99899:;;;=<<<97568:;>?>;86533347999:::<><;@HD=>@@BFHEA<::;<<=BC=84467777679:;:71/0224568::::99986555445555=DB<5;DHDFGHLLE91@LHECBBAAABDDCCCCDEDA>=<<<;=?AEMSVUNCAA@:653567776556665555556566425:;<?BEIKF93456756689999;<=<::GURD==>;9983*)2<FMJ@9<;::953337:;;:87776788877875321/-,*+,-,+--,++./..0452-.027:997642./661/5;92,*+--037<@?<70.,*(,461.,+,++)''-1,.110-).6::CL@41+(6A>874-B_I.-**,*((+.0258;<84-*+--,)*..-,)+<H<--00.,)),-,,01-124701=;5320/,+0543445447/5LR=231))'&'029-&23;L'%)),/,,,%*467>D<5DE8?960)((),-5A3/GB-)+),22..*9kX*)+,-133210.-,*5RV92::9:93.--,*')...-+)%$-25<DGIFEYonhggL/////-.12.3J[_]SOQXWND;=GNW[OINE<>;:5,*31(8U?/16;?H@2:???5,,./,04788604@;+\"+MVC?JVN>BF==GF@=?CHQL7)*)&-HO73;:7745>B=>EG@9653,()(3C;.,/-+06>?;7<<-\":er[F?9/('+3:CD=54569:bceimoomklnpqrrqqpppoopoqqqsrqrssrrrrrrtuuuuuuuvwxzxpjihgffffeeedbbbbabcdeeddeehijklmoqrsy~zumedhlihox~}zvttsssrooprrpkfccaabccb``a`a``_]^^_`abbcddfedefeeghkqpov|~wwz~|xsvldifgprlb]^_^]]]\\]]WalgumZ]ZZZY[]^__`bbclmb]_er{n]Y[\\\\\\]^a`c}vh`dcdcccdfhjijkptyvikgywysruutxohlkhghkpvvvxwurokfgjklb^gjhhhgghig^VZenid}|wk}gbghini^`abcdfecbbccccabace_^]\\]]]]_]Yncbn~q~ïxwwmynuy~uskeqrha[XWVUUUVWW^fe_V_WYZ[]^\\YVVUTQQSTV]^Z]\\XSPRSRQPRVYZ^fe\\VRQRSSZnhOJMNMNOONLQ^i\\NLJOYZQJHHHHHGGHHIIHGGHIKLLLMLJLRVXWYXSPNMMLLMMMLLLLLLLLMNRRQOMKMNPONMMJHGGGHHFJTZTLKKLKKKKLLLKKKKJJIIHHIHHIIIJJKKIIHGGGGEEGJKKKJIJJJJKLNNMLLMLLMKKXtucUSUUUURNLLJIIIKKKLLMLKIHGGFGHHJJJIHHHHHGFFEDDDDEEDDCCC>GY`YQLJMSTSNMLHFFFFGGEKVVVZ]\\\\[VUWW\\dZNKRZ^gJIRY__vzYWWTLHFIH=~@VSLKKRWQGQfbT`bRQSPV^fqj`bfihc^[Z]a]UMFEGGGGGEEDEDCR^NADB@BCCDCFMNMKIJNFPtocm|<@????>>?>>=====<<<;;:999:<@@?=<;;:9;;;9:<<:;;;;::988788F:16CMMKNLKJJIHIINPLNI>499BK@:=>:9975A^VYhosmE97:9667777777777877.-/024783059/7>VVC:<<<<;::878::;=>????===<::<BKPTVSSK@ZosdB:;:87766778777779;<;<;<======>=>=;;<<;=<===<<;;;::;;;;:;;;;99889:;<=>==<987689=@??=865433479988::<<<<@DA=>?>AGIFA<;:::;=??=;88776776677642233235669;;;:99987643455556>DA=8;CEEGIJKH>8=FIFBBAAAAACDDDCCCEEDA=<<<<;=??=;?K`eVEAA=>>:7656666666645555565665357:<?BFIID72456766689998;=?=:@Zh[LA:;=;985-+,+1DKGD=;;;:8854689:997876787878887520/-,+,,-,+,--,,-.../232.-/39;976652-.0..13761.--,-.-+3=>:/--+***4741//,)&&&(,0,-364.)+.5BLH=32.2CIC<:8-7WJ3531-*(*,/4>A<7860,**))*)*+*+*('.:<6>D8//+)*/0---+-.03.017:663.+,38868963//3<C804/)(+*#$1A5-+03>A('*')++/)!+58:<E;4<85782-*))*+,46(,=7,,.,,13/,'(Yd;+-.---58520.-.2BI71878:;61//-)((+.--*'%'5ABAFJKFGWfgfisW0/1135201/,8N][XYYVPIJSakmib\\YJ:578<;5036('OI..7:DH68EA=>:1,)'/7;77989?JE8*,GQA@BAA=@DAFLIIJMPNFC@721.(090589;><@GFBDGGC>:970*)3JK61421249:70-264)6dsZI;7;6.,.29GD5-26976bbdgknnkhhjmoppqqpqpopprrsstsrsttsstsrruvvuutsttuwyyrjgefeddddcdcbccbbcdddedeeffhiklklkjmquvusrpjffecdiqx}{yvsommlhdcglljeabbbbbccabba`______`accccccddefhhju|{z}~~|~uoprqqsla[Z\\\\^^^]_[Zbi}fb[YZZ[]a_``afbcjiecdiyzpe\\Z]^^^_`eswqaedeeeehiijjjknqv~wrpklf]tx{wrrrrz~kqqmihipwxwxxyy{vqkknkhiihhhhhig^WWgmicfs̀u~oeijgc}ekpa]_acdedbabccccbaab`^^^__]]^]^_eit~xvyx{|xt{vlqggjsuf\\ZWVUUVWVVWWah̀RYYSWZ[\\[ZXVTTTTSQRUXZZ]]ZWRRRRQPRUY`ff_WUTQPRSN^]PRNPRTTRNLMU_ZQKHKUYSMJHHHHGGGHIJJHGHHIHGIOPMMOQTVXYWTRPPNNPQONMLLLLLLNPTRRPONMNRQOMLJGHGGHGGQWSKJJIIIJKKMMMLLLLKJJHIHJJIIIIJJJIHHGHHGEDDFJKLJJIIIIHJIHJLMMMMLMMKPkvdVTVWWVNIJJJKJKKKKLMMMMNORTTOMLLMLLJIIIIHGEEEDDEEECCBB?@O[[UNIDGRQOPOMHFFFFGIGMTOSZ]]\\YSTWW][QELTZbrĐFJTY`fwz\\WXVSHBDC@ܸX<PRQLNUTPHU{rbvdGJNN{o`\\QUZ\\[]^^]`cebVGBDHHIGFFEFCE[^EBDBBDEFBIQMKKIKNGEYz}ncuJ@BAA@?>>>>>>==<=<<<;;::99<@EDA?>==;;<==<<==<::::::9876:;F84<OQGHKLKIHHHIKMMNJ@829DN@9<<<;:;97;UWS^psk<67::4357977777789872.0011-+0356217IXQ:<=<<;::878;<<=>????>??><?DMSUUTPH><RozR5:;876677778777889;<<<<=>==>==<<<;;;<<;;<<<<=<<;;;;;;;;:::::89989:;=???><98889;>@??=9876434688778;;;===>?>===@FJF><;;:;;;<>>>>><:9;:;=:538;=@<77<:9<<:::99987435554556?D><9;AEGIKKF><?DHHEAA@AAAABDDCBBDEDCB?=<<<<>>>;77;J]eXGD>AKNC8666766665555555545556459<>CFGD=545556666799789;>?;B^eSKC<;<98960,,)*4=CIC;;;:9983169::;:777788798789830/-,+,-----..--..../012/,-3;<:6675421,+266544440---,+*4>?/())*+(,03464/052+)-0,(2890**'0DC512207FF?434-1JJAG?8/**,-,.=F;/11-***))+..,*****)132:A812-*)14/+()++*++,,8=9<91-.2678::1,,25013:?6-182'(3A71,/1L>*)*')-,3/*/58=<8131+2;80++*)***13+)0,//0.-040,,'?iI++02/-230-,++,/6:1.157<=9310221+'*,,)&%*8BDDGMOGIaplbgoR..22121012-,=NQSOKIGFP\\_fkbZVSN?314@MKD<2*(AK5*0:D:8JG9212/-)'.8<;207>@@LQM;;CB@:7<>=DTWC46<EE;/-0399=4*59769@A>?BCDDEGIIJJC601GbN346544476/*'(4<3Px[LFAADD>4221:G@2,17<6/bbdgkmmjghkmnooppprqqqqssttutssuutuutrsuwwutssrrssrqrrkedcccbccccbcccccbcdceefffgilmlkjklmmmllkjhgedddjry~~}zvrmihhgb^_bddcaabbbcccdcdcba``_^^`bcccccddddeir{yz~xsutsqpmd[Z[\\]^]^`_`dsvjb`]YZ[^hebbaif]aiifdkpswzk[[___^_iu]lweeeggefiiiklmmopqrwuuyzvjZk}u|ywplo|kssqmjkpvxvwyz{z|ngjkhghhhhhijkf]W\\mmmidgrtuiposzrovh[^bcceccaacccbaaa`_^^`b___^^]^VZ\\crqqpsss}z}x~}|ͽfxpjopvwg[ZYXWWYYXWUUVQ֡cZ\\e_TZ\\[[[YVUTUVURRSSUY\\`a[USRQQNQT]ig]XZVRPRSTY]WWWSTUVVRMKMSYZRJGIQWSOJIHHGGFGHIJJJHGIIIIILOPONORUVWWTSRQQPPQQNLLLLLLMOQPPRPONNOROMLKJHHHGGGLTUPLJJIJKKLLLLLLLLKJKIIJIIJIIIJJKJIJJJKJHGFFHHIIKJIIIIHHGFHLMLLMLMNLMcyfWTVVXTLJJJKKKKKKKLLMORVZ[XSNKKIHIIIIHIIHFEEEEEEEDCCBA@U^TRQJFBCMQNNPNIFFFFGGRPLMSX^`]XSTVW[VLEKSZbqqDKTY`hvQWWUSGBCCC=FHLRNPVSRLKaohp]JOnKPOMOUZ`efeefjli^MDEHIIGGGGEAK`NBDEEEFEDOOJJJKKKGDGU^mcz?@CBA?>>>>>>>=<<<;;;;9;:;;>DFEA@?==>======<=<;::99988969=B9;DOMIJIJJGIHIJKLLJ=;45BO?8:;;;;:;:95KWHQjvi8.7;:2/479877879999:80+,.11005662/36JR=<<<;::9877:<<<<=>??@@A@BGNVSMMJE=:@MmzJ3;:776667778777888:<<==>>====<<<<;;;<<;;<<<<=<<;;;;;;;;::99999989:;=??>><:9999;>???<:887645677658<;;::;=>>>???CGC<;<;:;;:;=??===>@@CHD>36@AB@=:>D@<?=89988887445566659B=:;::>EHJLG<:@ACHGCA@@AAAABDDCBACECCC@=>>=>>=>>>=94@YgSE=:FTOA976886555566554445477457:=BDC=65654555666777658=>:BTTNLGBA=87971-+,--/5>C;;;;;;:318=<<<=766666678767730/-,,,--..-//...////0231-/5<;84357796./798999:94/.--+*1>C@2+*+-.,-57972:F@/(-0,,14640-)0:1%(.016<;2.-/,/CLFE:1.)(--)(4=3(*///-011131/.,+*,21);kj;01-*)13.+)*)(('()/=:8?7+.87507>8.),27229>;44:@:0+2CIA9./@9*+,.37611489;=8222,,3:6.+++*+*+24-)'/1120-040*2:.[d0+21-))*)((()))+/-+,049=;6326?@5,+,-+('.;CEGIMMEHjyihkJ-122/..0223;FIKC87@BALTTVVVWUTTK2*8P^SGC5)*1FE.*065CNA0,+,--,+,.>LD747C1UrhN><>?:;=>>G^^C/-1;@==:/+1<E7+8C<9=?@BEKOQQPTX]b_E33:[gD2675523;8-(&(5>:K\\E,,6BJOK>52118?<0-16:6.bbdgjlligikkmnoopqrssrqrtttutstuuuuutssuyywsrqqqqnkfjsndaaccbbbcccccccbbbcdeefffgilnnllmonmlkkihgfccddirwy|~~}|zwtqlhffec`^^^_`aabbbbbbbbbb``_^^_`aaaaabcddddjttjgnyz~tfovmlrsi_[Z[]^^``_`dieaafga]`igcqyeW`eeeeffs~i]]__`_hlowmgfimhfgikmpuvqmqtqqswwpf^lsw}}nfjwtkrutsqnpvxwwxz{wkig`eniafihhijknmh]Y]rmsjbݟjfw¶^ext_gzh_ddcbbbbbaa``_`aa_`_]^^_bb^z~rnopnkpotsxx}|{}ɼ}kurz|twte^]YYYZZ[ZXVWTDsTeldU\\\\ZYZYVUVUUUTRRTZY\\e`TPPOOPS]gdZVZ[WUUWWUa`TUWVVWWWRMLNRY]TLIHMUUOJHHHGFFGHIJIKNLGHLLIJNQPOOQTUUUTSSSSQQQPNMNMLLLLPOEJQPOONONMLLKIHHIHGKWXQMMLLMNNMLKKKKJKKJJKJJKKJHHIIJJKKKKKMMNMNNKKJIIJKKIIHHHIHJKLLLLLMNLMayeWTUUVQLKKLLKKKKLMLMMQW[ZVQMKJIHCA@ABDFFEEEEEEEDDDBBB@KdcRLKGCAAFKKMRQKGGGHHUVKLSXY\\c_YTTSVVQLKLQYcs_EKRX_ds\\XWUREDJFEDAIFIMLPTRQRNJ}xiQQKONMR^ehihfecafmcMBEIIGGGGFEDLWBDDFGECMOJJIJKJIGGIEFmkcc?@A?==<==>==>><<===<;;;;=<?CDCA@?=>>=====<><;;:::8789:87=>9=GMLLJIHGEHHIKLLK=776?KA389::999:::4GTB@W~k647<80+.58876899988975-)+,-.147632329KH<;;;:99878:<<<<=>?@ABCDHMRSOKGCBBAAFctK:;8576677678777778:<=>=>>====<<<<;;;<<;;<<<<<;;;;;;::;9:89999999:;;<<==;:99999;>?@@=:98764666667:=<=<<==>==?>>AFA:;<;:;;:;=>>=;<?D@GKGA45;<:99@HHA?D<5888:98765456667?A999<9>GIHB97>@@CGDAA@?AAAACCCCBACDCDCA??>>>>>>??>;;5>Z`J<68GQK<668875665566555555775557;AD?8456556554556645;:8::>GKNOJBA><9773-++,-/03;=<;;?@945;==<=?:7656776776430//-,,--./.-//..//0002365337;:731234651376579:;940/..,.4>CIA7301875666549@;/*,-*-012420/2/'%(-03441)((*)/?PE2,(*(''''',/0,-3767?FE7-/.---.0450?ij?./-,,01-.1.)(((()4=23=2',=@7.2=620/394<<:3.2462-+226@HI>5+)./8JQA,1<B?><2065//263/,**)*,2;;1,,23353/040*6K/CmA,6573,(((''))'%%&'()+1;<7327CJA62....+5AEJLHJG>Gk}sunG/4310//224<BIFA7*7A<:AOSLDBCCDB?79J^eN@IB-%)5;.,28@JC6.,-,+-3886?MNE;/60JVQKC76?FA@GHPaY@523<DJNG7))08:7<ACHQUWXY^[QNKIFNTO=,7DZZ:3654303E>.,-,051,((**0>OSI:0./15410233361bchllllighijlnoprsssrqqrtttutuuvvuuttsrtvvurqpoppmiffiicabbcb`abccccccbbbcdddefefghjjjklnnnmkkihgecbcegjov|~~~|{zywtpkfeghf`\\]^_a``b````````__^_aa_`a_`aaabeccjlebmz}{|~yz~iafhjnsumea`[Z[^^^^^aaaajri]bxpizzcZ^ef`]^s~p`Z^ddew~rwpigitwsponosxytkkqqnprlb_bm}u{}mfkxvklswvutqquyxvxzxti[VYgxvpnihijjlmpo_X`smq~jbsopxsenq]m|ullhdbabbbaa````a__^]_bedbcw{|zkfillkkls|twx~volhz~|wrdbbYY[[[]\\YXYMWRSieV[XVXZXUVVVYYTSVZUT^aSMQPOQ]h`VVWWWXWWYWX_YTXXVVVVUQMMOS]^RMNIJSWQJHHHGEFGGIKHJRSLIJJGGLQRPOORTTTTTUUUTRPONMNNLLKJRPBCNPPPONKJKKJIIIJIGQ[UNLMMMNOONLKJJIIKJIJKJKMNJGHIIJLLKKKLMNOPRSRPNLKJKMJIHHIJJKKKKKLLMNLL`wcWTTUUQMLMMLKLLLLKLORUYVQNKJJJIHE?;;=ACBCDFEEDDDDDCBBBTebULHE@>>=@EKRSNGFGGGRLKSXZXZ_]ZUUPVMNNOPPXl`EKQX_bp}[WUSPNLJJqmEGJFIGHQTSRSUL\\os~YLONMPZbdb``b_YW\\bZKHIIIHFFFD@EOGDEHKEEQOIJIJJHHHHKI@ejd|I:B><<<;<=>==@?>>?@><==;==<?BCBAA>?@>>>===>><;:9::878897:?;9?GNLKJIIIGGIIIHJE9:7?E=6789::889:;:5FP?9F`V456:6.))-477679989:857710/01258754345DF=;::998879:==<<<>@BBDFIKLOMKGEDFIF@C\\iMB;5376688678877778:=??=>>====<<=><=;;;;;;:;<<;;;;;;;;;:::99::::;<<<;:;;9989999;=>@@>;:886566778;==?BEECA@=;;;<?A;68;<;::;<<==<;;<<=CGKE75<9<>AGI@:CB98:99::88853444558:647;8AIHA88?A==CEA???>@AAABCCBABDDECB@=<<====>>@>>@96Dc\\B75<KOD777776665466655456655557:DE<555566676678985<KJ>999;;CPNEBA@?A=4/-,,-01/3<?>::>;79;<<<<A?;8767778763/......///00///./0121134206;;:861-..--0210./148964210/.18??BEDA;16F>32..0010.,,,.0331/./0-,--,059651)(*/7.6UM(%*('(,**()/:=:;;=CMSJ5&*+,,-266647B?3//.///.,/882,'''*6=102-)+592/1446411415676411.)&*4/(07BHKB::98LfP*3?C>71,/68412340-**)*3:<=7/07759:2151*6G0.bT2<FKG7,*)'')*)'%&'&&&*09942:DHD<710322ALMQPGB@;Eg}yv{oF3731012202?IC<;6/8?45>EB:4/..-*0AOZb\\E@OM3%'(*(,6AF?521.*)*.9?><<<?D@/(12-;D<;CJF=DPOV`J8726?@CF6+'%%$&4GV[ZUOJGFFD?AB5+238KG<?SP747421/7E9-44.121,(-8:36JSE0,/121.,0660/64cdjppmkifgijlmnqstttsrrsstuuuwwsoklrutsqnlmnnnnnnlihgeddcbaba``abbccccccccddddeeeffffghijklljjihfdcaaccdq~~~}||{|xsqnieeffc_abaa``__``__^^__^^_````aaaabaacbcecbjutlis{|ru{}~}{eT[fgiruqnlf^Z[[]^]_a_`cdca`mmx{yb_lmiffn|ud\\aigdh}~qihhgr|xrklqssmjmrsssnggkow}wrjs`fhmrwyvroqsvxustvsi_ZZdzqfijjjklnn^osmrljmtsv}pbcZ]Xbmj~~woedcbba```````_^bjqqi]{{wmnopqrobdmh_cim{rkmrgpyxs}ynie[\\_^__]ZXXImT`lcUZWVYXUTUWZ\\XTTWWVWXURRQQQ[^UVXZZYYXXYVZ^WUXXVUTRONLMOT[[URQKJPUQKHHHGGGGHJJHINRSOJIHFJPRQPOQTTUUTTUUSPNNLKLLLLKKOOECJOPPNMJJKKJIIIKHMXVNLLMLLLKKLLKJJIIJJJKJJLMMIGHIIJLLLKKLMNNOOQRQPNLKJJKKLLMKKLLLKKLLMNMIVtvcWUTUTPNNNMNMMNNKJOWZXSOLJJIIIIIIC>>?CC>AFGEEEDEECBACIUaaVLGD@>=:<AIQTPIHFDHFQWVVVUWZ[YUURWLNPRX^ct_ELPW_cl\\WVUPKIIICDMNHGHHIPUUTTWQZ]]|sdn]MOMMMQWYXVWYWVSNOUUMKLKHFEEDDDEFFJNLDINIIKKJIHJJGJMCWhngFAB>?AABCDCBABBBBBA><>?===<>BCBAA>?@>>>>==>><;::98766677>@:=CGLKJIIN\\b[X[[WL:47AJ?689889:7889;;7FH::>=945776.*)(.46877899::9:<;97765687679517A<::8897899;==<<<>@BDFJIKJJIFEFHHHFBDMTG?:5256798677878888:=??======<<<=>>=<;;;;;::;;;;;;;;;;;;:::::::;;<<<;:998:;;;;;<=?>>>=<;9776788:<<=@DHHEDB>=:9;==<99;<;;;;;;<==<9::<>@@=57<:@CGHF<;@=;<;;;;<;;:64443331432469FLF=<AB=<<AA????@@@@@ABCBBCCEEA?=:;<<<<=>??>??=96OeS;78@MPA68876666566655556656555;FE<6545557768:<==@KSUL=657/<[[OLGBFLG8/,--.//-06<?D>:;<;;>><=ADB=966888652.//....00000000.012322241-3<<:850...--.0,*,0234334652/.1<GHCCHHFBAI>0/)(*++,.011469740--/3:;4./;C930-*.03--JX4%,*'*00/,)1?FE>7:ESYN0$%)+-/1200../-,-,,++))**2:92*&&+6<21/*)**++,.-1730..--.3:80..,0322,,-0.4IQTR?6SZ7+5>731.07820112.)'('*7=:<913><69?943-+4:+&Rb8;SSD6.+)''),+)*+,+*(&(/663;DGD?854644HRRUM@>A<Fg}xttcD6731012215>A82484973>JC633232/*5M\\`]NABGB4**)'((.:9004310-*,676766<D@401,)--4FF3+6KSILOB6019E:5D.$-,-?OD9FDB>:9ADDCHNG4*+(6hvN4@E?=6/--,/53231;JOLA/.=C7/9D:)-771///7>;5587cccgmmkiffgiklmprsuusrqrrtwwwwric_blqsrokijlmllllkjhgeccbaaaa``abbccccccccdedeeeeefeefgggijkjihgfecaadis~}}||||||xsppnhdbcffedbaba_^_^]]]]^^^^__```aaaabbaabbcceggdcfmuztostsqkeeu|dWZaagptutsmd^YY]_`_^__`bbcikcchgdfkceuvz|rm}wo|we^eiabyminpnr}|uqmhgilnlijloqsx|zwvuu|vx|agkjryyxqmoqstsqpvth`]\\^sjeihijlmmf[rlqqrlomilkeaca`Yfjmkvxoifccbaaa````_^ekuyrn~|yux{}|vkb[\\[[[^fszyolikstjUmصztf}hZ`abdda\\XWPu{T]hm^VZWWVTRTXYZZTQUXXXX_`UPQSRTVWYYZYYYWWV[`ZWWTRQQRTPMLMPRSSSRONNOMJIIIIIIIIKKLKHKTUOLKHKOPPQPRSSTVVUSUSPNLKKKKKLMNKJHILNPPNMKKLKKIIIHHTZPJLLKJJJHIJJJHHIIJJKLLJKLKKJJKKKKKJJJJLNNNNPPOOONNMKKKKKJIJLLLLLLLMNOJNfvcXUVVTONNNNNNMNNMS[_YSMKJJJJHHJJIGFFFFC?AFGDDDDEECBBDJOY]VNHEDC@>>AIQSOKIHGJR[\\XVTTVWXWTTYYOSVW`ns{ͼZENOU]djrlVYVOE?EKNMMLHGHIILTXWXSVd]POb``KOMMMMOOOOQQPPQOLLPOLLKGEEEEDEEFFJLHDKIDHKKJHHIJGHOIApisTGGECDDGIKKHEDBCDED@>>@DA><;>BBB@?>>?>?>>=>>><::::9765579@=:CGFGGHFHUpvzsR=CM=4=98889:8889:;;BB9:<83689973.++025877899:<><<<<<<9789878<722;<;:6A86688:====>>@BDGKIIIGEFEFHHGEECA>87846569987667788889>A?=<;<<<;;:9;=<<:;;;;<;:::;;;;;;;;;:::::::;;;<;:999:;<<<<;;=>=====;9778889:;<?AABBBCBB@><<=<<:;<<;<<;;=>?><:;<;;99<88<;9>?BC?;<<<<;<==>>?<96665320211129FKD?DE?<=>A@???@@@@AAABCBBBCEC@?;58=<;==>?=>??@=49SZA467DTK97:76776566655556566556=EB95445467779<==BKPMJH?65;7E^WJLMHFJNH8-+---...14;NMB;=;;==<<@EEA;66888641///////001100000/0222358843554430/....//+-6:972.06884.,/?QRG@CHD?ADB>:2-+)*-01/.2;><841/2@JB6/2AF6/,,**)+)&9YE(++(),./-(-<DFA87=N_L7G=0+./1-)(**))))((('&'))*490+(%)491..,+++*+--,,/0/-,,,.3/--,4;??3.1/3<=02?FNVNEA;/.:9631253120/.+'&((*3<><507B?:99731))./*#?bE6UO5/-,*''*00,-/2210*''/77;BC>>?><959KTTSH<AE<Bcy{xmR>6210../02352/-/4798;HMC648;<<94BYb]QDB@:64/-,+)'(-.+,01041./4434458;<:612-(.??-#)9FF84@H>.-3814?3266<FF6'/9766>KKIIMRG0&-&.qZ/,=OJ4+,,*',;A3+Cht`@,(261-.0/))351/04>FDA>:7a`\\]ekjhecegimoqstsrolmprsvuqmfba`chkmmmlkkkkjjkkjihfedcaaaa```abbbccccccdefeeeeeddeeefgghkkihggffghimw{|~}|||||||ytqpnjeabffedcbbb_]]]]\\\\]]]^^_```aaaaaaaaaabcffdccegkrx~tnmmg]Wg}bQX^^dnuwywrlc[\\faZ\\^^^``abfdeeb^`fbtzwuuxudkt{|g\\fin|{{}ysngegjighikljlqrqx}}ywrttw~}u|fcjhrwxyuonmnnqrpvvh^___mypehjhjmoqgevdpmlkkmmnnkk}pqple^^nsphgecccbbaaa`_^_fjquqx}zxzze`cbbchoqvutviWXcbarxwpf»|_PvɮnzqY`cdhjf]WUTPRW\\fht{XVYWVROOVZVZ\\XYZYY\\ej\\QQRSUWXXYYXXZXUS\\`XUVQNTX\\[RNNOOPPQRRQRRMJJJKKJJJJJIJPRHFOUQPOMNPPPQPRSSTVVUSTROLKJKKKLLNNKHGGJNPONMMMMLKIIGGPWRKJKJIIIJJJIIHHHHGGILMNJGHMONMMLKKIHHIIKNQQPPPONNNNOQPOLKJIKLLLKLLMMNNLKZxvbWUVVTPNNNNNMNNOU^`[PJJJJJIIIIIJIHIJJFCBBCEDCCDEDBBCFFCQYTQLGKKEBABFNRPLFEFKX^\\ZXUVWVWUSU_ZQY_`jryѬTDNOT\\dkjsUXTOBBHNRQMJHHGGHJNQRVT\\cRMPGV|znNOMNNNNMLOQQRRQSSOPOLJIGEDCDDEFGFGCBIKCEHHHHJIHGGGJKAFxbIFFEEEFIIIGGEDBBBCBCBBDFC@=;=@DAA?>==>?@>=>>><::::9767525=9<FIGDBCCJ[l}jd_K58:9877<88789:<>@:9:967:<80/,+-24444567:<<><<<=>>;9:::9:;:548<;9;VJ6578:<=<<?@CFGHJHHGFCCEEGIIHHFD:43546889997675677779>A??=;;;;:9;<>=;;;::;;=<;;;<;;::::;::::9899::::98:;;<;<<<;;;===<<==;:8899:;:;=@B@?@BAABA@>><<;:;;==<<<==?@@=;;<;:78<86:308:>@?>??>===>>>??=<8887521221138CGB@BA@@??BA??@@@@@AAABBBBACDBB@708><<>=??==???=97?QG344:KN?7:98776666665444666668<@<764344457<>>=>DKJC>>=:;@AEJC;JTLEENXTC.)-.,,-..3?IG=>:99;=<=CFE@86997531/////00011110011111235:;:72/++.111////0007?=972/27;93.-0>KD719B82328ADFA946553-*/9>>:72/4>@==<<@:-****)),,%-NN.)*(''((('(6AAA=938OK1F>3*-02-+,--,)()))*))+,,,052/-(*24--,/4430/010,)*+-+*-24.397EP78D?EPNJRS>./2>NXVN>17@<4230/8800/-,)'**,7@=3/6=830,&()&&((+&.UU4?@.,,+*('+362/02246/(&*5;<@?8>KG>86AOTQNE@CB9:PbkunH1/,,++./00//.146679>EE?:538<?>;;K_^NEED;774-***)(+33.--,2?JJHD@8555327>92458>?4.24249;@JI:2445897:?;779<A=77888?DDLQKLC+$)#*i}E))5G=.,+**),;JA2?q`.&*(')*)('''*-/149AHLJB73_^\\[]cfdbacfimppqqmihhjmnmmjebabcceghiklkkjiiiijkiihfedbaba````abbbccddddefeefeeedddeefffgikjjihfhlopqsvvy|{}||||||xsplhfecbcccccbaa_^]^^]\\\\]^_^^_```aaaaaa```aaaabdddgorwtnoojfny}w\\T]_]bkpvwwwtkdorc\\^^_deeemokd`fvzoqdjnumbcip}s{~jhiffhhhihhkllpqqv{yxwtrvnq}|y{fcgouz{wrmilnnnnqngcbagpogeijijmljpyfpmmmpqqqxvn{{|{wsbuىcwvbaebcedbaaaaaabfjnpoq~yzz~}h`eefmymbb^ef[\\b`hmtpt}m^Taηbov|yc`cejlg^VUVWYY[acgv{VZ_XTMIU^[^d`]_\\X\\be_URSVYZZXXYXXZXPMY^VRSTV[`^VONOQSSSRRQPQRPLJJJKJJJJJIHMTOFJQQPPOOPQQRRRRPRVVVSQPNLKKJJJLNOMJHFFILOOMKLKLLJIHGMVRKHJIIHGHJJJIIIIHGCHLNOOKGHOPPONMLKJJIIIJMORQQQPPONOPSSSSQOMMMNNLLMMMMNOLRgzt`VVVVTQONNNNONOS[ZVOJIJIIIIHIIJKJGFJHDCBBDDEEEDDDCCDIFBNWSROILOME@BEJPPLEDCJW^\\YXVVWVUUUY`[R]dfjpwǚNENPU]eijvVVTOKIKMQQMJHHGGIILMMSZeaPORNBCb~{|RPNNOPPOQRTVXZYYY[[]SHEEDCCFHIGFEF?AMG?DFCDHHHIFHEBLTFUVINGDDEGHGEEDCDCCBBDFFCCBBB@?>@DEA?>===>>><=>=<:9:99747<CIKEACIQSMFCJ\\hmzz{|tituN67:876<<:9889;>?;998557:2,)(*/45422689<=<>><<<=<<;;:::;;;957;;5K\\Z:679:;;;=BGFEEEFFFGDCBCEGIIIIHC;223578988976;=;:9868=>>@=98:<;?GGEA=;<:;===<;;;<;:;;;<<<;988888999:;;<<=<<<=<<;;;;;;;===;:::9;;<<>@B@@AA@@@@?>><;;<<<>>=<<<>?ADA<==<;8797:?>@BEFFFFDB@???>;;>>?>;;:753344336=CB?@@@??>?BB@@@@@@ABBBBCBABBBBB<0/:><=>>>>==>@@=<<:CI7157?JF88:8777666654335668878:;:875434448>A@=>ACA>===?BAA@?<<TaQDCL\\h\\@1.,--.-./3:==A999;<;;AFGD;58:6310//.///001111000112234674200.+),/011111126;931//25:<:2.0378/((.5/-1..7;>CCAA@BC;327==9/)*/-/COD93,*)**+),..(&?T;%')'&&''&&2@=541,,49/.,+(,12-.792-+))*++*+-////0232-+--/DH=?A941.-++))+.-+++1BOG5>H''EQSfiPDTZE31+/;DU^XME@611018822332/+,,*.;>61485131*&&%(('*)'EZ9'*('(*++)*2752111231($)3>?@?>FNO:05BKIDA?=95215:DX`B+***,-02200.19;9999@D>89:9<>@=9<JUPBBIC964/+*)()')5;648?M^ca\\SH946569981++3<>;:;;5/1:GQJ85>ACGCDBDID:/,5=;8679;<=FUT@<8.+-(/Y\\2$(--'*-(&))(.CN>7nM!(.($%'()())'(.589@INMA6/^]\\[[^aa``adgijiihdbbefggfdb``bbbcegghijjjihhhiiiiihgfeccbbbba``ababcddeeeggfffeeeeeeeefghhijhgghkkjjijnv}vsx~}}||yqlgdcbbaaaaabbaaa_^^^]\\]^____`a````aaa``````__accdefhr|~vtw|{zva^da[Zahnuz{zvu}cVYajmpljqpsquj_dfbaeknxoklkighgghfgjmmosx{{{xusvvpsxxhflt{{vrmhlomjiifhhcamzwmghjijkkgqrhknmnrttv}vvs˘rcccedbaaaabeefijlkgoz}|}{gfimqzq\\[`fwSS_abixxs``]_fxputwxuw~ra`elnf^XW[^\\ZZZ\\]bw]f`XOJR\\^^`^\\^[X\\^`aZSV]][[YYYXXWUMLY^WSQW`^\\WRPORSSTTSRRQPQPNMMLLKKJJIIIHPUPLMOQQPQQRRRRQPNPUWVROMMNNLKKJKMNMKIIKMNONMKJIJJJIHJMOLJIIJIIHIJJJIKLKLLLQUVQJHKOPPPOOONMMLLJIJIKNOQRSSRPQQPOOPPOMMOSTNMMMLKMPONVim`VVVUTQPPPPQPNR[YRMKKKJJIJIIIIKKJFFJIAABBEFEEDCBCDEFGINTVUQNLKLRMDCFHLMKGCX[TVXWWVVVUUUVZaZVZ^]]eqLGLPW_efloWWTRPOONMMLIHHHGGHJJHJ[j]RSOKJGADPYWOPMOQPQPQTZ__\\Z\\_adbSGEFGHKNMIEDCBKLAABBEHIHFDFHFLWRBHRMOIEFEGHGEGFCDCCBDDFFEA@BCCA?@CC>>===<;:;;;<<:99:99567TqztiWGGQ^^QHFP_fnw|{uy|z|{uP774348<<86789;;98774354-.-/2344326;<====>><;;<<;;;;<:;;;:56:=7NTG;8999;;>BFJE=<>DFEEDCCCEGIIIIHC:/1356898787=GLIEC@<=@A?A>;;?CDHKGBBB>89=>=><;;<<::;;;<<<=:8888899::<>>>==<=?=<;;:;::;=>>=<;<<:;>??ABAAB@@@@@@@?=<=>>>=>><<=>>BFB=<=>=96:;?DFKMMLNNKEB@???>;;>?????=85455535::<??@>><;;?CBAA@@@@BBBBCCBBCACA:2.5?><?@@>>=<>@A>9<<:B>4589@G=588777665664445677777898898754458=A@?>=====?ACEDDD@>G[f\\GBN\\`TGA5.+.0/1224:AE9;;;;66>DFC;578630...///001233110122233341.--.--.0012553433670,-)*045861-571,(()+-..0126:<:<<<CRZK?96:<3)&()(:PH5-++++**))+/.'#4QJ-*+)*-**)*1>6,++*()*,*-,,/33,-8=6-+((+,,+*),01.,,/231,0D[[F>>942+%(&&*+..++6HND5)+0)$-EZopS8:N]H*&'&-9ALZbZE/),1358;::93-..,+3<<68B?:BH?2)%,20,*&5RF+&(''*./.+.5643422391+.4:=>FEAEI5(1<=85200.+)*(&(6E>60-/02320-.0358:;;;?CFEEEC@:8766<ACEGD>962033+),)%'5<=FOW__[XRE6275:CB5+'&',16;@B>86:AA4+8GHMLKVUPWV@/,-2789::;<BR^I26=;;=35H@-'&)').+'('&%&7RI8dw=&0.(''**++**((-232>JLH@7/\\\\Z[\\\\^___acccbccbbaaa``_____`abcdfggghijihhhhiiiiiigfgeddddcaa``aabbbcceeghgeeefeeeeefghhhfedgnqjccdgiow{yutxzz}}|{xpifdba``____aa`a`__^^]]^^____aba````a`___``___`aaccdju|{|upy|jceaYZ[bmssy~y{}m\\W\\enrnmu}xvqllr~}b_fc`ddiu}vjijhggfgggjopos~zxuvx{yoxckvwvusnjmomkjfcdhgguvhjlijlkjhekmnnnnsvxzww~qecfecbbbabddefghkkidku~tv{}|geks{zzo\\ZdgoVO[`cm}y|ufa[]Tkx|xvzqa`dnrk`XX_`\\ZXXZXTa~`icXMPXXYXYZXYY\\]\\a^UUY\\[ZYYXWVXWJKVQSXS]h`SRSQQSTTTTSRRRQQPOONNMLMKKJJLJIQYVONQRQQRRRRRQPNOTVSOMLMNMMMLLLLLLLLNPQOOMKIIIJJJJIIHIHGHIJJJJJIHHJLNORTTTSTMADOQPPPPPPOOONNLJHGIJLNRTUUSRQNMLLLLKMOSSONMMLKMPPMO^g`XUUSQQQRRSONWYXSONNMLLKKKJIIIIJIGFKGBBCDDEEEDCABDGJKPUWVUQNMKJQUMGEFIJKGAimUTWVVVVVUUTUZ_WSRSRR[noLILQY`ekw\\XYVSQPPOMLJHGGGFGIIJECYbURTOGIPJHJ?S^JSOMOPPOPSX[[ZZ[]]]d\\ICDFIJMOFCDCIRH@GEFNOMNKFFFHUTC>KnLKNIHGEGHFGGEDCCCBCDGFDB@ACB@?@B>;;;;<;989:::::77::54ABYuy\\GESXQLIGLZemzyw|~|Y<779<=>;9<88876664011/-.15953345;>>>===<<;;;<<;;:<<::;;:54::::;9;::89=AFHHD?98=FHFEEEEEEGHHHHGC;1257799::99ESSPLJJGFGGDCFIKIIIFB>>AEC<:=??>=<<<<::;;;<<<=:887889:::>=A?====>=<;<<<;;;=>>>=<@BABBAABCBBB@?>?@A@>=<>@@???=<===?CFA<;=>=86@GIIIKKJLOOIC????>=?>@A@@??@=745433422=A>=<:869@DCAAA@AABBBBCCBCCCD;/-7?A=>@@@@@>=>@A?;;<::?95989B?438877656665555676666688::;;85468<BCA@>>>==?BEFGE@ES]\\dhZGK][JCEC;1)*03205JQH;==;<;06EFF>67852/.////0002343110122233221-,---04776677654221,,120.-/22-*9<2+')*,-/02457:;7777BTTF>9;?>:6/(%-EH3)+-,-/.+((*+,,(*GT;./..5;6026;1,+***)*+,035563,.<@7/+((,---,().1/,**-0.2DRRQA87656:4/-,-.--19A<1,,34.+(')KwrOE9.@QA0.0395..?PXSJ9/.39?B==<3/..01468BND;HJ;0))2=;2,++EWC-,-,+0320.3655568<DB4,233581+041*-31/.+))*'&''(&(3=>;655542,*122499:=@DJOROG;0/...-06<>>:645=HI=4484,&.<CGKLMORQKA7356;CIA411,),-2BLGA?<:0-5>ELIJY[KDPR?0./48879>BBHVR7*25//20054-*((03*&11&&+'%@WYfmZJ9--,*+--*)&'))('+>KIA950Z[ZYZ[\\]]^`a`_``aaba`_]\\[[]___acddfggghiiihhhiijjijiihhfefecbbb`_aabbabbdeddeeeeffffeefeedeglqw~~rdemomorqoquuuy~}}{xwyytmidba_________`______`_^^``__````````__^^_]^_```acjoqsuz{nmqv~nhhgcZW^eegryyxwrjacglllkib\\Ybkrtsnjsogppn{hgiiifghgipwrp}~{zxuwswtvtrrqpmnqrqoicbgrzwgjlijkklnjowspollljgxyndabcbbbbbccccfkorqmrtsjn{~{vgcgt}qke_bgp[UZ_ctwr|~lkbZ[cZh|yxtokc^]cpwqbXY^`[YWVXXQRn˲pgn^NPYYXUVYZUSZYW]_ZVWYZYYXWXVWWOPSJMW]igYQQRPPQSTTUTTRRRQQPNNNNMMMLJKLKGJUZVSRQPQRRRRRRPOPSUQMKKLLMMMMMMMMNNMNOPNLKKJJJKJJJJIHHIJKKJJIJHEGMNNQSTUTRPMHBDOPPPPQQPPPPOOLJHGHIJMNQUWWTSPNMLKKKLMNOMMMLLLNNONOZd_XVTRQQQRSSPU]WNNOOOMMMLLLKJIIIJJGHKHFECCDEEDDCBCFJQUWXVUUQOMKKMPMGEFGIJGES]XXYWWWVUUUUW\\^SMMOQT_scLILPZafuYYYUROOOOMLJHGGFFHIIJCJ]SMSSTOIHHIIFDjpJRPNOOPSTRRTWYZZYWSXUJCELOMLKECEEMKHIMOQSRPPONKHGHECDCcuHKNLIGEFGFGFDDCBABAACC@@A@B@@AA@><::;;:879:;;::878:;S`]UXlvz{YEJMNNLJHMYdr{`OIGGFGGGCEFHHA765210.,).3543358<;<=<<;;::::::99:<<::;;954:8604;;::9=CHIHE=;::<DHGEEFFFEGFCEGGB;3147999:;78IZVTPOONOPQMLPQNIE@>=@BDGHHC???>=<<<<<<==;<<<:9777889;:>@<A?<==<<<;<<;<;;;<=>>==;?IJGCBDEDCBBA@ACDCA?>>@@@A?;;<<<>CEA>;;;;64<DFBCBCEJNPNG@==>>?@@BCA><=??:54434108AB<89:75;@CCAAA@AABBBCCCBCCD@3,6BC?>@@@@@@?=>?@?<::;8::7899<>726878666655555676655569;<=>:5356:BEBA?>>???DHFFC@Wnm_fkhSJY`QBEIGD6,.2203KUHEGB;:<00CHHE=9:71/.///00001232110122334322/..-.38:;;:76554452007=:0)+12,*8;40'))+-/12320..5:<?DJE=:89:<AE9)%.93)).-+-00/.-*+050'7SF.,../3544661/.+*****)/:?6.841:;60-)(.0026/(-2011000-7D<57311214BGDB?855586.((+09=5*))#.^kI?;*&4EE=;<A;-$#)5DVYL<25;>=;=;1,,/102>ID78;7,()/5=B>1212SW7*/0-0895014468:=BGC1)/111-'#%'(*-/-,+****(')*++-3788755552,.5558;;<ADHHHLL@,(./,(&'/355-3@EDGJD<=?=70,39:@LOMKHC@>88>AENK=8<==;69JVK@?;3/06>??Ma[D93;B910136988?JJJL<+,-*(&&))+.+*123-+DYE)%+*#&Gt{[=011-+,-+'%'((%%.>GE8022ZZZYZ[[\\]]^`____````_]\\ZZ\\]^_`acdeeggghhihhhijijjjjjiiihfgebaaa``aabcaacddb`cffffffgfddecekusoutpppoonjhnwzwrpoomnsvtqkeca^^_____`aaaaabbbbb``_____```___^_^^^^__````bdfggku~{onnqzysoohZU\\^\\^hpstutojijjmmd^Y`}}zplj^brxxfkmkfgjghnttml{|yv|{~ystttssopttqnhcdfzrhlljklmmljsxspnidcb`{|xhcacdccdbcjpppnpuvslp||ueecblsomdajxbZ\\^cssu~prshd^Zae[Yrqebb`_]ZYYat}ueYZ]][XWVXYXSZ}difRMVXZ[VXcf]RQW[_]XWXYYYXWWXWVY[\\VKRlpYPSSPNNORUXXWVTTTTROMNNNMLMLLLKKIHMTWWTSRRRSSSSQQPNPRPMKIIJIJJJKKLMOOMLLMKJJIIJKJJJKLLLJIJQMJJHHHLVZSQSQQQPNKFCA@DPRPQQQPPPOOONLKJJJJKKLOSWWUSQPMLMLJKKKKKLKKKLLNNMU`^WSQPQQPQSQX]XQNOPONNNLLKLLKKKJIHJKKKIGEDDCBBCCDEGLPVXSWXSQOMLJHGGFFFGGGGICPZYXXXWVUUSV^_^RNNQUXezybNIMPXbhsXYXROMMMNKKJHHHGGGIJHFZYDKORWSIDEILNKLLNOMQOOWXSRRRQROKKNPW`gqseQKJJJFHHIRQSTSQQOMLMMKHEGIGAWx^JLLMLJGFFDDDCBCAA@@?;>B?A?;B@AA@>=;<===<;;;;;:87985Gm]]^emweKEINNLNLOUY`kywegysaRNMMLMMKPUZZVD7:DEEFC===:6548::;;;;;;:::999:99:<;:::;;66:3139;9:;?DHHGF@:;<;;=DGHFFFFDFDCEHF@8415=<99885<PXTSQPQQRUXWTPLIE?=>ACGHHLOPKE>?=;;;<>??>=<<:887777778:D;@@?>>====<<<;<<;;<===><66AILGDEGEEEDCCDFHHFCA@@?>>?=;<<<>ADB@<976447<@?>>?AFMQRMC=>?@BA@A@@=<<=?=9545415<B@87??66<?CBAA@@@BCBCCCDDDDF?05BFB>>???@@?>=<<??;9::988779::::86798866655555554455568;=>=855649CDCA?>>??@BEIHDTpymbghcXQO[`KBKLQO>.-412DNEKP@6:<0*>MGID;:71/..//000111222122334455541/.0259:;=<744458:963586/*-33/,6423+)**,../0/,)3>74;=?=:99757>A7+(++((++,-../021-*085+,GI.%*)*+054210.,+*)))*(*5;628743210/+(.445=>1+268;9888:9.----.//-013@KMIRWM;25:97:6/+)))'6LE/)**%*:GGE@5*(&%$&,9JMAGRG77792+*,/16=<2-/.)'(*-.08>22=*:XH*)0039>;54447:<=@A:01640-,)'&%&)-/,**)*++++*,/03:7113435753778888=ACCB@BFB4)+..*'&)0;?=5:GF=7:?966653-***2BJH@=ACDBAEFIOJ=57>BBDJPUO>321,/637P_P<:606><2.0.1446;EHFA4+***,,*)()().54+3N\\L6-,+(($*\\qB83./.,+,*)'&()))08>:.,02ZZZZZ[\\\\]]^____```a`^][[[[]^_`aceeefghhhhhijjjjlmkjjjijhggdb`___``aaaabdba`aeilmlhggfdfkosz~xusrpooomgfkmkiffgfgikmligedb`_____abbcceedccddbb_^__`````__^^]]^___`__accddflxysqqyysoh[W^^YY^aacfjnolikohcrrkibZdpinkehjiikknmgi~{yxz}~}psrw|}xqqspjjcadeu}{pkmmlmmnonpwrouoidddbczxtz{}tdageddcdjqrpoopqrqnn{zlcec_Zupfbbdho}j^\\\\^lyxy||th[_dg^X]hkhd_[YWXYYYYW_ukX[^][XVVVWZZNcx]ofQOSZ^\\W\\sqVT]^a_ZVVYZXXXX\\\\\\\\\\aWRgucOPRQOMMORUXYYTTUUUSMJKLLLLLNNNKKJIIPUVUUTSSRSSSSPNMMNNMKIHHHGFFIJKKMNMKKKJJJIHJLMNOOPPNQQOOMMPSV`hfWQRNJJKKLHBBDACRURSRQPPPOOOONMLKJJIIIIKPTUUTTRQQOMLKJKKKJKKKLLMNS\\]VPNOOPPQQPRSQPPOPPNNNLJJKLMMMLIILLKJIIIGECAAACDEGIIJW^[WUSQOMJGEEFFGHGGGHHQ[YXXWWVUUTWaa\\QRTWZ[isaQLORYbkpXYXQNLLLMKJJHHHHGGIKEI\\RFMMPVTKHLOOPREgǚZMPMONOUXTNKIMXbipwx|~dRKJKJJQGIRRRPOONNMKKNNOMJFFEMUNMLKLNLKJGC@=?BB@?@?@ACIJJF=C@A@?>==>>>@@?<;;99989:2Eumedae^IAGMKNPP]dVKKR[^Z_^\\NHJWWRPNNMKJIGMSXXQ@:JV\\ae_WPH>:6>=<=<<;;;:::999:99:;;;99<<8781/18;:<AGHGGGC=9:;;::>EHGEEEDCDGFFC<423=GC>;86>LRMKJHGHHHILQNIHHFBCCCEIJJNRWYR??A><<;???>>><:66667789::A>=?@?>>=>==<=;<<<;=====<748@HJNMHGFFEEDDGHIHHGEC?>>?><;;<>@BB@<8653249>A@@@@BHMRPE>??>?@@@@A?>><?C?866435:B>;?EB88=@CBAA@@ABCCCCDDDEEB<2;HECAA?>?@A@>>::==<;;;:877778758:8798755555555534444578;=<:75774<D;BE?=?@@@AGNFCd}|qbhi]RSLQc^?HTTTK9.424>IGMJ63:=4.;QGGF>:720./00001112222123344555652//25788;><754468;;82//,*+.120.1-+.+*+,++),0/-2B=/-03776786435684+**(()),.../020-,299-'>K9*.,*,.342/-.,*)))))'%*/000010..02-(/656@D>12;?A><;;;89730221/-+)'-=VYV\\R@IXUH=71.---..,7:(%$)(&(5IM<,((''('#$+7Dc|\\<242/)()+.10+)-)&%%(())()+',<0(CR9(+/49==;::75:=>=;:9>@8/++)(&%%(,--,+*++-./-.366:80/2335778:9879<ACCBAB?7/.211///4:AHGECD=47>70352//11046119977<?>ADA?GOLB94128HQORQ;()010/5O`K67<926?=621.))2;=;41.)()-.,+*)'()''.636GA'%/1/.-,*2xS,64,+,,+*)(''(+-+,2754510ZZZZZZ[]___``_```aaa_]\\[[\\]__`bddeffghhhiijjjjknnmmllkjhgfdb`^]^__^_`aaa`__dlquwtpljjlnrtx~~zy||wtrponnnmnnhegfdeefgggecccdffb````bbaafgffeeeeddca`__```_`__^^^^^____`abcdefm{~y{~vzrnu|~}tnfXY^[XWXXXY]cgihgosl{~sjfbd{polehhhijikqjdxywuvz~z~xprpu~zqswoii^\\bcinvwnjjlmnnpqruuim}pcbdec_]j|}~rs}{uu}|t`_hfffbhpsomqsrponnkr{|rehfc]Qrj\\Zcgejvp^]Z`o~{sr^clf]]aa[X\\[XTV\\^^\\YVWohX]_\\[YVVWXZ\\T[ybho_SMS]\\TRbjcba_ab^YVYZXY[Z\\^_YUXUpoMNTQQQPPQRTUX]YTVWYTMIJKKLMMNPPOMMMNSWUVVUTTSSRRRPNMLLLKIHHHHHHGHJJKLMLLKJJJKKLLNPQQQPNKR]QSV^gipwhWKMNLLLNMLGA@DFJOSUTSPPPPOPPPPONNLLKIJJILOTUUUTTSQPNKLLKKKKKKLLMOUZZTONNOPPPPPOOOPPPPPNNNMJJKNNMMMJJMMKJJJIHFCBAABCEGFEFVi[PUURPMKIHFDEFGGGGHFKVWVVVUVVSTY_a]SW_`ceweTPQT\\eij|VYWQONNMLJIIIHHHJIILGU^KHLKKMLKQWUQROQH|ıfNQPPPPPSNNVbvnZPLLLLRWGIMMLMMMLORQPQSSRMIKJILNNMLLKJJKLKG??BB><?@DLMNQPNDCABA@??@@>>@?><997799:;;D_zyphYIADGMSUVckYFBGJLILOQMFBCELSTRQPQNMRRRRTI:CT[\\`b_XRHCAAB@<;;;:;::9889999::;;99<<67932389:<AFHGHFA=;:::::;=BGGGFDBDGB><9518FKE@=85FTMGFD@>@BBCEHGGGHGFFGGIILNPTSWZH@CBB98?>?>>?;887667789;:<@;?@?>>>?>=====<<<<=====;9:=>ERTLGEEEEDEGHHHHHIGB@>?>;99<????=<:653239?A?>>>?AENOC=>?<;;>ACCA@?>BGD<65544?B@DFEB<;>ABCBABBCCDDDDEDDEB?:6CKEFFD@@??@?><;;<<??<<<;98887436;:77765454456533444458:<=:888:99?A4:GA;>?@AELNDBd~}qdfhaZVSRS]GAPTMFH>224:MPF;655683:NIFF@:631000001112222223333344320/0235:<=?;32554577761..,+--..--,*(***+..-*,.02<D41<5/6?@<72,)(196-,+(()*+,-./01-,29CD3%0AD;5/+-+,41//,*)(())))(&&(+-./023121*,657DDB:3:CFA<<;::<;74379647826CVa_OC>WomaD1,/-,51./44*)'(+2:67C9,))''&(),('8etTZP@4(%'''(*./-*)),/,***))&#&5:).LJ4,+27899;?<88:>>;;==91-,,)'&&&)-11,+,-,-0002466752222356688756;CCB@@C>/%*8B>868<@CDB>DF<0399625998668AQ\\R8/65320127>@GKKIHD8/4HSOTS7&*--,9WX:09>D=17>:564/)&098.(''().63*'(((&&*,2?E93B@-'+06/+.#Gl@.84.*)))))(()*---059:=<71ZZ[[\\\\]_`a`aaaba`abba_]\\\\\\]^__acddfffghghiijjjknqqpnnmkigedc`__^^____`a``bflquwxxvsrssnkjowxwwz~zwsonnnnrurmkigfeeffedbcddfhieb`__```aeffhiihghhhgfdaaa`_``_^_```````aabccdcirronomltz~wmsxz||tmk]XZZXY\\]]\\[\\cecoxjd{~tic`rxqiiigiijkljivotuw{}}z{qqw~{quvojg^\\aaenyvkhiklmnopqnsogrr^`eecfd][i~yszyrrzwtzi``fgfcfkmkmrrplmnpmnr~jaigcW^e]^igcpxbZ]o|tsziefbcb^]a`Z]eimoke]YUNae\\ba\\YXUUWYY[]]i\\gi\\TQ^aWQXeig_\\cd_YVXZYZZWZ_aYUQeXMRTTTTTTTVWVXdhYV]]WOIIKKLMMNQTUSQUZWSUWWVTSSSSSRQNLJKKIJJJKKLMLKJIKLLLLLLLLNOPPQQQQPOLMPX`kt|}|}dGCGHILPW[^XTOHFHKLNPPOLLMNOQSSRRRQRQONNNNOPTUUTTTSQQQOOOMLLLLJLLMOTYYSMMMMNOPPPRRQQQQQPOOOOMKIKLLMMKKOMIJJJJJFBBBBBBCEECGT^WUTPPPNMKHFEEEFFGGGFFLTVTUUUVVY[_a^UakijvjVQRT]gefwUXXTRPPNLJIIIHHHLIBELdY?JKHJHFKVZYUSQPPNyLSPPNKNY^nrYKLNPRVZ\\OGHLJJKLMOSVUTTSRSRPOLJRSNMLMNMIFJORQJBA>8:<FELOOQNCEDDB@ABBA?>@@>:77679:9<U_T\\gzr_KABFJQWZ\\ceXLLOPRQUY[TJLJEIPWURWYSUSRPORM>=MUWVWVTPLJHGGEA@><;;::988899999::99;:5788888999;@FFEC?;:9998888;CFFDA?AA<9788:BJG?;;65DQMIIGFCDFHMONKHIJIIHJJKKNPRTQPYRCBGG85@?@???=9975566678:;;<?==>>@?>=====<<<;==>>==>==<<CMOKIGEEEFGGFFGIJIFDCC@;99;><==<=;864449=><<<==>BHF=:=><:<=ACCB@??AEGA85559FACFEFD?=@BABAABBCCCDDDEEEC?=9=NMGJKGC@>??>><<=;<?>=??=;<<96569::86555553566422233249<>;78:;;;>A?86>B>?@ACINNACez{tcZdjf\\YXSUN@BLNGFB3038DC<7868;;26INIF?94211110101112232333444553-*-4524=EE;-)285234434333//55652-)''&(*-1440.,/8B?2=ND76BFA;7/++/42/,)((******+..*+7EF:/104BE8,*-*+:54;2,())*++0/+)*('/469:3/3,&/25DIGFB=BIC<<<89??7149<?BDIQRQRfwZG>Yxw_=-*-.142+/40++1568><630+)))*-37<5,9SW?HVZR:'\"$'((281)+-285/,',78-'0A9'9OD0'-010.3;=;9:?D?8840.+,,+')*+,263,+----./01123554221246566526AD@<:?D5$(5>JM@99@D?;:;@?6230.5=;:<?@@FQ[d`F210-))*+4BIHGILRTMA<BHGKD/('$&D]L,&+8E=0.8>3,//.-/454-,-+++170))*))(.<CBHOF4FdT@ACE?*$&)721530-)(()))*,--/28;<=??:*Z[\\\\]^_aababbbba``bbba^]\\\\\\^__`bcdefefffghijklossnkkkkkjhedcaa`^]^___```afmqstuvwwwvwsidehnuy{||~~||{xtplkjkptrlihfffeffebcdeffgigda``_^^`abcdgijklllkjigecb_^]]__`bbaba`abbcccccbcdc`anwuu|rry}xw{xn`[WYbhijgbbc_asypyojzyukdgtgjiiihhgkovnuvx|~~|}ut|qjjjgha_aadqqfehjklmnpolirmmz~t]`efcedbWgwyzrry}{pgedcddeipsqonnmoqsy|qo~mage^Usz]_agd]_dlXbu|r|rkknf^\\^a_\\WYdhovg[XVQUnyibge]WUUUW[[\\]\\]ve[eUWWakgXWcea^bgf`YXZ[ZZ\\Y[`b_USZLWUUUUUVVVWWWX`jcV\\^XOIILLMPLMQUURORQKKTVUTTTSSTTTROMKKLKLMMMONNNMJIKJJKLKKMNPRQPQQQPONLO^mt|tRCBDCFHTdg`\\`^WTTWVQNMLIKLKNQTUSTTTSSSRRRTSRTTTSSSSRRRQQPNMMMLKLNOPRWZSMNMMNONPPPQQRRQPPPOOONOPKGLNLLLOKGJJHGFDBBCCBBBACCDKNNRNINQOMKHGFFFFFFFGGDKUUTUUUVXZ[^`^WipoueTQRWbjkirUWWTRPONLJHHIIGDQqo^cbMMY[XRQNOUWWTSRQQJKXRHGO^o^QNPSVVUUZ_\\JJILJKJLNRTTQRPPMNONNKIORONMMMNKGEFLQOEC?;:9HILSPRLDFFDB@ABBA?>BA<87767;=5Hwzom_baage^LCGMRVRY]`fdXPSSUWXZ]\\NGEEEGIQVVYZVXWVUROLE@LTVURPNKJIIIJLQQLF==<:9888988889988:978889889999<@@@?<9988777788<>>==<;<;:9:;@FG@;::85@PQNLKLJHJKPWZWOLNMLKLMMNQSVWVU[RBDHJ@=AAAAAA?;976666678:::;<<<=>@?>@>==><=<:;<=>><=<<;98?HQTKGGHHGGGGIKMKIHFEB=<;;=;=<>>=:854579;;:;===>>:88:<:<>>@BCC@??=?EG>547AFBCCDFEBABB@@AABBCDEDEDDDB=<;9ANKKLLJFB?>>>>=;:99:<>@@>?A>967:9777655555356652111126;>=878:::;?A>:;<@@>@@ELLC7@futt[Mbmh`^\\\\ZVH=?Vk[A3/220;?969>?>96ISLF>53211111111222232333434664/-177/0:DA/(0543111114562/28>BCA9/+))(*-.1110102<=4ASMF>7@LF;6300210.**++,,+*()+,*1?E9-4DH:;C9,)*)0D<0<@71-,00+373./.&'285<C53/&-.+8NTZ\\MBKD>><37>;105;BNVNNWVXR^thWBZ{L41-+../.,/.-,4>A:66896-*-*-4<A=B=/COIC88@OYP:'\"\"'.0,*(*0:=4,%+<C9*(:F4+=C.()((()-37657;D=8873-)+,*),)+-582,+----,-/..,-221133464132226>@><9@H9'1==JSB79AC>;;A??@A80/4<?;9;?EOVPGD<2-''*(3FL@@GGIPSWTSD3/230,)'.JY@$$/9;7/+07:4*&-///430--,**,01-+,,)(/?KJCL_V84\\qqxvaD,&+)$)--/22.,*(**+,--15::96572)[[]^__acdddccbaaa`bbbb`^]]]^__`abcdeeefghhjkmprrjcceefgggdbaa`^^_]^^^_`bdglnqtvwvvwwurpligjqv|~||xtx|zvrlhffgijgefeffffffdeeegfgiihgea_]]^]\\[\\^`a`abfijlkihec_[\\__`aaabbbbcbbcccb___^\\_mrkkxzpuyxux~scTZpsnswuqh[Ylpm|pkzzft}{{rmlsffkptqlkkpswuvz~~u}r^]begeaaaceaaeikklmmnmkjshn|}u]acdccdcc}{qrwwtjgfffcissqonnlkrtpqvqmmo~{eae`Z]qn[ab``^ZWmyYalihd]\\]_^^__hviYajxzqcXXWVT_kjkje^XVVVY]_^\\^\\hÕ\\\\YKQZipdXY]_clkfbZXZ[[Y[XZ^``JhlLUWWVVVVWWWXXXXZ^aZ\\_YOIIMLOSLKPQPKJJGFKRTSTSSSTUVVSPMLJMOOOOPOONNMKIJIIIHGGKNRTRQQQQOONKRhz{wsuaIEC@AKWiib^]^^^^afg_\\YTIGIIMPTUTUUUTUVVUUUUUTTSSSRSSRSSRPPONNMMNNPPRUVQNNNNNNNNOPPPQQQQPONOOOLQQEHHKKKLJGGFC@>?ACDDB@??@BCBBDEEFLSQMKJHHFFFEGHFFFOYUSTTTUWZ[]__ZjqvxbQORYemlqhUWVSQPONLJHHIIFGoyVL\\ZXUVTRSUUTTRSQOEOrcMSaǮeRP]ddc`\\YX\\^SJLJQKIJMOPRPNNNMJHIJKKILQQPNNMPMIEC?AFFE@>=;CPLPNPLDGGCBAABBA??BA:77756;<7P{oijd[]\\`cZKFNVWWSY]bjiZTWYYZZ\\XNJHBABFHHVYXXYY[]\\ZVSPLNSSRONLKIIIKMPRTQLFE>9:998988888888988999:9999989::<<978888888::99:;;;;=;:;==@@<999996=OSQOONLKMRX^c`RNRQOMNOOPSUZ[[_hT>FHHECBBBCBBA<987777778:::::;;<??@?@??>>>=<;;;;===<::::;9;FPQMLMMMMMMMLLJFDCCC@=<<;;===?A?<84556899;;==;9888::;==>?ACCB?<9:AIF<6<CBDBCEGEDECB@@AABDDDEEEB>=97::;DNQPOONID@>>>>><988:;<>@@BC?969:7446555444456641022137>=8668988:=>=;=?>>>?AGMF835PmoeVO[mnfeebbaR@:Ijz]=73/1;@?=>@BH?6IVOE;31000000111233333344434785105::3/8:3.265221/.-/474-/67>GJLF3.1,)+-,*,13542278FSQPG3>RH96542100/,*+,,,-+)(*+/;B9)-@E?:8=8-))&/@5'5D@=9434,+8:3120(,43M|uO6(+-)1@Mt]?E@>A9-9<//22;M`]GBHO\\b`jiYA[t<550.-+(+-.-,2>HG=-2;=95200=OSG73=8GNHF=7//=MWM8*$%((+.'/>=5.(*4:7-'-BD/)/+)('%&).353/07<988:5+(*,)-0('-540,,,-,-++,,,**-/.1679:6.,,/04=@A=:BD/*8>>FJ=69CC<9:;=@IL>2149=;78=CHJF=40.+*+*&4TZ>9LKLTUURJ@0*,-+++6PR5\u001e(8?70+/587840)-11.,+*-.(&-341,..+*-49<>8AYO6-8fp=)..,*()),496/,*)+-,-.364.*)(&0F[[]^`acdefedccbbbabbbca^^]]]^__aabcdddeefffghihe_]`aaabbcb___^]]^]^__`bdfhjnqtvwwvwvrqsromhhq|}yuqqw|{xsokgdbcdeeffffggffffffghhhijkhd`^]^\\Z[\\\\[ZZ]`dikllmljjgc_^_`aa`bddddbbcccdeb_^^aed_bp}}vtvvvwvvxp\\Ypxmsxye`dajvzqq~sv|zokkl{phoy|snlnmnsuw}yq]\\^`bdbbbcab_dhjkllmlkdrvbk|~u[bcdcdc`n~xxysihgffoutoooopqsrolheikj~xlea_[\\diie`aba`__Z]Z_]S|iX\\__`eli^evth`^wvi\\VVUSTYclljh_ZXVX\\`aa_ae`r΋ScNCK\\if^WP^tugbbZXZZ[YYTPOXTUwMU]XXXWVWXYYXWWWYY]]\\_ZPJJNMNPKJKLKGFHJLPTUTUTSSTUUUSONLKMMNNOOMNNNMKIHIIIGEEHMRURPPPPONNKR]mheveMLX_kkc`^]^^_`cggffcYWOLIINTUUUVUUUUWWVUUUTSSRRRRRSRRSQPOONNOOPPPRRRRONOONNNNOPOPPPQQQPNNOPNHIGBBJKKKJHECB@?@BCDDDA?@AA@AAABBELTRMLJIIIIEHGFFFGLTSSTTRSUX[]^^Yblqvwvt_QMOWelm{qYWVSRQPNMKIHHIJEJocKSRRXXWVTTTTTTTRRQRQYiƾdMKTmtmgeb_[Z_[KKMITRFJMMNOMKKLLIGGHJJHJPQPNNMOMIFCA>@ED@A?<>C@DIPLFIICCA@ABA??A@<87757::9KtjbikotgYQNKLV^[VV[^bkj^XY[[[Z_VDJIDA@EJGUZWWYYZZZ[]ZVTRQQQQPNLKIJKMPRSRNII@;:998988888888879999:998998877:;87888888:;;:::;99<<::=?>@=66799:6;NVTQPPNMPV[afaTOSQPOPQPQTW\\_^cqdHHHHECBBBCBCB=987777788:::::::<?@@@???>>>=<<;;<===;999::977?KOONNNOOONLJF@@ABCB?==;<>@?>@BA?8544689;;===<<;;;<>>=>?@BED?866:CJB9=CDEEGHHFEEC@@AAACDBCCD@:5//786GPNRQQRRPJB>???>=;;:999;>@CB;5786444435554445662-/5866:=767787799:;;:::;<=?BHMD;717YmaZPOjrmjgecbYG>=Ilu\\A3066<@?@@IS?0EYSC4201111112223432334443368861159;6583*0851000..//340,.249>GPH504/)*,,),/26960/7HSSTN<FUB633450/0-)),-++0.+)*+/8=3.;;0,59:4-))(+0.-9CCCA:441(,531124116M|_;-((+/08v^:748?:/32*,--@agG1568Njqp\\;3aS-///33*&).005:HKH?1/;;86835NjjM6(4=IIE?654..0:KUP9('(,A@08921-*+,.-+*4<6,)**)'&%(.134667:899:6,(*++10'$292.--,,--+))*,/0*).5:::;8/*+.28>AC<7?>,,9=;=:87;CB9676:>FK@44443335:B@;<:1*)+/0-''3C>APYYWRQP>;7-0*'0@OJ7($*9:31:@C<76655010.+)+/1-.5>90,,-.1670*/10233.#HyB()1-*,*''+550.,,,,+,,.34.)+=<(5Kbbccbaceeeeedcbbbbbbbba___^]^__`aabbbbca````_]]]]^^^___^^^^^]\\[[[\\^__acehiknrwwwxxxvsqonmiegpvuqorvxzywtrpjecbceeefgghhggghhhgghhjjjjhd`__^\\afc__dilmmlmopomnnlhda`a_`bcefdbcddcdedbaaca_^`iw~yqrttusqqlecirxyxoZ[vxklw{wrfiquxtt}ptw{zhgger|uuy}yqljifjtssqkv}~|}}}~o_db[_bb`aab`^ceglo{xzmdlxu_cdgged_r~y}z~{ubefffournoqstsrppmigjhg~tgkf]Y_hkgeeca__\\\\aWlf`VfiRXZ`f_`if_^bfha^{xgYWWVTUW`qlhha\\ZXX\\acccbfc^}kY^GHR]b_]T\\qm```[ZZXYZYTIMNP}POYZ\\\\YXWXYZ[[YXWY_gc^^ZQKJLKLJIIJLJILNPSUWVUUUUTTUTSQOONMKKMNNONMMMMJIHHIJIIJJMQTRQQPOOPOMQMm|i}fgkibZ[\\]\\\\\\\\_`_```a`b^XOMORUUUVVUUUVWVUUUTTRQQQQRRRRSRQQPPOOOPPPQQRRPPOOONNNOOOPPRRRQPPPOPSLFJEJQNKKJHGFEFFFFDDDDC@>>?@CBCCDDISRNLJIJQPS_]JFHGHNSSTTSRTW\\^]\\YY\\\\\\\\du~o^OMNXgqdVWSRQPONMKJIIIIEO{nJOV[ZZ[ZVTUUUUUTVUW]w͢iNJMT[Ycnjfeca_`fUHKLJS]OKKLLLKKKKKIIIJJIIKNPPNNMNMJFDDB@B@@@??<638BQNGKKECA@@@@?=?@<87769::7CdtstiZRRNKLW_^\\_gichlb[Z[[[Z`VILKHC?DJJOVXWYWWSRTWXVUSQQPOOLKJJJKMOQRPLKIFA<988988887887879999:999999999::88777788:;;:::879:;<>@A@A?:5579967JZWSRPNNRX]bfcUPTRQPRSSSUX]aaaouXFHHFDBBAA@CB<79;977787999:;;;<@A@@@??>>==<;<<<>?<:998779988<BFHHIHHIGIFEDBBCDDA?=<=?BA@?ACD?65569:;=<<>><==<>>>=>?ACFD?9677<FE>?DFGKLKJFDD@<<?AACCCDBA<61-.793K[MQWVTVVRJB@@??=;987889<?D@636643455455544456640059:899756655679:9878899:?BGI@=<35SoiaRI`stngca_ZL>?CRnpM519><:9;AHK?2AYU@-112222222223433434444468751//598?</065,+../14632/-..)-148=<314/**,,-.0/1221./;MUUODEL=6347:2./+)-1.**/0/,,*-29968-+/044/*))),3459:;98620/*%),--.23046>?3/0,(-.+,U{T41.042/-,*++*GjH+'+/(1\\}xP'&Ok8+0-/30-()15:CFIJHB6.6634<:EirT5,'(=C;51.+.34,&)6EJ?40-HdK5:;93.+()-/,*)-21/-,+*((+/27@@;<=9888/.,,03.*1?9-,----032-((0:7+)28999:80,27=CBAA8246-,26535;=>CD83659:>G@864222103?D<:8334598004-/?KYee[KHM<7=3'*3EJ?0())*/37=FJKC856:>62..8816A@;8:60+'.9::9/*+/,+33/+.}S #-.*)(')(*.+)-274.)*,-138<?KH78;aacdcbceeeefecccdddddbba`_]]]^^_aa``_^^]\\\\]\\[Z[]^^]]__^][[\\\\\\[ZZ[[\\^__acfiklmqxyxwvutqmjgcdgklkjovxxxxwuvrjedbbdeefggghhihhhhhgghijjjjheb`^\\_dc_`dhggikorrpopoonmjgcbbbcfgdcccdeefggfffeedbeottzvmnqrtttqlbWZacfpr`hqghj~ujks~|{vtyy_`u}tgdghd|}xvsnkkiilpolhmwzss}zv}mcpusqkb]_`__]cffm}gakxvbefokfe_p|zmiddgqtokmorrpnllljjkgfzulkh_]cgfeigb_][ZY[WRur\\ewVVSTXac]Z]^]_ce\\`ubXZ[[[[Yaplcd`\\YXX]adedbcg^hأ``WLNTWXahgda`a_][[Y[[VTVSIxWMUWZa`[YYYZ\\^^[XWYgog`^[SMJJJIHHHJMNOSUVWWVVTTTUUTUSQPOQQOJIKMNNNNLKKJIIHIJKKLMOQTSQQONPRPPRYgg\\VXZ]]\\\\[[ZZY[\\^_`aaaba_][YXVWVWVVVVVVUUUTTQPPQPQRRRTSSSRQOONOONOPQQQQPOONPOOOPQRSSSRRRRROJJJNMRWOJKJIIJIIIIIHFFFDB@BDEGGEFHFDLPOMJHJRYZwNIGFJSVRRUUVX^_\\ZXTNMS\\i~p[PNOZhzu^WXPOPONNLKJJJIIEhNNZZZ\\\\\\XTUVWWVW[iˣ`PQOOQQORY`bbcccce_NKLLJRd^LJJJIHIIIJIJKKIHJNOPPOONMNKFFEEDA<=??A?844:KPGMPHC@????>=>?<9888;<;<=CbspYPSQOKKR]`bftxcioc[\\\\]\\bfZSPLLE=@DJBHTYVQONNNRVTSSTUQNMJIJKKLNOPPNLLKKG?999:989878877799999::::9:9::988976778789:99989<==>ACCCDJ@2257873L_[VTQPQV[_egcVQUTTSUVVVW[_cd`i|bFIIFDAABBAC@;9<EA87787899;<<<=ACBA@@@?>==<<>>=??<:8987799::87<BEDCCBBDEFEEFFHHD@<<>ACBA@@DLH:469;<==>>?:7=@>>>=>>?@CFDB=:888=CDDFHKNNKIDBB<89>@ACCDDA=950/27:5?]\\X`^[\\XVQE>A@?>;889::9<AB;455543344455444457996459997886454556:;8668888:?EGB=>>:6Jljd]NWnyvlfa^[S?:@C[u`?3:@>888579:6>XV>*111222222233444545554568752-(),1;;461))*++-4:;80+.033../1123220,*,-.00,)'(/446EXXKA>>7778:942/,-24/+,+.31*',6<80*&(0.,/,('')7>5--....,,+**(')*+,--.00,)%%.2/+,038B</0.-+**)-3/,+:E)%*-1-&E}wD+$/@002./10/*(4;DLKJIHE8./015?Cd|].$*)$08.*(((,24.++% 7L>--7Xl\\Z^SL>.),/2/,))2641//.+(),16@A>AB:36:84/-/0,-9@0')**+.5972-,/32+.577776414;@CCDA7/0241-.00.3=ABCE@69=:7:CB>;537:;701:?:215AOTH;BLJGKGHQRIEFIG=?;,8HJ9)+.++++6EFEKLF:48>>:4+/FD:L\\UF6.2765=ME4>A67BJKH=4=1Xu?)()+,,*)*)((*),6>>2&),,09HK=46=??aaabcccdeeedcccdefffecbb`_^]]]]_a`^^]\\[[[[\\\\]\\\\\\]]]^_^^^]\\[ZYXYZ[\\]^^]^beghhd`jsrooomkigeddcbbchnnotuuvwwrjda__acdfffhhiihhhhhhhhhjkkllieb`\\YY\\]^_`__bhnrqqqpqqppqnlkgcbbbcbccdfffhiikllkjhhkmmrx}ynjknuxzz|ujbaelvvnjmqnx~zvwsr||pcbj{qbgnidfhjozvqmjjjijpogiuujo{{w{~iclw~kadkpsu{}z{cexreedjjge`l}tp~}sbcksrmiilnonmlkjiiiddwwijd`egedcee`][YXXXYUUotg~\\XQVZTVbe\\\\]Z[^aZe~n]X\\`bbb_bkaZ`_ZXXY]acccbcegdw`_ONRRUZcfa_dd`^\\ZacY\\^\\Ro]IWTTY``\\Z[\\_`a`]ZYZksld\\YTMKJJJJJLPUXXXWVWVWVUTTTVVVROOQRSQNLNMMMMMLKLJIIIJLLKLNPQRQQQRPORQRWUěnnXNEELU\\_^^\\ZWUZ^^]_ccbbdfhhgf_YWXXWVVVVVVVUUUROOOOQRRSTSSSSQPOOOOOOPQQQQQPPPPPPOPSSSTSRRRQRRLCCKLNNKJKKKLMLLKKKIHHGGIKMOOOOPSUQMNQQMJGIOVPe{^NHEFKQSSUWY[__\\ZVTQT\\kzqZPNS`h{eW[XILPOONMLJJJIJCqƖWIPNOPPQRSTVWXWYzŴuhSOUMQ^a`aacddfbSLLKMOK[hVGHJJIIJKLLLMNMMORRRQPPNLMMJFEFEB;:=?B@=:99BPIMVJDBAA@?>?@@=;999;<;><8Ss]ILNNMKIMY\\biw}gkqb]^ab_ogSMHJLF;:<>9;G[VHGKLMOTTRTWZYRNHHIJKLNOPONLLKKJC99::::987::8889:999:::::9;@=889:9677789;;::;<?DFC@ACDIKH>5556882H^^[XVTRX_chgaWOTUUVWXXY\\]_cc_g|dFKKGDBBBBCA=;;=C?88777679;>A@?AA?=>?@>>===>>>?A=:999888888:;::>@AEGFFHIKJJLLLLHA<<>CCBA@@AGPJ;359:<>>>=76AGC@>>?>>@CFEC?:8978?FFFIKNKGC?@=878<?ACCBA=9763256:98Yd[cdbb^YPA>DB@@><::;:9>B>73566553444555444579<;767896458777656;<86676677=GG>:=>:3DghebUTcsyrmgb^YK>;?J]\\D87==559644727XW=,12332333333345555555679<<73.*++,2572((,,*+/48>@5+/3<?3.////0110-)+--/340+-6?B<>TZG96317:;98764/-01.,+*/32-)-8?3&$(*,,,-,*()3<5,**,/.---,,+-//.-,+,-//0/-*0AIBBDD;+%.223-'()/4+&&,-%(,010*9md0+))+,11/00276,2@KOMJJJE902=@=;X\\-\"4>4&.6++*))042//-$\u001e:V=$)'.]zzwncK/*.04575447557::3-//17===>@6,2<<1,)'()*..(&)(*,.3775104:5/2546665249?A>?D?1.322/,,.-,/49BDCC>8;<;=DHA8AEF:>IE7-/420,:W`[[_WPVSD3,06FMKMFAC74;4,+.02665>JH@FKB7342132-4GGN^c\\P<9A=EPWcL*9VOFYqoaR?;CEH@95(+1023-))+-+(.:A6&&(*2=HA29DF@:^\\[\\\\]]`bcdcccdddffffedb`_^]]]^^__^]]\\Z[[Z\\\\]\\\\^^__```abbb`]ZYXWWX\\_^]_bcedca[[bddfecbbba`_]]^_ddafpuvy{ytmf^]^```ceeghhgghhhhgghikmmmmligd^ZZZ[[[[[\\_cinprttsrrrrrrqpnjd^^_`bcdfegijnoooprsrpooprv~skilqtvz|tsrrwxqmkkklwqn{~{|{mdk}~qljiegliyrkefhiijlnhdszompqw~~~~~~zy|z{|eZ]dq|}~yeuxjfgkkecdijlp{nz}}zo`dklppiijjkmomkjiedeiw{h_^diieffba^\\ZYWXX[ZV`{|]VSX_XWUWdf`][\\\\\\ZiwdXX^ceedabd]Y^][YVb`^bbabcdgggk_QPZ[VUVVZ\\^``_][`bY^`UieGXWTSV]^WX\\^bbcc_][YekdYQVUNJKMQSTVWZZYYWUUVXWTUUUVVVQOOQRRRQQQNONMMLMLJKKKLLMMMNPQQQQPQQOPPRUOnUtl[NFHIHHNZ_b`\\Ybijfabbbceghhiijf_ZZXWWVVVVUUUUUSQPPPPRRSSSSSSQPOOPPPOPQQQQQQQPPPPPQSSSTTSRRQQN[[KEGFEGJJKLMNNMMMLIHIIJKNOOOOPOQQNOPRRNIFFHHIBCOXSJFEFGQYXWZ^a_[VRRX^gvrZOPWbgty^TYWKMQQSQOMKJIIJAbeGKMKJJKNRTTVZU`˳pWPSNftgcfgggddYOLMLMPJQlfOIJJIKKKMPPPPQTTSSRQPPNLLMKFFFEB<:=?AA@?<<@MLMYJDBCBBA@@@@?;99:;<<=<7W{aFDJKKIHHM`^cluvgntc^bgicdUGFGHFA:88877;QZAADDGILORSUWXVPIHIJJJKLNMLLLKKKE;:;;::879;<:889:999:::::9<C=899::97779;;;;;;<?FHECBCFJJ@86788896>Zc__^[Z^elsph_VRUYYYZ[]_``bdaisYFKKGDBBBCC?;<>=:98888778;<@FFA>>====>>>>=>>??AB=88998888889;::::;BIOQPQRSSSQPOKD>=@DCB@?>==AKK=438;;::758BHEB@@@>>@BEEC?::967>FGHIKLJFBA>:778;?AB?;<965775568;;Th_`fgfg`K<>BBB@?>=:::9>C<9:<;7554553443444579:9777676568<>;85:=976555585<FC<9:;5/Ckkd_SMXkttsnhd`UA6<BCJ?56;=::?A>;94:WW9-1385343333334555665689;==9523531345300.,,--,/460+.149520//.022.*(*-./4:847>BE=6KU?2312354443220,+++++...../3;:-%(',7401344554)%*,1410/36411354/-,--//.002,=`mkl_YS61864.()-13/*''((*./11.5SN))*++*.//0009=32COOLJLMD827DMEHof.#(08?3180-)&)?A2+.+*@VP5(*'!@v|y^@59::;8654344338A>783.598555/)+23)&%%&&&%$'*/32/+.59854=A3+26675358:<=;;DE:6;7-,-,,-..015=?<AB88>>=@GEM`dW:7Qc_B&&67/8TdkmiT?GQM?227@IJIGAD<)''0325<@BBCGF=AJ@3240/1.0?EM^[UN@GWC,Gdh]<*1I]S]yZA<GB41183+.178.(*,.,*-6B=*'')27:43CKA2-SSVY]acfgggffffeefggfeeda_^]]]]]^^]]]\\[[\\[[\\]^`aabcdddfgggfdba^YVVX\\]]^abbba`^[X[^``]^^]\\\\[[\\\\]]Z[dpy|}}{uj`]]_`aacdfgfffghgfffhkllmmmmmjfa__\\ZYYYYZ[[`horuustttttsrrqpkd^[\\^^`cedfklkmprttsqnllllotyzyz}}|wqnlloty~}{|xzztlfefjqojjv}vv~}sqx{pghlwzzogcfhjjlpqhdcdipsrsvwwvvvusx}uoudX\\^[antywrc[`kdbekligu|~~~ddddepogghhiloliifdlttylZ\\gigeeeb_][[YXYXZ\\T[ZT[\\d^TXXUZbb_^\\[ZXe~q`X[cfffdba`^^^\\[ZWcb]Z^``acdfamx_YP\\aXMNTVWUX]_a_[[[ZWTqpQTVWVUV\\ZPV^`cfijec_[XUPHHVXPPUUVYZYVRQPQSSSSSSRRTVVUTRQQQSSRRSRPQOMLKKJKLLLMLNNOOPQSSRSWVPOOPYZiZWj]QKLQNJHHILT_cddkoponnifhiiiihhgfb^\\ZXVVVVVVVUUUUTSSQPQSTTTSSSQOOOPPPOPQQQRQQQQQPPOPRSSTVUSTTPF[u^DCDDGIIKMMOONNNNJHIIJLMMLKKJHEDDDCIPOJHFCBDFFGNRNGFGFJV[Z[`a_[SOOZipzrZPRX`ftw]TWUOOSSUSPNLLIHKEQ|KKPPQQSTVWVUYRlƯrt\\ROPzlglkihd\\VNMMMOPL[w~gNHJKLKJLPOPPQSSQPQQPPNLLMJFFFED?==?AA?>==BHKO\\ICCCBBBA@A@>;:;<==>>;@gpL@HHJIGFGKgjjwxkjxl_bhjZLFFKKD<;::89988AR>>=;>AAEKNPOOPNJHHHIIJLMMLLLKKKIA>;;::999;<;9888999:99:;:<?<:99:::8789::;;;:;;?CCDEEGGA9568898889Obec`aejov~}sg]WYZ[[\\]_becdhcneHIKJGDBABCC?:;?=98888977:;<>CFB=<=?>>>>>>==?@?AB>878988889999999:8:?JSSQRTWVSRROG@?@DDB?=:::58AHH:3:<=:99<>@BBBB@>?@BFEA=;:978?EHHJMKGCB@<8668=AA?:68766666559==Ieg`ekjjfU@9?@@??>>;::9?B<=BF@85434433333454567789866<?<<>><:8<=887566775:A>998662:fndaYLPfqtsojgi\\A7:ACFA64:@CFHIHB;9BUS6114;66433333345555666778:97448<:8864430,+./-,+++++,*(,0///01352+(),...-,.48::;74FJ6002420//.----***('+1-*).4:>4+28+,CC75;CD;.,)&'*//-,+/674/,5>3,-/.//-.1413LuufmP1652-+/35652-**(+02111265+*++/0,*-21.9>20?OPJHMNC55?EC=<X4('+&'59450*'(8RPE<--EYN6+,+.06bkE7@LOOOD0%'*/0*%,7>?@9-/11/.+)((-3('(**)))+*-7?:.&(2;=?A>8015775228==<:9>E>13DD1,--./3::;;::8:@?:::64?VfcUD1+8PeV3(4:58J]f^SC17KTUTPC9<>=?A=;/&,5789::<?ACD;;B?:?AAB@33>9Q\\E93,CM3%Ee\\8&3/.HS`t:.FH>?;38;2+/20-+('+.157AD3')/10/./42...^`beikmllkjjihhggggggffeb_]\\\\]]]^^^^^]\\\\]\\\\]_accceffffghhggggggec`\\ZZ[\\^^^_^]``][[]^]]]\\\\\\[\\[Y\\[Y[cnxzyx{~wia]\\]``abcdeddedddddehjklmmmnonkfc`\\ZXXWXXWWZbiklnptwvutsqpnnppkfc_^adb^`e`\\afghfdeccehknqrrrpljkr|{ywsojly}z|xpkifeiidq|mmvpgewnho|}{ztkedgkmmmnppnihkotusqqomlllmw|uot~f]_][d|n{qhffghklli{z~|{}~~|xupkijkjhhhghjljihfn}|zj[_egeed`^]\\\\[XYZY\\VP{UU^_jaWZWXZZZbicZZZW]t{k_\\`fggfeba`^]^]\\Z[fhdU[babdfgeerb`ROZ`\\PSXTTW[^a`\\ZZZWY[WUTTTUVW\\YNUbedfknidbVLJHFLWYTPONNOQPOMLKMOQSQONPQSTUTSQRQRRSSRQQQQOMJJJIKLLLMNNNOPOOPRST]_PPMR]\\wzM\\_VSNNVNIJKJJMNQ`ieenuysopmihhhhfedb`]\\XVUVVVVVVVVUTTSQQORTTTTTSRPPPPQPPPQRRRRQRRQPOOPRRSTUUTSSOFRgYDCEFHIIJLNOOONNMLJIIJMMMLKJIHFFEA=CMOKIGFDEGHKMQQHFGGJPY[Z`b_ZSPO^wwzrZQRY`ett\\TWTQRUUUSPNPMJIJKKqXKRSUVY[ZYXUWPnʹhls]SJSwpogddcZONQPPSSOjuXIJKKJJLMMMMMMMKKMPPPPMNLKHFGEDB@@@@?@@?=BDEP^H@CCBBB@AB@<;:;>???@;Jw|WDFJIHHHHEFbilzxgaoi_acaJIHJKF=89:989;;:9B<<;9;=;;?DHJKKJJHGFFFGJJIIIHHHJJHC><;:::9;<;9877789999:;;<=<::9877789:::99;;;:;ACDFFEB;8778::9987;Ofe_epv{wlb\\\\[\\]^^`cffhlwlPHHJHFDB@@BB>8;@=87678;:8:;<<>BB?>?AA?>>>=>=?@?AA<979:889999;:9:::987;GRSNNRSTTTSKC?@CDB?;:88954=GM@7EKFGFB=;=AAA@@?@BEE@;::999@DGHKLKDA?=;658;?A>;756756766669=>>UgcemlikfG5@??@@>>;998>A>?BA<85434554434566656888768?A???=<;::;9997777669;<;;87844Sokij\\R_ovtpljhYA8::>CE?5;BLPOOMD>9?TH3655:5444444444555566555575003:<778742-*+,01///00.+*('),,,+.0375,)+-/0-()/234218?B9---24331--20-,-.--,+//,*,3:>83<@1-AF>:CPF0())'(,0..,)'/330(,;6*-02.,.1115<A_lED;,----.47883.,+*)+260.14.,*,/-7?0$+10/98*-<JJDDJL<.8LM>).5.(+*'&&,230*)/HZYUC6IZN;3.,,193GL474EX\\YH/$&)/2)&+,4;@=3.--,+*()+6<-,/0+,464/.491*'&+9BDG?415322138==:99:>?846;EC4..028BDA>9664:>303207KM9.*%%'2GK@53425:AF@980/DTVZ`R=63017852+288740-/49<?=97=DFDDGE?5.+@<(%(+32/&;S<%&/.,-;\\[$$ANHblTED:,./-,,''-379;=A8()/.,+)(&%*12gghiijkkkkjjjhhhgggggggeb`^]]]]]^^]]]]]]^_^_`abceghihhiiiihggijlmkgc_]]]]__`adea][\\]]]\\\\\\\\\\][Y[[Z\\`fiiijmnhb^\\\\\\^^_abbbbbbaabbbchjknnnopqrsokfa]ZXXWVWWY[]`dmtwyxtrqoonotvutqlkmkgdca]ZYYZZZXYZ]_cfgkotwuqqlel{{wpklokiqyzxyxusnhfiihk|}uqc[bq}nal~}vrokhgfilnqrrstsponotxuqpokijkho~snr~ib_[h|xfhnomtv}|wz}{}~~|z~yxvrmnkihhhiihfjy}{}__acfec`]Z[ZZYXXWY\\OmcR^bddad`VWWZ[]ik`UW\\[l~t`[aehgggfcaa_]^_^XYk_^bbcegika]f]YOWnlWVRQTZXW]^ZYYYYVUWVWUTSYZUOSdmidfolb[PJIIIMRTOIDDGIJLNQUWVVURQNMPQRSTTRPPRRRRRSRRQQPNMMMMMLLLMNOOOPPPOQSRUUMQLR_^\\MRQSTQNQNKJHJLKJJNTY^irpmoqnihggfdbba`^]\\ZXXXWWWWWWVUUTSRPPRSTTUTSRSSRRRRRSRQRRSRRRQQPPQQRSSSSRQQSTPGDFHIJKJHJLMOOOMLKJKKLLLLKJJIGFGGECGMNKIGEFEGIJINRJGGGOUVVZab_XTSR`{yzs_UU^dgso[UXSQSVWTQPQRNMLMMR~fMPRQSTWXXXVXU`zϸiZuZSMOq}ywma``aaUORTUWWYyzdRMJJJJKKKKKKJHGHILOPPONNMIGGECBBA@??@BA?><@LQE>BCBCCAAB?<89=BBBAC>NvpOILJJJJJIHES]ix}oaZbfa]c^OQMJD?<;;9889;<;:;<;<;:;:9:=@BDJKIIHIGB<:BBBCBCCDIJGEB>;;::;;:876678899:::;;;<<<9966789:;857<;;;;AFFDBB?;998::;;;:938Vdaclswz}xria_]^^__`bflox`BJHGEDBA@@BB<8=B=75458?A=9:==<?@@>?@@?>>?>>>??@@?;9;<;::999:;:;:::::94;LTOLNPSRTTOE=BDDB>;;96:::69OL8CPQQNIDA@BA?AA>@BCC@<;:::;ACEHJJIDA=;9669;<=;:856656777879;<8G`bgqplnaA5@?AB@>>::;;?>;??<:9655787775555666677776:?@@@A?<;;;:9::9777778:;>;77643GjqmpjZUe{}uoi_O?;:4:@@?::CRTPLIFA:=O@28:673554445654555665556564..3::412333/++-.-..032/-+**+++++++.56/,+,/0,+57212/0=IA3(),247>6).40,-.-185,+,--.034547:1-<?8<NR;'(.*'/:@<30+(+/00.+..++/30(-:6,3DHK~S,+*--,-/2:?;6/+**))-/0.*,0/-*/848A2%'*/471*.4>B@?@?4,<UQ:+/0,-/-+'&$*12,'2Xf`F5H^UD<6.(*.105Zj7/4,7UcX=++*))))'('(/7=>5/,--..+/;<3441,.9<40.0/&&+'(9DFH>2.0.+-28<=9436;@AAEE;8E>32259??:61/0011--0100/.)+5>FLIA>=:6754112.8D?2;IMPXTA1+(*/76438<=;863379:;<=;<DEA=:>C<*'-*&'+,,1.\"18,00+16*(F?#(/@Sy`PG9000-,***,1599894+***,,+***./.ffghikkllkkjjihgghiigggfda___^^^]]]^]^__^``a`abcfhjlklmmmnnlkmmlmllkkkhghhhghhgd^[[\\\\[[ZZ\\]]\\ZZZZ\\]]\\\\\\^^\\[[ZY[[\\]^_```````_`aacgikmnooqtvxvusoh`[YVVWWXXY]enrpqnklmnmlnqrrsvvvxxvttqnmid_\\Z[[XWWY`eltx{{x{}te`kpqpqsne^^cdebadikhhiikliiy|h\\apv|zz}tqv|}s}skjgfijknoqsutrstrqqsssrqpmjinqsvtl|lgeint|w{vrtv{}}~~x}z~~{wrrnkhhhihfcm~}p[bddfd_[[ZYYXXXWXZPboPbkmoa[keWVTUXUZklYX][jvk\\\\fkjjhhgdba_^_``XUjc_`ccddhkp[ftW`]\\mjPOORUQRZ^ZXYYXYZXWVUTR[ZSQR\\mqb_qscTKKJIJLONJFGHHIKMPU\\][YTNNPOPQSTUTQNNQQRRRSSRQQONPQQPOMLLMMNPQRSSRSSTROORMNT^omVPNONOMMLMLIIJILPPLHMT^inpturppmgcbaaaaabdda_[YYYYYYXWVUUTPOQSTTUUTSUTSSSSRSRQSSSSSRQQQQQQRSSSTSRYfZGEGHKLLKJHHJMOOOMKKKKKKLLKKJJIIIHDBJQQNLJGFGFGIKKLOLIGENYUSZbb`YTUVYlsyvaWX\\et{eYWWQNPTUQORTTRQNHQTlǭlLKNNNNNRWXYYV[yƴy[l}{^RLKZfotla`_amfTRWXWV\\lu|p^RLJIHIIIIJIIGHHGIMPPONOMHGHD@>><<=<?ABC=:?BA@>@BDDCA@A?;5;?DBAAC?Rk^NNMLKKKJIJIKTgwyg_[`gd]e]^[YH<<>=;:989<<<;;;;::;<<<<=@@;BLKJLNMLB;@>=<<==?DHIJGC?;;<<;8665456889::::9::<<:98677788438;::;<?EEA>=;::99<<;<<:963>Wc_^cehnxzwofccca``acgouxkCFFEDDCB@@B@<<AB<76668AHB:9==<=>@>?@??>??>>???@@>;:<=<<:9:::;:::::::986@KMLJMRPTVSF<CEDB<:;:7;::99FMF<COSOMKJKIC@@=<@AAA@>=;89<?AEIIHFB>:977799;;;;8675577778878;6:TahuwnZH:8>?AA@@;8:;=?>;>>=;9875778986555666677777=AA?AA?><;::9:::977889==;756565Ccnjnk[P^x}uphcXE?:79>>??9DYVSQLGA87E>19:753455545554556665568775314:;7666677555555554311/,)((,00-*.540,)*,,,5>6/1643ALB2++.46:@5)++)'(),6<7-*,-.1431/./0,,35.3II0'16/)0;==72.,,-/00/-,,+,0/(*<?,2HRH`s<*41320012;A90++**)*.,*+))+,,*1;6483-)%.86--2/4<>;6573=SJ862)+/.*('(%%-1*(*>QR:8UVJD?5'&*)'.1:@-162;P^Q2(+)%$'+,)'%'/7?=520.01//35694-+/53*(*.0,,-'&6DHJ?1-/-+.589862139?DIKJE><=<836740-+++,-,,--491-08==<TdbYC85459;5,,16FRM@=ALXWK>/.039852248=AGJGGMNHA=DF=@FF=439;4.+)*,+&-;1&))-:4,5?2#-lv2#+&(Qk?MJ2-2/-(5?.%'056630-,-/1431---..hhhikllmlkjjjiihhijjigggeca`____]]]^^^_`_`aaa`acdgklmmmopqsrqqqoonnpqsrpnkigggge^YZZZ[[XZ]]\\]ZY[Z[\\[ZYYZYXXYYYY[[\\]]]^^^^^____`beffhmooqvxxtpsuof^XVVWWWY\\_ehfcceehklkjjklkkorstwy{zvrpolgb_][\\[\\bkrwxwy}~~}iVV]`_ejjebaba\\W]ijfehjlmlejmd[]yzjjcagox{{vks~|yjigflnnopoprtsuvvz{tmmoopnkjlr}r{lpy|yylrz}~xx~wzxutrpmjjiigedkyz{xb_cdefc_\\[ZYZYXWY[R[vWdqzxnfced^WZ]YYVcpf^Z\\ind\\]inllihhebba_``_YYnsfXV]aaabdd{bMaUb_]tsVLJOQMQ[^ZYYYYWVVUTSTW_ZSTSUdqfWevdOJLKJKMMLJGGJKLLMPV[[WTOMPSPNOPSTSQNNOQRSSSQQROKKNOONNLKKKLKLNPRRSUUSRSSROPOUVTURNMLKKKKJJKKKMNNONNLHKYchquqnpqidabccdfilljg^VXYZYYXWVUUSRQQSTTUUUUUTSSSRRSRRSSSSSSRQQQQQRSSSTSQas[FJLKLNMLJIGGJNSQMKKKKKKLKKKJKIJJGGPXWRNLJHFGFGHKLKJKJGBL\\[V[bcaYUVXV[dn{bY[\\qpTV[UQMIMPPQTWUUVLFXNClNJMMKNKMUWYXReuTeiSigUMRZ_irlc``aqzaPVXUUVXapvfWLJHIJHHHHHIHIHGHMOQPPONJGHD<78999:=ADDC@@??@ABCEDCA@B@97=ABA>@B?O]QPRPNKKKJIIKJPg}}f^_fiefaY`fjI7;>=<;::<>>>=:7799;=>=?=@B:8CIKLMNLJEA?=;;:;=?DGKKGD;=><98755335678:9::9:::;9887765430069:;;<=<A><<:999;=>=?><7694Hbb[]`fjw}ujgeddcccfjpuqvJACDDCCB@@A>=ADA:6778:AGE>99<>?=?>?@???????>??>?@@>::><;:<=;877999::::8:@HLJNROTWRD<CDD@<:;;:99:97ANK@7GQOOONLHED?;<>AB@@??=:88:?GHHFC@;8777889::;:7776677777756;71K`hy~f?699===>@A<;:9<>?>>>><;:85555566666667788888>@?>@??@>:9999::99877<?<7535675>]lijg\\SZltrohhcKA=>;<>@B7C`ZVVND>2-9<38875446555566655665579:88678879;:;<<<;;;9999962025541+),352*,344/))*).8:1.18;:@GB500047431-*)'&%)4=90/2467897422-*)),/**7:02;<2*,-05870-++,.012/--++,)(4B49NQJ@B5110//,/56:;/,+,**,01,)'(()*)+/42/0461&)10+/6217;856<<DNB75/*+,,''(%'/64+),/4BA3586466)'(*'*-+*-399=DNH4-,--((+//,*(+.3541/,./-*(-440++/30(%',0685*$(6FOD314213554222236=B?>CLLHHE=574-*((*,++,.+-BE2.7AIC9I`WF<8106>>5/.3BXWIEBDP[a]UG>7...-,-038BMQLJRURRMJE@DEA:/-.1330-,,*')8<.((/<=8<D=+,AB/*,(+TlMPH2,20,.CD30+-6:96/-/245993,++.1jjklmnnmnmjjiiiiijjjihgfedcba_^^^]]]]^^^^^]^___bcejklnorsrrrpqqpppqronmkhdb_`ced_ZXXYZYXZ]]^^[Z[[[[[\\[YZYXXXYYYZ[[[[\\\\\\\\\\]^_^\\]aca_agjjlppojcehfb^ZWVVVXY\\_bcbcejllmljhijkhdegedcfjhca`___^^^`fiknnqrruyxwx|~~oaVY]__`a`acca]\\hsqlnoooomjigb\\f~}sg_bdbl~sfagonkgjhpsopponnnosvzyljkmmllmln{z}w~wnmq{}zw}morrtqqonmkigecdrwwkYadeddb^[[[ZZ[YZZOU~v]iu}|xfktijg_hqikg]ioaV[eicZ]jnmljjiebba```]\\\\[emZS[]]_bd`f_ZhP``YismdSELPLR\\]ZZYWWXVUUUVY]`XSSTRYllQMh_HLMKJJJIIKMMNOOOOSW_d^SLNSTQONNQRQOPPPQSTTSQQQMJIIJLLLLMMKKKJKLNNPRSRRRSRQRTRRRQOLKIIIJKKLMLKJIHGGGF@EOW]bbejjhhfffgfhjknmkiaVSUWWXWVVVUUUUSSTTTUUVVUUTRRQQSTTSSSSTTTRQQQQRRRSSS]fSJOPNNONLJIGEHMUSMKLMMMLKKLMLNLOTV]eaVQNLJHFFGHHJKKJJJHGN^`Y[bb^XVVVVUW\\teZ\\rw\\\\[\\SOWZ`]SSZYWXZNRXLEU|UKNNMONOTUWUU˱vKPb_KMpVJ]mijole``_iwSMWWUVVXcrqiZLHHIIHHHGGGHHGGMPNQPPONKHGB:457:<?CHGFFDBDDABCEEECBBC@89@BA?>?AAJTRRSQNMKJHGGHFLif`ageeo`__hmK9<>>>==>ADDCB>;9989>B?===><:;BHJLLLLJA=<;;::<??BIKKG@98775554434567899:9:9::99::852..*)2:<=<=:9<;:::99:<?BDDB=87;5A_fabhrw|pgdcdddfjmnpo|QCEB@ABA@@@>?CDC=877:?@CEE?99?B>=<>@??>?????>>>?ABA<4;<;<??<;;<;88;;:;<9:ELJIKMTVVH:CDCA>;;;:999989@JG<BINQPNMLKJD><=CCA>?BA>;78@HJHEB?;8877889::;97877878877766:92E[j{^76:;>?BDA>CB99==>==>>>==:8887766667789999998<@?=>>=>=;:::::::::879<;7655565:Yqnhc^WVbnroig`LC@D?:<AC;@\\\\UOC:94055/36;:86655556665566568:;9779<848966;?=:6321122447888982/1451++/484*)))/552369;;?CA;94/28.-,---,**2?>3+/9<A?:348772)'*+,**,17=;60**%*6@@4,+***,273..+)))(,9<9DC81.//,+++),5992,--,+*-42-)''(((',0/0/.483*'))+1651355657=GH90/.,+*++*('*@=511>TWUQ=/-)(;GB=.*63+*(/69;=>=;311482(),-,,**)()*)))+-,('),++**-20*)),07;;0&!)>OC6468764221012458601>PUWUMFA;51000-+**++,>M=-.7;BCABWR73:<9=B@?DD<:EB43;BDFHINPI@4-45-*28=FKOLGKQT]_UFAH>01////17972.+)(3=3)'+=EABCB400),,,*,?HJSN922((.4><31,-7=92++1455760)''*,kklmmnnnnmkjijjhjkjiihhgeeecb`_^_^^^^^^]\\[[\\\\]^_bdhlnoqqpkhhhijkhgiihfedb``]^bcb`[WXXWWYZ\\^a`]\\\\\\\\[[[ZYYYXXXXYZZZ[[[[[\\\\\\\\]^]\\]^_\\YX\\^_abba^\\ZZ[]]\\YVVVWXYZ[]_ceedgknnmlnolhfb^[XUVXY[ZYYXY^ioieffjnqqporttwvqu~jXYaa^]\\ZZ^ddbgrsqqqsstuqttroio|qcc`g|sc`iichfckoqpppononmjmrzvliiklklmmlyzwxussqt}~w|{}ommnnomllljhfd`av~vn]mheecb^[[[Z[[]]TTwx]jvw|woqunjia]hnknmcfmf[[cb_\\_konkjkiebba`a`\\[Z[`c_ZZ[[^bgg_^_Tf´nXa^eikmeTJJMSY[ZZXVVWVVVVX]`WSUTTRVhiSLSOLMMMLKLJINQQQQQPQS[fjaSLPSSSQNOPQQOQRRSUUUTRPNLKKIIKKLNNNMLLLJKLLMNOOPPQRSSSSSSSOKJIJJJKMMIILOU\\\\ejrwi]`a[RR`mllllmkhiijjjifc]QNPTWWVUVUUUUTSSTUUVWWUUUUTRQQSTTUUUUUUSQQQQRRRSSSSPHIPRPPPOLJJIHIMSSMKLLNNMLLNQSSTVY]^^YROMLJHFFGHHIJJKKLIJPYZWZcbYVVWVUTOPlhXZQRe_YTMUitPOXXVWY\\]LKQFbaMORSUWWVUWUaƌNLZYSL>^y\\I`onnnle^^_av|^MTWVXYY_gjg\\OHHIIIHGGHIJKKMTUKPQPONLIF@:78<ADGHKIHFEEFFA?BEGGDDDC>:;BB?>>@AEMSOMMLMKIGFFGGDGefbddWcnad_ekM==>???>?CFHHHHGC?<9?GF@<::;<::CGJJKLJB<;;;:;;;;>@DJNK<2254334434566689999::::9:::61+)'(4;<>>=;899:8898;>CGIHD@<885@\\gegmwrgedeeegjnqlhuILUJB?@@@????BDC@968<ABCEHHA;@B;:<=?>>>?@@????@@@@B>28>=>?@FHHHC<:<;;<;;;@INKGKRX[F9ECBB=;9999:99998CSE?ELOQPNOOMJB=?EEB>?BCB?9;BJKHE@=;;97688:;<;:88778888777769<:BRk|tS8;;=DHORKAED<>>=<<=>???>===<>>97677789999999;>=;<<;;;;:<<<<;<<;:758=9::76648Zvtoj_UT`lsqlfXIEDGE<9@D@?OND<746;@@3*14BK@5445555555666556:;97889769954;B@;60///.06;EH?325434541...4:5*'+.48::<>>???AA?=6-09.+++,---/9@9/(+7?B@:1.49:80,.-+**,/8A;0+,+')4<>4*))*+.1650.,*()*,/93.-+),,)((**),21.,,/-+*)+//+('''((&)24432781***(,25611/253/5<8+&*),//./0.+9H486>RaZI@>:0'%Chj]<-:7**(2>>>>>80-++,-*'(*))))*)&&&''(),,*)('''))*++*+,.028:4,('2A;,.48:74122334310-,2@MQUVURNA898762-,*-7HTB)',8756=EOG8>IOHCBALUL=,**&#(/0/((8NQUUD@<.',49<:AFEGIKZa]RD?4,.2457;AFF;-+*)3;2)'+=D96:=6061*,+*++'%,/+*35/--.474,,3751*,584344/(&'((ijkllllmlkljjkjijllkkjjhgffdaa____^^^^^][YZZ[\\\\\\_beiifec`][\\\\\\^`^\\\\]_`````baabbb_ZYXUVXXZ]]]^^^^]\\ZYXWWWWXXWXXYZ[[[[[[\\[\\\\]]]]]\\[ZVUUVWWXXXYYXXYZ[[\\ZVUVWWUUVXYZWUVZ^`adhjlmjgfd`ZUUZ]][[[_fki`]djmkjlmnuzyvtsux{|q`[_fgc\\VYafhmorrpprrtvxwxyyxvu{teehs|lhuug_ixjhrslollkjlquuvwzqmlkijkkkmkuy{}mpx}|}wiijjjjjjjhged_c}zxh}nabc`]\\[Z[[]]UVrutj`hhdbkha`ac\\TW\\]gnup^`_baZ`jpnkjkjfcbbaa`^\\^^ZX\\][ZY[]bgh`ZWW^a[XgmlniRFNSX[[YWWVVWXWVX_aRRXVTRZe_TSPNMNOOPPQPPTVWUURPOSbrqaQLTVRRPMMNQQQSSQRTTUTQOMMMMKKLLMNNNNNMMLKLLLMMLNPQRSSTTRRSOLJILMLMONO^pj^[YXKFJ[xvtrplkiiiihhfd`WNLRVWWVUUUUUUUUUUUUVVVUVVVUSPQRSUTUUUTSRQQQRRRRRQQJEHPRQQPNLLKKKLNQPMJKLNNONOPQUVWVVSSUUROMLJHFEEFHIHKKMOLKPUVVU``QUYWWUPKMihU\\k<FU\\XRJBMmmTOUWSSXaYIIOMK|rPOTWXYWVUWViʜZLZWTLEDP|[YmojnmkdX\\ccp{nWRWWXXZ_dnmf[QMKIIIIIJLMOOPY^RRQPPNMKE<8=DFHKKKKIHFECDGC?BEIHFFEC=;?BA@?@@AIOOJGGGHFEEEFEFBBZdeeYJZea^^ekM<<=>>><?CEHHHIKKHFA=CHGD?=;::8?FGFHJID><::;;;;;<<>BJNE5045543455555569999::::9:::72-)+18;<==;:789987:9<DGHJIC@@:76<Rgjkpwrgdcegghimsjgzc?IUVNE?>>AAA?@BB?979?DFIHGFFEA>69????>>@@@?@@AAA@?B?8:?B>7?MPPPOIB=;;<;<:;HNJEIO\\YA<FDBB?<978::989:9>KJDEINQRRSQOMF@AHIC>>ABC@==EKJFA=?><:758:<<<<;97777777777778>@BPmzbG@@;CINQSQICDDDCB@ABBAA@>>=>@@@><:87889999::9:;;:::<<;;:;=>=;;;::966:==;:8629^ywyxgST`lttj[NECDEEB=<>BDA625157=HL>0,0GL744444455556666669:::97558;<75;DD@91.-,+.38FM@/+233454430/286,'+169=ADECBB?<:750+,3/**-.-/226:6/,/5<==95116887652,**,18A9.+/0*),-0-)+,+.52/1///-,,-./3.(&()+/,%'((*-.,+,-/,)**)()*(''&')(&0::8884-(,--.243/.+/9?81.)$$'/57743697:<*/=NP@8554/+*#.ed<353/+'/AFFC?7,*(('&$')))('(()'((*+-*'(*($&,,'+000033301893/0147737=??:412466630+)1:>AFJPVQGB@=:76421*2P_N/!,3:>63<KQABY\\TPMECPK94/02/,%%*-&.GQVioXB4-(&'*+)/439:8N\\[YNA73357;??@FF6+*++01,('+8<20796374.-+),#!! %&(2EPOKKJKH3*/02/*1<:32441+)+++ihiklllkkkihjkkkllmmlkjiggedba`_]]\\[\\\\[\\\\ZXXYZZZ[_`_\\ZWVUUUUVVWYYYYZ]___``bddddc_[ZXVVXY[]ZWX\\`_\\ZXXXVVVVWWWXXXZ\\[[[[[[[[[\\\\]]\\[ZYXWWVWWVVWYXYZYXXY\\^ZTTVUVVVUTUX[]^]]_dijklmmnnmib[WW[\\[^gg]V[dnpidfnuwvwwz{{yxx{yjbadfb^^b`aiosunkmnmrvvyz{||||}}~zy{z~teeefffxsiginsrtlnlmhfgghlt~xomnljjkklnms~lew}|yrhhihijjkkiged_g|v{{|mdc_\\[[[[[]Z[swmZUV[[eiehcfsqTKVqtvq]b_b^Ycloomkkjfcca`_]XWY[`[SXZZYWXY^e`][X`sZWYfkilobMJOW\\[WVWVVWXYZ\\^\\VWYXVTX^YRQPOPPPPRVXWZ^]YUSOLLOa{|cOMZ]RONKJMOPSVRMORRRRPONOOMMMNMMNNNOONNNMMMMNNNOQQRRSVTRSSQMJKNOPPPXt̿XJMLLQPGCFd{snlmqolkjihfdc^SLNSVXXYXVTTVVVVUVVVVVVVVWWWUTRQQRTUUUTSQPPQRRRRRPKLPRRPONLIJJKKMNNLKKKMOPRTUQPRUVXZZZYYXVUROMKIHJJJKLMPQPPW\\XUP[]RVZXXQKLLbeTdxQ@DM[YNH@;FRRRSTVRXZPLLNQKtxTMPRRSTUUXThԠ`LUXVUJEX^pnimqk^TZ_ao{vcUUXXWX[duusk_TLIIIIJLOOOOOSc]WQONMML@9?FKKKLKKJIGDC@@CCABEGFHGEB==BCBBBA@CIMKHFDECCCCCDEECBP|xdaZLEVa_]^beM;=>=>==>CFEFGGFHIIIC@@FKKD=89;?ADDFHJF?<;<;;<<;<<===AJB5456545655555689899::;;:::75426;:;;;;;88::988<=BGIJIHBAB>984@autotzlecdefikoqkx}T=CHPSQI@>AA@?>@@=:89?CFIIHEIHB<5;BAA@@?@@?@@@AAA@?B@<=?A:2:EJQSTQLF@;<;=:>GCAIJN[S?CICABB?:99:::999:9>JFFFMRRTUSPNJBAILGA>?>@@?>BGGC?=?@>;669;<<<<<97887777788777<BCPpoLCGC?HFGGEEC@DEEGIJJHGEEDC?<<==?@?=<:::::;;:9978999:<>=;;<<;;:888::978=><;:73=czw{w[S_lwvcJFCCBCDCB@>>DC31:46:<ELF9,2D>-4332345556788779<<>A>6215<=749CE>5/-//0333BF6-.343345795/.020*+/35:CID>;<=92/-,,+-.))24137545217:;;<:973111249:4+(),3<?7-,0/*))'(().0-.84)-0013432021.,---).1)(''*,.../.-,))*))()*((((*+)/;A;78.'*,--/11,*+(*8GB2*)'*18:8:8;@A4(&,.00//5453,&**\u001d>rX,3885,'*=KLD91+)'''(''(+*(&')))**+.23-(*+(%17//78::::951470,/489735>DB:20102442/*,9>739>CJC:?C>;9740-)8PJ537AFDIFFIW^RTieXQPNLI9/5/1?C?40.+,<UU\\ljS6.-+*)((()*(*5COWZXSKB<9878;9764,))())'&((),05BI>23653.*+):G6(%-=EAKo}z|veA(+0.+,9@71135410..0iiikkkkjihhijkmmlmmllkjigfedbaa^[[[[ZYXZ][WWXYZZZZYWVVSSTUVUUVVWWXZ[]````_`dfgfca^\\ZXVWYZ[YWVX\\\\YWXXWVVVVWWWXXXZZYXYZZZZYZZ[\\\\[ZZYYXXWXYYXXXXZYXWWWY]]YVUVWWWVUZdgeefikmonllnonopnmh^XXZZ\\b^UT`klaZ_jqppwyz||}||}}}r`X]dgjnmfekqpfagkmlnsxwwy{{zz{|vsmnrm_`ba`dnoicjrmmbx}lfhjedeeehgtzolljhijjjkvyowsmrz}{{qqroutrgniihijklkjheb^knzw|tf^\\[[Z[\\ZZlsaYXVT]gqmkqkkhrWNlocpn``be_Xfpppnlkjfdca`^WS]cY\\pl_]]\\YYZ[]^][[MooRWbeeghnjXLLU\\ZXWWWWWXYYZYVY\\[XVVVWWTQQQRQRSW\\^^]^[VSRPNNNYuyaRQVUPNNLLMNPVWOKMPPOONNOOOMNNONNONNOONNNNMMMNNNORSTSSTTSSUQMMNPRTQO]γpKFLLLMPUKIFFhvkiiknoljhhecc`SOOQSUVYXWVVWWWWVVVUVWWVVWWVUUTSRRSTUVVUSRRRSRSSSRRUSRQPNLJHIIJKNONJIJLNOOTZ[TPRSV[`b_]\\[\\\\[WTRPOPOOPOOOOMOWYTPU[[XXYXWOJMKVdXgfHAGMXWMHDBDHKLORSUZUONMNPK`tTKLMMOSTUXQlԳ`GSVYYTLJZja߹mboshZRURT_mtn_XWYYZ\\crusncTLKJIIJLOOMMLLWXWSPONMKCCJOONMLKJHGEDBA@AABBBABFDDB?@FGFDDCBDIHFGFDCCBAAACDDCBIdndZOGGZh_^^__M;=>=>>=>EHEDFGFGGGIJHCBGLLH@>BDCBBDFIFA==<<<<<;<>=;88AHD736545655555688899:;;;;:9744588778:;:66;;:::>BFGGGD@=@A;8863Rv{oppheefhknqmvjCECEHJMROIB@@AA@@?>;<=@DEGGFFC@=7?ECB??????@@@AA@??BA<;<:749<?GQQOLLIA><><?@;?KJLWN@GJC@BD@9:::::98:;9=GIDENSTWXSMLF?@GLJF@=<>??=?AA?=;?@@<878;<<:=?948:77778:9775:D@Op\\?ADECE?<==:;=?@ADFIIIIJJKJFA@>>?@><<<;::979::986669<>>===<:::876677779<>>>>;6=ezv|gPZlyy`BEECABBBAED;@F:597;=;@HIC87?;202345555567776:>AAAB<7303=@927BC91./12354285),14654534672/143/-.019FH>66::5/.///-.2(&/888:63524<@><;<9530/.,-5:4,(),3=>3),232111//130*(4:/.0121.--242,050,+*//(('').241/.-.2,)*,---//--/.0<D:38-*,++-/0/)'*&&.::1-+)+2868;C@:1*'&)..-1==763-()-\"(LG&,462,((4IF9.*)('()*((*,*(&()*-./--.792-..+,25785679<92/36/++.055-*2>=50/001321/,19:5-.4:?>:@B?>><8/*.9;-*=W[KP_XVYcfadjeXONNG647;2#;PG>:2).@M\\gieR;410580*'),)(->FISVQJB:76558962'(*)(*+*%&(()'&7I;-35?A8//)NP4IML9)SxE',/,'1=943/05521246iiijjhffddfhijlllmmllljhgfedbaa^ZYZZZYZYXXWXYZZZYWVUTTSTTTUTSUVUUVXZ\\]^_^]_begfb`_]][XVWYYXXWVVWWWWWUTUVUVVVVVVXXVVVXXXXYYZZZ[ZZ[ZYYYXXYZZXXXYYYXXWY[[\\[XWWWXWW\\`[Y\\`ddcfhlnmnoonmnnlga[YXY[[]cfa[X\\cgkqy{|}}~~ve[`gkswunmlcZW]holfikjlqvuvumsqsumd^jidbccbab`dfghg_gz{mcedcbbccdcezxxoljigijiginv}ywpnmq~}|~~{}zzh]pnhhhijllmkjdbcn{lnzl\\\\\\ZY[\\Z\\ipeZ[]WV^empjhjikeSa^Rcfesndnu^Uksqpolkjfedab]\\qmUa`a_ZYYXZZ[ZTWgQUY[^^^`a]QKT\\ZXXWXXXXYYZYY[\\ZWVWWUUVPQRSSTU[acca]XURRRQPQUgm`VPNOONNNMNOQUUPLNPPOONOOOPOOOOPPPPOOOONNMMMMNNNOPPRRQSSRSSOORRRTSRPSgνyPNSONMNOOQOFEPmmhc]_fjjihecc`VRQPPRUWWXXWXYYXWVVUVXWWWWWVVVWUTRRSUWXXVUSRSRSTTTUVTSQPMKIHHIIKNOLLLKMONMS\\a[RSVZ]a_ZWVUVXZYVSRSRPOOMMMMIFJNOKV^XY[YVRMLLIKmb[hWBCJOPPNJFFHIHHKPP[TOOPNMOKN}sTKNNMPTTVXQsһoEMRUZ\\SMPY\\Xڜ`rvdXQNKNW`nxo]WZ[]]apvtpi[PMLKHIKMLKKJIQRVURQOLJKOQTTQKHGGFFDCBAACBBA@???@CC?AGIHHEDCDFFDEEDCCAABACBBBCI[kgTJJKWma\\\\^YH=<=;=>>=CHJGDFHHHGGIJMKHILMLIHFDBBCEHHE@?<<<<<;<>>9667=GD74544555455578899:;;;;;:744777447:;848=<;:;@BEFBA=8:?;87983>_rosrjfefimmhpuI@FCCCACGOUMHDCBBB@AABAABC@><;;;:9BEB@?????@A@ABA@??BA=98656998<EJNMLKJEA@=78?BGHJRLDHLEADC?;:9;;:88:;:<>HCGOUX[[QHC@?@EJHFC><=AB@@@?><;=?A<999<>><?C<:8988889;9797<G?KiV?@BE>?><@DDEEEGHGCAEKLNOQQNLLKJHFDB>;;<==:768:87778======;::9997544568:=???>7=izt~rPVkzyZ<DCCABBBBDE?=<:796==;=AED;7<9535677655557776;FHHE@;9503=B=47CB6.-133475252013578664449;9877543.+5DB859<:500133112.-4:<=<72567>@><<:7320--,,.//-**-4=>4,/35544426:3-)&-=:0.+)*)))/70&,82*+,*//,(',59951--04..000//230/210;D7/81/-,+,,/.(&)(')/10.-+,378:<FF:(&,/+.48>@:875,()+)&,2'(/41-)(/83*)'(((*,/,+0.*('(),122/*',57101/+-386-*2:=8.,470+)'(*,((+/0000114421/,/475017@DA>=>BCDEB87;7.**4PQ8Md_[\\ee`ekdRNOO>3;84:38GB?49?<ADLPJ]l\\C:6:B6+)+.)0?FC@IUOC<645427=60***((,00,*+)''',8;446>JF:5)DSG\\ZN5 &g\\5+-/-088464/.45227;9edcbcca^]`cfhjklnljihggfffdbaaa^ZXXXXY\\ZUUWXYYWWWWXVTSRRTTSSSSTTTVWXZYZ\\[\\^`cgfca___\\ZXVVVVVVVUUVVVUUTUUUUTTTUUUUUTTVWVWYYYZZZZ[[ZZZYXYZZZYYXYXYXXXYYZ\\\\ZYYXXXWXURU[^]\\Z[bjmnoppoomnqrpke_ZXZ]\\[ZXWY_fqzxz~~}~pebdijklkg^VTXcnoha`einorsutiirwqhahy^`cdbadheebec^^agdnobecbcccccchpyytnnljhgijighin}volhl|z{|{{}s}}x~wbf[Ygqlihhjlmnnljgiusjqpu}n[\\\\[ZZ[\\^^[WY[[UXlxokpfchgd[LWsr^drnsui~Zbvsrqomljfedbb`puVVtacc]VTPNQRSUJphPTTWXWWV\\]TMSZYYXXYXWXXY\\]\\[YXVUWXWUVSVc\\OSX^ded`ZUSRRRRQSU`d`UNMLLMMNNNPQSTQOQRPOPQQPPPPPPPRSRRRPONNNMMNNOONNNNPPQRRQPPOQSTSSPRRNPϰ{NLPQQOOOONQPHHQ^njdVRZagkidcba_TPOPSTUWXXYZYYYXWUUVWXWWWVVUVWWTRRRUXYYYXTTTSTTTUVUTRQPMJHHHIJLNMMMNMLLMLQ\\c^TUZ^_]YUSSRRSSPMLNPPNLJHIKKLKJLMO]ZSX[YUOKLKHEPcaaI?CIMLMKGEHJIHHJMPZONPPNNNKOfuTKNPRVWWWVWǖ]KOOSY]TPTXLlЛauuaXPLJMT^i}zaWZ\\]]bourolcUOLKJJJKJJJIIRRVYUTQPNOQRSQKGDDEFFDBAAACB@@ABA>?AA=@EEGGEDCDDEFEEDC@BBBBA@ACEJZmcMJPIHac\\ZZTD=;;;<>><>BHKIFEEGHEGHKPQMKKKKJGEDDEFHIJF@>;=>===>=85542;EC8456544433567879;:;<;986435654359;95:;<:;<@?CD?=;8:;;:98954?Uft~skgfhlojnxI<?FAABB?<FMPKHFFEDCDDDDCBA>:55698:CEB@?>???@A@AAA??@AB=876667766:FMMMNMMLIC<<DGHFFIIHMNEAD?<:::;;:89::;9:FCGOVY\\[MA????CIGHHB<=DFFC@>=<:<=<;::;>ACCDGE?99;;99::9:<?CGCL`N@>@@>GLKMRVVUUWXWOFGNQQRTUSRTTTTROMHA=:;?CA957779:77;;<=<<<;;;:97567668;=>>@:7]xs]ShwqY>:BCBCDCCCCC>;;7:8<;:78;:7598798898654667766?KLIE;99624>C@78A?3.034346554224459<;9877;>>:876550,3=<56:;84101343249BFB?==73678;>=;9741011-,,,+-.-+-5==5244332220490(('&3;3-)$$'(*/7/'.85/23/-01.+2;:97/'*/41763.,,021156/7A6,33/--,,**.,*++(*-.-,+*-2899>?@:1&.4/.7?@<9874,()**(&''(.1/,)(.,(&&'''(),36340*'')),2341*$$*2466-')-00+(0794,-44.*'$&(%&'')+-../032/.-+,0567:@FE?;;>HHGFG;=D8)(*'=?*FTO]]W__fkVKLTOOJ<.-=GF69?1?aU=<6.*HvkH>79>7.362,4JMA=GSM96423227>=/,-+)(,.2::2+(*32/6814;AA?7*=J[ofH2$\u001cJj.(---.274464.,/4338;:[[YYZYZYY]adgijlmha_\\Z_cedb____]ZYWWWVWYYWVVWWUSTWXVTSRQSUTTTSSTUWVVWWXZ[\\^^bffeb`_^\\ZYWUUUUUUUTTSTUUUTUUTTTTTSRSTTSUVVVWXXXXXYZZYYYXXXYZYXYXXXXXXXXXYZ[\\\\[ZYYXWWWWYYWVVX]dhlopqoppppqstrmf]WVWWXXWX]jspq{}}{}xlb^]]^^ZWVUV[hqria`fqwur{powxy|h]adaaabekgedb`_^[]wvedddgffffkrplmpmonljhijihijlwrokfo|yy{}||{ugbdfjozkpwykggee^`nnhgimoopqrqqxzsww{c\\\\[ZZZ[]\\[Z[\\\\YWqzz}ljgdfc[XWSYkokswtqjznsqomkjgecbbb{|t[Js{a[]\\WZjne_ZZTtdPX[YXXXX[ZWSTXYXXXXWWWWWZZYWVVTSVYXUUXi[Q]efc_XTSQQQQPSTV\\acRKNMLLKLMNPQRSRQQPQPPQQPPPPPOQSSRQQONNNNNNNNOOPONOPOPQQPNOOQSSSSQPQORϥwWLROPPOOOOOPOMQVTgli\\TUW\\egdcbbdXPQTVWVWXXYYZZYYWUTUVWWWWWVWWWVUTTUUWXXXXUUTSSSSTTSRRRQOLIHIJKLNMLNRRPNOMNU[ZRU`cb^YUVWTOMMHCCEHJIIIIJJKNNLLIZhTRY[YUPNKJJIETohN>BDHKKKHDFIIIKIJKQRMOPPPQRPSV\\nzTKOSVWYYXR_ȡlTQMIOWZZVUUPѝazraTOLKKJSduwhYY[][joqnmjcXPNLJJJJJIIIKQRX\\]\\WUQPPQMD>AEEEFEDCAAABA@BCCCAA@=<?ABDDDCCDEFFFECBCDBBBAACEGJYjRJKSF@Na_XZXL?;;=;==<<=?DIKIFDDGHHHIORKKJGIGFFEFFGILKC?<=>===><9545438@A<76544444566779;::<:9863223234689;<::9:=AFGJF<;;9;;<;:::897<Ngu~vlhhlrptxG>A?C@BBB?>??FLLKJJHFFDDBA@>=<86677:BEB@?????@@@@A@?>@AA>9766677639>CKRSQQRROLGFG?<IHIMQMC?@;98999999:::9:>BBGQWY]YG=>>?@DJJHIE@>DFEDB><::<<:;:;<>DGGGIID?==;99:99=@BFEDMVB?>?FQ[^\\ZXYZ[[[\\\\WOLORRQSUUSRRTTTRRQKE?<<AIKE@;89==:==<<<<====<::::9879:;;=@<2NuvjQerj\\F6>AAABBDEDCBB=<;9;;:98766468665688755668768FRNG?:99865=EE<7>;2/34455667745778=FD=98889<>;96554357778972/--/1333:FNOK@<;735557797620--05630,+)),,.5=;445420-,,-/1.)%%%*4631.)&'+29638=;9999411005;644-+/16574/))-/00027/,31+-1-+/32004311-()((+//+,07653//55)-74.7A@<:762,)***-10/.11.+()00.)'''())*5?>:0)''((,4:8530,*,27:4+((*+,,...+,15+**(%()'(('&')(*,/0/,,,,-047:>@>:8<>AFC>DC/.A<)'+-9<2;=D[_NJYdU?@GKQR@/))08?)*EE@fe@95('<jmD;66676??745<?@?EL>,1422338;4.35,***'0DG6.,171&(-+/78:?6-;{YCquU2-+!-L1,))*)*+1663/,)*/585/TTTTSTVXZ\\]^ababc_ZWTRW^bca^\\[\\\\\\ZWWWTSVYYVTUUSRSUUUUSRUUVWVTSTSUVVVUUVXZ\\\\]adfea^\\[YYXVVWVUUUUTTTTTUVUTTTTTTRRRRSRSUTTUVVVVVWXYYWWXXXVVWVWXWXXXXWXWWXY[]]]\\\\ZXXXWUUUSTXXZ^chnnllnqpopppqrpme]ZYYWVVZ][^m{|yy|te``_[TQTWVVanrpjbcq~}x|vu|{z{__dace^`nofee`emqmt{jdejkiijmptsjippoqokijkijjjknsnnmkr|{}xvvx}|ou~{{{{~zptoyxqjd`bkyrmkjiliggb^fqpiinqtwurqomq}~|tc[\\[[[[]]\\[]_][Yjzolecd_[Zdnnljqvwxrlrrrrpnligedd_Wkzwuh]a[aa\\YYZZb|xtruly_TY\\ZXY[\\\\[[XTUXXXXXWVVUUUUUTSSQQTVVTQXutN\\iic[TOPOPPRSUVXZbXHKNLKJIKMNOOPQPOPQQQRSRQPPOOOQQQQONNNNNNNNMNOOQQPONMNOOOOOPRSRSSQPOQLÄPKRSPQPOPPPOPOPTRNXjhaWVUTZbeccdh^RRXZYWXXYZZ[[ZZWUTTUWWXWWWXXXVWVWWVWXWWWWWUTSSSSRQPRSSQNJIKLMMNMJLSWXVRNKMRQPZefa\\YWWVOGJPLFDEFFHJKKKKLMNKJNfbORZ[XTTTNLLMHHp~`FDFEGIHGD@FKGJKJIGSONOPPRTUUVXTUULQUVWYYXTypWTPMGFLS^\\YRWӣunbPNLKIDFRexl[Y[clpnmkjhd\\SOLJJJJJIIIP_[]^_`]YVSOPKA<AEFFFEDCAAAAAACCCCCB@>>=?@@@CBCFGHHFDEFEDCCBBCFIKLVbMLJE=8I_`YYXM?;<??<<<>===>ELMHCFKKKIHPLIIGHIFECCCEEHJC=<>=<<<=<:7567333;A;544445655668:;;;::88530///24668>B<8;?AFKNKC;::9;<<<;<<=>=8;SnzzmijqusE4???@?BBA?BB<@EIJKLKKIGFDCA?@@=;;978@DBA?????@@@@@@?>@@@?:777677558::?FPSSSSSSQL@0;OIJPSN@;;88888999:::98:<?AGPWZ\\TB<???@ELOJIHB>CGDDGA;9:::;<===@EIIHGHJGC?=;9999=CDDFFEFB@@GQYZZUUTSRTVVUPPPOOPQQRSSSRQQQQPRSRONMHDFMRPIA<AIKFC@<<<<====<<=<:9:;;;:;=96StzeUfnfZLC=>@AAADEDDCBAA=:89:;;75545664368986667975@RVP?8899:76;EG;399214557758;979;;>BJMD968:<BFC:766641../472,)*+-.102@LLIIA;:8443233431.-,--17860)&'').5;9213310/+)*+***&'-6?=;9:4,*/6<<?AA?=;;9751/3;91/20222995.+)+./0/+*/.()+++,,-478776543-('%&*/0,,-.+)'&&'(&&*+.9@@;4/10,*)**-488641,*'+6<4)&'&(*((0BB:+)((((,7>><:87489446.'&()*,+,*(-1+&'*)')***)(&%%&)-/-..-.//25689854:=<841/.-%%9E4&,62=@<P][b\\=5;949=@GA0-++)(?LCgkBEL9/.,09KY>5437:8;=<9879?CCA7,-3104999;=;9:=?BC?CA/'*-/.,)%%,7@DB5/:]<Ke5(-/&!XY2A7'()))).4433.('-34,&SRRRRTVWZZYZ[ZYWXYWVUTUY]__\\YYYYZZXVVVUUTUUTTSQQQSUUUTUY[ZZZXWVTSSTUUTUVXXZ^abeeb^[ZYWVVVVUUUUUUUUTTUVUTTSSTSRRQPRRRSSRTUUUUUUVWWWVWXXWVVVWWWWXXWWWXWXZ[[\\\\\\\\ZYYXVUTTTVYXWZ_bfgfmqporsonooprsmddcb_ZVQQ]puqnqyymihd\\UQQRSZhpnjedmv}}xr{xoqyg^eb`ppbksifmwrhlommmmptwtswsovvkgjkiijjkonnx{nnjhtrsxuuwxxtolryywvvx}rsux~~vw|idakymhfhjigfeggkqsomt}ogfgit|u^]\\]]]]]\\\\][XZe|{|qdae`Y]ktrooqtrrme^j|{ptpnmjgfdc_cquo`Z_da_[[]\\[[`hoqrss]jX[Z[ZXXZ\\\\\\]ZUVWYYYXXXWVUUSSTTTSRVVSURScsT]omaWRPQPPWYYYVTWXNLNKLLLLNNNNNNONNOPQSSSSQQQPOOOPPPPONNNNMMMMNOPQRRPNMMNOPQQQQQQRSRQOSAcYJQQOQQQPQQQPQPPPPPO_k`TTUSSZceddff[SUXWWWWWX[[[[[YWTTUWWXXYYYYXXYXWYXVTTTUUWVTSSSSSSQRTTTQNKMNONMKKKQUVYVRMLNLR_dbZWWTQMIJTZSLJIHHILLKKKLNRPN]q\\LR[[XSPTRONOLPfydKHFFGHHEDEJLLNIEDGOMNQSRTVVUUWXP{XJRVWXZZW\\RUUPNJHEN\\_ZMcٺg^OMLIGFDEVpYV[gqpjjjjic[SMKJJJJIIHIa|tf\\X[^]\\YTRNKEEFGGHEDBAAAAABBCBBCCB@?>??>>?ACGHHHFEFFECCCDDGIKLMNPQL?8::F]b[[WK?;>@E@:;=<;;:;?GKLIHHIJIKKIIHEED?<=<>>AF@=<>=<=<;;975665545:=744434454568:;<;::987521/.0357;AA:7;EFIEF@>;;;;<;<?ADFA@@A<Bf{}pkmurt6:==>>@BBA@DC?=AFHIJKLLLLLKJIHHFCE@75>CBA@???@@??@@@?=?AA@;7776777789998<CSWXXVVUA7KMEMNQP?8879967:<;:::98:;=?EPY\\VH==??@AGMNKJJC>BHDDKI@;;:;<=??@BFJIGECDEB?=;:999>EFEDA@CEBAEHGDECDFFEGJGIHJPRQOQSSTSRRQQQQPPPQQRUVRIFKRTPFBKPKJGD@@>====<<=<;9:;;;:;:7:WvyZ\\giaXOMLA?BBCDDDDCBAA=::99:86754357779:777767873>RVL8/4788437><20695/-/5:769;>><<?ADKPJ:48<CHG@865794,(()*,-*'*--,--4AGB=<:97323544310//0//.,-020-+*''-5;940134771*(,+(((,<CJF<8<<4.2:@BBB@><876453-.891.//0.0;<6,))+,,--,,/42-))*))/8<<;82156-')+-./..-,++,+))))++**-7<61-+,-,*))((,05532,'(1;:/'+-((+()/=C4'*0*%(-:A=950/8@=4-*)%&))))+-(*/+&'(*,-+,.,**)''')+*++****,/4323334751+'''&'(.1>E;7;38G^xbFMWO>103445;9-)*.3-EmD3+&,.+38<I<.+/9>;648@C@>?AGG7053/05:86;@FKKLNTXK6583,,4<FE9/19CJA4.7D2_J'.3.)%/0):='(5CE;1/2440/2552,*TSRSUUUVYYWWXXWUVWWVWVVVXZZZYWWWWXYVUVWVSSTTTQPQSVWVWY[[]]\\[]]ZXURRRTSSUUV\\abdfgea\\YWUUVUTUUUUUUUUTTTTTSSSSRRRQPPQRRRRTTUUUUUUUVVVVVVVVVVWWWWWWWWXXXXYZZZ[[\\\\\\[ZYXWUTVWWWWVY[[altspqrnklmmnqssrqrqpld^_iomkkq|yrokdZTRQRZhkklktz||}}pvyf[am|r_dgbl~xpqjbjrkmpqppty{~vnv}pdhkijjkknuyvyypopnr~xzwttsqnlr}}vvuvzrnqrtxqtvac|ohfejomiginoorqjnyvjdcft||g^]^^\\[\\\\^\\U_qyze^d_Zclqsqqrrqoib_ai}luqllkhdgdhzXXSV[cb]^^^\\^`hokgaOcT]\\[ZXXXYYZ[XWWWXYYXYYYXUUUTUWWWXZ[WWVTT`WcvscTQPRUZ_[YVVTRKMQNLLLMLMMNMNNNNOOPRSRTTTSRQONOPPPPOPQOONNNMMOPPRSSRPNOPQQQPOOQSSSRRPEsqLSUPOQQQRSRRQQQNOQROUkbRRTTSS[ghddf`VUVVVUUWXZ[ZZZYYWUUVXYZ[[[[YXXWVWXVTSSTUWWVTTSQRSSVVSQPOMMNPOMKKKNOMSZUNMMOU\\^[WUSOLJLU[YQKIIJJKLLLMMNPSVUbm[PS[[VROQRSQPPT^mkKGHGFFGFDGJEJROSbXPMPSVVVWVUUVYQj[GQVWXZYT|YQTQPNLKHIZ_VWɰr_ROMLIGGHAOv~]QZf`injijhbZSNKJJJJIIET~n_VW^`_]WSQPLIGGHIEDB@@@@@AAB@ACCB@??>>???AEFHHHFDCDDDCDDFIJLLMONLB<9;8BZd\\\\VJ?;=?GF>;;;<<;:89BGLMHEGIHJIKKIA<999:;;?ECA>==<<;;:866555664587444333444468:;;;88:8645421247?DA78;>@C<:;<<::;<;=CIKJD@?EE:Zwrmovorf=;;==?@ABAB@>=<?GIHIJLOPRRPONNOMKJB77=CCBA???@@????@?=@BBA;877677778877644>L^`[Y_TFF:?NNYR?9878867<=;9:;:9:;=?FR[XI=<==>ACJNKIIID?CGCELKD><;<=>?ABEFGFECA@AA?=<:98:AFGEA@DGEA@?;9;;<<;;;::9>EEKRQPPRSTTRRQQQQPPPPPPQSTOIIOTSLA@HLJLLLJD>=>=<;;:99:;;;::84=]xm_bfd^XQOTPEBFFDCDCB@?>;77<>;22=<6467::877777777526HSH60365542492+047:3,-5:68;<@C?>AEIJNK=348>A=9656651-,,**((('+.---09><:7666622377652027:721.*)+*+.-)(/7;:50.39>=5+(-4.(08@BBC=98:6/5@FDDB?<8421010++25/,++-.1983.+**+,./358?=0*((((/8>=7/-296-+/23210132369;;;8546850430.-+***)('&&(+.001,%(7=2)(.0*(+*)*2:0(+2.%',;F:+'%(05343(%&()(''),)*+((*)).0*),++++*((('(*)''((+.1/0352---///12345:,6SSD8:FYk`HDIO[S@30//,16/'(/@F7PW>3&&:;*/4<C6+.19===76:DIJIOWTE=91020279;BOUQNOTRF<EQNEBCENWTF826<81/039ld0+30+)(''.8</+EbgN4.14/-2::6434TSSTTUUUVWVUVWWXXXXWWWVVVUVXYVUUUVWVUTUVUTUWVSSVY[ZZ[]_^ZYZY^a^]ZVSQQQRSUX]aacfhf`ZXUTTTTUUUUUUUUUUTTSRSSRRQQQQQPPQRRRUUTUUUUUUTSTTTUTTUVVWWWWWWXXXXYYYZ[[[\\\\\\[\\[YWUVVVVWWVWVV_llegieabdeglpoprtvwyyvssspmmou}~|~}{wnga[VSX_kvwy}{wttv||h]cafp{o_bkibrx{o]xxmjoqquyzvwxlp{vhfjihijkinwnkhdl~~}|urrplm|ssw{|wsttxvuuwx`u}oigglqpmllljigfiiihfcdozg]^]]\\[[]YZbuq\\cZ^jmqtsstsqrohlq|osulkjhcheowr~uw{b[]\\^^^]^_adbaaU`S\\ZYYZZZZZZZZYYXXYYZ[[XVUTVVVXYZ[]`^WUXW`]k|udWSQU]c^WVVUTQKNOMPQQPPPONOOOOPPQRQQRTTTSRQPPPPNPOPQQQQPOONMNNPQRTVTPOPQQQPPQRSSSSUQQtpSRSSRQQRQRRRQQQPPPQQSQakVRVTTSR[ijgge\\UUUTTUUVWWXXXZ\\[WTUY\\\\[\\\\\\[XVTTUUVVVVVVVXXXUQPPUW[ZVTTRPPPQOLJKLMMLPURNNLPVWXWVROMKNSYXTOKKKLLLLLNOPQRSXVecUSTXZWSSRRSRQSUTaoOPRMLKKJHGICGMRbn\\QLPVWWWWVWUTUQZcHRWWXZWR\\JRRQPNLLKHT\\VɉbdRNKJHGGHAD^mRZbLVecehge]TOKIIJJIGFeyldYU\\_^[VQNLJIHGFDDCBAAA@??@@ABCEDAAA@@AABCEFGEDDBACDDDDFHJJLMLSJ=<::;:@Q\\[\\XJ?;;=CFC;9;<<::<8:9>LRNGDDGIKNVI9779;<<?EFC?<===<;:9766556666454444444554468;;7<;:98778879:;;:>9:;;:979<<<:::;<BIKJHEAAEF:AgvnospxF5=<=>?@@A@>:<@CBDFFGIKOQSRQPOPPPNKB88>CCCA??>>??????>>@BB@:7766777777777776;VedabcY?3?JGYU?9875568::9:<=<9;;>>ESYL=;>==>BEKKGHKJF@CFEGLKE?;:;<>@ACFGGCA@AA@@?=<:989CHD?EJFA?>>=;;==>@?<:878;DFDKOQPPRRRRQPPPPPPPOOONONMNKHOSNA9BMMHKRRL=:>=<;99:;;<<;<<73Aez|gigc_^VNQT^WF?CDBCCA?><81/;EE87C@755685005766776533<KE76565554353/246=<115759=<>BBACFJKLI=324675467750--,,---*('-0-.17>>9:<;9776229;86312:A>821-))*-.-))2:;82-+2:@@7+'-44/580-.48><63/6?@=;9960.-./00*,11.**).223-/-+*+-..168<D?/)+()*/9>;0*,130-0102444679;:7540//.03423/-/0.+++**)*))*+-/2/')7;2///1,+-,)&%)((+00)%*;H4&')*+/121+&'*)(''*-**(',.*&+.,**)+,,,,,,**+*)+/3321379:2'&0898:<=A?8/BXQKGMIGF>DPSWZPD??>7247/',,5QB0fyHC8$.C;)-158.1639:0:CA7;L[_fkg`G0274.1?GEITQLIILNMV^ULU]QB?GRTC/*.4//*,?d?#.0,+(()'*.79.Bo}R//11+*0442122SRSTSTUTUVVWWVXXYZYYYXXXWVVWWUUUUUTTTQQUWVVZ[[[[[[[]]\\^]XUSTY_``_\\XURQQSUXZ\\]^ac`YUVTRRRTUUUUUUUTTTTTSRQPPPQQPQRQQRRRTVVUTUUUUTSRRRSUTTUUVVWWWWWXXXXYYZZZ[[[\\\\[[[ZXWWUUWWVWXWX\\_[WYYWZ^]]_ekllmmnqttwyxvspnpuvwy~xlnuwy}wpga_[Ydx|xvtrpxv~yd_fdaaaa`chjghuw}n^wvjgknprrpmlquqkjqtmghiiikkjisxuppswz|~|xpqpmxzprw}{wyyxzxy}yn~}xsqqrxsooroigilu|~}xqn}yd\\]\\\\\\[\\\\VhkYYcimsvwwuqollnvzwopwpljgfdbpzkXh{f^_^\\\\]\\\\\\^_^_cRaƄT\\\\[[[[\\]]]]]\\[ZYZYUUWWVVUWXWWY[Z]daXVX\\_h{scXSU\\c_YVTTQOQTWVXXUSRQQPPPPQQQPRSQQRQPPPPOQRRRPOPQQQQQPPONMNNPQQTXVQOPQQQQQRTTTTSTQPTPSSRRRQRRQQPPSWVSRRPQSQUm]RVUTURR]jjge_VUUUUUUVVVVVVY[ZXVVY[[ZYWVVUTSRSTU[ZXWVUTSSQPPOTYVWZ\\[YWUTTOLJKLMLMMLLLKJMTVWWSOMMMSYZVSNMNNLLLMNOPRSSTVWh\\NOSWYYURSSRSTUUO]|hQTUSTSRPNLKJLOSRNKMKOWWVWWXWUUUTQijIQXWXYUV_NMOPQPNMLMLJPZ\\k[[MLJIHGHHG;J|V[Q7:V\\ZehjaWOJJJHHHGQknf`YXUY__][WTRPOLJGCACBAAAA???>@BGGGEBCCBBAACEEFDCBBBABDDDEGHJJNPMI@<<;:;:?@IZ`ZI>;;;=@C;7:<=:8:<975>KRPIEFIMPWXH;9;;:;>ADDA<<==;::86666566665544444456544458:1;:::9899;=AFGA;:;:9;><<;<;;::8;AGHIHFDCD@?>*O|oqrr~@;?>??>???><;=ACCABFGGHILOPPQQRPPNNI=8>CCBB@?>>?>>>??>>@BB@:76667767987689:87D\\fbacbQDJF:ISA9864567779;<<;:<=>;BRTC;>===>AEIGDEKNJCCGHJJJGA?<:<>@ACHIF?<?A??>>=;;99;CHA<EI?9<==<<=>>>AC?::=BELSPOSTTQOPPPOPPPPOPPNNNNOONOLHHQTG:<HOIKOVUA8=;==;;:;;;;;==83@i}efqmb^cYKT[XN8/<DCACBA>84*'5AA;<@<8544664356666785335<=66665555564233489653.04647?DCCGJLKC8434101222311232230/2,'-21-08@A????>:75318=:830.2<?712/+//.-,()4<940+)2:>B:*&+1332/(()*3BH=.175375431/.**/64-+...-*)/611++**+042///4>C:/-/,.05>>70-//.+*-0/8:46414<<3.,**,//+,23/,,++**+,.00-,+)*275--6721243544441+($%+/2,'*7A.252.,,,*))('))(''*.*+&'/0+$&*--,)*,...//-++.369<;86=@@?5))18:8:;<?=5>OTFFUSD>COXTV^^UNKMO@467.)(*/GJ9QWDK;&6D5,./..-472:7)-:FEEP\\]abZK9-,--+.>IJQSE@FHHLKEFD=NaQC;.8JG1&*.**((6J2\"'*,-*'((&%5E=;sD%,--..-,,--,,TSTUUTTVXXXYXYZZZZ[ZYZZYXWUUUUUUUUTSSTSUXXX[]^^\\YY\\]\\YWVVTPPSY]``_^\\XVTUUTVWWWWWUSRSSRRSTUUUUUUUTTTTTTSQPPPPPPQSSSVVUWWVUTTUTTSQQRSSSTTTUVVVWWXWWXXXXYYZZZ[[[\\[[[ZZYXVUUVVWXXYYWUTSSUYZYZ[]bddcbcfhfinnllnlknmhimj]\\fomgq}rgb`\\Zenrsqmmzxw}uc]aca^[]dffhiimkhwqXvyhdfilihhggfhiiikmlhfiijlkjjly|vsu}{zynpv}zqnqx}|yxxyvu{z{ur~hiqjikp{yonplr}vb[Z[\\[[\\Z]xZ^djsty}}uihjhjnqwm`imrtmkhgfbiocZ_`\\^V`ddd`_^\\\\]^aa`aRaɆV\\```__`bba`^]^\\ZZZWVWVXZWVWWYZ[\\af`XWY`]krwr]SQX_ZSTTTSUVXZ[\\[VQOOPQPPPPQRTUSQRSSRPPONMOSTSQPPQQQQQPPOMMOOPQQSVVSPPQPQQQSTTSSSRROMTTSSSRRRQQPRS]d`VSRRSRUTa]TUVVUVTS]hje_VSWWWVWVVVVVVWWXXWUVWXXTRPRRSTSSTTYWUTSSQONMNNMNPOPVZZZ[[XVSPPPPQQPOONMLLNSVWUQMMNQVZZWROPQPONNOQQRSTSOK_dQIJINWZXUSTSUUTQNWZWQRTUTRRRQPOPOMLKKKKLOWXWWWWWWVWUQXrhNSXXXXXWRTONPPONLLLKLOVZǪ`RPLJJJJJKJIFD`{[YJ67\\hQXele\\PIJJJJGHYghbWPIL\\gb`bdghgh_QKFDB@?@@????>BGJGGDBDCBBABBDDCAB@AAABCDEEHIKKONK??<<<:::>:<Uj^H=<;;9:@>7;;=;78=:::<>CKNMKKNNPWPB89::;=<ADD><==;:87666656544444444444643431243-=<<:999;=BHJJD=988DI><:=<<=88AGIHHHFDCC><>4=mpqotf?@????>><<:::;<=?@@BGGBDHLNPSSSRQPOM@8;BEDAA?>????????>@BA=:766666689876778898K^`a``ZQKB7?KF:865666789;:::9;>=;?NQA=><===?AGIEACJLHFIKJJHHDCA<<<>ADKLE><??=<<==<;9;@FF@AB?::<==<<=>><<>BDFIQTY^[URPTURQQPOOPOOPPOOONNNNOOOQJKVQA<>?JPMSXI999<?>:789:::==:59cyeZjuogeleMMXL;5;BDEDBCC=641111//3679764455666557897300021243334543/-.///053+(.0.-1<FCCGKKE8.,1530143100258:==6282(+.-.9EKKGC?==;97757;=;61,-22.*//.87-))(*5<70.,(/8=B;*%*-/221/-1--<H?15349169851/-./563,-1/.,,/400*'&')1752313>?1,//-03;B=6331/0-),27>>41+(,4843332299/)/4/*(((**+,,/0/-+(*1671.010-+17979=>==8+$)//01/455;=50.,'&(),,*))()-1+-+-43-(.52--++,..---+)+4;<;;:99>@@=4/..27889988@MQRH<;=EPV]aWYdb[XPJLA5891''''6;-.:CF8/:>40-,+*,462781108BMTUNJFA;4.**-15@FMSH54AHOUJ@??59^Y<5))6:/)*(')((/21-(&,2-''()2BMM>m|4\"*').0-+++,++VVVVWWWX[[YYY[\\]]\\\\\\[[ZZYXVUVUUTTUUTUVVWXY[ZZ[[ZYZ[ZXUQQRRRPQSW[^_a`\\[[YVTSSSSRQPQRQQSSTTTUUUUUUUUUSSSSQPPPQQPQSVWXYXVVUUTTTTTRQQRSSSSTTUVVWWXYXWXXXXXYZZYZ[[\\[[[ZYXWVTUWVVWWYXXYVTUWVUUWYXX[^[YY[^_^`bacfhhfb]ZYXUXcnj]b{}|obYTU[mxoebjrwz|td`_aa_ehkfgjijljde`bwvnljgdgjgeddfghknkgegijlkijnt~}}{wpmtyv{vlq{vtrnqxzzrr{yqntw|vg\\cbbdefhkwvog}~uaX]_[[\\\\Zix{zx~michq{{|}}ldhhfgkoshbglspliggddjd^^\\\\Z[^`bdgfc_]]_die^TbǈZabcdddefeca_^^^[[]]^]WZ]WUXY[\\[\\cd]WX[`__y{nzjVRX`b^ZYWVUXZWVWWRPPMNPQQQSSRSY[UOOSVWVSPMJLQTSQOOPQQQQPPONMOQRQQRTTTSRQPPQRSSRRQQRTWWWTSSTTTRQQQRWbd]UTSSSRUUVWVUWVVWWUT[fjdYTWYXXXWWWVVVWWXXXWUTTUUSSTUVUUTTTTSSQQQPQPONNNMKMMPRUXZZZVUUUVXVTTSSRPPKMTUSROMLNQUX[WQPQSRPOQSSSSSQQIJfVGFGDIRTSTTUUVVVVTRPPRUXWUSRRROJHHIIJKMLLNUXWWXWXWVVUUWecYXYXXXXWWVLLONNMLLLJLORTĉ_MONLLLMMLJGJHFhcVE?>cgPdpiaVMIHJKII[fc^XQGLcnc`daflnpmWFFHB@>>>???>@FIGFEDCDCCCCBBDCBBBB@?@BDEEEHIJKQND=>>>=<<<;>:KoaG<<;9:8;@<;;:=:<=<<?A@<@HMOOMLLNMD65889<<?@C@===:97777776655543444445563210/.030:<;:989;<>>=>?A@EJIE<=>CHKE<?HJHGGEDBCCD@<?;XpmjvwI?>=>>>><:88778:;<??>DGACHKNPSTUSQRPJ>8:BEEBA@??????@@??AC?:8766666789876677786<P^abcVHI>89EK;787777899::;;9;=>=<DIB==<;;==?DJJE@AGIHIKIGHGEED=<<<ACKME@=<<;==<?A@BDGHGEGGEC?===;<=>=;:?JVYXWXZYRLDBJOQSTRQPOOOPPOOONNNMOPQTSKKTRA87?GMT[Q>57:<;8668;==:9=98bdY\\hpomkmjP@EA@HQLEDCBCC;79::742001456665544556667861.++,-/0224442/,,....0462.11/+-6?@AGIC:2,+28866:<941347;AA74:3))*)5GPPMF?<:9<=>=946:=<730.00,,--44,('(-7<5.-+(-6>A9*%),03355442.19426/18/5885684/-/9<4591+,.44./(&(),2886;>9:6,+.0.129@;4442011138<?<4*%%'+0561-++160(()')-//110/0132/,**,.65,+/.-+-//035679:3---&-861/7;:410,&&+.//+(((*.1+.1022/08=92/.,.//-,)()/8;:87766677211/.27998999DMSSJ@4:OXWVWZchb^[SOPC5;>3)'')//%&*20,2:7-+****.6814<;72/5DQWNCB@6-.--07=BGJC6/4?FMOIE>=>Dfb7,+)+-.10++,--,*1;;24:2)(&-DQKA;MV1%)'(*-+)(()))VVWWWXXXYZYZ\\\\^``^]]]\\[ZYYXVVVUUUUUVVWXXXZ[ZZZZZYYYWUSPNPQRSQQRUY^`^]\\]\\ZXVSSTTTTSRRQRRRTTTUUUUUUUTTTSSQPQPQQQQRUWVVUSSTUSSTTSQQPQRRSRTUUUVVWWWXWWXXXXXYYZZZ[[\\[\\[YXXXWWWVVWWXXZZYWXXXXUTUUTW[YXWWW[ZZ]\\]_cfb[WUTTUX_ff__lwz{y~sbVQWktma_clz}odfeca`iopffihhfeeft}xsj{qffnngccdefgimnjhhjjkjijls~zwrnkq{{uzwnrvrnnrsopuvrmq{wmxvu}z`ihffddgjlowf||tbWcg\\[\\[ar~ymmvvv{ygcpz{z~uihggghgkg]_lqrnifeeeeeb`a_^\\]]\\^bdd`]]ahsjZW`Ƃbiceddegjie```a_]^^a`\\XY[WWXY[]\\[^^[XZ[^aceh]U[fje`[XVUTSQPSVRPOOOOQRSSUUUUWXVQNRY^]XRMKKQTROOPOQQQQPPPNNQRRQQQQRSSSQPPQQPOQRQQRSUUTSSSTTSQQQQSW[YUTTRSTSTUVVWWXXVWWWVS\\ih`VXZZZXXWWWVVWYYZ]\\ZWUSTTTTVWVVUTTSRQPPPPOPOOONNLLLNNORRRRRRSSTURPNLKJJLFISSPOONNOPSVZUPPSTSQRTUUTUTPPK]]GHMLNQVURSTTVXZ`a`bdc^[ZYXTRQVZYUNJGGJMLJNSWXYYXXWWWWWX^a_[XWYYYXTNNNNNNLLLLILKPIj̹eWPPMLLMNMLIGGG@YkXJNEduZZlke\\RJIJKJI\\ea[UNFPipc\\ZQNU\\a_K??FBA?>@?A@@CFFEDDCCEEEECBBBBCCCD@?>BEEFGGHIKRNA@????>=<9D:FkaG<<;::87>A=98=>>?<=@B@AABBFJOPOOMD;78:78<=>?A?==:877777766555444444456531,,,+-/>;9:98899888;=CJNVMA<=DJMPSICEHIHEDBA?ACEC?>=Dpqll{`>><;>>=;997888899:>=;@GDCGJMQTUWTOLJ?977ADDBB@@@A??@@@@@AA<986666667788766777765?TbdgT<F987@K>899779;;<<<<;;<=>?;>DC?<=<<>?@BFLKF@>CFGGFFGGEED>=;<@BIMD=;98::;@DIKLMMLKKKMNKC?==<;<=@EJOU[ZWPMLHA=::=@DINQRRRRQOOOOONOONNOQSTQFMXI9=AEKS\\\\I6779:<>?ADDD@9=9C|dfYYfmrqohaQAA?BEF@78<AED:3358::::989;<:9754566554653/-,,--/0248896115753114555312.*-35:BB:43238;;<<>A=942357>C6-3/*)(-AQLA=9789;>??=82016::83/4880+*,.)&(*09;3)()),4==4*')+230168431.,,34/0./0.-,/32,)1:=9362)()23-1'%*.36767=B>6/++-//001553100123435<;1.*(('(.22,&#$(/0+*('(.24567778960-++*)23--./1100/0001//../14*1:920035411,''*/0-)))(*-0+-,**,/149975//42.---,/49:88877753364/./39<;::;<::DJEB@GQVVXXZagbSIKSUA5:7.)&(+/.)+,)).9><3.++-02;=36A=5789?HMC;>?844349>=<>;0/6>A?><;?:9H`pX5*'*-/2652//11.-3?EB?;1**(1L\\R@557/(''''')('((((VWWWVVWYXXY[]^acaa_]^\\ZYYYXVVVTUVVUUVWXXXXYZZZZYXWWWVTQOPQQRRQQQTX\\]^]\\\\\\[YWVWWVUSRRPPPQSTTTUUUUUTTSSSRRQQQQQQQRSTSSQQRTSSSTSQQQRRQRRRTUUVVWWWWWWWXXXXXXXYZ[[\\\\]^][YZZYXWWWWWVXXY[\\\\[[]\\WUUUWYZ[ZXVWXXYYYY[`_ZWXXWXWY[]`bbepyspy}nZ\\s|wh^]lshbgmmhjlljhggggfcabai~yoruimvpcabbdfffjonlkkkkiiiinyzrqomls~~~{|}}}y~rqoginrtoku{slputqxxyjcd`s|s|xsd[ln][Y\\ksqrpnq|s~{~wfdrxxvz|nhggeegdcbahlpoieffddcbba^][\\^^^]^__^^cmqgZ\\Sqfqfdabgkmjd`_aba`_^cd\\WXXYYXX[\\[\\^\\ZZZ]dhm|q\\\\Z\\^hrm_VTSRRPOUWSPONNPQRTTTTTUUVWXXVUYab`XOLMQUTPPRRQQQRQPPOOQRRQQQQPQSSQPQRPNORSQQQSSSSSSRSSRPORSUWWUTUTRUVTTVXXXXYYXXXWWVX_hi]XZ[ZYYXWWVUVWXZ]a`]YSQSSSUVWWVVTRQQPPPPPOOOONNLKLMMMLKKMMLKKKKLLKIGGHIJMQQOONOPPPQRRRPQTTSTUUTUUUUQOQbNENRUWY_ba_]]]^`ceeeed`\\XWVTRQYfptm^ULLLJKMRXYYYYXXWWWVVX\\]YWWYYXVSOMMMNMLLKKIKIMI=uҗFTONKLKLMMJIGHGCPmgWYWcyn\\ObqlaVMIJJJJ\\e_XRMHSgj_YXVTV[VEA?>CAAA@AACEEGCDDCCDEGIHGECAABCDEDB@@BDEHHIJKNPG??????>=<9@=@`bI<=;:9:9<A?9:=ABB>?@A?@@A<;AJPOONI>::<96:;<<>?<<:877777655555444444456541)-.-./999899::99=BGLQPOHA>?>BFGHLFEFFFGDA?>=;>BCA@><M}qmvqF=8;=CA;97799::99:;><9<GHEEILPTWXUKFE;721CECCCA@AAA@@@AAA>;98676666688877666666667CZgj]E?689=B>:999:<>AA@@=;<==>==ACA?<;:;=???AIMLD<=ACCDEGFFD=<@99=@GMB888759AGJNONNNMLKLLMJGC>?>:7@M[[TSNIHC@><;:;;:;;=AIMOQSTSPONNOOOONNQRRSMHQM>?FFDGMQJ@==AHMLKJJLLK?;7Rb>c\\TfpwtmaYRMLHFE>6786@CA=<:<ABA<987:=@?<954589422584//.//.034456;<79=;422113584.---//017735779:;:99;<;:72246<@6-.*))'0FN=0368:<BC?8420-+-3774..3961.,,*&',3::3*)+,./460)),1552155230+).5311/..,*++,,++2334-)**'%)++0)%),011.+097.*,./.,++-.///.01244100.((())).32/-+*),13100-*)+./4:=;;;92+)))*,.-..//1476345442,(*/69:??5(,39600,''+/-(&((((+/,,))/22..1353./111244456:<86456767>B;2..3>B><:<?5*1<@?IRRYchaUXb[>)5E?431+('+.120,,++4<?>?@9.+264:>9;C?24AKH@<9888:<;:@JE96765<CEGC=;>GKCCW^>(),.022341.-,.03359@>5/0/(2ReX>00.*(''''%'.31*,.WXXWWVVXYX[\\]`egdca_^][YXXWVVWUTUVVUUVWWXXXYWWWVUUWXVTSRRRPPPPQQQSW[]^]\\\\Z[ZXWVVTTSPNOPRSTTSTUUUTTSSSRRRQQQQQPQQPQQQQQRSTSSSRQRSTSSRRRSUUVVVVWWWWWWXXXXYXXZZ\\\\]^`_][[\\[YXWWWVVVVX[]^\\[\\]\\ZYVXZ[\\[ZXWWUTUTUUX[[XYYYXWWWW]ec_gqqiht|tz}ukmx|l\\\\fc`beistnkiihggggd`\\WYk{yw~}zmpxk^adabddegjlmlkkkjihhkt{jgmnloz}ywy{yy~zipolprtliyxmnpqoý~xvua]fwyub`tq_ZZhxwurnmoortikwxttx~qegfdff`Y`fckqnjfgheedca`^\\\\^_aa^_^_^_fmia\\\\Qkcje`Z_knnja_`beg`\\mSZXXYYYYZ[[^`_XUXdoolh`]`dh]c{|lYSRRRS[[SQQPPOOQSTTTTTUWYZZYYWZagf^QMPTURPRTTRRSSRRQQQPRRQQQQQOQRSTSQPQUUSPPQTTTUSQQRRQSSTWWWWVUVUTTTTVXXXXXZ[\\[ZXWXXXbli^\\\\ZZZXVVUTUUWVY\\]^_[UUUTUVWXYXTRQPPPOOOOOPOONMMNMOONOTY]VKFHIGHKQVXTPRQOONMNOQQOOPOQQRQQSUUTTUUTSQQY[QRSSVZ]bgiiknnke`^[WUSSSSQPPONRYftulc^XRKILRXZYYYXXWWWWWWZ[YWWWWUTTPNMMMLLLLJJJIIF:Hl@KLJJJJKKLHGHHHEIfcHN_Q}mQSZnpeZOIJKJK^e\\UPLNXa`]]_cd`XOGHRBBAAABCCFGHGADEDDHIKMLJGCA@ACDFEDB@BCGJIJKLRIA?>>>??><:9;>>Q`J==;:::;:==;<?ADCBA><<==?>;>AEFILLC>==;8:;;;<?<:9878877766544444445556541)0420-269999;=ADIRLHJD@;:<<>?>?@DDFFFEECA><<98=DEB?A?ZqpxT8;29BE@;98999:::9:;;::;DGGCGKQUWXUJCFB=20EEAECA@AAA@@AAA?;8777776667888776666665985JfjbJ<989::;;;=?ACFFCA@=;;<<==>@BA?=;:;=>>>?CHLJ>;>ABBCDDED65C=5;=DMA66669BJKMNMMLLLLLLLKIIGC@;48GT]UGE@<<<;;<<<<<=>><;=@BEGLRRQOPPPPOMNOPQQPMNLC@C@@AABCEDHOXZQMMLOMF::7_?0M]Wlr|vaX[UPLKKNJAEC<>>BHQPNMKHA9445:@B?=868;<5.02;;0000113574207<:;;4../0258:4.+,486433337;;:::9643359633688:50.)()(2BA1/4678@HG</-11/--0452.*)0:90--*'',5<;4122/..-.,*,5<=;642/00.)*1741/1//.--,+)(,3-/:4)*/.)('*1,)(('(*)%&*,)+.0-,)((*,--.///13540)'(()()1<?:4121,.440/..+'&()+07;<<:3+))))*++,--.1563//2364-,---7:?@6'*1883/,**+,*)''()+,/-*,1:;600221-,-.4::74589;;8422347=ACD;3/9EID=:8;5.7?FMTTPYoqTT_I/,-0102-''+5:60/,,)-;C=55::/*3958::=DD82ALH<5;8447:31;FB<<:8786>JCALI>DJDA9/*/1123445/+,++38857==79=5(6[gH,---(((&''#$0;5/35WWXWVUUWZZ[]addccdca_^][YWWWWXWUUVVVVVWWWXXWUTTSSUXXVVVTTRPOOQPQQQRTX[[\\ZXYZWVVVTSSRPOPRSSSTUTUTTUTSSRRQPQQQQQPPPOPQQPPRRQRTRQSTTTSSQQSUUUUVVVWVWWWWXXXYYYZZ\\\\]^`_^^]]][YXWWVVUUY[]^[[ZZ[]]ZZZZ[[[[YVTSRPPSVXZXXZYY\\]YX\\ab`dhjjehqpilsrrsrkktuqmjgt}q`^``_`lwskghgedegea`_biox{|{{usth]bd`adddegijkkkkjggjnxvgfklminvtx{yynpusrrqihxunmopnwvr~}uctktvw|rbeupaX_yxspp~~ny}|zxy~|y|qt}|j`aYR^eehkigggeeedcb_]]^^`___^^]_gme^][Um``a_S\\qqlhc^_dgd`[cQ][ZYXYZZYZ\\`_WT^pyn`][^grwd`z`TVUR]eWMQRQQQRRTUTTTUVWX\\[VQSXblk`UMOUSLOTTTRTTSTTSSRPQQQQQQPPPRTUSRQTWUPOQSTTTTRPQTSSUVXYYXVUTVWWWWWXXYYYYZ\\\\\\[YXXZZ[dmg\\ZZYZYWVVUUUUVWXXZ_c]WUTUUVW[YUSRRRRPPOOOPPOONOOOOONS[cj]LJKIKQX_cb^[YWTRPPNMOONMMNOPQPQSUUTUUUTRQT][[][ZZ[]`deffdb^ZWTRPONNNNNMMLKKKRZacdegi_SLOXZYYXXXXXWXYYZ[ZXWXXVUTSQNNNMLLLJKJJJEGDSCHIHGHHHIIGGHIHEITJMSPPmgMXYfoi_QIKKJOeiZRPNSXYX[a_^aZKKUSSEAABCDEEFFFGBDEFIKKLLLIGC@@ACFFEDBBCCHJIJKNNE???????><;9:><EVJ?><;:::89;?ABBDFCB><;=??>>@@<=BKOJA?=;:<<<<==;9887887776665444444555554125651,368999:@GJHE<9:868:;<=?=>?BEEFFDDCCA@?>;<A@@?B?Doqxq?6;:;DEA=::9999::99999::@FIFGKQUVWSIADCC<9DFBCB@AAAA@@AA?;88677776557787776665666674>\\lbG=<9899:;>BDFJJHDA@?;;<<<<<>@@?><:;<=>>??AFKC<<?ABBCCDE91;E;9:BNC446<HOLMMMMMKKKLLLLJIJJG@88?IJGB==<;==;<<<<<;>?@?;99;<<?GJNPPRSROOONPRQPNOMFABAAA@AABEJQWWPMNLMNF><?heA8>\\Vju|r\\[^SLONMMOIFEF@@EKUTROJEB?:866<AA@<<?A<4,/44623466689:74237;<:41.-2798863117:9786327:<>>=;972--1335787674-((**5>86<;0+/8BE<2276552265212++9:1++*('-6<96562/..-)')2:=><742,,.,(,37620121/,,-+))*.,.<6,,/.,)'*52-*)))('''')*.45.*,,)))++*+,./0131+,++)(.:CC?9532,,54.,,,*)(&%&'*29<91.++++,--,-.1462-*+./00/241+,/6>:/.17840-,,,,+*)(*--.00/-079512430/037?@<868>><:630037?>8@FC=<EMLHC<439>CKS[VILQ`}jHTS3)213322,(-5=:/*-,+*,5>90-+--.3;6458;AC<35777>@-)04510;A@@<3..-.9D@BLD417?E=3234668<<8221..6:;<=B@>DH<*<aX3&*+)())''(%$)/28;9WXXXVVXY[\\]bge[WZ^`aa_]\\ZXWWWVVVVVVVVWWWWXXXWWTSRSUUVVUTSRQPQQQQRRQSUVWXXVVWVVVVUTTUTRQQRSTVTTTTUTRRSQPQQPOPPPOOPOPQPPOPONQSQPRSTSRSQPRTUUUUUVVVVVWWWXXXYYZZ\\\\\\^___``^\\ZYYXXWWVVWY[[\\\\[YY\\]\\[Y[\\]\\\\XUVVSPOQTVWXYZZZ`c^^_\\\\_acdfhhfeeded_^opddeefdadjnyud]\\bwsgdddeeddfd^_isvsx~}|}{{wg^ab`bdeeeefijkmkheirwvxyofhjkmjmwvxyyy}osvsokgjopnllmooqw}~vz}~zx~}{yy}neovpcZew}~yy|xyvrnp}m~{oZ`oqifhgeeedba_]]]^^^^^^]]^elc[][Of^_b^Ucyxngb^_ch|z`O]\\[ZZXXYYYZY]^W\\ltsf[[]alvte[thUWUUaaQLQQQRSUVVXVUTUVVWZZTONR[lpdVOOSMJOTTTUUTUUUTSRRPQQQQPPQRQRSRSVUSPNPSSTTTSRRSUUUWWXXXWUTTVXY[_^YZ]][[\\\\\\[ZXXYZ^[[elbXY[ZZYXWVVUUVWWWUYccYTTUUVVXYVUUTTSRQOOOPPOOOOPPOPNPU\\`YRPPOYceddcbba^[[YSLKLLLMNNOPPPQSUUUUUTTRTY^__ba``^\\\\]\\[WRPNPRQPOOOOONMMNNNMLMKLV[cnpjaVQUZ[YYYXXXWXYYZ[ZYYXXWUUTSRPONMLLLKKJKJNCبJCJIGEFFFGGGGGIGFJIN[TLVTUWUUdkibSKKKLRknULKKTYSSZ`YUYRFJWPKGAADEFFFEEGHEEFKOMMNMJIHEB@ACFFEDDDECHLKKKMC?@???????=<:;=;?OJB?<<:::<>@CEFDEFFD?=;=????@B?;=GRNC>;;<>==>?<998888877666655545555444444999960369888:=A>9644677:<>==>=>?BEEDDCEEEECB>=;96:=@?<Vuf95;??BDD?<;:98899::::999<DIIHJPSUWSF@BBCA?BFEBAAAA@A@@@=87876666676666777765555666778LhaB;<:999;<;CEGIJHHECA><<<=???@??><::<=>>>@??DFA=?ABBCBCE=34DA99?IC99>HQQMMLMMLKKKKKKKJJKIDA>?@B@=<<===??<:;<<;;<?@><;<;;=;8:CFHMQRQPOMOQQONOPJC@AAABA@ACEILMLMMMONDB?D^?RL@YRdx{iT`_RLOLKJIJKFCJGDDIJJIF@=><:857>DBADGD;2,,1.-1346666778;<67<=<=:424798776668:96642117>BA>>@>5.**+-06863251+()-775?HE:.),5>=9;<<<;99:6225004553,((*08<85330//,+*).221333331..+(.443201210-*,/,('*,,42-,,++,+,76-+-//,*))(),2541461,*((*'&+.//142/00,)*3@A;8740-*/63.-,,*)(%%%%&'0;7-,++,.01.,-0221.)()***,1531,&&,6>;878830,++-.-+)')+--//,('*-03352./4<@BA@?ACE?;;84/05>C;9FHGHGMRNNNC:;BDIPWYM>=EJQB7D<()04::62+'3961-*)+*)+/470-)+-/37300033551-,.1/+)-/354;=83/-++,03469:93.(&5>:999;>:;BA7553013457?B>?BC>1AXA,/-*)(')))(''%(8@:6WWXWWVX[^^`cc\\TQRUXZ_`]\\ZWVUUUTUVVVVVWWWXXXYZ[ZWSPPQSSRRPPPQRPRSSTTUUTTUUVUUVVVVVVUUUUSRRTVVTUUTTRQQQRRRRQPONNONNNNOONMNOOQRRPPQRRQRQOQSSTUSRTTUUTVVUWXWXYYZ[\\\\]^__`a]ZYYYZ[ZYYXYYZZ[[\\[Z[[\\\\\\\\\\__`ZTWZXTSRQSVXYY[Z[__aa]Z\\^aadihhfedegmctqjg^baa`\\\\gupb]isigefgiiebbbdkrssy}|}~{i`bc``bdeecchjjklifmxxmmsleghilr}vqtvvwwx~vpspnjhkmmmmpqoruy|t~y|~~z||lixvpd_kqspr~y{mhlolptؽvOlwkilkigdb``_^^]^]^^^^^^\\akd[Y]Qa_^e__pvd`__chd__S[[ZYYYYYYYZ\\\\[Zhnga][]bisuh_YewXWVV]XPNQRRSUVWWWVVVWWVVXWTQQPRaqgVTWPJLSTTTUVUVVVTUTSQPQQPPPRRQPPRVWRMNQQRRRRSSTTSUWWWWVUUUTTTVXZ]a`\\]__]\\\\\\\\[XXX[]_]]bfc_\\[Z[ZYXWWWVVVWVVW]c_WTUVWVWWVUUUUTSQPPOPPOOPPPPPPOOOSXWVUV[cdedeeec`__b]QKJJKKMNPPQQOPSTTUUTTSTW[^`a`_]YXUTSTOJJNQRRQRQPQQPPOOOOOONONOTWZbdb`__^[YXYYXWWWXYYZZYYZYYWUUVVUQOMLLLLKKKILM@ەAGGIIHFFFGHGGHHGFIUZNILLMHVscQ[hfYPKJKUidTMIJW]RS\\bZXWOGINMHB@CHGGFFEEHHHDIQOOPPOMLKHDBACFFGEDEGCJNMMKIA>????????==<=>:?NIC=<:;>BEGGFGGGFFIF?<<=??@@@B@==CORF<;<?>==@?;8999988776666655555554444469:;<=7358788:<;6589:879:<>>><<=@BBDEDCECECA>987445:><:Fy`75989=BDA><;;:989:::98889BGFDGNQTVNB>A@?>?BEFDCBAA@A?><666765555677666666665546768;95=Wa@9::::79ABKEDFIIIHFD@=<<?EDA@A@><;;=>>>>??>?CC??ACBBADF>8:>=;9:@?==BILMMKLLLLLKLKKKKKLLHAACB?>@B@>=<<@@;;;:::<<=?<<>><=>;57<=?ADJOOONONOOOPPME@@@@A@?ACEHHJLLMRTG9BGCN7FXTTQewz^=R`SECBDDFIMKB?@D@<DKJGEDC<7756=BBDGF>2*++*--//02/.1104;?=;=::<97664765565668854432.0?D;8?C?4,(('(*283-)/00+*,33;CC>9.*-5<<;>@@@==@<85///1225<5((.49=;77740-+*-320,(,,.259:2+,2520020-/1/,-/0+&),*-63-.,,-,+3:7/),0.-.,*(+042/351-.0--+*/022479:5.+(+6E>2/-*(')160--,+**)'(((&!'65,+,./131/-02//0-(&()((,10+)(%''*8<><82/.+))-.-,*')+--/+)'%&*03331-/5>>@@ABDEC<7665329@@:BLHIMJJPQQTPHFEEJQSPHDED>8330-(+136683*&4>1)*,)))*+-/220-..1363/../-.0..02547;52332.)(,/-,*)..-+'(')3:=?>949<><99B?7765322027=>868?@=CJ6.0*(('%&+-)'&%(5@<5WWWWVUX[^`^[WSRSSQQSUZ^]YVUTTUVVUVVWVWWWXXYY[]]][XUQPOOONNPRQQSSTUUUUSSTTUTSTUUTSTUUUTSSTUUUUVVSRQQPPRSRRRQONNMMLKLKKKLOPQRRRQPOOPQQPPQSSSSSRRRSSSTUUVWXXZZ[\\\\[\\]]]]][WWXXZ\\ZYYYZYYYZ[]][ZZ\\]_^]^`c`YWYZWVUSSUWYYYYZZ[]_^[\\\\_a`ceigfefhkifmsyvlkjkhebZ]efb`uyokgggkok_^ineix{h`cdb`acddbbfkkikprttmelwnceghl|ymoqtuuvw}znnoliikpnmvytuwx{{w{{~~|pmwvpebowuqs~~}lakqwtخc[n|vnlourgb`__^^^__^^^^_aaaeocXY`W^gfe_cxxahl`_spH]ZYYYYYZZZZZZ\\Zaila\\\\ZX]jv{q_`^Uh[UVWVROPQSSTVXYXWWXWXXWVVVUSSRORehXXVLSXWUTTVVVVWVUUTSQQQRQPQRSQPRVXUSRRSSSRRSSSTTUUVXWYYXXVTSTVYYZ\\]_aa_^]_^]\\[[\\^``^_babd`\\[\\[YZYXYXVVVVWVXch_TUXYYXWVUUUUSRSRQQPOOOPPPPRQPOOQWXWY_eddffffd`^`b^TMKKKMMMOQPPPPQSRTTVUUTTVXZ\\XUSPLKJLOSK@AJPPQQRRRSRRRQPPOPPPQRRSTTVXXW\\kri\\XXXXWWVWWYZ[[[[[[XTRTUURPMLLMLLKKILMDmuBJGKKJGEFHIIIHIIKQWLHLKJNMNt\\@?_i`SKJKSec`\\SLNTRU_aZVQLIIJJF@BEGGGGFEEEEH<GSQRRPQPNMHECCEGJGEEEGEKNNNKGA@??>??@@@=>==>;=IHC?<<@FIIJIGIHIHFFD=<<>???@@A@??BJNM@;=?>:<?>:899:999877677666655554444569:<>@<55668::;9887:;9:>?ADB@==>@BADFED@<<:986554458988:f\\557568<BEB?=<;99999:9::89>BDDGLQRQG?=??>=>BFFFDDBAAC@;7545664444788776666665446888:977I];6989:75BYXGDEILKJHGB?<;>HJDBCA?><;==>???@@?BB??@DDBACC??A@??==?@?>AFJMLKMMLLLKLLLLMMNMF@BDC@@@@@?=;:@@;:::::;<==;;<=<==;:;:<=<;>EIMOQMMPPNPOIBA@AA?>ADILJJKLNOH;7FOAKP=I`[UjytO-C_T8:?BBDJNPF0)4>7BRQQOOK=02768=CIKB3-*))+..--./.,*)*0<BDDB:1367850.,-065236742443-+<C1)9EA2)'('%&-51,&'+2/+,/07;92/,+-5;<<>CEA7;A?::963232100,,/46758=<6-++*.10.-..../1250,.330..22./122..0/)()))/0-20/++*2<?3'&**,1/+()-/--+***,361.133469:;<5-*'%1C=/,)')-,35-*12.('*--*))()-2246765311383,-0-)()+*),0-)&%&'(',3::5/++)+.--/00+,-//,'&(*044330.0343<?@BDCDA9434667=CA=BIJJMLGKQZ`RFDDGKJHKMNOLC=82351431,/2.(%5F1(+-+((*+).13301259<7530/0/-,08:88;>>;9750+,./--,,//0111-3GMEA9.(+./.-1A>887752//28<<306=CACA5/*(&'(+.2561(%'-762WWWVUVXYZ\\YTRRSTSQQQPRX[ZXUTUVWWVWYZYXYWWYYZ[\\]_a_ZUROLKLOPRRSTSTUUUUSSTTTTSSSSSSSTUUTRSTUUTUVSQQQQQRRRRRRQONMLLLJIGHJMPQPPRRPONOOPQPPQSSQRRQQRRRSTTUUVXXYZ[\\\\\\\\\\\\[[[ZVUVXZ\\[ZZ[[[ZZZ[]]][\\\\\\^^]^`aa^YWXVSTVVTTXXVXZYWX\\]ZZ[`a[Y`cfdeffikf_hnz|}rttn`UXgf`i|yqlmigioqe[lxmt{h^`bbbbdeedcdjrojryulhfjoslihcjnrpossuux}zmkmmlkmoomz{w||z{|w~}}~x|vmuwpfapxvtx{~|~ujkqkblg__hjjiqzrfa`^^]]^___^^^`affgpfW[aObaec]dycn_cڮcW[\\YZYYYYYZYYYYbhi`YYZYV[n{i]^`NPs}\\SWWTPPQRSTVWXYXWWXXYZWUUTTSTTONYe\\]VMU\\XUTTVWVWXVUUTTSSSRRQPRSRQTWYZa_WTUTSSRRSTVWWWXXZ[ZXVTTTVXXWXZ]aa`_aba_^]^_aa`__b`ac`\\Z\\\\ZYXYXWWVWVWVU_jdYVYZYYWWVUTTTSTSRRQPPPOPPQRQPOOQVZZ[agecfgfdb`_a_PJIJKLMMMOQQPPPQRRSTVUUUTUUWWSOLJIJJKNQI?@INPPQRSTSSRRRQQPQQQRRTSSSSQOMQ\\fmh]WXXWWWWWX[[[[[[[YSPPPRSPMKMNMLLKIKNKHeBKHKMKHHHIJJIHJMWZKDIMUWWWNEHF9G\\dVKIHJJQTWYLGNQW_^YPNKHIIJGDEFFGGGGGGFBI<AQTUSRQQPNHECDEGKFDEGFEKNNNJD@AA@@??@@@>>==>==DEDC?CHJIHHJJKLKJFAA=<<>??@@@??AACELRC<>@;7:@=8899::99877777766665555444579:=?@@9644579::98799:BHJKHGECDDBA?BFEC=8555777677765659WuzP355347;BFFDA=<;;?>=?@AA@><=BEHMQPJB?=>>>=>@CFFECB@AA>8544565434456766665666655798777618QI3988997:P\\OEHFKKJIGC@>;<IQJFEGEA>=<==??@@@@?@@?@EDBA@@@AABCDEDDB@>BIMPOONMMLLLKLLKLNPMDADDBABA?AA>;9=?>=;:;;;;;:<<:;:::;;::<=?????GOPOMNONNPLDABAA@@BEJLKIHJIC:79AI>=VUDL[Wiv`9,6HP03>@?AFPVO:'(8?9DKPRRPD418715BMO>.-,**,/.,+,..,)&(/<CHLE6/05784.'(*0640288434541/05+\"+9<70*(*)&(.0,'%)-/,,-.23.,,*,05;<;>FE949B?<;<:3133200///00025:<5+)+*,--.2120/..++,.021.--.132233/-//+'((((*-1350)*5<;5-)%&*/0+))++))(&')*.21/1335677882,)((1=:1...69435()3=8-*-1/-/260)*1344761118<2+-.+))*,,,./..-+('(((*/353*'*.0-+/220132/'\"%,5;9540.23101:>?CBA@?830069;@GGDCGJKNOJKR__PEBBLNDCKORVSHA:449A7543/0-*&6K<(*-,('*,+,1790467;=8972/21-+09=:9<BJNLKH=3.10-/0/02258749CJIB7+*4=>>?EC;898784224898206=AAB<3-)(*&(7CA=><1('+-+)WVVUUVWVUVUSTTTRQSRSSRTWZZYWUTTVWWY\\]\\[YYZ[]^]\\Z[YWWUQLKMOQRSTTTUUUUTSSSTTSSSSSTUUVUTTSRSTTSSSRONOPQRRRRRRRONMKLKIFFJMMOONOQQPPOONOPOOQRRQPPPPPQQQRSSTUVWWYZ\\\\\\[[[ZZ[YWWWXY[[Z[\\[\\]\\\\]^_^^^]ZZ[\\^__`_\\ZYVQPSUUSTTUXZZXW\\c_YY_`YUXZ^_abeijjgghq~szzf_`dikowtnkljhegoofiyyxjeea`dfedfgebjvwoosojlkhtwq}xqrpruutuw|volmnoonnmlyzz}}}y~{z~yp|wyv{sikrwvwyxr}||~yjkboɐutkbcccbinha^_]]^^^__^^`a_bnbZogYZ_YdY[[Wgxi}{^vtT][[YZYYYYYYYXWdmeYVYZZYU[rt`ZYURWcg]ZYXUSRSTUVWXXXXYYY[\\[XVUUUTTSQRU`edVQTUVTSTUVUVVVUVUTUUTTTTRQRSSSTSTbcYUTTRQQSTVWWWXXXXYXWUTTVWXXXXXZ]_`acccb`_```a``_`_``^[\\][ZTTWVTWWYXXVVYbjdVXYXXVWVUTTTSTSRQQQPPPPPPPPPNOPTZ[[^cddefdb`acaSFFHIKLMMLMPPPPPPQSSUVVUUVUUUTRPMKKJJKMOJCCGJLOQSSTSSSRRQQQQQRRRRSTTTQONNJJYb^YXXWWWWWX[[[[[]^\\UPONNONMKLMLLLKJKKN?VAIGJMLJKJJKJJJLSUOGBIMX_]YLJJD?=GZYMJFB><>BIIFJP[_ij]PJIIJJHIGFGFFFFEEB@JC?KQTSRRSQOIDCCEGGFCEHEEKNMMFBAAA@@???>>>====>?ABDCCGIJJJJLMNQLGC??=<<>>??@?>@BDDAKVF>>?:78=;8799;:99877677776665555456579::<>@<731478:<<:9::=JQQQNMKLNOH?<AFEA:656789:9:<:6554:NnxG4565559BFFFC?@@@FKIHHGFED>65@IOQMC??>>>>==@CFFEDBA@>;8655655433432455556787767888777721ER37878@ICCQPJKEGGHHFDA>=<GQMHHJJE@=;<=>>?@@@???>?DDBA@@ACDDFHJJIC@==AFPOONNLLJKKKKKLMOKDBCBBABBABA=;9;?@><;;;;;::>>>====;:89:;<@C<8>HIONMNNMOMFCCCABBCEHJJGED@>>??>@=9M`YIW]ijA295:N92=;5<=IVUD2.>F56<GNPNK?786,,<JD2*.0++,/.+)+01.+))/8BLI90135783,((+587.7?932222100-*'&+/3871.-,*,...+)*-.--,,*'((,047=;;BI>02<@<99982,,6:6542697743.10,*,-*)+19952210-,-.251-+*)+/23331.,+)'))()*+-2;9-*140132-'(,/,))++*))(*,+-./.+.243/.//1-,09=;:568:@A937,+2<=400/.0233.((*+*-121/044-,.,*))*-0122101/)(((()+.31*%(,-,,-/079970'%-7;:6210153,-08;ACA><<94/.49<>EKMIFJLOTUS[bYHDDHRQFDJKP[WC<854>E79>;5310*7NF-(-,((+,++,4D6478:869:1-11,+/699;<ANVUX[O=122-/0/25669659:<==507@HIKMQG:7<<89;75760.4999==@<2*+/-&'7HF81350'(10,XWUUUUUTUUUTTVVSRTRSVXXXY[\\ZWTTUUUVY\\\\[ZZ\\^]^^ZURQSTTSPOPPRTTTSSSSSRRRSRRRRRRSSTUVVUUUTUUUTSQPQNLMOPPPPQRSSQOMKKKIHKNNMNNOPOOONNMMNMNOPPPOPPPPOPPPQQQQSUUUVY\\\\\\[[[[YWWVXXXXZZZ[\\\\^`_^_`aaaa^XVX[^__^_`^^^ZTPPQQPPSVZ[ZYZce[VZ\\ZVVUUWZ_dijeejr{xl~rcdablpoolefkjdcjpokt~uqz{rknpgbfgeeffdcgpvulgijllijzsnnptwvttuxqlmopomkklx}~{}qvkwy|uV^ږzoqx|z{wwltuwwyzur|~y|||uv}jepvv๠~lxnjjhfa_]^`_\\\\]]_`^^`c_]dgZSdeZXarf`[TT`vrx{^TX\\Z\\Z[ZZZYXXYWem_XXXXXYXV]qufZVSQUXUU_b]YVUUUWWXYYXXY\\`dc`[YVUUVVUSSSS\\heSTUTTSSTTUUUTUUVUTUWUTUWWTQQRRRNU^YWUUTTSTVUVWXWWWXWVWXWUTUWXXY[[[]^_acddcb`aaaaab_^]^_][^_UQdeU_aWX[ZYWUUYdgZVVVVVVVVUUTTSRRRQQQPPPPPPPPNNPTZ[]]_cdedbaaa_XNLJIJKKLLLLNNOOPQRSTUVWWUWVSPOPPLJJKKKMNKGGFHJORSSTTTTSRQQRRRSSSRSTUTRRRSSOKR[ZXXWWWWWXZ[[[[]`]TONMMLLLKLLLLKLKJILE[KDGFIONMLLLMLMMSOCADCGIJSZYMCBCFBCNWPJFDCBBBABBEIYWi}YHIJJJJIGGGGFFC??<?JFAINTSRUUSQIDBBDGHDCHJCDKMLJDBAAA@@??>>==<<<<>=;@DEEIIJJKLMOSQIC@>>>>>=?@@@??BDFFCDRP@=:846::8889;:99888677787675565457778978:<=:97:==<=?=;<=?KUUROONPUUI<<BFF?656667899;<<85571;g}G9766776;ABBBACFGIOQNMKHFA7119EPRJ=;??>>=<=?BFFEDBB@;7776775553351-1345569<=9899999:;;;7:A77:78BLNMGGKHHGEFFECA?>=FRRKJLLID<:=>>>>??>?>=>=CFDB@@BEGGIKJLKFEC><?HEFIKJKJJKLLMNOLJFCA@ABBBB@@>;9;=>><;;;<>>>?@AABB?<8778<@B>96=CBEHLNNMNNIEDCBACDDEEDB@@?>@BBB@>=AMbcfkmV,3BFA=83<;4:4<IMH54DC4536<EILE;:5,.<C4((-0-,-00..,150-+*.2ALA/-355792*)19<;:9=?7211//143/+*''(*3;6-*,,,,0443431.,*)()()0;?>?;;EE719??:66:>>0(4@<76:BGDB>:2++1/.0+,05742134111/-294+*)'&&)0442/*(''))))**+1<@90,,),375/++--,*,020+*,,*++-/(+11.*+-00..7BC<78;>?@A:39533443100////-+*+)))*+-//...+,.-,)(*16860///-*++**)))))&%%')*--069;>=924995530/022-((,08BD@=::94--3:::=EMIDILLRY^c`P@AIMSTLFCCL[W;2345<73>CCA@A9.5LR9(.0**,*)**-A=5@D;45:9/,12,*.369=<4=MRX[O7-250.,-/:?95227:4+,2:AA>;>>AE:7@A9:=:695,,5:7689==4/12-()0791&'/1*)33-XWVUUUTUUUUUTTUTRRRRV[][Z[]\\ZXWUSTTSVXXXXYZXWXUSRQRRRSTSSSTTTTSQRRRQPQRSQPQQQSRSUTTUWVTWXVTTSQOONMMONNNNOPSSOLLLLMNONLLOONNNMMMMMMMMNNNNNNNNNOOOOOPPPOQSSTUX[\\]]]^ZSSVWWXXYYZ[\\\\]]^^___abdda_^ZX\\]]]]^_bed`XSROLKNT[]\\ZW[a_ZWXYYYVTSV[_fkf^`wzsh_bhnjjwwhckmdbhkkkhglsxx~tgemlggfeddcbddgrsidhkiihhhrrn{tkmqv|}{vrx}umppqmjhis|tv~~egdcivNzݱkfkghl~~{yywxuw{}{yy}zz|z|qhzypmihunn໹kinnnllic[X_c_]]_bcba`_`^]bhgYV]\\Zjx|qc\\_Rc~pu߄O_\\\\[[[[[ZYXZW]jaVYZYXXXY\\cif]WSTUW]\\V`h^XUUWWXXXZ[\\]afijh_ZYXWWWWVTVSQYi`QTUUTUUTSSTSTTSTTTUWWUTY[WQPRRRVb]TUVXYZXWWVVXYYZ[[ZWXZZWVVWXYZ]^____accccba``b`YTRQQQPLNUXnWmxYX`_\\XVVXZ^[YXWVVVVUUTTTTRRRRRQQPPPPPPPNOQV[]^]^`bb``edYQUYUMKKJJKKKLMMOOPQRSTVXYYXWURMOSPJIKMMMMLMKHHIJLOSUUUTTTSRRRRRSSSSSSSSRPOQSSNOXYYXXXXXYY[[\\\\]]]VOOPQQQPPNLLLLLMLKIKHRCGGDGMNNLKLMOQUTI?BEFIH@GVTNE@?JCGKQQMGBBECCCCCHLWQK|gONPMKJJIIIIFCA=>=>CI>EINOS[ZWSJDB@CGHEFKMABKKKGBABB@A@?>>=>=<==<<<<BFIHJJJKKKMROGBB@@@@??=?@BAA@CEFD@=FTC9731499889::;;:::::;::;98776665679889<@BADDDDBA?=<<>>><>ELPRPNMPTK=7=CGB967877789;;<<9457/0Q{A:888:99:?@>?CEHGDCGFFDA?;8857?ORG;;??>>=<=?BEGFDA@=86888996653553/0247768BC:9;;;;<<=>=;54::::>BCGFIFIIIHDCEECBA?>DQVOLMNMG>9<=>>?????>><=BGFDB@BGIJJLLJHEEGGFDEBCEGGIKKKLMMOOOKGB@?ABBBB@?><;;;;<<;:<>???@@@ACA<62356@JG=:9BG@<@JONNPOJFDBB@AAA@>===>>>??CLMHA8;Vpvlb?$+2==,-0;:87.1;DL;4A@220//5>GC;9826=<86435>@<AFCD@82/.../18A;.0566:>8**7>>?A;7762395/1440-+)''()1885678788865430,*(+/--6ACCFA9:85:B@84008EH;,2>;37GPNJGDA=63:>74/-00.-,.020020-/41)(('&$$*252/+(&&))(***,0;CB7,+-.0562.---++0871+)*)())+,+*-.---.0/).>B?638?BA@;83115630.-0540-..,++**+*'&+/-,/..//.*&)9>:/-/-)*+,,,+*)('&&&$$*0369<::==:8971053/-/0-*''*-8BGFA<;95236::87:BCBJJHKMacZE7>HKORLB<;ETM2)3;:3-7EFEIIFA1,CTB)-4+'/2,+**2;AONA4260(*33--.,,288--<KSO>0.474/,.2>D8/15994-(,8CB=:619IH@DG<996463-.322337<<8412-*...02.**)(*-,+YXWUTTTTUUUTTTSRRRRRVZ[[Z[]][ZXVTSRRTTUVVUSSSRQRSRRRRTVVVUTTTTSRSRSRQPQQQQQRRRRSUUSWZYWXXUSTSQPPQONNMLLLKLOQNKLLNQQOMMLMNMMNMMMNNMMMNMLLLLMMMNOOOOOQQQQQRRTVY\\\\]]\\VPOSWWWXYYZZ[\\]]]^^_``cfddggc_]YVVY^`dfffeb]VOLKPW]^]ZXZ^]XUX[ZXWURUY]fke^fwvpkc_bpyuvqfkogbglnpmek||tz{l]\\cfggeefccdchpnedgggghhfgfbeu}utsu{zvy~roqwqhhhm}pit}rejpffijTrcma`f{~zyywvx}}|{yz}zz|||||~~~motlgjkosyrjescSsrlmmifaZY]^]]blpjdb^[[ciepoXT\\^[lvxjgk]dyoQbZ\\[[[[\\[[[ZUZ^XXXWXXXY[^be`ZTRX]_hledb[XWVXXXXYZ]_bfhedb^ZYZYYWWWUWTPWd[OVYXXXVUUUTSSSSSSSSUXWVXZYTPSRTZ^XSVWXXWWYYWVWWX[__]ZY[\\XVVVWY\\______acccccb`_]^bedeghhigs]_`MQ^a`]ZYYXXXYYXWWVVVUUTTTSSRRQQPPPOOPPPNQSW\\^^]^```_`d_ROW]ZROMIJJJKLMMOOOOQQSWXZ[ZZWQMQTQKKMMMMMLMOLGFJKLRTUUTTTRRRRSRSSSSSSRRQONNNNPPUXWWWXXXYZ[\\\\\\]]XOMQUWVVVTPMKKLMMLKJKIM~>KIGGKNNKJMPRVXTLCADJEB=@JKIAHDGFHJMMLIDBDCDCCCIQSL?_rVQTRMJJJJJKHDBB?=<?K>BDFGS^^ZUME@BEEFEFLK@AKJJEAABBBA@A@?>>=<==>?@CHJLLLMJJLMONC>@BBA@@??>>ACDCDEEEA==@PH3524579999;<=>>>>=>?===:87876778:;::;BGHHGGHHH@:87899?<;?CEDLNPUL:369@E=688777899:;<:755454<rY;899:;9:;==<AGIFC@<::;;;;;=@::=MPF=<>>>=<<=?BDFEC?<:88988987779:862/032028>?;:<===>>>>?=86557>IKFGEIFIIFGDBCCCBA?>BOWSOOOONB:<>????@@A?><?CGGFB@DILNNMKB=<@FKKIGEDDEEFIKKJKKMPQOG@A@@BBBB@?=<;;;:;=<:<>>>>>>>=>A:1.0/7IRI=<:>ED>AGKKNQOIEDB@@?>=<<=>???>>?BHLNNNHPadbV5*--172116331+,/<G>9A@31.-+/8<75:;:987>>>?JUSLOSQPNB41000013330267=AA<0+18;??633248?@94210.,++,-+)+047;@@>83/-+./+)).413;BEDE@50-3=?<5/,,1<=6/2;914HZXMJHFCDBGQI7.)*)())*+--,./0/-,('((('&(.420.**)())+--..4BB3+.022342,*,,'(4=4+)')+*)))*+(+,-.-,-.(.B?8216<@B<0.2.+021/+(+021/0/.+*))*)$!&++.000100,'-=?5-03.+,,,-,-,+*++*()+/47;?A=;98887312330.--+)&'+1;BHJC9898878::987:@DJHAD>PYT:1=EFJMG@<<>C:*.@E9.3CGBIRK?;0*;PG.,50&3C>0'+2?NSNF=43/*+02.-+'%)13,'-8>;.)285/.145>B4*2=>:<>7+(2:AGB59FH??C@@>5362--/00017;=:411.-01332574-+-*)+ZYWUTUUTUUTSSTRQSTSSVXYYYZ[ZXVWVUSRTUTTUVTRRRQQQRRRRSTUVVUSTTTSSSSSRQPPPPQQRSRSTUXZ\\__][WTTTSQRSRPPOMKKKKKKNNLLLNQQPPPOMNMLMMMMMNNMMMLLLKLMMNNNNOOOQQQQRSRRUY\\ZYYVSQOOSTTTVYYXY[[\\^^_`bcddcdffffcZRS[bcceccgie`\\YRPQTZ`a^[[[ZWYZYXYZVRTU[egb]_nz}~uneeeaao}~vkkohcfjnqwqgnrsynl~qaX[bfgeeiiebfmnicceeffggeeehiip|wsuyxkry}{qnupmkjiwugrxhkjv~edeg{``zdhbrcadqt}zyxwz~|zyyyy{|}~~{y|wigdippqsxyih`zTVoqmnlic]YXZY\\Ybuugab\\[lmclxrbecfwlefhrrqSa[[[[\\\\\\[\\\\[XWWYZYYXXYY[`fe[VSS]fjklnjbYWWWVWYZ[\\]^aca`_^][[[[ZYYXVYXPRTTS[^]]]ZXVTTUTSSSRRQSXXVUX^ZTSRTWWVUUVTQQTXXVUUUVY\\]ZXXY[YVVVWY]______abcccb`^[Ypźכ[MKbla`a`][YWWWXXXYXWWWWVVVUUTSRQPPPPPOOPONQSX\\^^]]_`____[WX[[YXUPLJJJLKLMNPOOOORWXYYYYWNLSSPNNNNMMNNMOLIIKKJMQTUTTTRQQRSSTTSSSSSRQPONOOPOPTWXXXXYZZZ\\\\\\\\]UQSVYYYWWTQMIKKMNNLJLJLnBNLLKMOOOPRTUTTRMGBBF@]k_\\VL<E?>HJMKKLMDBDDEDDDJNGEIMmwZRVRMIIJJJLHFHFD@??J@CCABO_a\\WNE?BEDDEHLIA@NIHEBCCCCABA@?>><==?@DGKMMNNMMLMQSOC8<DDCA@@@@@?@BCEEEDC@>>?HP434:7799::;<=?@@>=>>>?>98987778:;;=<<?@A@>>>??>856777BKIFFF?BJTUB5667@B:8887788988::975699:8>?;8:9:;::;<;>FJJCAA?;:;:9988:;9=JME?<>>==<<=>@CFEC>878::9888778=@9651-24319;==<>>>>?????=:9425@KIIJKJKJLNG?AAABBAA@BLVWSSQSUF:;>@???@@?>>>?BFHGDACIMPSQJ>868<ABCEFEDDEEFGHIIJLOQOG@@@@BCBA@=;;;;::<<;<=<<<=<=?;7BA;652<MTJ=;;?EGEEECFILNKDBCA@?>>ABBAAA?@>@@=>BIQTWUO[J++38432121///-/05;A?<A82-.-187569:964345;IOOKIHLKHGD;53112582//378>CA=92148::76436:>EB30...-,.46/((++19==:80)&',-*()277=EILF>62/+04551-**+-.,+1<<66@U`YSQNKF>BXT2))*(()**))***-/110+(())))(*021322.('*-11/-/;<-(./26412.*)+((6</()*//+)'(.+*,++,,--/-0?>83../01.)+341.+++*)))*2511/-(''((&%%)-12334100/5=<5242/1.,,,,+++,,-+,26889;?A?:75788642441.,-+)')-29AIIB759::989:::9:AEI@2519JL99CB@KLD;9:94*)<I>12=GA=FOC50,)3GJ9491(1BB/(AZc]ICEC@DJH7.//+('&'+/-)(*,-,)185,*483<?2/<DAADGF>.'&-=H;.0:CHE@CH@510.,-/015:;=;/).-+.01337?D=2./,)[YWVVWUUWVUUUUTRSUSTWYYYWUUTQPSUSRRSSSSTUTRRQRSRRRRRRTSSTSSTTSSSSRRQPOPPOOPPQSTTUZ_^^]ZXVUVVRQTURPQOMLLLKJJLOMLLMMNPRSQNMMKLMLMMNMMMMMLLLLMMNNNOOPPQQPQRSSSUWWWWWUSQPPPQQQRUWWWXXZ][Z[^aba```_`cc\\TXadccba`cecabd`\\VQQX^`_][[ZZYXWW]`[XVUW[^__acglifacecahx{wxummridjhbdkj`_ddfek|m^[\\`cdedeifcjmiedcefefggijggksyzz{cbhytmqsvwm{yqcjygeilpz{flehnxtX\\`bconzkaeditvm{}|zxy}~|{zyz{|~}~tl_[glmssvoffvqvtnjppplb\\XWXXZY]dgebbWfge{qz~m^fesrxzdY^[[[[[[\\[\\\\\\[YXZ[]\\[YYZ[bf_XVVY`fhgipuhXVWWWWZ\\\\]]]^^^]]]]]]][ZYYYVX[VSPQY```a_]\\WTUVUTTSSSQSVVVUX\\[XURSVVVWVTSSVWWWUSSTUWWWVVXXZ[ZWUX[^____```_abbb`[ZrًRaĭs\\`a_]ZWWXXYYYXXXWWWVVVVTQPPPPPQPOOONOQTX\\^^]]__^]]\\\\\\]][YXVRNMLMMKJLNPQOOORWXWWWWTNNSSOOONMNOOOMMMMLLJHINSUUTTSRQRRSTUUTTTTRQQPPPQPOMRZZZZYZZ[[\\\\]][SRXYXXXWWTPONLKMOPMKMIDYFPOOQRRRSXWWUTRRPOKA?V}us\\BFNQQRNNOFCDDCCEGGGGIMIZtbVWQLHIJKJLHHKHHDBAIB?A@@L_b^XMCABDFFGIKGC@RJEEBCCCCBBA???>==>AEJLLMNNNPOQUUPE;7=EDCBABBBB?>@BGFDBA?>>>>P@34;89889::<<=>>===?>?><::99778:;;=<<:87687669==;989=CRXODDF@CKK?8869A?98889887787899757;;;=;::899:8::;:=BHHFBAA@>=<;996438<?DHA><<<<==<=?ADEDB<669::9888777<>8684,8SX>8;<==>>>???@BA=89:64>KJHJLOMJORG;>?ABBBBBDJTXUTTUTI:<=?=>??>==?CCBDGHE@BINSVRI@?>;669=BDDCEFGGGGHIJKMPMGA?@BCBAA?<;;;;:;<<;==<<;;<=>=:@CBA??AHKA:=@DGGEDCA@@CKQIAABA@@@BCCBA@AA@@@==<=?CLYa_K1*5=631/11-./.34339;=E82..28;87861-,.../3;:7676<B@@CC?72/06=8107845>C>==>;=?=;976779@=5421/-,1792*+,,1698997/))./*(*4;>DGIJD8321.-+*/00000153.2<=;<<EU[UMB;878BE0'(,**,.-+(((()*.483+)))*+*(,137:71+((,22.-,58,(,,-11-02/)),076-*--00-*'(/1.,,.21+-123751.)'&%%&&+4530.----..,17421/-,+++,-,-/367742125;=93/-.//-++++*+-,+**,4<><<==<:85678753350++-.*('(+.6?GG@658887655788:=@C8(+(+8768@?=EG>2++,*()032/3::51353,+)&+;F?<;/(*../GpgIADDGOYR9/64)&)(&(,-+)((((+054..244;>59JNFEJIJOI1!!)8B5%)>PRF<CMB-*.*+./4:<:71+,*\"&-236<98==50760\\ZWWWWUVYXVWVVUSSSSSUXXURPPOLLNQRQQQQQRSSQQQQRTSSRRRQRQPRSSSTTSSRQQQPOOOONOOOQQSTVZYVRNNRVWVSQSSQQQOMLLKJJJKMMLLLKLNPPPONLKLMMMNNMMMMKJKKJKMMMNOOPPQQQQRRSSTSSTUVXWQPRQPOOOQTVUUUVWTQRVXZZXXYYZ\\]\\\\]__ab``cccc`afigd_VQTXZ__^\\[ZZXV]cc`]XSSUX[^^`bcedcdca_biruwvokqninjbcebadedd`nzk`\\_babdcbbcgkieddcceecdggffgiltz~~v_iy|wnoy|todesodchkmnrefkifjpx{{rqsyc_cecbudfmagdcrwx}zo~zzvz~}}{z}}{wvy|}{nqsm`dmkloolrvhgr{gcxtke_][YXY[UVlpc^_l|ctxuadcd`Yu݇T`\\Z[[[[[\\[[[[ZZ\\\\[[[ZYZZZ][X\\\\Z[_beiimsjYVWVWX[\\\\]]]]\\]\\\\\\\\]]][ZYYYWY\\\\TRS\\`bba^^_\\ZYWTTTTSRSSSTUVWX[ZWTTUUWYWUXZZYXUSQRTTUVUUVXY[]\\WVY]_____``__`a`_^]sͬۅVŕ_`a`_\\ZYYYXYYXXXXXWWVVVX\\YTQQQRQOOPOORTW\\^^^]```___^\\^]\\YVUVVSONMKJLOPQQOPRUWVVTTQNQVRNMNNNNOPOJKMOOLIGHKQTUVUTSSSSTTUVVVUVUTSSRQQQPQUZZZZ[ZYZ[\\\\]^YOPVXXYYWVSQTRNKMNONKLM>JMQPTVUSUWYVSRRRRRRNBM}xMWXVWYQPQFEEDDDEHDBGJLLQhi^YQKIKLMLKHKKLLGACKK<==@H_c^ZNDCDFGIJKGEDCQJBCCCCCCBB@@??>=>@CINNLMNNORSXWMC;8:?DBBBABAA@>>CGHHDB?=<<:38L:69:99::::;:;<<<==>@>?>:::9878<==<;<964465437:?@=<=>>AID:8FFCBBA856;A?:9:::88777877877:<==<?=;:;9878:==@EFCCCA?>=<;;;;:748>A@@>=<;:;===>?ADED@9779988887778877994,ApkA7<=>>>??@??ACB>=>=;8:GLHJMQNF??@??@ABBCDEEHSXVVWWXN:=<===>??=8?FGCADGE@AIQUSLGDEHFA<;>@<<AABEIJKIIGIKNMGA?@ABBAA?>=====?><;<=>=<;<>>>>=>@BCCCDA<:ACCDBBBAAA@@ITQF;<?@??@AA@@AAA@@>>>>??=<LbfbR;:A@:3342.0117650/3@C1,/039=:8551+(*+-./02114;BGGDDFC:311<D<2022.0>D>;BGFGE@??:7415;777730++3994+)+-24545564/.1/)&)4>FHAA@<841+,.)(18:;<AGIGDB?>AA=9@KH7.++/6885)'***,0.+)('&&&&*6<4*()*+*(*-17>;30.)(14./.03,)*(()*)*00(&.784,,022/..)(,10,.24.(-56660,+(*,++,,-4323222101443673236743123210378742003874.))),-,,+*)+,-,+))*-/027==7356889:;9870,./.*('(+.6=CA9346777679;=====;3/2*'++*,19;697.((%03)%)*+-./,('&&'+,/5;B=:80-551Fkq[MGDEOQE4*38-&(*)(()++**))()/30/0123799DTXLDILHPZI0+&!8OB)*@STB8BC0'*(*.049984*,A@.-4?JQSB22698:@D][XWWVTUYYXXXYXUTSRSSUVRNONLMMMNPRRQQQPQQPOPQRTTTRRRPOPPQSSSSRRQQQQQQPQQPONNNNMOPOPPNMJINSTRPRRPPQQOMLLLLKJJKMLMLKLMMMMMMLJJMNNNNNNNLJJJIJJKMMMNOOOQQQRRSSSRRSSTTVYTPQPOMMNOQUTTTTTPMNQSSSSTTTVWXZ]]Z[^`_addddcbehikkg_ZVW^a`^]]\\Z]gf^^^\\YWTSUVWZ__aelojfdcgjmmomgmsonljikhfiiijdpiwpi`_baabbbbciidcdeebadedeeeeghgjwzzwtzvemttrno}s`cfb`eijjkjjkhgfjxzsmoofagrt|olbcc`^dxugfhbejdfbewzomorlklmsy|||}{{~vs{fdlfahllmonmlmkp{~tg[g{u`VWXXWWYW[s}j\\Tw֝fzvZ]fvƮ|f^]WSOWy|dY`[[[[[[ZZZZ[[[\\^]\\\\\\[[[Z\\ZYZ^_\\\\^_cgjlqpaYWVWY[\\\\\\]]]\\\\\\\\\\[[\\]][\\[[[ZZ[XQU^`aca`^_``^ZVUUTSRUUSSVVWXZZYWTVWXYXX[][ZXTQRSTUTVVVWWXZ\\ZWWZ]_`_``__`aa`][Ugšݑa^~daaa`^[ZYYXYYXWXXXXWVXWXmh]VTTSQQQQPOQRV[]^_^`ccba_^\\]]\\ZXXZcaVNMLKLOPQQPQRTTTUSOMPYZRMMOOLMRUPIJKMLLJIILNPTXXUSSSSTTVWWWWWWUTTSSRQRTWWVXZZZ[Z[]]]^WLJQUVWXXVQRWUOLMNOONMMJPRTSSPW\\WSMMLNORSSSOH[qHOWWYYURQQEEEFFGCAEIKLNN\\li_QKILNMLIHKLMMIEEMO=;;@C_c^[OHDEFGKNLEEDEPJ@BCCDDCBBA@??>>>AGMNMNOOPQSXWM@:999=BBABA@@@<<?EGGEDB><<:6.)JC:::9:::::;;;;;::77:;<=;<:888:>??=<<;977556667<@A?>==;<>:5EQLGEA846;@?==<;:89987876679>>>=;<;;:;:878:=@CEDBCEA?>=<;;<<;978<>><;;<;;<==>@@BFGC;7777777767767765:><5Dq^<7;>>>@@@@AA@AB@AA?@C>:CGJLPLA88<BBBAABBDFFGO[[XZ\\`W>;;>>>>>?=9=ACDBDEE@AIRUOGFEGGGHFBAA=;?AB=CKNKIHHJLMHB??ABBBA@>>>>>@B><::<==<;<?@@>==>??ACDAABCCAABBBAAA?DJGLM>5:==>??@?@AAB@?>=<=?@A::K_h]HA@@<76431255:95.+0;>.*1257;<:6640+*+-.02555:IQRRLB;8964?LM@/+/0/4@C?>BEFC?=>CC>9578567641,+4;:5,()*.23310/00021+))2>F@8736<<6/+*-4:?CHLPSPPNE=;>@=79<<9755224:9,&'(,/.,*)*(&''$%0><.')*,*(*+,1772//+(-45750.+))(&%&(').+)/782,-3651/,))+-.--//)&-7752/--,1313444424665431169656407;888744542023222443200,)'&),,+**+,,.,+**))&\"&2?>428==<<BC>:752340+'&(,169<:5135688:>@@@@@@91/4910882/-8:16610/,>;))())**++)((''+5>DCB=77:?FIOfwsgWMKGDELG2&.7-#%('((()++-01241175//////07FSYQCFRNIUUJ@>-*PeM3;QQF=:91(%(,./24248/+>LOLFM_g^H712:C>=C^\\XWWVTVYYYYYZ[XVUSRSSSSPONNONMOPRSRQQQQQQPQSTSTTRSSPPQPQRRRRQQQQPPQRTTTSQONMMMMLJJJKLLKMNNLMPQONPQPNMLLKJJIIKKKKLLLKKLLLKIKNNNNNMNMLJIIHIJKLMMNNOOQPPQRRSSRSSRRSTXYQNONMNNMNRSTTTUROPRRQQRTSQRTVX\\__^^^[^cdccdeeeggillhc__ab`^^^]akeXUWY[ZXUUTRTWYX[hsokjklic_bkkippkjkjkkgdfhliqzm\\dvng_`aaa`adhgcbedbfidbfffeeeegeh{zyunwohkkjko}kadcddfhiijjkiff`l|khkkheltqq~zagwhcaa_^X[acgihaf{ddd`n}tppqmqkmnqwzz{}~}~~~swvja_dglpqpqsvyz}{s|j`qskbZWTRSYWXxeVUrڒhvuae`bjvo\\YVVSQtnضTY[ZZ[[[[[[[[\\\\\\\\\\]^\\ZZ\\]\\\\]_``_\\ftlWXdhquh]XWXZ\\]\\\\\\]\\\\\\\\]][Z[]]^]\\\\ZYWWYTV_a_aa`]]_`a_YWUTSRUWUVXXWYYYYWUVWWXYXZ[[YUSRSSSUVUVVVVVXZZWWY]a````__`ba]YTSvۿa[Qoj`abb`^][ZZYYYXWXWXXWVXVZghdb[USRQQRPPQRTY\\^_^^_]\\\\[Z[]\\\\[Y[bf`\\SMKKLNQRRRQRSUXVQLMWa]RMMOORZXSNKJJNPMKKMONOSUUSSSSTTVUWWWXWXXXXZZWVUUWVVXZ[[[Z[]]^^VKIMPRSTTSPRUTQOMNOQQPPOPRWTTTUR^`PGCGKMNQSSSQJZ{lHIOTVYWTVaAEGFFFFDHJKMOPQenbPJILONKGHKLMMGEEHK>;@CCZ`_[OHDEEGMQIDCDENGA@BCDDDCAA@@?@>>CKONMNPQRSXWK?:9988<@BAA?@@>::>EEEDDB><;9512?D<:;::::::;;;:99875468:=<:988:>AA><<=<;;877889:>@?>=AA?B>7CWQJJA947=@?>>=;98998887657:>?>=<;:9:;:888<>AFEDBCGB=>=;;;;;;:99;=>=9;<<===>@AACFE>8677677778889:;;9:A;3KkO><<=>@AA@@@BBA@A@@?@JL<:FJMOJ@=ABCDDCABBCEFDHWZSYZa^C9;>??@=<<=<=AB@CDECBJRRKGFEFEEHGFCB@;?OO;=GLLNNIJKLIB@@BBBBA@>>>=?BC@=:;;<;88<AB@?==<=<@DDCCFCBABCCBB@:6BG68IF88::=?@@@@?ABAA?====C?<>=HacMA<87644347:9863.*-7A1/3345666695431321258879ESYUI>407:9JYN8)+<?8>DEEDBB@8788BHA=<:7543221-,4;:7.(*.3442/,**+,.43102<@:83+/9A?8308BC>?LVVQMD:34:<=<:<=?>>>=;64;;1*++/0,*++*(),.)%+;?3((,,+(())*+++)**((2=@:431/,)&'*,'%+0//5:5-.320/.,+*++,++++('1=:.+((*,13369:9845887651179645668:544421121,((*.37520/..,('(*+)),--,++,-+()(#&7C?89@B@<<AA<8642220-,./02356542355788;;95444/+,.04@LF=;;>AA>1*-3/=;,)&&')(*++,-.,+388:>;9?JLFEQgrjTLLJHHD=621/23222.**)*-/1589>?<BB421/-**/;JUTHEMMEGMMIPL6Dglcfq_C79@>-'**,0552262,-;Zj^TVYRC70-3FH71\\[YWWVVY[ZYZZ[]\\XUUSSSRSRONONMNNOQQRPPQQQPPQSTTUTRRRPQPPPPPPPQQQPPQRSUVUTSPNNNOMKKJIKKLLMLKKKLNMLMOPNLKKJJJJIIIJJKKJKKLMLLMOONNNMMMKIHGGHHHJKLMMNNOQQPPRRRRRSSRRSTWYUQPOPPQOMOQSTUVUVSQRRSSSRQPQUY]aba_YTX^bbbdeeddefhhjjgdddb`____ab\\URY\\[YYZZYVSTVV\\`djjhjhc^]hnjkqoklmlfbaadihlqdc]Zqznib^`ba\\]hmd\\`feacopb_egfdccdaix}qpxofhhkmuxxpdffedegiiijjkhfgcrsfgiklnptyy}b[c_`ba`^Z\\ehihikbc~gdcb^tzrppnmjpokmrvvwxz|~~tn|rnlimoonoqvzyzzwpgroivzg`vdY\\Ls]ykpjqhVSSQ\\|d[^\\TSp~ٞWWZZZZ[[[[[\\\\]\\][[]][\\]\\WZckleba^btuh]\\jnaZYY[\\\\]\\\\\\[\\\\\\\\]]\\\\[^][]\\ZWVUTTUUWZ[]`a^\\^_ba\\XTSSSVZYVXYXWXWWVUWWWXYZZZVWXWUTSTUUVVVVVUVYZWWZ`aa``___`a_[WSeں_^fcsuifcba_^^]\\[[ZXXXXXXXVWXgfdih^WUTRQQPPPQRUY_`^\\ZXWVWXYZ[\\^^add^XTNLJKOQRRRRQSW[VPMR_cZRNOPOZaZKGJIKQROJKQPNOQQPRVWWWVVTTUUVUWWWVV[^[WWXXYZ[[[\\[\\]]]^WNKLMMOPONORUTRQNMOQRQQPOOSRPRZ`WMKFFIKLMOQQSQQepIJNRVYWTYb@DGFFFGHIJKKNOKVkiQJINQNKGGIKMNHEFIO@=BCBN`_[PFDEFHPSHBDDFMDAA@BDDDCAA@@??=AKPOMMNQSUVUI>99:99;=?ABA?>=:98<BDCDDB>;:778:=<<:;;;;;;:::::88:99668;=<;::79>AA>;<=>>=<:8789:;>?>>@@AB<7CSIGGB;79=>====;:9998887658:?>=<<=<:8997::<@CEBBACHD===;:;;;;:;<<===;<===>??ABAAC@<977876778889=>=>?>;-3W`KFB?<?AA@@@?AAA?????>COK?DJMNKB>DFFEDDCBBCDDDDLSSWY\\`H7==<>A><<=>=@@>AADFFKPLFFEEEEFFEEDC@;GWK7<CFKRSKIJKHBBCCCDBA?@@>=>?A@=<=<<813;CDB@?=<:;AFFDCCA@??????<62;@30<B=:98;?BA@@?@AAAA>BP<>?=@::Ri_D85653446;@<3.-0408E525422005889;989743577616K\\T@55458<P]M8&+EKCIJEB>89<8654;@52;96421012/-4;;;4)+5:741.)'()(-86126>;AD1(+3;>;;@EHB8;GJKG9,.7<87;;;<>@?=;8679:84111/,***+*')02.&%4>5(',,+)((((').-)('%0@B87>>6/,''-/+&*22/3;8/01-,-,++*+,+()./((6>70.-++++,03887835;:765312336;:88:95220.*)('&%%*/1/////-+))((+()+,-,++,-,**)'/<>=?BEGF=;>>9301220018=<52222220023447<=92.++,+,($.?E>8788DIA/#,5571**)*)(()*+,./.,,+,05<AIQOIEERZNEKJA>=8/-8A>:=CE@6*'(**-./006@RUIA<7431,'0EPKHI?8:98:=DH?=NV^bihK68?=4.)(/8:7531./.7UoqeWKC8/.,.<F7,ZZZXVWYZ[[Z[\\\\]_\\VUURRSSRPPPNMMNNOPQPPQQQQPQSTTSSRQQPOOOOOPPPPPPOOPQRSUVUSQPOONNMMLLLKKKKLMNMKLLLLNOOLKLKJJKLJJLMKKLLKMNNNOOOONNNMMKIIIGHIHHJJKLMMOPQQQRQRRRSSSSSTUWXWSOQRRPMNPQRTUUWTOOQSRQQQOOTWY\\^^]WQPV]aadeedceggffghjigfgebb`_bc_Y[_`_]\\[YWVVXYXWX`b^]^ba\\^jrpr|zpppgcc`ajkgrula^ab_dqpgcb__bb\\Zipd\\_cecajxl\\bigfcab^l~~}mi|loldnmmj|nffdegecehiiiijkhflt~kfhhhpulo}{`_ccaccbaadhiggikjgllfegfa`ozsqtollnkip|xvuwxy|~p}{~wojhijjjlorrttsutfqgcoÞolhZZX[fWQ|dcli[RRRQLQ^zl^_YTO\\y۟XX\\[[Z[[\\[[[\\]^]Z\\^\\]^YV^inonga`_[Zpfcb[Z^a^\\\\\\\\[[\\]\\\\\\]]]]]_ZW[[WUTTUUUUTSVX]ec^^_``_XSRSSW]ZVXXWWXXVUUWYYXY\\]\\WZbaZXVUUUVVVVVWXYZYX\\bcb``aaab`\\XUeְa[cfxpbba``a`_^\\ZXYYYYVXVW^nkime^[XVTSQPOPPPRS[`^[YXWVVVWXYZ]^afh^UTURONOPQRRQQSTSQQQT_aYROPQPSTOEDEHKQQKELQQSRSTVX[ZWVUUTSTTUTNLRSPMUVTVXXYZZ[[[[[]]]\\XROMMMMMMMNQVWUTQLMPRQPPQSRQWYXSFEJHHIJKMOQRTUd}IHOTVYWUWaGAEEFFGIJJIJJKJMfqTKJNQNJFFHKMNIEFJSF>B?>DZ_e[NHEFJRSF@HFJIBA@@ADDCBA@???>BMVWQNNPQTTQF:9:9:::<=?ACC@<:8788:@CDDB?<;9::;;9::;;;;;;::9::9::9:97:=>>=;;69=A@==<=>>>><:888::<=>>@@AB<;EJ@BB?<::;>>====<;999876678;?>=<==<:7567<<>BEB>ABDHE>==;:;;;;;;<=====>>??@AABBA?=<;98888877999<>>>>?=76Jh]bO;@>ABA@@AA@@@@@@?@@>FPKFKOOKC?BDDEDDCCDDCCEDEPXZ[[_N8@BA>@?><==<>?AA@CFHMMHEFFFGGFFEEDEEADH68>ADGNVTKGFGCCDDDDCA@A?=<><:;<>=<;625=FGDB?>=;>CFFDCB@??@A>;::868:768;;988:=><=????@A@>PmV:9><<78OiM45656878>A9-+-4;6;F97;:8633:;5676442001320--?TK4-49406MSMC,,FNIIB;7312;@95586--6765444562.39;<8/-7?>5/+()((&/94115=8;<0')2346=IMH<04A?61+'0;;9;==<==>=;95.08635892+,,-,+)'+364.&-:6*'+-+'(+*'*166.)(,6=706@>6/-*',.-))031055112210,+)+-1+%)..'+:5-49972.++-/1100.2;<:6431...28723::74432.*))(().0/-...//-*(''*(()+,,--.///,),5724AKJIHC99:4..013469;>=<;:9960,*+-/27>@;520.-.+'&-218886489A:,6:;1&()24-*'*)*+-.-,)).37AJNQPSWJ<;8>HA628:517CFDBDID5+1>GF?<4,4>IekVQTH23:3'+?I?AK?15322445677CM>7>701596-*0;?;8765301;J_svqdJ1)*(+6:0-XYYWWYZZZ[[[^][_a\\VSQQQRRQQQPNOPNOPPPQQQQQQQQTSQQRSRPPPPPPPPPOOPPPPQQRSUTQQTRPPOOMMNMLKKKLNONMLLLLMNNLKKJIIKMKLNNMMNMMOOOONNNONNMMNMKJIIIJKIHHIKLMOPPPRRPQQQRRRSSSTVXWTQRTTRONOPQSUVUQNMMOQQQQOOSTTUVVWWSQUY\\]acbacefhhgfehklikmjhhfdcd`\\^aa_]\\]^\\[]\\ZZZZ[YUUY[VXlsr|spqjhheekrmjrsfchd__bc`ac_]``_`b][hlb`abdecanxjbjmkea`]nv|}rcmmht|foqoesgbedeeeeeiiiiijkifr|lhhhhoqectk^acbbbccddfosmiggikllhfgfcbdjnpsokknpvwvxxw{ijuwtlijjgggijilmmmmlk`YZ\\ʘjij^][ZklTac}r[_ZQSSUVYccblh\\XXWQRl߹SY][[[[[\\]]^]]][^`]\\[UYk{xlfedca_^WZln\\\\[\\bd_\\\\\\\\[\\\\]\\\\\\]]\\\\^]YXYZVUTUWVVVTSSUYckc\\_`_^[XWVTV[[XVWWWXYYXVVXYYZ[\\_`ahjb]ZWVVUVVWVXYYYZZ\\`cb``aabc`ZV`ǥڑ\\Z][Zc{i_b````^]\\\\[YYYYYWXVX`bflka]]ZXVUSQPOOOPQY`^\\ZZXXXVVVWXWWWZkt[T]]UPOOPPPPQSSOORQNX^XRPONNKIGFDEIFORPPRTWYYYWYZZWTSTUUTTTUSIGQUTNPTTVVWXYZ[ZYZ\\]]]\\XUSPONMMMMNRVXWUUQNOPOOOQSSV^ZKBEIGFGHIJLNOQS\\IHOTXZXUU`VEAEFHHJLLJIIJJK\\jTLNMMLJEEHIKMHDGLSJ@A;:?VgvpiSCGKTPD@EKNFB@@@@ACBA@>>?@HRZ\\[WTVVUTMB;:;::::;;;?DF@><866657=CEDB@=;;;;;;::;;;;;::::9999::;<;:=>??@><8:?@@====>>>>=<;968<;;>?@ABB>@CC>?<99;<>?@??===;::9877779:=>===><:7249=?@BD>;>BCFC>==;<;;:;;<<====?ABBBCCCCA@=;:987888877:;;>?>===;:@F]ssD>B@ACBAABBB@@AAAA@@?BJMKLOPLC@BCCCDDEFEDDDFFFNX\\^]aU;@HG>>>=;;;<==>?@ACINJEFFFFGGFFEEEDEFEA9??ADFGQYSHBEDCEDDDCABA=<=><89;<<;988>AFHDBA@?>@CDBBCBAA>>;899:999879:;;:9:<<99<>>??>@<Dh{y]C;;;8:9YU5455798:A=3.26:<5:D;;?A?:53331/.-,+,-,-..-/08E=--671,1@@>A;:HMB:101--,3>=8;@=5302797668:6117;:712<D?2,'(+**)-222..0+)-,'*./03?KNF4'.AB7+$(06:CF@><<<<<;:82/2448=:.&+240+('.6:96/+46-),.-')2/&*7=7/**2<7,-3742/--,+--,*043/.1102440++),14+&*-*)16,).5=?:1-/..+))((.8<;6211/--..../37666678873+(.421/+*.463,'&'((((*-./0///-+.43.)+;JHHE@5330.-.03355359BHBBIC<0+'*2589513652/---36-)6@?DKH5285775.*)&9<02)**)+,-0.),217DLNPNSaZ@9ADD>700789<@CB??C83AT\\`][ZO95?IW`\\X\\S5.9:-.=D@?ABC>21360,,,*.1)$#%('(12*.9@?;99::403>AQlqz~e=('%#6;&#XXWVYZZZ[[[[]ZVZ`^VQQPPQQPPQQQQQPQRRQPQQQQQQRRQQRQQQRRQQQQQPONNOPPQQQQRSROPUTRRRQOMMMMKLMLLMNNMLLLMMLKJJJJIKKLNOMNONNOOOONMMONMMLLLKIJIIIJJJIHIKLLMOPOPQRRQQQQQSTTTTTTTSRTWUQPQSSTVYWSROLLOQQPOPRSRRRSSTTUXXVV\\a_^bdddddfdcjlihmppnnlhfea`cda__cf\\]kleb`^]]\\ZXWW\\cfsxxsogkolflwvngb^fmf^\\^``^aeda`_`a^_ge_dgeebb`euvgiokeca]oqkywzidlspr}cnndiqaekgeffffiiiiijkjeslggfhlkg_fd`abbbbbbccdkslfgffghhhgggdb`cmpnjhjmz}~y~c`hmnmkjiggggefikp|zpj_\\^Unɑhe`c_[]fr\\dcr|XTXWWSQR\\fffojYXXY[[^bW`\\[[[\\]]^^_fgiqgZ[Y`v{jfecbcca`][]cf`\\\\\\[]^_][\\\\\\\\\\\\][[[ZZZ[[YYYYSRSUUVWVVUVWV[hkea[[^^_^ZVVWXWVVVVXZ\\[XVWXXYZ[]`bfigbaa\\YVVWWWWXYYYZ[\\^`````ab_Y\\{غՃY[\\ZSH]lb`a_``beb]ZZXZZZZYVal]_je_^_\\ZXVTSQPOOPT]c`]\\\\[ZZYXVWWWXWS_zrVVYVROONNNORTRNLSQLV[URONLKKIHHGFIKU\\a\\WTTRSQQQTXXXWVUTTTTTSQPQPTXZZYWVWXYYZYYZ\\\\\\\\\\XVVSPONMOOPRUWVUVVSPNNOOQTV]UJFEGIHGFGHHJMPPQlKHOPTWUST[`QBEHIJMNKIJKIJLSUNJKJKHIGGGGJKGEHMQKAA;ANdox{nPAGKRLB@CEHEB@A@@@AB@?>>?HY__^_]`^ZWQB;:<<9::9<;9?HG86;866654<DECA?=;:;;<==<<<;<;;;;;;:9:::<<;>??>?B@=;=?<<<<<==@@>?@?<979;<=>@ACB@@???>938>@@?@@?>=;<;:9887779:<<<;=>:6638;?AAAA<9<?@FC<>=;;;;:;=>>??>>@ADEDDDDDC@><;:98887778:<=>><<=====:CbnOJACBDDCCBBB@@BBBAA@ACHJKMPPLEADEDDDEFFEDDEHHHLW]`feX=>HB<=<:99:;;;:<?@CILGCEFEFFFFFEEEDDHLIC>?@CFGHQWPEDEEEEDDBACA====<<:;:977=DJDEIHDAA@@CCAABBBAA?>:>FD?:99879;=@?<=>;8:<?>??>?>B[}nA8;::>;GN<853325:?9468::949B;=DB=951-//..-+*+,,,,-02145/+39312483/:JIC?5*(.1.+/37<@EFFB=7687889<@?4/6960/5AE:-)'&*-/,,.14/)%$')'%)./03?LL>-)4BD</'/8;>FID>=>==<<;:;749<;>7((0562.,+0698750/31-,--+-65()=E7+*)0>;000.-/0,+.//.--473.*/0-.00,***,.1+*,+)-20))+.799/.21-(())',795220..//.,,--02334459=>7,+-00/-*-34330*(''(('(-/10/.-*+46.'&'2?DFC91/00/--.00.).:AEA@GMOSIB626992*)2742322154/.24?LVV=/42/,2:5.+8@320//,*+,24,/754>EFFDIV_UE>=<997415>D<4369<1)6BAFPW_`L7487=IPYV8-6947??=81<KB13473-/,(&%'))*+)(.757>?<;:873..19DQcjtuK22+,@H40WWVWZ[[[]\\[[[XTUYZXURQQRQQQQRQQQQRRRRQQRQQQQRQQQRRPQRQQQQQQPPPMMOPPQQRSRQPQSSSSRRQNLNNLLNOLKMMLLLLNNLJJJJIJKKLNNMNNNNOOPONNNOONMLLKIGIIIJKKKJIIKLKLMOOONRRPPPOQRRSSTSTTSSTWVTTSSTUVYZWURMNOQPOOPQQQPPQQPQSVVST[^ZZ`bbba]]`_bijginpooppnmmkllie__cdn{ymf_\\\\\\^_[XX[YZeqfrtpmlqohr~uie`ajk_\\__``\\aoqe]^`ebegdafgfd__bafpnkkgcdb\\prekmzyuofgenssv~pkkebd`gplhhhhiiiiiijkkeowfdegkkfbag}rcbabbbbcbccdeggefedefffeeedb`dnplgfjsy}}y~b`dcfkkkjkkjiffhlotrke^_`YSqwc_``]\\_olbdivu]UZZYWUU[_Zarm\\VVX_f^tY_][[[Z_akwcY_g{~kcfeccbbdb^cga\\]^]]\\]]^]\\\\]^]^Z[ci]WWX[[YY\\\\UTVWVY[[Z\\\\[Z[_ilfX[]]__[VVWWVVVUVXZ\\\\ZWWXXYZ[\\[[_bbcjib[XWVWWXXYXWYYYZ^_``aaa\\XjӬm[^^_V[fpa_b``gwxqbZYXZ\\\\[YWgyf]d`]]^]ZYWUSQPOPQU]`_]\\\\[Z[YXWVVVWXVVYtiSUWSPOMMNPSVSLWbUJUYSQOMLLMKKMSZXSMOSZTPPKLDBGKSYYYXUUUUUTTSUUTVXYYXWWWWXXYXXY\\]]\\ZWVVSQPOORRSTVVUUVVTRQPPQSW[TKJLKIIHGGGGHJLPOQOHMNOPPQRT^[KGIIJKLJGKMIILOMJHFHIFGGFEGHGECDGIFBCHYcin|zTCBBJQI@@BCDCA@AA@@@@?>>=BS]\\^^_ae`WLC<;;<;9:::<;9>HC659765544;DDA?=<::;;<=>>=<;;;;;;;;;::;;<==>????A?>=??<999:;=?@>@ACEC:9:<=>@ACB@>=>?>96;?ABA@???>><;:9877778:<<<<<<8457;=@AA@?;;<=>EA;><;:;<<;=?@AA@@ABBABDDEEDA?><<;8888889;====;;;;<<<=<=KLEBDCCDDDCDCBAABBAAABDIIJMONJECFFFFEEEEEDDFHKIJX^^feT:FK;;:::899::::;>AEHIECDEEEFFFEEEEEFFHJD@@?AEGEFRVIDGGGEDBA@B>:===<<;;986:CJMGEKLEAABEFA?BBBAAAACHPSNA:999768;?AAA@=99=@?>?@@AGM`yU/:<988@ID?;630/27;845335549B9?E?;830/010.,*)*+,,-24310..0583366300>PM=4/**-167;<77?B@@A><9765:@=@@7.3:5/08B@2*'))-./,.000.+*(')*+041/1>KA509BBA92-3:::=;<=<<<<;;;;=:6:>=<4*,3341//-0672120-/1.-0/,,35-+=E4)*).=C>70)*0.,.0110.2874/,--),,())))+,...0.+.1/**+,-.-+.55.'*+)(,11-.232011332.../.--025661,+,/10/2:91021/)&&)+)),.1//.*(.5/'%%'.8@D<.000.,+,,./.0:@?:26DKR__YJ;3760+,1423663/.*+,+'8KRPC763+.2A72.0>5.5861))+2713?B8677768E[^J4///8?;0-:A6*,0473--**8LU]b`UPPJ>7>OK4-255:@<1.4>D;87987331,-477:339109?>=<<<62,+--.=VTSam~wI4=;CIEDHWWX[]]\\\\\\\\\\[[ZWVWWXWTRRRRRRTSQQQRRRRRSSSQQQQQRRQRRRRRRRQQQQQRSOMOPPQSSSSRRRRSSSRRRQONMMMMNNLKKLLLMOOLJIJIILMMLLMNNNNNNPQQOMOOOOOOMLHGIIIJLNLKJJJKKJJLNMLOOMNOOPPQRRTSTUTTUVVWXUSRRSTVVTQOOPQPOONNOOMLNNOPNMMQTWVQT\\bacfaWXZX_giggkomnprrttqqpojflwynd^YZ[[\\]]\\YYYYWWV\\{rv{qptqztfdaagg^\\_ab`^bnvn_\\`higheceeeb_^ba\\ftogbbd`[susnrqrqmhefktux~ysedggbcfjljkjjjiiiiijkkdewdadfiifedbfzyfbcbbabbcccddddeeedcdeedddeec`fnpjfdjvysw|{~~laaa`flnooqsrnjijklkh`\\^\\WeiYtpb\\]]^_\\]kx`^dqvh_a_]ZYYZVQ_mfYUW\\af^߽e\\_][[\\XZhX^gntrjgfedcdaaea_kmca_^]]]]]]]]]_`]_d^jx^UWX[[YY^a_`a`_^^_`b`^^[\\\\bjb^]ZZ\\[XVVWWVWVVXZ]]ZXXXXY[[[YZ\\^Zcsmf_ZXVWWWWWWWYZYY[^`abaaZYɟܓY\\a_b^ji^U]da`bmprma\\YUV[\\XYm}l`^\\\\]^^[ZXUSQPOPRW]]]]]\\[[\\ZYXVUVVVTRTY[YYWUQPMMNOQUQPipSHSXRNPOPPPOPRUWTTQHBUZXVLQXF?FMTZYWWWWWVUUUVYXYYXXXWWWWWWXWWX\\^]\\XVVVTRQOQTUVVVUUVVVUTSRQRSUWNKLLKJIHGGGGHIJNKPQHMMLLMNNOUZSKKJJJJJJLMJJKJIHHHHHFCFC?IFECBACFIIJYekludAAA@HMG@@AABAA@@A@@?>?>=>HX\\[\\]`b`YL?;:;;:99::9<;:>B=888765544;BD@><;:;;;<=@@=<<;;;<;<;;;;<<=>??@@A@@?=>@A<87889=>>>@ACEHEA==?@ABEE?<===>;@?>ABB@>>>>@=<:::988989:;;<<;968:;=?@@?>===<=C?;<==<<==<=?ACBBABCA=?CFFFFDA@><998889:;=>?==;::::;<<=<9;@CBCCCDEEDDBAAAABBAABGKMMMLIEDFFGGFEEEDDCFJNLLV\\\\`_J=TQ;<9899:9:;:;=@CEGGFEEEEFGFEEEDDDFFFFEB@>?BEGDIPLHIJIECBA?@>:<=<<<;979<BFINKCIJB?@DGB@DBBAAAAAEKOOMH?<;87679?CDDA?;7<A@??A??WqdR=4898;?CDA?>940002772...143:D<@@<;7200221.+)()*+.15421/-./464443224>NJ:20134:DE:96.4=:244447558=?@@7.18725;=5-*(*+----1443036-+432631/07>88=DA?;6347884/*-359;;;;<;>=89?@;20441//-+*1840///---,/32-,2533<>3))),;D;3-*,13135886489763.+*()*(+.,**--/220/020,+,,**(&.85+'*,))*)),0256533685.,,*))),020+++++/214<C9..23.)%%*-+)*-0/-+((+-''(%&).772./11-+++,,..5=<8110:HOZ_]T=/43/./01148:5.**+*+,5CNMC;861536531/261573/)),.26>GH;54464-7QXC124,+.0,)085..15544307JZ^aalstvwfA1<;1,.03<AA:;A@;44476655559CHFE938416867:=<4,+/-/E^_PIS]nW+0<DD=@IZZ]`^]__\\\\^][[[[XXXVTSRRRRRTSRRRRRRSRSUTQQQQRSRRSRSTTTSRRRQRRSQOOPPQSTSSTSRRSTTSRRQOONNNMMNNLMNONOQPNLJIIJKLKLMMMNNNNNOOONKNONNOPOLHGIIHJMOMLLLJJJJIJLKKKLLLNOOOPQRSSTTTUUWWXXWTQPONOQPNNNOOOONMNNONMLMOPOJGINONLOX__^ehaXVUVZ^aaaflifiopokijji`_``ZXWXYYZ[[[ZYYYXXWW^iihlpquwuy|pfcbabca^_bccaalurd[ailifcdffdca]_fadtqfbbc`\\k{xwxsplhffhsv{urxfca`bcbchmonmkhghjjjjje_m{pa^abdefeedaadjgdbdbabccdcccedcdeecccdddddcdc`eoojfejvz|y|xlgbbadjmnmmqwtnkhijqph^X]Z_kb[frk`]Z]_^_ZYjnptwy|vkkjb\\UTXXY`^VZ`cfbd][__[[[\\X\\xkW`ddcbefeedddbbe``kiba_]]]]]]]^^]_``cj^qs`VYY[\\Y[`deehgca``bcb``\\ZXcke_\\XWW][XWWWVWXWWY\\ZYXWWWXY[\\[[\\\\Ybtplf`XVVWWWWVWY[\\]]_`aa`_X]álQZa`efb[YT^da`_Zcilib\\VV[\\W[uqc\\[[]^][YXVRPOOQRW\\\\Z[\\[[[\\ZYXVUUVTTRQVYRXWVRONONPRROUe_MLSVQNQRRRQRRRRPQRUMI\\^[\\MNt|QAIQ[ZWWWWVVVVVWYZYXXXWXXXWWWWWWX\\^^\\XVVVTRPPSUWVWWVUVUUUUTRQQRSPPOMKLJIHGGGFGHJMIOQHMKKJKLLLKQSNLJKKKJKNNLLIIIHGGGFEDGIINQRTW^iiXQQ[`fnxlJAB@@DHEA@A@@AA??@@???>?>@KWZZ[]`_SG>:::9::99::8;<:=>;987665434;AB@>;;;:;;<>@A>;;::;<<<<<;;<==>????A@?>=>??=97778;>>>@ABDGKGBAA@CDFF?;;;<==@?>?@@?>??>>>><<<<98987::::;:98<<<=???>>>>===?=;<==<>>?>=?ACCBBBC?;=ACEEDBA?=;9::8:<<>>>@@?=;<;;=>>>@CA@BCCCDDEEDCBAAAABBA?@CKNNLKGCEGGGFFDEDDDEHNPNJPY\\_Z@L^S=9::::::<<<=ACDEFFEDEEEFGFEDDDDEFFGFFDA>>@EHEDJOKIKKGBA@>=::==<:::9:<AFHIOPHCC@>AC?BG@B@@AAACEHKLMPKD?;9879@FECA><7:><:?A?Eif;86777<CB@A@?:5/./03640-/343:IF?<;961.12320-+)*+*,141.00--.3555555526FE7114>EEB9453+-990*/-276658DFA8./674695-+))*,-))-5:874691576471/..1.4;CC?<97799872*)+,289:;;;<?=88=?91141//.-*)/77211/---,/55.,0435891**,.2:4,-..144556:;9::7661)%&)-/-292.0124544340+*+*))'&/83*(--(),)),.069867787/+,.,*),/0.,+,+,.226;61,-22,(%%*.,+-/12/*))(('())(&'.0,/00/,))**,./597511--:JW[^V9,310/00104994+(*+,-.29FD;8520/.,--//285//,)(),--5>>7489697**=F;06@6)$$('(-6779:74666BV[bek~{yN0330--,5>BCHD?=5112001258>CHLJE:223223126981+,//>_eRF?GMRzu;#,1016=\\]`a_^aa```_][[[ZYWUUTRRRRSSSTTSRRSSSSSSSRSSSSUVVVUUUUUTTSRRRRPOPPPQSSRRSRRRSUUSRRQPPPPPONORSTTTTTSSQNLKKKJJJKKKLLLMNNNNNNMMNOPPOOMKIIIIJMMMLLLKKJJJIJJIJLLLMOOOPQRSRSTSTUWWVWXYUPNLMNMMMNNNMNMNOPQPPONNPROHEHKKLMSXYZ]bd`ZSRSPTZWU_d[X`fc`^[[_]\\^_ZYZ[XYYYYZYYYZYYWY[XV[[[gywnmlkhdfb^aa`a`bffeinqnddjmka\\iqkiif_`iklmjgeca`]brql}|snifegqx|dk{ibbbbcaaejoonkggikjighfca``_```aceddcbb__bebcbbbcddccdedcdddcccddddccdebeppihjmtz{~uolfddfjgbbdlppqsleemjg[[[[}UVW[c]crhXWYZV^r|zulhihgcUU[_`c_^egggad\\zxU`^[[YY[l{c\\X\\__`cghgeeeegdcb`dgfgc^]^^]]]^_]__^fhf\\guaW\\[[\\Z^bddcefb`_`abbba^[Z`fa^[WUTZ\\ZYXVUVVUWXXWWXXXXXXYZ^_``[`r{qkf\\XWWWWXWX\\_``___aa_]Vh׾`TY\\ddb_aoe`c`_^X^a`bb^^^^]Y]x}n_\\[[\\\\][ZXVSQOOQSW[\\XUY[[[_\\[WVTUUSSSTaRR]WTRQPUY[WPPSSPPQTVTSTTSTSRRRTTSQTRTd`XbWFeeLNNQUUVVVVVVTVY[ZZYYXXXXXXWWXWWXZ^_[VUUURPPPRVVWWWVVVVWVVUSRQSTRPNMMLJIIHGGFGGHIHM}SHMLKKKLLKGLSNNLJKLLMOPNLHHIHHGGGGINSY[aflu\\RTYZemgN?@B@@BDDA?@@??@??@???>??AAKUXW\\][SF;889998:::;9:;;:;<9777654335;@A?=;:99:;=?BA><;:;;<<<<<;;<==>??@?@?>>>=<==:8878<??=?ABCEFEEDC@EFFE?;:;=>><=?>>?@@ADD>>>>>>=989768:::::99>><=>?>>>=>===>>=>==>@A@??@ACCBBBB@=>?@CCB=><<;9;:8:<>@?>ACB@??==@@==??@?ACCBCDDDEDBBAA@AA@?=@FKMLGDCEGGGFEDDDDEGKQSNKMV[_Q@Y`P:9;<<;:::;;=AEEFFFEDEEEFFFEDEEFFFFGGFDB??>BHE?FOKJLKHB@>=>=?>>==<;=@BCDEGIMH>>?>AEBDJ=A@AAAAABAAACGKHC>;:65=GFA@;<DH?32?A;Jxd6?:.444;;:DG@<94.,05567524754;LL=;;851.1221131/.,,+./.*,0/-.3777888834>=5218GJ>0'-20)*6>7(07477745FLC8..47630-(())*,+')1:?93/,-.:;552-,--,(1=EA?<<;====<3.251499:;;;;A;559830-++./-..*+187431/.-+.482-.10143/))+,/77///-///0.,385576671*)+165/-6965:<867:82.+))+++-.04/&)21)*//00-.7<;::97532441.+-/0144/--./174)%*-/,*+)&)-/35541*),+(('()**)),.-./.+*)***-/256662.)!)9FS[L.+62/.00115980)()+.00237630-+)((('+07;@4'(+***++,/45117;512.',22//:<4/&%%&*5;?@91/342;MP^nu|ox_9764228BCAA?<86...0/0/16?GD?BFD=33321.,/13-+,/-3P\\QG<2;BAmU&$)&'-4cccb__cffec`_^\\[ZWUUUTSRRRRSSSTTSSSSSSSSSTTTTTX[\\[YVTUUUSRRRSRPQRPPQRRRRQRRRRSSSRRSRQQQRRRTWYYYXVTSSQPNLMMLLLJIJKKKMOOOOPONOPPQQQQONMKKKJKLMMLLMNMLLJIIIJLLLLNOOPQRRRRSSTVUTUVY\\XROMMMLKMNMNNLMNNOOPRRPNPQRPKJLONLORRTVW\\daVORQNSRNRYVOOTYXXY\\bikg`XWYWWXXWVYXYYZYYXZZYXYWT\\osjhghigic[\\_`a``dkkjklnmikpqhh{ompohfkqtlfhhedb_b_Zo~xpjgddnw}ahvla`bbddbdhlmnkghikjigdba`aabaabbcdcccbcdefdccccccddccdedcddcccccccdcbcgddqqikpw{xy{v~mljgfeda]bgnmgotqe^Z^X\\thcdbZivcXZ]b]h||xys^Yabeli_Z^cgjkjhfhb^`YzVb]Z[WVhulh_Z``_`dhhfgffhcdc\\pp_``^]^^_`]b`bkidZ`|cY]]\\\\[`feceefda`abbdcc`\\Z[^^]YVWYZZZYWVVUUUVVVWXXXXXWVWY^cdde_dvwqmd]ZWXYY[]`bbab`^a`][VwҺYUXXZ[\\fvpcc`^]]]]]\\\\^[]`_\\_qtb[Z[[[[\\[ZXVSQOPRUWZ[UPUZ[[b_XWWTTTSSVOPYxVNOSS]haWQQPPRTUVXZZXWVTRQQRRRSVVVO[_RcjPPZVRNILPTVVVUTSST[]\\[ZZYYYXXYXXXWWUX^a[UUUUQOOPSWWXWWWWWVXWXWUTRRQQPONMLJIIIGGGFFFGGIvUHMNMLMNNMKMPPOLJLNNOPPNNIGGGHHHHKOT[bfiq|pSNORZf_J@@AA@@ABA@?@????>>>>>>???ACLVWX\\ZOC=;;99899::;;:;<:8;98766553236;>??<:988:<>ADB><:9;;<<<<=<<==>??@@???>>><;;<<;:78<??>?@@ACCDEFEDGGGE>;;<=>>==??>@@@@EMICA===;7776668:::::;@?<;=@<=<=>>===>=>>?@@A@??ABDCCCCB@@BCB@A@8;9:;:::9;=AB?>BDB@A@>?AA?>@?@A@ABCDCDDDCBA??>?>>>;;AIOLECDEGGGGFEDDDFHLQSPLMR[]HH\\XH9;;=<::98899=CFFFFFEEEFFEEEFFFFFFFFFEEDBA>>CFAAJKKJJFA??@DGD?@ABA?BCBBBBDDA><;=ABA?868@>@CAA@>:768:?A@@?<84;EEAB>9I\\T;-6A<Ni<+<3///0434<>8562/03777:;;::85;HI=:;6310121137763.++++,**.0..3799998749;3...9EB4+-/330.-5;31><7891/BKA5.-178/'))*),/0*)/7;:4,(''/<757.**+++.6@EEB@?>=??AC?89=;<=<:;<>:40/2/,()))+,,+-//./59864430..024.+--.01-((()2<:1-,)-.,*(&)-*+++.3/*2:9641,-6:9=B;52310-*)*/221012-$*85+,24451/39<<<;5-189620...037620.-,/1+&&(++'(./((,27:95,'(,-('''''),020--.,)()++,.156665,$)2/+,?TB&+84/.0121671*%'().0/0//.-,(''&&%)58:=B6+)*,,+-,-/3;;303/*+,++/00/5964-+++17=B@3(*-/.6@G^qwjVdy^:8877664349=:6771./1357;DHB<<@C>32330.+*+02472,=WUF=0),.6c_,&,)(*0ljec`afhgfda__]ZWUUUUUTSSSRSSSSTUTSTSTUTTTTTTVY\\^]ZWUTUUTSSSSSRRROPRQQRRRRRRRRPQRRSSRQQTVWWVUVWUQPPNOPPNNNNMKJJKKLMNNNNNONORPPQQQQPPONLLLLLMMMMMNMMLKJIKKKLMMNOPOPQSSRTTTTRQQSSRQQQOMLLKMMMONMKMOPOOQSTSRQSUROQRPMNNNQSSX`c`[TTSPNLJNTUQMPUX\\adhjje^]\\XWXXYYWXXYYYZZ[[[[[[XU\\mrnnmjghf[Y^_aa``gpnheimmprqw~vemnkikouqllkihfbdb[fupmkfblx{|blx|ve``ccbbbdegkkhhihigfefghjtj]^[Z`acca``adefecbcbabcdhlf`cedccccccdeecbbefdlnhhuu}laxmkfeegc_]^p~eoq\\^[]f}~xvzwwuildnjfw{soh]zplomof]agnrtrokgZZ]\\T^^[[W`|dhrkfgc_aegggggfgfhscbr`b`^]_a``_rpeeeaV[tcX]^^^\\biighjkidaccbbccb^[[]]ZXWXZZZZYWVVVVVUUUVXXXXWVVWVW^ehiebinssoh`ZXY[^_^bc`^^]\\^]Y]̴TUVWXZbknmdcda]^__^_]\\]Z\\`_]]ed[ZZZZZ[[ZYYVVSQPRUYZZWSUY[[^\\T`ZSSSSSUJBqmONVWR_cWQQU[\\ZYZZ[]]\\ZVSTUTVYXVTUVQSWQXgeULEDFHNPTVVVUSRPNPXZ[ZYYYYXYYXXXURKMX_[TTUTQOOQSWXVWWWWWXYYWUUUTRPPPNNMLLKKKIHGFFFHEDfÿWGMOOOPQQQOPOQOMLNQPPPONNIGIIIHILTY]bfimyzRFKKVkhN?>AAA??@AA@@A??>>====????@ACNVWYTO@;<<::9:::;:;;;;<:8;966655543589;??<9998:;?BEB<:;<;;<<<===<==???@@@@?>>><;:<>?<::<??@@@@ABDFEFGJIJFB<;;;<====>>@@@@>?IRLHBAA@8377668::;:<>@>><<@;;<<?>==>??@@@BBCBAAABDDCCCCABC@?>AB9:;9;:99;=@BB?=@DCBA@>?CCBAAAAA@@ACDEDCCCBA??=<====;AKNIDDEFFGGGGFEEDFJMSUPKLQZXERZP@7=;;;:99<:779=BFFFFEEEEFFEFFFFFFFFFFFFEDB><?EFDEJKJGA<=?BC@==?@ACCCCBCCCCB>;:;=CB5/3/4A;=E@AA=;5678879?B@:6:@CDC@7<Q\\WH<@=PM034320/..042/-.01244579=BC@<71;PQ>6;:4255:>75:;93,**+,,,-//.058888765587-(,.494-.0012230-6=6<>8781)7G@50+-590(*-.-057-+5;840,,*)16666.)**+-8BDFGEDA:8<?@CDB?>=;;;:<@C9+'-.)'(++++,,-,-2411599689652,*//,+,./0-(&)/4;7-(%'.1,*((''''&'+.,+1851-.00/4:=A5++.---/1.1332.02-$*>:)*034662/378<=3*-552/,+-041/010-+)&&&'')+($,9:-(-29<:2)'(*+(&''()*,3972,*,,,.1322376330&.K[J0#+FN3#,2/.//0054-'',*'+.,*)))***)('%)6@:425>A3*(),20015=A;/)))+-./2437==1-.1:956<>:/)(*-026;VknypQ>DXN8:<<:1,.,-5;;9<;3.-.7;;?EC=98<A>655431(%1BKIC;;GMD90-+*).VuY.%**,/1nkc__add``bba_]ZWVUUUUUUTSSSTSSTUTTUTSTTTTTTVYZXXZZYWVVVUUUTSSRQRPPQQQQRRRRRRQPPPQRQQQQSUVTROOPPNNONOPPOONNMKLLLLLMNNNOONOPQQQRRQQQQOPPNMLMNMMMNONMMMMLLLKLMMNNOOPQRRSTTTTTSRTRMILNMLKLLMMNNNNLLSWVRPRUVUSRRQQRSROPQRTTQT\\`eh`TQPMJJJNW\\VMNTX]^]bmnhffb\\YZ[YWWXXYZ\\\\ZYZYYYXUScysmrnhhhbbhga`_\\`jqmiimsspq~zdgihhhjmlqvqigedbb_^{tgilkflvxv}peltxtrj^]ada_^^_^biifhfffho~{yp_\\aeeb___`_`bcbb``acclvf]decccccccdedcbcjkacnjan}{la`pugoeeefig^cuuf[Yeyta^ilos`hniigYbȆw}xsfbbgotvx}sdVZbddO^[Wa~raY\\iprrc^giiggggff^j}{f`b`___`beexzgcecZRjd\\^^`^`ilkkklmjb`bddcccd`[Y[[XWWWXZZYYVVVVVVUUVVWWWWWWVVUUW_hhjg^aluxsi`ZY[^][_d_]]^X[^Yd˳oTWUX\\\\^b`Z]bc`]^^]]^^^]]]^]\\[\\[ZZZ[[[[\\[YYXWUSPQVZ[ZXWWXZ\\[WS[`UPQQRRLMnnMQghUOWVNNXdgca^]]\\^^][YXYZ_dgfb^WPQVTOUXg\\UOJEGOQTWVVURQNFEOVWWXXYYYYYXXWUSKIQZZUTTSPNORTVWVVWXWYYZWTSUWWSPONMLLLMMKKJHGFFFFEBcZGLOPQRSTTUSSQQPNPRRPPNNMIIJIIHIOVZ]^ahr|y[HIOTi|dB@AAAB@??>??@A?>>>===>???@@BCPXWVIB;;<;::::::;;;;;;::9;9666555456838?>;9;<===<EGB<;=@?><=====<=????ABA???@?=:9<@@=:9<??AAAAABDFFHJLMHC?:;;;<===?@@A@ABA?@JPKKLNOA376668;;;;<>@<<==?<;<=?>>?@AABBABDCBBCCCDDCBA@?=<::;@C::<9::::<?BCC@>>BDCBB@?BEFDBAABA??BCEDCCCBB@?>>>>>>>DJHDCEGGGHHGGFEEFGKOTUPKJR\\QL`WM=6<;:::::=>:68:=CFEEEEEEGHGFFFFFEFFFFFFEDC?<=BDDEGJJE<89:::9:::9;=ADDDEEEEC@<9=AA<21669?>DG@?BA;5588777;?@;79?DFB;76;FVaZLA?:77970110//1.+,-/1466688=IMD;8AYpq\\C841/4;@@;:==6-***,../12.-2777654556520020/-*)+,-,+,0762:=<=873/,,=A82,-694.0333588-0;<72021+)+340.,)**).9ADCB@@><;=><<AGE<64379<>B:))351//20*).0./0242/.16767:<6+(*-0////-+(&*3:90)'&(/31000-,.22240.+*+***(,21/377+%+/.-.///1111..0-$*>;&$+.26840/03;=3+/1/..-*(/3/,-..+(%$&&%&*-&#.?A84559;:2(((('&%'&'/316951-+-/035664341/.-2QkfH1+%6WI$)<2-+*,053,'(-*'),*'''(),+**)-9D@81/2DTE1($)2200139DI=.--/11//29AA6142>B2.686/*)+.0233BZgiT=9;@@>==:727748<<?C?70,/8>=;BF?3.3:==;63122(-EVSJFDDGA/,-0.-/+Md@)')*066ie_\\\\]_^YX^cb`]ZYWUUUUTUTSSTTSTTTTUTTTTUTTUVWYXWVWYZXWWVUUTSTSQQQQPPQQQRRRRRQPPPPPPOPQPPRRQNNOOPOOPPOPOOOONMLNMLMNNNOPPPPPPPRSSTTSSRQQQPNNONMMNOPOMLMOMLLLMMMMMNMOQQPRRSUVVVVWWTOJJJLMMMMNNNNOQTZ``\\WTRSTUUSRQPRRQRUWYWPLS]bgkcURQNNMJO[_VKKOTVRTaijfbc`]\\WUVWXYXXWWWWY[ZTTZTZttchonkjmotrf_`^]_hrphlrqs|~yyyghjigfjjdp}uiddc```]hx^^krnlprrruwvqpomvtc_```afkmkh`]ekifeiwztxxxvqh]\\aca`_abdegbcdcccccccbcddccjrmdejgaeyxx~vs}vaahh]l|oigghkfjnX[dozsQT[WYr}_aghllvzu{}wohbbinryxaU]kbSQZ\\vm][ilbv~q\\_jhhhgggjmm~nveafgdaa``__`_flgqzmghfeXnf[^]^_fqplllnni`^`cbbccca]YXYYYYYXXYXWVVWWWWVUVWXXWWXXXXVUUW`hlk`Z_kx{qg_Z[\\]Z]hf[Z`[Z][jʲ_SVTVY[Z[]^___]___^__```^]^^]\\]][[[Z[[[[[ZYXXWUQQUY[ZXWWVX[YVTQ^XLMOOPPRZKMXob[TQPMWinhcb`___^^^\\]^\\^dijljkcNHU_XTPUVPPNFELQX\\XUTPOKHHOQRUXYYZYYYXWWWWUOMTWVUSQOOPSVVWWWXXYYYYVSSUXXURONNNNMLLJJJHGFFEECAkį`KMOPORSUVZ[XSQOPRRRPQPMKGIJIGFEKPQRWcoxzyp^OMOWao|_<ACACDB@????@@?>>>===>???@@BESZWOA==;;:9:;::;;;;;;;:8:;9755566576848?=;:;?BGGBHJE<;>AA@>=<===>????A@DJG>>AA>;:>BA=99<@@AAAABCDFFHKMOEAB=<=>>???AAAAAABCA@BJGILNNI<98787::::;=>;:=@@?>?@@@@@@ABDDCDDDDDEFEDDDCBDB<7979=E::;;::;<>ACDED@=ADBAB@>@CCCBAAHHA?BBCCCCCBB@???@@A@AJG@@BEGHIJJHHFEFGHKOSSOKHT]QZaOK?7;;::<<;<>=::;<@BDDDEEEFHIHGFGFFFGFGGGFEC?;9=CCEGIIB8677889:97778=EHFFEFFE@::@C>578765:EMJ?=AC;55888978:;<87=EHA:9:88=CUaV:04:?801211/.-++-257989:9>KOB6=cqS5.77:B@=>@>3))+,..0234103763445567516:5/,))**+*(&(+4><7>@><731/069631256753566752/7<82-096.*(151())*))*.2544678;?BB?;>DD;64049;=A;-4B@:401/)(/1/253240*'.5326;9/(()-46.)**(&-8:3*'&)/547>=:327?@751101.)(**(+1200,'',010/0/0000.../.')63%\"(08885211267.,21-02.**-24452.+'%&&()+--)&,6=@@:799:8)&''&&&&&&*6:73)(12001345543//1++MidM41:21FH:<?1())*.30*&')()**)*))(*/22/2>FC637:>CSM7*(&*..,,.2?S_N6.132,*,2877?806:1+044/-.1469=;:GSPD:8@B?=94122416A>22>@60-8GE<<DD92./:>><2)*34,4ISMILMFC?.-1-%+,#JS'$,)+376c`\\[\\\\\\[WTX^`][[YWUTUTTSSSSUTRTTTTUUUUUUUUWXXWWXWVWYXWVUVUTTUSRRRQQPPPPPPRRRQPPPPPPNNPPOPPONPRRQOOPPOPPOOOOMMMMLLNNNOOPQRQQQRSTUUUSTSQQQQQPNMLMNNNMLMNMLLMNMMMMNNNOPOOPPSVVWXXWYWRNNNNMMNNNNOSX\\`aaa_[URRTXWUSRRRRSTVYXRKOY`cjlc[YWWWTRV\\^VNKLMOOQUcld\\[[ZZ\\^``b_ZVZaeiqpbUVVWho_[emkjqtsuoecdb_^honosxy|zilnkiioofp{sjefdbbcb_cmwy`Xitnklmmmnoqtxwkowc^b`]h|taaghdnwi^]aaabcba`ccbcccccddccccdejllkiffdgrw~}yroqwyrhabhoxsnighigh\\_c\\d|wh]`gaY`w͘Z[fznebbgnsrstmfdfkovxbWaqjtޟVMqc[aXtltr^cigggghfj~nfkifda``__acdgld`rtiefeand]]]__lxuonoppld^^_``accb_ZWWXXXXXXXWWXXXXYXXXWWXXXYXXYYXWWVZfmhc`__n|xmd^Z[[WZko^X`_\\\\\\tܖ[XUUVWXZYZ\\]]]^`cccccbdfecaa_^^^]\\[[[[[[[[YXYYVQRVY[ZWVVTTYWTSRUVLJLNPPMSQOORT\\WSR]ntidcca``a`^^^^^^_`cgjjliTEKddQLLPNGDDEJP[YWVSPNMPSTSTX[Z[[ZYXXXWXXZSLQVUTSPPQRTVXYYYYXYYYXVVVWXXVTQONOOMMLJJJIHGECCCAnĳdPMMOOQSUW[b`TPNPRRRRSQMIEHJHGHKQTTXet{}zqdYQQU^`erU:CBACEB@????@@?>>>==>>@@?@ACGTZWG><<;::9:;;;;<;;;;;;89;974556555689?>:89=?BHLIJJE<;??==;;;=>=>??@AA?J\\[LADDC?<ACA>:;=@@ABBCCCFFGHKQNACFB?????>?AAAAAAAAABBCEEEFHLJA:98799::;==;;=ABA@ABCB@@ABDDFDFFFFHHHGFEDDAGJ=2647;F<:<;99:<?AA@BEC>>BA@@A??A?@DBCPTF>@?@ABABBA@?>?AABABE;9CDFIIIJKJIGFGGILNQRNKIRYXaLEKB79;::<=;;<==<<<;<BEEEEEECEHIHGGFGGGGGGFFC?:8;ADEGHF?54779;;:87876;DHGFEFFF@:=B@;989;835DK@8<>@<7677877789:86;EG@::<<::8=aiQ7-9?7012131,**+/59;<<<=<>HL?3I}zQ8@>4;FDCC@5+*,0100344212352234565/.571-+)+1.*(*+-/3;A;9AEB>73345333111376/.2662.2;<4,)0;:1-,132'&))))('''(*/0016AILH>:;867347:AF@9AH?6/,)('(-30/112573+(.111331)''&)//++*)'.95,(('*2415?C<0,5=?6/.2120-,,/-'*/-,)(*,/./////000.-./1-+//*(,5<:3035420,+/76231,+-378<?;1)&&&&+13/-,+)+8C@758;?;*''&&&&&'''.:<5,(/97102345541/0+:]^I915?=4/1?J?-)*+**--*())'*,+***(+047:=DLI9.0:BDBGI5(6933.*+/4?I[^?-252-*))**2@;21++,.01038;?EIOI>>?9?C79@>:6421/,+373-.5852/4=?=?E>6FC3;DE>1,.681/7?BGQRC=@6/*((.*\u001dDR*'-(*230_^][\\^\\[[VTXZXY[YVTTTTRQQRRSSSSTTSTVUUUUVWXXWVVWWWVWWWWVWWUVVUTUTSSRPPPPPQRQQQPPPPPNOOOPQONOPQQQPPPQQPPOOOOOOOOMLMNNNNOPQPQQQRTUUVUTTSQQRRQOMLLLLLNMKLLLLMNMMMMNMMMNNLNNNPTVUSQRUUTRPNMNNNNOQUY^`\\Z`ca^ZVTVXXXXVVVUSSUVSRSSX_eiifc`\\]_]XUX^]ULKPRPLRdog]X]kqoqnmkjmrx}gXVX_db]_gfdkrontqebab`[izuw~kosnhkrunrukffhggecdffhkpvse\\ktigjkklnoqttuqp{j_^[jhfhfv~wc]abe[\\_baabccccddccccccdeghgeffejkk{odfffkxukkpto{wwqighfhv_aegg}]Xbeto\\ZjzvXc|x_\\]\\_jh^hnmlkmqrsjjogdjsfمb~`T\\^Ynpqukihiihgghcninlea```bdfigkjVWordeedib^^^^[myxsrrrtqha]]__`ccca[WVUUXYXXXWXXXXWWXZZ[ZYXYZYYYYWWXWXdmida_\\apxsia\\ZZXXhvbY_a^Y\\εv\\\\YXXXXXYZ[^`aceffggecdfgfdc`____^]]\\[[Z[^a`^]XQRVXYYYXWSSUURSTTUQNMOQQNQONKJQRTVTfmibbccbbbcb___^]]^`befhhfWHGP]ZONQTROKIJJSNNUTQPRX[YZ[\\\\\\[[[ZYXXXXXYTOQUUSQOPRTTVYYZYXXXXWWXY[YXWWWTRPOOMMKJJJIHGFDCD?oѿƹaOLMMMOQSTVaeUONRTTSSTQMIEFJHHS\\abeku|}}{oaWPNUZ`qhD>DBCCECA@>>?@@?>>>>>>@@@AAACJWYRA<=;:::9:;;;;<<<;;;;99:96444554358;?=:9:<=?AGJJD>=A@>=<=?AC@>>?@BC@EWce`VJGGC@ACA?=<=@@ABDCBACEGILPE:CHGB??>>>?@AAAAAAACBB@DFECJQPF=<:99;:;<=?=;>ACAAACDCABCDDFFDFHHJKKJIFEDCAEK907854F@:;9989;===<=@B><>@@?@@?@@ADCBKOD<>>=?AA@@@@@??@AA@A;2;GFHKIHJKKIGFGHJLNPPMJIPYYT>@ME98<<;<<;<=>???=;;?BEEEFGDAAGHHGEFGFFGGFFC?:8;?CGGGC<6588999989998;BFGFFFFFCA@A><<9::820>C638<>>864355679::98:AE>8:;<==??I[gVE>781/010---*,06;;<<<>?>BF=6TjI?@>>CMLHC7-+-12212222112330/-.30),10,,+(-40+-68::;<>95=HF?:64321///..177,)398216;82,*2<;62,/22(&*)('''((-2/+)(+5ANVI62101003:GOLHFB70,)%%%',1.))+048;7,(-1.++*)'&&!'.**+)'*,-,+*).7:55=C8,)06:7./3-(+13/42('(())(*--,***)+021-+/231-/20/27:92+/692*'.8:731-*),8=:;A;/(((&*487/--,''4A<005=D='&('''&&%'&%-55-(3?:2345565354.1R_M?726?:/*.<KB0/.-(&)+,-+)'+0.+*(-8>;3:GHIK?36:<<>@NH/B[VH4*+238EKL<0361,*)))*,1494)()++-18<@ISX]V?2>NLFB42:?@<850-+,-0211222/+7HA8<;AepC6DE@=;;:93,,23@TP;6@=4..78/#EY1$)%&/22]]][\\\\Z[]ZVUVVWYXTTTTSRQPOQQRSSSRRSTTUUUVVWWWWWWWYXVWXYWXVVWWVUUUTTTSQQQQQPQQQQPPPOPOOPOOPNNOQRRRRQRSRPONNOQQQQNLMNNOPPPPPPQQSTVXXVTTUSQQRQQPNMKJKMLIJKKLLNNMMMMLMNNLLLLLLNPQPNMMQSQNNNMNNNQRSUXYWX]aaba]YTSVZ\\]\\[YURSSQSTMO[bceije]XXZYQLTcd[NGSd]NPaonikpsrrliy~gVZ]_adhlhacmqnswh]^`^Yf}{}}npttmnuytpidegijjfccfjkjjloidnqfdiiikmnopprurqaX_hjfhkub^]s^_aabccccdddcccccdeffghgffljixwspfhhkvwolnoposuutkdccgo}dXeih|Y]bap{m]]xvxzrlfd`[\\gnvhZ_cchjnmlmcepkdY`gZ䳃qe\\\\[Y^iohpspokikihgfe^ao{xigcababfgiijlpiY\\lkgegd_\\^^XXm{yutstvxob]^___acdb[WXWY\\]\\YXWWWWXXXYZ[ZZZYZZZYYXWWYYXbnld``_^ertmd\\ZZZZbti[\\`_X^ǭޟca^[ZYXXXWZ\\`higghghhfdbbbbbb`^]^^^_^][]YY]egec[RRVSUX[ZYVTTRPRTTUYVSSSSPONOQQQQUXWYSSVZ^acdeedca`^]]]_abcddd^UQLMX]VSUYSMOSX[SOTVTVX[\\[\\]^]]\\[[[YYXYXWWURRSTRPOQRTVXYYZZYYXXXYYYZYYXXXWUSQQOMKJKIIIHGFED?cĿ]LLKKKLNOONXcWMPUWVUSTQMIFHJJLT\\^`fmqv|zm]QLIPYmuR>BCBCCDEB@?>?@@?>>>>>?@@@AAACMYXJ<<=<;:::;<;;<=<<<;;:9:876545542248;<<:::<=>?@GKC=BIFBBCEGHGDB??ABBES^_ad]LDFEADEBBC??A@BCDDBABEGKOH86AIJFA>@ABAACBABBABCDDBEFGEJPNG@><;;;<;<=@=;>BCCBCCDCDDCDFFFEFIKLMMKHFDABEIJ=2=>34FF:9999:;;<<:;==<:<>>>??>ABCDCBCCB?>>==@A@AA@@????@@?:3<DDHKHGHIIHGFHJKLNONKIIRZSE>ALG;7;>=<<<==>@BA>=<=@DEEGGEB?>CHGEFFFGGGGGE?989=BGJH@979;:9:99998889?FGFFFGFEEA?><:::871-6::::=@?911135789:::::@C;6999<;;A<@O_bQ=4/--/-(05-+3;=<99:>A>>@<=e\\;?]_?IPG>5-,-./11/..0111130*(+1-+00--.*'.5558<?====<734=B<541/,,+,-.-07:0*05427<;410.4<;:7,-43)(**)''+4=CB6)&(,.5GVJ3.,((*/2;KTRL?752.)&&&&**('(+/269:6,),.0/-*&$('(+*)'&'((*+--.4;?>8:?3()*+22--30--1412/('&&'()),1430.,+-11,+28610134565443-.6;3)+7:73.*,,*(0;==;1()***.541.*))(&0>;.+2;>6)&'''''&%&'$'-.'(8A;578667648707MOE>518B7',=FC8421.))+,,.,))+.-+*+@RRE5=CAITI9764237L^@AmqS5+1A;0<F@82361)()*,/.).=@3,)'(*.789HZ\\`^G28QTJN?).<>;840/,*-3311012/';^R;<JfeDA?=?BA>:94214CTL;>EA>>AD=0*=I3.2./499ZZZZZYXXXZYWWWVVWUTTTSRQOPQQQQQQQQRRRTUTVVWXXWXWXYYXYZYXXVWXWVVUTTUTSRQQQQRRQQRQPPPPOQRONPOMOQRRSRRSTTRPMMPRRRSSPMNNOPPPOOPPRTVXZYXXYWUSQSQPPPNLLKLKJKKLLMOPNMLLLMONLMMMMMJMPPNMKMQPNMMLMNOQRQQPRWZ[^__]^^ZTQSVYZYWWYWURPLKMW_`dhkjbWNPUSKKYhlcPLbfTLQ^mtpfdkjcs}wx`]`cekqtqkijllmobWWXXXaz|vz}tit|xttuqkebeggjkgddegiiijkjinkbchjklllmnprtpg]Tfqfhihikx}kYy[ec`bbbbcdcccbbaaa`boyidejhk~wnz{y{umjopoqtyqe]addcfn~][eamnW^b^g{o^`ef[lorrfe`XZeoxn^XZ\\]_^[]aenrrsd_iZExժzY^`[]dhjiippllkjjihhgb_^X^ghpe__`dhiihklnsn[Zhkfgd^[]^UUmzyvuuuw|ra\\^^]^`acb\\Y[_ba``[XWXXXZ[[Z[ZYYZYZZZYYYXWYYY`npe^]__aippe[XXZ_bho_Z]_Xh¬޾tcc_][ZXWWWY[^ehgghhhgfdb`a```_]\\\\\\\\]][Z\\ZYW\\`a`[USXc^XZZXVTTSQQRSTXWUTSRQQRRRSSTX[]WSPQTUY]`befdb`___^^_abbbcegd]SU`[VWWRQW\\fga]XW\\]\\\\\\\\[\\]\\\\\\\\[[YXWWVVUTTTSSQQQSTVXXYZZZZYYYXYYYWWWXXXXVTRQOMLLKJIIHHGED>Mտ]JKKJJKMMLJS^WOPWXXVUROLJGHKKLLQRVboy{k[QMOSfuXACBBBADFEA?>=>?@>>>>=>?@AAAABCMTSC<==<;::;<===>=<<<;<:::876554431159<<;:;<<<==>EIDEJMKIIKKJGDCBB?ABBO]^^`_ZL@DEADGFHGDAA@BCDCA?ADHLPA47>IJIA?@BDDCCCCCCCBBDDDFFHHIJKHB@==;;=<<=@?=?ACCACCCCBDEFFHGGHKMMNNLIJE@AEJPJ<J>46HJ:789:;;<<<:9:99;=>>>????ACDEEDCCB?<;=@AAAA?@@???@@?94:ACHJJHHHHHHGHKLLMMLJILSTH>;>FH<8;??=<;=>=@@@@=<<=AEEFGFFD8:EIFEEFFGGGHF?:99=AGLH>98;;;:::9998889>DEFEGGFEFGA<<:;:96/*-6;:<@?>7062356879::9;AA:56668<>@C;6AQYJ3.,+--/<?30:A?9457;BDDEDFop@Q]EF=3/,,-+,---,,.02222.)(-/+-0/-/2-(/9=BBA@>;:=;53/2;<61.,**+-..-/6;6/-+-18;71...3;;<9..//,****)*6HPQJ7((*,++9F;--+'&(-1:JWRF2,6;3+('&%&%'()+.134674,)-683,(,8>;44;9.*,./../07==;4/1.*''',.//3555111/,('&'')+-.18<<;80+./-0;<611345763101/06;4.29964.+,-,))19@;)\"*/-/12-*)')++*.55-(+01,(&'((('&&%&%',*&.<A>;897656686024589933=5%)>D4/462--../.+*()**+*(5TYNB:97AUYC5873,+,6F8?pvT/(?XJ,*8=;6030)')*+162,6G=,&',.)041:QW[]M:7BLKLF.(4441-+++,1662/00/,&5Zkbds]>=<>CDA?A><79GRKELJA==C@7/.3:<CGFGA<=WWY]aec\\XWXYXWUTUTTTTTQPQQRRRRQQRRSSSUVWYYYZYYYXXYZ[\\[ZYXXXYXVWWUUUUTTTSSRSSRRSSQQRQQRPOPONNOPPQRRSTTUTROOPRSRUXTONNPPPPPPRRSUXZ\\\\[[[YWVSSSPOPPNNMMLJJKKKMNNMMLLKLMLLNOOONLLMLMPONMLLKJKMMNPOONMNSVX\\_^YW\\_\\XSPOPSV[^^^[SMMMNSZdhijh`TNRWTPR\\glcWPTROPQYeia\\bjpnr~zgehijlqsvwupmklg[XWWVVXkztb]vwcivunnniecbehikkieddeghhihgijdbegikllllmqsofcfYb~{~jgjfcbbb_gt|~|^hϯxqb_bbbbb_gvna``_^d|zgebhgpwo||{}ukmpqqrwsledcbbdgx`cec{`W^bgrr_[eedj~oibYVX]beb]Z[[ZWRQTU_wwq|tolgTQW\\_Z]mqpqqnplllkjiijkjhaZcqpcnb_bdfhjijkklsuh\\[agfc_]]\\XYetzyyzy{|pa\\]\\[\\^`aea\\]bdb`_[WWYZ[[\\\\[[[YYYYYZZZZYXXYY[^jui_^^`acioj_VVZac`jkZ[^Vr¹ӈ\\b`]^\\YWWWWWYZ[aegihgedba```^^^[[ZZZZZZaa_^YWYYYYVU\\rhZWWYUSUUUSRSTTTTSSRRSUTRSUX\\`dee^WTRSWZ]ababa``^^^]_``acfhgb_[[\\YYZ\\\\]^XW[[XY]]\\]^\\[\\\\\\\\\\]][YWVVUTUTUUSSRRRSVWXXYZZZZYYYXYYXWWWXXXXXUSQONLLKJIIHHGEEBAõgOKKKJKKLKJSZVQRWZZXVROMJGHKKKLT^cjx}l[QOQYylA?EBCCCFHFA?>=>??>>>>???@AAAABBMNL@===;:::;<=>>>>===<<<:987665542037;<;;<<<<==>@CCDLOLKMONKEAA@@@>?CKW^^_`_^TMHECEGFHHFCA@BBBA>8:DIKLE;5;JKHAA@BEECCCCCBCBBBCGHHHHHIIJFB?=;==>>?@??@ABBABBAACDEGHHHHJMMMMNPOONDAAFDFTS;89IM:78;<=====:8888;??>=?A@>@CEGFDCCA?<;=?@AAA@@@?????=859ADGIJIJKJIHFHJLMMKIIIMSOA==:AI@::=>==<=>?@AA@?<::=CDEGJJD95=FEDDEGGGGGF@<;:<@GKF=79;:::::9::998:=BDDEGHECGIC<=<<<:5-)-5724??81374324668988<@?;7533465;A@;7;HK;1*+-2;GF:7?B<545:?HMMLGA`sFe~J<2+,-.00/-,,+,.133420..,+*++.2487//:EGGC@?:9>;52028;83.+))*./,,-3982.*+1981.-,/6<><4/-...,*,-/7FRSOD1'()*(%.6/*.-)(+,.6CRNB2(3>6*)(%$#%(()*,0223541++2651(4VaT?;ND6111100/19@?80(*.0+()-58747785487,&'')*-11.-09?>7/*...4>=4002456632/-,.27414776641/.-,+-29=2)/3.-0/)&''*.1/,*-,))**'&&'((('''&&%&,/.6>@A@841.04761-*)+0EUB4:0&*67,/551.00110.,***)*(*:RL=7766J\\U;3><6-+**($?tv_@0LcY4\",9@9.01+))+*.8>0&68+&%+6,*597BLRUF9<?CFDE:+,./-*''*-38742,))(.2K{eIA?IHHHIEA?>AHPPNPRD35:51//6DEIOQTK92Z]fmtzvkb\\XWWVTTTTTTSTRQRRSSSTTTUUUUUWY[\\\\\\\\[\\\\]\\\\]^^]]\\ZZ[ZXXXWVUUTUVVWWUSRRRRSSRQSSQPPPPOOOPPPRSTTTUVSPOPRSRRSSPMOQPOPPPRTTUX[\\\\ZXTRTVUSRQOOONNOOLKKKIJLLLMNMMLLLLLMOONOOOKIJQVUMJLLLLLLKLLKKLMLMTZ\\[XVZ_ba\\XTUW\\___aa_[UOIHTbikjjibYSTUSQRU^hdRIMPQQPU^_ZbtYdv|t`_ebbksvy||wcXZYZXVTTTWVRa}t^^c``gkhdabcfjmnlfccehoqefhihdfhggikknttsrh\\Y^\\erhpjchfddde`X\\g{|~~td_aY\\aabbbbmwk```_^dwkccafhq|ywz{ouusw{ztlnqqqpmtwsecccfkzb`gs}gZ\\_alulbafmlbrbNSUTWYZ]^]\\_^]\\[XSYefk~ojhghdeUecikmmoqnmklllkjjlnldZ]hlnodkt]etphhkjjkkksti`WXggca___a`br{{|}~~}rb]\\[[[\\^`c`\\_^\\[[YYXYZ\\]]]]^__][ZZ[\\\\ZZYXZ[[[\\gyo`]^^`_^gmeYV[ad`dn_[^Vl޹iY_]]__[YWWWWXWZadghfeca^^___^\\\\[[ZYYZYXetb^[YYWVUVX[`^YURVUUTVXWTSUWWVUSSSTUTTUY]afiklh^WVUUWXZ[_bca`_^]\\]^^_``_^][[]^`_\\Z[]^OKW]]\\\\[\\\\]]\\\\\\\\\\\\\\\\\\[YXVUTTTTTSSTSRTWXXYYZZZZZYYYYXWWWWXXXXXWTRPNLKLKKKJIHFEHA[źsXMKKJJIJIJQWUTTW\\]ZUSPMJIHJJJI\\rrq}o\\ROOhX=FDBBBDGIF@=;<=>>>>>???@@AAAAACOLF>===;:::;<=>>>>>>==<<:98766543128<<<<;<=====>?@AGOPMMQQMD>@A@?@>@FV\\^]_``aaXH@DGIGHHFCB@BAB@<66=FKJJA2:IGCAABDEEEECCCBABBACLKIHGIJIKIDA?=>==>>@?@@A@@@A@@ACDGFHHIHJMMMMPSSS[IA>;23OK8:>EI:8:=?AA@@?>=;;<>@?<<>@@>@BDEFCDDBA><;=??ABB@@@???@<77:@DFJJJJKKIHFHJLMLIGGEIQK>CC=AHD@<=?@??>?ACCCA?>;:<=?AFJIC934;AEFEFGGGGD?==;9>IHA;79:::::::::9999;AFEFGHEDGGB?==>>=9424650.8>5/2110/2579878<??><66542.17:<@=:?:1**0;DFC=<@?639?DIOQOJC8Oc:HiubA70+-/04882,--.024564331/-/,)1;9;>516@IF@A<69=:64334:9510.+)*.--.0541/,-176.+1889=>6,-////-+,/7FPONK=+'&'('&+-))+-**+++/;JG=921<7)&(&&)+(&()+/387672*++.26(5eqXB:G=,11212213=CC=4++196*&*2;:49;3/496-''(*,..-++-242,))//-4=;530022344/(&()+13234235673/-,+0546:884,*-,*()),/0/+*-.,++*'&'()('('('&((,5:?>@F@4-)&*3860,**,:csXCB;,+11./11/.-/35560++*(*)-7A<5453<PYREDKE6-++-/&@twn^JWaaO4/:B@543-*''*+5A8#&-+(%'75(0A><<BE;29BA@BGF5*-,*++-,.48400/'&*/4Vyre\\\\PQSNMNOKB@GLIFHBFWI<;0-/0.5RD6FGLPB7lpwz~|wska[YWUTTTSSSSSRRSTTTUVVXXXXXY[\\\\]^]\\]_``aaa`aa`]\\\\[\\\\ZXWUUUWWXXXWUSSSSSSQRTSQQQPQRPNOPQSTTUTSTSOLMPQQONONLMONMNPOORSRSTVUQNKKORSSQOOONMMNNMLMKJJKKKMNMMLLLKKMNNNNPRQONOX\\TQTTSSRPPQPOMMMKKPTTSUZ]\\]`bbacca`_^_`bb]VOHL^ikkijjf[QLNRRPQX_dWMNOPQTTTX[zuQ\\y}}{nc`YW\\\\[^kzcVZZ[ZXUQPUYUSbuqwr[\\[WZdkjebcehjnqngdbdfkmkkkkjijkihjmnr{ztpe^[Z]iqfiiagdbbdfeflu|tljmled`[_fez{a\\V]aaa`aceb__````b_flfcb^dhpyyyyxvojjkmqpnptrrqquzpa`bdfjq}{onzuc]et~o^]`achkfaahj]L]xsaJSZYX[_][eegkkd\\VRZgxpridglhؘ`jqwpkjlnnlkkkkkjikld][]djkmolaZcqunjjkjjlljmtoifdgdcbbcdgbfz|}|te]\\\\\\\\[\\]\\\\dbXVWWWWX[]^]^_`bfha\\[\\\\\\\\ZYYXY]]\\\\hzqa^_^^]Y^jj]W[acd`jg__Xcȿݕ__^\\]__^[YXXXYY[_cfedca^\\\\^`_^\\[[[ZZZZZZ`l`Z[[[ZXVWZYWXYVTTTV[Z[ZWUVXXWUTSTUVVWV[agkiijid^YWVUUUW\\`a```^]]\\\\\\]]^]\\ZZ[_eih`YUWZTS[`_\\\\\\[\\\\]]]\\\\\\\\\\\\\\\\[[YWUTTTSRSVURTWXXYYZZZZYXXXXXWWWWWWXXXWTRPNLLLKKLKKJFDIEAoȣsWMLLKKJJJLOWUUWY\\]ZTSRMJIIJKHH]sop}vaTOWRBIDABBDGIF@=;<=>>>>>???@@@AAAAEOIA<<==;::9;=>>>>>>>===;;9865553225;=<<;:;=======>@IQRRQQOF==@@@?@<AU[\\\\]^```b_C8EFEDIHFDA@CBCA=951?LLKG;<EGDBABDEEEEEEEC@AAAFMLHGGIIIKJGB?>>>>>>>?@AAA@?A?@@CDGFFJKIILMMNQSSRYKD@;71388::=?:;=>ACCBCCDB@@ABA@=;<>>=>?ACDDFGECB>9;??ACB@@@??><877:@DFJJJJJIHHGHJKLJHGECGOG;CFCBEGGA>@B@A@ACDDCA@?><:66<DIIA7444:CGFEFFFFD?>=:7;HG;77::::::9:::999::?GHHGFFEGGC?=<>=;<;:9740-064/0/./02369889=?@?;888643117<>=::85/.:BDB?=@A;35@ILNMKGC?5Jh7048630./01358:4--//037975432223/-7B>;>933:D=:?93:>72345456775420.034111--,++.22-+;H;-/2231./0211/1;INJJF6*(&'''')*('$),,)*,-7FD6673990))*,46*&(*-17=<651*)))+2->olC<:98-/2335835?ED>71-4DA+%(*3<69<-&/2+))**+++++*+-.-)%$&)+-4:7650././1/'#$(*,0310/,+0685.,,+07637=<5-*+*))+--,,,+.231/01.&%*,+))*)(&,0,3BB5;GB4+%$*2770()*.Guy_NI>.+/11/-...-25310/,),..+.1233453DOORUUTG:.,+.62An|rf``ac^LABFF>==95-$'(0;=-,+(''$,:0&8D9/1577:BBDGJUF41)'&2=7037876:3+0.2bvW/3`qhe^XTTROFFOOE??=>CAC<0*)/*/TA)<?@EGGxyz||zyzzxric^YUTRQRSTTSSTTTUWXYZZ[[Y[\\\\\\^^]]_bbbdfdcccba_\\\\__\\[ZWVWWWVVVWWUUUTSTSTTSRQQRRQQPNPTUTUVVTTUTOMOPQQQQQPNNNMNONNOPMKJLMIHIKMPRQONNNMMMNONMMMLLMMLLMLLKLLKLMMNNMPTWVSQTZ]\\\\\\[[ZXZ][ZWSPPOONMNQUYWUY^adeedcc`^]^^^\\[VRY_aa^`hmi]SRUWUQLQ^\\QMOORWVX^XdvUZs|dVUUWYX`mw~bUZYXXWVY\\ZXXTSYTeq^ec]\\bhhdadknjjkieccceghjjjklmkjllmqux|{rgaijhhlmidtgaffehlpnru{xc^_ZUUVU]fdgWa`Z^`aa``a`_______]^beddc_gmprstvni||ofhijmnpsutty|wpe_`cefgjrmud\\ejd`hxyi_]`dhfd\\^ln^VlXMrwPOVZa[Z\\eimorpiZS[fuqwibh[vnmwspnmmmomjjlkgfhfege][dlmkkmd_suillkjjlmkoyvgdcabbe^b}{tg^\\]]]\\\\[X^j`UX[YXVX[____^]ajlc][\\]^_\\ZXXY]^]]gzrda`_]]]_ehbZ[aaabeke_Y[ӼuZa`^]___^[YXXYZZ]aedba`^[\\`a_]\\[[[[[ZZZ[][\\Z[[ZYYXUXXZZYWXXUV^[[\\YWXXXVTTUWWYYYY^chjihghgb\\YXWUTVX[]_``__^]]]]]_^]ZZ[bhjige]X[[ZWUVXZ[\\\\\\]^]\\\\\\\\]]\\\\[[ZXVVUUTSTVWUWWVWWWWXXXXXXXYXYYYYXXXXXXVTRPNLLLKKKJJGEGG@PΥpRMNNQSSUXVRZWVXZ\\]ZTSRNLIIJLHJVaafweVO^tVBCCCDDDFHGA<;<=>???????@@AAAA@FOE>;<==<:99<>????????==<;:87655435:>=;::9;<<<=====?FQUVSJB><==>@@@BL`Y[]^^``abZ<5FMEDHHECBAEEFEA:84=LLMKI@BPJBAEEEEEEEEECABA@HNMIGHHIJKKID@>?@???>>@ACCBACAA>BHHEFJMKHKMMNPSSSVQIA@>=42887>??ABBBCCBCEFECABCBA=;;=<<<=?@ACEGFDC?99=?ACCA????=7388:@DFIJIJJIHHHIJJJHFFECGJGC@BBCDGJFA@BBB@@BCBCBA?CA7538BHJB54657;AEFEFEEE@==<88?>747<;9:::::::9::;;?HJHFFFFFGF?<==<66:;97531113///0100279988:=<:6554455548=<<:;;967DDB@>?B@96<FIJHC<886/9k<97211/.11133431--12357864211472./9DB:9844><97834;=5.1565579:63235358410.-+)(+-.,+5@9)$+9B5.-1538509HLHE@3-)((''(()*+,240-,+-3?A7//1585-,.189,%(+059>=830.+*(((-FnT15:43322248;25CHA;61/:E<,')(,:;730)-2/-/////..-,+--+*('&%&,464211.---,*'(+/210.+*)'(-44.++++*-2546863.+*)),//+*,014664488,&(,-,,020/.1/2=5(4FB5-)(*0572+)((Evw^TG2*,-...-./0/12-*())(-31...0127?<DE;KTONE;0,+.57AbweR^d\\^]SJFIKKNRQND3*)+18203-'+'\"18'+=3,*+1;@C<?GF[W@0$&'/88215>JHIH>842Hm}mXA1Dkyxsl_TUUNJNNHBADB>56762.*-(,TJ08:9/3Bsrvzyxwxwxzvpha[UTTSTUUUUTTTUWYYZ[[[Z[[\\^____abccefededcdb^^`_^^\\ZZYXWVTUWWVVVTSUTTTTSRQRRQSSQRVXVVWVUUWUROPQRTUUTUTQOOONNOOOLIEDFGJLMMNPONNONMNMNNNMMMMMMMMLMLLKKLMMLNONOQTUUUURU\\^][[\\\\[[ZZ[ZXVSPNNMNPPQSSRW]abccccc^[[^`abb`YVUPOU_inlgeaZWSPQQUSPQPRV^c`^V_yX]x}~~vcWUZcm{pi^V[YWWWVWYXWWUUTSexkfkh_\\age`ahonfbbbbbdeeffffginolkmmnrwxz{p[Ygmt|wng_h{}}wabeegjklq{{z|w{g[[YY]^ckh^\\\\`_]`````_`____^^^^bffdddeeoqppnnqpip}ughjjkmptwtoy{hd^_cfghimowz^`ih`ap}te\\]agid`]fxiYdKX]mmZX`flortrf\\\\ej\\rsa\\cbPkntponnmkmnkjkiace`cjh\\Zdllkihgsvkmllkklmmt~ogcca^`\\[y|{tj`]]]]\\\\ZWadWU[^\\ZXY]`_`ab__fje][\\`bb]ZXXY\\^`_aw{d``_^^accdc][bcdcehkbYXwʸiX_]\\[]^^^\\ZXXXXXZ_ca_^]\\[^`aa]ZZZ[[[ZZZZ[ZY[\\YWTSSSTVWXXXWYTQWXYZYWXXWUSUWYY[[\\`befhigfffda\\WUUTUWY[_a```__^_^^^]\\[[`fhjhhnmha^ZWVUWY[[\\\\]]\\]]]]^^]]YTTVXWWVTSTVWXYVVWWVUVVVVXXY[[[[ZZYYXXXXVTRQNLLLKKKJIHFGHCL˥pRMOOU[]_kfWZWWWY]]XSSQNLJHLNJJNQSYfhYQbnZE>DGEEEGIGA<;<=>???????@@AAAB@GNA<:<==<:99=>?>>>>>>>==<;:876544469=<;9:99;<<<===>?BKYYRB<=<<<>@B@G[_W]__^`bb`O<8;F>;FGECCCFHJKE::9<ILMKH?BSNACHEEEEDDDCCCDBAIQPMJJIJKKKID@>?@????>@BCCBCCCC?CJKEGJMKHKMMOQSUVYYND<=?:7862FLCBGHECDDDDDCBAAAA@><=>??==>?>?ADFDC?99<?AEEB???>=98:9:@CEHIJJIGHHHHIIGFDEEEEDJMA@BCDGHHC@BB@>>@BBBCA@HK;434<GKC3456658@GFFFFFB=<=9565548<;99::::::::;;<AGJGEFFFFIH?<>=;649:77544211111110/2<<67:=<:64343200223437B@;;8;B@=;=ABA==AGIJF>5.--,$UP27536640/00...././24333320/0111.+.8DB66634;:76537=<6257654468775540263/046320,+/20-/1*'.7;3..01.02/<IKE@:2..-,*****+-2550/0.,/2:;5,,.//,*-.0/,'(*.39>>831.+)('%)AW:5576241111:;29GIB92/07=3*')*+284/FL@4776655465.*+--++.2/((,110/--.-,+,.-01561+))*-,).30,*---+*.455431/+)(&+0/+*/677877:>=0)(+.//5;;921/03*%/@?42,)*-49944.#8ow[PH63/--,--//0.-2530+*-/./-..01/>OG>0*ALKI:1/-+-48>ISD;OaRH_]KCGPX^_`^Q?3.,,,+.8;431&'43)2/+'(+2<@78FFHF@7().*$0139@JOTYXI5*+Lvt[D=CP^juvnaTXVMHLKFD=;<:68;==>91)+VT56980.3lovzyyxvvvxyunkf]ZZXWVUTUVUUUWYYYYZZZ[[]aaaaababcddcddddddbaa`__][\\[YYVUVWWXWVVWVTTTTSSRQRTTTTTVWVWWUUUUTQPRSSTTTUVVRPQPONPQPONKFDGJLKLNNMNPQONNNNNNNMNNNMNNMNMLKKKLMMMMNOPPPQSUTRUXYXWZ[[VQNNNQTROPPOOPPOPQOQW\\^^]]]\\YW[ababdc^YUONTY^eknolc[XVSTUUSRQQRZbbda[ihTWel_\\db^_]W^mv~hQ`|vUV\\ZWVVVVVVVVVXVXfnefhb]\\_eeaenpjc`_`bcceeeggdfjnpnnnnpruvz|vc^ejq|~qd^du}}j_adgjmmq||ztz|tkijlkhhjdZ\\^^``ab```___``_\\^ejigfeeeimumgjmoqhhmpknuyiijklnptzxjksi__cghjkntwgZejc``nyo_Z]chgc_bkia`vxYik{TZgmpqttlc_`^RTZUWYXZ`jromnmllnkjklgekg^`dfgge[Yemllgfmvqlnmmlkmmozytunjda`^b`Zo}vka]^^\\]][]aZUZ__^[[[_a`bcfd_cjg_\\]dee_ZXWYY]^]\\ra^aa_^`cbba^]bceddfnjY^ŵڣ`W]\\[[\\\\\\]\\ZXXXXWX[^]\\[[Z[`acb]YZZ[[[ZZZZZXWZ\\WUPOPRSUVWXXX[WUWXWXXVVWVTTWZZZ^_cfdeffgggfeec^WSTTUWYZ^abba````_^]\\[[\\cgiihhfgkd^\\[[YXY[[\\]]_^]_^____]YURW[ZWUSSTUVWXXWVVVUUUVVWWY\\^\\[ZZYYYXXXVTRQOLLLKKKJIGFHICLrTMOOT[\\^stXWWWXY^^VRSRNMKILNKIJKMNTsrZSmd^F>DGEEGHIE@<;;<>????@?@@@@AAB?IL=;:<=<<:99=>>>>>>>>===<;;986445569<<;9:99:<<<==>>??L_XH@=;;<<==A?:[^\\___^`bb\\E<=><55??@CEEHJLPG;86:EKLJCCDOMBEGFEEEDEDDCEDEDKSONLJJJJJIHCA@???@A??@BCCDEEDDBFIKGILOMJLPOQSUWWY^L>88987862LXB<HECBCDEEEBBBAAA?>?@AAA@>==<:9=AAB@;9;=AGGC@>>>===<:;ACEHHJJHGGGGGFGFDDDEEBFRVK@FCDFKJA@BA>=>@BB@?A>GTD5436CLE54344337AGFGGFB=<:611322:=<:::::;;;:;;;<AFIHFFFFFHH?;;;9767755344210111112/1AC66=GGD>>@B@<98610-'+IY?>9;;;<<=ABACCFHKKE=8/*/6+Go1,0-0585/--,+++++-046310/.-.01.*)*-7E<35524896534;?;699976332358<:3-.0.,/4:<=>3+17973/,++//////.)+26ALJB<61021/02,*+,.-/1/152-,*2:;5.--+)()))()()*,05<>:41-+)('#*6:69869841116?:3:DGC7..1561)',1/+-5>_j[;8><<966994.,--,,.13-+-/,*)**+++*-1212343200168-)../15443/.37621.)&''',1.*)/9<:779>B>2+(+/23;ED7010/-*)-64+0/()+2;?>=5*/^yYBIH=2-,+,-/.---6AB@93221/+,.01-@TL7))6FOH0)--,/68<>937FYQ?XeN@BFNUWXTI>=;652,/=F?324/.6-,,*((.38985;:?Lcn@$KaA9749?HHIYgR/&,JlZA=;>HHPepjc^\\WLCLLA826857BHIJKC5),XT54891.4qtzzyyyxxvuxwsqmgb^[YYVUVVVUVXYYYYYZZZ\\_accbbcbbbbcccddddddba`^^^]\\[ZZYYXWXZXWWXWUTUUSRSSSTTTTUWWWXWWWWXWRRUUUUUUUUVVSRQPPPQSTTUQLIIIJLLLKMONNMMMMMMNMMNMMMMMMMLKLMMNNNMLMMNNPRTSTTUVXXY\\\\[VQMJJLMMOONMOOOONNNPTTTRRRRRTX^baacca^\\ZYXYXY_ipsohaYWUTTTSQRQV_aeh\\ZZXUTUTTUUR_{~henw}p]MNbkTW]ZWWWVUUVVUVWWYfjced]\\^^acdhpqgca`bdddeefjlecinopppopqrtxz|ghq}~ue^fmu|zr``bcfnoos~}z|}}zx}~~peaccefb^bb`____^_``_]aqwngeeiklry|yrpjkhfgjt}jjjlostvvzeakui__ehknmmrutdchj`_^n{j[Zeliba[[b_`fmgxȽxYZkoqqssld`a^WTUUW[_gnmnnmlmmnpkjti\\`jg]_djjec[Xdllkhhpu{}nknmmlllmozqkfbkkcWXakhch|~qb\\^][\\[[_WVZ^_^^\\[[_``bcfe`ahia\\]dgg_YXXX]fe`\\pc^ba_^^____^^aeeeeenmZdôڔYV\\ZZZ[Z[\\^ZXXXWWYYZ\\\\\\[ZZ``ac\\XYZ[[[ZZYZYYWX[YTQQSSUVWXXXX[XXWWWWVVVVWVWY[[\\fjljffffggggffe_XSTTUVXZ^bddbaaa``^]\\Z[]chiiigdcca\\Z[[YWWYZ[]\\ZZ^^^^___^[WY]\\ZVRQQRRSRQRUXTSTUTUVWWX]`][Z[ZZYXYXVUSROMMLKKJJIGFHLEQýütTNNNRYWVhnZYXVWX^]UQRRNMJIMPLIKKLLPnyXUvwY_H@DEDEGHGEB<:;<>????@?@@@@AACAKG;::<>=<:::==>>>>>>>===<<;986545678<<:9:879<<<<<>?>?O\\N???<<<<;:97;V\\]]]]_`bcXA<>@B:5<;=BEFIKMOH<869@KMDCLJKHEFEFEEDDDDCCDFGHMSOMMJJJJIHFBABA??@A@?@BDDDEEDDCGLJHJMQPKNRQSUWXY]^G27688676;WX>:E@>=@ACDDCBBBCBABACB@@@?=;:6236<BC@=;;?HJEA???>===<>@CEGHIJIGGGGGFFECCDEDAJX^OAHCDIQNA@A@>>?@AA@?A>FXO>863;ID421101565>FEGHB<;71./211:=<::9::;;;:;;;=AFGFGFFGIKLE<::8676134122110111000-1DH;7ANPLIIOQLIGD@840*$:^O8=:5/4;@DA;=DGJNMC=90*49.LvC*/1/1331,,+,--,,.023530.,++.21.)*+-44635423565424:=87;987531/-013641,*+,,29>>=3+.3964542031.//.-(*39AJJA:40264257/-,-,),./374+'(*17851010/+)**(&(),168=:3.+))(&$*4*49:<9;5/115<647>DC7-.2420('.62*'3ZzzsM9CA>;747772+-/20.-,,,-.,*())))**-220035100--495.**.6777631474/-,&%()-02,&&-9B@76<CA82,'*/22=JA3-00.-+,150,00)'*3;=?=717QqV:HK=1-,*+--++,/9AAB?8444/+*-221;ID/***6D=+*.//168=@=:>DPN=MiUB>639?A>><AFAAHC;?JG5.2/181-+(()6=;73).Oti+arB)<GBBIRRJ:0CN4,88:=BQfmiedZVNJNK5$-6758IRJFDD4,.YT64780+3yyyxyzyyywuvwusolha]]ZWVVWVUWYYYZZYZ[[^a`abbbccbaabbbcdcccba``___^[Z[Z[\\ZXYYYXVUVUUUUTSTTSTTTTUXXWXZ[Z[\\ZWVUUUVWWWWXYXURQPOPRTUWXVQNLLMLMLKLLLLMNNONNNNNNOONLMMLLMLKKMMLKLPRSTUUUTTUUX[\\]_aa`\\WSNKKKMMMMLLMMLMMMMMLLMKORRW_ccbba`___^[WST]hpsrne\\SOQRRQSSSY_cgc\\VXXVVWWWWV\\rhZfslYOSTVclcXZ]ZXWWWVVVVUUVUXdgacfb]]^_acbdkidbaccdfgikmqnffkoqqrsrrrqrv}vzi{}ztkajjowv{tb`bbhrqns|{}{~yr|zxurpooolgb^^__^____`_n}}~yywszsjhklfj{lklmov{xvzfa^ukh^`fjnpmkmotldkqoi`aat~lZ[nnc__lwicjt^Y[f|ĥxTdgkmorngdd`][YVV^gkoqqpnnoknw{pk]U]fg^_cjihe[Ydllkkkqz~oimnmlklmlx}uidd`fibNZmyslio}yc[\\[[[Z\\\\QW_____]\\\\^_^_`cc`_dfa]^dii`ZXZYgvvm_ei[aa_^^^]\\^]^adeeddilYmՁOVYXXXYXYY^\\YXWWWXXZ[[\\\\[\\_^_bYVWXZZ[ZZYYXXWVYXTTUUVWXXXWXWYWWXYYXWVVWXYXX[[`hnlifffggihgfffc^VTVVVY^afgdbaaaa`_^^\\\\aeiiiiiigeb^\\[[ZYXXYYZ]lh^\\\\]]]^][\\__^\\XTRSVVVUPMO\\`VRUTSUVUV\\^][\\[ZZZXXXWVUSPNMLKKKIHIIJNKS˸¿uVNNNRUSOZ`ZYXWSW_YPOQPPLJKPQMIIKJMQmî{Y[ytYWLCCDCCEFFDA<:;<>????@???@@@ACHJ@9:<>>==<::>>>>>>>>>==<;;:997656779;<:99878::;<<=>??FKCB@>==<<;968JVY[]\\]_^`bYB;=?A<9<;<CBCGMOOI<98:?MN?GQMLFFFEEEFCABCDHGFHKOPPOMKIJKKJE?@CA???A@@@BDDDDDDDBGOKIJMRRNPSTVWYZ[^aN266775879VY@;??=;>ABCCBAACDDEDBA@@AAA><:73119DHIE?:<FKGB@@@?=<>?ABDEGGHJIGFFFGFFEDDDDCCN\\bH<HCEMUOB@@@??@BECA@>=G[[N>:89CB321.,/6;15@BEHD<;5.,0410:=<::::;;;;;::;=AFGFHHHJMNQL@<:5575012//./01100000,1DMA:HVUOJLVYSNKID?<81*+I[<=<:6239CA65>FJSOC=7/0>?/@{z_@1222211/-)),/2445742110.,,,+/432.-+-01567610011114887;;579741/.-.,,/1/----299841../0-,/2344432210-/0-3FI@8412767::///.-)..1894,'%$*036433353--/*('(*.47:81*)((('%*4.+2/39<5/,*+++*,1:@5001110+*++DK(6Yb`^H5=;975552/,)020/140,,.0.-,,,,+,,.110287,&')((.792)(.687765661+**((,.253,($%0BE:6>C;11-()-/1=E3*..-..+)1;;510*'*166:;88:AZN8BB60-**,-.++048<>A;54241..0546891(*0)&.,+.576547=AEHIFFD5?cXD91*,7B>>>@FDCNTICDD:-)+;H=4,((&2:60&%YFtC9HJC85:JU>14+)-123A]nnigaWUSTSH(\u001f/9;:=MLJHIO?<8XV:455-&-vsotz{yyywvvvusomifca\\WVXXWXXXZ[ZYY[[\\_`_^_abbba__``_`bbaaabbba_][ZYYZ[\\\\ZXXZZWVWVUTTUUUTTVVVVWYZYZ\\]\\]^\\ZWVUUVXYXXYZZWRPOMNOPPPRSQQOMOOONMMMNNNNOPONOONOQPNLMMLKJIIJKLNQSWXXWVUTSQQRUZ\\^_acdcdbYTRMLNNMLKJLLLKJKLKKLKMNMR\\```ba^^bdb`^WOQX`iqutpdWPPOPTUTUZ`dfbZXXWWWXXWWTS_~{celoeZZ[WVZ\\[]^[XWXXWVWWUTTSWcf^`ihaa`_``]Y]cda``^billommrqkkoqtvwutrqprxnjsr~xwndklmqrrmaadjqqnuz{w|~}x}~~znc\\]^_]____afw|nmnfgxoknoqsy}k`^^`iZ]fjjlkigeb^bknjf`bj|nWaq^^_wgmpbWQ]gW`~جOV\\cghmspb]\\\\ZXUW`innnonmnrqkkXWPXbc^^beijf\\Ycllknotqilomlkkmjvxme]]]ag`^nqvzrmmp}~g]\\\\[Z[[Y]da____^^]]]]]]`a_\\`eb``dllaZY^erxupedk[aa_^^]]\\\\\\^adeedccfYiϽoMVVVVVWVWWZ\\[XWWVWXYY[]]]]_[]^USTVYZ[[ZZYYWUVWWWXYYXYXXWWVWWWWXYYZYXXWX^XU^cgijigffhiijihggfhf]VWWW[bgijebbbaabba`^_djjjiiijgeb_^\\[[[ZXXWW^oeXKKPOT]\\]^____\\YXY]__`]XN[k`UTRQSTSTY]]\\\\\\[[[YXYYXWTQOMLLKKJHHKKNMN»qWNOPQPNNU\\ZXWURY^TMORQPNJLQQMJIHHMO^η]gzsd^PDCDDCEDDB>:8:;=>???@?@@@BBCCKF=<<<>>==<9;?>>>>>>>>>=<;;:::8777889;<:9987789;<<==?@@?@A@>??=<<<=ESWVY[]]^]_b^D:=>?>>??@D@=@HHMF;;;<?KI>NRNLHHFFGGGECDFIKKFKMNOOOMKJKMNJ@;>A@@@@AA@?ACDDDDDBBFNMJKMRROPSUXZ[^_bdR476544:8;OQ?=<<=@BCBACDDDDDEC@>>@CCBAA><<845=GJNNH=8@IIECB??A?@BEEEEFGHIIHFFFGGGFDEDBBCJVXBEKBFOTMB@???>AEIGC@@?H[^ZH;9;??4340+-273/8BEJE=93,+/;<79;<<;:;;;;;;:;<=AEEEGHHIKNQOF>93453000/.-.01100000-1DPD;N^ZQKMZ_ZSOMKHE@7/*;SB9=<<7447=:56?ITRE=5.6JJ25huS@5684100000-*.57789:83/--,+,,,145694,.7:89970,++,-/578=B;17<851.....,,.110/36:71..,++)****+,-02564343.'&4E?5422246940110.-.-3<<;=;2(&,/45431561.30*''*-/0240*()))(&*2/**&&*.00,)'()('+36420--/222/+Ii20:102-+./12442/*(*..,,1750-02100/..--./011265,&$(&%&)38.'&+2689982+(''(-02342052(*:B;5;>931.((,,1=:,).,*//,%(395/-)').128:8535AA992+/.))-..-.699<@>4561544356643.&'/;2%%'05=@6115=BDGGGD@87DE<51/0<MKE><AHJFIME;53.'*DTC6,('%)-/-\"CfuEGT=)+*2>GP=+,0/,0>P]a``]WTKJQA-.38?@ERKAJTZPQBWU723-*)+mjjtz{yxxwvwvsqomjklha[Z[YXYYY[\\ZYYZ[[\\\\\\\\[^`_^^]]]]]^`abbabdecb_\\YWWYYX[\\ZZ[[XWXXVUTUVVVWWWXYYY\\]]\\^_`_^]ZWVVVXZZ[YY[YTRPNMMMMKJKLMMMOQQQQQQRQPQQQOPQQPRRRPOQQONMNPQRTWY[ZXUUSQPPNLMQUWZ\\^``acdbb_YURPOOLJJJJJIJKKKKMNMLQUUW]abbbegeghdYRSU[ejnvypc[SOPSTRU[]`c`\\WTVWWVWVWTPWcbfpuwpki`XXWX]_[XXXXVVXWUTTSWcd]biklha`_^]\\[^a`_^_`jpmmkfiqurrqtwxxyuonmljhhltw{~pdimlmmnyvb`joprps}y}y~yowve`__^__^^blx|pjgho|snoqpqt|n```bi^`bccdeecb^`iohdaadmxl[xm]^bhuhe_[]YXReฯSXaegdhvs`[[\\[ZX\\eillkjggjmqcVXTQXd_\\^_cijf]W^jnlox}rkkkjklnjkxqf`[X[Y]sqaequrmn}|ka^^\\ZZZ[ikb```aa`__^\\\\Z\\\\[[^fgcbepqcZ\\dntrkiji}k[`_^__]]][\\]`beecbaa]`оcNXUUVWXWWVV[[XVVVXZZY[]__``[Z[WTSVZZ[[YYYYXWWWWXZ\\[ZYXXVWVVVXYZ[[[[ZZYZ[[W]knkngfghjjjjjighhiiaZXXY^eikkgcbbbcdcbb__hmljjjjgb`a_^][[]]ZXVUUVSTJHJLV]\\]\\XTUWWTUXY]`cb`XZeg]TRRSSTTY^]\\[\\[\\\\ZZZZZYVSOMMLJJJJIIKMNJikTNOOOONQVXWVTSSZZPLQRQONJLRRMJHFEKPQf˳drxusfVEDFFEGGFC>999:<>???@@@@ABBCDFB=>=<>>><;;<>>>>>>>>>>==<;;::9778889;;;9998899::;<=?@?>??>=>>==<>@HT\\[WWZ\\___dcG=A@@@@AAACC>==<?;:=<=@KBBSTOKJIHHGGGILLKGHHENTKPQOMKLMOOI?;<<?BBBAA@@ADDDDDCBBDLNKKNSRORTUX\\^`cfkX3862/6:;>=@;<<;<@@?@>?EGEDA?==>@BEDCABA??<:<DIJMPMB9<HKGECA@DCBCDGFEFGIJGIFEFGGHGEFDBABBGFNgXFIPRLCB@??>@FIHFFFCJXU\\WB7;<<8687-.022&.AEJG:3-,.07;86:;;;:;;;<<;::;?CEDEGGGGIKMOI>844420220-,.01110/..-2BOE?Sb[RJKY`\\WROQLG?8316?>3;9665549<86;@IRK=1,;SR:9[nU==CC@:4222463/4<;:88741,(*,,++0234<>4-07>><:7,'(,./1488<A9/9>720/.,++,./120-4884-+)&&(**)*)(()++2=<7642/));>1340/.771033100/-7EMRUVQ;&&*+1331252032*&')++/331.,***)(,20,*'%&')000..---.45210./34315DFN4..+)('(()+.660,)),+'((+-,+,/33334442/.00000/.+*)((()(*//.)&)-3653-(&''(+//,.27=?82487678874/*).1672./0+)/.*$&,-++++))/457862/57530+-2,(+-.1129:8:8756658:<:74432,'+3;7,)/6;@B3--3=BB<;AD?940//12129C@?A9BX[G<H@/*,10/>J71-(*,.172*hW9IK8,()4DMQC*'111589<M\\[\\U?79;<;30;CIOHEONOOWDRR0&-*,/0hkrxzzywvxvttpllmmnnjc]]][YZ[Z[\\ZYYZ[ZXXYXY\\]\\[[[[[\\[[^acb_bgffggc]WUWVTW\\]^][YYYXWVUVVWYXWWXYYZ]^^^_`````^ZWVVWY\\\\Z[\\ZYVROONMMLJKLJKLOQQQRQPQPPPPQPRSSRTUUUVYXUUUUXYZZZYXVSQPPONMNMKMPQSUVXZ[]^``^^[SPRRPONLKKIJIJKKMONOPNLOX_cffcacfjlgda]Z]]\\cqwtne\\VTUSTVXZ_a_ZVWWVWWVVXYTQSZfgejsviZXY]a`][[][WVXVTUUTWac]`ipqla`_^___`ba_^`biqojkhbgrwusqrtw|xi`a`^aceilt|udflljkpuypbdlnnuspu~uilyyv|}t|twuo^_`__a]^kwuswzkhedjrppopruu|n^^_`g]_aaabccde`bxqca^eskncbfY^[ap~ob]ggXSWoεߝfhjiifl}{abhkcZ]hhcddccbabcgbVqmN_aa]\\]_ekkf^W[fnlmxzpjjjjkmmjrvi`STXUTgiadilojgzkb_^]\\[[\\ca``acedca_^\\\\[\\\\\\\\^deccesxfYZddhnqptz{e`_^``_^][Z\\_acfc^]__YڗYVZWWVVWVVUVZ[YWWXYZZXYZ\\^a`^\\ZYXY[\\[ZZZZYYXWWWWXYYYXWVUTUVVWXY[[[Z[[YYXYg`Xlpknhhijjkjihghjjhhe_ZX\\bfikjgdcbbcddbb`aklkkjjjd]OPY_^[ZY\\XWVXTQQSYWNOX[\\`]SJKKKKORTX^`__]\\^d^UVRQTSU[]\\[[\\]]]]\\[[[ZYVQNLKJJJJIIKLNMShRNPPPONRVWVTSRSYVNNRSPONLOSRNIFFDHRRHdŰwxuuxl[EDHIIIJJD>:99:<>???A@@@ABBCDD@=>=<>>>=<;;==>>>>>>>===<;;;:989889:<;;;:99999::;<<=????>>===>?@???CR]]YY\\``adeF;ACC@@?@AAB@><:88;><:@PDHUTOLKIJJIHIOSOHDGHESYMNPOMKLNPNG?=><>BDCAA@@ADDEDDDCBDLNMKNSRQRTVY]_aeipZ/6545;9;>:===<;988:=<=?B@?><=@ADDDCCCCBAA?=@FIKMPOE8:HKGECCBBEHEBGFEFHLJEJHGGHIIIGFD@@BDB@Wk[HISSGDEB@@@@DHHFFHFGMMV[O<;;=>98721135129BIH:.+,19?9159;:9::::<<<<<<BEFFFHHIJKIIKG=634300240-+./0000.,,-2?LIGTZWSLJU^\\VRRQJA;87:68?4<=325568:<=>@CII</*@\\Q=;HMFDHJJHC>=;99997::;:8544/))+--,-13/0;=3/14=D@93+(*12441017=9/14211/,*)*+-..//-0541/-+(('(*()/.+/0--5;:65464/8=1.32/2:A?:71/42,,:LW\\[]`R2%'&)+,.0121/.*''))*16530-+)(',.00..,*+*)+.10/-/33552012/,,*)*75./0..+*)(())0;;/'(.1-'&')*(&'-1000110/-../......13.,-,,,+-00)$&,22.*(''(''+*&(/7;=B<57:8665410-/344310//+())''''(,23-*,49632212781..052)(,-.2555334/3:8788;?>62553/-///5407=??;1..2=A<428=:40/,/58645601JXZkZA6?:'',5>96:369,)/25940^}>AXL665>VNKP?69754442E]`U?/+-661/-9DGILKI:3:K>QW8*-,.0/mqwxyyxxxwurplggmqplha]^^]\\\\ZZ[[ZYYYYXWWWVXZZYYYYYZZZZ\\ac``egefjlkha[XWUWZ[__\\ZYXWVVWWWWYZYXYYZ[^^_````aaa_\\YXVVX[[\\^^^_]XSQPNMMNONLKKOPOOPOMNOPOOORSTTTUVWXZ]\\ZXWWYZYWTQPPPPOPPPNNONKMMMOOQUWY\\ZVSUVRLOTTSSROMKKJIJKLOPOONLMSY]_^YVZ`dhlmljfdb]Z`gijjigc_][YYYX\\__[XWVWWWVUWXVSTVXSYlqbYY^dfeb_`b_YXXWVVURVabZ]kvvna^^___bdca```bksrkhkifmuvttnmwzgZ]bcbabbbgtygemnggmsrgadeditupnruqlnpnow}|nj~y~d\\efqm`_^aie^dsuphgupfaadhjklmnz~s}n\\\\[[aX_bbbcccfgedtca[rw]ag`p}abof[Yr]boveVW\\wהdknprop~rwhZ]c`]\\^]^__]]cfb[|]gdc^]^_emnh^YYaklilruzypijmlllksym^TLORTlmnmjijgkzja^]]]\\\\\\Z[]]^adedc`^^]\\]]]^_bbbcex{gX\\{ejxzkda____\\[Z\\^_cfbZX^_Zd¾ׯ`RZXXXWVUUWZXZ\\[YYZZ[\\ZZZ[^aa`][Z[\\]]][ZZZYZYXYXWWWVUTSSSSTUVWXY[[ZZ[YWX[fpk]bljijjkkiigfffjnjgihb[W]dgikkhfecaaceffghkljkjijhXJOPa`]_iuaJ\\_SXTOVe`VY[^ab[MHHGHNQRX\\^]^]]\\[YY\\SQUTU[^\\\\\\^]]]]^[[ZZZ[UPMLKJJIHKLLNQOVsùbQNPPRRNOTWUSRRSWTNNRSQNLNRSRNJFDDFPVH@l~stvi[EFHIIIJJD=:89:<>>@@A@@@ADDCDB?==<;==<<<==>>>>>>>>>===<;:;:999::;<<;;;:9998::;<=<=???>>>?@@ABA@?:7=N[^[Z\\_adc@7?@BBAE@?AA@@@:9:>@>9EUNNTQLHJMNKJJKPNHDFKMKU]QNOMKJKPPLC>>>>>@ABACB@ACFFFDDCBELMLKNUWUTTX[]^bhlrY-65:=;::>@@>=<;955:;;:;===>?ADDEECBCCCBCEDBCFIKNPQH9:GJGFCBCDEMF?GEEFHLIEKIHHIIKKIHD>>AD@>L\\[CLTL;BEB@@@?BGHEDFFEEHLTUF==>==:855:::=<8AFG;-+-3COD14;<:9::;;<<<<<>DFFFFGHIIIHGGD;444312341.,,..../.++-0:HKKPRSSLHS]ZTQNIC<99;A?<B>?@7066789>?AAAAA:.)EcJ:9=BJOMLKJHCDFA;:9:9999889:4-*,.25323.,5;:7406DC72,,.24430*+5:554./322.)(+//--.0.-.011222.+*+((268;5,')18:86522=F>/.24<ENM>/('+,*-9DKTWX[R6&'$%(*-....-+++,/124652/+)&$)11..//872.,+++,-.243442///+&%%%$$&*/0/,)(+12-,3:8+%+2551)%*/-+*,..,+++*+*+,--..-,---.-,)*++,,,,*()283*&'(((''*(&+0006757<;862-*-0530/00-++)(()((()1;;3,),3730/1356311134.''*-2664202219<88845:;8698532/-*4:5?E@710/16<9632231++.059975421+<crg@:?==,%+3:89<:=E;*(/.055@]@>PDC`ulf\\MRZTSL:6<?=FSTD.%(+-+,138>AGMG6()-51ST;6.-/,.rsuxxwxyxusplhefmrpnke_^]^_][\\]\\ZYYYXWWWVWXXXXWWWVWXXY\\_``aeffgjllkic\\WXYYX\\_^[YWVWXWWWXY\\\\ZZ[[\\_```_`aaaa`^[ZXVVWY\\_``ab^WRPNMLNONMLKMNNNOMLMNNOOOQRRSSSUXYYZ[ZXVVVUSQPNMNOONMNPOMNNLLMLLMNQSVZXSQTXUMJNSSSTROMLJJJJLNMMNOOOOPQPOONRVX]dilmmlmmid`^^_cgihfecb_Z[afc\\WVWWWWVUWWWVVVST`bZWXajijihgeb_][XWWUSU]_[]lxwna[^a``bda_ceabktrjhmompsrrutsq|fZahmjghfadrzmjjiikourd^_^_ekqtqoompvtfg{jenYW^\\cdija^\\^hnf_kvqdZ\\g{rfaacfijkkmx}|b\\^]\\\\]_`aabcegihfs{hb[Ylq^bgY[oa]guusw]Sadb`efqͼZbc]aa\\`ffmkea^ZY[\\ZYa`__^\\]_]Lsfeie]\\^`fmoi]YX\\gljfjrywojilklkl{w]QMMMObvloqkgiuxy~la]]]\\\\\\[Z[]\\]_`bbcaba_]]]]^`abccdwygWgww|zzyrica``_][Z\\\\^``_ZY^caYh¾{NVVVWYYZ[[]][\\\\[ZXZ\\\\^^]]]_aa`_^]\\\\\\]][ZYZ\\^^_]ZXUTUTTRRQSSUVWZ[[[ZZZZX^ipopf\\hiijlmkgdefegimkhjke\\W^fhikjigfebacehlmmlkkkkijlOJURa`Xez|g[phUYWRObe]\\\\_bdaRHHJJNPNV[[\\^]]\\\\ZYYTTTUU[^^^^^_]]_^][ZXVYXSNLKJIIIKLLNRSLMoǼ^NONNXWMMTUSQOPRTQMNPQPNLOSTRNIGDCDMSNAKyprreZGFHIIIIIC=:98:<>?@@@@@@BDDCDA?>=<;;;;;=>?>>>>>??>??>=<<;;9999:<;;<<;;:::9:::<<=>>??>?>>?AAABA?=:98;IU[[Z\\`b]<2<==??B?=@@?@?<9;?DACRVUVQGCCHPMIIJJJHFGIMPMT`TMOJIHKLJGB?>>>>==@BEEABEFFEECCBELNMMOU[YVUZ]^^emovd66:<?=;;=<=====;878:;;<=???BDGFEECBCCDEGKKKJJJLOQQL?<FJIHEEFFFHC<GCCDEGGIKKJJJJKLKIE?=AD??FY_ANT>4?BA@>??BFGCBCCCCCFKQNB>?=>>;8<@=9;>=ACF=,+-5EMME>>=;:;;;;;<;<<@DEFGGFGGHGHGFC82224425651.,-...-,+,,0<IJMSSRRJFS^ZQNLHEB?=?DHDEH>84155557=>>=;9982-G]>5;CMOQPMKKHAAHH@;754565678:<5,+1795310/36?>3,.;>3-01034556/,58236436786.),131./11,),023585321122597/(&(.379:6-.>JC3+/9DNUS>+,.'(04305?FNOE5-,++143.,--,,+.5898883.+*)(&,770,--12/,*****+,.--.//./.*())*)(-892/-,/7=;01892+).2246-$).-,+,,,,)(''()*)+**(*+*)&''%#$&(*($&--).99,%&('-0*.2,+)(()/10598861..030-+./--,,,,,,,,2=A8/*'(./-./1340*,033/,)&'/8;72..235;;87842699:;8642/,+2959>=4/1//47112222/**.14873496.$0^{J8UZQB3./24;CEIKJ;*,48;?9,[vNCEQf_QOSdkg\\G<BGFFHE;3.//,*,38769@E9/,2/1)RH5<23/(2posxyvuwwspnjfeglooppnf`__`_]^_^[XWXWWWWXVUVVWVUUTUWVWY[]]]`cdeghd`_^ZWY\\[[\\^`^ZXWWXWWY[\\]^^\\\\]_abaaabbabba_\\ZZZXVVX[^]\\]\\XSPNMLKLMLKKLLLMMLLNNNNNOQQQRSTTVWVXXWXYXSPONNONNONKJLMMMLLLLMMLLMOQRUUTX^_^ZRKMOOQRQOLKKJJLMLLNOOOOKIHJMMOPPRU[`bglmonkjkid`aehijkkigcagibYTUXVVXWUUVUVVVUW[ZVT[efhmnkebac`YXZXWXZZ[bn{ynaZ]bddcbacegedlspjhmrqrtqmoorvzoc]_cgihmpiiu~pfbotd_bceiditusrppppfctxo|d][[Vhidf`]\\[^jjagxr`V[aml]adfghjjltztnd[]b\\aa^__``abdfeddeic_^d^h_b\\TTibOZ_jtceaX[dksĄ^WSLOQRRNOXXXY[]``^]Y^SU_^]YXXTndeod^\\^aejni]YXYdmmkpx}ypkkkjlkmztWNQQLVsqmolijqlhyna]^^]\\\\[[Z\\\\]^^_`abcbaa_^^^^_`be[juf[dtūzuusmjif```aa^[ZZ\\\\[[Z^a`ba^Wa_SXVXZ[]^``^]\\\\[ZZXYZ\\\\]]^]^_``aa_^^]\\[YXYZ\\`bb`_ZVVVWVTSSUUVVZ_`[Z[Z[`djqohlm`bjmoolifgggghoqokkmi_Y_hihjiiggecaddfknmlkkikikiKKS[b]MQpyu|pndXZVQO[_WZ]cecVFGLMMMLSYZ\\]]\\]_][VTVUUSY^`^``_]^_`[YZXROVYMLKJIHHIKLNPSUKZ[LOLTdZKMTTQOMMOPMLOPONNNPSSQOJGECDILOKFaymnk`[IFJKJIJIC=:99:<=>??@?@@BDDCCA>>=<;;:;<==?@?>>>??>>?>=<<;:999:;<;;<<;;<:::;:<<=>>>?????>?AABCB@=9:<99BQ]`\\]a\\=3>@=>?>?==??A@<9<@GFLVRTUG>=CHOIHIJJKLMMNQSLO`TJLIHHIHCAA?>>>>==>BFFCDEFFEEDDBDKNOOOT[[WWZ^bcgqt|rB7>???===<=>>?=:8779<<=?AABDFGEEECCDCCFHLNPPLJLNRRMDBHJHIHIIGHA9;FCCAACKOLLKKKLLLJID??DFFEDVbAKI/4<@@?>>?BGHDB@?@BDFHLPF?@A?>=;:8426?B;8AA.),8IJNXOB>;::;;;;;;;=BEFFGGEFEFGFGG@60112346874/+,,*+,,,*,1=HJSXUSQHFV`]SPNLKICADGGKEE8210100/28::8535:=8FU=5>MSRSTRNKIB@DFD?6-.1354427@9,,1443421012::10/370.35//26<<52552146789<:2+-0430-.11-.222357:<;<9100+'(+,/431793.481*,5@JQTPA465*.57/*.7@GHA>=778::5-+1551*(06655/+)()-.*).562-+.000-,,---.-,,**+,./-,,+,,+2><52368;<8//670-/./.-.,''((((,...+)++()+***)*-0-)%&%&()'$&'$\"'+()03.('&%.2.363.-,++.00269:7531/0.+*-122110//-+1>@:2*'''(()+--.-)%&*-.-*(&(2<<50/0468:;97769<<96875530.,-123344431/020/0/1473.265468:<7,7^Karlg[G1.4:EMQNGF:2@KF>/*opb_Q]~z\\GCHVlxgWXK=>@@DG;5<<4+'(1::6667666466*QJ6=;6.*;mouyytqrsqmjiffhknnoqrldb`__^^]^\\YXXWWWWXVTUVVUSTUVVUVWXYVV[^^^a^YVTTUVY\\]]_``_]ZYXXXWX[]^^``_`aaabcddddedb`^[[^_]YUXZXVVWWURNMNLKLLKLLKLKKMLNNNMOPPRRRSTSSUUVWVY]\\UQPNMMNOPOLJLNMLMMMLMOOMLNOPRRUZ^^_c_WROLMOONMMLKKLLLLMOOOPNKKMNNNNNMMPSW\\cdbbegikhdaadfgikkie_^__\\VSUVWWUUTSRTUTTVYXURU[[[htmec`cd\\WXZYZZWZdp{|oaYYafedceigefjotvnkrvtsvxpklqyo][\\]_chhimqrzsdp~pnpprtoptvtsqnmmjcgxc\\]ZSalbb``^[Zdjfjwuear~}{hdddfhhhilomfa[[o~eklZ]aaaabdcaaeehe]dpigZWQTT`]TSQ}dl}wkif`fhox~VZXWYZ\\_acgjfcaaZ\\aacbbsi[]fedb^bkjba`aabflj]XXXbnpou}{qlmkkllmxsZOOORtxiopmfcehov{pa]`a_][[[[ZZ[\\]]^_`beggd_^^__^bgW[kc_XP_ɷofggeceeb_a`^[ZZ\\\\\\Z[bfda``]U_º԰XTX[\\\\\\[[Z[]_^]\\[YYXYZZ\\]^]^_`_aa___^\\[YXXY[^``aa]ZXWYYXWWXXUWaea[Z[[`hmonnjilb[lprjccgkijgftypkkkic[`hihhihggecbdefjmmlkkgiikgPRZ^`^HNl_[]UUUSOTYQSZdeeYFHONMKKNVZ\\]]]][\\]YTWWTSY_a``a___a]VV\\ZQEOZPLKKHHHIKNOPRULT¬XLMM]iVLORROLKKMNKMONNNMOQQQPOLJGFFHJMKDTtuklf[ZJFJKLJIHB<:99:;;=??@?@@BEDBBA>===;:::<<>@@?>>>>??>?=<;;<:999;;<<<<<<<;;::;<<<=>>?@@?@@>?ABBCB?;98<;8:?KX]\\a^F>CB?>=?@=<?AAA:8;<ELLQZSB9>?FHCFHIJNTTRQQPQLL[YGIHFGHC=<>====<<==@EFDDEFFFDEDCEKOOQOT\\]Z[\\`fiksyxK7A@@?>==>>>?@>;877:=<>@ACDEFFFFECDDDDEHLMOONKLORRNIJKJIIIJKLH@?IKCA@FUYRKNMKLLMMIDBABFIIGEWaE@:/36>A@?>>BIJGCCC?@CFFJNG?@BB@>;5248>B@6498+),7GLLQOD>=;:;;;;<<;>CGHGGFEEDEFFGF;101223579972,((-5;4*&',8AJX[WTOGGXc`[XTSSMDELMNOF:5310/.--.157654?JMDCOK@>ILFDKJFDB?==;:=9,,25642.4;5-./02354313455422430021/03:B?768:9633452571,-0320--07;975443568=>6230*')-.030*+7;41-')7ELPPMC<840+2:91+5JRJA:9;<>A=72,,6>>5+((+---)()*,./+'%0=8/*05/.-,,----..,('((-011-*)+*-6867998787/.21.23012.,-+((+*+021//4660--/----./-)&&).01-)*,+(&((()++*'&(+,0;84134551/,.5:96321000..-154331/..0;;.,120,'&''*+**)(&%'),+(&&,6951./28;98;9448;=:0,44357510/4:867;<;;:8765202575016748>=92@vjeqnjgcJ123?NRM85><BID6'Dv][af_?CT]dotfD;RR>7;?@6/5:0(%&0==79967<<685+QJ6962-3Estvxwtolkmkgffghjoonopmgda]]^]]]][ZZXWXWWXVUUUTTUVVUSTVWURS[]ZZZWVWVVVWY[]^^```_][ZZYWWZ\\\\]^_^_`abcefffggfeda^]`cc\\WVWXXVUUVTPPPNMMNNNLKMKKNMNMMMOQQQRRRSSRSTVWX[_`^ZUSQQQTTRPONONMNOOLLOPNMMNOQQQSSTW\\cc`[TOMKLMMLKKLLLKMOOMMPOMNOMLLLMMMOSUX[XU[^XWZ]^\\YXY]__`_[YZZYWTSTXZVTTTTSSRTVWVTTTWTM\\sskib`b^YVUX[\\XZerzyob[\\affefhkibesrqwqmx~wqs|ynmordXXZ^bc`ekpy}uw~|{{z{|zwutrpnnmidrx]Z[]blfbb``_]\\aggkomozykgihghiiihiigeb^i~zgedcbacfbblnege]jwskd_YUR]]XSd^`tu{xdYali\\rܩXMZ`iifidcuzti^^egfabgfxk_ss`]hn`^cdedcccehf^ZZZboqpy|rllkklmnwo[ROMivkojgimoqoca~tb]aba`\\[[[[Z[ZZZ[\\^\\behgb__``]ciXSbb[VVMWmfgjnvpb_^\\ZZ[]]]_beeda_`[RtŸԪTX\\]]\\ZXWWW[_`^\\[ZXXYXYZ[\\\\]_`_``__^^][YXXXZ[[]]]][YVXYZ[[XVU^hc^[[\\`fklkmlmkli_jnj_\\agjjiiefikmjghf`bhhhhhgfffccfhikmmljkeeijfU\\cYU]KMs}TKXd[UUVUVMIN`efXIKONMKJIQW\\_\\]^]\\[^YX[VUY_abbaaec^TSSY\\PCCPWQKKGGHJLOOPRTMQȾVMNP`aPLPQPMKKKMLJLMNNNMOQQQPOMKIHGIIKMDGbmgmg\\XJDIKLJIFA=;99:===>??@?@BEDA@@>>==;;:;<=?BB@?>??????>=<=;:9:;<<<<<<;;<;;;:;<<==>@?@@AA@?@ABBBA>;:8<;;;:;FXcd_RECAA???@;;@CA@:9>;AJJIUF00;GKE;HIJKPWWRSPMKMNZbEDGEEC>;;=>=<=<;;;>CECCEFFEEEDDELQQQQW^_]]_bioqtz{R7????>=>>>>@@>;987:@@CFEDDEEFFFFDDDDDEIKKLMMKLNNMMMKJJJJJJLLIFLRNDC@H^aXMNMKLMOOJBABEIIHHHSU;2580/<BBA>>DKKKJKMBADDDGJFA@?@>:33<GJMC4/02.)+.7?FJKHB??>;;;;<<<=?DFFFGFEEEFFFHG;21113547:;:::8>JOQIA?=;?DJY]YUOGGXda^^]XWRHHPU\\]N3/3231.-,,.258<BKUTMGKJA;=>:59==<:7687026214883/-/0/../13332212344555433530/14=FC;6:B@720-,+-21-.021/..1:B?;876430.693021+()+-.--*&+137738DLQQPD2+0++4;><7.:WXA2-*,9BA>;8208CC70.-**+*++,,-..-*%-?81.07-(())*)('(+.+(()0011.+***-25577339<:4-*(,4526;962-),31/3840/37:70+-1**,-,,.1//0221023/-+()*)*)((+/.)3C<1045784/)+4<:20/123432/176-(*-.3<;.(.5;:1(&&&'),.-)&%''()(&&,5961./27997::2.1130**22357:979<;=?@BDFGGB=;<954442/236998510IuwuohiU73/3CKA3).:?C=9)HnapM2?[lknmgP4?ZW?7873--,)'%%1@=/2@?9BC95/+UJ54,(/@Fyxwyyvofdggfdefgjnollonida^^^^^^^][ZYXXXXXVTUVUTUVUSSSUVTTW\\\\ZYXXYYY[\\[\\]^_^_aca^\\\\[XVVXY[]]]]^bfeefghhhhhhfb`_`ba]YWWYYWVVVVUURPPPPPNLJKMKLKLMNMOPPPRSRSSTSTVVV[`cdb^[ZXXXWUSRRSSSRQQNLMNMLMLMONNMMOPSZbghaYUNKMNLKKKLMLLMLJLRRLKMMLKLMNNNQPQX\\XX]YQPW_^WQPTTRTYZ[\\[YVUTSWfj^YVTSRSSUVTSTVXVNVpxplga`]ZWUW[\\Z_ktwwn`\\bdgkljillb_qxrrpr~}ngjrrihgcZ[\\[\\abW_}y}~~u~z{zwxzzxxusqoooolds\\_honiedba`__^`ccc`fvpmkkkjklmlljfbdr{xwokgfeccjpl}yedb^mx{xyyn^TX_ioR\\nxupvuj`^d{bM[ennjjacwohw|xqghkisnT^aZY`ZUbgeccdcbb`\\YV[nroy|rmmkjmmnxhXSQSrqgfkosqkg]Ys{e^abdfb^[ZYYYYYXZ[\\XZXbgc`_``]ckZS_aVUV[WQi{yl`_^\\Z[]]^abdfeb^^]TeʷϜV\\^\\\\[YZZZZ\\^_][\\[YXXWWXYZ\\^aa_^^____][ZYXXYYXYXXWVWWWX[\\]ZV[dd`^][^dikiiikjlnqhab[Y^bfhiiid]Z`gjihigfhhghgggfeedglnmonmklkbekgX_d_MWQ[qn]R`zyaW\\YVNJCSddVMLNLKKJHLQW^\\\\]^[\\_\\[]\\YZ_abcddg^SPQRTXSE=ESSLKHGIKMOOPQTOP}RNPR[XOMPPPMKKKKKJLMMNMMPQQQNOMKJHGGGJMGASZbmh\\VKDIKLJIE?=;9:<>>=?@@@@@BDDA??>>>==;:<=>@BB@?>?@????>=<=;99:<<<<<=<<<<<<;:<<>=?@@?@@BBAAAABBBA>;:9::;<<?>GYdbZJEFIHEDC;9=BCA;;BB?@FE>416@OMCDJKLNPSTSSRQMOQ]jHCGDDA???>??=<<;::=ACCCDFFEEEEDEJOQQRX`_]__ajuuvx~~W8?==<===>>????=;:8:BHHHEFDDDEFFFDCDCCDIJJKKKIKKJJKJIIHJJJJIJJIKMLFC@C\\aYPOKJLPURJB?BGJIIHLXM,,272.;DCB?>CLOLHLQIECBCEFDA?=:889BJRTOA/,+-/--09>BEII>;<<<;<<;<<?AEFEEFFFHIIIIMG;:88733:?>><<CR^edcdffe_YTR\\`]UOGGWcb]]]XWXOINTV]]>+46442/---,.9IQTTRMIB;7646<@?<9864234/-031120.+++,,-/13334333335777653440/.05=B?7117=<554/.03432100//027;:74333322463.-,,**)))*,+(',7>@?BCDFEC9.*011:A@>91;NC-'%'/=DA@A?:79BD:442///0012210//.+1=511.2.,+,++*(&&).+)**25441/.--011.-003<<63+%&*1438??950)*6864:5103:9:4/291.1322694000-+.341-+++,,)')/563/7C@50/1111,+19>;2./23343104:7/,/247;71/27;7-('%&()-33*$%()**+*),4=901420036:7-*++++,-013449;9@D=>HKIIJLMKFDFA?><;923669;5//39W}wuvh\\G62/-3961+#+>JE=6?r|pwowH6?UgipkhqhODSY?5?:41(%(*,8@3$)<@@?=.)$,RD41((6F>zyyzzvnebdedcdegkmmlknojdca_]]_bb_][YXXXXXVUUVUSTUSSTTUTUY\\\\[[ZZ[[[[]^____aaacdca_^[WTUUUWXYZZ[_abcbdhihhiiheaaaba^[YYYYXXXXYXWTRQRROMNLJMMJHHJLLMOOOPRRSRRRTUUVZ^___^[ZYXXWUSSTVWXWWTRPONLKLLMONMMOPPNR\\bffee^SSQNLLKLMMLJJOTZZSLKKLMLLNNMNNMR^b_`a[TXaeda_]WOQX[\\[ZXVVVTUkziVTSSRSSTUUTTUWXTUkyrmke]\\\\ZWY\\\\\\dprsum^^echtrjhjj^T`vzoozo[Y^`]\\\\[YWZ_]Z[`fmwtvyyv~|{xvwwvutuuuvttsqppoqgd|f^irscm~qmhfhfcZX^^\\acb^`t}{z~}|ysmjjnpstofbcej{zuqnmprepp~ca__lvsns~{dZiyXSUTgo^UQceYfUcde^[\\`fc`]{ϹttsqreNdtXYb`Uel^]_ba`baaa_\\UWlpnurlmlljjvt]VTTYfjhmnmkd\\Y[_of]abejkga\\YXXYZ[[[[\\^U\\db_]`_[cl[T^`XUUX[YPX|ê~{|ra[ZZY[\\\\]bddeda\\[_ZYɵ̀Z\\_\\ZZ[[\\\\]]^^]\\\\[YXWVVVXZ]`cbb`_```_^\\ZZXXXXVWVUWYZVUW[^a\\Z^a__^\\\\_djkhejieijni\\ZW\\abghgggefdZUekjjjiggggfefeeefinoooonmlrh]bm]Za`KT[lr]]vr`etj]^ZTQTFH_`UMLLJJKLKLLO[]\\Z\\[]]\\]^]\\]_cdbbb[QORRRQQSIFEHLNKGHIJMOPOORQShQNSSUTPNNNNMKJJIJIKKLMMNOPPOMMLKJHHFFJLHCCQYTZjj^VNFIKLJIC=;:9:<>>??@@@@@ABBA@??>>==;9;=>@BBA@@@A@???=<<<;99;<<<========<;<>>>=?@@ABBBBBCBBCBA@=::9::99:?>7?SabNBFJGFFJA8;@BA<;>B><EF:/4AGKKJQONOPQRRTSUUSSS_sPGIEECCCCA@>===<:;=?BCACFFFFEEEGJNPQRXaa__]]hvzzyyb>EA<;====>????=<;:;BIIB=BCBCDEFEDCDDDEHKKKKKJJIIIJHIIIIIIHHJKIKLLJE@CY]TPOKHLSWRHA>DGKJIJOQ>+.59714:<BC?ALPH@CRPHCBBDDCA?<:69JUQRVP=-13.--.28=>?AC;77:;:<<<==@DDEEEFFGHJKJMRPCCCC@55CEB@??DQ^cdejmmnnjddfc]UOGGUaa\\ZYWX\\UJKPFGTM84545421.+*/ATUTPIB?8232//5=B>8532.+/42/.--.--,++***+.1346788413:;96531.--,/7?;50/5=EH:6<64968853355345642212344345440,+--,+)*,,,04<EFB@?=<;:86427:7:><:948=0$$$,9><<>@=<;:?@=844411467:;852/.-16/35./.--,-..,+'$&'&')/410.-+,,.-*'(.28=511-))+.037::443))5>:/57443767527;45667995.,-,)'*141,+,--*&&,7;6348>>9/+020.,/7=<81.044234568:;<<::;;6.020262+(('&((+.-)&')/44010/6?7,052+(-240)*,,,---.12246639?<?EHGGKNNPUWOIHKIFE?;;;;;60164->sR53451,+-/0/.,3BJ??GNG^QGihmxlS:J;<H]c`lihz}Z;=PYH;;:4,+3748:* &4A<83''7MT:3/,.:B2xxyzxtkb`cdcddegjlllmmolgdb`^^bed`][ZZYXXXWWVTSSSTTTTSSSV[\\[]\\\\\\\\[\\^^`a``bbcdddddb_\\YWVUTSSSSQRSUZ_acgihjkkkhecceca][[ZYZZYZZXXXUSRPOOOLKMNLJJJKKLNPPOQQQQQQPRTUWWWVWVTSRQQRRQQSVXZZZXVUVUQOMNOPONOPPQPOU]beimmf]RNOMKLMMNNS[_aa_WMIJNNMMNNNMNNWdhb^___chlqsqbUU^a[YWWVTVTUit_SRRRSTTUVVUTTUWTTgwtqocXY]]ZZ\\\\]gonmqi[^d_h{sb`d`XUT_mmu~ubUSWWTVXWWVY`db_]igxzmouwx}{rnrwxxxxwsqqtvtqpomnrpwzWOSXSVmkRW`ddfhf`^]\\affaf{}}}yuw|}pegkopomc`digg{xutsyegzlp__^bnrjjjq}|fmlf`VWvʶfRROsfRYyɔ\\cga\\TTUZetfVetuzvuti{`PZ^_aYK{yj]]b`_aaabca_imms~vlkmmltteZWUSavpkqtke_[ZY[]fh\\a`^billf^[ZZ[[[[[]`]\\\\^aa_][cm]V_]YWUTTW[TNfzropnaXUWYYZ[\\bfdcb^\\[^_ZuǶnT[_\\[[\\\\\\]]]^^\\\\\\ZXXWUUUX]`bcddcbccaa^[YYXWVWXXWWY_`[WZ^bd][]__]\\[\\]eljebid`dfdfb[\\beeghhgfcipfX`hkjjigffffeedeeflnnoonmmltiU]g`Z^]QS\\ZRa\\]|bQ]h`]ZTQTLIR[RLLLJKLLLNIHS\\\\\\\\]]]^]]]]_acb\\VTOOPRRPOOOOOMHJSKIHHJMOPPOQRNTyQNUSTSPMMNNLKKJIHHJKJKMMMNNNMKJKJIGFFJLHFBADHPcmd[QFJKJHD@<;99:<>>??@@AA@AA@@@??>>==;::<>@BBA@@@A@???=<<<;99;<==========<<=?>>=?@BBBBBBCCBBCAA><8:9:9989;;;<CU_KAGD<=DKE=>?BA<97@C@DHA/3C?@HOWSPQRXZXVVVYXZWc{WILHGEEEDC@>?@><<<<?BAACFHGEEEEGKPRRSXcgc`]\\es{{}x`6DC=<===>>>???<:::<BEHE??AABCDEEDCDCDFHJJJJJJJIIIIJIJKJJJHIKJKKLLLA@CWZSNNKHMUYPEA?EHJIJMH9..069752,4CGABMOD;=NSKGECCDCB@=;9?NOPY^\\K623..-/58;<<<<956::<<<>?ACDDEEEEGGGIIJKNRLJF>98;BBCBAEKOSWY]__chlnkhf_WSOGFQ\\^YTRSTWSKKJ:19EC73565354+(7MVOID>;<:9:730/08;5110.,/46.++,..--,***)**,2668:9635<>7531/,-,-18=5+*3HSPLA48:9@==<748>?8689977778:7101221..00/.../13;ACB?<:9:8654248967::767540-)'(.441368758:<><9544436868<><7/.253./1,++**,+++,./(%'+.--.-+*)))***(&)/6:9310-,,,,/3114677.-9B?11878833574685321/463.+)*+.045/++01+(%'.8<5/4:7121.1421259;;810031/02333222587751,021231-*)(&''((()+*+3<82344::.)-/-)(*,-,+,.-,-+)(+048630267;CGJGMNQX`c\\TNPRJHF=9;;:545:<15sH*9C?3,*-./2::35EF;;><af-)@:@mebi=,02<L]XUegfsqO7>AIXM988209=1-1+'(*641744FRH4320267-omjryui`^`abcddfillmnlmlhdba__dgc`^\\[[YXXYXWVTSTUUVUTSRSW[\\\\]]]]\\[\\^`bcbbbbcedfgfc^\\[[YXXVTUVVVX[^cfhjkkkkmnkigggdb`\\ZYYZZYZZYYYXVROPQPNNPOMMMLLLLMPQPPRQPQPMORSRPPQRPNMNNNOPPPSVUXZZZYXXXXUQOPQOPPPPQRPRZacfhkkcSMOOMMNOQUY\\]beeaZTOLMNONNNMNOPX`^YX_dgijjnp`SV]a`ba]WSSTVcbRRSSSSTUUVVUUVUUUU^lwwl\\TVZ\\[Z\\^cjnkjnfX[\\Wj|lVT]]YZVR[lzx`W[WWWWWWXXXY^fdc]YW[tupruwzzz{}~|urvxyxz{ywutwxuqomkks}y\\T[WSYQJYcciglf[\\][_cfbauystw{whehkkkliefkl[b}~|xqriZXrq^__fnpkklpt{umtoll[QǓd_dr\\LKsqchl`WUW`[OTh`XWhpdhpustVU\\Y\\]^XYwva]__```acfceusn|{nill|}cZZWTQaemtlog^\\\\\\\\\\]^om\\`_YU\\gpph_\\[[[[[[Z[_\\WYada^YblVOSRSRRQTVWYZOQy{onmbXTX[ZZYZaeeca^\\\\]_]VǽbV]]\\[[\\\\]]^^^^\\\\\\YXXWUUUW`gebddcbcbb`]YWWWVUWZZYXTW^dccccaZY^a_]][\\aike`bdaadghon^acihfhkhfcgqqjgijiihgffffffeeefjoonoommmlaIOeic\\YYXTKHKRYeiaNK[_YWTRRNLKPNLKKJJKJKLGCITY\\\\\\^^^^]^_adaXRONOQPPQPPOOPPPKNTNKJJKMPPPOORNHlqPSTORROMMNNMKKJIGHIIIKLLMLLKKJJIIIGEFIKJFFIGEIZkkbRHJKIEA><;:;<<>>?A@@AAA@@@??>>>>==;::<>@AAAA@AA@@A?>>=<<;;;==========>>>??>>>?ABBBBDBCCCBCA@>;88999::9:9@GADLCBG?79DFEDCDC>954BIBBFC;=F=8@OTSQQVad_][X\\\\]Zf[GKFDDEEDCAABB><<<<?@AACFHFFFGEGKPTTSYenlfc`coxy|uS3B@=<<==>>>>?>;::9<ADGNPF@BCDEGGECCCCDHJKKKKKKJIJLMLLLLLKKJKKLLKKK:?CSXNKOMIMUZMACAEHIIJH</--.377;9,0>ECDOM=7=KVPIEDDDCB?=:<GLIPamhP;5,00.2<8===;:734:;;<<=BEEEEDEEEGGGHIIIIJJF9,.9@ACCCAESWRRUYZX_hpsiYXYSPMGENVZWQPPNMMHHD5127>6/2331480(9PN?53:BGIHGEDC@=:81.//00///-++-//..+)(*,,,+044455688753420/....28;5(,@OQOJE813:CB?>74;DE<68;>@?>>>>933200./361143./7<@A>70,,/4333212795498665540/.,,.,,,.../047;==95458::968>@A?5.2641+(*))*-1.,++*--*(+/1/,)'*--,+,./,+0574000))+,/6>=94567546971.6649621138=:51--/352-,2579:60,+..*&&+15632:;3.15202667899:841/-+*+-+))'$%.52/..03685300,&%'(((*+,,*,7<82.2582('*-+()((*+,+)))('%%&*594/-../6?EKMRX\\aefgaTJKMQJ62::966;C@60Qf{yuQSZXF3.+,.-.7=:7>F?6.0g_4),2,-IDEsd812/37AD=GcfgtiKAHE>JYL94424621221*(.-6INKABCFC742/-,da[bqrh][]^abccehkmmmllkhecbaadeba`][ZYXXZXWVTUWWXXXVSRUY\\^]\\]]]\\[\\^abcccbbccdfhgd`]\\[\\]\\\\\\^adfijijjjlmnlloooomlifdb^[Z[[Z[\\[ZZYYWUTSRQPPPOMNNNMMMNOQQPQRQPOMMORPMNOPOMLNNORUUVXXSQTVXUTRRVVRPQQQPPPPPOQTVZ^`cfhf`TQPOOOPRTSRW^__bfd\\QLNNOPOOOPPOPTSPT[`dikkkg_Z[][dhb\\WSUV\\ZQRTTTSTVVVWWWWVVWUSZhg]XVVWWXZ^`ejmjijcVUSTjudUUXZWVbmq~m`\\ZVVVWVWWXXZ[[[OYY\\jrnoqvxux{}|vtvwwx{yxxxwvvtroomipcOTZ[^]pV]abejij^Z\\[\\_`b`\\fu{~~{~~~zmeeihjlkhfkjdhrx{|{zujqtgqr__ahnnllpnp|{n^VXZfh`}{[]ieUZhcfvg[YY[e]QLLS\\Y\\foomrp|vYW\\ZY[]][`W{iaa````bdb_unx~pjjntZ]]UPP[kfsnjvbZ]_`aclplxs__`[TSWennfb_\\\\[ZZZZ\\[XYZ]]`]bhff`Z[^bb\\ZYXXVPHjollbXUY[ZYXZ`cba_][\\\\_^ZaɛY[\\\\\\[\\]]^^^^^^\\\\[YXXVUUTYdhdcddccddca_\\ZZZZYYZZYXVRU_edcb^WYaa]]\\[\\eli]\\aa`cgmu~s_acijimmfddfimomkkjhhggffeffffefinnmnnmmlm`AKtue]TYZNJHJLOPPTOJOWUTSRSPLKJKJIIJJJJJKGADKSZ]]]]]^^^_`b^ROPOOOPPOPPOPPPNMOPSMKKKMPQPONQSJQmSXQLOPOMMMMMKJHHGHHHJKLLKKLJJJJIGGGEFGIIFFHJGFShodTJIMJFA><;:;=>?>?A@AAAA@A@??>===<<;::<>?@AAA@AA@@A??>=<<;;<<=========>@@@@>>>?ACCDDEDDDCBCA?>;8889899::<EIAAEAA@;:?HBFJHGB<9<?KLDCEFFDC>6:MRTRQ[hkefc_^^_[eaEIECCEEEDCCED@><<>>@AAEHIGHHGEFKPVVTYfruqmjgmwz|{tNDG@==<==>>>=>>;::;<ACFLQJ@ACDEFFFDCCCCFKOQOMNLJKKMPONNMMMMLKKLOLLHACEQZNOSPKMW[KBIFHIIII@72-++036::439BDFNH:9>LYTJEEEDB@>;8<HLOXgukJ<>)0325=;57:989749BC<<<BFGEDCDEEGGGIIIIIII@.'4>BCCDC@DV]UQQV[Z\\itxhPSYTOMHGPWZXTQOLIGDD>533533./00/142/:G@.,3;FJMMKKKLLKB8/+-221/,),.//./..+*)*,-/.2553313664/24310//./39=8,1HQPOHB92-7EE6337>D@879=?BBAAA?=9851/+1<;6:=4.28<=;:80%#*/3443335654543312661./,*.,)())2==>=<<:769=>?=:>A@CD=3.12/*),+++-110/....//.,./2-)/670,.57402442,-2/..5@EEA<731/.-+)(('16-,-*&&+4:::6/-049503<=9=@7340-+(&(,13325==67=>5.27867897620-+*&)+--*')1531008;5483011-((('((*++)'-67450042+(*.0+(('(*,+('''()))*-231.---.27>INNWifegjcR?6=TW=3>;89;@A720.-cv;45GioZ:--++++,/9;:51;D2&QqS3,-*+-+.+,63*++,0650+;]deoaIHORQIHTI/.14;500230015;HRTT[Y\\U@5/+'.^][\\aeb[WY\\`bcfhhkmljjkjhgfdcccbaa`][ZZYYYXWUTVXXYYYWSSW\\^^]]]]]]]\\\\[[]_bbddccdeffda_]^__`abdehkkkkjijmnmlmoqrpnkhedb_\\\\]]]]]\\\\\\YXXWVRPPNLMMOOOOOOOPQQPQQQQONMNOPPQQONOPPQSWYZ]\\YSNMNPQQOOQSRQRRQPPONNMNRQQTY`ghgf`[SQQPPRRQOOTV[agge\\SNLNPQQQQPNMNPOOPSZbiklmliecX[aa``\\YVWUPRUUTSUVWVXYXWXWXURQSUUUWYZVU[`acfkiij`VSSZij`]]ZZVSk}h\\VVVVVVWXXVRQPS^[]fnqrsuxxz|{wuvvtwzyzxusppppoqnkw~}XPTWZZX[Wbfcc_hii]ZZ[]__debllr}~{}|yvgchijlljhjjovvsqpmliiryxze`^cilmlmqmmmnpsf\\NQUS_fljnT[Ÿ́c[Wl]\\_ndX[VTWXSVWUSadwkYlnaZ]\\]^^ZtUh}{kgda_`abb_fxysmhvl_`^TMT[vnfne_^dfmtxvvplutc`b\\WTR\\hmkfb_\\[YZZZZZZXUT[b`awwnw{j`]YXXTWTtujlcWTXZYXXZ]``_^]\\[\\\\]\\Vp~T[\\[\\\\\\^___^^^]\\ZZYWWVUUUZehdceecceedca_^^]^][ZYWXVPOWcecb\\W[]\\[[ZZ_gmdW[bdfilut]_ahmstofcbdeimnmlkihhgffefgfffgjmmmnnmmllgMSwseXIWZJIIKRRPPPQOLPPOORTRMKKKJIIJJJJJJFDGGKV]_]]]]]]^^[VSQQOOOOPOOOOOPQRRQRYOKKKNPQQONQRPEioYYMKONMLMNMKKJHHFHHIJKJKKKJJJJIHFGFEFFGGGFFGGFQhofWKIMJEA<;;;;=@A@AAAABBBAA@?>>===<<;:;=>?@AABAAAA@@??>>=<<;<<<<=======>@@@@@>>?BDDEEFFFEDCCA?=:788887789BHG>=FCA?>@CJ?GJE@>>>CMQJFGGEEC<554DTVQQbrqoqmdbba^chFIFDDFFFDCEFEB?=>>>?ABGIHFHJIGFIOVWU\\kwzxvwtw~qGEE?=======<;=?:9;<>DFGHGFB@AABCCDCCBCDDJUWRPOLLLLOSSQPOPPNLLKJNNMQWSHTb^^WSNMVTEKSJLKIIIEC@4+.43457988?DFHA;@@O\\TJGEEEA>;979>?I^kthH>:2145478569899@E56A=:7@GGDBCCDFFGGHHGHJHD=16CDCCDEDADU_VQRWWNYktxeOW[WQMHKU]]YVUONMHC?:654320.-./..143;C5(08;BLONMLD=<@A:1*.550-+*,24200//,**+,.346963324553/0542001004:?:/3FPQOH:3868FG1'/9CA638:>@DECDCB@><73.'2C<:F=--476348:4-,1146555433651120./8<3,/0,0/(&&+<NIHC=;;>@@>@A;3475:A>3+(**)*.-)(*/3788888870*+031.48:2-.:?855322.+4?:17GIE?841.+)''()*-,33/-+)(-454430-*/379;=;8<@:7::3+&&*.110139??BGHA89985487630.+*('(.30*-564102:DB4042.12010*&'()))((-10011130-0386-))((*/101.+*,-0441///.,+177<CCFVfgehj\\I:2*A^S;:8568;5+/30+O}P4+&1LM<+'(()***+121-#+>@4981631+')('**$'-,,04741+,IahcOEILR[TNINH0,=A4+-2=D@::?ERS]d`Z\\@0,0-0\\\\^\\XZ\\XVY]acfikjkkjiiiihgfcbbba__^\\[ZYYWVWVTSUWYYYYXXZ\\]^^]][\\]\\[YWWXZ_bcddeeddfijfc`__`ba``acfffffgijkjiiknonmmjfefea]^___^\\\\][ZYXVTSSSQNOOOPONNPOOOQQQQPPOOOOPSTRPPQQPPSWXXY[ZYWPLNPPONPRPQQQQPPPPPPPQPNORXaeegga]WSRQSSQPMLRW]bhjf`YPJMRRTWPMMMNNNNMPW]ahmnopiidbbcec]WUURTWVUTUWWXY[ZXXXYVRRRTUUWZZXY[^_adhhijbVSZdhe``_Z[YRkw_UVVVVUVWVURKOY^[]ckosvvwwww||wtwxv{~~kchjjknqprj`nvfUTUWVWXW[ddcbcgfne[Z[\\^_cdjrl}{|{v|mcghjlmlkjjpwywvricdhpqoprf```ejmpoonmjjlpojZWba[_fjq{dZ`WpˢdoϖN^\\ZldVTTTTRTTTTU\\g}\\`txqf\\^`]\\`VRdhW[ir}zlfa```aa`big|skl{}hfdYOOW^grwhdswensy~~pikiinf_a]WWWX\\dghed_\\ZZZZZYZZTSXab`|ujtujegjqvngaW}glgXRWYXWVXY]_____]]\\\\[]SnS\\[Z\\\\]]^__^^]\\[[YXWVVVTVZbecdedbdefdb`_^^^^]\\ZXVXYRLUbfc_ZYZZXY[[Zajh^W[clqqsy|b\\agorythcabcgknnmkihhhgfffgggfhknmmmmmlmdl^Tje_QD[[HGILRVUSQPOMMMLMOTTOLKKIIIIJJKLIGEHHGT]`\\\\\\\\\\\\^]UTSQQPONOPONNNORVYXX[^TKIKNPQQPPOQQI[|pcSJJONMLMNMKJJHHFHHIKKJKKKJJJJIFFGFEFFFGGFEGIEK_lgZMHLKF@=<:;;=BBABAABBBBAA@?>>===<<;:;=>?@ABBCBBA@??@?>=<<<;<<<<<<===>??@A>>=>@BDEFFFGFFDCCA?;968887678>HG>67;CB<?GJJHJIFCA@=@JKHGHHDCA:552<QWPWp~z{zrjhea]jpFIEDDFFECCEFFDA?>>>=@BGHFCFIIJGFMYZXas|uzaDGF?===>>>=;<>=;:;=@GJJJHFDBAAABCCBCBCDCFTZVQMKLLKPUURRRRROMMLHONMZp_LQkomeQQOVLBMOKMLLG?BDE@08:6434:9;>BC>;<=ET]TJHHFDA=979?85LYfsj`_=467665689;89;;A<78<60;EDCBBBCEFFGHHGFKD<>=BIGEDDDDBGV\\WUXZJ3FbrrYIY]XSNIO]c`[XWSPOLDA9565430------/36<?0,5:9CMNMLJA1,-1=FA;6211/,,49510/.,+*++.358:63222332//442/10-15;>;14BJPOF6.<I?HJ3'.:A=/07<@@DDEEEFCB?94/'3D:;H:*.551./59625433343344453000/,-7:831432-*-(.GTNKE=;>GJC:?C4-.+*,493,(''&*00.,)-6;=@@>?@:1+*/2223431--;B9454231,4<52>JJC;520,*(&'(,1316<;:7558843321/)(,5=?;55<>=<=84+&'+.10/1258;?HJIEB=9777740,++***,162.48642224;A3.10/24463)((()*)((,,**+/31/4:=>:0+)((,7@A??6,,.144/-...--177<=4FUXadiiV@<3+6QaF122343-(.1107DB8011('&('*)&'((*)+.34,%,9;0)17830,+-.07?<2+272563-'8WWIDDIGKX^V?<RN2250466?NRGIBHV?AYfd^Q.,101\\\\[[XVWWX[_cfjkkkkihgghgfedca```_^\\[[ZXWUUVURRSVYYZZZ\\^^^`_]\\[\\\\[ZZ\\]_accdefggfeehjifcaaaba^^`bdefffgiihhggikmmmnmkhghfa^_``_]]^]\\\\WVZ]^`a\\TNNPOOOONNOQQRQPPOOOOPRSRRSSQNNRW[ZUW[c`ZVTSRONPPOOOONPQPQQRRRRQQQRU^_ahif`ZVVVVUTQMOQSYfiecb[QKONPUPNOONNOOMNPRV\\bgkmnrqmkkjg`]YX^\\ZUUVVWXY[\\\\ZYZ\\ZURSUVUVWVUX\\^]`dfggibTWfiedb`^YZ^TgpWTWWWWWVTTEJ`\\VZ[]^anywqmlnsy{wxy}}~lajnpootuuwfVTXXVUVVVVVWXY^dcapsagf\\Z]]`gdaosw|v{s}hgijlklklihjotxtkfffjhijjgb_dlt{{vsxqeflmeqwrgbfeiowvqhghf^iaJ]^WVWUURTUVWYbs[anmmohZYXZW_ea^_Y]\\\\urf````aa_a]`wril|o\\`a[RV^cc]gsdkmiuymqqllkhffih`WTVUW^defdb^\\ZZZZ[[XUV\\c`plZ]qyhcfmrz~leYZmkp^SUXWWVWY\\_^^^]\\\\]]\\^XmhV^][\\\\]]]]]^][[[ZYXWWVVUUZ]bbdfeccddb`]\\\\\\\\]\\[YXW[aVLSaidZYYYZYYZZ\\ei`XZafnpsw}{c\\bjqoysfbbbbdhknlijjihgffffggfhlnnmlkllmgofP\\]TKGa]HHKNOUYSPOKKKKKLNTVQMKJHHJMONQMIGGKLJW_`]\\\\\\\\\\^[MMRTRPOOOOOOOOORWY[Z\\`XMIKNOPOOPOOQMOurhLILNNLLMMMKJIHGGHJIKJJJKKJJJJHFFGFEEFFGGFEGFDDOae\\NHJKGA><;<=>BBABAABBBBAA@?>>=<<<;;;<>??@BBBCBBA@??@?=<<;<;<==<=<<<<>?@B@=>>?@ACEFGGHGFDDDA>;:7778889;DGCD?==BC>?ABBA@CEDDEBCEHGHMRNBC?637>IUNVxyqlfb]irDGEDDDDDDCDEFD@?>>>=>@GHFADGHIFDMZ\\[ct~y~KAHC@?>>???>;=?<;;:=CIMJLLKGECCABCCCCDBCBCKUUQLJJJINRSPPRRRPOMLHIMLTpiQJovqpZQVXHISJKNMI;/8ADC<D?852156;;>C99:;DU]SJIIIE@:67=@78RPOhuxnG689888989:89::9:9685-5@BDCBBDEFFGIIHHG63@@@GGEDCCBAHW\\ZVVS<'+IpfGGX]ZTMJP^dba_[XUQNC;766653/,,,,--.27<=59:69INNNLIC6-+,/39BB;531..3631//.,,--+,/27610./0231/.242344258:;956;?LM@2+>SLLN:,/7:4/37<??BDFHIKIHB84308>38C3+/32-*,/4446531021224310///.++48976673*1<01MSG@>?;9>?83:A:760,('-10/3/%(3687.*179?EEDD;1+)+.131,*--/;?5042001.11+5HNJC7221-+)(((((),06=C@658998852.+**/7:515:<=>;:2)&(+.122121,/<FGHGB=::;972,*+++,331667952396-*+4/,/.045:91+)((*,/+'))(+28624<??>:1-+)+7DHFEE9,-00/20,,.031167=21PO:Jai`LGB898@VL644685,+0/...)'.-*20+'&'.0('&)+)&4GJA5''0-(19:1.01341=UZC.55,183,)+479AILA<NZWA03MP2)6@=;?HRW\\JFM2'8`o^eT0/31\\[YYYWVWY]afjkklkllihghgeefca`a``_][ZYWUTTTSRSVX[\\]^^]^^`b_\\^_^]^_abceeccefgggfeefgggeddca___adeehhhhijiiihilnmmoppnifdb``aaa__``___afghilleXNLPRQOOOOPSSQPPONOOPQQRRSSSSSY`edXV]b^\\`\\USOLMNNNLKKMPPPQQQQRQPQQQQSY^befeeb^ZYYYURPNQY_`_]`c_ULJMNOQQQONNMMNOPRW\\`bdhjmqrniec^\\ej`UVXWWY\\^__]Z\\_^XSRTTTTUTPPX`]\\bfhggaYdph`_a_]ZZ\\Va|]SXXXXXXSCXPTZYX\\m~xkcflnpsw|wdkz}zy|}{ymg_RSXXXWWWWUUUV]ec]^Q\\YZ^ckpgbpx|yyzz}{zrfjkiijklga_djnlhedb`chjnoa_iqw~ys\\`]bczsYWW[pwhhgffagŊ^IYYWVWVTRSVXYZ^|tukigkpjizqZQPTXZ[\\`aZf}zg_`````_a^ftrfor_RVX_]]bcaZehlkjpmcvtqrhdqwuupileVW]achkf^ZZZZ]^\\WSW]`f^X]df`[_irumfb^`ZoineWVWWWXXZ]^]\\[ZZZ\\\\[]]Uݽ`Xa_\\\\]]]\\\\\\]\\ZZZZYWWVVVVXY[]aegfcccca^[YZ[[\\\\ZYXX^c^UP_laVYYXXXYXY_gaX\\`bdghmuxd^ekpuyjbbbbbcehmkjjjjigffggghhikmomkklnmq}rfts`KFc`NONQPVaXRPHILLJLOSUQNKIHIOTUSTNJIKNML\\b`_]]]]^^XGENQRQPPQOOOOOORWZ\\\\]_[PKLOPOOOOOOQMPiskJIMNMKJLMMMKIHGGJKJJJIJIIJJIIHFDFEDEDEFGGFFEEFFR]ZNHKKGA><;<=>ABBBBCBBBBAB@??>=<<<;;<=?@@@CCCCCCB@@????=<<<======;<;<>?@A@=>@@@ACEFHHIIFEEEB>;:77779:=BGLHGFDCADEB><<;<>??AFEFHHHJOPOEDN=39AEJITwpgd]irCDEDDCCDDFBAED>=>>>=>ADFDADEDEEGJV`aeuG@A???@????><<?=;:7>GMMJLONIGEDCCCCCDDDBBBDHLNKJHGGKPQPPRSRPPMKHFLLLcl[Hn{sr_SYXGNQFJMH;(+<EDEGIC:53113657@>:8?GV]SKKKKG?957@=4?QJ:Qlj_H:;:99999989;;;<;8663-1=DDCDBDEFFGIGGF>02659FDDDCCBCIT[ZYSE1*%4c\\<KX_\\TKJP[ceefd]VTPD:767774.+,++,,,1:>>=>50AQPMNLHC93/./05:58C?5212210//.,-10+*,053+-0212201/./..23149:864963CK8.)1KSQN;./122456;>?@BILNOMLF8578;915;.+02/,*)-0468741///0131------,+1699;753,9J=8II<17@5,+,*.699<=:73*'+-0<=.)4:=;/)1439CIHA80+('*0731///1;=.(-1/./,++-;NRKC:762.+*))(('*+),5>;1../243/*'*-.,/4513:><::90(&),.13763//8?GHE@:9:<<71,)*++,04217;7791.99+%%++*+.268:71,*))+-2.'&'+3;958>?;73.+-/-/=GECCA4-/44340**07856775-=Q>*3FVMBF<4::;@D=727E<+/0.,+,++,+')3<7*$.8.)(*.02>NOQK5'')/6;:3+*,.012<OUD::;;;4+*2-.00HF01EU\\G-(4KK<=??ABBAK[NAIB1)Fm_XuZ.,0ZZYXXWXY\\bfikkkmmmljihhhfggecaa`__][YXVUUTSUWY\\^`aabaa``bc`^`a``^^a`bddddeffeeeefffeddddc`^`abdfghhhhijijjhiklmmnppolga`accccbbbaaacgihgiloohXJLRSPOONPRRQPPPONOQRQRRQTXZ]cefif]XSU^\\[a_YRLKKMLKJLNOPRSPOONLOQPOOOQW\\fopnjea^^\\[XUQPTYYX_nreXPMMLMPSPNONMOPOQRV[\\YW[`dihfdegd`a_\\ZYYZ\\Z[^bc_]`_YVUSSSTUTUSW]][^diid^[mwocZ]^^^[YXZa`euaSXXXYYWAcUTcYWYjxiahnkkpwlpz|zw`VRVYYXXVTTTQZgaTvYMUVWW`mmeagw~~vrnjvxyfjjhijjjf`^afgfdbaaaegfno^\\lpnq}xpa_`fhmz]UR^hSUWWYXYRXTSTUVTRSVX[YVflbgmnpoqcZLBFM\\e^Zwt`^_`a_`fgqm|rirlYQSU[^abaa]]_wkmofao|{wnihrvtydWZ[\\ampg_\\\\[\\^\\XSSW_f`^^ZUTVX[du{rf`adjqsskgYXYXYYXZ\\\\\\[[[[[\\[Y[]Wݼ`Vc`]^^]]]]\\\\[YXYYYWVVVVWYY[[^cggcabb`]\\ZZZZYYXWVX]`c^QWbZXYYXWXXWYbd\\X`bbgklo{vd`hmszxc^bbbbcdelllllligfffffghilopolklnlhlsz^K]\\QPQTPT`\\SPIHLLLNPQRPNKJIKSVTSRPLNNPNM_c``_]]\\^`SDFLNQRRPTPPPOPORWZ\\\\\\\\]TLMQRMOOONNOOPauiHILMKIJLNOLKJIHHJKJJJIIIIIJIIHFDFEDEDEFFGGGEEECHTXOGIKF@=;;<=?BCBBBCCCBCCBA@@@>=<<:<>>@@AACCCCCCBB@A???<<<===>>><;<=>>>??>?@BBBBCEHJJJIGFGFB?<;8789:<@FHLIHFFDCCEB@::<>=<=<?EFGFGKIGLPCRV@>CBDDSzslg_huDDFEDDEFDFECEG?=>?>>?ABDDAABACFGFQchiuPDC==ABBAAA?=<<<<;7?MQMLMPNJFDCCCCCDDDDDDDA?CIKKIGGINQUVVSQPPMPX[JMK[ieDf|vs^SUTFRKCJHJMB:AGFGFFC<877789628>=<=DS]TMMLKG>64>E84JRJ>@NTRC><;:;;;;:89:;;:;<;72-.5AFDDBDEFFGGGEA743+-9EDDCCCBCLUYXZR9,,))I\\>IU`]TJINW_ceeea\\YUOGEDB@?80,,-----5?BB@>2.@OOLLLHA74576565.5DGC?;5210/.,)+9@8/-032-.6;=:864432//22/3782-,0/+7?30/,9JOJ8-/11489987;CDEHNNMMA4787522570.02.+*+.158<<74100000-,---,.133347::520;KH=>;92:>-&())-340389;<80)')4@;019<8.*//-18DJ=.++(&*-7888887:9.+.23,-*)(+:MRIB>>940,))(((+1.$&+--+****+,+*),0.-/560.8<55682(#(/0.09;6/-6>CED=8:=;5/+*-0-*')+/67306=5-6:.('('',1246:;4-+)(*,3/))).68405;90*(%&,//.2<CDC<16?<886.*179:<>91.3EB-++/>A@;/0:>=:65408L@03*++***+**'#)8=5+1;92-)2<CIKJML8*(1AE?=?4)'(-//1EZQ?AMOJ@9=A524,11'.;HL8&+,0FQC8BD>>22FRY^WI<9ZiCZR')YXXYZY[^bfjklkkmmmljijihhgggdbbaa`[ZZXWWXWWY\\^_bddcbccccdec__```^\\^_addfhhgfeeffffgffeeedbabbbdfghhhjjjkkjjjjjlllmnnmjebbceedcccbbbcfgedgijnqgVNOQPNMNQQPOPQRRQQTTSTUVX[]aecbglj^KMWZ`ggda[UQONMMLLNQTUSQONMMQQSQOMMQ\\efdgha\\ZZZZWTQOQSU]fhgfb\\VPKJKPVVQNNNPQQS[^ZPRUTW\\\\YY[cecaa_]\\\\^_[Y_ca_aa[XZYVUUUVXWVZ]Z[bfgd\\Wgusg[\\_``^][ZXR[pydUXXYY[BpJLicVU[m|rgbinmptw}~efrts|t_ZXYYYWTRQVbf\\MX]QONNOT[dd_XXn~~|wokkjzyijhhijkid_^`bbaaaaabcbdgg`_ddkv}zuwgYadjw^NReXMNUZYbZaj]POPSTRSUVXUXyx{afmjohkysXINQMSfytc]^`c_errvsnogXRSW]bbbaba[~{rsnpwcdep}}h`jrrrpwtWWVWZfnia]]\\]]\\YTTX\\he_^ZVUVTRX`pwmceow|tk~lfYY[[[ZXZ[[[[[ZZZZYYZ^Xu߳\\Wd`[^^\\]]]\\\\[YXXWXWVVVVVWXZ[\\`ijeac`^[[ZXXXXWVVUX^``\\ZVTWWWXWWWXX^f_Y\\]^dtxw}vebjtq_bcbbbacdknmnmmifffeggefjoppomkmmmfcjlsvXZULKMRSW^YSPLKKLMNOPQOMJIILPTSRPRPQRSQO`c`bc_\\\\]`TBDLNURORURRRQPOQVYZZY[]XNMPPLMNNNLOON_|ZDHLLJJJLNOLKJIHHJKJJJIIIJIIIIHFFFEEDEDFEGGGFDCEELPMGGIE?=<=>>?BCBCBCCCCCCCA@@@>=<;<>>?@BBCBBCCBBCBAA@@>==>===>>><==>>>>>==?BDEEEDFJLLIIIIIFC?<;899:<ADFGHHHFEECBAAA?<>?<<=FGDKFEGJJKKQCR_OHBBFDR|vqkbiMCGGECEFCDQRFK><@A@@?@ACE@=?ACEEAMclluŬTCIB@CCCCAA?==<;<<<@KONLMNNMIFDBBABDEEDEEDA>@GNPOKIKOQWYURPPPLL^yUGMVfoJSwwt[ERPLUIHIADerjW=?IHGD?>>>???>53:=?=:EYXNMNNF<78CG1-HRFFKJLOGC=;;:<<;;::;:::9;=:3,,3AICECDFFFFFFDD;2/19@FDDDCCBENWYWTI3#&)'.FBBO]]SIHLU\\_``abb^RQa][XUQD9212227?DDEDCA7-8JNLKJF@:9:;98511=HKLKF<11220.,-;KI<5565326:AA?;6595100/-155-''(*)/513612>JF2*0767;99935BA8BMPNK>/24/++0588530-*/30/49:732231//,*-21,+09<6,)-18622<FG=4/7?E<-)-/..030+,069<:1*-3@C93784-++*)((6F;('+)')-4436>@><931204==97,)8KPH@?>;620/.-,,-20*)*)*../0011235760-0661054036:8/%'171,/65222208A><==5-++,020,('.78/)+2<;2120.,**+02246;:1+)(()+0.--+/672,,0/+(('(-01/+3@A@>>@C=982,/799=@>8129<0***5?BC<12?IGA8.487@FKB-2.'(('(()*),388989:3.2:CFC=AHE82AOMIJJA1''*.35;>8169<CBDG=6>?1')&16/0,&),&.HQDCA;;3-<UemhWB3D[@1h}N7WWYY[]aefijjjkmmllljihhhgggggeedda\\[[XXZZYXZ]^`bcdcceffggfeb```_\\Z[^addgjjhffeffefgghhgggedcaadefgghjkjlnmkklkllkkkllkifcbdecccccccbceefhhghlmh[PPQOLNQRQPPRSTUTWXXZ[\\[]^ab`cfkpqgUMXaccabdd`WPNLMMNQUVUUSRONQRRSRPLMSUSSUWURQRSSTUSQOOQSUW[cihda]TLIR_\\QNPQQPQXbj[ORSPV__[TYegihfca`adje\\\\`abda]`b\\WUVVWXYYZ\\`dcaa\\PXnnd`aaab`_]^^ZYk}{aVZYYXUJUcreUTV[ixwqgfjnrwxw{whimqpvt\\V[]XQPRY]WSQRPPURHKSXZ\\XPQ^z{yolhcbeinnkhgfhjmjb\\\\]]]_`ba`_]baY_`]ajs{hmR\\ZYqӕcTRQVZ_sl{Yfs]QORTTSTUVM^tqhchffmj]Y`fxeSEEIQ[XX\\`b_ilhv}uoe`ZXX\\afdaaaafrmuqpjcc]izcdqvvqn|}UVWVW^dc`a_\\[Z\\YSUYXef``]XWXYZ^[irmc_bejicc}vh[Y[[\\[YZ[[[[[YWWXYXX\\Z[ߨ[[d`\\\\][\\\\[\\\\\\ZXXWWVVVXWXXX[[\\]elidc`\\YYXXVWWWWWVX\\]]Yf[NRTVVVWWWZeeZX\\\\Y`twv}vfckvl]edaaaabbhnnnnljgfghijklnppppnmnqhn}pvlf[LMLKLRUQPNLLKLKIIKNOONLLLMPRRQRSRSUSP_caef]Z\\]`ZHCJLVrbRVTTSSOOQWYYYY[_[ROMMMMLLLLMOM\\nLHIMLKJJLMNMKJHHHJKKJJIIIJJJHGGFFFFEDECDEGGGFEDEFIIJGFGD@=<=>>?ACBCCCCCCCCCA@@@>=<;<>@ABBBCCCDDCCCAAAB@>???>=?>>>>>?>>??><=@DGHGFFHLNLGHJJJHE><:8:;:=CFHHIIIGFFEEBABEFC@???JJFHGIJKMNJIEMNCGA?QKRxrnehZCIEEEFGEI[ZHMM=?BA@?@@AD?=?ACEC?Jbpnv²WAMKEDDDDCA>===;<<=@CILKHDBDFFDBAACDEEFFEDC??FNSTOLLOQSSRPOONNPMxmLKTghHHhwyX@QPSPIKF:ERSc\\8:JFFC=>?>?>AB718:==6:NVOMNNF:9<?>/,>IEEQUMHIF@><<<<;;:;;;;;::;?=3.3<AAFEEFFFFFFD?855<C?DCDDCCBDNWWWTPJ:((*&0B@EV[RJJMT\\][[[]a[]ckonkg]MA:447=IOJAADHMI>?KNLKHDA<965552/9LSPMJB8-+4;98759ELD<9889878=?=;77;832213597/'(*+-/124634=FA.'2=<=B97923<:2;IQOE5+..*''+07=971,,49507<6..1451.-+),10,/5;<0%&(.5534<C>:3,1DJ:0,240//02/*,146;:8;@DE?:74113/*)'$-<9+'))'$&17/3=BA>60/111CH:;1.9JNG@><9435642110122,.46886555547:<80-144553/-26:=;2*/?A3'.8:72,'+9>;:80(*-,,-.,).76-'').7:1+,...//0223553/,,+('*-/02117970++,------0232258;@CGGDA>3-079;<@A?<=><71/17><?DB@;@UXRH04?72LbVAD3(++(&-=?.(.268628942266/,3AOB5GPKQVUNA0'&/>D;3379858>FG@AF;**,&46(-1-,+)'.DSH8=<74=Taitf<)175'6j{jXXYZ\\^afiklkjkmmlkjihhgfgggghihfeda`^\\[[[ZZ\\]_bccdcegiihgghfc_\\ZXWVY_cehiihgeeddfggghhgfghdaabbdddefikklmmlklkklkkjjjjigebcdcbbcbcccbcfiiggddjqk^WVSPONMPSRRSTUVWXZ[[ZY[_a^`fjmpppm\\OPUUWXZ]\\UQOMLKMQRSRSSRONQQQRRSQOOOMLLKKLOOOPQRRQQPONOPRW^bgnpmeXR]`SMQRRQPR_qkWTWRWgqka[^gookfefeceicZ]``bedaedXSTUUWYXY^dhiga__cljggecba``_][`]]hw|`UYZZSuvRbjlsm`XSXjuspijnrwzwwz}ortuqhgimpqukTY_XQMLPPNfwQMR_iZOTVTOVUMVgemcxhggggfcegeefhjkmf[Z\\\\\\`bdcddehja\\ZXfw{z{|oP]dilxܥnUS\\benp|cctxl_\\\\[YWSRRKk`d}qa_^`eme[RMI[z}sdUF?IRVY\\]_Spxy{te[[^_bbfdbba`gqwusl{eb`\\dzbhvxurs\\UYXVX[cdc_[ZX[ZUVYX_fbbaYWYY[^[biifc]U[^^Xh}te\\^\\ZZY[[[]^^]\\ZYXXXY[OZ]a^[ZZ[[Z[\\\\[Z[ZYWUUVXYZZYZ[[\\_fhfd_ZXWWWWXXXXYYYZ[Ycp]PSUWVVVWW^d_XXZ[WWdjls~vedku~yh`bcbaaaa`clpnnljhfgiklmnnonrnmoor`Uqmjus{rid\\]`]VHGILMKKPRTVVTTUWWWTNLJKORRSRTUVP\\dcjeSU\\`e[JDHLSp~qWWUSUQNQVYZZZ[^\\TOMLMMLLLLMNMQSHJIMLKIILMNLKKIIHJKJJJJKKKJJHGGFFFFEEFDEGHIGFEDEFIGHFFFD@<;=>>@CDDCCCCCCDDCBAA@><<;=?ABBBCCCCDDCDDBABB@????>>@@>@???>???=<>@DHHGFHJNNJGHJJJID?<;9;;::@FJJJHHHGGEEB@BEKIGGFGJHGEHKKKLLLJJID;<:;WQR~upjlbFIFDDHJEIdcPE\\C=A@AAA@@B@?@CEDCAHbsrxWCLKFDDDDEB=<=<<<<@CBDIIC=9;=@ABACDDDFGFEDCBACJRTPKKNONNONNMKOQBSl[ISaWFJXkkODLOVLHH?37>=JK7;FAD>57889<AA73<;=?::ALOLMLE;86332/3>C=ANLGJGCB@>=<;<;<;;;;::;?@94267?EEEFFFGGHB5045794=CDDCCCDNWXXYZ]X8+**1?A=KXTLKLSZ\\ZXUTTNYyrvwxpaI<725>FGA;9:ALOJGKNMKJFDA:4/./00.9Q\\TH?82,*7DD>;:78>?;9;;<<==?B<788999988:8852..2530113456=D?1*5ABCC77;439519HPI;/-//.+*.02;<:50-4<977:4-14862.,+))-037:70+,.03760,4<764..<E910562.+-/0/+*39::=BFGFC@<72594,)((-681+***+),4338BC8.+,.245956524BJF@<:403752144-),/),7;>=:9851./4:70-113772-.258;<7+,<A6-4?@5/,)(05101.+++*))(().1+%%&')-1.)+--/1002253.().0/+*-0246789;70,,..-/0/000//1448ADEHNK9-.7:;=>@B@@EE@<727?<77:?NODSYZV:29=6AU[OE:,../0B\\Q,)43,192.2/,01-35,,421DPPUZXXN7&$+=IB;=CDHC78DGGGB8670*65),4=8,)'&.DO;17;27Yijwl=&))174<nZZZ[]`bdhklmmklmmkhghhfggggghihfeeec`^]]^]^aabddeeegiiihgggea^[XWWVVZ_cefeeffedefggfghe^^egdbccabbegijlkhikjkjjjkkjihhgeedcc`__``accbabfgeedcgpqkd_[WSPNORRRRSUVUVWUUUUW[^_bhnmligjpeRJINQPPOPPPOMJLMNOPPPQPOPPQQRSSQPPNMMMLLOOOOPQPPSURPPPPQSW`kqqqpfccXNOPQTSPVjrh_[X[hsrjebelomlkllkcZX[\\ZY^efacg\\NPRTVWWY^dimmc_mjbkihec][ee[Z[jdYYkw`T[[_wrdmkjnnnj_Ubtssqhqtw}{vw{~mdknfddiopsv||[YaYPMORSFRPRUfvga^`baWOZc]nsplhikgkquvslfeedghkjoj\\Y\\]^`cfhilqlfR`n~nxV]ivtlެ`X^aeeoxmdcdbbcee`YSQQM}rW\\kpa^[\\Ygg_XQKJQ[ex^OMORUTRIyv}yc\\^_bbbbabdc`bn}tuin}sa`_^\\wl`mwuqtwoUZYWWV^_`^\\YXZZXXYX\\eccd^\\\\ZZ[`dgghmf`ba`ZXkshif`\\Z[[[]`aaa_][YWW[OoʖT\\_[YYYZZZZ[[[[ZZYWUUVXZ[[ZXYZ\\\\]adc_XWWVWXYZ[ZZYXYWWujXWWVVVWXVX_`\\ZYYYVU\\fnvwfflv}k`aaaa___`_`lrpnmkiggikkjlloqr^aprjVLJIP[`jpkcbejotlQNSRUWY\\`deca^[\\\\\\]UKIMQRSTWWWN]cccVLOWVe[IEGJQWlxm[UTUTPORZZZZY[\\XNMLMMLLLLMLMKJIFGMJIIILNNMLKIIIJKJJJKKKKJJHHHGFFFFEFDFGJIGFEDEFIHFGGFD@=;<=>@CDDDCCCDDDDDBAA@><;=?@BBBCCDDDDDDDDDCB@@???@>@@@@A?@@@A??>>?BEHHHHJMPMIIJLLJHD?<;;<;<=CHKLHFFEIEDCAAACGJJJKJKKJHIJKKKKLLKJGB969ILNzuzbJJHFDHLAOom\\HaK:AACAA@BBBABEEEDAEauu}EKJIFCEEEFC?===<;=@DCCGIBBGB=?@ACBCDEFHGEEDBBBENQOJKJKLLMOPLJMN@CgbJNMLLKLUSFFCQXJGC;77<<AD=<DDC<77755:CA77BBDB?:;EKJKLE=70.12228<63@LLKGEE>;>?@=<==<<<;:<??<:8;9:GFEFFGHIE=410/.+-;DDDDCBFOXZUTVSK<,)*0=C<DXVOMKRY[ZWSPLCBpz{{}x^9,/15;@?:8:;<?D;7GMJJIFCA93.+,,//3HZS?522/-8EE9572/0213;@@@@AAA712424653442112448?;1/1149:;A@63:BB=5.6?936318IL>30/1041.133:;<9645=?7.00.27981+),)(,48972+-376762,&*56450.3:956774/++-./*+;F=45:?BDEA??;95/*()+/363-+*,8801234@C5*+--05203550/;HF@<93..0..044+((-(+57;=<;<8.*)07620223651+*02230/)',1/0:?9/--,+,,**,02/+'())('''%&'&&&',///0///0/.151*).21000245548:7871..//.//.../--/25<B@EKTA.07::<=?BDCABCDC804;=?917P\\UOGAQC16??@<:>62--6@H\\oZ..:5/4:9.&&(275;8,&$'6HR[[ZWYR8&&'0@FCFGGLJ;7CHID53A@8470&)1@=,(03--AI3,64?_fgvqH)),0:D:Ib\\\\\\]_cfhijklmlmonjihhgefffffgfffeeec`^^``aacdeedefgiijjiggecba_^[YYVVZ^aa``bccdeeffefhe\\SXdjedeaabcdghiihhiijkjjklkjihfedddc`^__`accca_acbcgijlmnnlf`]\\ZUQQSRSUTSTRQSSRSUZ\\_homig\\Zq|kVLKMMMNQQRROMLKKMNOPPPQRQQQRSSRRRPNMNNNOOPPRTSRSUWURRQOORW^eeadgilaWTQPWWNN]qoimfahrpihhijkmnlljlk^SY[]\\Y_edaem^QOSUUVZbiknmc[bi^\\filjaapycZen~bXVaWY`ejlpkjikllj]Zmupprrqmz|{wwy}xliiiifjoquy{kpm\\^ZQOSPI]pTRONsxouhYTUdd_bv}tphhonldmsdhlv~~xqhdbdgjkjpl\\Y\\]_aeijkloehSu{lfnlmdIPQW^_^}sjc_^ceWct۝_ac[SQYdhaYSQNV~aSZ`hppmvnYIYg\\]bbcZPYqy`TRNQSO~xwr|vcX[`bba`abbdebexwuviisk^^_]Y_~ecoqnpqo}uXWYXWW_cca^[ZXYYX[[\\bbf\\\\aa^\\\\_cccefbdegjhlh{lomf_[Y[]_`aaabaa]YX[WX}qWZZYXYYZZZZ[[[ZYYXWUUVYZ[[ZYYZ[ZZ]aa]XVVVXZZ\\^^\\XYWTeu_VYXWVVWXVY[[\\YZYUUVZnyvdfk|v`]``___^_``ajrqonmkhhikllllounT[osgSSRHGJOW^ea[dq~~^Y^\\_a_^^_`ab_]\\\\_d]PLQTVVTXXUN]g`XMJJGO^[KEHJPT_vyaWTUTQOQ[Z[[YY[WNLMMLLKKLLLLLLIEGKJIIILNNMLKJJIJKJJJIJJJJJHHHGFGGFFFEDFJIGFEEEGIJGGGFD@===>@ACDDDCDDDDDDDBAA@><;=@ABBCCDDDDDDDDDEDB@@?@@@?@@@AAA@BBAA??@ADFHIIJKOQMIKMPNJIF?;<;<<<BHHKLGFEDKEECBA@CKMKKIHKKIJIJKKKKLLKJHIC8:<?KtwiHBGFGLYuzrmdmU;?@CAABBBBBCFGHE?C`vxʵa?PJIEDFFFGFB>==;:=@DDDEGEFLG?>BDEBCEFHHHIDCBA@>FRNJMKHKKLOPLJLI>IifQKI>FHGIGDFDSXIFB<9:<:<DB>AC@<:;:868BA;=CGHFB;:BFGIJD>6/2721134318GMJEB@0,;BB?<==<<<;:;??=<<<42CIFFFGHGA;52210//<DCCCBAENXZRIKHB?3.(*:D<CXXRLLRX\\\\ZWRME<Wu~jB-),2568@CDDC?8976@HJJHEC?82.,,,00/BRE4/01/0:?>423-++++/7@EDCBA?4//12453555310358:>;20125:<<=<426972,,6A<10117HH7/011034034579;<;>?@@5,*,,13662/--/1015521322149840,(08640.367899951-.01.+2ENA1158;@C@=@@<3+)+,.0221.-,,4:222259<70..-.00//131/5CHA;62,))..131,,-1**546<><<8/,/37751254113.,,,++)*)*+.02;:/**++,,*((+141*'-1/-*'%'))**,./1./00.,././10-.32-0341/-+.578762///001/./2324655:;>KTN4%1:99<=AACEB>BGG=0.4@JB31BWaU>/@I<>?@@7%'-()(1CMUUF45857738<1$)8><8.()+*2@L^_\\[ZXD+&(,<IOVTLIJD@CHIF6-7=:771**1<8*+?ON@?MD/4=KULKf}a7.113>E>=]^`bdgikkkkkklmpojiihgededdeeeedddcba^_``a`adeefhhghjkkhghgeeecba^YWXY[^_^^^^`ceedeeefigZSZeedecabbaaabeiiiijkjjlmnmljhfedcdb`abbbbdcca_``adfhjmpsurmhfcYRQSSSTSSRRTUTRSTXYYdmheb_hqprrfZPJLOQSUVVVTPMMLMOPSUTRQQRTUTTTQMLMMOOPPQTWYVRQTWVUTRQQRV\\^ZUV]`\\Y_]UWVPOVggdopljrrifhjkllkjkhipiVX_]\\Z[befektcQRVTT^jqnmlfZQPW[^mwlaeurb\\drw]a]Td|ceinqjghgihhfaftuqomkc`|zwvw~tdfjiggkqxv_\\o|]XVQPOL݃QQQPd}wbROSZeecbehjmidjopnliqvqighm{~{xylb_dgkkkneZX[[[`gijjjka|Q|kVXSPNT|GRRRMbaa`\\_`XLYlwӍQ^ebZPSX^\\VSRK[x[QSLGX|zkfbaaqnji[dkfj_SKLMRWmxylwmbW\\bbba``chhfldgouuifkf_`aaaSoq`cgijjghk[QXZT\\wsfa\\ZYWXWX[]d_anbUXadc__aa`^ciknsx~{|jefb][YYZ\\^__`aaca][[[[TY\\ZZYXYYYYY[[Z[ZXXVVUTVX[_^]\\ZYZYZ\\_`\\XVTVYY[[]^[WYTUsiVWXWVVVVWXZZZ[Y^]TTVTmzudgv|i]^```aa_`aabgpsqnlkjiijklllnpo^_pskXOSMIHGIS__V[jztaa_cca`^]]]^^^__]\\]_`_WOQW[YSUQKNbi[YRKICLR_LEHLPQfufXRRSTQQSWY[[ZYXRNMLMLLKKKLKJKKIEHJJIIIKMMMLLJJHJJJJIIIJJIIHHHGGGGFFFECFIHGFDEGIJJIGGGD@>>?@ABCEEEEDDDEEEEDBB@><=?AAACCDEEEEFEEFFECA@?@@@??@AAAAABBAAAA@BEGHIJJJMPQMILOROLIFB@>:;<=CKHJLHGFDKGEDB@>AMQMLJIIIGGHJKKJKKLKKKLM<997Fg}b@EGKZxzpyvp\\C??BBBBCCBABFHGE>HeyɁCKOJIF@>AGJJE><=;;>CEEFFFFFFG?;>EFDEEFD>;EEECA?:>NNLMLGIJMPPMJJE?DRM>>F5=ILKHFEJZZFHKG6/7;AD@=>?>=<<<97:ABEHGDGKD<:=>CHEB=52<A5+.213:>DMJDA9+,>D@?>>>===;:;>?==<;20:FFFFGIF=85332453:BCCCCBENWWODDFCDB;/)7A>FYYSMPVZ]^\\ZUSI:Gf|G,-,.4658?EGHKG<35;>DJIECB>631//.0/-;A800//.0695330*+,+.47:BDGFEC80.0133555652369999711247::962+*,.-.-/9A:/,-17DB40120.27434215<=?FIG?;4/)(+/2333/,5:514511541.-7>=891+4652/047999972/476108DH?0/367;======90+-21220//-,,,..../01342.++*+./..122/7B>722+&)1100/,/36-)3348>>=966789:74683-+03/,+++,-,-/24454,(&(+/.+**-120**4<82-)),-/135664/.-,,+*.1.+-/032/2660+'&,138?@7//0013555788985312CSSQ;&(.5<=@B?EPLDFLMD3+/=II=/3FQHDBHQSN?463*)*(('&/8:722579>>30:@1(4867/(0;4*.<O[`YU[V=&-8>KW^\\RKGHHEHJEB838765311582*-=P_\\IBIHBDJC86P|sB373/2@A8cdgjllkjkkkjjlmmmkiihfededcddffedccca__``__adeegjigikkjiijhgggfeec]Z[Z[\\^^^^]\\`ddcefegkomaZ\\adedcbaa^\\]`dghhiihilmnnmkhfedddc`abbbbdeedcb``__clqpqruukbZTQQQRRSSSSSUSSRTVXWU\\egfacqndlupmiXONMNQTVYXWSPOLMPRUVTRRRSUVTUUQNNMNOOOQSW\\[WPORUXZYWVUUVZ[XVUTPS`e[XXUTX\\]Y_iqpnpkffillka]ekklrpe_YV[_aaee]go^QTTS`nronlg[ORZYXpnfieba^Y\\_\\W^gbdz|olnlhffffedejswspoonmlr{wuw}xgjhb`]apylVix|ZQRPMVuELMUwi`POWZan}vqrlbdjpvspkhdbelko|xs``dfmjlhZYZYYZ]bghgff_ޚTu|iMMIomKXVO^Ņ]_]\\[WSzwtېOV`cd^XWZWRRVT_iOHJZmu]bojeo\\Ɨsjotyq_LIEVepyn^\\cddcbbdrtkzpd~qtpheb``abcb][}l\\_ggggef^RVZS]uic]ZXXWVV[^g\\zcVZad_Z]^_gnqu{}o]]\\Z[ZVVX[\\^^____^^\\]\\[ZY[[ZXXXXYYYZZYYWUVVUTVY]`a^\\[YYXY[\\^[WUTUUVXXZ[XWWQ_p_TVXUUUVWXYZ[\\]_c`WTUR\\hswefsbba```aa``aaacpxvpnljijkkkorpmtmemrn_TNJJHDGRZXUWY^`[Z_dda__^^]]]\\]^]\\]`aa\\SPU[[ZVOGMfbUXWMGHFH_OGGMPWffWIEJSSPSSTYZ[Z[WOMMLLKKJIKKJJIIHGHKJIIIKMMMLLKIHIHIIIIIJJIIHHHHGGGFFFEDFHHGFEEGIJJJIHGC@>>@AABCEEEEDDDEEEEDBB@>;=?AABCCDEFFGGGFFFECA@?@@AA?AAABABBBAAAACEGIIJIKLQQPLKNRTQMHEDHB<;=?DHHIMIHFDKHGECB@FSQLGIJIIIIJKKKJJJLKKLKL@6@@@\\uZ@FOgu_ef[UEA>@AABCBB@AFGFB>QrʐBCPMJIE<6:FMMF=<>=?CFFFGFFGHGHF?8>CEFFE=/,:GFDA>;:AKQLGIHJORRQIC>9775/5D<ANOMKGCP_\\GS\\TC4-<JG=79AA?=<<:8<?BFGD?EIE?;86?KF=:44AF:4;<21?JLMIDB<6;DB=>???>>>=;<>>==;;611?FFEGIG<444444324<DGEDBEOVUICGG@AGF:03=AJ\\[TNSY\\_`_\\VSG05T\\/,.,.3539>BEGJJH<58?GKGB@@;54432111487432222456553.+-.-19::?GLMLKD>988402332226>?;=>844468884.*&'*./321;A80-.16@>6221/-024530015;DLNI<5462,,0452-,3;92-/453135423<<6<>1/4532..699885018<8238::81/3668;;;;9;:2+053210/.-++*))*+,++***)'&(+/1113664389301.,+/31.-,134.(24//4:?<::::::9642-(%'...---.-*+386430(&#$,30)+33110+,9B<0*),.047999;:62///////.+-005765542/))-.3?LL?421225899889851113HTPVB/404@BDCAS_WONPL</+-9HNF4.4<>CNQPXO>6/**+*))(&(+/=@88AILKHB=B@0-148728A;-+03DP@F[]F(->HQV[ZTMGFIEDB:=@6/12024894/16:EU^YNKPE9<=<8Cde?28557;85hikmmmlkkkjjjkmlkkjjhfeeedcdeeeedccba__````bdddfikkklkkjkkihihggeec_^][Z[[Z]][\\^_acegikmqph``bdddb`_][\\\\_cefghhiklllkihhfefeb`abbbccddedbaa_^bjkgcafh`VRPPPQPQRQRSSRQQRTVWYYY]cffhkfekkjrxuj`WNLMRUWXWUSQNMNQTTTUUUUSSUVUSQONOPPQQRW]]VONPU[\\]\\[ZXWWY[\\\\VQV^^]]YXZ\\^XV\\jrrrokffikkgfheilghvzgTTV_fd_X\\`cZY^[bmqsrmdXSY\\WUstmneb`^ZVXZWYkxyz~{toljgfecdcccam|wtuvux~tn~vxzylywtsws^TSZlsgn}ztrmu|iXQSSTa@RMPfSy\\Ykrtdejrzvsplhdelji{w{t`dfhmeam`VYY[\\__`_``b^vҶWms{tXSE\\NVSEz^[YWTPVƖwޕTP^\\\\cd_\\VRSRGe_[qİxefjin|bˣyobgpxmURW[ksi_`cdddedqrry~wsojfda``a__akjuc[fjijjieZUZUWtedb]ZYYXWZ]`_vwZRW]][\\afmuyna`\\Z[XWYYZ[[\\]^^^^_^_^]\\YXXWWXXXYYXXYYWUTVUTVVY[]][ZYXXWWYY[[XUTSSTUVXXXXUVlgYVWVTUVVWXYZ[]]a_]ZUTSQR[qyednbeca`_```_aab`lz{wqlijjlnhuypqh^^lre\\RHIIIOUSNS[\\]^dcaaa`_^^_^\\\\]^_`]^\\WUURQRX\\^\\[TY]RQUULEFGGPTIHMOSWTMIIT[YTUSUXZZZZUNMLLMLKJIKKJJJIIGIKKJIIKLLLKKKIHGHIIIIIIHIIHHHHGGGGFFEDFHHGFFGIIIJJIHGD@>>@AABCEEEEDDDEFEEDBB@?=>?AABCCDFGHIIJIHHFCBAAAAAAAAABBCCBBBAACDHJKKJKMPQNMLOTVTQMIFFIF><=?DFHJJGHEBIJHFEEHRZPKAAEGGHIIKLKKJKKKKKKKD6FH<Wy}xFEOc|mMMRAC?A>?@AAAA@@@DEC@=MwF;NOKIHD@<;EOOF<<?BEGGFHGFFGHHJMJD?AGGHG?8<<EAAB=6873LOGGHKQSSRH=975346:EIKNLMKHGZbcThseUJ47IKA63?@?=?BA>>>>@@>>BBB><71=LH;733?MORWQ<5BONGFD@@?>>;9;=>??>>=;<>>===;93+6DEFGHD<87677654--9BEECDMWUGEIA;FJKC94>FN`^QMS\\`beb_\\P=/+=ry<(0,+.113;@BDFGHFC;9?ED@<;<;666654688886534458<<971,,-//046;CGILLNNLKJG>31430.27?A=?@<9866532/+)').36621>A723014=<972262+,16600.-2BJJC71/1445?GB8-.681*''1<;778853465:?:137685/499861,1>A923430124689:::97684-+1531/.-+,,+**)+-.+))('(&&)-154359;98:9301231142---,+/-)02+&)1;<866668:71,))('+-./...,(-;=3160'&$%*63&*770//*,;B8,''+05::;<<?>74553231-+044369876542.-,7CKNKD>;8535775577753245GQMV@:QE8=DHJN`cZYVPB-',/8GNF<428AFMLIPF:?8+##')))*+(*?J><BFILOPNLLC=BF=546:=:96*-1-<U[C(-@LQORWPD;9IO=1+.=;,+//026757=BEDHTad^ZM76CB:<KNA?DCFH?0.cdghjkjkkjjigfhmnomjhgeeecccdcddcccb```````bcfgfhjmonkkkkjiiigggfeeca^ZWYYWY[YYYY[`egghhinnha`bddb`][[ZZ]bdeghhjmmmmkjjigffdbaabbbbbbbcbaaa`aba_\\WSSSQPPPPQQQQRQRSSRRSSTUVY]^_bdfeedeimpos{|xpfYRPRTUVVVURNMMPSUXZ[WUTTROPSROOPQQNLPX^^XQMNSWZ\\]^^\\WVWX\\[TQV]dh`\\[bb[YXZdptsrnkkmpqplhih_ZmcLQ\\cnx_Vcgfcimjoy{xumaZZ\\WVr}oida_^]\\[[WYdv~}~xnfdfghcababb]l{ywr}~qw|v]]qegvnYV_jkezytd[^\\_fec`]ZXW^`cgfZVdu`{Z}rgn|zwurjcfkh`ijvujcgfjnfaolVX_dckndZX\\b^Zti[T\\ZM\\˗FMNGHǂQY][SOsoszeop^Xehe`ZON]nucadhjltwrmnt|{oihvqTWWRY_aabccfebo}stpqqkgfbaaab__aqvceklkkmncWXWVuscW[_\\YZZZ]`a[{ŷʿfPU^]^dr~phe_a_[ZZ\\\\[ZXZ[]^^^````][YWWVWWWXWXXXYYWWWSTTVXXYYYXWWVVUWWXZYXVVTTSTTVXXYT`n]UWWVVWWXXXYYY\\]a[WYURTQOSe}dewldfecaa````aac^j|~ulijkljbiy{rkYUQ_sgbeUKMVY[\\UY^ac``b`^^^^]]]]\\]^]_`[VOIILLMOTZ\\]^^c]MOWTPHFFGLTLKMPOOJKLZjbfaWXUWZ\\YVRMLLLMMKJIJJJJJIIIKKJIHHJLLLKKKIHGJIIHIIIHHHIHHHHGGGFFEDFGGFFFGIKKJJHHGDB??@AABEFFEEEEFGFEEDBA?>=??@ACDDEGHIJKKJIHFCBA@AAAAAABBBCBBBBAACFJLKLLMNOOJIMUWWTPMHFHHFB>=>CGGGKSLAAJKHEEGLUXPH@;A@@CEHJLJIIKKKKKLKF?FE=O{NDOXpq[BCI>9;@?@AAAA@@?@DBA?;IwŻt=;HONJFEDCAAGOND<=CGGHGGGFFFFHHJLNLFEGHIIIOQDCBBD>412&8OKFHMTSTTG778:965?FHFIIJIEN]adg|qJE>2@LG>47<??BEB?><<@??AABA==7/8HG:629Pejge\\J>BIKHGDAA@<8778<AA?>>><=>>>>>=;6-0@FFED?<=;988753+(3@EDCCJYWHGF75KOOKC6=BI__NLV_dgeaaS=10*-NV1,2.,-.04;ACDFHGDA>=<<;9989:6656679999:843316>?>:60,+,22.-,1>B@ENPPPOOPMC9740036<@>>=;:9620../.-+*058601=B<64225:;:5--85,.3650/-*,<DA963.,.02<KNE>6.,*-.,3@?;<:9::21648@7/47<>747985/(3EE810///./158;=>?<8671-.2420.,****+***+/23++../.**/46556887=C<0./23241*'('''+,*,,)%&,33112347:84-(0544220/-..-5?9,072*))(*97)*53+))(/=<0*((-7?>;<ABA;54442021/,07852347:930-+5FKJIGFFA953352.17998:846LWTZACgX93?IQXa]ZaYF2$%,17AD@@CBFJLLMPNC>AB=1)'(()0/&)?QIC=;9AJMQSTTSTVN;037;?B</(,5>LWA'2DHNMPWE0)0Q_?,-'090.1//0116@DB>=BO_jdTKDCNMEEKKGLNOMA5-+^`dhiijjijje_`hqtrmjigeedcccccddcccb```_```bdgfccacnrmjklihigfggddfdba\\WXYWVXWWVVW[acaab_^ab`^^`aa_]\\ZXX]acdfiijmnnmlljifdddbabccbbbbbbbccbaaa`^\\YUQNNPPPQQPQSRSRSSSTTTTTVWZ]aaabcdddgptpmopsvtfXQPSTTVXYXURPPSUY]`]\\ZSOPOPRRQQQQONNS[cd]WROPRTTUZ\\YVVSRSSRRVanh`^cc``^ZW^jorvsqopd^chjogY`wkV_mnoxZ_jnijx{z}rg_]ZUnogda`^[[YYXY]kvy~ykgjpmdaaab`[lyokzsW_l]du}{snlimwtkoaZ\\[XVUTTX[YZhlhfyРw[QSOzٝ|w{kivzzwvnejrne_eqodbcfdipsjjrYY^kmszulb^^`Sے]wRLY]WqcqVpxMVraKQeozdhzdalwyjhjfc\\X[qñm[NQ[ehhg^bgllcqqpt}odbkp_TYWX[^``bce^Z\\Yxʃotutlecba`bbb`asqijllklqpaYWYch]LS\\ZYZ]_`^_acrѰ~YXc`^pojfab^\\\\[\\[ZXXXZ[\\[[_a_a`[YYXWWWWWWWXXXWWXXWWTWYXWWWWVUUUTUWWYWWXVUTSSTVXYWYjeVVWWWVXYZZZZXVX]b[RWWSUTSU^}deqkghfcaa`aa`aac`g{xnijnl_\\Y_utoZPMYkfhto`[ebY_^b___^]_`^^_^_^^_`aacegTIHIHIKKMNSY\\[]_aSLPQOIGGDKRMLNOTOIL_tpcilYTTVZ]ZTQNLLMMLKJIJJIJIHGHKJJIHHJKMMLLKJHIJJIHIIIHHIJJHHHGGGGGFDFGGFGGIIKKKJHHFCB??@AACEFFEEEEFGGEEDBA?>=??@ACDDEGIKKMLJHGECBA@AAAAAABBBBBBBBCBDHKMLMNONMLGFOYWWTPMIEGJJIA;<CLJSkoOFCJJFACGKSROKIC=97;CHKLJIIJJKKLLKHJUJ=I¿rODOS^UE;AG@99@@@@@@A@AAADBA=;Bzv7:BGLLGCCA@@BIOMA<@FIJKIHHFGGGHHJLLJIFFHIKSZSDBFE@>@42=<IMIINWXZYD399<;8;DFEEIIHDCT]X]t~{H170:LIC?8<=?A=969=?A@?@A@?=>9/5EE85;Snund_]YI9AQRJDDCA>;9:<AGB>>===>>>>>>=<51/:GDEB>==;:88741./5BGEAAJ[XHD>;GVOIMIEGGIY_PO[diib[VG0).--7<322/-./036=CDEGGEC@><:988::;76566788889632219?:63451,.32+,..9EDBKQQPNNNPPD<5/125:>==<==:3.-.0144.,04660/7AA9/026:<:3)*3434543/.-,-7<8542.-0532<DKMF8+,7809B75889:;2-025><.*2:>942585.(8H@4/12/0.+(,48:?DDA;87645421/-,*)**)***.150../57/-/35677648HM?2-,/23/*'&''),,-,*)'&',.,++,.48996.+7><973/.,..1<=/+394.-,++560-/.)%%(073+,./4<B=7=CFC;420/000320/362..1364.*',=MMJLKJJ@533463+-699;>=>Pba`]KOeT:36?OY\\XY\\F.(*,/46::6>LQIJLPTUOFFC@GH9+&')22'*ATSJ>:7AMQRV`gaYUSF;9749;61.3>@BE5)4>BDGML7((9[[7,.(+65010//--4>A>79BL\\dTJRWWVVSTPD?FLK@,%()_`bdghiihhgb]_gmqnkjhfeedccccbbcbbba``_^___adb][ZWWdqpjjkhhhgfgga_ccaab\\XXXVUUVVWVVX[YWXVSRVZZ[\\\\^^\\\\YUVZ^``bjljklmomihfdcbbaaacedcdcbbccccbabb`]]\\WUSRPOPPOPQQRSSRSTSSTUVVWY]^``acddfkppng^]a]ZURQRRSUVXXXWWVVWY[^``^[_f_QPTSRRSTUTSW^bba]TOONNOOQTSUYXQPSSTYbecb`c`cb_[U]celsvtjZWdgaenlekwtke__e}~agsnmnw|{}zl_[[[cphecb^[\\ZZZZ[gwxx{|xpnyocba``_[lnhjt{rcZdv|zzmipqehql^TVXWUVVWYXYenk[QZ{eSdjT߃x{hzrw}zywsoottuldqpc`ceeghnrtoXX[fjm~q^_c][]gRVacXŤnֳ_NZd`_]]pveurhldQ[r~}wvwufW`oűt^QRTRV`egj_RSUZ]_uSwhggo}~zn^Wa[STXZ]^``d`VWPHoipuofcbaaaaa_a}mhkmlkouo_V]gllpx|l\\Y_cg\\Z_^U]{͹aX]^]iopkbmc[]\\[ZZZYYYYZ\\ZZ\\\\\\_a]YYXWVVWVWWWXXXXUR]]UWYXWWWWVUVVURTUWWUVTSRTSUVXXSclZV[ZYZ[[\\\\\\[[ZWWY`\\UTVTVUUW[peftokkidbaaaaaaaba]yzoiknj]YX[clteLQXZ`hoywsxq`]^`_^^]]^_^_```^`diltskgTHIIHHJKMMNUYZ\\]^WNHGGJIJEGNMJKKRLL^zvefkbKHRUW[YSPMKLMMLKJIJJIJIHGHKKJIHHJKMMLLKIGHIIHHHIIHHIJKJIHGFFFFEDEEFFGHIILKJJGGFCA?>?@ACDFFEDEFFGGEDCA@?>>?@@@CCDEGJJKMKJHGECBBAABAAAABBBBBBBBCDEILMLNOONLKJIQWVUSPNLHIJKID<=GJS{tOHCGGD?BGKROOJE?:88<CEKMJIJJJKKLLKKSeWCIxpaHCJNJA?>AE>98?@?@@@ABCCCCB>=<=o¼ҡ9:HDEHHCAA=>BCGNK@=BFIMMJHHIIIIIJJLLLIGHGKSVWRD?DC96>53JI?NNJNY^_[B5<<=;:=DGIMLIGBKZUGD]yz{M-01:IF@DA;:??867;>@@@======>@75EF8:Pmuqlfb__R9:PTJGHF@;<<>ADD>8;>=<?@>>??><5/-5EFC=<<97667520/15:DEABKZSDABOVWKCGKSUURX^MR_flg[SIBC;1,021210/-.000.6?BBECA?<;;9999;<=;;98653577643222:D8.-484/052(/?EGGHHJNNPPLIINKA5+/148==<9<;62/123354./366302;CB;2.27:<:51-38<=864/.-..3530/0,(/86.-;FGGK=4<;1;@,,146772.1559;3+0586/,196.,;E;1,493//+))-258BJG?<<97553331/+)******-1324/,/310013899968C>/+,,054/*-..013340()'(*-+(&&')134<:.-=@;:83/-+*)1?6'-7;851.++-00/,*'&&).1,(*-169:824<EF<31/1000451..1/00.-,+*()-6DKLNMLK@4246;9338;;;;B[mjea]RV`P=646CKNNOA-/8=A?8583.:LNDGMWXWSNKF<?G?-&&)//&(@PQJ713@NTXalsm_OC?=<6/8:8557@A>3./>FC=9;4,.1;ME/+)+274100//-.17<:8>EKUUNXfje]VTXN6/:=82,&%&UUVY_egihgedeeeehjjjgeeddccba_^_`ba__`^\\]^^^^[VVXYY[ennjiihhihghc[[b`^bb]YXXUUWWWWVUUTSRQRQRTXYYY[[[[YTTWY[[^ehjmnprokhdbbaaaaacdddcbbcccccdcba____][WTPOOOOOPQQRSSSSTUUTUWYZ\\^_aaccdfehoqj_UQPOPRRQQRTUWYZYXYYYXXYZ]\\cmrm\\OORRQSTWWUTTVZ^a_\\XSOOONNRTTXVPRTTUY^aced`]\\]fdb]Y\\deeb`fqwmZbxyklvpaWRUt{fuyppsw{xwyyxwtj[Zcb[j}sikgc^\\\\[[\\\\Y\\n{yxijsieda^^][eniaghlykYYcv{{ghne^gqvbNSYXVXXWXXXWssdpcP^xcWk{sz|w||ywwzcqrc^cfffb_djcVWZchdj|t__ffNdZ\\_fgafdim\\LSOYeoqƟrsq^[^w{z|ξrZRQPT]]VOXijkjfw}i_na䴄yh`mxxutm^cbRNWY\\]_acYTVMMs\\jvrfcbbaaa__bǾsgfhjjjpseYas{u_[`fkbXep^[W{µiLR]^^urddo`Z\\\\ZYYZZZYXX[XYWYZ\\^\\ZYYXWUVVWVVWVXXTSW[XXYYXWWVUUVVSOPRUUVUSSSUUVVYWYi_T[_]]^^^^^]\\]\\ZXUY_XRUUXVUVX\\xjr|uppmhebabaabbdZRv{ojlkd^YY[V[fhQVTMUXXly~n]^]^^^^^_^]\\]^YUdknqxrieYPLIGHJLLMMQWZ]\\\\\\ZQKGKLLJHKLIHIIIPliVQ[oYBBQUSZWROMKKMMLKKJKKJJIIHILLJIHHJLNNMMKIGHIIHHHIIIHIKLKJIGFFFFEEDDEFGIIJMLJJGGFCA?>?@BCDFFEDEFGHGEDCA?>>>?@@ACCDEGKKKLKJIGFDCBBBBBCBCBBAAABACEFGJLLKMOPNLKLOTVUTRPONJJJJHIDBIIHkrgTDB@GA<@EJOKJC;89;?CACQQIJJLKKKKLKMZf`VIsnMHRKBGJD@BBCC<99=?@@@ACBDDEDB==>>sû[2CFDEFC?@@?>BCDIIA>BFINMJIIKKKKKJKMNKHGHJQWQLPJCCB7.259><6EONNY_]WB;@>==<<AIPRMHEBS[LD9B_mwO324;FC=?A67@?::@B?@@?==;;=>>@DADG<@dyrtqlb^[C4DPKJJE:56:=@>:528>>=:=>>>?>;4-*/EF;7785445420.0345=CBCJPD?FKOJBA@:AJLOS[ZJTchkbTRJBA@>684210/.-.00-,07@@<8525:;89;:;>?@?=:400477422222<B8./475247:8?MSL??=?GJMRQNLLNE5*.147==:621001476662/26871/7AB?=5-38:=:7722;@>9850..00020.,.-*/:8,19;=AHJBA=357+*.14542/17448=BB:55.,3:933>?51/7:3./.0.,034<LJA@?:66775562-)*,+++-/1112/**0221.2:=?<741(\"'-46844571046:;6,(*-++-+)'&&'.,-<>23<=::51.,)'&/:/%099762/-+-240+('((*-0+&''+.//.-++7D@4034100672-))-23,))()+,+)/7<EGEE@75;=?@?>=><:;Njmaca]V_^M?778889?@<<KRRUL<4554:BCCFMXY[`[RND216-$&'(+*)=LLE.(+9FK_nkrnXB429?:5;=>?@?@A=638CILF7-(')-286-,/13764000-,./11/5ABFKQ\\bhplbYVTL3(01342/02NPW_gjigfedbbceedfhigeeeddca``]\\]__]]]][\\^][VSUWX\\\\Y[bhihgghhfefg_Y]a_^ac_ZXVUVVUVWTSSSRQSTRRVWVWYZ[[ZWUUTUVX]bgjmppomgcaaa`a`accccbbbcccdeeeca`_```^[VROOOOOPPPPQSSSTVUTUUWZ\\\\[\\]_abeghklljc[SOQQRQPQSTVXXXY[[[\\ZVWY[emjkhXMMORRSUUUUTRUX\\acc^VQT\\bjiXOUUQSSSUW^chfa\\XYfxj[WVY[\\_gwp~{aYpupwqb[RSnriuyprsvxwwwwxzztllkcgxphojd`\\]\\[]\\YUXm~y~ldnkffa]]]]\\[[^`dgkxyr{}bYWdy}|pyrbhlgikrueUUYWVWWWWWVOmp}xYNavefr~xouyq~|rbqp`^bdef`\\Z^^XX[agfdtxia`e`Xjkhlhtpdhz[KQOSYlurvgXexy{|ϡ|iVIMSX\\_\\ZXYes{qulƝrxvrnjnhbazXX\\]`db\\VWSUnVgutgccbba``_bŨ|i``ehgjng\\douz_a\\cgj\\XoaY\\WoXT_appbdcZXZ[[XXY[ZZYY]YZZZYYXYZZXVVVVUVUUTUUUWXSXZYYZYWWVVUSQMOPSXXYXWWWXXXZXVedTW^_^^^^^^^^^]]]YVW]XRTUUUUVXT^|t|~yusqlgebbccddg]Onyljlj`YZZYXUX^UPMGNMO]ktwyo\\_\\^___]`eWUSONVnotrliec]TNKIGJLMNNQUXY[[\\^^SMKLMLJKMIGGHIOXNGKQeeIBQUNXUQNMKLLLLLKJKKJJIHGILLJJIIJKMNMMKIGHHHHHHJJIIIKLLJIFFFFFEEDDDFGIIJMLJJGGFDA?>?@BCDFFEDEGGHHFDC@>=>????ACCCEHLLLLKJIGEDCCBBBDDDCCBBAAAACEFIKLLKLNNNKKNRTUUTRPPOLJJIIIHGKQRXZ[VM@>G@:?DJMID>8799>HCM^]PIILLLLLLKQbca_HRο^3AULBFGDCDFF?;:;=?@@?ACDDDFDB@>=A¹̋7>DBBDE@=?AA>EEBEHC?AEGLOMKJIKJJKJLNOOMJFJTNB?LURLG<11587448JRLV^YRKCA=<=?ACIQLKHDBTYLF<<<O\\?357?F@;::852:@?<<>??=<=><=>>>DJFB<=Xw~yume\\\\aM0<VWVS@12336742/.689<:<>==>=92,)*AJ:266895431//1465<CBDIG<EKKG?:@?8;@B@=KRHXegj\\RQH=>=:=9753211..21/015>>830148:99:<>>AA?>;6/.1674332139;2-0442149>GHB=86014=CEMUYWTQI:,.02578520-023577530/37:500:A@<?7,38;=97744<@<7760--0//3.**/1.1;707999<?@GB<211,+-/133203947?GSO?9;<>?>=88=;100881./13423546BF?=<968997675/,..,+,-/0110.**+.00/29?=730+)'&,6:757?:/(/6:@=-&*./221.,*)(.)%6?::;:::6/,+)%(/0,,584320.--372-)'&))*./,(&''%)1+&(&)5<71131/1683-(&+43+)')152,''&+9BACA<>DFEDEDA>;;>Pijecb]Zc^OB;:82.26>ISVWZWJ;6789;?ACCLWY_ed[SL5$26'%+)*.4?DD<++/9DCVnksiA11-6@>>?AAEGDCB>:9=@:=OTE2-012221025=???<941121.,+3@AAAUgaeonf_VSB1,05887;EI`bgjkliecbba_`fgeeeggddedddc`_^^^\\[\\\\[[\\[[\\[VQTYXXZZXW\\ceeedbaabgf]Y_d^\\bc^[XUUVTSTTSSTSRSSSSTVVWXYZ[ZYXVSQRTUY[^bgjkkfa_`__```abbdebabbdfeeddba`aaba_[XQQONNOPPQRSSSSTTUTSUUTTTTVX^acghffjooib^YTSSSSSUUVVWZ[\\]`^ZVWYZ[]`ghZOQRSSTTUWVUVVYafgfaZ^nx{uXKV_ZZ[UUZZ^fghaUct[WUUet}hxkP\\vwuwog`cpokrppprtvvwvzqky{ohnlha^]\\[][Y\\UYs~yfekhea^^^`_]]^]^`_hpmntjire[XVe~sz}pnjfinuwrieebYWWVWWXYYSUsnΧwmTX^[[sΡ|ourq{~wsrs{~nszq`_`cfh_]\\]_]]^bgkdp}haccfZ{dsqhii]Xaxxqlj\\NQPNP[]acchpjusY]mt|վ}X``YWVWXZ[UVatzhy{Wfokay|svza\\ZYY]apre\\Z_kbVfrrhcbaaa`aa`Ơvd_aceefcedj~{\\Tb[kifusdgvqabʤhP[kpea[YXZ[ZYXYZZ\\[\\^[\\b^ZXUUZ[URTTUTTTTTSSTVZ\\^]YYZYYXWUSPNPVY\\\\\\]]\\\\\\\\[Z\\UUf[T[^^^^]^]^^^^]^]\\\\YYXUVUUUTVXWOfw|~|{xvtojgdcddeehfXbzmjlgZUYZYWUVZ[NHELTX[]fkba]b\\ZZ[\\WZgROIK_lonsrmgca^^WPLGIKMQQRUVWWX[[^[WOKJJJMNLJIHIMHILNMWgVGNTKWRPMLKLLLLKKJKKJIIHHIMMKJIIJKMOMMKIHHIIHHHJJIIJLLMJIGEEEEEDDDEFGIIKMMKJGGECA??@ABCEGHFEFHHHHEDB@>=>??@@ABBCEILNLLJJHGFECCBCEFEDBCBBAAABCEGKMNLLLLMMMMPRTVUTRQPOMKJJIHHMRfj^NMOLBDEB@DJONE=::986:HK\\cb^QKKLLLLLKRb_[WDCѿd/GQGDGGDDCFGD?<9=AA@@BBCDDEDBA>;MÿͯY;>BBACB?=>CE<@DBEGCABDEJOQMJHJKKKKMOQQNKIKKB==AEEHB=74758@93;IRU^YLB??>>=?BBDDCGHDBVOJHBC58A7469?@CB=;>:13;;86<@>=<>A>>>>>@CB>9:AP[`c]WWWXU;8Yb\\V@35632211236669??===>=70-**9J=168<<8320//247:@DDEG@>EC?ACA>;89?AD>>OK`eeaVSR?4;:1/7=><::843224<<9?C@<;:57;957@B@BB?>:;2..4654421142--/22..3:>7320-.,,-3<?CJSWWRE9310//.-/1135654440/--3884028<69C5-27;=95348;:6253.,,..24-'*/575979<::9;62:B>2/.140,/0002774ANQXTIGKKJIF@=;<6/,041../258878757>>:7777787520-,--,-.-.11221./)(,0/1340-,.12/)+00149>3((/38DA0'+*09:8542/+,+$+<@?:544/,*)'')-**.0.++-.-+,58+&&&%*,**,)'),-)(.0,)''*151.0//17;72)%,2/)(*+6;0(+*'+9BCEDBDJKIGGE@::97D^nlhe^`f\\UIB>8/07<HQRPSTQ@:=@><<AA@=FW_diifXE7'-A6(48.*8?787,/2FP@@\\luW-*2-3AGHFFDDGKHDCD@<:1(0@LLDDEB=::95:JLHNMF>9::.)-.19<6/HebdlljTWT5/764:;<DNRijheeecccaabbcefffeffdcddddda^^__][]]\\\\]\\[[[ZVTVXXWXYY[\\_bb^\\]]]bgcZ\\de]Y[_a[UUXUQRRRSTTUUTUUUVXWWXYYYYYWTQPPPQQSUY]]^_^]^^^____adgfcaaaceeeeecbabceea^][UONNNOPQRSSRQRSSRTVPLORSUX]^^beedgmpmhd_YVUVVVVTTUX[]_````[WUSRUZajhZRRRSTTUTSTUUZdhggjnpuzz~uVSlnmiXRYXU\\dihai_VV[}ugwjUWlysyulffbfmnoppqqrtttvyjlmjstkqxl``]\\\\][WYXUcz{d`jgc`^^_aaaa_^^_agib_a^\\Y\\\\XVvphqtjgqqh`_ee[VWWWWYZZSrm\\­JVlwRNMLPV}~~vkk}xzte`iu{oeb_agj^]``aaaacgk_`rfahbҟa{vjaQDEMVW`dWot_dNOLGKNNUUMLXcfxrUf`d~̬mMXke\\YWVVXVSZjwxcztF^VNYZȎu`_no_W^lxhz}۩_cnrjdb`aa`bc_xܿsfdcdb`aefq^NZk[\\bw^nst{xp}|ЯpOZwtha[\\]\\[ZYXXZ[^^^^^_b_]ZVTY]VRSRSTTTSSRSTUY_`]ZZ\\ZVVWYUTX^```^____^\\^][YS]`X[]]^^]]]]^^__^__```^ZXWVUUTVWXQZn}yvrniedddegfc[Wu|mhicVTYYYWQPYaZPISgmqlhl_[\\`[]``SNISOPDOn}h^jslfc`abbXPGHKNSUTTSRRTZ][\\]SKHJLOOOMJIJJJMNPPSYUMLJKWONLKLLLLLKKJKKJIIGHJNNLJJJJJLPNNKJIIJIHHIJJIJKMMNJIGEEEEEDDDEGHJJMNNLJHHECA@ABBCDFIJHFHIIHHEDA?==>??AAAABEGJNNLKJHHHIGECDFHGFCBABAABBDDGIKNNLLKJKLNPSSUVVURSPONLJJIOGQXiobKIHGFHGFGGNQMA88;:87=LSfa]caWKKKLMLLQ\\\\UUKBZ:HEFGIIGECCGID@9>BBAACBACCCCA@>8Xo;<;@BBA?><=AC<DHBEDCBDDEHLONLJJLLMNOSUSONQPHB<><8;B>=;9869B9/.=OV_T?6<>??=><;87BGGCKW=EPONB79>>==9<GHEDEA80/4937<===>@???>>@>;<>><:;BOQSZWMWP>P`[QA3121237<<98>=6:>=<<<;623,,7A61;>;993/-.02469=ACFG=<?:=FFA=728@BDDFORefcZSSB3776658<=>?>==9437CI@APJGD?65;9-2AECDDB;:950/45456310-,,,.03.,383**11-,,,,07>?>DLNG;73.,,+*,2897544222.**.47876583)4>0-27<=94357655420,*+-/45,(*/551179;;;:74,/=?3,,061.---/-.7CLRWWLFMSPKKIB><:3,()00.,,04:::::86:><76851333/*(),-.12/.11344694/1/01.,***1761,)))+166.$)356@@.)0+/9<;;<;4,+,(*7@=60//+)'(()+,+*)*'((*+)*.64($'%$+.+*)&'/21-(&),*'%&*/-,,-.19>;;3*-0+'*,.13*&-0.1>GEDCCHKKJJIE>:901?LZklh`dY[ZPE>715?GMNNPRQOB>FHC><=@=21Mimoqra>3,';A,4<1(4;236201JU7/A^Y9&-35:BNUSMHCGPPLJG?4/-(&';Y\\RNLIFEB:;CBEQQI@;<>/&+/.10+%5VaehkrJ8ZM7DA10:@ELMdca`a`bdddccddegfeeeecddddcdeca`_`_]]^_`_^\\]^\\WUVXXXZ__[[^_]\\[ZYYaf_X^f`SPW``YUVUQPPRTTTVVWXXXXXYZYZZYYYXVUQPQPPORTVVXZ[\\]]^___`adhgecbbbceeffdccccccb``b_WQNNOPPQRSQPQRSROOMOTXYZ\\\\\\]_adeehmolkib]\\YX[\\\\ZY[[[\\^_ac`YTTTUX]de]XUSTTSUVSRRX`egeenuqovzrtsctzkZSZ]XWYZ`egqyf]`VksncNRe}m^pxnb`Ycnjkijklkjjikoz~th\\_emwsjozo__^]\\]`]WWZ[g~}b`mg``_^`aaa_^^^^_^[Z\\]_^]b`\\kxdgpgeh^\\acfe\\VWWWWY[WZ`aVcgJYraMNPPUqv}zzz{wjbpnpvsquxidr}}qkigbbgofaaaaaaaekgXW|c_lsplZROMNOPNU]]XWORMbcO`teSSY`grgURJ^˭wKPXae\\WXVVVW\\gqwĂaz̆]XX^_[K{Ų®qio`VqɲvY詃k_oqjefb_`aab`gֺokkkihgfdn~`OYfdbbi{pmvhU[myWTlWbw}h^\\]^^\\ZYXXY[^___`^^^^\\ZXY[YUTSRUVUTRSTUUY^_][\\\\XUTZ\\\\^ad`^^^^]]\\\\\\]^ZT\\h\\Z____^^]]]^^]]^__``b`]YXYXXXXXVSSk~|yvpkfdcdeheaXQb}ylhe_ZYZZYWUQT_]VPWix~yd]a^]W[m}oOHEJNNIJZp_Pevligfda^[ULFHLQRRRRPJMY`\\[]ZPJKMOOPNNMLJKNNRTSPOOMFMRONMKKKLLLKKJKKJIHIILMMLKKJIKMONNMKIIJIHHJJJIJLMNNLIGFEEEEDDDFIJKLOPONLJHECA@BDDDEHKLIIJKKJHED@>==>@@ABCBCFILNNLJHHJLJHFEEHIFCBBAABCDDFGIKKLMNLKJKMORSSUVVVSSRQPNKITaR^mfj_JDGGHIJIHGLLJA<79978?LR[a^]c\\IKLLNLLJHQ\\bS:@}SLLFJLLIGDBA?==@CB@A@BBAAABCBA@7\\»t;<=:BBBB@>=;;:GaVC@AABDDDEHKONKJKMOQRTWXURXTIJD@:47@===;;8:>2403FW^K68>>?><:6213CJDBUS?QYXUJ=7=A@><AGEHKI@5.2<<67;==>@@A@@@???<=??<::?IS[^UMX]NLUTG;578:=CGJJHEC?<=>===<:9;8.+1413=<87:4.,-/01126:=<EC;<=@DB>;3/7AA>AHMVgh_QOK=4<:36;:9:=@?@>:621>LEBNMLHD;652-3>FECFC94976;=9465..10/.-/050-44.+152.-,,+-6?@:;BD:140,**+-17971.12235/)*0579;8564/58++28??72//013550**-/0242---/0-+2999<A<2-,4>>3+*(+,-,+)*(.>JMOTO;7JRNIHIF?;<71.+13/+*-5=?>==<;;??<994-.021,(),//164033340)+.//0/.)(+..054/..++(&-33)&4:89=.*6338:;<?;0).1.,0870---+****+---,*-(,)'()*270(*,'&.20.*'(13+&&%$&'&'())**+,-.2:??6-,,,*-/0//)(.2/1=DABEEIKFBCC@=<5)3CADauhag\\[ZTG=54<BGOWWUTVQNIMMF@=?B@0)KrpotxkC41(.;--346:@;65300?E4/4?3%&-2=FLT[\\RJGHMSUPOF1%&))1H]c`XOQQMLG:17FQVPKA=93&,3220,*0CT^gsqF&>__OD<7;?CKOaaababdddeeeefgggfffedeededdffdb`aa^]_`aba`_^^]YVWYZ\\ac`^^^_^][XUXaaYV\\_YQNV^\\URRQPQRSTUVVXZ[[YY[ZZ[[ZYYYYYTSTRPPRTUVWZ[[\\]``_abaadffdabcbdeffddbbb_]`bcccb\\TQQQRQQRRPRTTQNOT[[[[\\]\\]_aadecdjosuvqjea\\[]][YYYYYY[^bc_ZWVUTX^_[YXWTRRW`^YW[^^`adkicgswnmzxv{pc_\\\\^]XSRW_`]ikfpeXwx|\\\\bci\\Thwvh`Zenfdfiovxvtsrtu{yja]^oyrrngtugb__hpvyphkg\\eyze_nka\\]acaa`````_^[Y]__aacga^dr|m_cac`]abdfe^WWWWWYZXYSpeVjUOQOMQSRSdos~}{ytqqkbmjqutjfsqnx~~}rjknlhhnrgcdbaadfjwnWRuxae~[ZQMMNOPTWV[cSgVWRVQ^fXUYX\\kqbRLKX}ŻzSNTY_YXXWUUUcs{¿yd{ܣygwo_Q^f^OFayfpvuwvhZSxʽgZÌt~udgkihpc^bb``aqϴ|oosvxtj]qcU\\dlj^]a^U^nqg_QLX~oSNYbXeh[]]]][ZZZZZZ\\]]]`_^]]]]]\\\\ZWVUTVVUTSRSUVZ^]\\]YWY^]]]^^^`]Z[^ZWVVXZZ\\YT_bYZ_^^]^^]^]___^^_^__``_]^____^]ZVUbgm|xpkgeefgjh_UQXt{phb]\\\\\\[YXY[UTUYY[dw{dS`\\Xa~k_NHIKLMPKLXTPixommkg^[ZZVLHLQNNQPMIINW\\Z\\][VLMNNMMNLLJIKMQTQMMOOKOPPNMLKKKLLKKJJJIIHIJLMMLKKIJJLOOONKIIHHHHIJJJJLMONLJHFEDEECBEIJKKNQQOOMLHECAABDEFGJNLIJKMMKGEC@>==>@@ABCCEHJLONLJIKNNJHFGHJFB@AABABCDGHJKLLKMNLKLMNPRRSUVVVUSRRPNMK_clwjXUPHEGHJKKKFFFIJE@<<;60?PGBUb_]SAJLMNLH@BOffP?IrqHMGINNLIE@=99<FFEBAAAAAA@CECC@:]ƿz;9><AHGCA@>=::<NgdVEABBBBCEGIMPNKLMOQTVWYZXXSKTNA:?@A>?>==;9931/-<S\\J7>@?><;92/36AKDBYW]`SMMIA<9;<;?GE@CJD3/9DF>:;:;7688<?BBA?>>>>;:=>@FPWXXY[\\XQOH?>@BCIOOLPWUMGD@>>>>>==>>:1...14:537:3++-//12347;78>?B@AA?@@607?>56AL^h]QJC::8:92178::<>??=897/2DE@INMHB;73/08AHGDGB42=:6::6550*.7620.--30053/.23/,,,+**4@C@;<=3-0/-.../2320//3776630146;?=7468:<9.,27>;0+*-156542++36431.,,/1-(-322:@F=3+*7D@3-,))*+-/1..<HFEGGC66FGA>>EHB?@=644240--3;?BE@@@>=@BA>93/00121..00..10,*++.0(%)**+,*((071')..--/0*%-860,15465*)499:99:<7,-693,+130/0,+02/.-.//./334+%(*,273.00,(/41.+('*,(#&*,+''+,)()++,-./4:6.+),01/--.0-)+-,.666@IJLK@566588/*7FDB\\peeha[YVNF=7<?FUcdTMW^_PKOIAEQOA/,Nxogp{pB10)%*-037=@EB852006:730.,*+,2@PVU]^XOFCFQWRXXA-'%#/Pdiro^\\_XSI<49HHPej[A74*.2/3=4+4<>F\\ug6!,NhYBEKD;?MRbbbdeeeefggffhgghghhgeeecdfgdceecaa`^^`bbbb`__^[YXWZ_aegc_^`^^^\\XSW]YRRY]WNMUYUQQQPOPQSTUUVXYZ[YXVXZZZZZZZYXWURPPQSTVXZ[YXZ\\\\]_`^]^`db__bcceegfeeb`^Z\\bgcahib\\WSRSTRPPSUTVZ]^`]WWZ^^^^_`bcbcgmtvuwtjhhb[VUUUWXXWXZ\\`b`YTRQSVZZ[\\\\VQPVchdaaYRU[cgc`djmrwy|~}yoffe``^WTWX^g^dqifojht|{nr{rhcXXfx|n][egdfggo{vpng^p|vgkoqkaexs\\fvc_eddije]^dda``cddcba]\\``cegeeba_bbfpz|qcca```bbceebYWXXWYXXXY^XVYc^WSOMRXYXY]fsv}{yxqommo|yuvfmxstyy{|zrprrqrtuigd^cehilzkPpfbthSPXLKKLNQSnl]PuZ_\\QSWQQMOUVWllVOSSUiVNRTVUWXWUTSev~Ǫqf{ȁS]{dP]]\\WRAmqjpqslc_eLvlh`ᡃun_Zegyzc]ca```pֹxmptz{vkyn\\dmqutf\\[accdecWQMgu_T]sZanWhiZ]\\\\[[ZZ[[\\]]]]]^^]]\\\\\\\\^^\\ZYXVUUUUSSSTVZ\\]^ZX_fc`[YZZ]]\\ZZ\\WSPRUWYZ\\b`ZYZ[YYZ[]]^^`bdd`^^___``aacbaa_]ZWWWUZn~xqkgefhhig\\UVWj{sg_[Z[ZZZZ[\\VSWZ^[\\tp^X^\\Yk|HHJHGJJNPNOMKMfwsokhf`\\Z[ZSJNQNMOOLJILOVX\\[^^LJIJJJKJJIGIKOROJLOOORSPOMLLLLLLKKKKJJIHIIMOMLKKJJJLOOONLJJGGHGIIJJKMOONLIGEEDEECDHLJJMOQQONMMHECACCDEFHKNLIJMNNJGEA>===>@@BCCDFJKMNNLKKNOLJHHJJFAABBBBBBCDGJLMLLMNNJJMMNPRRSSUVUUSRSPOMLfgyrTJIIGGGHKMPOGDJKHGDEGB?5?K>5ASYVH9EIMOLD=HYWM@=An¿QFIIKLKJEB@??@@?@BAAABAABDEDCDFy~;>@@FHIFECCC?<=?APdeTFABBBBCEFHOUQMOQSWWXYZZVPLWLD<>?@?@>>=<8530/-5Q\\L?ED?=<<;6266DGFG]bl_LBBFIHDA@::DGB>B;/6DHC@?><71,,138>A@>=>>==<>>?BGGJ[gb\\[WOGDFFIMPPLMX\\UW\\XOC=>>>=>:4565./02620591*+/0024457;:/6EGBFJKKF736892.:Td^MKJ>568871.48<<=>?><:<=5-9A?DGE?;994/3<CIGDF?33>;/-..//-,3:532123523420001-+--.,)0>HD;782./.-03211124689<<::><:88;?>768:=;:2-178/)(+0588653--5;;6-+--03.(-400<GJ=52*1DB304112359=>=FJFFEB=75:956<DHDAB?99<632029<:8DEDEA=?CB?945753113330-,+))))),030./,)''(.7;4($*12,.23,*;=630,)+,'+27437<;;847<8/+.585560/462/-.00.1::@.%*-/151,.1.-11+**(''(*,0782('01-,,--+*/2.,+))*-13/('+.0+%'-/1/.:ILKF:1.+,11-.:EFGU^^hha\\UXSH;24=P_bcW>Fjm]PLJEM\\TD72MxqXdw_2&*-,*,1534>ED:30..001.++-+(,2=T^WX\\\\O@=CPUQZ^N@6)%'?etx~ocd_T@57;?35^tbC67.),),:82::31<LA(*9ATaNDORE9BJcbcegfgghhhiiiiiiiiihfffbadfeccedaaa_^`bbbbaa`][YUU[bbdhfb`_^[\\][VRTWTORXWQMOUVSQQQOOQSSTTUUTXZVSSTWXY[ZYZZZZVSQPRSTVXYWUUVWWX[]\\[Z]`aa_`acdegghhd`^ZZ\\aeehnoleXNQTROPPQV^c^WVXZ[]_][[]`bbbabfkkgkmdcjje]VRSVWWXXXZ]^_^XRQSQPTX[\\ZWTU]hopiZNMT]hkgccgqusx}yxrlebdaYYZZbm`\\nofmvw~}}{ckxxrpmd`kyp_ozicgfgjt~{nganystqjidXYrufffkk`aeb`_bghgfgga`bbfmqonfbcggjmnqsnkeebbcccijf^XVXXWWWYZXZ]W[^a_VR\\``bfnpkjuyvuslgkmpuscjytuww{xs|zywmfhmqoklu`vhbhqvaJdphQHNONg]RVw]Dc^LO\\aQPNNPRW`jTJORUTQkƱ~YTOMPRUUUTSSbrynhwtTPqeRLQUUWM_anpoqle^`_o۟vgaxoclhdt^_daa`^n~}tlpsuvvtacn{~zpa[\\\\^djkYQVjS[fv_M_q}_wy`X\\[[[ZZZYZ\\^_^]]^\\\\\\[[[Z[\\\\[ZZXVUUUTTTTVZ]_]V`keYWVVVX\\]\\[[[VRSVXYZZbk`XXYZWVXY[[\\[\\\\^ba_____^`a`a`_][YSTSQRT_x{pkfefhjf^YY\\U_ssf]XYZZZZ[\\YU[`VZXQhb[^[`ddsVRJHIJJHKOPNMKL`qmjgfda][[ZULNQPNPPLHILOORYZ\\]NIHGHHIHHGGIKNPNIKPRQRSQOMNLLLLLKKKKJJJIHIOPMKKJJIJLOOONLIIIHGGIIIILNOPOKIGEDCDDEILLJKNOQPMMOMHDBACDEGHHKNLIKMNNJHEA???>?@@BCDFHJKMMMMMMNMLKKKKFAABBBBBBCDFILNMMMMMMJJLMOQRSRQSUTSSSTRQPNblfRKKKIEFEHJLNNGDNLDADHLLLHEC?89>BF?:@EIMMB:?NE=<;5mYIOONNLJHGC?=<778<?@BBA@BDEEBIXșA>DEHKGEDFCACD@??;AP[`UIBBDCBCCDLXVQQSVWWXXZ[WSQSB?>>==?AA===:732543K[K@EB::<=>>::;FFFR_fcXOHFMQGFUVF::DB<;74:BDB@AA>82/--,/6;?<=>==??>=>@C@=Lae]YUPKGFIOQOHGT^UTdnjdS@=>??=5/276//10000242/.01124458::7;FEFR]\\RC877451+:Z]JFKF;635BE:-2>@?><??==>>7.1:===<:7665237:BEDB=65;:.,///02474..12344331--.01.-00///.7@>7553121.121014;>;:9;<<@B>:86;><677;;352.16610002344322./8==81/47751,2<<;CFI=67-.@@35:999:85;JLKLLJGE>2,4;97@GHDBC?::=83201583/@JFHB;@B>8568:9643210.,*))*,---./.+,,)'&+6?:55/)17.-085)2?;72-(''&-0.*)-369;<>=5..29;76887752/--42,3<6M;(.//11,-25444.**)'&(),28:7/%&274/7<-#%-2+##)-0/..,(')*.,&$&,/+'1AKH<21,')*++09CHGHHZqoh^QSN<0,/@X\\___GAcnl`NJIKLC@A=ErsMJY@%'18=8.-1/3?FE=2--,*))*+-///048DTWU\\YB37FSSQXZSSO6$\".[vviUbbS;/27<1#8VM>773..,(-7=<5-.00,(6GHFY^IGM8'.4ddegffgggiiiiikkiiiihgghfcbbffcbb`aa`^adccccca__[UV]cc_^cfc_]YWWXYURTUROQTSOMOSTPNNNOPRTSSTUTUVUTTSVXXZZYZ\\[[XUTRRSTUWWUSTSSTUXZ[ZZ[_baaacdffghjjf`[YVSUallnssoi\\TSRPOMOY`ZTQR\\a`\\WX[_bbdc``aaaa_cea_cjmiaYVTUUVXZZZZZ\\[YXYUQRTVXZ][WW_q{o^XUNT`igbcgjfevyouwqdfhaab\\[beZ]t~zzy{~y[Xgmooprqlnvzqbowfeffhiny~}|{zy~q\\]y{|ztombVTc}t|{idonbbeaabekkjkmmkiijhnvutg^eqsolmlongdcbcehjrzp^ZYYXXXVWYXYZZbkttf`baahnnlifruqrnbdknw}~|sofous{~}{|}z|yusmlnjqrlln|~odgxvsHJXziOLNMORTW[MK]UNONKNWPLQWbf]JKQSVVTUĵl\\TOOONQVUPZs}mm}ϴdT\\yrWTPP}Villljd_^`Wpzqlio|xqe|^dc`a``o͟rpnnnoeahlvyi^[YWcqsg]Xm`S_df]egbrľef\\Z][ZYZZYXXY[\\]\\\\\\\\\\[\\[[Z[[[ZZYYYWWVTTTVWZ____ecZUUVUSUSV[\\]_YUUUXZ\\^dcXRUWZXXXXYYYWWRUZ^_aa`^_``_\\YUSU[RPQNPVTk~rlfdelnaXXYZSZnseZWYZZZZ[\\XV[]MU\\QXd_`YW\\bX[P\\NKIJIGJOPOLJRbidcdedb`^\\[VOOQRQROKHHLPLLVZ\\\\PIHFFGHHGGGGJLMNKLPTSRQPONNNMLLLKKKKJIIHHJOPMKKKJKJLOOPNLIIIHGGHHIKMOOQOKIHFECCCGMMLLMNOPNLNOLHDBACDFHIJKNLIKMNNJHDA???>?@@CCEGHKLLLMMNNMMNMLLGAABBBABBBCDFIMNMMMMKKIJLNOSTTRQRSTSSSTSTRQRUQJJJHFGJEFGFEGIEIHF@9:CIILNG@:9::;>?@DGJMA::ANYUD8YnSUSRRPNLJE=97568;?BAABABDEEBVi̾_?IKJC=??BFC>@EDABBA@GW\\UKDCCCDDDIUXTRSVWWXXZ\\YZRC<9<;:<?A@==>=854345FXH:?;68:=ABBDDFKF[^dYRQNQTUJPee_S>=?>;;<BNND;AB>93578559<>;=A?<???><:=>7>PXURPOLHJOPONJGV]RUgmkkaJ<=>><83./55220//021110/334665547>FIEL\\e_QA9;;53/)<YM8CG;/05<IPL;4AC?68@@A?:62/0687754322100-1<CBBCCCBA<9976799620122224442.-.043277-061/2323443340/00005@FD:1479<;8886;><74356342/00012320.-./0//39:98657:985/5CFCEEB788.-9;89:::88407KQOMH>:?=54:=<9?HGCBC@:99751..15/-@MFG?9AB5-165788652/-,*('),..//-****))(&,;A71;<1/51./68+)==<9985.&)/1,*)(,29AA>82346;<88>=;82.+294,2:<BH2100/-)/697743/,)'&'()+/23-%&05-'-.,)*.1.&#)031-*)(('').3.$/;,(,3<7,**&%''(*05?E>6CY_ot^KF@2-*1G[V_bedWYkobPKG?72<AACdtL67.,6>A?6.0,*7FHE?6.,+****+0;EA6596BUYXD.+2GTPQX[[]_I1/+Ir{yN6RaW?0/7CC-$0:87:9652)(6A;1./0/04AKJGHQXM?0&'(ffhiihggiiiihjlmjjjjiijjjfa`cedb`_ab``cffgfda`aa^Z[^a`YTYac`[WUSUWWUSSUSQQRPNMOPOLKMNNORRRRTTSUWXXVVXWY[[\\]]][XWUTSQQRSSRRRRSTWYWWY\\^abacefgijkklkcZVTPMVgpponousgXQRQORXYRQW\\_][YZ^bdccdccdcebadcdhgbcijhfb]XXVVXWWXWWY\\__^[VWWXZ\\_]VU`hhge\\VPS\\bbbeecbjyyrnjtrjgbfi`]^X\\szuv{tWXajmooppnnqtogeaceefgkmrx{tlz}mW_~yswxvuo__ltsx~y{qWhxfmlbacb`hmlnppooopprpkjosibkutpkjglolhbadglrvyzfZYXXXWWWYWUV[flmljhb`bmrleai{xrlmk`gmpxviitpopt~~{{~zxvtrnmqtvxsmoqxkl^]v`uNLB_nSKMMPUSTPMOQPPPRVphTUU]id[POSVXY[W]on]ZZWPKLTUNU}quɩiq{̘cRHuVegiihd`_\\^[{yu{pd^`aa_`bhtۻwspnlogedgly~n`ZZ]oyuba^yq[Z`b`_smgbdmW]YWY[ZZYYYXXWVX\\\\]^^^^]\\[\\\\ZZZZZZYYVTUUVY[^ahh\\YZYXUTSSRUZ[YZXSOOTX\\dcWRPRTZ][XXXWWVUQTW[aeca^_ba^WSONPRNOPMNTRYuldbeskYXXVWTYkpbVVYZZZYX[XXXVJNZKP]Z]YTSZSTWVNKIJLKMQPOJKWefaabcddec^\\YUQOOPMJJIJKLIJTZ\\\\QJHHHIHHGGGHHJKLNPSUURQONNNNMMMLLKKKJIIHHJPPNMMMJKLLOOPNMJIIHGFGIJKMNPPOKIGFEDEFKMKKLMOPOONNOLHDBCCDFHIJMNLHKNOMJFC@??>?@ABCDFHJKLLLMMNNNOONMJB@CBBAABBCCDHJMNMLLMKKJKNNPSUVTRSSSSSTUSSQMIFFJIGGHPPEEE>=?CE>FH@:45@JJKJIC?;>ABEEEEGNB@FNevbC>?qSVWWTRQNIA;9779:>ABBABACDEGJTn͈@JHEB>8;>CCB?@BBADFF@=EPSNECCCDDDGSYUSSUXXXXYYXUP888537<?>>>>>>:77679AE;477779;BIKHEHEEY_aTJKKNPKK[ebjhJ9=AGJPUTJ93<BE:326<=<>A=86:<=?>?B@;<=;:?DGIJKHGNTMINNGLXQXijfgdQ>;=<>BA<:63541113332354357:840,1?HHHSbc\\P?66722/)>V>8@?5,1=CDMTI;AC7-7<?C<10224643210//023108?<;EONLIFEC@<;72247:99776668952118@;<<6573,*,/13543420112/3AKD4+.23335777;><73200330-+*)))+..-+*+++/4667777778<=88?CA@?<68633557:9898866@NQMA3-/579>?<;<@FEA@@=;9742111242/?NFA:6?>/)05589:8752/,*))+,-..01/,+)*++'+9>3+4>;5651-12*&7;;8>EC7**267564*,2:964100.1535;;961,+03.,.14/F=//.+(),/1./244-(&&'&%#$*2751030)**+.1:>9/+-.12-)((('&&(4917C60/,+)'(&%%%&(+-0<B5-LR;Xp_A41.-+3HYTb`drdN[eVKIF8+/:==>O`D555:CGE:1282,5AHHB:3/-,+*+*3ENG:5;;:FUJ-*:@HPNNQ[a^`UJM:>gx`5%5JN=..;IL>+(29;>>94.))2;81///048BHFIA9WY4*,)'eefijkihiiiijlmmlllkklkiihea`acba``bdfhjjigea_b`\\[]^\\YVSTXZ[YWUTTTUUTSTVTQOOOONOONNOONNOQRRTSSUVWXWVWXZZ[\\]]]^[YXWUSONPQQPRSTTVWUSV[^`a`bddgllmmnnlaZXRMNXef`_`jxs[QSSTUUTSSYa_WU[_ccbddcdijilkihdbde`]`dhkkjfda]ZXVVTTVY[\\\\\\[[\\\\\\]ac]UTVX_`hhVPR[`_cfeebdlpf_wtlfdfa]Z\\r||ywvy{xk_`gmoponlllpplhdeedegie`ejaZwi[axzvvvy}rgolca]gh^dnfe|rjib`ccdjkorvtpnporxrdbjrsjkuwtmkjmrsmbadjptuvyt^UVVVXXWWWVXgnliiifdbblqkegs|sslhljkptuxukcdnqlmu{x~xmprjimqvyywmlnli^paTjZKNQPLLMNTTSRPNOOQX[ls[c]_gfbROSW[\\\\ZaؠiSXST\\\\ZYSRSPKhpzʥtyI~yXjhfhgc`_]^^jç~}a`_X^`^a_YYatܦwtrrrse]W^cro`Z[gtyn\\Zc{^QX^c`^xulkZPk~W[ZSY[\\ZYYYXWUSSX\\\\\\^_`^\\[\\]\\ZZZZ[[[XVUTVY[]ikaWZ[XVUTRPUYZZ^`a\\Z^c`^caX^_WTX\\[YZYXWTSRUW[chd_]\\aa^VRPQRMLOOMNQURxjb_kvaUYWVWUWhn\\QSWYYYYXWWZZULIUGP^Y\\\\SMQPPPMLJIINPRRPNJKVbb]^`acehgc_]\\VQPNJHIJIIHGIPX\\]SJHJJKJJIIJJJJJMPSUVVSQONMMMMLLLLKJJJIIHGJQRNMNNLKLMPOPPMJIIHFFGHIMNOPPOJHGEEFHKNKIJLOQQPOPPOLHCBDEEFIKLNNJILOOMIDB?>?@@ABBBDFHJJKLLMMNMNOPPLDACCBAADDDEEFJLMMLJJLMMLKNOPRTVUTUUTSTUUSRPMJIGHFHCNYPBED=:;:@@HF@;67@KGFJKNIA?CDGEECENBFT_hjO?@>B¾V_a_[VQKB;8899:<AA@CBB@BDEJGHuԺ\\FG:;?=;<?BBA>@A@BDFGEBBFGFDDDDDDEGOXYUSUWXXZZXX[L696115<@@A@AA@<;<==9775567899<EOMGDKEGTVXMDGHJICHUZ_jdPA?ADGIE<2/26?E=5159;<?B>5026>??@AA?@?>=AHKMMIGOWWTRSMCDPP\\ljd`^UD?C=BTWXP82764224332477469<5./28AFGIUec\\P;20/121,:E1798516?@?IRMA=;96:27@5,03346310//./5>C?AD>32<DFEDCCCC@<4/047<=<:74249<99969@;@D<300-+,.1443334455624CH8,+,.//03557=?<840.-01/,+*()**,02/)&(.432113:=:9:=?:66:=;989999;<;89769999<JQJ?/#-889;>@@??AEC@=<;:86103663344>MC94263-.48:;<;::8651+*//-+,./670--,-.,.682*/<>:==6+*,*)0441;E@2-583036;7.,.-+,,,,,()*-110-)&))*++,,*'9H.+)'$'**()+/.-*(&&'''%%)09;72340.0111<C=4/021//,+**)(&#+8<=:521/-,,++**+*+-*.:=55MC(6HG0*-/115CKH[Z\\miG@OEGJD4+/6=>26?329:9@JG:6<>;627EKFA942/--,,7IJA:9=>>CD4,=ONIKLHFV`_`TLRD>UZ=*)(/72).=HHB<436<@?:3-*)+250.../37;@DF>):XB!$*)bbdhkkjhhiiiklmmmmklmmljhiiaZ\\_aa``cillid^`efdcaZX[_]YWVUUVWWVVUTTTSTSRSTRPOOOOQQNNOOPPOPQQSSSSUWWVXYZ[ZZ\\^^^^\\\\YXZYSPPPPPQRRRTVTQTX\\]^^acdgjklmmnong\\QNMNTUPQUZ`aXSSTUUTTUTSXXWUVVY_cegghmnmoomie`XTWYZ^adimooomigc]ZYWUVYXWZZZ[]`aba^[YUTTV]XTSTUW`ebde]\\]\\j}|sssh^][Xg||}}tgadlqqpnmllopkkjdaadih_WW^`\\jwq`Xasw}}xtroqmoq^SYXZ^XXchuvjeb`aimkptqonnoqmsycZ``iolnvxusssopssf_cpz{|{zyia^XVXYW[W[u|xutqjgecbdipx}woqlqsxypgggdfpomz}xxsdu{igkmnpxxkhjinwy^igUdMWjGKLLMNOPRSRPOOONTYhs_a\\\\`heUSVZ^^_cܩ{_UTPOQQY__ZVXOZrzkzλri`kОchaijegeb_]irwkwʢ{n]_jhXV[^a_YLMQYYussuusr^WW]_g}reZYilp]TOjhQMRX_^VjrkgeVK^`Y]ZZYZZZZYWVTSRTWWVR_`[Z\\^\\\\[YYZ[[[YWUUVZ]ch_XZ\\XRRRQTW_eehty{{wsumb^_cokc[YZ[[Z[YUSRRVW[dhc[XZ[^_[SRRROLKLNNOVT~yhbatoXUXWVWUUceWRSUYYYYZWY][VLFPPRXXXXQKJJJIJJHHHJLNONKJJMSVWZ^acfihfa^`]WUSPMLLKIFFKQUY_VJIJLNNNNNNKKLNQRUVWURPONLKMMLKKKKJJJIIHGKRRNMNNLLLNPQRPMJHHGFFFGIMOPPPNJHFFGILONKIKNPRQPOPPOLHCBDEEFIKLMNJILPOMIEA???@@ABBBCFHIIKLLMMNMNPSPGACECAADEFFGGHKMLKJIKLMOMLOQQQTUUUUUTUUUUTQOMKKIEBB@RVH?DC>;::?FID?99CLJC?BCIJIHGDEEDCDJBJae\\N:<<?=A}©sgffg]NA:66899:<?@ACECCBEEE:KК^YH9<@<:;=@CB@HDABCFECCBBBDDCDEEDEGIM[[TUWXZ\\\\ZWYE5664249CKMGFDC?<>?@?;98656777?MTKGDJJHKMNDBGHJA7<QQO[XQD98<AC>5,-24::;757778:><4/15=?>>?@BB@??CJPVRNUcc^`b`TE@KJN_f`YXWTRREBSWSF9675542210122236;:524<AEJIGRef\\L700.143.0/03266479:@INJB>;;<;,.40/12233332358=DMMEA<3--/3<@ADECCA717846:<=92-+/787:<8899=;4-),//113553555666548AA7/-,+--.2446?A;61./143.*+.010035660)2?<2/-*0=C?:;>91.17:86477336;A?9537988:IL@6-*7FHFCBADEDCCB@>>>=;8546985148=JA630//36889=??=;<;60--//,.01149<734433442201;?<@B7+)././///=E9+-98/(*042-))()*,,--,)**))*)'&'(+./011//I3.,($%(*+./,''))''''((().56424411138:==866674221.+**)('2?FF:235:B>4/021../.,.47674.)%&+),29<97533QY]hg[NF0?MB54337>7,,./35/6ID44<>9537>EGH?5001447@LC8;B<:DJ:)8PUOJHICCQ]`aM=DB@GA.(-/)),,/5=B@;523579;:3,)*.-+.//023369:3&\"<P5\u001d(/aeihiigghhikklnnmkjlmlkkjhfaYTW^`_`bghb\\VPV^dfb`_[Y]_\\[YVUXYWVVUUTSSSRRRPQQOOOORQNOQQQQQRQPQTTTVXYXZ\\\\\\\\\\\\^``_^][YYZXUSQPPPPPQSTRPSWZ\\YY_egfhkklklmoofXONOONKLMNOQSTRSTUTTTRRTUWVST_hjhjlllnnoomkki^SQVYWW\\`cfknpqrqmifa\\XYZZXVUWZ^^^_aba[XXWXXWWUQR\\b`ada^[[grmhr~wf`[U`~ulfekqqponkmpqmje`\\Z`hib[[_cda^[VV^ffunkmmndXX\\]Z[]]\\fyohb``gqqlotomkmqqox~eX^]_dktvvx{wkmvk_cs|~|unh^ZXXWZ\\{yryvqlec_aq}lpqtvqikkddmmmw~~~neyziddchnkkvvpqacqwubUKFJCqKKORPPOPQQOMMMPWZZe~lXXZ_cmma]]^^][vhTheY\\XSPMPS[^]`\\d~ħzjct_X_fzuoovi`_mkiwzh]aaktqobbzϞ~PVccaYTVX\\c`OPRSbBjpny}j]UW^hki}f[Z\\_fWSWlWNVVXYZX^efec^[TagYZ[YWXYZ[YUSSTTSTUV]`\\[fe[W[\\[YZ[[[YWUTV\\be_[ZYYXSVTU^lw}|{uplegrmdVakgebb`][Z[XURSUYZ]fhcYUVTV[]YWTNLMMNOOOVRmwgbfscSTUVVWVV[ZWVTTWXYXXY[\\[XQFLXRVWWWPKJJJJJJIIIGFGIJJKKKJJPY]acfhec`]_[TRVVTPNKIFFKOSW`YKKKMOOOPPNLLNTVXWWVUQONMLKMMLLKLLKKJIHHINRRONNMNNNOQQSQMJHHHFFFGJMOPQQNIGFHIMPNLKJLNPRQPOPPOLHCBDEEGIKLNNJHLQPMHEA??@@AABBDDGJIJKLLMMNOOSRLDBCCAACFFFGGIKLMLJJJKNOPLLQRSQSUUUUTTUUUVTQNLIHE?:8ASP@8>>;;;;@JD>=7=MQH>68;<>FNOHGGFABHBQijXC759:;BN_ɿjmlmbM=87899::<>@CCGCEFFFKP\\ugdTKEB>9:;?EBDZOCCBDDBABBBBCBBCEFEGD:M`XSW[]a_\\VR?665444=NYXPJEB?<=@DEGD<532336>JMFEDGGGHMNAAHHC7/7KG>TVC9:9:;>FI<246::86997888;:6556<:;>?>?@?>=?AL[ZV`nh_chf^K>D:3@TYVUW[VLE>GN@5687556400/02/-27;:89>??CIIITffZG4/11254112342556656=GJHA?==<9.*+.121112258:@HPSPD4..,,-/4>@>:7:?=20:948?>=<70147777867645/--/003799975575442/06:970**+-,,1436;<71///474.*+/4533469=95AI<//2-2@C>98:6-*/79::8741/03>A:0-06557DE?934:<<>@AAEHFDBAACDCCB?<99995/2:<B=63.,2::821<BCBA@;/&.4+&-56666:A?;=<;960,0326;=A?4++/143201@H:,184.-.56-(')+++++,.0.,)()***+))+++-375/@=,/1,((),/-*'())())****+054114301367995..25689862-*++-2<EKK?67<AGE<0.54.-,)*))07:6331/.147;<83/+.J]d[G\\eB(0>?::74465+).0..,3IE/)/244566<ILC811258;@I@9?D?=JQ>,3CGDEGGGKT]caH8?BAD<+&,51*,10+0<:10230-09;3*,-,))/11110,+,..,&$?L0)1hjjhfdbdghiklnnnliijjhedd__ecWSX^`_^^ZURPPRSX`_]`a]YY[\\[WTWYYXWVVUUURRRPOQQPOOPRQOPRSQRSRQRSTVWXY[\\[\\\\\\\\\\\\^`aba`^[WVVUSPOPPOPQRRPQSUXZVU]dfcejlnnmmknogYQQPNLKKKLORRQRTSTTRQSVUTTU_iigilnnllnonnnnpncYVXWTUXWVZ`bcfhihfeb[V\\_XTTTVXZ[^_ba`a``^]^_^][^abbdffec`a_^jwwsrl]Ud~xvohipqnonlmmmmjd`YZahg`ZZ_hh^Z\\ZXcv~wrqnkhaXY]]Z^e^Vmpkd_^bmspnklmnmmrty}p[Z___gu}~}}kdrrecpsw}slic`YVWS`e\\filmiccumhkorqppnechghlttpji|zc^`_^dchx|wcYhwnMHKJAnzQKNPOOONOPOQV[cda_ZRwgWZiomushla]^\\Ta`^_Mb}zkWY_[WVVWZYZ_^d~~kgp`zeZegzucZSMT^aaqiftvof[Ra⼤uzM^pbTUVRQV^YPSSnh\\rmaRSV[esnyi\\YVWWUThdRT]]\\Z]_^_bb`_b_XrkYXWWWWXZ[YTQSTTUUQXg\\_lrjVPX]\\ZZ[[ZXWUTU]e_[\\]YXY^ksuwyxwwqfaZUTTWkxk_XZgllmd]ZYZXVRRVZ[cji`XVWUUXZZ\\YVSTUSPOQSP[thcjjXQSTUUUUUVVWWTTVXXXZZZ\\[XQEJUOQWXVNKKJKLLLKKKIGGILMLKJJHMZ]_`de^\\[[]VKLTXSOLIHFFIMOR[]LKLMOPOOMKMPTXXY\\WVUQONMLLMMLLKLLKKJIHHJPRPONOOOPPPRSSSNJJIHEEFGHLOQQQNHGJLMNNMJIILNPQQPPPPOLHCBEEGIKKLNMJHLRPLHD@>@@AAABDEFIJJJJKLLMOPQSOIEDCBACEGHHHIKLMMMKJKLNPNKNRTTSSTSTTTUWVUVSPNKGEA;8;@BA96;<;;;9=B>9=7?LME>76877;BKMKJFGJH?Rhm`LF?78?LG8EZ½̦rniibN?:88:::;<>@BDECEFFHTn}Δbg_TQTJ@99;AFCFTD>BBCCBBBBAABBBCDEFGB09R^SW]afe_UOA767657CRZZULFB?=>DGGHGA73111358;>CDGFDIOMDBGD:127CAERD=KYWVH;>E@59;>?:8<>??><;95224699;KQB>@@>@?I]\\[gng__fiaG7606?OWSRWROPG<CJ>:87676640.-02/-4>B;5:?<8=EJIPceYD2134333457876667536=FJGB?=<;9/*-243/-.016<BLRSQG4()++-/29>><4,.1799;98<@=;;732;=;853431//.153129?>?<5345320/.37::5,*./.,+03331/02421233/.33356646>A=AJF6,6?53>>843552.28<@CB=8:;959<7-)+23/1>@=;64/&)9CCDFGFDBAABDCCBA@;987414=:8762*-7:9621;BEED?1(*78*&/5689<@@>?AA@>6-),./14;?:0-.0233324@F917:1)()-2.(&()*)(((*,,)''()*+-+(%'((,132;G1063-+,,*'')))()+,..-.2774214545?B<24740+)09>@>62///301<B;2138===?:124.('$&(,5EMNMKIB5467641-1/+<SaUDVV03@HH@;98853110.(&)7LB+%%(033118IOJHID9589=DGG@<?GOSK2,938DHHQ[Z]aZB7>BBE:'&/891.42)-9821331./33-+-*((',.//-+')0787:69LJ95mieda^_cfghlmmnonjhihec^ZXX_fcZTX][YVRRSTVTPPX\\XYaaWTY[YXWWXZ[ZXWWXVRRPNRUSQPPQQRQPRSQRTRQSUUVXXXZ[[[[\\]]]^`abab`]ZWSQRPOPPPQQQQPQRUVWVVY\\]]_dhmnlkikonfXPPPONMLMNPPQQSRRSRQRVTSSX^^Y_lpommnprpprqprqg[WXWTSSRSXYUVXXWX[[ZX]c^YWVWWWXZ\\\\^aca_`abbacccccdfggfgfa\\X]how~ui`]ds}zvnkprqsplfcgnlhbZ_lpf\\WWbgga\\^ackrrlaafbcefca]dh`Z[][bneVmtkb_`eornonehjkntpw}h[^a``cn|xtxqcgskbkztkrolifaYVRUauRY[Z^glhq|w{yvtgekpronpojfhhhjq|omiW^cdye\\_`dfikr|vrx}uPKKNFHRLLLMNLLNONOQUYYW[ca_jj`h~xdatiXbe[KJYeWMU\\oaTae_]ioc]]^^]bwpZWbf\\V]T\\nWQV[abgz{dc_ZYUU̝}Z`ou^SSQRUVVVUPǎun}XPUY^dnmktq]XQORUZk^WZ\\^X^cb`\\__^]\\[T[|qXWWWWWY\\]ZTQSSTUUQV]ZblfZRQVYZYZZZZXVUTTZa\\[[ZYWZgztg]YWXVUUSRSW\\kylYaiihaZZZZXVUTX\\]ejdZUYZZYXY[]]\\[YYVQQPPNOrrfek_RRSTTTTTUUVVVVUVXXYZ[]^[WOJKNLEOWRKJKJKMOONMKIIKLONKHHJJKV^bcbaZWX[[VJIQUQMJHGEFJLJJS]NKMOPRPMKJMUXXXY^WVSQONMLLLLLLLLLKKJIIHKPSPONOPPRRRTUUTQMJIHGEEFGKNQQRPKKQSQPMJGGIMNOPPPPPPOKGCDEEGJKMNNLIIMQPJGC@>@@AABCEGGJJJIJLLLNPQRSNIFECCBDEGIJKKKKLLLIJMOPPNOQRTTSTTSTTTVWWVVSPMKGA=99;>;:69<>>>;9=@=;><>CIF@8888999@KJKGEFA6MimmeaaL;Kv]HG@T¾dfgcR@:889:;<==>@CBBCCDJMfqfcTLKZO@:9<CGFMWF=BCAABBBBAAAABCDDFG@20?^UU^djjbPE:787:<?CEMXSG@>?<>DEHJHC=974674102>BGGDIKHIIGA5017NUL:6Qjvx|pV71738ED?<<@CFB>>=73/.00256H]L??@C@;E]Xcoi`\\[cjaB35AKLQSPQQJIUSEADA@=77767630-/0/-3HM91<@:69ELFGZbXD565540269<=;:767712?JKFB@>>;90,1782-+-015<JSSMG;-+,,..0369:::742;ECB@=<@>77985:@B;522/--/147416>?==;634545334<@CB5*-560,,/223324654456403<=9:=<42:=;?D?2-8?61640112442489:<?;58>@7262+(+/101;;4582%#5LRKGGGGDBA?=<>AA?@<956785=<3250*19:8998=@CED:)%3?9,+14689<?@?@CDC@6+)++./05850//00///148;5499/'%').-,++*)'''()+(%&((((*,+'%),+**-38H>:73+(**(''))++,.011248<;74248=CMRE31650($(19==;98750,19:1*+.168:CH@84/+*)1=AARULQUQ@/05772121/+,5?F_lR0AS\\]P>8989;<<80.00=M?,,.-22.,+3FONS][LACFFFILG>@ILML99D14DINXdYOL@959@EE;**7;:4/42)-77322234220--,)(((()*+)('.<CA@FMJKVJ>ec_^][`egginmmopojhmkcde^VTSXa`WRRSTUVWVVVTSSTVTTZ[WVXWVZ]ZXZ]^[[ZZYVSPOSVTRRRPOQRQPRRRSRRRUWWYXY[\\\\]]]^^_`aabbcba`^YTRPQPPQQPQQPPRTTUVVUVUUVY\\^_befhgde]TNNOPNMNNOOQPQQQRRQQTTUTWVWYepnkkmopqppqpqqqpdVUZVVVVUVXWVUUUSSWZ[^`]ZZXXXXWVWX[]]\\\\^^_``a``aaabbbabca`ZZ\\gywm_]ovxy~~{yqrz}~}pc]]cnmid__indZZ[giea^_dhc_^b_^^baa_`^\\]a`\\Z`dfnnbtsoieefotrneecbbhl^b{z_[`aabbcnx}zurtqldhfglr{mlpoqke\\USUWenTU\\X\\alps~z}{tkjdlqusnjmopmoqqprx|[ST_g\\]ss__abfiikr{}}~{dJGIIHBYHGHIKMKNPMLKLNPMXtwhiyqi[Qkqnh^hdUJ`_SVUkkRZdhjw{gaibb`UR~t}QWSJMLBѾjZW]acfiorֹ|S\\[WYZҋʞ|jg\\luYNTTSSSTTQܳϦwopUT]hllfli[jrgWGOX[^f]_^\\XT]fec__`^][]WPl}\\WVVWWZ]]ZVTUUTVVXX[Y[ZZUWXUSUXZZZYXWUUSVX[[[ZWYboui\\WTRTUVWXXVTUXWYm[YZZ[Z[]^ZWVX\\^^ce^VVYYVTUWX[]_\\YXZXWRNKJ_rfjfWRRTTTTTTUUTVVVVUVWXY[\\\\ZXVWa_JENVPLKLKLMOPOMKIJMMOOKGFIJIQ\\egc]YXXZZWOMSVSOLJIHILLKJLYQJKOOPNLJKOUWVVY^VURPNNMLMLLLLLLLKKJIHHKPSQOPOPRRRTUUVVTPJIHGEEEGKMQTTQPQWWQPMJHGKOOPPOOOQPNJFEDDGIJKMNNLHILPNJGC@>AABBCEFGHIIIHIKKLORRRPLIFECCDEEHIKMLKKLLJJLNOPQPSTTTUUTUSTTTTUUUUQNKJH@=:77<;:7;>BBCB?AEC@DC?@INB79989:7<IKJHA><6Igow{zkE[wPEOJgѮgejhWB=;:;;<==<<>ABBCECN[hznlm`LEKNJ@<;=BDG_lYKKGDDCBAA@AA@BCCDEF@417OYT]ekleI;9789>DGA9@PUNE?>:;ADHIE>AEB?BFB;1-<=AEFLIBKPJ@4..EcZ9-BSSYiyzhHD=16LH>?CDGF?>=;51/.01014>YXG??@?=E\\]ls^QUX^`R@FLUWMGS]UOMP`VKMGA<;87787643202/+2FF30?ID:7DLEAJPVL@9762259?A@;9768<86>GGDB@?>950059841,00/3>PVNE@:.+,,.0113234568@IKIGB<=C>16:;99?D<32.++/0133426<<:98865468999;?EF5)0541.-./0149;60279940499;DG?63:=;:840023100,/443234677300/,-163121+),/1/1882*53(0HONJHHHGC>99::<@@?@=966>?35<6240/5;<===<=;:?D9((7?:/1457878<>BBEHF>3+)+*.3345532210..-024775871))-04332.*)'&'*+,)'()(((+,+(&(*--,/45=FB>3,((())(()*-.025689;=>;736@JMOMA2/24/(+0477<DFGE=45<920.+1:==?AFLE94554=JLMRPJGQN8+/57711:6/..,'*MmdJPRO``J;<=>ACCA?AD@BL@24654300.2<IMU`ebXTSQJHLLG>==:DBEN80:ERZeS:72320;DFC54>;:4.22+-22111011110000...00--,)((3@DABJUXQUTL[\\\\ZY]cfhjmpoqrrqoklof`gfYRRORZYROORVVVUUTRTUSRSSSTWWUSSY\\YXYZ\\][[[[YWSPPRSRRQPPPQQOQRRRRRRTVWXZ[]]^^__^_abbabcdcccc`ZTQOPOPRQPQPPRSSTUTTTSRRTSQPY]aa^[\\]WOLNPNNNNOPQQPQRRRRRSTUVVTVbmlghilopqqppprsrqqdVTVZZYUSWYWWXYYWX[[\\[\\\\\\[[Z[ZYZZ[\\]_^^_____^^`a^\\]]^__ad]]bdr}}}|{~zprpq{|{}x{iYXYbmnkgc^^a\\W\\cigdb`_``^ba_^]_b`^]]]]Z[]^Zaolntrzxpjikigowqdeh_[\\\\^\\]lm_cb`bfha_gprrrqqrme]ckqpqrmmfiqoj^TTUWVTUWWVcrwst{|zyrojglrusnjkosvz|{uuzy\\\\dofZ\\ee_acdgolbmz{z~~qf]ZROGGWqNDCK|gTPPNNOTRH\\rdxnu\\JZfzzMUgiV^`XXWehPQ^fn{|ccmf\\[WEh˚wyiFKLKNΚ_U^ba`ceb_aۜwn\\TU{ݩݚfuvc^_q`OQSSSTPMȿƹcexseRXiwljijh^]poXROZ_b`]eg^SP[ihfa`_^^aa]XceUUVWW[^^[XWWVUVXZZZYYYZ]ZYYVVXZZYXWVUUSTUZ][Y\\dnn^QOSWWWXWWWWVVYWXVh~lZWWZZ]`bd]U[_^^][XUX[ZQLQTUVX[`ZWZ[[WPLMTyzpl\\RSRTTTTSRSSTUVWVUVWXZZZXWcdWepSS]VNLLLLLNOQPNKILNOPPLFEHHIMTZ\\ZZYYYYYXTRVVTPMKKJLMLLLLWTJINPPNKIKPVVUUY^UURONNMMMMMLLLLLKKJIGJKQRQOQQPRTTUVVWWWQJHHGEEDGKMQVUUTW[UPNLJJJMPQRRPQQRQNIFEDEGIJKMNNLHJMONJGC??ABCCDFFHHIIHHIKLMQTRPNMJFEDDFGGHJKMLKLKKKMPQPQQRSTUUUUUUSSRSTUUUTOKJJI?<<87=:98=ADEDCCDFHEFFCEMSD69:89:9:CKMJ?::9BUzgBdqWOPSYz̓Z`\\OC>=<<<>==<;<@BBCGFXnsliqiaL>GFD@=>>BBE`fTTUOKICAAA@A@@ABCCEFB535H]S[dkldF9<=9?DFE=:@HLTM@=;8;CEEB6:HLJKMKA31C?:AEJH<IRH=713WnN08G?.2TrtrobB18FE?ACEHD?>=;40//18>>=>MYQE>>??E^ek_GCKLPPF@LUURL@RaYY]`iXGVQA88889866555651,194.7ELJ;3@KGA>>FHB<94048;?@=6457:AB<>ADDBAA?9107:;965572/2@QQE<;9/+++.22/01///+3HQMJH@<AB;769<<9;A?83/.136797546;<978;:613689:9:BG9-25310//././11-*/797544578DD@BFFA;=<400.,-//,1885127975731/,++,/122.+--.,0670+221FTNJIIIJGC=44=@=@@@@@=;;?C6.7954029=>@??>>73:C=-/>B>::::87644:?DII>30.+))0566:<:64210///25997852/045:964-*)'&'+--*)))('(,-+(''%(+.146::;81,)(((((((*,07;:9878855667CMIC;0//-0.'*-26;?BHMME<993/126>GKGB<>LMC:9<=@EGKNOHEB>/)-3772372-/6<CHUjl_dfROYPA>>?DFFFHGGEEH@79965424864>LXbkmh\\XTHGMNJ>530?FKTA/,7MZ`K./10//6AGKE@@<:4-13.-////0///0002344557:5/,)')1:<<EPXZSTZ]WY[WW]cehmoqomnrttmfhh^\\a\\SQOMRVSRPQTSRSSRQRSUSRTSRUVTRTVWXYYXZ[YZZXXYVROPQPPOPRPOPPQRQRRRRSUVXZ[]_^____`bbbbcdddcdc`^[VQPPPQPPRQPQRRTTTSSSRQRQMOSXZ\\YY\\_[SQUTPNOONOPPPQQRRRRRTUVUTVcjedgkmpqppqpprtqrvraTVZZZXVYYWYZZ[ZYZZZZZ\\]\\[\\\\[\\\\\\\\]_a``__^^^\\]__][\\[\\]]`cb`lljrxokmn|xnrz}~~|fVWYcoojgd`ZYZZ^fecb```^V]eb^^]_a^\\\\\\\\]ZY\\^]eolnv}|smmhhojgqxmckj_\\Z\\]]^dbahdachi`[borsssrtwqfdnrlaad`^fonkbUUUVWVUWTTe}{tux{yx}wrslhlqrnllmqtyvv|uhuwjYXZ_aaccfhpl_iy{z~usxxwlZGDWF;sї[NQOQRWSFei|su]UrgLMNjUCT]hcbZZXbcPMYbbl}melcWX\\\\Pǣ{qjjIPPQbONaic\\WY^ed\\ꯄ]PO\\ߨxT`s_hphomWSSOM|ǰvVRR{rgQYriZ^fgd^Y`cUPPX`b_]fj_PO\\jjhb_^\\]``]YZnpXUVWWZ_]ZXXWWUWXZ[ZYXYXXVVY[YYYXWWVVVUSTUZ]ZZdml`QQUVVUUUVVUUSSWWVWUd|k]ZZ[]ackaZ^a`^XUXV[m`ORTSSSSV`bZWYZZWQRPmyiVRSRSSRRSRPPQSUWVUVVWYXXUT_eKQSTV\\TMNMNNNNOQOMKKLOOPPKGEGKMORTUWYYXYYYXVXYYUQOMMMNNMMNMTVJFJLMLKILQUUTUZ]USQONMMMNMMMMMLLKJIIHJNSRQPQQQSTTTVWXXXTKIGFEEDHLLQVXWYZYRNLJJMMNPRRRPQRSRNIFEEEGIJKMMMJGJMNNKGB>?ABCCEGGHHHHHGHJMPRUSPMMJFEDDGHHIMNONMLIJNPSSSSQSUVVUVUUTSSRSTUUUSNJJJI<;<;9?:89?DEFFFFHIIIGGFHNTF68:9:::9@INNE;8;:@N^nyVEYqxsfNJO[pyȜUPQLEA?===>>>;:=@ABBFIetphil_^QCDCB?>>?BACFGHSYPNKFDA@@@AAABBCEDA73C^hZXfllV=9?=9>DD?:;AGGLLB<;98@???64BNNLLJA88CB;>CHI:BN?<A=8NlV<=?3(;]s}x?/46459?EECA>;92///2>QXTNS[SI==>AEQicH7=DCABDHNMRKEAQZdha_d]MQTC;==<<;:987:;;7100.0<DEHE78FF?97;BA<93378:=A;3027;>A>=>ABBDD?7029;:887>=834@OK=6:80,,,/440/1330,6IOKJF=>FD:::9:<;;>@=8899:AA<8645986547:723558?CBDEA869951147985/,-/07;;<:9:553;?DMLA:=A@@:64564336640179559?957620./110,--*+/550044=MQMKKJIIGEA:<CA?BAAEGEBCDEA7454225;=?@??>>938A?35CF@@>;:986316:ELE6,/35401677;A@:5211000357878543579<950+))((+,+,+***('(+,+)'&$&).368894/0.*''''&'')-3=@;99>MSOE<7:DHF=+*.-*//),.15:ADJMLF>855204=FPVOE<7?IE:8;>@BEEKSF2-,)(*0523<;5/,.?]nvxujjseOKG><;?FIIIGHHHHE>8;976315;71:NYdmpi_ZWKHNMMD50,6AMVD-(1DRL9/1/.217AGMNH@994-01..--//////1224556668;80-*(*.0/1CURMRRZiXYYVV]__dhmmeZ\\mqlmg^`]TUXSONOQRRRRPPQRQPQQRSUSRTSQRUVUVUSVZZYYYY[ZTRTVUSPNOONNPPOPPQQQQRRRSUUWYZ\\^^__``abbbcddceddcb`a^YUTRRQPRRRRRRRSSSSSRQPSUSPTQSY^bbb^`a\\TQPQQOPPPQQRRRRSTTUUUV]]\\ckrsrqrrqqqrrrsswsdZWXX\\[ZZZ[ZYZXYXXYZZZ[[[]\\[]\\[\\\\\\]]]]]]]][[\\^__][\\\\[]``ahegmomljehhhv}^TZ[dutkgfb][`cbc`^`aaa`[]a_`]\\]^\\[\\\\\\][Z[\\dllkpwmgkhhqjhqscamkb_^`b`becfjfeegf`[drxuw|zuw|{uvvn`_Z[dfhhjh^WUUWTUWVUc{zwwxut{ursnmnqojjlpvwz~|}xt}r_VW[_bbcdgjkeagtzz~~wzwiCsfBK\\NMORUXTIYjfUybLKa^POGl\\CNKTce^]\\`ZTTVXY`{vhg[TVaebdi[[W\\_abx^LTbj]RWbmoaXnWPOP䶄aOXhhesxpr`RMYŹePUXM{{cPYh]PS\\\\_]ZWTRPPT\\a_]el]PP\\jjg_^\\YWV[XWYczy_[UVX[a^XUVVUTWXYZYYXXWVUUVXXXYXVTUXVTSSTY\\Y_ml_SRUVVUUTUTTTSRSUVUVVVayte\\Y[^aaa`__aYVY[Zam]UWUTSSRRYgfZWYZYTQKgybTRRSSRRRSROMLORVVVUTUWXZUPOZ`vrQLRROOPPQQONONNLLLNMMLJHFGR\\`_^]\\ZXVVWWWY^^\\WTRQRRQPOQQNPWKEEGIKJJLQUUSU\\[TSQONMMLNNNMMMLLLJJIHKRUSRRRSTUVUTUWZ[YVNIGFEEDGKMRXZZYYVPLJJIMMNPQQPPPRTRMIFFEFIKKKLLKJGJMNMLG@=>ABBCEGGGGGGGGILOQRSSPOMJGFFFHJJMNOPOMLKMQRSUTTTUWVVUVVUTSRQRSTUUQMJJJI98=A?@;9;CEFGHHIJJIIJHFHNSH:9:;;;<;;@GLLA:<:99>TtYWtcKKNZjaqϾnIRXND@@@@@@@>>ACCCCEERiffh`RQODBCA?>>@CBB=8?INOOMMLB@AAAAABBCDEA71Kpj`XbliYE9GI97<=879AIJJG<667;>;7843?LLJJHB96>@?ADGK:=G9<BC?>U\\C7?BAV\\bt{4.?C9:JX__[L=981./02EWZVSb`UO?=?@BEYO<<@A>>;BW]TQIGKUd|x`ZccNHKFBB@>==;;97:==:3..038::?F@;>=9556:==<<?:3/2762.06:;?=9;>@CED@835999888???;:@DA4298/-..15512587319IMIIE;>GC86667;????==??>@F@<73552/../-379668@EGGDCC@=<><429AA@=67<<99;=<87843.7>>??=9;BFIEB@AA?<4202//12348=87;=86200.-//.)*04437;?INKORTMJHGFFFB=?CDBBGKKKKHEC?720137<=?????>:78<;8=HHED@;9:999846GI73305;=:4566<A=6201122343038733899;<7-**''*./,*,,+*((()*))*(&$&+-4;87@H:,*,*''&&&'(-6AEI]itfKR__]K/30--0117<>87AMJHGC>=<94225?HMLG=6;>;768:<CKMOPA+&((&)-/.1@JFA?7)=bjea\\[^ZME>:9:?INKKHGHJJB9697664135414EXckpj`\\_VKJLNH<8667AJ=.15:@8/22-/658AGJJE=73100/----//0/..3456753468840-,,,+)'+?H>?QSWoXWWXYZYXZ^baTFJ_bWch[UUPNPONMOQPPPPPNPQPOPQQSTSSSPOQUVUTTSVWXXWXZ]]WPOUYYSNPQONOOONOPQQQRRRSSSUWY[___`abbbccdedcefeed__a_[VTTRQRRRQRRRQRSSSRQQSWYWTQQV\\_ceffggaXQRRRQRRQQQQRSSTUUUWWWX[bnwvrqttnnrrprtuuyvndYVZ^]]^^^]ZWVVVWZZYYYZ[[[[ZZZZYXZ[[\\[[[ZXY\\adlnc[YXWX_d`_dkosrmhcdmrwtw~xfeddefhlkhdabffda\\[]bcbba\\[]cd\\[[\\]\\\\[]\\XYZ^mpmszoagghrkirka^bdcbbcdcdeggkmkhcca^i{~{~wu}yuh]Zdgefc_jaUUTRRUWVU[pzxzwow}{sqqppopokgkuzxz~yx~~|prthZYXZ_bdeeilf`_aoyz}mVtAuԒk]PHNUWWQKSgOJhgRKMMQPImZFLIKQ_hc`\\VWWWXWUg{kcUORTW[Slv\\YX]\\]djmjPNYc]Z_flrpfWQqGRUP\\pQMYjtp_TXRaͯ|\\RUYXNb]WV_XLNQSVWWOKNPQSY__]dmZNQVc`a\\\\ZUV`bWU`eu{f`OUY[d^URTUTTWXYZYYYYYYXWUVWXXXURQTVTRQSY\\\\djaUPTVVTSTSSSRSRRSTUUUVUT^twdXX[ZXWXYZXTYbbfec[RQTTRPOOSaicXUYYXRGYy\\SSSSSSSSRRQMJLNSVUUSUUW]SKQPkeFMQPQSTVVQMNNONNMMKKIIIHPbnmifc_ZWTTVVWZ\\\\[YWVVWXUSQUUPLPMGFGHIJLMQTUQV_YSRPONMMLMNNMMMLLLJJIHLUVTTTTTUWYWTSX\\^[ZRIFEEEEGJMT]]]ZWTOLJIIMMNOQQQPPQPNKHFFGHIKMMNMKIILMMMKF?;=@ACCEHIHHIGHIKMOOPQQRQMJHHHHJKLOOPPNMMOPSTTUUVVVWVUUUVUTSROPRSUTOMKKHE=<BHGB<9=FFGHHHIIIIIJHGHKKIB<<><<=>=?BJOF<<>??;Eq|un\\ENNTbkZ>f͕KN^UHBCDDCCBAAEGGGDEC@^`dh[LFGABA@?>>AEC@?=?DGNPP]XC@CBAAAAABCE;=9CknVV_kdZG8EL>556557?GNNC4/28=>61234?HHHIH@32?@>>@IM89G;AB@@8=_O>Qf\\eM:Ks*+FU?Fhvsno`>8C8.023BPSKOf^GH@=?@?ARO=@A?@B?G]h\\UX]dmundb`LCGHFA@BA<87878;<:3--///0028976554568<>@FKE6/--..-.2669967<@EFFB:9::9889:::;96:B8),87//10486249=<946DJDDC<<=70++4;?@BD@:CKDAHD6-*074-,+,.,.7>=78=<?DCAAAAAAA:5<B>;<<<AC<41430-.17:;<;9998:<8<IIHEA?<71./.--/0342138<;7531/0550+)-126<CLNHIQWXPLIHFCB809FFCCDIIFC?:;?=74358;>?????><;;98;GPMKJGDBA@>=;45E>+4;4377:8776@@4,,/226:;6-*-./148:;;8/&&(&)11,(),--*'()*(&(+)&$&,:A@805LT<.,*('&%%').>B?W~pl{wqdF2-..1359<>;9CKC;=@@A>7011-4CIFDFMQD2/4656@LQQK<1.,*''*-,,7EIINE.->85954466558;<@JQOOOMMNI>4123664112200>FF`saV`g_LFGHGBBCC=;4+1857:3153,,326<BED<73-/30,,,,-/00/-.589::41499410..0/+)'*43.>RTUlYXXXXYWUUVVQJEGOQKS]YRNMLKLNNOOOOOOOOOOOOOPQQRRSQPPQTTSUUUVWWVWYZ\\][VSTW[YTRQONOOONOPPPPQRRRRSUVXZ^_^`abbccbdeeefiihhd_]^\\YVSQRRRQQRRRQQRSSRQQRUZ[[YVRQT[cefkpncYRLMOQSRPPRSTTUVWXYZZ\\]bnwrjnvpbaimpsruvux{wj]WV[cdceea[XVTUWXWWXXYYYXVVZ[VTX[ZZZYYXWY\\]^lug]^ZVW\\a_\\\\^_`ciidbp{v~`[ekpwym`[]hssmhcceeda\\Y\\egge^\\`_ce^\\\\]^^]\\[[YZ`\\h}{uzlX`ciuy~ywwj]acbcdceghkomkjjebk{~~|z|vmZ^ljcdc]baXUSRRSUVUS_t~||zrny}{}trrqqquwrlmuy{{xh]cmoj`dfaZ]\\\\^`dfgjnfaa^l~zvtzz|{[A˖nXOPY_ULIWb~ENTTMPLLONG`tOGMNNJQ]imbXRNOSXDpq[NLNOPQSYeTGNU[[^aavs]W_]Y^jqhjvncOzBZ_WKLXOSg~[OoeP̞cSZ^WTVPSn^WOVSPQPPSSPPPQRRSTVY[agVNQU[[c\\]\\X_ikegkqv|}fR\\\\ZfaVSUUUTWXY[ZYZZYZYXWWXXXXSQOQSUSRSY]ac[VUUTTTSSSRSSRSSSSTUTSSSSSXnr^WVVUUWXY[^eog_deYQRTTQPNPRV]ebYXXYWLQwwWSSSSSSSSSRSTLGKOSSTSSUWZTN]SZsvTOPRSSTVWRLKKLLLLIFGHIIL[qukgeb_[YVQNNPTVWWXWWWWWSNOW[WMGEGHJLLMNPPSSOX^UQQQONMMMNNNMMMLKKJJJJPXWTVVVUVX[WSSZ_a]ZSKGFFFGHJOZ]][YWSOLKIIMNOPQQQPPPNLIGFFIJKMOOOMKIKNMMLID?=>ABDDFHIHHIGHJMNNLMOQQQNJJIIILMMOONNMNOQTVVVVUUXXUTUUUVUTTRNOQRTRMLLLJC?AEHHD<9@FGGHHHIIIIIJIHHHJKE=>><<;>BKJFHD;:<?EGEah`KPKRW\\L98jٻkI[YLFGIJJIGEEIQXWOIDDehgmdRFBBA@??==AGFBA@?ITTNWkgJ@CBBAAAAACB=>=<[hHNbh^SC<5:E:74457;BII>4149>:2/159@DGIJI9+2@A<7;KL82H=DB9737or`mgeF)/lv?9BM:Bk{qtlQHVSD63;KVVSTh]?BA?AAAFd_=;DCBDHMWd`WZ^k}ztc\\[KEHGFEGF<5335459=:2-...----.155444558;<@FLKC:64111-.1223438@GHFE;9><:876776657<>9+)02122259648>A?>:8?A==@>:2+)(/<CA@HKC?KPIJF5*()5=4)+1320.3;@<745>EDCCB@@EGA:=A?=?>;@@8.)*-0/.06=<==>>==><68CED=:98:845421222100//59654433540-+*,14;FPK>?PXVLJJIGA5),>IIJGBCA;8;<?AA?;89;=>??>>>=>=<94:ITRPOMLJIF@<724<8+3;61202:;:9>:/./2568;91*,,(&)/45661)%'''-51'&*,+)*')+*('(*)&&(6II<;5+4QZC.*)'(*/202@?1;`tvoilcD*'.02679;=CKNF<=DFC;4-+/15=EKJEJUM4-4623<DHLF;6312-&&*,,29@EPRB0-()(,/,,+,.378:@GJJHEC@DG=-((+4301257569<_jHHbi\\FEHA=@FJLJH9'-6-1<6463-*-+036@@;86.,.+*,,,,.01/,-49::65;AA5**/--/-*)'')+0?MOSkYYYXWWVSSSQMIJLKKMMPQQOMLNNOOOOOQONNNOOOOOPRRQQQPPPOQSTVWXWYXWY\\\\[\\]]ZVTWZYURQPPOOOOOPPPPPQRSSUVXY\\^`babccbcdedehjjijjd[WYZXRPSSRQQRRQQQQRRSSRQSVZ]^]WQQV_glqspljaQJHJKNOPQRSTVWXY[\\]__clqnilojdbejllquvtux|zqg\\]`befffd_\\XUUWWWWXXXWYVUZ\\YVUW\\[YXY[[\\\\Z[aecaa^[Z[\\\\]\\[\\\\\\[^msy|ptgT\\dhu}q^]jsrlknmfcdc`]XV_hidcszkbedcbbcccb]^glruyv{kakoyo_dhefddfhklnnonebipqv|j[fnheghgfb]ZXVSQSTTRS_r{{|ztpruyzwwvuvy{yvtqt{q]TS\\a]\\^__^_``abefgglkcaep~}}|zwrfrx}~hUrCyn[QMNRTPNNQOucAOLJLMMMMMBzwGGMNOOLWii_[WQKRWHslRLLOPQPPMimLLLTY]^__^lngbV[eqws_[mmdOvzMindZKHمGQSfҠlQsѦc}U^j`VSUVUOx^cXRQRQQQQQPNOOPQQPPPRV\\_UNQWZ_ZW_``ehfhomwrvo`_\\Wgf[XXWVUWZ[[[[[ZYZZXXWXWXVQNOPRTTSTX\\`]TUXVUTUTSSSSTSRSSSSTSRRRQPNRbswrf[WY[]_`fmrpdOQVSUUTSRRRQQQS_jeYVXZXTmoSTTRRRRRRRRSVPFCIPRRRSUVZUOYTRi}siaSRUUTUWUNIIJJJKIGGGGGGUnwld`]XTVWSKGHLPTWVVVUTRNKMTYYQKEFHNPQQQRQQQN[\\SQQQONMMMOOONLMKLLJKJMV]WUXZYYXZ[WST[bc_[SNIHHHIJMVa_]ZYVRNLKKLNOQQOPPPOONLIHFGIKMOPOOMMKNPNLJGB==?ACDEFGHGHHFGJMMLJMOOOPOJJJJKMNNONNNNPSUWXWWWWUUWUTUUUUSTTQONPRRPMLLLKF?>?@AD;:DFGGHHGGHIIIHHHFGMKB;;;<<=@DSP?>><;:?JNR[pvhOQIT\\J;ALJpߞPQWLJJMONLHEEFO]f]L>HlwsyqZFA@@@@A?=CJJECA=P`VX`mhRAAAAAAAABBAG?=;AOCLfk]UF=1396422358;=<9855:;50036<@DHIID2*6B=93=EJ:2<9<=73,9{~faI5-G{aFCD;;NivwxqcUTWN76Q_]YPLe]=@GAGPICeb<=HHBEMROW]XWXf{xyxnc`\\LIJEIRN>.,/23218?:0-../01554567633369747<=<:8767982./001302<GJGG=;A>;977776536:<>8.,255467546<CGEEDCC>99;:4-)*3>B=8@NMCEH=>G8*,.6BF>/)3843579>?<8:DIIIGD?<DIB;=?@DA79C>52-*-5:83/6;=>??<89:9:8864249999;=;74421111.-04567530/230+,0.1?JE51CSSLKKIG=-%9PTRPH;6;?ACFFFB96<???????>>?>>=745<KUSQNLJKI@855677/.4610347876630147889:3-041,/112222-'&&(*04/)+121,,,+,+*'())',:EE?<<;864H[I75547:945;7,*:dspqssb='+-04589:GUXPGEFFD>;733886:FNMKHA9663/3<@EHB>91396+(.10238>@DD7130+.2,*),1356778>>6.*,7HMD4)&),,),4;61=IMD7GbjW:=G:/8BHJKSM0&-))5646876521.(6DC?<60,$&**.1211.,,18:66:AC:*%*-***)('&'(+1<DDNpZZXWWUURQRSROMMMLNNLMOQPNPQOOPPPPONNNOPQOOQSSRQPPQPPQTUUWYYYZXY\\[[]]]]]ZVTVVURRQOOOOOOOPPOQQQQSTVWZ]bdccccbbeeddgjiiijhaXXZWSRSSRQQQQQQQQRSTUTRQTWY[^][XW\\dikkkoph_ZQHFIMOOQRRTTUWYZ[\\]adghhhfhkmnjbdrxutvvy|{yqkc_aefffecb^UPTXWWXWWZ\\ZW[a`YTWZZXV[^\\\\\\]^`cddb`__^Z[```inaa~jczy_]eciurmpvoheekpnjid_\\VUZeienphhiighijjknqy~}}{enukhgfeeinkgkjcchjjqym}fYeljilnpoga^ZYYVSSTRQZitwyyuquyuv{|}{yyzz}xsytZWYY[Z\\^]^_acccdeeghlmd^cilrtw|tclz~iTMTPFMYRMNKIJIJLMNNNFhSJPNNNMMKKLDIHMNOONW]X\\b`XOPOMiWMQPQRRPOLO_MJ\\hbaa^]bciSd]du{q]RTilhOVƈNeolg^FNuqpHTHRڞcyȥggfulPSYXWNoZ`TRQPQQQQPPPOPONNOPOORVYSRZ[dfXYTU[bfX_|lxcRZ\\Yfi_ZZXVUVY[[[[[[ZYYYXWXXWTRONOQSUSTX[\\YVWVUUUUUTSTSTSRSSSSTSRQQPONMP]mxvi]Z\\^`bcfda`PMRSSSRTTTTRPQQWch_YZ[\\VjgQTTSQQQQQRRRTTMEEKPRSSTUWUKOPTnwljj[SUUTTWWNJJJJKLJIGGGGGJZntmd]VSTVWSNJIINSUUVUSPKIKRXWUTOIJSSSRQRQPNQY[RPQPONMNNOONMLLKLLKKIQ]]XY[\\\\\\\\\\ZWSU\\deb\\TPKIHHJLS]c_\\ZXUPNLKLMNQRRPOPPONNKIHHIKMNOPONMKMPPNLID?==?ACDEFGGGGFHJLMLJKNOPQROKJKKMOPONMOPQSUXYYWWVWVTTVVVUUUSSSQNNOPPPNMMLIDD:6:?E>>GGGGHHHHIJIJIHGFHMIA:9:;>AGJVS>;::;=EOLOWZgdnlPUQMLHA@MO@nsOPJJLNNOLEACCGSb`KBGhwzzePC@??@@A@=CKLGEC=NcW\\gjXK@@?>?@AABDAGU[YUVTS`g\\XC524110001357789:77:742247<ADDFJC22@E<639<H=3554435,<r]^UC20LgSEOID;9PpxvtpdUND3:U_`\\C>_X=@GCGRNEVT>AFGA?GQPPUW[_^epxsggkaOLJHNRC0*.35413:?8/.../05=>:89;:3147830243/./005;=90-/1/0.-8FKHIB@EB>;9789976668>@:9987666213;FOPLHFC=632/-,*-:FD;5<KL?;8-4>/'+0<KNMB-+348><:@A<;AHLMKGD>8=C=8;=<C>/6E?6683/7C?5-09<===;8::;;50-.-2986:@C@943222343.)+29:86129:5.,-)*7B>0)7JPMLJE?7./D]_ULC3,8DFHHHE?65=AB@@@???>??@?81/0ARVSLB>DGA:99865.,2420131/1322213:957855:903AC82465.'%(+-23//4877511000-*))()8JG63<;;>>;7D[WE>>>;52293)-5=IdvyzusR,).042204GUSJGHEBDDEEA:97447=HI:39=8446<?A?;97419711222/02831=KE3-/--0/*,579:;:9<:3-,134:DGA=:30/+,/.5DD1,3FcmU95;5+.8AFEML2\"%&&),15:??=:3(*;CB>??81*%'(-5730.,+06747964-&),))+*(''')*-4=?@R|\\[YYYWTSRRSRPMLMMMOONOQRRQQPPPPPPPPOOOPRQOQRRTSPPQQQPTVVXYZ[ZYY[\\]]\\[^a_ZVSRRRSQOOOOOOOOOONPQQRRSW[^_bdcbccbdeddfiiiiihe^WVURSSRRQPQQQQQRSSSTTRQSUVY\\]]^__^YVY]a_Z^jk_VOLLNPPQQPQSUUVVX[[\\]][\\_`djdY]nusswvvxyzz{viacgggfghg`VTVVVWXWXae_Z`eb]WS[aTVZY[_`__cfeeffed``cdelvvx~saduxjhnZ_efhkvqeeddgikokbZXXZ_linsjgihhgfghijt~~z|~~|ztiuwrpmjhiikjhhiggjlhltWinY\\gkikmomid^YZ]ZTSTQUdoqrvywuuupn~wxxx|{yzqWSYYYZZ]]_`bdedeeehnkgdcheVbiuiegZHDMOPHHUZVOLKKLKJJLNNJ[aSPRRQOOMLMLJmJJLMOQSWWYdieb]OJNXaPMQSRSQPNMMIJ^z|ia\\[ag^iuJ]ovwo^NMVokeZEUVaggg`OY[YRRQXୀď\\kvZV\\ZYLnoZXQRPOPOOOOONPQOMLMNNNORTST\\_haWXUVW`bTkÄRifQS_`gl_ZYXWUVXY[[[ZYYXXXWXXXUSQPNMPTUTUX[[WVVUUUUUTSSRSSSTTSTUSSQPPPPNPSVbmvug]YYZZYTLQ^USVTRRSTTTTRPTWUX^`^]ZYP`v_QTTSQQQQQRSRTUSLFINRSSTSVTIIMVjsj]WWTTUUVWUNJJKKKLLKJKLMNLKVeifc_\\XV[]ZTMGHPSSTTQOLJLORUY[WNLPRRQPQOOKOYWQQQPONMNNONNMMLLLKJKLW]Y\\a_^^_^\\ZYUU]fge^VQLIHHJP[cd_\\YWSONLKLMNPRSPPPPOMMJHHIKMNNOPNNMKOROMKGC?==?ACEEFHGGEFJLNMJKMNOQSTPMKLMPQRQONQRSTWYZYXWVUTTSVWVUUUSSSQNNNOOONNNI@?F;8<BFBCHHHGHGHIJJJJJJHHIKI>9:;;@FIPVR<;<=BLTZIEJKNQZ~nLJIGFEFGMN=3Χ\\ILSTOKMJC@ABIS]]PF@Zqm]F@BBA@@AA@=BLMIGE?GZXWdaI@=>>???@@BE?CfzzxtxldaYN926=>=<:401368:<=;::976766<AA?CHC8=GDB;217FD033/-28-?{wb\\aX=1/17<>GJE;9Qmomnpk[PG;<LVZL8EbYFAADMRJCFE>@AB>:?JOPRY`_MBWqsdfnaNJKMOD4.1687427>?81/...1:@@>><>>8.3:855421/.--.2:=;4-01//,+6EKHLHDFCA@=:99:::866:?EID9444310.5GTTI?<:8651-/203=DEC>>C@6654:=1(*-7IQUS;(+5?B==GJ>7>JQNJFC:37=;79:<EA27A=63;<39C;4,.6;>>>=<;;;:5.+*(17639DH@8433323442.)-762238<;5/-,*,5>;.)/?LJJF=63//?Y_PDB50@CEGJG@:8=ACB@@@@@@?@@@?;2-/;MTNA65?FA=:4366314420.+)()**/2/274/01473-+5C>313794*'),0234588657554451,*('0AF;35:<<:;FH8?XS:8;4--03-(1<4#*FVWhqinpkfL/..,..)'7LPJGGECGKMLE>=:3.11.00+,5<:8979==<:873-//.2430-//24<EPP>54,/??0'--0;???@@DEACD926BKPTD640/-.@F4+205Ri]B1+--,0:GJC9*&)''),049<>=:7+0>==:@A=?;/)%)3;83/,+.24572,,))--(-3-)+,+),36:=@Y_]ZZZXUUTRRPNMLLLMNPPQRRRQQQPPPPPPOOPOOQQPPPQSRQQQQPQSUXZZ[\\[YY[\\]^^^^_^_]UPPQRRPOPPPPPPPOOQSRSTUX\\[X[_`aabbdeegijjjlld][WTTRTUSRPPPQQQRSSSSRRQPQSUWXXZ^bcaZRMKLNOUbmneWLKLMOPPPOPRSQQTVWUTROQQPRVUTX_inqtvxz{y{}~zoghhghiiijhcZVVWYY[djha^adgcWUXVUUUWZ\\^adddgjjihhffgillk~pu{nejjb`m{oZZfjd]gi`bcaabgmh[WVY\\fjifddfddbdgfeo~yswyu~{uflnkprtsspjijklplkkklnifvkU\\mm^Z]cdeijghe]YX[_ZSOO\\mtrqtyz{wrrqt|w{{wuwtspdWSVWYZ[\\]_`dfeefba^gjcdmyuTWdkveooLFLTQQTWRNLLLLOUQLLLLOSRQTUQOOMLLKK[OIKLOSSX]cglb[ltg[VYY[USSRRQPNMNHbrdgXXho^^tTet|ygRPPT~t[Du[SZ`beph]Y\\XO^Ѹis}^PXO_uXUQNOOOPPOOMLNPNMMMMNNOPPOSXeqc__\\[Y[[`o]kmXI[dem\\XXWVUVVX[\\\\[YYXVXWXXVSRPONMOSUUVXZYVUVUTTTTSSSRRSSTUUTSTSRRQQPNORY]cjqqg^ZWVUSHIWTJQTSSSSRRRRSTY[Z\\^^^ZXMNX[SQTQQQQQQRSRSURPJLNQRTTTUSGIKUq{hPIOSSTUVWWSKLMNNOONOQRRRRNJNX_`^\\ZX^b_[ULHLQRSRQOLLMKIOUVQONPQRPOOMMJO[TRRPPOOONNOONMMLLLLJKT^\\[dhc`ac`\\[YUV]fgg`XQLJIJOZegfb\\XVRNMLMMMNPSSPOOOONMKHJIKMNNNONNNNOPNLHDB?>>?@BEEFHGEFILNLKJMNOQSTUPMKNQRSURPOQSSTWYYXXWWUTSSUVVWUUSRRPNNNNNMMKIFB<=;::@DDFJJHGGGHIJJJJJJIJJJH;7<??FHIOUN:;?IU]aa\\RGCECCV~hE=?HIJKLJ@;8C̏PIZb\\QNJDAAAKZ`dg\\GM^I<;BEBA@@AA?=FQOIHFDFMUTWVE@<>FEBBACCB@No|}cQ:34;KUVXN901468<==<<<;;;:88<@?=?A>=FJFJ?637DG41102<?/;py`JP_]L60136<7;>:48Nabdghic_]SILVP>F^`LCE@FTK:==>=>@B?;<@DFHORJ;1:L\\ahhXEFMQM>679::821;@=61/./028=>EIB@CA22;>:63111/-/038;=820101.,7FJJKLHCABCB=9::;<;:::=GNI;0010/0.0ETPD<95434568::=@BDGGGD906:69?9,,-3ARYVF99;?ABFOSD65COOIB<736=>735?GB97<<847;9@B4159<?@@A@=94362-*)'.675;HI<666655554462/43*)0577520/,-4951//:KOF:2.1-&,DTL?A>=JIFDFD>73;DFECAAAA@?@@?>=7//9KNA4,.9EC=7-,7<;77630.,+)''&(,/12.()*,-'',460-013::0('*0347786446768864/*%%1=848;;=A<8@KI7:PM3*(&'*)%(2=8()41+-8MVVJDA?6/20010--?PLFHF?BLQMF><@@8278/)++-4730026:?BD@1'&'(.683524:56@DIOD<:/=E72/.24776;AET]RLNPPF@GONA1-3:;=FF@BD?66FRB1*+0./6EK?/%,61,,36449??>?807;:8=>>DC8/'\"*9=82,+-./6<71/))/)'390/55.(1<DD??hb^YYYXVVTRQOLKKKKMOPRRRQPQQQPPPPPOOPPPPPOOPPRSSSSSSPQSTWZZYZ[YXZ[]``__^__]ZWSQRTQPPPPPPQRPQRRQTWXXYWVTVZ^]\\_cedhkmmmmnkbXUVSQQQSQPPPQQQRTUUTSRQOOQSUWXZ\\_abcaZQKJLPRWZXQMLJKLNPOPQQQPPQUUTSRQPMLMMNRTT[jnip|{}||~vokiijjkmonhb\\VTW\\```a^^glni\\RQSSTTWZY`cbcgkkkkkjjjkjem{ztx|}}slkfa`dc]\\bkolijwvnkmolhhhkj^YW[^dfb_aa_`bbcdcj{}rpuut|{{o_mrntttstqimqstqmmnoqohk_\\\\Z`]]\\]^adeefe`XSV][UQVisstssw|~{yzxu{wzztssqg[\\[WXXZZ\\]]_aegfff_\\Z^fkfg]Q_dgtx{poyRJP\\[UURNKJJMS]WLJKKKNMNRRONOONLKJHGJKMSX]epuxv[Qr~d^f\\]YRPPPOMLOIhguZQh{saQ^b`rxxscU\\^TsXGjp]Y\\^_`hplcahP֦|~lnӻj`X^c\\[RPPPQSRRPNNQPONNMMNNMOOTUNin``_]\\ZfspmhclYKOVZjXTWVVUVVWY\\[ZYXVVWWWUTRRPNNNPSUWWXXXVUTTSSSSSSRRRRSTTTSSTTSSRQPNNOQ_jeeolaZVUUUOLPPLPUTTTSSRSSTMUc`\\_\\ZY^OFG]ZOUTQQQRRRRRRTQPMQUSSTTSSOGIBNcKLNQRQRTUVSKMOPQSRQRTUVUSQLKQVYZYYY_b^\\ZTNMOPRRQOLMLJGHOQMOPPQPOMMLLKS[SSRPPOOOOOOONMMLKLKJNZa]bjhccfhb[ZYUV]eheaYRNLKKVfnlhc\\WUPMKMMNMOPSRPOOONNMJHKJLNOONNNNNNOONLHB@>?@ABCDEEFEFHJLKJJLMMORUVUPLMORTTVSPORTUVWYYXXXWWVSUUVXWVTRPPNNNNOOMMKJIH@8889<>AFJJIGGGHIIJJIJIJKLKF==FHFGFHMQI@DNZabbad]NLH?<=PQB=CHMNNND;9;>dTEZlmdYLDBA?HYapytcUF48AEFBA@@@?<=JTOKJHIIHIOXVD@=@RPE@ABAAFcgnfI.459K[ceT7.2467<=>>>==<;:989<@?;::=HNIIE<5<BE5017AHD32AD9.8II>61137=CCA><<LclnpuvyrldXSXVOVaXDBIFIOF<<<<===ACB?==>:7766522AV]UH?AKRND?=;:94.0<@:51//122468DOIEEC:59<8101/.-/0037;>:50./2117DIKJHA?CC@@>;:;<<<<<;:?DB;3.,-,,,,8B@:7986227:<>?ACEGHIMLB75931;90016CTVJAHRE6>NSVL<858ENI:0124881+,8FA57=<8577?H</8FIHFB@BA>94/1.+)**,4:<?FA53899<<;:8443.04,'.3455432/.010156<GF:1--/,%&8ID6:ACKLJD@@>:48BGHFDBABA@@@@>?<409FB1)*+4BD@>96;>=:963-)+130-*()-0/,*++,,,0343.,/34794,)+256789644689=<874+'(/454426=B<8<DIB36NM.#'(((((/62+171)&#/;LE(#(47><77756EL@=B><EGHHEGGFGB?FIA86881-+*,26998:9501..146486:<12357<8/0<E5,/0/23-)2?HR_fXC<AORD42;/&%4BCFHKW]UMJ@6566300019BC?9,0>7.*0;803?A@A:.28;44:<CB61,#\"1?<2)*-+)4AC@7(,2()5736=:+(A_kdSGr__ZWWWVVTSQOMKKKKMOQRRQPQQPPPPPQQPOOPPPOOOOQRTVUUUURQSUVWWVVZZZ[\\^ab`_``^[\\]XRSUSQPPPPPPPPPPPQSUVVVWXUSUYYWYacaejkloqoqpbUTSRPOOPPOOPQQQSUWVTRPONPQSVXZ\\]]_`bdb]RLLMLIIKMMLJKLMNOOOONOQRRSTSTTRPONOQSPRch[`yzx}~{zwqkiilmlmmkh`VRPRQSV[eolinl_TOORT\\]X[\\\\]adghjiknmmkgpyvxwvxxlllc]]^_^_huzl^biqtqrwrlprh][[^aeda^___`acba`lwldowqx}mvnhoorrlgjmvxjaqtsttrtogxiT[^^_\\\\^[Z_bbddc`ZUTW^iqsyzuxvry{{{{|{wz}wu}{rpqpqj\\]]X[\\\\[]^]^cfgfie_Z\\^]hheyhP`fgjr|ullwwZScilji\\OJKKMPUOKMLKJJHHIJLNOONLJJIJJINWiudXrs{f]wnc`RMNMMLKJKRdu^MdwubPKWisoc^]^ghUVf{\\Pelc]^a`^\\dpnhdX߿ߗ`xan~zztn\\WSQQQRSTTTTTTVVTPNMLLMOQQTP]peZ[^_ael~|b`yhqp[OMNQhYSVVUUTSVY[ZYYWTVWWVTRSRQPNNPRTWXXXWWVSSSSSSSRRRRSSTSSSSTTTTTRQOMLOgogejjb[WUUTRQPPORUUUUUTTTTUPXnsmmcXWkcNH`cPQUSQQRRQRSSRQPMW^YSTSRRMEJET}tXJNOOONMOPQNJMOPSWVSQQSVWRNLOZ[[ZYX_iga_[XSQOOOOONKLLLJFJTXVROMLMMLLLLWZSTSQPPPOOONNMMMLKLJITdcajlebhmjc[ZYWW]dfea\\UQNPSalpohc[WTOLKMNNNOPRQOOOONMLJJLLLNOONONNNNOONKFB>=?BCDEFFEDFGHIIIJLMMOORSTSPMNPSUVXUQPSUUVWYYXZXVXXTUUWXYVTRPONMNOONNOLJIKE<8998:>FJJIGGGGIIIJJIIJKLKHFMTQH@@DGHEFP[``_^^a\\NOQKF8;DA?CIORSTE=B>I`kpXGQ^dg\\MBBC?DOaw|zt]=8?BBCBA@@??;?NVPLLLLLF;FXSAB?@ZeY@;CDCHYQUoyW>0855?Ra_I1.2467:=@@@???=95447==98:<ELIGD<57;A70/9FJF:0-1336;<752435APPOMGBM_pz}wkb\\XX[ZUVTNMORTIBEC>>>=::<?=<=?821112319IKFDCADMNGBA=851-2<@<83,.572269=FGFDB@>=841000./0002379742/14666=EIE:27>96<98898778889555572,++**(*-5:89AGD@@=:@DCEINPMPRJ=550/43225:IQIA@ITM:>TWK5,48<FNF3.12661-+&+<:-3=>8478>D9<?FEED@>>><:830.,+-/.4=@@B=32689>@?>9.+,*+23./4423224311101;<8=910471++1:@8,1>BCCB@>?@A=;AFHHFDBCCA@@@?@?837>7++-+3@CCHKF>;=;973/--5=<5/,,.0.-0256678688/)0841571-.57999;8338;<@>;96/+,/394+&.:?;9=??<4.1GN2#'02-*-0.+040,))27AQ4&(.:F@520/6A@43>?>DB>DOVPCBEHPRLFBB<1/1224689;?EEA>:666:==:;;631148633DB.,(,-180'2<EYffU6*+6JO;*4/+.6>CFMX`gcNEMD++:82/14?IGEC97>7.'*53+,7??=8025;418?D@79>5&':B:.*-*%-@JH<055(*478:?90Fs~wbOfWZ\\YXWUSRRQOMNNMLLNQQQQQQQQPPQPQQQPPPOPPOOORTVWWWWVTRRTUSSSTWZ\\^`aeedca``^[[ZVTTTSQQPONNNNNPRRSTUVWWY[WUVWWY^_]_dedfihghfYOPPOOOPQPOOPQRSUXWTQOOPQSTTUVY\\^^]^`ege]TPNKJKMMMKJKLMNOONNOQPOQRRRSRPPNOPQPOW[RRdojgqz|||sollmmljimmg`YUSSX`jqnklnof[UPVih[WSTXWVYac]_jtojjouwyysu{kkni_[]``^`adb`bfimjiqrlid__]cw{nikkjieaaaa`^`eeiuul|vdbqvzzprrpm`fnj_Vgrttsqrngp{ZVYW^a[X[^\\_b`bcb_\\ZWe~{vxvs{{x{}xwwtxvknonppga_\\[]^^^^^_fggdihne__Z_ijg~{[crrmsvjecZ^_ZewvuwgRJJKKKLKILLKJIHGEEHJLMNMJHIKLIHLl̡wk|yV][QnraQKMMKKKILH\\yVi_MYk~nPKTeh[RTZdu}lUTlY[ppf`dhe^X]ipnbdŚnr~wpfߢmiqs[OORRTUUUVWWY[]_VPNNORSTUPPid[XZ^cilhpfQNkwiq|_QQRQdbSTTUUSQSY\\\\[YWTVWXVTSSSRQOMNRTUWXWVUUSSSSSSRRRRRSSSSSSRSUVXWUSPMKVnjgmjih^YVWVTSSRPSXXWXYXXVVVUXhqpqgZVgsYMfiQMQRRQRRRPRRQQPSbdWSTTSQLFMNUcULLPOONLKJKLKJLNORUVSNLOSURMKQ^``\\XXcrpdfcTNOONMLKJIJKKIDGU\\YSMJIJKLLKMYXSVURQPPOOONMMNMLLLJL_idfnkfjtsja]\\YWY]adec^WSRXcmpoojd]YROMLNNNOOOQPNNNMMMLJJLMMMMNPONMMNOOMHDA?>?CEDEFFEEGHGGGHLMMNPPPPQQNNNPRUYZVRRUVVVWXYYZYWWWUTUUXXVTQPONMMOOMPOJGGJF?<<;88<EJJHGGGGHIIIJJIIILKMRZ[TG>?A??AGQY[YXZ\\`[JEMROAAB??BKPVb_E=?CJ[]d]JEGKPNFCBBA?F_x{{rR89?BBBBA@???=@PZUPPPQQF6ASMHMC?]ywR<CGDC><9H`snI=<:526I]X@/04567:=BFGCBDA91123686689;DID>9778>6//8BHHC959=??<733467;FNQSRHCFK`zyqg^YWWXXUTSSROUbTAEE?@A>;89<;:<=;79853359=CFFC@<AGDAD@84303=BB>5+,7;309@>?BEEDDD@:55431111//112345767:::67=C@85770.67752000025746535742455856>CCCIPPNKC>DE@@DNSUTTK6-,-.,-/02;FG@@CGLOGGTM5)*3?KQSG21::>?;97-)14/4<=979889?EC:468655589:500025724;>=:865679<?@@9-)+./164043/..03543543;:30/-3>C8-.354/))5B?<<@CFJIEABFIJGEDDDBA@@?@?;89:5330,2??<@GD:9=;6421114763/,*,-+*,/48;:77>A5-4:4-2643358;;<;8237<>?>9432.+,261+'+5<:;<<7331*-CK5$2;0*,,,-/0.-*&-85LE()+8IJA?>720.,2>A@C>9?IPMA<GWXKGNNH=6=C?::=:6BONF:546<@DBHOHC?=;::9:;<BB<3+.15<3.++2G]aM1,++9D>1.2599@A3C\\]dhR<=@1/;93..9HOOLF><<6/('**(*1;<976467449?CC?AHI9'0>>5,+*&)7ACA=8/&'19;<>8Cjuj\\ST`OSXXWWTPOOPNMNNMMMNQQPQQQPRRPQQQQQPPPNOPONPTVXYZZXUSRQRSRQQRSUX^bdeeeea]__\\ZZYWUUUSRPNNNNMNQSTUUWWYWWYXWUXZZ[ZZ[\\\\YVTVVUUTOLNOOOOOPRQQQRTWXWUROPRRUWTONRX\\[\\`_]`ii_UPOMLMMMJJLMLMNNNNOOOOOOOONOOMNNNNONONLNTXWU]fnvwsqvzxurnllnlkmnopnkgeghknmljkklifXUruec\\WYUPPU^\\Yahhfecips}nion`Z^bb`]\\\\\\^`bdgghosobWZ_ftnmmmlf`_^_aadlrwyvkzznd``qr{w`[\\`]`hnpssqlinwa]_ZSX_YTX]ekkfa\\\\]\\Ygxvwut{}x{~yxphmnnnnjfdc\\[__^^`dgfedfh~|kc^[cqcivknqqqqig^V]eYOVfsvwwiPFIIIIIIGHKKJJHGHHHJIKMNKIJNPMID]ᶒy{jNOQHV^NMNMKKKJMUWQ{sMY[OTWusQHS]\\TV\\[\\m{alYcztkiovreZZ_imu๗yԧeficrveUTSUYZZZ\\\\^baWRSSTUUWVPY`Xcd_bhppihZPUY~q^cRSUR[fSRTTURQQW]^\\YWUVVVUUTSSQPOMOTVUVXWUUTTSRRRSSSRQQRSSSRRTWYYYYVTRNKZnjmskeicVUWVTRQQRTX[[Z[Z[YXVTW[YW[][WW^PRkaLLNPSSRRRQQQRTQZnaOPWWQOPLOMMMLMNPPPNLKJJLKJLMNOQRRMLNQTQLKPWZ[ZYW_mqgflVGJNLLJIHHHIHEFKUYXRKHHIKKLKNYYUXWSPPPOOONMMNMLLKIUifdkqnnx|sha^\\[YZ^`cfe`ZVXaotspomf_YROMMNNNOOOPNMMMMMMMLLNMMKMOQONLMNONKGB@??ACEFFFFEEGHFHIILMNPPPOOOONNNORUZ\\WTTVXWWWWWYZXWWWWVSUVVUSQPNNNNNNNQNDBBCA<>@<99:CJKIGGGGGHHJKKJIJJIMW]ZRIFE@;;AFMRSSUZXVNE>@FLMJC?>HOQXedJ>=<AEFMQHB>BEIKHD@C?D^vzwhH79?BBBB@?>??=@P]YURQSSB4M\\QTWC@]i=C?DA646?VvmHFIF:415J\\T=/298878=GNKFGHB945533444642;D@;87<=@31/5@FII>67@B<8335578>FGILGDC>@]w|tjc[VWWWUUSQOKN`dM?>=>??=:::9:::;:=>;52478@HIG?:<BB@BA:8722=EEA6-,6<6.4AE@BEECCB?<;:731122112223459===<9536=BCFD;1/4772,,--,.159?<533359<;>EIC;;>=<>CDBDKJ=79BNWXVO9+.0/+,/237;;;@CDGIMQK9.4<CLQSQH40<@CDEDCA:6779=<;;;;9:CE?610/.-..49:70.59=>4/3:;66866778;?A>7337::8:6331135599776572-+-.2:<5440.++)*6C@:@ILLNOMHDFJKIGEEDBB@@@@@=975554203:5,+1448<;756530-,++*((+,-+''*07;9:CGB95:820233026:<<;8536:>?<51240+,/0.,*,4;=<951010/++DM;560++++,/100.)*4*<P+2GPSTUWWWWN905>@??;9;<?HOMKMJENWXSKGJKC<?E>28C=71,.5;BD<Ia`ZPFDA?<<<=797-+379<4/.,*1CL@..1+*+,0-,.05F>\"/O[_bK93.,29783*7MNNQI=8961/-*&%+259:87776536:=?@?BKH5/675-+,-+*0<F?/,*%,8>??>Toqni]RPUUPPRTUUSPOOONMLLLMNNOPPOPQQQQQQPQQQQOONMOOORUUVXZ[ZUQQRQQRPPQRQSX\\^^_`]YWZ[[\\[XWXVTSRPNNNNNOQTTUUVWXWUTVWWXXYYYZ[YYXRLKKKKJLKMONNOOPRRQQRTWXXWQOPRSVXUOKNQPQSTTSUZ\\YUROMMMMLKKKKLLLMNMMNONMNNNLMMMMNNNOOOMMNPQSSTTVZ[^`^htlipkefijjmnopstsqooomkjjgddlfZhokqm`[WUSS]_YZ\\Z^ge]i}}minm`Zadb`^]]]^`adggipqh_[[imchhgfecb_]_`_jtxxusvrsznheco~}vykVZ_a_aeiqyxuuxui\\X^^ZXX[XVZY]gqpbUW[[i|xwwuuy{z~vxxdcikkihgffgb___\\]agifdbfi}}vpmbidcnqpiiptcf]IOdhQW|rvxaLNQHFGGHJJKLKKIHIJLLLLLKHGLTVKGDoѡmOJKIFj[INNMLKJHOliJnfQWWOSJ\\iPEQZ[Za^RLR_sjR]y{xx|iZZTUvknߡz`kcXdr~ud\\]bccdlh`^ZWUVWVUVWWSZZZ_caerwpj`UPSrShSRSSSdURUUQQSRW]^\\ZXUTUUUTSSSQMLNQUVUUVVVUTTSSSSRSSSQQQRSRSUW\\^]\\[XURNJXgisvf^hhVTWWTRRRSVX[]\\\\[[[[[\\[[XVV[^\\XWSXbTJLMPRTTRQQRPSQVfjPQNTXTRSPNJJIKNRQRRPNMMLLLKLLMNPPPOOPPPOKJMNKQZZZ_ekkejcLHLKLJIHHHKLKOQUYYSJHIKMNNMOZYVXWSRQPPOOONNMLKJIMckkoqtpv|ukfd_\\\\[Z\\\\_deb][`lvytpomf^YTONOOOOPPPOOONMNMMNNNNMLMNPQONNMNOMIEB@?@CDFGFFFFGFGHJKKLNOPPOOOOOOMMORUXYUTVXXWWWWVWXYWWYXVSUVWUSQOMMNONNOOHA?>?>;AC>:9:AIKIGGGFGHIKMMKJKKJOZ]RILPJ=8?GGINONPQJD@@?;;BLLG?>LRRYckV>;=<<<=BA>CJNUVOEBDBBVy~vaC6:@BCBBA@???=@O^[URQSQFHciWVVA@`vL?@BB<FRWZccOADJF9537KZO8/6@B@=<BKPMJLH@<;<:654444204899::<?C81/4?HII?66?>6424879:?C@??==A<=Ywqglqojb[WXXWWVTROLHQc\\?49;<==<:998778:;:853368?ILLGEDDD@=<<=;3.4@DD</+4<6.0;AACEEDC@?AA;630123332467546:;865328?IJLG7157851//.-,,/3=A;4210241.=SP@741,+.39BDBFG=;<CMUWTG;:92/16866579>DDB?FK:0;EILNKHFA22?BBA@;:DKD==<=?=87?><>><;94++0215;<;4-3;@;4+,8@?<<<;9538>>=<;<=@C@=;7668:;;=?>:875,)./0232/=;,+))*2>DDDDHICGJMLFGJKKIGFDBBAA@?@=7/-//.0242.(%)07<??=;974.*(((('')-.-(%%)/39>EIG=49<500221379::864248;=:42341../.,*)+29;71,-142/+'*?KE5+***+++*-13/,,&,I9:]j`]_ZUZju_>48<<9875:BNXZM@KRUXWTRPPM@68><2035567:>ACC@G[aZRONKB>7298.(,.49<=6220,+.0/,-99.09A?4428LD'#7MYXIA>6017:AA05LMLSN<5971240+),016:8757::3157996:DD5.13/-,-2/(-<D7)01'0AB>ADZqle_UIGKCQPPRSTTRQQPNMMLMOONNOOOOPQPPQPPRRQQPPOMNOPQRRQRUWXURQRQQQPPQRQQSTUWYWRRUVWY[XUVXWSSRPNNOPOORTTSSRRRTSSTVVWWWXY[[ZYYXQLJKLJHKLMNNOONOPQQRTVWYXRNORTVXVTROLJKJFGJMNNPRROMMMKLMKKKLLLMMMMMMMMMNMMMMMLMNOOOPQPOQQSVTRTRLNSNWjcZdcZZ``dlpnlqtsstsssqookhdgkgcchonf`][ZZ\\a`^\\W`ovsp}rilnj^`ieagib][]^]ajmkpm_\\^`sxmdacdda``^_`iyrqukfotstxnkoqpvvqzx~k`_`__^_fs}mU[b\\YYZY[ZZ[[Y]ffg[Y`^zxxwuwvx}|}{|n_cheddffeehgeg`X]bhkjfbejwjdadqnnkknrsoaNJXiWW~y|x]RZRHHHHGJKLLJJIHIKMOPQQOLKPWVONIiɫtugIJKLEQ]GMNMMKKIIfeMhoVPQPPSLLgeRLP[_bVKIJIP`nlX`|gXWYaxrqsxzɼy^fcP`SQ`gd\\X]aglph\\XWVVVWWUVVVUVWW``rxrgYTHir`x|dTSSSRdZSSTdeWUX]]\\[XUTUTTUTPOMHKQSUUUUUTVVUSSSSSRSSSQQQRSRSX[\\\\\\\\\\ZXRKGXa`qr]Zeh]YXVTRTTTVZZ[[[ZZY[\\]Z[]]]^``]^_\\]WOLMPRSSRRQRPSP^haSVMLW^gaOMLJHJRVSTURPOOMMLMLLLNPPOPQQPNMJIKJGLX\\_c_^gigkYHKKKKIGGJORUSRRVXTJJLNQPQMOZXWZVRRQQQPOONNMLLKJXlmswvtrywlhjd`__]\\[Y\\adb_ajs}}wsojd_[VQPQRQQRRRQQQPONOOOOPNLMOQTQONONNNLIDB@?ACFHGFEFGHFGIKLMMNOOOONNNOOMNPRVVTSTXXXWWWWWWXYWXZXUSSXYWSOONNNOOPMHDA?>?>@GG@:98AJJHGGGFGIJMPPMLLLMSXOBDMRK<9GPGFMKFEB>=>??;9<AFF?<FPXZetc@<ML?:<<>JSTUWTNGFEC?DayxdB7:@CCBAAA????BN]\\UQQSSYekiZMN?@eyS=EABCP^fg`UKHFCA9637IWH2/:EKHDEHKNQRPIAAA@<865554122358;=<=A<107DKIJC:8D=2335:;;>BB>:778;;8Jg^FDQ\\ZVYZVVYWSROIFCDQ]K34;;::97754444574322368@JKNONICA=:8;?>834;AC>3.4:83125<CEFDC@AB=741/023333686433441//18AGJII?108<:6562.--,-2<;657764/%*FYPBA?956638EA03BFE@<?GMMF@>:6556644456;BDB:9915DD??==<;77@GEA><707IHAA?<>?706616<=;95,*2889=>@;/1<B:2-+8FHDCDE>3046426=ACDHE=;;;99;;<=CEB=94+)-157834B=*'+-1=HIHHHF?56=GLGHHJKKIHFDCAA@>?>9/,,+,6;4/.025:=><>=<:982.-+*)((*01-+,-..028@GF=58:2-/257:<<96433347987532212111.))+/360**/7<80*((+6GC-&'(*+.159;7/*)0<<E[ghf_TQQ[nc>157975439HRMJPXfSGRRSTIKK:/17622118EF?@CBAB@LUVZYYVPI>8>D2#/54446/,+)*)))),5CJIJNPOIHKO[]C28>IMJKLMHBHKGK=4GSRSP>4<90133210-.487769?B;678:835=:,*+,,,./36649=3,2/(5AA<8:Wqj]UJ=:83OPPPRTTTRRRPOOOOOOOPPPPPPPQQQQQRRQQRQPOOOPOONNMNQSSQPPQPOOPRRRQQQRTTSQRTVVWWUTVXWUUTSPNNPPOPPPPPRPNQTSRSUXYXWY[\\\\[ZWURNLMKIIKMOOPQPOOPQQSUWZYSNMQTVWWYYVRNLKKJIIJKLOPONMLKLMLLKKLLLLLLMMMLLMMMMMLNONNOOPQPPQQRUSTXXQMPNP\\_WTUUYZWXahigmststtttqpomkjhinkfeffeb_^\\Z\\`da[\\kyyrwxokji_Ymyc^pwaY\\^]\\cmrqoia^^_j|zxw``acda``acdtsheihjnopmjvwmnspjpxzufq{uneVX^]]^hw}|eYguoge\\TVUUUWY[abmobYf~zyyuuwuqv|yv}tgfighhklmgdiljb`fgkllkhc_f{`khiwqt_Zeitr[NLHVVYu}s[WULHIIIIJJIIIJHGJJJNTWXVUWWQNPPQP߰W̽i\\XGJKLIOb[JLMLLKKJPb\\M^lTPPNRVTPf_KWd]PMMMNPPanikjXTX_YQg}÷`quj_\\VQHumROQUZRLOVZc_UWWVVUVVVUSUYWVOg`Ujyxk\\OJ˽kXifYTTUTWeaRPQepZWY[[ZZXUSSQWZSLKKKOSUVWVVWUUUUTTSRRRSSRRRRSTSRW]^^[XYXZVLI^\\WjgYY``_]YTSRSTUWZZYYYYYXWVUWX\\^\\[^][[\\^`\\VRONPQRQRRRQQVicUQRLI[isoVLLKIJQUTTUSRQPONMMLLLMNOOPQQONMJJKKJMW]cf\\T[dbd\\KKKKJIHIMPRRQQOQSQLLOPRSSPR[ZY[XTSRRQPOONMLKKJQhqruvvuwxtopmcbcc`_]\\]_a^`gqxzupied`VRUUTSSSSSRSSRQPQQQPQOLNRUUPNNOONMKIDB@?ACGHHGFFFFHJLNNNMMOOPPPPNOLMOPRVVSSUYXWVWWWWWVUVZZUTSUYYWSPPNNPQROEAC?<<>?EJE>;:8AKIHHGGGHIKNPPNOORNJE=?JPQMB@LVJCFG@=>ABBB>9989=>=<>COTbxkHF[S?>?>Pa\\UUQJFFJGDCCCkzg@9;@DDBAAA@?>?DO[\\VQSUR^iji\\LK>Fk~aH?CA@AMZ^hk_LDB<<8635DN@/0:CHHFHHJMSWRKGFDB<:87885243354568=?811:HLIJLA5?:2347;;<AB?;85558;6:IA5:IQOSYVVbe[VRLIKMD@NQ:278676665544345421149:>DHJKHDA?=:78:;=@>>B@:5259984/08DA?=;:?>6331//133235642112330/48AGHIA;536;87:71.---/242247898/*.=GD>?CBCE@7:C:,+/:FA9;@A>=<;98742124567;;<<;7..286457:;98@HGCDEDC:5=@>?<8:<72/),2:=435/+0578=>>>66=F>31.5HPLKKI?2-..++6@CDEHB;;;::9:::<@EGB:31/.178613DC-',7CMSQKFCB@<89BLIGIJKJJIHECAA@@@=50-/17AA;778BEC@>88>=59@=83/,*),/44//9>@>955<DF>652,+-378;@@=952597795452/,+/453/,,-./..279:<4/+*+,(7H@.((-6FMMKIC826879GQX^`[WYZ[ZG6787994.0<MN:/IllI>EFR[F<>2,/55230/5AC>?A@>?=@EM\\\\Z\\]ZPCAE:,.---164420-))*)+5AHLMMOOMJOSW_TB?=?BBAEOQNXW?<</7HOOQC495-.00/11..0558<?DFC>9885/.32*()++.313860121-%)/6>@:/,<SXMF?2..2OOOOPRSSRQPPOOONOOOQRQPQPRSRQRRRRRRRQPQQQQPONNMMPRPOOOPPPPQRRRRRSTSSTUTTUVUUTUWXXXWVTPNNPQONNNNNPPPRTUSQTW[ZXZ[]^^\\XTTSNLKIHJLMNOQQPOOQQSTW\\[TLKORSTVXZ[XRNMNMKKKKKLMMNNMMNOOMKKJJJJJKLLLLLKLKLLLMONNNOONNOQQRTUW[]YTQQROOQPRUXUPORY__bjg`gljjhefhhijjlmljg`^`_[YY\\^`decfyqrujhnmheZb}[b}|`W\\___kuutngfd`]ajgb`\\_`bdb``cfkjdbbbgnqpmjkls{lkjnyyqu`ovrkfv|`]_\\\\^mrb\\`^bluzxtkhjiijhimqqu{qcr|zvuvwvv{tks|wojorqqrqnedljdehiknoqtk[Vh`RblhvsvUDR]fbPJNLJMYsziZZRIHJIKKJHFGHJHIKHHKPQRSSVRILOPNPiLM||YcgQKJKLMMPOLKLKLLKJP^WNWygRVXQU\\UWkZc]QPPPQST\\s}~rVSVURUrȼοZN]^ZYPOMPURQRPPOMNPPWWUVWVVVUUUUVV[YVIdXP]ut^?c{U[\\WUVVW\\feSNNLSXYZYYYYYURRU^]OHJMQSUWWXXXYWUUUUUTRRSSSRQRRSSTUW^daRQUW[ZSY_MZd]WYWWa`ZSRRSTUXZZWWXXYYWUTWUW]\\Z^[Z\\]]]]^\\UQQQQQRRSSOag^[POKF_w|xeQKKJJPTUUUUTRQPONMLLLLMNOPQQOMLKKLMMOW]cf\\RTVUUTOKJIIIIJPRRPQPMNPNNNQRTVUSX[[[[YUUSRQPOONMLKIK_utxwvvy}xrrunbbggdb`__^][amw|{voiiifWRXYVUTTTUSTTSTSTTTRQOLOUWTPPPQONLJGDBAABEIHHGFGGHJLOQONMLMPPQRQNLJMOQRVVTTWZXVVVWWXVTSTYXSSUWYYWSPRNNRSPE@@B>;;<>DE?<<<:AKJHIIHGHJLNPPPPPPLB;:EPQNOIDLUKAEGB?ACDEFB=;9888:::;@EQol\\ceYID;HbbWOOH@=EOONPUQ_yY:::AEDCAAA@?>?EQ\\]YRUXNNW^_XSQ?LovXV[DA<DTYY`hcG8::64535:>:12;CFDDEGJNUUPNLJHE@=<:997763331105>=521=LNJKMA3342459<<=BB9455338<77676BU\\ZWPOi|qdgf[Ya[B3<H?44445555554423441015;=?@BCB?=@@=:6524;AFEF>77569::73.5B>6423:94342002232234300/1357578:?B@88844976640.-,-.0/---.2773458>;59ACEH@6<</./*2:@;:?>:9:;;:97547889998:;<8-,048=FLNE;:CIGEKPRRL@;:59943343/+,/45,.20..037=?>>;<CNL;454DRQNMKB1.46/2@DA>?C?8678789::9:AGG;1265355403GM9(,>QWUTOC<@ACB@GKGDEIMJJIIEDEDCAA<0+*28?EA@CA>@DCB?87?>16JI<72.*),132-/;EIJE=9;BD>71.+++-178:=<:88:<;::8665.+.45420.---**.4;8420-++-01,4C@-'/8L[[YRL@;=?77<CFIOX\\ZXTJ;5789:;6/0>I@1*5PQ?844@RG331+.44220-/59<?@?=;:9<;GU[[^a[MFE<12-+06812571.,)()/:HLJHHIHAAHOWSJHB?ACBBGGM_X2(/)'.6BSH0/0++---.//.-,/6@FHHGA;763,*,,((()+3<4-,*'&(+-6B<56;<4,)4;656,%(2OOOOOQPPPOMNQRQONOPQRQQQQRSRQRRRRRTSRQRSRQQPOPPOPQPPQPQSSQRRRRRTUUSTVUUSRSUUUUUVVXXXWSNLOPNMLLLLMPRSUWUTTWZ[Z[]]^_^\\VSRQLIHGGHHHJMNONNOQSTW[[UMJNOOPRTVZYRMKJJLMMKJJLKLOOPQRRONLJJIIJJLLLLKKKJLLLLMNMNONOOPPRSSTWZ][VRQRNJMQSRQQPOOSUUW]YR\\d`]_]]cjklmlmmnpg_df]ZZ[]^dtmcwxtihllhcZlpZezo^Y[_``ozqljecdbZckf`]b`_deb_aeggda``_emqqlklpw|y{|tqohmey}c_ppdcbcfkdZZY\\ikbceccdfeeecs|xwwurw|wuw||{{rimvwkotvvsospbgmfehkmptwzzp\\VequonvmpvvxfKTXZWKIMOLGMjyeXWOGHJJKLKIGHHHJJKIJLMLNOONIIL\\kbydSIRz{s]NKKJJLMMMLLKKKKKLNRQMWvrTYa`gh^Zvld^TQPNOQRTnQSQPRU~ϼsuvUOk_SWOMOOPRQQONOOOQRRUVWWVVVUUTUWU[_XETSHOn~_K}ߔ[XWVUUWX^eeQLNMNU[ZYXYYXTQTZeZLHLQTWWXXYXXXVTTUUUTRRSSRRRPNOSXZZajYHLSVYZVZNQ_`XWXUS]^\\SQSRUWYZZVVVXXXXVUXMTkc[\\\\XSV\\[]_\\YUNNNPQSSRTYVYbOMLE[{]LMNNPUUUVUTTRQPONMMMLKNOQQQONMKKLMNQU`gc`ZPKIJNPNJIHJJKPRPOOOKKMMMMSSTWUUZ\\\\[\\ZVUSSQPOONLKKJZuuuzwvuy|wqsuibehgdb`_][Y[eqz|wolopfWU[[VUUVVUTUUUTUUVTSQONPVXTQPQQPMKIFCBCCEIJGGHHIIJLNQQOMMMOPPQPPMJKMOPSVWTTXYXVVVWWXUTTSUURTWXYYVTQROOSRKA>@A<99::>@;<<;;=GKJIIHHHJLMNPPOPPL?8;BIHKQLFMPKHMLECDDDEIKKLOK@88:;<=9=cq{ud[C?Zg^QHC?97DY^XX][]kD9:<AEDCA@@@>?@GS]]]UW\\PBDGECJMBGfwi`udD@@[cY[^[RB;<8433468997;=CA@BDHKORPMNNLKIGD@=::;;63321105><422=LMJIE>312347:;<=BA7234338<77779G[a_YMZ{tjs{mabS94>D?63323456544323341/05<BB@?>=;;?@>:62/29?FHG?<966:999714<83/0//057543344433453100039>>878;=647733765520.----..---.2524>EC;4378=HI<6;5*.1//5>>8:==>>=<;:;<<:=??>=>;;<8.+/9CFGIGD;:EIGGNU\\_YE57:73012110--0235631--,07>>:;<=JXS=8>7<KSPLPH03?@<>CCA?>@?=:424578878?HJ<-066423203FRD./CV[VSF64>CBADJF<<@BILMNOMJIHFDA>6,*6>DFFGMI@?CBC>99A>09UTC;81,*+--+*.6?IKKC<>B@:3/-,+*(+4666788;<<<;::;::500453--00-**,/3540...,,.02/)5;0*006JU]XPD=?>969:<>BJWXLF=33567:>?85;=4.113676650;?0//-034320/14:=?@=9769>97LYZ]_[VTQ@32.,4<6/+///41),:CJQPE=>AFFDHLQTTURMGDEHONQaR0(+**(&4LH-'+(*,,,.//.,()3CIJIHB9530+()*()**+0BE1$#%&)+0CNA67@@5/-/13550)*.NNNPONONMMLNQSRPNMOPQQQQRRRRRRRSSSSUTQQRRQRPOPRPOOPOOOSTSSTSRRRRTSRUWWWUSTUUUUTTVVUWXVRLMNMNMLKJKMOQQRTTTVVVXZ]]]^`a]UQSQIEEECBDFGJKLMOQQQUXWSNKLMMNOOQTSPMIGGIKLKKKLKLNPRSSSRQPONLJJJKLLKKKKKKLLLLMLMNNOOOPQRSSTW[YXWSQSSRRRPPPQSSQPQSVVSZ`\\W\\]ajnponoonnsrlprlfa[]_drwq|ljhegd`qyd^fg`^[\\_bbfpjabba`b]ci_bpp``feaaegf^`ba_`bdopmnowtjhluvnen{exv^cuqjf``jj_]`ZYgn]UYZYYYYURf~{zvtsrw{vs{}{{vpqvy}~skntwzvpvyqiefeilpprssuxjUSQc}~n}lsqe\\YXPLMNNJFPj|q_VPKIIJIJKKJIIIIIJKLLNMLMMMKIIH|oZTJLLS`{dLKKJKKLLMLKJKJKLKMWSHnqeWZ]WYYTdndZSOMLMPLmՕqwfORMP[g՘TEydQQenIVOMMOOONPOOQQRUVTVVVVUUTTTTUYYWURGPtaIMI[~a\\a|Ϫ]PWWTR\\babaKINLLSZZYXXXXWSZemRIPTUVXXXWWWXXUSTUUTSRRRRRRTPMSZY]^akZGHNTVUUPCP_]XWXVWWZ^XRRSVXZ][WUUVXXXVVWTUeeZY\\\\VRZ[[\\ZZXPOORQSSQPNLNXOLLEPsNQSUTVVUVUUUTTSRQPOOMLNPQQQPONLKLMOOSgxkbbVKGGKOMLKJJJKPPONMMKKKJJJQPRUTSY]]\\^ZWWUSRQOONNKKMm{puyuuuuussro`bmheb`__]YX]mzzvrqsre[^b]XVVXXXWXXWVUVWTRPPPRVWTSRQQPMIGECCCEILJGHIIJKLOQSQONNOPPPONMLJMNOPTVVTTXXXWWWWWXVVUSRSRTWXYYVTSSOOTP?>???<:999;><;;:::CLJHGIIHJLLLMMLLMG<9:;>@KSOJMMMOQJCFIFDEKSVW_dP8;HKFB=9V{okgZcoo_J>::87GbgYUVZhb?=;<@DDCBAA@>>BJT]\\^WYbUGF?719AAC`sareIAEhlZ`[QJEB>:7448<>???BA?9:@EIIIJJKNMLKKKHD?;;?>82221105>=511=JKHB8:5744468:;=@?:65547:;6779;ENRY]Zh{}vjivq[SM@IVPB:52134454312123430/4;A?<:::8:=><8531268<?BDHC:57::9:96665112447;97;<8456567445314=EA78:989::6434776431/.011123467408HL>20345BSM88?97;<9/+29679:9;<=<<===::<;;999<;7-,1<EC;77;93<LG;;GYh]:)3;ACA>7000.-3<?FIJG>/)0;<75:9<KWQ=9A:7ANQSTC3?D@DE?<??==>@?:43568:88=EI?24761/2236ANJ98FY^TJ<-/;BC?AD?67<BJQQSTTPMKKGCA=34DLNOPRTL@?@CB<7;A:2EYSF>931232/,-147CLLC>BC<2.---*),/445679<>==<;;;;;;9645530134/---,/-/0021/---+/..0/0/*6LY[ZUF;=>;7999::>MTB=9/-024;>A>896/-052456;:003-,.13333447:=B?A@5255<C=<IVPTUW\\_\\J3-./332-)&$*227EKFEMPD=CGIKOPQZb^Z[ZUQGDUZY_K1.1.,*'3HB*'('),-./111-(\"/DKLKI@741+))-.*+..+$:WO4('+057<?>=ADC?;856;>=<750ONNOMLNNLKMOQSRPNLNPQQQQQRRSRSSSTUTVWTRRSSQPONPQPNOONORSSUVUSRSSSRSTWYYXWVUUUUVWVUSUVXXTOLLNNLIGIJJLKLNPRTTSTX]^^^`cb\\SQTOHEDCCCCCEGHKNQRSSUSNKJKKLLLKKKKJIHHHGHJKLLLMNPRTUTSSSSRSRNJJKKKKKKKKKKKLKKKKMNNMLNPQRQQRV[^^YSTTTRQQQPPRRQRQQTUUY[YVW`hmlopnppooqrsuuvtne]_dbs{leagcfedkk`bc^[]_^`cb_ac_`a`_a[`c^difa`dehlkhfcccb^`a`nqotsx}thjutssusa_riZcirrikb^eg`\\_^Z]ppYU\\XXXWW^~wsrnfp~~|wsp|~|y{xsrrry~sosy{~{vx}}oddcegjjjlkkvhVUSZmx|pwskc\\UOMJFGJAOqhZSJGJKJIIJKKKKJJJJKMLJIILMKKIGGRUOGILHI[XOIIKKKKKKKKJJJJLKOgWUxsVNWVOMNMGQwg]UQMJKPQRŀ]^`pbMPR]qnPWZaYRUReGTOLMMMMLNNPSTTTUVVWVUTTTTUQRYVPUXMLQKLMLK`ohiKDYvNUmnigmye[n^FJOKOZ[YWWWXZ^gqiOOXYYXYYXWVUXWTRSUUTSSRRRRRUPVrybY^]hfJEFLSQJGDNZZZXWVVRVb\\SRSXYY`]WTTUWVVVXSX]XV[^^]\\P[^[[]]]VZZSQSSQMIHJNMKLDDk\\VXXXXXVVVVWWWWVTSRQOMOQRRRQPONLLNPMUq|g`ZPHGJLLLLKKKLPOMLKKJIHGGGIMPSTSZ^^^`[YYVTSRPONOKKcyxtvsttuqlmtqc_opgc`__`b_]f{vtutuod_fhaZWX\\\\[Z[[YXWWVTRPQSTTTTTTQPNKIGEDEFJMKJIJJIJLNQSSQONPRSQPNLJKLMMOTWVTVVVWVWVWWWVVWUSRQQSWXYYVTVUOOQB;>??<;:9:;===<<;;;?HJIHIIIJLMLKJHHH>:9:9:?LSQMMMMKJD?FNNJLQWWTYhX;@V]RJHFLdodTcso~oQ=:8886IggVPMWo\\C@<;?CDBAAA@>?CLU\\]]Z]cYONE618A?<XmgrwhRA?brb_QLJNLCA@<:>ADEEDDC=79@FIDBDGJMKJJKKKIA<<@?<62111/3>@411=HIF>547765579999999997:>@:3447<BBD[kdo{trm`hq^NRTWaeYD500334541/0113553/4;;7545579;<;7421233338BMNA44::99;8654204>A>?=8?C:579864689626AA859;;;AC<55317==9652014545666758DLA00887;GPG;AJKLMNLB<467765237::<>><9:854447>8.--3@HB=9897./@F4(/D`b>(+3BNNKC95208AINSWZ^\\H49A92588;@HG;:@<5;JRVK7<OJEIE?==><>ADEDA=;;;<;99>B@77:70-26766DPI?DTXPC81/5:?A@>:35>NVVUUUTQOMMKEA=48NYYYZYTG>?DC806==65IUNB:406@A;545456;EF??C@:1,+/0,-3565689;>B>78<?><9657777898981.,,***,.2553/--/0110/014BU^[^YD9;>;755893/?P>37869;===?=52431146324540/-,/22332358<=?@=862026>@<CUJ<DEPZ^aS5)..-..,**++,.39:7=GJGDFJLPY][emdYWVWUD5?JIH:/150*(&0A7$')$'+.//3640+\"-GOONK>43.''*/1,*06,\".BD<1,3967;@CFFGHMI<68>DGGED=ONNMNNNNLKMOQRQPNMNPPQQQQQRSSSSSSTVXXVTSTTTQNOOOONOPPPQSUWYWUSSSTSSTVYYZZWTSTTVYYVSQQRWZUNJMOMKIHGHJJJIJNQTPPX]^````ac[PNSQKFEEDBABDEGJPTUUVWQJIKKJJJJIHHGFIJIHHHILMLMOQRTTTTSTUUVWSNKHIKKKKKKKLKLMKKKLLLLLNPQQSRQV`gfaZSQQQQQPOPPPRTRRTUUWWWUP]hdflmlnppqpprssttuvojidczv|kWoj`^_a_`d`]]^aa``_]\\^cfa`^YVirpmb^[_iloojfmpd_^`aa`luvwpznl{~|vqspgcbfe\\fy}qjhea`\\\\_[gxkYYXXYXWuwqqpei~zvtouvrsqqqqxzvuvz}z~oec__`bflmstrcVZ[YWbsg{lll`ZVS`j`JCVsr^[[PJHIIHHIKKLLLMLLLKIGFGJKKKJIJd]aQIKJIJIHDFMMKLNMKKKKJIIIIJKGSoS_rVHJRPIILMJHf|i\\URPMMPVZ^zd\\_XZgubPJt͛daeZRSSYLb`FRMKLMLLLLNPSTTUUVVUUTSRRQPLNSSTZWPKHKMNOPR^mfPelSNo|upyvsvPDHMV[WURQX^mww^QW[[YWVWVVTW[WSSRTUSQQQQQRSVP[iYX]cMGHHNRIDEQYYXXXWUSQ`[TTUZQKY^XVVUVVVUURT^`Sam__\\JQf]Y\\__X]`TORQPLGEHJKKLKCNydU[\\ZXXVVWXXXYYXVUTSPMPRQQRRPNLLMOQLRqlURPHGILLMNMLKLMKKKJJJKJIKLLOUZYV^_]aa[ZZXVUSPOONHXwyuzwtxytklx{k_lxkdb^]aceeftxsuwusmijmja[Z^b`^]\\[ZYXWVURPQUVSSTVVRNNLIGFFHJMMLKJJKLLNPRTSQONRUTQNLJIKKKLRXXUVXWVVVWVWWUTVWURPQQSWXYYWVYUOMB6;?>><;:9:<>>>>><<;<EKJIHHIJKMMMLIFG>::;::@GNOMLLJGD@<CPTRQSXXRS`WDK^c]XYXRJEIHKmysE8::99;OfeRJKQ_QJD:<>BDDBAA@?AEMV\\^][^cXLMG35?A><Mhmstd]G9Txm]LHEWfUDEC?@CFFFDDDB@@CFGB?CEHIIIJKKLLF?=@@>:311223=D809CFC@;644323679975447>><?CB<3436<CCG]idxb_trnsgUQSVYaeT8/1122321//12249;7433434579<>>=:51110357=BILB315756::7641.29?A@=8;=8677543445426==89<>@BHF<89648;:757621233135655>KH6/7==;9;86?JPSVVVVXXH:;<94./357;>>=;<=:68<CC2(++1@F?<::60,19:2)(.CVC+,09HRROKD<:CLPRVYZ`fZC=<1-2578;=?9:@=36GKH;/AUQNNIDEA??BHIJKLJC@>??96<?:78;80/37511;MPD<CKJ@843358<@@:67DVZWXVTQPMJGFC<5--CWY\\\\ZP?9AC3*4;9865CNF<72/=JJA9994247=?@C@550()05224456789:<@B:9ADB>811457:8458720-)'''+/124543212440.0;>>MY^\\NB>=<:71.5:4(2ID328@GJD;:<8/)*,0331..01/,*(+45112236:<::;9425547<9:KW?885ALP]Z@+),+*-49@@3+*(),179;?CFDCSc_\\hlc`\\USP?234/.--03-&)*+31',-'%*++,/3640#+GQPPN>12/)),140.10+'(''-14<@;65=DHHIMRND?>@FKLLKANNNMMNMMLKLNPRQPONPQQQQRRSSSSSTTTTVYZXVSTUUSPPPNNOPPPPQUXZ\\ZVSTUUSRTWXYYZYVSRRTWYVTQONPXXQKJLMMLJIJJJJIHJPRNLU\\]]_b`_cbWMNTQJFFFDCCBDDGOTVWX[[UPLLKJIJJJJIHIJJJKHGIKLLMOPPRTUUWXWXZZXTMJKKKLLLLLKKMMLLMLMMLMOOQSTTW`hhhf[QPRQPPQQQQRTRRTSTUUVTUZ[Ycnjglnpqnoqnopqsz{urng`|svWgh_][Z_ghgedc`\\\\^_]WZhkfddc_qrca`htsnjhiqna\\\\`dc`fs{vkzvobnoqnkqsgslimkc]_]_r{dVXXWXYnzvllypopmhu||}xuqpypnnqrty~}zrlp|~rcd`[]bfptutf[Z]`_\\Wjgnunuk`c]PLOM[|rut_Z_XLJMJJKKKKKLMMNMLJFGGGFGHIJJIJIIFFFFILJHHGGJLOQOLKLJIIJIIIIJHaoNY_KHJJHHLOQMFWl_WTSQMMY\\NO^cc^WV^^QJ]~լzvWISVKqlGQNLMMMMMLNPSSTUVVUTSTRPOPQRVYYYUQNLKMNNORUV\\_sr]Qztd^`wȈFAKSYUSOGWepqbUXYYYWVUUVVUWWUSSSSSRQPPPQQRTRSbgT]`MIKILPNKFPYX[WWVTRSSTUVVRQIJUYWVUVVUVUTYcgcg{p\\[QI`ZSX[]W[eYPPOQNLKLLKKJJIAVxWUWVUUWUVWXYZ[[YWUSROLORSSSRQLKKMPPJLfhJHLHHJLNOONNMLKHHIIIJMPSTVUTX][[b`]dc][[YWVSPPQLLr}vvwu{}ro|xghurffb^addbfrzpswwspnopnh`]cigd`][ZYXWWVURPRUVTTUVVRONLIGFHIKLLLKJJLMNOQTSSQNNSURPMKIIIJJNWYVWZYXVVVVVVUSTUWURPPRTWXXYXWWSNI<9=><=<:9:;<>?>==<;<?EKJIIIIILOOPOMHGB<;;;:<>DILKLJGB>;CNRPPRTURR\\ZWagecaa`_Q>?E;Tre;:9:=CKWcbOALU`^L9;<>@DDCAA@ABFMWZ\\\\[]aQGMI68A>=?E]lnbRTXLOmw\\KFCNjdIAA>>BFHGEEDGHFEEECACCCGHIJJLNLHA>>@A<5202645@=<@CC@>;85421335775426?EDBACD?6126>DEK\\agpK^~rmhd\\RNMQ_]B443100000/1216AFA856799<A@=BE@7201117:?HIHD;211102797653017;?@=76534322355300018><;@BCFLG?A@=<;520/1663223337723?I?05AA<60.+0@LMMUYUUZ\\XB7=?6-/3469<>@>==;:>DF;,+003<?;::85,+371/01,-<<1256?MUQLC:=GLPSW\\\\`f\\F<732367999:89=;45?>953DRRRRQMLE@BDHKNOMKGD@@;2/5:743772166544;JLB@>AG>7765555:BB>BLVUQPOOMLIECB=4,(%1EV[YQF<;A9(.?A<A?8@F=9912FQLA7673.15:89<4).0(+284412467777;DIECGFA=4-.02595...3662,),-/24688:714<;2..39;@KX\\P=>?<:876469833<A70.3?E<1130-+,/5840,+,11+&%,66422238=<:;>=415658:7@WO=>80249VcK1)+,09CED=.)+*.10039=::57Sf]\\hcf}rUSZN764*+032-'$)/0///..+&''(*,/361'+ESSOL?.+.,+-2650,*)('%$(+2?B<69DIJKMQPPSPKIHJKJC=NNNOONNMKKKMQSRQPOQSRRSTSTTTSSUWVVXZZXVUVUUSQPPONONNNOSW[][YVTUWWTSVXXYZZ\\[VRPRSTVWROMOSVSNKKMONLJJJJJJHIMPLIOVXY]abbbdcZMNTRLJIEDDBBBEKRUVXY\\^[UPMJJIIJJIIIHIKKKIHHJKKNPQSTVXZZY[[^_]ZWRMLMMMLLLKMNMMMMLNNLLNPRSTWZ^_cih[RRSQOPQSSSTSSTTSTUWYVSSTblhejnnqkkomoqppswtpprlcz|UZaa_[\\fqqpja]^bnxyyrpvux}~wot}p]bn{yuvofenla^_bfdbdlutmw{luzlx|xokwvyvzwsokg`]]`ltfXWWWWXY]]Wavtutqcduq~xvtru}xqnpqty~{yurt}~cac]`cflnjea`abccbY\\homifmoqmgTIGEPiQLTWLGINMKMNLKKKKLNNLKIGGHGFEGJKKNLKMKHHIKJIJIJKLNONLKLJJKKJJIJIJjiPNMIJMOQSVXZRJOroaZWUQLO`Y\\iqlc^YUTYKgrGZŰkWE@GlnDPNMNNMMMMOQSSTUVWVVVVTSSX\\]^^[WRNJMNONMNOPKb~qX]|xfc\\UTR[ܻZBGNWROKGUek_STXVVWVUUVWUVY\\VRRSRQRQOPPQQQRSSLYxdb^PKIIJJKMLOXXZWUVTSQQSSTLGNJDQ[WVVVWVWVYbmpljl[VHR]WUY\\Y`hWPPOQTYZXRMJIHLFBi^CGLNORSSVWXYZ[[ZVRPNMKORSSTSNKJKNOOJGb|XFIKJJLNNNOONNMJHHHHHMTX[\\]YUUTS[f``ge_]]ZXUTQQQLe|wvsu|y}rjoqjhebhic`eo}xprtstutrojd`fllgeb[YYXXWVTTRPSTUVVWVURPNLJGFHIKLKKLLLMNOQSTTSPMPSQOMKJIIJLMTXWW[]ZXWVVVVTSRTVWUQOQRTVXZZXWWTJC==>>;;;:::;<>?@@@>=<>BJIIIIHJLPPPOMJGEA;:999;?GJLLJHB<>HNLPTQMJIP\\acghfeedca\\OA>=OfvqJ79:<?KTZbbT@I\\leE29<=@DECAA>@BFNXZYXXXYIDMO:7<;=CDNTSHBBP\\ak|[D@A?XkX@9<>@DHJIFBFHGFFEDCDCBEHJJJLOLD?=<=@=720242.9@A?=A@>;987430,03532/5@CCB?AFE8025>DIOVYlxYQs}~ymgnhULJV_K::720010/-056;EKKIFDCCDGJE@DH@447546:;=GMKC7220//2687764228>??=8531223357730//04:::@EEIKEEKFBB91////37778<=;:505DE51?IJC:3367=DHMQXZYWZ^S;6<7002468:=??@A@@FF:/0<FGA:56;<972.3510231+-244532:FE924>CGJLNQU\\^VF???BDEDDA<878997557:85DPQRRRNG=:@B>CMRQLHGD?7-+,150,285698<>69FE=CFDD?<:5332029>BHQUTOGBGIGABEB9.**&(6JWTE<>A?6.8BCDFB<?A889/6TWA1,152-056113,$*1,-1544248766778=?<;>>=;7223258<;5+).32012469<<::612;A6.1579;AJROA8;98<CFGIC;:?>:91+()/33.***+276883486232.('/78862249A@;@C;3135569<JTG?<942-.OfW;-08AA;630.-,.460.2=@6//9VeZ]g_iyUPWT>2620341*&%)0540,+..)&%'*-.033.*=PVOI@5,,.-.3994.+*----//04538?EHKNTVSSWYUQLHDBACNNNOONOOMLMPQRRRPOQSSSTUTTTTTTVYXXZ\\[XVWXVURPPPONNMNPRVZ\\\\ZXWVUVVTUWYXYZZ\\]ZTPPPQUWRMOPPRRPNMMNMLJJKJJIIKLMKILNQTY^acbagfWKPTSOKHFDCCCDHMPPRTSX^\\SKJJIHIHHHHHHHIKKKIIKMOSVWXYZ[[[\\^]]^_^]XPKIJLLKJLMNMMMLNNLMMNPQSVVWY[ckbROSQOPQSUVWXZ[WTUWXXVTTT_dcflnnoiinkmppmjmpkhyynv|oW\\_bc`[cpqndYbtifmh]k|tqvxnbjkcaadfdeffnsoqrpzktzrkhvqyyb^gknspfdgc]\\`ffbZVVVVVVX[Xa|}~}geyp{wytlv}~yvrnsz}xttx}`Yaaabddcd`]gecba_abaff`\\cn{~|kOQlreXMHMNMJLMKLMMMLKLIGIKLMOPMKJHFFGKNQQOMNKJIJKLKKKLLLKKMMLJJLLLKJIJHNtiHFGIOT`b^[XZSMH_sf]YVPJTtwrf`\\VUQOsMU[sӷ{xceھmK:C҅DNNNNNNMOOQQRRRSVUVWYXWVVY\\^^\\WSRNMQSPNNLIDioVV^dZPPROPPNOVYowAHITSNKKScfWVWUUUUVUUUS]joiVPRQQQQQOOPPQRQSVSSRa~mfOIHGGGEHMSXVUVTTSRRQQSMDEHHFPYXVVVYWYV\\fmzwpzcVLQ`\\U[`]ddPOROQTei_UMHKLNMHSdMFGLNORRSVXYZ[]\\\\UMLLLLPRTURPKKJKLOOIHflKGLLLMNOOOPPOOMJHHGIKQTWYZZUPNKJZjceigda`\\YVUSROY}zvsuwz||uqnkklhjlc[_p~}upqu{~yqlifgnmdadb[YYXXWVTTRORSUVXWTSQPNKJGGHIKLKKNONOPQRTTTQMNRQOMKIIIJLNRWXXZ]^\\ZWUUVVTSRTVUSPQUTUVX[[ZYWSI><:<=;;;::::;:>FJHB=;8@IJIIIIJLPPPNMLLKG>9;;<>BFGGGFE@>AJQNWZTMLJR_bbfmnlihda`[K@EWacZE;;;<AKRY``VDGZeZE8;;=?DEDBA@@BGPZ\\XVUTO?<IN=688<DCBBBB@@CN\\flL:8<;GfhI6:?AEHLLE>BFHHGFFEFDCDGHHIMOK@89878;83/2322=HHEED@=;8766328=CD93116967<@GH9/06?CGJFDUVKg{{imxgNFQWG<<;40121-2AE?ALQRRPNOQSQGAGMIA;<?;79<;:CKLF<511113677865337<>;98984247766730/011369AFGKF;@IDBD8./14668;=AEC<613BM@5AMQROJGFFE?:@IMT[\\]\\\\\\E4443222469>BCFGCCD<06HPRPE827<:66647752011//034430/58++9?=>?>=67BEEC>@CELQSVTKA77888657;51BOOONLD8--;C53;GNOKIHC>5*-0/+*398;:<C@57A>8BIHC@A>4-0//013:DLSTPHA??<7;CA5*)*(&/DPK;48:86247983/6@B<761B[J312342145548:3,.2..1335788621479868746<ADC:69<<=>94-*/2457:;><5/,+0;@8.0799<=?AC@;;922=JOTTMD=DLJG@71,./0/.0+'273652:LRH=62.,288:8435<C?;?B7.034897BK@=<:9794,F`\\C4:>A<50./10-,02.-059305@WdX^kXSydKJOB-,100/-..+'/87-'&*,01///101223.7DQMGA91,,.//4770('6>;873.))2=BDFFP[_\\SMV\\UJ?56>HNNNNNNNONLNPPPQROORSSSUVTTTTTVWYZZ]__[VXYWSQPPOMMNPQTWZ\\\\]]\\ZWUTTSTWWWXYY[]^ZRONPSWUONONNPOOMMLJKKJLLKIJLLKKLLKMMQTW\\^^`eaTLOSRMKGEEDDCEHIIKMMOTWRJIJIIHIJIIIIHHIJLLNMNRTVXYZZYZ\\^_^^^^]__]VNHIKKLJKNNMMMMNNNMMNOORUUVUX][TPQQRSSUVWYZ\\^\\ZYZYYXYWVWXW`mpnqhdhfkookhedcbmqpnwzrozrcbaaba[Zjui^kujxxoqjklqqflmbbdhgefgelvutvvmolzpgnojffinsvxwu_abbdebcfd_[]^``\\XXXXXX[^YYyxwqhp|y}{u{}}||zvojknt_S\\b`cd__qg`efcbachjaZ[][[_kz}xqkRCCGIJKKKQPMMNMJJKJIHHHHKORPNJHGHHJPTPMRTOJIJKKJLLLLKKKLJFIMNLLJIIJFX|^EKLFFRbaTPRPOMGMryl`ZWPJVuic\\UTN`sIT^^QӊctlRPe>o{WPPONOMMPRRQRQPQTSUX[\\[[YXWVVYUQOOSZZUPMJIwfEHSNHKPQPOQOLM_gf]GHNRRRONSd_VWWUVVTTUUYiwo\\MMQQRRQOOPPQRRSSUWUMSbjpSHJGGFDEMVXUUUUSRQQQRQJJIILJKVYXXYZXXUVbj|rppTOP\\WPYd_aYCKTRQQ_pn[LHLMOPQOPJNNOOPQPSWXYY\\]]]WNJJKMPSTUQKIKKKKKLLLpbGLOMMPQPPQRQPONJIIFJQQRSTRPOMJHL`mgjmkjgb]YWVURQzxvqs}xv~{~mglmnsm_Y[j}wnuvnmnmnoj`^`]\\[YXWWUTTRQSSUWXVSRPPNKIHIJKMMMNPQPQRRSTTSONOQPOMKIJJLNPTXYY\\^^\\ZXVUTTSSRTVUQQVYVUXZ[\\ZYVNIDB@@>:99;;;;;;BMRKD>;6>HKJKJJJLNPQPPOQRLCABAA@BEFDB@AA@AJRVZ\\RN[cacecfntuogbbe]JAIRU^aN;9<:CRUX]^YKDMVYQ@:9<?DDDDB@@BHQ]`YVTRD87CI?7859>?AAAA;<?AGPQ945:78ShP68?BEGJKC:=GKIHGGHHFEDA@CIMOK>3452178412524FROKIB?>:89998BPY^WA7><430/:CHC7249A=8;86@>CfspttaE@JOKHEC9/154/@^[D@LRSROMOW[V@6FRKEDB?<:9::;BJKHD912234577866557:<879<<735886554//012469?EGGC<<C?=B:/,09>AA@BGH@6209LK7?UVQQQPPOOND86<BIMW]^_`Q;530/01138=>@B>7988CNSTL?6569<6256::76532221005998862/7?<57::7)(06=>67;:@JV`bXD557887897//ANNJFC<3*+9D6..3<BEGGFC>52.*,/7;:<=>A=8;B?<?CGC<>=952/0578;@GJHCGH@;:9>EC7,()(*3CKC82,*-0/-./+%%4EF@858IO75A?8423311368963211235:<9631259;98;;66=IMIA>?@<9:986322127<<6.(&&+8A:2279889;<=@?=<80/:FJMQLB78HQUVM=.-01002.%(0232-.;FJIB50499873148>A;9<?7/02345<JD+4=864:70AZ\\D5;;8;;2,-//.,++,---+')18EWZdaIKek_RGIC/&(/2-*14-*097+('''2;:8764330.05;CDDA:8/),6>57>6.';MMG=3,+-6>BDCAK]ecM;M^WF:78=BNNMNNMMMLLNOOOPOOQTUSSUVUTTTUVX[^`abc_[YXUSRQPPNMNQSVZ]^__^^^YTUVTQSUTSTUVY]^WROOQSVUPOMLOONLKKKMLIIKKIJKKIHIIJKJJJLPSVWZ\\WPLOQOMLIFEEEDFGGIJKKKLMJHHHIIIJJJIIIJJKLNOONPQQRTTTUX[^^]]\\\\\\^`df`WNJLNMLNOMLLMOPONLLLMORVVUTUSRTRQSTUWVWXXXZ\\\\\\\\[XZ\\[WSROXjnknf\\_filmmmicacccfhlu~{vtuvmfb^]]foaY|qsylehiib^hpheglihihem|ywwt{tyynjoqe_gnlflpevmdfda`bcddddiia\\^_^]\\YVY]ZXj|b[xtjt}{~~}||slgfccgtxdZ`fddeakmadgjifb_`a^[]]^^bn{dNCFIIIJJMSRONMLLKJHGGGGGGIKMLKIGGHGITZYY_]PIJJJIIJKKIIJLNMMRSMKJIIIIBf}YLOIUm_TZVLLKJJHIb|qd\\WQGWxlcZUQQWVGIY\\]\\WٗhMXceKXdCjjjjNHUXSQQQSWRQPOPOOPV[\\\\]][YUQQROLNV_`XSQKΣoOHNNOQQPOONNONM^iYnحQPXTQPNNQ\\WUWVVVVUTTR`z}zcMLQRRQQPPPPQRRRRRTUUODOflMEGGFGINWWUVUSSRPQS\\RIKKLRNOX[ZZ[[YXUPWdyoYsrSPQVSKT__^SDGRRRQSoiKILMPQQMKKKMNONNOSUUUV[]\\[UMLKLMORTSOKIKKJJIJJInaJPSMMQTRRRSRQONKJHGJNPPPNNLKMIIVnoinpoojb^ZYXVShxtqry|}{s\\hpklne]_fyqn}ukksvpjgb^][XYZWVUTTSRQQSTVWVTRRPPNKIHJLLMOOOQQQQRRSTTQNPQPPOMKIKLNORUYY[^^^]\\YVUTTSTSSVUPRX[WUYZ\\\\[ZTNJGFEC?<89;;=ADFJPPGA>;7<GLKKKKJLOPQHNSVVMEEFFA=BHIFB?@B@AJRY_WCC_poliedgr{wpg`[TGAKUU]cN;=EJRYSMQZ]QCCPYS@98<@DDCDB?@BHR^b[VSO@97=F@87789=AA=:78=>CCA966931=WB08?BCEIJC9<GKIIGGHHHF@;<AFKQK:2232157445319ECB@=<>>98@C;=N`daZI@GJ;5418DC9215AK9-38;DECJIY}fJ=CHNVY[U?/2442?^jYIJV^[UPNQTXH3:MNIHC<;;:;;>CKLGB;54445677777799:;::;<;755666661++/1137:@FGEHJHE?<A=0+3<BHIEEJG=997=MC5L_XQPPPONONC6016:@KQU[]RA:2,-,.1478620.-/:KVTRR?--3896224678:<===;841248=@@;47@B803786+*1;>712302:LbiT<112588::921@LID@>9622;C:53312:?@B>565/2645868;:=BDDEEDB?EC88:98107ADGHIHC<8?JJD@BFGD=5.(*29AFE@91****(+00-2DPMF<36A<5CKD;5451,,.15888885459=:42479:;;998533?LMHEDB;79:866765447;7-'&&(/8;63665558=@BDA=;854:BEFHE<42@MT[\\N5,020/11+*02/-*').6@I>0;B943.,17<;30388.+-/./@M8'-685353.5GK;3666752,+/.37/+,+*+)&(/06HX[L@MSQXQ>BE3,022-)+.254760-*(%,8=;86543/,,/38?BABB6,*;Z?.=C5(9V\\RC4+079<AC?>CU^Z:-J\\VHCKLIENNNNONOPNNNMMNMMPSTUTSTTTSSTUWY]ab`[Z]_ZVUSQOMOOMMQVY]``a`]]`]TSXXQORQLMOOORY[VQPQQTWUPMMOOMKKLMNNKGGHJKLKHFEFIJIHGHJLNOQOOONNOOPOLGEGFEFHGIIIJHGHIHHHIIIIJIIIIJKKJLMMMLMNOOPPQSWVTRPTX]`dgijicXOMNONMLLLMNOOOMMLMMOSUUTUTSSSRPRSTTVXYVUX\\^]ZVY^_[UTQVeg__\\TZfdejmnnmlkgdbdejtyxvvvsqg\\[]__ZUdwjdkslqpehje\\Z`ikmlkihijknyztww}k`aeioqmorc]jtlaflhepsfadgccddgov{~o^[]]]\\ZWY[\\Z]gha[Zezsj}~z|~}{~|nhggc_\\_bi{fghig__cn{k^abfihc]X_fbaabejt~pe]IFHJKJJIS^TKLIHIKKIGEEFFGGHIHIHIIHGL[ebae_NIKJHHIIJJIGHKOU[\\VNKJIIHHGvUJKB^}]JY^SJKKJIFQt|m^ZXYU`}ylbYTRQNIKOUXTVP|>qЍNW^YPP}fOWSXe|gNOW[USUPQPONNMMNTXYZZ[[\\[UNLMKJTbdaYPیuVJNONNNNOMJKP[XWbc`\\acUMKLNQUVVWWWVUTTSQNU]`jpdPMPSRQQQPPOQRRRRQRSSROIOaNCGHFFHNUVVVSQRQQQQZWPNJNTTUYZ[[^]\\[RKJRjxhKZjPSUXSKQXXWSNGMPSWReoJLQQRRLIIIGHJJIIIKNOQW[[ZVNLKLLMOPPNKIJKIHIHEEJev\\IOVWYXWUSSSRQPNLKJJJJPUQNJJJKJLbwroptsslc_\\ZYWexvtw}s}~sW^rkeihefhrvrvzhelvyl`]]]]ZWWXUTSRRQQSSTVXUSSRRPONKGHJLMMOQQQQQQRRRRRPORSRPOMKKMOPQTWYZ[]]][ZXUTUUUTSRUSPSYYVWYZ\\\\[ZTLJJHFDB?99:<CINNONH?>=<9<DHJKLLLMOPPIPUXWOHIIIA=CLLFDAB@>AHMU\\P99Ymkgfgdgr}}lPCEB>IVYZ[MDHQUXYNEHRWL@BMWQ@<:=@EDCBA?@BFQ^a]XVM@:78==999:;<==:767;=?><:866436G749>ACDFIF?=EIIIHHHHFC=9<@>DNF7244224555518ILGDEDEC?;:DF?7AY`_^[SJD>;;9;@<2116EN>03:?FIB2*PgR:7@KQTZg^E500357CWbWR]e]PLIFHSP<7HOKE@<<==>?@DHID=97566667887889:99:=?>;78:<>AFKC4,,,.16>IOONQOKHA=CD7.4>CGGDCFH@=@>?IB@V_YVSRRPOQN?4//25?CGILMHB=4020/27640+)**2FTRQQB4-.6<72023555:CHHFB;52348AB>969>?9123541.7B=2242156?]dF/--06:;=;<;8>EDCAA?>;7<C@?@A608;9:7,+128<51335989AEECCDEFC;48830.1?MPOPME@=9:ENJFFIGDA;2*.7;=DFEEB7/*'&)/38DTTRK=.2818HLC<7651**-/589?A=978:93016:;<;8776554=MNKGD<44787779;;;;::62/-+-/112344314:>@@@=:9889=BFKB::<::EJIUaP72110034442,)*,./-1EI59A6.1..36::6;ABC7-.15:A@1/2566631/-5841/1440.,*)1?>30/--./379::@EE@;?IUUA:C@2/21-*(&(4;88730.-,*,4:831211/*,0;CA@AD;1-9V9!,BC28ZaL=3,/555<A><=GLA--@STD<CJKHNNNNOMOQQPNMMMLOQRRQOOQRQQRSTUY]\\[XQPUZYUTRNMMMNNOSX]``][]_^_c]STYUNLKJIKKIHNVVUSRPRUVSOMONMLLLLNQQMGEHKMMKHFFHIIIHIKLKMNLKKNOOQQQNJHFEEFGGHHHIJHGGHHHIHJKKKKJIIIIIJLLKKLLLLLMLMMKKORX`dfghgfhig^QLMNMLKKLKMOOONNMMMPQRTVWUTUUTRQONOTWUTW[^]YX[__\\ZZZ[^_VQQPU``_cjjlpttnnljhggeecdfgfif_[]]]]Zivvzleb^ckdfkeig__^Z`ikliga_glhl~vy{u_VTX\\bnronlbblrmffjpddmmijlgegfgr||~|lYSVXYXXYZZYWSTV[]Ybvsnz~st{~~{dbghea`^``reaojhga]bg^WVXZ[^^^ba\\``abcgpxudRQ\\QEHMMJJITaUIHGGHIKLIFDEFFFFGHHHIIHFL]a`fk]KKLIHHIHHJJHHIMTZYSRQLHGFGPsgJOOGWeJHNSTJILJIHH^x|mWNO[ks~|mbZSQPNNKLSRKHV_NPm||zeQJMX_\\ggXDHJZ\\MUVYRLKNNNLIMSUVVWWXYZTLJKJJMYheZoONIKLMPQOMKJKOSXX\\aR[_T[hYGILOSUUVVVVVVTSROBADMRXVROPSSQRRPOOPRRSSRRRPPSQIBEFFGGFFJSUUTSRSSTTQN]`QGNVSQU[]]b`ZZSGDL\\daMJfWGUYUQJMQPSXULPTUYWYujKPTRTSJFGFFGHJJKGKQY[[[[YQMLLLLMOOOLJNQRPONIMchorZEMaoof^ZUSRQPOMLMMMMLPVVSNKKHKLhxvtuxyvmca`^\\cxwwyy~w|ydSqzecgrlcs~qsy}{wokmqvsf[[^^^\\YVVUUUUSQRUUVXZSQUTROOMKIHJNNOQSSRQQQQQQRQPQRTRPMKJLNQQSUYZZ[[\\[ZYVSUVWUTSSSQQWYWVYZZ[[ZZTKLNJHGEA;;;AFIMONH@;<>>;>DEDNMLLOPOMRVVWWRJJJJA<CLLGEDC@>AGJOUSHATfc_fjjmrzkG?FHGLROOPMLLLKLMKJLOPIDADSTA;9=@CBAB@??BEO]a][YM?:668::;<=<;;9755689;;86644468@8:;<BEEDIJD>DHJIHGECA?;7;>:;A<544422124401=LS[^[WSNE==AB?60>\\lklgR>8:=>>>8653;AF@64:?=::50XYD>20:ITW\\[OEA6045537K\\ceaVIFEDHLOFAIOJA;<=?@BCDCBA=977556656:;998:;:8:=??;5;FOSY^cbM3-038>HOPQRMD??<8BMC57@DA?>>CHC?A@>BEM[^[]\\WSQPPH;53205>?@A@@;=?96::34751.,-,,<NPNK@5632:<63223556:CIGA;64446;BA822569:555456:?=754314;;;PU8(+.19>@??@A@?ACFGHGGD<>CCBBB:3<=;961/20/23//47989::99:9<DB5497/*,/AU[VOI@>@=9>HKJIIHDC>5/3:;=@ACJJA<9/&),1?NYWTL<08?73=D?:8641,+,-17=DB;65542-+.5::8864349??BNQOME835678;>@>;99877:95110..033322699988888988756:<<ACB?AA7B^^G:882/28852/,,.2765BI:4:3.0.166:<7Hdd]QDC><;;715545565552345412352-,//=B53553458<=?DGFEDEE@CVO7?F6169<=:8==<><974310/-.0:@6-,.0/-18AFFE??5*0>H/#(:E<9IK7.-./0..6<<<<<93201BH5(,5:CNNNNNMNPOOOMMLLNPONMLMNOOPRSRRTTSQQONORTTSQNMONMOQTX\\\\YSMSab[bg\\RRTOHHIIJJJHJOSVUSQORUURNLMNLKKKLOSTOJGHILMKIGGHHHGHHKNNLMMMNOPRSRQONIEEFEGHHIIJHFEFFFHIJLMLMKIIIIJKLLKLLKKJIJJGGOV]chjigeeda__chbVLKMNLKJKLLMMNMMMMNNOQRTSTVWVUSRPNNPPQSVWWVW]``_^``_]\\YTQNNVYZ]dhhhnutrtssrojguiilfea^`_^_^`n|||vgeddegiiigfedb``\\X]`ccdfcbehhix{zn\\^YU[^ajqnmidflmljklpmiovyzxmfhfektz|yaTUVVUUWXYYYYYYZZYWZfz~vuytoxcafhf`]bffkxya_pjhiicbcPHNRU[^]WY]YY]`bcflneWWRHJHIONJJGN[WJFGGHIJMKFEEFFFFGIJJJIIHMT]gqr^LKLJIIHHHIIHIIJOSSNPQNLLMMPUGMVLGJSIIIJOKJLMMKHVm|{nXOMSgsu}{maXSQOMLILPTPGWeXUXXgaOJKLR_mrjUNHG@Jf\\[]dXPPWVSQPQQRRSSSSOJKKLJI[rncphELKLLMQRROLKMQUW]iqXMUXZgiNIJRUVUUVVWWUTTPS\\`[VUJIQQPRSRSRPONPRSSSRRQNUTQPBCEDFHGEFNSUUSRRSWY[LV[JEPQLKS\\^^`_SRQHMY]^]TIKHBPYWSNKKN\\eWNV\\VUVUc^NNQRUSJFFHHIJLMPOT\\de_[]XNKLMNMLMMMJKRYYYYXaxv`MWsymd`ZVTRQONNPPQQPPTWVTOMLLIozv{|~}zpdcbba{|uwzztx~ype]]tzgggnfk{ssxzxtoptztqh^]aa``^YUUWWYWTQTXXXXWRSVTQNNLJHHLOOQSUURQQPPPQRQPSTTRPMKLNOQSTWYY[ZZZ[YXUSUWWUUTSQPSYYWXYZZ[[[\\TONKHGGC?=;<AACEIFB>=>?@;GHB<OMKLOQQPTXXUWSKKLK>8ALKHFEDDDEIKJQ\\WJOW\\grqqtrunOOXYTPPMLMMNMMMJHFHJMROH@DUTA78:>@BBCB@@AEN\\`[YWJ=999=>???><;;98655689965445568?9<==BGFFIJE?BHJIFDA?>>859@=8535433113333218?CKPTNJID<=???=;>\\sicc]L=567;;8>=7=@C?8589636;8[m\\D9403?NSVZNDFE;2421/4M_b]WRRPJKNQOFDLNH?::>ACCCDB>:;;98777867>A?:9=>;9;>??:5@OXXXXY\\M57@ABGKIA;>:65322=IIA@BB>;<@FHGCB@:;IW__]_`[VUQF:6663.18:;<;:6:A<7::54651////3FOMJ?45668:875321124:BC>9400356>GE;55534455655:?6/231004<??GD0)-/17:;::;>==@DGHECB?;?FGD?<42>?>;7332/,,.0/5<:785223511:@96:7/)+,?ZbXKD@=>=9;CILKJIFCA936<=<;;<?CEKVM0\"+7ERY[WK>8BKF87;:88862-*')/38B?1,..+*(',4:964431.1=@?JPNIA9;:88:?DD>;99999;9764100/0/.06988866678:=;:9:=CF?:A@:<68MYTKFB;40257774..3;?ADD;13201117>7118P[]ZXYSA;9865444445479754699766448?E=3676668::79BFFMQNQPGFD>B>4:BCMSJDKNIB:56887-).85:D:-**)-,9?CDHJ@?3#';A-).15::95+(+.//-,4:<<;;7463076)'.16EONNNMMMNNNONLJLOOMKKMNNOOOQSRPPNONNNNMMOPPPNLMNNOPPRSRPLFIW\\UV__UMNNIGHJJJKMLLORSRQOPSUSOLKKJIJKKNQTUQLFGJKKJHFFFFFFDGJNMKMPOOORTTRTSMHDEFFHHHIHGFDDEEFHIJKKKKJIIIJLLLLLLMLLKLNNT]a`cifdbcgdaaabehf^TNLMNLKKKLLLLLMLLLMONNOQSSUWZ\\[YTQPPRTRRSRX[[]_befddda\\UPOTXZ^gd^blporttuttrxqqzpfecbekrw|~yxvwtvqe^aacilmmljhebb^XX^^[\\agikkhjomu|}{gVe}znd]afkkkiddkjgfinqqpqs{rihhfgn{i[YXVUSTSSUX\\][XXYYSXgx~uuyuwtihgge^]aefhitlbmnlme__\\URSRSX\\^]\\]]^abdfgggg`c\\GDHINMJJHGTXLFGGHIIJIHGGFGFFGHJJJJIJLXflx{fNKKIIIIHIIIIIIIJKKJMNPSPRQONVkgKEHHIIIIILPMMOMKPermhg_TOVdfn}sjaWSPMLJIMOUXNKOR[\\[nRNLKMMP\\nt]IQNIISxwvUSSUSPNLMNMNNHHJLCCsiTblQFKMOOMNQVXURRTVX\\ty`TWWZevcKJQVWUUUVUTUUTQZmsiXMFHKPPQSRTSQONPRSSRQRRS\\VQPKHECFGIECKSWVSQRQQTXNIIAENNJIR\\_^ZZNJJIRXWVURJCCAJTZZZWRJWm`Z`_WSRSSQKJNQSOJHHIJLMNOPRY]]^]\\[UMLMONLJKKIGINSWYU]wjajzzrkea\\WUSSRQQPQRRQPSUUUSQONT{{pfgg`wwwvwrruhdg^\\rvhggbj|wy}|xurusxynd]\\ada``^XWWVVWUSPVY[ZURRTUTQNLKIGJNOPRUWUSRQPPPPPOSUTTROMMOPRSTVYZZ[[[[ZXWUTUWWVWTQPQUYYWVWY[\\]^_TJGGHGEC@=;<<<=@ABBBBAAA<BE@=IMILPQSUX[YV[XNONPFCINMIGGGHIIIGCKWPCFKMYu~~~{y`_c]WRRSRPMKPTUTSLECGNJEGOZYI:9;<?FECBAAACN[]VUUF:;=?@BA@>=;<<=?B;5799997767569>:<<;@HHHIHA=BHIIFB?=?>75:A@9323342/3=?:7977:507B@@A@<;>CEBFQ`fTFN`aPA54969DA?BCCC<79:86897Qs`A?;4..8FRSFHIFD@602204H`fd^RPTRNOQRN?>LOGA:9=ADB@?><:=?=;:9:;;=CHB9:=>;:;<==74@LHDB?>>51BTVUVVO@821/02325?HF@?AAABEHHGCAA<;IZ_\\[[ZYVQG;44444//25998759C>421/122100-/>JJHE=;<8787555520/,-5>=97521266;HIA;9643577765>7-03/2724==@G>/,/.-/1137::89?CA?:8876;HD=GF;4:8673/23.,-034;@;6641234436::8972,++8QbZG@>;888<BHJKJHFEB>9:=><;953>DOegK+->IQY\\WJ?DIMOHC=9;;950+,-.025:7)&**'&'(067632790+,372;FB><:<:76:?BA<<<<=>@=88853221/-+,3:<:897557<@?@?EOKDDEII=614?LSOLHC>525:=<814:@BDDA=9974459><0.1.5DP[__UC==;989;94379?FIF9269::7569=B?;86557:;:98=CCDEELN>369736FI==CA<;<<:1.7984/),769C:/*(%'1@<??>A;IM2!0;70414@=7620/./.,.5:=<<;;85466-(/55;GPPNOOONOPOOONMNONLMMLMNPQOOQQQPPPONNNNNNNPPMLMLMONMLKLKKJIMROJMXXOJKKHHJJIKNMLNOPPQPQSUTQNLJKKJKMMPRTVRMJKJJJJIGFGGEEEFJJHIORQORVVVWVTRKFFGHHIIIGEDDEEEGHHHGHIHGGGJLMLLKKLMMLLS\\_YY\\`a`bdegfgijjggkmh^TMLMMKKLLLKKLLLLLMLLMNPQSVY]_^]\\YWWVSSSRSSUW[`egggggdb[OMY]]jh[Yaedgopppqrqp~{sy|voq|~ujedddgigca^]irnmrtqmhcba]\\_`[Z]fknqkefbajja\\hyr]UXig\\beghjiechlgadqtqqnpy~xurjcdnw|`[XWUVVTSQRTWXWWXYZWW`nx{qw}tsxyq|zrojgfd`bbcdddhgclqnn_VVX[ZWTSTX\\b`^ehhgimmifghg`SJHIKKKKJFNUMGGHHHHIIGDFGHGGFFIJJIKHMtn]m|kPMKHIIHGGHIIIIIIIHIIKJLNRRRV`cYNKJHHIIHHPXPKNOMMUVYfndWQS[acp}|qg_VROMLKJLNOSQNNY_\\\\R~HPMJLNNvpT`YSVZV\\ZnÂPKTTROMMMMLLLNRJZɒ^U_\\LMTSRQNMQTX_faYXXX]st]TVXZaxnPHQUUUUVXX\\]]XPZlvwlYWa_ULPSQTRNKKMSSTSRPR\\cXQONLHFEDGFBFSYURRQLIGHHEEDHKLGEP^_[USNKILOORQLGFDA@MTVZadcRHZkmkeXPPPLIFHKMNLKJIIJMPPPPQW[ZZ[[XTPOOONLJJKIIIJLOUV]vsomwyqkhc^[XUUVWURPPPQRSTVUVUTPMcyqljgryzz{to{vd`gq`]pplidoy}{wvw~vvnd]\\_ab__`\\WWXVTSRQRWXZXRQSTTROMKJKJOQPPTUVTSRQQRPPOQUVUSPNMMPQSUWY[][[]\\[XWWUTVWXYXROQUWXXUSUVY[]^aUDBEHFBB@=;:99:==@DDCBBA=>A@C@IKNQQRVZZWUXSKOTTSRQPPKIIKLLHEB=FOE;?EEGi{k`XQQTTTRQICGORUYUJ@?DEJVZRSPB:;<<BBCDDAACLY\\TSVF<=???@?><;9;<@FH@:::<>>;;:75<AC=:99>HKIGD:;CFGEB@=>?=75:A@95555443<IJC>??=>:57AGHEAACFMQGCQZOC;I^^PD76;8>GFHIJIH>69<99:::AD632336;FOQPHBEGHJA229>AHZbd]JGMPUWTNH>ANLDB@?ADFEEDCA??@?>=;<?AFIEA;:<=<::98736CD;6887701Ja`YW\\TCAB;459;98<DE<8>BFHIHHFB@BDDHRXVVWVXSD:7543341/2466785:E=4,+,02222215FNHDCAAB@:963666431-*/7:865432545?B<:9645799:;=@8452.5:3377BF8,-31/0124<A=7;A@=:656689AB59CG?60244/<E2&+6::EJA:621333687677841//04AQVG:78644;CGKONJFDCA?==><<:::A=E]h]=2ELJUZRDAJLHOVSD9==52-(.842640.)())')++/0/.-.78.+02423624::98658<>;:<>?@AB@?:656553220/2:=;897636<@>;58U[VZYTOF8/27?PPIEBCA=>>??;:<>@?@@CFGE>767;83325?<2Eag_RGEJJC??CD958=BJQNC832981/.03>EA>AC@?AEHJGA@BCA:781%%-1/2?=-#%6HB52/*+6:40/-.569?914><(0H>DD33<UfL)0>@;:9:=;555651/.,/48:9::=92164+*0458@RQPSTSSRRQPOPPPOMLMMLLOPQPOOPSRRQOONNNNNNOOMMMLMOPNLKLLKKKKMLGIPTNKKJHHIIIJLMLNOOOPRRTWWVRPNMKJJMMNORUWUQNMLLLLJIJHFFDEFECFLQPORXYYXWX\\XMHGGHHIHGGFEEEFGHHHGFFFEFGHJKKJJJKMMJNY]UQW][Y^cefhhjllljjllmleYLJNNKKLLKKKKKLLLLLMMNOQSUZ[Z[\\[ZZWSSSRSSTTUY]][[\\\\]`[SLXeaku`X\\ZZ\\gqpdadhle]hngn}zyuh``]ajnkdaa__mvpqz|yrjdced`^^\\]`lppnja^`ZTU_^a^^]\\ZZajf]]bbbehgecempedqysrrswvffowmUY[VUVWVUSTUWVVVVZZUW]go|}mp~|qpymj~zrrjfca`bcbceecbcirqoaUUXYYVTSUW\\`ZZehfflrtqjehhcTKIJJJJJJHLQLIHGGHGHJHJKKKKIKIHFJJICYgT\\mpYPLHHHHFFHIIIIIIHIHHGILPLOWVSNMPSLHMMLHJTXRSSTSOKGGXhaXVUZ_ckuvnf]UQPMLKJKMLPTRQX`Z^\\abHOLIJJIjuvYl{j[XURRFlǻsNTUSSRONLLMOQNZԍ][Y[YQUbc`WMJPU[cmj]ZZZb{sXSVYY[pmPHSVUUUVY`egm]MWeivzpksjUJQSQSOLIILTTTTSPP_i^QNNOMKLLNNJBRXTRROKGFGGHJKLJIFET`^ZXVRPSVUX_[KBED@G[c__flk^IIgzwjTLNKIGEGJKKKJJIIKORQPPPV[ZZ[ZXURPPONNLLMLJKLMMQVZezzsmkxwpja[ZXWWX[XRPOOPTXXVUUTUROqztroq{y|~swqhdhjjcimmjep|{xwv|tld^_`a`____[WWXWUSTUXWVVUSSSSRPNLJJLNSSRTVTSRRPOPQQPPTUVURONNOPRUWXY[]\\\\\\YYYXVUUVWXYURQRTVVWUSSTX[]^aUA@FIHEDB?=:9:;>?@BCDDDB=>?@E=BLNQQSXYVTSTNFNWSXVMNRNKKMNJDA@;ERHACBIXnlfsk[OMSTSTSQLABEILQNC>@FMYd]C>D><<::9:BHEC@AKX\\SNOA>??===<<<:8:;>ACB><:=B@<=;8;FJE<989>EJGE?8=DFFA??>>?=64:A@;865579>HROJBBCAAA@ACIKICFLNQRJGML??EW]VF87:=?ADFGHIGD=7368:;=@A86=>>?GIJLIDDEFQ[c\\H=@D=9JPPTKFNVVVTNIEMSI@CDCEHIJLLHDAAA@@?>>@CIJ@55:<=<;:9842;E>768:9:67Nd_LKXR=@LG@>CC@>@DGC;<BGJKKIEBBFHGFGKNPRRUL=87555564345667769B;5.,/4776654:HKGCB@???:6556677654013675555335667445554689<>?;863/.572323B>4-06756534>A83:C><:<BDEFA:D=:>GH><>;84>QD*(7@?GOJA8132114975555322365:DI=8=<4269AMTYXTNHDBB?=><:;AEA:8L[VC6DLDJUOCAGJHJWVD<?<51.(.651661----,*-//-*((-010/00001.-.5<:76556798669>ABB@@:65653224522786456879;>;2*3Qcf_PMQN@3//0@OHB?DA=@?=<:==;<<<=@GLG9444521678CM;7Ui_[VNQPLDILF936;?EIGJLJC3+,+)*4GSRSXWLCDJMO[XA8APRJE>3+-/+,,,-48BVM4*.//26420./236:97>SX<+KRRRFEQah_C7ABFC;7613011/1/-,.0243333/*+-,)*-1417TTUXYXWVUUSQRSQOLLKKKMOPPPPOOQSQOOONNMNNNMNNNNMMNPOMKJKJIJKLKJJKLMMKJIHHIIIKMMMOOOOQSTUXXURPNKJJLNNOQUWYXSQPNNNNMMKGDDCCCDGIIJMORSTTQSXXQIFGFGHHGHHFDDEFHIJJHGGGFFGGHIJJJKMLJR[QKU]YRT\\bfhjkllmlmmmlllnk`SMLLKLLKKLLKLLLMMMMLMORSTVVVWVWWUSSSSSSRRQRUWWWYYXWWVUX_cdqtcZYYYakuma`bb]\\^a^l{qgfjnuxnbabbbbmvsy{xuoeafga]\\]akyypeimjf_Z]aidbcc_\\WWVX[\\__aceeedcn|smquns{wu|ypjpwxqi^``[XWUVVUUWXVTTSUUUWZ^eotlbo~zuz|cg{wqjca__abbcffedbftsn[TYXWXVTRUWY^TXfgdemuwvre^\\\\PJJKJIJKLILLLLJGFGGGKQ[ZRLMUWKFHPSOLYfXQLXl]QKHFFGFFFGHIIJLNMLNQTSPLflVLKLMWNGNOLHLVVSUWVXQJPLK^^YXWX^bhlnle[TQPNLKJJLJNVVPR^adoeWPMMKIIKHSsY{eUWksf]YMLIQfXXWUUTPMKKORKGU]\\UROKNWiq`MHIPasl_Z[]]iYQWYYXgmRKTVUUVPTX[abWTZUTevunn`KJPPQPNLJIKTVTVSPOP`cRMPRRRSY^`]QQVTSRNJHHIKVRKJHFDEW^ZeqaYPU_]ch`PFGCBNdnninrmi]Vgyn`]WNHMGFHIIIIIIHHJNRRPONU[Z[[YXVSRQPOONOONKMNNKNTY_hpxxpgdvaVXYWX[]YSONNPV[YWUSRXQU{vpr{}|yq}ydkrjehlqlfar|zvwwx{{jda_aa__]]]][WWXVUTUX[YUSSTUTRPOMKJKNRSUVXVSRRRQOOPPQRTUUTQPPPOQTWYYZ\\]^]\\XWYXVUUVXYYTRTTTVUUVRQRW\\^`cW@?HKLLKE??@?A@@@ABEHGFB<<>@E==MMOPSZ[XUSSLJUWQ\\ha[VPLLNOE>??9DSMGGANnrkQPjqkg`VUTTSRRMFB@BDA8=JOU^g\\>58::99777CLGC@AJW\\RF@<>A?=<<;:;88:<<>@EE?<CD@=?=:CLH>99:<>ACDC=<?DFDCA?>>=;64:A>>;4358>EKRRMFEFDCEFEEFFD==A??@DE@95<ERUYO>;>?@@@BBBA@>>8007<>ACC@ABCBABGPPKGEIQbmnnkZA717LOL\\`[\\[WRRRQQXYI>ACDILKKKJGCBCBA@@@?>@B<1.29::;<<<823:<4468:9:68NaP9DSG7:CDBAFIB=CKLKFBFHHIHCABBFFA?>BILLKLB:76566688676656779=87669<<;;:878BJFCB@><;62587878887532455555436=;3012554468:<;73220/476413:75469:987=><;514:9APSSSQRODFC>>???AD>647HO;.7B?@HNI;067./38853333458865:;5:B8/087@R\\__`\\TGAB@=><;;>@@;2:MOA67CBGPLEACJIGKKC@A?:80(/5506920221.-/20.../3541/00-..-06>=;754444464/6<ABB>:86310.001123430/27;>=:>90,-D`dQADFB@7-*(-?I?6>?349<;;<<::9:<=?D=2003774367:LVAH`chg[POKFHOD6238>BBFWcd]J93101?Udghh`QGFIMS[VD:<FW][[S?/165)0ERMCKL6'-+(/1430/0124787;KZTDKVPRX_kkgoT1?KPG73121,*,-01//.-,--+*)&&('()**0401UUWXXWVWWVTSSROMKKKKLNPQPPQQOPRQNNOMNNMNNMMNNNMLMNONKIIJKJKLKKJIJKMKIHHHHHIKLMNOPPOQTTSVXVRPMKJKLMNPRSUWYWTQPPPPPPOKEDCCDEFECEHIIJKKKKLLLJFEEFGHIIIGDEEEHKLKJHGGGFFFFGIJJKLKKPQKMXXPNRXbikmnmmmmnnmlkllnql`VNLNLJJJJKLLLMMMLLMOPPQSSSTUUUTSTTSSSSQPPSTVVWXWVUWVX[``ekg[ZZZajxwa`_^[ckU_ZZoujen{}vlc\\_bcedkxz}qrxumcbc`\\[\\aoz{smoy~xmeacbdbab]jcWYX[\\aihbbddccl||uvmhs}wvs~}lekpvssqmeejf^XVWUTWXVUUTRUXZZ\\_cjh^apzyzo`d}vkga____``beghieesthYVZZYVVTRTWY]XVehdenvwwxpZQMLHIKIHIIJJJKLLJFGHG@KPX[XQR\\ZMIPUUQPWQMNFJ^ZMIHFEEGFFGIKMRVURPRTTUWas`LKKKM[OFKKGGNVWVWXY[ULV[RW_ZYVUZ^bfhgbZSPNMLJIJLJMWYPK]rtumSKPMKJKLHFALsLUU_syl[NKJJOmU[[XUUTQNLLOQMZU]]UXUONSYki]VOKXzpUX\\]]kZRWZXYbjPJUUTTSOQRPNMPYZNO`mofcRELPQPNMRRQLUUTUTQNFPZQLNQQRTV`hgaTTTRRMKJJJLTUQIFDEFY]YmqmiTN]]^]WQMHCEMXitsqqlppdefTLXfaRLGGHIHIIIIHILORRQPOUZZZZXXVTRQPOPOQRPLMNNLMRW\\cfhlidbr|ZRWWXWY\\YRONMPUZYWURPVM[{wr}}{rwzsmuulhfjmkhgy|}~wvwwvvreba_^\\\\_^ZZZXWWWUVWWYZWSRTTUTQOOLKJLORTVWWVTRRRQOOOPQSUUSQQPQPQSUWYYZ[^^]ZVVZYVUVWWWWRRTTTUUVVSPQW\\]^c_LDJNPPQJBCILGEBBCEHLHGA<<>?E>;KNPPSX\\]VTTPRVWSYnxui]TOOKFC>;7CLGIKCAZTCdPObmsoeXTRTVRSQJECDDB>@LUX^^Q=689:88678DMIB@AIW]RB9;?@=<::::;:>==<=>DE>?CA>>@ACJI?67:>><=?@A<;=CDCCA?<:<:539?A@9337<AFLRRMEDFEDDEEDB@;873017AC888:BEMVTB=???>==<>=;;<92269=ACCCCDDCB@G[d_XUSWgspr}lA23=XWUfnfc]XRQSWZ^ZH=?CFLONKIGFDDEDBBBB?;:<8/.3788;<=;822321368:9942FXF3@J>3357:?FKD=ENMGFIKHE@:5>GC??98;?GJHH?>:87677898766667788:679<>=<<<;877>HFC@><963/38:887775433555555545?D9//146446798875553129<4,.35789;<:9:DG973//-8M__YXUTTNFA98989;=<:87<IH;;DD?@BF;059..15732433356544534982,197=LXacdeaTFAA@?=;<==>;10EK?64=BCMKD@>GGCCEFEEA;8/*.36248435530.//0003335431/011223;@>;865543342-2<ADC:64310/.000/0343/.15;@=9;71-,6PSE@A;8=6,(,-;G>59;507;;9:888889;;93.007?@81/10I]EEZeieWNMJEFKA4026<@@E[filiaF<CAL\\aacfaSHIGIJJKA:;=FRW]]G22@??=><::;@60///.034200/01476=K\\[JCFEDR`aQTY:1ITD200/02.38632210.,,--)&%&&'()))/30,UUVVVVVWWVUTSQOMLLKLMPQQQQQQQPQQOMNNNONMNNNNONMMMOOOMLLLNLLMKJKKKKLKJIHHHHIIKLMNPPPRUTTUVUSQOMKKLLLOQRTUUVUSPRRRRSSQNJGFEDECBCDDDEGGFGEEHIFEEFGKLLLKHFDDHIIHHGFGGFFEEGHIIIJJJKJLPQNLMPW_fijmmmmmnnmllllmprsngZROKLIIJLLLMMMLKLMNOOQQQRUTSQRSUUUUUSRQRTUUVYZZXXVZWX]`\\_\\\\]]fuyqd]^`_T[ik_Y]\\XZgsoibkyuc]^^_aaa_enpqrlp{{qf_\\]\\[\\_gpux~|}ulhfdcdabzw_[[[arwkeegeeeiz|vjvzwzzc_jou{zvokmtunf`XWUUVVZ\\[]ba`^^```bcbeqz{yne``]\\l~ud_aa___^^_`ahoqmdqr_\\ZXb]RRSSTX[^YVdichqxxvx}eMHKJHHHHJIHJJJJJIHHKKIMLLTYZYZRMPYYUSPQLHIEFSTIFFFFEFFFFGLVZYXVQPOQNWfaRPRKEN]PDEFEGPVSOOQPOLGTa_^_YUSSSW]`b`]WROMLJJIIJIOY]SIUu~wp[MONLKJJIHHHuiKNPSfcILKKFKITѿ[][XWVTQOMNNnYS]]]X\\\\YWTLMd}ycQNhfNWZ\\]huXSWY[\\cgMMWTWTMNRSMLNQTRNPYddTWOFKSRPLQ[^^STUSUUROEFNRMKJJLNMQ]dg_TRRQLKKJJHES^XPNIIW^ZbelxbMSQLLNPQJCFQS`ruofbgnbVVSQMVibJFIIIHJJIIJLPQRSRRSVYYZZYXVUSRRQQQSSPLLMMNPRUY`a]Z_flmicaZNTXXTSUZWNLMMOSXWUTQPNJr|z}}zuxlku}tefmmf`i{}x{ywyutnida`^[Y\\a]UXWWWUVVWXWWVTTTVUTSPONMLKMPSUVVVUTRRQPPPQQRSTTSQPQRSTUWXXXY[]\\YVVWYXVUVVUTTRRTTTVVWVRPRW\\\\^ccTILRRPQLDEILLKHFFGHKHGB<<=@EA<DRQOPRVXVUVWVPQXWS\\jsqdTMMRM>88BLNUZO<<9>MlgY_]\\__[VSPR[QNRNHGJMPJDJV[VKE<678989879BLJCABHX_RA:=>>;:989:>BFB;9<@MPE:9:9:AHJIA956;B@<<>??<9<BDCBA<77;:548?EB>>?AA@DKQPHDDFFGC?>>=821358:>BB@B;4?DDGOEA@?><;86<>>:99;8539>@ACCCCBBBEUde_\\XWamljl_?,.Gc`Zloed_\\VOQX]_VB8=EINPNKHGGGFEEDDDDCA>><746667:<:742201468:;;;60:G?6<;3/.--0:FJFCHLJEFLMJA6/7ITNC9129@GJHFA>=<;9:;;;97776678::7558><98999776;GID=9<70/.059984564245543444444<F?2-/3876877789;<:734>?1()/78;<:<;:AKG963,)4J[]\\\\ZXRJ@;=?;;=<>CFGHHEDECBJLA67<921000234218500/-/356447,+/4865>M[egee`OBAC@=>>>>>;3.:D>9658>GGA=;??<ALPMKC8/.0016447556730-..//0/10./001123203<>>=;::98742/+,4:>;422110//000/015731025<;84200.);B?A=999307<<>CA:867::9867568::;=>:/*,3>CE@5.',K[LIOSV]UKMJDC:72.38;@ADPT_vQEYMMY[Z^^[UGFGA;AC;8==8;CP\\O408CI<.*.5526748:0.2233.'+/269CVcV=269;AHC546-7QH0(*../3;AA;6222344341)&%&&'&'().10*UUUTTUVVWXWUTRQPMLKKMPQQPQPPOQRQONNNNONMNNNNONMMNNOOOONNONMMKJJJKKLKKJIIHHIHJLLMPPQTTTVWWWTROMLKKLLMOQSSSSTSRRTUUUUUTQNLHDBBBBBACEEEEEEEGGGGGHJLMMNNOMLJHGKLKJIGFFFFEGHGHIIJJIJLNMKKKOTV[dgggjmonnmllllnnoqstpmh\\NHHILLLMMMLKKLLLLNNNOQRPNOSVWWWWUSRQRSTUX[\\^]]]WUY^\\[]_`_dkmmjb`bb_\\WRW][\\\\XWcg_c~sc]^^_ccb_`cb_fnmpvvne_\\[[Z[]^dlswy{~wqrlhhhr}wf][[]bb_bhiefgkyyxw~b]gjormggjlmpttupdZVTV_fhinrlihffdbchifju||yp`]\\X`ohY\\_`^_^^^^]]cutli^S_`VidQQTX[YZ^\\U`kdjwzxvw|nOFKJFFFILKKKIHIHHIJNT[ZUIJPTZVNORRSWWOHGGGFHMSKDDEEEDEFDGWa[Y\\WSRTRLis[PJEFR]TFHNOPUVROOQOJGFN\\b`\\WRPOOQWZ\\[YUPNLKJIHHIIP\\^XLJ^t|yeQOOLJJJIJLGWXLKKHIm|FLMLKLJAf^^\\ZXVQQONJeS`_^]\\`bb_VOeia]\\UTUX\\]gyiWUWY^_e\\HSXVWQIIMOLKOPMJJLN\\\\GFIHJRRLFPX[cVTTSUWTPKKORNGFEFGFGMRVVSQRPKLMLJHAH[gfd^ZWWX]eq|tXGDEJPTUQFFY_^iocYVZ_WLRZaaYZ\\IGIIIHJJIIMQTTTTTUUWXYZZYXWVTTTSSSSQNMLLMPRTSTVUQMPbnhWQMGKTXTOORVQKJLMOUWUSSPMLM~|}~}}|fgy{omuxwkcoy{z{yqhhqsleb`][Y]]WTWWWWUWWWWXVRRTUXVTRONMMMMOQTUUUUTTRRPOQQRRRRSSSSRQSUWWWWWXY[][VTVXYXVUVVSQQRSTTUVXYVQPRW\\]`efWHJPPQRNHGHIJMMKJJHGFEB>=?AEB?BQOOJJNRWXYXSIM\\aL?G[lk`WXWJ<9:HZace]I<<KROVW]^[XTQTURNPOK`dN@FGRYPIIPTG;;;88789;989@IJDCBFX_N><>==97789:AFEBBO^kx~^:4748CJIF?:66;CC@=>@@><>BBBBB<9::8::7;DGJNNJDACKQLDBEGHJC86873159=BCACFKN<,ATKAEHGDA@>:78>A?86:=;515;=>ACCBCCB@AGOSTQPT[[[VOA02YpfcsscXYb[LJU`]O=7>GMRRMJIGGGGDCDDDDFHGA><;:8889<;502444678:<<=<9;=;992....--4AFDHPMIJLMLJB20L`^]U?--6CKGECBAABA?>@A>:7888789<;643465357777747ELFA?>=:83,/3:910574244444333557:960.2:>@?;657<=>>:37A<0+-495./499;DI?893*/J\\^Y[\\XQH=319A@BLNOTVTTTSLDAENPC42784.0222110022.-,+,142244..285313@R]b^]\\PEBCB?AA?>><515;<<:316@@=<<;;9<LTL>852/4416636668:50--.-0364/+-/0111/004=>>????==:5/,((-00/-////0//--../015741..3861..//.9<776773/7=>DCDCB:25;<952368:;>DGIMLC>>CEFE:-&9VWSPFBFUOL^OC@./0,499?BBHALwZAc[JVYV_]WXD/497==42:?938<COL4*34=?+,CIFFCAA8*+1123,%(,.9FGJQF635<:6782-.2:?1'()+/7<;95.-035668:80'$$$$&'')*,..*TTTTTTVVVWWVTRRPMKKMOPPPPPPONPRRPONNOPOOONNOOOMLMNOOOOPONPOMLKKKJKLKJJIGHHHHIIJMNOQSTVWXYYVRMMMLJKKKMOQRRRRSTTTVWVWWUSRQNICCABCCEGFFGGGGGFGIIIJKLMMOQSSROPRRQOMJIHFEEEFFGGGGHIJLMMLJLOONVceabinqqpighhilmnpqrssrqri\\SMLJJLMLJJLLLMMMMLMSVRLPWZZ[[XVTTRRTUUX_bccb]XWZ[YY[_```aejhfecb`[Z[\\\\ZZYZgmfuygbdbdfedbceaanrlkmlgeec^ZZ[\\]gqqmpx~urleiw|pb^\\XV[_gnljmonim}zz{c^dgid\\Y^cgjlopqup`VS^osmptromhfgddjjihinstuyoaa_eri[Z^^\\]^^^^_]Zpr]_RK[bZfk[Z[_nkYZcX[f``n{xuszsSLNJFFFIKJV[PGGIIHIMYcaTIGMQTRQOJGKWVJEFFILLJQQEBDDDCEFCF^jfdb[[[TNX{OEFFHMWYPT\\[WVVTX^``WLIJS^\\XTQNMMORTWWWSOMLJIHHHHINXWTOKM]ryp^RNMKJIIIJIJLLLJIEEbeMLMMKLMCgb]fm_OJKOQNfLW_a``_agj`VvҨwxn^ZXYZ[^jpbVUWY`ZcZX_ZYSMKIIKKJLMHEEHLT[I?FMGPQGBILN\\WWPSSVUPKMPRNJFGHIFFEDDELQRNJMQPMJIJUfnqtq^PUZiwsodKEKQT]c^MG\\hbbf^RMVc\\ONSd~{bOFHHHGHIIIIMRTTTTUVVUWYZYYYWVUTSTSSSOLLLLMPUUQOMMLLOX`_XTPKKSUPKMPRPLIIKNTWURQOMMQ|lew~qnu{rhv}x~qebmyvleb`^\\ZYVUVWXWUVWVVWWTUVWVUTSQONMNOQQRTUUUUTTRRQOQRTSSRQRSSSRTUVVVWWXY[[XWWVWVWUUVVQOPRSRTUVWWRQMPW\\`bfgZGIPRPQMJIGDHLPPNLIEDCB@?@ADCCGMJIEFMV\\^YROLNYc]PKHOelbSI@:89Qdgec`TEAIRUVXZ[[[WUTSQPNGD^lUDFGQXPJFC@<8::8888:;:89?FECCBDTZI><<<;988:;;<?HWh[4554<FHFE@965:CG@<<>>==@BBEIJC?<99<>:;CLPUQHBBDHJECHLMJG<23667;CB@@@?ABM[F,B^VFDGLONKF@?EKJF95775312689:=ABABCC@?CJNNSZZTOMLH:Glqh\\_hZCBV_XORVPE@DIKNQQMIGDCCDDCDEFEFGE>;;=<::;<<<4//4:;85568:=?A>;?=3./-.110/7AHPTKDINNJFB51MbdeaN5.5@IA8?FFDCEEBCEEB>;:988787633323457777766@LMOONNOND:88:=958==96634432235654686:IRPD>:87;=<<848?9106;=7/,-/03894470*=[^YXXSNID?<==@DHOSRQPNMJIKHAAMOB42563121232010-+,././23.,483/363,+-7FLQUVVPICBBAA?>==:415:>?>9359;:;;;:66FM>.1:60693553578::6,*++,.8;4/-.01111/015=?BGFC><<7-*,)))()*,//1011.**+,-,+,011/-.03410/13530,+1401889>@DDC?:8568529?=98=KSOS_YPFDFFD8-+ASTNB;?>HPVgT?;40.+4?==BHNA8djAYUCZ\\PZ^V^\\?157<A=46;<:5-)9XM.'7GH?6:LOC==65CK>21,+,-(,?L?1155:;<7478625675,(''+4=:0-,(,59656:94,&####$&(**(),,SSTTTTTTUVWVTTUPMMMOPPPPPPPONPQQQPOOQPQQPNNOOOMLMOPNLNOONPNLLLKKKJJJIIHGGHHGHHJLLNQSUXZZ[\\[SONMLKIJKMNORRSTUVVUTVVXXYVSRSQLGBBCDDEFFGHFFFFGHHHIKLLNOQSRSWXTRQPONJIGFEEEFEFGGHJJLLMLKMNMOW]\\\\cllmlj][a_`immnqssuuuwwxvl]SMKKJIIKLLMNNNNOTZYTTXZ[\\\\ZYZYVTUUUV\\cecfea^[WWXY\\__``aceddca^^^^]]_^Zboml|rggdcdddcacaeqskhjkhinj^XYYZ_jsvupt}ye``mzq_WZXYejervmopploz}}~pabda^``^ahnommoqiYSdwskmnmmkecb_nrigghiklmqtgdfmtj^Y[^]^_^^^`_Xd~lQVZUVac`gdea\\drbScd[jVU[qzqnwtTMNJHHGJIFSf]JGIHFHMY_VJHJSWVWZQECLRKEFFEGJHFNVIBDDCCEEF?VomjhegfZiiLEHGFGIV^]_]WSRVY]`\\WPHGFO]]VSPMLKLOQSSSQNLKKJHHHGIKMMLKJIKXgngWLMMKJJIHIIJLKJJJHEIKLLLLMLFLmlPPPUYQ_@OU]cgheachacϥh\\\\\\[\\\\`oqaWWX\\]\\cfmeV\\LIMKJJJIHHIFBJQU`NBHQJOPHCIJLQTTNSSVUNGHMONLKJLMGEEDBBJSRKJNTTPHNRT\\fnxw_PWZeviY]WPRVQ\\mjTJ\\lla[ZRHUwvXIHW|YGGHGGHGGGHKPRRRSUXXWUVWVVVTRQPPPQRQMNOONLNUTNMMMNPTWWY[]XOKOQNKKMPPNKKKKNQOQRPNFbxppx}mk~whgz{~|qfgs|nfcbca]ZYWWVWWUUVUVWYVUWXXVSQQQPNMNOQQRSUUUUTSRQQORSUUSQSSSTTUTUUUUWXYYZWWWVUTRTTUVVQNPRTUWWWWWSQJPX\\^`bf_NLSTQQOKHDBDHNPPNLGDBAAAB@ACEDGH?=DOXUVUMJPSSU[b`M=P_U?:::9A\\gca_`XD:BPVYYZZZZYXTSQPONEDVXOKNRVPKC;:<=><9888;?>97<CBACCCPSJB<<;99::8766Fezn;0656@FGEA<7549EG@8899:=><?FONC=;99>@?BINPQMD>@DGCBHNNKD=7458>ABFF@;8897>VSCI[WJFHKQRNJFEHMON@6553112579:=?@@ACEGJMNLR`jg^SLGE<`mYUD=IF60@T^XPG?<BOVRNLLJFDB@?ABCDEFEEEA=:77:>?BA?<50.18;721228?@?<:=;1//-.010.6ERWPB;>LPGA?;:@L\\c]O=469;968CEDEGGCCEGHG@<99765676338;9779;:975=KPSTSRTVQMGB?BFDAACC>94232024579526@O^]J>??<69<;866:;834:@?==6,)+/34334,&@Z\\WSMFBA?>AGEBEFC@><97899>DB>DJA413543222233451,.133343/.783142*+-/36@FLSUQIDBBA?=>>=9438>@?A>:988889::65@?0(.3-+8<453149;<<;1*,-/2651-/0010245557<@FJHB::<4()0/+))*-/123565-(',,,-/./0/.,,+0632563.*.0/3566769=??@BFG=129717>>5.6IUPP^YK?AB=91-.:FD?9278@WefL<9742.6C@;AJI91KulTK9.H[QU_W[e`SD>Ne`>17:81,*-BVB4EFCMH766/,)7^}rL766:6.',FL;,-67:=<:998646785/*))+.20/12048987::51+$$%%%%%(+*(),-SSSTSSTTTTUUTTUQNPQQPPPPPPPPOPQQPOOOOOPPONNOONMLMOQOLLMMMNMLLKKKJIHHFGHGGGGFGIJJKMOQTXZZ[^]XRPOMJKJKNPQRRSUVUVUSSTV[_^XTSSRNKGEDEEFFFGGFGFFFFHJKKLMNOPQUXTOOPPPNLLJHFFFFEFGFGIJKKMMLKMPQTUTWdmi`[UPT[WT_ffglprrtvyzxvvvo`RMLKJJLLLMNNOQSTWXWWWWWYZ]^\\XVTTTTU]ddehhfd\\X[[dj^Z`bbccbba`bdeedegegjidpxmkmecbaabcaabjoollnlmrm_YY[_dfcmukgp{~~cY]ii`ZZZ[jwn_o|qpoehnjoy{}sha\\cssgabbbbdfgmwupv}yl[Viskfikkkjgbcmujfgggiijkllgdegihfc``_`b`^^adcnjMS_`\\^c]`\\bd`Y]ZS`jbvfc[^~lsuTJMJHJHHJGKX\\LHJHGIJNLGGHNZjli[LDITQGDEDEEEDFIXNDFECEFF@L{wjnllie]?EKKKIJZc_dbUQPQU[[VNIGGGELXZWROMKIKMNPQRPMKJKJHHHGHJKLMNMKIMU\\`VLLMKKKJHHJKLLLKKLJIKKLLMMOIMtglWY^On߻BMOR[dmpla[YRSädZda`_^h||eYYZ\\][bkr[kjBELKKJJIFFJGGOTXaMDLSNKNLEINMOXTNUTUVQIGKNOMLKIGDDFGDELQQIDLTVRPRUUU]pwiRMZ]cn`RVWZ]]QRadWOZoubSRRFLs}ZHFJufLIHHFFGGGHKOQRRSUXZXTQPRRQNMLMMNOPNMOPONHKSSLLMMNORVWY\\`XNKKONMLNONOXbd`ZSNOQSOLsju~ofvtgg~~q{{pkirqeabbc`]Y[[WVVVUVVUVYYVVXXWVSQQPOMMOOPPQSTUTTSRRRQQTUVUUTTSUVVVVUUUWY[[XVVXWTSRSSUUVTOOPQVYXYYWWTOGQ[\\[^^a_SMONMNMIFDDCEHLOOLFBCABBCA=@EDGG>@NYWIFMOKMOMLOXYL<?FC87=EO_tvlc]ZS>7COSUWZZZ[[YXVTRSVK=FPQQRSSOKGBBB@?>:8779@A;7=DBAEEFOORMA=99::75=LWfuwy{~mC2767:>EGA96652;HI?78?B?<87:=BA98;98>AAHOONNKB9<BEBFMMHCA@<55;DE>;=>:40474?RSPTQIHHGLPMJJJIHKK>6893002468;=>?@AEHKNSSP\\lolqoWB:Ctd;>937:526@JPJDA;7DWYSNLIEA@@?@ABDGFDDDC@=9:>BFFEC@=:887840.016<<9886421/-.01/2BOURE<7:JQC;=AE><IQH=6465368:;=<>CEDCDFHKF?;9876798219?:56:<;713;?BEHJKLMMNHECEIKGB<=>:621222358:506L^aR=;?@>:9<;97886779;<>BB8.++178633/*=QWQIB;999:<?>=>A=4/-...368:;98BA7334678763455642344455544852260*2690.=FEEIIGDBAA@>=?=958;@@@AB><:99998;96:7-*,*)0<=65206=>=@B8,/2443//322100136667;?FJG=59=5.393-+*+.0456896.((/,,.1136521112218=<60*1?>8:87547?@@BFIKE;8:714;:.&/AOLO\\O;29:3/,.0147::2264IgY8566654:BB?AG=2><Tl_^K1$1NTSXYZZbm`TirC-52---0/.FRHB;;CJA510-2WzbJ==FI<,\"4NH;66;=<==<<98642331.,,,+*)-430//167982.0.)''(('%',...-.SRSSQQSTSSTUUUSRRSRQQQPOOOONMOQPNMMOOONMMMMNMLMLMNONMLLLLMMMKKJJJIIGFGGGGGGGHIHHJKLNTVVVWYXUQONKIJLMOQRSRSSRSSSSSSUY]`^ZVUUUQLJHHHGGGGGGGGGGGIJIJKLMOPQSVQJKMLMNOQOLJIGGFEEEEGHIKLLKKMQRRSSW`eaYSOLPROKOX^]]cljelsrmeadf]RMLJIKLLLLNPPQRQQQSSSSSTX]^ZUTSSTTSW`b^_efjgZchak_TZ[^bc`^_acefgfhiiiecacqsmcjsidbabcccc`gqrnmnonrsf\\`emmb[^c^Z^fp|m[Y_ZWZUYwofbgporl]drkgtintqqpoieikhb_bcgmqw||}r]]mlefhhikkjhlvobeijjiifedccca_demumcabdc^\\`fgrJRa_bbXZ_\\[dik`RR\\f_fsobfkaNGIHGJIHIIJLMKKLJIHGDBEIIMnwRGGT^UJFEEEEEEEE\\SLNHBDFD?]vxvtsndb=GNONPHam^aj_QNPRUWXSKEDHHFKUWTROLIIJKLOPPNLJJJJIHHHGIJKKLPJHLMLMPMLLLLMNNNNMNMLLKJKKKKKLLMNLMtrYlwbTTMONRPQX`ipmaUNHIQ`ٿuafedeep{f\\[\\]_`fhi`zCEKJKKJHGGHGKOTUVJEHRRHJPKIPOM[]TXTUVUQNNNOMLJGDBDGGEFLOKFHMQSUXRMPKUrtVDJ\\`b`]ZWQX^_]UMOWUYow_MLMHH\\fSHHD`~[JJHHFFGGHJLOQRRSVY[YTNJNRQOMNONNONNNOPNMGIOOJKLLLMNPRWZ]WOKIOPNMNMML]qwria[XVWRatkx|svy}wejt~znlz}vuty}oc`ac_][[[ZZWVTSTUVXYXUUVXWVTQQQPOMMNOPPQSSSSSSRRRRSUVVWWXVTVXXWVVXXY[]\\YUWXURRRTTUUVTPOORWZXYZWUQLIW_\\]]^^]URTSPOLGCFHFDEJMMHECDDCCDB==CEGFBK[bZMGGJKHKVYVOJFBAADCDMZfo|rXJF@9>IOQSUVWWXX[]ZWUYZOEFKOPMKMLILPNEA@>:8778?C=9>EEDJKJMLTPE?;::3:SpzlqvwrdPE?9579;EF;34635?JJB;?JKC;8:<::858;78?BAJOMLOI>7:@>AHKG@BILD75<EC95797414852>IKLKHIIEJPLHJLHDA?89@?720135558<>?CILJIQWXdplft{[;0MX08958<;:767>AFKA39LUUPLJD>=?@@@AEJGCDDCBBBDFIHGGEDDEFHD@;84214666676200/..01.9OVOE=:8?LJ<8:=>96771-155546898856:>AB@CEHGA=::8867523577557:9/+14/.6?BBBBCBBABCEFD@;434421344469734@U`WD5:?@?>===<;9538;?>9AG>3./135633<>9CNNHC?98;=>>>;738>8.+//+-454422<?:87679<=<;98986667776666662..3.(1>;00=C=7<DGECCBA?>??839?@@ABC>999:;::=>===830/2:=9443169<CDB=11343337;60//0012457;ADHG<16<86;:3..,.015669750,*++,/2/17;=>>>913=?>;7/2@<384215:A@ABCDFJHC=769;3))/8GOSVF.)250-,,--/8:0-1608OA,-0247;<<<::;16N>7P^^B.*0@JNLO_YM_f_q}f=.63-.,--*7PO;26;BB82/,;\\k]PHEGF>3&(CI96756;?@=<?<50-,.0/.----,,,1.&'+./265/-11-)''('%',01/.0RRQQPOQRQRRTVVTRSSRQQPOOOOMJJMOONMLNQPNMMLLNMLKKLNLLMMNMMLMMMMLLKKJIGGGHHGGGGHHHHJJMQSRSTSPNNMKJIJMNOOORSSSRRRUVVVUWZ]_][[ZVPKJKKHGFHHGGGGGFFGHIJJKLMONPUSJFFGJMPQPOOMLJFEEFFEFGHJKKMOQRTUVXZZZZYWUPJFEFLTSNPVVTV[^YSRVTNKJJJJJKLLMOOQSTTQPQQQQPQSVZZWX\\ZTRTU[\\WW[]``Y`gZbobX[\\^^]\\[\\^_aaaabbbfnpleffetufa`a`_`beditqqrppvz{rkmqvtf][ZYYXX\\lt\\XYXYUVvhdecknja]hpmevoafjoymefgd`cdfmy|jgiechjhhhhjotukikiklihfb_^`a^\\``bmifieij`ZY_f|qLRb\\\\cTSefV_lvyhVV^[X}}rXIFGFEFJIFEGIJKLNMKHFBGJJKKK~mJKL[e[PIEEFFGGFE\\^WRIDDDDERQfxpe@CHHFJNJrp]hjYNNOQTUUSLFCFHGKTURQNKIHIIKLMNMKJIIJHHHHHHHGKT]WLJJEHNOMMLMNPQPPOMKKLKKKKJJJJKLLLL`T{dI[nfOMNEOQSSW]cge_UKGU]vފfpmibehone^\\]_`gfUZGDHIKKKIHGGHJJLJLHJAKWKHVUNRQGWh^YUTYWVQONLLLKHEBDGHGFGHDEOOOPTYPFFDLggMAEYea``[QLOS\\fZCGTTTjsYFIKKJNQIHICNxfJDGHIHIGHHJLNQQPQRZ^XTRQTWXVSNMNNMLMNPPMKGILKIIJJKLLMOSWYUNKMQPONNLLJOYbjquzzvtixvlw|o{tnkz{{||tm{{{wla[_cb^[Z[\\\\[YVTRRTV[ZTTVWVVURPOPPOLLNPQRRSSSSSRQRSTUUVXXYZWVWWUUVXZ]]]]\\YUVUTRRRTVWWWTSPSXYXWYYVRMKN[^]]^^_[\\kld__^SHHSXQOPNHCCIFDCACA>;BCFFJW_`YVRHCILR]]SFACDFJMORY`d]afZA9979FNPRUTTTSSUYZVSVZWQPLMSSE<AGFJUULBBA=:877?D@:<AGJOMLKIIHFB=924X{q{raPFLPC7663:GG836559BGHEBFKH@:<BDCCB>;978ADDFFEKMB77=<8;CC@<@MRA67<DA?C<556556558;?CEGJJHLQKEGHB;99<ACD=41235657:>@DKMIITZbkibaooK32WwG5;89AAA?=<>@@DGEBBEJOPMLH?:>@@@AFMHCCCCCCCEHKJHHEDDFHLNKHFA712689;>>920/./11/7KUL>899=C=53322221-+/6754247778768;>><<?AA>=;;:96312534:;9886.07/(+7?=;<<<=>>@BDC??>6//23344468:958GUVG85:<??>>>>><979==@=7=@83/2@A5/0:FHDHLKEA?9789:<>A>56AB:793((253224:;:887758<<=<>?<989999764312/,,.,+5=;79>A=39GKGEDC@>>??:27AA>@DDB=:89:;<>?@@A>:89864213322/2;;>C7/1247<?A9.-.0100246=DDHG9+1?<335300/.06566441.,++,,.1..16AHFE@56<>>>81251.1.-3=@@@?>=<AILJA98:6,*/24;CKJ;.).2200/../1-)-254169502<A?<81..-+)@R@6GQE6228:=A>E]S?Te\\iv\\5.9:41,*.1>SRD<?B?:40*(6GLHCGKHB6,)>J3)03446?C@>>;/)*,-///--,--..1,$%,.-/443011,'$$%%%)./-.16RRQQRQQQQQRUVVTRRSSRQPNNMLKGGJLMNMMMPPNMNMMOOLJIJMMMLMNNNMLNMMLLKKKJIIHHHHGHGHIHHHILNQQRTTRPMJKKJKMMNNOQSSSTTUVYXXXWY[\\]]]\\ZUNHJKHGFFGFFGFFEEFGIJJKKMNOOPRNGBCFIKKLPPONLJIHGGEFHGIKMOQRSVWXYYZZ[[\\]XRLHHIKLKIJMOPONPQQRRQOMKKKKJKMNNPQSTTTRQQPPPOPPT[]^caZRQSUUSUVWXXXY[\\\\hnha]ZZ[cb``[WWY]`aafrzqe^^j|pca```^_bhnlqpkutmtvms{wvvvg\\\\ZXYXXTZuqZWZZVXwqegdemg^\\ailkfn|sccknntx|wphcacefhgcn{ulcdkmkfd`eqyumppmklkifca`aa]]_a\\abglklgb_[Y]um]QTa]TZVQ_e[]hnyx`UY[T˧ћURTMGEGIHFEHJLMONKKJIFNSRNIJz±bHNOZe]RIFGGFFFGF]hUMHEFFFFF>T|oqjDNFMRRHXxj`nhUJLOOQRQPJFEFGGJRTRPLKIGGHIJKLLKIHHHGGHGHHHJVveKHGIOQMKKLMLMKKJJIJJKKKKJIIJKKKLLKF~BNQ]\\ROQG{POVVX[]__YSMGMh`ttbbdhmg^\\_`aj\\GPȖLCGHJKMMJGGHGHJFGHKHORPGS^SLPJVc[YUUXYXOJKHJKLJHCDHKJHFFFGNMLNT[TIHJNVVMEAReeefWMKLPYVFFXTPQ\\eUGILPQRNEDFCG\\WFBDHIHGGILKJKPONLIX^SPW]\\Z^_[ONPOMKKNPOMKIIKJIJJKKLMMNPSTRNLPRSQNMLKKIGQl|ryn|vtz~oip~|ojx|se[Y\\eg`]ZZ[\\\\ZXUSRRTVYWUWXWVUTQQPPPNLNPQRSSSSSRQRRQSTUVWXXXXVVWUTSVX\\^^\\[YWTUSRRRSTWYXVTSTY[ZWWYWTNJKR[\\]ZZ[[Z`kihhkl\\LPad``_YOJHOGCEGHFCFECGS[``^XVUTQPNOOKC?<<>DLMJOPNWQ?=:<78:<CMQRVXWTPNQRRRPUYTRUTZ\\YN>:ADEMSPIDHF<877?EB>?BFKKKLKIEHHC;35RpnOR[KQK>7:86?IC65679;=>??AEFA:6;CEFGHE>:::?DC?;?EA;5<@947===;:IJ9;;=ADFL?35863458:;=?AHLLKKIDBC?976:<?@=;73346679:<?CJMKLVamhNHV`[?06NT;7:7=CCA@?AFID@AELKHINNLMJFEFFC@@HRMB??@BA@AGKKIHFDABCFJKKKI@409AEGGGE<2-.13100<ON>;<766312114541//5:962.6:<=?><;==:98:;;;<;;::9630139?=;==:9AA.*6=?==>><=>@ADDB?=?=437765446;<:7=KSL9026:=?>?>==<::<?=:41224745IM6-9FIFBGJHCA@:31126:=?EKQTTRRK:035435697656664589:;?A>;9;==9754330.,--.4;=;;==AC6;JKHFECA>>??=9=B=>CEDDC>:89<;;;;<<:9::6311244331223>F:/0159?@A>50/2233335;@EKD3,6E?3.2311//04357530-+-.//.-----6EIFC;9878?7/0..../2>FB=<====AGLLE;7854434567<=84211212353**),2322348;8:EE;43--5502DL@BF>78;;;;<<9EVK=Na\\brV0,6984+-<BIURF>?@:433.**8E8,298621?J<./69:52478420*(+.////---./133+$)/122444211,'&-/*%)220035RRRRRRSSQQRUVVUSSSUURPOLJHHHHILMNMMNNONNNMMNNMJIJLLMMMNNNMMMLLKKKKKJJJIHIHHHHIIIHIJJLOQRUXWTMJKMLJLMMNPRSSSTWWWXYYYYYZZ\\]\\\\^^XPKIGEFFFFFFFFFGFGIJKKJJKKMPONKHDCEFGJMNNNNMMLIGFFHIIKNQRRUWXZ\\]^]\\\\]^`_ZTOLJJKKLNPRRRRQQQQQRQONLKLLNPPPSUUUUSRQPPQQPOMQZ`cbaXQRRRTWXWUVWVW\\^_glf]^_chhhcYTV_jjc\\`ruid_Wo~fbbbabbaajywvus~~jbaXh}{wxwfZ[YYYXYZV^nbWXZXTkzgegfgld[]`dddgkmihjqurtyoacf_[`hlhdk}{}}ukhlolhhmuz{xtttpmnmieedeee``cedggghwvfdca_i~rQSW[XRRSRVX^ceksvd[W\\T|U{glofTJGHHHHKNOMKGJMLJDJWZZVWc_DPPSZXQMJIIHFHJLZ^LEDFKMLIFCCxu\\sOEJWlzfL}chwmWDHNMOOMLIGFGGGINSRNLKIGFGIIIJKIHHHGGGGGHIJKQakwpOEIKPSMIJJJHHGGGHIJJJJKJIIIJJKLMLIIRHLOPPQQRM_xSQWYX[]^]SLKLFZc[hcdlti^^bbcjQFIhKFFFHJPOIFEEJMKDBCDGMPQENaWNVPUWSVSOSZZOEDEFFHIJDCGJKKJKKKNKIIQYTKLOQPRNGAMZ]_^[ZTOVYLFTe^\\[[ZYXVQRUURJDDEFKKGDDGHECDHNMIHPVURLSWPPZ_[Y^a^SRROKHKNPONMKJKKKKLLLLMNOPQRPPNPRPPNNMMNNPeztmdo~sqw{ij{}wis~wdWX\\cic[ZXYZ\\[WUTRQPSUUUWYYYWTRQSRQOMNPRRSRSSTSSQRRRTTVWWXXWVVWUTSTUXZ[[YXWVTSRQRSVWYZXUSUVXXXWXWUQMKMU[\\[YXXY[ZY\\gprqaRYgeehif_YRLPX^^YSPPICIYZXVWWVW^\\TSSG<=B?>AILF@F@=ViJ9;B=?@@?GPSX^`VLMOOOQUWZXTZ^`_]ZO==CCCJOOFFF=::=DIFEEEFGIKLLMMKID55UyjQR}mSA58DEEHF?7558:98878;==9549>AABB@<<>==??<;AD:25BF:2489>?>IF>@@<@D@@:58:722689<ADELNOPH;6994246:>FI?5433357899:;@FKKIPafT=:CLK=33666667;@AA@@ADFFBBEIKKMQNMMMMMNPLB;DRPC<<::?BDEGIIHGEBBBDFFGIGC806AILIII@2-/2433/3EJ?@@610/026<@@:12679;953>?BEGFECA?=<<?>===<<;;;;:524<?::CHHHKB/0=?>BDFD><@DGFDBA>==98;;86556:;939JQH7-039<>=>?>=><98883//.-2887AA23EOIB?BFFDBB@87;:;:6<P\\\\_a^`aUA76534665445675468;<:<>=;>BB>964892++--.:??=;;:<FAAIJHGECA?@A@?<;=:@HFDDC>;89;:9:9::975545666666:88<=@C;1027=?>>A<68;7641./46?G9-/5;5.+/1110002359852.+-022/,++,('7FHD<:9.1:9/-,-258;DGC<:?@@ABGJIG@::<<;:;<==>@=<:84221266((04544321.03343/+/05CC>@CA>??;:;<=<<?>8ERI@BQ]eiL,*2761,5HLGNQE3.453577+$;G-$,0541<JA27>@A=2+''(((())+/0/..0///1330*+034553333110.5CC2%(598422RRRRSSSSQQQTVVUSSSSTRQQOMIEGJKMNNMNNNNNNNNMNNMKJKKJKMMMMMMMMLLLLKKJJKKJIIIHHIIIIIIJJLMMORUUPLIKNNMMNMNPRSSSSUWWWXYYYXWY[\\\\\\^^]ZTLFFEFFFFFFFGGGFHHFGHILPX_]TLKGEEEFILLMNMMNMKJIHHJJJMQPQVYYZ\\[Z\\]^`bfgd^VSRNLLLLNPQQQPPQQSSSQONLLNPRRRTVWWWUSRRQQQPOIFQ`a]a`XVTSTWWUTSTUVZ`a`aa``dkhgh`XWcmmg^[^cfee`Wtkfddba`_aiy|xzpxxXXVay{{yh\\\\ZYYXYYXWWWWYYUbwifihhifa^_a`_aelpqprtuy~q`_b_[_gjegz~yvutqljknllvytuwvronmieffghijkfdfejih}xgcbehw^RYURRSSSRV_lqsog][[`f]`f>UY\\eqlTHJMONOZ\\NEO[XJBAJ]osfd\\aoRANOMMLLMKIIIIJMPQPGDHOSTSMEEAf|XJf_HCMdn|aYdy|peMHLKMNKJHHGGGGHLQPMLKIGFGIIIIJHHHGGGGGHIJKLMP\\yrOEHKPQJGHJJHGGGHHIIJIJJJIIIJJKLOONPfiNMMONOQQRSSZTTXZZ]^_`RJHJDMsUv~idhuzj`accdhNCCAOEEFGIQQFDFDS`H@AA@BGMOFKVTSUMLPMQOLRY]QCBGFEFKKDDFHJJJJJMRRHFORNLNNPQQIBBGKTY_fkaTY\\S\\dimklncYhi[RPPROGCEFGGGFEDDFDCEKLMNU`c\\RRVZ_`\\XWZ\\XNMMLIGINPOONLJKLLLMLLLMOPQRSSSPPONNMNNOQT^u~spkmbtw{op~uovyrdZ]giec[TVWY[^[VUTQNPTUTVWWXYVRPTTRQONPRUTSSSSTTSQPPRTVWWWXXVTVVTSSTUVVVVVVUVVSSRSVXYZZXUSUXWVWXXWTPNMPW[ZZYWVX[XYbp{wqh^^^Z]eikjd]bjqpd\\RRWNCCEFGDHRY]WIJ^[E>DEDHNNH?<E?6TtU@?@FDCBCHOV]^[SQRQNLWaa_^bfaXZbbK;BLNPW\\N@=@BCEHMJECADHKNQNONKJC:NwwSlE7@MQNJE@95588777677645567;@A@?95:B@<;<<AF=108FJ?6239ACGLHEDA:@D;559<;952479=DIKMNPTOB:5238:=FNRURB546669::::9?GJJEGRRF<:<>@=84344557;ABA?@CDEFFEFGJJFDHONOPPPQQK?=HKB=<88@FGFEFHIHFFDBBC@ACDC?52:DHGHHB89:644521:?@D@40//01:CII?57=::@B=:>>?GKJHFDCEGGGHEA>==<<<===:7<A;8@EDDD?46@BABLQG=;>CHJGFEB>::;:8765579981.=II<0027<==>@>>??:5443440.023120/:HJCAACFEDCDDAAEED>5=V_[]```daP<6532245656786469==64=A>BFC<96575.+,-+/;?@?=::;CIKJJIGECA@@@@?<42;BFECA=87:<;:989;<<;7456777778>73AGCB8/-.39:9:>:37:6310002599/+.*/+)*-////02658:8631.-/11/-+)*)(/BKD98;2.350.,.4;<<EIG@@@AFHFFFEGJE;25@FHDABGE>:;;96100385048643212//02551.222:??AA<9:8875899;BA:CND<74GaT/(1520./;HHEIOI0%.7;:=<..A<+9OO?9?D>6?JFA=;5.*)(*,++*+./..-./0001.*,23224434454459ALJ6$'6>>832RRRRSTTTTSSTUUSRSSQQQQSSPLGGJLMNMLLNNNMNNONMNMKKKKKJLMMMMLMMMMLLLKKJJKJHHHHHHHIIIIHIKJJLMMNLJIJLMLLMMMNPRSSSTVWWYYYYXWY[\\\\]][\\][SMKHGFFFFFGHHHHGFHMU\\cjoppgTIGGFFGIJJKLKKLKKKJIIIJJLMNQSTTSUVW\\`abdgihdb_[UOLLLLMNNNOQQQRSRRRRPOPRRRRTVXXWWVTSRQQNKHCIY`\\]ba]ZXVVVVUQPQTX^cdbaa`cfghfZ[_kmd_[^_Z]fk_Zuwlegda^]^dknvno_WY[r||k\\\\]\\\\\\\\UYbYTXXYVrypolkkkf__ab`^`iuxupns|p]X__]`gkryz~~zvrnkiefhijw{snqy{snmngbehjienwmfc_cgjzqa_bjq|eQXURSUVWXZ`koje``b\\[^]@D|tHD?DI[m^KMRSPNZc\\X`bXGDKMXpb\\XTFEKKKJIKIGIIKLMMNYYFJW^\\USKFGFXzdEO`fiZU]W_OauxhiYIGJNNLIHHHGGFGLPPOMLJGFGHHHIIIHGGGFGGHLKLLMOZtmMEGLQNHFIJJIHGGHHIIIIJIHIIIJJKLOPOOPSQMNPQRSSRTTSTUZ\\]^__aUJHIKH}hT]_bjn{~kbbdeefM?E?ivRCFFGITTFCHDNgM>DEDFIJLKNNLMNLKMMMMRSRVMCEHKLOQPFDIJJJLLHIQUJBHNMMOMMMLF?DFBLY`cmjVQWZ^]iwpt|dRch^TMOPPLECFIHGEDCBIKGFFKRY]adaXTVcj`SQVVVRMLKKHGIOPPPOLKKKKKLLLMNNNOPPQRQONNONOPQSV^lwuqsqxyìz~zoq|~tltwjd]\\ismb[VRVY[\\_ZWVTPPRTUUVVUXWSORUTRQNNPUVUTTSSSTRQOPRTWWWWWWVVUUSSSTUUSRSSTTUWWVRSWZZZ[YUSUZYXWXXVTPNNRX][[YXVWYX^jwzrkgd_VNQZaeeeltqqnjgacfXE<69??CQZRB4=XOJNICGPTI?<ALE;Pyh82=FDCEC@DMY[YROPPOLR_gkgdg]PWpw`?9QfiiqbB6>IIEFJH@<<EKLRVQOLJIDE[pjfvxhWBDKLJHGC;4577688787546667;@CB?926BB<;9:@@634<GJE<57@DGLNKLLB7<C>9:==<;9548:=@DIMMNRUVPC8:AEHNQRSSNA6899;;::9:@GJIEDFECB@@A@>;7334558>GHC@BDEEFEEGGJK>5CWYUQPQQQRKCDF@<><:?FGFEDFIIGFE@;<:8?CHC:5;DHHHGB?CC:776633;BGA3.///07@GI@9;??@DGDBA??GIHDAABHQTROKD>=>>?????;8<A=4213<DA87AKHALRA9:;@IPKDAA=;::7555577974/*/<F>5/07;<=>??>?A>:658=9/.///-/4:BEAAFHGFEEDDEFFGGH@4?Zb]^becce^G3021013566687567;?849CFDE@57884,+,--,05<?A>;;=BKOLJIGFDCA@>??=:49CFA==8217=<:669<=?@<767877747:4.<ID<0+)+,/124540/00.-..07:71+,,',,,,.000..3867775322.--,,+))''*-<LI83753332100237?GJFFE=:FMIGGEHNI61CONLIACHC;9::><4101:B83442233742:ACCA@:787;==?;67991,0219FD=FLD=3+?aP.2>:,,5:AHIHEHH7/5:BC?:7>5)9Ub_H?E?3:LVPG=63,,///00,*+--,,-,.0131*'+//1433589999:=@B@7-/9@@<76QRRRRSUVVTSUUSSRRSRQPQRTSOKLLMMMMLLMNMMMMMMMLLLKKKKMMLNONLMMMMLLLKKKKJIHHHHHHHIIIHGHGFGJJIIJIIIJJJKMMMNPRSRSUUUVWWYXWYZ[]^_^^]\\YXVQNJHGGGFGIJJLQUV\\bjnpoossgVIDEFFGHHIIIJJJJKJJJJIJKIKLHJLLRY^`bbceefgjkhb_ZSNMMMMMMNPPPRRRTTUVUSQQPPUXVVXZZXUUUTRKHFFO^^X]cb`_\\]]XVTPQRV^beigedcdegc[_gjhfchmc\\]ip__z{mijgdb`_a^^pwpjVYYg~{}l\\\\][[^`]YfiXWYYYh~smmmng_]_ceeeirwwvsqxo[[```epv{{zwx{xuspmkhddhhq{xqklw|rpnogcglmk^fwvogda`gutc]bm{aTVWVVUVY\\^]]\\\\_hkfXONPJ?L\\QGDGDFYYNPQMNLMWaddZMHLNJCyxPTYLEHIIJJNH@FOONNNNVaDQ\\^YPQMIIKM]RH]vQRKSPUu]UQHDFIKJHFFEFEFHKQSPONJGFFGGHHIHHGGGFFGHMLLMLLO^jNCFKPLFGIKKJHGGHHHIHIIIIJJJKLMNPPPOPTQRQRSSTTTUVVVX[^__aaaVKIJKIKcIOJ^pr|~kbbcdnaIADDLUGEFGGKUSFDHFFYO@CILMPOKORKJLOSSOPNOYRHLHAFHILPUWJFNPMMOQPFCQMDEPQOSQPNPPMRWQNOSXkoVGS`^Vjzs{vWJSUVTQPPOKECEHHECBFKTVPIGLS]c_]ZWRPW^VIFLRRPOOONJGINPPNNMLJIIJKKLNNONMLLOQQONOPOONRTW^dekqwx{ø|xwt{}rmvpfb_gokfaYSTWYZZ[XWVRSTTRUWVWWWRNOTVSPONPSVUUUTTTRQPQQRTVWWVVVVWYWUSRSSSSRQRSUUWY[WSTYZYZ[XUVXZZZXVVUSPNNRX]\\[ZZVVYXYjvpkc^b`XRPPSXZ\\lyunjnpmkjZD<8:<>EQSD767BYkkWGGPMB=AJPLDJirNB>BBCEE@@IUTSRQPMPRPWerm_\\\\XczkH5Ghut|tR@HRXTMEA;7<FKJPWRQLIFEGKMICBjrorHCEEFGIF=6688799998777767;<>@@;44>B>;87;84:=@EKH?:?BBGSVRRTM?=CCBDC?==>:79;=>@BIMMNQWWI?><ANXXXY[YN=7=><9888;@GJHEDCCDDBDFC?=:534558@JJEBEFFEEEEGILLA9EX`WONPQPOOMLLHB@>9:CHFDCCFHEA@>8898>CHA88?FJKHDA@@?<<<9975=FHB6../.06;??<7:CFDCGGECADHIGA===?HSVRLD=;?BBBBAB@<984-,3@KJ?87?ONADE96::=IRI9567;;97456888:85523>@:9547:;<=>@?@BA=:7:>5-/0///5@EEDDJNNLA:ABDJKIJIH@3=[gbbfhfdfdM/*00013454477566:@=76:DGF?9;;6.)+,/00028<@=;::?HNNLIIHFECB@?>==96@H;3531/126778=?>??;5479;:53454/8D=1**+-.0232100.,,+(&%)7960,-/+-,,./000--/113554330++*+*)(()))+2@F>45678985641.7FGGDED93;GIHHGGJG=DPONMKIKLE?=<<?@<568<C82111357;::@=7<GD46DHGDA>60/55-*-..9HE=IMIR<7\\qoR<@8+2BEFLLF=?HB>>57E=2=H<=LZZQIA90-8>DNOE5*'*01.,++**++**+*-1353,(('*48757;=<<<==<:8669=??><;RRRRSUVWXVVWWTSRQSSQPQQQQQOOPPOONNNMMMMMMLLMLKKKKKKLLMNOONMMMNMLLKKKJJIHHHHHGHIIIIHGGGGHJHHJKJJJJJKLMMNPQRQRTSSTVWXXYZZ[\\]`aa`]ZXWUROMJJIHIILOU[ZZ^cdbdimqssoZFCFFFFHHHIJJJJJJJJIIIJIFEGKQV\\`bbbcdfeeimnljhd^VPMLKLMMNNNPRRTVVXZXUSMLRUSTVZ]^YVVWVRLHEHT\\ZYZ_cedfeZSSUTSS[a`cgfffffgd^[dptqpqoe]\\isdcyjjkhhgghkkjwdVZX`wz}j[[[XX[`aX_m`X[YWYenrpooprolmf^]\\`hoqnpuxyyuzkZacbelvqpwvxuqonmlkhggp{|}unlruqtrqiekllm``uwyvyrlfbld`bk}~ZPTVWXWVY[ZTPU]bgniVNMMJJORMHGJHDJOMNKITNHMXcfZQSOIE<]eDPTKGHHGGIF@GTXSORRDzWBQVYWS[TKJKGJKRUdȱhOFLJFf|t]KHGGEFHHHFFECDFHLRTRPNJHFFGGGHHHHGGGGFGHOLMMLKLTcMAEIONHGHIKJHFFGGGHHHHHIIJJKLNOPQPPQRRRSTTUTTVVWWXY[^_`aacVKILKLGJj~NKFSeqz~nbcblnSGDHPIBDEGGIKQMGEGIJPMDCIQSYXPQQHNVXXPMUSVZMCDEAEHD@COXRJMQOPQUXPAHVPS]]YY\\\\\\[Z[be]PMKZiaMH[hhgswtyiPHMNQQOMLKHEEFGHEBENX]\\UPNPQZfeYNQPMLMOPPHFJLLNOONIKNPNMMLKJIIJJKLNOPOMKJMPPPNPPOONQTV`hnqrusw~~zss}qklyrhagojdc_VRVWXXXYWSRRTWUTVXXZZUMMTYUQONPUXWUUVVUTRPRSSUVXWYWWWWY\\VUSQRRQQPQSTVVXZ\\VSW]\\ZY[WUWYZZZZUTUSRPOPW\\[[ZZXVWXYgofd^]fd\\XUQNQRLRnxvomnkf`P@<;<;<EPOD;;7>cv|iIAEB@BGNPMECWrzveEAFGIHD@DJLPZ^UMPVSW`kxXTfhoxtiV?:Tpvxue`gmuybFBHEBDB@ITRQNKFEDC@?9;ivrzvLFHIIJKHA:79::;;;;;998679::9:><53;A=977954?HIIIA9;@==IW[USVVMFEDCGKE>?@>:88<CCABFHGHIJD@?42I^_]bg_PDEGE?;989<@GIGFFDCCDBCED>;9435768@IJGGHEA@ACEILLJC?AJQOMLOPJHIKOSQKHC;9BHFC@=>@?:8<;9<>?AD<37?CGLIB@@<;>A@>;9:>HJB8.-./6999;==@JNFBJNF<<>CHFA@@>;;BMOIB??ADDDCAFJ@3-,-8OZTF889<KMA><6589<HPG:41268:9547;:9<@AA?=?@>>=;;<;;;>?@AAA>;875.,10-169CGFIMQPLE94:;DLJJOKD=26ShfcdedbefM.*//0222333684455;><626BFBA@;0(+,.3643369=;7568@JONLKJHGECB>=<=:6<A802120.,4:;?A><<>:326<A=50032.3>9.,.01356640.-,--.,-./2221-.2/.+*,.//0/.-./243432/+***+,.-02/..3<@=<<;;;<>;647AC@ECBB:31:CFEAAC@>FCBMQQOQVQI@==>CE>EN;=7//01368<BC>82374'.AMQRRD0%&****+/5=FC=HQR_ZKbvsQ6620>HDIMD=:>B?:8-+303BFHLKU^UG9.4BC;;EMK>,',./,)(((*,,,,++-3663.+'&-68779<=;=>>>=;957<=<>@A=SSSSTWYZ\\\\\\ZYVRQRQQQOOOONOPQQRRPONMMMMMMMMLMMLLKKKKKLLMOOONNNNMLKLMLKJIHHIHHGHHHIIHGHHFDFIKLKJJJIKKKLMNPRSRRSSSTTVWXZ[\\]^^abbbb_ZTRRRQOMKJJMORXYUTVWZ_chotsotq]JEHHGGFHIHIJJJJJIIIIIJJKQVZ`babcdefhhijmmlkjhfaZQMOLNLKMORRSUVVWXYYZVNJLQQRV[]]XTQTWUNJFFQ^ZSU]bdgge`WS\\_RQ[[]acedegggd^bipomkid^[erigypelokjllmq|uhdYZZZanz||f[\\dnobYVV]b_Z[YXYVVXVT`w}qjjg_`_bkttssttwg_kgdjuyp{tuvspnmlllihi|}w|{omnnqzvrkgjjknnny{yvkjcZbecdiu|TJRW[ZYYXXTNNXcgemmXUTIJUTTNGFHGEHKMKIJSPNOWbb[`ZJDGHIWLHNPKHHGGEBEjzaQNQVRUPDMTXbeh[NKLIJLPNLUwlLEEDBCVl`b[LGEEDEEGGFEGLLHHMRVTQOLJHGFFFGHHHHGGFFGHOKKLLMOQUJBEHOPJFGHKJGEEFGGGHGGHHIJKKLNPQRRPPRSTTTTTTUVVXXYZ\\^`abbaQIILNPMMDELiMMJUfkypb^ipVHHFOSHCEFGIIJLJHFHJLPPHEJSY\\\\TQQLU^]XKKTVZOBBBCBGLI@A@NQLMQOQSTVZSQ\\agplYRakc[X\\hj\\RTWdcKARehimtsssdPJNPQOIEHIHGHGGGDCMXYYXSRNOQU\\[RMKLNKGJXgbOEGIJKLLKMOPONMLKKJKLLMNOPPOMKJNOPOOOONNMOQTalnwt{zy{vubc|wlcholghaYTTVWXYWWURRSTVVVWXWXWRLQXYSPONT[YWVVWVUSQRTUUWXYXYYXWVWXTSQOPQQRRSUUVWX[ZVTW\\[ZYYUSUXZYYYUSTSRPOPVXXZZYXWXYZegaYclkhf[WRMNKEDM\\floolfXJ>;:<>AITWPC::BRexhD><?DEGMNHD?C_xpH?IKLIB=?>HW^XOKNXZWafqPWoooqbUND:DbsshdmuyrLSjh_K96DRRRQLHGFFFGDHlsXhSNNNLJGGD=9:<=???>>=;878;;:89<<85;@=9:;=<@KQNH@528;:;EQTRSUUUOHGEGKF>@CA;86@IG?>?@@@?@A@?;48K_gffbTPURIC>:779;>@BEGFECBBABB=97669956=FIHJHA98>AEKPH=;99ANPNNPQHDEGIQOKKJA>CFDC?:9<=85;<9<?@AC<02:=AHHA?@><@CB@<87:BD?8/./39;>@CJMNRTMBHTPC:77;?@@A?=<8?GECDEDDCDDCFI=/-07F`bNB:659DIA=;54568CJD>8346579889;;:=ACCBAACCA==>@?<:=>ABAA@=863--/0.5?ADHJMRSLD;6478AG@DLD=;23I``YZ]_\\^aM-).-/./12347967758<<=;58=AC?5,),.04776558;833649ENMNMLIGEDB><<<:78840...-04<=9=@;38=;4369<:2-.32-1:71/14333441--135555345/+,.-/321/-,,/0100/002310365-+--,-0.252025<><>AB?<;<;5/8D>=C@@>912669636:7;?BIPPOMMV[UMA<?BEBN_E2.*)-0247=B?88:84017BKS[`M0%&).,%&5CEBBFGJJQa^ZYM6..-4DGBHK:09>723/)&&)5>895<FIG:/3Mc^QMIHKI5+---,*('*.13200/1552--+&+694479:;;===;;<:67=@?BGD>RRRRSUX[]]\\ZYWTRRROPPPPPOOPRQRSQNMMMMMMMMLLMMMMLLKKKLLMOPPOOOONMLLLKKKJIIIIHHHHHIHGFHHEBCHJJJKJIHJKJKMNQRSTTTRQSSUWY[]^^__bccdghaWSSRRPNPNMNOQRRQQQSW]akqspjhon_JFIGEEHIHIIIJIIJJIJMNRWY[]__acdfgijlmlmmmlmllkf\\WRMMLIKPTSUVVVVWXZ\\_YNCLNPUZ]__YQPTXUQJBFU^XPT\\^bgki_\\fdSPUW[^`abeiihjjecbcggfc_]`llgkjaesupoqrop{k\\TV[\\Y]cdpzcZ]fwxp`T]`_][ZYZZXWVTb~thgfedcelvxuwtq|qjpz{tvrttrolllllggzws{vtqms}xpmppigrxxyo[X]_\\afgehr}SHPV^[VXXWRNUckllniYWXPPXVUOHEFGFGIKJHKPPOOTVXdq\\GDJGFCFLMMLKIGGDAxIHIS[QoӭMO[TTejf]RLMMLMOJJJJWUJEEDDB@KGNTPGDDDDDEFGDHYbUNMTXUQONKIHGFFGHHHHGGFGGHMKKKMNPWKDGEHPUPIGGJJGEEFGGGHGGHHIKLLMOPQRRRRTTUUUTTUVVWXXZ[]^`bcd`MHJNRSRONFEG`dKOSSU_wt__sZAGHILLEDEGIJJIJIHHHJNQQLHKS[YVOPTUY^XWSQORVH=BB@BLROGEGJMMMPPRTRS\\`_bktwhLFYeWNPTbmdWW_g\\ABZgfgjnlli\\OKORQMHDEGHHJIHFCDPXXVURPOOQQOLIHHNRKGGMaunTFEFGHKMNOPOONLKKKLMMNNOPQPNMNOOPOPOONMLMNSZcjxy}|wadrym`ivoehf[VSTVXZZWUSQSTSVXYXXXUQPPWZVPQPRZZVVVVWVUSSUUUWWXYXYXWWVVURRPNOPQRSUVVWWX[YWVW\\ZZZXTQTWZXYXVSSSSQOQUVWYZYYYXZ\\dlaax{nkrf_YSLHEDCEM_jie`UI=;:<ELU_eZG:FPT^g[@;=@GIGLNHC?8Fk}h@;EFC@<;<@FONKQ]\\Y^bge\\O]kgf]NEEMH@VoiY_ipx}vYh~jL6=PSSPMJGHIJJILYo[<\\QPOOKEEGG@;<>@CCCABA=879><978:<:6;?<9<@AIRXUKA910587:CKOPRUVSOLNMJKH>AFB:6;AKE<;=<;<>@A?>>50=\\le^b^TOPJD@;;=;:::<AJIDCBBA?=<:9;AC;43:DHILH=35<@FNN?4549HXUOOQQHABDGJMLLMIEDCCB>97;;53:=:<@ABCE>45;?BA??@?@BCB?<748=?>8246:??FNOSVVVWSGCMTPHF:7:>@A@>FA:<>DJJHFEGFCE?2.09BDS]LA<526CHA=;53434;B@;4367349;<;;:;;;?CCDDEFC<<=@><:<=@BBBA>=;73//15<FLORPMQPE;98555;=59A=;:30>SSIMUZXVWE-*,---1588:::=??>>=<@B<548=6-++-/268:9645;834646ALPONMKGDCC?<<><8510/+,.19@834:A:/19;95123433231..34455665331/+-68788840/-**,,/3231.,-/122222122/-4;9/-/0.-2/04326:==<?ABA@>;90.678@A>@8./462,-2466:?COPMHGFM\\]ZNAABA<?S\\?6%/<8,37<90.07989AILNSZ]J2-27>;..=EE>EF5AD>DOVC40/.,1>A?A@4.:@;<B;0,073/.-/:79<71<IW\\XKEAEE:4-*,,+*,04787421121,'(*(+672377898:9745;<:;@CCFKJ@TTTSSTVVYYXYZXWVSRONNOPONOPPOPQOMMMMMMMMNMMMNMMMLLKKLLMOPPPPOONMLKKKKKJIIIIHGHIHHHGFEGHC?AEFGIIJJJJIKMQQPSSRQRQQRTVY[]_```bedegjie]UQPOQSSRSSRQPPQTWVV`mmihfehqp]ICCHKJHIIIJJJIJJILQRTWXVWX\\bfgggiklmlmmlmmnnnjd^VSPLILRUTUVVUVWXY[\\]UPJMMQW\\_a\\XOPUXVQIBGW`VMQX[_giffjf\\WRSY\\[\\_cfggjlfceeffec_\\\\fkfdb_`t|tvvrmmmyym`X\\_]_\\_cbfnh`[\\``^Xfhj[^]]ZZXZ\\YXWUbthgijighpwxwwsp|uosxwi~pqvuromlllnffzrpu|vpt}{qovwnknwwyoRO[`^agghlv}TFMOSUTUVXTQXhqloucUVWVVVURNIEFFGHIJKKQZPMOQNTr}^HLHFDDEILKJIHGH@LòL;EHU[WLP`UR\\`[WQMKIHINMNMLDCECBCDDECBDLMFCCDDDEFFDIXigUMSXWSQMLKHFEEFGGGGGGFGGGJJJJLOPPJEFGKQYYOEGIKGDEFFFGGGGHHIJKLNPQPQRRTTTVVTSSTVVWYZ[]_`bbdd[IFILRTURJGDIQPKOMHKO|q_fiLDFGKNKCDEGIJJIIJJHHKNQULFKTXWRQRV\\^[UU[TEMPD=BE@BNTOJHJLLMNQPRUST\\bbdmtpdQHOUOLMOTVWUVbgO?Maeffjkd[WPOLORQMGCDFHIKIGEDEPWUSSROOOPQLHGGIRZRLMGI`ocPJIIIJMOQQPPNMLLKMNNQRQQQRRRPOOOOONNNMLLNRV[dȿzbitwrgct|lcf_VTSSUZ\\[WURRSTTUXXVWVRNOTYXSOQSUWVTUUUUUTSSVUUWWXWWXVVVVUSQQOMNOQSUUWXWXZ\\YWVWZZYZVQPTWYXXWVSSSSQOQUTUXZXYYYZ\\bkcs~omokd]WLDCDC@F\\ed`\\SG=:9=IX]bhX>H[[TMID><?AIIFKKEA?=;b{d;:B@?<9:;=CEZmv~x`aknbZS^eVKCMY[Y][^ldW\\gpx{{sityP<JQONLKJJKLLJKLD_N8MQTYWKBBFFA<<>ACCBABB>:8:>;9899=;8;?=9=ABLUUSH=9;84569AHLMQVTOKKOPLJE?AFE?9=GG?;<=<:;>BB???77LdnhbegXFAFNSVYYL@>@;9EIBBCC@=;::9;CF;217@FIKH=349>EJE90338JUSQPRRKBADDEIKJLKGDDCC@:9;<75<=8<@BBCIL>8<?=;<=>@BEFC?:647<@>::AGFGHIKLOMLNQNF@@CHRUKA?@?B@>HNB9=EOSPMNOKEB4*.1:D;=IH?=526@C>;8421038=>81167349;;:::986:BDCA??=;:98788:<?BAAA@@<:85577;CLU\\TEGH=63244484-18::930:CGIJLVZXT=++--.2:ACA@=>DFEDDA=<?@70482+++.0268;;96;?;77877?ISRNMKHECCA=<?>960-0+)5?C?5*06>;/.8=9311367775/,+.49:;863122/+,7878872,)+**,+-01/-+-.0122212111.-4:5..10.,2/.3435:=<<?>::=AEB365,2;=>;2/.3520025559=DRPD@FHLZa_XLCB@50<\\VF7EC61>EC6046:;::>EHJGJ[X@6<AEECDC><9<7(@B/09LE7;=:3+-35426<CGINROA36@>;;.1<>AA<;:96:AC@=;;;70,-,,,./132221100-)#$*++/0-1777720/.+.8ABEFFDDHJ?STSSSSTTTTUVVWWVSQONMMNONNONMMNMMMMMMMMNNNMNNNMMLKKKLMNQSRQPONMMLKKLKJJJIJIHGIIHHHHGFEGD@BHJGFFGIKJIKOSPNONMOQPPPSVWYY\\_``behhggge]UQOPQRRTXWUSTSUVXXY^ba``ejmqspeVKGFFGIIIIJIIIJJMRRQQRQOR\\bfiigijklllllllmnoljg_\\XOJPVVQTWWVWYXYYWYZ]YPKJSX\\]_aZQPVXVSLDIZ_TJLQT[cgghjf]WXZZZZ]]`befgedlmjihfd`aeeabgdZlvjqtqolaioh_`dfdbb``___]^]^`^\\_qg[YY[[ZXWX]YXYW`{tjkprnimyzyxurpou~x}fikpqnatyho|ztpmlljoheypmps{~yrv~wrz}zx|z{qYPRZaacdelxzSILKLMQUVWWY^ipeeo]RSUVWVQMLIFFGGHJNPR]gMLMPO^aO\\TICDEHHFDEFGG=no9IGIUXn[VLPTQOQNKJIIGGGJLMLKHAABBCDDEDDEGHECDDDEFFFGJS\\_UKQZYTRONLIGEEFFFFGFGFGGGIIHHKNMJGEFIMR[_TGFIMIDDFFFGGGGHHIJKMOPQRSSTUVVVVUTTUVVWY[]^aabcebRGGHIMUYWJFGCGLLNOKHO{n_fYFGEGKOHBDFHJLLKKKJHJKNIPLHOTUXY`a][[WPU]]WVOC>ADCDLROLJNQNKRTRRTTUZ_bdkpkf_UPQQTSPMGJNP^`F?VfffhmoaQONOLMPOKECDGIJKKJIGGOUTTUSQPQRRUTTRPS]_\\XKAHUZVTRQMKKQRRQQPOONLMMNQTUVTSRRPPONNONNNMMMNQST\\ptsʺ~ksoz|qrpjmwqd`_ZVTSSUX[ZWURRTUUUVWUVUQNNT\\YRQSTTTWXWVTSRSSUUVVVWWUTWVUTTTRQPOMOPRSUVXYZ[[ZWWXXYYZXSNQVXYXXXVTTSSQOPSSUWXXXYYZ[_dg}wokjiga]L?AD<:Kc_^[WOF?<9@MXX]^PJVSIDCA>?@@BJGDIF<@CDAZzd;>@>@>;:93Celfje\\YW]XJAG_ibcmoghh`YfrutqmnphnyPAEGHIJLMNNKJEJP^uBF_cejiWDCDEA=<>@AA?>@@?=>==;;:::==>?BA=>?@GKMMA8;EA646:>EFGLSOECFIPNF?@ADLM@<><=?A@=<=BEA>@?9C]jotsfaZNBATiklreMCLK=<A@@DE?;:9757=?8435:BEFE;658?B=630226>BLSTSRMC@BBBEHIJIHGGCAA><==:9=<8;@AABEGA=>?=;:9:<@EHGB<768<>>>AJRKEKC9<><::<<963/5IZWMIEAAA?DNKAAHSYWWXTMG@1)037>758<<?;98<9535200047;=83156447999997648<=;731157300247:@BA@@@?=<;::7118ERTC47:50//444533379885457EPHEQXYR8*--.2:FIHEA?AFGFEEB>;<><8342-+,/1358;><9@DA=9:;:=EOROMKGEDB@?>>>;83031.<HB:3-02;>1.<A705789::972/05:=@@<500342,-2466651+())**+-0/)')0100/////./.-.56,+,,--+.-.561/5:;<?8/+/55@@?511+8<6/-03654337569=CRPBCJPXY_b]SHE?2./BL?XF*.FPTOEABBDB?;=DEC73O_H6:>>?CF@5121+%=G/369?DEHJ?-'*./1;JNJHMRRH77GJOO7+2105?HF?316;971,0453.,++**)***,..-,+(%',.,*)*16872((((*,4>CFHFCFID9UUUUTSSSSSTTSUWVSQPPPOOONNNMLLMMMMMMLNNNNNNMMNMLLKKKLNPSVUSQPMMNOLMLKKJJJJIHHIHHHHHHGFEEIPUVSNIDDGJKJMNMLLKKMONNNQUURQV\\^]_cc^[YWTQOPONOOOQSTRRRSUVVWYZXVU]gkklorroj^QLIGGHIIIIIKMQSSSQMLNSZ`dfghiijkllllllnpppple`]VQTUQOSYXWXYYXXXY[^`_UIJSYZ]cbYOPWZXWOEM]`SIJOQV^fhkkebcc`[ZZZ\\_bccefjlkkkiiijgb^`fh_iufiqqvlW\\jidgjjhgea]\\]^Z[`djjju}l`ZYYZYWUWZZY[YXputxvqmkr|~{ztqplejx{oedihgry|thmvqmllikjd}vkloklnlkkq}v||zwmdfd^SMV_`_cjuySLNMQSRUWXY`hojZZg^QRSUYUNJJIHFGHIKQVWdhLKKFGdUFZ^KADEFEB=?DGEAGIVRTVVDJWJJSOFGFDEFHGGFGJLKIFDBBBBCCDEFFFEDCDDDFGFFEFLPOJEM[\\WTRPNJGEFFFEFFFGGGHGHHIIMROFCEFKRV]cWFCKTLCDFFFGGGGHHIJKMOQRTVVVWXXXWVVUVVVXZ]`addcdg_JDGFEFLZ[IFJHIMNMNJN`jl`aNDFEHKKGBEIKLNNMMKJIJKLJKMMSUMQYbc_XTQMV^ba]WG?BDEGJKLLNRURV^^URPMPY]^dkpnke]YXY\\_[NIOMMVWEH_micjtudMMPOMLNMGBBDGJKLMLLJJNSUXXTRRSSSSTXZYZ`eeYLFFJNRTTVRLJRTSSRRQRPMMMNQUYZXTONNNNMNOOOONNNNPQQQVW^ʾx|~sxwi}qpvqowug^][YWVRSTVXYWURSUVVUUUTTSQMPZ`XPQTRQVZZXVUTSTTVVVVVUUSSTTSRRRPPONMOQTTVXZ[^_^YVXZYXYZVPOSXYYXXXWVUTTRPPQQTUWXXYZZZ^_p{gcfhgc[XL@@D<9IVLLNOJDB>9DRSU`\\PMG=<ELNKGECCLFBD@<?EGIPrh?BEFC?<:6Dq|qhbZWXTPWWTW_bmtldfcUTdnebccgf`fulC>ADFIMPSRJ>@U^XdD;Ukonkh`QDADA?=?@@?<<>?@AB@===<<;=@DELQL?8>A@CE;17ACAA@;;?<<CEDB@@BGG?<ABBKPE::<?DDB>=?EG@=A?9BW]pxbXURJ>JjutvwcQYaQB<<@ED><;95247777523<@C@?;89?>4/000144:JVXUOGA?@>=AFHGHJLKD@BB@?>=<=<7;AAAABA=>BBBA?<9:=AEGHE>::<=<AIQRE@B<<;56720121/-.8CEGKJB?AA>:>BDLTWWXWQKGD7-19>?93158AB>;71./00246678;7455554686779899986433//220.-/026<?>?>?@@@=850+*/<GB1*/30.1444347878656798<HJ?>KSSP<././5AMG@><<?@?@A@@A?=?BA=971,.02558<===ACA==@B@?BHNQNKHFDB@???>=:86894:A<654107;21?A56<>:889:;759>ABCC=5.04653.+064430,+**)*-./.-./130/--,--,,++05.(()*+,-+,.77.+38:=;.(((*+7<:7553;<8422599865557<CHSQGMQWaYZa]VPK>0.+1=DZ4*DRGIMPMHIJJFBEIKLF79B=6783//21..12.%;Q;5;;BNHBHD3)/3;=APSKEEJLG@AJIJN>.*%*<JKIC43:82.,,-042/,++))***++--,++,-.011.*)/352+'+././24;BDDCGH;.WWUUUSSSSSSTTUUUSQRQPPPONNNLLLMMMMMLMNNNOONNNNMMMLLLMPSVXWTQOMLNPPNMKKKJJIIIHGGHHHIIIJJMTZ\\]]ZVLCCHLKJJIJKJJKMMMNOQQNKMPQQSTRMKJIIIKNMLMMLLLLLKMOQSSTUY[VSZab`dlopu|zrh]RKIJIIIJLPRUVVSNMOQV\\]]dikmjiikllklnqrrrsrkb[RRQKIRXTTWYZZ[\\\\]]^bdZMLRUW]c`UPSXYYYRLQ[]TMNPPT_fhiihhgc`]ZWX[]`dggedehjkkmmjgfdekg_ighrrxpXU_ccfhknlgb_]\\\\agloplgwrid^YYXXWTSUWX[ZRcqfhimw||ypkmonvtgqilonpqosuqkfjz~qkkiggffafmogdfmmkheddgu~ted`TU[a]QOW[\\blutRNROTcr`XY[`ii[RYvbRTSWTLIJHGFGGHOVZRahLJKFAWJAGRJACFFDABDDCCMnXNW\\^][ZDSIBHLHCCCBCEGGEDDFGGFFEDDDDDCDDEEEDBBCEDFGGFDDHIIFDKZ_ZVUTQLJGGGFEFFGGGGHHHLOOQUQGCEHOWY_aPEJPTLDDEFFFFFGGHIJLNPRTVXYXXXXXWVUVVWWY[\\adddeegYFDDEDAEQYICKKNSUNHITYSlif^JFGFGHHEBFKMOOOOOLLKLLJLKJOXZSQRSSTVUQOVZ^ZW_SDDHJHFEILOTY[aebZRLGLX\\[dmsrldb_Z[`h`KHLKJJJDK\\gb\\k~~hJFJHGHNLECDEGIJMNMLKJT\\a`ZSSTTTPHFKS]lm_WNJJIKRTQQQPMILONNPSUVTNLMNQV[\\YRNLLLLMNNNNOOOOOPPPQPIVĭzqteok|xw{p_[[ZYVSSSTUVWUUTUVVVUTTTRSOOZc]SQUTQTZ[ZXVUSTUVVVVVWUUTTTSRQPPPPOMMOQTUWYZ[_^\\VWZ[YY[YTPSYZYZXXXWXUTRRPPQRSVWWYYYY[]]u{mTXdc_WUUNDA@>;>ABCILJJG=8ESW[[SH?=EJJOUSLGCCMD;;<AABBADjiA?@B<:<:6Xtpnha[QNbxi[dpspjdidYci[QW]abbhmov}{M@BDDEGMSSG9DZ_Xqe>2=^noldcdYE?CA><=>AEA;<?BCBA=<>?=;:>GPWYL:3<?<:9635=CHLJEFE94<BCDEDFKE;?B;8=B@??ABBA?=>AGG@>C?68=Fpw`TNMG:?Yoz~{mdd_WJ>>DB?=<:635557:8215:?@BBAAE?41001212=OWWPD<::;::@FJIJKMKC>?ACB>9556:=?@BA@@?BEGGFGDA??ACDINF85BE6@UYOCCADPJ:9:6334530.036>FHC>;=<42<CHMQQQOKEBF=029@B<4026BDB?6--/039:;:8653124533599878<@=:611562/11/--/125;>>=>@@A@=50.,-06:71/10,.34223698886557=BFE<27INFGC83005@D=::8998748=BDBBBCBA@<71124468:::=AA<<CFAACCDHNMKHGDA@@??>>=;;::88986664/4614@C=<<;616:::76;@CCAA>82367685-,6543110.**..*)/69600.,)*)))**)*.2-()**,03/3<>3*+24693((-/01:@@A=7?@=;:998<;89;87;ELD;@HVWXe]W^]YVQ@.,,1H`W<G\\J48ENOIGLMJFGGINUO<004:;63,(*04554,:P@:EGHPG69@4)0>FBFSOHEABGGFFB7:A7*'(1CE<7:?;4/,&%3@8+,-./00//.,*****)*.2456650,/1/+)*.2532227?@<:;8-%VVUUUTTSTSRSSSUVRRSQPPPONNNMLLMLMMLLNONOPONOPNNNNNNNPRTVZ[YTOMKLNONLKKKJKJJJIIIHGHKKLNRUXWY^___[PHGIJKJHJJJJIIJKMMNNMJIHFGHHGDEGGGGJLLLLLJIJIHHJKMNPSTX[YYXXWZ_hqvvtqqtoaRLLKKKNNNNQRRRQPPNPTU[ehiid__cgiiknqsuwvrnh^TPNJINQNMSY\\_`____^_de_XRPPU]a^XPQVY\\]XPOSTQOQRSV\\`acefea`ghYORX^^ckf^_dhjklllkmlknjbfgmyzyq\\TUX\\_ckqohb`__elopmnoo{kh`ZUWWXXWWWX[\\YS\\zvf^`hnvz}xnhjptzwgaglmswumfkljhcctzkgigeghff`_a^^grtpnnlicfxo[U]\\SPU[ZSTZ^bkvnPNRPPZyZXZYVUTT_dPRURKGHFEFFGHOVSS~nGMNKKU@BDDCEFHFCQQDADKNNWX[bgi]UMJHCAFEDCBBBCDFEDBABCDDDDDCDEDBCDEDDCBBBEFGGGFEFFFGHEIY`]YWVROMKIHGFEEFFGGGFHNSSRUSIDFJQWZ[UKOTQLIGEEFFFFFFHIJKLNPRTVXYYYZYXWWWVWWWY[]aeeeffcSFHHGFEHKW\\IDILPQMKNNMJ[jfSHFGHHFEDCGLNPQQPNNMLLKJHLKR[]ZXUQLLQTSSUXSKN[cXILSOFDIMPR[cdea]XSRT[^]fnvvj]abURan^FEILLIGDNX[[Zi}gJFGGILQQMHFFGIJLMMNNP[fiaVRSTTTNFCEIZwv[KHIIFGR]XNKIJJKNNKLOSUSNNOOPV[\\VONMLMMMOPOOOOPPPQRSSTOdĳvuvqqj{}{ztf\\[ZYWTRSVVWVUUUVVUTTTRTROONZebURWZVUX\\[ZXVUTTUWWWWWWWWWVVUTSRPPPONNQSVWZZYZ\\[XVZ][X[\\WQSY[ZYXXXXXXVRPPPQQRTWYY[[[[[\\api]SW]YURTQEAA???==@CJNNOH;8>LZ^PEGNSPNHKRQMKECHA76:AEB>:8_hB;;:98;:7O~rqsld]T[t{v|rvsnb^tr[M[]``\\gvutywcG??@?@@FLQRRQ]egdvwZJ9?dnlgSEB?:547?DGID?AAAA@=:;<<95:JZZN>558>==;;:;AIKJGLPH94<HLKKKU_UFGC99;;=DDA@@>=<?CGGDEGB71-;pu`QIHD=@H\\|ynki_NA>?@>=;964557875566;BGFCBIC51001202ASULC<787679>FKLLKLJC>=?CF?40/2:>>?@?=<@DFHHHIJHFDEFEIMI?BPH7LbXMLLJOUM@;:7458;713<CBBDCAB>9;?74?DFKLOSM?9>;2/17=;988:ACC@6,-045765543/00/24237<<977:><83.17851120./7>?AHJD??@AB@;642246899764-+043037998766666=GJB8/3FH:=D>9656;;<;:9866504BIGFFEDDCCA>7224566899?FE>?EA7;EEDGJKJIFCA@@@?>>><<=<989853560/326@F?5640,7A:4888<B@;@C>87776883,2323123.)*-*&'/7850/,*(((((())),0-('*+.5769=:0**,1230,.15956>DC=8:<987678;==@CA>@DC;25BUYYdaY][WWR@.110Jlh[Z`<:>EHHIJQTJCBAADMNC;77<DJC5--122478?NE>EFDME.*0.(.AH@ITJ<<??CFDA8++1+%,465306>B5-4<61;MH1').35542.,(')**(+/45677::9::2)(*,/453244662-*(&$UUUVUTTTTSSSSTUUTUTSSQPPONNNMKKLMMMLNOOQRPOPQPPPPOOOQRTWY\\\\XQLJJKLLKKLKKLLLKKKKJHIKMORTUVVZ^__`a]WQKJJIGHJHHHHIJKKLLKIIHFFGHGGGGGGHJKKKLLKJJJHHHHJLNRUVX[\\ZVWYZ`hjghd^\\[YRMLKKKLLKKLMOQSTOLMKO^b][YXXX[^bcdiiikoeXXXSQPMKJJHIKPX[^a``aaaaacfe^XTQQXaaUNQVZ[\\\\UQTSRRSSTVXXX\\bc_Zh}mSRZ\\W[ff[[ahmmijppnpqqokiho{{pgZUXSV[\\fkfdc`__cinplklqwkld`VWXYXY\\][]b_VT`pkaa_Zd{{}yrqsvwtusf\\cnptwzyhjqogeo}urphdddcehfdc_fx~umosphcft}rlbWW\\ZURU[YVY`beo{jNNQOMMpxXS[WIJSTVdΚUPRPLIFEFFGGIPS]LSPOKMlcCCCBCDEGFK[QBACCDKSUT]km[GEGFDCCBBBBBBCDFFDCBBCCCBAA@ABAAABDDECBBCCFGGHFEEEGIGDHTa_[YWTQOMLJIGEEEFFGFEGMSTUWRGBGMSWWQNPTOKJIGFEEFFEEFHJKKLNQSUVXZYYZYYYXXXXXY[]_bdefgg_IELMHFFJMUiWEHINNMNOOQLWm[EDILKGEDDEJNQRSSQONMLLJIHQVVYYVUUROKKKJOTWRJIN[aYTYZOHKMNNW`bb]ZYZ[[\\_`eoytbV]cVLVfZEDKRUTLHU^\\`\\aq~mOIJKLPRSROKGGJKKLOQTY`dc\\XWTSUTQOQRRZpp[UPIFFCHWYNGFILNOTUQJJNPMNPPPSWWTROMLNNNQQPPPPPPPQRSS\\Hõôstrlwexrppi\\Z[YXURRUXZYXVVUVWVTROPSRONVcdYRV\\[WWYZYYWUTTTUWWWWWWXXXXWVUTTRPPNPRTVXZ[[XXXWVW\\][Y\\\\VRUZZXYXWXXXXVRNNPQRTVWY[\\\\\\\\]^bdKPXZ]ZVSND?@BEEDBA@CJOPPG<67GUXQTfpkVJEGMMNVWNB;769?CC?95TcC<;::::;;BKVo}~|qs~yroiq~}x{`GFM\\bc`]]a^dqyueO@=><;;;<@CHUcbcdcYXW^U:BjzcXMHHFB?>AHJIMQKE?=AA=:87768BQYWG:?B:=KJIE@BIPLC@EE@:6<HLMPTanncQ?:>@>?AA=;?CBAADEFHJIC;5.<p|rcVJGIGKL]~tf]]^L:;?=<;;98877:;:;;79BFFA=BA5/110102ERH<6897567;@GMNNLKIC>;;AG>30/38;=>?><;?CDGHGGHHGHHHHJMLNZ`LEZXHMVSORSLC>=955<?98BPXWQHACIPLDLJ78@AFJOWO>6684/08??@@@@ACB?6--0210////0/1344324:;75443268549<;9413235?JPRWZMA@ACEB:788879@A=961,,03336;;9856:==:>HH?;64?A8:@><;88;>AA?>;99:9>GJJHFFFFEDDC;2/1488799>EC?==715CIBBHJIHGECCAA?>>><;=>:8:831350.247?@5133.*7F=37943::5<C@=9655674.0212122-)(()(*././0,*)(((((((''*+*((*+/5642/.,++-/--/2344552269;=;::64246;BHGBAC?;8779=KTZ`TKTMLVK:285+9`k]^fGFFILKP]c[OJGD@>@?;@DDBIVSE;85..6>CBMK><@EF</'%%%/CF?MRA5656><50,(*-.4=;2+*,26*#3EPURJKM?0(*-0/01//024544468668;CJJHF>0(+-/220-.011.,-121UVVVUSSTTUUUUVVTUXWWURQRQONNLKKMMMNMNOPRRQPQQQPPPOONPRTUVWZYQJJJJKKJJKLLLLMMLJKLLJIJNQQQTYZYZ^cb`a^XRKHGGGGGHIIIIJKKIIIIIIJKKIHGGGGJKKKKLLKJJJHHHJKKOQQTZ\\[\\^]\\]`^]_\\VOHIMMKJJJIJJLLLNQTUPMMJNWXSQPRTUUX\\\\[__ZWVRIFGHIKKKLKHHINRVY_`abbbdcccefe`WRQX^ZRNQTTX]^YXYUSSSTVUTUW\\__W^|jfe\\UUZ_^Y\\cgddfknlmnoomlkkkfa^WT\\XUXW^`\\bd`^]\\eoupgdgijmeh`RTYYW[__djh]UP[\\V]da^t~zz}xsh[Zfppuwr|vektppoy~xrjdca_cjmje_g}|pnookheciprspjeb\\WY\\ZVUXZYZ_bdkziOTXSNNWbXVXTIFOLITW`NOMNJFGGIHHIOgXWTMSLLTJDBBEFEHKMPICCCBCDLOPV]bYMFFFGEBBB@AACCDEDDCAABCCDDDCBCBBBBCEECBCCDEGHIGEEHJLQNGQbb][YWSQONLJIFEFFGGGFGKQTUXODDJQYXPNQQJHGHIIHEFEEEEFHIKLMOQSUWYZYZZZZYXXWXXZ]^acdefhhZCCNOLNLKPOQQFEHIMPPQRSNWkQ@BOYRHECDFKPSTTRRRPOMKIIHS[WRRPONNPOOPNPSVPIIFET`]X[UKLNMKMV\\[TORWYXW]belup\\QV_ZOMY[MEJRUTLKU[Xa[We}nMIIJJLOPQQPKFHJJKMRUY]]ZX[YUTTSSUY]^\\ad^^WKGIGEIMLKKLMNNSYZTIGLMMOPPPOOQTSQPPOOPPPPQQQQQRRSSTLɶƶoipspxj{tigjcZZ[ZVSRSX]^ZWUVVVWVROLORQNS^_]WW[[YWXYYYWUTTTTUWWWWWWXXXXWVUTTSQPNPRUXXZ[[XVVTVY\\[YY\\\\TRWZZXYXXWXXVTPNNOQSUWY[[\\\\\\]]^a]@CSY_]YRGCEGHIHECA?CINNSRE<BOQJGYvwzrYLIINZ^XK@87:>?@ACB=HS@>;::::;>><:Hev~~suz~qH471?Wu]Y]dgehxnJ7;@@=;;;;<<>FU`__VLXYZW>N}yQGKJLVYYYYYWSQOKE><CE>96468FSSPSKCMSFEOTSOJORLD?>><>><>HSUW^elwy_;6<>@@=:89>DIIGCFGIJID>:3=lxpjeZQKPX[o~{{tjeUE@DOOB<<<==<;==85>C@??<;>AB@?=;93.04623DMB76:95788>FLOPQMHDB>;:>E>102358;>@?==@ABFHFEEGHKKJIHNUX]YKIL?>NVTQUYUG=<;78>?8>OVSWZPIQVZe^[^G7=?BDGOLB;4875=EJGC@??BB@=5.//.-,.4643/17:733596/2640.5=>=@@B@91.247<KTUX\\N>?@ACC@<:877;AA:40-.0016:865777=CEDDED>=CB8=?9;>;;=<<@BEECA?=>?BFHKLIFGHHGFEDA9336;;878;;9876653>J>6CMMKJHFEAA???>=;>@<:;932241125:<4/254.(2CB:882.11.2798643247512210/00.*()+,,-,,,+'()*)(()**,.0.)((+.14310-**.230,,.2433016529A?;=>96447>FJF<;CA;757:;AITS;1=>=G>444-,0UdWcifJCHXY\\oe^`]YQE><<>CIJIMTRPOH@98AHCBMNF70;;53.+&%0AB>LJ879//9951+*.6:<<51//+'(#*APW_d]MGG?0+**,.//26:;88998757@IPVPFGH=35862-.,,/10-,6><7SSSRSSSSTUUUVVVVVYYWTSRQPPNNLKLLMMNNNORRRQQPQRQPOOOONPPPQQSTPIIJKKKKJJJKLLLKJIJLNKFGKORSVXVSW_dc`_ab]TLHGHIIHIIIIIIIHHIIIIJKKJIHGGGIKJJJKLKKLKJIHIHGJMMOU[^aaaccdea]]]VNJJLMNPRSTTSPMMNSUPNONNOPQPPRSSSUXXWYYXWXVPIEFEEHKLKJJIJJNW^`_bddegfeefffc_ZUUWUQOOQSUXY\\_[TSSUTQUWUY^cZTj|{kYWVWY[ZZ]^^_`chjhgikmkgd[[]]VRZ[VVZ\\\\\\acb_]_itwncbfgikiki\\SUYWX]iokicdXWXV[`gcdv}xvygY_hptxvkf{~iqzpppvpigfgfeehjhc_f}xoqpkkjdbgijg`]_[XY\\\\[XWYZ[`cflxyeRZd_TPPVZ[UNIHIDEQXO[\\RMLNMMMMLKJHW[R^TSVROIECDEHGHIIFDDDDDCDIMRQNSSNGEGHEBBB@@@ABCCDCA@CEBCDEFECEDDCBCFECBCDCDFHHHFHJKP^[JMbd]\\[YURPONKJGFEFFGGHFHPSV[OCIMTZTKMQJEGIIIIHGJLIGFFHIJLMOQSUWYY[\\\\\\\\[ZYXXXZ]]acdffhgXECLPONPPOLIIGDDEGLRTTRQQYLDET_UKDCDGMRUVUTTTRPMKKIJOUQMKKJJOTUW]`]ZWNIJE?DS\\YTPJIIIFDNWVOHLSUUVX_fjngVRRY]XOQ][MMOPPQMRUTZWPVpeKIHIIIJKMPROHFHJHJMPSWXVWXWVTRRSUWY^_[\\a^UMKLLHEHNQRPONONQY^TIJNMOPPNIJKPTTRQPONOOPPPQQRSSTSJl÷¾}qsrqo~{psgbfhc_^[YTSSWZ^]YVTUVXXTQNNQPMNX_[XZ\\[YXYZZZXVUUUUVVWWWXXXXXWXWVUTSRQNNPQUYZ[[ZXVTTVZZZWY^ZRSYZZYYXXWWYVQNNOPRSUWZ[[\\\\\\_^_ba@;HTXWVTRTVTQLIFCA?BGKNPXSOXYN=5Di|{e`QRbeQB@@?>@A=?BGOH>C@?;:::9;<;<6?h~p{{V979:6CjPV`fmfdo_?6@CA??=<:;;;<CPVZOEV^XXMd{xrMCIJPZcca_]^[WPE@@BGE=4237CPUOPWSJQZSPSVUQNWO<;DGDCBA@AM\\\\\\dhiqvoK52:@FC<7:;?JVLEFJIHHE?;:?erpllfWFL_gxvM<9<<7=IHB@@@@=:=?:5<FFCB>;<<?CD>>B@868833=EB@><97:;8<HPQPRPGC@<<::?;1.1578;>@?=>@?@EHEDEFHLMLF@MXQLHEFEBFPWRNWej]E864:CA;EVRFHONPZ``ijdbQ<:>?@BFGA<89;@LOMIB>:<AA@:1.0/..,2>>85017:406<=98@>728>BA<=CJLD2/6667DGIPNA;<965<HH@75689940..03339?:327:<?@==A@83<FF;?@;;<:;=>>@ABAAA@@@@BEGKOJGHIHGFEDEHD=;==:78;633447846D8.<KMG?CJGAA@????<>A><<834433349;8.0453/+5@A;774220,*,05430/47533210//10.-./0.....+)*,,+*)*,05895/++/1443474.-2652./0//4767:518A@;@@=;;<@FGFC><>>@=41688:C@.&05464230--2Pa\\fhkMABTVcv[Yhc]XJA>>HLJHJNNKNYWH<7=FDDJNPF1+38732/-18;>EC>:0-8?AD?6-)02.48;<3'$'-8?MZ^bdSA><81--....//1311223328GRXXH;@EB<;<81.0120+*(*3764PPPQQRRSSSSTUUVWXYYWUTTRPOOMLKKKLMMNOQRRQQQPQRQPOOONNMNMMMMNLIHHIJKJJJJLLLKJJKMNOPMHINTXWUVWY\\`cdbaac_UNIJKJIIIIHHHGGGHGGIJJJJJJIIHIJIHJLLLLLMLLKKIFGKLJNX^___`cge^_da]]WNKOSY[\\[[[UOLJNRPOOONNNOPQQRRRTVVWYXZ\\_^[WQNKIHHHHHIHIHKR\\[Z`efggggfeeghgea\\YWTQPPSUTSTWecTUWUSVXUU\\_WTcvzp_[[[[ZZ[\\_`_`aaegikhhlf\\YWZ^\\TRVWVV]`_\\[ceb_airpiggfjlmqpjbWSXXY]be]`_`\\TSVY[djb_kzzpjro]`hnromjcgru}thmlnlhffhkkkjjkfab{xywusrkgfia\\[[_[VY]^[XVYZ[`egmulZV^gg\\NMVYYLEILC>FQUVUWRKJKNQRSRONHiXL_][[[RFBCEHHJGDDCCCDEGGHLNQQLKKIFDGHFCBBA??ABCCDCCCDDBDDDDEEEDDCCCEDBBCDDCFHHHIIJJSejXM[c^\\ZZVTRQPNKHFFEFGHHFGMQUZMCIMRRNKLKGHIIIIGEGQVTPLJJJKKLNQUWWYZ\\]]\\\\][ZYZZZ\\^_befhieXKEILIDPVPNKJGDFHGHLX\\\\YSPLLMUYUOEADKSVXWWVVUSPNLKIJLKJHEFIKQVW_deffYMIID@@DNQKGEDDCCCJUTLINSNNUUT`kk\\SSQT^^SP^dVQNONLIOTRRUTTfhWMHHGGHILOQOLIKIGFFJQUURTUUTPNQVTSW_a]]a\\QMPNLLLOTYYVTTTPOTYYOKMMNNNMJJILQQQRQPONPQRRRSSSSTRHŪ³vorsppzrg`^a`_`_ZUSRTY]\\ZWUUUWYWTRPQQLJR^][Z[\\ZXZ]^\\ZWWUUVWXXYYYXXXXWYYXWVUURPOMNQVYZ[Z[XVTUX[[XU[_XRV[[ZXYXXXWWRMLOOPRTVXZZ[\\\\]_^`beK9?FJKJVfdbZUOKGB@?@AFMGKS[\\N@847SrqVQf`aypK;?=AGD?=@HNSK>?B?999899:::9:c|~~{@59:::CHJOZgmda_QC<:<??@?><;<<<@EIKGBNYUQR^a\\bzpMBIKLRZ[[YW[`de[L@8D>:868=MWWW[\\SFFMNONOMKQT@4@JIHHGFB:F\\]ZbgehqtV75<>DLM::CBDSXOHCCHJE=<>@Pflfcf_D<VhsnR@CMOIHIHHECA@><<>;8=DGEB>89;?CDCFHHD<8559?@ABAA><>=66AMQPQPME<9;:8632227::<>@@??>>?CFDDEEFLNH;7MO=<FGGKHAGXSFL\\mrW923;HIGNRLECACNY_``bcaT?9>>?@BDA>BDDJPOKFB?=<>A@9/././.07::63213313=HHDFJD@>FHFB<:BJMD5269:;=:=?:9>AB@@DGGGC<86430/0/058;>?=:9:;;94////.-8DB>@A@==;9997443469>A@?AEHNQLMKIGFEEEDKRKA>@>99;8655597224009B?806GHCC@?@@?>>??>=:87521039;4.474207DC=7455530-,-/341//2544321/.14444651/.//////.-,*)+-03357420235569961013443/.0/9@EEA?:<AA:EGB>?CGHFDA><819C;0132131++12112452223I^^llUEAAHWpw\\\\aSNOHD?>HJHFIIAGJ@JE0,/8?FMIELL?0.122100248=>>;/3BEADE;,'*&*8=AA4%$(2:6C[[Y_[I75752221/..-.243323336@LSNA:;<;;;:60--21*&&&)1425OOOPQQRRRRTUUWWWYYXXXWUTQNOMKJJJLMMNOQRQPPPOPPOOOOOONMMMLKLMLKIFEHJJJJKMLLKJKNRRSVVPJJPUTTWZ[]_dhigb`^[SLJKKJIIIHIIHGGGHIIJJJKJJJIHIIIIJJJKLMNPQROMMLLKIKQUWXXWZ]YQWbb`a`XONSYYXZ\\^\\WQMJKMNOOOONNOPQQRQRVWWXXZ\\]^^__\\YWTPPPOMKJIHKMNT_eeigbbeedghhjjie`]YURSVVROUY^[UXWWXYWUXZTW`feY[bb`^][ZZ\\]^abbablsqmg`VUZ\\YUPRTUXTXb_\\]cffdafkighecinqvsc[ZYXW\\^URQSWRUUTUWZah`UYhpljmpmm|sdbefiikommtztihhhhkmljghkllmmnkdau|{}xxvuok[VXY\\\\WZaa[UUXZ[^cgosaU\\dfidSMQOLHHOPHCHMOTVTRMKKLJLW^\\UI\\LZ^d`YPECBDGIHEBABCCDGKKKONNOKEDCDDFIHECB@>@AABBEKPPHACEDDEEEEEEDDCDB@DDCEDHGEHIHIHPamhVT`_\\ZYXWVTRPMIGFGGGGHGGPUWPEDHMPQPMKIGGHHGFFCHSWYXUSOKJJKNSVXYYZ\\]]^^]\\[ZZZ[]_`bfgijbXPHHHFGNQPMKIHGGGHHEO`e_[NKMOSSUQEAGPVZ[ZYXXWTOLKIIHHCBA@BIPSST^c[X][MDGEDD?@FJHGC@@CGINNGGNOGBMRHQbcTQTQQZ`YP\\k_POONCDMTRMTYX]e^ICFGGGIJKMLPQOKHFFHPTSPQTTRQU\\_YV[a]TZ`YMLONPY[]`cc`]\\ZURQRSPMNNMMLKMMMMNNOQRSRRRRSSSTTTRSQ_|ppopnvqh^]][[\\[XURSSW[\\YWVUVUWWUTRQPNMR[_^__^\\XVZ__]ZYYWVWWXY[[YWWWXY[[XWWVURONLMRX[Z[\\ZXUVW[][WX__WTX[[ZXXXXXVQMIMOOPRTVY[Z[\\\\]]]``gV8:;?AB]og_UQPLEA>??@EJF@FPJ:5676>JD:>VjiyN>;9;HF<<AJQPGBCC<97778799::9KXdusC5999>@BBCOab[[VOQMD==?AA@?>=<<>AA?B?CTXRY`cknsODJFBGUa^^^`^ftyv]=69;:::<IW\\[YRF;858BKNNSZH6AROIKOU[S?DY_\\cfbhtpN4=NI@NfQ6@IJNWRE@?AFE>=@@DYfbdsjC7L\\ckkfb\\V\\c]URNIIHCA@?>=<=>BECAA>8<?@ABEGGHD<54=GG=>ADGD@?>85:ENQPNLD;8;=:2,3=<:<<<?CBA@<<>ACCDFEDJMB05JG;=AA@DA6>UO;8>Nd\\=15@KNQLBEIGC@GTWSPV^]Q?9<<<;;>==FKJKJHECBB@?>??:4..0.-3952/240,-6@HLGGNMJIMPKIJD=<?A<6249=>8<E=6<<=ELPSPGFIE?<:720/-19=AA?A@?=;:84/-,./49=?@AACCEE<;80,,+,.09AA@BDKSRSTMGFFFFFBDPXLADH?::99987::40..15:6/+/CHDC@@A@>>>>?@@>>=:40-1581+35105DH><>71341//011011/-03478731179:;==90-/0/./1-****))++**.55202357:;930///474,,6:AEHHGIFC@A?FHD<;?EE?>A=83-9KB1/1/---.031/14687654@Wfl[B;@@DYnaS[SCABCE@@HEA@EA8;>6?F91/0@NMF:?EIB?HB7432100420229?@@><4+)*&+>ACF9(&).05Ja_X]eW>5543441/02335875234522;CDB@<989<<<4-36-%$'&)1778OOOPQRRSSSUWWYYYYYWXZZWSPNNMKKKKKKMNNOOOPONMMNNONOPPNMMLKLNOMLJHGGIIJKKKLLKJKNPRUWYXQHGKMOQU\\`dggfeb\\ZYSNKKKJHHHIIIHGHGHIIIJKKKLKJHJIIIHHHJKKLOQRRRSQMIHJLNPRRSSSQLN[ea\\`bZOLQUX\\_``_\\ULGGKOQQPONNPQQQQSUUVVWY[]]^`baadedcb`\\ZVTRPMLR]bcebYZ_`beghiknnliec^VPQURTSQ[\\YYXYYWWY\\WV_c\\clbca]]\\XXWWY[_c]Zcnqj`][_c^SNNPRSWR\\g]_bbcggadijkfbbgknulXSY\\ZW\\aYQTRXXXXUTVW^d^RXecalvue[jsqqkhotux{zzvl_ehgffhlmilmkmnklohdn{|qy{~~mZWWUTUW]b_XUUXYZ]`clo\\T`fdggZKFJOU\\ce[PIGHKKGIRWUSQT`kmbOeRUZmzbLFEBCEFEEEEDCCDGKKLMKIJIDAABCEIIECA@?@@@CFINRPIEEEDDDDDEEFEDCB@AFDCDFHIDFHHIGL\\gl]S^`\\ZYYYXVTROKIGGGGHGGEPa]OEGMRRQNKIHGFGFFEGGKPRUVWYYRQONPTVXY[[^_^^^]\\\\[[Z[]_abehmjWY^MFEHJMNLLLJIIIJLMII]feaNHLNPPPLDDLSWZ[[YYYYTNKJIIJIGEABINRPLKPRIBQ[OHKLIFA=AILLGAACFDGFHHIHC@GMJMTXPOSSVZ]]RYofPNNKGGMTSOPSROQQDCDFHHHGGGGKQPLHFGHKNQQNLPY_flib\\_d\\KMYULLKIRbhghiihgeaXQOOOPOOQRQNLPRQONMNPSTSSSTTTUTTSSTL»ȼwrpqq{z{r_Z\\^__\\XSQPQV]^ZWUVUTUUUUSRPNLQ\\^YZceb\\VW^`]\\[[[YXWWWY\\\\YXXXXYYYWTSRRPNNNOT[]\\\\\\YWWXY\\]ZZ\\a^UTX[ZXXXXXWSMLKMOOPRTVY[[[\\\\\\\\]__f`687<;Dgpb\\PLNJFB@??AGIF@>><96678754:>DYevg@;88:JH==ADECBEF?987777799::;DOav_dyO58:;=?BBAFRQKMQSZ^\\OCA@@??>=<;?CDCEEBShdlvxzwwdMIJD;@ZqgelgTZwlB;A=857:FJHE>8684;JNX__N6>Z`YY^^]fgTI\\geb^gqpcI<IYWJRohD=CLPTPEEA:>@@@AABO[`r|_ACMPVUKIV[ZbkYGHKHGGDA@?>==?ADDA<<=9=AA@@ABFHB84:IOE=?BHLHC@@<99?IRQKD@;8=@;2/6?@>=<=ADDB@=<=?@?BFFACH?16DA@A<;<@?8>GA4005FL>47CLNND9BKKLHEKI@?KVVH<9;;98996;HKJIB:8<ABAA@?@=2088007951142,)2BLMICJUSRQPMGKRNG?865303<=;5ATP>3.19ACKYYNCABDC?73225<CC@?@@@><;;812996:=>@CBA@?FKDB@95423338>?@>ANVVUNHGFFFFFC@GXZJGRK<::9;<<@B:20./132.*-?HFCBAA@@@?=<?@@@@=;830361,33//3:;7;C<214222100011.,.116<:448<<:>?=5.-120///,))+,)*))()175114689<;73/..069601>FEBDDJKMH@DIFA>;<?BA;;=92.9SbVB99846;93001469987657CSOC><>>?DH?@GC=@A=<>CHA:9;;<@@DNXWB4=RQAC803JZTG<88866884.-.-14575/,**+)+9@DI<,.+',7H^`[ckZD;64352/.386579754556.'.:@@?=;99@DE64=4&,1)$)1588NOOOQRRSSSUWYZ\\\\YXXWXYVRNNOMMOOMKMONNNMOPONLLMMMNOPONMNMMOQPOMLKIIIIJKKKKLKJKLMOSUUXXRJGIIJR\\`a_]YTUWXUPLJJJIIIIIIIIHHGHHIIIKLLLKJHIHGGGFHHHIIKLLNPQQNHFHJKMMPSTUWWTXbb_adcZPLQZ_^[\\bd\\SMIGINOQQPOONOQSTTSTVVXZ]]^_aabdfgghgggggfda^_dfb^ZTU[]\\_ghfiorqonopf\\UXkbUPPX\\[[ZYXY]`[Yenn|vZ\\^[[[YWTSVW[`\\VW^a]\\bhli_TNNOPTVYij^abaab``inhhgfgfcfogXUW[\\[]ba[\\_ab_\\USVUX^\\UYrwfghfmtzz}zv||{~~}vlbgihgdeilhksokonnomllkj|wey|m[XYVRQV]_\\XVWYY[\\]`ieSU`a^alrhZLZgjlgYRJCCCCACO\\_`bb`didJeZWRczfJEGDBBBBDEFDBB@CHJIFFEEECBABBCHHDBA@???ADGHHEABDEDDDCCDEEFEDCB@BGFDEFIKFFHGHGJ\\kiZS\\_\\ZYYYYXXUROKIHGHHGHGK[[ODCIKJIHGGFEFGGHHKNPQNLJNV`_`\\WTTWXZ[[^_^_^_^]\\\\[\\]^adgiphEUx_HIHKQPMNNOONNNMPPOTdg`MHLNPOKGDGPXZ[]\\[[ZYTNJHHIJNOKGGOSPMKIGEAGY[OPWVOFCDABILGDBCCCCDILMKEDFIJJMSPNSY`]UYX_pbLLKJILOSSNHFFFGGGGIIJJFDCBCEHKKHHIJIINSOLWfkmpolgehfVEIOMNMFHS^eghjnpmh^SMNOPPORYZVUVURPPPPQRTTTUVWVUUTSUK]êxsopqqtzyqaY[aeed^ZTRQTZ`^YVUUUTTTTSQRPLLT\\VVcgga[W\\c_YY[[[ZXWWWY\\\\ZYXXWWVUURPOONOPPRV[^^\\[ZXXYZ\\[[[]^YSTXYXWWWWVSOMNONOQQRTWZ[[[\\\\\\[]]_e]787:7Khma\\OHMKHDC@ADHIJG@<>=9779988=BB@KYJ89;;<IMIJI@=<?EE=7677778:::9:DSXnoiwy_W_pT79<<>@BBAADC>>ISW^gaK>>>>?<;;=?BGLPPKVoppztbcdYQOMLJRkzkfknXPjaAEC:85389:867:>:I^\\]fV85ShcbgjbW[d]OVhjUKbme\\RRRSQP]lp`RB>MXRHE>7:?@AAABHHRsqK@IHHUVNQfpXIWK:=B@ABCEDA>=>??AB>65879ACA@>AHJA64>HE:;@EHLHCBBB@:9AMPIA<;9<@=659:;=?>;>CBAA@>=>@>?FH=;A@79A>>@?@@B@:<=747878==89DKHF>:FSSSPG@823?MOB<=:<=:<:5@NLLM@108@B@?@GMD47F?10665443-*3CNNLJKNTTSOHB?EMLJH>8844<BB;5>TYA4:EHFC@K_W<46=EA::?B;<FF?;9:;=<;<905>=:>ABBCB@:26CIKJFA>=<<<<;<=:?NYXPCDGHHHGGGCAL]ZNUVE<;:;=BHH<2/-./054,*7GHDCBBBAA@><<@A@???=844653730.,*574;@82343310/011.-..,.252059:=>:4/-/00..010./2.'*))).8:65469;:::951014668:?GF>ADGHBLJIHIE@?>@IK@EI=610IqxqbMFB>CG?5/.4789:998753129<;;<?:6>DC98AE;03<=9777<JRMGOa`D9NT@8D<4:JM</,.4;??EIC6*1<3+.../,(+-+(.4<<6--%%278>>PikZD;74452//5976899::995,)2<>>@?=;;CKC238)#3=1))-268OPQQQQQRSSUWXY\\]YVWWURSROOPNNPPOMMOMLLMMMNNMLMMMNNNNNNPPQRRQOMLLKKKKIJLKKKJJJKKMPRSSX[UNJFHPXVSQPKEFKPQNKJJHHIIIIIIIIHHGHIIIKLLMLJGHHGFEFGFGGGHHHIIIJJGEFGIKKLLNPRQPTY]`aacd_RLSYXVYbgb[[VKFFGKQUUSPNORTTUUUUWYZ[]_``abcdefgiklnnmljhghcZVSSYZVYbedfmqpprtwtnghu|xj_a_]^ZYYY\\`^aptwsUX[ZZ[[XVUWXY\\\\YWWWZbmrpf^UQPPPV\\ab]_ddceb\\dpi^_cec^W`dgj^WXZ\\]bdaadb_^ZVTVWWXXXWexuoms{ww||xpghiiinmje]\\pwiotrqqolihjj^bjVW\\^\\]][[\\ZXXXWZ]]`i^S^ddbbmyxVY_`aQDJHCBFKJEEN\\`_]WSTS>\\XWWTSPHEHJJIGFDBBAAACGKIEBABCACEEDDDHGDCB@?>@ABCCDCBBBCEDDDDCDEGFECBACFGGFEILHFFGILN]h^QOY_[XYYYYY[XTQMJHGFGHHIJJHEBBEDBBBCDEFHJKKLOPQPKDBFPX`fg_VUWYZ[[^___``^]\\\\[\\]_aeijjXBEnkPMGIMRXVSX[YWQJJLJO`bXIHKORRKDCJU\\]^_^^][YTNHEFHJKMKJJJKGJLLJILU]WQ\\d\\NFEJGACGDBBCEGGGJNRQKGHHFDFMQS[b`[RNSbo]HJKIHMRQOLEDFHKLLIHIIIGFEEDDDDEEFILLLPSRWahgejv{rebd]ICIKMNGCFN\\ehksyvkb[QMOPPNPYcb`]WRSTUUVWWXXXYYXWVSVQTŮǿ|xtonswxpwn`]_bgigb\\YWTVXZ]ZWVUSTTTTSRPPNJKVWTcmie\\Y]ba[VWZZYXWWXXY[[ZYXXVVTSSQQPPPQRRRV[^^\\ZZXXYZ[[\\YZ[WSUVVUXXVUROMMOOPQTSTVXZ[YY\\[ZY[]^fY;58==Nfmc\\OGNLHDCBCGJKOMHFE;889:;:;@FGBAFC@@BBBJRTWTF>;?C@;7666879:998:<GMOazyningVX\\m~w~wM658;ABBCCC@:57@LT\\hbJ<@BB?::;;=DLSTNKXppnvkQR`c^SLQZeuvnd[fgWXrbFCBB@<7=9669:;;7CYWRUI9E]bepsia[V[ZQQ_iR?Sc]TPNHFGQbfmrnXEJROIA96;@ABAAAC>Lrc@COQOOR`}vH3>?;;:;=?CHG@<==?AA?832547CIGBAFMLA54;>947@CEHFBCFIE<8<ELI?<;89>?;78989@D;9@B@AA?=;>@@DC96:;9:ACA@ABBGKHIH>9<>>;<=:;FKB?==M\\\\XVN@7648CGA=>8577<;:EOLNQF88?A@?>?GSO?<=4-04453222:HRSOKLNJFEDB>::>C@?CB<=>;>BA>:;KQGFPTOF@89LJ4/-4B?;?JQF?EGC92049;:>=56=@>@BBAA?92,-;KOICA@@@AB@=98:>IUUI@CHIIJJHHGCDQ^XUZPB;;:;AHF9..00./8C6*:JIFCBBBA@@?=:=AB>;99876765620-*)8:14A@73431000012/-.//.,0/*/56;95.-,..-+,/12235-')()+1889;638;:99954455208BIG=6?EI>6LOQSPLIGB?>F8H[I:76C`tyvbOL><B<50/4788;;:;=:2,057:=>BEIS\\UB9?FE4*-/48;@GRYSHDQY=4IC:CLE:9DK=22018@ACMRL?E]O62322/*-11+,-..-*%%/9;9,'B`m\\<674452/1678998887641-2<?>@DB?<<EI<02/$&3664/-155OQRRRQRRRRTUTUWWUQRTROOPOOOOOPPOMKJJKKLKKMONLLMNMMMNNNPRQQPONMLLLMLLMLJJKJJJKKLLNPRRTXZXSMILOMKJJHEEEHKLJJJIHIIIIIIIHHHGIIIKKLLMLJGHHHGEEFFEEFGGGHGFFFEEEEGIIHHJKKMSY^beedcde^PJLRVW]cddb]WOIDBIV\\\\XTRTUSUVPOTUVVX\\___abbcefgghiigeb_]^[WTSSWVQPX_b_aknmosuuttppu{|~q_^_\\Z[Z\\bcdmfnnRX^ba^^\\Y[\\[ZZ[\\\\[YZcruna[WTPQTVYXRWcgdekkeij^Y^\\YVUR[\\cukWVWY^cc^]_]YZWWUXXWVWXYT\\}yz}qrz|xrhiihglkb[PNbxoqwusrrrigii`Ua`RUX[`gkd[Z[YVSRXbcfj^Zceeggm|^QTaeUECDDIWbd[OHPTRRPKJJ?`SUWREEGIIQWWWUQJECACHKJFEDBBAACFFEDEHGDCCA@??@ABCCDDCDDEDDDCCDEFFEEDFHGGKIEHNMGGGGJV`[PKIV`]YXYYZ\\_\\VSOKHGFFHIHGGIIEFMTRIADJNNLJHHHKLNPKEDFHLWfg^VWXYZZ[]aa```^]]\\\\]^_behjeOF@MYQGBEEN[\\Y]`_]VMIGGR][OHHINUUJADNY^_`a``_]ZVOHFGHIJJILMKHFLNMOTVYWX^jk\\KCEJJEBDCCCDEFHIJJLLIIKJIGFINV`aYWTGCP_TFJKJHMQMKJEDHKNNKHEGHGFFEEEDDABCFIKNRVTTZ`baak|}jUPQOJGEFIKHEFKWemqu~|k^]VMMPPNNSbkid^WWZ[ZZYYYYYZZYYVSNGʱºƿ|xxonswxqkffggfggc\\VVUUWYYYXVVTTUTTRPRQNKIOVT]qqe_Z[ac^XWY[[\\[ZYYXYYYYYXXWUSQSRSRRRSTRSVZ]^\\[ZXZ[[[\\\\YY[VSUUUWZYVURPMLMQSTVUVWXXYXZZXYXY[\\e\\@9=BBDW`[[SOSNIDEFEHKKKKJJE>:9;=?>@BEEHHHHHHIJIJLPVVI><@A<98878889:99988>C@>Mnf[^_mzr~aI<879<>ADEF?778<FS^^QB@CDC=777:DORLFINZputpeWWahfWORVcswrfR^kfau{\\FB@CGGC@?:7;=97866>CFIJHQ]`myh[WWUQP\\jZ?LbWE@>;?IX_YbowvcJ>CJE86>CEECBB@=Wx`L_ojUINhT479:<<;:<?BDDA>?>>?@:21235<FKIEDINK?437767;?ABDDDDILIB>>AEC>;;989<A=99<>CHA=AAAA@?;67=@?=844469AFDABFMW_ba\\QD>=<>??==HM@9=?L^c_]TDADC>=@?<96115<<=IQLMQJ??@BA@?<>FF=952;EA:5345:HRPNNKJJG@;9:;==??96@B7:D?<::;<>EKNIB?=8404=:2536;<;?LWOC@EE<4-.798BC96>ECAA@?=81.,.;GE=:;>@ABCB=79><?JPH@DGHIJLKJKIGIRVTWTG?>=;;?@;7673./6DD4?LIHEBBAA@@@<::@DB?=:65677641/-,+6<76>A=653100/012003566530/566532.-+,+)**++/353-****+/226;86:<966654663/.6CG=319D?/8OQOPMLGC<3*4;JZSC=>@Ec~rWS;.564334568;:9;?=62468<AFGOY\\^_VE>GL8''-4;EGKUVSLFGQF8<==BBEGBGY^XTI<>D?;J^d]\\qvV755240/36321/-*''1=??@5/4LgQ./8532.-1458::84.**(*-28::<=98=INA457,\",4*.;<6331MNPQQPQRQPSRRTTSPNQRRRQNNOOOOPPOMKIIIIJIHJLLLMNPNNONLLMNNMMMMLLLLNMNONKJKKJKLLLLMOPRQTWYYVNHHKKJJIGGGHJJIIIIHIIIIIIIIIIHIJJKLMMONKIGHGFEDDEDEGGHHIHGFFFECDEFGILQUY\\bdfiigfecde^PHKOPU\\cijda][ZPHLW_]YYWTRSSPPSTUTTTVXZ\\]_`ba\\\\]^][XVUUTSSRQQSRPOOV][W^gd`chnnhfjhdgng_^^^^\\\\bjeZZV\\qgX\\gui[c`\\a`][[[[\\]\\\\aknh_]XURRUVSOOYadeflole^Z]^XTRSTVY\\hqaWUWae`YXWYWWYWWYXUUWXZVS~}zz}xnjnttqignofVRPQNMStvs{~yyxsjfmhcYXd|uPUWWY\\fqth]ZWROOVbgkf]_cdfhgm~eIQdkh^K@EXlstng]OHFIKIILHR߾hHPMMNKGGGLRUWXULFECCEGGEEFEDCCDFEDCDGGDCBA@@@@AABDDCBCCDCCCBBCEFFFFCHQNJKJFHLLIIHFEZcPIJGR]]ZYYY[^a]YUQMIGFGHJIGKRLCCKWYOKRZYROJIKMMOSSJCCDFKVb[SUWXYZ[\\_``___^^]]]^_acdfiaKDCFSSFCGFGLY[]aca[UQLMRXQLHHIOTPDAHR[`abcbb`]YUPLLKLMOOLRSQRRTSOT]\\WSV\\`cZNFGGGECEFGGFFAAEGGFIKNLIJJJLNU]WMPSKBBKJFHHHHJMIHHCCFIKKJHFFGFEFEFGGEDDEHJLQVWTRTX]agvv]KICCHFDEGIHCCKUZbjt{{k[USNMNONNP[lpjc^YYZXVUVXYZ[\\ZYWUDxôº{xwmovz|tmejmkgfd`^VTTUVVXYWWWUUUUSQONONKHLUTWmwi][]ab`\\XX[^a``][YXYYYYXVVVSQQQRSSRSTURSVZ\\][[ZXZ\\\\\\[\\YYXUTUUW[ZYUTSPLJNTUUVXYWVUWXZYXYXXZ\\e]QMJGD=;CM_^YXRJBBCDECA@CHHGDA?>ABCA@?===CGIJLHGBFLQM?<<>?=<;:99989:99999=A@@?a|}qjiZ`squm`VROOLHEBAAB=9:;=BMQH?ABBCA<469GWXN=<Q^Xhwwkc^Z]df`[TO]oywdQ_rmmkZE69@??A@??A;AE;5696524AOPMYafumNMSOKQdoX?RdSC>;;@J[UL_qr|nH7>HH?=EHIGDABA<curoOPT\\ob>6;:9=>><:<?AA?=@>==;621236=DFFEDEFD>767657:=>?ACCDJMIFFDBC@<;=?>86>EA<?EIIGEDBCB>><869=;:84128>BDDBER`fihfd\\K@=<>?@??GK>4;AIXbdaVC;DIE>;9756777;9:KQKMMC<?CGEB=8966;BHORRLE?<945=JSSOLKOTP>=>BBA@=:=HE36@?;9789;@HH?79;845:=:59:77::<EPMA;?D=71.97>K@69?C@@A@>82.-.3::6667:?BBCB:49?85ALD:>DGGJMMMMLKKIMORQHDBA?:68=DF?5./4;GFFLKHECCAAA@?=<;=CEEDE>;9975421.-,4<>;89<=93011001203776:;63378443310./-++)),-551,++***,++0:>>>>:423334420/4?@4-25@6)3;:915A;50,*2LXXSI@AE<Vye\\:.244444365<:87>B=0599AEJQQX^_]\\LBII4')+1APIJUOB;?ILNI=9434ALJCDNY_`RJMLGRdge_bS2654225899640($)5??>@92&/D9++032/--15679:82(%%&)/10110248G[W=/-.)$1:209>=751MNPPPQQQQRQRTUTTRPRRRQQOOOPPPPPOMKHHHHHGFHJJKNPQQPONMMMLMMMMNMLLLMNOPPNMLKKLMLLMNPRQQSTTUTPJHJKIJJJJIHJIIIIHHIIHIIIIIIIJJJKKLNOPQNLHGFDDDDDEFGHIIIIJJJIEACBBKRTWZ\\adedfdddeedef_QIGHP[djmmlhgmk^QLRROUWTQRRQQSTTSQONORSTUWWVSRRSSRSRRQPPOPPPQOOMNPTURT\\_[Z^a`XV\\`\\Z_`b``ba^[gs^MQSQY]ZXawk[dddge_\\][[\\__]^`ca``XUUUUSRQRVWW^elnf_[_f_XSRSZVW\\\\efZUWad^XWWVVYYWXXWVWYX[[Vn|vnkfeeormlotti\\MINOLi|vwtllojd][W`ou^VXZZ\\]blswk`VPNOVbjmf\\accehhl}_AO_cns]CJ`lncYZXPHCCGHHIG<{՜^GNLJLIEEEEFGHKIGGFDCCDEDEGGGFDEFEDBDGGECBBABAAAABEDAABBCCCBBACEFGGHEKVVNKJGHKLKIHGFTYMKKGMY\\ZYYY[^a]ZVQNJGGGHKJHIKFBA>DKSYa_RKRXXUWZZ\\XIBCCDKVXPSVXXXZ[]```___^^^^^^`bddfh[EFRY\\\\VLJOOGNY^bgd_\\ZURSQJJIGIOSK@ALU]abcdccb]XUROPOOPSSPVWSRUWUT]b]VQLHLSRPMIECDDEHJKJHCACEEEIORNIHHLQSTZYOMQNID@ACEEFHHHFFFBBEFHIIHGFFEEFFHHIHEDGIKMRUUWURNOWi}uaQHDCEEDDFHHJRZ^RQ\\jvyjXQOONMNONMVhtqga[WVTSRUXY[\\][ZZLk¸Ĳzxvnjrxrmjhllheeb^[UTTUVVYVVVUUUUTQPNNLKIGPVVf|ra\\[`db^ZWX[_a_][ZYXWVVVTTSTRQQQRSSRSTTQQUY\\[Y[ZWY\\[\\[ZYWVWVTVY[YWSRTPKJPTUVXYZWUVWY[ZZZXXZ^dZWZ^c]TKJWdaWPIC>:9;;669AFGIKKGGFDA?=<;98?GKJFABDIOOH>:<=>??>;:::89;:::::=?@BCQVSe{}yyoMKfgebdcdinolaN?<<;:<>>?@=;?DDBB?;5=JY_N>8AZdW_tue\\\\]Y`jhZLNZkziXP_xehZ6068>?<:;<=BEKC639:6456>NOTbitzmBCJFGO_hP?T\\JB=8:AJRHB^xy|iKAEGGFFHJKKHBC@9aaNXVOJFD>988=BB>88>BB=:<=<=<8510249?ACFDC@?<:86447:<<>@CADLNKHGECA>;:=@A=78CICAFJKIFDEFB<;>=99;:974218BEDEEL]ijieab]K?<=>?@@AEF;2:BGQ[`^UE6:FG@:4115;=<=::LSMLE84<CHD=543.4DNXVNMSRQJ>885A\\ZNPOV]TB@BFGD@=;CNG61<?;976535:89AEB<69CB<78988767;DE@97?>954;AON=6;@?=?AA?5--.05842466:>ADI=58<=3,:F=7BGFEKPPONNOLHILPOJFDCA>747?HC7..05CPNKKIGEDB@AA@?><;>?ABFHGC<755220/.3;@<53:A>40110011110/38;750/33345321231+((-3861,,*(***(&+9BBA@;53233334535973144>7+'%%%$1@:630,:KXYSJA@D:@`tuZ1.124565373=:75>G@/4<<EHMXSXaa\\I<BFA0'*),CPHMSB25EQURQK8*/9BI@504CGE<7@NTWWXbYAFta19=5567:<=90-*&(1?@>@=3*%-5301132/.3:<;:9841/..0352.--0>M[`VB4./47BGA959><96MNPQQQSSSSRTVUUUTQQRRPPPPOPPPPOONLIHGHHGFHIILORSRPNNMMMLMMNNOMMMMNOOPQRONLKLLMMNOQRRRRSRQQSQNJJIIIJIHIIIIIHIHIIIIIJIJJJJJKLLMNOQRRQLHDBCDDEFFGHJJJKLMLKIHIFHTYXVWY\\abaabccdedcfh_OGGNW]^]ae`^cfggj[FHPRQPOPQQRRSRQNMMNOOPNNPPOOOOQRSRQPOOONONNNNOOONOQRWZZZZYWTVZ]^_abaabbb_iwcX[\\XTWXUW`ecbfllf`]]\\[]__^`c_]_`YQTVRQRTSTTRW_jl]Z_dha[URTWX\\a_Y_YWX]][XXXXWYYXWWVWYZX[\\Ya{~uplggedbmrqrqrw{[MNO[x|qxupqr{j_``YUZ[YZ\\^_`chlqscVPQSYclma\\`bcgiij~}eJ?LZWXdbUV][XOJPVRJBBHHFGGOKt]ILKIFDDCDCCBBCHHGHFDBCCDGHGFFEEEECCCFGECBB@BBAA@BDDBABBCCBBBBBDGIIJLOTVOJIHJKKJIHHIMLLLJGJU\\[XXY[^`^[WSOKHGGHLKHJIEA@??JRZcZLFQac\\]`abYHBCBDJSRRRTWXYZ[^a``_____^___acddfdQHUbab`\\OIPSPMX^bgf`]]WSQLHJIHJPQG>CPZ^bcdedeb]WTRQQQPRUW[ZXRSWZ[_cd\\TOFCGKQSUSPKEDFIMPNIGDCEEEJPSMGGJNTVSX\\WUROKE<>ABDFHGEDEEBAEGHIHIHFEDEFFHJKJHGHIJJNU\\_^YMFOhzywhTJFFFEDEFGH[vzplebcqtgXQPNMLMNNMScssib\\URRRQSWY[]^\\]RcľǶzx|rlxswukjikmheeeb_ZUSUVUUUTTUUUUTRQPONKIFLUU^wvd_^`ab`\\WVXZ\\[[ZXWVVUTTRQRQRSSRRQQQRRRRQRW[[\\[[ZWY[[[]YWVWWWUWYYWSTTSNLLQTVXZZXWVVX[]\\\\\\YXY[cXEPjsrqng`VLE>9769?@=:;>BEHJMLJIFDB@?><;;?DIFB@AFKONE>;;:>?@><;::98::::;;=>@CDC>=Vx|ztbGCS\\\\_chkprw{vU>9;;<=>>?97=@ECBA?=<CU[RC78AVdV_qo_JR][\\rw`KNUe^PSP[xcfQ3567=?=;:<?ELL?48>;5457=DT[Td~{xlA?GDHMRTH>KLEB=8;AFD=<[~|{ePPMNIEDBFNLFDDA7\\y[R[VH@AF=788>FFB<7=BB?<;99<?:4112467=BEDA?===:85479:;<=A@DKMIEDDC@<::<==?<9?JJCEHHGECBEF@8;<99:9876436?EEEHSahhhd`a\\G<==?BEDCCA806@FLTWTQK?;EIB=:435<CED@@INHC913789=9110.5=ShcXXXWTPHAC<AYTCJOTTE:=DGGB>;;DNH93;@=;:73/-,-5DIA<89BB8679;8567;@DGA58<::>@HSN><?A>>@BCA6,)+/35432446=@CH;8?@;/+5==BKIEDHNPQPOPMIGGLKIFFDC@>:45;=92//0;MPLKJIGEB@@AA??=:::;=>@AA;6543310/4;?;57=A@942200//0/+)07:982,-1245543465-((.663.++))*))(&+:CBCA;53243246876744667=;1))0-*4?AC<0/MUKTTKB@@2%0O|;+//14544160<;:7<==/7>:EKUZUW`bU5*6;7-())*<JGKRIIKHKRNDHH52@GNX\\SMXTJI=8ESSGAZ]>,681794467:=?=0)/-&.;@>@;0)+356754562,1:=;889886556695/..1C[fbYQKGMTQSMA;:99;<?OORSSTSSTSRTTUVVUSQRTSQPOPQPPRPONLJHHHHGFHJJLORRQOOOMMMMMMMMMNNNNPPPQRSRPONOOOOOPPRRRSTTUUWXUOLJJIHIHHIIIIIIHIIIIIJJKKJKKKMMNOPQQRTSNFACEDEFFFHIJIIJJKLMNNPTXVUUUUVZ^`adffffffgjh]PJKNOLLMMMMNPRRSULIJKKMOPQQQQRRQPPOMNNOMMOPOOPPTVVTSRQOPOOONNNONNMMNNOUZ\\\\\\]^__``abaaaaaccflifggaXUUUU]aa]`opfb]]]^`a`_dh\\ZVYYZUPQPQTUVXY[]gjVU^bfc\\VQVWY_df`[XZY[ZYWXXXXXXXWWWW[ZX[]^]]g{yxtmfegecfkoqrutso}\\LORftkj|~y~z{saghgedb]]`deeehihi_SQRV[dmj\\\\__bfhka`]I>CNZYSW\\ZURPOJQXWRKEFMIEGGSI;>Um?BJJGFEDEDCBBEIJHIFDBBBDLKEDDDDEDDDEFEDCBBAABAAAACCCCBABCBACCCDFHGIONLLKIHFGGIJIGHJJIIKIFGS[\\YYZ\\^__]ZUQLHHHILKJKLHCBDIOMP[UIDFYgc^`cdVEAABCIPQRTUWXYZ[^`_______^_``acccd^SWcfeb]QFGMTZYY^cge`ZXVPNIHJKIMQOEAJT]aceffeeb\\TQQPPPQRW]daXQX^dikhd\\QKEIMNT\\^__TEDEHORNIHHGFGGKPRKEELQVXUVZ`aVLHGB@ABEGHFDEHFCCGHHJHJJGAADFFHILLKJIGFEGWcdb]PGNgxxxhVQMMJFCDFJIRm|z{pfjjdXSROKLLMNOQYmti^ZTPPQRSUW[]Zd\\Zǲƿ{yqtoqmlhjnldccdc^YUTXYWVUVVUTTSQPPONLKHGSZZkyjaaaaab^ZUWZZZ[\\[ZVTRRRRRQRRTUWWVSRRPPPPRV[\\Z\\\\[YWZ[\\\\]YVVWWWUWYWSSTTPLLOTUXZZYVWVUX]_^^\\YXYYeX@IeuokhcR@8679;>KXXTNKIEFJMMKJGEGGGEDACCCBABBCEGJHHC@>=:>@@><===;99:<<=>?@ACCAEBIk{maYPORX\\]^_^WSXjpT@;>>>??@@=>A@CBAA@@FLPJ@<;9>P__jldU?GZdm}jWZb_ICVQToqcW75669=>>=AHKKC76CF:5568;4BG=Tsvouk><HHJNWSMI?;@>>:>AB?>>XzyybSWXSF=;8COMHFD@7T|}l]WZSGBCB;799<CECB?>>@DD?<:;><4012345:>BAA@>?><;=8888777=?BJJFB@@A>99:;;<<=;=FJDBFEBBC><CE?88:98879845:?DEDJYdfggd_`YF:<=>DIJF@;514<BIOPMLJHECFB@A;8;@GLKFGIFD@50346;;5///37<YqmfbWLJNRKEHLOC4;EMI;7=BEE=:9:@JI?:>A?==92//049BD<=>;=<59BHGC?<<=?EIE738<CIGJOOHEDCCBBBDB5.,/7<6441114:;<=C@<=81028CLJBCCDFPSQPQPMG@CFIHGECBCD>723431//2AMNLLJHFDBBA@@A=<603854434545453237;:779<<:85442///////278983,+/3567776872)(.51,*(+,//,**-8?AAB?7211443488:87558;=@?42J_XB7?HC5(,SoXPPJB=7.(%9tc('--.010//1.:97;;272<?8@Q^ZTU^`L0)/2/+()+)3CIMTPF<//7<9<HG=CQVahf]afeiid^YO>.GU9.572/.24767:BD<8;<0,5?==8,'+577;><665-*179869888766662010.6K]_[YXU]iaTIAGL?//7?QRTUTTTTUUTVUUVVWWSRUUSPOPQPPRQPOMKIHIIGGIJKMPPPPOOONMMMMNNNNNNOOPRRRSTUVWUTSRPPPPQRRTTVWVXZZXSOKHGHGHIIIJIIIIIIJJJLLLKLLLNOOQQQQRTVTLEDDDDFFFGHGGGFFHJKLOSTTRQRSPMPYbghiiiiiiiklj_RLKMLLJHGFEEEFGHHHJKKMOOQQPPPQQRRPMMMMMNNNNNOOQTWVVURPPPONNNNNNNMMMLLNU\\]]adddcaababbbdeecabdefc]VUVZib[airhgd^Z\\accb`ij]VRUcgUKOQRRRV[]`gkiYSX]fh_XVY]X\\fhgb_bb\\ZYXWXXXWVWVWWWYYXZ\\_`[[oxqqpmkhihgjpspnqsutubMPQUZY]qqclkinoicbcimkfgkmfVRQRX^fmi[Y^_`dfneNAABLU`b`_^QIFMTSY]SJJKJMICFGGEHD=@ciF<INIEGHIHFCBEGIJKGEBA@EPODBCDDEDEEFEDDCBBAABBBBAABDDBABCA@DECCFFFHIHEDHJGCABFHHGGHJJIIGCFUb]YZ[]^_^^]YTMHHHJKKLMMKFDKVSHIQOECARe`ZahbOBA@ACGKOSTVXYZ[[^____^_^^^_abbbccd_\\`dc`VKC@DJOTXZ^ehcWPONLKIGKMKPSLBCNZbdehhgggc[QNQQPQRTX\\c`RN]fjspgd[KJLNPU_c^^`TFDEGNRMIKNKIIILPOJEDJQV[[UW]^WJEJLJGEFHIDBFJGDEIIHMSOLLNNKFFIJNOPOKGEEO\\`^]YMFK`plnncZSQNGCCFMMGOhwlaruog_XUUOHKKLNQQUcpj[USONPRRRV\\^beSǺ°{kq|uopielmf``aba\\WSVZYWWXYXVSRQPONMLJHIPWYdxthdba`ab^[Z\\]]__\\ZXVTSSRQTUVVWXYYXVTRQONNRW[\\\\\\\\ZYWZ[\\[[YVVWWVUUZXSTRROMMQUWYZXVVVUVZ__^^\\YXY[eZIF\\tl[UULA>BLNMPU[__[VQMNSTNNLFEJNLHFDFGHA>>AFFB>>@ABB@>>AA?@@@@=98;=>@BDDBDCBD@;Ogf`[YUSVVMKKD:6A]bLABBBBBABABBAAAAAABCGGA;:;<::I[greUJA@Jg}yd]ek_JEUSN^wsZ62745<><>EMRJ=59DC8578877<IOPXnrr|`68GHP\\jqjbX@6;?ABA?AAAQqvsYSYTF9578ALNKHC=;IY^fbYUTUPHB@??<;;;=AB@@=;?DD@?=;>=621133469=?A@?AA@@A>9653339>@CFC@<<?;67999::;<;AHD>@EDBCA;9?E>79:868:855;@DDBJ[defea][UE:9;<@GJD<7315=CGKLJIFJI>;<;;98;CIOQQPONNF839@FUU;+-2<@D\\kd]TFDHMZXKNM>.+28A?79;>A=7579=EFA@ACC@=8459=@;9:9EHB?62<NYXSLD@;;<<998:?EKFGPPNLJJIFDBD@2.17BKH@;71.13456;:543557@KKEEKOE>JSTRRTRG9;EIJHGEDEEA9310/0--/9IONLMKFDDCA?>>>=4,/45431144657779;944542211255211243576434320-.377:<<99<6+)-,*(*,07:5.+0<GC=@C<557657978887655;?AA=:Y~]9:A4*()KrfROKA61..,,E4&,+++,-.//,.6236946?DA8AS[TPS^^F51671,(),*1FYb\\C*%&%*4;46LLKZ\\WTVXYcjjs~iN;03>0'7OKD?0,-.28?CCABC<-/7;:5+&+499;>?743,&(,38788887753/,,/0--2;DGJKHMXa^UO\\dM,&.4RRTUUUVVUVVWXWWXXWUTUTSQOOQQPPPQPOMKJKIGGILMMMLMOOOONMMMNNNOPONNOPRRSUUWYXURQQOONOPQTTTUVVVXZ][VQKGGHIJJKKIIIIIIJJKKLMMMMMOQQQQSRRSVVSMHEDEFFEFFEEEEEEFEGKLLMLLLMMIKT`ehijjkklllkllaSMNPQQQLIHFEEEEGHHJLMOPSTTTSTTUTRPNMLLLJJLNPONMP\\ZRRQTURPNMMLLLLMLLNMRXYZ`ddec`____abbcddbbaaceb_^_ake[plW_`[SUZacbfml`WPVkbMLPRSQQUZZ[hpjYSUYfkd_^\\ZTZfihghmj]YXYWWXXVVVVWWXXYY[\\^bcdt|vvtrngfglpstspnosx{}veWUVUTSVaqqjzj]jkhihlkjgdhqohkteTQQQX`iojaY]daafpv^BHRZ]]XQWcSDEKPU]]ODHQNIFBCEFECCCEBJHBLSJ@EJMKFCA@DKNKGFEA@GOLDBBCDDEEFFFEEEFEDJLGCAAAABCAACDEGJHFEGHIIGFEFMNE>=?CEFFFEGHHGGBF]lc[[\\]^____[UNIIHJKLLNNMKILRNGFHHCBG[gXPam_H@@@BCFKORTUXYZ[\\^___^_`__^`bbbbbbba_^^ZNDAAACJRRLP[de[OIJKKJFGMOKPSI@FR\\dgghiiggcZPLOOOQRSSTZXHG\\hlqma^XIQSPRXegXTSMHJJIOTPKNROMLKLLKJFCEIO]bVPSQOJEIOQMJHGFBAGKGFGGHXqyof\\agbYNGGMOQPKEGNY^\\[[VIDGMSOZtrg_XLECDEKOKI`lPA]vl[XVUUPLLLMOPQRXefWMNNMORSTX[]cSùĿóxmnzypwq`bmja_a`^[YVTWYWVWXXVUSQQPOMLKGEMWVZq{ngcbbabb`^^`_`]]ZYWWXXVTRTVXXYYXWWWURQPONPW[\\\\\\[XWWX[ZYXWUVWWWVXZVSSPPONORUWXVTTUTUV[__^^\\XWY[bXKHYkf]URPNL[j\\NNHFLUTTVY[\\XTUTPNNNJIKLOSSMKF@BA<::;?DDCCDFBADFFEB=:;<>AEMHDDCA@<<JdujXNIGKF>:;745EWOCFMNJFB?@BBABBBAA@@@?=979;988?PdhVJKJCBYjaabcikmYL\\XJGeyS446548;<?GLPD88;><7589;DRcqoUKerjoN38=D_od\\MUlO14=AAAADEHPmweEFMC8347<CHKLI@89<99HLFJPQNLC:;BB@=9:=?=88;?BA>>=;;:7421333579;>??@@@ACB<84334;@AABA?=<=:5576558;;8:BC;8?GHFFB;<BA<:9779:::99<BDBHXca_]YXWM@::::<AD?:8514?EGHHIHDED:7865766@OVTTUTTM@8?NQQ[]G/+5BC>M]WND>IQPZ\\MC<0,/-0577743564369<>;:@GIF@<;:<@D?52:GRUQH=79GPOIBA@;73469CCABCBJUUSOLKHC?AA81047>HLMG<4/.-./1/11./7=CLKHLSWZO;7FSUSSTI7;KMMKIFFF@8467641.,.6DNOLLLHDFEC@??><91/57547854456669940//---0256656467645300/00.--389<<867:5,*.134569==8439FKB>CC??AA;7:;97885455<AB;4L|O721+))+GldTLF8/2/*0+(&)+)+*,0103-077FJA79AD@@IMKDELRLBC;8:40-+))5PmuaA20-)-531AMLR[ZSOKOUUQcx|cTB830,'&BZWOC;99759;====:-*-/45.&+230./00/-(&'',2588988740.+*+./0+(-7AFDCF^njecfV3%)+SSTVWXXWVWXXY[[ZWVVVUTSQOOQQPPQRSPNLLKJIIJMMMMMMNOONMMLLMNNOONNNNORRSUUSTPNNNNMMMNQSTSSUVVVVXZYXVRNJIKKJKKJIIHIJJJJLMMMMMMOQQQQSSSRTVUSNJFDDDDEEEFFGGFFEEGGGHHGHJIIMUZ_fklllmnmlklmk_QMNOPRNJIGFFEEFGIIKMNQUVVWXXWWVTRPNLLJJJLMOOMLN\\YQRQVUTTSPOMLKKLMMNPRSSSX^bca]\\]]^_``bcdedddeeedeeeghbkxeRVWTRQRal_flg[WQWbRJQVVUUTUVVWbokVPTW[jkga[UST`adgkqj]ZZYYYXWWYYXVWXYYYZ\\\\]]bywz{vjbbemvwwxvrpkpyxn^V\\]ZZ_gjkvq\\LS`f[\\ilqpgnuso`[hronq^RRPQXbksrgW^ecacjeFLXWUOH>BUNACGKPXYOEEKMHDBAADCAABEDCCDS[P@?FKIC@?=FSTMHHE?>FMHBACDDDDEFEILLLJEFT^UFAAB@ACCBCFHNLGFFGHHKLJHILKD?@BCCDEFFGFFGE?Gapi^^]____``\\WRLJJKMMMOPNMLJIGFED@@CP]\\OK\\l^E?AABCFKOSTVXYYZ\\\\___^_`_^^`bbbbcca`\\XSKBAABCBIW\\RNRW_]OFHLKFBFOPLPQE@KV^fhhiiihfb\\VRPOOOPPMNPNHK[fli_Y[VSRTRV\\eaRKIGJPQSVYWPORQPPNIFDGJKKKMX^UNLIIIFHNPNIEBCCACFEGDAV|qptqjYHEKMNNKHLRZ\\Y\\[PDBDA@=Jmzrp`JDEEFIJIL\\\\HF^}pYSUUTTTQMMOQRTV_e\\QNONORVXWV]Mkúķ}qy{fzszzeYcmfacc`\\YWVWWWWWVVTTSTROONNLIEHRVVfztjebceeb`_^^``\\Y]_^]\\][YVTTVWWYYXXYYUSRRRPPVY\\\\\\[XVWYZ[WVVUTUVXZ]YTQQPOOQSUUVTSTUUUUV[__^^\\XXYZ]UOPZZ[[ZSQPO_aQFCB?CKMR^d`ZX[^^]YRMMOUZ\\\\YX\\Q?<<<:8<?CCBBIC?MRKIIFE?;;;>BFEDCB@=>NbooXJDB?><9899:BPI@CGPRNGA=<>@BDCCBB@?=::98998776=OQFOUPIGJH>Lglk}aO\\QFAG[E;855558?CCFE>534555589E`q{vfZ\\[RPO>8ABGapK32>KD;<>>;=@GPUVer^B=?:8877??ACCA<75632?HILORUWJ74?GF>:89=;68=AAA@?<869:5123334779<==>>@CGHC>:7769?BCB?><:9623666568965:?<8;AGKGB@??><;:8879?@?>?CDBGRZXWWUTTI=9:::9;=;99846?FFFGJHA>>;9<;9=:4=Va[YZXSD9HY^ZXUUN4.>FB:BRQG?CRXUWTC6/+13..1562.-1531488788<IMHA=<<=AC9/1C\\f^PECB<8741149;62:?AGHC@?COWTNJFD@=;<=51589;>AII<440--/1/0-,6CJOOLPY\\^]N8.6ITSSTL<DTSQNKIHHA:7:=?=952/1;HONKKHFFFEB@???@<8;=:8>@:5331/04431/02437;:898765210/144311.,,/2784/0462,,/48:88=?=;86:?A@BDDEFFD<88876686345:==10]|e@>3++.)5IhfQG=0-.,.78.*)))+,/10.3.1L^kgO946:>DIKJJKG<2=NB3204:90,7UoiM@BB9389,6RQHPZTDINLVO8Tx]XG;=4-(+6R\\WUNNMDCJC<:;;6,()*.2.*-/.-*()*-.*(***+068:98720/..+,01.+-7DLJKG`nd`ZXK.#&&TTUWYYZZYZZ[[]][YXXWWWUSPOOPPPQSSPNMNONKKLLKKMNLLMMMMLKMNNMMMMNMLOQQQPPNMKKLLMMMMNOQSRRTTUVVWYYYYXWRMKJJJLKIHHIJJJKLMMMMMMOOOOQRSSRRTUUSPKGDCDEEEFGFGGHGFGHHGGGHHGKQUU[fkjjklmmnonlmj^QLLNOMKIGFEFFFFHJKMNQUWWXYYYZYXUSPMMLLMLKKJMPQQSUSTWWVWVSQPNKLNMMMPPPPQTY[[[YXZZ\\_``bcbbceeeeddedcdgeelbUUUUVUTdu[^`\\XY]`WMT[XVVUUUTTWZcgYUXXZ`bg]YWTQ]T^gime\\\\\\Z[ZWVW[[XWXXYXWXZYYV\\{}zxiadflvzxxxwupmuwxjWZa^\\aheb_^YTKGLR`kovzqq}|taVX`inhZRROOXeowxhSXbfefblEEMJHDC?=DEADEGJNOKEDFHGCBBABBAAACCDBEU]RC?DGEA?<<GSOGDDC@?DHE@=>?BCCDDELRSRMGFLXRD@@AABDFCBDHNLIGDCBDJNLIHGFDDDDAABCEGHECEB>Lcoqha_``_^_a_ZVPLKKMNOOOOOOIDCCEC?DIMMLJLS]XE>AAACEJOSTVXYZ[[]^^^^_`__^`abbcdb`\\VNIECBBBBAHYc^VJFS[OCCGIIHIPQMQNBAP\\bgihiijifa^[UPONNOLHIJGJT`dfZORYVTSTQR\\bVIECDJQWZ[\\ZRMNOPTSLB?EMPSSUW\\ZSOLIHHJLLJGEDBDB@ADHGFWt~yncWLJKKLLIHOU[[Z[UIAACCD@BXpxu[FEGGFGHEFONHPsvdXVUUVVUUX]`_]\\bjg^WVSRRUTRSIPƸƳĶ÷t`t{|}p^\\giceif^[YWVXYYXYWUSSRSQNMLLJGELVV_ttjhfgghgb]\\]`_\\_gkhb^\\[YXVUSUWWWXXXZZWUTTTSRSUZ]\\[ZXWY[[WUVVTTVX^`WPPPQPPTWWTQRTUWWWWVZ__^^\\XXZ\\[YSSTOX^]QLNSUMHFCAFOTW\\ee_\\^dedc_XV\\]^^\\[WW[R?8:::8<CFDABD=V~kYKJLE?=<==>ACEDCDMag^TJFEGB;9:;;<FPIGNQPGDEEA=;;=BEDCA><====<:9:98756=>AOWSOLIB=E]uMBI@CG8>@FA73555>DDA>825;;8779EXgsrf]eeI6=G@;DH?IiUAFF<BFE@857>JSW[aeaRG?=AA=:<878<?<7456:DKMOQW^_TG<?FD=:9::99=@BBCDD=7:@>5122246879<>???ACHKIDA?;725:=A@<9620235;>=;98745<?>>>BHE:7;<;<>DE<59@@>@DDBBFNSTUUTSPF;999989::88;?DJJGGKMLD98;:=@?B@7C_jedaZQAEae[[XOTR88LIEFELNFAGQSSQI;30-16438:6/-288103425;76@EC?<;::@D=2,:\\lWA:=EB8336558;88BCABB@?@GPUNDB@=;87:977;==>@C@>82681/000/,3HWUMNX_a_`X>4008ENRTNFMTUSRPMKJGEC@@B@=;7413?KOLKIGGGECBBBDFGBCE@=@A<41111247975667<A>7676872//016<=94420/0011.*,/0/.0235445<?>=;993.2;ACCCEB<889:8698558853+1ev~aKJ7*/71?S`\\KE600/.3>A6))++-./0003/CdhaZP@778;@ILPXVPI=BPG3/05?D>53CSK;<BDA<?=0=RPOWVQD=CNWP:FwvXQB:A=9445RlifebYQSQF<9884+(+--.-.//252-.//1/,-/./26799760-,,+-..-,.04;AGSP`dLCD?8-*)&VVWYZ[]]]\\\\^]]^][[YWWWVTSQOOOOOOOOONOOMLMKKKJKKJKKLLLLMNNMMMLLLLKMPOMKLKKKKKLLLKMMNPRRQPPPRUW[[\\\\]]WOKIGHIJKKIJKKKLLMMMNNNNNNNPQRRRRSTTTSQKHHIGFFEEDDDDEFGGHGGIHGHKLNU]bacgjklnppnllni\\OLOOMMKIGGFEEFGIKMORUWWXYYYZZZXUROMLNNMKJJLNNOPRVWWVWWVTTRPMNQONNOOOPQSTUUTUVXXZ]_`aaa`accbbbccbbgqkkm]XVWZ^[W`j^[YXY]dhUO\\ZPRRRTUTTUSV`df`_bYYa[YWUV\\T\\ddie\\]`_][XVVYYYYXWWVUVWWYTZxvmdhlkry{wqsyzqsxynZW]^]\\\\ZYYY[^XQNQZdolkt{yk\\WSSZa][SQNOYhsyweMPYjhjsfB@CEDCCDDCCDEEEEGIHCBCDDCAACFHEBABCCELSTNDBCCBA>:>GMIDAABFJIFD?>?@ABCCCEHJKLLGEBAA@??@ACEGEABGLPPKDBACGJIGDEFFEECBB@@@@ABBD@AWjkppiccdcb`b`\\YTNKLMNOQQOOPLDBA?CNURJECFIHLMDAAAACEJNRSUXYZ[\\]^^^^_`__^`abcdfaWULDFGEB@AA?GX\\WVK@FPJA?@IRRQTPMNG?ET_dhiijjjjf]VROJFEEKKFEHEFRcd^PMSXTSTRNO[]LABBDIPWZWWTLIGHNUXPB=AHLQX][[][XRKGHKLJIHHHFCBBBCGKNPSbzy|uYOQOMKLLIGPU[YXTLFBBDDFEBH\\kgQDGGGGHJGEIJGNkt_^[VVYWWdsvttqg\\eomhb_ZVSRRRSFͳ«ȸű{nnpdbfhfehje^[YWVXZZZYXVTTSRPOMLJGEHSY^mtkijklheb`^`ed`cmtod_[YWVVVUUWWWVXWXZZXWVVVUTSSX]^\\ZYYX[ZWVVUUVVY^ZSPRRRQRUXTRQSTUWXXWVY__^]ZVX[]_\\UOOS`aXOLT[XSPKFDOTXdjgccfiigffe^afgc^ZXVOKG>88899=GLLD@;QuUPPKEB??>>@DIIHJU^SIIJIJKG=9=>>@MQIRfaVLKE?>B@;?EEEGDA@AACB>>>><976888:BLONJIHFBHhY4899AD4;DJJ@6687;=;;87@QZVHA><Sic_]\\aeR77FRH<?A99]ncTSUXMC<324:DGKRX]^YK??IJJIF>77>C>8765;B@?MZ]b`XNHFHLMB;7358:<>ACFE=9AG?3121247868<@A@ACCDGHFDC@<3359?>84201557>EGC;5535=?>=>AD?109<=CFLPF87;97<ABAADMUWVTSRLA:::9877998;EQYXOJMQQQM<06<>@ABA=Hbnkg\\SICRZOIICDTUDGRJJOGINHBEIGGF?82038;;:>=6008=7112007;208<<<;:98AGC7,5LVH;89>B@?CEC@><;=CB==>??BIMLE@?;:;89?=9:ADCCCB<23127420.003DX^P?DT]cgeP3/1107BKRQNSSTTTTRPMJHGECB@@?<9647DMOMKHGGECEFHIKJGGFA>=<831222379730.-2=@:7999:7005889>=:765544420.,)*,/13543246:=>@BE?-!'6?A@BFA;<@AB=:;:6682/,'.XnryLMM<0/62<JLA@G7.1/03:@7,))*./00233>SWOD9;ACB?;=KPR]Z[e`SPD..59;>BA::A@<::@A:860<MKU`G<K@5BOPKKh~cC;30=GF=32Trqqwr[RQA787772*(-/.-,,/1442101131,+-25799:981*)('(*.,('*./-/<SS_^E;:2143-)WWYZ[]^^]\\^_^_``^\\ZWWWVTUUSPNMLLLMNNMMMMMKJKJIJLKLNNMMOPONMLKKKJJJMMLKKKKKJLLKKKKLMPQQONMMORUYYYYVTONMMNUSIIKKLMMLLLLNNNONNNNOPPQQRSSTUTSTSRRQOMMMLKIFECEEEEFEEFHJIGLW[WW_fjlmoprqnmpng[QNOOONLKIHFGGIIJMORUWWXYYYZ\\\\ZYUQMLMMNMMLKJJMPPTZ]WSVYXWVVTRSRPNOONOPQQRTTUVWWY\\^`a^\\\\^^````aaaadoguxXUY^dhbWV[_`_[V_hdSS]\\WQQTTTTRSQU]gfefaT[^]^dffXWZ]]ef\\]cc_[YXWZZZZYXXVVVVWWQYufimloolpw{ykmxwjftyrf[Z^a][YYYZ\\^]WQQQSYYSZmsaUVXVUWYZZUONNYlz|zdLLTmbS`^LDABDDCCDDECDEEDCDLRKFBABBBCGNSKCBAABFQVPICBBCA@AFNRQOHBACMVQKHFJPUOHCCDDB@@CEDCA>=>??@@BDEEBBHMQRQMIEEFGHFBDHHHIJSVSRQME?@CACRYLWvxkhhhfbb`^^VNKKMNNPQOOPNFBADR^]SGBACEDEGECA@AAEINRSUWYY[\\]^^^^___^_`abcee^ROEAKSLB@AA@FRRMMG>@GE@?AGPVYWMJJCBLZbehjijjjidYQQOICB@HKDCDEAH\\g`[\\]YVVTOGLXWJBADFFGMROIDDGDAJVWNGCBBEJX_ZX_cd\\PIHKMLLMMMLHFDCDGJNOHUz~^JOPNLLKHGMPSQLIFDBBDDEEEHLOOIFIIIJLMLKJIHTmiPZXVWX[l~ytjahpmifb^ZUSRTO{ǹƴɷõ¶|noyidfilljhec^ZWVUWXXYYWUSRPPNNLLJHFP[\\htokkmrnia^`aeiddmnid_^^[YXVTUWYWWVXXYYYXWXXYXWVRVY]\\YY[YYXWWUUWVVY[RPRTTSTUWTPQSSTUXYWVXZ]\\\\[XWZ\\^aVPLSVZYRNQY^`^WONLKKYgggknomheeihehgeb_[XVJ??=<:88;CLQQJ7<v~bUQOKEBABAADDDBAFMHHIGHMWQD?EHC>EKT``TKV\\P=:BD@DFEGLKJIKLMHCDFFA967:<:9<EIIIJNKA=K][C:<:9=<6AGHJG@<;:98:;?K^hg\\KAACWpgTRXYI86>FHB<<?A?Jho^[]`N>74458=ABCO\\[M@=BOUVTQJCACD@<;98996;R_]`]NEMRX]]N8155478:=BFB=>CD;2122466667;AA@BCCBCCCDCB@A?;<<852346669>DKH;1026;;87=DD9/1:@@DKOPG<9767;>>@ABJSSPRSPH?;::::75756CWbc\\TRTURPQA.4ADEC@?AFTeiaSG@FM?4537EQRPPOJJKFHMICDEADD:558>?<>>=;60189300/07ED64:<:9;:9:?DE??B@A=658=BEFHHHD@??=;<>@@ABDHGB??;49CFILJ@9<BCAA=5/.0/2551.25=O\\XD47@M`ohF//10027DNPQSTTUUVUTPLIHHGECBCA?<98>JONMJGGFEFIKLKHHFDDB=416971/163.,+*+3<>;;===:636<<999999:998:<:40/-+--031111248=DHLOE0%-7=@ACF>:AGJG@<=7573,),+.=Ij`>BLC8/./796/0B>21.,-382,)&(/100247FLEL@9:?DDA;=QTS]]bmo_M=++8=;=FKGFFFDA>@?61337DMWT8&5GD6;KWUV[M9/+%*9EE71ChqoutWELE876652,+//.-,*/2110/0//11-+.39;;:983+&'(()*--*)+--++1@JWTGEB71/0-+YYZ[[^^^^^^_```a_\\ZZXVUTTUTRPONMLMMMMMMMMLLJKKLNMMPQQQSSRONLLLKKKKLLLLLLKLLMMLLKKKMOPPOMLLLLMMLLJJQY_efispZIGKLMLMMMLMNNONNNNOPPQRTVUUWVVWWWWWXYXYYWUTROMMKJJHEDEFEFIMLNWadfhiklklnrqpoj]QNQQPPRPJGHIIIJLNPSUUWYYZ[\\\\]]WRNMMNOOOOMLKJMNNX_[U]b`YXZ[ZZYUQOPPOPPPRSUWVWWXZ]``^[Z]____``_a`bebko\\U[hspbTU]\\a_WT]dZV[]`ZRSUTUUSRUYX[Xafa`ca^gzwpUYYX]]a\\Yagd][ZZ\\\\\\[[[[ZYXWWYSWtb_afmtqkpy}znowsbZdoswob`bba_^]]^`cYQPQPNNNMRVTTXZZZYYZZXSNN\\p}|z^JLQh_CBGDEDCDCDDCBCCCCCBCCHUUPD?AAAFKPRLCBDC@EUa_QEB@D@?IZ`ZTOJHHEOZXUPNRX_b\\NBAAA@@A@AABCA??@@@BDBABEIMQSUURMLIGIICCHILRYbdeeedYIAA@B@@;Muonmidd`_`WNKKMOOOOPPPPKFKX`\\TID@@CFJJGDB?>?ACHMRSUWX[\\]]^]]]^```_``bccdeWGBDSXMBACCAEOVQF>:@KLFACGHLX[PLKCGT]cfijjjjlkaSPUTSOHAFJDABCBDUgiif`YTTPFAJSTPICCFC>AJIA<AIF@HSPIILJFBEO[\\`jpnbUOLJMOPQQPPOJDACFFHNHIf~mcXGGIIHHHFGHIJHCBCDCBCEEEEEEDEEHLNOQRQPNLHKiu^V[WYWS^ztolkmqlheb]XTRTKgǺĻĿƺ̺Źz¯rduuplchuwogba_ZXVVXYXWWUSRPNNNLKKJHJZ`cpuqprwxngeeeeecfjiggfdb_\\ZXWUWYYYYXVXYYYXYXXYYXVRTVXZZY[YWWWWUWYXWWSNQTTUTVVUNMRSTUZ[YWXYZ[ZZYWWZ]``OKKWQKJNRX[^`]ZSTL@H^hksxuoia`kmef~|sf`a^YNEA??><<>CGKJF6MwtlTMOKHGF>DS`VA@FBAGKIFJ\\dWHFLLD?EQ]ZE<;@AC<7=EEB@AFHGFGLRUPIGJKF<78<?@@BDHIILQQFCCDEDEC@<<:<CGGFFGC@EJMOPVcg_SE@=BKTa_`ho`<4<:;:<=>CFB@R]^[VZK;76577<AA@Q_R>>FOX_ZRNLJJGC@?@BCDAAN\\ZTZZG@RZ\\XLC>GMA79;<<>@@?AB@:3124677645:@A@BCCCCBCDDBAEFA95322365446:AIH9//38:977>D=5108FFBJPH?=>;;<=???@BEIIJNQOG?<:::<;95.5M_^YUUWURQNIB:;FMNLB;?CGUaYJ?>F>3116FPPQSSNLLLNMKIHEBDHE=:@GJC=AA??80/42/12/4BQNB@@>:999;=;?HLMD754.09BGFHJJGCA@@<68@DDCBDE?8768DPVZZYULB?BA?>941.0/1563037APWM>756>Qhb?,02./09FLNQQRTTTTUUSPMMKIGEEECC@<:<EKMLJJHGFGHJIIHKKIJIA64:<95332112579:<<;9899767:;:99668<@><;>@>61120,-45-/22/-4BNONNF86<;=ACCE?>AFJGA@@6396/+.3547`O<XdJ81139:3-(2:95/++//+))+,031022245FPA>@ENRG7CVTU\\]hnpcE?<5<<AJLKLJB@BDGKH?=?<23DJ>1*(9H@<KWTH<7:;<3%$/@EF?YomqrQ5CL:6654210000..-,+.0/...-/332479::743/+()*+,.021132/-,-/9A@>AA81/.-+Z[\\]]]^__^^`a``_^\\[[YWWVSSSQQQPONMKLMMMMMNLKLLNOPRSSSTTTRPNONMMMMLLLLLLLMMMMMNMMMLLMMNOMLLKIHGHJNVblpuvuyx^LJKMMMMMLLMNOONLMNOPPQTWUWXWXYYZZ[]___`_^^^\\[[ZYXTQMKKIHKMPWadeca`_]]_enporsj^TRSSUVWTPLIIIJLNOQSSTVVXZ[[]_\\TOMMOOPPQPPNKHILRVZ^elhYVY[_caZURQQQRQQQRSSTXXVX]_`a`bedb`aa`aaacddcca_bhqmaV[d]]YW]`_TUhgYRUUTUVUST[^XSU^dgkhaT_yzrXXY]bVY[V\\eib^^_`^\\[\\]]]]\\ZYZXU{m_[`]\\fttmoz}zsstlb]]abnwncbecba`acfbYRQRSQOPSTWZ\\\\[\\\\[[YY^_VP^u}{wWIMP^\\F>CFEECDCEECBBCBBCCCCCGLMJB@@@DJKIEBBEE@EUgl_LBDB??Pa`RIDFGFDMVXXTQPNQ`h`NC@ABCDBBAABB@?BCDFFA?BFIKMPQPRRNHGIHEFGGNZ_`abaa`\\RGA??>?AGttqrmhg``bYOKKMOOPQRRQRPOY_[RJCBA@AFQPGB@?=>@CIMQSTWY[\\]]]]]\\^```aabccdeicKBLTLDBBDGEGU]RE?>DSZSJFIHELWYVK@JY^cgjkjjknhZKJMNVWKBGJB=@CCESekgb]WNJFCAIORQKCBDC?@GKE@EMMGGHGEFMSODFR_^`mtpcUOLKNPPQQRUQJB?@BCCFHHJSPBIECCDDEEDDEEFGCABCCBCEEEEFFGHIJLORTUSONLHK_cQUUVWXV\\~{spoooqlhb]\\WRSPTоŽͿȸ½~sìyng|ywylam|xkd`^^[YXYZ\\ZVTSQPNNMLJJIJISbfpzuqutlllkjikospmsulc^ZYXWXYZYYZZYVUUXYYYXXXYVTRSTRVZ[ZYWXYWWYZZVSNMQTTUTTSOKOQSY[]ZWVXYYYXXWWXZ_a]IGK^TCGWb`\\\\]][[XH?G_u{{ukfgZ`tlakxaYWSPNIC@?@@@???@><VulpqcfbLFJIHGHHd}rMYgQ?FNOOU_]NJKKLG@Y\\QE:;:;@F=;DECBCFHEC@BHR]ZQKJHF@;<BDFEDCDFHKMF=AIGEEEDCA@@CHHIHGGHKRajib`aYJA=@@GT[YXex|ZINE97=?AC?<;=FY\\Y\\M;54456=@@@TZC;LTV[`YRPKHHE?;;AGLQTTY^YSX]RMSOD96>Vij[G=<;:9;?@??>922346788759>@@BCCDEDEFFCABF@633234422328?EC5-0579::>CB711/9JLGJLA=@@><;<>@?@AAABFLQMD><;;:=CB81=SUF>AKPHDNL=?FCGNPSOD?CHRXPA:>>5225FSTTTSRROPUVQLIFCACDC@CHKHA?<<CF=422/.4746@KIFJC:8:98:;:>HLB8300-/8DLJILLIC@><;9;?CCBBB>70,0D[a^__[WOKRXRLF@?;2111122226BPO@::9825KM7+/1.-3BIKMPOQSSTUTUUTRQPLHGGFEEC@=<AHLLKJJGFEEEFHKOQNKJGD@:89;730378:;;9899889998777::9889=?<::<?=71361),561356306EOMLLFCFGA>@@BHGDBADEBB@649:4106668UIL|}Q96;=<=5/,).53/.-.,+*-1202330,,'5WG49HT]`T>BRNPRRfrtjKEE??=FOMHLJ<358?KPQL?>>0)..-,(.;ER[UTRE>@CEE<+'5HJ;@]lxoM/8F:9AA97542/..11*'+2542211334455785210.-++,./279::40-,-/12357861.,++Z\\]][Y\\^^_``_`a^\\\\\\[YY[XSRSQOOOOOMLMMMMMMMLKKLOPQSSSSRRSSRQPOONLLKLLLLLLMMMMNNMNNMMLKLNLLLKJIMS\\acglrttttzxfUOMMMMLLLLMOOOMMNOPPQSUVVTTUUVXZ\\^```___`aaba`_^^^\\\\[Z[]acfeca^[USTUX^elpsspme[TTVXXWWQMKLLLNNPRRSTTUWXXY[\\WQMMOOPPQQRRPMKKLMQZ`im`YXY]bb\\XVTSTTSSRRRQRVXVX\\\\]^aefb\\[_da_cfdddccbcdddeb_ad]Y_eie]WQ[fiaZWUUUURT]_[VY^`fkg^POdzpVWhojWXYWW\\ge``deb^\\\\]]_a`_][[XZpnUP\\^WRR_ntomv{|rqlc`_ahaXajfcgebbbccc_XTSSSRRPRX[\\\\\\]^__^ZY^ebW_vxuTFMRXWHAACDEDDDEFCCCBBCCCDCBBBCEB@?ACED@@@ADEABN_iaLCCAJU^`WE<>ACCDKNMRPIFCBO]c\\OGBACHHEBAAA@@BGNOIB@BDEFHIGEKOKFEGGFILLQXXUSQOMKKKHDAAABD@Muusnlb`d[OJKMONOQTUTTTVYVTNJHECBBCSVG@@?>?ADINQTUWY[[]]]]]\\^_`aabdcdgefgODQPFDDEEGIOYVHCFEJW^]VKHLJHO[WC>O\\`dgkkjilpfREGIGKPMIJH@;?CEGMYcbXSSKEDDDHLLLJEBEGFFINNJHKNJECCEDCKPLNV^VO\\lpeQGIKNPPPOQRRI?>??BABFID;_wE>DDDDDCCDDDDEGIECCDCCDEEFGHIIJLKKLOSSOLKKKLMNPRSUSWYX^p}vsolnsojga`WSUK°Ģü|t˾xmotszucfuvkca_]]][YYZZWUTRPONNLJJKIIM^go}{tu{nlkjjnrx~y{xpd[WUUUVXZZZ[ZXUTSSUXYYYYZXVSRTTPQY]\\YWYYWWZZXRRNNQTUTTSPLNQRU[]XUVVXZYYVVXYZ[_b\\GFKgbJYprf^YZ\\\\`SBHN`qsbTQZeVduedx_MJLNQPF@@DDCB@?>AF_bTWYXWOBBGHIHHjvanrRAEMV\\[UNNQLJLIE_TB9?BEHQMABJKLLMPMIHGHM\\fdb[PIFC?@GEDDCBABGIB52?MNGFEEDDCCEGHHIHGKT[gke^[SG=?CA?EOYYPXbm}sdjY<7?BDA=99=L]`[ZQ;24547=??@JG@KYTNX^XQWPHE@<86=EMTTUV]cbef_PC844;CUennX@:::88<=:99622345579887:=?@CDEGGHIIFCDD>85556874665;>><4-0679;=BFB7101<HGGKGACD>988:=?AAAB@@BIMH@>=<<;>DD??HMB4.2?F<6BD78B@@BELRNEBGQRG;876764AQSRRLFENSOOOLIGDBBBBB?BHIB:625BE>863/18<:68><AJA319=8669>@?87985786@HGHIJKHA=<;=@@AA@@=72-,=[ga`b]VTLGQ[XQJCA@7221001238GPF;8689/(15/,/0/-4AGIMNOPQRSTTUVUUTSOLJHHFEEC@?AGKLLJJGDB@???DHGLKKLKC86894003554336876:@B@95137:87::8997558;:73276/+-./0026;?GJJLKHIKKE@=:>LJIHCC>7754554/.03355CL{~hQCBA>;40.*),,.000/..0242010,)**R]5+9CS^`_J<DFHFAR_ccSF;9<?FIIILH;55534HVI0.?;'&,-)*3:=Oa]_gd[UVRF<50BMD31H_paPB=GD?@C>;732/.0450,.599886530////25322110,++++1;@?<40.////1366430-***WWWVUX\\___aa`bdd^[\\[ZZZYVSRQOMMNNMLLLMMMMLKJKLOPPRSSSRSUUTSQPPNLKKKLLLLMMLLMNNNOONOMKMNNNMNPT[\\ZYcimjflrtvyzwlZNKMMMMLLMNOONNNOPQQQRTSQQQRSTUWZ]][[^`cccc_[YXZ^`abbcddc]XVTRPPRTUX`eiorrrrpk_VVWWVVUSQOONNPPPQQQRSTVVWZZYTQOOQQQPRSTUVSNJJLQU\\geb`_^^]\\ZWTSTTUWXVUWWY\\ZY[\\YYY\\]\\Vcpdafedeedcccdcccdb^[cnkba^WTLXkdYWUUUUSV\\\\YYY][`kf\\RKY{oR]yzra]YWWXdiggjg`^^^]_bdffca^`c^[]ZXWTOQYcpsmnz|pkhba]\\ov`U]efiiddeda^\\YXWWVUTQRWZ\\\\^aedb_]]_bd`cxzUGIQXTFBBACDDDCCCCBBBBCCCDCBBAAABA>>@A@@@@ADCBBFS^XHA@E]okbYD<@ABDEGFEIGBA@>CLT[ZNB@EKKFCAAAAACKSQICABBBCCBBCHKHDEGFFINOMOOKEBCCB@BDCDDEEEI@y||ytpfad^OIKNPPPRVWUTUUSRRQNJEDDBAQXF>????ADIMRTUXY[[]__^\\\\]^_aabccdfe]RHGMIFEEEEFLSUJ>DIFLW[_\\PMQNLRVI<CT`cfhjkjilpcI@HKHGJLLKI@;BFFHHLZ_RJLJIIHGGGGIIECEGJHFHPPGFHFDBCDCACJMKKNKCJ^lfSDCGLOMLJJJNH>>??AAACFFAHYUKIFDDEEDDDFFFFFGFDDEEFGFDEFGGHIKKKKLNMKIJLKKKLORTXWSTSKJ\\mrrokgn{ysxudTTJzĹƩť~ym{{ntxxi_hmf```_]\\^^ZWVTRSTSQOLLJHJKHIVdm{zztnlkklpy{{~{ia^[XUVVWXZZ\\[XSRTTTSVWYYY[YXUTTTROW^\\YYZYVWZXRNPPPTTUUTURPRRTVUSQTXXZZXWVWY[\\]_cYFDNnjUnwjd]UT[cI;CUf`VC99M_VepgtcLKOPTQHCGHEDHIIIKTmbWVSNMGDFJKKMPx~|yjbYHBCEP[[PQZVIFLWdjV;8DHIGECACKOMIEDHKOQTXeihml`UMFCDFDCCBAADHF<4;GOPLJJHGEDEDBDFGHGKNUdgcb[G9:BDFIFCILJLU]otwqN7:@EHFHJGVZTSMIH;24446;AB@?:E[`QNX]WPZZNG>:99;AKOLNU`lojaUB77=??<<CWeXC;::97767777543333567878;=?DFHIIIJIIHEA=;957;=<>>;9>>865228<<=?CFA70/29><AIFBFE<6668;?DDCEDA@CFB?@=:::;=?@CF@6224;@;536558:87:>BDDA@HK@7503=AAHNJFB=;<ISMECDGHGHFDFD;;?DF=35<AA:630/5<>:7896:B</.8?;88:=:8:=??=@A::=@EIJLNHC?<>@???AB;51+3Pjhbdd\\VRLA=BGD<9;<8531000118HOD9458830//01101128@HNNPQRRSUTTUUUTTRPNLJIGECCCCFKMMLJFD@=97358?ILIDA;67653004544468866;?@;3--38977:;8664335788746982.,-,*+/8BKPNLKIHJMHA949KKJOLE8+(,01/,()/12376U~ofOC><;41-)*,,.12310/01570,+(+(3R9\"6:.;OZ`M8<EGD;79;>@A==<?GEGJH?<CGA4/8>6*'/9>83468<<44Lcfkl[I[pP118BJSCEMLSORSNQC0/655322245335547::99875000/../012230.,+('/>C>:400111259986541++-NNNMPW]__^_deegga\\ZZYWWYYUQPONMLLKKKKMMMLLIILLMOQPPQSSTVUUTRQPOLLLLMLKLLMLLMMNNOOOQONPQQQQPRTTQORY[]cilrwwwuvxn[PLMMLKLLLMMNNMMOOOOPQQOOOPQPQTVWUUZ`a`_^^[VSSTUUWWWWWVRMLLLKKNRTUU\\fhkqssrrsoeZTTWWUTTTRRPPOPPPPPQSTTUWYXWUUUWUSRSSTVWWTQONOPRW[]`de`\\ZYVTSTTUSZ\\TY_a_]Z[\\\\]YWTVT]wijhdcddcefgica``]fto]UWWOOORVYZXVVVVTUZ\\ZXZ]Z\\hjYRT]tqQ_zxth_YXYV_hkmmf]\\]`acfijjgc_gha`d`URUSRUYgrolz{ieccc_Yi~wd\\`gjjhfeb_[ZZ[[ZZYYUSY_aadhlfcdddcdgeg{~d[LKSPDCEDCDCCCCCBBBBCCCCDCBBBBBC@<>BFFC@DKKECCFMSLA>?ATnsjdTB?ACFFEECCD@>@?@DKSXQGCEGGFBABAAAELNIECCDDDCBCBCFHFDEEFFGIECJMLKKLHDCBACFFFHJOFTČ}{zwqfebTIKOPPPRUVUVVTTRPLGCCDDCCLNB>???>ADIMRTUXY[[]__^\\]]^_`aaaccd]MBCGECCDDFIKKQRG?HLDHOPVYTTUPNUR?<LZbefhjjiiln[DAHKLNMMMPOB;CKHFHHQXMHKKLLIGDAFJGDCDEFD?BMNGEEDDBCCCDGIGECDFEIRYZVKCDJLKJIGEFD@@@??@BBCDFEDEIJFDDCDDDDFFGFFFFEDFGIIFDEFGGHIKKKKIIJJJJLLMNOQTX\\VNNMKJRblolidv|}_UPi½Űƾåǰ~osgkoc_`^]_^]^][\\\\ZWTRQSSRPOLKJHIIFN`kv}zqmlorrs}|~|reb_][YYYYYYZ\\[VRTVVVUVVWXXYYZXVSSSRV\\YW[]XTWVQMOOPRTTUUTUSRSSUTQRVXYYZXVVVX[^\\]`cXEBPodRp~xoff\\XfoJ7@YgSH>26DXZkjieSPVTQHCHNJECJNRRSUbZSXQKGFHHJLNOQ^x|_OLIFB>GTXSW_SABLd{zP6<@CCDFQNEEB>><AILQVZ`dccknfZRJFFEDDCCBCHKGADLOPQQPPNJFFJIDDFGHHFHTdkppZ:4=ABEE@:>HEPesrsw[66@AEIKPX^gV=>=9==65786;FMJA<CWa]\\^`XDUZUK=9>=<CLLJLUfrkYKA58>>954-0DMJC>:986425888985465433678;<?FIJKKJJJJKF?<><57=>?CC=;@A72788?B@@ABC@9102456<FFBFE<55448@EGFGHC?>?>AC>:9779=@@?96;<989:5013336676789<==AA:5326>DB>@@:=EIJLPMDAFLKKNOI@=:65;GD;>CDB>94017>?:8;<76;;67=A@?<<:67:=@A@?@>;=AEHINQMJE@BB@>?ADB:2,8Xiebca[WTK=13:713:95641/....1=KH:9DE<885566335632<IQSRPNNPSTSUUUUUTRQOMKHGEDDDFIMNMKGD?;740/8ELH?74455452/2;;89:952488642,-378786887655554469<83567:<963223<FJIKKJKLLJ@1-6GJLTOC4)')*+-,+*.1/2>8Ck]YLA=<:3/,*-13687632//.45-+-)),<8 7Y= )7FQLCAKUPH@4+0>DEF<>FCCB<7>FIC?>60-+)$7VVA9<=;80)8SYesdWf~j>/74=^^bOCLMOQSR<'+01035569810699889965886441.-++,,.02222/,1?C<43322357;?=41585.-1IIIKNRZ`_]_ca^^_`^[WTSSSVVQNNNLKKKLLLNMLMLJIKLLMOPNNQSSTUUTSQPNLKJKKJJJJJKLMMMOPPQRRSUTSTTQPNLKGIT\\ailnsuvwwvwxl^PKMLKKKLLLMLLLMLMNNONNMNNMOPPQQPRVXUTUVUTSQQONMMMLLMLIIJJKKLLMPPNQ[bciqssrsupaWYWWWVVVUSQQQQQPONPQRRQTWXXWZ]]YUTTSUUVWYZZWPNOQRTZ_b_[YXWUSSTVVXZTV^`^[XZZZ]_\\VRSYgmht|sohaaafln`[YZeqn`WXOIHIJJQ]\\ZXXWVTRTXYY[][Z\\`VQallcQ^z{wf[WZ\\WZ`abggb^]_fijmnja^_a^[[[ZXWVRQV[aknpywe^`bcb[avxi_djjjfc_ZY[\\\\\\\\\\\\]\\UWellknoebmkhlmngh~rVOQNFDFEDDCCDDCBCBBBCCCBBBBABBA?GRVTPF?DLKCAACEFB??>?E\\ke\\SD@BDGHGECBBA>>>AEJORPLGA@CB@@ABBCDEC@BCCCEFCDDBBEGEEECDDEC@AIMPTYWK@DGEDFFGIHED;泇}recYMKOOOPRTUUVWVUTPK@<@CDEGFEB>>>=?ADIMPRTXZ[\\^__^]]^____`bbdbQ?;BIIHFDEGLIIPPHFKLDEIIMRTWYTRWP>@Q^cehijjjjlgVHEHLNPQRSVSB;FOJGHHJNKKLKKKHE?=DKGBBBBBA@CGHFEDEEDDCCBEIGGEDFJOOMMQOJHHJJKKJGBCFEA?@ABDDDEEEEFGECDCCBCEFFGGGGGEEFGHIGFFFGGHJLKKJIIJJJKLLMNOQTY\\RKLLLQ[hnlljhuzxvqgYQUïǶƾ¯ǭlh{uh}fb_[Y]_\\[\\][ZXXWTRRRPONNLIGHGEFVfn||plrrrtzymid^[\\[[\\\\[[ZZXUSUWZZYXXWWWXXZYVSSSSUWWV\\aWTWRNNOOPSSTUUUSQPQSWVUWXZZYYXUVVZ]`\\^bb\\GBKcULqgWhpqtoO;I[]QPH8=?MZiZU||xdRXYNEACGJGEDGNPPMJOZZYOGIHGGFJMONLas|ZPRRPHBIRUTT[K=@Gd{A6HJB>=Pa[H:;@?AORNS\\`abeede_TNJFEDCCBDFIILNOPRRRTVVWVRLE@?BFGGIHIQYcpvgI26AA>87FF=OXZcsxtcB8CDAEILOYb`G2588>C@>??=BJNMKC@Pafd_^YBOPUUE;?==CJJJMWjjYQE65<:7<FH:3=?ADA;64444678::868;842247;<;@IMLJJJKKJID?=>;68<=<=AA<>C>657?HGCEFDB@@=4/48:>DEBDD=64536?EGFGHD>;;:>A>:9:;:=BA<57CG=447522212478788659>@=84238<=738?CMXYUONNEBQSOMJQJ54@>44BKFBDGHGD?:69??<;<=99?BBEIHGE=;:557;@C>:=?@FLJFHOROKJLMKHEEDDE?2/=Xca_^ZTSPE813751/54258531100/6FF=HRMB:66775557930;JSVUPKHDHRTTUUUUUTSQOLKJGGFDDGKMNKFA?>;96:GOL@5/156668628?=::950/386311/289876665676665557:=;4037;<;:98649=8?KMPOMKI>-*2<AKK>72,)()*+.....,/?A6]hHGC?=;81-**/579>A?:621/1/-/1-*9JHI_uG#&+0:KUJKZYROB8=LD@I=<A;6569@@>?BC?>6*(/GbhYB7765449CHVlptz}~_8/36Tge@9XXOLPQ=,27749;::;60058:;:87647;=<;61/.-,+,,39<:854=D<.0743478<@=0(/66335GGHJLQZ___\\ZYUQQX[ZUTSPMNRQPOMKJJKLMLMLLNLJIJJKLNONNPRSRTVURQOMKJJJJJIIIIJKMONOQRSTTVWVVVVVROPMIKS[`ekpqoqwxvvwul\\ONKKKKKKKLKKKLLLNNMLLLLMMNNNONOQQNOSURPOOOONMLKJIJJJIJKKKKKKIIJJJQXW\\jrrqrtlcgk[VXWXXWVUTTRQPQPPOPQQTVXXWZ^_YWVVUVVWXY[\\ZUQSRRRUXXZYXXXVTTUW]ZVYWX]^WUXXVU\\d_XZ]XPRlzliijhcXYeflh\\ZXXOIJKLKR[[ZYYWVTRRUWY[][ZUTTR\\ejYR[}c^]`^XUWWVZaeca`fnopqh[[^^\\[[[YWWVSQV]dhilqnbZ^bdd_^l{|nehhhfda[Z[\\]]^]\\\\]Z[emprqpgaosmuwj`irbUTSOKHFDDCCCCCCDBABCCCCDCCCCCA@CUddYOHCB??=<>AABFLNJGFIOTNEABDEIKGECCCA?>>@DJQPMLIB?>=?AAABBC@>>ABACDDDEEDBDFEDDBCBCBADJJMQONNIJMLKIHHHFBF9^ۥ}id`RLMNNQRTTUVWWVUTNB=?ABCEGHE>;<<>@DHLORUYZ[\\^___]^^__^^_abd`Q?>EJMNKGEFGCEOQIFKNHHMLLOTUXRVYL>DU`dfhiijjjjaRJKLNNPQSTUOD@PVLHGGHGIJJHHIFC>>DGFBBAABAABCDFFFGHHFCBADHHHHEDHNTRLOROJEEHLMNJEFJHAACDDFFFGGGGFFECDCBBCEEFGGGHFCEGIJJJIIHHHHJLKKKJJKKKMNNNMPRTUYYTOLLPXejigjqzvke`VVIðȲ}xpgnxsa`a]\\^][[\\\\[YXWUTRQQNMLLKHFFECL^ep{qsuuw~zofb\\XWYXZ[[\\[YWVTSTVXYZYXXXXXWWVTRRRRRTWX]`XTTPNOPOQTTUVUSRPNOSWWVYZZYXWVUVW\\`a]^bb[HAEQFHvtMFayzePMEMQITZTFK@>LRB8Xy~nu~`Y\\J?<?CFEFEEFLSVSN[yn]NGNIEDDGJKKNOT^dZ]`aaTOOPOMKKB@CD_w@Jbd]RKY]WE8:D><IQLP^bYXghUTYRNIEDCCEEFHLKINPPRRSUWXYXVSJ@><CGGHKTXUhuiK63:C@;DZgO;\\zmW^tuT>R[H>DJKQY]Q=69:<>B?>>=<BDHMPICL\\e\\MNQP]KN^YD<<>AFFFJYfZMZD26?CL]ms`B69CIE;5334688789779;843347;<;?EJGGEFFGHEA?98988<=86?C87EG816CIIEFHHDBEF8/4<@AACCDC>97756<ACEFEC@@>87;<9:CC:9@>507CLF9565321016999:7007==<9424:<758AMVZXSNMNMDAIKLIBIB17II98GUTOMOPKEB>;@C??@?>>AGFADJMOMB<<9778>E@9:=BINLGIPSPJMWZVTSQJDA>54CW^[[YRNNG<30043102224:;89993.6@=:BKKB83675345793.5BKRVPFC99BMUTTTTTTSRQOOMJIGEEFIKMJD@?>==?HPQD4.059988<?=@?96852024458:86466776568::99988778996645//356643652;HPUQMJG>.+-06A<2152/--**,+,+--,<C<<hYEB>=<:400,(+0103=DE>94223661,,EEWdtxB+/./8KYMIXWLF@@JVD7DED=1/8;<C=7<<<HMA7=JRU\\`L659:?ABCDFZnpw}|O264D[W><VZNHLM;/8<;<>@@=;4/158<>;666457<>=:854333339?A><959A;)+9844789:;3()/58;:IIIIIR]^^a\\SOMJHKQTUUSMKKORROLJHHJKKJKLMMLIIIHJLMNNOQSSRSUWUQNLLJJKKKJIHIKKMOQPQSSUUUVWXXY[YSNMLLOR_lojhfjuxvvvusjZNKKKKKJJKJJKLLLMMLLLLLMMNNOPPQQOQSTRPPNMMMMLMMKJJIIIIIIIIIJIHHHIMRQU^gilstnhoqn`ZYYZZXXWVRQQTTSSRQQSVXXXZ^b_ZWXVVWWXZ\\]]ZWURQRSUUWYYXWWUUVUXXV_[V^^TRURNMUejaZ[VXdiz}{|lXQ^u~kh]\\[UQLIKMOQSW[[ZYWVTRQSUY\\]\\[WRRRSTZURYmzpbab_YTSTUV\\cec_bjqtrha`bd`][\\YVSTTSTX_feehg`^]addb`cp}wihjmjcZZ]adc_\\\\\\\\afjnststrbjxy{lTQkvKFPONLMMIECBCDCCCE?ACCDDDDEDDDDBAK\\caWIDDDBBGJHE@@GPURLGEEORLEBEEGGFDDDBA?>=?HOPLJJJE><=AB@@@AC?<>ABACCBDECCBDEEDBB@ABAAFLNQPMMNPRQOMJIIGGIKC=̪gecVNMMNQSTTUWXWWVUQGBA@@BDHKH>9;<=@DHLOQTYY[[]__]]^^^^^^_`bd_VQNIKONOJFEC>BORJFKPMMQQOORSOO\\ZF=L]beghiijjji]OLOOONOQTUTMFM[VNJGFFEHIHFEFDB>?CFECBCBBAABBDEGGHJJGCAAEHILLGCGNVUMQVRHCAGNQNHHHIGAAFFFGGGHHHHFEEDDBBBCEEGHHHHDBCGLNNNMNNLIJKMLKLKLLKLNPPONPTTRVaaSKMOVafc\\`jzoa_YXLk»¼Ĺǳ{tpjh|yf^`dc`^[Y[\\\\\\ZXWUTRPNLKKJIIFDBGWajzvuuyxjc`[VUUTTVWZZZXUTSSTVWY[ZYZZYYVUUSRRRRQRVZ^_ZTSPNPPOQUUUVURRPNMTWWWZ][YWVUVVX]cb]^bcZGAAE@?]iQ>?SdZH;CEEA:FUYRVA5:;82Ccylpuc]K8<@A@CCDEGKUblcViz`MB?GHFBBGLJEFILHHZicca]\\TMQL>;?CJITnlQ`v{o`[RG<;<=65ANJIYXLJ[`I@NPNIECDDFHHJOMHHLQRSTVYZ[ZZYPI=9AGHHPZSPovU86;BE=Jj|eIUwy``sv^S`eRAAHKV^TB9;><:89==<=;65=GHECFO\\O=>K]iH?OVSA:<?CC@HZbWZ\\?>AG]mqtxqQ75@KF<52347:97887898633348;<:>CDDEA<?CGEA=31688:=96<=35EE:2;FIJGFIJFCBA803<BBABDDB>:988669=CEDCDFE?:;??BHC86<;44:@GJC:66410247:;:71-3::899625;=76CRX[VLGNSPHCA:8?B=<:5BQG8AU_^XVUPG><<>DGGFHGFJMK@44=FIIE??=<;:=CE?;?DIKKJMRSPJJT[]]][UMFA99DSXXXUOLJ@5/.-.0//00149:;;::1.58642>G?77884245894--2:LWRB;743>OUTTTTTTRRRPOMKIGFEFIKJC>??AGKNRM=//59989;>AEE=4453126526=A?964378657;>=<;;;:976679853336542212326CLUSMHE?5457<>;8::4471(')))*.25=>;<?A=99<<9424/('*,*)1>JKB713976204C37Biq70;7=BALIHUXG<?GT_VA:??619C@<C=5;;:DGEHSZSLLI@8:AFMKHGFAMesw|kC9<>GGKJGRSKHC637:4;AB@>940159?@<667545<A?=;98988;@BDC@?;58>5%)89557965871+.4<><IIIHJRYY\\_WLIJHFGJPSUSNJKMRRPMJHFHJJJJLMLKIJIHJLLNOPRUSSTUXZVMJKJIKKKJIIIKLMOQQQQRTTUWWWYZ\\\\XQNKJHM`hfgc]dsxwvttsk\\OKKKKJJJJJJKLLLLMMKKMMMMMOQQQQRTVUPKKNMLKKKKLLKIJJIIHHGHIIIHHGGHKMNNQVZ_fg`^ehkeZYZZZZZYXURSTTUVUSSTUWWWY^a`\\ZXWWWXYZ[]]\\\\YYWVUUVWYZXXXWWWUVXW^_^a]TU\\]\\^abdaZVSawmg{kmopq`Peyvfca`aXTQLLMPUSTY[[ZYWTRQSWZ]\\\\\\[UQRRNNSSWTg{xe``_YURRUW[adedacgiif`^_ad`]\\[XRQSSRSV]``cecbaabccdceku|xifkpkf][_dhg`[]__dhlqy}tot`]svlUFNlvIMRIDEIJHEBBBBCCCHEABBCCDEDDCCCAAO\\ZUNJBAEKWej]H>>AFGIIGDDIQRKEDECBCDDBAA?@>BMRLGFFGE@=?A@??ACB?<>AAABCBBA?@@BDDDB?=>ADHLNQRQPOPQTOTQGJIEAKJEBa¯sfdXOMNNPRSTTUWWWWWTLGDAABDHLH?9;<=?DHKOQTXYZ[]^^]]\\^^^^^__bc]X`_MJPQNJGD@;BPSIDJRRRVXVTUQIL[XB>P`deghhiiiifZOMQPPPRSUTOKHV[SLHFFEEFHECDEEB@@BDCBBDDBA@@@ACEFGIJF@?@DFIMKGDGJPPIFUWJA>ELMHDHHDB@BFFFFGHIIIIGFEDDCBBBDEFHIIHDCCJQRPOPRSPMLLLKLLLLLLMOPPONQTURWa_SLMOS]c^XX`fa_]_SW¼ÿ~Ƴ~xrpdiyof_]bfeb]ZYY\\\\\\YWUTRPPMJIIIIIGDDN[fxxurvxlda_]ZYXTTVXYYZWUTRRTUWYZZZZZYYUUSRRRRROQW\\_^ZTPNOPQPSUVVWTSQOLNTWUV[][YVTUUVZ^da^_acVFA@?=<<?:==CE=;AA=:758HQVQA7659@JWfhjf[M:6?EB@?ACEHTiwvbRgzXI==HNJDCGPJEEHGFHYqzg[acUPTN<9=CJKITd`\\l}u`\\P?;@IFABMQIDNNLLPVL@IQOIDBAEHIIIOMFFJQRSTUXZ\\[[ZQG=8>CDGRZOJ`nM46AFFGh}qbi~~sltxpfYUdN=DHRTG=:>?<989<;:;:348<;;<?HRJ>BNfbD55LTL;9?BA=DY`\\g]QXYWdplegiT>7<B@;53248::7677887655458;;;=@@AD@;>FHFD?734678<><967<CC<HMJJIHGHIFEC<636=BBCA>?@;8888867;@CCDCDIKGBDGIF>88;;;>@@DIE;88412575589755:;888:846:;87IYSLHBI\\]OHJKA:<@=67@OSG?I\\ge_]YSKA<;=BHNQRPQTRG9//46:=:9>BBAACFHEBCEHKMNQVTRMECISWZ[YXSJ@=?K\\[USMKG>5//./22201248:;;951474455:>;:::73134793-+)2GUJ=663329GPSSSSTSSSRQOLJGFDDGKJC=?FKNNOMC73576669><:@?72220/251.2<BA;74368447==<<=?=;975568964458642212233<CSTLDDBABBEC:48>:1193''&(*.05<<;9964879;<;8:91)'*+*+1:AJKB30779;>D<24-FnG4<>G>44?BOTE9?KX]\\R;224<CFB>@=9====9AOVXTL?23?DEJTSIBA@CNfpbvS9868>KKDMKC=4247:13AD=9:9788<>>;456433:@?>;8789;@EDCCA@=68<4'(155788558::526;<;HHHHILOPRURKHIIIJKOQRQNKKNPPPPMIHIIIJIKMLKJJJIJKLLNORTRTUTSVWPIJJIJJJJJJJJLMOPPPRSTTUWWWXY\\\\[XSPMNQ\\abaZYiuvwvsrpfZNKJKKJJJJJJKKLLLLMLLMMMNOOPQQQSRQPOLJKLLJIIIJJJHHIIHHGGHHIHGGGFGFFFGLQTUZ]RPYYWXXYZ[[[[ZYXUOMOSXXUUSRTTUX\\_^^\\[YYXYYZ[\\]^aaca^[XXYZZYYYZYXXXZ[V_ie[T`lqtxvpmj_TQ]syots\\RYagfal}|o\\]llijd`\\WOOPTSTVX[\\[ZWTSUY\\^^\\aeYQPQONRSSKQ`kjd^]\\XUSTW\\`dhebba`^\\WTVY_cb^]YSPQQRSTWY\\cgedddcdfhkf`kvkbgmmhd^_cfigc]^`cgjnrzvdgZO^^QFBOmsQPQGA@@ABBCCBBBDENMDBBCCCDDCCCB@@JTOGCB??GR_lqbG<ACEDGIFCACFLLIFCBABBCCBCDHGFJJHFECAAA??@@>?BDB?=@BA@@BC@>==>?BEHGCDJMQSQLMRSRPNLIF[bMIHD=EJKQJgd\\RNNOOQRSTUWWWWXXSMJGEEDGJG@;<<=@DGKNPRVY[[\\^^]]\\^^^^__`baYXadTJRYMCEB?<FRRIDLTXW]aba]RJIQM@DXbdfgghijjiaTRRPLOUVUXUOJIPQICFEDCDCEDCCDEDABCECABEEBA@?>@ACDEFFE@>@CDDDFHQKFEEA=N^WC@CGFDAFFB@BDFFEEFGIHIJHGFEEDBAACDFIKMKGEFMSRNLNQRQPONLKLLLLLNNNPPONPSTUY[WPLMPTUZXWWZ]^_a\\P˵Žrroct{idba`bca_\\ZYYZ[ZWUTRPNNMJGGHHGGDHSbuzswwmgedca^[ZZZ[\\[ZZYWUTTTUUWXXXXXXXVUSRSRQQOUZ[]]WQOOPQQQSVVVWSPONLPUVUWZ[[XUSTVWZ^ba^_bcSEBA==;767;>>>>@BA<:899<CHC<;@>:IXWUY[RG97<@@?BABCEI[qvnZI]zaLGWa_SLIJKJPTI=@KWqjb`RR]^L@>?DJP[jeXT`ed_\\UG@ISWVW[XM@DMVSJEDIQSQJC@?BGHHJOKFHNSRRSTVXZ[ZVPH=7;>?EQUMAH`K49HHJVozv{ty||y\\LedI?AA?>@A??=9=A<99=;96766568>DJMNUl]B?BKN[ZOC?><>EHV`efda`^__ad_OC>=;986446:<;9556779;<;87;<<<=?@@CBAAFFEEGEA:678;AB@?EQL<?TYRNHJLJHFFI@77:?BCD>58=:67:99:::<>??=>EMNFCFG@87::59GH>@HE=9512446512;BB><;8889988::88GNC=:AV_WOOQOJGFC>67JWSPLFPckf`[UNF>:;>BKY\\VRPHB?<=97<;42;GGBGMKHHGFEGIPW[[VSMA8;CHORTXZSHA@GWXRQMID@<63576:62235::98754665469659<9651023562--+0@H<23323./7DPRSSSSRRRPOLJGEDDDIJC>@IJHJJA647::988<>:65200/000340+/:@>964367036;<<<?A@=;97578865577875434456:AQYOCBDFGFC7,,6:811:6.,*+272289763424:<>>@EG=0'(+.-1337?CB:34<@EML<:@51RW<9CA1*&,2<?:7ALQRUVG63<EC@A=:;>@<<=8ARSUXE8<>HLKKVUE627>CHPBZ\\>3,2;BDIC4133448?ECBIE;;AC@==?<71141017=>=:65679;>@BA@@=7794+'+17==636<?>:668;;HHHGGGHIJMNKHHIIJLNPOONLLNNNQSPKIJIHIJKLLKJJJJJKLKKNPQOPSQJLRRNLJIJJJJJIJJJMOOPPQRSTUVXXXX[]][VRPOMU]\\X]istuvvtqmaSMKJKKJJJJKJJKKLMMMMKLLLNOOPPQQPNMMMNMKJJIIIHIIHHGGGGHGGGIIHHHHGGDBBEISXTV\\]XVRORWZZ\\\\]]\\\\\\]YPJHJLMMMNPQRVZ]^_`^\\[ZZYZZ[]^`ceffda^ZYZY[[[[ZZZZZU[ecWRcljpuwz|r]RRYqu_RQ]hophnukhV]xzqmgdcb[QNPSSSV\\^^^ZWVXZ\\]^^fkXOPPOOPQQPPPUafb`a]WUUUW[``\\\\^`a\\UQRRUY_c`^YSQQQRUWXX]eifffhfdgnqh`k~rbcihd``bgih]X]`agmpuxwz]]ZPOMDDEQojGIMHC?>@CDEECABEGQOFDEDCCCCBBA@??DHE?<;;=HPPXcZD?GNRUVRIFIIFFIIEDCBAABCDDEIIFFGGGEB>>A?>??>?@@??ADC?>@AB@==@CEIOQSSTVWWTLABPWVNEAEHct\\DCD>DSWRIQpc^TOONOPQSTUWXXXYYVROLKHEGHFB===>ADGKMNRVX[\\]^]]]\\^^__``ab^UYhsiYSI@@A@<<JUQIGMV\\_bekldRLHH@<I\\efggghjjji\\QUXPIOY[Y[VMHEDEBACDB<<?ABABCEGEEFGFCBEFCA?>=?ABCCDDCB@DHIEB@JXRFFIIGKY[JBCDDCBDEBBCDFGFEFGHHJLJIGFFFC@@BCEKQSOKIKNPMHHJMOOPOLIJLLLLMPPOPPPNPRSVYVPMMNRTQSTUVZ^^_fOo®Ĭ¾~~niqh_la`accb`\\ZYZYYXXVUTURPNMKIGFFFGFFO]o~{u}tjfffc^YWX[[[[[[[[YWVUTTTVVVVVWWWVUSRTRQPOX]\\\\[UOLORRQRUWVVWTNLMMSVUUXZZ[XTRSVY[_a`^`b`OFCCDB?>;9<>?AEEAAE?;;<;;;97<II>FWYVTOD=9=A?>BHGCDGLU`\\TLCVv^RUgnkaVPJBKZ[F8:DTne[PRW_ZI?;;H^lpqiM?>T`]YUQUY]^\\YZP;7NXG728HUVSKB?=>DFGJPJEJRSRRRRTVY[YSOI>67:=BJPI:@YL3<KHIPSm{pxrW_`I:9::<@DB@BFIB;;@CA<977666549EOMTf[Q]aMHctiJ;;;832F]ggaZ[YSRWYOFCA?=:97657?@?>>=;9:?CEEB>?>=><<>>ADFC??CHNQH94:>>ADEFHJC8=HHDBEKMKGHIIC99=@CCA<559856<=;987789:;<?GKF??>;88<<13GI85DKC7//3556733>HD>=;887899;=>=:BE<:8DWQKRK@BHLIA<9<MVPOK?>R^WNIECB@>><;GZ]UPLB@GHGFEEA;9?HD@KSMGFCDGGGM[d^WQIC@?@BCEIOUVLCCEJNNMLGCA@>;:::;954458887:=:96543343793.-./12340-.04982000011126@KSSSSSRSQOLJGEDDCFHB<<==@GC<999?FB>@A?94/--.157788634:=<954367/46:;;<?BB@=;84578766:8:;643489<AFIRSG@@ADF=0-165327?91311483022220,.4<BGHKPM<+&(-/14301542:@>?BGPLA><892??@@0)+('*-215>EFFPYRECEA96855:>?:9;:BNNSWB=QQMJJKUO=1/2<D:;DPshD9*+@E>;616=?>>==MWOOQE99AIIB=83-*,--.4:==94234531:FEA?;9862.))2=FD817??;612599JJIIHHIIGKMJHHHHIKMNNONKKLLMPQOKIJJHJMMLKKKJJJKKJKKLMLKNSQLIJLNLKIJJJJJJJJJLOOOPPQSUUVWXXXY[\\[XVTPLMOWenonquvxxsk`SLKLMMLLLLKKJJJKLKIJLKJMNNOPQPQQONOONMKIIIIIHHHGGGGGGGGGGHIHHHHHGFFFEHLPSWZ_`ZVVUUUX\\]_^\\^^_^\\WMFCDDFHJMOQVX[^^^^][ZY[[[]^_]]__ab_\\YWX\\\\[[\\ZZZXYY_c[Zcd``htvoeYROZtwdYZfqrsxojigokdevwnhc`ac_QKQSRW^__][YYZ[\\\\]^ccUMPPOOQTSQQRQS\\^^de[UWVUXZZXXZ^b^VQSSSVY[]]ZUQQQQUZ[Z_ffegghhgknle_i}~j^`]abcehecTQ_cdlrs{}~_WXPLLHEFUn`BEGEC?=CHGFDBBAEIONKKIEBDDCCA@???ACA><<>?DJNW_VHEJLORUQJKRQIDIMFBCB@@@ACCBDFFFGGHHFCBA>>=>>>>>ACFGDABEEDB@CJMOQRSQPMKJKLF><ETWJA?CRk|fBBGFFONAF8Ѫ~j^RPONNOQSSUWXXYYXWURPNLJEDFB===>@CIKLORWXY\\]]]]\\]^^_`aaaa]PXnyziM>?@A@??KUQMMNUahdbjpfQLG@;AQ^effhiijjjfZTVUNINTW\\\\NCCB?>>>BB@<>AA@DHIJNOKIMNHDDDCCCBAABDECCCC?BLQNHBBHQNPXZXXQLMGBCDDDDCCCCDEFHGEFGGIIJHIHHHGFC??DJPUVRONNNLJGFHJKKLLJHIMPPQRSRPPPPPPONNOONNNLPURORTVY]Z`]W´ɱľuxqfgm^^}qf`_`cdea][Z[[YWVUUTUSRPNLIHFFEEDHWj{wpxynfdda\\WTUXXWXYYZ[[[YYWTTTTUTUVWWXVURTSPPNR^^[[XROPSQQSSUVVVWQMLNQUUVWZ[ZYVSQTX[\\__]\\`aZNIBAIGB@>;;:<?DGB?DF@>=<<;:<CPOCBKMPMGA@ACBCDGLLFFJLMK@:AAVk[\\^dhkk]SNKOYN=89<NltlaYQPSUJA;;SmtzrR==T`\\\\`dc`^_]W^T5:NXG7:FLOTQGCC>;>@DILGENTQQQPMGJUZXQLH?779=@FIECNZG6>ECDCBLo~||vz}yutbZF857;>??@CMPKD<;EKKH@=;:977833<EIOUQVh]BFXXSG<9<;9CS\\``]WRPJDEC>CHD@??=<979?DDDEFC@@BEEEFFA>>==?>>AC@:67?KRQ?07ACA?BB>;7358<73:@CFHIGFD@9:>@@?=;;85568;>=:867758>@>DIIC;7<BDCB=;DF;5ALF724887767:?@>>?;987667>EF@<AD@?=CKHHL<-2BLE<;=DOQLJJD<@C>8559?BCBAEOYWTVSEACABIGAB?@CDCDMQKE<9AHGHGMbdWSOJD=;>@ACEJNJECCBEILJFBAA@?:677677768:==?@>=;853223575.-/03321/./25533431/011114?NRSQRSSQPMLJGFEEFHD>;66=BDIJA=GOIBB@<9521-/8=<;<;<:99:95112650326:<<>@@=;83,-57679:;;:645:?@@GJ@=GG>>@BD>94.-//08>5.033342345651/146?LPNRL:)%+30064003306?CCBFHFB@=8>2,582'%.1..14359<<<GVREB?952//69756678;DHQWG<EOWNHKXJ1/758D;7MSgfDB5/=E<15@IMGHOLCFZb]XO=1;QYXUG7>;7616<73210/012/*6KNB<><8431,.9AFG@89>>8.)-142KKKJJKJIJJJIIIIIIIJKNPOKKLLMNNNMIHHHJLMLKKJJKLKJIJJJJIJOUURMJHHJKJIIIIIIJJKMNNOOQRSTTWXXXYYYZZXWVTMJOYdggkqtuwyuk_VOMNONNNNMMMLLLLLLLPSSPNNNOPQPORRRRQOKKKJJIHHGGGFGGGGGGGFGHGGGHGGGHGFGHINUXX[[\\\\ZUTX\\_a^]]^]]^^[SLHDCEGKMNPSVY[\\_^[YZZ[]^__^[VUWXZZXVX\\ZWXXXXWVVV[_^__ekghni[VZXS`pj`iy|vsrtn`Vblgmjiy|vnc[Z`g]MOSQU]]ZTTY\\ZUXZ\\XSWSNPONNS\\VPQSTTURO_neYXYYZ\\]YXZZ^cZPRSTRTXZ[[VPPPQWZ\\]`aaefeeehiihg`h~wcd][[`fihfZXcccnrzYKQNLLHEHYpX@CBAA==@EGDAAELMKILOOJA@DFECBA???AA>===>?AFOUSNHEINKIIIGLOG@BJPG>@A@???>?@CDEFGHIJJJG@>==>>==AEGIIFFJLHC@AEJJIGEEFFECBCDC@<=HKIE@@Ys|jIEGHFGFAB9D⽜zaTPOONPQSTUWXWXYYXVTRQNJBFG@;<==?EILMPSWXY[\\]]]]]^^__``aa]YYYZd[E@CBCA@@JRSSROP\\je_gnhREC>=IW`efgikkkji`WVXRKIIGLXWE;=?>>>?AEKU\\XLDJX[[`]TMPSNHFFFFEDCBBDEDDED>?LQIFCDGJIVe_Z`WB>BBCDDEFCBACEEEFFDDDCDIJGIJIHHHGBAGOTTUTRQPMHHHFGIIIIIIILQUWUSSSPOPQRNKJKLNOONLPTTQSTUVX[\\RǾ˾ƿvutojgf_hqifb``fjf`^]]]\\YWVUTTSSRPOMJHFEEDEM`v{rr{qiegd\\VUTWXXXXXXYZZZYYXUTTUVWXXYXXVTSTPNPOW_[XWUQPSSQQUUWXXWUQMMPSVVXYZZZXVSOT[]\\]]\\\\baZNGB=CDB?=;88;=BHE>=CB@>>>>?GMQNEBBDFC@BEFEFGGFIKHGMOMD:@PNdype\\cikj`URQOJ@9898E^bgsplg]TPOHEAB[pu{`OLMR[ZZ`fgdaba[\\N;IS[XJIPLHMMDBB<8:<AGIEGPTPNNKC;BPYXMB@?;::<?BAAJPRB=?BBB@BHg|~{swkK7457<?A??D[aL:7;DHFCA?><98=?87<AEEC?HTE>[iTB?@?@AJX^[YZ[YNC<9741>NKCAB@>;889@FEBABBABDDEFGC?@@@BAACA:767:DOH30>C?<<BF:335218;<?DGGJLE<<=;<AEB>=<:9669;;<>??<<<88@DBBGJE<8?LRLGKKHIHCDGC;9<=;5349>=:=@><;86523>JIA?CDCB@AGIE@9-,9EC?BFLOJIMJD@<976437?A@DPZ\\ZXXYRB<97:A?<@?>DGGGJHB=55@GHIA@YdZWTL@55=@ABCFHHFCCCDGJIEBAA@@<779:87;>BC@>>>??<85456227544335443212465357876632347=FNPPQSSRQOMLKHFGHHGD>98;DKPQKIMMG?:87668747?@<::;:6568752025401//49<>@?;41-*/576767:6126>JQMCDH>0299@IGFDC=328878510243321247:8555528MQOVO<+(8?0*/.,+05944AEDGG>@CCEB9,-,)30261-136=?A@=::9799983./79/).1/.08;BIA<9Fh_NLRF1.533C=6NX[fS@EB;57635=EIGLSTPMZjkhcQ==JOU^R@[[@;69@;1**--../206KN@:AA:64115<BDED@=>>5'$+///KKKKJKIHJKIIIIIIIIIKNPPLKKNONNPNKHFHJKLLLKKKLLKJJJJIJLNQTVVUPKHIKJIKKKJIJJKMMMNPQSSSSVXXXYYYYYXWVSPKMNOXgqrswvtrj\\ROMJKMNNNNNNPQRQQSVZ^_[SPPQRRQPSUUTTSPMMLKKJHEDEFGFFEFGFFFGGGGGGGGGGFGHHHKQTXZ\\\\\\\\]]]^_][]]]^^__`\\XOHHHJLLLMPSV[_^][ZZZ]_^^_^\\ZXVYXSTW[XUUVUTUUTUVVYYZ_ihb^ZW[a^]hqpr|xqrohd_W`ddjfbjqph^YZajbROQOQUVTQQVYYSP]iSFQRNNOOMW_VPSSTUVPGUrnc\\[\\\\\\^ZX^_[a^RPUVVWZ\\[[UPQQSY[\\^`_`fgfdadgiifag{jdmZX]_emsllqihqipTFOMKLHEJ_y[BAA@@?=<@DDABLSULJJLNICDIJGBAAA?@AC?====?AEHHEB@?L^ZNHGFFD=9<EJG??@?>?=<>ACDEFGHLMLLHB?>?A?=>BEGJKIKLHA=;<==<<;?INMMLHBAB@>?ADECA=XuwRGGFEFEB@:/uԯlXRPOPPQRSUWWXYZZXWUURLGCFF>:<==AEIKMOSWXY[]]]]]]^^^____^]`[LEGHHHFDCBA?HOQQQPJMajbdfXLIB;@OYaehjjkkljfZRW\\ULGECFKIB?=>>=<::DZkncPHN_dfkaVQNMPOGEIIFB?>>ACCCCB??DJDBAACEO_g__dWC>@CEFGFFCDDDEEFDDFFC@@GNMJJIHIKJGFJPRRTSRPPNIFFFFGGGGFIKRWZ\\WPQSQPPQROLKKMOOONNPTUUUUTUV]Pg˽Ȼ÷ÿytpnlidciwzoifecaild__^]]ZXWVTRRSQPNMJHHFCEEHVm}x{~{vnijhb\\YWVWYYYXXXXXXXXYWUSSUWZ[\\[YVTUUQNPQS[ZVVUTQPRQQSWWXYZXTQNORUXYYYXXXWURRX\\\\\\]]\\^b_YJGD>:==<;99:;>BHLG><@?>>>>AJNJGC@DLKB?CGHDFHGDFHHGHQM?;Mkmztdfnmgb\\RNK?97899@OUU\\iph]XQLHJIEIWir_?>JSX[WPMWfjecgb\\UX`WdpcVTPLMMJC>9769>GJGIQSLLLC:9?LYWD7=B@<:;;;;<BDDB@?BEB?CQpvzb=9=::<>?@AEVgX=;?>>><;<:98>CC>>@@@>=:9AG[q{oVHJJDENTUVWW[_\\J72532=NOHD@?=:766:DHD@AEBDFFEEEFDCDCCABC?<;;948=828?=::;CG:48:3.3>FIKOQSRK>:=>@AHPOJF=78=<;<=?@A@>=<;>CC>?BA?=@JSOHKNLMKGE@;;=>?>6369<;;@BA@>96410:GIDDEDBBBDJIC@=4/5=DIMNMIGMN?6=A>9888:>?AL[a_^]VMD:767;<=<@A>FOE>C>5447@GHF=>JSVVQJB:=>>?ADFGHFDBDFGHFDBAA@??>;>>77<=>CA<<=??=8459;208888766777435776468999654458;>DINPRSRQPNMKGEEEEEFC@@DKHFLQOMIC;42332669;<;::9<;5135655324400/,.4:=@?:/**.367752593*-9GPVUGCD=-)-6AHC?BED@ACB?:65532000//5<?>8574-4KOUYI8//>?/(+.-*/3767:BJFA=BINNF9-.,,:=52.-.49ACDFJI<4118>;30178/'(+,+,////2;8>irTE@;=3,.2<95GVVTF9:;989877766>MRTTOUiuzygPFDCENOLjsJ1-3;>70/-.205CE@HI=;AB:6400/5?DBA@=;91*)-./0KKKKKJJIIJIIIIIHIIIJMOOMLKLMMMNNKHGHJLMMLMMMKJKKKKKJJMQQRUWWTQOLKIHKNLJJJJKMMMOOPRSSSTVVWWWYYYYYXVSOJEGUhrqt{zpjdWLJIJLLKJLPRQSUVWYZ\\^_b`ZTSTUUTSSUUUUURNLKLLMJHFFGGEEEEFFFGGFGGGFGGGGGHGFEHKOUWZ]]`cdca`XQY[Z]```acd_ZVQJIIKLNOSW\\^_]ZY[^`_`aacc_\\\\ZRUZZXTSUSTTTVVUTVVVVWXXUTZdgaap|{}}tkkomfdb_acacb`a`]ZZ\\_jn_QPQPRSRSQRTUUWUhlPRVRNNPMXbVOQUTUURNNizka_^]^^[W`ha\\]WRU[_a_]]]UQQSV\\ZV\\cbcfgfdaafjieaanx_phb]\\hrsns|ws|od}zRGOMJJKHKecMCAAAA???CFGJQSQLJJJLKJLPNHCBABBCDECA??@BBAAAAA>=PgdUKHEA@?==>?@AA@@A@>>?@@ACEFGKPNHFEAAAA?==ACCHRTPF<;;:;<=@AJY^ZQJGFBAAABDEEECA>LdxuRGFDDCA?>:6=ູ_TRQQQQRRUVWYZZZYWWVSKEFFC>;<==AEILMPSWX[[]]]]\\]^^^_^^^]]YXWRNPTTOIC@?@GJJJJLHBPaef\\KGK@9CR[agijjkjjhcSOW\\UKFEECBCCCB@>;:>AIZb^WOJHQZ`_QKMKFJNHABIID=:<>@A@AA@@@CCA??ACUjpqobSFA?ACFFEC>ADEEFGFFHIGFEFPSOJGHIKLKIJMQTTSRQPOLGEFFFEEFFHLW]\\\\XRRSRPPPPONMLMNPPPOPTVUTTSUWQOÿʼɼ}wvromlkees|uqkggfdhg`^^\\[[ZYYVTRQQONLKHFFDDEDLbzx|~xpnja[[[YWWZYYYYXXXWVWWUSTTVWZ[][XSSTSOOSTXZVVVSQPPOQSUXXXYZWTRPQTWYYYYXWVUSRXZ\\\\\\]\\\\^a^WHHF>77:;:9;;<@CHRTC;>====>CIIED@AMRMD@CEEA@ELKIHIGAKH:8Celzpjomec]OLH>97679>GMMKWdZMIGJLOOE:BZ[B5=EP^_VJEXnrkmvtmmplchzu^SYWRPPK?777:?ILIKPOIKF:8<?JSL;;ED<999:::=>?>?@AFHEABRvpmy}jM;?C?>===@CEGYZGCC><?=<<<=?CA??>=>?DID<BUoyxtj^RLMKFGNUVX[fgT=68;AHMNLFA>><735:BJNMLKEFFGEDDGGEDDDBBB?>?>832./8>=<===?<6368:87<HLNRWXVRKHE?=<?O]]WQE?@>==>>>==<;<<<>?:67;??<ALJ@>ADE@;<957:<@A?<;;;99;AGD@:55536AHECEDDDCEGFFGC=88<HPPJFDJOG815>=305=@>DOY^^`^RE>;7899:;?<<@@JTA493/356?FGD=<;<DNVPEAA>:;?CEFFEDCCEFEECBAA@?@@??;769835767;@CFB;89:649888767876314786457753012237899AJNRSRQPOMKJGEC=:9=?BDF<8CNPMIA;8321-./01115:>@?933444444552//2039:=;7/+.25667535;8-0>IHJONHE<-+,:D?8:?<;=>===<;:74210//4=CD?6142+5HPUL:44871024742357:=6:HG@IQV[Q>5/.**093/234:?ABBDN[VKB=<;>:32681+*((2<7//..8::SaL926A6+-4778@ILF8202;CGMQLA988LWYaUJWj|oSJLLILQSUvtF/<>72/30.:BFPOGJI=7752011,'.;A;9;5..12.-./1KKKKKJJKJIIIHHHIIIJIMOONMLKKLKKLJIHFHMPOMNNMKKLLKKKJKNPQSTUUUUSQMHHJKJIIIIKMMMNOOPRSTTTVVVXYYYYZYWUOLIJVfsww{}m`]SIFGJLKIIMUXVUUUX[Z\\^_``_YTUWWXYWTUUSOMLLLLLMNNMJHFEEEFFFFGFFFFFFGGHGHHHGGIIKOTY]_`]Z\\YUMIVWRV^a_^adffda[SLIJMPRTW_`_]Z[`aa`abdffa_ZUZ_\\YURTTUUVVWVUVVUSSSTUSV_bajy{uvrjefllfddcdc^^_^][YY\\_akp`QQQRTSQQRRRRUVY{oUY\\SNPMXcVLPUTSRRROYxebea^]ZW]ik`X[\\UW^a`]\\]YTQT[\\WOUdgggfeddbfljfb]e{^pxl[`otqno|rwkNHNLJKLGKf_JEAABBAA?CJLNNNOQOKJJKLNNKGBBBDEFFGHDB@CFE?==>>><J``TLIEBDDB=<;>@A@?BDDC?=;;<=>BHMJCDFDDBA@<=@ABM]^O@:;<<>BIPUdpkdWKFBCD@@CFFGFDC?BJWVCFECA@=<:<96`廤rUSRRQQQRUWXXXZZYWWVTOHEEB=;<<=@EILNPTXZ[[[[]]\\\\\\]]]^_`^YRSVWWXYYWSJ?<BHIJJGEC?=E^kUFHJ>;JW[`gijkkigj_JJUWPGDEDBCEDDCA?GP\\_ZZYVWXOCELOG@@FKJJMOF>EPK@;=>?@BBAAA@@A@??BDPds}u[LGDA@AABA@;<>@AACFGEGGHGIJOQMGFHJJJIHKRURPQRQLIGGGGHGGGFIMX^][YWUTRPONNNNOMLNPQPOPSWWTRQSUHtǺö³ϼƾ{wusqqppjgn}xwsnhgfed`]]\\\\ZYZZYWTRQPNMKIGFFEDDEUoxw|sqqeXVY\\\\ZYYZ\\[ZZYXWVVUSSTVXXXXZXVSSRQOQTUXXWWSONORRRVVXXXXYWSRQSTWYXYYXWVTSV[[\\\\\\][\\^a]VHHH=57:;:99;=@CHNO>;=>@???FNLGD@ENMGB@CCDD@@HOLJKH>>>976AHgjgrldbWKJIGE849<@DIHCGNG><CMSUQIBENHAOZXZ\\\\UR[nvrpyywwskbfiZNWYTRSRG:99<BIKKOPLJF<7:>?ADA>EF;678:<<<>;99>CDIJHDALvs^fyE?@@?>>=@ELMJFHMJEBBBEEGHJIJC=><89=>HPPMPYfnlfllSHUM?DMQTV\\ddVD<=BLTROPLC?@=8438@FMSUOGECBCCDEECBDFDAA??A>73422:??@BB@;53247@CBBEJSWWURRRQMB>CA@Sbb^YNB>????=<;==<<<<<85458:7;EB525786456669=@BED?<<979AHD>956863:DA;>EFEEDCDGHGC=8@PTJAAEGB<<9466/,2<AEPZ]^\\WJ97>?<=;76:@<:BGMUK:328<74<EGC<9834FWO@;89;>@CDDEEDCBCDCCBAA@@@@@A>;856730//19@FLJ@:97898888767544425886456752001269954>IORSRRQQQONHA<6202799;53;HOMC;<;510-,+,..04:?@=;865456568631487488753014676664357:87=HJKPRNK@/-.=IB>IE85;989;=BD?BFC;3/5?BC<200/6:AKH;7769427721126899677@OMLNQPF632-*)+0./7:<?@@AABHSZb_O;1;C=5670*++&/EI96<9:>=@A:0,271+,16::500.-139JPJR_YE:<FZ^[hbF@LlrIDOPLKQG5T|gJNN8+),215KZVG@HK<,)()./0.(-7912:2&(251--./KKKLKJJKJIIIHGHJJJKNPQQOMLLLKKJHIIFFKOQPONMMMMMLMLJJKKMOSTOLOQPPMIHJJJIHHHJKMMNOOPRSTVUUVVXYYYYYZXVQOLJSmzyz{}r\\VTJGHIJLPTWXWVUTVY]\\[^```_\\VUYZ[^]XTTQMFEIKKKKKKLJHFFEEFFFGGFFFFGGGHHIHIJKKLLMOSX]dd^RIIJGGORNPW[]]_bdddfhf`VLLPSUX^```__`a``abehiheb^_`]ZXWVVVVVVWVVVVTSTTTUUY^`guyqotpfeikheddc`^\\\\^^^_aaa^]dg`WRQRRSRRRQTRRZYtXUi^UPMZcVKPSSQPPQPPixb_mj]XXWXakh[Y^VRVXZZZ[[VQT[WSOO]jhcabfhdgophc^fm[hyk[fwxtrpw~`IJLKKMLEJfSBEBBBBBBBFMPMJHLUXLGIIGGEDCABCDFHHIJHE@AEEA>>=>>=BQUNJGCBEFB=68<?@AAEJID@<::979?EGDABEEEDDB>==@ETc`K>@>=@ACINQ]efd]ZUF>A@?CEFFFCBAFAA=>HCFKLA<<<;86߾YQRRQPQRTWXWXYYYYXWVSNGC@><<==@FHLNPTXZZY[\\\\\\\\\\\\\\]^_`a^TOPQTVVVWXVMGEEHIMPKA@A88L^OHLH<@Q[]cggikkjjgWEEMMIDCCCCEEEGEALjsuqe^[[_bXMIEB=;>DOQNOSNFJRPGBAB@BEDCDDB@@@@ACCHRbvrUHNQSLDBABCDDB@=>@CDCEEEEDCDJLHCDHIHHGIMNKIJLNJEFGGGIJJKKMPX^\\YWVUTRPOOOONOOMMMOOOOOTWUTRRRVɽƹľо~zxusrqqqkgbh}unhgfd`_^^]^][\\ZXVSQPPNLJGGFFECCLczwx~zomrl^UVX[][YYZ]\\[ZYWVVUSSTTVXXVVVVVVUQOORUVVUVSMLLOTUUWXZYYXXWSSRTUXZXYYYWVUTWYYZZ[\\[[`a[UIHH=68::9889<>AGFD79=DIHD@FPQKFDGHFCA??@CHG@BJGFJI>589888<Zlnnchrj\\ULHHRcV83=ABHKHCACA?BLSUTRNHC?=IX[[^ZQRarxqowyurrssg`_WPRRSRTWN@:9;CGGKQMHC=98=@;9;?CD:4688:;;:955=FGFJJHFBJnzaQmzG@E?;<;;I^b[XVJDGIFIKKJMOQOLEB@836<>CIQWXVidZknlXSWKBHNPRTUWXTNIHKPUTRRLCA@=9524>CFMRLEBA?@AABBABDFGEDC@?=848;;<=>BGEB>521369<@EJPVWSMILPOMJIQPDHZ`\\_]K=?A@@?=<===>>=:77401236;;4355466679;=@ABCC?<==;=?A@;746<<56>=57?DFGFEDBABA;8FURFBDB838?>9840035>OZ\\ZTL>0*2AB?C?78>?<?GMQVSB8@JI@9=DDA<9:77AJE:315:=>@ABCDCCCBBBBBBAA@AAAA@=8555544459?CHH;66468789987658=???<766667667745:<;44=GNRTRRRRUSI@720223456777:AEB76994.,-./2544689999875667799668:::85554246777651,,017>96;FPXURQC-,2?FFGIC>;::::<DOPJMSQE6-08=>502119;=?:689306=<.'').7898427EUM:6985233-,,-/003;><<@BCFMFBS^I/*3<=974,(*,*'9PF;A@AC@=:;2'())*+,087+%%%,7;BNQJLYTB44BW_^jfC;<Mm_>EMMKFC@.GackZWI.*(*02EZTC<EH9)(+,//-,,.241284+,132.--,JKLKJIIIIIHIHGHIJMQUUTSQONMKKKJGGIIKMOQRPMLMONMMKJJIIJLLNOJEFKKJIHHJJJIHHIJJKLMOQQSTTVTTUVXYYZZZ[ZZWPJITiturv|fSNJHHILNQSQONNSZ[XVW[]````]ZZ\\]^_`_ZVTRLGGHHHHGGFFFFEEEEFEFGGFGGHHIIIJJKLNPQQRRTWZZ]e^KCDFFHJJILR[]]abccchihgaYSPSVY^`bccaa^Z\\_dhijlkhd^[\\\\\\YWVVVVWWVUUTSSSTT[abdnvst{zqghlhdfge_YYZ]][^bbcc`^`chbUQPPQRTSRUSO]fnZNgiaRL[eVLOSQPONOPOQ`WXkrdYZYV\\jpi`[SPSTUUUVVSOTWOMQNVa_[\\ahjeepwpc^dlqeYWb``jwxvtrpy~{qWIIIIJLJCLi|KAFBABCCCFLPROMLOWZPHGGD@>@@@ABDFGHIIIF@@BEDBAA@BCBEHGGID@BDB>98;>?@DLMGB@>=<=>@CEC@@CDDEGGC?=<?HW`\\LAC?>DCAA?>?FOSSXXE9=@@CDEFFB@><<B@=GOKWdV@>=<=2QeQQPPPRSTVWWXWXZYYYXWVMA>><;<=@FIKMPSXZZZ[\\\\\\\\\\[\\^_```ZNDGPWYXWUSQPNKHIMQVSGAA><<GJMJ?:IX]`ehhikjllcODEGFCBCCCCCDEECAZnpg]_a][^a_UNJHE@>EQROLJIOTTSMIFDDDEEEFHFA@@@ACFEHVptYO[giaYNHHJOUSE=?DGGIIGFEDC@BGGCAEIHGGGHHGEFHJJGFGGGIKMPPRTY_\\WVTPNPRQQRRPOONMMLLMMMQVXZZ]J·þƮ{yxutuusqkg]fsmihfa^^`aa``_\\ZXVSQPNNJHGGEDDCEWpzwnihjbVUVVVYYYYYZZ[YWUUVVSRTUVXXVVVUUUTQNORVWVVRLIJLQUTVVY[[[YXVRSTUWZZYYYXVWUTVXYZZZZ[\\`_YRIHH?888:8777:=AHEA66;DMJDADIMLHGEBCD?<;;<@EBDIB=BC<679:>@CIKOX]ir_HDIIPfx\\53=BFKKHC@CEFJTTMPUL@:7;B<:MYSLXksomvwuvsottjf[LNTSSTVVPD97<GJHKNGA<76;DFA=;==<8799:99868?HKLMLJIIHC@Z~x[Yp~raJBF@<=>H]hb\\aeYIFMTWSMIKLMMMKGA947;<<=GNT]n_Yig\\[aVJIKPUVTROORTTTUVTQOKB@BA?:522:DGJLIFDCBA@??@ABDHLIED@=;98:<>=99BJEAB>50/5=>;BQZTMKHGJLJJNQQRQPXba`^N>@BBCA>=<=?@?<8664113469<><9:99:99<>?>@B@>=<>A?==;99955>B;7;>:55<FIGD@:8;=89FPMHKG9-2;84;=93211>S\\YQA:;7239>BHB9?CA@ABFMME?CKMLG?@CA>;;<<==>=;855468;<?ABCCBCCCCBBAA@@AABB@<877414:88?CD>1/444578:9867<BGHHD=789888779856:<9204:EOSSQQPPJ>5249>?<989:>@?;8559:82,*.1566666569973345678;:8<?>;:8238952355554/*+.29=:73;LZVTUI2.8BDFE>AD>9:;=?MXTMLOOD6,+/560-.-179<;:9;92+6@<0-.29@=7592<PL>2.../111../257207:969<>@C>67;=<3/25561+('''$*@GC>7?B=?AA=0(&'*++/55-*,.5>ABDFIOSH96619NblZ63=;B<7HMLLB442Tsq|jVT<+,+,5EQOHDFB602221/-+-012664321/143/--JJKJJIIIIHHGGIIJJMUYXVURQOMLKKJHILPSQNQURNMMMNNMKLLKIIKIHIGEFGFFFFHIIIHIJKKKKKLPRRRRRRRRSUWYYYZ[[\\^\\TJHTZ\\ehrurnUEIJGIJJIHGEHLOQRSTX\\\\_`a`^]]]_`__bb^YVUQLIGFFFEDDEEDDEEEEEFGHHIIIJKKKLNOOQRSTTTVVTRVXRJFEEFHIIHKRYWW^ddbdhhiheb]WTUZ^``abd]VWY_gijklmle^]`_ZXVVVVUUUUUSRRTUTYcfky~{~wmfgjfbceaZTTY^]X[dc`djljs~saUOOPQUZYTQOWgrnVQ`jgULXgXMOQQPOONOQQSQN[qp`^\\X]mxwri[POQTSQPOOOVRGJOPTWXYZ^begfkz|h`gcddeZV[foqoomlkndWcXQHDEFHIHDOkzMDGC@DEDDHMOPQSSTUVPHHIF@???>@ACDFGFEECBAAEGEDCDHKIB@BDHFBEEB?<;=?@BDIKEBDB=>@BCEFA?@DDCEGGC?==>M[ZYQGB>?EEC@=;:<BGHFE>;>>ADEGHFB?;7=HEDPYNLOKA@?>>;6uzlWNQRQQSTUUUVVXYYYYYYYRC=<;;<=?GJLMPSXZ[[[\\\\\\\\[\\\\]^__`XF7;JW__^[URONMLJLNUYTGCGE=>GNG9;O[^cggiijjkj^LGHGECCCCBBCCD?I`n__adhic^_a`XTRKGA<CNQPIA>IUVSNJGECCCCCDEDA?>@D[iWRfqpb^golih\\ONRTYVF?DKQQQPMKIGEDBBDECCEGFFHHHHIJKKIJHHGGHKNPQSVY\\\\YXVOLPSSSRRQPOMJJLLLNOSY^_dWWͺÿǺɹ¼}zxvpq}{rlkecis~upnkg`]adfeb`_]ZWTRPNNLJHGFBABAKd~{xsligeYTUUSRV[]\\\\[ZYXVTUUVSRTUWXXWUUSRQQPOQTWWVVPKIKKNPOQSUXXXXXSOSWXYZZYXXVVWTUZXYYZZZ[]`_YMGHIA988887579=AHD<648<DEDCDDBCFECBDD@<;<87=BFI@79;8667;>ACDFHJJ\\iL7AKK\\ou_>6CJJKLHC@BGJNQMLUS@8:?B?=GVTQTdd^eu|zomv{spwjSH?<IVVSSRPJ@88>GHGIIGDC?:BMMG?65<DE=9::::9;GSPNMONIJKKE>Hh~r\\[kzljHAFDEGN]cb\\Y]ceWEEU_VKGIKLMNMH@?@>;:::>?K`hcjf_TX]OJLLPZYXWUVUQMMQRMJG@;<?B@9422:FLLLLJHFEC@==?@BDIKGA?><;;;::<<97?E@;>=5227@A:<LVOIKMMKJJKMPMLT[_cc[OFBBCDEB=<=>>>>;886655678=?>=;:<=<9:=>=:<@@=<<?@?>?=:;;:9=A>;>A@:28DHC<9779;97?JIGKC1.:?3.8>=8206EQURI:<LNF;3:EI>9BEBB?;?KJAEPNEBBAA@>=;<>=;;::;>9013:>>@BBDDDDDDDCCBBAABAABB@>=;512:93:A@9.*2545889988:?BDGF@:;>>==;9631247951.,/<GNPPQPI?66<DIIEC?;7:?B@7227;=:3-,046545579<@>71023457;==@B?;<92/58:1/3545543336:;998<JYWTVRHABDBBDFJE<68BFDPTOOJMOA2/,*,01/,((05:;::;72/5;=>>?CHJE;65:JH<7730/...--02697106<;83343101*&C^L002.0/,-039>?BMYTGGHA;9<@=0))*,04674-,5<A@<;@FKH91571+9PR;.2;;824GKLL@+'+X}}wL<=12629HLHEB<755654553200113444432479534LLJJJIHIGGGGIKLLMQVYWVUSQOMLKLKLOQUXUQRVTQONNPOMMMMLJHHGEDEHJHGFFFFGGGHJKLLKKLMOQPONMNPQPPVYYYZ[\\]^`\\RKMJKPZh]Qc_GEIHGGHHGGHHOSUUX\\^]]^_`_^^^^_`^^_dd^ZXVSOMJJIGFFEEDDEEEFFFGJJJJJKKJKLNNNNPRSTUWX[VMGFHHHHFGGGHHLPQNSY[Z\\accabcb`YVWYY[]bec\\YUW_fmmmnnkhffbZVUTTTSTTSTSSSTUST]hs|wpkddhe]]a`[XUX]]XZbdbajy|z{eYRNPQU`cZTVX_cbdZY^bceYNUi[NQQQPPQPOQTTSPRjvpj`\\_kw{|xobTMPUUQOPTYHCLSXWY][ZZZ_efixrgnf[_twhgjpsrqqso_gbAIOMEABEGGGHRl{SJIC@CFDCGLPRTVWRPNKGHIEB@@@>?@ABCCBABA@@DIHFEDIOSSMEABDEGHC@?>?ABBBAACEHID=?A>>BFB?@DEEEFFC@>>@P[WUQHC>=CFDB@ABDFGC???ABBDFGECB@><:>EDGLHE>@@AA@@??:Kuqro^RRQQRRSTUVWWWXYYYYYXVK@;::;=?FILNQTXY[[[\\\\\\[\\]]]]^_`VC9:?O^`bfh_OGINJGFMPUMEIJHCCIB:AT]`dfgijjiie[MLLHEEEDCCCBA<=Ung[cjnnrg`bc`]\\VLA;=FOUQIA<ANVSMGDBA???ABBA@?;Hh~lvnfffghhebYTTWZYPEAENUTRQONLIEEEEDDEECDEFHJKKKKMMMKJHHGFIKMOOQRVYXWUTSSTTSSRQPMKJKMNQRSX^aaePļɼíȷƸ|~vooy}nhhefhlywrmib`fjifa_]]YURPNLLKJHEDA@@CTt|yxsmjg_VTUSQS[dea^\\ZYXWVUUTSTTUWXXWTSQPNNOQTXYWVTOMLMNMLLNPRTTSWVQNTYZZZZXVVWWWWZ\\ZYYYZ\\]]`^YKEHIB:98877579;>@>9657:=>ADEB99@CCDEGIFCCC><>@B;6776568;>@BEJIC?NU<4>CG]lc]TJZ[PLNHA@@FMMLKVWK?9>HMJVjhSO^bQIWjk\\QWed_ksX902<IOLKKJHC=;>ACEEEDFKNJHKNNJB67EPOGA@@>?DKTSE:>IJKLLKIHEOgqjacpzk]_XGAEKLQ_e^[ZXWYdbM?JXTHFKNOOOMFAFJB::;=<>KZjpsh[TXTKINORUYYYYYWRLEA@?AA<::;@C;3339FOPQQLHEDB?=<=>?BEEB>::;;::;;<=;::866:=843<@?=<@GLOSTRNKKNOMOQT\\`ZQICCCBDEEEA=<<;;<:888755668::7677<@<8:<<;9:@B?=<?AAAAA@>=>>=>=>ABA<8=DF>47:8:=;;DJDAD9,2AB738;<<9:CLNNMICGPQOH==GD96@DB>:;CQTPRVP?6<B@><;<<=;:::9652/38>A??@ACDEFFEEDDCCBBBBABAAB@>:6368/07<C:-/48:999::;;:9;?@>><<@@A?<6222344773/18AEIMNHA::@KQOJCCCB>===:423359;6/-25533349>AAA=63234668?AAA?;<:5100;7346777:;:98669<;<IVSUSUZVJDA>DJIA707LJHRMDKJNQ>-/0,-225<7+*08;87532014:@EHJKJH@<5FK7245431.....01484//4;><51/-,*,,*?hf<'/0,,7L]kwwwteaiib`]UK=@B2)*),47796-,9B@;79@D=68=<546997,,023769FKLJ=,($M}{zJ*2559:DHF@<3.39<=98:9883////0122138:99::KJJJJIHHFFGIKMOQRTWWVUTSQONMLMNQSTUUTSSSSSQPPPPPNMMLIFFECBDGJLKHEDFFFHHHIJJJJKKLMLLLLMNPMMSWXXY[[\\^`b^TIBCGMSMCLYRFGHGGGGGHIPY[\\]]]^^^^____^^__^^]_ceca^ZVSROONMJFEEEDEEFGGHJMNNNNNMIGGHKMNOQSUWYZ\\YXPGDGIHFFGGGGHIJKKMMNPTTSQRRSSSQRVY\\_aded`YQPZdgknnnnmkeZUTTTTRSTTSSSSUUTRVeqsnimpmidfkf^^ghb]ZZ[ZXZ_bc`_m~}h^WOPPXbddff_ZaTVZ[Z_fe[QWk[PQQQQPQRRSTTUVVcmvtkd`^dv|yxvkVOV[WTU[_IHLS\\WZa]\\Z]achmuzumlbUUiyvtsswy{yfOGdrFCJIDABCEFEGTpuOIIDBCCDBEKSWXWSMKIEEECAAAA@>>???@A@@CGC>BJIEC@FOTWVNGEGIMI>=ACCDEDA=<@GLK@=AA><?BA>@EGHFDCCB?>?JTROLID@>BFCA>;=EIIGGHIJIIIIGA::<?@BB@BHKIIE@@@AAA@??=kwpnpbURQRRSTTUWYYXXYXXXXWXXK;8:;<>DHLNQTX[[[\\\\\\\\\\]^^^^]_`VE@<8AOUZcliXHFMKHHIJJIGHJHFEB;;FX`bdffgiiig_XONLGEGGDCCCA@?FLSWmtppqpc^`bfgfdM@<AKWWOFBABKTWLB@@A>=<=?A@>=;K|wkb\\VZb]RQPRS\\^PCACGMPQPNMJHDEJNJGFFGFGIJKLLLJKNOMIIKJIKKKKKKKPUUSUXYXVUSSSQQPOPQPPTUTY`b`YjʹɾβƲòz}pozxnhfdbfryqkhcdikfa^]\\\\XURPNLKKHFECAAAKf||yphgbWSTTQRXbhhb\\ZYYXXWUTRUWVUVVWVTSQPOOQTUXYWVQNNPOPONORRRTSTWTQRVZZZZZXVVYYY\\^\\ZZZ[[\\___\\XOHIHA:998775699987889987:>DE?8;?BDDFOPLFFKIA:==88986669;>ADDE@ACFC8<?AGYiaY\\fsjTLNH@>@GMLINVKBC??HLMYh`NU_WJEGLNH@BHDGZ`I::=?BCADHJIFDFIJKMOKDDKKMLJKOQL@AIPRQPLICDKOLD><<ANUQNLMQI@JV_cacrvgVNLHINLWfc^\\[YWTXb_IENNFDKPRQQMIGHGA98=??GNPdoh\\QTVSPPNORSTUVXXVUSI7149;;;9;AFB8128BMTWWM@A@?>=<;;<=><;;867756;==>=96458@D<67@A?><9>ENRSQLMOPKGLPS[aT?:BFCBDEDEEB?=;;:63577743246631139=98=>;:;=AB?=>@A>;=B@<;<<<<==??=;:@FF<39<9;?=?JJ><=2,8EC=;;:;=AHMMLMNNNNKKNRNGG@76>FB83;DGNUQLK<2;@=>=<<<;;::<;4/-2:>>>967:=ACEGFFEEDDCBBAAA@@BAB@506;4.1:FE<43<?<:99:;:868>ADD>;DGEC?;;<9645:?@;66;?DGD:7<AJOLDCDCDDA?:87776536;8004665667;ABBB@:6344545<BB@<;<;96204;9669;;=??<864:>;8?IFQRU\\YIBB?BBE>3,8KFJRG:>ACB3)-24311;IL<,,6:711450,,.3<CGEEEA:=L>623564477557851/0/,-03232.---*++0SmK%+84+Hy|_dqkcde^TIC.(+(-8955524=A?;<ADD=8BIC858:72-++.+*3:DFDB:,02AovH39:;:<B@;7801?HED?968:7/-00.-./-)-7:89;;IIIJIGGGGFGIKMPRTTUTSRQPPOMNNPQQPOPPPRSQQSRQPQRRPNMLJGFDBCDFJNLJFDEFGHHHHIIIJJJKKKLLLLMNLLPTUUWZZ\\^`bbcXHABDFJGEILIGGGFFFFGKSYYYZ\\_^^^_``__``______adfeca]UQPPRUPFDFEDEEFHJJMQQRRRSQNIFDIOPPQTWXY[\\ZYZYQIGHHHHGGGGHGIIKLLMNMLKJJJJJKNTZ`ccbdeebZPLVZ\\hlnonmid\\SQSTSSUTSSSUUVXUS_f\\SYgnlheilhginne_`]XWWX\\`bc\\[r|fd]PPRUadgsufa^ZVTUQ[nj\\SWoYSRSSQRSRSVVUUVWa^^fnkbVP`rsnstfRUXXUWZ]MLKMSPR[^][_dfluvsuqiaXY`frtvyz}wolcQII[w`FCFGEBBCCFEDTssIDIFCDCAADGKQYWRKJHCB@>>AA@@>===>???@DKH@AEFD@<=EKQTQMIFEHNIFC>ABEDC@@CGJIA?CA@?==?=BKMJEA?ABB@?CIIJKKHEDFGDA<8<DIJKLMMLHGJJH?:<@CDGC=?GJHII??CCCC@==>RrqmlbURRRRSUUUWXYXXXXXXXXX[VC9:;;>DGKNORV[[[\\\\]]]]^^^^^]]RD><:;CILQW]SHGILJFDINLJGAAC?=<CN[`bddffgfifZTSPKHFEFDAAAA@ABCDb~}|f^``gushgQ?<DMWWNGDCDFPVK==@??@@A@>><<<@PmsWNKMPJHJLMP[aTFBAAENSQNLJIGIJMMKIGGHIIJKKMMKJLNMIILOOONMNNNMOSUX[\\\\ZVTSSTUVXZ[YURSTRX]bb]ýԺʵĿy~uoyzunhfcbi{~umggdflja\\]^^ZWUQOMLKIGDCA@@EZw|{wic`\\VSVVVX^cca]ZXWWWWWTRRWYXUTUUSRRQQPPRTTVVUSOMNPPPPPQUTTVVVVRRUWYZZZZYWX[[\\]^ZY[]]\\\\_`][YRJIE=789:9877;966558=;89=BDC=@GDBDGLSSLFDHIC>@>9:;86679;>@BBA>AED?:@ELOTYbb\\ctqVHID@>?FLMOQMBAD?@DDFMTVWXZSLHA<@F?;>=?IJHFEB?;7ALPRPLJLNNOQWWSOIFFDDFINLFAGQSSTSOIGHFACHHDAP\\ZUQPQJA><?HQ\\mwxpZOPQOQ^ecaa_^XOKXaPHJIEDIPRPPNLLJGF=7<?BLMKO[^TMVTTXXMGJLMNRWWWTOF802469:;@EJH>315<FNSRI;=>===;:::99877854423:>=?>968;=ELC79@BA@=:;<>FNPJMRI?ACBK\\hZ>8DFBBBCCCCCBAAB>4/37:<94137840039;9<CB<;=@AA=;<?=627?=55679;<;<:678<BE>7:;:<=<@FB=>:24@ECBA=:9<EJHGKNPQRPMMQUSLFA==CD@86=B?BMG<=:5;<9:<==<;<;;<;6119>?<96359<?CGIGFEEEDCBB@@A@@BBCB83:=4./5?DC<8<@>;99:;:769@GJKHGOOJGEBB>:866<BHF?<;>BE=79<@JF=5>EA@?<8459;:;;:<=<7679<=>=:<AAAA?:52222236;=:99<=<::8249747<=<?@;854:?9558:KRTZRB??;=AA6-*5EENO@76674,),02.)1?DD=./440,097-+,*,2;BC;8:3FC1756:946=?==?@>6,),,++)'/50.-,))))<UK21:8>fj^d_\\_cgf^D+'(%,991046:@@>=@HKGISXPEB>:95.-..42(+7A?<;8-4BC^zh:6>;=?95212<?@IPLFC<57:6-,/-+---*',6:99;;HHJIGFFGGFGHHIKMOOQOOONLLLLLNOMLKLNNNQSROPQPRTTSQOMMLKGDBCEGIKMNMIGFGHIIHHIIIIJJJJKKJKLLKLORSSVY[\\^`_]aeYJDEFHIHECEHGFFGFEGKTZXUW^a`^___```a`aaaaaaadggeed^WTSSUUMEEFFFGGIJKMPQQRSTVVRMIKMNQRTWXVY\\\\YW]^SKHHIHGGGFGGIJLMMNOOONMNMLKLOORUZ_cddded_XTRMYehjkpnig]SQSTRUUSRTUVXYWVWXTS_mqlggijilrsngeg`[ZYY]_bc`]gwuilsgVSRN\\c]s|bZ_\\XUVRXmk\\TYrWVUVSQSTTSUXWWVV_YUW^a]VPRetoqwq\\RRUUWY[LONLLMRW\\]__dmlv{uwskd]gmlrtw}x\\TlgQJDBFEDEFFCBBCFECSvnFDHFBBBBACD@EQSPLJEA@?==@BBA?>>>????@DHDAABCB@=:;BHKMLJFGQbfc\\OHBCCDEIEEHGMIECABBA@>BMRHCA??BCACDA?FJMPQNIFDCDEFEFEFECB@>@GJJFEGGGD@96>GGBCDMIHHGC@=<@GctmigaVSRSTSTUUVXXXXXXXXXXXYXR@89;>CGLNPSWZ[[\\\\]]]]^^^_^]RD>=?@?CGEGHGDDCGMIFGLOIB><BC=:=JT]aacceeeefbWSUSPPMFDCCCBAA@?CJc}|mRUdhsr[]O?=EMUWPFDDCDKQK>>C??DGD?=>==>>8NhEJSPKFFHHLR\\bWHCABELNNLJKPTRKEIKMIFFGHJJKLMKJLMKHHLNONNMOQSVVUY`b_ZVTSTTWZ\\[]]ZTPPQPUZ]hyǿѻŮĽvzus||ywxslgedhr~}vpjgfgjlh`\\]^]XUSOMLKJHGDA@@AOl~}}{oc^YWVUVZ_abc]XXXWWWVUTRSSVWWUSSSQQQPPQQRRSUTSPMNOPPPPPQSUVXYWTPRUWYYYZYYYZ\\[\\^]YY[^^]]__\\[YRGHC9689:;:6;>:768:>A@BEGEB=<CJDADIMPQLGDEFCBA>:;;76789:<>@@@?ADD@9AINQNFRde^hpYBACC?<@GKOOKFGH?BFCDDLV]^ZTOKHGFIFDGHECAACC8742DQTSRNJHIHGMTX]aUFBABCBDB@=DPQPPQOMNLHDGKLIBAKUZUQQNKC847<GWdkp`MNOR^feeccbcVE@EJJIKKEADGIJLMNNJII@669>JPNKUb\\UYTT^[J>@HIKQUUTN?6623578;?DIKHB933;ADEC=?AA??=;<<<:7667779877<?>?>;9;?=BHB=:?BBB@<;<:=IPNQNB>CD>Gcua=5>A>?@BBBB@>>AED>5369>@;42773138=?>@DC><<=>=;8798447;:5468:;;:;95477;A?;;;:<==CB:@B:6;@ACFC;88;AA:>KQRRRPOPONLJFDDGIE>8;>BDDA:6679<<8769;<>??>=:6348;;:86667;<BEHGFEEEDDBA@A@@@ABBA?=<<2//3:@?=<>=;88::;:88:AIJMQRTQNIFBC><978<AEGEECDGD;7:<BD:12<A?;8636<<99<@BBAA>95:>@?<9:=>?>=942222112233347<>=<=3-2636;=<=>;642:A922/7FQUXK66869;5/,*1>CSJ9679;82--01(*<C<6530./..7>5,./..14:;0,.0O>+069:82128AD?@A?4++-+.+)-40,,-,,-04;><967Yv_jlpsrqqqG-*.*+8>73467>=;>>FKIQdjbRFBA;4100/151-3?=765-2?@IXmb:5;9>>2(/06@IJJOOIHG?88:5-+)*,,)*178756;;HHFFGFGGGGFFFFGIIJJJKLKIHJKKLLJHILMLMQTSOPQQSWWSQONKJJHECBDFIKORRNJGGIJJIHIIIIJJJKKJJJJJKMPRSTUUVZ^\\VPQVTLGFEFFHGECDEEEDEEGMUVNMV_`\\[]``aaaabbbbbbbbdfgeeeca]YRQUTJCEGGHHGHIIKMNPQTWZWRQPOQRRSTUTW]^\\[]]`^ULIEEEEFGGIKMNNPPQQPPRQQRRQONNOW^`bbeedfbYLWbc`_fgeki^TSTRUWSRTUWYZZXUSTYeprlhhhijklqnifif^`cb^^cdcchc_dp{wk^PLUZRh{_QVXYXXTVjg\\V\\rWXZYUVVUTUVYXWVUUX_ZWVTVT\\lwzuy{fVY[\\]_`]]YSMNY`aa]T_zkl|vqmlifpxvusss~`NUYPJKFGGEEFFEBBCFECTyeDEHGB@@A@CEA@FJJIGC?@?>=@BDCA?????@@ADEB?<=BBFD?;CIJKJHGM[nomlf\\ODACGMLKGDSYNC?BHH@>@EGECC@@CDCFID@CJOTYWMEDDFGGEDB@>:98<AFIJKLLKIE?BOLGEADE\\SILMGFHAAEGjwhdcaVTRSTSTVVVWXXXXXXXXXXXYZM<8:>CGLNPTX[\\[\\\\]]\\^^^^`^YI>>BEFGGGGHHHIJHEIEFJQLB9@@BC<6@OX_aabcdedee^TSTUW[WNHGIHCAAADLOZ}a_PBLWj}aEHB?>ENTUOEEEBBHLLHGF@@DFC>====?@?DTLK@CRWXURHAES^c[KDBCGJKIIILU_\\KADLOKFEFGJJKMNLJLLJHGKMNNNNORVZZVW[\\XTQPRRU\\a`^]\\[TONOORXZfǽͽĭŹwrsyuwvrkeceq||sokiiiknke`^]\\XUSQMMKJHHDB@@@CY|~ne`YUTUVX]_cca[WWWWWWVTQPTUVVVUSRRQPPOPQQQRSSRQNMPPPRQPPQSUXXXVRPQVWYYYZXYZ\\\\[\\_\\XY\\^^^_`^[[YQFFB658::<:8@B:68=ADDGJMJE=:8<A@AEKLOOKGEEDEFC=:<<76789::<>>?AADCA7AMNPHB>SjhfodD<CF@;<BHMMKLMMGDFEDEKR\\]YTPLPWWSQPNLD?::;=1/2?OUPSUPJEB@>HQRS`^H@@BA@>;;:<FJGIPPOTVOJKNMKA53>JNRRRRG<=;989>ERTHFKWgjffefefN:;?>GJNME><=>ADKPOKJH@513;JQRP\\fc^ZUYd_H<@FEIQSUSJ;4454579=CGKLIF@869=DGD>=EKJD==>>=:667879=<::?A@@>;=BA;:><;;>BDEC?<<99CPWYNCACGEFYeS:35:=A@AABB>;::=CA8458=A<4135447<ADBABB@<99:;986546:977779;;;:::975778<><::;BLOLD@ED:89:=CD<7788986@MRTSRPONEAEJLHDGIF;5:>AGF:4777:==96449=ACCB?:757898877755::9>GHEEFFEDCBB@@A@@@A@A@>:30/17<>:=@=:6457999;<DJHFLPPNLJFCDDA:79=ADEEDCBB@:44<F?534:=>B?><CKD96;BEDBB>3-15874466:?@<64444431010//039?=<:80-/258<;==86319A70126>IWWA,/468730-).4<J=258;>?;2-13-1>=54540,,-5<A4-0220000/+)(,F:,/7;:7/.-0ADABEGD94-+00-,30+,+)*5@@;9;;67T}tRmwuuonma=/6<-)6?:4465559><EJMXcgldPBBA82320/46/,481-..0247Ba`;6:9??,&5<:=GKIKOMJKJ?6:@:.**,,),7=80/4;<FEBBDEGHGGEDEFGGHIIIKKKGFHJJIHHGHJMMOSTRRSSRV[\\WRPOJIHGECBCGKOPRROKIGHJJHHIHHIIIJJKJJKKKKMPQSUTSSTVQJIGCACEDDEDEEEDDCCCBCCFKONNRUYYUU[acdccbbcdeccdcdeeffedc`^ZUSWUKCCFHGEEFFGHJLORSTSQRRUYVSRRRTW\\^^^ZWYcc^ZRIEDEFHIKNOOOQRRRSTTTTTSRSTTUWZ^abceeg^]`db\\XYYZ\\b[SZWRVYSRUVYZZZWTSUXdppjhihghjhmqmjhhadlj_^bdefjmicn{~zp\\NSUO^t^PRXYYXUU__]Z^qXZ][Yb_XVWYXWWUUb]_][VSTSbsyzuz}kbciifedfcc`TNWab]RJLm~utxsnnnip}}yxupubQXTOIOPJGEEEGECCDEEDYz`CEHGB??@ACDBABEECBA??@?>>ACDB@@?@@@@ACDA@??CCLNDELNKGGDDRVkq^UW][E?FJPXSFAL[UCCFKG???=?AAA@ACDCFIEACIMQTSKDCCCCEEEC>;<<>?FJKLNONLIIKaw\\FC>BHLMOPRQQRHA@:Jomb`_YVUTTTTUVVWWWXXXXXXXXXY[WI<;>CGMOQTX[\\\\\\\\]]]^^^^_]VGADFGHJJIKJJMSQLFFDFLOLA@ACDB:7ERY`babcddcdcYRPSV\\a]UPNNKD@?>GNNUz{TFB@JJWv|[<>@?@FMROGDDDAAFILNME@?BCA==?>@BDDE?ac9A?BN[`]TKFHS[_ZKCBDHJHEEHNV\\XLBCKMIECEFHIJKLKILLJGHLOONNNNSXXUPOOLIJNPRVY^ca][ZZRNMNORWVuѿƱõ~orxxvvsmbai{uliiijlkkgb`_^YTSQOMKIIGFB@@@?In{xteb`VUTWY[[Z^`_[XWWXVUVSQQTUTUUUSQPOPPPPQQQRSSRPNMPPPRQQPQSUXXVTRPRVWYYYYYZ\\\\][\\^[X[]_____]ZZYSNG@6579;:9>GD:89;=?DLRNIA;::8:>?DHILKA@AABCDB><><768;::;<=>?A@CDDADLMNFB@IcmgomS;BI@9<?EJJHNQPRM@ABEKLOVWTOJMY^][TMMD:IZG>?MaowVMQSPID@?@EKLLKLE??@@?<:99;?FEHOONVYRMMOSQD:529FNRRSJDD@:86259=A@EWklfffffeK7;@FFHKNG=89:;@JPROMG@658?KRRT\\eb[VT_iTC=ACEGNRSQH;565569>AEHJKIGB<9:;BMKBAFJKC<;=??;545769====?@???>AFD=7249<?ADEB?<<98AO]VHCDFIIEBC=837?GEBABBA=::99<=846:<<96424667;@A@>?@?;755788632696469;;<<<<;:;:8778:<;::;DRYSKIID:995;A:58953439GQSSQPPRL<8@FLI><B?43:>BEF?:9=<8=;96537<BFFEA:658887767656:8.8DGFFFFFEEDCAABA@BBA@A?;52015<AHHCA<533688:<?EIG@?FHHJHDCEFB<9:=>ADFCA>?@944=C<557:<?DKJKORK?9>CC?<71-)+/2234437??825897520111..269<==;74/,.026;;5142/<D838;409MI3+7<=:842/+-/630/58<?@>61222231./1-,,,-8=?4/2320/.0.*)',;:/07<96/6?<BB>@DILI<1,11-+0/++*(*8HHD@@@;8?HWq{@Pekf\\UN:-0;7.*7?71452-058;CHEWgeckZBBDA;630.270+.3.)+-.-,+=`W97:8>=20:D;4?IHHKLKING62?G6'+-,,.25/*+4<9DDB@ACDDEGFDCFHJJJJJKLKGFGGGHGGGGHJORRSTUVVW[_a]UPOPMIGFDCFILNNNMKIGEFFHFFGGGGGHHIJJJKKKKMNOQSSTSOJGFHGCBA@BCDDDDDFGECBBBCEFHKNRRRRRSZ`deedccdeeddddefefghfca`a_WTYXNC@CEEEDEEEFIJLMMLLNQVXWVVVVWZ^^^_YPNWahlh`YOEFIIKMOOPQSSSSTTTUUUUVWYXWY[`acccddghidbhj^SRVR^g\\RWXTSU[\\[ZYWVTUWcqqolihd`ehiossnlieff`_bdehmvshit|vwp[TSQXi_UTYYYXWTSU^__pYYXZ[caZXYWTUW[Wp^^__WRRQXixwx{voonmkhfd`^acWLMRTPLJCOsz}yusmr}}w}uc_eZOIQSKHFEEFEDDDEDG]|\\EHJGA>?@BBBCBBBBA@A??@?>=?BDCBA@@@@@@CEBEJKJGIFCNND>?C;GPB`cD;;O[KGMQft]C@BLQHKNF@AA=:9<=>==@@?AB@?BFHIHGDBAAAABBCC=;>AADKOMMLOSLIMUkr[KG>EUYWUSRQMHC?=<:Xtg^]\\ZXUTTTUUVWWWWWWWXXXYXYZYSF=>BELOQSX[[\\\\\\]]]]^_^^\\TGBFHHGEEGILIINPMHHCCJIA@EBCFA:>OV[ababbccbb]ROORV\\_[UPNLHDA@=CKJQonL><BJHCWeQ=>A@BGJKA=AA?@?BHMKGA??AB@>>BBDGJIIHMWK=>?EN\\d[QQRSSTVTI@BDHJHABMTUPOLHFHDDCBCEFGHIJIILKHHJPRPMLLLPUTNKLLHDHPTTX[^a_ZWWWPNLMMRWPǾȪɾüy{syzookeessiikjlmiedcb`]WRRPOMKIHEDA@@>>[}}skfac\\Vd\\U\\]YX\\\\[ZXVVVUUUTRSTSSSSRPPOOOPPPRQQQRSQPNMPPQQQQPOQUWVRRRQSTVWXXZZ[]^]\\\\[YZ\\]____^\\YZWY\\L@768::::BHA;;;:9=GORLIA>@DB>=??ADGA87:;=<=?@CB=78<>>===>>@@@CDINLMMLGRbjnnhoq`A@KA8:<BFDENYS[fM8@DICDJQSLEFSZ^`TLSRNkXFOt}UMOOKGC@@BDBCD@??==>>=<;;;=?EFHLKOUVRNMOSUI>><;BKPRRPNKB;759=<:;:<QjifhhhhaH8>DHFECLM>89<<BMSTROK?9AHINQOKW_\\TLP\\[C=@DDDFINPKE>;866:BIHGILLJHD?=?><?HJH@=>=956=@?635768=>?>@?=?ACDGHF:..9A@@ABA><;89@JRF=BIJLIB;8984?KQJFCCBA>>=<9798359<;;;84445:<:78=@@<::97446776654359==;:=???><:98;==;=>9:DMPLJLIA>=8:=67=;53339DKPQNIHJE;:;9>C829923<ACDGHA:>=8;:976669@DGHC;657788777879:8.2<CEFFFFFFEDCBBABCCCBB@=:5116<HTQHF?5447:<8:@CFE<4:>BFDBBCDA<:;<=?DKLNMLC98=>?>757;>>@DLQLFDB??@<60,+-.03337765587448<<8520011/18=<<>>:6331//.162+*//-7?77><2*0=7.5DFGC;7620/./+-149>??;63111464.+**++,.7;:64220--./,+++6F;0569954CHGE>9:@DFHF9.0.+//,,+*(+8GF?COOD71**/CSZcmg;DU[N?8422241,/;=0-35-+..+/@C4@^ebg]EEIKH:20/241/,+*(*,--..AYJ58:9=>;:<D9+4CGEEIKHNL;11D=+,-++.1/+(+590DDDBAA@?AEGDBCFIKKKKKMKGFECDFGGGFHKQRQSVYZZZ\\_dbZSRSPKIHHGGIIIIIIGFCA@BFDCEFFEFGGHIJJJKKKMNNNPRTSPHDFFFGHD??ABBCDEGGEBBBACDEFGIKKLNQSV]adeededddddddegfghhhgea__]ZZ]]RD>@EEDCDDEFGGIIHHKOQRTVYZ\\]^__`a^WNLWgmkkje]TKIKMOPPRUUUUUUUUUWXXY[\\]]^``aaabdcdfejuvjZVUPzy]SSVUU^ea]ZXWWWZ^gpz|lhj`Y^fc[dqttrib`a`beglrusmkpvsqpeWTUV\\\\WTXY[\\[URQZ__rYVUWY[_^\\ZWTUV[X`^^__XRVRQZipvwpmkkhgc`_^]^\\VPMNNLLJHEPixxwy|{u}jlj`p~_RSMJGEEFFEEEDCGbTGKLG@>>>AABCCCCBBAA??A@=<=@DEDBA@AA@@BEEHRWSKC>AIF:9?@7TSCZN897>GLUVcV<>?BINPK?:GE<=@B?<:;?>;<<9<ADDEB?@BA@AAA@@?>=@DFLOLMNJKMJLNMURNQKL[gkeYOHG?==<;<<Djq]]][YVTSSTTUVWVXWWWWWXYXYZXXRE>BEKOQTX[[\\]]]^]]_`^^\\SFCFIJE?>CJKHHIIIJHA?DB<?B>@E@:ETY^bbbbbbaa_UKMNPSWWSMIGFFCAA>=CEJYVG>;BJG>AGC?@@BEIG@;=>=;>=;EOI<:>????>@FGGILMNOPNIC=>HU_`XUUWXYZ[UKDCDGJGA@L\\UHILKIEA?AAACDEEFGFILJFIQXWRMKKKMNMKJKLIFIPUY[]_a^VQQPNMKKLSRpǻɸɮqtztnhehmqz{mhkllmmgdfgb^YVRRPMLKIFDC@@@=H{|{~okmke_TYtj[^]XZ\\ZXYWUUUUUUTTUURQQQPNNNNOPQRSRRQPQQPOOPQQQQPOPTVWRPQQSSRTVWXZ[]_`]^]XW\\^_`___\\ZWZUV_[G:779::>FC<=>?@AFMOMLKKKLLJGFCB?AD@;899:88<BGG>8:@CBA????A@?;;AGLOOKWlzvmhiomdRE@:679=BBBPb\\^spN=BHFCIUVHBFJOZ^RN[aedHHlhTOMHFDB@@AAAA@>=<;:;;:;<<=?CFFECGPVWSMLLNQJ==EJLNPRRPJA;63/7>=<;<:AYd\\]fkl\\@9BECCB@@@?<;=AJRUTRQM><LOLNPIDLPOMIHGB<>CHFEEGJHDBA@<78>GKJJKMLKJHECCB<8<GI;1342/3<CC839:68=?@AA=;>BEFGIJB9<EFA>>@@>=?BBACD<8ALQQI?::976;DHFEFECA?BCBBB?9348;;<;87514<=7019??;;?B>64:AFC<766779::;=@DFC=::;>@?>@A:4:ELIJPQH@?<:>=>?>=;85778ERNB;;<<;9459537966;>ACFHA8788888888559@DBA<766778778:<=;8425<EGFGGFFECBBCBBBCCBBB@?9216<ENNIC92459=>86777>>406?B@@BB=79<=<<>DKKLJF<9=A@?>968<@>9=KOC;=?>974/.255544359875544469<;:860//138<?>;<>>:32354440)(+,,,.11463103535>FIJJ?77650,-2323:A@=:5/.117AC90+)+.-/8988741.**-.,,./?S=100786AKGAA?62269@HB0%9YS1(41)',7ED8:P]O7++**)(*04=@@MLA8117:=ACA?DG>24<<51011+/<5*;S]c^HFIKL>2001122100/-*+044=JA7<<;??=;=<8(+;DA@FJFHD>@:@JA960.26763275,EEECA@??>ADC@@CEIJIGIKKIFCACFGEDDFMQOOSY[]^^\\_dfbZTQOMKIIGGFEEFGFFEGLQYaZE>ABDEEFGIIJLLKJMOPOPRSTTRJDDFHHFB??@@BCCCEDCCBABDDDCDEEGJNQTY`ccdefedddddddeeghghihe^]_`_]_`YJBDDCCCDDEFEFGFGHJKKMPUZ]^\\ZZYXYVOJJU\\\\\\_bf_PJKLNNNPRSSTUUUUWYZ[\\^`aa``abbbbbbcefinkf_^YTy\\XSTV\\hjb]YXWWW\\hkjxronc[^gbYU\\jruokhggggijlorsuwvwtonaWWWWYXVWXZ_]WTSVXauWVVWW^cc`]\\YWURXY^]]\\ZX[YXZ\\_clqnmkhd`][\\\\VUVVTRPNNKEJKKSZ_bcu}c_VKԉQRPMJFEEEEDEDBIhOIRLH>>?>?ABCDBCBBBB@@BB>;;>ADCBBBDBA@@CDITVNFB@>?>9;@;8YRBHA<;;OhxrZbD8@BEILKF<9ED<EQUI??@A@A=86:ADCD@>ACBDEFDA?@BABHLRMBFNKCB@C?:98@KLQZ]_]VNA=9:<<;=?<Poc\\\\[YVTTTTUVVWWXXXXXXXXXYYXYXNCADJPRTX[[[]]^^^]^`^^[QGEGKLC85;EHIHHHHI@77;<;<<8;?<>LY[`cccccbbc^OBFGJRSMGFHHIHCAAAACDBDGC;9?BBC?;>ACEHJH@=?@<9;>;9CMH;9<;;<=>BGIKKJKOSXVPKA=FT\\[WWWWW`he^VMGGFJMHGNSPGHJIGFDBBCCCDEEGIIJLJGJRVUQMLLLKJLLKJKIHLORZ\\^`c_QKMLKGNVT_Oƿİvt{sgebcjtu{xjehjlmlkhkpk`YXUSQOMLJHFDCBB@<b{xutqomuscWLUrl_`\\W[[XWWWUUUUUUTTUTRPOOONMMNORSTUTSQPOPOOQRRRSRRSUXXWSRRTTSRTVWXZ\\^__^^\\Y[\\]^____\\ZW[OS]_]A7778;JPG?>@BEJNOMLJHGJQQMKJIHGGFA<;;<><:=AFE@:<?A??>>?AAA@:77?KSQPhvvjb_fmja`U=368:@IIDGWd^d|oJ;CDESaT?CHCIUUPWdhquM?upTVSLHFCA@ACCAA?=<;;:988:;<<<?@=;<BMTRJBBEIJE=;FVXUSQRRL@7338>CA><=:9FSJDWjiT;:BA?>@C?9=?<>EPSQOPTP>;LNKMLB?CDFJLG>9;@EIHHHFEBBEFD?73:DFFJORQQOLJHCACCB?:52441/7@CC?;?@86=@@@AA?=<<?BEFDBEKIDBABA?AEFDCCA<9=DKPE99;:989;>BGGDCA?@BACC?;889;;;9755569951/49<=>??=;<DMPMG>9;:769<>?AEFE@:;?@>>?AC>89@GLNLHA:<;8;===?@?;882/>NL?66:;9996567797335<BDB<65678888887458978:;<=<<<9757:9766425;@EHHGGFCCCCCBBCBBBABCB:4789BIG>42468;;963/-3:6-3<>AEE?615?CA@A>=@CC@=>@?;:;;:;>@;9EUUJEA?=6/-08?@=;99:=;7567656899:;<9/-/39>?=>;8;=;5159;<<3.-01///./0/122468;>@DFH>448:3*.6412=IE=840/235ALJ@4-,1007:::640-++,03352>R://,/4?KLF:9A90/06=DG5/ci)'LO.'17:D:3J]O8,,./1.,,029@A;/2>B@=CQYZZ[VLGFED@<:<=916B81BJPQCDFIJA321003568971**35669>@@>ACB>77650.7>>>DGEA<>MRPWTLHB:877865541EEECA???>?AA?>?ACDCAACGIHD@CEDDCDEMPMNU[^`ccbdfije\\TPOKHHHFEEDFHJPW`ioryu^G<<BCEEGIIJLMMKMPQSTUVVWYTKFEEFFEC@>>?AAACCCCCCBBBB@AABDGKNQW\\\\^befeddddddddefghhikjd^[\\_][^d_NCCDCCCCDEEEEEFFFGGGHMRTTRPQPPQPOMKJLKKLOTTOLKKKLLMMMNPRTTVY\\]^^_``aaabbccdddeeegihffhaXzaYSQRV__YWVVWSR]lkfruruk^`ge`\\[Xdqmgkkjjmomijmquw{y|zqcXXYY[YWXWY][WUTSRcvUWWWXehdbb`]WVTY`\\YXWWXXX]bYPYmz{ywpga__\\YSSWWWUSPRNBGOLHILMFNkqO@B>mGNSPLFDEEEDDDAJiIATJE=>A@@CDBBBBABCB>?CGGC@?@A@@DIHEDBACGLOMDBBA?=>?=A9>]L>>:=<B`GA9BCGNH>A<;;>>EWWMGHDACHA89?EGHGB@BCCDFHGGGEDBBHLNG<CPL@A@A<7857>GJJLOPQL=::<<<<>A<?[j[[ZXVTTTUUVVVWWWWWXXXXYYYXXXULCBJPRSW[[[\\]^^^]^^^_ZPIIJKLC745;BGHJIGB83489;:89<79FU]_bddccccdbXG=>@GNJDFMQQPLECCCCEEBAC@;<???CDBEDEJLHC>@C@;:=<9:<>BDB@?@?<;CKMPMJLTZ_`XNF@@LWYVUURPXaXPLHLPKGKOMLKIFHIHFFGFCBDDEFFHKLKIIIJLOOONNONMKLLKKJJKMNOWZ\\_d^NIKMLDXlle}̾ʼwmf__fossyylccfinomllorh\\XXUSPNLJHFDCBAD9G}udblrmjg[SHNebZ[YXZZXXVUUTSSSSSSRRQPQPNMKKNQTUUUUSQQONOQQRRSTTVYYYXVUTTVTSSUVXY[]___^]ZY]\\\\]____\\ZW[KJ\\kwD8784>U[SG=;=?ELMMMGC?>FNNHEDDDB>;989;>A@AACC@==?@><<<=AAA@><<AIIEMismc_`ejf`b\\B3768KTI@;AR^YgzhA67>MZK;CE?HPKQchei{lJBqo\\\\SKJFCBBCGE@=>=<;;;9789;;;<<<;88:CIF@==@DFA;;BLQSWWU[_UG??GMLE><<?CIG94>S_Q;;????@EEA??=?EPSNNRVQ@;KOLLHBADFHJMJB>;?FIHGFDB?CFFEB818CDDKPSVVQLIH@67@H?1343335<BBBCDB@<8:=??ACA=977:@BA?>FJDBABA>>@AABCB?==<?EB;;<==>=@FLQMD@?>>>>=:9=@?>=<;9755776884359;>@>87<BGLNMH>:=<88:;=@BDED@;;?@===>@?=<=DMJ=652586345579765886<DC<67::8787568865425<@A@;9:9788988887433556:>@@A?;722442332322;CGHHGGEEECCDCCBAAABDDA;744=EECA=76789;;83103313:==@=966;DHFA?9<HNOLGED<329??;987;HQU]TB>;2-.7ABBBB@?AB<658:97689:;;;7..05;>>==<:8877678:==6003311220-042258;=<;<?=932694234225CNG<42455526FQND;55836898640,+-.49:;7>K3/0/.2BNIE97=7016;>AB7Ko&,jq;$>?+AI<EOE4.,-034/+4?:.-;A?GGA?AHMNQVXYWQG?<EKI::;?JIBA?DF52@AFA3001345547;5),45633>E?>DC?DB8357668;<@AAB?BOX]acdcXJ8000//.//BCDCB?>??>>>====>>=<=?AEGEBBC@ABCEKLKNVY[`fghggilkcZTOJHGFDDFGLOT[bjprsuwsdO?>BDEGIIIJLMNPQQSUWZYZZ[XOHDEGHGB>=??@ABCCBACCCCCBBBBCEHILPRV]cffdddcabcdeegiiiklkicYTUWWUXZPDBCBBBCCCCCCDDDEEEEFIJKKKKOPRRRSPMMKJIHGHIIJKLLLLKLKLORTTV\\^[[^^^^]]_bdeefffggghhiikkhdvned_\\^acca`a`abbenjdrpijaY]fZR[^]exocddeehoojmnruwz{{~vdVVX[\\\\ZXYX[\\XUTSQQerTVVTXhlgffec_[UZ_ZVSTTSSRYgZbt}}viabd_][ZZYWVUUTPDEKMLKIIEBHN[mtg`pkWECC<?HPTQLFDDFDDDDBKhJ;KDB>?CBBFIHHHEBCFC>?DJONKIJFABHMLLLGCJQJECB@@=@GMQUWMRbF;>>?<GӉS9S[>BBJZR<9;=<=@DKKMNIDCCHE==CKOPOLGA@@CEGINROGCDEHIC9>NH??AC=8<BFIHGILNOQM<;<B@=>?CF@CddYXXVUTTUUUUVVXWWWWWXXYXYYXYWSIDJORTX[\\]\\\\^^^___``ZOJLLLLE?:55:@FJHB9567;<<:7;<4=R^``bedccbbc_N<==@CGIQZ\\XUUOHFEDEFECDC????ABDHKJFEGFA?ACCA?>?><;9;AIPROMHAAGNOOMKMT`dc[NKE>DLONPUUSU[UMLNTXSDBMPIEDCEGGGEDEC@BCDFFFGIJGHIJJJLMNRRRPMLLKKKJLMNNRVZ\\a\\MIKINTboq]Ķȸwhb`abelpqtpgfghnttrpmki`ZYVSQOMKHFDBA@B>6j}zpa`hlj^_\\UPR_\\WXWYZYYWUSRRSRQQQQPPOQQPLKKMQTVVUUSRQQPOPQQPRTUVY\\YXWVVUUTSRSWXZZ[]__^][XX[\\\\]^___ZYXYC>m~=7773?X`\\PB967;ELMIECD>;AEA>==9788;<<>?BCBABB@?@A@><<==>>?=>AEHF>?Kcijfehgdb_b_G569:GQ@778BVROfsS328:BC?CCBIGBJY`dcaSC=JbnjcXOLKFDCBCHKD==><:964459=?@BDDDA;9>@==???AD@9897;M_^ZcicYPHJQNC;<AGMR@121<SN;;ACHHFECB@@?@ENTSRTWK;;LQOLHFGGHJLKJJHC@FIGEDCA@BDCDHD?AEDCJOSUPHFEC=2,4@@6654378:>@ABEE@;866:?@?<<:868<>>:7>HB;=@@>>>?@ABA@A@>;<??==?AA>BKQRNE>=>>>=97:?BAAA@?<97644:A>63699:>=76:=?BFG?9;>=:::77<BCDA=<;::==;;;;<>@C@81-//0221/./1232379:<<<:33898654468755668;;=@@=;;879;;;;98778:9778=@A?85211003235349@FHGFFFEEEDDCABAAABCCC@;76;AEKQF97988:;;:643124799759=?BEGFD@AINSSO@<=748=@A<415;?<EbcI=605<BA=>CDB@@?:89;::88::;;984102479;:::9879;=:769:4../01113.+/35657>B<79:=?;6;<1;F9-/;KK@9325852//8BJLJGA:2-013553/./26:>CADL302125@KHB8783..5;:74,>zGEz{C\"PS)?WIA?91/-,--..188-'1LWIEFAACB?<@JQRSPOLDOebA7>BB?=;9AG7,/224//24566611<:.,37658>A=?CBAIOC856789:==;=E?;EJNarxv^P>.00--,*+@ACDCA?===>=<=>>>>==?@AACCAABABBCEHGHKPRQV^_[[^`\\WTVTNIFEEDEGKOQTY_acjpporsl[IEGIHHIJJKMOPQQSVY\\\\[[\\_[NFFHHHE?>???@@BBBBACCCBBBBACDEGHHLV`egfddc^\\^`beghiijkkjkmeRKPROKHGDBCCCCCCCCCCCBCDDEEEFFFGJMRUWZ\\_]VPMLKKJIJIHKMLMMMOPPRSTUV[ZWX\\]]\\\\[]`bdeghhhghhhhijgijiijlmmnmmmoklnljhijhgwug^XZ_`TPX[\\_stjjhfedfjmmnruy{{wsdUPUY\\]\\[YYXYYTRRRQQenTTTSTanopojea[TYXTUSSSRRSXgnxg^did`cc^W[^[ZQLEFJLMLJJHGHF@pǶđSHOID9^ePPRQMFDEFECDCBNl~SFICABBFFDIPRSSKDBECA@BEHKOQNMKIHFAHTOHQVLEGHC@@DOW[bc_kdB<?>@=>zD?>hf@>ACY`I8=AAABCDFJHEFFEHG?=CJPUWTPKIEFGILSXUKDDCBC>9;FC<BB>>:CZ\\OOUNHMNQO=;<HC>ABFJA5Pk\\WXWVUTUUVUVUXXXXWXXXWWXYXYXVNHMOQTWY]]\\\\^^____``WMJKJJJIG>6699=CE<48::<=;88999IZ`bbdeedcbbbZH;>AACHYhj^UUXRIEEDEEEDEDEE@=CIKLKGEEED@@BAAEGFFEC?;:>FPQLHEHMLKJIIHJQXaf[IEGBAEEDGQUYX[_^_db[TICGJHFDBBEHGEDGFAAADFGFFGGEEHIKKKLNRSRPNLJJJJKLLLNOTXZ[XMJJGPdfmh{ºìøxhacfihhhrspjgikouwvsojga\\ZYVROOMJHDA??@A5Hztpnlknoomdd_XXZ]\\ZXWZ[ZZZVTRRRQPPQRPPPQQOKKLOSUVVUURRQQQPPPOPRTWWY[YYXWVTTSQRSWZZZ\\^_^\\ZXVWZ\\]^_^^]ZX[XBQh63753AWaa\\M?76<EJI@@BHJA<=>?>=7799<?@@>?AAABBBCDBA?>>?>:8BFB>CIDAFHT[ijfif___dcM8589=B?979<EE?FWXD;949ABEHLRLGFHLUab^OKXWRWXUTPJFCBBBEIGA>=:888868AFGFEFFFFBA>;89;=?AA@85548Nc_]ghd_REHOI=7:DHJM=2426DE<=BGQUQI@=@A?@BJQRRTWA5AMNKJHFGB<BLMKOTPCFJHHFECBCDCGOROIE@=COUOD@CB?<624:>;8777888:<==>@=624559:89:98:>?=<::<A?7:@@??@BCDBAAA@@>=?A>=?@@??AFJHA>>@@?>>=;;EICACD?96668AIC714657;<;9779=AA=<=;:98865:?@=;<=:45=>:9978>DA6120.242275002246:869<;;812<=9::4157546665568<?;8977:=>>>967:<>??95;>>;6247524777679<?BDDDEEEEFECCCCBBBBCAAA?=<;>CKOF:9::89897666302579:>ACCBBDGIGGJEC?;51028==?CA;99;;49[hP=44@GG>7:?B@<;;;;;;:;<<=<<;:88:74678::9999:;=?>946740/020253,*-5=719DE;57:BKJEE@-7QN6.@MD7743672,,--3BORTN>2-+-.232112358AKDIR3/2235:CC=8883..11.*))(@js~zD0_Y3AWOC=620/.,*)1AB41BMQQD?DEDCACFGLQNLT`cZ\\py`OC?91/136?A5+&&),135568976=?600998<>?>?CFGKNJD;889;=?>:;D:2637Tox{UEE63111.,+BCEEEDA?>>>><<?A@@@@@AAA@AABDEDCBDEEEFJJGJNMJLONJEFNRNIFEEEFHKNPS[`dimljlprtq`IEEFGIJMNOPQPQSSVXYYZYZZTKFFFFD?>???>?AAAA@BCBBBAAABCDDFFHT`dcdeed]WWZ_cfgijjklklonbRKKJHFDCCDDCDDCCCCCCEDDCCCAAA@BIPQPSX]bbZQNMKKKKLJIJKLKLOPOQRSSUWYXXX[]\\\\[[\\\\]_dgceghhhhffgefhllilmllmmmnkjjgddjvoiuq_YZ]ed\\]`cc]gvwrmjihhimnkpuy|}zeVTVVZ]]^\\ZYYUXUPPQPSfkTTSSQ^ntlgb\\WUTWVSUSSSUVVWj~yh]emja_ag`X\\c^UIAEKLLKJKHHJLCMRLOIFBCIKNQQNGEDEFEDDCQpyPLOBADFHGDGLNQSOHBCECBBBDGKMKJHHFBAITSMIPOJMNHDMLHILPU[s_?>?>>>3kb<B?HS?;B=J[PDCDCBBCEIHFKJHIKKA>DIIQUTPWaVJHILRVULGDA=;::<?>==>?@=GVJKSVTXWPPJ=?KREEEAGHE=CeaZYWWVUVVVVVUXWXXWWWWVWXXXXXVRNOPPSVXZZ[]]^`_]^__VMKKIHHJHB=;:57AC:6:<;9:?><98@P\\`ccdfedcab^RFBBCBEJV[Z[WTROJFDBBCCDEGHGB?DLMHDABFKMKG?;ANPMKIHB<888=@DLPSROGB@AGIIIS`WC>BBACCFHGQ_XS^eiplTGFGFEDDB@DFFHKOPI@@BDFFHJGEDDDHLKJKNRUSOMLKKLLMMKKMORTVTOKLKHOcemfĽȹĽ~pptwztidhsrlegkqvwusmjhf`ZYWUROMJHFC@==B;5rw|wspoqqpnkhaZ[ZZXXWVWZ\\[[YVTRPOOOPRRRRSQONMNPRSUUTTRRQQQPQPPQSVWWXXYXXWVTTSQSUWZZZ\\]]\\\\YVUWZ\\____]\\YYaXL{IIC;5DPX]^[T?68@GJD;;@DHLICAFG>9899;==;:>BAABBCDDB@@C@@@;7BUVOKJEEGCDYok_aa^`aceR;579:=A?>><<BA89HK@98<BCFMSXYYUMDBOcrsg[XVSRRSPIGCCCDDFFEA==@HPRPPTTPJFFJJJNMB878:;=?=<;;>>BS`]_kg\\PBBHE<658?AAEA96448=?><AJQOIDDEB??ACGFISXF?KMKILLHC=46EONPXUEHLLLKGCCDGHKPUSIB:4:GLFAAB@=<;:9:;;:;;;9999::8554117;75677998;BD@<;=>=<<=@?=>BDEEDA@@@A@@AB?>>>?A@=>BB@?????ADB:<LSF<ADA<9;?BEID924899;<;988;>@AEF>78989::;;966<>814=@;7887<BB@A=503<=:==424449=968:;;947AA=??82378788644566778889;===>>:78<>BD@;=@<9525;<::;;;;:;=>>?ACDDFFEEEEDDCBBBBAAA@@@?=:=CE?<;:86455676520137;AEEDA@EJLGC>742210/036:AFCAA@<:8<PXI;12=C@8239@A?>=><::<<==>=<<=?BC>::;<===<<;<;;=<734553156.5@:,)-7>21@HB64:<COTOC6+/CRD8DF;455564.*+-,-?TWTQD;:41111//0335?IL?IU3142145697666300.-,,,.)&3snM__C;FNIGE@@?6-*+0=ECEIJMOQLADSYLBHLLOVSSepkb]k}gNDD8/1526DB3+&(0324637:<@><841888;=??>CHJJKJF<865568527>6/,&(:XqxL4:5/-/1.,*DEFEEGEA@@@@>=>@@@@@AAAAAAABDECBBBBBBEGGFEEDCCCEDDFIKKKHFEEFILPRUX\\enlbbmrqopn]ICCFHHILNMNOOPPQSSRRRQRRMGFFFDCA@?>??@@@@@ACCBBAA@BCDCEFFLZcbbddedZONW]_aegjlnnnnoqfTKIGGEDDEDDDDCCBCDA>=@GPXVW^_OBKKGLOU]\\RNNMMKKMMLOMKKJIKJJOQSSUWXXXXZ\\[Z[[\\\\[\\]_[`ghiifb```adjhfgghjlgbac_[[bak}uorfSajc`cahieg`]n|wqonlkjmplntvz{dSUWUY___^\\ZYVa^PPRRQfjUUSRUlusXR\\[TSTUTTTSSUVWUVn}~{xoikmkg]YdfPFV\\SKCGKLKKJJIHJMNGDeoMQKIGFECGKNMKGFFFFFEEETszQKMAAFHHFECCCCIUSFBFHIKOUVNL}Y>CEDTRRMADKLLJEBHGA@@@A?\\Y>>@>=<:3L7B?=@>=@ABIKKGFFCABGOMNSRPLKJB?DHHNRUQYc`MGHINQRNIFA;89:;<=@EDDEIKDACFYlreWUI=G_aOUH?CFHB@Sh\\VWWVUVVVUVUVVVVWVVVVWWWXXXWVRQPQSVWXY[\\]^^]]^__VMJJIHHIHFD?959CC<69<;9;GHA:;GU]aceefecbbaXICFFEEFGDFVd^NIPPIECCCBBEHHIGBDLKD@?AGQXUK><HTSMIHGC=::9<FPZ[JFJE<9:CGFBEOLC=>?@ACIH@KaXHQ]_c`K:=FIGFDBBGGEISYVJ?>BFIJIIHEDCCGKLKKMRUTRNLKLNPOMKKMPPRPNHJLKHK]edyʾɹt|sg`_`ejkdagpy{wsnhhhc]XWUSPMKIFDA?<;?3L{~{rnkgfggfe`Z[WTTVUSTXXTSSRPMKLMOOQSUUSTSROOQRSUUSRRQQQQQQQRSUXYXXVWVVVUTUUSSWXZZ[[[[ZZXVVXZ]a_]\\\\\\ZZdWNl@mlO6Yga``YQ<8=CGJE>;>ACLQKCDG>:878;<;9:CF@??ABDC@>@DDBDC;:H[`a\\QJFA?WpjYV]a`abbW@6799;>CKJ>:EG=:@A<;>BFGHJOT_ji_L??Qbkd\\\\dcXRQLIHDEHHLHFDAAIU]bcbdbYTVW]ggcc_N?:<><9:=AGGEDGT]\\cmcK73DLC?A=;B=<AE=2459=C>:;=><;@GFA??@@>;BRYRMNIGLPRLB?81;LOOUSDJKJKIFCCCFKNLOMFB<56:<@EC@?=;<;::;<=>?><;::972./1589::87779::<@DB=:=AA@BCA@?ABBBBA?>@A@?ADDA@???@?>@ABBA?=>@CFA<COMA<@CCA@AEEEGE:27<<<<<;:;<=>AFJG=8:<<<==<:767;>:34:>=75887<DKLE824@LJA;5244557:9778889<@ABCB>626;:;<;:::8879;;::;<<=>@=537;@CEC>>=:6247<=;;;<<;<<<<;?FFDEEDFFDCCBBBBBBAAA@AA;10<GD?=<942379986421136<CCCBCGKJB;:631//241.1;FKHB@A<::=??@;/-3776526@EECAA>:=?><<=<;<?CEE?=>=>@A@?>==:765113543366/6A;,),14/2=C;04;9@QUI6*).29=>A:333663/++/.+,9OWUQB;@>852--0114<HNM?GV2066652,-12324320035533,)Gnz}ZdM2<IKBBHLMH<.'/>F80EN<8EQUNVnjTKMMJM[ccqwh]YhjSJJ@34931=E>3)*79574-/7>B:/110012448=>AFIJID?64210/0,,360)),,2JilC+01.*)+,,)FGHFEGGFCCBB@>==?@@@@AAAAAAABDCBBAA@BDFGGFGEBAADDFGDEIKHGHHJLNNNNOQX`cbempmkkliXKDDGHJNPPPPPPQQQQPOMMPRPMLLKIFEC@@?>??@@@ACCBBBBABCDDDDDGS]^`abdjePFNUTV[adglopnmnj]VPHDCDDDDEEDDCBBABFMS]glppqslS@DJMMSXZUQPONLLNMMOOLLPW^edRMRUUVWWXXZ[ZZZ[][[YVST^hhffb__^`\\Zab^]__``\\XVVbure`onmwycOavm^dddi]fe]bnrolmpnintrru~gSTWTY_\\\\]ZYXXb[RPRTKjoTUURWqypRYjbUSTTTUTSSUUUVVg}|wtwwrqpi^VYP@GPLHFHKKKKJJIGILNOK?odKOKJIIJJIKLLKJIIIFEDFHWuxPMKCDGGFCB@>?=E^dM@FPVZ^`aZZj<LUTVRLHBDIHIJEC@?BD@@>7ST><?==;=4VfC9@>>==>?ABBBBFHJJD>DOPNU\\XLFFC@CFFKR\\SQSUNGJIJLNOLHB=;;;;:=EFFEHGD>IJ>_}}h\\[I;Upd]cMA=@DA@LcbWUWVUVVVUVVVVVVVVVVVWVWWXXWWTSQRTWVXZZ[^^^]]^__TKIIIHIIGGD=64;CB:59<=AEILA8AOZ_bdfggfdcc_TEAGLHFFGKYfeWKNYVKHJKLKGFGGGHEFJGBA??FQWSG?DOSNFDCB@>>BGMNMLK?>FC;:>ACBB?CCCB??>?BE@9E\\R@ENKGGB;=GMJHGGFKLIJQTPHB@ENQQMIGECCCFJLLLLPTURPMKKNRQNKJKSSPNLIJKLMQ[`aþȮ}|yv}lWQW_cced^_ht{{uqkghg_YXWSONKJGDB?=<;56}|vkhjf]WW]a`^XTTUX\\YVWWMILLJJLKKKLNQSVVSTTRPRSTUWVTRRQQQQQQQRVYYZYXVUTTTTSUWUSWXYZ[[[[XWVUWY]_a]YX[`][cSD][~}_8VsqqqeM=ADEHJHCBADHKKHCBB>::99=BAACJJC=<>@EE@<?CEDDB;67CNY_[WG;?Qoo_W^gfdb_YJ;99:;=HQMACJHFMKCADHJMNJHOYfqup^NEGQ\\cd^_dff_RKHDCHMPMGFJR[_ba_`b]UU_jmnrtsp`F8:>>>BIOOKIJNT[ahgU?24DQQSSGCH<4=G?2469>@<<?;8758?ACFHD?<:AQWSTN@@JQTRKFA52?JPSK>IJGEEEEEEFKNJIHDFF@:89<AA?=<;;:99:<=@BC?<97531124:>;547755579<@B@<:>CDDDDCEIHA=>><;<?A@?BHHEDCDC@==@CDDCB@@BDEBADC;67=CCBCCCBCFD:4;?>>>>>>>>=>AHJA:;<=>><<>=<;:;<<88:<>946:9:BED?639BOP@676564238:997316>AACFHE;1388;?ADB====?@@?<:<>?<9:7337>BEF?:<;61244459=====>;::>GHDBBCEECCCBBBBBBAABBAA=21;CB@?>;5568;:996655118@BBCFGGECA@;4112773/3?JOME??=<;<;9>?<92+0>A;<DIGDBA?>@A?=<;:::;==;87<?>=>>??@?80/0014323336764/++,.0026940352:JK;-'*/0,/683114882,+/55038EWYSF9<A=50,.2335<FJI=GW6389<9.()*,-,26554576653/38He686;BD?<BED@;5/7EB-$4A;48;@FMUI?JTTJI^idqpWJRh}YHKJ@7363/5;94,-7::92+0;??7,00.-/+**.6=??CJE702440.01137600:EJNWd]@57672)'**)FHJHFGHGGGEC@????@A@?@AAABCCCDCBBAAACCEFGJJFCABDDEDDFGIIJJJMONLKKLMNR\\ehiklmkeaXND@BABEGGHIJKMMMNNNNPSTSQQQPMIFDB@@>>>???@BBABBBABBCDDCDGNSRVZ^chcTHGKLMORUZ_befhgcXVZWKEFFFEEEDDB@EPX^a`]ajsvsqomRDKPSUUY^YSRPNMMNKKPW]hqvuxjPPQSUVVXYZZZZZ\\^^`]VQPWca[\\]`bab]X`aYTVWUTYZR]xdZhne\\akjepfWf`emhggec`cornpssst~oZUUVTYbXYZYXVTUPSRPQKvoRUUSR]lpXdsbRSSSTUUUUVUTWYZj~|qu}kakkQEIHFDFHJKKKKKJGHMNNOKFNSJIIKLLNOMONMMMMMLEDEHJYvuOKKGGGEC@?@??=HbgVKMSY_[TW]evb_b_e[LBA@AA?FKFCBAAA=>?>VS=<=<;::9;=<=>==>=<>@BCBACEGKSlr]LQW^XJB@@?B??GRVLJIGGJMLJHMPQJD?=?=;8>IHGIPQIFW^H]vugbYD@ajUSZQD;:AHLNTd^WVVUUVWVUUUUUUUUUUUVVVUWWWWWUSRSUVXZZ[^^^^^^`]SJHHHGGFED@:67=AA=:=?AIJFI?:JX\\aceeghgedb[OEAHPMH?EXb]TPR[^UMLMPUVQLGDBDGIGEFD@?ELLF>?KRMEBC@=>>@CISRJB?>AEA<<?BBBBDDBDHIB;=@C@;FUNCAA?=<>AFGHIKJJINQMMOMIHGEJUUSOJGECBBEILMMKOTUSQPMLNQPNLJJSVPNMLJLPT[`[s|vu`W_dedda^_juxusmhhhaZWWUPMKIHDB@?;=93bw|tibeg`SLQ^`^[TNQY]a_]]XKKQLFHPUPLMPSTUUSTQPRSTUWWVTRQQQQQQQQTX[ZZYXVUTTUTSVWUTWXZZZZZXWXXTVY^ab\\UUZdc]cR8clxpFPrx{}sPCHIIJJIHGFHJNJDEED@::><?IJJIIJE<;=BGGCBCFFHHFBCGC@DS`Z><MUnj`^W[ehaZWPB89;>CLMEEMIBGRWRNOPPQOIFMYcoywn^RNQUdmbYcsxtbQHCADJMOIJW^]]_b`][WSU^dYOXcln]>07@FMQRNHCITVRYcaQC?=8ASZWSKIG81=F>37:=:8;@B?>=;66<EORJA?BFNSRQJ;9AEPWTNH@63;KM?:JOFCDEGGGGGHIIEBFHC@?>==>>=;;;;:99;=?CFC?;52138977;:744345458=BD@;=ADCDEDCGOL@:9;=;;>@BABGIHHHHGGDA@ABBBDDDEEEHE;2003=EECDCAADC=8:CHFC???@@???AGJB;;===>==?AB?9:=;<=<<>=99=><><7312:DHE;69:972/158<?;1/5<BFEDHKA2069=@CGD>>?>@ABC@79BF:459945>BDFA7985122/.5=@@@BB?:68@EFC?@CCDCCCBBBBBAABBCCA@<:<=>>>=;679999:::<<92,1;BDFJKIHIKH>889:983/5BKNNF>>>=?ABAAGPQ>,0@FCCGJHC@@??>>=<987765421/06;:9;=<<<;5..3676311113;6+',.0234642022203:;2--.///0112347;92/027<=<:>JOPI85;94/.243544;FE=GT4034880,.-,,+.79:44@D6377654NqR%-899;>;7323359@@6-049:750/66.-BPSSJFZdctiC3?RsoFAKHE<100.35310013882-5AA=<<><0-0*&'(-7;::?=1+4:92.3536@FFJOS[bdaSABFEC=2+**+EGJIGHHHJIFDAABAABA@AAAACEEEEDCCCBBCDDEFFHHFEDEEEEGIIIJJJKLMNMLLLLMMNS^fjlppmfYNG@>@AAA@?AEILOQRSSTUVUVUTUUUSMHFDB@>>>>=>@BBBAABABBBBBCDGIHFJPU\\ZQLHEEFFGFGKLMPW[\\]VOV]SJIIJGEDCCCDIQSOJKOXhiacjnrqYDLVUUY[ZWVVROONKTadciswstzfMNUVTVYYXXXXZ\\]_aa^[WUVSTWZac```ba^ZWWWVTUWYɸYSTZckmebgl\\Sc\\[gijhc]\\^gqrrtutrjbk^UWVUUZhWWYYXVRPPPRSRO|jPUVSQQap\\^k^UTSTTTUUUVVUW[X]yrr|{sYrwQFIHDDFIJKLLLKJGHMONOKNHHKHHJLNPQQSQOOPRPLFEFIKYwsOKHHGFEB??@AA?EX_a^WPRVTNQXYckZ^UKWOC>>?><=HSTKB@@@?@@=TS=:<::999;<>?><<<<=>@CFKD>@DQnGagZOF@?@B@<9=A?<=DPGHNRNGJQXRG@=?@@96HMDHY[LP`dOSWPU]K<SkV@<AFA99ENOMI]d[UVVVUWVUUVVUTTTUUUUUUUUVVWWUTSTTVYYZ\\]]^^^^`]SJGGFFFED@=;:<=??ACBABGGCA9BT\\_bdfghhfec_UIDAEPRH=FUNITYZ]ZXTKKRVYXRH?>DJLKKMICDEC>:9ANQG?AC@=@CB?DNWWQIIQOH@;9EKHCFHDDNPD9;?CEGIONLF<=B@?HOJDIMMMMOQQQROHGGEKUSOKIHECBBEILMNMNTVUUTQMNONLKKLSVTQQOOQQQZaVȽ}e^aa_]_^aksttqjggc\\WWUQNLIHFCB?=;<5Vy}yqfaa_YPP[b\\USRQPRUYZ_bXSXXMGFO_]QUXYVSSTSPQSTSUVWVTRQOPQQQSTXYYXXWWUUUVWWUVWWVXXZ[[ZWTW]^XVY\\ac\\SRWeb`eS>>`p|aZlux}v\\IKMMLJJJKJGFKLFEEDB;;?>@KLJIGFB=8<EIGHKMMPTWYXX]WLJ[_H6I_[jZX_LHS[[XWVK===?BHFDIKB9;DMPONMMNLHGTbagrwt_TTTR]lmfl}v`KCA@CHLJP\\^ZZ^b`XSRRRRRD?HMONA38FMNPNF>>BKSSQTWL=:A@:CSUPSRI?46AE>9=@B95;@?<;;:517BJOLECEGNSRME=87<KTPNQOA11<=9AOTLB>AEGIHA=CE@?A?;<==?@@@?<;<=<:9;=?BDDA<6356898559;:6127;?@@DFB>ADBBDFFDFKI?64;C?=?@A@CGHHIHHHIJGEDDCCDEEFFHKC50008DJHEDCADE?74?NTOG@==?@AABACKMD<=???@??DE@8:>;9;<<?ABBB@==<3-/06??:9::;;851148;<957;;@HG?BKG629<=@DDCA?@=;?CFE<=@D<559:56<ACEC>:71.1215>BAABED=516ACABEDCCBBCBBBBAAABBBCCC@@@><<;;:867899;=>===92,.5<@HNQQPKHDA>=:6792.7DJLKD?BA=@FGBER[ZOB>BDDFHIGA@A?<:;;:7755320.-,.1356;>96675336;<984011154/-13578;<621222222321110.0321248:<:52/07=?;79>AHH3,122003435404?F?HQ9>E>86765995103<>4?QH.+48:<7-51(-1368<<1))+*-:>701861135429<7CcbPOMDO`ipT1+17SZ@DGBB?740.14677767961/4;=@FHIF:/-,))'(08<96778:<;6168/+5EPUVSWabZRKHFEFE>6321HHGGFHJLKIHFDBBBBBA@BBABEFFFEEDDDDDDDFEEFEDFGFFGHJJKKJJJKLMMMLLMMMMMLMWfmpqlfbXIB?@A?BEGLTYZ\\^___^]\\[YXXYXWZZSNIFDA@?>>>>@AABCCCBBBBABCDEEBBFGKNKDCFECCCDDDDDEFIMNNLHJNMKKLNLFCCBCDCBB@?@HPQSWcmnrwrXISWWZZZZXYUSRNOTVUV[fjfjvxfSJPVTVWTTUUW[\\^accdfc^ZXWX[]^^_a`_^\\\\ZYVSS~wMSOM[krplfc_][XRV[aid__`bglst{ybQYZYWX\\\\`cOS[YYXSPPPNW\\Z~gMSWSVSXqjQT][WXXWWWVWWWZ\\Z]hvx~y}v}]WYRIFEDCGKLMMMLJJGINMMNLMOMKIIIIJMW^WZ`\\UROKIIIJKZzqONHHKGD@>?@AAB?HXdaVMMRSRVS@>CAAAACB@?@??>>HUYNA>AFEC@=UR=;;::989=A@??>>====?@ENK??ErۡWEcoVD???AB?;9888:1FlLBJSPEFP[XK@<>>DFBITH?NUPbk\\OI=6?GBD^fE47>E?89BIIHERc^TUWWVVWUVWUUTTTSTUUUUVVWWWWVUUUUUXYY[]^^^^^`]TJGFFFECB@=<<===>ADA@@AB@8;LZ^addfghifcaZOEA@CLQOHKMCMddYV\\cXHOXVWYSF==DLQUVSJFGF=:8:BLNE=@CBACFEFKRZcaW[_^YF::JXWIGJFFONB:<@BEGJLMNLC@CBDNVUMLKKMOQSWWVQLLKGHQOKEECA@?AFJLLNOPRTUVVROMMLKJKPVVVUSQTUPMY_n͵Ǽvkhnkc]``^XY[`jprslfdb]YWXSPNKHFDB@?;;3Dv|}{tlfc]ZWNM[\\OHJSUNOQQIP[[Y\\[NDBJ]_[[]^XSSTSQRTUTSUVUSRQONPPQVYZYWVUTTTUWXYYXWWYY[\\[[[[VSU]`\\Z^^aaYUU[b_afTM<DNeyvlnrtsk\\LLRRPMJKLLGCEJGCDEC<=@>BJHFGFB?;6:EIGINRSUWX]``^VV_aK9<HW^mUL[OGLRUTWYO>88:<>AGFB=437=DHIHHNNIK_od\\kts[MOQQQby}y{TDE=<BGKQY\\\\[ZWROPOONKG@DJB:715FQLE@=97>FKMJKOH>;????DLNRXRB63<DEBAAB>;89;:99:>A>=@FKJFCAELPOH?:87:EICGUXI5266:FPROD;6>GMG96<=<??;88778=CB>;=?@=:9;=?@AA@<6589634447:96315@LLDADDCDC@@BHIGGFC=40:DA>AA??CFHGGFFFFFHGGFFFEDDCEGE<3367>IMJGDABED;35AQWNC>=<<>ACDEGMQJ?<@CED@@EE<6:><78<<?DFEC?=>=60//2987<?=;;;;:8799547;<:<C?7;GH:6<<<?BA?A@?;69?CDBA@@<78;;:9=>BDDB=8/+05;AEB>>>?<5/16>?:?LJCCCBABAAAAABBBCCCCB@@@><;9865569;=?A?;951.133:GPTWTH@>>?=51670/9EJKIB?BCA?FF@FTWUSSPKFDFGGDBAA?;8:;96544320/,,,.267::767888658<=;61//023554348;><741/00113532210/3522568:<;73-19:6339<:AG3)//00265245468<9L[MafXE868;DG>761360;J9'%+364123,02/6>@<;60-,+,154333/++.566;<>Oc]PPRGDT`Q2*//2AB6@BAA@;764//6:?BCA:3./016@GGHF?2--+*)(+2;=;9:;;:753351+-5=GS]adZJLY\\K9>JF=99:JHFFHJNOLJIGEDBBBAAABCCCFFFEEFFFEEEDFFFEEEFFGHIJLLKJKJHIKKLNNNNNNMMMKNV_decZTSOGDEFJPTVXY[]]^aab`^\\\\\\\\[ZZXW\\_ZSNIFDBA@@?@@@ACDCCCBBABCCCCCCCDDDDCAACDBBCCDDDEEEEFFGFEEEGKLNPOKGECCCBBDEFEECGZjklnopqr\\JSYZ[[ZY[VSTPPNLKMLRcmmosymLHUPNOQRPQTY\\_abcdffd_XVWWY\\]^]]a`_^[YZWX}ŚXIQOJQ^jwsYWfcXUPQV`pd`acfd`ksmtwhX[Z[[Z^[aVEO]ZY[TNNZlhb[~cNSTSWXScpb\\gd[]_]\\[[ZY[a`^fuzrvy{zyxv}rtzbUNKFDDEEIMOONLKLJFJPNMNMLLMMJKKIGJXbS^siYPKJKKLMM[ylOMEEHFB>?@ACCDAFXaZNIOVURVRA<<=<=????@@?@ABIOQKDACHHGFHZQ?=;::::;=???>>?>==<??@ILHBEv>FPYN?<=?@A=;99:;>2cJ;EOPGDKTSLF@=6<LXVVN68KVmt\\OL>9;:?NTWG<HWVA8;HROGBCYaVSVWVUVUUTTTTTSSTTUUUVVWWWXWVUUUUWXYZ\\^^^^^`]SIFFEDCA@@>=======>=>>>>98EU[abddfgghfc]RHBBAAJQRNKDBRdbTVfeOJX\\WVYQD==@FOWVOIGHGA=?ADGHGABFFFGGHOUW^hha_`\\SF;>JR\\WPMHFJH?;?FEB@BIJIJHEB@FPVYUJGHKNS[][WSSVUNIHIFCDFEEECFKNOOOPQSUVVROMKJLKKT[XWUSQTUPQ[ZĪǼoaZVRPTZ_bf^XY^glnlfa`][ZWVSOKIHEDA?<;6:ys|wotunihg^][PLXYMGKTWVUURHCISYZYQD?I[]]]]]USSSRQRTUUTTTSRPNMMMOSWYXWUUSSSTUWYYYZYY[]^^ZYXVVVW\\]\\`dcb^YWZ^_ZbgTPMI<Ys~zwwydRJJKPTSQMKLLGEFIE@CHC<>?@DGEEFD?>;7:EIGGJOU[`gkhd_Z]cZCEI?L^jVDQLIOUWTQMB964569=?=?=9559?DFHLQPMP_mdWkwt_OKJDHf}|||aBAB??EKNRW\\]UIGPUNNNOD@GF=<@>=CD<768;>BDFHFEFC>@A@?@ACKTSH>78>CDDFDA>:888888;?DE@=ADDC@>AGKIA;88:;>>:<JSMB?:7<AEGHHD78CI?57<;=@>;=@@:46;<989>>;:9<>@BA>>;658:60/224543456>IMD>?CGE?;<AGHGGD?:649>>>AAAACDEEFEEEDCEFCBCCCDDCB@=856:=@CJKHCABFD?85<FMMA:?CBABEHNSRNIC?ADGGDCA=748>=99>>@DB@><==>=5.29;43@F?:<>>@@=;:89:988:;5/5AC:7::<=<=<::951159=@BB?<:<>=>?@=>AA=;7426=BEC:7888645:<;957=ADCACDBAAAAAABBBCCBBAA@?>;866446;=?>?>:62..2438DLNPNECHFA<83562/7DIKE>858>>FD>?FNQQPQOKIGGCA@BC@<78<9764321//-,,08<<8569;<:96569962.-..13442//167631,*---.0343200376238748=<6567631/08@;<C5-0//02333466860-JnirgTB727FKKF<81*)(.9631,-0,)9E9335DMJ>89:8653215861//0135567AG@:?JKEACH;,14665529>EKH?:;<968=FFD;1--.//6=<CIJ?2.-+./,+058<85467445468:;73>V`a]I<DZhaJ>??==:;IHGGIKNPPNLHGFCBBAAABCCDFFFEEFFGGGHHGFFEFGHHHJMMKJJJJJJJJKMNNPONMMMLJLPPRQKHJLMJNTVTSQRSUW]^\\[[\\\\\\\\\\\\]\\ZYZZ\\``\\TNLIEBCB??@@ABBBCCBAABBAAABBBBBCBBAAABBBBBCCCDDDDBDHIJIHIKMPQPOLHDDCDEFFEEDDNWW\\iurmihqfLNWVYYYZVSTQQPNNONQXaistsnhXMGCGLNNOPUWY[\\\\]^][YVTVWX[[[\\[^^^][]cZ_b{ֿzJNSRMPMSc_LRd`VTUUVfug`dgieZ^qXPcm^[b_]YUR\\ZFN[YY\\TRZqp_`RTSPOWTOexpdfbbec`^]\\]`cadhqvxvwwvsrquz^[_]\\XS?DEDGIKOQPNMKMKEKSPLMNMLMMLLLKIJNMI]qjVQNLPOOPP`|gMJCCDDCAABCCCBDQ^]QGENUVQPSVPD@@@BBBA@A@ADHOUXOHFFKLLNP\\RC=989:<<=>>?>>???>=>>?ABFG?ZAHEDC<;=>?A?<:889:1^9BHMIEGHHPSHDD:9N]\\T@?LTag[RMF:9>DHGMWV`cS=8;O_XE:8CYYSTVUUTSTSTTTSSSTTTTUUVVVWXWWVUUUUWYZ\\]^^^^`]RHFFDBA@??>>>>=======>=<8?NX]cdddfffgfc[NEBBAAHOPJB>@HRSMXdYGKTQOSTMB><;=GNLIJIIHCADIHIIFDCFGLNHIORLSbeedeXHKLJEEZf^SJEED?=CLLA=AGHHGEFEBGILNOFEEGLUaa_XUVZWPHEFEIMTVX[THKPQPOPPPSVUPMLKKLKJQYVTSQOPTQRTkϽƿȹļ|}xqswiYVYY]eokb\\^cffca__][YWSQMJHGDB@=984m{u}tonnnooh`_]VT[ZSPPSVVVUSUNEKSUUURJNY[\\\\ZWQQQQQQRTUUTRRQPNKKMMPTWYVTTTSSSTVXXYYZ[[]_^ZVSRSW\\_^ZY`fc_ZXX\\b_X`eSLNE<]q`@BJJKPQPPIIJHGKIC>CHA>A@ABBAEGB==;9<CGGFGM\\ownh[PTZUFJG;O`dVDA@IPWb_M84=LG@:7979@BA>>?BFFJQRQUX\\geYlvqdb_SH\\~ywuw^FCC@@DIJJKSZQFKRTQQPMAAB>EVXG::<<74<GHC>BIMOSRH?@@AA@@FKHB@><?ABDHGB=:998779;:79<;==??>;;CIFB>;;;:<<99>HLMH>9:>=>AHG<7=>859<>==;:@IJFA;53223655888=BFC<:96489632343344558<=A>;<?DCA87?BCCBB?=<==<<>@AAABBBCDDEFFEEGHD@>ADDCA=::;<>@ACGJIFCADD>957;HMI>BNQLIGOVVROLIFDCDDA@=;99;<;:;>>?CDB@?><=>701=A52@I?8:>@CEC=>AA>=;:::616;:88<;<<<==:66653679=??>=<>>=>@@:9=;54568<??@:236569=CHD8321/19>>?BAAA@@@@@AAAAAAAA@@@>;87679>ACBB?;860/2555@JMOSROOI=853477//:EHA;9.-7=EE=58EQRLMNPQKC>;=BDD?77;<:75443221125<@>:67:;9876876541.0146566410--.20-**+++-/134820284//5536:96677645339=99;400//010/0034660+IooeH4/008LOKI=510-)*/7BA6,*/:KM=22<JUSC428===:515852.,./12347B@.#,AFB??<=<==><88<>AJOQJC@@ECACHD=5+&*.06<?9?MO@20./22./2468653453469<?CA64I_^SOCIQWZ]VIFA7464IIIIKLLOSQKHIHDBBBABCCCDGGFFFFGHHIJIGFFEEGHIKNOLIHIJIJLLKLNMMONNMLMLJKMNMMJIJJLY\\OFEGOUVVVUSVZ\\__^^^^_^\\[\\\\]_a_ZTQMIFECA??@AABBCCBBBBBAAAA@@ABAAABA@ABBAACCCCDDDBCGKLKJKLMNQRQOMJEBBBDEDCDFHC>Xppncadbj_ELRXZYZVTURSSQQPPRNO`rtjhlgP?BFHKNNMLQRSSTUUSTTTTUVWXYZ[[\\]]]]]`]WYft֏[UY[XVUMRYUU^b`\\WWUTf|ibfigaXX_TJQl_V`\\WWVQ\\gLVXWZYQUmk^TTTPQ_ia[vw\\Xcfefca_^`deca_ZanxwuspmknkWUQQUZWLQFCIKMQRONMKKKFMXSMLMMMMMMMLLLMJ@CoeS[USSRRSc^MH@ABBCCDDEEFGFP^ZLEDFJMPPOOLD@AAEFDB@@BDHMQURJIMNONNNP[UJLND::=>=>>=>>>@AB@>==>@EL>kޠGIJCD>9;==>BB<:76794֍?@ADGEEDENUEEUK69P\\YP[b^ZWOILH<?JKFBO_acWE66=KY`E356H]XTTUTSSRRSSTSTTTSSSTTVVVWYXXVUUUTWZZ\\]^^__`]QHFFC@????????>>=====>=;=KV[adddefffffe[LCBCABGNMB::<ACAELNKHGC?BJLF?;<=@IPRPKJIHEBHLKKIEB??GQRHGOOACV`imnfXX^`NEYkeYKD@???ELLC@BEGGEBEGGGD@ACBCDDESbfb[UUWXRHBDHSZ_fnqdNLRSQOOOOQWUOMLLLLLJOWVRRPLNPSSAϽǾ»vpv}x_V_fdbckpjb`acc``]]\\[WTPMKHFDB@=;95]yp}vrqnnpnfdaaYX`]TORVVTUUTVVNMOQRRWQQWZ\\\\ZRPQQOOQRTUUSRRPOMJKMNRTWWTTTSSSSTVWUX[\\]\\\\\\ZUQOPUY^__[Z]a]ZVXY]a`X`dTA=49Ydk~tEDJIMRPOMGFIGHIGA>BFA>DGC?<?DGEA?<:<@DHKLVl~{qg]F9LbQ:E?6Ra_VM@=JSWgmS=@Ua_YI845:AFHKIBDHEMSSZb]Ydd\\kpojtusytuvurQJKD?ACIHCBJVPMOSTUWULDBAL`gV=6:>>62DVUEDNW_fj_J@@BDDCCDDCCB@>?A@CEGC>:88867:;8448;9:;<;85>IJE@?>;9:997;AIMIA:8;<==?><:6368;=?=9:;=FLNPLD:41//124788;CB735547999::63235835:><;9::=BD;7<>>>?ABBCCA@ACCB@@BB@AABDGHHFIQNC>BEEC@@><??>?BEEILKD?CC=756=GJMIJOTSJJSWVSOPROFBA><>>?BA=::;=???BEEDA><<<810<C:4?H>47=@DHG>>BAABA>===;==:9<>=<<<=>>=987::9999:=@?===<==98:74343366892.6989<@FLE50134.1CJ>9@ABA@?@@AAAAAAAA@@@@=9779<@EHIHA<9:941322=JOS[]WSM:1254554128<;<?9688=B<59COTRPOQPG<88<AEHB86:==9556556469<>?=<::99665578762007;=??=<:872,+//-.-+,,-.036960263,+3435:877776788:@:886420./11/020/220,,L\\OC',1(,>PPGA7-299521079A@:>GNC748?IOSJ4*19:<;920244.*,./022301015>C>=?=?DDDCA><>DJORVSI@CGEFFGD>:3/.-/9A>76:<721017:86135555544238>@BEA4=T[[TKKX_bba[SXaL/),IJIJLMNPSTMHJHECBBBACCCEGGGFFGGHIHHHHGFFEFILMMKHHJKIHIJKKLNMMOOOMMMLJKMNNNNMKIKOKB?DOWTKGLT[^_`aabccbccbbaaaaa`_\\WQMIFCA?>@A@ABCBBBBBAAAAA@@AAABBBB@@ABAACBBCCCDDDEHJIIIKMNQRRRRQJBAAAABCCCBADO_`bgcROmwaJQVWYYVTTRSSQRQQSPOXgicaYokF<CDHLNKMNOPPPQQQQQRTUUVVVWYYYZ[[[\\]\\YYYwZVhomfb_`jicfgd`\\ZXVTbichjlZSYSU^]m_VSUUUYU`pS_[Z[WPM\\usg[TTUbs_hehggca^]bfea]XbihtusoligeYXTVRRYXTMFEJKNSUOLLLKJFN\\WPLNNNMMMLLLMNMHCϪiSVTSSSgYGF@@AACCCDFGGLQ]^TLFDBCFOWQEDEBAADFEBACFGJKIFDGMOQPONPQXWWhl]B;>===>=???@BDD@===>DL<\\΃;JICE<8;>>@BB>;75684E;BDFFEEFINH@JWO<<GPJYlj`P@AJHCQUMIFNVUUI<6:?CX^C246;R^WTTTSSRQSSSSSSSSRSSTUUVVXWXWUTTTVYZ[\\]]^^_]PGEFC?>>?>>>>>>======><9FUZ\\bccddeffffcVHCCCBBGLI?<<<?ABEFDGGB<;=AD@::;>FOW_YFFJJGKLMLLJEA>BIPNMLNOFAFYhkmolfbdVIWkiYHB?=@ADIIFDCDFFFHLQQIA:<ABCBBAL`fc[NLRVSHEEIPW_mxvfTSTSSROKMQVTNKKLMMLJMSPOMMLMWZCcǽƿ~{vn_Z\\bggcbenngbacb_^[YYXURNKHEDBA@<<5Gk|yurpnmjhebaSP^^NGQVUUVURLLQOPPPOIIPVY\\\\XTOPOOOQRSTTSQPNMMKMOQTUUUTTTSRRSTSRQTXZ[XWURRQQV[\\\\\\[[[Z\\XVWY[]`^YacY<:;BLO\\ih{BAIJPSVPKIHHFC?@?=@DB?BFA=<?BDFGFD=;=@FMS^p{ztn[G66ARC5LF=Wc^_Z@;IQVbdPBOXRQTP936:AFINH?=<AOU]icQMWb^joneew^eongTFKLFCBCGFACNWTRSTSU[WNKKVhjT?778:7/9SdaUSZ_fldN??ACEEDDEEEDB>===?AB@@<;:;757;;:6488989:9758BHFCA@=<<;87:@FJID<8:<<<:9:;4.4:=>>;:>?:<GMQRPH>940366::88=?7467669;=>;52246::7:=;9999:?A@==>?@ADECBA>=@BAABCBAA@@@BEIIGGNNFBCEFD>>A>==;;ACDEHIEACD;656=DEDMNQPJHHLTTSPRUSJC@=;>ABDD>;:;>>>>BFFFB@?;:921;C?9>D=47=?FJD:8:@CEEB?@@B@?==@>=<;;=?A@=::==;;;989?A>>><<=;8986541-,054.4?@=>>?CIB1/3664B[`O>;?A@?>@@@AAAAA@AAABA><98;>AEGIGA::9:7410-9IKJPQORUC255667:83027;=:87548668;@LUVNE?;867:BFHC869=<975555668::9::;;86665335897314:?DEHFB>==;512110,*-0--/14640043,+24346666767899;D9765430/134336311.,*,JJ7@AK;$1Q\\P>3/+267;84-&1GWND83994@CIPOG749>@ADC;6543.)*-/010,))0=9085;>>AEHECA@<=GNQTWUIDFGGFGED??BEB6./31,'&*34204;CF<756666431.0;CBBEGCHKOVTLJQXiyuk^R[h[C3GGHIINSVZ`[LIIGEDCBBDEEFGGHGGGFGHHHHHHFEEEHJLIHHIJJIIJJJJLNNMONNMMMLLMOQRSVVQLJFDDDHNMF@AHOSX^addefffffffeedbbbca]XSOIDB@?@A??@BBBBBBA@AA@@@AABBAAB@ABBA@BBAABCEEEEGGGIJKMPQQSTTTOHCAA@@AAAACEFKUXYUVhnprbTSRVWUSQQPORUQPSTUTX`]YcqteM?@EJLJKNPQPPOOQQQRSSTTSSTVXXXXYZ[\\\\c\\eUJetqlhc]bqoiiikic]YUNSyi`kovXNVU\\kkf[VSSUVUUixYa]^\\ZTKFUoo_cWOUh|qpqljc\\[fgd_\\Q\\lknrniec`\\UaYUUSWYRHFGKLMWXPKLLKJHQ]\\XUWURPMLLMLLMMMH\\ٗaVUTRTjWCEBBCBBBCFIIGLXmZFGEEDEEJZ^PDEFECBABBBCEGGEB>>EOPPPOMQMMT\\innR<=>=<===???ADHC>>==?H<ZV:FEDD<7:>>>?AA=75582}֮J7@CEGDEHGLVJ;IVJ:>FBGWXOD;AGEQa\\RXVNLMOE7;ILHSP>448;K^^TPRRRQPQRRQQRSRRRSSUUUVWWWWUTTSUXZZ\\]]^^]XPFDD@>??>>>>>>======>>9>PZ\\_ccccdeeedd\\MEBCCBADGE@?AAAHTVRMFBA@?@@@=;<:<EMO[_PONKITTNMLJHBCMLHLWXRPZWKN[bktwwm\\QGQfiTBAB>@BCEEFFEFEDJQW]`I=9BLGAA@?@Tc^NCBFNQKIHHIOarzo[TYVSVXPIKOUPLKLMNMLLNNMLLMRSVQEſĿ|wpWO\\gd]\\adcglibaba^][WUSRQMIFEC@@?<8<}r~~xsqnmjhd\\SDAPZOFOOLRVSOB<HQRQRK><GUX[[[[QOONOQRSSSROMKJKMORTTUSRSSRQPPRSRRQQRSURPONQUWZ]^_`^\\Z\\ZXW]]]^_ZZdc]A>AA>HPCRpm78HMPU_WJJJIG;7:==CFDA?>==>>?@CHMMB;>=<IY_agxzgN94766@U\\XYdhgmaC;DMSYOB@DA87BKB<;>DHIKG;76;JYfcO?AKY^lkVGGj{AFVTLFFIMOKCBCDDIV[[YXUTSOFKUaicP=8:9653<N[deb^VOOOG:8>CDEEDDEFFFEA>;9=??<96>FA759<:<=898789:99957ACA@@@DCB85<ACDGFA;<<>?><986359>A<:?A@>:=DGHJHEC@837;:;=<;:9998558;=9567667=GC><:::::;=>??@AEIJJJFC?:8887>IME@BBA@BEIJGEFFDBCEEEA>@?<<;;>@AB?@FGFF>644;@;:ITRF=?CCKSTQQTSOGDA?ABCCB?>>>>>?@ADFFDCA><945<@>==@>:;=?EE:226<BEFEDB@CABABB=:89;>ABBB@=><<>><:8>@>?@>>=<:;:86642.2622=DB?@C?AI?-,32.5J]ebT>:<>=>??@@@@@AAAABCA@><;=>=?BB@=9768<>51.6@>>>?<>IF?84688763138<<975431///-/:FKC6365449BCFA;79=;76566778864579::98885445:;8547:>CCEC@===>;54441-+/3.-.//,./.12/0442//1344556778987653311488;;<8841/02?;8Sa\\A4MkkO3---569<:8/'+;HA7,'7@8AEJIB;48?BLXYWLFB73,)+.21-3PabR@@<556=>ACHFA=A<9FLOSWXZYOGFFFFGEFJKKG>2,-/1246:604AFECA:::952/0,.;CAAA@@7;XZRPJMS`uxqhQ;JclcDCEJQ]cfjqrbNFFFFDBCEGHHHHIHHGFGHGGGGGGGGGGHHHHIJJJJJJKKLMONMPPONNMMOPRUVXZ[ZZSJGHGEDCBABEMW_bdggffefffffgfdcdddda\\XVOGDB??@@?@ABBBBBBAAAA@@BBAAAABABCBA@AA@@@BCDDEEGKMLNOQRQRTTTSRKE@>?@@?ABCEFFGJUgpkddno^NMSTSPQNJSWRPSUVTTUU]jkeko^H@HKHFLVWVSOPOOOQRTWVVVVVWUTTWYZY[fhnrijnmd]^[SYjme_emlc]XQGFqk`ow{VQYY`cXWXXVVWXRQm[`^`^_WQGGYj`dTKZ}}xvsprjXOYjjbbXLXp~wh]^_]\\bs^TUTUWPGFJLKNTVOJJKLLJOY[Z^`]YTOMLLLKLLLLF?`ΈTUVRUnV@CHFDBBBELMKIHHPJCCDFHKIGR_YIBEELTUOEBBBBB@@>;DSVQOMJJDCPXfik`F===;<<<=>>@CFD?>><<=;Vd;:?ADD<7;>@>>;<<87696Ff5=BCFEDFJR]O99EGCBDED@>=HW[OLZecX_eMIWUB4>W_XPF;55:@IXbWOPPPPPQQPOOQRRRRSSTTTUVVWWUTSSTWZY\\]]]]]WPECB>=??>>>>>=======>88JY[]`bbccddedccXICBCCBAAAA@?BFIRadXH@@AA@@@?>>;8CSQHRdg^RJMTVQNLJKLKKHJS]`UQZ[SMMQdu||ZC>D[dRBCD@?@AABDFHGCBIS\\aYG>@JRQNGA==EMIB@ABJPNLKJITgv|wcVYWRRTPKKLNKJJLOOMLNNMLKLNQUQ?wȾƱþyv~kXT\\fcVT_d]X_da``_^^ZVRPONKGDCC@<:;8elzutqolid^PJORYZVUNBGRRLB:AQURSSI?FSVXX[^SNNNOQQRQRPMKIIJNQSUTSRQQQQRSRTVVVUSONPONNOQWZZ\\]`df`Z[ZX[`_^^\\Y[gcaI:7<CJC6TpPZI7FQRXbZPMJF?858:<CIEB>:=><;=BGKNLD@C@:Ia_OXz}^B74:LS\\twmlllklbH;=EKKGC@;8569@DEFFGHHHHC>89BSUE759@IQ_R64>\\g?<@AEIJGPSOEB?AFJRYZXXWUM>6F_fYH>>@AAAAEQZ[aeb]Q?5458:<@BEEEEDFGHJG@;9:<=??CJKB75;<9?A<:856799<=<:>A@ABDGMNEBIKGDEDB?==@BB<7569:;@B=<?<<@?:;?@>?CFHF;3799::867876569;;768;;98:EJB;9:;;;;=?ACEDFKPOLJIE>8677>MRHCDDCBAFKKGFGEA@DFCDJJECA>=>>==>>=GRPH@:418>:8CPK=7<?>ERURQTTQKGDBDEDCB@ABB>=@BACGGFFD@>:56:<;<@ED@<;;A?4./8=BFIKJEA@<9<ABA736:?CDEGIE@=>BB@>;:=?ABBA?=<==<<<;;6863:DB?=?C:7A<.,31,09EQ\\`P=;<=>???@@@@AABBBCBBB@?A?:89867899<EG?:58;7666407962043101137<=>@@;73331-+,.3650-010016>?>?BA>:66679:977766889;???==?A@=;:8658<=;:98777::611242./1.,,,*+//,-12550-*)*01233566647755333499;>=<9;8;AB?<8;HMJIT]`bL.-06;;:966/*))+,**.:D>?BLD435478BZicIDK?2+)+/531VVDekcP>9;AKK>:8/3FKHQXYbhZMDCBDFJONJJONFA<8<ABFF:02621;B?>?=5013007><:9350Dh`RRMU[aly}b@17MfIJO]jnqsux|ydMGFFEDDDGJJJJJIHGGHHHHIIIIHIHHHIIIJJJJIJKLNOPONOPQOOOOPQTVXYZYYVPIDCDEDBBCDFJOVY\\`deddefffghhfdehgdcb`]ZWQIDBBB@@@AAABBAAA@AA@@ABAA@BCCEEBBBB@@@@AABBCGLQQQRQRRMLMPSTVTME?>???@@ACDDDHOTUW[elmhb]SQTRQMHOSPPRRTTTVWYZXYfolg\\LGIFL_ijbVQQPPRTVX[_^[ZXWUVZ\\\\ZY^ed`hpppk_WXZV[big[_jb[WTPKK{mbr}}c_[[`VISYXVWXZTPi^b`bbcUOHDH]dg[Wbqnx~~qwm`OIJWirr]FMjv^]_^_paRTSRQMFFJLKLMMKJIIJJKLQUPX]^`WQNMMMMLLLLLHGHYwSVVUZqYABJGDDCACMOIIGDBEFFGHKLJHHPZQA<@IW_TD@A?>==>>:DW[RLHB@>DRO[d^ZJ==<:<<====>?@B@@A?<9>HC929?@A<8:<>BB:778989>/;koF@ABDDDCEIID@99=AEKA;<AI]gXS[[af_ZSGOaYF:@UbYH?8559AIWd^RPQQPPPOOOOPQPPRSSTTTUVVWVUTTTRSVY[]]]]]VNEB?<=??>=======>>==<8CU[]_accccccdcc`THDDB@><<=???DHIP`fT>:@CA@@?>>=76G[YOM\\dWLNSVXWQIFHFBFNW]bb^UOLMNHETq{^D;<Q_SDEFB?>??>@DFEA=?M^bRFCCCAESH>@A?>>@BCEHNQNKKR]iv~fXWRLKLMLKIIJJLPPMLNOMLKKLMQHUȼ˹î}~pt}cY_ggb`c[NMS\\`a``a`\\WRPMMIECBA=987Qjy{rieeehjkhcdYX`]Y]_\\N?@MQMD>DPRKHQYOHPSTTTUQKLOOQQQPNLKKJKLNQSSRSRRRSUVWXYZ[YXUQMMNNOPTXZZ[Z\\`c_ZXXX]``a`]Y]gabP@8?@@8?_lJ;ItL4GTY]]VRI@:886689;?A?76=?97;ELLKIIIIDBSaWNgO864;Zrw{zjdaadhlUABJKFKQRONOMJ=9AGGDBBADJD==>HF5378:=?F=36>LrYH@@CIKLEFHHEC>>BDJNNPRSSL:7I[TE@BDDHKLPPOPW`gb]WB14<;;;<BFFEEDFHIKH@<:89<AFGHB:779:;AA;:97566:@DGE@ADEFHKOPNMNOKE?>>>>@BB?9656:<=?>::;87;>;78;86>DFKL>32477543334579:;;<;;;9748AB><<;98:?EGEEDCDILKKLIB<;=BIOOKIIFDB@DKLHHKJFABCBDMURJEB@AA@@??>GURE?>6.3>@??@;559>>ELOQUVRNJGCAEHECEEEDCBBCC?BIIFDCB=6148989CJGA<76;<4+0;@EILMPJ?9648<AA842<EHIJKMLC<;?ACE@7<@ADDC@???@@AA>;8964=EC@<<<1/7:85760.028H^dR?;<=????@@@@AABBCBCCCBAA>:63247<@CFF?;9;<844442/,,-/10./.148:<=@CA=89;><4--,.00.,,+*)*18?FGB>=:77789636::989;>BBA?ACFC<<=956985554312578500152../-,*)(-01,-1461*'+-++,--1444565676457:;<=<:9:>COXVQHAB?8<TcQ=@?3*5=:658971,((&)((.:G?8@QC05<:;9:Ng]B@KJ>0+-152C|Vf~o\\E9=NK940+6GIFN\\^_fcUD?=?@FLNLLPPKHC<=DHHC7242..269;=<84565556621/4<XcZPNMQWfqy{O9.,2UXblompuvuwzveRFEEGFFHLKLLKIHHHIIHIIIJJJJJIIJIHJJJJIJMNNONNMNOONNOPRRTWWVTRRRMHGFEEDB@???BDJS[]__`begffhkiedhigdacfc][XQHEDBABAAAABAAAA@@???@A@@@BDBDECCBBAAAAAAADGNQSUUSSTSPMGHOQRSROG>>@@@@@@?BFFDEFKTajffpuk[TSQJAHNMOPNPRSUVWVVYchmwxlZKDHRettfVRSRTUVX[cgb\\YXUbqi\\ZYVTUZedjrnb[^``c_`kiii[TQPMNNmep~|jZQdRHUYXXWX[XTky_ebbfeRHEDBHUk]abZpygou^RPMHFO`fTHJPbz`\\[_c{`PUSOKJHHJLKKJIIIIGFFGGKLHMRW_ZTPNONNNNMLNPPKFJORTUW^u[ACHGGFFFFOMGGHKLIGJMLKFDIDFWTC;<=BKE@@?>=<<<=;FTTIA@?@@ESIDKHEA=;::>?@?>>>=?@ABCB?;=<985=?>>:89:<EG?:;=>>=>;5@SNFAABCDB;79AD>;:?PZ@:ES][PHR[ZbmmYGGT]VNJHP_VA8656;ALZgdVQRPQPOPPOOOOOPRQQTTTUUUVVVVUTSSSVZ[[[\\_ZMC?>=>??><<<<;<>>>=;9?OZ\\_aaddcccccccYLFEFB=;9:>@?>@CEISYP><ACBABCBA?>=ANXZUVTOOR[\\ZVLDDB:8CPTY\\__]TJIJGEC]u|tWD<>LYQFHHC@???=?BCB?:<L_cYKFFGA@KG?AB@?ABBBBGMPNJLU\\dr|qYTRLKKKKKLLJJKLNNLMMLKJIMQKE®ƻüŻŶ{quupwuW]jjjhdVLV\\Z_bcbb_[UQNMKGDCB?<;9<xqk~yuusgYROJGUghcXRS\\`ZZ]XKACHKLB?DJHA?L\\XLQUPMMLLIJNOQPNLJJIIIKNPQQRQQSUWYYYZZZ[\\ZYUPNLLMOPUZZZ\\\\]\\\\ZYWVX[_acdaX^g_cTJ@?9::EYRE;2998IRUUMIG?967766886465:TP>459=?AGORPKFN\\YQ^w|t@1758RouoYLUVajinOIPHMCK\\ddefghZG:>@;::<@GGA?9?B8;@><<@B>78=CR|tTF@@BEJMD><>AE@>AEIJJNRTRG:8EKIEBABEIFHTVLMTVXX]ZD6>HE;9=ADEEEDEGHHC=<:89;<>=;87987:=><9776556:AGIHCAIJFHJLLLMNNMGDCAA?=>=;<:7778::9766767<956973:DGJUT?/3788654334678<=<;::98659<=><::9?LLID@@@?@EHGFD?=@EHJKNOKJJFB>@GJIHKKID>>BCENQJDDCAAAABB>ERM@<@<219@A@>;9::=BHGENZVLIHEBBGJHEGIGBCEGGD;>IJE@@@;668;:86?GF@<74583+1=ADHIJMI>8:??=AD?929FIILLKIE=8;AEIA49@@BCB?AB?<=>=<:9645<BB@:62-/39??<841101C^eS?:;<>????@@@@AAAABBBDCA?@><86437;>><978:<9655441//01100,-2302;BBABBA>;EPD1+..//.-,,+,.06>?==CE<31147757::87:?BA><;<==<=@>85784258753576434453/-/./.+((.1/,,0362+(-2.))-/4433579::::=<;=?<88;@GQ\\``^\\UOKA@QR;12;<16;43?F@;80+/+-/**.D@1?R=-9C>AF@JQEBFIMK@71/22:`rv{~|gMFPF6468@HJILXcenrZA=;<=>?AABJRH957>IMH=559<<70.16;??=;99:51/,)--4Wb]TRI>:QpzO;:2(W\\dbbgnvttvuwxmYMGFGKMNMNNLJHHHHHIIIIJKKJJJJJJIJJJJJLKKJIIKMLLMMMMNOOPOMLLMOQQPONLHCA??>=>BMW[ZYZ\\beegikiecfigdecdhid_[VQMGBADCB@@@@A@@@@???@AAA@ABBBCDCCCCBABDFFGIMOQSTSTVUVVMCEIINSVRG>?A@@@?>@BBAACFHRdnosvvoe]WJ?CHJLLKOQSTUUWZZYaqxy{thVIHSitrcSPSTUVXZaih^XVSbcZWTRNSdow|whbjlini`o~ziZSLIHFJmgn{{xoVfPHUXYYXY[ZVn|_iddiePCDDEAJr{SYZVjqtdOmiZPQQONJGIKIILEFkxbY[\\gaMOQPOKIIJKJKKJIHIIFECDHHEHIL]`ZTRRPOONOMMLMMNKLOPSS\\wYAFJIHGIHLVMEGGHIHGKQQIABECBMJ@<<;;>>>>>==<<;=>CKF>:=>>@@MN>>D=<<;;;>@AA@@>??@BBCA?==:87:>@>>;9;==@DCBDCAA@>>>:?DC@?BCDC;47DHB@>GcdECV_[NHLTZZaooZNQWZURSRU_YI>858>DO]db[URPPPOOOMNOONPPPPRTTUVVVVVVUTTSQTZ[[[[^\\LA==>>?>><<<<<<<=?>8;IV\\_`abdcccccce`PCBEFD@=;<?AA=;?DGCDHEBABBACGIHFEB?EYhbXRMIR^^YRHFHE=9<=IX[]^aYMJHD>>HXmuT?<@GNJFHIEBA@>?@BBA@:?MZ]ZQLKLJFCBA@@??ABBBAEKKJHJQU\\jrw{jVRQLKKKLORRNJJJIJMMMMKIHIIEr·ǿʷrgbalslzVNbkgab_]`aaa]^_^\\VPONLIGDC@=<99]xdxw}vnomf\\WROLHDK^g_JDJ[`XWZWLEEEEC@>DHEFLVZUQX\\SHHMLIJMOOMJHHIIJKMPRQPSRPUVWY[ZZZZZ[ZYTNNLMOOSVZ[\\^```\\YWVVZ_`bdd_U\\f]dXJ=99<=>@@@?:3:;EHGB:;=:97655766663;XjQ835555=KUTNHGR]^bmlnk=387=LWOF=<GVcg__WeXBNCK`e`bdhpyf>58889>EF?<EJQWSHFFFB?A@;9?A?e{v[MGA@?;@LE638BF@@DIJJKPTUO@68=DIH@8:BE@GW`__bcVKQSB5;JK@:<@DFEEFFFGF?;<::<;9999::<<769:97555479:=?CA?@CGHIJKJKKLLMNOMJE?;:;=?>:75678863477688767756?FHR^T;5899999732568=?;:999:::989;9<HPTVMG@<;=?@BC@>>><AFEBBLQIGJHB<<BIIHKJHD=<AC?@DCDHGA@AAAB@BJH>:?B;349>@ABBA@@AEFDKXRB@BAACHJKJHHFBCGIJE;=GID>;<@><<=<95:BEB>95452.6ACABDGH?78AIHDCEGA89CFFHIDAGG=<CFF<2<B@@A@@@?;89::::8219>>:62/..148?B@:85456CVQ>99:;<>????AA@@AA@ABCDDDB>>>>:4/13556777887544242201120/,-01.3CKA?@BD?7@OO=.-//----,+++-6;45<EB95104799998879?A>6789988?FA737888:<=<<:865576764330034-).41..12441.030)+/3544446<@==AC?;;;879>DR]\\\\]afj^TPE;5.147;=:53@LLA:81,.-15.+*@C1AR:-8B:=GA<7:GLMPPJ=1,/344?c~ePK=::=@EHKLLQZaov\\C?=:741379DPK;12ARPGA=869;3,.16>BB@>;:95/,.-0+(DhgWX>/)4Tm|L9=:8QU\\`gossrtutuxxsdTIHLMLNPOMJHHHHIIIIJLLKKLLLKKKKKLLLJFEFFGKKKKKKLLLKJIHGIJJKOQQPPOIDB@@@??ENPOSW[dgffjmia`efefgghhijkf`[YXRFACBBBA@@???@?????@@@AAAABBCCCCCBBAEIIGFFHLPRTVXWX[WKBCHMRVXTF>AA@@@?@A@@?BDBGUjrqrttrni[JBCGIIGIOQRRTUXXVXeliikrm[T[irtp`RPRSVYZ[bd_ZXTYrzcXTUQQe~l^npjx}ow~aUPLHFFNkcqgxaMN[XYYXY[ZVs_kkmmgOADEEBMvyPQX`ktwtqootlTJMNNPRRQQNLKIKKLIJmweZX\\g_NQQQOLJJJJJJKIIGHLLGDEGGEHGFVb`\\WSRPNNONMLKLMPNLJMLXyR@HJJHHHGJVMEHGDCCDIOMF?@AA?DA==>A@>=>>>=;<;;<>@B@;:==;??FQCAF@::<;;>@AA@AAA@?@@@?=<<;88;???=::;<===AFJFBB@>===>?AAABCDC?98GLFFFOdmPF\\`TQTXZ`][c[OGJT\\[XWXZ^]XJ859@IU^\\^_WRONNNNMMMNONNOOOQRRTVVVUVVUUTTRTXZZ[Z]]L=<=>>=>><<<<;;;<A=:GSX]`babcccccccdZE=AEFEEDA??AA?<>CE<;DJD@DD@CKPMHIORR^nh[UF<KZ\\VOMNLFB@90F``_``UKLD99CDBUnT@?FJHEDFDDCA??@ABCA@>@HNRUNKLLMGCBA@BDDA@@BCEGGGFHILVeknnZPTSMLLLLMMNKIJKKMOLLLKJJIWĽzj^`dfY\\fgj]Mbf`fkjeYU`b^]]_]SMMLJHFDB?<;5Fseovrw|}ohhc]YVTNJIFLW`UD=GVTKOWYPFEDDBA?FOSU[]YTTYXQLKLLIJJMMIGFGIKMNORRRRTTRUVWXYYYYYZ[ZVRNNLNQSWXY[^^```]YTTX[_`bec^X]d[`ZH99===;8;@9<<=>GEB<99=:976577439=AP_P8/2456;HTTPKC@HZkui[hvF46<MYO<18>;LQMOg}wI:LDQa]UTS_rg@27989AF?:Qq|S;Ni_H<78;BC=PXXRNHCB<47EE758AD???@CHKNROF<88:BJH<35?LPRXaiqtreQJLD87@D@==ADFEECCGID>=<:<>=<=@CEDCB;4356534458;:9;<:;?@BFGFFEDCCBCIMNNGA@BA@?=;7657::512686367645535<BIX[F58976;=;50378=A=;99:;;;;:9:9=Qdg]J=<:79?CA?>=??=>>>>?EF@BECA??DHIIKLJF@?@B@==AJOKB>?>?@?=>?<:?EC;788:==>???@CGFINH?=>?ADGHJMKFD@@CEEB==BFC?;;BD====968>CD?976644;BB@?@CC84:AGIG@?FHD@BDCA@>BHHB?BGF?=FF@=;>A<8789:9861-/7=<4/22/.037=BB?><978<@;4578;;<>>?AAA@@@@@ABCDDDCA@>:510114:423456644424331100/.../015?B77>CA<;=>B>0+.-...-,*)),7=;<><:87656788877777;=:5668863>JF71:@?>>=?@A:65569:9:;:7369=4.39722212454551..12223435<A==AD?93225:<@S_XXZ\\htj^WF3,-1536<@6;HLG<530)+1831-(;D2DO4.5>7:F90?GEIVYRJ;-,/6=06]|oj^KG<?CEEFHJNOLLVgn[E@>;400365AMMJGCLZSEA@6135.+/16?A>=<::76329=4)-6POLP9/.,4Oo{K8;<@RWckomkkqvvttsuzufTLIHGLPNLJHGHIIIJKMMLLMMNNNMLLMMLIFDDEIKKJJKKJJJIIIGGHIHGHIIGHJIEDB@@@?@CDDJU`gifeikf]Y_c_`gighjkkllhe_YVRKCCCBA@>>>>>==>=>??@@@A@@@AAAAA@A@BDDCBA@DPSSXZVWXWVNHKPRRV[SFA@A@@@??@@?BBABGVc`\\bghkolYEABDFEDHIJKLNQRSSVWXWX]a]]forstq`ONSWZ\\\\^acdb`YUrw[TTSQ`zqejZO``\\v}|mTQPNLJOTi`xb]PQ_YY[YYYYU|`kqtsiNACEDAU}wPT_eheefe`_[ZXSRTTSSSRQONNNMMNJIq{eXW\\e|^NSVTJHJJIHGHJIHGFGJGDDEFEIHHKV^a^ZVSNMMMMMMLLLMKIJJXzJ>JKJIHGEFIFDGHIJGFFECAA@@AEE@@?=@@<<=>>=<===>>@AA;:==?CADRE?B@99::;=@AA@@?>>===>=<;;;98;?A?=;9::;::<FNHBDC@><?ACDBA@@AA?;;FOLKJNbo^O\\]TW]^`a\\Y^XE;:BR__^^^^_]M65:AMX^_`ZUSOMMMMMMMLMNNOOOPPPRUUVUVVVVUUSSWYZ[Z\\^L<;=>>===<<<;;:>EC;CQWZ^acccccccccc_RB?DFFFFEA>=?@@@???<<CF@AKH@ENRS[homibddaaVHJSY\\_\\ZSG??;4?Z]\\[aYSP?9AGECL[LAENSNDCC@@@?@@ABBCDECBBFKNFJV\\^\\SNECGNSSH?@DDCDEFFFFQdllbMMUUNKKLLKHIGGJKMPOMKKKIJwŻv_befd[\\__\\m~ncfahvrhbWTbgb_^_^WOLKIHDC@?=9=`ijtuqrttogba[ZXWWTNJJGJSZMEBFJFDIRXQFEEDDC@FQ[\\[YURTVZXSJGHIHHJIFEEGJNPQRTRTTTTTUWYZYYYYYZZYUROMLMQUXXYZ[]^^][XRTX[]`bdcXZ`bZ^]JDC@>;9;<=8;<<BIJHB@BB@97776669?BDIC;3259:<BMURMFA<?KZ^NHeS12D\\nhVRMJ=@FOPke83DFSWUTNL]urM75:77;C?>\\\\3bu^F3;ACEHJQQMHDA;66=>98:;=<:77?FHKJC<:779=DD:39H[c`^\\apxqk_OFDB><<=>=@CDCC@BJJA<=<<<>@@@ELNLJG=3255334569<;:;989@DDEDBAA@?<;AGHJJFDHJD@@?;7445:;61157413786444237=GMA25767<>><647;>A?<9899:;<;;:;<DS_WB7:868=@?>>?@@<428@C?8<B@=AGIHGHJMLMKCA@?@?<AMRLB=;;===;8789?EFB=:87866665?IJGHGCB????ADHKPKE?936>>;:>ACBA>:>C>9::988;?BA:67557;????>==<?BCEHF=;AEEGHC?;4>LH@?@@GLMLNG@:7;>8778897531124::46><2./2:@ABED@;776424799;<;;=>?A@@@@@@?ABCDDCDCA;40000163/2459:974232100/...-.///.01.0<C=;>>;9:.'+,-/011.*/8>BFD<88643369972245579;:7557742?KE50;DC?=<<;;87525;=:=>;65:<=758;:531014577543210122234:?>???>;7513425IRRUY_lwwraH71/3513:>?BDGD6032+-8A515+8C1FH.0<KC9<-.FQDI^bUJ;--/4?DMwPDMLHDEHKJGFIOPJFP]\\UE?==;88843=HLNTWXZVI82003:611258<>=<:76:>??D9-/.00;@701/+8N]]B8;==R\\ihebeowwvussuxwsfXMGFILLKKIHGHIJKMMMNNNOOOONNMNOKGFFDFJMKJHIJJJJHHIHGGHHGFFFDDFECCBAA@?@?>BN]cc`]ab\\RQY]ZY^gjggikkkklmg^SQSNFCCBB>====<<==???@@@@?@@@@@@@@@@@@@@@@?AJMS[]XTRQZ\\QKOQPTXXTLA>?>>>@@@AAAAAAEMIFMQTX]_YKA@BDCBDDEFFGIIJKKMOONMMOXhqppqtq^NPVZ\\`bcfhhhbWU|eYTSQV`\\YYRNOIKgseZTTTTRQRTibz~]c]c^[[\\\\ZXS}_pswyjM@CDEAYqO\\a_feXQ[bccaa^XUUUUUTSPNNNMMNJEohYW\\dr_JNUUQLLLJIFEGJIGFEDEDEEEEGHHEFQ^a_[XVRPONMLLLKJJJKKZ~uE@KLJIGEEDBBCEHNURKFCAACA>CMH@GJAA@;<>>>=====>>@B@<:<>@FABUI=??;99;<=>?>><;::;;;<<<<==:89=A@?<:9889;;DPK@DEDBACDEB>;<=>??>?HQQPSUYa^UV]XZ_ba^]^^\\PB:3?U^^``[^[E36=COYa_NISRNMMLLLMMLLNNOOOPPPRTTTUUVVUUUTTWYYZZ[_RA=>AAAA?=<<<8:KNCCMUY^acccccccccccZLEDEGFEB><::<>@A?=;;:>B@BLKGHIK[pvmb`^WQRY\\SNPRcqcWWH;8:;BO[\\Z`ddVCFMGDGLJEAGNRNF@??>>ABBCCCDFHFGGHJILWfd[\\]PGHIMZdXD?BBBBCCDEFP`ji[LLTVOIKMNKGEGIKLMOSJCCGgn^onjb^`^Z\\gkgacpwn__cZapjZUSU^_UNKIGDC@=<7Mkgpstyurnlie`\\VSQQQNKIFHKPKIIDBCFHJNLEDCCCCACFLPUXSOQTX]\\UGEHHGGFDDFIMOQRSTTTUTTUWWYZZYYYYYXXWSONKMPRUXYYZ\\]^[YUQTX\\\\^`db\\ZabZ\\]KJIA>::=><:8:<BIIKDBEC?97776;BFEA>84:>CFGECCKRRMHGHGD@?:=_S9=JZ`_`jg]QMOUPTiiQ@EHCGQRMMXbS86;;9:?B>[nOuN;@J@HNXULFB=86566799:<>>=?FGGHE>889999>@85BV`hnme\\`msodQ?;BHB=?@=AEFEEEGLJ?;<=@@@?@?CKLIJF;346533568:>?=::99=EJJHECBCD@>FLJEBFJJIEBEE=75558<956532138:866520246887679<=>?A?99=@@?=;8878;=;::;;69DF;467689;=>?@BA7.1<CC=;ELD?EKMIHJMOOOMFCB>?@=:?IKD><<;<;9888;?CDA=:87778406AMLFDEDCA@>==AGLLGJH905CC;9?BAA@<79A?5777889;@C?;;968;=>>>><;BJHGHGDA?==@KJ>;74FPB8:=?FKQOLGA@:898888899889=@@<76=C@70.5BDACGF?;8887437:;==;:;>?@@@@@@@?ABCDCCDCA?:5111100359<?@>:6530......--//.,+,,,19<99<AA:C>((+*),.@C9>CFHF>88742/17;;5,/46558;97545643=D>207<><9753136526<;9;=:43575588654111125767742336322228?@?@AA>>@>;64:F@>FUev~mI73333//;@>ACD@2,27407C?@@??D3JI/0C^Z=,+-4GKRef^S?-+49CMSpUFRUNEBBEIHGHKMKCOYQQD:@@?=83368;CGFQ[XVM4&*,-3336633<DA=526=BC===80*),385121,,/7EC:<=9SZ`^`emvxvuutuuuvtrhYNJIKKKKJHHIJKLMMNNOPOOPPQPPRSNIHGEEHIIGDEIKLJIHIHGGGGGFFFEDFGFECBA@>>??CLRSRQQTPHIV[TQWaefffhkkkllllkcSOSOECGFA=<===<===>?@@@@?@@@@@@@@@??@@@@ABBCISWWYSKQ]`XQLJOTTRTWK>=?@@@@@@AAACBDFEEFFHJKMOLEAABCCCCCDDEFEEEFJMMLMMNR_mttsrtoXNUVY_``adfhii[\\fXSRRU_hkjf\\NM]rycQU]\\YWUSRTheyݳcbysha\\[]]YXRx`yx{}mOADFFB^iO]XV^^NIZgmmhefg_\\\\\\[WSQPNNOOMKErl[W\\bq_FEOVUQNMKJHFEJLHHGDDCFGGFEGHHEM_\\\\a_\\ZTRPNMNNMKJLML\\rFBKLKIGEDDBBBBEKPQLFCAABCCFJHHLQQLHHE>===<====>?@?>=>>>B@@QM?>?;9;=>=>><==;98::::;;<?@?==@@??<98789::DMG<;??@DGC@968=>>@BCIPSSUWXYXTKLZXPU\\\\\\_b_]XPIA>HSUVTRYS>48=GTVSJ=BSSLKKKJIJJLLMMMONOPPRTTTUUVUVUUUTVYZ\\[[^WD<=@CEC><;;;6;JCCLTZ^_bccccccccccbSGGGGFDA;78:::=@@BB>:59DD@HLKGBGV]WVXX^\\SMJJKJKL]kXLTJ9379AKX_YVbeRHKKFEIIFDBDEEDE@;=??CFHJGDCDEDIRTPMRaidXUSPLOKDJY[NB@ABBBABGMR[__XROSVRLPUSNJPPONKNKGFLcǹ~nmupmke`YWW_bUTevzjUNTYUcmYKIGMW_^WLHED@@:8=^ijlkousrrqqg\\WSMJIGFHHEDGMLLLGEFGHGFGEDCBBBAA=:=GSROPSW]_`PFFHFEDDEGKNPQRSSUUUTTUWYYYZYXXXXXYXSOPOOQQQUWY[]^]XUSRUZ\\\\_`ca]Zaa[Z^MIG@<;<>?<:69?DHGHDAA?;8877:BIHC:969DHKKKIHHMPPOOMJHC?=<APbILSQOLJRZdhd`\\XSNYmqiYC:EOJFIKJA:?@=?BFBErzvLCH>GJQMJF?:76744577:>BBCHKIGFDB;;@AABC?5:LTXbjmiYOYkuhL61>HC?AA>BJMMOOONJA;:>DGD?=<>AA@B@9555433456;@>;::989AJJFEDC@?BGJJNH@HOIFFEGE<89869@A>;621148::86531594.5DEB=>?@?@A><=>>@A;877:<<;;::;859<;:8678;<>??@B<44:>???@FKE@ABEHJKNSTQMGEEC@?>62=HGA?><::89<<<>@?<:97678877=BHID@AA@?==;:;?B@>IWOADPQH??BAA@;57@?46667789>CCBED=;=>???@??GNMNNJBA@;;?KH;67<C@:526<<BNOIFCD@;:;888:<=<<:?JL@45:;;810<GFBADB=;889;8568;?@>:9;?@@@@@@@@@ABCCCCBAA@;45886137;?BB><:830--.00.-.00-+--,,187338>>9IP6,0/-,0CKB;>IE8367668:;;;72/266569<:8755545972/011441/...023437::<;820//2597223330//368:83369;334206=>>@A=7:FMMLILME@DI[ltqF3353-+3??<@B@9++8EB6/;HLMIDC6JJ0.:LWH+0306<Skf`\\I2/?DGHGVr^NUWO?526?EC@CKHBQXQP@;<==;524753990=SXVO7'*++-,-40,5?EB=68<==<848:6/,.38644325529A;:<?QSZaglqsttuttutttsrnfWMNNLKKJHHJKKLNONNMOOQRSTTUYYSKHFEFEEEAADHMMKIIIHEFGGGGGGGGGHHFDDBB@??@CEFFGHOQLGLUSKKV`bbdegkkkkkmnnoh\\VRJGHHD@<<=======>?@@@@@@@@@@@@???@@@@ABBBFMQQRPQX[\\_\\LEMTTQQWWI=?BA@@@@@BBDEEFHHHIIHIJLKHFDBACDDCCCCDDCEFHJKLPSRQRYdkrpnsjWTVVWVW_cejjkfZoVQUTV\\itspfWV\\dfZS\\b_ZVUSRVfg~\\eurod^ZYVPWV~iiOGIJJHhdQVMTTPS]ekpka]cotohb^YQOOONOOMLDzl\\Y[bs^ECGPUTQPMKIGGJMKKJGFFFGGGGGIJJP\\RQeha_YVTSSQPPNLLML]lDELKKJHFFDDBCDFFEHJFCBBBBCDDCC?>LLHPK?=>>=>>????@@@@A@????MN@;@=7;AA??@@@?=<<<<;::;<=?BCB@@??<:988765@F>6469:<?@?=:?GB<@DHQUTTVXYZZQCDPG>ENUSQSZ`_\\[\\RFJRKFNQF77:<L_ZPNFCKOLJIIIHHIKKKKMMMOPPQSTTUUVUVVVVUVVZ]\\[][PE@;:<=<<<=<=?AALTX]__acbccdcbabb[ICHJHFB=;;9::;>ABFHB=9:BDBEHGDDKTTU`if[X]_YMIHJFNWMGNF98:7CRUWVKUXLJKJHFGGFEDC?=>B@;=BACKTYTHAABBEQWSPXbd^VRONSXSE>CMPHB@@@@@BHQTUUSTRQSVUTTVTPRRVVQG<EYu|}zurni_USX\\RXwx^OLOLJLTTHFIIKMT`aRFCB<<84Rg`^cho[Scj]TI<8=BCC@>?@@@BILMKGFFFFEDCDCCBBB@?=:8:HRQONQTVXSGDDCDCCEHLNPRRRSUVUTTVWYYYYXXXXXXXVRPRTRSUSTWYZ]_[VQQTX\\]^aab_[Y_`]XWMGG@=<=>?;889BFEEFB>>=;98879=>=;865?MKC??BJNPPQRRMC<>CDCDEUJXaYMHLTOZhlc__f^T\\ikV@>II<7@IMIGFCAEGHECeqMA>C@IBFF?769868777:=>>@CEFFEDCADIKLOMB9BQSSUVY\\[SHTidG00BH=:ABAIPRSUTROLD<;?DECA=;9998998754344425:<:999878>C?:=B@87=JLHOL@BFA?BDGA::::9=FHE@8311457975532:B=15JLG>=;:;=?><<<=@A8259<?@=<:;<;:=??=977:@C?=>=:67;>=;;<<;:87759BFFNWXUPHEGDA>?;5;HHB@><9988<=;<=:88865558:<=>??=;;;<;;99989:34@V\\OORTRG?@BBB?;:@A88765667<BCELMFAABBBBABBKPMMPMB;<>>BIC968<:66537:48HPKECEDC@>9648=><;:=GG<54334425AHGC@>;::879;;:99;>BB=88<?@@@@@@???ABCBCBABB>;8::9217;@DB?=950.--/100/120-,..++197/03477;B=6=D>45=E6+;G7.6868:>AB>:757776779;;97655441-,.///---..020154-/8<=82////29<9766631//13465348:<5563037:;<:528DKPWTUW[]YBOWNywE0692*,8=>>?@>1)6MWK8-0BMMKEB:GC0-,,AR7/78,&Gkkc_TJFEFKA<EFKMMGBNUL81/48>85?LFDQUUG8:<;;::954687.%)>RWL7*.1461.,(+49>>@;=B?:8842693--26568<BGGC<7:==BJNXbhlptuvutvvtrqomif]SRROLMLKKIJJLMMLLLMOQSVWY[_aZQJGHFDEC@AFJLKHHHGEDEFGGGGGGHHGGFFDDBB@??ACEGHLPPMKLJGFHMW_^Y]fjjllmnonjkmf[PIHHGD?<=<<<<==>>???@@@@@@@@@???????@@ABDGJKIOZ\\ZZ_`VOORSUUTZXG=@BAABABCCCCCEGHJKKKJKJIIHHGCBBCCCCCCCCEFFHJKOSSUUTUXbkoqrg[\\UNQUY]`fghjfe[NQTUV\\ijdUILV]^ZXad\\VUUUSVdhzaddc_qna[VPJXYoiQLMOQRl`NOOWTPXfoqph_[_iuzpYUTMIMONNNLJA~l][Zbu\\HFGJQXSPNKHIHGKONLJJIIGFDJJIKOQROLZgea_^[ZWTPOOMMNN`iCELKKJHFEECEGJJHFGHFDDCCABCB?@;:CBAGF@>>????@@@AAAACCA>>??IQEDF>8=AAABCCBB@???=<;:=@BBDEA=<>?=;:98874;B<:<:889:AGGCGND=BCHQXVTTVXXUQFDNICGRXRE:BU\\\\`d]QT[XUTK<59<=H[cmr^GAHKJHGGGHIIJKKMMMNNOQTTUUUVVWXWXVUTW^^]\\\\[RJ@99:;<<==DC>JUY\\^_`bccccddcbaaRBCIJJHB<@B=99=ACDHIFFE<9@CCDEGIIUafgkqeWY^]UOLJAFOMGGA8=?<LTDMXHDOPMLKIHIHFEECA>>@??@CBBJYa[LBAA@@GMMQ[aYLQYTRVZWNB<AHHDA@@AABGOQQPOOOQSWWV[Z[xeLPPQRiñ|ywtqj][dieceTILOMLIHJIFHJKKJLSZUHC>=7:8b^W^fmtaQSTTUQRXM<8:=??=<;<>AEFC@@@@BA>>>??@B?=<<:9CQPLHGGIHIECAABBDFJLNPRRSTUTTTSWXXXYZXWVWXXXURRQSSTXZXWXXY\\ZURQTY]a`cb`\\ZZ_^[XUOIJC><=>=;8:;A@ABC=<>;9876546999:::DNND>=@GOPQSVZXMGFGHLJKYPcfTA=NXR[d`\\]dok^XTPJ@BI?41:RWMEDEDFEEB:Fnw}O?>=9D@DGB<;<::;9888889;::ADEECDFIJMPPLGIMOPOOPT^]QKNRD12IM:5@BDLQRRRRPNKB;;=<;=AA<77555676534767:<<778668:>=8535=?=99@FHHB=>?==@CFA;;=>@FJJGB8421335665533:B@76@CB@>648;=>=<;;AB7148;@F?78:;;:=A?:54:@DC?==;66;<<>@@@?=98887678;DOUUQJGD?==@@>?DD@>;778769<<;;:9887668;<==<;9899:::;;;<=?A?CMY\\WTQPNF==@CCA@=?A=;975547<@CIOOJFGIJFCA?>AC>=CIC9;=@CGA:8975788:?=56BLIEFHHHE@956<CC@?DFD;66542237=EHGEA;88999;;<;;::;?B@96:>@@@@@A@@?@BBBBBBCCA@<743117=CECA=61..011101252.----++/56100..0//03EVQ?:;<+-EG8587898;=>=<:899;;;;:9:::85551./000110123233/282**166/)+1234<=;;;9754222000234679656301468767:=BDC;L\\\\bdaXVO2ZxA18<4,2979><<9-1H_`I83,/<DJFDAIC0.,*6G9,,/--Caifaah_EBM>4GJ<h'#1<HOH=:::;977AJFGORR;35779;;9745970+%-FPF6058:;653-,.28<=76:;::8669<6-,15558>A?<>A;:;85JLU_ipwywussuvtpmkgb^ZWUVTQNLLKJJIIIJIIJLNORW[_`acaZQLHFEEDACHLKFEFFECDDEEFFGIGFGGFFEEEDB@@?@CFHJKJEBDGGFFEGQWTOS_cbdgiic_^`\\TPNLJHGFC?==<;<==>???@@@@@@A@@@AA@@???@@AABFEDFKPQTZ\\]ccXPRUVVX\\WH>>ABBABCCBBCEGHHIKLKJJIIIJLKIFBBABCDDDEEEFGIMPQT[ab``gooqrg\\TOPQQRU^gjjjfmreXLNUUV_aWHCHRX[YWaf^YXWVRXbf|_Ydfb[Vxuc^YRIZ\\o~rXLLOQSlWFKSVVTVesuumefiddomTPPNJKMMMMKI@m]ZYbv[JKIKORRQOMIIIJNSOLMNKKOTNGKJIRUTWTNYhgbb`_\\TPPPNMMOchDFLKJJHFEDEFHJKIHHHHFEECBBBA??<<AA?>??@?????@AABBBCDD@>=@?CUY[YH<<>?BDDDEEDB@@@>><<AJNMG>9;>=<99:999:<@AFJB;>DGGHEBFLEDEACJPQQOQSTQOIDN_XVbg^J99@FQZ\\[\\^_[SI=68<>A<Glv\\H<CJKGEFEFHHIJJKMMLMOQSSTTUVVWYYYXUST]`]\\ZWQRQMLLGA;9<>BJTX\\^^_acccccddba_\\OGFGIIIGDCB@?>BFEFIJJMI=9@BBCDGD=NccWYu|bMLJGDC@ENOH?76>>BTL:BWJ9CLKGEDDHIGGIGE???ABBEHEEMVTIB@@==@DFMYYI<I_]XPNQOHBAAA@@?ABBCGKNNONMMNQWXX\\eodKZi|pkmqvz}Ͻss||sni`cqvpg]Z]XSPMJIJJHHHIJJHEIPJC;;:6N]U\\gmsurlebWMFPcaOED?=>><;:;<=@?<;:;==:9998;=??=;:>JQLHEDCCBAABAABDFHKMOQRSSSTSSTUWXXYYZXVUUVXZWTRQRSTVZYWWWXXZURQTY]a`cd_[X\\_^ZYZXNIC=;=?>98<;<:;=;;A>9765666<A@;7;@HINJPLFGMOQRUXXTTQHKRNGOXo_B5:NTT][NNU_fda`[ZQ@DI:49@BC><AECBB<:64Agy{bF?=?@B@DGECCB>=><;:988;<99=CEFEEDDEGKRUTJ>>ISWZ[`dcXJA<55DF86@CCFLNMMNMH@869:779;<744543454334:<?EG=6788;=AA;44558:=;98<KL?CLKGGGGFB=<@CEIJIIC8321367533347:>><:;==?A<989;=>?>=GM@568:?B>976898;><946AGC>>><::;<:8?INNMLKIGDB=6457<DIJGEB<:;=>??>??<9347879<=;::99899:<==>=8668:;;:::;=>AJPKKW^YUWSNHB>>ADDBA>>@=<:85547;>AHNOLHINNKDA>:::435<>:9=?BF?99:7579:<><99>BCFLLKKD>;;BLTQHJNJ@41555433:CHIHFA;769;;>??;87779<=879<>?@@@AA@@@@BBBCCCCBB?:64347=EHGD=4/.0232203672./0/-,-/12100///.//1>U_P@?8*0IPE926;:64689;:889=?><;9;<<977532454369;;9520--23.++*-.+)+0149=<;;=;8866520155445656652/1457559@A@@8)O]]^clmiM1Df^819>8169425533/6I\\^D884.27=>?=EA3.010333/.09EOPTbislLAIC8>P<ix<1/1AD?=<<<=99BCDIGIPPD1.-.0378763477871.6=;7789:958=6.-155422247634:><4..2555786/-07;830-IMXeouwwwtoosvrmifd_UUVXZ\\XPLKKJJHFFGFFHJKLNSY]^][ZXTNIFEECDDFFFDCDECBCDDEDDEHHGGGGGGFFECAA@@DFIIFC?>AEHHFDEHJKJKPRSUX[\\QFIMIEHJKJIIHE@=<<:;<<=>???@@@@AAA@AAA@@@@@A@@@ABCDDA@AKWZ^hmd[XVVXX[_YI@?DB@BCCBDEEGGGGJLKJKJHIKKMMLGC@ACEDCDDDFFHKLNQT\\dhiijlosrfUQQNLLOYafghjigicTMRVTVXSMQVSQTUT^feb_XVOWbe|z\\\\de^[Xvd`^SI\\bkmyvZJMMLSpfUXRQSTUdv}zrlmogffa^XNKNMMMMMKIAo_YZcu\\OPMMNOOPNNKIKTYTNLNQLJZilQLOMPWY^^OL_g_XZ]]ZWURONLQgeGGMJJIHFFEGHIKMLIGGIHGGEDBBA?=<>DEA???@@@???@ABCCCEEDA?<?@BWjjibNB=>ABBEFFFB@@@?>=;;EQTL@;<=;867999:>??BJME?AGIECBADHFED@>@CGIJNRTQMHFO`ZWdqjVLG@=FR[\\]]YOEB=8<CGC8Eq|YFC<DNLEDEDEHHGHIKMMMMOQSSTTUVWWY[[XUSRX_]\\[NDQ[]^]VI>::;DRVY]^_`acdddccdba]TLNKFDDHPQG@BGGFGGGILOMD@BCAABDD>9DXWCDa`?=<;:;<AILD85=BCKTJFGTOBCEC@?=?GMOOOPI=<@BBBIQOFCEDBA?=:=?@AFJH?:CWcUFCGMJDBB?>@@ACDEGILNMLKKLOV[Yaxurw~{zvosszͼgc{tnifacouqpsqh_YUOIIHHGGHGHIGECEEA=::<cUZdimtxuoid_UONPRRTSKDEE=:9=@=<<;;<;;<:9887539>>;:>JPJFDCCCA@?@BCDEHKKOPQSSRRTUTTWWXZ[ZZYXUTSUWWURRRSSSVWWWXYXXUPRVY]__ba^[Z\\^^[VPJ?:<;;=?>=<==<:::8CF<766667=ADD9:MNDHML[XQNONOPMJLJLJALLA::LWH>??QVUXM=?JZa`beaZMENL74=97668?EDD@86760?`\\FA=>@CBBFIIKKE?@@>=<;:9;<>@@BFHGFFFFHKSXUE47JVZ_cccegZ@358878>CFDDGILIHF>5138;98940.058512321249@EHB757;=?BC?855445457:8;KQGGOMGFFEDB@??BEGGKLB73457:;62114:===>>=;<@EF?989;>ACEOP>5:?><=BDA<989<>???@GIC?;;==;<<97<FOSSONLJHHFCA?<9<BB>>><:::;<==>><9548;;;<<<;999::;;<<>>71037:::999:<>BLRKDLVRNQWNDBDDCDED?=??=<975458<><>IOHBELMMD??>>A@:45;::=?@A:6:=<;::;;==>==@AFKMOG?><@FR_aYVRD637655334:CIKIFA9459<=>BB;6555546779;==>??@?@@AAABBBCCCCCCB@=979>EJID<2053223445762/2443//111011256647<=GUOD;7.3HND63:=976668::998:<;7567776862134357<>;830.-+..--.-+,.241.-4<<<;;>;::99721276435667863/2445437==<7.;SEUadlqtU9<B;13;>:3783010///0;IP>9;<96555647:7.+...3>B>37A?7;[pxnQDBD?9UE9L<1>82>>88:<<81;HFFPONRP@70)'*,16624<@?=?<3-0577668978==7221/.022232/4<=70.02547=>700249;976LQajkifkuulinpmkhe`ZTTXXVUXWROMKJHFFFFFFGHHILOPPONNPRNJFCCCDDDDDCCDEDDDDDDCCCFHGGHHGGFFEDCDDDGGHGDB@BDFEDDCCCEGGHIKMOPRTOB;>AEGIJJJKKHC?<;;;;;<=>>>?@@@@AAABBBAA@@@?>?AA@ADC?;:CQ]eiigfc\\XXXZ]_YJ=AC@BBBBCDDEFIGGHJKLKIIJIIKMOLECECCBCCDFFGIJLOPRV\\afhkllnobROMMKOUV[]biljhig\\TSVUUVY^aUNSUU\\dg_\\XWPUdezv^WV^\\ZWwfb\\NJ^d{ehtzuXJMRUctvdiSTVXXbvytokkksjT]VNJMNLLLLJIBp`XZctaTSNKKLMNNMKJL[aSMLNQJIhswl\\WWQUY]]SJOWUJGMQZZYTSRPUjbHHLKJIHFFFHIKNPQTSNLMKIGEDDB?=<>BFCAA@@@?>?@@ABCDEGGFDA=ADDSblnjZE=>??ADEFGDAB@?>=<:=HSRJC=98888889:=?>@CBA??@BEIMHEG@<==??@CGHKTWTKIIKXSNYjj[UTTQLNY\\YXQLJI=6?HFBEO_W?>DDLVODCECDFGHHIKMMLMOQSTUUVWWWY[ZXVTRW]\\^^J<EPTXVQIC@BGOUXZ]^_`bccccbbc`a\\K?EKIDBDOSHBDJHGJJIJMNIDBDCAABCB>@BDC>EPX]NBA?=>>=DHIF?DFFINRUXWVVWSKHIGBEMV\\ZYYK=;ABCFJPTOHC??A@=;>A@@?>??>?HROCBEIHDBCDCDBBDEGHGFKKKKKLRYXTezouwxzyvpffY^`cfecmvtpj]UTTPMIHGEEFGFHHGEB@@@?;7UaWbflry{qhjg_TPWTONIGGDAB@;9=?>><:<<;;<;:9:97425868=HNIDBBAB@>>@BCDFILMPPQSTSRSUVVXYZ[\\\\\\[ZVTRSTUUTRQRRTUUVVXYYVSOSY[]^_a^]ZZ\\]]ZS@0*-445668;>>?>>>@CLC:886678@ACD7EtX>ENKVUUSRIKMLJLGIC?IE16359<@>?PVQLE@DM_ede\\N=:HVK96=:7667;BCD=637<79Ou@:<<<EFAAGORSOE@CA?>><;:;=>ACCGIJIJIIHGQUK<7FVWW[debbigH7:;78;;?CBBEIKHC=63115;:983.6>B8422222349??>;657;>?@@<96525:837<9=HLC@?=;;===?DB>AGHHIH?52458:<733017<==><979ADHID:68;?EIMH42ALB;?FKMH?<>@BFGHJHHD@:9>@<<=;:98AHGDFDDHKMMLKGDDDD=868989::=@@><;;979=>===;99::;=><<=<61/16:::8889;<?FD:35:88>E@?DFBBDDB>=?@>==;5369=>=<DH>:AHMKA;:;=AHE:9=<;=>>>97=AA>999:;<==>@?@EJLC<;99?M]ge_WF58DA95346;BHJIF@847;;;=@B>;874422479:<<<>?@?@@@@ABBBCCCCCBBB@=:<BGHE?;2285335787641145:;4/.13013247:58FI<:976329?<84@G=78:?>>==<<=<<;63343245310000/3873//,+-/.,///.0234851/5;<<==>>==;;;612444136:::8504632237754--LG-BONPewaA99204:=8057410//11/4<?9;=:99:96655:=6-,105=FD;;A<65E`xpQC==>;NJ&$,1554549@@A?70AICOUUVMIDE@3,-056426?E@;><403653346989<:720/.-.0320.-2772/-/2549BD:0.59;=?@>KOY\\ZWT[ovjbehffd_YUUWXUNKRVUROMKIHHGGGFFFEFFEEGHIJMONMIFEEEDDDCBBDDDFFEDCBADFGGGEFGFHHFFEGIIIHHGECABDECBBAABCFFFJOPOPQQUOA;=?CGHIJKNLD><;;;;:;<=>>?@@@@ABBBCBABAAAA@??AABBBA>:=K\\a^`cfkcWUY[YX[YI<>?BBBBCCDEEFGOQOJIJJJIGGHIMNOMHAABCCDFGGHIKNMMRX^dhkjjlok[QOMLORPQTX_dfhmpmaY\\UPX^^^XOTWWZ_^ZWXWVUfetXVUZZZX{h_QHN`dgpv{qWHMR`rthVca^Z\\Z`t{wtnoqwuaFJJGTXMKLLKIHExaWY]qdXUHCEILMMMMJN]bSKMONFJsvhondaZUX]ZTNKKJE>>CMUZWUTTXlaIILKJIHGFGHIJPVX]`[USOIFEEFD@>=>AHCAAA@@@?@@@ABCEGJHHG@>DEFLVcfYLA>>>>ABDEGGEC@?=>CKIJSVPG=:=><:8789;;<<:78;<AHPUSJGF94:ADDDFGGMTTPKJILYUQRY[VRTYXNJOSSRNPVH:CQNDAMLE@>CGR[\\NCBDDDFHHIJLMMLMOQSTUVWXXXY[ZYXTRV\\\\^_RB=ABBCCDDEOUVXY\\^^``bccccbbb_\\TB9=HSMA@HNIELNGHKKJLNLGDDEDB@BC?>FF<?BGJFDDHKHE@@ELMTZXNBCEJTZ[VX[_\\XXXVV^_Y\\df]L@>BBCJKKKNLE>>>?@>>BA>;=@A?=?ABAACFGECCHKIEBDFIIFEJKJKLLNSbsyi{~w{wry{~ea\\YVVWXbgdnytaMGIKKKKIHGGEDEFFFFDBCBA@;@aX]fkr{{olpi^YUWTLPJIIC=>@<:=@@@?==<;;<<;:;;973-/38FNLIDBAA@><>ABCFHKMNPQRSTTSSUWXXZ\\]^^^\\[YVTUVVUUUSRSUUVWWXXYTRPTZ[^__a^\\Z[\\]][SG:1--*-/,0:A@@@AAENJ@<=97689ABDC6KsW@BIFIHHIIFEJMNKHFA=B=44506A?<?OXLDGNU\\eg^WG8/6DNKB??;87769<;=:447DJFJw{:7::<FE<@LUYYSHCC@@@@=;:=???ACGJLMLIGFDGG@:G[_XSU_eb`fiUB>AAA<9;@@@CEGID;53458;:977>OPA7443114449@?86779;<===;8755;CD@?<9?GFA>=;;=<<<>A@=AIKIIE=51369996643:;46;<8338BDFNP@36<@DCGG79JSB:AIKMKC?BCFJKJIHGFA::@B?<==;63:?BGGAAINOONLJHIFFE=3256988>BA><=>;769>>>><:::;<>?=;=:74225:::8877:;==8758854124;CC=?A=;;:<BAB@>537;>>=<>:79>FMJ@879=BIIA??=<<=<=?ADA><9889;<<=>@?<<BD?:8649ES]`YSIAEJG<21579@GIGA97:<;:9;<<;;9743113688:<<=>?@@@@@BBBBCDCCCBBBBA=>GKG?<;34:6436899831345?B5*+24014105858HN?./00022.-03?K=678<CED>>>AGD=6556775210/--.--/./.-,,04/.00.0375355558;;<=>>AA@<==822344126;<;9525620025621.5VB/3675KokH78656:;6.46532015502789=>738BLG;;>?AA:6:98=ABEGIGF?:F_aJB=8<@AG@0)036534=FCA><:JMN\\PCL?8AEE?824972379;89>=42674235766:940/00-+-033/--.00//./2335=ED<339868=;IIKMMNPR_kc[Z_ca_\\XVVUTRONNOQQOMJHHHGGGFDDDDDDDGIIJKLOMLJHFEFECBBCDEEFFEDCBCABEGHMPKGFFFFEGJJJIHHHDBBBCBBA@@ABDDDIOPNNNORTRI>9=AEHMNPQIB=;;;;::;==>>@@?@ABCCCCBAABCDDAABBBBBA@<6>LLGOW[`\\ROTZZYXXXH<@BBBABBBCDDDEHMQQPMLKIIIIILQRLHCBBCCEFFGGIJKKOSX_fjjjjmmhZPNMLJMW[TRVZ^fjjge`YOW_]ZVPSWWY\\VXXVVRTggw[\\ZWZ\\Zi^OJPcewerxmXHLKWhukSTobY\\\\`pwwxulmyzUBHShsJJKIJJIGzbZXWlgYTGACGLNNLMNRZ\\SJKOKCJspWYcekjVWZVTUOHEDDHJLQRVYXWZn_IIKLJIHGFEGHFIXXVVZ[VQLKFFEC@>=?AAABBBBAA????ABCDFIIKMBFMIFLUUH>;>@@?@BBCDGJIE@?@DPXYTRNKJHLLF?;889:::97756;AIRTNI@EE75AIKHGJGFQSQKLKJMPPRTRRRRQOLJGFKPOQTRA?W[IEFJ@?HKIFP^]NDCDDDEGIIJLLMMMOQSTUVWXXXZZZYXURV[\\_]XOICA><?CELUXYZZ\\]__accccbbba_[UJKKQTK@?CHFDNVRPONKLMJEDDDCBABB@?GKI@DGFGEEJMMECBGOT_dXGA@DGMPMRY]biiaZYeqkZVgo_LCBDCFKLJEDIGHJJIIHGIID>>BB@>>>?@BBDFECDHLJDCEGJJFDHHIIKQaxfv{z||oy|us}{u}zyghfhfaWPZghp{rTEKNKJJJIGGGEDEFFFECBCBA@9W^Vckpu{ttph_][XSNRLJJD>>><:<>@??A@>=;<<<<<;::4-+159FLHB@???=<?ABDFHKMOQQSTUSSSUXZY[]]^^^]\\[YVWZXTUWXTRSUWYYYXWTRSWZ[^a__\\ZZ[[]\\YSMK;/+*+*'/9A@BBBBEDE?@?;7689CBCA>IQK@A@??>>=?DEINONKI>;AAI>705>;;?OVMHQWXX\\]XI;446@GHE@><96657869646<DMIFKXXZV579:;<><FRUWWRLF>;>A@><=@?>>@BFIMOMLJFC<;=EUb`XUTRU]`fi\\G@BHF?99==<?>DFE@:56=A>964<OTJ>5332124559BGA6668;;;;<<:859AFHHC@=@EC?><;<==<<<<<<AHIHGD=51458982446HO:/:?:979>FGJQI75?EC=AJKHKF?;AHJMKFACEGJJIIHFFA:;@CA>>;:75:ADJH?=CMOONOMHHHHID@9469::>AA@?==<977:>@BA<999:?@=;;:99769;:987789:;;:88:=<52259>><:854546AFAA?538;=?>>=869=DLG<658<@AAAAA>==<<?EFC=9877889;;;=?=97=A?;8748@AKMGECFPI:3,/698<ADA:59>=;98::8655443124779:<==>???@@@ABBBCDCBBBAABA?@HID:7:23:55668=?=86755@@1,3:62251.387<DD=40.-/0-(*-08;544555AFB??CDA=7567896101/-,--,--.0/.1452000/..44225678:;==>?BFD@=:545674115:;;;8443/,-./6:87ES>72.4(>maF67554565-255542369318=<==869GSUF?CCEE@@=;8>CEKQLNOH@>BILLM@<FGGNG87934:@EG@?@AFMP^^A.75.:=@A;56:7368978:>=866662133039730../+*,14310/./..//0233128AGA745438;HGGGHLSTVYWUV]aa^][[WUTSRRPMJKKKIHGGFFFEDDEEEFGGHHKKNPOPRPIEDCDEDCCDDCBCACDHOXbfiotfNECBBCEGGGFFHGFDAABBAAB@@ADCDGJLLLKMQSVTI><>AJSTSRQME>;;::9:<=<=?@@@@BCCCCBABAAABDCBCBABA>:69?=9=CIQTQOTY[YWXZXKB@A?ABBABCDEEHLOPOOOMJIIIIIJNNQLDEDCDEEFFEGJILLNU_gijklmogYPLKEQhiZPPTX[^abda^YYZWPMNQRTYYWXYXWMRikx\\XUY\\]YidXKQdeo^lylYJPOTcxqaVeXSZ^`dknml`\\el`bnbѣSEIHIJMKcYVUhk[WKHGILMMLPZ]WUPLLNKEE^[KFP_prYUWNIVVHCEKU[VODRb_V]p]HJLKJHHGFEEEA@HKNOUYVTSUOGC@===@BFIJHEDCA@@@@ABCCDFHKOIOQIAAQS>8;?AABBCDDCFMNKDEEFHKNMLJKNRUUQJB=:<<<<9678:?DKNH<;8AG=?MQSNKKDIZ]LCGIHFCGJNNNPUSHEHGHPUTUWJ<Q^L?JSP=DWUOKKTZSJEDDDEGHIJLMMMNNQSTUVWXXYZZZYXVTUY[]]ZVOKHC?CHKQXZ[[[\\^__`cccccaaaciklc\\\\O=??A>AAJb`YTSOKJGCCCDCBBCEDCGRUFBCEFFHMQMJGHHP]_O?<EJGDCCDQZ_mybUXfmc]_fk]KCGHILMLKPQMLQY][ROSUTSKFDCBA@@@BDDCDDDDGIHEDEGLIDEGBEWk}{glvvx~uv{s}oknnttgZPVgnq{rSKTQLKJJIGFFECDFFFDBAABB>@d[^hpsvzwpibfe[SRVPMJECFB?<==>=<AGI@=<<====<;83//1,0@D?=<<<<<?ACDFIKNPQQRTSSRRTWXYZ[[\\\\\\\\\\[XUWZXTTXZUQRUVY\\]ZUTTW[Z[^a`]ZXYZ[\\[YRIB>4.,.,/3;@@BCCCC;=AC@:9:=AFDCEJKD@AA@@@@@@@DFLLNUWP=8ESXQ@56306CPRS[\\NEFQSSNC98;?=BD;?D9455774656?EA6;DECIJkMB52689;<?DNRQONLJC:<>@?@@CC?>?@BDGMSTUTPIA>BO\\b_XYUFCRagh\\IAAHGB><=87<?BCDCA<:?B>;97<FB554332123557BMK;678:;;<<<<86:ADEEDEDBBCB@?=>====<78;?ADFIG@7146788469@PWH59CDBA>:BHFLPD9>FC=:CRRF=>=BIKLLJEEEFGHGGGGFC=;?DBA?;77=CIJKH?59FMMMSPFDHIKLJD?:;=@ABCB?==>=9549?CC<7669=?=<;;=?>>?;97665788;=@=;=AB=:899<=;7578754>EAB>77:;=?@?@?>;=@F@8768<@76=BBB@?>?CJF=7446666679;;<<66;?>=<:99::>AA@>DNB0/26<??=>?=978:;;88:<;51124432468:====>?>?@@@ABBBBCBBBBBBBA?@BB>53423855888?DA<;:77:3/:@?:641-+/6;FG>761-.10//..//-)1320,3CIB@BA8856546731021.,-/-./12236655420.-/120-38647::89;>BCA<8689;;9646:;;<;820.-,,*0:>;WG68626*?_B:640,..04/13320/03<;8;A@>=:95;K\\XLILK@=D>97@MQRPKLMHHKKQZ_`SCDNMMcri`O:8>@?BEFHJKQ_P1+0/-247<<57:::9;?AA==;:9976100//25420.-+*,/2312330./14554563.+07963478;>FFGFGLTUTRRUX]`b`_^]\\YVSSQOMIGHHHGFEFFFFEEFFFGGGFGHIJKMOPMHCACDDDCCCCA?DNW`dgpxzz{~zeL?>?@BDDDDDDDDDABBBABCA@ABBCDEGIKLOQRSSUQIBAHMOOQRSNE><<;;:;<;<?A@@@BCCDCBAA@?==?@@?>@A?AMXL98=;6?OUQRTRSVYZZZ[UKA=@BB@@AFNQRSQQRSQOKJJHIIJLOPOLIEBBCCEEEEEFGHLQV`hkkklnni`QJIXlk[XUYbaZ_b^\\\\\\[VRMILIHRYYYWWWVV[ilqTOPUXXTihUGOddqco{m^T_`br{jf`\\TSX_`cgdXVTZYUktqf|^EHGHJMKeXUXln^[SQRSQMMLRekXNOMLLLGAFLRSS]op[TVMFRXKCERbZsFInkU[s[GKLJIGHHGECDB>?ACJSQKKNU[WI=:=>>Q`cXMHGEBAA@@ACDDCDGIKMKFGC;GSD:=?ABCCCDCBFOROIECA>;;?CFGHIKLMKGB@?>==:8:=?ABFF@8:;CHDFKRWSJC?Pc]LC@AEBADCCBCFLHEEMQU[\\YUPFBVN<?LWXGL\\VQ[a_^XNDBCCEGHIJLMMNNNPSTUVWXXZZZZYXWVUWY\\\\[YPMLHHMRTWZ[\\\\]]^__`cccccaa`dvzd^YC9=>>=>>@PZVSZTKGCABBCCBCDGHFGRUJBBCCCJUUKLMLKNXN98EMOJA?BHQ\\kyp^Zcc[bha`[JBFIMPPLKT`[TPR[_VMSY[`]PDDECBBBDFEBBDEEFGFFFEGNGCFEWp}{zwsfew}|wyvx}wp{~vmen{wcXPVgrsxmSNTOLKJJJHFFDABDEDC@>@BF<P\\]fmtx{}wqjemk]VWVSPJFGIDA?><<;868=??==?@A@?>><7000/6=<::9:;=@ADDFILOOPQRSRRQQSUWXXYYZZZZ[[XUVXWUUVWSQTUTY^^XQRW\\[YZ_a`[YXXYZ\\ZXE0,45/.17;<=?ADFEECABB=88;?GHDBBHLKEBACEDCCCDEDA=@N[aV<5G^b_UH8375GZ^cgV:9NZUQQF97<><;;5?K914569==:=DF@89@B@HIEtr=>=<748>GJJOPLFA@?=<@@>>ADC=;>@@AACKUUUUULDFNYa`YX[I21EV_gbQC@BDEB?>=>CFEDCCCC@<88<AA<53333321123566;EJA8888:;;;976579<BDCCEEEEECB>=>>>>;88:=>@FJIC91369888?HKNTQ>7BKMMG==GHHPL=;BA=8<JJ?:;?CIKKMNKHFEEEDDCDGGB??=?CC>87@JNLJIA;>CEEGMJ=;DGECCEGB=?DECBA@?@AA<4137:;:8779;=>=:9=BBA?<97554765:?A?<:8999788;<:;<<<<;;@EEC=9;=;<?AACEA=<<;977789@>5:DEFCA@CFGA97976532127::::::<==>?><9:<=AEDA@A<:ADA>ACB?><97778889;=?:7555542457<@?===<=>@@@@BBBBBBBBBBBBAAA?=<8411365598:@CA?;9;;4.6BBBB9/*+,/6?IE=83/,-37873.-./-1120.3>EAANO?4475210/00140,-..-046767666632223320-4;7234322455:;87;=<;;<=;:99999932110-*,26>X@4988;/GX468674323210120.++/588:>?><;;0-5Mc`TRRH>D?01?NXUB8BNPQW[_c^XYWF3>BPjI1,7AILNNNMH8,042136:<73:@B@=?FHE@<:::;9865444431/.-+,.1342231/.169<<;:984.,-/1468;;<<GHHIJMQQQSUWX\\^aa`_^^ZTQQPMKJIGFFGFFEFGGGGGGGHGFEDEEDDCCFIKS_d\\PECDA@IZehimnprqpqtwzwbJ>;<?A@@@AABBAAAABACCA@AABBBCEGHKLNQRTX]ZSPMHBEKMMJF@==<<<<;;<>?@A@BDDDEDB@@?=<;<=:;AHR]cieN<;==BJJGGEELPSVYYY][QG@ACBBDGJKNRXZYXWRNMLJJJKLLLNQPMGFEDFGJKKKKLLQYagjllmnnqpeZY`gc[[YW_eX^vi_\\WVURRPNIFMXZYXWVU]i`inNOQQRRQkcMFNderdr}lffnefyzofga[VV]jutlZQU_bdl`Q\\`]aUIGGGIJO}hZV[oob[SPT[]TLOO^lXLMNLJJGAMQR\\edjl^TQKHLPMEEVgcZRc^FSuZFKOLIIJJIGEEC@BCCEGJLLMQ\\d_M@@CCZllZLIHDAAA@?ACDCCCEGIMR^hj`XZN<;=?BBBAAA?ETYQG?>=<;:<=>>>=<=@ABCDB@>=:9;=>=?CB=8>=?FFGGPTMB9>R^TMNE<?CEFEEDEDDAEQ[`a[SOGA>?PG>FNRXOQYPPcvoaYQEBCCFGGHJLMMNNOQSTUVWXXYZ[ZYXWVUUX[\\ZYURTSSUWZZZZ[\\\\]^__`bcccb`\\TRessc^K:;><==>=?GUWTYVI@>?@BCCCCCGHDFLOLEBBBCKUPGGJRSMMC>FMLJGBCHLLSn|z}{jZQTZbg[NPNEBCJONKJVcd^WRUYWNNYdhfUGEFFECDEGGDABCDEEEGGHI?D_q{yxtnsqearvnqooy{ysxvpx{pgovobYVXdrzwgVSSPNLJJJHFGB@BDCDD?<BFI@]Wcks{~|tqokni[]ZYWRKJLKGDAA?><:8668878<>AA@@@?=::::;;:9989:<>@CDFIMNNOOPQRQQQRSVWWXXXXXXYYWVWXWUWTSQRTTSW\\[TPRY_ZY[_a^ZWXXY[\\XXE3AC5,,2:<>>?AEIGEFII@658>DJFC?=ACCBBBDGFEEFGLOKGRXbeaC3BdfgmdF9SUVakeS<7LacVMGA;8667897AJ91456=HIECFEBBBBABB@>Cq\\JRQI99ABKMHKLI@979;?A@?@AA:8<@@>=;:BQTKMSE:ERY[YYXR60?HGM`h[JB?ACDABCFGGGFDDCDF@:9;AD<358435423347:87<BC<;;989;9315556;CGEABHIGFFD@>?@>;:;::;<@GJHC93379769EMLLNPD8>EJONKGKLHGC::>><?BEA857?EJLLMMLKJGEDB?<;?CDB?<=AC?76=EEEJLKLKFB@=>?<<@CA==?A>88?C@>>>?@A?<96664479;<;;<>:426>B?9:::9755336998840135568:9:??;::;==@CA;9<;87:>EGD?<<9559::99DJ?<CDFCA@BB@=<<:850,/435999;??==<=BB=;;;>CEFFA>@HNIB;:====;87777678;>?@A@><733455:??>>=<;=>?AAABBBBBBBCCBBABBB@@>;852346::<ABA@<:;:66;AEJE4,.3536?<442/0138:::76679520.,-8<;=IWVF66;;751.---00,**+.3666655564//3422235:<96321101466321569;:;==:665337554520../.IK;4988;3NV48:;:9653221/./0//..1016;===:0(&2Vi`VVWI?<209KUQ8)8OWWY[`f^VTWPJKA9[K)4?FHIKME4,,-5<638=;1.:DDDDEIJE>888999::999863222//23467553.,2;BB>::;;:64435778:;;;:GHIJJLLMPSVWXZ]aa`__^[URQOMKJJHGFGGGGHJKJJIIJIGFFFEEECCIW`gmprodVIEJT_jkfgjllmmkouvwyudL>=?@????@@@@@@@BBCBAAAABAACCDEEEHPX[\\`abb_VJAADBA@>=<<<<<<=>>>@BABCDDEDB@@@??;7:@FMWbgaaieR>9>A><>>:?KLHO[[Z\\]^YMEDFFFFFHILKMRXXTRPNLKKKKJKMPQRPLGEFFGKMPUZ^`ceijkmnnnoppligda__\\VU[WRr}maVTUVUTRJFMVZZYXXY\\f_ipNPQSRQQkZJENdem`p{pkfndfv}ypfj`RR[jtrvp]aosytseXUPHIKJHGIHZm[RQkpc\\ROOZbYNQQXp]LNMMLIGDUWPcojgj`SMFEHJKIGNYΎjcUN>SyXGLNNKJLMLJHE??EDDDEFJQVWYahcTLIIPW[PIKJD?=?>=ADDDCCFHHPo{tqokdRB<:=AEEB@AAI\\^PDA@BGMNKHEB@?=<;=@CEB@@>::<<;;>CA65<<;GMTNPWPGCIRQOPSPC>AFHGHKVXNIVahh_QEA;449KHFNTVYZ[WMO[tn\\XRFCCDFGGHJLLMMMOQRSUUVXXXZ[[XWWVVVY\\]\\[ZXYYXYZ[Z[[\\\\]]^__`abcbbbWC:DTms`A8=><>?><GYjme\\TJ?>@@BBBCCCCCABDGHDCBBCFHFA@IW][\\YSOJHIEADGKIHUhqqnfQ?BP[f\\GIROECFJLMPYegfoqdVWYVZgc^QJGHGFFFFGIGBCCCFEGGFIDMz||xupq}ue^pm^gpv~~~}}wox|{skgeb_a^Zi~xaWUSPNLJJJHFGC?BECBC?<FJJJ`[hnz~xosvoiebe\\`^SMNMMIFCCAA?>>><:658<>?@@@>>>>>>>=:97889:;=?ABFIKMNOOPQPQRTSUWWXXXXXUUUUUVWXVTWVSQQSTUVWXURTY][[^__^ZXXYZ\\]WZSJJ@0+*)-1346:BFEDFHA7677@IGIPKCCBBBDEHILNPPRTZ^hylefiO4>b^coqZ=_tiedR80E_h`VKDB@94578:7>I92677?IMKGFDABA@@???DJKNPPUTL<>IJKFCDGHC<9:=AB@@@?93;BBB@:42:IMKIJ<3<CFMSXWC6HZMAG_kcQFDGJFCCCBDEGGGGEEGFECBA<556533564248=B@;=ABBBA?;98502666<CFGGEEHIGGHIFDCB?:6589:<?DEC@94589769ADCFDGB879@GLOSTN@89:<=>DJIB;318BEHLLKKHJNJECCB>9:=ACCA>;;8658:;AJMOPMJEA<:?DDDECA>>>;748<<<==><;;;<<:97579::;==<9668<?;46799876640123455579;;<;88;>;85566;?>;:;:967>FD<7:>?76:>BB@CIHDCDEB??>=9<@:333.,4<943347;>>=<=@B?<;:=BDGKIFEED@=;:99:;:87776668;<=CEFC@:3343359:;<<;9::<@ABCBBBBBBBBBBBDEECCA@@<4128<<<>AB@?<:89:9@HG:028<<66:4.022468;:989;<<;5/,*)+3:;@NRJ=68=>>:61.,,,,+)(*.5765779630-,,/0/05<>;867654216;70-+*.5::9863243/0443343336.2XA56998;5ZT59;9872//00010/6;;:873-19==>70.//Mjd]ULF=8977BJH91>RVVVXesmYCEWe\\POK\\Q3?CCCDIF7.,,8C;3341-*1<BDGHJLF:224689;;9776578875455455541/1:AC@70048<==:678758;;;9GGIKKIJMPPRVX[^aa`_^]\\XTQOMLKJHHHHGGGJMMLLKJKIHGHGGDCJT^hmonjkkjga_`bgg`^bghimprwyvvvyvdL@??>>??????@?@BBBA@AAAA@BBCCCCDGPXZYY[]_][RE>>?>==>=<<<<<>@@@@BBBCDDEDBBB@AA>=CKNPY\\XZ`cfhYA9==<;<;=FGBHUZ\\\\\\^`\\SIDCEFGFHIIJLORRRQOLKKKKLKLOPQSRNHDABEGINSY\\_djmmoqpmnnomljhjkjfaZSTLT{iVTUVUTTPNSXXYXXZ[X]dkyoPOORSQQgPKFQegfasw}ynYcp|w~|ncnbOO[a]dqfx}o|xVPTOLLMMLKMomYKIhob]RNOY]UNPSYxeGMOLKIGGUWSfslij_QLIFHKJRNFDvm^QMD\\~VINONLLPQNLJE>?FFGFFFGHPUTV]dd[OKGHIKLQPF=;==<AGFECBGIEXjYMHKO[UF=98BKJEBBCIXXMGHIJLV]YZXSIDBA@>@BDCCB>;<>:7:>BA65:FKS`hWNPMKPTTVVY][NGEGGGJQ]\\U\\gjg_OA=:7458EFIRZ`bilaRMTmfYXSHCCCEFFHJLLMMMNPSTUVWXXXZZZXWWVVUX\\]]]][YYXYZZ[[[\\\\]]^^^_abaab]M>75>Ti_@9<=<>@?E`uxdJ@BCABCCBAAA@@@ABCCCCBCCAB@BMZ]_feWKHIHA<CEEHG@Ob`YXTG>AM\\[NLPRMGFILOQTaieutZ`g^XZUNFHJIHHIHHGJIGFFGGCCHNWqwhip{}b_jrghv|~vyxv|~wwoujfc`bhaYevn\\WURPNLJJJHFFDABECBB@?KJKV\\ciny~ppvxpe_hh\\c_UQPPOKHEEEEDBBA@<:;>?ABCBB?>><:::98756889;=>?ADGJMOOPPQPQRTUVWWXXXWUSRQRSTSUTTWVTSQSUVXXYWSVYY[\\_^\\ZYYYYY[\\WXP@3--./*,-/..0359<DA73997?JKR_^XQLIFIKMMS^a^[VUXl\\[jhM6=\\QL[nlO]vnfYD57Lbg_XSMIE?=<<;;7=N>2677:>@EHGA?AAA@@?AHPLIMOPPLBEGIKGB>DJIECBAA@?AA<46=CGHF?626>HPPE92469EQXVCG_aLEL\\igXIIRSKFFC?@DHHHHJJHGFGLI8146434465248?GFABEEDDCCC@:3/048<CFFEFGGFFFGJLKHECB=41589<>@@=:868:<<==?>>?=??86:AEHKPTL80:A@;?PVH9106CKHILMKIHINLFCA@@?>=?DGE@9677865;DKMLLJFC@>>@CBCDB>;=@@>969:;=??858;;;;::856535:::=@?==>:6766666687200038968=@?=;977=>75435:>>>;<>:7:?@;32:DG?=?DIJGBDJKGEEBA?<86?A608<66;><852037:<<;98;><::>ADJNKFC?<=>@A?<8789876677888;?CC>9842223347::987668;>BBABBBBAABBBBCDDCAA@BA;447<===ACB?<:8889:;725:;=<626756742259;:<>><<;6-*-1.,6>DKMC867;@?9561..-))))*-46678:;8565.*,1//7=;:747985315850.-+.26962/.1210/001//.4=?/@`@26;;:95`R69;:=80.0/0/87.4AIKKF?3258;:;>CF=NhcbQ5?D1199:=B=<LVTSU^noZ;0TcRKIQXPc[.AD@AEKJ>2/4=A<5/,++)-8AEGGJKD7103789::96666<?;9:8423332323699:82,,.3:ACA<53336:;;;GGHJKHHILLMRX[^abb^[]]ZUROMLLJJJJIIIKMNMMMLKJJJJJIINV\\_eiihhjiiihgf`]a`]_adfhmswwwuuvvwsbLA@??@????@@@@ABBB@@@@AABBBDEEFGKPQOOOOOLIJFB@??>>>>==<<<>@@@@AAABBCDEDEEEEEEHHD@@FOVZaedhiXC<>><;==??<?KPSW]_]][XOFDDEDFHKNNMOOPQPMKKKKLKLOPOOSTRLDCDEFEEDFKT[_`cfilmmnmmnqvxnkkaSQTNh~XMQQSUVXXXYWUVY]ZX\\blxpPMMSSOQcUQJUgkcbqwznS_n|yrzcgqbPS_a[kzdYfjQQQQTVQMLMMMNo~fVLPlm]\\QKQa]OLQUSicEHPMKHGFMRUkwpll^OKLLKLLNRHHohTRSMdTHNPNMRUUTPMHCBEFGFGGGEFIJILSZYNLJJLOVYXG>=??AGJHGFEHIFPE9:<CDPZL??CJOMHDB@CJKIKKKKLOVZ\\\\TJFDACGGDDEFCA==>;;=?@CA6;a^^mjSD>;AIOPU\\aggZRNGEGJNQT\\ceb]L>;987679@DGQ[]fnrkXOThaWYTHBBBDFFHJLLMMLNQSTUVWXXYYYZXWWWVUWZ]]^][[ZYYYZ[[Z[]]]^^]_aa`caP?<;;:<LO?:=>=?@AKovH@DCBBCCBAA@AABBCCCCCCBDBBFLPVQLJGGIGED>:BDEJMCFTWSU_\\G<BLRUTLJNJGJKMOMS^^k~sfol_WMIFDGKIIIIIIJKIHHHFA@Me~seeoyc`dgnv|wqmst~}~||}ovt}qkkd]eiefkib]XUQONMLKJHGEDDDHDBA@@OKQa_jinxvosvtlaYgg\\a[VUTSQNLJJJJIFDDA><>@ACEEDCA@>;:987653578:<>?@ADGJMOPPPQPQRTUVWXYXWVUUTSRRROORXXUUURSWVY]ZUTZ]ZY[`_ZWWWVWXZYYS=+,11259.*(((('(,1@@97<=8=P]`__c[SLFHMTW]ih^XWRVn{[\\l\\@<AXQ:EVigkuf[SI>=Refa_^QJGDBA@?=9?L@1333542:EHC@BBCCA@BDDGJLNONLE@=?EFD@EJKKKHA=;>EC979<@EIKJC;76>HK@7425;@GXYMR]VNLKQ`gYHJUWOJLJCCDFGHIMNJFBAIK>9?>646665347?FE@?CHA:;?DEB;2.6CHFEFFEEEEEDFHKJHGCCA61489:<=<;:;:=@ACEEC@@?>=>>>DEFEFFKC54>FD>AOSA0/6@JMKLNOJFGJJHGC?:>CC?@CEDA9579975:EMMKIFB??AB@?BCCB>;;<?B@<<<;<<<87:<;;<;9865423789;<<9:=>><85555689850/36522;B?8467599456679>A@:;=;;<=83/18AEEFHJIIJIIKLKFDCDA<8;@>78CD>=:9==8558:;;:9659><9;?@DMNG@==?@@ACC=5367764468876:<><844335688569987654459<>?AAAA?ABBBABBBBB@>@CA<:;=?@@@BB?<:87783.0359;<:5137774/.,,4<AED?<=>7,*493,1:=CNOD638@<53:7301,())*-26788776699401223:<999789865666224300224211120100//0..,.6=5SV:37;;<9;_N6;;=>80251//9=10BNPQNH:34688BPSODJ]acR8EH.(3965<>>NXUSWinP3(<}wMQY_u{`[\\31DEBEPRLB<?EE?740.-,,4<@CEEGE=8746899998678:?@==<93/../02444337;6/./3:@BDB94347:;;=GFFHHGFEEGLRW\\_bca_Z[ZXVSPNLJJJIIKKLOOOOOONNNONLLOW\\[Y]db_aehihgfb][[[[_a`bdgmvvrppqvvtvraMA=?@@@????@@@BBB@@@@@BCCCDEEFEGIHHHIKJGCGHFDB@@?>====<=>??@AAAAAABCDGIIIHGHJF>:9;EQ[cfa[^e\\J?<?><<=<8;DFDLYYW[`aZSNDCCDFHILOPPPPPOMKKLLLLNPNMORSQLGHIJMPTUVY\\]_`adhjlmmnnquumikhXNYfesrVROSTWXYYYWTUY^ZV_[k|kKMKRSLOcb]S[gnddntv~snOV[`kmrlemp_SYdjmqhWQXuRAFMQRONLIGFMVp{bSNZqk[\\QJR`^NLQURSRHIPNKJHEGNTmyoom[NJLMLLMR\\X|tiTRVQiRHNONLPOOUSNKLJGFEFGHGHHHHFDGLKJJJJJKRXXIB@BAIMMMKHHIJHF=;>FMOOWUDEONLLHDA@ADFGHHIHIIKRRNLEJI@ALVQNLIDID>??@AA@FH8<pj`h[I=56@IKLPUX]eaXSMNONNKQbg_`TA95586699<BHSTPR]jhWRW`[VYWJ@@CEEEGJLLLMMMOQSUUVXXYYYYXXWWUUWY[\\^]\\\\[ZZZZZ[[[\\\\\\\\]^_``acZE::;<<<<?><=>>?CEB_sEADCCA>>?@ABBBBBCBCCBBACCBELNND=77AHFABBAACMROGJSYYZa^KACGLSTPCDGFGILMMJIPaifnumc]ULILQNKKKKKLNKJJF<>Qoy}yhdq}wqhbafmrqgaow{~|uqv~yoiiimmggmkda_YUROOOOLJHGFDFGGGDBA?KO[dgimv|stvupg\\V]a^]XVVWTRONLLLLKGEDA>>@@@BDEDCA?><;875434679:<>ABCEGKOQQQQQPQQSTUWYYXWXYVUTSSROMOWVUVUQSXWWXWST]b]\\_a_[XUWXYYYXXUB3465476311/--.048=BD?<<=@VhbTNZ_YRKCCXa\\geYQPQ]unBZgD8?CLP?@FTcsz_NPO@Ihmjfg^NIIFDDA??<=E@51122225=FFDCCCBA@?<>FKKMNMKG==>?@FGHJJJJD<89BEB98:;>CEHOK@6369:99;979:BX[QTXVVSKJW_SGJSVPKLOKGFFGHHKKIGB>AFDEKD85888768=@CB<8?E=3369?C?77BKLIHHGGHGEEFFHIJIHDDC716::9:::=ACBCDDFHFD@?@@>>CEEDCBA@B<7<BEFDFKG:78@EIHFFGHDAEGHFC@;7<CDB@@ACA96;AA@?@FPOGDCB@?@@@BINMLJIE><@CCA=:777:<=;;=>=;9755667798679<>AA@<:8888999633443239;83025321169:75;@A:7;=<<:400026<FJLIGIKNNKKJDACGE?=?<:;BHC>=67@;4<B@==<;:98:<;9=@?BIJC=9;???>>@=8665433347966:997653237<><9568776651269;=?@?@@ABBBABBBBBA@@AA@???@@@ADB><:8986236413698410672../-,3?IID@=?>6./793-0:>CJMD537;843:;623.)*+,/36754344456655239=<9::;=;:;<><;74773001233442020333520.*)-<UB778?D@=@fC6:<=;5/16.00:A:;GJLMQM902667?JTPIKS^bUHME3-15415:<CHOWbuqL=;WrSZsj`U3:HGIKLOQJCHOSM=221///27>>?CFGB:;;88899999529?@??A?93.,+.1244446;>81026;???A@;436999:GFEFFEEDBFNSX^`bccc\\TRSSPMLJJJIIJJKMPQPPPOPPQRPPSZ[RKOVWVZbghgghgb]\\[YZ]^_`dfjppnoprvxvuun]JA@@@@????@@@ABA@@@@ABBCCDEEEEEGHIIKNNMLNNKIGEC@?>==<;=?>?@AAAAAAADEHKKKJIHGFEB?>@BQdbZTTdjYE>>?><;:9:>A@BFFIS[_^_bVE@CFFHIKNPPPPOMLKKLLLMNMLLLNPQOKHGIJRXY[`abbcfiklmmmmnoonb^_RMYkcTj^UQRSVWXXUTUX\\XTaZj}fGLJPRLOgb`^`grdfolbjknPR[[cub]hpnc]cimpgRJOVbBHIIJMNNOLJIKMTt_VV`r~hYZSMSZYTQSTSOHHLMLKJIEKNRgtnje[TQNMOLXlvyy}nUQVPnPHONKHHHGKMLMOOMJGFFEEIOQOLIJJHHIKJGDDJNKHDCAU`URKJJIJHA??DKOPOTYJFG@FJFA?@DFGGGGGGFFEHE>DHGJMMKJY\\ZKALPGABDEEFKMC@mhZ]PC:7@KPPPPOPQXVMDGU_aZQPWZdhQ:635889;99?KUQE7>W]OLPPMLQUNB>CEEEGIKLMMMNORSTUVWWYYYYXXWXWUWXZ\\]]\\\\\\[[Z\\\\]]\\[Z[[[]_``a`Q@;;:9:;=>=;=>>?EG<Lt`=GUN>;:9<=?BBBBBBBBCCBCCDCELKGC>6=IIFEGLJCESXPLPVZ\\\\\\ZOEGMKIILC?CEGKLLMKDEQUWkwvh\\ZQLMMLKJJJKOPMJC?Rvytt}wmmwyijsf`cijihbgu}tw}o}x||qjjr~whikeba]XVRQONNLIGFFCFJCIFAB=EQ`egju}xryzuncXTV]b\\VUUUSRPNNMMMLIFDB??CB@CEFDB@=<97432425789;=?ABDFHKNOQQQQPQRTTSTUWYYYYVTRQQPPNOPTVTSQSWWTTSRU[a^]`a_\\XUWZZYYZWXSFBB@=>+3FIEADGEEDAFIB<<CFMVSJETca^YH>R`\\fdXL;:KZRCMO@<?@A@BDGJQcpZMPI?Rl`dg_OIJIGFJHBDDAFGDA>=:9849EHECA@@??98BKLLNMMLF>@@??FIJKJIF@97;BA>98::=ACEGD<4235568;87:BOYZV[]\\]YRNTWOHLRQKGINPLHGGGFFGHFD@ACBGJ@557767;AEEDC=9=A=86548=?AFHB>AFHHIKIDBEGHJIIGDC@627::9998:BJLGCBDEDB>=>=<=@A@@A@@@AA@DFFFINNDACDFHIIDA@??>?BGFA<:=CFEB??BC>;AJQTRRQOMHBACC@=<>ACGQUQOQQI?=@BA<9756<@>=>?==?=64567678;==>@??????><9997459965::877422115657:;:859=>:7;=;;;50///27BHGGHIJLLKJHC?BFE@>=75<DD@?=6:@98EKE?AC=87899:;@B?>@@?<98<>=:8<?@>95321369:889887776447:<<:878766676:?=:;>??@@@ABBABBBBBAA@??@@@>><:?D?:9877755::423566533871179611:EGEB?>:4/0552.2<ED?;:887554467432-)*-.1465/,.2443567557<>=:<=?A?=?A@=?<6695/0455310/0/126861-+--&>C2447?G=78f:668862.06-219AAHJJILOI>987525:JKJB:N_WNNC76643126751=Kawo_h`ce[]_nP,>giMGUIELE<@LUN;/0101587;@BBB@><;<;9887788537>A@@CB:42//5:;>><:<<83..158;<88?>6467643HGFFEEDCCHQX\\^_`abd_SNOQOLKJKJIKMMMNQQPPPPOPPQPPQQNLNNNU]acfgdefeb_\\YYYYZ]_bcfhilptuuvwtsqgYNHB>==>????>?@@@??@@@@ABCCCEGHJLLMNNPPRQQPOOLGDBA?====>@?@AAAAAAACEGIJJKLJGHJIDA>=IXTPU^cfbTF??A=:::;<==<<::EUciiml[H?EHGHJLLNNNOMLLLLLLLMLMNNOQRQNKHD@ACEKQW[^bgjlmnmmmooqrdVOLRW[]T^}h^OOQUWYVRSVVWTP^\\j~dFJJOPMOiU\\a_gsbhtikngnWZdkl]Rajieemofa]TLLMe{SFKKQXa`WSRNIFDFqd\\\\`mxgYVUSVZ^a^UQQRGHKKKKIIFKOLYklfYT]^UTWYqwxaSLMKv~NHNLGHFDDGIJJIMTQJEC?DLSSQPNMKJJIJHEA>@GKKFCCSplKIKKGCCCFHJJJR\\PJDAMRJ@=@DGHGGGFGGGHJHDIOCDU]TBK[`L>GOICDFHKMPSMHj^UYK?;<GPQRUSRQPOLA6?QYXX[WMIXhX;42379798:ALWUH68JNC>>?@BEHGA@CEEEGIKLLMMNPRTUVVWXYYYYXXXXWVXYZ\\^]]\\\\\\\\\\]]]^\\[ZZZZ[^`_a\\I:9:::;<===<=?@@DI=BfuK:JeV87===ACB@BAABBBBBCDCDCFFFFN@5BPNJKOPLJKNQWUKJRUSW_UEFLG?>@BBCDJPRNOUWNILO]y~dQOMKFEHHGGFJQNFJX{wngjolgdmthfjtf_cihcafr|~}r|u|nwy|z{wlp|sooib`_[XURQONMKIGFFDDIBGFDA=CVafjs{~ot{{ri`VSV_d]VUUUSSRQPONLLKGEB@ADEDEFEB?=<952100235688:=?ABDFJKMOQQQRRSUVVUSSSX[ZXWUTSQNNNOORSQQQSWWVUSRUWY[]_^][XUWZZZ[ZVTRJE>=BN5(158:>;:84=GPJ?ACFFGHLSbgd`\\ULLX_i_UP@.2:>=CFDGHB42;DHNNT`VUPE>ELCKUNFJMHFHPROPMEIQ]UHDEE=9BJHEDB@@?>>DLOMMNMNME=CDA>BGKKJJE<57>@?<;:<=?AEEB?;6456666668DPW[Y\\c`[^^VQRTNJOQIDGFGQSMGFFFGHHGC@A><BDA<;<604BHHHHD?>>?=>=:9:>DKJB844:BFC?BBADHHJIIIE>;538::98:84:ELH@>ADFC=;<;::78>@AAAAAEJIGEEIQPHGFGHJLMLJIFA:8=A?;89DIEDB@?BCAGUY]]\\\\]TC;?DED@==?A?=EMKFIQMA:9;===<<;?@@AB?;=?;41333457:=>>?>==??@@=:98316;958??;8541113:=<==<<;:;<<<<<=<<=730025:@CEGIIJJKKKID=>BC?<;66<BCCB>:<=;AIKFDGH@73678;>AA>:78<=;9:<<:8;?ED;544348::::767:;;867779;<>=;98788@JKC99==>@@@@BBABBBBBA@?@????==:78841223454578766664444557:?A;105>EFEB;61./220.07>;2.4;;63121123430+-011452/,-147988777<?<9<>?@@??A@;8;<7487026863/../-1.560+)),/3B4+,-01=2-1`953433556:5633;EJIKMOGCJHC93168=?C5%6WUILB799633333/+.0Ghaip[LOcebn|{9F{}fRPJC?822<HG7-.0139>97?ED>;<=:<?=<974438>97<?>?A>8623;ACDDB@?93/-/245783/7=:76420.MLJGFDCBBFOWYXY[[[]_ZSPQQPONMLKMONNPPPQQPOONORQPOMMMLMOT[addc`^^``^[ZXUWZ\\^bccdfjorrqrtttrl`VPKF?=????>>?@@????@@@ABCBDGILNNMNNNNOPNMOQRQMKHDA@???>?>@AAABBBCBCEFFGKMKJKLKJE?<?CEIT]^^da[M?<?=<;;;;<<<BKXcimmnplbNACGGIJIJKLLLLLLKKKLLKMOOPPRSTUUSQQQUZ`hkkjkklmnmmnprqrshYWYYZ[[ZvpbSNRUVXVSUVUSRMWYjdHJJPPONZGRY\\gqahwhvwkrWXcst]SX\\bY_ol[SUTPKQ`qYJKVltvvjZOLHHJJoaSOZemd^ZZZYY`hniZPRIGLLKJIHFJOJQcjgUP^d\\XYlnkrgo\\LOIFD{{NJNNLOJEDGKLF?BNOIE@?FOTUQONLJJJIHGDABDHJIGFHGb޴_EMLIFEDDCCCDL[]QJNX[OB>BFFHHGGGHHHKLLLKODBK[fXNT[PBCGFDEGIKMOQOJ_NNVC7=DHKJNWWVTQNNB>LUJEGFJVSRY\\G?977649?CIR[[PBEIB9788;=?@@AAACDEGIKLLMNOPRSUUVXXXYYYXWWXWUWY[\\^^]]\\\\]]]]]]\\[[ZZZ[]^^_VC89;;<<;;<===?@@CGB?Nc}`CAESM;<@=AIJCADBABBBAABB@@?BA>MTC?NVRKIKLNONJKTP@>JLGRaVDBDA?>??BDDMVVOR^d^RRRVgnXFHPKGJLJEEIJGJ[~ttrmkmkir~|lbgiisg]]bebclx|mn|w}x}nk|zyz|vzplssia^]YXURPQONLKHFFDDICEFIB=EYcjuz}truztgaZTTZabYTVWWUSSSSQPKJIECCACEGFEDC@<=<730//0135678:=?ACEGIJMOQQRSTUVUWYWVUX[ZURRSQNKKNRQOPPPQSWWWVUTUUUW\\\\ZZ[ZUVWYY[WUSOKIIHHK?++,,-,)*)),3ENEFEEEEFSfqh\\YX\\[QRY_RN`eI769;GPPRTJ718AEKOSTSUOI>0602?EGIGFJU^`cc]RMT^XPOOJEFLLHFGDB@@ALRNKKLMLNM?:FG?=AFIHGHB826>?=<<<=>ACEGFA;7444556659FQW]^_dc``_YRQRNKPQIDFCBLPLGDEGIIHGB=968@CFIMI:-4EGDFD?===>>??>=?DLMD=;823;?<58BCDGIKJJJF>=748:<;7889:;BDBBCEHFA><99;87=@A@?>?DJIEDEGKLGGGGIKMNOOMG>53;=;99;>@ADEB@@CO[_]]YUTXQA;@FFDA??@?<99>BBFKH@869:=@BBCB@?=<<;<=93122244455569=<<>?@@>=<:856987:==:8530/27<;9;<<===<<<=>>><=?;74468<?BFGGIKKKKKKE<<AB>:89?CCDDB@><;<>CJIFGJF;547=>>?@>969<==<:89;:9;DE<65655899;;6368;956:@CA==?><<><99FPKB;879<=>@AAA@ABB@@A@@@@@??>=;951,+-.26876678865432004:?@BA<9=>ABCC>82..023233451-,06830//..037:82476245311455:=:8987;<85:=??>?AC@7117835735888433320/,920**))+9C/*)*+,4/+8h9313329>>@>:403?HIJPNDDQNG82A<A?A@;53QM:D@678655420/-.*3ZmpZPNakd^[|ut}~nSLF1(/13992..0249@@9<EF@>><:;@A?;30/5@B7/39<=@@<3-1799:<?@?:2-1896555403<=862.2:TSNKGDDBAEINPPQTRQPW][URSUTRONMMNPPPPPQQOOPPRRRRRRQLKMLKUcfb\\WV]a_]\\ZVSV[^befdbdgkmmoqsttslaWSRPJDAA?@@?@@@@@@?@@@BDEEGHJMNMNNNONNMLJOQRSSPNIDCCB@>>>>?ABCDDCBBDEFGJLLKJJJKJE?<=@CGIOZ`ejgYC:>=<<<<?@L_fe`bmnjlongRBBGHFFIKKMMMLKJJJKLLNNOPRSTVWYY[]\\YYY]dikkoprrqpqqtsptuphb^]\\\\`dm_RRTUWVVYYWUVPWUgcELMQQMOGBCNZfq`gvjzuqwOK\\v}]`eZTNUb^UQRRQOXmiWPVnzxsePIHJJEaPGDXabceca_[TU^lwsbOEGLKIIIGDIOMLZgi[Va`]]ZuwTKHFU\\JFNMIFxPKONPXOEBCHJD<:BDEDCBGOTUQOLJHHGFFEDBEKPNH_`OGLycJJLJIHFDB@AADQaSNRTPGA?ELIGHGGHGHHIICGKMFHFPee[STRHAADEEGIJHDHLELEELB9AGFHHLVXYVQOPEIQFAFGFU`RY[XV\\VLLF?@CFKT[`WIED>76889=AAAAAABDFGIJKLNOPQQRTTUVXXXWWWWWXXVVWZ\\^^]^]\\]]]]]]\\\\[[ZZ[\\]_\\QE?;<<<<;:<==>>>??AB<<Wr\\BCD??A?AA;?HMHCDBBCBA@@>=<;;::@NPIOVURKA?JRONPQI@<?EGHQZRGEGHIIEBABDLSPJP\\ba[XZXPRPCDNMNPOOIEABXm^Zclg_gv}xrhdfegrf\\Z]deis|vbjo}{ndy}ukmqoha^\\YWVSQQONMLIFHDEMCCFMD<D\\hpvyuuussi^ZUT[bd_YYXWWVSSTTSRMJHFBBDEGIHFDC@<:730../0245678;>>@DEFEHKMPRSTUUUUX[YUPNOJBBCHH?;<ANSTRQPQSVWVTUWWUWXZ[YX[\\VVVWWVTTTQMJGFFHK3&+-,++,-/)(1BJEDCCBBM]oe]^aZ\\YQNNHMluU;65:MVTYaYE54>HMQYSKFGKC4;32@IB>?HYcgfjkic[TKIWbXLLMLHEEFB?>?DNNGDHLLIGB6<HD>?CEEEED?625<>=;=?>>ADGHFA;7333445559BJNU]`dkjb^^[WTOMPSRNE@ACCDDCBBBDFD>8548@FJSWQ@13CHC<9899:<===?@DJLHA??;669:;;>CHE@IOIHJFB@858=>=;9<EB9>GGHHHGHGB;78<>==>@?>=?CGHFDEFFHGHHIJKLLGD?:5029<=>>>>=?BDCA@DWf_\\]UIGLMIDBCEEEA?A>:965:BFDA=99;;?BEDEB?<86:<;;8323433322226:==<>>????@BB;57<<:9988877779;968<<<??<;;;<>>::<:66777:>ADGIIJKKKKJE<;@B=:8?HLHFCBCB><;67DJDCIG<;=?@?>??=::=>==<;:99989?@;767558<=;:64333337AKNF>;==;=?>:8CKD><8459:;?A@@@@AA@>?@@?@@???>>==940/14688998885321/09CFB@@@@FIEA>>>;70-/02356862010-/0.-.////16<>98:74453/27858:;?979<<;64:<<=>>@?7.,4:5268987854552/-6=62.,++*15,++,+.01+Df:2/356?B@=A801-4EJHHJEHSMJ3<P<FEH<;JJQL69@>7532221.+,1/-Lt~pbSNbok_YqRB2'-3321/..0357>E@<CF@?><:9==;8401:@;2038<?@A@6,+.//16=?@>3,4==:96555489751,4LWVROKFECCCDFJMMNMLKQXYUQTUTSQQOMMOPPPPOPQQQSUTTTTTQPNMKLU_b]TR\\_`_^]XSSUZ`b_[^aabeilpstttsle^XUSQMFB@@@@@@@@@@>?AACEGHHIJLLLLMNONOOONPRSTTURNJHFDA@?>>>@CBCEDBCFHIIKLMKJJIIKKF?>@?=8=PahkmkbN?>==<<?BKVRLNW_`bhllkj[FCDDFHJKMNMKGGIJJLMMNNPQRSUWWWXZ[WTOIJOTY^cfgjmnoopolnrqka_]]]]dm[TRSTUU\\\\XWYT_WfbGOQQPLRaNNBN[fr^hvkzwuxRPc{Zcs`JNOPRSSSSSSUXVQRd|{xsqlSHEEFB~RLHFY^^djigc^VNQbt|z`BCKJIIIGDHNMJO[b\\]bZR\\y~YBBEHHIBFMQNGvOJMJPZRGB@CDA==ABCCCDFLQSQOKFDCBCCDBADLRMVnLLZlwTHJIKLIFDCBA?>GaZNOJA;;>GPQLHFFGGIKKLGQ[[LKHCKVZYUPMGDFFFGILG<>GE@CDEIIJLLLLOW]_ZPLHBGFBMRZaZH9Lcc]d`THFHKLLLMMUUK?>><8899?DFGC@ABDFGIJLMNNOQQSTUVWWWXWXWWWYYXWVY\\_^_`^\\^]]^]]\\\\\\[ZZZ[__THDA<;::::;<==>>>>?@@?>HSB=BCB@>????CHIECCBDDA@@?;:;;:<>BEFNYRIJK@=KQJLRSD<>AAEJMOMMOPOOMJGDBCIKIFJXa```_[MJSOKNPRQNRE=Y~wfb^]]\\]eumdgpohec_eqj^Y\\ffiwo^k~tymcx~~ukkopkfa^]YVTTRQOMMLJFHDENCBGRH7Hequv|usvupjb[WSWcif_^_ZVVVTSSSRRMIIFCCDEGGGDCA>:61/././0235668:=>@CEDCFJKPTTTSTUWWUTK@9:8779;:63//6HWXSOPRVWUSUYZXZ[Z[ZXZZVUUUTSQSSPLIIID.(,.----,-.21**:E@ABBBB>Celsqk_]aYOOQXcdN73;>LTV`eYE96@OWY^X@9<DA@DAM[ZLHLUdonkkfcjlh]QVZTNLIIFA>=<;<>@CA?AGNI<@84CGFA@BFGEEE@:66;@>=?@>>?DKJEAAA864568878;<<DS[cnnc`db]UMJNTYVE>A=<>CC=76:??72797<JTTSPI>>KM?6:=;9;;;;=?CHJGDBA>98988;DEDJJ<BLIIKG>975:?@?@?AFC<BHJIJKIHF@966:@@???>??@CFHGDEFGJLJIIHHIF?:533258;>BA@?>>=>@A@BPbe_\\VLFFGHGDCFIF@?B>98756<?==>;9:<@EDB@>=<9:<=<9622554433347==;:>A@????BEE?:998667899:<=;:;:8:<=?AA><<<<<96786346436<?BHJJIJJKKJE<:@AAAAAGMKGCBDC=;8439@AAD@8CQJA@A@>=<>A@>=<;?@;878:;9677659BD=87521/-3:CGC=<;=?=;9987<B@:754348:<>?@@@@@@>>????????@@@@@>:8620258:::88436;@KRJA@@@BFGE@==>;5/--/..11321110-,--./00121016951244311466579@B5<:;>>6379:;;::995//7615>;7674210--2B940-+*++++++,,-.01*J[5-27:<@CA<<5/1-,:A=;FEJSNG1OE6=CDA?OWUL:;EG;41.-,--,281+3JUURVWQ]qqVS{rx]E:,*13200//0256;DE@CC:8:767533111355446779=@AA=4,+/37;?@A?3,7??>>:435534787/0KWWUSPKHEDDDDGJJIJKMNPQRRRSRRQPONMNPPPPPRRRRRTVVUVURQPONNPUXUU]`][]^]XSQRVYWQNV]]]ckptuuuuqjec`YVUSOICA@@AA@AA@?@ABCEFHHHILMMNNOPOQRRRRTUTVWVTQNKGECA?>>?ABBCDBCEHIIKKLJIIJKKLJD??>;85BX`\\[`i]FB@>=;>??><@EGMVdjjjkmhbM<AEHJLLKLGACGHJKMMMMOQRSUXXY[]_acc^YURSTX[^cimoooqonoqpjea_`a]l{kXMPQRUZ\\ZXXWd^icOUQQPLRZ`_O[^hu\\hwoqntx]\\ht_Y`XINPOPRQRRTURPSOQfxqnonjaJFFFHHxjOTNHYbdhmmkgbZOM\\pyS@JMKJJFCHMLKLPWXXYRLTM>EHHGDABNVOGtNIMFHTSLEAABBCDEEDEIMOQTSOKGA?>>?AAAADIHHgz[HYaci]NIMOMKIHHECA@==ZfJEGC>:=FOTYSGHHJKNORYhnnXOH<7BXXPOOHEGGGHILMD=ACACCCIMOW\\TMU]]]WNG@@CENXXlgOI>ARWMTWPFA?CFHEBBFJMLD?@<78=EGHND=CDDDEHHKMMMMORSTTUVWWXWXWVXYYWVY[]_`aa_^^^^^^]\\][[ZZZ[^WE;;<;<;;:;<<<==>>>?@@??@>?@ABCB?==>J[WD>??@AA????><==;<=>?@KVM@AIHHOQLLOMFA@@AEGHHJQWXRKIJKIEDGIJIJXfgge^XSQX_[PNOQNIVokjhda]f{|ula`jlc`b`^ctraZZ`el{|dWst~yxymd~x{}|qlkomid`^\\YWUTRQOMLMKFFCBPFCLZK9Utyy|yvtttnd]ZXT\\fic^`aZVTUTSRRQPLJHFCCDDEEDCBA=82/..//012445679<>@BCDEGJMQRRSSTUTSQQG;469::8666743.4BSTNNQVXVUVYZXZ[ZZYVVUTTUUSQQRRPNLJIPJ7/-,,,,*)(.2/4?DABDDCB8>ey{omgfe\\ZZ\\^`fN=@<DT_dYG;;@HQUURNA:6=?>GQdkga]^__^afdez~m`]XOGBA<88:<>>@A@=?E?75C9=KGDDBDHJGEEEA:9>?@@??>=?DLLKMOPH:77;?@;6763;MYdlhgeda]UJCFMROB=@=<=AB:65688438;6:OZTRTRPQOC:=FFB?<==<=>BIICCEC>:99878@EDILB?DGIKC5257<AA@BBCC?<BEGGIKKGA8578:@B@?>=?@ABDFFDDEGLOLKGC@@?<95579<==@AA?><:89<??ADQ]\\\\ZUOHDEIKJLLF@BD>78;;::99:<:79;>BB@>;;<=>?>;8634676543348<<77=A?>===@BCDA920377655679;;:99:<>ACA?>><;867675443027<>CGIKJJJJKJE<:?BCGF=CKIE@?CB=987755:>?=>MSHABDDBACEEBAA?=?@=75787777766:AC<787420.2:<955;<?BA<98767<;622445788;<>>>@@@>>???????@@@@@@@>=:40035798887@MTUTQICB@AA@BEDA>>92/,,-,+,++,.///0//12320252.+/52-.221/5;96568@7:C50456767787644781,43,4?<5675553239?6-,*'(-.,,++,,/011*PX,.8::>>;C=4211/+1757EEKTQ==P21.8BSVSQQ@8ILD;421/+*09@>3,+&',,:VY_zvQHuJSR@90,122132002335<EHF>21686400/0136439<72267:<>?=:513:@A@>7.2@B@?@<412215;><2-BWWVSPJGECDDEFGGGHKNNNOQRRRQPPOONNNOOOPPQRSSSTUUVVUTSQOOMNOQU]_]]\\^`^ZTQQPORRQUZ[]binqrtwvqgccb_[YWTPJEDCBAAAAA@AABCCEGGGHKMNOOPQQRSTTTTUUWWXWVUROKFDB@>>?BABCBBDFFGGGGIIIJKKJIHE@>=;8:CECEJMJECA?><>>><<?ACHS[cillb_ebSA@IJJHHHD?AFHIJLMMMLMQRTWVXZ\\]^_aded`ZX[\\_aehiiijjlmqrspjfddcaqtqcSQPPTWX[\\ZYfakbJOMPRJTgbbZdhkwZewwphtv[Wdmt[SILJLNNOQQQRSSQOU[`nwmedfcXJKPQJIidSRLFWetroomle\\TQXesyvVBINLJJFCHLMOPPQQOMMKNfl[JEGGGFFBQlu^rLHKFFMOHBABEFFEDDBFOVZ\\XOKFA@@@??@@ABDGEH_XNERO_XNJKOROKMOOLFB@>9GbTCFJH@?GNQ\\aSFJJJJHO]dhg[YWWICWRGFFA?ABCFHMQSHACDCEFJLP]fWMXb[RKGEABDKX\\Xih^ZJIIHGPPKJE>=>=;=>?AOWJ>==9>JQKJNB?CCCDFHJKMMMNQSTTUUVVWWVWWVXXXWWXZ]__`a`_^^^^^^\\\\[[[[[YVG;:;<==<<<<<<<=>>?>?AA>?@@@@BCCB=<=>LZQC??>>?>>>??DEBB@?@?>=DKNKKMQPQXZTOJFCCBADEFHKQZYTNLMMKIHHIIKLTcki_WTST[g_MKICO{Ÿxjeb]^cr{pkkllld]^`a_dste\\WVdv}sY\\su{wvwohx{~ÿ}yrommjfc_]\\ZXVTQOOLLLJDDD=PJCQ^HFp|z~|zrstj^YYZ[`fd__b`YVTSSRRQOMJIGDBCDCCCAABA>7300////01234469<<?@@?ABFLMOQRRSTQRQI>74688:89:9886523?ONMPUWWVWXYXYZZZXUSSRRRSRQRRQONNK?8<=2/.../1/288:FIDBFIIEB;Cix~tmhhlh[Y_aVKA=@::IUSD799?DCDFDDCC9:C>J[c`^^XYYPLMYZ[{s`TM>6798:<?@BB@<:DBCAB;JNECCDGIHFEFGC<<>?AA@@@>DJMR\\ba]UG:9?CFC?>87DR[fkhjjc`]VI?>BB?=>>?A=:>:9:889998748MZYYZWURA6>KIDCB???====CEBCGHD=;:877<BFHIJHB?BA;759;>AAABCBA?=??DFHJJE@845<@CCA?=>?@AACEEDCEHNQKHD?<;<<:78;=>=<@A>=<;989:<@A>>HT]]WPIEFHMNLKGGJG@;>BCA>=<6346658ADFEA==<;<;987579976643348878:<<<;:9;?CEB91257752147:=;::98;>ABA?>>;9789::8994139>@BFIKKKJJJJF=:?AAEA9>HD<=?CD?:78:7319<CJKC>BBDGHHMOKGFFFC?<9777766776678;:9;<85222589656:<>A@=;:987875422587679::<=?@>>=>??????@@@@AA@@><:854421247>R_b[QNLIC@B@@BEFC<:40.,,,+++****+/1223444431211022102221.2:::531/5F<1.//665754210242-.3.(5?:66889:=>;85412.++12.-++-.0113.[T28705><4C9.////.4638AEMVH6U=1;10Gb^VK@6=NM@950251,5DE:/-/+'('+<IYmfI:m~G;DA9214421342200447>GD6114896112469<<:;=5-066339>?B@627;@B8+,=IFA@@;42226;??:4->WXXTPIFECDDEFEEEGILNPPPRRQPOOOOONOOOONOQRSTUVVVVWWVUTPNMMNRWUQW\\\\_b`\\UQPOMOSTUWY]`ccdfjnmg`acec_\\ZXTPMJEAABBBBAABBBDEFGHILMMPQQRRSTUUUUVVVWWWXXXVPJGEBAA@?@@@@ACDDEFEDEFGIIIGFGGDA?=<;877:<;<??@@?====<=?>?CGIT`hibaYVfbNFDDDDDBBDHJIJJKMLIILNPRRTWWYWUUXWTSPMNPPRUWVVXZdnprttsqmfbac_`a`\\QNOTUTY^`Zccm~jVPJPRGTqb^ZcpkvXat||vxsVS`o]KUGFIKLMOQQQRSRPOVgt{zricb^WSUYZSLkkXPIEWd~yqonph^\\YYWW[UHDHLKKKFCKNPRURNLLKKIFMSUQGEEFFIGU{lpLGIHFGFA>FJKIEB@@?BIQWVIFJC>ADDBAA@BDEFFHOJH?BEQQJJLQUTQQSSRNE@?;A[_KGOMEAFMPR]YIJJKTTRSITW\\g`klWZI:=B><<<>@EMTWOBCEEGJJKP[ZNLUXQHEDCCDFGRYX[gldRRTPGOTMKJIB97<@@=>AID>:=CL\\aTSO@@DCBDGIJKMMMNQSTUUUVVWVVWVVXXXXXWY]__`aa`__^^^^]\\\\[[\\]ZM=;><<@?=======>>>?>?AEFEDBAACEFB=;<=>BCCA?><===>??DILLIGDA>;=EPY\\XQOU^cZOIFFFDBCDEHMSXYWXXULJKJGGHLNQ]bc^XY]Y]dOEJ:Nɿppue[_jrx}zqjlu{mgea_^a^dmriaYUhy{kXilsvuusooux~||xqmmlhfc_][YXUTQNMKKLHAAF<KLEP[J]|{ssobZYY[^ad`]^_]XUTRQQQPNLJHFCBCECAB>@BA?731100//00133357;<?@<679<@DINPRTWRME9445788:88987525;>9FLKMSUWXXXXXWXYZXURQQQPPQRTURNNOL=-,1110113?GOXSQRMDDLPNHC>CcxybR[jj_YYbcH>=BNI;6:;6688874:BCAAG@EHJT`aZ[XQRPJMLSYZezxzrb[ZQ<287:<>?AA?8?ScaUTKPLGFEDEGHHGHHE@??@ABCDBFQY\\dnqkc_VG:>EIMQSMIPUYgmiie``]SE>=>=89=<@C=57:9:97:?>9437BPVWYWQB3:LSIABC@??===<<>ACFFC?=:8879AIIGML>5679:;;>ABBBCDB@BB><CHGJJD=>>;DGGEC?==>??@BEECCEHOM><=>=>?@CB?A@:47?A>99:;<:9;>?>>ES_`ZRKGHHIHIIINQLC@EGDAA@=712544;FLGGC@>;88987659<:7565434788:;:9997648@E?7455575336:??<:988;?ABA?>=;:888<>=>@:337<?BFIKKKJJJKG?;>@@A=69@=9;@DFC;79=:426:EPJ9=DCEGHJNPNJFDDEB=78;9765665556756=@;5346777557:>>?@?><;:8753210463456679;>>>>>=>>>>???@@@AA??=>>>;851./09LXYYUONOLDAB@@BDGE<50/.,,****++))*/123651.253369731586684.-17:313/7D/1355643540,.012/*/4-)7@757899:AD@93/5:41485/-+--/03032`I582,2662<5-./..073/12=KM2CX:BC3*O_Z]O@CONFB=5/163-6FE7,+.0---*)/<HE<6@OjK<BD@7455433211225447:7002257622589<@>75620388305:89>?<84:A7*/CLFA@?93533:?=;7705WWWTNIFDCCDEDCCEFILOPPQRRQQOOPPOOOOONMMPRSTVWXXXXYYWTPOMKMRPGJV[^acb_VQPNMORSUVY\\__]]\\^^^Z\\^bedb_]ZWTQMIDBBBBBBBBBBCDEFGJMNNQRRRRSUUUUVVWVVWVXYZYVRNIFDA@??>??@@ABDDDBABEGHFEFEFGE@>><:989:;=>>??>>>>=====?A@FMUZ_gcSSipbPC>?AB@BEJMLJIJLJHGIKKLNNPPPPIKQSNLLKJJIKMNMR[dnsrsutsrpi^^ZUTir]UPOSTUV[b[\\gm{sgUQRET~hYXdldpW]jyxsqZTaqUCSHEHJKMOQQQQQQPOTbr}xskga\\YYZ\\][Qu~^LEFWf|ppqmf__`][SLKA@HLJKKEAJMPUVQLHGGFEEE?ABFEFCGMQZuonIIHHFDDEIMNJEB?=>>?@HMG>EJ?<BDDDB@@BDEFGJMJD>DLJLMNOQVWUUVWVTKB@?BU`RKQOGCFLOMSSJGGHdmVODL_^a]coh]E6:B?==>>BJQVXOB@CEHKFDNSLJOROIFCBBBDDDJWYYYeiV\\r^FMUNGKH?:?GACFB<=B>;@FVfc\\ZQAACCBDGIIKMMNPRSTUVVVVVVVWWWXXXXXWY]__`aa_______]\\\\\\\\]]UE<<@==@??>>>===>??@>>CORGAAAAEIJA;;=?ACGDA@>==;<=?@BLQQOJFA=9;BR\\b\\NKS^YRKFEFGDBBCDGKPUXZ\\\\ZNGHIFFHLPPXcWYaSRV^ZH@5_ý}hhqi_awvnmkedy|l_[^c_[_cigkkfd^_t{xg[tzkrvurqvyoŸǵ|tmkmjfeb_][YXUTQNLJILG?BIADMFOPWxyrof\\XWW[]a`[YYYWUSRRQPQPMJHGEBACDCAA=?BA@743210////0333469:=>97;<958@INPRUOC:543578:;97641124>FGGKKKPSWWWWXXXYZYVRPPPOOMMPTURMMNOMF>;92//126>GRVXVNEDMQMFB=;NfqYG==X_VVYceL@KLe`J31655689628DE>@KMRKRba\\]_[YULMORSZ[Yi~vupb`in`D667;>??@?8DZK=HTVOKHGECCEFHHHGDBA???@ABES`ekqspkhg`RE??DNUTRW\\WYfng`X]_VHA?=?B?9=@EFA979:;;9;@>7326ACAGQQLA?NXUKCEEA>=<<=>=?BDC@=?=;:;<=AGHFHE:3269;<>?ABBBBCA==C<8AHJGHC@CIJHJGDB@=969<>@CEDDFKKA48=?@@AAEJBDD:16AC<79<=>:657<DKQZ`_YRKGGGFEEEHNOJCBDE@>?>=;9998:AGFFEB?=;8666899;=<5244334569=>=;986412=D<56645643358<=<98769>@@???>;:757;>?A@:4215;AFIKLLKIIKH?9<@>=;68=<:;?CFF<69<95449DOF:<DBCEDEFGGA>=>@B@;9:8755655556525=@=73688766588;;<??=979973/--13200223457:;===>>>>>>>?@@>???>=<;9:863234>PUUXTQPNHDBA@ACEGD:1....-++++++,-..-0454/,-238=?:32:;7<?6..06832985<),.057=851++35112//1-,9=21789:;@DEA;138649<30/-.///1175dC+3531./195/11//262/+'/=6/YI:DA20PJP[UT\\aUB9610360,6EF<3./.+,,+)*.45644)WksL<CBA:565651,-/2554442111224443259::=;2/-./03:>931114;@:34<<7<IJ?<>>989419=:66:30WWWRMIFEDCCDDCCDFILNPPPQRRRQOPPPOONONKKNQQTWXY[ZZZWTRONLIKKIEIU_dbcdb\\UPLKNPQSUX\\_a`^\\ZYXX\\_beeda`^^XTOMLFEDCBBBABBBBDEGKNOOQSSRSTUUUVVWXWWXXXZ[ZZZXSLFCBBBA@?@@@ABBBCCDEEEEEDEFGFDA?=:::;<==>>=>??>>===>=>@AEILNSYVT`fcccZOIB?ADLQJDFJJKJGFFHGGIHEHIIGHLONLKKKKKKKOZgpttstusrrspok\\QTKWt]YUSTTUWZXVjmuwlWLBS~lXXee_qWZeoreqqbc{YM]PIFGIKMOQQQQQOOS]jyrnjike^\\\\^b`Y^CBJZmsegha__`aaa]UPE@HLJKJEBFIKRQNIFCCABCD>9IVMDGJLVbkb_mMJHFECFPSRMC>>=>>??ADFA@FE>>AABBA@@ADFEHMKDDCFHDJOPOPUXXWYZZZUNKJEL\\XPSPHFGJLJIIGEFE`lZSJFXab]VWZ`H>ACFDDEGMSTVVKB?BEGD;7?KQRRQMIFBA?@AABFU]fbch\\jsWCHTSJMNSVKA@EQMEEGBACFVc`]^XA@BBBDHIJLNOPRSTUUVVVVWWWXXXXXXXWWY]__```_______]]\\]^^YI>=>@@>>@BBB?<==>>??=?ILB98;?CFME=<=?BGIGC@???=:;=@CKOOJLMIC;<>AHS_[IDOQIEC@BDEDBABBDEGJTW[[YMAABDGDJTPYYJc]FINPI@<pѵxxsj[byzmdbedecb`_XTUQQW_cirjkia_^byvebmfrzxwsuvn{Žͼ}wolmlgeca_\\ZZXUTQNJGIKF<GNIEKFKMnxpja[WVX[_a\\XWVTRSRRRQPOOLIGFDCCCDBA@<?AA@75651/../0122234679;8=DFA:>>8HONA955323455:?<96410226=GKLMNPSVXXWXWWYZYTPOPQPNNOPQQROMHRVNGDE5**-.-.28>AGKGBIOG@;528BIBHC2=LQW[fgQHUR^bY@565344555<GJDDLQMG[l_W^_cbVMOTVY[]]blv|{{vmcdkqqcI46:<????>FC44HIVLJGDC@;@EDGIECABA@@?<8Jfomosqlmrsl_TKA@HG?BMSX^^caUMX]K>=A=>BHEDFILKD>;<==<>?:5226B;3>KMNSVWTNIFFFDBCB?@BCCA@?>==>>>@DED@DC?975679:>@B??@C@>=83777:>ABEGGKQTNIGEC@?;317==?DGDCHC:=CAAABBABDABJD69FHB>?<98733<IUZ]aa]WPIFGHGDBAEFFCA@@@@?>?@@@???>>=<A@>;>=87769>A?>=8311111239>=<:975335<@:5776554234657865546<?=;=??<945:<<??<::5238>DILMLKKKJF>9>@=;>99<=<<=?EG=78986658GLC:<@@ACBCCD?:=?>;<><987766755897326:;<:27>;87546779;<<8216852.,/3330.02332346:==>>=>=>>>????@>821024554224;DN[a]XUF:BGECDGHD?40../0.,,,---156/,011025315;==;54678;<3-0776469019*/.2678;:0+2<82283--/1:9,,58:==ADHJG<678856321-./.,(3::gM.1981/26>:6633334441.,0*FX839@=?LABEO^ggWE@:44564.8FIB:0,+,,,,+,,-03470QjASHBDDD=887662.-02554444555444332346666:71..+*-6@?3+,0/057536=EKJ?68>B>;;9469747:5/XWVQLIGFECBDCBBDFHKMOPPPQSSRPPPPOONNLIJMNMPSTTVWVSOMKKJIHFFGGJXffedfgbZQJJMNOQTX[^bcb_]]\\]^_beggedcc`YROOOJFDCBAA@@ABDDFHJMOOOQRSSSTUVUWYYXXYYZ[\\]^^]WRPLFA??>?@AABBCDDDCCCCBBDEFGFDB?=<;<=><<<;<@@?>>>>>==?@BEFGGJOV_a[\\hia^XLBEOMEDHJJHGGEEEEEEDDEGHIIJLMMKKJJJLO\\mutppuuolmoqpqvlTNK>cta\\SSSSRRWZhe~swraPDXvkYYegbzWXprpleps_fVR`UMDDFJLNQQPPPOPQV_mpnkhtsf_`ab``[CBLZk|fR[djlkdc`_\\ZSFCILJKIFCFIIHGGEDCB@@AA@;BNMJMOJK\\kYUnRMHECADMMIB=====>>@AC@>@A?AAAAAAAA@AEGDGQOHHIIIILOPOOTXXWXZ[[YXXWST[WOOOHGHHIIGGGHIOYglldQUaaVMKFQIGIFMRQOOPRMKNIAAACE=56=LXVONKGC@?>=>>>GRZdkc\\T_^GGSZcikjofO@>GPOKKKHECEXa`b^SB?@ABEHIJLNPQSUUUVVVVWXXXYYYXYYYWWZ]__``________^^]_``TD?B@BC?=BGGGA<=>>>?>=@FC>>??BEHB9;>?AAAA@?>?@B=9:?FMSNECJOKE<>@??DJGA@CCB?<<?CDDB@@@@@A@HSYZVI><=AD@FKJUP[sOAHGBE:rκ~d]fx|wog_\\^```\\XVVWWYf|lanlkj\\[Y^s}xhnpf^}w{y}szqlqѻö}vpllkjgeca^\\ZZXVTQMKHHLC:LSRHFEGe~vmf^[XXX[_\\WWVTSRPPPQPPONJGEDCDDCCAA?:=@AA87;82/...0221112235779<>><DA36<FB74543233326?BA<7444229BHILQUXYXWXWWY[XQMNPRPMLKJLNQQMIRQ@?:??2)*---/26656:<;>:6510008ITQB9EQX]ijOGPLUbdH44511012:EORLHEGCGem]RZch^SV]fc^Z[beeegisujddegimeM98;>>=@?:63>I@RHLHEB=5699>BBBEFB>??44Qruponosvyxqd^^Q?>>=DEAHPKU]QFNTC?BB==<ALMJKLLLA<>@AAB>72226:59FNORXVMFCAABDHMOJBABCBA?=>><>AACGKIA=?;8633436@IH>8>D>5451/23557:CJNNQSOJGFD@=<857<<;AF@8;<8=CCCDEDA>>@BJJ=<DGC@?<867;BSaca``_ZRMHEGHGC@ADC?=<<=>A@?@EE@<=>=<>@>;?B>98766:ACBA@>:42112348<>=<:8646999866665532234334444447:99;==>:59<<;<;:<=<99:<AGNOLLLLJE?:=A>=@<:<=;:;:>>:776679;ESPE><<>@ACEHGC@@?=:79<;;;966657::844459=:2:FA:85345:<985/-1442333677852333321236:;<=====>>?AAA?7,),..1430-+*/7BOVZ]R80@GGFFEC>81/..10.-----.4993-,-/18=:7;<;;:6437:74/.4764368//4279?D;/3:75=>75772-.15:3*+158;=BEDHMF::<:6454432113/79?hU>17<32:=?==;654346794.(5XF084@LQUOH8NbhiM<LVKC><50;JI?5,)*-.-,+***/3488IG1=ACEEFA9996655444554435678764112443345:9641////13.*+.--/25407FI>46=AC>9;=845557778WUSNJHGEDDCCCBBDFIKMOQOOQTSRRRQQPONNKGIKJIJLLKKMMKHGFFFGFEFHFJX`Z[_d_VTPIJMMOQUY\\_bcdca___`bceggffeddc]TNMMJHECAA@@@BCDCEHKLLMPSSSSUVUUVWYZZZYYZ]_^_abb_YQF@?>>?@A@AAA@??@BCCCDEFFFGEA?<:;=>=<<:;>?>>>>??>>>?@BCDEIORW^ZTYcggieXSYI>JNJGFHGEEDDCDDDEFGIKJKNPPNKHIOamkghkqpigklmmklqseJCBI}d[XQNORUZbhc{rehYNh~bZ]dhe}XXsk]m|iOGcSU[TNFDFHKNOOOPOMTMFOhsuttwskecdc_efSNP[bpbS]mtuqjf`[UTNCDIKIJHFEKLGFGCAFECBA@?>?BDGMSRMHP_\\]lVULDB??EC@@@@@?>??@CD@>?@ABCCCBBBBBACGDDKQPLJLOOOOOPQTVUUWXXWUWZ\\[\\`\\KJOJHIIJKJKMNRZ[amyulbYPHEADDJJHQ]\\ODDGFCGEDCEFH@EQVYZTMKGC@@BB>;:=DOQTa^M@?EScnry|qXTbR><<AMPMKEIa`cfO@@AABCEHJKLNPQSUUUVWXXXZZZ[\\ZXZ[ZXY[]__```_______^^_`b[LDDCBDE@<BKMKE@@DEDDC==BKPMLJIIJC?????><:<=>>==:;BKOOKA<@HMOKCA>==>:;=>=>@>===>?@?>??>>@@BKUWNC><;<@@><IQQltC=FFB9nǼmahz|qib]]``^^YUTWZ]cktx|{s[amrm[[S\\u{|q{h|ff}}wwxuyqZ{׽³|qnljihedc`_][ZYXTPMKHGHB=RTYLBAU{{sobZYYYX[[VSUTTSROOQQPOOLHFDCDDCDB?C;9<?@>9<@:2/.//13322110024653452162--3?EB?8668:=?=ALLG?<99765;?@=ITWXXXVUUWWTPMMNPLFCABFKPQNIMOPJ??LG3)**(*.131--.035553456?KNMPQPPYbjkVLPQZf`@33318?DEKRUQIFCDHSoo]EBZ]FQkvuh[Z`dffgghnlda^[\\]bjcJ89=>==:7=;B><JBGNI@;84027?@DJG@ABA>;Kellhiovwupi`_f_NEDKTRE56AZ]K@EG=@E@?A<6DMH;:?A;8:==AEB9333229DKMMNNJE@>>>@EMTTMC?@?<=BC@==>?ADEHMJA>>;7313569CIB9;A@7333234752:JQNNPPMIHJF8279::;?@<:835975=FHIKKHC@@CCF?8:@>;:;=;;H^jhc_[Y\\[RKJIJJHEEGIE<967:>>>>>CC=:<<<>DE=>KL=7:99<<=>>>>===;977889;>>=<;97666566666665444545689;=<;;=>===><89:;<;<;::<>=;8:?GLKKMMJE?;<??AC?<<989<<::885448?GOQPLD;9=?@BEJJKI@88;87>BA?;643467876523:=5,7KF978:9<B=321.0893/15889;;86754422345457<>====?ABCC=403:8/14.)*,+*28:@GH:,4?<::<:8863200/-.-----.1484+*158;97<@98:8655553./5612105921437<AFF;06;>>948:2./03661,-0225;BD9@QJ98=AA:888::;?HEFCF^ME;5953;>==@:52144675/,'IS:99@UcgheZIZjjkQ-6KZ[RJ7.6>>81+(*.0-+))+-/247;AozH-/568;<=<6566667788877655664/-.011223546<;620374.+++,02/../22.09;43:>?<769:9899:;;>DRRQLJHFEEEDDDCDFGIKMPPOORTTSRRRQOOOMIGHGGGGGHHHHHIIHHHGGFEGFDIONJNSULDIMKJKMNQVZ]_`adec`^^`bcdeeffffdec^WOIIJHECA@??@BCCFJKJJNQSTUWWTRSSTTX]\\XX]_^_`acecca_XLC@>??>==<=?@ADEEEEFFFFHHEA?<<===<<;<=>>>>????>>>?ACDEHHJOXWNKSbloqlfgZGKPKDFHGFFEDDCCCEGHHIIJNW[SJFL_nbW^iola`lpmmmnnnrvcG?HaoY[VPNRVZ`fk~yi_a[Wma_[beeYdfVVs~fFMl|oVXWSQIEEGKLLLMMLMOKEXtwyukhffdealtcZT\\_nj`koqtsng^UQPHCFIIIKGBISQINSGABDDCBA?=>BCEJNPNJLPRdiW\\XJA=>A@@CB@@ABBABDGEBBDCCCDDDCCCBBAACBAHPMJMOONMNOQTVTUXWROORWY[\\ab[adZMFDFHJLORSUWY`qlVZUF?=?JIJT^T>3<FJKMJCHRPIK\\gfbZQJGDCDHF?=FAAF\\eVQQD7/Cikjn{nTUqiE9=FNNEBDQcaibC:@AABCEGKKLNPQSUUVWXXXZ[[[\\\\[Y[\\ZZY[]]_aba`_____^__`a]L@AB@ACA??CIIIGEFJLIFGC@ANWWWSJGKQNCACCAA>>>?>=<:?FLOMF<9<?EJMD>?>?=<=<<=>>>>?@A????@@?>@ABHMLE??><>@?>>HORopC=DG6gľlmswxpic]Z]a_\\ZXVX[YcmljfddbmlSayk]XO\\yyryqjprr|sxP̯xrokjihedb`^[ZXWURONKFEDB@YTROB@s}xqo_X\\[YYYXUSSSSSSOORRPONMJGEEFDDD@?D:7;??<:?@:1/.//13433223358777640+//1//3?DEB@AFIMRSRRROICA?;;;<>B<EWTSVXTSTTSQONKKIA;::=AGNPNKLS\\ZMFON>0/,*/31476:;;89754679=ADCFVZNJUcfb\\_daeW7426;EZgaZXMB;ADILSotY70BHEcvupaV[bciooomgbfmfUOTX_cXB69>==?@C@E;CA=>FRC;;946:@@=???@BB@><BJNRfqnhggda^_a`WOPVVL>3@XP=:DC<AE?>DC<=B=2123359::=B?614668=CGHFDDFDCCDDEJNQPLC>AB;5=HG@=<<=AB?GNF>@>99?A><;>FIE?;;;73369:;;;ANPMOONKIGB;4/26:=@FC6047771.>NQPRUQJEBFJLF?=@>;9<@><J`khd`^\\`bYSRQNKIIHEB>8889<??@=87<>>@@>?AA=IYN<=C=9<<<@@<9:9<@AA?=9788899:9865655799889876545679<?CEEGGA>@?>=968:;<;879<@@;447;BGKNLIE?;;<;<>?><::;>?=;;<8687?FEAACB949<>?BEGHHB;;>?>BGC=;8533455431/1781)7LE59BFEB>732027<=91/3689:976777776677315;=;<<=?@AA@@?=@C<331*)1::1269<?;46?=555798643444220+++,,-,/2/+2<><606?=7777641/./2:<4-//079.3716<>?EE78>?9219:/+012002./1337<@>2;OL849FE:<<<=AGLRQVVVSCBB;:957:::;51./6557/,,2[H7;5YiiijeYW_gik`=9?Zea[I9234650++12.,++,./138;>C>3124323321455643469:;975555410049;9538<88@C91/25520/./485/-./0022106=>;86777:??@@ABCGONLJHGFFFFEEEDDFGIKOPPQQRUUSSRQQQOMKIHFEEFEFGIIIIJIIIHIGFFFDCFGCBCFEBAEHJKKLNQVZ]^^aegf`][^bcccdefffedbba[PHGFDBAA@@?@ADGHFHLQQPRUWQKLOONOU[ZXZ^aabbacefb`cbXNF@>>==>?@CEFEFFFEFFFFGIHDCA>=<<<<<=>>>????@@>>>?ABDDEFGJTWOKKUdihjebjgZRNDCKIGGFEEEDDEGHHHGIMX[SNIVi_KShoi\\]lsomnoqrqqwq`RKKcxp]XTRSUV]_fnZ_`^]\\j_YU`ceYolYkve`T]nwiOSQOSPECGKMLNOOJKSTWr~y|~korkeajiexeZPZfyypwyxxvnc^UPNECHJIHKGEQXVQ]XB@HGEFGDA?ADEEFLRQNLKEagW]\\P?<=?@@@@?@DGECCEGHFDDCDCBBBCDDEDDCDC>CKKJJKKKJKNQTUSSTPIHKOUW[Y]cmzveRC<:;BLNQQRSUWathYlvbG8=KKNWVE66COMLNG@SaTHWggcbYMFBCGKLKD?SaOPqsWFEA79LSPXVcvsZLW^``^ZWRMNNHTdnYFCA@@ACEHJKMOPRSUUVWXYZZZ[[[ZZYZ[[[Y\\]]_aaaa__``_^_`a\\J;8<=?DC@>@BBCCEHLNNHCCFDBDMY[TJDHOQJEEEECA@>=<<<?CEHJJF=999<?AC<<@AAAA??>>@@@ABDBAABB@??AABBDBA???@BB@FJQRSomH>I;Xporxypgda][\\ZYXWXZZXWX^ij`^[X[jfWdh]SO^xujp}|jlsn|yռշxyxutplkligc`]ZXWUQONLMKFCDC>ZXJPBS{oh\\Z`]YYYVUUSSQSSPPTTNMONLIGGEEGB?AD858;<<<A@930./.13222247;==989764233420.4>FGHHJNQTWUUSQOKHD@<><:ACK[USVYTSSQPONLJF>547;=@ELNOMMRY]UNI@558?GNJ?E=8IMJ>233576778:<:>NO@<Tcfgindj]748BDAIU[\\P?517;BEHnvJ39<BLlsnj`XVWX[`dje]gy}uhYRUY[[L97==>C@BEJ?H>A=?DF>:7447;<628<=>><:657=Nirhbgmnid^_dbYRPNLI;7@=78AB?AABDFFC;3/011236:<:998314;??<=CGD>@GGGGJKJLOMKHFAAD@41?LLC=87:>9>FB>?<9=HMJGGFFHIE>:;;634:=AABDHMNPNGEIF:431138?FE<216972,/@NSUYZUOKDHW[URRMHD><<98<CThkhiihe`ZUQNJIF?988:>CDCCDE@63:AA===<===FPJ@@A=;;;=A?;9635=BEE@:8664567789;:768;:87888788888:;=?AGKF>=>><;956::879?CB@?<538;>FKLKIE?::<968;=?@@@AA>;>@@??><<;989;8479<;<>B>?HJB?DHGGC<99764344321114420:G>6>GIF>7671/479>?756777666789:;;:;;:845558;:<=>?@?AB@?>=;7/-4:?>538<=AECB?;::::=81.1455882+,-...-,--3AGA70089544331/,,,.7C?1,./0;:(/67<=>=<<=BB@91-45.-01/-/..116:;;952>EG7,5A959<@AFKLLS^]kZI@BB?>=:975200114537340JY=57/Sca_^UMQVY]jiQXX\\]^cYE:9::92+-54---,--/247:<9677456554436;;97414:;;84244325<@BDB@<:>?=:=@;7754541/.024410211342./9@A><=;9:?A?BGJJJGLJIIGGFFFFEEEDFGHIMQQQQQRTTTSRSRQOLJJHEEEEEEFHHHIIIIIHHGEEEDCDDBBAAABDDDEFHKNQVXXY\\`acca[Y^accbceegggfcbca\\SIBAAA@@@?@ACBABHPROMMPMFFJKGELTVVVW[`b`acfd]TQTWSLEB@??BDDEEFGFFFFFFFFFGIIIFCAAB?<;:<==>??>?@?>>=>@@ABDFHIOWXWRPY\\OIV`b`]SNLLLIHHHGFFEDFJJIIHJMUVSRPVaMG_mbXWhrnnppqqrrqrqpnYDCa|fZXUSSP_\\]~nU^_a`\\oaRKP_beXm}w|\\\\^bduiJIIFMWPDBHNTY\\^SO^_f}{z}hm~{vknpZXc`XMXdqzvruqwzmeldXODBJLJHJGFW]]ZbbPYlQDIKGDABFFFEGOSVYQD_dW[XN@<=?>>>?ABEGFEEEFGGEDDCDFFEEEEFHJLKHFGIJJHHGIJLMPRSOKKHCDIMRV[Z[`a`aTND<;;;JTRRSTSOTbsoWTqtT=?NMOSOLLMQRNKJED\\dMH_gabaYLB@JQLGJMC>bp_^SC>A?9IWO_mZT\\cgkb[WJ[vsf^UORVUPT`WPIDAABCEHJKMNPRSUVVVWXZZY[[[[YYZ[[ZY[___``````aa_^^a`P=:?@CEIF@?AA@@ADGOTQKHDDCA>AINMFCCEIHFECBA>=<;=>>ADEFGHE=99987MVAGVRE@=@@ACC@<=@CDDCCCCAABABAA@@@@@BCD@GMWSSomLC@Gż~zyz~|mb][ZYVUVXYWURRU\\fjcYZ[Z\\]a]Zh\\TQ_vm}czwzfftnpğ}rsrsromnlhd_\\YUTTQMKJIIIFDCC8T]IMIs|nf\\[_]ZYYSSWQRQWSSVYWLMRNMLJHEFF?ADC237:<<>?<85322253/00147:=;987666456764018?FKKKKLNQSUUSQQNJFCD?757<L\\ZVUTUTQMJJJE<327:>@ADINPOMPW^\\TL<,-6;GOG?B?=INJ>344699986:C>8AMI:Jchfkreg[748@<2239EI92123;C@`mIA;8A?]qtqldSINJHWmgew{zyjTPSQPH=<=<<==DMMBH@?99;EIDINNPC97116;?@ABBCBJ^nokkqruunccjld[XTPNE<9;<=ABAAADGF@:61/2567879:7569<85=C?;=DJE>BJKHGKNJJMLGEGC>?>7/2AMLB957:9899:<98:AEGIIIIGFGIG@<:635<ACA@@FMMGAAGE?:74445;>:7657:7327BJOSXXTRPJM[babddbZJ>=;:7/6Wonmqleb]UNLKF;46<;9AGHFFFFD?<>A=54:=<;<;:==:8:=<:97666666<ABB@><::988789;><:;:7323479;>AAACCA><=?CA<;;;;;7569:66;DHD>>>;6>GGFHHFEC=8:=:677:@DFFC>;<BEFHIE=:;;;:::999::::=;<GL@:AHHEC?;99975689::975568:99>ADE@::=:32537@@:<>:665468:::;;<@A=846522789;>@@@>==:;>?8236741466319EA567788771-/4554794-.00//,+-2;BB:0/551131/-+,++,,1<<1...1<<&+.2>?>=;6=HG?74--..0//.57,+0169533/3>>:4.3:5227?@CIHGRVPdSVCBB;>DA>71./2554415958\\I03/+7Xed][WWYVSgxOP`]XY\\TD>>>><3.480**++,-/1469865553587669;<=<<;:77<:85425659AFJIEB@<<??=:98;;:887553220/145422321/3:?A@CD>:>?<<DMRPI@JHHGGGGFFFFEEEGHHKPSRQQSUUUTSSSRPOLJIGEEEDEEFFFGGHIIIHHFEEDDCBCCCBABCDCBBDKPQQRSTW]_]^`_[[^_`bceeegijjgd`^_]TIEA@@@@?@ABBADMRNKIHFCBFIEABHNQQNMTZXTVZZRHCDGHGECBBBBFFFFEEFEEEFFFFFFGHIJIDABEE?<;;<===>>>?>>=<=>?@@BDGGHQ^a\\[\\XRGAOTKNLENSLGHGGFFFEDFIIHJLMNSYUPQSUIJ^fUOZcchttqqrrrppqsuqYCGfqf^XPMN[bkx`^^^\\\\xEIEM`bc~Xi{phecjeFKHBFUWG@GQ]cgjgXZ^bojnul]fk_ck}JSwIXZQY]\\fc_]QawoqweSCCJLJIJGC\\h``dnp~YDJKHEABFIIHEIQXb\\NhcVZTMC>=?@CEDDGFFFFFFFFFECDCGMMIGFEGIJMLKKKJJJJIIKMNOQPPJDDFEEFJOSZ^_`ZJJJIKLJICJSQPRVYTQTVUMP_c`WKDQPJJKV_^YRPJMLJ[\\FOdfdgf[LBFZ[E=@F?:Pt`@8<ADA<L]^lb[UIFM[emoTQrveZTHGJLQY[YVOFABBCEHJKMNPQSTVVWWWXYYZ[[ZYZZZZYYX^aa`aa`abba`^^aXJBFMMKIHDA??@@BCBEOURNKFDC@@ABDDCCABBED@@BB@>>=@@ACEDEEGE>::69`|]akc[VTTTTROPQRQQF?BDCDEEB@BA@@ABBABDDBDIVQRmmMC:ʷ}ywz~}h_[YYWUTVXZVRSX_\\ZZXXZ[YY\\\\[U]_RQ_tg}my{ubdv~irǵƮrnpssnmmmc`]ZXVSSSQNLIGJJHECB9P^KHcunh]\\]ZXUTOQYPSV_SU[]WINTNONMIGFC=CI?,38=>>?68?:89<>;5.../2677666545523578831326?DKOQPPRSTSRQQOMKKKC93.1FXZWRQQMJHIF<317;<?@ADHLPQOOT\\]UQK>-,-2:99>DLLJG<9536;@?=@KSPNLNULHT_gvlVIC547@CCBCHPB84344>D<LZW]I7<BWpsrqp`LPRK^tln{{utdK?AHIFECA?;6@Vd]MF?:68@EKO^mwd@506AHJJKKKKMdvmhonszninsqjfc]TQMF@?@@@ABCCCEC:1035479<:777536?F>7@DA?ACFFACKJAAJNIDEFEFHE?:88516FQLB<8:::63468:=>?@BBDGFDCEHF@==98;>>>>;=B@;>DEDB?@A?:6556<:59=<;=@CFILQSONONTYZ^cdgki]QKKMNH?Rloonnf^YSNLLF;8>?85<@ABDDDDEEB>;98=><<?<868789:8565235689?BA@@?><=<:97778:;=A?6/037=ADEGHIJJHD@=>>??=<;:9856799979<===@?9?KLIGFC?;98:::8889<BCCB<9?HJGEEA<==<==<<<:98788:===;648=B@=>=;;;::;?@AA@;557841:@@@A<8>A=:;98=A=:>?:665569;;;<;<@B>76=B=:966:<==><<;:755540.,,.6:4**2:838656753-1<<7555760-.0//--/6:851.0541452-+**+*,+*1740./1<;110*08;><7;CG?860,,11-,0C>,)+/561/2337:566287/-129<?FDILKKASHB?:9<=>5//2677740550F^:13../>Qa`db]][XcsXShi_VMIC=<;>;22:8,))**,./1357895456898659>>;;=>=;;=974427<>FLMLIEB<9=<::9;;>=87877:>=84348830///027=ADEHF@?A=8?JNKE<7HHGGGGGFFFFEEFFHKNQQPQSUVWXWUTSRPNLJHGEEEEDEEEFFGHHHHHGEEEDDDCCCCBBABABBDHMPNNPUYZ\\^^^][\\]]^`bdeffgjkkjgb]\\^]WKDBA@>?@@ACCFKKGEDDCBDEEDA?AFJIEDJKGDEFEA==>>ACCBDGHEBABEGFEEEEFFFFEEFFFIJHC?ACA==;;====>==>>=<=>>??ACEEDHVdh^UWZZQJEAFLQWUIGJHHGGFFEEFEEILMNQWZUUUPDIXZONTT^rvqrrrrrrqqsusmdKDgufXTPLT[Te~ya]]\\ZXIECK\\da|Yiw}|va`r[EOKKMPQNKQU[`efgWQUYaba]YWXRFFKghES{\\L[TOWWY^JHKBQqtzsdTDCJKIJIGC]n_fqtrlmUGIIGD@@DMMMKKSZ^]GmbSYZRF>>ABJOIHJGEEEDEEFEDDCCGLKFDHIHHIKKJMLLKJJJJMQQPPOMHEEGIHGHNSVZ^^_SGGIR`]XWRNMNQV^a]XWURMRJKJIFLPKKHFNNEIOKQJH\\UFYfeeff[JCPbU>:==;;TiT=?EGJFDP\\_WKMUSKOXcijdR^aX^RJKIKTZUOQRG@CDEGHILMNPQRTVVVWWXYZZZZYZY[\\\\YWY\\_``aa`acdb_^``MBDLPNJIC>>>>=?BCBCKOGEIKHDA@BDGGFFGCADB>?CEEEFHCDDEEEEEGHA?FGSnzmcab[[[ZZZ[YWOBKcoY=>GHHGDBA@?>@BBABDEDEETPRjmJ4pȨ{upt~tf`^\\YWUUTSQSX[^ZUV[^daZ^``]YVOgSUeug|lyj_ewr|Ĺѿwmkrwqijke]ZZYWVURQONLIGHJKFCA;K_LL}~tlf^]]ZVOOMO[MWZgUTafVGPUQTNLKGFB>IF9.49@BA<2@F=>?AB:54576787677665410/24543.,++.2<GPQPPQQRSSTUROOROHC=4/6TZVQOJHIF=3148;<@ACFHJOSRPQY^WQPSA-+,466J`bUGA>;856>CBBHOSV]ZSWSF9KprM74445:HVVRJB=965459@A<IPWdbJ=McplikmeXWWSdrnwxigjW?8CNRSUPF=8D\\pzfMI702:HLMFUoy?=6BMOPONLLKG_p[Qci~}avzrkiaPEEEA>===@CCBBBC@:2/2338:;8996457=C@;?ABA@???>?@;8@IJFCABDGHF@967866BOQKE=9:;95126?FFFDCB@@BB?99AC@ABB@?>@A:4548@GGDAAEGID>;;<;54;=;>CCCDFGHJIFEHNMJOTZ^bee`XQV^^]_iqpkni[SQQPLEBED:38===>@@@?@CCABEFB==@CC>:99;:6227<855566?DFCA@><<;86666569>DC;77<AGJKIGFFDDDB>=>>==?>:9986568888548;=>?<<BFHKKF@<;9986668889;==:8=DFD>99::99:<>>>;97778:<;6245459:78;::99<?@@@?<8654337=>>?@74<A?>>>BFC<9;<:865589;=>>=;9<>=?FE@B>54899;;==<940031.,+/479610/-/3866;><81:C>6785451.-./12135420-.0465895331**+,,+.450//0:678B6)0:=:=ACD?951//1/,+3I8'(),131025455563142.1/).7@LGL_ZOMRK@DC;9775425987654632[N6::731+>TXZYUUZccY_kj]PB:<?<:;;725;7/+***,./1346:<9889<<;758<<879;;9::621118@FKNLJHGA:;?959=?BBB>97669>=:988996568:>=@GMPOKEDGA87EKFB@=AHGGGFGFFFEFGGFGILOLGJRUUWZZWUTSQNKIJHFEEEDDCCDDEFFFGFGFEEDCDDDCBBBBABBACDGGGFLX\\\\Z]aa[VW[]]_abcdfghkkkjhgb[Z\\]WLDC@@@@?@BCCDCCBBABCDCCDB>>@AA??@@>>=<=>>>??@ABDGIGB@BFGEEFFFFGGHHGFEEEHJKHB<=?>;;;<<===<<==<;<>>>@ABBBCEJTbtgOU_^TFBCHXdXLOOGHHIHGEFFDDGGIMQS\\_^VIDKSNIKLSeqooqrrrrrqqrroqtcEP{ycYZJN[ANasx^V^__S{XCCHYe^zXgw|{sX^tYGQOMMOPRTYWTUWXWTNPW[YURQNQNDB>DOARy]OZRITTXcKAEBXywpdTOIBDIJHHIGCUbhx~mXDGKIGEDBA@FMQSTTTUUS@kbQW\\XH?@BBGKHHHFEDBCCDDBBAAACCB@@DGGHGGGGKLKKKKIILOPONMMJGHJJJIILTXWTU_^NIKP]dfhbRLOSTX]ciolbTQJHDA@CLQRH;>C@HLOSIG]]Q[eb_\\VRHJ\\\\MCBBB?>HOIFHKLMJGT[MGP]ioqk^ZSKZaULP^HCORMMLIBBIECCDFHHJMMNPRSTUVWXYYZZZZZZZY[\\\\ZXZ]```aa`acdb_^`\\HCKRQNMJ@<>><<>?@@DID9<FJGDA??CKMKJOKC@>>?ACDFHIGIMHFHEGIQVQOP]qsvkqtudVSPOPRTZZTB:TrF@KJGFC?>>>@BBBDEFGHFUOSfnACλ}xsv}qgb`]YXXVTNJP[]ZSSY^_[alha_[Y`S`jeko¦qky[djt{pyȼǩ{ppntukefd_\\[[YWVURNKHFEEEGMDBA=D]P^znf`_^]WNOLL^I^^kXRgpXKSUU_MIMGG?BO@236=CC?6:PF;A=9667;?ACCBAACCBB>:71/256673-++++-2@NRQOPRUWX]ZTQPPPNNK<40GRSMIIE<20357;<>ACFHILQTQOU[XMLUS9)-422HVMIA966547>CCDFEN]c^[[ZVGThI044455<MXUQG<657677:==AMKERfbKPkqedhf[RQMKZiq|hIOe^ICLUWUXUF:Fae[`[QL;33<CDCBH`wvz~P5;KNQRTV\\VF9FN<:YoxtpjgZ?6;<<>===@DDCCBA?<62214<>:8:964467>FC??@ABCA=:;604AFDFHCBEGHHA85788<ENPPJ?8:<=>;9;GONNJHDA?AAA<9>CBBDEEFFFF=415<BGHE@??=CKKGC>727=:69?AABFHGEB?=>?@BGO[acefiaSQVK>AOfkipof]OKOJB@FH>7=B@>>><;:;?@BDHGC??ACC@<99:;9668<986545>FFCB@??=<96567778<CGC==BDFIIFDCA@??><<>????=98:9547766:;98:<==;88>FLLJFD?977523566458988:::888:;738<<=?>;98888:;:88;=:77765665328<<>>859;8658>?>>B=67;?A>:?EHIA76999649;9;=??>;88<>?B93786665689;===;88866413876:>;1++.643:=?;7<?87872011/,-./000/01/-.146688;=?:-*+),--01011252/3B=14955AIFC>62341-,-.:F-'),-)(-/12441.-28535844;GSYT]aSUXXNCFJGC<67:6::87779:7Ic::<<:630RPHHLMOUcg[ZYI91/0479:;;97774.,++*,./1236;><;9:<<;87787544455554320.19ADECBDD=9A@77>BBDDDB=7445548:768:<>DHKLKKMSUPICCD>7;GC?KROUGGGGFFFFFEGHHGHILMEAHTVWZ\\ZVSQQOMJIIGFEEDDDDCBCDDDEEEEEEDCDEDDBBCBBBBBBBBCCCIV^YST[\\UOQUUUY^a`ceghjlllkkjhb\\\\[WQMHE@?@?@AAAABBBBBBCCCBCB????>>>=>>==>>>?@@@@?ACEB>?GLKE@BFGFGHHJKJHFFGGIKNI?;<=<<;:;=<;<<<=<;<>>@ABBAACEFGH^vcVSONJHCAJY[XYUJHHHHGFFFEDEEGLQPWmzdKMNOMKLOV^_elopqqrrqrpnrpjnhUhu`]NLwO]`]cXP[\\XSy^CEIW`ZwTepy~|]_t}VHQPNLNPRTUUUTRRRVQMX_THRSJHHDDEDF9WaGKLHSY`fLADG]maRE?BBAFJJIHIG@JbWD?@DDCCB@@CGKNRUVXTOK9iaQVX[OA=?@ELKFCEG@AEIECDA?@@@?>><=ADGFEEEJNKLNMIGJMMMMLOPMIKKKKJJNRQLL]eUMPKP`ekn[GIQSTP\\rz}{iZPIEDAESRNLNWZ[WJORKHZeb_^^YLFKOY^VLLLKIE=8<DHIKOOLLTWFBb{xqskZPON[q`CIYA9IPKFB?<;@ABBDFHHKMNPPQSUWXXYYZ[ZZZZ[[[[\\\\\\ZZ]``aaaaabdb`^\\SLIOTROOLFCCBB@?==?EH@8<AA@?@@?DIIHGKGBEPXOA>@FIIGJOLPLFJMV_ceghgby|]GDAAACFORUWR@Ix|QFHEFHC@>=?ABCEFHJJJTOScm=ũ}y|oea`^\\[ZWRLKQUVTSSUXWUTPKLY^Umm\\~~t{ĸo}mTnmwvwyƴǪ}~uosrpsnhd`^]]][YXVSQLHDBACBELA@A@@SZspfbba_XQSPKbHchnYQhu]TXU[fMKPMK?HP;177CEA76IRB=>9347:=>>=?@@DGGHHFC>645779;<6/.----4DMKJIIHLKRXWUQOQPPPKIIKWSKIE;2.0357;<=?BGHHJNSSNQ[ZQORYD*+0-)07555431237=ACDAFYhgadggf_YA:=85455>MMIHE@<98888:<BIJC=CVd^T`khd_]TE>@CQgrgI4C[YNMPSSNQSOM`hL5ALUWGB?;E\\\\NNR^lku|86CHJM]pvvkG/203Ml{e\\knX::CBBB@??@BDEEB@?;53318B?989753115>GE?>AEHIJGA9328BEDJMDAGIIIC95668=GNNQOC:<;<DHFEKQPPMFCCAAABDC@ACBBBEILKH=76:?CEBA>724:BKKC>?BEHGCBBBBEJOQIA?>=>@?EQ\\`jkif\\SQQA:68OkttttnR@EE@:<DE@A@=<>@;9:;>????AAA@@@A@<:99<>=:99999646>BA>>@CC?>:76669:9<BHE=>B=>@AABA?==>?=<?CGGB=98<:35;=;9;=<;?@>=:889CNNJJHA:7743676654787887767:<:65:=??>>;:99768=>=:<??=98866851026;?<25?@<99<??>AB;9;:?C:5;=>B>5379755>@9;?>>>==<98641.1667745569;<>?>>??>932544<B>7567:51357889:7872//0/./-./0.)+.///0322239BFC=52/+*,,./0356862/69674*5BFBA;10563++05CI9:75,'&,00132/,-;GCB@<?R^bcbcaRJORWWJHKLHD9585:63567:<9bP4:;:::75dK79DJGEIVk_;79423347<@A?<950*+,-,.//1235:=<989;<:888868<;85320763/,+/7:=>?CC:;FA=?DFDBB?:767753378768;<?CEEBEHGIJGD@@@@AEF?F[`VYGGFFFFFFEEGHHHGIKICBKUXX[][XSOONKIHHGFEEEEEDBBBCCCCCCCCDCEFEEDDDCCCBBBBBCCCFRZTJGLNKGIPQLMV]^_cegiikllllljhc]XUVQECD@?@ABBBBBCCBCCCCBBBA????>>=>>>>>??>?@@????@@??DKID@ACEGGIJKMMMKKIJJIKOOH?:;<<::;<<:;;:;;;==>@@BDCCCDDFCCTZ\\SFEJHDA@AKQXVMJIHHGGFFFDDDFJOQQf\\]\\VUUSRSQTcmnlnrssrspnsqkmri^qu[[YXdlVQQOYXPQu\\CILU\\XyPenxpetzNFOLLOOONOOR[\\XUV\\XR[bUELMHFDCCCBC<[dMFAFW`oqK?DFRKDAA@CDCFIJJGJI?I{fD?BA?>?AA?@CHIHHJMSRNI<m}`QUXY[O<<AEIKGBEHFFHLGEGCBACCCA>=88EGEEEEJNKLNPLCCGJJLMNRSMIIKKKKJJJIHUf[MOKJSS`slVNTYVTcyyk^YZQHEHQZOWeptlkYMXSLIR]a[X^ZJILOSOQRRSUQF>:<AFIMOOONNICUwzme]WU]fk|rJBP@>JKGC=:;;=?AACFHIKMOPPRTVXYYY[[Z[[[\\]][[[[[[Z]`aaaa``bbb`^WLLJKROLMNMLJIFDA>?BFGD@>><:;=@AAAACEJLSaokR=;AINHDFKKHJT]lngaTJD=AO}M<9>?ABDEGIJMRYJA^~]OX^grgF=?@ABEGIJKKUORfeX˼{ma]_ab`ZUPMOOOPQRONPPQQRODTcTvk{ŷszyh`ysmyţҺ~|qlqsqpojfb_\\]^^\\YXUQMKGC@?@BDJC<@B?@V~pfdfca[VWYLdMipoYRkxb]^V_iSRRSQCOM@79=FC?9EQH@>757;<>;98530035679>>:6455667995100013@@=;;97:66>GRWVUUSSSRPMQOIE;1./1558;<=?AFJHIMQSPNY^XUUYN1,10..4988654436<@A=<OgnlkqsofYC:S_A834;LSJECCCA;88788?JQQJDA@O`_Y[_WMOO?ALORYWH<;FNLIMPRSSUVW[^UB4>P_ZECGEMi{bQII`ZLoG13:<C^x|vY:BD3:^|i><]jT>GOKIID?=?@CFGD@<72102<F@658865544:??=<AEHJMOMA66=EIKMMD@GJIIG?89::;@FKONI?>=:@GHGGJORRI=>BB@AA@@BCCBBBDGNL@:;<@B@98513:<:@IJFKQTX\\][VNHGR[SD=?ACEFBDEMIX^UNGCCD?:;6Agylkvy[AABA95:@CB>:;DEA><<>@@>=?@@@AA@A@:8;=@@;778987679<><;CHC>=;8689;;;<?C@=@A98=?@B@;:=@@@?AFKH@<::>:48BEC?<<=AED@==<:9=HMHDA=:88657<:43455567777877779:=BC?=:::975:DG?77;>>;:97:=92136;@;8@D@;99=A@@B@==:9@=23632233357767?A;<?>>>>?=7531213878:88557889:=ABB?622105;=<:;>?<62//379999972121012115?@70....11//05>AA@>=>=7-*.0/1458=A<./74312CLIA?71661-*.48AC??II:8534434558=CHJIGEPdkkjjjea][ZTXNLJGHHA75440.//4<=Hc<7899<?5<aC75;=752;VV><EC81248>AB?:8::0)+,-.//01225973147:;88876<EFA9652452/./147=BDFF<;FFEFHHGD@;778::64679:;;<;;;<:9@EEDCCDDDFHIHDBM[b]XGGGFGGGGGGGHHGGIJHDFNUWY\\^^\\WPLKHFFFGEEEEEECABABCBBBBBCDDEFFEEEDDCCBAABBCDCFLIEDDEEDFIKHFNVXY[^cfhjkkmlllljg^YZQNODCCABBBCCCCCCCCCCCBBBA@@@@?===>>>????@@@@???>>?@DGC??CEFILMNOOOPOOMMMKLNOPJ?::;;;;;;::::;;<<<>??ADDDDDEFGGCFPOGEFCCCA??CILKJIIIGFFEEFEEGIMQPYrgf[]][UPNWhngfmtsrrrqpqronopmq}zebiWWiZWQMV^ZSy\\CHNSYXRfs|xntpHDGJQSROLJLNW_]YW\\\\WXWTJGGFEECCB@A?TmlcUEJZgyxL@EEDB@ABABCBDHJJHGC>D}WA?@B?=<=?@@@BFHFCBBGHKH=sYOUWPX\\MBCEDGIBDGLGDFKKHA@BCDC@?=>?AEEEEEIMKIHHJFDCCEHIJOSSMIKLMMLKNQOQa`OHDBCB]|}ui`YU^myrbicjkZLLX^Qn}sqVXbPKMPQKHNZUONMQTQRVUYc\\E<ABACGJMPWWJ?Np}{th```eqnrtXFB?CJHDCB<78=@BDEGIKKNOOQSUVXYYZ\\\\[\\]]^^\\[[[[[[Z]acaba``bbb`[PKIHGLKJKMTWWNJJGDEFFFFD>>=;:;?DA>>@CFIPYUIB>;>FJIEB?@Tjne_WOF;78:95RpH7=?CEFFIJJKJGCN[Q=RzxbRP^ofF>@ABCEGHIISPQh^ɵxi^^afgcZSPPPNLKLLLLMV`fj^JVify}txd~x~}|ƿwptwvrnjeb_^]]^^[WVSOKHFC??>AGKIB?AB6Q}ndjkedc]Z[N`QnymWTpyc`bYahZXRWSJVOKA<CKAAAOOEB9/2:???=<<92,,+(*),14411345566664323210.14567:5-+0:FOW[^[ZXVSQNH;/--/2568;<=>?CIJHJPUTMS_\\YXYW9+1832;>?=9;:747AFE=@UinotqoliN4JdmWL83HVI@@@?>><;:767=CLRTQJ>:KVNN]jh]JCczuaOA:CR_^TJHORSQOMMLGDGFJV`VC>DED]nQLGQV9BeT<378>Ha{xiWZ\\E;KmpJ9:DICBILLLKGCAABEGIIB834643=D<137:9;DC94589:>BFHIKKE;8=DKLKIC?CIGGKICBD?89AKLKHEEC?>>>=<AKTUK?>BB@@<<@DDBAA>=@JLIA==?A?;843=EFDHSVPLPW^accebPCQ]N><@DGHHGHHH:<F>999647::89KWPUkxbLIG@88;>A@??BFJIC=<?BBBA??@CCB@DF:6=>?@;668::8666:>;8BE?:998:;><;;8:AA?AA;=AB@?>;;=@@@AADGB;:;<=958BFE@=>?ABB@>>=976;DD?;99;=:77:820245555664444457:>AC@;::9:;;?HG?;;;;;<;99;?;229::=AFJF>855:?ABA@?>98:733222123333467<?=<;;<<==85444422579<;;9777669>ACC>669437869::>>713467988:;977763245667DJG9000,+---09<76;ADFGC5+02/1443:G>,)3310;JQOD=8;?90+-00/10,0LYVWG<776:9=FIB>DGKRbc^bmkmrvofgSRNLJBBEH:470-/..4?:bO553334=1JT:<71036768:==CB4-0469;;933;B8)*+,-//12/04662..279877779BGA<<;8410004556?EHLI<;JPLIHHIGB?@@><95579;=????>==;=DGFFFDHNONLHDDIOVcgbGGGFGGGGGGFGGGGHIHGJPSV[__ad\\PJIGEDDEEEDDEDCCCBBBBCDDDCDDDDDDDCCDCCCBCBABCBDCBDEDCCDFGDABKRTNKS]bcgjihged`]_^YXSLNPEBBBBABCCCCCCCCCDCBBBBBBB@>===>>>??@@@@@@???>>>@B@??AELPNNQSRRRSQQQQPOOPSSI@<;;;;;::::::;;;<>>>?BDDDDDDGJFFIJJHECDCBCBA@CIJJJJIHHGFFFFGHKNSTdqcdbO[faXTSV`b^bmspqsolnoqppqqqqpsujeZR^Z_SLQbgY\\DFNRVYWfp~uqsmT?BNUUURMJLMKTXXXWZYSMKJIGEECCB@@?=Vu|pbVU]hzuLBFDDEEB@>@A?FKKJID<>=TXA;?@@><;<>@@@@CFFEBADELF;uTHNQIHRUL@?@@EBCENHCCNQI@?AAA@>?>?@BEDCDEINKFA>GOI@@CECEKQXWOLNNNPQW^]U[aUG?@A=\\}j`VQTXWZagpwegxoWOU_WouxlSc`KLHF?7?HNLLMNee_VSWbk[@;BDBACFHKV[NRm~ofmpkligpaJNPLG><BDBIXUF?CFFFGIKLMNOPSTTVXYZ[\\]]\\]^_^\\[[[[[Z[]bdcbb``abb]PGHHFEHIILQZ\\ZPONLJKIFEDA>=>??AGJGEDEEGKS]]QID>=ADEFEKc`RKEBDGGC?>=B:;=<?ECGIFFIJIIHHHFKV[DLvw[NRZiVA?CCCDFFGGRNR`wξ|pbafgjg`ZSPPQMKIIHHM]hYYo_MY^xȀ~zzuh~Źúzrquwupid`^^]][^]YUTRNJFDA??>@EKNN@?C9Zmhqogkl]W]R[[n}lWXsxhbd]be][TXURZVUHDKLBFHJID<0.4;>A@@>>;622/,--.0332445556766788874239==<<=;72.-/5<ER]]][ZTPG5+*-03468:;<=>AEHHJMRTNNXYYXX\\H-'346;:<:<A@=:?LQPKL^mqso__ipV<P]i]SB:JG48>@>;;<=<8579<=EOTRH>=@Lj^Fb~pdSQe|}hRNSSNHDA@CDFJNW]VI?>@DViVCFECTM<LRIA>;:6Lxsc[PG@MipW?:@<66;@ADKMJIHGGHHHJIE818?;457523687=LRF8379=BEEFE@>??==?CFFEB>?FFDJPOMJD<=GMMHFHGGIF<535<GPPIDABDC@=?CCCB??@BBEIPIA99=@B?77AGHJR\\[RLLSZ^^^giQ=CIB@CHJGIHFO`jWA=@<::99;;:97339FV`[VTL>7?DBA?@BEEFD@<=ADCA@>?ACDB@CC;8===><:9:<<97579:67<=;:9;<=>=:963=GC>??=?A@?><:;=@AAAABB=78<=;977>DE@<?@@A@?>=;7569@B?:78<@>;9764223345555423557:?BA?<;<<<=ABABB@@A=77;=;999847:99;BHID<63258;;<?@>:87664158643342037:<;866788721356741348<==<;:879<@BDE@>AA<7434687<=5.2:<:635;;8799853576668::82231//0/0588:>BFG@=4,14204302EE8)/31.2;A@>88>@=:860,*-++/DT`eOAD9>?<CJG@<@CLXlgPPminxskZQLMKC>??9650//0009E`8559997=2UI276227:;=718>B</-0466774/.384+,,-.002213689720025787899>B>;?<95/-/14433<GMLF;BU[RKIJKJGFKKE?:67;=?@?ACCBC@>?EIIJKLRXWSNHFKRV\\dktFGFFFGFFGGFGGGGGGGHILLOVZWW^]RJGECCDDDDDDDDEEDDDDBBDDEEEEFEGIIJLNKGGEDCBCDCDBBCCDCCDDDA@AFKKHHMPPRW[YSRSRPMOX]WQLHKJCCCBBABCBCCDCDDDDDDDDDDCB@>==>>>>>>>?@?@??>>?>>@???BFLNLPTUTTUUTSTUTRPOTVQJC=9:<:899:9:;<<<<==>ACCDDDDFIHFHIJIHGHFFEDFFFHJKKJJIIIGGGGGIKMQUYUEMTDQjcYZWUSUUalrmpvmfjjoroppppoqwsdYMTXbUONYhaaHDOQVYpSml|vorsjBCTVSQPLLOPHHQXXNLPJLNJFFCDBAA@A?=bri[VYczxN@DEEEHIHEEHBEKKIJF<?A>AEE@@@>=<<=?@@ACFGGFEJPRG>wTGJIEBCGIHPKP[E>EGDCBLQLDA?AB>=?@ABBDCDEEINHDBHNSLAADHFEMT[_YQOONNW^ih]^aXL@>D?PpgG@DIOI@A@FPUOOXd^VV[MYpt_ZjVNK9338CGDGHHN^T]ZRWdeN8;BCBABDC@ENYl~~oXHVpywobbU::>FJGABBDNbqoe[MFGHIKMNPPPRSTUXYZ[\\^^]^^_^\\[[[[Z[[]adcba`_`bb[G>?@@?>BGGLUXYPPQNMJFCBA?==>@AENUQNMNNJHMQRSNH@>ABDFOYWGFFGHGGGEA>:;?@>ACCDGHFEGGFEEEHGGGOWKEjq[IP^cK?CDDDDDEFQNTXê{ugblqkgd_YRPRTOJGEEAIR\\NEp{[at~˷ttmɺɸ|pmqtqkiea_]^\\[[\\YUQPMJGDC@?@??@HPND>?:_}pjromljZUcYXeq|hYYrynbaaec^YT[X[]XTJLONIHFDD=/,7>>@BBC><;9841/456799799::::;<=;<<<;99:;<<<<;<;<:871+-2EW[ZYTRQH7.0144689:;;=@BDFIJMNMMPUVUUXV:(2;<9444@FDDGNSTSQUp{vt]@BZk`FST]PDBC@A@HG:799<=<8678:89>BGKMCJs~[LTgpiesqVMQQMJFEFFDEGKZ\\MHD?FOTWF><?CMVLJGB=886Cbu\\UPD=@@>;=@=::=@BCGIHGFEEEFEFFC6/6=;8533454426FTOB@BBFIIEB?:;>@@A@;<?CB??EGEHOQPMHEGNPMJGGGGLI:344:FMMHFCBFDB@BCABB>?IPNILQNE=<>?>><;BEEFHMRONSUU[dgg^H7798;GQOGGFFRdxoH?IHDEEC=<;;9759BFHT]WF85;>@@>?ACA<>@@@CEE?>@@ABCBA?=<<===>=<<=>><::;856::9:;<;;:::9516@B;:===<;==<:89<@BA@?BB=78<=<976;AB?<@A@AA@>=;879=@B@<98;@?<:7642224433788899=@CA@CEBA??@A@?==A?==;56;=;8547;;968<<<=;732477546<>;:88644357532343018;98535665643467974645:=>=;;:9;>@ADHHIHB?;2048988:810565425;;9899977887774214548@C>9668>FIFEGG:.//231/122.<KH2022.-332>@@CC=9;83537265>FRYPJR<A@@CC<9877?EaiRDgjr}qfUOSMC;97:9321//-.2[C/;IOOTSF5]I8;7468::<:9<=>5002454442..131,,,-./013479:<<963/26;;::;<;99=>;7412232119BDDEFMYZRLJJKKHJTTKD?:<???@??ACEEC=>FJKQUVVZ[XPJLOQ\\nqvFFFFFFFFFFGGGGGGGGGGFEHMNHDPZTIECBBDDDDDDCDDCCCCCBBDDFFGINORSSUVWRNKGEDDDDDCBBCBCCCBBAAACEHLRVSICEFGGFFGIIIKQVUROMJKE@BBABBBCCCDDDDDEEEEFFEEDA?>==>>>>>?????????@?>??@?ADDFMSSRTUVWVVVVVUSPQUVSK@;:9889877:<<<<<==>@BCDDDEGIIHIJJKKKKJIEEOTPKKKLLKKJJHGHHHIKMPT[\\G9B@Nec[a_TPPQamlgnqebgdjpoooppqqstjq^NIQcUROSYgeMCLQWXnQusx{tmspkJETWQOONPRQKO[\\VNIHJ^mfSEBDB@@AA?<htmVNQ^zyQBDDACLRSQQ\\XIFKKIGC?BA@BB@@@?=<<<>??AGLJIIIOQQIA{VFGEEDDBGJVqi=BBBABCHPJC@@@>>?@ABBCCEEDFJFBDJLONCEIOOLRZahdVOQQQ[bnkfeaYOLB@?BKJB>@CDBB@>?<;>EHU\\OMRF?`xj[jlOVL>LOIFIFFFKQLCU]\\\\]XC8>CCBAABB=:CcyugRB=C^v}n]\\\\UVROLGDA@BCKatthOFGGIKLOQPQQTVVXYZ[]^^^_^_^\\\\[[[\\\\[]adcb`^`aa_UF==>CGINOLKTSOHKLKKGDA@?<<=?AABNZWURPMKROJNONLEAAACKXXPJKPTPJFEFCA>>ABAACEDEGGDEDCCBAABEEKKPNFd{XIVcZFBDCDDEEFQPLhϵvofkzykca^YRPTVQJE@CFIV_aXpv}°ĴpstĻǸvmoutjefc]]]\\[ZYYVROMJGECA@?@?><DJOH@<8_rjqpljcWUiaTiv|dYZozta_egb_XT^[c_[TMLQTNKHEA2*6DE@@ADD@<;<=73279;>@@?>??@@BB@A?>???=?IG@<<;==<=??><=903NZXXUUVSL?50245799::=@?@EHHJLLMORSRRU[M;HHA8/16EJHKPTTRRSTsw]4/OfgPW[[YHCI;BPO<1589;=;87646;;9;ANUPhrcTII^qk_vlWMPQOMMKIHHDFCI\\YFFI?JUPWbUCDUWOSF?>;<75Oulc`SD=BHFD@@?>>@CCDFHFEDEDDDCDB7/5;:?>?>;74304EQMIPQLJLLF:69CFABEA729AB@@EHGFKOPMJJLLLKKIFGFD>3/35:GOKIGDBDFECDC?@B?=BKOPOQRLC>@>;=BCCCCA==FLPW]YZdmcM>87755DTSK@>EUmsN=GKGKKA>=;;:8::<@FMQJ>5/35:>>>?@@?BDCCEGHFDBABBCCB@???====<;<=>>>>@?96:<;;<;9653578559;75;>>=;:;<:866<ABB?=BE=78:;;:768;=;;?AAAB@?>=;;==><:;;:;??=:86421246129<<<==AFE;>FKLHB@BC?=9<?>::877:><833:?=:89:97655569<=9547:9877522322442245448988645652464568::;:438=?>;;<;=?AAEMPNGAA@835:::68;3/0/0214;;:89::9::98997554317DNKEBACGKLMOPK;02421.--/3/2CM?322-.611GSLLSE1036@D?4337<=?N`]?<?@?=92/--02FXWEUhstdYVWO=579==:754011E`4>OX]]hfI7UWNG<699;:<;<9=;.024443311.-032.-,---/1346;<:::;:106>?=<;:647<@?;75532101454:IRSSRMKNNMJHJSTLEA::<<;<=;:>FHD<=DCFT`[SY]XPKJGIc~FFFEFFFFFGFGIGFFGGGGEBDFDAAHPOIEDCDDEEEEDEGGGHGHECBDEGMNOQWWVUUUWUQNJFEDDEEDBBBBCCCCCBBEKPSW[^]UKGB@ACFHHHILNPRSQRSRMECCBCCCDDDEDEEEFFFFGGGGFDA@>==>>>>>????????@???@@@@?CLSTRPUYXWWYYWVXVSRWZXPGB>7799887:<<<<===>>?BCDEEGHHIJKKKKLLMKHFJW[YVMKLKJJJHHGHHHIKORW^J=DGO`_[baWQUXajf`\\ZY`d``gmnnoppqssnml^NPZLKRPGWyiYONSYYpVsvkduhmug_KFQUROMNPPM[lp`TMEAPl|w^EBCB@@AB@=jtnTGPg~WJLC>BTYVVS`hXGILJGD??BBAABBBA?????@@BLPNLKKQPNGCTFFEEEKKLHDSoU?@AAA=CQQLGCA@>@BBBBBCEFFGGECDJMSQOOIU_OOYckp`RQWYU^hflia[Q[ZGBA?ABCBA@DBAAAA@AHKJSQGUYJKht]XiUGXRj}nPDEDFFHMD<IWWYRF><@BBAABEF@8GiveNA>ABF`tm`ejgcf_LEECDEEDNbiaMFGIKMMPPQRSTVWYZ\\\\]__``_`_^\\\\\\\\\\\\[\\`cca`__``^[XNGHPZjpnmonlUD?BBCCA@>>=;<>@@AMXWVSHCMTLFKMNLKEB?COYUPKNW\\WOIHIECAAABABEECDEGFEDCBB@>?BESSGPPG^mFO[cQEDEEFFFDQPHǨznou~yja`]XQQWYRKGDIUT`szfrlr{nsxȿzqoswpged]Z[[YYXVUSOLJGECCB@ABA@=<DNGAD@asotnng_VWj^Ulyyb\\[kzub`gha`XS`[e`[SMKTYQMGH@39IIB@AEFE>==>?6348;>DEDCBCCCEGECB@AAAA?AMPJEBAA=<=?>=;?DCCQZYXUUVUUQD:64688:99<?>@EHGHKLLOQRQRRZ]QMQB6/?FJMOOQRPOPRN[zm7(LliT]gkl_IH=CQUIGJB;>?<97637BDEJLOQO]kG>IHeztukZbhZZYRS_YKBFHCG?J]WAFI@KOBUkWJL_`ONNAM`U;6Da{vsrdNGONPIDC@@?@CAADEEEDCBCBBCB;=C=;?EFE?83426GTOKTXPLOPF93<ILGCEB969AABCEHGGIMNJGJMKJNMJFGGB:216;AKROMIFDDEDCEC?CC=:;DNRQRUPD??>;=CECBB>::@MRW_a\\\\YM@:::;8;MXTPIIPXh{qTCEHGHIC>><;:8::@IKD@:300=?::=?@AABEFDEFGHIHDABBCCDFHGC=;;:99:;<==>>;879:;<=:5545688788879=??=;:;;:767<ACA=:AE>:987997666559;?AADA?>=<;<=978<@AC@?<;87632257329;====AB96;DHKJBA@A?=:=A>:89::<>:634;>=>>;;<<86:=:;==;7337:9654222135863679:648:87553257567889;:648<?>;<==>@?>BJPMB>?@;57<<845:41..0247;:999::;=<;=?<7561--5=BCGOPLHEHPVSI;76875333130.7EG:31..23;OXSX\\H439:COE603595,Cie?8>??A=3.-.026BH?>We}oWZRPN919;:;<;;<665bL8OXU\\ivmN:?U[TLD=;;:<F<4:;434564200/..032-,+---/1248<;637==616>?=<;9536=@=8633210010--7JUUQPOORQMGIMNOJEA;8:;::;;;;>AA;<;4:L^\\XYZWOHCCMhztppFFFFFFFFGGGGIHGGFGGGEB@BBBEGGIIGFDEFGGHIJKORTVUTPFEEEFIIKOUUUVVUTTRPMIGFFEECAAAABCEFFGGLSXY[\\]^^[TNGBABDGGHKMNPSSRSVUPIEBDEEFFFGFGGGGIIIIIIIIFEB@?>=>>>>>????????????@@@@HPQOPSW[ZXZ\\[YZYWVYYZ[VMHB:9::987:<<<<=<<==<?BDEFGGGHIJJIIJLNMKJGN[d`OHJKIIIHHHHHGHJLPT[SGSXRW[]^^\\Z_dab__acd``[X]gjkmoqqpqoqrpiaXLEKOJJ{m]YUT[[n[pyeVt_rvPNEEOUVMJJOP\\osi]UMISh{u[FBBBAABA@>fujWNO_xmc\\HAJVTPORY_[QKJKICBCDGGEDDDDEEDCBBBCMRRRQOPMKEF|ODEDEHQPMMG?8G\\PAABA@?ITZ_UHDBDFCBAACEEEMLGDDDGQ]YXWMXfWKNYgql\\SZdYV[Zmrb[S[eWOMHECABA@AA@?>??BMKAJdhossb\\iYXXEDVYjFBCEIFDJCDQUMME>@BBA@@BEIH?9MigOCHNE85KiqorjPH]^JBCGKNOMNYYPJGHJLNOPPRRTUVXZ[\\\\]_`aba`_]\\\\\\\\]][[_bba`_``]YRNNMIMOW[`honsmD3:<>AA@?>===?@@BINOURCDRWTKGGHIKIC>BJOJKQTVWXURPOJEBAABBDFFCACGKHDCCBBAAAEDfcHMNCZWERa^MFHHHGGFRLSԷrkv{njd`\\VQUZYQKHNRb^ey~d{quyuzpprvried_YY[YWVVTSQMIGFECDEBBGGIF8>OF?TKj|uxylwgaV]jRYrysef^hzvc`efbaWSb[caYVMJ[\\XRJNEBNPG@BLPJ<=>>B>757;>DLNJHFGGHKNKFFDDDCCABHPSRPMD?;<?AJIBHRRUYYXUTUVVVTNE=7:89:;<>>?CFGHLLJNQQRTPPXWISB36PVORRPOONOPPNEScnpJ@^vUC`jme^VUFANdmfWHACA?=;:8=DILLLKMKI]vr^hlwp}zhXO]}o`ZbhZE?BHNRLM_XJGF?FG?RXMSPTSLBWMJiM4/7`|macZHKVTSRKD@>AAA@AB@BDDBABBCCCFLLB;<;=?=9766<KVSOUXSNKGB;>FOUPDC@ADDCBDEGFGGHKGBAFJIKPPIEGIIB<:>GKKPSQMLNMF>CGEEHC<53=IPOSWWN>=A>?CFEDDCBAFPUTU\\a\\H<=??=:=EPZZT]e^MFV[QIFDEBBEA?=;:9=GXa\\N?601>PI:=EFCBCEDBCEFGIKLE??@@CGKLKD<9<<9888998877766:;::967799:99999::;==<::9:::;<?BB?;8=C=;<=?=967642479>BDCA??A>;9<=AEEDEJE>;:99;:545798:;<;;9:6/1;?>FGB>;;<@CGHA<:<>CA@;658>?>@?>>?@>;?@98;876325887642344578538:>>617<9733236856677788769<?@?>?>?><;:AEA879=;8;?A5058741036=<;999998:=??B@:422/,0;>73;JSNFFJMJD<6259<<=AA73322;DB920..8FPU\\bQ75=E?FRL;427>;07SZ?8<@DA>?;8766:;:75>Jae[VBBD4/596566;=91F_38HKUev|pQ?FBKTUTF<=8<RH*6>@668871./0/./1/-,,,,.02358<;745:;857:<;=><;78:;73422100///..3?NVVTVUJA@DLPMKJEBBBA@@>;=@=335583,1@U[WX[XOIJQ]ccXTcGFFFFFGGGGGHHHHHGGGFECB@ADFEEGGGFEGGHJLNOQVZ\\]]\\YOHFFDBBFOUVVVVVUUUSPMJIHFECAAAACDGIJJKNQTW\\\\[\\^][YSHA?ADEEFHJKLLKJNRNIECDEDFGGHHHHHIJKKKKKKLKIEB@?>>>>>????????????@??ACGGEHPX\\[[]`\\X[]YX\\]ZZ][SKE<:;;:879::;;;<<<=>=@CDEFGGHHIIHGIKMPPOKINZ`PDKLGFHHHHHHIJIJLPZXSa_KKZ_X\\cbbba`Z`s{r^QKJT[_cefiooqmpruuoh`NDJITbRRPT[\\jYp}s\\}q`}kDF@DNYZMIIOaq{t^TTYetv_LECABBCCA@?dt_KKIG_~vo_HERVQRVY[[ZVPMLNKFEGJIFEEFHJJHFDCDCHORUVTQIFCJxJECB>M\\QDFIGC=:>ABDCBAEFNZSEBDRRDA?ADHEER[QCDDCJRTTVWemfUJMXcqn^Ugg```orf\\UOX\\[[PFBAAAA??><:==;HJAG_wqbg^OW\\\\K@XnhUB@BLPGDFAUibNFECCBA><=AGLIBFXbVFMgylSCJboj^J:AJOJBCIPRUTSZ^VOGHJLNOPPQRSTUWY[]]^`aceca_]\\\\\\]^_\\\\_cca]]_`[NMC=FA><989?GFE^T89=>>?@?=>>>??@BBDHJFBMQQVSJDBBEFEDCDDDGNTQPW][VSOGBBBBDDCC@?ELPICCDCCCDFE@McLHLLZHKWcWIHIHGGHSJsƯ|rvyqlf_ZTQY_ZQKKOTirh¹zykwurkqvzmegf]WXYXVRRPPMIEDDDCEMMEJSPLECPK=ONg{|yymd_hjM]womipbe{wd_decbWRf\\cbXXLH`_bVMWPMTKHGHOH><DA@F:78=AB=<;:<BGJMPUSLJKKJFFDDINSUVTFA==?AP_a^ZRSXZXVTUWXWXUSLF=88;====>@DFGIJHKNPRVRLNXQO:0<TRJTUQONMNQPTJFF>YechnI8QVL9;PdRFUijSCCGE@>=<<;:>JNMKIC?CB>[}uwh~~bUQLV}m]]_VLGFFIY\\TO\\ZUIA=ELJVTJ[ZTJFAOUEM<2/O}zza@<B@DOTUTJ<8=CC@@B@;>CDA?AACCDGIE?<966:<>=<<>FMNQY[UI>::<GNPTSF;<FNKCCEGIEFGGHD96=CGIIGFEFJID@BIPPIMTQNMOPG9:EKLIC;6:@CHOUWXWKDJIBCHGFGJNPTUUPINaiS<=BB@@BCH[e[lyjJ8?KPNJD?=?BAA@=99G^osiU=567AJB;GNJEDFGC@BDFHJLJA9;<>@DGGGC>>DE?9::;:9866557998::77768:?@?>95445789989;=@ABCA<8449;;<@D?86531159>BCDCBAAC@>=<BJKGA@AA=99:<@>9767=>==<:963114;>=AEB9327>ENOH?=@CFEB=:9=@A@?>??@ADC?<78><8644447:964577774038;=?;69:52000489666655668:;=?BCDA@A=9757962248;<@CE?8;<;7426:??;89:987:=@A@<3.--.17=>;77:>@BKME:64359;==?AA;448989?@82/.39DP]YA6?GKBJSO=338?;628@=8:>@8CTSOC;=C?<=:55=et\\iN;:91..020/04423^C-349ZojrrPA_G9FPQG?@6.NX2:BA=:<<<7/.00///-,,--,-02358<<;:7568:8668>BA?;975423320/.//00.,1>NULED7.4DQQJHIHGKLIGHF<7<@83100/..7ITW^^TMOW_f`QFFXGGGFFGGGGHHGHHHHHGFFFECBBEEEEEFFEEEGHJLNOQVY\\\\\\][VOGDDDDGOVYWWVUUUURPONKIHFCA@ACCEGIJJJLQTWZ]^^^\\[\\ZRJEBBCCCDFDCCDFGGEDDDEGGGHHIIIJJJLMMMNNOOMKIECA>>>>>>??>???????@@@@@BC?=DT_[W[c`TR\\\\X[_^[[^^ZPF>;=;988899::;;<==>>>@BDEEFGGHHGFFGKLNPOKHLRJBD@=@DEHIGILKHHJLNV_g^A?\\gZ[df]U[^Z[fqfM@?EKLWdcVZlqolwqtspnphYHBc[JILTY\\eUp|g[lcBDCIUb[PMJLgwwj]WWh~ugZMFDBCCBCCB@@jlUHIDE`tcRHMTUW_efb^[WSNJLLHEEFFFFJMNLIGHIGEDBHTSTVOGEAL}JDIIGNXL@AFEEDAAA@?>>AOPIEDEFN^^SE@@ENLCQkdE<?=9=@CKWouqeZSQUjwkR[lffdhjec\\NKSSTPFDCBBA?@=;>A>;BE><G^WIA??Nf\\KDYh^u`GD?AKLFACA]tgPHGD??A?<=?EKMO\\giddp}q]WZWOKJMMGJQHCLSZafjp{}aHHJLNQRRQSSSTVX[^^_`cefdba_]]]]^_^]_bcbb^[XWHgM9C<=??>;>>9@MD<=>>=<=?@@@@?@@>AGJHPY]fql]OFEGFFFECABFMTOHP\\^YWTKCDDDDDB@=?GOOIDEFFEE@B@B?kZLMNXNIP]^LFGHGIJUGӷuyyyxmd^[TR[`ZRLI[caqjqplzlit{uffjdZUVVUSONLLIGDFFFFBFTQ@FWQMNVTE?J[wy|gbjlVXhhkpvhh|yjacghe\\Te^aaYVKMZ[d\\R[UUPHTIHF?ENEGG<;==@A9,&)/1/6?HJKJHGGHGEHLKNPQQQPGB@DA?H^lg]VUXXXVTSUWYXTSRRMD>;;AA<9;?CEFHIJJLOTTMJSYP=;O]SPZ]YSNOOMQSTMH1>Ycir[=340-/Eh\\T[XE55AFB=;::;9;ERTNG@8>E9B}karXs|aZaZX|lnc[\\RHJMPMP]\\SPTOQJEEWg^]ZJ]keNDFDXJ?C@?y}|zuv_7/<><?DKL@319?@CHIE@BEEB@BAAAA??<<>=:<>ABCCB@BILP[_S@6765?NPONE8:IQJEDDDEBAFKPM:1356778>CDFFA>EKMJEKTPKGGIE94>FEA><<@@?@NVY[YPMTQEEMLJKOUY`]PJHH\\thG=CDDHJC@Wmgt{aE=@DJMLC:;?@BBC@;7CWer`C5464<?>DPLHFEFECBCEFFHIE;58:<=?@CFECDFGE?<?AB@?;6468778:;:8779<>AEA7344546;<99:=@A@><974358:;;;:76434437=@@AB>>@ABCBACFD@<;9:::;;<>=;867::<>=:9756:;=@?@B=21124=HMMIGFFGFBA@@><>A?=>@A?DE=65<DFA848978;;86799:854666:?@;884/.135;:67787779>BCBBFCGCBA=986665415<DFFFFE@>>>:758>>=?@=8668<?=:750-,*-8=7<CA>=2,5@B9458<CE?<<<:7547<=617?;422//9DGBFTZOIDNRF415;?71138=<=836LZ^ZE?GFC?=:451Fpiab@99531-)*/.+--,F^4.1+5]ihuxpY[YF9;<;==3%:`F@GEDB??BC;2/00110-,--,,/1369;<=<844<@A;669>=<<:8896420/.///00/026AG<10--7GPOHEFMQQOMJHIB22@E=740-./18FV\\VNMPV`e`SMS[GGFFFFGGHHHHHHHHHGGFFFECCEDEDDEEDCDFGHHIKNSX\\]\\[ZXUNGDCCELV[YVUUUUTRPOPMJIFB@ABBCDEFHHHMRUVY\\ab_][ZZXUOHCBBCCBAA@CEFDCEGIKMMLLLLLLLMMNOOPPPQPONLIDB@>>==>>>>??>????@@AA@BB><FZ^QPZ\\QJPXWU[_][]``_[QB;<;988:::99:;;<=??>>?CGEEGGHHGGDDGJKMPOLJKHC>758>DGLKIMKIIIIHQ^bP=Mdf\\PKW]WZ\\YZ`ZKGLJGGO[a`YV[\\jfxonsqjlpnYStyS@@JRX\\aSm|zw{eVVACJP[_TNIGGRildmmflogXNJGEDBDDDDCC?@vrYHHMZspb[Xd`W]jlga_]WPJFEEGFDCCEGLSPHFEHLKHF@^w^Z[NFE@NNCHRcbNACCBBBBDB@@>AILU`TDEKXeji^JAAFPNCRtw_E<?FC@FJN`jfbbaZVcphSPjlcYYgca^VOJDAEFCDCBA?@==IPS^aZHB?BFHKXSTj^HENKLJGIH@=?CDCC;Mfg[IDB=?C@==>CJNPU\\o{ojcYX`_RKFHTQP[it|kHIKLNQRRRTUUUVX\\_``adffddcb`___`_^\\^dcc{vQJūD=>>ABB?;=<7;@=<;::9=ACCB@@A@?BHPZZ`tveTLMLHGGGECAGOSMEL[^[YTLFEEEEGFC@AIPPLGGHGEGFBHCBJh[PJTRPNU^SHEGGHMQOϱ|vztsnke^YTU^_ZTQJ`}b{ǰˬ`~h{eȹ|swyvnpwtf^ac]VUUSQONLIGEDBCEFEDANcR<NYJPeXLANXgzgben[UYZsuzkl~|qc^kngbXda`b[SPSQX_dURS\\NO_FDHPYPHJHAFB;:740,2;9023456555357;AIMMLMLHCGHDFBJV\\]ZXVXYVVVVTUWZ[VRRTVTMC;<A?8:=ADDGJIIIKNSSMJQSKETd`__]XPMQOFNVZYT:1FUcsqY;217;Op`NI@76;ACB?<954:IXULB<<BQSCGbiwg[aIalc__Vq~TYie`aVEFOWOS_ZRQSILOQUmy`T_[_ruSCJDRVBDGLzqcS=:A?98:AC:16<;;>CGKKJIIGEBAAA@><=@A@ABCBCEEDCGOTV^_Q?842.2BLLJD;:GPIEDDB@>COYXSQF80/113;DDEJHCGID?@KSSMD===86;<86:@CEBA@NY`b^TNTTHDMVXUPNXjfOJOO[pkMCMMJJLGBPir~tL:=;:AEC=8:=?@?<:7778DcP4585:HEFLLHEFGC??CGIGB@BA:6:=?>?>BIGCBBBDB<?DEDC;89768:88<?>;>DC=>DA::=>>:9;<:99:<<:7689999999768:;:;=;669;>AA;9>AABDDA=:9::;:99<<;;::887558==:87:=>;9<@A>943579:@FIHEDBCDCBB?<8:??;<ADBDE?<=BEIF927??:9::99:::::<<859?=52:920479>;6789997;BDEDCGDCBAAC?::;;=<56@JICBDD???A=98;>><?A?6118??9521//*&3C>9FK>7DB3-15249?EJIC><;9402::61046544566;=32TplQEERN9,29==8225;AA=1.9?DNI78@??>856;68XkhK679753/-19;1++3ZF0/4-3^iz~y{X]Y@&,0440*-RXDIIHF:AED?4/12452-,--,,/148:;<<<;:;=@BB<8789;=<<<9642134542358<<<=;720/5?JNLIHKUZTOOJFJG61?HDA?6-+,/49BGGKOHN]^]\\Y]`GFEFGGGIIHHHHHHHGGGGFFECCDDDDCDEDCDFFFFFIOU\\^]\\[ZXUSMGA>DOWWTUUTUUTROPPNLLHB@@AABBCDFFGMRUVY^cc`^]ZZZXSKDBBABBA@@ABDEEGILNPPOOOPOOOPQQQRRSSRRQROJFDB@?>>??>?@?>???>>@AABBA@?IVREGOJADPRLNY_]\\`cbcc_R?9;;::::;:999:<=>?>>>AEEEGGHHJLLFEIIKNQRPOOLIE@>>AFJKJKKJJJIHKSTKN_ec`M<J]`\\UUYVNJNSQMS]_]\\c_NOe_xpdqulacghc]=;BLPX\\_Slz}zgZjnKEINSZTHFDCBAQcqzpbWMIGFEDDCCDDDEDC@DwyaKIVixsmor[Xdc^^]XQKGEBACGHFEDFJSK?EGIKLG@F|m\\MGEAOOEGC`}hC=CBABBCBBHQUZZQOHFIM\\gieTBCDGMKJ[r}v[>=LMIKMKOUTPMW\\[bdb]TgeOFIW^[UQQKMOH@?@@A@@A?ASfow||snO9GRgjVp_AAGB@?CIJC<:;?@B<APY\\M?@>>>?>=?EJKJIMizulgfcSC?CLZ``oyLIKMOQSTTTUVVWZ]_`abdffeeedcaabab_]^cdaqڱdx?@BAAA?<=>:79;<<>BILEADDDB@?>@GQTMRdg`\\UPLJMNJGGEBBGLOMHNZYPLHFGGFFGIIGCCJOMJHHHHGFIJQOI@i~[_KL[RJPX]OGHHHQGnȲ}zlfje\\YWY^_[XYNYpŮòuYxjjʹƱmkpoptvpdYXZYVTUSPNLKHFDCB@?CHEDDJ_fSN`[JW_WQYowxmklklc`\\WpwqpvcXpsih\\eg_bZTSWMW]cRNU[R[[KLVWSOLJHC>831220--10/-+,/200-))*.17@CBEJA:ESQ=;EQLSPFLZ[TSUXXY\\\\^\\ZXUUVVSKA====;>CCEHHHHIKQUQHISVEBUcc_PFDJNIGTbifW<4IXcjsrJ21:C`~_915<;<<>@@>811<OUOIFGLOTWN>77cfN>FS^`WRw{v_]bVBESXOW]YOSI<@K[dvlF?\\kbp{YDHCF\\KACH{|{ZHCABA>=>?@82=HG?67AKPQPNJFB>>>AB?@CCCFECCCCDDDGNTY^YNB942/-4CLGA=;?HHFDCBA>ESXJ>>G@63567<BCFNOIGDA;;HSTPD85789;;627BGGGFHN[db^]XSSL@G_l`KI`vhNMUUW_YJJTSMIGHLIPjw`F=>78@?=;99;?>;876981:YK94=JRZJEJILPMJ@:<BGHD?<>?>?ADCBAACGD?AA?CD>>@?<98<=98=><;<=?ACCD?<>?<=?BB?=:9777777557;=>>;9679<=<<<>>>=<<;?DC=;>@@ABB<447:=@>969999;<;:989;ACA<9;==858;989999;>?>AFEC@<=AD@<8769=?<:<ELIGEBBA@CA834<?>=<<=:7789;>><:;;4,-79536;@EA888:998=>><<;KF>??BD@?@ABDC:49DA>@A@?@CD@<9:9997762/19?;45970-,-?F9?QQ:(6NL;337=@EGGJE@<;=>65;3-.570/37777::45QniVGGUH1-6;99:;531;<4/77+0:6124447767883>XP537;><;8?LQRC1-HW4-1:3:egt{ye\\[M)*/..23-B]FFHHE9CF<94113563-,+,+-/147:=>>>???>?ACA;::;<=>>;7668;<<<;:9:;<=?>976204>ILIMTTY]WOJIIKH:19ACIG7,+.6C@87<GH>EPPROJJXHGFFGGGIIIIIIIIJIHHHFEDDDEEDDDEEEEEFEEFFHMW[YYZ\\[XTRNIB=BNVSPTWWWUURPONMNOJDA@@AAABDEEGMRTWZ^ceb`^[ZXTOICBBAABAA@@@AAABDFHKNOPPPQPPQQSTSTTTSSSTSNIGDCA?????@@@????>>?ABABAABFGEAAC@?EOMCI[`]]beeccebTB9;<<;;;;:98:<=>>=>>?AEGGGHHGLUNEFHHLPQQRRSSQOMIINPJIJKKJKKJIKJRdkbaf[KL\\eZHLUQKU_[OO]fc^YTZNZd^~p[s}sighijM<CJSOY\\^Uiyxm\\g_RPUTRSLDB@???CN`hYIAADEEDDCCCDEEEFDBGk|gVOWivv}zLDNPW^XNJHFDB?@GJIGFEEJE=HKIJKF<KqVJGGAVPFILSwaAABABBCFJNUUOLND>CJJJMQPGAFGHKQTcsyylK:BPUUSNKLMNHMX]cc`acucCBFJ\\\\JCMQRm~a?<?@ACDDCXox{w|iKWZuhUgWBDHFBBEGGEBDFEIPGBKKPE==>=;<><BNQQQRR]}sqrj^XZ^\\OLZivzSILNPRTVUUVVWY[]_`abdfffffedccdddb^]beb`c~|n;CDBAA@>@EFDCGJOW__OBGNMGB?=?GSL@CPWVSUZSLQTNKGEBCFGJIHMQLDB?AGHGFHJMKGGIIGFHIJJHDCDEYVJHj]cM[WMPU^VMJJJLAѽumib\\_b]Z[^b]]XP}è~sTpxɱ϶qiikkksqb[WWVTUVTRQMJHECBBCBBEIMC>GPV^V\\s^EU\\[\\jy~gqyv^koeWXowuxaWusklaek_bVXRYNS\\aOOZWX`USYXNRSOMH@833110-,*(*.012585430/-*''0;;DLEC?QcB42?@QM:J[\\VRSUWY[\\[]__[VSTW[UF>??>=@BAEFGHHINSRMJLTND?VaXA;@CFFM_mrmX>;M[`eutF,/7?XnN439=:;;;=?;2029?HTYUSOEFLQKB>`ulWEEFK[aYVu^EDKICJUSL\\ZTGWB59@QW]G4=Ocpw{SDCA5YbZJ=ajOIHGGHGEB>54AR[O>?HKMRSMGEB957@E?=?BHMJFDC@ACDEFIOSQLA744433<GE><85AKHBABCBBEA4-3>?968<>>@@ELKDA?DD>BLQND745668>>66@CBHKLO[`\\\\`[NMQIMivcLNhvdMR^]SPTTPPPMKJNP?9S]J?;95<@==<<;<=<;;:9;><>KE>3Pk\\XFEKJOURI=8<ABB@???==ABDDDDEC@@DHD@CEC@>90/;@<;>>=@@<;BKJEA<987678;==<9424688878<??><8668<@>;:;;:<AA=:>BA?>?>?A?:759ABAAA?=;89;>A?<;<>AEGGC?>@?9651/5:86679>DIKIHC>>@@;41249<?<98>JKHD?<:9975557;>@BCC>979;<<<::<7/,-/2456=FJH?<:;999;:9788KF=>@A?DHFCBDC=3/578<>==<?B?=:72110/103:==:46??5/6?F=3CTP9''?RM>9CJJIDEKEA>>?D?=>714:82038<81/3<CLcjaLIQ>.,387526;6,-./9>4-269<<<8115764721;7059?EFEELW^aR87UC32286J[D^{|U^XG603104858TLBJHC:EC433336653/-,,,-/136:>@@AA@@@@@A@>=??>=?>99;;<>?><<=<:979:::851//8@?AR[UW_[K>>DDA7-.5?GD4-39<@>845986;>EG826KHGFFGGHIIIIIIIIJIIIHFEEEEEEDDEEEEEDEEEEGGKSVTVX[[WTRNID@AHORTX[ZXXVSQOMLLMKFA?@@AABDEDFLQTX\\afeca`ZURNIFDBAAAAAAAAAA@A@@ABEILOSXXWWWWVUUUUTSSTTTSNJGDBA?????@@??????@AAABBABA?@@@?@BEJH?FX^\\]bffdcdggZH=;==<<<;:99;<=>=>=>@CGGHIHDCSXJDGIKNORTTTTRQTWYUMFGJKKKLMKKKIN^faagg\\T\\_RKQQMKUecKDT`ffTBPO[d_xmWrpsiwSFEHQO[\\^Xmvick|ia^[WQQQMF?>ADCCMVJ==CFFDCCCCCDEEFEDCF^mZRS_utxX@>AH\\aRKJHGEDDDFJKIHGEBBDKNJIGC@Az~eOFFI@ePBKhy}Q;AB@@EMRRIE?>SUCAGIDAEKLJKJGOdb_jsvpXFEQ^a^VPMPUVW[Y^gXPalZHIJF[ZIDMTN[{hI>@@@?A<Mck{~voheYweaYGCHHBBCEGILJUda\\f^FA<D@?>==;<=?HPRV\\]VYgwmVPanjXJShqjdfo}{rVILNPRTVVVWWWXZ\\^`acdfgffffecccdeb^]befc_Yc̬B@FABEILORTOJNW[\\_`THKRQMIB>@FNE@GdiYX_d`ZVROKHGEEDEFGGHGDDDEFGHFGHLOMIHHEDFHIJKIHFEDHYTIZUo][[QOQY\\UNMKEQϱynkh]]jmd[X]^JblNyѽ{{xNfϯϼzlggjkjkg][YVSWYVSQNLJHD@@DKIGFFXYGDMRSURcs\\AMWgWgteq}ZiqgVLcwxu][zolmdek^_RZTZQM\\`MO]WY[VVWUSVTQMI>8520--,++./-/22351246771.)1;;CHJN@GgW=E\\WSQFQLV[TLNRUWWWY\\_`[WVVX\\WLB;<@@>?ACEEEFMQRROJPRVDKUB;BECFHPcortjF;L[`iyf9.08>CH=;>==<=>><<611224BRSGA<9=CKQTR_J>XSMGLV`b]eu~vZAFIIJPROM[ZEE\\B8:=@>B63?DFO_bA=B?6StveHJhryZJJJLQMIC82>JNUQGJMLNPPLFEB6/4@F@<?EMROKFDA?ADEECCHHB;644468<DC;757FRND@??A=40/246::75>GF@?DGA<=>DKD<BHI@855324;>;<CCCGJLOZ\\Y]]PABO[grm]QMYY[\\ZjgSN\\gaWOMNPQE7?TXG986;B@;;<<<=<<;=>=>DHIC@<4`sSGFEKLNLF?76<???>?@A<7;?BACFE?<?HKGBBDHG@935@C?BB<:>?<=AJMMOE95334579:<;5358:;=>=>?<::65:=??<889989=>:;>=<::;<==:8<DKQNC??DGC=<=@C@<==>ABCCBBFID;:959@@:87537=EGDCBB@@?96566:@?:997>HE><9544213568:?EGHF@<=@?;:98:81/212357:DHHGB=:86457:99:AB<>A@AJQKCABA<5..2588752379=;72.,-0455=?:<<8;?<;AJI3.@PA4+'/EHAAKONLCCJEBBB?;>=<;99960025:;4/3EKHYk_C?B50./7<4(+781*+4<:6;==??BCA92023355:<52<ACFGHKORV\\Z@=N<8;8;JXD.Qw{o8][9632212674GUBHHD=D>122357752/-,,-./1468<@@?=:=@B@=::;<>>=?>;=AC<66898898998756631125516MZRS_[E237852-+0:?937@>60,.3533579A@427FGFFGGGHJJIJJJJIHHHIIGFEEEEEDDEFFEEEEEEEGGJOTWYZ[[WTRNJEAAFNSWZ[[YXVSRPNLKLMH@=?@AABCDDEIOUY^dgfdb`ZQKJGDBAAAA@ABBCDDDDCDCCBCEFJMNOQSUUUUUUUUUUUUTQNKGDCB?>??@@@@????@@ABCBBCBAAA@?ABCCCABMY[UWcgeeeehkbP?;?>==;;;::<=>=>??@ACGHIHE>GWSFGKKLORSUUUTLQYOC=ACGLMLMNMLKKKNSYaikgdaUIU`URUZ^UD?HScfUKSOVd[onWlv{tztaHAHNNX]Z_rh]g~~nhb]NMTXXJ@@AFLJFKE=<@CECCCCCCDEEFEFEDXpXQT[tuvmPC@B@JedSOMLJKIMQMJJIIGFFDIOQOGDB@8SxlUIDEHAlPAHkZ:@EB@HYenYE?@MTE@CCCDHSPRTSQ]rkTM[h_NQVU[bgc[VXZZ[^SQ`QGZUKPRKFQM@FJOSOGRkT?@?98:9>Th~~s\\mzmg\\xniiVIKKIEDDDGMRO\\vxgjoK9<@FEDA>=<>DILPUX[aosqofRCCGN`cUJPdpohfqYWRMKMPRUWVWWWWXY[]_`bdfggggeedbcdec_^adceiiXepaX>ECDINSWWTKGNZ\\XX[ZTQSSQNJC?ABDP\\mbTU\\bifXQNKIHGFDEEEDDDEFGGHGGFFHLPOKJIIHFGHJJIIGFECHWNFrVv[]XNQ[^[WRMAg¨{x~qib`imllh`Z]ZC^\\jӥ{~}yyJcyӿɭtjdejkjfb`]WSTXXTRNKIGEDA@FOUOFDPd]ECRTSWVgr\\FKffdlnqachcbQYpqz}t[ajmkhdl]XPXWZRK\\aKK[XWXXTRUWVVOH>57:1*+--/11.,-..02.,/434698=@:;>IF@?]_Tgi_VVUREO_UGLSUUTVWWZ`_][XUY][RA7=B?=?ACCCDIMQSRMOPSSJ?<>BGGHJQ_nuyzO8JZbjve<18>>=>@BA?=<=?=84211114895015<@@>DPifJ<bYRFGO[_^WNY}aAIPORWWUTQK<H]@;>D??@=7<B8<LJ:47=8Hi`fbOIKdeJJIMQNKD63LTIB??ADKPNJHHG?428?BA?GOOOQOJEED@?DIDDH>3456666:AB<518FQUQHDA<;74236776974>LIA?BC@>@CBEC<>DD;65434446=FJGGHHILX\\^b^MA<?ThfYQMD:2KiiriRS^ipiSEING:5DXUE98=@B=:==>>>>?@@;:?FJPVRK?TXCHMGINMD:76:>@?@@@?A@=?DCAAECABDFHIGC@AA@?=;=CGFB<:<===?@BJWR=6988;;;;=<999:<=>@=;;;;:8:;=<=;98758;:88=><987:;:67=FPUUQE<@FIHD@=?A?>?=<>A@??CLK@<@B@CFDCA@7027:948?BA@A?<=?@>@?98977B@:;84343234557<BFJLF>=??><;;>:426753357579=<;?>:9:;<;;::;<=AGINRND>@@:52356674.0017=?=50./3895774:C;5;@BBHG2,4D0.+,,459ENONMDCF?;>@;;>206:;:6-,06>FFDCE?:BOG01017307?6,+.44.059;>?><:9:9<?<631017FJ>4;@HSUTVRNJOVD:><;BGO_T;:F\\t\\,Ub6/20///152<UEBFF@@=300/25543/-----/2468;>=:647@DC>9778:;;=?@BEFA>;8996669;96553115730..?TSR^U=001111101686:DIA50/3:==>==>><=?DLGEEGGHHKLJKNOOPQNKGGFFFFEEFEEFGFEEFEEEEGHHKRY\\\\\\[XTPMJEA@DJQVYZZZXURRPNLMNOJB>@ABBBCCDEGJPX^fjfba_YQIFFC@AAA@?@ABCDFFFGHJJKKKIJJKKLNQTUUWWWVVVVUUTRNJFEC@>=>?@@@@?>>?@AACCCDEDBA@?@AAABB?AQYJIajbbffgjlfUB8=@===<<;;<===??>>@CGJKIA@OUKGJJKMQSTUVUPRN==EHCEMNNOPPONONLKNXfpqrnXGRZNMXZRJECCIW\\WTPMYdXkpXkklyoLFOOPRY^ea\\ey}xnd`\\PRV[[RJFB@IQMFE@<?BBACEEEEEEGFFFGC]pYRU\\shQ]MAAAB@La_TVQMMMPS[XPLIHFFGDCIQOEEDDHgoTGEBEH?pNA@OiyPGHEAE]vhD@?=@BA??>AHVZYYVVhwiOHOUM>M`_\\almhdd`^_^UGHBAMLGSZPGFC?IIJWZH8AC>BIIHHIIQ\\got_Ykruy|gfbWXVLGIIIGFLTOOk`SqYLJDEHEA@?<BJMORVdwzdPRYG9FTXTQ[hiffmrk|zBP[MJNRUVWWWWWXXY[]_`bdfgggggedbcefd`_abcdfidsj^\\hADDEGJOTVPIHMUXY[\\_\\USSRRNE??AI^eiga[X^gg[OMLKIFDCEFECDDEEDDFGFEFHMRRNMKEBDHJLKJIIHIIGOUE]ZlkhbUVbfa^WQBƸwuxwncaktsojif][^RTuzurx{sí}KgrҥŻsme`fjkid`^ZRQUUQONJFDCADIMNQVYOMMI\\cOS`]QNVhsaGJe{yo~fbd_jXSejpxv[ghoikdjZRPVWYRNZcLGXXXZXQPTSTTG=;=E>0-0465552..-./0.-.0-,069<A:69C966SY`hMUWPUMMN[TIPYXWVXYWW]`^][XXY]`XC9>@>?@BBBCEINQRQQQPTOFEEDDFLORZgsvyQ8IZeltp\\GIE>@A?>?>====:732221110,-159>BC94>]l`RbMECAI[b^YR__>KTTY_`]WE78O`A>AFDDD?<>@99B@72299EeTOZXKBMmoOHHKLJMD66JTQOF725ALJEEKJ=49;<@ADOTMKONJFHI@9@GDFK?0368777;?<613>MSPKGC?<<72257752245>HFA@ACFEEHB<=?@EE<33544532:HNMKJHIIQZbiiWE;4=LKKIFB4)>_rvbMZbalmR;>A=86AUUI@AED@:<CB@BA?BDB>8=DAMggjTDBDUODFIE:58AB@?@@@@>@CIOKGCBBDGLNKKMME:6:@B@;9BGEB><<>??>>>BHE>:==<=?=<=<9;====>?:68<<:;;;;;<<::65:=<:;?@>===><748?GLMOPE;>DHJIE?===>>==?ACCBCEA;CNI?@CDFFA82353029BC@ADA=>GIC?;74566975765444436867;>BGKH?<;;?BACE<4599765543355;DHGA@@?>><;::;;?LMLQOC;>@943356873/42*0:A<213359;97229B=:@B>?DC703>41.,--./=LOORKD=2-896HG/,38;;8303?JJHIC4,,-11+--281*4>841/00-.2;CB<9879:42>KKFC?74?C=538TsokjVEFOI=;:<=AJZW@BI>@cn<.EcC*2<;622500NP;@@=;84.,,.22220--...0248;;743456@DGD<6358988?CBDDCPRB;;6346667972/16852218KSV]L6231243233458AJLG<8=BDDDDEECBBEGJOGFEEGGILOORWY[\\_ZTMJHHHGFEFFFGGGFFFEEEEGHHILS\\]_]YSLIHFBABELUYZ\\[XTSRQOLMOQMF@AABBBBBCDEEO[ckqi[VWRKEAABAABAAAAABBCDDDDEEGJLMOTXXXXYZZYYZZYWVVUUUUTSNJFDA????@AAA@?>>??ACDDDEEDA?>?AAABBAAHODAWaVT`hjiiig]H<>>=>>>>><;;<=>>??AEHIHC>HTOHHIIKNQSUUXUUOBCIMJHKKMQTURRRRPOMNWdryoVFMMGINNMMLID@DIIIII]eVirXmrjrTPOSRPYeXTg|~}ma_]ZX\\^ZUQNE=DUQFF=7@A@@CEFFFEEGHGHHD_n[TU]r~hF@A?AABBISRRXQJMMT[Z]VMIIGFEC>=FNMNISkt]EDDBCH=xQBAAATzfFGA?@DRaVA??@@@@@?;:@Wd_SKL]hWMOLF?9Fcibhqnfdd`de`^N@=ACHHO]YJQhhXOJT\\VD8;ENZdd_[YSGEJUQNbkkq}s^RS^\\XRMSXWSYaSALiTHpwlhLCJJCBBBGLOQO]w]R_o^EAJV_abdhlrusognĽkEV[OLOSWXXXWWWWXY[\\^_bdfhhhhhgebcghfa_aacdeffgfehe^_[GCCCDFJRURPOPPQSUY^\\VTSUTND@A>@Zhoyt`Y\\ac[NMRPMIFCDGIIGEECBDEEECEIQWWTROLIIJKLKKJJJKKLNXOJyYwpmc\\ivnb]XIͻ{urpmkhryrszplka\\ecK͸selxjĥIhxy~}ujb]^fjjc`\\ZVONROJJKGCA>@DGQZYQZaXTX[^`WLTf^MZgfUMlowymngm^ka^j^`wjvYn{enfldfXRTVWWROXcRFRVXZWPMQQPLC@CKI<304/)'*-,),/0//04620.-,./6;99:4/=QUW\\HSULSMLLROKR[[YY[[ZWY^_^[XWVX^d\\F<=??@@ABDGILNQQRQPOQNKIFBAJSTQUjv}T9K^inqxtXJ@<AGFB@?>=>=@A?<93//0//27889>@949Jdof^G?=<Iag^SL]oU_cXWedZJ>@HSZ?@ABA@ACB?<659:756;;Dd\\CJOSMBNrtSHIIHHOE87@IRTE6216?EILNM@9>??BBFMNKKLLIGGHF>;BECHF==>=:66764678@LOKFA>=<?:./6<>9423:>?>?CDFJHGHC;8<@CE@847735978DPTPLHHFKU^jp\\>36<?ACC?<87:IbgWLZd]afS;79:;8?PVNEEGE@<=AB@CFCAAJMA?@>HfopVIPTXMFJI?46ANG?BCA@><=AIJEB@@?ACGLLIJLI@<==>=<>ABBA?=<>BCCBCC>6:=<=<<<;;<98;>==>??<9:;<=>>>>==>>=;;==>?>?@??@BB?87<@BCEJKC99@HJIHD<8:>>=?@ADGGE@=AMWOCAEE@>:726846@GFB?BEA<<CHD=511222249;86653249<:9:<=BGFA=;8<DEED<69;:876541367BLMKGG@?>>=<;;;:=JIJRM@9<>942124662098*,364//3568:<<;7;A?AID<;>>65;B?B0).7:0/?MSWP@3,+9:5KL:87865689>EF<530*)-0+,15651/-6;75651+*17ALC:5588740:MTRVVH:62/2/Bl}yuSAMXJCJLKC=CUSKVXF6AA+19WT/@RSD5750,AVB;987420./01210.-,.//0148:83249:;?DIG;1035667>C@BCAJPE:76555457:9502:@=9:>>BKVS>1330365334202;HOLA9;>><;=@BGLNLLPLFEEFHIMSVW[_abaca\\VQMJIHGGFFFFGFFFEEDDFGGHGHR_bdc`\\RFBCB@?BMW\\^_\\VTUTROMNOQQJ@@@AABBBBCCGTchion[KIID@??ABABBBBBBABBCDCCCBBBCCGJMNOQSUUTVWVUTUVVVVUTTRLHEB@@@@ABBAA?@@=>?ACBDDDDA>=?@AAABBBCCB?EKDBO[bc`_ch`K==>>>??@=;::<==?ACDDEDB=AMQIHKIKMPSTUXWWWRKCHKIIHGKUZUSTTTSQQOQbrfLFJFDGJILSTKA:;>??@F_gUeuWn{jmpXMKOPY`|WQd{xvm^^]\\Y][XURRQKQWMJN@<BA?@CEFFFEEGHHHHDVjZUV^p~pK=?@AABBFKMOTWTQKPvmWMHHIHFED>9<GMVfhd]LFCCACJ;~|SGFDAAFXuLGEA?=:DaYBAFHC?>>>=>P]RDCN[c_ZRKHEGTea\\iodYWX[hngfUB>A@DAF_eZhwcTJDLZXL>M[`djpj]SMIDDCJMXUOYmkOMSWZliWamljqpV=9KFA[vldK=GQMEDGGFFEKrqPGKUdfYSWahjihmsyzy}sP_śRK\\RNLKOTUWWWWWXXY[\\^_aceghiihgcadgifb_aacdeffa_de`_ZNECCCDCGPUTSTQOKGIU\\YVTSPMIGCFDAdrmwyf\\Z]`YMMRTTQOIEGLOMJGCDEDEECCGGJKLMKIJMMKIIIJIHIJJKTWJfWr{yreo}da_JɸvolihjxulmrvunhbacOqˮŻ``dJkyx˴{zymaYYahkf\\YUSPMMMJHHHCB@=>CECOd_[feXRQKM]ZGM[NTbgYJh|Z}zi|qypwisimqTSdcx]qw`jckdaXRYXVURLUbWDKTWXUPIKMLGECELE>74:.+,02236:9865798662.,*)287653JNQHMHOUXQJIIKNNSY\\^^aa`ZV[^^[YWVVV[a[K=:=?ACDGIIKLQRRSRQOPOI@?BFJF=Eg|X7I`jloxuS:39BNRKDA@??@EFDDB5/120026657866;BKWZXQKE<4@X]VVOUz\\LR^^I;IZ\\VS=@@=<<?JF?;76778899<@T`KJJPPEBQ|kF@CDFOPC:89@FC<5339ELNOMKA?EEABDFGGILKHEFDEOL<=A=BHJIHGB<:601:@?BGKIB><<<>=86:?GI@65999;AFKLFDJG<87589<AIE?;64:<9DVXPJFECFOXfnW819BFEDA:24AA=FKOTYZX^bO;9;;;9:EMIDEHE@<;:;<@HHABOXPKKHHW_^MXbZWSTRK?5=MVLDGGCA?;;>?<;;;::>=:;=<;AJMJC=:<>AAAAA>::?DDB@AE@68==;::99;:75788<AA?>?A>=???????@??AA><>??@???@BB@<<@B@BFD?:65;EHGHE;69=>=?BDDFHEBEMQRQNJFB=9753:<9;CDA@?CC@==@CD<31120039?B>877535:=>;99;ADC?==86;>=;9:;:98866511239?BABF>=====>><85BFING<8:=9436688732;;-**,.1566689:;?<<@@BHD932327@EEH0#-CL<)0CORF8275865IMH=83/143:FF;3.,++.6A:9;>?:5>GG=659<5)2@@ELE6-.5/-024=HMT\\WNB3).5XrRP\\_XSV[ZSKSdhgbaY<+/204RcIY^YF7851.6PJ55554345554430.-,-.//0489::;<>?@@BEE4+-11245<A>AC=75569><55974:EC;?LPGCIKF=?G?00520366542038;EONB830///05BSXXVTVGGGFIMPUY[^_`bbaaa_\\XRNKJJHFFFGGFFFEEEEFGGFFLZdgjllmhXGABA?DS^_aa]WTWXUROPPQSOD?@AABBBCCCHR\\]VZjdI>AA?@@@ABBBBCCDCDEFGEEEDCBAABBCBDEFHHHIJKMRUVWVVVTUSMHEB@@@ABBBA@?AA@?=?>?BB@?>>==?@@ABBCCBB?====AHKNNMRWSKB<=>????>=<<<>?=>AFIIEB?=FOKILLKLOQSUXWXZZTKIHJIE@ASWMMTYUUXTQMT\\PDCCCBEIJLQQF:;BCA?@D\\iUczXk{rUzrVFIGJa[VOiyunTUZYWYY\\]^]ZX_[NORMRK>?ACEEEFEFGGHGHBMj\\UU^o}sK<?@A@A@CHNOPZ_VI^kDAFHGFEEB><=>v{IIHGFDBEI>yfKGFFFFB@TeXSVRGB>Dd]MFBFE@@@@=>DGEHS_abd\\NGKLLVSHN_b[XWSXgmhjXB@AAC??^l`ecUNIBCSYPO`nmlrynRELRLFEPQQSRbeSPQTPNac]qysrvnP;9BDCKZ_RCADNNGGJIIGA`sE6=DHPY^`aahvtjkmpru}~bG]FKSLKJHLQTVVWWXXXYZ[\\^``cfgihgeaacfhfb_`bcceedeigc__aTEBBBAAENRQQRQPMKLVYVTRKEBEGDBELqlU]gaXW\\^WMNPRTWWOGGKPTRJDFHGGECEHKGMPJILNNMMNMMLFEGIMKM\\QNo`turi_Pϼsjkjms~|lfhjpqpmjfdgkÿɧj\\aWvu}Ɵ~xvoaWWblmj`TPNMLLKIHEB@@AABBCDCKZ^TZloaUZcaaiig\\QOgrQTjWsaehxttlpjvjTOY`ycsk\\fbicZWR\\[TUSIS__JDPVVUPCHJIFECDJC@;7>52148:<@CDCB;774034680+)-1555>=HD36O\\_H?HMNSSUY^cdgfe`YWZ\\[\\[ZWTRV]\\O>8<ACDGJIILMPRUWURPSQG@>><82CfmuS7F]imrxtR939AJNKIFCBADFB?EF>754/.1445666>CGHE?CGLE805@CIXTSq{_F@MUT9?\\d^YZG9=;88>JKA;;;<;9875:=DeRKIPNFGGaz[737;GWM;55;AA@;21<NXSKHIHEHKICBEFFGHLJB<BA@NVD79;@HOONLHD?;32;BFHEDE@<<?AAAAA@;>FB87765<EGNPE?GE4/35334ATSD<847:<KXPEEDEEFJTceO73;HUVKEC9=LMC@CIURHN^]F9<<;>=?HJDADGD?;::97:DGACKPPUZQDFKNQfeX^e`SE<:JVUNNNHDC?<:<==:977<CA:79728FNJB>=>>@AAA@=99@EDB@BEB:8<=<:8899973235;CB;9?B=:=?=<<=?@@BCA=;;>@@AAAAA@@@ACC@BE?87658AGHE>9;>==<>CECCEDCHNLJJQXM=:8765;:78;;:<@C???>?@A;5456568:=>=;998646=@=98<@A@:8972255689:89887762/.--.47<;<:99;>@@=709@GK<::::9769;=;:84:9.-+,/6>;767:;:9;=?>AC>3/,*1>CAGF5%2LVJ4-6@B843>;2(2JPJ;?:422/7DF>5100/-5FJHGFB;AU[PA:9>A6)9GABGG=0,0/-/2/.:EJS^aWE82>ho\\]aab`ZWbkkrz||m^`L/1?DEVodeYD:542/.-EL01222146765421.-,,.//149?BBB@AEF><=>0*.15426=>>@>93--4@H?44842=IIHMROKPSPH;472+2855675234=KQJDILF=82/--.2E[dcZOL@HHJORSUX[^\\\\^acbba`]XTPMJHFFFFGGFFFDEEDDCCHUbiloqqsulXIB?AKX_acb]VSUWVTSRSQSSH=?@ABBCDDDDEKNGDSYK==@??@?@BBBBCDEFFGHIHFEDDCCDDDDDDDEEDDEJOTXYYXVVVSTSOJEA@??ABCCCA@@DDB@=<>BB=:<===?@@BDCCDDEC?>>=>@@@AADGA?A><>????>>===?@=;>GMLHCA@AHJJJHIJMOQTWWWZZWTPNOH@;>NPLRXaZRWUUSRRNGB@?@DIKMPLC?FIEDCCD]jUbYjw{jXnYHGHQ\\SWkt{zkFCMOR[\\`c}gYVVWUONPG<>BCEEEFEGGFFGGBGpaVT]m}wM<?A@???@@GMLOTLDya@FHHFDDCAA<6me@IGFFDCGHBnjTCDDEEEGGGKQTX[VJCBKNTNB@CCCB?=?@BEKPZ`^WNFDL^]PKLW`cdegcacZS`WC@@?B@>Ve_[SSVUQBJYUT_jiorIJ[WMQQMHOYcq[IRSTQGJNfwr{wX@BHDBKKUMCHKLNMNMPTIKpF7>DEEGR_a\\X`u~qa]]_blupS>b}ONNILLJLPTVVWXXXXYZZ\\]^_beffgfdaacghfc_`abcdddcdb`^_`\\K@CDBBFKMNNMMNMMLMMLJFAACGIF@>JeRBEJNRVZ\\ULLLLMSXSIDGOWUKFJNMIEDHHIPe`STWblnjeca^XRLMNOL[VI{as]`ķ|pkortuwphhjhegkmsun;ϮXycf}ҼxxsdWU_qskaWOMLLKIGEDB>=@?BKPLJIFPac`ahpn[WoylnriYHHmsWTuwb^hx~ywzxgmcYSTcjgp`YcbeaRTR^]UXTIRYbTCOTRUR?FIIGECEI@C@9C;956<?AFKLJHB>:60,03755.'*142,2EI68GMTA;GRUXWY\\aghhgfd^YY[]_^\\YUQPT[^R=6=ABDFHHIILNSWWVTRQPI;?<;?QYGJF9E[hpwxo\\E<;>BEGHFBABFFB@CFE?:5/.14544=CGIFB97<>A;21012>TXT\\^PNE:BEB<Vf`XYfM543579ENC99=A?<9758<@dUIIPNBIPR\\J2113BO@25<ED>C?4<P`aTJHIKOSQKGDCACEGHC84;=:COG88?CGMMNKF><>618@GKHBB?==BFGGHHF@:<<77756>DDIOH@>;335558=EGDA=7566@OPFEDDEFFGPZRC<;@N[WMJMJPTQMEECEE=ANM?:<<:BT^ZTF>BEB?=<;;:9@DACHNNPRMEDIJUi`Y^ZPG<7BSUHFQRGBAA>;;?@=:87BIHDAB@:9@EDA????????@=;<?DDDDDD@>=<<<::;;;;85457=CB<;>>87=@><;=?ACDDA>;9>@ABCBBBBCC@?AA?A@=;:9<?EHB97>A@>>>BDBBCB@ACB>BWfTA:99::<=?@=68AEE@=;<<<;7348:999:9:;<<=>933=B>;:=@@=71351//245667988776541/--04><=:7579>A>826<AA<>@79=:88;;;;:59:1./048@>976<A?99>?@D?4./,,7CBBHF;5BV[WB25755757:/(3FLCESRG7037=EJ=2/./.-:GIKH=6HZRHD?=CA3+2?@;BFHE0/0/01/.17?IZc`TM>:vsY|pbVQ]^a^ZmrqzwSNJ99HTX_olfV2.220/.+8N91233347754630---.00026=BDC??DFA?;52..029::?@<;=:54203>E<331-4=;>JJABPVRPK;/12.5;97<90-4GYbbWIGJIFC=60003=Qir]=3;HHKNOOQTY]\\]`cddccb`^ZVQLHGGFEGFEEFEDEGLQT[bhkmoppqrmi\\MB@FOW^``]WRPRSSTTSRSUNA@@ABCBBCCEKSYZVOHB=;>=>??@AABABCCDDDEFFEEEEEDDDCCDDEEEGIOX]]\\[ZWWVUSSQOLGB@?@BDDEEB?>DJF@==>AC>9;<<=>?ADECCEEFDB@?=>AB@@CCC@>AA=<=>>====>>>??<>CJJIDB@AEGJKIJJLMOQTUVXXVVYXTMEABGS\\a]^[TUWUVXVVSIDAADEIMQOJNPIABCDGclW`~Yiw{q]nmc`SHQ^YZsojtxyvx}lQGDEKXXchdNDKYVMD=A>?ABDEEFEFEEFFGDBtcVS\\k{|U=?B@??>?<?FEBB@;hIDIFFDDDBA?>FRFBHGGFECIEGs`sn_J@ACDEEGIJKNOSX\\VGDLPXWMEBBCCB?BDFHKL[b^WPJHKd|j^cknhjosup[H@IJBBA@BAGW\\UQMMOVWB?X\\TOQP[tP^cZVYSHFOXhu[TXTUVQGEux`KLLFFPKNLOUYXUSNJRVCSzL>@DCEC>KacVSWauxbYYZWYfn`JIWOKGHNPMLPSVVWXXXXXYY[\\]^`deefecbaeghgd``abcddddea\\\\]^ZMCEHGFHHIKMKJIHGFFDGFBC@CEJJTjWMEJHDKPTWWPKKKKJKQOIFFLSTNLNPNKGGIHNjsddtumighikicZSSSP^aPfy{fsǾqmtvxtqkgffgddcclzŶȘ^{ovrˮtqvlZY]jrm^SNONKJHFDCC@@ACBCKRSWULIboplealraWjxkei`\\MPlhoazrex{}zzlie]YQ`Tfj]]afb^MSQ^[X[ULRV\\VHQSQTS>CIIIGEDG@EB<D>=9:=@CHNRNIGEED?:41/8:6//-30-9HLOJ82HC>FTY]\\]`dhjiggda^\\]]^^]\\WSPQT\\_R<8:DDFGFGHIJMSUUTSQQVK>:<@C@;AE;F[hqwvk`J?>>?EGCB@@ADEJJGFD?<80,15615HMJHGE>;734622332<NZ[XKDE=:;8;HccZTWaK553666FOD65=A@==:7:=>bYLKMNEIRRH:5400:935BKOE<A@6Jeg\\TQMOTWXUMGFB=>AB@<856879DGA@DFHIGGE@427415?IKLJDBBBDFHJKIFJHB<6777:AB=BHGE<23:;77<A=22;:4575=IHDFHHHHGGMIA;>DGPOIKMROSSOK=??<;=>;==;<;9E]bXMB@AB@><>??=<?BABFKFCDEEEJMR^]\\VPIC;:DMHBDKLHDDE?;9?B@=;;@FGGFEC@=<=CBBB@?>=>?=<=??BDDEBA==@><;;<>>=;97989<@AADC>=?C@@CBABCFGEB@><>=>??@@ABC@9=CCABAA>=<=>ADA86<@@BB?@BA@A@>==<8CgtfZI@F?8;HNI@46@CD@<:9::9522688779:;;<>AA:33;?>>?@A@;63462./234666789999;8321128IF><:875:A@8769;=>C?7<>=889:;<;89=;50029A?<::@CA<:<=><4,--+2;:<ED;9AQUTQ?3622>D?:8/6?<99HOXS;1887BK>21.+/-09=B<33FLC@C@<@<1+.<C>>AFI1/--0/..+.7=K\\^UM>-dSNe`SGKQNQYgfUJPzwC9=:?IOZdmmjb7020//200HF9<=<<;=>66761---../048<>=:<@BDBB@3*,1578;=<977;854335<=6010.6<5;NNDITTMQQ=.1546;84<:.+9Rcb^^WNJIJJB7//244>cm8*6HHJLKLNQW]`bdedddcb`^\\YUNJJIFEFEEDEGINW]_`cfggjmooooljf]SJCAISQS]\\RLNQRSSRQRVSFA@BCDEINPWaegiibTF>;;<=>?@@ABABBBBBBBDDDEGFFEDDCCBBCCHRX\\__]\\[YWWVUTRONMJFDBBEEEFFD>=DKJB===AC?;;=<<?BADGEDFECCC@@>>ACCCEEBA@ACA=;<<;<==>????@@CFHLHBABBEJNMKIKMOPRUVVWVXZZXVUPIHawr`S]]VWUY\\RPSLHCBDBFMRSVSNTSKG@JblW]zUfzxieirws^_cXOYcblyvhX_hoprpomj^JDCXgxncRGDDEHHDA@@@@@ACEEEEEDEFFHFAwcUR\\jyZ?AB@??>=<=>>ACD<DsUFGEFEEECBABA@EDHHHEACKA[jYis\\CDBCCDFGIJKLPTW]UKNKLNQRICACDFGGGIKPV`^YVUSQOMkzf`rqal}yypO@A?AACBACKX]UMHGEEMMA:P_WIBAOx_f`]^WKMVTVglZ\\\\[VUZRCkeNQYMMZZMJKQQSQOLFAIQFVdPIA?BFB=EWYLMJJThaXahaRVbbWMGJIEGWWMMOSVVWYYXXWXXZ[\\]_cefedccbeghgd`_abcdddedf_Y^\\WQMLJIHGGHKKHEBACDEFJKKHFGHKN[F?PMKLNSVPJJJJIIIJGIIFIPUQPRQOLJJIHZpomc`]ZXZ]`a^YVVXUgwabużqlv|voke_aeebaablɺì˽zļrlwĤomm`V[chg_QLMQPLIGEBCC>@DEKMKJLUd_T\\iswnc^geH;Q`dc_XZRXoanXept|}zxkfbeZVRbkT\\`iaZJSQ\\V[_UMTTZTLRQQSU>@ILLMDDF@FE?EAA?>>AEJRSQJGGJNOLE<8;<886/200>DHRQ70>BCMV]a\\Z]acfgghdb`^]]]^^\\\\XTTUW\\`TA9>CGFEFHGFIPTTTTRQPTH;:AA==@E<GZhqwvpbOFA=?EGC?>?@BDJMLFAGG8+0:763:LPJJDA@?9:752247:=IY`WD746:79DUdbXUQZJ?<988<FPE22<AB>@<8=>9X]MJLOKIPQF:7405@>;HSTQE:?@;Mkj\\USPRYYXUMGFB====;;<:7755?HHGHEHKGE@9202229EKKLKGFFEFFGLMIFKRM?55:?@BA88BFD<34:>:9=?7.26568748BHGJLQSPGGID;9>FORNKMPVVTRMD:;;;<<<;<<<<;9@QYPB>BA??<<@CBA?>AAA@?9>CDFFKQUX__^ZLB=>BBCACFHHKNH?;8>EB@>==CHJJFCA>:;BCDCA@=<>?<<?@@BDCDB>;>BA>;<>@A?<::<;;=>>=@?=ADCABDGGDEIJFDC@??;9:=>?AC@77@FECCACA@>>>@>955:;;>A?>??>??==>>;A_wxo\\QQG9@RN@526=AA><;99;:631011379:;::;>=82138=@CEC=967982./234556689:;==944424?KE@>=9749>A7258<=AC:<??>:999;<=;9=CA<96;C?98:;;:88994-*,.,,57-5C?67?LLB=3.39ALOMD6.8B7..67CLB9:54:=83:>2(/31020.2988>@=9>70/4>FC;7761/,+131/.262;O\\V?0.<IJTUSMMVTLHYaF84-Sc4068:>Rnrrwuh<77334873CNCDHGGHILA:9:3--..,-059;::;=@AACD>3/15==88855677787458;<86:>87;9?QXVTSPMLI<//477979?=20;HPU[a_WPMKJ>/,04640Nub966IHHJJJJOV]bdeedddcb`^\\ZXSNLIFFEFEEEHNSUTSTV\\bdejnnnnljgd_WLDBDFJPWSMMOQRQQQRTSJB?ACKQW\\^begggiibVMB<<=>?@@@AAAABBAABCCDEFFGECCBBBCGOZaa`^\\\\][YVVUTRPNMMKIFCCEFFGHGC?@GKGC@>@B@==>>=BKIEJIDFGBAA@@?>?ADEEEDA@ABEC?><;<==>???ACCDDEJJDABBDINOLJKKMNPSTUUVXZYXY[ZQO[hdWP[^[ZVY_\\LJKGDDDBGOTUYNE[lgP>LalWY~Rhzqbaiouogfd\\Y^flql^TU[ajsqlflnjbQQk{zup^DGEBB?@@@@@@@BCEEFFEDEFFHH>{ycVS\\ixZ>AC?>?>=>@:;BDGB@tyb\\PDEEEEEDBBB@FEEHHG?<DI@ok^r{QDG?BDEFHJKKLPTVPMIEEHFKJGA@ACFJIIKLR]c]VUWZ^ZOPfYBWedy}kG@B?@ABBADQXRQNKHILJB@ADUXPEOhu`Y\\USMU[MM^`]_cZUU][KUuQHaeKSh`YLHDIA=@B@;>LMKbXK?=AGIGDJNRSJGFKXX\\d_MFQa[PHGIEF_\\JLPRUVXZYYYWXXYZ\\[]bdeedcbbdfhgda`abccca]^icV\\[ZZWPHFGGFHIHECBDGJLMLNNMJKCHNWwNWRONPRTNIJJJJJJHGJKIKPSRRSRPOMLLKSZghehbY]WV[eeVWXXWkto¾ugp{ojfa]_dd``_akξϿ͟rvɉrq~Ѽ}yljdYW]ce^SMKMOOJGEC@AB>CEGUQMGCMXhwjdiqwrc]ffXGQXZd\\EETheYqbOsl|xx}~rjemcRS`ZKTfh^TEQPYP\\hSNUS\\RNSQQRS>>KMMNBDEBHDAEBA@>>AFKRURKHHJOTQLFB?=89710/159@LXB:>CLV[b`USW[\\]^bba_^]]]\\]]^^YVUUUV\\`VF<AFFDFGGFGMQRSTTPOQSP>BGB=?D=H[jryxteXOC>AFGCA?ACFFEJMIO_W6,EP>9><MQOK>9==:=:4114:=@HSUG923533@Tbc`WPI\\LLC:9:<>MD34>BA?A>:=>7P^IGOTQNQPG@<8<HQRSTVUQC:BD@M`g[VRPRYXUURIC?=<<<;9876543<DGGGEHNNF=620125>HMKKKGFFGEEFKMJEJQO?35CHDA?99AC=8339>=;=CA961187434>HKJPUYQHFJC:9?HQRPMORWXUSM@:;;;<=<<;<<<;9AS]P>>CC@?=;@ED@>=@B@?:9>CDDFIRYbbcaWLDDCCCBBBDHJOQG>:6@ID@>==BEIJGB?<8:BCEECA>=????@AABCBA@=:<??<:<>A@>;98;;;;<;=:9>ABB@BDGGEEJKFBAA@?;9:;=?AB=57CHGEDBBB@>;>B:336:<99=?=;;=>?>?ABC@BM\\jk_XRKT\\N8114:??<;96688631.+,1678:9:9651/015<ABB=5568:830112576458:;<==856635AJC@?<9:;99761469>EDCCA?<8778:==<:=CJID>=@>9855540154/),/..271*6C=:9>MP>60.<KPOOQJ<20430--19BGF:.24225>QH+*50+*,.0/03:=08<6247?GD81////-+09?<;;744?RR8*100HTPSSUZ^VRYN:6953VpW0,3678Vb=9=CBBB@<BPFDKJKKNQL@982--..,-26:;::<?AABDF@>@=;@B=;;;<<969:::767;?BDB:6:88FQPQVUOB:61/589:@HI@78=<=L]`][YVRI<33556738GC:>=IIHHHHHMU_ddcbcdddb`^\\[ZVQLIHFEFGFFIIGFEEHMW_chmmlnnljhda^VLD@@@BKOOONNPPPPPQQNEBGNRY^bdddffhiiihdYJ?>@>?@@AAAABBBBCDDDFGFFEDDCEENZ``]\\\\\\\\[[YUTTTSROLKLIHFEDEFFHJKIB@FLNMIA>@A?=>>;@SVMQNCEIF@>???>?ADFFFEB@?DHGFDA=;;<=>?@BCFHFDCIICBBDGJLMLJJKLMPQSSSVXWVXXZ[XTUUNMZZZa^X_g^NHECCDCLTVRT]_bls\\DMbl\\[Wlvp`_kqtvthdifbdhga\\WZ]counienqqp_\\quoptmWSJKGBAA@@@??BDEEGGFEEEEGH9p{cXV`jwY=AB>>>>>A?<@ACHU^btd^MDDDCDDCBBBDCDGFE:@HIG~bdpeHGIDCBEHJLOOPQQLEDDBAC@BACAA@@BGIJLOUbhdYTV\\_`^TSKI[r}a??BA@AA??IQSWXVQHJRJ<EQEIVURaoZUZY`]]YOSZZ`dlhVU_ZP]fkVPhgJMYcdWF=B=:;>@<:ISN^dWD?@@JWWRU`ebTLIFPYQHHQWUZTIFGHGK`aLKOQUWYZZYYWXYYXYY[`ccccccceghhfb`abdefeYUY[``ZXZWKCBCEFGEEDBL]b]ZWPOOPLQWTKFƧoaWSRRTUQLKJJKKLLMKLQQOQOPQRSUUSROLT{lcjlg`e[Z`gxdYYXXfyvnn{zne```_aed]``bjɯ̶uxs͸ww~|nif]XZ^a]UKKMKJGEDCA>@B@GDJ[VSJCKLM\\nnea``b]\\]]VSOIXmq\\@Od^pdtTutt|lq|qmnfVW`MFNna[LEOMSI\\sWPXT\\QMTSOOP@>NOMH?GEGJBAEB@?<>@EKSUSMJIKNRQMHBA>7530-.225<HaYLHJSY`cUNQVYXXZ[[XVXYYXYY[^a^YVVUTU^aZI>BBCFGGGGHMQRSRRRMU^PIQM@<B<H^mv||xmcYEBFIE@@BDFHGFHIQdqY=G_[D<HKQRJ<79<:;?;536;>@ACD?50695.4Kada^XKHYHKD6666<ED9>EDCBECC??8H_MJV\\ZVRPJECEOY[\\ZVTUPA>IIBKWa[WSQSVUSUVL@9;;;==:7656769@DFEDDMPD663127>HKLLKHEDDFGHFGGIGGTWH:?MMC==<?CB74568;?>AIK@5.196212:IPQWWVOHHKG<;GKNRUQNRVY]XO@:;;;;=<<<<=?;;H[ZE<?DDCB?<?D@==>?ACBA@?@ABBGR`kdfk]ODMMJHFCBDNQSN>:65ALCBAAABBHKHA=89=CEGGFD@>=@BCCCBABC@?<:9:;;;<?BB>9778999:9AEDA?=>>@ADFEDGHDA?@AAAB==>?@A>7:GJHEDCB@?<8>A9469==;89;98:;=>?@ACGG>7C_qladedbL82348=>><943564231--366689<:51./357<>;5101334424210375459@D>98567859BG@=<978644277555:BFED@><7766:<<<<@@?BBA=88;<86650.00.,--,.33,+7=987<PS?95:KUQMJGGE=61/2407@FKG7+031179JS?+/0.,--/037;=;<><88:?DB6151..-,-4CIE?9821;>2+--3KXOPTU[a`jSDCA;<86B;/04545_vX9;ELNMLMIGNFAACDFHNTC730./01128<>>=<<?BBCGHJOOHAADB??A?<9:;<?>:878=B@746754=CBIWWH98945;><?JNC:8>B=?M[^]]]\\VI@?;8666525AD?@IHHGFFGMXbd`\\]bfedba]\\\\YUPLJHFGHHGFGD@AAAGPV[gnlijmnmkhd`^YQJHEBABGOPNMMONMNONNNPRSSY``]_dhknpqrttqaOFB>?@@AAAABBBCEEEEGGFEEEDDJT`aXRSW[]\\XUTTSSTRQOKIJIGGFDFGGHJJJIGJOPRQH??A@@?>;;P`[ZOCFJIC==>>??@CFGGGEDDFHGHHFC?=<<>>?ABDHIFACEDBBCEGKOOJHIIJLNQQQUVUUUWXYYXXXUQYVIHNSZckeOCBDHLU^YFUzwnkcTM^kglXlqqkiiknttnipmhd_^_a^X`mrojghoxsg\\_ehhgfdhja`LC?B@@@>?BDFFHHGFFEEFI:k}dZValy]BEE@=<<>C?AIIS_}zwgcSDBDBDDDBBBBBDGEC?EOEeh[dgPJRTJA?FKLNRVWSKDCDDEFECAAABB@>?DJLNR[iplaYUTTT^bROh|hN<@B@@AB@=GTYc\\POMLXV=F^ZSUWZd^s]]ornecb^_[XUUpzZW_REX\\x^USf[PcTSXUD@FB?>>@>>IUXRoZFCDD@Jbj^etrkca[TX]WOYpsbWSPKJHJW_ZOLPQTWZZZZXVXXWWWXY^bbbccccdfghhfabdfgkmbTVTyYTWQHDCDEGFEDCDMZc`acWRTTPTo{jZvǑ_WVUUUVXTMJKLMNPPMNRQKILOPSW[]_XOOu}_hpf`a`ceb^gztjd^[`mwkmvvgdb_^^jiecY`tevĭov˶so}vliaYY^`_XNHLOJEDBA@AAAABFDN]_^\\U_Q>=IXXSRUZ]XVTQMLHGMcqFKq[l^{|bm}tlk^[`NGTv_ZBHMKKF]vbL[V[PMVULLL@?OLK@>JDMM@CEB@?;?@DKTVUOKJKMRQMHDCA:30.-.258;?Wg[QPTZ`ZLOVY[Z\\^ZWTRRSRSUVW^fg_ZXVSRW_aZLB?BFFGIHEHOQRRTVROTZPTRC8@;Iar|ymeYIHNLC=@DFDDBFIJ[qnVQ`cYQGUaOA<;BDB>@@;66;@AA>963157524?VfcieYIHT=DA2364;BJKPVSGEIMIHC:CaOS^^\\VPNIEHRXXTTUSRQOEAGFCKX]YWWVUSSTUTLC;<@>===<;98:=>AFHF@?GH<24532;FKKKMJE@ACEJMID=AJW`ZLGNRLA;<==CD<9>>9:?ABFLE81475333:ISTXXRNIIMH=BNOMRVSJGLU^aR>:<;;;=====?BFMUVI;=ABBGFA<>?=9<>>AFHFB>>???AK_idcaXTDILLLIDEPWUPE:623BIECEJHA=<=>?:7:?EFHHIJB<?CBDGGDA@A?=;:877:;<@DE>746789<?DIJJGA@FKIGEFFDEEC?>?BDFG@>??@@=<CLNKGEDB>;89=><:;:;;:;<:7:<:;>@>?ADEA<>I[rrphYTK<7767:=?>;63465457525768;:98863346:<=70./11.,,0451.04556:FKA6327:<;>EC=:95366468=@<977<?@A@><56:9:<<<?CC?=<;823588764430.,+,-/0-)(+103=?6>>2/3EXYWRJEFJJF<31654;EH?2-/101423DF1*0/.-./238<>HE?>64;>A@:<>0--,+++7KK;682.00..-,5M\\QKRV]Yn~]SXT@3><30/44353bxGb6CHJMPRTRNKH?==?BGIG730./1358;?AA?===ADDEKPSTQNHCCB=<?=88<>>CB@@<78<;52578:==;>FD95:=::>CCFG?638>BEGJOWcf\\QH@@?<:65435:DOMCKJIHGGIP[_[WY_efedb`][ZWSNMJHHIHHHHHFCBAAGOQYgkghkmnmkieb]WOGFGIIGEIKKKLLLMMMMNPPPQTY__]ainqsuwxyz|sbTKD?>@AAAABABBBBBBBBCGGGIN[`ZOJOY]]]XTTWZYWTSQPMJIHGGFEFGGHHHKMLORTUUPF@AAAAA>=Lad`RFGKMF=<>>?@@BEFFGGGGGGFGGGHEA@BBA?@BBEJICBBBBABEGHKPMIHHILNPPPRSTTSTTTXZ[\\[Z[VH;>KSZacQCALYX\\e^O_sz~vhhXNVighpXchhv{kb_`dmplklkge`bkkkkidfklopdYY^acdfefqvsp\\YH>?@>>@BDDDEFFGGGGGI<e|g]U^hycINROI@<;@CISg}}rndb^PGDBBCCCCCDDDEGGFFHOC|UR\\`LQWVNECGMLMOV\\XIBEFDEGGDBCDDCBCEHKNTZ_htvkbXMOT_kZLXp}oRA@BB@ABHQTY`_]]cqtkqmG?SYWWVTRO^rjmwmki__YSMHeaTUH=FQ_bRU_QSt_JQVJCDDA@@@?@P]_[`|KAFFHEBXlelyuune_\\X[lwn`Z^ebSHJZWMNPQQSY[ZZZVSUPTXXWX]abccccccdejjgcceedff`VWShnWUWRPOMKJGGFDEFCHXemqjc\\YSUj|gƤq[UUUVVVRLIKMOQTSOLKJGINPPU\\^]caOn^OdtfXX_`qp`i|yjciiŽzpuvccdbcdnqdaaXz³m{y{}ʯqk|tpm]UYhrcUNLNKFCBA?=HMFBDC@N]ea]Q^_VLNUWWZbkomlkhZQU`daqO~ySrIz_jykpf[eVI_w_S<KNHJF]qjD\\WXOMSQIJHACJEH=ANGRK>CFB?A;B@CKPSTOKIKMOPLJFEC>61.,-26<=:C[[TNT_]MIQWY]``^ZYXWTRRSSTUZdie`]YURTX\\]\\RE>AEEFIHEHNRRSWVPMSZ]K<=I=HbsrdZNELPIBBEGHGFCFHObneWSTOce_dY91@NOOMJGA;87:?@@<6468854<FNXfgjZRCFW>BC8=B9:KZ_ad`PGRQA=?9GgKS`[VMHHGITUYWQRUQNMJD<;?HQZ]\\^^ZVTTSQOMICDEEC?<<;:89=@BFGFA>A?5244329CECCGE?>@CEIMID89NjfK>FPQLEA@AAEMMFABAAA?=?EG>6454554:ISTTRNKKJFBBHMOQUVRLIIJO\\ZB4;::;;<<==?FR_]L>AHGCDHGBA@><;<=>@EGECA><<;Icsl`b\\QdX\\_`\\QEKZ]SF=9516AFDCEHE=;99:;::=CCBEINN@<DD?BHGCCA<=??;977:<=@EF>669;<?DFJJC@?@BJSQKGFDCDDCCDDCGKJGDC>=><CNQQOLJHD?949=>@><;<;9<@<9==::==;;;;;<==9;\\~z\\?@FD=;;:::=?>83479878<?=769;855776668=@A?:64210//11462//378:AE@624:=??@CD=:842489:<?><98:<><;:9839@=:<===CIIEA<856434445762/.,-/1/,*/00+0IM6../64DPSNIORJIMKA61/3.,9A:/--../.-*182*.//-.//058;AA?B828=ABCKL<272,,(-AF5044564/-/4:HWQOWUZ`rd^\\\\J/6@920365:/Tr-wCLNNPSTTSPOLIDA@@DC;4451-/6:;@B?::<>?@A@DLRRNNPJAAB=:<<::>BEEEFFD=89<957;ABB@<972022-09<>AC;1257:@GFB@MacO<57::9:7427;<@OOCMLKJHGIOUTTYbffeecb`\\ZYUQMKIHIJJJJJJIHCBBEHMWaceikmnnmkgd^VKB@DHJIJHFHIJJJKLKKJJJMSX[]`djmmqtwxyyz|zraUQH?@BAAAA@@@AA@@?>@CDCM\\\\TFDMZb_YUTW[^^]YUTSQMKIHHIGEFFGGHJLMMPSUVXWMA@ABEGGIR^dcYJFKOKA>=?@@@BDDEGGGGFEEGFGHGFFHIHEBBBDHHFEDDBBBCEFHLMJIIILMMMOPPPRSRRSUWXZZYYWRNLNMPSOHDK[a]Ydqkgot~zpmWGXedbYY]^Yl}u`RRZ[fjjhnsujmyr^Y^emokdZY[[a^\\bbjuyxypsXB@@>>>@BCCDEGHHIJHI>cm`U[bugLNTUXRI@CHEQd}e[VSQMKIFBAABCDEEEEGHGJIKF\\UMMVRMPNXclv[NNMLT`[JBEDBCEECBDEEEFGKOQU\\`__mzk[VPQUfkTLJGIR^<@BA@@BAA>CMWL?b{[=?CIQXVGFYyx}ob^ce`Q@I|jNE?=>CD_maRW\\KTqfKGX`LFFDCGHADYddb_x`?GGDII:Eiz|eVWRNOYadfa_bfaKIOMIMSRQRX[[YXVTM_zYWWW\\`abccbbbbdhjhdcdgo}}hXVZZXVVTUTRNKHGGHGFDFVrzngbeZWfpz{fg|\\TTTTQNJGGJMOQTSQMIGJNTXWV_kc^bq^]YZofTRahsrislto˹}oyrr~nep]iqmwlmw|ϼ}{equ~Ȧph{qniYTchXNYRECAAAABLOGJOE<M`cZbTS^d^_`a`acghijilpj`_fjlde]`@nYfqqmbkbO_pZD;LPCMG\\emC[TUWONMIFDCGEBH:CPJRE=DGD?C>EADIIMQOKIKMMMNLHGC@:3,*,25<><<O[VPX^\\LHLQW^`[WX[\\[WUTSRQSW]cda`]WUUVWXZ]UE<ACCGIHFHMPSWVTONT\\RBBYDEbttdSGHPNGCFHIHJMNKISdh^QE=Fmolf@7<HPQQQMIB;;65;<;:867623=HJOfjh^IUSSc]ZWMSWLJSbhffaUPWSHB@:MhAEUTRMJJHJUTWYWXXRMF=75:GRX[^baYQT\\VRRTTQJDDKOH<77789:<>?ADB>=9535798:<;:=ACCDCBBDIFB:=L[VA7=GLNMKJLMPV[UF?FIED?:<DB:633454=KSTQKHJLF98CJKOTWVRRUYUNPUG59<:;;:;==>AM_cQBKYWLHIFB?>>====>@CDDCCA<8=do[efVamrm`YQEIZ\\OB=957?CEEGEB;8;>=<;;;<A@>GRTL?=A@<?BBCFC::BD;567:<=@CB?<<>@BCFGIH?;>?=EONIFEB@ACECCBCIMMNJC?=<<CNPOMLKGGHB:;@A?;:?EC>=?=:;975688877887:<9CelP8;BFD=;==:9::6348::64:EF=9:976764369;:>DFD>:76777878:6237:::;::549@BDDBBB=;72448:<;<;<;;@@?75455<EHEACB=<@GJIFB=;>?9324796685-++039>>:;4/CH4+/>`T@9;5<UWB=B?658661+1<6/..---,,-,.0.-11../,/47665<C=57?FILOQLD@920-.484026<?:1,/8==FQVXWgcg^YUO3/652555694@g3_dQRTWXXWVVVVTSMFCBDC<8>3+/8<?A?846;@A?<9?HOOLPNEBEB=<=?>=?CFFGGGHC;;><;;>CEDED?;9634;3+48;:524659?DC?<DRQA557788:88:?A>?A@>ONLJHGHJNRZbggedccb_[YWSOMKIHJKKLLLLKIFCBDEKVZ]cghknmmjgb^XOGEFGHJLLKIHHHIIKJJIHHKPVY\\`fhfflsuwxyyz{zseXNFBAA@@A@AABB@>>@?@AFWZJBALZ`YQORY]``^\\ZWVTQNLJHIJHFEEFHJLMMNORUWYZRC>@BGMPV[]`d`ODIPNI@>@AAA@AACFGGGGGGFFFFGIJKNMJFDDEGGGGFDDDCACEGIJJJKKJKLKMNNOPRQPPQSTV[ZVXYYYVNIJFDEJX_^]f{wy}zzlY[X]gnd_[TP]nqbW[]TV`dhlqrmosneVS]cjlic^_\\XYTT_bmuwsvwsf[L?@>=?ABCDEGHHHIGGDeo`VYatiMFHLSVQHDBBKFS~gRLHGGHIJGDACDEEEEEEFFEGFHANLPRKJIHjqfHOPFJ[YKEGDCDEDDDEGGHILORY^^_bagsgPPVU[cWFILF=?^xRA>?>?AA=?AEE=MoH;>BIPVGACNq}{wmjryyt_F?kjVWRC<<<HSTPYXKYDbyZNOIIUTKTccde`YC=HHHLI>=UrkRNTQOLQY_lvjTNTMJJLOUTPPQPRXXWVTXUPWWX^^_cbaabbbfihcbhvwiil\\TTSQQMJIIIHHJIGIIQnw_Y_b\\U^ifejdsxSQQRQNKHHJKLNQTVTNJHJMRWVVgtm`qiLlp`os^\\jssqwmsx˰ƴ{|}w~}ndh~peqsv³վjyWugrƢrlvwnfa[_yrbVnTILDGHMNJGHXRFARd^WpoaWWXY[]__^^_``XQ[kmaXRTW}zTQp\\MT~yNczynunpoWXeO99NI@OD\\]oJXPT^PMKGEDCGBAF7EPJM>=CDDBD@EBEGDJNKIIKKLLNLJHED=4**,02=DDANWPS[^^YMGLW\\WRUY\\\\XWWVSPMPUX[]]__[YXWUTSX[SB?FHFHKIFGKQVTSRPPSVSPV>EexqZPUZTLHJOJD=EOOJQ[^RC=:Lljux]NILRTSOKIA:<4289;;8310.6DG@[rondShrcmtok^Y[UUYbifd`[YWXXWPLTf:8LOV[[TLNUUVY]^^[SB109GQY^_]VPF6G_^Y\\^`aS?<LWSH=87:;;;:8:@C?;7559?DDC?<<=@CGIE>;?DD@:EH?AB>>ADIOQSSTVY`d[IEKKIC:8??;633555@MSTPFAFKB32>HLPVZZVRV^e`OHHA8<;;;:;<===BTa[QW`\\OFFG?878;<>??ABBBCC@:9<cpXdre^kzpYQTJDOTNE@<8CMJFFDB?;979;<<??<9;DRXSID@<9:==?CEEB?BC;659<<=?@?@A@@?ACFIHD@CFA;AGFFDA><;>B>9=EJIHLKDA@><?GKKIJF@DKHBCDD?:>EJID?>><:9533578889<>>?B@GLE>=>AC?9;??=:996589:877;@A?>==<;:7568857>@@<:98879<>><747>@?<;::78>DGIGFE?:;537999;;:9;:9><964456ALNOOMG=;?EHHGD@<?DA725767;=3''/:CLMB>B8+281/5@VM942/<PF1/579=GRG<8.141462.-.-////00330.-.7=;7217==926AORNRRH;75640046456::60-1465;NRM\\whqeUQI51247=:027:5fM;KKNW^baa`][ZZZXQIEJMC>D4,06;><5/39;=>?925AKMOQKFGE=:=AA?<;=AFHDCDA@?>>==<===BGECED=@^dF35=>:76339=@BFCCEB???>:55;<?EGEDC@?<OOLJHGGHMT[_dffedca^\\YVQNLJIKKKLMNNMLKGDCDHOWZ\\_`fmnkjjfa^XQMLKLJIHIKKHGHHHIIHHHHJLSX\\`dc]^hquvwyyzyzzteSHCA@@@@AAAAA@@@@BDEKMIC@IW^VIGR\\`^^^\\\\[YXURPMKJIHIGEEFHKLMNNPRUXXZTG>?BGOUZ]^`deVFHMPOC=@CCBBA@ADFFHJKIFEFGHJKKNPNKGFEGFFGFDDDCBADFGJKLNMIFFHKMMQSRSRQPRPKT][[ZYZ\\YRJEEFIKK^srkrmeXX]k\\\\bec`[RS]dedgkg^WW]lmigdkn^\\WW^cfjhdff_VSSXainovkjvnggXG@==?ACBCEEHHHGGEA[o`WZatiLGCDFHGFECEIACPNGGGEEFGHIGFEGGFFFGGGGHHGG@WoYWSQF@:9nxnjZFQTDBQVSMIGFFGGHJHIIHJORT[^]_gkjf]OOV[vmD=@CEDB?VovZ?>@?=<=?@B?G{M<AADKULA?:TtgWVcjmgniZZPAW]ap_H>9@OSQO[RV׏IOgZSVPR\\WScgbc`O?=DGHNVNCBCMzb\\IMaWLLIPWWbxkTKLNHEJTZTOMQskOOUVRTSYXU`]]ca_abccltohm||vyvmomYPRQOLHEGILKHIJIHHQdph]]ZW[W|idjfdlRPPQQNMLLLJHJOSXTOLLLLOQRZeepppWf{nmjt~}yqu˻־ɶvx|usvndfvg]źΪy}p}LdzweyϿsnsvlmfggmpbRU\\P]ZbMBBO`HHJYea^ktpjfa][WSQRUZ_aXMFRcnlbTW_Fmn\\DljH_vm|xoybWYJ78O?@K?\\[nSRPQ_SMGCFEDI@CD6KKGG>=ACDEB?C@EECHLIGIJKLLNMKJFE>8/.-02>LMGMI@W_]]`VJKSVQRY[\\\\XVWWSNKLSXWZ\\]``^ZWUTQPTXPGPTIELNJFGOTRPRRRQV]ZK9Mo~}aU[_TMNUZM6-3AHHIRSGBDHTjl}_>CQWTPLJI@5557=>??;989?C@6ItxskZVoylnwy{m\\XYYZ`egfeb]ZYYZZ[V`C>MKNVTMGONS]cigdbU?49DLPX_bXB84.?^gbacdbS@;GSXVPF?=<=<989<@>8459?GMLLJGD?=@DFD?>::@A:LQ=;AABA?CNSTSQRX`jmXEJPH>;=>98745767@NRSQD=CFA63:CHNW][VOKNZbRBGJ;::;;<<====ALPQX_`YQMIF?DMIEB@?=>AAAA@=:87C]pm`fvtfeql[XRDBHMOEA@<M[SMMGA=><525:@A?95:DNPIDHLKD=@DDCEHIC>??=9<@@?@??@A@><<BFIE?>EGB?@@@AA?=968<;8>HJFDIGCAA@>@FIHDA?=?CB@CEFDBCEFFDBBAA@?:86677787<ILA>@??@???>>>;;?>>==>;89;<?@:47=>=>@=9=A@:99547854566668;===:65:??==?>;;?ADFEDD>;<:8::9646:<:51643466669=BEJNH>:?GLKJFA<<@A835319<5,,6DMPND<>?4),24575253852;JB2-4DOPTXJ?A9228I@53332123234862-+1=B<71147<:502BJIPPA5467833767742/-,.22228AB<``lgaZQB8877;;8035824C:@;gT>Q_jlkhb[XXVYVLMNMFCC3.02331.06::;?=607AEGMNJHB;79=@?<:89AHHA??>??>=;;9889=FFEGJDCK`jcJ;?B=746;;?EA<7449<??>2-=DDFHHIJMB4OOMKHGFILNPZcffged`^[XTPMKJKLLMNOPPNLKIFCEMRQRUYajponkheb`YPLMNPPNLJIIHGHHHIIHHHHJLRX[_c`Z[fptvwyxyyzzuj_QEAA@AABBBCBBCCCEFFHHFFHS[VHCN\\^ZY\\]]\\\\[YWTQNLKIHHGGGGHIKMNNPRUWXYUJ@>@DKS[_aabeZIGLOSLA=CECCA??BDCFKMLJJIHHJKKNQRPKFDEEGKIDCDCBADGHJLMOPH??CILMPVWUUVTTOEKV]`^VSV\\^UGEHKB=`|x[[Y\\JLZ\\eb\\VXa^UU_edgjkgd]XXfoichtzncZZ^bdjhdipcNRYZdflnsjjxp^^dZ?>>ACEDDEEGGHGFE:IoaX[ctrGEBCGCBCDDBCGILNMMKFEFFFEFGFGGGJKKJKLMOPPI\\d_QH@;57g}dGB@NSGBISYSJHGHHKQTOKKFGUVVUV\\chki\\X]ZWgO=A=AGLJ<<[aC?AAGMHB?D=mösF=@ABHTOB?<TxpZDD`kdMIaRB_]KSVWYJHMIMXYRPZOYRFS][WRXbZYd`[YOEHFFHHR[QDFE=\\vLFASk[JNKHOP[kVILQ^YHBPg_MNIeIVNsS]\\WXr^\\b][`bcdkstsz~zogtxnm`QNQONLJFGJHFOVQLFKT^d_`f_^_i»hdplmrONPPPOOMNLHGGKNRTUVUTSSW]^bfppW{a{y{uwy}ͽĽ}z~wnn|zluubƴywowOeotoθ{lipmdkht|p}h]_c]sjiMABV_IHLYa`b`[_dgea_a`YROORTVYYUQWdo{`ynLY}UDPdD\\{ys}m~j\\SJ9@N:CA>XWjTMMJ^XLD@IFGK=I@:MECA<<@CFD=>B?FCDGIHGIKKKLNMKLGF@;72/36=GIFH;0W`NLPQKILNRZ\\[^^YWUTQMKJOY[[\\\\_ce^ZXWUSOPRRZ]OCHPOKKOSRPQQRSV]YWIWw~O?LL?@P\\XD314<@EKTWTTUUYfv`@,7JOMKKJI?.-5@DB??GMOOTK47i|zcK6N[S_g{sg_[Z]_bgid_`__``_Y[UJKKFC@CJOEJhpqmf[G<BIKIIP^gaB/6?IZb`^\\TLEC?>EOTVPKF@96689;>>958?FJKLNMIB:9>CDFHE95?A:LWB8<=?ABINOOLJJS^djZHMSG78>=5486469<CLOMLE@BB>98:<>GVYTLGCBGOL@DLB::;;<<===>AA:=SeigfjUBD^tlb\\UKA;=??>=:97658Mhppuslfgg]ODEMFGMGKJHV\\RRYRF<===<>CFA?>@ADHGA:AOYRBAIGCDHLD;@FB=@CCB@A@@@@BB@AB>969?BB@@?>==?B<66:;<AEILLJEBBBBBDFGF@:<?@>:8=EIHHFABCDGHEDFF@=<;;::<::HTH:=ABB@ACA<<?A@>>ABA>99<?A?<98987:844;A=;?@;8752146789;;=>==95268:>A@=;;<>@?;;<><<?>94891:A@933214775300269@A=7;DGIJHC=:<@:35306:69ENPMGA76==2,/36679:=874/5IQ?1;Za[XH=;;KWGPU;5552/.(&)/6?:1.28<=720,/69;>8169=GG;69::<<:77776430-.34148886urdbMSRL@;;999878:;7<;48@:<~3@Xnmkkjc[VOb`PTNIHFB3./..,-/48:8;?:48CFCDIKIA6489878:<>@DGE?<=====;::99:;?EEEGEA>69Npt[C=A99==:;5*,2=NUJ::<75DD?CLLIJJ;.NMMJHGFHGFM\\fhhjhb^\\YUSOLJJMMMOPQQPNKIIGDEJIEDKYgooorrkdde]PIGJLMMNMKHHHHHHHHGGGHJMRW\\_a`\\]fotuvwxyzzywl]RGAABBBCCCCCDDEDDFGGHHGIQRJDFMRQT\\^]]]]][XURPMJIHIIIHGGHJMNNPRTWXXWNB@?AFMYcb``c\\LJNNTWM@AEDEFA>ACACIMLMNMKIIKLLOQROHFEDDLQHBBCCACHIIKLLOI?;@HJMNQUUUUVXUNHIOY\\TKGNWVMHGIFGVhya`^]snX]_^]\\^cf\\TXaghiia\\`_WTXab_kuurl]Z^djnnnovlTZ[]`aimjjpri[hs_???ACEDDEEFEEFEE=BrcY]gu|H:?FKCAAAA@BIMQRROKFCDEEFFGGGHIKPTTQMNSVLgbYg[J@<<9JdjWE<>LPGDJPVRKIHHGIQTTOMML[TQTRX`fhjep~rd:A>BZpnW@BOC?@@GOYbM<<~Ŀa?@@A@FRQD?BY`PA:UvjP=EeQIbjU^WMQIS`a[PPQRXNYkmpzjJEORYTYrpc`^^]Z`UCGHDLOIHIGIXniUNIancbiaTOGSXHGKJYlcR`ROOZP[au^U`|_Y_ZW_abccdeekjgjr~~qlm^LMNMMLKJKJMgu[NNOW^lg]itebhieu{wkcYWSTTSSSRQPPNMQTW\\_^XZWcsnt~]u~jlp|ut~Ѹɭxlfl}spʪlo{zy{dnvdw}˴vefpkaedzwvrm_hazrhPQHUbYHHUZTaa[WTSVY^dlmkif`[]affe[fhsM\\q\\_{{JDCgdCYqy|qbRK;GH7E9>VRhNIGD[^K@:MHJK?O=DD?@<8:ADF@:=B?FCCEFFGHJJHJLLLLIFB>:4289;<<CD6-CQ?:?FFFIMU\\\\\\^`]XUTSQNIKT^^[X\\bgea_[YXSKKT^`VE@HPQONOQQQPPRUVX[W^zH27628NXN>67ABBJTZ`caZRR]od?60?RVURNJJ@0/8DD=>M_`\\[UF.8TX`K>:YO:B]zvy{ha_][Ydjgb__aglfXYaLHRTJEP_MCFlvmfcQ>BNLKJDLftiE6ET\\\\ZYWRH?>DC=?DIKLORL=226:<=<:;@EIJHJKI@849AFJQOG<:@A:CJ<7;>>BIMLFB?=AGOVYTNNMD84<;6686578<GLIGGEB><:99:87AQRHB?@BDFE@AHF=9;><<?>?@>85C]t|}`>Ikztqomf[H==>=;9889:7GijxtohdhfYT`l`?@?MXZYYRILYYO>8>FIHILGFIKNPRL>;?CJMC?CC?@EJFDGKE@BDCB@@@?AGHEC@:557;BDB@AAAAAAB?<<>=>?>HUTKGGFDCCBCFD@;<?@=95:CIIJHDEGFFJGCGJD?@ABCDFEBELH>=ABBCDEEA?ACCBCFFA<99=@<668988761.26527AB=;976789:;<<<>@?:753/27=BCBA=<;:7448956@A:8@A67;::9533342/+-26878;:55>>>BFD@;8=;4585;CGJPLD<7646:;414668;?=7542./@L?4GljfiS?>>Lra.$$\"&(+-00/.7<1/5@@>;510-/16=C>7537<:78<@@AE@8757@EEA717516=><EgaK7=@@@;889:9;BGIHHF;9<;0cL8[ylhp|sjhRvqONIGKKE4-/---/13788<?72>HHGIJKG;456777:>AEFEBA@?@@@@?=;;<<<>ACCEGB<<?;3A]g[ME=<?=51>altv[C49C=8K_WILMF=MMLJHGFGGGRbjklli`YVTUROLJJLNNPQRRQOLIGGEDDD@?GT\\acdglkfee`UKIHGHIJIJIHHHHGGFFGGHJLQV[^`a``fmrstuwyzyxviRECBBBBCCCCCDEEDDFGHHGFGGIHFFFFIR\\_]]]]^]\\YVSPNKIIKLKIGHHJLNOPRTXXWXQFA@@BEQ]ca`c^OKOQTYWIADFGJF>=A@?DKLMPOMLLMNNMMQQLIIECLTPHCCCBCGIIKMGJTNCBKOU[VPTUMNUXTIDEKNMIBBHJKHFFFDEJVlrkpthlwqbXYZ[hl`Z]emmfcfd[X^YTSTWV^eeeh^Z\\alqorzwqe`ZmenmnhdgbdfvwaE=?ACEDDEEDCCDDE?=teZ_ltN<DKH<9:<@DHIJJKMLIFFFGGHHIGGHHHKSX]XNJJFyFXaVE>?=@SSLF=AIOMIIIIHFFJLJIGILRQRWTQJOXVTXcn{z=8AFWUPRSKF@?>>@AHYU@<ü£wS>B?@@COTH?FKD@?>SfWFKX]SNPhaZTT_U`fa\\IMULT\\bweTY_]T]ww^\\mqnpjRBCABGGHOPJT]XYZTOgrs~wjOFLKILKOalp|cPPks_Jڞbba|XW[VV_aabbbbddcam}jjgnhLIJLLLLNNLczTJT]lp~x_unelvjym]gld\\]`c_Z]\\`aZXZ[\\``_]`pvghq|{s~Ⱦ˰}jbhrк}}˸oahuuyrtxh`zlʱrdktnb`c{hК~vaqavojQeNWlgQKSUMcjlosrmkneZ^ghjjlqw}oP?RvjhjiK>EQlDX}l}ziTKAG@8E5>VQfKEBB^aK:>QIKJBQ<J>9>848CFE:9;B?CBACFFGGHLGFHLNLKGDB<68<8=;<DC84/=?=?A?DLPUWXZ`b]XWWWWSLHMW[YUV]bcffa[WVPLPW\\ZPC?GORQNOOOPOQSSTVV]}I2-29>LQH@5?IFKPUYahfVHKV\\TLI?Xmg`YSMNI;29A;7HdmbVQPN947:ELVQbQ=>Upztjfcc_gnqkcbgjj`JT`GEXcYPRXI@Ju|mhfVMQNGLQKQls^HN`ovod^YPKGGGGF@<>ACIRWQA33=@<97:DJKIGHH@515=EINQKE@A@=;73<@@BABHID@:637:;@LSTQHA?:78;::::<88DGABEC@;9999:97=GG?=ACDEEB?=@C=98:=@CCBB=>McumLQgihhhiki^I;=>;:;===<HXSpzpa`ief{yP2<>Q^_\\RHBEPUL=6:@CDFHGGGIOXTG?ML@?B@;;;:9<CILLLHDEDA?==??EMJ<8;;<DGFHF@@EEEHGB?ADDA?@>;FSRJHKKHDA>AFD@?>;;<:8;@FIIIJMNFCFFBFJGBACGKLKMLIEDA?@@ACDDDDDDBABFHGA:79=<401369<=7003557;><876789:<<;::;=BB9344115<CFGHD=746435424;A@?;>:41024436993*+16;??><978<?=>@@?;433349=DJG@=9534663466:?@>@@=6/-..--1531Lljmn\\IGGWt\\=9L>GdesyolY85<EDC?7430)*4?C>83100247>BABFA;878CLMJD<=968A@>f~_PA>>ADG;68<=@DFLQSH<778:3D4Q|urr~xjsFFIILNJ4-.,///13568<?85?GIKKKJD<6328@DEFFFDBBDFFFEEEDA;;>>>>@CDCCC@@DE731>XaUKGJG<;lT<GQS_cSFPZZRLLJIIHGGIN[gmnmljbVQQRPMLJILNNPRRSRQMIGEDCCCBBEIJMPQQX`a]\\[TMKKKKKKIHHGGHGFGGEFGHJMSWZ]_abdfkpqssux{yxs`H?@ABBBCCCCBEFFGIJLJGFFGGFEGGFJT_`[[^^^^^\\ZWSQOKIIMMKIHHIJLLLNOQTWWXSIBADDDJWbcadaSLPSUWZUHCFIMKA;?A=@FJLMONNOPPNLKOQOMMKHKRSOIEDBDIHFLPDCTYSPW[^lmYOQJFIOPIEDDEGHFEDEEEDDCBEA>RgszcfncPWZY^\\Y_jtxsbZ]]XTWWX[[VRT^ca`^[VWaiebmihkig|vthlla^]gilpiG;?ABDDEDDDBBBBF@:raZ[irUDJG>24=DJMKIHGFHHGJLIIIIHHHHGEDDHOVYSG<d\\JZ]NDED==PJ@@BKJ@BNNFEEBCLTSRNHGKLOSNJLNKEQix|oyH<C@>==FMMFBA>=<;?E@EƺsSDBA??@KUM@@CBAA@OWG?KY]OF:Yhade`YlodSJ^n]]mbp~{km|xqs_anl`R[nkWPOJFFNUMIR[XPPRNKS\\Yhnp|z[FGJMMNKTlydf`X]uuTaʴnf~lUWVV\\aaaa`adffb[`pj]ablfNPRMLOOPNMW`_[XXexetvׇu|kd|zyijmutonlnrkdca`bgilyymuttz~tsnhru֩xηhmqmxgd]isvȭphqwphffwsŨwrwboilXqTezrbZaOG\\kmoqstnowyuoe\\T[myynSC6Kl]Y]N@COqL]t~d{qmpVLED=;E5<TS`ND?CgaN9JTJMFCQ@L=9>63<FHD46:B=A@@BEGHFHMFCFKOLKFEE@9<<:@;AFC;;8;@AB<;DNPQRVY_`YXXWXZXOGHNRUSRW\\]acbZUUURPQUXZSF?DNVSONNOOPRTSTWZoH68AGIMNMD2EJMRLEN_hkaSW[[`bM7IXNOXRMNM?1;A>Hang\\SJMO:9;:>SaN]K:GWowqmnkqvyqd_dcWM6MbLJWZTLDDE@Mxvvqc\\XPKRXSSZVQZhszpicZPLKKMLB;=>>@IR^ZB5CJC?96>IJFDGC:68;@HIHC?AEG?:<64LRHEFDBB??;754549JUYYRIJD88?@>=?@:;DG@@EDFHD<;==97;ABACGHEA?><:9;967:BHIIHEBSjw}|~~{~}kchggeddabe\\E<@>?AB@?<>@@`yrkoial~{iN<NOTWURKFCCEHE<867<@DFECBEIOL=GZXKCAA=;;756:@FLMKJGD@<;==?CGE82;BGNMEA?>AHJHHGEBDGGCCD@?DILMLMQOH@=@CA>?>=>=9:;<BGHFIQPFCGFADIIHCAGJKLMNMGBAA@>>@CCCCFFB<=DEC>:79<812569<>>82256:?@=8322478:;<;;9;=CA9322235:>DEFB;448::;:87;AD82973-...39?A?:31259=<;9:=AABB?<:;71/0148>B@80.1359<7234:DKJHHFA=5.,..--//.>VkjaWJIMnrtmvhG??@?=:879:76:>;2.//112358=?BC>=CG>=DBFKGFA<>@@Gi[U<<>?GTM95:=?DJIHOPC4/667;8~D>m{oXWz|{mAINMMPJ4-/-.//03578:><;@FJKJJJC<512<FIIKKGDDGILLJIHIF@;;>??@@BB@=AFFGI@609MY\\ZRTa{xal\\_qreRD>@IRTJIIIIIIIJR^gknookcWPPPNLKJJLNPPQSSRPLIGEDDCBDCCDDDDEEFMRROOKIHIKJJJIHFFEFFGGGGGFGJMSWZ]^acefimpsuvy{{vo^H@BBBBBCCCCCFFEINLJIFFFGGFGGHJPZ\\VV\\^]]]][YWSQOLJJLMJIJJIJJJJKKNRVXWSJBBGJLOW`dbccXOPTVUY[UJGINOE<<???BFHHKMNPPQPNMLMNNNMLLOQSRMKDBLKDHNHDLTZ[adVXbTFJJDDHHGFEEDEFGGFDCDDDCDFFDHO^{xhjjac\\WSPU_kqoeZYXRRSOQZa^URT]dda^[STclbYY\\\\kx{|q]ejfhefb_jcA:?ABDDFEDDDDCBD?6p`\\ZerZGF<65CYcbVKIIHFFFELTQLGFGHHGFEEDCEFMQ@CuS]h_JKHJJNcUB@??>77IPBBEDELUY[XRJGIOKBHSJ:HezelI=>>>>>BFMND=>?>>><Aɮv`NCA??@IVPB?EEBAAPM;>JTZG>8Lhuwve\\|bHZ|xgdasppiad^w~qk_[\\bZOLKKO_aPGQ__RIIFBTkfkpnt~{uw_HHDFJKENthNKM\\|UЪzey}feQZb]ZZZ[_eedbYX\\\\[\\]aWLa_MLPOMKHEM^a^[loÍonvtz~vll`equūyu½ǹ}plfãԲxkqdZ^oȨplvwlfjpqyw{}nchilayZnwmey[QU_`cfhkmms}~wfPHOWw}kOKTckfPQWWGEGfYfqx^l_\\t~tXLIC==A68RTYTD?Dm_P:NTKJAHOIO?::69BHHF22:A<>>@BCFHGLMDAEKOMKEEFD>@A?97AFB5=D>=<<89BIKMQW[\\YUVXWVVVOGDJMRSSUYZ[]]ZTUVTSTSSW\\WJACLROMMOOPRSTUXUXx{M?FLLLNPTC@QJIH?8Nbsv{tf^bf[@.>FCKYQLMOF8>BNiywpi`TMB9DF?>TbQ`P9Vck{umssuvsj`SQJ??7LcNLRPOMIGFANntv{pbYUVVZ^YRHLcqquwyqjgc[MA=ENL@;<:9=DJXe[HIONNF54AIFEFA>GLGFGC>::AIKEAEGIWZLFGD>=><=?=:?GJMNRXZVLA;=BFEA>==@GKE?@FRXVI?>?:8<CGLKIID><>=::;>ABEQQJJJFLessu{}~~xyyxwvtojlkR=ACDEDB@<:>AQp~~j`_[cp_KXSUXYXULECBCA=978<ACDDDFJ>?MLRXXQICAA@@>;9:=AFIJJEA>==>=>>@B?<CGIHC=:;>BGIHGGGGGFEEGGDBBDHLOQSQI@?@@?<=?DHD<;;<>AA@BILFEJHCDHIJGAACHNNLKGBBA@><=BEDDFFA;>CA=::7785348:<@A>822457;<732224789;;<==?@A=952..3436;;<;7567;GLJC>BAB74863..-.5=CB@;53229=;9<@BDCA?:359637843788643/16;=;77;AFLNKIHHHD7-./.-394/1C`bZVMIroĠsm_J=AIEDE?;7779;CE@9:=3-442544356;?>;EY`I>IFCIKNKCE>6t4AQ756<ITM>:===@IKGKMD5156771Iu6FZT94^v[CLNMOPJ4-//.-/2679::<>@BFIIKKJD94469<@HNPOLKMMMNLKLKF@?@???ABB@@?@DFHPB1H^Y]uo\\qxgadwyy]IBA;08LZIIIIIIIIKPV\\elmkjdXPNOMLLKKNOPPQSSQOIGEDDDCBCCCBBCBCBBDGIGFEEFFFFFGGGFEEEEGHIIIHIMQVY[\\^aceggimsuvxz{wiWHABAABBBCCCEFFIPOHFHHHGGGGGHIKMONNW^^\\[[[ZXVTROMKJJKIJLLKKKLLJJLPTWWSKDBEMTX\\`cbbd\\QQTUVW\\\\UMJNRK?<>@@@CDDFILLMPRQQNMNOOMLLLOTVSPNMSTLFIJHHNWZ^lY@EFBEGEDFEEGGFEEEDDEDCDDDCDEHIHJTdu{okmmi_XSRQS_dca__ZYWRQOPUXUPQXXY_^[WSZltdYZZT]ixqzrmpngeimd_jZ@??ACCDFFFFEDDC@?3~uic_fvdLA8=CUqzlVJKMLKJECHT\\UJFEFDDFFEEDBAAC6o]VeiUXTGM]nw`D;><969DH@>@FLLMS[]\\SJM[_KCNKDbz|c:AABC@>AFJJB@CCA??8jȬ~weI>??@IUPB?BBADGIBALMQUD>?NmmitagbOag]S\\h^[esmk{rb[bidVLNRWRIBFYdUFEAF`phl|{xw}kNEZZHFFQjeXTSMXhu[hyjPXaWPQN\\aceeca^^^][UNKWhWKMJGFJJNctd]c}z|yfsyƺrhtkͮjxnp~_\\dzĢpoxvibbvÿfszceehhk~chrpkab`]\\[[[\\^^YT]qePDBsnKFNmmQFDb\\OA[foqp^`SNhx|`NKC?=<65NSSXE@EmaR;KWPE?NJRMC;5<FGEFI0/;B=<<?@@DFIPKB?FMMJJGGFCBCCA3:@F<,<A<==979=BFKOUYXTRTWWURONIBBIPRSUY[ZZYVSTRPSUTRRX]\\QC>EKMLMNNPQTTVVRVypYPKLJKNTUHT\\LB<9;ZhqTQ[\\VA;LPRTZROSUPCBF^vzwl_SEIIKLP]i_cb?_na}{plu}uphb[OH<7AGK^JIPPSVTQG?OjXeic\\TT[^`fbTMj~uheipia`[QKD74BH?7645;@FQdo_HEMSQ>/9GJJHCKVTMKD>???BDFFFSeaVYOEFC9786@KECP^]UNNU[]P;7?CIKEAFMOMOPIAGTXYTE;=@BDGIJHFEEB@CE@;:=DMVWNHHFAMiutx}~{xwvtfL>@DGFDCA=;ABD`|ic\\G`vjceWZ]_a\\PEBCFD=8778;>CJPOF@GWaYSTMFA>>>AA=<@BBBDEB?=<;=>?==?ADEGIGA=?ABA@@BEGIHIGFEGJJHEBBDCGMJD@@AA?@A?@FIJJIHGA:;@>=AABDDCCCDCDA=>GRQKHFFEA?=:;DHGDCB=:??<88;9899;;<>CED>72245663.-0136898889:;>?>:981**22.045644542;S[UNKME?:6641.0144:@>:752139?BCGIFA@A=5.2889=<6013325754<C?8<AGQSONLIGED?4.+-.,4@;545HXWTIHma[ˋcdh^Z<BHKH@98:;<=>>936CC<?813576546:8=ThlYGV\\KAHNLEK?HS,9Q=17@FKLIIB==59FJKMD6454656?QGQU;0ImFDOOLOPH2-.022489;::<>@BDGIIKLI?65:92/<OW[]ZVTQNLKKMLHFGHEB@ADDB@DD@CHH;XstpvodRzpF<A?:>UgcIIIIIIIIKLLQ\\b]X`d\\SONNMMLKNNNOQRSQLHEDCCCBABBBABBCCBCDDFEEEEDEFFFGGEFFEEEFHJLNOPSWXY[]_acfhgfiostwxywfPCBBBBBBBBBCEEFLMGDGJKIIIHHHIJJIHJS[]ZXXYZYXVUROMKKKKLNOONMOONMMMNRUWSKFACMW^bbcbbd_TPTVWXZ][VOOTSE>???@ABABFHFFKPSSQPOOONKJJMTVTPQTUYWKFGGHKQVYd[FDEDEEDEGFDDEFDEECBCCCCDCCEFFHKPZiocRV[^][Z]XTU`b\\`qu]T[XRRWQMNQU[UVZ\\aadhhkbURTZ_arkmttmg]\\ksibiXA?>@ACDFFGGFDDCAA5ztdahzgMHLRPXkl]PKMNNNMFAFNY^TJEEHKHFGGGFD?7KqWQ]NAQJDGR\\_R>89=??@CD=;?IXWIFLNPVQL^mdOKNIUyU;A@@@?>?@FKIGHGECE=Nǯ[<??ALVRC@ABCFE?JWSHPQDDEF^j\\Pw]FIOQMKSRZwerwrnlhkfZWVVNE?@N^UGD>K]`akvvxyrsxn`U]LRW[`ee`ebt}pjt}yyf]OU\\TMclV\\adcba``^[YSIL[`JLMJHIUWWtqp{ǳϺŨ}lnyʺ¦k{l{}{``}Ӻnqwsh^g|ƶ}X}v`a_fivq_~yqfhc][Y\\fnvw{rga_f|sWomK9D_t_B)VbK`[osriwb`LK`sjTKAB=:45LTSZIBFihT=H]SC@SIZJHA9KTKCFK.1??:=<>>?CDJPJBAILIFIHHFEED<@;B@E92>:::;977:>BIMOQTRQSUVURMMKLIGMSRUYZYXVTPMLLNQSSRSY^]TIFFJIIKMNPRRSTVVWx_LNKKJJOXXXXXOE@ACXbzUGPVY[IBORVTYXWZYRGE[pnvxpg_SPPR^einebjARi`}xmt{ncZ\\[UJB?BNL]EDMPUTQRG>OiNLQYZWY\\]ckfWOmudY^kpgadaQKRH13B>556668>HWdZB;@DJF85?CDEJUWOLOE?CA==;79C[xsWQPIGB568>IPLJU_\\ZRNPQRP@7=BDFKSZ\\[RNSRIFOQQVNBAJPK@>>?BEDBDJLD=;6:LYOFGFC8?Xnz{wsrrrplaL>=@BCDDBAAABB?Ln}tzcJlqcihYTIIONIDGLMI=65;?CFEKSLCIRY^UMMIA>>;8;<99>>=?B@==<<<=?@@??ADEFIF?>DIKF@=>BEGGIGDEHJLKGDA==?B=9<@BA?@DEDCCIQRQQJ>@GC:;AFCCC@<===?<<FRSKGEGID=<:<EIE?=;8:><78:==<@ADC@CHID<625779620023479:8754225:;=;941466334554525;K[YSTUO?788620.4897<A<6554015>GJMOKA?@=;779:=?:423530/248BGA>BDJRUQONKKG?:??1,/08@A<73DTQJ?AHJڶzuoVELL<89<?@?=;:726DPN@1/28<=:6476?]lldRUcU>ACDIMA,69LB6:=AIMOMA>>20>IIJA65549@Ts~eTO@/LspznC=PNLNPD2-/15:<:79::=@BCEHJIJLI;6?D9//?S^gid\\VSNIGGIKLMNKIHDBDFC@CEACC?\\TagNGӿoYGIG@AN[_YIJJJJJJJJJJMRPJHS]ZRONNNMKKMNNOPRSQLFEDCCCBBAAAABBABBCCDEDDDDDEFFGHHGFEEEDFHIKMOPVYXY[]_adfhgffglqvwuqeOBABBBBBBBBBCCFHFCFGJLJJJIIJJJJJLPY[WVWWYYXWVTQONMMMMNOOPPOPPPOOOPRTVSLEBBJWadddcbcdZQSVWYZ\\]]YTVWNB@AAA@@ACDEDBDJMMKIJLNNLIINSTTSMLPW\\PDCFJJJW]ODFGGFEECEGFDABDDDEDCDDDDDDDEFEJSOSgfSMOPORV]e[XVZa^ertcX_dZWVSOOUZZT]inty{fafWEO`rtuswzmgcZbgnidk]GA>@ABDFFGGFEEDBA;wp`ahvaKWggWSSQMNNNNONMJEGHOYUOHEPZSKHGHIH?7t^PNV@6?:>B=:;:868>@>EKD=<?J\\ZD54BRf_Vagi_WP>:U{N;>????>>>?BFFJMMPJEKIn˯i@@ABNXTE@ABCDB@bw[KWgKCHJLRIwFHUMFFMNdcUhky}}~|{yrzzl]\\^M@AFLNG>BZgglmkhijaadffdkUVU^oyo_jqf^lrn{縅pic\\tQROQYRIwtO\\bbbb``_\\ZVKOURITQSRP]jcşĵ̭ɞǰýxdr˻ɨxhwidϳnqvvi_ŧqYp[\\Uhpz^xvqlkg]SUVWW`szmdXPikF>7DZz|jVg28XhOxlqt_g^iON]mnZNAC=;1:JWVYJGHgnV?F]UGEVP]GKKBUbQDML/6F98?<>><AELPIBEJHHHIIHGGIF;CIDBF>?A44438669<@EGHMPQPQRSSRONK_iVMRPQTTPNOOICDJQUTTRRUYZ]^YPLHGGJLMOORSVUSTxQ;DJJHFMW_`[TTNKGENH\\wkVY[]^eNANRTQX[XYUNIImk{{yuqnaTTVZakqgXiAJ[]vxllobQJRUOHJE>DCaODHMHENRI?G[NHLW[]\\[[agcXBIKMWmtkgcfj]NTYD4:=:;=8226;@A@=:98<BA>>75?OWUPRTIA@>=:5/6GXjn]PONIB69FQSOQTXZWXPFBBAB@=??;;I^^TPPPQPKINPOPRPNOPE88<>?A@@DIKE@?CIPOIGGHE>9@TnytpsujUG<<=>>>>?@BDECCBDUm{{\\omWOIFA7:DIIJNQPI;8<GORJADFCAINSPPLFCB><<;>BB@BBABEC@@A?=>@@@>?ADEFFEDBEFJKGC<?BEGIB=DJJMLFA>;@C?==?ABAAAELNIGHHFDIKCBHECFNRQOKD@A@BC>=ENOGB@ADD?;9;@C<79879<;8:;<==?A><;?DE@963699;9;9855579:;:73/04<@A?:7=A<998667964GV][USWTD41<A:34379;?D@75587/*+6GOPOQNH<8=A@:;=>:48;94/,,+6EGCB@BFKRRPOOOL@3AM@008@AB=:@KI=9;FmGYǽggqhACA:=BBDDB@AE@6:DWU8-/14:?>4356=Ocnl^Wd^H8?FND`I5?>ML@=AHR]ZM>:<639>FF>229:=Hg{E;?1Nr3-hN1ADINM?2./038;6358;<?BCEIIIJNK>=IJ<46=E]rrgTLOKFGIKNOPPLIKJHFFD@>@AB::ł`WIk׮~aTUWXYVVSUHIJJJJJIIJKJJHFGLRSRONOOMKLMNNOPQSRKDCEBBBBBAAAAAAAABABDDDDDDDEFFGHIIGDCDDFGHLMNPRVWY[^_aeghgfegjtxzreYJBBAABBBBABBBCEEDFGHJKJKKKJKLLLLPUWUSUWXXXXWVTQPPPOOONMOPQQQRRQQQRRTUSLEBCHR]bdedcde`TRUWYYZ\\_]YXYTGABCCA@BDDDDCACFFDADILONJIMRRT[VFJ\\^ODEFGHHQ^O=AFFEEEDDFEDDDDCDDDDEEDDEEEHJLU]VPY[V\\cSOPIPTRXTS^_gc`e_gkrgVUTQXZWS^lrpmnjadlaTR]egcmxynujih`jj`fhS>>@ABDFGHGGGEECCFrs`]`fqeQWadWKMMMNPNPPNNRNHDJRQNHEO^`SHGIHH<]fSGXO?<;8>@<866658@B=AIE=<@GHD96A]y|pigb\\YZVH6=pM@<?=@?>>>>>?ABCEEFKMKSMG[~i=@>DO[UE?ABABCIoyi~eJVWZswWONQ_MFKLKb_?H~wxccXFDDDEA>Y{uojdfcUU^[Y¼YPUXcjphi~{hYY[ZN{㹠zg\\ZVNOOQSSIlgW[[`aada]]YTOUUQaXbg_nxȨѳԷ׷ƾƺnxwf˸ǵq{meuήmrhoƌmlhSe[ir{bqu^d_kpmf_VMGBIU\\emhbYgzkK@WL?ITzZAwi:cyd\\lcjuW]OgcQ^itþo]TEC?=2BKWSXGNHbmX>B^YOPXXWCNUJVdTFSL2<H5=F==?8BLNNGCDGHIIKJGGHJG?ELDDEAD@11007569:>CDFINQPPQQQRQOK_zqXNNOKKGCEIC??IX[XURQRTXZ]b\\PLJFFHKMNQSUUUT\\fN>CFGFDCKU_a]ZPKFGINWjgcc_`adOANRQNX\\SSNJJN[qepjh}wob\\ZY]lzrRlUJOTfqa[dji[FAFD>@J?88:[XB?@:DRPNFCMOTX]a_][Z`cbY938KYklghfefcULTTD<AC?601466414:969;?DB>70;OXTQXYLB=<=;43DRST^cYQMID==GNMMTZZYWWPD<=?@AB@<84>VXGGRUSROOSURMNSSMF?=>=<>><=CHKFBAXl_JJHGHJIC<AXjx{ydC;>==<<;98<ADFDBBFQ]aevdRTWO@7;@DDEGLPPRQF89FPTOD>A<@?DIQTQLECD@;>FQYZWWWVTPNJEC@?>AA@>?AEGGDEKLFDIRTJ:6:?EG<6@IIJG@;;=@@=>ABABABBFRWTLHJKC@ADD??DQSSUSTRNDCHF?=FKD:9:>@==<9:<;746669;:9;;<=<:5029=BA;75469;=<<:888788;==9515;CFDB<7:<9789877613GUUSUVWM=26GC;98:99?DC934794.-/6FPIHVYH32;A?<<<=;9<>;4011,3JOEE>9=DOTRPRRLA22AG90<DBC>=CG<26BVw_heΫțS1LO8;AEJIEEDEDDDB8>K][A0002344334709YooieihU<?GG=9FIDSTB?MUaot_@2;B>7<CB://<8=xwe]EP@G@/^j63=ING=3//02321148:<>ABDGGIKMKHHKG@;;:5Rw}hE?LKDJQTSPMONIINLGDDB>>@@;:_yswg|޵urԾxka`_]cni\\JKKKKKKKKKKKJIJJJLOPOMNNLJLMMNOPPQRLDBCBBBA@@AABCCDDDDBCCCDDDDFFGGIKJGEDCDDFJMOQPRUWY\\^_beghggegpx|~t^NECCCBBAABABBBCCDEFGJKKKKLLKLMLLMRUTQSUWWXXWWURPOOOONOONPRRSRRSRRRRSTTRMEDDFIQZafdceecZUUWYYZ\\\\\\\\Z[YLBADCBBCDDFFDBBBCDABGKOOLHJPRT\\aTFYiQBGDBGHJXZLEEFEFEDEEDDDCCEEDDDDEEEEEEJMQY^[XYY`jpVQSIEGIMQU`dkdX\\apv~wlZNMY[UQVah^VTZfqn_ZX_USV`ijguebjkopidib@;>@BDGGHHGGFECAIlwd]afn~qWLDFHDM\\YPSTTPMMZ^IDLMOMIEEQ_YIFHJFKsPBP`=8@;;@BB@=:978@B<>FE?=@EA;?Tk|wkfd^\\\\W@<aa;8@@??@?>>>>>?@AA@@@?FKMNJA\\QTY@UFDPXSEBABABCKpxӋXTZgf`X\\zz`U\\PHCBIKE:Tlb\\HDEECLZuwwxwlfgfZQOQSVKT[_Zk][]YPPͽfUTPPT]fPi]RXa`^qca]\\]WdWklcmr}ļ̢ɱѼΜˤ¾¾Ų~~sȺwǣy~qudxyf|̩my|gjkihgJlrnouzhtr_SOZjvx{{{|{{}~n^`r~|jT@JkbEA?adD__BYln^eyUTA[tP_gjĻqa[Q@<>4FNRKVGSIZhUAD`ZXVXZQ?RZOQZSJTL4@H4GNC=?:HPLKFBCGJIILKIIHGEDGIGEDAC>331165799=AAEHLNNOPPPQQPL]uxfQMJGDBABHID?IY_]VSSRQSUZXXQNNNHFIKKNQSTTWY\\TECDDDA>8<C`iZPLLHKPT[`a^^aabPALSPNX[RSLJLPDR`\\NU|tjfgim}vKjjMPR]sZD=Qej_NCBA:6>B68FJKPG;7?IONTPCd]YY]_Y^^[^ccVA?IJJPcmiefd_QB;CEAAC9.+06888438859ABBA=7/8HUTTZXMD==??=@MPLOY]ZQKFEFC@:9CS\\ZYXUMFB>ADBA@>:5;TUBDNRSTTUWYVRMIKKCAEF=8:;<@FHHGD>KdiXOHIOQKMNGGRo~xW79@@><:9879?BACDB@HSXQKHB><;56=CJJGFIKLROD9;GMMG?<?A??BGPSRORLD>;>NY^afgb\\YWXTKEB>?AA>=>@CEDBCKLEAIU[L948<BE<6=DFFB<;=><9<AEEBABCCFLUWLGQ]`RBCD<9DLQQQQOTRFCGHB@GJ>458<<:;:99:8555459;;;<<;=;6217;>C@976578:<=;9877789;>=9768=CFE@720025788763.1589GSVUPHBCHA;;;<;:::72236966>E?8>:8FN?,1=><@@?@@B?96323445LOBE=58?LRRRSTNC4*1<91=DAC??@@?>;G\\bmsj}G`ͤS(044=C?GJCDEEDDDC;@RZV=10/01//2124.9XpqpolndKC>,nISXWY`XJMXmvoJ3=F@:>CB;42=-]\\W{a^OBS0LxQ5;ED;93//0//.0348:<>ACDFHIKKKMMJC@??94Dhw\\:;NM@ETYUOLPQJINKEAAB?>>?@B;?BJLٹĻfn~|saV_uuk_JKKKKKKLLLLLLJJKKKMMLLMLJIJLMMOPQQRNIDCBBB@@BBEGILNOPKEGFDDCCDFFHHJLKHHIJJIJMPQRRVXXZ]_`beggfhghoru~bGBCCBBB@@AAAAAABCCDFJLKKKKLLMNMMOPQPPRUWWXWVUSPNNOONNPQQSUVUTSUTTTTTUUTPHEDFHKPW`deeed]WTWYZZ[]]^]]\\RC?BBBDDDEFFGGFDCGFCEKQOLJJLQY\\^_TTaOAEC@FKIQ]ZKEFFFEEEEDEEEEEEDDDDEFGGHQSOW]`bc_[krpYVVOIMMHO`lnpoaU[hljvnWFQ\\`XPVej`_`fklf_TRZYY[^bekvhPbhfjjh`gQ>>@ADHHIHGFEDB@9\\j]bipxP>57;=OlgTX_[PKLZ^KHRROKHC@BKNFDCLDm]GLgZ77<<=ADBA?<;99?A==CFEFCEECJlvnmjf`QC=?BoeNHG<<BB?>>?>>>=>>>>@@???>@CEINMQWqmUDMT^BQRPKJCBA@<Gns_PU[cWkl^|grzuyVTNIDADCBAczefLEFFMftz|ljyytlihmdYURIdJVU͝kpvg_Z`ehVW͑kfaRQqU`vHUYleoemk\\idqc~wǾΟ̶ǩƸկ̱ľž~¼ss{v{ʍpnm|ŦmyznlvwɥackDi|ifvqwendSLNXep{~}pjjpaHDYkmcWCJo^VYricx_oZQ>LzOchǿɿvld]C8>8MRH@SHTJScLJP[ScX]WL<T\\LLQQPTP7DH4LSJ=BCMOJIH@EKLJILKLMHDDHFHFB@CDA9;/;56@;:<>?BDHIGJLLMOPQNZeloaKCEFGGKOTMFLRTTUVVSNJOQONPOSWRJFJJJMOPQSX^]OFCDB@?:62M\\VMRULSSKKSTS[ccaUDLTPQ[]UVOLPRGTg`NP}zunxmBapVTT\\gj\\D>F]g`MDFFB<>C;<OebICPDAMH@P^YEujXMIIN_e]^dcQDHMJAPmm_Z`cU?4/157862/2333550/7=:>IH@?>8/4=IU\\[SJI>:DKE@@?BNSPMLJGJLGB60<UbYRUMCFJDDHE??A@CO\\XHCIKPSUUUVXWI<@KMIGHG<59?HHGDGIA>NfnaKKZWLPWMBFb{x|lJ6;BCA=;;;:;<=>BGD<=LXRIIIHFDB@?AFOWQFBGLHC>>?@A;8;>C@CEGMPQW]UB;;>ELSboqaMGOVXVPF?@A?=<>=@?@>?ADA?IXXI:89:<>;9;=>?<=ABA>;<EKKDCCDDBBFJGEM^jbLDHECEGJIHHILKDCDFFEFG>89<><9:;89;9776569<==>=<<:77>DAAE>9:<::;;;==:876589;>=<;;;;?DFD822/1478887540/(0KXVVXXSKD@==<<<91-/13458<ISUG0+-/272.5??>?@BGIIA402640/7LE8D<667>IRSRTQF8.+-22;@@BA?>==ACIVdooqdetM=̼I7456881>HCBDCCEEA=A@?;/.11112231116IcoqtyojeL>6<[K]]cgrobnTDIF=@ADC>>?:Cɠyr~ocQGS.=qh;;;4/11000/002358:<?ACEFIKKJJKKGB@A?;==ITG8?NI;@OTSOPRPKJMHB@?@><=@@??CJUWܾزjx{z{ib]JKKKLLLMMLMMLLKKKJJIJKKIGHHKMMOPQQQOLGDBBBBABCIQTUXYYVPLHEDCCDFGIJLNMJILMLORVZ]\\[ZZZ\\^`bceggfijhddjw~hH@DDBBB@@AAAAAAABCDGKLLMMMLMNONOPONOPSVXWVVUTPOOORSTTUTTVXXXVUWWWWVVVUUSLEDHLOPQW_cddeaYUWYZ[[]^_^^_ZH=?@ACFFFFFILMGDHHECKROLKJIQ[^[\\__UEDFBDHMLNX^TGDFFEEEEDEEEEEEEDDDDFGJR^^RTbjjf_Tabheig]UVWUVckilkeWN`\\Zf\\VOaegaZ[`ife`XXUUXQNUWWW[bcilkcjfba_`\\m_A:>ADIJJIGEECBA9Ug]dluuI:649<H]]NQZUKLORPKKSVTOGA=99@EDBDPtUQblR:8::=FF????=<;>A>;?GOSNEACDWzqmmqdC9=<6>bhL;;=>>?>?>>>>>>>=>>>=>>?????>>AFKQHA?finBRPONIDB@ABNgmbJފNqeZRrt^ef[__}STOJIIHJJGZ}twQDEN\\lmejo{~ofeif[RrUClkIWR֢hdc\\Xalot]Jcɴebd]QJwX_Zyzh_x]to~qŻȢϻŮ͸ǿǾĶ~~~zľ{˾æcos~xnjjdquy͑jgnCcphryXbuul]PQQSSSUetwviX_hbUJIMOS]]VZLSl~Yrk{Yyl[]S?JzURžzwkcP>>=VO=9NIQFM`EPWOQj[_RA;VYBMKSWOQ=NE:OUQ>ILPNJJI?IOLJHLJNQHEFKHGB>BDCC?:7>19L=;::<>@BCBDFHJMPRPV``fkZHKORQQPSRPOLFCOZ[UMIMPPPOOSXXURNJHIKLNPV[\\XPACA@BD?17BHJU`ae[NMPMP[ffa\\MQY^^`a_QNORRHXlfOAgt|~nJYq_XU\\b^XW[_a_XF?FECCIGCRa^ZLBNQQL=DV]\\BijTH96Fajb]\\R?=GLKH^pYKKRWH3.01245238?=51..05BJJKMH>?D8.48=Q^[KHNF@PVE7428HLIIJMQWRIEC>AXkYDF@8>EDGJF>>EMVZ[UIEHHGHIIKNSRB9CPVUKHSTGEQVLFEJQPE>JQ\\SNQRQXZPDBDX`h~pSU]P?:=BED?;<=?>>??AA@?;?IOSVUQNMLHD@AMZVMFFNUUQG>9623:==AGHFEJPX[RA8<?>?NhuqcL<@IR[^XKA>==?=:<<<;<===<?GKGA=;9::;;;9:;=CEBBDFGILKFEDB><;:<@@E[ibLDMMMKGGGFFFFEDCCFFD@?ADC@?@A@;89;987668:>@?>>=<87@KLE><;9>?@@?>;=A?965469<>=::;<;<CMQD853479999:50--,<Z_WX\\[TIBA@?>=>6-.568:<<GYYMA2+/1/1257<@?;=BIOL>127<;/)2;66D;5854?PTRSNE=::4.19<?BCA;88>DMRYfnutze=Pb9:386635?GC>?ACGF?7763//23310256613=Rhoqxp[WI:2]|7JMXjvOAJKFBCDEFEHI7ʆMvzvsZI\\-2\\|A95//001000002357:=@BCDGJLLKKKLJC@B?<=87>>9@FA<@FINQRPLJKKFBBBA@>>@B=>GNJDЫ㭉v[eZa`JKKKLLLNMLMMLLLLLKKJJJJJIGFHJJJKKKLLJFDCBA@DIMQWXXY[ZYXUPMJFDEGGILNPOKGHJJKLMPTW[_ba````bcddbejf\\]da^dS=AECA@@AABBBBAABEGHHHJLMNNNNOOOOONOPSUUSQPPPNPRTVXY[\\[ZZYYYWVWXWWXWWVVWULIHLUXUU[`bcfd_XWYZ\\]]_``_aaTC>>>BFGGHHHKPKFFHFDHMNMKKLQW\\]Z]cXFCGDGIKLMRZ[RHDCDEEDCDEEEEEEEDDCDKOYbdZOYgjea\\b`gnpmfe[U[\\\\Z\\e_Y\\ZfdbYT]behidaVWgheTHMPONTY]]\\Zhun_fottqlbb\\fwlRF=FJIIIHFFHILNJ\\kcfmxsD8979;<>BEFFHNXUEJVMHNPMC?;77:DDF?q^P]eR>9:;;>EA:<=><;:<==;;ET[TE@C@:BTjrC5====<<><=?@??=>??>=>>>?>>>=>>>???>>>=>GRSH>TvxfETVPGBA@ABMVXVVFWe]hgbZX^_VZkYkgTLMPSSMK_s]FGZ^YNOi|vgUZ`izmUSDN~^OWEuTX\\fpvnkbcJpub]aYHCCVͼslmzd}oz}θȼ~{ʿĺʿ®~~}|{՞ùϪqxwwv~wqnĳzeafswÅtpoE]yzx}|gPWmyxk```cgcZOHINWbipz~iTEITSPSNBWsQXv`vs|_bWWX?JsWpźõ}{wheZNCETE8:GHNBJ`FOUHXg[UO9:ZMALL]WILEW?DNWVAQRRSKLFAOSLJIMJPRGGHKLEBAJ@@@B8C56?P?>788:<>??ADDEGHMMQ^`]de\\\\[WSPMMQVQMI@DSYUPOSTTTTSTVVXZYVPMIJLOTTU[\\EEC@BB>12<GKRanr`WURMS^bbbcX[`c^]]]NMMHC>QhcI:Fu|`Rhw]TmeZUXchfhgfda\\IBEGHJJI[k_IGULALPCASZWY9ZkMBA=DWgi`R?1@SVORa^B@EFB6//23445206BFEA;:@HNRSQJ<:AI<3989GPOHHNPSWN93636BHHKOQVaaRKMNIQ^TC=;79;=DGC>BMVVNHGDDEC?@ACGJJE=9DQYXNFN\\^_b[LHKPVVK524@DCDGIO[]M?<?@LnY;<A>=?BBDC?<=@@@ABB@??AA?CQ\\^YPJKKMMD=EV_ZJCRdcYMC;55<CC=<DKKEFLNMIB>>@BFYormi]OFEMTYZPB;:9;948<<<>@@@@=;?CC?<;<==;:;<>CFC>?BEECADGGDB><;;;=?GS\\O@DLNPLDDEDDDCDEGGDA@<>HNKEA@CC:568873368;?A@?>;869AIJD<755;@AABDBAA?9422368:999;<;9>EGA96655579;6/-.06I\\YRUZWNB:@CA<=;1,5=>??AFQ^X>31.22457878<=<AFJOJ;.5;=A;622.3C<57648CLNKHIIIMG629;>CFF?77>IQRWhtv~X<=Ks`?3426899=AFA=:;?CF>34875555441/3;@<=DShosz^JIF@@XRNPJYoZ@3<JHC??DGGGH=Uԟ]e>4o{}jPf-1HM2100011000003357:;ADBCGKLKIKMNI@>@>735<@=:=@=?B@CMOIKMLMKDBDDCABAAC?<EE;-R軒۱؃jgfͶzV\\g`JKKLLLMMNMNONNMMLLKLLLKJIHGFGGFFFFFGFEDBAFJLOSUWXXXZZYXVWURNJIIJJLNPPKGIIIKLLMNNPUY[\\_aa`aa`^_ec[Z`XFJPC?CBAAAABBBBBAACEEEFGILOOPONPOOOOOOPQQONMMMNLMNNMMPUYZ\\]]\\[ZXWWWXYXWVVXXTPIHPWZ\\^_abded\\WY[]]]_```ad`O@=?BDGHIIHKPOHEFGGGHJMMLMNRYZZY]`RDCFGHJKLOSY[WJ@ADFFDDEEEEEEEEEDHW^bge_RPVYY\\]aakqjinseZ\\[VS]fXO`hebbQUagdd`][TUb_`RLNUZ[chpqnhousbrnigkgdfaspnmTACJLPQPPQPQSUQ[rggmx{H9;9;;:9>GHCBMZP<FVJ<?BB>=;98:DF>TlSVfX;6::;>??<89:7:=><<;:8BTZOA=?EB84>odA9====<<>>=>?>==>AA>==>?@>=====>>>>>>>?ACLaVSOfJm^[SP?=?ABFJJJGLKBjʮdXjjbWOZ_LtƛkhwaYSW__IGq}hssSN_YKEN\\]WJDR^gpymUERSSPVVh̢bXgzwnaVf^Lsx`[`_[]crȷφtszíʶvŪȽƳʽ{~yt®ͱԴnvĮphswnundŸsddfgvjsysFTpyu{qbQVaenqpmhcPFHKF<5Bi}plwjVZkZKzMXoZP{\\VU@@^mϵyttvxwso^XNJLC9@EEL=F_FNTDW\\RMI3@UCM>W^KNFPS>HK[VJUQUWLQCCUSLKKOJMLEIHIIDHIG@=BA@=-<OLC;7868:<==?AAAACGIHT][[ab`\\SLMPMNTQMOHAIVWQQUWVUUVWVVYZZ[XSPMLJLMP\\dWKF@<BC36ALKJR[_WTSQQUXYZci_bee_a\\[SOJ@<Q^fV@>>HSLKBF\\{u`Tene]Wckhjlkmc_LEGKNMHKicG7=OL9ALIJTZZVBUmFCLLHL\\ibP@1NjbWT]P@CG?3-//022244227AGJKKLMLLMMD7<DJA8539@BCGJFJPE;6:=;>EJIKQQPWc]RNOLJKIFCA><9:==<?ENQMD?>AC@<:;>ELKE@A@>FUWMEDJVb`VKGIMTO@7302;BDD><NbXA<BFDY~dE<?>?ADFECA?>>?@@A@@@@ADEBFT_aWKHGFOUI>EPWRE?L[]VLD<9<BEFC=?HJFCFD?????AGMaupjhgh\\KIIGGD@>:3345:@BDFFFDB?;=@A?====;::<>@BA=<;<<=>?AAAAA@>?@@?ACEG<9DJMOJ@=>?BBABDGG@>CEGOROJFCB@:115645677:>BBCB=659;?EEA85;CMJHGHIFA<622246998:9::98;9314885114776558:<FNFET\\ZS@/6BA:;91+4A@?;:LWdZ:-101268876668@KJIMI=13:<AG>3327A<545868KQKHJLNRRF=>ADEGLIDCGORUdtxx~y`IHGA???;889;;;<>A><;;:9<>6/034443233138=ADEO`ouzdJHFEEKMPYUUZh{Ț<9A<AGA=?C?>EC0S+5=DxtTq13<y_//001010000133589;AFEEEEEDCDED;7;>;538@?:<?@?@A@EPMEJPMLJB?BCDDCBCAF=>:65:f[Cױ͖qjbeŒb\\hgWKKKLMMNNPPPPONMLLKKLLNNJGHIFEEFGFEDDDDEEHOOLOUUUVY\\\\[YWVVVWVSOLKKLLLNNLIIIHHJMORPRX[]bca__`_^_a`]YZ[PACFAABAABBBBBBBAABBCCDGLPQNOQQQPNNONNONMLLMMMMKKKKIGILNRTVZ^]\\ZXWUUWWVVWWYZULFFMU[_`aabegbYX\\\\]_```aacd[H>@@BDGIJMOPOKEDHJIGGKMLPUVUTVVX`\\MFEFFHJLNPPV_[LCCFFDEEEDEEEEEDEIWeiloi]VQMLNTPPd`XZbfa__]]Y^cUQ\\]\\Qba^fkkhb\\WXTZXXTUNQcggglopg^WS\\od`a`ccdZoqllP>;JY__^^]XUSUOVwhgmwP@@<==<=DGIKBAEC>BJE;;<<;:<<:;JLEUYgdI>=;::;;=BGIF;GSVSNG>8?QSE;;<EG@9:KYk\\C=<=<<<<=>=<>>====?@@>=>???=======<=>??AB<C~eJYcxW2r~\\OLCBCEFIJGGHFLFE\\QVdg^SVXNqq~eNJV^N>Qsb]~z^T_YONRTPLGN[^b]_|WGURPMm×lq}udaR\\wOTlrgXZ^{ըѧʶ˼úww{zĸûƼͽô}zzҿүã}p¾j`dqmYrlf´ǽrfgejxjp{oKTjsjylhfa`]Y`kpo{yngZMcvZfx}|\\Ue|tsIo{]@jhXTG/sͶĹn`^gv}~|h]XRLC<E@DJ6B]DMN?OPHF;1HHDP:bTAQJWGAFJcOSQLWWRTALWONKNQIGDEIFJDGILB@@ECE31FWIB79:569;;;=?>>>?CCDMVXWYYXRHCHMOQRNMMMHHSWQPTWVVX[]]]\\[WVZZYVPKHINV_[OJ??ON34CNJGGCILMMMOPONP\\kfd^chkjeXRL@Ino`G8=@=3=YJ9DT`z{h\\P\\old`aeegfb[T^PFJNPNHIQC59=@C@>KRKQYXWHH\\JKMOOHN\\XF=4K]ZYRYUJEE?50..035689<:425;AEDA?>?C@@EGI@7118@BDHG=8859BC@BIKNVVRPNNWWSKLOMIFFEB@=:;;43<CFIID>>@@FH?7=HSMCCNRC?Q]TPPIJUSMJHDFMJ649528@CDC@DQRDAHK?:Ne\\GADC@ABFJGDEGCA?@@@@>AABFGEIS]\\PIHA9DMG?=?DLKGGNTQI?68AEFGHGIHB@A?<:::;>ADFSfihgbb`RFA?<::;=AGJNQNLPROMIC=;=@?>>>=:8889<??>=>>===>@@?>@@@?AAAB@=<<<;AIKLH?87;?@@ACED==HNNRSPQOHD@9246427<<=@ABBDA;79:79@C@9;JSY\\UKLOMLC98:78:<=::99989;<97899533345689>@@?@69Sa_WB/6?>8;;0&2CC?98J]lY:266679753252.AQD=HK@45@@9997679?=864620;DFHHDBGLKEB@CEFMPLHHKKNduna\\Q?=FIGDDIHHFD><;::===>><:6:@:.+/1356557769=AAFO^jiN>DA@AABFEKV_mt͛;9DEGILROC99A<<76BUYy~Wxx794ev50211011101134689;>BGGC=;=@CEC=>BA=<=<:78>BCBABDGT]RIJLJJHEEEGIFEHEPIGD>?>8=@CUϺuuo_\\ehoycV\\jePKKKMNNNPPPPQPONMMLLLNNMKIHHFEEFHGFDCDDEILLJKNOSUX[^][XVVWWWXVSQMJIJJILNJFFGGGHIJLMORTTUWZ_a``b_^][XV[QCCCBB@@AABBBBAAAAABCFKNOMMNPQPNLMMNNMMMMMNNOPMIILMNNPPPMMOPQTUXZZZZYWVWWWYWRKEGOUY\\`aabde_[[\\]_`aaaaabaVD?A@BDEHQTQONJGIJJHFHKLXe_SOQSTWWNHFFEFHKOPONU`^PECBDFDCDDEEEDEFIKT_gokbb_SOS_\\X[UXVUY\\_dhlb[XTRPONKYjbcfjmke`dZXVSRSQO\\_^]_iibYPMTagae\\dfVPkvoeQ7BXfjhfc`[XUWRTwgelwUCGE?<<?FFHQJ@:<CFFA<<<;:89;?DXLgiSdlT@A>>@A>8>DNWTN^ffb[YTE>FF>:;;DD8:EL==mpB9<=<<<<<<<<<=>===<;899;>?>========<=>??@A>Fyu[LM@<h}RGHIIHGKOQKFMRGBDTogLHLOSUSVKY\\Dbz^GADFFEFlwjdYjyxzo^ZbZSMQYXROWa_^\\Y}VJV\\ZORźŰu|tewgpv`V_lf\\Z\\^¯˿Ƴ̼|r{óöʽɶŹ{ɹԳжƕm{o^XaooVmsɺukjp{zxyufSYikgvlbXTYdd[UUWRXmnsxa_kUb|i\\wwak=Ty^T=Uʩ~f_XRSnzda`P?@D6DH3B\\EKE?HCB>.5M?JHGaI@NSOAECVaHTHJYXWJBUVKNJPQIHAJDENCNFFG@EDH>2:TKG<8=:56999:;<<<<=?CIOTUTSTUPD@@CRQOMKKLMLPTSRTVXX[^`abb^XTY]_]XSOOMMT[WPK_mW22BMHGG@FKKIHIJIFFQecYJQajuvpbQEXkcXH@CB?7A\\O@DQ\\ttf]RSnhekded[PLEE\\ULMNPND?86;@>9GTHAKNVYRM=2LNGENPJFLH:5115FXRX[QB=?;1)-7;?ACDA;3,*.27;:657;>@BCD>754;DIID>92/9BJE?CKJL]e[RV\\YROPSWPFGFDA?>;;955=DFGGA;=??KZSGMX^M>G\\aSIR[Z^e_TMJEIIECIJ<15<?<9BIJIFFGEDLQN=;LMJHECCACHJHGKNJDABBCDCDECEEDGPXPFEEELTSG:9ER[]RCDJLG?AFHGHIKOQI?BD;789:<?ACB@DSkjRFP[QB><::;DUaehf\\RRVUQQLA9;@@?=>>=;889;>ABCDFEDCBAA@AA@@BCCAB?;<@C>?CHJF?::<??@@ACB@BJLKOQORTNE?::>;415;?CFDA?><;:;;:;;==9BS[\\aaWSRSVN@?A<=AAB?<;==;9<>@>;;;;:765535<@CBBA:;Pb`VGCJG;6;=4)4EC>;:K]`G66:;;=:213662-=J8.:A<29D?211468:??:;=85439DHD=8;CGD?98:=GNIEC@>@N^XB9>EE@CEFHKNLJG@>=<9==<ACCD=49@>5/06;=;<<<=@A>AEENb_HCC:=<624@Vdɼ{.4KegRUXTH@A@AKhJ<?=RYiq~{Tq|>>2MG2322111111133579::;@B=99<@FJJJKGB???9458>DFEFHHKbqY@DPRTUSRRQQTSQQSPOE@BFGCG@/^ƊhhWBCXeZRbkbYY\\W^]QKLLMNNPPPPRRQONNNNNMNNLJJIGFDCEGGECCDDEFHHGIMQTWYZ]^_]ZWVWXXWSPQOIGHFHIHHGIIHFFFFEDEJLRY]`aa`aa_^\\YWZYJACCAAAAABBAAAAA@@ACGJJHHHKKKJJKJLOONNNNOOPPQPKGEFGGKNNPSVYYZY[[ZZ[ZWWXXYZZWSLJNSVY]`a_`dc\\Z\\^__aaabaad_OB@@ABAFQVQQTQKIIGFFHIHWjdRNOOPRQJGHEEFHJMQSRNS_`QGBDGEEEDEEEDHOSMGPY_^^feVXfmoplilfbeeaalmd[SRQLJKSP]a^\\acglnh]ZXRONLQUWajlla^_\\aX_njghgfVTeqodRBSadggeb_]\\[\\XVxgdluXALOB<<@EGFKLJDAEIHB:99;::6>OVYSW[jaF?<:?BJQOIACSVRZaa]YXUK@<<;<<<@@@N`_I:LiiO<;<<;;;<;;<<<====<@DC;6<=?========<<>>???>@GSkdA8gi\\QGFHIJMOIBM_aEBGKMHHLJEDGKEV{}yndgf^RGEEDHPOY~wjgZUnzb[[bWJGPTRQT[]\\[[ZrXLYZXTVvzuhshke[VWXZYts͸ɶþǻΰʽx~wy{|~~ζϿö̻zƳƹӻ̫u̟z~kb_`]iiůz~qnv|~gzcZ^ccopdckcYbmpid^XIG]~_k|vqkawpx]_az[zmUOtfGcīwg[[TJIcmgiYAEF6CB0@PALEEF;>8*:H=NERW>COREBFFgKONFQY]M=HTUGNHSOKMEQ@JKCPEBKFGFK=<HTGB<;B;7:65:99::;<=@JSTTSRPOQQGC?=MKLNJEDGLPRTUVXZ\\^^^]]__YTV]aa^[YXSKMZ_V\\X07FNDEIBGMKJJKJHGIPYRICHVjjUO]aSPKILB=7:RUFFTguobUmjgvrhaKBOQJ\\UMNORL<979==;=IVP<?XbZLHA7ZYCBNPKIGA:1-)+@VRW[ZK?@<2-3CHCEMMB3142149;977:;<<<=?=8::>FJIA7554=FGCAFIECP[WQYeaUQXae[ORKAA?>;9;ADFGGGGD?EIHM^gebcbK<JbjWORQQYcdZMDBDFGHJMJ<4?QPABRNGLQKHOZdcTHLSRJDEGDCEECDFJGCABCEHJHDBBB?ALOD?@=RprcNBIY_[UG99@KKMYYLB@EKMIA>HL@888;>@CFF?4Cd`=/C^_J>=<>FQ[cfec`WRWVUWWM?;??><=@C@>@A@?BCDFHHIGDABDCABBBCCAA?<;?C@<=DHC?===>?@ACEBAEHGEIMNPSND@@B@96646>CC?<;;:9867:<::?<?NW]cde[USQJ=:><?DDDB@?@@<9<@>=:=AA>:9868;?ABCCED:E\\]QLPUQB66<?8>IA798HOB486;;??723;=;97<>4+/3329<84344547?@88B@?C;@GDCA>?FHDED>;=EONG=79<BF@56@JH>>BEEGGEDC@@?>;===BEEFC6-5DC:7:=>???ACFB=AGIVcWJK@<><3.5Mfr߫S2;TriLFEBBNHEHIGAFHDSɇj\\llGlA@9FZ0222111111223579:868;;9;;:=??AB?<;;:867:BHLJIKIPelSDT_^YU]ge_^`bVNJLRHBIMLPUK:.AskrQ7`eY[PJNawdSUZUKKLNOOPQQQSSRPONNNNLLLLJKJHGECDFFDCDDDEEDFHLRXZ[\\`dhjkga[XXYXWWSLHFGFFGGHHHIHFEFINTXZ]cefdbbbccb`^YUX[UIAABBBBAAAAABBAA@@CECBBBCCDEGJKJLOOOOPQQQRRSSPHB@@ADGKKLOQTWXYYXXYYWXXYYYZZYTOMRW[]^_^^ac]XZ^^``abbbbcb[NA>??BEKNNRXUOLGEEEGGEUjdPLNIHOOHFHFEFHHILRVPLT_`VJCEGFEEFEBBIZe\\POVVTWXUOYie_eplkkllfa\\`be]TRUSPSXV[^[]`cjg_WVabZW]QYa]boodX]a\\\\boplhriaa]^rpd[Q\\hefgeb`^\\Z\\[Xxgckt[AINFB@EHKLMPRKDCGIF>:8:;>?M^`RnfVcfSD@;:AKU]YOD@PWKMVRW`T@>?:9:;<=9<WggcWOPLFFC=;;;;<<;;;<;<=<<=<Soo\\?=>=<========>?AEHGFTSTJQլ|jMFHJKIEBHNzQDEHLORPLF@@DMa~jWTRNLMRURS[{yng\\Tg~nr}YYZbUHSSIKU]\\WWWXZWZLWXuȴ{vzyqixya]a_ZVQVhYï̼ļƻʳŽyvzvzȧƽ|ձŽλʮvvhZYaabo˻{tnzpfoaZda_fozh^WaicXYcjhcb^^tywrpthSsrfr`Qx{sxa|^XZj_iԵ{ncXURJAAVs~kgbMFF:>7-?=:KFOI><6.:>AOGRP<FIF@EFZb?XILTRV=>JRTDLIRMMQLUDPBGOHFKLFIHCGIIJ;D@E<;=33;7899:<BKUXTRRROHGIID;:EGKJD><BNTTTVW[^`b_][YZ\\YUU[_a^]\\^]TNOSVYuV/;LOGFHBFJLOTVQOOPOICDKT]olZUZb]OKIIJB;35<EEKUj{lX]rotoXaBBN^RZMFORPG959;98:>CHTR@OgSCGQD\\kPQRNJIGA>4.3;BOW`ebWJEA<18KNBBKSL75HL>56667:<;<<<;;;89=@DDFD;1.6@DDCDIIHHIJLUTVXVW^ceehfVE??><;@IONJFGKKPUUQWbgc_[[QITbaQUTMJPWYWOD?<AJMJLMG<?PXJ?JMFLSNJUbjjf\\VSPLDBDB???>===;;<=?AEJH?:<=<?DC?<<:JbmleWONHA9216=HRck`K?@EHGE@=AGDB@<::=@DHHAESJ64ASXLBA>>KZcdfghi^TWZ][XQC;=====@CBBFIE@??@CGHIIHA?>@BBBBA@@@><=>?><:BFA><=>>ACDEFC??BEEDHNROGBACE>67<<;>>;:89;;82248:;;;<<>O`egfaWPC95689;?BDEDB@<::>A@=8<@>9778;>ABEFBBGD;:KWPMSRSK>5;FCCIB>@BDD24E89>@<7:=@@>?A=541/014:<73345644<@:4:?A@BEEDDCFHIHFKMGDFIOOE<<=>>:57?EFEACEFFGEGLJBA?<:;=ADECBA:229AD@:8::<>AGF>:?DI[WCKL9<<:98=Zne~۠_QMdsY>4626RHACGGELNK[v͏ZHI<hBA;:pt522101111122469::9989<>=;97655699988;::@HLNLHKLJR`[[c]WW_qywwqcaVMGLZXJKQRW`\\E0)2;MlkXm[MPVSaÍcTSWUKKMNOPQRRRTTRPONONNKIHHIKKIGECDDEEEDEFFFDEGKPX\\`bhoqssrnic]YXWVTQJFFFFGHFHLJJMRXYX]bcdededbaaa```_\\VSTVQHEDBBBBBBAABBAA@@BB@?AA@@ACFHJJKNONOPRSTTTUVWODAAAACDCBDDHLOPPPRVWXZZYYYYZ\\YQMNTY]]^__bc_ZY]_```bcccddaZMDB@@A@BITZUTQJDBDGGCNbcPFKGDJMHEFEDFGFFHKQSQPU^^VNECEEEFFEDHR^^ZYa_^ZOLNV[RJP]\\[dge]\\ZV_e]TQVWY^UWb`\\Uapq_NMUaaajzpw|g^hhaafdbbntslfa`aaabqlch\\Xmokjhca]XW\\_]whdku|\\BEKFCCFJNTXUPGBBEHGC=:8:?JRWVW|S[h\\GB>??FMORLH@=J\\QIOPPRG78=<;:;<=8Bmqhc\\ZVOLF=<=;;<<;;;;;;<<<@9Oe<;========>==@JPicLXdZrǍfgxbLCGJJCACBBfA=IORRQRRJA<@SuYZ]ZSOPXaWYSX~g_[Y[c]f|XPT[aUQWMFQ^a^\\XUTWTw[I[˵douulc]VV]]ZWSVvh}Ϻžʻ¸¼qw|uuû¢û¸ҵģnaX^gpjtȸ~ul{y~{cwic|a[cagcwow{tjeifa_]\\X^klf`VVk~o|jam~}t}YceUdmjxo^Wvo{wѺ~th[ZVKD?43M\\srbf[K?6836<.8JEQIA:507<HMJLJ>H@@BBOgNLQNQLJI:CLUTGMKMOQRRRLPANNIIHMIJEFELCL8MFE=<>3/;7889:;EPTPNKKLI>68;;<>BFKB99=CLRUVZ^_bdedc`^]^[YXZ]_`^[_a_XPPVWXZ@1?MPIGGACDEHR[]]XJA@@BM\\__\\URQV`aM@FMKGA96513APYiymSRqs^K>ZH<@XWVECNOG>76777788:>QhX:\\XB?A<Pt]WTPNDAC;8:BHFM^hg]WOLMF3;OULEHOMD?KPF:4459=:6;CB>5359?DDCEGA1*9IFDFGIIKNJFZkXO^a^]\\TXfmiZG??>AIHIGFEEINVVQUbeZXVTVZ\\\\VNM_]UTXWTVRF>:?HMLHHJF@DID=>BCHLKLPWbkle^UOKC>>@>===<:736;>=<@DB979:<>??>;:=FTn|uZD><:6118>DTpvbJCJLMPRPFAFGLQMC>>>ADHHHE;:CJHFGGGDBER_flrtpXLW^^WNIB<==?ABCDDDGIFC@?@CGGGGFEA?@BDDDBABDA>=>>?==ABAABBABCCDFIKG@=BDDEKPJ?@ADC=7:BEC?<::9:;;98;?=987779?Shkic^ZO=137899:>DFFA;77;@AD=6:;:7789;<>?BCCFH><;>LVUTRSRPF=???EACLHOH;BO><A>:=CD@?>>@;4211367;BB:4357639A>439?ABCBDCDIIEACIHCCELUUSNG?=;74<GF@BGGHHJMPV]VF>:9<;;BGIFEA>>:5:BA:568::<?>989:=FAAL?566:>BBWgIjΑkvcRbhS=DD::A=6=BDDJQP_fuF;7^?<7,[D63011122223469:::<>@@BA?><:989<<:9888>FJJKJFIMT_c`a^TRbz{jf^ZWM\\fVT[YPKJE>>62:HOI|ՐoreVNMKKLMNPRRTTTUUSPPPPMKJFCCEGHJIFBCCDDEEFGGFDDCHS^bdgorprtutroi`WTSPOLFEEFFGHHHMTYWTTX`ca_^^_a``_^^```_]YOILOKFCBBBBBBBBBBAAAAA@@AA@@@CFHHGHMONNPRTVWWWW[YMC@?BA@@BCDEFKQRVZZZ[\\\\ZZZZ[\\[WQNRW[]^`aacc_YZ]_``beeeeedb[RJD><;<AOVUXYUKDCFGDBN`XEFHEFIGDDDDDEDEGFFMSTRTVWXODCEEDDDEMTUTW^ghcaZUWXNKLT][VX]\\TQRTYVSPNPUX_`hf[VQ[eeYNR[\\Ycv~kafheebagfecjph^b^[]hlb\\jh_aciole`\\[Z^b`vjelujY\\VDCGEDEIMQWZQHCBBEFFD?:8:>CBHEq\\PcgSG??CAAAACB@96@[SATZTI88<<:::;<=9?j|rlbXUUTJ<;=;;;;;;;;;;<<<@;>lZ;>>=====>A::?MKclUVkf͚{dXXgndXQGGJGGDCDKQ]8BJMMLPSQKC>DXq|raTW]VLJRcrmdWE`w^ZTUVUR^[JQU^aRLIGO\\`^^\\XTVVRX{WQialqnfcca^][YUW²ƿĹºȮľįsw|z{z{Ҿȹƺɻ¥ȳk`_Tpvltsmwydpi\\vo^\\Yhpu|cdq{sf``_aknmlpuobSMMMXw|lzkTaybPWYY[Uve\\[xǺwsjUTYO@84.1CQgle`U@348C;0>IILKA8835>JIMH@>C<BCB\\aKTFUMEKC>GRURLQKJSURUKOOJQNHGHKLGHKHMDG@QKG@<A8/;98768;BEEDB>AEB;2028DEDFD715<CIPTX`fgfdfhgigec_^^[XY^]]_b`^]WSWWO:0>JQKHEAA@:9DOXYPA?DFGPTJB?EPY^^Q72=IKC96557;DQ_nwlRSejPC<UU@CYZ[IAFD>97655666556<NYCMc[G8>GqdQRVN=:A97CNMKUba^ZUKHQI6ETQPOJD?<:66<@>?>AB<8<JM@205;?CCACIG;7@KJDFOOLKGCQs}igytc[XMHTdrr_JCAEIC;<ABBEJNLACDAENPOSYZSJJN_a^_`XSVRD==<@ILJIJFC?=<<:=GQUSNGIZlnfaYNJGC@@A?=>>;758>A?=@B=78::;??=<;<=PfxgKCABC?64;?CK_cUMU][]b\\UJCDDP`_RHFHEA?CMH9APSI@BFFJNHCGQY_a^KBNRNIDBA@?>AHJIJHDCFFDCBBCDDEEDC??ABDEAG\\YFDB?<?A??C@?EJGECBBBFKPQMFA@BCFHE><<=?;9:<>=<<=<:;;=BFIHB<;@A;:=J\\ejcWOK=7::9997<BCD>988;?BE@99:9;=>>>;756:CIE<<<7<AHRVUUOK@9:>BACIHQKJROB>89?CDEA>@>=94013588:?DB=:98879>@936:<<;:?FLPNDAFKMHCCHPQQPF<9845CPK?@DEFHNRXabVG:6:=<=EKKHFCEHA9:<==9678999;:97675<OG55547:>@9F=Íu~tH?EBDhlXL2/4;==?DNOUW`޲yG1S:,4-FZ;;531121223358<=;;AEDCCCB?>=<=>>=<;87AFACJGHIPvaJMU_btsvr^[YZn|d`UDFJE@<;:8<FOgsuhWXYwtXGDNNOQSTUUVVVUSQPPOKHIE@@CBDJKHDCCDEGGGHGFEDDO\\^^chmooststttrk`TLEDGFEEFFGHGJSVOMTWXZ[\\_a``aaaa__`````_WLFGHFDCCCCCCCBBBAAAAAA@A@AAACEFGCELNMLNRTWWXYY[^XJBA==?BCA?DMU[_`_]]]]]\\[Z[[\\\\[XTTX[]_abbcec[TU[^`ceeffggec^PFA=<<<DQWY\\]YPEAFHCENQIFGEEFFDDDDDCCEFFDEMTTPRUZ^ODDFFFGEM[ZXVUTXXRW]`YOPRZ^`UKVWTTTTOIKPUUWXX`haLEN\\ecXQSZ\\Z`jjecZY_c_^XV\\c_Y[_hkig]Z^ik\\XjoZPRdssj`Y\\]^adticjqdRRQECGJQVXY[WRHBBDCCEGFB??@<7:@LtJV`VJH?>A@=;;;<==<>JG=KIOP<6;::99:;;;8EV[cpqh_bi]D;=;;:;;;;;;;<<<>?7SwE<>===>>=ML<BMPMVTQ`la`R]UPRVab]QHHNVHFMXRbE?EHKLLKMOKD@BVd\\Z\\ZVRLEI\\qqodQ=DqeV\\TTZVP\\qkYXZYbaNEGNW]ZWUUQMZiPUaTNexiighiiifb^\\XRWɳǨtyutrŹҽͷǻúʩ}p_YupǿƳƹ|pkljv{oskWzvw^XL_q{}gQ]qtvo\\YXXWVcw~ujZVY_ssz}yxhdo|ygN[_egHPq][r}h[TQRI;48:<==>Rpxj`]L82CMECFETHKA8;45BHFMF:=<:BALa\\SJLPGCN>DMWQRKNJKUSRQEOONOOHCFJIFKKLNN>NPKMD>G>3>?;757;?=<><5>CBE85;@DABD<1589AIMPV]bffdgjjjjgc_\\]ZRQUX]^cc^^\\VVYUO49HSNHDAB@317:>A@?DIMTTH<=GOPTWK=236<?8002;GNKN_uoPV[iOJHP_LUb]aJ;:988777667887532D[<SjcOQFnnWSPF==B=/6IMQblhcaXKFLH>MLCKUI72322003;FFDFDCFMPE538;>?@>BJMKHGHG<?OUPJBHc{l`YWTJK^szv_IEFB97?DCCGG@;533=TZRQXRMKKSQX^`b\\QQYPB=>9;FMLJIDCA=;;;AOX\\VIDEO`ml`UMMNJCACA?>>=<>@AAABFD=9:;88<<8:<;:WpupUDFCACB>ADFFGHFBMcog^VKEB>=>Qf`PJORG<E]gPBRYVOB>@CJQN@;?AACGGDDBBBBACCAAFLMLKJECEECBCEEDDDDEFE@>AED:PVCEC>ACBBB@@FKHA=>>?CGKQTL@>?AABA><;=?=<;7448<>?<9;AJMKFA><=GHC=<BTgeM;>;9;:99758@@?<9889<?><7699:;?A@93028@FC?:5222:EBJDIK@32;A@DGIHIOTJA6.9HHDDCBB@>:53666568;>CFFC@B@<=C@66898679BMSQHGJIKKE@><:::;64307GOI@=::BIPORXUOH>;==>>FIE=78AKJC@@>>?=:8999;<=<<:9HT>78:998:=:+em寈r`~L78=UrpbK1/59:::CLPLF9fk2PF1QM@}xBED9322111335:@?<<@DECCCB@@@?=>@@?>>>DA8:@BFDGacJ>G^yrvu}zIJZWksdkjWHEA88989=>:<0bʠ}`ZZgnUBOOPRTVVWWXVVTQPPNIGHEA@AABGJHEEEEFHHHHHGEDGSWRU_inoqsuutttsrl\\KCCFEDDEFGGHKNLKQWUOS\\_`bcdcbbbaa`_``___XJAACDCCCCBCCBBBBBBBBB@@@AAACDDCBEJIJKMQSUVXZ[[]]SE@=;<AELW^ba^```__]\\\\\\[ZZ[\\\\\\[YWZ\\]_aabbdeaVQV]aceeffggge`WOJD><;?JWZ[]^ZNCCHIFEFGFEDEEDDDDDCDDCEGFDFKQRSSWaZLIGEGJJMUXXVPHN\\LQ]^TORTY][SKMLW`^[XTU[b`]_Ybe_OAFRff[SRX^\\[\\XVYPU_a[XTQXdkXZ_bec_^]cefbeqk`TWesund[^`\\dnujbdsypg]GCLT]ccdaVIECCCBBCGGFDEG<9>CgzRR]TB??;;CA>9:=:;ELD<<?BA?B=88::9899:;:756Ik|xviJ:;;;:;;;;;;;;<<<>9AmR:=>=<@C>`Z>O^\\RSRWd[vrJEECJNPPV`_[NHcPCMX\\YRp}WADGIKJGGJJHEDGNUX[]ULHJP_rh[PB=BTZU^d][[\\gq^`ia[d`PHLUVTSSPOQPbjQVbTQ\\_e_l֠uqlghg`]^``]ZW^ò®Ʃ}m|qr|rýȶͬųŶrdedYϜĮtehn~{zt~lVtyh^PKZwsmoYfujmm^elhbdkqu|{x|~zmj^Se||jgsvu_PataFs}On_ʻnYLNLE942;WM;:6EQwy}ygc[F8NOONA@ZIJA7:06GDDH>898<CEX_^MHPBIIF;LSPRRDLKNVOQJDQMKLMLFFHGFJLNOQFTNKRE?H@>DFB954:=:<?=79?DE?DGD;8;F=6EH=>GLRVW[adgkonljie`ZWVSPLQY[_c]XYZWTU[F:LUPIFBB=1/33/0:?ABKSMAAIRNA>=954441.3>HLMSTNM^yzHJMgYHMN`Y\\c[^G546676798679:89:49SM@NjlcF^sYKJZee_V;,9JRbtvrh_UOLJJF=BMN@4587440/6>@BFJLMMOLA98:9<?@CINPNLH?35AJKLECbhPPVY_^FQo|w[GC?;?EFDCC@9868BU_YS]^GEQTYVY_cdYKT_P?=?=>GJIKLGB@>;;:?JOPMCCDFNbdOCHMRLCAAA@??@AEEB@ACEFB>=;87:86;<6BcdUMA??><@EGIIGECC><F]mj\\TQOGD?;NaVFGQQB7RQTndZYH<=ABGLKCAA;=BEB;=BDDCCDDDFHIJKJGGGDAACEFEEDFJZlrhaf^ARvMHEBADHGC@?BJKF><=?@CDGGB<;>?>>?>===><<=:878;=??<?CJLHDA@<8BIIA88N`T@:887:;99746<;9999889:99879:87;@=86569?DDA711148<DKKKE6-09@@CJKGIKKD=04EJGEDEDCBA>64777439?@AHKJKNLC>B@879:97766>EFFJF?>@?<;9976522225<=:7621?MPLLIAHOJEFE=49<;3008CJKHGC>?DA<;:8:;<<><@TI8:::9987:8:j,M7[bB@;CflZI9026:::;AIKHC2G=RawI@oGGI=322211139@B@>?ADDDEFFDDDA==@CCBCCBABBACE@<99>F_uqyn;ETPckR\\zoT<636998;>?=CӚnkktyoukOMNOQTTTVVVVVUQOMLIEFEBABBDFHHGFEEFHIIIHGFFILNOV`emprstuutttsog[JDFEEEFFGEGKJHLOKGHMW_baceecccbbaaa``^_^WJBCCCCBBBBBBCCBBBBBBAAAAAABBAABDFFFHKOQRTW[[\\[\\[NA@BGNYab^ZY\\_^__]\\[ZZZYZZ[[[ZZZZ[\\_``acdef^X[`adedffggggaVRRND=;;BQZ[Z\\\\YNCEIHGEEFEDDDEDDDDCCDDDEEECEIOPOV]\\WSKEJW\\ZXSQT]bethb]XNKRUYdd_YLGMY`a_\\_``_^[`qpdYKIBWa]USX_]^a``cfkd[\\YUOYeh\\_\\Zacbbdb]\\jorhfbhrutmgefecb]pqsxjacnoKBPZ\\\\\\\\YMFGFCA@AADFFFFG=;<K`NdfL;=<<@FC?<==<;GQJ=8AIB48=98998999:<=<;8@RkiYF:;;;:;;;;;;;;;<<==9Onyc<:=<<@HCP`TAGYgcXVZ`]`c?X_QLKMOPZ]_SKcJJ\\]YWQWrdFFIHIJIGDEGGGHKSTYdVIKPONbcP?:?CLSXamg[]l|~bgvkbfaUORYXSRQSRPqIPdUVfe\\QŅmssuthXSVWY^a^hïĬ²lw{~yx~ȴΰƪɭ³˽raXf~oųћudgqzy}kVsv|flNT\\|xqudoekttfh~h\\djouyjXUokGMsmZan|[Ka}^xH]ýqTLPK<96<::_P52+MFJppf_RJRIQE8CWML>584@H?B?1765>IP^cWCNF<OM7ANLFYP@SMRSJM@IPLFLLPKDEHGILNOPQPMKSDBHCIELC<97:=:>D?@EGD=BPM;27<D<8IQE=CRYTSZ^ahqrokjiig^VWZXPNSVY^]WSWWSQYTDRYSNGB?7/065-.:??;@C?;@HME711244331=SdjcTPSOMaxJ:>WcUXRcbKNMTA355556788778878892GaO4C_jHPsX:Nszq`JEOSUenngidYTRI;;ML<:BD:4235316>CHMOMOQPJ<8<:8=CDFLNNOK>439>CHE?H\\mtthQDJNUbUD]loxlJCKGDA??:988767CSWU]bU@CUZ]UU]iiRBP]M::AHLLHFLSMB=<;;9;CJKIEAABFPL=7BJNG@@AB@?@BCFEB@@?>BCA@?=;;:<>==FSH;7<@==<AGIIFA?>BA>BN\\figkiSGB>FPIBEIH?8Kry_cxoaYG=@B=>JOFCGHGD@;<CHGB?>@FIGEFIKMONKGDCCEFCDFFFG]wfWFHCDHMNI@9>JPPH@@ACFFD>99:=@><==>>=<==::;:9:::;>BFHIHFEA@FMNLC;>EF==A878899:9989836898889:=>><::9:<=;=<:<@AA@94540BLSSXP7)/AFC?CMNKIII>63DICAEEEDDDEA8787877?IJFIMOORPG?=<9:778776457?LTOHB>>=<;;;840363.,,,.0.0<JMLLE<FURPOK</7=<4368>FKJIIE@><:987679:9;IQ:776658:=<*t30Cm8071395?diN75877=?>>?BBAA81B\\mQ@^xF7QYBG>32221103=BA?@@BDDDDEEDDCA==@FD?AB?CHKLKEBDEFDNb|[>JQJRdRS{}?&.58;=<=<8wxrwytqrdMMNPPONQTUTSUSMKKHEBBAABCDEHGGFFFGHIIIHHHGHIKRX_empqrsuuututlhdPDEEEEFFFFHHIIIIGFJR\\aacdeeeedbbbaa``_^^_WKCBCCBBBBBBCCBBBBBBAAAAAAAAAABCCDDDGIJKNVZX[[[^\\J=J]a\\RKNX_ac]^]\\]\\[[ZYYXXZZZZ[[[\\_`_`ccddbca``bddefgghkgYMNRLA<<=HUWWZ[[YQKHHGDDFEDFFFEDDDEEEFFDCDDDGLNOWZ[YYTHL\\bXRUTW]__ja\\WTOU[ZWbpqh_VHMY\\VWa_YPMWbgj_SSQPYab\\Y[]^cfdchrtiTMTWS]ebbc\\Zfgijmb]\\bgrm`r|ylkfjpmVAQWl{lbaZhxiMAKY]VSLFDCGDCBBBBCEFFFG=;Br]_ncG?ABDDEC@>><>AFRXB5LH?:9;78988899:;;;;:<:CpU:>;::::;;;;;;;;;;<<=;=Uqzf?:=<<@LRSLFC@FXd]TT[^Qh{N]hYIDPRQV[[TLVNT]VOMMMdgIEKJHJJEA@FGGIPSLX_RLSOHDXbQ@AGIOW_cif^bvoo|slhd]WY]b]SP[ZN|~TcW]efXaҠrpttrrdTQRSQaqhhüʺŮx~yî~}x|wвÜ˯ǻĲ·{vm]VYӸѢǩvgouv|hWxv}iu]T_z^ihedw}|nd\\QYsvofY`~hNgu]XVE\\{aRkTELK;387A?<VR:70II;8pqh^VXRCA5;FPLO<4=BLA;@51504CNYcfHEL?AS@3II@HWMEYQULLC;MJJELMMJCEJJLMNNMOONKRFFIGKHKC>;7<>>DFBAJHE=BKE<77C@83AID@IVOGNWYZakniddfff`X[]^WPORVZ\\[WTVVTRRPTXYRG><62265/3?FC?<=?85;@;5344447;Qjspj[NLROOcxZ25Ac\\TMajMEESA4323567767656756862AXL6<SKGqiDUqskpod[SNNU\\ckia\\SG>FOOAK^U6,134623@JMNNLLRPI:9@B:=@CDILPPID=9<?@A?<;7;Qkq`G<;>GOCKZWgmUNXM<:>9689::=75HWSXSGBFTc^CARh_B9BKD46AQYPIIMVPC;;;;:;ALNLMJLOPMMGABGHDBGIE@@A@@BBBA?=<=@@@CFGFDDDEFC<<?>AA@@>@EHFEB><=@BCHYmwsofTGFEGFCBCBCC@EViromtkM5:ACACHGCBHPOE??BCCDC?>BEHHGHLPVXRMJIFEEDACECBACOhYBIDEKMLH=6<KRSN@<<BLPKC<:;=??==>???@CB;9:9:;:89=@DIIHHGCDMWSKB==A?<998889<=::>;6333789:89<???<9:;:<?A@=<==:9?=7568BKJPWN<5BPTK?CSZXIGI76?I?:;@?>@HJJGED>9;>@DNUSRRRSSSF?:;;<602676748EOQSWRKGB>=<<:4/28401/-.//19>CFHGFJUYSOHC?LQI>69AEFIJIJKF9//37776777AUF0544446DO7FU.60]}`:73629547PWF=CE;7<?B?>>8;77,caHWQEwƝPL?8~r:C?322211149<>>@ACDDDC><<=AC?=@A<8:=>><=CC>DJKFEOlYgC@LMJLNMOtj74;=>?>>:>̝mmz|~qw~JJKKKJGIQTPORSLIGFB>>BCDDDCDFFFGGHIJJJIIIHHIMSY_cmpnqttuuttslaVKFFFFFFFGGHGIIIHGGKQU[bddeeeedbbaaaa```^^_YKCCBBBBBBCCCBBBBBBAAAAAAAAAAABBBBBBBCCDJPNOTTRRMLWZM@CQZ`[ZZ[^_^]]][[ZZYXYZ[[Z[]^``aaacccced`_acdegggiklfXNNOJEA<EPMMUYY]ZPLJJIEDCEFFEDDDCEFEEEEDEEKVRPXVWZYYWQNSWUTVWVVVMPPTZ[\\ed_TSdouwoXPZ]ZfngaMBU\\QUPHQP[V_da`a]VSWZ]dmoj\\P[a`acda^]biinvtkg`[`pkez}qmflvnSANdqaUNcoRBAP`UJB:=ADCCCDCCCEFFGD:7PpTdjVHJGCEEDDB@@@BFGS`XTYC37996898889::::;;;;:6<mS1:<:::::::;:;;;;;;;<<:Ffv`?<>?=AZcWOKIGHKUZNBKYYck\\J=ALSRUYUPKMSZVJJPQOO_RDHHECB??AFHGKWVMXXRUUJDDR^QIPUZbdhkjc_p~~}rqkd`\\\\^`YQOXVOV|bZced]tzܬ}srp`SabSPPQOcq˷öȰŠ}n}||xyָǲƵΦЪɿŸÿna}pbXScpͿв}osylz~}h[z~n}ngRPtbUgaVXoz{vj^Yaouuvz|tidk}|KX~mS^ƻqTHIK<46=:?><Ra@;FFLE*=g~ssi]Y]N>/2EENHN>4CKK:;?;D2,9IOalb=IH;LQ.=Q>@ITKNVXUES:DKFHGJOFECEINIKMOJHOPKQGIJJMKLD@<7?>GIDEABFG=AID@=<GB::??AJSPA?KRTW]aec``cceb]^_]WTRQQV[\\WTUWVUSTVZ]UG<9544655>HJGC==?:.023445544:Pmpc^XKABFEMfxf//4TP=;QhYGBWI61/2567666555545995<WeP65>@buJ<OvqfgniWMLMKP[kniaTIBFLPT_g_>+022?JDFMOPOMLQM@9;ADA??@ACKSRICA??@><;9;63Tyqn`MHB;>GL^a_b\\RRIBD@8989:9833K\\QEBCDKbkS;:DVK8:??<5>JSZTMIHRRD<<==;;?JNLPX\\fecbUECDBAGOPH@?B?<>@CCB@>AC@?CGJMLGDEFB>@@??ABA@@DHGGE?::<=<DXlz}kRFHMLKIGCB?>BJZinnoosx^A8;DJLFBCDHNLB?@BA<@HILOGBEHJNU]^VPNMJGDA?BEHIHB@JfmCJDEGHID;7>JQUP@79@JQNE?=<>??====>?AB@>;;;;<:9;=>BJIGJKIHHIBAA;=BB>889:;?HF;;B=101358;;74:;:898889=ADB>9::58>?869C939SWKHJQRWSGK\\f]I?>3<KE457668@MQRROLB<BGHJQX^YUQTUSC@>;==;64667758AHMQUWVSLC==<;4/3867:964421357:;DPZb^MC?HU\\_ZN<5>GJKJHJMI;126::87646NY:2122224<F3~4261.96685656235=@>FFB;8;=??>=:<970DpZZbi>II<d9<>6422213579;>ACDDDEC?>ABEGB?=9898;?@?=>==GKGFFFjjVk|ooeJDNQLJKJLKrƳS>@@@?>:HscpwHIIIIGFEJLGFJMKJIJKLQVYXYWRMHFGGHHIJJJIJJIHIMSW^cjmlosuuutrmh[KFGFEFFFFFGGGHHIHGEHQY^^_acccdcbbaaaaaab_\\]^TGDAABBBBCCBBBBBBAAAAAAAAAAA@@@AA@@@@@?ABCDGHDCFJLF>?Q]^VTVY[^_^^^]\\[ZZ[[YY[\\ZZ[[[\\_`bbbbbdea^_acdffhijjjh]RNOOKEDFGEHRVXWRONMNJCACDDDDDDCCEEDEFEGJXf]T\\YXYWWVTPQUVVWW[eoj`cfeddda\\UQV^gjbORYjtzxrcPSVULEEDVPIM^baeeZOHMSUenkjle^^cfdcaa`cehlqpnj`[ai`txpgip^RBOjgTOYr}XABCaWG=:<ABBCEEDBBCEFGG:6yVXafRLPI@ABCCBA@ABBDEQX[]N>9::6898889::::;::::<7;IC::;:::::::::::::;;;;<:>_iL====;<Td]UOFKNMMVH9BS[_ӂOMKJMSRV_]PGFS_TOT^iWCWmWEDA;99<AEGGKZWOYYSYTFBCJOQUX]aekorqj]t~uqie`\\acXQPMKKNIEsa[ccdjmaQ߼thmmm\\Qm]QPPROdԷƴpwtyrvͮӽĵԨ̺ʻҼc^nlaV^hƿμws|dmszj`{|tkiZ>c|K^eOJXf{zpwz|}~re`hruohbg|pb~pOSzrZȺkWHGG?0>?>C><>H]@;GFMQ@<<[rrlc]_UF57GFKAGA6>FC9<=YV,0FJRetZ7ME8PB.KR9>KQISWYJEL>OEGIGIO@BDDKLCFKLGGOOKPJLKMOKJD@=8@@HIEFA@FH=BGECA@CCD@?@MTQF<?HMQV\\ac`^`bcdda``]XUUUPRWYVTUTRVXUV[`WG:8666767?HJGC>=A?6,,0466645?UWJEJFA;?9:Ddx{>:HSVCFSlSJFYI61.02566655554469=GPV[ZL5,8`}eZ]uwokdeTJKMOQPNipndVNE?JSXejf?+038J\\[MMPQOKJKH=9;?BB@=>?BJSVJ?=AB@;788;5;\\q~yni\\VMSdk]KHNHITO<9DA7:953<P\\PA>@GS]YC79@IB:<?AEMYVUaYI><LSG8:;;;:;@KMOTZ^fogO@==>@FKNIB@B>:<@FHFC@CD?>@BBHLEBBB?>@?>>@@?@>?GKIC<:=>>ACFXvwWAHTXRNNNQPG<>Ml~xwvt}}t\\GEMLGGFFHE><=>AC@?BMY\\TJIJKOV]\\UNMMJGEB@EINSMGPlnʴTKHA@CFC=9<DOXVH:8;>DHD=;:=@?>><::<?@?>=>>9789=ADJOLIJIKID<=A@;<@B=8:;;8;BA;<A>413468;;76565246657=AC@;7763:>;768>5.8DRHPVTRWWOS__H<818AH914515BOTTUSKFFDHKKOX]^UIDJLG@@?:>?<@B776663=QW\\QSVYVM?=<;404865:<::970/2334Cazu^J:9GX^^^[M@?EKKKJHHE=547:98651=UJ8552223573TE045363;<7453223454=A?;98::<>===<853/=J_f@DC>MS5=7322113459;=@CDFFDCCHLKIHEC@==@><>@>>>?AHMFEEET^TDO{up[NMS[TMJLKEKsԳc@DCBA>BUWADfHHGGGGEEGGDCFHKNPSW\\`cddfea\\RJIHHHHIJIIIIHHIKPV_dgklptuutsqj`VLFFEEEFFFFGGFGHHGGFEMWVW\\`bbddbbba`aaabb`[XXYQEDCBBBBBBBBBBBBAAAAAAAAAAAAAAA@@@@?????AAAB@@AA?>CNZZOHJRYZ^_^^^]\\\\[[[[[Z[\\ZZYWWVV[_`accddc`[^bcefhijiijg^RQVQJFCECBFLQRPONNONHBBEEEDCCDEEDHMKGGKWfeedd]XSPTQQWZ\\YVUW\\cic_W]^`aWMT```][YORXivmkoaW`XURNWdm_JQYalldZSSSQReslcb^V\\^ZZ]]_____``dhf^XahnzqfvifaTQERejkZRZi~x\\IGFnaDBDCBDCBFED?=?BEGF4ToV^faRNQJ<<=?A@BA??>;:>>Hfs\\E?=88888899:99::::9;<98;<:;::999::::::::;;;;<;?QM?==<9CNen`SKBISUPVH=CN[^hrHTVSQSQUjwcHJW_YijhiYGHdpZF@@><<AEGHKWWTXZWUNEBCCFQWWRXj~{syrjf_\\ddVPQMIGKK?<`o_\\aabcbXWxZukhtj\\kTPQSUUeӼɨȖyqtmtĺƿ̼Ѳγίթΰιϰȭltd^Yj͸äzu~fptxoe|syyfrCKQMlVKV[b|zqpuz{und`emsrh^_l¤wr]KystZzȼzw[E@>7=8D=<F7::@R>7@GMNI=/Birspc^[YO<IGE<@C89B?:8;eL+7ODVgsQ9QB;J14]K<=QQFZ\\V;J@HN>GM@GJ>@DCKF@EIEEILKJNLONPPHJEB?:BBFGJDCFMF<DGFED?A=C>=EUQHB?BDGNTZac_]`cbbcccb_XSTURQQTTTTRQV]_WN^\\J98887987<DCD@>>@HF7/179><67FJAAFE?>>?93:_ufcm_ggcXkTQSY?0312356555554467;AB;9?KZL5:nsWfd\\GELMTTI>VsveWXJ=KVViva?,09GT^aUNNOMHAAB>:;>@AB?<=BISYW@7=BDB:77604Y||nwzTGNWRD?LW_^G48M`V@>EEFSZNEEKOI@=<;;;>;8=BHS`g^Zi[A87BPWC6876545DQTPJUpoP:<>=?@BCGHB?@>;=DKJFCA?>=<<99=@>>?@?>=<=>>==>;9GWN>=ADJPPD7E]^TVbmkVHLV]b_QCGauwho}YEGFHJGDD?9;?@ACB=:COVZXSPMORWSNJJJIGFECFHJMLFFNioȻTMJBBBCC?;;>GRRA6=CGPRB:>DFC@>=:88:=??A?;8:@CELRVY\\VKFBBEA<?C@<<;:;:;;95234777;>==;::;;:86552224637?@;654559<446533418GJXWSTZYQTWJ7310BI:,6:73;OZVVRPIHPNFFIOX^XM?69<8;>>8@F=>J77777=LX[`WONTVQD::77::7305<>>?=414430H{_H@;EW`a`]YTNKJLOLE?97887997634JR;5;94445672z-0357=?A?75401458:>?=::98:::;:9;964303Kde{Z@CCAOn3:8221113458;>@BDFGDAAGLHDDHKJDACB?=<>?CIIJQPHEIHB@=AhzuiWV\\ZYRNMORSNuϋDBIGHIINVRCEt~|}}HGFFFFEEFDCDEFIKMPU\\ab`bfdcb_VOLIIGGIIHGGHIHIPZbfgjmprtutssk\\PIFEEEDEFFFGGEFFGFEEEHLS]aabbaabbbbaaaabba]URSTLDCBAAABBBBBBBBAABBAAAAAAAAAAA@@@?@@AAABBABBBBAA@EJLIFEGLSX^_^^^]]]\\\\\\\\[\\\\\\\\\\\\[[[YZ[^`ccccfd``abdegijjjihd\\UWSLJEDDBACHKNNNNMOMGDEFDCDCDFEDKUUMJKP^ggptdWPLQPS[_^ZVTROHKRQNY_ej^RXdffdbfgj_`ca`]]][PJSRasi[MXSUjj^Z]YRNLSei]RP\\nbKFQVSRV\\^_afii`Xahkxk`}zkhaTOG_mea^bn}}]OUdjRSOLHECAB@<99;>EIB9Y[cgYRNNF9789;?CCCEE<9<:?_sUF@;8888899:99999:99:;:::::::889:::::::::;;;<<AD<;97Ap{lhf\\NHGRWWUTIDHNIILYZOPQQQQQPbzwPujXWyo[[UPJNbcL?FMH@@EGHKVTTXWWSKDBCDFIKLJZvss|sj`WVZXQNQOMKIJNNJPX\\``^``[`_ewckpTPSUafpخ˜ź{o|nó˰¸Ҿ˿ƝתӬ̯׷īǣq_Wm˳ĩ|~wlwz{uf|hycyaJaCY`HTeoqtsssu}}xsqmidabeijs{d~yh~irieνs{`RC936JEE=>E351?J74CIE:>FSURYvsu_V_\\JJDE;>B=CI;:6?X65=V@WikDBKIAD,<q@B<XHCdbO<I@GC:IK9FD=>BDG?=BC=DKJGIKPTQTPFJFDA=DFDLNBGKQE@FGHHEA@:C?@GLIB@>=>AFKQY^\\\\_ba^`bcb_YTSRTTRNPRRQRSZ^ZNPUMC==;:;;;=??><>?@ELF61;EGC=BMQU_\\I?>>@@3>^quvufflbK\\ijdgN;<7445664444568:=<5./-3LSANVakaTPPNNH;/9R_TMZ[QU\\ZX[H3+/=QYXYUPLLJE=<@@<;@BADD>:BHKY`D25=EHE=9984OeXcwrN?ADFFGLZ^M77?E^|uUXfXQXNBHWR<59956<II97EOT^f^NKE<;:9GhrYJKGHH>A^^JF^zf@9GKHFC@>?>==?>;=EJHA@A:69:98:;;:;=??>:9<=<;;=:;J\\TEEFHQVNA;=?FYnxvdG8BW]^igN>EYk{n\\bu{QBGGIIE@?A@@AB@=<<>>?EOTSQPOOOKIEFGIGGHFGFIQVJB\\wy|vrCKIFDCAA?=<<>CEGVdkjh_QPWWRKB=;:::<>ACFC=EW^\\ZX\\aa]RE=99;>@@@@>;::;<<;733111106@HKFA>;<?=965430/20/286423444203553355;DJRVSSTMGIHA;42=LH4);GF;;MVSSOOMPUQHCELQQMG?63259;:5=I>699997=TUFSc\\ROQUXO@?DEB:3103>EDB@955645aj`XNFKW]aca^]\\VPONH@84479:88765@RD47=;55543,\\:3347:=><97555777;CGA:9989997776653245DYFNQFAELR};:8221113358;>?BEHGC@@DLGDHMOMFCB@BCA@ADLSX]YKDHJDCGAMp~jPIRZWSQPQR^q\\id8FIKORUQHGFAf~{GFEFFFFDDCCDCDEEFHKW_^]bdbabb`[TOKGHHHHHHHHHLWaeghklnooqssrhZLBDFFEDEEFFGGEEFFFFEFFM[`^^^\\Z[^__aaabccba]WTNOPECBBBCCBBBBBBBAABBAAAAAAAAAAAA@@?@@AABCDDDEEDDEDDCCBEGILT\\_`_^_^]]\\\\\\\\[\\]\\\\\\\\\\\\\\]]]]`ccccdecbaccdfhiijiihd\\URPMIFFDCBADIKKLLMNKFFFCCEEEEEELVZVQNNQ\\mxn_^ZRRTZ^^ZSPSWWNJKPVY^be`YYUPZecdcdb^V]c`e_NIOZW\\aZUOWVPei]agXNLIOZ]\\\\alviPKS[XVS^fjqnnng]^gmlb_uzlih^RFdqfa_iyaOduebNDIHD>989;<<>GM=VdQbg^SPMLB866788>FLQN?:;;6Cks_J@;988889999998998799::99:::998999::::::::::;;;<<9PvnbTFBGSWNFGIJKNMRUBVWKIILMONUdlWRSaXO\\UNPNMRL@EPNEAEHIMTTRUTSRPNLIFECCC[zxdvot~{vreUPPPOMMQRQPMKMQQMQZ_^]embcsgwjghg_z˭ּɩźzĲϫȿıΗt߿Ӫ̰Ͳ׷Ⱦt{{`\\_{oɻĺznqls}xhz^|qj{hsBOSN[m|}vsuw{~}ysqkc\\XVZm|]oizeVͭymsxoMGL=2BRCNHFD3-0;D40DIA=>\\qe:6\\q~gVW^SMBC;<@EPM;8AIJ.?EbBUi`?EEVEC2Wh9HGREMecLAAC><=KC:C@=<BD@89A>:EJHFFJPRMRJGQKJHDFGHRKHILQJIEIJIHB8ANIGIEC@>87:>AFIPUXY[\\[Z\\^]]\\[ZWUVWRLKPPQSSTTWWONPLG@9:>@@>=>???;::EH;19FD@FKOT]bO<;<>AGIdumctofWcfMQpl^h^VTE555564357;<==:5443'3KHLntT|wfqnphZTP>1126BGGVfc`d[?4421/@RUQNONJGGF@=AGHHHGFKJ?;?@?GN@88;<@HJIED?Kpp]UTVXTC@DBBGLLQN@CNLCAY}|myWVUCBMF:<<;BNVelZFINPU`[C59:;:7Dl{snlbfpdP]]C=RcYKLLMNLH@<:759@C?>AC@==?<9669;;=====>><<;:;;;;<ADKTQJGINQNGDB<:EZotdM<2=V]Z[VH<:L_bfgd_jj\\CBIKJJF@>BDB?<;;;>CDAAFNQRPMHGIIGEHJHIIIIINYXVax{|{pvJGF@===AC?=>>>Gfystxyr]SQC9<<=<>?ACFDIburj_MNVNC;899559>@?<<>>>=<:524651//259BIGB:7<CB=7665421100332//00/-0112229>?BABTWNC=?@@@>5<IIB70>OQE@LQROMLPWZURPMPRKFC@=8478<=67GG527976O]F1KZXX_^[_[OMQLA71201?GEA?=::62Cjg]aa\\SPX\\SR_edcb^VPI@97435899775;MJ4348=;8545Ab)36789;;:989=AC@<@EC<9999998887764566:JM7[ݏKMGCD<dI87322213357<>?CEGGDBBEKIMPMHFEEEEFFHHHIUaejgOBGNNMQKDO\\PA?FLT\\b^TR]o[Xpz]?FCV`^]O?DJFUEEGHHGFDCCBCCCCCCDGV_`_cdba```_\\TKGGGHHIIIHJR^aeegikmnotrkhcUF@CFEDCEGGHIHGGEEEFEDFMTRPSRQUWXZ^```bddcb_]SPLIKFCBCCCCBBBBBBAABBAAAAAAAAAAA@@@@@@@@ABEFDEFFFFFEFFGIKOSXYZ^a_^]]]\\[\\[[[[\\]]]]]]]_`aabcbcddcbbbbdfghhhiiiicYUURNLJHGECBEEEGLMMLIGEBBDFGGGHNTYYVQNKTqs]_f_[VT]_VMHNQP^iVNYWVWSOORUOHZhifVV`ZVaknnb\\XX[^ccaci`Z_ri\\dbYOIEOVRXhy{woc]_epqa^cmyolkkd]eibZ]}phifXGcrdc_i{dIwnkF:KLE?88=ABBBIK;~MOfaSQOKJ@6567966AGUN:8==:<FbpR::98888999988888888899999:999999::::::::::::;;<<>cyqiNGCCEEB:>JMKLSOMDHNE?AIPSOPUXQUJYQSsaRWVHEIECIHEBDEJPSQQROOQVWQHB@CDCdy^Qd~~mqeck[NPQPPNORSSSQRSONOPW^^djr_ajǹľˬĿͯԼϛt۷άȹֹ̬˺xs`nXrvhòɻzxz^n{}q}Zswgzt\\OlcZc_lw|~ym`^adoxy{|{wfPCG`uQTNXojnraPAGM>FL:TQLF9/28@81:AKHNT_b7.?\\umdWcVRMA49CJQL=3NI?3COhAUiP>HPTGCDpG?LMKK\\Z`IAA@:7DK?;=;=<B@877?>9BGJEDIMNINGHRONLJHENOLOJQPNJFLKGC=9ISMCDGFB:557;?CEJNSVWWXYZ[YWVWYYXXXQLLMMORRRQSVWUQVRD98@BB=<=BD=7006??66<72>JJPXO93;;AANhubxoaQdjOMdHHeafkT51655547;==<;76;:5.HNDl~V/@\\ksua[O61<A:@HFNaikgP7.3679HVSKGGFDCFHFBDOUPHHOPE:=B>76:>BA?=?IRRVXWKCOOHFIHFE@?CA@DHMPROMH@=74U|qXPHB?=<=<F]kmt~\\CHPW\\WHA=8899=Xt~ygbqxaSZO=?GLY\\MGMLF?>=<;>CFEB?=<=>>?>858;;;<>@AB@=<<:;;<<<?BEFHMPQRQRUQG@AGVfg\\WT;K\\`]J<=>=CNWbe]XOGA<DLKGHC@@@@>;9:?A<;BGGHPVUQG?BIIFCBCEEHLMNMMMZgdn~gboe}CD:78;CD>=?@>CV_empt~}aQMLB==>=>>????I[iig[E??71/3<=834:@><<>=;:8523664/015568;;941:DC?:77655556776210000/0/./16>?=?99NVF9;@A@?><EF?<7=LOOPOOOOMKKXfg^]b^UYUE@>>=;::=A:3DI96673CYN85BLJRci\\VTSPKHF;0/01;CA==@?:50NwexlY\\_]ZLBMW[_a^VNH>76557999967EM9/657??;95/w05689879<86<@CIGBEFA::<<<<<<<=??=;:<@BBBA=EոosvtkT;Nf15433233237;=@CEHGEDCCCIOOHCCHFFUUD?KYiz~zwZBEMNKNRL@?BCA?BKTZ[WSSTPNE=RCIQgib`WQSMGM_oxyrhdXSUi|FGHHHFEDCCCBCCCCBCFR_cacdb```^\\ZSIFFGHGIIJJMT\\`dffhjorsxpa\\ZNB?CEDEEDCCCDDFHGFFECCEEEEHIHLRRQV]`accdeed_\\TOMGHFEDDCCCBBBBBAABBBBAABBBBBBBBAAA@@@@??@ABDEFFFFHGHHIJLNOOOW^`][Z\\][[[[[[\\\\]^^_``_`aaabccdeddeddbceghhiiiiifa[YUSQMKJHFFEBBDHJLNMHDEEDFGHHJPVXYXWSQP\\jikcY]XSY\\TGGZe^\\ic[^_^_WQRTYYXajihXW_[]hopgb]RJILQYchnnhcdac```UEANYTRZironmcanqZZiqfbdhe^]\\[]_vnge_Mctdb\\bnprdD|o=?RND?::AFGFBH?UaIYbYRQNKE=8678:8799SR72:;?GFakH69988889998888888888999999999999999::::::::;;>=89FOK\\vUGR\\N>:;>aVNJDJHB>:;<=DNTUOKMOIg^J_Xak[aXC>DHHIFCAAAHRTPPRMLOUUNFCDFFGMNIGTs{rphhbQR[SOQRPOONPPORY[WQMLNRYboriVbŰƵ̳ʰ­ȸȿīȼҹȯ~ܰ˱Ǡֻ~Org_g~ƽzdx~~Zkjuti{\\[ysrcT\\uj]`[]ku}}hTV`lxuCEa®jhniQTO4EJAD4RSRU:7/;;;7A9M?QAKP@@ABT_ke]`XVN99GOQM;>Q<A?D]]>UcEAZTGGHZi6GJLSPXG^G>>;>8DE;9<9<=A=4978<;@GKBBHLKGHDMMQOMKHIPNUOOWQPEGOMC=8AMOD:@HLB54446;?CHLORTTVYZZXSPQV[ZVTQOOMKKOQTUST[\\TV[UE??>;<<>@?62//16:9761.5:DNPC8;BFQNPn|s`vi\\V[aEEcEGeXV]Y@14665459::::<>A<:DLDgkO<3SrMdtp]WF12?D@EI?I^gj_F955:DOVWMFA@??ADGHGJRSH?GTL;8@GE<68AAAEHGIKNOOOJ=@LK?=;<==>@A>>?CJNOONWirj^f{wS@C>;?<;@Odp|rJ7IWRRVTK@889:8@_yxYObum\\aV@FKEReYKLHA?@ACEDAAC@=<>???>;:8889:;=@FGGC=:<<==<:;@?>K_SECGLSQHECCKV[ixo[jgbdN:;=A>=Ne[D@=:98CMJDA>BEB><=<<?>63;EIHOYVI=<@EFJLIFJRYUJLPXaehjpubRcm^sBIB>>?DB===?>;;DZaRNUYUTJCBFKQC>=<;><99<AFOXWPD;8;9:==<:8:>>=;:753224;>8112599;96564/7><;:87643468;<;98865544545:;=;;;77@E;6=@???AC@:;:6@SPMRQNLLLMP_mld`eh\\Z[I<@B?=<>>?;5=H<8756IL:89=DCG[fRDMWRBAKE4-05=?959?<78CTzhdbTE@;<>@FMPPMEA?><88977:59KF2399;@A>93FJ.667778:=94:>@DA=CD:7?BA>>>>?ACB@?=?DJJCGWaoxfkwKx62310111346:=@CEHHFDCACMMKKGFI>A[VH@GpePQNDEKMKMOE>CFCAAA=;BOOGFHHD>MTIHPhp\\NT\\^SHHIM\\f_XRD<?=WjGHHHGEDCCCBBCCCCCCDR``acdbaa`\\WNGDEFFFHIIKKMPU\\acehkqttxrbUNGA@BDEEA>BNUPHDCCDEEDDEFFFHGFKOLMU[[_bccdee\\RVLIKDEDDCCCCBBBBBABBBBBBBBBBBBBBBBAAA@@?@@@@?ADEFFGIIIIJJKKKLRZ]\\YXY[[[[[[Z[\\\\\\\\^^```ababbcdeeeefecccefghiiiiihe`\\WTROMKIIFDEFEFEHOQKFFFEFGGILRWWVXZXTMJ_txaNTUQScbMO`geVRZ\\YZ[\\[XTR\\gffhbc`ZWTVchb^\\SLFAGQXaZcad_S[hlghaOEO^_TPYdhgdccqxvq^[ejY]aeb\\ZY\\bhyyrfhgSbqa^TPRNX_:_RHx[6HXN?:9=EKIC:>:{}MVf^WUSOIB:866789887[jYL=;@Sb_G4698888888888878888887999999999999999999::;;;;;<@>?=h{nPBPlr\\B3LxPN@FFE=<:=CLOPTQKMGBDa\\c[_x~fY_UACFJJGC@@@@BKONPROMNSSLIJJJHFAAFBQy}tkOU~bUKORRQQRQNMMNMMO[]TPOMMNUenlbXoĳǹĺǯҶкµĬþ˵Ϲ߯ɼѽɸ^|dqr{qz\\}h_sna{b_pkwwgjrw\\[botqlpod\\TPOXyoƤqG7otdhn\\BD\\C.J@?9Vfjc64-<;AE`FC>JC_BCLQC6E]q_[VYXRBFRQO9QH7GIEdN?PUHS^DGLQdS7FEJbVQD^E:6BGGC;/3;:8=>;2695;??GM?EHIFFBBNJSOLLJNNRVOXVSLCJROA7:GMJ>>BHI<354247;?DGJNRVWYZ[XTQQX][TQPPPMLHKSXVSV[`[ST^ZLEA::<?>3/1575346750+-5AHD:<FILYUQ_kkmRnp[TJD[NAdTI^:56NJ3177644678:<BGB==DBeq\\RF<5^NLmxnWP?1.5:=DFAH\\_VNB?<8<HRRJB@>=>ADEDEJNNI>:CKA7>EGGD=>A;7AIID@ABB<BCAKI?>;:88<DFC@@ABCJq~~WD=;><;;LfvT/=[`M?NS?7=?=;95D^jfL>OchjiSDRWJPdgYOGA?ABCCB><;99;?AA?<99976779;@HJJG>;;;;;;9:>>H]UEDDCDDBBBCJNMVn|yvsaYf^B7:@A?FOMF@96:<DNKD>@FHD@>??<998:AIOMNVTJCDC?@MZ`[Wbm_KHKazppqeyysAICBCDD@=>>===C\\ocSIFJGGF?=BP|k@;=;<;:::77AJKHECCEC@>=>>=;;::86433315@B91346:<??8589767567864665557;<<;:9:979;=?A?;:98778767:=>@@AA869;8:CJJGHKMOPSU[afnlhjh`ZK>AC?=>?>=<;>H=976699788<EDGW[JDKUSB9EL=26?A93366746Cby\\PMJ>:73317<>GI@?CE=89<9767BK>46758EC?:5{/02598656893568;<89:8:AC@???@@???????@FFDXa^d^hxyx^:YF.221222357:=@DFEBCDCCDKMNQPJHGPUHJPNgxzwVOd_OSZZVMHC@DFBEH>24BPOGD=@EDFJIH]weB:EOSKGIIGIMKOSJAECJQIHGFFFEDFFECCCCCCEGT^]_cdba`^ZRGABDFHHIJJJKLLQVUVYdlnnpuukXKD@ACBBEFM^knkdXKEFFDCDFGGHHFFIJJLSURW_deegibRKMFCFDCBCCCBBBBBBBBBBBBBBBBBBBBBBBAAA@@@@ABA@ACEFFGIJJKKKLMPTXXWVWXZ[ZYYZ[ZZZ[[Z[\\^^^_`aabbddefffeeedefggghjjjjgd^XVTQONKIC@DGHGGHKPNIEFEEGGHLSWVUX\\XSNNPdwiQNOLRyrglYZad]ZXUTROUSJWfcfkrghfWIENW__^_ZVUXhsqgaeY_]\\VY`[\\fcTRX_[X]cii]`pokgd^_ii]_`eaYZ[\\_mvyzfgrnXbh]^SIMQRj4=;/=O;5GSI96:COOJ?61N\\Pbh]VUSMH@7666679;7=mkA9BOYD26:88878888887777888888899999999999999999:;;::>=JgT@H\\uylXGG`{t`=rߞTMDGECFFBADEEHOPLPSB9GOvmlpl`X`YTu`KD?=<>?@@BCJORONNSPGJQNLJFDFGCXqqrlRD\\nZMMRSQRRSWOJLJKOORRMNPOMNTesxrd|wƸ±ǹķٻҴʻɿƦǳи±}Ǚ~ðvp~zuu|`|cUjwgl{|zrfavwd]h~z^Zckni]UXfvwlZJLRY_JEup]FKƲk_hnU;8KR=KD8<TcuhB.+=FFReU6=CD[;=MM^9?Jg^MRZVYNJTNDAVG8KILX?9HNXdECS[KgH8EEJ]aLVQ;;CHNRO6-/9:8@99:3959CA@NBHHEAC=CLEMLKKJLLSRVYTTJEPVG=9CIKE?DCFA5355557:>@BFLSWYXXYVRQRTVTRRRPMMNIGQYXRV]a`ZQUXWQI?;;?9.1@IC9455540..2;A>38EIHKFEHHXnRenMB:8U^CfUG[B?@LK5/443545579?HG@=<=^v\\VK66142V}sVH8215<BFKMMVZK=BGFEFKMJHB==AFGHGEBEHFC>==;9@KIDHIB?A937BJJJKKHCEEB?@?<::8:=EJKJJMIECOza?<;=>DYp}TJ[gg[B>B:8AGE=:;@JTVI:;DSijTNWUQT[_YOIC@CDA??@=98;=??@?:556668:::=CEEA=::;::;::>CLJG^fQ==@@>=@KQNVo|jcYPPD<>?BPWOJKH@>??DKICBCGHEB?AB@AGIHJQ]^YTSQJJIAALZjeUYkk^WPMr|nohM@C>FGEC@>>=;=I[``e]QONRK@>@T[5>::;<<==@KRN?<AB@@BCA><;:98876764204>@;:88:;<?A<6478673/1642699;:8888::::868<>AA=85966777568;@DEC>;;:<?A@CBAGNRUX[Z\\Z^ve^igSF<<A?=>@>?@<CH=8:=;769:=AHHNXTMQONKIFEGE86@@5/279:7;by]YVRdfMH>9;;DONHD?@EC739>;51?MF966557@@:0QK2/04;>;58623556896578:==???@@@?==????@A?Mf`\\r\\UGDFWpO57;;:98557:>ADEDABCCBABJNQ\\WSk|idje[FO\\ZdYP]ZPXdlmV@<<=@<BLGK_t{{wm\\LACLMHJcgI5:ADGGFFHGDHNRVQKHE=8QKGFFGFEEFDCCDCCCDEOY_`bb```\\UNIGGFGHIIJJJJJKONMLMV^adgjopeYRJB>CKWairvttvrga]VOJFGHIIGGGHIILPPOPW^ejiil]GGHCDCBBBBCBBBBBCBBBCCBBBBBBBBBBBBBAAAA@AACDDDEDEGHIKKKKKLNQTTQPRWZ[[ZXXXYYXYYYZZZ[\\^^^^adddeefgggggeeefghjjjjjjfa\\XVUTSOMIC@BHJIJNOOLHGGEEEGLRVUUWYXVVTMQcg``mpo|UOYa^^VSUUPR]ek`OX]`^[[UIIPPV\\_ac_Zjuz|z~rjlbZKIKRS]ed]X[]VRYei^]qrrseVYhihb^cc^^\\ZZ\\c}e[q{p`dkdaYMVkVvl:5?93258@HC76;@IEHF74lnT\\fbYUUSLH@6666678:5>ttN9:;997897666777888777778888888889999989999999999;<85M`^bQHSRMPNGDDOkunW߷U?@>ADKICA@@GNONFLcWEG\\whehkcg\\z}PH?::;@DGC?FMPPLKPNEHPOOLIFEDBKObocPFShYKOSSQRRU^YIHKMOQQPQPPPOPUf~k|ǾĪϹƟƹƹǿҷͫմʭиɩȣr~}ymju~}aYPizXpvxqiMNl~sb`slcagqtjYQ[o}|r^PUaZRUXeTdrr~Ͱwf]hgR;<BGJHI8DTKwsA-8FAR[Q5EECJ8DLGbE@?CQSPOUTVP]R?NXP8GERE12FT_V8MVaCk?7>KTSlXRB1;\\JJH]?G16;:E<8F3:59FD;LHGGB@>8EJCEGFFFHKPP[SRULJWR=:BIGHECB?E=56665679:<>CILRVURRQOMOKIMQSROMOOJEOYXQT]___\\WTVVUOFA97=FUVG74887521/14:C8/:FE=<;;9JnU]hRGF=H^Dc\\NZMVXI;64566334469@FD>:9Ug^[D5211nR5Oox\\E837=GKORUWVVYK8@QTTTXVNPK?=IPLGEDDBAAED@:8ATYLFIJIEB:78=FOUWURMEECB@><<<??@CIOMKSOFA34Mtvko\\F<;?@=AltclkjjaO89;:>GIA:<?AEGC=;:;La^YTILRRMKKHC@CDB?>?@>@CB@?>?;558:<>?=9:<?><<?CGHE?;>CC=?[l\\?6?CDDBAADJN`z~tlxoJ>CGE>Fbm\\H?AEGC>AGEBBDFFEDCBCIT[YUQRYaeVLGFHJKJIR_XEKjyytZESxxyNOs<HKNIFB@><<;?BEGHDBGHLSQIDBQD?;::;<>EQ[\\UD<>><>GIEB>979:88:;:6555<@BDB@@?=<>@8258:;60/53148<@DFE;37<<;978;<==9537455774469;@GJEAAA?@HRPGFLPTY`aaf`UqUGVYLC;:>A=<===<;?H>7=LL?7;=BFIIKMPSZUJGLQLC>96<?9338888:GVQY``h}bIZcyKG[]M??BDB>=@C?:;HKA<<=>=42@5:uf76113<ADFHC89::87889<>;87;>@AACEEDB@@??>;FYR`jSTLLR__ZMDJIGFB<77:>ADDFHEC@=9:EGHWXMb|piae\\R[dhslG8GOPVe]OlkNEJGITH66=?CEFFEGJORSRPLIGBGUgaUJGFEFFEDCCCCDDDDLY`adb___[SKKJJIHIIIIJJJJKMLKKJJNW[\\]bhea]WNHQ_imnprrrtuttrjbZNHGIJHGFGHHJKKLMNQY`a`daOAEGBBBBBBCCBBBBCBBCCCBBCCCCBBBBBBBBAAAAAACEGHHHHGGHIJKLLLMNNMMMRZ^ZY[YTRSVVXYZZZZZ[\\[YWV[deefghhghhfedefhijjjjjhc_ZYYWVTQQNHDDEFEIMOQNJHECDKPSUUUWYYXYWRLPX`n{ytVOSX^\\PLRXP[ukQT[]YWTQNONHMVZa`Z[[eoxwqoqdK>ATe[LTaWUZa]KJYd^Yk{xd\\chjc`cjjcchdSO]~`d{{nehxmdYNQg_c[>7<:9988<><8787<;FM3JrRRbf[TTTSOI>5566677888QV>1487767776566777777777778888888888998888999999:::9?OEJbefNDUYMEDA?AF]pc[bXUDFJHFDCDHS^]ULJ^\\QKwuekqo^|MKA;;;>GNQMLLMQJFKMMKLPRPJC@AACDW_QJHM\\WOQSRPQQR`jUHOQNMW]XRPRWXZh}|ʼ´Žַé¢¹˧Ӱΰ͸Ծ۳ʺĨϽȻʻrxs{|v~lcnwr}`TMj~X}ghscSScqyvkdhpqnaSPSY^]\\[[^d_ciYOidcF@E_̱m\\`hULC9HC?A?=QJC}f?MR;JQF6GEFJ4B@@YQK2$LVPKRXTUaVMQLV6CKQ41BPUT?COPOEa?<D[pSauL;.EipODcE\\;1?7GF<R58<>KG;JLEE@A>6FFBCDDCCEILPTPRTMPWLA@MLGEFD?;A<896756:;89<AEGINPNLLLHFDHLPQPMPSOGENUUQQUYYZ^^XSSW[XQD=IQRJ=336642000/26GA37DEAB@DDQwUUv|pvslbH=]RZ^RVIRP>07ADFH?74357:>>73Lmhg]D801-616>N\\H0-47?NWZZ\\^\\Z\\ZI;ERY[]][RMEAFQRH>9<DC@>HLB;DUZTKNLFJJ?:=??BJQSSPJEFFEDCA?@CCCCFHIJNOIH@9Jq|w`B=A>>>B;A{k\\ZalwoKC<9;:<CE>;<==<:;;>?7@`o_ICKROHEGD@@AAB>:<ADGHFC@?@?>?@?@?=;::9::;@HMOQPI@?DA:FRK??NQCDEIKHEEFNZegp[CGLI>?S`R=6>FHGCACCB@@EGFDCABNZ[]_XNLT\\WQW[KFOPHO]P@Tw~~}|zW\\ZTHURMF><;<<=>?CKSC:>>DP^ghVJne^D87=AN[ZXWMA===AIKJHB;78:99<<<=><9<?CHIGED@=>@=<?A@=8323236;>@FNOA15<=>>;88789653433455345747CLJEFEB?BQZRPROR^gfdgaToPBOVOF?=@B@>><:96:G@9;DL?7AHJMKGELRW]WRQQHBAC=767742446940/+YɈyftYEGPG>ABACDEGHFEHKB>DGFFE>:>9bu=<<;AB=<BJLIFB<:978:;=>=848>BBCGJLIDABBAAABLCMa\\`ZMFMciTQ]XJGJB87:=BBDHIED@959ABBIKCUƩyonnkgfhihor\\MfwhhagWIGA<:?BACEEGGGHNRROJFINdong`ZQJGFEDBDEDDDDDJW_cdb`_^ZQKJKJIIIIJJJJJJKLKKKLMORTUWY[__]\\\\^^dkhioqqrrrsttspi`VKIKIGFFGHHIKLLJJKMORRQND@DBA@AAABBBDDDCBCCCCCBCCCCCCBBBBBBBAAA@@AEHIJKKJKLLLMMLLLLKKKPY_[TVYSNMPTTUXYZZZZZ[[\\YVTVZ_bccdffggeddefhijjjjkg`[ZZYXVSRUUPD=BFBAIRTNHECFPXXUTVXZYYYYVSONYg_Vowju}cVV]irbKO\\WS`]RUYYXXUXWWYNPW^g^OTXbltqjchpm^M>D`lXMNKJS[inTBK[_Z`pvvupb]bhbdfmqihxzfXa~}xvqghzj_UPN^tz^:699998799:9776:8FM8a[?RgdVSSSTQG;6656667787755578778777566667777777789:8888888888888788899999::8<]la^fp?DVTMORTUT_meQƙ[WND@BDGKRaie_VqeNKxw\\akiok6<=::;=CMWZUNMPIDHOQNOXVOGBAAACFJIEFHIMPRSRQQPROZqeQPRMM_hbQKTasunȶɿ½̼խ©Ó̧կǯŨҹϜľǡέ «ļĤѨzʸmmg~zt~rvlenocxbVLo~yWvajyssqmlaWPLJLKE@86>EIQUY_]^eWAHjz]MKG˰jSekKBG?SB598Ha>FxrWD[J4NVPD;BR@-617VOF*)HHTOPTQWQQP[DJ0DVF/DWaOI>RRVIJLCJI`mPVzh=4S_]PjD_L3G/>PJW<3FHNE<IPFD?@B8FD>@BBBBIHJVRUSPOWYNLMRNMIHF=8<::98856=;79;>BFIKLLMMJE?DOQLMPORSLFHNRRRSRRSTWZYURRX][ZRPRHA5,/441..//012@FB>@BA@BGLTuWOimltnS7Mb^^UTBHJ?38MXZ\\YI;555699-@}mbfbV;;5/&&?QI?7-(0@JQU\\_^]`^X\\YHFPV_a`^[TLEHNOG=6/2>DA<FNH?GTSIIPG;@C?=>BFGILPMHEEGIIGC@?AA?BLPFBFFMUPB=UwswI:<@??@@GlbE@>DbvB8;:::;;:;<===<;:9;>;?QZRMPRQOMKGA?==@A;8<??ACCA><=CGE?<;9:99::::<BFJMKIGEB@==;=AWmv_A:=CLROIIMOZb_ouXHLPLE@DMJDKVUJFGE@BFHGJLFBBBFJPX^c_ROPMQ]ypKBOQJGIA=]zbERPLC<<:<==<;=Qe]QG?AESqyZwʝC:8=CNQLKJF>;<>?DJMJB<88889:;<?@;7979DIHHDCCABFIGB?><831358=BACGI=13:=AA;76445443211234345623>IIHIF@>;ERRQRKLend[]]TiSBM[MB@@ACDA?>;728GA;:999::;>B?@O^__aRQQRRRTTLHD;86229=<54:9]溈zxU?CGFCA@@>@JLGEFJHGOKCEFEC8EqW0),BTK>;8:>CHF@<<;::976=B@@ADEFIKLLC?BBBBEFLICk`\\b_VJTl\\LTXSNJH?879<@CEGIEC@83;DFFK_{͘w|{rttifgigbjnrzvcVY^cn{sRHG=6?LMJIIKJKVYMJMEDXoaNsrplibUNIFDCDEEEDEFKWaecb__]VLKIJIIHJJJJJJJJKKJJIKMNLNQSTVZ]]^_adhgejprssssssssrplh`SKIHGFFGGGIKLLJFDDHGBDC@@AAA@ABBBDDDEDCCCCCCCCCCCCCCBBBBBBA@@@@@BEFILMOQQONNMLKLMKIKS[ZQLPOKJLOQQSVXXYZ[[]^``^]_aabceefffhfddddfijjjkkib[[[[YYVTWZXOFLTK?AKQPJFDGKW^YTRRVZYXWZ\\YRU]RQul\\fh`ab\\W]b\\PVVQX[VTQRSVY^jlhcZUPVdg^QMYge\\\\blh`\\VIUc\\S]_OPaiswgUS]ca\\^^`df]Y]dccaclnfktsiftwuihzp^RXarp;4:987779::9788:7CFNfE>]m[SSSSROC85556677777678666666666656666677778:99897888888888888888898989997JpnbW]qM-:LMN_qyrkheN`ȄWPE><>@?@CQ`gg_QQfx[V_xp[YAC:;98<EJPSUPLMGBELPPQTPJDBBBCDFDDEEFHJLPSRPQQSPVikZQOP]dg_OI\\e{Į²αƽˬӿӱĘʹϼ ۻϽɼԤٯκζѪӢvξԽʳȮumaē{tt{puojgvqTsdZNvyYq]ii}toumg_\\\\]\\ZXYYXV[fhiqz|jR><]]FQSǫhRlnLDJM]H=:HQ`=DXfmCBO7BJJRU@G^F3,(4LJB6EEEOGOOMICNS`LK3CY7=T]lIIDYe^pI:HQEMWGL~~D;Nctb_sFZXBQ17T]SB7HKPB=GRJF@DD9KD=AADIESLHe[^SMR]bXUURPQQKI><<<?9==08A:799;@FKKJKMLHCCJPMIKPSSPJFHMPQSVUQQSUVVUSSUWW^]SSH=0-.49;<<8521/9DEB<=?DFFLLaSOZg`ohMJfkf[Q<GNG;=JV[_a]P<246825qlXgh_J68816F_`E117;>L\\_aabbbaZRUSMVaggd`]XQPTRHA96755>BA>AMVN><GHEH?44<IB=CILOQQJEDFJNMJDABBB@EQUJCFLUZSE:Mssrtx~V:=>AS_C?C>>=::OwpA9;:9999:=EHDEIF?<==<97;EQSKEEKOKC@@?A?:<B@;;=@>74:AA94567:::99:;=?BGKJJJGC@=<:>MephQ;9?DJQSLJTYVRFFKFIQSPMJGBHZhnfPEEC=?KVSPOGDFEFGR_cieZS[j]XnZFFOQKB=>D]qlmζP[vRIQKA>?=>>>=<=GRV_ebdebbv}xxrgE?@AB???==;9:;:=DIE>;97655778:;97722?FFFCCDCCEE>9:<<<;:97677:BAA9348;?<777532234763244344544;CGIIE?=;DIFIHGO_g[QW[U[hTHEIFEFGGHFA???;27FA;;;:741EN46J]hjnaJFNYef^]YULBBDA?EKC54?=MԒE]spmSCB;87997@QQNNORX`faZ]XUNT{uubGCCD?9537<ACCAAA@<9858CIB@EGHIKMKA>BAACCEGH9Ng]Yce]WVVJi}LHXRNQF:878;=ACFJJFEA97<FMNPkгyrmvdgib[njQSX\\YYh}sOGQPMNKKORRONPQMQooNLOSbjf[QB:<sttqmg_XMFDCCDDEEFHS_efeaa_XOIHHHHIIIJJJJKJJKJJJKJJJIKOSTW[\\\\]\\_efcelpprsssssssrrplhbZRLHDEGGFHJLMMIEBBB@@@@@@@AAABCBCDDDCCCCCCCCCCCCCCBCCCBBBAA@@@@?BBDEFJLNPPPPNMLLJIJMNLHGIGGIKMMNPTXXXY[[]_aa`VT\\bcdfhhfeeeeddcehjjkkkkfZX\\ZYYYXVWYYYY^\\MACJPNFEEFIX`VOFN[YWY[[]]YRHSkgsjTT`tsUJQOSeZJQ[STX\\]_blsmg[W\\WUVOLIK`okkfmujgeXQ`cX`ioj^ellljb`gff]Xdjdaeib_aa_^hnfcgoh`jztx}ogytYM`vs@5:987779::98899:@>fcDPpiRRSRRPI?7555667777767655555566665666666667899888667778888888888888888999;7N^TK:Q]>9ILHM]otg[WMHvkaWVUJ=9:@HPZ\\Re[bmoqm`icXxe;?CADKKIJRRLKFBEKPRSPNOJECCFFGIIIHEGJLNQRQPPPRVbkaQMXgd[SQQd}o¿ԼųͬÅ˺ƺĥȻƹվκǪϭӰӱҺ˫ˤwc|{ux|qopplqqOp~j_X{Zgchhlbutihkoommlmptuwyy|tO;GW_VGIVæcRmlOLPTX[>J]GP87;kSALGJ86<HHHTF=0/BKJ:A\\EFEAMHE>APXRLdBOR1JNciBDCNi\\S0IM8FK:=Q<BcfhjpMS^JYK=UbIFLELL@AERTIBLA8PJEEBHONaRLohaPMTbkcZURSTTLJBB?DD:?;1:A:577:>BFFFGHHFCFHFDGKNPNKIFHKOOOQPORSTTTSTVYVPVXUXXSF3-4AJPNF;30/68>7;=DKHDFJYYOVpduyra_okfPBFJGCBCGQ[^c^C1493/[sIPdwm>745CXaR?34AMIFVgiiiighfXMPRT[ruhb``SFIUO<35:=@ACDCCDVfW:1@IB@>4/>SHAFLNRVWLEEJRUTRKGGGHIIIJORU^_XROEKi{wxxqtzH5AT==;=@A?;<QT?:;;:::::>HLIMRKB?>=;=@>?GF;6;EQRMHCA@=:?DDBBA@<33;=934789<;:99:;<?CFGJNOKFC@??>?@DA?ABNRNOPPYaWD@C@=>AJPOONH:DcnmaRKHEDENXRPQGCB@@C[nfngTPuELEGJOQNJKUW\\]Q[hE??CB?IJFAABA?====>@BTn}ysptmguDIC?<9::<=<99<<<<==;;975334426;;<=64AFBBEC@=:986678:<ADA:64/4=A@<86489459964247<?934454355453GIIID=;@FGDB=?Oc`POY_[Z[VPJHIPSTPMH?>>@=57F@;;<<851Xq>JPm|nOIR[gpsniaYSONLJIJMG53;49t{Y\\ؽySYN>DGCDGFJUZhzijloymJ=:778<=@BDEGFA><95<D=:?FIHJLH?>@AAABDGG@:74]hWNLRSssFV\\SMMF7579<>ADFIJHHFC:<KRNJSXRzmtshhnkm]N^ikmqx{ZQTQRTURPPOPSTSU]vpKI^{wUEFDCGHqqsrqneYNEBBBCDFEEIZegfebcaYMGGGHHIJJJJJKKKJKKKKKJJJIJMTY[[XWZ[\\_`cgknnprrrssrsssrokgc]SIDABEFGJLMNKD@@@@@@ABABCBCCDCBBBCCCCCCCBBCCCCCCCCCCCBBA@@@@?@BBCBCEFGIJLLLLKJJJJHFFHHHGHJKKKMMQVWXYZ\\\\^_``YKHMPSSV^acffffdbcfgijkklj^VYYZZ[[XVW\\`__b^OEGJNHBONBLOPQJS[\\]][Z[^YX]ZOYceoote[klbce]W[\\VX]`ba]XQOJGJMSVNOXV]_ionpmttdON\\^\\nsgjcahh_\\YZbdg^Tbnhenqhdeea^dlnnljhigp}yqtzvjrfOK`rx~{C4:987778888889:73Fq[Ocs[NQRPPME>75556666666666555555655555566666668;DO>36767777888888888888899978<DRG7;Nb_YULIKS]h`VTPDV~tU=:@GLOUUL`whphavu`ZZSpX7DLPOMMLLRQLJDAFKPTWZ]ZRIEEGIIJKIHFHIJMOPONNOQZfg]RV___^]^arƮʼʼέ§ƻ̬ʳȽʵŬЯʫ̽ұҡʻ׳˶οΟ erz}~||{}wiūt~wfnSo~|de{[[d{Z{\\Wb``cglkggjjgccfowqhnX:QeFBLjhgfģ~cUggORWUla3YbIH75GpyM=H]J6-1DUj]CL3:?FC7>U:BDJH<H;IXJMUeVkL9F=l^63HEVbs;RU7QR-7|R;DTQdeeUVdGX_H^[AJXGUC<KIQXNAMD7VSR=GQZUiYTppbKUZgpkYMQVZUOLHKHMF<@87:<;55777;=>>@BDDAABBDGJGEDHLHEKNLJIJLPRSSRRTWZVORTW[]\\[R?8@BC@9103624>58AILJA;@klMSwz}mRcjcTJHECA@DIPZb`T=155,JTIMQe[;8;ATXG21APYXRWbb`dnpicd\\QNOXYjqnifipJ<CC;9=@BEFDEFEHX_M:6;CBA@:3:MQHHLMQY\\TGCKW[][RIHJLONJLW^_`]YWUMGSk}su}yŎE[w1:>?BB<89::::9:::;::;<<?B@>BB@><END;>?979@OZZNDBC?<?BBEHDA>;7:;::<<;;859=>>>=?BDGNTWRJB@?@BFHD@ADHJJGFHR`^F9AHGA<8=GLLIF?F`icRHMRQRRTURTYL>8E_^gfiihu~HNEFHMORVbf]VMFd}P;A@D>:BEBAA?>>>>=>==AN_ksvs~{ިPUN?CEEB>=>=;;>@;89<==:753443369:>B>8BB=?GF>74688878;=ABA=8669;>@?=:66216642459@EC;7766445630/EMKIGC@CIJDB?@Qg_MQac][[YNT`c]VSRPH><><518G@;:99993IeVah|cCRgpuv{~mZUXULECCBFC711.7Uj`Wf˭]>=A[rphefytmpdmN888::<?ACEIMLIGEBABB=52:EHIJLD=@>?ABDFGFGD?aLKGN^`^XU]VURLG=868;=@CEIJJJLM;ZvQ=NQJg{bwɿͺtmrljqwllqooj|tkOR`ji]IDGGKW[W_`rrKHub>GLIGGGppqpnefePDAAABCDFEIXceffddd[LGGGIIJJJJJJKKKJKKKKKJJJHHKPWVUVVXYZZ_fjjkmopqpqrqqrstvtng_WQNLKPURMLMPLC??AAAACCBCDCDDDBBBBBCCCCDDCCCCCCCCCCCCCCBAA@@@?@ABDFHIGGGHJHIJJJJJJJJIJIIIHIJIHHKPTSTWY[\\^_`be]J?BIMQYaghhhggea`cghhjkjf]VWY\\]\\[ZZ[]\\]_a_LEJRLKh^?ERVU\\b[]^]Z[Z[V`kKSOkv}t]VU]\\\\a[Z_`ijYOMKJPJHQV__XYST`bbb^mjULIQQYfk\\_eiihe\\[\\^][bgnvsf]_lrkgaW[iple`djffwxowxlkSDJ\\glqH4:987777788789940bjMTjgROOPONJC<6555666666655555555555555555666668<LjwR577787887888888888888998?MZbdY@AJOVUONSagjl_XUPKGd{z^A9>JSXXYVPM[ptpXbe]UPO^{NFGIKOQSUUSOKIDBFLSUZ_bXNKIGGIHIIGFFHIJKMNMLMPOU_^ajib``chr϶¾ſѺʧǸȽɬ¸|v~ѻϹ¸۽ʲեѸ̾۵źǩѝȪinvzzxq}z~~eůtzgvZnkx{zYUiu^iqVLPXZYfof`h{rfcr~od}XC=j]EGiERšycYcfLT`VqT<hU785AW\\ZF=K\\D6/6KNfZCOAO>@58:==FPMBGP6QXANW[ooMGD=nU0,YPLaB]ffU~@.l}Q=CTFUclXXjTa_MfZLZORYD9NOORTAJG?`]WATckUi_[qucO`]quhRIT[ZTTQOQQPG@B:8:;:536679:;;=@DB<;>BEFFB?BJLEBHIGCADINPPPRTTVWVTRSVY[ZXa_SG:110/17;6<KLFFJLMLA9oxJHoq~lEWi`THGD?;>CLNVZP>335/<wSNQGA?9@EACE90<LV_`^_eaQPbntraY\\YNEPTTdvueo^?ACABB?<CGCFJGACF@:9;=>????9GQSRMMQTTRIEKV[ZZYODFKQWXZ^a^[[Z[ZSNRh~Չ{ݓYH@>??A=<>??@G98:889:75:;:@GE?>?CE><?A><<:AU^LANPA@B><=????=88;>@=;<<639=?@=<>ACFMRUULB@>CVql[N@AEE?>?@EHB<AHGEC>;<CJOMSOHRW[SFFPUXYXTQW[OHAFwk{؋gaEBFHNNQSSTOGO~cA<FE:7=?@CGGC?>=<<A?:FWXi{ẇbMQONTL@=<<??@?97?FC?:754687558;?@?;:;:<AE>679==<:89;??;98:=???@A@<9811651389<@EB?;88863231-.CILNNICGLGAEGCOgbR\\e^ZWXW\\[]qhQHLNHA;<7..9GA=<<::;=6;;Jm}sa_ehjnwzm^WTQKFHLLHA=:;H[ejQN㺧yWKRWY\\aa[alk[G8<pql]@381-015735;@BCEDDGIIJIGF=18GLJFDB@?>?AACGJPNQH`EBFMZ\\WbfTSTVPHF<57:<@CEJLLMNEVjg^XzйƿZ^pwtsngpxpcYTjłmk[nfSOIDGXecb[pmCixC>HJIGFFoprql`VRKC@@AABDDEFNVY^cbdk_JEGIIIJJKJKKKKKJKKKKKJJJHGJMOMPUUVYY\\bhjggkmoopppqqrsrrrplf_\\^``afcUMORLC?@ABBCDDCDFFDCCBBBBBCCCCDDDDCDDCCDDDDCCCBAAAA@??ACEEFHHIIJKONMKKJIKLLLKKKKIHIHFFIOQNNSY\\\\^aabdh^PLT]agkjjihiiia[`gggijjlfXUW]_]_^\\[YZXUWb]IWiSG`mWDYmdgbYXXWV]ZWW\\eenu}{z~yXKEKX`edcbbike]ZVTTTVQR^a]\\\\]_YWV_qeVJFCJ``UW[cf_`egia_XOUhxysc`fuifiaZassh^Z]ccckrw|shF=I[jl`qyH4:98777778879997FrZL`lYNPONNMIA:6555666666665555555555555555666669MmhD8689999788888888878899;D\\kkcWH<5>>?Qirpnjfe\\WQLGWnut}xaK;38>LVZYYXRMOcrzlZ_c]Zaeej}qfb`ZTNJHEBFMTWXWUOLLLJGGGHHGEDFHJKKKKJLPRT[mqdcesԳʼɬɝĞ˽ŭ˴׼ùĶļҿĿӷóӻû֪ͭ͸ħvzxwrvxzulezx~fķwzpgmy}ytYXisth_u{dVPV\\bnu}spqdbjxl^ceTX8N`IZjCQzh[amNK`ZkPQhO+==BDZXA6?GH/.G^OJNKYqT>:33DNbPJ@CTE?PB>HF[sWNJSMjI0/_ZN`sQXgpt{R\\oUGOtgNhq[TkfrdRfYUtK\\YG7IYMLQIIIPjeX[kxtRk`ctud_eayr\\OMV^[UVUVUVQKGC?>=<;635679::;:<>;8<AEECBB@AHKC>BCBACEILLMORUUSUVUSSUXYYV]ibXRD60/6?@AIOYTMKLPWT@duKJ`t{fCWkaRFED;8=ABEMF944518iF5MOFC?9BG914;EU\\\\\\adfaPFTiqvu`WYXKOWUJPYejv`JIJHGD>8=GJNPE958::;=@=@A?EJLGWbQIHFDDFJOPPQV_[OGLX`cgikkbYZUZYXYivbp˭˟oWB4=BL_Y@=9OrE5:DA;;;;=?DKH@==<;;<>?><;:65GVE@WU@BGA:54699888;@B>:;<:89=@A>;<?CFGJMPIA>=ESeWIB<?DCC@?>:88?FGEDFILMORXXZSFB@JQLCGORRQLJLLIPWKxqқmXdUGMJLMTWIHUsΪeQ==>?DIMTZZRJFCB@=CIPQW`rtps]ezZNSKB@;;@??:16ELF@:669<?<716CD=8669<;:;;669=@@;669><408?CC@??A@>;:79==<<<;;;;99769:8201058CJXXOFEGMD;BIIOZX\\iaZWSSUhjUS]QJLNMJE=7249B@=??;0CfcWlohljc[^aQZieffTLRV\\abdqwjPS}S^ʢimha^TVX\\bgqnU@9X̻ɫugghX7+03448<759<:62/07<@CDDEA28GGF>15><>?>>>?DJMPDT|K@EEJRUfw[LSW]KD@9;:<>CGLNMMMQzUJpt]vѻryfhtr`V_hy|d\\WrҘqidyvb_fQDDRca[Yi`HPICCJIHGGoonoi]H@FA?@@AABCCCFIJNV\\ckcLCFJJJKKKKKKKKKJKKKLLKJJHGIJJLOTVUWY[che`bjnnnpppppqssrpnkjhddffdef_SSSMC?ABBCCEEDCA??>>BBBBBBCCCEDDDDDDDDDDDCCCCBBBAAA@@@BDCCEFGHGFGILKKJJKLLKKKKKJHHGEEHMNKJOVXX[_baabfebeghhhijhhikldZ]efehjjmmg\\UW^^_^][ZYUOUagT]z^ANpe9NsonmehlZS[YXZ\\YZgx{|uz|||{{zgLIOUcljeb_XWTTSSZb`ZPSff_]ab^YVT_naRIEO]f^OWZaVP[auvmaY\\X^`_^`cg`Xch`]gsrs`]eeca`gt{w}}wnA<IXkq_gzM2;99777678879896`lJUihSPSPNMLHA:655566666555555555555555555555566:SmjcXH:8999::88888777888889987=UbVF<1AeTJ`onjjcZ^]WQLHRepfbdVE?<8=DNTUVUPRZ`cc]]gl`]szgi|Ʒjc_ZTNKHGDGMQTTQNLLMMJGFEEEFEDEGIJJKKJKQ\\bspejrrпſˢìʻӹʳĳǑȪοļź˹ӻƬǫѪ˽řжԷɧßwirlzyuo~na^xo{jw}ytsrwxr]Z|lqrmao~quhotvu}{ou|t[VTSEFLC\\T@FR`zcNƹzl]bkOObdfU`c@-CE6E^XC-3:M62FXB=@G;VC<C58MmgDA;IC:CE9<D8RZMMK`\\nG*2WUPajUAQ^nWgV:GkqeokQ[engTd[YvO`XK<G_FLMWSJ\\ng]ywYl_lp}ftfhzmQSS[_[ZYYU\\WQNK>BCA>;63468897872599=BDA?@AA?BGD<;?DIKLLKIILRTTTVTSRSUXXXVZaf]\\]OB;?HGAJRTSPEKOUPAZoELUx~xwsP?\\kNKGFD<6<><BD<45531[]8AMNGDGB>:8=LV[_babcgg^PMZjroe[VYSP\\dWMHELntl]PENTRLKHCFOXL>877878;?FPJ?HUTHObR?=;::;DTUKMWda]VQYP[gpswhW[\\ZV^cibA;ssL\\[IOP`e~I1Xc9?s]9<<=>@CD@<<<;<<<<==;:999?JDAORHFGD?:7777779<ACBA>>?<:=AB?:9<?@@BGIE@>?CC@=>=;>BBDB@=9<?A@ACBFLRZa`ZRKGEDD9C<=?KKGBB@=<>MioiϭnGNJIO_\\FVb_дVFQSTTSSUSMIGEIEAXbTU_erpl{ڐtpdUNGFG@=:3/7GNIA:58?DD?7.4@<6678:==703337<?@=76;=<52<CCA==>@@>=>?ADFE?:::968679:;81/019@FW`]QFDBGF;?HJLMK_d[WVSLTmxrWPTVVUUTI=99:9;==?>;3EƤsslIMRFJTb`U^aZe[<KilpsoubTT\\_OQpʟzcjh^]XYPSwbTNp俊ÿȿ|vseTDFFFHGHMPTWXWXWRSY^aY]`VEBV_^M??>=<:96226:?A8<Z>315?EIapNOVnhDA;68:@GIIJNPP|˞`BFYxe``_ldiejc[cssb`\\aţ{i\\g^Uij_lUBEIRWRSWIQhXLOBDIHHHHpoece\\J>AA??@@AABAACDEEHQ[\\[QDGIJJKKKKKKKKKJKKLMLKJIFEGFGHPVXVWY]ac^[`jnmmnnnppqqrqkd_[Z`fecadgcZVWRD?DFDDDB@BEGMWVKCBCBBCCCCEEEDDDDDDDDCCCCCBBBAAA@@@AB@ABDEEDDEHLLLLKKLKKKKKJIIHHFFFJKHGIMMNQ\\adfefhihfeehlkiiiikmc[_cdfijklplWLY]\\]^[\\]QR[_c^\\qlXPebDUnscqzjUUWX]_`ZX_ddWY`bows{vu_MOUZ`db`XONMOOLS]\\YOHVd^^`_]`aY\\e`IGPipl]Y^XcYNQVa\\bb]kgZPT\\dgcY]ceY`gbin][bgihfb_dlwwslBCOZoyko~O3<:988777767773>s^Mdh[QUTRPMKFB:5555555555555555555555555555555557DK?79=<9567878977777778878866?P^_J::Epy]HQ^UigQLXZVOMIIP`^POTQF@<AISYXUMT`hd_\\UV_a^]lyo][lwSWXVVTQOMIFINQRRQPPONMLJHFCDEDDEGIKJLMKQ]jvj[sԿƾɡâ˾ɺѮЯĸǻϽ¾̲ɾٵɲմʼİϠҽѾ˪phuÕduteuviZr[r}wezor}ſzsyyzku{lg^mkspqglxd{rocW^qvtyh;7STMbU:RrrTɸy_dbKWeef\\aU1;NA<GTtYE8?GAG<H@>8FLM4;@32DiU3<<\\<8?<@8A=FBULU^Vyg>6aPPalV=PTV\\XBETh}[iOFajgV^]bfZlVRFKS<QPfkLavhg|y_igpq{lbkrcK]]__\\^YXSYWNTIAGGFD;5525898674.4:9:@@;9<?@=>DB;:AFJLNNLIILPPORUSPSUWXXXVX[_[Y^\\WSOLIJSXRNTHEADDZrrD<Izzl[@<`h=ALLG?6:>?CA9564/L{gCCIKLJD@<87ET]`__bfhghhid\\_ef]RQSP\\je[[VNBKstheXBLYZX\\^ZNIQG96999867<O_NAHOSOOTE7888934O_X\\cfb`d\\KUJUdfmja[VML^aWH;Qghx]eaVd;L?;;<=>?=:9<<<=?<9:>=8799;AEDHONGDCAA?=;999=?@AGIFCB>;=BCA;:;;;<?CA?@@=:9:<A@??@@A@?=<>A@?>ABGKRbmdO=6APME=?79>DD@>BBBCJU_x|yFOKHMU_\\`hlzqq~Й]STSOHEFD@CD;XhPXk^TV`sÉj\\VWXE788:@GJH?869>DE=5/11/4;;87:<821138=CC@>=><:;<?@><<;>?=;AA>>??;858::<??AB=;421137>GNQVTKA:=KNJCGDBATXSVXWVWplVXYWWNA:9998::>A>:/^ڱlGCVbUKJT\\^cfgcQEcvqw}eTek[Uvrr||nb]YMShb[kwCMn°ohv\\==>>?EGFDDEFHJQYgwq`_~jqjfhobXuxUPVr]LXSH<;CGJPWW[bHI\\jsk`\\XODGui]esufY^fc]c`R|qvģĪowzyfHDHJ]mcYJDEFMTRONLSUOQJ?DHDDHJrqf[ZZPC@@>??@@@@@BEFGEBFKJKMFHIJKLKKLKLLLLKLLMNMLJHEDEFHKQYZWUY[ZYXZailllmmmopppnnkd_[XWWWZ_egd_[ZXNEEDB@CFLXahpxxoZIECBDCCDEEFEEEEEDDDCCCCCCBBBBBA@@??==?CHLMMNNNOOMKLLLLKKKJJIIIHGGIHFDEFEFMWdd^Y[b^V]fefhhghiihklb\\`bdhjjjlqhTP[\\\\_[^`[XZ\\]^^_qx\\KZowa]x}hgobQPV`\\]^WWZa]]bdujyf]TJNTWZ`cb\\TSSVWNLSRTQKLU__[ZakdT[kfGN[cg^[[eddcmdXW^b^`lqj[Yk|xifllgfheikmlkmolje\\Zk}yseEMT[p}~~R4>;88777777776,X^_kdPPUTRPLIGB:5445555555555555555555555555555554333336=;5<IA6787777777787878Hcie`C3MtVKIII\\NO\\XVTSKCBP\\RB=>97?L]ac]TPYhrsvsmcWYZZZYV\\^ap}uT>CRZXVUSSRMIKPUYZXVTPNNNOMHFFEDDFHHKGLXV^fov{{zŸŲǫɻЧμѹɿŻ̿µͳοֻӿθнñХοȱkt}dru`imeWj\\kl~t_ymmÿ|m}}q|teuufm^jc}pmg~gk~pcan~jDOdo{rbaDKg[W_TL|uxŷ~_c_HZbbtbSI7VSFO>bkg:>;VM=DC888AL7/'*-8NI7DOj:8L;C@><<4VK\\TVugLp[@[\\gv>Bwyc^Talb]o^RuC_xiNTX]_Xx[]gY:@UeqrK[jp~}[hsqupx`hnYOgd`[c[YSSSTNVBJLLJG;37449:74758<979;;89;=<==?>=?CDGJMMKJKLLKJNRSUWZZYWWVVWWYY[_\\[YTONTXSLRM643>tkIFzgULOitJDPUKB9<=@B?7431Cnj?=EDHH@:6:EOTSYcfdcgigiopd[YWQMJC<Fgv^V`ZTMYw{odVEPTSZdgnbJJH>9:;::767HTDDFHJKLMF<:<;945H`nlgb`__XADNmkEFNYTB=AX~z{՛YVgai`oV:<===:9;<>=<<=<:;>=96558=EIHGGDCCBA?<99:;=@?=@DGFB=:=AA?<;==>>??>;<@>98;=?AB@>=>><87@EDA?BISUXdgU=49JXPFEAG^BBBDDEDDHO[g|ʻ܌cWUPJFV^jƷ}|~|wshmzqYIHFDC@=:9?B:PwjXe`S\\ltۻԍqvki_[Y[T=6?DGJHD?97876;@;610/17;9557:<8655:@BA@A@@;8;====<<?A=69ELE>=:79;=;;ADGJEA;12323348@DGOJ>88O`^SIB?>KVXYZZ[UexoTQTRJB@>=;99:<?>@7?ߩ~onnYZ\\UWTS[`WNUfnhasnynWf¨zqmzkb__aeacbe^VYalLfZ??=?DFB=43663002Fbkcc\\[aVMSVFHUWWVY]djpyd^aWWUebt}r_PNVdnkcaXL[pq{eZclb^lyzx~qk`Z_][abZQLDS~No|f>9A@CTYJDEEIQVSOPQOSTKFB?GB9CJonlbVOKEB@???@????ADFFECCCCEGIJJKKLKLLLLLLKLLMMMLJGHKSZ]^affd_ZXVUSX^bfiklllnooppnmmmnoiXQX^bggec`\\]YH;<AEP_luyz{z{}tdXKDDEFEEFHGGFEEDDDCCCCCCBBBAAAA@?>@BFLRSRRQQQOPMKKKLMLKKJJJIIHHHHGEDDDDHT`]QIJT\\WOT^a_`cegiieaik`]`adikjjmniYPRV\\]]_`]Y[]_]WducGN_rlYniXahbUE>QYX`^^^Y_`R`rirbQQ\\]Y\\fkeZUW\\[YVRQUUWUQ[d_cnhXS\\fdPQ]`f_X_jjfgxnXTh]Qhh]]YRalpoicpytleie[jlhjkc\\_`[arzsjSWX_iwU1;;978878878728z|cjk\\GPTSSRLJGB94445555555555555555555555555555555568887;=AWfgS:6877777777788I`ebZOQOHLBTXoSRUVWY]VF=BS\\N717AKYd^ieY_\\ZgnstpfWZ]XSOPZdddifK6DUWXWWTRRSPLMQSUVTSPMJKKLKJIFDDEGIHMGLc`gqsvƹøʱĿ;ʥu|Ю̽¼ýǶͶŻĻһ͵Ͻй˼ӲŷŸøĘkhm|e]dgZdz[ggvuYrpjfynth{sygtohq\\nclf{g{pquuh]Me{hLSZt}_qoM\\^`kYlQnwp^`ZN`anUERP]IYPMkc66:LDEG:/3;FMBAH:38?EEUPF;FQ7KI673=QSU>Q}ZocjlEPLWlnn?ntg\\nMkj_dYV^c{F?RTWYlhTzdbam|qA[ns}~WjulujucemSWgc_YdXXJQSSQRERQQOL:7@>9;:5779@=776578<=85;><<?BCCEHJIFGJIHJKMOPY_a[UTTTVWWXXY[YWX[ZXYSHC>D5429eewi\\ZYiwbYQH@ABBA=;;85-7ckB0=B=;619AGU[YW[bgjjghiop_PTOJCEC78ObdY_db`_dtvjc[R^TKWjmrlSLI@<<<;999=DB@BCCCCFMQH=::87=CHVaa[T`b[?BuU@LXVG9GL;@n}rttyʥ_K\\fS_n@;@;999:>??=<<<==;9:67?A@CIHA>ACA?=;855679==;:=AA?=;?CBA@BBBBBA><9:=<;:<>BC@;:;<==88BHHB>AP]YTTPD@JRTYQ@A>qV?HSOBCEDFYª¬}^NKKUsx{wnnpfex{xwpjbd]DDABBAA><>@FPPbi`c_`lob༢יnnUJZbc^UAEKKLJHE?;::62599856899989:::;;986;=:668:==<88:>?>9=?97ATeZE??>?A@=9<AGIBAA95323312=DCGGA?BU\\[[M@?BFQYXXZ[Vbp^WSNPKCCEED@;;=>=?@3lYzlOOZXWUU\\_YX[]jiiywrϡzru{h]X^aWJT]qDHOFOf[EnVNF@??@CCA?=;;9985Dssk`XdLFB?<>A>9752346778::5;td-9==Uoj[UTPLL`|ypoldktugrxZMPWk}yotpnwtb^`abaidVaYaӦ\\?Sox^DEC:8<?ABCEJORQOOLLQVTLEGMJAAEhc_`VGB@@???@@@??ABBDEDCCBCEGJJKKKLLKKLLKLLMMMKIIMRZbkoonomkjf_XTUV^a`ciklllmoommnmmoqtrkecefggffd_ZQC@LW]entuvvuuw{|wmaSGDGIGGHHGGEEEEDCCCCCCCCBBAAA@@DLRVWVTTTSSRQPMMMLKKKKJIJIHHHHGHGFFFDEP^[MDDMX^`^XTW\\`cfggfc]`jh`]^`eijkmnpkWBAO\\`__]\\\\]^\\WSacNJWnquyjkkmn\\FN_JJd^Z`\\\\]QZoy{iXX`aXZ_b`[X`hig_PPRQXWRZcbb[S\\`ZW\\WMTbf`^]adhiprgQKISgYW`[MUagiklv~xljl\\R]hged_Y\\_[Yanrx]XZbhtW1;;::9878878:0T^\\mjLCRSSSRMJFA833455555555555555555555555555555567876668?H]wd?6877777778888BEB=?EʡP@NH7dPDDDQUX``N@7<PYG43@PVOMprcfdUKKMOOOS[]XUROT^iiqxm[SRQPTWWRNNONMMKJIIJIIHGEEGHHGFFHHHIIGHY`cm}ı˹©ɚ˿»йmrĔ~çù½ʷǼͲŷѼովɾʺ־ɽ˹ˠpmn{ysVchKSq`aipxXcghdjvhyv\\xuwukmooo^kd^`}wkyon{QNQ]\\V\\U}hl_SWKjZXPupko``VLZbyG[WdIP[Mps`M46GFOB>2((LlVWac=86<CFNLDDJE:WR25<JIQE=RaO^]Sq^P<Fz}di}da]kEHd\\]`iphN9YWc\\ZkSvkle~vN\\r|xxXokhtlngjgN^f_[bbYPIQQOORNXPOUO@ITJ@A=766@?666128;>;79>=:;<>@CEFE@>BFGFGJMNRWZZVRSVUWYWTSRQRSUW[]_[LA1=C664SooifZdmhkR82<CEA;69:54SoM26863/3<JWY[^\\^YW_ovohefaRZaN<>?BFKX^^`aekllg\\ZZ^hkj[OXlsncRMF><;;;8;>ABCC@ABCEGHIMD:::;;;=CRYVTgbrNz@8@Z`B4IOMcosonury¹oqnpflr?8:8>HB:<??><;<<;989<FNKEAAA>;=?;78;:76658<==?@@BBBBDFFFGGFEEC@><=??><=AFHJE@?==<>?@HIHC>ANRD?@>?Ob_W_lSF?;S]OADDESexwy۱koTNILZQix}th\\POXgqomja_dj]@E?BEFDAACDDX`ZX]^_`_`fqäyRRZ[fpb]QINOROH?=;:878::;<;;:;>AB@<::8866;>82007==77;?@<449;;BO[Q@?CC@===><GJIIHGC7335666;CFGMHCFVO=@E@?DFFHLV_`[lq]UUSNIJLKKKJFEDA?A96ƒ~tl^VXVSPPUeqpjelynxyÄfssȐ|{zvxlif]Y`aFAFY[PU\\[Y[NHhpgTD<8??@?=?A@?>?@?Plkc]HB76<DFD@<;;=@ABCCDC=6no$1,2?PUWT[^XSZwc\\fthgoh^YNQVOST]ژlfsalog`ceZ]`NbcJLMVXNLMGBEE@??AEKMMQSNJRWV^^TNMUK>>d]OLKD>>>=>??@@??ABCDDDCCBCFGHIJJKLLKLLLLMMLJIMTX`dhmponnkijiie^[Z[]_aeilllllnnmmmmmlmpqrohegdceedaXOP[debelrtsrruxxyyvsgWJDFHHHHGFFFFFEECCCCCCCBBBBAAHTZ[[VPRTUUSRQQPONMKKKKIIIIIHHHHGGGFFEFPVMACNX^^[WTRXadegggfec`flg`__aejlmmnpkQ=ALW^]Z[^][XUS[`XOWs}v\\o}vm[VffFKk^S_filvk[ixvofZbol]XZWVVW`lstn_QPY\\SQZ[XTKO]]XV[_\\]c_^c\\Zbb\\aa\\LBFDHVf\\NGO_c`fnpuk`icRP]jgcggeccaa\\asq]VYckuxqY2<<;9::9987974rcBZn\\?HTTSROKHD@823455555555555555555555555555555566654446<CJddF77877767777788865=<K]:HL</P47:<NYUMRLB81:HL<8CMD;K~cV\\ZJGDBINNY[XXXPOZb^]iqiWLHJRXWTOJJKLMKHCCCDHJFBADFGFFHILOSWPJYckq̹ʻνƥķѵèvo|͵ŰƼĳʭ¼¾ȳǰ˪ͱ˫Ԧzvjsu|ZfgEa~td``w\\``bZTZplhSvoxsgkmzi_`pN]usq|zimTYCO\\mYfxt{^WQNQ_KOkpiygaRJ[o[Pm`bC_R[}\\QED[^8TWC<2.MlPQFG3;>:AI<FC8;6I^O35<PAAEGNIUMUTei[`SedcaXL^a?UU[hsZ[jluOlaamUacny~vohioz]ncgppkip^GicZZg`YGLMKIMXMWHNOOP]aRGGE;39C<463/7@@93:DA:=@<;AGFB>;;CFFDEHKMOPQRQPSUUWZXTQNPQRSSSU\\a[T=7C>@GZ^yukk\\gj_kV80:?BA<9;>8>YZ866,,6<HV\\_a_c_WNP`oyue\\ZTYrlJ=:CWXMXfhijkjlqdPYb[curd]ZZ_[SOMHCA@@??ADDDDDCAA@FMGBMOEBFF<;CMRQRY]W{ܳrXD6UiL6DOczvosuzpͱse9=CHUaVFA?>><;<;:999@JIB@A>::999868=>;855:>??@BEIIHGFEDEEDEGFB><>BB?=;<BIKLJHD@<;>@BFGEB@BFA77;;>Q[QSbtWH[dIB?@Qelpead|zqFKPMLYUP[y{rcO@EVep|ydZQsSMOAQSME?IXSR`a[baWOO]}bDCKUozcVKSgjI<=>;<<:89;==;;=ACDDBA=:8866@KKE9.0597:>><723<<8:<=CEEGC?AISXQNLRVJ@?84443347<EMVUJBH@+/HLJJID@FU_b`ndXTSSPLNQPONMKJIDBB:m~rS\\XRlnQ=>YtkrrkvcRWWǉfY[`j{wigikk_ciJ>>Di]\\diqrniirqJ\\pqU8<===?@@?>>?AAYWa]G><9;ACBA=:;;=?ABA@?=H`y`{U56:?GNbdg~th_seqlV^UGJTKcܹ}owi~nYYi\\P^VKMPanfbb\\WRQPOPQLHEFHMOQWYRR]]RYee\\URIDC_[L?>@>==<==>>??@AACEFEDECBDEFHIJJKLKLLLMLIJMWbggfeglnljighhghfea^YX]cgklkkkklnnlllklmmonlkjgb`dfdb^\\]a]VWdrvpopsvxxwvvwtj^NEGHIIHHGGFFFEDDCCDCCBBBBBGU^YPKMUXVUTTSRSQPPONMLMKIIIIHHHHHGGGFFGHEBCGVa_TIHQ\\abdfgghhhihfjlfaaadikllmllkV?>HPRRW]ZYVVW\\]\\V^~pf{`a_covgu|cY[dnv{{ihz|ym[opZV\\^ZXU[ellh``miYRVRLOQXa[XV]mtoke``a]YVPY_\\UNI@H[WMGL^hd[[accYS`ZOV`_]cljbdki`X_duysaUZaiqrl\\3<<;;:::978;1KzLHgmJ>LSTSQMJFC?6123555555555555555555555555555555555567877AD<8468776666678788889C:Qw58B>6+x֒C;87>S^T;7>C>635<CDGH<5L]KMOJJFBKOMVYVW[QGWjaJENRNHBGRUSSQJGIKPSOFDBDFGECBDFFFGIGDRopWlѹŽͰΥ¿ůѹȲsy{˺ĵŵ̶ǻŻ̺ĶíǺϾѼѺνӭͿſľ̨Ө~|efm}ihsklrqngu\\SSXM[]nUYQuynzyonp|a_^Obrlv{cobbcO[ruzxevSgyYYM]UZep`zhdSQqqOgjiYK_Tfs\\JJMwi@QJIWuWGJ?C/5.AcI?F6?(/86=RA41FR=AWG5=BCGYpaPi}myaUgyJ>kJDLTphiV@\\adPtSSkZto|mvbj~[l^dhwzkqpNLnYT\\dbSDKIFCQPIOFJOVafaTOQK<7@@:7747@E?13CI>=FF>@HI@;:<AHHC@DHJHHJLLMLMOPSWXYSNRSSTROPUWUVTBAJTdgvRnyfe]lmX_Q@8<=@A@>;=?A@:1600?MRXdhda_`^YYdfdgc]\\\\OIYbXA9TfOCZihjpldho_QbiSNowleYJFHJLMHHHHHHIIGHC<COLA=ENJELUSLIIEDEILLMSLZм֭ycOViN4BO`ttzyvparoVdg^`ec^XG><:;=:9999?C=:<?<89979::<==<:66:=<<=BINMFAAA@?<>AEFB=<@A=899;CLOIBAB@><<>???>?@?>;:=?@BKH@M_`\\`CDDMf|̭vjfVGGR_pJQROGO`Za}pplbL@COayhZVJavWK[TE:Fb`NVdildONifM>:MYsd^^pz@3<=;<988:;:::<@AA@ACDA;7668CMSRD4/034:@<627>B=7668EQICEAATdk`LITQ?35653210353<NXTE7640:NPOKFJJNW`_Z`j`^ZPJNONPPONKHGGEFD?zlqpiaRM^mv__wvqygWZw^XKDt`SOP]nqkpxvxqjTHDBDHSZRb}|wqsxdSC@GeqC:@?@@AA@??>=7[R>DB<GGGGFFB?=;;<>>@@@:E|ۻٚ?6DMwkxpxzxoXnssw``[EAPLm֤fyin{Y^ZG@GHIbcWWY[[XVXWRRRPPOPQRW_a]]a^UW^ageRFPVXVK@=>>=<<<===>??@ACEFFGFDDCDEGIIIJKKLLMMJOYbgb[Z_cjmlihfgggggfgc\\VX^dhklljijjkmjiikkkmmlkllga_bfdb_WNJHN_nnc\\fsvvwxvvwxwrgaXJIIIHHHGGGFDDDDDDDDCCCBCJUUKBES]YSTUUUUUTSRQQPONLKJIHHIIHHHHHGFGEEEFJUXRGDO]b`acfhhijkkkiilkebbcfiklomgnoTCFFBEU[YYZYX\\][XZvz{cELOV{{iuiZXX``Zd~}rckqZai_\\RMSVTYcnng^XWUUTPU`^XWY`oqofehicWP]fc`SLFGOFGOPZmnaZZ[[WW]`[T\\hjjrqgaiusaZ_XngX]glnnq]4;=<:::::8:94kjO^qd@BOSUURNHFC=4023555555565555555555555555555555545567853:@705877666666677778:=;7BG:7<;952ZX6B=7>QYL:27?A;518LH@<:6?kvWJIDHMFEGHKV\\YUVQ?JkmRDFGC@=EQRQTQKGIILRNJHGDDEDDCDEFGIKMLX|}ĺȷƚùʖƿŨе£|zvwͼļƵ˻ƵƶǶůɮ̷֍̶Žſͧͣzxd\\esyvrloXYWW[bx~qluĸ|Y`DIJxnmz{yl~tW_lYgxmitTivE^^Ri}ajhGz{K[dS]XnWtba]XuxaSokhQP\\Xg[GXI`\\OH8P`aN:8776;=LgQ9@LM0:8;5C6.>ZR@NP0\"056>PwpTNkPskx]DF{?LUNDd{]I>FUdttbdWL`vZbrgpjsyiqWn^aixpuugA__QO^bcLBJEAATAIDDKO\\fdYPUZM:?G>9:99@ED47>JC<FH@?II?79?DHHF?=CHJFEFHHHHHJKKPVXSLNRUVSPORRQSWXSRXRdidPdpiasv\\XID@>>@BBC;8P`@0/4:HUWW]fidaec][bhaYWTNVUD=<CFCN^Q?D\\e]\\dfbdeY]icJ:ZvulZG?AHJJHIJJKMNKGHPNIVWB>DHMPMORJFFD>CFHJNQH}yPWdF0?Zu~p||xuxp^RUfu~lgoi^bmlkgWD87<@@=:88:=>=><99;;9:;<=<=??=;;;9;>DHIF=:>?=<;?BDEB?@A<6679?INOJDAA@?>>????>=<=?>>?BDDA=:>VZ[RQKTͯmdnaKP`tē{le_xvgcf[IB?Ec{mTPPPOONW[F?HTUPV`__[PYsiRKDSZ{jgso<99:<=8479;:68<;;<==@?<84227=CIJA865229==83<DEDB?:8>IE;>=4H_h^LJOG=525548AGID77DJC63444:DB@?AMPO[c\\ajROQMJLNORTQB5Dzʏ_Zkf^gbǗul`RP˪f:KUTLFHLDPWXhbro\\TLBB=;IUW~{|psJ16=BPkpK:?>??@@@@??>;QR:><7@NKADHG@>=;;<=>?@;]?LYδ]˝pVKJ\\fivx|iWTN>;EGc߯]PW]o~fheFCJ[bjgb]QSTTVSNMRSSSTUUT[bbabb_[ZSMYeZP[dRPIC?>=<==>>===>>?ACEFFHGEEECCEHHIJJKKKLLQZ\\VOKKTakiccdefggggfddb\\VX`fjkmnkfeggiifgjjjlllmljhb_adcaXH@AFT`]UWalruuvvvvwxxvohbZOKJJJHHHHGEEEDDDDDCCBBCFGDAFS[SKOUXWXXWWVTSTSQNNNLJIIHHHHHHHGGFGGGHJMHBAHSUSXbffgijkllllklkid^ce^dkkifgmlZLLB:M]_\\YXXZ[ZXY_aU^aKNaS[[R`a[[^`bifw|yj_]mh``WYUU\\^UPT^^Z^abcd^SMRXXXOL[kh^hy{ti[bdaXNLLMNIRcUKS__TSOSX\\eYVSQ_sxzreahqrj^][mj[^pocl}\\6<=<::::<;<1IvVXktTCLQUWURMHDA=41445555556765555555555555555555555444553456@C5377665666666777779767675877548=9>?;7?OH=;;;=?:75HZD99998FSLIIEHMFBAELV]ZNLO@?Vi_LGFC>9DQPPVOIIJIEFGGECCCCDDCDFGGGOo©ȹļκ~żˠɯs{qİ˽ÿͺʫ´˵ŵҽϱɡϷٛɸͧȨppn\\_gr~w}mn_IHgvrmVWp¶{uvxmhilt~tjdR]yt_ihhpt|[amYESO^u}xX`Z_Tu\\H^ynPy[]cQ`kXUkr[MUYZ]LSXKbk\\^KC?NS>9:?118DA@FH:FUXK^:/>M87NTNOY:#&=S<;>Sjigo{_lal~k?Eu_iMI{dWXPc`YvSTMlhRvnOnz}ckaYla\\kpt}i[DmOKL^``FBI>?HLAJ?FJS\\_ZROY\\ODNPC>@@AEH;7ALJ<@H?7CNC46DLMKG@:?DHHCDFFEEFGIJIKQTPIJPUWSPPRTRRRWYWSD]V]FUzjk|~j[PH>38ABDE:AnuA-8DPWRQW`fib_nfa^`\\X`^YI864:=79L]L9?E[dYJP^feaXV_XF?L`f`TF@BGHIIIIHIHIGB=Ri]UQA?>;JZTGGEIKB?KSUWXToئ^:S^>07Uy|jcV}yn_VVUZfovdYW^a[\\o|rgd`Q>69@JQI626>AAD;99=;779::<>AA@=88:=>>??=99;;:;?CB??>@DA759<=@FNOKJJFC>=@ACFHF><AB@@BCCB>;8:Mo[^`iGKz|uȘemgfea]Z]OCABS`TGHJLNPC`}VfGPPOQTWQONMQM[н_TOTaneyX@B86@A:68::968;779;:975443479:;;8776335:>><=BFHHF:39C?8997=MY\\UNID=7338>HY_SE=75333445856653CPQILUkҬgQZTOQ[guzz\\red}cpͬ|g^VyUCHIIIJMJM\\]`{pLPVOOOJ><ACJjsI3:=ACO[K<>>?AAAAA@?>>FJ=8?>=;BKG@=??<<;;;;<<><@DPKxӇٺÛgOSWafqtlb\\SOB55;>DNTN֒UQXalzԬmmooqqrrnh`_XboePDLRSSUVUX\\_^_ef_`gYMPW^^]^JJE@>?>=>?@?>>>??AACEFGGGFEECBDGGHJKKIJJKOMHDEGKS\\\\VW^adefggecbb`[VZbhklmomf`bdeeefhhijjlmlkicaabbaXG@EKKIP^inprttuvvvvwxxwmb_XKHJIIIIHFFEDCBBBBAAABBA>>DMUQFDNWZZZZYYYXWVTQPPPNLJJJHGGGGGGFFGGHGGGDCDHIFN^hiijjjjllnnmmllibcb^eeQRZXae[QKJC@aw_IJUWTTX][SLMakk][fjj_cJ5Tg_u|bgplpqb`kmklf_[mxslbVOR[dib\\ZZZZ_eghicXQU]]XMN^nm\\Xbb^ZNNRNHJUVLKZdngYR_f_]XUTSXQTVR_s~|ticdijb\\`irqd\\[aVTl^9<<;;::;=>74gnN\\mfEEPSXYUQKGA=;5345655555665555555555555555555555444558>HKHNK81885556666788677888;A:?WG6663/0:D746BL@7<??=>97>Ya@9@?>;:AGHHGIOGA?IQTUOBDKG@EYeXFCFHFKTVVWRHFGDABBCCDCDDEDCFHIILPqпī±|p͞¢ho{vǶ˷պƸġװдòȬҮͨȺȹwnthZ_\\k~vv{zikIVRn}ziNH\\tĽǿ÷ɵqpmzvUU_{kgk]kwxwz`j|uRBRRotjmRsUktChwhQwǺ]V]IWeRUkbMVVTWRT`OXSWvhFBNM_Y>G>09<CA<;23;AFHaJ9H@6>CFERo7,9Lx}[TJRQVv]viizH^ztqD\\~dopBYhGY]ndQpeHuyP{Vdh]Tmgsz]SUgEENZa\\BFH7>P@EF>HMQVVSPQX[VUYTIIIHHIG<FHOC>EA5;MK83CTWSLC;?DDEE?ADDCCFHILLIKONHHMTVSQTVTSRSUUZ^YebY{fQ;Hyzcqomd^WMC8<DDD>9^_5=NVXURXcjntf]tnjoeQDMQTD648ISGFOKAABE[l`DBZmplU9JTLIJKMKE@@CFHJJJJHHHJD83@clXG@>72A[_UMCDPSU[]__^f͏_D4JQ:12Mfbr}xnkM`q^[ckhftePY^c_W\\ovnhb^VCAEEOYYI94<@VcD:;8746999;<>=<989<=<:9:;9999:<?@>:89>DC=>ECB@?IKGJOJ@<;>ADHHFA>BCBBDDCCDD=APtZ^a~Ucr|wԠ]a_KILNMC=9GUUSYSFBTcRU輙̍DPPORRNNMEBB=Q辍uWM|qd{wljP<<A@<::<===;74455541124578897675312347;?@??DEED967;777;FMMX`ZNF@=<;@C;>IH>8998754679;77873AQPG>>^ʁV^hmkqӻ}\\ǭtmddƥmzo_W`ԍyYDLJDHJLOOMPSoWKAEMRQH5087>Sgģ|Y;:=<ADAB@>?@@ACDCDBA@BA96>B?;;GLE>;:9:::;;<<;<9>N3;0W߻hbjrb_^ƩsXKHGF>25:<6@YPPү];PqxYVYXRKIWjoqqd_alSCQUUTUSRWac]`fd`dgbXQQai]XFD@?@@ABBBBA@@@?@AACEFFFGFEDCDEGGHIIJIIHHHFGIIJKLMNXbbbcdeedcca`]ZV[ciknonnj`^``bddfghiikkjigda_``aWHDFEDPgohfouuuttvvvvwxvrrgUJHKJJJIIHGFDCAA@@?@@AA@>>DHGDDIPY[[\\\\\\[\\[ZYVSRRRPNLKJHGGGFGFFFGGGGFFFGGEHTbhggijjjlmmoonnnmmkcaffcJ;KXYLINKLMCYt^LUZWPMR[^^\\WTUYW|ym[gj\\lroZX[`fcXUOP]isigrxy|u[OIHR][Y[]\\Z^b\\VX]e_Tcl_Y\\fuoUFMQNMGMG<EQ\\WIDHS\\[PQYZ^e_OKORXWWctysohfjlibivri^ZTUXby\\9==<;;:;=<4Kt^QbpX@KSUZ\\WSLFA>:545565555555555555555444444444444445656;JQPMLKC63777777667997898779IQHad:582BU<<:8@CBA?@CA>=:9?U[@?GGD@>CIIFINPC@AJPPME=AFIJHHTVHBFQXYZ][WSJDGD@BDECIWNEFEEGKLMRa}ǺɼĳǾouɻ~icqjǝŸ̡»ɩǯۿȷǩɰĿʿڿ˩ƷĢssx]bcTkut[`cvWSdqnrnTMIMW_üϾzm|zNZpyrmf[tv{^zvwvBLFg}y\\}j^gRzOjuh[n¾^OXHU\\LU`KOWTVPSe]T\\JdX>GSkoNF2@CB:?82$/4:3FOADH<>F;?M\\w97OLdpYSDF;X\\\\zeyqZ`x͘vdzcXs|}iIwOR]`eb]\\bbTh]bpaTOfekuSQfU?AQRaT>NB/BR<E>ALPRSSSSPU[\\\\\\TRUQNLNHKHLFDGF:8FOC9FV]\\UJBCHFBB?:<>@ACFHKMNJJLKFHPRRTWVTTRSX\\YZ`bc[OcWK@Hqxdt^TUZZMIHGGJB7LztA8S^]Z\\cimnnyi`qzoaP;,8HLFDBJebLD@>HLCFZpeGDZswH+ASPMSWQI?8<EHHKLLKJINSL8/5Vg\\JED;4?UbbWGK[`a]]``Zҡt3,AB;44<L[ejīu>W][\\eljkno{igoXSYs}phha^ZM\\fJDJU_F9;?cb:58H@9=><<<===>@@=;<;;=>==<<<=>=9788;ADCGOSI??DC@ADCA@?<=??@@?>>???BCDFJMJKxvq`{]Zgbcxy̰qKmk?BDGJA;=DHGMXLA?S=@FMRQJLPD;@A?KK?i߬{bt}kdvxwG9::;;8<BHKF956666443235799:::;:7521455678:=ACBA<9468;;?JLSWWSOE<=CGMJ5/10137:<=<;988998864<KJ@@ADWzçlgjvubjΞԔktYY|oh_Se[VpV??ELFCILMMG;DvBI;?IOPK6-6873Qİ|\\K64;<;??<=?@AAA?BDDDDCCBA@>;>:6AOK@;99999;<<<==>@5cӣN6761A̯U`u~hXNx͚`VQOLHB858;9AOTQWp[:`99D@<=ALctuwo[`v}xYJRXXVVQLUchgdefijlngYSbhYTGD>?CBDEEEFDCBBA?@BCCDDEEEEDDDEFGGHGHGGGGGIJIHIIJO\\db`abdddccc`_][X[bgggiosk_[\\^`bbdffhjjjhhhc`^^__VLIGCK\\`Y\\grtsprvvuvuvvttnkfPJKLJJJJIHGDCB@?>=>?@@@??@A@AGMQY\\\\]^^]]][YYWVUSPNLKJHGGGFFFFFFGGHGGEFECLZb_]bhiijklnnoonnmnnecgdgcGKiZBJOGFEOR]jdff[W_]\\_]\\]\\X[]`iw|nxgXQXZZYLMUPX^t~vlqcYPNTUWVTVWY\\XSRPUgs{ymja_hbJ>MYRS]fUDGReVEHOXPHHT]Z[\\TJNVZ_]]bm{r_`ddgihiehqtpg]V_jlqd:9:;;;;;<77cnV\\ejGBLSY]]ZUOHCA<545555555555555545554444444444444445557:=<989>HA32777777678789;:974Hg_RlQ462WT7>GQG;;@HLF><;:<JZNMJIHEBEJJEO_YC@@DJMLGAAACQZNFJLHFNX[[^YRNOUQFDIIC?F^OBCDFILLQbzɾ̵̻˲oz~~~hefsi­·ǺïӵԪȫưʼƮӽʨƸʨ~wgekRWjy_cq|^W^vpjnR\\PQ[Kyĩ|vuaK^xu{m\\awrmm{SEMZlizixxNjXlxqii|]PYIMOLQSHPS\\TKTaSSPK_\\CCPGs]NA@L87138C005O8I;:ICCQO4S|`7@_fk}}ciaQ]RPYtzyni\\Ծ{pJC~jhvUhfQdbr_`[kaWtYOT\\hkpMUjD=>QPaL?O:/LL:E:LOSSSTUTOUZW\\\\VY^VOPORMFHDII@:CMHAM^`ZXQFIPH?@B=:99:=ADHLMMPONHEKSPS\\\\VUVVU[b]Y_da``RJK@Fgtcj]MPUVNIHGHJ:=jY=Ncgaaipqsutzm`blZ=<=2FYQIV\\WRKC76ARH=I]pcEG]urD7@SUS[daS>28HNLKNPPKINUP68Rli`RGH?6AS[[ZW[^]\\[\\___ñ緜i*1;<46;;Jh{âߠ8GJSdmZIYmVSku}nUfd^cbefdljE>TghD:9KmH/XuO;CCABAAACGHE=9;<<>@@?>;;<=<9999:?EHLQPKGHIF@=?ABDF@:;=@?><9:;=ABDEEGH_קyfF\\ez{yxy}q{ǘlkg@LEFF??ADCFSXN?@;cȬs=?DLPOKLNH>=<;GDN~~̆΄qѝwcZjq^KE957887>JOB:=><9999635679988:;:977555333579=??@A@96:<;;<?LNLKID@DIC<=:55666679:;;9537:9879;AA@FIGA=TϽ}}zymg|zlkӞς]WLNLKO\\peSaӋJEF>=<>@@AGKNMG=KuvxүTED:;>FQP@9><:?aʸmA=207;=>?75AB8<A@>AEDCCDEEC?:8847HND<98878::<<<>??C;[өj8=A=8771g͠vUhqi[YQWlLTYRKJG=78=ABELLKBC@=CAHHJZnwy|jOknhRJV[XVTNGNbtuiehkjl_PTTWZTRIF@@CEEEFGGGFFDCAAAABBBBCDDDDDEFGGHHEEFGGIIHHHIHKQUTV]_aefdcca__][Y[^b_UUfrhYUX\\^`bbbdfhjjiihc^\\][[VMHFHLIGSfqpljknsuvvvuuusmccZMLLKKKKKIGDBA@><<=??@>>?>?@BEHOX\\[^___]][Z[ZYYWTPNLJHGGFFFFFFGGHHHIHFBAFKLOX`fiikkmmnnnnnmmnjegificjqYSa]`dNONK[tsc__nohaY[__Z]bccvk[clYV\\VTPKQc|uinlbnhYW[`^[YX\\^^[ZQOgzvqql^ZZXK=?NKRihVRQXo^MakrhTJ^ne`\\QIJSVY^a`]gq`\\jjddfdb`bhmqph_bmqtl:7::::;;;4Ere_`gYFJMX[^][UQJDB<5455555555555454444444444444444444444566433445BJB72477776678971BZVFJ[^Qji@57_;BSRD=:=GNJ?:;:BSel\\FDRRJGJIBMfcVPEFLMLGBBA?Na^PISUOMORY`XLKXcVDGOLEDFHHHKJHFKLRt̷˻ƛǠvzfklgh©ɿº³ȻαôŨڼ½˵¶ɻؽɥȸͭztjdRM_\\rrhhx}_UVytjrXZYMf_uȸ}~pRGiuotiZkpr~{abpNUR|qixv]d]do{ev[RXHJKLRSKM^`JLT[ZZIKOLLQJ<WjXUCC@5<78EJ10,C5PDSY:>SPMgLF<Mcilqpq|po_`sx|Z`VŶqk^Vthus|fStsZj]Z[SlnmhbrOQVXimbLX\\D8>OO]ECK5:PA9C@YKPQRTVNKUTS[[\\`\\RQRVUJIJKJD?@IJFPbbXSRKITT?;BFE=7689<@EIJNSSMGHMOPS\\]\\][YY\\dc`a^]\\ZURRJ<Qzleb[TRTVOIFED:6TznJMdomgjqstx||hUUS=1222ARWXRE7/;LGBDM:9J_ocBGalqo]M<R_]^^[S<09LTPNPUVKJLNB9WtzjWJNC=BOW\\]XSLJVXYb`gոӿ[1@=26FGBm«PVXZ`dTDNkO<MikbzxSW\\_cflbbKJm~iF84hnHU>A>?BA=>EKIC>>=<===?@>;89:::999;?FKMJIPSPNJA?CGFGLH?<>AA=:88:<ACCB@?Trz㾥zCb{}yw{~}xñvf8NRRE>EDCFLLLWgtrlκdBCFJMMLKMLA:9AMDcr;fߩvƌtrR`my}|wiWC879:@HDHMG?;;;:546789999:;<;:;975346779;<<?AEA::::97;FFGJC=AHI=129=>=:65578:;;989;<=<:89@GIIIF?aãi|ü~rcW[46AFJD?Pij]^zZMECCB@><?CIMOLF@I]NdlugFF@?;;AFHECB=;Z`Jwh;3:99;==??30CB18A><BFEDDEFFEB<744AMF>;987579;;;=???@@BIfqKBFDC<899;KZHMmBmd\\dssnWPU\\_TUVXSEBD=79=@EJNOIUʩF@BBDFM[mxvrcQrse_EKYYTUSLCDbqmjfcdUDGOOMQTFFA@CDEEFGGGGIHEDBAABBAACDEEEEEFFFGFDDFGGHHHHJIIIHHLY__agfdbab`^[ZWYYYTKGSefYSVZ]^``_`dhkihhgd^ZZYYTMGEHE>Kesodelhbivwvvuuwsf_WQNNLKLMMLJHDB@@>===>?>==>>??@BHQVX[_`_^_][[[[[ZZXTOMJHFEFFFGGGGGGHIKLKFCCBDM]efhhjklmnnmmnmilnliiggimb`nlgvrSZgbnxihw|xh_Z_^]^cjs`m}q~}o`ks~kctdXTQWdoVP]jkb[YUSYc\\LThnkn]LZkkde`TU^]J9>LLQXRKM]ism]amuvl\\[]XVUSQU\\TQUX[^b`[ew{sklog]`npmmohWO]tl97:989:;78_ubecfJJKPY\\]\\YTRMFA;43445555555544444444444444444444444444454455547@GE:33576655647?Tqt_HIH=YpS80_̢BGSKDB@@AEGC<:;JZhrYAKSSOJJJ?EbilWGINLKGCB@=EW_WNUZUQPR[f[IN]cTDIMKIGECNYYVKLL\\a̵˻~~|~fhlnȳľźŽż¼¢ӭƽش˯ƶȯ޺ӹɩɺ̱v}miTNY`c|}clmVOOpzlpdTaKggvƺŶzw}HIymhmfcvcxwyzw_SkTQnws{yngZUzg~ewYQTEGEM[PFQdUCPtjkT>GOQTRHSFYg[?:=57>9<=5.-A1?MbYBQ\\Z_ura^][TZV^e^av{qb\\[t~vYakkAI[R[SOhX}rflYsHGPIu}VygMWP_ciPPVPD2@GNW@EG5>L6:?N]HMPQROFHOOWY[`YQPUX]QJQOOJHIJKKR__UQPKJV[J;@DJJ:45666:?BDHKOLIKMLNRX\\_a^]^^fkif`\\[ZYWXZTPphof]HDMZSMMD4-Akz]O_njfpvuuvyzzr_RND861-0>RUI6,0.<bpbRA39I_mfDC\\ZVsjCDteSSUI808IONQTYVJJMEBOnv|_Y\\TLCIYaXHEFJNOTfe]uτ~F@@3/DUWu\\RSRQTUTSaSJcrzi~evqahgUDTcWd^_vsapnYxWA>77>>;<EF?8<@BCB?<>@@>=;899988:>EJJD;D]cOFA@FLKJNLB<<=;;::9:=@C?:=No}|yzyzܫR`i|~zy|~~v|Ӎف6Qn_@@BB?ACJmĿʞDBIIJKJMLB9;EHA[yT0>ȵefvvN\\foxmK?ABCJORQG<::9646:;97899;=>>@A<85356779:::<>@A==>>>>?BCFKF?@@@<::BMH:8:::;;;<?CEGBCED;5:DLJEC;=ȸŻɣ_fsGT,INDmw;CIGEJNHHTXVQSZZWRRQQKA=>EKMJGEABECLK:<=ICA?=?>>ADEG>EjK,17@?9::<?=<;42AE87>=>FIHGFDBEFGB96<FHC>:865589;<<=>>>@CEGGEBFOTQJE;8:AKMLH1-5.>b^OWUYWYZY\\\\ZZZRA9<;8:=DLU_^Xp\\>CEB?GRVizmge[Yio_QMRVVUWVPNWj|wY=?DFIIKCC@?BDEFFGGGGIHFCB@AAAAABCEEEEEFFEEDCCEGGHHHIKJJIHGO\\_]bifa_ac`^[YVVSOMKHJT\\YTUY\\]]]]_cikiggfc_ZXYZVNGEFDEThmdahhYYmxwvuuttqfYLLMLLLLMMMKIEA@@?>===>>==>>???AJOQUY_a^]]\\\\\\]]^]]ZUPMIHFEGGGGGGGGGGIKMNKIIFIWcgb_ahlklmmmlmmjknmjihhhjUTd]W]mxccz}zwZU{]^\\Y[]^c|us}j\\_wxs^WQ[eonijgyqhdcTBHRKAC]plib_llfcaYN\\l`NGC@CJHGJDJaihecdglig_SVZYZapyiZOXagmihn|zmlpg\\bqtvqukDHr|[97:989:93Kul`ck[AJMRY[\\[YTSPIA:434455555554444444444444444444444444444444444465:GQJ:7:86523;Ss~qlbOLE/=hd@0nּPFRLJJHD?=AA=;=GQ]j_Z\\VOONLIBD]ijODFGIIKF@@>>HSTMNTSSX[`iePP\\^OEFIJGFGOX]]XNVen˾̴ŷvm\\hq~ž®ƿɸ¿ÿĻõͿͱű¤ԯɬ̮ĳʝ}ܸӵλȰɾɴnopqZYffYddXQQi{onjWeXli˾xwyu<Vxybilinl_st}wgaaj}iSxqrykskQPk^zfy]OPEFJYWGHXbJ@WligH>LXROYJS:O^WE9A;6864=E.;ME>MFWgmb[OROWTU^[XSUaWF^t]GZfk}~qXNjth|]54HM[JIsX_~s\\aeFCBH~{mir_QMF`ceKPMX7/BDQR;KH8>B4:BbUJMOSRD@MNMQT\\THOWW^XNQWTLOUTSPQYZSPNMJQaX??DFOH3244445:<>ACEGILLLNRUX\\]\\_`_fkkgd``^][X[]Xholwh^G<F[UMF6*2Uvq\\\\leT^twsvutrldZRI>6207@IF723034Ot}ub>07G_lfG>NPNouRHtR@DC:61:QRNPRWSHMMHLlzj\\b\\TJNXWMGHKKFCSkgMqpcs}ac{qbaqV=92*:RWf_GIIJIJPV_XWw`ESris^fph|vRW`V\\dm{lSzzW>8149?SRD<416:>EE@=@AAA>;9999877<BFGE?8E^M7=>=JJFIGA=<=::::99;>B@>Pl|{xwvuy紖XKTozusrru{~|}~|xrhvѝʣeoGLEB<CDCPiγB??HMJJJHE@@A?BE@:8JͺJ^{ylvhR]cdrtYJIJKKIIJH?::88769A@97799;?ABCD=742345577888:>CAA?>?@ADGLRQOK@78=ES\\M8;ACB?;>ECHU[VOLIE@CILHFD=K̴k<BF36S9F@FRzpJGHGHLRRNIDACELXeb`afhZKFGKNLHHHDCDDHF:<LH?EECB@ADDDDA^_6;;>@=:869=:::55@D>67;<GIFEDCADEFF=:BGEB>:97679:<=<<>>>>?CB?;>FNLHEA==AINPQE63243-@RPZ]mdM[Z[_[[ZXO?9::8=HU_ippk_E[sELIIGMQRethdaUMKUYXY[UU]YXhtŠiBHURPAA??BCDFGFGFGGFECB@AAAAAACEEEFFFFDCCBBDGGHIHJKKKIHGPZ]^eje_]adb_[YUUPJHLKIJNRSUXYZ[[^adijgggea\\XVY\\UKFEEDFP]cbecWWhvxvvuvtnhf`RKJKLMMNNMMJEA?@??====>=>>????@AFNZ_`__]\\\\\\]__``_\\WRNLIEFHJIHHGFFGGHIHHJOPJP]^[[]aimlklmnmmmnmjkmkihjgdZE?AS_fcU[lhXGQ~of`VVV[\\dwpltrpea~kfe{h^rww~obhv`Q]P=ACIVUUZaglnd^XZs|hdhXEHTJEE?ALSW\\ebeiik_MRUPP_qysd[bdbacjotwsppme`enxxuxqU_X98:989:48gwaaemH=LPTZZ[[XTTTMA94355554444444444444444444444444444444444444444567G^dUF=4264?ci^][XP81LiRAbHVTNLLKE@>A>;?FLVda``_[TOMKEDSehisqdWSOIDJMJNSRLHMSVY_dflgYTTJEFHJGEKT\\[WYO^~˸ȳƨvĕ}_a{t÷Ⱥ»üȥ­º˦ͬҾĲɭǱ˭üvү۵ӱ̻;ǼĴezlrSZN^y^^c^VSfrmyn^`gt}ɸ{g\\Va{qzvppzg=bomWrklqWojp{zjav_]nrx}t^toHN_Vo`zaNMEMVTKJSaW<AYZbGILUWNQVJ?AW\\SQOO54:B2;;,4B=:04VoaILNGIOOLFECAG[iWMgsc^[gU^VYdvwkMJJ=G_WuxUSjQjnOOWzjY~mhSEE]r\\HIPX*2<ATH>JH:=759RjJLNPPN@DVRMLXVEJYWWYMPWXUO[]XZVSTRQLKMO[]G;CAFSG10000014578:;>EMNOQSTVVVZbb`flkifefec\\YYWZ^zesyi_VUP]O:323?cul`iwbN]mmmnlljhcWD6--@QblN003545Bdvwq]=05FblbF=HQScuvum[9=74342;l}lcRJTMZkj[ktdeZW\\`dgdN@GFA?RmgKۮ|wn^P[b\\VKPpf9362?OOQvdJPONMMNW]aY_auFJb^Zbgccw{`NQbrsgXje~WUU?25AgtP80/2549@@@DCA@><9:99865:?BFGA5/KO86=6=DC?>====<;:8887:ABF^wyskirmezۻXPlyokjnoqoq{~phpzȐ{±aPRGLHD@`kVyp(6=GMJKHDDCEA<AB;AVZQoiʍ>Jj{[][\\ouqj`I=FJJKJD@BB??=99;8:A?96676:<=?@@=60/2344556555DOG@;8<?BEJTYXVPF=67BPXPBBFKGC;BPLQaheYSMNMLKGDFINYθ{?;@<AGQVHLHGKRPJIOQJAAP^\\VRH@?>CTgmilwl]YYXYYXVXTGCDEDC?GLFEEFGGGFFFHFVoI7:@A@>;76789::68?@934;:<?BDDBACDED==GICA?;::;:9;>?=<>><;<BBHOLLKE>;=ADHKKOQD76459<:;Pppe^XRMS[_[]\\XH>::;9DVhqvwypeVؐOOURRONLTlo__fTIU_]^bYPY^^uܝRK^^A@>>ABDFGFFFFFEECA@AAAAAACEFFFFFEDBBBCEGHHIIKLKKJHHLTZ]]`eb`bdcdaYVTPLIKKIIJMPRVWWY[_ceggggggc[YXZ^VIDFFDDKV\\[VU]lutswxwwupb\\_ZPKLLNNNOOOLGB@?>>=====>=???>>>=?P^a__\\ZZ\\]]_aaa_^[VQNJFHIJJIHGHGGGGGECEJLKMSQOW]cjljkmnmlmnomijklijkgjdO;G\\cbb`b^`ju{`wsrkTES\\S_`TYfsxpt`\\s~|wzoz~iZfwyuyiUNLRZYXWRZiphZVbs|rTEGGCKGHOSRU_ddcaei\\Y]RO^aaigd_\\SQU]chhhnomifjuzwtpmkk_og;8:88:93SzeWcpa6=IQWYYZZYUSSMB9344454444444444444444444444444444444444444444458FWbimhT>115Mvnf]]\\UI;/1W^KhLa^UQPNKGB@><<@JSXZXX^aWPNIEBMbo_PKGQXXTUSMEIPV\\_cdalcLFGGHHGFFIUVXT[Tbþɸġļһs{è~}xhнɦıȿżȯɯǣϵʱΩ̽ͳ|fxڶӰʷŰ˿Ľĵii[[UOepq_ga`WZid|fUf{ƱqKLtofertplm]McngTulffS{|dr{riodyrfdYow{qsTqqCKWO`]{cNKFPUNLO_cE8IWQQ>OXTRJIRKMP[]MV`O27NO02+-0LRO:<@;M:TH=V]lsdPCBWlttqoy^bzʞm{m|hx}{WIJL7@U_tqEOQItGnrzbxp{rzQIHyyK?EX?(44BQ>AGK<:77EbTKKNOTJ=P[NLRXHGUZSRNKWYUR[a[]^VRTXSNKOX\\L=CC?HSF310.-,-/23467:BJLOQSSTSQXbb`fkkhghjkh`[YTWZ^onlkb]_W]J3:D:Plqjju}nL[goi`dga`^D1/0>csspQ556516VpqrlZ<05Ecm^B;GRUYfwi95B954430^z]VPc||v]]mt{rK9ACB;EhaJ½wlbVLR\\IFMk^97JIDN`|hNUTRNMT^a`\\PRoTo\\[^YTkyu{nzjCFVa^Z[cx|}vmF<9=WaQ=612323;??BDB>=;:9987669<?ACA7<=B>@FGHDB9;99;?>>?<988:@BAIaz{jamr˻Ye}~tknkmmmor|vwļ{afQVVNQSQOevnnsҘY46DJIKJIA>JZQEGEBY^CZSgVPiuvPPOS\\bd\\K@>>=@AAB>?AAB>9:;8:>:776336678:<;500123334543359:9?DDDDDMXURJDMPLE?@KONFGUZTRWWSZeb`]UQPPNI@=HSSQOU_Y¼ӽaGDHRZYMGMKIILSPIIINKBF\\feb_\\UJCDRhxtuylabcabcbabYIFEDDCCILGGHHJJJHIJHMm]8::?@?@>:6667898:?=614<:6;@BBBCCCD@<@IGA@<:<=><:;>><<>>;8;@HMQPPNKGECEHJIHHHA866676>[~web_xOMZ^Z[ZPC><<@EKamtww{toúzBCMPQQOMKUfdZhuse_`e]RYZkĺGBV@?<=@BDFFFFFFFEDBA?AAAAAACEFFFFFEDCCCCFHHIJKLMLLKIGHOUSQ]gecacdfd]WSPNLJJJKKKLOSVWY^bbcfgggihc\\XY[_ZNHFFEDIRPJPaotohnzyvvvtgXVUSPPNNNPQQQPKF@=;<<===>>>????>>:GWZSSVUXYZ]_`abca`]YSPLIIIJLJIIIHGGFECAACDFIIIIQ]gmiflqqgfnomlkklmkkligjfPJR^aaedOB~luxxsmgdj^@CPNQW`l|mSftnxt{}}|{qn}ymiaforlbSHOgsh[ZUSZgoyzcMIEGXVQYWTUWXY[Y[gicb^`kijmeb`]YY]_cc_[Z[almmz~rpeTUXRfxmg=6:99:2AruWZgrH2>FTXYYZZYWSQLD:335444444444444444444444444444444444444344444559M^mv~iP=/Tyfeda[PA973+9GhoUeb_YQKJIFB>::;BHNVTRSVWRLF@=J]rsSONJOU[ZXTKFGNTZ]^`T[hMAGLJFDEFFIOVT_biȿѽÿŢy}ƣƈvmğĹļ͵}xrʼ¼ǵµųϫ¼гѸ٨ʷּȿõ̰ȴƨtauںҬîʼȶ¸|\\jvi^g`bmzirhh_Uae|pSV÷yjƴs_YTQc{xmkb[gk]Rl\\Y[~|p_}~juagwps^lNtv]~ssKbr?GQFU_hdNIENKOV^gL9EPLAARWWKKGHPKYTbVKJJ;>NE49:/3Bdv]K9L:CD]>GcXYrm~rofkamrW[Y[xppoO]oKFHL2@]cPZeXSY:pN\\pf_||rQEZd@=HU/.47FI;AJP=::=V]DPIOJ\\@C\\YOMRHDQWSOKHTZXQS_[[fYUX]]VVRVULAAG?CKOD9610.,+-013579?DFJMNOPNMT]_`gkiggjnnjb][WWVUV_w}odYNK[LK]PD]pjluzygUfuo[UfdK;6,3FSYe]IA;7553,8YhejdV@15Cdm\\>;FNTUWZUF;=B>42461GcWlz~ijxx_QL?<=<<4;^[K˲wwza`FFOVG9EKQMLhp^YUTQMMW]][Sb}td^\\ZZdtpyTcoL;>BOX\\_nw[PG:::;?EF:3469;;9;AA=<<;:655568;<=?@ADHUanoifTDNRLHDCAAB@;::=>?:5?]ssieռ\\rwd`jloooqw~ĿgSHfµ߄LXWZTPT]svlVђ\\IJKIOTMGNc]FDB=Oy{fTYupdVHACVdSacSCBEA>;9;;<?ABCA=;97897775336558<=9654333334433210.3=GGGGHJLMKEHVceXE;CLKDI]heagk`]_VPTTVRNE<9DRXVSOMIL˾ULKHJLLIHIIIHJMKF@AIKEMbjmosm_YXW[n{kejjiifcb^WPIEDFFKMLJIJJJKKKLIB]l@8<<>?AC@9543578:;>?728@A=?@@@ACDCB>=EEA?>94=BA>?><;;<=><9<?@CKMNNMIECEHIIIHHC94574>n|`]igq˓HYaZZTE@??BIRT^dnuy{sv>@FLMJHLOMOLIV`WR\\ceho{gcpiK`?=;;?BDFFFFFFFDCA@?ABBBAACEGGGGGEDDDDDHJIJLMNONMLJHHKLMWdgc^^fihd^ZTPNLJIIIKMMNQUWZ_`_`ehgghhe^VUZ_]TKFEEDFFCObkoibhswvutvqoaRQPOOOPOQRRRRPLE><=<==>>>>????>>CGJJHFJRWXY^aabdfcb`\\WSNIIJKLLJJJHGGFEDDCBBCGMNJObomdfqvn^ammkmmmmmnmmkghjaTWkjb_POQlvUOWkqjh]A@ICP`kQRk^Z^vwn|nj|tltdTX_mtnqqdTSfpcXXUWbefqzjQOFRgdah_YZXVZ`_ZTWWZittrzwhd^ZY`fhkaQMPTYbjmrndb[QTXW`smd=5;9:46^zcS^ja67ANYYYYYYYYSNLG;235444444444444444444444444444444444444344445668?Sq~}ucKARZZ`c_SA54664/4zRQTSK@<@EDB?<@IKHMQONSURNLJFABJa{aY\\SNNOSVRLIEHT__\\Y^\\Xd_NCMOEBDEHGIUWj}}һŶqȦŐxc·˸˷wvn½ùνʺ³ĿĻŽ̹ɵʿ׾þǳֺѷuaöپиϻʲ¨uSqt~]kl\\htqv|fe]_px~yMròpʹ]SSLKM[}rljgjjTTdVVe^f~i^sVo{zv{gdypRhuVqmqQTuLDPAN`xZfOFEBATmkL<HGD@EO^VQI>COX__^gXQTG3GI9%5<?=]oTB5^eSZPQ]X^[eftujwmpxS]xcfx[QeP6Z}__bG[jDLVRaJ;ISbKuifzɽmY]lyxPGwOE>RM441=OAA=[M2>?F]MHMJPOTBS_SQMDAMWVKIKRZXVQX[VabT[_^_]VSRMD@HC<HNMGA86<1,*,..0358;>@DFIJLKLPVY^egeehimkgcb_][XWTVgzqUPPKY\\glKIgohmx~zrld`YTavf:(.<GKKGD9.,033310<PXY^TNI;8@dnY<;GKLLJD:;@?DB52207Svflphx~l?26777343;PQ^}{s`Y]rkK>NOFCF8EPLQ]`bmrdYRUYVJESbc[YrvoxjUTZay|kA8<Qh|siXWVF;:756CRL<79:;945<<;;=>;3012469;;;=@Wyzup`[qn_YVH;=B@99;;;99=DJWe^Qk|^vzxmjligkpsyw|ӥdPEH{`SXR\\_QEToqpЂFCDMPOONQLD?<<J|rgkkx^E;DMSNGFEEGHC><>?BGGGFC>755776445568:?B?:7664333344344441258<AFNMHIKT_difSE<AHD9<KV]mn]WLDHQSTJ:7DU]\\ZXXXVQ}NDF@?@EMNLLLJIJJHEDGIGJ]ruyhJQ\\[\\nykuzohijjhc[WUWYSFDIPQQQNLKLLJJKLAGmR0:<<=>@A;40359@CA>=@A?AEFGC?>=AEEB?<CIB<<<67AGEBCA;79==??>=<9<CFGGE@<?CGKKNQPI:354@nyL<RbpwjmLecXLC@ADGLPPU_kx~xu=NNLLLLPUTSQNPRQJGDCey}igm>><;>BDFFFFFFDBAA@?ABBAAACEFGGGFEDDDDFHIHKMNNONNLJHHFIR[_][Zakkjhd_WPNMKHHHIKLLOSVY[]_`bfiiige^TQV\\_YMFEEDCCGR\\`]\\gsrpsrutpkgZJIILPQQQRRRRQQMD>><=>>>>>?????@B@???@JVYVX_aacefeda^YTOKKLMMMMKIHHHGGFFDBBCGOQLUltg_jrpbY`efjoommnnmmligehbdifmgLIvi_Tj~}vfI>ORTVovdWL`aWdb\\Ymt\\Wdoml~zaW[dcXWbe\\[cdaabeaiozzs`GCLenmkgc`aaa]Y_aUSOO`kidmnjh_SU]dmukRLZc`]`ec]]aWU\\WFRup>5;:83KsoVU_hH0>IVXYXYYXWWVPLI;1244444444444444444444444444444444444443333456765AOTMGNX]cbUEGVbe`VK=5888.DsTVMG?;;?DECGNNQWTPOMLPRPNPONJFBKoqjz}m\\WSRTSNHEDRcfd_Y[dc`fcWSRLGHJLLJS`tѾĻ;zuçpȶյƼutt¤½ľƩƲǲͺ̻̾ǼŲƽҸͺּbĘ·ɮ̷ʺɧ˻ŹpTotterccrrmjda^y|lfÿnҔS67W`UTZhĽrjkidlSaXR]ntWto[XRvz|z{nZlQ]jk~ci^faZlfGUBKS_VdMF@>LiuR:LF8;CQYbgbR=EOZmbZX`^Q<>USP;;L_cslYB9Lp}c]J^_UT_^aag^vwTZZ[^w~hIB6PFGU_DQjVqshcI;FocqcmO_b˒s@YmPRMUK=7<FIA@Cb<0HDOUDQGLSUBUYVOQG=JX\\RCIP[RSTQWVWdVZ]^]_WOTWODHJBELMJIHAFE4+,.-,-/2478:>BDGKLNPSSV[^`ceeedb_bdb^[\\\\VU]unHQh`^eseCOjnlnu}hZJNPUav[66CH@4./002233322?MQPOMFEID?BbkY<8DFDHHE?;<=CB625/>u|hajik|opZ95887605;<?=<NU^ae`Z_UjV@MQIHE9BKNKIGKc~jXUQQYb\\OTqom{rgWNVbm}wE?IZlokhZRSKD=9<>:<HNF@<88867:::;<=;7667888==878Msxonv[VTQUNE=9<=;>DOZ`VLMTlyw}htokjf]SYlqvgH]vϸ]PHHmï]UOCKa`HFk}wéL;HJFCITKDG=:L\\s{ksrZTHd?KKKGEGKKGBAAACGKIDC@;8667776558;=AC@<8876511233444665431248<;<GQ[[TUOEA>LO?4158>bp]WLFIPRXK:>MTTNIJSSROfnQfpDAD@AFLPQOOMKJJJJHHDDGBZi@@R[Y_rnTv{nmligd\\WVWWPFELUPMVTMJJJHEEC=\\g63;9::;;;5017BJNOMF;=EFB?@BCCCCCFIE?CKE<;;:8=GMJGEB>;;??<=>899;=@BBA?=?EILNQRQH<8/9ozC:FLIUojvZO[TFIJIMLHFJZfs}|x{i9LKIJKQTTRRWZSKGGKBPķƎhjnl==<;=@DEFFFFDB@????@A@AABCCDEFFFDCDDEGGGIMOOOOOOMKIECIPTWWZaggikljb[VPMKIHHHHIKMQUWX[___dghihb\\TPPXa_QFEFCADHJMNP]oohosrqqmb]ZJDDMPQRRSRRQQRRJ?;<<=>>>>>>>>?@=>>?@DQWTQXa_]befffd`[UQNMNNOOONKJJJIIHFECBCFNROYljYZdc\\TV`_ajnommmmmmlljihjjUUf]GPltxib^bZGSuaA^aLbpnql_W_bdbgg_Zn~pcg{o`YW]du~yk_`a[XY[bgotkedgpicl|jXOFC[fgh[TX[[\\WKF]mbTJOWZc`^bgebadedqxnZU_eiib]]ahe[[\\KTWlwp@4<84<asaU[c]62ES\\^\\YZZWTUVRMF:234444444444444444444444444444444444443333334565586311138?INNYgjgfb`O:687.D忆zpRA=>DIIFCRaVDQcRFIKNSSOPLIFKTPO\\dovvg]ZTOTSJDDEP__[YVSU\\`ZevpYOMOONMMN_ȿ˾y}˔ƸԻڱ~m½ɾĺ¼ƾ°´ѼϿϳվɹĳճ˾µmɒϪ¬ʺȠĻŸr[`r~~lmZvmfwcW]v{rw̡M:=?giVS]csĪmhji_jOnRTiy~a\\zniEQqwzxv[nJL^gklq^WeganRYEDGQRqcNE?B[oX4NR66@JS_gxrbEET_\\IGUcW;:ZaMMOdbZY`GFUF_thNVFU^XBMXY]cYRf^K:Lgzho{hLIoXhOIVDVaff[{B>k}YvX[xoů_Bq\\fieSMBARA=D;TZ,:KJTKFPCKYOKYQSNMBBTc_F?LTQKUTPRSW\\Y^\\\\]SIN[[ONOHHOKFJONNMB4,00+++-01259=?BGJKMOQRRUZ_ccbbb`_aed_Z\\a^TUceYZtq`nub8Vjmqqx|fJAJYXB@TOGF@5..1212223331<S^WLKF>=<>EGaiY<6?AAHJF@;9:=:43648Y~ynijelŔwhVb{N6;989507>:773BXmjicebXTZi`PWPAAEFHJLLKJWymq~gXQQRWY\\\\\\jwaqmU`v{E8JXXbuqdUNJHHHIE:6;==97=EB943468;<;;;:<>CFF>77=A<;=:Vzqj޽wdOHurH?ABA=DZcef_VP]wifwva`XOzr|~WAOW_\\jůpYVOUXJFABNZQIsճxr~ow~bH=CILH<FXOCF?:Rs{vzy~tx|yqg`9AIHDJRMILJ?=?>AGD=;>?<747<=;658:;<>>;:9::710100234444356544324=GJJJI?=>8>CB=981/Hkp_Z\\VPOQVYL>>?@>75CSRSUYq}lK?CBHo\\@EHILOOOQQRPIIMMKKJDCE?QvbSi}up|roslgigaZRGEFHMQNOSTK>;@@>>8GlJ.79999876206DMPRRRL@<>=8557@HIGDFJFDJMB98765>KNJGDBB>;>@<<=:;===>>?CEAAIMNNMLGA>5<hsK<GNNMMdlksDIJJKMMHDFN^jwxtn\\NN?JHHJOVTORUYZTJDYeYʾϣtnrpn;;;::=BEFFFFDA@????@@@@@BBBCEEFEDDDDEFFHKNQPOPPPOOOLJNPRVXahgcgklf`YTPLIIJJHHHHLQSTVZ^_aefeeda[UPNQZ[ODCCBBCCDDFQcjegrwskgg_ROJDDKNNPSUTSSRRRLD<<==>>>>?????>>>>?DMRPKKV]XXaffghgd]WSNOPPRSTQKKKLKKHFFECEFJSUW`XKLQOLKR\\_`fmnmmmmnonnlmihi[PPPJ_oXTTKXWILLQgt|vv}mrrpmcneWZl|rgdun\\dumhrmcgqtxexyjc^Y\\ilhjt{tl]Y]^\\eeXLIMITX^^QORSNGHJO_oeRL_rsthcghikjgdcll^Y\\\\^bdb^dpria\\Yb{uuzs@3;55Nmj[V]fM26Laffa\\YZVRSTQLE9344444444444444444444444444444444433433333333455666677753235A^kfgdVK@:?:304KꚄ}ZC=>?CFFCBQ`SCZvcMGFOYTKIGE@F\\bY^gp`WY^^SNTPDBGGIPPQPRIDScULeudQPTTRUV\\eź̞|vϊǹà̿}Ʒǲа˫ȻķǸǼճѸwȐſ̧ƸЮ«Ƹ{c`wwjdtmgxzgRfnuugEDDEieRP^deμjgjnb\\OzsQ_tf]bzyo~rCOlpk|flXDP]fkufS`j_h_]<6?RDmeODAEWY7@]C2?GJR_[m`WFL\\^A3G_T95EUN<LixWA=BGQRWtgM9D]ibW9EQ_bu{GM^cWAEq}srfdYW{w\\jXeS;1=jTt|S=naPo|}M\\XYOPFTV:@GBhD.FPPSFMH?OSM\\PQXLICIZjR<GPPHT\\PMPQTY\\[[]VIJSVPLRPKRNDJQTUPIB7.22)*+,///3:=?ACGHKMQTTUY^`cfggeccee_XWZZWWZafcksgw|Y;\\kpzxn^@0<XeH+0EKF:0/344421111224I^]SMKD:853=E`iX:28;@GIF>::6554433@Vdkieae{ݢsO_=49768615<848<Maf`Z]b\\XRLOSVW[RHIKIIJJKPe{{j\\gzs`^WSUUPOYa_ht}j^|{H::GWaek|gnyoNDPPOLGA:8879945>>9634777:<<<>@BCDB@87=AB=CRgx`l{wmOY}DBCA@@FY_ZZZYYYZ]`wkYOsǘpa}vxH?LR[`ý̺{skdjvtXOIHEFPSNq]e{ycvf<EROKLLBE[UGIB7Fcrpqtu{qx}o{MSIDHORJFKN@887;ABELA:A74:>?=977::89:768:;7423321245331586445666;@@@?<=?535679=;57?FKPRUVXWYSB7899519KSZZVVYUJDML=?RWKJKGLQMLNQPSTMKNPONLIEBBCXtwy~rVTrnjonfZP@9BLPPUZ_[G21::956^c567899875422=MPQPPPNE;8679:<BGIIGFGFFED>61247@IJIIHC>=<@B@@ABBCB@@@@EGCCJNQOKF@>75dxRCJOPVWKZ~߆FPSQPMLMMMXkxnUPPS?j@GECEHOUTTYYVTSLPs~ɬtw}x޾Φ{w{99:99=BEGGFDA?>===>@@@@?AAACEFFFEEDDDEFIKNPOPQRSQRSSQRQRTZcgfglpla[SLKHEGJKGEDFJNQSW[^`dgihb^]ZUONLJHCAA>@BBABCFTdgimswug]^`TEEEDEEGKPTTSSRRSRND=><<>>>?????????@HOKEBEPOMW_bfghhdaZTPQRSTWYWNKLMMMKIHGGGGGOWWVTNDCEGIOZc^[hommnmopponpmgjnYHYdig`^^\\a]MLPXhlg[Peyy~nhigbcg^Xiujql^i~~sig}jW\\glj_Z^`Z]YRTchcW^eUPLGQWURQRUI?PdkiqmcYWiolfdcbfeb^Y_ki][Z^miaa`dmneZY]bf]c}?484?bn_Y[d^A4=Thjigb\\YVQNMLJD8344444444444444444444444444433333333333333344444567799998777:@DNa_K>65:813-)qVYCDID>;=ADBENJO{gQH>KWSJJIGAH[gb[Z^UNV\\XTTTNFGKJHKOSSPNIT^TGLSTQMMS\\drӭ~oĚײɦʭ˿̸ƽ͹˹ĺɸšŹvŨͭϡ˱ʽkiwrdeoyogjrmbhs»mČOFC?AcaRO]ebe˴ofjncJ[jRjy_dd{oupMOs`lrvXoQKQYioaU]`add[3-=R<jvcODDEHA:ZU49FIKSWPX@CGV\\C5@UND;ORKO^kh\\OXMPTABtvD>BJwUOWC[dyxdc]DM`^aWR`s}thfWRO571tPFWOdLxti`mR}xix=LRJhFCMHZk27S_OKDPDCVIU]K^TKHIN`c?AOOMP]VJKNNSXXW[XLHOPJGGEGQP?CTUTUIDC:373))**-//26;?BCEFHMSWXWX[]cjnnkhjid`[VSTUTRUftfliQ?]gryfI8117DD6:HI>2135633201101224Od^SLA945847C`iW8046=EIID@=5126531Pidbjlc_vxrG23;=@;545569<TY\\TTeg[RQUQORbqvl\\HADHGCJVYWTP\\so\\j~\\UVVV[bc`glNp}}qLR=7Sy~azubaquqpbI@FA50258;<AJI?:;9679>CDBA<:<<;?BBCCSzVntdhpLUIHE@BNSOQWWWVX^Z͊uf[M_vZiկsrLS^\\Yo}v{kfXPNOPNL^xgm{ȩjrz}{nJEHKKJBEVSFJOVhv|ujmq}sjq~svzvprD;B@ABDJLA743;EBLdeB=78?@=<::<==;964256565676644454212544225:898558;;;532147777412;<@OVaaa`LDJKE;:ERX\\XV[\\PMPQQMKJJLQSLEDEGLJHOWWTTTSQOLF?A@98N~jehr69gvvsmcZTA5BGCM]cpmP;9=;62HeG8>9;=:575766>KOQQRQKB>;:@FIHGGIJIFEFE=9:4018@CFGKPL><?;?EDCDDDDCB@@ADC>AGLQNKE>;5VvUBNNOQSRFVyBPNMLPROJUlqYDDGKFAr\\DIEHRQJJT[YUTRQTe}ƻwgcRdui:::::>BFHIFA?=====>?@@@@@@ACDFFFEEDDDDGIKMOQSUTUTRQQPOPQRXaeinprobUOKGBACEFDABEILPSW\\`bfhijf^[ZWSRNF=9=><?BBABCFTfnqsuwzp\\UZWIDEDB?ADGJLLLMOPSQI@><;>>>?@@?@@?@@ADGC@@CEBFOXcjiihfd^VSTUVWY\\[SNNNNNONLIHHHGJSUQV]QA@FIMXd\\UeponmnoqqpoppmjnfNXpmbdpgae\\LOZemmh[MOY_ZS[]cgPNj}ujbiy~ZYsrgYWba^\\Y[][_UOU`ldUVUONTQcaSSPOTTUbptrolmbTZaehc\\_b\\ZYWamkfdZ\\qvmba_fqiUY][WTS=168PmhZ[ciN86C\\jjhgc]YVRNIGF@74444444444444444444444444333333333333333334444444555556666876736EQRF;76655-<Q?N\\XMC<6:FHB=AATcNH:HWRMMKGEM[liVLNPPPPPPOPPPPNKIP\\_[RRTUQQQQMJSXONhxĿͺ ˿նƲɶĥ½³ï˾Ӳ̫γvwsЧ;ϦˠʲŰqwv]r^{uaagltcnqfcEEE>>\\\\PMZabFɯ}kcfhGPueYqp`ic|g{~~lOPz\\ntkyhw~gXTK^hZV[U^d_X:5LT>eqaMFCCCBL[?.DLENUNUA>PJXY?=HORC;GLJcsaPHY[dkiV]R:Rhg{w>AmmDJfq_aYACgjmeYtSRj^OIEC_[9;7_@*)0]`yxty_^qfB9LV\\j<TZWkX,8kdIFIEAKSMWSSeGMHNTbN:JOJR`ZJIIIMSVUVWMHJJCGMD7;ID;JSPQMDBA>:;3*()(+-./17<>@CDFLSXZYZZ[bkmnmorjcc`YSRQRQT`obbaKB\\baV;/366424DKC6.0344322110000121FchTB3126=@>E`iV72978AFJHD?6/04549btnqneXTXOJlssɌ|kbiiUHA>:54:<:BchedxtYKLXVVTTYjyqPFBE@ACCBBJXYfx|~|Wba``cjno~vbbdVma;^bCBq[_ml~xvvbH?DB84239<;ANNF?;==97@GED@=?GE@DGEDPju}~rvո|qsbNBCKSPSZYZ[YlvPWYMJO]SPj~ңikomc]^i\\FkvtgqcWPONLMVav}{{ygxdWZ^O=8ETSB@SYR\\u~zqrqyjenuuqos}}ye<@KKIE@>;83049B=Afb19<A@:77=@@?=:88753465898864554212333369?=:=?5145665435743444355:HQZfnk`]YSJCAGSUSY^_``YQQQMFGNRW[O>9@DD??IV\\]WNOPOME>AC;9dxXpv>16[stui`TK?>@<@^lrzsTD>=>6;^]>B@C?:<==<::79@GKPTOD<<=?DHKKIIHGGHHHD;67433:BCBEJND;DE8:ABDDFEECBA@BE<9AGGGEDD=5@`_GKNQRRNQ\\gjW`hDTQLOPMLKTd_MJNKEFC<@JPV_httgVSVRPSRMWyylspZ_Z^x}f[TZ}mnoW::::;=BFHIGA=<<==>??@@?@@@ACDFFEEEDDDEGHKNRXXUUTSRQPONOPQWahmppqoiZNJD@?@AAA@ADIMPSW\\adefilh_ZYWYUOKC;7:<@DB@ACCSjrsuvvxzfRQPJFFEC@?=>==>?CHDDIJG=9=@>??@@@@@???@??>>@A?>@EO_jhgggf^WUVWXXZ]^YROOOPSRPLIJJIJMOOT`[G?BGKS[VR^kmmlmnpqnoqpnlji[[cYGEHRof@8?\\vphrp][jmabjfa`TN]lm[Piiciqnw|{vh^o{kVVUU_]T\\`WSRSNX[NHGJN_u~ug]SDGR`a\\`hic_ffclskb[Z]``[YZkd_b_[_lnefoxwkZUY`inevE+7L`hZY^ia;36D`ligfc`[VROJEC;544444444444444444444444333333333333333334444444444444444456688764;JLA86566*PϜ>@efF<:9BOL@89;PnhTOKBJVVSNKHGLZlp`TPNLKJMICKSSRNJIUebUNJQSW[WUWUVzzT_ɽÿȼ«ĕ¢ŢĦ̹ŹŴȿûɹǩֲҵ˼}xfdtѺƵǺ˦Ɵλ˰yv~qoQd{k^`[ulvvWǀPDHH>=RTMJY\\[Gh¶ufdo\\<UZ`lwbcke{teyegdU^{`blmruq{sg`ZKZZVYQR^TVICRQ5Z}`LHBBBKRI06NF>MOPY:WNUc\\C=MdV78BV^gVLIXTT`shc{APjeV[dA7Lde9<_z}wrtkffheqtxII[PDBAapTP_ff^F3IicyuWǎx`jy'AQ^yXVWZ^e;,HsXFHH:DMKWSJ`c?NGLY\\>BMMI[aKGJGILRVUUOIIG=@QR=4:=<AIJJOF@CC@=@5+)''+--,/369<ACGMQUW[^]\\`dggiopkggd]ZXSQQV\\\\\\U\\z?D^aF/,33-.4BHB70.122121101112111215EXL<49?@AGCG`jV78A:6=FGFC=521444?jwttaVRYQYYhcgΝ~yZFHDB<57>86Scdu\\LQUUYYOHIKFDGGFECCBBFXhaaĳeoa`epz~qv{rMPuU5Os^In|`VhvlllgheYJ?;=>?II=7989>@A;8=?99?EECBDJNKBCJB?Vvwʆy|_WKNWWVWZaaYS~klYX_OGmsbVPQRjʿzlmh^URTYZUsVuwI^]TIEIIJVZ_wj|o{p>5AOC2@adTNarjlwtqpqtxre^gceksyzxx}xovr_]q`@6666756989`h9@@BC=78;?A??>AA=85576788886555433344689;?:CQA27<7568865442332337<@?Tmie_SIFHIJIBF[faa`SJNPFAEMRTSE:;>@>;@JY_[OCHOQNB;@@:O̾ML[qD-2:KSSll_F;FNDD_|t]LDA>BBL`QMPZODGEEA@;:975;IRPMD:;?BEGKKJKHDDGHFB:74123:FGEBBB:?OI<;BECDGGGFECAA>7<GKKH@==98@FJRPMORWZfzyiWPTY{nh]TTPNMOTUSMNPMKMSOKWajt{dNMPQOOUVL]yiqituUHEPifTpdO::::;=AFHHGB=<<===>???????ABCEEDDDDCEFGIMRVXWUTSTRPONMNOOWdknpooopeRFEDBAABB@@DHLORW]beefimlaYXXZXQOLG?79GKB<>A@SkrsuwwvxrZJGFFFFB?=<:86558=86<BHB::?@@@@@@@@@@@??>>>@@?=>@ENRW`cca\\WUWXY[\\_a_XQOQSUUQMKJKKJJJLS]^SA7ANLKLMS`jkllnqqnprppnjihicPITQdd>2Hmxo}wnacqq`W`\\Qb{{nWRQentxpvik{obmuv|ypenmYSRZ_RV\\OJFC=?JJFDDAKbdeb[WNTHIMQT]fc\\`faltcXXW[kmf[SVfdb_WWakgfwl\\YXYafickvB,Lec]YadjM145Ifkgfca`^XTQKF@8444444444444444444444433333333333333333333444444444444444555568::549??:5459.]у7?WvgJ:8:AHF=469Cb^BDMFHTZUMIHGJS`mgZRNKKIJGAK^]RNJJW_WRONSTZcYTX`aw}WūʷǪŭŵ̥ӷȻ°ɼ˳®öǵȸľ͹ΦٴѾĤi{x~{ή¸ʯέƮlpaYmtl\\L`wkZvĪ`EEII@<GJJHYWROHojolUPLU\\d^Yajixmlqge\\_lplcchjnnnqylWX]PTVXVJPMSM>BA'PaMJBD@MK<;IJ;@OSWHKRG^_R@JkoH6G[a\\H;C`i_irhotISXTIVkj=C9aa;BLiiOqsRDj^[klQc?EfhY_TXif83[Kjsacȱ~ijG*JXqZkI]SV17geQMK::ILGWOQiVCOGLXM9HKMM\\QCIGFHJVWSOPPKBAMWH7<?89?BCFIA=GD>DH:/.((/.*(+.039@CGLQQT[___`acdfhgjmle`a^TQPTXYVTZzq=Gb]:*4600<CD<2/2202112111122321120,3FJLDCJLGDBJaiW8:B;5;FGC@;6644433Wcd_PT[WT~{dfrmXUK@E;38@OVV^jiWX^f\\XVNH@9;GKKHEEEFK[hXVЍq_fjutmn[due{nwoiskG4<[a`||klghjZEPcT=8;;98@QTC7887>FA77;;;;<>?CHMOOMC?<2<bwxxpzse]YPIMajYXUWjiZSORO]~gce\\ZWSWndhge_XSMMR^oA8qww]/IQPJHHHHQceaֳn[~eeownE8?FI:;Yi^QRSOQ[ciiifhoumcaaWamuyzyz|rebaiuuE9><@EB9>HFBatT_I<@?====<>>?CGH<667998843566555555658=><?;G`VADD>68BFC;753211/-/3209Tef^I>DJMK?6B\\hcaYGAKOF@DHHFA<;>=<=AELUVMD=@KQJ<:@<CĿC/CF[qN*5?<=7:^nU:=QUUf|xeHDGBBEOXURQooO__G?>=99;>:@FIGNLDCFGHHIIGDB@>>??=9741/1?SSE>65=OWRSRWWMGJIIHGEB?97?HKIC968;=>DPQLNKLdubQcgOFRR[fgls_KKPQPQQRRSPOU[bic[bpy_INQOOPRNIc~|`sUWXYZfmndRM^WI9::9:=ADEEFB=;<<==>??????>ABDDCEEEDCEGHJMOPPQRQSTOLMONPQRYejjlmnpqo[LIHFDEECAADHLNQW[^bdeionbYWXYYUTSOJCENTK<9?@QjppsvwvwxeJCBBCCA@><;:75554456;CD=57>?@AA@@@@???>>>??@@>=AB?>FSZXWWVUWZ\\]_`bc]URSSVXTNJJLLJJHIR]fcM<:COSPONVdhhggpooqrqpomkileY^g`Z<Z{m`tyO@UQEe|iceduzngdcjtrfcj`QUruhnqYTZ_ie\\WJE?>=DRXUOOLLV\\b]VYWdNELKPZd_[]cfjdUMKOZdeeecciejfa__cb_hqbYZ[[`iv|z@=fj]Zafk`:158Qkjdfa_``]YTNH@8334444444444444444444333333333333333333333344444444455554555556777758;;64663id3??QYO<6:::;836;:MV?7>??JUULHJHGQ\\dhXSROKIJHI_shVNJJQRKNXUSVW[XSQmzs{΢зŔ˪~ļéĺưëŷ͹ýͰ·¼ƺǷ˾ôyŰ۴ū|ʩƣŨppxrlggf{hIF}ob̃NGEFGA;=BFFVRMLAx¸tinoc^XORRPWTbcnlqldVhol~{ffacfgd]nn_?\\[TPTXMGKLJ976#BaQKBECDA<OP;:MUNIDI;YQPIMgv_FPZdO>9@`cchgbYuqYM@Q\\cx?HBU^WP77ciIDglhgCL{gOKKVLJDej=CkH8ud?.XCVHuʈ~ryn=4Qd|i]L^ORBOm[TNB3BDHKQQahMJLGNLA>DLKPNDFE@DAKYULLWRGITWM;<DA658:<?@@AJFDOM;2-\")63*'+--06;?DLQQRY]^`bceededhllfca^WQORUUTRVlc<Fa^<)+-6CG>40126303312222222212222/<HDLNDHKIDBKaiW77@<46CID?98753222OYYWRV[Z_dXjrnkhbWEEI90GZhxkztamtSOQOMJDDKMKHGGIKLPXOJ}ԫn^llqi`gNB\\kjgMU{wWL:4>IKVywtb_c@9bgG:AGE;6:@C@86;:CND88;<>:76AKNNOSTRE<G`twu}y}zl]TM\\srJFXZSQQKHFQlhFUqpjkmd]{tagmomha\\THOkb<63Lva]nD>0<KRQNLOUl{\\\\eSMQEDGAAEGCAERREENTSRST_lj``]fsbWUirhhrx\\PSYamv{kG;A>=DHD:;Vn]k`FyL3<<;<>>::<@DEA958975851367888888679;;<>@:@Z_LB>C@?HKJ>8533210..03438GUU=2@IIFACKWbe`QB@GJGDEHGB=:<<<=AGKKHA>><=BD>79=7Un\\sL+-8=?WX<CMD;9<NZD?MTYeiq~~fOG>53.DgORpxrrF44479@?12<FFOWWTPLMMMKE@>=:43687775546FZO=<=AKRPMPNUVOJKKKJIGFB>;>BB<88;<<<<BMMFHIGWf\\NTaUMLVeh^iiSKHHNQPOPSVSR_ny{tfi_WNKMOQPKJNL[{թ]cwW[f_[\\luk\\[ZP[gKM99999;>ABCEB=:;<<<=>????>>@BDDCEEEDDEGHIIIJLNMKMNKJNRTVXZ]cfehklorvgTLHGFFGEDEEGHJTXY]]_gjkohXWZY\\WWYJCPYQV]F7>ASa[`imtwwxlPB???@@@><;;:8863367;@A<668<@AA@@@@???>>>??A@>>@A==@HMOQPSXZZ\\^`bdfcZVSRVYXSIFOOKLJGM_mpaNUelmdVNQ]eecakppnoppooomlfk]\\yGBi}{SFMA^|vg`nwyzrtrpmj^YVWS[p~pm}smnb[djiePB@;<9AU__^^TNW_[MVdYWMT\\NGO[^_bgkjZYdSHQTV_ilYYyoec^VSUXYSSQQW^cnv~~PPmdZ\\cfmN333=Wkkfea____]WRJB94344444444444444444433333333333333333333333344444445555555555555578777>B727;UtH6C>>GJ@99745755<:<F=679:>JQLJJHHS^YZPLRRJIJFV~tSQPJJKJGO\\XORW^`[arƫѥѽƞǛ̫wůȽ¹ͻ²ïͼ̸»ôʾϿxõӺ͹nǼǪyɝ[ym|hmr\\s|UQxvoFHEDB@99=DFRSJDH_gjob\\\\Rb_TVKXUZizh_Ytnotzafg[bg]ZYefMA_`PNSRIBKJ>65*<waSLBD>=5CRB4DSM@@F4J\\LUR_rlZa]TL6CJYjNU`NKVXzsNJLWkk^B`X``0/QyjfvpkiUT^fdRG[KZ\\mYGfG7T{~qK5]Qt\\@vsקz~7=etqx@]ZZfN^c\\TG58BDAOMXebMLLGID?;BLHMFGI>>>AUZVLSULHTZR<8BJB512445:>BEGJSOC?6&*64*',--.47;@IORSVYY\\`bdedccehhfba`[TQPPOMLT\\T?HZ^D-+7IH82233395154555655545443340<D==HF@AJOKLaiX79@921<GF@::95102<We_[XVWY_ss~oUfpRXdeWD?KP:-azx{]DLNNLIHKNNJGFJJK[r{xr̴iRsqc\\ashNNdsbBN}}}[?MbUMLVtuj`bV4NmO:DNOKHD=66=E=47=A=:;:?A947AMQMJMZmliy{lv{zx|~}xzicht{tQ<EOQOLIGGP`VFTpvplmor|iefqokjge[HAJKB>;:KH\\c=06;GLMKOZc~xbd[acffaUTUJEMKECAEGA@FCBHPTTT`oqkcWJj`PXjjWXokGEPTYcdXD@F@<?AEC88Rod{i@^?07;?><::87;@=;::;<5/0,-6;<===;:::;>=75;?99JSF:7=?@BB>4244420399665216AD50?HHFBIMKX`TFDFGGECFIKHA==>>?CHMG>9;<<<:867962b9+4452254@`RMPI?>=:ABNVRZc]bmupnwXfcygjy{dmuB664>LQQSRMHIMH=897400245546;<<DMDDMSWRHBCJMKHGHJJJIIHHFD@>@>87@HG=64;FIGJNOMMTcqnSWVNZnldZOUWKLQLJKTWW\\k{h;>LOD<BHGHLMLdzfN]mhaUJHWnsd]`[RMXojTPT::999;=?@ABA>;;;<<=>?????@AABCCDEEDEGGHHHIJLLGDGLMORX\\\\\\]^^`acgjlmpk\\MFEFFFDDDEEDISRPVY^dc`jl^[]Y[djdSJQWJHTI>?DONHV_druiotZB?>=>?@>=;<;9973255:@B=999<>AAAA@A@????>>@AA?>>?A@@DHNMILV[\\]`acegd_ZUSVYZYOIOQMMKFK`osr[YnzumhSM]jjiejrokoqqqoopngqx{hQQouc]]bew|fOPQ:Eznbncd|}v~g_deeywbq|uspnt{{fLJT^_SQE;>>ES[^`^URYZXTUbdahmo_SYcnocadhaemYJORWagcUViqf\\[YRSZ`YOQKBJXagedeSWd\\X]]gb;143A[lnje`^___]YVNC944444444444444444443333333333333333333333333344444555555555555555677859QP49OJE?=FA>>>@@96899969<>@<89;98BNMJJJILXVOJKPQNKKEa{XALQKIJNQSTWUQUlxv׮˳ĬΗ~ˤuxȝɲͿƱ̯ɹ³˾ҵɛɯyxʙŖ`n~ynfrfh|k¿ϦgHJECB@::=@CKMD@NQ{ƽl`kh^URia]Q\\cKGcqt^Wd~pusy\\^la\\feb_[\\]OQ\\YSQSM>HKA63,:r{aRJ@A:7:MI8;FG?AA@FZTUUWa^[O_QK<HYP_PAPP=EOSHOZi[}~gwfiAhvAXgPdza[WmypeVK^M;8cP9Yyo}mzaBiԺ{a'Yq{ojAdSloI^eWJ<1=>DCRK^eZOILGGH<6LIEMKLCB=?QYbUKVSLSUOB5?NPC4'*//269<@CFKMQSLD<61,*+,,-158>DLPRUWUW[^abbccdeecba`_\\YUPNMOSRKHOUXNBFPK6079647?63;?B;;@=<>@@?95585;>=:@C@IOVML^gY9AA;6.5>B@:885101;]_XVVUSTaiUz}|o^c^VJ?@LR=2i|rSFFGGEBA@CIHFHKHF`ŲmfuXVY^]YRZxm|}Qx[Pkv|u^_dK?XP;EPLIO[ZE799PjG-515>:8==:9:<BEBGR[i{ndjomnnqw{z~{ntutv`FAJOQNFJJLNOS\\gjhgekqx|gbdfa^`XH=AHIFA<9;C\\^L47=BCDHT`\\j^\\|uVJLQ[b^UMTYVSRNFAABGLLOOLJKQTYcg`^j\\GefBU[NHPbrm_WNKMQWUKEEF?<@BABH\\`WSzi?I9/3:@A>:741599:;=?94312237;<<<=<;?BB>628>@???=879:9:81,.0/.16=FID@<867<>87BGJJFHPOPOD@HJIGCACDDDB=>>?ACHOKD@>=<95456941i_1=;97007=CJQUSNGA<;GRZYTY\\`fhorZZſ´ynh_WMFGKLJG;565543334435<???AAHZccZPDDTWI?@EHHIIEA@@@?@EEBAHLH>646>FKQUXQLOUa\\PZ\\LMkuZTZRU[WKGFJSZan}{RCKEB>>HKMSSOJ^kffr^MTXQQjnYVWXZ`\\RQSSRRNLNSTS::99:<=>>?@?=;;:;<=>???@@AAAAABDFFEEGGHIIIIIFACKPRUW[\\\\\\]\\[[]_bdeb`daRFEEDEDDEFFCGOKGKQYZVTYff^]Z[hqvjX\\U:8?;=>?A@GQY_geVWlfNB@??@A><;<<<;843339BGB89<<=?AAA@A@@@????@AA??@ACB>DILGDNZ\\[_acdfhfd`XUVWX[XRPPPNMHI\\mptjT\\naen_O`|yj`eg_boqrrpnomlow}{yocVUR`^SakhLTYD4BcoujMZdQO[j_ewuypcdzu{nfegbhsrjm~|tZTdi_TWUFDJNT[]]Z]hjd\\UZ__^hgd^U_ge^_a`bhePCGRXZZ[^ZVYabZURRbnmaPKC:@P]hieZLTZXW\\]jP2652E_oohb_^__^]YWPD944434444444444444443333333333333333333333344444444455555566665555677973JnN.\\dB=BLLFA=>D=8BC==;:>AA:89<:8=IKJJJKLJPOMNPPNMII[WILNPLJKQ[[URW^Wvѳĭ̓{|ҳ¿þŵ̯ƿιƹϾʽƱδǳЬȿζʴs}Öv_ffnhl}÷mVgFPB@E@8<><@EB<?QFJǷw]ejeZWbW`Lx{YQnoq^Zn{n~xc[]k`_dkh^XUWOLT[XRNDCD<1.'4u~r_QE>>7;EN=9=><;<RXXMTTQV]JKSYJBDibOB8LV82=E\\w=ave\\vowusG>NMjkPDHY|iZ?LZkNhoRBamƭf~HBaΛv|yE6jZvTSZQYJgaQE65=>BJNMbdVJHMGMO5>TFGOLFAJBNT]^JMZZUSNE9@LVRF;/*--1559=@@AFRYRPMD;;;5/+*.27<AHMQUTTUWZ]^accbcba_]]^_^ZTPNRRONTZRUXUZYI9BFA<9ED5=IRLBGJGGKKJG>9;;=?7>87<BQTVQL\\cY?GC?<:<;=B=7542009XUSSTSTSy^}}}xmUIDCEP^QGgy{ykZH<9?B@<:=DEFIIGHLb©i[[MHJS`h{rzPRr~~|~v^[X@=:4C]_E>MZVC:;8Qw=30G]DEDBB=:9:63Jt|rnfjuric^^eiq|~|wuwz{vå|qw|hVMKLVXM]fNQPSY[^cffghmzu_Z^^TGNO?7?D>;=;79DTd[QP88>@@BJQU[J8Ocd`QONTZa\\HOY[VQJFCA?EPTPNMSSQTVV[\\YbTG[y_:LMFKQWaj}{Q@JQVZ^YJCJKBC?H_sWShP@_@/5<>@@?:8889977==74;FPYJ?8:<;=@><DC>95:>CEB@>;9999986344.0>JKMMJHGB<;>@::@EJPZVXZUI>AKKHHD><::=>===>@BFQUPFA?@=8778:89T`>9DA>8469<>AGSTRQKHOWTX\\WW_elmnpaSIDFX׵ΧŠunsƫlLTOB967777679;=:9=BCBCABOdhb[NL[ZH<=ADGJG@88:;=FHEDDJLHA=;:;CLNMMIHKNONKVf_Q_mZP\\THSRGCDIR\\hpqtpifjj]ZZVXUUUUVRJCGUYXXX]VSlzwgWQKGHNPRTVXUNJ::9::;<===>=<::9;<=>????@@@BBBBDFFEEFGHJJIIGFHNRQSVWXZ\\]^]\\Z[[\\]\\YUV\\TGDFFEGFECBCFGGHIKPRPOSZa`]^^cbmpZ]Z<3>;6>A==@DIPVUNJT`WFDBABB@=;<<>>:64329DJD88=<=>@B@@@@@@?@@@@AA@@@@CECBFH?BP][X]adeghggd[YWXXZYXTTSPOKKVgkor`[f_drsOKxo]]ZN\\pooqtolijmlf`bknfkgYWT[d`w}poV]WCCOVY__kv[SRPYT\\ddukijxntrxwidmuxtnlfcZLNSHHVRQ]^\\_glje\\TVSPOPONLR`aYYgiaX[X>;FQVVUWbe_\\eli^UVowm^F?BCDMTW]bWMRWWZ]ie>2843Gamlf_\\\\\\]\\YWVOD:444444444444444444333333333333333344444334444444444455555666656667888844dv9CjO;GT^_YOGBAEJD?CDAAAA=<>>;9;@GJJKQTDFMLMPRPMHU]IJMNKLJKO^baZMbqlƷőǣþżŻìĺzºϻɸƣÝɴm~ָio{nfhfbþy~bHHl@JA>CA9<?;?B;7?MACй|ccnfd]b]h`v|mfruwlnqnly}kZVac]U`ib\\PKPOJJTVRLB=<4/#9wp^NB<=6;K=165765Hj`JHVOP[OE]uVNRjlG1:QeNFBDEfqZtyZkcy}`}w^jxmZZ_6Hqoorb?7bq^Igitpoˉe~ADgťzhҦBSZXo}JOJ`x@QiTQA2:=>AKHQd`PHIIGVI9MQJMNGANJMPUaLK[_ZSLKA<IQQLHJC82./2257888@RREEGIHHKD2(+-.3:AEGOUTRSUXZ\\]_bccc`\\[\\\\]][VROQROPT\\[Z^\\\\[[V\\OFHGTH<LX[QJOQPQTSQLB<B=EI5A;6CLWV[WL]`YIPTNONJ@<@>62121/=[SQQMIV[qvzwvlmplhr{utvs]IBGLc|r|{wzvneN;96?EGIHEDCHJHGFCHendqjI:ALOd{}lOQVfux}yaKA;42CQitUBGIB=AJDNvD=lcSFJD8755<D\\yip~tqh_`hr}~wtqnrtprprv~pbjcWPU\\a{gTMMNTY\\_daWYb_WYbeaTOJB@AA>>;968GOMJMG;;>BCFGCJW:6Q^U^bfmnif]PT]bZPHD@>=>@MUOHLROHMVaeSO@HSXQHNLLTZiV=GNV[^ZHA[]BBEdzc^Y;UuB.7?CCHKKLIA::88<=9=?FO\\k[<5<:>FHBBDB>=??AFGGEC>>?>>=@B@98GZ`ZTNLMI@?=>???AHP[jeZWYM=AKLJHE?966<=<:<:9=GTZVNFDFC=;;;<;;A<;===>>:8::;:=BFJLJMVVLP[SUfomrtdQQSL;N׵Ԣɾ}H68=HKQg^AKH=569:;:9:@EFB@BEFFGC=OhgYSOS]XGABCCDEB?;<?ABGDA@DKJF@?@>>P^LCIJHGLPQJNis`VbcTXUHCEFAAIT[`^\\wɡqxzpjfi`TTcypCEYad`YVUNJ[z|mjfZMJLOQVWWXMF:::;;;;=<;<;;::9:<>>>??>?@@ACBCDEEDDFGHKLLJKQTPOPSWWVX\\]^^]ZYYXXWVTPUQGEGDABBBA=?@;<GNLLMOQTU[`]b`a^NNTWbYFIPCHSE<789?IKGGFKNIFDCCBB>;<<>?>95338BJD;79<<>@CB@@@@@@AA@@AA@@@@CIH<:@?>DJJO\\deghhhjhc[XXYY[[XWUSPNMQY`gmm^[j^im\\crxsc[XOSghhfihkeelnpobZNPUPSQIFU[\\u}sfNTn]EJI[ik`VZb[Uasvjb\\txszxu|{qmdTFKQWXJEKWbh```ULQZTPUUTUZeomeckjXMOOE=L\\ZW[`fc[]oxymZk|gM57FKGEIQUYUOQVWZ^kP35745JbjkeZWVXZXUUTNE:444554444444444333333333333333333444444444444444455455566666656667789:;4;kHOPKNU`oof`SDLGABIIFDB@?CGFB<:;DJHIYT@=FGKPSRNOijOJMLJLNPQ]n|zcʱļǫծɼƼ¡ɻǼ̕šoʹƱ~wŧhvζpupqssc\\mú~vbQUK\\{<DO?=C9<@<@@96@DCQa÷uiliebfmjpbeeZ[_eb`b\\a}ok^XV[\\WSZb`VFCNSFENSQE<==4%>wx^L?;<66:-/2066FgbSAM]HQH:czaSWb[G7DZ]XXmca_rlixvrv|o]rudd\\WdkzrTBD@ayp^boO\"Bb[7Obl``NMfzdwDTKis>MHyY?V`WJ41<<;CJJUbVHHIEI]DBNQOMJCKQLGLYZPY`ZRJNMA@FNNFFNHA7.-./---,,ATJ827@DDIK?,)*/37;CJRVUQRTWXYYY\\abb`^^__^\\[XTQOPOPQQc``__b_\\aUQTV_PLYa_VPUWWYZ[[RECMCNK:E=>JYa`^WN\\_^PYb\\_YPD:;=71/0..IhSMNHF_bWq|xm`lg]YV^l|oluFMKOc|zv{yrspe_P<?CFKH?=BIKIEI]sekuqXA;>?Grf_{wmME<Ics{xX:DH:GZUcsQAA>:9Yj[v[~zbNL?57?DMar«{pv}|sedjonx}pllnspquoy~|yp[^rvgVSZmWINTUQQ[e[IMWYWX\\ahgZIEDDD@BFFFGJKJIKC:;CGHHB=JJAEMWWVWakmrlUU[_bVLI@8<<85Ib[H?GMDERdhUA>JRNKMPLKUf~d@@JOJBHE>di?BLjzXWG5Te;/9AGLUXXVJ>:9::===GC702<JJC;8>KYWMFDDC?;ADDHIJA@DBAA>@E=>Xijd_ZUSJ==>>>;;EQZchg^SJC=AHKJHEC@<;><68<949JWXVRIFHHC@>><==@??><;===:9755447>ABEGMNRXTUcb`aXJFDMREjμe¦U:GC<72138=DD;36;=>=<>CE@?CFGGKPKHZlcQQQSVPEDHEABCDDDFFDBBBA?ADFEDEB@SlT<FKCHMPQQOMU`XT^h`[SGCFE@>HTWXY`ζ|~wgPgbUfeYTW[lr]jkd\\UPRX[XUWZX::::;;;<<;;;:999:<>>>>>>?@@ABBCDDDEDEGIKLLMNRNLLORVVVY\\^_^\\ZXWWWWWVSSRKDDIPV\\`fg[IBQSMNLLNSSVZ^]ckleI;LPWilPIWYVN</9?<;?AACCBGGGFDBBA><=>@>;6326=EC>849;;@EBAA@@@@@AA@@AAA@@BIKB8<?;:8:FXhjhhhijjg^XYYY[[ZYVSROOONPXdrfWTOOSarolnoZWOLOTY_\\cgb`ikhb^UUa[SbSDOfv}ydZYdurP?J]gZ_^[`~{nhlyy{pkpr~~}lp{yp^Q[faa`L@K^mfetqcYTVVNQ[^[YY]mY[TVQKQMIEP`^[_de`V[htphZzbG8@KMFAEMQUTOQTV[dc:06528L]bfbWTTUVUSSRME;445544444444443333333333333333334444444445554444555455566666666667779;;81LU?UUJPhpmM=E?GMIFDA@?AGSSK?=FJBIYP>>@?HPTRMRrdRMPU[a_Z`iqżn̹{xĤî̸ǽƤϸļ˯kĵzoƠirϾopo}{mRôsncXWPJ49BZB9B<=>?@?97E>LV=vhkcddga]PPPFGIIHGIHSo|dfaWUTYXXX^_XNB?JSLGMNE><A91@u|m\\J?;=647=>22;I\\S=GMNRDE?S{mSulPBLhxpZLWjqkdkYZ|i]scekQEGWjOOUhvbT|saF8Jcr\\^^D4KLK92^wq[eOWɖo}UdDTZm\\AHfxAEYhXC.285:ENVZ[IAHJ?T^DGO[LNDGQOHBLUSUVSQMIRN?;EPJ=AD7<6.4=?69867DRF1(4>AAFKHA:2.2=CGJNUUQQSUXXWWY]^^^^_aa`^\\YUQOOORTMM[``ac]\\a^\\\\\\^WW_a_YUVY[[\\_^UIISOSLDNIIMV_[YUPY^_U]f]]WXH;8:72.-,-QqYWPJVe]Sgl]QFpz[\\j|wè~FKFeUe|uy|zztUAAEA<<>ADJLEHkvrqukVV]O>6:?SZaw{zzU?:7@[szpMD]RD]gb^f^GAGSO9T~z}|zK4;;Qkinywtutswtnnqf\\o}iehoxq|}sxvnif]anvtdUYp}`OZfXKJWgVGNLTWWWSLIHFDDDGAAPagXLLIGIA7?JKFD@=DHJLJQWPIV[YomPUY[^QGG?9<;74DZUKCBMOPX`aS@>JPLGMPJITfynCADIA7>FE^nN@B`^NR84:951;CHOSQME>97777:<?CB7--6LXSA:@Od_NDABB@@AFFEIKD?ELLD??C==M]hjkeZUK<<??==KZaedcd^O=CC<@LKFEEEA=;757:;;;HVXTQJDFJJC>===??=;9:=<:;863113?JSYYVJMPOQQOWT[[I@=?NWM^u_tQڥxJDD@?<7557<@A=;<??????=9:AGGFMTX]dhVOQQRSNMIHFCCDDEGGFDBBBA@??A?<79FYnydHMRPQQNLLSRQ\\f]PDDFD@?CGHU[\\}ylbjkn̫\\YYi~rnge]UhYU_``a_YWZ[XUW]^999:9::<;;;;;::9:<=>>>>>???ABBCDEEEDEGIKLLNNIDGMNQSVXZ\\^_]\\ZXWWWXXYVRUWUXenpsvwv}va`ULRRMMRRTY\\^ahmgSHVXHXr`JVaYVC4:>>97@CBBADDDEDCCDC@?>@@>83259=@A>99;=@FEA@@@???@@@AAAA@AAELMC==<;77<J\\dddeghhgaZZYYZZYWUTSQOOJIOYfiTCCJT[aigea[WQJCCM_ebccZ[elZURMff]l^QUllgiZ^ovwqj`wsWVheWg~tnnuxwwlWMU\\_biaQUab\\Zbkj]Yb^QSU[]\\ZM^CGGMO[ZVKWZ\\_^_ba]VV]ge\\Xʄ[TMOPLFACINRRPRRTYeP13542=LV\\`_[XWWWVTSQLE;44554444444433333333333333333333444444444555444455545556666666667777767BJEFHL@Hjv`vÇ>:BNQJD@@AB>@KT[NEIH@IUMGJCBNRRPMOiaWSX^dkjekxҼŴ¸ĵnvt~nŸϥ˹ȭ˻ƽոŸͨʡ~ʪzʿs~zn}{pxqapxeteWVWLD8:7[M6A>>?>><8;DBcH=rlicb_XMPWQY`[VLVOD=CVkd`^VSPQVWS[aZURC8EUQHLMA9A?;>glbYI?>=54:EB.3AVX52GROKDCOpqewdObzlUPHCLckVb[De|poh_o^frsBMm`MEhh`kmXOEJVok7GZ]qMLW]2Xb~xrf?wqXoVBS{yhJAIs\\;EirS>:9309JUXUP?=JJ<d[EJX_KKBNOG@DMQPMIJLLRTG<<ML>8B>7>40@JHDGCBJGI?,-9<<>CHKLIFDC<99=FPTPQRTVXXXYYY[]_``ab`\\WTRRQOOVXHIab^_```_^[Z]]^^][[XSUZZ\\_[WOUWW[NMXRPPRSPQTRVYYVae^_ZXCB9674.))*Psa^QKV^QJ^`Q?:Zoտן@>Hsjeformr}sjhgffc\\PCBB;3/8AFGNK<Krvstn_TWZXVQXu~zyxzqYB:A>:Pp|aAOe_JT[`YG=<?B]}mf~yY8FPSgxz~}zzwlfjjmqkaXewmcfkqo~uoed`\\\\blxwb^qxb_oiQIKRZRRUCFNT[WG79;B@DOC<N`aMPYJEEEBHJFA?>;?HLNMNVSGTVP^UGSWZUC?EA<<<879@EIH<BPY]ZPF@?FMGDHLFGPZlszTDBHIFEIKf{X=4`ptR>714:>ADEEDB=86644337<>=>:87<LSSKBCR`XE;<==?BCEFFIMKCHVZM@=;:54B_ospcWL>=>>@Lbjhhb_`^SFME78DECDDDB<666448?DIRXWNGCDIKG?;;:863118BA:621301:Tlv{xnaYVTafLPUYRB@ZwmYbquknsef~Y>EKLKLKC:69AEC@@B?;97678@EEEIS\\\\ZSKOPQQUXWQGGDDDCCCAACCCCDDCGC6=QaZfjEKONPPNMQNFMZZJDCDCAADB=Ujbgyik܈<9@CP̴^Mu|s{{idc[êsX]^`^ahb[ZXWWURQ889989:;;;;;;;:::;=>>>>>>>>@BBCDEEDDEFIKMLLJDBGKMOSWZ[]__]\\ZXWWWWY[]]_dfhlopprttuwrk_TSRRQONRY\\[[\\^ac`a_QQYjnZT`uaB:;=77?CAA@?>ABBCCEFCAAABA;32469>DE@779:BGC?????>?@@AAAAAB@AIPJ?;<;98:<DPV[adeggc][ZZYYYWUUUSPNLJKOSTOGBO^XT^^VSWWSL@=Nbe^be_Z`st`[ReuzxbUOf}|wiX_^UYfqyyfawx|ypaS\\ml^Z^\\fyltz|rl~~maVRONXagc_\\TRUYXdg[^ddgka\\befZWKQVZV^`Z\\YPPZ][`cc_VW[_\\WWVPKMLF?=CLOOQTRTXa>47555BLRY[[ZZYXWVTROJC;5455444444443333334333333333333334444445555555555665555666666667888869<Ro]NRMUnucUd<MVZYUOONGCJLNPRLJHEKTXZRKMWSQNLK]^\\WZX[clpv̱Ήvčzm{hv{ûŹʽžĽȶɸ°ľʶ̭ƴʲwɴoxvouprvzƭy`fsvĸwkaXWQK=CdT-TR69;@@=;6:@<Yj?SZȩvffe`TQq|aryl`Ym^QDHOXb\\YTPMHJUSO_bRMQE7?SQJPK9:A=>X^^UH?A>46?GP46HXR4:HKSFCMWbafuehp]A?BAGScRV`EIyscbaīxvGSszmbjiWJCM[fvv}g=6BhuXH^Sf{vYQþ{ja~NAZl]B=YcA;O}bXEE7..=RXPGD<@PGFlUFSaYMEFOF>CIMOKBCKORWQ@?IPA:BI=G@3:EJ@AABFKB<0/>A979=>BDDHLMD>;:CMPOPQSUWWXXVUX\\^`__`_[VSSTSOLNWTFMYZ]^__`][[]`_YVW[ULOTWWXVVU][]]PS[TSTXSRQVVSWZX_a^_[YNM=777/'%*Pp_]OHNQHARaR<;XMz޽fboʇwlYZ]_[Y]`WOPOONKIKID9/,3DJGIJ>7?IUaiqvoqfZagc]k{ziNF>;ELOUlxX@T`\\GDHCA<99:8J{|y|zvsMN\\`bxx{}tia][[bicZYalmfijkgqvvsi\\V\\^`bfp|tjs~umsucOJLKQSUV@;@M^`N738DJSdN6=EKRfeKEDB@A@@>>>>?DGKHFSTCJLILMRU\\]XLCEC@=:8878=@B73:FTVJ=<ABA>@HJEDIWslQkx`QHKLKIEFd{Z92i`ZPHJJKQTSNKJ>96555447;??>:34>MIHHFEKSPA;:<=?ABDEGKMNECOTNB>743.7Ujx{iNGDA@=ALWX[^\\^_`d`ZB<ADCBDDCB@>=9317?EFIPRKEBCDGKE;41333339CC<61/05:DR_eii`cdacUGPK77MƳ|rweoyܔrss}}E6CMLPUUL>5;?BEHJD<:<?BBCCDCCKTMJLNNORQUOLWJIGDC@?==?CDDEGKKEDkΗۭeEFLOSRPNNMJIKKGDBBACDCEmµ|RHs͎G;>G`»slzqcakkdbj˚{z~nekxn]XVWYVPO888899:;;;;;;;:::;=>>>>>>>>@BCCDEDDDCFIKMLJGEEIMPRUZ\\\\]_^^\\ZXWWY[]addccehmqpppqsuutnll]MKOOQUY[XUQXchdWRPLGLSJGYe]J<9FF<=@ABAAAAAABBDFCBDEDE@7568:>DFB=:63;CB@???@@AA@AAABCC?=DJE=9:998969EMRY_`____[WWZ[[XSRVUOLLJHJKIHHEGPW]^XTUUTRLCESYUZ_\\ejgiwhNBI[gYLUlvQ^[OQeYWwy_lp[wzabmwyjhttzns~}rwxqa[[\\^ff_^VRWZ]iri_`alwype`WPYXYhe\\bba]`YLMXYRX`b\\U]afp[LEC?CJG;9BLOOQTPUdQ36667:EKPWWWWXWWWWTRMHB;535544444444333334543333333333334444444455555555666555566666667788987<We_dkjg`\\`cccef]S~sV_fh_VNBEUUMIJLKKLMWc\\PHHKMMLMIRZ`]XNVivƭĶy}qihżǿǵľòƸʭɥºο׵Ͷͦàļþǩªutnehgoyd\\}v«vmb[WSMIGDJ:GN997CA>:7?@@jZH`NgŻfjjdZdkob]YrgWQRIP[YZSNNJAESMLa_FGN?5COJNV?4<>;OWXPE?C=458;fL=IRNED@MNFIFEKYbobWJD9AOOGM^\\SX=;Q}noskiZW}z_QHDFLVVequtxZ8iwfvtZR9^k_Zap̪ZrsxA@u]W?>^O8<mlQVM8,*/CWSIC@<FSEViLL\\aVNBIH:;ILLKE>FQUTSI?GOC@GEC>F85@DG>BA@@>70.:DC<645458:?FHHGJIIJIKOPQRTTUUSUVY\\\\\\ZY\\[VTUVUQMILSRIEMZ]Y[^]ZWW[XPOTWPHJMNNNPMNU[[XUY]WWY[VSRYWRX^X_^^`]]WSF?992(%/Xj\\bXNLIHCJYP=Kwd<Rvns}Ϳj^mpcdlm_ZKLNQTUSTTPG>2/1;IMHD<4;DCEXohjueVcodMQl}vxwW=;:;<MkolmV>QN;5;=C=75=CDQu|xv~qh࿂[T`yzxsw~vdXZXPQ]ebZdih~gjne^ijeZZZVX_bcciv~{uwzyvxvo`JBKSSLHJC@?ES^U:07=DZwb?=GPevhNFG=24;>>??@@AB@==IR?AGFL\\lgfkhVFHF=9984==7:C?406DQM@=@?<<@FHDBOh{v]M\\ia]YVLIKF?^xP-6]tt}r|yoVAERTTQPMC8765799;<>?>:5;HK?::=>=BIE=:=??@BD>=JOK@6;BEA=83425BNm}iFGJIB<?><@Vb^`afnl]INOJDADDCBFJD;56:>?BEFHEAAB@>BB:1048::;=?@>;3-/?PTX\\VT[Q]\\RSpSAGF?>>jyqnbpwvv]B?DHLOG:;=DPXXRLHGHIIFDC@=BFBBEPQRTRNI<PSRECA@@?ADFGGHNOGJjMHGMRUVTRQPNMJFDEDA@CGE=FǽoyPLU[hٝ|fjg`gp˺jiuka\\Y_a^_8888899:;;;;;;:::;=>>>>>>>>@AACCDDEDEGHJLKIHGEINPRUZ\\\\[]^^][ZXWY\\_`_\\[ajolhhnstttttsqrq]ILQUXXZVUVcdWQJFHFB>=CLL?AK?>IUP<@CDDBBBBCEIFCBCDDDEC=989<>ADECA=63;CBBA?@CCA@BBACCDC>=??;8887788<DKNSWWUWZ\\ZVXZ\\][SMSXPIIIHIKIGHFERisibeWPTSLJJJIRWSXgppmdW>CGB_ijyiqdQU]Zdpgizqnfg~slfithstixxt|~m][YVWgi\\WQT[VS]_ZWZ`dfa^]SGFW[clfdgga[SWWX]XLOWYZ_mtqjNfЛL=99>HD9>GKOOQWZde?15668?HJNUUTUWWWWVTQLHA9445544444444333334433333333333334444444455567766666655556666666678897@jbPMMIOWXSV_`ZTv]Z^ZLGHEFTYVQNLMNNNVa^aaYRPNLPLNR^d[R^Źʧ{rkcqŻ°ͥ¾ĺɱ̳¡пʧƊã{źȻũtdcd_qy~xhUoÿrc\\XTMIDLE=UOB?=@CC@==?<RcHU]FH̺oikd[oqr`]cZwoRVTEPTS[SOOME<AKHQeX?EMC;BJSSN?6;8LXXNC@E?2*+<wZ@@EF;?NG8GN)0G^yg?4>@G[]KGXa`[7(JXnmjhvp~cnjmiXO^tyxtxu|g^~gOr^YfjUW[ekb^Siė~fgikn|,OkXM7GV>1Q{QOG;',*2KUKC@??NQF`_HS^bUNCKA2=LLIGBBLYYRLEFJH?IBB=D;5<?FE@@A>84<=>?BC>77741//1579;ADHFFFJMMNNOPOPSVYZXWVTWYVTTVVSNIHLSPFGSWTTVVTOORKFKPTQJJLLLLPHDKUVTTZ_ZYZ[VQXZWXZ^Z]\\^^]_ZUPF@A?1+2a]YbbUJFAACKH@R`TQPJWw~xōfigm~`KPQQRQMQSI9425?GIE<52>EFII^}gkseW`cP=58?S}{ohVA57:9A[g`YK8=VP73<]X6:KN^{}wnuoxܩfQzujnvl`YRNQWYbprowji_gnc\\cdcQRZSXa`Z[bmruwyywwvm`^R>?MPKEGOPIDFJTVG6032M|rK@DRfm[DBDB98=??@??>@A:=DEN><>@O_iijqiUJIEBED83<?7AG>998>IKA>>BA@@ABAI]njZWYPOTZ^XFDIHChQ*2@DK`{M19;<?BBA>;86779::9:;;>DIMI7557636<;88:==@DB5/@MF903;>=;8545459ShZHMQQOG?:5Legdfjjge\\RSQG?@A?>AGJI?9;;79CIGDBAACA;67656:<?AAA?>??728M`gii]i|\\bUMPQUD?NTG<FKGTtspmrwvWKQDHgaGCF@@ISXZYYWPKIJIFED?:;::99ISTVKAG9=PNECBCCCFIIHHINGJIDHGV^YSQQQPNMIBBEB@ACHICGRWUf{ogg^[dibUr̃oզyz|~rds΍tq]cozg[Yirnl88888999:;;<<;:::;<>>>>>>>>@AABCDDDCEGHJKKIHGFHHKQXYXWX[^]\\[YWVXYYXVWZ^b`Y\\irssuutsrrqqoeXRUWYXUTVXOFEGLLGEEBFKG=<ORD?AQLAHHDBBABDINH@?CGGEDCB=86;>=AGEGG?9BGEDA?ACCA@BBBCCCEB<:::977889:<?BKTUTUVVWXWYZZ]^ULNUTJDDHJFHKHFHUimddiVKSTRTPGGUVS^fmqsdWNXRHYWUs]g][Wkk^m}xxw}}aat}y|xzxvtnllpnegocXRW]^^\\ZWYZ[\\_cfle_SRTMIMddslgaea]YOOWZ]ZRRXX^iiug>7RI823>FC>CILLOWbhkW62666:@GKMRRSUWVVUTSRKGA944445444444433333333333333333333344434444556767776665666666666767886OԧgD>>DR[]^^`bb\\Ums]E:AJPU\\^]]YQNOQPN[u^PORQQN[eefk¼·jualûǾįûȿͺѻɾʥͫ׵˙̨ér_fgZyvqřrPrht\\ZWSJD?HG>+Y>7CEEC@=>;@\\QFYO>Wǲxeke^{gz{XagRtnPWaNMLKXTPPPROBDKJ\\hM?QRB=GUUNKB>4FSWODBI@0(7`yM:8:?4>UFIdiA7@\\oK6>ST[ZH@NUXZ@28^jui~}r`Vkzdrihb`WMLasv`MKT`Z]oqVIuyONaUyYsPh_JΞxw``acfY&fRO=4JH27mbNRA)(+*8OOA@<:BQLKaTN[^`UJBL<1CSJBIFITUQOLFGHFGH@B@A7<@=ECD?=8/4DJE=BD>9=>72,)(.10026=ABACGIIJKLNPQTVVUTTUWWTSSUVSMJKLNPNJMQLHIIHFII@AJKQRKJMNMOPLGMXWSNQYWX\\[WS^[X^[^[\\\\[^a]\\YXLLJB8-1e]SYWNKKE??DA@QUOK__Hh||e_fouxY\\[ZQIEHH=4231<KJ=105ED=FP\\pw~yhffgebWKA;GTd{ugSHIG>46<BKONH=2./Z}e>8he66C@Sv}yqimriyΘxw{ywmipxgTKPMCJctnpyhnajndf`PYTCIPZdYRbmpqoruusqcNIMFDMQJEFHNSSNIGGJI;4?7?xT;>O^`WMMMKFA=@ABA==GF=NdXS<26K^`ZXctncRG@?TY<3;;<D>78=<=?=96@DBCCA=>N`cXRSYH2>SZM;?DAGz\\/.07YsF:;;<<:68@A;8789887767<GILN:7984367;@A>;>CE@5-4@@>??@?<976422127?=>FPU[MDIPcjfjoohde]SOG=<>>77FKNTMC?949CHGFCAABB;339<;:=ADECA@AA==EOWafpnlmhjsqYILPf\\Z^IHNY`mlflpdx73>BJGBACSiGACBO\\[YYYXSKGIJIHFC?=9535>IMOB9:><HHCCDDBAFKJIGGEC[gDGHSXTPQQQPNMKEFGBACDHLQOQH8hv[[jn^NMTRI>EݲpĦ|~vvٛtuwikkr|^[jy{vs8888889999;<<::;;;<==>>>>>?AAABCDCCDFFGHJJIGFEGGJTYXVTW\\]\\\\ZXVUVUUSSSONU[^hqqrtuuttuusqmkjaWVZZVQNGCGGGUUEHLDBGE?<DTSNX`OBEFCCA>?CJKE=;BHGEDEFA85;>;=BGIH@LWA6<@@AABABCCCDDDEE?87::8789<;999IUSVWPMQUVYYX\\_XMEHROB?BEILMHGHIORSTSRSUX\\YOE@IRRZgloooaK:?M]S;]q^|a@LEBIx[Vr}iWmu~ytlhhnvyyqg`[XW[YYXRPT`bXSYded]\\`YPMY[^Xb^[WXZUSUUUTTTZ\\][NWP67=F705@FFDEHKJM]kncB25678;>DJNOPRSTTSSSRPJFA9556555444444333333334553344333443334433235666678876677666665677676?pѯQGNS\\ggffeccbba]lnaRGOej`]ZWOMOSRNSqz]SQTTTNYhyĳnw|bpľƶ|Żyw~ïλƴξѾ̯ŭӻŮw{^jiT~w~xvQgefZXUQG@?BAB:.T9<KHD:9:;HUKMMAMokҸydeghw^rZ_]IihTYgRDHKRPU]\\]_PBFKOejI@PN@>NVDERK2<JQMEFJ@4;Ovc3.2;@;@KDSvtaC=VR@N[LGDC<DOO]Z9CAkgq|qzpSRLi~aLei}_JYwxtYDPc{ud]OF?ay_DRk@[M[gZunEiZUwfdUZ\\lD?kdK?-7D>4RjNZT>'))+@N@=A;9HNGOZMY]\\^TFEM:4OYBBOILNFJQLEFGHHCDBA89<<;BED;5217DJC=CC>;?<83+.(5202436;><>BEFHIKNPPNPQRRSUXUSRRTURNKLLLMOMKJGDCA>@EA;AFCJPKKMPQQNSQS^bVLJNUZ[ZYXbX[a^^Z\\[[__^_[YNXRI?13g]NOJGPVQFBC><KOQNsNEe}stzbcormxfgkmfRGE?2--/--@I;:E;589@M\\cc^m|d^aagjgb]QEQkdgiOABCA=?GQPR]VD:5.+,CoyeSa`=8FBF_qttrnhffYQuwswxzzvjggdREHKGEJ`xthvdl`fkggU<ERIDNY[KTortrnmmkjaK>DGDFJLKLJINPKJLIGCC@?VcKgj@7CR_kgB::;?EE@:=ORF]vxn61RaigN?TmmjRFK@JaL<A=;;59;;987666:<>BB@=:FW\\YWWYJ0@_^F9?C@Ee20:SxOKKKONH>9BGB;:;;;999788985AM=8:978;:<CEB@BGG@93103<GGB?<9743204773223AUXNQ`ookeotpjjjd_U@7::958JRV]SB<;8<BCBA??@@>946=BGEGGHHFBBEEDDEFFDTxssnsaER\\aujTcdqvalfaƬU<=??GKLKIGC<EJ=@A@CM]b`^^\\YSKIKKKJIHEA=;=?BFH?9;GJROEEFFDBFJIHGIKIPS@}Y=GGJKMOPRQPOONPRLBBGIMRXVSMHfƬ{f^A7CG@Ahʯw~gujpjpzxwcn|sv878878999::;:::;<<==>>>>>>?@ABBCDCCDFFEFHIGFGGIIMRVVVVY\\\\\\\\ZXVVUTTRRMJUfjeksrrusrrrsssuqegj`]_^[SKDERPIOQJJH?=C@;HYVScgZQG>@DEB?>ADA?>>@DFEEFHH?66;=<AGHA=TK.8CFFFC@@CDCCDDDFGC=:;<9789;:979LSKQTKDJQTVXXZ^[RJJNKDDEKW[SMLKIEFHF>AV_aaRA5>AFGTfpgjqbPERb``[brV?OG4>KFIasaYoxpyzu~wkY\\hj_clpkpnrz{}wqwvdTNOX_d`]_RDIX^WW^adedff\\KGLWMNZfTNW\\WSQSTUVW\\]RC88:>67H96<BEFFGIJGQdokS735668;?DJMOQRSTSSSRPLHF@745645444443333333334455545434444345443435777668876678876665568877>m׬ɓQHS_ifccdeeed_]ccu|YHVfdd_UQMKNQRSMatZTSPSSUNQbǻǾ»ùy}rhpӽ˿zöz}lmɴɽΨƻӽĪƼϞɳ̽{wjr`VwuvVb{g{|}^WSQLD<;;:=:A/N{<G;>58<=HNMKCMooVjoagl{c_gVIJ>_e[^dWCBCFHW\\VSRH9;BHRffJAKE9=H=?OG/8ALOGEI@49PaOOB:?DE?:@Li^hB7OEHb^C9C@MSRY]CIMATKr}i{z9g]v}m_0>LKXlwfRm}l^aa]FIPNJTk~igLDyc\\O4V_dRBlQl{~}n^[XW[|yPXhoNC1'=?5MfRRbK2(%-7EB5>C?=KKEPPN\\]]_OBKQ4<[Q;KNGE@EMJBCGECBF@=64989<HD@5333;EGB@CA?>@;6504(5.5>:35:<:9<@DFGHKNNLMNPRTUVURQRSRQOLKKKJKLKHCDA?<>B>;A@;DLJKNPPQTYTVccSMJQ_^YX]_`W^a_]\\\\Z[[`^_ZVT_YUI87feXPNNQRRND;8<CIWj}oG]z}wsosۧZ]Zcealzqfdgfon[G:5856>?KT9?eS06A?EWZMUeqwbY\\`dgkj^TRKNyoztPhwV<BED<;MgkdZH75GWSRM[nulb]GJ\\WXm|}ztomh^Vh}x}qkhie^UKPQGF_nqtjyclcabb[KEFSdQHNGVuqfpob[ec[QEBHD@DQ_aTGINOGEGINF:;AS|nzO6<M_syQ7004:BC@9@XXS_quH_h_H:EUVXTJSTLZZGA:769?@;=<28;<<<8<DGB;=M[]]\\YM9CVP>;><ARs54OqoaZSKGE>6@DB<<?=:9:9898:2*2@>:9889:876:CEGJKD;541,06:<=<974469<;::;95;GRSWSYZ\\dqvpnn]chN8677;;=MVXYM:5;=?FHB;;>?@@=98=ITTPLJIFDEFF?;DF@@dojebVHTYmobmmcmt]sGDA=BEINQPQONKHHGHGCDMW^ba^]\\UMLMMKJKHDDDFHEEKF:>@CLPKJIIHHHGFCDUZGDGHѭ=@EGFHKOPRQPPPQTXRDDJGJMMOOE=QxTA=@Ecpzkht~iUdh_rjoek|}7788889999:;:9::;;=>>=>>=??@AABBCCCDFEEEGFGGGFHKMPTTTVY]^\\[ZXWUTTRQLN[b`aipqpqsttsqqsuuupg^^_[\\_SJHFSTJDITOHA;DTWFHMWhiVNF;>CCBAA><7>FEABFGFFJLF926@IJGFDFD9<HIIJGB??CDCCCDEFEEC;;>;899::97;HPMNTSJDKRVWWY]\\YYYYVWUOS`dZUUQMJIJC<UlmejeJ>MFBIV_ih`bia\\ejcm{fP>=;96?PTV[^gqorojx|fUpzmv|{mjvroolnr{tvww||q^QOMPZagcYRPV]^[]gnhdggc]PGJW\\[VYOI^aUKQX\\]]]]XL<646::6wH<@@BDGHJJHJXhf]E537668;?FKLPRTTTTTUTPIEC>623444444355345555555555665455444566544556778998::889;>=9776568877?OD|ܡdPNORTPOSW]ege]Upohuym`OP_UUebWQLJMPQUQUe_SOQQQOOZgdkž°ǟyprzgʼֽɵ¼ŻîðӼӽɺļ{çͽϸ̺˼||{wvsYfn|xYjyf~kskVPMID@7798=HI,Zr:5C^LABJUODOdq_LNȮfgld^oUJ[]:RmgV^nWB78?IGA=?9128ACFcfFBC;559AA43<>IVGCG>1+6Q]aTEDFF<2ETNXZ6:ZTV_M:DRIOSZP@;ONA@]jpdvRJtqzenl{]Q\\SA9Gq~zj\\[LJGJV]ZVfuc[Ezxab;SeXENsDM}n[c\\UJb|eVUi]D8*)9;2XVG[\\='(&/??38HCACMHENMQY[^\\JDQN3H\\C?SGA@@HG?;@DCCHG9107:68GG>:9;75@JEDBB?ABC;3650(3:>=4258<<:9;>ACEHKLMMNPRUVUSQQRRQPONMKJIHJKHB<=?@A?=>?<9@IKKJLKU\\ZRYaUONQ_d][Z^c^\\aa^]]^Z[[^]ZWSTa^^V=D^qweSOLHORE:8<BBIcmil~yopnpk̀\\^oiLVmfh_[]OSzuO2<ZeZPhyp;9uvMHPLLJRW^_bf\\VZ]`ikibRFKSYlpgW]X<dydG@EGKE?I[[F2-.Cgxul_SQ\\eYIL\\SRkwunhklcbnVaoxvvtnnj^]ZW^h_Yl~|rydext`[ZVSWTWpgZ[PurkvpSJcbTOLSZLNXlylLDIOSPF@GLI>64:ce?5FSckTNVC<74;B?<UoYU\\kupW_L>8P]GW\\@BV__^Q?576?FB?=;77.HuY3=PTMEBJV_b_VM<89669=9GuD:kaWxwobOCHDD:;>A==:7>:986761/,,9A<87799<=:9?FLPPMC9:;50,-4;=;:88;??;:=@FEDFMSVTKHX`lyrqe9IZE25=DFBGSZZVG0/=@CJME?=>@DGFB>ANUQPNKLKIHIB1/BF=Ilvjeb^TOM]L?V]tbwrf\\UkhLMH>@EJNSVWWWULFJNVZUMB:G^a]]]\\ZQKLJJMG36IHNKFJMHB@>?AFGHIJKKGA>G\\VEJFJ@J?:BEFHIJMOOOQRRRTVRKFTrkRScloesmry~K:=HZjce`j{utm\\jdTVUXphjfj|9888899999;;:9999;=>>====>@AAAAABBBCEEEEFFGGEFHJKNRTVY[^_]ZYWUTTTRNJMPLWkqonlnruvusrtttropk[VZ\\`YOIDDFF>DWXE@EJdwbKLXb[F??:;<?@BA>;8@JHBBGIHHJLI@:?O[QDEGIIJMHAAA?==@CDCCDDEEFGF>8=<:99::::9=IUTQVM?@LWXXY\\[[\\]jwvdLHW]YWWWSKKKCUnoutw|ffVAFHNWa_Ybrm^]lnfmkRECA?><BIRYSSWQYxvrWVqsrfUW`kwuxwluxkc_ZUSU]YPUaheb^W]ic[\\\\WTJ@HMX^QPQM\\ZSP[_cd^]c]I;::9;=2[J?GDCDFJKIHNPPLJ<468458;?GKLPTTTTTTUVRKFC=74455444446556666667554455455554455564446868?DB=@?9;@DKJA:98778879<9?c^WRVOIILLKUegb_`|OOTRNKMMFRfbXTNLMOPT[daZQRTSSV^sͼ˿Í}xokǵyŵ¶¼ĳ̱Ĝ̼ŭҿ˼ȫϪ˨{˽ē;zy||tm\\ëmnx}^pyf}\\o{vYOMJHLB?:8@KTE+ei5dnGITWMI_jbMLQl¿kfkbbn_KV~pAEr_IZwfUD33<C@6;<5469<9Ea`K@;867;;.8IJMUEBG?/'$?]WTKFC?=?QYFUE2@^`bDD;HIFDOZA=OSD=\\|jbdhOWbywXAoo{hjsrboyk^fkfg_[pQQL]XqFV|^KAmgAu>v\\OpbBSeqUDKfU?/*)30>O>SbM0$(*1;4/BLBGMPGDIMSY[]XFIQH9NQ<IN==?=?@:8@EJKE5.0;A=6;M>=7@?;:EKEGC?AFHD;4:://?C;64447>?;79:=ADEGIKKMOQSTTQOOOQPONNMKJJHIJJC::ACA?@>;:9>IKGGJLVVTPYXRRU`g`\\[^bb]bd`^adb_\\Z]\\VUR\\d^c_KMPRfsiSHKXUHNYTRRShvzcatoeeopeyuǖkdmgVXYG;e^9B]zx[g]Gqr_afR=Umtvqie_\\]^c]PJIHIQXPCIJ^wA4OhfNEEIRSE9<A:8CIGMesthI5CYTC;CIN[[QKFKPUvѢx^R]URzoab]hnc_d_Yc[MYy|sii~mtdcr{w]TSV[WR]t}|zu{nytUNfh^XPUhidVY[N>FSVZTD>DGIE9.-<k~tL4=IW]Yhx]WREDJIEr`T^k}NTWOCQ{pF\\fC5Es|`_D139AFIMD=J:,urHVZTQMHJQ\\cYIA;66536ELV^Ez`ju^OILT\\hfZSa98B@;IXB9=;889;>58@?847;;?EDCDITZWWN>8<?A@::<ACA@=<?=99;:DQPNMOQVQER`s}wmU03EF8@MSRMOYagcE*1HKGEB=:<@FKNMIEFIKJNNHEAAIL>/2<:6?Zst}ofgbXNDFyX99I[slfchn^HIXSNICDHLRX[YVSTRHGLTZZ_^WZadddcb`WOMKKLB09HGMOJGHRKEB>=@BFGIKQL@>JRILYJBMT2BABCEFFHJLOOOQSSTSTUKpٮ^Iiirxxt\\ABF>=MggoǲdR^XEFWhjflxo9888899999:;99999:<>>====?@AAAAAAAACEFEEFEEEEEGHJMRWZZ\\^^\\ZXVVTTTRNKGESlvlfklmpsvtrrsssqjcjk_]]^b]NE?=@>=SoiWRPc|iXZ[I887889<==>?A=>FHDDIKJJLLKGGPYTGBDFFFIMF>=837=@BDDBCEFGGHIB9;==;:99;>;8DQSKLGAGLUYXYZ[\\YYguqbPLRPRVW_bWMLQ]ZUriOK>DSUU[qtj^T^sl`ZMEDBAAAFK[jZIf{qt{|kh]OXdtvpnins|{{nha[Z^ZSOORX^^YZ[WV[YQMLMNIEYVMQIOXPSTZ\\^]`dZYcZB8998;;3BrN@GECDGKLJJJD>E@7475139?BHMPRTUUUUVWWUPJE=64454444434555554444469988888988888;=:879::>IPJGHC;CNOUVM@<;:98889<7{ߢ`QUQ\\^RILMIJUeg^PkPLMNIDDDKZ_\\XUPNNNRW_s}k[XYWiͳŶͯy{y{{̿|et̳Ʒɝʺӹηɢ¾èƻsŽԔ¦|z|oggʫcxv|esss{exSo~vYOPSRULH@=?AB@8/rT}IN\\OPVb]QHR[SЧsfjjaTPSkeEKcGE`qbcX918DN>6??:11;?7Da_MG?:53<>7A[ONBBF>.&)0;ENOHA<AOUJMK22I^\\rC=7:7AJLICRZI0Hyuxf_aWAgbyg6:tzkjm{uxvs|p^mzwlxtkVgv|ht^]KlXkROpS<E~KO\\CiR^|SCmUbD5KcO2++(.0M?@`\\<++()27/8MGBQTOGCFMTZ\\YTELMF>ME@MC@>77?=4=JHD@2/9AEC98EE=<=@@@BFLKHA>ENMH<5<>9>D;366117<<;88:;=@ACDGGGIKNQQNMMNOONMLLKJJIIIHGE@><=?=989>DEACHKLLMNSVRUR\\je[]\\debefbaeifcb^]][YUSa]]fbTTRMKYncPM[SD[xtc^`afdQWae`jmmeatkoasϐYRMSWC>\\rlOGValc`}on~~ljhQG\\ks}ywn[WSMHFMVZPLPTOJCXsZABDU[OJHHKMLECEEIR][PQ]ejcPMRH:6?P__[]]\\PIXzx_[MB\\zkODLueSHFN]e^Qbtlm~o^nxvqjovga[QN_oaTbv~|~ps||b[pk_SDEh~c8555;IU[ZA=GJEEH?401In{wrR3;JSZYcxg[iz[SXUto[bfuzXWV^[qj4Gp_1G^iQ83:CY[^bM^GOuwbNNKEM[cdXAGE9532/8T^z{W{szx_Q3<cqwq\\iP3?FUljC9A<879?B:9==:67<@EMNNOQ\\^VXO715;JYZSFDGHE?=A@98=:7DRQLJGD<8CQhqiM:549:;FJQVWWWXbdM9H]ZJ@87<CMNMLKIEEFGJOLA8-0BG917:634GiszeX]b_P?<JUYbG3=@Lnmhhdh^KIWRHMJGJQYbdaYUYYPMKNTUZ_btytoi`XUTPNG94BMKQSLGHOMIC@@>=GNMPUTKAAEKVZJ>=4oZ9C?@CEFFGILNNPRTUUUOQշtZLnwXjFFCC=>XszTQRF<F]inmb[\\ggsȼ98888899999999999:<<<===>@@@AAAAABBCEFFEEEFFFFGGHMTZZY[^^\\[XVVTTRPNJFIYihaed`irssrrssqrpqfZ[ZXUU]dbWL@>@6?Xgssceuxmc`^TF>:79@<;9;BC<=GHCGMJJLLLNKKQI:8?BEE>ANK>7324<@@@BCDFGHIIKF>>>@?<::<BG>=>B@:;DNVXYWWX[]\\Y\\eg`fok_[^bkqfXX[WRez}w{zy`K=BNQUdlkpoZVlxuo^MFCBA?DTfm[CNuy|ZGMWfx~d^efhqzyvvxo\\ONRRRKBAEPWTQQMOU\\^SMMLO]ehb[JCGNMNSWUQ\\add^OC<9878::3@YG@EEBDFIJJFDJJJ;246323;DFHNSUVVVVVVVUSNIC:434555567788886677766>IHCDBBCBAAABEKLE?ACABIQRNONEAOXUYZTLGFIFAACCB=rΧN@OPNVZPJKKHM[ca[Okw^[[]VRRTX]][[XTRQPXeggwyb`cqõŹ½üãii~}ǣȨζл̺ͪƸҾͿŖǻɬҴ˝ڵ­qٖß|~{y~sh{ǶɆ_}ryqqa~ctRp}qZONgc_GHD@><878?HQFNFPXWMHNVYUjë~hhm_QY\\{~SLbU?Miie^XG75=RR;7BC8/7?;2I]TMC;558@EBWBGCAE>/%+1)+6CE@BGTV??DBCObTnP98DM]m_CCJK30SxhrU\\Z@DhelJ38m]VbnhlkYQND^^dyuttkxsmzXmHpP2PwDb}fN\\skvs=grEJ54McA',-+)BI2N[L3.3,0743HO=HZUKEBDKVZXUPHOKEDKBGGAH81>B37KF92/2DMH@85<D<=;A?DFFGQSIBAEMMH=6>CA@=3384*/68:>87989;=?@BDEFHKMMKLMMNMMLLLKKJIIIKNMH85>;339=GJ?:BJJFCKPWQSTUce[ZZfohgjcagjgdbab`^\\[UU]T]d`][WU]UZdXHNKHWrweXVRHMINUr{c^YUin\\RKNy5GOWCHocnVGliQ]ep|zvvnl`RUOFVfdfk^\\\\PMRX[`^TJOWTGAHNFKQMNMIEDGGFJRWTSUNFFNSROU]ZSNA/1=Jad]ZZWTQblw{zyunijkusPg]ZXMOTWWU_igkilolot|fWbci{wjjqrot{yq|jgxqdQGSn`/215BMYdR8EMOG?><974<XssnT38KW]\\]mhS=?\\fi|y_Y\\u`^`Yiqvc=Ios9Lft\\>5Dbn^r_dbֻ`X[D@Ud_sxNOJ>623@Zp{k{eousR3HdmlZLny:6Khu_=?D=:65<A??A?>:8:CHMQRTW]YRTA)/87EZegUHFHF>:CG>8@E>9DPYN:49AFFJHA316774454@T[[VNLQMM\\f`ODCIPVUQKKIHCACHKNG93,/:B:49====H_gsqTMO[`T@:88C\\VIJB9J~yhnjilWGHOFBMMIKVcmkifcfh`ZVZ\\[YQL]svx{zurzVTSD8<IPPVUPOPMKHGHE>DPTSUUWUI;<GR]M:B@<7>???BEEFHIKMNPSTVXRY};6JZ=Yv6BDA@@UyjGKLEJYa[[b_VV`hoo¼888899999999999::;<<====>@@@@@AABCBCEGFEEEFFEEFFGLRUVY[]^][XWWURPNLIFJV^`]WVaourqqsssqqrb_jXMMIGI[reJ=>?448<RovibcfhddaPAA>?LJ>::AD??GGBGQROLLMNMKH>79:<BFCFY]D48=:;?;?BDEFGGHIJKH@>A@=EH?JTF31?D.0<EUVUUVX\\\\]\\[`hko~hdhmqjiqlZRe|sktnsqUEDIPTVVW]vxcYbhy|_LHEC@=>Shh\\ROb~}ntys~zbKKft|i_gcbf`gq}~xhVPKLRRJGMRTZ[RINSU^VLKHPag`dcRLJJOQPMKO[gjj\\?38:998;<5?PEBEECDFGE?<HYVJ?424543:EIINUVWWTRQQQPNLGA=<<=>>??>@BDDDDCCDCDEFOXVSROMPPPPPRTWVRNQQMOTSPRSQJJUYVWYUVTPVVPPVYQJiWCLGMPPTOLPQOV`b`^`hnhaafigeeecbba`^\\VUT\\ryc[bd_dbĸŵſúllp|шwɹŶǩʳ̷׼Ǳȸͫÿí˳Р˓Ȝϧçyw}}~lƊezt}qR}gvTp}qbQImrCJHAF;59@KZEZCHNOMIGJQ[ae[еoil`_VeqEWmMD_i^sWQUC86G]P55FK@:9@<<GAAK=2898DEA8ELGHA1(+1+!#-9@?EPOIJGSHMdh\\F9@ZrnoV8;<4-Nysn`^SC6Nlv_E9C}QC_ljTTMBC[mQgfY`hkupfacolpuO}VpM?axMiniRU}{oYBd=858O[4'-1+3G88NN?2323:95?OE>Y`QFB??KUURSPLNIEFIDGBJD0;F72DE0*18KTNB;=<<;:===;KKBITUHKEDIMF>8?A?><88:5)1837=:787359;=?ACEFIJJIJLMMMMMMMLLLKKMOSQJB@>87=@DKF;>EEB@FLTPPTO^dVV[Zrmdib]fjfcdccd^\\]]WWWS]^^_bfVwuMNOIIILTbkg]XXW_bWUuoab_Yim\\`G=JO2BTSVr`h`QsPMb[iz|vrmkcUNDObflm_NTNBK]c[VNJGIKHC?>@AIPUSKGCBJKIPX]YSOG;;DNSTSRNLRQ>33C_d_\\YRONKLa~kljjmxl\\a`OIVc_[eopsЈlphmv\\auzhmwvkipt~}u~~ohvun`enkqT545CV_i\\><JIIE;:9975>ZsrmU64?LY[Yc_Q,0CailucNW{ec^\\wt|lafZpUSowY@Bbs`pqoլwcltdgkV;98;:6Vjk{uknyvvxq`LJpM0PglYOQHCF@<=>CDCA>:75:?BDFKUSIMN<-4GHFLVghSFID83@I@7;FJ=3>SJ57FQONL<3455465210:QYY_TEA?EOX^]TRYWWTRQMJKC?DIKL?0.05?IB9;@EFC@O]nwt`XXNMTT@8AEFPZZVL8:_~snnkhMCCB7;KMJIQ\\quusrrqjdb`_]_]VU[cnwVWXIBELPRWURV[SHHOPKEGLNPSWUVP?:?J]M;>=:>B89==?ABDEEGIKMOQRRUUOqV0>?@A8k7BBCC@KlvfrGBGFEQdbRVca]fnsZz888899999999999:::<<<===>?@@@@AAAABCEFFEEEEEEDEEGHJMTY[^_^[YWWURPMIFEHPWXRSdrutrrrrssqqnhiuo\\OGEDPjgNFF?89>27^xmUXdZ_jS>=DJLJC=CGHLE@CDBDP[WLKONLJFHJ?7:@HFFTaYHCMJ=BBFHCBDECEGIKJD@@DFRR=I]N45MV:0;KOKQRRTUTY_^]agebicUR]ghdehh`SSoxmWMSPW[VJF[ppkgbZ`dMAKHFC?LbfbaXJdx[[jlush]]ho|}vvyoiknorkeo}{e\\ZUNOOMS]b_Z_bTOZYORUNJKRZ\\[`ZWVY]]YTPPZ]fePD;688999:<69KECEDDCEH>2=W^RF=745458=DGIPVXXWTRQSUVVUTRQQRONQQONNNPRSSSQPRVVWZ[YZZWTVXXWWZYWWZ\\^YVXWSSTTRPPSTTUTSTQQY[XY_da_dVQUTRTUQQQQUZ[]accbcdbabdfgffgggghfdcaZZ\\aotYTSNUÿɰ¸·|}vhsycvp|ñū{~{̷ȿȫɶʺ˳ԭȮԤȦ}Ǳȡyozrq}tR~uqzTp}ylSFovMTOHLF98DJF?DfGHL@BBFJUgmcUsʤxlie^Zu|YDejGIiU^zTRYRG6=S]B/=MOD?<GA477EO33A77:06FWCKE3)+/-'%)3>CILGGWU>?LelL30?Skq_XRWbd~j[QdF==Ws[H7QC>cVk^JAA9L_V]QKOOIIYe[J?HcLg{sfsvh{casfZUZ{{NcfaRck\\?gZ70A6IO2--/*9;8ENG:6//6:7:GKALg[IBB=<NUONRRNLJDFHGDGK75GA4=D3,6AJSKEDHFA<<>?=8<OJEKURITLFINE;8;;;>A@>;6-71.87;8851378:<=@BCDFGGIKLMMMMLLLKKKLOQSQMLI@=BFDIJ?<CC=<DMMHEQOS]XMYZeoacbZajecefcdb\\]__\\ZWY]XZ`fdU{RC@BDFR^bgkld_]olWb~dYXZdZISQXs֞JSaggk\\fzhk}e`nHFfuromklcL>=O\\`gWWVFBHQ]aWKB@C@<@A=>CCDGLROHABNPMNNMJCAEIKLUY[YPHIS^`UBJ`ce`QILMFGUdqtfiq|vxejumTUOKO^ondbgrn|um{b_}zkKQxqdho{ys{ytkpnlku{xiE>FM]bbgSA?JKA?><:9756MiqlS11>GSY\\bU\\u148Rosqm^^pm_arynuufYPguvntYCOwzqsvvЯ~K*7@DGCJvc]~gO_yR2YiifkY???8:A33;<>:75434336@IA=HOK=7MTLEDXoaHF@2,:B;57;C>-.::4>PLFKC32544555545:CFL`fQ:2246@INTPILOUZSNPHFGJMI7,-3<FOH=<CPWRKP\\hia\\aaNCDMA9NYXU\\\\TM:6Gy{tkUOECA:07HJHFDMitxz{xtqmg`]]\\XRSWY[cuxnhc`XQPSUVXWRYaSDNWVQJGEEGRZX\\XD>?GQD<>>==;==<>>?ACEFFHJMOQQRTTT[h|ԹMDIE>D@JܭQ;CADCAAFESxuobREECGGK`l^Ycdkx}uyw\\888898999999999::::<<===>>???@@@AAACEGFEDDDDDDDDFFGLUY\\_`_\\YWWTQNJEBCHIFMaqsooprsrqrqpnkjlt|q]TRQR]hb]UF?>=3:bpR@SO@MYD<EFLTE535DW\\KDFGB>JZ]]YWVUPLNM>7=CHHBCMYSKY\\D>EGD8<GEACCEECCB>AL[aDDeW?<MTC?JRJCJLHEGOY^][\\^]MEGScmnf`hjcbaaglw{qaZa[^^UISjgiurkgZOE>ENMCN`Y]d]\\\\bo~ikx{}hfi~qmjksy}}pghooy~ux{y{]HKQUUNIR^^^fihe`ckeYXTWY\\]__`SQV^bc`_a_d[ZT85998998;<96;LECEDDCEG<2F^YLD=:8716=AAGKRWWVXXY[^bdb_acab`YZ_[YVQQSTTTSRSYYWWYYVWWTRRTRQRRQRVZ^\\VVYYVUTUSRTUTSSRPMKPXYWX^dbfc_`_^\\[^]WVWY\\]]ad_[_a\\[]ae_badddfggeeb_bafi}z_MLLZ¿ϱomv~gtmqǭ¿{üȿֻͽԺζϷȠ~ÕôΥxrzspWrku{Sn{rlTIpvPUURTZ<:E?BH-lrI=A;>?GRcj]Wjoϫucg_gyrRRr^BPjLrxP[NZUB>CVL87EDDH=>K<;:BX40><03,6JMCKE3+,..05<<:CPMA=MT96I[W:5:5/Es^U]u|bT<Re;ALSurQ<:Z|G>|UGSH;:=DVlz~|teXRSLKZc^Yesqpkcgf_ebc\\dLeqfOY`ZSjrVG:}fZ10N6@@.,,,28.ASVG@:/3?FEHJAH^bG>AB;<OPHLSQJMG=GIECIE3?E:7<71;DHKMGCJNFFFB?<;9>LIELQOOWRLOND;8<<=AHFB>67<.296>:21147779;<=>@BDDEFIKNNMLKJIIHJLNPQQPMHEDEFMHAAB?<?JNJ>FNITWKOXUjhY^Z\\je^eheba__^^c`\\X]][_aa^\\otWIMLLmzxud[[kdVbx_ZUO`\\I@UˮÝ~|qpynjv{||Z@IYZfgjmZ>48AGMG:jYTbged`UD=EB:<==ND9@??CIF??GMIFGC;8=FQQJEJKIHJLKS`pg[accPDIVVMR_b~ybsydgx]HNOPWimukmvswogujKFbror{{u|yukoollr|qQ]krjTYhaUNZU=>?=;:984?^vnS/1CPRRZ]Rhb;DJXcfmkpokϧuj```^abXRV_x~oteUj|wxtozvmÎ7(>F@BSLFr`Pu}qXatL:[cmzkG?=53;C6236<:647;89:<BLGBJSWPN\\WKD6;beD>>5/34237755/,..3BK?5:7244345544443124Ig[82443349><=JQY\\VPQIFFINB0+3CIGQI:>JVcc_^aa_^bYWDC>I=<Zdcb\\LIRSJDc~Z;?FED?7<EHCFFEQUc}wuwwod^YQJIJKMR^rxkicVZ`]VZVZ^UFT_]UJJIHJR[^\\SEAAHTD<>====<<===?ACFFGIKNOQRRSUUVGb}JLPLLHB@B>Uf@CAAA@C?>KRTcvyx_KLRKIEFEKgkaq}vpxi}888888999999999999:<<<==>>>??@@@ABABEHFDCCDDDCDEEDDLUY]`a`]YWWTPMIC?@@CNdqmghmstssrrpolhc_mm`ee`^^`f`UPJFC@GTYO@@ELG@>FVVPMD3+39C`eUNKJKOMNYjjb`]UH@?:8AIJFDIJFDMbeOHJKD=OWIABBBA?<>>=@NfR?TWNAB?5AOSKBBGHADU]ST^[XYQLRblqtg_ntigkppomx{zn\\HU_`\\zoVq~{uj`XNA@LLCIMIV^__a[[yzz{qmhTu}r``omjebo~|viYWmy{~}zp^PPTWZY[ZSNQ\\_XTV[bab[WZ^a_VUXHISWTSX_kg[KB@86999::7<;74@IA@DCCFKG:=QXPKJEB?<7<?ADKKRXVUX\\`cccb``_^]^^\\ZZZ[YUTUVVTRSVYXUWYXTSQRROMKJHGHMVUWUTV[\\ZXUVUSWWTRQQQNLPVWWV]cZ\\cec`^\\_de_\\\\\\]]]a`XTYZWTX^c^aababdeffgeeedgbnq^RZgʱ~ozzrxwplrȫ¦ǿҷ׿ǻʿͰɴŨ¸³xrƵwƼִhYffw|Vl{diSTvwGUX_fh<>O9C@=ckMVTHB>Neg]YhxrxeekftoXceKC_cc~oYZ>QUSH:OP?3B6CMA9FM>=DO543?01,4<CFKC3+)*.4;=8:IEA@CTS?<O[e\\XN:+1^[LVb^fVJU5;dj8CNVg`B=KcniYKW-@JGHIJYn[Tba_dgc_ejlw||}tpijs}o_^ahmPdWg}yPJOTPUedG3B{Z[0=UHF5/2-47)6YbZKD:8BLMLJB?TbP;;BB:<NIENTPIN>:KK@CH?7B?6:76=A?BHDEFOQPOH?89;:?JIEMNMRYXUTMA=6><=DLIFA7B?/887A;./2576568:;;=@BBCCGKOONLJHGGFHKMOQUVSNIEEIJD>?A=:AGHE@FGEVODVPVj^V[W_i_^hhcacb]W]baYY\\\\]_`bccafWKZbZwz`U\\]WU_{rYSNPMZR@8O|qjtlcsXWkkh_K;8=ABACYiq}riohL?M_YD3=c\\:59::<>=;<?@CPOD=AJOHA@D=;ENKGTWevpebf\\PLOKVr[ZєlZhkpPYTFNxpsgTN[{rw{{|tlt}{tptoszyfQVij_cmU;>@=;;=@ALan\\B,0FUTPQQPcpSAJQXLOglnustggZXUTSSVYV_ort|szsbpx|zyyw\\_iaŬo_G84@^YBHk[Im`heHO[ct~wF2E[rsmjprsoXGB?<:;:637GHJSTTTJDINW`hi[KF7*AW<7AA=6--37511/-./6@>51222213433455424516EC3465555545=IRWVWWQEGLNH=54ASTOUOFJLN^jhkf[_ddPI>C=@3?aegkQ48PgcHJsM@EGFGE?@BDDUTDA>W~yux|rf`TDDIIPV^ksulc\\_]YU]Y\\[WL]f_RKLMOPR]cUD@BGQTB:<<=<<;;==>@BDGGHJLNQRRSSSVTSnFMIEECAAA@?=<@CAA@?BBBKRE=KFCW]]a]OHCDHRdtg~u{~x88778889999999889::<<=====>????ABBABEGFDCCDDDCCDDCDMV[^bc`^ZWWSPNIDC?=FVfgcfkostrutpmqpa[V^bTWfkeeg]MCBFGFNXSE>EOXebO?EW[YS8+3>N[``ZWUZeaRHSTIR]ODGIH?=HNIIT]XFCUca``^dSK_[FCNOC>@=;=>:9PZC>KOC:0,;KSSJ>CLMJTe\\QSXVUUbxpbktkhllmjnp{t^breaW@@ZSAX~~NI{{bP^SAA@BC@9BNbgc`ajt}tum]Z_wzdboreeikgpzxvse]gx}vtwxsmi_ZVU[]^[QKLUWPLUXV[_\\XZY]]KHNGKSVQLNUb`L?8788887998;:89KFADGFILQQFJXXQPUTOMKRSKPWPOVZVUY\\adba_^^^[[[]][Z[[[UTTWUSSSUWVTXYVQNMPPLHGFBACMTRQQSV[[ZXTVUTYWUTSTTTRSVWWU]bXY`aaa]\\_dge`^^]]^a_VTVUVXY]a_b``__cefgiiihhfegifgqmqstsfqvȶԱ˿~ǺƾӸ˺ѵ̴ļάľƯȌozvxtuԧaaY^dwz_myahU^zvCRZiko=>Q4IYgWJ^^QGFW`Zaioryb­kclfrmadDAVedqroiF9DPbW8INA2BBFQDBAK@=??445961*/8AGLB65671044=XX41FLW82EPRNVWHJ@<;SKLP@88PG3Klm?GIScbAPX^PaWUQ,DRNQgjeX=AU]etrtyomjkicfswsqxr|bVWa}iMFHVXUa^>2M}\\P6HM^L5<<2A0*Re^M>DG=HJ?FD;CZWE<?BD9?LFGNTMIH8AQH>CE=:A:7:68D@9DIHFIQQRMH8889:?JHEMLLSZYWUSBJ9C?@FNIHC6KB2<45B<)10786338:9:<>??@ADIOPNKJIHGEHIKMPUVTPLHFGC<<?@>>@CCB@D?LSEIYLadSTYW_aZ_heaac_UX^\\^VVWY^^^`ehfiaNY^QIb}q]X]\\WUYp|aHEJJQ@3ZsroxrSTnlriZC6<@@KJNcssnbnlQDKimFAhrO2:D@98;=<<>CNVPEAKNA<?91;KQE?Ukiszj]XXxp\\iw~zvaϹqXeoxnTPPNKZzkdfio}vbk}yh^jplt{nstQ_rjc][hjaonL:>>=;<?CGRecK72<J[mk`LMW]MCGGE=BZmi`h}x`_]ccb`_^bbbowqhu}hVo{zzvmdfe`I--:UYJJSuxNPkw|u[l{N3);Vp|~sC+*;doK:5:>;:9632:NTXOIKFCFIR_edXKG9+-463@KPND9685222/1656312223003677666334433334366556699=IRXX\\^UKJU\\F9GMTYTS[gi_MDSgnodY]__O?<@;A<HdeheD+7Ulv`ZvqRFHHHJIDBCTpbF@Fd}w}ujg`PEMY]\\Y_lqiQT]ZRR^][YXXai]MKMOPPRZe^A9FTZM>;<<;<;;;===?BDGGHJLNQSSRRRUUVVKYOF?@A@@@BBBBBA@A@ABBJLB=<;HY[Y\\\\WOHHPTVbebr~Ǟ87777788899::9888:;<<<;;<==>???ABA@BDFEDDCCDCCCCCDGPZ^abba^\\YYTOKHFHDHSTSYfmlnpppqqkiflZCNZc\\S_lb[aWKJHFEFOSKJIIJMPNKILQLKH33HIJLOZ__^\\L=FPO]aIHMUglWHKOPO[hbSQYa]U_kk`H>EHDHSYLAAA<<??;>HH8:DA:29EOQQOJEJUPVfeSFSWU^hqu}vmqwwtqnmc]V[aYZ\\FHXV>ApqR`wvx~[LYKC;8DMA=LXdiYcywxellpr}teZZZZ_dekv{xswtd\\gnljox}}p_[YWYXUSQPPSVYYWZY[^\\WWSTWRMMPRS[YTLNUQ?;8888877899997CMDKTSTTSX\\\\[]^[XZ][YU_`Y\\`[W[\\YYZ[]^\\\\YXWZ[XZ\\[[[[[ZXVVUVVUTUXXWYYWOEIOOHEED??DPTQOQUXXWXWSUUVXWVVWXXYYZXXXW_d[[^^`aa`_cdda__```ba]YY\\^]\\\\__aaa__cefhikllnieijkkoƷhxr~`muΰѺ϶Խ¹Ҿʽڴ­ãƫml|xiup~nqefY[WcuzenpcjZ\\pzr;N_pbeB9Q^qz~pGFIHIHPTQZgfmxtfcqechqjdI:Nhgjdry_58ASta;>C@3BYISEL?EA847<9401-+/:>GMB<CKUUIDP\\Y>27KKG.0>E;,5FGG<8*AQR]SLTL;>LldAH>Tg]O\\dUKTQ^{QAh]f}XYat}va^quttf_bgjllcq~SJWteM@LUPU^R:5e~ME7>MRC6A;9<):TUI2,CFCJABB@;GTI>>@@B8DIEHOPJK>5KND>C@=;;8<::=@=BPNLGLONKIHBB96:AIGGNHKSYXRR\\MYBMDEHNIIG4WG:A=0?:31/?;7/,<;59;;;<<>AFKMMLLLJIGGIKMNPSSRRKGF=6;>=<>@@A?>>DSG?QRTeYMSSU[YYae`Y]aTS]XWZTRTZ\\Y[`ehkmbWW[O=>P]cnd\\^^_^UUtL=CHH6,>^sozib|{e_cjmxn]NF729@BQmsczpMQWNFBWwYf~b6EUE53:DIHE@CPVOGKOF=605BKL@7FixsuVIDp͖jqz{{Ȫoepm_I?DK[eekrzgy{fhqliu}ei|q]_fkkjfix{zxQ;\\wnihcffdk^B=?=;::;<<BTWC;@P]nvPKTZMCB;520CgdLVepvquwqffa^dmx}rqnuut}rMLky|uqhdcbc_nw}leL:FNNI_bGSrijR1)-GvB)+Bh{cB2.115:;975420@RO96=<?ELQUX\\UG>40/0224>MZ[N@:75665593+-23368::9899976444435555455455678>JSX[]``WKNZL@S^ZVOO^on]LHN]ee`ZYW\\O89;=UY]dde`K:BT\\qpp~UDHJIPUMGNimI@Kmnig\\URSdsfYcmixdGIVVLO`aVOWbdfUHKOQPONK]o[EQ_YF<;;;;;:::<==?ACGGHJLNQSSSSRTSVIR[XMA@A@@@ACCBBAAA@A@CGE?>=I`d]ZZ\\ac^\\ZWXa``vzU_7777788899:::98888:;;;;:;;<=>?@ABA@BDEDDDCCCCCBBBDKX_bddcb_^\\[XOIFDEDOZTMYnnimpopnlfaadZEIW][\\`^VKPWYXUPIEHEGLHEBBJQMLOLEBA=CME;?JQ^fL75<OZ_nlVUdswbILTWZ`jhZV_gdZT[gbC893=CBM[RBAE@;>AD>8=98@D?5?LRQJNWKEJSUNNMOQXcgedeinjlw||upl_S]hdXc`BG`XLnw_mi\\fu}ss]EA?ACHIHIdl_\\Z_]_y]w|sxxeY[`dkwlap{tfempnt|paVWYVSQOMNPPRY`YY[ZZZZVUYVVXRMRVUXWTLRQF>;98877789::48=TMLX[Y\\ZY\\__^^^ZWYYXVWa]TZb\\[_\\[^\\ZYYXWUSQVYUWZZ[\\[[[\\YWTVXXVVYZZZZYPCFNOJHFFEELTTTTUX[VSVWQUVVWWVWYYYYYYZYY\\aa^^^^`aed__ba`_acdcbda[\\ega^^__abb`acffghjlklkjmpruĿķrxw|yzfyɼɱðŮط˸ôĳģöǎŰ˹̼Ǝxzmdqweovoy{دħvth_tyU^R`oy^hz|fdhYS_qn8IckR^H6kof]\\UBJF?@KYSVa`erucZT~o^hflN:MaktehznE..@ewaF89@;CTJSHNHAC20@SL4')++.>JHA>?CHQQPUa\\DAL?CGGE:<D73@TZMFACELPXgnS8C<NpW5;=`YMWTXSV@SflbTiav{\\VU]alpmnor|gmr`\\VYRPZveRSedHCPBFVU@-4zp>G7FM=E1<;3+/<::5/:ICCF=?B;<KLC@>==>9HEBHLJKE1=RF>=?;;953A:=A<?MQHEHJGFFGIC>99@DGFIODJTYURO\\X_FRNNLPILJ9]M=FF)<:;5-F@9+,A=07;637:;=?EILMNOMKIGHKLKJNRUVOIHE@<879;=>>:8>NI=AQQX^NNQQTWT[bbYSXUS]\\VVXSNW]XVY[]bjiefY`PCCFMYagh_W\\_UUkP?DGKC/&Kgjqg^xzv{rO;<>=<:;?FkvpHHCDC?Eg{nzmKUW<127DSXQFDLSTPNPG5/5@@:?B8<Spptx^RMIgѓzldfTKG<?Maigekqisyyag]brx{segV[ecZXhxdZ^c{l\\X]fdc_I9;<;::740115<;47YspW^ccQCB?;<8BdfU\\]j{x}p^]^]dv~sjmmp{tRI]flsvsoja]dh~~tiXUOXwuUDGll7-Z{tA+7^twzqT>3,/2237;8555847E?1145;EKKJOTJ8211147734F]d[J=:8:;87724@B<;?BHML?32797544333355544555666>KTY[]_^TJJUQMVZXUQQV[XSONPRVY\\^\\X[O35<Mbeeddc_ZTTYbhflu`JCHKKX^[[_uye^Ra|~{xnohZY`VVkk]^iegubMEIPMSh[=8E^haLEKRTSPH>Gck_b_J=;;;;::9::;==?ACGGHJLMORSSSRTUSiOW_cRB@@@@@AAAAAAA@@@@BCB?=>O`_\\[XYdkghd]cnkguqp\\EH<G7777779888::::9888:;;;;:::<==>?@@@@BDDDDCCCCCCBBBEMX^aceffc^YYWOIDB@>H[[R\\jkmqupiiecZPOKJHIIJUc`RFGV[ZZWNJIC@A9=MMMUVYQDHIGHDB?=DMIXfHEZbkmlournpuoRDJR_hhicVQYce^\\a`VE97<JJL[WF<>CB>>BFE@=@=ANJ@CJLE>EPEENRMHNMR]\\Z\\^XTW[_afmoplea]billpm[^b_divaZYKM_v{nmSQdSB@>OJH^jb[SMF?QSVhshwtl\\U^gio}{_Xo}{}xtogc[ZYUQOMOPQRTV[UU[WSRTWYZUUTRDJZ[RHGDLJ?=9756767878;6<N[WWWUVWUUY[XWWVVVUTSRSYTNW_[ZZX[]ZYXVSPSRLOSOPSSVYZ[\\b`[TVXYYZYYYY[\\UKMRSSQQQPRWZZ[\\^^]VTXVSVWVXYVUUTSRPOW[X\\^Y[\\YZ\\^`][^``^]^`deca_[\\dfa^_aacccbcfgffhhigilko}ǿzwĨdqĹ¸ƶƮ˶ŵƚթϿźŮƨ˷ӘzüǙϷėtyxhhwluphpyǰ}jx]]wyxlUaQ\\gsV[l|degWNTil5LbeP`FL]RKBEDJPD?IUXW]\\`okbXVjzcha[CLVisphutP3*/Iz`UR97>:@DCSJFN>D-3J^T;+*..0;EHIPMC>CQejXE>CIEEEDD>DJ83=K]hYHR_X_T_T45EGekH1BPYFUSDBONBKYQZNPVou{q^dNT\\djnfflginqre_]blzsZKNQLNPXa[Z[[GJP>JMI6,CjvRH<=8<I/12((86()14BI:3<C3A==KIFD<:?<<E@@EFHK82JL>?::9:8/6C<C?;HN>;=BA@BBBA?<:@JHGGIJ@KUUSQMXZZHVSSSSMOLC]R?LI-;7@.4FC:*9G66<</.489;>BEGJJKKIHGIKKKKLMQSOLJHDA>989:;;56BI:>GNQUTIMPRUPT\\`[TUVU^]YUVXKN[[UVXWX`fdgf^aKQRQ[jrsfWT[]TPS\\YKCCEKJ?3NvvtzuP^{|xun`bO=>>?=7;=7C}nabICB<4Hmzvr^_K/0735EWYSOOSUQNK?0.7;75COLLQ^jllunXO>PrXVLQ^W>7BUj}xuzhjofWzsIOfs}}}|f]INONGJdgGbwUU^`e_SE758878973.0004618[nmnonaNDB<=HIFTfj_Sc|ylVQ[\\ZdprֱshmjnjVJ]ou|zmd_pϳup{olNV^QIBZ~~kcp_;7[mpx~qC+1Khhd^R:122322687641323:711225==:BML=2//0/09?:3?T_^PC>:998754FUPGDBBDINE62566544344444444555765>KTY\\_]RIFMWUVVWWVRSQPUWRSUTUZ_a`\\]U?@P^caaabbcca^]foljjtdRHACCDQ]ei`cottiICTNOmym_hjS\\neehc`g`MKZreR>:TTVlM489Na\\NELPYZVOBBOZ[[P>:<;;;::999:<=?@BFHIKKMOPRTTSSUO`tdTRVmmI@B????AAAAAAA@@@??@A?>AFHMYZW]efdehtzutttup^]^LA>?7777778778::::9779:;;;;::;<<=>==?@AADDDDCCCCCBBBBDIOSX`gggf^TRTRMCA>;D\\]TblnqstqhcdnhLHUURRHBO`bWMJLPVXVPKJJJA;HSGAI[k^GGMJF?@FGDLU_RJfc]q{rmstvvtiQJMR_ikigd^[eieei`PSON[_Z]YD<:9<@?BEGJJGGBCOOLLF?98?BMSRLKT[cgjbSU```_afbeijmnnsvrxrmj`]mhellgtrNLXNCIalcc^phJ=9IKEQ^]_aSHAIQWpl]uzxjOYehhotn\\_c]eyz{zsg^ZYYWUSRRQQPPPQRUPLPY_^RONKHLWVHAA@@A@>;:88789:9;BHN[X[YTRRSSSUXTRWXUSSSSRPSSRV]\\XRTXYXWRPOLORJHJHIORTY]_`ib_UXZ[[[XWWVVVURSRRUWXWU[^[Z]_``^WWZYYYXVW\\WTSQOMGISTSWWUWXXWX[YST[]]\\YZ\\]aa_\\Z^b^]^``bedccdffeddffdfptfqɽòyx}gzµĺãžŴǻͺټȽŸƴηբw¾͢ˮʪvrervn~j{p^o|ì{٪Éi|qVh~sqvwfXiQV_mVP]}agjdSMle9U\\eR_IxaE@CKEBSUGITYQRYbjd`caayyjc^STSZjkemt_7..=bzJER:<90>>CSG;L6D,5LVH?7020/1<ECFQZ\\`hh\\PJKFCHG@:9=PU95CJM]mW>Y]e_PG<F\\ebM<@_Z;JiMBFLIA=BCRP@BbmirZTXca[RF>CEGP\\glnj`TLPUNGCEEJJCMVVSRNUR=BB@<?IZu~J?5*=J3&*/282).3368.+1I:C9;NDDE89B:>?=?BEH@3CNA<9988<92AAC?5=JA.599=B?>@@=<@HMHBFID=KTOONNQXTNTPTXUNROO_UBPL7=9C*ADA:-HG6BC;*.267:=@BDGGGHHGGIKLLMLLMNPRNHHIF><:98649E=;AJMLRMKOPPPOT_[RUVV^b[WUYRHV_ZVYWTT]^`hc`YX\\R\\khkWFN]aYMLKGDF>;@BFG8=|~pp|XUdihmmbKV[L<89727=00]nr^HFQVIKct{lec]B,3=8/8JTVTPTUQJB=/-0-0@`roic`ab_q5Ou{pdqva]VVaaBDh~{rzwg]WOS\\OB<\\|~qfw\\E@OPCSwPQlqgQA1.6;;;>=962.024788;ZxZVm{pZNNNKB?CHE8=MPCDkrTP\\]Z[bel٪e\\`eleSK[sol{yxwhkvqhjZSQZewtDPeM[QNPHN~l:/0,,24Dmsa@0.5QS<;532256678878775039:31/02401@MH<;>?@?;;C=32>PUMD?9668924BFDDC?=>@BBB?<83022443444444455556>KTX^aYJDFNVWWWVXUPQRV\\ZVY[[\\^aa`]]^UYbbb`^_`bdda_]ftpgmkcYG99:9=D[sZ48`pN55=3@p~`>V~aZ}rfd\\QJKhgO:2BF@H;7<::>=BHLQUVVWVUOA?C@=;;;;;::999:<=?@BEIJJKMOQRTTSSWNmgKLSZUSopF=CAAAAAAAAAAAA@@@>???>?@9A[`[aedfejyzxywsqlaVfZHMC@?777766666898897688:::::::;===>>>?AABCDDDCBCCCCBBBDEGJR[^ZX^aXMKJGDA@>AR\\_ksussrukU`qq_Xdf\\a_PUYZWSOIHOQPONIJUOR_UEI_dho]GGJA<CEGNYbccaakmeinlrwtoh^MHKV_cjpoqqi`_ipjRBQbeldTJA?D@=>@ADGKNONOLGIHLQF958=>JLKORXXaaYS\\jlmnhkojpsntpdpypc^_]]]fjhghijMAQTGHg~i[NLH@KTW]cYCJ^^esjlxuweQlrljprqqosxn]Zailnotxz}}vldWOPUTPPSROMLLKKKPPNU\\ZRIIOSRSTODBB??@@@??>?@CDFIKNVXTUWUSRRWWUYYUUZ]YVVTTRQVURUXXWTSTTUSKJMKKOJHFDIRWY\\^_dj``Y\\[[[\\XVWQNQRRTRQUYZYV\\]VUX[]]ZRUWWXVTRT]SRQQNLDHQLP[[WWXYYWWWQNUYZYXY[Y[_][]feZZ_aabdbbbabba``acdgnzy̾ɳ{mo~ôƺĻɷʧĨױѹѣλнȼιʹzṴ̃ßѬ|}pkvdekjWr|kw{vˑctuacuwtz{l|vopkwQSVg]MO{Zhop[Tp]D]VkTZTXE?S\\OSYXMRVQJVgn`XpmZgwtkn^`^VI^`_gli?.2>EpoGGK=A73?:AP>2F1=3;NV=@@382/)2ADBBDL`nhXRYTH>>JB9ATgU-7JPOZlnKT\\U]LILIadB06LfH3beAGIHE?;?DLTYb_G?]ega^YUQPR]^bgtog_\\ae^PRSOHDCDA=AILMPYVI<::=DEJW]T:6+9C0%6823./5320.)(.A;>5BL;DD3;A8>:;=EJA8?ND=84556><<G=E74BA2-57;D@:@EA;=GHB@ACGC?LRLMLLMSPSPMS]SNTTZ_XFRWBA?J1IF@85NA>GF6)14469=?@BDEFGGFGILMMMNMLMQUSNLMKGB=9978CEBBDLGIQKMPNKMNU^RQURZc_^WY[PV_a[XWSQPTVa_b`ZbXV]TPE5<Tc\\IHNOGB>69>@EDGjwy|nnzvcZdgql_jlJELI;57513;EQhp]NDATqyoijtwe_aQ<5;@?;=DHIIKRUPG@;/-/,/?awuplc\\\\T^v@pxxrhxm[VNLZicduoxzyupbajJ:GN\\ztj\\yqAMZI:Ok{qM@MViZ8+-5=BCDIF;6310025731T|nw|saOGCHRSI<<?76>B92ZwaM[e^\\_c_k][]WV[VPLQZ`rqln_KMJBA@Hn}w`UWYI`~WLJIS}C+/-/.,@mwngV>;:(;M?:999::9678699885331341/1335;HKDAHNPSPHEHD7--:@<:85356751//5=>@GLLGEIIC<5121344444444555546@NSV]_THDGNVYYXYWQLOSW[[[\\^^__`a``_a^`ba`_^`_`ab_][fqpmoplaG35756679978>H<26<5BosL0>osZdq[][\\XJ_aN>598878;;8666:AGOLD@G^hQ;79<<<;;;;::9::;=>?@BFHIJKMORTTUWWYTXQWXWXXQkzQ<AAAAABBABBBBABBB@@@@@??:Hcgcfdbiifjflwwuuk^QHpf@CE@>B666666666888777899:::::::;==>>>>@ACDCBCCBBBBDCBBBBCDGNQMGFNZYLCBA@?ACDCTkpstsrrtnVZorn`_eQSifWUZPOTXTNOMPVZZ[^ebRM]pieuu`NECGHB@P_cijfc^dhdlnbSJRUODJ]d\\SWbd`cmidlo^HAL[\\VKC>=HIFCCCCBHTSIHNPLD@DIJ?45;DFIPWUZ^YURMQclieemux}ysvugdwtddki\\]Y`ihijlwmOKTMH[s|yqwmROOHZ\\^d]^QRa`^`s}u}i[TXegkkbZ^hpx}ywvuw{sd[QMLJHEGLNMLOMMPQPNMUYOGGJQPSVQKDBC@??@DEEFILLLNQQPQOMOQQPPRVRSXVWW[\\ZXXWVUX[XTVSRVVSOOQOKMOKJOPNLIRZZZ\\`aceYb_`XX[\\[VSQQRPPUTSV[[YV[XSRTVYYRMQSTSQQPRWMORRQNHNUPUb`YYYYXWXZVPU]]\\VZ][[_^\\dmi__acdb\\Y[Z[]^_^]]aeknǽλŶε}yvhx˟ǭϾĴľɺʨӸҽʺƟǔʷϹѺ~xjsdqqji]kxsig~tuʳa{c_t}|repdx{i~SINmdGGx^poe\\]fZO^Zp[ZgZQM_RUlcTYXOHPit^TmrYYozpOhs]^ZDH_T`hiP-8=DF{bOOF;<9AA7=L9-?349=IP7EA8J>1+*4@@=BDONSPHOK;0(11=JR^G8AB<?QXouwrVUXaQ8@Q2-6RV:MiI;F=:9=AO[LENX?9AWafigkliimqkc[YVTWWRRTS[\\YWQKEBDFRTLPOD@>74DZJJOGni8,,1.(0C6.,*4432:6>522;<>F@?L8/>=:?88=IH<:FG<:42628<=B><D8>A4+47<FD89BCA=<?@BFA@EC@LQKLKKKPNWLLS\\UNWY][XIWaOEINBOJ?7>O;EJF/+7656:@@>>?ACEFFGHKMNNNMMNQTWWTOMNJCAA@DLGGCEGEOOLOJEFLMUPMUOQ_b^][\\XXdb^YUSPNKP_]YaX[\\\\_[PRF?K[]L@GQKD>44?BEFFP]YWUOfnotjRV`k{jVilKAGHC><:52@w\\dHIB<<Mgtpffkf\\M>9;859BFDEC?BLSMC@>2-1112<JT\\`][[WR\\cmz}tywpGEQZflljkovnly~zwrfffUaimlR;>BUt|rghcTuPJMLE::FYM=ICAI@/2:?CFEHMI<62000/2541Fywpnle[WZZ\\\\UK@989833<izXORPV_ehacQLRP\\`PJLGGa~~wqwYEGF?:L`epv{wrjcujPF:DLv`131,.8Eaf]d`A4JA?I@87:<>@<656898888:;4/00027;>DFDBBEHJLNMJJKD9--/.011333562.07?AFU[XSNKJD9;=72444444444455446CNRTXXPFDGNUXXYZTKLPVYY[\\^]^_`bcba``]^_``_``___`_[YeopnnnkbI6686666898624678:6:ON:65F[H2ZpXa```Q\\]WE8:99::99:;:;;<BGC96;NWE><:=>>==<;::999;<>>@BEFHKMMOQSTTVXVURfz^PRWWWYPetN<?>????@?????====;;::;998DUbjhbdnonvuosyum`XRBEWW>>D?@AB6666666668888889:9:::9:::;<=??@@@BEEDCBBBBBCCBBBAABCEHGCA@CIKIECA@>EJG=Uonorsrrrm`\\pzdTURBBQZRRULN\\hdYVSNS`g[V_]W\\fkmmnsxo^adOFLVfm`Xdk\\QTZZOFA=DOPILZ[K@@GNPWeljkdSOKJOH85@CAJIGDA@AAHQL;8?EIE<<FH=3,1GRST`fcca_\\_ivr`[_fs~ymgt|zoknjYW^mwy|~}}vk`dcOGP`c\\eqxrPCKVmtzuc[^YXcTJVwrghfSO_uvoia]jvz}~|zvo]LJJFCDFHKKKNLLPROMILSRKJILJJLGEDBCBA@BHIKKNQOMMMMMNOPMOPONOOIMTRRV[][XVWXXZ\\[YYPQSRQSSSTTWWRRVZYVUY]WZ]aa`_Vba`TRUSZUPXZUNOVVQV]\\TTVRUSNTWUIJJOQQNMNOMJNQRQPPW\\WXd\\WWWYYXZ^^XZdfcVYa`_```hmjffeefbYTVVXYXZ]\\Y_gntzӸ˷w~vosujzʾɼîüکͥ÷ȧɶ§ǹ½~ȭ˳ȶþλwz}zzqrnellg{ylvhars~t\\m~y~edo[qe[AT~eAHuwniXe\\^\\Y[\\kcgYZ`^L_lTcWLRfuiYp}aZm{rZFY~^XS@PYJ`d\\9@FHI\\XTPA77:LB37K92?748:NW5@?CXA.*)*<<=BOSA>H@=BCB>=7MNME;GH=4>UFPl}zoe]G-4T25ARAD`Q7BC4,1=>Vv_HF@AIPVZa\\nqec_XMIBA@HNPPKJLMJJKKIKGJHSxgF<87==5/RwH?CTPaC('210:9-*-7><515Go?)0?<B<?SI-3BB?=77?HC:;B?<://24>;=>7@B7??/-99AJA9>@<:9;DFDF?@CDDINIJKJJLNSELQVTPW]]_^R_cSHTSQPN?8FL8HQC*2>;::;D@=;<=ABDEGHHKMMLKLMOQTXVRPNKIHIIKKDDADCNSLLKA>FKKLFQQIWcb^[`[Y`dZZ[RRLGFVaU\\URY]fiY[[[YXZQA?MO?;807ADGHKJ4*J[UurtmfjcUYc~qPUicGGJICCA;:99R{~bzUAA>B9-<XfedgaH2/1/03<DGFLUREENIA@?3/2540*,@UXY\\[WUTV[X]xvǯz{|vvZCMUUNTdkjmfiooqrpi_g|ǚY`iqnkhIFFEIaturrbXb]QoVHSL64018:<?BMF927<>?FJJMLE<520,/.011/8`~{xspnjiheYIBFF<66643:NPHKD<Qegd_\\ǍJE9ZlB1?DFZfb\\ysfX{tZHC8:KEEX[\\lvwqwzmRC74;<G[pzRA1)3JK[jZ`fI3KKIQF4349=>?:568589:<>@<2/1138<?=;<<;999;DMNJKLJ?2.//00111344559BJMWYTQMJJE9>F;2444344444454446CNPRTTOGDGOVVWY[RJMQVYY\\\\]\\^_``aba`_^^_``_``a`___[ZeoppomlcK89966564286556667643468627;22`kX`\\jrgl{QKOA9::::::::<==<<>><;;;<<;:<>;9:99:;;::::99;=?BDGHKMMOQSSUWXXX[_Z[]]]^`a]bdZZVSSTRRRPONNNMLIHEDCCCCBELS^fb_biorutkflkfa_XMIEDFHGD@?@566566656888888888::9:;::;<=?ABBBCEFEDDBABBBBBBBAABBBCCBAAAABCBBBCLVWI>PaequqqrpmkkldPFIHFDEILSVPR\\[XYUMDDLTUTVZ^_XWjysijruk\\WWWZ`^RJMPVZY]WD?EEEOUTQPONG@@ENZc]ZnmUMKKH:7AB?DMNJJE:8@A=8317;=@<;@:4818OSMIPckfa^_bjro^[_]ajha[UT]mw{vg[ch_Q]zrslxnN?Mjsmtym_`nqyvoic[dd^_]_nyug`vpYephhemz|~||y~{T@CDEDFHIKJJJIKLMMLIHMOLGHIGGBEDDCDGHILNOPONQTSQQPSWTORWVZTSRKSYUQU\\^]YVZ\\[\\\\[\\\\MUTUY`a][\\_`^YX[\\VVX[QVZZ]\\YX_a]RPOM[SN\\ZQNOUTMU\\ZMNONSQENUQEGFKMOJFLNGIJLKLLPSSS\\aXUWZ\\^]^`a_`gjhZ[ccbabckkhghigfdabb_[WWY\\[_lp۽ũ¸mvmkw}dl}ɲϽǫĿ¼˪ȶȨ̧ļ~»Ͳļɿëtz{sup{|fcranp|ohtevra}zw{ZjrVmez^G_a?LuwhUnZdYfX\\hmvZ^gZXpibgP\\kgi]qq^ntx_N]fhYVLXJDb^EA`AUb|rSOQC>85SC41I>8I;55?[Q0<>KO4-828:><>6M;77>803:AL@C><?82993=SLKWZXspRG:4<F:=I?2NW99D?717H=FlhYLCABELSYVhYIKHGS^]X\\b_XXTQMJDDB:@FIMGOgL:PG<:5--K[;:@]:8B5*7<52+-:8;DF6(?W[/5A5:C;KV9.;CB>75:CG=8;?@@4*-.6?;=:9A;5=>15::EI><<:969=DD>>>@BCELMGIIHGIOLDKQQJIR[[^_YbaSO^V_QP=<MG:NR9+>DA>?CGB9::;<?BEFFFGHJJJJKLMORUWVQMKIIHFCCGBEPUMMK@<@HIIDIRGL]b_W\\b[\\^VUcWOPF?K_VRWLOYdk_XZ\\_^[YF??OS?7426<ABEIG<6BFLovc`ckumaSZa\\jmK@UmdGDLI>?@==DIK^_eueXMAA<5=Taeh_H1*,*3ELIB<@HW[QHLJA?=57;60..BV`_`a\\UUUPZquy}zutqnH=CIXt~y~{mlsb{z|pnjGNSTSOXenuoosuchlOPTP:358358@FD946=CCBDGMMF@:763,--/00-/Nputtqge`UG914;<869:52432;KHCUc\\QLPso47DJ7+49>HLLIqlaRSpB_oX>8DLJJRoZUqsrtsruyoQ>67:AL[]tu\\</FWO\\eKKTJDD=;D<5579:998666679:<<840035569==<8679:98?NUPJKJD702233210123332=NUTPJIHGFHD=>:2333344443444436DPRRQQOGBIRVUUZ[SMQUXXZZ[[\\]^^^_``__^^_``]^aba`__]]enoprombK89:76666566777777667866767798:<?B<FqwpvvJ3;998:::99:::<=<<:;:<<<;;;;=>>76?GMVblllmmlifdcgloooqonnnnnoprtttuvvvsrtsrsrrssqqqqqqqppoonnmkkigeeecbfea``bbbdeb`begjijiddcegfbcd^[[555566556778999888999:;;:<>?ACCDDDGGEDCAAAABBBAAAAAA@AAA@ABBBA@@@BILKEBLT_nrsturg^UKEALOHKMIFHUZNJLC?IJCDEFN[aVRTPEL`efgdb[LHY\\PNPLLMF>@N^aXNHHGHKNPNLR\\]PFFNY^]f|qUOLHB:AOC<HVXW_ZJ@9>@8478989;<8.9LGGKCA?BVaabbaabepi_imi``]XZ]`ekv~vxyohZaxofu|ux}x`T[jrqwsb`ky~|cRV[Z^`a^o}wrp_^pkloepmbt~{iuz~|zyrZ@@B@BEGILLJHHIHIKKKIHFEEEGGHADDDEFIKOUTPTURSZZXWWX\\[VW_`b_\\]Y^bVRWab_\\Z^_]\\\\[\\`Y^adfig`Z[^`_XSUSLNUYPQQRVVTW[\\VPQNP`QM^UMLOSOISYRGHKLOJEKNLGFFHHIGGQPHHGGGGGJIHO\\cZX^`abbabcaafig[^ddbbbbkkfeghgggilmldZZ]abf|ï©h{~xkgmr|razqĿúàæùƮܴµĲѬĴ÷«Сª­°ěætzuqu{jao`axr~gjzljxw|}_tytTvuSplpzkXb~a<Uv||nSi\\bMlX[k~gW{]baesiea]ukYkj{u]cqshYQkchq\\USZAOdM<m^;mvuOI[]:H28QC5.M73I:69FQ7*:<KE28GOcZF79(<67/;DA;71:4866:0(-2249PWcR6DQH=7>=29<4(/DA3;?65B@GB4GZYMD;8:AGLSdJJLTdgc\\RUPLHGFDEDCC<85AKJ>>??=O^VI=0/C30AAO2'9;/04,.=MJ71<>6>XT?8A61:=KT>/9??;616>DB<7:BE>,(*29?=;8:>40B>1;9<JB76449;6:A;6<>?ACGLLGGFFEHLKEIRM?ALNONOU]^TW`aaTS=CMFAVO23KOICDIID?9999=?BEEDEFHHHIIIJJMUYYVRNKIFACKLCQ^NIPE9?CHLHDOMDS^^XV`^[YUP_cQLG=BYZPPMIQ]e]SX]]]S[]JG=MXH3.157:99<AD8-)8VLEUTScl]EPcahfH>BTnfA;IH846:<CFQp~佊pXH=IespiZD0+-+6Vj]A0.>MRSRONIB=:::<3+1?]gfed_WSSR[xwvovc[ZW<KLZr~~zzuzuWWpva]O=IPUULPhs{~zxxgasjVUZL<=;755BTB679=EKJFFDBBCDEDD:/,./0-/JfjimeQA;7.).23237?B710..?NPQ]^L94GjĒLF20/8?98GWSIWUC<GUOg8Bk`:>PCDhm^TKPHHMizvpoW6/3ER[bZ]d[F37QWXaS8;CFB?7122346987549>:879;==92/148999=AB;69?BCGLTZWMJD821136982//0120-5JYQ@9=ACAEJ>542333334434444337ERUUSSPGELSVUTXYSPUWWXXYZ[\\]^^^````^]]^^_]^abaa__^_gnoprrngN88:9888777667788878<;76679878866549\\vtyhA8778899998::9:;;;:::<<;;;;=?;7?Wkrx}{z{~~~|zyyyxxz|}~}|yyxwvusqnllkihhghihiklkkopqrqoljiggedfghhhgij5555555567889:9888999:<<;<>@CEEEEGIIFDBAA??ABBAAA@@@?AA@@@AAA????=;;=ACFMXacgdfslRA<<=FHBFICAKQKB>=;;BDFRSOW]ZRLIHFFOPB;@CEHJJKMIFKLLNGBIRW[WMKJJJKOOO]leXY\\\\YYfzy\\KPK@@@BE<?IU]`icQHAP`D3::899:;65L`P=8:9:LYTS\\eaY[_^_ddgpife`dbYTYnwjffw|heuecjjfmtr_NQekgreT^rmLdndeorjhkqu{lptrq~h`lppstwxz{wdIDA<>AFIMLIEEEFGHJJFDCCCCGGICEEFGHJLQUUQWZ\\[^_]^_`b`\\]gfaabcbdfXU]c_\\ZY^_]ZY][^bgljedaWQUWXVSPOKGKSZOJJNRRPTWRMNUQQ^NN^TLLNQIFSUEBGJMNFHJLKFFDDCFKU[UNKMMMLLNNNU^gb^cddbaaab]^aif[^dbcbabiifefggghiknomgbabm|øϲiv{xrzecdvqn~~~ans~øƻ̴˛ǹʹÿȾ˿ĵĺÏʵĵצ¢īĿȲ|}n~u||mvnflŧe[Z}{it|yqaovlohs{xuk\\ay{jUsTvqem~]`Z;gyrw|oQfZOJq^_sIY|``]{{n^btqYcwgob]mwobVVf^]x]TT[Ja^A^{IVujRDToXCJ==C>99H.7B*2>DC'13:C;6=J\\bkmQ87539:8;GJB.(-<??;A@?IF51@OYYC/3A939:244&&22.2;<20@?>>37JQMB?==>BCVUG[W_ceTA9>:8<?AA<@DC<;:>EG>4:=B6KZ[H;4B51OFE3.77-(++3DF8138<FZQIR84189>SI28=:98407?CA;5<@C7&'-89:=:79837J=8;<>F61335956@;06?=>?BFJIFEEDCCMJFKUG>IQEDEIOWWS[]g_\\Q;NHFN[H3=SYNAMMJO>9997:<AEECDDEFGGGGFELTVWWTQMJFCGMJRZQGML=<ACHJDHOGLYZUT]a[WQP[aVOH@;S^QLLIKS[XNO]_ZXX]SNN;?SP3*/7:87846>6))9KENOLKS_N;MWQYI8?CKb[66GH;<959:8F`мxlaLOcxoO7/,/*-Gp`1*?OOKLQQJFC;:=:32:HXkf_XRRSUQSer}~unkcVGRE?GI]{{rrvxz~uTSr~}p[QRFBEDDGRk}{|vpqqcYmw^UZTIK;-;EBNO88<;>DLMI;:DHJHFF?,+-..,/JcggfdZ?.,-.01138=BB8.-.4=CIQ^W=16E_tOYI.1,:MA7MngF7241>Y_M6Bf[1C\\=7YrRLQMGRhrskcX6&9beV`kjVB>95EQZ\\B7:::DG700.-/2668;<>?857:<==<83247::9:??<99<;;Mc_WXPIE8./126;952.,/21.0BRG4/28>;:?<323232334444444448GTWUWXPFELSUVTWWTSWWWXXZ[\\]]^^^_``_]\\]]]]]^aaaa_`^aiooprrnjR88;;;;:97776778898876667777689:9997CcvpR<98:9888799999899:::;;;<<<=>:9Ps}|}~}zzzzxwwy}}{zxuurpnkjjjjiiiikmmmnnloqppollkiighhggghijll334555545688898899999:<=<<>BDFGGHJLKIDBA@?@@AAAAA@@@@@@@???@@????>>>?ADDFKPOKGLfqUMQHD=?C@@DKRL>=>>@CGJHNSPSPLOLGFFE??GGDEGHIIOULEIJIJHMSOR_^TQMNZ^XZX]`R]sseVViri]RNMDBJRM8<JUVTUSJIQmnG8<9699<:8KefM?:7;KWVQNOR]bX[QRXShn]dpea[NUbcw~vf\\XZu[Tergdd_^m|nSf}nm~lbzZdlk^c~np|~wr~~uqtuicdehnonnWDEDA@ABGKJFBBCEEEGGDABDDBFGIGHHIJLNQSTTX[_dcaecaaaa]\\]fc\\_b`_``UTZ]UUWW[][YW`ZZaff`]\\TLMRRRSRNMJGJR\\PFGMQNMTSKHPYUQZLN\\RLMORGDRO<DMJPRILLJGCEB@FLV__ZVV[YXWVZ[[\\_hib`aba]]]cZZ]feY[caddbbgfcegfeedceknms{lj˦ƽȤ}lny~uo{{bcak{vjuy{egx³ýտθɸȽѽü՛ØǏ|ǲï۳Ҽæȹ³sntxo{upivovf^̡\\QZ|xaov{rd[om[hdzvrmytnp`bOjx}\\[}}_rqYe~TiNEroy}tgYdK@Rzfk~xK[{bYmxyg\\px_[ri[m`fv{hbPX^k\\z`TRUYgNRzYNpn_GXhdKM=UF<=;D?3LC$7>?@,;,06365EXFIV\\SLE=4@?44@D<4,.28@D@AFF@?;4/=<,+/.,0:;7522/(%/?<,)/3449CHIICBC?;;9<JftigbZL:;INMLJHE>>DEGHJICAA556946CPD?D?;=WE=3101.*-0-55/01439RGG[-6:96GH4<A6888317=A@95<<@1),0=78<67985AO><5:;8/2945:7;7./<@:<ACBDFEEDCA?PIELNAGVUFENTRRNQZ\\gcfK>VEJZXD;FY\\KCRIJQ@9:;747>DEBABBBDEEEDFLQQQSRRPLHHFFJZODML@;>BEGDDLHIVYTQW`ZSNJXcYSRF<H]TFIJJOQSMJS\\\\[^gXCFD38LJ/*2889<=53><.0ANRNEFNID64GF<JF?;8BVM@SO>9YL004AORsגcYQB:DcU4,4HH.0Quc3;UQEHNTQKHC78FA-2>@GSNGEEMWPGMJb}rvz}~xtsof|pMLCDDLo}}wqrqorywgXj~sgXPORPKGDAJe|zsrjirmZV`_SQTVVS?.9IGBIA8=:88=CD;9@CA=212-/0-.+/J_chaXRJ8/131006@GFB:-(/537AN[L21>CNxtHcH09/1EC?JWYH4//6YucE7FjV1@P55XzoZPFKbjv|rXH36]mY^svmb8.>JH;9946QeM>>;6222346;>>=;6;==<964355677776554326NfaRQOEB<0.0136751+*-11009?921.266445223233224444444447FUXUWZQDEMTUTUWWUUWVWXXXZ\\\\\\]]]]]\\\\[Y[[\\]]]`a``_`^`kqporrnjU98<;;;:98887788888777666777778888789GaR<759;9889999999899;;;;:<<<=:5<]~}~~}}||||zzz|}{xtrpnmkiiklkkkkmppoppprrrpnmmnmkkmljjlmnopp444455555678998989999:<=>>@DFHIIJLNNIDBA@@@AAAAA@@@???@@??????>>>?@B><FNIBCEB?EVf^X`WL>=IEAOXPFB@A@@FMTNFHKOJLRMMKIFDDEEGIJFDKSXXRGGQTKFFFLY[TPMVhfZb_LDQlnjl]RY]bcSJPIMWbdG>HOJBCHPQXtkLD>:87:=7>^sgY\\R@Rl\\RYTNS_eapkQO\\hegd\\[[[[he_oqieamobdSc}tlo^Sbjxzdhzfhnb^nq_gkxu~~z}}~}oepzzurhsp]]cegkinxW@DFCC@CGFB@@ACCCEEDBBFFCFGKJLNOOPTUYXW]^^`c]`d`]][YXX\\_XXaYU[YOKPTOQTV[ZYX\\`]Z\\]WU[WIGOSQQTQPRLDIRWNIGNSNOXVNLSXTQYMMUNNOQRFEQL?MSKTXPTNIGFF@DQX]^]\\Z\\^\\Z[[\\^^^_dhb]]]`W[[aXX\\bbZ[aafebaeb_dgfdb`_`jt|һ}td|}vsnz{`cadt|}ltuu{giy}|óԱѵ׬иŴĸ׭{z{ĮǨ§׷ðŒƷn~zuouhmgumh{bWǖcT^o[n}kxtxm|c[o`Zcbrpgjo_rlrzOptuWmpp}P^uiijOjiOs|LNyzmz{|kj\\Q<C_~v|~iU[{b[r}^`uj[lmV^odiyvg]OWgoRbdUQLaWJkaIiqn^KZ]GKN<ZG67;J79TD0969A5>)*+,<MDPIB6@<:DN@ABD>=>GF>/(1>:650124;,%&$&%# ,5<2:E;1'\"\"-@:'%+12-;SH;?DB@>:8BJdlUKGF?9=KSNE><88<DJMPRTMAC<40/2536A;B]<9KV?+/,*,/5:7552.*/4.*9@EL6>604LB0A?7896138=B=66<;>2224:5<=49997OL;51940.9@489<3/05@<9@C@;?EDDCA?=QHDMF@NTMEEOVQJIQZ`efhIKVJT\\RFFN^UELQBYPD:;=7148DGA@AA?@BCBDEFIKMOQSSPMLFDJLFHJC;;?DFA>GIGQXTRTXSLHGQ`[T[TDBYUBAGIMMKKJLQST\\fcVOO?EDI8-'6967:=;8>>13CQI;5?PE2/5:6<BLUL;;MLNqmH<ld=Qf|ͺZAK@=BCjsTH^u~S-7RHBPVNIIHA54EI4/8<>@ABEKVXABGE}rlkkqx||xuoaatQMH:7Q{x~unqohrwcUT^a[TNOOOOMHDESdheedagrpYTZR:EKR[QFJVQE96:989952685468=:1*)/96..+0I^^egI9=94652213=GGD;379:9@GMWI412>DZsd@.@7/:DGHBEF6-/;SdO<6?aQ4<F96ah\\M:8>TufD;6E`videj~}r='*369984:T_TORVP931247:>?>76999:7413664666655228;BT_VIFG=87302321331./001.,+,/3342.1112212233333444444437GTWTVYQEDMTTSSVWUTTUWZYWY\\\\[[\\]][ZZZYYZ\\\\[]aba`_`^_lsrqttnkY;8><:98888877877779986677777777776798>:7879988899999998:;;:;;<<<>=8Ci|~|{{}}xtqonnlkmnnlmnnprsstsstttsssssspprpmlnooqrr444444555677899988999:<>@@AEHJKKKMOOJFBA@@?@AA@@@?????????????>==>?CD?FPLEC?@?EMRUOQTRPMPSPSWOIE@CBBHQ]cVBJ\\RIMORPLIGFEHOOLJJKPZ`YKIRWJ>AJRX]UOORWVVa\\G?QcbhvjUJJPLEHPLU\\^iVCCG@@LNT\\^nh]KEI=:<BBLbljklbVbt^PWZ]aeltvsmihgdll]W[]`edks_]lqrjdfv^fqrodY_xtrokpxz}m|x_^ZXT[jklywjnosw{vjg`c}zwpjtm`cfgnsujOBBCBB@BDCA?@ABBBDDDDDGGDFHMMPSTOQXX[^Z_[Z]_VR\\\\YWUTUTW[TS_VMSRKFJOLQQUZXVV]`_Z\\YRTYOEGPRPOPMOVNBIQQNSORYYY\\\\XXYXTSZOLMLQUVRHHOPLTRLXZWVQOOOIGT\\\\\\[[[[\\ZXXXYUW__``eb\\XX_WZZ]VX]]ZY[_ahd_`eb^dggc`^][hеýǾzwdsqomyz^da_qurrxwqhssxzxҵϻŵµѲղ׾ӻ}xŬ˴ǦЦֹʲȔpırxqurxflqdus_dodchTkvvtaypnhvbamYe_e}ohZhdV}uy_zhbtcpclXk~P[oidbRvrUOtlPSunsy|xjt[E<Jhhub\\wcd{y}x]ah`\\pZNgj^kzjhWSatYKThVPN]G^gHj|mrUFRGCURFO433CJ7CUI?45CA;;--+-IdPWKD=81,3CGH>HIC;=CJB?AC@5+%##&+.*$%((#!3<9)>T@%#!#/:4*,9A93FG87AFA@@=>Mc_H5870<GUZSF=;77=HRUSSNLB7VQ;6320.1738`8>LRH%*+((*2;6B@5/25373139AH>*2@JB:>;<852/5=C@8369=:943967A81<;:@W?8,87011CC9649/;7;A7<C<79>CBAA@>?QCDJAAOJA=BKOGEJQZbdcaLVVQ\\[PLLS^NEOHOXPA;??9658EG@BC=<>>?@AAABFJMNPPOOOLJGEHJG@<<BGD<AJIJRQOPTPHFCIU]RX^PHRY@<DEJJ?BLFJMMRW[WTTNNRFI2*.577779><?=3:DE;:':O@.9;53:>JbgT:?B9hv\\rnCaޏE;BVUPmzlirtK+:VC4=?86:<>=63?9.?KEAAFLTVJ9??Pwljdnx}umf^WXTTM77^~vnxsmomltoYMJPUTOKNONLGGLPNMU^\\PXnpj[L]S@JFLZRNVbU>:;8213420//0..3<BA948?7..-0AQS\\kU;<969533216?GE96HLGKSQOUL91,8CEoj:3H>5AJKKNJ8300.2JD9>?NH<BOM@j|UJ@;=>avR;6326LYea^cWPfQ@;0-27:758@IMQW_V<667603=DB7684587554688888:=<74;GOX[OAAD=543133223333541/-,8RcL<aN71412212233333344445539HTUTYZOFFMSSRSUVUSSVXZYX[^^\\[\\\\\\ZYZZYXZ\\]\\_abaaaa_alvuqtunn[;8<;;;::9998888777887776777777777788789989988889999999899::;<;>@95Fp}~|{}{xtrqpppoqrrpqrsstvyzzywwwyyyxvvwxtqpnopprrr344444444568999:98888:=@BABGJLNOOOQQMGBA@@?@@@@@????>>?>???>>>=<<<=ANWWSKFCBJIAHKQULKU]]_d_VRQKB@CGHGPYfgFPhN>BKRPOLIIFFLSUOJKJNTQMILNA@ITYVWVSPQVVV[RBALSUbsnbSJJGOVUTXY[eVEGGCHVZX_dmd^\\VYMCAJW^`eqsidach^TZcisg^db^c^UYef^Y^jd^hxw][rqeZT[j}gFJ`vxchpa_neZpxzxep{{qo_Z\\`dp~p[|zkUVkqrwr{qigmswfFBB@@@@BDCA?AAABBCCCDDFHEGJOORUTLQWXY]WWYUU[RNWWWWRQTVXZURZVKLOKGFLKPRTVUTVX[[Y\\ZUTSJELTQMJIHJUPCJSWX\\VZ`b`^`dd_ZWV[TLINS[ZRKLQXXSNLYXVWXY[YTY^YU\\[Z[[[YWWUTQTZZ^\\a_YUU^YZZ[UV]ZWXY]bh_Z^c`\\bhea]Z^lw̴³¼ʳx{qhqqnkzx[bdX~wr||qy|ij|o}u{vǸͬǹķ׾þƠˠ|v̵֥гē~}izԭ|t}s|dh|cghZ~zvgeQcrqzoc|ohktciq`tTjto^Sc_`~}fctlsfYqskzOcW[md\\egvlMQraU[qoqv~ynzfG@Hl~bl[vffp|wi[\\XX[kFRnaUppdh[ZokGRPxlUMRVSgTb}fikJKNBVROKM056LA:GLHE2<G>?552/5KXKH:EWUKK@?DQNIJF;88=9>@A:,+0*#$%+-7?BKA3578#(FB$-+4?2009GJ=<C46CCACED>BOXL=78@JXZTJ=:897<EKLLJHB<<5DhYG933/.0:<X<FBGS3)1../036EJEHJ814>;6CTR8,<C9?:77:3/-/8DH<455<@7;5994<=.3?:>NJ90/@504>I@52>>>>:C<9D=27;AD@?;B:HOBCH;DJE=<DLKBFLR\\_bbYLSY[^YRPOU[LKIHZWN7>EA=;;AHGBCC:;<=>>??@ABFKLLONNNNKHGHGHGABGGC@JKIHKNOPNIFBCLTUQ]YPS\\L;@DEHD:GM@FHINRSW[YT]VNP9/01355546:>;2:A;5V:6K</@FM:.;CVheD496YsA?Wm̊B3BRa][\\amppynF7RZ?.+-+03-1EG6+07HNECGIINF<86Fsotgir}w~riliZMQWRHQntZPn~re[cleUIFITSPJDJPUL<PdTCFQQD;VthRZSU[XfTL]`RJXR76=62033320--.0348BDAA@92/029ACLe`E:635333325:FK6->NKNTROSJ7./4@AQuc17HE=ITSQ[W<0400GJ8Yc>=@>GW[SvxH;B>4L}dPE3)-86Fd^S_UJJHZ_D/-9F905>KMSYSH;:77:88<9:323579779;:<><88<@B=88<GRYRGCFFA9434431233587530<rej>02122233333344455666>LSRV\\YNGINRRRSUVTQRUXXXZ\\^]\\[[ZZZZZYYZ[^_^`abbaaa^alvurttnn]<7::9:9999888887777777667777787777877888888888888888998999:;;:=:6Gq}~}|{}~{zzywuuttttuvvvvwwwxz||~~}~}}{yzzxusqppqqqq344444434569:9:::87889>CDBCILNQRRRSSOHBA@@@@@@@@????>>?>???>===:;;;8Jai`QHM[dYJKLNVV[^W]ea[VSSH>FKNMFKOV^NU^F=AJURPPLIECLUXVRMGENSKGKOQMDJVRMOOOQW[ZVLAALMIVikjhjhXY_ZZ]TVk_KOLJM]e`cdd]dpXORKJRaljisqgc]`ga]bglmg_[TQU[]``QLWclkglvsgWPXb\\M`tsvvdGAMRttYVnt^\\WVXs{wumaR]e`Ym]]p~~}rejvjfy}{unliihlq{oG8@A?ABCCDDB@BAABBCCBDDFHFIKONRTSLPVWWZTR[PSYOKTSVWQNRWYYVRVVJJLJICCKQSTTSRTVRSVZZVTNMIPXSPJJJIUSLW\\]_YUZ`a]\\^fec\\\\Z\\YULPZaYRQRU^XOKMRXTUZ[]a]]^OR\\\\Y[\\ZXWWTQOSVWZYZZXRR\\Z[]ZVTYVUYX[cd[UZa^\\bg`[Z[`rĞô˼x|qhiosllxt[`gUsu}}rzfe~p|m~¼ƾƾǼĺноϳҺͫЯſsÞĨԤʾվ~eơ~o}bobg`_xo`OZyqooil}|pfmyuotumrRp{kkVTX^iw~Zdp|qZO~kJ`^^xq_VlxvtJRoaa]~vivss|wpJ=Fpp|spX{e^nw{\\TZQP_c<hpWXxdgfafn\\GXFjjULPY]X]qWVu_GMBR[DLWL87=K=FI>;IDHC<;.701<FE:77<LYUTHGCNWWYK9832.8::5.6B4$$'''+@GJO<636+\u001f',*8:MF.4;JMD:?49B>=?CGC?DOQ<:=;DIH?5/.2346887888:77=32M^OB<>6/,::F7G83VI,.8EG@=??NYYM2//ACGSS>/5</,854260+,0;HE5143>:877<34>2-;@:ES98)6<24:HG;0?MAA6?C7CE05>>DB@:>D8PKACD;FG@:>FNG?GNS^]`aUGMZf_STTUXXOPFNYVI5HHB@>DGKGCE=7:;===>>?@?DJJJKLNMMKIFEFJJGHJFEKNIFDGORMIHA>DMOOT[UT\\TB?DEEHB?M@>DDHJLRY[\\deZ\\U>3-/.244115?>7>AA;tkAOS<=JfW>FOSciROrtzyuAAOV\\`mŐY>:I]e{rhZLMS\\hZ@>KJA;72395-,:<0-1?LMGHKHEA;=<;Lr`apfmsjr|pgmxsickcEBIGOkjEIm{pZ=Ie_A:DKQOLE<@QgR@cjIDOKCAIYg`J@VW[ezbSmoR<CI;296234321/--2::40/;A>:;:34;7549OWH50022334347DNC47MPKKKLRH-'+09>@SK/<HA6BTZSVbO733;IUcnJ5296DV^by_ENRA5YrRPP2,9N@;ObfiYJJ^jhF+'6UJ.4FIFS]VLECA@>76AE=1/048:78;=<==:88<@B@<96@MWYUJEHPM5*55212237;;992?V41122233333344455446@MQQV\\WLHLOPRTUVVROOTVVWYZ[\\]\\[YXY[ZYY[]_aaaabbaaa^`lvusutopdE6999989998888877777777777777877888778888888888888889999999;<;;6L{}{~||y{~|z{}~|}~~}wvyyxwwxvuwwwxz|}}}~~}{{yxvsqqqqqq33333333446:;99;:7688:?CDCDIMORTSRTTPHA@@?@@@@@???>>>>>>>>>>==<;:==8BWfj]P^ok[QOHS_YebHEQOJOY]SGJSZXJBP^TIWdWGFPYOMQJGCFOW]^]XQSW\\UQSZ`YJCORLNNNMLW]SICCFIP`jlqutgRQW\\dg]UgobULMOW][_ZQXc^RWXMP[fqpigec`YZ``]Z\\dif_^^WZ_ekdWNTaggegh^VSJAINBSnqnmmYSVPL]`UW|khbTUgzwjz~hNbojek{dMRk|nnv~rgknpvzmkkpoorvmUC@ABEEDDEDB@BB@BCCCBDCFGGGJNKNPQNQUVUQPS[PSWMIROTWMMTXXXVQRUKINHHA;HNTSQPRTRLMTXYVSQPSSYVWQRTSXUVab^_PNRZ_ZWY^^_]]^^\\^TPZ^VSQV][TMHMLWQO[Y\\`^^^QR\\\\XZ\\YXXUQMMQRSWWVWURQ][[ZZUTUUUWTYc_YVW\\ZY^b\\WY[asпҮ¯̾t|wjciivhnxq\\djXn{|{~tze[~yx`~õϼŨջļٰ֥óˠӼ̴ΩϿƲչymbݱ{h}xk}zah[im|u|WPZojpfftzmwohovttsvsk[slddQQOgk{gSbgOMj{Djgcwy~]ZeyGQokr[pkYywq~tP=Eqt~il\\eaozVR\\OJcW@cXgw_hedm_UGYCu|gUJLZTWm^YxzOFBE[F9KZK=9?H=FC:.=KGB=712+6BB=3697BF<8<@A><@NN<5/)'.1//3=@/#%')%$9@>IC631-%#)16@VC2:BSL;476==39ADFA?@I702A60*11,)*.25443684224444**A@@><6.0:=+.4#$MO*'7EA=<<4;C>BA@A??R>/.5<6'/40202--/2=E9/..3;8>:?:,59.5=>;II9/-@567>EB64RF<48B@<N3+<C=D=;6ED<RF@A>=GB<:@FKB=INU]]``QBL\\h^NUVZZWUUEQXUD7QGCBAIJKFFD789;<====??=BJIGJNONKJJGCCDFGGGGHKJEBBHPOJJJ>?FLLMUWTWWKABFCGICF>5ACCFGKTWV]feccPM845222269=DECGIKEv^[wgICdoNSigkl_]qjqB=_aLSwĹxBBIJSK_vb\\]TPRRG?@C?<?B@AB<60,.210/5ADCBAA?>@AJRNN[YQTlpnf[]lqqnh[cpV9:=FgnfowoY82WbA4BFDIVRHAXsbWqeKXbN>DX]ZfT6H``n~dQlfUHNQC@F6-/.0000.)2=ARC04>:29>27G?731:KG4-/01425245BOZWTYZRNMJPI3/.16?IE41@IC47LWTUgaC25@GeqH18470?LRVhyJ8MI;=RZJ:DH2-8D<59Ne\\KINXWS6+3;R`D@I@;XcdkhTGMI97DJB9227:;99:963127;?ABB>;DSTUX[SKFMXE.45102458;;:;4/JvlY9222222222223333225@LPRW[THGKNPRUXXVQMNSUTVXZZ\\\\\\[YXZ[ZY[]]`aa``bcb`_^aluustqpmjK578878888887777777777777777777777777888888888877878889999::998U~}}~~||||z}zz{||{|}}zwuwxxwxxvuvxx{}~{zwurrrrrr234322323348988997899;?CCCFKNPSSTSTUQH@@@????@???>>>==>>>>>>===<=AIIM]kj`_ebWNOPFRii`OA@C@@MY\\YNHJP]T=Vu_QcmgXV\\UJLJFDGRYXSYcaZ^edba`\\VYPBLQNPQQRUZTKIHCDNZecZYWRLIJO]hga\\`hi^NLQUXVTON]_[_g`QTajjb[XXZYTRRTTPXeeda^^eektrmg[QY^dltmaliPEMOFThijkqifc\\QQ_kj{uQYjxvyt}s{~si`^f{{iaiqqsvswyuoprsqjUKFCCEFECCFGC@BC@AEGGEGEGHFFILFLLOQTWVSOOW]TVYMFQNTWGQWWUUSPPPKKSGBB9EJROLMPRJGNRRVVUUU\\UWXYYZ]^]WY]YZXILNT\\XRQXYWVV\\ZW]XNMWTQJP^UOJCNIOMOQRUXZ[[RT\\]YZ\\[XVTMGHOMNWVSTSVT`__][XUZZWWUWa^YYYYWV[]Z\\_cdr˶»Ľ˿}qwrh`hdxyenxnbmncfz{q{vv~cV|r[{Ǽʱǯ̻̾ϣѺصҰŬּʽ˴¹ʵѴqt_wΧs^}wj~llkZx}g{ylaf^_`qeernfmfmqhrpv~wthftc__NGWvg|UPekaOWexX~yssxw`fXsBOsqzXeZNxwqyvY=Fp}r_fhmsrOT[OHiRRVhtm]fng\\NTET\\oobTHHORgeq^ABBRK5?JQJC9@D>;88*-5=E?5522CF?9/.1:B:56<=<71*-2232/..,-.373,)&%/.,:@CB;50-,(*-/1>F>?HIC8,,577755@LI?<94597;%,686.*.3353205411/02*5C2+012.,)9>W4%\"%$.B6<B9126640/4MOJL<3R1(5:B8991,014/.89<:/,,07:@D=>/,643<;9AI=7/8?8<;@>=:CP;96?DFQ>'4CABB868J?COB>B8AB:8;?ED8@KPZZ]`\\F>N\\eUL[Va\\V]WHUYS<?SDCDDKKHCI>0<:<==;:;>><@GHGGMNLJJIHECBBCDEIIHEC?DPQIGNC<@FIKMRSUUPLGFGIOJG<2@IGFEGQQLXeecc_[XIF<2302?GJJKKICLMn]l}mYinFGproohY[ym|q`hA@SE@cP=OTC<UULMLHJIB?AA?B>3:TZA8<:6133+).3106AECAGRQPTQJGLY`dYRapkcebTXgyO=>WurqpcHQW\\I7=?=BYrogfurnrfdre@6CY^\\sp>.[op~b?QVafpiYcX5*-,./010*4?C]_H9440176?LE<<>>BF5-.02434373?L\\__[XWQKEHMHEC@:=E>4@OPI96GOZknjW;54?YRGQH179?C=CGUL2345768:78;2-+.0/,AZN<=EDBD2IriM`iSB3:clotm]IFI?9DKIB:7:<=<:9641/39=@A@??<@R^WORUROOSTB26204778876782;pkaqpK332222333333344336@KSUWZTGCHORV[\\\\VOKNSRRTVZ\\[\\[ZYXZ[ZZ[]]`````abba`_bluusurpnkM77876778888777777777777777777777777777777777777888888899:9;56d~{xxy{|||{{~}|{||zyyyvttvwwwwwuuwyx{~zxuuutts2243112222378778879;;=@DCDHMPRTTUTUWSH>?@????@???>>====>>>>>=====BPVU_i`^k_HEHNWZZekUBLQA=HQPKQNIMHKNCUxthkimpmd[XNCEEDOWXSWbc]\\a^[`[KFKLX\\KHPVTRQOKGJJCKYRVWGCGJNKIP]d]WZYWWVNIP\\^TOMSaccgdYY]ek]PRSQQPOMLJKLV\\[evtbhyxvwsi`efenotzo\\TTVrxwymc_`_[`w~s~{gMTtwaq`XlXlypibptvpghkpw~vqttpjjm`G??FFFFFEBBHKFEKLKORRPMJGIIFFHJCKNUX[^ZVUW`^^b_NFPNSMCW[VRQPOMIFLXF?D:AFPJHHNNDEQPLRW]\\UZWOQUY\\Y\\[VVVQTRHPLNUSMKSUPNPXSKVYJCTQMFKZPLE>NGLKLLMORUXXTV]^ZZ\\\\XURLHHQMJWXUVUZXifdb``\\`aX[_\\ab_`_]YY[__bfmmh}϶ƨ˽tlof]g_mtdqvhhnlt_|xykxvn|`]s^w˼ϼƹȸǺٸձѤطɟ̼âʮŰdh˿zigig~bk`\\{qwtd}^QZrkbieaa[mtdnh|xxemt\\]^MAo~fu~xoPQsVlX`}uexvklhiqdeAUzq{ZZKRwptslzy^9Jmzj^bowpIYRPPl[f~[}oa^`lTBTLBcgOkaTGAE[m~vaE?BHL??BGNI@48C:5=50/%2G<19<:<963+&-:95<?>945:94,+068973*'11+18+\"58-277+0783*+2.*7GB=BD8,&&0:5865;KPH>735983926>;3+-11/-,/26531521*4]N>3.-.*0D;YI!((3-*=IF><DRKG>34:>NQPPT-,7?GJO9,+.5</3>;73-+,3;=G=72(2826869CB769@9>=??9;CKB8<>AKXM+/AB=C<98@J@DM@>><@=56<?E<4EOS]V^`T:>T^^LK^Wf]TdWKZYQ9IR@DHIKMF?M53C:===:79==:>DFEGKLIHHIKIHFDBCEHGFEDDMSLHNI;<DDFKNNQROSSJJPVSLC:DIGHDBLPHPcd\\`c`i_\\WB6303@KNNMLC:Mapj[wuvrH?doomlcSSHpyB;>;GQWsumTlpRAFFC@WqcWRLKFACC?NmiB1RnV<?EB5142,))(+6BE?<BMRSROLFLlpZVU`icYXVTUKbhZen{unqp`pcUE8;ABBRvzvwunjvyV34J___ue8Gnyl8GYlopiejS33720/0111<B=Zh_L4+03:EKI@<BIKID6+,034433;1<JKRPQUN>329FRRTRH>=?>DJL@57>APmwrgN5,>PPZ[A4AFLB+48:82)(-+)075;B1*)*+/8L_YGBH9ETRl{J\\za8*;^fb[URJ?>=7<DIF?;;=@@<8577:=>@AA@=<<8@T]TR]^[XPPD674/19:863159>EPs{RR]_VG622233333333444446AKSXXZTDAEMTX^`^WMIMRQRSUZ\\Z[[ZZY[[[[]^^```__abbba`dltvtuqomnR967656688887777777777777777777777777777777777778888878::;80>l~~{zxvwyzzyz{|~~~}{z{xwwusqtvxxwwwuvy{||ywxyxvt344333222357777998:<=?BFFGKQRRTUUUVWSH?>@????@???===========<<<:9<JQKNRNVbR@GKNZhgZVRM\\Y?BPOIEJMQSD?HDHftoooqkjkkgPDHJGJUXTW^``ZURQQJNNDSk_FFMU^]RHGIJIDHW\\]ZLUZROLJRYVSQMLKHFJQU[a\\OPXX\\``\\V[]_^UORSPQQOKILOQ]eejvvlgmpppg\\Z`_cq|tstoeYSXkzqpg_\\\\]bgs~e^kgaJ\\wt\\gNdxNH}zDSy||zfqz\\RbpsnklrvumxpllhiksqkkoW>>HEGMMLJIMOQRTUW\\_XSROJLMHEHICNY`db`_^]`g^cicPNTPSEEUXYPLLQTMAGVI>D<CGOC@GMG?CNPGKU`^PSXIIMU\\ROTUUWTPJGTMEFJJILNJJLUMCPYHBSMMKKWPJD?NKSNKNPPQSWXWZ_bba_^\\ZYVSR[WN[c^\\]bbnlkiggddbZahbegfggdb`adffinmknлˮʹeib_h`dk`lsffjkdtvxkzrj~]mvc|ĹǹȮŨĭѾΛܿħ޷̪ҠѼϻǩżym}tyXmdowsgcYapwwcs`YHUvs[]\\[ZVgvfdlsamqYUXUC}ln~tkeQbiboxzkr}`^mgdyVQduux[VI\\okuqgctqZ9Rnmk^blx{`nMXKXdpkxoo|gc`][@JR8NmP>j^SG<Uts]IGIEE<=ACMMC8/7?6;@.88'1A4-6<6)(01,)2955<ABDA?BEDB<99;899/)+/.1;0%9@/&'%!'/8:.7@BIIE;.+)&%(0982959FID@;89=4./27C>6/,//+*),38:81/6310.JTO;36=/8A2FR..'51'4839?K\\UM;97.+7DS]K.0=GLMA.5,/9<-9C821+(,5;=A3/+3;<4636:=939B@:<=A;89EF58A@@X]5-<E?><9:;FK@BJ?D=>=747<=B56NOW[W_\\E5E\\^XHM^Xf]SjVQ]YN?SL?AILII?EL/?IA=<;85:<<:<@ACFHHGFGHKMMKGDCCCCDFDGOLGMN@;@?EDMKLNLNWRMS[\\TMEEHABB;FOHM^^WV]^ejdf[E?5029DOXUF;4Cr`mysvwSEamrpnncekH8<@G@Psp}]=:DIGFDACQoyytj_SNJD:Eq`ZncC;==979:3,+,06<=<=AHPUZ^]SO|dSWWXTKIMQPH>jyqos~{qqthg_O:3BJJLSa{uuumjwnI34E\\fbf|fIde=N^ea][VL;3;:3//11/.>E3Ibd`H+-=HNNC8:AEGGA3,-025646<18@?=>?C;,'*+9MQQRQMGJKCAC8.05:>Uw|s_;1GUZYOCDJV[Q=8:6*--,-,-11.BP0'(-.7FMX_`eX:P_WZmtO\\`)*@ROPMNXTJG@57@FF?86<A@;7469>?CGECILD>75D`uuxsaZK>963466667852469FR]f[KW^I42421333333444455446ALRUWWQD>CMUY]`^VMJKMPQRW[\\Z\\[YY[\\[\\]]]]^``_^`aa`abelsuttqomoX<55566677777777777777777777777777777777777777778888779;>;3Fu|zxxwwxxxxz{|~}}}~zz{xwvussuwyzxxwxz|}{zyzzyw3333322224678899998;=?BHIILQSTVVVVXYTH?>>???????>=============>=:<EKIFC@DMJBFKKMSRFDU_ZIDPLIPTNKZ[GACAEQ^pvpfTWhaVNKJNSY_RGFKU\\YNIJB>JNKRWMEIGPenhYMGNOE@HaqcTcm\\OMOVRGFDBBBIJJX\\V`h]Z^ZYUNU`_ZUSTUTQSURQMFKX]bszwurokjmlli]VZ[`knsvmhml_TTMJlxqg`[\\VZeo{d\\gqnNdted|~USR]peQ^]LPaty{wjw|ldluiehk{~dzh_imfi||skl_KEJGLRSSRRSTWYZ[]_\\VSUTMOTJCIIDYadhb[\\^]cdabf_QQVWUJOUTZTEEJVSEALR?B<CEM<:ELB?CKPEGP^ZLNZHAGP[NJUUW[\\SFFUTG=CIJHHFGJOGCNVFFQJLPLSRMKERT^VSTUVWXZ\\[\\cfedcabbddb_dcV]iebddfimljhgddb\\dhcfggkmidcfhhefmagwּɵ̨}b`\\^nh_fZ]ur^inmtwynii}bruhȼ¿ɴþʹͥͺλ΢װǁŻЬƘлȹár{t[xyq}bkwm`\\`dt}]fsYKIZx~YQXUUUbq_^}m^lkUMZ^I|xxktrja]orgyn_swzyswYUoggvIfkkuoXRJbdnogiesbT>Wmbp_cissNoNPV^}vszhzvpc]\\OHY:0_W:KkXMGGuqcVScVE84>ALRH@5-4;=A7,99/5:64246,)12124553103;>==>@DHC=>:4368/.2020-8<2&!$''&.8798FP8-*%%')+/32/4559<;==>>A;,-3;@<13552,&(*-386.++,0*,-46?94<>//655G@.),(,3652<@BF?6>;8/.;<=4/ISMJ?.6;)+344=?4/-)&*5:<6-('8C=46088433@D<<7?<86:A:-:@<GaQ18DBA=797@NF;EF>C4A1439<=A3?QK[XY^R76M`ZVIP]\\c\\QpXXbUNHSA>DMNHE=MB/LHC97<66?<;:;;>?ADDEFGGHKLKHFB@>ADEBDFEHOF<A=?@IGILIIRQLS]_\\VPJEBAB;AOLKXVIISX_gggf_RE:6138G^]=((2`dhztvvXXsxxxulxH=;;;CluEZyMc]8?CCDCACFIVfnkc_`YM=0CsumcF5;::9972/.-,.38;:9=G\\mlfeag{fRTSRMEJROIIY`xkikuxro`VQC7:MSWZYXh}zmpvljr_D>FP^mnepid{T>LWVUYZK<::>:1,0542.8I?DZcf[9+ASND=89::=>7/,,,-3454=42<9516:0+..+5IPMKOQNMOI@F=*1O_Z^u~qE4GFCIGDBKmiLA?5+-1232.++AO-++.04:<GRftI1AIEF`lh\\'1GJ@CBNa]JD=48AD@:54;A=84348<:BMKHR\\VH=8CayuqjdZD8:832>F;246656529KNBI]_P=1.232333334445555556@LRRSRJBAGQVY\\^\\UNMIHNQSZ_][[ZXZ\\\\]]_`_\\]^\\]___aaacfnuusqpono^?566566777777777777777777667777777777777777777788888:==75U~}}zxwwyzz|}~}}}}}~}{zyvssvzxw{~~}}~}{zxyyxw112322213458:899998;=@DIKKNRTTVVWWXYUI>>?>?>??>>===<<<<=====>@AAACFJNNJHFDGEACECBB>=MeX7LeWMTbXM[_[UBDQJMem]SPNSIFKNGCFR\\TJMQRRMKFC@>BIOOPOJFDGWcjlc]`UGMP[ge^djeZKMTNFDFNG>FLMY]VU\\cb[WTEAJWYVTTWVQNRTPNSSLW`\\aknkjhs}wtsne^bdgmpqrkfkfVY_RXtja^WZ]aqym_hpkaejR<`n\\jjjy~udSPU^ny}ynqzyt{wdbe{ekwvortmqsyueRMQRROTTSUVVWXVVXY[\\WOPTTNRVIDOJJ^_`c^TWZWaba^^XQOY^[VXVMQYF=>OPEBCS>A<@BD:<DH>DCISJGMZXKLWH?EHSQOYWW[_]NMW_WFFINJGIHFGGEKMCLRJIRRTYTVTZ\\c\\[ZY[]_^`^\\efbdcdefhjggih\\]fgdeabfjlhffbdb^debeefnmgaciihedifgfж¼¶Ȧ|{mZZYmu^aYXr|afsyoswon~\\iclqsìŶ˹ʿ´ӸпɽüѽҸջ͑tř̚տǻƛztuh|mp|jsoob[hisbYhW}u?Qk|]R]OPV_gUgjdlfQVmXV|qorsqdop{u]x^XspzsfxqNZtoq{n@mlgfcSHNebuhlupqXQF\\eYscdhorPpK\\dc{qtilW[YT_F-@Y<AegWRH\\xcfayvQ:07GMLIGB2/6AI@03646>A?914;5/1201013.)&(*+*+-/8A?997201693.,+*05/-,(*/0/%,73'??%')*+)(.2-)-214/235>=@<.1>;?9-35772)$&(*,0+'+(')(*(+)1/051+/:@515.((+-8<>5<=4BHHKD@3+3/,+)GSOH:3C6.(.(7A70.+(%+5;7/.)-:>842.66539E>7<6A654:>1/?:>UaF=<D>=7886KO;<G@>74=+439:>@3IML^WY[D0:TbXTLP]_a]Tt]\\`RNIL8=GRKHB?O1;SF@48927F:9:;:==>?ADFGFEFGGGED@@ABCBACFJH@D@@>@GCGFEMOHMW[[VUPLOMIABQPIRQA@IS\\_]efid[NC?510:V_>*E[jibyn]j~zwxqk}zmxDIF:.DzgD7QtJGkE237=<AGEDP^ed^]][UTRWo~rnZ@=<98521130))/6953<GPYXYesj`]XWWWQHUcLJOgsr|~pieg{}rk]VO;<JUWdjcZcxoX[fdnt_PUdpruxuu{xmwoMBIMMOXgkkgc]L7-/3488;LWZ^bedJ/=OKCCC>75::0+-,*).47381,35,7G?/,/-,/>JNOJBBDGHDHA,7j~{}~P7B4'0;72Cj}dD9@:.-265.((,?K-//13568>D_gB206:B\\xtO+/69D>0=WZB643;B>7655;=87667887<CFN]cb]L<CHFCFI[]C<=?;6CTI3/47:==<;>?AQ_U@755332334434455556658ALPNQPGAENTWY\\\\ZSNMIINUY[_][[YZ\\\\\\^_ab_]\\\\Z\\_aabdccgpvtrspnnnfE366566776666667777777776677766777777777777777788888;=69]y{}|yvxz|~~~}~||zvqt}z{}||zzyxxw011122222259:88999:<>BGLMNQTUUUWWWWYWK>=?>>>>>>>=<<<<<<<<<<<==>ACDFGKOMRWJ@IMEDGDDC=AUaQTjj[V_\\QXabVAAHIKTYSQSLD@BGKMPMR^U@7IQFFKEBCAFLNUc^JCBCO]equp`MIOY[X[ZYai_PTNIPRYXHCCEO[]VNMXZPMF=BGGJSYYXTQNOQNKSbe[XXVWUSWboqw{rhccfhlpqqmloka[flawk}zoa[TRaovobh}~{thL7KLKdtmkm^OPSOM\\hbejcgthYnmchzsvwvzskpzqlxs[SWXVWTTSRTTTTUPMVXYXPHINPMSVIDRNMYXZ_\\STWV]c`\\YUPQZ^^[YUIIZO=:ELAF@H=A;?8;:CGF>JCIWOIJVVKJNHAE@KVT\\WUZW`YSVcf[PJONGOJCEKLHHETWQOXY[a\\]]b[a]\\[Z\\]a`a]Zef_bgbcdfjbehg\\\\_aab^]ahifdebaa_edaeccjhbachihfedgleiɺͧǻçwzUVUcd\\WYp~j`vrknsblu[s\\q{vƮķȷůæüȿñžĬžɷʼպ˳rմȝΖòtxr}spuiwrnc\\hww|ZYYXgS>`sYelLTYX^KnyjllbLjmCh|ohhupduuysoetWXkm~k`vmEk{}p|qgCnn^UXKD_jjqav~{lWOL_YSrj~ydcvlu[rQx`totsNQZ^Wg/7NC8Zob\\W@Z~rhla>49DIDELL<5<?CC;086/>GEC:06>5/10./1550.-15641//07:7530025:;3)#$(*'+1-.980!!.2)?9*,(+,,,2/(,//12-,)/9:?10:66937;72.-,*+,-,+'38/,**,,234/.//*4<;=3)/'-2157:>97-5KSD44409;2($-/7676>45-819=2133+#-69-,7:99875/03:<7>A549<?134::+8<8KYWEB;><87>7>QE8CA>>/80.1498B;7LHP\\UVW=0>\\aWQLR[ca\\Yrc^\\PJIH6<OVGI=CG&LWC:3=41AC9:88;<==>@ADFDDEEEEFEBA@@@@BEGFCDFD??BACA?HPGDNUUSUTSTQMGDOQGGI@?FNX^ZWYehf`YQJ;2.+BSOfx\\s}vjSV[ZjojhfYikcn=VW?-?]XEFGM_KC@\\qD,*6;;FGESgspd]a``m}svyV:9754469;96424<ADLPPJFO]koia]ZVSTXlvXMdmpnvzwpi`gwvm`Wec@CRX[fidiv}d@CYerxofglotwyzzz~m`WHEAAESbqzuS:,+.19?@GZ\\\\ZZaT7;EEJLJH?7881/221/.7:33**,+,@K932+),+0:DLH?=??EMKA41O{rSD9+0+4GB@PWOJA14<7-.32-)(+>E-//25:=?<<QXJE<CIIPq}bYG+,+6OF26BD:336>?618:68758<?>84;>:9Leigi[H=;<>FJRXJC@DIKQ\\Q6.36:BJKD97EWT@354433334444446666776;GLLJNPGAIQVVX[]ZRPNJLTZ[[^][YWZ[[[]`cb`][Z\\_bdddeeeirxwuvtqqqnK4675777666666677777777767777667666666677777777789:;84Dl~vy~{ww{}|~||{yvx|~~||{ywv011112222359:88999:<@DHMPQRUUUWWWWXZYL>=>>>>>>>>=<<<<;;<<<<<;;<?BBDEIMKMURHLSMKKD?ACCBSga\\fj`]\\USQHC??>FMNQ[^TMHCCFGOYUU^[OKKFCMLKNE?EMLP[SC?BM[_bnys\\NKYdUOUVWUVSShbTadbUHIPGLUTRNJNRKF@=DIHKV^\\YZ^ZPNNNP`wm\\\\\\\\ZZ]b_grwulikmnnnmnkktwk`ikYVkxllpj_VGKUXbmuzuREJHRbrrjg\\QRSMPglbkwot|b[ojr|{v}uupf]`fp}{kXUUTTSQPPPPPMPOGSUSUMGFHKHPVJGROOUSU\\XSSUTX_]ZUMOWYY[XTRNJVUE;<HBG;=>>8>6=FNPIGKIJWRMDVTLNLJBE=H\\WTRTXNS^SNZifXNOQNTLDMRTJIMY_ZW[ZZd[W`eX][ZYXYY[^a\\Xcf[`f_[\\`d`_ddYWW[a^\\^`bcdbea_`_ecacabddcffeghgedghqsv̱¾z]OYduk_QWt}kdwmekp`gyz]VkĶű©ĺŽ·ֶƹʻ²΢˱þһĊ~ٺѸݻŹϔǸvrb{w|}tcbncka[YTRVszMWrѝW|zZfYYXLplmql[JqZByihZbxkex{Wcfb[impiaxlQt||e|inQrnQNLDRnzn^d~|wbYVM`UProslwbamkxczcTp~|tF[\\c`a/DL;Edjs_ZL6Twhk}`I<8@FB@KUG6@E>816:=74CI:<>23:510226:;:878<@>;83/+-479;7/.7@A;* $\"#+4505:2\"!%%,*)+.,')*,05)*../1.)!(77=7-454747<?;2*,350-.0.+9>653/.23/1*%.0*2115811.6;67:<@7-+$7QK8<8:=F?55.\u001f')1:9725ED983588*$390#*=F>9995,23>><>7026F8/04>3*=8BUPJF=8<<8>=8HL==D<;;1>+/1887C6>KFRYSTP93D]YXLMVZfaY^nicYNHJE6<ZUFF9H9+]KD73:36I:;:95>>;:<=>BCCDFGFHGEDBA@>?CFFCBEHD>ABB?<ANH?ENQNQVTXXNLIMNFBC?AFLSZVRMTbea_`aWC?D?=>N^[aliI20Fioofcbx}yd6MXJ;75;KRLJMJGE@A:56:::<<Gg~|pbaca`k~{qmnS776443357;??;;DQW[UMLNOOOQVXVTPJNZpjOYbhghowzzsg]_caPL`hNKR[\\\\X]uiJRmk]_dghc_cmppppwoQA>=75@_xr\\LB8-**+3>@>EGE?=GNGB<>JJIF?7334428@?87752*+,,.5<7<4-1-./..1:FJD>CYZF4,3PqoWNE3.CG;H\\SAA<?F>5CF0(,.14-*?G1/.137::89FUXWU\\Q9<[xe]S23-/<;35557;9;>:23=@96447?E;1<E?51>_ng`WQD9ACFOXWLGBCQ^feN6/257>LLH@9ANG3212333334444555666777?IKIGJLECJRVUV[`ZQQNHOX[[\\\\ZXXWXZZ[]`cb^\\]_befhjhjkikt|}{||xtspO457677666666667777766666777777766666667777767789;967Sx|~}{z|~}~~||}{yy{{{~{yvt0111112233479989988;@DHNRQRTUUWWWWXZYL>=>=>=>>===<<<<;;<<<<<;:AB??CKNLLMNQPQTPMJE>@GJGDUe\\]ie`\\TKB<<=ACDGMPSVMIHDD?CKRUMLHVodLGMIZ^FCIMLEGOF>IW[^`lzxgVNVUMSXYWPOMMkoeh`YRIJWKGNKNQKJNIDBCJLOSY\\[]`ilVLOVVXmsidba`ccbbgpuoecefdfoussh`t{kljPQfotnbjshQP`WHSlumnsqroZFDL`strrutbWSQm|ptztz{h]X[^pzyqrvkgolb^afn{{lZRQQPONOOONLIMOFNOJNJEJIKEPVIKPPRURQVSSSRPTZUXRGOZYWWVRPRMQUS@:?BD45B@=CDPY]ZSTTVOSVSDZTSTPKAA;E\\XIMPUQGXVHHdeZQPQRUPJVXUMPSVi\\SVYT`QOadXXYXWWVUVZ^XW_dV^d[TUY^a[_eXTUU`^X]`]^cbea``_dbaccddfhjjigghfdeaa˼ȶ||tO_umkfQSxknylano_by|bokȼ˴ƪϽɼԽ׽ŬеʽĻäʲƿ̾¥zۿɻӗsqb|}~uwcYxqp`Ydjasz]^YIsgYẁgwsr\\bPXtykuqePPoYVg_[Uo{sszqsMbgzatt_hezrqsup^xou[qpHIEG`p^Wn}ol_`^OjXJqqkco`cikr`tYuu|rVZYhrX6NABPVo}p`TE:`fvZLH=::>JNNK86ED5/16BC77C?-1A=3210047898799:==;87641+,16>D>12?>3)%%\"$17104+$ \"#%)'%)/,()++24+1*+./'$$265<2:6344698982.287-('+1(%)-2865-''* !11*/+./12+15=74;>;:3-(.E[SLA>;IKBGA*-2:C;727FD774797(%33*&+:DA>==4+24B;;7...=D3/.5=,/:ANJIFB63=<8D5>LB?>A8>467(24;9<A7DHFRVPSH89MZTVGSYZhbXcjgdSMFKA8?[UI@:J4>]@I1:46BG8?=:5HA8867=@A@CFGGIIGFDCA?@EIGBAEHC?AC>:?KLA?GLKJQTUXTQRSQJHKJIIKOZUJGQ^c_[[bf\\HOglaR@Mv]_\\fgM/4a|pcUlpTgQ0ATPE9-3FNLJHHIF:26<=:6416Pkka_`dc_^\\Zenw~zvofV866641,)+.269<BDGNTZ_b^TNE?BHNOMGGXqcWimljlzvi_X]\\LELTRNOYSOPWpyysabm]D@IYfb\\\\fklnqs~X9450-6Oo}wcG42320/,-3=@=;::98:I[V94FIB976545323BF?6094-,,+,/2DD/87/11,*/:IQJ=?R\\D,,2;HZoo^SI7;DKhkkj\\C@GEHD8IN5''+8C5(=P@22005537CVdjee`D3Zq`420/49:999;<<;:637>@<7543=B0.KO;446Jd[TOJB@AA>M`\\MD=>I`j_A3.4>DCGEEC;:@<2333333333554677767767?JMKIJHBCJRVUV]aXNOLIRZ[[[ZXWXWWYZZ\\_```]`ehjjlmmnpmku~zrqU64766666666666667666666667777677666666677777677993;b~{~||~~}~}}~~~|{z{{{~zxvu013322113357789999:<>CINRSRTUWWWWWXZZM==>=======<;;;;;;;<<;;:;EJEDKTNGNRMMTVRLMTJAHKJOQS_d]Z]]TIFKLEBHKC;FPHC??BEECFJLH>>=HiyhZPLitM=HHE@LbTCLT\\_dntuiPH\\YNTZSLTYSLZ`ccRJIEGMGFJGHKLJJKOIGMKORRRT^`kv`UXUT\\ksocdecd^_dddgijjgfadoutrhZfvqqjNQbbccbn|{WOngMTd]`qx`CDHL[gpumfebadsxihppytNGWWZlw{kmzuqsqmihhkwzn[OOMKKKLMNNLJFHNGNPFGG@FJJHUUHLMPQSQORPQNQOPTPYWIS\\[^\\Z[XVVVV^LE@AA<<PNPVSab`]X\\``WQ`YS`X]\\UODC?HUWNNPOTLLYE@UeZSRQPRQNYZWQVRPjYHKYQ[OO`bUXXWWWVRSWURSZcTYd[QSV\\_Y[cWRVT[[VZbYZ`addd__dabefghiiijljhhebbbYa̼˪tv^cypw^Pzwr~v_rk[brr~zȰϿ϶ɴսǺǰӱʳǿɭΧΰןtpqmskr]`~mxeOP[ZWcn_Z_iXo|ummnnH`uzyyygYNY}ibr]WQYws}{reWUfuht|_`sx|rkh_mu]nnD@DOanT]rsml_j^YrZLopb[jdhgie_wzgnzw_N]kP?S9FLOn||ZPLp`cWIIPG<9FMJC85DG;99=9=?7671,-2851.0431/.-.0/044678:<:645417DC;=</\"!#%'-.*+*#!#$\"')(-/1,(*,-22/-'+.*$'14.1425235045.,+,.44.'%##,!\u0018\u001b&,;9;3*+*&&53150-/31&-,15./<CD6-+,2CF?=GGHXTBA?92DF>739A63545><(%.-+007<>AA=1,1=?351,,5F9,*/87+3?KG?BB>43>8@<9JE@=::7>1:..17<:@<<EEFQPNT=;CSYUQF[Z\\ic]bdc]MPDO<9DWYN?AJ<LT@P2?0=IB>A@<<RC9847;@???BFGHKKHFED@@DIGCBCCA@B=7<EIB?BDHGLQSUSPUXWPOTSPNGIUSEFT``ZURYcjaWX_YS]WKKcaedeaL=Hmw_IJqg:1T~tC-=NKCC=2;KNHDB?6/4;>=70,.8FE@DUfjb^^_XV^kxwpjeI238961+(*+*',5>914=Qgoi`^WMMPKMRIJYbhswsos~~zrjd]ZpoFT^de^RSSOZjikk[TVYZYSU]^^aelrtvsvm>.4766?VjdOFB<5015;AFJJECEFF=<GV`L3GO88=>=;5201=AC5,470-,*+-;PD5=0011,6LRIJI=8=B7*-3:6;gxmZ9,;NKjdMKHMG<NI3-,3CG5(9RR=/321<DIUXVVYZWAFl..348=A?=;:778635;===<;4,5<+9ZN3378CJBGJ?99:95G]]N>52<]gJ-.9CKTQD<;;97554323333333557788777679ALNMNNH@AJQUUW^aWLLKMVZZ[ZXVXXWVWWY[^^``acgiikmmoooonxuu`:465666665556666666666666666666666666667777678999Iqwx{}~|||}|}~~~~~}|}~|zxtr134444333556889999;>@DINRSRSUWWWWWWZ[N><>=====<=<;;;;;:;;;;;:=N^YSUTGDPWSPQQKDHLEEKKGIV[X\\XLQUKABMXUJLMC6BSH<9<@HRRLFCFGHHPgwombPex\\EHGFBLbgYYahjlood[JN^WUTPQY[PLJLNRXNJLEDEDJMJGGIKKKQPFKJLTXWXgpu}gSYYPR[fc[`cb^XZdjiosnlgfegggqobbfoywsjlj]YY_bjrXUdZV]_d]HJFCL_rudXbhjporrdajxzyiWTS\\ekunpxzwkhjfinlkleQFIJGIKKKKJHHEEIFLTKCD=CHHLZSEFLONSOLSQMIQMNOM]\\N[bbligmjbb`Ze^XTIFQW`]bdY_[WZYXZcYYja`bbfd]\\TPGIQVRSSRNRKRMBF_XSVMKQLMYZYSUOKiUBH[SYOQb_SXZYXXURRTQOQQ`WTa`WTU]_WW_ZPXXTXTU\\XW[_bef^]c`aeghhhhgimjged^aeki|ʻΪunm{rTx}kqdnrЬåʶ̬¾ǖ˟Ƴͷºӫvפ׵֬vuǬdoms\\cquss\\LMd_yuWw\\]suoyjmDap~suVZW\\pifZOSevqwezYaneg{}teU|v`blbar\\nlB<IZ^p{^dkpud]k`gr^PpjXVikmecZcsztxqqUOhnGFJ:LKYlzJN_eg|hRHQdT;FPE>:=JTF<N[XLA:63.,11-+02231,))+*)(()-038:<>?@A;3/*-=A7;<*\u001d!&))&%'(,,*'&)+*/24+'+-/10-')/.(+02++-,.,-2/-0+'%#&+/,'&&%$(!#&*/<46:.0/0/949D,'0<2+.,06-(1;?71.-,.00.GT<HQC>B5/HJC5.:>03744C7\"$*+152438@A<0./B4,22,.AC/'*29429HC9>?A90<B9<9DI>=873:838)33;;>A9CDCFOION5EKSXXMJbZ^jea`^\\TKRHN9<IW]ODJLDPTOP:A3AJA@CA?HVH:8::<<==;@DFILKIFEDA@BEFEDCA@A@88=B?<BC@CGNQSRNOUURPW[XTJHWXHGV`\\QMNPYhljkfWI=ERUY^zgmcb\\B;GYX>8LlR+1Hig>1BNI>AD>ANQH=72++399741/2<AB@FYlk_\\__R\\x~kelbD</6=<62.,+**-67/**.<R[`hpvk\\WHJYPGHOs}w~rw|xlkhXeZ]kp~SLQUnsjf[GCPh~iT]hhgnmkh`TakK7?EEELS]grufJ7202AMSVUQQSOC95?MUVACG/@KG?;:B@6;=A9.-/,++)+6FNDD;)2.-,6GK?<=941..23598PS2>3=FUiMIRH?ND429BNK4-9=OS@;C8@NX^D3;IT[NFvq-.659@FE?;<:799569<<<CHB5211A[L/,0;>75>F=::846IWVI720;^_?-7T_YYRD:668884333333333557778877775:CKNMOQI>?HPUUX_`UKKKOVYYZYWUWXWXWXZZ[]``acghfgkllnnos~z{lA36777665555666666666666666666666666666777777771M|vuwxz}~|{{{||||}~{yxuqo555555543557889999;>ADINRRRTUVXXWWWYZN>;=<=<=<<<<;;;;::;;;;:::=JXVTOJIMQRMGCBC>9@KJGFIRSOKHFGIEA?AM[VPJC<ERK@<DJITfnbOJOWWZhcS[gkskc_VWWJN`WZfippiom\\VJJVTTQQ`tufPHOIIUUOMDINIJLIFHJILMTWIMORenmmotyw`IKX^YW[OHU\\XVY\\cottqmmha\\Z^jwujmmluvy{xkea^aksu\\k{gba^lv}WQULELT]lolsvmosmknlehv{}nhfiub^]ntnppmeca_dkjeZKDFHFGIGHGEBDFBDFGQSF@@CEFKZTBALRGWOISUOHQJMOPcbZeihtsovuoid]fgceXS^gabicTTNR[YQOgXggfccjliejeaQIQSJTWSUFUKNHASXQSIGNHKXYZQQMOgSIK]UVLTd[NZ]ZXXURSVQQUN^^Vbeb[Z^aXUXZNV]PUVTWWX[]bdc^\\a`^dffffffjmiede[[hzʹúƱѵw{bz|}Դéç®̵÷ʫβøٿҶú϶yܫٹѻ|Ͳ~dpshNYjezcGczzkvm|jQg~{epxktYF]n}nrMiZ]nr[aLYgvcbpowny_g{wuheS{qQducWm[rj>>Tg^otpfevsYcbglrcPvaPPetraYRf~qz{qt~bHbqye<L?IROd|_L[ril}u\\PVh_CAOO@6>KUM@AJPRSNC;:91*)**+033+&')++*'''+038;;<<=AC?3*((//2;8+&&**$\u001f\"+33-'*+,-/11().--.,*'-2-,11+'*+)+,-,,-(#%%$&)+(%&((%/,$(%///)1'+/49>446&(6:1-301C2*,-8<7961-19<@QL8:ED;5:LGD6/<9/34445*%&)*63.1,4=@<-./@*+/1-1?7++-7;89AD88<>B44G?97BH=<9542;543,63;<@@=G@?ELDQ?8OQTXVNQfZbjgb^YYONWKH8DK]\\QLRLFR[YHDA9ELDDE?DQWL<?D;A<<;9?ADIIIGFDCA@ABCCCCB?A@<=?>7<A?>BJPRQNNQQONRZadYV_^PKTZVNKKMQ`jfgjg`_ZRFLc|w\\zma`K:8A>4<JUE28BQG27GLB8=FKNMG@5/,*+.0101124983;JapeRTa]LbpNDbsT37./>?:85247:=;/),/5=@DUiojf_OBGVXIBfthlkVVup][]~eJPgwhbVLGMaricvwuwk__`PTkV?KICTcgikv|fB462.2;ELOPRSF<839KNMH?A2GPH@@FNH<=AE>1.*()*..7??FM9(.+*+,.//0231/,/56336F^~84T;/?Rv{}]C@IJLK?46DPVP=4>JKOJ?XPGN^_8,<HSZF2BMMiv42987?HJDAB?<<=<6148;@MTJ6/9>LC0,/:;44;A@B@:46COJ;3307OKJ[Zoib`VNF=9<@>5212222455578888887776:BHMLNOF=?IQUUY_^QHJLOUXXXWUWXXXYZZYYY[]`acffdejkkmpqs{~wJ2677766655666666666666666666666666666677789964N~yvvvwy|}~}{|||{||{~{y~}|zxwuqnl67777654445889;;::;=AEIMQRRTUUXXWWXZ[O=;=<<<<<<<;;;:::::::;;:8<KWSLPRH@CJG=6;GF89GLIKUWOKB<@@>?@?=AMTTRRH@JME@JRK@IcodSMOPTY``^dmdYaebc]UVXU\\_]glicYTNGEJMNRQQZdiXOUKQ[UOHCPZVOFDEHIEGU^WNSTU]^emjii^\\TQX^ZQQJGNPSV[\\^djnrkccdd__pzxxysixwqebtm_uz~mnqiefoquvd}ERXQOUTXnzxxvulgnrmqv{ytt|xlhpjglqskf`Zerh[NHGFEEDDDDEC@AIE@DEJTODBDDEJXTBALVCZOHUVSKTLNTVejimniqrpqrphc_`bde\\[T`Y_cZPPMV`ZOUl]l_ecekiggqqi]OSQIKWSXGPQGMDGSIHFEKFKXXWLNNWfTUR]WXT\\dZN\\_\\YXVSTYUSZR\\b]fjjdbccZWTYPT^RQZZXWW`\\ac^^^_`^bedcdfhjkhd[bhjq̽ĴƪϿ}qßϮ½×Ъv˝ѫε۹ռٻ¸ƿtn~y}jbQf[vNSLUr|zr`ZfZUdozċYsqbwiOOUyxpbRvQ^xx|fljI^`wsPtZv{llpyi^aW{ix\\mrhRl_b6BdnZiw|ceqjYf]klvgZwWJIcw|\\OLg|rwzykuqSMuuD>PEXIRsvLQfi`ywreVZkcEGLHF3=IPPFDC<<:DRPKIKH;-/--45+0+)(''''()+.0467;>=<=BB:2**.,+4;2()*'!!'--*(++,-.-)',/++**++12-/1,('&)+-.-,,+#\"%%%(()(''((),.&(%+#*\"$%$/05;1*%*+1.50:/+H9--*4BBI>146<BFMWU<87:GEND:1+41-01/-*-51(*5.,/,0:?>-41=),-/-16+-23<<>;C98;89?;?I969I@6<6333;44/136:?@AFD;?DDAP/CTTYWRSYi\\flfa]VWLQZMA=ORaYTTUKH[aODN>>HNHLF>LSTL<LN;JC@;7=>ADDEEEDCA??@@@@BAABBAA><9>98CGNQPMNSRLJLT`fe`a^VQW]YRNMMM[d[XbcfiklfWPVd^iSDmmZ]aO778<A@@60::8/)9IC;7@FGD;2/++*+.//1124454/-7I^j[HEPYLNV=%>roC.++,7:87426=CA4)(+4AKGNahcaeaTORU`^Qa}d`ebY^orfYRfu\\Zkoe^VTUTLOXe{sRM]fga]_mrcj_>MKEXdkytmbS;.21.*)2=AA@A?=;;;BIJLH75IGBBBD@?CACD<372,)*/1224HO<&),*+./-**/1.,-.00/.03@yx/8VI0F^}kJEG934:GPJ901BSWQHIUVQTTTVVNK]a5-:?GG87A<Dr<19>?BEC>;9:<<>?5)-1:9>OO:-4490'/4:857:=>?>6403?<012113<]|{uUOXLIF@;;CC6212235665568998887777:AHKKLKC<AJQSUY]\\NGMNNUXXXUVVXYXZ[[YYYZ\\_cdggedhkllnoq|~~X547775665566666666666666666666666666667789;:3O{wvtuvx{|}~~}|{||{|||~~~|xy}zwwwvqljh8877865665789;==;:<?CFIMQRQSUVWXWXXZ\\Q>:=<<<<<;<;:::::::::::9:?HNLLID><AGD<9;AD?<BIMQYZVSD9<@A==@@ACGOX\\K9>EBAGLJEHV[TJJQ]_X^cUHOMLQZc^RSWS\\ii`XTTR^dOGKJJHIMQUTUW[]SSUMKHBLWYZLIPOMKHMQKNTSOLHPX^\\OL`h[X[SLHHPSRW_`]]_`clkdhlh^Xajko{tjvwv|mbsql{lNPcjw~{zbisWRUVWTUd}vtruriqwyxv|wu\\`kaiknpkfddpyqZEDGFB??@FJECFDHMEBELRWQGDCEJYTCBNYOUOLYVURXTRZ\\foopmfhlogelhabYY`[V^KWW^_YZ][[b`Wbjhk^dcgjbaboqhf\\VRQLUYTUGRGGGAHC@@DIGKYXULNUafW][^[^_bc_W^][YYXXY\\ZY\\Y]c_dlkigfd]YUWTT^SM[_YTU_Z^d[[\\^`^`cceegijhfdd`i̾˱ȭ­z͡y}οȤ¨ſ֛ոɤ׻Ұ͹ºƨǮնϹ³yx|fhUifs_Z~svYOQVmvOFP]VV\\ijwwZp\\ajUZST|ox}Oi{Mkrt{{`aF^cv]Vrqykhw`V[_}dumhosQmvfV5Fsl[fcgfg]^XhoqnmkPKDbuSGGilmvlvewdNZ|}l6QKSU?ccKN`\\eccd\\^g^S[ZC=6FVPTVRND=?<>FUYPO[\\XSD49</0.-,*(('++++.0127;?BA=ADA9682(+7:/(*,*$$&''((()+)('(.-(),*+/3.-1/)&%%+/.-+++&\"%&%'(()((),-- $25+'$'$&'%,'(1/-/.'+*78>-/952/.4??M?183;>FKMQB95CRJXF62('+.21.+07>?-,1---,,5D@.:6<.-,.-0/(1888<@=A6<998DDAC76BC8681204932,126?@AFK=:BBAGG,NTU[QOY]iZgqd]_XVEV[N@JVY[ZVZPIOfZAMR<DHHMSFBPOPD=TI=TNE94<=>ABBCEDB@?=>>>>>@CDBCCB:9:4DIJONIJRTKEFP\\b`]__^\\^\\TNGCFLTXQUa[^lkkigeaWRDYB:RVLJ]aE67<=8;865440-:F=8>C=6/,++.+(-6::76788:><:<FNMJJICLA66-0Tt\\63*)+35760*,6:6,('*2>CFTeiffhiihb[egYXu}tvcab^]^chli]\\hi^URWXW\\PKWSIOQOJGDDOYU\\jxqalmECPYRX]nufK7,(,./,*.:CD@978;@A?AEIG99D;;?8/6FJ?<464:80+,-0206OVF2,*)+165.--0/,*++-..00Et14JQ;Mk~N+/0-*1ITI3,.6EPQSUYYYYYVRPNJY^/,67>BEPZLE`}u:3:AEIC:5/-/14:;3(*7>77>=634460-589667:><;920-,121221229Y|gB7?A??B<4>E8111356677689998877768<CHJIKJ@;CMQTV[^XKGNPPUXWVVVUWYXZ[ZZ[ZX[`egijifhkklmlp}||f92776566556666666666666666666666666666777983Ozuuuuuxyz{}|||}}{{zz{{{|}~}||}}}~~~|zy{||}}|zvwyxtpmig9:99986888::;?@>=<?BFHHMQRPQSUXXWXXY[Q@;<;<<<;;;;:::99:::::99;;=DJG><=>CE>>?>@BBBBDFFP_aZJ<@HOD9>EJNPPJDA<;@BACAEFEJLGGOMKIGJICGHHIIQ]YQUYUVai`UOM[ncMINLILPMQ[\\X[^`THFLLIEMUUYPLPMLMJGDHPQHDGIOO\\[QT_ldVUPLJMTUVU\\_^^__`ekmg`aYSV_dcirfY{ufTdrLb\\EZiXTpvj]Qb`QRVccf}rnqurm|~yxwyzrttkikbcgfchookprZHGFKJE<<@ISNDNMIMSIDLRTYSKHEIXXFAMYYOQO\\VYX\\\\UX]kpnmlcahlb]jgadVX\\SQ`TZ[^bcmlc\\ciaehni`echg_[]hicngYXYSW]UVKLLAGDEJ@8DKEJYXWNP^dcZ`_`\\]_ab`_^][YXXZ\\]\\[\\[[_[`hhfccb_[WWVU\\SMY_XTUYY[aZWZ]``_adfegjkghcblxɺγɸӽ¸~ŭŴ|j~ƵԱǿէȓұºռɽǯͱӲʤӶå{zbYaJxke_|XN[UTUas`BEYgQOWje~`]^O\\[TdZ]rmunM{`u`bsumVHZfo|[h}r|{lw\\QVibmv]tzMlinO?Ptb^illjcfVQftdv}eQJAatG?Ij_erydhaw`Hg|Z=\\KaGRyxZU\\]VRQUYjiOJbX6:DPdXT\\a_SG@=>7;WZQMIScU=76=9--+,2444550-,-/.0434>HA>E;-3;5*,54+)--&%%&%'%%')'%()/+'),**23,,2.*&(,0-*))**&%&''''())('+.* !+/&$$%',((+%&./22-*.-9:A1:62007AE8SF6A<A<::C;+6BZbIQF784,1400.)67FJ1,/+-,,-6E=,:;9---.,0,.;;53?<@=9=95?IB?@79D<685.31460-,026>>CNJ6>EBCK68QUU\\IO[_cXks`Y^^S?Z\\ODVZZW[YZJG\\gG<XV:HGBXUCHSKJ>DX?D[UI96=;=BA=ADCA?>=>===<?BBABDCB=5@LEIJIELPI@AKX]WW[\\]`ac]RHCFOTTQT]RLamejmimpi^NfeNX\\SJ>ARI68>>7<;>;9675:>9:AC:527;61.07ADA@=:9;BJOMJG?//=JMLB855=PaG40..//06;5++/-,*)'*0369FUbdlsmrwe\\db]]^apyvrp}{lfccc_]^agh][daZOJaiXh[IW]LNTOSVG8Ga]hurd^j}xU>Xf=DVK`fX>/30,.221:FHD;738;<:=?===FG>?=34QN>52,948:5421230;[O:82&&+-/0/.-/.)),-+,-2-Bm56;HD@[{A/8:.6LS?).634EQVWWXXXVUSSPM[`0'05?JRb{`6Dtm949<@EC=730--.385039=<>4059?==>==:87678<:961-.0/02222452AbkPAB;<<>EJ?8>6123466787898888768878=CHIHJJ?;ENQSV[^UGGORQTVSTVVUUWXZZYZ[YWY_fiijjikkjkkjn|yuC3786554556666666666666666666666666666779<3B||xvvvuuxxyz{z{}~|zxwvwwxz{|{zz{}~|{yxy{{zz|}{xyxvxyvsqnjh;<<;<;99:;=??@BA@@ACFHILPQQQRTWXWXXZZRC<<<;;<;;;;::::99999:9997>HJA>@>=CC?BBBCBAA=@@8Iej]M=FRSH??DMMPK>5:IEAFDDC<D_tmNHLG?:CE@HNJGJNPUVX[[XTVUVWY_jjSMORMEJ[[SQORRONG?GOOJIOTRPLGDBIMLKJLQNB?AEMYaZSZ^dhbQNKKTYXYQS_``__bhllc[ghXU[ghakk\\nsw~slcmfEWkVRUbr[[i]QUfbXXVgut|{w{{}xe}xsu~xrtuwyzi_eifflkcln[JHNNMKDBAKUTORTRFWVIKTSY[UOIKX^NELX]OQR[UX\\^_XXcoojfia[egb[fdaaZXXSWhbbc^crunc]dhdeklg`caea]VXeb`ofY]^XZ]XWMMQ@HHKR?5GLCLXX[STbca^abc]^^aa_`]_[YWX[]^][\\]XZXYcc`_aa`]YWWW[SLW`XTUWXX^YUX\\``^_ceghlmhkl^p¯Ʒ̹ŵóʷ§ɭļızklqıҾ|ßեϰ͓źѻ˷ӥڹī¡z|{txlKWQbw{entJCHw\\ZwoUgqv_CLapzs^ZQTcfagfhjcgaY{vt[Xqwr\\JY]hw_fuhySNPqczf}]xrJi_uTJ\\jX^ow|u]sRJcqd|oWD@as>>VhU\\|sq``av]FxzuRH[SdEo|{u\\__RKHHLejL>_c:9\\ZaYcgioiWNG>??S]]e_C4C@-,.1=6-)-5612462/,+++,-.-+189=;+#094-.1.*)(&&%&%%##''%')*0+')**+2/+13.**,3.)(&())''((('&'))(&()%\"\" \u001f\u001f#$%(+&*,//-/3-,100:AC4D<3013@LDX@1;?E<30BC5:3DP@LD35;698./30:7JJ+,,)-,,.5A6':>6,+./-.,;C:08?8@:;>19JC7=A6:=::2217233.--148<>HSE4@GCID-HLTV[CS\\a^XnoZS\\gMB[]QFacXU[YPEPgT;BePCDCDcSCNUIB<LW@Q^UH>?=8<F=9ABA@?>=>=<<;<>?@BCDD>>HCDHGFHOG;;HUWOLX\\Z]afhcYMLW\\XPOVPJWjhcjliquib]mlMRjx`KC79:58@@8>=?><89;:76<DC99?GI?34>B?A@A>;;=AJMMIFC@=BJIKE=<=?CE=5.258/-6=<655.)**))/49;8AKQqmot][ga_]Wi{zwnoxjihcekb]]ad_UYdcWKKcmPboscYTLTV[hcGLkjpod\\_p|v^Nip;6TJOci]JL?--;;149;::7::755:@>25EHDFHM_a>0.-6?46;AA4121.>R;099=;<;6.+),..+-..,+.2/FpY5<<>?>AWuT.=B14KM1$1<8/9MSTVWSOPW^XPQag:(/5>CGVfZ?RvQ==;98<A>;:876/298:?:9;;3.38=8337964467665540,.35201322102@E7;?999>IWU<24224466887998888668879=CGFFIF<<EMPRU[]SEEORQQQPRUUTTVXZYY[\\ZVW^dhhikmlljlmlmx~R568565666666666666666666666666666666668;4?ozvyxvtuxxxxyy{~~|zvtsttwwyzzyy{}}xutuvx{|}}z}~~{yyywtuussqmih===>?==<=>@ABBBDCAADFIKLPQQQPRVXWWVWYUF:;<99::;;::9:99999999989>=:>AC?=C>:AJMBCHEA@A<AWgaQHUTF@FIFGACGF<<GGCEEEBC^wr[HJNF=@UVFKPHDHOOORVXVRSVXYX\\hqkeXVYOHUhj[QNNE?@CHJPOKINSQMIEBEHJKMNNROB?ADN[a[U\\]Y`VMOMLVYXZPO^`___chkj`[hhaX[ilgje^adfq{urqqqmeb`\\XWdaQTWQM_nd_`^kmoyvumvsbmvsnr|}zsv|{ngikgf``cjmYPJRQPOKJDMWV[USSOQ]XT[ZZc^TQQY_VQKW_QUWZVW^`b]_iomg_e`Xdc_Z`_`_ZZ[Y`miggacwsle^dc_dkmg^Z]_YVTSeZ_jXZ_^VW_WZMKVHHGLP:7ILDNWYa[Yb`_^`ac\\[]``]_Y][YYYYZ\\ZZ[\\UUVU__^^_a_]ZVVWXSNW^XUUWVTXYXXY\\_]]`cgimlhk~|ȯøºʾı¾˽ǿ½}ʲ¨wkp}yʣuҴ̴̢κƾѪ·ǬƟz|edzmUR[Kxrewj]KUu`\\snjuhGMjzn]\\YZq|]hrkreXXYivvn\\kwvp^IXMdnX[mfwiqSMOsarm{^ubQb\\rz_Tk[O^oz}whyOD]qa~XAA_sv?GbbJPv|dby_l{]DyoGYZaPXmvpyiXD;@GEZiF4SjLE_`Tdlqkp{nWPL@@Vgjpoh[?6E9.,*190+-450-,**)()((*)-.($),-8<-#*4510/,(&'&&%%%#$&'&()+0+'(((,0,.64.**01,'''(*)'((()(&(**)&('&\"\" \u001e!#$%('%)/54..0(,412;E=5K@5236AL880.6?C824>LC-(02EA>0/;>;9/04AD7JJ+-.(.,-.2>/$8?4)+..-(4@A8.:;8=9@:3JH6:H?5:981*0;821.-1.27:=ALV<1HHFK<2MGRV[?V\\bZYsmWOdlEH[[THlgXTZWHHab=@PhO?C>NjOHWSC==OVLX[PILH<<@J>=>@A@>==>=<;:::=?ACDC>BGBCGDFMH97EQULEOZYW]bilcWT\\ZSKMQSQYhi_`hfgnmijnomZNM\\rZCGA8669A?9A>?>?::=:57;CD<=EKLA5:GD=>??=;<>=DB>@BELMHJKIFAAH=36>7-399326:=@D>/'+3/(-8CB:=>Cs|hokWbj]YXZdighhinrtmd_hncZ\\be[SW]VLFGNGKZekMUNJNQmpdlqkb^W`z{hOUqsT;N_U_mqldM/,??2/0388:@=6347?H>48=@GUfjJ/.20<B68<HG4111.BE'-6AIGKMLA8-)./37,.*,.11BWF8=@=<E?39LI3<7-4I@+,8BA3/CVUVTQSW_\\SRV`Z72@?;;@FB=8VX@B=:8?EA<::;:44989<:;:86303:4+-/002468511110/15970.15513875897678=HTU@/1235578888888888677779>ADDEHC89DLNQUZ[OCCKPOMMORUTTVVXZ[[]^\\XY]_bgklnnkkmoonw]75756656665666665555555566566666776668967e~}ywxxwuwyyxxxy{||zxussttwxyzzz|}zutrsv{|{}}z|}yz}~{yxwusssrpnlii?>?A@>>@@@AABDDEEBAEHIKMORRPOQVVWWUTYWH;9<:::9::::999999998789;<;9>BGHBA?EILQKKNGA<DJ>H`dTY`E8?KLGFDEJQG?BACCDD@HXWLBCFHJFM_\\MIIGCGNNORTUSPSOO\\a\\]hh`VLOOYbfldXOME@BLTNLKIGHOROHEGLHIIKNPTPJBDKOU\\YX\\YNHAHQOLLRXVOM\\^\\_aefjjda``_[Zgupg`^cg`dwtrqn_gkghd\\l~lUNUTHQdaU`z}x}oylehifc`gkemmtvmpuunpwtjiiiopkbVNNRRRRSSKLZVVWSYYVY`]b`^b[TVWZb_WIUaS[YY[X^cfdhknje[]_T`\\ZVVY`aU]caekhhhdbqole^b_]_gjbZQYYQLRQ_Sc\\P^\\\\QQYU_OIUUJDEE6@MKJRX]e]Z`\\Z[`]c[X[`^Z_U[Z\\\\^UQWVX[[QPUV^_``_a_^^XXXWUTX^WUVXWRSZ]UTZ_``bdgimlhiϩȽſù̻ùϿǵĹuαkjf}Ҿ³ΞتӽȭӹΡçzwz}Zhvq{]KS^\\q~l]tW>hvkbZT`|taN_|ea__]_pvQrq`hbUQTs{hpd`vjqWINGgcMh`fx\\\\|uVOtZkux\\hWQZYereXqQL^lpyz}pSI^wZtT?A[uiLTfYCDoTcik}_JrcA^SWI]`otw]@:9BFOaI0DZPLYYKXqulnxlTPPHBEEX^NQ^P>KJ?8*&282,122.%\"##$&&&')*+))*'%*8?1%'.32/,*()'&%%&%&'''((,1+'(((,,.363.++1.*((()**())**('++++***'$$!\"$%&%&$%*.21,++&*227=:24NI:39?EI+%1/5:<02//<-\"29+674'&44.22016A7@I1/2*.-2/,;.&9>3,,,,,0>=<6079;7<F8BO=6EF829:6(,;A91/)25-1:=?EOQ68SFHE3;JEPWV?WYbW]plTMsd<NZWWOpeWTTMF\\hO2M]eG;A@]gRV\\NA<>QUUTVLQWK=AERHB?@B@<<==;:9987=?@AAB@CBADDCHE98DPNIAHUXQU\\afaWV]YNGKPPPZggaaa]]cd`dklmi\\TOQZPEIHC?=>A?=CC?@A;9::9:8?DEDFFE?>CID>===;:;=>@A@?@EMKGIIEFDHK909B:/3::;;:89@ID2&,>:-0=FHEE?Etmae_[nlUPQQRSZdd_irsnSUnp_W[ad[RVXSNKICBNSLW_PWQHIG]y~ztsi^_W^oo`9Hnxa@:YZU]aekV1-@A3/29<:?GB7574=QR9/2.4JdP.#1>=EB;><DH6-225IS8&/;28SdfYK?1/6@@1.(-8:3?HC>8;>8@J9)+.31,+:G7*.<F@..FSZWUVXWUORT\\_F.1EJ=:?A960HyU:>>==FLG=99:;99858<8<<;:99972()/1,,1793,-..0348=;5/.670.5@ED:2577;EH=30113568998888877775667<@CCEGHC89CIMRUVULDDHLLLNQSTSSVWWY[\\^a`^\\ZZ^flmllkkmopou|n=486556666666666555555566666666677667;61Q}{}}|xwxwxyz{{zzzz{{{{xwwywtxzzz{}~~{z{~~|ysrw||z{|zwv}~~{ywsssrqomjjji@@ACB@>?@BCCCFGGGDCEHIJKNTUQNQVVVWUUXVH;9<;::99:::9899999988777858BB@D@==HSRTRPK@8<KVPVgcNOR:7P[MAEEBDWUJG@A>?AA@=BA@@=CLNTYJCDEEDGLMQTTUXYXQMRYTR]^fnjkZ\\haYSQMKHJMONLIGGFIPSPJIKKGHTYOQVRMFGS^[TW]ZTSMGKNLMJHQRMIPVX]copkjjh]XVVU^qsfcimf^`egijjdR^pkdpqv}`NQQIISWKciWYlfb[W]b`_cdlyuvvfmrojisumknpv}|lVQPQRQOOPMMK^[OVQW[ZX[\\cb]^TRX[[^^]KRdSZWY^X\\`ddghifd[Y]S[VZVRZdbWbgcegcfkcbmnlbY`b^[aa\\WLUQMIPQWQePO`ZYOMRQ_OGNZKB@@9HMILTXae\\WZXVX`YdZTY`[W_TXX\\afZPTTU[YQTWW]_ca_a__b[YZUWXY]VVWYZWX\\aXSYaehhiihnkfh˽Żÿξҫ°ѫ±wdkqČŝθٸºʸŬϹӮũlrk|\\vlrySPOahk\\`oM[sVMonUur_czUVegf\\dvoeWsh`omTC\\xhlp`mo_wVLGPhRPrsRl{hZmXiQwQhxtV^WKSTZogYnJPWrp~kf`VczRpP<B[u_Y\\fRE=myOf|`cPwhTGRHNPSVoodB?<??>ZN5=[PGVYUR]fjr{hSQRME=34519NP:6IKD3(+7:,'-1,'$#!\"\"%%%(((,-++&#$2;4)%+0/--.,'%$&')()()(&.3*'('(**.551.,-/,*)))*++)**,,)).-,-.-,(%$\"\"&((&%%&,,-+*()&)248=./3KG;5DCHY;278732//..-%&5E:'</\"\")$%0+#.+771I419,//91(7.)9;21,*,1CC:?5048=7DF=MF69F<1289-)8DD5-'(:2,29=?HNJ2LUGH=2DGFKZMDVWaT`ijPQT9SUWYWp`TSKANj_@=Ya_AEELj__]YLD9AUVYJOL[YG>GK^RCAD>@9;C?988889<>>>?@CCACCBDC:9DOL@;?NTPOW[][VY]]RMKIHISafa`b_[\\YTY`cjpk^UPMPQNMKIGFFFFDJMHBE=99:<95:CEGHB>?BEHDCFC@<7:?ECIPMFGKKLLFCEKNB53>A:1386;=;759@@2(3BA?ADGGFJBFh[QQU^kcTRRQPT]bZZeZ[o\\TkhWTZ^bZQ\\jfVMPUPUYOEPYVPOMNZkpx|wh[`^_`h\\,:YkRC9GPNMHKcY1.HI5/6?ABCEB86:9>QUE<3)AL=,+4BNKFBHUKDGG=9FRPe`,(20B_bRA5DI:<E>20(+=E9AQQM93;68CD6+(/)-19@1(,9?6*0>CQVUUMGBNWT[gH,)2CD;7423.@fH4::=BFLH;555648837;7=@A@@B@9734=C;/07;4/...0249>>93010($0CMK=7766563-.1013679::8888777775667<BCCDIIB;;@HORPQNJDCJLJMSVURRTVWWY[\\^acb^XY^ekmmmmmnprqu~|H356665666666666554555566666666777758<0Btz{zzyxxxw{~{z}}|{|~|xxzsu{|{}}|yyxwx|}|~|{||~~|{zysrsrommkijjiBBABDB>=ADCCDGKKJGDEHIJLOVXSOPTVWWUUWWJ:9::::99::9998899999777648CPMDILC<@FNZULEFFFU^]][YL>DD=MYXNE@=?PUQOE>9?DB?>GW[C:FIJMI>@JCAIHJNQPNNRX][[^XPQTZhmngTU_UIGIJMROJMIKNMMOORTRMMNJFKacOPYOFGHN[^VVXMMaj\\OLOXWLHKHACKU_fgll^[b\\QV^\\]hkiikrk`bimqrpnxxg^gtqcSPUSV`Y]mn}mSdccca]XX]ZVaqpdepiaqvjksxwjinusloVSRVYUEFIEJP\\[VWQTWYYWW^]XYQSXZZZYZQN`SSUWYRYY]`bbb``^Z[VZTc`Vaid^ji^de`foddpsg[T]ec\\YWWSHQONMNPQT\\NP\\WUTRQPUPDIXJDHG?EJFLTX_c\\WXWVYb[eYT]b\\Z]VTTZ`ebX[ZW^\\V[]X\\]_^_a][f^bbY]^\\aYZ\\```cdd\\X[chlmnkjpompƨyŻ¿Ыÿ|ği}y͔ʶĿƶӢźʫʮӺ·ĭhrb~cyrd{wZOX]^qznTglfqBJrb[tqbej|RMbmpp`\\kofg_`]qvM?mmfgfze\\|qWKETYHTfxpZl{UZxQ]uZywQkymSa]FMMRvjZbFQV~r}vtih_cxQvM9B^nYd`jLN@ouMjln_Sh`IKBGROFYs_P9P<@>GZEEU^a\\WY^[`goyu`TQOLIFA60//>D6->SKA0)2<5+**))'%\"  ##$&'&&./.*%!#/85+',//.0.(&%'),,*)*)(15,**(**+/4530./,*-,,+,++))*,,,,--220/-)&%$#)*)&&)(,-*(((+),1448-57>>4<PAL`H>33..31352)&,9JM-47(\"&#$+#\u001f629<-K>/9.5/:3*2/+:=01-+0;M=8A1.4<A<F;5H=2;>2.393*39BF0,\"0?-/56;DKKB5[QKF:9GHEGYHJNXaUcbgKYF9WS^[^n]KPC<\\iX9R[cUASD\\i_c[TP<5HVZPFHR[R>=HRaOCI@7D7AJC<<::;:<AA=>BEFFEBDB<>GLH>69DMMLSUTTW_cbXNGDDGPWYYZ\\^a\\TSY^ahusi_YTMOMOOMLKLNQMKMSMHEC??<;:;=@=CKFADEHJFJWQFA<>JOGLYWLKMTb[HFMSJ737?:711614666434755DGCHJIIIGI?@SE?DNR[\\\\[WSNQZYTXP1<hqcaYLS[]aWSel[PQYZS[e\\NJNQONKITd^anp]MS[bdpZ-3<N=BCDJJLBB]]6/MI407<@CCA?9367<NPII84ZS'/EMORK=3?^\\PORH:Mh[gU).2C]XQTDDI8BD;:5+/6:5@MQ[N605==A<11-*0/:A3)-02024,-AWVK7-=S\\TMba?3'7A94022/7I;3457?DF?524:936;;;::?==?=<:9:@AADG?227631/...28<;763,'(0:DJHA=<9:;><;50123668998888877776568:>AAEJIA<?ELPNMPNGACJLILQWVQRTUWYY[\\^aca^]]_eimnpponprqt[4476566665666665545555566677677777583=l|zyxxxwxxy}{{{}~|spw{{|yusrruy~~}}|~}}~|{{yxvruvroqqpponoCB??EC=?DFCDEHLMLJFEHIKLOTWTQPQTXXUSWYL<6889:9;<<<;<<<;;;;::;<@GIBRUG@@BB;5@RTG<O]X]ZPMKQODLXC8LcaPLLDDFILD>:CGABGHS`NCIDFPJ>=HIDGDFMPOLNRUXY\\[OPPFGGN\\XOLNLKLIJZbNKUNKSWVTTUSOKLMMJOaaOTWFAFFEJRURI@KhsgSINXZSHED?@FPbgc`]\\^aZXY]`afje_eom_`svywrpxtythhgeheVXgji^RU`eguMamfc`^XWYXXhul]\\]X]lmhu~tf`d^gwdcg]RTVaZGJGKN[YV\\VSTUVVXXWVUWMSZWXWWUTKWRNOUSLUTW[`_^^^^ZWWVSkk\\ghbdni]de^eqfhrscYQZde\\SSUNFOQNSJOPXQSOWRTaYYXPUDOVIJOIB@CHSUUZ\\ZX\\ZS]e]h^[dda^^ZWY`ccd`a^[`a^_^VYZ[[]`XVhbhldhhehdcehgdimi`]`dhjknnkqu˶ÁľƷðһù˶²õʭsxo{u֟ѬƿҷڵʾЪ̸¸˘pwfcqexpcO_^`klmZ{olsJ;`pRUZWKNZor`WkqloVNchlo[OU{oZKh\\}Taw~U^x`UPLQJDSfs}wba{qDXxPQ}btxUtwbQedECEXf\\VIPnlwrksj\\`vY}F8AbeWj_mGbKtztLgePRYYCB:QOFBekTIAV@DW\\ZUT[wiVV]^bnxx~ubWSPNLKKGB?:679;AJJE::01;620'''&%#!\"\"\"$&'&#'/-+*(%&.340-/211/,))*+.0-,.+(2800.,-+-1253210*+110//,)*---.00.24,-2/*)'&(+)'%'((,-*'(*,-..101.:415/FS:?>A;0,(.41880+.35AV80E7#--#*'\"7:0?1HG44.>576002,:=.3/+5EE7;5-38BB@?-1C71:2+-462268G=0/&?;,326?HGF:A[SKD<>ETEE[FMGYaU_^bFay@>YQb_eiZFJ<Ej\\PB`X\\MN[Bje^XXVJ4:J[WJFHTYJ:?LZ[HIO4DF=HJFFB=@?<?GD??DGHFCDEC@HLF:57>HJINQNOT\\`fcM@<?ELLJNTYaecYV^a_cnvmhfd]RLIGJIGFHQPGIIPPJDGGHDDEFFFCEMNLMNOMINVTQMFEQSPJKPOMMZmfTTYVC16;=51//1-.023247649IOKGBDKMH@79F56AFFLSTSONOW]XVS?)+LmkbSHSZ_^TZh\\LVhh\\Ycd^YPQPPIHJS_bSJPC9>EYjeF-369;>ADGINIF`b=2N?-1526>A@>8110,@Y\\N;?L>;PYOGHE=./INLKHA:D_af}4'08KMd}vaJ:>93>?5=9.3B?B\\`A.4A@<9-0./+(@P:1/0+.99('FbW:'*BX]TGPgaE:58754430143/:86<B=503:E?<<>B?;@D@<=>=;<=DKD7;A4,/230.,,,.498751/.2:?ACD@>>>>@HQR@00235788899888777665578:=@FJG?=DNRPNPSNC@FJIIIKPRQRSUWYY[]_aa_`eeacimoqsqnqssvp<475566666666665545555555577677888846b~|{{{{{yxx|~||zxzyvtvyyurrpqx}~zuy}}~{{}}~{{z{yxwutwwuvxxwvttt@@>AFC>@FGDDFHLLLKGEFIKLNRUURNPUXXUTW[Q>678:;;>ACDCBCD@@ABBCCCGZ^HISIAA@@;8AEB=;L\\ZWLBIRRMOWYHE\\_UVZUICBCFC@>DEB@A><AEEGGEE@BBCJIIFENTOHHKO[\\QPZbXLHIJMOPMKKJIFN]]HM\\RMRUTRROLKKKMPSRXZOXVCJJFIFKPLF?C_j]TPPWe]GGH@EIJTa`[^`de_`a`\\[ehbbkld\\\\bcmrrkhd~vuc\\\\bg[YgbYWW_fgcnnaii_ab_[_fedlpkibXYaegky|qa^f^Za[eWZXXZb]T[RUR\\WU]PRTTTRWZSRTWJOYWYVUSRINMNIQMIPOQT]]__^ZSQTOXni[e^\\emg^fh`gqiinpd\\OXbb\\SSSNILQIVHQRYMVMRR_iacc[\\K[WRUMAGBCR^WSUUXX]ZO`e`jaaide`a__aikhfhe_`eggg^VY[ZZ\\_SThfkrnoolnmlkjicgnkcacefghloqv̽ƢĭåǵüɶŒìȷsqv~ˣgļڴ}۷ɶįͻѸͺ˧zzpcmX~mb[YlbgvfZdNVEF^Z\\R]NLVnyxpUpvd\\GOfhqpSJ[twqpNUZLZspJ_`\\`YLJDCQl}noZi{cH[oVPeji{Z~pTSdeG<>j]`QGYvkt\\lyjP]vdkB9@e^Uk[oLpPsitMgm?SUW>9AQCAMf`HBFb@\\ibZZ_ssVT_ejt{sdYUTQONNMKIGB>:8FQ\\V=37429/-8+)''&%%$#$$%&&''*++,+)'(-2411562/.,,-/120040)182330.+-1212353,-34210-*-12013238/(/4/,+)*.-)'&&&(--+)*,--/1110/8//5-EN1?J<680.11:B926:55:TN>@=+49()*++<(@5@I=2,@>;:4/718>,73,7D85:)2<@A=>5/BD520,,14557:E<)559F023/:EEAA9L^PEEA>KY>O^FLC\\\\UW^^Det=GXPhcgh[KA<]lUL[XUXMbSVe_RWZZ>8AN^RGGJRRA:FV]OFNG=JHIGGROFEGB=AJG@?BCC@AEFEFG@626;AGEGMJIOSX_aRA?AFONGKX_bhia\\abZZafifjng[SLHBCE@=@JH>AAKLEBEHMIJKLLMQQQSRPQSQOPPPQTNGJLTH7>LMLZkja^]T<-7<=0*01..///04;DC808FOKA@IOI86;9(/>DBEIB=DNXcbWXT75DOinf\\QU[_YR\\bXT^jlc_d_[gzwZOLJP[dqr\\E55:?QbL605@AB>?EJMUUVcfH=P7'/0+09>@=:663%2gcLKDHRY\\XJAKULBBCA>;87:YfgZ%+<<3MqrP:3+1CA7A=-3C?@UcM7:;89<3)./13BJ@721+.61%)GaL0)+;U[PIAUjMJ6046885214;?I>5674349@F@BC@A?;?FGCBDGGB>=KQB772+,/30.,,,.5::934554235:@@>?AA>BNSA00225788899888777664578:>BEEC??GRTOOTXPAAIJIJKJJNRRSUWWXZ]_bcacgga`glnrvvsswvyN56556667766666555455555665776788985V}{{||||{wwy|}}}}~~}yzzzzwuvvuuutv{|zwvx{~yy{}|yux{{zyyxxwwyyyz{zxxwut>>?CFC>?EGDDFJLLLJHGGHKLNRUVSNPVXWUTUZUE<<=@BCEHKNNJKKGGHIHIKJFSWJEJHDA=>=@B=;;CJQULB?GSPMUTKM\\_LIRRHHIEBCCAABB?><=;7>DCDA@CEAAKKPWRQTKMVU[hW@GT^^\\WWUKLUTKIHCCKNGAT^PKEBECCDEJNORSVRPWPU]SXSKKJLJFGFBM]Z\\aZjyY7G^OELKLSVX[^d]U_c[\\becbfkcXX\\VS_lonkbxq`j\\WZY\\[X^\\PNe~zniegpriceggituniklnoia`bdku{rnf`bd]WY_TX\\^^_^ch`_UZVW^PQRRSQQWQNNVSLTY[[PQOIHBOINGELJGM[_`\\[VMMSQ`i^Y\\WYcie^fkbisjknpgfRXb_ZYYUSMJLGTDUTURTNRXlgcejndScZ_^SFRLO[`WSUUWX_\\Pacbid`fbf`gihhpsijoidfklji_W][ZZ]aVXhfjqpllmkkkjjiddkjecdbcdgknu~Ƹóá͵´εϛźɻv|zq|q͑iؚ[̞{ÝĹϸϲɪҹɨĺǻ~vjmU~l`b^tejuZlNNPGSamt^RLhrtzc_u_KOdgepiNSdpxrIQdW\\obKXNozTGIBCR`mPhtoaPcaI`u[vbhLVb_G:<zw_dODgulssYv}jE[udzeF8?cUQhaj]pUfcpNj9]ZU86LF;LW^UEC_eGh_YVeoid_drwy{}vka][YWSQPPOMMHF@;<=>UjX=-/22'%21*(&&%'%#$%%%%'+*++,--+*-0123551.,*+-020//551252120,),10..0483,3420//./24423664-2841-+,.10+)(&'*-,,*,/--1756653048.;@0[T9=C;<;=JMBBF9/:;GUQ;;43@6'((\u001f7,8:8@@1+<BB?30676;+;6-38366-6=D:64.?N:44/+-6961<H; ,:;I;2911;D==:;W`F@FF>RX:XdGPF[]SS]ZEdn>PUPme[j[S:BscQTfOU[ZeVdZQL[ZT=>DW\\GHJONE<CQWUGGQGDHKKBNZMLMID>@IGA??==<@FDFFB9246<BA?DFEHKMS\\WGGFLW_VRX]]^dheb`YQYdgfghjbYSNE@>C;79@?:9;IH;=?EGDJJJINWWRRQONQRRQOMMMMJEERK83?GM]iie]WM5)3>A1)9<1872-17>GME4+0?MMGHLJ<;C:-3AFAGM=5DUae\\TYVHK_innkf[Y_`TMTUNQ]dliaa``jiNLOR`lo{xK26;7?N?.159=DMPKKPUZaigQKO9-10-29<?<=>@@/4fy]\\XWWXZVD;M]ad^[^TH?:8d8*B=8X[;3-(5F@:AC53ANPWbQ:HI96J[;*4@HF?L<3/+,/))1>A2-,.0KXOF>BO@;6836;;70?]PA@9420379=?<9>?=>=:=BHIILPOI@5>PN;1/-,040,,-/16:;72311.**/5<@A?AHDCIG6/1125689999888777663478;?BDC>;@IOQPQTVPCCHJIIJJILPQSUWWXZ]_bedeec^_ejotxyyyyww}a96767667766655554445556667777889:4Gzwy{{yxywtwwyyyz|}}|}}|yyzywwyxvuuvxxwwwvwxwtuyyx|~{xz|~~~~||~~}}}}|{}}~{wy|zyyyyz{|}}{zzyxxvts@?@BCB>=BCDFHJLKKKKJHIJJMRUVSOOTXXVSTYWLEDEHJJKKNRSMKLKKJHFGILLNMD<@HLA?E@<9=GC?ET`P@AIPPVVMDT\\HKNA=;>DCA??@ABA=<;AB?HJDC@?DD@EH@K`\\SRNW_\\dcNIMGQY[_WJHGNVMHIJIFEBFY^TLA?BCDBEJMRXXSPSTON[d^VPKJOMFGHFL^eghjtpV?@Z_RQQRRPSXZ[SPYWQZ`]\\bgh_YXX_a_bklhhi_SV[[\\_dib^f`S`{~dQ]mliifdcfv{rdkpvxrnkdbgnwuqmg``a][YYWWY[_[Xbkde[XVW]WUROXTNTPLLQUQPUYZQMMJC;EIMDAHE@GX^XSVPKOSZadVTXUW_e`]fkgltjlpqlnXWb^Y[]WWPFHIPC\\VSXRPU`pa`aioa\\^[_`^XXV[^\\WUVVVV_^Sbaehi`a_e_hhgkqplklhghhgif_[^]\\\\]aa`gffknggieefffgddghfee^_dihpͿƿѿ̸ūһˮĭƲº{oyx̔޿cչɵ̦ӮҪӽȸwqskXq_bflfs_]gXHQ@SdiriQSi{o~[rkoelXDj]^p]Ghk~iIWhaWiaOMVwDTO;DOU{tNtcfE`WJju[rjdLQ]YE9BkdbLGltgule~gCXq`q|dK5@^JPif[rj\\^glQkpCg]S6?Q9<`VdQW`tL\\hZZ_pc_npq}xspplaZ\\]\\[YVTSQQQOLKA:IF@LYW?-.,(%'02-*('&&&\"\"$&&'(+,-,-/1/-///0343.*)'(+144/,17;961//0*&(.0+'*/86,220.-0211452483.1;:42-+0132++***,----/1,24A7.=925=<15=:J<AADOCDHCGCLG.0AA@NTC;0*=A+&$#/2.>5:>/+8AAA521757,<6-/.46456<@10/4LG19;0)3><:9F?#)=8AE2@9.6;;6=2BcZ==HL=XV:_jJRIX`RP]XEbfA[RQpdUk\\]7Q{UOc^KY]ac[^QBS_UID@J_LBJLMHA?MSPLKGWHEKOGDXVIQOMFA@IIC?@=<=BFBFDDA=85=@:<CCBCHKNTSRTQZ_XPQTTUYafe`]SSfphabgefd_XJD8<845::938FA9==D@=FEDDIRTNNRPLOQPPNMLKJMKINQI:;CQ_c`]UQJ9.5DH;0FH:FC=48;;@HLH<01DRNIJHDCFCCFJHDHNFCOY]WQW[SZ`^dlnmi_]d`OHI>2Ifmpnd^ae`iyfROVYclYV]@8;<8;AD70235E\\bSKOPUdnbRLI@>8/049;?;>CFE38c{n_[OIGA727>ITcaULERWKC[\\0CGOlrJ0.++18=EGF@:AU]^aS;L^J=[f1@IFPGVL5,,,,-:G:(&),,+BTTH6.10/:NB3<?9;nP441388899:743778<<9<?CGINRQKC76=:0-..-03/++-4:9;;500-+/3469<AFDEOPHF<00112568::99887776653589<?ABB95?IMNOQTTMGGIIHFFHKMNPSUWYZ\\]_bfgea]Z^bgmtwy|}zvv}~}N679766776666775444456665777788968_|xwxvtrqoqsuutuuutvxxwtssrrrqrtsqrtuuuuuuuvvtttvvux|}{yyyxxz{{|||zyy{||~~~~|}}}{||zyxyz|~~~}ywxxyustA@ABB@>>@ABFHJLLKKLKIHHHLPTVTOOTXXWUTXXPJKKJJJKKJNPHDILJFACJLJJKHMPA;CHWM668=DFFJ[eR?FVUOTQIJ[YHYR?DE<;?AA=<??><;>FIGC@AA?@CB@AC@ESUOT`g^ZcYHHHFNMHHC@?CNQKHKOD>HLS]]VI@BFIJHGGINX]ZVUSRQT\\YRPNKKKIHHGOZckoqrk]NFGT`]WWXUTUVWUUVVWXXV_ijnmk_Ufoiqvga^[Zbmnkmjc^WU]hfWZknr|uaZ`ullgxzohhfcehlmsnkga][[YXTTTW[WSZl`faXWUYZZYUY[XTPLNLKRQUURQOLLC=;IMF?E?@BVVPOSLKST`YhVSYNV]_Z]dkiksihmlpo]V][Y\\^Y]P?FLIH^TR\\QRXeg[^]ifV`TYX^aaYV][XVWWRUX_^Vaafef^\\[^\\d`_dnjeeecfhbaeca__^^]^aedeffbkcae^`bcdecdeegec\\]badwϷζпƻ̹¬÷μͤ{ɷ·xv|twyԫՅâЧԽͤ׸ε˱ʯ̽Ű;uwjmd{_`_djkTgZKILHa`RVQG^^Yg`MldouyoXDRWbaGN{zueFZn\\PmkJDdaDkS6EL]g^|Z[y^YcNUgizhjelKFZ[F7Kyd`\\CKnxkew{is|dEWiZit^S1@V>Uj]T[c`neQp}|dPjbR8MJ/Uahf^frYImiZbf`U_qvuoec_\\ZXZ\\\\[ZYYWUTRQPMJC:F[cL=GJD;,#%+21/-,+*)*)'&((()+,-.//01/011/132-)))),2893-.49;91,,-)$$*-+&&,31-/1/,+.54113355/-16620-+2332,+-.-,-./001+7;F/&A>5>GB42@6+@E<II9?C5;@B40<GH>@GE<0&0D=.)&*4*@559.'3=BA343732.60./-22456<7,.2@H>>C>/+?I=?D?(*CB7D6:D4-876582MeJ<<IQ?_N6hlMUKYaPM\\SGbcE`RUoXWk]`=gnD_fOM]_beVSBB`^KMIAUYEKMQ=GLJMJMSOUSBIOQFO[POURPGD@IID@B?;>EF?EFGHF=8997=DC>@KKLSW``\\YODGLRVWZ]^^_[Yboi_]bcbmqd]YJ9332477987C:6=<C<>@AABDIOJIOMHJOLKMOOLJLOQPQROJIR\\ZTRQQKC?AFJC>LMDIJD@>>?AGKPOF@EOPMMLJHHNQUUOKIIMRUWNEIY[LQc]Zipmjd_^VKLE++\\|zsnfcccaWSUUW]chkZH?<;=BF?<DE@=AJNXbc[TRVgoV==AEJ=/047;<=CDA:,6_r{pRD??=;:>=9:CKQV>3Y\\NFIw|EDKLZaXF2(&(*'0@IJKKKOV\\_UBI_YHWPIXE@JbU3)***3EH<7=<83.<NXWA-+018Xb7@@?fS?;9:?@=;;854445;><;<>>AGOUUQJ>750,-.,*+/-,+.;FA;9500008?>88;>HQLNYM=2.1013677998877677554568;>@@CE96BJLLLPTRKJMJFFDCGKMMOSTV[]]\\^aef`][Y^dejqsty}|xv{}m<3757788766777665455655667778;94Hlrputtspmjjnossrqpprssqooonmnnmnrrpnppoooqqsuvusqrqrwywwwwwvvxxzzzyy{{}|}~|{|~}}{yzyvyzz}}|zyy{}~}|{{}{ywwAAABB?<=@@AEHJMMLLLKIHFHLORVTPORUWVTTXXOHIIFEHIFDKLDDJLJHCEMPKIJAO[E?FM]R539;;<=K_]F=JTQKGJJLYXUWKBEE><?@A=:=>>><HTLEA?><>ABA@>@EJPQNUc_NNYSJCAIMC=?<;BKLLIIMMDEQTX]ZPC=?DGGGGIKNS[^YTRUVNJPQNNMIHIGGIMPXemool`UWWTX[XVVTTUUVYTRSUX[^f_Yinke`gpvijodZ^gnice`RIKUYYaghp~~uaYegVfns{vb]bjjfabikoikh`]]YWXSQQSWSNSd_e_ZYTRTZc]Y]a\\VMKPFGONHMKIFIF@?IKM>?@CEWTURXOLZT][g_]XHP]^Z_dgegrgcfgoraUVUV[_Z`O;HLEOYQU`QR[`_Y\\[haSVLRWZ[^WQYWTWZ[TV[]\\\\]^b`_\\XWZX`^[_jhbacbbg`\\bacca```acdcdghagd]aa_^]_`add_edb_]bljnɼǽɮѶ{ԺϴͣĶɧùưľũ{}~uyrjyǴɟyzڛȭ׽³κǸ͵̷upx~}]ZZXabca`XN^fqi\\UR_mJIrpK[_er|}bA@xlf_DEpq_m[?\\{paTsk?Aq}UPxT5FVoigiP`l^qhZ`WT~m`[vtPAV_M<SkS[X7Rplbi{ufoydITcXahW^0?L8`aQ\\}Shgp]Ppvms][jgT=W4=fYv_\\ipN`mX[np[_uzj\\WXVTTVYZ[ZYYYZZVRPOKGF=:RfVBITSM6&(*//-,+,,*,.-++)())+-./.-///111122.+++*,1871,*,/361*))&#!$)+'$)-+-+,+*(&251-.231,,,131/-+3333-+.0/,./001308AA'(CD;DJH;8<32@?>F<444:;B<5?=EPA8>:;@3+?F62/'1-=6100*-8A@65441011)&))-023862//3BAERK8*9LD@DB.'<E<>>9@9-.56443;WX8@:LYEaH4qjPYLWdMGYMJi^JeS[hMZl\\_RvTAn[GUZ[mXOD6NlPPVFG]NZRTA=RWTJLYXS]BGSRLMUWPURVSHGAIHGAC?<?GD=FFGGEA=507ADA>ELNNQ]haUF;CRY\\WPQUX]__bfbYUW[amtlad\\IC92//46;:8>64<>E?DBCCBAELEELHAELJGKPPLGLSTQOQUVSRSQOOOOMJLKIIHFNLDEFEDAFGHNLLPROMPPOONLKOSRSTROMKOUQMF?GTUHAP\\cospmh`XMGLC2N|xjeeecb[POV]ckpnh[KE=<FF:<OZYPKXQEN^_XTVclO027=C<0-1554;HFCEFPaluc>69<@CFHC=:66EOARhffedtxMCIKW_\\SH<4,&'.<IRY]\\WQSZTDJZZQSxyQT9*FiP.6,,*1@JOX^a_XLMYRSO6/313az>;=DSFIIFDCBA>62577989;=?>89AKVYWNA:751-++-/0.+,/;DB:75..359:82228GTOMWH42/0013666888777766543568>AACIF:<HKJJLQURHHMIDEDAFKMNQTTV\\^^]]_cb]ZZ[`eeflopw}|{y{}R416888988:;:9977775466667668;65Ysklrrrrnjehjjlnmmmprromllkjjkklnppommkmmmmnppqrqrqpsusrsuvvvwvvwxxvwzz{{|}|||{{{yyy{~~|}}|z{~{urtvy}~|{{z|}~}zAAAAB=9;>?@CFJMMLLKKIHFFKORTTROOSXURTXXNCBEDCFHEDKLGHNOMLLKIDGHC>CJGLMCJJ:5:CB@7=]aB8@CIHBQUOV[^YOGEC=;>A?>EHGA=EUREC@CEAAA@@?=?GRXVU\\[QMVeeRDJOONIB=>HLECFINRTXYZXQKIF>@FFEEHNOLNTUQOOPPKHLNNOQQNJHIJJJLNRZacc^Z^]TPRSSRPQTX[YYYYY^^b^Z`^]`dgjoxybkqf`hpsnmyoOCHPX[_dgm~x][Y[_^TZimrsbbftrfccccecca\\ZXUSTRPNPQSMK^\\`[\\^XRSSY[YY^`\\REHOCCBHMNG==DDAGDKA?HKQ^Ya]b[U`RW^ead\\LM]``bccafoedebhqfYTSOU]W^Q>PPGWUT[aQT\\Z[\\[Yg\\TPFT[VVZSOUXXY^bc][]]\\\\[^\\\\ZVUZY_a]]hia_eb]c_Zabfebbbacefcdijeeb[\\`\\[ZZ]`ef_efggig}оúĿШẕѺĸӬ̺οɴžzhknhn{~~~xwtrɬɰ`tիӱβƧʖϽ˾νïwzwdh|TO_OUgcQwjVwlrnZXiqaDPnVKeimlbtnY<KsavO:`vWPgND[vp`yh~]6KkHmE4Qixh\\`Zg`\\tthdLHyn\\WsvWDRc[FZ^IYM6_ogZr{sfc~eMQ_XW\\Yk1=JCiNIkp^fkmULkahj`[mfWFX3]b\\oUWkjofVD]shdgVRSSRRRSVXXXVWY]^XSQOKJIFJ^miR?LTV>&+*+,+*****))*++)(***-.///..0002332.++,,+-31+(&&'),+'&$\"\" !#&%\"%('*&&(+)%-31+(,/-*((-1//-)/123-*.200.1223346@9',CJCDGEDCA999IGB>::6:BBIJG;>IOMF:5B@.7A76;'-284.*1-)2;>:212795($)+)+113;:94/4=BNQD..FI>C<6,6C<9@:><,(-14655EZC2B6P\\NaB6uiT\\LUfKEXGOmYNhXaaJ\\m]choFJmRJ\\S_gHE8<hXL`VCVZ\\WUM<Ib]LL]^V\\JBWULINUQRQQWTIICIIHBFA@AJD?HEEGCDE=4;C@=CKMNIQa^TH>GX^ZK@DLUXY]a`ZRNQ]hmlklmo[JKB:2267=;6<54;BFDIIJIGDFHCEJEBFKHGHJIHGMQPNKKORQNMMNNNMMNMMOMHHNKBAEEDCLLLPMMOOMNSRNMNNPSSSQSTSQQTTMJKINSRMBBTdlolie`YNBFDBY_\\nwlfghe]YXX[`jtjUOSNKE@?A;A\\ll[GNL=:BGJLMWkX534433.+.0.+9C?BViigjkT55:>AGIHD?72B]cXX^zMDIPZeknquti[A.8GSbhe`WOTSEOml__l^9++6MS?D0,*'6MZaehibJ@UZLC5-.*4lU20E}RdeFJLJHGA74<<98638?A>:79CPYWJ;8544/+08<;2-,/28:752*-69520222:CAFOQ>.0/000255777766655664359=?CDHKC:BLLJMPTVPFCHFCEDAEKMNQUVX[^^__acd]\\\\]_ccdhjqy{{{y|ykB6::=@CBA@BB>;;;:85466667668;4;drlmoprqmf```behhjmnnmmjiihhghiklkkkjijjjjjkmmllnomnqqppqqssuuuvvuuutuuuwyzzyyyywwyxwyz{{|}{{{{{{{{{zxusuvx|}}|{{|~~{A@AB?;8:=?ACFJLLLKLKIHFEIORSTSNNSWUSRVXOB@DFEGJJINNKNQPQONPKC=<>@;9?AA9@F@?>DDCA:MbZH>>IPP`[MSVQNUKJJ=9?C@>MXSGDQYMDFAHWWH=@A@DLSTNJMONJGLZZLHOQRQLEBFLLC>CHLNSVUVTIBMTMLIEFFGKIFIJHIKNOLMMLNPQSTQMKLMLNNJIMOPPRRSUOHKRSQNLQ\\a\\]\\YVZWYZTUUX\\^cdaf~upzlnpjjrvv~xwmPEKWac``duqVOY]_ZUZijrvc`ish`fjmjjd\\ZZVQOPSPNLMNPMH[Z^X]b`UURPPPQTVURMBKH@=IHOL=9>>@LDFJOUV_eakilgdfVU[]ZeaZU^`cggccimdfhcdlja\\XNQ[W\\VGWXP[U\\_\\PV^YZ[[WeXWTM\\\\V]]XW[_`^^goeZ^][Z]^^^\\XW]\\`fb^hja^ebZ_]Zaciiedccfihgikjlfa\\\\^\\\\]]]cjkbfkpmp}ʪ̹ηƿĪӰƨü̚ưǾƽǽt¹oS`~r[Zchefovzzz}{uvus^^ҽxӺȲαſʣͼ̷{|{y~[]|SI_V\\]Ykait[eVFgrbLBQXS[hq`ZdeSRL\\^`tCJusjiPNXELWaYo~H6VpR[p6B]t}l_Nle_NSsgbMCop_[vmWHPjdJi[LUBAju\\W{zx_h{hPR\\TISfv3=NXk=IohmYjdLEg|Te[e_u_`PTMoVbcOinl\\DG_cfmRPRRQQPPSUVWVUVY\\^XSSOKJHTlycWU9LSQD%$+-..+))))(%%%'))*+++,///.012234540*+++(')(%$##$$##\"\"\"   !!!\"\"\"#%&$#'*(#'0/)%&))(&&*,++)&**-/+'*.+2+0332129@7-.BKKACEGLG7<V]C?@BMB=?>GH@BD=L]TD7:<-6H;0:-(1=1)(4/*09=80,0>;60=KA:3-,6AD<2/4<FJB>4>I@=>/2:BB88@=<1$%&*5<?=HS66?3RZR`=9ygX^MSeIFWFUlWQkYe]Obo`ao[GWmMPUThT?;5TaFXbEDXZZJSAGagNG_^Z^V>VYNEJLOOROSVQIICIIIDGBDFMEAHBBFCDGEA?@<=FMNGESZQKFHRXRMGHQWTQTZ]XSPP\\ih^^cdomUKRMG@??;A91A95<GKGIJNMKHHECEHHGIIFGECCEGLLGEFFHIJKMLKJFEMPLKPLHGKIBADEDCIKLNMOPMHJQPMMORTSQQOTVTRTUQLLSSTUTTRQUZ`b]\\^cgZCCFA@4Cermklgc]\\`cfjr|pM315@VU><ADXoo^POSME>>FJHRiZCB>511,')+*(3<=FXbabc_I368<BGGGGD927H^[?<][KPW^mvzlB),;GS\\ZZYSOKITgvyunZ**/-9[Y=(-+,@U_aa[L>.$;\\O2.+((0Yn3(Ws<QYSLIE;48;978407??><;=EORA458@D9138;=8/-16::8654<D?42579=E@4AXP3.0///135556655554666445;@BCEIH<:CIIKPTWVMC@BBBCCAEKMNPTX[\\^_accega`_[^^^bgksz||zzy~mupSGFEIORPKCKOHBDD?;7566557679:6Jlhfkmoqqh_\\[\\aegfghhiihefffdbbddcbbccccbbbdfikkjijjknnnnppoqqpqssrrrpqssssuwvvwvtsttvvvwwww{}}~}}|{{{{{zxvuuvutvxy|}}|{{|~~BBBB@:79=@BDFIJJJKLKIHFCGNOQTSNNRUUSRTVQGCGIHJNMKLKKQQJNRNMIC?BDC@;888:>@GVTC<AFDDNbi]SY]^dR?GNDFTRSXF?CBBCP\\ZUWWRNRRHM`eWKIIHLUTH?>>AGF@CC@EILSRMI@BLMKHDDIJEFKKKKKS`d\\QJGDGOMFFGEBCFMSRNMNPPQSQNNMNQONRTROKHHGGGIJIMOPPKIS`f`VXY^`ZYTIPTR\\_aa`aehpywrompttur``]UV_hc[acejaUXacZ]kpnpiabilgeghgcgh[WXSLJNTOKKKKLLEUWZUZ_iYVVPLLJMKNKQNEHFIHKHOCBA?FVNIW^_]ihfmopjmnd^[[\\ecc^`_bjmedmicijgilkiicXV]][ZW[\\W^W]_VNX^YXWXWaV[]Zd]]jgcdcbaa`fpg\\`_\\\\`acd`ZX_^bhfehga^daY^^\\cdgihgfgjmkikkirmgdcdehhfejqogll{»īзŷŸ̲ɯѽſ{ie^RdO>P^MJRW`kgqx|wqrmmzxiZiͺyʯͽʹǻҺ}z~tzo\\\\z]Q[\\_Z]prcjT`daspcQO_W[bd^djhUG_cuyViaG[dYc^PLDAOWSYosf:<KUkELZeynmUWt\\ODJuafXGqob_pfcQPp^RaRHDSoQ]|}{SxykRRZKEMvt2<Udd7MecoNeXGDfiK]Talo^hWUccLdTUtl~TGR]i\\QTSPQPOPSUXY\\[XWZ[WRTQKIHVmcC;G>XOFL,\u001e-1,5*#)()**)&&''(*+++.//.124544550*&&&$#  !\"!!\"#!   !\u001f\u001f !   !#\"#$#!#&&$#+,'#\"$'&&$&&&&$\"&#''%#$%#*'*,--./>A;23BIRDEDFNI4HeP:@PUPD=44249DPE8GSKA<:.9TH435'*<8()=6'.:;2.+)37<?KELK6,/=G@30/3=A@@?>IF=;3-9B>;9:>=6$\u001e %1:>?CAI5>:2T[S_<?|f[`NUcHJWJZj[TnYe\\Oeg^_hMHZjNPT]eI>4F_IF]I7IXZKSK@WqUDWe\\daGQ^PJMJKIQRQUXNGHDJJJEGCGMOEBF@@ECBCDEC?=BIKGAGRNKKIKKJIIHHMKJLPVVW[^aebZX\\]ckaRZ_ZQONKHI?8F@7=HKHACHJJIFCBEGIJHFFGDBBCDFGDBCDEFEFIHGF?CJNGGLHFEEDBBCCCBDILKJNQMHIMNMNNOQOMKKRTQPRRMKMSTSQRTTTTUWWTVX]g[><EB@Nkumrzrebcfilqu{b9+5SgQ:99?]iZZ[__WOLJEE]jL:BE=772(((&$3N\\fnh``^^K447<DHHHHF@5%.KMB40RoUTanwyN.'(-=FFKPTWRLOTSajpwwF',///EiT*+(7P\\\\ZUJ=:9-0OQ2)+($.\\>+cT?``XIJE;2488452,0:???>;<@G<7?EGA658::<94158;;86>NWU?6:?==JOLGOa[8.0-//135555555445567546;?BBFJD8;CGHMRVWTJA>@@@AABDHKMOTZ[[\\_aceghb_]W[\\[cjnu||zwvvzwxmefkeZXXVVWWWOINQKGLMF@:55567899977Uodbfhjnlc][^abbbbbcfffedeeca^\\\\[YYYY[[[[Z[[]behheghiklkkopmnnllmlllkkmopprrqqstqooprutsssttvwxxwwx{||||{zxwussuvvxz||{{{|~CCDDA;8:>@@ADFHHIJLKJHDBELNOSTOMPTUSRRTSMHIKLKKKJIIIOWSKJHFCBCGGCA>999899?SfXFGJNJBKdj_YV[_ODOZ[`]_d`HAECAIY`^``ULNUXQQ[ab\\QMOMICBFE@@FDGNEBPNHLOPPHEJIGGHGHKGCEGGHSce\\PFDFIT^WNIEA@ADKVYOKOPPRSPNNLLPNKLSUPIGFDCCFIJMNLKIIPU[[\\[ZeheaYNOSRY^aa]dov|zwtpnqrqu}}smle`bcccaiiZ`g]]]]\\^djnaPTbfijhhfa_fh^TVQGEMTNFFGIIKCOSVVVVl]Y\\MEJJMKLDLRJAHVQQOMJOSQ\\`WSaed_idhklidmrnjedciedba_^fpfdlealjilllkomebb`Y]c_YY^WX]UNV[WVUTV_X\\cahafqkjle]^abdlf\\cb_`ddehb\\[__cjgfeda^daZ_^^eddfiijjmqolkkksrpnnpmtvsmptokjhuʠԵwŤξ˵bVNPPDq}]MF8G}VE>@K^ljlwvut~{{qgfyoĭxX{yкuү̽ϵۼƑ̾Ͽ{s~|mxk\\mvc^b_iZ\\gk[N_~dp||{jW_l^V_dDmykZXspzhbeGU\\GW`YQ@;?PP[dcxrB<DD`OArklsyi^R_fKOGDm{^ynNxpe\\fmyXRs]joX=Obq~Se{pM~ynSNVAHNh3;^dZ8L^]gM[QEEgWFURcnkkg_]cJO_K\\jhyKSWhrWSSPNPONPSTX]c_XUYXURTSMKMNPG@<<=H:9J;,74(5,\u001f####$$#\"$%&'(++,././2464111.)$\"\"!!    !! !!   \u001f\u001f\u001f\u001f\u001f  \u001f\u001f\"\"!\"\"!\"$#\"!$'%  $##$!!!\"\"! # \"!!!! \u001f!\"##$%',89;78BGQHJEEGK:OJ<@LVQ@A<78476;GN>0DTL@;24LPB8>(*4?0*FE%);:*'.,&3@F9*@=68<?A971-4:6?J?@GC>4.4:75=A>=>/\u001f #0:<=>9CB:A51XWS]?Ixe^dQ^cGOXO]iaUqYf[P_YY_aNJVfQGd[\\F8?YM>QL.>Z\\ORUBNiZFTe\\ihXM^QOQXIEGRSQVXKFFFKILGICHURIDCA?CBAABDGD@EHD=?HJEFJIJLMMHBBCBDHLOS]fhe`XTX[]aa]_gdWSRQPNPMEGB:;DGF<=AFFECABBEKKHGGGEDCBACFEEDDEC??AAAA>AFF=>EA@??A@@ABA?CGKKIMPNKLKILMKJJJJJGNOMLMNKILPPNJJKJKMMNPRSUZ^TBBPXZapvz~feknqvwvyo>3F^cI844CUWZ]^TMLIA=Jlh@/6@;276+)'&4Vruqnjebb\\L96;@FJJJIHGFAAWji@05[n]TXcuwzpN/#&*'3DFEFNX_bepxponejvw:'-4523Xc<,.1FTV`mkN;>5)4I?*)(&;pN/A@6Smo}xYHE73:73/+,.17<;99868<;@MQG409DKMIC?;958988>ILB4189:EPQQVZbmK+1..0024455443444467548<@ABFI@8=BGIMRVWRG@@@?>@AAEIKMOTXYYY\\\\_dfd][ZUVYZbjot|xqlihk{zqnmkjldaaa\\YZZXWWVTQPOMKLRURME>;;=>>==<;?Wi`]^^_`_\\XVY[[YYYZ]`aa`aa`_[YXVUUUTTSTUUWWWY\\^acbdeefhiijkjjihiihhhhhiijmomklnnlkloqqppponopqqrrruyxvxzyyyyywvwwvvxz{{|||}}BCDDC<8:>>>?BDEGHJKJJHEBCIMNRTPKMSTSRRTTOKKLKGHIHIKKMbrV@DCCDDCCBA?:7779?CEVbUC=HLC=CKMKLQPLJR\\efba^ODDGIEFT]WVVLLPPSQNQV[WMGJGABKNGBBEGNQEGSMDEEKRPNJJLHFIJJIHHIKOW^YOHBAEN\\\\WYOCFHIJNWXOJMOOPPOMKGEHIEFLNIFDBBBDGIJLNNJFKQHU\\YWV`bb_[PMRRTT_bbq~~{vtnhiouupnhglidmohgdjmglpiijhfbail\\Uahhotomgc]cb_SOQIDKTOGDEJKH?JOTSQOiY[[KDNPUTNFKPSCLZZZ[XS[bdli]\\ffd_gcghfb^grnnolhmhffc\\W`rfdg\\_miikkljlljhc`]]b^[X[UW\\WNQTTUWP[`\\_gbhckqggkcY]_aejc[a`^`dedda^]_`cfbaa`^]c`^``afeehkjjijnolklmrsrpqrqturoprnhgqyٵԻkǷ̠ĽzSMQMKB`bMBHS_iY`THQ_m~yommmurtv}}yr}|ochssOx׎zĮɶuͻÓ̝ſľϿovuip`ienrocm[XjaGV}Yb]s|`]`]VSo^:qunh{gfrqMBfPH_RVK9=AW_Z]hyT2@P\\t}M`~pehaWQ[TLeS?_mcT{jb\\i~STpk||W<Wqqtfj~dQyspUKP=IW^8<a_L7S\\SeLSN:FjJFUUq`hefgL;[VQ[ZeeH]gmURPNNONNOSVY]a]VTVVTQTUQNQRMKKF@A?98>C>?6(3+'%!      \"$%%&)+-/00./243/+**%#\" \u001f\u001f   \u001f\u001f\u001f\u001f\u001f\u001f   \u001f\u001f\u001f\u001f\u001f  \u001f\u001f!! !! !\"!  !#\" \u001f!!!!      \u001f!\u001f  !  \u001f\u001f  !! !\"$,,677@CIFIDCINGS@<BHJD=BCFOJ@::7EP63KMC:41;IFA?/,1@:'DR')87,#21'0:>8890CE?;58G30743EGBDA;8216119AC@>9+\"$+68;==:>>@A63WUS[@Mte_fTa^JRXR_geWsYdVQYRV]\\VRY_JKjS_A?QK<HR46VbRY^GKciMVZU_kcU[RMT\\WDBJQTPVUIFCFNHLHJCK\\QKGFDACB@@BEFCCDB<:?F@>EHHLLKJDB@;>BFLOT\\fd`]XSUY[]]_cgdYRLKMMKKIDB;<?AD;8=DAAA@@@BIHFEIFEEEFCFHILHFE@@?====;ABB9:B>:7;?>>>?9;FGHMLMPPOQMHJJKJGDEGBLLIHHHIJLLKGEGGBEJIHHMPQU\\PLNONOLPriTbt|o>F[]O;106KWLKJ:6978=VmYD93:6+.2-+(-Khpkc_bbdeN?CA@AFLOPONPOFMnwU:BF@-]eEgecvzZ;($%(8C@@GS]eq|}zlhp{8',2421VtD/5+1EVe|zI0.'%AV4*-8RsT1,(-bsJH;77411-+.03652124468AID=@GDCKTZTIFB7117:@I>4:8ALLNPHFQWUVC,0....02244333444432248??ACFF<9>BGJMRUVQE???==??AEHKMORUXYYYZ]aba\\YXTVXX]bflsohcbaalpfca`_cc`^\\]YUQOORUWXZ]]^_dgfd_YWUSSSRONNNQWYVUVUUUVUTUUUVVVTTUVXXXXVXWTSSQRRQPQPNNPPOQSTW\\]\\^_^\\_`^_aa_^```ceeeffeegikjikjhfhknponmkiikmmnnmqqonpsstutx{wwxyutxxxyy{}~BBCEC=8:==;:>ACDFIJJIGDBCEJNQSPLMPSSRSTRNLJIGDFHHGFFJbz_ACDEFCBBBABEA98:::=CNK@CGFA><=GMKD@CBBLRPUVJ=AHHKKCELIGKJRTONGDILHFFABCBBDJJBBDIOMGEGGEBCGKOOJP^UEIKEGJJLNPPOQQMJIJOSPOXWOORTQPVVPJJNNLKKKHC@?CB@CDDBBA?ADHJIKNNNLMSKPXPRSWYW[]RKQROT_dlmnvzvogkt|uc[Z_ijhjllkhijkuzqklnokkga^`gijlmjhef[Z^aSISJBHTPIACJLG:BKSQNM_U[ZIGRX][SLR]]NT\\`egeahejnl]afdb]c^`b`^XbmlnnnjokgidZQ^thecS^nhjjjkjgage^cb][]`WVV\\\\YMQPTUZXgdbehahekjbei]X]Z_eh_[_]]aeheb````acd_^_^\\]b```bdfhjkmkkihjnllmorttqqrqrqppqokhl՟Ƙmĵӭw}ęfLOSROEWneX@A_hwdg}wbZdt}zg`bi|{xwsy{q}|nx~OtםǳhȻУͳ̷¼ŹovpqqiarRwfj`Z_S_oZIF\\{h[b[RXdwIEruuqpWbj@]iHWWCQC6:MmiO_kgF2Fdtlxm[gpnYo^^IRU_rf@O]l]b`]txRXlwvVC\\|mnujcTvlsUIKAIba><_ZA;dXRiLKN1Pj=KXaog]ldd?DdQRNPiTVm{hSQNMNNNMPSW[]`]UTTUSPTWTQTWVQKHDCDB@>?5:8'5**(%\"\"#\"\"\"$%&''(+-/01/-.01.(#$#\"! \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  \u001f\u001f\u001f\u001f  \u001f\u001f  \u001f     \u001f\u001f\u001f\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f \u001f\u001f\u001f!\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e ! #\"*,19>AAEFJOQTN<=<9DKF?=?FC>?C95OL;;HG=768@AJ>>0.AA&<S-)602,40'-4-8==@EB>5:CG2861=G=EE965354/:A;;<@7-()0589>>;;?@B:=VTSYAQpeahVaYTTZXadlXqY_TOYLTR[\\[YZDWf\\VBSG8=P?3P\\PX_LD`l^WUSUigYTZPO\\^R@DMPTRVSGFAFOHLGFCN_PMIIGFD@>?DIGBDB>:;@A<@FFHLMKFFF?8;AELPT\\a_\\[XSSW[]_bdee_XNBCMHHHBB=<<=D:59B>>?@@>@BCADIEFEFIKJJMOLHD>FA99::9AA@;<@<637=><<;6:FEGMJKRPORMFFIJJHCBC@KJDECDGJKKGBCIF?DIHGGJNORXOUTNLFHKfreWSbuw{]HVVG?42:LYP<1*)).:D]aEFOH>71/11/-.9CC?L`c_eZ:5GJDCGMNPQPMICJhQ6331+H~2Qvks_<'+>B=>FNXhnmsrsxxust8',0211Gc>$,++9Rd^RM;++**<]H,-QR*-/WEAGD>85642.,-/45212334567/0FXXOHJVZOII>307==?:ASDLTQKHB@GN@/+..//--/1133233344422039=>@CFD9:@BGKMRUVQD>>>><=?@CIMOPPRW]_\\[]^^^\\YWSVWVX]_aeec__^\\cg^]][UZYWXXZ]\\]bcgjlkklnrtvxzzxsqqqqnkjjhdbaa_\\]_adddddcdddda\\[[[ZZXWWWYYXXWUVVTTRQTQRQNOSUUTUUTUVURRSTSTTTVXYYYYZ\\]__bddcaacdfkmlkjihggjkjjjjjkklmllnnnppppromoooprx}AABED=9999878;?@CFFGGEBABCGKOQPNLNRRQRTSPLGECCDFG?7BUbfXFEGHE><@BCFON?88:<>@=@EJLE??DGJH@>@?<AGHFGF@;=AGOPJHHGLPRURMLGBFF>@HHECBA>@DCCEIMLC?BECBCDFIKMVigPFGEEHIJKKGHQSPPOMLLKMUXSRUVSRSSPJGKMJGEEFC??A@>>@A@?AACFJJJLNQQOQTNOTSQQVWUY]SKPRPVadhddousompvzsbUU]fhghehkgee`fyyg`ilmmc\\__\\aijghhceZV\\`]KPMAGSQKDDKME8>IPNJLTPZ\\JEX[a`_OUb^SY`ejkniebjjeZ_d`_[]RZZ]UV`biqgjhnk_fd^Q[ulehQVmgjhhlfcZa^Yed\\X]aXS^`[\\OYS[[_fkfihd`feigabfZ\\^UZef][][\\`efc__a__`bb]]^\\Z]a_cacfgkmmmkihfhmlklostsqqqpppoopqmuۯ̝yuxƿƑqrv˵bNPYVOEFpVSDCZpm{}bsvgn{^[^pxzzuz|{z|è\\fήttƿʹЊǸ·qyjyjhfoXie`XNhfpT?:m^ae_ZaodENdax{k\\NmZOkTJSDCM>5AdoUXc_T>9Olp\\pdO\\fm]wmeT>V`i{qBH]{|pxce_qnV\\gup\\Kc{kmzqgTslwUJCSNhxiA>_TBUkHmfIJU;`[=S^jhoklbT_VQIAMmpRbxcSPOOMMNOQTX[]_[URSSROTWUSUWVSLJFFGIE@@.,7(9+%()&&&%&')*+****+++-//---*&\" ! \u001f \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f \u001f\u001f\u001f\u001f  \u001f\u001f  \u001f   \u001f\u001f\u001f\u001f\u001f\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f!\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e!  \u001e!\"(-5=@@CKQSSF;;99?B:9:<<=;BI<0@RG@DJ@6799=J?C6/>A,7T.)30607/(,1)7?=B98<5@F0099AF@@J27G?;236AC;8=AC5*.36:@?=:=@;@9CURSXBRhfXjT^W[]`b`\\qVpYWLMWLOGW\\[TXGbb\\EQX99JF0@SMZ_I>VoiUMORajWBIb[R_^NBHNPSPWRFF?FPHLG@CP_OOKJLOD?<>ELGCDDA==><=AABFIKIGHH>8;AELOSZZVVXYSRVY\\addcddWN=AKFFFA?<=::B93:A<>@?>==>?>BGBEGHJKIINPKJEBJC99:99A====>;628=<:99;??@HGFFKNIIHCCGEHIBBC@JIAEEDGKLKIDDIFBDHFFFILOPLJPTNLPQVQ?9ES^lpy{||cDRV^k]HOOC>6<GO^\\D.,,)5FO[WBCNOH@=;:85333785Mbb_bL,9GJJDGLMIB;4@?9]Z@:0-,NpL\"UusuA.@B<>@DRdytonnorv}}8'/4688<@4*)*)1Wtc@,&+),.8TO/5kuQ1,3^|fPEFCA?;63/--/2564565430-*-DaaM;<GNMLOQQKC@A@<E[_UHCB@ADFG6/,//00.//0011023434432557<;=BE>6:@DINQRTVRF@@BEBCCCEJORRRSZac^\\__]^\\YWUUVVU_b]]^]]YWVUZZYXVRTQMV[afosow~}xvwutuw|}{|~{utwwsorutomqtwxyzxvvvvvtppqonqqnmnppomkmppjikjecd`WVYWW[_abdea_]][[\\[[ZWUSRSRRRSUYZZZ\\]_```bbcdddcceffffghhhiijjkjihjjifihgkkkorw|~~~@@AB@<;96544458<?BDDEDBBBCEHMPQOLLPRRRTTSPOOHBCC@;9K_b]NFIGED=9=CHEGJB97::=?:<DEBA@>CGD;8AIC?BB@@>:8::8AOPJMNNQPUXOHHGEGEBDILLIELIADEECEHGDDFFECDDDFGMV]_VIEFDBEHGGHIMPNOQNJJLMPSQMNRRPONNICGIGDA@CDAAC@<;==<=CHKLLJKMNSTQTURPSRPPVVVY[SNQSU\\dacimfjmbfqskgkibYZ^bccb[^ke]]\\\\dn`Yeghfa^a_Y_gfabdc\\\\V[`fVLSJHRQLGEJLD8=GMJGHKK[`NNc_ihm\\`g]]fjjlhka\\]gf^T\\]]^^YNVVXPRZ\\cp_^]hhY`daV^xpdfUQidigggc\\V\\ZS_a]V[_YXd^\\_Wa]dcglhcjfe[becea^b\\^]OUdd[ZZZ\\_cca^b_\\]\\aa\\Z]^V_daecgikmkmmlkkihllklnqsrppqqqqqrrvȦwxxw̹יkykt~ʲXJVjaLC>s|TMEA`uluzu`{{wfffdju{|xzyvƋvNzʱeǷŗɾᢲy{zfo{khei{[j^\\TYZnc<CovYflhW_mUPGN_vg\\NSrhY^O@D>>AMC:PfVI_bWC=HOcabgNGaoldi`Z:>h_mrJUi|ftmflani[^dpwm[kxfl~lVqts~WLInUmql?=aQOqRRO<bcV]KH\\ehrysf{aloGSCBWp]\\mt|dTSRONONPQUX[[[XRPRRPOSVUQSUUTQKHHJJHHF2#3+>,!'+)(('()**,,*+++**+,00+'%$! \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001e\u001e\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f \u001f \u001e\u001d\u001e !&289;ALRI>;8793+*19=<:<CIC76@CABHF71987CFC=16>64T:*/953</*,--:@;40/=FI9*-1?LFDK?>I@:74;AB;9=GD4)0;=:CN?;=?7383>QOSZDR^_PmS]ZZ]edbZnXlXQHPPSIDQ]VNUOf[GLRS?IH>AJEVdM?OidTEGT`cT@@RvbU\\WPFNRPPPYRGD<GOEMJ?BS^POKKMRF>;@FLGCFGD@@<::9<?BEHHIHG@>>ADJMRWOKPZ[URTVX[]]^ab^U@AHDDD@><?9:B:5<A;>@<;=>>==@>AEHHIHHHLLJIGOOE=<;<?D:<>?=<;59>;988:B=<BCA?FKDCC>@C=CICEFAJIAGJGGKMOMJJMIHGGFFGHLPOCDKOMPSQVVQQRUX[]eff]ovEGOPTVLGIE;4BKMSVPA9::BLPUTJBELJFEFE??=:BHBBUY^eV7+?PGMHGIJF=506>:H^PD6588;nw*'O~}u`]fikaD85?F?@;<OMWwonsuu}:,19>@BBDFGC<:EeqC-+*++-<C/@{pZ~~T.+/8W`==@9>F@8421//28><::852.*&'A_V;/:DEACOVYWJ?@@?EUcWLKE>CE;8//..020-./000/0355355469:9:9<DD;<CFJORUTRTUPHFGMRTQORUVVXY[]bc_\\^_^]ZVZZYXXWac\\[[YUSSRPYXTQQKNUZovqtxxw{yz{yvwyz}~~zxzzvv|~ywz|}||{zyyxyyyz|}||}|}}{{y}|}~~}~{rnifksxyyzzyvvtqorsqomjhgheca`_][YXXWYZYWWVVZZZZ[[[[^_abdfhighihfff``]`aciijmmosuvxywvz|}}{z===?>><94123225:>ACCDDCCCBCHKPQNKKORSSTTRT`pbE?=9;?OWTSJFHC?@A??BC@>>><978:<?@>:9<=>B@98<EKHC@==<=?<7:;?HJGJOPNLPRJEEDBB@BKG@TYJWVCAA@ACFEDFFFECCDFGGJOLMQNJFDDGJKJIKLLKJNMHHLMKKJHHKNLMNMH=AFDA?<?FB>A?;9::;AHLNNMJLNOSUSVUQQQQONWUUYZTSZ]XX\\]`kn^UUPZmtbU[aa```___^YW`b\\]^^XXZ_hfbdgegd_dhdXVacV]ZY`gaNUWKQRNIFGLC8:EIEDCGI[eX]qfqn{ollggmkhfghYX_hdXP_Z[ZaWLTSPKQUX_k]TQ]aV_fjabwoedXL`_ihgbaVOXWOY[]VU[U^dY^_`dcdeke\\`e^eY^e]daY_\\ZYNUbc[Z[\\[]a`^]d]XZY__^_`_^afdgeknpmimnnnnkhkmklnorpppppqqrtsȽƾŲxpvyϖ~ȱ|xkehsŲVE_wfTL8TXKHCa|{uy|jxxywiWrpqyuxfcbˢIсʷr·ɞиٿſ¾|q|ihs|idbny`hQNOlzdp\\;G[]Slh^RjpXK8@\\j\\VLUdNTI7BA;8;[JCRRFK^^E7NHMbdcTMXpbk_P]E.Mv\\nw\\gwzc{qfakivxgbaflw|ei`ksbsi}_N[bml=<bWewCno:@blKBa`ZplpnZ|xC^XM^t\\nojwkUXUPNOPQSVXZYWTONPPMOSVUQQTWVTMKNONKJK=*-8?-\"'++,,**+)'),,,--.//-..*#\"\"\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001e\u001e\u001f\u001f\u001e\u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e\u001f\u001f\u001e\u001d\u001d\u001c\u001c\u001f%',2:FIE@;234,*1:==>=;29E@6433>CC=--747?;>917<6M<+,:31=/-,.;FC:4./>CA7/.4CEFLHFME823:DC<8=D@30:<;?EB@?@@<.4518MHS\\LPTTQrQ]ZWZeb`WmXjWKAULVFGMZJOSSbLCQLUNQIGLDLaTCLZUICJX]`U;9TmedR]UNHRUPMOYNJB8GOBNO?@U^ONLNHQG=<FHJGDIGB@B@<66;<@CEGKJGEBABDHMPLHNQTSSVUSSTUUX]efWMFDBAA@<<A89A;6?@:?A87<>=::=;?DIIGEFGJIHHITNIJFCDIG>AAE;=A8;?999:;A<=CA?=AGA@@9<A;?EBGHBKICJNJGIKOMNRSNOJHGGGGKPNECHLMNNOQV[\\XURRUXWVNUnqWTWXVURMNMCAIKHFINHCGHHIKPRNEEJHGIKIDDDCHNNDBRe`@*+<VLJOKC@@>=:06EAKSQEBC3AH\u001f2InZ,*9>84>7AJBA<EY<,\\yvyzv{?37<?ELPQPQVVLKSYjmN4,++++*2-9`QOY0.312EshH9:;504<:75331029AC?;751-*()9MH87CE:4;JU[`O=;;BGMSMKNOJJ>-.-///020--/10-,.4776668:::<==BLJAGPNMOQUSMQ\\_WSPW\\YXY[\\\\\\]^___`^\\^_^\\YZ]^]]\\]cg`[ZZUPQQPXSIMO\\inx~xuvwz~~ywtuy{~}|~|yyyxz~~|zy|}~~}}{xvvvwyzz||z}~|~~|zz~}voqy}}}}||{xwuustvwwwx{|}~}vrmgdb`_]YWUVWVVUSRRTVXYYZ]`cffdcb`^^`bdefhiijlllllmnnoqtspo;;:<>=9620220157:<>ABDDDCAAEILMLJKNOQUTRQVaw}]B>=@LQOOLDAB@<=BADF=<?<;@>888;@?::@?<>>:9:?GKKHB?><=EE:9>@DEEILLKIGECBA@AA<<ON3FaUSTHECCCDHFBBAABBBCEHGGHFFKNMKHEGIJJHIKKJJJIFHJKKIHJKJKMNPPJBBCC?<8;GC<@?;8:<@HIKJJJJKMLQVRTSPQROMNXTRVVQS[\\RNVZ]adXOSV[di[NV`_acb]ZZYWTVZ\\`^]\\SY_ec_fojhg`afcVSdfYVb`bbbRRbWQXRKGELC9;EHCCENTdodl}kto{trpkljdfgh^_ii`TPcZXR\\RHTVLIWV[^i`PMY_]fmpjctoihYNWWehi_^SKTRMWW]XRZP^dXb]iec^gjZU^dWbY[cYacV[YVZVX^a^^^^^_`^_`e^]_]cccdfffgijiknpplgjmnppnlkliilmonmnnoqqp~ӻƺmnxyʸ}~cfftæZBXVPSIaQNMZq_r}phw|nv_nn|l]{kʼXs̜eΫֻғøâġ}vvizmbmu_`i{xchJBMoqnq\\?=K\\alVV]jqQ77?DacbJKUJK?JUHE:KdL@ECCOUC5IUC[mkX`\\b^UuOFS7>`o\\c{zoo}aprhZlv{uklggelfb^h{twflOg~nk>;_iqhOhP3`co;MtV]mj~oSmGolOghyhcxpW[SONOPQSVVXVRNJKNQONQUTSUVVSQOQUUUQKIC40B5##''*-----++*+../0222.'%&# \u001f\u001d\u001e\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e\u001e\u001e\u001f\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001f\u001e\u001d\u001d\u001d\u001c\u001e\u001e\u001f\u001e!-9==@;2-.146:=967?@2'0<=5..:??B8,///0069139;:1-02<24+0.8JIA<507<4A4*4CD>CGCCC8818>D>:=@>6=KC:>A?AED?6/19578HGV\\MGJNTsQ[YZWc^`UiZeOI@VN[AHPS?SP[\\CRLQ[TOYEHH[YGELKHHLTVXS<8TYmeXV\\TOIVUOJOXJJA8ELAMR>>U]OMMMEOH=>KMJHFJFABDEB;;;:>ACDGLPLHFDDHFCDHMOMMUZXTSSTUX_jia]PJFFFI@?E:;C>:=><>;6;ACA==@AGILJHGIGGFEEFNGQUNMLLJHMJOABB6<A:;<>?A:>FA=;>C>>>58<:=A=AC@HECJKE?BEJJLQRNPNMMMKLNPOLIIJNOONPQSTQOMLMNLLKS\\YYWUTSQNMPQMMNJGCDECDFFEFJONJFIJFFJJFCEGHINPC?W_H,&*3JTHRUG;<>?5-)9I@ITI?B5Q2%5HeG6HFHKJCCB@DAIQA7NxttrziA5?@@CS\\NN\\fibPRH7=94.,/1.,330Dl}q?16346Dr[96<A=:<>=;7631/-.6@@<868844653>FEA@>53:FOV]TF><EHHGEADKJB4,/.41//01./2452/479;;:<>ACDEIMRVVTTTROPSXUOU_c[VQXZTWWWZ\\[ZYYYYZ\\_`^^^^cc`beeceje][^VPVVQSQP_pvvvzywvtw{||zvvtux|~~wx{}~~}{yzzzyzzxyyx|{{~}zz}~yvvxvomtzxxz||||xrqrropuvvvvvxz{||}}yvqllmmlkhgecbb`_\\YWYZZYVTTUXZZZXWWX[^bccbcefhiihhghjjkmonki;;;;;96310000123579=>@DDCA?@FHHJJJJLPSTSPRYjvNDDHGFRLC@?BCEHD=JQF?EMA@@=:58==9<EGE;6BF9:ELNMD=>A>BGA<;?@@CHFDFD@CEA?AB@;>OP9:SVKHILIFEEFEBA??@@@ACGKHEEEFILMJGFGGFFHIIIIIGGIKKKKHJNJLOOQOHIHEE?;8;FD>?=55>CGJIIGFGHILKPVRRRPORRONVQNVWPNTSIKWYUVVRPTZ\\\\[TNT`dddc\\WUVVTUZ]bc\\ZXZ]_][kteagbX\\`[WbgbU`ig`^UPggRXRNICID@BKIDGR^altnugrkwtutnfjkilllilvn`SO`WTIUKAT_PKa_celbSS_elssroelppq^TRT`hk`\\UPRPOVV`\\U^Vbh\\c[mfa_ghWP[jX^YY_[_aVXWR]^\\[_``___ad\\]bgdddbdefghhhikklmnookgjklnnlkihgfjmmkjlooonj˷ĴrjtrwƒjppbǵƬyVG[obZ_|nVMUgXjtttottfoquqyĬjh|dͿѿڝƪÜzuoyazp`hi`gs{td}jF;Msx{otkA9[yp^NUXcpG8AAIprlDBWGMUliPXOZ`K=CDDI?3KYFNnnexa\\NorDIHBY\\b]XpysmyVeriav{|rrvohZdbabdt~ds[rwm<=`ujXTS>9|qpfAa~\\vahwXHWoVnr`m|}s[XPNOPRSTTTUSOKIJNPNLOSRSWVTRORWWYYVPIG;-9%!$&$&))+-//0/-...012/*# !! \u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001f\u001e\u001e\u001d\u001d\u001c\u001e\u001e \u001f\u001f%-1141/.-0662010-5BG6*4B@53:DD>;8/**,./21.2=1*363C4/,41?L@7:31:@=A21AC<9=<89?625>GB<:;<>BJC:?@;=BB=401=;997DRZYJGFJbqNWY`Wa]^Ue^`HGDRS^BKWH;ZN^SLPLU^LSQJJSZK?>???AEIQK4<V_YffZ^XTPKWUQGLVLFB=EJBMR>?U]OMLMDOH<>LOKIFKFDDGHGCB>;>BCDFPTPMH?@D?=DEEFKS[\\XUTUWZ]behid\\WLLNMBBG;:@>?B?=<;?FIIHGJHHQSOKHHJIEHG@EDBSUOLKKMNQNQGHC<EF@@@ACD:=G@9:<?<?=6898;@:;<;BA=@@>9;@CGFHHIKLMMMOOOPONLKJOSONMLMPONLIHEFFGRVSTUUTTSNILNJKJHGFD@?@@ABDKMIEFLLHIKHC@ADGJJNLLQD2+)129LEM[QB@?;('%(<>9<@@:2Sk,.5=Pqb586:GI>;55<>DJMPVvyrmkmm`XA6?FILRT<:YlWMAAJD=..75664BE@88ln>4NeYMWi[D?@=>AFJH>;64210..6?=:<@EIFHK@4:CFB:;>@CFKPVSTMELMNOICA?<:42412/049;58AIKFAACCCFHJKOWZWW\\_]]`^XUSRTVWUW[]VKHTXPSRQTWTRRPQTY]ab`^^affabhhecijaY^YSWURZjw~wtwwvxxww{{xvwyyz}~yy}~~}xx{{{zzzxwxz}}|yy|~zwwvrorwwuuwyzz{zwwxwvwz~ymimqtvx{{{yuttuwwxxwwtrqppnjilllmjfc__]\\[XVVUUWYZZ[]^`bcddgijlklnpmkj<;;;9764100/000014679=ADFC?@DEFIIIGGKQUTKFM_wtRGEDJQ_L;?AEGJOPLQWTHK]R98A@849<;;=EF9:UU;9BGLKB;?E@:=?=;>?=CGB?CC@DIFDGB8?NKEDEHHFDFHEEEDDC?>>>>==>AFIHDBABFIIIHFFFFHHHHHIIIIJKJJJIJKJMNMMIGJJHGD?>AED@A=49DIIIHGEDFFHMNOUPNQRQSSRQOJMTSNJMLDIYYNPQPRUZUTWWVV[ef`]^^WSUUW]`c_YZXVX]XVmqZYokRP[_]]ef]^mmcZVNfd[ZUTNEHGKLOHPY^jnqtrwajfkgmsk`hopqpnpt}pcYQYQOGQKBSgZRfhinwi[[imsvsrmednqsf\\TT^hmca[ZXXSZ\\faZddhmbcWgcc_bi\\I[k\\ZVY]^a^U[WTab\\]]__^]^agbaehkkfddegffeedhhiiikljillmonkhghijlnnnnoqsroyȺzptlq̰scv{a̴[Lc}uvc}^ID]jTyomt{rp|yvŬ{ijʽφӭʲtxvmqZyq^c}jlkqppfdE<L{~vtqlB;skXSLG`cE>NNhun_@MURefm^iUXVHMRGC@9N`JGZymrr``dzXAKI\\dRb`[svpjrH]nks}|zmtwtgTe`ap`hgwpzpACh|YK[O8L{_qfTjz_TaZqo8r~jkjffyuo|{_TOOQRUVVURQONMKJJKKLNTUTWZWUTUUVYYXTLI@+-\"(''&%&&(+./110...../)#!! \u001f\u001f\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001c\u001d\u001d\u001f\u001f\u001f\u001f\"$')-20-020*)..+-3ELFBBA@;;CHB7796,+1/0/(+:2-A;@<32055>@73?52=LI96E@46:::98199FDC@:66<A@;4>D<=D<.5;@EJ;>55F`[SPQBLphOR[kU\\]cVaf\\A?ITYSILR:@]KYGYDP_NISCNNUM<887;AFNWWIGX^U^^ZaUQQQNSSXEGVPACDCJCJP?AU[PMKMDOF;@OQLJGKFEINMHGHC<?BBALPPQMB:>A@CDA?BMRVWURQTWXXZ\\_dfcXHOSLFFG>=@=?FC>=@GLOMJOSLMX[RGHJKICGG=C<AOOLJFDLMNLLILHIPLGFEFGH?@F@8:<=<>;67757@:885=?88:857<?A@@BDEHJGLPOOONNNMKNPNLKJKOMJIGECDDCKOPONQQVYVNOLIJGGJGEBBCAABFLLHGLOMNNMJC@@@BEBJONF8685=<;A?ERPDAB9)--&4:67BI>9LZ?/2/,2YIca4%(,??56546@KQWYS]ijiihiaS[H>BKXYUSJ=IeW=15HMA04EEB>DZYPB4[}d<1PnQMFCD>;=CJPKA?<;;;978<ACEGLTXUQOE?ACFHEEKPRSUXZY[VRUX\\[YYSD:CGFE@837>JOGIV_b[UUWURTWZ\\]`cebbdd_^aa[WZWOQVTQTTGCRWNPQRRPPRPMLO[`aba\\Z]_^[]egaZag^T]]TSUf||sty{~|{|}wsuz}}~~}y{}|{|}|yzzxy{zxz|}~{yz|~~}zzzyvy}}{yxxvvwwz~~|||zzrkr{}zxxvtuyz{|}zurpnlkhfb_]\\[XXXZZ[[[\\_aeghikmligg<;;:9974100/..-.02468;?CFFDCCCEGGGEEFIPUI?@I]cQD?GOXhT;?DDB@BOYSRSJKZV96?AD95=?::?@=HaY?;?@CC??FKB45:;<?@@ENI?DHB?DGHJA8HZL=CJJFCEIECGCABB><<>><<>BEFFCAABFHHIIHGGHIJJKJJLMMMMLJIIIHILLMJBEIGFDDDEDCDEGDBHMNKHFDBDEDFNPOTOLRPPSSRPLEHMNOIHKFIZ[NOORTW^TR]a^]]`_[[^bZRSQV\\]^YW[TRUZSSkiM[yt[QZa`[ce`_kuhYVLf^f``]YTQIRUTNdobkxuqqs]c]bahqj\\fspomhnr|mfe\\[SUPVVT^oh_jikq{nbammnmmmd`\\fnljaSUbjofhbbcb_egid_hnllhf[hff[^icO_h_\\X[`ge_\\]_^aa]^]`aa`aeinhfinnfcfghga^]\\^__bdgnpoonuurnkmnprtsqrttrsy̼úxpmʴ{]auwþkfuwz}urFGnxfyzy~~lkr~vtzstxƾĪs|~jǺ֠ϴʵsxvkg\\}u]`{rtjmikg]J=MzuxhlF<~d_WIG_TQEUfdX^D:LS`cggl]LQITaP<CIMgRAQ\\{odaddjs`<>WWfd\\qbfy{tlpBXjj}zthnoxjT_}aa}\\as||wQMjwQGhX=_m^ii[o|cIRTP9Mkf_ichrio^PPQSTXZYUPLKNPMIFINQPTZ]ei`YYXTUWVTQLIB0*%**++**((),.//0211-)(&\u001f\u001e \u001f\u001f\u001d\u001e\u001c\u001c\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001c\u001d\u001d\u001c\u001c\u001d\u001d\u001e #&-2-,0.+'(,..**4BJLC89=7:EE@03A7(0744-(398FBI.8:-66530<F:6CJ87@=<>67@<4,5NMMD67226@?9<JD;CD5,6HLNQI;D16RkWPY[<SwfOL_qSX]fX]l[@6MSYNNNE8MYSGEVK\\SAOPJJOP;1449IV\\\\WOQ\\XPSSS]SPMVMIMO]FGUS@EG?HEHN@DSZMIJKCND<CUOLJIKDENSQGHHDACA<GMJJNH?;<@AB?=@CIJJMMMNONLLORV]edZNRVOJGLCBG?=FEABFHKNKIRSJNWWNEILLFBBB@:<BLGMJD@KIMMNMNMRTLKKHHLKHJJG?>??;<<98815?:8918>6364248=><:?@BFFDLNKJJJJKLJKLLKKJGGFEDCA??ABEFKLIHHQUTSOKMOGJLGIGGHEFFHJIGJPPMNLLKDB@?>==DIKFBFFDJJHHJGJMGEGA;A@;@>CJQSQJNLCE=41+Aqq3(DE/-;FG?DEEJQTZ]\\XW[abcdb[YaVNSZ\\]][[USbcK<DOMFCBLQVMK[Z^L9Kss_E79oLDEGEACGJOOKHKMNMIEAEMORUXZ\\`]XURQQMMSUXZ\\]^_`ba]XZ\\``^aghYNSXVTTOJKOUYXY]`a^^bec^[]`dc^^de_ada_djeaebVRTSOQWLLUTLRSRROOSPLJLZ`^_^XVVUUSU]d[PZ_SNZZPZrzusx{}~|~ytpqu|~{~}||}~~}{{{|~~~|||zyz{zy~}|zxussv{~{}|xw|}{yxwx{||}~|wsrtyzxtomnnjedeeeb_]]]]^_^^acb```<<<:9853000.--,-02468<@CFGGEBACEDFHEBBKVG557DSO36KJ]iN:@DCB><AJIEFFHLL>;>ANG8;A<9>BDMZRA??>@?@GONA668:<=BGCPSBELF>>DGGDDLRJBBFIECEIHEGFBBCA>=>@>=@FFEEDABEGIJKKJJIIJLLNOONNPPOKJKKJHIJJLJACGDCBDDEC@DKKKPOMNJECBABBBCILNSLNSNORTSQNHFIQUKFOHH^]MOOVXY_WX`b][a_ZYYVSVUPNTXW[ZVXRPWZPSl^E`xsi`_`bX[e^^izn[ULf^knmhec[M]fe`sflzunmo}[_T[_iigZcnkkhcikvlirkd`jfdijlrrgjjhoyjcbfefdbd]XS_oijcLYflolljjkigklidckonkkibkkg]`jf`gkeaa`hoifd`gfcaababeeeefgpihhmlebilnlcZYZY[]chjuysts}zxusutvzzxvwyytsѶv}į``gz±pqzwnYfpx}tuwxq}phvwo{n{wxrzwȷԭw}wke^|[]yyxmjcef}yZL;S~puxdtKDbfYNS_LXIKsZJQ<:LSOYjhdgGGEOk[<.Ma]YHIYbtcVOddlpeEUi[fqqxYoxzn|i?Vhc{}wqedfzsQVzdiwWbz~cV`r[Ht\\Acbeh[cvm>@YL]l7hh[W_fZZiht}x|WOPRSUY[XSOLKNPOKJOUWUXbink`ZWWSTUSONMKE8)&,*+-,-+*+-/112231,$\"\"\u001f\u001d\u001e\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001b\u001b\u001b\u001d\u001e\u001e\u001f\"'))+,+*''---,,.039;5.016@CC;2;H2)?87>..C@<GI,AC06.0.3JA68B=*EC;F>8<7.-:_WO:-4.,07>BEFGDB9.+@TTRKA98G6@doMQ\\a<[weOChvQU^iZ[kT<9WRVPUN:CVWICJSXW?FTOIMM?1028LYSOLGLWYSTSSXSJPJUFGLK^JKUU@FK=GHGMAETXGCII@M?7CWPKMNHAHQVPEDDFHD@BFFFHGFD?:?>;:<BECCEGHMOKFEIKMQZb`][XXYPLRKEKF@FDDIKJJLJJOLFMPMEDHQJ@A>=B7BAH@KKB>JIMOPRPOROFJIGINMNQRPIFGE?>?>?=56=?;9.3<4.11026:::<<<AFCDMJCEGFCEIIIIJIGI@??@BB@==>@DCHHGDBKOQROJKNGIKGIGEEFEDCDEDGJGILIHIEDFE@@9>BJIEEGIKNKQWPNPMLMNOSPOPKPTWWXWV\\]XSNG?<KZD7DQHDPVSNTY[\\]\\\\\\]_`ab_]^`]\\a]W\\__]\\aec`\\d^UTRTVXXTUaYPXRZTEEbndeSD<K~ZINLLQSQTVUQPT\\`]WPMQV[[\\^``ab__^^][WY^eb`_``_aa]X[[\\\\\\_dgf_XVXZZ_^^\\XVXZZ[[[_a^_`^_bdc]\\aa[_a`cikigmmf`\\ZVW]V[]UQXUNPPMUSMHJU[Z[WQSNONPU]]VR[\\KDTY[y|xvtuz~~ztoprv~~~}}~~~~|{|}}{yvrpqtz~}{zzz|~~|~}|~xssx}~|xututtuuuvtoljhgd`]YWX[[ZYY>=;:952000/-++-/13689;>@BDFDA@ACBDHF@?FNG424ARJ+7LHjkB9CFECAABBBCCEHFEB>?EPO@<CC>@GHIMIDDBCGGHMPK@:99;=;@JAEK@GKC>?ABDGJHFFECEFDDFHIIJKHGGCBBA@>>BGGDGHEBCFGILMKJJIKNMPTUQNOROKMQMNMJKILLCEGCEDDCCA@EHFHMHEGDA@???@A@EHMSLNVPIQRRQPIDN[VIIN?Ne[NOT\\ZZ_]`aa_\\agYVYMFN[ZRVZY`[SURRXWJ[mNIhmgjg\\[`XWea_i{s_VNhcnytmlnbZjvtsvlhrrikjwY[MTWe]dT]jiifbgktnnxsiitvorsrpvgjifnxhaa[]\\\\^]^XSbrlkfQejlnpnnnpkfjjifgloiijedijgdgjhinligchpriifbggfghifegghgefpgihklefmqqogcbbadgosrz}wxuyxyzxwwxzyy{}˿ʹ|̾ɶo}zu}|{`|y|zrw{~ypmssoxxpxko}smw}zes~r|swɽ֘ձ{wje_Z_|zvk\\^e|zoYL:[isuitIQ_jZRd[RWQ_wTISGIL?@[`WiWB<IjkB3@iuV@MSfgpfLL\\fogYi~nOxwzstbBQe\\sytoc`]vyNTftxZue{|zy|kX[xnLyaCd]kZPpmF0JcOgeDuyTKT`]P]ojnrq}oRORTTUVWSQPOOOOPPQU\\[Yahg_XTQMLLNPPMLMKJ=(&,)(***+,.0245310+(\"  \u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001d\u001e  ',.23122.///..-+.6.*+09AACE<EE+683B<2>C6HC8HH6.371=G3+0=1:G;KL9A5.2@Z`M5(-/,-16<@@BA@2*3DPQQNA42:J?KliJPai<`qdL?kvNQ_jZ[hJ<C\\PRQ\\C4JWRE?PZ\\E<QTFMYC41/7M[QNNNMT]ZUSQYZK]NNLFGFL]KPTTAHG?GIFKBFSWB@IG?I:6DXMKQQAAMWXKA@DJKGFEEDEDEII@:?<8;8AB@BGILPOJGHJKJMTYYZZYZ\\XUUSJLOJGDFLHFIIHFGEDKKIB>JUE<A<8?>?<B@HE?<JIMNRSPPOKIJKLMMNNRUSONOMIFCBDB>6:?99149302214689=?>>BEBDKE@EGD>AGHHJKICH<;>?A@><<;<@?ABFFEIMPPNJHIFGIHG@=AC?=;=?BDAAHIFFEFEHKHG<?CKI@<CDDKNRXVSQNMONPTPPMNQSTVVXVY\\[WVVQMRSPRTUWVXb`[[^b`\\^]]\\[\\ac^X\\`\\Y]XQX_\\QOW\\\\YVY[`aWVZ^`^^_\\Z\\VORPO[_Z^^URPVbXT[YY]ZY_^\\ZXX^]][Y[ZUXUSY]^_c_[Y^ZZZXY_\\ZZ]`a_]^\\[\\\\ZY[ac`ZVSVXXZ]^\\XURNS[^]c`VW]_bdc_^`ba[]_\\`hgacjlgeeba`_adaZ[^UNPRPXYPKMRVTXPKTHJGMU_\\SU\\[I?Ogzuyxvvy||yvtsz~~}|~zvtqpsxz{{||}}}~|zwuuwyz|}|zywvwtnhfc___[WV?=;:620.--.-,-/1357899;<<?BB?<=?@ACD??CFIKD3:A(+HLN`WB@FJIFEEEEGGIKJHFCCFGJKFDHIFEIKHGHHHFIMNMMLFA<8:<<88F@8<<CE?=?@?BGFDCCBADGFFGIKLNONNMGFFGD>=BECCFHEBCCCFMOMLKHKONQVVSONQOJPTMSQIMKNNIMIELHCCAAGDAABA??@@=====>?BGJPSIJPOHKNLUUIJV]WHNJ:Ug]PP\\a[^eadbceeik_]]WOScjdcdhk^ZXOTYTKda@Kh^amjZT[]]llkp}g\\aomwyuponhflqrxssaimgjhsUXINR`W_NYjffcbimxuuxrlhnuoononqhhhdjwiaa\\XYZhbfe_krnmi`pojjpmjmqkdhiiihllfhhggjiegjkhjmlljciqoffebdfjlmkhgfgjhdgommlopmlrtusroonoqsy{x|zvur~yvvuuuvsvy}Ϲxʿjhr|}qhzyrldkhgwro{itsms}xr^t}tw{{svž¦۶ǩtkae[czz{iUVdxuk]O?czdqnokJbanWUmZ[Yqz_HWYFQF;E]U\\hRF<YhT7Qhj;>Sgk`nWMNWgxe_hcPwrrqnbJQgXmtpla]Vn|PVlxtaio|qzqntmVizNyeEec^Kh_vw/5ai`nUHxjNMY]TUltgfioxzhRPTVUTRQQPOONOORTUX^]^a_TJGHFCACFIJJHHGJC,&,*&'()*,.12453.*%#!\u001f\u001f\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001c\u001c\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001d\u001c\u001e&/6;;;9223348==3,581,)->C;HG?I8-96:B;BC7H?QPD33A89E5*.<?0AAEOD:=6JT^\\E.),-.0226:;;A9:7<JNMOKC518LFIUl_GRhe<ckcI?jkLQajX]dD<QWOPZ[72KRME?]dJAHTMM]S:3/6K[QFOTZ]`[SNGM][\\d[]GCFDU\\QTPUEHDDGGFICGRU@;EJCC66HUIKUO=GQ\\UEBBFLPRIBDIHBHKG@;@<;=>??BEIJNOMMNLHGFGKOQSST[]YWY\\RPTQIDJLBAGFDBBABJHC>=MTC=@;7=C77?BC?<<JLMKRSQOJIIKNPQPOOPPPQQQRRMGFHII:;?888:;57;65;=:>BACCEEBEIB@CEC=@EFGKMJDJ?:>===;:86:959;BDDILNLLJFDEGHGE?:@?89:<?A?<>EEEDBEDGLMKGEFLJA?DFGOSTYXUMJJIHJMKJIKNQSTTURPQSPPVXV[[QTTSSSQXZWXW[\\XZ\\[[XST\\ZQX]VUWQKRZYLFNRSMHOQRTOORUWZ^^[Y^ZTTUW\\\\YWZZ[\\[ZTX_\\\\ZUYa[WXWZ]]_XU[[WXRPZ][^`WWWYXVTQXVQSUVY\\\\X[[]^]ZVX`e_URTSRQRUTPNNMLS^dceaYYZ[_b_[\\___]]ZY`d^Y^ec^`ba`_]aec^`^UTXZY[[WVTUZWZOLXKJFMWc]RTZVEOjxzy{xuvy}~|zw~zzz|}}}~{zwqov}ytw|zz~~~|z|}z{}~|zyvqkf^ZY>=<820.-++---.12367888:<<=@A@<9;=>@B?=ADIM\\TFD).GMUTKGFHJIGFFGHGGKNLIHEEIJHGIJJJHHIIJIHHHHJKKLLIFB<9:<<63?=6:<@A?>?>=@BBBBBDFGIGFJMMMPRPNNMKJKHB=@EDBABBBBAAFNQPQNGJOOQUVSOOQOEIRINSJJKMNMQMJQPICBFKE=?@BC;<?9=@A@?ELNOQURMJOKEFJTMCOXZVMVH?`i^TXfc^gidhghkmrpdffdcdknorruneiYJSXRSbJ8Tf_nwtcZbot}~sn|yw|{xwusplhhjplww^bifkeqSVGMQ^UYLYkddcdlpz{yunkegolkhhhgegedhuqgjjedgrmnpnqqmmlkroihokfkkhdhhilhlkffigfggdgjkhhgjmiehjiedcabhkkjggiijmonowvutuutrtuwwwwwxyxz~||~ypqozusqoquvsrw~ʿϻ{˷|[rp~vmnw~}uqj`dbY{vk|kykmloyppb\\m|||y~|rpƼȢէsggg\\fux|fPRcupi`SHhncniwbPoqfP\\jc^]xmOSeL<NHPU[Tec[NHQ_NRw|C6QctXZcK[VRat|lrgxs]]zqrzligRWl\\jnmja]RgUY~yxhcc~v|juifnoSsObH\\dQjnkS-LyotFMz`Wd\\UXbmmdcflssgTQUVURPNOONMMNOSUVX]^[TLEDFFC@@@BBADFEEGE3(+*%%()*+-/252/*&#!\u001f\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001d\u001e $,24::4-54:?IRK=/4=<94-5F?@HC@?39<6=?FI:?BiY57GB>79/2DQ92>PR>=BJPQSV;+&(/-++-/2;@CJWWYWLDFF?64@RG@OUfWDRi`CdcgD=hjOTbiY`dD?[RMN`M-8ORI9Mr^;MPKM]W<2/8LXOETfmkaXQGEQaj[itj`JGFE[U[UMTHHCJFDFFEHTS>6@QI@47MRFNVL=JX_MEECHP]]HGKRIAFGEA=A<=<>??BEEHLNNPQMEBBDGHJKOTXWUV]`UVYTLINKCCDCA@@>@EC>9:NPC?=86<A78@CA=9;NNLGORPLFEGJNQRQPONMMOQPSSIBDHKNB>=:47A>9AB9<@?@ABBCEECBHIACEEA;AECCIOJELA<@=::9866;3/89==AHKJIIIEBDEEAAA=>=68:?A?<;;=AE>=CBEJIHHHIJJDEJOOPOQUWUKLIHMMNNJKMOPRSQOMLLLKMSVQRZTKJILNIMONSSRUVY[[[[SNSUMNRQQPHFPVSIELLKF?IPMLKKLMMOW^_XWWWWWY\\]XW\\YXZYWTX[TUSOV]VQQQTX[^TQWYUWTPY\\W\\_UTSSRTRPSMKMONNPTUWUX]\\XRPYa]RQTROMKMOLGJRTW^a_`^Z[YVZ\\XVXXZ[[XRT^`VS_c[Y^^[[[\\`a_]_\\UY_b_^]\\\\[^c__USeSNLPZf^STTQ[x|}ywxyxwwy|}}||z~ztwx{|~~~}}~tquxxtwzwy}}~~~zyz}~{|}~~~xqida`==:50/--++--,/12478998:<==>AD?99:<@?;;@EONkrA8<?<JJEJIEFHFDDFGEDFHHHHGGHJJHGHHHGHJJJIHHHHIKKJJJIF@=<<?:8A?=CDDDDB@>?@==CEFIJJIGGJMMOPPPNONLLLJHFGJKGECDFGCCINOQVSIJOMORTQNNPNEFOHFRMCEHKMONLNUPDEKJC=ACE@6;@BIJJJKV]ZSSaaSPVMJIJMDHTYYTTYJLhi`_fhacmkjlhiimvshiiloqpmrztpjrxXMVRO[WDQilw~qlt~}|zxmlggmhtv^\\ehlcqTWILU_TVNakgjiipqy{{sjjfemmmebhbbgfffqwmpwtuvvurssqmllkoligdihfgffdihilhkkhfigcefddghffehkiggffedccfjlkjikpssstuv{xxyyxvwy|{zyzz|~|sjmnuroompvuwwzŽŨƲ~tlzf~~epnak}wzyomjc_]Pwt~{mswob~egitbiXWjjuvuqjyxĹ°өط|zdml_kxvzbMNbsnh`VTecbghz\\XyxTRb`l]hmjR^aA=SZc_XZh`aOGUkb{|S:K^sdQ^ZZfML]Ztv|zxf\\ixoqwgdm[\\maglni`bQ]|[Zxzx_{c^lw}fmf_tnQ|m\\]OJgxeK;t|l}hBZneqgV]ajgfkedltskWSUVVQNNOPONNNOQTW[^ZOFDGIHFCABCB>=AEEDED8+)(''((*,.124.)%\"! \u001f\u001e\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001d\u001f ! '482,/9PPO]U@78:89A7-<G?AC??:587;7<N9/OpU/FGEK.*6=OD+4UN@4?GHJILD8-+12('059>EJINNH>>CHHB?>CPR<JGU`NDRj^Ic]h=<ekRYbhVbjMD^QPJ_?(?SM6>meHL[JJ]^D4<GZ_TN]qtjYKCBM_he[grouiDMGIYNdPIUKGFOB@DDEGTO=5>YO?1;TPEPTI?L]YGHEFL[i[MMRUKCBBBBAC>@=>???@@EHGHKLIC@ABDDEFKPPQUXZXV[[YVTTLDDB@?<>==?<:69KKD@8248=9:@C====NIFCMMKJECCHMQROLJJKLNONSQD;<DMPD<<<4:;:>FB=AAAA?AA@BEBDLLCDFD@8?DB@DKEDG><B>;;::69>0/979:<BDCDHHEDEC@;<A?;<:76@@=;;:;?B:;@@CEC@ACFFGEHLQNIFHMQQKRLLPPRPJMOOOQOKDEGEDILNQLKROLIHGKHIKKPPQRTWZY[[VOOSOIHORJADNQOHHNGGF?HQNMMKKKIHP]`XTUVVVX\\[SS[WVWWTRTSOPKIS\\RKJLORW[NNWYTXXTUVUZ]URQPOQQPNFILLKJIMPNHLSXULIU]VMQTSQOLOSPKOWXY[XX\\ZW[WRWYSQTVTSURJMXZSS]^VX^]WVZ\\[]]ZZXVZ^]Y[]][Y`c_`YXh[UST^`_WTSdy~urwyxwwxyyz}}~}}{utwz{|~}|ywwyzyy|~|}|usqrx|}y{~}z}|y{|}~}xtoifdd=;72/-+,++,,-/1359;;::;==>?ADD?:9:><9:=AKP_S=D=8>ACMOFADFEEDDCCEDBDEEEGIJIGFGGGHJKJIHIIIJLLKIJLKHFECECAJIHKKLLJGEDDB?@BGJLLJJHHIJKQSONNPOMLLORRQQPOOMLNLIJMOPRXULNRNMQRPNMMNJFMLCMN??BFLKMNMRQHJLGA=AD@::@LYZWX_aeidY^mg^]a]XXZPK[Z[][^ZR]nfafkg_enfmqgeekvrmjjkqpmowumln}Y[aYW`_ex}|{prlbqmpr]UbhjcoYYNK\\b[^Vjonupmsqyyyrjligknpfbjbejkjhnvnoxwwvutssoiihhekfcebadedcdcgfhlhjkhffdacedcefeccfgfeefefffhnqqpopvyzxvuvwwwxz{xw}}||zzz{hdklnonnmpvxwwwòıŸ¾ĵzogszicbdU]qzv}zjehd\\VLiuujn~mVy_aaq\\cZS]f|vokgfwvrpʯϭկζ|yfovjozutZKH`plfa_]__^]gxZ]y~nLZb]mgnivS_[GCgn`\\T^lh\\GGodsk_<KSUd^[LVo^ACEevmp{`erglvf_la_icaike]kQTu\\Zsp|^xd]kq{ZcgVkZizvcOE{uyvQU~dbNDgx_uwNaoYg__gabnxxr_TRVXROOQPONNNOPTY[XNEEIKLIEBABDD@@CDDBCD<-)*+**)*,.121+&# \u001f\u001e\u001e\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001d\u001e\u001c\u001a$/3*+.L_P@MZI>:0*)463.=C::=;7404=/6I3([jK8O?VF,4>@H/,H_737;<:AFE2.3;5,:GCB@A<<=?=9/8FGEDDHLPB@ADU]GFSiZKb``2=`kS`bhQenSOaSUI`:-EO84[oETcQ<^dO9@`g[QWhrjZJKUcjnng_bhftmS>THMUMdGLSMHHQ>>FDBESJ<4A_M=/CTMFTTFCU\\OFKFJRhmXRQRSOECFBCCCAB@@?><:<DB<<BDC@AA??@BDHJKRWUSUZ]]^]WTOIJD@=;=<<=;918EGF?447498;@A:CA@KEB@JIHJEAAFMPQRJEFILMOLTQB88CMMB<>;6=:8@D@@DCA??B??DDBDOMDCGHC7:@C?AD?C@:>B@AA><6:>,/729:9>?=?IKIKIFEAAHF=<=86==:886:?;9=>???>=;ADDCGGIJE=?BGJJGPJLNNNLFJMNMMLH=<C@=CHIMKHONMKKJLJKLLONQRQUZYYYWQMSUNKORKBGMNLHMNCFHDJMMMMLMOMKMZWSQOQTWXZWLOWOVVURPOLNKDFQ]PIFIJKTYGFTXSXYTPPP[[RNPONNQOJHLOPRROPMHCGLPMDGU[NHTWQQRPRUSRTUTVURU\\XT\\XOUYRLOSPNPMDGRTOSYWTW\\[VUZYWZ[VVVWZ\\USUXVTR[`Z[[Z^`XUSa^ZVUf{{zvsvxxxxxxxyzz}}xussuwyz||~~zxx{|wv{}}~vppx||zz{zz}{}}z{|}|vsplhebb:73/,+))***,./1359;=<:;;;=@ABCB>=;:743569HYvS>E=5:EFVnV>CGHFCAAABBABBABEHFFEDFFFGIIHHHIIIJJIIIKKMMLLKMKJSQOOMPPNMMLHEHHCHMLMKHGHJHJTRLLMPQMKMPUYXVTSTTRRPNPPPRSUSMRSNNQSSOLKOOGINBGN>:;BKINPLMMMKHC===?IMJPahd`eqpmqh`jnbehmoddfa_h_\\`fd_]bmadgdg_fj[gpha`iskklclrjjsxkkv}{iuxrkp~|y||~wvxastmm_S]ghco_[UQejggartw~vqwrwuupnmgmnmsmgmghjojhmrlnuspmllnmiecccahedc`^_cb_acc_flgfgecb`abcaadfcabcddefdeklnswyxxvx~|yutwy{wwwyzw~~}||yw||{|zuddijlnnnnquwvszºªųźznfb|\\hW\\UWct|sxxf^ca^PIbwmfnsYoZ]`hY_^TMl`vmgaeqvztqxw͵Ժ־|zio|ym}smTHF_lifdfd\\]\\Wfx[_u~_T`[]kpfkyM]YKPumSZ_gh\\K@VjUyWRU?TMIZkL5`sO45VSGV~ljfkreZfcdeeefhbYpTTnXTni}axh_nk{y|vLZgOofZ~]YU`t|mbvnPjlSPe\\X{ZOvgRZUX_`epwzwdRQVZVQRQPMKJLSYZWSJDFJLMNIB@ADEDBBCBBBCD<-)--,+)*,.01.)$\"\u001f\u001d\u001c\u001c\u001c\u001d\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001c\u001d\u001d\u001e!&%&/@ZL;19PVMB8-,60:11=:49832,/>63F9._UFFWRZ94CEB81IaG03327?NI9*>=24FUOB81-.48237>HLKJJIHHG81BBWXFLUlSP^_N/BZfK`jfQinMX^TSIZ<5IF.LiNQnV6TgP>DgfRDPej_RNWcortpaUWZVelUP>YKRSO`ERMPLIN:<GDBCPD90@cL:4NPLGXSAL]WLKMFKZogZSRVSOGMJCCEDDCDBA@=:>A<9=AA>@BB@>@EHHHOXTMR[^]]_\\WVUTRMD>==<:<>5-9BEF@9?>29@<C@>FDCGDB>HFEICA@DOPQSI@DHJLOKTRD::EMH@@E<9:<<>@?AA?=>D?9@IDBDPNEAHML:6?B>B?=B=8=A@BDA=59<,330<87==:>ILNRLJNLMPOGDFD@=@7342;>66?>@?><?:?ACCIEDD>8=@CFFAIDHIHGEBBIJJJJG;8BA::@DKIFMLJJKMMKNOMONNPPRWWVUVRMSWXTQSOJLNMLKQPEHJHLJKOOJPZQNSXLPOILSWXXOENOJVRRROIJLC@HPTOIADEDPVA?QWQVZTOMMYZQLROMORNMQSTX]ZUTRPIJOPF@IWTJJWYPLPSRQRRSQPSQNU[US\\YNTXPIKNKJMKBDMONSVSSTXYTUXWUWWQUWW[YVTTUTRPX`ZZabbc\\XQ\\VSPh~~}{{yvtuux||zyzzz{}~}{}}xusqqtvwxz|~}}xwz}~{xwz~}{{zwsrqoos}~}|~|{}~|wspnkhecc651-)((**)*,.0246:=>><:99<??@DFDA>9/**,-0EX^^I=C>59CCGfjI@HGDA@@??@AB??ABEECABDDCEFEEFGHGGIFEGIJKMNLLOQNNQOONLOOQQQPLMOJFJMKKJFFIKGIROJKMPQKJMOSWXVTTVUSUUSSQQQQRRPRTQPQUTRNNPPGHL=?H<58AIHMNIIIIC@@=CEO^_^gnjddmvtoqldnm_hlrsffhjhee_akaed^dZdfcf^fhTdog]Yblgji`khakzyltslp{rz}zr}{kx~ppcY_ggfpjad_qusolvsy~uq|psqrorkgqpltqnohhjnhhlnikokgeggffgdbba`ggeaa_\\aa]\\_]U]id^]]_`\\\\`aZ\\ec_`a_dgjfciqtx}}|zzyz}}|zqnuxvzwwuw|y}{{|{usxww|z~odfjlknoorpryŹ~͵ô²nzzxnc]lfhqTURSZbu~ooreY_`cKF]|yexfosnjTWdhTW]UMrqYtxmn[rdiiqjpr|vмѼȧȿǣ{|lx|nwpiRFG^hffdlcWYVTdsZau~sVY^Q[kj_spPaVL_sYHbmgUF>BbYem<SbUVMKga;Mra<8Z|e*VpE_j^jm_V_abbegac`Zl[]gVKhawf{leoeotypFWhOgnT|oJkhZikqaDxb`S]LcrOerTRSTW\\_eoqtqbTSW[XRRQOLIHMZ_XRKFDJLLOPH@?CGGFDBA?@AAB;.(,-.-)+-/0-)($!\u001f\u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001c\u001d\u001c\u001e\u001e\u001f\".7MK5432?S`b^LOV-4633411:4/-*4:.DD<YBAVihQ?4EC8>VibK-'418AGD<=<8=DMSNC::<ADB:7<BFGGFA@BH<%1OIUQFSemFW[^I6JV\\DfuaWhh[\\JVOJO:=C?@XXHf_EGgQDIilH<M^\\QPYerqghh[RTXUXbeV`J\\NUQQ\\EVKOKDL=8HEABM@9.?dK<?TKKIYK?W]POTQGLbo^XRVgXQS[JCCIIGGFDCB@=>A>BHGCBDECBCGLKGKUULMZ^\\[\\[ZYZ[\\ZVLCB=<:<?117@DFCBGD;DHCHFEGD@@@?>GCDGA@?BKORUH>BGHJMJTQF>>GJFAAB:97>?>>>@><<CA8;AFDBCNME@FMO<6?A=B=<@:6<>?@A@=6:<4;34<46=>=@HKNPKIMNPRPLMLPOEF>866?C;7??ABDA?;@=CBMDAB>9=AAAC=C@DD@AA>?FGEGHF;8@A98>CJHELIHGHJJIKLIKMJIMORSRPTOLQTUTONOQOMKLMPQLKHHMKIPPIS^VY_VLROKORTWXIANGHSHJRJELKBCLLKQF=@@APS<=MTOUYUMKMVYSIOPLPUPQWWZZZWSUY\\UVZZJCPXTNRY[OEOWOKRQLIMUPLW[TSYYPRWRIJLHGHGBBIKNRRPPOUTQSXWTVQLVWUZZVTTUTTRXa^\\ceeb\\ZQVOMc~}}{|{xutuuz~}{|{{}~~}}}~{wtrpptwwwwy||{x}~||~|zwx{}}}}|}~~~~|{vsqoklw|||}zz~}}||}|ywwuspmjigfdc21/+(()****+-/137;>?=<:889;=?DHGEE=.'%)15BKHKE>A=7337Bl|Q>FCAA@@@@@@>>?@ACC?>BCBBDECDFGIHGHECHKJKMKJKMNMMNMLIJOPQQPQSRNLKMMKIHHJKLLNMNKKPTMGKMORVVSQTXTSVXWUTTRRPPQSSRPRVUSQRQOJKF=BA98?EHFIJFEEEBAEJOVbecmrljikouspojnukdlmqnbbccdahb_ndd`Y]\\dfee]egYeogZY]dbgb[gcbsw|}zm_eqkp|tpsgt~s{vvnflnilvvnsqzwstrsru|ur|plnqopjiuqlvuqqjhknhillfjlccddeeefcba``dhgaa_[_a[XZYPVdbWQW]^XV\\\\TYeaZ`a`fknhhpuy~{zzzxwuwzzkisurxywsv~|}zz|zqptqs{{vlbfnronqrz{~vпǵy|uqwwn_``r\\}XLKQVXmkajdV\\^aODWw{^hfosvgRTciRL^ZS[^a}ynu^af_adanmvxxʠТϸ̠wkrxpmdPFJ]cafeo]QPSR`lZcu}dRUUJ_hcdye[aXRhiAFcc[MDIQ]ZmXKas^WXXqTSmcQWssQ-<z^H]e}|XcfXRX^^]ak__\\]d_efUJj[pjnf{ofjpylzGUiXzc[Ue?ytV]~~Z=wcmIVYlcQ[\\RSRTWY_egfkk_ZUW\\YTRROJFIU]WOKGFHKJLPOHB@FHHFDB?=@?>@9.*2001(+--0,'$\" \u001f\u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001b\u001b\u001c\u001c\u001d\u001c\u001e\u001d\u001d!)<H8:>519GZouhqi,(.760,8B30-&&2.=BGE?CblZC?@K82On{dG08?08AD@?><DFNYSIDADFCDBADKKB>>=8BJF0,JO=QNHdydB`Y`H<NWO>s~]\\faaXEXMIM?@@?QULXcFJ]WKPYfF:IVRLR]cfgikie`[SXJ\\]eeeZ`QRSXXFYKNI?J@6IFA@M=9-BdJ?KVGJIYHHbWLSZPEMfjYVV^bX]m]LEHNOHJHEDCA?@CHLKGGHGBDJILPMLQRLNV]\\YVVVYZ^_``ZNJE>@AB=037?DEEGIKLMLLOOJHE?9==>GBCG@@?AHNSSH<@GFIJHSPGFBFIDC??<9;=>><=>=?B>6;@BDDBCMME@EKL@7>@=B>;=82;;=>??=:@@>A7?<9?>CDCIJHJJDDJKOQJIIOSNLFB@=@EE<=@?CJG<=E;=?JFC@=;<><=@:9;BB?=@;=BC?IDG?9@B;>EFHGDJHGD@BIIIGFIMHBJJIKILSJLPLOSLJNSSNIIKMNKJGGLLHMOJS\\Z]^XTTPQQNMTZG@I@KO;DNDGOMFGLJHLA;>=ARP8;IOMTYVLFKSXYHMRLRVQSUU[]XQQWXZYaecUNZYWXY\\[NCQ[LGRPFEPWOMX[SSVZRPWSJJJGFEDBBBGMSQKFKSQORXWTULKXXTZ[WTTUUUSXcb]bcdc]]QLW]~||{}|wuutu{~}}~{|~}xsqqsuxwvtwzzwwz~|xy||usv{~}zx}}{}~}~~}}}{x{{|zzwxz}}z{}}~~}}~|||~~zwusponjgfedcb//-*())*,--,-/137:=?=<;987:=@DEFHHD6)%)38=@AFA=>87508Af|U?@@>>??ACA><;=>?A?:=BCCCEDBDGIJGFGCCGJKJIGHHHKMMMLIFINNOONRTQNMNOMMMOOMRVUQNPOOUWLFLNOQRRQNQSTUUVWWYWWTOOQTSRSTVWVVVVUTRIDIIBBJNJILPMHKRROT\\^acbhrpkiiossrpnhtxmlpomjeaafmkmletrh`faefjid`fjfhng]\\cegg\\Yfow}zsxtttu`S]kenwkhi`iusuryyyxvzwtrz~|yz{wrrroppxtoumhjnmmiktpkutqnhgjjeiliehhbbeeeddfeb``_]hg^[^YXaVTRWOR[`TJX[ZQSWSSZ`aW^`hjlnjmux{~{vvvtspptwyifqrptwwsv~}ww}znpsps}}umeisxwpsư~xx}÷̨l|oorn^^[pz[yhIGNTR_}kYacUZ__TDRrzZahnryeOPWiYGZ\\YTcUkz|yptqZvgV`_WlklvyզժպѝqkjmmaOGK]`]ffiZMJRQ^iYevtVQQOM]^`kpbc\\X[q_;Tc`[LJXVSYaRTgrT^`cfVaaOwg?5EXƔOKbRQ|iXcUNW_[T[l][W[cachUEqXq}mjnculfimukytOTh_n\\NXXM|zVvXk>rzzBSmg]RQYSSSTWX_eadkh`\\VX[WRRQOKHKXWKIIFFJKJLNLGFCFHGFCA@?@A@>9,,::91*-,**+%! \u001e\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001b\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001c\u001c\u001e'<=<;:8?HG=Jcr~J660662fQ85+%\"%,79=6@LeP>@:VM4=Pit\\CN[92@>61@LGEOUUOIHLPKC?CCEE=9447FPI/7BNH6QLPuiVH`ZkI<RPEDw\\_b[^KGYIGME>>JSLSbQC[VKKM^ZEGNNKJS[]_eiic[PJTYb^]hlhc[PJS\\TFZKNH>JB6HFB@F:9,C_IBXQHILYCPcRNT[GHPgbXOTb]\\pv[QQWSPMOJHGEB?@DIIGGKHC@IPPRTPOPKJT[[ZSOQTVY^ba^ZPQL>EOK::78?CFGIJORNNPQQNJE=6:;?F@BE>@?AGNRPH=?FFIIIQNGHEFGDC@@;:=<>=;<??@@85>BABDBCLJF@BIKA9??<B=9<7/;;=>??><EDEC:FABCADIDHHDFIB=ACKPHFGJLKKJIGCABJC@E;@IH;<E<;=AGFB==<78;;818@>@<?8<=@>IEGA<AD<HQJJHDIIFD=@GGFBBGMF>GECFDIRFKMHLPIGMRQLFCHHGEFEHNKHMMMUZZYXYTTTUSIGYYC@H<MI5EJ>EKFEHKKH@;<@<@RP6:IPOTYVOKJUVWJMQLSVRSPQX]UMPWTWZ`ec[YdZZ`\\\\XMJT[ONTPGNVVPSZZRSUYRPURJJIEBCCB@?FNQLHCISOOQVUSULMXSUYWXUTSUVTWca[a_`a[\\RM^t}||}zvtuvw~~{}~ytrsuvwwutuyxwwx||yx{ztrw}~|{|}~|}~}}}}zwwz{|~~}|}}~~~}||}}~~zvz}}~~|zxsqmhdccddbc--+'(**),--,-01469==;>=978:<@CDFGEG?-*268=?@<5;9573-=N`fTB7<=<=?CDC@;:<<=>;9<ADCCEDCDFJHBCD@BDHJHEEFEGNNMMJEEILLMLMQQMLLLLLOTSNQZ\\UOQSTUWWMKPNNQKMOMMMTRPSUY[WXUQVVUVUUWZZY\\^]^^YRPVWQPW[XX]^\\[\\beabeecccjrojijpspooj`mzsvvokijklryuruu}~tqxpqqrohgmutknlgksrpribr~vuupgp}{pnroVMYc]lsedg\\eifkejvvwz}~|{yz||wsxunkonomurjlkeffejknqlktrkeefhb_hjgdedddeeedbefb__[R_eXR[XQ_QONSMNY[PIVXSGPSLW\\Zc]^akkkommtvwuqqpqkjhlpsugenomnrusw~~{us{ynotsryrlpx~wwŶyq~|þƴΣ~vmh}qffogWVd`orMBLQNUv~kTVbVY^^[FIgvYXinzqy`FLMdeKPX^XkxQZhutom`meUZY]hib~tyոӻǸѠprqj~jnbQIO^a]gea\\MFRT_iXitfLQHKS^\\dlehd^`frYEbg`VLRVCHMWKK^dZedaUUXRm`;?USZIF^P;VZ^SKV`ZOTh]YRTcb`hX?q_isghm\\smfgyojmlWS`mkXAWXqr`i__yviCpo<`qaaRN`TSTUWZagjpokd_ZZYVRSROMNNOJFHIGHIJJJIIHHHHHFECDDBABA?7*)9BA.+..*##!\u001f\u001e\u001d\u001c\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001c\u001b\u0019)7/1/6KKC933?Urj_E,-5Ma/>7'%*&1>3/?TZ31?9fI:R`rnVW_D:KI20;?=>DHGFILMIFCBCEEA;8:9;EMJ:<@LE7=SJew[HM[foG;YLBSh\\ac[OCIWFFMC=ILKMZ`QUUNKOYcXLJJIHMOMT_`XOJEGPV\\^]cjrl[SLBQ]OFZIMF=KB8HFD?><:.CYKF`LHIOWBTaNO^RBTTaXVK__\\k{ma_`dWS]XOOJHC?BDA>DPN@ANPQY^WOMHHQZXWSHJSVV[bb`]\\ZUJGTVDACBG?EGIKMOOKLOPPQOE<8::@E<?A=@>@FNLIG?@GHJHLOLEHCBDCEFB:<?>=:9>BE?32>C=?DDACJHFBBGJB=A>8@;7:44;:;;<@BCHGNCDIHLFGFHCABBAC@87:EMGDDEEDFHHIHD@HFFL=;FG>>D?@==DJF??<45:84/6=9@;?8>9<AGIFD@BGAMTOMGCHHED<@GGE>AHMC;DB@BAGOCIIEKNFEMQOKGEIJFDBBJOJIMLQVVUVWURVXYMAGUUABCFN>8IE9C?;CIIGA:;AB7=QG8=KWUUY\\[WS\\YRMKMKTWSTHMX[RLQYOPY]ZXZ]c[]bYYPMXZ[YZXSUW`VR\\[TQTVURPSIGKIC<BEA<=IMOFGFKRNMPUNNSMVXOUWSXVTQSVSWb]X]ZXYS[QV|~}~{utvwy}}{}~zvuwxwwwvuvxxxwy||{{xvw|~y{|}||~~}{xw{{z|~~}}}}}|zwxz~}}{zzxurlgca`aaaab++)(()***++,,.1248;<>?>:999;ACEFDCGB99<:9<=;99;8771-?U]ZWI9;<::>ABCC>;;:8889;=ABACCBCFHB?C@?BFIJGBEFDIPOLLHCEHJKKKLLIEFIGEHOQLHRYUPORSSVXUPPQNLLGMOKHJQLKOQWWSTST[\\XYXX[^]W[_^a_[Z\\_^XW[ab^aggd`digijhihfinokfgmpnnk`Vbno{xopouxwtxtsx~}~}}}{x~{umooz~povvz}yx}y}}~|nqsh]k{wlerlSKW^Xjqcbg`fe^cacnqvz{zyxxvuvqouskimmmkpogjifb`_inomhkrldadea\\^gidbceffffdc_\\fc]_YMUcVJWTRURJLKIJ[UJEPULCMML`\\[hd`dffjolkrorokojlgeafpoqecjjjikstx~yqnyxmotuq}~trv}|ĭxlqxx˿ñХy|rzz]mxhZ`iWP]wfe}wV@HNPQl|kRK[VW]]aLG]mVNfmwo{]@GDSdRGTZ[[}ZNYlnne}kcPUXglah[ss~{xԱݿƙ˼ʞ~y|qj{oraPKTab\\he[]NDQW`gWnqXMQEKT]Yij`i`eihoUPhhTMSYP8HN\\JMXacjZQMRZP>EZYBiuFF\\R>JhmZSITaZMOd]XQI]d]d[?llgna`pVqqdhkmcfZT]}dT4UadF\\mygdJsPCp`gaSQdTTVWX]djooklhda[UTTUTTWUOGEEFEGIIIIHEFIIHJJGDDDFDBAA?7*)3@E,+..+\"\u001d\u001e\u001d\u001e\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u0019\u001e*&\u001f\u001b+GH:614:8?dprpRA-<Z~o$>G6),1/F:*9SS/,8;sOE]qv`OSID]M+-?H?447;AECB?;:>CHFGHDECCDC;1BGB?6:LVOwmf?Q]vp@CaLHl_^ceVDCLQAHL>DQDDQZ`[XJNLYeYHDEFHJKJS_[OILWce\\PMV^hnnlZPI>P]LO[FLE;LD;GFE=;@:0BTIHcHFISRBVYMOa@NZUVSSUc_gxvdidgb\\ii`\\SMIFDFC>>HTJASWOYf_MHJKMTURQICMUTW^c`]^aaRJU[VKNHIF?FHLNLHHILMLOPJFA<99AD8;=;A=?DOIEFAAFKLGNMIFH??@BGJD:>C@=77@FE<2;B<:AFD@DHFFD@DHA<A<6=:6<8::::9;BBHHOMDKIIMJKFDCAA@;<<865>JGBBCCCCEEEHJGHGFMIGGFGFCABBDFMKDFB78;5/-696A<@=B?AIIIIJFFOJIORPH@EHEE:?HFB<>JM@7?==>>DH>FB@IJBFNONPKKRRMHCBKNJKLLSWONWZSNTYWIBFONEC<JJ6=L@7A<<HGCA??CF@7=P@<EP]^VY`fe\\a]PSNHLTYWVGIUZNIQ[JKX]QQVZ^\\_ZXWSV\\\\[__WV`adU\\e^PPUVPSQPDCLHA8<F@8@LLLGJSRQIHNTGNTNXROSTUTWPQRRSW[XTYUPSPYPgyqrxz}~~~~~~~~xuw{zwwwwwvvxyxy{~zvx~}{}}|z{{|}}}}}xvuuwxwwy~}}}}}~}}~}{ywtplgdba``__ac,,*('&(***,,,/01368:>?>:899;@CDDCDECCD@<<;:;;<;::7/0?HEZjQ>;;;;<>>@A=;98888:;9:=?AAAACCAACA@DGHHDBEDELNMIHFEFHJHGIHD@@DD@@EIFBIRRNNOOPTVVTQONLKIGNKCDKNHJLPUQRSORY[UTTY]]YRX]]___ac`\\XY]caXYeleX]dcilikjgegjgabehjlgZTY]euohppwztjmjlox{vxzvwt}toqmxwvz|~{tu}z}yvyyvv{{mttdYhwui_okTLVYUhqb_edfb^cgfpvyyyxusrpppmnqpmjolmnnolkkic\\aqrljimoh_^gi^[gmjhfhifdb`__]T`j`[[QJ\\XISUURREIGEH[RDAITOIJHUi\\aecdebgoojlpgnngkdfcf_aplobbjeihiuuuz~|unjssjkqvns~quvugsw~պ̻ķ±ǽΪz}yv|rzzlwcYur\\Q^aPSl}g]q{vaKLMOP^sjQESST]YaSHXdWMblviw_@F@C\\_KNTVYot^JOcbfd|slNRbYzYeXp|}qĦѸϜϱʻw{{oxu_QR[fg[ieW_TKRZ\\e]keQPQDMU\\Ykg\\d`kkhhOXi[JQWaMDKXdVTY[dfEIPR^Fs@AWMHgCM^OBR[\\SIP`[LL]]VQBWh^a[Fktfm[VwuWns`nnpZb`QfWX0UguSC^u{_lyPw<UiTvb_TbUXY[]abcedfrspi[TVZ_a`\\QIFHFCBDEDFHFCFHEEHIFDCDDDB?@>5++.<I,+,++&\u001f\u001e\u001e\u001c\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001a\u001b  \u001c\u001a\u001d)89996<GA@aMYwtoTVU|,.<@9*<CCI95FK995EyMJ\\ibRFAJW;'0CPWXVSOHB?=:;?CEHMOLHC=;>>67BJP;20IUZatlq9[izr:PcSSa^jgODVSMAOJBRM;CO^cXPNLM\\S><BCGMOOW_SGPesoZGER]`cfigm_QI;P]KWWDID<PK;IID;;C<3BPGPaHEFQIEVPLUYAYSPQSU^_dmziehce`qthg_RNKJMIHEDKQHT]QM^iZLJNNNQMLIBHQPOX^\\Z\\`b`UT\\[XUQRJAKHIOKHB?FJJJLIFGDA97?A6788@=>BMFFFB@DKKCLKIFI==?DHFE?AGB<;>AEC=<@;6@JJHHFFHFDBEG?;A<5==9>:><74=A@AKPSBEMFDKIIEBBDB=:9;<:49FB:>AAEBCCCDIKJHIJIOIGLMEEDBIJMLINJ@@A802<<6B?FEGHJUKJSQMKROGJQRK@BJID8>HEA>>JL>4:8::;AB;@;?KHBJOOSTMRYWUPGEKKFJJGLMHKVYQLOSRPJFLLGG?LE2<F9;E=CKB;=AEJG<>KSCBKR[]VY_ekbb_OTTHIRVYVLHNNLJU[EGV\\OPPU\\\\[NQX]ZT[`]YRX^ba]bb\\QQRVSUNPH?KJF;<DB<GSKLPSXUTKGHMENTOULRRSWSWOPPQRTUSPQMOQPU`~{|qrz{||~~~~}|~~{xvz~}{zz{{xy{ywy{}{z|}|yz~|{}}{zz|~{wvwwuuuw|~|}}{xvsojhfdcbbdgmp-,*(''()*+,++/003556:=<9999:>@@BACBBCB?=<<?><=<<=805B>;JVP?7:==;;<??><:9985:<98;?@@ABBACBCCCEGHFDCAAHMMKHFGHGGHEDEB=<@B@?@CC;?MSOMOPMPTUXUNNOKJJLOE>GRLCIJOOJRQJKPROMOX\\UQQ[_\\^afe_ZZZXbaXTOZj`QW__dgcghb]^`_^__adifYSUV^jd^aattndbceapqlmnolkwrmormtztwvyxqq{{~}|{~xqvvrtvtqt{{~~yruth^hqpj_okTNVRNfm]]cdcbcjoms{{yyxurnmonkjkljhlhjllmlkljc\\gwoiijlia]_ikbblqoigggdb_[]]]VcodWVVEMXLORSQRHEG@IYKACHZYTOP`i_c`_lkfntnhjmajlbeab`keanjnafmdkmkuvtuxxqlhqpgjnsqm}|ioľ̽ry֤żǭ¸¼°v~vyzo|szqlz{lbvkO_pdVS^YM^uhXhoogOQMINUghVEJNP]W\\YGS_YM[grcrb?C?<Ng[LOQTbiZLLZ^\\ibwxSOpXWeXlv}~|Þپμҫϭʲzxv~xva_aakmYjgS_WMTZSefgZUROFRWZ^ncYddpkeXL`_MWX_eHMJcdZWYWcM;RVVXEt<BURSPFV^NAQWp`RJN`[LMWYQQ@Rlb^[HmwhnbTqwUot^o}pvS`jRlLve8Vet~A_f\\yzu[nhW|a:XSd}nkVYWZY[_^\\]abiv{uj^[\\che_THDFHGCDFCCIJGEFFCBBCA@@BEDA?>=5++.:S0*()*&!\u001e\u001e\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001a\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001c\u001a\u001c\u001e\u001f\",=B>@EIC9LWatsvqaZO?;=E89VGCR@9=6O?QsGJUUN@;EM7.7DMOKGGJF<;<>AEJJILNMC;:<?A??L^XA21@P\\cmqve2_trp:^\\Ujm_odGNmYJEVIR_A;GMf^LUMATN;<CEITWWWSDKfqcTGAN^`\\\\dpyrgZWJ7KXJZTBAC<TP;MNC<?M=5FOET\\KCHLGHPIR]PLUHNPUYZ\\itl`gb_`m{nhd[UOHOSOTTKLRTaYKThh]VRPLKIHIABONGP^ZSX]^\\YY^_`_WVVJQMBMOCE?:DGGHHDFEB>87??8856>=?AJDFFA>BKJAHIGBG:8?IBBB=DKC>@@BC??@:5;EIHIKGCGEDEDFB>@;6=>;=:@B50EF:DQSI=FLB@HCCC?CGA<;:;?<69C=6;=>DAAAABFHIIJICHHFGIFJE<EKLLKNLFHJA<BIG@GDHJLLKULITUNNPNGIPRKCBLOF8@HDAA@GJ=14788:>?:88BMEBHKORPLSWX[VLKLEAGGDGHGJORNKHIOSNKKPGLLSG9@B8?F>FI;:DHLNC=GPOHHLPRVVX[_`__`QORKHMQTRNGFIILUW?IVYQJJRaZRENZ[RNW\\XRQ[W][__YWNINSSQHOO@NNOB9?I@KZONWYURSPFFJCHQNSJRTSUQWKLMORQONLIFMKLWzzyvv|~{z}||zy}~~{uw|{xy{|}}}{z{{|||}zyx|~}}zzzxxy}~~|{|}}zxwtplhffeeiqx||-,*(((()**+*).11342489:<<;::;<>?@@ACB@@?=@A;<?>?=:5<A98>NL96;><:9=????<:956<>:9<AB@@BBCCBDEDDFFFDCACJLMMJIIJIHHGGD>=@BA@?@C>:EPPNMOPMORVXRMPRLKNQNA?MVK@FMLFFMJEEJNKKOWWOLS^\\V[bd_WQX[Wb_WYOTcZLS\\\\_]Z_a_WUXVYYZZ]ce[RMPY\\]YX]kmfY\\b^Wkicfjgcdjhclrostpups{vqouyvy{{yzxnntsrrtqotvzsy~}utxtggrnpujroWNVKI`i^^ceghjrsoswyyyxtoifmojhgggehfffjjghjhcZdpfbefh`]`chjhhjppigfcbb`^__^]jogWQXJGVPOPPQRSAGDLUG@KOec]Z]ecgdfattmrrkfejbcicfeddomhpkncjqisrjosttutoienmgikqmg{}lnн|۴źʿºĲr||tv{lvylpwhp{ss_boXNbg^QP\\QPkkT^jecRRODHP^e^JCGIZYT\\KOZ\\OVajapa<@?=DafQJNMUZVOMSZZlZ|suaOk\\v\\g]ix|ܻѼƮt|y~xkrm_lqWnhQaWJWZQfe^U]UNKYYZeoaYbipcYIPePR`[hTHIMk]TcY_V8CZZUO[_:LVTUBL[]NBNXZeQMNb]JMTUMQBMof]]InzopvbiyOqv[mwylz\\XofeNejG\\_yhHPbsk]`Y_zJ=PLtzgPSUXXY[WY_ceoyzrhb_bicVOGDDFGHGIKGGMMIHFDDBBA@?@CED?=>?8++4:P7,&%'% \u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001a\u001a\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u0019\u001c\u001e\u001d\u001c#0@A=@EC@=@p{fPVi]h{ibK:<=<MS?KG7:5LPTY>LJE:0<F:/6;>@@CKRL<226;?AJTUUNC>AGMPNNTYG4-:AJXhjourR7fohhFe[UxyatUI\\rXEPWKa^;FFZkSLXFHKBGIHLZ]UONLZhaVUWZ`f`Z`ny|vd[Y^L4DRMZRBBC;POAOSE=CT=;MMCQWJ?OKJJMD]cHNRCSUX[V^mq__d[Zevpkg^]VGKWXZa]OT^`cTPdpga[VQMLHJF;FNEHZ^SPY[XUUW\\cgd^[[XYECOL:<?>DEDEDGGA;759??;945;;@?GDEDB=AKH@EJI>F94?H?C;8FMD=>?A?<?=69@A@ADKIBEDFFCEAA@;8<@<:=FF6:L:;GTHA@FG?BH=A?;?F?;;:9?=89?<8=<@BA@@@BBDGIMMCBEE?@BKD:@FHHEFFDHLIGLPRNKKIJIJFLJGLPNLKKGHONHBBKRJ;AFEBB>EG>2348::9:<55DLBACGJMONPPT[WOQODCFFFIIIJKHJKFBIQMJHPNMRVKKOK@BFDLG;BMNLG>AGJLKGHMJQTUUTVZ[_UMJLFKLMNLHDDGOQQ?LWURAGPeTJ?OZRIMTTUPQ[WXY[ZVUGBOQNLJNPFTOPC3=J<KYPS[[RMPOJFEBCKNPEPVPOMVKIIMRLJLMGADDNm}|}z|}|~~~~~}}}}~}zz~~}}|}}{|}||zy{{zwwwy{}}|{}}{}}{ywwtplgfhhkqxzxv-+)(((()('+--045676789;??>=;99=CB>BEDED@?B=9@@@?;::=;87C\\N59<<87<ABABA><85:@@<<ADCA@AACBADECCDFEC@BFILMMKIJLLJGHHCADFFEA@DE@BLNNMMPOLNQTTOMRTNMPSL@CQUM@?LMDEKFBDILJHMVVMKW[PMX_ZTPNXZW^ZY_RT^WOS[XVVRU[]VRTSVVTTX\\b\\PCGVSXRQ[fk_PX]YVigcegb`baabkppqonsmmrqplqwuvxyxwxohptpqspnoruvptrs~kuxuhoyqztwuaW\\ON^kiffilpqssmmpvvuuslc_hmifecbegdecghdacdbZag]Zadeaadfiihijkmigecbbaba``ckmi_U[TMYWVUTROXFHKOTOISVhdba`fbkjohvxpoligckjdimrjmoprntkljjomusijnssqqqkdnmgkkqmf{ǿ}nƺʾƾswzqr{{kl~{jet}j^wrrd[jhVZa^SKXUI`kSVmd]YOQGCNZa`R?BDQ[PcSQ[`[W_eakZ<?==@ScZOIHILPNKHQ^g[iqjo\\cbgbfag||{ȰÎƙ|yìzsYdsZqiSbZJ]ZXc\\UXe[OQ_][jk]Z[nl_SGY_K[_abEPERmPXlUaD:N^WMLuEBOTRXh>N^]OEMWPiRRPh`GIORLNGHno^jFr}qspdxMkzXhws`wpWizbUYkOh\\biNkfebQIo}p<:H[uuYIQTUVXUS[aektxxokiee_REBEFGGHHIKKJGFGIIEDFFEDBACEEB@>>?:/-;;@9-'##\"\u001f\u001d\u001b\u001a\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001c\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001a\u001c\"-:=>?AB?=;hvaLC[^btlc];/415;NLAE:<BCJKG<D;45APQECT[QJJIFGJLNJB?==@FIE>;<BHKLORG42;LRHLivgolcA<mjfaPdiXvzqejONqxPL[QSiVCKHfcLSPEIBRPMRXUPMNRZb`Z_c`]Y\\ivxupmdTQX]N<@NPVQIHB;PRHMWIBEXAHPGDWQF;THLRIFj^AQMF[[[ZY`mg\\aYW_mmghfb]PJU_afc[XgmfdZZosgf_ZVVTROBBKEDT\\PMSYURPPS\\hjaaa`bRENQG:>A?DDDCGJD<866;=@=:757;A?GCDD@;?JE=@OP>D;3?I?A5<LI@<<AA>=>;<?<<ADGMKDEEFDBC?C?<8;A;8CJE;AD;>GN?FDEA?HH;<:99A?;7:;=A=6:?=>>?@ABB@@@BFJMOIEEC==AKE:?CCB?===CJHGIKSSHKHJFE@CEEGJKFGHFEMLC?BISN@DDDBA>CF>662;<<99=43DL>=BBFNRMKNTXURTQGIJHIKKLLMBEKH@CNKFHJPKQWOTZXLGORQKHLTQF??ABHOKCFNGNPRPMOUU[XOIKDGJBGID?>DSONANWNPBDOaLB>QWMHJPPQPQVWRU^XVTCFXRKOTQOPTML?>FAAPSRSZ]RPOMMICCAHLM?MXNIHQHFGOQLNNJC=@G]~|}|xz|~|yx{}{w~~~}~~{{zyzwuy}||}yyxx{{|~{{~|yxxuqmjhfghhihgff,)'(((((&*0347<<<;<<;;>AED?=:;DF??FIHHEBB?<AC@B>::99956L`K7;=<:9=@??@@><88=BA??BECA@@@CCAEDCCEEDBBEDEILNHDHJIGGHGCDGHKHBDJIFKMMNMNPOLKMMOMJPSONRROJJPSPE?HMGLOEDGJKKKNVVKN[SHKTYSLMRXWUYVZ\\RY]WVVXURTNKTXXVRTTTSTUWa\\KAIWRRLL[hiZQVXUYgcbf_]_d``cgnonkjkiimjigmvspststunflsrrsplmrvutvqrxgutttwtu|tzyojjc^bntqjhlsrnmkehrqkorj\\[chede_Xch`e^ce`_`ad_cia[_cdhhfdjgaggbecfe```afcadhjlilccc]bb`^]YSWQOTWXa]]^dcfb`iiourirunlfhlhkplqyzoqypuqtmlkmnpoljllsrnotl`mphklotiwm~½»otynpv~}kcw|lajymYcxsgc_`h`YYZTKQTGPi\\Pgf\\^KQT>HY[ZU?BINXOc\\QS__NVYVZE4:;<ANY[SLIFHLMMIL\\^W[l]nbde]ze^cbv~{ѩ ʓŋ­̲zS`u`tl\\bbNaZf[UT[kaOVa\\`nc\\[Ykf_UO]TPcaePHTEVfIchSZ?FY_NHS{eAMNQQ^T>P]]QHHQGkPWQjfKELQHHJGl{doHlixhsUcY^z~qXky\\[gxTPkNmXoanXcpFH{vU07BftooOKPRSTVRU\\ajqssxsusncOECEFFFGHGHIIID?BIIFDEECBBBDFFDA@?><75<;37-(#\u001f\u001e\u001e\u001d\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u001b\u001b\u0019\u001a\u001a\u001a\u001c\u001c\u001b\u001a\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001c\u001c\u001b\u001b\u001b\u001a\u0019\u0019\u001a\u001a\u0019\u001a\u0019\u0019\u001a\u0019\u0019\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001c\u001e '4CJJFDA>?dui^V[WIne[U8.82(+9FLOD9D:;DVM>5CXUQRTYUC638;=BJTWUQKB>==;9<DLKIPSN>4:FI@8L^km]i\\W>DhimXNqglm_m\\QXoI`_L`fMRLQkUHUGBDZ[L\\WQHMZchjaW[[RNUgyvlea\\X]`_]ZRHBIOSQQP@8W\\OIYRIGYEMMFP^HC@UHR]GTiNAV@Paa\\X^ah^_^O]mrdcigcXSY^dhga`lvrlhdgqlhhd`_ca[QLSJ>KYMGOUQMLKPX`jb^cdcaTPPMGECABCDBCJE<9:<>>>D>::68=B>DBBD@;<F@:<PT>A=:=F?@6ELA<=@GD>=<?EA<BKMMMKEEFC@DA<B>=9;C98HHE=@BCBJCANBA@BIC99876==66><9?;4:?<??>@BCA=<>@DHIJKHEB?=DID;BDDD=88=AGCEGFOQBFEKI@<?BBBCDABGGELLA?BHQQGJDB@>?BE@<;3=?>::=65BL;7BAHORKIOTSRPQLINLIJRPNMNCBKKA@KJDECFHJUMQYYOPWUNTVQSMFGDCKOOMLPNKNNLHILRPVZRNKGEH9=F:8:CWMFANTHLHBQUH=@UUKHFJNKJNPQNUZ[YVGU_PQZWPOTRMG@OLCUSNVM\\bQTQKIGCB?DJK>KXMHFIGDFLOLQNE<:GNo~|zy{}~}|{usvyywwy{~~}~}|{}~~~~{yyyxwz~}}|||{{{yz}zy|{xvrlifedcc`\\Z[^^+(())*)&(18:<BDCBA@@???@HIB>9BLB;DJHEFFED@DJFDD?=??;63;KPE=>>>@?=<<<;;;99:>?@@?@CCAA@AEBACDCBDFC?CCA@CJJA?DEDDCGFEFFKKCAGKIHJNONNNONJHGHKJGKNOORSTTQSSRMIKJJRREGIJIILOUPIV[LLORWTLNWYTTWU[YW_\\YWUVUSRMDPSRXSUQRRSRR[WIJQXQOJN_ha\\XRWTY^[\\^XX_dacfgjmkfdeddiecdkrlhijknnkfirsuvnkkt|trxso{gsvn~qnwvmsvu{uunhiqyocdkleeedajh`gpiYW]dcdh_Sch\\c\\^ebgb_ediog\\`bekiebf`X^_]^]cb[^`cifbjljlhupkmhknlgbl]X]Za_\\jojfbelibknpvpdgpljdemlksrx~vpp{owqrtlnpopmhimlqjhntj_nrekpqͻ~wżȽ|po{wkmtuwlaqylchpq_Uenea][_`YUVTLKQJG\\bRYd[YMKYIHXZ]fJ<ACQKTSM[lngouuwpkjknqttuqjfdcba_]]^_Y_e^i]deXleWc^v~ʿ֫ñxÙ̻̐ʴ~Qbuasqf^kQc\\lVMT]qeQ[_]ij`\\Y]e]ZVY[MXlfWFOTEZ_OleVTFN]\\HF_oPJXNQOnDCSX[TIILFeJ][fhSDLRJBNNhiobj[rom_^`Rvvm`Yv\\NvmnQIhMi[zzewmQ`ARyb@,5D_qeaOMNPQSTTZ]cormjtt{to]JFIIDACFHHIJJIDBEHHFDA@>@ABEGGEDCA@?=:4;1/-(#\u001d\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001b\u001b\u001c\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001b\u001b\u001c\u001b\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0018\u0018\u0018\u0018\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001c\u001d\u001f#0?GIFA>>>^wpidQD=NUXXD;GLBB@3BYS;<ECCUV@KufE@EE5-,029EJGJMMLKIHHHIF@<=ABEA823<GI@?QVRc\\W^UQ?QffnQW[ynuZoWZj[PnWPf]L]NXfJGTEM`cMXPNHRdljbZROKHQfusa`c^RNWgic_YTOHFMQNU];5]fRD[[PEYHMHMc^GCITO]aSbWCLN:\\biR^accY^ZXlxl^fkeW[bbciieelwuolklookjjfbflh]\\cYDESMAJSPLIEHT\\bc\\`bbca]UOOMGBCABD<DF?@ACGGCFIC>>8=>A:>=CD@;8B?;:NU@@?==A??;J>??=CLI>?>IJCENNKLKIGGD>?F@8F=?99C5:EFF9<FKOJHKI@??@?998;647628@87857=:<@=<AED>9;>@BCCGJHEC@@HHB<EDHG=97>?C@DFBGP<??FG;5:@@?>>@BDFEKLBACEMOMOEC@:>CBA?>8??=7;>78@J=8BBMPTJIPTRPKLEFOKFDXONNPD?JOC>DH<;:@CBSLNTTNTVKLY\\KPMKSBKXLNWWTNLLJIBDLUPQWTPKJGF>9D94;?TL:<NRDFKASMNAFVUH?>FJGCHKJLTVWXWMZ[MU[OLQTPMDKSJSWMRSNY]TWTGIFAB=?AK=HWMH@DCBCIMKQKA;?CW|zzyxy{}}{z{vrsuwxxxz}~~|}|{~~}}}}{y{~|y{}~~|}||}~xtpjgdb`^[[]_abc*()+--*)0;>>CIIEFGA?CC?<DIE=9IK:=IIDACFFDDJOIFDADHF<8?CFGEDB@BFD>=A@>:8779;=???@ABEC@AB?@CDDCDD@>@>>?CIC:=CAAA@DEEDEKF?AFGGEHNPMMMPJFHFIJGHKKLONQVTTYXSRVUJJQPHIPMHFFNQOLTXPQQSXYQPYZVWWV[XXa[[ZTVURSOFNLIQPXPLVMMRRMOQUZOSRTbd[ZYMWPRTTTWWY^ccfgghlldb`]cdaa_hlfbabdgfedbjkkniiit}nmvkhzjqrqldoochooyv{zpgfomcadfbba`\\cdX[hg\\VXbcelfTaj^d``fhpjdhjlqk^\\__ba__b\\OTY]]Z`\\Y`efikglqlnfquoojlrqhffeZaa`e_dstlilsrfklmml`^jkjbcihkquzzlllrnsqpxnqrsunempmpjemogcpqdksu̸ñÿ¿ú̼y}|qmtshmsoqqbjtkbhipjWT`db_]ZZVSQQLINMFM][T`XUQFWTGVURfN8ERegy~|zyxwvvtrpnppqolkkdme[e]ur}}{ϲǴߵûuǗטʵ}YgqavugZn\\e`iRJV^ueVa\\^reaYUa`[TZZRMbo]IHVYHZXVvcWSHMXRIHf\\FV\\LPJl>ITTZUIJKG[Abe`fZEMSOFTXayxssyh\\etkf_~hHhmgkRoVKgvkUIeLddtvXp|O`RZhOB.4FVi[WRONOSTVX]]bknhfkkxqjYJFHFA@AEHIIKLLIGIHFDC=<=?ACFFDEDCCCC@;3:5/.(\"\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001c\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0018\u0018\u0018\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001b\u001b\u001e!%-5:;;;;;9Snc]Q<276?RWOS[_aaR=;TbYYPCGJKBRlF.250,-279@JPQL@65:CCCFJLLIFEC?948EORRRZMAUYUUXMMBP_`eP]Prjmgn[]vsUgoMX`VWbRZ^CNZRelRUJSHRdkbWNEACJ[hf]Yd\\IDObrtrukVVTKGLPM\\a98_cRF`bVG[IJHVdYIKUSXiacXLEVCIdieLfbecV`]fxr]^mhYVlkchkffntskhmqrqnlmlgdknhdplOFURADQNIIDDOW\\aZ[^\\aif]YZWNFE=9B;;DCEPOQRNJPPKFG@D@?;8;DB?86A?>7GTA>@?>?@>?E:?@?GNH>DILIEKMIFHIHKIB==C=2@9D9AC5??HA4<ITWMORG>>=:5369@50336=>6889<>9=>:<BIF85>>=>>@DHGFFCBIHA=FDHG><;=>?=AFBAM769=B927@=9=<>AACELMCBGFJNPPGDA7:AABA?=A;;::@<<?F<:?EPOQIJORROJICFKD@?VLLNQF>KTG@DD775;<?QMLROOTMFMZWDLSPTLRNGW]UMKJHFFABHQRMPRPLJKHMABD8@@HN;:KLBDIEQNTLQTPC7;DEA?ABBIPPNXWQXQLVQFQUPQPGQQPTMLLJQVTSWTKIF?C@<=G>EPLC<CA?@DHINH<=GFtyzyxxyz{||~~|wrrtuuwzz{|}~~~|{|~~~~}~zy|}~~~~~~y{~}}|wuqmkgedb_^``bdgi()*/54/2=E@=CJIEED>>EE=9CFE>;KD4@IA=?ABBB@GOIECAFIEABFGGFDEHFFIFCEKKFA=968<>@BBAACEC@@>?AACGGCA??><@>BI=5>B??A?CECADGB@BEFEBENOKHMPFEHGKKIMQKHJIMNNTZYQPXVMLMMKLQLGDDLLRSTTSVSTWVSTWXXYVU[WW\\X]_YXTPTRKPKFOPYSMVLLSNMVVWXRXWX\\TTWSOSGLVVRZ]^_ccfgffnmca`^a_b_[jmcZZ]`a_aaZff_geebkughibewthlroy|a\\iibdfhnruwrc]egccbceb]WR[aPP`ibZXdffpo\\amhgjfginmihdage\\ZXWXYZ^^^MPY]]X\\XZglkjmjkqmofgrkkhgmnhc_e^`a\\ic^oxrlouvjihjgh`[fjjdddfhnuzrdijmnqrt|ussvysgoplphelhgipqdlwrvƾƽɼsyxqooodjrlk|wedol_chjl`SQY`b^[URROLKIIHEDP[TY]WSCLTDI[d~{wwwvxyxxxyzyxwvutrstttsqomnige^lly{z~ʍáǖŗիŧɹ~amnezrc`qcig`PJY`{^[g^eof`TQda[T\\TKTihTGP_]NYQ^x^ZREMPNOKfKG^[LNSV@KQOYVJKKGU=`g\\_[KNSNO]c^rvkjkd\\wjgbzo@Wj_rUiWMb|m_[[OcrizrjW{z{M`iYUAW03GQbSQTPNPSVX[][]bggihctnaRFBBCBCCFIIHJJJJIGFFDA?>@@ACDB@CDCCDDA;5691-& \u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u0019\u0018\u0018\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001d '1>GHFCCCFSXRUVN:<BGRXW[[[WMCDDGPLVN6FSFE8K\\4,/12356878:><3*.8<?AGMQRLDHPSUZ\\[WSPOB3FULLRVENEK[ZXTivY]dmrk_av`cwjQaWPc`XcUB_icq[NTOMTfc[SJGIMRZ^VZe]G=ETcz~tyzj_`YRLLNMZ]C=[XZNah]G]JLRY^[RWbSdkebHRPZEYlm_Sp^l_Ygeouc\\gm_Nexjnojegopf`iuvrpmknojhmkgqzeNV\\KGPNEEEDPWV`aWXV^jfbgiaZHGF36>2FHJUZYYWQLWTPMPJID>=;;==>96?=<8BPC<??<8=<@;;EAAFPGCIIGFFEDEFFGILKGC=>9.82H9L:;?@G75ENSVORVLA>;7/159B4137DD=:<=BB>;9:>ACIC2:@<<<<>CFEEFFEJGB?FCFE>???=>=?FC?K2199:806B=5<=9=>>EOQEBGGKMPLED?58>BBB=<A;9=:B@?>@<<>GNILJKNOQNGFAEH?<9NHFLPH@IWMFEF>;8;?EOLHNLPUKKTZSCNTMTUMEKXUMGDDEEBABDKQLJKMLHKHWM@GFDCBMB>FD@EGKOOSVZKI?6>B=87::<EKGGSUPPKKMJLXQMTRJOQQJHKDGRONTSNKJE?CA==D@CLLB9B@>>AIHKE9FK]zwxyyz{{}}}wtvwttx|{y{~}yz|~~|{~}|~~|z|}{~}}v{~||~ytoljijjjigfgfhkkebdgh,-/6==8<FI@=BFFDC@:=EC<;BCC>;H=3CC99<>??<;DKEA@AGGEDBDFFC@ENIEHEDJOPKHGB>ACAAEDCDEDCBA@@B@CKKD<=@=:@?BH91>@<?@@BC?>CDA@ADFC>CLNHFPLCGIHIMOSQKJGKKINRROKNVQMOLLNLNGEDELLW[TNQYTQSSTWURTUPQYURUR[\\[\\SRVVRWQJRTYUTUTOSOOTUUSXXT[WNUWVVRMW`_]`a``a`dedclk_abca]d[ZombYZ]`_\\a`Tckbabe\\doa_``dglednhrkYXb`^_\\_ijnur^Zfc^cbaebWOKSYKN_ihcchjkomchlhdmjedhjgd\\VZ\\[YVQRRZ^[aOPZ][UXX_jnkihigillf`lhdddggb^^c_^d^oncktsoprvnieigda_fgjgfddgluznbfhotrty|xuuyywprolphemeilpqemxtz»ʶȿ·|oxxsplgjbkqjgtyh`jn`af_ddZMHS^`\\VPOLHHHGEEAGXUVZMJFQr}{zwvwwxwwxxxxyxwursqomlkjjjjjg`dm{yxzӧ|ӚԟÏsϯɻlmkmxjhjogroUOMZc{W\\pfjki]OQid[YVOO`i[LOZg[QZTfj``LDQNKRN]CH_YNHpJGLLKXUJLIJR=]h\\\\_VSYOTeqkn{ujgxne[}|ifgvFIgZlYeYMb~piuS`fegnTYiuJ_mOJ?g+2EP[ONROORUWY\\[XW[`hla_nfUJCABEFGGGIHFGGGGFCCCCAAAA@?@?<<@BCCDDA;64:1*\"\u001e\u001d\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001a\u001a\u001a\u0019\u0018\u0018\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001d\u001f\"1DPZYPOPQMTfefc[WWVTSQRTRIGRZNDD?>?3AaVGX|8-03112770)*,/0,-5=DKUZYXUWa_chf\\XZ]]S@:MEA@VP?RJJWH[Ys`pVelsidhr[useZbTUp]dgGGrqioJTPQZd_QRWXVXWNIKakcPRV^p|ttxuxsdc[USQQQTZODWO^WclaDYLW]TWb_ep_kglUK[Z\\Nbrl^ekbmYgkjog\\algOUvvqsnfdgjg\\\\wyonnjlqsmjfgkwt_\\dVOXWECEBMVPYeXUS[ni[fuog^POB7>5:OJRYYWVTOIVQONROKI?@<;88?=6;:89BHC<@@=49<@59ID@EQCEEFFEDDDFDAADJNOKE?6*1/IAL6A@GD7?ONONKQZPG?<91239B87:?OLCDC?FH><9;C?BI=4B?8999<ADDDFFGKFCEGCEEAAAA@@>:EB?M2-985714B=2<;8<:;AMQEAGIKLPHAC=88<ACG<:A><?=@AB=<<=@GLGJKKKLPMCC@BD=85HFBGOK@FROIFIHDDEGNNIGJJQROPRVOAJQKNPDJNMKMC>CF@<<?BFOKHFGKJLHQTBDNIGIJFBA>?EJNVLT\\VGIC<=;62357<BC>DQQMMIEFPTRKQTPIMPLIKHGJLNTRHHNHCA@C?<BACKND9A>;<AHHK@@IRy|xy{{{|{}}xwzzwz|}|{|~}w{~~~}}~|z{~|zy}y{|{~~{|~~~}|zuokhgfhhgfcbceimnmljjll89:>CC?@GF??BCCBA?8<DB<<>@B<;F:5C?79<<>>::CHD?;@HEDA>@AC@;CPHACADJMLJJKIHJHEFIIIIIHFEFEB@?BIJC>=?>6<@?E5,=;;C?@@A==CA>=?AB?>ELLEHQJBHKHGNQRNKMKLLNROHHKOTOLOKMPLLGHKIJLWWRKOXSPPPQXTKOPMNSROMNVZYWPQUXX\\TNVX[YWVVTTRQRWUU^WU_ZU\\`__Z_cgjic_^^ZWbb\\bid]acc^]dW^rha]\\^__]_^Vbfc_`cWbk\\\\^`ZYfdabefZXY\\ZUUW_iclwu\\Wfc[ac^_]SOORVOZgkkiiilojeflhe^gi`^`cbbZQUYXWVQOQX]X_TT[\\WTX]ejigdefddihd]ggdbbdaZZaccdmisvomnpqoptokeiifaflegggdefgrzld`fpwurww}}oxwxusnjmeaigmnqsclyzͬĳ{ʮ»óĴ{nwwrrkch`lthiorhbeja`cU]b[OEFS\\[WQMJGEFHLJDBGHP\\_y{wxwz~||||{{yy{xwtqnljjjigbp}vusʲִoغñʻwhmqpkmxoozpOSUZisTcykggkXLZld[YOQZhdPNXalSO\\^a`j`GIWKITOQCK]YMF]JMJIKWTJMJHT@Tf`\\`]S[RXk|wmkxromdaiv~daf|T@_]d[]YS\\mlVrm~kYlG^\\pFbcNMGh%5EPTMLPOOQTUXXZVUW^igVZh^LFECEFFGHGHGFEFHHDAAAABBBBB?>=9;ADBACEC;64:1( \u001e\u001c\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u0019\u0018\u0018\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001f .?DLSSQZgpxwi`Y[d]UPJHLJD=CQaaZTNKK=<epNrg2/2.2=HPUYR>0457=BFLQZaefebabaa\\SS[_XP6;G>EHaE<TLITCe`vZ|Sngqfepjavn``ZZhy`wY:[lhlJWK[lSJO`edcUF@Qewq_bgiw{s{ywmdaZTXSSVVZWN[J^ckqeDORdbNThjs}mpmpUYcf\\MiqmdmZjaZqlkj_]ekXKlywyjegdcc\\\\qwjhllkpuqkg[cnui]ed[cdQ@DFKTMPaXNRXmjX_qpggebVGNI9KPJRQPPNLIERLOLMMLJGF<979?>49:9;BEC?AEE79??47EA>HL?A?HIFEGHGA:9?JOMNMF8&-2FLD9ACHC>JOHFGHOWPHCEC878>CAA@GPNGHGBHI=<9=B<<D5;B;46;7<==CDGFDJEDJHACCDA?CFB<6DA?M5+6976/1=81;9;@59=JQDAEIHGNF@B<;<=ADJB=@@??BB>C<;=>@GLHGLKGHONB@>?A;92EE;DOK@BKMGGMMKOLLSLIIFJQQOPRSG<KPBBEENF@HM?<EC979=@CJGGFEIMOKIQHCOIGTJHBA>?GLPZJUWJGLHA;523557<@?9ANKKQK@ERRIKVRNKMHFOMFJMLPVOCHRIC?>E@:?BBHMF8@@9:EIJIAFOwv{zyz{}~||{z{{|~~~~~~|vy}|}~}|}~}}|}|{z|ywxz}~~}}}~{||||}{yxxwuttuwvtoigghjkjjnqsuvFECBDFAAFDACCBBABA:=EA<><>B;;C98C=6:==<::;BDB=8AIBB@:;>B>6ARF;><@HJHHIIIIJIIKKKLMMMLLKHA@?@GGDC=<>2:D<@6/=:=B>A@@=>A=<;<<;:>FKIFINKCFKGHORPNKMPMLQVNDLQMQPNNKPQNMJKNMKLPPPJNUPMNNKPPILNLLNNLKMQRSOFKUWUUQQVW[ZXWWY]YSZ_XYa\\Yadcbbbb_ffjql`[\\XTU`_Ybf^[`b`\\`bXbldb^^^aca^]__[_^`[P`dW_aXMV`d_X_[XVWZZTS[hkgnrs\\Vgf[ac^\\]YY\\^^[dkljedhjjebaefb\\eg_[\\\\[]ZPPXZWURORY[V_YW\\]X]diljeb`beabdhe[aeca`a_[^kgimwvuusnloqonqnkgiihekodfhiadb`puje^dovummr~yqsstsqniia^bdoqsulr{{ȺȟĮ~nyurvk_c_nsdfmkbcba]`cOU]WTJDGQVTPLHGHIJIGBEXo}xsuty}|{{zyz}}}yvsonnomkdnt}p~uk˚sƙơrâŬɽ{frqjnphz|iS\\][pjWn|q`hmQLeka[QJUdf^KWcjaGR]`ZfmWDOYEIUOHDN[\\GNJTPIGJWQJRJNxZKNcaY\\bV\\\\fsxpqtwpqp^Yvp}c^\\~cESfd\\VYZRymdhnvnVr@_^vBg[aXKd%@FLNJKLMMMNQUUWWTRZd`RZcYJFGGHHFEFGIHFEFIID@@ABDDFGDA?==CFD@?AED:5473&\u001e\u001e\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001d\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001b\u001e&1>@?HQT^kqja\\UGI\\^OFBCGF:37DUagp{~gNMVQckD0499AFOVQP\\^SOOPU^gjhaYNHKIFCKU]^\\_`X>,CHNPcb8FVMHVGkgu]x_{djZepbfnj_d]hr}l{NEvjciPZQs_=Qmpfe]GKUiuxdcsxxuqroiys|zb`[V\\SUZYZWRYI^lqpcEK_n^KUdqpvum\\ckoQKnpomdXh\\fsljf\\\\hcK]vz~r]de]]]Zduj`gijlrskkbXamm_[gdhqeNGCKPJK\\\\NOTghSUkocbeiaRY^LCKKJNMKJHFDBPKMHGKMJRPA8;>A>67:;;BGECCHJ89B<57;>=GB>==GIFFGGF?89CKFCLOG<+'6ANA=?A@?@MIBADGIQKCCKLBAEGEEFCHKJDEGEHE@?;@?;?B7A>54954<:?BDLD@IDCLH?BC@?=CHD?6DC?G9)2><2,/54198>B48:CKB?AHGBLD?B<=@>BCIGA=@C?CB<A:9>@@FMHENLFGPRE?;=@:;/EA8ALJ@AHKDEKNMOKLNJHGFIOQNNRPA@OI<@HIH<<EG==A<318=@BFDEFFGMQNKHJGLLGWODBEE?LHPXJPKBFMIB967:879;@><>FCMSI@GNMIQYRONMADSMEINOPPHBJMHDA>F?:@A?ELG8?=7=JIHGEGl}v|xww|}}|z|}~yxy{~~~~}~z}~~}yvttx|{}}}}~}~~||~~~~|{{|}}~}{{yyxsomquz}~LKGCCFCBEBCFDDA?CC>@E?=B;=C<<?7;B<7:>?<::;?B@:7AG@A<37<?91@QB8=;>DHHGIIHIIJMMKJLNPPRSOJA@DDFFEE@=<2<F=?87??CAAIA?A??=<;5336>DDBFIGKDEKGJQSNNLKSNIQWQBHQMNSSNLOPPQKJOLKNKKOILQOIHMEKNGJKHHKKJJJMJOI<KUPKJJNQTWUUTUX^YW_`Y[`ZZ_df_`_\\[bafph^[ZVVV\\\\Z_aYX``]^_Z]`cc`^^]bg`^bbZY]_]NQ_\\W`[FEU[\\WYZUZYU[^]\\esnimno_Yekabccccccfifdegkg`ceceaZS[hb\\bc^[[ZUY\\SPW`ZWZXZ]_[_^^`c_foqmg`b^_b]_`fcV[cf_^dhknopnry}xqolkmommkkjfghihjndeki]c]\\npihchoyuhio|vqlllopmfe`]_fqsvvwx}yռһпõ}l|rrwh^``ol^cje^a_\\Z_hPGTVTLGGJPQMKJIE:7CZs{}}~~}|{vrsqw|zxxzzzxxxxusronnomlgljjqk{~l~̩tͻzyĬɩĽwgvomorcse^g__qg^twq]lhMTjg_WOR\\d_VLcmkGI\\]c^hjMDSVDKQL@FRZZ?kD[PKFJVMJUJWmYZIY^Z`ccekrtpntwsgowiRvg}l[PmSDnr\\U[]Moubzeril}}r<[~qAg{TtaP`,G=KHGHIIGHJOQSUWTPU]_[]]VJFKKIHFEDHIHEDFIICAACDEGIJFC@?CIHDA@ADA:5453&\u001e\u001c\u001c\u001c\u001c\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001b\u001c\u001e\".:BBEKOUZ[QQURJQ]XLGCDFD:2.5AYlcf_W\\ZTQSMIA47ABBHYgbOBIMYdnoppqlZE737@IPU\\ckjhaW?EUWXMgU6]XPL^NhhndpsbbZci`jdbYfhus~kxP_yfleZ\\h~FHzwfSnXOh`bpqYw}|f_jao|}i\\a_^_SZ^YWPKVN\\mok[EInpUHU_yyq|xj`kqjFXkron`]efkojf_Y\\fZSjsy\\[jaYY\\ahgc`dflnpoki`[cjbU\\mghpg[OIMLJV_UMOadQRejcbdgi\\\\h_MBDGGIHHHGGDANJKECJIGRRJABCB>:58=>BFEFDBG;8>;87:;>@>:@<HJHIEDEA>DKI@@EFA<6'9@J?:;:89?HB?>BDBIG@BKMGJJIEFD=BDGA@GDEDB@=B?;B@9?7/7;27:;@?HK>?IFENG=CD>@ADHGB5DFBD:+2@?2*-00167=A259@D@==FFAJB>B>?B@DAFLI@>CE@@@?9:@C@FLHGOIDHQTIA==?:>2A?4>HF>?EH?AFKKMFEDDCEFENPKLQKCHME?AGGA6;?>==;60->>?@CEDFHEGNJKGHEKLHWS?DGJ@NGQTJJCAENKA:<AB89<<A?=@ACNNFDIJHLTUSSNJBJPGCMQMMH?DKHD@?AB?=AA?CGC:@?<?FFHHH\\z~{tr~~~~z{||~}}~}z}{zwsqt}||~}}~~}}~~}}~~|z{zy~~|}JKIBAHEBCBEGFFB?DGBAF@>F<=D=;;6<B;7:@C;9;;=@?89BD?B:/5=<50?L<6AA@DGIJJHGJIKNLKJLOPRUSPLCFOKEGGGCBA=FGCD=@AAJDKMBEGB=>A9/037<@@>EDDHCGLIKQSMNNITOFISS>BOKKUTMMMORSJIQLHOKHNJKNMFFLCIKDHJGGKKIIHIKNB;MTLDDFKPPPQRSTWZYZ]]\\]`Y[_aaY^]TX_^bf`][XUWWYZY\\]SVa\\T``U`_`cX\\^\\ddZ^f\\T][^[JR]SW[K9DP]_RZXT\\[Z`ceeerrjklkc`cgdbbfkhbcchdbb]c`_ab_a^VOZkb\\ba][ZYUV^]X\\id`gfegfedfjhghjonmd]b\\]a[^^caQSaiggms{|xustu{olfcgmljhhjechfeglecjeWd]^mlhnjnoxtgni~uqlhgkpkcedbcksuy{{{}|sϷұͿϾɯlpuva`_amd[cga[_]YW^hR@KSQNGGFINOJ@;CSl~~{{||{zzzxtqqoquz||zwvwz~}wuttrqqpnnonlijdbehqlͯǳpŸ˩thzltgs{feiclaemhfvtp[mbRakc]PTY`c^PRlpX>[\\\\fbiaHIXUELLI=KUYUB\\D\\PLFKUHIWL_lV[HRafjnqqpsrprswvkqpnOtc|{XHwtc9l^YZbLcwhhvhqjpBUz=bkKxnUU5J6KEFFGDEFHLOQTVUTY``c`[RIHMNKIGEEGJHFEEHHDCCEEFGGGEB@AEGGCBA@A?:5331&\u001e\u001b\u001b\u001c\u001c\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001d\u001e\u001f%0:?DFGHKRUWSPVdcRKHEFIHGDHUkzy\\C9:DJJA;>4?MIOQXWRSPT]eegmoniaRIEGMNSOEHZgjja^X\\MTQBgMHnZa[cSfkhg~ulbV[`_^lfZXge}{ufwVqoiy]^\\qHkhXP{UdkR_pkoyragonojb^jgjYL`cXUNHWPUiohYGJymLGVb~{rwxibqp\\Ocguijc`jghmd]U[[iWakqaQgh[UU^aae^[]jmlookhadlh[WfsdgokcYOMUUUTMQ\\`OP`c\\^cfjigmh_QAADDEEFFGGC@GJKC@IBFLOTMJIGB>88>ABFFHEACA8::;8:<A@;7B>HKIMD@CCHOMHA@<=<;;/9@@785727=E?==AA;CIGDFHEHFCCCC:?CE??GCCDCA>B?=E?;;-,::6:6<9>MA8?JHGME<CE@EIKIGE<EHIH?67@=1*,..037>>.3:A?=:;BABIC>C@BGGGAEKNH<DL>?C<8;CEAGLHHQGBIRXRD=>>:A4?>16CD=>C@;>BFILEBBCBEBALPJJKGNOHDACEF=16:::87834C@>@AFDGJDCMEFHHEKLJXW<EJNDKIQRIFB?DPMB:@KA8>A?>:>BBFOHEFKHEORSUUMHBQN>DTTKKC<HLE?==C?@@BA@BEB<BA@@CDJJQ~}y||~~|{}}~|}~{xtqs|}|}||~~~}}~}}}~}~FIKB>IH@AEHIJIDCFHEBFA?G=>D=:<;=@;7;CE;:><=>=:=A@@A928:82/BG8=GCBJJMPKGDJILOLKIKMPSTSMIHQUJGHGHDKOKMHKHBE@GLFRGDLIE<DE60567:>><BCFGGKLLMSOLRKHTLAAOU<>NJIOPLMLLSQGKRKKPJINKJKLHFIEKJEHJHGKIIJIHOL?DQRKEHKORONSVTTUWWZYZZ\\^WZ]]\\V^ZQW\\Z_a^][YVXWXYVXXNT_XR`^Ua__[RY^\\c_W`eYV]X_[LU^SXTEHKV_c[\\ZV_`^cdhfeoqiijgcbaa``^bhd__`_`c^[_aaba^`^[S[kb]bb_\\[Z]Z]ceemnoojolkihjqlgkkmkmc[_^]_Y\\\\_aQTbkqsyy~}tutqwzojd]dkifdfhdag_^djg\\fdSha`ojltpuoprgsdztrniglqnihimnotvx{|xyr}̿ɸž˼˭~}pvr\\b_ajc]bd][[\\WUZeXEELOMJGCCMCEf~|yzz{zzzyvspolmorvvtstwzytsrqppqpnmlljigdddfzugȴ͵lzͿѾέ̾pi{mx`twq`delhjklhsvr^j`XhlaVOZWdc]S[i^HU`U`fbfUHLXSHNNI@PUXQ\\GH[PLKRVBNVMYV]Vervyyvsqrpis{woaZEnhqUCfxs5ZlVZcU\\m{j{gg_oMRq6Wa<vxV?EM-OEBBD@BCEHLOSTUW`b`ddZOHIOPLIGEGKMHFFFFHEDGHGGFEDB@@BBCCCCA@@>81./-#\u001d\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001b\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001b\u001b\u001c\u001d\u001e\u001f!+8@CEILMJJLJHYgcTHGDFHHFDJ\\s}|}yiZJ92CG;95GjexTQNDT_Xdgkptusxmolkf`WPOQX``abb]KIQNQ`N]p\\mmdWnydi|]cJ]]W_prXa_Xkhu\\|k|pXa\\mbeRevQkXMhrlsxwmiws~t^fcjrmoSJfeVXKK\\PSjlfYGTxoHIVd~ol{{ubhp^]b`lodk_ll_ik_VU_\\lRjituS]l\\YW[^ZceUYgoihjkjfcime^bnm_eomeYRX]XSKLU`RJ\\bWU_egjjnnibTIGGEEEFGGHDBDHIC@G>CGMXQOQOGC>:?CCDEIG?BC879<8:=E@:8EBIKKMBADELSMHHC81;<<39>:3844/6>C==>B<:@IQGA@?FB=BBB<>CD@>FCBDCA>B@>D?=9(,;98;7=<EG78CKIIH?<DD@GMNIGFDHJKKKD?@91,,--/12>;,28@<;89?=DGA=DDFOMLHIHLM@CN=?C=8:CFAGKIKPFAIQVSI@>>;B8=>04>B;=A;8<BCHLCBABCD:=JLIGFIQOHB@D=E7,166656:7=BA>>@FCGKB@KB@FFCKLMXY<GMRKLIPQHDC?EQM>9BG8<DHB<7EGFIKEFILFFNPQSOKGFTK>JWSJI?AIIA<<=A<>ADC?@A>;AAAABDJKr|~}~|}z|zyz|~~~~}yvqrx~~}}}|}~~}}}FGKC=ILCBFJKNNFDGFHEE@CI?@C<<?>>@<8>HD<??>>>=>CA=AC73:9623GG=GLFGSRQTODAJHKOLJFHKMOSRHFMVTJJIGKFOSMLILIDD@GJIPGINKE>KG34=:88<;9BCGMNMNNOQKIQJDRK;9KT=:IKGHLNRNJSREIRNMQNLOMIFKJEHHMJGKLHHLJJLJLVSHMRPPPQQTYVRX]WTUTVWTVWWYSSVXUU]UPXZV\\^][ZZXXXYYSUSJU\\SS[[Wa^\\QLY^^`ZZacY_[Yb[TYaY[VT\\[_dne`c_dfdgdegdinggfba_\\[[ZY\\`]\\\\]Zae^\\effcegcbf^_eb`bee^^`hlghooqvtronnqllnokfdgijmd[^^][W\\\\]d]^fm{{{~|{qqunitrib]`eecaeecad[[clhXdfXlf`pmrtoypimgqfqstvnjozyrqqvwqsvtv|wz|lkýɿɸĵȫ~}sul\\c``fb]`aZZZ[TSVdZLFEJMKF::Nm~{{~}{{|}|yvusnlorrqqoooppoommnnlljigecbdignzzpz¥ppʙϳҳ̼}{{mi}ux^vq{`[cnplnldqvtag^\\mk^LTYUg^^^e[MTgUTgcabPPPXSGNTGDTXXJdCJ\\PLPVYBSWK[cnqwzz{zvqqh]UrnYM>\\siXEVx;I]]_gUark^SdZVt;OR6|~P:RQ2>K?;A??ACFJNSTVX]\\_c^QKFIKIEEEEHLKGFFFFFEDFHGGFEDB@@A@>>>?@@@>9/()& \u001b\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u0019\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001d\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e $+27BKPVZ\\WJNafUEDD@ACDBC@AWx}nd\\WK;Eal]AKb\\VUhtmPHURSROOQV^cdefeaZWTRWWWVUSLA7GNN`T]`p`vwa]Wl{n\\_HaYT^sxZeQWfqpetu|b\\cf}xaWpiRdJWmbftumvlu~u`]kjwwogPTha[\\HR`OVjhdXK]eBPUdwhksqm]kdPkb^mggabrebn]UMb]p_WiftcYh^Y\\[a\\\\i]VephfefhifckjbhliXZfmnbSWnbTPNRXRL[`RR`eedjloopfWUVNIIFGGGGECEGGCCE@BCKKJPWTNJD>>EDCDHIBBA:9:;:;?HB8<GHKLKKBEEGNPJJQE54?A?9::2299207AD<<>A>AEKPC<<:FC9@BB>>FDA>FCBEC?=FDA@?@7(3=8;<9?AK>2=GKKF?=@GD@HONIFGJJKJMTQI@9743.-.//=8176?=:67:<FF><GHJRMONOILOEFM>BE@78BGAGKJNPEEKNOQQF?A>?>>>15<>:<>75;ABFHB@AAAB7<HHD@BMUQG@@C<A3*263369;;ABCA9CE?DJ?=I?9>ECLNPRW>KORNMKRSFEGAGN@5:A45CFRBDIPPKKEEIKKHINMOPDGFMRGETVOLF=JJ==>=>=<<AJE>?>:=BAAADII`|~{xwx|y{}}xuvxy{{}~~~FIKE@INHEFIMQNFCGC@BC?HMAB?8<??@@<:DJ??DA@ABBEIC>DE=;AA:3:LJEJLOQVUSSQC=KHLPJICEJJLQRFALRMGKHDJKKIHEDKIBBCECGJHLKJEDLC8?E@?@@==CEMQPOMKKJBCOF>MI85GP==FKLHJMUQJTUIJQQOSSONNJBILDGJNJHNPIHMJKLKNXYSSRNRYZYW[]XZ`[TTPUUPQTSPMMPSQSYOMWVTXZ[ZZ[YYY[YQRPLVYTTWWZa]WPQ[^`^Z\\cb`f[]e\\]_da_adiijjokbededcjecechkede^_`ZWWVUY^^^_`\\cgadghhdglfcfgcbcbcih`biswpmqqptpnpmpuommhle^dhrne]]_]ZV][\\hkinq{wy|vsonuobkui`]\\]bcadcbbb]_dph[hj[mf`popqiqpfhjomqtwytmv~wtsvtmsvos|{~|pnĽȻɻ̼ƨsyxwg_gdadf^]^WXZYPNQ_ZLLEGJCEdſ~||}}}~}|xx{ysopqppoligillljjlkkjhfeca_agimttwww¸̳ziӥˬԶο}tuli{x_xmx_V^rvipeaptu``X_pgWLYWWi]chfPUhaQ_f`a\\QRSXRHPVIHTZULNCK]PLQ]YBSXVq^mquwyuroh`YKE=sqVM>Ivj`KUsZ;ifWtQayrsdMYb^oHFLO{v\\Q_VFFOF>D;<>BEGKOPV[[Y_YLGGFEDA@ACDEGGGGFHIHECEGFFFEDCCBA?><:;====<2%\"!\u001e\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001b\u001c\u001b\u001b\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001e\u001e\u001f \u001f\u001f\u001d\u001d\u001d\u001b\u001b\u001b\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001f\u001e\u001e\u001e\u001f \u001e\u001d\u001d\u001d\u001e '29=AINPX_^^bXJDJJBABBA@;8=EJ]kpdVMPRBAQ`_DSCDebXPJKUP>2117=8;?CHOTXYYYTJ@BGF91BRG_[^a^sfts^jJhX^]PiSQ\\vz^_Tmnten}rs\\abuzc[ne^YGdjQ`meepp{{u}tackpyf\\OYg__XBZdM[jdbZRj~OAWS]vkgjpbbdYWsX_ljiZlobadUOVgdzP_cfj\\bbW^^^a]acXdnibedfihedmhkpi`QXgldTQlq]XVUWTQY^TT^c_[ajnottd_c`VKFGHHGGFEEEEDDCCCEIFEKTRPOJD>BGDBCHDAA<::;<<>DE9AKIMMLEAIGJMKGMSHAFIIC?;836?;//9ED:<@HKGJOG<=;8FH;=BDDAIEC>GCCFD>?JD=;@B5,7=<>8<?GH39DIIIB<=DHC@IMKHFEIIJJJRVND@?A@4+1/3>7576?>9348>HF>@LHIOIJLPJKJHIM?EHC66BHAFJKRPCINKKPUJADB=A@?159:8::349>@CE@>@@??8?FB<9BMRQF=@D@D?9=<9=@?;:>BI?4E;;BG<9G83<FDMNNLVFOMMMKIRXIJKFJG87?>0CILZEVYRRKOINLJJIMNILG@GETOJTWTLMAAK?===>??=?FLD==;=?BBABFKU{{||~~}~~}~}~}}|zwx~~}zwvwy}GJLEDJNKFFHLLGCBC@;<@>GNA?:39?@@>;=HF=BFCAEJHJLEBHIGJNMD>DNKILKPUXTONO@8JGKPJH?AIKIPTE:FNIEIA;IJECCAAHGAAEE?EFHLEFHHFBBEJHGJHEDEIQPONHEGH?@L@9IF56GJ>BGMQKGKSQJRUKJNNOVVLINH>ILBFNPIGLMGGKJJLLLU[XUQPTZ\\ZWX[XQ[]RRPTPLKQSLGGLMMPQMJMQTTVVVXVVXUY\\TRRUZYVVWWZ^ZWYZ]`b_]]adcg]`g\\]`bb`cegggflk`_bc\\Y`_]_`dgbbf_^ZVUTSUX]^^``\\acbbbbaZ]db``ceba^^dffjmtvplqpkomjnmlsngcaj`Zchtpk]ZcZV[b]_qvqqswrv{ztnrrpqfftm_]YWbgbbbbbbbchqfbnf[kcanlkmceohitsruwyyslw|zxsprpjrwrp{~{xôõϽüȿĥ~qt|{bajjcgk]Y[XXXWOMOWYNNF;N~y}yxyz{zxttvwwvtsqpomkfdefhhhihggedca^^^Zgyo~~hwrɸпfֲɯոƒ|xopmguarmr_V`yzgn_bnwo\\ZRgnYUV\\TZkbgm\\MfjSZ`bea[URSZQFT]QLQ]SdyEGN^PLPYTD\\ilf]msmksk^ZTK>222ptRPEEsl~hV`vu9|psPxV`jl|oU[be{tcg^rwnpnhf[UUSWNL=?A>=ADJNUZ`_[OBFDCCB@?@ABDFKKGFKNJDCEFEEEDDCDDCBB>;;;;;::8(\u001e\u001f\u001c\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001d\u001e\u001d\u001d\u001d\u001e\u001e\u001f\u001f   !!!   !\"! \u001f\u001e\u001f $1?CCAAGNU[^`cc_ZRHIHE>=<BH?23=S`ZTOH@:5@UCHOEfrkF?=CW^afcaPIEA956>ELTXUOE=B=1>TEGi\\ianseslZwfIbP]X`jMRe{zZWl~qq_ou|e[hb|~z|m[mhhQFhhK^]Zbos}wtwrlfpxsZVQ^f`\\MCefPeg]_^\\rk=GSIa}f_nn``WYfiS`mp`aoiZ_\\TUc_wnQabdb`b[]`^`b]_\\bmg^d`ffhe^ekjunh]W]gfTG\\ud^^\\\\[[]]XW[[WSWcloqtlhmlgZKIJGGFFEEEECCCCBCHHHHJMOQUTMA>GGC>BDBD>9<<==>>H@DJGNMLDFJDKLKJNRKMRPPIFB>>>>7/4BEB7DKSSDGQB9>97EL>:AFFEKIE?IHKKD=AF?6:A@10:?C=5@AG79EFGEED@>BD@?EKIIGAFGDKJOSOIB@HF7.578;8636;:4127DKGCFKEGJCDHKEHHGIN??HG84?L@BJKPNEMRKJQSKHHE=DCA14::7::::9;=@@>=<<=??AA<78BGMNE?FLIMOKLLMMKFD?ALI>:I6:@B=>E79ALILMLIVRMJJNICMSNPMFIJCDA>CPMTYL[WMMIWTUHFLLOLEJCBFKUNWZSRSMEICDJHCDJHBEKGA==DECEFDEJQt}z|}~||~{||{{z|~}{~}{xz}|~FJJCGMOIDJMHEC?>>>;8>@EG:7408===;8=E?>CEBBKMKMLHGHKMPROKIIJIKMHKRUPMIJ=8LDHOJG=?ILJQVE5@LHEG:7HFBDCB?HF?@FC?DDIGCHIGCGJHLJLOOKHGKNLLIECEH?AI=8GD27GC;ELPSJFILKFOPGIKLOTPGEJD;HLCGMMEDEHFFJGHJKKSXSOOQQWXXVQTUMTZROOTQKGOUMDCGHJKKNJELSRQSTSRTUQUXSSTWYXWWXXZXX_^Z\\^a][_cb_aY[d\\\\bab``bca\\`ij^V\\aYSUSV]]^`\\[a^YTVUSRWZ^^__]Z^bcb`__VS]]^^]cb`_Z]flnlrrnknpijlknmirm^[`eYZbbrni^Zd]T]h`cy}wptwrwvwrluymoodnnb]YYdgdeedcdegnogmr__jdemffhefqnt|rtvuuunjvxvwrloqptwss}{ʸüɳӼʿôû|zwrz^fltjdgWZYSXVUMKJSXMKh~zz~zxxxwyxvussvwvtqoooojecbceefgfedcb`]]^V^ppr\\~wyzҷȻŞl׵׿ŶӺ̖{nrlmapbwrm_V_|hfZgkyfWVRpfS\\[YQ^kdjlOTlbW_Yjh^]YSX\\PFXcULM`TZDMUaLHL_fg{}`ioid`^TMH@7/0@R~rqNPGMshym]rolGtw~NrdZasxsgfcj|tk}vjstia\\YXU\\XSIKG=88>GLOU]^VKEGCBA@@@ABDFKNIDHONFACDCCCBBBBCCBCC@?<::<8/7-\u001e\u001c\u001c\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  !!\"\"\"!!\"!\"!\"\"#\"!!\u001f\u001e\u001d ,@LJGECADKKABZaLDOQNKMKPWVTK?49FLE97>>;?@AEKR_\\<:AGZbgjibXNKQNHCBMVX[[[WPE7<UN3VjWe_wjeu`VZJg{QYPnaH\\s}xL[yfsfjv\\[deyvyw_rjlIGlhRcRSips}xss{qi{}iVY_egbTFOqdUk_X]`gqR<NGH|yV^oc`MQ_gXUbqkXkjbWcZU^aa~\\Tdaabf`]cb]ceYY\\nl\\_c[iha^[hkmrng]_ccZJNed^abaafh^Y_VPSNSajnmnjirsqi[TUKCDDDEECCCCBCCCEGHIKNPPQRME;=HF>;>AG?7;:?B:>LGGGGNLLDKIBKMMJNRPTUQQPNLHGC?:6?DA@>MSUODDMD7::9ELB9@HGGLHDBIKOPE;@B@;=@8.6BDB:;EID7JMGFCGJC<>@<;BIHGFBDE=KMMMMI<=IE<4<A<<=825553228HLFFLG@GIBBHD>CDCGL:9IE;6=K?AEHLJFKMFHMMBJHC@D?B46:<:89??78=><:9877@C@=97:?AIJCBKPSVTQSVXPMUPELSJEMQHCFHGIIEHKOMQOLDS]JHIRK>FHIOPDFOMLACSONWRNQRIFKWXTEJPOOCCMFCFSTW]RMUSKLGITTJJQUOIHMH@>BIEDMKHIMi~~}}~}}~~~~~}|zz}}}}~~~~|{}~~|{~}|}FIGCHMPJFNMDA@<99;;5=FD<11009:7866<@9?FGFGMMLIHJJIJMMLMLKLIHLLGGNPMKFF<;MAGOHG;=HKHMWJ6>KIGG:;ICCECA=GF>@FEBCEMD@JKEEMLKLKNQRPKIKMJIFECFH@BH=9D@3;G?<IPRPJHHGEBJJBCFKNNHDCE@:FKCGMIAABFFGKD@JLIQRLLMMMRUSRONPKRXOKLRUNHMUJ>@BFKIIKGFMQPPPOOQPMRUQQSTVVVVWYYXVZb\\VY^aYYbdb\\[VU`aacceb_ad`Y]ijZPW[UNOKT[X[\\YWXVYTXWTZ^[]]\\\\[Z]bfe^^j]Q][Z^]`a`a\\[hohhpnjhkmhhjmoomqk[Z^_XZ\\cj`h`VhcS]lbh{xqvwsusskiv{ikrahnc]\\befikkfgjgptposrcgjdilgghlmqtynsqnlmiltqrwoiqxxxy|}ҿҹնξ÷~z}rsZjrwjedSXTPXVTKJDAU{̾}{}~~wsstttsrstttqpnnnlihfccccdddba`_][^bXdzp~Svn}`ٹǨ}ٳԾѿƸ͜zgvj~rdmcsk\\T_xf]UiivXRS\\qX_eWTQ`jfqcL`k`__Xme[^\\U\\[QE\\lXIKaZKLO[ZEQ^w}Ui_NRVOI>23<CL_pzfOPE]vdoqYxthejRgt[^}rqkoesgavlmtrc_\\ZYX\\\\VUSOH@:=DHMQTXSIFDCBA@>@ACEFHHDBKQJA?ABBBCBBCB@?>?>>><;=@8(+)\u001f\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001d\u001d\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  !! !\"\"\"!!\"!\"\"\"\"#\"\"\" \u001f\u001d\u001b\u001e+=KNID@?A;20IXV]_WRNKIPZ_hjdQ9/;JI<8;=<;9?MG=GQWK=CE@@ES`gpy|raRRVSMLKF?<?V]<:`cMS_`cdwOYWIroS[^YSjwgDs{pawsa~Y[`ku||y{i}lnIKtn\\hMSrtv}zq|oq{_TdqmlaPI^rYXaUWY`phDDKAa^NdgXWAW`\\O[eladi`^`gWY_ZonT\\g[^ef^`e`_j`WZbpf\\dZblg\\W\\illnnebddbYQVXZ\\_ediqeYbZHOQM]kligddosrohbaXICCBDFEDDCBBCDDCEFGILPUZVKGEAFHD66=GE:98@D;@ONIEGMJKFMEBKLLFMSSUPMRRRQMMKJD@ICEEGPVSJIGEF85<8BLG;BHDIMCDFILPTG>GFIBCC83<DD>=DJODHSHEDCJMB;>>88?FFAAEAB=KMJGLG7;IC?>CFCDF@<:::656@HGEGMC@HICCHC;@AAAF78I@<6=I@A@AHEFFB?EGB<KGAGA;<989:>74=@728;763444@C<:899<@GGCELPSWTQV[TGMYNGQRQSY^ZRRRRSRNPQONWOKBP`LEFQL<IB>MTEFQOKAHNLJSMHMOFBQRSOFSZPF?LPGHQVV`TGNWNLMGY^UNVYYUNPSLEDHIGLPJMPd~~}~~zy||{|~}|yyzyz~}~~~|z|}}|~~~}~~~}~~xw~EFCCIKNIFNJ@<:656688@JC6.455<:8:;=BB>GKJNMNMI@DLJIKLLLMLKOGFKLKJMLJKCC@<JCHLEC:?HJEHTO>=JMIF>AJHFDA@=EF=>HGBBGLCAJKHLNLMKLMPURNLNMKFEKIHLFEH=:B?5?H>?KSSLJHECA@HG<=BHNKDBBD>8EIDGKF?@>DDBLB:INHNMFLMGKPNQOIKLGPWKFKQSMJJPD7=?GJEGEELNKMMIIMNHHSSPQQRTXSSYWVTPX_YXZadZX`dcZWUR]d`_ffb`acd`aji[NRWQLKHSVSZ[ZYWV\\\\]\\]cb\\]Z]WTZ_ahf[^oeSZ\\Y^___`cbckl_anlhddjicglmompk]ZYX]XTe^WhZQllX_kdk{|tsttqmnmfeuwchp_fnb\\blgenqmlnllytwwwwlslfjmmmjppovojqohffflpimvlhw~{}ȿڼԴµô~~}tsrjXmtuhf`OXTU]VOFAQ{|xwz~yxy}yupopooprrrpooomkiijifedba``__^\\ZY[n`X_{r~klxtr࿺¹Ĵִҹĭô͞tsuizzonctj[Qcn_RWijoKRUkdRocRTWbgouSPfd]a]bl^YbaS[\\QG_s]GG]eI\\RYWav}~zwvwyHPJFKE<43AVaY\\jo^RNAhzi_sXi}gd[`}f[~rkkfrctNzklrvqjg^[\\\\\\_XXWUSMJEBCHMPQMEB@@??=;>AAC@=<=AJKC>=@BCCDDDDA>=<::9;<;>B:)!\u001f\u001d\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f \"\"\"!!!\"\"\"\"\"\"\"####\"\"\" \u001f\u001f\u001e\u001e\"/=GMPNIFCDHPJEONMNNBAQYT`wrXA4476776:=AGFNYKQT[uwmbapy|stmPDEFHF<65EZU;N^YBMXP\\jnCg{SI{bTis~YgvvyOLxgdzzZ\\Zaltxt{iSYw`qI^~{~yk{|YXs|oaQJhiQZXNRXcm\\JKCS{tJVdVTQIXYRT_b`^n_]ah_X[]apbYd^Y`ha^bf\\hjWW]kpabZ_li^UYcmjfohfgeghfYSSTX`ehok]e^CJYNReie`^]goonkileRIIFEFEEDDCBBBDCBCEEFGJR\\_]XSF@LJ979BI@<:AG>CNOIDIJFIGJ>BLLJERVRSNMPQPOMOSTOHOGMJMPQNIMMBC>7;7AIHABCDLH?CHIIQWG@MKLJML?:A@C@CGKNINKCECELIA;>>43;CD;>F@?AHJIBKG7:HD@@CFHLMGFFKJ>@AHCBBFKA@FHCCHD;??>?@8:J;:8<E@?=;BBEC@=CA:;LFCOD;;=;75<70;@8-5944/138>@::9769@FCCEHHMQPOQPIEMNGJMPWXX`\\VWWWUQMQQNPXJLBQ[TECNJCMD:GVNJQSIEICLGPCGLHFBVPOLK^`H>FROJR\\W\\YDFUSNROS^[TS\\_]WTZWOLKLNOPPRW_~}}}}|xx{zy{||zyz{wx{{}~{|~}|yyyy{||}}~}}~~|DDCDHKLGGLG>8434628DIMI;6?AAAAACGFIGHQMLOOLMJ<DLIHIKLKLLLREBKLMKKJIJACE=JHHJDB>ELICITOCBPQHE@DOLEE@@>CG=;EHBFKG@AFJMRPLMLMMRWSPOPQMFKSPOTQKIB@EB>EG@BKRMFFFC=<=FC8:>CLIAC?A=6FGBFF@;><DA<I?5HOGMJCJIDLOHLLDEDBORLIIQPMKHJA3:BHGDFDFNNIKJDCHGAKPNSSOOSYRPTTRMHRZY[[bg_U[dcWQQPW`a]deb]]cdaclg[PMOMHCEPPPYZ\\\\a`\\_a`bd`^`ZXPNX^`hgW[qbS\\]Z`a]]^afjll\\Zmkgb_hiabgjjiol^VRV^WR[T]gTSpubeidkyxqtrolhgf]`tp]fn^gka\\fmhdpqmpsnv{u}|xyqtlfkouqlqlnuwceooe_fhkicgpkl}}}Ľ̻ŽҿڼԾŨvyliq~eZgntge^QRPW[OLZyz}{uuuy|}|{xstvrkkmmmnnnnlkhfhhhhd`^^^]]]\\[XYvsSRssvvuti{þԹѺǫͥpuivyyvbziYOffVJajj]PUZrV\\rYSXZ^eyiIXaY\\d]njYZgfN\\aSMds]FHZ|gLg_frzpljedlAC@=808KV`nnXWhnx[VMBd~tTq_kxeuji[xyZ~tgXd`sb^t|uimux{xsf]\\^\\[YYYXWTRLFDBDGGE@?>=<;98;>><8447<@=68;=>>?@@AB?=<98879:<<=9,!\u001b\u001b\u001b\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001d\u001d\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  \"\"\"!!!!!\"\"\"\"\"#####$#\"!!\u001f\u001e\"-:GMMMNMPTYVB4@NMJF@>IA>Wp~lH63<E@6ER]r_ZbXo}l]\\bjquh[PgodRMP^K84:GURHY\\OAJNFTr[AtxPRr|QWvzm^tywlKbt~edyau|pWdnvxxf^kczRkt~XhrfWOicU[TLRY_`UVILsw^N]ZQWVUSPV\\]ZWcj]_e`X^\\^dkb_gW]ci`^hf`k[YYaqkd]VpmcUT\\ml_eoeghhkscPUUUWadikdhdDAZWM\\hb\\YW`fhgefmocVRMIIGDDDDCBBA@BBCDEFGJNSZ`\\_YNNM?9;CHEC@CKFGLNHEJGBGDC:FNLIKYVRTNLNPOLLQRTTKPNLIKKKJJMLA@D=:7?CDC>?IK@>DGEHUUD>LMILTK?BC?BAGEIKLOFADCHKGB<>?409BD9<DB?DDHH@IF5:HC??DBDLIBEPURDIJI@@@CE;<CD@DFE<<<;=A:=K76:8A@>97<>DECB?=;=NCEPJ==><73782:@<07;9907=@<?=>9557>??BCA@FMNIEEEGLHGIFNSTTUTVWWWQIJSNKTTJMDRVYLCIINLG??UUMRWJMJ?JML;LCCGAZQNHOeXBDOQMPZ_Y[KBMXR[XUZ[XU[__[X[]URSSSSVSOU\\v~{}}|{zxy{z{|}}||~{vwz{}~}{||~}zxz||}}}}~~~|z{~~~~~~DDEFEKMGGJF@?;:;96AMVUNF@IKJECIMOMKJQYQMNOLMI>JNGGIKFCKLKSEAHLOJIJJKAFC=ROKPLHEMVNIPSRJP\\TJE>CPPED=>;<F=6?GBOK@C?CKNRNLKJNLQVSRRPSNMSUUSYYUSLIKJJIFCFLPH>AEA<:<D>5;=@KH>B<>:1FGAEB:8=8BA8C:3HJBLC?GAAMJEJJE==DMKSSKQPMKHE<6>HJGEGHHLMKKD?BDAALMISOLNNXVIKOLHCOVU[\\`d_SXd_RPNMV\\_]`b]YY]^[`kfYQLFHH=AMMNT[]`gb]^`_ab\\]bXQILU\\_afUYn^S[^ZbbXY\\^ejjm][lhf_Zgi]^^^`amj`UOVZTSPVbcZZryjkhchuuorsjddccT]qj[dj`ih`\\glgalloquu}yzxuplfajoumilelro\\cnl`^dfigaciq~zý̶׾Ʊ}zqsluctz\\\\ekncfYTSSYQgõ}ux{xxxyyzxuutqjghgilllllljfeeggb]\\\\[[[[\\]XYzXSrvkwx²ɟǛϺ˨ˮovksv`|~k[Qmz`NLmjfVZRcmZhhSW\\UWjuUI]WScc_rkXak`P__URir]FO\\VQks{zwmebZKWd:4707E\\osmhgTPhqnXVLD\\yxYalyvuchxqZo\\}yn]Kccs]k|tkouy}uic``\\XZYYYWUTQMIA=:<=<==;86547::6432230--244545778::9865678:=;72+\"\u001d\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f     \u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f  \u001f\u001f\u001f\u001f     !!!!!!\"\"\"\"\"####$%$$#!\u001f\u001f!*9HMKJKMPPONGIQLB=BT>7Jde^q}~pUI@Pwy^edcSlmmaR;@A>MPO\\ge_NDVWMUceTQLBL]OS`NK@AF<TsKBuwS[nvOZr`gywwbVrr{hbybir}dfuo|tg{g|kuvr|gsaZffdZWTW\\XQURDc|hXR_^`TZXMTa\\VVXff__cS]a[Z`l`jeYbgg_cobcUTa[gnedUgwh^RXep`ZkfbeintoR_bZMX_bddhjQEZbPPfeXRQY`_^\\^hnlgc[OJHDCCCBCBAABACCCCDFJMOTXZ^^XRQI?@DHGECHMKCHKHEGFAFB=5HMKKT[URROLMMMGLOORTFNVJHLCDGJIIB>E<:8<>BB>@JA<DHEEMTNABNLDMTD<D?@ABHEIIKJC@AFKHFE><;527@D:9BB@G>AH>EB6;GB<=D@@E=:DJMQDFIF>@?CB48@>=CCC<898;@=@H01:4:;<457;CC@G=;:?KBGIE?>>;867:2;A?=>ADE7GNK=AE@9789;:?BA>?HKEABEDGNJCBHNNMNOTWVVUPIMQHLVQOODPUUQCGHONID=QSSQTJTLAKSF@M=ECH[NKDUbKDGQQNX`_[SFNUW[c\\ZZX[Z\\_^\\Y\\VPTUUTTYUNMl~}}|{zzy{}}zx{|}~}|zxz~}{}}{|||}}{{}}|}~}EFIHDLOIGIJJIJJHBBMRXTOLFMOKIEKRPPOQZYPJHMMKHEOJFIHIA;ILJQG@BIOEBMOG@J?>WQPZWOO[`WUUTUW\\d^PG>AOSDC><?=A=5;DDSI?G>AJLOMLGFJGJPRQQQRNQTPRUYYWZTNRUQMIGMOND7>E?::<A92::?JG=?:?7.EFAD@64=5=A8=65FB>G<?E;>LKEGGB8;IMGT^VTPMKKJ?@LMNNKIGIKIKLC?CAAENJEMJHKISQCFHIGCQUV]\\]caRS_\\NLHJRU^]YZXSPSTT[dbXRQJHI<?MKMU\\`_cb]]\\]_a[V_YKDKS[[Zd[\\f[RU\\[bdXTW]fdblbZddc[VfiZ[YVX]ih`YUZZVWW^caciswnof`boqipui`]__QZmc\\ffble\\[enc[ehoov}x|wwtoh]\\jjofffahmi]dle^\\^`eg]^qz}|ʷ¿Ƕ»x{osrp{kawsWbhkmecSKOYq~{|~yzz{zxvttsomljiijkjihhhhfcbcc_^][[ZZZZZXWjnOk}epϩӤϾʨƵqyirvgykcTrsXKXri__ZQihfd\\VYYPYsjLQYPTf\\anfZihXX]YVVnsYDW`Og{ywlopb[SOE@\\]54MQY]eqvpgiVPhwlVRIH]p~fTgt}mhZ||w[aevxwwiZBjle_|soruxvoljgffgd^ZYYWUSQOLIA;7679964432344430//.,*-/--.//112345434678:==5+%!\u001d\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f             \u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f    \u001f\u001f      !!!!\"\"\"\"\"######$%%$$\" \u001f %0?KQURLIE>DT[XSSPGQ@?XvfwaYSg^YkaEMa]`;<GSVg{vrddogRIJNWVG77IXaP\\TOG7<;;Zj<RnoQallJ]bVnxwpZdzpuqbcfnqn|}hlyuq~djelwkYZ[_aSNSHNntcSVfhYVYTObeQMXa_fa[_Pd\\VVai`oa\\ce_clia\\M^_]kjeaaxoeZW_kfWck[aejny_^mcSS`[[]dlaVfo^R^cSJNX[XUUVanlknkaZPDAAAA@ABAA@@BCDDEGILPTUSTX\\[WPKKJJHHKRPL?BIFEDF@A>77HLJKTWSPPOMKIKBGLHMOCMWGGK>>EHDF@=D8::99ADCEF7=JICJOOJGNSKCLMC>@=>?EDCEIGB?>AHGBEG?96898=D?7:<@I=9C;A?5<G@;<DA?<67@@HL=AA??@AA>24::>B@=?777:>@AB/1:24680349E=;C:;5AECH?=B?=96?>5.?CGPFINOIRZQGLNC<A><<<?C=:BIF?BJD@INF==JJJJMPYYTTVSRSKGSWRUQDLTMKHEHLRKC;NLWOLJYNHOUCKO>E@TTKEDZZIKEPQRac_ZLUYZZia`_\\]ad`^^]\\WNNRRUSSTVF]}|zzzz}~~~}|xvz}}|zxxyz~~~}~}|zJKMJJNPOJGQRLOQKEJSPMIIJDKNKJIJNMOPU[SJFDKKIHKM@DKDE?6BIGKF?:ANA=JL?>MCGVQT^ZSZc`]\\XVTZaccWLFBLWIEH@DF?@=?DERHFK=AIJMLJDBEBFMNNNLNPOKJPTUTTVQOTUPQMIUUOC6>F?9<>?61;:;FE=<9A5*CFAA;03>28?8:79A;<@9@=5>GHBAF<1AROIT][ZSOMQULLTPQTSNEGMJHNGA@9<GOFCKHCGGKK?CCGKDR[\\^YV^_PLWVGEEHNO[]TQQPMKKPV[[XUWTOLDJSKNW[`]Z\\^][[be_W_\\LDMS[\\\\ebbb]SS\\^ae\\TXcj_[jh`c][WRbjZUXXRYe]Y^_bb^aeiiimosqmmc[[kocmui]YZYNVj]ZieckaW[ar]Xcglm{~uxtutph_^jiobgcafhb_dkaZY]ba_Xb~~ǹǿĺʻqxw~k|vur`bxj[lihgaZLJczxtrtwwtrppomkmlklkigffdbbba`__^^^^^]\\[ZXWWTnUZ}qfwxyy{ôֺԯ׵ǜǧwhp{{sjhYxlXRbmf^jR[hjh]YWVVS`s]OQLR_eXdhb^jcQX\\YUXppPE_`OgqibcibSQL>5GhRJ`xmhefn~wlm^Ufx|gVOERdkzsUWjco]yrw_Ozpkfsb]<drPȶ|trv{ykfhjjkw}ueZYYWUSQOMLJG?5134113321112/.----,--++,--//01222244567<A9) \u001d\u001c\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f             \u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    \u001f\u001f      !!!!!\"\"\"\"######$$%$$#!\u001f !'4DQ\\b`_[VTW\\ei\\LFKFMOd}`hwyc@YrgHK`qI]gnqrtpxzz~qiV>@D?>G@3HORUWZJNA4:6@``6[p^EgjcDcQUpxreTfshjygegiv~htuztwîvjrh^_bdcQITNYfqdH\\o_PbKV[eWGRaf]gc`]ZdVTZcjbob_daZkmbcXUbZcngccrvf_YVenYZjdXafilmcoecXhbTR\\ikit}lZ]_MAJYYPMMQZgjhlmjlkYGCB@A@@AA@??@BDDEGHIMPSRRV[^ZUWXRKHHOSNK;=FEF@E?>;3;HHIIOQPOPPNKHL@AICGIDKSEDF;>DE>A@AD8;948CEFFB9DKFGNKJNRTSKGIHIDA>;9D@??CA?>>BCBBED=638<67B@844<I@7?8;=4;E?;<AC?;77<;KN;==:=@B>;3358=@<:@859;>CA>43:2.22.14:F;9@9;0@DCA78AA?>?HA86GIRXHNRRPSWMNSPDFLA?;@JC<CIJEEMPDAJH?<?ACIKLPWRQTVWYWJLYVTSJBJVIAIAGKTMA7MLWMBHYNVUSCTQ?CHUMNBF\\VPNFQNTbb\\PUh][bf^^^`nhb\\[\\\\\\SPRPTUMPSJK{}{yzyz||}}{y{~~}}}|yuvy|~||}~~zwPPNNRRSUNJUUIJJDBIQIDCFE>GJMKHMJJPQQUOGEEJJJIII<EI;AC8<DEIE=5<KD=CB;EQLVXQUYXW__[[[ZWQYa``\\VRIN\\VNTOMUKDEIJHPGLL=CGFHKI>AC?GLMLJHMSKBHOOPPNPMLTUKPQNYXRH:>G?:>=;23@<9CE;39F4*@EC<4,39-8=:97:=8<=9>64=AE>AK;0IVMKQVYWRRQSZZTRSPRWRIAFNHJFB<14GPB?IEDF@HOEE@FPHQ_e\\QLRZNGSUF@CLPPWXPIJLJFFNTTX]^][XSKU^ROVX^^WX]d[\\gia]`_TNW\\bddmgefbTTacbea]akhZZffcdZTUO^j[SW[QY`QR^aekjjmpnpnilkhe]XVei_jqf]UTVNVfZXhd`d]W[^q[[eilp}{wtsmpqohifolqciccce^efg\\Z[ad\\VWnþ½лoy|txputkYgwb^pkf`WRb}{|zxtuvuspnnllkjjjjigfedb`_``_^^^^]]]\\\\\\ZXWWU^j`hzat}v{wl~ɾӺӰɮȫŤoo{pks]yi``ii_giOebobZXWXX[giSQEF]g_UhnWXidLV]WQ`qfTM_aRbqd^aVNPQN77b}Ugqkkqotlf]bwydXOIYpryzbKa]qkzy}lpdEtaTg_[BQo\\ʨ}wrryxhikjkozeZYYWUUROMKLKI@60..///.....-,++,,,,,**,--../1111224655=G@+\u001e\u001b\u001c\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !        \u001f\u001f\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f         !!!!!!!\"\"\"\"\"\"#####$$$#\"\"   \"(8JWahjhd`]V_n]>AODKguriSǸXNh|]IYbISS]eed_vs]`\\9B;8<<BLLFKWaVHE:8=0FXZ>]xpNEij\\GmuGZkvj]Udsa`oik`wr~{xxpĵùze}jpegb[KI\\UVav^HgkV]_?`d^IE^df_eei__dPX^aj_nedd\\\\nfeeY[ZXjjc_lsldYXVgcU]l^XcbgojljngcqVKPaloryp`b`PEJXTFJJMV_aafiit{q]PHCAA?@@@@@@ABCCEGHJLMOPQT\\c`VX\\YVKCJQRH8?IHG>C==53=EFFGILMMNPNJHMC>FEGFEKPCBA;CF?<BBDI@=41=FCEECAKHDLMHLWXQOKIGHKIC@97E?=@?<;<>><AGD=7314750;@:2/5CA4;67:68@=;;<>>>8557NP=<:8;>>89:3469<=;A;7::;CA?;5:2*/,*/4>F88>78/;EA:49AABBEICEEMNXPEMOMMMLMOQKDKJBAANOCCGJIJQWRKJHD>;>;>GHHLNLMNOV[TLTWROJABHUH<H>DHQK>6MLTH;GSJcXKEWQ=BQMOUBIYTSKKPHRa`TMne]dhWW[_hnfYYYZ[\\XWVXVNFQO=ey~~zxyyzzz|}||}|}~~~}||}~zwwz}~~~|{}~~~}}~UTNPXWYXNNYUMJGABIJBAEG=:EKOGKPHJOOKQOJIIOOMJB@@KE4?H<;CFID:4;JD>CADRRO]WQUVVY]^UU^\\UQ[`^^^^YSU\\[VZZT\\ULMPMKPHNH>DBEILB9BCAJMJLHJOTH:GPMMOKLKHQRGJOQWSNJC@C>==>:.8C<7?E7->J5.@C>95-65,8;=:7:;7<<9937<@EAKTG?JSNKNNPNKMMMT]TMTKKZQME=LMDEA<11FOA8CCEF@KQKG;GVMS_dUGHMTMGSWIBJUXUTQMJILIFLSYX]efb``^VYc\\TYY\\^ZYZb][fic`bb``bekljqlkkdX[iieegjlkaY]_^^bXPSMXdYSV[U[\\LP]XYijhnolnf[dj_[ZWS^b^jmd^RQWRWaVWga]\\ZWY\\mX^fnvxxw{stlfpgkinlqpqekdd_aaiib\\^ZigX^sƷƾκ|s}y~rr}trrjaWhm_amk[Xcý~~vw~~|{zyxvtsqomkjkjihhggefgfda^^^^\\\\]\\ZYYZ[ZZYXX`al_rkpu{wiνͰٳ~xqptZxlfone[l]Tbao_VVYZY_gZPM@Qbg]Q_oWZg[CU^UVika[QboUcqd^\\KKVRS>afv}mt{oxkvjaxykYQRc}}pRehrwtvuwjgiHyvXNZdUPCh̸xsrrr{~sinrmjtue[XXWWUTSPNKJKJE9.+.-+++*+,,,-***+,,,++--../0111124676>JE.\u001f\u001b\u001c\u001b\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001a\u001c\u001c\u001c\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f    !!!!!!!  \u001f\u001f\u001f\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f          !!!!!!!\"\"\"\"\"\"#####$$###\"\"!!\"#):KT[``^TVVLFB7BJ8ByŬĖhŻjfcWNTUD<>ALWnwg\\VdhHB989;FMIKFLTIGD:?9:ILVJepgDMegSJxcD]`jaUVezp[]nkrY{}}xv}lƨɻ~u`thoaPO]cRTjsTUja\\gSNhb\\EHgaf`cdod`aO[`_h^liieYcmbh`WZOYjb^amld_VW[eVUakZ]b`ipjhiydsgMN\\hnmkfWZi`SU]RBGKKT\\\\Z]agt}n]RICBA?>??@@@AABBEHIJKKNPQS\\gg]VXZ_WNNMNF9AMJJ=@==26>EEFEEHJLMMMJGHD>CDFGCKPD>9;JE>AGDDJE<05EC@CDBFJDEMJGO[VILKHEIJHD@6:L?>@?<7<=79EI@6203/15-1:;3*/=?1776657;::9;<@=87.2MM<9767<=07A5438;?=A@<<;<>=C>782+,*)-1?D46;63/8F=43;@BCDEFJPJMNSEFIJHHIIJKJGDI?@DLNIFFFHJNSUVWRJHA859BBCEFEFGEHUYPPVQLIB=BFSD:F?@CNK@9HLPF;ELFfYDEWK;CPJUZEIWSMFQJFPaZH_rZbh\\QSYch``XZUR_^^Y_aLAGQ=By~}zxyyyz|{}~}}~~~~~~}||z}~}|}}~}}}}~~}}~}}~~~||~}WTKO[[YULPWURNLHEKJ?AGC67DKMBLNELONJOOOMLVUONAAILA7BI>;DGG?55:D?BMNPWRO]XRVWWX]]QR`^QR[]\\\\^`\\WYZWUXYZZURQRNNOIPJBFCHOH8:FC?JKFIHMSTA6JNKJKKJHDKKADINQPMJH@==<:?7/?D<6=@31FK78DAA?:495079>;7;:7;<8636?DHMVYTQPQMIKHGICBFEKYULTKDSMIM>DKFIA>63FN@;A@HKMPPXK;IUSVY\\MCKQROMVXMNV[^YSONQOPRRZ`cdeihcbeda^be__^\\\\\\YV]ZZ]``ccdjhfkonkrnlid\\bmkcelpld^^`]_Y]YQWUW[WTW\\ZYVNT\\PSfedlmhkaS^fVVXVQY^^ih`]OMUSV\\TWc\\X[STY^gYdjuztsvrqfdmbhilnpqnfkdd]]ckj^\\d\\ioqƿǺκzzuvvlqyqq{zl_WXeb]`daa~z}}zttuwwxvrponkiiihhhgfedcbba`]\\\\][[\\\\ZYXXYXYYZZacrqmrzdpzya|Žȴٸu}s~tUvohqfahS[]_iXMUZ[Z\\[MTHJ[_dUOcl`feI?T_T\\mgaX]uwY^od]cMShenavmuwzqeyyvYVYt|hr{s|pwrnk]lSnwWMQgRYChƥruurv}yqmrqkkzukd\\WWYWUVXSPMLJLNI8+*++*))***,-**+++--,++--..0110124677>IE3\"\u001d\u001b\u001b\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !!!!!!!  \u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001d\u001e\u001d\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f            !!!\"\"\"\"\"###$$$$$$$###\"\"!!\"$#+9HOPNI@989;?DLOEEWkǽʵwr`TLJT`H@6LLdbXi]RKKSJBA::ITMNPDFFEDC?E7LDCRNjkX?Ra^FOVEX[aaOXk{neUY{fktVyxsrsi×ĺm_wksfQYrfT]ogR^d^`fYbe`dLNh\\labbri_`Sacbg`klk`Xmhaf[UQFZe[YbheaXVX``Q[ibZ`\\almdftnj~]Xbmlkb_XSbmgcg^LKKEQ[YWWWcw}zo\\MGFDB?===>??@@@ADHKJJKMNOQ\\joj]WT[ehdSG>;EMLH=A?<28=EFEDEFHKLKKIFCA>BAFGAFNE<4<KBAEGBBHC73AE>ABAAKA@GIEGSWMDIKECMKFE@9EO?>BA>;<93<FF<41.3/.5.*162)(6=136433478;97<A:87(1IF;77569:.9@7317<=?ADA>=<;:C>761/+**,+<@15751*8B810>ABDDDEMRIKKK@EEGBDEHLGGGBA;GJJCA?@FHKOOPY]VRRG719C??FBBDA>FTUPTSKIE@>?EQA9DA>BLOI?ANJG<DJ?`Z>HUB:CJJU\\EIUQDIQ@DWaPKlbVbdPOR]a_]]TSHVeaYYeW>ANA4dy}}{wwxxz|~}~}|{}~}~~~}}|{||~~|~}{}}~~|zz|~}}}UQHO[ZUMJNQTTRQLIPNCGF:39BJH?LLJNQNMNOSRPZXTQHNQKEFKME@GKI:05<B?CXZTVRO]\\SUVVY]ZNQa]NS[[[\\^^ZWYYRRWXZWSTSSRSOJROGGGMK<5ALD@MJEGELWP8<JLICJIGGBDGEDDLLOKGI<::88;24CE<4;8.8JE8DHAII@=;648:<98;:7=:6847FIKWZXZVVQKEJJBD@;=AERWORJ<ILBLGAFKMDA><IQDEEBMRVOR^LAMPVZVZQGNTRQRYYRX\\[_XPONUYX_cfijjigdcdedc`bf`^ZWWYVTZXXYY]c`bjbaloijoife`^aif`ejme^agf_e]]_[a_^^ZXVY_^QNVXY_ghilgah`Q[aSUWVQVZ[gf\\ZPKPTXURY^RVYOVWdbblovqrtrocbhZiilljohcjfb]\\ekm]aqfvƼ̾ȸ͹vz{zyrtnnrtonspdYUY`]Y`fĿ{ywuvwwtrnllkihhgfedcbaa^\\\\]\\\\\\[ZZ[[Z[ZXWVWY^\\]_gu{~j~|l{_uƱİԻmñ}vyr\\wql{qafS`_``LIW\\YVURZXFUSW]LToobcY<Ve`I^pgXXwjikpafjKg{}wyix}}W]Y}~~phnXk^j|aNNaOQHȽw~wrz}vqtuqmmooige[UW[XUY[XQPNPNKLH7)'+*)(')'((&**'&(*(()+-..0111124689@GB1\"\u001d\u001b\u001b\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f             \u001f    !!! !! !!\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001d\u001e\u001d\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f            !\"\"\"\"\"#####$$$$$$$##\"\"\"!!\"##(4DMMLF@@ELTWPHV`kʴƲwwxqhZIFWiXFJWSx^_WnE@LHFG=?QUKNOFDDDCBBJA];@NR`kN@U\\HBVYDNY[fN_orc\\NP~hywrSŢy~qifhkcyyhwpYZ|oeda^\\^^_`f_Xefj^ZhWte`aqu`bUhgedbkmh]`ob`eXSEFZ`XV]bb]TUZ^RXdj]Y\\Xelidmre}r_fnqjc^\\Yammjkk`VPCL[TPOL[y|sv|n^OKHDA?>==>?>>@BCEHJIIJLNOQ[gnpj[Q[clsmW><GJHD?DB:7;?EEEDDDGHGHIHDA>>A?FF?>HD<8?FBEEC?AD<1>I>;@@@HD:?GHBGQPF?EHCDMMFDBALM=?EB@@<59BFE=98368140*++2)%193*243104:;5+:A96/$/E>9855574,:<91/688@@HDCA?=8<=743-.**.*87-537/(?53..?CDFFCEHMGJJE<AAEAAAEIEFE@=BFEBC<=AEGJNNQXYV[`U?69?@@@@C?9=EORQQMIFDCA?>L9;@B<BISTC?NHGDJI;VT;MR>5AFEPZBHUH@RE9HZTJ[_SO^[LJUb][`WOJMZa^W__H?LO5J|}~{zwwxz|~~}}}z{|}~~}}~~}{{~|yyz}~~}~MIFQVSNIIKNSTUVOLSPMMI>7=AIHELJNOSNOMOVVT][\\YUYXTNVYXQPTQRA:?CMFG[[RVUO\\^UVUVZ]XNN_]NSZZZ[[ZWUWSKNSSXVVWRUXUMMVQHHNM<4@MN@FQHDDCLYF6EFGF@LGEG??FLB<KHHFFK<75875.7ED<47/.AM?<LHEMJIF;7:<=?<:<;A?;<=7>MJLZ\\UVUXSLCFOD=B>:>DPWSOE:?JAIPAFTNKKMSSOIKDEUWOKWZJGOOWZU_ZJPUSSTXZRX^Y\\SMPOT]adhkmnlkhdceeddabd^VPOTVTTVWWXX_`\\`bY[gjehfba`^^ae`]ehga\\cklikecidfhhgdbZXbeXTW_jnlnplb]h`OX_SSUVRSSUgeXURJMRYQQYXSWVW_[hfmxvsnprrmc`bYjikigj^^kg`dbhmpiv|ǿ±Ʒßěto|tkqskotrollg\\UT[ZRZs}}}|wxxvuuusqmkkkiihfecbb``_^\\\\\\\\]\\ZZZYYYZZXWVVX`_ZY^l}{{{mmvjwʲɭнl|ǷvzyorptugdScchTEMY[SQLVlPIWb[QI`on^SCeobIbp^UtqezucpiWjkhy^j]pht`fjn}mOLXLEWɾwosz{vrsxtsogiklnaUVZXWY[ZTSPPNIIMG2$'('&$     \" \u001f \"$%((*-..011103569=BG@.\"\u001e\u001c\u001b\u001a\u001a\u0019\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f                  !!  !!!!!!!\u001f   \u001e\u001e\u001e\u001d\u001e\u001d\u001f\u001d\u001f\u001f  \u001f\u001f\u001f\u001f\u001f\u001f\u001f          !!!\"\"\"\"\"#####$$$$$$$##\"\"\"!!\"##&*4@IIGO^gbVM@G^irȾҰf`adbPDNggXT^kbe^hSr{ENK?999@JJGJKFCCCA<TU^]5=LV\\lFBSTBO]SAKYZfOfkiZUHKpglZu~ͩqc\\oȾĶlil|wdzy^ZxtcT[iX]`dgZFkngrhgUvi_aodeWlgfeekld^fn`_cVJDIZ]VUZ_^WQTYWR]da[VT[iifemesreglnke_`__gifhji_SJOZVFCCRqtflxvibYQHC@?>=<>>>=@DFGHHHHJLNOSZdinsi[Y_jqxs^GECCAAFC:B=BEEEDCBEDDFGGC?<>@=GF=:DD=?ACDFB@>@?7:KA697;CF8>GGHEGJKA;FHCEMMFDDCME;AEC@?<;AFFEEFDA@E?;62-,4,(166'(54.-3;=- 3?7-(%-?79627641-79:23309<>EEHG@=:89744+0))/)50)027..@,.*-=CCIHADEGEIJB:><CA>=DGDFD>AH@@HC;=BDEIOOQVWV\\e_I<=@>=>?C63<CMPMKIIDHRHA9H0<@D:DGTXHEMJJTUK?JE>LRE3=CAMVAHUDCV95MVJN]UFJaPIK[b\\]YPJFU_^TZcWBBRG6p~~}{zxyyz|~~~~~~~zz|}}}~~~}}}|}~~~~~}~{xwx|}}}~AAGPOIHGHJNRSWVONTSVQRI??EJMQNIPPSMPMOWZV\\Zb_R[ZYV`[\\]^ZU]GOJRWKKWYUVSO[_USTUY\\XONYYOSYYZZXVTRPMHLQQSUTSST]XJPYQJNRD5@QVKBMOGCBDOXBAJAC=EOFCE??GJ>:GF=BKJ>65:7/2?AC@56/1BJAFQHFMMLF@BFFGIDDEDLDAIC<CNHJYYONRTWQH?IJ9>B=>FPTTOGB?FCGTGKZPRVYaYKJI?JYRGHQSJFMRYYUd`LQURRPT[QU[UUPLMMS]cdhnqokifbceeddbba[RKLQSQQSUYVT``X__SW`fcdb\\\\][Z_d_^eggc^dkomohgnhhmqlmk`aehhe`hxwsrrl_Zd`QW]RQUWQMJOe`QQVJPU[SY\\\\b__fhilk{yz}rqrtsnhb_ellljgfbdmkhllpzyŮΣɦti~}p~dosmqsnmkf_YUXUM_~ywxwuttutplijjhggfda``^^^]\\\\\\\\][YZZXWXXXWWVWX`d^WU\\k~s~|̨̱ͽonɻu~nxyeXkhhLKU[VLMKYZLSZraLHZie[QDqqYgq_lychuphwrxrh}k}~}ilr}_ZqintqPMRL?|¬pkotzzpq{zkagnsufVUXYZYZZWUPNMIHKO?)$%'$!-1-,-)$\"!\"$\"$%&*,--/001355:>BGA,\u001d\u001d\u001b\u001a\u001b\u001a\u001a\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u0019\u001a\u001a\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f                 !!\"!!!!!!!!\"   !\u001e\u001e\u001e\u001d\u001e\u001e\u001f\u001e\u001f\u001f         ! !!!!! !!!!\"\"\"########$$$$$$$##\"\"\"!!\"\"\"%'*7HX[gmh`V@7UhnvüΧw~~ZQP[aQJXvjT[j_]tuQZbJJG;68;@ACDFHFDCB=MnjgP5<LQmj9COR\\]^R>RX^bNg``SMCSuachdzЮq[[sú§lmepb{~^[{yu_Q_m^k`kgWKjqbsrbVvi^`pgf`ofgjekja_il^]dREFNY_SQY[YSPSXOU__YWSS^hfdehjsecrokfdee___\\aiiaWY\\\\WL9:MhiZbtslifeWLE@>?>>??==@CGIIHHHJKNPT]ejovvpT\\rqlweLDAACDA@G?BDCEDBBFEBDFFC>;>@=EE=9DD<?BBBC=;=A=7QO;72.>D:>FLFHGDDG:9JHAFLKEDDCL?9BD@???AEFFGLPLNMQRGC?9961,243&'43,,29;/\u001e(94*&('<1690690**554/202;5<@BKE?;;71141/++)/)3/#*/1.86'+*09>ELIEEBEEHI@7<:B@;=FFBEC?DH?EKB;?BBDJOMPUUU]e`MAFH?9=?@18;?JNFHHIIQ`UNIL6;LF;ELTVWPIPS\\[RBB>FFVN89<DKQDHOJEV84NRMRQMDS^NGKY`U[QN?IV^[Q[dU@ESAO}zxyyyz|}|||~~~zz|}||~~}|~~~~~~}zyy|~:=EJFBDEEHOOPWSNOUV[U[WKINRWZQLSRROMKMU[X[Z^fTW[^\\^W\\fe^XeW[[[`WVUWXSQNX`UPRTTWWPJRUPPTYXVURQNKKGHNMNONPNR]UHSYPOUSCDSZWKKPMGFFJSUOPC>?:NPDA=<DGD:8CC<AJMG@?@<9=DCDC;>9<CCGPSJINNMHHQSPRPLQQMTOKULEJOGHTULNROVWREAF:9CFDGRVVVSRJNSS[UU\\UWVV^VLJG?LUKEGJNJHOUYYWa_NQTONJNULMTOMLJJLU`fgiorniheaceecbbcb\\TMOQRNLJR]TRc^V][OQZa`_ZXVXTR^cbbdgikjghpqqkktjhqxrrqlkirwplqxy|zqn_V]bXX[RPTWOHGNbXKSXQZ___cajrkprprqs}{z~}vywxvsrhcprntsnssoxssxv|ǿǯζǵpbz{myraotrrphjk_WUPNY|¹|zywutrpqnljhhfeeedda`_\\[ZZYZ[[\\[ZYZYXXXWVVUY\\`de\\VY\\o|vuw˧ҵȸwc¾{tievodUWYXKDKWZGU]XTZN?NbZ]NGXqpZmrcvypgktrknso}}{ĥyWSoh_prVOXODīulilysp{{rhehoqrk\\RSX\\ZYYYXRKKJIJOI8\"#\"\u001e,SUHIMOIC==?2.''('*-./01356<?ADA+\u001b\u001d\u001c\u001b\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001b\u001b\u001b\u001c\u001d\u001c\u001d\u001e\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !!!!!!!!!!!!!!!\"\"\"\"\"\"\"\"\"\"\"!!! \u001f\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f  !!!!   !!!!!!\"!!!\"\"\"#########$$$$$$$#\"\"\"!!!!\"##%'*<Semlf`^VLTwʽɯwzUEIZ^_]enrueXX~VUSMIA:8<JLBABCHFEC@Jlog[<8;JMygDYL\\w^]RD]YgTL`Y^JIN^u[by`wԴ}oT_~ҿprljd{~d^stnbYjrjxbrfYSltZqub[oh]dw{lljqcfnahb\\\\il^[cLCLSWbKMYVRMPSSE\\^USPQ[dbccbbj__ouheimmaVVUWclg`fh`XW?8K_]TZlrljkig`THA?@?@@@>=?ACHIHFGHJOPS`jppjjyoYfmcky|hKCCBBAIIBCCCFECDKKEEFGB<9>A?DF?;FC;>@A?;8;?DANP<<3,8E?AHIG@GD<B@6?J@<EHGCABBF:9C@>@BFGFGHJLLKLNPTKKIGG=7362-',0,*//031$)5,%(,(5-48373.-,/0.+,2?=565AFGD943/,0//+.)/)1-!(*,0=8$)368>EJKOKCDDEG@6;9C>8@LF?AABIBBRMA<EDCEOLIQUQS\\b\\MFOQ?6<;93:;?FHBHJLR]Z`e^TACV@BGRPVbTFRY^UWC>?NKSO=99FJKMIISIT:=LMQSF<LYUJIM[\\PUGJALSUVU[bTBKNEu~zxwxxy{{{z||}~~~{yyz||}}~}~|}~{|9;ADB>BECGPMNRQNQWX[Z_[VVX[`bWOXTQQKIKT_[YYQdTTZ\\]\\P[gg\\\\cYX___aa\\X\\TTPP[VJLNOQPLINOORRUROQNMLKIEHMKNOIKKOXLFTVRTXSPVZZPLQQPRQPTVW]S<G>>XJ>=8?HE=;@HJGHOXVPQSSUSRONKGMLNJHRVVMLRSSOOTVWVRSYWT\\ZTYSLMPGESPISRHOVXRCEC>JOKLVYXYX[TY`_c\\W\\XWQMWVMJHCINJDBIKINWYVWV[YKPPKHCFLFEMMJIHJRZckjkmnmgfd`cffc`cda^ZWSOQPKGPaVUaYTYUMKU`^YVVPQLL\\aegdglqvjfqmopovmiqsrqprrjs{toqtw}rq`SXd`ZUONRUOHCM_TJQ\\\\ekgknksytxxqstwy|||}}~{yxuunhvwqvvty~xϿ¿ëħl_xyhlh`nvttmahj\\TJJmzyyxtqpoliffhgebbcccca_]ZWUVXYYYZZZXXYYXXUTTST_cdb^\\b[\\uovm˶Ҵư~z}{zi{zŒ}soyxgeVRNBES]OEX]VFXQQ]ZVVDMUgt^XbpYZkzgmbO^jvwjpx˼}}fWmpUwucUaOPʫ}{ummt|wmkklklmmknqfWRUWVVWWYTLKLJILKE( \u001b\u001bAfdRR[cb^[[^LC;6.'(,./12356>@AA?/\u001e\u001d\u001d\u001c\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f     !!!!!!!!!!!!!!!\"\"\"\"#####\"\"###! \u001f\u001f\u001f\u001f\u001f !!!!!!!!!!!!\"\"\"\"\"##\"\"############$$$$###\"\"\"\"!!\"\"##$$%(6FHQV[YSSk~̹{^KKMdtiymYitp\\VTQH;528MYTE:;BGEDG]i\\XI8:CH^rl]kVguRaUUebfCLYcbGX`Wvt`|ohkռmRdȾtvqah||i`mrnkawus{gqkbVluZjri`ie^hzwpsppadk\\eZUYim_\\bGCUVY]CNWRKMNTIJZTOMNVcd`aa`bXTcyc]ksobTNTY^db`j^R`hN;O_VKU`defimmieZLCAAABBA?=>?@EIGEFFIOQRZenk`\\k~p[UY_fpj`TFCECHHFDBCHFCGQRGDIHA96>BADFB=HC:<==;9<BFDII=F;/:FFGIHH@;I<8B67FB7<FD?@?8AA7BG@ACGGBEHIHGFDHKGNEJMMLB?<83,.1+'+2-)00-,1*')+*/-2767++2,),+$,?A6/.3BFGJ</.50.4,-.)/)1.#(*+2;:-+799?BGNSNCCDBE?7:7C<5CPF<<?IGBNQE@GKGFHJFLVQKQX[XLEOSA5<95799BBBCKLQTYLgti_EQ]:HKSIW_OIR[gSXE>@P[MQC;<OKLOKISKT>EKHUHB8WVNJKP[UNL@JEPPPTZZ[SLRIf~{yxwwz{{{z{zz|~}}||~}yxxy{|}}}}~~~~56;BA>@DDIPLKJKONXVXY`[Z\\aacf[T]YQQKJLT`\\TXNZTSUS[ZKXgdUZ\\WX[X[_a`^_WYWMXXGEJLKHGGIGNSNOJHKJKLKFAHMIPRJKJLPIGQTSTTUXWXUMPQRX\\ZYZ[\\[JDTELZ@>EFOSKDLVVWVV[_^]_bilaZXYTP[^VKPZVXRQX[\\ZVPV^WSV_]Y``[[VQMNDDRJFSODKSXXINPKWTQRY\\Z\\YXYZ\\`c^WWUQKCNVMHJDDMOEBKLLS[XRRPRQHNMFE@@FD@INLIHOZ`fkihhiife_`ceda]cebbcb[TVWSOVaWVZSQTOKIO\\]WTSNKIM[`deadhnuibohkmlskdijlmjmreitpigms{{oobVV`e[SLMRTRF?N\\QJUdinnlosvwvvxumnpuwyy||xusvpjsxvuvwyŹƲԻ̺|iaxtec`anutsi]mm]WYý~~~vwvtqnnmkgeedcca``_^^]\\[XUUWY[[ZZXWVUVVWWUTTRSZkl]V\\d\\X`ms|pǚ˵zxu|ys|zuunwrpXNGKY]P;Jb[PLWZecX]iTLY`VYX\\hZh}doVQmmy^HNm|eutɰ~saqzUuwkZ_Moˤ}uolpqgbgmpnnlkqunaYVUUTUTUTPOLKKKJI5\u001e\u001b%LbgYS[`dcfipa]RG=6/+-034456@FA<7/$\u001c\u001d\u001c\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u0019\u001a\u001a\u001a\u001a\u001b\u001c\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !!!!!!!!!!\"!\"!!\"\"\"\"\"#####$#%##\"\"!\u001f   !!!!!!!!!!\"\"\"\"#############$$$$$$##$#####\"\"\"\"\"\"\"\"##$#$&*/7EQSON_zȸÛ}dLI[soqnoj`VQME8:IRZehXIGECDHQRPPK>9FPSsqqgl\\cmMg~[dml^:TWo`Ol[Rvwm|mzl^wtMfǾqys^ox{l_kqnnj}xwzfn|jPgq_jqi_afhjwvtysj_agY_SOWgl`^\\EC[WbTCPRNFNKREQROKLT^fa`^__[NUriVeql_UOT`d`^^aYPi|fLZf_RQUUX^dlonli`TLHA>@CB?<>?>@EGGFDBDMURZnsg[[tmV\\]^`ad]NIIIIEEHEHKGEISTIGPRE;9>@@EDEAF=6<<<;:?HFDGBG=4?EKPODED9<G6:=1<F:4>EB>@:3E?<LMGIIF?=GKDADDCJFDH@ILKLJIF;98?<5232('140-./)'*,262233$,1,#)+(3@6,+/8>CIJ@1/<=3601/*++30'-/02474-3<;:>HQRMEEEBC>8<6C<8DLA8>HLHLLJJINMGJIFIXUILPOSTI?ITF9<84886?<?ENPPNKMlrncLVY9JOSEVWKVX\\m]XGBDJcNQMEDYOJQMGNPSDLFIQB@>YMIJNTWNLAAKKXNJV[VXRTQ[||{xx{|||{zyy{~{{~~}}xux|}{}}}~}}~}~~12:@?;=ACJNLHDMSMVURW^YZ\\bcbd\\Q_\\TPKPRT`^PRSTSSRMYVDTc^KUUT\\VQUXZ]]aXW_[]]QJLJCACFIHQTMMGDIJJLLE>GNJQRIHIJKHJRROPSWUSSNPQPW__[Y^c]RKU^T[VBNY]c`VUbd[\\_]]\\\\]aiqmaZWVSR]`UHRZUXTV^`bb[S]dZTWbc`a__ZZUOOFITLKTNDJTXVO]\\S_UOSZ\\]^ZWVTVY^]ROOLD<HVLGLEGQPKIMNQWZVOLJJJFMKDA<?DC=DPPIIVabgjedddbde[^cb`]Z_bacef`Z[[ZZ\\_YSSRMJJIJKW^TROMHGP\\`dgcafinlcofeihmg^_ahhcem__pl`^inqwlmb[Z[c[UOLRVTC?QZNQ`ommmmnrzytvvmillquutv~vstusomozzv˿ʶٸ˺}{qffyqecdfmuute[rm]}ÿ{z|}}}~}~zvsqppnmlkjhda`aa_][Z[[ZYWUTUWYYZ[ZXVUUVVWWVUVWYbmdRYcXT`[soysȢu~ttyuzrvƜǫgrqi|zdIUrkY<8^fTXPNfg`Y\\h_GUW]cbeak~tnsk~py}[CDG^of}}xvoz|Xrzg_ZZ|wngilljmpsttsonrpe\\ZXVTSRPORPMLLLLIE&!0JXb[PV]baacfdghUHEA7/15656:CG@2+\u001f\u001e\u001e\u001d\u001c\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001a\u001b\u001a\u001a\u001a\u001b\u001c\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f   !!!!!!!!!\"\"\"\"\"!\"\"\"\"#$$$#$%%%%%#\"!     !!!!!\"\"\"\"\"\"\"#####$####$##$$$$$$$##$###\"\"\"! !\"\"\"\"\"#\"\"$&),3CQW\\l̽fmaQjrmp~hgZT^jnsy}uzqd\\QOKRMA;A\\Y`vxibjUYoMhioskW:eTq_VrS\\kup}fpw\\wuпGjùf}sivs~o_gspptww{w^oiLiiaona]\\eojty|}qe``bVZLMUbie_UEE_XfMGMNLDNKMIPLIFQW^h`\\\\Z^PSbvUgrf[ZZZdg_^ahg^n~l[foiZOOMLV]`fmoome[RH@=?AAA@@?>@CGIHBAHVeabsky}c^aa`\\ddVSIFLFCMMPOIFJRQFIUSHA?A??ECD??64??><:>BAFHG>;GKKUSGBE=5AE7<63AB97?AAAA;=I?ERNKOL@:?JH;;CAFKBEECJIFKNNIAEJOKDC?2'/9664,6(%-2:?2,-3%,.,#-67::/+346:?FE?67BGA6;752-39337997598-2D>5;HQNKIGECA98>5A>;DE98ENNKHGOOLPOKJIHV\\LGQOJOOC;EPHDC;/569?<>IQPIFG^fdnkVUP@JQSGTRJb\\\\he\\QNNC^TQTUL[TCSI>NTPLT<PED?JTFGIPUPLN8ALN`MESXUWPOU~z{|yy{}~}xy}~}|}{~~~~}~~~}|~~}}}{z|}14<A<8?DFKNMFDQTRRQLT\\UWZ_aaa[S_\\UNJUUSb_MOSPRRSPWP>Q]YFRRM]PKQUUUQYVS^b`b_UOHBDHHLNPPLNICHJHLNI>DOKPSKFINKGNVTOPVXUVSQTPR[_[Z\\__VRX_^^_VR]cfhb[^f^S\\aYX[[Zbjjga[SMLPXYXNLQR[ZX^bcbaZ^c]US^da_ZZVZ[TWRUXUVVRKPYXW]h`Y\\RMRY\\]^ZWTOQW[ZMJPLA=GQHGNHPXVVQMQQSUOJGDCCAMJA?8@CA:ATZRT`dcgfbba_[bcZ^da^]Z\\aabed``a]\\aa_[SSXJCFEHLY\\OMHNEER]bhne^gjmremd[d_fd\\XZcc_`i\\WliZXfgiuljb]\\Wc`UNIRZSAATYS_lrhjklnnyyruujglhltsmv~~~ztvwupo|~}ͻʴŝƶy{them{kfdfkmqtt`Yr|{{zyxxxxxxwtnllnmlkjjhda`___][[]\\ZXVURRTTVXY[ZVUVVVVVUTV]bX`l_Xc\\S_Yy|poryp|zzortrt}ʴØZpieFuxZ?Ib^WZFMdmbiW`fM[]qouwtyxy}oSW:P~~invYx]eYsƻ~xtqppuyvnlu~{qikkc[[\\XVTRPNNONLLNNGL7$6BOZYPRW][YY[amqcPIME:3236=CEF@1\u001b\u001b\u001b\u001a\u001a\u001a\u001b\u001a\u001a\u001a\u001a\u001a\u001a\u0019\u001a\u001b\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f    !!!!!! !\"\"\"\"\"\"\"\"####$$$%%%%%%%$#\"!!     !!\"!!!!!\"\"#####$###$$$$$$$$$$$$###\"!!\"!!!!\"!\"\"\"\"###%')+1=DY̿oqxccwptjYy~{utuje]RXaL<D[i_dt|^_lJXsNcptldJFwNq\\XtXcbhe|e^`ktyǸApw^}uwywmceyunxvpmZzfMl`_pe_]^gqmu~|rfc_]UUINR\\fh]MFHbXbHGIOHFJHLRPJAMXS`g]Z[YZO\\sg\\sgZZfcgg\\_jmnmqvmfkrlXKSVMMW^agsuokfaWKA=>?ABBBCCCDFJQ`nzzc\\`ng`h`XIERH>NSSMGGKOIDLPOLJEE@>BCC;;46ADE<<@DFII@<IOKTZH@GB98DC<<29@=5:>;BACFKGBOQKLQI<<AG@6;@AGF?EEILFDJOMIJRVVUPRK:.46666+8**38;<6..6/,04-:HFC<6?:744>EA=7=DHL;@ACA8BA;FFGFDCGB1;MC6<HMJFGGEC?59>3@?<C=3=IMJB>MTJMSOLIMW[SGKRJFMK@9AOMMMD107@@?@JPLAGTbWZmx[WMJISRLRQKfU[]aa^[SAW^SN^SYU=QC9UYOVT9U8HATKBGHPTHLR?CPM`JBQY]SHKq}~}|}~zy}}}{}}|||~~~~yx|~~}||{|}}}}}{wvwy}77?C9:GIHKLKFGSTNPOHUZMOX\\^\\[WS]ZSNKRNQa[NORNTRVSTL;SXSHOSH]OGRUUQHPPOX\\\\`^WSJENUPLOMHKJECHLJLONGHPMPUOJPTOJPXVSTWXXVUWURTYYWY][UQZ_Z[\\ZYY]b^[ZVX\\RTd]QY`YXdhchgWNJJNVUYXIISce\\[ab^`]YZWNMZ^[[UUTW\\[d``[^`Y\\UY]U[hd^[UOLOVX[_ZWUHIUUXQJTOEEKOHMQMX^^\\QPQPQMHEDA=>@JE==9@B@>H\\ecbecdf`_a^ZX`d[ad_\\[Y]``beedeea]ei`]Y_`OFFBHNXSIECLBES]fgif\\flqxjgaV[X`aYUVZ[`_e]SdgXTa_dskgb^ZUb_VMFU]RCFY_[hkjihilnmttmstefnhkpnmy~zy}|tuz{}|wzy÷вùհͿò}xtzdbszfgfhljjpn]d~{||{{z{{z{{{yurolllkjihfdca^\\[[[[\\ZZYTSSSRSTTSUVUUWVUTSRRRWcb\\hgW`cdc\\fuqsqsøƻŎpwpx}o~yÐkcrn|VXoVXp_T[FOjqio~~jso~uplzq|_G<h|vwv|rjx~zrYVeXžzqtz{|zvojtvpmifb\\^c`YXWXSNNOMKMLHJC,7>ISZTPSZYYY\\crsgZQLKF=21=IHB?@9$ \u001a\u0019\u0019\u0018\u0019\u0018\u0018\u001a\u001a\u001a\u0019\u001a\u001b\u001b\u001c\u001b\u001c\u001d\u001d\u001d\u001d\u001d\u001e\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f      !!!!!\"\"\"\"\"\"#\"#####$$$%%&%&%%%$$\"!!! \u001f\u001f!!\"!!!!#$$#$$$$$$$$$$%$$$$$$$$#$#!!\u001f\u001f   !!\"\"\"\"\"\"$%$#%')*5Q_sžrflo`nwȸ{xqpmlib```Z^QHajihhqrPdkEfmK`ukaYCinIlUZ{aej_[tiVsjkkGvq}cx{u}mci}wi{mn_bv[UjX^iZb_frqovztje^\\VQGPPYcfZIIMcY\\GEHPBIEDPSKEEZVSh_X][`QUit]pi\\Zfgee\\btslkouriikleY\\c]UX\\]ctumijif_UJ@>?@BBCEFFEH\\z}zedq}kdfaRJVK=JPOHCFJHCGLKILPKGB?@A@<>8<FKKBEJNNMF<DMMLQL@BF>:9AC@<3::81<9:DCJQQDGQMINQG?@AC<7<>CGB@CEMOFGLNLIUZX[[X]RG<8630+,8157?9:@;8<>7?FCLQPM@EP@>65BAF;7>BFK@CHLMFJIGPOTTNLUO>GSL;?HIGEEFDC>59>4?>>@61ANK?7DSMGMRQOMPURLIKKEDKH?9=KPRTO=49GAEAILG=P^QJ[mx`ZLQGSZQQPNcMVVYab_TITdYH[ZVT:HA<Z_Q]HAS7DCTDAIJRQCNRDERI]HCRZ_Y>V}{{~}~~|{~}z{~~}~~~}|~yy|~~~~}{{}}|||zxvwyz|}<=CC=FOHILIGDIVQJNNESSGLV[ZXVPN[SPLMKHPYXNNORUTXRUMBXWQKOQD[MERTVKIPJMUU[]SPVRIMWTLLLIKGFEFOPOOPPOQOQUPOWVQPSXWVWWYXTVVRTTVXTX^XQV_[UZXVWTXZQTUQSPScbNN^^SZgfbiaOJJKPWVX]TMWij_Z_a^]WVTOIITWTVSTTRU_ha]Z`a^b\\]_V\\f[\\[SQKMQSY^ZXTFFOMRSRVQNOQTVZVS[``[UUUSULHLHC<:>FA::?IGGOWdlnkedeb\\^b\\VU`d\\ba^\\\\\\_abccfhifbckla_hnfXTNCMRUJHEGNGKR^ic`g\\bkqzn^`YXW\\_XSTTVa^`\\T^eXQ\\[frkgbaWSccWKM\\_[NOcfbiegggikomoomrsbfogghlt~|xz{wy|ļӻƳǽ}xk`]uxefgfghhmmp~}|yyyyyyy|}{zzyuqmjkjhfedb`\\YXZ[[XWXXUSSSSSSRQQTTSSTTSRRRRT`f_a]VZannSZxwvwОkzy|uk͛ˬ_mt|Zu{_ggZ_IYs|zjpbx`xhgxz^Tfwl{vwpj~|zqZ|V^[̻|psz{vnnnkzpippigebfh`]_``[SPQOKKJJII93:CPYTNQWXZ[X[eWPNLHIKG=;EEC?BKJA%\u001a\u0019\u0019\u0018\u0019\u0018\u0018\u0018\u0019\u0019\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f   !!!!!\"!\"\"\"####\"####$$%%%&&&&&&&%%$\"!! \u001f !!!!!!\"#$$$$$$$%%$$%%$$%%%%$$$#$$!!\u001f  !  !!\"\"\"\"\"$%$#$&+4Fsϼ]a˴~vhx|źzwsikidb_^^]XVR^qcbofa`Ok`LtaFgmbZOKTNbXXzeipg^glWo|nnY}~olwmy|oxlapshx`q|Xo{jV^dU[_\\c`mwqoy{vlgZ^UMHPMV`dUGLRbYXFEIJCEAITMGGP\\P^hU[``_O`sidq__^e\\a[f{ylmrtohegmmhioqkca\\apsebgkige`VIB>=?@CGIJIJS^uztsrommp}zx}qpl]SRL?GJHEACDA=GIGEGROKEA><<@E@ELOOMMRSQOKFIMMFB>;=@<:7<CA;38774<7@CFNRKABKIFNPEFE@?;;=AFJ@>@EMKFJJMJO[YW\\[Z`USLJ@90*085;;A;>HFAELHNQSVPOMGSQFG<<DBL;:>>IB?FIMNIIRQINZYMKXSIN[TBDDHGFIDDC>4797?>?803EPE5?OPIHKQROPPONPKFEBCHE@<9FRSYPEB=GEEAIIACWU<M_hof[KTLRaPRNQ^MOPSV\\]YQV__NWZNS<??>\\]RYALO??EMACJKRNENMFFMEYGBPZd^E{zwxy~~~~}}~zy|}}}|||}~~}}}||~~}}}|zzxxxxy{||ADGAETOEJKFD?EXNIHNCTPCHTZYUTILTKLLKHHNRULJNSTXZQUQQWYTKMODSKCRTQLOIFMSR]^QMRTNKSVPKNPPLLKISUONQQPPNQTPSVRSTVYXXYXYUPTTRUSRSSY^XQZ_SRYVVXRTLLZSQSP^gSIY_POckd`b[PLMMUZWZacUXega[]]^XQVVMFFSUNOQTPKO\\bXSXYZc_W[]W[^U^ZTSJLNPU[YVULJPRSRWXQRQW[^c\\Y\\_a[Y]\\W[TRYRIC?BG@;@JOQYacipqkbcfc\\]c^UU`dZb`_^_`bcfeagkibafonb_qvjcd`MPYVMOOU\\]ZX]f^_f_^ejxlX^VUW[^VQRPYf]\\ZX]bTMZVeqjfcbYWccZRZ]cgZXjhfhfjiginonokkrs`epgghowww˹¼¹Ǳ¦~|xc|~[]xwcdmfbc`pû{wvvvxxxz{zzzxwtomlkifdb`^[YYY[ZVUUUTSSSSSRQQRSSPORTRRRSRS\\b]`XXdhhpPTضysvy~ufȹӣֵezaz{v]uscKQo{vuxnZlqeyTN[gp|trypmh}r~znXwWYbposrjfloqsxkktsihjhgc]_ba_\\WTSOKKJJIKC33<JSOIKORQNIIIA>?BFIHGEE;<<BJU]F1\u001a\u0018\u0019\u0018\u0017\u0018\u0018\u0018\u0019\u0019\u001a\u001a\u001a\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f  !!!!!\"\"\"\"\"\"####\"###$$$%%&&&&&&&&%%%$\"!     \"!!\"\"\"##$$%%%%%%%%%$%%%%%$$$$$$$#!! !!!\"\"\"\"\"\"\"$$$#%$+>RNmÿfU~zҿtvkaeecb_]ZVTTRg`^]cXc]`gbVsUHo|aaZJ\\GQd`V}epuubVk\\l}ot~tlpaq{tu~ivpilokp\\sqZrmd[]`WX]dddsrnq~|zqnfXbSKDNIQ[cRENU`WTDFGDF?CPUIHQTQOf]WcecVXpoapdf^]WY]g{ynprqolediqpnryyoc[aomgfghgffgfaVI????@BEGIKG<Fjoh`ZV[lwz{zdb_H@GFDB>B@;;FEDCDQPQLDA<<BGFHLOPONSPPOOKKOQA><37?::6:DA857689::GCILKE<<D?ANJDLHA@<@@DJH=8?FJEHIHMLXXSTVVU[VXVULI@<=<:?ACEDMKHMMMPURLPKFIXSFIFFGHG>A?@L>CJJLIEIXPALYQGLXPHO`SAD>JFFICDA=656<?>>2-7FI;;MOJDBIPKJMOOQPGCDBDFCB>;DQWXHFNCEK@@IG@MP@5S]elc[KTZQZLSMQ]QIFMJS\\YS[Y]TXXGS@>@@^ZSJEPLB@GIBDLKRRKMJEHABVGAL[^Zp|uuw{}}~|}}|||}~}}}}~|~|{||~~{|}zyyyzzxx{||}IJGCOVHCJHCC;AVLFBNCPM=CSXUPQEINLHJIHKMPRKGNQR\\XTWVWV[UNIOFOGCP\\PDNJCGQZY\\ZOKQSRV[ZUUTWSRTOSVMITTKLMRUOSVSRRUXXXXVVUNOQSTQMMRW\\WQY\\QQXQPURMFQXOSX[b[MV`VIVjh]Y[\\[TSX_b__ai_V^dcYYZ\\WMTYQEDQVKELQLFIYaRKRQTcaUU]YZ[T_\\URIKLOTYYWVVSUYRJPWSPQYYZa]ZYZ]\\YZ[Y^YZcZOFDHLEBJRT^ehijppg^cfd]\\b^XV`eYbb_^beefggcege_]flkb^qtliopZU^]X]_ehol`]f]XgbZ]_nmXYPRW\\]SRPPdj]XYacaTQXTdmjedgc]ceZZa^fg_`igjlilhejtqqqgdos`dogflvz~Ȳ־ǵƼyzvau~dezxego_Xct}zyyyxxwxxwwwvvwurnljec`^\\[YYXXXVTSRRRSSSSSQPQRQQQRSUUTTRPWe^c\\]~yscəѰöq}e||cĴצټtnf~zobt|Xgwhokej|p^`[`zzxjnnldltpxsuy{m_y]WjyκƷstvqjgilnpqtsurgegda__^^^\\XWURNLKJJJJG9/4@KLECGHC?>=;;<;<CHFEEC38=DKSTN#\u001a\u001b\u0019\u0019\u0018\u0018\u0018\u0018\u0019\u0019\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f !!!!!\"\"\"\"\"#####\"###$#$%%&&&&&&'&&&%%$\"\"    \"!!\"\"#$$$$%%%%%%%%%%$%%%%%$$#$$$#!    !\"\"\"\"#\"#%%$#')-9oU<pʽ½~oyʐq˻wmkb`baa`^ZWSRRS\\OcXOYnag`i_pOKsmYjaElBQlaZdp}w`Pl[etnz{Ũgpiaunyp{|th`vuwogjig`thakc]V\\XRXagcivkjtxxpgna\\fOKCNJNX_ODOV\\SLBHC?E<HUOELTULWcV_ig\\Wlu`infdXYSadtriornllkhhnpms}~tkgijfcgjkhebdgihaQD@??>>>AEIJFAMxvU=76B_syulam\\CMHEC?CA9;FCAACONSQLLEBDKLILOQPPNHJNPOMQTEC@5<B=;4<E?3788;=;>FCGFA?7:=7AMBDOHA@AB?BFA6:@HFAGFHNQYSOPPPOWRVYWUTQJFEFLGHJKOMNRLIMSKFOKBHWP@IKGGMAHJDIKDLJLKDCKVD?JOHESRHGPZI?:?LEC@CC?<66:>>?:2-9C?:HNHB=@JIBDJNRLA?HJBFEDD??DNUTCGSGIK<BGCIOC0AQXfh^ZMQ`NQHNJOXOG@FFKYRR[WXVS]GUFENF`XUBDQEDCKLDFLJSZVNKFG@COFDHZThyttw|~}}}}~~}}}}|||}}yz~}{{{{zwwz|{|~|ONLOWO?DKGBA<BTLGBOHKG8DQRNLPINJRHHLJOOPQKHMSUYSWXTXV^YVKNJPEFP[QBLLB>L]QPZRHOV[^``^\\TRVUVUQRMENUNIKRSOTZVNPTSTVUQTWPLNNMLHIOSZVLPUPOTMKMNKEQULT^`ZOR]\\RQaf_ZTT[^\\beghea`ibWZae]XZ`\\PR\\YKHJTP>DLJHKZ`NHPNR`dZT\\\\YYT^\\VPHKNRTVXXXXW[_YMLPPOPYSXaXUUTWZRQPT^VV_[RKHJMLMSW]gedghlla[ddc_]][]X_fZce[befhjfgbcba\\Vbgic[nnginueZbgcijklmqjefaR]bTSVbk]PNUWZZUUQZmh^Z]mk`Z\\ZVbehdcli^be\\eb]geikkjnmingejtqoma^ipadminr{в³ö˻|vvesrmxzkfh]f~~~}}|ywwussttttuuuvurqolfc`]\\[YYXVVUSRSSQRSSSSQOPRSSRRSUWWWVTYf`fieչŬڽûvz~`ðpb̰ӧut~|tn[q}psmkvSgcwy_n|{~jesregalmxz}tu{qwzpkvykZksųŪ{yrmhhmqwvomjgfc`afe_[[ZWUTQNLKKKKJI>/.8EIEAAA?=;;;<;::AFEEDA17>CIORC-: \u0018\u001a\u0018\u0017\u0018\u0019\u0019\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f!!!!!\"\"\"\"#####\"#####$%%%&&&&&''''&%%$\"    \"\"\"\"\"#$$$$%%%%%%%%%$$%%%%%%##$$$#\"!!!!\"\"\"##$$$&%$$(/9PgȲ՜{~m]ŷxxib`a`^][YVTQPQSWRjZNhj_j_dgoMLm^VucB|x>Oucbxaoj]^lQdtj}v{Ϫygq\\dojljznubq`xkvllvdffgvedd`QP\\PMZge^lpfjtzutech^dhLOGQOOSYPEKSXOE@F?=C;OQJEQRQP`]YcoaQf{g]sbmTRP_fllimmkmokhippjnwyqkihgfjokhfecbdfiicWLC@@@@?@CFGGTr|wrjK4<FJOcvz{vuvm`fvRQOIIEGH@AJGFCLRMSTUXRONQRNNOPQSKJLONRORSLIGCGJC<4=E:.98;<=?@A@@=<:3695CH;CK>?EC?;?<<6@BF?AFEHOTRNKNPNJVNPZXVVWLEKRTKHKMQNNSIEJPHFOI=HXG8HKIHHKPMIOJOPNQIDFLK;FGEEJSIEHJQE;7DGB?<H@;988>;?C60-5<9>ID>9<EGA>CMTL:8@LKDFHGDCDHKNPDLSJKE@ICERF53OHSe]]XPJZKKBHDFPLF>@DGQMOUUUQJaIWLT]QdY[JHQGLJOLCEGJS^_TPFBAIGGDFVX}wvx{~|zz|~~~}}|||z|{{~}|{yxxz|}}~}~~}~}}UUWZXKAFKFBDAGUMKAQKHA5CLLHMOPTKSNNOOURPQKKRV]TUSTTY[a^_VQORFIRTNIMM>9IUMFNOMSZ]adb^\\RJTSOVPPNEIUQEJQLLVZTLPSRSSRRWYSNKFDFFHLOSRHELIFMJCDKLFNSKS\\XOKRXVST_^Z\\VRY_ajjhhda_eaYX\\fcY^idVT^_URJPXC@HILR]XLOQQX]a`XZ][XS\\^YVJKSTSTVXVSX]]^\\TOMPTXPX`QOTMQXLHKPYQNXVTPKILNPWXci_`bbgi]Zc^``]YY_Y^eZcf[`fdfjegc_^]ZR^ee_Wlibffjg]_kjhjehgmkkf^PQ\\PLQZg`LS^[Z[^^Zemfb_gskded\\Z^^_^cmh]ccegablmvxsrtplpggiomlh\\\\gkckooȷçtyls|ztvzk]j|}~~}}|ywvrppqrrrrrssqpppmhc`^[ZYXXWVTRRRRQRSSSRQPPQRRPPRSRX[]f`uhf{Ѿ¹̹Ψ͹n{e»ipʭɧؼǶ|xearvwgvo^igwdyzmacuvb`ccgs~zyv}q||yp{vqkhv`goĶ{vspklpzwmecefd`cge^[YZXURROLKKKKJKB1+4ADB@A@@?=<<<;;;?DDDCA24<EKLNRU6\u001c\u001a\u0019\u0019\u0018\u0019\u0019\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f !!!!\"\"\"\"\"\"####\"#####$%%&&&&&&''''&&%$#! \u001f \"###\"#$$$$%%%%%%%%%$%%%%%%$$#$$$$$###\"\"\"\"##$$$&%$$*;DfحҺĬ}ݨ|gɾtoeeb_^\\ZXWTRQOP]Z[grZrddt]XqrLNfUU|[Fg=Qwgfj`z~^cw\\Qh|uqzx˵tym{sUeje_hyjxripikqdmhof`fdtp`^_[IRYJL\\i`]mfginsuo_cd^jgPUKTVRLRSFENWN?AC<>@>XIFJROPWaZ[jm][uw^mif^NNWb_felmjkmligjnjefknlhebaismdcbdehiggfc_WJ@>?ABCDEBGnvcTDLlzpNIZ^bfiktyvnfe`zqNTLNMNRMOROLMPSNPVYZVVVTTSNKLSUMUTRLUTTSQPOOPRMC7=F7,89?=>AB?;89:4+125C>6BA6=EB=;:=<;>?A;AFFEKOJIGIMNGSMKYWUUVKCJSRIGMLNKJPGCJQFHOD:KVB8IIHGIPNGJMIMLSTKIIJB=IDACIGCFFIPLABGA>7;G867=:A9>C5/,387:<879?D@=?GRL85CIJHCGPOFHKJIJKJLPNHCHLFOQ6/CMKN`T[TM@RGC=@<>KJG:;ACHGIQUMIGaNWL\\]\\c\\e\\WZQVROF;@EKS[`YVF?GRFFEGOpzwy{~~}~~}~}}{|~}|zyzz|~~~Z[]\\WNGHJFIOGJUOOFVKD>9DIJGRRVUMSQUQOXSONKNYXaZZHOY\\_b_cbWPUJNUQIGPN<;FJOHFLRX\\^_b`\\XRKPNHPPQMEFQREHPFGYXMMRSRSSOSYYWSNE?EJGEKNLHBCC@HJA@GLIGNJQWMKJLOPNOYYW[[[`gdfgef^\\__^]WVcb]inb[Y^a][QNYNEFHMT]WORSV\\[]`YTZYUO[^VYPMROT[UUWTX_^_c_UMTZXNW_MNTGMWJEJMSMLROPOLJKJNXYfdV]^[cg[[`Y\\^[WX\\Z_cWaj`cgbageid[YXYQ\\b^[Ucea\\`b`]Xjk`c_ffeffdZQOOLKMTcaV`e``hmfemhfdbklcimg^\\Y\\[Zdmiadfgffmsw~{xwwtopkjjkkmk^_kmp|zqĹ¾ʴ;Ȳöưszzqov~trjiɿ~}}|}||}|yxwusrrsqqpppommoonid`^[XWWVVUTSRPPQQRSRQPOOOOORQPSQTZ`sps׷ԽѹȰtg}mě|ézϯǦײtbzx}]gz{i{hoqr`ZasnZ_c`kx{wzw~gv}ctyp~q_b{dbmïvuuroosxocadfda_`^[[YYXVSRPNLLLKKLG7-2=A@AA@@?>>=;;;<>BDFDA85?EEGRXB \u001b\u001b\u001a\u0019\u0018\u0019\u0019\u001a\u001a\u001a\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f!!!!!\"\"\"\"\"\"####\"####$$%%&&&&''''''&&%$##! !\"###\"#$$$$%%%%%%%%%%%%%%%%$$#$$$$$###\"!!\"\"#$##%%%$+NzθʥĢ||ֳvzv[~kike`_]ZYXVTRPORm]bZjvfn}ZVurNP_S]~QU{XEVuiaiigesQ[tÝs{|skluaNfe`Wkzkwlx}cgud]fjiYced{a\\XTQPWOFK]c[cg^hegkod^cbdmcX_P[aSIOVHAJVK<AB;B=HYBIQTOQ[_]aog]nygcofiKRT_X]dfhjkkihhffdehjlmje_[aki^^`bcflkgecbd`UIB@@@ADC@NugTDNlycHKanvwqfgeneUPNQPWXVUROOOQMNVYTSVTQPQMIJQSNYZSKVWVUVVRSVXVN@AK;.69?>?DDA;6<>0*,-6>55<31;@?>96E@::;><AHC>EIHBBFHLEMIESRQPRKCENLEGMHIGHNEAKQDEK@8LR@;GFEFKMH@EEDDJSQPMNL>DBDB@B>EBBSQNJNG?7.:@17:?:A;893/+5;410248<;<?BGJ>4BNMIEAFUTJIKJIJLMJNNFEIHLXG.6MDPI[MWOH9LD><92:IKI89?A@BCQTEDH]TUH]Wa]_ilfc`^[PA5=HNST\\]YE@JVGHI:O~zz{~}~}|~~|~~~~~{{zyz|}~~~XY[ZWPLNNMUVLMSRQQYJIDCJLGIWVZVPUQWQJUSMMLO\\[_`Z@Q_\\_`_ae[RZPR]RJNSOCBEGOLIOTZ^]]a`[URMJMHLQPLGELPGGNDG[SHNRSTUQMQX[\\WQJBDHEDEGLF;:>?BKD?CKI=GHMRIKJGGIILWZUWbgjkaabccWV]ZY^UQ[ZcqcXYYZ_a\\VPSVRIHLN\\_SPUWZZ[_VLSVQKUYQVUPLGSbWR[VWabaa`VOX]YMU]JNSDMWGBHKMHGKIKKKJKKPX]fZO[YWbfZXZUY]ZVW[Z_cVZjfefa]ddgeYVUYTW\\XWV]e^V\\b\\ZTbfZ[Ybda_]\\XTQJJIMZeiggecjtogjlefbafaamnb[\\V]\\^imnhfiijmuvx|ywtvwrrmlllmqohlssyĻĽøĻıĳ~rpzsntqjw~~}|{z{}{z{{xvvtrqstqppnnlkjjkjgb_]ZXXWUUTSSQOOPQRRQPPNOPNQTTRTSUammªĿɬsvmƫ˞խzغٿѣir~u[twhulsw}aYYduj\\b_[oqontz}rco~td~qyyuoY`{c^kʼ~}yqlksmcbdfea^\\ZYZZZXVTSRPOMLLLMMC309>=?@@?>>>=<===>@CEDB>==<;FLJ?3\"\u001c\u001a\u0019\u0019\u0019\u0019\u0019\u001a\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001d\u001e\u001e\u001e\u001e\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f!!!!!!\"\"\"\"\"####\"####$$%%%&&&'''((('&&$###!!####\"#$$$$%%%%%%%%%%%%%%%%$$#$$$$%$##\"\"!\"\"#\"$$%%%'%GȺԼɬţuȻl{~mƷnmqc__]YYVUSQRX`yasf{yo|UavvZSVYmvQ_iMQWr]^xv`s]eȜ{u}sge}zVSmg\\Tqgzts[kpWYbi]Xf]lsXTTNHXUHGH[_]g[]e[afcY`c`ni\\`fVgdSMOXH@HRF:??=A>SO?PSRQS[`blpeevt^idn[JX[[V]eceihddffededceffc]VYae_WZceefjifefefd^WOF@>?CB?W{lluuhXNE@FXiwvojcdk|\\QNPNVYTSOMKJKJLTTOPRPOMMLJKMONS\\QMRTVTTWRSVWWUJFOE758>@?CGGB@HJ72//>>365*08<=>99C:89;?:@I@8AFG>>HFLFGE@NMMMPMDBKI@EMHGEFLDAJMADI>:LPC@FDCELMDABBA@HNOOQTM?I?D@>=@E<DZOKMRH@0,::2:=:9>91/2,+9<2/024568=A<<=<=IJIGB?FSSKFIIHIMMJMNFEGEOU?7IH@EIXERKF8B@@B7-8EKM58?@<ECVKADJSYNH[ZcX_hthdhcbYJ:?NQTNX^[F?OSLGE7i~|||~~}|}|z|~}}{|}{~~~~}{z{{}~~xVZ[ZWSTWUYYWOORTUVYLXKIQOCKUWYTQTRTLIUPJJKO][^\\UGZb^^^]^a[U^TT^TSVUQJGCDMLNW\\_a\\Z`_XRTPJJHKPPLHEFLEEKCIXNHOSUVUOMQWY\\USQG?DFC?>DE;6;9?MK@AID4?CJPHLID@BGNY_YYeljh_`ba`WYZXZZSTUVjkRSUPU[^YVRSY\\QNOO^`SOUXXYY]TIJTQLMNOVXSOKWcWS[[Zbb^_^UPY\\ULTZJNN@OUD>EIIECFACGFFLQOUafRJWTScgYVVQW\\YXVYZ_cVThihhb[aacd[TR]ZRWUZ[_c]TU^[WKY`WV[]]d\\SZWWWLOQVfhmnbbemqigijgdab_\\dmgYYa[`cgopskhmooqvvuwuuqswvrmpportrrvy|¾ÿ̾·vukvyqqtv}{{{zzyyxvvtqootvqnnmlkihhhd`^\\ZXWWVTTTRRPNNPPQQQPONOPQRTU\\_bfx|ĸþӷ̳ǧilӯ׭Զ}yuuxpvyllqywrfX[_lwi\\]R]kjgfpzx[s|wf{eq}rttz{|nW\\yaZi~Żtjimidceffcb_\\[[[[YWWVSQQPOONONH805;8:>>?@??>==?@=?BDCC<224<FKHC8&\u0019\u001a\u001a\u0019\u0019\u0019\u001a\u001a\u001b\u001b\u001c\u001c\u001b\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f   !!!!!!!\"\"\"\"#######$%%$&&&&&''''''&%$##!!\"###\"##$$$%%%%%%%%%%%%%%%%$$$$$$$%$##\"\"\"\"\"\"#$$%%&'&.pڼ~ѯɜ vphrż{gea`^]XYUUSPTkosm|vRl~oVPcvjUZ]I[VfRb}wppqsť~{sqsjcoT`{gTQke^ocTW[_X]`[phTJOLHXODCDW^]]QcaW^bXZb`euc\\bh\\maTUT[MAHN@8;=?@CVCDSRSTV]bhpniqtjdeihQR[]ZV[__fja\\eighmgZZ^ea\\SU^hg_`fkjgdedeegggfda[OC?>??DftjzmI:Zv|xx~{qxzmpi`fyjONPLQRPPLIHGGFINNMLNMLKJMJKLNNRYNMMQTPPSQQTUSTQKNMG:8AA@EINKJUWDC>>NH<:6-0978@:;;766<?9@F@6?CB<=GEKHC@<GHHIKKEBMI<DLIGCDID=IJ>CE>@LOFDHFDEHJCHEEA@@JOKPSJCHDBA==HA:KSMIJMJB41888:=1983-.4,/:94422432;@609<<=A@ED=>FNPOGIGEIKOIJHEDFENN=CYD=7MQ@OID99;AG9-7=KL3:?@:GHV?>FJMUDIZfaY[jqeafcce[JJTVXLW\\YKBNTXI=R}~}|}~~}|}}{{{|{{}|{z|~~~}z{{{|}}|}xzVZ[YXT[[\\\\\\XPRRUYZWSbKLTNDKUUVTQSOMFKNIHDEPUUVTTSab__]W]_ZV[UU\\YYYWSMJD@KMQ_edb[W\\_VPWQIHIJPPMIEBGEDHBKVKHPSVWUNMRWXUSUWN=BGA;8<AE?:4<OPA>G?1=@GNHLI@=AJP[dabfhe`^_c`]\\_WU\\TPVS_kWIQNKTYWWWTT\\`XTUV_aTOUYXXXVOGISQMKHLTZVUV\\^XT\\^Y_aZ]]UQZ\\RKTYKNMAOVD:@EDA@@;CDAFNPFPdbMFQNQdfYVUKS[X[UV\\bbVSdojjb\\\\]`a^QO_`WWV]bda\\ZSWZXIT]TW]SXg[PYYZ\\UX`fkkkjaagmidhijhc`cY[jncX^jgcksvstvssstvyxsqrtoqx{rnstsv̾Ž|yȿƼ{wyiryl÷~|zzzxxxvvtronossnjikjjjjhfa]\\YXWVVVTTTRQQNOOOOPQQONOQSQW_r~ҽڿʹĭ¤jv}ΫյկŽѬ|}l{nVe{}̴|~vnz}z{s[[dhsv`UROehdeeszfXt{zi^vc|{tpvzoxlSYx_Xgzvpkhfdceggeec_]\\][ZYZXTRSSRQOPNL?24937=>??@?>==?A=>ADCF;(4?CGKTRB&\u001b\u001a\u001a\u0019\u0019\u001a\u001a\u001b\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f\u001f   !!!!!!!\"\"\"\"#######$$$$%&&&&''''''&'$$#! \"##\"###$$$%%&&&&&&&&&%%%%%%%%%$%%&%$$#\"\"\"\"\"$$#%&'('+C׵ǮͲ̥Ǳw]ÿxc``_^]XYTUSPVuirs~|Up`PgphQZZI`YYQl{yq{tulquuqicldJ]xYes]SPSY[[T`o]JIGPUYH=>AU^\\OSgWU]YU]d_ko`^ij]i][]\\_UBJN;69>?@MR<KSQTUY_ckolorrji_tYQ]_[XX]^`kbWZhkjrkZTcgc]QO[giiirrkfc`^`beefghfcc]OB==?Nlk{pmmrn`UTfmowqtfap}YLPLNKKMIFFFECFIEKJGKKHHNKKMOQUQLIIORMIOONRTQQUQMNQF?EBAFJNNPZ[NPJJ[WLEC>;=5;C;<9544;?7@B@2=B>8>FEJIA<9ACDEEEGBPI:GMIGBCGD6IH=CB?DNOIIJLEDDGOJFGB=8NLHMSHHGFCC<?I@>OMLHFLLF@=88<<=1>5//77.3999813412;6).=>=;;AC:8>GKLTGIEBIKOIGDE@FEKH>IXE;4OHAKID=97AG;175HG5A@?>GJO<?KMSL@I`k^YWkgc`babigWYZYZPV[WQEKUbIGzx|~~|~}~}{{}}~|{zzyyxxzz}|~z|}|||||{xy{{|~~}~{tW[[ZXW^]^^\\XSRQX^\\V^]JNSIFLPNQPMQJIELFEGBEPNOPVY[bb__[V]_WW[UT^_]ZXTJMNOMOUbggf[UW_VNUVKEHJOPMJE@ECBGCLTIHQUWXTNMRVWRSVYREEIDA>=@MKB6;OQB?GA4<>GKHMIA?HVS[cbbca^]]`g`]_aWW\\SRXXdaJKOLKSUUUUUX]_YVY[a^SOVXVWWSLFHSPMHEMW\\XYb[VUUYYV\\\\X\\[TPZ\\QKSWMNMCMWD7=BBA?>>FFACINCF]aNEMNQcgYXYJOYW\\YV\\feWR]klia\\YY]^\\QO_fb_^`fg`]bXV\\[NT\\Uc_OXi\\Q[[\\^^^fljhgedbfjffhihfbba[alohahtqgmz|vwyssuuvupoprnnvztnrtsw·vuƹ;ʽĹ||nt{ko}n³©|{yxxwvvutsqopppnkhgfefhige`^[XWVUUUSTSQQONMPOPPQPONPQWX`oǡǽ̛x{qظԼбŶϚu|~}p{zeX`geqoSRQ_f\\fjp|s]dwtvtXirpzm{lrwon}lM`w^Wgvulheeefggegfb^^]]\\Z\\ZVSSTTRPQOND.+8049<?@?>?>>=<=>@BBD:48@DFKMH>0  \u001b\u0019\u001b\u001b\u001a\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001e\u001d\u001d\u001d\u001d\u001e\u001e\u001f\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001f   !!!!!!!!\"\"\"\"\"####$$$$%&&&&&''(((''&&%\"!\"\"\"\"\"\"#$$$%%%&&&&&&&&&%%%%%%%%$%%&%$$###\"!\"$$$$&'()(U|չѿűìŸƼyjc`_^[\\WXSTSPWncrwwVpUaekhTj^`haSWyo{~dsszltaMSvrZOHP\\VQPaeNEIGSbUC:;@S\\XHXcHSYVT^cbm_ba{h_`]fgceVENK66;A<ASHCORRWZ]bflpntmzradkUZgXXXX]bagLN`idgeXVemjd\\SV`dijprk`\\\\\\Y]addeghecgfWGB??Rinh^V^ibtvmWQP[bbru{wjm|rRMLKFCLHEECCBEFBJGEKICFOKFJMRRMHEELQKGMMKPROOVTLMOKGFBBHJJLOXYOQJI[YUQSOHB@IE==;787:B9?AA1;C>6>FDIHA:6>?A@ABGAOK@IKJHABEB5IF;BB?DLOGHLQDECIW@FHB9:PGHKQFLJFGF;DFBISRKIGKHHHJ@8;?;5>329A9159=?84764:6)(4?>;::??89>FHITHIE?EKNHEGE:FCGDBHMD?:OD?FIFFA4@F>97/EB6GA@GKJI=DORVCESf^[XTeaa^^[^ge[][\\^TXYXYMKW`NYxx}~}}~}{~|||}}~||zxxvwyz}|{w|~}~|zzyxvvwwz{xwwvzY\\\\\\\\\\]]__ZYZOR^_[X_VKRODIKCGOHGJFFFIA@E@GPKKN^_`^aa_[X_^SR[VS^a`]YVTTZXTXX_fjk^VMVWMO]VCGHNNMKB@GBBHFNRHIUZZVSOPSWVRVXWWSNPRNKKLPQO?;MQKHMJ=:=EHIOLHFSbXX]\\]_^\\^_dl`Z\\^[\\ZVU\\^\\XQMGNOORTRS[`^ZVW[aaWTXYUVWTQIDIPOKDFS^^YZ_UMPRUTQVUPYYPOWZQKRWNLKBLU>5>?BC>>BMLEGLSOO]`OIQQSbg[Z_ROXW\\^W_in\\PYgmf`]ZW[WUSQ^lmgddki_`lb[bd[\\`]obR_m_Z`\\\\`dbfgedecccdgdehieddc_]gosrnr|{oq~xv{rpsonomlnqlhpujisnpxŽyλؼ̿ƹyvy{kl~}ml}{Ĭ~{{ywussqnmnnnooonlkjfddccccb^ZXWVTTTRRQPONMNSTSSSQRPVT`sv¿úǿͽϻ˿͡zhgǣŴ˿ưƖĝ{zulfs|y}}{xbk{w{~nfbmf\\`ZHR_eSQps|zfafnpxgTutzje|{lrp{~kq\\Rnt[Ubq~}kkdfhigfeeeb_```_[]^YUSSSSPQPLE>9<0367868>A??@B@@>>@<668>AGGGCA>6'\u0019\u0018\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001d\u001d\u001d\u001d\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f    !   !!!!!\"\"#######$%%&&&'''((('(&''$!\"\"\"\"\"\"###$$$%&&&&&&&&&&%%%%%%%%%%'&%%$##\"\"#$$$%&'()&8мңtȶҵŽqf`][ZYXXUWRRSU\\`\\rzs[nayrjpm{idMcuo~ö½±vɫkyl{ljnqn[EIcZJIS^UIOKQ\\]@>:=@P[UKdSFQTVW]bdgWhj`aWapkkePLSD6:<@9DRCKSPY\\^bgflsrqxp]g^ZfdM[ZY^`]UFSd_\\`afkokhd]XaffihhcZTSUVUZ^bdeghehnjZPLGCP[RD?CIGCs{`SY^ZYT]||xox{\\MIHB>KCBA@?@DA=JEDIE:FQJ=GJPOIBB@JNJILHFKQNNURJJIIJHADJIEFKSVKJDESSQSVQLHIUGAB@?B@<G??B@57FD5<DDEEB82<=:9=AF?MNMNFKJB@CB=ED9??=AFFBCKSEFMOP>HKB;CMEJHPHLNHNG=HHENWPKKCLDEFPG87:89:58?C;7:;CC<<;;AB3,1589988:::<<CDGOJEGACJLGEED7F?FJHDDDEAN@=BDGQK<ACB?:3F>>JDIUQJFCLSWLERa[U[XW]``[XTZe^UWX_b\\[V[bXRZ`Tyzy|||~~~{{}||~}~~{yyyxxyy{~|~wy|}}|~~}|zwvwwuuuuwwtvrq[]]_``]_bbY[_LVe_XY]VSVLFSM7FKBIEDDKF=>CAHRQOT``cZ_d_[\\_\\PS\\VWcaa`ZX[Y[[YZY]_ejb^LGXOEY`HFGMLNL@DH@FILQOFLY`]TPQSTWWY][VYWTZ^[VY\\WUWNDLQSMRQA8<DGPRPRNWdVJSUW[[[]afjaXZ]_\\XXZ`bXPQIBQSJOSOVac^SSZ_`YQYeWOUWPMGAJNNJ@FXbbYSXQGHMVOKUNIVUPOTXPKPUOHHFLN97DCKQHGQ[YSTYceadbUR[ZXbhc\\`\\X[[\\bZ^dnfLQcid^XZWXTNRU]npkghok^cmieilcbcamd]lp`^d]\\`b_`b^`a`abacdfge`bde`altyyz{xw|t{ypnjkkjidkpkghpheu|¿¹ǲȶȼxrtuigq{zoj{úŹ~zyxyzzxvvspmjihiihgjmmmnmkigdabcc`ZWVUSRRQQNNNLLPVZYVUQ[W`fkƹҼƸkg๵ʨĸæȺ¦nupm{rw{e}ji\\v|zyykosl^_NG]]\\XScgl|ieeg{lwv^gntrZfwpgzjsjw}NcwnYQ\\jvnj}vppnhffefdachhc\\]`^XTRSSQQQONNQ@028612@GEEOQCCB<:>:/4;>>>CFFKQE#\u0018\u001a\u001d\u001c\u001c\u001b\u001c\u001d\u001c\u001c\u001c\u001c\u001c\u001d\u001d\u001e\u001e\u001f\u001f\u001f\u001e\u001f\u001e\u001f\u001f\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f    !  \u001f!!!!!!\"#####$$$%%&&&'''((((('''&\"!\"\"\"\"\"###$$$%&&&&&&&&&'&&&&&&&&&&(''&%$#\"#$$%%&&'(*)\u001f7ʽܵؿǽwh_XUUUUVWUTPOT]daZuzq}`qq{[Ll˹¦éɦjɹh{éªĞor]EahOLLVVLVUMcZK<15=@LYPU^ALPTXZaZjZ_pwoa[ToqnkVOUSCD@9B;HOFTRRcZ`ddbkupszf`b`\\mVPbZ__\\VJRYXO_lmmlmnndaglkjifa\\Z\\^b[X\\[^deggimpka^WMGFA<?BIK:5[w|RTYfb]TNiu|tbSHGC<GA>=<:=C;:JACG@8FRI:FFNLG??;HKGJJECFOLMQOIGGFFD@DFC?BGMQHA>BKLKPPMJKNPKLLJIHJLOE?EC>5EJ9;CCCBA82;;88;?G?GJOPDLMB@BCCBB6<=;>@=<?HNEHTTNEQRBFJIKJFOIKPJRH@LKGLVPJI?N?>CNF97>;6568>@<<?BHFDE?DNE87753566559<;;DFDFMBJABEKFEG??D=KPJBBDFCLA>A=GUOID@HB?EOCNMKT\\ROKLSYRGS__RYa\\_\\^\\URQY^ZTUVb]\\XP^d[Xa``|zwv{~}}|x{~zz}}~}~~}{yyzzxxxz|~~}|y|~||~|{yy~}ywuttssuuvvuvvurrnx^a]^hc\\cafY_\\K[k]WZ[Y[ZNQ^K2LLEPFEDOD7=EEJV[Z^__^T\\d^WZ_WNUZV\\c^^`]WYYXYYYYWWZ_`aPAUUBM^PKGLKONCNLDOORUNMW`c^UTUVVVVZ^][XTXbb_]`b_][VQQRQOQQC:?DJSSRUPRZPBKRTXZ\\]`caZUX[ZUVZ[]ZTPMBGVQHLOS\\_^XSWZ\\]XSceLMYWLLJFMNPOIM\\c_UMRMCBNTKJSHLVSROQSNHMVLDMOLJDFNP]aXZdgecbdnpkif\\]edbchia\\[[YYYa`^]apUE]c_[SXZTLHT[\\lokegol]clmiikfdfdgcenl^]`[XZ_\\adZcbT^b]^acfc^chhgjuz|}{{ysyvmjehgfh_ipfhiptt¾úԹμuy~}xomqiemllipƿþú²ȱʵ{}}|zxusrqmihklkifddhijjjjifffeeb`[XTRORRPONNNLJVeb_\\YOdgjxʾ¹ӼʍŜxukzްŤʼǼiwkitijkk|{uxwejl|xaQWbp~x~x}|y|ziaeTRnXGKp{iixst^puqhmn_pbXjrdjlk|je|{}v]kulULU`ht{nclywz|rgghgecadhga[ZZZYVSSRRQPPQJ]Q>2.-36EQROG?BDBBGC:8?A65:@GQ\\R3! !\u001e\u001c\u001c\u001c\u001d\u001d\u001d\u001d\u001d\u001e\u001f\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f  \u001e\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001c\u001c\u001c\u001c\u001c\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f          !!\"\"\"#####$$$%%&'''''((((('''%#\"\"\"\"\"\"###$$$%&&&&&&&'''&&&&&&&'''(''&%$##\"$$$%&&(((,8-Eþ̚ѽwyȭųȺ|odZVTTTTTTVTOPVcmh]t~vqau~XXv¿˿mĹgyă~icmVRLETOX`T[e[N;1;@CQXUZHAXXTZ^_]`UssuddL`wmp^MVWNORCAJ<KLJ[M^`Wahacsrjo`bbb]hNc`Xd_ZSMXULWlvf_fttjgoqjeghb^belk`YWWZccbfijlmjji]PIB=ADCFC/=NTj|oS^\\eha`RWy~}wgZJHD<D=::::=A;=H>BC<7FJGADAIHF=<7GGGLIABDNLLNKHFDDD@<@?<:=AGMD;9@FFFMJGILLLNQQPMKSXSLDHGD4?I<9@BBB?98;::9;@MEBEKLIRUFGLIFEC6;=79D;8<DEBFURMHRRBNIIMIFOIMNNSKDPNHIRRKJFQ?AFH@9:FC;:8;?@@CFGKLKHEPSJDA=9520/05967AGF@BOAH??CLHGJ:IBBRNJEDCECJFAA=LQDND@NDBYWFVMOXYQWTTZZNO]^YXbggf][UPQQTWWSPS]SUNO^aXZc^p|ztvzz{}~~~}zy|~}~}||{{{{zxvwyz~~}~|{|zz|}}}}~~~~|}}|}}yvuz}~~xvsonoqrrrrttttsqljbaY\\ibYd`g[_YM_mZWYZ\\_\\UZaG@VQOUKHDPE6AJIPZ`_^^ZURZd]UW[RKTUS_a\\\\_]UU[XUZ^ZUUTX\\\\VHPXIERUPILMOOFYPMYVWUSY`bb^[ZYYWUWZ\\``VT^a_^^^^_b^XZVSQPOMFCGHMRPMLHFMMCHRVY\\^`___VRX[WRV\\_ZQPSD>OWOIINWYXZXTSSUYXVa\\NXZTMKNOSNRUUX]_XOMMHCFQNAKNETZOOOOOKFOUJP\\WRSW\\]bkjdjqmkkkjnrmigbcgffbdhaZTVSOR[`c]QkdBR`]XOW\\SHDW^\\ilkcgrl\\dkkgghgfgebcini_]]\\Z[__ecajZSc^XZ\\_egfiqsns}||xzvqvqkgfch_fgdllqq}ṷ̂ĺÿ}{xnw|~xtnhnidjfadw±ɳñµìy|{vusqoljikkllkhcdefeddccccb`_]YWUQMOPPNNNPLEXtnee_Pgz|ŬӾ·ʽte|}ڱʻüĬzdwq}}obbgb|}xkbNSkx{e_yyqXm_DHSnr_\\q|yu{rZgjJRY~unnzqWul{xhubdlW\\kh_g^uneexmzqxyhsiQGOWaqy{w{}k^`hkimssqlheec_^^]]\\]\\XYYWUTSQOOOF[N>1(('5DA4.3EXSCUUG?BC>@ECELPK@63+$\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001e\u001e \u001f\u001f\u001f\u001f\u001f   \u001f\u001f\u001e\u001e\u001e\u001c\u001b\u001b\u001c\u001c\u001c\u001c\u001c\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f   \u001f \u001f  !!!\"\"######$$%%%'''''((((('''&$#!!\"\"\"\"#$$$$%&&&&&&&''''''''&&'''('&&$#####$$$$&'(()Bh^Ʒͽ΢εsdzxlaWUUTSSTUTU\\XTZgsd`rsqtes{]kͻ̼ΫxzįcwȯϬu`XT?MT[g\\b`ceU5GNHNTU]TFZ_YR\\`XdKf|sefSItoplVRVSP]XJSJ<MIMYPgQZce]eyhk|caii]bZXrT^a^YPNQPQdlYVctqhfptldffbdhknnhc]UTcg__egfhmnnk`VMD@ABDD;+GMLN\\ylXjghe]ibQcp`OIC=>4;>=>?FECF<?=87EDGFA=ECC:84DCFRJ>BCOJKLGEFDBD<8<:769=DI?56?AADKBEJLKKKMMNNPTYOPIJLL;=GB:<=BGB;>A@?>=FUJBFNKPVYPQUNLKJ;CE9<J;:8D>@AOKHCKKBNEFKFGLHMLPSLEPMIGPTNRSUBHOD78=GGA<;BA?EFFIMNNJMVTPNHD>:71,0654=FB=;AQ@G@CBMJIH?NEHRNPMKHGCJJB@EWI7K?>NFC^WBOGLVTO\\XZ\\YV[`\\Zbglnc^WQNNPQSUVIKULKGJZ]OXaY|wu{{y}~}{z|~|~}}~~}~|{|||{{zwvvwz}~~}}~}}|{{zwy||||}}~~~}~}~zy}}|}~~~~{wwy{||usqmlnnnnpqqppqoler^[TWd[Wa`b[^XL]jWWXZ]_^Z^]MXZXVWQIDOJ;GTPT[`^XZTQRZb^VVYPISPR_`[[^\\TT]YT[a[SVVVVWVTQUPGKWQMLPOON]TU]^ZS[baa`]]\\[ZXUV[`bZQZ`\\[]]\\\\^a_\\^ZXXTPMFHLINOLKCABGMJLTXZ^bd`\\_WRZ\\ZYY^_ULNOFGSTNGGPUTVXVSMPUSPQWUVa[WQLSUQOVX[\\ZYNKLBEHHKEEJGFUSNOKJNMNWVUeha__fhjnnmkosoljjkmpmigcdfcebch^VSSQKLT[cZH_hIL[[VNW^RGCW^\\hijcdpl[ejeeefhfec`ehlicdadb_gjfcjj\\^g\\V\\^^bmuqt{vy}{xvw~~tsulfcbZgieigm¾»~Ƣ©zvwhkwunmfhgbbefmͽԼôȻô{zzvtvwqmmmjiihijjda```aa`a`^]\\\\ZWVTROOQQOLNQLG]z|unf_eϽĪɿlhwп¤jjhb{ilrrom}~zs\\bgFq{ubXfsjLYZKP_q}xkf[c`}}|{vhwmli^rtebkx_frqitd[qaQYg]_ek}i^illqh}zcsdOEJR_jnppyw|{}teghd[^_Zckrphdiic\\YZ\\_cb\\XYXWVTQOMMKLPTE24BNK;9LgqcOYXMCDFFJPQLIHDABIJ8!\u001e\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001f !  !! \u001f\u001f\u001f\u001f  \u001f\u001e\u001e\u001e\u001e\u001d\u001d\u001c\u001b\u001c\u001c\u001b\u001c\u001d\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001f \u001f \u001f \u001f   !!\"#\"\"\"#$$%%%%&'''(((((((('&#\"\"\"\"\"\"##$$$%%&&&&&&'''''''''''('('&&%$$$#$$$%%&''))._ηԱâ~tk`ZSQRRQRTXTWcgZbt{_bsyjowtnuzaĽһ²̺}ƨf{ȨƏyƧc^XJR_difca`p_:GaVSQPT]V\\aYQT[_UUSxslc_>eziqcYVTSZi]VZ@BOJSO\\^V\\a`\\qr]tq\\jriWcTonYh`\\YLRJO^fPH_nl^_jtocbccihgovsj^RN`d`\\_aachmnmjgZOJHDBFE55KHLNG[p]qsoi_gp]TlxjWJEA@9@CEFDLRLG?=96;D@BA=9C=?662?BDTL>ACOKJJEDGD?@9465413:BD913:<>DH<HLLJIKLNORTSRNOKNRPHEIH>??CJG@EJHFEBNZKEOTMUVTSSQOPVP@MPFEOA:6D>>?KEEAIDEL@CGEHDGMJPOKDLIIHNRPU\\UGMWE3;@FD>9>B?CEFFLONNORUVTPLFDGI>2377=ED957CR=EEHFRLMEKMHHOP[UUPGEJMB>PZ@7F9<IGDXI<BCIPNOaWZ[Zae^[^efki\\]YQLKLLPRPEIOHCADSPESV]vzzz{zy|~zy}~~||zx{}{|}~~~|{~{{|||zyyxvvx{||}}|}~}~~}~~}}||}|||}}||~~}{z||{{{|~~~}{zzzz~zuqokjkklllnnmmlkgjUPOQ[TV`_[W[VIYeSTVY]_^]]ZYeZ\\a]WIJSRFMYWWXbZOXSRTYb`RQXMISOV_][\\^WVW\\ZW]`YTVZWTTX\\UONMNXPOMRQOW[VY]d]X`c__^\\[[\\[XQT^c[KO^^WXZ[]^^^`a`^\\]]TPIHJGLMHKJHIIOSTX\\^aefb]b\\Y_abcad`RPOORVVRNFLSQW^XSRJSbYHIPLV_WULJXYLRYUYWWQFIC7FMHDFGGHHLLPPGJRY^_^cmkjkgjjopiikosolggkkhfffdfebe`ahYPSQRRKPX_XEQgSG[_VMXaUJCV\\[`ff^`nl[giccdghedaajjkjjpfjkbpxiepmkkiabhfhlqzyw}w}||{{uuuwwspqi`abZbtzǿžù³͹Ϻ|v}}wfbmz|phiecf_[co}Ʒͽֹä|xvurpppprrmgkqnjhgfeeb^]\\]_`ab`__^\\ZXVUSPNQRQPPROTj}yjwrǽƺ̫Ǿj|wƿ]si^kxsyhuWKSc}jsgf|~xsig{z[Wgozmi{dPIVg{zik{wwlxzpscfdsrzufmQdnYLUcU[a{zgZhdifh~hdp^MEIQ[abgoyxxyxnacsvbOU]TY[hsnjoog\\Z[\\_b`ZUVWVVTQOOMG>EG@9FQE=KevnXLYZI??GPUUUQONHHJLTI/\u001c\u001d\u001f\u001f\u001f\u001e\u001e\u001e\u001e\u001f !!!!!!!!!\u001f!\"!\u001f\u001f\u001f \u001f\u001f\u001f\u001e\u001d\u001c\u001b\u0019\u001a\u001b\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f\u001e\u001f\u001f\u001f\u001f\u001f   !!\"\"\"#\"$$$%%%%&'''((((((((&&####\"#####$$%%&&%&&&'''''''''''((('''&%%%$%%%%&''().2,jûͻšényumigb]ZUY\\RVaWYinXgij{qiq|ntzuõüãpϔ}˯v˨ƼzbjQ_liphfdbpjJNoc`UMJXac\\WULUYYX?msiegDO}lli_[RSUepebQ@NQQUJcV\\U]\\f{a]|wfcusaV[\\ehkaZWNVKTdTCYj`STdstf`bab`exraY[___]YX\\[\\`fkljjj^XYNBCF=.<GGNUXXoygqztrhfsq^[kwzr`LLHEGJMNPNN\\VOFA9;CC<<<6:?7:452<CBQN>?CPKHHEDGD=>81420-.8@>51378=HB:HKJIGNRTVVVQPQLHPRRPNLKGGKJIKHNQPPPNUZIJXSOZTQONONOYPDPURMPI:6E@<?JAD@K@FH=HCGG?JKKNKKCG?FJINPQ[QMS\\H;EEIG@:CBBHHLMPRNPQQSXVOJHLVUG>;;@EFD:88ETCJFLLRPJKQKEFMU`Y[PEHNO@=SU@;A8?CHJP9;9@GHIQaVWTWacWWa`eg]][\\SJLHJLMIBHJC?@DHDEMLi}~}zxwuvy{yxy|}{z{{|||||||~~|{|~~}{{|||{xxxvwz{|~}||{zz{}~}|}}{|}||}}}}}{{{wromiggijjjjiihhhc{LGKKRPS\\]WQYVFT^PPSWY\\\\ZYU[cY_e]YLTYXNOXXXVbTKTRSVX`bPLVKISQZ[[[\\]UWX\\ZX^`WSV\\VQS\\\\UNOPOYQPQTPP\\YTW]c_^aa]^_\\YW[\\QNWc]LGQ[WVVUWYZZ\\`]]d^`c\\VSLIIGIFJVWRLQ^\\[`dehhececbeilkgkeXXXXZa]UQLSTO]f\\WVNVhcMGHBQURP@CUWLNQPONNGAA77HND=CFFJEHORJIW^dffgghlnliiinkafiqrhjeejfa]bgcehcd``gWGLKQXOPX[\\BDcYJR_YOXd]RFTXWX`bZZkiYhgaceijdcccljknmtljphqqhsrtusrwvouww{zy~w~wxz~tttrutrsocaber}ƾļõķƿҾ{r{}tf^dtyiagdce]Ydwɹɹ¶ʾ˻zxwuplmpqolkieionjgfeb``]^^\\\\]_^^_``_]ZXUSONORX]QSUcyjӻдϴϰ½rʍzy~arh_uymuq{~biq`lytzyzpkextki}~ojjs\\lm[d|xn}soqtug_kZVofXG]]RWRdh[^d`b`hwvbhgWKILOS[\\cnu}~zwundmwoXQSZQWWepmje`WRVXZ[YWSQRRRRQONLLIDKA;=ID=GY^TMLV[K89HUXXVTPPTVSLQT> \u001d\u001f\u001e\u001f\u001f \u001f\u001e\u001f  !!!!!!!!!!!!!!!     \u001f\u001f\u001e\u001d\u001b\u001b\u001a\u001a\u001c\u001c\u001c\u001d\u001e\u001d\u001e\u001e\u001d\u001e\u001e\u001f\u001e\u001f\u001f\u001f\u001f   !!!\"\"\"##$#$%%%&&'''((((((((&&%#########$$%$%&%&&''''''((('''(((((('&&&%%&&&''')*(/@8k̾Ϻ׼ѻ{|kfic^[ZgoQWm][lrYqu|{je{puwyǴıçƤwzǋ{;Ȟb|oe{ttigmhmnaXojh_SMNeaUT\\RMSXXNPthh_R>iuapeaYPTYlpgfLKVOVPRcXWNZ_tjVhwqgutrWWVk~bmd_XXXNP\\S@Ve]JM^nuf[b`^_gtth^`ca]XZ_\\Y[XZ^dhhjqebl`HAFD6*@EHP]bhfr~vu|vsjbl|t_Zhz}~~{ys]RQKNPSSUTNZWVQKCDIE:;D6<>37344;B>LL?=BOJDGDDEE>?7031.+-7<943356AI9<GKKHFRWYZVVPSRJFPQQPPMKIMRPKMNVQQSSRVRGOXNQYRQONNMNOOFNRSOQM=;LC8>H@@=I@IF<K=G??OHMKIJ??:EDALMKUMQTZLHKKMKGFHEHLPUQSROPOMSXVNJJOYTHJFDJFEFBB>IWLOFLPJTEQOG=FNZZXYJENTP@APSF>=>CDMIJ772BCGCSZUPNS^\\SWa^e`W`_bUHNDHMKD>IH@=>CA>EIO{}~|zzzzz{zzzzz|}}~}}~~}|}}|{{{{{|{{}}}~~~{xwvx|~|zxz|~}~}|~}}{{||}~{{}}||{xspnlifffhihebdcc_jGDHDRNNY\\WMWTCNSNMNQSXYVSRY^W^b[YOZ\\\\POXWWVbNLSQSXX^bTOWKKUT\\]\\Z\\bTVZ^YX_^VRU]UQS]XRNPPPXNRRVMR\\WRS]baaa^\\]_[XUZVJNX[PFNURQUROSWVW[[Q[dV[`\\Z[RPQFHIHW_XMRd`\\chddefeeffjlonjmk``ba`_dZRUYUP[b_ZYUV[cUJJEPNNN;=PVOFHNJKEDF>7@LKBDEFFGHRTQMZgfeefdafmjikhikcYafpmbhabe^[[ad_chcd_`cXHGHNYUQW[]GA[]JN^\\TZd^ZLOPRUX][ZheZheahijmecfgmimrpvrpros}sltuwwv{vz{}zz~v|ut{xnsuqt}s˻żŴ¾̴~~uprytj]^oxg_eafeXZj|˺Ͽ±ͳƸɼy|vroqqqnjjiggjiggecaa_]]]\\ZZ[[[[]]\\[WUSQOMNUddSX`mxuyȺʸĶ˾μƼƻ}uw~}qfw|j^bxpb~rlqcacno~n|pW`m^nvnqqfTkujnz~px{zzuxgkk[kmeNRjWY_SNNS[_`acdtwjfj_QTTNOOV[ahmw~~z}vpedpp_^ZSVSXakc\\VLHHJLPTTROMMLLKKKKJIIHFD?CJG??DBDBGJPH:?KSQLOPPNQX[USQF3()%   \u001f\u001e\u001f\u001f\u001f !!!!!!!! !!   !     \u001f  \u001f\u001e\u001d\u001c\u001b\u001a\u001a\u001c\u001c\u001b\u001c\u001c\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f  !!!!\"\"\"#\"$$$%%%&'''((())((('''%$######$$$$$%%&&&&''''(((((((())((('&&%$&&&&'(((*'*=MJŰп̮Ǣʱz[_]`Z`{xSZrdZpu[{|vhl¬|symͫʹİznxvħzȬģrwnxhwsqpkfnfde_RUfnPP]ZYUWVOJmgfeQ;Tl_csddUOUdnif`VTSMWN`bYPP[jlTXnnotmlOWYrvcg[\\Wa^JYVBNaTFLYipaU^ga`doka]]]ZTTbiZMPUX[]`dbirbdiYOJGB0.EGHMWbpnkxz}|ssmaawpY^ow|{}y[QJRVUTRTLSTXVSRQRLBCP?DE55459;A:IG<;@MI@CCDAE>B816/,*,46543338FC4=HMMHGRVZZSVSTTKHMOPPPPLFMNMKOOTMLNNNTKERQLSTRRQQPPNNMFLPRJPMAJSD6GK>:<HCKE>H8I8AQIPKHF;7;C9?IHINNNPXMLKLNMLOLJLQVTQTSOMIJSVRPNKNVPHMKJOGKHJIDJYOPHGLETFOJ<8JUYQUQFJTYPDJSRI?;BFHO<G814?AG?URPFIQZVT[`b`YXagdRGNBJIJA=JF>=@BABBBf}|{|zyx|}|{{}|y{~{x}~}||{|}~~~~zz{|~||}~{~}{{z{}~}{zzxuvxuqnljhedfffec`_db`JFHBUKJW\\ZKSTCJNMMJJNTUQLMVWQY[XWQT^_NMXVWX_KITNQXUZd]U\\OMTU]f_U]bYY\\^ZY_]SOQ\\VQRVQRPPPPRPQTUMQYUOO[`fa\\WY\\ZWVSROJPSKEHTSLPNLJQUUUXYRX^RSY[XWVXYSQTNXb[MQa]\\fg^]_bdcedhklljmkbcfe`^g`XXXVSV[ZYZYVQ[]SQQRSTNB>LYRGKSSTKKOKJLRQLSKHJKUZVRYghecba]^glfhohheYSX`jf_c[^`ZWY^b]_ebd__`[TMKNY[WY\\_QEU^MK[`XZc\\\\RMKLTT[_bc`[jeeqnkmifikliouvyzxvvw}{twy||y||z~||y{|qyst{ulruvƿ¼ĴÿǼʭԯɬuy~trov{xp]Ylwh]d`eiXYnó̾Ҹĭyuqomljhfggeccddccbb`]ZXZYYYYYYYYXVSRONLKN]mcU^psn{¿õѾѷǦ˛ĽŽȺssnz|}seffnlnnwxhio]mk}vz}kMgq`_BCjzsrseV\\khdju~rz~mqxy~xwzu}zpkydVXmeWhkhUOUY_db_dsnkjm]Xb[OSNU[]_cjsv{xfgW`ji_dYQSVY`_SMKHHPNLLLJJIHGFFFFFFFFFFB>AIH@9:;9<>BA?@GSUL@@HKLMRUTRPI<693'! \u001f\u001f !\u001f  !!!\"!!!\u001f\u001e\u001f!!!            \u001f\u001e\u001d\u001b\u001a\u001a\u001a\u001a\u001b\u001c\u001d\u001d\u001d\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001f   !!!\"\"\"\"\"$$$$&%&&&&'(())))(''&&$#######$$$%%%&&&&''''(((((((()))))('%%$%&&&'('))'((4ZҼıѺĨƺǥ̓VWUdWg[_uqVs{^~miuƤyx|v԰͹Ǥɑù|zzvssǼsy}|wrmme]okd\\fu`\\lbcja^WL]f^fZFBdaVpsa]MN[mjdi[^UQYVYjeUKWdjYV\\hluwj`PU^srb`VYUh]QXKM_R>BVec\\NZjaccpn^\\`^XUW_aTOY`Y^\\ZY]bjhcbWYcXPF/9QMOLN[nuop|}srtj]l`Uait}{}iOGHSPOOSKMUTRVUVWUOQYNPP?987@<?:F@77>IJA?CD<FDE:9=.(+-2303322;D74@JNMFHRTVUOUUTUMJLMNPQPMDJIEINJMIIIIKSFBNHIQRQQNOQRQPNEIMQGKKIQVG?PQ@:@MFNDDD;K8FNQKMFB78;A7>ECELLMMVMKMLNORRNLMRWOOOUMKGHOQNQRKNULJMGIOMRHIMDJZKQGBCEQDLA5:RSOMSMGQXYOJRSOH@>FFG@0E36:9A?@VLEAFOTOZ_\\\\WSYdi`OHMBJHEB>JC:<?CCA=H~{z{~|{z|}~}~|~}yz}{xz}}}|}{|}z{~~~~||{{yyyyyyxwuqnoqnjiigfdbbbaaa`a_Z{MHHFZGJW][IQTEILLKGFIONLEGSOLTTXNIK\\YIHXTY]ZIHQLOSQXgeY[SMOQXhhRW_``c_WY``SKO\\ZQONMTKMNMNPSTNIPXMMNWae_VSVYTTTRPIIRKDCIROOPLJIOTTTWXSU]VRY_YW]\\Z[^]Y^daOR_ZXbcZWW``adcfijjhjh_cgfcaig`WVVST^]Y^`]ST^SQ\\UZ^WPOY`\\VX[^dYU]_^Y[``bTRY]aZWYaeegb^\\\\dkjditheaQPS\\ea\\^UX]XRV]`]_bae_`c`_]YW^caaaaZP[dRIUb[\\d]\\\\UNNVVclefbbmhispkmmjklklow{{{{{||}}x{|~|zyzzzwsx{jtst{~rhozʻѽƵʹĽĸνæ~iy|utrwq^UfukV_bdncf{ŸƼƹòǴ|vrpokiigeeeccbccbcaa`\\WVXYYYWWWWWVTRRPMIKTdm`Y_wxnsƸįǭɧĶĥÝʯppmt|efz{nsnxwvrl~|qQus^zrNXwvkoqVI^a^`hqz{s`g{}ryvnylrzrdk]_rsW\\mff`\\\\aff^\\cnpnphabbWWYTVUVY^ekt~vos^`b_YXVVRVWWOIHMQQSQTNCADDCDDDDDDDDDDDBA=>ABDKKD837;>CNLD?>ADD@GOLLLCC@B9'! \u001e\u001f$\"   !!\"\"\" \u001f\u001f\u001f\u001e\u001f!!!!!          \u001f\u001e\u001d\u001d\u001c\u001b\u001a\u001a\u001a\u001b\u001c\u001c\u001c\u001c\u001d\u001e\u001e\u001d\u001e\u001e\u001f\u001f  !  \"\"\"##$$%%&&&'&&((()))))((&&%$$#####$$$$%%%&&'''''((((((())))))('%%%$&&''(()++-2)6xåĶܶӾȩΫTY^mTgnezXv|^jf{Ɵw~ŭӬ̼ͱͥĢyzcjx¾y~~yogrraZgrj^zjquofac]eXaaOIW`W\\znXLJOekfpd__XXdWlnhKS_c^T\\YanwmkZST]qra[WWVg\\QKPVN@BIW^ZNRc^dcml`_cd_[[]`de]YZ\\]YUT\\cccc_[hfVVP:M^Y\\VV]fqolw~|xsxwlmnSV_dy|moqUAAGIIJPHJSLMQPRVXYZ\\XZ[LE@=F?><C;25;HKA=B?:IHE>CD0.3781/7403?>4=FLKHEHPQROIUPNPMLLKLQSPPEGHDHIEGFGFCNR>AEAGNPMKJKOSTRPDHKOFGJMOQIJSOIEFJKOEOFCK7IKPFLA;598<8>A?CIHLMSKMNJKMPNKIIQZNKJTKIGJMJIQRJNRINPDEOOQFGLAGTIMC>?BMFJ91CVEHNRMMWZUOLONIBEJJE?1/A3A98A5FMB?EENMP`[XVNP\\hg[OJKBJGCA>JD::>GE?:i~{x|~}}~~~~~{{{{zwuy}}~~}|}~yvz~zx{~~~~~~||~~ywz~}~{ywwwuutsqnjgijgccdca__^\\\\[\\`a\\pNKKK^FKY_]GQSLMLNLHEFMMF@ENHJSNUGFIVPFGXV]cUHJJKQPPYghVSSQOLQaiOO[cbe[PV_dYOQ]dZMORZKONGLSYUEEMYFMOTb_VSPRSMRURMILPD?AHPPPPNLKMOQRTUPTc]U\\b__c\\Z`b_``fdSV]QN\\\\URRa\\aebfggifgc]aggffljc[VXWZdd`abd]YbRO_Yag_^chgfhgdckf\\dghfgkkd__djcWZbc`fgaZW`klebiwhc^NQSYa[VYQSYVMR\\_^acchabhgggfdeijlibb]bh[OQba`c`ae_XW^bqrmlijpmlpnkmmmnmmorx}zx{{{||zvzz{ywu}vxurnqwhtqs|tr̼Ǽúϰׯünivru~rjcV^rnSWgbkq{ɲúžŴǩvnllllmmmkhededdeca_`^ZWXZXVVUUUUUTTSSQQPS[egb]`tz{ryƱɿɭŨʵ~ǩȮ{xsip{peysltzg}qtzuefmXMUUSXhl~~gVrzdpvssnsfy{wma_g~zi[TXbZ\\bbgm`OU^_lxmb`b[Zee_SOPT\\ejqywpqrad``UOZZOOUVKGJPVWPRSL??AAABCCDDDDCCCCB>58FMJFE:9>>?@A@?<;;?@=BJHIIDEEF:&\u001f\u001f\u001d(1*\u001f\u001f! !!\"!! \u001f\u001c\u001d\u001f  !!!!!! !!\u001f!!\u001f \u001f\u001e\u001f\u001f\u001c\u001b\u001b\u001c\u001c\u001b\u001b\u001b\u001c\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001f\u001f !   \"\"\"#%##%$%%&'''((()))))(('&%$$#####$$$$%%%&&&''''(((((((()))))((&&$%&&'''(()*),+3rػŨĠջϱ[c|Wl}f^~~`kaÛv˾ү̴ƞ˿|qyn]a¼wrbZcuqltrjwpcntfg^d[QR_TUbz`NFOUhdmt]d`\\`bjwubL`]XVVU[\\lwvmm]TU[koa\\YVXf]LJSI=CEGVZUMY^Zjoi^[``^\\[[_hgUMW``ZTSWbecaaahl\\QZZQ^fejc_`fqomv}{vx|zv~{_SYX]ujam`><BFEFKFHNGILMNTUY[[X]aSPLJJA==B:259EJD@C:BNHEBGE4<BA<37@83:C@?JPNHFGHMJMLHRMJLMNLJLPRMQNIHLND=CDDB@OK9A?AINMHGIIMQQONCEHLEGIJJJGMPMLJEENQKXNKH;GLIBH>77;698=??BGFKMOGMNHIKKJHGGQZPGFPLHGLLDCPRHMPKRRHKOLKBII?CKIDD;;@IGG37LP<IQROU]XQOMMKB?JPHA815<:@1;<2G>>D?BLI[[TXRJQ`h`YQIIEGCAA@MJ;=DGF<I~zz~~}}}|}}|yuuz}~~|{}{wx|}z|~~~|{{zzwtux}~}z|~~}zwvtrnpspljheffdbbbb`^]\\ZXXZ\\XcNMNOaHM[a_KWXRRQQPMIJPNDAEMFMRIPCJLSKEIZZ_`NFGGJSSV[ccQJSYTJMYeNKU__dZLV]daYV_g_XY^bSWRGNZ`UAEMVHLQW_WNTOMMIWXTPOMJA=>HTRNPMPQNMNPQSNTf_[_bab`YZ_\\_dah`UWTGK]WOLL_W^e`egffceb[bghgflgc_[\\]ahjeabec_fYVbaejcdmmiinlhagl_eihihjifddgkbU\\fa^ebZUXcifabjwg_ZPURW]WUXNOXSJO[abfhhkeclokhjjgjnokehddf_YSehdeehkhfchnxuronqonlmmlmmnnoqsuvyxuwxwwxunu{otvrvrspnilukxmu}z~˻˻ŻŦеɣepvotrggY]omXSg_f|Ѻ»ʹòƿĿxnnmlqvtrpmgdhiggd_]^]YWXZWSSTSSSSRSSSSVZ\\]deeaaqz}oʿѿŵŭĬ|ȳ~~jqwkutzyƼwkx}zs_RUO\\UNKQcl}rX`y`Hbkw~clkf}y{spmko}f][T^f]ZYZWf_YYTFara]]^\\hmncRMNRX_dfdcaeb[^Y]VV^SMHWTIGINZYOOHC@@???@ABCCCCCBBA>95=INB50;EIJI??DB:46:=CLDDDAGLJC0&(%-A<&\u001d!! !\"! \u001f\u001f\u001e\u001c\u001d\u001f\u001f !!!!!!!!!!!!    \u001f\u001f\u001d\u001c\u001c\u001d\u001c\u001c\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001e\u001f\u001f\u001f\u001f   !\"\"\"\"#$$$$%%&'''((***)*)(('&%$$######$$%%%&&&&'''((((((((())))((''&%%&&'''(())*+.0[šÚǢǲкnǼȧdhb}flenbϯvʿҶʵ͑nqo|֚UYkƙ|z{p`lwzqyq}`hxlue^YZ]XNYhqOKMR^eer^\\cc`^izyy[\\j]UUYT^YjrfnmcTWWfia^YXXfaLPK=GD8HUXUS[\\bje`ZZ\\Z[VU^gfOGTda^VQV]``a`acig\\Z`_SJPQNQUY^jrru||yy{{z|||pZY\\W[nzrefbF<>AECGEGJEGILMRPUZTSZ_SUXXJAB@A>679@HJGG;KPFHHJE<GJE=9AD=>DHIOUUOKJJJMEILJPNMLLPNKLNPKNTPKOSB8ACEDBLA3?<BJKFEJGFMNNMK@ADHAFIEJFCOLLPHAEPRPZUOHFENC@D:99<787<@AACGKKIBJMHIKFEECFPWPECNLFHLLABQRJNOLRRPVTJGBLE;@DH<G=9;DCA3BOJ=KPQR\\\\RNOPNJCFLGA?9<B>@71A99A9I>4ACPbQU[NIUeg[[RGJIGCA@@MQ>EMGE;o~}{|{{}|||}~~{uuz}~}}|{}~{z{~}{~~~}~|yvuuuvy{{{yy{}~}~~~~{zz|}yvttrmmpnkifdddcaaaba^\\\\[\\]`\\YMPQOaMQ^e`T\\\\WVUUTRQRTPFDHOKRQLPDNMPKKPZ^]ZMFIJLSWZY][OFR\\WJMW`RPSY^dZMW]dc`[bjdcfii]aXQW^dXDKSQQNS[[SLVOJJL`\\ZXWSOG@>JXROQNTVNKMNOQNTf_^c`^^YUX[Y_ecg^VQKAQ]OKJHZTWb_bfec^``[aefdbica`__^bjia^bfcag]Ycdefccijgilkk_ak_ehbddbda]\\bk]RaeY[d\\PQ^ca_^bkue\\[VXRWZVTUMRXNJQ]eehkmohekqkdgjejqokijhgdcaZjmefholmpikopqponrqnikllmmppnu{sswvtttsrroirvilqp}~oonjkchun||lyz~{ƵʸǼļŻιɷȵ}wgwurufibanp^Te`f}ηǻ«}ywuuy|zwupgeihgfa\\]][YWXXURRRRRRSRQQQSU^^[fmj`dq}wĨ٧ع˾{yêƬ°®{wuzxt~}x|w}wipyxnc[TTWPUQN]jrdTkf[\\Vd{t_ebj{q}ddjp{wibdXdo^agSLN]bo\\HIdeaZb]hqnmcUOLMW\\YUSSTWXYTY[XYXHHHWMFGDLWRJF?=?@>=?@AAABBBA@A?=:<ACCFIKMJKGEBCEB:4=GIK@:;8@KJJE=84:IF*\u001c !!  !! \u001f\u001d\u001d\u001c\u001e\u001f\u001f  !!!!!!!!!!     \u001f\u001f\u001e\u001e\u001d\u001d\u001d\u001c\u001b\u001b\u001b\u001c\u001c\u001d\u001d\u001d\u001e\u001f\u001f      !!\"\"\"$$$%%%&''((****++)))('&%$$####\"$$$%%%&&&''''((((((((()))(('&&%%&&'''()**+-(-Kϧ˝ěοsoʱnio}qougҶşyë­ϨyzibfkuJ\\ƫzvwct~{sty{q\\ztxw_X\\bcPP^pcGMQWdclcQ]Zj^avx~s\\jk\\YZ[]YZkjaklcQXQdeaaX[ZcgPTH?I85RUUWY^^_dbZQYV[\\W^f`OQUbfaZRUZ\\^^^^acfdcf`WTLCD>CHLP[mvqt}|zyyx{}rqylejia[emjhcO@ACCADCFHDGKKNQMSWQOSYNT]\\JBGCCA:9<=ENKKCNNGNOKGIMLGACIEDJJMRWVQNLLMOQHPSMROOOOPNLLOPKMUWOMUG6>DEFFH?1=;?HHAEJCCIKKJJ>?AD>CGFLC@PHOQD>FPROWUOOMHOBC@7=99762>B>:?GIJF@JKGHKEEB@EKPNCDLJHHLK@ANMLQMJORRWULIFN@4B@E9F?=8@A=7IJFALONS\\TOMQROLMQK?A>=ENHB6;?7<;AF18>>\\YR^VJL[hcZ_QHLIKD?>AOUCLWJ:P~}}|~~~~}z{{{||}~~{utz|}~}}||}}|||~~}~~|yutvvvwz|{z{{ywy|zy|}}{yxy|{vromljgdeghfeeca_^^_^\\ZYYYYXUpHSVQ^WXbf`\\_\\XWWWUUXYYRKIKTRWWTRJRQTTVXZa[XPHKNQTVUVXVPIT\\XLOZaWTPXadZT]]ccc`gmgelokaeedd^f`MSXPWR\\XZOLSJLORb^^__\\ZPEHPTQPRPVWMKMNOPNU`[`e`YVVSTZZ]cbd_UIHBSXIFGFUVSa`_cbaY[^[aca^[d`_`[c__dd\\]`d`ag\\V_a^^``egackig\\Zi_cc[\\_^_^TT_fSQb\\TY_XIO`b_`_clsb\\`]YQXZTSSMSULPY`ifhmmoecfie]bf`fojgjegfbhnajj`biojimdfjkllmortlfjjkmmqply~rnutrsqpnmkhquefljx|lijiichsp}xm}|í˾̺úĲۿwnwzozyglh`lsbZfdizúĨ~ǿδ{z}ywseddaba\\Y\\[YXWXWTQRRRQQQQPOOPXa`\\hyvbjr«ͮӯ}ɽûʹwwͯwzwuyryym|tqqgWUU]XPQ[igWTi[Uacgqoc]]osq|gVOdru\\_fnpg_J]pTSS[in^VameXbbcrnljdYPEI^bRGMOPPSVP\\RQLJCFGQKMJHKLIGA==>?>=>???@@@@???>>BA:;BHOUVLNNKIHIB=IWYNE7116EKIJIE=?MH*\u001a $!\u001f     \u001f\u001d\u001d\u001d\u001e\u001f\u001f  !!!!!\"\"\"!\"\" !!!!\u001f\u001f\u001f\u001e\u001e\u001d\u001c\u001b\u001b\u001b\u001b\u001b\u001d\u001c\u001d\u001e\u001f\u001f      !!!\"#\"#$$%$&'(()****++)))(&%%$$#\"#\"\"#$$$%%%%&&&''((((((((()))(('''%%&&'''()*++,*/O֦Ƹ̡ŕȝ}ž{ulou}mӺȨϳ}wdZaYr`IsrsvovztuyyzyepueY]dlaMTcoSGOQbgdhVXT`jWkvv}kekg`__`bS]hfbel^QZN`bcd[_`]kQTGBC2ATSWYY]X`]_V[QW_`cghZ^_`ddaXW[[Y]\\]^`bddgh`OZ`UNHHIIPZepqrxyzyxwz}qdtxuvzxf[_bhmXGFFDACACFDEKLOPJOUMLNQKPYVMGKEEC<=@BGNLKJNLITPIHLNMJIMMGJPMNSSOOMJJPTSQ[[PQNNPQQOLMRRLORXRLTM;<DJHGHF:<=@IFBGHDFHIIHF=?@@=BEFI;BLHPLA:FQSNSRPSPKOFF>5>96971CB95?FHKG@JLGGJFG?@DDNLEDKJHFKM@?GINRLJMPPQSRSNN>5F=A<CDA;@@97IHEDMOMQSOOMOSOMRSKCF?CGPPF==:5:<D53>9I`N\\^MIRbf`[aSLNGLH=:HRWHPbM7z~~~}~~~~}}{yzz{{}~~~|wtx{|~~}}|}~~~}|||~{wuwvuvwvwxyzxvwy{yy{{zyywvx{vmgfoupfa_]YWVVTTRRRRSTRSVXTT\\\\]`_`cgjjllpvz}~FV\\T][]eg_e_\\YYYYUW]\\[WQKPY[^aZUSZ\\]\\_`_d^XSORTWVSMWVUSOT\\ZPR^bXUPXccWX`^ccbdkliimrmajood_idTVVPRVaW[LMQELS[a`baaa`UMPRRPPRQXVMOOOOONU[Xad_RMVROZ[\\\\`bYMBGDSRABCFM[N]`Z_^_XV\\Z^_\\YUa^ZYXf^U[^Y\\`^\\dfYTXZTYb[bb\\`fggYTf`__VTY][XRQ\\\\MU^RQ[\\PDR__bd_fro__gd[SYYSTSMSQNX_ahghlhjb_cc]U[_Ydna_ga^aamoceaY_kjghbacdddhmppoheikjlnpnny|slrtkppkkjhgqsebifs{jbghhbisr~rpíţ̿ÿǺѯ{{ow~mnlnkakteimemzȽ̽}zt~oeb]]]ZWY\\[YXWXWSQRSSQPPQONPPYbe[f~mpv̽ӾѦڵ{~̰ƽª~Ģ|~Ƞr|twuwzrwiru{n`SZeXUk^h_EXWKRT[hfo`Y_qlrs`PKhrgU``es\\[Tdj\\cKTope[co\\]abqsjkjcYKEVmgRHNMNSRSNQFECCAEELQWNLLHIFB>=>?>==>>?@@@??>>>AL>4<HKIT[LRSSQQRFQcYC?E>-6EMKIKKCAJG,\u001c$*#\u001f\u001f\u001f !  \u001f\u001d\u001d\u001e\u001f\u001f\u001f\u001f !!!!\"\"\"\"\"\"\"!!!!!\u001f\u001f\u001f\u001e\u001e\u001d\u001c\u001b\u001b\u001b\u001b\u001b\u001d\u001c\u001d\u001e\u001f         !\"#\"#$$$$%''())***++*))(&%%$$$\"#\"\"#$$$%%%%&&&''((())))))))))(((('%&&(('')*,,,,1FjزЪɟгƶytipӻǨĜʤȘvbU_OiǶRQ}ǣrqpµyxx{o|y}kxks|uxw^deprYNXceKJOTjec]UQLl^[rtuzhkkacecb`S_f``gk[T^O]`ddabb^jXUEAE2KQSYZZTT`Y[VTW\\^hggijaba_`a]`ZSV_\\\\^_abekg`^jhWJL]a]WY^cgptv|zxwz~vjnvw|~yd]ahziNIIGEC@BDCFKMQOHKRJIJIHNUROLNHFE?@CEIONLNOKLVOGJNONMNQOIJOMOPMILNIITVSX_[TQOORSSPLNSRMQNPUMUSA:DMHHIKKGABJDBGFCHFGHGB<>>=<BCGE6IGILF?;GQSOOOQSOJMIG=4>87;;<EB=<BCHLLBJMGEJFI=AC>KKECKIEDKM@>DHPPLJLNLLQUYURDCK<@BAFAA>@58DGEDLONOINNMJSNMPRNPGAGGOTKB?;7:=>4<=@ZPR^MIKYb_\\_aSQSHNPC:FQYMJeRU~~~||zyzxz|~~~}xtw{|}}}}{}~~~~||}}}~}xvwwuutrtwxyxvvwxxyyxxwusrrsohk|yuqmigd`_\\YWTRPKMQPQPPRQQRSSRSUTSSTUUUVVXXWXXZ[[]]\\\\[_ba`eijlprtvy}GX[W\\^bfgcc\\^XYYYSX^\\\\XQLW[_cdYXWcb^`cdhh`XYY\\[ZXSOZWVVUV\\]UU`bZXOXdZT[^\\ddadlmjggqk_jsoc^heWTTPO[`UYKLLDOX]^`a__acZVVTTQPRS[XNQPNOONSXXaa^OFSQLYZXW_\\PE=HCRK<?BEMaR[a[[[_[QVXXYYUP]^TRWgZKV\\WY[ZYbaVSUTNWa[d_[`ade[We_[]PRW[WRQMVQIXVKRZ[F?Ya_dgaium^`gfaYZXRWXORPP\\_addee^d_[_^ZPW[Sbk\\Z`[Z]aoma_UU]keacY^^```hnokb_bfjjlpomsyztlqtegmkjhedqtd_ebnyh^dghdkqt~nrĵĲͿĹĽ̵´psmtrdrqshktdivjm{~в˼ΰz~hebY\\^ZYYYXWWWWURQRSRPOOPNPTVU_hWkxvx~íҿ˯Ԛ֞zɿ͸Ʒȱw}uČm}uwp{rlrozziV[dW[uak\\@^O>IAVjfk`[epnqnVQYtl^^c_[mefoqamgSUxrlY_YP_bnxmlme^XPTjseWVQLMPOPKCCDBCAFEJTTMIGEFFB?=>?=<=><=>>>==<;<><0<CINW_OOQUSVYHU`S=5NP;?OSKFHIIHKC0+53( \u001f\u001f\u001f\u001f\u001f  \u001f\u001d\u001e\u001e\u001f\u001f   !!!!\"\"\"\"\"\"!!!!! \u001f\u001f\u001f \u001f\u001e\u001d\u001b\u001b\u001b\u001b\u001b\u001c\u001c\u001d\u001e\u001f   \u001f\u001f\u001f\u001f  !!\"\"##$$$%''(()+*+,,,)))'&%$$$\"#\"\"##$$$%%%&&&'&(()))))))))))))(('''('((()*++,,0@eѵǼӻqŕɕʗvuz~ipսǭӥÿǥxx`P]Ph̒IX|xŅqmxĠtlt{tzvnvwrwjhom}qSTYa[JLQ[g`bZTFNjW`pprufkjbdgfc`X_aZbmhWVaRY\\ccc`bafaZBCH1MPR[[YPT]U\\XVa[_iiijdbecXabb`XQW`Z\\^``bdlecjolZHKXqmc^`eipttzzwvz|zoltu~~~qhfh}WLNJGD@CEEFJORPEGNIGHGGLRPONNIFFABEGJMMLMMILRMFILMMLLOMIILMOPLIKLEHTSQY\\XSNKMQQRPMOURNQMKTPVTD<BMJGIMRQDGLFFJHFJGHHGDE??=<BBFB9JGFFCACIRRMIMRSIJKJG<4:99<EHFFEEFAEKPGLMIFJGN?CD;IKEDIIECHH;=EJPPNIKLIEJTZXXSQR=DHBEEG>@7:?CDDIONLDNLKHSOMNQSVHEGHOLHB@<;?=<@A<KZDXWAIK\\]WWbaTWVLMSH=CQYNKXL}}~|zy{{|~zuw{{}~~}||}}}}~~}}|}ywxwutsqruvxwvvuvvvwwuusqqpgdfz{wspnlc`_]ZXVTVVRUVSTUUVWXVVUSSTTUUUSPNMOPPRRRTTUVVVXZZ[]_bcegkmmqvy{z{K\\]\\[]bffg`UYXWVXP\\]\\\\YRNX[bje^YZc]^adhnm`___bcaZZ\\^ZYYZYZ^\\Yab[[MWbPQ\\XZff`blkic]jg_gsn`\\e`TNQLP`YRXMIGHW][[\\\\YX]b^ZWVVPPTW]\\QTQLMMKNTXb]WIDTQKWWRRYTGA?G>GG;9@LYg_bcc__d`SRRSUSQMZ]IIWhU?Q[UVXVW^\\TQQPOYb]da^`]ac]^g]WYOPUYWMJKMJK]PEPWTFIaeahkfoticchheb]ZSV[PPPSX]_][``V]]XXXWMSTK\\dSWWRVVaodZWPT^g[X[VYY[\\_flnf[[^fjjospq||zvntr_aeljdbatua]bYhwfW]fkinnu}ms{óʽȵ´Ρ˼qnuzukep~zx{shnddtlģ~q|~nccaZ^dc]YWWWWVUSQPQQQPPONNQUUP^fVz~wrơɶƺÓʴ̄лɹĲµyôà}zmsknj~xm{ot`\\ddcb^u`KcKZeBPaihmlttnmgTVixgklijfynnusgosZizrooaNMXmrtjqk\\Z\\`itmfidVNJFGLECEFEDCGFGLIFCA?BDA?===<<<<;<<<<;:99:95>C@GYeQTVKY\\\\MW]N>EheEDRUI@CGIJLI>:?<-\"\u001e\u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001e\u001d\u001e\u001f\u001e\u001e !!!!!!\"\"##\"\"\"\"!!!!!!!! \u001f\u001f\u001d\u001c\u001b\u001a\u001a\u001b\u001b\u001c\u001e\u001e\u001f\u001f  \u001f\u001f\u001f  \u001f!!!!##$%&&'()++,+,,,++)'&&$$#\"#####$$$%%%&&&&''()))))))))))))(*)))(('(()*++,-27Oӿs}ԘΞ|Ƹmyfoׯ©Ĳ~lw^I^WrqHT~pxxӪzsv̵|s{ti~vv|vowrpljytyfT_X\\WJMZf[\\`RJD_]`jfkoofblifdcbb_aWYjmaVYdUVXcaa`gdbc]CLE1LMV`XSNWQR_\\ddWchhjf^flhdeff[SZ^TW]ac_abidenqlbUNQ^gimlkiqsruyvvxz~xprsz{{vrlhzjPPOKDAHLHGLSTPCCLGGIHFKMPPLMKKHBCFGIJKJIIHGIGBFIJIIHHHGHGKPQNLMHDKQMOSSQMHCGNLLMKOURQRQOQUWUJCCJIGHLSTHMNLOQNKKKJHFIOAA?>CEF@AIFDCDEFJQPHEMRMEHJJF?:<??APMKGGOM@DMQMOKNNLKSMGF?FMEDIIEBD@7=GJMONFHKDBGRVW\\\\XUBJLBEIK@?<<>A@BGKJH@KJJDQOMMMRPLJJID8?@;?AEABHEDQPJWGCQJURNR^aWZZPOPMGFNVQPMb~}}z|~|zy|~{xxz|~|||}|~~~~~~{~{zzxvusqpsuvustuttuuusqrqph[dxqjjkdcb[XVTTTTTSSTSSUUVXWVUVWYZ[ZYYYYYYXXXXWXXXXZ]^][[\\]^^^Wd_]Z[_`fjZNTTTTXPa]\\]VPOV[fld`\\[]V[cfmmm`dbaddc]cf]^[]^YY[ZT__YYKU^MQZTZghabkjia[db^elj`Z\\\\QIJGS^QNVNECKYZWWUVUW^^\\YTTVPPX\\]]RTRHMNJLR[bZPGFUSMQMONPKBCAC<EL?9H\\gijjhiefheYSLQTMMJV]CDXhO7HYSSTUTYWTTUXZ]dhhfie^bcabf^XWNMQYVEGGFFNaQCLSSRXhkgikfopcefeddge]UYYQRSUVX[YTY^PT[WTTSKNOHY^ORPMQOamVTSLQ_bWSTSWWY[\\ekj^Y]^einwwrxyyrwq]^]lm`c\\sx\\Y^UcucRYennrkw|oxz¼ȹŲľíŕŸormwbwsmuu|phi_{lĭzni~~kemtwtsgcda[^cc_\\\\ZXWURPOOPPPPPOLMQSSU`[^ygιĺķʝҸкķȹͮǶɻŞu~nfmgew~}~ulyrot`gvj]g}mdtXivNIaga~|uojbbzwm}ulszwsovxsw`uvwpvkbM`onjom\\X^cjpplpsi_SHFHIFEIFCEEIDDDA@?==DHC?==<;<;;::::987767;A@5@Od_ZbY`g]RYXUUatpPNQND=AGGFHJKNMB5) \u001d\u001f\u001f\u001e\u001e\u001e\u001f\u001e\u001e\u001e\u001f \u001e\u001e \"\"!\"\"\"##$#\"\"\"\"\"!!!!!!!!!!\u001f\u001d\u001b\u0019\u001a\u001a\u001b\u001c\u001e\u001e\u001e\u001f  \u001f\u001f\u001f\u001f\u001f\u001f !!!###%&&'()++,+,,+++)'&&%%###$$##$$$%%%&&&&'')))))))))))))*****+*('(()*+++,1<KlûsҬϻhxh|oϼԹźϷizt]Jh`u]JWxev}sņ|z~yĩĢyyyllmpwqnzvurvnif}qw\\afWYTJQcbTa\\GGT`Zjf^ejh]amjicbbce`S]pi_[XgWV\\a__aje_f]IRD6II\\aOOVTINeacZ^gagiccqonkije[b`YRW^gg]^`gcgqroqi[MKVVclsjgrprxuuwwxzwqqwx{wrqqity^OQMFEOSPNPUVRECJEFIIEIJPQLMNNNGEHIHEIIEEGCCB>BFGFDBBDGFEHQSPPTMIMNLMMLLIDADJFEJINSOPSTRRX[\\RLJJHGGLURJNMNPSQNMQMHELNCCA@EIFEJHEBBDFJJKKGFMLB@GHFGEEGJEGSIHDFPT@AHJKKEMPMRVTLNHFOGEHID??<7?FEINHBFD?AHOSWZ[WUMRKFGHNB@??@?;CFDDDAIII?NOMJKKJMKSI=36<<AGIDFIIORMSN?GLFMMFIVf[[_UONLHDMTSOJ}}{wvz}}z|~{zz||{|~~~zw{~~|ywutropssrqqqrrssqomoqi^hwrplhc`^][YXVTUVTRSTVVVVVVVVVVWWWWXZ[\\]\\\\]]\\[[\\ZZZbgc]Y[^\\fiWMRTRQWUc]Z]VPQTYglcb[Y^VZegoil]daabba]dj\\b\\a_YVYWNVZRTJRYSVTR^higchilh``_bdhg_WWYPIFIZVIMWNEIKPQPOONR\\_YV\\[WUUWZ\\\\]SVUNQQOOUdcZPIKWSMLIKLMEBIFEAN\\KBXgoimnkldehfaYOOQLMLT\\@?TdM0BYMLYOQXWX^bddcjqllqicffdhi`[[SJNZT@EGGGOaUIMRYcbgjkgifjlaffbdbinc[^[V[ZXVVX[SS\\NNYSPOMIKMGSWLOMKILa`OTRMXeaYXWX]_^^agkgaacdgmu{wrzxyywwh\\Udkbh[m|[U]Vds`OTcqrskrvu̽ϮĹנ˼Ļw{wwrz{gexody|ei`muxrxmxqgnskefjmnljfdd`[[]]\\[\\YVTQNNPPOPQPPPNQTNP_\\Rmwmˣwʴʿεż̿vѻÕɹȽ±y~xb{jeq|~{ueevdtmk~wyw|||^_rbzlb|ytq~wymutn~xmo{ysw{oTpmoiq]PZeglqmqsqmiXLRPGGLNC@DCC?FDA??ACILG=::<;:::989986567:<=6<U`abaedrZZX^]^ryZCQSG<<BEEEEFLW[OC6%\u001d\"#!\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001f\u001e\u001d\u001e ! \"\"\"###$#\"\"\"\"\"!!!!!!!!!!!\u001f\u001d\u001b\u001a\u001a\u001a\u001a\u001c\u001e\u001e\u001e\u001e\u001e\u001f\u001e\u001e\u001f\u001f\u001f\u001f !\"\"##$$&&()*+,,-,+++)'&&%%%%%$$##$$$%%%&&&''()))))))))))))****+-,*((()**+++,Do{ƻrzоŠ~տj{i~|}s{ѿͬ˼нſԽħopzr^RqgxUJof`vkϕ{x|vtʶzztwu^gqmmqwpvkztqljevzycaldVUQPYdU[gQGNZTbf\\Zcl_Wgldi``dhfWOcsgbaWiZ[`]\\_cic_h_MTL?IId^JTYLERg`\\\\c][cgfpypmifiijeWV\\]fncVY_c_jtrv|sgWFIKOZlj]^msypoqonywpqtw{wjjlmw|nMLKHJSVUTVWVUMHIGHKGGKMNROOLLNLJIIICCIA?E?=>;@DFDB?>EJFDGPPMR\\TNQRSRMHJGBCDDDCCBILGMQTSOWY]VQQQOMJNVQJIIJKNMLLQIGHIJFEACMQKKMJLJHFDKICDIKH@;@FGEHJLQSOMOCEFHNVC>@@GF?DIHQTPPTMLSNGFHC;::<CDBHJB@D;@BHMSVUUTUWSINIIPDBBBB@9EFBABBGHI=JOJFJIIGJTSIC8<A?FHACIKMMKRG?DBBHH>EUgX[bXONLD@MTVL^~|{xwxz~~}~|ywx|}{|}~~zy{{yyxyxvtssrpnnnnnnmkloh^o|vpkgjjfc`\\[ZYYVWWWWWWWTTTTTTTTUWXXXZZ\\\\ghe^\\_][ceXOSXRRT\\b`[`[UUSXchdcZW[]]bchch]b`^``^\\df^d__a^T[[NPXLULPY^ZRW`fkmffhklfaehglmaX[_YNKWgWJRZTPTMNPLGJLS[\\RSddWU]\\Y[[[WXZVVVOQZje\\RLTYUROMQNPIDUSKN]kXQbgmeinlj^_ccea[QQMJKRW<;O^N2?TMMXTX^`dilmjfmslpthfkieljb`aZKNYUGKNOLXcZPPWbmcdfjigggjchffkelqiadc`fe^]\\Xb[SaTLVSILMEJMEPSHNIJFQbXQTTUek`dg`aimheflqolllklsy{vpxtu{sxv]X_him]ey]V]Xgs\\MSbqspnld}ξķŲ߶ɺ~}xh{r_qzgh|~mdeh}s纡xvsnmpnfcgjigghfedcbb```^\\ZZYXXWURQNOONOQSQNNRUQKR^TX|lǸ~»i´øƊ˷ǶǺļq˝лĊзƽʻƭ\\mkpyvwlZhvV}|o|sg`{yn{nxuvzioyzkfurnpgUW^dmrsrrmpsn[W`TKMVPB?B@=@KHDADDEGGF<89:9;;<;8576237:<:6<PXWSVcoqdRXai`rpF8KI?=FKGFHGDDQ[WQF/\u001f(.$\u001e\u001f\u001e\u001e\u001f\u001f\u001e\u001e\u001f\u001e\u001e\u001e !!\"\"\"#####!!!\"!!!!!!!!!!!!!\u001f\u001c\u001a\u001a\u0019\u0019\u001b\u001c\u001e\u001e\u001d\u001d\u001d\u001e\u001e\u001f\u001f\u001f\u001f\u001f !\"\"#$$%&(**+---,+++)'&&&%%$%$##$$$$%%%&&&''(())))))))))))****---,*))*++,,-.A̺oǿwi~hv~~wwmѼ̹ͩ¾ĠŶr}qm`^ttTS[g~lnʥ{{r{qűpu}sp{yoXkqgpttsojp}mhcdqun[lmbRVXUY^Qc`JOQQSe^TWeiV[kccc\\]in^NQjtieb[n^cf\\[^aia_i`QZWFKOjZMZQH?Ze]Z[[UZ`ggvytpgisoi^[`cdpiUNR\\]aopmz}slaMEIINZeeH]vzoiigfoqopuzzq`_`l|{unSNKKNSUTTWYVVSPMLLMLNNQPROQLKMNKHFGBBI@=B<;98?BFD?:>IIFCEOLKS]SMRUVUQMMJEDDECGCAEFBKMOPKRTXTPPRUSMOTRKIHKHIHLMLIHIJIFFEHRUMLJKQQMIIKD>BHG?7:BGFFHKNUWVMICDFLJPG>79DA>?BDKHJSQMVVQGFFA:9:@FEBDB?AA9GBHNSSQQVTYMGWMNVGGJDCB;HHFCBBFFJ;HNDBILGBJN\\QSHGG@LF?GNICAGNC???EIC=JUYOXWYURRG=JXVP}zz}{{}|{{{y~~|wtuy|{z}}{~~~~||~~~}{z|||}|ywtrpnlljiigjle`uzxwtonnkiea^__]\\ZYXVUUUUTSSUUjfd_^a`\\_aXWWXVTPccebb`]XSW_ddcZVP`a__^^c]`[^\\]\\[d_ce[[d^T_aTRYIWOP\\f`ZccbkrkgijmhbmrilslcfjgZXhpeW]d]_`YYTKLMX\\V^RVjcRW`YW\\[[][ZY_XHOYkfZUSY[ZXVV[VWROa^X`jn__adeagjiaXZY]cehVYOGLQP9>LZN9?NRU^_cejmorqkjqplsrdgnignifhe_RX\\XVY^[Vgf\\Z[_gkabaiidjlmfijmtnoslehllpofbf`ihYiaQYVMQNCLRKNRIMHPQ]b[XZ[asofqnjnvxpmksxvuttpntxxuptrs{osf^glop_bs]X]ZjnYQXepsstshz˼ƬȾϭ˩z~|r}{qfi}u_xztgdbu{rľȶrqpmljggeeffeecb``__^__^\\\\YVVUTTSQOONMOQRQNOUVMLNQSepħ}}zkâǺŒžƼǫ÷zxǟ¢Ѱ̱]trwuyirfXrvPuzw|}td~vo|x~z`w{jtxslo`\\abhyzppkhswndcgWXWfRDB@>>@NQOHJAAAGE;689:8=>=7483/8?<;=?LTNNQZjeVJOYokpdH>IPICMWPPOKFDHSTTUE.1>+\u001c\u001f! \u001f\u001f\u001f\u001f\u001f\u001f   !!\"\"\"\"#####!  !\"!!!!!!!!!!!! \u001f\u001e\u001b\u0018\u0019\u001b\u001b\u001c\u001e\u001d\u001d\u001d\u001e\u001e\u001e\u001f\u001f\u001f   \"\"\"$%%')**+---++++)'&&&%%$$$$#$$%$%%%&&&&''())))))))))***+,,,---,++,---./1Exպɹ~|xʿȺf~npwyv|pԹϬͽƼǪnh`ju}wTqh`pzzyncvtwumxvcoyzyk\\lmipkfujk}t`_ajpsr[`mhaSb^S\\^WaTMPRP]cRTWg`Shg\\f\\VcohLI[ltid_`qbih]e^`i^_gaT_aLJWmQRYKF<]dZUVWSX^hgstyoeswiiccikikWJJO_]kqhirvuocUQJIKQ`dLEvuiddb]bfjqu|teUVZbuyhl\\RQPQTURRUXVVVTSRQQSRNRQQPRMNNMMCCDACE>??9736>@DB;4@KHEADKFJQWJIQTVUUSQOJFFIBIEFEE@GIKKDKMRNLJLSRNNQPKGEKHDHOMKJJNNKKLKKSTMIGJOPMJNH@BGE<77?FEEFFINWSRJFGDEMGGG908E==;>BC@KTLOXPLGFCAA::AFGE@<=B?<NAGNSQMOZTVFE]QW[JMRHEICJKJGEBDDF:GLA@IKCBIKYQVTTRNXJGSPE=?KM@>DKJODAOTNIRNZ[\\ZWSTOC`~}{}~|||||||z|}~{xwx{}zx}y~{xwxz|}}~~}{z||~~~~|xwtqnlkhghhe_c~|xuttssqonljgedb`_[Yiff`]ad_^^Z_^][[Rchegab`YTV]aecYWL\\g[[ZX^^^UaU[X\\cYiaSVc_S`f_VWJ\\RRahgenj`fsnjjgkl_oxcfqqmptqddprrgjlgkhhg]T__kgZj^`k`V^`TXd`_eZU^fVHSWj_Ua^^a`_`ae^]][kecigda_^^_`gecVUWPV^ci^[NJOTPEKJQNC?K_dgjijmoorqkknmnrkainijlgmlc`Y_`[\\gnafve`cfiec_a[gldqvnjlnq|yrrnlknrwtoelmiqfmo\\]]ZXVLRWSSTNTR]cjgedefmyqrwlqsxzwslw{wxyvnkswsrpqwysswmh{o_otsubbm[X`]gfW]ioty{~þɿɯͺѶȳֻƸĸy}}s}nhdsz~frzxxk`ap{vѮ׼zxwqsxrnmiffeeecba`_]^`_\\\\ZXUTTSSRSSQNNOQUTNPZVKKNP^r}ktn¿óƥ~zmʯɫøʮ{novv`qf\\q]~yzzpz|extlz}~zz[xny{uolk]alxsgjcjyxmmho]gcvTJH>CBBU_cNOEEEMD88:986CB=5D91;EDADGNPGJOW\\RA?GX^giYMFEQZVY_Z][MJLNOPUWQINM=#&)\" \u001f\u001f \u001f\u001f   !!\"\"\"####\"!\"!  !\"\"!!!!!!!!!! \u001f!!\u001d\u0019\u001a\u0019\u0019\u001a\u001b\u001b\u001c\u001c\u001d\u001c\u001c\u001e\u001e\u001e\u001f\u001f \"\"\"$%&')**----+*++)'&&&%%%$$$$$%%%%%%&&&''(()))))))())***+,,----.-+,,,-./5PåջǮv¥lzwxqtx}Ͳֻүξƹƻyk_mvwkWXinljh^u}stt shk|{upZjxm|{i_jnni^cueq}aX^eu}qhia[igfc_i[Ug`XXOMPNW`YOYYeZ^r`[hYWkoX<Qbjsha`drdigbm``i]^jaVdgONdlJVQK@?\\bURUUQV\\fdostfhsuoldnriiZIKPYfjskdgkrzue^bRGGP\\^`2gtc\\`]TTZbnpzm[QRZZdzmeeVSSSTUQPRUTTTUXWURXTPRRPOQPPUPMHE?=D@>C>9408=@A=47CGED@DF@IRRCEPTVWWUSOMIHIAGHKDF?CGIJ>EGMIHFEQQNLMIE@DJFDIOMLMOSPNSRKJQQLECGHJIJMEDMLC67;AC@DECEMVGIHFIDDJEEI1.=?8>9?@;=QMHROGGFBAHG:9CEHD;9<B=FK>FNQOMLXSTAD\\R\\YMSWMIPOMNNHGBCAC;EJB?IHDBHIWRRX[XW]MO\\SDDKWNEBLTLUIKPQLGTVTXc][d`SM}}}|}}~~~~~~|{{zy{~~~~|z{}}}}{|~z|}~|zxy{|~~}}||||{{}}||}}zvusokifeheZe~yxz{~|{zywtlgggf_[ae``_Z^d^aaUbkbga`_ZUVZ^ccWVSSj\\VXTW_ZV^SYV\\^Zk[KRb_WbjgUVVYZ^jlmnpob]mpjmgfk\\jw`]iokqyoglswulmppojosj`hkwncsjhjihgcYcpehlUTilZWb]g^`oe`cbdhkjaaaapgbd_Z\\]ZYZ_ba]KRYMRZ^b_XPSTUYWVNOPNESljklkjnhlqnfeghnl`_jjijdgme^^^`]Ydpognvfbckma`cf\\gqjwqoqov|}xqpqnqvywujjshmutui_efdaZ^][\\ZX_bilpnmmmmqxswtgnpsutsirwpwypijtrnqopqsuxxlfpo_kxsvjdjb]cceick{˽ȼͺ}ȝɩθwlndapy{~nnxvyn_dq}{ƿ֮Ư{wzutvnieceecba`^]__^[YWWUSSQOPRTPNNQXTOPR[VJKMVixzzlypo~ĦufƸȫì÷Ȯyqt~u_}ug^mptz|on{isl~iwzzz[zp|{|qvpZhxzbeger{qkokwbuj}SSW=MDOllqNWSONPA;::945JB;GH17HFEPVEABAHIIG=?FRWX\\XHG@EQYaccdgYMTZZWZ[UO\\^O42<- !\u001f\u001f \u001f  !!!\"\"\"########!\u001f ##\"!!\"\"!!!!!!!   \u001f\u001d\u001a\u0019\u0018\u0019\u0019\u0019\u0019\u001a\u001b\u001c\u001c\u001b\u001b\u001c\u001d\u001d\u001e\"!\"$%&))*,---,,***)'&&&%%%%%#$$%%$%%%&&&''((())))))))*****+,----.-**++,--/[ʯѶżȧpms}~svwyy«¾·һͿԺôżǡydkvp|f`uYlf_^Z`olyzi^o~u`Xiog{cajql_[gscrrU[]kxqebX[fkggdjfW`k_XSPQRO^[OWX[a_oqXa`[erkEBabjsg`afnemhgt^_iZ^m\\XggV[reIXPJ:B\\_RPVPQVYb\\mnfalmopnmuzmaRPX\\djrmcbekqywlgf_NABOWc/SvaSYWPLP\\dgqgVPRYYZu|feUMQTUSQOPPPOQTVWVQWRRSTOOPQNXSPMG:;C>=C>944:<==:8@D>BB=EB?IQKDHOTUUVVYPOKHHAEKODI?AEKL<FDJJFFCNQOMJC?>DFBCGKLLQTOKOWPDFONH@@FFGFGHCGSNB;<?B=?CD?CLM?BFFDAFHGIG22=;:@;?>;@SHLPHCDE?DNF6<DDH>57<BAM;<EMKNQHSQR?DZN\\UMTWQNQXTTRIIBBAA;BFB@HHFBDFXRN]^YSVIM`\\HMXVNJJWXNZNQPQPOYVKR_V[obSkxx|||{z}~~~zuvzz|~~}}~~||zy|~||}zzzy{~~}}{zzzywx{zuqoljiecbZh~xuw{~~~~|uohgc_XZaab`Z[dcbaV`k`g`\\ZZVTS\\``VQTRccVUYSZXYXSZU]ZahXJTc^]holZ^bccknmrrooeWcnfliad\\_rfTcohlukinoxsgjuxokqtjfiiwofokiivwokjproqfXaqpclqjiiqsgcefgjlhcdcjo]OW_QV\\YVUa]ZWEPYRQVX[YVVXUV^]WRWTVS_sfhk`hi_hlb^a`^hdU^iada\\hh_][_a\\Zgplnushdiojbeplamrnyumopw{~{pqqnrvxywnfsjcvwwo`hlkighebgc_hqqkprsqnnntrqkacjpoonhrniwqhflqjlonmnvyngkncfwvvqjhhijlsz{}ھƷͽͺ»wwvзǶִɺx}zy~te_pzu~rjttvpaerz|н׵Ŵүʹwile`gdca`^]^^]YUUUTRRPNMPRONOQXUNOS_WHGP^kxxw|vw}Ĩ}cñĮõƯǲomsujz}h\\uyo{tjtwptapjr~xyy_{p{{}qh`yyl_jemwuhknlsixm|W\\_GRGf}~wOd^QPM>?>;86@S<H^72FRGUZL<;?E?@>DFCO\\PTXOGG;GNZagnkm`Wab`]eXNV^NLFG=0,$   !  !!\"\"\"####$$$%#!\u001f ##!\"\"\"\"!!\"!!!!   \u001f\u001f\u001d\u001a\u0019\u0019\u0019\u0019\u0018\u0018\u0019\u001b\u001b\u0019\u0019\u001b\u001d\u001d\u001e!!#%'(**+----,++**)'&&&%%%%%$$$$%$%%%&&&&'(((()))()))***++,,----./,++--//-9ɊuɷWov}zp|uqľԼýǥkgu|}zgseXpWUWUxxwdnl]]y{qUXhli{Y_iqgZ^msepkV`XptfbUOalkigfma[le]\\TWWSU`TTZU_ajsjSlXiov^AVi]jp^^_decmbvwXagV`kVZggajwZI\\QK;E\\`UQWMOVS]Rjc_^ahgikj{mb`dddgnnd`bgkquvsohe\\K.;WY+Nu_PRSQONUZ^dcUORZYXm}kdXGPVQPOLOLJKMPTUTQUQNOOONPSLRZPSM=;B?=C<68:;;;:;?CA7?><F@>FJDFMQVSQQS[QPMIE?BOQDF@CGNMBLHJKLHFORRSMCBCEA<<BGKLRQFDTUF>ELIC;=DDDDACAFQIBGEBB<?BC:AKD?CHF??FHKNG>>@CDAABBCIOIPKL@DEDKJ=5HDFG956<CFC2<ILALSBMRR=EYK[RMTURPR[[XSNNCAEC;>DB@ILIA@FVOM[VZRO@KabKQ[NMJX\\VSXOQNRRRSQKP\\X`f\\T~yvtw{~{uz}}{yuswyz|}}}}{{zxx|~||{xxwvvz~{xwuuusstsomljhd]]q{z|}~~~}|vpjhdaXW[^a`][^jc_X`d^c_WSXYRIX\\\\WLOX\\f\\U]WTX^WU\\X`bgi_U[eaeotojkookrtlsulhf[Yd`fi`bZTkiTbqgdphdjinlagw~tosqedliqobijcfxysruqqxkfjmrqmqspqqsqjinnmjllggjnjVGS]NRWUTTaZRSFNYVORVUUUW\\VU\\\\WWaaabjmbgcYa_YcbWW\\ZYc]Sbe\\[Z]if_]]gf]\\imouyrlntukeozrkuvr|zoopwy{yqqmkputxxpcnl]nutsdcmlhikhejkdjvthnssqliinnleZ]fkhmjjnafqhcfkjglnport}xmjoonxzwwokqzrrßųíȧˢtoʥϻëzyvwyk^l{w{uioptueasuyĳΪˢѻսz~jprhgdca_][[ZYWTTTRPONMMNPPPQMGUZLQ`VHHUhqqvyx}{z¤{yeϿǹɳ·Ĵï{ko}puryu~dbolqitpxwZq{ksuu{wf|qx{ugp~yhgnkrshdqnmpoxkybb[WRM}uTp^KRH<CE<5EVX@\\U6>\\]X`TCCDMBDMPUGFXSO\\ZJIFAMT[mx{oxl\\ggdafVT]QNORH=?8( \"!\" \u001f!#!!#####$$$$#!  !\"\"\"\"\"\"\"\"\"\"\"!!!  \u001f\u001f\u001f\u001d\u001a\u0019\u001a\u001a\u0019\u0018\u0019\u001a\u001a\u0019\u0019\u001b\u001d\u001d\u001e\"##%')*+,,----++**)'&&&&&&&%$$$%%%&&&&&&''((()))()((())*+,,-,,,.02/,,--.03Hʶ~{nx{}u}nl~~iмп½ýmeyxnl__eORP^nsk~v_S]{roLYdjsmTcipcYbuselhXa[sj]^LQhmlgcih]dm`a^X_^\\^[RbVZbgpm^\\k`sspSSgcXnfT\\__`ab`mSef_bbP\\glirqWPeNREL`fWP[KPTOWVf^YZ_c_aef|emqonkmmg`^gjkortvtmgdbE=YD.\\hXLLNNNNPVZ]_VNQYYWfthbZFLQLMLIOGDDFORSRQPKKNKPROSMNUUSSG@FF?D?7??:99;?DA99><CG?@CDDHPTWOMMOTPQOIF>@NOD?DHKMLJOMLKQJJRRRSOJKLKB9:?EILMH?ETJ=>DHD>8<BAB@>>@EGBAMJFEC?AB:BHBEHICBDHKPPKLMOQKGHKKKKJOMNIEEGMK@6=LEMG<56@GD78:LE;ML9HQR=EVKWNLRQPNU[]YSUTHEHE9:BA@JMI=@FRJJUQUPK;L][NY[NMLb[TZVRMRVTKRWRXWYdgSdzvuvy}~yy{~{xxzwtv|~~~}{{{zxxz{||{~~ywwwvwy{}xssutsqnmmljijf__w}|}zuolhed\\XXZ^^_b\\ji_U`^^]_VLPXQFU]\\\\MJ[]fd[]c[Zd]Zc_dnmrlbfjjotvqtputmsqemtj`b`TVZbfaaROhj]epgcmeZfhffahvwqupcdmknk`klbfwxurmqytbcqvqoqqrsrrqpnptutjluqlmoj[FKaTSSQQSVUMRKKTUQSUQSUY^WV[YU]jgejkea^[Z]VV_WQX[Y]f`Zje]YWajgfdjul`crsqz|vstz{ngu|moxwwzympqtwwsqqhhnpqssofghafloqh[ch^ahgefhdlwtilrqqheeiljaS[feemkkg\\hoghhggknqvwuuskp{}}y|xqvy͠˱ĺǭȲgpĵƪ˹ļ}||}x}n^e|~uuliiozn]jqv̯ڸĢδ;xlupkvsldcba^ZYXWWWVTSROOMLLKKMONLKWYJMXOFL[oogwq{|pv{ſİwzvzβɺͻþmxr}mrkpq~vatq~qolnsysy]y{kt|os~~~}uo{~pr|xrzwonrsjlagunnnswivmcWhPV~r\\qVKZB:KL2=ZaWT]J@Vmdb]XUQLYMmfbVKfKIc]Q@GD:N_ftn]jhe^g_g`MVQRFHJ6*))'\"  !#\"!\"\"####$##\"  !\"##\"\"\"\"\"\"\"\"!!!!!  \u001f\u001f\u001f\u001c\u001a\u001b\u001b\u001a\u001a\u001b\u001b\u001b\u001a\u0019\u001b\u001d\u001f!$%#%')*+,,---+++**)'&&&%&&&%$$$%%%&&&&''''((())))))()*+++,----../21,+,,-/7Dnţqytvxeghзͻid{p_pwbg]WRUiwx|xkYN_{r`I]]m^XgbkgZczsejg]gfn]X]R[kkhcai_]gdag__aa^iU[fTcbjnjXkfmnydYgjXXsWS\\^^`^`qbTkjh`YO`msloi][kNZR\\ffQW^PWVWV^d[SZb_X^_mmezztquqfb^akjmnqtrpljoppg_CIXUPIHLLLLPV]]\\VNQXZX^cb_YIIKHIGFJC?>CMOOOOKDHHHOPOSQPQSSQPKNMDIH@EB=;;ADCA<BDCHGDCDFFFOSRJLJJLKRQNM@AILD<HIKJKNQOJOPHNRQQOLMPURH@@BGHJE@>HI><@BD@<7=B@@>=<?G?>AKIMPJABBBGHCOLIDKJLQRMJORTSMKNROJHGRHNEJHJOE:9KIMSI>5=IH@9B<H;<MF7BLR?CRNSKKMLLLV^\\WUWVPNKJ>;@?>GKG9CEJGHKMPNG:OZUPabOKNbXV^VROYUPGbZZUX^gfN}xuz~}~~}~|zy{{ww}~{yyzyvuwwy|}~~~~~}}ywvxyz{|{|~}~~}|{yroqqpnkjihhfij__}}}}|}}}ztomgega[YY^[aeaileT^a^[`XMMUVLT]^]OK]chfb]mn]jc^igdsmxvjnqtxxtouqttoql^fokb_^XWZcd``PPimgkkfemfYekgfgltzurtnffkkllbmpehx}ynbpqb^m{spusrtqoooptxzxll{|utpmhLFd]VTPPRQTOQNGKQWXUTWYZZ[Y_`]hkbgoi____\\YTU[WSZ^^gqjfohf^_lkhmuyymdl|xxz|zusyyngsuajwssuxsioqnsulnq_ajikljjifacggijj[Z^ZYbddgebowqlkmqmc`_dii[N^hahpmid_jmlleglppw~}w~uqu}~}}ŷЦķȶ{lpyΥŽ˺zyub_yqvoefhuwdaiwһĎǚ͸ſȱvln{gvtjjb`_]ZWVUUUVUSSQPONMLJIMQU_g]RNKJC>Jasfft|~uyrmyĔƴǽxt{|ؼ˿÷þžs~iqzlzhnqzplxxuxool||ssn{x{uhuwiq||tosw{wml|~yystlwpchbpuonlsoftsbZqMa{ndmPT];@VF+Vab[aYMDoncb`gkT\\T|^WRmdK`XU@CJ=Kcu|vk^gcg^jjudWVRZMNH1663,$\"%\"#\"!!\"#\"\"\"\"\"\"!\u001f\u001e ##\"!##\"\"\"\"\"!!!!    \u001f\u001e\u001d\u001c\u001c\u001c\u001b\u001b\u001b\u001c\u001b\u001a\u001b\u001d !#%%%'))++,,-,,+***()'&&&%$$&##$$%%%&&&&''''((())))))()*++,,--../..10---...:W_yȩ}ǳ~vvyxvflø̾õе˹e]otjZtj`kij[^jz{}}cXK_xowXL[UtZ`cYiiVb{skmghsojZYa`eied`cfYbc\\fe]f^dgfUf\\[fbggf\\phmpzaeofTapRU^\\]\\Sfzu_\\rlf\\WScqqilgcefT_^ijbPi^]ce^Zd^YR`e[U^^tzak}xtuznd^^hkknpqpmmjnxwj`[MEHGFKNMNRYb_ZVRRWZXY[]]\\QIGHFCEE@=@FLPNMLHBEGFKLOTTQPPPPQRRQIOQKOHCFGGIIKKNNMNLLJFKIEMOHFHEE@FRSSSIBGLCAHIIKMMRPLSKHOPOPLHIOTSMHIHIJH@:?E>:@A@@?>=BDBA>:;AI9?AGEQTJEGFGKLGQMHGMLNQNKFKKKJLLLOLEFJQIKCKJHHA8BULRRG9?JIBBDKCA5>MD9<IRA?LRPLLGGIJYcXTXVUXVPPIBA@@EKJ;DEEEEGJJKB<RVTQdePKQ[UY\\SSXZNESj[QS\\`e\\X~wz|}~~|{|{{zy}{xwvvutttuy~}~~}}}}||}|z{}}ywxyz{{{yz|}||~|{z{ywuuqnnnljhfdcdfe]f|{zy|}z{~~zxz{zzytpkffhe^Z\\b_SmckkeXWd_^cZQPQXR[[[YOTbhhdd_tybli_ileqlwxpsuy|{skrruusqi]ajpka\\^bcfb_aVVhlkpkhimjcilklmoruqpsnhhigfmfjofjw~{pbhxti\\cxvqvuqrpnmlnuywtmjuyx{slr^Ndc^YOHSTSXTPFEN[[V[[[[ZbYcmllf^kqg`alja\\YYa`Z_bfqzulnlnjpskgpqkiv~xuwzzpnspigogXgnjlnqleoogqtfkpZ^ecffcdhlcalikgebQ[e\\_gejgbqvomijtba\\WcheUOcjamnkgbgmnnedmosu}~ytt|οʯǼоŻ|d¼ϩϿvotx|g[p{rskcgdjwn_h~ӶӸǨzkqyltqfea^\\ZXUSSSSTTRSQNQLKQZXQNQZ\\WUSIA?9Ban`fky}y{o̶ǴƨŴw}ynūɬǽzqzjruz{lsvvs{{nuwrqssswn~|sgtqeoz|liuvwslfwtuswmviffjxqpmiqidopcaqNlvtljlM`O=PV98fXfgh_DUvnUoevfXgqgLapNXORfY`cjwth^_dn]ijyd\\T\\eSLC:E824+).& !!!!!!!!  ! \u001e\u001f \"$\"\"##\"\"\"\"\"\"!!!   \u001f\u001f\u001d\u001d\u001d\u001d\u001d\u001c\u001c\u001d\u001c\u001b\u001a\u001b\u001f\"##%&&')*++,,-,,+***()('&&%%%$##%%%%%&&&'&'''(((())))))*+,,,-...///./0/-,--.8cµ°â~|uyvjӽ̸аƿɾǺdS_hhdsi]p}~kcewhq\\XKaskunUKTRv|\\`^WofQbzrqokxyqod^ehjd]i_dd^hZ\\g^]j\\hj``hVdbcba[enmhynegscYkiUV^\\ZSPiroaeqhc_WUcpmgjhfmc\\cell_^oblrs``e\\YXhe[Yb[wp\\lyssyuijbgnjlkpnknomowy|{vk]SGGGDIRPORXaaXUTSWYYW\\_``[LILHDIECDLNMTTMKLFEGHIKOSTSQOPQRSTTOQSSULLSPNMPRTURPQQPKHNLHJICDBAC?GRSRSTGKOGJIJLNOKOOOPGKNOOPJGIKMMNLMJJMJ>:BA9=B@?CEDEHIGFD9?DG8A@BCOMCHHHIKLCJLFEJLIKIHAHGDEJJGHGADKNNGEKEDAB:MXQNMD<JPE@IMQH=5>JB76GNB?GOLLNGGGH\\cUUZTT[ZTVPKGFJILPBFDCBBEMFI@AUTWQ``QQJPU^WTUZSHG_bPOY^_`Nn|~~}}}}~~{zy{{zwututsuvvwz~~}~~~}}}}~}zz|}ywwwxxyzyxyzzzz||zxwvusqoommmljhebce`\\q~||{zy|~ywxz}~~}|}}{{|zvvxxvvusqjeghf`[`hdRehokc_Tfa_e]VVPUPbZUWO[djhbbayxbjm`ekgolqvxyxx{}yomquxxsiceowsf_bkkjdbc]_hhjrqjknnnmlnpqqqroqrnhffcajhcgdiv{xtg_iumXZrtpttooonlilvwrnnhlqq|rern[gga[RFPZSaWTNKRc]Zeb]U_jXbvwoedsnjef|sfcaank_afmtzujmot{|qhep|ejowxtqsttljjfcej^WeecfhhdanjdopbhlY[__`ddcfvk`qqmjgibeneaojjietvnnjjs\\aZYab`OTeickjgdblmph^ktrt|}zusru~ɼǽԡƶŴÜ}oȳɳ{pd}zjy{h\\ftsnhafedquboѳ۞}͹urzpl~nfb`]ZYWTSRQSSRSSRPNPX\\]XSMQ_\\U]`O@?;=Zb`cbw|}v|x|ŹʴvsçįЪȸq{lww|tw~{x{wvhxvssm~|wg|xqhrnaly|{ffrvvslcszmsuwnnkjhs|opkgpffimdgjTmuekjnPe>M_L0S_Vouq\\>hunXbx_y}pPezzIJ@fzu~{{u}b^_ks[hgtb\\ZckWMHHH52=5:7#\u001e#\"!! !!  \u001f \u001f\u001e!!\"####\"\"\"\"\"!!!!!!  \u001f\u001f\u001e\u001d\u001e\u001d\u001d\u001d\u001c\u001c\u001c\u001b\u001b\u001d\u001f\"##%&&')*++,+-++*)**()'&%&%%%$$$%%%%&&&&''''('(()**))))*+,,--../////.00.-,--5f¡~Ũ°zr{dɼѽ̴ƽҮѿ´öfRW\\juv{y_tt^hwz~diUYOcmdgdSFNUvz_`ZYtbOdwqtpoyoxqdinlbak`dfheSa`Zcd\\li^i^[i_e_\\Vjmngybhju_`odWY[YRITjkf\\ihcacTXbphdjhejdbehojbndpw~vgiea]bmdZcgV|h\\lumqymjnqqnhciplkrsooqqnrvfabXPJDGOPNQTY]WTTUUZYT\\_be`RQQNKQLJPXURWXRPTOIKMKMRRPTPNQVVUUWTSVWTNQXTPOQRTTNMMONHHNJHGC>DDFFFJPRPPRLOOMQJJOLMLLMPKGMLLMMJIJJJJJKLIJMLD@CB>BDBDKJIKKJJLJ@EJE:B?<@IE;IBCEHE<BI?CFHDHFD<FD@@EEBBB@BGLPGLKCBCGEUVIIKEEKMFFKOSO?<>E@23EHBBCIFLMILELY^WUXSU[ZXWQQOPVSOSJMG?@BGLDIAGUU[SZZNSBKV\\SVSTKHP_TFOZ`^YN{{}~~{{yvuvwvwvuuvyzzz{{{}}}~zz|~}ywwwxxwwwwxyyxxxxwusrroljjkkkifdcdbXVv~~|zzz{{|}}{{zywwxz|}{{zyyxxyyvvwvtsqqqhfhhgb_djib`qjkgb_eddh`[]OROb\\UTO[gmg`^cyn_jo`bhgllowzzxxwx|rlnq{pikiq{uidfonkhebcigfitrkmonmlmoqromooppnibb`\\ffZ[\\fsvssiZbnkY[ornqsmmmljeluskflfcgctm`jm_dhe^ZWQ\\\\f]W\\Y^kecib_^gl[dxumkpohpfqqjieiwobgmlsxtmonxwlhbnp[hotqonmkohb^`]cgWXa__``_^ah]coi^diZY[\\afhcfzocqzztnswwsmiwommmywqqmondc^`Z]]P[hjbhhcagmoladsuvx~~tpoonw{w||̽ÐظͲüҼſätȮɿȾ~{yv^kw}ans`\\`prhh`addoqgsұ̕ɮ}s^vwhje^][YXXXWQQRPPSTTQIWicYT\\^OQXQWYLA=?>JZa_`x{y}tlyxùyɸαƶ϶į}|ȥũ԰ĳvtk}{||}njv~qstuqq|vzf}sqiqm^jv|tbfnxus||j`oohm~rgieoovzsqiiobihkineXjv[ghkX]?X^<?dQ]{~hALnudzue}odaQCPbvsr|usu`_cruYehr_\\Zcn^RRSH9:AAL8!($%#\" ! \u001f\u001f\u001e\u001f\u001e\u001e!!\"\"\"\"\"\"\"\"\"\"!!!!!!  \u001f\u001f\u001e\u001d\u001e\u001d\u001d\u001d\u001d\u001d\u001d\u001b\u001d\u001f!#$$&''()*++,++++*)((&'%%%%$$$$$$%%%%&&&&''''('(()**)))*+,,,-.../////.//.-,-1;\\ǲƙĤƿtkx\\ǵ¢ĔԲȶҰγǽo\\\\Yjeu]o~tulmhRUWg~ebcYOBHWwzx[b\\Zw^Miwquptyoznttmikkdghk^Wb`]eZ_okfeXafbe\\UWlnhjr^jvlVemdZ[YQIDSee\\Vl`_deQ[bmbcldeefdbipimsa}{wrpiaalqb[p``|_^nphnsjkrzwma[kpkkrqmpmdflkfike]QJIMNMNQSUUTVYX\\YSX^^icWVRRRWROUZXXZYXXZWQPTQPTQMRPNNTWVXVVSTXUOQVSQPQRSTLHILNHJOLFGD<EJLKHJOPNMNMONMPKINIHLKJNGFJHIKLHJKIIDFKLHIKKJIFEFIGFILKLLLJKMLGJND:AA9;F>7I=@AC>:=D;FBDADBB;C@>;AC?<>>>BLPLNLKKMOHXQCGJJIHJIHIMQPGA>C=04DECC?GFJKLMFNW[ZSVSU[[XVRQSWWWRQKTODCJKLEPHKTSXSVWLSFKSSRSNFAISXFMKZWURV~{zyy{||zvwy{{yyxvvyzzxxzz|}{{|}~|zwwvvwvtuvvxywvwwusqonmjgghhhgdbeaW[|~|||zxxyzzyywwwuvwwwz}}{ywwxxvwwuuutrpprqghhhgffgkllbqglnglhikmd_dVUUdbYPU`nof^agrdajn`affiinx|{zwtuyskmos{phqklztniiqnmke_gndejtpinrpihlpqrojnonnmj^^_S_fSRSdqqjraP\\hjZ\\mokolhlgedbjrkgele\\]]kgZag_bjhahbY_fogajflomjiabeio_f|smpnddohtxpnlkr{sjnnmswssqn|pkh`nxfT_nrhfpfgm_XW\\Z`aRY_\\ZYYVZd]Rbk`ZcgYZ\\^bjmck}rfp}v|wtrxsqsv|xssqsnihffX\\XTdjjcddc`honiiqwwz{z{}ullolnztrwuʽɼǱƔǯõʻſtɲzǼǲvywd]z}cgzq^Z^kndgb]bemmisũ߽¼ʮty|`m}f]gaZ[YWX[_ZQQTPNUVRXdpngb_Y^XMOMIDE@;EKB^cZ^o|{pytűɐ̮έ´|yå¨Ƴжvh~||z|eltkl~~mvnxxr}h}qpjqkYi}r|l^dm{tsy{a_m|gge}jfg]vsuxxqhknanijmrc[gupYcfb^RGZU;\\dQg{S@btwgluynojKUf~}yimrpro^_fvvXbhr^\\Zduc^`ZLACCGJ8,,&))#\u001f!\u001f\u001e\u001e\u001e\u001e\u001e\u001f!\"\"\"\"\"\"\"\"\"\"\"\"!!!!   \u001f\u001f\u001e\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001c\u001f $%&&'(()*+++,+*++*)''%&$%%%$$$$$%%&&&&'''(((((()))******+----.///00//////--,0Eqsѧƞƽox}gtsзʎڴŮ˵Ǭ~ih\\gqqbhpuxbt|mTO_mz\\^cXM>GWvwyTada}[Psvqwk|zv{wrvukkjjpf\\ff`\\[iklqZWfbe[YVWlhalfalxbXeke\\\\UH>FS^[NWj]^kaP[ciZdl_ehea`ipkupk{zxxrkacurciuYsuZboiallgks|{n[`tojkrlkplchhcbhkkhaWPNLMLMNORX\\[\\^YRSY\\gh\\WSSTVUUVUUWYYZZZY[XXWVURLMNLKMPTXWVSSXVQQUSRQRRSTNJLLNJKOMCFC=DNQOJJNNMJKNOMNQLINGDKJFIDDGFGHKHKKIHAELLIIKLNLJHMOJJNNLOMMJLOOLMPC<DB7:E=9H<>C@88=@>E@>?@??>CF@=C@=<==<ALQQNORTVQIYPCGNNHGJIEHLQNIB=@8.7DCDC@EFHJSMFOUYYSTSUZ\\XURQUYVVUQMWXQITRKFTQOSRWTSVORLJJJQNG<?JSMJKGNJUDk||yvvx{}}}{zz}}}||{yyz{{yxy{}|{z{}|zxwuvuroptttvvuuutronllidegggfedbV_~{zzzxxyz|{yvtuvuvxwvy|}{xwwvvvutsrssqoppphgjjfjkhntucmnnmhonqopg`kg\\ajj^Tajrrf^fjjedlldefijnqx|xxxsrtrkhiisselnbvupnhnkpla`gkbdgqjaoxqgjnqssmflqonnk_^\\N]dOOOcpobo\\IYdh[agkijhgm_[bcmoceghcZYXfbTYb^`ilkjidbn{nmuqrqolh`bfgn_fzojlld`igmpnmlmt{tmqoksvsuqm|oni`kqbSXlqc_odcgVUTXYWWPX]ZXWTR`cQQde[XeeV^`egnqhs}tkr}yyxuxuuuyxtvxwrmponb^X]onicb_bdjskpwx{v{xrvywwohjjgiuwp|x}˪Ƭ˝ҪſŴz}Ȼȸst{xv}u]|{{hitm]Y[biccc]^diieqĶïȸz|hljfvtgefc`XZXYfibTNUTMWVPkvod]^W^_WNICCCC?CPR_`[]xz~ůwÑɡx}ʶɮʻ¼ll~v{}vcmrXjrzmjqqtsk~}npjrhRk{oyea`p}qvstW\\oqaeivekdfwot{{phkmmrlmpq`\\ftgZae`^MJ]LMjZSslS_kuuwm~cosylblu{vpgmglql_`hwwWajp\\ZYcxffg^QJGFHG<6/.5:%#! \u001d\u001e\u001e\u001e\u001d\u001f !\"\"!\"\"\"\"\"\"\"\"!!!!! \u001f \u001f\u001f\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001c !$%&&')()*++++*)***)&'$%$%$%$$$$$%%&&&''''(((((())******+,---.///0000////.---,CxƼsȳƞƻx~zryjmմҼəӾ±êȼstn_}qicnxn`xmuYJ^tsS[cWL:MWux|[\\piYTzupwgzzs}ylpnlso_ij^XbpkpsU\\g`cMZ\\[j[^l\\dlm]e`e`b\\M>8NU\\OFZbYckYR\\bdXgi[dhd]^honvppv{xzujahwkjxlbxn\\hqc]kicju~}k]ozkfjnfnoloifb_dgmtqgZTNLKJIMT\\a^]^YQSW[ciaWTSSWWVTRPQRTUXXX[[ZYUTTNMPMIHLPRTURQUVQQTRQQQRSTQNPOOLNQPEIGIJQTQLJMMMKLOONMOLHLD?IIACAACDEFFGKLIHAEJKIGGIKKHHOOJJPNLPLNILNUMOQC?HA6?E<=E<=CA67?=?@>;>>=?ELMDEG?=<;::ALQPNOQRVNNVRDLTOJILJGHLOLHA?A6,;CADEEFFGMULGOTXWQSSV[\\XTSQVYUUUOLW[VMVTLLTTQRQTRQTRSQKBHQLDB@JPLLJGCILC}{yttvy{}}~~~}}||}}}}~}{{z{||{{}~~{zzz{{xvutsqllpqpqssrrqomkjihccdeeee_We}{zzxxxy{|~|yvuwxwxzvux||zxxxvuutrrrrrqonongfoldpshrzcsttpiquwspkcqqhiprh`kputjgjjljkponnnpvztvxuuwsojqla`\\fpcdm]ipqpdggqgZ[ad_b_kc^v{qikmrutmcnvsqpoeaYL`dXSUcon`jSEWab^begebafoYN\\dig]_ba_ZVS]\\LN_^^krrrqlhr~uqvtwsonh``cag]atj`_fdY`adhlkjku{tmqpjqvssnly|rstbgleXUhpbZll^^UQRUXVRNTXWWSNT_YLQac\\XhcSeijnssnz~vpuvxxutvwtzwr}}yuywxn`akwqihc`adqypz{vysyqjsuqrmijfdhtqy{ɹͽҽ|ռƸµzvv̹żtivuytnt~~}xmrvj_ZXXbc]a`\\cfdbrɼȽ˨{znsznptvxob[_ZXZ^nwoYIW\\MWY`wwg]VYVT[g^KA@@DKH:Ib_V][yZdyÊ¼µê~zʸӼũwwxp~ovtfnrzSlnrqhrdsrnskphncMmwkr_g]tnzniN\\rze]aw}jei`pojw|pkkowwqtuo_^hobZ^e^XFS_G`cP[]aietqrw~cbs|hst{~omjp_gokaaktuV^klTTXbwiihd[SNKIIE=6<JF).! \u001f\u001e\u001e\u001e\u001e\u001f  !\"\"\"\"\"\"\"\"\"\"!!!!!   \u001f\u001f\u001e\u001e\u001d\u001e\u001e\u001e\u001e\u001e\u001e #$%&&')()*+**+*)**('&%$%$$$%####$%%%&&&'''((((((*****++*+,---.//011100///...18Fĩ}{ˢŶ~}}jphнɼԾǮ¤ɦ̷̿ķ~}|es{pmwlzxccwuixZK`xnR^fVN?W^wyc_~xU`upsf{p|oupr~vgnj\\_oyvvm[da`YFZa`cU]h[fmcafV^`kZI8BVXZEH]YXfaRX\\`Z[ib\\bj`WYfmqvoqr}x|vidnnhx{gstf`nta_ik`ix}tbd{vdchghqootjfffefovqjc_]RJLOTZbhdc_YQRVZ^heWTTQUXUOQJJIJPSTSTVVURRSQPRPHDJHGNQNLRSOMSQNNQSUUSSWTQOQTTLRMUVRSSMJLMMNPNMONNKHJ?:FE<;=?=ADFEFIKIIBDFLJFBDGFEGKLFGNMLMIOIJMOPQQGFM>8FF?@@=DC>:BC@A;9=@B?DOVRLQLE@<845ANQONLGMSIIPKESVMKNONMMMMJGDCD:5@CADKMIFGQQJHNSVTOQRX^^WSSRVXUVVNLUWTSVUVVTRQQRQNNQRTXODNSLGFEHKKLJGDIAP}zwvuvxz{{|~}~}}||||}|{zyx||{}~ywwxxwussqnjilnllllnnmkigfdd``^bcb\\Ti}|{||{yy{{}~}|z||zxxxutx{zzyxxwusrprsrpnmnmlgerqdruht{euvupjuuvsonmprrlqumjpruvlmkhqlqwwwxxzytuqrusldhm^XVYfa[f[ajll\\\\_k^OV]]][Xhblzuspnosyulfp~|trtnh[PjgeaecmlahPFZ^\\_ceg`Z]hoSJYfi_V[`^YYNKTWHH[`bmyxwtmknyskvsuvpqh__ZY^T]pbRQacTX[`gihhku|ujqrhoussljovsuujjhk`TcofXet`XXRUWYXRLQTTVNGS[OIS_b]XhbVmqnquuu{yuru||}rutsqpsp{uq~{z|ukqv{vrojfciwwq~ztsrwifrsnlihjb_mu{uuϼִȍΚͱʶ»}ǾѶzwp~}xzu{z~vv~pc\\^W]f[Zc]`ebduǴ˸rszzljxiz|r|q_`e\\W^atxdOXcLV^gl`ZWSURPX]UG<;@ELKCXjUO]TFYnZ]~xxųʹ˸~Ŵɟ~ǹ͓Ͻ¯wËxuu|~mx~yhp{hOnoksem[qm|rkksei\\Loogm]iY{o}zk\\I]tnY[a{df``mel}zqnmp||xyvmaajkaY^g[QLfZPlTRhp]j\\akw|bwoZmyyqnztgois_cmidbrrnU[nhLLV`rmkdggZWURNJCCMVB46\"! \u001f\u001f\u001f\u001f\u001f\u001f\u001f!\"\"\"\"\"\"#\"\"\"!!!!!   \u001f\u001f\u001e\u001e\u001e\u001f\u001f\u001f\u001f\u001f !%%%&'())**+****)))&%&$$$$$$%####$%%%&&&'''((()))+++++,,*,-.../00122211000/./6KbjЪ{o~˫|ò~j|zɻ̚Ӭϯοпpzzspxjtyu]csoh}]Qd{r^hsUUOfkhj~Qqsqpg}{s|s{s{vrrcdku{~wjee]dJL]j`YT^^[jmah]Q\\fhYH9Q_YT>N[Q\\aRSYY`T_c[``hYQXejpvmpr~t|sgijesrmwp[cswedhm_hztfbn{oeggekpnqplkihgikmmkked[RS\\__djed`[TSUVXah\\VWPQZUIRHICDOQPPPNOQOORRRVXRGGC@GLHHMPMJPMKKPTWWTRVWTRSXYPUOUVSSTNJLNMRTMLPNLJGH:9CA:8:;9<ECBEHKIICDHOMD?@BABFGE@DNLLJEPIIKKNTSMNL<BLHC@>FKCAGHEIE9@IKJINTWUTWOMH@705EPMILF>GMCDICDPOGINOPQQNKHHGJNFAEBALMMJIGJHHJMQTPMORZb`VRSSUVTWWNKQTSSTX[YTQRQROJKNSUWVQXVLIJIGINMIGJN>`~yvwvuvxyxy{}}~{z{}~}}{z{||{zxw{}|ysstvvtrqolhfjljhfgiiihfdba`]\\\\_cZRl}|}~~|{}}~}zxwussuyz{|yvtuvtssssqomnopofgrrdongtzvhusroktsqpopsopwlpvpjqtwremnhnjp{xvxy|uoporrnmb\\h^SOOZ`U^[[hieXSVeZITXVZQYmm{wrsqqvyxupnt~~ususncZrkqpoiolhoYO`]X\\ade[QZimRKXiiWOYa[QPDJTWQRdmns{{yunigrqgqjnqmpkd_WTUOVh]MJZ]PUYblqohfqxl`jj_inlribfonnroqhmhYbln`]qg\\_WW[^^WMMOSYI>PZKGX__^]jgezxrttstyploow{tt~wloljhhhjx|ou{}~}~xtz|z|wqmjt}utxsppvgdrrhdefjf[htv|xĹ¥֬fͼ̶ǿw~¿įʼqzq}}}}~j^hZYmgU_`_dchsְ~{|}sjpyhbht}`gpcY`hqn[ZfS_a`^[XVWSPNOOKE?66@GGXpdMDBTXQWtt[m{Ы|ȣåu̶|»ɫnģśz~{~yx}lq}}~m|ufoXRust}lwcg]~iivr}fmuafUMpeeg[jXt}pdOG`oaTZe|uwac]_fbuyspls}yulfgoka\\fhXSanWchJZz}ae`Wiibnvlbdvuktq|irgvgfmgg`rlhTVjdGEVdllkahq_^\\YXSNPUTAA1&(&! \u001f\u001e\u001f\u001f\u001f!!!\"\"\"###\"\"!!!!!  \u001f\u001f\u001f\u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f!#%%%&'()*+++***)))'%%%$$$#\"\"####\"$%%%'''(((((())*+++-,,,+,-../000122211101/..1;jʫwþjsxùwtƺϩ˽Ŵй°}yzmvooq~sadrmid^l{zns\\afwn~xPnslgxr{wxyxur|pgrsu{~urleacFYeu^OU`XZmediUTZhaWAFecYP>YWM\\WLSQZ`Vb\\\\bccUS_gfpznnu{utymgkcj~|lprhZp{viejo`kwjafqunlkgfjnpqoolgiklhjkknigdYXafedeca``ZVWX[_jaWXRQ[VJOCFBBJNLKMKILPQSSUY]YPJECEGGGIKJEIIIJORVVROPUTRRUWMQIORONPJHMNMOQIIQONLLJ;;A>=57:4<AA?=GIIICHORKBAABACD?B=BNGGBCMGHIJNTQSTF>LNJE>CMICELHILEDOTQPPQPRSTVSUMC85=LQG@FA<EKBBCADHFDDHNOPOLHHKJLPKFEBELKJIGDCDHILQROOPSZ``YMOTPNPSTQJIMQSQSYZPKQRUPKHIORUVV\\ZTQMPOOUOHENVFt~{zxutqszyx{}}}{yyzyy|}|zz{||{{{|}|}|}~~}{z}}upprrppomjfdhjigeefffedda__[Z]^UOn~}}}~}zzxvusquyyz}~yrptwvuuspmklnpqreirnakjinlnjtronlspnoqsvlltimvofotum_imfjjpvsrstvwuheilsqlmfW^]NJIO[NRXSgi^VOO]UGRQSVQhw~}rrpmqz|xxvsw{xussqrievnzxtqqqqzh]e^Y]`bcXOXgiUMWlgRRW]\\QPIU`_hcs|zy{|xxjddhngkbelimkldWROHN_ZLHTYQT[clsoebmsdU`bVbgdmd]cmgempriqmejinj\\hldibZ\\`c]RLJW]F?RXKIY`abnrnwurtqlmsf`jkotnoxpegebba_ftqkw~xv{~~zutzyxstv|zy{uuqrujdpofdhgjn[[o{ȸŻƮźߧbҸ¿ýƫ~{yn}ÿſ̳·o}vqrbmcarv]Zbdecgo}vzs{ognvwi_|dmlntfYaggxg^fanb]ZZWTWUQLIKJGC60CSPY_J?BDEQdg^rqnvywȜx˿Ė}ۼ˷˾qĭu{||y|nzis{xvu_zicqN^wtqivxtwtd_ewdgrrxbns\\dPSm`cb\\k[tyfYGJaeVS[iqroe`\\_ad|xwpiw}xulimsjadpiZ`qh_nYSd~j^bTfkupgvhc]txpkoouklgpfm\\ohfVOcbE=Thfik`gxa`_`c^XXWPGH+57/(!\u001e\u001e \u001f\u001f!!!\"#\"####\"!!!   \u001f \u001e\u001e\u001f\u001f\u001f\u001f\u001f\u001f\u001f #%%%&&'()*+++*))))'%%%$$$#!!!\"!!\"#$%&''''((())))))+++-,,---.../00111222232100/03PƔy{umok{sȟòžҼҶγÿͻƻʺĖvzyottwqqo~qpzqsdsoxy{}jpwzpX{ksefxk~{p~|}y~vln{pr|yt|jgkaHcp{XKV_WZn\\gfYZVi^S>bx^TNEcRNZQKMP`\\V]Xaai^V[cfbs|mmxuqvugdiev{mjlj\\l}rmenoclodbgnqrokfgkopprndeoolkmlimmki`^ckibcbaba\\\\]^`cmbTWUT\\XLNCDBBGKJGKLHLTWYYYZ\\[XROMMIIKHHIEGJLNNPSSPMLQRQQOSKKELNKIJHFIJJJLHGLMLNNLBBD?>3574:<:97EDIGCJRMCBFEDDD@;>;BJBC>BHGGGHNOMUWHHRPNFBLMDGHIFHHKSWUSQQMKMLMPSWQFBCIPPE?C?@FIDCB@AEDB@FQONLHBGKIIKHEC@BFFIE>?DEHJMPOPRSTXZ]ZMNUNIMNNNICFNPLMUVJFNQVPKFCIIRSQXYZYPUZWYQMPXWJ~|xwunoxxuz}{{{zxuvyzz}}~|{z}}}{yyz}~}~}|{yxyyyvqnmnnmlkiecgigecceedcca`_[XY\\SJj~~{wxywusvz~}zzyvutuuutrolkjknpppcgni_igfgbfmrqokmpkgiqxwjdlditkalrog`ehbesokmnnmorg\\\\blunhjhXU[NHFGTMGTMdn]QIMWOGMGRV^r{tormksy{z{ywwyyrsqmqoouo~xuustwwkh^\\^_`aTMWcbVLXn`U\\\\^^_`^nwr{s}|zw|occhlgo`^igjjpl_YTGFYYLLW^WW_dklkc_kr^N[^Q^d[d^Ydmb_fjolusosmmlabfemj][[^`ZKF[ZFISSHLYbflyxt||mlpkcck`Zdeinlmri^`]\\_[Wblgjsrpqvz~|rsnswvvy{wv{xwwmbosmkpjlyaXnúĴϬܰސϺz}{uhy÷¦ĽkvyxiroorqVclhbfm¤|}yx~|{w{wwxnkmsp]qoj|wyqeW`ea}{mbacurrjf[W[WPGDFFB<1?aeSLF?>@JJDOotcv~hoy{xtp˵һŲįtwnstv{iyyiixp~wpi_w}ca|Rnqmi`~kywqkdZhqee~ooq^mo_eO\\j`b`aka}su]PCO^\\SUZjhqjiZ[^^g~{uwmg}}ywwlkotkgoui`mrfidUalq[_Y\\lhwf{h^Zgersqvgdrgs^gfiTI]aD9Re_fl_f|_`aekf_ZUOPC2FE3,#!# \u001f\u001f!!!$#\"###$#\"!!!  \u001f \u001e\u001e\u001f\u001f\u001f \u001f !\"#%%%&&'())*++*))('&%%$$$#\"!  \"!!\"#%%&''&'((()))))**+,--......./0001223444310/.-4PЕlp~mys}Ťpa|кıǳоʯʾɹɷēluxh~wgsz|ur~j~w{x}ofrkm_b{h~usz}x~~ft{kr}uu~giqXSnyvRSXZS\\mahee\\Xf[OLywXTQObNOVMKKW_VRYZ_`nX\\cgfcuwkmzpoxqecjp}o`he_ez|stohvnejhbcglrrnihjpooormcjtpmoqnkkmomhgjlfcddcb__`abbbg`STRTYVOQJHFFHJJGKNMQW[]]\\[ZXYXVVVSPPMKLKMQTUUURQPNJOOOOEQLHFLIDBABCEFGEJLHGGHMMMJKNF=68669864???GBBJLB=DGFJKA:<:7CF=A>AAIFEFHHIUYSRRRQJJQKHNNKJJMUXVUURPLJLFHKPUUSRSSPLEABAEFFFFEEDIJFFNWURPDCIHGHEAA@=>ACEB;AGFGJLNOOSVUVX[YONUQILNHKK@@JLFHQOB@IMQOLD=CGNOLQVYWOX_YXSW_`MS~{zyvqqutqx}}|ywutvxy{|}|zxzzyxxwuvy}~}~~}}}||}}||yroqssqmjllkjigdccccb_^```_^^\\YUUWRJd~}{yzzxvux|~yuuvwwusrrpmkiikmnonabig`ceeaYcopokcmme\\cpuqe\\e`hpf\\hnjcdac]cwj^iiihim_VX]ltjdfcZXZNGFISQCSMZn]IENPGHDB[cjuz~nqujkx{|||zxxyyprphpttsnzxuwnuz}rj````_[TIP_^YQXiZYbaehorv{z~}ywylkksoqfZdffiopib\\NHUWNQ\\g`]cfijha[hnZMZ[M[`Wb_Wdk^Y^jokuvsrsrjhc_cijbZST`dLE[TPWRUTXdjkpywstpdfkcZZb^U_b`jlikbX[UV\\SM^d`inmjlot~vlpjq{rsxz|ut{{wkt~ywsom_rħ̫Ӊů³|zunuıϱzuzɼ{nvsuqW^micemڴȵqrtwv{xvuzks{nbos^h~ip{}mhX]ea|}sc]_jzu\\QXTH=:?C=13Pf^H=BKMMLORJUp}lgmxqw|f~ʮɿžΛ»~ox}mkwpoxoigbxzgglnyu_fwxtb^uctjwg\\[|xmtqph`Z`qe`~gko_fqoaWgg`_]jikqtrSKCPXZUX[hgrieXY]_jsuugj~uwzxjmqrjpxvgeqojg]`ej^U]Tihng|m[U`t|g}y]brgqdajpLFX_A;W`[hlag|_^bgnoj\\SQO<CRK<.#*&\u001f  \" !%\"!$##$#\" ! \u001f\u001f\u001e\u001d\u001d\u001e\u001e\u001f  !!#$%%%&&&'())****)(&&&%%$$##\"!!!!\"##$%%%'''(((()))*)*,,---......../00133355531232.7`Ǹ¢x|z~ȡo[ΛĻӶȶĨƐɶһȾÐiwsfylsv{ou{sukkf\\gpho~}}o~}_vvix|uw}emuUhz{rQ][TQajhffi]a\\UTcziZ[]]cSNSGJNXWWMe`[aoUchfhhunlpzloxmhbmv}eai^^uwkivhrxlihgbdgkspmkhltonnppksskosqqoljnojipjafggc__fc^]]][WQQRSSSTTRQPPPPPPPRRTWY[]]\\ZWVXXVVWURROOQSUXXYZQQRPORPNMGRNJHNI@=<;=ADDAFNOGGFJKLLPVP@>A:9988:><DE?BGA:@GFFLK;8;87C@;A>@>IGCEFEGTYUQOSTOPRMPUUQPQTVWVXYUPNOMDKKNTZ\\ZZTJGDA@BEFFGHILNMLINY^[YUGIMFFHB:;@@>?BCBAEFFFHLNPPRVSRWWWRPUUKKPGEJA>FIBDOM@:CJPOMB7@FJKJMPXSIV]WUR^j`Mk~|zxvsqqoov}{{|xuttvvwyz{{ywwwwwusstx||z||z{{yz{{zzxpklmnnlijjhigdaaa__]ZXYZYYXXVTSURH^}z~~|||||{zyzzxxvwyz{xwvvtuvuqqqnjhhikooo`\\cf`_bg[SaljneXliaV`pof\\Y`]cob^bgmff^a_fvf_fca^jjYQW_lmd^b_[`[ODHLRR@OTTg\\?CNG@CEVprrsvursrgr~~|zxtpqpdpsvrksusrem||tj`bdc_VSHK[XTRS]TX`dmq{}|z~~|}xtn}}vn]cfbempof^XUZZW\\bjk`aeikbYTafTNXUN\\]Tab[gi\\W_kmmurim|vhnib`io`VW[fgRQ^]``]ilkrrnpprqhe]ah_TQY]TY]Yfibd[QXQPZLJ\\^_ikhhffq~tkmjtvqqz{{vm|~}{ytpez̼çܴɰəĳ}|hsoy|;ı¿˻}þǥqx{{s[Zkidbm֨ڽϵ~stzvtruvxtf||bq|_\\qx~kmh_hcw~|d_\\YgzcHBJHB:CKEEFQYPID=ANMNQIKQOqsxvppph̽ǺǞ̯ųdvjotwxngurcpg^tmZiwnumYgtwrmn`crrign_S[xnraove_ZYq^__hqahsWeiba[^xiw{jukIDCNR\\V^aejtgbWS`_lzktnctupwphpwomyzsgkpnlfdeb]T\\UWolmmyXRYkyr}|^drcnnavwJER_AE`]Wkkgl{_[egrws]RRKGSTHL423# \" # !%\" $#\"#\"!\u001f\u001f\u001f\u001e\u001e\u001d\u001d\u001d\u001e\u001c\u001e  !\"$%%%%&'&'(())((('&&&&%%$##\"!!!!\"\"##$%%&'''(()))))*)*,-----......./0112334554223228gydtƿǿŮ´˸¼˝ʷżmpjp}|wvsygg_crlont}~h~qaumryvzyevxduyys]`_STdjhfnghePM[pr]^ajknZSOFLORRT]rb]imShmdhmqiptyiowikcmyvaig\\hvm`nmfxnnmcdbefisokienuommsxq{rkwuqrnljnncjrfdikf_\\ekbY[][VSRQRTTVWXYZ[[\\\\\\\\[[ZYXWY[[[ZWRW[VPQRTSRRSRUXXXYQPSRTUSNLPROKKOMFB>;;<BD>BJYHKJHIHHOTSEFKCC?;:<=?JD@CA9:DEBDGD?:88<@;<@?@=HDDDEEFSTPPNSTOPSOTWWUSSTTXTW[VPPTPJMMRS[]Z\\TFDA>=DDFIFLMOUNKHQ]`b_VMRRHKOC67>A@?ACCCDDHGHKLQQQSPPRPTWRUXNKRH?FE=@IECIND6@IOOO>2?EEDFHKVQHRYWSO[eWQ~~~zwusqolntxzyz~}zwutuvuwxxywuvwwvssqquz~ztuvvyy{~}wxwxvutuvwuplkkmmjfgheeb]^`_\\ZYZVUWSSVWSQURGV}}}{yy~}{{}~~}{{{z}~|{{zwwxyzzzywwwvvwxxxxwtstvurpqnjiijlpqqaWadc[aeZT]fgliPjf`[^oh_TW^[]i_]]amnmbbfothmf`Z_mcNPR_lja\\a^Y`[ODJOOQ>JWP`Y<EOGDGYryuutspqunk|{zyqopq]lnqqimlmm`e|{zpj`aifbZPDEUPIPORTZ_irx|}|uy}|}u~yu~~tjgjhcfopldad_[_dbko_]dji`SN]_ROQOS^\\Q_dbda\\Q[mkoqibttmqpe^np\\Weonffijmkktzwvuojlikma`Z\\h]NMQZSTZVeg__WLWNHXHH\\\\^geaedcuuokkvusyxp~|xw~wkw~ylxȿМҼ¿Ĭӵ~}v}fikuε¾ɞ°|ȷþnz~ydTihbbnɦäyv|zvzzsn|{svztwfYzrivijdly}ha]WOX]M<EKHGFSYNRagVMIHJBCAAJQPQ]sty{psqy̼̗ϻźǡqjŒqielvnv}grrkkcr|j[l[}mplrlVbmjefhYsou^fdXK`npmTvt~a`\\WlXg|[gta_XreabWlmxkku_C=ENN`ZdjdttgfVTe\\mrhnciyvpm}fitunszxmionnolgh_SYaLdrlhvZPVgqwyybjrcm|kuUHM_?SbUTopiyx_Ylhwyv]V\\QXbMGXA@7'('\"$##&\" $#!!! \u001f\u001e\u001e\u001e\u001e\u001e\u001f\u001f\u001d\u001e !\"#$$%%%%&'&''((((('&&&&&%$\"##  ! !\"\"\"#$%&&'''(()))***++,--.......///0122344356753221G`{nϿ˿ͼϻϯ˹źĲþ|ĽzwuzwtebZl{hqwrq~vg}`kseqvpexsuqyyjbaVYhjjdygn]IK[umWcisst^\\KJSPRUVuv_dniTjqbjlhestvhoufndmxpakcamldgkfonkpg_`dhikqmiccrummmx|qow}psqojo{hckj`eimd^emh^_ab_\\][USTUWYZ^aacfgffffffcb`_][YUNSYXUQQUUTTVUVXXWWPRSPPTSOLQSNKNQSPMKD?=BE>=EXHMNGIFCKPNGHLMQC:ED@GIBAB=8:==AHIG@=<=A=;<=>>>FBHHGGGPRNQPPSLLSMTVWQQNTPSOU[PQQZUMNQXVY\\Z]UCC?<?GBKPKRSSSJLGR[[c\\XTZRKQQH><=BC?ABCFBINLLJIOPNOJNMHSVRVYMLQI=BE?=GEAHOL;;FOQNE;=GDCCBCUPHQYVRKO\\PT}zvutrnjlswxwx{|yzywwvuvutttuvvuuutrppvxtomkiprrt{tptqsqoorutqmjllnhcgfc_^\\\\]\\[XYZVUXRQVVPOVMLw~~~|zzywwz~}~|{xwxz||~}{zyxxwwwwxzxuuvussvxyxxwuuuttuvvvuspprrrpnoomlkklqrrf]`cf_ab\\ZW^dhkY]b_^]laUPXXOUcZUSci{sienyqnxjc^ciYLPUehb^Za^Zb[OHMPLNDQYT\\SCMSONZvzzxtvrrypryzznjlt]bhkqheeeg\\dzvthf`bjgfgV@AQQQPQ[[`eku}wu{qpuz~vnz|~{tvuriglmqmgfb``aakpb\\fpi^VP^aKMPNWb]P^gia[]Q_klvkbjxuutfbtq`apvrsxrptsuxvuvogdedde^\\XXg_NIO[NPVR`dYYSFUOGSFF[]^ea`ddj}yummyztqvpx{v}rmu~nl|ǼxuԷϾėyy~|vmi{p̰ϟûδ~κ»ȕðpyrZfcbhrÿƯв|hhy{{vilxw|kTt_{xpc^tyonpbJNj_SeeY\\UURRXVQF=DQSA6:?AUkfaq~q¶öµȤsǞwkm}{{zxtzgX~weyuiayakdgqmZb^nwvfepiS_b^_cbV~gqZa^QFfhsdZ~myt\\dXYhXpxXhvgLdwbgd_~urbmoT>;HKOa_one}qmgY_cXp~jedcptnjro`munqwuplmnqtuokk_VgTPtnemcKScjpy~vu||yxarsoxpcNW`P[gT`y{mwm\\tu|xz_^gYaiZZ_GGB66+(***#!!\"$! !!\u001f\u001e\u001e\u001e\u001e \u001f\u001f \"#$$%%$%%%%&'&&''(((('&&&%%%$\"#\"! ! !\"\"\"\"$%&&&''(()))***+,-,-.......///0122454368985322Ulw~ƻǽһ¿ϻüθ˽սƶĳ|lyeZ[p|am~py~sjj{t\\pjjyhqlovzuly}ng\\[`ijocuejXNT`vfWhowvrd`KP^PU\\cxs\\fhaXjkclf]\\wtrdlqfrdiskdkcclfdidmlflkdb`djmmhjd]drqklk|xqylzxpsprlz`imaagqmchnkcbjllefhbYVVVX[]acdfhkkjjlmmkjhgfc_ZVVXYYYXXXWXYXXXWVTQUSJKPOKIPRJKQSUWWXQGCKG@BJULKQLKHEKPLFFGKSEBLB>ED@AA<:::<CONLHGGFBAAAB==?BGQOMMNPPRVSRRLNRJRTVLKPTJMLQXKQU_YTQX]ZWZZ^U@A?=BEDMQPTUWNFGERUT]WSTXPQWSKJK?CLDA?CJKRUTTPPQMMJDMJDQTPVXMMTM@DCBGJKIIPQE>CQVPNGHJJIE?BSPGPUTOHGTE\\~{ywwvuurjmuxzxyzvwzxvwutrommoqqqqstrrmipnffjhhlikqsuonsplmmnpsronknnqlfggd^\\]^[[XTWYUSUTRUUNNQSpz{}~|yxz}~~|{{z|~~|y{|xvvvutvy{{z|}zzyxwvvutrqruwwvuuutssssrrttrqrrrppuwvvvuvusrsttrrpnmmnoqommmoonoqssrncbdkfccbaW]dfmbP`^]\\iXMOYVISbXQKnktnhrtrrkhihb`[bogb[`hbegZSRUWSPS`[`aZW^]\\arzw|zyu|yz|rux|lfhxg]gfoj^b`d\\fvrnb``deehr]ANX\\eY]ngnyy}{uwzolsxyqmz|y|}zzystqjmuulhgfdceorljntrfa\\ehJOZU[fd\\_dnga]Xhhnuffvwuwvggsofmutsxypotsrplotka[]_^_WVVSc_LENZJNQN`cTUO@SQGNAF[]^cgnmmt}vvwoyqo~{xqfkvmxŴwtnsΧ°ǵ~}}v{Ͻȶ¸ȾȼǢƯɿšxz{gmjgnvĸçϿętc{vnl{zu~lUnuZpi_mqwpaRYtj^loX[ahaVNMMJ>?JJF@>CGAjpewrҵοĻvհǲij{~{z}{luyl^XgokeWt[gd]on\\Wdcjc`lgSZZUYd`\\sapU\\]JEjjn_lepkXjS^c^wvTjxwmRxseohm|xmbmhO;=GGW[hwlonpigi\\]rlga^frkbd}``lpptxnlmkmw{yttmbgfJhwedkTT^ferr|ju|vx\\yrngabl_fhZrxwcy]ns_lqvtdLUO@?05;40\u001e'' *&\"!\u001f\u001e\u001e\u001e\u001f  !!$%$$$%%%%%%%&'&&'&''((&&&%%%$#\"\"\"!  !!\"\"\"#$%&&'''((()****+,---.......///001344436998663,C~~Ⱦ˷μӿĿзżƽӻ²}Ļ~gscTar{^qxm{vu}fmv|d_pawmen}rvpmy}qnZeb`lrkmdm^Wdjr^XlqvtsibWXgS[djum]d^[afdel`UT{vmbhnepbcnieldcljecjrdflhde`djqmdf^Zgqmhje|qppjvmpknpwngrk`fjxmfmjcbfnpmknmc\\\\[XY[]^_`bejjlmoppomlmmmkifa^\\ZXXWWVX[YVTUVXXYTMKMJDCKIBIPPUWY[XMKUJJPZXSMSUUQMRTPGGEEJFHK=;?>AA><=>>?EOPPNPQKHLLKMBAEGQZUSQQRSUXVUVSSSHRSSHHVTDKLMOEQX]XSRZ[YWZY]XFEDBA?FQONRSUHGFFROS_UQNWPW[OMVVBLTC>CGJORY[ZXZURQHBKEANPMQTLJRQDJJMMKUSNSVNGKTYYUPPPQQOHJSSLTSRMGHRFi}zxz{yvsv}|yslouy|{{xpswpkkmmkihgikijlopkjkjmh_agcdjeenpmlnvrklmnqusoompqsnlnhed`ba]_[WZXUUSRTUSRQUnzyyxywtsuxzyyyyy{~zuwyyzxwuuuxyrnrutqstuwwy|}}}~||}wrstqnnnonlmpqsqqqqqqqponnpqqoopqolntutvxwvussttpmllkkkllllmmnopqrstsrqmhirkgeiideffjiPc][^iTLPXWMSdXMLtr~vrkp~zu{wqrvwusnuzmlcotmwxlb]gngabmiklmnrkgoq}{}xnrruqgduqbh_jnY]^c_hslh\\X\\_`^ly]Hanlnhlsny~|}sqwwuqq|xsrsuz~uywq{uisx}vmpsonnuxwxx{wsknpW`lcbkonggyvlaeqequgo|stuukmpjmwxsuzunoqlhfdhnk`WY^^^ROTSc^KEPYHJLLggPTJ?URLNBK]_grx{y}~v|q{sjm~~ĺ{ɮ{k{tkͬǻ˽}uzwοŽԠùüîx˻yozzpqxŲʬy~~x|oqrlt`j{colkf~y~l_\\cpc[jiTXjvYJPTTOB?KIKUONNQRqpy³ǹ˾{ϼī\\fo~uiw}att|_U|muY|iSk^fgSjtcQvrceje\\ccRSRORb^agakO^YAFnmaazy_i_TmVb^_ylTsy\\hqnqox{znclcH<;BJ^Vtvounmtg[ee[n\\`ll]YguZ`fpsruhikeo{}xyogsU[vmeib\\`bam}n~dt{t~p_~z{lfvnzildf~s]vhyvyb^dVDA@EG70\"7.\"<2\"\"#\u001d\u001d\u001e\u001f \"\"#$%$$$%%%%%%%&'&&&'&&&'&&%%$$$#\"\"\"   !\"#\"\"#$$&&''''())***+*+--........///0013444457:95100Bx|x¡ʼ³ŵʸɾʿй·vbq_Pkq~|esnpttumemlr\\fka}seglzy{fpy}rp]jYXmqqpkp`_rrmZZmqwwqkge^l^cjmpoedZ\\eeaek`VQyvh`ejanc_jgckdaoq`gvnddljfeaekxpdd\\]imnfeaxklgilckhnn|unmrgcjrxnjlgdhjmlklpmebdc_\\[\\]]^`dhklnppppoooqrrrqmiea^ZXTQTXUROQW\\\\YVUVTOGEJKHIILUTPXTLSVKUYbVVRVZ\\XSXYVNMJHIFII@=<@C>;>AAABDHKMNPRNNSSQTLLQPWZTROOPQTTUVYZWTNVRRKS]RGNLLJ?QVWUSRZWVX[W[^RPMLE:FRMMPQSHHILPHT^UMO_U]^KPZXHQVEAKMKSSZ^_bcZZ[GDD=ALNJKMIHRXLIP]VO`\\YXZ\\UUUY_[WUVWXXSUYVRVRUQLOWVmnqolrz~}|yvrsuvyuqvzqnrvx{yvqhjqjabfgdccbdecceffebchid^]_]agbalnklowujlmnquroqnqssoqtihjffedbadd[VVVVZ]XU[lzzyywuvvttvwwxzzuyzsuxz{vsqsuxvlinssrssuxywxyyz{xtuutnkkjijjjjklnoppppponnnmlmopnmmnokinsstvywussttqnkiiiiiijjiiknoooqqpqplmmlrqkhmqpnhefrgkc`lnZUW[`YYi]O[uxzwttprwz{{z}|ptvzxxrpzxuqx{x|||zszxzowrv|{lfkvhiWcnTV\\bdkqkcXRZ[[]ls[Thzupuutw|ztru}tollnq}zrusn{wjwy|qtuxzz|~~vyzix~olrwzpqxiorgvwqvxrqwwptrntzwswzsorphb_``cke]Zbjg]OV[jeOMY[MJKJmpRXMI[Z[TNZck{wsrw~ǿyfizlϿնģũ̩z}nu}hv¼ɬɭ̻î}Ƶ˶wo{uy}~nyswzhdqyszkuhv{ra\\hucY^]VW^XHHRTRLFGXjgXYbf\\Yq}¾¶ĹoǫŵsUnts{|zl{y~fewqta_o`jX`caqP[gMkhZm}ogYZaSKIGN_\\dbc_NeP<NsdSboY_USo^YXgx\\Y{yw^xworpulhn[A=6@Q\\]~srpnub`fRVuWhncTVudY[esnlmdhfbp}{zynrjXorjmkghccjs{_r|jno~~sgo|mgetlmy|ngrp]OITMI<80E21P5\"--\u001e\u001f! \"\"\"$%%$$$%%%%%%%&'&&&'&&%%%$%$$$#\"\"\"!   !\"##\"$%&&&'''))))***+++--..-..-..///001344556798907W[q{óп®Ůúƹ͹¾t|}^oYQwl|unnerzqvveglciZmgiyc^diu|^syxqn`cLbhlpwoodl{vlZXmssxnnjiclgfjnlsocX^hcbejb]Rpve_bf_me_fdahe`pr`mynfbllhgehn}thcadlknd^`ughaic\\felnropoodfmxsonnmlmmnmmmlgdfjidaaaa``afikklorqoooprrssssqonkf`ZUUSPOMPWZ[YW[`_XRNQVYULMWRKVKKTVMVZ\\SRUYZ\\ZUX[XSSQOOJLMJG@F@=C@?FCCADPMOOPPQRQSUPUXSWSKMIIJMPPPPP[aUV^UUQ`bTQUSULAOOPSSRZUSVZUY_YVTTL=IQOOQPQKNLSPJVWTTW]RaeMOZWLSVHJNOPQX]`beif^gWJE>DKOHJKHKTXRMUi^Whegbaf`^Y\\dca^YY[[WZ]ZWVSXZXZYaffdb`_bhjmruvuuttsqssr|xsyunotvwyzvnaboieaagcbaabc`^a__c`^edbb][]eicfnnpsryykjklorpmmnrrsrrvohkklihffqp^XY[`fia[k~}yywy{vswxvuvvvxzzvw}{vvxzzxpovxythhmqqprtvxxvvvvxzxrprrkgffgggghjkkmooonlkllmlllnnmmmmmkkoqsstvusrrrpnljhghhhghhhhimnkkmmmmmehjpwvomquxrnmoquxjp{zpkdiqlowmcpw{ywxzrmt}~}~uy|~|}|||}z~~~}{pvwxukjsliP[lTQ\\adgmhaUMWVW`igYZhzyz~}~tty}~ztjggeqx{ummxvhttxuknuz{~s}wwvuytvpot{yxuz{uro{|wxwvvxuuy|upstka__`blmfdkw~qW\\gspX^ld[TRQx}]jbZirqagtsxzyqǻ}wikoѻ̷أÞ|ypȲǷĻëu˲wk~{z}|yxow}z|zzm||fqy~xhvtzmv`\\ovaPU[X\\^O@FMJGQWOVwfbrw{m{Ĭµ}lƝjeqmpqovs}Ɏ\\u}lidx}p^cSri^w`S}nKebWl|vkXQ\\TE@CL[Ydwa`ZTcJFYpRLchUTXWo]J[{mPdzyikwwirrtveqoQD<6DV\\otsxyrrbe_G`nUmk[K^wZU[iofgeae_crxyvr|dmrnqqovgfm{zr|x_tlwnu{kcyi`ikoz{ypdV]LLHB=@5KX0.=1 \"##$#$$%$$%%%%%%%%%&'&&&'&&%%$$%$$$#!\"!!   !!###$%&%&&&'))))***+++---.-..-../////02334456884QiZfz¨ƒ÷˿ëǸĻ|}tqyYiV]~hxosd_uvovvejj_gZoell[V^hqwhdv|uokaRNkclkwkphvytpZRnrptloldhkkihnhpudT`jaeehebUjwf`^c]mhadbcfg_ppaovpgbkliiklttkejlokoaXasec`g`[`chmhliqg`ilvlqnpqopopnmlicdhjifilifddegijjkmpqponppqrrrssssrpjfc_WPOMOTVWVWZ_`[XWY]b^XXYUUWNTYVTXXXTRUXY[ZWZ[YVVTSTQRSSRIMDHPHHPJHIPYRPOORPIIQQNUUOUPILGEFLNKJJISZW]f[^\\cd_Z^][QLNJQVQU]XTTTPTXTTUUTOQOQTUTSQSQUTVXXZ\\`^ReiQQWTPRVPQUVWX]dhhooniobTKHJNQHIJKQSTV\\kphiiltmiledbbggfhY[_[Z]^\\^YV^bba_ceddddb`bfgiklnpppprtvvz{y~rkmvxusurjdemmmfckgebcega_a^^ecbgeefb`djkfkqtwywy{nhhjmmmljlstpqpusginnkiilwwg`abhstgfv|xwwy{ywwwuuvvvvyzwv|zutvwwtpotwxqgjooonoqstsstttu{{rprpokhgggfffhiikmlkjiikmmllklnnmmkjnpoqrstutttrommjhfggfffgghhikkiijjkkidgnvwvrrtvxtrtrt|vr{}}{ry|{yyy{z}{xz{vpv~}|y}z}{|~}~}~~zw~|{}}w|{}|rqrsgNTgNKZ[^afc^WJVUYbeaV^s~tuy{}}xjfdemv~smoqsgntqlelt~~u}y{zyyr~pk{~wunvtrpn{xuxyuttrw{{wtuvpebfolsuqtvber~zdt|mod^dosp}|n˿ο~{}mrѹƨȕçʾqx|οɳƦɺéyˮvk}z|}x{|zy{ky|yxtzrskxvhstjwbe~r`dtsmnhO8;AEWgqnd}|¢q~p©|fukxxvkwspktztno}qw}hhwmPblcvu`|nKi~\\^fu~n\\JTRB<APTOazuc]^]^ZW]bEOjcQYe`mSDk}UTkwummp|ekmwwfa|oNL<8MU_{{vsouqcfSFl]WmePHmgXV]he`c^a`Zdqzvtux|nroptsxyes~nvy{pdvi~h{~x{}~ag~_Znu~s[]VWRHA4@\\O1;F1$&&$%$$$&&#&%&%%%%%%&'%&&'&&%%$$$###\"!!!!   !!###$&&&&''')))*+++++,----,--,--...///133455663>Sfoiyx}ʴѿ¹ǻ·øų{zxvl~tSeWldu~npXazqpvrdji\\jZmdk]VN`pur{[rvptedEaacqhwing{urrYKnponehp`ikmmglgivlU`l_gffedYgsfbZb]jjc`bcdh]ppbntpjajiglnm{tpkopqpubZgoa`dg_[Zgekhdis^_ijpinorsoqrqqnlidfhjhhlpokgffgiijjknomnmoooppqsssssrrplic\\VRPRSVVVVX[ZY[\\^a_^]Z\\_\\V]`^]\\[YXXWWYZ[[\\\\[YXVVWVVWWWPTSUXTVZTUW\\]\\WSSTSGINNLQQIQPOMMNPSSQVWX[a[]bZ^agabbfeb\\[PNTXSV^[WYRMPNMRTST[TOPSWXUTTSUV[XZfdjfZgp^TVWVS[[NWf^`hiliouqlyqeZQRSTKQNOVQUagzyqwloxwuokhilkggod[de`aa_a][gkkdbkjjjjkjhijjjmmnqpppqrtux{{olnw{upqqjmompqminjjhghihecacjiinjhkihilmgkq{{xxzrhhhkkijjgormqknrikoookinyxkhjlpvvpsx}zxwvx{{ywutuvuuuxwuw{xrrtuuspnqvyogmnonmnnnpqqrsssy{tkumtqjhfhgfffhiijihggilmnnmlopnmmljmqrqqttusuvtponlighhggdffgfggggghhijgnquyxwtvwxxuvwuw~vt}~{{{}}{||~{{}z|}|yy~{x}}{z{uu|yxw}z|zy~jS[cNJYUZ^_aa]S\\^cijdXqx~~|vxz{}zjdhlnuyropooemrmmkmu}x~z~um{~pgt|okgppikoxvuy{trqpzyvyxvwymdvxz~}vnp|xsxpm}w«ýŸvx̾ǾӫǾ}ͽ̵ȳʹuȨ{pvz{{~xs~ytnms}z{zm}kvzlpohy}nh{jRl}gjeRB436Iw{ǻ~hu~tsymssugl}ǥq}muemt^|{wsir|t[]kjvunRqy\\^\\lwaLRN@=ASKFbtf`d`fq_[TJ\\waNnllgGKriQ_kulmvnZpeuibo`lQU<9WT`|uwsjsoffJMtPZmZDQxr`YY^aZ\\_[_[Ydr{urns|ztqnqvtpj}~fsz{iixrqwi~o}o}s_uwU[yp\\eh_YUC>PZJ3>G9-'*'*$%#.(\"%%&%%%%&&&&%%&&%%%%$$##\"\"!  !!\u001f\u001f !!\"#$%&&&&''(())*+++,,,----,,,,--...///134566751aaMwtkpµ˸þľ¸ƪí~~v{w{m}oRc]x^s{mkQg|mpwo}{ejf[m]ihgSPIk{hzyqWxvvjqcXGfQgqlrlkhxqqr]Lkomj`coccknnfjh\\spY_l`dngedVemgcXb\\dkg[_cdi\\poblrplahffnol~{trrrstx|gdmm__ji^ZYkchi^opX^higjkmssossutpkiegijgjpquoihghhhjijmnkmmnnnppqstsrsstvuqlhd]XTQUTVSUWYY[]]_`]\\[]^^]a`ca__]\\]\\Z[Z[[]\\[[[XZZYYZZ[XYZ\\\\Z[_]Z[acb^YWVUQQQPKPNGLRRRSVYWYWZ[X[`_]^Y_cc_efgffcbUQTWW_]]Z]VSQLLPROSWTQOPVVUVUUVW[Z_jiimccyrWZfbZdeS\\jgkokmjjvqi{voj^[\\ZW`\\Y\\\\^enwytvqrwzqroorphinkiihfhkildcmpnfdnpmnomoqsqllnnoqpppqrtuv{}}nnpy~tnmpjpvmsusrqloqnkgmnlhcinlqrlnutmmpilqy}zxzvighjidjndfmkpklrllpprmhmwyokrttwxwzwswxwwx{}zwttuwvtuwusx{wqqsssrpopsyljpkoomljjmopqstrvxwhqrvtlfdhgeedfhggfddeimmoppqstssomllqurquttruwutqnmlihhgffeefefeeeeffiiewxyywvtvwxxvwvwz~ss|~}|{y{}zz|zz}z||}zy~~x}}{y}~zrt{zw|s|~~ximm`Xc```dbpkmjouv{rn~qw|{ytvyz}}kejrotvyrqnpgpnrxrnz~||v~~|smw}~qgnyniamqeflstswzrrqnypoy{wxsr|}~w}y~xw}zľϲĶ{y¾Ϫɰ˽|ν̿ãȺ{ykxvszx~xjyz}tuycy}x{ymunnooogu}{vxdX_UJDIFDNUNJrx~~ygn}zseu{r|jqjgď~ktafj~_l|suvl|m_rw~u_t~}\\[Xdy|dVOG?@HWHLlchb`|}d\\W^gS]smzeAVkdgZpnhypxfga]sadzZabWc>=`Tawrxr~konhfGYkM^fNAbyg_XYZYUXZ[[S[dtprfkrzyuqmrvt}mtspm}f|x{gjvlxsj{skj}diiQe|r_ppfb`NTRTI3=EB3*.//%%&=)!)+&&%%&&&&&%&&&%%%%$$##\"\"!!     !!\"\"#$%%&&&&'(')))**+,,,,,,,,,,,--....//123456641_tonj}ǮƾƦ}|xx|~w}rslkR^zm||^rylgRmwkqum{tjka]segncNLUrudvg[vtimegIOYNnpmlmmjsmpp]Smomi`blg^knpggjWmp^_jb_siffSbigdW_Y^km^Vcbj^mpahrol`edennk~vtrurstkpql`anl_Z]lbfc_plV^ghgeiksrmstwtoligiiihlooupjhghihkjhllilmmmmnnqtsssuttwxvsrnhaXSPRVTZ[WZ\\\\_`^\\[\\^^]`c`_^^`^Y[`a_]\\]]]^]]][[^a]\\]]\\]_]\\\\`b\\\\cdd`\\[XWYWVUOPOQUUVVX[[Z\\Z[]ZZ_b_\\[_c]]eedddeeYRSUVUb`\\^[YWRRRTRSVSONNTTSWTTVX]\\^kliplfuwi_pucnnddltvskljfsogvwmrpfa`cfihanmjquwutrsv|yqtppspiinnomkikompphnqoifpomnqmpprsnlooosssrqprruz|ylnoxunloksvlsutwrnrvslhuuolciomouqo{ypopilpt|zxzxljjjjfisi`gmpopqopqrsnjlvzonwwvxwz|vorwwux{~{vsstwttuvusy{vonpssqpojsxjnnkpmmlnllmopssrvwvjgxrvrkjjhggdhihheeefkooowwvx}{xppnnsyuuxuvrvzyxurpqmjjjjhgffefccddgegiezz{xutrtwwutuqr|zpqzzxxxwxzyxz~zw~|zzzyvv|z{}|~yw{~{~~}xot|yxt|~|{|up|}wptt~{nxxflwxs|qqrv{}~nluwoqvxpquppt~xsy|}z||~~{r}||vu|~uliuroakr`^gmqsquqstnofgu{x{z}~~x|~y}жȸ½Ͼȳɴ{wϿǩñžt~|~rv}wo}ytxyzap~vt{i}le{z{vsnqpqgtqxertyYOxugfl}{o{wwo~ebsr|t`smyxvhgltjluYlyb]uquzlw|{}n{a`Zl{sh`L=<MWZMa}jq`opg]bomSw{`K`hviVqitolilP`oahjUiz`ekCBeWbnmyp}m|~jpjdJi^Ma\\AKnrc`UXXUQUY[TOYhlhj_imwuqpntvsvn|tk}zlwt`}o}ehroiluin|o|y]|\\Qp|{xweynqhjhcN]I3>HI4.591''.I'!87'(&%%&%&&%&&&%%$$###\"\"\"!      !\"###$&&&&&''(()))++++,,,,,,+,,,,-...///012223529l}|u^gnvʿĖÿĵ~|u{ěmru{{ypnsqiW_rzwbqwid^vnjqrlymum[gkgr`GQit_itZerlbn_dEUHVskfhhkhjipmZatmoh^bhk`imsgcl[drc`he[nnhiY^defVZSXil_Ocbh`ko_fsoj_`acohg|pqsuqpqpupnejppd[fk`h]`qfQ_efb^eftmlrrqnlilnijklnpsljhfkkhmkgiifijknmllpsssuwvtuvxzztojb\\TTYY[]^]\\^__^]]^]^]ae___\\bcZY`dc^^aa_`aaa__bea`a`]]_^^]`e]\\fdca^\\Z[``]ZZYX`hhea`__[\\Z^`\\[^ba`^_bV_ga^^`dfZUWWVU_d^`cca^]Z[[WVTOOOTSTYSVWZcgilkkrmgtwnj{xhruqouywijienpeouipynejmjliguttqsqpooqtqrrqlosokinqspnilrqrspmopmklnllojnsrqnmnnotrsvmorpquy|}wmlnu|tnkoqtshrtsuoswvtpqxrnkflojkvxu{uppjjkm~|wuzxokjlnilxracpttvtqqqwwqloyyor|xuxxyzullxwsvy~zuqqtxrrwvvtyxsngkttpoqkwzkplkolmlolklnlqsqwuxmamruvutrmlkhookmgjjkrwsv|yy|rsust}zx|yyuz~zwytrrqrrkhhffddegkgefd}}xrrqrwvrstnowmnwuttvvvw~wvy}yt~{{yxvqs~zw~}{|xuvz}x{~{vt}~z|w{{y|z|kqt_g{ztwtnvnifpzz|rqzypnyuotvt}|txxvzx{|zm|z|~zzupzlmnbhlprltstxpmiiq|~|z}~y}{z~Ѹ½ǺҮŹļĶǾʯ̼ƾyrķĥ}v}vx~zpvr}{xpyp}`hxpzi{}yb}{nwjrqpkmyty}cno{}VU~sw}}vsuqfcZ{mmzw^klzxwo^ro{v{la_il\\lswq~lkqwwz~ndE?X_a\\]zz|lyq_jeoy^Zfncaonn]vqYOfche[[qpdilDFc\\c`gxm|j|udplbVlTRbTB[nje_RZWNPWYSLQ]g`baaclmjmprvuppmvxfjz|tlhazitbgrt|^lnimxpyi]zRPx}pysx~|xjzo{jsb\\lJ5CML43<=.*+8M$)K@))&%$%%&&%%$$$#$$###!\"\"! !  !!\"#$$$$&&&&&''(()))++++,,,,,++++-,-..///00011-/-0=raj^v}dXouȣĿżðȼŚvs{aixxxlkzrtkeipuftsceswdlkpovk|nTziiuYC_kxn^|}lQjmadeeSJNGbnecfhfbhpvlcuvjqe\\ihqhhktgak_^sebdcXinhjZ]bcg\\VOQgh\\M_backn[hsng^^_aod`{lopuqln~|svlpnsprk`mk`hYdn^Racd_]beufqloznllipriknmmrndkifnniolefecechnljiosssvywutuwyzz{ypfZVZZ[]^]]]_a_^_`_`_cia`a\\`d]Z`dc]_hf`aabcbceeecdd`^``b_`g`]hfdcb_]`cdb_\\\\hrzxngdb`]]\\ad`[]ddec`aXcj]Z[\\dh^XZYYZZ`abfggdcbaca_ZWSSYUW^_YYdnnlmmmtoirxqo}tjqxxrvvyggihjqihtkk{thnrlmijtvsqpkighkqonsohotnmjnswvsjnwtruplnqpllllknhmsrponnnowsuwjmrlmpuxxumjlrytojoxvkdqsqnmyzorwusomgfklggx|rw|sqjihft{pqzxpkjnrqpxwjetyz}xssq~{upr{ypwzvxxyzsggxxptxztontzpqyv{uzvomceuuonsn{{mqrqnlnnolkpsjlrqzvunfotvx{{vuvvrxvtusrtu||wy~z|twxxw}y}}x}{yzz{|qkjhgddfkohccc{}~tqrprsrqrtoq}vjluttsvusuzvvwzyrzywwurlo{|wv~}|{{zwuvz|}z|{wy~|z~ur|}}y}|qmo\\cttwtuqkvnedqwsttv{tknz}rsxw~}wuuqoxwy{}ymyrvtwwvyyyyt}yz{wwrm}usqzx~ӴŵǶ±±ƶð{jʾɮðŨxutmomk{xxusnqk`wzvrrnt}mne~^mn}|lmxwls|eexw\\Xjm}pn}qkmv[kPpfc{w[bgztxq\\qoxq~{wrfsozgpwytunwxfD^m\\f`qz|yyrxhsjp{wsoiXjpgIYcXj^WcmdaefCM`dcRcqiyb|oaphbdeOS^QRccdgWS\\VKQ[UILW^_Z^\\^[kfgmprssokioi^itunr{bbvkl_kstziYgmhi}ofv~z{xXejNTv{qi{nqvz{~ywnvtmz]rmZCQVV;=I8.35@L\"2UE-+&%&&%&&%%$$$####\"\"!\"!!!   !!\"\"###$%&&&&''(()))+++++,,,,++,*,,,.--..../130[xufhiw{xgbmȇľȯʾȳô}śymvektz}wzj{rvntrl}xiwb`wl_scsuvh~mVervQJldw^tnQXck[a^bCKGSgeigfdbcr{{ltwnx_`smzqlmtjdfc[seb_`Tbjfj^Zc`cbTMLddWQ]bZekmWirkc\\\\^bkfZzfkfsphj{wsuitvunuobphbhWflXVb_^Z[^jr_vdmqpkfhrqlklmosgckfhrmjsogfeed_elmhhmrtsstsqqrrsuz~}re\\ZZ\\^][[Z[^___bbb`ejaab__a`]_cc[ajb_bbbccdedeeefcadefa`hc`gfccca^acda^_dryyytogc`^^_efa\\_efng\\_^hdXYZ\\be\\YZYZ\\_]`ggffgghihihba`ac\\_jk`boroqqontqmquqrwhhluxotqytcekkiqkcsoguvjktohegqwsplfdabgnsrrmfnsnnijqsuxmlvsmqnilpnefhfelafspnmjkkpxqttbismmhpvrsoiglssldmyqdfpkhimytksvtqonb]chhesri}tmaafalvkisqlhgkrqrvvpmw|~zrrr{yvpszvqzyuyvzxqki{zmrx~{qlouvprzyz|qinifoysmspz{ntuqpmnonkmtwklru}ytorvvyy~|}}~x~~~|{{~wzzy}ux{xw}z||x}~yuqolijotumgfh{zwpnpqrrsrqqqs{vkkpsttwtquwuvvyxrxwstrpmry}xuu||yy{zwuuwy|yz|z~xqsx~||wrq__qpxxn}pixqjnrspmox|nbnyw~|{yzvor{y~~{qwov~~~~}vj~zykhizÿſѳſǹ¸¶ŷſ|uдëzmnjp|ykrvprvqk|q]}_i~u|rqxmr~{xggzZah{~ikxurvazeXyspd\\|z|n_|vvfosjiV}JeybUxtW`wrjsxmqvjiqu{z{|u{{|q~~|wy|~cQ{d_iprjo~zwh[]opXIc`\\j[\\me]\\b`HQ^mbM^eexYwncmdbk]LQZVe]ZbbPX[TJT_NDPYZYYXZU^cdgjlnotmhknc[bjoiztabsnyh\\portyZYbl^gud^ssmufLqcLaruflt}epuuw{zxqt{{o\\moW`aaGOQ-5A:MC\"6SG:/(*+(%%%$$$$$###\"\"!!    \u001f  !!\"\"\"##$%%&&&''(())))))*+*+*+**+,-+++,,----0/+<sx}tsxxyx{gblįxʴʾ׽µƮyš~~eq|xwg|ksxqxd{|{ko[f`cw^w}tokcesUaqgoi~pa>jZhX_bY:PM^jjqdf_fszn{x{\\n{q}tsuusmbf`qc_\\_PYedfaWc_adPJJ^bUWZbZeijVerg`]X[dkkXyai`nneewrrqfu}slvsftddgWjiWZc]XQX\\rjasainmf^fsrkinoopfelhkumksoihfge`fkjffmrttspnnmkkouwux~|qd][[\\^[VSV\\ZZ^aa`_ef_``_aa^\\^b_Waf]^cddcddddefggedfggbdngcgdcccc_`fd^[bikpqsspfd`ehafha]`fhshX_`f^UWXW[^ZYYZ]^b[^ighhgiihhiiiijlojjsogltonrromrtpososm[dgoqjohnlbcklfljdpqgntjdnpedfjtqmjdb_`diqqrmchomohfnprsolpojllgilk`Yfabh^aonlmghinunpqbgqmpkntnookgiorh^mxmbgmigfltpnttspqpaV]gnjn~weo|shZ[b^fpfakniefmqrtxwsqv}{pprtwsnsuvrzzwxs|yonl|mnt|{ohoutpr}|z}}sflvmgvxlqpuyovysrnoonlouyqqt|}xvvyyzz}y|}z~}y}wx{xw~{|{yy}}zvupmqv{{uqnq}unmlnoooqqooptyvljlttrxrotstuuxwrtsnpnnorvxsru|ytw|wruyxz}}tx{}~v{xz}~~}|mdrv}{o}tl|zvyvtupmx~kevy|~~wz~||u~}rbt|sticf}ɻ¼˴ȼȴúüƲĶ~~|ǽɽеpymjkzsƱ~muetpoemogh}XinUur}ud~nwrw}uiumj|cX^v~cis}}{py`yzjVpwnip{wyxvyuXesz}i_ymbvXQ_ujQvsWfs`oa|{qcnzpxwvpst{{[isapw|xv}~rh|{i\\dyuomSPibel`lp_\\\\`\\TQ\\r_NY]`sVqreibbjXHSWbkSWeYQYXTKZbFCUSUYWQXT^\\`adhlpwnlqnbWZehgm^aqmog[roqj{xV[`jVgja^miakXR{\\Oimqcqul`rros~i~|ns~ruucrvgigeQ\\P.?JDQ9#;RKB2+01&$&%$$$#####\"\"!!\u001f   \u001f  !!\"\"###$%%%%&''''())+++,+*((((')6,$(+-.033580>npN_tU]XcxgkpɛǿʻŽָȴ{§~vbliozuz_uyqa_palu\\y~vorhrcxulpkbNUk^cWbhP=TQhrvl`gfzzuuc}v|z{{x~s`kise_^]NTcdacWacciNHIVbT[X^\\cgcUata]\\VYfojXt_gZkmc_qnpmdprltulucfeXleW_a`ULYfxXekdemg^X`pnhikjlmggljnxnnqmjighgbhigdflpssplkkmlilquqnt|{of\\W]^[TORXTT\\_^]^dd\\_a_ab[VY]XU``[^bccca`dffffeeddeeadqjbeedfgiedge_[dhcjmlnlcb`jg[ehb[ZadnbWbbc[UZXUXYY^^]]`aY_iefffeedcefhhjpokqskhnoinrrnlqrnmnmqdV`ejgfkeegeahidhieovigpm`dmfeebmpkga``_bdjlpmaahkndbinooklljeghdehh\\U`^be[^kihlfhikqllpehposoouopsokkmtj^pvlgjlmmknrrrtursvqdX]krpluyhgvrcRT][epfagohagpqpv}wtsszymnoqtqkouuqv~|wvrxzmqt|mjoxzphouqlnwwtx|tei{tfptmoprxrwzwxrloooqw|vw{~zyz|||{z|z~z}}{yy{xy~{{{yy{|}zwvssx~yw}yoikonmllmonkpvyulikqqrvomtrrtsvyqqpkmllnrusppt{~xpuzurxzy|{quyz{yr~zy~z}zmw{u|v}}~yuzzsq~z{y}mZjyyv{qlo˼µ½ɯ¶͹¸Ϻŭ̫¹wmoĺū«|n~hvdmjȬɤyzs|fgwoubbifeiaWvsMao~|aljzo~uoiu`xhXYhwb`w||wltfz`ms}ypxvwyppsZYx~tfzveqjz`it`zy`lzZx_q|{uz`vw}oxm}wexlqutzxjnsv|y~Vc{yvjXWtinqgtl_Z^`Z[P[k_OR\\^lWnxdcabgUGX[nbMWdPVWVSLb\\;FTKZ\\PN[WWZ[]bfltstwpnbSYfeklZ^pjefYmopc}j[Y`kZfehbib\\_R\\lWWimy`uy{^_vnmr{~{c{~dxztftt|oiabQaG?LRLP.*@PL?2,53$''&$\"\"\"#\"!!!    \u001f\u001f    \"!\"#$$##$$%%&&&&&')*+++*)('())'HV56;>ACGJLIGXbWNot\\QSOfzkxqǦſͿɿ׿}}rbjz{y|~]py}y_c|{ess\\y|yvxotpyj}e^Nqbn^YfcNLSTuyv_\\nv{}ut}wbrqwlda]PVdhae\\aifm\\NMKbV^Z]_ag^T[t`Y^WTcsb[l_eWhib^jjkide}ofmyqr`ic[ke]`^eSL]rqNmgbgkb]S[lidgheiigjljpzooqkjjhiifkigchknsqnjhlonlklprpnrvund^][YVOMRQQX^\\Z]cc]_a_bdZRUYRQ\\YX[_cca[\\dgeffeedbba]coh_befhjmkjigfegiaklglj]_`g_S_dbYRY[e^Xdbc[[aZW\\[[`]\\]^a^dheeccbc_]bdffjnfhtrifkkfmqnllklkkigm_V^ddcffeccfdhf`ehgipmafpb]efef[dqjf`^]\\^_dhkla^beib\\bfiniigfabc_ccb_Z[]`bZ]ffehdijknmnlkjqovuosprwwqlnzpersroopossrsuuuwqwricdlpqpnnmepp`NPZZeohfgpjeiqpjwxtvqv{|xlllorkgjoomszwstpr~mv}|pkosxtnpwvkguxrtvsecosmmnnlnltxyzzxknprvx}|{|~z{}|||xx~{{yxu|w}yzzywz{z~~|~~~}|{wwvv|{phglqokjkkkkjr{zulhlportnosqsuqvxppojkkmpssqnntz}{rmswqrz{z~~totx{~}yxt~{~~~x~zy|||u}x~|~vdp}ϻ¹϶­óľŴsk¸źǬxzjoegj~q|˽̶unw}qevmeWcebViwVelkReyhzpho}wrdx]um[]UhrZuzy~kw}dvyq~|{uoz}zoymkkd[szvuq{qrayv|yn|r}~ku~tyxpw|uqv~|mx{h\\m~t{ykQzzulddnuriukbXcbX]T\\caNM_aeWkyd^_abUI[hpUIV]N]TUOOgL6NLKcWGU_VZX[\\bfnnixwmoaQah`i~pVZpi^f[emjazcaQemaahqdaZ[TMf]Y_jy\\xrZ`vilqu{|sj|uazufrwif_VQZHQTQMJ-4EOH=3-:3%/+&$#!\"\" !!  \u001f  \u001f  !!!\"\"##$$##$%%%&&&''&#\"%+1*,07BJPW^Q_]PEDGLORYuput\\\\^~Z\\itŠǼ¼ƻwtzx~rcixyz|w{x]mwzfcyiztb{{xuuvn|nrg^kub|d`j]XWTi|o^c}{~zfy{{vkf[[Xfugbhcnlqo_YF^Zc]^e_g\\RZsaQ]YLav[\\d]dUeeb_cegf_^wn^iyul`kc]kea`^aNR_rcTme\\ibZYQZgdbbaafdflljownorklnhhlinhfdjklspligklklmkkmsrilqolh_YWTNGLPPVZYY]bc]^a_be^YWTRUYWW[_abaY[eebfedfba`\\]elc[cgghilknpkkkmlakmeji^_[a_PVbcWQWWa]Zdcb\\_d]\\ba_c`[[_ecegfebccc^\\aeedkmbettifihempmlmkjhhifg_\\b_\\bdadeaehgf]^deckna\\gd[\\`ce\\]hhf_][XY\\]afg`^abed\\]Zhqic^ea__W\\b`_YYYca[[_dfdbhilnmlmmmrpv{qrrsw|yqs|umtv}yspqvuvvxxuxrwzklllnqrllklllaOQ\\Xeojlhqnllprhr~uuwopuywjiilofaaehintonroonv|russwyusx|vnvwwupoh^cmomjlijhpxz{{tqrtyz||{{zxv~~z{vqw|}xvwxu}v~tsttrw{~rz~yy~}~~urx{v||jikpqmkiikljitzxsjhkporqlpqotvosxmmnjjloqrqollrxzvmkrtns{y|znmsy{z{ywxu~~|~}|~||zz}zut}{|~z}y}¸ĺ÷ʧĻȴĮ³̲«ǿ¼ɮ|sgi|y|o{z}İ˳|z|{tjqmslR\\e_TYxbTgp]Vo{tnsuvzvh{^ur~r[ZM\\yfmvtxyersuû~{lry{iuyqfdqgpzpyrl~mx{y~z{rx~|v~lgvnXUht{}xdVq|pnls|szmmvueWkeX_\\ZY^MMah]\\ixb]\\_]WMYueMGXRU\\MPJX`<>UCXfMJa\\XXUX[agnbbxnlpc`hi[bstUUlj[ecake^w^eRgl__kud\\OZLHpW`fkdrm\\ftblrw|ze~tygnflnda_LTOSRQJE>7<HK@=5.@7+7-%$#!!!!!!  \u001f\u001f   !    !\"\"\"#$%%&%%%%%%$#$-4:;6;@MZ]]ZVSXccSMKMVZXWX]bcirZRxzgzɩżѾ¿įpe||p|nkkrtryvy{]hxtvgf}|qq~}wq~swk{|peltitkpingfwoy}n~~smXmXpphqntruuneNZafd]i_f\\Q[peHTZK^xXZ[ZbUac`_`bcb[\\sk[kxskekc]jfc`_[M[aq^YmcYkYUYR[`]_`\\]daemjhlojprjlphjnkoihgiijsplieijikmlghpojilpnje_ZVNEHMPUXXW[cc\\]b`dgeg^VVZZWU[a`ac]\\de`dcafca`ZZcjdY_ghgfkmnpoffpmainfjj`_Z\\aQVffZW\\\\\\]aeed_`ec`bedfga]]bcefdecbbcc`]cgaimaartjehhblqljolhhhjif_bc_[`c]aeaahcd\\R`g]gj`VZcXSY`e]W\\cf_[XWX\\V[ec_]_`^a_XU\\hmaS]c_^UZa_`\\YY]daWZfgcdilpnmlmmmsqp|upsswy{yx}qry|zxprytwxwxuvsw|osnhqpqlljfrnb[S[^qojqislumpnfovrvwmmtyvghhko`[Z^hajrhgnom|qt~t|ut~xtx~}~~wqti_jmrlknnmlu{{{zuwz{}~~|{zzpwz{voq|{ywruxr{r}}nopmpqxxow{vv|yxz}riz}t|jlpsqmkiiihilvwuphdkpnroiqpmwxlqvjjljjmnpqqmjjousnhgrsow{v~}sho}~y~}zyvtvw~|~~yxz|}||}zww|vq|}smr{x|{y¼ɹ´ɱʠűÿ˹iiiw~Ùzѥwz}}vnpsofv[O`dWIdlQWntUezrhy~}{mzzmz{^h|wmtx^QNTknnqonqmctxsrt{klwddqx~t|nzy~xuxv}tzyfqpZMTdo}z}vx\\fq}slrsuwxuoszzdXofZdaWUSOTdlWcgs[ZYZY[TX{WFF[IdTHFJ]Q5LQHg]JWfX[RVTYbfdYfrdnokvje]`jtZOgjYcgbj`Zw_hZifY]nwaXMYAIv|bmpomukasn_vww}zk~wrsfwqasu{\\V_TZSSRPG=DNEIDA?/1H9/;-##\"!!\"!!!     !!\"\"\"\"!\"#####$$#$%&&'+.6@QTOIFIHJIIIEER\\YTSYfloi_XWY^SKnv̿мÿɿϷxb{x~rvnpzjwwƩyzt^exktfmrr}ttxnyossrws}}zxqeqa{u{|{xxwwq\\dgojdmagaN[mlIMZFUxZXWVaXZa\\_\\^^[Y^oe\\kuokgja^igdW^UT[do^`j^XmSZ\\V[WVZ_ZY_\\bpmdeffqrjlphjonrjjjlghtrkgeiiiknnfgnnkkjmnmid_ZQFGMRYXSRYcc_bgbgmlmf]\\_]XW^b`cdbbdc_ca^fca`WVbi`Xafhf`kqlknebllbglfhibcaaeZ`lka`edbdhkkhfhjhegigjkd`^`dfc_db_ade]Ydi`ejbbmqgbhf`krjgonghhmmfbfgdY]i_ZdaZea\\[NWeU_g_SQ^VOP[gbXT[e_ZUUV\\VZe]_^[`][[XTV]gfTUc`^QUcab^YWVdhZ^ljfjlmtkjlmkjsrnxvrvrsxy{|nt~xvpszsx~zxrssu~|tqpnqrrqpofoqfb_`bzpgujsoollkdovsxzopwzwkljij^ZW\\c`hmecjolwv{|uz{~{y~|{tprv{woo{wsuz}~z}|}~~~}|vxp~|zvywqnuzux|vlrxnwnuvkkjgijspgsuprxtrr|pdzt|~z|lptqmjkiiihgkttrmebkllpkismj{zjrvhgiikmnpqplhhmsrjafttrzwt}vvmhw{s||{ywssuz~|}~{qu{~wzvw{yxy~wqu|onv|v{z~z~}~~y{~}|sĿƾƺƹǼ|ʲ¨}psnŔŮzǰνx~z}vjrq]~qfOOa^IQzwWPdm_sniwjxymqv_\\wumhjzyhQQTWckrtmblzfvwxvunzvojnq|{vy~vzwl{zp}nov`OPVdltu{{}~g[~uounktqrtxrtvywdXmc_ibUNPXYejSdelXVXRY_UZwM?JULkHEAMYD:TM\\cNQe^[XPRW\\dbZYihfmjlwhe_eingOaiVbgalWYvbife`U[pz`TLY?Xzswqsnh|eh|z}qxropmlyadtzZPc`c_[cZEHdfOPOM@5BP:3>.! \u001f!  !!!  \u001f\u001f\u001e\u001e\u001e\u001e\u001e\u001e\u001e\u001f!!!!!\"$%&,1;<=DILPONMKHIHHIMOSUURNKOUcrtm^S_cgii]|w||Ƹ˽Ĺįѿj}uyv~iuv|°~zmagxygsmoex|~t|wq{q}xvuzjx}~~}{jrsutmrfkiM]kpKHWDKw_XSR^YScY`X[[VW^ja^mqkkdg`afjfL^P[Yhk^fdZ[fWf[YYTUW_YX^W^sn^\\]eqmjkmelppwklpoehssmdcijghqpeeppjllknrofabYIKRV\\ZTSZcdaejdhppqkefjc]bga`effddc^a`_hccd]]gka]bhhg]hqielc\\ehbbfafjfffeidgpmhgghhjmooonnnkghiilmfb``cgc]fb^dhi\\Zjk^_ecbgkd_eb]hnjfmlejimqgcgigXXjeW]^V\\_UZPJ_WWb^UQYUJETifXOUc]TRRT]X[eZ\\a[ab]ZY[WS_gYPbb^RScdda^ZUfqbixqiqurvlillgesslvwsxrqyz|znr~wuqqwrsxvskotqwzvrsrsuvutuqiqnhgfizsfrhllmmifbqvsz|vxy}xoxthj^][]_]fmhfmqoqy~{vx~~|z{utz{}z}|}}}|}~wvuyy{xyvupqxwopyuhnvlumqqkhe`cdp}jbrqmqvposxpcx}r|~{twjvxohhihghfcirqnidbijjliktjj~yisuffhhjmnoooljhlqod_irswxpvwqqih{qlx}x}|qov{z~|~{}}wow~wtqy{qt{yxz~wvy|tt{zvx|{t~zwx|~~tp|~~~xx~x{~ty||tv|uvy}|pm}}}~þòûyԽƧx}|nŷ~}ϸȢ{xxy}ijn{_kufWHYcSEicUVphdpjywvhuvjipaRjldedtuk^UWKTbjx{gWm~eq{l~|q{}|}y}~y}{wzzq}|s}uy}ovlX[]Zhkk~qzvqZfmgojknnorxpqtqpbXh[ajaQCV]YddRgei\\PTIY`S_qG=NHWd@CDMO<DVUaOOba[cUJV]^^]W\\hdlhejmfiakmmqZ`kXbi\\lTZofjq`_Xdr{`OS]Iiupzyq~_vxogrmjkq^ks|^StvsottZMnm_gdQSX]VDBK=)*.*&&%$$\"!  \u001f!\"$$%(,/2/,,5;ACFO[lgRHFHHIIJKJJPXZVPNVZWVXY[didXV`bkie[ZoeXe¿Ƽÿ̷ιw|pssĺ~{hemwoiqwf}_yy|z}vrz|~rv|~}ywotqT`luRGWKDsfZMJXYRdW`TW[RV^e^^injgbb`gcpdH`NXYklbfZVbedh\\^UWWX_X[]S_vmXUWdrhfihdlopvkosohlttndekjegspdfrpinnjkrwofhdUSZ`c^\\\\_dedfkfirttoknphdhg^ahjkhfe`cdchddgfgmoebghfd\\enhag_V^c`ab\\bhfggimjjpnlkfghjmqvspookfgjkqrifddglhbmgcmmmdeto]_babbd^]c]]dhjggfbiikpigijg[P`iXSXRSXLSTDWYP[\\VNRTH?Jbf\\NN\\ZUQPQZY_g[Z`_chha_h`W_g_WcjgYYffeddbbhvorylr}|xpmnlgdvwmu{xvotytwxlmy~|xqmlqqqsqnhnrkrvutrttrxzx~yfosoklovwinbahijkedtwty{zz{~wt|nkccadedhpoptwrmy}zwwy{~w|z~~{||}~}{{{{y}tuut~{zvtrmpvkft~~sgiukqmllgc`]]_ovc_roimuknnxscx|s~}xtvywozxngfghgebajurkfcadehignrfnrfwqdfhgjmmnpnjhhlpka`lquzqjxxlojah{vggu~up}ip~}v~{qsy{~vpyynlotwoquvwx|~|yz}x~{tzztu|svrz|y|tjhr}yy{njvyrqwrgsws|{yyxrry{{yx}zmqwupjkz}zz|z}~ÿäŻxzö¥~t~rtĸάͺupqxkfguy]}g\\OTe^JUtrbXUtdeokyr|elqldfdM\\^\\`XrrfpdVMQafg}}]Xn}k|zs}ymy}}}}xyxrz|||pr{zr~xw{wth_sh\\noeypuv~aXpwecojqiggxvintjh_X\\P`i[NBY[_a`Zjcl]IRK[`ShmB?I@_W=BDKG;PYYPK__WibHNa][XWVahgjeblgbheklmocflden[n]_klkp_aasss`Pgf^{zrxbu{yxowihogar}~abv\\no}}k[vsgYSX\\N?BR?=<:87320149>BEDDDFJEEMY\\ZY\\aj|rWJIIHHIIJJLQUROUc~~mgkuw`]`ele[RI[olgmToҽƸШƳ{|rw|~zhfqphiox^`{}}vwv{~{wzv`dp}\\I[VDnk^HFTYRbW\\PRYOS\\b\\]_nf]aa^jcr^U_KV^kkbcWWhffd_ZT^YX]W][QcvhTQTdrfaedcilprkptojptsofhmjfktnbhsnkolkijuyqlib^^aededbdddfjggrutspnmkihfbgjlqnghgeklhhghknoneflje^]cjd]d[SX^^a]Wakgchjnnjoopngiklmqxtqpqmghkmtvolknpqniuokurropyqbec^a_\\WZ`X[baigacbeelpfimlf]OO]ZPQMIPGIUGLYNUXTMLVK>BXc_PKYZVTRT_]blb`ecimrmclqlmpkflwsbajihijjkmwyxoq}yssqsjgtxtx}zsktxnr|vkkwxuxslelqotqidjoeoyssnuxnt{xlnvqjltquon][dgjphfsvtx{|xz}txrpniimopltyxy}tkty~wvx|uw{|{|{xy}|zzyxw{~{npzq|r{vusiisi^n||qeeqjlkjgc_[XY\\mn^brldnthjl~uf|w}zwxyvv{umgefggd``kqnhedbbbggfpqdpmdumadhikllnpnjghmng_dopuwjkunjlb\\jzoadx|ktsh{tspjvxxto}~mfnpruqnoqtty{|zx}yym{t{|rrn~vqwyz{mdfjuyyxw{g\\mxpiok]l|omtyusstqpwvvrqxxofowogeju}|xttz~}{yźqʶn|oûȤxngky^tovf|eQMepYH]rmfQUv[tf~~~~xq}g_kla`^M[\\Z]QmxfttQLW_pdgxeipyo{|}v|xzytuppuw|tjrt|ovx{{uqkkg_wi\\tsunQ]twm^fopobXh|hdmndd\\XXS`dYWFWceY`gg]qUBTQXbTkiAB@@eJC>DNBCXVOIW\\RegNJ`]WTSRYgigedeid`ffhhimfkomjtcpjfqrid^dg|pjb[vvyzzhwtinmoc~itnq}nvk\\_ae`KQdNONLJIGFDBDHLMKJGFDACP\\`]\\_`_b\\SQQJIHFEFGJOWZ]evsry}cSXY[]XP[pdqpNƻżӹ˽ɺ̛ʶytwy}s{khpkadmvbe}~x|p|~}}~|xnlzcNddGhkdHBPWQ[VVKPWOQX^Y[YjbW]_\\ier_bXIYfmcZ\\Y^kgd_\\WX`Z[\\V^YPjwaONTfrh`d`^cglnjnrompsqoklnmimsk`hsnorklkcisvsnjdabefecbccedhfdnrrqommljjkgikluqilkiqpijjilpoldkshb[\\_d_Z`XQTYZ]ZT`pl`emmkglnomjjkklqwspoomjkkmtvrqqyzutpwvtyvvww{uhnk`daXS[\\Q[b]fd]aacckmairng`PHRVOOJDLJDTPGVQUWUOMXSGCTbbTN[```U^legrkilgmrwvlpv|}zxur|liolkllntrx~ztpx~xstvuskpsuxxuplsujpxoijqqlu{tdhqmtrjcfqcdxuojt|mpv|}xpmspjhpmrsn_[clquqouwtx}|uw{quwvyxwxxwr|||ukquzxv}q}wxx||yxy{yurw}|vtwu~}repwztnywtpfbni^i{ynb`ljiihd_ZWRTZjyg[hphaoxoijrul{~|}zwvqjgffeca_bjmjecc`_^dfjpoathdpf_bfilllnpnjgimle_gppqohlqnleYYnyiaftuk~htuj||ot{tx}qozsbfpnnlkjhmqruvwvuz~|~~~urxqvz||utr}xuy~y||jbgjrxxqnsxdThxqflfVitgoomlnopoospnkqvshantia`gku|xrsy}}{~{zzƸǚmw~{ƽǸsp}~sqph]kzyw[t|uqzssmdNPquTEVhsaJcemrio{ivjVajc^SM_YXZMhxuubCY]nwlvzz}}vnv|{ns~ppzn{gp~upykhopxzl|~r{y{uoonr|`dzZVquws]LcqpgZksqgYQspZbicbcU`a[]]i]JXj\\R^gdWrM@VTU`TkfB>:NdDL7IN>OXNHMVQ^mMHaaUNLLRbkefcbdcc_dgedililplnvpstn}rc^`jjzqllgvp|yuymwxzp[nk\\rXUgQQOMMMLLLKDA@>>??A?9?HIOZdj`RLIKMIDKRX[ewqtyk\\aeZf__\\Pyzl½ɿȾƱĖĨtr}|}zssmgsm[diwir{|zyyw|wvm|y{|z|w~{}}~~~xyqmVhrNejkM>KSSTWTILSOPVWUYUe]XU_[fhnngKQ[gl\\XW[fji`]XV^`\\^YUaUPnrXKJRepg_a[\\`cgiikmlmoqpooopplnri`iqkoqlomeehpuuphb`dbcdaccd`bc_gpromjknkkmhmpnwsjmlksqknljlomjditjd\\Y]c\\W\\WQRWX\\\\T^mrefkklehjllfgjghpwromnmkjjltwrrs~xzux|zzwx}z|yktuglhYVa\\O[c\\ccX_b`^ef`grnlhUOVTOONKLROZ_RXX\\bZTX]\\\\NQaeZSbkjiadwqjutqsmouywvux{~zy}vv}sowrmopowtt~{~{urv{wqsuszmkosstqnprplpuolknnhn{}kgmlsrkg]pi]pvohnxoqqtyyrlrolinknupjebnyvvy|}yy~vtxrt|{}w~|~wmqu|t}z{pxzxxszy|srostsop{~sptwst}_di|uinytpgZdi_d{uka\\fmhdhc\\URNOUhveZkmhaoqomns|s}|ytoighhda_^dijgdbc`\\Z]eope^x}dem_\\aekmklnooliknkfdjppmjimlmh]R^vxdalljttj}jptwwq|yssrg`krkjjggfjoqrstsssvyxx{pzuntwx|xxu{}zy{~x~lgmlpwxmorvgVmxqgj]Sjngpiedikmmnmhjhqunc_nmd]\\^ap|xqy}v{|vu~|{y¹¿ǲxn|ŵ¼¹oιw{vjpobYpjzdanzdbtolpcLVsH<KjoPNvvm~c{dpwiqkRXif^KMj[VWOaq[Rjfr|}Ư~rnq{}i~pxgmwgxfp|vmvegnnvrj|tozow{kklpuqZjtNUpszvkPQdgk^Vowl`O]v_Zad]b]Ri\\V[f|PNUiRP[icVvHAUW\\TXie>5;^UMH5QGAUVIINOXiWA[b`NFFK_njcfcaa]b_bhc`kiklkkpusuxwtgdjoq|xsztr~z}{{zy`brS~icoSPLDDDEIKJGB=;98776468=HU\\XNDFGQWSS[clqjdl|}n^YX[^fofrcUnZT}òȼů˳º¦ȷyquz~||}utqnftmfggztppozp~nxxowok|suzx{zvxut|~s}|w}|{}~}xztxajzYghpY@KQSRWTGJONPUQRXS_XXO\\ZdjludKW]hi\\]T]egf]\\VUb`]bTUiSOqjPJFPeog^`X[^`ddjikknopqorrqsnorf`jolppmpokffkouvogbc`bdaccd]^a[alrmjghmklljqtowuknmmsrnqnjkpliddomf]VZbZTXUPOTV[]V[fqifjkmhhfijdfihiltsnknniijipwurr{}{w~|x|}}}stzvvrd[hiRYd]__W]c]\\_\\^htonn]]aYUWZWYcbhmeedhmfchhcnh[`j`Yhssvpew}srvwwsqw{vwxz{{yy}ytxytuztqoqutqwz}xvsuzvortp|wimrnpokqqlmprpnjgknjqwikkrtmiW_o_gwofjtrqnqvuqlrnnjllnpqsqmswwz~{vrvssyz}z}ymru}qy~t}}uosxvwsxy|zuyqmhjrqnlqztinxxn|{w{gYapwmcrtphX\\f_^xsi_V]kh`ebXQOLMQcqe^lidfsmprsu|}~vplgfgfb_]]dihe`_a^ZX\\frm_f{pbcec[`cmjekllmmnonigijonhdklkk_WTdyp^cridzykunkzm{}ur{yvvrjamwkkiddgjnopooprqquv|}~{ttplwxtwzv||~|{z|~yvmrqswyonotrXmuudo^Sgpksfchjkmlmjejcpukb`mja[[ZZn}wq|xsxytu~|žÿȬvÛ̾Ŀzsβ}r~wpprgVbv~pizqZuncpeenjjm]TfufI;QiUEbxougvbeqmonSRhg]LPs`UUTfkdg{qx~îxono}¢}|lzo~naktaodr|vm~sbgklsmgxvmpshtodhiopcTokFUoq}rn`IW`edO[urhSPjfXXXYY^Q`oOSc{iIMSkQTllccw?BV][N_gY71G`FV>=R>HVQFHMR^_IR\\fVBCM]pneada__\\a_bbacikjjikrtuxsv}{sqvux~v~|{PrjS}rvfVPJ=768789522225897569;;:=<;>GRRY]]_fku|qx`mikvhfec[_\\YVVU[eY`cfYzO^~ýòɮ§¤ļյ̻ʷwvz|x{kunqmjxrnjgyq{|winshziuli~vkjzxymplyytsqkpy~t}n|wt{zz|z}~yxywyep~ekkofHQQRSUSGHNMPSLOVS\\PXIVZbjjuaMX]gfdd[_bcd\\ZSVca_`Q\\kNQrbKFEQdnf_]UY]_`agfgilnmootrruoorgajsssonrpmhghksxsnmg^`c^abcY[aVYdolfegmhlknyuoxvkllmqrqrnklmkhdajkh_W[bZUXVTQVY]^[]cnjhiiljjehkadhhfjstpikoggidmwrpo|~x|x{~{u|ypdk{`Wd`^]X]c^\\[Xahnonobgklf`mjlssxuvrmntvsqpnuyofkohoyw~ykt~wuxyvry}xxzz{{yz}{tvyvt|vulqvuqtx{vvtu{vprtny}kjqmpplqpmnprpomfkqikz~lijqrmm^Sqaevqhgqqrnpttolqnnlllmnuw|w~y}zxussxwx}~psvvu~vtor~~zvu}vu|qrsieiwvnnnvpcip}lk|twn\\TevoedqqhXQ[][mqi^UVfkW^`UPLJMThimorlblwkrx|~{rmgefgc^\\[]cfd`Z\\\\\\XW^krd^o|faa_]\\^cnhcjllknpooifjklicekijjYRXivg\\hndn|nj~xew}tszssyz{{zunhfqunlgabjklnokjmrrnstyzuvuur{plvvrt|yw}|{}}}~~{w{{{xvsqosyfvtym~jbssuvofuspompjiopqtkdfjg^Y]\\\\p}xurqqssy~½¼ơ|~ȾķƿĿz~¹vvzzr{m\\Sas|merl_Z\\sb^ibcc]Xho^D?Z[DJhvtdgrfewprpOLlk`SV}iWRc~kt}~ópklr{æ|vpwulvaZenZze`t|wn|q^giiledmiitigma^ddkgWVp]AYmo}vfgXMX_eTHkxl^IZfOPQORXXTt^QYx}TIFakRpq_kqk7HZcQS[eA1A\\TLR5GK<SQIBFTVXVOWaa>?Pbqo^\\`a``^^``bjcdnjeflmntypw}|zz{h\\~v_fpu]S\\^I6+-/./32258999;<=;;96139>BIGFKU^cejsvouc]eajg]_g[TfkbXZZ\\li`XojzkǱɫǴװ·Űzuz|bvitquypum{u{|wl`tmbonq^c{tnjssohieutqoedkszvotuwly|mnyvvxw}wvr}xuyzluusqkpV`TQTXSJFPLNQKJUXXHTEPW`cjqZRW_gfonda[Zc]SN\\c`c\\NhfGZoYF@FUfoc_ZRV\\\\V\\cbdfiijjnursvqopjemryunosonjihinqqqqlbba[`bbVS[US^oibaeielko~vtvijlnortqllmkiecafigb\\^b^\\]\\\\[_aabddeighmghkqjhk``dfdentrfdlecd^futonz~wy}y~|ryref`baW^f^\\XUehiokmhjqsnjwwx~~yysry|~{vx~yqoswy~}{{}yx|yvy|wzz}{z||{wtvxv}x|uszxrstywvuuywqqqqt}tjpqrrpprqrrvrrtkqvieqtkiopnrhWneftsjgpptoqrqonprnnoqqr{z||}uuyuwwx{z{}tu{}}u|wx|{vujioysrwz}racjwwfpxuoeQ[rnd^mti\\NUZZhlg_US^i_YWPQMJO^sou|~ukp|x|lhccff_ZYY\\cd`\\WWYYVU_praatt``_[Y\\_elebfilklnnlhgjjjfcgjgkjWR\\ko_\\jebtugqyil{otqnpw{yz}wpjdhstold^bmmjlnffjrsoprvxrnloxrq{rltsqpy~}~zx~~}w~|~~}~~zy{yxy|v{~y{uxy{qy{qsssuyyvtjklfgb_hefx}yztlnkpq}Ǵ¼ƻ¬Ƶęv{wvty|Ɯ~oxw|n|~~|dVRjs|sjr`d{T^nilg]^[U_kdOAO]K<Snv|hZmpk|VTvnid[b]xwykjftxvªsytvxoriqZS_iVt_]w|yoxn[geff]bc_imad^SY_ai_M\\mQD]kmug__UQWaYDVyljVK]RBIJQY\\ZlcNYj}cIFWsZ[{V[tpX<S`eLPVZ/;Y_N^E5IDBZHE?LWOSSPXjFAUhtm]Z^]^b`\\_Vakideke^iqijy|rv~|zwyuvztds{lb}ulBQWbO<654/-3569=@AIJGC?<;=?@FJLSWYWNKSX^m{u_YWYgg_\\dYVaWVX]ccuyVV{}ƷžɬƢԸɷĦ²yynv}ewouy~v}}rlsxodYzj\\gqmTbyrnjmmhfdaprnh[`krwsrhsmktueiurrsttq|kmz~zqq{wrw||zskscp^TVaWWHSNMOKJWaSCRGOT[ZjjPNOaoqthecW^g\\JNac`eXXoZDbkRA:GYgg``SNS[YPW^]`befffnwrtxtonnhlu|ulptopokhjmpnnsplj`W]baWQVWSZni_`eecojstxvkikolsxqjmohgbb`hhgebabcddcdadiffggfechqidjupgk^\\`cbaksrd`id_`X^rsmpvwuz{~znlhfc[bh_\\VTimfmilrqsvrp}zyx~tqx|x{}wurs|}}~||~y~|yzvwz{|~||zrs|w|~zv~{tuswwwwvuxssstttvmotutuxtuwu|wuvmy|idn}zlhlortqdmkksxminovpspprsq{ossusv{~~w{z~|yz|vv~{~~y{}nyyqouy}w||tegmtol|xol[Wjic]gsn^QUUWehe`TR[ikXUQQQPWlw}wv~~|leaihd\\XWY]bb^ZWVWWTUctpahvkZ^_VV\\`fi`acfkijljgfgijhddgedljXY`jiX^h`fsijulj|yfqwehvwuz}wpnd_mytmicbholkokcektvpposqlkhmxtoxwpqsqmx}}}zv{zu{~{y{}}|~}~~vx}wv|}vzldtttyuu~||zpnrptt}˷¨¿ž´¦xwuvn~w}wγuήrgqv}vnys[K\\l}ukamqS`vysj]ZTVfdTFK_P<Ghryw]e{wfess|frs~isfxuzl|t}wow}~vzvinflWO\\gTn^awyzqnk[hab_Va^\\f_[]MJV\\fkUHbaIKaghiZYZTRWZHDis`iUOMB?GOZV[nfMV\\uhGBNleNemEjyiKA\\g`IJUD4T`R[f<>H>EXAABVLITLLbZK^hmo]VZ[^cfc_UXnnWaidX]ngirtqv|{yʪ|~yy~kt{zsxpskw^Oh\\ZSLIHD=00004333576239:AGEFKNST[b_QIHNOGL`gZQWRjokhtspjUU^fnktsgĲžǨûϾƿī{~|}s~|vhury|y~z}tq|lfkxj\\V{lRaqvyhQcusnghgbga]kqh_S^jmxwvterblsqciqmlnnmotajw|sip}{stsv{nnpixj\\]fbcTYTOPLQUgQCSIOPTSi]GLVlupiadY\\k_OGWe__aYejJEfaL=8K\\ia^^JLTZWKT\\\\^`baafospsusnqsfmy}tmqsrttmjosnekutttiY[ec`ZTWVWkk^ae`ftmyt{xlnqply{pnpqnlbdgpjggfdedegfe`ckggdcga[^lmbcopiga\\Y^b_ftsd]eb[[SXlrqttunx|~x{z~tuplgbgkc]\\Zkqejhn|vuvvt{xx~xvpw{zzwuwtx~}}yy~~zz~yuv}||~}|{uwwv~}uvruz}x{trvtrqrrsvsuwrt|}}zz}|kjfo{}snortywppoqu|pnoruqvrqtuuqwvwww~~|{~z{~uuzt~~}xnvz{wy{}yprwu|szpsi`inneempd[ZSSaffbUS]kt^UTT[\\`z}}xlddmi`YUVZ]b`[XSSSSPWjymanvaU]ZTT]chg^``djfgifdffggfeefdeni[]bhh[ab`klepslx{`^rmgotrs{xnhh_dyykijiinoknnebhqvsopppnliflwqmwvqpnlox|z~{sz~wt{}}yts~|{~~|vz{wtp~zrz|x|}|yç̽o|pyrkqp~ǿŧtslgh{gppXPiq}~wtvt[bxk[ZRXaVHGaWHIe~s{ldxy|w}{{g}psr|gu~l~~~p|z{osw~{yyyutflfzjSNZfSh`gwwznci_j\\\\[T\\YY]YWTDFRXmiIFaP?Qb_`^TWZURVK@Qh\\bfSE?@?OXQTqyZaZhoNFPgnSWp_Vxt^FLlbXGIP8JaVQm`8IK:DW??LU@JMIY_[ecbjdZTR]bgg`WUlnV\\eiYRfidrrlt~{~{y}rzsylzx|xws|Ym|w\\\\\\IONUG>:776695298777;>=<AILFL\\nteTNPTL`r_bjV{|uuyrWX\\ftmmxŽƟšü²z|{}pxq}{sjt{vyps~|ggxg^cxfYS{sL]onrfSeotqcce^d[Xhp^UR^fgyygml]jqn`hogfiihnmZiswjgs~~smroq|hmqhsobcglj_dZRVU[RkTHSKOKQRbVKTaljf\\_`VgkQLScb]`\\]k^AKh]H77N`f[\\[CKY]RHTZZ^_^[^flmnqqqoswgl|plrsswtlowwldlvuvxn]ajfhcUX]Zjl`ba_lsr{zu|wotypoyostuxqfkrzqhlnghihhgf^\\efc^ae^VT_i]boqmge_[Z`afurd]daW`WWlrrttsiru}}uwy|umkgmriceckqfkkq~wqryuutw|~~|vpx{zwxxrqst{~}}{~xv}{qszzz~}{xzxt~}utsszw{vpx~poyytvvz}qs}~kplvxqrtvz|vrsvu}uorqxowvuwvuuxyyyzy}}}}|x{~m}~uv|s}}{{{ztpv}x|~}zz~}vyvonuxfhrhfaZU\\ccaZV^n{hZZV^fc|{wkejoe^WUWY[]ZUSPOPMK\\uxecsrYWZWTU]fjc\\bacigecccefeeecdhfhpi^`bee_]]fkehpouxbScjcjssturmid^du{kdiklnqmimfbgqwqlpqnnkhffnxqkvrnpjfow{u{ypxuqvxv|ytsrszz{|xrx}{|x~wz|~}||êɺhmvmlsiƾúɮ˩~|ȕznlbg|ozvlcUjn|{w`cziWXTWYRF_d]Sk|z}ulvf|~|zjrvk{~{lzxwx{wnnxq|xv~vnrxjkfthQKWfQdbiwwzk\\eel[YZUUWURSXNB@LUpa@HYE?XZVVUUWYSPPACV[PgaF:@@CULBfmbccn_JVho]TjiYorcaOok_UIGFBZ^OblV>TL5LYA@UJ?IJT^`l`T\\iaXPZbchbXXfiNPlj^Q`h`oofryxxz|~{u}{npw{y~t{~prmoWHW`YOJD@=<===>A?>>==@>>CFGHSbqufYX`[nwY\\n|xwr[`ckxnh¶Ǹ®yx{|{|vxqx}t~~wrt~~qx|rx}{vzwhgut^btbW]v`YTx{zLZkkicSdjum^_eZ_UUglTPS]agzvbvg\\ilg[fndcccfigYjnoegu|vmkoipvinqdknacipicmeV[]cUl\\RSQQHUX[VRX\\bc_ZaaaiaTWen`^c^eiSGYiXC6>TdbVYTAP`\\MLWXX[\\YX]ehhqtoopuxgm{{klttvxtmt|wjbq{wvwoejpkokZ^f`lncd_cpqw{vv{~wszwnvvqwux~wkuzxhqujkqliikbX^ca\\^_XTOWe\\gpnndede`^dlwoddib[e^`ooqvqy}pbnnyxrvxqqjptnllgipiprr|ulozsopw}xsxzysxzropv~z|~upzyoovwv~w|~~}~py|vttsvvzxqxqk|yu{uu~q{o~xzvry}yuu{x~woqrzpvz{}|z{w~z{zw|~|{{~|}t~{{m{vu~{u|{|}}tzoqu{~{y||~{y}nizmoifbcb`f\\Xdu{sabXcuq{~y}w}kkqla[VVYYXXSPNONMILg|q\\fviTYYTTU_jh[Ybachhf_bbdggebaeiikpibbbcda\\^hgbiknseQXfddlqsvpffja]pxjagklomkigfadmvqgmvnimkhffmvpktpoohdjuulxypv}jm{~xvywrstv|~ywvyvtjo}w{{}||wz|~x¿djrwej}sļƵǲ|v}Ŏwx}~mg`zxju~hjXet{|yjazgaa\\X_Xgpsi}y}z`xyw}zzxmmqlzzu~wyns{~rvu~qumkpp|vxzufqppkepeMFThQ_bhwy|gVcjl[Y\\TMSOIQVLA;ERo[?JR@BZQKQVXWXSOKAEUOPjV:EC@IG=Qvs`\\_ch]\\llZVigakoemcspbdUHFCR]\\WncRNXF7]UDA\\EBKUWYj_NOde]PUfbgaVYciQLigcQZf_gmahrszwprsz|xq}zy}}~{zfs||zou|xepd\\TMIGFEDBB=?IOJJKOOMJGFEB@CPbhda]fiZS{}xr|pcdirznkʿ~µŰtz}xtqzyy{nx{{u~}vvuzvw~z~{rqysstsmtwfankY`{p^S\\u[]Yxn|OVgj^_U`fxiU[dW\\PUfdHNVZZjxt`wd`gg^Wfla`[bafbXlgjbhrtohikfqljsqchk`]krgbnoaaagajf\\SWXH]]\\ZXZ_cia^jjb^bcenibdddncSVgiXA;L[d^VWKFYaVISZUUXZXX\\ddfuvjlsvvekxxijqrtssoyugdv{wwyqkssqvn^gi_lnhf^hoo{xsuy~uvyupvuuvz}yr~~uluxqrupmlokZW`_[_YTXRXhat|osmgfpmchs{nhpnfcnhjxopzlzuvtn[glq~pt|z{zrvprtqrnigmmuwoqphqsjowzv|}zw|zslt~~|wz~~|z}tkr|yokqvv~{xzzruzxptupvyzsutow}{~y}qzxup{y||jkq~uy|}tyyzyv}|vt|}{o||x|y}{|~~u}|x}to}ts~~}~w{zxy{lzxtsopl`kc^jyymqi`~}~zywyyxkqtj[WUX[XTTQKKONLFQq|k\\hqaSZVTTV`jaTX_]che_]abedde_`fkknoifdbcca^bebdfhjaRO]fcekssldacbakuj^agillcehba`fsrej{vhholgghmsolsnonebisrdwxvuwjo~~xvwvstwxyzyvsvwp~kk~{~~xz~z{zyz|~~y{v»|}{`hnnhkǩûľv}v|wzѽyysoyhhi{smmu]c{z|{}pr|vfXfy~zzz`puqzwzvniqmy|~tqzs}x{oruxy|mus|ksmijr~uytyw}dpprkaleJARhR]~cfwy}`Pajh\\Z_THQLDPUL@9?RlWBFI>DWJBPWUVXRSKBIQFZjD<L=BB<Kjtf_U\\fecon`asm\\hnfpwuz\\ifWIIIY\\`dk]SWW;NeNCFbDFSVO^`TTYc]XU]cebST\\^YMff_PXdZ_k]`omopommsyxwwlư~|uxtcwu~yuqse]OVPFC>AEECCBCGMOPTRPQUZUNGIPSTP^cUNtupslfhtyns|}ɵv|w}wvon{umnvyyu~~{wv~{vxvxomx|~uvsrniptqomimud^heU`wkaQ]vTc]smxQSdf[\\VZdvdOUeXXMUf^BNVXRmvp^ubbdcYUfh\\\\Y_[g\\Vkeg_jkmkchiepxgjzqdjiaYkqfakrgdegjiieT[`PfcbaZaloogfql[Zmqmgchifjrg\\`on\\CIZbf]YZJN[`SJVYTSVYWY[dccswihtvtfkvwggklqqpkzqghz{wwzsqysv~sekdZjpoi^fms{sruy}wzzsuuvtvyzx~yspqyurwvtopvdT^c[a_X\\Y^oi{v{yjgyzjlv}vq}wikuqusozlmmx}xkiZ`jj~mrx|utsw|zrtuqlfkpz}lmqkvxms}x~{z}pn~x|xw{puwooxvpmmvx~vxu}trwynuxlzuywqvu{|x~xvpzvxkgl{~vvzs||~|~{w~ut~{t~{y|{j{zpx~wiw|v~qszx}xy~x~{vwjtqinzx}h|~}~yv~vu}vlstiWUTW^UPQQIIPLJJX}wc]klWRXVSTYdh[TZZZch`X]aada_`^`hjknnihfccdbbbeeedeaRJQaf`dmqka\\_^^ksf_dfdgh`^fe^]`iqg^ungmnlghilqmkqnmmc_dorpty{v{|mn{ywvutswyxxxtpuxpsnrs{y~{{{{xzz{}}}z~z~vx~{u~`ihikr˲÷t}vzryȶzx{quul`nzkxqo~yaeux}s}o`mu{}^k~vnwu}zurnurmvv{nsvo}z~~{~xvoz~qouszktpzgrkicszt}yorzyenpsk_cdFAUjT_vdeusy^N`fa\\]`TFNI@MSK?7<TfUFE@=IUD>SWORVZYA@KCDhY7AB;:BKamk`VYjrjqocevn[begrxu]bpmVMJTY`dhhWTUR=c\\MAOaCITNRWRX]ZXWW[a]aWPZ]YS^dWSV\\[UaaWeljmqglnvxqxrizƥwupwyrgz~t}rxu}z~}}qnVbVMC;@EGHIB>AMKORRPMKQ\\dfigafjgcSSp~txyrlmyzq}wyxеt~~{wnzvdty{zzrtltw{zs}}t}zyzp||xsr~kqp|yjimv}|nkzyohecfrnljecpd\\_bRbucaQYvNc_lnqQSb^]ZTR`pbROc`TNWbTEOVXLrug^qbbcaTVe`WZXXTdXXfe`]hdjbafcdmpam{kdjieZjneberhbgehjddV\\`^qhfh[dpwsnnpk[dttmcglmnnuoddux]LZeig\\_^QT_`RS]YUTXYX\\[db`qwmetzokmsuecffinjl|lejxxwxypv~qvufkbXimni\\hqu{qruu~{xtxrtstvzz~yspoxtrvvurr{u^_kbbiddeaot||jf{ppw}xmsuu~yqzpdrtwuie]]hinot|ws|v~x{pvzukjhszwulnqzvy~vq{x}{vyru~zxsyytpo}x~yxvxu~wvv}wyor{v|xwsw~~zxwswut{js}uzr}{~x~}y~wz}tu~|{}~}nizrw~znrs}rmx{|y{{~yvz}u|z|||z{}yu~vsv{krseSTTW\\OKOMHKPIELfnY_m^NSVPOU_hbXWZWZcdXT_a_`^\\[\\aikjmolkheeeddaddba]UKJUfd^fpl^WWZ^hqj^]egfhc]bc]^^cki_c}}kllgkiikmoljomijd_foqotz~y}{ks|zwvtssuvuwxrlt{rozqsnytzyyv}uy||{z{z}z{x{vwwxux{vuxpz~zljbeoyĿ|yq~yzu{t{pxvUpp|lxvrgzhcvv~}pyou}qq{|whg~xjr}u~xvurqtotx|j~r}w}xyrnxnzvz}{{zwv~yutnz|oknpyhsm|jqiidutnxujoxyaipuj_^]AE[lXclfenot]L^b][]bTAIE:HSKA59SbQFF:APT@EZQHKShR6@I<OgC7?@>9PTbd[Rayule\\^jb[bbenvuwf\\nzjSGF^VfgedLTYSQdRQC]WDPNKSIPXXPTVY]\\YUUSe^SSaSKO^XJWdXXifdfmemqyujynf}ĵ|rz|~k_~u~{iskuvwwy{i_d`I:=DNTVU[_eeab[ZZQEFINX`iwymdZ\\szmw{|ss}|lq}|Ƕ{ƚźѬq~uoj}keyuvyww~|nouxyuqyzm|}~v}zvkx}y}}rqjl~whihlziefjtyiajqpd^\\\\iijeZace\\W`Vet]]VTxPY_ehkNX`VX[PLYf^TKZfVLY^GGJVUNvzq`]ka`cZQXbXQXZOS`VY``X[aaf]_a]aihYtv`hhkl^ijge`mg`gbilc_Y[_ayijhcjnqompqj`msqhbmrsxurnin{qZ[kpog`fe[`i_Wcf^\\Y^Y\\_Yeafwuol{{jmnqtd^_`chbfzte_gttvyvq{wlu}tii[Wiqld]jvvyqtut}yu}pssswyw~}z|ocorottsssx{tmstimtoonkwz}qjz~wuu}v~xuuvqeqqqpkh]Zjmplpuryzv|~ux|kmpy{vynnv}y|z{~{z{{z}~~z~tryx~wrv{z{x~~us{z|xyzzu~yu{stxyz}{tx}z}|s{}uyx~{~yx|wy~~|wdzw||zzxyvpv|{w|{}~{}xwtx{{xytzzlqrbQRVXXLJMKIKMFBQsxaPahSMRQMOXbi\\WXYVZd_RW`\\]_\\ZXZahijmnlljgeeeeabca]TMHN^f^`mk]SQRZenla\\_dhgf`cdYY_]gjb_kyplkcdjlmmmmkimlfjgaionlt}{ykvy{xvsrrttruxon{~xwsxjozpzxyty}~xz~u}~zwtt~zu~sqorx}ws{}nzorwwoõð}}vu~otlryyxtm[irµ{}ue||ytr}vxq{}xu}|enrwzt||nvm~uem~cm|y{~}yvpgyxxwtvi{lp{|wvxyumxtt~}wk|ssxw{ozwru|xpo|wzgtox~~z|xxwuoy|qqui{{qmgq~{xgqiyo|ofjetpjsnfjqx_hpwj_]V=Lal]jfhbkmo]I[^XX\\bWAEA5CSMB15U`KGG>IWS<JXLCBQoE/BG>[Y98@B=H\\U]YUl~jSOZYXZilcplksk[e|y^N8P]\\jecXEUa\\^\\RTPbQKRGMJFOQVNPYY[VOVTYhVMVUFI[YMM_`Y`cb\\jejlwquv^m\\z}}|rztns]}tx|s~rnyuftvmrzv{{{f~lNIHFKZ`^ZYXZTXRPNMLGGGFC><DKNMUjxtcz}~mtekt{ũsq¯ĺѩo~~qop~gk{qt|vzzrnruxxqpv}vg~}twwrqyvzol|tuw|mkij{wffacvkfdefrh]afhda]UafggRX^g^XY\\ktYX][y[U^]ecH[\\LUYHFUZVTMMg\\JZ[CHGUQSxrlU\\ea^dQM\\]PNUYOP[VUX]SY]_aZ^[U_ga\\vjXhajp`gfgf\\ghbj`jkcZY^]bxfidiohikmtrgfpophjsrx~upoox|l`htvrhgmkionehohheab`e^^hakytrwyilmpwgZWX^c]ewj\\]gprtrqtthq|snnWVirgb_k|xyuutu|yv~osusyxyzv}mbrqovtsqt|wv|}wqy}wvts{{}to}~x}|}u}uskuropjlm`boq~wmrpl|}y~wqxxx|yxy{{}|~|}}z|vvx~uw|}{zt}}}z{~y{o~v~zvysu{stxs~zt~wu~|~}{fty~~}~wv}~z{}x{z|yq~wy}}}y{kqt^OTXZVKGNKJLJ@E^znUQe^OMOLNOYggWVXVTZdYO]_UW[YUUWbfegkmmljgeeedcff`YRMKYc\\Zgl^PLOV`ij`Z]aefb_abXV^[_lh^_kpkhdafilljjkkehmfjidjnmjty}wlyw|}xrttpnqyxmt{y{wkst|w~x~ywu|vy~ynnmhzw~~uuligqrxrl|tpfugjnlp~|zqryxzgpjmoxs{r}{uam|¸}ro^usu{{uoz|sx}w|vnwxtwo}lrpqnskqsmjzvry|y}vzw|~svz|m`rtyryx}lzqu}xsxzwm{|t||qt{itp|}p|yhzzpmn}tqnny}tbllw{s{urtwueq|mizcx||vubo{|vvjrfpuzrajeoqjpmbfnu]gnuh__T9Qekapdegikj[HZ\\UVX_ZCB=3ATQD.:Y\\FIK?P\\R9IQI=>Zj8-CA@]G49AAEX\\WVXkzrviP<USK`pvkpsajh[eseYC;a^ck[^MEWj]aUPW]^PWPKPBILP\\MO\\USWN^PcbNOSHKS\\OMXa\\Zc\\[Zifirzh{eXiWtusxswzwgw}sw{nwx{lvo{jxznmyjywq\\bdRG_mbZZVPJLPX]ejgcceda_XPMPZkneYszwegkt}wj¾é¶Ω{}wm|}trlt|xvy~}yx{iquutysqw}obrzjt~~wunmu{swqvotzpxmvkhwph{ydeW\\jqcig`edYZ^]^`]SXcchWN]g^_SVmzZMYgudY\\Y_[G^UCRTABOPLONEb`KYYMGIPOYxjcOX_a^eLJa\\MLUVSMVXOR]NVX^\\W]WQ_c_ds]Wi^bmbacgfZdhcm_gcaY]e[]oijajrfhgmztehoqnhoqoz|trrtzykgouvrlnqruuqmrsnrnjjjiaglfovpt~vlnorwm]RU]^\\hq]Z`ekoplmwuhlvnqs\\[ntgecrxzxvtx~yvqwxs{w{xu|qmyvv{yvx|{u|yx}zzy{{w|vn~xx}vvsqp{tpvkmtinuw~wxol|~y~z}x{|{}z}~|~~}}w|uw{yy~~z{|{}|{~zrq{u{mtrpuk{{|yq{{~~}~yjq}~z}|}}y{w}{qvx~jptXMX\\ZTHCMMLNH=NjvbOUgVNMLMOO[i_QUWQO]aQQ`ZQVZUPQXabbfjmmmjhfgeddlk\\[\\KKa`T_naPKLU^ckeVWaa`a`_`UO^a\\hm`Y^gpj``bejmhefhjabnffjfjmkiu|uvtkp|}}uz|qmsqhiqxriw|}rqzy|x~{xvv|{w~somhdvv|~{toiccvrsidylfdn`fyzidt~yxx~v|{vppspp`kgddu|m~t}|}rwȿ}Ǵwqlj^ohnzz{rqtv}yyzw|voyx~zgylrp~{wb~uyvoiv~zs}wzuvo|w||~qw|}~r}{{vxh]ls}qnoxszov|yqw~~u|yq}{crjwpk{qc|whhj{nsjl}k^chvwjt~pfktzw_j|naxz~cqz{wdn}wxrmwflyzv]iekujhpbcos^elqf^aX9Rhjbtdfgdmd]PXZSUSXZJB;/?YWD4L^XCMPCWeQ5EMH:AcZ01D:E[@6:>H[WSTSbo`msO7KcNb}vtkzfajU]prYQ9LkcfcRZHE]nV\\KK]\\WRaSUO<KKZ\\BQWLR[\\WXjVNOFGYXTQQX_XZ[ZW_el_zujTfgg}won{}o|v{eq{rww{{~xnunyvu|phuzpyztzyupddmmVLNIILN[flsuwx}~zl]TVci[Seyqoj_rjt|wvwҾ¼¢tprq}}~v{x~uznguzrq}tovzj`nwiv~}sosqut}r{y|wx}sk|nmkcdpj||ceNS\\vdfjf_^WSXZYWYUR]bdcQSc]aYRgxdEQllg_ZWZRH^O?PO=AKHEHNEYbMWW\\FKLM^u^VNWZa_`KGc]JHTTWLSYNP]ISV[YU\\UQ__`ijVWh\\\\ibYcfd[_dcj^c]`YbkW[kql^krfifo{qbhqujfnlnyutvuwxslnqstqnoqvyxrquvxvstnmjiomjqtns}{rnpqtytbSX`^bnfQYfgjlmkn|tklohryihqrojix}xzzvsz{wvq}|tzywu{{{|}}|{y}}zz{xvyyrr}xlyyvy~v~wswr{vqyruyt{z~|ymo~z}|}~~xz~t}{|sx~zr~}~zx|wxy|x|~yxsnvvwgmvnphqw{xqy}}|}}z|pt{~~|zw}|s||y|hnpSR_[WPEAKNNPE@XojYM[fOMLLLMRabRLUUKQb]NV\\SRZXMKOYa_`eimnljgdefcfrp[]`NR`YUfiUKMS]]cm`W]`_[\\acYOWc^iq`SZ^jrc^bddgieabfi^`ncbkffhfeuxmoleozyvpxuihpjaipojiw}~upx~z}zvuxzzx|wmo|{z{}~opmcjznmgfqgb^dWbtugex||w}vpzqrtornogi^hfa]svfvù|ɶrf~lh[scgx|~wmjxoqnmt{u{xgvqsz}ldyuw}ĩ}z~zm~~~wjpz~~~j~nssqvxzhtuxt~yw{x}|hcmstjrvops}zwzzn|slvzwaifrhixi`u_eqwmyfp{uc\\\\ftn{fpzkZdtrz_hzyqYnuf{pvxspnt~pshk{|{xZggjyl[mb^qr^egoh_a`?Rhj_wjfkck^c\\X]RWSQYTMC/Aa^I?^aZJOVR^lO2CLF<G`M/7DANYE<?@UaKRLYg_[t`BDcei~tmjpv]j[Og}YYH;[saeUTWDGjjQZAP`SQWg\\]I7QUaQ=TRG[[`OkeHRJAWWXTVXY[YYUZ[afgbyojSxf}|~}nsstvnmwhmy~ptzsrer}smq~m{~||}yor{usho|eNTXIIJMOMZcnw||}xi]^cb\\cpxdeUQ|~x{su{pͽmĽȳxhs{||tklqrsmswhbottyv|wwx}uxwseubjZUrnzdcQMTikifg`\\YTY[XVWVNS]ag\\O^]\\^QcmhJNfgf_WTVNJ]L@PL;?GEAAMGP]NUUdHIIPbnUOQRT^`XKGf]GGTVYNTWLM^JUTW\\WYRQ\\[bgaWYd^\\b_[fd]YZbcc\\^Y_X`iX[mrh^kohkgovlafruffmgqztyxruulinpoonlnrvyvqux|vvvpnjornotumnwunmpsvxshY]eblr[K_kjkklkn{~vqoljsxqrwtqop||{|{ztzwwzvwz}x{w}xvtssoquk~pyox|s~~v|y}vs{y}uqyz|z|}}~|vjs~~xwzxuw|~xq||umw}sj~tzzvwyx}||{~}{x~zwrxxwgl|vmeoz~}xwy~~{yzzz}~|}{y~z{}vhmlQ\\aYULBAHPMLBHcneSOc^NMKIINZcVPPRQHWdVSZTOSWSIKQZ][^chmmigecfhceuq[``SY][[e`POTX^_hgY\\`^^\\^e^QY`]dtdSTVcwh\\a`bdedb_`ef\\_ma_hfedcdsuiihbnyvoiw{iagi`_hgdejwz}w~{uz|{~}zyxr}|}}}|{yv{|wz|swwko|kjlo{mjd[[Wguxot|x~x}xx|}zuol}{vp~qltosjg`kfhZuy`oŲ|ŵzZuloa|_bv}wrgzsdufl}{lvur|s|ʰw{}lyx}zim|w}y}xfnlmnhmrt_uzy{{v|{||zkknuyjwykso}xw}ugxlf}qxgabdkbkr^bk]kyum{`vunb[Xergwglvh~T_vi}^gq~wsYct}nortvp}ptyowmmv~XdmmynUobYtr_g`kibckKQdd]}qeofh]g^`iSXYMS_\\M=Vf]WLlbaYPW^blK:FIGEJ[F4>DNPZRBDK_VIQK]`ZaiTQ_cjrn]`f{cbdOUrZYXHChq\\]K[O@Qt\\T_?YYKSZo^^F4__^MERNM_X\\XqS>TGN`TZWWXWVZVZY[_i_kqnf]h~{}zs{pi{s~skn`~z|{pey}yvlgvtuspflt{wnsqqty{ohrg^ft_fRV[][YX]bmw{vphlqld[KKT]l~lg\\DXr|VWy}{uv~muПrǴ{˫ȿet~~vptvx~ootwqjrsvzv}sz_yZiTQrnyf_^LOWmgfe^^_YX^[[]ZPPTX[`]Y][[SdgdZQ`b__VRQNNUMFRI:ABB@;IMJXMOPcNFFTefROVLN\\bTMJi]IIQYYSVWKNbLUSR`ZWOQZ\\`c]Y[``[\\`aqeWXY_ea^[X[U]eb]qj^^jjgjgnqf]`pscejfrxsvnrqgemojkilkowvsosyxwwsmkrqouyzomsqmkmorrondejhsoSQiqmilmjo|~xvunmvxxxxusqv~z}y~ut~twyttw~~}zxyyvvrtqqvjyquz}tyzsztvsq{{~vsuzyz{{|xmdwzvlqtsnozz|trzlnuxojrwvwx{vy{~}{{{|zz}||}~}~{~~z}}xt{{lq}wfjxw~|t~{{}||}~~~|zs~jli[b^XSJ@BKRMBASfnbLXgQMMJHHT^VPQTQJM`]PWYMLUULFKS\\[Y]bhomhdcegfbhxqaedVW_]_e^WXYZcnk]X^`^]\\fdRUc^^piSSSXrq]_`^beca_^adc[^mb^geecdcmpgeb`pyuldxq\\alaW`ic_cluyzlx~oxyvwv}ozw|||{|{svu}{w~vx}rtxvxqrodbiw{~|}{}~}p|xz}wzy{~~~{zwwvwl}{|uwokvsyzbfwjjc|hyǰ{}Xoin~_Zu}wvl~_hr|~t~yvƱw{qxr~|~|~|pnztsxqzhclemeepnc}y{}|ynos~~l}gvm~wxqb~qe]|nw^__dc\\liRq_cp}tmw_xzmlaWWfpesghyd~~RXwc]fizus[\\wtwmtrzrouwupwxmrW^uqyrYobWptehZfjdeoTO_`[vdrid\\g]owX__OWjeYZrb\\iaq`hhWU^klNHFAIQNSE:D@PLZX=FZ_NMOWW\\_^b^c_`r_WP[swXdYNcwQ_WJNsbYPN[EB^oOd]H_PMYbtYZC9gcWTQPKTcUZchDAWG\\Z]\\ZWWVSYT_X[]hdjojeon|}usu~b}y}y{kifv}Sewzzilvtsc`j{}skoopi|~p~zstxr||u{GDOW^[PFFNWdY[PHKPQNNJGO\\f[VH>yz^;@^zx{p||nuɸ|k}yyx||lozvo~w{s~_|r\\iSUmmv|j[cSJRhahe[\\i_P`]ZfaRQGJV[hZW_TTah^fW\\_X^VQONQJMMRH8BF<??@UISQNLcVHDXh^RPWMMWaVKPkZMJOYYYWWIVeNWRQ_^UMQX\\]^\\Y\\]a[S`dseSXX]e_`XWYSZcd_p`Y]bcghbjj`YYlobccctsrumqofcmnhedljmxurnq{|xyumkqqox}wmlmljkmonltpjoqsmZ[mtqhmmio}zwzumpyxxyxttsv~z{{xvn{{lty{|ssu}~|z~}~x}qypzvvw|swynutqno|~~truvzv}zwvwwqg`xszmgorpip{xt{z{{vxruqgpusjjpuswy|tz}~{yyzwx{~ysz}}s{~~}~~|w|zw}~|~|z|zt{pxsgzv~}swx{}~}~uq~z}}z{~yskmgha\\WRH?ISSJ:D^dkTMfcOKJHFLZ\\QNQSNJUcXPXTJMTQHFLT[XV\\agmjfcdddcajvpioaTP`^`f`W]^`kpaXX[^^^dfTQ^aZgjYRPPhsc]]\\^`cb`__`db[[hfZfcdcbbgkgb_`ovrf_x~fUcjUTac]\\cnpusiz~rvstzy}vtvuw{{|{y{{s}|vt{{{|~~w}zxxxzv{ux~|uv{|ny|{ywwxrrzy~yvx~t~zovup|onpu{buwguy|źigjyaXt}wys|e~n{zzr}{zxyyqztnslvi^zj`kadqps{|~{zyypsyn~|g{xk}tvn_{m_ZzvlsY\\bbe_fcMwbkq|qopavnivbNWfppqif{d~USww_\\fiuvr]Wwylyvupzpo}vtwln|Z]~txu\\nbVgtnhUcldfmVP^b]yesjd]i`}_icSerfhw^cwxq^lxcVVuoTRF9FYPDD@M;LJYQ.Ng[MLRWVb`\\ajiUdlWIKgve[]VVph[f^M_pUVNSTEGj`WpUV_LR`npVU;IifLVQMOXaT\\h[BKWKgWa\\ZXXXRYUbY[^injpih{qw|nyuuausmfis|{]Qq{t}snut{m_cr~{{}hjkloi}}p{~trtr~zv{rwC@SQLJD?AGJXmkVEHOYZTNLPZ[^[JWyR>8Omsqwxo~s{wż{w}{zgv{~}x||k}v[bU^jkzti__[IUf\\fdZWghLb_WedTSM>NSccQ`TRWk]g^\\^Z\\WQMMRFIRRK8AO=>H?VLRPONbZHCXgXUSPPKQ^[INnYQMNY[]WWGadQYRR[_ULQX]\\[YY_[a\\I`dphRVX\\h_`XYVRZac_jcYYZ]kf\\gc]RRejba[_rlntinmccjjg`bkhmysplo{zwytllonp{|oinlijknllrtrowwjegnzvgjlio{zw|vlpzywyzttts}zwxt{wkpxfixw|woxqp{|}~}{z~{z}yvwy|vx|zp}uloq{wsvu|xsyzvtrpmc_w{qqbbmqjes}xstoztsxv}qwtw}mhrrrkl~ruryzr{{~}~}yxzwy}yzqp{|wq||{{~{}~{~wyv|~~vw}{zzwyysy{}wy|v{~wxz~}svwzyx|qls~y}~}yx}~}zxvmkf_]ZVSJBS_REAMYdeLVj[KJIFFT\\QHOMMKNa_OSVKKSRJEFOUUQTZchgdabdcbacnvplp_SZd_bia]eghlhYWZ[]_ci]N\\e^aj^OMN]qiXY\\\\^^\\]_abbcaZ[fcVbaaabaafd\\]dnqj]]wrYVb[KXbYRZfnlnjfwvtzsmmyykosrtyxxu~ysyzwx{ttxx||~}~~vihqslktz}}||pqtvtqmnifuz~qx{|s}{osxvs~zmzuu}q}óypijYsy}xxx|}|uyz~fipptdsj[jggnx}}s{v~r~xix}}yjzqo}l]w~kVXymmlOZk_kd]dUnforwosjdpgt{]KUdu|unil[Qmue~]eqlvq`Pn{hz~~wmsmo{z|zykf~a\\twwbmcWautlO^qdgnZT`h`}etkjbbim|gaxqk|frsbsnWSzt]YI8B\\Q9@QZ<NLZD/WcQT^UV]g_\\bn_NhfNIbiiZTWZauvecseRmeNVQVMGPi[mlPbWJ[hrkTN@UgdGRTQUZ^VbcRNXUYdXbYWY]TUUZeW^dqxileopmz}txyjryou~hrmpakpy~{~qF\\tn}~|tu|q|adqttu}kedhlfw~stsllny{xy|{sl|nWXb_UMJKQPOYai^WZUVZYVcrtihikqcLIEZpvtvx~wwqyª}t|z|vd}}uvxwe\\\\k`dupe^dYHVeY^aWP\\nYdeTcf]WVCDL]hQX^RPj]^d_Y[]XTMKRD=PQR:@WR>SRNVTRRZ``JJZdTYWLSKL\\\\JIrZTONY][VUI_lW\\RT]^ULQW][WUZeZ`\\I`doiOVY^ma_[\\RR]`c\\`[UUU[iaWbcWKQch_ZR^lgkwkbki`dhedbejhpysmir{txyqlkkkp}srtnkmmmjkqsutuqiiknxukiiinxtr~wkv~{yy|urvsy}wtswsnmocesptpfo}nhtxxx{}~||y~}|}}}ox}|~}|tzxtzxvtrroabuts{iY^nqigxvytp{mjypmtqsy}vrxw{ylnvqsqrvwt|{pyzy}~~}xy|tywu{~}z{qr{rvst|y~}~xxy}{xx|{{{wrz}ztu{|zvssvvsvv{qvyz|z{~wuxuyy}~{u{kel{{wx|~{s~}}}tswwoh]Y]XTTNI`hRAMOXhXIbeQKKIDKYUDEOJEI]dQLWNCOZPC@GSVNMPXeh`\\[`ec``fotnpm\\Vagbcicbjfgj_Y[\\[]fldSVdd^ddQJMWkpbYZ\\]]][[]dfedaZZc_S^__`b`]b`V[hnldVbyfOY`LH^_OO^jkilflsqv|wkgls|thmnoqsvzmpwkttsstsstv~z}wwuyoc]goidluxyqr{smlnpmcb_^l}}{xoy|x}zqusxvp|pŷ|pwnyZm{wzlhxmwxvopbnpnxrrr~|w~}tkvxw{hvmfv{hYoviSTw{fmbL[oVl_bl\\fjkprrsehmk|oVSTfwxurlTe~ti|e\\zltrdMh{euzzmmgoyt{m_wdZvwzfneY]txtKWtejp]Yhgatfvuk]Wu~gqns}v}uotZRwtd`T<@[O3CchKVW\\;D^SGfmX\\]b^\\bhOOkcJdqX]OMU`gpscocQr[HUVTKKWegvbZ`OR`gjbSOF^e]GN\\\\X\\ZXeZPZYT^bb[VT[`PWQ^cUehq|hiay|uw{ulrp}fewsmvh||tcrbz|~p{cJc|pr~yr}i`xrlotr^bmhhj~xlofinquytojp|pkifkkc^[^bacdgnoqg\\X_dehlia[XbzlZW\\gzbjqtzzu||kzokt{½ŷy}r|xpdzwtrs|tjYbpY`pkf\\hbIXeVY^TLYafhkUVieZZKDIZhRTa[NfbSaeYVcYWTLPJ:HPYD=WkKKl[X_\\TjcbLYY_WZXOOLJX^RCq\\XQK\\`WRRR]p^aSS`_WLRV^WQQ\\iY_VL`bj_PZ[frd__]O\\d_cYXURNS^fZWa_NLU^d]TO`gcdhcYgg]dfbdfgiktwrjju|pyznlkgfpurwplpomilqrtrlmjjlntqmgfgktll}vkz}zy~wrxwyzuwsrrnl`boklkaiykeosstwy}y{uz|~~tvy~~xsuzsflxnwsa^fqolp}srootgivojppqxtpvy|tmt{x{vv}xy|}txpw{z}y{zz{{wn{nxxrz}|}{}pt}os{uyy{z{|{ws|{{ytsyz~w}vl{|~~trtv{ypnoqrrr~z{}~nxvxz}~~}{zw~y~|wxtyuz{y}{w}|uxhdhw{uwy}r|}}znnuyn^U\\`X[_TQjhGENP]fNOfZMJIJJSTIAILDEUdWHSTEFVTEABJRPKOT\\daYVX^ca_bknnmsi_^bedekgdjfdf__c_^_hn]U[ee^c\\LKUenhc^[^_^`aabgigea[[b]QY[^_bbZ]_T[ljg_SjyZIXXELcYHRcjhijfnnmuzr`cjlmknnnoov|igyufllmnopppu{|vy|{}~zxpq}{qkgc\\ahidhqttmev|fcejg]YWXdxvpy~~}~z~z|upwxcwykuw{~rr|qrsntrsmswu~mx~|xp}{|swgtnepteWfnfOUtsahXF[gPlYtnbsenmoquk_hnouide^vsx~]\\wvlzgT{pmvgNazbkzxnkbnyntsb}riZ~wwzine^YkyzMOtfls`fph`l|k|}dUXo}o~|t|zZRtnbd_@@VO6SnjX_dYE\\\\GKqnaZW_ZZa[ETl]U~_HVLQ\\ieknd|URpOEXYNJNZgqrgaPO[V]\\YSOIg^VJNahY]\\]aPR[VWX`eWQVa^NTV_aXgbo{iidw~gnuuzrupetugvyWcm_gmpxsuvxZ_plzx|{xrqXmwqgnraZsmkf|{krbcooxkcjq~nhqe]jgdh`]_]\\\\\\[[a`WS\\bc`YWZZZukYQLbiVZpwv}orz~|ljuplx}mvñ}zu~st{{{z~gm|~|{}o~rrin{pkXfsU^hie[chHYh]R\\NK`Vair`Mci^ZLKG\\dYSZdWagRYg^SjaVUTJPBHLXSEPxiGso[fkZnpbNbSWZVZVHMKS[VAm`^RG`cSOR]\\naj[L_`YPWTbVKP\\iZ]PK^^dUX`\\kqc_`[TehdbZZUMIX`^U[`WKORYaXLK`b[[bZUf`Zda^abflooqrlnqvwq|xklidbnpuzpnsrplnrrspgimmklmmndcdkqfhzvn{}zx}zty||~x|tuxomcdmijidjuidjotvtszysw|l|t|~z~}~v}zz{qx{n~jdoptrr|}|~spmmm`hpjhkpqwso}}}uv|~z}}rwwohxzx|zwttywuyy}vjxny|tyuy~svqqz{y|||yx}wqt|}wywouy~u||wi{||rvx~v~~~yznlmsrrpy}tv|zkuw{|~~}xw|wy~{~ww{yw{|yuw|ww~}zxu|w{vvebes~{rv~y|xytqsx|hZXdd`eaOXn[>JRT`[H]fNLMINPSG@FJDER`\\JKWJDPSD?CEIMMNSY^^XURW^a__dllirwhcacddfmkekigebcdabbik][\\dbafVMS^khgd[]___adeifihd`[[d]RUX^acbXV^V[phb`YllOISPDOdSDZhecihfnnlqui[bhkqflmkmrrsvkfprg`behjklmrxwur{{uy|}wwnfxt_h`VacgdclnmmZg}hU`hbXXZZcwyw|zz{y|z}ry{ast{~xu{wjzod{h||{t}{}|qskqwnip}ze[aidP]pwlabMA[`PkZfhginttqreYhssvzzuwvveXnwkunOuvj{pT\\yh_jol\\jy~mlwfvnp^wsvyklbbXftyUGjensatkf^atpz]O_txpry^aui[baEATXGdtc\\hlX]gTGUtqfTX]UX^NAUgYexG?YSSmj_eifwKXeJN[UCHM^krnfPEPRKXQVQHShQVMQeq^_Z]ZMRYX`PYeVLdh^OS^^dahbsxqolmvt{pm}m{jgoyn^pfyvnQiwx}yiho|ylt~po~qztsR[ntkmmgRpxonx{jpc[gyvyebkvybrm_`i`dl\\UY\\a`_][U^d_ZWRQTZafozywr`ROdq^TY{wh}wvz|tjjmnyu{{grrqxx||np{~p{y}{f~{y}w|wy}rp~tqo{gmwni[juX^^ja][eI]jpKURRgX]iuoQXi`\\GQFda_WThe[iWQ`_OljUSZL]KLPN][MnUswgftll|eSgRQZSXZKMMSRXDiceYE_fUOTh_japiI]cVO]Q_YLK[hZVNIW[^OZc]klc^_][koh``aWIO`_UU\\WPKGHW^RFI\\ZTVXTS_VY_]]`adkljlpmkkowqr}wjkgcanz}iymotsurqrstofgtpglhlk`acmpejzsn{~}yv}ysy~~x}wy|psnionnkipsgfhluwqjqtlr{x}g|syyyx}~{zv~y}{}~~{}thk~tw{x~|ww|~xvnnkakkdfepqqvxz||x~||sos}uhd|tt~{wxvnrt~}xuzwy~yqkuqyxvuwtvwnw{y}}ywzxvtt}yyuuytsz|yk||~s{~zx{z|z}nipzvsnw}~{rs~|qtw~z}~|~u~x~yxx{tv}vp~}||{zwvww|}vtyywuuxu|yyucbap}lr}}{titw|~~_]akhgfXMbqO>SPSdTLb]GNMHSVI=AGEAP_]NHONGLRIACBCGILQUY]XQQQX`_]bfggkzwfdcbbbckidjjhfdfeaddkl`]`e_`aVVbijcji^`_acddfkkkfcaZ]b`VUZ_bcaWU^V[rh]_]i_GGMLIPcRF_ha`fdejifmp]Wegq}igkkkjtunqpdmrf^^^behhjqurrpryytxz|{{vzvgrz`a^X``ceeimrqX]wgMYeaVS\\^dz|uxt}{y}~xxt|zzy}rgcs`}ryy{~|z|vsqzupsxukcb`]YcgmkbYFD]aSji~ceimmw{rn`[ksw}}x~r\\dqjmrKl|kw|]ZwmZnqnWev{sj}xjqmrcrsurii`fW`lxZEbbqrb~fe\\[nswWLaqmz}ruxotwp\\[^JLZc\\lt[ZnqcqcRK[wyaXZWOVWE>O`\\ja8AbURzeYagi|gGZUP\\TF;GMiqocI9FMELTKSMH_aNZKVhvc\\XZXRQV^fNRbQPhqbQQeZiqjcpu|ruwq|x}]}zbizgaczsg}~pySydfnq|zlcjtw}tppwyrw]]bjzmjgTcp{pxchkRXswopnfsmcicb[]ael\\VY[beosoXZ[ZTTOOSUTUaqlZX\\YVORZ`d`XWlvcvxqonlefwsov}srthehmtuwtgqot~v}}~vp~wwzyxs{~pu~~zhymtpnmcinje_nwXY[j__[dR`ntHKZYh^Xkuq^Wha^GYEihe[Shk\\l[KXaSigSTXNgTNXN^iQZftvndt|j~k[kZTXQUUTMMSKZNeeb^F[g[UZjdeaxyP[bZN_R[YMHVeZSKFSXZPW\\age]X\\\\_qse_dbYOZdWOXZTOE@FWZMBHZTNSRJLUTY\\[[[\\fogdimjfgmuoq}tekf^_mvz|l|{lptuwtqtvspgjwtijgmh[`gqpfo{njy}zuu}xr|}|x}xxyxtotuupmqslihkvzochnhlrr}vg~yov~rsy}usxzryvu{|~~}zy}{{u}~~~|wnsxzx{|yu|}|{qoonrgdlfmrnxzvv|~z~~xlnsx}qgkos}|urstw|muuzwzzxvsos|twz~{wutv~ns~~vw}wtwy}{s||zyzwrx{zv{yw{y{~||oms~{upv{}zttwtt}zy{|}s|y~yyuvpnxwl~~~~~~|yvutxxtrtvsssrr|xxki_rmy}w}{v~tcqz||Ycilhf_UWjmLEYTW^OTaPIOLMUM>?FE@IZ_QFLNGIOMFGD@CGKORVXWSRST[`\\Ycfbfq}odeg`^`ahgeigcdgfc`bflj`_ed]`bZamniclm_]^bgfcjqnleca\\]bbYV[adcbYU_Y]sh[_afWEDGLNTbTMbb\\_a_dgabmhRZii{qgkgfkfrwnppilohd[Y_cgjlqvqrrpv|}zyz~~xyw{|mr{ddccbbcegmnqx[\\udKTeeZPbhg{{zptr|qzz}}ıx}}}|s^da\\~uh||r~}zzx}||yvwtpcU[gh^ikaXIH_bXiv{enilryzjdmno{{{baenavS_{oph[wpYwttSat~zzkwyojmrgmuslbealUVfw^E\\^sqc`cXXisuQKbudqr}uz~z{wzb^XVd]cjkrSUwwovaVL^|\\]RSRWQB;JX[jQ5KePZybXaflqaMXM[XH:>HTxqkN1:HJCMK@KSTbYYUL\\lv_VYYXXTVafRT\\NVcycOVfYl{helqtr|}t~}ddravqe[u~pi{os\\le]oilvjnjmrttxmdrur[he\\lifVZuiu^ZsNOwpgsxemg]][`RW`ahZV^\\_YfpkUhKHJKJHQTRTdmfTXWLGHJTZc_]r|]w|xtnrdjpgaivhmwvtyvyhe^npjxlnkgp~w{kw~zx{voxx}qtzyvzxzwsips}tkwjynvddcbbb`qyUT]e]``j[`ooFQXVleMkskjifd^VaGstsSWmjjrTGYd^a_SVQSmXO\\V_iWLzjptngphxq`oa^]SSNUQLOJZY]iV]KQg_^`ejae}\\]a_MbY]SKIO^ZRIDOTTOSX`a_TT[X_tp^]fc^]`^OU]UQMB=CXXI>GYPKRKCJS\\YX]]]^cmc`gmiggjwpm{rbkf]]ksxwnxqkptwytoxyroglxumkili\\eovtjx{fi{{wss{tr{yzxt|utyzysrturpmnxzob`hfimnule}|ukvxlt|~}sss{yuxvwz|~y{y}vwtloy{}}{{}}yyyvwyw}ux|yuvz|~z{wrrx|pfrmjzpynr~{|ztuty~}wolorv{|tjtpo~xyxokrtxxszy|wxzwrqx{w|z{~v~qo{mqy||soytpwxw}}z{}}|{|ux{zv}xz~}}pux~wwyz}~zzvwytzyzzyq}z{}~xyt~tpjw|hz~~yzzxxwyywtuxuvvut{v|tp_xuzrxwwx{}sav~~Zlmjgd__grhJM\\XYVMXZIKKLTTA7CC?DRYRGFLLGIMKIF@@EJOPQXWOPTUX]_YYcb`kxxebgf^]_`eggga_aif\\Zagkgace`_dheinjfbmn^Z^dhedpvqjeda^_bb[W\\dfcb[W``drgZ^ecPDCDLTWaTQf_Z`^\\ee]aj`Q_ooyzhdjdclepuooopmljp_Xadiknrvstxuv~|{yz|vx~x~ww||jmmkihachqqmy_bzfQZimfYmrm}{||qsu}y~}z~psu~|{{~yz|zeZh[hymeuv~{~}|ry}p\\WfvjZmp][RH_b\\kvskviiv{ppry|z~lj]q]ocWxrlq`vs\\yuyPZsxzkyyshnrkjwqla`cnWKbs_ES[npd\\bTV`wqMGojdrn~qws{x|zw|kdWhwXbojmOW}xtsg[N`wZVL[_VKA<LR`hF>SdSgsc[`difeQYRZH>:DHfyoi>8HKJFK;;UaZXW_EObqpWS]YWYY[bfY[YNW`ybMaf_tygljh}tbqiuwxcm~_nxo^tztourhec]Ysphnismmt~qkjY{dnrXofSuohkVVz{fr^QnRNrkej{mhbV]UTP[X[f[V`__[o}nQjGPRRPNPPPRWWRJRSPW\\dsplkvY[ov}X[bdhxt\\bnn{fixvxzrrzxnpZmtjepvjcqkm{~}pmz~|tzxyxrlwx}xrtkr|wx}zsrnho{o}puqqvn|`gVY\\batyTTa[]_imabpcN]RSrgHkrjnuhi]hnZw}|Rcvw~tQNbcd\\YVWL\\m\\R_c_g[IsjkllinfpwcwgdfcVMRWGKNZ`ViQUSOgccacpbi~d`aeMb`]QEJKW[SGCMONMMTb\\TOS[WaxhX\\hfedc^X_]WSNF;BZTF>GYLFQF>GVfYV^^abhoecilkmlmvtpwsaikb[f~strppgjosvztpwvrpioyupnjlmdlvyulzzhq|vupqzssz|}yzwr~wx}~|wwwxxutqw}ugacefiorhcw|{ritxohrz{~tvqs~|wxxw{|x|zy~w}trthnvwywxzz{z}~vyxzr{qxvv{yuuz{~|~xz|xv|krxjzv{mpwwxmklr~unkgmvux}{}vjvqlwuwsidrx{{{~~vx~~su|~{x|{z}}ojumoruv~qls{towwvz}|}~|xx|xu}x{~~{rw{{z{~~|~}zw~x{q{t|y~~|zwpyyw|yzs{uohvkv~~{zyv~{yzz{|zvvyvy{ww{u{th~|snstwz{fcdljgeedgpucHQ\\WUPOWPHLHMZN;9@>>OYMDDHLKFHLNJ>;@FJNPQXVLOVXZ\\]Y[_bfszqedea]]^`dfgdZX`ibUWahhcbbb__gnklnhbcmm]Zafhdgsupkeda__``]Y^ggcb]YabfqfX]f^NGBBKSYbTRd\\Y_\\[eaZ`bWXelqqjdbabejjopnnpmelmhjkgilmorwuvywv{wxy{zvx|z~}xw|poqxog`^httkukk}n[jnppesyt}}ts{xrzxr}}~}t³t}}x}y{sz~z}uf_jwau}xfjz}z{{q}bchtyk^rrY_UKa_`ormrqjjxy}~z~r{]p`cmYoxhz|`rtcg{zPSpry}k~xupzpqnjwsja\\ej[E`n_GRXkne`_TT\\vtmINr_fno|qmvuztzwuzsf]wyTbnnfNavvqq^Qet]RUjfQF@GQXn^IFTc]hraZ^e\\dcNaUL?8?BOylp`9KKPHGH<Sl_QK_T;Z`saYY_YV[ZfbfXaXLVetdNhlcxuhumewffnut~|dvywkksqwqeb[Rct`gywmjktvff_vasrss`Koufo_Wq}~ho]SgXOhfge}ph^Y^WQPQTVe\\Ua``afu\\iOcTJNPONOLJHEAFMOQY`]Z\\f[F`fTZZd|pWqwjzynizt|qlo|ii]M_}|hqsibcrv{}p~~v}z|otxwo|wuhw{|{qwpm~lcizuzzwppmhoxo~|px~rsosl[hKT^]artRWcS]_mrgbrU[`M^y_Pkrolle[t|fx|gp~u]dl]bZSWXR^j_Vaf`dUJoklehimfj|fzrm`q_SM[CJMYaVaSI[Sbebecqfj~m`bkMYe^XAJOO[UHAHNKLEMcVISSZVcu]W[hgedeeea\\YRPL:?XSD;EYKEOF@E\\iWY_`cehokghkmmprsvutr`fmjaf|wuopmbflqu{sptpoqjnzursmmkkppxtozwpxzttmnxrt|yyyxuyto{}|y|{x}zyzz|us|phbfihpsmioz}plpsulpxz~tvrpz}zxyytz|w{yv}~w{wrunoxyf|y{ruyy{{vywu|o|zowwvzwrtyy{||xxxxyy~xs}vuv}plyrxjioq|ulj`gxyzytlzrlttvrbfs|~ww}~yz|~{x}z|||y~~~~mhu|mfnqo~qknxtpuzxx~|z~|||xx~|xv}yxvyy~vwl}{{~~|~~yv}y{tttzywx~yurtxu~~z|ty~vohwvu~}{t{u~}z|{|~{vwzvz~xz{{zqv~yonvxx}zfxxygfdeecdjtnXJQWUQORULKIIRYF8=?;DTSDBDHLJDGNPF8:BHJLMPWXPRZ][XTUY]bourkffa\\]^^`cfeb[[bh_SV`eb^aa][^glklmd_dmj]\\begdlwrrpdbbb`aa_]`hfbb]ZcbemdX]aYPIAAISZf\\U^ZZ\\YZ_ZWa`TYfmog`^[[`enolipopnnpqpsrnqrqpuwvuvuuvr{{{|{xwwy{~|ywysxz{{rminzzq~ws~mtttvly{}xwslz{s|{rzy{~w||~uï}}oy~s|{x}pkmpzr~{squ~}{{~|ywyvjqrw|ujsn\\kXJ`^bpqrvwrlv}~}{~ufqianchwgtemug_}SRnlysyyou|xwvwrqtjvugb[jadH\\g[IOVjkh~Z[XS_ion?Wf\\iaxw|mgzvrvqw}ss~ygerUhssZVq{xumw`\\rw`Xjq]J@KVWnm^FDRj_hm[]^_VdRWcKC97<HjpjvGBPNIJND]pdPCSgLL]]l[dd_XXd^icbYaYRZnmgSqrky}n~qvqnvtm|~fv~|s}vcccR\\wbwggfm~{^pe{ypiv}[Oinike[k{rnZbedYhVegukj[W_YSOMJLk_Sbb^dd{fgUdWFKLMMMMMLIFIKORUY]\\`p|dJOrn_qphvbypgurfj}l{jiv{`dPV\\y{{mnmbqz`{{v~|ut~xzzltyy{~{hzuxks{}ywwmref|qa\\j~uq~vvruojtxwypy{rjl{~Y_bH]bVbnpL]`M]cq{jfpRg`Nj}d^lrsn}a`v[yv}mo\\aWSYX\\Yf`]fbb^MPkgj`dgkhp_{|temgbL\\GFJSaSXVE^[\\kbmookn{u^diOYjdWLMUIYUH;CMJH>KaLKTPWOckRWVhggefjoc][QQS@BYVG8EUJDNICMci[Z_fiklmommqqqvvov{spadppggyzwpri_flqt{totkksnqyrsurnmqqptsq{wr}wotknxswvswvrquojv~xu{{|~}{z~ur}zpkflmiprnmqx|rptqqquxwuwwpt~{xxzvz|wzyv~xvyyxorvtwx~cx~trlsvxwuxsuyqzwrywvztmsxuw|~|ywwstz|z}|zzv~wk}|rvllpox{ujdcts}zwqsuquvxrgqxzxw{~}{{}|x|zy~~ztx}zymdlwj\\itnvhkwxqwzxw~|~|uzx{{~ww}wtvytxyort{rru|~~yzz|xz|~}~yw|{yzwxvz|xu~ywxuxu~~xy}~sp~}v||ov~~~wz|y|{y~~zz~x}u}mp{{{tt~z{gedfb`fnpbPRSTRPOQSPOGJUUC<<=CLOECCBHQHAJOH96AIIGGJR[ZTT[[VSPU\\_grnhgea\\Y\\^^`beb^ZZbf\\QV_a\\\\`_[Y]fmlmj`]eni]_cdedowqypcbdebbbacfifbb^^fdejb[_^ZWM@AJS\\icVZXXXWZYTZbZR\\ilg_ZVSW]ctldpwoqtqqrrwytwwqryxstsssu}r||{yvuvuwz{~|zvvs|zwurw|xz~|z~urj{znx~wy{xu~szw}u|}w{vz|v{pzx~y}tw{x|}xs{~}ww{}~}|}{x}vwx{|qlnetfT^^font}|xls}}yxv}{|{yz}tvvqemieulmhhve\\XRkcwgqvtr{yyuutqxkrwaf_nWfJZaXINWhgnxR[\\N[are:pv\\_j^p`nxouqmswprzgkjcoyuTevp|snufs}u^fyfMKF_`gwkV=P_jXceV_]UVZUgQG@7>A`pcs\\7XSGGYJRq]HFNgdV\\V^khnhZWagbgaY[]]_jqpk^yr|tsgdw|q{vfntandfth~Tg|tly|kSaggiim\\iyy{s\\wjqg_PkjlmhVXaZSOH>DpVKYaabdi~shV]YOYYXUUYZWPICBDEFHMU]ffXYqs`irr~~^Y`cZjxglft{n\\cYildh{{mhilkh}wu|}zpp}uy|z}~otyzyvu|{cz~xxmrynzskhh[fweXWm{wsvzxvpw{y|vpzxoen~wTc\\NjeU`opQgYM`i~}nrcTp\\Uzhjotvxzegywn~v~fl`TPXZ\\Td`ci^dVGVjciXefs~jzW}wokpkT]RFFJ[WPZD[g[khlqkqkw{ZfeQbleYUV^GWTA8CHIF?O[ELPPTKa\\KXThhfdbln_`\\MS^ML^XG;JTJDMPMZimfadnpssrqqsvtsz|puvmfgqurpx|ysriehknq|tmskirsrvqtrronupossu{vrrjrjqvu|rnxtnoskhu}vt{}z|~~|{~tt{xqlipsmtrlsuxyuxztqsvwv}xxznn}}vu|wuxvyyw|pu|{ymn~vvy~vgvttpmwsysxwrw|usxst{wwypjrvpry|~~zxxtrsvzwxzv{}x}m}~qxsrwquztjhmxywtys}yvwxyru||~xxwz~~}{{}~y{yyy{~xsvyvngfrhZgukz{lju{sw{y{{z~|t{yvy{}{vvz~trstqvqipox|mktt{{vywx~vxz|}}yxz{{z{|z|~~v|yz}zwt~z|vww}lx~y|~{}}|zz~pu~p}||dddd]akme]VYSQROOQSXMDRYM@==>HNGAABBPSEGRI:4=HLF@DP^aVPTZUPQU^behkhfb][Y[^__`bdb]W\\gdYSW^^\\[][YZ]eljji_\\fmhaabfcdqsr{oaaegbacdgkgecb^_hfehc``^Z[UFENT\\lhYXYWSUYURZ^UR`if_[YROU[etdg{xmswtstruxtvtoqwupronqt~ywy{zxpquuwyy~zxuttzuz~|xy~~wq{p{}vxwzy}vo|}~q|~~|sp{ts~{s|~}s|{~x~vt}vvxy~~~~}w||}|}~{ywu~uqujyva\\anoowzrs{|ywv|sr~wx}}x{yyut|s}xhkiaqrk|ldqc[{bVf[tz[jsus|{zswvmynow`ignUfQZ[XHMWdlutN_[EXdvTBlUdbdpqawrmtjipslq}qcreuq}tYlnnqokuzxfartRHUYjirnfHIch]N\\ZX[UKP]fYIL=8HVidleARbG<YX>g`BBPgja]VVfsnf\\Wai]]aZP\\eim|s|yyu{ur~|~v|uj|lnq\\nwrogxd_jmu\\iptuirwnXUpdiv^OW_YQOF:MzMBO]_aabp|tW]\\Yhm^RU]\\TJDDFHHHHILQUVZdpiWYirtDSSY^]gqm}dd~ti_cdoyhquezndnu|enn~|}~tn|{x|}{y{v~uuyru{n}y`z{}zynu~yttmee_Xhn\\SVp{~v~}v|~rnxpoln{t\\f[XpiZ_vk`sXSkmwzR^w`aguvs~qhl~yz}xsk{`TKXYSSi_ff^iQH\\mdaXgp}|s}^vyqyoiebRGRT_R^FWpehihqjxhrv|WabSpkgfWXcMQP>;CEHGDLOAIPUPM]OHWSgidbbll]_ZN[jXYdZQIRSJHV^[fnpvnjqwzytpqy|yv|wuzljmrx{~{vojllkkoxkrpiqyspqtopoptnoruy{ur{mjplwtx~mozoknqjht}vsz{vz~y}zqwxupmnsrpwrk|yuyy|tpsvtr~~yz~rnx}~tqyvqtvwwz}qqvv{nk|x{zzthustopyr{y{rtxvtvwsz{txwmjrsmouwz{xwwspnpzwsxrr~{}v{t{xx|rtzwopuz{|~xv|x~~ywx{yv{x}|uwvy||{|z{yvtvuv{|wssy}wpmhlj^gwmv|pnv}wx{zyx|}uvxvw||ywww{~vqopqvkflmuym|jt}rvsqwuv|ysw{|{{}{x|{|~y}|~}}~{y}wyu}p||~~}~~y~u~~}baa``hkg`\\\\YTSQNOTWXGI]WB??ACJIDCBAHUOGNN>4:CFD=AR`hZNR]YMKTabbfhggc\\VW[]``__adaYXgp`WV[\\[[\\\\WVZ[clgbc][gkba`bf^doopwi_chf``bfklddca_ahhffea^_\\[WIJSW\\ln\\VWTPSXSQZ\\UUae]YYVQRV^klaqsmtvsrttpqqrplpwsnpllwvtwxxywslpuuwyx{vtrosv||~}uxu}xxoz|qxz~rprwrq~zv|uyy|y~x~xvst}~uz{xuwys{|y}yz|{s~{rvzrm~e]itsu|}xor}~{spsvphwrx}xvutxly|rx{hki]mqmlvhg^_xl[dVsrQeoywtz{q~zjysoscjomYf^ZRZFLS^qxsM`O<XfqHIt\\QiXuygj|~{ompdjtoforafyre{sr`mpvvhgj~xthYitbIR\\anljbZQajdNGVUYPFDYjXEPD;CQ[dgl\\XbLAOdGFlU?Jcha^OM[koeYUdl^W\\\\TR_sxz{x}zzunwus~~~sW_itm]hhzxmyoY`hblxWPXWWSPGCcI@KY]`ab`rzd`X^grbKKE?>ACDGJJJJJIJHIOSSKLVZdswuj{TVyn[^aglotpddvfca^cjiyokr\\Zv|obhzsxx}~stw~zzvxxzxsqvxmyxtk|t_{uqynx|otfbfXUgeXSUq{~upmrispmywedXdridjzcxt^cvr~xGpyjmp~{n}nhl{uvuhzaSOYZQYhdg^itONfqc[]q~~}uv~x{yqnvlWi^k_gOVrrmcdpfvjop|YaeUwlioWSb\\TJ<?EHHGFFEDHRZPNYHHUUbij\\_mj]_[Rbs^`gba[[[UXdihnnqxmrywrr}}xzzxpnrnwzqipqkjnmrqir}rmrsmpnnpmos{|vsvxklmo~r{~krykhnojjt~rqxupx|s|~wqwttplqtttwppws|}urrtsoz~x~sqvz|spvwstuuy|}qnttxnlvxy{xjqutlotw{{quwttusr}xnvtjjonlorquvvvxrkkmvtsvpq}w~}y|~z}zy}vw{zvwxzzz{|~y{~}wvxztz~z}zw}{wxwyz|||{y}vupursuwurqvw}sxqllef|utypmwyxzxyuxzwqwsu}|xxvtx~unmvvmelpstnuks}tpkpsqsu}vqqr}~|yz||}}}}xw}xy|u}w~}~~~}`]]akmea_Y[VQUSMOY^REWcQ@AACIKIFHCDNRIFJD97?D?<BTaf`SSa_PHP[d_[flga[WUX\\`aa`^^ba_bmp]VZ[ZY\\aYSV[Xcla\\^[Zgh\\Z[beYdrmotc^eid]\\bhnibcb_`bfgffg`_`YZWPTVW^hmb[YSNTZTSYZVYb`VVZTPUY_jccwwilwusrtqijnmkkqtonrklytsyxvvsojmstvxwzurpmtrx~}s}{~x}rzy{z{y}~s{xqu~wtyyv}{}w}y~u~|~z{{~zvxnp}|yswuwrqwyuttwzx|}}wxustv|ov}zox~oujbryt{|vjjy|xpkptr_otxzyurnzip~qs}ikj\\hpqfxsbZa{n[`VsjPfksztszr~lquqlcdpm`ed_U]GFRemqsOaI:XgdBVhNTiaz_uummmfr{lakb^szikztpktwoibdqtojU^pmKNX[`fa`]_dffY=BTXOE:NgVGLI<CJO^jjc^ZGITbVE^kNFZfXXPLV^fbacbrgRcpc[_dw}ty|{qdUmnulZgu|dl_icpmjXXXSYYRGRryECHP`^_b[jvigV]dnfJB?<=@CB@@@@ABEIHGIIIJRW^hrz{XMhqW`opjioj`e|~vcgbV[devkjm[`suse\\njttxt|}pw|qyttsvsqoptl|zw~miymdy~nujwnx{tp_beUUe_[XXo~{qnmetqpzzi^`qrjjtwd}hs{xyxPzzpo~zony|ikpmkw~|sxknq\\UZ]eZ\\dhie{xSVjs^\\j{{{z}zyzsxtsvv\\_qxt`eidmkppy`fi[ulkt]R^f_HAEKLFFFDDPJT\\QKQEFTVafkU^pi]``Yivchpklgecbkonqusv{pt}yxy}spsq|tksxolpoopls}qlspmrnllmpv~zutxtjmjrpy{lvxkhpojnu}}notomtvpx|{uqsqqnnrsquwnoxv|urqqqnvzu{svrsxsptwsrpv|~~srrorllqw~yzlqupjou}|uvuruvunnzsjqoihllhlmmrsruwnghmqmqtlo{{sy||~}zx~zx}}~}{{{xyz~~vruwq|z~zyxt{~xxxyxvz{{yz{tvosqqsssrruuu~zqnmlyvvomvyxyy~{uyyyqwtv~wwxuy~{olzxpinusto~upv{vnjqppsrv}vrqszz|~~y|{}}wtz~}{~z{}{xv{z~{z|~y~~}^\\_hpk_^^WXUPXWRQ`bOLeaKEFEGKMLHHDKSNGHG=:@IF>GXa^ZWZa]NIOZ\\]\\]ehb[VVUY_ceeb[[bdcfnl[UZ[X]c`RP[]Xdk^WXU^jdWTW`bYfshmo_^eibZY`ime_ba^`ceeeef`_`[[ZV]\\X_gle]ZURVYXYZZY\\]YXWXUTX\\`cdkvoflssuvtqhhklklqqlopjnuprwvutplintqtuttsrnmw~}ynxz}t{|wx}~{}w~~z{w|wusv|tz|}~}wzwz|nzvyuyy~wtqs|{||pswmo|{xovrqpo}ux~tvnsztvwwsqmlkv~rmswq|rw|u~z~wwuixxs|xskdq|y~xlglxt`bz|v|vvtkxnk}so|kkk`gmsctzdV^x|}m]ZSqdRgjp{om||qxshptkaZilhdfd]^HCRfffqQbH=VbXElZJZkt{s`{sjppjy~iagZjtgpyq~ou~zbdcgoigXUrt[CUVX]Z\\aamh`[C9CYTD>C]ZBLMCDDIVomdXLIUdafWWj`TZdZZZX]_`cfisjue_zjhoo~xuzmadvtz}^k~qou^ognb^\\]UU`\\QOdz];@DBNa_d^bnnl_afkr\\GC>>?AAAA?>=>CFIOQSSSSW^fnt}kTWqfRmta^qmVhp|ufriTbidtgbi`dikne[tozpt}nw}ry|q{syqnzqppqkqn|wvyjgyxjkp|o|iishtyz|}g^^hZWa\\d^]murmeppryyl\\kwvlgquopyz{pzcw|lwu~pbmuxphpoepx|rkjr`fX\\^_rYYeikwq]anne\\x|xy~}}jjz}}ghbfgfts{foi`tpmtkXZjfTPMNOCJIHS^KU]RFRKJVYadoSarf_cibnwinrqwljjjuwwuzyy~wy~~x}yqsw~~sov|omrplpot~plumpwmlikoxzwxwohmiqyoxxnuvljutnsv{ylnpmlrtquwxtnmlllmppottgk{ww{yppomnns{yttvmkpsopvqpsxzwt|pkqljnx|{|ptwqkqyvx{rmuuqlmwnfmlhejngihhloqrtj`dklinpkmwxqs|}}}}z{~{~|~tls{s}{vywrxzuyx|ztx{yvxzuzntrrvvrrvvut{{tnnm{wtpmvz{zzw|yzvxwwvtyyz|}ok||smq{vvr|xtvzzqnusvxwuzywtwz{{|~yxzw~~z}}zrty{{|y}{{{yx}{txx}{vvz|z~_afkkb^]^TT[^][WZ``PVfWJJJLQNLMKHJPTLGHA;EJIEKX`_\\[]`VKHNY]\\Z\\_b_\\XTTV]begdXS\\ggcflgXW[Y\\kiZOP_^Wfj[VRTel]RTY`]Zmsfkf\\_fi`WW^eg`\\b`]adddeegb_^[\\ZYa^ZafleYWWVW\\]\\ZZ\\]YY\\WTW[\\\\aenjidchimxzojggiklmrpjpojprmqvutrnkhovorsrrrrlm~~yrowyzzv|~}z|uzvs~{~{~|xz~|ssq~p{~zs{z}ux}w}i{}y{trpqspy}pkjpyxxsmqtmpzzyzjtplmp|twytyhpyquwvsmeggvwivmvkouq~}uwxxwvwoxxr~tpkblx}v~xidi}vi^sr}sw{nstkv~umz~zlhlfigvckwkS\\uuzm]SQm`[gjnydkv}orbj}mZTalmghia]IBQha^nUaHAUbTKz}PKeuw_f~{yqgwsn~g`e`zqgtyjwq|yacjgddZTjziIJY]VWVY`tobVA>BOWI<AUULFJMECE[o{dWBGctjmnf_fZdlb\\lkob_dkrkxpvxysrz~}{yfuzxjzurbf}gWcc][jjZUZswM6;>A?Pcea_grokeminkQIA>??BBBA@ABEHRVSUWX[]]ceaeUGN[}|^XzsXTsnUmoztoyoVireta\\]^_bindas{psnmuxhouzw{|s}qtnhsonoshop}{|rvteervin}nxysxaipdoxv[^Zjc[[Zte^m}yvmempsyyvYk{zneotxvw{yzt{q}vnvk}oxkbiqvr_qxfuwpcjasekq_X^[_tUWhfyrffsqrns~~~}uvvmehjeur}jwkbvtptrd[mi_]]SSIRLMceQV^SERLM[[advYbsjgjrkrxsuswyqmpuzzxx|z}|o{zps{}yxotzymosplppsqkunrxmjfiqyzvzwoiljnspwunssmjyzruvywkmpmnqqquwtqljhhjknmjlqegvwyx~skpolln{y|woxrfhmskmwpnrzzv{mlnilrzy}tuxpnvy}zt{~pmxunkmqhcjjhdilegdcfjorrdZbjidekklpvplv~}{~}~|jqvz||vyxpuwszy|rw|utvzx|nvrv{xqsywv}~tw}xopn}wspnt~xx||zyxwpvxzxok{}tnqzxtzzwxz}vrxtz||swz|vx{}{}}yz{qxxuz}yz|}poswz{x||{yxy{zzswvy{zrsy~yz~~dgihc]\\\\WS]jgY[^_]\\W\\TQPPOTTKLONNNORLHG;DLHHP[]]\\\\\\cYNGHQX][Y\\`a^XTTX^bdecZV[iiddgicVZ]ZkvaTMUaYZjgYWR\\niXOSZ_Z^rogn_Zafi`UY`aa\\Z`a]_dcdddec^_][Z\\c`[bgkbUVXT\\k\\RY[_^Z]WSWX^]^gnjdc^_eejtvocbfhjlormjqnjpolpttsrkhhptlrrppqqln{uvrq{x}}{y~vwwwvznp|zzwpu{~n}xpz{y~|}wup}ztv|w~{{i~quriowgprlrupefqutppqoorvux}|vmumgnt|swwtygpzrsuuulcfiurakp~fbt{ttzxtxxsnvwyupuvr~qol_hx|u~xhcg}wiboz}rvyqmujw~vku~ynameq_udasiSYsm{xk\\LRf`gdkpu\\iuql^hpWU^hmumha\\LBRh^Wq]^HBU_VQjHOr~vcg{ywpg{sofbfknjtvjurxecqeaaXarmXEN^ZTTTXitfWEBKSUL@=EPMJDQZ@C[r~hSHHduomsheZkayqgoyxfYimrtjxy|}n}v~yfjwu|]sqcipYaeyiA;9@DAE\\fh_crooeojlqYNIB>@@A<<@CELY_[TWZ`eebVPYVKIQhyY`rXPrldrwzutz|[owit_\\W^_]jpdcnpgsfmt~ocjlmy{|{s~pplennmosgmj}wspusdeix~gsmrquvVk|nfmtmV]Vkh_WXl]m|~xumejntyy|[j~{nemrvzzxxwnvp|}ojk}yufddloq^tpw~hY^_ayshuyfUY`YfrVVgs~sjhkyrw{}w~vstipkvs{k{k`xupssi_nj]`meWPUPShhVV^TGTJP`_cg{dcvpknxquxwytyzuqsz~{x{~|~{i{{nt~|v~xmyunpspioor|olvptxnifipx~vyynnpiorpwtprqniztuwyxnjpqlpqpswurghleklmmlmmbgtvxr~mlmljipw{soxoadrmfsqnmty{xqfrmhkx}vwx|roxz|zt|}omxumkmpgciihdhkdhdafflql`W`jgbcfjlnsoiu~}|}lpwz~zwz}{quvp{x|qv|ttvzy{nvtt{yrr{xuy~tt|vnpmxqonry~xu~~zyw}mvw{s~pky~vor}zyvzzvsz~utzwy{}tw{~xw}}zy|z{nyqn|vw{stvy}|pnpvx{y|}|zyz{{zyxstuvxxxqqx}z{~gfec`\\ZZUZhe[U[daab^WTYXVYZOLQSUTRQRNHFHMOMR]`\\Y[[_XNMMQW[`][]`a[RQW^dgf^TR\\eld`eig`[ZWavpZRR]`U_mcUSSeocUMSZ^Zbplfg`[_efYQW\\\\]^]bb[^deecdfc]]]\\]_da\\fnk_VWX[djWU_^`c`\\ZZ]\\^`fjfb``^bggorkf_agiclqojigmjjllqqopnfeinnlqppnnplp~xqzsq}zz~xurqopstzsqv~upuv}m~snsvwz}|z~zn{~v{w|ur}yx}yz}{~ylymoget}ohoidoog]btvtmmwqnu{vw}wlwlcq}ttuvzit}sru{sj`imonfesy_^swtuutswyjfxsmosllxt|omm\\ewzt{vfdd{wkll}lu|tgtkv|thlzwn[rfxgjbXohSTpnspgZKT`egbism\\eovafcsVQZbb|sa\\]POTe\\RkgZGJYTXXeGVuysxefyywkm~rrigoy{nosplvrxilsaf[dggaJE`[MRRThp_OJKX^YH6:JJGMM^Z>B`p{jHTbnspjkc]\\_uspzzp[_wxvxw}zxu{zqxhi{ur}qy~aa`khQ9@=BQ8=Nerc`hfrc`jnsk]VPJC>?CCFJKMRTUZ\\YWaknfXQMHGWtkXjqg^apbio{{z|ir~vt[]_^^`qrehjkjpyvejormc``adpxr}||wnmjciknrqihf|ojmtscegw~fqvjmtnVlolrip}lU\\XincVUs`lz~~utoddlswy~_i~unkmnqyyrsp`mpxl[h{o]fadfphwt{cOT[ZgrjqpkZK_aYmnOUp~pggggy{y}}twv}swmxldtrpsoncjndgvra[aZ[ee_X_WJZLSighp~no{quu|yz~v{~{uu|x}|~wj|yju{u~yxrogs|pfoopwrpttsvqhfiqz~x|yqxrissnwuqrqohzyxvyzqksvosrqu{xuhjpihhoqmmk^hsuvm~efhjhjq{sumpvm^bqffpjjkrtx}hmsliq|v~|vqz||{v|}qpzvnkoqgciigchjdhcaebhrq_T_kic`^honpmkv||}pq{{yw|}suvp{x{pw}ttvyyznuvt}|tqwxsv|wruqkpmy|tonqx~yz~~xrssyu|okw}zrpz{zyzzwsw}zyzxv|w|{}y~}{v{wynvojwxstrmkxpw|yxzyrnoswyy{~~|{yzz{zywtuwxyywqqw}|{~fdb`^ZYYX_f`[Z^heeg\\VZ^]`c]NQVVYVRRQPIFRTTV\\]XXZ\\ZZTQSSX^cd^\\_a`WNR^dfe]SSZfifcdjlcYZUQgtbXXW`_WemaPR^mm`SKT[^\\emdbf^\\`edURUWY^`^aaZ^eeebcfb]]]\\\\bgdclmi`Y[\\^ehWXdefga\\^^__adigca__aeijje`]Y`jf`ltleffkjghkqnhlj``jmfjqnokkolrwwsqvqr{}||z}{~zuz|{~ujllkjjt~l{|}~}|ou{o}m~plktsw~~{{vs{t|{ms}ymy~|qn~|~x|sz|{|umyniehsynhmfboj_Zd|{vojzuow}|vwm}t`uvqrx{qxzoypj_orkonxfvw[bswvvxtswudf{wigmqfjyuz}nkmVbwwrwtdd`rwnqmz}lrxeoot{sheyupYqmvxe_RlhTNgjkhcVJS\\fgafwe^bn]xr`{r\\TVaUtwXT\\P]Uc[OimYCQaJ_fcF\\urstdfxuyvdsqvokwtqqokottxlut`jefaYSCT_TTSQ]eVNTS[bWD9=HMIRcpmSPgmslLXsgb^ae_[rwx~pdn}~{q}wvv~stxyor_~qwtm`YXWOC;FFI_>@ARrh\\Z]npYhopwh^]XQMIECCGHHIIEGRYZXUXXSLLQTg}}d]sxfajp`^jizzpr\\lg_bixohijiinymdfdcb`^\\X\\jtslyuuxz~mlg`bhnuokccwjblrs`ego{fmhjrhViciyikz{kSZWivgZSzfl|}qsqc_iruz|fg~toplekwzjnlXeprmSbylYe^\\^rts~u`JMVW^klnk^\\PQha]iaQ^{zq`ahcyw|~~~tunylllmpslnferqmx{kbeeddci`aZOaUXpnkvxuvxwz}y|x~y~~}zsq~rdzyv{uz|ki}~|mfoopsslmyrssigjsz|~~vu|mlypkvvqtsnm~}~wx}ultwsyusw~}yknxqmmswrsmcsustm}`cggijrtrrkrqj\\bqcijcijnt}rpiuumj{wzv~|z~}tu|ynkqqfbhfbcgggkacd^gqp]P]mjd]Xernljkw{}|ww~}zx~~vvvs|xzrzttvyzxnsxw{vpuyqq{{molgpmv}xomv{~{{qtz}vokuzztoxzz}z{yqu}zzzv{~{}{~}}{ryy~prrowrpqjgjoot{vrszwsnlpuxy{}~}|yzz|{zvuwxzzywqpu~}{edb^\\\\[Z]bda[]bkige\\[b`age]QX[]^WSSTUNJY\\[\\\\ZUXZ[[[YWSYcehg`]__^YU]jg`[UW_dhifcdlg\\UXSXpn[[[[da[hj\\PVdnh]RLZ^a`gj`ac]\\ad_PRVWZ_a``_[^defadg`^_][^ehejqid_Z]]^gh[`ljge_`da_cggeecaaacfgje^`XVhk^corh_`gkebfknfcid\\_ihbimnphimmtuuqqrqp}yyx{}{}}{x~tzz~{{}ysw}utwphnnmkkozq|xmuxlp}snhrlt|{|xz~{loovssvynl|ygs}xywp|x{x~ukunilrsvqgklinf_]g}tizzpyt}ypydv{np~~v~w|~sncvwityyiwu\\ktr{zwqsvo`lyncguk_jur{~v{mmhOfwqkqmbgcn|wtrzxnp|iiruwumc{wr^hwrgZRfjTJ`bbb\\THQVhm`gyab`lybe~iqpg\\Q_WevUP\\RfU`VMhqYGVaJix`Fcumrmajppxsaxyqy|ko~}lrsnipnwvo{vfso_USINaXWTPTTQUWSS`^QHHM[`^gqhV]cdc_N[xmmcYmukou~|rz~{~~}|u~vky}~ukjynqu~wyx{vpx}{{kRPKAEIEOUScQJGOqraW[hybdecjbOLNPTSLHDEDBFIHFILNFENRNKJKTjtkaixlZaonN[dhzx}fjxj_iuxflhfdcu{bdf^\\X_`ZSXbjjgpmi|zwnhe]\\howhkdbrg\\it|\\`gguflskrykZcZerjh{|n|nV]Vr~i_Zngy}|nqqf]dqrz|mn~qlqnbduvdikX]kl{mY^pjSb^V]wti|fKNNSV`rpp^OQVbla]aabjih\\djq}~}zx~|z}vqzoqjhqsehherwx{|tjjljf\\jhgeZg_dxxrxzyzu}yy~~{~x{y|x~~rv|hj{~wxkw|zzmcotrongkzstoeggpxy|r{}kwlhxyuwvosxu|wnvvt~{vz}ou{vtw}yvtnz~xutbfhjpqu~nnllrmj]dqhkdadgovuwwfnywnqz||~~z{~zoltsgbie]eiemnafb\\msn^O]nmjXSjtnkjoy~{}|~~~z}zwx}zy|~w}~{yxvt{wulx{jmnssjtvwv}sz|}s~omvswxpsxw~{zwps~yx{tv~~}{|}v}~tqwy{uutihmmntyuqrvrppoosyz}|}~|yy{~}vvxddb_\\]\\YZcjcX^gpkhfeda`cfc\\W_`e_XX\\WPIW_]a_ZYY\\``__\\YZegehg_Z\\_`aell\\V\\`djigjg_`cZRTZZgvhY^\\_gcaifYQ^klcZQS^_`agi`ac^^ab\\NPVX\\bb_]]]`feebdf^\\_ZX`jmemrhe]Y][_kgeptib``efbchkhda``bbbege_^_V_qe^jplb\\ajg\\^fjf^bf^Y`gc`glomhiilstsqqrqt}yvx~x~{|x|r{x}zzqqv|{suyoimtyyvt{k|umzwkzwskseu~~~ywuskpyomr|spwkpzsk||xzsn~zvws}zluuqvypvsisytpcahlxix{qy~t}xs}iypqy~}wtn{yhyk{x_txpvqssfbsuh^nx`Ygquxjurq`Tprhhjdgkdm}t{ztpq}xhuusxrh|zs`gyqnVX_g[HX`Y\\YSFRPgpcisddblsxeYvtnomgQZd[sUT\\VoVWMKgv[Ma]Yoy]Litjoyb`qhkuqbypozsisxppojjljzpprquj_VNMZ\\SVSPOMLQIGVdZMMZkofhm]NWbaXSSb}sde|rwxzvyy~~z|xy~~z~}~xtz~x}zo{bq~we`tmqq}zxvxy|}}|w|~lD[GIBJJP[Y`\\USSkvk``mywq[bf`TD:989;=AACB?CHJJHGDEKMJJMPT_fcbmpi\\eqbKQ^i~}yglkdquvclgcbf~v`cf\\XW_e\\TY]_aeinlxxui}ba\\elwelgdlcVjqb^gcolkofrnvse]Wipii{ugy[gUvdfdtkvy}~|jqnh\\^psv{oszmkmodbtyl_diZZdkvi_a`uiQ^^Vczk_ySAPJWW`~puXQRbjjhaflll~rcidox~y|qw~tu}|uwughqsc]kgivy|}pprql]ipmoinmsz|xy~}}u{|y~}}|w~||vuw{|{uyyiwyv~zv{{zqix}snndjystmehjovw{{szsfp{vwwyq}yry{suwv~}z|}tw|w}|w{y~}}rllim||t|ujkjqqilcfmqm`^\\hrv{wznbrzou~}~}sqzvjelialjbqm`ha]oum]P_pmjSWrsqlku}|}|z~~~}~||}zz~~}y{ytzyyxhv}yv}z}|zzy{potqv{nnvp}|}xop{tq}tn}z|~}}w}rs|oqw|wroprqrsrw|}~}}|^_^][\\YVZio_Ubonljjjha_ef_]^acg]ZZ\\ZSR_c`^\\[ZU[fgec^`glhejdYX`gfhlm]R^jghnliid][ZTSW^dpp`]b`cjgdfbWScok`[VY_^abgidba_^__YTUW[bea`^\\`cigfbbd][]ZYdpnehigi]WZXanmrztfbghgdciljgb``bddfffa_e]Xhjchnlg``gi_X^ee][`bXWbf_\\dmngfhgkrtsqppow}srvz~{}{|yuwx|ttw~}}zw~z~|zym{xmyuj~{vo{fv|~{wlmpxznf{|mtwrw}my{~zxpnzxwws~|py|ryzq}|qehtt{lw{q{}w}|stlyvry~xw~yjwo}jxnuotqckwk_asjUWbqyn_w|n^ftjgjcerm`l|xyvuuzjuwqyto}{_prssY[]ddNSaWWXQCVLbrgomheknjs}fZmvqklln^VfbpZT\\[wWSLJbz]Pk\\go|v`Xnpbmn\\`zyegpqevlpxwjcrtrkedmei|}fsl}fjgUKUSPPQLHGIG>DYg`U^lrhY\\eZMPY[WSVfywtwzzx{rn~v|t|{yv~vvx{{{v~xv}tuyns~wq{y]g||}u]Yookm|~t{qwv~syx~}zywxwphOfYYOJKQ]\\_]YVL[khgdi|ljojdYOFD;79@CCDEA?FMV^`\\WVVSV]cca`gpmifrr[NU\\nvxveknontelfebppccf\\XYci^WWVYaegnnvyq|eh`kowhlkei]Rkim\\iajpl~e`ujlqk^Vkxmsuupl}bv]pfmi}tst}yjokka\\mqsymqvjijke`sydZbm^W]iufafYghS^Y[job^uGARPZRgn\\\\Zgmggouqmmvfgnm}su|tkwyr{pzoeputb[qkdrvyxv{ztdity|vzzzy{~}xy{~x~}{xsyxzwszzw{|wxtr~w}y{}{zxuoodkwsvpjlmpw{}zv{u~zjyxww|y~wu{}tsz||{z{zvx}y|y~}~zzsjuvzplmmrljmhgjxi^\\Yirw}~{mdw|nw}vt}xojmlfojbngbg\\axwj[RcpofSfvrvonz~z{u~}}}}|}~||wy{{y~u~uv~}{}}zssuttysuwjwz~{mmzsj|xl~{}}~sx}ytuvvx{z[]YUVYUUdqhVXjnhfffgf`_fd\\_cchd\\[Z[[W_b_\\ZZZZX`ihffeflmglj^Z`hlghkdW_pmejolif_XXY[]`bjqh_ceeiojb`_\\^flkc^]^`^abdgcaa__^\\WXVV^hf`b^]egmkid`b^VV\\agmidcaifXXYYdor|wihhjicajnhfeccdfffgfdacd]_igfloke`djeZY_`]VW``V[gf[[enjbegglptsrpnpzwlpttxvz{~{y~||{||uvzyp{~}yvsytm~wwtuyyzxjpu{iktl~{x|wl~x}xqnmxyvw~tsx~spq~swvmvzv|wpmnuz~}t{||{{nuwvsoqqqlgmtg[co^PTbt|zbh~wkoqplhhirtlcj|y{yx{uns{qvnu|atrv|v`^``eVYdSTYO=\\Nctfqlmetp_ovdZlqlbhfkq\\dop\\OZeVOMI]zbUtamnmrbgpm^qd]b~yjggoiqnnsmcdr~ssh]dlbn~n^}{lyZpcMMWLKOL@:=<<I[\\TNYifVPTUNHHNUXY_gpszzxwv|{}~ywiexyzvuq|ukyzvwtxz{{wyu~rt}xymlpvr~wY_yyys]Vgqfj~yqynywyrx|}~ry~oxuci\\frfZLHQ^\\\\[ZVO\\[ckd`m{pckd`bdPMF>9=><<>>BHFBCJPPRUYZWVRMJKSTVbndTWbdw|zhnonlmqglhfdu{mdbf_W\\hl_YZRVdfcjlp{zyfphruzlmtigaSlc|Xhcink|wbfxjinoafmy|igs~ksjrstysl}wus|}kjekf`pqu}hluihhhh`qybT`vcUUctfalYZiW[Wbob_cm@GZYSMvmeh\\imbiwyxooohtvw~v|zy{~{ln|wrdyz~s{n|fiquubbwkds~tv{z}zrnw{{}w}{uwy|w~}z~usvu}wuox|vu{~~{xxqw|}w{}wpripzw|notw{}}vqv~qr~}vy{z}|vw}wyyzzrx}xxx~}wo}vtnsmlrjprnfizfb^]kn~{jmyu}~uy|wrrtooicmfbg]dvtiVTfmq^[uprypt{||xv|~sv|{|zxxyz|qv~|yz||{~w{{wwxwuyx|hpw}|lqw|ti{zp~~{||~[\\WSTTS[niUQ`mlcabcdc^_da^abfi^[[ZZ]\\baVV[^[T^mkihfikkdfqj[dmljgnofetxljnlkh`[X\\^cecbknhgkjjnpg^abbnljlhddd`^bcbdb_`c_[[]`YWdkdba^chktnkd_`_WV_gihdb^_i^TXW\\hszzkchheb`hqleeedfghhghhdhl__jihoonjbbii_X[^[WQUa]VajcX[fmf_efhlotsrqpt}{qhpuppmw}~~vx{}ry}prsoz|çyyprz~vywxxotu~wnxrp}~{nryw}~|ummp{yx}~{~y}{~}rsqkpzvruungvtr~v{~u|}z}y~y}rs|qtwswnlkmrbYeiVMWiswlar|ssumqfbrz~tokmz{z~mrqvsg{|itvxvyhakadWcjVSZQ>[Ripbqmpf|p[gnaZmrn`ba`tkbsr]IVjUKKJ]{k^zejtbncork_vw_bewqhanprnlpg[et{ssf]cfdu~x^]qklci[MQTGIIC87AFPZVJN`ndSPRMFCFJWeiknnmmsopv}y|||~}rdc|zpqlvservvxqvv~yutqsy}x|{ohzhvo{p]UrzzxdSjygizxyo|vrvvz~{qxpgi^pZf}ibUCP_ZWX[VVdR_jb[bt}zX^VLRbF<:=>??@A?;BGDDDDFC<>NKCENQICEIS^YJHWcn~vuv{}cmvpeeplkkjhfuukfbecZ]jpfZ\\STehaej~i}whrouzlotkmZoi|`fjpmj{zqounmsnewuyc[tth|~}vup~rju|mmuwlg`jfewqwjjvhfjdicqyaS[|hVN\\peau\\QiZVYioZ^gf:KcYGS|ofg\\lh_kuzvrs}{|pv~y~xrsxzxw|jgzyr`~zu~y|o~fqvy|ag|pjt|z~zpytz~uy{ysuw|v}{{|{~srro}zrup}s}tpyyw{{quz~y~xtyqx}sx}}pn}uouyxuzwu~y~}{~}vwyz{rz}}z{~xu~sorwhnphtwtek{ffjilryitv|~u~yvxupifjfgd^ivqgWXhkoZgyivzpvy~u{mrwy}or|z||xwsrzzmt}{zyw|xxw}}~|yxyyvzyiou{~kuvz}nz}v|}YUQRSQVfkUIXhkfa`aaa_]`a^_bdge^YXYZ]^_^XY]_UOhmjgggppggnrjanlklhrvgl|vmrqmja`^^`dgdcjlilpmkmoh^bhmqgfjkagha`_c`adbaca[[^gb[ajjbebcieoxnmf_`a_ekfefc_]ag\\SVWamv{mfjgccbepqgeedegihghifij_`mimwtohfbincY[]ZWUTZaZXdg[T\\hj`^efilosrspqu{xnfouommu~zy~tv|}{tsuvrkou~y~ynsxsywwzlotuxw|ot{~|~zl{ouxz}nmnty|}}|}sonkqurprvpgo~mywxxxww{r|~xwqsuxkvjrpachaLN`punchx{tukmd\\{}vrmq~{|z{isqypg~|osyyxvhjmn`XbjaTYVE[Rlgbqmpf}o]bg`\\mrnd\\^Tkybgs^DUi[IJK_togvfgvdmdprjd|hYeguuj[ksslto\\Qbwzytqgbdchw|mQhhgii`TOYQ@FG=:FW_YQOU_ih]USQJFHMZnyvpljiuurv}~x|z~tymdo{yrphss^q|~vuzquz}wxuqoszvzqu|rsmkgrux~iJp{iRidi|r{upwx{}pvr~r{sucam`tskgZGP`SYW[U[fWYbaYOXifRPYEJ]Z@8<@AABEECDJJFOUXWK=??<?DEGJLNPRLCCRevykjoo}ocsvj_eqhnholhttkebdb^_ipj[\\RQek`bi}hu}y{}vmqux|lo~mxlnrxolwyog|pwv}{nvpfy{s[iyr{}uur{gjlwfjqsdk^ifh|qvpgsgdmbkgpxbRTxiWIVlc^xfJsm\\OYhn[]h\\7OiSB]qufeZlf^kr~|xuz{l}}}}morywszik{~yr^~zy}~zyq~ht}xum|gf{~~rz}xm{~rvxv~qrt{uyux~z}tsqk|xjpq|vo|~rmwut{zrtz||yx}xz~|lp{qqtyytrkvzvy}x{}xuxzz}{|}}|sk{zdrkgwusfozfkyoizqoux{{s|wwklochkcaivod]_hli_qulzxquv}yrxfuxy{zop|{z{{x}tqnxvptx{zwuxsuwu}zw}|zxyzxz}pptymrvupw~|vy{RJJOOO[f]KM_id^[\\`a_YZ`\\\\_`dg_ZWVY[][Z[Z[][P^okgfghslbkvpimpjmpmrpht|tpniggeicbdefefmnovunmmnjfourl^cmjelfbade_`fdcca\\]dmc_hmhbljilhrxmnh`adfjjdccb^\\bc]XSZiqxtgjoe`dgkqjcffcehhggiijjcbjlpyvpjcegnm_Z]\\[VW\\_][_daWS^ie\\^cfklorpsrsswumgmronnu}t||~xy{tx~uqwzunvy{mrxxxvzpmnx}~wv}~x{v~|virtyzntqxx}y}{uokhnplpppugjquyswwry}nvywq|vyvpyrxmfkj[EVlsnefqyvplnjg|vu{wootxz}|wbtq{}lh{nrxxwxjptwiY`ggYZ\\IZZhaanlohzpaaa\\\\mrmd]YH\\{cZjfFU^{`EKNconkpgdkwmcmrho_Ummxzt{l`lsrlsgYQ_zvqrnmfgdnuwbNztcekeWSSZH>DB?GMQKKPW_ebXU[ZPKNXajnromknuxv{~z}~o{id|wysoiqw]px|tt|svv|}vxouvvwz~wzvh_x{|{HinRrmkytny}s||}jqkpl}pxyy_mer{jlh^S\\`NRS\\R[^WZY[ZUMWQKQTE>R`K:<ACCCDA?>BDDFIOXWNPQPNOOKEA?><;?IUgw|sopvqgcso_Yltnnfshhopjbbc`bcepp^]RPgpa`h|gk|{x}rs}x|qjtv|nmt~rvw}uwnu~yzrl{|jn|v}{p~tut||`ih{p\\am|oZkbech|rrrfmhanaigpu_SQpkWFRg^WtpFkzmYJZdkdgc\\EYiLCdo|Xblid\\mv{|}{ym|}~rrqyonzttt}|xf}~~{{}yrnzxssbk~{s|~swmx}nrrr{okq}uwqt{x{usqiyxflsxok{{nmsvyrt{zsqz~~zzz{ykwvnuy{{pjmzxns}~}}zsz|tqvzz}}rn{sjthktrsjptduml}}izr~wzx}w|xvrusfnjefk{tfghjojgyxu{uquyxrpsfurt{rpxixzz{{wzrllurortvusrunq{ms}v}{|}{~{yz}zzvruw|tlw}~xz|~txyJEHNOUb^KFS`b\\WVX__YS\\`WY\\\\abZTRSX]WUXXYZ[ZYghgffilpebovmfoliqpopko{yrnhegjoohcehkjkpru|vmnrrjnyrhfagqmmocabfg]`gfedb]`mnghpmfcnlmqkuylomffkmmh_cd`^^bb][Yantuoinoc_flqk^bjebfgedhjkkifhnmw|pljfhkmg_]]_]X]c_Y]cc]TS`ha\\^agmnnpprtvttrjgkoooovwszyoxz|}zzyzz~}y~~~}lu{{xu|skl~|x}wyvrgnsxtq~y}}~~~y}~wtojhkpgmskxnez|xxo{tnw|noyzrx{~}ww|ugrvg\\Scuqcgntvnhmosqot|qkopr}}n^vqtfi{ksrsw|swxwsa_\\oaZ^L[edZ_llmhxuh`ZY\\nrld\\W=Nsj]]pUOWpfFM^jhimjibcrdfplwaRxvnvv|lkqqmkq`VR\\|umrlreniqrmR[gcgk]SVWUDCEFFDDDDSXUUOHJ[cVQZcifi`eorttwx~~z|~z}k}hevyumilydp}}{vw~uusx~zzmtru|mjPgvRz|xq}|j{ws~{mkjhowvtrzlgxfzdrjgec_XPO`S[WW\\UXX_QKIJXRH?J[T@<CECAB=:>@CCC?AFJKKIJLPXXRSUMEBADEHPZ][[^bklg^a[gcXWuwkdesehnpiabbahe_mq`^SPgtb^c{ma}yxzxyjjuzwservwoeuwxvx|}y}xu{rszyzypymztwsq\\lwgxnY]isg}}Vggc]dwtlsefgcmggconYQQfmXDQcZQivMeoeXL]bafp[\\S[bKNjxm~Sgxj_Zs~~vtz|yy|hmz}t~q~t|yrs~xq{|cv|zuxi{xlr{yljko~xkfn|vtrors|vtphtvdgttjhwxljmpxzot|~uow|{t{{zxts~|sr}}ukoxsfjv}}twzurtxuqy}xsqwrvoirpoupmpe|kq|{ynwm~qvx~zz|xy{vnqmmlr|ynqmkqmt{xyxrpyzqkngtnov~ptqgryz{wvpfjsllopusqpollv|itvzyzy}z}z{||yvx~ylv|txx}yBCGMS^`O@HX[WUTSU[YQP]\\QUXX]\\UQPSYYQQXWTTZ]cfeebajok`gtrjemhmsnlpnv{tpmhioqtogdinonnsu|ulpuphrsgfffjsmonbbbff^ahkjfcahsmjqtlhgmosuoxzlqqllqroi_ile`ahf^afhoqsqjnphegloaWelcdjeagljhfdgkntyrkiikjnlca`_a]\\eg^Z_cb]SSaf]Y]ainllnpqtvsrphgkonkpy|rszwwzt}||~z{yuy||||||gq|z|}yx|vml}|z|yytqnhmu}tw|}}x|~zyqmljjkviftix{dr|msrswpfw~u}}x{y||y|mh~zdgfl{m`nrqohhpy{ckuvskjmlv{f\\uso`kzw~ewnkuzxtxigWmfZ^M\\m_T]hlgesujcZZ\\ppe_W]:Cimj^snQTffPPekbejmsZb|zgdimxoR|msxzqwtlinuaPV^vtpqflhuponbKp{`ghgZXZ]RGFFMJ>CKTVMGDBHT\\ZRXfgeajcm}~xuuy~uxuiyliw~}{ywmlixnq}|usp~~}wvxnv~oyv{_gZsw}wk{uxxu|}wfojmw}tnpv{|ktynngrlto_hmSSo^TRZ\\TQVj_HKNVVSNKY`O@EHD@DD@@@EQSQQLEJJEBACIQX`e`WNHEGJJJHFBAEGECDNK^a]d}hamtfiurg_bbchaVem`]TRcse^`xq]{tssxoxxhemuwqamrqp]j|uz{vwvwv|yuv}vq~|}rxloxrwq}j`srhto\\Yen`wzWglfZ_qxlwrdfhjjkd_jfWQVekYCR\\WN_uYabYYV_eXcsQXZY^S^omhwmXtwrP[}zx{}iq~||{}q|yswvrwg{wws|sduyiksukafn{sc_m{vuphgizzwtpfqwabvrggttjfgnwvkstou{v|{lw}vz{u~|zwsqytdfwwt{wqvsosxto{xyurtuzlpxpmxtilghqxyyrojzjsy}|y}|~}yz}pp{wk~ypsmlss|{w}wlq|rkliv}igq~pq}kfpuy|yvoj`hpgiklqnmmljltxgtp{|~yt|yz~~|{|z{{wv|ywv{zŽ<@GQZ^TB?NXUQSSSTTRPTWPOSXZZSNMNQVRNQWUQQZbfedc^blrc^ktleelhqtlmppuysqomnsvslikqtonrtxtnstknvmeikkpvmmgcdegc`iimkhdhvwkitsmkllqyvr}{loqonnssj_hmhbdkh`eoporvqlrupjhmk\\Zjkcijacklebbaimowqgjhmqnplfdccdeglf]_ddeaSTefYW\\bikjkopmprnqoihmroho{ulqtx{{pt}}|vquzz{w|~w~coy|}z{}|~zy~~xooz~}{~uosmhq|w~zty|}|u}qfiqmfxn_tqrnnmsutu|yht}{zox{zz~z}mrxeuqvjnqnoheitxalmhkjjpqs|{`^{qsrZjqquvgfcp~xv{jk^gi[[O\\o]P\\esa_imhe[\\\\rm]XU`C@fpujnzdZ^ab\\hgZ_hrwaar{ldbmr{awwqvvxynelzeJ]ipnwradp{vjfYUt\\mec__]]THFHIIHIKPH<<BHOUWWRSjkgq{lytu|wy~vysixsix|zy{zsmgq{pyzqtl{{ruwqx}|uj}}oprpy}tyooiqyzxuvfgnmq{|rjuqyqqzt}]ufv|k_{gQ_mcQP^\\JJNmlEKNRZYUOX`[QMIEEEBEE@BRA@@::EFDGIHDAFPW[\\XVQLJJGGJH@;<?CCEOahkzxhh}ukuqfbefcc]Wbia\\WW^nf]^rp\\vojjvlp{k^jmro`jnk{sXewtvztsvqoqsou~{~~rv|tzylfttuqw}de{klqqaWgn]qwZepmY]jvtrl_imommbdi`UQ[dhZDWWTO[rd\\YRS\\bbSdtPYYUcSlsacv`[{zvT]}zos~t~wy{wrrmvvt{n]o|ueiosp\\^lx|p`\\jwtwpdz`fxyuuqcnv]]xreeqrgacjutjtzlou}uq{wex}}{|v||}t|{u|xjfpwnpvpqtnswpnzwwxvwxxpy|tozsgkmgqt|trjjvjrz|z{|}u~|~y|}qx}s|qpkkruwxuimtljlz|hfm}rlufdmow~vuhd_flihijqijljhlvnfpqx~z{~xqvz{|}}~~}~}}}vy|z};?IUZTE=AQVQNQRRRQPQTNGLSVWTMHILPQMMQTPPS\\fdcdb]erq`_mofbehjuphlnpvxstsqtz{umorttppsu{|tqvwpvzmiommu{rjbcehjdenoojiinzvgkxrmmmlr{vszkpqqopvwmbloheimjfknnpu|umw|shgmg\\akkhihccig__cejpsqihjjrrnolmgeefnspb^fedh`QVgeWW]dhhiknmjlnkopkjmrplrunjpo}}pmyt~{~xumrpxwwqv{r~|z{jq~{~yxv~}vwyqs{|{~~wtpvigs}~wr~~|zt{ycdttdtybn{qzq~mxtsvvyqtyyju~}zxyy~~pv{rv}}uzopqfdl|{eficcdjqvuz~^awkrzUhlkpqd~camvu{lmifn\\XQ_n]Radx`[ajfdZ]]mjVSUaMAeqyumqxeaa_nseRSdmrxenxvecmnuxqt}txvuvcf|fA]sni}x_dswyfaWf~o]pedkcY\\TBCJHF?CRI:<ACEKPV[UVvztn~quzyy~{}vo{xny{yz~}{nhj~nuu|~pugw|qvsm{q{wlhvhtz~fy}akzqvsq]ihpn}|iqrrqirzseboh}widZX_e`UZe\\EHSrnOLMRZYWV\\]]]VPIKHINIBSZLVF9=DDEJHCDDEFFFDBB@?FOPPRRH<;?ADAGS`ctyidmuyoggmja^]]_c`^][Wfh[]om]pobcpnfyw\\ghoh[blixx[`ptszxqnsmliliry{w{~uw|upysz}kg{rtpx]h~dpqsdWjp\\jq_eruZ`emyugXjuulkefieXT`eh]E[XRU_miVUSN[hbQcvXb\\YcXys_ck_cyrkh}zxxyu~vtvs|yu|k_mvqaehns^Zguxl^Yfrpwnc~x\\`t{vxo^mtZYusgejle`biq|sjtsfqtxnoz}s`yx{yww|ytr{~vzx}qppmiguuoomssihzuz~~~}|}{xz~vr|rjsu~jqtruhqtpt}xu|u|~ut}yyqnmnqz|n|vjhyzont~ztfg~wij`blmuzs}ti`\\ehegliojkmlgrsigltz{~|v|~~wrsy~yy{x|~~yz~½½AEOUTG;=FQQKKMOPQPNMOGFKPRQMIGGJMLJLPPNRX_ebba_]itd^dkg_ddckujflmptwtuus{|unqsqsqqsx}xusx}uyzmotmo|ypfbehlkgksrokhkq|vgnvoknmmsxsuyjpqssqxypgopjippklnooot~|vz}vgfld`glmkjkheca^^dilrsjfklouolmoqihgjuwkdffdgjaU[jfYY`fihikkigjmknokjmrrsumjlqr~vnq~tvy}z~}txkngzuptmo}zlw|r|~t{|{yyywyqs{lq}~vv||y|rvqsiis|}}~~y}trw~{zyxe]p{nmri{}w}{rvwoy|xzwuw{xhuzy}{yvv}tqv~qq|tih{~dbe_hlmt|yxz]fobr|pTaggml]xccoquxrnngz]WT`kbSgexb]^kg_O\\^jgXP[cXEcpzxmjyrlfNivkWK\\ek~vkn{hbjjnpqp~ywqokaui?Yrkgx\\essvfd^pthapikyfY]TBGJIC=JRBDC?BHMSYadjyuznt}{|z{v|u{|wy~|nghmvpuynvewywuyqmqz}ucnzt}mnzwav`huqrnsq^cfmhxcvhqegkvOmcr|qkxuQf^\\\\\\ckZGOXpcaRIV^XW]a^\\[XQMTGMTKHheZ_GEKC;?A<9AGFGGECCKPLKLLHFGF>=>@HEEXhdtoaev}uxkhlnfab`^^`_W\\eU^i\\[kh[enb[fn_q^ddl`VXheuz^]iorvqljnigbdent|swzsst}|qv}rgg~kxpxdg{_uwtmcsq`ejcfrw_dhgwviWgvzlmhifg`Ydil`HZYW_hljUSWP]f_Ugu`a```]s[c]`pszxwz~}~z|ys}{yw{x{z~leqrlbf`fscYequhXWdohr~hcysZ^s~yxj\\mrYWrshbge`^ahmvrkqpcqtrkpw{g^|tqrpr{{nnszy|~x~z}zwzmgemxrlknqjhzuz~zy|~z|yxpsy{{ox{xzpxywv~z}uyvr~tu}z|{rnrtswwq}zoku}zrsx}id{~kebdnmrvsyqha^cdcfkimjjlnlspjgkv{{yx{~~z}sv|}{~~zz~}~}ǿ¾ÿ¿»GNUVM?7=KRMHIKMNPPPLFBDKOOMIFFFJKHHLOMLU]abab`]`mqX[jk_]fd_luhelmnsxxvuy~zuoqqlsrrvz}}wvt{y{woxynpyigijkpjkqyslmnot|ugoulhnonrsowxkqqvwuzzpoqnlpsonoooppu}{~xgeibejkpoikoia^_cinrsmegnpusljkptnlknxrilkffjld[bng]_dihfiiigeinlnohhmruxpeilrvzuoqxzvw~u}|}~tz|uyikespjvrkkxumwxonp|vxzxvmxer}uqq}{vy~woxrmjkt|yx|xy{vy}utu}y|z{q\\fyyqz|lz{vwtyk|x}}n{uutiuxw}|zst{}wmvl|vnrx`^ds{wvz|~u\\ib\\ryaS^d_iiWvbep~iuuurpf]V[cgeSjluc]\\hfXP[]ed_O_g_RbrzwkjqqopOYnq`NU^ctlizr`dggkrm~wjjv~semhCVlfgzs^mqkmfgdpjcdpkti[ZOMRKFB@PMGJHLTPQYdlpuwzqu{}|}{{}~{~tz{|~{mhekukmwkscv~lyr{{nmrwu~t[sr~unzzq{ftdflqlg|_a_ielmfn`f\\fiyiWqcwlqj\\qZ[WaglYO[Yh\\mSC\\cX\\a_XXYZSOSGSUGLzpYXP_XEDEEFDDGGHIDBDEIKHIKEGGHJB??JIKgjeqg]fxuvnhhmf^cfc_]]]RZj^_j]\\gaZ\\fcU]l[eg`bd[QP]csya[fkntoddie`_[amk{xvzvrpusuqki~mzryui~czyxynywhdfggrycficwxjZgxknkkcfi]gmpbKWX[jhmkXPZXde\\Zku_cc`bllYeX^pw~zz|z}{{{rxvyy~{~~mltnibhZ\\ufX_krdUSamcoyddvpYZq{vg^jo[Sowjad`\\Z`iiqpfl|k_stm}}hrt{{`d{{sijloywgftrux{|{|~{~tgjnxueelrrr~s{x|xrz~}~z~}||w{y}|}||uvqstuzxxluvuvstun}s{zuwr`yrgdiomprsvngb_aabfjjljikortnkgkw{|{vy{r~}}~||||sx~yy||Ż¾ýĿĻJSUTH;8?KQLHHILOOMMHB@EKMMKGDEFHHGGKNKLX_`_``\\Y_ml\\^li[^gc^mthgkmnpyzuv{wrnrqosqqv{||vwtz~}wowvlxvhgjippku{xpnnpqw|lessgjommrqnxtkqqvwu|zpsyonrroppoppos|{~tdegfjjlqminme_]ahlrusidlpuyskjinurnnprpljjmkigcdmle`cijfdjihgegkkolejpsvobckkmwwonowxuw|}}u}{}{p|~{w|w|yhgdometqknuqrsuwiq|ryyyqq_tx{om}ysu{uk}~xqiiktzw|o}yryysu{utu~}{yz|bcuzwnwsv}tyszj{vxzkstywqmsuv}|{tsx}xm}{{uyvxr_lz~~z|{v{|kZi]YrvWT\\_YheVmbfqxevquvng]WagefUdpqd^[ccVU\\\\aabPZl`[bqxwjikmoogUesjTSWZh~piw{dbdchqkwiil|zwmleLWjdfvobhoggfhfjbcfonxk^TK^\\QIB@LKIRU_aUWcgxxxwvvw{|{x}}~vv{|y{|lhdktidpzlkbw|~irrvnmstr{sT|zp}t|x~pr{nwmrfhepjeY_]e_prdgb]XVam}XchkmoyvhvoeTRhlkY][``loOF]^W[eXTXYWSOQKRUF]l]]Ub_^eNMTPOMJIIECDB8;FE@B@AD=?=>GKJkgcg^\\gwqvtfdin]^dfc`\\^WX\\aaci^]c]X[acPYiY\\v\\b_YPMTaqwaZfiirn^``bd]]`sko}|wupp|yvtzptrrx|t~rw}}uv}pnfigtyeglduwl^jvloklfd{cimpeNUU^ngmo]W]\\ec\\^ltdmyae}kboU^fzyyy~w}}}st}z{zyp{{}}~npumgchWUsjVZereRL\\n_mu`fumYZq}te`hm\\Qiwl`b\\\\Y`ihon`h{i]stjukqt|x]gzvrcchlxub`yxvnr{v|zwwyxqyvjmtytdcmpwwsu}}~{lw~|~}}}||}||tuq{tv}yxtmtwuspv~{r}uyyvxyax~jjoqnprtumhd`a`bfhjljikqwsmjejx~~x|~wp~|{zz}z}|~zty}vy}~|øþĿļƿMOPN?9=CIKJHGGLPLFB@CDIMLKIDABDGGFFILLNV[^^^]ZYbje]eja[bf`assehklnqxwuy~|yvmnurosrsxzzzuvw~{sowwr~kekkktvqx{uppprswvhiungnnkopnpz}omopuvv{yrxulrvqnppopons|zy|m`fhjlimnjlrj```foqvtlehrswxnhjoxxonnppkkorrlgfhlphdafjieekihgdkmglkfnssrh_fpnlqrooprrrsv|{}|~t|||~|u}|y{u}xrs}|xxyfcdii^lrkn|so|lq}kxznz{{g}_uyt|oit{{wroyuix{ypdfjsv{uxiypjwwmp}ywuv{xyx~mhqx|mqtw}t{uyxixtm|ykl}sv~unnqtw}zwq|t{{p~}}}ywz}igwxx{z|~zxys|ZWgXZopTVZVWk_Ygbfrofuhvyhlz\\[mleg[cpkf`\\]`\\b_Ya_i\\Yhfaajvwifonkjocbmg\\UUZWutnp{mbaabll{vmjfsvuvqcQ^c`drpfipfhdje`Zfikq||naWXg_XTG?NKOaink]clm|ww{|}|~|}w|}u{z}zvuy}txz}jhd~kpg^kuecbw}~y{~fmorplssrvmTmrul~xwrj{ps}|qfgejjfY[_[_pci`\\[PV_quVj_sqlpxnlkpLQicb^kZYcqgLQ^\\WebJOQX]RPOMWQKpaVY]njkhPWWSYUHIIFECB=?CFJE><<:=9@BR]l`[VS^hrruujdikhY_fic`eWSYZ`hlg_c`YV\\baPPdZUvcb^TNHNYou_Ygkeqp^[Y^dc[b}tg|}uru~yx}ktz{zw}ys}zlkjwxfpshuwmdsuqojjmc~pmloiUTPeqfmkdlf`dc]glss|bjtmjvk`hw{yzz}|}tuwv}xpn~}z}yyo{z~~|||pvvldfkUQsqWP_m`OJ\\m`pr^kvk\\]rpcaemZNeyp_^X[W^ielkXcze]uqe}oknv}t`ivsvaaekut_^}orkott{}||mn}|{t}vs{~zsrvyxohjqyt|r}~~}{pv|{||}{|}}~}}|uvvxvywyrs}{yooy{|zxuvdumqttstuwuojf``_cjkmnljmx|smiek{~|~~yv}|yyyy{|~||{v|~}x}~~}¶¿üĿü¼JJKI:6AJHFGIFELRI;;>BHMLJIF@=?BEEEEGJNPRX\\\\[ZWZehabhf[\\fd\\cwraglijqxux~|ywsjnxsotssyywxtvy}xonxyt~}ifmlowyvx{tpqrsuwohnohjqklsmmq||noootuvyyvypjtwpnpqppporz}vxzi_fijkilliquiacelssvnhfmvrtshfmtzuonnpnkotvskhlnpqhdbiliegkjieepkakkfqwtqfaktportrnoplmruwvx{||zu}~zz}}{wyx~~vz|rt{n}wok}|nx}zuyd_cdaYhokhqohrvxl|}~`|bu}yxtwodhutwuohvteqxzo_bjsr~{}xttduidsodjz|ww~uw}yvwt}vkptyrlt}zxx|t{~wt~whtqbxz{ifzqr}tlnprxyznwpz~v}~yu{zoosqsvv}qztszwQXcV[kjQXXQVm\\^ecft|vehpcxwejv[\\urfc_hshfb\\[`did``gkgcjleefqqgbqp`flkbhg`Y\\aPetrntrb]_VblpvqnlknnyxhR^[YhrpnipicbmeYXmies{xpe`hgehbJETOZptxoblrq~x}{|x}{}ysy|z|rwp}yvrw|ptwzgfexn|ieWcq`^cszywxz}d|hmnrktsq}zpcXg}x~kp}k}uvj}yqrtx}g^mcigx|\\W\\[bi\\kZZZJRfryg]f_vaosqjnnt?TfXastXWmpYMY`ZWhSHNKYdRPKS^NYtXTVbukndWecWSMFA@AABDEC?DMJFKLHDCBA_fdXQPUbinrtlihnf][dijcafTRS^hnpe_kbYWXb^SO^\\Ukp`^QJFISkq]Xilcpq_XUWfi_g}n~wo{~y|dt{}xy|{swnmywi{ymtvphxt|xxiixdzztlnnbRKjwgnam}mfcbejlr~cn~mpl~csxyyzzlytvmt}|xn}poj}x}~~{{yn}{~zwryxk\\joRQsvYL[g]LG]lbssepum__vmbbcmXKdxq^\\U[V]ibjiU_uc`vod}{lnkx{pfhsszu]`fjrs[bukkhmquwxzsduxzsq|ynwzx{uqv{yrpoptw~wy~{}zvwyz{y}~yz~y~}|xv|wttz~~m}nm}~{wut|kqwwxxxxy{tqsja_^enprpnko|~rlihp~|}}||xvvvx{~}}z}|xz}|z˿½¾¾ǿÿ½Ż¼GKMB57FMFACEFHPOB9;?DIHEHIC<:=@CCBBEJPPOU[[ZWUZfgegg\\W`e^Zgxm_hlghqxu{{yuqioztorttzxuwtv{~ytloyyt}{hiolpw{zz{topsuywijphhnpgltkkq{zoollqsuwxxyjjzzllqsrpppqvvquvh_fijjinmjvzicgiovurjnlpwnppffpxxposqnlkrwtqljooqriglunfgjklkhiri_ijgrxtngfqwqsyxtomnjirvqx}{|{sxxs{|z|x}}|~zwvv}|{xzuqtsszuzjxyoktexyhp~|ryd[eb[Winmhs}nz|~|nv]{zmzx|t{ztqfkqmvrgdvwfgr|o[Zdrnw~}y|tqm`t|gang_hxytv|xuyy|wstrx|kksuvklxtstvrz~}qvvhrs\\s|whbuppzskmoqyy|mtky~{zz}yw}xupnklvy{u}zxwwsqpohMY_TZf`LXTLUi]ccadtuibgg]|rcbv^`yvabdgsjeh`_hjkifdphjkljed]beb]hr[`dkdck_\\dcRZntuonfY_UTdhwtrohdfu|sUVXPlsnqlpqa\\kcTWqg_nxqldcmekuiOS`Te|z{rhtwr~|}ux|zy}}vqx}x|uv}sti{|~{zlrykouxdffsqx`cT^jZ]cqxrqsvwexcqnsfqqrsl`agz{twvexzu~zju}trmy|rqm{mViahfo{dXSada[iVYZDOjlj]a]gq]rrflnvo_7V\\OntRbqcQX^g[R[GQNS_dTRN^gQdgX_^gsimc^omZTLC=:<>AABDDGLJHKMLJIEMf[WHGT\\ajpqkcggeYY^fjhfg_URQjl|hecnic_Va\\TP[_Vh{y_ZLHDDKeo[Sgmbmo`YXVfpjkwwzz~~o~{~{vtdw~|wy~tuszi~quwrgxuz~jhnwz{qvrlYTrwkkbymgjeninxwbuwqonym~{u}u~qdtpkktvyvll|hln~|{|ywy~{}{y{nyz}~y~rqyzn]llQZwpWOW^ZLFaoevwmssrb^zmddemVLcws\\[W]Y]h_dcT]macshb{vjmkz{qlinuhW`kmrsWi}gihflpsstsfjy{xnsupotopvppvxussosw|}~}y~~~}{}}ytvxxx|{v|||vvvz}z|}zttw~}|}nvv|zwuqu|rq~{{}~~}yzzmea`mvuusqnxytpnkx}|}~{wwvw}}~||}~~~ʾÿľ»¹ƼHKF849EIC>DHIOQE55;CJHCDIH>8;>@BBAADJOLKU[YWTU]cfggaWY^`\\]mvfdgffiswv|}ywsoiq|umqtv{wtvrv{}zwpinxxt{xhjomqw{}{{torswzsimogjplentjkr{zqnjjopqsw|zhl~zklstrpmllmnovtd^fkkhhnnoxwhdilszxpkolpqinpeet{thlvrljkrwsqnjqstqhk{}mdjlkmmchvg_kmjswsmggu{qt|xwtmljirvl}yzxsrz{~{s}wtxu~{~vy}||}}xx{|yy~tym}~wjvrvjfjbvwfg}{pydWfdYXkpvi{|zxrn}^t{~zx}xwptuerresqc`w|jco|o\\Ybn{luzyztwrof_txe^h^[hyunruqwwutrompowz|hgtswqfpnjkszn|{snogp~uZl~wi^qnlxqiknqxy}nqgy|vwv{{z{yrolajzztpwtkonnjd\\LXXRYa[NUQLVg^bbbcmi_`_][{k_\\r]b{u^abcsghrbcqpophoggmnlfbYWVZ\\]p`X^if\\j_^hiXYhqwukfVWZOZ`x|tsqh`_n|v^NWJbqononweWkbOTqi^kvkib\\kelraNcl\\oy{voxyuzytx|zw}{}~yrs|xw}rxqqxupczpzyz|gqxdgst^dgluoX_TZeZ`aowjmop{ojp\\rnqfjot{lldozmuuoqlfzwxhly}fkw}wrpqnusQcdnbh{r\\QYiY\\gQXYEOroaY`Xio`mhelmnqN;ZXU~pOneQUccl\\TSM[U]fb_aShlTk`\\ehjqjk`gyoOHJDABGG=@DDAGMICGJD>DRZ]ON@MZ^bnpi`]if[S[dghdhaTTV_lndi_opocWb\\XMY^UbuudUIG@?JcmVQakchhdYb`gpplq|x}{vs}}y|zxp~kkzyt}uz||i~ruwrjyuxonysxyuuaf|vnyhxmntlzho~{un{{oot{vo{{v~lniot|cksz}tgbqzikx}xywzvvs|~x{wzmxz~y~{yooxwn_jo[avnWNSVWILemnw{owzukbz}kcfik\\S`upZ]`g\\_g[\\[Q[g\\dpfaxsklm{{qnmjucRcsnwqZpr_jfcjooojg_xq|wlrspvpiprlnqruwrosxzy~z{zty|xszzvyztouxwy{xw}xxttru{~{|}}~u}}vtvwy~xyxzu|w|zyxvorzxu}tkhiuyy{yvq{tqss~~|xvy~ƻÿļûȾȾEB:7:<AD>?LMJPK919AKLCCIJC75=@AABBBGKKFIVZWOPYbefgcZW\\]\\]bppdgjedmtuyzuuqnis}tlqvx{vrrouyxwvngmvwsyvhjnnrv{|yrotuzxqkpnimrietshjr|xqnijmllou|vgp~wkotvsnjhhijkwq]]gklhgkmqwqedjow{tpsnfkkgnpfguynbnvmiilrwtpljuxumhsykiommrmbmwe`lmjsupmiiw{oszxzyolnltts|r{yqos{z{~uv{~yyp~tt{y|y{x{{z{{}}{~lxyxhpntcecbtti\\|oweUhfV^ozk|}}~wvjy\\q|}|}xnlrufumdvthc{ohqzm\\\\`h{vinwwrwtvpi^bvreZ`WZjztjnonwqmnmjilgnvwdbtqtvchidap|fsx}vjhgm{v[g|tfWmlgtncalqv|x{nog{tqrqvzx|{upohct~ulnxv{ebejle[TMTOPY_ZPQSMWd[bbieb_]]YX[xfZ^iWeykWXZdk[mzbhysurj~kkiloih^TLQ][gaSXci]agcar`Vbkq|rf]M[TVYhqpomdUbzvePQI[lnhlmxlXffTUljajrfd]VefnmYQnv`ixx{yqttrrus{}yv}x}{vntxw{syltmqstg\\|gqswgqwa^opWbgjuiT[UX\\\\b_qugjklw{jteXuoqj}forreonxwuppepdpvsve_nXgq|x|~qrll|uO]hy^fx}gXNkYafUXYHXshZWWXclcf^mhholRLdUh~xgTmYLaiikbVP[]\\eihtv^qp[sadmtnwxqchwsWQYQIW`QAGNI@FRHCXUD?IabSKHDV]_jqj]V_m_X[cndacbQSUcihpygexzsaZk_cT[YW\\rplUHHA<OefQO\\geebi]ijhnnjl~r|zs|y|wv}z{v|mh|{~kp||ur}|~w{xn{ptytqzrztos{|{{jrywooxyrip~}v|onyjj~wvxvpirhts^lr|n[_vynn|}vruuuzwkx|x|}vxjwz}||~vlmvxobjkajvnXPSRUINenu{r~tpj|zkcjnj_Vatm[ahoaciVVXNW_Xeoedtlmln~|smojv|^Pl{p{qhwkcldakmjjebezk}tmtuxsglrkhnppvulinxoxsmvxo{swqgnrru|zzxnjrvswvsz}zuurt{nr}w~xxyyyr}zsrrx{~ywrvyx~|zyzwppx|{{urw}|vuwyyx~~÷žǿŹʿA=;=?@DDBGOHEK@17GIIB@JQF837?@@AAABEFEDLVVOHM]fgfe`XVZ[[]frkcghcclptz}vtuqljt}rkpxy|tqolsywsrjdkuwsvsjklmqu{{vqosx{vnoplioree{sekt~vpmfgihiouwpfs|qiptsolkihhgkum[^hjjgfgiqvlccjqyzstzncghgmofhuxkerrgdfltvpoppzyqhjtknsoosngs{fbmnnonnkhisulqtxvppnqyrx}orzskmsyy}u|}rx|pmp~tttv~xzy{~x~|r{yihio]g_`ss}mVxp~vgZlgRdsk}x{{{ftXo~|~z}~qjopthymaywnh}ujszj[\\]dxtdewujtvsmfZfslcU[U[m|qfljjvjdijfdgbhoo`^pmrv^bgcXlglzxyujaimvs]fwpxiSikbqk^[lst{wwxnki~llonv{syy{polgn}{ohnzsyk\\\\_gh_TQLNOPT]WQOWQ]b]fblh]\\d^U]_q^Z\\\\UktbPTUa]Uow`k}sutplpllppseZSU[]XXNP[g`^km[lhV^fowwieQRWXUYztgljnURpueYPGScgffkuq\\aeVVei`enecYP`fkfQSrxbfwxzxolmolpu}yyu{z|wkvt{zwymvjmkvowcV|ehmtdp}v^XjnT]ekr^RUYUZ`c_wrbgejpqh_Z|}nqp|bkljetwr}km[h`zoxwmwjfSNiq{~|xwyjkuxNYh~]ZwsaQd`lkYc^O]m^T]R[^ce[_tabui^`kV}pq_ckY\\jotiq[T\\^bhptf|xiw~gpyvzoowvg_h_[dhSHU_XS[cTWncSU]hfUPHR\\[fqkbSUgkVbjnz`\\`\\S\\`mdgwbvo`arbre_VX[nijYKKH;Rk`JL[gfdaiejmemtee|luyqxywno|yr}vucb||smr}vmlz{x}ttupt{tuzr|uqv}}p}~wu}v~ukwwxzknwqbk|q}iy{lsdpj\\ixymW`ytq{{un~tpvz{ydv|{}}vxmwy}}uilrwsggckzxkZZ[NMJYhpzz~ywph|yicnoh`Yfth]huvfihUTUKU[Tfqejsgqorvjmmy{YVu|z~xwtqlofbmjiea_n~no~qnxwymkunhlrqtunikp|monkituhtzptl`fmmpy}ts|xdimqqsqoz{zsmmntxkoyyq{yuttsrzz~}}pqm|z{}yw|vqst}y}|}}vtz|}~t~~zļſǿɿʿEDCCACJJILHBB@<=BKH@>GQL<13<A@@?@ABBA@GQTPGFRbfgea[VVVW\\ajpfbgebcfjs{{stvqlkv{rkoxzyqpninvsqogbkvwrrojkhhnt{~yuporvxrlqpikrq^ioflu}tojdefcgptqjjwxliqsqmkihhgekrjadghjhebfophbcit{ztuylaeggmpghuuhgtka`bourjnrryumenqmqvrpuqlv{ihtsllmmlkknnkps{sptpv|swxptskinswyxt{|~q~z{~udxtt}pvyr{rw{kafkW}iZdrqyoPrrzuj_rhPmyo|tt}zy}gtVnvv|yy|{|zmkpqslvc{zqkz~hqxh[Z]eup]^uqesvmmcWlshaTVR`p|maidgsb\\efb_`]acgZXieppZ`gdVinkwwyul_jlqlZesjq~oRfn_nj[Xmtrvuuumhkdhkixrqt|sxmljkyxkkpxuwuc[YZccWLPGMYSPWOQPX[h^do_oi[gjTVibiVZVSZlkaMPOYW^ik^o}srtyugpukpxvedd_T^RROKSa_edqfal`^]hotjh[NV]USc}hfgs`G^ob^VHL[ca]dnzc]]UX[j`\\ghdSHWch\\IYssahyxywmehlhmxz|x{|}}szyx{ktrqtperjfjymz_Rycagu|akw}tXTdmVYdnnNKOVZYcc_zm[b`giikwW^~vkutzcgedh||oyljWekzt_]FTq|}|fmxxJ\\hv`Ns|wfbdftwTqcYZgVMgXZ[YgYen[_t_gpjX|hf_roeqpu{l`YVjkoz~nt}n{{}yzsoa`mrc^gjkklnkpsnhgjor^\\Ybcduqg`Wbp_XkkuyW\\bhhjliat~vjjdfqg}vg\\ailbe\\MMTATl]GJZiedfeilncl|j`vwgmwps}xpgl{sj||vq^c||vuwhroci~zwv}vqzzrsz~suzt}}~vt}z~|w{}}xvkv~|wltvyzf_uxo|annlcla[m~vq[e~qr|yykytizxxygvyzz~}vxovx}}yhknrwne_voif^YLMSiqs}||qwmd|tdfsmgb`jth_ozini[YVN[_Rgriuvetts{jmr}|Wb}yptrvlgoghdc]rzeu}omsypkronoqvxyvskqz|ysnffhrtfmrnrjadigny}rlnvv]k{giproiw}w{jcfgrtgjw~pkzyusrprwzyz{|opl~w{wxvuqpqq{~|{w{~}ȿſľĿ¿»ĺGEBGMOPRMFBB>:<GMEA;CPQC4/7@A???@@AAABKTQIDIWaeec_XTUUW]cmnbcfdbcekt{zptvpjlyznkrz{vqolhnsqqmdcnwtnpmigcgpsyzxsmnrsupnplimtmYwfgmvztnhbedagqslemzsgkqpnligggeekohegfikid_dmjfcakw{ystwl`fjgopdiuremtde__pphhqstuohdtxqstvtptrr{zkltnmrmjopjikiow{yttrv}zv}zoqqkjnsv|~}|xwy|sowu~xi|tv|xouqo~~}xu{kbdoVzjXgtqxpSmsutjduj`yz|~ru{y~}yv|j{Wlkt~~zx{z}tnlossqtb}ypovlrud\\Z]fpjY]ylarumjWToqg~`QSRar~l^a_hn`Yab_^[YY[aSSdbpfQ_hdWhrlxwyvl_lkskVfpfnzqParakkVTntpssuwiglxagicrznrsvotjkgm~xmmuwyylb\\UZ^\\SETFObTNQGOS\\aw]poavZht_Qagc_RXURehi_LIMS]bcb^o}rorkbntiuqcqw_Sa[VSNU^`bcqsjif`UaknmiaOZ\\[PZ{i`cpeGUhaWWJKX\\\\W[exo\\WUXXcbYcpgQCJ[`VEZsnfsuqwxma`efkt{{w|x{yy||syy}~xz|nmrg|qkclk_h{j{^Oxd[gvq^ko~{rTR\\jWXdokKEISgXcc]tfV[adfcqnNbzriwtyddaekoxmgVmtu|zihwN^u}yxsrypJccr`Gqxxftlgr}]nq^bcTFeiZ\\Ydahdbesg`~iZus\\^|rkpuwpjY\\ylxwuxxyxonvuqlkq||ryur|r|zjkkneszkmeezu^ikjyr\\`lvxojbq|k|xmelnw|gelwp\\j^XNaR\\iXPMYidafdkho^hzmaptgjtoo~wmdkytgsywn[dz{vvtx|lapkXp~ypv|~qn{npv|xuzzzz}vx~|}zq|ww|uq{zuqrlysicmswofogdiWUowu}char|xhvt`rvvsqt}trz~~{vyrwv{}}|ijmrzqgj|bkl^OIOapqvy{zorfe|qadvpffbgth_v}snpg`^UclYdwpvxgqxx|hru~en|}oow{nnpgiiebztawusomsnmqoosxuwzzxtv~xqneaerucbikoja`gfmzqiliiuWft^hqnmdtmrx`^bcq}o`evwii{~yussrruzxxzsmpf}syuwxvmmsq}{{}~}ʿºĽľſº¾ʾMIGSXSPNHDC@?@FJH=9<NSD5/1<B@>>?>?@ABHMPMDCO[`ccc[USTX^`doj`dda`ablvywotspilywnmrz{tpnjgmrrnjcfqvpjljedbipsvvtrkkrsrnnlilqug^~clqtwtnfbdccirsicpymelpllmjheeehnkgighjkga\\bjdbbbmxyvttvk`hjgpndjoicop`b_bplcisrsqfagzsvxvyupuuw|{ompryujjnmifgkrxysrttx|vx|knskjlrvz{yyyxwxymow{uosztyststwmu}zv{macoZv~pUjvm{vnUcuwvkq|quyypjox}zvr{m\\jcqz~|zwzqrqmsqrxf}{morlqr^^Z]fofV^ve]rojdPYomg~]ONQbsiYXYhk\\X[[]]UQUV[QP`am_M^hgYjwktyytm`hkrgTgqfkx~uS[schnURntnmqsvegmp]fh`qtrornnnfkemzqpxyyrji]RZZ\\UGTSRgZMLFWXchxhyhirixsR^eddURTSZe^lWHCJPf^\\_br{tnq{gcnnnlcw{eZhk]ZZ[\\]bdfptlf^ZZiklhfR\\a^PSmxk]^kdNSabWNLRRW\\SP]qt[SVYZ_eT\\oiQ@BTTQGUrgo{phtxkYYbejvyz|}{xyy}xyzqvzz}wvxv{qhpbt{ohbfj[e{jy\\NudZgum[lm{xoQPXg[WbphHDEWqVcfWhaRV`cc^qeKavqwx}hwswc__inz{yptocYt{nx}p[ozn{mOhZjjKo{xkocnfrsfk`UIbr]eZgifahjssdi\\tx_ivsrttpeS^|q|wyyzxvtnvtu}{q}|{wr{zlropujjqv}ummyytqnjrxmrywvfnfjZdZipYZRZjcdfafbjW]uofookouol|ticl}ukpqwp\\hz|~rwu}yqamjVw}}vsmx~{}}stvlozzu{~xw~v~~|uw|oyvs|tlxjjmomnm{yanddfOYwxpunk\\u}v{~is~u^gzpnwr|unx{ztzwwvy{~oklr}wo||nnso\\NUanssvx{~spl`e{n]fsnfgfjulj|~~orrkfapz`c|vvxhq{|htwqwzoq~}quugkrik~lhxpqmgmploqqwzxyyy~vmmfdfsx`Xehkm_\\ddpxldfcd}pVk}jWgqljatwdppYZ]bs|k[dtrhiz}{yywtwrvy}zuv|rksbzrzux|wkotq}žźĻýýſº¾ŻVUW[UPOMJGC@DHGFC:6CVJ3+07@A>><;;;<>CLNLE?GX\\_`cbVPPSZecepg`fb^^_cmyyuptpsglxuooryyspmhfmrplgdhsvmgjgbcdimprrrpiinqnnmhiorsafqeprqurlgdecckspgfsshgkkglokfbbcikgopehljd]Yah```bnyvsussiaiigplfjicdlg[_]dnfdmtppj]]i~zrytvztqux|zolt~|ojkkmh_bnrqolpvx{{u}|joumjkptvwuuwwvuumq{|w}}|wxj{}vt~lnxsrl}~{~xxusafoap{wvUiqkxqk_U{w|l|~zx~~sl`gyyurlzodgao~vxwrw{pvvjssocxjilkpsZ_Z\\enbObw^[qli`L^ogdYLIR`ueWQUfhXVXVYXQMNPVOP_ahZJ`kjcp|gl{zomcelqfVgtjmz{yYTtiepUTjmkhmpu`ipjZee^rtuisxgpgcnenzrnx|xmlqbX_^`YLYcZh[SIPe`ltqr{rnu|kUl[bfMPPU_Z^kMFEJ[dTYaiuwnio~xkkkmq|~ihwzkemwi`dd^]hlddmqgb`_hcehkYWi`WJ`rj^XedVY_b`MEWQT[OHRhp\\USU`bhSWjmO=>IMKEOj`}~japykUR^dg{t|w}|}}zxwu{yuytou{}zwqpmr{uek`ixoe``iW`{hu[LseWgtmYikwvhKMZf_W\\ohEDD`wTbhZ]_TV^a^Xr]LaunpsziysvcY[ttprrxtqYe}uspsf~l^jVds[pzwslcnxuukpa_Wdqcvblmefmstpi`m|e{xszptqp`M`{tx}~{zmy~z{{zzsyzvro}{~~yx~}|{}voix~uv~ywvkhogg\\ow`e`_k`fm\\]_cSXsskojouxqjwqgeo}pvrswcj~~~x}yyvxho}m\\{x{{ioz|x{zwqpu|xwts~|w~x~zxtwm|w}jgj{rcpfo~m`j^jaM`~snuynev~u{xkq}u`_xnd{oxvjvwvs}{ywzxx~unps~y|qwqtg`ipwvuww}}soojbfyo[gqniilpuot~~rszyxs|ge|yzkrzlzt}||wsuy{xruwqx~lu{mnlfjplotw{z~zskrmmlv{`Ydagp`Xacosf]b`dxfXpwaReplfatl[niVXWdwyfXcsnfnz||yy}wvzqvyx~rr{qivcqtuz|quzu|}ǾŻ¼Ļÿǿ]]^[PR[XLC@BFJHDCDEQQ:++3<=;<<:899:?HLJD?@Q]]^`b_SNRV`jcgrgbh_\\^ahr|zsrqmthlxsppryyrqmgekppjdektvkehebcgjjlnprpihlkkniekqro]mihpootrkefhcentniitlcgjffklgdb^amjgvqbhni`XXbe]_`dowqovtpgcjfgrmijcbdkcZ^]dicfptmkf]bnsqunrwsrw}uko}xonhgphZ`lmjhiqwxzwvxipxokjptvuttuwussrv||~{nwwx|ztwpj~{zqr~jkzxonz{~}}x~~zzmxbkomvwnw\\_nnnveoUs}xswxjkZ^wvnkhzoygc\\owv~y~{swoszxpx|mrypanibgxnntY^[[bi]MguUWohbVKdmdg~UJCSbx|^UMTdcWTVQRTMFGNSKL\\`cTJclnqvda|oe`elpi^hvoo~|x_Rqpht[Xegienro]ordVecZwnnfxperbdqak~ywmgw{wkqygalhf_Vgnfka`Oaqix{lt}i~|bfhXi_IMNW_UddIFEMdYMVckpnihnwzqpioouwhmz{rnl~xljlgdmrkdglhecfnb]dl`Ofd_KVil^Q[dXYd\\hYAUYVYOAG\\gb_URfjiWRbnQ:=DGG?O`Z{cbovnVK\\dg{uqzs{}~{{|souvp~oouyx{}slkfoxtdfa`spd_[fZ[|moz]KtdVhqo[cjtt`EJ`ka\\VkkDAFdxUbh_W_RX^]VQqVNfqijkvmxwt_QZ{ryljtwlPrz||{tkztqgUgznsvxx}mhmx{worcjgjjjlnuhoq{xwkgm}hukqktor|aM_tux~ww~~yv|{}z{w{{u|vhr}wuy|uwfglgpakwhlifk[cuVRZ`U[tuoqhs{wntqilup~txmf|}{vuzpqw~rg{~u|{gqz{{v{}unt|~vy~nqsq}y{{jz~~tohx{^hlgrvdab\\m[Mipjuvpx{~u~~}wkp|ta]sl^~pquessrp~{xuwv|~{tuv|tv~ouowzzyzyx}zrrpmigvtdouriht{wt|yzokz{pzwr~o~vxz~~}}|s|vorqlkroqy{toxurp~|_^f]eq`U^cmmaX]]eu^XpnWNbmfaeraVneUVSh{r\\Ucoiequwy{{y}ssxv}ro{pkvdiuw}vy|~Ƚɿĺź¾ľɾccc]W]aUHDDFKNMJKQRS?*+39<99<96787<FJIE?>KZ[[`a_\\QOSXgj_grfdh^[^clr|zsrpmuhlwrppryyrqmecipqg`elssieeaacihhlinsphhigjnfcnqolYjkjrmorqiciidjrqljjqf_cebekheea\\cljpzkblme[V[`[[b_boslksuneejejsmmi]_eh`[^\\cdaiqrkhc_gv|orphqvrqx}olytroajtcW`kgggiqvwwuztkqxnkjrwvrqrvwsrsw{|ywqqstqutqtkn|{z{|xplr{ljxxlnty{}w}}}z~z{|xs~{kwcqorw|htfTgwhvbvhpuwuv|{p`bZVorfacxjok^Xlyn~{yz~vzlntupxrn|vu~cfi\\cprirY[Z[^bZNjoLTnb\\NLjici}tPICTd}wUNHTb`WUSLMPIBEMOGI[c_NKfqtx{hVxz]Ximokbkvmr}veXoqkud`bcdeqsjburaTf__xtehiwgfs`ho]lxusedutrlvvdpxjigiotipjj\\qx{~xkx|gwdydhoYNKRSXTfULIMY^RKUelkhhkp~|lnnmlswnryuqsn|sosrmrqmgfdfeehum\\XdgRYfcPP[caPPdYOf[ddHR\\\\XQ>BS__hWRfgdaUZjQ7GEAF>QXX~bgnplUK^bjymsytz}ww{{mmqqjympu}vs|woigcmqre_c[lucZTcaWytis`KsdTfjvr]`glm]CFbkb^WerC>Ff~^bf`SaQV[[QLpxYObmefhopru~nYI`zjqk`{|w^X{~w}nw{}luk[djyw|sqivxsypvljhlf~xq}nyv{w~lplstemhqmxufN[myv}}}ww~ww{z|}~~pk{|rx{wyvtcejhsijskpfgmYYw\\HRZX\\v~rwi}~tsrnt{twvvh{~uuxzxomyzw{{x~~ndrx{ztz}vrxx}y}wktsrt|yz~}|{sxvu~tn|c\\jcith]`X_kZTp}zojw~wut}wz{~zik|vc]omY|sorarpll{|vz~ovpz{}y}wlvt|zxy~}wvsroiu|sz}shqu{~|o{~{y|~o|zw}xwx|upvqt|~uv{wq}chi_ftaV_fmg]V[Zbo[\\shOK_h_\\lszxWTm`TUPm}fSWeideqou~}xz}z|upwuxtn}pnrji}~y}}}½Ⱦøƿ÷½ǽfed`aaVHFIMRTTRQQQRG1*3:;;:<=85249AGHFA<DT\\X\\aa]VQQT]lj^iphhf\\X^dnqyztqnlsflurporyypplcagoqd]dlrneec\\`imedhgmsnefebgnddmolfWhmmmlopnhdiigosnkjlnb^``bgjgee`\\elisyhdmjbXT^^S[e^^mrhfqtnefhdlsnqgW\\eg\\X^\\_a`irpihebjyvmsjeswrrxwlrtyoaqvcXbjefjlrtrstx~rlqvnkmrtrpqqvyrsx}yyutquzqxoqsvvrpkqxvvwvriltxlmvsni~xvy}zzy}{tus}{x~y|nx~|iscxots|mspXZxmqcqsty{|q~z|l]ZXQeo`X^vgg|k[Vhri~|ry~jgprmsyizzovc_zjV]htcp\\TWZ[]VOihFUl]VKSodbl|nMHHYgrQLER`^XVOGHKHB@EGAH^cWGPmty|uSqaYlpplcqzlwzh_ptjtrebcfjprpiwq~_Ve_gwf\\eoq]frcii_osqm^drmopwpg{~ijosvwiqronw|xsr~ll~tnvipdXUNVMTWeQQT]bQWV]knomoptvjqsklz{qttrqprzsvwwuurokgcdeedrvdTYd]UdeUOS\\^XK]]H_d^hTSXb_VA@N`a`aXbeaeYVaM:PE<BANOPzflhkiPN`couguvx{xooxyikkmio~lqvxsl|qmhdblmldVc\\ivcWN\\cRlvijaJqbScbko`_bb_[EAZd`dZ_sD:Bigdb]QaSQW[LKpt\\L[kdefoqlpygOHgsdkf]}wpVjxy|m~o~}mn~y~t}qg|zztnox{xeeswn~{st}ntmygllplsqkQVi{y~~|~uvwwuz|~pyyzs{n{swqe_ilnmkkeobam\\SniGKS[_{x~pytrqzyzp{n}{v{wtv{{hcu~~yxuywgcqtyxpxzxx{xzy~}mm|zjttss~x}vvyxy~qpfOfebms^Z_Ucgb`vwuqiwsnr{xuv~}{~idw{h]koXrvkq_noghywo{xhxluy|z~}~zy}zzzvrtoy~{x|{sx{yvyqx}r~x|{muqgjxe_cjqd\\UZZaj\\bvdIK^dVXsrtsQSkZQURrz]Q^fbbimfu~{zvx}~zzwnqvttn{pqnoo~zȽ¼ƾĿźeddb`[OJQUZ][ZWVRPN=149===:;85636=ACB@@@LTYZZ]\\YWUVX`lg`kqkhc\\\\_enptywqllpeltqopsyxnoiaafmod\\clpibaa\\^qn`bbemqkdd`]hladkkkdVg~okhjmnmecikkuqkkjmi_^__bgddgc^^fijutcemh_TS`ZSdeY_lpd`ntnffecmroreV[edYZ^Y\\aahrnehkgiuqkoceuursx~pm|{}hctpb^glgjnlppmprtyzokqsnlmpqpnpqvwru{ztwpsqnnurhnrvvtrnmrtsrqoqjow}mnxpvqj~}w||zxy}py}pk{yrqwyxzjuyy|~jkcvur{{yphYlqolgywxy{i}|{|tdUWO]o_RYrihueVVfmioiemqjj~ktyjobYsiNUc}s`n^OW]YTRQiaCWkWSO]m`ekykKHP[kkQKGQZ[XTL@CJG?;BE>GcdPAVwyyw\\hmcmrokdu}lvj`yvgz|gfgjkmvxmvn|w^Vfell\\XdsgXeoegfbqmlfYajhnqsmjzdipwvskmvoqxoqs}tho{}}tknm[]\\SWUX[k]V`n_Jbdfnpnmv{yxnptltzrvswrouvzuvvsqtoihfefckpd]RW]W`bYMPXZ\\QV[LVi^gaSS`_\\E:KceTgmhd`f_UYM<UK<@CHLRy}fhbidKRagqodww|{zqmfryjkfglgzymtzushzqjeaaklfcObagvdVMQ`Scue`^Ln_Pa[bl_Za_ZYK@U`_i`_pD;?dnk^UU\\YLTYGMlo_JVhdebkmemw^JIlgcj[[wtwl]wnxop|z}jpnf}wx~xvwelpytx~qsqnkwqmmrkTUl~~z~zwx|yxt{|y}{yx{m{prpn\\dkilha[ma_g]WbpOJS]f{}~y|wwtxs~vwwov{umpxv^Zpz{wrqwreclny~sjwsxyz{xuu~yhsvyrgvnkqvvtysruyz}}}os\\Yg_aonYXbXdgllxuqok~u|}|mipwwqpz{{t~m`oyj`gk[lwi|o[goefuviyti{ku{y~z{}|yv|xtx}}zwyzyu~}|v}{v{tlo}jekbnh\\V^^\\e_gvaEK\\_O[{npqPQfVNVXusZV_a\\ciedx|}}w~vwvyzvvrohxsrmvqrmq{|~Ĺù½ýeddb_YTY`aca_a]YSNKB:=;>?>:716;<?@B@=;?IQTW[ZZYUXZY[emfbmrnha\\_`flpsy{skknaltpoqtzwlkf`acmoc\\bkne^^_[dwj^\\]dlnhcc^[kl^digkcVf|pjeeinmb`jmoxnhkioc]_``cb]be_\\_ghmzp`fkf[RXaUWobSamk_^ntleecdrrmsdV\\c_V\\^T\\bbipickpigoliiahsrssw{wmq}~}dfvldglmlqnilmklnrxuklqpnmmnoomoqwurwwpuuosqfkv{rkpquxynsrlprpooliqlp{snzsgkox}xvw~{{}ss~xzz{ldvvmjsy{}uugsvy|z~qbc|wt|nojnttxe}z}~zuud}~xr}kTRNZm^MRjjio`PVdmsv|}hemqgarppvgiaUkeLP`xq_i\\NX_VNPVj\\AYjQPVbe]ijveGJV]m}hNFHRUVXRI@BHG=:AB=MmeIA`~{{r{mfxqrrmhk|~mxmbvl}mljmlmxpukxu^Yjkf`STel`W`jgb`fogi]V_aenhnjl|p_houqpnjmpn~minuvkfqt}hfrm^_a[Ub_^riZm{[Mnnjqsnmx{zrourw|zuzqusmuxyotxnpwujkkhhgji_`\\QOZ[_]KKRX]UPWOWma_fQO]`fR<G[gVbmq`ahiTSNEWODFIFM[ywc_[hbOS_ltle~}{wwol\\n{nlaeowewuqz{xuiyth`\\_klf`O^efreXNG]X^rbWZMl|]N[T[i^Vc^SYTEV^`nbaoG<@]tlYQZVaLQY@Pkj^JQ`dg^cd_orPIMj`hgTf~lquhgtftcx~spypxmpo|w{{ukv{w{wqqtvmxto~sbbyvy~yy~vzzz~zys~}~|~y{z|t{onqxcdhblf\\Tgb_d^YZkYO[gm|~z{yv~yyq~~rioxtglwu\\Vhqtsnkqlc^bhzwnfu~mxwz~wwnq|qf{}kpleugiwnyxpzrqoqouz}|{}|rkeb^liZ]m^gktwusojmzzquz{xgfnrvmiur|wj{p]fvmcdebdxgwnYb~odesxeuplyityrx}y}zvwx}}}|vz||z~}{w{~yuukfsWgs_W]_\\cakuaEJZXLb}glpPQbNIYewfW\\^^Zdk]c{wz|uyuyuqtspmpeyvpmqssnvx}Ƽ¿Ϳ¿dcca]\\`fghgcee`YUQMFDADA@?<68;?CCA@@=<ALSSU\\XXWVZ]\\]hmccnrng`\\``hmprxqjlh^msooqvysgib_`cnk_[ckj`^]]\\psd\\X[fmkeb`\\Ykj\\cffk`Vg{pgcdgnk``losufijjpb[__ab]Y`a\\^bijsukbgkeXTa_Scl[Tcqi[_nskdeadvqmucU\\a\\V^^S^gcjmdbopggihkd`loprrvzwjrzzitxiekppsoiikmlkntvnjnonmmlnonmnrwurwttvtqrrinuvslqqs{vrlsqjqrnkmkdqmp~tlwwfekuttsz~yzupytwrzkavvliu{|ytsfrvx{j`muvt|ip{xuyzs}}|ouoc}qpx~oR@NY^]LSfjim`OUcp|s~gfmrg^k}tipfc`SgcHMbup^fZNY_VOLWlX@[iRIXjc^gkw_CIX^o{bI>IWOQ[QMDBHG<8>@AUs^KOmw{sxwi|wqtkfo~m{rgqwztnmontvstjwt^bmj_XTUdeYWake_`hke_YV]]ck`ijmwi]onnlmmgjpmdfoujehnt~dgtn``dc_ah_|j^uXTtojrrmmx{zsovuwzzv{pqqrs{yxotxlqxykllliklh^_eWDX^_^LHPV\\ZTTQUoe[gTN]^o]AF\\j[]hv\\_hrVQPRUPTRSJK_rk\\[XgcQS^rwlc{wungQk{qlYjpqfrqv|~z|vnyug^W_klf^P^idne\\SGY]_n`UWOly[LWQRf^Uc]RZ[ET]`qbcnJ<Ab{|hWQXNhOPW>TglWGO\\aeZ`^\\o`LFUeaohPqulougqlcocxygqrrjotvuzyz}izzx~pqrsx|xspywtzp~x~~tzzx|zt{}~|{z|y|{{pks}kdn\\mhYQce^`c\\ZcbN^pr~z||yz~{zpv|thjutejvt[Vdipoijoic[Zcyrhdqzkuty~rwjm|fe}y]leetahvnnyrkorqlknkv}|~qoebjg\\nsctn~qtsifmvulntyv}cenovieqmwvavr[eslcdcdazgtlW^{ocdq~eqllvg~umiz~{y|~vx}t~~~{~~~v{}~z~|{u~{wyne}b]pcXZ^_^hwj\\LLYWOjybjpQQ\\IFYnvZQ_^\\YdiZe}tz|rsqyulpokkodwyolossqwyûÿ¾¾üƿ̿ÿĿbbbb_adehkgghe]ZYZTJIHOHBABACBA@?@?EIGIQSTUZXXYZbb]_rm^fproh`]aahmoowpfhe^mrnorwyoega_aeni_[cif^\\^]axo_[UZemic`]XYmi[`dgi\\Wi{pcachog\\_mopndigkpaZ^`caWY`]]_biosqkegldX]gXVkeUXeofZ`osjbeafvmlucU^aWW`\\Sckekh_dpjchfci`cpnrpnwxsktx|tmzuggouxtmghmmhhntskhomkjmollnnnrxusttsssqqqqovtmlmmsxqpkrphrqlmnmkpmo}{wnnkjjq}tqow}uzy~{}}z}~ul|}zsrl}|ma{zrostqit{z{v|l^tuvt}prw~{~}xi}`g|xiqy|pQ8OZVZM[ehej]MWbyv}g`lrgZdwteifb\\Qd`GM_ol]bZQZaVKMZlYB]eKL\\ic`eowWBKZ^pz`D9Q]MU^QRJBFF<>?<L[sWOduuztup~spwc`s~{o|tl{uxtpppssvrjxrakmcVTRU`^TTbk_ZbgdcXWVXWgg]bkmpf^fiiclfaglqr`gor`Yepx|lhfumaciiehlcvldu^Zvlhqnjmv|zztluvrz|yrqjlppt{wootktx}jlmllmpnaYe`IVmc_QCITZd^UO_siWc\\PTXgoOJLopYeza^gvYUTTSOic[GNdmcWWVf_QR]xxieytvo_Kh{ujVrnjgpmxx|{rzwg_S\\hkf]R`mcib`ZPW\\^jaUROktXLSJFccRa]RYeRR^atb`kP>Dcv{hYQVKhRNQAV^aMENR^_X]U]lRUS\\fevjTvmjnlizcbhgwldoqvpbx{nkwz~{uwurmuo{|~r~tnulxv{}szyy~}x{}{|~xxz~}}z|visjvbijXZhh]aicaZh[duu}{|~{~zyrtwytfgrschts[WcajmdimgaYTcvl`^logqnu|qsimw`d}m[h\\fl]ipkvyeq~xmnofefdwxx~}|}{znjol`txg{u{srqdckrqjgmxvxacpovgeohst^orZanjbcbbc}zeqjV\\ulagjhlgjwc{vfd{y{x~{xwyq{}}v{~~}x|~}~}|{xz}~~{z~qkeTiiZSZc^d{jXSPWQQos_hnYRUHDWqnNT`[YYffXn{sxzlfk{uiomfjmhvzolmrvz|t{¹¾Ź½¿ż¿Ž̾aaaccbeknjilmg`_ccXOTYSHEOMGGDA>>DGLLKQVUTUXWW[_ge`bui`mqrph`_cbimnnvobdb`lpmoswxmcfa^afpi][aec\\\\^]e{n\\YTYekfa^XTYpgX]bgbZXk{n_^cjlaY_nnqjbhgon]X`ce\\PW`^aaaissjigghd_bdUYkaU^hiaYansi^bbhtjmu`Wa`UZbZVglhjc_gne`gcadcgkoqilutokx}vro|sfhurmhmslefkushgokggnqkjnonsyutrrrsrppqsowtlmlnuupnnoohtrkuznqpporvz}hhjrsxynlszuyy}~w|{z~{{ttyz~{wjvu~|{{skhyqd}vosolw}wtynbuvu}~yw}}vwlfZswlds}zzpO=\\\\ORNgfcam[JXg}{xf\\fqiZ\\kqebbbWPd^HO^lkZ]\\X]c\\KQ\\l]Ne_FQ`fdddtwPEP_`pz]<:\\\\I]bT]QCEE=C?=V`r\\Yrw}vztux~trxa]{tp{~yovz~uusrrws{pjxphql[RQPSYVOUehYWdb_]UTWRRiaY_lnfc^]b`bj`\\di{d`gphRTeoyncdexm`flfaiofsqipwd]shgqignt~}wyvjrxpz{{lrffijk||trnljxxiokrpovqh[]`XTqk`[FEQWfhWNXyrW]iQJT_z_SC[b`xpjfk_ZWSTV|j`LRfj[RSRc[OP^zuglusyjSDfyzh[yhigoky|wz~u{xg_QXbjf]Talabad_X[WYebRLQjnTOKGC`hO[ZQTeaQ^bsb[gYCFamokdPPHgULIIZVVIBLJZXTYQ^gOYkjjmzm\\whdf[tzYedr{wzaaoryufdzdiv{|{|{gij~r|}uiqhstx|r{yy~~}y}vy}tuu{~y~{r}sxrimceywbfsin^ilq|{}y~|~}~xsrrrqeeprbirr[Yb]gk`gib^XRapg`Ygd_ignvmigon]i}}b`bWhb`hmiwqhy}enii`bYcxnr~{t~ztrrozp}|uxpmfcdqngfiuuu`bvqwdckcor]mtY_jhbcaacsvckgUXqg_jcmebjv`{u]c}|ux}{w~}|xwvnt|{yt}~}}y{{~qsz||~yup`klZO[fdb}sXYUTOYtlYit^RQFG\\oeIXeZVXhc]wzpvrg`g}vemjbhkkv|nkkry}{z}¹Ŀýĵ»ɾû̽abba_bmsnknqlhffieZ[ebUT\\VIEFCCFKRTNLSZXVVX\\XY]dlgahshhnostj`_eeinokto`ba`kmmnswwlad`^`gph\\[`ba[[`_h|lZWUXchc`\\RQ[reUZej_UYm{o\\Zbii[Vcropfafgql[ZadcUMW__cdaksngjhggfcaaX[i_Uajf]Zbnqh]adkrhpt^Zb^T]cZXdkih_^kl]\\d`]bfegpmdlrpmkw~xx}lsrgo~}somstiadlvrgjqj`dprjhnomszsrrvronprsqrzumnnruqqnmnnmtsmu|pumqsolz|i`pvtysmqvw{~{ys}wv}~uw~w~~xontyswzz{wxzi{rq{yvyz{mdz}o}kxkz}~~ywzpntxv}y}x|}up}wlniten_ezvn~zlTNb^QMXn_dluWJavy{|zhYanjVXchd^acRRc[MR^kjWX___gcMWamc]m[HXfhhhevpMLV`_ryX>JkaOgjYd]LJJ?E>Cflmgesxzuxvv|ysrsa_mnz|}pr~uuxrov~t{~llxqsvgUPRQPPOKXg_TZ_[^ZUUXPPhbY]qp`^]]``cf[^^ns[_glVIYhlp_aYisj_hn_Ygqdqtikmc`la`peeotx|uvxgkwoy{ympf`chdv{oplklzr}hrirrlysniY\\_Ztil[]HUS\\jdQJqy`Yq^GQ`wh^NIvelqvibe_^TNjj`WXeeWPMRcUPRdytlmoqw`GAexzgc}djfmk|u{zz{whaUV\\ff^W`lea_ea\\_ZV\\c\\OPinUOLHG\\jPVUQS^kU[ereWc]JK]dckmMFGjWHBQXKRLAEGSTPNUed]]zosvmbsad^J{{Rfbxzvy]`tywsbhxbkryty[lk|mw{vhmeq}}~st{r{zz}}~w|rq{ssxov|x{|pzuornylunhx|q}z|}yrqomnedpqcioq[\\aYek_eea]UP`mgbX_Z]c`hombfng]m}s^e[Yj\\`fhjqmry{w_mhd_\\Rjthp|ur|~vvz~w{~u}jnga^rkdghurs^f~zuafkepoZlrT[ie_b`_bipaidVXqb]j_qa_kx_}tXhwnwy|~|{~{wy{yytjnvv|ur~z|zt~wwy|~xlnvy~~~z~|rro_Zfjphx~\\Y\\TQewhWixg[PEOciYF]fVSVhkmzunrlc^f}taghafloz}nomtw||yw~ſýôú¿»ſ˻`ab]Zgtojnqnkihiijhmlb_ecUIGJLPUY\\_ST``XW^daYY_hlebnqgjkmu{j``eqjopip}o]`_[glmkowwk`b^\\`gpgZW]`_Y[bbfzkYXRWadb_WKP_qdRZil[TZn}pZXae_UWfpmncbcgrk[^bd^ONX`bbadooigihhjjda`Y]iaZcke\\\\fnne]aekqiss^]b\\S]bZZbjid]bogUXb\\Zeg`eogblnkmltxrtvlgxqmxxrpqskaalwxnjro]Yfsrhgmnouxprvxpnnprqnt|smoqvtoqpoonoqtntywvttxmsyz{|pbevwtsoppwy{w}ty}rsz{|rs}~t||}ynxmlxtttsrrt{l|sqwqmy~~vl~vllw}yoq|wr{s}z}st|wkq|phyvs_pxbZmmtyig^ZmRQbj_uvOMs}|x|{sy{f[`fkUSabaW\\gPOg_R\\_kiUVafalgScfpmhs[K`psiglxgMQ[eartYM^xjWovcmo[KKJODQuqgqpq|}nsyz|~unoqb_||klx{{lo{xmpvqjwuwwbowr|v]STUPLKJKZ_XVZZ[^W[_\\RQljZawi_`\\heca`^]_][^f`HJaghbWYTlifbgj[T`kaswehcagdY^ncgopqzpuwffqv}yxljd_^g`p|jjielwiwhrejnhytsv^]ecvpo_^_\\XTbk\\KdxdTmhKOctg[YIv|okixt]gbcXRxgc^Zdh[TQ[_KWYgx{lgilpV?Dftufm}eibnm~}qzrxjge_\\_e_\\_klg_bfb^_\\]dc[Wfo[VPLNWcRWRXUYk]]aqeU]\\QOU`TckNBEkZD@YTFUPADFMUKQjpsdnytsliq[cTPwySiey|uyVa}uo`nreno{rs{{z}euvx{in~zjieqyw|~ypqyr|z{~|x|qkzoro~isz|}x{{|xysys||~l}x~z}}yrtnjkbgooefop]_b\\gj`cccaQOchbkYWW]][aolWfp`]m|j^jW[i^bcenluywxy}lekk`]Y[qijp{qv{~{|y}xzdphcaqidffspqZrrdokkvnZjpQVha\\a[]abi\\fdX\\s_^lan[ao}`}uVnuzjwv||v|yzzsxwuoohl~}povqs{uw}m|vos~vontxzwz}u}y}}~zqnmprut|m^e]\\mvo]hrgZIVggVKdfRRWjyytoosh\\Zezs``fdemt|twpvv{|wr~~x}~øŷú¸ʾüʸ_`_^dlnijppoidfloruqjhibWPQTWY]eggd\\bg^Y^ji`Z^eiibhuoiijmv}j^agvlpphkxnY\\][cmnhktvmbb[Z_fogXUZ^^WWfef{l\\YNV^baZNHUco`P`ogVUZnoXYbaXT\\immkabahtjZ`fdZJL[ca_^gsmfhhfjmifgaV\\if^cje[_illc[afkoisp`a`ZU^_Z\\`kl`[gk_RW`XZii^akcckhglmrsnqlch{}stz~}wonnlhhoz|pmuueYcktmceklptqpx|vooqrunls~qkosvqlpqpqnposnptxyxwvnutsstxmgvzs{wqpqyw~|q~{quwoswuw}pq{z}{sw|{z|||rwjfxzpmkkjhn|jxwzpnsmgyywpw{{z~unlfx~p|~z}rry|phvwlpzq{SrlX]x{bx}~t~c^lL]gjppJSvxz{zztwsxmb_a`i[Ra^_U\\lRJij[bdogSZfjerk\\plywpwXQk{zjksveX\\bgaovgaps^uosuaQVZ]O`wo{vp}{kw}z}z{}qmopa`|xegwv}wilxqfjqjdvtyj^swt|kWY[WRKFHQWWZWW[^XUcc`VYtn]otejd^pk^X_`XuhW[^cPDSdd`UTMXg^cigaZRRc`sq^f`[e\\R_l`glliumwviim|vukfa^Zb`nzfedbapdphpbajgvttydahjn{jgXig\\[[lgU`tdOelXLdpiYdRozqxioy]cgd]`zsji[Xfma\\Y^RFb^i}~ef{_ikM8Kkoogt}if`on|p~zk}{kjpng`ba]_jnmeafh`[adgeechoc`_VUY`UYTd^\\de`YkbRUXPMX]JWgRBBg]D@\\VHZ[JEBPe[p~utx|xskolScYUzvTnlvztwPdwibppiqlw}zs}{|~n~u}z~{z|q~qrx}pifwz}}mdeourz}molvpyyxwy|{}z}pbukoi}cpvz{}|r~}~~{{zzk~z}{}~ztukgj`hpkghwtb^cdmicgihdQTnebx^YXUTU[scQlmZ^jxdhqV]edecehqzutqzjljma_anocns|q~~{v{wverjggmfedgskm]}}nnwot{q\\foPQc`Z`[]`bi\\df[cx[^rdiXgwf{x\\swxjvtz|~}t{wsxuqxutiiei|zliqovys~{u~hywlt~{tuwyyx{~syw||{}|xwvx{z|thnpnsv{gjwspZ\\lhXWkeSSXn|ompsh]\\g~|f`mpfkz|r}z|yzyss}{uy}v~¼¼ȾŸº»ùɼºǷa`_ekjhjmnnmgagsvrmjlnfZWY]]^ahrskfjlc^djni_afhijirxmiijltzi\\bkyprqfgrlYZZY_oqdfpundbXW_fneWSX^^SWjfi~m]YLT]b_SIKYfl[Qfp^UX\\p}iTZa]UWdlhlf\\`cotdZdg`VIL^b`^ansighfcjngjl_TZikaahe\\aikmd[chlnksnbd`YW_][^`ln`]geYPV]UZhf^`ecehdeknpoplcelx{stz}|tjlmouy|}wmt}q_^mysebgijmpnu~znmruuwpkrzrlqvwpmnprsnomronrtvxwnwyorpmzvsx{uy{pmqxsyps{ylov}}krumpznr{uy~wpuyyyy{|}y}ihtzqhdccbi}xero}}rkilkl{|~pwu{yrul{czju|yumsy~rkhuwqutofOsw_P_~wZ||pYaeIigpfKa~svzz{uxqqqqvd[^cadbV\\^_U[qXGevfgiqcUcnljyrjyvzvwUXt~krzxmf_ejcq~vswjxuvwe[dkk_q|r||r{zh|yw|wxwliom_bzv`cumushktkefkfbs|ruv_`tssr_U]^ZVJBLZVX]VX^bRZn[f_h|pfvijw_bsh^VgYanY^Wd[DD^a[WLLH^\\Vdqd\\[OO_]lhYe[W\\UN_f\\kiearjyvnqm}zrrkcc[TZ_nyeed_U_climc]ggmrvvhhgjiyje`ijhm]ekcbmfT\\ccP`ek`h`ntq~ocs^YgjejukpkRUfqhbZWISietx^noZjeC<Ujjlmv}ibamjpvyjumjqvslfg\\ajnomihke]fgmodnsqjeleZ]ka]]qii^kdVeZPPSUPXcDPbWC=_`FAXYL]iPDIa~||}z~wnsnUbh\\xpXlyszrxQm~chksposn{osnwzxzh|h|z~pzt{xuzzziznwu~jkciz~z}o_alo{ow{e}lgsmqsvs~ww~|yrvxj^mfliw|]kquzlx}}{ym{|~}|}|ytvifk_nsjkl}si`goskelumeYevjq{n`[QNR_qYWreY]cs[uyX\\fphadbywqo{mohpdfp|gmtxy~~wx|trmrllmigddlsfigqlz|xx|xcfmRP^^[aaabalhfj_j{de{kf[qq{{j{{~oyww~yyy|tstuywquiiegzyeepnwxw{{wt}~hxxny}|{{|x{w|z|{||{{xz}{|}unqwyyywq|yk_qo[`reTWbzwplqxqc`kpivznn}z}y~|swww{}s|xĿú½¿ÿ¾żþ¾ùſǻĴdccghghlnmiceimpqjfhki_[`ddacmutplmtiairqphbijfkqrxwmiiikrxj[dn|tpnbamkYXXTZqtadmtnd^UU^flaTRWZZQZnhlm]YJR]cZLFO]hjYWlkVVZ`rvaRZ\\WT[fhcjb[_fro^]ieVNJR`b^_htpkkhc`ijdon[T^mqc_jiadikne\\cfkomsnef`ZZ_\\[`alna^ebVLQXSZc\\]abggcbdhijkmd^ckvystzykfksy|yvuruzf_mtvj`cjhilnszzmenxwustmsuqnptspnoqpojlmrqkoruxwm|wlrojy{}z{vuxljosox|pty~tjnyvvgqqgjulszpxyrlryx|yvsy}kkpwsid_]\\bxvbjuzhrqjgdfmq}~~zzr|zwr|pqzu}hxmgo|y~gjt{}~voagt}xss}qRNxnQLc~oRzwlRdcQdgzZXtv|{s{yyynstmkouj_Yhi_gaW^bX^vbLf|spoqc\\lsqq~|u~}uWdz~ov{}o]flev}v}xzzjepvqhzvruud}vsx|pspgdkf_busZ`pcp}negpfcdddcpvnogZeologWVaa`\\IBX`Yb]Y[bfPiuXmkvrprbzzXeqi`\\jVxWc`XgL<Fc[QMJEL]TWioW\\aNS[WhdVdYSQNK`]Yoi\\]qfy|uuttmokgeTOQ\\oxaba^QT]fkjdZaaaouojlehhrhafjorx^]jj`lj^U]cZ^bghamkotvp`e]VfregnirbMWhwh_WQPjln~p^wb_m\\CI\\cgpsxzba_jfpjxpnrikrxvspjfoopttvqnglmk}pvxphsvdbwtjd{tucombbROS[eYXmEOYUI;XdD?V`H^pNQf|wvzmrtdaqhpf^e~s}|q~Sw^mfzvqsrtls~hvyusr{rjj|`p}tnq~tzto~xusdxrxs~~gz~m^b|}|x}sz\\_jisltzzyb{~edrmkmup~vswwqnqqe\\g`jkmx]ejqx{pu}u|yz}}~zqw~z{~yyyuuxidlbtxqprpqinwxmio~onnr{|ue_YSVlhXdq_[\\cp_w[crybeeo{znr}smkvis~|dz{|z|{vopnnprhhcfoqfiuln~}w|}lhnXU^_[enie]rzougptoqkd||{|t~}~}}|trqx}wnw}kmgg|zdhpkvx~xzst}~jz}x|t{|~x}|}}yx|}wu{|{}|uquw|~{wzwiyzghvj\\aqstsv~nkv|v}|v~}yr|z{|wuuľ¹ľƺ±eeefffjnoie`enokiffhg_[`dfggmxxqoqrmefswvqnlnkhovyztkijjmtwh_io{wmha]hkYXVUVrv_ckond[QT^fj_RRWWSO^phmj^XJQ]cVDCP]iiW\\obQXZbtoVPYVSS\\d`cg_[ahndWbl`VOKWbb]`msmklh`chekqdW[hrl_djgdgikoe]adjprtnih^X[^Z\\`bml]^d_RHORRZ`[]`ajh]^ccchhb[[bjuwru|~ofhlvutwwqmw~m_jwxq^]glggqtxzrfnvxxurprtoooopqnnopmmikrrqhlquwrpunolu{}}p|vuvkhnpowwp}zzy}njky{rqbpm`islsxmzvjnsxxyztkv|oiqwtofYXV`on\\cto_mmiebgpx}}|sqx|ysyymq|}mr{z~nivd`m|{~y~fiu~u~miThrwptoumIOxeGMhyYMzon{_i`\\ag{Xdu~tyvy|mmozlgoolf[kq^di\\`b^hsgUezsrqfhvytuz{m^n~zx|uranoozw}zgl|yppyz~upme}tntvispb_gb_apoW_m^oxjfcke_hcadipmg[XhgdjaUWadlfIMgb_icaYllT{udnuzzrtpltYppiedbbrXm]\\\\D8NeWKCA?MWP_fgQ[_QNRSgbTb[NSIK_XYqi[^oiw|vxwkmllZNMNZmw[_\\\\MQScmhcXZ\\Yauigfeeggeahlrzz]Zlf]lkdV[]agbdl^opnuumb\\[UgmaahinVQYryb^WRa|l}}ld}zVbhVBVabestzp]c]ke~oeurlzzkjpywy{{qyvvy{zurpwqy~tnykersr|z{ouppbSMamig^wPQOPJ@^dO>_jQjo\\xz|~}{~{esryfwpv]cY}lz~pd}fsfq{k}xp|jsrb}vvjksujob~v{wahurvwnsrsrlx{wmocu|qsv|zxnz{w^bq}zw|rv]Zibojryvudy{`bqmeirq}tor~}rmmnkc\\c^fjhq^_ej{zp~{{|uyw}}~y~uw{q|vxvquxkcpit~wsyqwst~{pmqrw{~phdd]cw`\\np_`]mlkv]lt`fi~zo||kilvx}|{uy|y|~|xwulpuqifbgniimnxw~ujsg\\`afguuk`sov}|um~|~~~uxw||sozynslh{zdktjuxvx~st}kv|y~~s}~~y}~wny}wuy{{||wrvxz~|ymnsxpdd~|}z}sz~z{z}~~}|}Ŀû¸Ľźȿcccddekqmd`cfhgdccdgd\\^degiotxussttjdluywrqollnsyywohilkmuvgeplxyhda]hkZWUQWtw\\agkldYNR]hi]QQVUKObqgmf^WHQ]aQ?BR]hhYgpXPYZdqeQOVVUU[`]ac[\\dgh^[hh[XPMYec\\cpqkkjf]eggrk^X^msf^fgehjhknc\\bfipvskih^Z]]Z^_bmhX]`[PHOPQY`b^[cngX\\cabda\\UYbkvvqt{ufhjluomrupq|t`ey~tfafkkdewxtsmmwyywtqppooosrnmlnpqmkjpsqqgkqssqrzrpmltwxwzzusukipppywpvpry{|jkvwnp}j`nd_honrxo{sgowwww}zrhq{xmrxusiWTT_kkX^meZjhhe`iu~|vz{zxfkzzwnkvx~fpyuls{thvm__pxxqtsfhv}zqxr`Rgpummgr\\ARpYFNjqKOuoozwej_^_lyqZtzuqpxz}zxjgoulbniilehrd^pa]iamrhYe~tzuls~yw}{~kdnx}{wrhuux|y~|}zhkzwqrrszvk_gqhpoeqo`\\da`aokV]gYmtgf`d`]g`acdkk`XWbb^a^WY_drkO[pecqpfa|haptj{wsrrq{o[|uijp_ubajZ_R<;_]OE?>;OOXcbWZTZULLRfaNZ^JNJN`Z[vj^anl{t|vmnlmSMNQ[fvUYVUHLP_mdbSSWOXoe`_`c_cc[ris|u[_lbdob`a[X\\efhh_lzqqtl_XVWkd[\\`mfMSapY]WUlzhlii~kRgcPHbb]dtsyg[c\\mh|mbrums}qhtywy}}|{t{{pzw~sit|yxx{svl]Qn{iml{hNM\\NNik\\Opyovu|s~w~ooswps~]cZyfspuuwjjzlxqsovulb{uu~hgpthy`nowmdajokzgnikngtyucjdn|yrp~xzzqyu|b_hw|vzqq_Vi_fgoxqrjwsZapm`hos{{}hlwxjhjibb]aZagcn_Xecte{zo{v|xxyxwj}trsmtyocsoxzst{{{~torsxmqqkjx{bnypcgfuwysexoinwuv|kcqszxr|x~~{v~x~z}|wiqytjechlemtvy||}zmwthjkqpyirzwx{}~}x}zur|~vyuoz}io|pwuvt|tt~nv|xx|~w~~|tz}{yy{||{xtvzz|~yuu}}vnk~~ÿſþĿ¿üźǽ»aaaceglnc[_hfc`_^_cfdbcfgimqsstvtokhltzztssljpsvxupiejkjnvsiqqfw}iaa^hl\\UOKWzyX_dhjfVJP_jh[PQTQJQfrgn~b]UGP^_L@HU^gfamhTT\\\\gk[LNTXYVZ\\\\_]U]fgaZ]gaWQLQ`jd\\fqpknmc]efpsd]\\boobaeegjhekn]Yddgrvnhhf]]^[[``akeS[]VQHPQOWbcYWeodV[`_^^\\WQXdovvpsynhmgksmjnqryxb_t}wmfhlnkgsxnqojtwxzxrnmnoqtttnjknqpkiloqrrfkqrqpppuqmjovvqysqrnmmkmznnpokt|tmm~veqxfanedfjqqxu{pfu~tvvzzpgowrrwxwlYQTbmjW^h_Zeagifkyz~swkutr__u{oairq{|blwsos{yjfxzc`koqpfpldgwqtsuptXQ`rtdfekP?WhJFLmhHRsletueeYX\\pxzvd`nu|krv|ts|necmnv^mhcuncli]obWigpqgYgy~r~{zziek}u~vyrovwy~wx|ywwkkvtqvpp}qtdXm{meo|hcok]\\`^^_ngX]^Wnqbfb_X]g\\^__gh[WX\\]ZZ[YY]`pmXfseezzgrfukvg{pqsnvidvktpi~x_h`]^I9TiSH=A<=IRfcYS_OP_PKOc_IR`JRMQe\\d~keelt{}sz}roprmOKOY[buTTPOBHM\\g\\YQOQLSfaZW[aXd]Zvkopo\\bg_ij\\^eVY_cgpeem~wmpk^VNVha[S]jZL[u|]X[V_rnkydgm~_WiYSVmk^eprsa\\a[mnzzkctuko{{cyz}x|r}wpz{tx|w{wral|nlruy]\\q]Uqoaxis~}rvssepa`_vanqy|xmauvirkswni_yrv|kanv|kw`elrfj[`kfvdjbehcq}wnXdckxtzm~u|}|ylz{~vg^btwwxpkaRi]bbkrmpmtiW`og_iiv{xggotddhc_c]`V^d`l_U_csa~ymxw{vxzx|sepnqitzrctu|{uwvrt~vz|lwzvy}g{ymqr{vrrryt~}j_xqyvoyz}{yy|xx}}~~~zygszymceiifn~m}z{n}~wp{yvrw}}wz|}zx~|y|ouyyy|vr{utrx|vx|~}|}~}~||{vv~|~~{x|zvwþ¸»þ»ĺǹ¼aa`bfjjd]^bf`][\\\\^cfccfhimpssqsvnddit|zuuvnglrtvunkjiihhqvtuyndzocb^gn`TKGUyyU\\cfffTGM_kgYOPRMGRgqhovZZSHQ`\\FBLU]eegm_T\\_^gdRJMV[ZTY\\XYVR_gc[T]eYSMKUenc^jnppml__ejwna_\\gsk_aegggd`jlYYeacswlfic]`_Y]d__ibR\\_VOIQOMWc_RYhn`T]^[YZWSS\\jsttsstjkqimsnhjrxwiZlwmhghondo{lltnosvz}tkhknptxqomijnonjjnnptykmnronosxojjnrsu|{sprqmhgmwhmlkkv}qrrzodtvikumokkts|{yjezpyyyxmfmu{vw{zsaQYgjh^ebYZb_goqq|xz||zwphmoo]Ymzjakrm|yblqtns~pcirm^hujfgan{gckqiqvxesoSOdywoacddG?[`@BIu\\DVr__sp`]RRVtysk]jvgryjswyniy~e_d_d{_ihbut]`k`lgWgloqgZi}rvvf`i~|szs|rnoqu|w}uswtqvmirrrqunmvkr_Ss~rhdpv^`ofZZ\\][^ldX[XTmm^de`UZfVWWZd`VYVW]USYYZ\\^mpcnrek~zhlisnuhpqjx{emtpzjr~nbi]eXENk^SA;E9AB`k`RVUGSeQMM^\\GNbSWXXgalnkei||sy~lptwkKKT`_awVPKL@FM\\`TROLOOQ^YSOX]TcUatnjclabedee^cdX]bditbdp~|kmi`RIP_fcQa`NSm}lXYSUeqgm|banzZ]cQY[qqaglojY_^Yrrqwjfytilwa|}||y~{sp~|~zvh{vomssg~z]ukyw^}ky{zjizq}`ci\\as_mqs~{tucqy}dtmptoi_vpt|o^puynob]jidnXYfdsy`c^`bamvrhS`ahps~kxn~{p}hv{{v~|o^etuvumfcNg^__gkjkmqeS`m``eeuzpgceqcbf_]d[^Q\\__hZPWhyh~urz~~w{wxmboknds|tbtzwux|xtt}}zyp~{jwyzyy~wj`~~tyvow|}z{{|ztx}yz{}{y|mt|}qfmkjijq{}luzz{uy~~u|}|~|yu|{{tz}x}|~~yw{~z¿üÿļľ¶½Ŀ¹ĺ÷»dcbdhie`_bb`XUUY]`cc_`ekmprsrsskebfqzxrsvmfipqqqniijjgfkstxxee{nb_]eodUHFRs{WYadddTEI_keWKMQKDRgninlSWOGSaT?AOX^efjjZU``[a\\LGNX]XQTVWVQT`a_WU^`SSPRYfk^^hmqnmj]_guveba`msh``ckhca`kkY[e^`rvkhhaad[Wcg[_k`S]bWNMQMLU`YN[mo]S\\[WWWUQSbrqprpoiamtkorhdnwxn^buzqjeeou^gslgvsnnluznjfimnqwympniijkjkknlouzmoqtjiouqghilnptxwqmonjefmsgljlpw|qwwtkixvnuytxrpvy~xik||nxvtxkakt|wzz|{mY^nkgfueU\\]^i|w}yy{uxv{|x|ykfikn^[iwialyslxsbosthrhbnhiasze^b`nracrigttjeyeTYn}npdba_CF]Z?@N}PEemUahh\\QKKSssm`[sqfjrjpys~tbtza[eTZwfc_\\s{[Uh_ilUkseofYknqsd\\h~}nqt~mfjiour{sozogspelpnkkzngmfr\\OyumibroV^jaZZY\\X\\gcVRSTliXajcV[eRQRV^XSYPR`VNUWY]]jpgppgo{wi~yroormfllk|}teu}qw{lzxgefbaURgdZX9?D8ALqdYTPFMb[WJEVYJQeaaa^nkvrkah~t}{iryzbNR]cdbuWJIG@FO[ZNMLHOPMWQMJSRSbXetrcZigea_bidf_d]fdls]]phigcKHJYnjU_WN^zwb\\SLXelhs\\\\wwRZYTa[sreiilaWdY[xti{ik{qfgsf~{y|~ts~qz{xhq~r}kix~la\\t}|wcbrz|okq[x^apck{rl}wol~zppwxluqrvujgi{q}w`qsumjh[{lbfo\\Oadk|s]][\\[`lprcU[`cit|{qti}ul~lu~y}uywt_f|vtupkf|kId^]\\bfhgjraNbi[aaftyxj^__ob`fZZgZ]LW[[cSM]xxzn|~|}zy~~|zvh_~ogmdo{vbs}~vvr}}tzts{||~w}rw{w}re{{wtpv{~|y~~}otyuxz~{y}~xy|}uovqoqgzo}~|sz{|yv{~|~{{}Ŀÿż¼¹Ļþeedefeccbb`[SQSX^cc^[]fmoqturtre^fpyumoumcfooklmjhhijfgqutock|k__`eofUHGQl}[X`abdSCH^keVIJOJCTgjjlfRWLEVaL9CRY_gkkfYYc]XWSFDO\\]URSSTSPT][YUV^[SUSU[gcV]fqrhoe\\_mpadahsmeb_fpibeelhY]bZaqrjhdagcUWgfXbm`U]bTPQMHKS\\TL\\np]RYVSSSPMUgpilqmib^msmokagvzqe^kvokg^dxi^ipensmlhjwvfadjkmszwpkffggeeijmkovwoqtogkqpidgikimsrqnlkgecgmphhjpru{tuttpo{urwywzspw|sju}wjqqrxi\\hqvzz~sdfunfso^bd^o}zssp{{u~z|~|jefhl^bgvkgipwktnbsrqdo{ebjbif|y]\\^`ol[dsfjypisza[gw{nvkc``KQ^Y@?[sMPkgW][bWIDEVshiX\\xzmeblhn}mo~}_~othVbRQmtbUUm~iS^\\ckWpw]ldXs}h~jmdXf~|hjpy{cYdbi{}povol{maqqbekidcqkhhapWS{qljesiP_e\\[XVZZ\\^`RNSVkcU`liY\\fPMPT[TNWPN`[MRWX[]iphmnjnurjwfopjffgfm{wpf}xmww{pbdbbZ[djZeQ2F@9EerZULCH\\_YU?BVZV^kkmlftu|uhdo{{wvis|x^V`jaiioWFGFAHO[SKKICNMIROLINKW`bjokhffjjX\\ihpf`m]a_rlW\\k}deedBHL[mfX[TUi{gZWGM[_giywV]{mMZY[f\\xqfkhh^]gTa~qe}fpzibdrxyy}{t~w~~~gm}~~wz^s{fvjcnz}tx}wc]lkqt`w}[~ibqjjwtf{q{mg{zj|usxwvw~}qrmwertoimt_xoeju^MadevpZX[UX`lnp^PT_bbvvqwri{or{xu}vywtumdh{}xrrnldyuI`\\]X_fhahqYLhdXb]fvxpgU_\\i`_gWYhV[MV[W\\TRly|vn{zwzx{|v~udZyoakfhwygq|}vw}kz{oyoqz}{p{{y~wzzv|tvizzxoyz~s~~rt~svxz}||{z||xxsuzl~t}~~}}}ty}~~}~}~»ÿŽüúż¼»eeddeeddb`[UUUX\\_`_]^agmoprunmfdbnvwkipqhgimhfijhffgghnttu~zjip{k`bcfkcUKKSg|aZb_bdQCI]jeSGILHEXgfijbQVJGX\\F:FT[ahkicW[d]TSMCDT^XRPPPROPTZWSQV[TNVVT\\h\\S_gongk]]ev~jdfdnofdabnskhjfhdW^`Wapohccik[P[hbZdmaW^`XWRFEMT\\RI\\pnZRUPOOOKM[hecnpgc^bppjja`jurfdglmjfbcjqbeiflqhgfhovn]cjijnswrncadda\\ciilimvsoophgrrjeghijflqlkjiifddjnhmempotwrmnssvzuuyvvvppx~}yqiuxtpmopuh[fm~tyv}skkysi~yigpbs~z}{~rphvx}~pighjdgfxoidjvirl`snmfqtgaifmlx|a_`csn_ipin|os|ebu|xvzpgbk\\_[SFEg~mSZlcZ[ZbSFAB]v\\^V^wpdc`hfm~gdv}fv~iklUZZS\\wdVQd}x\\UW`hWls_k^V~y~g{~affWf~ygjjwsYU_\\k{zxmlrmizm^nm_bdeb_miff_kTU{rokhtfR[^Y^XRTTX]]NNTXn`TbkpdaePLNT[VKTRL^^QUXW__gqhiljkrjk~xx`lg`abbblsqnmqoqzxk_a_`\\cldag=>THE[wfZM@FW[UY@<M]hjkus{spts}sgjx~yw|mnr}x^akr]qplY?DDDKOYQLJGBQCFNPLGKRb`inknonjmfWfpn~jkjZ[ctcS^f}qa`gb@HRa___SPQqt[UMANVZgg|fX\\qfMYZ^fb|vjjfbafcMi~mf}dsr`afux}wzy|~qyuz|mo}y~}hirvjqljqyv{zpw}xcYghf|_fzbvpctph|ybtorzlj|}fx{w|~yoysqytiofzvmq~[Qg``spVW]Q\\`jnlYIQbb^spkxnjwn}~u|}z{yz{jbixwrqmsfmxL^ZZV]cf^ftVNnaVaXhvodeX_]h^^iVaiTZPU[S\\b_~zzstxwtyvzz|}n~ueUq{yr`ijhq{kqwztuxhx{oxlmw}{pjqu~|wx{~u~u~ts~ql~}r|rx}zuxwyx{yx{xsv}vy{sy|}{zzx}zty~|~{ƾſĻǿ½edddeffec_WRVY^aa^\\[_chmopsqda_bhqpjgjnljmlgbdhifcbeiorqr{|okqt{zdagffi`YUQUg{h_d`beRDI\\haOEIJDH]gdij\\PRILZR><IU]chih`TZf\\RPHCJ[_SMQKLNMPVXTOOUWMIVXU]fWSbkmhfd^eixuhfeinhb`]gvumnf^ff[]\\U`nnfckocSVfibahkaZ^]YZQDFQX]RH[riTQRMLKJGN`e]`mk`]_jqkhd_enoiddifdd]Xgtdbcfimjc`cmssdWgoijprqokc__`\\Wbjijhktmlmkdjribejjjkempihgggfdehh`mgskfssoeequyytw{rppkoyrspjrsspilosh^eiz~}ssj|xqqpzvlrmzgr{uw{sogtz~~tqkmhljdxjcntfqk]rjnlssh_glvntcbihvpdirpwk}~nf~s}{mmhsagUOWRq}n]drbY[ZbQDCGavROUdug_dbbaitaepomiielXS]YRrjZQWozgRS^eYcpaj]W{~gxwz\\agVf~xfifu~lTQXZuzt{sjfkjewmZkkX^bba[gfb`^eNX|vqmjudTWY\\`XSUVU\\\\KORbqXRdktpidQMRZ[WNRTO]bTXYXbaeofdicenbnzk[``]^^]_mjklvxgyznzsg]`^ZajmciW6Y\\[aqoa[HHT\\OQH9Nbfv|v|{|{xtrzrhpzxw|vdsq~xbjqs\\|og\\?DBLROYSOHCFT:EMUIEJagdkjhr{vtpcdvq~zrtg\\brqaS[duf\\YkcIQT`XXeMIOqgSQMEHMXhg{oUWWkhNXX\\khxzmge^eiWJqwgi{dsg_jiu|wywwyuyprt|uyzvt}zx{vjouqprnfnsv~}rms{zbW]fdeWphopd|veanssyoqd}}zpy~{ntstv[TrfZuzRUaO^`gniUENgg[rggzfjoo}vyz~}xv_\\xssdpmhxUaXSRZ_eZavWUl^V[Ulr^bf`Y`eWgnYlg^bVZbVkti~~w|}~u}}vuqytxx|y|~kzvfRjxuztegojqwlorxqqtcsyowugju{ydepswp~yvri|nrztry}tv}}|y~xz~w{vw{ysv|v~yrwx{yx}|vs|~~{y~}t|~|{zz¿ǿþľþýeeedefedbZTUY]aa_\\[]bfjnnmnf^Y]eqmjefjkijlg`_chheadjorqqz~tlosw{pfijggh^ZYTUhznbeaadRCK]e\\JDHIBIbfbhiZOOHOYK;?LVafkif[RdiWPIBIY_[SPNJKMNQUURLNVQFLVXU]bUTbkmheb^gjrljhdkkc`]^o{umldbie]YVU_mlfini]Yahhcejhb__ZXZTKMTX]PFZs`OUNJJGCDTe_U_je\\Z_mnefb_gmkgcdfa]^XWikbabehkf`_enqo`^joijppomia^[\\ZXeiijhinkjkgdljc`gkglgiojgfffeccefedhjjgjpmjdhpwxwvuwrlfkmtwmopkoprnhklqj_cfuy{|qihngun|xozo~ouxorysolz}||yupphqmrymtpqjtk^qmpnttiaivxs}~frnnyphp{{qlvr{mnnnilTS[l|zoqwlc^W[dOBCLeuJEWkscSd_^_ak\\ekllivo^nZP\\ZVjmZQUdokSQ]dW_mdj\\[{m}ytxZ]hXe}vejetyhSPV]xuqqiidhkgvlWhhT[`aaZcd_[^XHdurlludUVXaaYW[VS\\XINWopTSfkvwndSQY[]ZPS\\X^bUZXVcbbmc`e^cfbsu`[Z[[\\[Y_jghmxne|woxpa\\a^WhqmbkGHi_fvlc`SRRZQMMGNfjo~}|z}vso}tqjsyxv}yqgtq}xhlxko{neXBE>UQP]UFA>NM7HMXGDPieifiltxzvoktytxuvhgroeW[dscZZrbSWV^UUgLCYo_JOMEEMYgisTMXZrcM^S_lauxddf^geLQwpamsfqbhqhy}xvtuvtq}ulnsv}p}wwzx|rz~snuz{psotegnu|sbrwybUTeanR^klqh{dkivx~xvf|s|stbZvvZsTOkPabgmiRBNkr^ocez~alks|vxu}xz|{jJw~rtbfqeq_eXORX_cW_vZ`k^VWUonWbg_Sa^Wvuapiigboppzuu{u~i~z~v~t}wmvswxuyyzxnwvfPf{yqwsfgskqsmmnwmp~q`m~xmrqdetzvb[ltsp{~tu}}o|dykrpzyz{|vn|w|zvzw|wwy{tv~~t~wquu}yvvyptp{{~z{uww{{{}~yz}}~~»ſ½Ŀhhhgggec^TS^]ac^]\\\\_emmloh_XX\\fjiecefggghf_[^cfebbiqqopx|vnnuvvrilsmeih_\\YOUivoeeabcNCN]c[HDHHBMceahgWNMHPXF9AMYbhkidWUpiNHCET^XTSOIILJNRQQNINRLIQTSW`[RWagigd`^ejnljhgif`][ct{rkifiia]XWYbonffic^bdcfeeggca]WX\\YTUVZ\\OI]o[RWKKJFAH\\eZTag]X^bgfeda`eeigaa_YXTS^hd^^aegga^cmnlf`immjjnonkg_ZWVZ]mkhjggiffhedgieckjhlglnjgfggdbbcddeikffljgdcq|xstusqogfolpqponlnqsnfjkokddcpvy{mdi}hesn{rr~xqmpuomvrqszxyy|wtmuqyttnxykcuvqowwlgq}~zk~zvxmlzv~qy{tqqivqYhexv|_edS\\gMALRcrFC[gq_K\\fSV[fWmkpepox_g^QV[]bp[QS`cdVN\\dT_mej\\f}ww~{s}v]Yf^c{vfljsqcTO[eurogcj`eg^rmVeeQX_``Zac`VXXSrxrmoudUWfh]XbiTQ^OHPezhMUjpw|reXWde`aZYjgabX]WScacf__^Z^blqruWWYYWYUVfe]ctw_hyuqsl_]cZ]prkbfJ_eewmVadd\\XQHKQYauqw~{|y}|rqlwnpqsurwxeftn{xnozfz{adZEEG^TTeX>;GWD:DUTBE^pgachqvw|up|v|z{ywkrsh]\\fo_X]ucZYW[YYgPAdkT>RT@@QZikbMMV]qaSaObiZjo\\de_h\\H]xncpkindrtc}{zxvortljwshlto|jv|tp}{sv~~vms|u}ssf}cdfszooquvmP[g`}wZPim|sgeqj{|j~x{}nfmingXuVehljkRBMt~eo]fx}gojzw{v}}vtz}N`tre^milfjXJOY\\aQ_v^igbVTXqhUehT[cQizosqrnz~{w|zuplxy{{~yyrv}jruxxpx|wpvtvgRcuzmqoiishqqljhs|lm{k^gwvkole_pwr`Uhvmqv|vtwzzyznqdrgt~p|zwg{w|xxx~xvzvxy~vt}s{~|~yystrxurur~mwpzy{uzspwx|||}{zzvz~~üþĿýkkkjjieaZSW`aed\\[[\\bjppjd^UT\\hokccddddddb^Z[_bdb^dpsnot{wmitzvqmnrumgkga_YS\\jrphfbbbNHU]`[HCGFARcb`geTLJHSR=8DP\\dhki`R]ucHBCP\\\\SQPHDLMHNRMMKHNPJNUSQX`XRYadeea__biomhfhfa^YZgwxmhhhki`[Z]`irnd_bbee_`feagf`a[TW^aXUX\\^NOel\\ZZLLIDBNbdXV_]VZccdcca`bdaff_YVVTPVdd\\YZ_dfc\\_mmdgeipnkkjlnnid\\VSRYepgglfeeccde`bgdephhnfjniffigcba`cghhddjkdcbl~}tlmqqnlghkjoqonlmnrspeklmokcbqvu|xj_gzielnxivzxs~kl}~qogoqv|}vu|w{yyww|{s}lkxsr{{toxy}wwmv~~y{qql~pewr}xx\\lgPbjKPVZ]nFM\\_oYANjRLU`YupkesnxiaaUUVfZm]QG_\\\\ZLZfP^lhj\\pxovxtz{`Sef`yvfnpqi^TNakjor]]l^ccSmnVcaNV_Z]]_a_YM\\l|zrntveVdqjZVunIV`LGYw|_IWrwytf`^omdeaeqqfb[`UOahkbXZZUYenhsfSUWVSUQTk`T_xkUowrqohZceXfpnhc]WkdryZZnqjUULOP[bguv|x|x}woihqjnrssh{tz_hpj{ynrqd~t]e]GET`U_lU8DTY?@HgKEGjscXfjxxwuvv}{xuyrjbjh\\]`rg^VX[\\`iPDgZH;W];DX[chXONXgp\\YcIedWba^a`aeRPdwpipgkmj|pcv{mytloqhapoejuxykyfqxpkz}|~{~{t~yorsx{rgng]dp~_kmyjxFZobtydPhx|zflzqp}~znyq~h}mqurfpWAMxumYkwnsm~yyx{zzxuv{gOqpi[dkhiqXHHYY_MbtikjfVQ\\wcThgYf[cx||s{~qwxlpz}umyx~v{zzumnfnwzxp}{z}tfzpvhR`p}hljjktgqolhcmxjjveZaqsgkf_\\kvo~\\Rbxjrpxrrwwwopplijfyxryuezxsut}w}yn}tvv}xs{rq~{z{zvur~mt|pm|sitm||nvup||tvxpl}{s~}}}{xty~|~}~¿ļiiiiihfb\\[`cegd[Y[_gqtj^ZVSXelkfdedbabcaZUV[^``]_jrpmrxxpjktysllqtunimgfd\\\\djprkfddcROVY_^HAFDBUd`_fbPIGHSL:;GS`ghhh[RgrXEBGX\\TOMHDIQHFNMLKFGPPMPROQ[`XRX_bba_\\Z_jpiehhb^]W[jwvnkjikga\\^efmnf`[]elfZ]fc]bd_`[UZbcTQ\\a`RSff\\b]ORNFGTebSTYVT^baba`aabcff_WRRPMR^aYTSW^bc]Zdla]jprnjifdhnmfaZVSS^ijgikd```acc\\`gbhreklbjlgfhkib_^^ejhd^ahgdfp|ynkjlnnnkjkghmpqpnnmvxsfkqqqneestowwg]jwhcdiscyzsrpzihvpocg~px{uq|}w}syx}}tqyxz~|ww{}txyz~psxsvxxz~u`kcXkhVa^dYeG^[YpW9@c^ILVYjueijpus`bZXPf]icP?UTYZO\\iNXlfhhtwlprq|wfRcl_pvcjzo^XYOcualvVXo\\`cQjmS]_OV`W\\b]__^Qo|zwowyf`trgW`jG`ePLeyWI_{{{skfbsochdm{umc[bYOYir_QRSRVfibrw^QRVUORO[iXSdu^Tsylkm`YifbljjebZfio~n[iwy[YVUUR^bkt{|wzwyqkdikelsslcytrZlmfzxmwhd}k^f]JKc`WmkL=T_[FHYhGONrm[cgo{tuz{{~~}~}wmla`geog`TZ\\YenLIcJDG[[=P]Z[cZSMfvmVa^HaXPZ^`_`b\\RZdysnkfnptgjx{wu|}ezpehnh[ji_j|rpsfsfosoeu|xzz~|{t|up{rzqie}oX]j]abxi}ILklqukUdmy|r}{~~~t{~yxkqiESy~m\\syu|v~o}wruv{t}zwU`xj\\_edgwYDER[YOirvqmiSMe}VSkllecyykunosu||eg|xxt}uwyrmlem{}zr}{rw}|yr_y}p|ufT^l}ejghnufnnjg]frhhr`X_nndib[[hsl{YR]zgmkrkowrusjwnu|hoelsy|ncwwmomwz|w|wkoutuv~{rsvjuz|zryq{otwljzqel}~tokovir|x~|rrwpgvn~~~yvz{~y|~}~Ŀÿľ¾ûÿÿǿ»¿hhhgfffeccffig\\U^bfnupb[YXZ`higccdc```aZRRWY\\[X[fnnmnrtpkilttifnrtunjkghjihjkqtmhgeaVRU[caJ=DCEXc^\\b]NGFKO@6?HTcigedYWqpPCFQ_XLIIDGQMBHPMJGBIPPOOMMS^aWSY^`bb^ZZ_knc`ge]ZYW^mvtoljiiea_chjmf^^[_jneY[edZ\\_]^ZX_d_PR_gcW]e^]bWTYMLUYg]NPSOQ`b]___`abgkbXROOMNY`ZRPRUY]][`gaVcxwmmlgaajoi`^\\WSVdkhfhid_\\\\^caZ`ealpdjebkjddimi_[_`ghd`__achs{xkfkmmmnoikmfglpqqpqow{uilqqqokmutltsf_kulc]fn`{phfiwgduml_^y}m~zto|w}~w~yz}z{w|~z}y}w|}qw{yw|{{qbfbhphmsjp\\_Mj\\Un]=;TcUKPYZtkiesv{bb[XNafgiN>OPTWT_lIWobmywztjiik~yswpYbk`itdd}rTNYVhx\\hvVXrdc_PjlOV`SVaW^m^]jbf|r{xhn~thYrbPfhTTsvUNpxx~sqigwocqjqumg^a\\VXeq_KKLRXfddqk[SPQQNOQ^_QRhnTYxwhlk`ffmshdjb_cpg}ygepzWa^eSQemsyzswusgg`mfeitvd`tvlTkke{unydkwb]e`RYlZ\\wfMRcecUSgWMR^uddljvupv|x||wkbipsrgj^dcQisPQaEBV^RDW_\\YZaOSwt^RcVP]PPZ]`^]`V^Zlyvpikspwdwr|rsyz~rb{xl`blqjWdaYgxlinamglmp_pwsvx|}|u}wr}qsoffqv]Xexea[fi{ZDZlpurdh{xryx|~|rsyWYrs^u~|{{ixkzvvl|wx}zutfUukY]aggw\\>DM`STlp~tmlRNqzM]mupdtmrktwvxi_g|}rv{nsyp~ohck}~{vwmpy}uzo^u}qytdX]hwhedfovdkvkgYbnffo\\U]jh`gbWZfqiv[PTzedfm`jwopzgg~nks{rkzy}cpw{~letxjlkot}yxsngt~tqts~{vmyi}~sy|yp|{t}svtkn{odjz}|fogtpmxxwxspzwclnw|xw{zv{~|~}~ƿþûÿ¿ºž»gghdcggffeefff^Wfnqtqh]]__aeggdbaaaaa`ZTUXXXXUUbmmilmmligiorngjrtstmjihlnoomlsullle`YRSblaJ;ECI\\a[Z^XJEELH63AIVfkea`Y_ymJBJYaRFFHGKQHCKPPF>GQRONMLMTacUQY\\]__ZY^bki\\[c`XUTZdnuqljihgfbbhkig`_^]dmi`YYa_UX\\^`\\]ce]QYdb`\\bd[ceV[bVUY\\gXKPOINddZ[\\\\]_elg\\VQNLLV^YPLLQSTUY_d`TYungqkb_dmod\\ae]V\\kobdkjd^YY^b[Wabalhcgbgmf_cjme\\Y`cjea`__bdkzvffimmklmlhmmdflpqqqoqyxummmmpsstywlpnggnsqd[hnd{{h^\\aqh`o}kh\\]xwmzrm}s{uzv}~{z{}{|wws{yrv~sz~mbaesuq~vx_dSicXh_MAGWbWQRQkuejuzkc[WO]mejK=KQLV_clJaqavxtpgbaexxklvdeh`iqhczxOHSalq[^lXZtpdWNjmQSbZZ_Vfw\\Vysxtsl{vea\\\\liWcvTYuv|z{or}phxko{oh`a[[\\`m\\GJGQZdaflc\\TPNMLJT^TMWoePgzqhlkigjzn^hk]aqllygekvj^hnfL\\rx}|{rmtrl_b]obeftxb]nwhTjhi}pnwbqsYWad[hmVe~cZfmkm`\\eGWYmmilmsvmqz{w}~{z|njpx~qnyjtoRgtYW`HD]_PM]b`WVaQb|bQahR\\YRX[`ZXZ\\\\b]x|{tnuuqnlgxnryuqgfzyuk]]oi{lW^_Wesigh_gigko]n|rqszy|uzvx{rqlcagp^Wbnzla\\SevkFNflw|ruvv{qu{uq}~~z~yyxnczqf{}y}}pi{fox|mzyu~}yzyxvso[avZ]_ojr\\9@LZS[ksonmQXpRlpwmqwsokyxxx^eewuuwjpwm~sech|z~}uhlx}qqj]s}rvqaY]espdddquekzol[aifgq]S\\ac]dbSXbldqXOSw`\\`k]dtljq]a~vfenyqfos}br~vsitxjmmksqrzppipttmvrvxzmxkz}qvy~yov{wvtqpv|~ikoq{xwcvwelumuwptqp|}`eqtzvw|zwz}~}zy~|¾½ýĽž¾¿gghebfhded`bgigchqutme^`defhfdedba`a`[RSZYUUTT^lmhfjjiigfjnnjjottsniihjprrpomsvmpof`[SVmq]I=HFM]aYXYRFCGJC46DKYknc_^[j{dEAM`]JBDIJMLGKPSOBBPVPLIIJKYf`PQYYZ\\YTZ_bkfVYa[URU`hnqnjigfggcflid^\\_abjndZUV[ZSW[^a`bd_XU\\ca`]bdcldYbd_XVceSLMJJRedYXY\\\\enm^VURTNLZ_QEFJOQPQYbaTQgr^hsf]`fmkb_ele_dnj[fpld^XV^_TW``ad`debkh\\[bhiaYY_gjb`_^bhioui_gjjiijjjiplbdkqppolo{vtmllmquxy{xnpmjortrb`lmkwreYX^meZlsjd[azsowoo}ys|tww}|y|wz|~}w|xy|zyzns~{vyp{uzzkc`kvwxsgn^]k_faXULN`gWJT_{kkv|wiY\\RZsfiH:FOEYlfocjlq~tojd]]crxdcvwokdcikmju|TCOfmj_]bZ`szgOKfnVQccb_^tyV]n}pusbnbfop^vx_ntwtzvkullrjbe[]b^jXDKBP^c`fh]^UONNKIVWMN`t\\Wssngfskd}s^epa]ntesi`no|v^jsv\\Rky}|xjiqqfZ]Xs_fetwa\\lxcTljj{kntduiVX`gemgZp}ggprrq`d]Ieepjwlqzqcw{zvs~yxty}{w|qproykywUis\\UcNNaZQP`d_SW]]pqTSxhQcT\\Z\\bSSb]f^iyv}ttsuz_}motuqfcprsshZWqeooa\\[TcqhfdXbl`km\\jyqrpz}wyvtrmc\\_iaV`hpp`aN]pxRIcez}{||rnxunovqk|ww|wtv~zpxwngxvuylkzlbsq{p{}srrrwkhW|wad]mxoZ7;MWT_it}knjUje^uvrs~woo}{yt]iaqyvrgntj|~vfae|y~xhjv{mhh]t}ttn_YYepxlheqqgn~upcghgipbU]\\\\[_aTU[iap~VNUv[Y]e]crqglY`|s_`j}vo]js}gx~|wzprzmhtgpmpxlsjjmqjvtrw}{o|wly{puxy{uq}zzpoy}{dsvjxwogm}fetorvpsqr~|}}[cnpyvwz}yx{}|{~z~{}~¿þ¾ſ¾¼eeeefiheb\\[foljikprnjdcdefgmpga\\cfd^YWUVWTSQS\\jogbdffeefhjjjkmrurnhfghnutrqpopsqxsf``WYtxWHAJIQ_aVVUK>BHI=2;GM\\nn_[]]r|Z?CUbXD@CGLNIGMQQHERUMJGEEEL_fUJSWVXXSV\\Xdm]R]_TQS[ekomikjfeghdjpg_]]`gmnh]VST[YRV[\\accbYUW\\\\^a_`eoo]]hb_ZYhcLFHLS[gcXVY^anujWUTW]SQ^ZKDEGNQOR]aYPXsyb\\imb]afigbbhmjilje]frrldZT^[T[a^_`]cadi]RXbgf[Y]dhfba_]cijpn_elhgdfihiksnaejnnonjnzurklnpsw{}zwoqoosrstahpmosncWZ\\icYn~lg[T]xrvqpr{uw}qt|{~xzr{}su~vy{||qy~vzxrz{wriuwy{kx}ztjfeou|~mqyiWldmgek\\Y\\pcNVbxskw~q\\iUUsieH;DMEgkh}fptwxqjec]_dgu|g\\iuwuafigmsp~`APfllc]]`gkzsPG_p_TdjgbmxYsmtnj}xhnywj|py|w~yosnjun`h[]g^jTBJ=Obb_cc_bXONNONWNMWhlXhunj_gscv|edul\\nvhgp`ptrzdbw|xV\\v}}zv~xegmmaUYVv`geuv_[my{]UnllsgoohveWYagikbevynorrxm\\kW_pqsu|pzvm^{vromu}{stozx|yutt{rpsp}ksvXot\\WeVSc]RQ]dWUb_fwgL\\bPgXZUe]Tciag_v}~pw|tp]ykr|urm_h{fs~|mgSPrcevjVYN_mfd^Q_pZhi]fvusj~|}zwrrh[`haU_finaeWVhxePf`r}zrwkfqnjiqyyynlwuoovtokpz}tmjkdzqprtmny}ff|vgu}srxkmhvbb`ikhk`_~y`95J^T_hqylmhc{`k{{p}|yuu|ickar~xqcksg}|zyg^_}x}{hkvvibgZsxvq`YWhn~vporplstpsohgkh[bWYZ]aYTUg\\m|SKZv|]SW[V]x{feUazq[ZfyrnZes}q}}~y|yur}rb}dilpsjvpheqkwtpwz|qzumvxoutr{{p~qr}{awwhz~ye{jezh`ruswqtsu}w}zWdjm|{|}quzzw~}y~}yv|{|~}|ÿÿþ¿ľ¿üľbbaekjfc`Zevvnjkmnnkgedfhinxqd^`efe_YZZUQPPR_lne^_ccccdhiiikmptrlgcfgirwusponorsxtg^a[aytRIDKNV_aTUTA9AIG92>HN^okZY_bxzP>JcbN??EHMMGHMNJEOVMFCACCESe[KKSTUXUS]XTnkUVaXMNXdijnihjheeggdmqf__aeqth\\STTU^ZSTY\\adc[VUWZ[^_`cmpgchja[Z`dYKHUXX_fcYV[afqtaTXSZeVR]SEEEHNOKP\\\\PWiznY\\fh`_bfhhccimnopib_hrumh\\S]_]^]Z\\cad^eeRKXce`XY_dgfba`dlfjvfmmjijjkggilrhaeiklnnjnxtpkloqtx~~yvrspprprufrxjqplcYY]d_]qtifUQfuw|nku}wzwnrwx}x}whwtmqyuw|s}{xpw|xuz|~~xp}vsrhct}s|v~ouvsrgkmots{}n^jsmmqnthc}rWPh~smxsarbSskcFFGMVtiszey~|q}qhfbc_^bjm{kVd{wsujhebp}kygCYjnng[Siqbs}UB_qeailhh{pj}w~zprjk}|up}}~|y{roqr~{ys]g[Zh_hUBJ:Kd`][]daYNNXUMTHUbk^[qqp`aohrpgsz^fxn]jcbupvp^q}sQf||vs~{xbgmjZNVVvakfxv^[oysVVollmeofks`\\[dglgbpzttotvwfad]px~vz}~zrjgzrmnfk{omyqlnwrhgn~tlmsulrpYsud\\ddYfaSR[bSbn`q}]Kj~YWi_Sbm]frgbgf|wmw}nf`tqrzuok]s~_x}{jwjNNr|b^ryWWH[iebZM]oWbe[ft|rf}{{syn`ni_X^cfedibX_rpehkn||qrl_lmj`ipxulsslpiny~kieh~t{~ztp}\\erptqyrstvzvr}]myrb{puwqkcdl`XagtjjvdfTr}mD0BbV^gp{topnhv|o}z}{u}ggnhu}ylciqe|{w{i]_|x~~ipvvgchdx|zwi_]or~vxuttyxytnkggefXYY[a\\TNd\\hsRMdzv^OURP\\rd[ShupZZfoqm`d}t~vu}}{q|{}z~sgbfmxqrhvvheonwvovy{rxtmusrqom~ru{se}vn~|{bnl^zj^q}xxssrwvowUfgkzy}|u}ouyyx{{{|}~vu|{z~|zÿſ½ÿƾſÿccbflib^\\_qymhjnnmjfdcflqyzb\\ene`^\\\\^XOKLR\\kod[]_a``acghikkjnpjebbdfnvvtsqomntwytkba`mjPKJPVW^`TWT>6BHD74?HO`qiTXdh|tGBWi]C:AGKKIFKOLFJVMBEC>?EL[aOINOOUWUVZQ^q`T__MGP\\hgiifjkecdffgnmc`choul^XUVW[bYQWZ^ac^WUVWY\\^^cklhcgjd`^_^\\RLP``V^gcWVaehsnYTYYbi\\PSOCCDGNMNX_WS`vy\\P[ee__cfhfcdklnsvjachryhlcU]ddaXU\\igd\\d^LLZcbZW\\_`fe`bcmsdjwhnjgktqiegjliacdgjkkkhmwqllnoqux|}xwurpopnqwmtzqsomb\\a_^Z_spicRXjv||mlv|~{roouwy|yysez}zsnjuvuurz|souysu|~z{~uqwmnn_bsnv{qyrppvw~~{lgoomtw|}udiuuvypxpk}hRmsny}vjyoWrkbTOPR`tu|huwqxp_^[_a^_dnzpZfvurqpnc`ycpqTbkqogcWlvhvdIgtllmtjnozy~sy_s}nr~{{|pktx{vwt]`\\ZfahUCK=Jc]XS^ga\\JMdRNPD[gdVcqmgahgnwpu}iYtn[]g^nqqshj~~cVp~{sq|vdfjfRMUVvdog|u]]ryrNYoklhco_kqaW^einabrussmx}rce`hrv{}ssmnooomegpyfaqojgp}n^_i~tgdvlxmsl[urnaitiicSR__\\jlcvPVtqVceZYrmauq`fho}nlvyj`c{wlytli_~|c|||fjymUOrubYl\\SFWfdbXIWmU\\f^fswb}}}uywlh]\\fjjemc[dqwvjty{{{}wpmts[cml\\_lsrgxpiihgtwed_d|zp~wuv~~ukr]cvwz}trunr~fnslabWnrlxvitp]bbcQXcrhbdmRbunM6?`Z_er|ztwumxq{yv|glunx|qidijby|w|kj`xynm}{ljkquigu|}xx|z{ufhol]ZWYb^WOZX`iTZmsu_UTOOZciXRhvo\\Xbimqhdxv|q|{tp}}}~|rlbbnurtcq|kfoqzwqwy{ryupwqoqoov|y|ooqnv~{cd}w_vk`n~zuqsyrkrTheixtz|uzltwtvx}{x~|wt{{}}|}|~Ŀſ¾ÿ¾ſĿggfike^]ajx{pjhkokigdcdlv|{j\\eok`]\\]a_UNMT`ehc\\[\\\\__`adfghiffkjdbba`grustsqolmu|{uni`fygUSTU\\[\\\\TYS=4BHB99BIQcreR\\jl{nEM`dQ<:CKKFFILMHDPUF@DC;<GT[XIJMINVVVTPShiUXdXGGR]bcfegnibbccdkohadhmqnd][ZZ]ce[Z^\\_ab[STUW[^_afkgbgld^^`aYTQQZbZVahaZaeajsiYVZejf[PRSHB?JTTX^_WZdskQN[e_\\]aghccgmilwzjbeipzloj`_ff_YUcqg]_cXLP]b\\WX[\\`fa_cgpsfmmgkibmxofefnjbefcejjhiglvlgpqnsvx}}xwvtponmqwpy~xvqpcembXWbupm_Q`lvztllt}tqplutyy|uqk}rxrujtuplx{w}ztqtwpv~~tyv{sonikh[eo~h|plwikl{|y{t`mslis}{ssv~ymiq}zuzs|ublwoz{yqz{dqmdb^YVi~^muy}vnq^RWZa^]bnuvbkvttiqt_`ajynmloolj^orryrSi}{lmzlvsq~~r}siwmz}~~}}olxyuqruaY[YccfWCL>FcZPP`eb\\IUbOOGLcd\\Ximebcbi||nyvYltbTefivrpnku}sXdr}vrn~rhffeNMV\\vkqo}u^`vxrG\\nqmcbp_kmcY`bkm_drnqllzyg`dhor~ulqqhekukfmavcXjjigkzkXXeztb\\zwhpnpi^topdvod]ST`egkiiaKgpc\\hZWeumlvgbnjy}}{ekttiakwiwriekun}~|d`rm_Qq}qaVhaNEQbadWDPjTWlkjs]zy}~wybYjwjeudclvywxwuz~tsnkra\\elYZgrsdt}ig_gcp{m^\\]bxvtptypm~qx~telicrrtunkdmzbnultk_v]drklrlgxw^a[cPL\\oidxnjXYmoVGB`\\dctyyzsntq|yuv|uju|v|xhhfmgayz|kyittpxrr{vs}~~~hmutdcYWcb[USSY`TgvkvZXYMS^[wvZSc|o][^aftrft}zmwtyzts||w|y}rrhboqsvalqgntzsx~{qxvuzpmpnt{uwwq}ior~zcasfvkco}|rw~mfoRmehqmxyvw||wissouv}}s{xyv}|}|zz}ǿ¾¾ÿ¿òĿ½ſffffd^[`jruogghkkhffddkv~ucbjkdbacge]WTWahd_\\\\[[Z\\]`abffcacfie`ab^_lspptuqlkox|qjj`l{c[]XVa]YWV\\S<5AEB>>CJSfsbPbmoxgKS^VB7=HPJCIONICHUPCCD=8<ISUSIIHIRVUTQP]i]V]^RHHS]]`ccikb^a`adnmcejlmnib__c]]lnca_\\bdaWPQVY\\aachhdcde`\\_b]WURVe\\LYhf^\\kh\\jqfYX^mobYVYXFADO[Y[a[Y`c`XSRZ`X[_bfd_dimikwwfbegiytmlhcihb]^mp`UcbWNS\\[VXXVY`d]^ekmmjpegnhbpwkdfiqicifbchgdeentdgsnktuxzruvqomllotpz~{svinzdU]jttucTam~unjjs~}xrtikvvzyrx|lppjtp~ktyoh|xw}tsppumwqowsyrkdikaYejujzemp_dk|}t~h]uphgr}{yskpr}{spozxxrpryoxxyyy|msoiqqX]rhZx~lqqyywmmaOTTba]gqvxluwssdoy_baj}~wlplxqclmx|t]iin|t~}{ywq{|z}zqqxqp{}x~z~y}}wzpozwtqoxeZ][gceYGO=FbUMUccfXJ__KGHYc`Z_lgacbbuznty\\awjWbolvrmklovyxf_ntyupj~plgceQLW`urtw|tacwxsF_mtp`bqdkjeac_mmbgnfpio|p\\`htop}zqmmpa^jwkeqZpgV`dghiviUS_tq`Wvufmklh_soog~f[ZWZbjkmor|KTmd_fdR]lqqrpdprmyxy]jr~ojfsqlwrcd|yo{{yudZnfaVown^RigNEM]]fWBLhVTnspua{tt|{h\\uifyimt{|yx}rquzswogniZ[lV^astbqt~buiWe_gwgYWZczqmzspsmuxkj}jtqcisvkmysxlpic_dmmPczrTlflumgjibp{f`Y_VIQejjn{d]WglYVLc^flu|{{oorpt}vu|tzlttaikmgg}}|i~su~w{y~lz}mnd[hm]ZSQZ]Uq~hnTV_TVfZm|`Zbvw]_]Y^u}pvtgqlywtwxzyow{z|}ptoiql~|}`eyjow~w}svx|}popn~yoysubooxbcmmxjepy|t|hciPpffkftxyt}}z~~}wktrmtsx}t}szxx|~~|y{Ľſ¾¿¾»þƵĿþ¿þ```_[Y]fqurkffikhfddcgt~zpeglhcahnn`UY`dieb[T][YWZ[^abd_Z\\fjf`[\\^]gsqkovtmjksxjegcss``bYVd^XSY_T=7?AEA>@KUgs`SfkptaPUSG77GQRGEMQMGDPWG@HC78AKRSOHGIMSUTRQXeaX^_UKDGU\\[_cfjcYY]]_gkffnpnlkhb_df\\ctqgddcgg[POU^aaabehgbcd`\\]_aZZRObcNIcib^afacjm`X\\dlkc\\[]UCHU[\\``XV[`\\WTTRXZUZ_cc[]chjfjuvedgggx{kpognkgaerlZXd`SOX[VS[XUW\\[W^gjkkjoigpfdrwjcinsgbjfbdeecadpo`jnglsrx~wsvurmkjlprtz|w|pui^jqx{kZcp~miiir}x{ortboyzxuxtw~wkuzfjrsotkg~vvy|nolowjvgowpwsd\\ko_XbkiqsbncX_kysrz[fumiisvvtlglrux{uo~{{tlworw{{xywytv|y^kvvrebmajmurrmghRMRaeWevztovppbnzahwbm|ort}uqlf~rhsiq|}~~xl~iy{wyvupwx|zorvxuw~~t}x|xzuuzpn{xvspvfdgbgadYNUBP_PQ\\`ckVNhYFEM__^\\bhcd`dpvmj{e]xuX]usuvphgjpuwrdiuz~wsnezpsiacTO\\ctwwzxrcfwzsM^nqpa_uijkkfe^nohggbnltxeVdp|ms|urunhl`\\qpkdsWhjUW`ildlbUPYmm_Tqqdkiggdmpum|y\\TZW]hmiprxlFddfhhYSblqtumkyqr{|~uuZkn}mlmwymvwq[kpsxxicZi``[lvoZOlpTDKYYgX@Mg`Wmzvyltkrx{}}qhhm{qu~|~{sxp~qootu|kbdlaSiU^^kuduq|bniTf\\]qcYYXeunfxrpwtemlng}{}io}jgavj~lnyeufogY`acmOkfszKhwosobfb_iwk^Y]^FL\\alpd`YdhU]Xeahvz|~olrop}urty|qy{m{talsmjqzwytuz}ztwvlat|c_[T[cZgkgPO\\_\\ieg{h^fl^ccWZr}}}~{pejj|jow|svlru|}~yquvruj{\\d~rp{{}yw{qqrvxyupolxfon~rbdf|qujfrtxwd`ePrgbibqtwo~||~~{lvtmtruw}|qwz{~|~}~{y|ÿĽÿüĿ»¼¾ɸľ¿ĿYYYXW[blqpnjffhhgeddfp~|slillgcfmqmaZcjihdb^Z`ZVVZ[_ca]XXbkh_\\[Y[dsskjrumijo|oecfgylaed^[daXS[bYC:?BHC<@MVfq`Wgirs^USE;5?PTMINRPKGJWQ?DLB59FNQOLFGKNSSONT_a[[b[MB?JW[]afli\\TW[\\agfckpnljigbbhd_nujeillh`SMS]dgf_djidbba`_^^_ZWSZdSHWc^^cedbefb]\\`higa\\_`XQYb[\\e]W]\\\\\\YTNMSVV[^_[W\\diidhttdefgkw|isulmmhehqm__b`TRZ\\WT^YSUXRR]fkjfijcgndivuibmtqdfjececcc`eogclhdlqrxxrruurkhhkoqvyy}~uy}onvx}ram{zlikptxuumug`w}~ss|svwvurwmbsqxuzbh}utuz|wgjinxgq|cquiwu]Zmo_XaobypegVUblvyipkYorjgkrrrqjaitpyss}{zvmrmnw}yuxzyv~q~sinia`idirgnk`j\\NR`iR\\yqsvqmas{blsbjzqx}|znfotj}tksz{vsyzuiqfyqvxvzmozvqxznnmrpv}vowpvzxrmx~pm{zywssmnpg^ciVW_N\\ZV[]\\cjUWkQCCPb^^_bdca^mthez}mgs{aWvxspoledhruvnil{{yxtobuptmaaXRagtxzwsqbdt{sV_rlrd^ukjmqhcZpwmcbcmpwt^Yl{}n||ppmvjihdcrilduY^jQR^kr`c]RNUgkZOjmbeda^eipzmusVNYY`mkhqqp[Th\\rk]QYaht{zpuxqv~w{soaji}klswrovnXyhxzz`]_e`^^lvnXSl{t]QFN[g]DUelan}sufupx{~|ysgx{~w{zxwzfsrpkktj^ZfiSaTXdcrfyswyckyeQiZXj`[b]cmdd{pl}rt]cdvcy|}ff~}dg_mzjzherageqiVY_bhVMrlOen~wi`cf[^oqaX^iEJXYjpi\\bgbQZaeen|}}{|pis~on{}pnrvw{}nt}u}wfozss}utywy~od}qig\\^jbd|pg[VXa`kqi}pZmkacl\\`t{}uumgej}bly}jqjoozzvtwx{ym}}Zn}{~|}|~pprzv|ns|kk}|do|mxnadfxsujiu|qr^]bSulegbopu|k{{n|vlzwtz}ztz|~{~Ŀû¿Ǿǹľ½ľ¾ſɻ¾ü¾UUVW[_djokffddeeeccdlz~vpnpnlffqqmgbfkhecbbaa]YXZ[]``[W\\djg^\\a_Yamtlfnuohikuwfeddl}yhched`abZT]b`J<=CIB:BOUdobZgivsZTJ?:<GRROSVTOJIUZICLJ<7AILOMJFINQSRMQ\\a\\W_\\PE<?NX[bejlbWVXZ\\aeddihggfhechkehvqehopnbVRT[flljafphde^\\ee_a`]VYcZIO`^Z^bec`_]``bbeeeb_effeebZeg\\[__]ZRQLMSTX`]XVV[chgafpoeedfhv{iqwmknhcgmlgab`XUX\\]XbZSVTNRZeke`hg^hj`myqfesyodkiacf`_dbfjadhcemqqwwqpttoifhjmovwxzv{zry}}uls{wmklswwvvqrZgw|ssvqvwru{wefwn}{{Wj|tsqsw~tafhjuij}{dqtbrv^Zkn_Vcv|e~kd\\N[cmvshjacomiikntxpg_jqp|p|wyyshnikv}vswurreqkhewyafqdlo]am[YckXWxotwtmasfll`ezux~~jojwqnosxtpmzy|br~hkrmvsw|ogp|tqov|nhfinu{xlkqiq|xsjny{qo~|zvsqwraXflXeg^cYge`[chX`iRCCRbaba_ca^grg_snprxjUmzrnllhd`jvtusqlywzspcsrtsj]]Vbiux{tnqabq{tbdujue`sijqtg_Rul\\dhltuo\\bt|s{rorouklingokmirZZgNNZlrY][OKPaeSKc{h]^^\\R\\afsgkmTOZ[drmqngaUcc`ycVR_cp~zusrqz~|rzopgbj}gnvuoownc`zv~z[T]ha`\\nrlWWlvsacMI\\hcNdjvmo~yu|awouyzy~|l{q~xrvjdptjbmn`Y[l\\YXMiapfw{qtchrbRh]Yd`blaah]h}pivnt\\\\et`t}g\\rabhjtjrhXba`~jnr`QT^fYAe|lbem}]vr[fZReuk\\YoZMWXkqpWkpfT\\ccmuyzwwokrnky{nkortwzlo{}}zyxor~{}qt}yri~uqhgqootrkge]_el~u{zXhwo`odl{xzprigelz_k||fohjlr|yxvyyy}t~~e|}oms|~u{|kvynk{}ivvjui_fhuxxklxxqn[]}]Wyqfdcnmtzi}y}s{r|t~xy~ºÿĻľĿŽʾ¿ľ¼þÿ¿ſ˽¿½Ŀ¾SRTY^bejkd_accbbbbcfqvopqqmkjoumgdiojeedegb_\\]\\^^^\\ZX\\hmg`_ba^^kogckrqihkl{ndbcdq~sdhkgke`f_V`cbO=;DJA:EPTbmc[ekxmULC@AELQWXZYVRKM[UFLPC<BHILMJIGNSRTTQVa_WX]QE>:BRZagiic[YXXY\\`bcdedcdcddglkhsxjdnsni]RV_gonmndgieokX[heaacd[\\]QKT]]``]bbYY[ageaacceijhkjc_cpd^_`eaUPVVUTU[a[SUZ^bdb^fmkgggfeu{mozokpibfklica`[XW[`aiZSWQKQ\\ek_ah`^ke^rwmgjwxkgog\\cg^]hdbhabbcgprovxqmpokfegkmmuvy}ux{xu}~~xsv|~vysqsvywwxwkWtx|ztuoowqjqwhprd~{Wo~{trnns|r^dhgsmfs~hqv\\mw^Zfl^RhwppyddUNeemx|pk`bnnknoip|ngcqoo~|r~myvqclgeszurwsvxhruvrqvzfhpamr[Zuk`ii\\Zvovxupgsjj~f]c|xv}|esov}llqtljmnuzc`}|ahpoomvtgemupnpuyh`bcmtwqghlgoyzohrwyrq~|ytr|r^\\ijalmqcc{dbcggYeiWGEVbbgb\\a_cnj_h}rpspp^evwofijddcpyvwvqyx{vteptruu\\a]ahux}sil`bp{ujmxhqfdqfoureZP|dZfikutk^n{~|xunwvqwtiu|jkposgX_cPOUflUYWLIMZ`NH\\saYYWVMQTZgbbdPS^\\lyt{j_^[jglt\\WXcg~rstssr~|uqylreYs|drqypg|psy\\zo|}ZKWjbbYjnjWZnrrefeT]hk\\up|~o|||tv]xnpypw}xu~ut~xnpn[frr_c~xc\\QeeU]Ge`ngqpqdck`ThbZ_dps]cgcq|tf|kdt^Vgr_q}kWg}gcmmrjngXV]^ssjvtQN\\f_Av`ld]cv{j]Va_Rdvrh\\kq[\\]oyxUm|ofhear|stuusl}ls{nixzkionqwxjlxz|{}ywxvyxmszzw}l{uswzzvrqkv`^ikzb_|fsmt~z|x|ooihepxy^j}{enkijqyxsvz}{z}w|tqu}ytwynv{ysn{y}{q}nemd_ehs}|npxosm||X^}\\[|yjfgnjttk}~~~z|yʿ¿¾¿½Ľº¾ļþQRTZ_aegf`\\^abbbca`fx|mlooonkmtulhjlkheeiokda\\^a`^\\WW[ejgbbfa\\^hkhbhpqlilluvfc`akyyidlkgjk_kcY`bbS?;EK?<HQTblb\\dmudQG@@DILSZ\\XUUPMUWNLQOFADEILLIGIQTSTTS\\bZX\\VIA:;HV_fggd]\\[VWZ]_`cdcccb`bfkollsoehosme[V^jqqlkkfeglpb^hiddegb]XMKRXX]da^c^WW\\dgd^_adhnjgjdbfrjcccae]RUX[\\XYZ[[[\\]_cd`]hokgghfbtzonyniphaeijfdb`\\YW\\eil[UWOJT_dj``h^`m__vwljpwukimd_hd^_kcaga``cgqshtypjnmjfdfikkruw}vyzxu|}~}}zwyz{{|xuxz}xx{xieww{wtsmqrghwwmufd{wdn{zsqmjnyp\\_gdopekxoquZova[ak^\\lyiuu_bQXgeruxta\\hlnfujkvhjqspuy}|k}tqnhjeao|xzpwsy~lu|{puyhloapn]_wrdni\\Zunx{zohv~gjzg\\e|vsz|{cr|rupijmnggq}ugrs[fkZfnlimoiedhklmpvq^]ackvwifjhfnx{mlvvwss~zqs}uc\\kohp~y^w\\krla]le[QHWbejd\\cbgogerxopsohawtukbhhegktyx{tsxvz|zfoupzxY_e`ouysgh]`nxtrtzhlgfoesypdYO^Zfemttjdwyurv~xr{unlksrxa`b_SSQ_lWXYKFJW]JE[oYVUSSINPU``^bS\\ccqzw}g^`bloomaZaio}{jotssvy~rquop__vcv~plcov^vzmz~]JSdfa^fpkVYptpfesl_ipows~px~y{spZymnz~i~v~u|yqyvmluYZava_u}n]PVm_^N__jnYppeagdYhj\\Zf~xYg_v{vfzd_pbQgpbnznT[xphmmmkli^YY\\fwks\\JYccHgbclZ[jxzar^UcUfwnrklmnhjqYktysgbvokqsjj{{oqxnhv}|{jfolpvvhkvx{{xvsy~~wjr|z}vzoz~{~ylpr~nYkowz|rgkrwsq|}|~|vwpnmmgpvtal}{eonkey{xxnvy|z{wv}wvv}zu~w}ysxxyyv~o`eb^fgo}rtvkwn~xsVa~`\\z{rjgmhupn|{~¾ĽûſôľýQRVZ^_dec^[^`bbccbbongnollkowwpjjnniffhqujccbcd_]ZX\\bigbagcWXbhdaenojglonznaa^`q|nafnoienaig]`a_W@<FL??LQUeka^eor\\JFDCDIPVYZUTRNQWSORTPIB@DIJHEFMRSSSUX\\\\Z]YKE>9BP]gigb^\\[WTX^_`bcbbcc_]bimnnpmeekoojd]]gqronmidhmqn`bpmgffe[TRLKQUX\\bb`]WW]dgc^]^dgklhddbmnlehidc_[\\W]hl]\\[]_ca__cda`kplljfc`wxmkvnjmdchihigc_\\ZY^nql\\[WNNXagh`cg]bg]jxmkoqpoljibbic`gmbch__aflsmjvxmhiggfefhijqtz~zvwwwx{|z}|{yuw~|u|z{}vlpzzyxsqouhan{submtvrpsxrrmefsqYXhccughsttxXpvea`bakkvqfq[aUcfhtpyoY_lmmnzov{tfz~vy{~{yk|uqpmbfe^jsvylqq~{|t}rsyrqogsmahvqfmpe[smxz{mjx|jisfZgz~~vrvzwbr{qshddeedeq|meqd\\qz_Xhoigold`afjmpqviX[`elvscdiefnxwjnuvvrzxlv~z^Ymjg{uct]y}g`gqabbNUaikh`jkkmepvsqqqmfpzstgdhhjmruz~qovuy}hpxlw~XYm_ouz~scbY]ktsry}hfhimgw|mcVLY[e_musjnuvs|wy|tx|kmwxvanc]XQL]lYUWJDFV]GE]hMVRNOGGHQ[b\\d_gnszxzwf``hmjkia\\lps}qoppqqzzu}spsumaulfz|}bpssjtqlt}eNT_idghrlY\\nqi]udlr~urztv}v{xpzjZkk~zfz~}}y}ouvhft`PXpe[itvbLNom_S_`drRrsrfbdh^ix`agz_mUzhztf[giLjpkkxsnXVtorsfikkn`^Y\\crsh{tWXZfSakd~oY]iu~mibMb\\g}jyqlqsufnw{~mdtlempdiywupwojv{{}j`pknttgitvzzu~mnvugrurs~wv{~nn}]oumzy{w_u{ypz}{|}ywsnt|kquyio}|lrrnm~wxynuz|{||{yx}~zysz|yruvhda`kkpxzxr{n}tnWdfb{zsqkkiwlq|}{¿ƾ¹¼ĿźþQSUUV]ca^ZX\\^bbba`ez~jinmkhjuzqlprpmgbhsxrfdddec\\[\\`fgghhiaSUde^`djmjefihsqh`]\\bsugbiosmbkbgk`^_]UC=HMABNQTcia_fslOFLHFHMQSRTTTPNTTQRWXRFAEHLJEKQPQSSQU\\[Z[[RG>9>KWenkc]ZWSTW\\__`dc`bc_Z]flmmqofafmnjfcaepqknsiadktuibktqkif]TRRPNNV^^`d]RRX`ec]\\Z\\gplffadnqkegnlea]d`Rc|o_befffb^_ddefnrsqmf`byukhrmjk`ejhikje_][[aprme_XPR]ajg`fd^be`suhrvlmligfcgibdpmfge]dfjpretvqliieeffffhkpt}{zxuuwy{yy|zyxv{~}}v}uqxz|}wsosxkj{vwjx}tuysovprvdapsVRh`^yienwy|Youhe`Zeqjxr`p_`]lfnoo|bUftlmt~rx|sq}~~{sgxyrnkjZ`d\\douxgjm{~}x{zuzysnnwocrxqgjul\\l{kw}wyjmyyoile[jtx|sqrx}scpwjrwg\\\\cbderyhejXczjU]noegpka\\^glorrtcW\\]gorm`chegr~seksuur{ujyx[fqfkqnib~hhktbjoVSannlgsqoknwsqrrpjnzwsqbdggnuvs}mmyyv~js{il^Sq^iu{vta]UYhpqpibjljkzxkcOR|[`e\\muqhy}rwt}w}vwls{}ti{ea]KMbjVRVI@ET\\CE_\\IULIJC=FLUcZifiv{}w~vibdqmitnaewvvyvwnlmrxwv|unvxnv|io{i~xtnwxkmq|}oZU^iiklsnedhzlWquortmvx{z|mstltd[}ihwiv|w~yzlntc^pjNRfhYaiyjKKqtcU]]amXhxrieamahfhm{fqR~kzkk^eoEmqnhxrxsd_Uplq{ndlkg[a\\[moxrp~kYXbba|h|voZ[ls|wmbLfeiwzzkq~vwu}qjp}hahlbhvtzotplux~zzyj\\nikrrhhuvzxw|~|jdswdrsqyxutzx~|~tn~msm~vw}m|p}}sw~x}~ymptytv~}vzxmusx}qu|}|~}u|{mt}xl`cosq}~||{rukZhwk{q}tmnynw~wûſ»¿ÿ¿RSSRT]c^YWWY]a_\\\\`ntikljifnztjlssokffqzwkdeffgc]`fffgjljaTSakb\\aejigedddy~uqd\\\\_grofdgmtqdjceke]]USF@MQCDPQR_fcbfs`@ESIEMTQQVVSQPPWVQV_ZRMIKLKEGUVNPWVSW[[[ZTRB5=KS^gnf[ZXVUXXY]bge`aebZ[bhkmnnjdchmlheeflpgepnbbflvugerwqnnfXTXVQOR]b\\adZQR\\a`]ZWX`qtfhgaorkgfjqmd`ag[Z|}ihhihfda_bggijox|oeba`stjfqljk`gphilmhb^]]eopnjbZWZ_bghdca_cdfxpjttkmkcdcemhdjvojg`_gpsrlg|mjlhkhgfegejlnu}{|}xruww{ywywvww{}z~||yw{|xrpwxjn|zu{{v~u|vjtrr}janp\\Qea]tmeotw{_mtjiaYgqmwk`pb`gtimntwYYkujowmu{s|z{u{ulatwqnhjV^e[_msvdfjw~xzw{}u{~skq{ocz}peexn[gtfpvuxhnyvtjdc[jnuxkmpvwjbnuldvr]V]]acgrrbddVnvWVelibfgc`Z\\iotrnr]U][grmia`iehyj]jqstwwll}sdmpjtuy~kksihwnut]Wjrsonxtsptwsvrrqmq{sskafdgszxrjm}s~nw|yldeMq`duznuc[SSflnmi]npfo}pgbJevbbaZovpkuqxw~z}|tt{~vtli_NUfgTPRICEUZ?IXRMTGHI@=HGU`^qbkwxywxodpwjrzngszyvvyqjikqv|~voxwztqtz|vowzjqqw{tjbcjoogrwul_qYozquflss}q{cgqgq^bzegtvq~uz{kiqaYksRL]i[]avtRKquhWZ[`j]d~sig_tcleoy{ouYkvingjvBgqinlqs`]ZmlkzxfklhXaa]uuvzn{y_[]kowq{st^Upv}}vaQjop}}pf}u|oml{~c^fg_iuv~uq|rls|uz~wwvk\\kkiqqiftyywz||xkbmzzz~mrpqw~ujtvry|~zup~wqxqtztuz|y}ptlv~}~q~|sysv~~|~~|vwzknw{w~z|m^mzzvys{}pzÿľ¸ÿ¾ÿÿ¿NPPRY`_YVTUX\\`]VXgz|kghggfjx{oiomikhis|yqiegghe`dihedhmh^VW_iiaaccdedddfmxrno_Y[ainlgfijrufieegb]WPQNDPXIIRSRYadegjP:HTJFMUQQZYQNPSWWX_^VUUPNQJGQRKJT\\XVY^^W\\ZR:;LUZagiaUT_[Y]VZbilc]cg`\\dhgilkiffgjliecfjnh_irf`dgmwshkvvrrmc\\[\\YQRZa`\\`_WTW^`^ZUV`inhhngkunggilmib_e``{~kmojgfdbcdegjkin{yhabccoohhmiijflsfinokd`^`jrrmhb_\\_adghde_`eclvppunjkgdfcgngfovqjc^cisuoetsemkhjihfffelnhwyw}}rovvvywttsuwwy}~{z}}vsu{zr{w||yxw|{v{vitwnt^joaS_`Zoqgqnuxgqujme\\ixqolgmd[swmim}nSYkrkrxmz}q|t{qkxwof`pslmdfS^eY_zgos`dhr}ptpyz~vyvhmxod~|ncaxo]eo_jruudoxtwf\\c]giqqgjnpnbakiccu|lWR\\\\bcipi^c\\`zgRahc`ea^bZU^kq{slnYWZ\\kqggeclhnxZZloqvx{fq}~ukprp}z{ltyhltt|vabvrurqzz{usstuosrmpxrtmceflu|seo~oxxxwrkb}oKkd^xxdrd[QOcgmkjXoucqzlf^Nyre`^[otkonrxx~~{v|{z~ureZbhgVMQQGBWV@OTMQQFJLCLLF[[kn^ltvx}wkkvriytdo||zxzqnkiim}ztw|ztx~~}}ypspwuvzstvmp}xcgy|]uu]nr{w^bim}ky_bnapWmw_g}vtzxvvjgo`UawZHTi\\[]qz`LpzoYY]dgcbrhk\\tox}cu}ywl|kt{nnlt|OZngcjum[_mmkwyodmy\\gggyusuzmccn{tzyz~jYr|h]zvxz{b}{u}ynkl{qa_gabltzxpvsnrwqv|vyvl_fmhomjgq{zv{||vlckxyxyzzwmmv|~zy~~te|}sumtvu}wp~yznwusox{~yl}z~m|~zx~w|~ws~z~}}zzykr|~wƽýſ¶ûľ¾¾¿LLLT`bZTSTTW]^UR]rtdabacgu~vljojedgt|oigggilifilgegji_XY_fihda`_ab`bgovqjljZY^ehghhfhhrxhkgec`]VMOTJQ]SQVURU]cggaD8JRKHKUVWZWNLOTX[`^UY_UMSUKLRJET^ZVX]_WX`]H=NYZ^ehc[SUc`ZXWbkmh_`ec_ekjfhjihhiiiiga`hnh_bppaahjqvoiowtrtk`aa]XUZ__^\\``WUX]_[UTajhbbqlkvridfimlcaa^c|jjsniffeehhffkkiq|rbccdhpkbjlhfgkrqdhmnjfdbfotrkfb__acdfgec^dheptnrtkigeffdjnhisqkgc^dmrokjijjqkhiihggddmomxtuwkpvrtytrrmnzus~{ux~{~~xv|}||{zxxywuwzujovm]cleT[\\Viseonsuswvjoe`z}pjijkfV{upet}cP\\mkmpsx{|ymtl~wrfcsthcbmohl`dQ]dSctalk]bgl}lnjs~xx}ytwsfgtme}{ja`wq`ehZgospapvpt_Xd^efoj`klidZ`i`_fquhTQU^dekmbY]\\rvVag^]^fY^aQP_gunpgW]ZcpjfnkhmjweP^qoou{qsgw{wsrtu~{xozykvtxzukpzputu{~wqqsplpomnsqtpeekpyresipzmgdawzPbh\\zu_nf^MM_dlijVpteosli[bvja\\_^nngv{}ktxx|zx}w}{wpijkhXLX[FEXZQYVRWSKPUV]IL^_rj\\csu~}whmtjqxkdx{|yrxojep{xo{}z}smwuzqtz{h`ogdz\\fsvq[[ae|hvbff_~eVtq]mvzt~szqtlkmcRWvbHPg^Z[myiRqp\\Y]lddhqjkWg}vev}xy|~tmrwull}z^\\vi`gv~e^nikt|ygkvmrtvrux}{yot~qky|}g}}zt{rohm}i``l`lpxwptspr~}vlr|uzz}~unc`kimkiilzysz{yvlegpx}w{u{~ynfpz{x}}t~yw}}zvcvqwitt|pz}zoyulwqn}{~yqx}|s~~y}}~~v~z~zy¹ƽƾ½µľƾþ½ľHHLXb^SQTTTX[XQSg{wf\\\\]\\`n~ynmnmfdgt}pgehhillihnmiiigd_^`fllf`^\\]^`adkrrjhlbZ]chgceecfhqwhlke^\\]XOOVTT]YXYVSU[cfcZB:HPMIIV\\X[VLLPT\\b^VYgeUUYRNPOKO]`XY^^ZVabTFQ_a^`gd\\TS^c]XVammh_]abbhlkifghiiihhgec^akk`^ipibdhlrsllrsrrphaed^Y\\efc`^a_VSZb]TS]ikednkfrslgchkke^_aavlhssiffgghhhgikkksvjdfdeloh_kmfcdmrlejmmkjgfmrspidc`decdfidc`gimwpnutkgcdcdglniktheeddhqmjhggiormfhhhhgeilnrwrxqkssntxroojovq|~{~tq{~|}yxv~||~zux|vqwztijtozi]aj`WYTbqfjpsqx}wite_~rmhjjgY|rxgv|ZM]likjyszsyojmkyxsj``oncbellgk^bP]dNfp]heZbgg{hggk|wnr|ljmecpme||cY`vscbbYimqj^ntppYYc^bbofbfgdaYab\\difnfPOQ^filj]UVczb[pbZY`bZbYIN]fipbZa\\hpfjsqnmo{WOdsokvtxkkz~w{vuvy{~usxw|twuuoyvnpv{{{xsrolhnpplprvphjqt}riwhnvh]]em|][jZzqamhbHK[djdhSnugkimi`{g`YZ]`keh}q|}ivxuxzxxx~}}xrvka[VfbLT`mga\\Z^XSZgm`FVdjwmUcwzu}}lhfhvupnxt|ski{muy}n}zopughwy]oc\\w~{som[WY]tdreh^bv[[u}hbwxywxss~vw}}qrkdRQumJNd^WUmylZpn^][uecmqnhV\\xkv~{q|{reprznmsbjq|{eerxgxnrsvmzx~|zvy~~{o|{xvtvxlobr}dcerdvq}tnrsop{~yrdrzswyu{}uog\\fimkgijwxrr~ssmggmp{ytpz{rfks~~rwsu{u|~lzzz|z|as|o{frrtpttvmt~r~qtzvt|~}t{z~z|{z}ǿ¾Ľǿķÿ½½¼FIQ]`UNQRRTWYRN\\qwgWV[]bjx{mhkmebiv|ofdgillkkjklljihffedgloj`\\ZYYY\\ekonibgj\\]]`ccca`ahipvinndYX\\]VQYZX_`][XUUZab^SB@HOQJHX[X\\VKLQW`c[Vbk`WZVOQTOOYc]X[_WR_f]RVca^`fbXXUXgdYX`lmiaZ\\`flmljhddklfefgfd`^hm`Wcojeefikoqopqppqngdgfa]_fhhfbdbYXafZS\\ddjkpvcgunifjmhf`Z`eq{kerxmadhhgffhkkjklqofiihhlkecokgjkijjhikklmhhqqnlgabfljb`ijcddiiuslrwsia_abchominoegedklphffdgmrrkcfhhgegmllsur|mnsnluulkkkppvz~~xxwxps}}xyun{xv~|xsw{usz{uihojuzaWcq][VZlgbjspvzl|i\\tpiifdb}jtowSI[ceemqrsnvhjzfhntoa]^lk``emjfiY`P^eNjjXccYdgevd``evvhj{yfah`_mle{{[Tbtrea^Zhjoe\\lqqmU[baa_rb`bba]Xd][kh]ldHJUcinmeZTYppTnrVWY\\\\c^PJPYn{kl_bf^iiguxtno}jSVhkjmxp|nmzxu}wxz{~~uy{|ytwvm|ypkw}}uyurnhdsznepwvqlouvxuly|luscWYjbsj[gXuoeheeFFVfh`hSn{iefpjls_YU[ZdgZi~xn{ukvuruzx{syu~~}|}g]chtl^gs{kcbbe^[est^LbmngQv}~zkfglv}xux|{utx|~uq{vxt}wmpb[sr`pstskkYRSYl_lhbYmjT_{slgvx|q{~~}{wwueeVTqtNLaZTQnuj_spc`^}j_p}tocUZ}{qs}{xkyq_nlzwrncovmo}~xy|{yv|~svtwuzsqovufp\\x}fmswf~qomnslny}xl^rtptsr~z}vtl_aikjejgqusj{qmmjgkl|xzkuzvmmtwlpqowrzzj}~~~~x~^uxnz{}cjmr{~~tkmu{olrvtwzs{r|}v}|z~uzzw|þ¼ǺĿû¿½ž¾üHMW_ZPMOQRUWTMPeywi^TV\\^fqwrebfc]fvzkbbdfimljjjllihhjjijlnpmf\\VVVWYajnlf^_ih_^Z[`bb[X`jinshni^XW]^[XZ[\\_da\\[XU]^^[QB?KQTKHVZY]TJKRZ_^YZfh_XWTWVOKRae[X]^TWef\\Ycd^bhdYUWY`gb[]fmkc_]`jtqlkid`djhdehhgc^epfW\\jlechkhjmooqpnoqmgegfabe`glieee]aj]Ubhahqkxqcpohfknhbba\\cqyocpwndaiihgefilkjlnmjifilmkiehmimqgckjkjiknjipqllhaahmlcbdjebdhkjxjiuwpb\\]e`bipjhrhdhfempigcacfosle`djib`glllrtw~vkpoinvrjkjoqv~vrwqz{utwvu{zuxzxpoxst}}wurpsvw{{qgigbzmWYujbZTdh`gror}{n}r^}|sgdd`e|czloKGX[`alnqrjqkevqcebre_\\\\ih`^fncfhX\\O^fPkhV_aWcgdsrb[Y_ntdc{{utb]c[ZhjaszWPdrrha[\\fhk`_hlvkR`a_^`pbbcb^X[][dkdVkdGIZeqqjdYNa|a]zhRU[Z\\g]OJO[}smidgddfcp||visy`T\\igmp|~uxpixsw}wy}}xzw}y~zmwwlx{qlvvnxwrpef~hbtxurouxp|~rxnuaOYb]ht_aYooifcgFBPjg`f]p~jaeulx]_WT[VccVmmnypotrps~}vyuqrs~sg^ozxpnp}ygedgh^aluoZXpm~Yh|{wkllvr}|nzvozgUcrdmjrrliVMOYh[jiYayaQczpsltzxx|wvoYbZTnvXHaVTTio\\crf^`k]rztkaUXu~rn|yvf|yq\\mhzlfvy}||nx}ppw~pwyunluvmqc}rxyxop{jkltknz|zqe^w}mosin|y|~wwp`ahjicighsskmuhomhjervzqpwxqrtzlnrqts{tjzu|~}{\\xsoxz{achpos{viikulmpo||uzv~t}|{~r}|t{¶ȼ¹ý½Żſ¾¾úIRYYSNLNOOSVNLXn|o]UUY[^issh^_a\\bt{th__bcdgkkjkkkkihjmnllmqngaZURSYclnje^Ycjgc\\VY`c^UTaiinpindYVW__^]^_^``_^^]U\\]\\YQEFNSTLISXX[OIMTY[YV\\gg^WWWZSMPZedZX]\\Ydmf][]`eokVT][\\ac`_ceihbbfluwokhb[\\egbeiiif`cqlZ\\hkicckleimnononopmihifbhgclnjiiidfg\\_jb`uvlwhdrjbhmga``acrynclwob`fhhgggikkkkllmqjehljgjjienvh_gmkkiinohmqkjic^djkfccfhb`ekkothiuxjZZ^`\\alrfenedihgmidfb\\afqsh`_eli]]hnlknsrmpljovsiihozurozqnxtnvyxqotqvzmfrzlrxvstunkw|}ysgff[qyu_Sosi^P`f^dnpkwzn|zdpqib`\\l{bxkgGIVV]^giommmm_ikaZ]qb^[[ae_[gp^h{eUWQ]eWlgU\\a_jgcmraWRXhpa]wzmna[_WXci]gxZRhqqh`[]dhg[_eivjXfb_[apaabb^V[bcik_Vk_FM\\jujgcVSl{]l{_RVY_j`WULLfkkrqk\\gbb~wl{}xbVcjmtw|zhivoy~z|~vywzw{zwkwvjv}tounmuvtrak|ffyw|uouz{i}r~trv_J_WWgtf_]ljr`bgF=Wkgicez{k^b~ltTaZQZ\\h^[u~gnwrrsonu|{t}npps~|pje}|xwzszsjfclg`fkqhYfossbs|l|rm{|pt|rt}T]xffkrrmgSKQYgSegVovWPlrwwx}y|}xw}}jV`cTor\\JaR[Y]nUbuhbckZryrkbWWrtjtzvhv{r^ok~wo|}~{}{ks|rm}w~xrw{yomuw{ys~xvzxzwekithny|ve`\\{gnrekww{~xyrbdihl^fdbprkhshstkjemstwpswuutvjhrsrszpq~zs{z~y]{pswwz}`bdrijy|ichoipokvwrws|}ns|~ÿ÷˾ɾ¹ƿſſ¾¾þŻ¾üLUWTOMLLLNQPLRfuwaPPWZ[bjnh\\WYZ^pxob\\\\^`bdfghiikkighmqpnmkmjc]VTSS`lpkd\\X_hihdVRZ``\\TYeggnnhm^ZYYb__bb^`c_[\\aaWZ[[YSJLVWVNKQVWXOIMTWWVT[gg\\TWWTOU^dfaXY^]\\hnf\\XYbpq^S]a\\^_`cbccffdhqxvliibYV]dddjmjibaor_\\iiggadkffjjiikonnolffiddljjqpljjmmie_hi]h}oor_mraakj`^a`gqwrcatub`cdefgggiihjljjrslkliginiflwp`bikljhlnkjoljib^afifbehiebafklonfjuuaU[^^[bmmdcdbckhhiecc\\Zbentg_]eleZ]hllklu{qqklopxqehlv|wtouqqwpoutqjirvuobbp}siprooswmhw|zyyk^dWhyygSjxlcP[a_`kneqzmv}khtka_[quczndGLTP[\\afkfmjk[dg[S\\pf[\\X]i\\Wks`jwbRUS]dZlgWXafpgakp_VLTcgZ[s{ifbZZSY_f]cudXirlhbZ`efdZbcftg]kc`Ydq_cfebZ`hhll\\arWGQ\\trahcY^xvcsvaSXXimT\\]OVvht~uh\\j_nvw|yyd^hpuy}v^puo||wrywv|twlwtjuzysuiqsuvsbsvkj~w{qpqwm|rulws`OdOVhnlcdhgy\\dhI@`ehvbtvl]q{mfWf`KWen[kytemwrsrlox}yu~emrv~z|{}~}wnxwz|ylrumbckb`efha`mmltql~}tqu{s|}|}qXcviarqqnbQORYdKafcwpOPy~r{}oueSaiVqs_U_Oe_VhU`xqcfkWswpni\\[t|uipzvr~v|sbtv||yzy~|wvksxxm{y|x}yw}rnv~ssz|u^kgseou|ua[\\{|hmidspuz}y{vfhmdk_c`]kqjiogq~olnlynuusuwyusjbttmv|r}yq{wx|yb~n~wwtxs^iatj`vhZfmfusks{sz}u|r}||z¾ɿüķ˾º¾ǿ¹¾¾þĿ¼ŻþĽLTUOKKKKLLLKM]qseOHOYYZbif[SSV[hrmaZ[\\]_bdeegijkkjjottqmkkihaXTX\\^gnmd\\W[hljh\\MR]][[Y_hdcijhk\\^^]b_bicZcg^WZddXVXZZVLM^]VPMPUVVOJMSVURR[gbURWUUW[^bb[UY_^ahkg^X[jwfT`g\\X^__b`^aeegr|zofhdYTY`cbflmjd`kvfZilbffaii_dkhdeknlnrjaeiciohkrpljmrnjgeid]uhqobtm]gog^^denwpe_gsk_ab`bfgffefhkkhjprpmjggkmeiywd_ghiihjoplkoiif]_fgecafjieaaflmmjdlunYT]__]enica]\\diebbba_U\\eeorg_\\dk`V^hjjijxspqgnpozqafq}{ssqustuorsnkkgoypa^iszz~jgnmkntymgz~wx|k]c\\jt|yhSgvlVVej]mj_mzlo~rgx|tm^_arnk}sbNQRKY_`ehbmek\\dfXQ\\qgW\\W`o[SnvhlqcSTU_c\\hi_Pbipf`jp^QKSa^SYo{gaa\\WQ[\\dcdrl]jvfeg\\dged`daergcpd_\\jtablicbhjjmmZesTGR\\xp^bgdf~qowvgSY_rdQhfWj}o~vefm`|x|s{udijsv|o\\usu}zqqvt|stlvqlrv|pvxhtrtttewqonuxooptxvvog{md[bMbgknmhen|kffRHfep|k|xmenzdajdGVom]zsngnsqrpkrz}xxw`ntw|xz{y|}~}{ryp~mdtue_bb\\`dcbaeqz}kwhtyuy|{sfkvkavqqoaTSV^bTfxt{nO\\~z}zurxzeWciWpyf\\]PheW`V_w}gm}kZsvstl^`vvven|xy~y|tlz~~uwt{x~vqjtvzoz~|z||vsp~nq}wywYnqmdlvrwhX]xtq\\`}lrx{z{|lmtcghiebimklqgpvqumqu|wr{wq{~}jayvn|~}xxw~tpvzj~p~{wsumWlavpVolVanfy{mpxy}~zx~~~yľȿþķʿķ¹Ǿſž¾¾ýƾ¼Ļ¼ýÿžMRRMHHIIJJIJTgqgUIKTYXYcf^VRW^ejjbZY[\\^`aacefhlnnpruuroljijcYTX^fgkme\\Z^ekjleQHT^^\\[[ahcaefheZaeb_akjbXdl]SXdeYRWZ[XK\\ccXRPOSTSNJLRUTPP[c\\TTVWYYSSY]XTY]^ckncZTZtpYYgcXW]^^^\\[_dcjy|ofifYTV\\bbchllhahwm\\eofcjeeld]djgcflmjop_Yegenoilppkhsxokhfg_]{{colhreaqpd]^gkqqf]^jpe^ba]_fhffeeiljiknoolighlkeo}n_eidjiijsolljfge_cgc``bhlkc_aglmmedoqeWZ````hle`]X[dd`]]]]\\\\^aenne]]fi\\T]egiegy~nomgpmo|m[gu|{ssrttttosqmkmfhun[^ptswmgjjggnsvsox{wz{k\\[jok{ufRfw_Tdp`nkVexnlxxlrvmn]_jsgy}ucQYRK]fadhdofm^egTQbtbTZYgs[VoxrpleVVU_e_fjgL`jsb]hk]JHT_ZOWo~dZa]UO[Y_jfmsdqzdchcgkggfd[drihpe]^nsdaklikhflodSjsSHQki]gmin~txxteV^mu_\\nd_x{u{tdpmlztqhmsvqzh`vtz}{vrro{p~vpsqqpwymztionpsrizytsqvtnpzuqpe}nid_Umelsxkiv}lc^Wjpzv|ztymjnohAXyjhhtioqrsllv|}xykfrsxzzxwy}{~}zruqkzt`dyl[^ZZY^ccfgev}du}kzt|~}}zyqzvixwyudSSaljizyx]wzzpx|{nlWdeVne_\\Ugj]Z]axos|mau{z|m^`wqw`nz~|xwz}}wtrvv}ujhtxxk~}z}zxqq~}iptnvxYlyhckwmpy^`vV_|nuy||{~tw~ihlxnimmpnykt|w|v~xy~yp{voy{{gb{xsz~~~}rpsznq~|yovmPihzwUixsZ_ni}sox{~y}u}|~zſſǾ÷ǿǼ¹Ż¸Ľþ¼Ž¼ýNQPICFIHHFHR`mjXKKRUWY^daWQW_dgf`ZXZ[\\_`aabdehmqsssqonljjjf[TX]ckjjfa_ekigkl[HJTZac`X`ia`effaZdea\\eqjbVci\\RWcfZPV[]\\ObihXRROSSQMIJPSQMOZ`XSUTTVOHMX[VVYY[dpq`SP[qaWcbURW\\]\\[Z[`ccozqddh^QSZ`ddfikkfgvvdbolcjkdimc`gicbilkkqjVZdagpkhornggwynlhgi_a}vcmjknchtk_[_hprlc^akl`[a_[_fhffegjkhimllmigfgklmrufckf`kjmtupliedgebfd^]^djie\\Z`fjlibfpl`Z_bccbhh`[YZ[a][\\\\ZWY__]dlg][^fhZR[cefbgvuiokhojqwcZjx|xtwussstsrrplihhqo_dttouyoafjcahoqootuwwxxo][yil}qePe|i_dpjnpU[ssow|prthq\\`pqj|ufV^SQbkefjjogpbhiUVluZUZ]mv`\\oxxtnhZ\\U^i`dgiM_gs`YfgXFGR\\VLUm}dS_bVO[V\\tjgyku~f`gjjpldge[dojkof\\]otfglnllcdnq[NqvRO\\uj]jsmtzwuucYgsq`mudm|y{x}rktlsuypnp{vq~~bgvz{~~vrrpnwpxsqtsq{tp~uhijkqooy{vk|~urmr}x|ote~xrnib`sjqyjqzrfjjr}}}vu{vf>]zmv}_}hnstshpy|zw{}kptu{||yvx~|upjqlqh\\kvaW[QVTX_dmigxsYuytwzox}~|~{u|uv|jR]|twyqys}zxjrWfcWiica_prf^dc}}zy|un{oac~r~z_q|||~rzs|zwqosqxr{khrzqd|x~uy~oo~~zzgpmfm~`muodjwkanhzxyffiz{}~|~unnxqxs{rx~|~||}s}xn{x}fbz}|~r{|{vow{vy}}mrqUfj~~bgmycfmk~wqxxp}sx~{þ¿ƿž»ʿǾþ¿úľ¿Ŀûƽ½þNPMFADHGDEO_kk]NHNSSV]feZQS_c_]`\\XWYZ[\\^acccdhnrtpmlmkjjll`UY`befeddinngbdnhPFNY^fh[Rbla^bbc_\\eb_]hsgaW`eYRVaf[MTZ^^SbjlYMRORQNMIIOQNJNZ\\SOOONNIFNZ[VUTT]hrmTHMbjZ[`WLOWZYXWW[`disticd`WRU^efegjhfhrykcmogjoiekjcdfd^cmjcls^S_b_ipfgpqkdj{zkklieammclnpifmnd]^biooj`]emfY[_^^cefffegihghkkmleddfjmtsidhifckluxpmkgcehdega[[]ekd\\Y[bfjhdemoh`^adeede_ZWWY[_YX][WVX]^]ch`[Z_ffWPZabcagsmfoihojpo__muzvsusqrsssprrnjmlnpkoqsoqohdhh`enpngltsrvxurdhcq{pg[g~pklosor\\\\mrtx{rsvlobfppq~ythTcY`glmjlopkqgllZ]vrX\\[aoxdaox|xqn_dU_h`c`eQ]hs^UefT@DPYNJWeziS]cYMSV_|kd|qs{ibhmmqsecfaemkknh]_stkkmmtnfgooYVwuX[fwk]jymvzswt_blrpfsunzxzzzyrrmnzv}rrtxnuz}z|_l}ystsjvlyyurttuzot{seecgnnry}khytqlx{~|t|m{qe~~wspjbhwrs}iy}wsvvvt}yaEixtlagkvtniuy{wxxzwwy}~}z|zsogplmb`qn]XXOTNO]mmaoscZsxsufruy{~wx}zy}|||v~~y~~q~t`yw||ut~xpozXgfZolfje~|oikfu}{uimv}^t|uw~u~zpvxvxqnqornykjrznZzsqv|ymk}wuuckfdi|jthukltpVwxk{zw`~x|tx~z{z}~{~o{sjew~z|q{|}~{}oxw}z{vksbdjniiylqmquvxpysq|{z½ǿýķ¾¿üƽ½ĿKMJDACGEBHZjl`QLKNPQXbfaVQW^ZVX\\ZWWXXZ\\^`bccbfnpomknnmkjicWU`cdeeejrvreY]flaMLT_fh`OTln[Y_`^]]e`]`lre`Z]_WSU^c]KOY\\_Wakp]IMPUOHLIIOQLHNXWMGHJJIIKTYWRPPV`hmbHBPliXYWNJNWYTPQSYcglokfdc[RR[eifbhmgfqwqeimkjnoihlhcdcaagkdbpnWT_`dlibhspgem|{ebpm`atwbbnrmfinh]_cejnk`XZho_V\\^]djfdefehhgfgijomcaceiqzm^bigfhku|wmjmg`fidhi_XY]ei_YY\\bggdemnkea^ciida_[VSUXZ[VY_YSUY\\]^cd^[Z`ieUOZ^_aagnhfnehplkh_eorxrqqomnvzpknqpnolkotxorppljhffdjqpjgnsorvtqml{wezrmlhl~yurqtvopa`ms{zzstusnjmpow|ywsiToblklpnqtprsjooffzp[bYeryefpt}{vudgW_f_d[bT]is]QdeN<CPUEJX\\wqXXa[INWa~ibsqukikpos|pahkflnmni^atvrplmzphjpm\\f}t^ajzzl^i}mzypys\\hnqpnsryu{y}}zvtvhoyxuwwwiuw}x`q{ru|ogxi}zxtuuzvl}z~qbb]emns{wby~rpljzy}}xrp~qmsig~{sstmjdrxxymq{|{u~y^Twvyak~ej{snmyywu{ztuwqoenlh^cqi]YXNQGI`qfepm~^crvgrlutqzn}usuqr{|}yzzzpvtrw|p{vyzru{vox[go`vpksjvvrlu{}sv|}]s}zs{mz|w~|ttutrz~zqnplk|oviktyoX{r}snrsifv~pmq_eabjyq}gfzory_q]w}mzw{z~~zqmgtvoqzzyz|ozsxznpmchumgtq}mz~pxrvz{xl{{wwý½ĿȽȿ½ÿļǿ½ľHHF@>BDBBMalgXLLLNPU_c_YTUYWSW\\\\VVVVVZ_aa`abcglnmkkmnnkg`YW_dcegkotythZT_iibIKZdhaUM^riVYb_\\Z]c^[blpd`[\\[URU\\a\\JKWZ`\\_lr_FIXYOGNKNOOKGMVTIDGGEGJOUTSPKP]bcdZEE^saUUOIKSYUMKPU]fghkjb_aYQOalib`gmnqvvgfimjjomjmlgdcaadjfaindUV_agicbhpnfen~vYauoaeul^grqdclmd_cfikmeZU]igZV[\\_iidegfeggeefhiok``bfjsuf[biffknz}tklngaiichg\\XY\\de[VY\\bgccjklgbabgkic_\\[VQRVYZW[`TMZZ[\\^a`ZZ^alcRZ[^__`giafk_gpje`cknoyulpoiiqysmmlmoplhlsy{moomhhjhcgnrkbkslirtpkhuro~rmqruzztstuvnljmqx{ztstpmlooowxvvrhmpionosquvrusnqpmq{o`dTgs{djpt}{yuelZ`ebbYaU\\kr[QceK:AOQBOWXvv[V^ZHOVd}ibtpslllppszhdqikomnha^pxusmo|oilpm`it`blzyl^j|mxwpzo[jnoporpsz}}}xrrwfr}|uvzwtmzquteoqzfoqo}{xvrrvzrnv|oaaZejmqxkcxofli|}swqknzhwznei}ulwvhli}{{vkxyx[a}v}^zsfkqno|xut}xnx|wwpdmle\\`mh^ZUMPKKdijulrqdhpnbkturmvziwrp}pmnvz}xuyyumlmlr~zzpztlquxvp]gwh|tqyqmvxyu{{hq}suyky{}{ry}|nvtrqp|yqnnkitpuhhvwo[}zq{wkhhfco}zlie[`]_iv}uk_tqzrrjsy|}~}~pipvhr{}xwvw{ozquyrlpjizseout{|pyru||}~{}jxy|z¾ÿ¹þ¿ü½¿ľžſ¾ĽFDB??@?@GUcc[PMJJNRX`_YVVUUSUZ[YVTTRU]dc`^^_bgihijkmmkicZW_jgdfmrvxqcWSYbhdZNT`hcZW[ms^PW^[VW]`[\\cllc`\\[\\VRUX[YIISW^]]lr_FM\\_PIRLVSQLIMUPFFGBAFKSRPSPIT`__aZGQlnVSSJFLVWOHJR]figiig^[_VOZgic]dkorsonhhhmmoonkmkfde[[ii^_kl_TW^de`agknlghuiOi~hcqq^^rvj`dkgcddfhhi]UVdh^WWZ]dmgbhhdfhgddfjlkd_`dhmsj\\\\ehghmx}zplqk^fmfdga[YZ^a]UTZ_daaiojke`dhkkc][Z[UQSUWX[bZIQf_ZY[^^VYcdgaYbY^acdfeclkZeoeafknjp{xmmkjiisyolkjlpoiisyzxmnnifmnidkmne`rqcismgcf|mxykpwvrw}zrrwwslouss{xtrtpmlmppstttssvroquuutwxsvuqrsnv|pihTjw|bkot|{{sit]^jj_X^XgnmYRbdJ9@OO?QWWtz]S_XOUTh{kf}snqnoorrqo^sqkopoecaoyusopzojklncg~wbcnxxoamyntyts}j]lknnlps|py}|ywnovjsz~~}uy{wrwvowqszjypdn{y{{{kn{vjw|n{lb`Yejoquaq{yibgc|utzqkgosenkbkxkhy{ajsw~|m}yv_p}unblhkloq}vru~n~~paoib\\[kj`[PLQORhfrxi|gnkidfsh|unh~zy{o{t|fptnwljlsyzrswsoifhfo}{zvq|kepv|sxs~anzr~wt~vox~x|wwqn~|qzxhyq~vuiuy~ntxpokt{}{romognoricytnbzzpxwibb^_huzticWT]\\Xhuxyx_w~txyxxp{zyxkl}zgrzxwuvvnxoy{{qzwxipsltycmz|{~xq}rv{vz~utylmu~y|~üþý¿żĻ¿ſľĿ¾¿þCA@?@?=DP[]XQJHGIRX_a\\URPOOTYYTQRRPR[de]WX\\_cfecejlokea[Y^ikffnuyysgSMT_ccd[YX_bZV_ntjRJV\\VQV]]Z]eliba]XYVUUUYWIGQT\\]]fr_HN]dQLTNYWPKIMQJ@DE>>GNQONUPJY`Z^cYLYmgOOMDEQXRHFKVgjehkgbXW]UWcfc^_ghqsinuiilqqtrnkljedb]`ha\\foeWUU^b\\\\gnlkjgj~[PrcfpdYk~r`\\bfdfiffffbVU_igYTXY^ln]`ojchhfcbfknh_^cfkpk^Yahhhkq{xmoqcapobeg]Y[\\_^SPUZce^eokhkd`gjih^[[\\]WTTSUWadRL_i_XVV\\\\U[ihgd^^W`ihdegikcUdkcdookirvpnnjfhjtqjkijmqnkr|ztyllngirponojiimsleptg^]km}riryvou{xrtxxomrwqx}|wprupmmlqqprpqtwvqkrzvwy{|vx{suvox}qlmToypalnp|{zpt}cjzq`]Z]tmeWY`cK8AOJ<S\\[s}^SaX_^Tlunjurkopsrutpv[ntmnrpceeo{wsprzollhmef~{ddruvsppupptpwb^ohnljmvwmw|usuilvnuy}}zt|~xompzuqmjt{q~xz~akqdy{hyhc_Wehkrg^~nxfb_iyquslfenjefh_mpdfx{_j~r}s~|}zuhzsaizkjl}iquxrpw}u~petf__Whlb\\MMPTZhmyxo{avh_amigvg`{yqzwj~nwcg}um|v}hhkq|}yxorvlkfgefnzzzor}b[ow{nzvbyx}zw|}quzz{|ro|{x}waykzzuseswyxrztnlixz}tqirgeotk^uvhfvsnuth\\ZZ[`mxog^ROWZTeyuelwxzy~}tl{w}}~ng{~yziprw}srxofuxpxtmzwu~hpvno|em|{w~{}xq~~rw~}qw~t{okomgu}{uv~}¾ýºÿĽûÿºÿľľ¾ÿA???=<?JV[VQLEDKPX]baXQLJMSVSOPPPNPYdf^USV\\`abcdeikhb\\WX^ejfepzutrgYMPZ`a_fb[Z_[S^lsl\\MNYYUQV\\ZY^ejfbbZS[YWUTUUJIPPZ^]bm^IP^cURUP\\XOKKQPB>DA<?HOPKNXOL[]X^bZS_i`LJGAFTVJDGN^kb^jhe_UU[Y`d`_[`ffrlctyhjsstupkklgbc`_de^^kk\\XYYb`ZboqkhfdrwTXxzefdX_y|eXZbbcklfacc\\UYej^TW[[dneZfoedjgefhjom`\\bdipoaRZhhgjnsy|slqk^ivlafe][[^aYOQX\\b`_knfhf`cgheb[W[_\\YVSRTXc`W^jb[WPS^[S]okhdXW[infcfnj_[Yhjgipkinrsppojchktjejfjqqnnw{utxmlldsvmmpqmlnsskjsob\\^tso{jlwwnmu{xouwskksuo{{zsnrrpmnmsomqkoyzumhuzquz}}r{|ovyrzrrqXwugflomz{yqykyykbUiufa\\_^dXACNJD]dav{[Y``p_Unjqnovlmpwsvyp|aiplotqbehnxxsnoummlbjdg|wdgtsy{vprpknpy{Yaqgjiiovsfuxmptfixtsy{|y|w}~ussix|z~|{nvzvyw}xy}bp~layybuja]S^hkkY]vhsf_]rsnskfcbhcft^b^mjbgp{^ep{y~~xz{wvrnws]jrggmzfswrmluu|wvztnxbbbUgreURQQ^]gt~vp_y^Yfqzgetb_{}qryte}itb_wvnxzz}hjmqy{xzpsxfkdkido}~{pz{}_Snwy}|p{~{k{|{{xuoq{zw{vpoxvyx}wZmvxzutg~vyz~txwpmbqy|tuelj^hxn]g{eesmjspdWSUVWi~qidZNNTYRdvsnvwx~x}ywyo{uv||}|ph{~nunmmy|umq}b`wmnusopzsipuplunp~z~r}zu{wz|~~|t{rytwvmsxj{zmggm_{zzvsw}zz|ſżĿ¾þ¼ž¼ƿȿ¾ûľý½¾¿?>=;8;ER[ZPJGCISXZ\\a^PGFJSWRKMPONPU_gcWPTY\\]^`dfeed`[WV]bfgcjwynkgZOLT^`^^`d\\Y]^^mrm_OLT[YTRVXUX_ddbabWQ]]TTTPRKLNNY]]_a^JS^bVUWR^XMOONJ@>D?<@HOMFQYNO[ZY^`ZXddUIEABKRMEDIScg_agdc]TV]_ba\\Y[cffrffzxgjsrtskgjia_cccec`dlfXXY]dXXisogdbf~mS`}vdcYVnr\\X[`afmlb\\a`ZY_ebURW\\`hjacmicghegjklqh[[cfioiVPajeeknquwoild`pwhagd]\\[``VQUZZ[[fngce^^eghe_\\W[`\\YSOTZ]bcfjh]ZTOYdWN`qnd]X`injcfpk_]Zbmjhjniknnppkmiclsrbejclpporywtuvokin{ohjpqppqrspnnld_eztjrugo{rhkv{uitxngmsqo{zyonrqqpnpsllpiq}wsjhuwmrv{xn||mvzs|txtc}pcgppn{~vp{}|zrhWnrgfac_nmRFR[XchfvqXccky[Zobsquliqvp{}p}jgjjnsn_bcjuuqlkqlig_cchupblunyskpnfjoyvSbqfhijpv|lbvvfnteeuvs}zvxu||zyvzkls~z}ws~~yy}}|w{{fqxf`wv]nkaZLWjjeS]zm`laX^qgkof`^^a[e|iY\\anddeh|_^ny{|{ysyvqppuso\\jkeanzfsvnhgqnxnrxyz`c_Vix`M]TWg^h~ywhczZWeoujfn_c|thtt]vj|}sb[owmo~}u~|jpsrwyy~qwxcpepobr|y~}{{{dVowp~~t{x{{|}|ysz~xkusyzssiouv}|{i{Zwsysux{l~||~~~zyxrnbeqzsvlai`^wyd\\yfgqwrhptaQQOOPif`a[LMW[Qc||vjvw}qqttuzzwsouwz{wqi{|hssklxtnjszU]{eksx~whyskqssjq}tqx}rwytqv~us|zw{uvrpÞqzrktxslszy{llitu^p{ttz}|wÿǾĻľľþƿĿø¿žĿ¾¿><:66>KX\\TKGBGTUVY\\YRFCHOTQIHNPLNU[df[RQUZ[\\^`efb^[ZXW[cefehptpig^QOSW``YX^e_W]homicXKLW[WTRUTRX]bbaaaURb`PUSMQMLKJW\\^_`^LU_aVWXTaYLPQPG@=B?=AGKHHRTORYYZ^_]]a_QD?=DNNHEFLXdb`ee`^ZSW`a`]YW\\fgioal}rgpqotqgfje^^ddfe_agiaXZ]cbV_rsg]`cpcVkqa^Sa|}gYY[afink`\\`_\\]baZSUY\\ckhemlhffcimkkppcY^gjkk_PWggafkmoushhg`etqccf_]__c_TRWXZW`oi]bb[`gfhc[\\XZ`^XNNY`_eljcb^VQXdcQSgpkb_bnnigikpg[]\\dmjihjhjminphglkqul\\hjemnopuysqppokmvujppnmpsrquummohdmvkmvmirxlenvwoewvmhlqrr{zvnpqpssqrqilnhszrrkkppmpqtsk}|luxp|rtqj~mbgqps}~qs|xuxq^oqpofgiz`HZmgcikpgalfsz_bjfvrggrnkq}xrgadksl[^^cqphegkfc`Z]bjpkbmtl}ieplcilxqOdpbgknquyg_up\\krbbrwtxzturwvsy{jqs~zu{uz}}vx|y~zvuiqt`\\xsZki]TESki^PbvcXh]R]f^gfb_YZ[UfvbX[elch`gy^^pz|v}xsp{pmfp|sk^ja_]oyirshcfphuem|}}~cb]^pyXWgZdj_p~xehzZTbmqkjibnz~vcqsVppyzvpcXjwhlzm|{pyyrwz}uthulqpmx|~z{zv{}mcpxt}~{{}w|xtv~tmni{|tpramqv{|}ev\\rysuvs|||{{{tmf_esprxbegYklZqjhut|xilvaIMSLGj^V^[LN_bSeu~~|grtnjwusyvvw~snorrz}zy{}}uiz{hv}vigxthjvsP_xbjtyduszlrqtjrzst|v~z|qqsrlr}umzzu~yuwytsjŚmyqjssqqqswxpumk}hmztw~}tƻľŽÿ¾ſĻǽþ¾ÿ¾<:87;ESZULGCCMTRV`_RGACJSQHFKPMLQY`ieVQRTWZ\\^`ba]XVUUY^giffloookbUNV[Z__XT]hcZdnnd^\\VOT[ZTNORRQU[_`_a`UXc]RVULMMOMIUY_^a^OW`_UXXUc[LQRMCA=@??CDHIKNORVZYY]_]\\]\\Q>;>FNLGGKS\\aaaba]ZVWZ^^]ZXY^dhmj^q{hirmpskefga\\_ddfd_aghaZ\\bg_[kvn_Y`iyu^`x~k`USk{q_WYZahipm^\\]^\\[_]XXZWZflhhkhfc`crrhmum`^dlnldUTahc_djkqtidfaamukage\\_cee[SVXXW[jm_ZdaZaffh`Y\\WZd\\OLS_]]mn`^fZRWbcWO_nhfbgkoifkrmlg^[_kniffijkklmieirvqth^lkflmmpvtnlkgnptwrqrqnnpxtltvnopjjpnimseksrfhrvrhcyrkgjotszxsopnprttuogkmhrtosmkjmnplnpj||htxo|nrrn|i_gvoxz|mywuw|pfmp~uklq`Lfuidkmjfnrm|zihjqwrejrgi|trviY_hrkZ[X[ijb_ef`_[VV\\dif`mqi{c^oeeplunOdnafmpsrxh`qfWhm_]nwvv|{wppsyvoz~uqv}yjqwp~}}yrvzy|~yw~mnrm[\\vqZgiYOFUgbYOcp[Th]N\\^\\`]_\\WYTVkp^W\\gjcgamp^aruu|v|xsskf\\mtjaj]Z[ovkppaahnet[mymjglssZmocqjhzgmuZT_msqnik}zyzxtbonVnxwssmaZiuerqhy~ytv~wu|umu}{|~x{|tzy|wqpwuz~x{{txs{xtvwlrjc{mrqot^kpu{}hngyruvxyzz{|wxmlc\\gmn|jdg]_x[hpf}xxymiufDGXKCkdQ[cMNmkTev|rnqrvrcvxvuwrusxunhmmmz{yysvzy}z~mw{m{}yibwykoynZi}l`nzzgqp|rkvrvnx{szyvy}vyomkpjq|vizyu{tpvsutiĖvo{tkqrwsssuttrhxxrvy~sûĿ¸ʾƽ¿ƿ¿ļ¿¾ÿ¿ĿĿ:87:AOYULFBBJRQQV^YH?BHMMHEGILMLS^eg^SQQRTX\\^^\\YWVUTVZakjdekmoqi\\ST^a^\\[WR[klgomc^^\\UU\\]WMJMPPPTX[\\]`_Y^dZPWVLKMUSKRU\\^b^SX``XYXWe^MQTO@C>?A><AGJLJMUYZYY]][WX^Q:;@GMJHMSZ]^__^][ZXY[\\ZVUW[_bimabwscknipocced^\\_ced__dgh`]chgagtuh\\[bn~kcm|paYKTqxiZUXZaektl[Z\\][ZYX\\\\ZZ^gkjkhgdb^juniqpd`dkonhZR\\hf`_fjmtk_db]htqfflb[dggdYUYWRVfocX^b[[begi^Z\\V\\dWGM[`\\bncYfePW`]VTYeg]efklicjomgie_]enjhfefjjjoh_itqtlrldplchkjptnjjhgpwsqsulnsqnxsgpuooomqojkmldntlcnutlbdynddjqtty|tsplkvwqzskflniprpsnhhmprgkoi}zctwmyznuwtxe^jynxtwnwpyxqlmxvpsrUZsrljlmhlyt{yonqwys}ounfhmmzpY]fnkXRRU^f_Ydf\\XVROV]^_^nphz\\Wh`hvmvtTcm]cmvtqujdk\\Sdd]\\ixwswzwprotwkytl{zv|hprp}w|x~spwxwz{yyyhqqi\\]pk\\fhWMHT_WTScgWUiYL[WZYWYXXYQWohWX_elebkpj^`vxw||~vtiy{vx|vh`Ugtjbg[W[nvlmk\\ahgetwWn|{{xruwqrk~smunz~sum[W^mx|pnvtwwpxtenfZs|rnqjd_hrez~kdwww~|p}{~}vtxrs|v|}y~~ypoux{t|xl|uqttmyniu~i`g|mtynt\\kqvz|pi|xpsu}z~z~{z~mqnX_kmxsgdcZaasg}xzrhqlHA[JCkjQ]mXRzvUf{|xu~tqtn}x^jxvwrumnuznfglhj|qupr}r{}}uvzvz~}jbu}q|~ifpudZv|~}osrxjn~ryu|yxxvvxvnieo~iqysj~vuwrozopzpeqz~ppr|x{{{wuhux~v¾ǽžøþſȾýøýĿ½¶ÿĿÿ768?JUYPFCADNRPSWYM@AIJHGEEHILPPYbd^UQOPRTX[^_XSTTTVY_jkdcimoqk^STZa`][YUR\\msnmg^]]ZTXdcREJOOOOQUWY[_^[ccYOWXMJMXVLKQY`c^RW_c\\ZVWdaNPTR=EBBD:7AHMLGJY[ZXX][WSU_Q9?DIMGKTY^]\\_^[[[[[ZZZVQRX^_aliYhvjfnliph\\`db]]_bcb]_egg_blkcbnuob\\]dr~uflxvcVLG]wt`SRW\\_eqtgYZ[\\[ZXWa^X\\bgkmkgfd_atoelqg\\_copjcWYdha^bijpp`^c\\`ptldii^`hkkbYZYSP[kj\\X]\\[]ceee]\\[U\\]OJQWZ_gf^djYVY]UWada]`fikmkjnkeegb_dkififdeghhgabqxqnerolqllfhipoihijostrqtmknsmoqllornonpsliklgitpafttne[fvjbclsusy|vrpkr{uuylkgmnhqqosnhinppemmd~x`sxmvxorssth_lultumnur|wulrvtsqyXsyjrwnlfszutuvzs|zwlgq|{qkysZ\\digVKLNX`ZUcf[UTOLPQ[]^nngzzXXc[k|r}yVan\\brtssokihUMc[V_hturswwqsjmxjyofxwwynoot|yxv||onvvvwuywvgqpi^^jh^dhXLIT_SNW__XXgUMXSYVSTUXYL[n\\S[a`qi]triacvy{wxw{rty}nwuvtmeYRf{qj`aUO\\nwkkdVch_gt|kWo~t||y||~r{}{rx~m_cgrq~xqusjxpfd]dzwmjpkk]jok~ygdw}zw{~~~pstpk}g{}t~{~|xthtv||pvi{x{{xooei{x}xgh}irluv|mr\\qrwx}x{z{ost~|{|jqy`Xonwuicea~nZsfuysfoqN=_PCmvP_pg_~_p~~n}{nunv{c\\sp}p|jlvrpgelibmqnqrsoz~w}kgxsilutihxzvw~|ww~z|x{tyoxsl`_l{jqp}pk~tskrmunz|efow|qu}}{}yľ¸ļľȿƾǻüǿþÿŽĿÿĿ68:CQVTLDBBIPQSVVOCBILHCADGIILRWcb\\UQOOPQTX[^[TQQQSWZafa]dkmoqiZTY_dc]YZUR\\r|nb_]^[WU[cYIBNURONOQTUW\\]\\caWQXXNHO]ZLFNV\\d_TW`f_ZSW`bPNUU<EHFE:7BJSN@I[\\[WW\\YTPVcP9GJKLGQ\\]a^[]\\Z[[[\\ZWXRLR]`]ambVlnfimjkm^Zcc^\\]^_a^\\aegg`fqiciqqh]]clvyokvyjVKENkvfSMRXZ`jrocYYYYYYUZbZZ`chkkhdb_Zetidnk]Zagqma]_dfg_^dfkpfZ_][fpogehb^fijk`Z]XTVcmbY\\\\XZ`ddb_\\][W[WMNSYaeb_fkaW][WX_da\\[bgjlmnmidgid_bjkfghacggeeabjvumfjxsnqkgeekohdhjnusnoqsommmmnmlrqrnnmmmkijgiste[jxphaZkogccmtvsw|{rnlvxuuvilhnnhrpoqmhkoqp`om`s_rxkpvnqrrribkqippkoqu~zsnxwwmzlo~np{tmkm~nyyvzsz|}smewuvqktt^]cd`SFEHTZTS`e\\UNIKONW[\\nmfysOYc]n}yTbp[axoovhkqiQJ_XQdmmqsssuqrhg}q|}ofuznrxunwxmyzp||mnvuvuuyuqgppi`_de`feXMGR\\QNWZVY\\dQNSRZTQQRXWK_fSR]d]tlbvlgfkwzvusyuzmuv|yrxosp`_RPiyjj~_YPO\\mtfh\\QklXhsxcVr{n}xxywvdkrvyvmsoitkh[hjzqgglwiZolrsdfwyyt}~t|yx~mxun|tfqiz|svxyz|z|mrrwysythzq}nmicf}uvjqwotovyrkobvrz}{tkrp}}qppQmtutmhf`~~z[gmzxtfjuY?acJq`auunfw~ro}yloslykVefwn}grk}tjblqa_rxjps~{k~{x~}mq}nuxxvz~|~|{{{rpj}pl^[qyjpiz}nlsqkqmrsv\\jns{{ýǿɾľſþÿĿ½ľ8:>HQRLGCDGNQRTWRFBGLIDAAFIIINW``XSPOOOOOSY[YRNNNPRX]`_XXhqmoqf[\\_`de`ZYWR]s}ob`^]XQU`]JDJWYSOMLOQRTX[]a^URYVJFSd\\JDMRV`dWW`d_ZRV^aSOVV:ELGG<6BMVJ=L[]\\WWYVTO[iK<OOKKPX^`a`\\\\ZY[[[]XUUMGS^__eiZXlgdklhlfX^fa\\ZYY\\`]\\cefgcouhekolc]aitysovvkWIEFZunVMPTVYcnnjcZXVVWXS]_W\\beinjcd_\\YjpchoaVZcnob[`dghgc_cgnp]Z_[akmhcfc^ekikk^Z_VP\\hh[Y]YW[beb_ZZ\\YYZTPPTbjd\\cle\\ZZYY]`_][\\`fjknof_dke_`ffeghc`cgeccbiqulefm|sjokcecilggklpqpmorsllmnonoqsqrmlklkkhgdmunb`krnf_`mgefgnvwtvzzplrxvr}nhmioiironplimoqnarjbk`jrkjsnnoprmdjlelkkonv|}st~utlm}skwvlmmv|l{xwxru{zqmjyspnorujbab]PB@GTVML[cZRIEHJKQU\\mkasiFXb`svZks[bzhjyajwfPL]TKcokotvopsqlh||woju{zkplpoe{zn{{inwtvuwzu{nknmnh_cgbgfYRJOXSRURNY_^MKOS[SMMOWZVdaQP^c\\smixkhiok{srgytw~iqv}yspz|mktyYYOIm|wejv[PNR\\ko`cUQwlXinr`Wyk}sv|joxxmjqngonh^whw}hcdsYbshy~lajwspzw{r~|uuplmwkq{lgjo|}}zsyuuvuonrysssk~yp~~khdebq}wxozvurxxy~ohltqpw{hqq}|y{lUk}urnpl]|}fYpvuikweGdqU{ke}ypy}ywewwndqgssZW\\kp}tm}oszppcarn]c{njp|t{x{y{|w}uyxy|y}ohilk`ayujog{whnvvqmpnk\\m~qt~|þ¾¸ľ½ÿ¿ýý¹;?DLQMGEFHLNPSUTMDCFDACEGJKILW``WQOPPMMPRV\\XMIKKMORVZ\\ZX]jrjfmf]accegb\\XZ\\aqtda]XUQXbXIMY\\RNNLJLNOOTY\\]YUUZNBFXf[GAJMQ[dYU^b^YRU\\`UOUT:DOGI?6BQVC<N\\^]WWXUQPfmDBVRKL\\_^aba\\]YUZ[]\\XUQHHW]^emdS_iadmifk`Xbe_[XVWZ[X\\ddfeftthhmlgb_eluuruwiXLFCMhs_LKRTT[jpjidZVTTUVV]\\X^cfineab\\\\ani`ihWS\\hrj]_fhggc`_entlZ^_[bggbbe^_jkkpl\\[aROajdYY\\WT[ba^^YUV[^YRNP[fd\\]klb\\YYY]^\\]]\\\\bhkmnh^`gh_^dfbcif`abcdd`hponljkm|shmjcechjhknmmopoorrjlopqsrrrpomlnqnjgeboumhikmqf`ghddfinwtrvwtmlwvps}gjmlrhhqomnkkoopnhrdibbcpnhrllnnopdhgdiejlluv}|qwyporysyfuzlloq{|rpywwxrpuzvoouvxoppq{zf\\d^OA;CSRGHYcYMEBDIJLS\\ih_maCZabvxkuq^g{bg{ae}hIL]SE_mlppvnnvrqirwnpy{skoukj_z{oz{ipvtwv}}uynlmptlbejgfi^SPOTUUUMJY]WKEIT]TLKPZbdh[OQ]a\\pjnzoblvdwwixt\\wps~cmt}znn|zldylWUNLozpaklUNPUZhm\\^TZ{dYiila]d||rt|ur{{pmqujjqhlydyvadb}tTsok~sf^q~pps~zqtoyz|ynsj|x~{~}pf}wnk{ud|re{|vyw~n~~xslslqxqrrqymx|kd_cb`|||p{mz{|~qfm~nqvzkn~|yt{~nbd}sqyv\\tpYjxwmnulPh}biq}|q{}clwsaiggrePR\\|jlszc~gqlWcvj^ovjov}z|vw{uxz~ieplp_puojnnofq~rlmmwe[twvx|~¼ø½½¾¾ƽž½½¾ûýÿAFLPPG@FMOMLPRPNKECB=?EIKIGMXa_RNOPOMJIPWZWKDFJLLOSWZ[\\^`hngdoj_bfghid^Z]aan{e]XUTXZZSR\\bZJILJHLMMNSWXVVWYYG=GXcYE@IFIVd[S\\b^YSUY]WPSS<BOGJA6ASR:=O\\^]XWWSOSkfDKWSJQ_```ba\\^WTZY^]YVMCJZ[^noYSed^emffi[Zba\\YUSUWXW^eceeiwsfiplea_ioqqrsoZIHFGZpiQFJRTP\\pmgkaVTRSTUY^][afegh`_]X\\hlb`e\\NSajpc[chihc]Yaksud\\b_^dea`e_ZahfnwjY``PWhkc[YZWU[b_]_ZPP]aWOLTbdZVaje]ZYYZ[ZY\\\\Z^gklmh_\\bdb_`cccfha]_`acdakqjhnnlpzsjjigefhjlnnllptporqglopqwrrqomnnsvnjgheouoellnuh`dfhiiiq|oouqijpyqjpzdnlntggqlllklpnpomndt^fbppirgjllmqcgeegaghktuyvup||onjxnwrk}xlmpw~||yowvtwvpptypkqxq~}trrvdWg`L?8APOCEUaWH?<@IOKQYa_]jYA]ady|vzrclz_g|c]zsJI[UK`hlumuukpttlk~xlpy|mjixpl]w{qvzjpusxzuwpnpvzlkjlofldWUPSWWVNMZ[OHABTbZRJP[eofQOTZ^[ogn}s_kxfkwjnsYpnm|_ivywko}|l`x}v`UMKYlxk\\icSMSWVekXTVgs\\Zkeiddubu}}nr|vz~|vw{riqjuxf|k\\adyibxdryfab|~hsuzz|lmxkuxurhodvvwy|twzyueuwqms{gq~gy~s}ztytymvstunrqv|mpzoge^nZy~rnvlp~~vr{urg{tk|w{xv~sWxs`mwbl{|onwvUhqky}{vp}idtyuhcj_imWLSjqv}i`tigq_Xhuei{|mrr|{pw~t|{|||xei|swgvs~rnu~jm|ulkzpd_wxzżľĿƺüŽĿ¾Ⱦ¿¾ÿý¾HLPRLA@MUQLLRSOHEB>=>DILKFL\\d^MCNQPJEGLSVRICEFGIKQW[^^^]]ckfcnofefhhhebabccmdWRRV^[UU\\a^VIHKHIKLMPTUTSW[\\TB<HV`WDCIEDQb\\SY`^ZUUX[XQRP@COFMG7BWP9>Q]]\\XWUKJWodBPYTKU``bac`\\_TTZY`\\[XF@O[XatfQ[f_]died_U[`\\XVQNTWVYbfbcdmwqfiqmebdnpqsrpePBBISgl]KCJSQL]nggj[USQRUY^a\\\\ceadd_^XS]he_a_RLVcih_\\bhieZZaekvp`dga`ea]cbVWddeu{eXc]Rakie]WZWTZ_[]`YNRa`RLOZe`SWgi`ZXWV[WW[ZXZcjikh_Z]`^^___bfhc[Z[^bdddjmffmojrvrliigffhkoqnknprnopoimnopvrqqmknquskilnnnwrakqpulbdhnomkwvgotlbjrxmgnsaonopffnijkkloqonokh{|^hbprjrgfhjjm`gfge_eeispx|ooqlmkhzxkxnq|rkks~~|{vnq|qpxrortwjipvs{tqtx\\Un`D86BPJ@CPZVG9:>AOMNU\\\\^eM?eccy~~||rgnwbi|gTpVGYYWcdnyms|kjpxvgt~jqu|}zkgdowzp^qyptzkqtpx~ttsss}nspmrkhgd[TPY[VUX`]MIEDTfdXLR]gq_JOUWYXnelt`mvheymfq\\hlgx]cxtqhq~kcs~r_TBEgkskVb`RKWVSfdQO`piV]kbiighbtyfp}}~~}|}|{xqto}zlxdZ_ilmon`vs\\]rw{~{}noxsyxxpwjh|}phrvqhei_nxttwnszszfxnvwronoiu}x~u|~v~zo}uopotrmypjiZxey~x}x}}xzrroy}}qhxvww~Xxilzny~rpy\\mzxz}|irmbkvtpbe_chcONZtfrpm]{dlj_Ziwiv~trwt~{|{}{wwuz||ngmqutquwu}l}~{mus`ixy~}ÿǻżǾ¿ÿľþLMPNE?HUVOLPVULCCA;=GLKHFIZf^K@FRPJCCIRTNEAADFGJOSY^^]YWY`ifbmqkhhgggfdfffdl}cOOVY\\]^`]ZXTONJGIKLNRTTSTZ^\\O?<IWaUFDHDBL`]VX^\\[VUXZYSPMCCOHQL8CZO6@S\\]]ZXSGG\\s^BSYTMWaaaac^\\^RTYYc\\]W@BUZ[jr\\WeaZ]eeb`WV]^XWSMLUWS\\daa`etymgmoidflnpnqliaI=DS_iaVHELPNObjdheVWTORZ_c`Y_db`bb][TV]c^[`VKQX`dc]\\bee^U\\ginwmfnlfcb__aXQ[ebhxu^[f[VfigdZVZWS[^Z]`WMYc`SOT^cXP[jgZVTUUUSY[VW_fiihaZZ]^\\\\]\\^cgc\\WVW\\deddijegmnpqrqihnh`ekopqnimpolnomjnnmpuqppkjnstojknrqmwvdovrsnffjnmlltohmpjelptifnmapqqljekfihhjorloonn|z_ibnrhqidhlhjadgja]cekqqzpjiu}uemiixlpwkvxjfky{{wpluxnqroprvsdgnuz|vmqu{zY[r\\?7:ENG>BKTTF67@BMNMX_ZbbH@mj`t|||{qijqknzjSdbIX^a`br{qq{pjmu|ko}nnly~wkebk~{tycnrqsznssmw|puxuvmxulqmhdleZSZ^^`cb`SOQOUge\\VU[im]HKTWTXjeh|tdongg|}keoecgdq\\_xtldrnisysgYC@orqlX^^PKZSVj_ISmr_T_laikkact~vamzy~y|~{|~~sx}{s}}vrbZ`fjoscdupY^}s|vzzvwhv|puwwlsggxvkgrspc_d\\j~wtrqiowpz}jpmqusro~wey{~~z~|||sqor{zmv}tnk[wq|umpzxxyx{mcwvwzftwsxu{wv|m{~y{}z}|mlidkpsti`^__hXOQhukkxwWnrcij^^xzt}|n}uwxy}}{v|uy|~}~il~yfpyus}wv}ubuy}{º¾Ľ¼ɾƼȾþ¾ÿ¿OOLF@CQZULNWYQC@@BBHOMGDIW`XHCFNRHABIPRMC>@@BHLPUVX[[ZXUYcjigmohhhhgeefgihffv{cPQY`bcdd\\Z`_VMIGJLLPUSSSU\\]XL<;JY_TGCEDCL^^YYZY[YWXYYTQKDEOITS;F\\N6CT[\\^]YREG`tXCUWUP\\b\\`cb[[]SVY[c[]U>EVV]ppX_i\\W]gb]YTY^[YVPIKVUP^c]``jytifmphdinqmjmcg_@>Q]d`ZPEHKKKXhgce\\RVSKYcdd[V`f`_a`]SPY`bYX[QKTZ\\_^X\\ce`WT_gixyikuqebcbbZPR_d_jxkYaeY^gfgbSUYRQ[[Y^^WS^d`VQX_\\RQbk`USRUSQU\\WR[bfijdYVY[[Z[YX]cd^XUTU\\eeceihdhlmppqmcltb^eqtmnmjopkjnnklnnlpsppnjintqnikpvskvzjqwtsojikmllmrkhllglnokafnmfutqkndeeidddoqjnppozv`kcktgnkcgnfgdagm_[benos{}lfkvvmemhlrdumj}pack}yzrinxulqqnqqslacov}{oglp}t_frZ>6>GLB<AFPSE42BJROLabXh`AKvl^p{||zqlhlorwmY^|iLYei`au|vpwtlnoxqowtjgsulc_k|zmz|hjqqt|qutkvzmv~wy|myhnoh`kh_`aeijicc^X[[_gfbaX[jm]KHUVOXheestlrjgp~~whejna``i\\]ttkboxrouqspcQBjytna`]NLZOYlXG\\qhTUbocikndhuxvfkzw|s{~zy{{zy{~}pu|x~}o_[eepurblum_d~|rsttur|veu~ps|vynshhvvgguro`[}b[i{xuqlblrjv~oh~nmtvyq|hqtv~}w}}sopw~twyywsp^wt|pgm|yw~}ytxf^uv{ws}xy{yz~xyy}sy}vogekklqwa\\\\X`]UQ_uexqnu]d~e\\chckw~ox~rvtu{zxx~t~{w{|~{ixsexzxv~vu{}yz½¾ĿÿǼþƻÿȿÿþ¹ÿPNHBCLWXQKRZUJ?@CHMPNFELV^TC?EKQMADHOSLC=;=@BHNRVWWVVUVVW`lpoolfeffgfffgjifeuzeSRYcgfhd\\ag_RLHGIMQQTVTTVXWWP?;HU[TMBEFCL\\][ZWX[[YWYZVOGJNQKVXAGZJBFQY[^_YQFE[uVDRUWX]b[Xba_YVUWX]bZ\\T>ESS_ro\\cgYV]ca[SS[][WPKFLWWP^d^^coxpfhonfflnoklnbgS:NchcZTFEIKGNbkeb`TOUQL\\gf`WVce^_`_YPP]b[XYTOOSX[`[V[cdYQU_glzzkp|qacdb^QOXaa]juaVec]gcbi]PWXNO]ZX^\\UW_daXTY]VP[jfZURQUSQWZRR]behg^USWYWZZWYab`YVRTWbebcdifcgmmooohdts^bmzsjljjrohimnjkmmlponomihntomilqwsj{zjqtssnllpnllnojillhqold`iojjxuoina`fh`\\^omhlopnvvakfcwfdncjnghfbim]\\bfnqu{{hgrtoffohjgclbn{d_blyymfpyrkrnlrqne]diz~zxhfjn}odinZ=7=GL;8ADNSE4/@PWONidWj_H^zl\\mzz|yplcgsuvo]^{pTZioacx|unvumnmswopyhdm~tma\\izyks{ifrtryrvrhuxkwv|wq}cjpegjcfifhntmfefg_afhgifZYln^MHSWPXefenqrolkz{ofdim^\\`dX]kpjaittvwursmaLfzypmdbNK[O]fPGik]VZixhkioknuztuij}{uzoy}wv|~}{}{yttvz~qn||zte`nuyupiqsljk}{tr}trsq|wds~qryv{nrihuwcjwsn^X|~a[izyvqi^jmgu~qc}smty~uzlotxw}|xrpty~xuw{vqk{xw{x}oclyzv}zzxuvw_Zrv|wy}{|{~wxv|qwxsgdkiglzjZ[XWYYQ]iuouiq`^sq\\Sdicy|vuowqpnu||qxt}~~|~tvy~rv{s{wyvwÿ¿ÿǼÿ÷ȻǿÿĿºúſQLEBKW\\VMLUYMCBCGOSRIBKX\\RA;BGLPIBHMROC99;=?DLRTUVVUUSRST^oxsnjccimmjhfgjkgeqxgXX`fhfb]bjhYMLHHLQTUVZXVVSPSRC?KRWTNBFGDL[[YXVW[\\YWXZVNFNTQMW[EHVFFKQXZ_aYMEH]nQFSSW_^^RXf`]YSTYY^aY\\S?GPQdvnce^TW`c^TPV[[ZTLGEMXTQ`b^_fpujekpiciomjijghmG?foeYVJCGLKLXhhba[MMUOL^fcXOZeaX\\_\\SPV`_WWUNLNQVZZYW\\c_TQW`hqyuozibia`[LS`a[]lmZZgc`e_biYRYVMO^ZY\\YY\\_dcWT[YRUci`XSOOSQRXVOU^add`VPRUVUWXVXa_XXTPT[cc_`cgdbgmmmmjejyo\\fpzskljlsmfjnmjkmmkomknlffptomhnttqqukrrrrnmnpnllnnjkpomwnfaflrfmxumil]aifZW_nhdmqrjppcmhcvf_lhrqkkhioi\\\\bgmtx{ycgtrgcntkc[bdetrZYel~xvfiszrksnmspkc\\hj}zxobdfk{wkfllX>8@FK:7BEOSC3.?XaQVseYl`Uhzk\\kyxvxuol^_qxyo`]wv[[lsfew|tnsumnmq|skmddt}tm`[fu}yhkxjduzoppxpfuukx~sxur_imbfg`oulir~uqnjrkechist^Vmx_OLSY[Zchglorqkl}vnfdil[X]cX_fkfberuxwxoopo[et}trjfNP]UcaLNlf`[cl~nkep|rrtursmjs}uyoz}vq~}|}zrxy}{|zrkityz}{smwx}xskqtqvssotw}|zvvvpoq{zdq~vstx}otoiv{bp|to]^{~`^jz}wpgZjkmx~vez{os}~}rwzyx}zsrx}svx{vs{zz~yyvl]lszw}wyxm|{u]Xpuyxz~vzx{s|vuxkajiedtuYZXUWXPYfxqtkleX^x|gRVhdjvtjwznjjpxz|psv~zxurzyk}|~vwü˿ƹɼſ½ŽŻĿPJCFR]^UMOWUG>CIMTVLDIWZN>9?DGLMJJLONE;78:<BHPSTTTUTQORY_epulghgkppnkihgjmh_hulZ^hgfecink`UQOLJOTWXV\\\\XTMLORIEPQUTKAIHAKXYYWVU[\\YWWZUMERVPOWZIIRDJLQVX`cXJCL`iKHSSYa\\YMYg__YSUY[^]Z[PAHPVjxmdaWRWacZPOVYWVQHCFOVPQcb^`iomefkmfeknjhiihrb;ZzjZTOECKQPU`hdbaVHLUNOagbQL_h]SZ]UMP\\aYTSNHJNPTXXST]`WRSZaisyrqdbjcaUL^g^V]khX]ifdaZeiVSUSMO_ZXZY^\\]fdXU][V\\ge]XRMNRPTXSPY_`dcZOPTUSTWVWYb[WUOPX`ca__ab`ajnmknhhqwi_jrvplliosieknlijmmknkhokcdqtolgqwroynkrprrmourlllnlinzrr{nebjqvgqvukil\\dicY[aj`bmsuehpeohgvh`jnvuoolopha\\bimy}{tahuk`gyyjZV`_lueWXhl~wo`lw{pjtnntmjd`jrzuze`abkxpgfnkW><NJH86BEOSB2+=^gS^zh_oibkzj[hx}sruqnl[Zmv|qa\\otb_jtmgqytonrnnnm|ykvrg[jysk^Xdsxuegvi`w~llo{nbuwrkzzopvt\\hh]gc\\w|nlu{wxrwymeik|hSoaPUU[c]`jihkwq^l|pkedliWQ[bYafhbcdp}rvxrjotjhq{wpreL[^\\f^KZiagYlirjaqxvuryrlrmiv~uvuz|skzyxuotty{s{{ugbnvwywsovzw{{zutwr~wsryy{xz~zkjqy|fo|}tq|owvlwiz}wvai}~^`j{zpcWjhu{|kwss}yr~wo|r|xvu~xs}}}vyxypmTj{m{{yzytvxydvzrYYlu{y}t|{~zvwuoxodjneai{\\XWSVYPSdkxtmbgWUk|lUO`idx~rikxqgcitwysq}~}wyup~uswu·ɺʽĽ¿ž¼ǿȽ¼QIGOX`_UOTTLDBJQRPN@@S[N<5:ADIMJJLLMF;679<?DLRSSSSQOMOXekjiigiptxtjfefffimeWbxsa`hfhorvqbWWZRIJQVXXV]^WQIFJRNMSRUQIERH?ITXUUUTY\\YWWZTJFTVOQV[NHNEJKOUVbbTFBVlfJIRXc_VRO[g``\\XYX[][ZYPEGP^r{naZTQYc_RLPYXTTLCBGQSKUfb^bnnfaflhchmjghhhnvWIv{_TRIDGQWUYcfbc\\LCNUPWeeZIPcbVSXYQKS^\\SQMGGJKMSVSNR\\ZSRVY`mzvnxxehifaRUggVU`g`X_iih\\UggQQSPIP[YYXZ`Z]ifWV_]\\aea[WPLLPRZZQS]^]caTMQVSPSUTVY_VWSMOZ`b_\\]^]\\dmlhklamskcalsrmmjhspfglokhilmijigqkaeqrnlhrwnrzjksqrqnszrjnmomksruwogfmtwlsuukklcgja\\^bdZ`osudcpjmgiqidmr{}tmoplpk]alnu~o^mtc^pwg\\\\b^lqaT[mm~ul`qz{mivoqtilfgqttr{]]acgmidhrmX@D\\NB58IKORE3-FfgWfyjhrsjlwfXcx|sopojm^Vkqzta_lnddirphhttpjnliqkynnzmWcvsj\\Uaprmdlvf^t~lgl~m^trzpmxqloyw{ZbaXfaZ{}pouxspoknPnjSZX]hcdnmgk{qZo~khdhpfUMY`Zbfg^`dptisxvglttonvtmvjIef_gbQad\\g[qnpf_quvxlppkoghx~ux{{}sjz{}}~ywpwrw{|rx{vf`gsuurorxswz|zyxxz{u{y}|lkrx~kpyvqn|uqxs~x~js}bek~m^Znn|x}t{xuyu|~}s|ut}xw~x~}tx~~r|~~lmOmt~lw{zstsqvs^mxmVZjs{y~~}q{~wytsrqridodaa|eTWTRXSI]aro_b]QXunYNZhcmsgcrun_anv|{xwu~}u{uyw}|ºúĸɽ¾ĽºɾQKNV[`^VRVQGDHOTTMB9FWQ>68<@FMNJHIIE=535:?BGOSRPOMKLPX`fea`gpuy{wmddddffhlbVbzvcafglvvnf]YbaTKOUXYZ[a`QJE@ETYTQTYOIKWF>IRTSSVRY\\YXWYRHHWWNSVWQIMGIHMUVg\\M@B`yaIKTakXTNR_gb`]\\]YZ_\\YWRIHQcx{l]UQN[cYKIUZSRQF@AHROI]f^[dok`ahidcjkgfggivvTbnWTOGFOX[U[ee`]QCBPVV`dcQDVd\\RUXRKNZ]VQNGCEHIKRSKLVYTRX[Yat|rk~qkoig_U`lbQWc`YYcjliXSe^QQPNIUZUY[^a\\`jcWXbb`a`_[TNIJTX]YQV^\\^f^PQXWROSTSTY\\TWQLQZ_^XW[ZW^lohffdbvn_acmtqiifhslcgmojfflmgggfriahqookhprkyvhlsprnpwyrinoqmns}qzrqjlotsptvsnpqjeicaagbYbqoslbnnjiklffpsvmpmiuq^`mps~jaspbfw~tfded`kpfObpvutmbt~}livousdmkmtsqpx[Z^acbcbfqoYDQbO?9EQRPXO2/NhdcsvjnqpjlpaWavypljieidXhlsub`ke\\fknrjakqqghieskqqivz~rV]sri[S^ongdpucZpj`hmZpormpvhkq|vtY\\YTb_Yz|qqt}zull~wWox\\\\]dqrrqmio}pat~{jiboubUOZb]dhd]_bopdnwzklw{nmtpnuoQnpbfe_i`\\hexjd^strxekvolahzx{wj~yz{~{xswrvx~wxyufcdovqnotyr{yw~~z~zqyz~|}nlrwquw~ztnouzw}vy}~gikjZ`swx~~z|z~{x~w{yy{|ssz|}~p}|~xliOomzwhmwznmnmtqZhtfRUgs{~sz~~~{rw|uysqrsxumbkeb^tmRUROUVDVY{shd\\bZPdraRYfccxtb`issaYit{yzx|}twĪƻƺµžļɿTOU[]`]VRSPJIMRUMC=BRTB67<=@JROIECB=6247=BEIOPNMJDFPZac`\\[apyywuofcdddeffgd]k{sa`cfmuoeefhlaWSUY]\\\\_d_MB@?EXd\\S[\\NLOTE>JSSSTVRWYXXWVOFJYWMTXTRKLGIFKTXjXC;JiuXHP\\ihQPMVcgeb__ZV_b[VWVJJWixweUQNL\\aSDKWSNRMB=AIQLNadYZfng`cfcbfhffgggk}s[w}\\RQLGKT]]X_fb\\UG>DQY^bb^KG[`VQTTKHU`ZQNICCDFGKPMJOUUPVZXXexxjo~lnmdg^Zfj^SY_XV]gpqeSRaXRPLKHUVRY``a_di_W\\cca`ab\\RLGM^^]WRX\\Y_eYMV[TPORRQSYYWUOMT\\_ZRUZVWfniedc\\kybZchpsmefdfpjbgmokeclmefeetgahmnqkinpp|oiprnnkqzzoilqqmpryqyntopqsqttrrptxmdjgcdkg]fqksvdkpigljdiqstonijxo`alpxugfqmfnyzqfjjdfipoJpt|lxmfv~iivotqhpnwtntot]X[^^^^_gso[Q`bREDQZ[T_T.6\\gboxqlomihgg^Vattnh`a_ah_ehitg_nfRdmipn_blpibdbqmgxinqypZZprh[OZpkcbpubWmh\\d|mZokkhru`dp~w~m[[MMb]Xzyrrrvlo}~jthdei}zqnqy}ofzrikcrv\\VX]eaef`]acntikw|vq{xkktqrqq_svk`blradptdbatnmxcn|oi^m~{z{kz{}{xwtwt|}{wxlccqvroowxvwvy{|qw}zqpqtuww}x~qkt|x{|~jnoi[ftz{}}w||}z|}|}x}{}un|xz}vvvwkdPpivmegqxmhhkplVf~n`PQdq|}}|{vt{w|yz|~y{vw|uzurq}ozymcjhb]hqUYSKLVGKUg~adZ[_URlhVXdd_i}v]_glrgWbp{yv{z{s}{Ⱦ½ýɼøĿŶþĿľǾYT[`^_[UQQPOPPRPH>BOVG637<>DNRMGB>:5357:AGHIKKKIDAJYbb]Y[`hsyunkigeffddcdffjrwrc`cekpmhnrrl_YXW\\a^^_f\\F>?EN^iaYfcOLRTA:FRTTSSOVWXXWTKCKZVNV]PSJHFFEKSYhO<BUmnSLXgk^PMOYbfkde_TWddWTYWJM[mxr]NKJO^]LCLRNNPH=:AKPKQb`U\\ileba``cifbejieonenRPPMKS]a\\Xaf_UN@<GW_bc_XHM^ZQPRPEI``RMIC@ABFHLLGISROT[UR]mvnhvrhngbf`ahf]VXYUXamso\\LU_VRNJGKSST^dbc`cd\\[`ddbcgh^RLITed]US\\YXfbROXYRNOQOPSWWVSNOV\\\\WRVXU^olcdd_`rrVXeiqqhdhddohaglnkc`ikbebhsc_fimuiimrx~xikvrllgqzwmgkrplpqsqulrrrsrovtppnuzodjgchqi_isinshmpgekjdltq~yvqjgoxlddlqynhjnkirwuojnlghhptR~zz|l}oku{ghspqqnqpzrnxpqaY[]]\\\\]kvm`cld[KGYbc]eX2Dkg`qtfiqibe][^[cnmldY[Y[hfcicmj[olJ]oinob]gombc^kscx{lhhtmWUptdZNWohaarvbVhgZ_ul]qjgisuYYnxwg\\ZGJaXXysquq}}skt|}{sohszss~~pg}onsewxYYbapgcfYZcgmuymmrzzumnfx|qjudxt[awqfs{`ckqgjwwcs}kd\\s}~~n}}}~z~{nx~y}qciyxvrrxxzx~x|~~swzyx{lrvzx~x}zr|irzy~qtwk_mrz}v{}{{x|z~v{~}|z~v~~zlv}}xx~zquzk~_Trdsh`fnvkgikmiUf|k]ORfqu~{xzizyvx{~vyyx}yxwxxtzvxqommghlc\\`oY`XHGSNESZh][XZ[MahYU_feauu`_dfmq\\Zs{ry}|}u¨|ýÿ¸˿żþƹ¶ſ^\\ab_]XURRSUTPOMEBOTI8589<BKPMHE?84357;?EHIIIJIGDJW__ZUXahlotrlhhiiihfecceglnvwhacekpmlsvpf]ZZX_g`^_h]C<BOXahc_kgQQVU?9DPSSOPNSVXYYRGBLZVNX]NSKGFDEJRXaG<H`oeQTdkfVPNTYafnghZQ_hbTR\\ZNR_numZOLLU_VGDMPMNNC:;CLOMUa[Valhca]^bhiccilgethl~aMMPPR]ec\\Ybe[PG<>N^deaZOER\\TONNKBQeYKHC>>@DIJJHDKQNPYXNPcqpjo|vhkmeec`dhf^XUSV[eoqhVNY_TSNHGOSSX`cdb\\^c^`bbdegkj`RJM]id\\UV]X[i[MV[TOOONNPSUTSPMOX]YPRURXcnebg_[iufS[fmonfcgacngbhjjfa_gf`d`lo]^cfpveinxzscp|rkhdq{umhkqsnnqqopjnrsrpovtrpkszodhgelsgamshknlpnefkjfnvoxuwqihrwiefmqqupikmlmssqppokkigqy_usoqppxefpolstrs|sp{sog\\\\]]\\[_oskejreaRDXadde^BRse\\jlcfmg`bUR]bgfeg`TTTUbg`gcehXiqJTnlkie_blode^bwhoymfapnTSqu`WPVlf^`qubTc~fX^pkbrjefsoMTr~|sod]TCP^Q]unsto}y{rkuxyroy|tk{wv|jx{\\^hdwjcjSYcfgpw~osm~ljtp{znkrhq^jvjn}waknmfkumavga^}l}}xgxxhu|zyxxx|}yy{}}{yuzxirx|yw{ttxlp|~xyz~pfou|zuz}|yxzz|~~~~wqq~x~yuz|~kypxzwu~y}{|yqx}mx~]^s_qa[fpulgkolk]hvk[QViq~zwzxzuzuf~rwxzz{vvwsv~|||r}tqxvutk|nifkf^\\k]dcKDMPCPWtw[\\WS[QZd\\UZgobouid_eiqcc~|pxyxŮľÿȿǻ´½ƺƹž`_ee`\\VUUX[\\YNJIKOTO<27<<>JTPGCA:3136:>AEHIHGHHEKV^]WSV`jkhhnqkgikkjhfdaacgfftyjabdipmmtuj^ZZ[Zahc]]gfG<IWX^fd`iiSS]T;:DNPPPOMRUXYYOEALXUOW\\RPKFFFGKPU[D@LhmYP\\pj]TPPUYahnleRWhi`OTb^VXdmtiYQPSZ\\PEEMPMMI>:<DLPPY[UYgme_\\Zahkeahnjdey{fuvWJKSW[ega]^ebTK?<IYahfYTKJWUNMKGDIZ\\NGC@=<AGKJEBEKMLVYQOWgoilwwjgof`e`_cfe]WRPXajolfXT_^XSLGKSUT[ade^Z`b_acceikki^PLXgiaZWX]Z`eQN^ZNLONLNQRSSRNIP\\]TLRRQZdk_cfU\\msZS]hmnjbce^cpicghgc__ee`d_ll\\^ddoqkip|{zjavurlehqztmgjpwplpoklilrsolnsrspipuodggemqgipnhksoplcfjkjnvmstuokisvgcgoolsrilomospppqpklignxj}tmu}qokwefmmju{rt|rq{vmsea]\\\\[drqlchqb`UFV]`de^U`p`[c`ddeic`VS]fjdch\\NQOQai[`c]b[cuNHlokdfb_hpdecWvqixjd^ijQQqycTPVje[ZovaRb}fW_lkiticaqjGXx{rmjgbL<V\\Mcogstq|wp|vnqs~w~{tvxpzh`mkuhgkS[ghbnxqrnbo|tlkppygnspivjbwilgmud]~|d^lym}}tg~}k~~|{y{{{vw~}{}tv{mu~w}y{vx|zrtskqxz~wmoz{zuy{||yxxwvsz}}{ywxt}mj{t~}z}wq}yziomvzvswx~{{yv||rszafpcp^Xhqwnipulnjntl\\Wemr~zxrxzwz}mqn~ku{}~wx~tj{pu~{~nqnuv{jspjljhcZm_hlQAIODQXg~z`ZXSXTWg`XZgsjotluadnmos{m{tvǺ»ſż¿µķýƿúȼſ^`ffa[VVZac`VHDPUUPG927=<BPVMEA<61157<ABDGHHGGFIU[\\UPT^hmjddlpkffiihgda^^bf`dtzna`binmmrocXWY[^bca][fmSAOWTWbfajsYR`R8:ENJHSPNQUYYYLBBLSSUXXRQJFHHJMLRTCHXmdSVdqhXRQSXYblvt]Sdjh\\M]iYV^gpsfWRRV^[LCDLNKKD99<CMQSWUV^gkb[VXclj`alod_ivjxiRINWZ`he`^ci_OC<CU`ci]PRORVMHIHABR[OFFB=:;DJIGA@GJIOXRLR_kjfpsheol]`c\\^cfe\\TQS]elokfZYb^[TJGOWZXZbieXZba^adhlljki_STbjg`ZY[^^c`MSbWKKOLKNQQRSPIIS\\VKNVMV^fgad`ZbqgPUbikkeZ]b]frkcdfgb\\^dc^^^lh\\^dekksis{xudczqrdbmpytkehqvpmpmgkhjrriinnpsojmrnegehmmlolfgmwsokdhknnnuloqrlmjuueckpmjtsklpnprmoproimjhortxsmy{ollteeimisxntzpnzzm{oc_^^^ernkecma_VP[YYfd]dhf\\Ya]ba^ii`WW\\dlebeWILKK]g^X_]YZ`uVBdnna`f^eodbgTqxcpga[_cNQp~lRMTffVTow`Pc~dV_hnqwj_\\ngK_}ujkincACYWTfkanzy{~wojwvqml~|usxyscqruolgUbnfbw{rk~mf|jgorvnjrmnzcc{iliou|]^rda{mpzqkj~z|x{uv}|y|z~rxsx}u|xsyuuusoqoint|~tk}|zvzz|||yp{}sskwvxywtqpzsqolouuz{wz~qs|{qr}~wfihv|yrtyt}y~}zwzinkeog_nt{rnz}srxxyneatus|z~~mxzyvpdykz|{x|t|}mb}tty{~mrmrw{oknipjhjYlfduZBENHTZ`wtlcXYUXcvjacivxqsyeaunkvyvt{{}}ùþ¾½øû½Ⱦ¿ýüǿĽ`agfa[WZ]ac`TFL\\[QH?749?AISRJD>5/0368=DDEFGGHKLOWWTPS]fjgdaekkgefggfda]\\`ef]bs{n`\\\\ajlmnfYMNW]acb`^Zeq`HPUTT]feoy]X`P6:FNFEQPNPTZZYJACLQQQZSOSJFIKNLJPNGVcjZP^hpcSRTUX[ds{oTXlkfTWegXYbkrpbWUUX^VE@FMLJH>68<GTSNPT\\efb\\ZUWhqf]epk_^oupq`NHR\\]cif`_gjZH@BN\\bebRMTSSOGEFD@HWTIED@96>HFBA>@GGGRUKKWcgffni^jueZc_W^dcb[RQXdhloheb`_]]TJJT^^Y[fmbW[ba_agmokhkj_W\\hje^YZ^abdYJZbRJMOLLOPORRKDLVUMHRMIZ`fcbdZ`kpVLZgigh^TZ_^hqjb`de^Y\\``]W^lbX[eghgpjuwsj^g{rn]dnqxtjdjstmjojdgehsofhlloqnjklleefijiome`gp{rnidjmqpnrkmppknlvseemojjtslnqppskmqrninkhlquytq|wljpnedgmhotkuzmlzzl{tfe___frjgide`fYVaTSceahba\\YaYaaYjod^]Y`kgb`QFIFFWd`V[^VUYo`GZhobYfc_jf]bSl|bja[[W`MPoqRFQ`cVRnv^Nb|cV_etzxk[YibUi{qjknvZ=MaZYefbp}}zxzqhgqvqkix|zusw{jsuuulh\\lt[g|urkkyvcnxvd|znov}z^e}ilnotw\\bofngtx}qpm{|{tw|zx|x}z}pkyw|uwvpysrnolmmfgr||jz|yvx~y|y{~}zwnptqip{xrrqkjp}vloigrqv{vw~|lq{yiow~~}t}dpdw}zov~v}~}tuopstrx~xu}xsqp{~z|}}|pzzztt}b~x|z}vyr|f_}z|sq}}}pzno{{uoelixrhqcsngwcMDPNT^ctmnqaZXatwnso{twf`ys~}uv}|wx~½þĿû¿ž¼ƻÿſ½Žcbgfb\\W^cc`]TN[eYIA<56>EHMTQF@;0*/8=:>EDDEFILQTTRMKNYfkf__`begdabfgdb`\\ZdkeZ_r{q`YZ^fkli_RHLW_a```a[ctgNRXVX`ggrx^[`R78EMDAQSONR\\]XHACKNRS]QKNFEKNPJKNMRdfcTQaml[QTXXZ]jzybP^lmbUagc[_fmql`YWVZ^N=AILJIE947@PXPKPXbhbYZ\\T]tra_koe^cu}vtiYKIW``fke`cjcL=AMY_ac[MOVSOKFDC>AQXOFGE<47CF>;;<@FEIRNJOZcbbhh_arp[]dVS__]^]VS[hjlldfg`_`]PJMX_ZW]kjZW^b`_cjmlhhmj_]afif_Z[`cdbRN^^MHOPJLPPPSQHFPWMEISEP__d`b^XcngJPahhefXS\\]^lpe^__`[WZ^]ZSak\\UXbhdelnwtk_^k~rf_fotwrjbmvrkhlhcccisldfkloomkjijfefhhkpja`gs}qliejnsponglpnknlvqfgmnhkrqnosqpsknsqmkoliortsut{sjlpkdbjogjpftxkjurm|pgfeb`ipgdliafq]\\bWXadgh^fha`U`d\\injjbY]ghc\\MEHDASa^YUURPQefOQagbYej\\efY\\Tfcb]T[WXMNn}qRAN[_ULmw]I_w_X_bzwkWVgbcospmo|vODSg`Zcdfx{~yvtme_munii}}sr{|~z}qss{nvzwtnskux[qqqzzjiw{}rrtpq}|~v{]iipvltp]knqzgvxz~qto~{|vyzyy||xtwx|na}xxsrqp{qngjkkkcfsz~ov~}zvuyyx}uuy|wrnhn~wnihtyknpffisvnwqdfkppwtr}}mk|zygnx{|~}v}}j||ey|tz~{{}}|z|~~{z~yw}uxnzve~zsxl{ti}bbyvwxjo|r{x|on}shmilzslq~mv|l[L\\YYkqzpo|nbcr}w~woeq}u|~~zuxyƿſľüľþļ¼¸ľºŽddgea[Zchga[XZekR@A>6;GLKLRSD871-5?@<?FGFGKRTSUSMHLVaig_\\__\\^a_^bhhc__]]ceaX`pyq_VV[agkeWLHOY`b````[culRQUSYdjiqt_\\_U88GM@?RVRPS^]WG@CKRTUZOHIDGPNKLKPQ_hf]RTapiXUXZX[`o~q\\Waln_[fg_^chnpj^YYX]]H>FMJJHA848GWVLKS]ee]U][Qi|j]cmi^^iy~xrcVKO^a`jkb`giX@;KX[]aaVLPVRKJDA>;ETUIEIE72=D>99:<>AFNOHHQ[`^_c`[grbUb`NPZXX^_YW`jkkhflg\\bd\\NJR__WVaibXY`a^_gmljgkojcddfgfa\\]cfd^PSaXIGOPILRQPSNHIRRHFISDW`_b\\`[]cjZKZdhfdcTRZZ`om^[\\ZZZWVZYVSdhYQVaf_fhrxpd[_nqacgpuvngbpvohfmj``cjqhcehkollkjiigffhknmd`cis|pkhhlpsooielrmlnowphikkhlpqnowsrvkntollplkqtrrzvvwokqrwiaboqeimdrtijojnxefhf``oqhgmjf{x`b`^_cgokcqtphYcigknqmd[Zahf]ICJHBPb`]SLNMM[dTO^__[alcbcXXU]fTZNXUQIMl|qS@KV_NEkuXD]q]Y[_}rgTUeimmnwsupOPbn_Zdgp~u}ssrg^Zijglgwxjj{zsvx{ynuq|q}vuww~zi|ns|jgw|zxp}zttt|w~}tscqix}isiavy~|~gv|t~y{pv}pz}~z|vwywyzztqtv}m^|zupoor}njbfmhkagtz|}vvtx~zsvzvv|tuws}vnne`uvlmantlilc_fgqtnqfailllunw{lixuvehzvwx~xyo|so}{x|{|x}{tunrk}z{stfnscvzecovk~ia{szw{usthtkuzy}lqg]mij||zy}vlm}v}w~~~xvtyyĿ¿½º»ļý½ĽŽĽdcfea[\\eggeccchiO>DA<FPPLIPSC4542<DB<AJKMNRYZRMIGMXaed`]_a\\Y[]Z\\diha]^^__``^doxq_TW[\\bf_SJNY^aa_^^^[dwsVOQT\\fkjpo^Z^W:9JM;?U[TOV_ZTECDKYVUUOIIDITNFJKT]ggbXP[fmfZZ]\\Y[bu|i_ZbojY`ge^`ehnph][\\]`XGIQOIJE?63;MXOGMZcc^ZZ_UVy|b]ejc[`my~xgZVMT`]akh]`jeN;AW]Z\\`]RLOWRHFB=:=LTKEJK>18B?789:<<=FPKEMY\\Y\\_]X]ihUV`UJPSTZ`^WZdhhgfmqc]dc^SMXb^U\\kf[Z]a`[_jkhfimnkfeeggfd_ahhbYPWbUGHQPGNSRORMIJRNGIKMPX`__]`YaccSV^adda[OPYYcog[ZZZZYVTXWSVedULVab]efwth\\Y]sibgfqtsjcdorjdfqk\\^ekmfcefkojkjjjjhhhjnohbbdis{nhdinqsnlgemsllrsumjiihiknpmryru{iktokmqjisuqwvvutmmvurfafqngijdqnegidnp]hig\\atpkkkhj~igedeimuopzw~wdjpqqpplg`Y^ehcMBFNKNacbWKMKKO\\WO[a_ZZfjb[TRSWzmRSHQULFIk}oRAGV^GGkoQA\\k[VT]laVV_mrij~|~mX_ro]Xir~ro{oqn^WXebfoerrdauy}xnxwrvvkvqvqt~~u~{|}m|qfo~yx{upzsqsxyr|yu{qiw|i|dpee}|}{dr|xq}~lw{rz||{yyvxvsywwqnrx}zi]}v{tklnt}kg^eofi_htw{zzztyvs~xru{vvzuwvkt|wljg]gpnpcgiochdZbaeqmpj]ebkaumn}mjrxrsic|vuuy~t{gzz|{tyx{wso}uz~rpjlqakuhadthp]|}swy}xv~xnus~|srzt~|{~o}k~{z}~}txz|þþ»ľ¿ſþ¾ǿ¿ƿdbdeb]^giiikjfgfLAIGCMUOHFNQA5678?DB>GQPOPTYYOFDIT^cb^\\\\^`YVYYW]eiga]``^]chc`kvp^SWYZ]b_SMXb`^^\\Z]_]bwx[OTZ_fjkme[^_W<;LJ8AY_UPU[YTIJHKXVWVRPMFJYMFLMXgnf[QQamla\\`_][\\gztfb[gteUafc`bgjnme_^_aaTLXWJJJC<36EWUGFS`b]X[aYOgr[`gh_[cpyxmZSVPV\\\\ci`[bfZD:J__Z\\]YQMOZSED@:9AQOBDNF31=?7688:<<?FHFKV^ZRX^YT^g\\PVUHIPQV]^XU]ceeeeopa`fa^WS^`WVdnbZ^_a_\\clgcdinnigeeeghe`ckh`XR\\bSEJVPFQUPOPMJJQLGIOSW\\^]\\_^\\_b]V`]_b`aSJMV\\jo`WZYXZYSSWSRYd\\QJW`^_dgym\\WW^|zacfepongafmmfbjtiZ^inkbbedjojjkkklkihlplffeeitzlfciqqrljegnvmoxsqkjiijjilmmrwryzbmtolonejuvpyxusulqzurgeinmjjidkccdcalgZdih^esomigfg|sedkjfuvo{zw{kq{xrnnlkg\\_eihTHDMSN]ae`PKJJKRSPSbeZU^nfXMHOTppTMDJRJBDk}jSAEY]CMhiPD]hXQP`|f^ZUZnocl}|m_jyhYXp~hmwiliXSUa`hm\\mn`[svwxrqsqsuiyqy~}pw~{{zxwn}josvuwrrxqtmnqwqrztyvokwuotbofmzw}zytep{|rp|xkx~~wqz}www~}tvvsqwstpmox~uf[}ypysiglu|kcYfqcgaissx{su{s|yt~yrvxtzyprvmouujdh_Zjnokcl}xbfg[^bZgqni]^Vg^mpgzmintnsueyttt}u~szfox|xz}z~~us}~svnd{tjl_hqj^Zqgw~xb~uuzwy~vvz~{|wyw{}xrzzſû¼þ¾Ŀ»½þÿfbccb^ajlmlmlfc_MEPPKRWMCCORE=<;<?CDENTOOQU[XNIKQY_a_]\\Y\\_XSWXW_fge`_accdfjb\\grm]TVYWX``YX`c_\\\\[X\\``dtx]QX_bfjlh^[_`X@?MG8H]_VPTWYVQRHJWX^WRWRHMZNKOR^mobSMYilia`d_]\\^iwof^^qv`Ucdc`eknoicbbb`^VZ_SHLIA94=R[L@KZ`]ZY_bPSwdWbhcY[fswo^QOVVYZZbc[Yb`O@CXc^[[[\\SKN^QDD<7=HNF@JL;/6>934789:<BFDHTYYSOUWTXb`TRSJCJQV[[XUW^cbbceli_aea_VWd_S[jh[^b]]]_gjccfkomkgcdfhjd^dlhbZT\\bQCL]KIUTOOPLIJOJEJT\\\\\\\\[Z^Z[Z]][a[^a^]KFJSaniXWXUUYWQQTPQ]dUJKW^\\aagvfVUV`q``afmmhaagmiaeprcYaloh`cecjpkkklkmmjimokghhejtykfhnqookicetzmtxomjjhimjhjlmrvr}xaoupmrlajxwn{xsqvlrzrshkmiklkidd`ec`_g]Wahidhlophdddrxbdvl`{wn}xw|tu{snllmma_hlg[VIQ\\Q[bcd\\OIMQQOOJ\\i[PYlk\\JAGQfrYHAENG@Bl}gSBD\\\\DSfdQG]eWNLbwa[[R[wj^n{woguyaXd}vckr_fdPLS^_ikSlk]Wsts|tetsqsizpty}zs{~}yyuso{vmrnruvltrllqnoivvmwnpjuuuthqmwp}}zvrpfs|wprz|}{zqkz}{vrwz~~wuu~{|{wqusootssqokt{sd]}qlvqicdr}o_Uhs_dcmqkvyjp}q~~zu~}qwwryihsrjnqiacaT_hitcmr~mghcZcV`olg^XQ_\\bucm~mgmtpq|ouqtsxr{~s{kg~q|u~wvw}~{{ossZk~fk^eijbYjlow|dsv|z{|y{u|{ux}up|qyýľŽþþŽ¹ü¿dbbb``ionmlmjeeZHJVVQVXL@AQYOGC==BKPQSVPMQUZWPOSUZ]]][WX][SQUXW_efdb`bdefgaXZgpk`ZXURV_``bb`\\ZZYW[`actw]S[\\afjkd]^__WC@NC>N__VQUYYXYPFLYZ[XX\\SJSZQOPYhulXNTiohddda_\\\\`jrle[dwqYWecbainoofcbcc`[_fZPLMG?98F\\WCBT^^ZZ^aYMcw\\Zae]V]kqpeSKNWYYWX^]UW`[KDO`e`][[\\PIUbOD@87BJG@CMD339:313679;<BHHNWVQMPTPT\\bXMSNBEMSZ\\XUTX_baaceea`cc`_W^fYQ`laYcc[[]cgc_cijlnjcbdfjk`_ike^VXcgPBRaMPZWOMPNHJMHEKXc_YYZZ\\YZ[Z]_XY]`]SGEJUfpbUWVPRXUNORNQ^bPEKU\\\\a`gs^TTVsk`^^gkkd^aijdbirm[Zcmoeacdbiolkklknnkjlnlghhfluxmelqmlliicc~wnvqkkjjfjpihjlnrvrvcptonri`kwpr|tntrmvvtmjpjkmmmieaaia^^dVV_iidihnpgbaejyzcctk\\uqyux{wuzrlkkkkeafmfb`PZeT[d`cf\\NNWQOLIXg]KWhmgQ?@N_o]G@ALI>DozdTCD^]KUbcSJ_eUJKf~t^ZYOfye_m|~tmm~u_avzmaln[daMJS^_jiTnyi\\Yw~pp~qevsqux~xrutyx~xzusoxqqriruufrhrqkkhwpmqlom{uvjttzpn{|{s~lnfwzrnryz~}zpmkz}ytrsw|{vtt}}}}ytw|wqounfknrutnhr~|wqgfwhltpj``ppYUjr\\adtohtzhm}ry|zx~txwtvibotjgkha\\bVTcfzfiouigj]eVZkle^VQXZ[pd`{sflvsr}yrqsrrpvqwoe{l|x~xux{zvms|^a}cl^dckf\\ajfuzhvx|~}zpvx|~qo~nv½ýýĿùľƿûþc`abacmqpomlhedYIMWWU\\[LBHSYUMIDCJPSRTVPMRY]VPVYXZ[]ZSS[[UQPRVY`eddcacdeecYRYfmjcbZOLR[`ec`\\WUXYVZ^_arvb[]\\ahjg`^___[GANGDUa^WSVZ\\\\[JER]_]]b_QR]_WSUbsyjTO`plehida^]^enmhcamwiV^hb_cornkfedddbcjgXSRMF>:@U_NBM]_ZY]b[OVvm^__\\WYdnoj\\MJPVUVVX[XSX^XGEU`ee`Z]^MH[dL?75;GK?<HH5.573013469:>ELOSTQKKSRPZa\\PJNE>EPUYXUTTZ_a`aed`_bdb_^[bbRSfj[]f_YZ^dd]_eiiinibcdekk``jle\\Z]fiPCZ`SVZTNNQMEIKEDJ\\d]XXZYYWY[Y^[RY]b]LCEKYklZTXRLSYTLLQMS``LDJT[\\a`fn]TS\\{zd\\\\afgi`\\agebhjpgX\\bmnedccbinljkklppkjlolgjihnwwmfmjfihhhaiqnuifkkgcoohgkmpswr}vgppnomfcmtptyrovrlu|wnrqckqomkhefl`]_aUVblhcggkng`^lhhxiclhqzs|otzzvu|xokihghhdhmfcbYilV]cdfcjXG]\\NOJRefMNanqaE:K_l_G<@KH=HpwdWFF]aTT_eTLffQEOl|o\\XQLtu[el}uqlv~l`n}z|pfcmjZd^KJS^`jeVpsh\\b|mozlszuuz|vxuzz{}xyytoz{z~xtieswvl~oiyoihjwnrqnorsyltt{inz{zsrkjg}xkqovw{ux|mkhw}}zspnsyyvst{x{|sqr{smqtidjkqwuldj~{rqknpcjsmma`npVWjs[afyoiqzmi{w~z{x|~|zyz|pkfftjbddbW][O_`vteowndmia\\Xhod\\XTVYYeh^v|mlxxy}yrorrplsqrrg}m}~}xtyx~|~smrh`opg]c\\io`^ffmvq|y|~y}~|}x{y}~xnpnqȾ¾ý½c^aefkrtsomigedYIN[\\Za_MFNVZXSPIJPTRQRSQPU_`URXXWZ\\]WNQ^`QILQVZaedccbeeed\\RPZeihdf\\KENZ_aa]WQRWYWY\\]artia^^ciib]_``_]JEONLYa]XVX\\_`YFFXddcfk`VZ`_XVYgyxcU]kohfkie`^]^gmkf^hvtbYcf^\\fpolieggffgfmfYYTLFBCM^ZII\\b]Y\\a^QMcf`^\\WU`imk_RHJQSRRTXWRSXZTGN\\cff`[a\\FI`dG;44@NH9?J<-04200223689AKPPQMIHNUPWdaSLLF>@KVXWTRRU[`_]`e`Y[bda^]^b[NZjdYbeZWZ_aa^aehghkd]bedki_dljf^]`cbMJ_dYUVTONPKDJGDJScaZXXZYWVX[[^XTZ^cZE?EQcocSTXLJTYRIJQOV_YGBISY\\a_fjZRSgt_WYcige\\^bcaamlld[`golcedcbimkjjhltrkgmqkglkjqxvkgofbigggaskqsddjjbctlgekprtxr|vkqllpichoppvtmswokzsqyp_oyqonlgkl^[``]_ejhcfdgmg]^rg[pn_dmgzyix|ywu{ukhhfdehgjnhc``pmZ`^^fdrdAWlYXWUgoUK^rxtX;Kbm`G:CRI?Qsrb[JHZaXU\\gWPjgJAXtygYUGSyfWij|zmlkyyhbtwuwhbgog[cZHIT_bkaXsuog[iyhhx~|wz{~rswy~~|~}xx~uo{xyt`gw~wzhtzjnfpvqvqupvw{ntszwfq|vxilzgm}qlqio}xxp{ztwpicsz|ys~ojnvvsrryv~{yknr{}qmql`aiip~uicc|{qpmpl]fshngbjlSVjqYag|ojq{nf~z}yw}~wknfcuj\\Yaf[T]U]]fcm}tljlvecYcofXZWRWVcnZkul}~~~yrkpqoinqmsh}sy~wqzv{~|rlnwbh|k]eWfyd_bfhq{zu|}w~vzxz~yzxy{}|z}{rlqtt¾þ¿ĸĿĹſÿa\\bilqxxtnjgedcXJP^`]caOLTX]][YPNRTOKPTVV[cbWTXTRU[[QLVc_PIMSX\\adcccdddebUKPZbgihhZFCNX^b`[TNQVVWY[\\artlf]\\fji_\\cc``]LISUR\\^[XVWZa^REI[fffgkb`hk_TZ_m~w_Yflidjngea^]`hkifenwo__g`Y`jmiijeeghjkloe`\\QKKIK[`PGTa_[Z_]SKSmx`[ZXV[fhigXIELRSOOSVTPSXWOKV^djgbaeT?Kf_G837EPC:FF1,32-.022358=FOMLLGEIQRSbdSLLH>?IRWVTRPPU[][X_dZSYbc^]]__VQbh[[iaVW[`^[]cgheeg_Zbccid^gkhf`bd`\\JPbh_UQSPNQGGIDEQ\\h_UVZ\\ZWUXZ^[ST\\abR?>G[hgYPXTEJVWMGLPRY^R@?HQX]`\\bhYOUqkZSYehf]Zaa`^auiib]dkrjdeebbikiggbkxtieotjgnmkqyuhjqd`hihec{yirqbdif]eqldblquwxr|wklilnfcjqnowslqqlo~}nszncxvhnqmkmna^djjffgfggcdke_frk^knY^w|bgnz}xwtysgffedbehlpjc^aroadZSdfnrMKsg\\fckoaVavxuDOimlP<O^SRasod_RMVd^R^jXWl`GF`rsfTKKft_aij|whit{uifusqqbdqph^a\\IMXbfj]Xsmll`n{jcxt~{os|xz{}}yyztq{y{s^py|nskwevwuxtwn|~{ost{~{pewuw~gnqbswjrmam}{umztttpf_qwvxqxogkttmpqwv}zsgjs|ymuucY_hgozhda{}qooohYgtcmpgfxjSTjo[ai{mnszndyz}wnqkougYT`geVZabb\\og{vbvmspfbbjo\\Y[ORV`q_bx~v{sjlsrceytkpkz~|vy~z{zynztw}zpjligws[gWd~mc_jdp}s|~|tz|ozppxq|xrqt}s|zqowy{ø¿ýƺ»ĿļĽ_]cilrzyrjebbb`WSV_a`gcUUYY`bb]QNRRKHQ[]\\^b\\TV[UOX^WKL[f^OJOW[]acccccccc_OIPZaehkjTADOX^a_XQMPRRUY\\Zasvne]`hmka`cba`^PNYVQ[\\[YWV[aXOKR^ghjkjfini[V]buw`]difdorgda_\\bjigfmuvi_dhZWfkhhjlgcfgjosnmiVLNNMVe]IM]`]Z]\\RKL\\wnYWWVWbiedbQEGPWUNORSONSVSMOZ^hkgfi`H;PjZF939JQB@I<,051,.22125:CMOIGFCEKNO]hVEGJ@:DPSRQPOOQWZYWV]_VSZb`Z[[[ZXXebWdm]SY]`YX_egfcbb]Y]^`ga^ijggbfd[YNTam_RRTOMPFJFAIYbe[TY\\ZWWUWW[ZRS_e\\H;ARbd]QQWLBMVSKHLOT[YI>AIQZ`^W`hVN\\zz`RP]ee`Z]a`]]gxeea_glskded^_ijebabpxmegstigrokryufmtc`hihfk|okrjahhbZbkg\\_msuwus|shhfkibdkonquqllllq}wltxln{qhppjpsnddjsqjhefghbcfceiqtgdjZa{suq`u}w{sstypddecaadchpmd\\arogk^Q]dgtbNpo]kpoklhiy|UZrz~WOegbdhtvle\\T[sfTag[\\icTRapwfQQ_srelnsvjpyyvmk|qkoelxogce_NVcmnh^^tprskt~jhy}ys{}r}{~}zzz~vu{z}sgv|v|nu}c}{wxzvrxouwrtll|j|}imlevqltdao|}roxtusladqqrvptocis}qhlsvv{xndis}qm~u_W_igr{fdazsnrneVludo~kctkTVhm``m|psuvoe~v{w}|wruoc^ZcclbWdrlYwgydsxrympmkudUZPRT[pqgm}vmjt{d]m|ylnpvzyr{xtrxjwsmyyokixd}}zck^ewpdreru~sqq|{ir|~jkok}{}vomtwxŰnzzps~{||ɿ˾Ŀ¾þľ¹º^_fkms}{sjd```]ZY]aadhe\\ZY[bfh_OMQQLMW`a_``WOV^VNZ^QIPai\\MKQY]_abbda\\aca[OJPZaegjkTADNV]_]UNLMLOV[[Yevvn`X^imgadda_``WTZWP[[[\\WV]`SLT[aginnjjljbZ_ae~ub`deehureca_^djielrvrf_eaW_lkhlkjifehjsvrraKOTTV`fWJWc_[\\^TLMUg}aTTSRXdha^VHELVYTONONLMRTPMT[_ijfiiU<?\\lSA:9BQMBEC1.64-.230/49@JROFB?BHMNTe^EAFC?EORPNMKLQVXWVUVXVQSZ^YVZ[Z[Y\\d\\bofVTZ^_YYbfdb`aa\\WXZ_b[\\iighege^]UUcuaOTVMKLIMC>Pbc]UUZYVVVWVSWWSXceQ><L]`]YPRSACRRMKKMMU[VC;CHPZ`[S_dQOf{lTLS^a`\\\\_`^Z_pqbbbchlrjdfb[]ijb\\^cqtg`jvtfguskqxtgntd`jhiktwglmfhme^Y`e`W_nqturtwkecejdaglmmrsnkkijqzsjtvjswompllxvnhiq}vnjggiicdfdikrvkbc`n}qagzxuumnsvlbba_Zad^cmle]_lrnmj[S[crqYjq_jqrpqrq|lh}fruoonnv|sib^nk]bcddmod`iyyb_ksxrnux~vtvwyzqvnkrnvwkilmdXcqwrieiwwz|tv}lz|xzxs{uzyx}|snzwp~g|xv|wxrswwkpkumo|zdnhkxpoi_hp{{qswtvsjailkqrqs~m`gvzofktuv{wldhr~jqm[W_ie{saehyzjqo`Xqtfrk`siU[jld_p~twxqok|ttyqzz}~uiaeakemo_atuZllunny{ryvkrlXSVZ\\_qvuqz}zpiqr`bt}tquz|~}{mxulnkjurftxnjfh{|pnlj|~}k}lu~sr}xtlhz|eiv~~gfhgzuyuhl{~xêo{zo}~{žſ¾´½ſ¿ÿþĻþ]cikpx~vpib^_^^^^_abeig_]\\]cgh`QNQRQU_ec_^^UOW^RL[^OKXhiXLNSY\\^`a`d`[cc]VOIOZbeghjS@DNW[\\ZRJJKMPV[WZiuuiYUamj_[cc]_`b[[YWUYY\\^WV\\_PM]adhjrokjkg^]cfktbaefdnwned`^^eghgnsvoe_`YXhnhhpmhheeiltxxhTP[XY`icOPbd[Y\\XNLR^rqVOQNN[gb[XMDHRXVROLKIKNRQNOW]bjhhiaJ:KgfLC=ERUFAD:28711651-09@GOSLB>=DNPQ^dO?BEBEPSMKIHIMTWVSRTWSNMPWXST[[ZYX^__rnWQUZ\\\\Y_hfa_^`_WQTX\\^Y]gegigkg_\\URhubRVVNLLLJ@E\\h^UQSXXUVVUTRUST^e\\F=EVaZX\\TTL;FRNGFJMOSWL<=CHR\\bXP^_NQiubRMTZ\\\\\\]_^\\Ydwj`abdhkqiefaZ]fg^Z^coob_lwqcj{rhovriprddkglqumgkhgpq`^]^`^\\fnnpzsqneb]cf]bmnklpnijiegovpktpisslllkrxspolx|pkhiliddhgkmsrke_hxw{w\\m}vrmkostlaa`]U\\d]^eeb_\\eqomqkRMart`erfjmtyrv{}}uqy|svuvsngp}llggos{vgl~yoz~}wwzuv}}ujr{z{sovvwmcqy}wpopzxuxx|zvx}{x{v||y{ts}}~zym}ys{|||~~ysvwsqjmnv{ozleogmvpj]enu|towtrvsgdkfhplqoxl[exuoeltuvyvmbiq}lok][aidl]jp{}jor]_uoksg_ogZemfeesswxnlqxuqrq~{wx}~|lbjgpqqtqdu|fevrxq}~z|{pio`T_bfnunzz{|sil~lan|{zyxz~voyuhjbuquqhormlev||yrwt|uvwu{fxzpymjcv|c`p}wa^bcuswzhiƿʸäs~|||}ÿĿǶſÿȿý½]gkks}zoke^^___`_`aaejha^^`dghbURSSU[bfc_]]VQXXMN`^OQbkeTMPUY[]^^^^]ahbWRMHMYceeggQ@CNW[[WMDGKNU\\[W_lsqcTUcnbZ^eb^_`c_^ZWWYX\\[WVZ[OTaefikomkjje]aiiosddgghprlhd_]^begknqqka^[W]mhfhongedgllv|u^Q[`Zdnm\\Q^j`WXXQKPZh}ePOOKL`g\\XUGCOYYTMJIGHNQQPMPW]ckgigXDD[iZNMKQWJ@>;;@@56<81-,3@JOURE<9>KTOQ`[D=BFFIOKGEFFJQVVSRPPSNHJORRRUXX\\YU]_jvaOOUZ[Z]chb\\\\]_\\TOQW\\ZW_dchhgkha\\TTpl_ZZVMMLRJAQffZRPTYYUUWUQRRNXa_PBFT^a[]^TPF<HNJFEJILXR@9?DHT^`SPZZITlmXRRUWWY[]][YYjwd_`behkqiee_Z_dcYX`ekg`amumcp}jflrpmqqeimgnqofiidkxo`a_`abekjhukij_YZb]Weqkeingcif`elpmmsicrqihemvtppnl{oiijkiefhekqsoigcnvqf]sylmpnqrqjd`_^WY`\\[^``__bilnoo^Sdpsgbpllny|oy}|}opyurrqtzv{pmxph~~yq{~zwj}}{x}|}rm}~zwu~xxu~{{x~{~|y{{p}x{yxx}rt~}yt{v}|uv}uozikmsu{|siomlnuqb\\qt|}kpzlpsngjmgilgnlujWctlofnrtvwvm[gs{}urzocadijk^ku{~cqy_iwnotf_ifapl^gmvmxylhruqk|}pqyz~v~ux}~vkslt}pzry}thw|}{}{chibghmuxt~svtknz|oqv|}xuv|}|v|z{uhh^lwyrlljkqf~}zs}z}~{}{}o^s{smqdgaoxa[k|oYW]aqru|vj÷Ųµ|{~~|ǿͽ¿þ¾¾_hilx}tlic\\]_``aa``_flhb_`bdfhe[WXUW\\aec_]]WSUQNV`ZQZil`QNSVX[]]^]XXcg^YTLEM_eccjfP@DNV[ZRKCFKOW][\\gprn[Q\\hi\\X`fb__acb^XVXXY[YVWYUNYccgijlnjihd\\cmltqeeggkpokhd][^bdhnolje\\YY]gkafimpfadgjnx{m[X__apwl]djfZWXTNNV`rxYLNMIPbbZYM?HY\\XPHEFGLPQQNKQX]ekeidRGVhbVWXUNN>:8;HG;7<=0(+1<IQVWJ;7;BNULO]S>;DILLFBCCCFMRTRRSONMGEINOQUVX]_WT]aqnXPPSZZX\\ef_XX\\]YUNOV[VU`dcihgnlcZT_tg`b\\UMNNTIF[i`WSRV[YVWXURSQOacYHDR^c[^f]QKGHIIJFGIFMUM:8@CHU_XPOXSKWkdQPRTTUX][YZXZno___aehkoiea]Z_b]VX`efa`djmhetvcehnompqeilgnpnihfbo|ndb`bbfikfk|s_kiYRY_VXkoa\\hj\\_ib]dhkknqa_pnjcdqvpnplmulijjiiejgbltqiggissyxcfunaktpnsjgf`][WX\\YY]]]^^_eknkljjnipkcnmlt{q}{{|}zp{urrt}us~|my}uv|{vv{t|}yxy|~~{vy{{y|oizzzz||{ow}~yzzns|wp|ootimoxx}wqnwknosn_ezw{bw|ioojkqrkihfihrhUdqeoiqqtvvuoVct|v{tmgghfqk`lw{xis}kn}ppvmccdlvj\\etxhzzkeqtnlwvrry}us|rwqv}}|~|w{u|r|r|vy}e`kupjmtwpp}vnnxux|tstw}wwz}tlk]mz|trmglwjy~}yt~{zy}w|}jafsmijf^`hs`Ui}hPV[cqsvrsü¤{|½Ŀ»þýŶſÿ¿ž¿¿¿ÿÿ`hio{xnkga[\\^_`bb`^^flgbbccefge]YZYX\\ceb^\\ZYWPJQ^aSPcoj_RQUVXZ\\\\[YYafcYWRJIWdd_bf_MBEOUZXNIFFIPWZ\\`ioqfUUfmdX[ceb_`cca[VVXXXYVWWWTU_ccfhhjhihie^fop}{qeeggkppjgc\\Y^bchnoki`WUXdlfbiilod^beirzwh]bccjvxokpj]XWUPLQYb{lPKNJJU`\\[U@>Q]YQKEBDJOQSPIHQX`jjdf\\ORae^XTWNHJ=69FI=57;9+(0;GQWYQ>4;BFNNIQYI:=HMMHA?AACKQQOORQLIFDEHKMRY[\\\\TR[`drdSPNSZXW[edYUWZYXTMNVXRU`ddiffnndXVioecb\\TMQVPHQffYSSTX\\ZVWZSXSQXfaSHS_eb[baXMLIHHHHGJJEOUG9;>@IW]TNOSPO^h[MOPRQRY]TV[W^og]]]`cgjkgc_]]_^[WZ`ba]_ceegevpadbjonmoeghfmolhfddsyngcbeehikenwa^ncSQZZUaohWWgdT]g_[cgfgnk]`nhd_ftrknpknnfhjkjjikalptohfgnut|oelqd^kqnkuheg^`^WV[YY]YZ^^]djmihoxscnpdmklyvx~uwx|~urspruwqtwq{|r}~~~{}yw{zvz{~suy}{x||ruqy~}||wpv~}rm|}qw~uky~nilt~xrwrpnnqtjcszxpbxgpjlpuslihjderhScr]mqspsvwvrXav|t}vjmmldq~sfjx}suw}uqsoy|th^ewwk^hxw|myjdst|lorouxsp|qi}zyqqmv||~y|~|}v|~qTm}lft~qpku|rpzw|~}urz~uur}z}yroesy|yuht}o|~|u}yy~~|}wy~kug^nlig}oW^dnaRi}_MSbotwyizĽ½ĺžĽɾſ¿ÿþûÿ¾bhjpzujhe]Y\\\\]`cc_\\]eidcffebdfd\\YYYX[beb]ZXZUKIVa^SXjqeXSTUUWZ\\[XW\\egaXWPIO\\da\\^aWICGOV[VJEDDJRX[]ekmocX^ge][_cdb_afd_XTVXWSWWXXVX[dcbfgggfggigdfmt~|zqeghilmmjhbZX]beinkgd\\SRUgmbdkijg[]ackwzqf`bbfr}|sppg\\YSSUNR[g~{[JNNHKW]_aL<IXYRMGB@CKORVOEGRWdoeabWQYa^\\TJQFOL;7COC88783)-:EPV[YE46@BFMKKTR?;ENOF??@?@GPPLLPSNHEDFGGIOW[_\\QNXc_fnZMKJTYWT]gbVTWXVWTLMWWPU`cdhedoqaT_khffc\\POYYRNYjcXWXY\\^[WY\\UWTU^h`SQ_ge``e_TJNLEGHLJLJEPQC:?=>KWXQMNONR^`SJMOOOQXWQWXU^kdZY]_^gggda__^^]\\\\\\^_^\\]__bigulaf_goninffffkmlgeeisupkbdgfillejl^cm^ORZX\\jm^PUedS\\f\\W_lfckaZdic^[gskhoniojdijijknkcyptlhhgptuulejka`klkiskbea^]ZVWW[^WW]][bgighoyvdnrgmkmxzu{{ns~u||nsrpsr}rnquy~}~z|xt}|z{|zv|zv~x{wrs|x}www}}s{x~~~~}~upu|vyxs}nq}xkhm{}wsyv{qqqsufl{wy}ggufllnsvrnhgod`pgYbpXfytortx{x_`v|s|}jrtpco|yyrjwvx{{{tzo|}wk]f}wocnwt{uulfqr}~temkmorxjzkcxyvpqhwuxou|wrWumcuz{|golqur|~z~z~}ysts}uso|~vtoxy~zyp}t~xv|wyz|xx}}qlrXjkif{uUZai`Ql}^JQizkt~tźþüľƺ¹ÿ¿ľ¿»þûžÿcghovqgf`YW[[]`ec]X\\egdehfc`adc][YXWZadb\\YXXRKR`cYWero`TQSSTVX[YUX_ed^ZXPMU_d`ZZ\\TGCIS\\^TFCDDKU[]^ejnmd]_``^_`_bbcced\\WVWXWTZ\\YUU^aebbdffgghijigelvzxxoghilniilhbZW[dgjkg_^ZQPVim`cjggaUZabkyzncbddkz}rmlf`XPYWKUbokNGMKFMX_i^AARYSLHB>=BLRXWJBIQXmo\\_^TTY\\[[PLOJWK9;IQB=<:90,9ELSYZP;5?B?ELKKNJ@CORJ?=><:BNPKIPUQKGEEGGEIUZ[]TKSa`ZhiOGFITXTS^h`TSWWVXUMNXWRXabdgcdppaZgljigc\\NQ__VVcl`Y]_]^`]Y[]XQVYcl]U[fidbcf[RMPICGJQNLJFMK@;>;>MVTONNNNS[YNHJLNOQSQUXRR^haWX[[]eedb`_````__^^]\\\\[[[`igqh`e[enlgnfeeeillgcehptskafhfjolgjidgkZLSY[eofTNXd_U_cXVaja`gZXec\\YZgnehmjhqwhjjffilniowlpjiihnruslhge`cjgjhmmahec`]SRU\\^US[\\Z`cdfjnvwgnrkmjnvutxulrzws~sqzhtnnrqz}zlmuuvw}y{xvyy||zz}vu~z}xxu~rqvyp{sw{}wxq~yvx}~~~~}~~wrr{~}zs{yvwy|tejtx~u|mztrtsdszuzzcnqhjlpytotieugXmkedm__}zpspxf[v}r~oqyyin|xw{mu~~{u~vr|xn_iywlvtn{ywomjoqy|qbdchknif_sztnsewotip{rm~og~{z{ikqu~{u~~vy~{{rmu|q~{wqm|}~}{yz{z~pvwu{w|yy|yqxxW_dfcq|ZXbf_Ro{hTWj|yjw}z}~rŹſĺžýöĻĿſ¾ûǿ»bdfmplgcZTUYY]aeb[W\\eecded`^aca^]YXUXad_ZYYVQPZdaT[nqj]TRRRSVXZVV]bc`^^YRQZee]XYZQEENV\\\\RGCCENX^^_cjnkc`]YZ_aaabdefe_XW\\^YUZ]]WUWafdaaceegiijomgfmvwusjgghljfjlgd\\YZfijf`]\\WON[mj]ekeb[SY^bn}zj`cehs{qmkgaUY^IG^kyxTHHJDFPXehN=ERXRHB>;=EQZYNCAIP`rhYZWQRUWZZQTRVZF8AKL@=;;;55DLOSWP?5AKC?FNKFEFJPUOC>@<8;DKIGLUULIHEDB@CPZVXZNN[aY[j]JFDJVUOS_e]UUVUUUSOS[WT\\`bceceqo`]hihiid\\TWc`W`mla_aba_a_]^^XQYYirYYciiedfdYWUQF@IQWSNIFII@;?;@NTSOONOOSWRIFGJNNOORXVNS^aZVXWY]bcbbbbccbcb`a^\\\\[YZY`ifkc`bYdnkflgfdbiklgcegnqpfehgemqkgijhjkXPY\\_kk[QVbd[\\c]U[ge[bcY\\c_VTXdebikihqxpkoldcjmonspkniiihnoppljhdcdfdjiglbkhgeaSOV__TOY\\Y_aacjnuzkoslmhkrqrsnlrtspxulfwbthloqo|xfpzypxzzzy~u~vx}}z||{|v}wtv~q|wxmqyln|qsxovu}~vlq{rux{}}}|||{z}rszzquyyww~mkuz~x~sr}tqwrfrzuzycynjikpzqk{makUepmhifc{rvprnWqr|voywqxvtsq||st|zzvgoz}pyujvvmlmlnpry{pe\\_dge|nc[m{qlvexmsll}|tsq|~~ulqv~}v}sw{{ymjyxwqxzy~q||l~x~||}~lutzz|{}y|xt{[Z^cdha[ff`Soxtdeln|yt}ozqƽ´ǾÿƼþžĿùƼĿƽŽºľacgkljf_SOUXX\\`b`[W]cdccca]^bb^]\\YUSWac^YYZUOU``XT`mmeYRSSRRUYXTV_aa^^^YSVafd\\XZZOFJSY[XPIDDHR[_^aelnjecXRX`bccdfgfc[VY_`ZY][ZSW_egbbcbdddikpumghovusohgkljggkkhg^W[ijje]]YSMQaof\\djd`XQW\\dvtc^aelz~tlmmh\\YcV@SimtdIFID@IR[i[B?FUZPD>=;?JY_SC?CGSkp\\UWQOQUX^\\VZ[`XB>KPN?<>>:8;HPRTOA6APLABINIFHIPXTD<??9;DHIFISUMIMKC<:>JWTOVVMVb\\T`eRIECKVPNVbaZXYVTTRPQZ\\XZ`aacdagrnefdegjjd^Y`ga\\emjdcccb__a_^]WUZYqxW\\hiigfhaX^`RBDRY^WNHEIM@:B>DPRRVSMNPRRJDDGILKKOVWPKT_WTWVSW\\_``aefeeedcbd\\[][[YYbidcaba\\fnjbihhd`iilidcentndjlcershehiilk[Yaadj_UZ`ca_cb]Y_h]YhaU^cYQQ\\b^chijiqsnoohbblmqrlnkkiiihlmlmnmlfbaabjhdmkshbhfUMUcbQJX\\Y_`^`hjt|npqnnhipqqpnlpsqnrtpmewy`rweilpxk|tdy~|~}vn{w|vw|vr{yrvwxx|wzz~xq|{qtu|wmvtncqphp~vkwqjss~whh~|popuwuvvsvxwuzyoyvq{zuswwp|{{y~n||rrtqiswytholhjn{ng}p_vZ^rtohglywusnvZeytzqu}uvu~yov{vw|{|{rv|}rzwiqsijlknnmryp~gZ^bdboy`Wj|phyk{junl~xmztvv|u{qxy}wkfwoswy|}t|xzm~~y~{~}s}ots|szzy}y~~x{bYZ`jkv~feojgWnvyrwxqu|pwzypwupǾƾƽ¼»¼ĽĿ¾ž»¼achjiie[OMTWW[`_[XY_bbaa`]Z]aa]ZXWSRX_a\\XWXTR[c[VWakk`VSRRRTXXVTY`ca^a_WT\\ceaZWZXNIQ[ZXRLGEELW^`_dgjllh[OR^dddddefdaZY_b`_^\\ZWU[ejeabccdcdmsuqhflttsrmijoohchmkhi]S]mkjb][WQNWfj`^bfa\\UQY[k}}hY]`en}~vlinlf\\acNHahfhSEGFADMS_gO=AO]ZK?>>>DR][J::CN`qcRRQLNTX]ed]\\aeP?FTWQCBF@98<JQSND>HUNCFMMMKKLJSVG;;><9?HJHHNTOGING;6:GUTINXSO[aVWf_MJBCLRNNWb_XZXRUWRNXa_]acb`ccbirlhhfejmke\\\\dfaainidcbdb^^a`_^SX[^zvYbigiigh`\\ddSHP^bbXNHFOPA>DAIRQV[SMPQMJHDCFJJIHQYSJKS[QTZRRY[\\^_bfdcegdeecZ]_]][\\bfbb`ddbhmibiiib`gfkkdcdownepl`erpgghhimma_eeeaY\\d__bdgc^\\bh\\\\g]Q`_TQV_c`eeijlromqnedflnwsemghgihhlmlmnnmg_`]ejhfrwwhchi[RYffSKZ^\\_^\\^efqyjmonngfmnnonknto}oqpjkjvo^ppdfkpxul|ri~y}|{ppy{v|}ruopx{uorqux||}}}qxw}zro{ussswpu~~sqf`x{khs{mjrikkr~{q_mslloonquojuxozu|y|zpozy{|vqouy~zz||m{rpptlytwrpxtnjio{phzt_ccp|thflx~sqpy~f]{s|}vrzwuu}uq~~z||{~~xw~z~wuyrqrijqkmjgmvoziY^defd_Tmqgxozmusrv|py{|}x|n~z}shdvkvyw}{svtxl}{|w}zn{ruwtr}{umx|w|~z{~oYY[irryikuulZmtzx~{|wr~wjo|rxn|q|ʽľǹžǾŶĻſ¼¼ý÷ľû^dhhgfdXJLTWW[`\\WV[aba``_ZX\\a`\\XUSQRX_`\\XVVTXdcXUZcjh\\TWVONUZWTV^bda`b^WX`db\\UVXUNMX]YUMJGFGOZaa`cgjklaNJWceffecbcb`^_dfdc^[[Y^djgdabccaciuysjcgptqrqlkmomd`jokhhYSaqkh_\\\\VOP]he[_ad_YSSZ\\o~t]V]`gr|{oehoka`g\\OZhbc_JEHFEKOTb`D=JW[UD:>A@JZ_TB4:G\\olUNQMKSWZckh`\\caI@P][PEFH?8:>LRPE@N\\VDAJPOOPJEN[P>::;;=AEGHKOOJIOL=6:DSVIETYSU]YS_j[KHAEMONMZa[V\\XSWWPSagfdddbbbacotkggfckqne[^ggeehnof^_fd]^a`_]Q\\]f~o[gjfhkhhdbjdUO\\efd[NGHTREFFBMUUZ\\QPUQKIFDCFJIGHSYOGKSTQWZPS[XW^^bebbfkcfga[__]^]_bd```gihhlgdjiha`fdkkbacovmgqkbjpliihhjnnhhhhe_^ff]aehje^\\hh]ef[Zc[WWYbecccijntmktlbeimnzrcnefgihglmmmmnke_c_iejkt{vhdimbV\\jjTK\\`__][]cbpvgimmngdfgknnjovnv~roigmjne^okcdjpusm|ppw}|{skryuu}wpt}jnu}xomomrxz|v{zjxyt~xujmzyuupruj{yrnh]fogitugjnhlir}ype`x{jhlkfgnpgkrpr~iuywsrs{yppnszwzxlzrnmxszyqur|qwokho{vpxydppr{vlicwrqrpocqwp{ntsvxlx|y|~xz}x{o}~uqhlxlmfekvqzh\\cndkd~fSoqjvstnu~~{wzuy~||o}{naftwgzu~sqpuv|k|}}|zr~y~|p}|}uw|umz{y}rgu{zu|~r~}}c^V_urslio|vain{w{zpytxriikuz|~xlwyryŶµ½»ü¿˿ºļ¿ûýû^ehfee`QHNVWW^^WUU\\ba`_^\\WV\\`_ZVTRPQW]^\\WTTT\\e_UU[dhaVU\\VLPYYTSX]bb``b`Y[de_YUUURORWZWPJHGFIQZ``aegikhVJQ]cfgfdb``a`adqia__\\]_dmnec`bccdmsyvjefjpsrsnjmnkg`cloihgXYiqlf_]\\TNRbfa[_`b^WSU[^o{iW[_^gr{xh_hpj^aj_Wbd`aTGIJGHLNWcV?EQVXO<7?ADT^ZN=3<Oio]NNMKQXX^jmg`^aWDH[a]OHLH?;>BMQLDK__I>EIIMQQHIZ_L<:89;<AEGJPQJELRJ<=HRWLCLZYSY]WU`_TNHADNOLQ]`Z]bYSYXRWemljjfbefafwviffbfpsof^bihcfjnof\\_ge]^aa`^T[^gzm\\glfgkijefmh\\]a^dg\\QIMWMHIDLXW[dZOSXRKFECCHLHGLUVKGMSTVYVQVYUZ^_bdabjgahg`]`^_^^`ba``aimijljfjhg`afckicbalvoipldkmkllhfjpoknkie`ckh^dhkle`ckh`ge]bc[[[]debacikoqjntjdjkmp{qckbdehghmmlmllic`cdibkrtwvieildZ_jjVL]ba_][]bamqdflnngbbeinnlpvkqxmdkrhgcgojddjpttl|os~w|{xohrvou|snsshmt|tlllkqx~y{sxxivutwuqgmyuutmqqiyrijaWotgejtodjmigjuyvgXnpfghb^elhdkqr{koxrylswty~|~npnswz~svsl~~xtnj|tytptrjvnlgn{|zxynz~xxqqk`vqosmrhsyo~|qr~vu}jv{z~}wt{|rzpiw}mmcfjxqzgdkwcpm~~lXsrrwtrru~{~zwy|y|{~}o}zkZjrpd{t}jomvwyj{~{{z{p{x}s}v}}vxzkl~~uu|oessxuz{m|~ycTWtuolil|~jdi}w~w}ktttniecp{{yltw~swľĵĽĿûƺĽŽ¸½¼ƿĿýýľ_egedb[NIOVXX^\\UTW^a_^]\\YUV\\_^[TPNMQV[^[UQRYaaVRX`fdZRX`TJU[WSSZ`da]_ab`aeb[WSTRRVYXWTNIGGGKT[```dgij^OQZaefffbaabbdhhqib``^agjnkaba`bdluvvkaelnprtrlkmmie`gomghcZalplda^ZRLWdc[[_ba[VSW\\arw^R\\`_ivzm]`oo`^ficaZ\\cZKPRLHIIP`bNGOQTUI66BAK`_RI<8G`odQMMKPXYZbnlb^a]MIZbaZMPVK??DGNPMMZbT@AJHHQROU_cVC:::::<CIJMSOCDORGAIQUQBHW[XU\\\\UY_XVUIBFNPMVb^]ccYT[WV]kvjckhdgebq}pffcgswtmebhmjefmqma\\bgb\\^aaa^Y\\`nvh^jkehjlmggng_cccde_SNR[TLJHZ^Y`fYUUWTJFBBDJMGHTWNGIPQPY[PSZTRZ^bbc`ch^bje`_a_a`_aa_``clokllniihf`aedihddcjommpjfmklroffkpqormjhhimibgimkfenmhdhcfc`a`^bde_bijlmhiwqghkknqxrghbcbgikomlkkjga`eiidkwsrsjgiiebejjYO`ceba^]bckkbcmojd`_ekmmlprdm|jcrrcaakplddlmttizqw}v|zsiispguzknt~kjktymjifhqw{zxxqvsjsqwtpiglutsnlpkmtyiffW^xvkedktlcjliejuvl\\axwffgaW^ge^bkp~mjkoqpczxt|{msnrq{~zmtpm{~wrnkrxorq{gtnjeo|~~vwvpwumjzrmqruumv}|z}}}yr|~vmv~}}yow||~sqpnhhpq~gp{{fu~~ud{v}~}uxtys~~~v{}~|}p~}~xiUnqfc}zt}gomx|zi{~x{}zvnzup{wtr~yyyoeu|{qrxigrquvtvis|~nXWo|rkghst`b{|sxsygmoolkek|x{mq~wzuwõϼ¿ƽĿſº»½º¾¾ſú¾þ`eecc`VLIPWXZ_]SRYaa\\\\[YURV\\]]ZQLLLPUY\\ZROR[c\\QQYch_RO\\\\KN\\[SRU^gi^V]bdbaa^YUSSRTYZWSPLHFFHOW]__`bfjdUNU]adcba_acdejmlogdbachnole^`a_ajvvtncagnooqsnjkljfdelofdha\\dlomfc_ZPO[da[[ab_YTUY\\duqXR\\``mwtc\\gqh`eki`^V`cTSZQIGEHWh_RSOOTSE7AGDVbXNE:?WigXPNJP]_Y\\hqh^abXOXa``VMUXL@@GJNMKSb]E<GJHOSOTdi`K53<>97AJMOQOG@HQNBDPTOE?P[WWY_[W\\ZV_[JDHPQP_g^agbXV\\Z\\drzjckhih`i{heeeozxsnhjnpmggpsk^^hia\\]_`a`[\\fpqfajjchjmnggngbbcccc`USY]ZMIWh_\\ghYZ\\ZRIGFCHQNGNXVMILQOO[XNTYRR[`ea`^cc`fgdaacccbaabaa`epplnlniigdadfdhgffeiloqrjimgotjeelrqrunkklmmkflkplgouphfknh_ajd_ff]_kmknlflynfilmosvrhc`a_fjoqmjjjjf`akljem{smlljihhkjjk^Wcejgeb^adhe^_mpfa^Zennlkmk`m}hfuqd`cqqneeoktuexv||uzxkdhtibvsenuujkisvjgfaepwxtvtnrmkmn~qjbelpqrkjghuqoce]Uj{o__clsgclldcnrl`ZkvlaefUSdh]W_k~rjreoidgys~zqxjqp}|sismmvxpnkqvptnxiqnhbo~wy{sslxrkosq|xoy{z~z~vxv}~~y~lrz~wosk}}jztz|yr|s~}zsmy}||v}~n}}peVtzo~ad{zs|gpr|{izz||qkrpr}}|uoxyv{wdg{vxlnpdhqqr|xlpln{{wraWjzkfdj}wc^wqrrrfjmkjkf{|}}~npz{wu{wvɸûǽƿƿżþ½ſû½úƽľ¿addba\\RJJRYZ\\`YQT]b^YZYURQUZ[\\XOJJLOTXYUONU]^WQQZeeWMT_ZNT\\VPRXflbWT\\bfd`_\\XTQRSVYXURPMHEGJRZ^^]\\`hh[RU_abba_^`cegjnpmnfceckqrlf`___`fsyrnifgilmnopljijhefkpm`bh`^gknojeaXOR_c_[\\aca[TW\\^etlSR\\`botm_`llbcjnh]\\`cZV^TIHEETchaZRKNTQC=KJN_^PIA:Jag[ROLLYb[W`mm_]bZQT^^__SQ]WKDCFIMMLS_V@AKHJRLL`f_WA.7A;5<JQQPMGAEQPCCOXUF>EUXTX]^\\[ZVZe\\KFHQQVeebdd`VW]_bl|xghiinhctrccfny{vsolqtplhhrti]bmi^Y\\\\^geX\\iokedlhcghoqfhoieeccff`WX[_ZKTkl_digada[PNLKGQSOLT[VRNMOMR_VOTTPU]bec_^addfdbdcchgbabdbaakurllllikgccjgdkjgffgloqrllieqthfglqrsumlppnmmhkjpoosvojimlh`fmedgbblsjgomfpujiijjnrrqjc`_^gjrulgfihgcfnllem~sjlnmjfkqnkng_fhpoifa`dje^anod`^Zdqrpigf`ozgkvqe_ftqodhphuucvy|{umkgbgndeukfouokmjqthba^dpuvvwupmjjhsvgeaflonoqc_mxlf_`U[ord[]dlnacqh[erm`V_oibei^N]j]SWatumcfr]duvyy{z{wzfor||{~ngtlhsxoqsotxrlqgjrfao{xw~~mkxtllqoy{oz|{ww~{~nssrtw|~t~{xupk{wy{~xt~j{}~hc\\xztnu_g}y~zszgrwxmz}~~ohlpv}vulm~quyp_mxrrfjielvw}nxxfhlxktzprgZg~oeagxxe]pvppm{djjhign{}pnuxvt~{}}x˿ǽ¼ļŽû½ļ»¹ž¿aa`a`VMKLSZ\\__WRV_a\\XYXSPOTYYZWLIKLOTXTNLOW^\\UQS^haPMZ^ROYYPLRbpgWRX^cca`^ZUSQRUZYVSQPMFEGLU\\^[WXag_QQX^`a`][\\bgimpsqliecehmpoj`\\``]cotnhgfgjkjiknljiijjilqpe^eg_agilrngaXNSac[[^acd[TZ`ahpfST\\`bqqg^aje_flnhb`gcY[XKECCQaff`WLJMTOEFNPZbYKE??Tb]RPPOU_]WYelbW_`TSY]\\a^RXbVKEFHJLLOVZPCFJGIKGTfdZL62CD9<JRQOICBFKQLDNZZI:AQWUU[^_[YWVagXJKQSQ]ieegc`VWbcgwsdijlnjky}mbbfu~wstoluxqlijsuh]eme\\Y[]_idX`kkihglgegfpsfhoigeaaih`^[Y^YOctf_gjolk^ZUSSOMVSQR[\\[WPORNU_TQTPPX^bcb^[_fdbabedfidabdea`dovsliijjmgadlgfqneffgnqrrnkfettgfgkprssnmqrmmmhjhnpqrvnlmlkfenmfedbltneisjhsqgjighmpoohca``ejuymdfkfghjllndi|shkoojfltojvrjghssnnb^flgdgnmd__]crvrfbc`nxipypc^kwsodnpfvvbsvz{qedeahlchskhlw~nnolqqd_^_forsvwuqejngxlfe`jnonqr^`lyc]\\VTfoeY[_elf]lr]ZlpbUWfj_ciaUVe`NOYfy{xug_gnVl~txxsw{z{ymutxzynitceuyrvrwznlmcivcap~zxww~~ydlo{wnkrpx{tt}y~yw~}|~tzwsroguwwy{wu~i{~||ddfxuppl\\n|w~~xt{lw~{s{{~~ncgrv{omjvvlprg[qrqkddedmxrntu`copkks{qqh[cx}qd]cu|f\\k|pojqzgohjkewrno}{vs~}y{|ǸȾ¿ɾþý¼ľ·^^\\_]QLMMS[^a^UUY`aYVYWOLNSWXZUKIKKMTVPKLQY_[SQWbfYLQa]QW\\SLKUjr^PT[`aa_][WRQSUYZWUPOOLEDJPW]\\XUXabWOV_a_]][Y[bjmoqqmheeglnqoieb_cabhqnecdgikkgghkhhiijmnnpj^^gfaegflurg^SMYd`Y\\acdg[T]dchnaSV]^fqnd]afaeinigkihb][PLG>J\\cce]MLKMQOLNSXcaTJB@HZ^SQRSTY[XW\\fh]V`^TXYY[`ZS\\_QJGJMPPOQWYLEFFFHHN]eaT?/=LECOWTNH??JPMHHQ[\\P>:KVTUY\\`aXVVWfgTMQWUScjhgb`^W\\fdnmehjnmmv~yiccl{{ssvqmwysnjjtuhbimaY^b^alf[bffkjhlhffdssehpifeaaji`_[V_[Youeailstm\\ZY\\ZPRZRSX`__]RQSQZ^TRSNQY^bc^\\[`dcc`dgjmh``ehebafqsplhfhlmfbfkfhuoaefgnsrrnidfvtgfgjopposmmplklikinoquzmlnmjhknjigcgvxjgtuhmsohhfeejnmmgdcaaejuxlbfkeglhflmdbysggppigktqjw|mhgrsqsf^fmijlljc^_^dtwqb]c`k}wku{mb_mxtmgtohxvcquyzkcheahlgjoonkwxoqspql_\\^_gnprttus]gvky}hihaoomqth]ej|qXZXNWmiYXZagj\\axhUcpfYR]g^[jgUUb_MGQ[j|xrrp^XhgYu~x|qwn|x~wv}xt}xsqs`o~yvy{|wjoj`jwfcnwsuvvzs}|wg{lu|qmvx|{wm|zy~v|{ttoqoepxvty{|x{iz|xcfmtqlr{dXr}~u|tv~v|}}}magxupijowlijle\\qpohb`adltw}jmoq]`qikegvtrj]_qzqcY]oi[mrmdhrnzpqnp||zwspxyq~zyϿÿ˿þ¸ɸľý¿þ¿üûɿº¿ž\\\\Z]XMMNOU`db^UX\\d\\UYZSLJMQUWYSHGLJLRTMHKR[_YRS[b\\NL[g[S\\ZKGK[onWOW]ba_[YXVRPSUVWUUPNMIDELSY[YTTZ^YQR\\aa\\ZZXX]dimnolidbhnpqsofabdeegmofbcegjjgdefhggfilnmlib\\`gfdjiiotmaYTTad\\Y]aehgYVagfil_SX^akqi`\\ademklhkqpd`]VNOEEXccbaUKQMQQPOTY`e\\RKBBL[[SSSSVXYXW\\bdZXa\\V[WU[]SQ^[LKMRUUWTQTUMFECCDJW_b]L83HTOUYVPHB@JUPHGP\\^WF:ASZTV[_c`YXW^mdQSXVSYgfmh\\]^\\eidtwigfjrmo~tfbht|vrw{soyyuojmvtkinl^Ybgacoj^a`emkjlfdddsqdiogffablh`_YU__htnecjotun`___[RSWVZZade\\TSUU]ZTROLT[]bb[^_b`_cbhloof`bhjgcahsqnlgdjmmdbgiglvj_cefmsoqnhcgwsfddfnojmxkjnhimkmhooqw}ommkjnnggkgeo{qfpyrkrpmhfedejnkjffcbeikrwmbflfgohdjie`tsjfnsjghopjs|rkfprnphbholmpjif_^`hutn`\\d`h|wkx{hbeputplwsnxugps|vjgibbgknoqwrlx{sostqoh][^_elprrsst\\d|pz|ghhdqrmvr\\]fkeQ[SK^k^RV[chdWkv]^mk\\TUaaR`o_R]eUEKV_pz^e|]XUjdd}|yyqt~z}wz~|suzui|}||wret}i\\lvkhjnovsusnzwou}ftxqy~|wtz~}y~zuo}smpmel{wrzxxzy}kw|~pehponyjvtZZx|~s|px{lblztjinxxjgeeiicmupd][]dirnjfdil[_o|cicfomqn^[jvqbWWf~qYksnbajuw|||z}vw{q|{øſýÿŷþƿſþƿźþºYXYYRKNQRZghc]X[_eWT]ZNJIKPTWWPFHKJLQQIFLSY\\WQX`_SFMchXSXPFEL_qiQPX_ba^YTWWRQRTSRUVRMHCCHOXZXSQVYVOQX^b`[WUVW_gjnomicaemqrrrjaaegeehmlcbcegigeceegfddiokfgc^_cgghjelsod\\YY^ed\\Y]cilfWWchhii]UZ_iolc\\\\agkmihlqtl`a]USMFVcdb_WQTST[ZUTW]c_VWPDHS[ZTRRQSWZYZ]aaXX`]YZTTZYQW_SKRWYY\\[RQTRKHC@ADOZ_`WH<@RZY\\XQKEGNWYNGNZ^[RB>JX[VY\\^ea[YWfo`RX^WR^fembX_]`lgev{kfhinqmr~oaalx{tqz}soz{wojnvslmqhZ[giddqn^[^enllkdddesnbjohgfadnh`]VU_gtqiecknsupb`_^^XTX\\Y\\dhf\\VVW\\_XRRMLX\\\\caY\\cc]]cdnpljd`fnkebclsomlgejmkcbgjjnse]cdemqlpnhagwrfaaekkcmyghlfgmomhnoqx~pmjhkoldhkgkwzleqtooplkiffegjnjhefddilkqwnbdkfgohchgd]mrkjopkfgkojpyrjgnpmokehnoqqkjg`^dmuqj^\\ebhzwkz{eelqtsppxwtwumpr~tkigbcgjqpt}qoyzvrpuxrnd\\]_aejnrqrstbcvt}zifihpvoyrY_jp}YS[NQdeUPYaehZ[tiZlqbVSXaURnjTWa\\KCLXez{[UxfQVVkho|z~vys~u}}xpys~tmbzvfXpyqelnuvkqlkuvntd{}w{~|}}|z~~tnzslz~nkdfzznwvvzxyov{zjjjtknuhzkTd|z~s{n{zkbowownjpzkbh``fnhfyp_\\UYdgpjz^b^hhX_owagcehglp`XbsqbVR^yuYg|rukdi}wxz~u{Źʺ¿ĿĹþ¿½¾ýøŽ·¾ýVVXUMIPTWakg_\\\\_`bSWaVJHIJMSZXLFFIJNQNGGOTWZUR[_ZKDTf`TWSECEOdo_OPY_aa]URXYRPSSSQVXPIC@DKU\\]VRWZUOPV[ac^XTSUXaikmmjeacjpqrrofbfiieglkfcbceggbbceedbadnribcc]^dhiidboshba]]chd\\Z^dikbVYcghhe]WXdqoe_[\\bilhhkourfdd[TSMR`cb^UQYYW^^YVV[`^WZ_PIQ[[XURPPTXYX[_a^YY_]YTQTYWW_\\ORY\\Z]`TOQTRKHB>BHQZ`_RHEK[`_[UMHKUZXPJQVY][RABT\\ZXZ[_d_[WZkk[U[_XU^bej]W^^flbhwpbdgnsjjvze^eoyypr}xmq{|vnlpwrlmofZ_ijeetr_Z^fnmmjdcbeslbjjegg`dng_ZUU`pvhfedllruq^_^^_[VZ[Y^gieZXXW]`VSSLLX\\\\c`X[eb\\aaftrigb`hpkcbgppmolggjmjddgjlqqa]acdlmjong`euqd`_cgecluggkdfmomgloqxpliglmfgkiioxzgisonokjlhegikkmjhghggiklpqjccifgld_eed[jnjjlnkfeimlnuqkhlnllkghnqrplkha_fouri\\]fchxvmzydfmprpppxytttqrt|tjle`eenvpw}pqwtrqpvytmb\\^``ejnpqosukcmv~xmhihrqyw_epsqNZWHX``TQbigcSgw`app^SRYWLdrZN[_QDALZn}eMlqPJZVqr}|z|ztp~z}}}|m|tybrdWv|tfkmyqdmhkpwrpl||||}|yz|ytuyqjyspv{ofedr|nvxuyyzqv~{sklothnqg~fRn}ysywzmdopluuhosa`j_[arkczlX^XYdfmhmY`ZifT^qv`c]ddckpaWZoncXPZvz`iv}xzpr}z}zѿĹź¾Ŀʽ¾þþŻ̿¾TTUQJJRX\\fmd\\[^`a]V`aPGHIJNVZUHEFIJLMIDGOTVVRRZ\\RFFZe\\VULCCESjlYMR[``]UMPZ[RPRQQW[THDA@GPY^ZTUYULNV[^baXSRSUY`hkliebchmpsvqiaelniehnicbbcefc^^becb``hpneaa_]agjiebhqk_cebdehc\\\\_fjk_V\\bghgd]W[lrh_ZV\\fkfchmqsibfbXVSR]dc_SMZf`b`VRQXa_W[i]JOZ_ZVUQOOTWYY[]^]Z[]\\TMNT\\\\]`WQY\\YZaZNRRTSMG@>EPR\\`ZRDFU]abYRQQU\\^THOZZ[]YNFJU]\\XVYad`ZU_neXY]]YZaadg[X`bmj]ntc_cfrufk~~m]_ksyujstku}|tmmsvqknmaZbjjfgus_Z]gmllha``cqh_gfcffaene^ZUVbsocfbdjiptpa]__\\YY]YYbihdZY[]a^VUUMRZ[\\b^X`g`]a`l{qfebbjpjcdkqlkmjggjlhfffhlqm_`acejiinle_brp`^^aeablracicdkolejnr{okggljdkmhlswtilnknlgjnjfilmlkiiijjkllmnmfcchghib_ded`gjjihihgeejkmonkiimljhijlqqpnlhcaipsrh\\_gdixur|ufelrpnopvwsruvtt{yolkd_bftwnz{oqsqpppxyrlddfb_gnnqrkrvofjuz{qkmhyqwxhjsv{bN]OM[Z^RWkmg\\Xsubgnj[QPRJWwfR[a[G?IS`vtRW}xYGLY]wtwy}xmv}~yn||}jsd[{wljlym^ieiq{x{nwz{}uyw~z{v}|twxs~tri~xswvvvfcbozzv|sx~}}{{rw~|zmnksqcqme{bQ||wsuy|qkpnjzudng[]jaT]sje|eN`\\[aejh_X]Xk_P`rua^Tbd[pob\\ZffecVc~im{|±}|ŻƸƻǼ¾Ŀüɿ¾·ʾÿTTSNHLW\\bkk^Y[]__^]e\\LHIIJQZZODGHIJLIECGMSVRMPVVLEM_c[VMB?BGWliVLT]a_XLJT][RONOPZZODABCKU\\[VTVRJKTY_ec[RNPRTZafjidbbglnqutjbclsohhimhcbcddc]Y]bdca_clnfb`_^`egjgcdmoe`hieijjc\\\\ajli]X`bfgfd^Zdsoc[VU^hf_ahoqi_acZZ[YZcg^SQ^lokdWPRW_aXZliLET]\\UUUQOPRVYZYY[\\\\\\]ZNHR_c_^_WVZZW^cUMYVTVQGCEKU]e_PIBO_]_bUQ_]T]bUMU\\Z^_XOKPX_^VSYbd`WVfm_YZ\\]X[a`ab[Yahmb]oi\\__fupdru`Z`ktvmhwqku~yrnou{rjnk][ekkghuq]Y]fkkke_]]cne^ecaff`goc[XVXesibfbeigoto`\\_`[Z\\^WYfjhcYZ\\^a]VWWRV\\[\\b\\Ybf`_abv|hbfbcmoicekmggjjhglkgljfhmqi\\_bbehdhmje_^nm^\\]cd_akm[ah`ajnkdhnr{ojfhlgfnlglswpihhkmihnplgkpplhkmlmoqmmnkhfcdhgggc_bec_chiiiihhechllkkljgklgefhlrspplfehlnqqh_aifkyvx{qkgmtolmmrtrqvxssvrmljc^`jyqo}wrqoppmr{vlhflmd`nunqsjsvmjmputnrkqszrnvxsRT_LU[ZYS_oneZfwqikleZQOJKmvXYdaWECMXg|jMi~iHBS_nutvu~y~wqq{}~{zpzw{ufc}zqhn|j[hdhty|r{|vw{tv}yuwwou~z|yqvzzusg~xty}w}na]}mr}x{t|zz{xyrx}yxjokxjczvkhyYTyxspyx|xulvs{xdk_XYfgO[sff{cP__`bdgmzVUXXlVQ`ruc\\Vbd]ondaZdfnxkt|mz̺þɿɿľ¿ýĿļ¿þ¾¿úɽTSPKGMZ_fpi[Y[\\^^_ceVIIIILU[THFHIIJLJECFLSVPJOTOEFWfbWQG=<BK_lbQLW`a]QFL[`YPLKMT\\VH??CHR\\[WUVTKIRY]ab[QMLNPVZ_dgd_`dhlnqvpc`gptnhkmnfcbccb`ZY]bb`_`hnib```[ahhfcbhmkcfmlkmmkc]]fjhe_]aceeec`cpvk_YVZcf`\\_hqma[aa\\_``aeaSQcvyne\\UUZ]_ZWhnR=KXYUTWTQONOX]XSTW[[ZZSGNai`Y]`\\[YXZabTV_ZYYTLGMP\\jhXFAFWc_abX[fZTdfYX^\\ZbbYSMR_b\\RR\\bc]V]ig^\\Z\\]VX`b`^ZZaif[al`Z^]kuhi~eUYbltpdj}kkv|vqopv|sjoi[[hlkhiuq^[^fjiib]\\]dka]ca`feaim_YXVYhqcbgbegeoto^]``][]]Y_hjhbZ]``b]WXUV\\]Z^c\\[ddba^i~u`cf`erofcgmkdgjjhinigslehnpf]bcdgfbgjig_\\hj_^_a`^bikY_g\\_jkhcinqyqkfhlgjnigktxnigikljkpqlinqokiqnjowqimnieeegjgegb^aec^bfhijjihf`bjmighidegd`cfhpuonlgginqnnjdcjfjywzypniprlikkorqqvvqoqokkha]`q|hq~mnlnqmkt{ndghjogarykqtksuklpmp~xptksoyyotzcJ[ZMVWXT[ipqe^qwmjkic]RKH\\whYca`XFDRdnxcZuqVELgkyq{|jv{yy{x{xmwv}v}p{~v|{ji~sjr~h\\kfmv~vy}xz|wpqzyp{sp~p{kguxurnv~tr{sg{{yz~yi\\wnkx|xyxzywqy{wxnsj}aamlnzQ\\wzspx~|tz~|iy~ndYWX[kZ^pcguf````accrqWQR[iORats_\\ae`gjlee_mp~{}wþøľü½ľûſ¾ýŽȻĿSRNIGNZahogZY]\\\\[^fcQHKKLS[VKCFIJJKKIEDHNSSNJOSJ>I_g^TH?;;CRdkZLOZa_SGGR^^ULIKP[^QC??BN[_ZWWUNKPVZ]b]RLLNOQW[^cd_\\_egjpssjbdmrnjgnplecbbab^X[_a_^^bkmf`_aa_chhc^aimfdlokmnnke`ahkhc_`bghebbckurc\\ZZ`d`\\\\_hnh][abeggeeaUPdwyl`[YZ\\\\\\[[elY@CU[VSWYQMKJR_]QNQUXWWXKGZmgVU_a^ZVX\\b_W`b^^XSRQUVjt]MBDO[bbcefg`SZlg\\bh_ZbbYRNWfcXOT^a_YYbd`]ZV\\_TW`a\\Z[[`e[Vcf[ZZ]oodvrYT\\dltk`qvhnvsqqpowznkpg\\]injhiuq_\\_dhghaYZ^dha]a^_ecaji_\\XW[gh_bgbgeemrn^\\`_[[\\\\\\bjjf_Z_cca\\ZZSYa]Z_c]^fgfa`r|l`ffaitmdchmgckmjgknelwidgnlfbddeie_cijg_Yehda`_^]bij[`g[]ggfdhloxslghlhlmgfkvxnggjkklnqsnjpqpkovnmzxjjomeeijjkfdeb`beb`ddfhjihgg`]ejhdchb^ca\\abdnpjkkhfhoqnmkebiefuxwvplntqjhijmpnpuunmpkgkhaZ_ywawxffdllhittcajifpnbvmnsmoulhpmo~znuouyjx{rsv_RbVN[ZVUhortefwrghife`RHQmu\\`iafXKO`poodkwcNPcsp{rtgxx|ryv}|u{yqxzw~}to|zv~~st~vqwi`qhr{{rx~twynloyyoq}|knzqwciutnfjxwxvy{~|ti~}}z}{du{gu~}}z~wx}v~pyzwyxxlzZ_xmpswSgy}tx|wyq|yxnqxcTUURblkk_eleilc]_i`vkbQM_eLShxk\\]cicjgpieh~}»˺ǺĽǿ¾ĿſĿǿýüƿƹRPKIIP[agmfZY_\\WX_f^OHKMQZZOEDHKLKKIFDDIPSPLLPOD>OghWLB;;<GYhhUJS^aWHENW[TLHJQY`[I@>@HU]^YXTLJNVXY]^UIGKOPRV\\``_Z[afhkrqjcahsujegmnhda_`cc]X[`a^^`dkjd`_acdgfd_\\djidfnmknnmleadkmjd`_akmga_gqrha_^^ce]WZ`gic]]bhmkigdZQ`wudYXXY[\\\\\\`im^GANYYTVYRJHJKYbWKMQSTUXRENfk^RWac^WUX]ca`fdb_TU\\[[]usRJHKTai`_nuj[Saqi`hnaYadZRP]lcUPV^][YYac[WUR]`RXc^VW[Z]^UUb`YXWbpjm~aRT\\enpdayqhqrnimomvxkmqf`dmnighusa\\]afff]TV]dd_\\]\\_dabjf`^WU[ee]`eadbemol]Z^_[ZZ]^ejiea^bcca[[\\V[b][_`_`figagxwebkhdmsibchiceonhfmnerxdbinjffdffic]bkki_Wcieb`_]\\eii^di^^fgdeilmtwkghijljdejuwkfhjlmmnrwpjnppqtrnw~pgmqidmmnlhcbcacdd`aeceijjheb_[_fc_^da[\\]Z^^`mohkjeaeoqnnjc`hfcszrrpkpqlhggglnlouslnmddlh`Zc{mdumf`aifeirj\\bkjgtwfuqiprmrpfkllzopvi~guzutre`eTS`[WbrqwtclujgmjceaRNaxr^jnglYXcpvpmjrp`Yhulrxxkiyw}tmvqz}yvxyuuzyy~yw~l|wsz}yxx|jgymv~uoxxlqthjnw|yoks{yxfqwt~capvpdbouy}~t}}~}v{|wp}}yzvxms~|||xxu}oyxxy~zurVcoqrvu\\oz|xxm{}ws|~xp{pYRTOZppg]ef`gnidZoez~akaSc]GWptgd`Vipgmnes~Ľҿ¾ǻ·Ľÿ¿½ŽɿŹTNIJLS]bimdYY_\\TWaf]NHLOTYSGEGKPPLIEBACKRTNINQI@EYjdNC?;:?NbjcQLV[WJEKRVTLEGMW^_RD=?FPZ\\[WSKGMTWWY[WLFILOPSY]_]WW]cfjprkcacowobdgjhdb`^chcZX^a__`bfjhdbabedfb_\\_fhfcinmptmllgdioold`]cnlebbmrmedc_`feWS[bee`]`hlmjigaZarudXZ[XVY^abgndNBFPXVUYSHBDISa\\NIKORVZVID[kbWUZbc\\WVY_cdiibf_U^hd`bxnLPUUXdm^\\s{jZWdtmcjlbX^f[OQbnbSU[\\\\ZYYaaWTST^\\R\\dZQWYYXVSWa]XTZijh{nTOU\\foh\\j}hjrlhhmmlttkpnedinmhhgxxaY\\`febZRT\\cb\\[[X^c`aifa`VTZda\\_a\\``ellk]Y^^ZXY\\_fihd`_abdaZ[\\Za`\\_a_`dghd_jzraemhhppgbdfcaiplfemmjxsaakohfgghhjb]dkjiaXaifda^Z]jkj_cl`\\giffikjq|gefhjkgbdluvjehjmomntwnknprssnu|wlioofksmmiaccdcbb`^_cehhlki_[[Z^caWX`_XYZTZ[[imegfb]`loljic\\gian{pmmkplhgecciklnqpmke_goj`^jtejkdh^diceild_djljs|ll}ujoupprkfhirujuitnoywponieUXf[busp{seophjolegcZ_l|uhvtuq\\nuy~rlmukfo{ueus~ejyz|olmmwxvwuyxqx||}x~}~}n{wly}uyy~npwz~yvowvjkphfnwwmhgv|yyvoxzy}k]irsj^iss|~x|zwzxw{~s|zw~{wt~}}~}vuu}oyxuv{fVjyrtu|zhuzzj||upyz~xzxgVXX]osk`gf]cnuj^nnyzWcudeUH_tqardOa|purgyɽķƿ¿¼ƾ¸ȿŸ¼YLHKNW`fllaY[^YVYcf\\NIMQXYLBDJOTRIC@@AGQUSLJPNA?RfiZE>=::DVfj_OPZVLEHRURMFEKS[^XJ?=AJV^[VQKGJQUUWXWMEFJMOQTY[[UPV_cgnsod_cjtth_dggeba`bhh_W[cc^_bdfigefffedb_\\]bgfeeknmoqjkkhiorura^alledhipqlhgb]dg]QT]baa^]aikjjhechqrg`baWTV[cgghfTEAHRXVWSG@AHOa`NFGHMS[[NDSheWWZ]_][YXY`ceofaf`ZfoibcwmSZ\\Z\\bf\\`v{j\\ZgsniljbY`i[MSfraT\\\\ZZYYY]ZPORV^YUbdVOVXVSNO\\`YTRcndkz]NOU]hj]^xmbmncdhmllsrmmefloplijgz}aU[`fc]VPS[b`XWXW^c`_ifb`UTYd`Y[[X^`ejjhYT]\\XVX[agihd__abfaZ[\\`d_]`a_cjkh``nxkajkglqlebdeacmojegomnznbclohhkkhjjb]ekjhb\\ejfd`]Xbnkj^fr`Xknfgikho}edegije`dmwtfchknpmoyxljosvxnryyunmrljyrkle_ddefc_]^]`ilgmofYVYZ\\`aTR\\_WTUQSWXelcbc_[]inkhfaYei^hvpjjkoheed^aiijlnojd`^jqkfdlodkdbiaiiaeigddcfnqs{scqzqpssstrfdgm}gpomvkywlltndXYjhlzqtmgqmnmnlglifkt}yv}~lh}tmmwvuvwmrwszfny}ygjklvtuxuyyqx~~{xz{}rzyfqy|~sy{rx}yw|ou~vjfmicnwqfgi}|ytqz||nbiutmbYrws{z}wy}pu|wp~{~w~}~utu}oyxtt\\Tqrt|xt}}h}|tmv~~y|su`\\cfouriifabnwncmwyx[]wteUQiuncoTa}uqyŹùĹ½þÿǾɿĸ¿ĽYHGMQZdjli^Y^_[Y[ce[NILQXWIAEMTUNE><@HQRJGILOH=FajaQ?89:<J]ifVOSXQGFMTSMFCHPY\\YNB<?EP[_YTNGHOTTVXWOECGLMNQTWXUPOW`bemoh^]epuj^_efeb`adig_XXbdb``bdffeghggeb`]\\_ceeefkonmfhpmimsvzk^_lphcfkmqplhha[ibTQ[`a_\\]]``jjkjinsndbfg\\ORZ_egebXF=BLW[XTG?COW]eTEFGIQ[^SFOegXRZ]]\\[]\\Y[acgodadb_hrjaanm^caY_ca\\dx{h]^hrqmmjb[flXKSkxaZaYY[YYXXRLMQX^WWdaSOTVSOJO_aTPWknbqkQKOUaicZiybbkg^bgllkqpmegmippiiifyz_SY_fbYQNT\\b^WTTT]d^]gd`]STXc_XXYU\\^befbSQZ[VUW[bhifb_^_af`Z\\^ba_^`a_gnmc^guoeemgfpribbeb_gnkhejrltzldenlhikkijib^flhfcbjkhb^[Wipik]ot\\^pmhghkhtrccefjie`cnvscagknpkq{wljpuwto|{zvpuvjszkmia_deefa\\\\\\ZalkinhaYVY[\\]aTMV^XTQPPTUaja^`^Y[djjfb\\Xad[esnihknbcdc]bhfijloga^]iqlkhmh`heeihlgafhfdgddous{raq}tppvyuuicglikwn|nyumnsnf^Yp}tysyzhjrmqlnljsrnqx}}yj{wlmzvvtywuviu{~udllnwrz~wv{ytzzwxz|vz{zgmt~|uy{t|sr}nv{sgfmhcowmdjp}zuvzbduzsh_]wywyynxkuy{vpzx{uru}nywuw~WVvmyy~zi~|rlt}~}n|yibhjovuojhjclyqfnzvuhhz{f\\aorogZk||ý¼žž¾¾ÿþ¿ý»ſźžYHGPVaiikh^Z^]][]ce[NHKRXUFAHUYTLA<=AISQHFIKI@>PgdSE;69<BRag_RRUSLFKSTLEDGMV[ZQE<<ALY][UPKHLPRTVWRFBGKLLMPRSSQNP[bcgli`\\`jrqeY`gdc`_bgkbXW]ddcaabefghljceb]_^^aeffghlqoihkpljnuzud]gnneejlotojjgaci\\SYbc`^Z]][[iqopssi^^ca^UOU\\bddaYK==FRYZUI=@R_bcXHDHHLX]WLPadWOS]`\\X]aXUaacljacdegkph`_ilccb\\_db\\e{yf^^hrrnlhc]inVKTl|g_bYZZXXVQLKKQZ^UWd\\ONTTNIHT^ZPP`lffvx^KLQZff]`yi]ef`]`fkllomjeilkrohliexz]OV`e`VNLU\\`[TRRS\\c]^gd]TPSWc`UVST[\\`ceYPQYYUSVZcggea^\\^`d_Z\\`b`^^__`iof]_msgblkcgrti`ce_bnngfgnqlwvhdiqkgjkljkjc`jlgefhkjfa^]_trhiaxmXkshhhikjzdaadikhdaenupbdgjqpktzulkovxvu~|~vtwmzrlmb`cdfec^[[Y[glhom`a[XY]]Z_UKQ[WSPOPUSYg`\\][YY\\die][TY_Y_mmgflnabdaZcgafhkl`[\\[guplhkiagedkqoeaghcgmfdszsyxfkxwslwvumehmyqf}szwvrlmpnlb]yyxxvpnpqrsmopr{vry{|~xtwiwwtw~}vw~vs~zneropyt|wv{{vy{xwy}z{tzhk|t~xz{{z}s|p~oyqibnpgdnwgfu{}{{o[ozpabmxx}v~mriwwpx|trwru{nztq{}{UZtzmwo}qltz~}nx|lntqswwtnmmlizwipzusst~|pljfpvsoxv}ļĽ½ĿƽÿĿ¼ſǽ¿LCJT]fgefc\\Z]^^]`de[OGJSYRB@KZZPH?=AGNSMGHKJB<EXdYH=769>HYedYQSUOGHQUNFFJQW[ZRG?;>FT\\ZTPLIKNOQTVRGADKOMKLOOOONPU^ccgha[]emoh`]aeb`_`ehg\\U[dgdb``bhhlnoi__^]_`befffiknqnilnmkjpz{jbemmgghjlqumike_hgVUcje_[X\\\\Z[jtpqpg[Z_\\USRTZ^``_[PC;AMWXTK?<Occ`[KDEJMRZZSSag[NNV_bYWa`S[haekd^belknqf]]gjbbf^_cb[i~sb__isrnkid`moTJUj}jac\\\\YXXSLGHIP]^TXbZMMTRICJZ[QNXfg`ixqVJNS_ga\\mp[^ea\\\\`fkljigbdmjksoioebxwYNU_c]UMLU]^YRQQR\\`[^fc\\XPRVc`SSNSWW]ccTLPVURQTZdffb\\Z[]^\\XV\\ab_]]^^bjj_[eplcfldcmrpf`e`\\hsjcdjonltnfdlpgflklkljdbmlefhjlkf`^amumjfnyd_qqfghjlrk_a^clmgccfnqoggfjsomwxtmmpwxtxszqq{rrj`dgegf`ZYYW`ljirh]`\\YZ_^Y]ULLVVRONNTPTb_XXXXWW^gcZVRW\\VXgldbloabdbZch^bhlk]ZZZjytmhgiflhcqzpdfjhgnslhw~tvzijvxwft{vrgjnt{h{tptplnnmngew{}rqqrttunqsxxw|y|~y~qt|wvxuy{zwmntrsyyww{~zzz||ywwzlwgjwyxwx|zzt}{|twj[`tlfenw_j}~}`d~zm]g}{p~{|smnkwtl|vysyqvyn~qr~}zWawxyst~pkuw~{uv~mr}vuyyystmtk{ts|wos}||xpam||}u|ÿſſ¿»¿»ÿ¿ĿȽĽ@BLYcc__b`[Z]_``bef[OHLUXOCAP[TG?<?GMROIGJKF>@PbcQB:54;EO\\c_VRUSKGLSPGEJRZ^]VJ?;=EOXYUPLJIKMNQVTI>@IOMKJLLLLLNT\\`ccc`[Z`kpj`]__`_]^bhg_VU_iib___cjntsmd]\\_`baceffginrplmomlklu~sbgjkieillltukgib`hdU[knf_Z[_\\Y_ptnlf]Y\\ZTRRTX]_]ZXSH>>GSVSLA=H`g[UTECIPRUZXY]d`UNPXcdWYd^Sakbbb`^_eppqqbX\\ehaaebaca]mziaa_itqmigfboqUKTlocg_]ZZXOGDFHQ`^SXaWJMSMABQ]VKPaga]iujRKQXac\\cyv^WaaYWZafjlhd`^fpllrnlncayrRLW`aZSLNW[[WSROP\\^[^eb\\VMRVcaQPLQTRZbaOIPSQPORYded^WWZ][WUV^`_][[\\_dif\\\\gpfcjf^eqrja`e\\]oqfadkomnpidckkbekkllljfemmdfjkkkdaagsoilkysakumcfhkn|~a_a[erpgfgfotqgfhlropz{umnrxxt}~vmyzvtfbkjhkf_ZWXZfkglm`]`]YY``YXSJHQSOKKMSMMZZUUVVUTZcaXSPUYRScicako`bec^dh[_imi\\WW\\o{rmhdiloibr~oelkhlqtqn~ruynnwxyeuxtjnpmlzwj|~snkookligvkumpwtyosx|}}wy|w~~{u~}sy}zxz|ytsxyzx|{tz~zvwwfrhj|tz}zo~wzyyuw}}h{dZkthkgnwbv{]t}pfqvitpskkxz~pk}|t|zyzzqxxnqu}|_izvtvqoxvz~|w|qr~yv}|{v|qwqy~z{wno}~ueox{Ŀǿ¿¿¿ÿ½ɼ¿?CQ_d_\\\\__YY^abddefZNKOVWMBFTZOB=>CMROJFHJHB=FZg]G:538BMV^^XUUUQIJPPIEJRX]]WM@89ALTWTMKJHHJJNTUK?<EQPIGIJJJIJQZ_aba]XX^fllc\\\\^\\[\\Z\\bfbYUYekga_``entxpd][\\`bbacfhhjkoqlkmnkkjo|}kdhkigglllp{sjgc_bhc[fqkd_ZceZX`pomid[ZZVSTUVY]]XTQLB>ENVSNF@FYh`RPPCFUZVVY[`_\\WRPS\\hdW^h[Thoc\\[_\\]hsrrp^X\\ce``ffdbaampded_gqqkghidotXLTmrgnbZ\\]UJECEJWc]RX^RHOSG=GY[OKXfc\\^ko`NMU\\a]]nyeUZ^VRUZ`eiie_[]kqmioopkaezqPKX`]TOKOWYWUSQMNZ\\Zag`[VLQVcaPLJORPWa^LGNROLLQZcc`ZTTWYXUVYa`[ZZZ[`dgb^`gocci`^gmng^`cZdumcbfkmnpjeccgebdiklmmjffnjbhlkllbcensiklp|lertgadjmr}v`d]Zjvpkjggvxibknmoos~rlpuyzwxwo}y|ufiollmfbYVY_hiikc[]_]YY`aWSPFDMPLIIORLHQURRTXURZc`UNNTWORagcbhkbcec_bg]_ini\\XV_v{rngchqsicumhpljsuvvtrtypqxwzftwvnnpixoy~irsmjpmgmjazw|lsl|yr|pt|~}}xzvvr~}x}q~{{xvyz{y}zov{t}upaofjxrxxvpxxxvzwt}|hngfqrlsntyq~qwvsg|gikxxyll~{v}~pmzsxwoty~ln~zx|svwx}wxuq{|vywwvsx|}xwom}}qw|y~ÿ»¾ſ¿»ÿȼ¾¼?IXdd\\YZ]_YZadeffd`WOMOVWMEJWWK@=@GPQJEIMIC?@PabM:326AMSY][VVWTMIMOHFMSVYZWOC:6;FQURLHIIHFGJQTMB<AOVPGDFGGGHLU\\_`_ZVTXbike[X[]ZWY[_ca[UW_fg`__`cktwrh_[[^`bb`eikkkmmkhimjggks|uikmkhhknlmv}oig_^egfgmojb^^kfYZejjlkd[WWVSTVWYXROMKGCBKSSMHCDSedVPRPHS`^VW[_b[RPSSU`jdXdgXWmqaYY]\\^muqskXY[ac``fje``bmjahgchlpmgimfpv[MSlrkue[^]RIDBEN^eYQY\\PGOPC>M[SKQ_e]X_lkXJOZ_^]gvnWS[VNPVY`deda]X_pqkgnopgal~nMKZ`ZPNOQUVTTTQMOWXWbf]XRJQVeaOIIMQNUa[GFNPMJIP[b`]XRRUXURW]a_YXWX]_ba]^cgg_ef\\`ilja\\a]YlsgcdgjmophbbccbcdijlnmjgfnibjkjmkbeippflkpxihplcbfimsxpddX_qurohboqdhpmlooy{mlptx{~}y}ry~zsmpnmnlg`VZ[cghjeYW^`]WWbbUOMA?HLJHJMQKEJPPNS[VPYbaTILTUOR^ddcgidddbbaha_gng[Z[fxyrnhdhqsjdr}okplnwxxyw|osvrrwtwgqxuonrlryoxln|sliqkcnh\\ywyljtwu|rsz~{|xtsqp|z|}wy~v~||vjt{s{rk^meitrvvu~x{svux}wryjbrwuooyx{|{}~{rkp~bijzytgp~xx}{{jyu|z{syvv|vzx}xtwsy~x{s~{wtwy|zz}rl{}|}{{z~|żž¾Ŀǿƻ¾ĿDQ^daZWX[]YZbfeedb]VPMPRRMHNXTF@?CKNJEFNQH@>H[bW@458@LTVYZXUXXRJKMIDLVXVWSNE:8:COTRLIHIIGEFKRPC<@MWYMCCDEEGIPY]^_ZSOR[dif^VVZYVVY_cc^WT]ec`^_`bhtzvlc^\\]_`b``hllmnmhggjifdfmvxoijljjjkllqzxkkg]`jkhlpmgaagpbY_fhjjgb\\XUUSSVWSJFIJGFCDPVOHEENah]SSVUT`c[XZ[]\\UMRXVWaic\\daUYnn`VR^^_nspsfWX\\^`_aime`bdme]ikdfjpmfkqiqv\\NSmpm{i_a[QKFBFQadUOZ[NIOMCCSXLMZb_YX`khPES^_^bnp]PUVOKOVY_cb_\\XXdpmgflolbfp|jMM\\aXMOSUSRTUUTLNTSWbbYVPJRWddNHGLMLS]TDELNJFIQ\\b]ZVOQUUQQY``\\WWVX]^][Z^cf`]ebZckke[^aW`rmeeeglnmlf`^^^`cdgikonhchnfciijnhbgkqlfjhotjjlgbbfjnrsmhbUiuuundhywjgqtljnvqinqtz}|{uwxv|{{uqrnmrkh[Vc`dhij`TU_aYSXdbSIIA=EKKEGQPICELNJN[WQX`_TMPUSLPZaccfgehc`aagc^hog]]`kyvnlieiqrkepzplpnnxzx{x}zlntsotormowonnqklsnvpmwsljphbpg^~t{tfg|rw|vtw}xtyw{~lpyjqztwy~~x~qguzpzph_jfiprvzu|xx}qwwr|xr}ym^{wqs|{zzrxtopvkjyzzsfut~roxxz}|}|{z~{utw{}|{twwyxv{|x}ury|~zy}}ľ¾ľ¼ýʾþÿ½¿ƿƿź½þLYca\\YWYYYX[bdccb`]VPMNNNLKQXOAADGLMIHLQNICCTa]J89>CIPWYWVVUWUNKMIDKVXVWSKB;56?KTRKIIHHFDFHMOG>?JUYRFACCDFHNUY]^ZTOOT_ge]WTVXTTY^ce_WW]egb_`_`grzwpg_`^]_``_bjllmljfdfhgfgjrxrkiiiijlkilv{qije`fnokopnf`fnk`\\cfggfda_YRNPTTOGCFJGDDDHRQIBDN^icXUUY^`caZZ\\ZXVSQY^ZZbhd_c\\TZlm_PQ^^aorpsdUY\\\\^]akkbacfka_njdfgllglqiqv^NRokml`bYOLHDHUdbSNZ[LIPJFKTRIS^`[WXblaIEWb^_gncQOTQLJNUX_b_ZXU\\mrjceloifinxgNQ^`ULQXWPOUVWUKLPPWb_VUNIRWh`LEFKIKQXOCEKJFDIV]`\\WQMPSQNQ[a_ZUWUZ^\\\\ZY]ba\\\\c_^dhga[c_Rjvgdddinoigd\\WY^bcceklnldakmddiiloc`hnqihjforkkkdbbflppqok]\\syyuhft|pglwvlhq|hipqt{{ywpw{~zywwtsnpumfYdjbfjjj_X\\c`TQ]c`QFF@;DJKCHTMFDEJKDK]YRZa^SPWXRKMYaccgggnd\\cage^ipe_aeozsjlieiopkhmupmojkvvqwuxviisqjoioqmrjmoohhqnqvjpomlkbbpedlyp_gly|wssyzpnttyxgntetsnrt{|~zok{vlzrjb~ifintxwtv|{to~xs~}vywra{uzz~vwwm|hsnp{|x}|tgy~v|wz|x}y~~~uo|{{xvu{||~w}x~u{}u~¿¿¿ǿ»¾ȿƽĻľX_b_ZVVWWWW\\abaa`^[VQMLKJKNUUH@EIKLLJMQQMJMRZ`S=:CGGJQXXUTUURLKNKDJWZTRQLB<75:FQQKGHHGECCGLNH@@IQXTIAABCEGMSUZ^\\RNNRYbe^VSTVSQW_aa_WT\\eha[]_^anyxrja]bb__`__ellkjigdcefhhjmtulihggikljhmxwnihdekqoooold`iqeaaeeecccb]UMJPUPGEJMF@EJHKPJCAL_jh^WVW^edcb^^]YUUUXaa]\\agfbaXSYkm]QV]]bopop`TZ[Z[[ajg`bcdhadskcffihgnohqt^OTo{emnbbYNNLFKYdaQNZ[LJNIIOQLNXZ\\[TWbgWFK\\`\\cjdVNOOMKJOUX^_ZUTT_qpfeeingfjmudNU`^QJWZTONTUWVLJMPXaYTULJSWlUGCEJGIPTJAEIGCBJ[\\^]UNIORONU^c^YWXUZ^Z][Y\\^[Y\\bacdcb]^eXTrtab`bmrngc^UTZadcdgknmfahnjbfjjnl^ajrngkgiqqllibbafmonopk`iw{zqgn|yjiq{wkhyqfmqpt|ypz{oy|ywxwvrortmefqhhkihjdadc]SXab`PDC>9AIKCHTKEDFJE?K][X_`]VW^YQMQZacchgiqc[dbhg^ioe_ekqyrkliejnolhlrpmmfgsplurqrhgqqighnmk{ohnqnggnklzjmnmnf]bmhmfxmXc}hx{vknxtgjqqwqdnobu|nlknuyx~}nmsiytlk|gijlu{tvu|tzv}xx{~wwujz|x~}qu~j}ys|woyvz|sj}}}sxuxzvo{v|wv{~z|~y||~pýļúȿŻ¼¼½ƾ»ýĿa`]]ZVUVVVWZ]^^^^]\\VQMKHHJQXQCBILMMKKTVQMNTY_[I<AFGDJXZVTTUTLFILFGTZWSPJC><98ANQIDCEFC@ACIOJAAJRTUMEAAACIMQSUZ]WMMOU^caXTUTRPQY__ZVTYcgc]Z^^akuwtkd]`cb_^]]ailjggfecccehkmosqihgfgimkiirxrjhgdimpppnlh`bkjigggdb`bbbZNJPVTNIIMH;?MPIHIGEKZijc]YX]dgfdcb`^YTTXbfb`]_ehd^VRZlm]QV\\_foonm\\TZ[ZY[bie^abadbfrkacfgefnoioq`QXrt`mpdbXPSQKP]d^PO[[MMOFIQPLS[UY[SVa^NGR]]_ifWMLMMLJJPVY\\YURRWgrhbbcmneggkr_NWa\\OJ\\`QLMTTYVJJKPY^USUJJV[hLFAEIFHOPD?EGC?@N\\\\ZXPJENQQRU`e]WZYS\\[W][Y\\\\XW\\adfdb`\\b`O\\si^_`fnrkf_VRW]cddfhkmhacmnfbgjkkd\\cqqkhieltolkf`aahmmlkrmopz~pilszqglu~wfkzjmqmmtwtotn{~utuuvvsrttkiqtnomeflkhfc\\W^`aaN>@=6?JKBGQLECHF@?J]`]_`[ZbcXPPV\\bdcghlm_]eagf^jnc`gmrvpjkhekoolilqokkegrokolnqgeooihfikkx}ldnsoegleg||hhnmmc]^glvzcrjUaxfsupfksi_gnquiblecyvhifipru||nnsh{tqy|jomlvv|vy~r||~xy{xwuu}zy}zlq~rpzwqys}}v~snt~xzì|w{v{{{{}zs~Ǿ¾ɾÿĿǾ¼a]Z[YVTTUUWZ[[[[\\]^XQLIGGLSVLCGLLNOKNXYSQTY]`WC=GJGFR][VSTVRIHIGHQZYTSNE>==;>JQMDBBCA??CGKKCBKRPNPKC@BEGLOPRUWVOINTY_a^WUWRNPUY[YTSW_fe____`jvxsmf`adb^]\\[\\djkfeeddbacfjmnprlggffhjljhnxwmhhggjmopomjf`dkkjkmkc^`bbbVHP\\[RNMKG?;GOMFBCLOVagda_ZX]bggedb``ZUUZdeca^^dhb[TR[ml[RV[_homlhYT[\\YX\\fic^``__bhpi]_ceddmoimnaU]sp\\lrgbWRWVQT_d[PQ\\[QRPEJQPQUWUZYTZ^UJKV\\_fj]LGIJLMIHOUVWRPPQ[kocbbcliekcgq^PZaYLKdbMILSUUUKJKQYXQPRGO[_\\FGAEIFGMKA?DC?<BQZ[YQKHCNTVWZ_eaVYXT]UW_ZWYXTV]addfb`aaTOdl_\\]ckmhgdWPRZaedffhigb`jpibdghji_\\jsnhigfrslmkd`_aillhlvvqt}helwtkjr|}lcwmmslflpppu|mm{woqtuutttvqhnxvsqgdlrolhhbY[]c`H;?<8@KLBENJDFJC?@J]eba_\\_geWOU\\^fgcgkpi\\af`gf^jmbbjqssmiihhmpomklqqjhdhpkjnilphemnhhehjirxiajrodfi_`y{cajli`^Zan|salhT`~tbkogdij`^chqobah`gxkagdinpzzw{rotivy}turjvr|s~}xx|zxw~{~}}wz}~ufq}mqw}wqtxw~vxuq~{{~{|{}|ý¾¾ü»¿ļý½a]ZZWTRPPUXY[[[Z[]`ZRLHGJOSRIGMNMOPQVZXXZ^aa_SFDJMKMZaYTTVUNHHFFQ^^WROGA>=<=FOMDBDD@>=@EIIEBIQNILRIAAEILNOPRUUMGHOW]`]XWUPLPUVVWUSU\\cec```agqvsmhfdfd^\\[ZZ^fjidcccbabehlmnpoigedehjjhjsztjgiiklmmnmliecimolpolb\\_bb`UNZd[OMMH@=EPPI>@HUYZ`dbaa[Y\\chigc^ab^\\ZY`cdd`^cgaXTQ[ki\\UUX_kpkibVV]\\WW`hhb^aa\\^fjngZ]addakmghiaYcrl[j|sgbWSYZUVadXRUZZWXRGIORUTRU[WT[[PINY_cgcTHEEFLMHHPSRROMNUblj`^[ekcjn_eo]R\\_UHNicKHLRTSRKIJR[SMQNJT\\^UDFAFIDGLH?>B@<<DSYZWLGFCPZZYZ]gcUYXY]T]aVUUQRW_badhbdcWKYjbZ\\^fmibe`NPX]bdegghhddjlgdbehiha\\anoniifkuqkmjc_^bkjgfwtjzo_fmvtqrv~weitkvqdajplk{rgnzzojpuusrrvypfp{yvmcjvvplkqhWW]e^C;?;;FNM@CNKHMLA@DK]khb``dhfYU_`_kkchpre\\fg`eb^jkaclrsrkiihjnqpnnorpjfdimhilgjnjklkkiegiiqumcahmcdh``twb^glf]^Y_m~k_g`Tb~t_fnb`if[\\\\eri]aa]jqb^_]gns}z}}}xy{vq~ukv}|zvkx~s{u|xx~yzz~}{~{~zwy{|}qew{oowzyvuazxwr|t~{~|ĭûÿľ˿¾º¾¿_^[YUPMKMSWYZZZY[]aZQJHKMQSOHKQPNPRUYX\\cbbdd`QHKQUUW]]UQSUQJHHFN]d\\TOIC?=<>DLJC?ACA>=?BFGDAEKMGIPMA?GKJKNOQSUQFDIRY]^ZVTPIJTXUTUSQV_decaa`forplihiiha[ZZY[afiebdeb_^agklmnomifcbegijjnwxohgikkllmmljifglprssmjb[^ba^YYafYNNMG@ERWPG=FR\\\\[`bbbb][]bimh`[`aa`\\X_dffa^af_VRQZig]UTXalojg`WY^ZVZcihb`cb\\`kkkeX\\acb_ingfga^ipdYiwnfaXVZ[VWceXTZ[Z[\\THIOVVPPV[XUXUMLS[bebZOGECDNOFIQQONKIMYgkd[XZehdlfZgjZT^ZNHXncIFKRROOKGHTYOLOKMY\\\\PDC@GICFKF==?=:;GTWYRFEFIV_[W[`jaTYW`aXcaTTPMSYabamlaf^OMch^[^`glfb`ULU]_cfgiijkikkg`adghhd^`hlljhgiornllic^]fmjcmko|d`jnsusvz~ogt{prwj^_inhj||g`mwrhhpusrprzznep{}xlhqwupnpsdW]dh^HC@<FNPMCKSOMRMADKScmfbcegid[\\dbcokciqmabccad``kh_dpuqqmgggiptqnnrupjgfijhjkfkolllkkgdihiqwqc\\emcbhd`lq`YdlbZ`Z\\m~d^c[Sg~safj^_gaWVXepb\\_[_ni^^YYenv|x||v|z|}{zu|{tmw}{rz~~~wz{yyxy|~{}z{x{||z~|yxxxz{~}me~}|no~qtpv`yvw|zsyì¾žĽý˿º¿¿ſ]\\ZXTNJJMTYYYYYXZ]aYOJJMOQQMHNTRPQPRVXbjfcdc[OKRZ__]YRNPRRLGGHN[f`UPMHC>;>BHIB?AB>;<>BFFE@BILIHMNF?CLMJJNPRTVOFEMVY[ZYVOHJQUTRRRQSYaddca`bkqmjjjlmjd]YXWX^cefcdgf^[_ejiilmokfdccdehhktxrjghjlllljkjijhkotxusmkb]`e_]^`deWOQOLLRVTPJGOW\\Y\\bcbbb^\\Z]jqi`Y^bab\\X]ehfc`af]SNPZgf]UTYcmpje_Z]_ZV]eig`bfc[`mlicY\\ab`_imfeea`lm^Wgrie`WVZZWYcdVT^][_aXJIPUSLQ[\\WWVOLQXbf`[SHDFADRPFIPOLKIHO^hg^US[fdhjWYjeXX]TII^qdIDKQQJLKHKTRLLNISZVZKE>@HIBEGB<;=:8@KUUWLCEHK]`[Xabm`SYYge^i^PSNNW]cdjwl__WPUdc\\]aagifaYLR^acefiknoqnkgbbdgfdeccgijjgfforommmia[^emhcsuhzjbemlqssxzvil{{ssxqb\\`hjcj{s`^krjcgprqpns}yjdq~vlntusrpqpe`higb[MBLUSRQOPWSSVNDLV[emhbdghjf^acajtkaipgacdbad__jd]ftxqomhghkrxumpxvqlefijjljemolnnomeekghrxqd]dlfcghbfm^Vbj_ZaZ\\ozvc]_ZVltbfg[]c^UV]jjZY\\]joc\\ZXZeqzy|yyqtx{{~yzxxq|{xz|y|uzz{{}~yw~|vt{{|}xy~~{xuvzx~uii|lqvisudgvtyxn|Ⱥµÿ¿ʿ¿]\\[ZSKHJNTYYYYXWZ]^UMJLNPPMKKPTSPNNP[`dhfeeaXRT\\ab_XRNMRUQKGEJYedXOOPJA:<BFE@AFF?98;@EGFDBGKKJJJFEGHHGHJNQSUTLEHSXXXXUPKJRTQPQPPPW^bcba`bhnmhhkmlkd^YWWVZ_eecdghaYZbigdekokdbeedcdfiovumgfhlnmkkjikjlkmqtxsrokd`cga_acd`UQTUXWTNNSURSVZY^dc```_\\Z_mrf[V[abb]X]eklhccg^RLO[fd\\VV[dorjd__aa[X`higabec\\annha[\\ab_^gjedd`amkYWfled`UUZXW\\dbTV^ZYce[PNRTOLV`]WYTKMS[fdVUPBCF?ESNCKRNIGEHTag`VOR_dclcQ[h_XZ\\SHNdpcHCKQMELLGKPOMMLMXYUYM@:@JJCDA=;9968BMSUSGDFIRda^\\c^oaS[`ngimZNTMQ]bdhs~d_YST[aa^`caegc[UT\\cegghlqtvqjgeddgebbggefghgefjoolmnmg\\]bimdl||kkt^dhnmnorvwmhnyuruvdZZ_gfalwiZ_ika^flrqomtyqeet}qlpsrqqpsvnimlkmhNM^^WTVYYXUYXQNXbbfmhceilmf`bbcnrhaiof`ccbaa^`hb]gtunmkediouzunu{uplghjlknjeoqopsrhbinghryrfacjjhlqc`iaZbg`bd_dquqc[_]\\tudde^_`YW^fjbX[cltl\\XWV\\lz}{vxmwm~}zvzzyvwuyuy~|z||}{svx}~wvxvs}yqp|~xz~}vzz|zuv|v~t|gnzlzilupcjsrv|jʶȶúÿÿƾžʿ¾\\ZYZSKIKPVYYXVVWZ^]RKJMPQPKJMSSURLLT_deffgg_WX]bdaXRRNLRWPIGGRch`TRWTF:9@GHCAGKC::<>BEEDDHLLKKIFEGHFCBFKOQSUOEDNXYWVVPHKSWSMPQMNS]bdb__cjnmgejlnid]YWVVW\\cebafgaXW]ec`afnpg`egecbegmuuohfehnomlllkkllmoqssrqpkedhibacb_[UWZ\\_\\TLTa`UTWXY_ec]^`^\\\\cpteWQ[addZW_dprleeh^RKN[eb[WW\\fqrjdabfd[Ydlihfbcc_boofb\\[bd^^egccc`bnjWWfhbe`TU[WW^e`SW_XVdg\\VVVOJM\\g^WZSJMT\\f[OTLBFC<JTIALTLFDDIWcaVMNW_aeiZQ\\d]YXURMVgkbIDNPF>POGILNMLKQ[WUXL<8CLICC=988769ENQQPDAJL[lca`e_raU_gqlpkWSVLSdihlu{aXTX\\_bd``cace_VW^beghhjpvxslhecdijd_gjkfcdfedemplkmoj]Z_gmkhs{tism^fkplknpsoigpqmtwl]XX^fc`kr_V_fcZ\\birrnlqsi`fv{omqppomowzmioorqgX^b^^]`b`WV_[WZbigjmgegjnnhee`dppgaiqg`ccba_^bf`]juqlljdajqv}unx}tomhilmmojertnsvofejkhksxshehjlnqqa]gdacgiijknrtpe`fgltfdeff`Yakjfdgorwtd[[Y]hz~xtznrh|}vuy~~yuuvtzywy|~{~yyrv|{{tstztpwkm|vxzyv{|~zxv}}wsvufvxqxew|fllpw{|rvȳʹ»ÿǿ¼ɿ¾ZWXVQKKNSXZXWUUY[^[QJLNPQNIJOSTUPJNYadfffhg_X\\`dc\\SQQLLSWPHHKYhh_Y[[P?6<EHEFKMF:9==>BEEEGKNNLKHEFFHEABFKPTVRE>FSXXVUTMHNXUPORQLNZ_ee_[akpnjffkole_YWUUWY_fd`bgdYTY`c^^ckplcckhcaceiqvrjfeflqomlllmknnooqrprpojfflibbda]ZW_`^c_WUdoeUQVXYbgd[]_\\[]dlufUMXbchYSbaqrlhii^RMO\\e_ZYZ^iqrjfddig]]ilhlmcaefdmpia][`d`^bdabb_bqjUWfgcd_QTZVW_e_QY`TTdg^][TLIPdl^XYQLQV\\_SOQEDG>BRSHBMTJDBCN\\bYKFNW^agaRQ\\a]YVURM\\fkbHEPN>ASMEHMMKJKW\\UUXD9:GMGCB;87775;HNOPPG>IL`qgbbfbpaW`krrrjWYTJXlmopsybNTabcgha_cbcc_\\^bdeghhlvyvmhfcbgkibdlkjcaccccfopkknndW[cknkq~tmr|u`eensjipsnlggpnkttfZWY_f``ihYU\\a_WW]dmpokknf`hywmmoonmlnwzljpprqljfc`ceiibW[ecbdjljnlfghjnnidc^conhbhpe^aaba^\\bf_]lumjlgabkty|to{}romijlnonietujz|igjljintwsjhjjlrskaahgegnpmrwuqrrmjpvthjkijeanwpouwvoca`_kx}~sszoneu|uty{|{|yrrtryzwv}~z|zw~st}zzxsoqy}}sntim~~xwwwx{|}uzxmzoh~rznmylolqwpƳĽſǿþVUVROMNPUZZWVSTZ^\\XQMOQQPLIKPTTTOMV_adfffgf`[`cb_UPQMKOVXLDJTbhf`__TC88AKLHJOI;579;@EEHKLMMMMKIHHFFECEHMS]ZL@COVVUTTQMNSTLPUSNKSacba]]fmlihfhmnf]YUSRSW]bcabfg\\TV]`^]biomebijeaadgmsqmhdchprommmllmpqpnoppppoifjljaff^XX^jdbe]ZdqqbONUX[hkbY[]\\[_hksdWQYbek[Sggosmkli_TOP[d^[\\^clrrihjjmibckjhpsfafjhmnga][bfb^_b```\\briSZgecc\\QUYSWae\\Q[_PRdgdf_QHIVhk`YWSRWY^]RPKBEDCNSKEDMRIEBFT\\YLEGPX_deWNT[^\\WTVUS_fi^IHQG6@SIBGLLGEKWZSVW?8=KLFB?768866?MONPNA:LVnrdcefdraZdpttrj]XOLcqntorx^L[feeiha_ddffcbbeddhhjqyulhgebckjdcoqkc^`gfefinnlllg\\Z_fmpp}rqvwocikqrjjrskjfiomkqmb[Z\\_c]`e_VVY^[VV[bmplhijdal{}rknnlkklmvwllpoopuqhgilnlkaY^gklmomorlfgjlmmga_[bmmgahmc]a```[Zbd]_mqkkja`emw{yqszyromjkmoonigxvo|ekqmkkntwsljjimusjhfgkkmrqrz|wpswsv{}voqsopljy|~zrtpmielx~{~rr{qhimuswxyzzzwqpsryyw}s|~~~sx}xvzzu{yvywqjn{{{~roqhp~~~}zvuvxzy{~|uyyonnus~rwrn{yx~~öʿƿÿļÿÿUWVQJKRTWYXVSPU^a[TPOSUSOIHMRUTTNR^bbdfggffa^cc_ZTROHKW^UEDP]eedb_WI<:?HQPJLL?568;=CGJNNMMNNMJHIHDEEFHJS]`TDCPWUTTTRNOTRKMTSKIQ\\cb^[]djkhgghlnh\\VUONORY^abaeg`UUZ]\\\\`hpldbiohbabfkpsmjebdkrrommonnosspnmoopolfhmnkfjf[VXdlebc\\`nsl]MKQV]jnaXY[Z[`ikobXUZbfn]RkoosnmmjaXQQ\\c^]`bgnrqjlpnppffllirui`fomoleb^\\che_^`]]^[_ohT[fbccYQVWRXceZPY[NRcgfjaPDH[llbZUUVXX][POGBECLWNDDGPRHCAKZ[OCBJRX^eaQOVZ[ZTUYSR]ffWIJM>5FPC@HKJEDMXWQXU77AMHB@;528<46CPMLRL<=Tg{jagfhjtb_ktutrlaUKUorptkvx[Ufhhkleaeggljgfdfdcjjluukdeedaknhcmtka\\\\djihimnmlmi^\\_ckor}zqxumjlkptljlrnggdknkknf`Z\\_`a[`c\\VSUYVRT[bllfdfgbfqxwomomjiilouulnqolovpjlosqkliddmrmpqoqrkdgmnmme^\\Z_jlf`eh`]____WWbc[apnike\\aip{qmx{vrpnllnpqnlkywrygpqmmlpvwtnkiltwqlmjkooquwy}{wrwzu{}~|xuvwxvwzsuwpsqmq{z~~|qq}re}hirpwwxwwwunmqrxyx{o{}~}ptxtu~uz~xqrtnei|~|wy}pomgt}|}{wrpswxv|x}{vrxqs||y}sq{|y}{ŶĻƾþ¿·ÿWXVNJNUYYYUSRU\\_]XTUVVVTNJKNSUSSRX`bcfhhhgb_adcZUSSNHO\\]MCKZbcddcXIA=AHSVNKOG735;BGLQPMJJMPONLKGEDDFHJR_cTEBMXWRRSSPNPRPNUUKGMZ`_][Ybhkihghjnj_UQRLLQV]__`cgaWRW[ZZ^fnqe_gqnc`adjnpoigc`gotqnlmpqrrrtojkpqpmhfjpqomkdZW]iid^]]dooh]MIOU]ioaXWXXZ\\hnj`ZX\\cgp_Qisqsonnje[RT_ca_acgnrpnprossgfmolrvl_dtuslda^^dhhc^^\\[[Y^niY_d`caWRTUTZcaUMVWKRbcclfOAI_njb[UWZZW[ZRMCDGDRUE@ELTPC?ESYQE@DLSXae\\NMTYZXSTXRR`ldRJKE79JKACIKICDOWRQXO27ELEB>831;>38JSKJSG8D[q~a_jhjqtbemuurrn`POewrrrk}v^dlilpocbmkjwrifegeejlntnegfbbiplilrn`Y\\dkieilmnnlea_adfmpwvt{rjmolqvkllngceelmlliea^_`_`[aa[TPQVSORZbifabb_`jstollkhgfglputrpnllqtnlorxshoqgfssmtqmopibgpnkkc\\[Y]ii`]de\\[_]^[RUcbZcokgj_\\fkq||lmy{vrqollnppqrrzxxuktomonrwxvokjrzuoqokppqxz~}xww~~x|~|~vt}~|~}wv}zovxrq{x}|qp}te{ijupsuwvtrqn{gkrxwxym{}~x{~qr{uw{y}y|}vjnrk`g{~uy~lolnz|yz{xpkntqtuu{xyzr|tu{~uy~~||zw~{y}ǹÿȾ÷½»WURLOUXYXWQQ[a^\\ZZYZ[ZTPMKMPTUSTZ^_`bgkkie``cd]USSRMMW_WGJY^ab`caTIECFRXTMORC415?INTUNHJORSRPNJECDFGIR_dZG@HW\\RLNPQQQQQOSVMGLW^^^YW[fkkjigjnj_VPMMLOV]^__acbYSUYZY[bkpjbgqoe```flppkddcajttplnpruvvtpkhkptohbelrromke\\Zcke_Y[`enmfZKJPV[ek`WUTXXYhpd`[[`fkraSivtrnnnlh]TYbebabdhnrqqrsrtqfgnsqswoaarzukcb_]dkmh`^][ZY^ml]_c_a_VRUTT\\a[PLVSHTb`_niOBObljb\\V\\`[X[ZSJ@EIIVN>DHMVM=>KUSG>?GMQWcfYMLPY\\VRWXSXfn`OMLA4<MI@EIFCAFORPTWI7<JIBA:534??2=PULLTF<Obv|]cmimrrbglsupto\\QZkxqsrpvgkljotpcdtqr|qfbgiiijnpqjfkfbgpnlpplc[]fmmddjnoolh^`dcdjntzswvpmopnssomjieacellnlfefdcb^^]a_WQMOTQNPXbgcaa^[bmqnljigdbafmprsqplknrqmopryuitudjvmoummpog`hpjgg`[[Y]he\\\\c`WZ^][VNUc`Ydlcdh]]jns{vkoxyvusnjmrqnq|yx|~~srvmlonsxzwokovypmsqlonu{yzvw~|}~|qr|z{~yrxzwwx~~rrtgzljusstttqomn}xdgqvv}un|vz}tz~}ur~{uv~yu|w}}uhkrogl}~~v|ks~nuwr{|xnilrmszqtyv{ysvy|tvxy~{~|zwuz~v}{̿¾øĿ¾VSONTY[ZWROT`cZXX\\^_`\\SNLLPSUSRX_a_`chlmgaacc^VSRSSNQ]]UNU\\]___a_UNLIPZWQPVO<23<HPSSPIKSUSRRPMGBCFFGN]fZIDIV]ULJOOOQSSRTTOJLU]_^XVZahkjkhinl`SMJIHLU]`_\\[^_ZRRXZWX]elickvse_`^`gmqmfbcbfsxtnkouxyzxrlhgjsvnd`gptrnkid^^ei_YU]cdkh`SJLTW\\di_XTRVXYhqc_]]cjqteWiwvpllnokbZ_eecadfinqrtvutupfhpvrrwqd`qzwlfc_^gmpme`]\\\\Z^ml]]a__^WQVUT^aYOLSOHVb\\]ojNER_iid\\U^b[ZZ[SD=HLP\\I=LOMSK=DQTI<8@IOQVbcSIJMX\\SPWWV\\giXMNM?2@NFBDEB>@FLMOTPB@EMGA?715:B>4CSTLMQDCYhyy\\eplospdglttptlZXbnvpvtr}khilrupelzsxzkbbjlkkkqppjjjfhkmmoqle_]eoph`clrrle`^fgcelo|rqxqoopvqtuqljefebfllomdfkcee\\^^b]UNKMTRMOX`ca^^\\\\gnmkihfb`^`goqssqljnrronsoqzvnzwgnujswjlqpd`kogdd^[ZW\\gbXZ]XRY][VPKTa_[de]eiZ^lpwxolpvwvvsnhmwtlpyxx|uklposxzvmmtztllprqqowzzwv{}|{||tw{{}|y{yz}yuwrgzrnruvutrpllp}ubdqut}ut{qy{vzzwp{{wx}zpzv|~}}ufittoqz}xkx|rtmyvjgkrkpytqruuzlqyu~syz~}~}z|wurvrz~xwz~¶UQPTY[Z[VNR^d_VWZ`cbb[SMKNQUVTSZ_`__djnia]ae`WVUUUURW][WVZ]]^^]`_WQNQY\\URWWH728GSXTNIKSXWSTSPHBACGGLZe]IBJT`\\MHNPOPSTVWWQKMU]`^ZTV^fjkighjmbTKIGDHQ[``[X\\_[QPUXVV[cggcgvxg\\^`^bimnleb``l{wpnmqy}|vlhginwvjbairwuniffbaegYPQ_cdieYKGOWX^fk_ZUQTXXhqe_\\]hqwwg[jwvnikprogafhfbcghinqquvvwvofirvrsvpfbp|ymgd`bioqqib^[[Y^ml__aaa^WQTVY__XOLPKJX^Z\\lfOKS\\hif]S\\`[[\\]SA>NUY]GBWTMPHAKVQA58CKORXc^KGKMX\\SOUZ[_fcQGKK<3EPDAFE?>@FJJNTK@JNNDA?3/8@@<:ITUMOOHM^iwu_golpvpcglssopi[[enssyrrfcioutnhv~pxyh_fokkkmtpplkjhkmmormd`]`krla`kqrrg]\\cigcels}mpupoovxrvynjhdghhinnnkdllbhj_]beWNPKMUTMQW\\a_]ZV^imggheb_]\\`hoopplijprnlqumo{xq{vjrpjwthlql__mmccc]\\\\WY`^ZXVROW]XSMJTa_]d_[ifYcoqvrlpquvtvungpvqnrxu~~qikqprw{unry|rlnnstrszyz}tx}{xz|y{|z|{{z{y~yysiy~wurw{wtsrnmtwbaqvs|}zy{o|}txx~wo|}{|}~{mpw{}uegvwrsy||j}ztozvgblrhlpkkorsy|sesxsv|||}zxx~wtpqss~z}t~xw|Ÿÿ½SQRV[[YXTT^gf[X\\_cfec[RNNRRTUVZ_```aflkf_]abYSUWXVUW]_ZXZ^_]\\]]^^[XXZ^\\VYYO@57CRYVPJLSWTRQSSMA<@FKP[gcOAGV]]QFIQSSUVWWWUMIPZ^_[VVYafjjgchkdULIEDIT[^\\ZUV__UOSVUVZbeeadqxj[X]__eklmjgb`guzqllnt}woiffmtvre`dlsywmhdfdaffVLUbeei`TKKUYW_hk^[UQTXVfrgZW_kuzyi_nwwlgjqtqidjkgbeihjpqpuvvxvmfirvrsupgcp}znhdbfknpsnf`[[Y`lld__cc]WRSW\\a^WOLNHLY]Y\\kbNOSZfhe]S\\`\\]^^R@CY^YWIN]TLOHFQWM=7;ELORY`VEFJLY\\QOVZ\\^aYHCKI99JMBBEB<=@EFIMRMGPQKCB:,1=D>;?NYVMPQQVcjtsbhokpvn`dlrplkg^\\ejqx{nvx_`lrurlk|}o{ygblrklnruormkjjlmnpng^]`fqob]hppnj`Z`giebep|tknqnnqyvrxxjifdggijnrnfhqhdoj]akcOMPLMWUMRV[]_`US`khagg`\\YZ\\`hmmnmjgjqojmsrin|wtsjqmlvnemoi]`liacc]\\^XTZ][TQON[^YSKJTbb_aY\\jaYgpstjirpsurvvngrwrrvy}zxpmiosrw{untzzsqqlturw}}{sy~{y~||z}z||{z{{|tkz{zvx~|tssstx|y{c^tyvx~}xn~tyx~yq}~~}|ql|{}vikzy}zlup{wc]ttejmfhnorx{vhezvtw}yz~|{~w{xut~}{soo{pu}}|qw{s}|y¾¿ÿ¾}}RQTX[[WTV^gg_WYaefhfbZSPPQTTRV]ab`_cilgb]_d]RPTWXVU[a^ZZ]^^\\\\^]]^\\Z]aa]ZYPD:8APYYRLKTZXRQQSM@8<GLR[deVDCO[`VHFNTUWWXXWVPKLU]_ZUUX_bdhhbbkdUIGECJW^_ZVVUX\\XQRTUVY^bbbblvm]VY]]_fjmnjfbfryvkhjp{xoklffnyvi^_dmuyulgffdcfdTS^feff\\QPT][W_hg^[VPUWUfuiRVbqx{yjcpwvkfjpushglkgcfjjnqonqtvxtmfitxqrtnhdp}yojdbinmotqg`]][akmg``dc^YQQY`b_XOKLIMWZX]j\\LQSXfhe\\R]a\\]^]N=Hb^PPQ]`PKONLTXH:9AIMOU[^NCHIP]]PNUYY[\\OCBIH>ENB?DGA:;AFGHMOQSNLHB@6+2BD=<BRZVNPZV\\gjrqfkmlsuiaelqmiig`^ejpzwk|r_eoswrln|{ruffpnknutppsljjkllkke^\\aglpf\\doolh`YZ`hiebgw}ljikilqyusxtiheeggljmsnflpjksb\\ko]OTQLNWTMRUZZ_^RUal_]fd[VVZ\\`ijlomgemojkpqoin|wyojnlosjeloh^`heacb^ccUNX`[PNLP_^XRJKTed`^T]i\\\\koqpfitoruquvngrwttxyy~qvselux{zuntyzvvrktxtx}zsy}}{|{|{zz{}}{}|}tn{||xytswz}{~z{{b_v~|v~vn}t|~{s~~~|tn||vqvzrxq{v_awdjkeglmqywobnrxvu{t~zuy}ys{zsou|tmnyvn{~{~}uv{pxv}~y|¸¿ſ~|{}QSVZ\\\\VTYfmfXQZdijie`YTRPRWXZ^acca`fllg`\\_aVMOUXWWX__[[^`^\\\\]^^^^]\\aec^ZTJB=<ER[ULJR\\]WSTTOD9:FQV^feXGDLX]YKENUW[[YWWWSLLR]b]VUX[bdcea]dgZICCCJW]\\YWTRV\\YSPSSRV\\``_`gqo_VVZ]]agkpmjcdmwunhflwrkllhjrztd]`fpz{qhfhgdefbVX^fede]QTY`\\Y_he]ZVPUWVgwkUXgu{|ymgrwsiehpxvihmlgegjmppnmnruvtmfjvyrrsnifp{yqlfdkqmmtqica_[cnqjdcfe`[RP\\gf`ZPJKKPUVX]hYKTSWegcZS[][]_\\L@Qf[LMVjeKFPSRXVC:>FLLNU\\ZJDFFP^\\NMUVUWTJBCIGCKM=?FC<8>DEFHMTXVMIE@;2-8FB>>GWZWPR^]`hmrqghklssgcelpjfheabgmrzqkmckoswqko{yusghoomsyslrtkkkklmhd`\\_hllibclojgc_Z\\biic`i}zyvgkegckqwrsuoigcghhljnrnkpporn`gpj\\TYPKPYTMRRV\\_WPU`f\\[caVRV\\]bhghjf`elidjopkep{x|~jgjkqneelng]aeb`b`cmeOJWaYOLJR`]YPIMVgg`\\R_hY`mmnmfjvptupuumgqvuuzx|zu|sblz{{ztqsvxy{tku}yw{|vsy}}{zyyz{y}{|}||~up{}~~yvry||z{}hdvwsnt{|w}~ws{zy|r{tenvckldhklsyuof{|onvywyy{~pw{vu{~umr}wmmwlt{w|}{xnvtyxƾþ~{zz|QSX\\]\\WYbpobQM[fllhd^ZVTQUZ[^`cdddgjmke`^\\XRMQYYY\\__XV_ba^Z[]__^_^^cf`YVNFB>?IV\\PIMZb[UTVSG;;EQYafg[ICLW][PIMVZ^`ZVVWSMMT\\caXRSX\\ceb][af\\QD?AHU^[UWVQQY\\VRQSQQW\\^\\\\cmqdUVYXY]dkqqgedisupjijrvolnihpyzna`bfr~|ndehgeffaZZ^hebd_UW]`\\[`gb^ZWSVWWixmXYht{|{okuyqjfhqyvjlolighkpsqmkmprusmhjvyrrrokhqyxqlefmqmlsqkgfa]dorlfgigc^RP]kkb[QJKMRQPW^fXMVSVcecYSYZ[_`ZMFVi]KK\\sdEERWT[VC>GJLMNV[UHEFIT^XMMRSTTMBBHHEIME8@D>88BGFDGMUXQGEC?8-3BHA?AKX[XST_acjotqfgimrlcdelledecbehltwmo~mikntumio{vvsihnoow{qmvtkmmjoj__a_emifghkmmjc__]^dkd_cp{qzofiddblqsponjgeafhhnknrllprqrhcnpcWY\\LMRYUMPQV^]QOT^c[[`ZQPX]^begic]\\fgdchomedsxx}zdcglrkefkme]_b`_aanv`GFWbXPOLW`]ZQLQWij`XPafXaljkldivqttoutjfpuuv{vxr{qbp|wtvurv{vmwyvvutz~}~yxyzzyz||||~}~vs{~y~xqy~|zz}nkx{uow~}|~xx{~v}mushoicikkv~wpurrumvyty{~{{nvz~~syyykp~|}rmu}so{vw~~~vwtvzſþ¼ÿ½~~|zyyzPTZ^_[X`lpeWPXflmkgb^ZXWVZ]\\^bdedgmolgb__ZSOQV[]\\^`\\V[cd`\\\\^___`aaade]SMHDA>CQ]XKLVbaVQSTK<9DSY]ehaPCGTZXTMNY_`a\\UTWYUQS[``YPOUZ]ab\\W^gbPD=>FT^]VQUTMP[[TRQQPSX[ZY_inhXRWXTT_kssjabgmqqmikr|pnoniiu|ugccdft~yjbefgefdaZZ_jd`b`\\\\_aZZbgd^WWWYWVhxnYZgt{z{qmwypjikryvmnpolhfjsvpiimoqtsnjlvysrrmkksywrjcdmsnkqrmigb_dnrlgilid^TQ]kmc[RLLOQNLU^dXOXTWabaYQTX[__[LJ]l]HNaraCFU[X^ZGBKMMOSXXRGCFQ][PLORSSSK>@JHDKK=5?A:6;GG@>FPTRJB?>:53@LHBCGR[Z\\VVccbjpuqefinqhadejgcdaafhfjuskq{yolkpurhfnxtw}phjopqw{royrmpqokbX_ddkkafqnkkkfb__^_gk_]lwrm|hgea`cmqonlifdaadegnlmonlpuqkejtm[R`[MQUXTMSUZaVJOS]a[[[UNP\\_]`cgk`V]fc^ajojbhrr{~t`afmqifhkkc]]___aewxXCFXc\\XSNZa^\\ROSWlobUObdYbjiijchvrtsnvrggovvs|utn|pbszstyupt}xnyxuysvtz}}~xxz{xvx~{~|}z~~~|zv}}x|{ry~xx|ur{vr~~yz{t~p}npvg_jlj|wn}lyonvxu|~~y{zymux}sy|lmw|ztywmywr}x}wwuÿÿÿƿ¿~}{ywwy}OU]a_\\^jpk]SWdilliea_\\ZZ[_`]afgegnqogb``^YSQUZ]`_^\\W[eda_\\\\^```aaabdcZNGEDA@K\\aRJUac[RQPJ?:CNUY^dcVIGNSRPMOYcc_[TRSVXXVZ^]WQMOW]]\\[YZbcTD<=EQ\\^VRTUNIS_ZQOMNQTWYY]flgZRUVRQYhstkb`eikklkjr|vpppnjpzzmccbdgvwfbeeeed_[ZVaje_a``aabYXblg\\SV]\\VThxpZYeu|z{soyynkjlrwvoprqnhekuumghnnpsrnlmw{utqllmsxwsjbdmqnmrrokhebenrlilnke_VS[loc[TONOSMIT]cYQZZY^_^VMOVZ\\_ZLNemSEUdp_CHU]_b[KIPNMSY\\XPGCIU\\UKINQSTOC=DLIGKD79C>45?GD;>HPRPG>;957?LQGEKQY\\^b[Zheakrvoefjmneadeheca]adefmupjpxxslkquqfdnusw{jelqrrwxtuzqoutmbYXdgfkcatxlilkdcb`^agh_brthkwhebZ]emnjkke`_^cdagnlknnjnunegtvfWVeURWVVQOZZ^bNEPS]_[YXSMO_a\\^cjhWR^c`\\`ilfblqq|{n_`gnlggjljb\\\\__`glxuYIKXhh^SO\\a_\\QRTWpucQPdc[bfhhh`hwqrpmwobfosrp|uon}neyytvzuoszpxyvuqtry{}|wxz{ytu|{||~z~}}x}~yz}uyxxwz}}yx}|}~{tyjw~f^jlmqrvo}zmowx{zwyy|wlrwyty~nls~~{vvvyszy{rĽ¾½ÿÿǿ½ƾ¿¿~}zwwwx{QY_b__grof[Zckjihfcba^]]`cdcfkljlppkc_``\\WVX]__a_ZVXajd^^\\\\^`bbbaacc\\PGFFDAFVaZKO`d\\TROIB=CMTW[_aZJCKRPMNLRag_WRPQSUXYUUZYQLOV\\^]WUX`^TC<=DOY[UPSWQJQ\\]TMKJMQUWY\\dkh[PRVQNWittj`^agighhjq{xqqqpliu|se`bbbgvtdbcdee`WTXV`geaabbbabYYdle[QW`]TUjunYWdu|xytr|xlkkmqusprsrpgdluslgjnpqsroonw}xtpkmnruurjbdjmmorrokhebfnrlimplfa\\V[lqg_WSSQTOIT]aYS^^Y\\]\\THIU[Y_YMQhkJF`hn]EKV\\aeZOQUOMTXZUNGFNXXOHINQTWK9=NNFFG>6<D<47?D?9?JQQOH;866=ISPEHQY[[di_]iebkruneeimldadcgcb_Y]bdhpsliovzvlkquobclsswxidmtsruvz~zpqwpdZWbkgff]h~wijmjeddb`cieekqm`iqda\\U\\fljgjg`\\Y\\c__jlkjmjgosiclvnbY`aMXZWUOU`\\a`LHPR\\_ZXWRLPcbX]fk^MP_b\\Y^ehbeqrv{ti`bikffilida][_^bnqsq_QN]rm]UT\\aaZQTVXrxcOQea\\`dhfd^jtnnonuk_gmoon{v{no}omxwzwtps{qxzxsqtsx|y}{uvxyxsyyz{}x}}}~x~~yw~|}~uw|u{|~~|~ztf}d_kmupu~wt|{mv{~}t|{u{|vwwyxmqxxx~|{rqv{~xw|w{qĿ¿ſ½ƾ»~~~~~}{xwvvw{U^bccflpld]gnmifcccdda__dhfejppnonlf`^a`\\XXZ]^^_\\YV\\dd`_][[_bdcaaa`^QDEHHHEOa_QL[gbWSOIBBFLQUY_d]OFINMNNOOYfeZOOOPRTXVQRUSNOU]_^YVY^`UC:;AMXZTPPRQLMX]UJIIJORUX[bjl_RNRQPZlwvl_Z`dgiiiioz~yqmppnilxylabdbbgu{naabbbb[SUXY_decababcaY]gkcXQY`_W\\jpi[[et|vwtt}vjkkmptroqrqofdktslijnqrtroonw{unjmnrtsphcdgknppqoliecgmojhlomfdc\\]kqjc[XWVXPIS[_YWcaWY[[RFGTYV\\XMUeeKPhim\\JQW[adZUZZNLQTWSLGKWZRHFKOQTVH:HTKAAC=:@D:49@EA:@JNQRJ:878APTNEMRY\\]jm`_gcckqtlcdhljcbdfiba\\WZafjnmjinw|vklruk^bmqrwvifouqotv~wotti`][ildfd`s~tkkljhhdb`ckggkmg\\jpb]VU^egdegb[YVZb\\^mihikecmnegttja^f\\Na[ZSO^f\\b_LKPQ[^ZXROMSibYckcRKVb]UW`jg_ersuwqeachgcikjeca]Z]afqmqqeXWerk[[[Y`e\\PXXZtwaPUe`[_cgc__kpilnkpg^gklmlxt|wmp|}pqwvzurrt~|sx{z~qpqquyw{xtuvwwt}wxw}{~s}~}|}~z{}}zu~~}}}|stxz{|}~|{|{~~||qfa_lr{qu{zw{r{yvv|}~}xrxzvvwy{oqy{}|~~|uv{}y}~xz¼þ¾þĽÿ}{{{{{{zxxwuuwz}Y`cehkmnkdfmokgdba`cedcefjihnrromhec_`ca]ZYY[\\[[XXYac\\]`][Z_efda`a_WH@CIJJLYaWQXfd]WPGCCFMORVZabVLJNLHLNOXcf]RLNOPPRUQOSSPMR[^[ZUZa_UG:<AJVZVNNPMJKQYWLEFJMQSVZ`hldUNNNP]ozui`[]cddfikmv}}yrmoomiir|uf_beabguzl^aa`_^UTXZ]bfgebaadd^Y_hj`RQ[b`Zajmg\\^erzvtsu|tjjkmprpoqqqmfdktsliknqstrqomw~vmjmorssohcehlpqonomiedhmmihlomgeheclqkda_[X[RJRY]ZZgdVWXYQCFTXTZVOXd`OWhgj]PTW[bb[`aZNMQSWUMJSYUKEGLOPUTICQUF?DIB<FE:7@GJB@DIMQUK888:EVVPKPP\\bbooa`gcelqukcdhkgbbhkj_]WUZ`iljijimy~rkntugZamprwvifqwomsxuourcacdmi`ebd|qmlkjjjha_fokfggb_jmaYRT]bb`cf_VXUZb\\digfhjdbihcmtphabiT\\i\\ZQSdl^d]LLPQY[[WOOOZkb^hhYKR]e[OYiof]esttsncbdgd`kniaa`]Z\\corkorkbbjsj]c]V^h[P\\\\_wt\\R[f^[]bga[_llemjdme]hjjjkvtwtlq|{qs}wvzusrs}|tv}||{poootwuz~vsuuuwuyu|wtzy~mz~|{|~}}x}||s{~{y|rsuzz~|ytzz~}~{tmh^^nwsy}||~vzvx|{{x{~~y|ptwvvx{}pq||z{{}~~xz|~}»¿ľſÿ~|zyyzyyyxwvstwy|cffiknpnijqmjifccccdeddfhjhjqsrnhcaaccca][ZYYYWXXZ]a^Y\\_\\Z\\aefdaa`]SE>DJJMU`_TS`b]WRMEDIJNQSVY]YPMNLIILNQ]e_TMLMOOPSRNPRQQTY[ZYV[_`SF;<BKTXUNLONJHNTTNFEHNORSW]ejhWLKLMWmyuf\\Y[bcccehiqz}{zslmqniemz|n`^aeccftxh__^]^[SVZ[^bijgb^bhb[Zbhh^PS[b`]ckld\\^erxvssuzqijjlnqonooomgchrsljknrssssqmvvljmorssoicejnsrmlmliefikkiilomgfljflqkfea[Z]UKS[]]`jcUSWYOAESVSWUQYb^Q[hdf]STV\\b_[eg\\SMOSZYQT\\\\RFHLPRQUVMHQWJ=BKHGME7<FJKDBFHMTUG6799I[ZRTRRafdrm[agdglqsjegijgbanui[WTV\\cmlfglhjwtknvtfY^jpruvkgovootw~yosrdbfine^fciqnmlklmg]`kqjfeb`ajf_UPSY_a_bf^TWUZ`]ggefhjaafcerlkhacjUdg\\ZQXjo`dYLNOPZ][UPSSakdeibSIUbeWN\\kpf\\dtusrnaacfcamng`ba]Y\\erphnrnlhjsl`e^V_i[Ra_cyqYVaf^ZZ`f_X_liflc`kd^fihikt~rtrkq|{pqyywyutqs}{tsz|{|xpnnnruuyzurttuvvvtyvrxx}~iz~{||z~|}w~|{|rx~zu{zqqt{y|}wpwy~|}~}ysok}^`mws}~zv~}yy{}xywz~znrwxwz}~~qr}zvwy}|{{}{~þþÿÿ~|zxwxxxxwvusstwzfghjmnonlormihfddefgffghjkklqtpjcabdedb`^\\[ZYXVY^^`]XY\\^[[adfecbc_XLDAFJKS^`ZV\\__ZULDCILNPTVX[[TMLKHHLNPWbcVLKLLMNOPONOOPQX[XTTY`^TD9;BJRVSLJKLLJIOQMIHHKOPRUZahg]NIJJPdutf[XZ_cccfefkv{zyvnlnojhgr{vh_^cddegrsd]]\\[[YUX[[\\clnh_\\bkbZ\\cfe^VU[abafkja\\`grvtsstwmgijknpmllknlfbhqskijmssrrsqmvujimorsroidfjpvslllkighkjiijmpmfimigmojhg`]_aZQV^__elcTOUZN@GSTQUTSZ`\\Wbg_a_USV]a\\[gf]TMNU]\\Y\\`]ODJRUUTWWRQVXJAMPJPPD;CKKJFDFKSZUE<;9?S]YTTSYihjwf[dhghlrsiehiigaavv`VTRV^ksiagmfi{rkqyp_V_jorupkmpqorvw~yooldfkkkdagfo|qnnnmmmb_goqjfeb_cha[TNQT[`^^a\\SSV[]]afdfjh]^`_iqijj`ckcgd^ZS^tqbcWPOOQ\\_XQTWUelehi]OL]hbQSdmld]guwsql`__ddcmneafb^Z^gokhpqrnfisncg_Zbg[VgcgxkXXdg\\XZ`g^V_jhff^bi_\\efehjr}{qrpjp{zmmswuywtps|zrov{yyvommmrtsvwsrssuwwvsw}uqvw{~i{~y|yv}{}|v~xxzpv}}{xtuwsqrz}xz}{tpuw{{|{}~}zuts{adlt~v}~}}yyzyyxz{yyy{zmqx{y{~|~qtwtwx|zxx}~º¼¿ƿýľĿû¿}|~|ywvwwwvvussrtvy}gijlnnpmkrrhcddeefhhhhhjmmlnssld`acded`^\\\\[YVY\\]c_[ZVZ\\\\Z\\eigdbde]QFACIKMXb_WY_^\\XSE?DKNOQUXY[YQJGDEMTUTX`]NEHLLKMOOMNOPQSYYTRV^aUH<9?HRWSKIJJJJKNOLIHJLLNOS[bfd]QHIHJ[qseZWX[acb`cdgpwxvsnjlnkhjmvyma^`cddeionc[[[ZZXXXZ[bkpnf[[ckaZ_bec^[WZabchkg_^biqutrpqrlghijmnijhiljeahrrkihmtrpruqkvshinorrppkefjrxunmjiijmmkhhknplgmojjmmjjgb`bb^ZZ_`aekcSNUZL@IRRQTTTY^Z[fdY^aYTW_aZ\\gg_ULNY^^]]c`MEOWXXXYYYWYYMITWV[TKFKONMIGHO[\\PGFC;E[aZUXWcoktve`eghhlsqgehiig_f{nXSSQVerocakmdj}pnwym\\V`jnqsojnpnntvx~ynmhcjpmhaciirzqnopopo_bnqojhgb`ef]XPMOT]_XX]XRSX[ZX]ccfk`X]^alpjki`emigd^ZUgzqecZWPQU]_VOYXWhkfkhYNUjjXN\\lnib^kwyrpk^][befoncbjd_[ajmhgrqwoehtpfja_fg]^jdmvgWZjiZVX`g\\T_hge`\\bfZZccbfjpxxpomip{zjho{spxxtot{{yrltzwurolklqsrsrqrqqxzyv}roysosuxy~i||v|wr||y|{u~ttxns{{yvrptuqouwx}w|pnruvy|wzz}{zvy}yeijr}{||vwzuwyxy~yyy|{{|zotz|||~{~st~u~rtw|zyut{ľ¾ſ¿¿½žÿü½|{}~zywvvuuttssroqtvzjkmopmijrwqf^_beegiiiiknonopqoib`bddcb_][[YVSYabf`UVY[Z\\^bikfcceeXG@CHOPS\\a^\\a^\\YSJDHMMMNRVXZYTLFDGPWWUWY]WLEILJJNQQNMNPRTVSPS]bWE=;?FOXVKFIJJHHKPOIGHLLKMOUage\\RJFFIThsgYVXZ]aa_^_bjsttpmjjllhfjoywh__cdccgkli`ZYYYYZZZZ`lpoj_V[ci_\\bac`^ZWZbdfije]^djoutrkmmighhfllgffhlic`irpkggovrmrtokvqhjmoqpprnfglszupnkihlqokghknplimolkkkjlhdfifbb`ab`cidTOUYNDJSSRSTWZ\\Y[f`S]e[TZa`Z^fhbVKR^a`__daMFU^\\YYY[^]\\ZOPV[faURPRRPTPGIUb[MNNKEO`d_X[alpluuebfkjhntoggijje^n|fRQSQXlrfbglian|ot{sgZ\\ejmopljmomqvwz~|olliorid`gjku}yrnqsqqo_gvsnkkjabkdZVMJPU_[SU[VVW[WQR\\acheZUZ\\blojkf^gnhhd^X\\s{oe`\\ZSVX_aVT\\WZiigmgWTaniPTiupfaamvyvoh\\\\]glhllefmfb^djljnspxqegsmjjadhd_bihrsdW^pjYTWag[R`hfc]Z`aVYa__ejovvnmjemzzhdjwqoyyqnvzvwqkuzuqpomnqssqqropqnu||v{uissoqquv||fz{xq|un}z~y|{u|rrxlpwvvupmqvoiov|u~zxsvlnpq}}sx|txv|}{}|x}yqkfx~~{zps|ywz|}}}|zx{}~zt|{~}~}~tw~}x~t|}ppvywwupv{½¿¿ſ¿ĺ~{z|~~zxwuutssrrrroprtyjlprrjcn|ync]_beghkkkkmnpooqplfb`bccaa_\\Z[ZWV]de_[WW\\\\[^cfjlebee^O@AILRWX]_^_a][XPGFKMLLPTWZZTJDCHR[ZSRV^YLFHIIHINQPMKMPRUVTSYa\\G<;>EMSRIEIKIHHHLNLIGIKJJPT^fg^SLHGGPanj\\UV[^___\\\\_fnsrpljijkhdelqyse^adedehlkg]VWWWX]\\Z^gllkfZV\\ch_\\`_`_\\ZY]bfgihb[_ciottriikhgggfmjcbehkg`^kqpkggpxqkqtnlynhjnooopsqklpvyuqpjiknrrmhhjnplimnmllkkmigklhfgdee`aifUNUYOFLUUSSUXZZY\\d[O]g[V]b^Z^fibUMW_`bb`fbLJ]a[[\\Y[a`^[PX^`mbZ[XWWUYTJO]b[UVUQLVbc`Y_jtplxvgchnlhnslefjjjd_ry^LOSR]opdckleatzpxynbV]hlnnomkmomqvwz~~okklqpgd`ejnx{wrmqvqqoamzvnmpkcgmbYULHPU\\SQV[WZ[ZTIO\\_cg]TRX\\bjnjjd`injjc\\\\iyzne_`\\VZZadZ[^Y`khhmfY^fjcPcvwoiedkv~yof[^dqrfhkghoidafjkmrsnwqdhrnjibegdadilqmbW`rjYSVahYSbfecXW^[TY]YZcjnrslkf_gwzhajx{oq}xplvxsuokvztonoorvwpnrrmoplr}txxissnmlstx|dwy}vo{tl}z|y|zt{qrwjntstsplkqngi}|v~zs~w~tsqkmmo{xpwyoxzsy~~{}{{}{{yji{z{~nruz|}~|~{vzy{z~~v~~~~{s{|uz}omvwwttnrxý½¼þÿ½þþ¿¿ù}{zyz}~zxvtssrqrrrpnortxhnuungkywkb]adgijmmmlnoonnooida`a`acb\\XZ^\\XZche[XZ[[\\]afikkgfgaUIBFNOR[^]]]]^[YULGIMMLOSUYYUI>@JV^]UPQY^REEHJEEHMONLJKPSUWY[`\\M<:<AGOQKEHMKHHJLLKKKJIIIKV\\ff`ULIIHO_ki_VUW[``][Z[ajqqnmhfeggdbhqvxod`cdddeglid\\TUUV[a\\Zchhhgd[V[cf^[]]_^ZXZ_bfhhfaYbhhottpfgjifeijmha_chid\\_mspjggrzqjorno|{khkmlmmntupqruwttqjjlpttpihknpmimnnmmnnmhinllmjehibbjiXOUYPHOWWVTUY[[Y]bXO\\f]Y_a^]`gjbVT[]\\ce_gbLTe_Y]]W\\da`\\U\\dhmgab^Y[\\[TLUba\\\\^]ZT[aca_eqxno~vfejokhnqjdeikkbg|rSKSTS`noccllbezxszvjaYaklmmnmmopqtuw|nijlsrgd`dkszxuqlqvrolgu~vpptnglnaWTIGPWYMMW\\\\[ZWRGO[_caXRQW[ajmjhccillja[bt}wnccga\\^\\cc^__`gjfime]ing[\\s}snoidlwoh\\`gsseglijqkechhimqqlwpdfookhbfgedgjlniaWbujYUW`gYUdddbUU\\XTZZRTaklnqmjb[dt{j`mzxlr|umluwqroluwromotw{yomsrloqlr}xuyirqljjrssgtv|qlyqk}xyzzyuzqqxilrrqstlhmked{~zzwxs~~u}nt|ljlknz~tnusjzsp~zw~}}z}{~{pv{{}~}r{r||{~y|u}x}~}}~~~{~|~xow~~|{zznjuxvqsnnv½·ĿüĿþþĿ¹}~~{yxxx{zxussrpprrrommqsv~krwrgfurha^afklmnmlmppnlnplfa__^_ac`YSY`^Y\\fjd_]\\ZZ\\`ehjllkhcWLIHKPQT]_^]ZY\\\\VQJHLMKLTWYZSG=<FXcbYPNV[XKCEHFCDHNPNLILQTVY[]ZM?8;?ELOMIILLIHIMMIILLIIGHQ_diaVKHHHMZijbVSUY[^^[XY\\cloljiecccbbeltxticcdccbeijgc\\STSY__[\\cggfeaXT[ec\\Y[\\]\\WWZ_begffaW\\efqwuneejlfahomf_]bigaZ_msnhgitxojnpos}vkijkjjjltyvttuutsrlkmptxrjhjnpliorpoopokgltqmolgknebkk]RTXSMSZYWTWZ[[Z\\`WP\\h`[`a``bij`Z[\\[[cd`f`PYf]Z`\\W`fdf^Zckmlhfgc\\ad_WRZddbdefb]addcdkwymtsfflokhnnfceimjamlMLWUTbol_dlhbl}vw{rf^_hlkkjklmpqsvuyojlntrecadp}|trrnsxtnllzxrsuomppbVQGGRZVIKXadYUURKS[_`[XQOVY`ilifbeijlg^[hy}smdeje`^`bcb`adhhggihgplb[j~|onqifvqpj\\bhqqeglilrkfdhggmrplvodckkjfagggfhjlmh`Yfxk\\XW`fXYf`b_SUZVUYUMQ`kijrmh`Zbp|n`n{yirwqlkuwoppntuoklpy}wprtqmqsmq{{t{hpqlihqrpnpt|yymkvmi|yv}yxysyrpzlkppnsxmfjhccs{xwv|yvs|{u|wks}sihiilyzplsmh}mo}}}zxwx}{z}~|zz}}|{}r|}}yyt|zy{~~|~{vms}~}|~}yoguysnvnit¹Ǽ»ſ¼¿ÿ¾~{|{xvvvw{{vsrqponoqqnlkoqv|rwumcjzznfa^bgkmmnllmppllnoib`__`abb_VT^d_\\blmf_]\\ZZ^dhiklmmh[MIMOPRTY^_\\YWZa_TJFHIJKNVYZVH;;ESac\\RNS[[PCACDCBGKNONKKOSTTVVUM@;:@FNRPMMMKJJKMOLFGOLHGGN[egdXOHHHJWeicWRSVWXYXWWY_hnkfgecbba_bilqsqhccdcc`fljcb]SSV__[[]cffda^VS]ea[Y[\\[ZVTY`bcefeaWY^er{ufcfklebjsmc]\\bie_X_ormghksunjmpsw||qkkihhhhkt}{wvutrssmknqtxsjhjnpljrwtrprpllousopnknphdjnaRVZVTX\\ZXUX\\Z[\\]_YR[ic^cccaajh][^]Z\\ccad_U^e`]^[[dghj``lqnmkjkh_ahf`Y^fijjjjiffhgehozvlu|qfflojiokbbdhlhcr~dJMYUUdog[dmfdq|t|{kb^conkjiiknpqswv{plpswqcbcfu~rosptxulkp}xvwuqsupdXOHLU\\RHOZffRPSTQW\\^]ZXPNTX_ikiebiihibY[o}wokfehhe_`ced`bdfhihjllohbfwulsqhqrlsj^dipqefkhlrlhehfgmqqksmcbhiif`efhgijlkf_[m|k]YW`eY^g_a^RTYTRVQJP^khhrld^Y`kytel}xirsnmjswnoqqsqomnuutusqouumpzn~ipqlkhppr}~sm|w{wriipiixzryywxqxso|ynknolu~nefccdq|xxwvzwttyuszqiqvmgggfkwsjkpifxwio}z}yyx~uw~v~v~}||~|t{}}}xw}wwy~{~|~ukq|~~~zpev{tlyrht¿ſɾý¿þ~}{{~yvtttwz~~~{vrpponmoppnjknpu|wxrhdp~|slfa^bilmlljklnollnle`^`acbcb\\V[ef__gnmf`\\[ZX]fijllmkdYOMQQQUX[\\[XW[bf\\NFFGGJNSXXTJ=9DR^c]TPQW[VE>ACCEFMOMLJKNQSSSQPKC=9>HNTTOMMMLJJJKKHEKPJEGNYdebWOLIIKP\\ge\\RQSTUVVVUVZbjjfdcbaaa__fllmoohddddcdfjhaa]RRYc[V[]_aa`_\\VT^gaZYZ\\ZYTSZ``aegf_WY]ft~sabhlkflttla[[bhd^Xapslhikrsmikqvx{xokkhffffju~~yuqqprtolmrvwskhjnommtzwrpsrpsrqqqqpmooigjofTW][[\\\\ZXUY]\\]_`b\\S\\fcbeffcaifZ[_]Z^b`ce[Xcfb_[]egiljdfrroommllb^jmb^`fimnllkjighilp{slvxofhmniilfa`chjhhx|]IQYTWhobYdkfiv{v}sd_^hpnljhikmortxw}rnquyq`aegx~qntrtxwkkt~xxztsyyri[OLVZ`PJZbhbNPQUTZ\\^[[XPMSW`ikhcchhheZV^s{poifefhg__cfeabcehihkllmggq}|nnypmmmsl`eipqdejgkoihghfglpqiohabgegeadfghijkkd]^t~k^ZX`cZcg\\`^PSZSPUOHO^jfgqib]X`gv{hnuhqsnkjrunmprsooru|zuzupstxxnoygylpqknlpoqy~tkyy{vnghlghr~~ntzvunvsn{{pmmnkyleeacfovvxtuyvttvprvmjnoiedefjrlekjcgrnhovu~ux|vyrw|u}u}}|w}{y|~vvz~x~~}vmn||sey{xkwvitüýƼĿ˿¿Ŀ¿ÿƿ~|yz~|wsrssv{~}||{|vrpomkmmopmjjloszxslfkzzoiea_bhlmkiijlmmkjkhb__abccc`ZZclg`ekmie`[[Y\\chikmmlf\\VUUSRSWZYWWUYchcVJFFFHMRWXTI=:AP^e`UPRUZWL??DFFJNRQKFEJPRSSQMIC=;<HTXUNIJNPLIIKKGCIROGFOZ`e^WLJKIJNXcf[QNQSSUTSSTX_ghdca___]^^bimilpnhffffcgkjebb\\ST\\cXTZ]]\\]^^\\UTag_XYZ[ZWST[`_afig]VU\\hxqabhlkisyti`[[bhd\\Yaoskhilrrkhjpvz{vnjjhdcdfjt}toonqtolosxztkhjlnnqx}xqmqxyuqstrsrnoqolinlXVa``^][WV[____afeZ\\geeijkf`heZZa_Z``_hf\\^egb\\[aiklmklosurqqomldamqgcehjnoooomkijmpszqoytmiinmhiic__bhjgjywWJX[RYll^Yciflzxyob`cpsmkigimnprtyxtqqvzo__ghx~oltsv{zjjw~xzzsu}{uoaQR^fdNLbjl^NSPXZ[\\a\\[VONRUbiic`egfg`TTcvulmhdcefb^^dhdaacfhihjkljgltzukryltvjounadhnqedhgjjfhhigfjnohld]`dbedbbehgghkjb[`w~j_][ac[dgX]]OT]RNUMFM^lfgoha[X_j{yeusfqtpkirtkjrvsnpv{wx~sntvzzpoxftpppiqrpnkr}ukwz{~unggiehnxlo|vsmstmy~qlpojied_ehmrsxsswtrsrnrskjkigdcdejogekf`ioeeoos}|tx~wtunvvv|w}~{{}x{twz}w{zmm}~xi}x}kv{kuüÿŹ¼ÿʾƿ½ľ}|yy}yuqqrsv{}|{zzy~}wqonljllnolhjlnqy~tnfguvmfa_`dhlliggilmmkhfda^_bdddc_^cjmd`krofda]\\[`gkkjnmg`YWZXTSUYYYXZ[_fg\\NIGHHLRWXUNB:AN\\efVPRTVVKEDFHKMNSRNDADLSSRROKD>;=FUYUMFEJPRLFGNNGITWNJQ[a`\\SNJKLLMT`f_SNOQRRRRQQV]dga`a_][[[\\agmkekpmigfffegojcec[TW^`VSY[[Z[\\][TUeg_YXYYYUST\\b`cike[TRZi|n`bhmkmw{tg^[Zbic[Ybprkhklrrigjpvzzvnjjhcacfjs~rmmkoupkptxzulhjmmqu|~xqkq~qotuttrnovtniop[Vaccb^]YX^baaacioe_hhgjknh_dd]^ab_aaclhabghb\\_hllnnotvxunorponhdnsjghimqsrtqlmmmoquxopwrljkomhjf^\\`chiel{pOP_[Q^mfYYdggmy}w|kbbjwtljigknpqqv}zursx{oa`iiwnhttw}jkw}xxxsz~xtgWWdmfTPfoo^OURad]^ca]UPNQWdig]^gfde\\RViumhle^_cb`]_egc__bgjijjjiihovunjsqjkeovpddhnrebffgdcgghhegklhkbZ_e_cdcbdggegie_[cy}j``^ab[ehY]]NW`QMUKDN`jdgmfaYW`o}tdzpeptmgjsqfeqwrpv}w~nowxz{qnwen~rrqhrwqnio{xls{}zrnhefdhjqml}~vpkptlxsmspjjed]djnpryssurqqpmpokkhgfccddhlddia`kj^cnmp{ztwzttrmv}sx|z~}y|u}|vx|{z~}}or~z|lzjvov½´ʽ¾ʼĽ¿û~}|zz|~xsqpprvz~{zyxwx|}wqnmlkjkmnkgjjmow|ricj|{qjb[[afhkkhedhmmkifdb_^_bcdcb`bikf_cptmcca]\\\\bimljmi_\\[[\\WSTTVWXXZaghaULKJKLQX[WNE@AKYbe`TPSSSPIGIMRTUSRME>@HQTRPMKGC=;ESZRJDBGPUSKDIPKIV\\TOSZ__[SKIKMORU_d`VPNPQQQQPQU\\df`[^_^[YY[^dkmgdkoligfeefjmfdieZW[`^TT[[YY\\\\^[U[iiaZVWZZTRT\\dcflleZRQYi~l^aimlp{}tg`Z[dibXYdpslkllsrigipwyxtmihhc_bfjt|pmkiovqmotx{vjekqstx||vomw|opuuttqkq{wmlstaZ`cfc__]Z`eeeehknhdkiimpphbecacbdd`bjniceiib_dknpptz{|}unqrrqqmimrmjjlpttuvsnnnoqrssqxujklikjff_WY`ehgeo{iNUaXTek_V\\dehqxxz~xgaft|tlihiknspmw|~vrsyzqcdnjuohtvzjkw|}vttu~}xm][jrk^Xhsr^WZWlmcbhg`USPRWghcZ_igeaWP[orggj`Y]a`\\[_cd`\\]cijjjiefhksuofkrgl~gflurfcgotf`eddaad`cgccgjii`Y`c]bdccegfccfb]Ycw{kab`bc\\eiZ]^O[bONUHCPbgagkd`XTat{oj|}mequibowmcenvtp|~ylr}}y{tpxgk|tuthnyvpfk|zmp{}vnnjeccggkohx~wmhotlyrnxrhxoad_clrps}rruqpponoljifggabddhhace`agc\\cllnvysrtqt|zomw|}|yqz~|{|w}~w~{uz~~{r|wqlwvy·ƻ¿½ǼſûžĿ}zzxz||vpnnoqvz}zxwvvwz~vpmmlkjkmojgijkov{nfcovng`[[afhjhgeehkkhedba_^_bdcbabfje\\\\ispg`aa_]]flmmlke]^_^[WUUUUTX[^cig]QOLMPTY\\[RFBEJT_d`YSRSSSOKKPX\\YUNIE??GPTTQMKIFA;?P\\TGDCEMUVOGGQRIS_[TSUXZYUNHHKRVX^a\\TOOOQPRPPQU^ceaZZ^^[XXY[^fmmfekmmiecbafnjbgkdYX_b]TV[YUZ^^^\\ZdljbYVX]\\TSV]fegnleZRQZkk^bkmnt~|sga[[eh_VZfrsnlmlrqhfjqvxvsnjjha_bfir{omkhouqopsx|xhcnwzxxxytmo|ynpuvutqnu}wnorsmc`dhe``_\\bkigilmmmlliirvrggkddgeggcgpofdilgbcfkppqyrntrporplnoonmotvttwuqopqrrrstzthjlghfc`YUY`egeerxeQ[`VYhgYU\\ceirvv}rdbk{}tjfhhkormmy}|xtsyyrfeoltogtx{ljvz{uqrwzqfcqwne_kvtc_a^oqifnkdWUST]jf`Xbjge\\TQ`qmdif[WZ^^YY`ba\\Y[biljfabfhnuqicnpbwoggksrf`enxh]ed`\\_aZ_gb_djhd]X\\][adaacgfa_eaXXbrxlabacb\\fkZ]^P^cOPUGCSbdbhjd`WSfzwmszulfpugcvxgdelxwtrnuy|xrwjiyvvuhjz{rghy|noz|rjnle``ghgscr}xjfmtl{qq}sfos_ebcmrnupqtpponnmllhdjhabdeie^cd`dd\\\\djkltvqpposytkny{zxsozv~~~u}z}~zt{z}uvxsy~ľ¸ǿľĻžž~{xxwy|~ztnlmnpuz|yvtsttx}wolkkjllnnkgiiknuz}jddq~zqle_]]aegihfcdfhhfdba`^]_acbaabee^Z_mqjb``aa^_hmmllkc^ab_ZWUVWWW[_beeaXQQPQX]_\\UMGGKPXa`YUQSUTSOLPY`]TLDABDIOTSQOONJE??JY\\I@BFMVZTLGMUTU^`WVVVXWSOLKMSWYZ^\\TPOQRQRRQSUYad`[VZ][XVXY[_fongeilmica`agje`il`W[cf^XZZWS\\a^^^aikgaYV[_]VVX_fgjnjdYQPZlk_fmmryypic[Zfg\\TZhssnmmmsofgmpuvsqpnmib`degqznkjintqoptw|yicoxyvvvvsorwnosuusppy~vqrrwufafkhbcc`domhlonopomgjw|rfhnfgiejkimqjehjkhdegmqqt|rptrqqrpmoopppptwtsxvsrpqrrnu}zpjkkffd`]WUX^fheequaS`_U]gbVV]bejquymcdqzmedfhjolhnz|}{xtsyytjfljtphux|plv{{uory{tnkv{ojktzvifffqpljsndZXXZhlc^YdjhdZQSdogbg`WUXZZWY``]ZXZbilg^[agjprjehqifvhieiqqe]bmyiYae^X]aX\\gb\\bihbZV[YW`ea^aee`_c\\SUanumbabcb\\hm[]^R`cPUVFGVaddhhd`XWkyrtzsmjhqsfe}xadinyz|{mpy~w{xrujhwvvtjiwzqjiw{omw|ofooe^]ghb|wan|yjdosj|qvsfm~vdjfdospznssppponlmogemhaddhk`\\dc_caZ\\elkjrsmmmnstmiqzxvsrpyy~w~}r}~{y}{r~}z{zz{õŻ»ĺÿƿŽ¾ý|zwwuwz~~yrmllmotz|xtrqrru{wnljjjllnnjfiijlrx|~hbcqytnjb^^_ceefedbcefeca`^\\Z[\\_``__ab]ZY`kngaaaaaabjnmjjieceb\\XWVXYYZ^aaa_XSRTVX[\\]VMJHKOUZ]ZVTRTUSQJNV^^UKECAGMRRQQPSURJB@JVVNCCEJS]ZRMPVWZ_`]XSTXYVNNNQVZXYZY[VOORSQRTSVZ\\\\ZWWXZ[YVVWX[_hrngdillfba`cgdaakk^Yagh`^^YUT\\b```elje_Z[``[VVZafinlhdWPQ\\n}jahmmt}woleZZffZR\\lsrmnmnsnbiqprqqqromjecddgszmijhlrqopru|{qkrxvsuutppxunortsrprz{usss||jbglidegdfoojlpopurkho{{qgjojkkgkmosngjmihjihkprqwvsurqssolnprssrtwtruwwroqsqlu~{mhjiec_[XTTX^fgdeqp[Ua]X`eZRX_cekou~wicdwvhb_bgkmhfq{{{}zxtsxxumgjjvqjwzsnx{ytoqzwrnx~qmv}~xmlkltrqpwqha\\\\anq`[\\gihfYOWdleedZUUWWXV[_]YWWZafgaYY`fknjbakmbrmpmbfpre\\`kyiT[c^VY`XXdb\\`ghaVU[WV_da\\^aba``XPS^jqlc`aca]hm]\\[UfaPZ[KMX_dggfdb\\_pus~xdghinocjsagjq{{}tnt}|vzwnp|nhsuxvmktxrnluzpjs{mbmsi^\\fea}yam}}kcqqipwqfm}ykpjgrvv~lwrnqtpjkpogipfbdgnj\\`fcbd`Y\\ipkjqoijkosohht{xrqssy{~w}~t}xv~}u~}~}}ƻǽȽ½Ŀÿżÿĺ~~~~~~~{xuustz~{vpmkkmpty~zwsqppqty~wnkihjlmookggghjpvz}eacouqkga^`bddddccbbeeca_^\\YXYZ]^^^_``[WXajleabbaacdkpnihhgjjb[WVX[\\\\]`a`\\ZVUVY[]]\\TLHGIMSZ\\ZUTSTUUSNJW_]TLEDJLOQSQMRWYTMFDITYPFCGKR\\_WSTW[]_``\\VTVZXTQTVY[WX[[[ZTNNRVSSWUW[[WSRUYZYWVVUX]bitmffilke`abdec`alj\\[hjicb^XTU^ccbcimid^Z`da[WV]dflplgdWNQ^p}|jbhmmu~}uonfY[heWSaptqmnmnsiakspooqssonmgeddhtzmijhkrqpqqt{~wsvwtrsurns||rooqqqqqv|xtutt~jcgljefghiorpqrpqwtklv}ypimonpmkmoy{lfnpkjmoortrszyutqpstnklmsuutvxtptzzqlqrolyvifigc`\\WTSUX^dgcdnkWXb[Yc`SQY`beimuulad{qf_\\agklghuzw|}zxssxxtoiikwrkwzvox{wtoqz|sp~ro|}zttsqvtvvztohbahsv^ZbkggjYS[chhicUTVUUWU^^WTUW[adaZWY`eike_`ihd~yowl`irqaZ`kwjSVb_UV^YZa`[\\dh_RUZUV]ab][^``a^VNQ\\gonc`acc`il_[WXj`P]`RSZ^flgcec^etsvs\\bikmjbunckks~}npx|wzvnoyrhntyxqlrwsqnsupiryl`jvl]\\fc`zal~jasrjpxogn{}uvnisyzo~qjryuhiuqgotebditgXcgced_X\\ovjirmegjorkdjw|vqpsvx}~w}~~u}vq~}|Źɿþ½ÿ»¾ø~}|||||}}}}}}~~{vtsrty}ztnkjkmoty}yvsponosx}wnkggjkmpplheefinty}c`dnspjea`cdedcbba`bdea_^][WVXZ\\^^]]_]ZWXbiic`aaaadglpmghhhljaYXY[]^^_`a_ZXY\\\\\\]^^ZNHGHKQW[\\XUTTTTTSPU\\`ZPJGJOQRRPOSZ_^SKINSVULFFMT^_ZW\\]_`ba_\\XXXWXVRYb`\\SQZ\\_\\RPRTZ[Y[][XWWUXUUYZXXWWWYahkvmdhjkkeabeffb`bij^\\opkkh`XUV^ffbdkmg`\\]cd`[WX`fgnpkgdWNR^r}|kbjllu~{topfY]hcVUfptpmmnppfaispoopvtqpogfdcdp~|ogigipqpoppw}tsvvrqsror}{tponopqqtzwuvuu}phfklhefgkntwwtpsxslr|}wokoppronmr|jgoplkpsuvtrt{}wurqrtpjhkowzwtturot{xolprmmywffhfa^YUQPTY_eebeleVX`[Ya[PPY^`eiow}{sk^f||maZZ`hkifkwvu|}yxtsvvuohhlyrnwyxqvxurnowvsup{{zyuxxx{{wrmjjr{w]_kmfip[Z\\adnkaQSXUTVWa\\RSVW[bc[UVZ^dghe]afepotue`jup^\\bgolYT`_TU\\Z[_^YZbh_RUXQQZab^]\\]^`\\UOP\\ellc_`cedhi`ZT[oaP\\`WUY]hngaefaivq|kXaikkhjkhnmu~}~~wls{~{wyuknw~thktzyqmqutsprupjqwj^iwn_]ebc}cli`vtloynhpxzplw~~toit~ueivqjurceelvcWfidgf`W^tvmmrjfhhoqfepz{uqptxz}~x}}x}tn~}~}Ƚ·ÿ¾ɾ¿½}{zzyzz{{||||}}~~zuroprx}}wqmjikmosx|ytqommmpu{xmigfilnppmhddehotx|a_dmqnhdaadeedcba_^`dda^\\\\ZUTWZ]^]][[ZXVZdiga_`a`adilljgjiijf^[[\\^``aaab_YZ]`a___\\SKHHLSZY[ZYWWVUUUVWaa[RPOQTSRQPQRYa_[WRRTTROKKNU\\a__acdcabb^[YZ[\\[YZbf]QNU]`_THLUZ[]]\\[ZXXUV[XWZYWXYYX[eel{mdhllkebdghfcbdjh`fupmrk_XVX`iibdlmf^[age`\\WYafglpigdUOV`q{ykcjllu}zsoqfZ_gbWYjrrommnqoeamroojqyvrspjhfbdr~zngighnqpooovzsttrqqpqw}xtrnkmpsrwxttvutogejnhdegkovzxrqvwppx{ytmkprrrqnmt|vhgoqlnsvwwtrtz~yvtqqqqnigjr}~wtspnqy}skprnlsofgfca]WSONRY^aabfi^TZ]Z\\]UMQZ]_ejr{}voi]i|wg[Y[ajkfepwor|~xvtsuutpihnyrmtx{ruutrmmwwvuq~}}|{xyy}}zxspt{x_gsnhot]]]`ewk^PTYTTWZbWPSUU[`\\RQUZ]deb_[`hjywkvqbalvp^_ecgm_R\\_URWY]^]YX`h_QUVPMU``]\\[[\\][UNPYahjb^^ageefa[R\\pbR\\b\\WX]ime_fhdmvr^Uckmjgskpppw~}ypnu|z{zvxtjkw~sgirzxplorttpoonhoui[fyr_]dagenjaywopz~miqu|pn|}ynhxpalvoqwkhjhpvaZijgjiaYc}wnpoiihispgmv||xuux}}y|~|sj~~~ĻĽ¿¿½ƾ{zyxxxxzzz{{{{||}xrolmrx|}|~vpkiijlptx}ytpnllkmqwxmhedhlnqqoicbcglsw{^]cmpmgcaacdecaa_]\\_dc`\\YZXRRVY]^]\\YVUVU]gic_^_``belligglkjfb[[\\^_aabdca`]acca^`a[NHLQY\\]][YYYZYVVVYbg^QNPSTUUSQRY`da][[ZVTSPMPTY`eccdeddbaa`^\\[]__\\]bc\\PHNY`cYJHR^`\\]]ZZZZXTYa]ZYXY[[YX\\cal}nbhlkjebehigddfifeqwmoxm^XXZblibekjea`chf`\\XYceeklheaXRYaoxwkekllu|wrpqfZagbY\\krqomloqncbnronisyvruumjgbgu~xlfgghnqqonmu~urrqponq{{vssnikpsvutrvvttmcejpidefkq{~vnqvtrvzxtpllqvurqonx|qghoqmotvxxtrv{|{xtppqrpjhgjtvrqoms}zlirojlwzlggd``\\VQMMQY\\]^bheXS[]Z\\[QLSZ]`eks~{rng\\l{pb[XY`kmdertlr}}zxutrrstqjgpvsjpvsrrqpklvxwus}}~{xx|~|{uu~udpwmhru^^_^k}l]PU[QUY]bTOSTT[\\TMQVX\\ba_\\[ahslkvmaamvn]aga_lcQV[UPSW[^]XW^ibSSWTMMY]Z\\_\\WXZTOPV]efa^\\^ilebb\\Q\\peU\\fc\\Y^ilc_gifpuswUUcloif~xjssu{~~{|~opx|wyyuxshjw}tgfqzxpklotvrlkjhntj[cyua]dbihnjb{xrryznkqu~op~}}mg{lbrunwxhmnlww^^nlkomc[kzpqnhlilwqiu~~~|z{~~{{{|rj~~~øľ¼ƿĻ¿¾¼ĺ~~}ywvuuuvxxxyyyzz{~{vokjlqx|}|z}{tmighiloty~ysplkkjkot|ymhddhkorrqhbabeiqwzZZbkolecabbdeba^[YX^ec^YWXTOQVY]][ZWSSUWaif_]]]``bdhgehkomhd_\\]^_`abceebbbhjfc_aaZRPT[aa`_]\\\\]][YZ]becXOORRSTTSTW`ijb\\^a]UTVSQV[_dmlgdiecbaba_^^addbab\\RMLV_`^RIM\\ea\\]][ZZ[YW]ecZUV]`]XYZ`apznbhighecehhgffhgcjxvjs|n]YY\\emicgjedb`egb^ZX]eeejgfe`XSZ`kuvjfkklvzsppod[bfa\\alqomlloogahormkkt{vrw{olgdjv~xjcgggnqpokjtwprrnmns|ytssnikosupnrwvst}}pfdjoidfgjt}|qkqutwzwurnllrwwspooz|nfinpnptvxxrqvyz|{xuolnrpkffflw{spoljt}sfjrlhnyvkgfc_][WRMNRYZY\\dicUT\\\\[ZTLLVZ[`flr{xpne^nwi_YXYbmkdhrplt{xyvssrqrvtliqv|shmv~tpoopklv~zwut}~}wx||{w{whu|pirua_`\\mq]UW]PY]_bRNQSSXYPLSVV[^\\[[\\ak|tfosg`bovl]ch`[heSRXSNOQX\\[[X]geWPW[SIPZY\\f]STWTPPTYae[W[\\ipe_b^P[qhVZii]Y_fib^ehirsunQVepqgjtmwyy|t{znpyztwwtxrhlx|seeq{xoiijrytjeeflrm\\`xydZeglmlld{xt~qwwnlqv~oq~~{igggvsq}wfpsr}u^grnnspc]q{qunkojnzsmz~}|~|~~xuqp}zľſǿ¾¾·~}}~{wutsrstvuvvwxxxz}}}ztnhhkqw|}zy|~zrkhffhkoty|xtoljihjmqx{ohddhkosrria_aehovyVYbkmicabbabb`_[WUXbgbYUUVQMPX[^]ZWSRSUXdid][\\]^`ccfdcgoqmhd_]_aaabceggdbfjigb`ca\\Y[_cdcb`__`b_\\^acebZSQRTSSTVZ]_bffa^d`X[\\[\\]]`eikljemdabbcdccceggd`ZTTVW^d`XOMXdd_]`_]\\\\][\\efdZWY_^^V]baaquk`fededdfhghhijdbozrju{m]YY\\fojdfgee`_fe_[XX_feefeed`WTZ`isthejkluvololb]beb^dmpnkkmomcajqoijkv{vtzxokfdku|~wgahhgmrqlgirxorslkovz{wrqrnhkoqojlswsruzzrgdjlheegnxzrklruuxztpqnjlsywspmq}xifjkmoquwwuqrvvvxutqjhoqkeccfnx{vqonihvzkemqihr{{rkhe`^]ZWRNPSXXW]di_SU\\\\[[SKMV[\\`gmqutpmdapte[XX\\emhclrmmvzvxuqtrpquvniqvz|rjmu{toooommu~|}{wtt|~uw|}}|zp}tntwdb_\\lu_XY_U]bbdQLOQQVUNNTURW[VW[\\bu{kisn_^isuj^dh_ZgeTQSQONNSWZ^]\\dg[NT_YKKZZYegYPRSQSVX\\bXTZ[goe^a_QZogW\\ig]\\adeb^bfkrqxhOViuqgqtq{}}o|vmszwruutwqinxvndcp{vkgggoyvjb`chmk]^xgXfmlxqknf{xv~rutolnzoo~|}xgjcjwptreryv}pdnsqrvrddz{wwoosnr{vs}|||}{{}yvt}rw~}|x{ſ¾ÿµ¿¿Ⱦ~|{{}~yusrqqrststuuvwwx|~||xrmffjpvz|zzy{}xpjfeegjnsy|wsnkihgikov~{pgbchlptsqia^`dhmtxUZdmmha`aa^^^\\[XTS\\de^VSSTOMRY\\_\\VSQQSVYcgb\\Z[]`accdccltqmhf`]_`bbcegihfdehhecceea]`higedcabcb`^`ccc^VTVVWWWWX]dgeda_dha[bcafiedlprqieke`cdhgggfgfd]WUTY\\_bd`XQUdh`\\`eb_```]bkicY[^a_^Zcgc`kog^dc`bbdffgjjlh_aqynjvxj]YZ]gqmeeggd`_fd]YXZ`heccccb^WVZbjsshdhkmstmilia_debbelpngimmidckpkgjkv{vvzwnkgfktz|ufahhfkqomijq~{osrkiovwxslmroikmmlioxvqrvxyrgdijgdbhv}vlgmrtwzvqoolgiszwrnlu}sffjjmpruxurprvtsvsolhionfabcfpxxtoljfjxuggnphiu|xoihc^_b^XSNQUWWX^fg\\SX\\\\YXTLNY]]bioqpppk`ctp_YWY^jmfeorkovwtvqptqnovzpjquwxqlnuzuooppmlrz|zz{v}}ut~|{|swz}}~{zruxgc`]mwc[ZcY`fhfOKNOSVSMNTSPUYTSZ\\i~~njnqgW`qvqd_hi_[gfTOOPOLLPSVZ`^_gaRO[_OGU\\Y^k`ONRSUWXX^[UX[ckd[^]P[ngY[gf^`cceb]_dkrs}~dOXnyqlywu}yqtmsyuttoruokrxrjccpzsigdblxvka^`dgf^]xnXeqkrrkph|ww~rqrojlrm|{wgl{bkvot|mduz{}omtsrsvren|~ypturu|{yz}|w~}}~vwy{~|uts|x|}~u{}}||yy½¿¿¾ĸ¿½¿Ż{zxy||wsrqppqrrrssstuuv{}{yvpjediovz}{ywwz{~vnhddefhlrw}}xrmigffgint|}rfbehlpssqhb^_bflsw~U^gmlhb`_\\ZZZZYUSS]ed\\TQQRPOSZ]\\YTQPQRX\\`ca]YY]bcacdbgsvokgd_]^``acegjhffghhfefiib^fmmjhfeccca^`bbb`]ZZ]\\\\[[Z\\`ilic_ahhcbeggjlgfouvphfgedhilkjjhifaYTWXY]acb_XU_hg_\\cheaefebhoke[]cb_`agh`ajke`da]_cebagjkleZ_qxjjtuf\\YY_iqoeehhd^^fc[YX\\cjdabbba^YV\\ckrpfdfilsrjgjg`aeeddekpnehnhgdekoiegkw{xx|wnmihkqxzsdagfdjonnkkoy~nrrkiptuuqkkqrkhjkiisyursuvxrgdggcadqzoihmrv{{tonlhgltxtpklwzmcehknrsuvqoqrrrstoifdioia_`dirwtpjgedmxndinlimuxunhg`\\bhaWSQSWWWY`id[W[\\ZVVSMP[a`dinppnng]fsj\\YYZammegqqkpvvsuspuqmow~ulrstvrmmsxwooppljpxzxx~yuyzttzwy~xqwxz|~tuvjfb_owe`\\i_diojPGJPTSPLLSROUYRQY^rtgjpm_Vetsi]`onbZceUONLKIIOQOS^b]beYOT`WGL[\\YafVMPTTVYXWWTVYahc]]ZP[keY\\hd_bddb_\\^cksx|dR\\t}suww~sttmuystqlqtmktyribcpyrheb^iwvka]]bec]\\usXevjnsntmzvx~olnnhjsnyytfpxdmtotxjfx|~oqwtrstqlw~{txurz}|zyysy~zyuxsw}yx{x|qz}sq}yr{|}}zzw{z{~zyþǻ¼¾ùzxvw{|yvsoooooppqqqrrstvy}}{yuoiddiov{|zxvvyz}|rkfbbcehlrw|~ysnifddehmrysgdeilpssqha\\]adkrv|V`ilkgb^YWWWXXWTQT_gdZRQPPPOT[]YTQQQQSZ]`ba]YZ_ddbaacmvsmgd`_]^``bdfijhffiihfghkgackomjjgeedca^adbba```_]][\\_`dmoi__hlgddfhhjihjsutnhffffmklllkjie]TSZ^_`ab`_YWcic_bghdfkifhppkd`bf``cfjg`aiiddc^^_cd^_gllj_YcnqgiqqdYWZ`hsqedhgd^^fa[XX\\ejbaa``^]ZX\\djnmffeglsnfege`beedddjplchngeefknhdciw{xz|tmmkjmotyqcagfdinnnmlovoqrjjqqrqpljpsmefjjksxssuvwxrhedca`l~|njigkrx|wpnlhfgmtspngkywgaehkprttqnnqqooqpidbbimd[]adjsuokhc_bqthclkfkqsssmhe^ZflbWSSUWWVYcjd[Z][WVWUOR]eefjnoomlf`lqdYZZ\\frneirpjpuurrtpuqlnx~xnrsstromqv~zooqojhnvyuv}xuvvsswsw|smwwy|vuukjf`pvgdamfelxpPDIRTPOLKRQMUYQOXcz~jdjmjXWknhb]ito`YbdVPMKHFFNPJLXa]\\b_SOZ_QIT[UYb_ROSUVZZUUTQW_ed^[WQ\\hbY\\fc`dda^]Z\\clu|yfVa{x~v|}}r|vovyppplptnmtwqibcpxrhd^[gvujb][`db[[rtYfziksq}zswuy~jglmhksruz{ohsueosntuhj|zoswsrtrmo|~z|vu~}}{ywwou{wv}tyytuw|xuvsy|nszspztnxz{}|z|zqzyx}z{ĺ»ľʾ}xvvwy}yvtqonmmmnnnooopqrtx}~}{ywsngcbhntz~|zxvuxz}yqjdabcdglqv{~ysnhfdcdgkpw~uideilpstpha\\[_dkqt{Xcikkg`YSSTVWUSRQWahcXQPPQQQU[[VRPQQRX]^ab`\\Y\\cedba_eqvoic\\\\]]^__bejjjiggjigfgjjgfhlpmiiheccdcacecccbcb`^]\\]bfillf`cmnhfeefgiijnuuslhhfffhklnlkjjgXOV^cfecbbaYYeidchkhejojhpuplecfe`bfhkgcchhbfb\\^aeb\\akmlfYZfkieipmaWW[`htsfdhhc^`d`YWY_gi``_]]\\\\[[_dhklgfeflqjddee`befebcioi`hlfcghjjfbafrwxzzpmlkkmmrwqeafdcgmppomot|uqqkjmmnonkkpsnedhmqruqrwxwxsiedbahwpfhhhmuzyrnkhecfnsqmhckxreadhkorsqnmnqpnmnkda`bij`X]bckttnie^]espcdmhckqrqrnhc]]kl_WUUWWWVZfmf^\\_ZRR[YPTahhgjnomkicdqqbY[[^isnfktokqutqquovrlnw~xprsssqrnls||poqnignvwsu{~wttrqsuqvzojwyvxyz|}wttmjgbo|thfdnjeooOFOWRPUMJRQO\\[PNZl}t`ckjbV^me^afprh[XbcWQLIFDFLOMIP\\[WZ_ULV`ZMLWVTWa\\PQUUY\\VPOMPXcd_ZVR[f`Y\\c__dc^\\[Y\\dmy|wk]gv~yxwowxnoplnpnmoqoiccoztjbYVdtskc\\Y]baYXouXf{kksu|v}wttz|heikfmvzyrzukivtgprotrgm~~wqqusrrplq|~|ux{y}|uvmryvt{uv|utuzxtuswyloxtp{pktwy~|ysy{ntww}{}z}ľſ˿ÿľ{vuttt{{wsqpmlllllnmnnmnoprw||{~{xuqlfbafnuz~~{xvttvy}xogcaaadfjotz~~zsnhecccfjou|vjdfglpstoh`ZZ]bhqu|[ejkjf]SOPRTTSPNQYdjbUOPQQRSV[ZTONPPRY]\\]``]Y]ceb`_]etumf]WYZ[]^_bejkjigghhgfhjlkjkoqnjigdcdefggfeeedec_]\\^`ejhhfcbiolggeeegkjkqusojgiffhkmnpljjkgYS^eghhebgdY[fhgilmkkoplmvvmjhgfd`cgjkgcehhdf`Y\\bf`[cmnkfXYehedhlh]UW\\ahuugdjia]`d`XV[djh`^^\\\\]]]acfgijgffflngcddcabegebbinf^gjcahiifcbadnuxzvnmljkkkpupgcdaafmprrmkq{{rokhhgjmnmkpuoebfossspsxxvwsjeb_duufehhioz{snlhd`afmrpib`muka`djkoqqnkknpnkjhea_`dhcYW^admuqiea\\^jtkbgjdcnsqopog_[`oj[VXXXYXW^hpldabZOQ]^SVdkkhimnljieisk_\\]\\`ltlgntojrvupquovsmnv{rrsstqtqhq{~sqpmheluwqsz|urronstmtyjgx|stvut~z{yttoljfoyrjjgnkfugONX[OS\\OJTSRc]OM^qyf[ekfZYfk_ZdormbVV_aYSMHFEGIPRILVYUU[VLQZ]UKPRROZ`WRTSUZULJJLS]da[UQ[d_XZ[Y^cb^\\ZX]ep~wyo`nx~~}z|xp|zlnplllnkgkmjedozyl`USbqqjbZWZbbWWntWgnk|tvxq~{stzzebfhemyurzqgixqhrrnsqgo{vrprtsqnnu}{t{x{yzuuknutsy}tvwstxwwsqtxulmvtq}nhpuw}|x~~ox{nouw}|}tzù¿zttsqryzurpnmlllkklmmlllmnpuz{{{wsojda`dmuy}~ywusrtx}wngb```cfinsx}~zsngdaabeimszxkeggjortqh_XX]bhqv~^fjjhcWOMPQSSROMR]gk_PLOQRRSV[YRNMOPT[^ZZ_`]X]dc`^]^fusje[VYYY\\^_beikigggffffhlnmkmppnihfcbehghgggffed`^]]_ehkheccfjkigfcceimmlqvqnhgfegkonoojjkje]\\fmmjhecfcZ]hihknmkourlrxulijlic_cgjjeeehjie\\VYbf^^innjdXZbeddgjeZTX`agsuidlk`]ab_YW`ilh_\\\\\\\\]`aeeijihggffjkfcedbabffc_`gjd]gibahigd`__blsxxpllkjiihlsohdb_aflpssmjpxsnkgecglooknupdafnssposxzxwske`_k}~jchghjpzxoljdaabgnqmd^alnd__dkkmpplikmligfda_]`edZSV^aepsmeb\\X^lshbgfcfqrmnpqg[ZdrgYVZ[\\ZXYakqpfccYMQ_aVZgoojjmonljflpe\\_a_doskhqtlkswuoquputnnu|usrstpurgpzusqlecjsuoqxztqmkmvsjs~xedw~tpturpz~wy~ztsqmlkqvqllhomfydOQ[WKYeRJUSThaNMdrm]YflcX]lhZWewue\\TV\\]ZUOIGDCGPSMIQVUUYWLLS\\[NNONNR\\^YURQUUMIILQXae^TR[b]TUUU]ca^\\YX^gv|t}scx{}|}xt{joplikneaknjffq}|n]QRanokbYUZa`WXl|rXkpjuvsso|{stzwc_aego|}{qrz{mfj{ogssnsqjqyvrlnttomou~yr{wyyyyukmqqpw}uuzrtxzxplrvrklvtq}lfmsv{|y}wlu{uqtw|~qzǼļxrqpopwxtpnllkjkkkjklkkkkmpsy}zz}{wsnhc`^bluy}}yvtrpsx|vlea`_`bdhlqv|~ztngc``adglrxznggginrtqh_XW\\bhqv~bfijg^PKMQRSSQMMT]ggXKIMRSSSW[YOLMNPV^^WYab\\X\\da^\\]^hunecZW\\[Z[]]`cgkjhfffeegjoqnlopolifecdikhgfgfffec`^_abeiihfegljdcfdabejmmmqtplgedeikmnonjjkjb_emsqkffge`\\ajkjnoljpwsmv|umklkgcadhjifegjmkcYVZaedhnpokbX\\bcccehbXTW^afrvidmma_a_]YZemng][\\\\\\^acfgkljgfgffhgcceda`afea]_efa]gibcihfc_]]ajrwujhjkjhfdhonic_]_fjottmjov}umjgc`elpojnsmecenrplnsx{yvskc]`stcdhghltxqmlg`]_ekpng_]bhe__aeijlonkjklecddb`\\Z^c^TPW^bipnie_VT^nodbebbmtnknpqgYXetfVX__^ZX[dmrskebXMRabZ]jrrnkmpomjjmlb]cebgpskjruljtyunq~wsusnmt~}xrptupvuhnx|{xqicahqslpvwsohglvqhq|xdctxnmqqoluzsvzw}ztsqnnosrpmljrmf{dRV^UOckWOUUVgeVQhqcWYfl`WaldXWg|t^ZVXZYZWQLICAFLQSJLUUSWXNFNWYTPMLNOX_]VSQRSQJGJNR[fcVS[`ZSRSV\\``_]YY`iyywti{x{zlrslgjj_cqoiggs}n[OQammjcXSY`_XXiypYqpho{xoloyxsu{~sb\\\\ahr~zslsz}wjdj}lguuospmvvwqhkssmnqt~wp{y{yy{ulmrnlv~vt{~svwyzqkqwqkmusrxkcjqwxz|~vlsxztvy~~pzɾÿ¼ſ~wronnns}~vqnmkjihhhiiijihhilnsw{|vx~}zvqmhb^]akty}~{xusrpsx}~ukd`_^_acflpv{~~zumgb__abfkpvzohgginssqj`YY]cjrx}cfghbTIINSUURMKNU]edVIHMSSSTXZWMIKMPX^[SXdd\\W\\b_\\Z\\^jsjb`XW^[ZZ[[^bgkjgeeeefinrrmlopojgfeejnlhddhgfdaaaaccdfhijjkkkd_bdbacfjllmospifdbeiijllkjikicdlruphfhhd_`flmnpnkksvrq{~tmlkiecbehihfehjmjaWW[`hmmloqk`Y^bbbcegaVRW]afrthfoma``_][_hnpf]\\\\\\\\^cffglmjgffgfgdacec`^aee_[_dd_^hhbcihea]\\]`hpwshdhjihd`ellic[Z_egowwmiotywlkhb^elpnjqtjdcfnrnimrx|yvtl`]e{k`fhfjpwtmkke^]`emnha`_afb]`defhmmihjkgacdca]XX]`YPRY]ajniebYSUboj`_a`frpjimpqgWWguhV[d`^\\Z^gntvogcWLTcc^alssrmmqqmjkmja^dfchrskkutjiv|umqyuttoms~ysoruqvvkoux|rhcbforjntusmebitogoyxddpqjjlmkhqwppts|wsrroorvsomloumh|`S[bVTgk]WUVZigaYlnZQYhj]Yce]XZizq\\ZYYYVWXSPMD@CGMRMIRTPSXNCJRUWPLJKNU[[VTRQRRNGHLOWdeWS[]WROSW[_aed[[bl}|}sq|z|outjfif^ivoight~lYNQalmjbVS[`_Z[gvo^xnejxwkhoyxru|zo`XX_it{{nlux{qebj~}igwxnppoy~svodhpplptu~{tr|~{}|}yuolrmjw~wtwxxxyzslourmnuoqvlbgmvxu}xkot}{wz}u|{º¸Ŀ¼¿|upmlkkpz|toljjhggfggghhffgijmqvz}ytv~|yuqlga]\\`isy}}{wsqoorw|}sic`^^^`bfkouz~~{umf`^^_aeiou}{pihginsrqjaZY]cjsyegheZLGIPVWUPKJOV^dcUIHMRSTVYYULEINQY^YQXed[W[`^\\Z[_kqha^VW_]ZZYZ^bfjhdbbddhlosrnmmqpjfecflnkfbeigd__acdeeefhjloomg`]bbaaeiklijmnjecbdfiijkkjjjjijmqupighigc_bjoopqmimvupurmkifecbehigedfkoi\\XY[bnohgmqi_Z_a`bcff^TQV]agqsjiomc_``_^dlppf_^^]]_ghghnnjhhfghgb`cec`^aed]Z_dd_`jjcehgc_]^_biouqgbfhgeb]clmhbZX^cfowwnhnrvxmlia]ekmnlrtjccflpmiilt}{vsl`_ovfchhgmtwqkkkb]^`fkha_``be`\\fiddhmjchmhaaccc`YUW[YQMSY[`ilgb\\TRZhoe]]^ajqkegkoreSVguh[`gc`_\\_gnuyqieXNXffaequtupnstolkkiaahifjttloxtijx}rms}|vssqlqzsmpusuwlotv~ukcagoqilsurmc^fsoemxxdenliijkifovnlpq||urrsoouvsnlmtylj~^U]eUUhmg]UW_lkh_plTMZll\\Zc^SW[kxm\\ZYZYTTXTQNF?@EJNNINSMPVNAGPSXTMIGJRXXWURPPSSKGINW`bYT[[SNOUTXbemj]]ep~ty}|tvsiehfeqvlhiiu}jVNR_ikiaUS]ba^`hqof~jcgtugeoxwpv}vl_UW`jw~y{{lnvw{~ndal|gg{|mnps}{qvoadookrvt}zst}~{y~~rrvmpljxvsxzzxyunnssqqunq}rzmaelvxpzmiq}y|~~~ļÿý¾¿zuokjiinwzqlkjhgffeedeeeefffhjouy|~}}}wsu||zvqmga\\[_gqx|~{vspnmpw{|qha^]]]^`ejoty~{tlf`\\\\]_cfls{}qihginstsjb\\Z^dluzhhhcUIEJRXXUOIHOW]a^QHIMQSTVYXRIFLQTY[VR[ebZWZ^]ZWZ`kldb`VY_][ZWX\\adhgb__ceimprqnnopoidbdjligdbffb_]_ceeefefhlprqhb_^`bcdimljghkkea`aeiiijkkjkkkkottrieijifa`dlooppljqwtrz|mjigeddbdhgfddfmogZX[^fqnffopf^]aa^`bfd\\RPV\\ahprllnlgaacecipqoga``__dkkijrnjhhgggea`ceb_]`cb]\\_ccaeljeggea^]^aciosne`dfeb^Zajmhb[W[afmsumhlouyolha_cikmmrujccejnmifgr~|wsmcdtzmdhjghrxtmkmj`]_afga____cbZ`kgbdgkgbhkd_aa`_\\UTWVOKNUY[clme_XPS^klaZZ\\cmmdbhloqbRVfsi_gjdbb_agnvzskgYPZghgjtwvvqpsupmmlhacllhlvvosyshky{rmq|~wrurlq~zqkrutuwnnrsxlaagnnhkrtqla[csoekvzeeojeefhfdmtjhmr|~wsppronxwqnmox{km~cY`gUWotnaTZcnpncrjQK^qk\\[aVOU]lwkYVXZXPQVRNNJB>BGJLHLRKMSPACOUXVRLEGMQVVTQOPTUOHGMU\\a\\UZ[QMRYWXblxo^aktv~|}~}zyulghhoxshgjkuyiXQT_iiibTS_edbfkppngaeqoceowtnv|tj\\SXalx~y{znqvv||lddo~hjnmsv|{rxp_bpomuvs~z|ytx}z~~|x|}pqqsomzwszxsvrquwwuwpzvpz}pdfnuvrxuip|u~~Žü¾Žÿÿ~ytniigglu~{rljhfedddcbccddcddfintx{|{{z|~tqsz|zvrlga\\[^fovz|yurnllpw{~zoe`]][\\]`dioty}|ule_\\[[]acjpy~tiffhnsutld_^agnw|ijg_RHFKUYWSMGHOX]_ZOGIMQSTWZXPGFNTVYZTR]eaZWY\\\\YUZbkh`caVZ`^\\ZVW[adgfa^^agjmpqqnopokgddhmjbabdfd]ZZ_dggfgeehmsunb]]^`aejnolhgijga]^aeihikkkkllllqtqlhhijhdbdhlnnnnlnttpt}ujhhgfedbdhgeddgnodXY\\`ipmgjqnb]aca]^cfcYPPV\\cjoqomonhacfijorpmgabb``glljnunjhiihea_`ceb^]`b`]^_bbdimkghgd`^]^bcjpqld_cee_YYbikic[WY_glqsmijntyqmgaacfklntwkcccflkhdco|{wrninwtgejkhjwzrklpi`_bccb_^^^`c^Yglcadgfccgfa_``_\\WSTUOIJQWW[fnkc[SNUcjf^XVZhqi_`hlpp_QWfricgjeddcdgmv{skgZR]hjjmvyxwrqsuqomlgbfnokmvwtuxqgmyxqnq{uqtsnr{|zokswuuwonqr~zlbahmmhkrspk`W^pndho{zgdlgbbdecblpedjr{zsommomnzyqmmq}|kp~i_biV[tyr_T_gotrjr_ONgre\\]ZNMU]mwiWSW[ULQTOLMNF>AFFGHMQKKPOD@LWXZYLCDGLRTRQNRVWRIELUY`^VZ\\PLU\\YWbto`irxw~~z}~|vmjilvxoffklu|th]VU_hhibRQaifglknpue`cmh^fpwqkw|riYQYblxyzzruwv}{jdgqomnlty{{r{r]aqonwxsyzxx|{t|~}|w{|npwvso|xrzxpvwuv{{ywypnzzrhfouusvmp{u}ǾǾÿƾ¾ysmhffeks|{tmigedcbbaaabbbabcfinswz{zyxy||qoqw{xvrmha[Y\\enswxxsonjjnvy|xnd_\\\\[[\\`chntz}|umd^\\ZZ\\_binxuieegotvtnfbbdipy}gif\\MGHMXZVQJFIRX]^XMGJMQSTWZWMEHOUWYWRS^e_ZVX[[XSZbje_cbX[`][XUUZ`bef_[[bgkoqonnopkeegilkc^`baba[Y[affgffefiowwl_[[]_afnqokggike]Z^befginokkjjknqpkikkiheadhjmmllmntwnkv|rifgikhcabgedcdhnocXZ^dknkflrk_^ee_[_dgbXPQV]elprpopojbehjnstqmhdccabfkllpspkijkifb^`cda]\\`c`]`abbekmkghfc_^^`bbjppkc`cee^X[dkkic[WY_flqrlhilsxqle`abdkmqwujdecdfgecbjxzuqomtwnefkkjlwzrmorlcaaba`^\\\\^``Z`qm``cdb_dfa^^``^ZTRTRKGKSWX_hjc\\VPNXdhbZVS]lof^_gkon]PWeokdfhdbdeeditytlg`V[gkkluzwvsoqtspnlgbhqrloxytuwpgn{vompzqpsppty|ynksvuuvonoq~zldbhnmhlrsoj`S\\lidho|xefidbbcdaajne]hqwtmiikkknzyolmu|lv{lccjX_wxv]TdkowvsqYNPmsa[]WKNU]mugVPV\\SJPRKINQJEEDEEIOPMKNOH@IUXZYMBBEJPQPOOUYYTIFKSW`_WY\\PNW]]Ydyneowy}y}~zw~~||}~vmpmqyqkeejktyqkaWVahfhbRScihlplnq}|c`cie_grumjy|qhXR\\elwxyzvyxvyhdjsrnpkt{{{t{r\\crpoyvrwxzy}zq|}|}yz~osyxvs}ws}xpwzyz{}zz~mpzwsmhquuuwqt}~ǿǿ¿xqlgefeir{|tmieccba``__`a``abdglquxzyxwx{vnnqw{xuqlg`[Y[clrvwvrmljjouy{vlc^\\[ZZ[_chntz}}vlc^[ZY[^`fmvwkeegouutohddfjry~egcWKFJQZ[UOHDIRZ]]VKHJLORUXZUKFIQUVXWSU`f_XWXZZVRYbha`ec]^a[ZVSTZ`bdd^Y[chmpqonnpofaelnle^]bc_\\[YZ^dfffefefkt|vgZYZ\\`flqolhfikia[Z_befimpqnkjjkppkfgjkjga_djnnmkjmswrimzyneeghkfbacedcbcjomaXZahlnjhmqf]`fd_[`hjbWQRV^glrsrqqpkchlnruurmhfeedegkmqttokkllid`_adfc_]`c_]`cddfkokijfa_^becdjppkc`bcd^X[dkkhb[WX_fkqrkfgks~vpjdba`cimrwvi`dccddbaaguzusqrurhdilmlpxzrmquneb```^\\Z\\_`]Zlyh\\_aa^]cd^]^^^]VPPPKFFLRUZchd]XQJM[dd^VPVemg_\\`fhlj[QWdlifffcacggcfsxrke`]ahkjkvysrpmouspnlhfltqlpzzsruqgp|umlozqoqpruw|zmltvsuvpnor~zjdbhonhlrsoh_SZhfdhnzyhegb^_ab`aimbZepqnhdegfio{xoloy|pzyqceo_dwvv[SckowxvnWNUxu\\[]QIPU]lqcVOUZQHLNJHNQLLHBFEGNPMILPLBFRYYWNDBDIOPPQQVZ\\VJHLRV`aYWZRTY_c\\kqhszy~{y|}~|vw}{|}{|uqvqsxnhffijktysbVXcgefaTXfihlqlksxa`acccirohn{{rfXUahlxwz|}yyxgfov}rsmu}|}v|r^etpqzsqww|z|{rz{|~zv{{|zzxtxv~~}|~~umxywuqnrtw|zy|~ſĻüſþxqkfcddhpzzslgdbba`__^____^_`cfkpsvxwvuvzvlmou~{wuqmg`ZXZajquuspljiiouxz~}tja\\ZZZZ[_chnsy}}wnd^[YXZ]_ekt~ymfegqwwwskffhmt{cd`UKHOW\\ZTMFDIS\\^[SJIJLNQVZ[SHFLSVUWUSWcg^WWXYXTQYcf_`geaa`YYURRY_acb\\W[djpsqnllokdbhqqh\\Y^bc_\\YY[bhhfedeegnyuaXY[^djproieehhc]Y[adglqsrpolhhlqogcfikje\\\\dmrojhimrsifq{|tgbegjjeb`cccbadkoj^X\\cjmmkknlc`ced`]`ilaVRTX`insttsspkeiortvvsmihgfffilntwsmlmnmha^_cffc_]`c__bdedgmplkkga_`ficdkqojdabde\\X\\ekkgb]XW^ejrskeejr|}toidcbbbhlrwvfY`b`acb_`gtzussrqlefknmosz{rnqvpgc^^^\\[X[__\\fxsa[_`_]]a`Z\\]\\\\XROPLECHNQW[cf^ZWMGP^c_WPQ\\ika[\\_bejfYQVchgggfc_cihbdrwqjda`djkikvsknmjnuroomjkqupms}{rptqhp{tljlz~onppsvw{ymmuvsturonryiedhppjmrsoi_TZdddhlxyide_[[``^`hl^Xdllidbccdho{woko{|tzyxsbhs`iwvtYTcjqwutnYP]u[][LJQU^loaTPUVMHIJHIOPNOHBHEENRLJLPNDBNYWUQIDDIMORSRV\\_YLKMPU`f[UYZ[\\agatrlw|wzzzz|ztu|y||zz~vtzvutjfggiheuxbW_gfceaW[fiilrljuua_^`cfmsjes{qcY\\ehm|vy~|}vgisxwxpv}z}r_hwqt}poxw}{|{uyz|y~~yu~}uozyuwtsusz~}{ſſ¿ùyqjeaccfnx~yrkfca`_^]^^^_^^]]_cfimruvusstytjknt|yuspkf`ZXX_iossqojhfhntxy}}si`\\ZYYY[_bhnsx|~yoe^[YWY\\^bir|{ohffpwyywphglqw}ba]VMMV\\^ZSLFCJU^^XRLLMLLPV\\]RGHOSSSUUV\\ecZUVXYWSRZcd_elhc`]YWSPR[_`a`\\Z]djopnmkljeaelqkaYY_b`^]\\]_dhhfdccdjtp\\W\\^fknppmjgcbc`\\Z\\afmsvupnnmgelqldaeijhbZ[fprmgfjnoldgu}|pb`fhhgdb`accbcfknh]Z_dilmlmoibbded`]cmm`XWVZbkpvwuutokhlsvtvwtnjihhghkorvxqknoome^_bdhfe_]`c_`efedgmolkkhaaciidfmqohdacde^Z^ekkhd_ZX]cirskeehr|{uqicddbdjprutiZ^a__a`]_gtyusssphbgmnmptz{trvxpib[Z[[ZW\\_[]vk]Z]^]]^]YX]_]ZTNNOG@CJNRW]bb[VSKHUbc[RNSblh]Z[^`cidWQV`cdfffb^cigbeqtoidbbejjgktmfjjhmuqnnmjnsuqot}zrospjqzsjimzxklnptuv{xmmssstsqpouwigfhppkossokaTZccdfjvxkdc^XX^_\\_jhYWejie`^__bhnwslip{|wwtxvdjvhmxvoWVaiqunmr\\Sir[^WKMRU^km_RRUTKFGGGIOPNQIFJEEOTMLMPOF@IYXXUOEFJLRXXUV\\aZNMORWemZS\\_cbeih~~sq{}xzzxx|yqs{x{zxz|vy~xuofdimkfdyze^fhdbheY]fiilrlivq`_]`eiooghvra]ehhs}vy~uhmxy}ux~raj|uv}onzy~|}}vy{|{x{w}yxy{ztv~|xſ÷û|rjd`abdlu}~}wqidb_^^\\\\\\\\]]]\\\\[]aehlpsttrqrxrjimszyurokf`[VX^gnrrpmihegntwy|~{qh_[ZYXXZ^ciosx|~}zqd][XWY[]bhq{{qjgfpxz{yrjgmrw~b`]XOPX^_YRJDCJW^^WQNNOMKPW^^PHJQSQQTV\\ce]VTUXVUST[ba_klhd`\\YVSOR[_`_]\\\\_cjpnlkkkib_gpme[WY^`^]\\[_bejhedbadmxjWV^clopqoljga_a`][]cjptronomiefmof``cgjf_\\`murjfgkonhely~xi^bhiebaa`_aacehlle\\[bgjlmmmle`bcdd`^grk_ZZ[_emsyxuvtokkpvxwxxuokkkkjjmrtvwqmopqnd]aefige__bd^]eifdilolklh_agkiejoqmecaaef_\\^fkjieb\\Y]ciptmecgr|{wthaefbdpvrrtj[\\`_^_^[^dqxvsppmd_gonmqw{|wx|yrjcXWYZYW]^Xci][\\\\\\]]YVZ^_\\VQMMKC?DJNRW_b^VRNHJYa^WONXfjbXWZ]^agbUPV^abcdea^cihbeorngbbcgkidirkehhilpollllpssoru{woospmqwrhem|vjkmptsv|xnnrrrrrrqpzvjhgjqpmqsrpocTXcddgjtxlc`[UTZ[ZakeWXeheb][Z\\`hksoggp{~}xurzvfl{pnxudWYahqujfvdWum\\^TJQTT^kj\\TVUPIBCFGHMQQRONKEEPWOPOPPI?FWXYXTKGIMX`^ZVZb]QQTY[js]R[fojgjo|ss|~u{yyvxyworyv{~ww{|{u}yphdenrmeh{igmkc`jh\\_fijlqkhyoa_\\`flpmfkzs`cnjj~zwy}vjq|{zy~~scmyw}om~|{~xw~{{}~sw|v|Ĺ¾Žÿļukd_``bjrz|~|vohc`^\\\\[\\[[\\\\[[ZZ[_cgkorrspopv~phgkrzytqokg`[WX^ekoonlihefmtwx{}~zph`[YYYY[_djosx{~~zrg_ZXVWY\\`foz}skhgnwz}{vnlotydca[TU[_^YPHCDKX^]UQPPPNKOYa]PJMSQOPSZ`ecZTRTVTRRTZ^_cpmgd`YWURPT]_^\\[[\\`cjomjjjjg`aimg_XWZ\\^^]\\\\_bgjhdb`bhp{~dWZbgmmopnjieacb_[]ahoqonnpqlecioka]^bgie_]htvqifhknjdfo{~ra[bjhb_`a`_`acfhlkc\\]chklmnnicbbcdd`_jod][\\^biptzyvvsnklptwyywsnkmmlkloruwupmopoja]bfgigd__bd^^gigdimmmknf^bjligkqqkcdb`gha]_hklhfd_[]biptngcerz|yug`fhbesxposj[[bb^]][^dovvsolf_ajonnsy|}y{yrmeXUXZYX][Zrzc]\\ZZ[]\\UU\\^\\XROLIE@@EJORY__ZSOJEM[`ZQLP^ie[RTY\\]`d^TOT]_^_bd_\\ahf_dnqld_`bgjhcfplcegilmmkjklpsqmpx|tnnrpopumacq}|qjkkotsu|xoopqssrsrs}skigkrqnqssrpdSVbeeghqwla^YSQWYZckdVXdea^[XWZ`hgnmfenz~}wrrzxiosmxtaW[`fmqifwn`zna^TMTXW_khYWXTOHABEGHMQRTTXOFJT[UUTRQOCCSW[\\[PGHQ`jf_VYecXZ\\`amv`Saptlimt{us|~rwwx}vvvsnrwu|zrv{{wwjeehsvlgs~omtlabig`bgikmqhhymb^\\bhpqhcn}ubgslmyx{{ulr~}|{|thp{y~ok~|xw{~yy|wy÷źþɾ¿¼ý¿~}~~~}~~~~ymd^^^ahpw{~|vohc_\\[[ZZZZZ[[ZZZ[^bfjnqrqoopv{oggipx~yspnjfa[WW\\chlnmlhgdfltwwy|~}wof_\\YYYZ[_ejoswz~}ysg_[WUUWZ]dny~tmiipy|yrptx}eec_Z[^_^XPGBEMY_\\USSRRNKQ[a]RLQTOMOU]ceaYTSTUSPRSX\\akwohf`VUSPRV[][Z[\\\\_ejkjghjhc_dihaZVWZ\\^_^]^aegjhb^_djryb\\bfjklopnjebdfb]Z_imoolnrspieglle^^`dggfbdotplhghkkgbhs{zm^Zcie`_^`_`aacgjkib]]dijkmonfbbcbdd`bljb__`afkptzzxurmmprsty{uomknmljlptvwsnmoolg_\\cfhigfaabc_bghgfilnmmnd`eklkjnqoiefdaghc_ajmljgfd_\\`gnsnhbcqz}ztgbgjhisvnmsk]Zce`\\[Zaemtwtpkb_elonns{~}}zrphYUY[[[\\Ya~o^[YYY\\^XRV]]ZTMKHC@@BFKQUZ^[VOKFFQ]]TMMWdhaUNSZ]\\]a[QNSZ\\[]`a^[_ed^cnpg_]_cfhebhpi_afgikkjikmpqolpwxqlnpomosi`hv{wnhjlorqv|wopqquursuz}qljjnsqpqrrtqbVYbeeffoum`[VQPTXYcjbVZca]\\YTUYbgejifgmx|spqyxnutmxr`[_aejkdfwyj{~mcaWOUZY`jfZVUPPJACHLMLRUV[dQHQ\\aZZYUX]NFQY`ccWHJVhsneYZjibcddeq|gYhstmjnx|wvt}|nu|vu~|ussqnrtt|tnw{{{whfinwwon{spwmbdigeegikmohiyma\\]dktncduwelxoqyz|y~unq~~~||zvls|{~ol}{zy~~|}}wuż¹õ~|{|}~|}}~~}}}}ne]]\\_fnu{~{vohc^[[ZXXXXYZYYXXZ]`djnpqpnmowzogfgnv~{spmifa\\XX[bfjllkhgdelswwyz}~|vme_[YYZ[\\`fkoswz}}ysh`[WUUWX[dmy~uokms{~ztsv{hgda\\[`a^VNFCHPZ_[VUTSRNKR\\`]RMSSNLNU^ce_XTSTVSOPRW[gt{ohf_VTQOSVZ[YZ[\\\\_ejjfdfhgc`fie^WUX[]]__^_bfgif^[_ektvb^ehiikoqnjc_efa\\^airnmlnqqnheimi_[^aeffffkrrlgghiiihglu{ue[_efc^]]^^`acfjjhea^_fjjkmojdbbcbed`dlhdbbbejkouyzyupmnqsrryztmllnnljlrvwtqnooole]\\cghjhfaabb_ciihgilnmpncagkllkoqnhfhgfijdadknlkggg`\\^fmrnibaqz}zugbgkmmtvmkqk_Ychb^ZZafmtwtpib`glnmnt{~~yrqjZVZ[\\^ZXo|f[VUWZ][SRX[[WPIFC?>?BFKQW[\\YTMFBJW]VNMR]ebZOLU]]Z[]WMMSXZZ[]`]Z]bb]cnnd[[^befcbjof]`dggghiikopolkqusmkmnmlmmebnwwrkgikmppw}unppouwssw{plkkosqrrrruqbVZcffddmum`YSPPPTZcf`X]c_[YURSZegafgfilwznnqxxrzpltm`accehe^dvqx|mdf\\QX\\[`gb[VNMPJAGQSPLRZZajUNZdfa`_^ch[MT`fik_NM]pzuk__mkiiiiisrdnvtolo|{tvw~xktyss|{ropomoqs}~ply{{~whhmtzzxyrrxpdejiihhilnngjym``dhowlaizyjp{stz{~x~}vnq}}}|{xqv}|qm}z{{||w|~xvŸù»¿~||{{}|z{|}~}}~~{|rf]]\\^emu{}zvoha\\[ZYWWWXXXXWVWY[^dilopommowynfefnv}{uqmhe`ZWXZ`fikljfedeksvvxy|~}ztle_\\ZZ[[^bgkqsvz|~}yrh`\\XUUTWZblxwronu}{vuy}jjfb\\\\`a]ULDFLS\\`[XWWTQMJS]b^RNTSNLOW^cb]WTSTURNORX_mxymge]VTPNSX[ZYZ[[\\_eghedehfabihaYUWY[\\]^^^_bfhhb[[agmyr`^dghilpplhb`dd^\\afjnllopnmkhgmod[\\^afhffjorngefgggggjpuyq`[afe`\\]]]_`behigba__bfijknmhdbbcbca_flhedccgkkouyzyuolnqqqsxyqlklmnjhkruwsnnmmmgb\\\\cgijheaaba_diihghknorlbcgjllmqrmgfhijijdaeknmkiih`[`flpnibaoy|ytidimnpttnlmjaZdkf`\\Yaiostqpkcbfhklmrz~~~wssl]W\\^^^W\\}wbXUTW\\\\UPTYXWTMFB><<>BFKQX\\[WQJEDMYZRLOW`c_TJOY_[XZZRKLRWXXZ]`\\Y]a_]dmlbZZ\\addaajne]_bceffghjnpmikpspjjlmkiljcdpwumggjkmnoy~sjnqouwrszzplkkourrqqsuqbY^efgcdmum`XQNMMRZcd_[^a]YUQNQ\\fc_dffjkv~slmqwxt{{kjoldhefff`\\dr}wvxjcjbU`_]afb]SFLRLAM]YRNP[`fkZYhliigihkoeV]jlmogSSfw~zpfgllmmnmmsymsutqmn|yuxy|thrxqqzyokmnlnos~{lk|{z}{~xjlty}{|{ou~sffkjkjjjlonhly{mchmkqxmcm}{ls|uu|}w|{xpr~~}}}|{sw~tm~y}}{y}q~}|~|{ķǼȾŻ}zxyz{}~|z{{}~||}||xxwj^]Z]dmuz|zuof`\\ZXWVVWWWWVUVVWY\\agkmmmkkovwleeelv|{uplhf`ZVUX_eijjhdcbdjrvvyyz|~~}}xtle^\\[Z\\^_dhmqsvx{~~|xskb]YVUTVYblwysrrx~{y}lkha]^`a]TKEHNV_a]ZYZVPLKT_c^TPTSNNQY^b`[WTRSSQPORYdsxsifd]WTPKT[`Z[Z]\\\\afeddefgfbcie]XVWY[[]`_^`chig^X\\chpl^]cfghmqojfacfb[\\fjkkklppmkjijmj^W\\`cghgioqnieddeedeglrvvl`]aec\\Z]]]^`dfhhe`]\\^aeijkljfdcbcca]_hmheeefikkovxywtplorpotyvnjikmmhfjswvqllkhhd^[]dgiigd```aafijhhijmprkdegiknosrmgegikklfcgmpomklj`[`fjonibcnv|xqjfkpuwuspnkic[dnjb]Zckorrqrndbddilkox|~wrrl_X^cb]XgscVSTX\\[RQXXUSPJD@<;<@CFKQY[WQKFDFOXVOKQ[a_WNIQ[^YUXXQKMQTUUW[]ZW\\`^[dmj^VWZ_ba_akmd\\]__addefinohglpqkfhllhfhc_grtpjffhlmkm{rhjprvwrvwokjkpwttqqtvpcbcfghccnsk_VQLLKOYab^\\]]ZVSOKR`f^]defkju{mhlpvvv{vhjkkjlejhf^Ybp{ztreblh[dbacff^LANUPFUj_VQM[gkldflpqonorsto`alqstk[]o}{rklmopqqqrwyqttsson|xuxyzpeq~}tnow}wmhjkklnt}xil~zxvv~~|}ymqx}~|}vnzvgfklmmlkmqnjo{~ynfnrnsznfr~|qvzux}x{x|}ps~}}|~~}ux~wpz~~~zx}k|||}ƾ̾øǼywvwxxy|||~zxxy{~|{|||zyvv|~pa]Z[bkvz{yuof_\\ZXWUUUUWVUSTUWY[`ejkkkijnvwleeelu{|uplhe`YTRX`dghjhdbadjruvxy{|}}{zwskd_]\\]^_aeimpsvwz}}~}xrne^ZWUUTX`kv~|utw}ljhb^`ed\\QIFKT[cd`Z]]UOKLVbc\\TRTRMNSZ`a_YVTRRQOPQSYfvwpgdb\\WSPOV[\\\\[\\]\\\\beecbdeedddfc[XWXXYY\\a`^`fihc[X]dirzd[\\bfghmomhc`cf`Z_ikghkqrojijklkaYW\\aeghkpsoiheabdcbdhmsvpf_^bb]WX[[\\^bfhgfc^[[]bhkkjjifcbbcc`]ajmhedfhjlkpxxwwsmkprnovyrkihikkgejsxwokmkfdd]Z_dgihfc``_`agjjihiilpokdfhhknptslgefikllfejopponolb]bginojbenv|vojhls{|vqspkhc]dnke_Zbkprqpqlebacikimuz~~vrpj_Zaif[_v~o_TRUY\\XQSXVRPLFB><:<@DFJPXYRKEDEIQVSNNT]`ZOIJS]\\VSTUPMMNQSSVX[UT[_\\[engXQSV\\__]bkj_Z\\\\\\^acddiokehmpogdfkjecd^]jspmjedhlmhm~rfflrvurv~tljjlrxuuqntvjbhgcfhceprh]XOJLGMX`^]^]ZVSQLJTbc[[ddfkjsvifkottwwpeggilmejje]W`pzzqmdbjh]cdbdef^ICQWXRatdYQN`mlnmmmsxuqrvwyvidmtusndhw{tpoosuutuux{xtusswpo|~wtvwwldo{ypjlv|siegijkmu|tfmxsst}{{|~zqu||{}sqyhelmooomospmt}}wolsuruyniu~vxywy~xz~wyqt~~|~w{zt|z~|~~xw|}gz}|{{~~ƺɿ½~xvuwxwwzzz}xvvxz~}zyz{|{yvtw~uf]ZZakvz|zunf_[XVUSTTUUTTSTVWY[`dhijihilt}vledejsz}voigd^XTPV^cghhgdbaciqtuxy{{||{yvrkda^^^`acfjmortvy|}~}ytof_ZWUUUYaku~xwyljhdaegbXMFHPY`iid]_]UMKNXbb[SRSPLMS\\``^XUTRQPPPQT[huvnfc`\\XTORWZ\\[Y[[Z\\bca`_bcdbccda\\YWWWVV[a`^`bfc]X\\aejun[W\\aehjmnjd`acd_\\bhhfgkqrmgfjmkcZWY^begintulfhc]_aabdhmttjb__b_WTWY[\\_dhieb^ZXY\\cjmmkiieccdda_`fklifegiknmryywuoiinnkpwxpiffehidcjtxuokljeb`[Z_efggeb__^^agjjihhhlpmifhhgimotungefhkklfekooppqrne_dijoqlcfnx|tmlhlw~tquphgb]fnkgc[_irspmmlfa^`ghgjpw{uroj__hmc^lykZQSVYZURVXSOMGC@><;=@CGLRXUNHCCFLQROKNYa^TICHW^XQQRQOMLLNPSTWXRRZ^[\\flcTOQUZ][ZdlfZWZ[Z\\`abbjniehnnkebejg`__[_mpljhddilkfmocbkrtrqx{qjihmuxutnmutc`ljaeieipmb]XNLJELX]Y[^\\VSRNGJXdaZ\\ccejlrqfejnprsokbcbhmmejle\\Xaqwvkhfdge]cddegf\\OPUYd`fykVN[jnmprpmt}wsuz{|zqlrwyuqmt~~zusrtyyvtvwuvwxwstysp|wsuutibmxulgjuyoeadhhhku{pfqtpqt}}xx{{~}w{{x~~vpt{hcnqooqoosrpw|tqry{wvwolv~zzyyzzy}}{vwtu~|~v|}vx{~||uuzydy~|}|zzxxzzŹʿ¹¿¾½}wttuvvvy~yy|vttvz~{yyz{|ywrqrxzla\\[akuy|zuof_[WVTSSSSSSRRSUWY\\^dhiiihhls{ukddekrz|wqhec]XTPT\\bfhhfdc`agosuxy{||{{xvqjea__`adegiknpsuwz{~|yupg`[VUWX\\dmv~|y{ljheegf\\RKGKV^elld[`]TOMQ[db[SRQOKMS\\`^[TSQRRQPPRU^jwvmeb`\\ZSMPY_[VX\\[Y^dc_\\]bcdbbba_[XUUTSU[`_^^`b`ZX^bgmzy`TV\\adfilmha_ced]_fgdehmqqjeeijeZVXY_cehlpsphfh`Z]`aacgovqe__`b\\SSWY\\_bgjib]YWWX]cioojhheccdd`^dkmljhgikmnpuzywtkfillkpwwphfeceebajvwsmjjhc`^ZZaffedb`^^]^bgkjihgglpkihjhfimotvnfefhkklgeknppprsnhbdjjormdhpz|sklinz~ttyofgdagnmie^^gruokkkfa]^ehfgmuyspmicdklegw~|viVNTX[XTTWUPLIEBB?<<>BCGMTWRKFCCGLQPMLPZ_YOFBK[^RMOPPOLLKKNRSUURRX\\Z\\gj_RNNSY[YZdjbYUWVWZ^aaekmfcinojc_cgd^\\\\\\clljiebdkmicp}kaajqqrryyoheelvxtqlmuo`boj`ehekof[ZVOLHEMX[VY[YTSQLEJ\\f`Y\\dbejlplbbhlnqnig^]_hmjekld[Xdtvpghiffc_cdfghgb^]W\\medyrXTfsnmpsplt|xvy{||{wruz{xuv{}yvuvw|zvtvwtvy{xsv{tp|usttrgalvsjdhsvla_cgeelxxift}qops{~}zuv{y{~|~wvysor}}fcrtppsqpssryzqrv~xtuqow{zyz{~~xzzywxwx~~~uz~wt}}~~zrryuaxyx{zxwvvxwǽĺſÿ{uttuvvux~}ww~{ussuz}|~{xwxyyytpoos|re^]ajuz}{uof_YVTSQQQQQQPQQSVZ\\^bfhiihhlr{~ukccdjr{~wqicb]XTPT\\aeggfba``dmqsxy{|}|{xtpkebabbdfgghjloqtwyz{zxuphb]WWZ[_gpx}~~~jigghgdZPLJQ\\cjomdY_^VPNS_ebZSRQMLOU\\`\\YTTTUTSPQSX`mxvkeba^ZSLT^_XTX^[Y^da]Z]abcba`_][WUSQQT[_^]]^`]ZX_chqoXRX\\acegijg__deb^afdbdhnqmd`eje_XWXY^cgmqroidfg^X[_`adhnsnb^ab`XRSUY]`dijf_ZVUW\\`ejoojgfeccdc__dkmlihghlooquyxwrjfhkllrxwphgdbcdaakwvqkiigc`^[\\bedc``]\\\\[]bgkjggfglpkhhjhfimosvnfdfhjklgcioppqrsojefhjprmcisy{qkljp~{rw}odedfgmnmib_eqwrjhif`]`ffcelsxqnjhffjllu|}{ugQNX\\[WTVVSOJFDDD@;:?BCFNVWQIECCGNPOMNU[[RGADQ\\ZOKNPPNLIHINQRRSPQWZZ^fg[OLMRWXW\\ff_XUTSSW\\_bfmlfehnkfb`bc`^][^gkjhgc`dkmgduva\\ainooqx~}xmdbemvxrlhltm`eojaegemm`WXVPMFDNXYUUWWTSQJDK^f_Y^faejkoi\\ahknnjdb[Y]glgdklcZYfvsjfkkfca`adfihnrkc\\cnfewsa_ntnlptokszxxz|||{wux||zxy}|yxwxy}zttwwtw{|wuxztp}~tttsqe_ktqidhqrh^^cfbbnxpchu}zoomq{zxxtuzvv~qv|supp{{igstrrsrortt{vnt|xstssz~zzxyzzzxxxy~z|~}~uz~wr|~~|xoow~~t`uvvz}xusstvv~~}~}»Ƚ¾¾ÿ¾xssstuuuyztv}ztrqtz~zz}~zvtuuwwtollouvia_aiuz}|vog`YURQOPPPPPPOQTWZ\\^adghhfgjpx}tjcbdjq{xphba\\XTQSY_ceed`__^aimqwxz|||zxtojecbbdegghijkmptvyz{{xvrke`ZZ\\^birz~~iiiiifaZSQOWaglokc\\][TOOXdfbYSRPNOSW[^[ZXYWWUTQQTZcowsjfdb^XQP[`^WUX\\ZY_b_\\Z]`ab``_]\\YTRPNQV[]\\[[\\][YY`eku~fTSY]`abehgc_`dda_adbbdhmnh]\\eh_YXXYY]dksvogcdgcZX[]^`cimph__bc]URRTZ^afihb[YVUY_dhlpnifeccddb``elnkhhfhmpqsvvutpifhjlmrwungfdbaaaakwwpihheba^\\\\bfdb^][ZZ[^afigdfggkmjhjkgehlosuoedfgijkfbhopqrstqjgfgiqtkekuyxojklsyrymbddehlnome`drysjhif^\\`efbejpxolihffjmox|~scOQ_`[YXURPLHDDGE>9;@BDHRWSKECCCGNPLLRY[WNB<GV[ULJMOOMJGFINPPQROPWYX^fdVKJMRVVV]geZTSSPPUY\\dgjiddhmib_```][[[`ijhhe_^dlleewp[W`hkmopy{{via`fpwunhcislbgnibegiok\\SVRQPGDPXVRSTTSSPFCOcd[X`fbfjjleZ]chlke`_YY]gkecjkb[\\grngeoldabcdbfjlvyqliklgjushksqmnrspnrvxxy{||zwux|}yvx~}wwzxxy~zttwwtw{zwxyxtu}stsroc_krngchpnc\\]bb^bouiakt|vlkiqztpvsrvrr{zrzsoxqo{}xmlsssrsroptw||ply~vsuuv|}zzywzzxy{{}z|}|~~v{xs{|~wmks}{}u`ruu|ytrpoquw{w||y~ÿ¼~vrrrsttuywsv|zsqoqw~yxz~~yusrruwsnjjlpz|mc`aisz~}wog`ZTRQONNNOOONPTX[]_aceffffjow|sjcadjq|zphb_\\XUSSY_aced`^^\\`fjruwz|}|{ytojfcbcdegghijkmosuxyz{ywsmhc^\\]`dmu|ihkkie_YUUW]djopkb^\\ZSMP]ghbYSSNMQVY[\\YZ\\]YXVUQQT\\fpwrihfc]UOU^c^UVW[YZ`b^[Z]_`a_^\\[[WQOLMRXZ[[[[ZZYY[afmy}r[QTZ_a__chf`^adc__bcabdimlb[^fcXVXYYZ]clttka_dg_XXZ\\\\_djnlc^`bb[SPQSZ`dgge^WVTVZ`gjnokfddcdddc`ahnlihhginrrtvvsrngfhjkntvrjfed`^]^`iuumgffc`_^\\^cfda]ZZZY[^`fgabgfgkkihjkgegknuwoedfghikfbhppqrstrlhffistkekvytnjkmuys{maddehlnqpgcft{tkikf`^cgebfjownkhffglnpx|~|q]OXeb\\[ZTONIFDEGE<9=@BELWWNEA@BEINOJJSZXQH?>HWXQIHLMMLHFEINPOPROPVYZ_fcRHJLRVUXah`TQQPMNSVZdfgecehkfa_^^]\\ZXZbjihid]]emiaj|~jWV_hkkmpyxzuf^`hqwrlfckqhaikgcefjoiXRURSPHJSXTPQRQRSPDEYh_XYbfbfjjg]WZ`flh`^\\WX^ghbcjia[\\goliiplc^dheagsvyursnlljntsrssomossrrqtxxyz{zyxux}}xtw{sv|yxz{ttwwtw{xw{zxtx|stsqna_lqkdbipj_Y]`^Zbppbamt{shhgoxplusnsqrx}vv~{lryppyxupottsrsqnqux|zno~{vsuwy~~{{zwz{vz}}~||}{|v|yuz~~~{wlip}{y}u_ptu~|wqpolnux~vy|s{{v|Ľſ|toopssttyvqtzztpnqw~~xwz||wrqqruurnjjjlsreabjtz~}xogaYSQPOMMMMMNNOSX\\__acceeeehov}{ribabir}zphb_[WUSSX]`acb_^][^chosvz{}}|ytokfddddfghhijkmortwyz{zytojd_^`aemu}iikkhd^ZXX[ahmmlic_\\XRLRajhaYTSPPSWX[\\[[\\\\ZYVTTRU]gqvpihfbZQNV^`]VVXYYZ``]Z[]__`^[Z[XTPMLMQVYYWYYYYXX[bhpyxdROTZ__^^bgd__bdb``aa`behki_[`c^SUXYY[_fnsri`_dd]XXZ[[_fkke^_bb^XROPSX^dfea[USTVZahjlmhdcdefedcacilkihhgimrrssssrlgghghmsuqiefea\\\\\\]essjefea`_]\\^bdc`ZXXXYZ\\`ee^_deehjhhjjfdgkmuwodcefghieagpppqrsrlgedgpriekrtqkhjmtxu{k`dddhlprpjges|vnjkhfbdfcbhkl}wpmhfffknnt|{}tfNXea\\_`VMLGDEGHB:;?ACHPXVMC>=CIKLLJMTWPG?<FOSTNGFJKKJFDDHLMMQQLPVX[`d^PIJLRUU[dg\\QONLIKPTZbeeccehhd_^][[ZYW[cjighb[\\fng_m~veVU]fkkloyxz~sd]ahqupjdellebhigdefjoiVQSTUPJOSURPQPNQRQEE^l^T[ehafiheWUX_eje]\\]TY`fgbdjh`Z\\fnomppj`_jlebj|{uqrmllknrrtwrnnostsrqvyyxzyyyvsu}~xsxyqv|yxz~{usvvsvzww{{vt{{rtsqmaanoicdjnfZX\\]ZYdpj]ams{~ogeeowmhrqlpppyxw|skwxmqvtrpqtsqpsqnqvxyvquzvruy{{|zvx{v{~~~{{}zyu}zuz}~|yxkgoz~zw{v`osw~{upnmkmtw{yqxzr{zu|¿ƾ¿¾yrooprsssyuqrxzrpnqw}~{}wvy{~{tpppqstqmiiijq~vgbcjt{}}xohaZTQONMLLLMLMOSX\\_abbbddddglt{{rha`bis~zphb_[USQSW\\_ab`^]\\[^dhmrvy{}~}zuokhfddefhhhiijlnqtwyzzzxrmid_`cfmu|kklifd`]ZZ]fnomkhc_\\WQLXejgaYVUSTUVY\\__]YYYYWUVWZahosokie_WNNV\\]\\WWXYZ[__\\[[]__`][Z\\WPNMLNSXXVTVXWWWWZbktxp]OOSZ]]\\]ad`]`bbb`````adfea^[_`UQTWXZ[dnrqld_ad_YWYZZZ`gjf_\\_daYURMNSZadd`[VSQTY]djkkjfccdfffdddfhkkiggijmpqqpqrpjffffflstphefe_ZZ[^gspidec_^^]\\^aca_YWWXXX\\aec^^bddhjhhlkfcehltvmccfffggc`goppqqrrlgdbfnnedlqrnhgimu~|xv{}k`bcdjnqtrjihv{vqmkhebehddijluqnhffejmls~}{rfV_fd]bdXLLJFHLJ@:<ABEMTYVKA=?EJLLJJOVTJB=AMSQNKCAHLKGCCFIJJKQOKOUWZbcZOKKLQUW\\eeZQMLJIKPV^ddccdfhf`^][ZXXWV]eihgf_Z^ildao|n]SU]fijloz}uz|l_]binqlgdchgcafhifffiogVMPV[RMQSSQPRNMRRODIgo[QZihafhgaUSW_dh`Y[\\T[cecbfhgb\\\\elortogcenmebn~~tqpljkmqqquyrnopstsrrvyxvyyywtrv}|vry}uqw|xwy{wttuustuvx|ztt~yrsrqmbgqneafkkbXX[YVZgmb[clq{widcepthcmljnln}ypwzjkwskquomoqrqlkpqnowyspv{}xuruz||zvxw{~}zz~z~xu~zvz||zx~xlhnw{|yuyxco}uzztnljimtwuvow{s|yw¿xpnnpqrrrxuoou}{sonqv{~|yy}~utwy|ztonoqrrpmhggflx|lfdlu{}}xpibZTQOMKKKJKLLOSX]`bbbbccddejry{qha`dkr}zogc_YTRQSVZ]_`_^\\[[`dgmrvy{}~}zuolhgfefghhhiijmnqswxxyzxtokgcbfjpx~mnnhdca`]^bkrsojgd_\\VRS_jlf`ZXXXXWVY]cc]VVYYXVX[_ejnommkd[SLMVY[ZYXXY[]_][[\\^___\\YZ\\UPLLLOTXVTRTVUUUVYcoyvdRMNSZ\\ZY\\``\\[acaaaa^_`add_]\\\\_[QLRWXZ\\hrspia^cd]VUYZY[bijcZZ`c_WTQLMT]dda\\WTRQW^agkkhfdcbdddeddefghigfghknoppnoomidccdflstmgeec[WXZ_hqlecda\\[\\\\]_aa`]XVVVVX]bc`]^aabhjhhlkeabejsukbbffedea_goqppoqsngcbfljcemoolhgimu|zxv{{j`abdjnqvskklv{vsomiebgjghkintqmiggfjkkt~wpkbgje`dc\\PMLLLOJ>9>BCIQXZTI?;?HLKJJMRVPD==GPROMH??HMIDACGIHGKPNLPTW[a_VOMLLRVW_fbVMJIHJMSZadcabdhhc][[YWVWUY`egggd\\W_kkacqvfWPS[eiilq{~ytzyfZ[cimmidbdfcaadhigfejpgTKPV`YRRRRQPQMKPPMDMkoYO\\jjbhhf_URV^bb]ZZZVadbccfgfc\\]dkotvmehmmifep}usqkikosqq|yrooptttstxytuyyytqrv|{tq{zpqy|xwywustssrqqtz}zruwqsrqlfmslbbhlh^VVWTU_ki\\Ycko}ofc`fpobaihikippkzrdlskiqqhhorqnggpqimzzkl}}{{usrv}~}}{wwx{|yy~y~}~w|}ryu{zz~xu{xmimswywsv|zgo{tzysligglsvqqrw{s}{z¼ľ¿wolnoqrrrw~voos||sonpuy}~zxz||truwz}~{zuonnoqqnjfdedjtrjhow|}}yrjc[UPMLKJIJJKLOTY^abcbbbbcbcipw|ypg``dkt~zpjd`ZTRPQUZ[]^^^\\\\\\`cflquy{}~~{vplhgfghiihhiijmnpswxwwxwusnlihjnt{psnecbdc_aforqmkif`\\YXZelmf_\\\\]\\YXY[`da[VWYZYY]`aeimooolcYQLNVX[ZZYYZ\\_a_\\[\\_aa_[YY[UOLLMRUUSQQSTTTUV[ftylUJKMSZ\\YWZ]]Z[__`bb`^_aaa_\\YYZ[WNMRWXZ_jrrld^_cc[UUVWX]dhi_XZ`b]VUOJNW_cb^WSSSU^ddgjheccbbbcccccegfggfdehkmoonmlkjgbbbaflpokfefaYUVZ`hmid``_\\YZ\\]]__^\\WUSSTY]a`][]``afhfeikd_`cksqfabeca`cb_foqpnnqsogbaejhcglnmkhgims|yvu|wg`bbejnqwskoquzxuqokidimjkmjo~sqnhihhkjmz~tpohmpgbda\\WNLNQQJ<9AEGMTYXOD;:?IMKHIOUSJ?:@KPPPLB:?HKGA@CHHEEKPMMPTX\\^XRQOLLSVXag`SJGFGIMT[cc__befe`\\[\\WSWXRVehegf_YZ`gfafsr`TORZbgijr||utws`V[ejlkf``dca`adggedblrfPGNXc`URRSRQOIIMNLGRhlYP_njbijf_SRV^a^[[Z[Yec`ddfhfa\\`fmqvvkdkqnehjtyuuqjimqtsvxrropvtssuzxqsyzwpmpv|woqtmtz{wuuuppqrpooptz{wpysprrqnksvkacjleZUTSSYcjbWYdio}{jcbagng]agffggv{fh}jdnngiokdiprpjcgpldl{uis{xzqqv}|~||xw{{{yyz}}vy|s~yv{xx~wt{xollqtwwttz|npxt||wqjedelssnqty||vz|üÿ¾wnlnpqsrqv|wonry|tnlosw{}}|yy{}|truwy{}~}y|ztnmmnppnjdcbbgq{xolry}}}yrkc[UOLLJIIHIJLOTZ^acdccaaaachou{ypf``fmt~|qjf`ZURPPTX[]^]]]\\\\_aekpuy{}~}xrmiihijkigggjlnoqtwxwwvvttrpmlnqxrsjbcdffcejprqnmkg`\\\\\\`hllea_`a^[Z[_cb]YWY\\\\[\\`dcbjnnoqlcZRLPVWYYZ[[\\]_b`\\\\^_aa`\\ZZYTNLMPTUSPPQQRSSTW`lxr`OJKNUZYUUX\\ZX[]\\_bb`^_ab_][YWXYRLNSVX\\cnsqi^Z_a]XUTTVYafge[W\\``\\VUMHPZ_ba[TQQT]dggghfccbbbbccbcdfgghfeddhlmnnlkkifcaaaaelnlgdff^USVZahjgc_]\\[ZZ[]]]\\\\[WSQQUY^`^[Z\\_`aefdcgjc^_ajrodadb_]]ab`doplmnqohc_`dgedhlligfhilqzxtu|teabdeknqwrlrtuwyurqqjdinlkmkq{qrngihhkho{qooforhcda^\\QNPSSH>=BIMSXZWK@9:BHIIHJPUPD<<EMNNNF;8?HJF@?CGGCELOMMPTX]]SPQPLMTVXcg^QHFEEHOV\\b`Z\\cfea\\ZZYUSVUPYggbef\\TWchc`ismYONRY`ehjq{zssvm[T^fhhf`\\^aa_^`bggebboqaMFNXedWQSTTTOFFNLIMXfiYRdpjdkke[QQW]a`[[\\\\\\ea`edhjd\\\\bhntyuifnrmbjnvwvxmhjpstyvrtqrwussv{voryytkkpx|qjr}oluzwustsnnonnlmptxxsp}zppqqrppvuibflkbYTRQV^ef[V]dgp{ueaa`fj`Y`ecbclo`lwdhoieijcblrqjecgjcbq{nj}ww}vot}|}~zw~{{yy~z}~vvzs~yv{vx}vtzynmnnpuxvtx~|rrvs|{vqiccfntrlqvw}{|~÷ü¾wnlnpqsrquzxolpx|snllqvy{{{yy{|trtvyz||{wyztnmmmnnlidb``dlv~{tqtz|}}yrkd\\UNLKHHHGHJKOTZ^bcddcb`__afmtz~ypfaaenv~}rlf`[URPPTX[]^^^]]\\_bdjpuy|~}yrmjiiijkigegimoqrvxyyxvvvwvusrtw|~~sqhbefghfhnpppnmkf`^^bejmkfdccc`]]_ada[VU[_`````aeopooojcZSMPXYZY[\\]\\]`b`\\^___`_\\][ZSNLOTVSQNOOPQQQSYerwjWLJLOTXVTTVZXVY\\\\_``__``^[[YVUUTNLOTVX]fptqeXV^^XVUSSTZbfeaYW^`^YUTLHQ[_a^VQRRXbhiigebbcccbba_acddefffdcdgkmlkkjhhda`_aaeknkebff\\QQTY`fheb]\\[YXZ\\\\\\[ZZYVQOPV[^`\\XX[]_begbbehb\\]akrlbad`\\Z[`b`cmnjjmpmd_^_bdcdikigeehjlnwwsuzrcabdeknqtnlqrsvxtquujcinommks{pqnhhhhjgrwmopeoridecc`UQTVSFADDJQVZZTH>:<CFFFHKOPI@>@INLLH=68@GGB>>CGFBDLOMNPTZ][TQQNJNTUZbdZMGDACHQY]^ZU[efb\\XYYWTSTPP]gdaeeZRUceaajqeRLNSZ`egjrxwrrthVU`gfda^[\\^^\\[]`ffcbfpm[NLQZecYUUVXUOGEOMHQ\\di\\ThoihnkdYSRY_a`]]^]bdabhdjmdY[chow{ofkrridjqzwwykimqts~|tststvtssvxtotxwpgiqxxmhr|wmlsusqpqpmnomkjlosutop}toqqqrtuvrheinj`WRQRZdgbWW_dhpxna__`eeZW`c_]br|e^q|lbnpedhd^botmd`egc\\dxwgpsxyopz|y{{zx|{~~wvwr~}yuzuw{utzxopollqxwtw||tstu~zupibagquqlq}}y~~÷ƺļ¿Ŀ}}~umlnqrsrprwzpknu|}tnjjotxzzzxy{}|rqrtwyzzytv|ztnllllmjgc`^]`hpxzvx{}~|xskd\\UNKJGFFFGHJNU[`bdeedca_]_dkqx}}xnhcbfnv}|voic[TQNOSWY\\^]]]]]`bdjouy{~~zsojjjjkmlhfgilqtuwz|{zyxxyxyyxz~|{}rnfdghjjjmqqommnkebadgjnomigffeb``bcc^YVX_ccb`a`_itqpmlhaXSMRZ[\\[]^^^_bb`^^___^]_ab]UPPSWVPMMOOOPPPU_jsqaPJKNPSTTSTVVVUW[^___^`a^YVWWTQRPLMPTVYbgoqmbTU^[TUWSRVZbd`]Y\\a`\\XTRMLS[^\\WQOSV_gklhd_^adddca^]_`babeffdbceikkiihhfb_]^__dkmjcaffYOOSX_efc_[ZZZZZ\\]ZXYZYUNMOW]``YTTY^]\\bi`^cfaZZamqh_ad`YXZ`backlhhkome_^`bcbchjgdbdjljlruquypb`acejnppkjqposvrrwukejoqonkxxprnihghhixrjqpfoskfefidYUUWREEKLPVZ\\ZPC<;?CFFEHLNKC>AFLNLH@759?DD?<>DGB@EMOMNQV\\\\YTRQKJNSUZa`VKD??CKU\\]YUT]eaZVVYYTQRQNR_daacaWQVac`aik_OLNTZ_cfjrwspppbQUchda][Z[\\\\ZYY_edbclpiWSSU[g]WZ[]]TPHENNNV]cjcZjrmlqlcXTT[acba_baddafkeln`\\`eiouwkeltqhfls}wvvnlqtv{wuuvuvwtrsuusptwvmehqurjhrwrklpooonmkkmnkigiorrnlr|yopqppswywoihlni^SNPU`ji_Y[aehpth^^__b_TV`a[Ybwr]_uxddtpddd_]eopf`aed]\\kwjewrxtlt}~|{z~}{x{}~~~xxts}{wsysv~zuuzxopomikvzuuxyurrwytqjb`jsuqnpz}{}øɾĽ|z{~}tmlnrttsqqu|rlmrx~vpkjnswzzyyy{|}{roqtvwxxwrtxztnkkklmjfa_][\\blu{~}||~~|xsld]UNLIGEEFGGJNU[`bcdedca_\\]djqv{~{wnhcbgpv|~xqke\\TPMOSVX[^]]]^^aceinty|~~{vqlkkklmliggilquwy|}||{zzz{{|~}yx|pkeegjlmnqsqmlmolebdhlmqqmkjhhgdddddb\\XX[affe`abfntrpmjf_XTPU[\\]]]^^_`bb`_^`_]\\\\_dd]TRXZ[VNJLNOOPNPWbpsjXMJKOQRRQSTUUTSW\\__]]_aa\\VTTTROONKMQTVYclolg^TUZVQUXRQX_daZXZ_daZWSPNPV\\]WSPOT\\ejlje^[]beedc^\\\\\\]^_adfecabehhhgffhe`][]^^bhihccfbVMMQV^dea]ZXZ[[\\]^ZVWZYTMLOW^`\\URTY][Xaj^[be_YX`npe\\`d^VVY_aabjjhgjomd_^_abbcgiea`dikjkptpuwnb_aceinpnijqonrurs{viejorqnk|woqnighihkohsqforlgehjg]XWXQFKTUX[_`XJ>:=ACFFDHMNH@>BJNMJD;46;@DB>=@DD@?FNNLORW^]XTRQKJOSV[`]TJA<=DPZ^ZTQU^b[USRYVPOQOLS_`_ac^UQW_`^agfZLJNTZ_bfjquqnnk\\NUdfb_ZVXY[[ZXV^ec`coqcU[\\X`gUT\\]b`TQHEMNR\\`flfaltposlcZVX^bdcbbceddbimhmj]_hhiqtqigntohhnvwvupnsxyztywvwvxtrssssprwtkdhrtnghrtnjlmmmklkfhnnjfcgormikszsmqqoruy|vnklmoi\\PMRZgnhcabddjqpbZ]^_`ZQV_\\UYh{~eVdwpamwkbb_\\ailha^__^[crn_onrunqz~~{}~|~z||wz~{~}}xzqs}|upwru|yuv{wnpomijuyuuvvuqpxytrlbblvvrosy~~|||ĺ¿ſý¿~{z|~}|slknqstsppt~|rklpu}{tmjmqvyyyyzz{}|soprtvwwupqt|{rljiijjhd`^\\YZ`hry}~~~|xsld]UNKIGEEEFHIMTZ_bcdeeda^[\\binuz}~yunhccipwz{slf]SOLMQUX[]]^]^_bcfkpuz|~~|wqlkjjklkjhfhlrvx{~~}}|{z|}~|wvzkhggikmopstpllmokebekoprqmljjihfeeee`[XY]dhhe`ahlnsqnljf]XTTW]]^]]]^_`bb``_`_^]_egbZRU]^\\TKJNPQPONSYdonaRJJKOQQQQRTTTRRX]`^\\\\_`_YUSRSQONLKOQSVZenmicYTUUQOUWQQZ`a]VW\\`d`XURQOQW[ZTQONVahkigaZY_efddb\\YZZ[Z\\`cdcaabefeefgfgc^\\[[]^bggdbcf_QJLPT\\bc_\\ZYZ[[[]\\YVXZWRLLOW^^WRRSX[XW_i]Z`e^WX`nob[ad\\TTX^``bggfeiojb^]]_`adgfb_^bikiinpputlb_abdhmplghpmnqsqu}vhfjpvqlk}wnomhhikjo~nhtqhnplgfijg_YYYVPUZWVZ`^OC=;?BCFFFIMMG@@FKNKE>627>CEA=>ACA>@GMLLOSZ`\\WRPPLKNSV[_[QF?:=GS]\\VRQW_^UQPTXTONONMU^\\^a`[SPW^_^afdUIINT[_afmrsnjjeWOXeea^XTXZYYXVV^dc_dqqbYaf]gfOS__dbSQJGNPT_emoggoumpskc^Y^bddcbbeefddjmmmc]bjhjqqlhiornkkrx}wxvppx~}xv|xvxxwsqrsstnnuribjstichrrlklkkjihgdhmlhdbgmmhgjsunmqpoqv|}vompqohZPNS`nnhiigcekok\\W[]^]VOV]XS\\orZUlwhfvtc^_\\^ekid`\\\\ZX\\jrfa~{ksrnu~}|}~~{{|wx}{}|{x|}or}}{~~{uourtyxwx|vommmjksywsqvvppx~~xtrnddnwyurty|}|||żøſ{yz|}{~{skikptuurpr{|rllns|}wnjlotxyyyzz{|~{soprrstusnnpw|rkhhhhhfc_][XX]dmv{~{wsld^VNKIGEDEEFHMT[_bddfffc_[[aglsx{}}yuniefkrxz}wqi`UNLLPTWZ]^__`acegkpuz}~~}ysmkjjklljifgksx|~}||z||wuyjfhkmmoqtvsnlllljedgmprtqnlljjigffed_[Z[`fjhd`_ipqqqlkid\\XVVZ``_^^]^`bddbbaa`_]bkh`YTZ`^XOIKQSSPNNV_hmeWMIILOQQOOQTTRQRY_`][]`a]VRQQQNMLKLPRSV\\hplf_VTVQKPVUPV_`][WW\\bb]VSRRQRVYWOLNOZdijfb]VXahfddaZVXYYWZ_cca``acdcdfhif_ZZZY\\_cfd``df]NFJORY`c_\\YY\\][Z[ZVUXXUNKLPX^[SOQSWXUV^f^[_b^WXamm^YacZSSW]__`eecdhmh`]][]^`cec_\\\\bjjggknnspib_`acgmokefnknqppuvihlrxqlk}xnnkhhjnntxkjrolnnlihijia\\]]^^]\\YW\\`XG>=>ABDEHIKNMFADKMLH>4029>BD@=>AA=<AILMNPT\\a]UONNLLNSX\\_XJ@<9>KW]YSPRX]YQNPUUOMMMMPYZV\\`]UOPW]]]_b^ODGMU[]_emsrmif`RP\\gfa^WSY]XVUTU^bb\\dtsf_dkjidNQ`cgeVUMLSUWbkutkkruprulc`_dfgfebdfgffgjmql`_fijnnjhhjmopoot{~wxurs~{x{wxxxwqqrttukltsf`kslabionmmkigfgfcajkhcbcfjiddhopmlpnnrx~|snpssndWQRYgrninphcelneXUZ]^XOPX[UTcv{fT[rsfmxl[]]\\`hjgb_[ZXW`lkbmrqvqsz{~~}~}z~ww~||~zxy{mr|zvz}ztmsssvwyz~uomnomin{~plwvoow}}xtspfhoy|xtuy{|{||ƽ¿ƽĿ{yxy~{z{{skgioswxtppy}slkmqz~ypiimsvxyyz{{|~yrnnooqttrmlmr}{slhggffda]\\YVUY`gqy~{wsme^WNJHGEDDEEGMTZ_acdfggd`[[_dkqwz{{xsmjghmtxz~|umcXQMMPSVZ]_abbcfhimqw{~|yvoljjkmlljgglt{}|||~{vvzhhkmooqsuurmlmlkheeiorstqnlkkjigffeb]ZZ_fjjhdabkpqpokigd\\XXZ^cc`___`bdefdbbaa`bhkf`[Z_`]TMLOTVTPMQYfll`RJHILPPOMNPTTPOSZ__][\\``ZQOPPMLLKILQQSXakmib[UUUMJPVSQY`^[ZXW]a`ZSRRRRSUVSLILQ\\dhid^XSWchecc_YUWWUVZ`cb````bcbbegie\\XXWV[`dfb]^efYLEHMQX^a_[XX^`\\YYWTSXXRKJLQX]WOMORWWQS]d^]^]ZVXcnj[WabZSTW\\__`ddaafkf^][Z\\]_cc_[Y[bjjeeklmqlgb_``bgmmicelkmoonxviimsxrkj{xnlihhlnpsijronnnnkjkkkc`aabc`\\ZX_aPB<>@ACFGILMNLDAFLLH@4,.6=?AA>=?B>;<DKNOPRW\\`]TLKLMMOU[__SC;::CQ[\\WRQUZZTLLRUPKLMLLRZWT[_XNKOX[[\\^`YLCGNU[\\^emsrlgd[PQ`ieb_WSY]YVTSU\\_\\Xdusf_dnqlcQQ^bgh^YRSYXYam{yllsustulcafjghhgcefhhhiloqkabfilmifgillmssqu}}vwusw}ywvyzyuqsstuugktsd`kpc[billmolgdddebajid_acfheaaekljlniks{~xpprtsl_VUYanummvtibflk`UTZ]\\RKRXXUYjz~p[Tfvohtu`W]]\\ciiea\\XWV[elggy|pxytw|~z}|yyv{~{|~yuyzlpzwruzzsjp}~~~trtvy{~~tnlnpmho}}mmyvnnw}|xttrjiqy~{vwzzzy{}ƾ½ÿ¾ÿ|yww{~{zy}|ujehnrxzupow~tnmnpx}ypihkquwxyyzzz|~yrnllmosrpkijoy{sljhfffd`]\\ZWUW]emt}{wrle^WNJHGEDCDEFKSZ^abefhhe`[[]ahpuxyyupmkiipxz{}{reZTOOQSVZ_acdefhjknqw|~|zwpnlkmonljiiox~}|}}yvv{gioqppsuvsqomnljgfgkqtstrollmkigefda\\[]clljhedimppomkjhd\\Z\\_bedb```acfgfedcaaahmkea_^__ZQNQUVUSQRU^imh[PKIILOONMMPSRNOTY]][\\]_]VOMOOLJJJHLPPR[dkkd]WRURJJPSQS\\^ZXXYZ^a\\URRRRRSSRNJIKR]cffbYQPZdfedc]WSSSQT\\ab`_^_``a`bfhhc[XYWUZaee`Z]fdUIEFKPW\\_^ZVX`c]XWUQRWVOJLNRX[ULJMQUUOQ[b^]]]XTXenfYYa`XSTW[^^_bca`dhc]\\ZZ[\\^bb]YWYajicdkklojfb^]^`gllfbejimonozvijosxrihvznjihinntpijpnmnppnmnmleegggd`^^\\a_K@>@@?EHGJNONJEDGIHC9104;?@@>=>@@><?FLPQPTX[][VLFJOPRY^_\\N?:<@IU[ZURRVXUOKMSTLHJJJLSWVUXYPHIOWZZ[^^THCHNTZ[]enrqjc_VNTejdd_VRZ^ZUSRU\\[YXfurf_dorpdST]`hme\\WX[YZcqolsvuvulfhkkfhjheggighmloqhaefkojdegkmlouvsv}|wtxts||zvwvz}xsrvutuufitrgeml^Zdhikormdcbbccchea\\`dffc^_bgijllfjt{{tqrsurh]Y[`iuvpv|uhafkg\\TUY\\VMLUXVW`p|xfX_rvlnxlXY``afiie_ZURU`jkjq~us{zxz}{~}|z~{uz}{{}ytyyknxtoqwyrhmx{|~|uqquy|}|smlnpnisyjn{xqpt{|xuvwpkqzxx{zyz|ſÿ¶¿Ŀ¿ÿÿ~zwvz}~}~|xx|~|ukeglrxyuqqw~upnnpv}{sjhkptvxxyyyzz|~wqnkklnppnjggmv|smjgeeec`\\ZXUTW[bjqz{wrle_WNJHFEDCCCEJRY]`beghhfa][]`fmrvwwtpmjknsz}}~wh[UPPQSVZ`cefhiklmorw}|zxromloqpmlklr{~}~wuv{ijorrrtvvsooookigijmuxvvtqnnmkigeecb`abgpnjgdfjopnmllkjc^\\`ffgda```bdfhhecbabcjmjdb```]VPRY[XVTTWZbllcWPMKKMNNLMNQSQNNUY[][\\\\]ZQLMOOLHGGILNNS]ehi`XTQROJKPQOV\\[XWXY[``XRQRSRQQQNJHIKS]cc_\\RLS^cddab]TQQQQV^aa_]\\^_``_chhf`YXYVU\\bed\\WZebRGDEKPUZ^]XTXbc\\XVSPQVSMKLNRVVRJGMPSRMQY`^\\]]XTWembX[`\\VTVYZ\\]^`aa`cfaZZXY[[]a`[WUVajgbejkkmhbb^\\\\_fkjd`cjjnolo{vkkpswrifszmjhgkpowngkpnmnqppppmlehmnmedgf`[UHA@A?@ILLNQPLIHHGFD@934:???>=>?A@??AHMPOOTY\\\\ZWMGMSUVY[]XI<=DFKV\\XSRRUVSMJNURKHIIJNTUSTUTNGHQWYZ\\^ZNECJPUWZ^goqnf`]SLXijcd_TR\\_YTRRUYWWYeqoe_eotocVY^`isj_Z\\^[\\fxqmsvuvwnimmkginjhhgifimlppgadglmgbegklkoutswz{wstwts}{wxuww}uptxuruujhssmmmf^`hgfiotpcaabcdefa][_efe`[]aehhihdjtyvqprutld^]`eovuv~|odagje\\WWYWOJNXXUYgu|r`]lwrltt_V^cegiigb\\WSS[hmlpy{vty{zyz~}}|~~{z~{uy{~~z{|xtzykmwslmuxqhktxz~}{ytposy||zrnklqqox~tho{ztquyzxwy~umsz}~|{{}ľ¿¿¿}xwy|~||~~|xw|~ztlffkqwyvrrvwrpnou{}vmijmqtvwwxxxxz}|vpmjjklnnmjggks{}tnkheddb_\\ZXUTVY_env~{vrlg`XOJGFDCCCCDIQV[^acfhhgc_\\]_elptuuspnloqu|{l_USSUVY]bggijkmopruw}|zwspmmoqqnnmou~{tsuzmmoprstvvrnnnmjhgjlqvxwvsqqomlifdcabceeipnieegknonmllkjda_bhgfca`abcehihda_`eillhdba``ZVRX^]YWVWY_ipl_TOMMMMNNNNQSTRNNUY[\\Z\\][ULILONJGFGIKKMT_fee[TQPPMJKNPQVXVWXYZ[^]VQQSSRONMJHHINX]a`YUMLW_bba^^YRPQRSY^`_]\\\\\\]_`_chfb]YWWTV`ee`XSXb^OEBFKOTX\\\\WTZcb[VTQMPUQLJLORTSNHFKPQOLQY`^\\\\[XTWel_W[^ZWVXZZY[]`a_^ad_YXWWY[]`^XSPTahc`djjikd``]Z\\^fjjd^bhjnljp}ulkosupifs{mifhmrqx~lglponoqrpnnmkfjorqiing]VNHD?>?CMTRRTRMKJHEDB?;55=C@>==>@CBABDINNLNUYZ[YSKJPVVTSX[RB:@GGMY[URRRRPLIJQVOGHHHJNQRSTRNJGHPVXY^^TJCEKRVVY`hnokb\\ZSO^khcg^SS_cZVTRTTUVYcklc_dmqlb]\\`blukdaaa]^i}rosusuwplokkgkoliihhijkmspgacglidaceiiimsttwxwsprsqs|{ttxvwy~totyuqstnmsutrka^ejfeimttf`acdghd_[[^ehe]Y[`dffggdjrvqmpsupgb`abgpuuzvhaaghd_ZXVRLJQ[XS]myxk_fuvmowkWXbegkljf`ZUU[fppotzvry~xvxy}~z}~{}~{z}ztwy{{xzzwuz~xmnuqikrvphipuw{}zyvqnnrx{zvqnllrwv|znjr{{wruwxww{ypty}~þ¾¾¿¿{wwwx}~{{}~ywy|yumggjpwzyutv~wqonpu{~xnjikortuvwwwxz|{upljijlmmlhffhoy{uolhecc`^[YXVVXY]clt{~zvrlgaYOIGFDCBBCEIPVY]`cfhhgc`^^_ekostsrpnnqtx~oaWVUWY[`dkjlmopqrtwy}}{ytqonprronmpwyrrtynmnqrtvwuqpnmljhhjotwxvurrqomjhfcb`behhknkgefiklmmmmlkjecbehgedcbdeefhhfbabejpmifdba`\\VWZ``][YXX\\fpsk\\SONOPOPQRSTUTQOPVYZZYYYVOIGKOMJGFHJKLNU_cc_XRPOOLJKMOQTUUXYYZ\\\\XSQQRRQNMKFEGJS[\\_^VRLLX`a`_[YUQPRTVZ^^]\\[[[\\^^^bhd_[XVSRYbec[SQX_ZLCAFKOSX[[WV_gcXRROKNSOJIMPRRQMGFKOOMLQY`_\\[YWSXch_YZ\\YXYZZXWWZ^````b^XWVVX[]`^WQMSae_^chhiia^_[XZ^ehgc_bhiligtulmpsuphfq|mgfimusx{jflqpoqsrpnnmkhlrstpnkbWSOLH?<@FSZUTTSPKHHEDEA=;<BGD@>==BGECCFLOMJNUYY[XPIIPSQORZYK>:BIKQXXRQRQMKIGMSPECGGHJNOQRRPJEDHOSW[]ZNGDJNRUVZbjmlg_WVRTbhbei]RVcf^YWUSSUWZaijc_diokc_^admtjhgdcaclspruptvpopjjgmomkkhiijimuofbdgkhb`adffgkqtvxwpklppnryuorxvu{|z}~tpt{tqqrtquwyuj^^ejjhlmtxkabehjje_[]^gidZUZ`cdefdbipsnkpvskdaccbfotv{|pe`bhgb_ZWSPNPX_XTbtxrhdltqlrteZ]cgjlkheb]Z]gpsqquwrr{|uuwy|~}z}~{}~|~{{}ysvwxxwywvwz|{|vmotnhjqsohhorty|ywtollpvywspnmlr|~}tknw{~|xvuuwy~{tvxý¿¿¿ÿ¿~yxwx|}zyz}zwx|{yunhgiovz{wvw}wqnnpu{~xokjkmoqsuvvwwy{~ztoljiikkkjfddgnu|~}{uolhecb`^\\ZYWXYZ]bksy}yuqlgaZQJHFDCCBBDIPUX\\_beghgda__`djnrsrrpnpsy~re\\YXZ[]aelmpprtuvxz|~~|yurpoqssqppt{xrrv{nmnqtsvwsqqonljiilswwwvutsrpmjgecbbdgiklmjfcfijllmmnmlkfedhigddddfghghgeaachormhfdbb^XSWbe`][YZ[anvtiZROOQQQRTVWWVTROQWZZZYWTOJGHKNKHGFHJKLOW_`_\\VQOONKJKMOQRSTX[[[[[UQQQQPNNMHEGIMTY[[YROKMY__`^ZVRQQRUX\\^]\\[[[[\\]^^bfb\\YXUON[de`XNOX^XJBAFLPSX[ZWWckdVOPMILQNHINPPRPJFFJMNLMRZ`_\\ZXUSXcc]YYZYXYZYWVUX]^```a]XVVVX[]`]UOKWca\\]dhhgg_]^YV[^ehfc_bhilgfwtmmpssnhfq|mggkptszuhflqporsqonnmkhnutvuqh\\UTSOIBAGU\\\\XWUSQLIIHGIHFEDFFB=;=BGIFBCJOMKKPUXZ[WNIJQSONT[WH<9AMQSWTPPPMKJHIPSMECEFHJNOPRRLDACHMSW[ZULEELQTTV\\djlic[TSTXac_eh\\RYeg`[YUSSUWZ_ghd`dgmib_`centkihfdcfntqrrotupppiiinommmhggkjnumdbdghf``abbdeiosvupifhlllrvqmrwuswzy|{squyuooputuw{wj]]ekmnnmuznbbgkmle_\\^`hkdYTZ`bceecbiprlgovrg`becbfmqvzwlb`cgfc^YVSPPW_`XZmxwoggmolmqlc_adinnjeccdcgpuvrrtrpuzwtvwx{|{z}~{|||~{{}~xsuwwwvy~}vvz{zzzsmprlfioqmhinqsx{yvsnkkotwvplmnlq|lkv{{wstw{|wwx½þ¿¿{xwx{|yxyz}~{vx}~{yupjginv{}zww|xqnnpv{yqlkkmnprtuvwwyz}~ysoljiijjjiecbeksy||zupkgecba^\\[ZXYY[]bjrx|xurmhc[QKHFDDCBBCHNUX[^adgigeb``_dimqqqpporv}uga\\[\\]_bgnqssuvxy{}~|zvsqprstrrsv~wqrw|mmmrwwvvrqpnmlkjkqwyxwuuwusolhfdccdehjllliedgiklllnmljjhgeghfeeffgihhhfc`afkpplgedca[TT^if`]\\Z\\`isvobWRPQSSTUXXYWVSPPSXZYXXVQLJHHJKJGFFHJKKQZa^\\YTPONMKIJMOQRRUY\\\\\\[YTQQRPMLPMFFJLNTYZXSONJMY___]XSQQQTWZ\\^][ZZ[[[\\\\^`ca\\XVTOS^ec]TLNX\\UIBAFLORWZYVXemdTNOLHLPLIILPPQNHDFJKLLNSZ__\\ZXTQW``\\ZXXWXXXWUSSX^_a``_\\XVVVY[^`[SMK\\d_[^ehghe^_]WV[]efdc`chijdgw}tmlnqqngeozlggntuqyqfgkoonrsommmljgmuuwupk^UYYQHEKVca]YXWWVTQNNMNQPMLKD:69ENMGCBGLMJILSY\\\\\\TKJKQRNOW[SC:<GPQVXRMNLJIIFLSQJEC@DIKMPQQNGA@DINTWZYSIDFMSUUX_gkkgaWPSV[__bifYS^if`]\\WRRTXZ^dhebcejida`chnqkjhfefhptppontupnmjijpqmlmf`emnqtnfdfgd][]`a``cinstohedehikqrlkqusruxy{wppuurllnuyxyzvi^`hknqomu}qdcimnlgcb`biniZT[``bggcbhpskenuod_becbejosuriaadfidZWUUTU\\c_[duwsmhikjjnmfbbbeknlgdcfikmsxurrqnpwyssvvx{}{{}~zz|{}{{}}~}wsuuuuvy}}vu||yzyrnprkegorlhjoprwywtpnkkptuvpgkpnrzjnz|{xrrx}}yxwÿ¾¿ÿ}zyz{|yxwy|}{|~~zvw{zxupjhhmu{}zyx{xpmnpuzyqlkkklnqttuvwxz{~~~}xrnkiiiiigfdcabhmtyzyuqlhecba^][[ZZ[\\^bjqx}{xvrmic[RLIGEDDCBCGNTX[^adghheda``cgloqqpoqtyvkd`]]]`cfmqtuvy{||~}zvtsrsuuutuzwrsx}kkntz|xurqommlkilszyywttwusokheccdfhjlmlkgdfhijllmmljhjjkhfffffffhiihfcbbdhlpmigedb_YS[gkf`^]\\`hptqi[SRRSUVXY\\\\\\XSONPTXYYWWSNJJIJLLJGFFHJKMS[`]XVROMMLJIKMOPQSW\\\\\\[ZXSQRROLLOKCDIMQUXYVOMNMPY^]][WSRSSUY[\\][ZYYYYZ[[\\^a`[UPPQ\\ed]VQKNWZTG@@EKORVYXUYglaSNMIGLNLJKMPPOKGDFJJLLPTZ``^[WSPW^^]ZXVVYZXWTQQZ`abb`^\\WTUWY[]]ZRLM[c]Y\\cfghf__\\SUZ\\cdccbcjkgahy|uolkmoogck|xlegt{wmvoghkomnrrmkkmjhgnvwxspk^X_]SMMT^da^ZZ]^\\YWVUTVZYURK>47CPSMEEKMKHIJOY`daWNJJMQQOS[[O=7DSUSVWQLJJIHHFMTMHEC?CIKMQRPIB@AGLPSWYXSHCGOTUUZbilke^TMRY__]cmfUSckfa__XRRUY\\_cffedeihda`dhlolkighjkqtppmmurnnkiiltwpkjc_enoqsmgffe`ZY[^_^^ciotpicbddeilmmihosqpqvzxsnqtsqlkmu{zyzxl`aimpsqnv}sffknnmkjgefmsjZV]`_dkjecgptjdmrmc`cedcdhmorqf_`dec^WSUXW[cd^_mxsnliihhkljfbacglkgfgikjntxxvsqporvvttuux{}{|~~{yyz~||}|}|xtvuttvx}}vu~~zyxrnppkffmslglqoqvxuqnmmmsvttogioqv|or|}}zqqx}{xw¿ÿÿ}{{{}zwvwz~~~}{yy{~}zvvy~|xupkhhksy|{yy|yqmnpuz~yqlkjjjkmpstuuwxz{|}|xrnkiiiiifeba_`ejpuwvsplhecba_^\\]]]]^_ciqw~}zwurmid\\TMJHFEDCBCGNTWZ]_cfggfeca`bfjmoopoqu{yngc`_^_adkptvy{}}zwvtsuvxxxywruzjjow}}yuqonlkjkjmuyzyursvvtoifcabfhklmmkhecfiijlmmmkgejmpledehhghikkhd``dhlnnjhfeca^XWbmjda^]_fourkcYUVWXYY[]^]]YPKKQWYYXVVPJGIJLNLHFFGHIMPU\\^ZURPMLKJIILMPPQSY__\\ZXTQQRQNLKMHACJQTVWWSMLOPSX\\\\[XURSUVX\\]\\\\ZYXWWWXZZ[[]_[QKKSbhdXRNIMVXQE??DJNQUXWS[jl_QNKEFLLLLLMNNLGDCEHIKMRWZ``^[WRPY^^][XWX[[YVSOP[bcbb`^[XSTY[[[[XPKPZ_ZW[aeghe_^XQUYZabacbcjmf_gyztokikoofagwvlehyujvlhhkmkmqpmjjkighqwxwsqlc`b]VRS\\fea_]]cea^]]]^ab^WO@58COTOHEJPOIHNRX_fdXJHJLNPRRV][M:8KXVTVSMKJIGGHGNRKFEC@DJLNRTNG@>CJORTVXVPFAIPTTV[cjkicZQLR[`]\\fncSTdieaad]VVXZ]addfgggiheaadhkomkgefhkutpnklqpnmjhinxxpig`_hnprsmhgfb]YXZ^]]\\ahqskd_`bbchkljhhnsqnovxtqoqqpomkltzyyyxmaejosurowviinpoopmjjlpsk^[_`bkomgcfptkfkokb`decbcgknrnc]`dd^XSNS[]agc]gvulijihffikhebbejmgbfmpnlpz}yvtpoqtuttsuvw}{z|~}zxwy}}|{|{xvvvsswy}~vu|ywqnpolgfltlensopvwsmklnpvxsrnggpv{}tw~|ooy~~~xw¿þÿÿ}|~~{wttv{|}{{xwy}zvvy|}wuqlhgipw||{{}zqmnquz~zrmkihhgimqrstuwxxz|{wrnkiiiiheca`_^chnsvtqplhecba`_^`aaa`adipv}|zwurnje_VPLJHFECCCGMSVY\\]aeghgfec`adgkmnnnqx|tlhea___bhouy|}{xwvvwy{}~xsw}ijpz~yurqoljijjnw|{xsqswwsmhdb`dhjlmnmjgdcfhiikmmkgegmrrjbbehhhhikifd`afjmnlhffda^\\[\\fniba^_birupe[WW[]^]\\]_aa]VMJKU[[ZXVTNIHKMOOMJHHHHIOTY^]YTQPMKKJIKMMOOPU\\ca]YVTRRSQNLKKE?DOUWXWTPKKPUVXZYWUSSUXZ\\]]\\\\ZXWWWVWXYYZ\\^YOILXfi`UPLKNTXPD>?DJMPUWVS]ll]PMLDDKLLLMMMLJEBCEGIKPTWZ``][VPP[__][XY[]^[WRNS]bcaaa`[VPT][[WZWOMPW[XW\\acfgc`\\UQUYZ^aabbelme^exzsmiikoof`et}vjem}pht~khikkjmpokiiiggksvwvurnged^XW\\fjdbbbbgjhedeegih^RE:;EPVUOKJLONKOUY_feYIEKPQRRTVZ]XL<>NVUVUOJJJIIGHINNGFECBFKLPUTLD>=DLPQSUVULCCIPSSV]diie_VNLR[_Y\\ko_PUeie`dmf[Z\\\\_cddfgiijjeccdfjmmidceehz|rpliknomjhhhozxnge`bjoprsojifb[WX[^][\\bksne`\\]^_`fiiiihnqnlotvqooollnnlksyyvutpiilpssrsw}wlkorpqrqonnqunb^`chpqnicgpumgjniaaddbabeimoh_]`b_XSRQU[_ceaanwogghgeefhjhdbdhkibckpqons{|xvsqqsuvtssuvyz{~|ywwz~}}|{{zwwvrtwz~}vv~|ywqnpolifktodlurqwxrkhlqu|{sqnhgoyzy~rpz}}~{yÿ¿½¾~}|xtsuy~~{zzyxuv|~{wwy|~xurmhfgmtz|}}~{plnptz~zsmigggfgjmpssuvwxz{zvrnkjiiihdb`_^^aejptsqolheccba``abdedcchov}~|zwurnjf`WQMKHFFDCCFMSVY[]aehiiigdabcfiklmnqz~wplgc_^]`elty}}zxwvwy|~xuxilq{}wtrqoljikloy}|wspsvwrlgca`ehkmnnmkgedegghiljfddlswoa^adefghikifbadhjkljhfec`\\\\]bkmg`^^aemuumcYW[`a````bc`YTMHLX\\[[XURLHHLPQONJJIHHKQX\\_\\XSQPNLKJIKMMNNNV^eb\\WUSRSSPMLKJC?ERYYYXSMJLRYYYYWUTSTX[]]]]\\\\ZXWVVVVVXXZ[[VMKR_ifZQNMMOVYRE@@EJNQUWVT_lj\\RNJDCJKLMMLLKIFDEGHINSVXX``^]VOR]__]YY[]__[VNOV_bbaacbZQNYa]XUYVOMOSWVV\\`beec`[SRVYZ\\_acafmmc]hy~xqkhgkoog`cr{vjgu{ifs|ljjlkhkpligggefmvxwvvtpjkg`Z^fjjgeegijkkjjjkkkcUH@AIRWVSPNNMLMRX\\`eh]JCKSWVTTVZ_]VKBEOTUXTMLKKKKGEIOKEHKEEILNRWUI@;@JOPPRSSRH@DMPPSX`gie_YRKJR[]W^nnZNXhkc`gqk_]^_adffghikmkeccdghkmidcddj~wrqliinnlhdfip~|oebaelppsupjhe`[VW[][Y]gppf_\\[[[\\_fgegijmojhnssonmlijmmmkrwvurpomlmprrruy|vmlprqsttqqqtxpc`chmqrojfhqvnhklgddedb``chnmc]]__\\UQRTY^`ccbepsjeghfdefhigeehiheeioppqsuxywutsrtwvtttuxz}y|~|yyy{~~}}{{yxxvrsw{}|xuz}{wqnpomjhjsuhjvwtwyskflty~sonjiq|}z~wsz}|}|ƿ¾¾ÿ¾ý~~|xuttv{~{xxwwttyzyz|~xuqmhefkry}~{nklnrx~{tmigeefgjmnprsuvwyzzvrnkjiiihd`^]\\]_chnrqpokhfddcbabbcegffeipu{~|zwurnjgbYROLJGFEDCFLSWYZ]adgiiigecbdfhiklorzytpjf_][]cjr|}{xwwwz}yvykmrz|xtrqokiilmqy}{vrpruupkfb`afjlmnmmjgedeeegikhdbeovuh[\\`bbdfghigebbeijjjihfeb`\\]ailkd^\\^bhqvsi_ZZadcbbbbcc^TPNJP[^\\ZWSQMIJOTVROLLKJKNT[_^\\WTRPNLKJKMMMLLNX`fbZUSQRRQOLLLHB@GTZYXUQLLNTYXXXVTTUW\\]^^]\\\\\\ZWUVVWVVWWY[[UMOYdiaVNKLLOWZRF@AFLPRUXWV`li]TOKECHKLMMLKKIGGGHJKPUVWW_`_[SQV]`^[W[]bb_XRMQZ`bcccecWNR`b]WUXVOMPSUTU[`bege_YSRVYX[\\`cbfmkb_iy~xpifekqof_arztln{ygdrzkjjliehkheceecfozywuvvronjb^gnmjihiklmlkkkllniWHCFLTXXTRRONMMSZ\\bki^ODESZZYUUY^`]WOILRUXYRMOONNLIJKMJEIMHGJLNRXSG=<ISQPQQQPLE@EKNOS[cggaZTNIJRZ[X`okWN[gga`jrmd_^_aeghijkmmkfcccfmmiecbbcnsrqlhhllidafhp}oc_`enppuwpjhd`[VVZ[YY`joi`\\Z[Z[\\_ggegkmmmgflqpmmkhghlnmlnqstsppmlnpplov{|umkprsvwwuutxzqechlqrrolijswoikkhffhfc`^`hoka[\\^\\YTQTY\\_cddafolfeggfeefgfffhhgeehlnoorvwwwusutsuxwuutux|{y}~zxxy{~}}|{{zyzwrswz|{xtv{}{xropomkijqyqiu|xxytlflwz~unnljr~z}v{|{ž¿¿¿~~}}}}yutsuy~~{ywwvvtsw~{yz{|~~}}~yuqmgcdipx||pklnqw~{tnhedbdgjlmopqttuwxwurnkiiihgc_]\\[\\]bgmqppnkhfddddddefghiihkpv|~}{yvtrnjgc[TPNKHGEDCELSVY[\\_cfhiihecbdefhjkos|{wsmia]YZ_fq{|zxxwx{~yw{jmr{|wsrrokiilmqz}{wrpqttojea`ahllmmmligeddcehkkgbbhpuobZ\\abadfgghec`aeijjhiifcb`^`ekkga]]_dltvpe][_cdddcbbba[RKNMT^`]YURPNKOSYZUPNNMLMQW_`_\\WTRPNLKKLMNMKKNZbfaXTSRRRPMKLLFAAHW\\YVQMLLPV[ZXVTRRU[^^_^\\\\\\^[XVVWWVVUVX[[UMP]ij_SLJLMPWZRFABGMQSVYXWali^VRMEDHLMNMMLKKKIIJLOTWVUV_eaWPSZ^`][Y]cge_WPOU\\`abcegaSOZfb\\VUYUOMPSTTU[_`eih`WRRTWVXZ_cdhljc`gxyphfeltqf]`rztosvgco}zlkllfbdfecabbchrzxvvxwvtoidemsokhjmnnoomlkkjkcTLNSVZZWUTTTTPT]_dlmaPIMX^\\\\[XW\\a_\\XUSSWX[[RQUSQQNJIKMKGNRKIKMOUXRF?JYXQQSPOOJDCHLNPU]efc]VPIFJSXYZcngUS]eb^^jqmga``aeghilmmmkgcbbfuodba`_bq|rrrlhhjjhb`egr~oc^`fmopuvpkhfaZVW[[YXalm`\\[XYXZZaiggimoolefkpomkifefkoomlnqrsrpnmprpgly}{umlpstxxxxwvyzqgfkpsrqommmswojlligimjd`^bjoi`[\\][XTUZ[\\`efdcgkhffgggeefgedfjjfefilnoorvxwurrvttwywtutux|zz~}{xxz{~~{{||zz{{wrswz{{xtsw||yspqpnljjo{ymt}{yzvnfmw{~wnmmkrz}{}{z}Ž¾¾¾Ŀ}|{{}~{wtsuy|~|yxwvvutsw~~}}~~zyyz|~}|{}~yuqmgbbfnv{~~qkkmqw~{uniebacgijlnnpsstvwwuqnljiihgb_\\\\[[\\agmponmkigeeeeeefghijjjlpv{~}|zyvtqnjhd\\URNLIHFDCEKRVXZ\\_cfhijhfdcdeggikos||xtnkc^ZX[cnz~|zxxwy|yw{jmr{{vsrrokiilmqz|zwrpqssojd``chllmnmjhgeedcdgjkfacirtk`Z]`aadfgghec``djihhiifca`^bjmid`\\]`govunc]]beedddccb`ZQLPQW_a\\XSQPNQX\\_]VQPPOOPTZ^`_[WURQNLKKLMNKJJNZbf`YTRRRRPMKMLEAAJW]ZUNKLMPW[ZXUSQRW^a__^\\[\\^\\XVVWWVVUUV[]WLO_lj^QKKMORXYRFACHPSUWYYYbli_YUNFDHMMNMMMKLMLJKNQVYVTV_d_UQU\\`a][Y^fjg^WLPY`aabagh_QP_ga\\UUYUNMPSTSV[^_fjk`VRRSUUVY_cehjic`gxypgeelusf[`rzspvshdnyxnmlldadgda```ahsywvwxwvupgfjqurkimoppppolkjje[QNPSW[[WUTUXYY]bagni[MIQ]`^]\\YY^b`]ZUPT[Y\\\\SSXVOQRLJJLLIOTOLMOQVYQDH[bXRUTOONIDEJLNPV`ee`ZTPIEJSXX[dneTT^da]]jrmic_`bgiijmoonlicbbhtmb``_]aq}prrmihhiga_cgs}mb][blnpsupkgg`XUWZ[YVakl`YYXXXXZ_gggjnqpjddinomkhfdfkppmlnoqttrnmqrofly}{tmlqstwwwxwxzypgfkqsrqpooosvplmljknnkf_]dlnh^Z[\\[WVZ][Z`dgfefhhgfghgefggfcfijgegjmoonrwyxtqsvusxzusttuw}zy}|zxyz|~z{||zz||xrsxz||xtqtz{yuqqqnmmjlz|ps}|zywogmx{|ynmolq~y|~{z}ûþ}{zz||wusswz~zxwwvusrqu{~{{|}}~}yxxy{~}|z|~yvqle``dluz}tkjlpw}{uojeb`behjkmnqsstuvvtpmkjhhgfa^\\[ZZ\\`gmonmljigfeeeeefhhijkjmpuz}~|{zxwtqnjgd^WROLJHFDBDJPUWZ\\^adghihgecdeghikns{|ztple_[WYalz~~{yxxwy|~yw{uuuuutuuuuuvvvwwwwxxxxxxxxxxx~x|xzyxzvzt{s|r}r}r~q~q}p}p}p}q|t{vzyz{x}x~wwvwwwwy~||zx~zz|x}x~w~ww~w}w}x}x~y~yxxwxxz}z|zzz|z|y}y}xxxyy}y{yyyzxzvzuytxswrwrvrwrxrzs|s|s|s{tztysysytyuxvuwrwpwmxkxmymynynymxkwmuqsusxs{t{uzuzuzuzu{uzuzuyuzu{u|t~t~s~t}t|t{szsxtvtuutusutuututvtwuytxtwsuqsrsuvyzy|wzoufmbldnhqlsososnuovqyq|s}tysxtxu|u~tnb[RVOFBQbui}ihefijlmlicV}N{O`moqpoo}q{qzpynylxkynxqxrxqzp{nzmzkzi|e}^|\\{^zcygxkvmuotrwrzrzqzrzryrwrxqzr{s}u|v|x|{}zurn|jzfxax`ybzd|g}mqp~iybp^a\\^^dakdpfsgtftgvfxdyh{qylsjqlzivjwovm{r|v~xz}|wysrnlmlompmqkshthuiwmyqyqxqwqwswwwzw{wzvxvvustptmtmsourvswuxsxoukpbgY`W\\W[Y\\Y[UYQVRWV[Z_[_Y`\\^YX[Wcemrtyw}x{xzv|rwjumuwuxvwyv{u|t|q|n}m~npqq~q}p|p{p{o{p|r}t~vz}~zyms]nXl`njrirdpcreukzn{o{kzdy`xewpvxw|xy{}~}~{}y}v}r|rzqwrvruqsqrqrpqpqoqpqrrstsutstoumvlwowsuvqxnynxnwmxzwxqxpxpzr{t{wzvyuyuxuxuxvyu{t|u|v|u|t{t{s{rzr{s{s|s|r}r|r|q}q~rsstuuutssrrtuvvvwww~w}v}v~w}x}wwvuuut~tzuzuzw}vvvwwx~x~y|{{{||}|~~}}}|}{~{~z{z|x|ufe``fdkipotwv|w|x|v{rzrzszvywzvzuzt{uxuvuvttuuvvwxw{v{vxxx{}}}yxxvvyyzz|~~}}|~~{zxv~u}t|s|s|s{tzuyuxvwvvvwvxuyszryrxrwtwvwxvyuxtxsxsxsxsxsxqymykxjwpvxv}w~x~y~z}|}}|}{|{|zzzvysyqxrytyrzszsyuzx{||~}|~|~|}|}}}}~~~}}|}|}}}}|zzwyuwvwxy|zzzyyzzz{{z}z|z|y|y}x}w|wzwywxwxxzy{{{|{|{{|{zyx~x|x{wzwzwzwzx{y|y{yzy{y|wzuxuwtwsxqwqxrxtytyuyvyuwtusssqsosnupwryuzy{z|{{{xzuzu|y}}}}~}|{{z~}}{~{~zzyw~turep]qjrpurv|ul`WX^fdZWU^mq}rrpnw{z|ytssoglhfsyvuz{|}}{|xyutvzv}yz}vt}|{~yxxz~{|xytmvg{imv}|wu~~~z{w{}|}}~v}w||}~|~ndi~r}o|y|xqlrz~|~hYpy~y}z|}}}}zyyx~u~vvnmp~p}o{o|qsso{s|yv~s~v~wwxy|{z|}||||{{{zx}~}{xusqq~q~rsromqv{|}}{ywvwxxwusuxwttsuy|{wuvwxyz{}~~}|{}vvvuuuuuuuvvvwwwxxxxxxyyxxwwxx~x}xzyxywzw{v{u|u|t}t}s}s}r|s{t{vzxzzy|x~wwwwvvvy~||~zx~xz{x}x~w~w~w~w}x}x~y~y~y~xxxxxy~y|zzzzyzyzx|x~xxyy}yzyyxywyvyuytwruqtqtpupvqyqzr|r|r{rzsyrxrysxtwutvpvnwlwkxkylylzmylykwlupstrwrzsztzuyuzuzu{t{t{tzt{t|t}t~sstt}t|tztxuvuvuttttututusututwtxswrurtstuwxzwxmqbi[d[g`kionrprprotpvqyq|s}s{s{t|ustlYSSSQGEU{exjjjhhikmmjydt^pUlOmN{[hnppom}n{hzgzkzkzkzozr{szryqypynylyi{e|c|a{_z`yawctdognmsrytzsysysyrxryszs{t|u|v|y|z|w~sp~n|kziydyayayc{f|l}o}mzgtal_g`hcofrgugvhvgulutqrsmzl{hsamdvkwyusy|xxxz}z|wztvssrrroqlpkpkplrourwrwrvrvtvwwzwzwyvxuwttspsnsnrptsutvuwtwruorgk\\cW]VZWZWYUXSWTYX]Z_Z_Y_\\]ZY^]ilpsutxwyzy{w{ksipsrxsytxxx{y|x|r|l}k~loqr~r}q|p{o{o{p}r~suwxyyv~q{gt[lViWj`nirisbq]qatiyn{o}q~t~o|ezcymyxx}y{}~~}}|}{}x~t{rypvquqtqtpspsprprprprqsrurusrsotmvmwpwtuwqynzmyoyqxuwryqyqysztzuyuxuxuwuvuvvwvzu{v{w{v{u{u{t{szs{t{t|t|s}s|r}r~rssttuuutttssuvwwwww~w}w}v}v~w~x~wwvvvv~u}uyuyvzw|w~w~w~w~w~x}y|z{{{|{|{}ywwyy}y~x~x}x~y~vjhdcihmmossyt{uzwzvztyuywyxyyzy{x|w|xzwwwwvvwxxzy|x~x~x}x}|}{~zyyz{{|}~~~}}|~~{zxv~u}t|t|s|t{tzuyuxvwvvvwvxuytzszsysxuxwxywzvyuytztytytxrxlydz`zaykxvx|y~z~{~{}}}~|~{}{}z{zwztyrysytzsztzszvzx{||}}}}~}~}~}~}~|~|}}}~}~|z{wyuwuwwxzz}zyyz{{{{zz}z|z{z|y}x}w|wzwywxwyxzyz{{}{|{|}{zyxx|w{vzvzvzv{w{y|z|y{w|w}w{vwvwrxqyoxpxqxsytyuyvyvwuuuutstqtquqwsyv{y|{}{|zzyxzy{|}~~~~}||{~}|~{}z~zzyvyshr^rjspvtx|xsg[WVZZXVYdnn~jrhoqzvzxvtssvxi`pusry{||{yx~wuutvx{~~|||{~yxx~z}zy~y{|~xqtw{{~~}x~n}i}x}j~s~}|w}p}t}x}{|z{ohox~x}||zuqu{~~}~qhxz~y~z}}}}{zyy~wwunqv~u|p{m{nnjoz{}~{~w~u~vy{}~|z{~}xvvyzyw{~~~}~|{xupn~o~p~qtrmkq~w~{}~}{ywvwxxwussuutssuxz{xwwxyzz{|~|yy|vvwwvvvvvvvwwwxxxxxyyyzzyyxwwwwx~x|x{y{zzzzzz{y{x{w{v{w{w{wzxzyyzx{x}x~wwwvuuw~z}}{~y}vzzx~xwwvvxxyyxyxxyyy~y}z|z|y|y|x}x}w}x}y{y{xyyzx{w{wzvytvrtqsprptqvqxqzq|q|q|qzqyqyrzsxsutrtoumvkwkwlxlymylykykxlvotsrvqyqzrysytytztzt{s{s{s{s{s{r|r}r}s}t}s|sztxtvuwtvtvsvsvsvsustsvswswrvrvrvswswlpfk_f]i^mcpkqpqqqqqpsqvryr{r}s}t~t~usslVOPPRLN[zf}ijjjkkmom{ep[cU[RZQ`OwT^koonk}h{bzdzlzm{n{p|s}s|syqxoxnxkxhyh{l{m{fzazbzcwbpclfonvsyuyuysysxtytzt{u|w}w}y|w{r{o|o|n|n{n{j{d{ayazdzj{lzivdpblcpfskynzn{mzkylv}pag|zf\\tXicssxtr{|wwwy{~{{{zzywxtuornonlnlolppstsutvtvuwwwzxzwxvxuxstsqsprpqrrtsutvuuusvuunqbiZ`UZQWOVPVUZX][`[`Y_Y_]^[^fiqssuwpxpyyx{txfqlpzs{uzwxz{{z|yszj{h}l~prtt~t}s|r|q|q}r~stuuts~o}iyasZlZi\\lbqjtkucs\\q^sfwl{n~qzzp~g}j}r{yz|z~|}}|~|}x}ryswqsqsptptptotosprprprptquqtqqrnsmumwpwtswpzn|m{o{zyq~xszryrxsxsxtwtwtvtuutvtwuwwwxxxyxxywyvzuyuytyu{v|u|t}s}sssttuuu~uuuuuuuwwwxxw}v|v|v{v|u}vwxx}w{w{w{w}v}v{vzvzw{w}w}w|x}x|x|x{z{z|{}||}z}x}w}x}w}w~v~uvx}upmjhmnosovrysytyvyvyvxxxzxzyzzz|z|z}{|z|z|x}y{z{{zz|z~z{}~}||||||}~~~}}}}|~}|zxv~u~u}u}t|t{tzuyuxvwvvwwwyx{x|w{vzuyuyvxxxyxzwzvzvywxxxxyuznzezdzlzv{{|~}~}~~}~}~|{{~z|zxzvyrysztzsztztzwz{{~|}}~}}}|{~{~|}}}~}}|y{xyvwuwuxwyzy~yyz{{{zzz}{z{yzzz|x~x}x{xywywzxzzz|z~z}{}}|zzyx}w|uzuzuzt{u{w|y}x|w}x~{xqrpyp{ozqyqxrysytyvxwxwwwwvvvuvuwuyw{z}{}|~{~y~x}x}z~|~~~}}~~~}~|~|~{{zy~vltasktrwx{}|{ti_WRRSU]ceffgo|svwwulp~fYlwvv{|{{vuuvtu{txtvzx~v{z~w{{~zxusqnhoso~tlzy~~~z~o}]}qfr|~y|p|o|w}u~p~wzsyq~x{{~}}}zwy{z~|~ztyywx}~}}~~|yxx~z~|{yw~s~l}j}j{n{m}mjq|z|~~x~r~tz~~}yxzukjptwxwuy{{{{zwukd~h}l~pusont~y~}~~}~{yvvwyyxwwvsrstuvxyzyyyxxxyyz|xrigoyvvvwwvvvvvvvwwxyyyyzzzzzzyyxwwwxxxxyyy~y~y}y|y|y|y|z{z{y{x|x|x}x~wwwvuuvy}{||z|xz{x~xwxwwxyyyyzzzz~{~{}{}{|{}{~y~x~w~w~x~y|xzxzx{x}x}x{wzvxvvvuutttsvsxsyrzq{q{pyoxqyrzrzrvsqtotmululwlwlxmxmxlxlxmvoursuqxqzqyrysysyszr{r{r{rzqzqzqxqxqyrzs{s{sztxtwtxtxsxsyrwrvsususvswswrvruqurvrujpfn_j_laoeqjroqqpqppqqtqyq{q}r~ttuu~r~lXNNOQRYb}fhhklmmopkv`hS[NVPYRaTwQTemon~j|fzjypzpzp{p{q|s~t}sypxmwkwixgykzs{u{p{j|h|g{gwereofpmstvuxsxsyuzuzu{u}w~x}y}r{mzlzn|p}q}r}p}i{by_xayfyixhufrfsixl{ruutp|rwo`g{kbqamlwrxqwvtq{svxxyyz~{}x{qxksmoolojoiolrrstuvtwuwwwywyvxuxtxtuustrsrrsrtsutttpumwmwkvdo`fV\\NVISKTU[\\a^b[aW`Z_]_^emqvyvywrwrxzw|vwswwx{yz{z}y~|}xvxwmzh|n}q~tvwv~u}t|s|s|t}u~v~u~u~tso~kzeu^o\\l_nfslvoxiuas_tgwm{q~syyyvnp}x|{{|zz|x}x|z}z|yzwxtvpvpwpwpwouospsoroqnsotpspqqorntnuqutpwl{n}o~r}}|t{{t{tzsxrvququrttstrvqwrysytyvzuzvyvxxwxvxvxvxvywzv{u|t~ttuuuvvv~uuvwxxxxxxx~y~x|v{u{uzuxvwwxyzyzzxyxyxyyx}v}v}w|v{v{v}w|w|x|x}y}x|y|x~yy{~{}{|{z{x{w{u|u}v|wyursopptqwqxrxtxuxvxvxwxxxyw{x{y{z{z{{{{|{{{z{{w|t|s|s|t}u}ttx~~}}}}}}~~~~}}}}}~~|zx~w~v~u~u~u}u{uzuyuxuwvwxyzz|}|~|~y}w{uztyuxwxwxxxxyxzw{x|y}zxzsyozq|w~{~~~}}|{{z~z{zxzszsztysysyuzz{}||~~~~}}|{z|}}}|z{xyvxuwtxvxzy}yyzzzzzzz}{z{x{xz{yx}x{xzxzwzxyzy}z~{|~~}|{zx~w|uzszszszt{v|x|x|z}~{pdgyurzqzryryryrytyvxyxyxyxyxxxyyzy{{}}}|zwvvxz|}}}}~~~~~~}~|~||{zxrvetmttx{{}}|wnaURQSZ_bhopt~uuuv}v|nuxfYk{|wstw{spqutx|x~xtsrtw|}~}}}{~ywvtocfhbbpkyv~}~~~~}~{}k}yvx{y}v}v|}xls}s{suvv{}x|}~y~{~}xxtqs~z}{}|~{xs~qt~v~wwy~~r}]}Y}k|s{s|r~rw~}}~y~tx}~~|ytod\\blsuwvtvuwx{xspf_b~k~o~srruy|}~}|ywuvwyyxwvusstuvxyzzzyxwvvwxwvrjZU[bvvvvwvvvvvvvvwxy~y~y~z~{~{~{~{{zzyxxwwxxxxxxxxxxxxxxyx}x}x~x~wwwvvuuux~y~z}z~yyxxyyyyyyyzz{~|}||}||||{}{||{}z~x~wv~w}x}x{wzwzx{x|y{xzxyxxxwwvvvuvuwtxsyqzpzpzozq{q|r{rvsqtnumvmvmvmwmxnxnwowovpvttvrwqypzpzryryqyqzq{q|p}p}p{pyowpuptrurvrvrvsutusvsxryrzqyrwrusvrwrwrvrvruqsruqukreo_m`ncqgrksmroooonposoxo{o}prtuv}r}jYMNPTYafhjknopppp|gpZbPZLZO]Si]yWO[iom}k{iynxryqzq{p{r|s|szrwowmvlvmxnyqyv{w{u{q|i|h{hyhufqdoipotqvrxsyu{v{v|v}w{x{yt{mzlzo|r~ttw~o{cy]w^wcwgvhviwjym|ptw{zvzysqwy~xzqslsnvlvkvnvoxs|wyxxyy{~w|ozkumpplojnjnkpptuuwuwvvvvxuyuxuxuxwvwtvtvtutusuruluewax]y_xbufpaiU]HRFQU\\^c_cZ_Z`^a_achotw{w}w{w{w}w}y{y|x}w}y~{z{}wtuuxl{o|s}v~xy~x~w}v|v{v{w|w}x}x}w}v~tqo|jxcs`oaqhuoxszoxhvduhwmzr}uxz{ztqwz{}u{ozn{s}z~{|y|s|q|qzqynvosornrlqkrmsnrnrpqppqprqotlwh{j~ns|~|zs}s{rxpuotosqrsqupwoypzrzszuzuzuzvywxwxxwxvxwxwywzv|v~uuuuvvvvvvwyzzzzyyyz~y}w|v{uyvvwqxqzs{u|w{x{xzyx{w{v{v{v{v|v|w|x|y|y}z}z}z}x~wxyyyy~yzyvyuxwywwxtwqvptrwtxtxtwuwwwxwyxyxyxyw{w{x{y{y{y{y|x{w{v|u}t}s}r~onmknw~~~~~~~~~~~~}}~~}~{~y~w~v~v~u~u~v}v{vzvyuxuwvxxz{{~~}~z}v{tzsxtxuyvzv{w|x|x|y|yxxvwvzw~z}~~~}~}||{{~{{{v{szryrxpyu{~|}~~}}}|{|~~|}{|yxxvxvxwyzy}z~zzzzzzz{~{{{y{x{{y~y~x{x{x|w{w{y{{}~~~~}{{yv|tyrxryrysytzv{wz{zqa_\\mtysysyrysysytywx{x|x{y|z{{||}}}}~~}|yussvyz|}}}~~~~~~~}~}~||{zyxnuouvx~|~~~~{qaVRSVZaluzxwvvww|xyvrhfqyxncciuqlpv{x~xxsrq~ii}z~|~|{|x~x{yxvwvrqyrzv}z}|~~~~~}~}{~}|{{|}}}~~{rsrvptwz}}y~|||~}}~{xsqqs~u}x}{}zrg~j~p~n~nprw~t~i~j~t}z|z}x}v}x~{~}~~~|~xz~~}|zwrjcbfkmuyywncoxzuh]fmlnpr~q~tz}~~}|{xuuuvxyxwutrsuwxxyzzywvvutvwukbbcaddvvvvvvvvvvvvvvwx~y}z}{}|}|}|}|~{~{~zzyxwxxxxxxwwwwwwwwxxwwwwwwvvvuuuwxyyxyy~y|zz{y{z{}yyxyz|}}|~{~y~yyy~z|{z|x}w~w~v}w}w}w~w~xyyvxzx{x{w{x{xzxywyvytysyrypzoyoyq{q|r{twwrwnwmwnxnynyoxowqwsvtuwtyszrzqzp{qzqyqyqyqypxpxp{p{ozoyowptprqpqqqqqrqrrrrsrvqyqzqyrwrvswrwswrvrurtrrrsqtjqdo`ncpfsitkultlmlllmlslxm|npqsuv}reTMPS\\afikmoq~qqqq~lx_jT`O^N`OcSpdzbTSeom}lzlxpwrxrzqzp{q|ryqspqovoupusxuzvzx{y{w|s|j{f{j{nynviqeohpjqqvsyv|w}v}v}wuxmyrwxrzq{r|t~uvyr{ex]v\\vavgwjxkzm|p}svw{zu~v{xwyp|o|tyqxmykwjvkvmvqwv|yzyyyz{w}o{mwosqpooononqrtvuwvvvtvswsxtyuyvxywyuyuxuwuwtwpvhw`x\\zX{Wz]zgxhw\\hKUCPQZ]c`cX]Z_`bachkqtx{y~xwwwx~x~xwy{{|ztqtxym{q|u}x}y}z}z|y|y{y{y{y|y|z|z|x|w|u}t}t{pyhucrcrivpys{qylwhviwmzq|uxzzzxswx{wr~o}q}u~z{}~~y~t}r|qynvmtkrjqhpiqkrmrnrpqpqoporktjvfzh~nqwvvq}q{pxntnrnoplslukxnzq{tzuzuzvzvzwywyxyxxxwyxyxyyzx|w~v~vvvwwwwwwy{|{{{zyyzy~x}v{uzvxwuxu{w|w|y|z|zz{yzwzwzwyvzvzvzw{w{x{z|{}|}|}z~x~xyyyxw}xxxwwxvxtyrxpwrwtxvyvywxwxyxzx{x{x{w{v{v{w{xzxzxzwzwzv{v{x}z}{}{~yurmmr}~~~~~~~~~~}|~~|}{}y}x}w~v~u~u~v~v~v{vzvxuwuwuywzz|}}}}~|}x|uztysytzu{v{v|w|x|x{wywxwy{{|}~~~}}}}}|||~|z|t{pylymzw{~~}}|||}}|z|yzyyyyy{z|z~zzzzzz{{{}{{|{{|z~z}yzxyxzwzwzx|z~|}~}|{zyw|tyrwrwrwqwrxsyuyzui\\b_lvysysxrysysztyxx}wx~y}|}}}~~~~}~}|zwtrsvxz{|}}~~~~~~~~~~~}|{}zuwrvwx~{}}}~~|yrg\\UUXboy}}zxwwuqkd_Ydtog`YYYeigoxyxxuvx}pjy~}|{z{y|y~{vsy}}}}{y}x{y|{}|~~~}}~~~}~~|}~~zplpox||{{zwzpzxz|y~xvssvw~v}y}{}ylj~l~e}i~p~uvxzxz|~~~~~{~v~r~r~u~w~z~zy{|zywvspoqqnosrrvldpvyucXiurrrr~p}v~}~~}{yvtstuwwxustwyyyyxxyzzwtuvwxzxpjjmotpvvvwwwwvvvvvvvwwx~y}z}{}|}}}|}|}{}{~zyxwxxxwwwwwwwwwwwwwwvvvvvvvuuvvvvwxx~x~y}zy{v{t|s{uz{yxxz|}}{~z~xwwwvw}xzzx}x~w~w}w}w}w~x}x{x|w{w{w|w|w|w}v|u{tzsyqypyoypypyqzrzuwxtxpxoxp|p|pzpwqusuwtyt|s~s}r}p{pzpzqzqyqzqxpwpvpwpxpwovouorpqqornroroqpqpqpqtqxpzpyqxrwrxrxswrvrtrssrrspsiqfpcqftivkwkwktjljiikhqjxk}moprt~u~raQQV\\cg~ilnq~s|s|r}q}p~o}hsYhPcNeOgPhTtfzj}`R_ml~lzmxqwqwqxpyq|q}rxnpikgnmrsuuxvzwzy|y{x{qzgwdxjzq{rzowirfohoousyv|wvvwwxgxkw{ut|t|u~vxy~rzgw^u[u`vhxkzm|p}u}v}x~xwu}qzmzpznymzlymzl|j|izixjwmwryx}|{yxyzzv~r|rxrtqrpqpqqrstuuvuvtwswrxrxtxvxxxzw{uztxuwvvuwtwmxdy^zY{V{[zczd{\\qN_FSNW\\b_dT\\T]_cefmmstxzy|x}w~vwxxxxy{{}yyytsyvwzt{t|w|z|{|z|z{z{{{z{z|z|z{z{z{xztxswtwswqvkuererivoyrzpxmwlvkvmyr|uxz{{yuuuyzyu~q|pzq{w{|}z}v|s|pymuksirhqhqirkrmqoqpqpqpqorktivfzi~nqsrrr~q|oxnsnonjpesgukyozszuzwzwzxzxzxyxyyyyyyxyxzxzy|z~y~x|x|x{x|y~xxxwxy{|{{zyyyzy~y~w|v{vzwzxzz{{{{z{z|{z{yzxzxzxywxwxvyvzvywzx{{|}}~}|}z}y~yxxwvw}wzvzuysyqxqwsxuywzxyyyyyzx{x|x|w|v|t{tzwywyxxwyvxvyvzwzz|}|}~~~zsppty}~~~~~}}}}}}}|{{}z}z}x}x}w}v}u}v}v}u}u{uzuxuwuvtxtzu{x~y~z~|}{}y|v{uztzt{u{u{u{v{w{wzwzxzz{~}~}~~~}}}}}}}}}}}y|szjzpz||~~~~}||||||~~}{z}z{z{z|z|z}z~zz{zz{zz~{~{}{}z~z|zzyxyxxwxxx{y}z{|{{{zzx}uzswsvrvqvqvqxrwvtmjnn|txytysysysytyuyxx~wwy~|}~}~~}~|~|{yvttuvyz{|}}~~~~~~~~~}~~~}|~{wxuxxy}{|}{z|w|yyrmleYUYamv|}}{zyv|prjyg^Q^p`WVX[TW]frtmhinpzq|qp{~}}||{||}}yvy|~~}~|}||||}}}~~~~~~~~~~~~~~}}}ongu~|~}|zzzxynwvu|s~suvxz|}y}z|{}w~k~trd~q{~~}}}~~~{~q~g~c}g}j}m}t~xyyvtttuuvxyxvsrqjhqvstqebpuquuv~w~{~~}{ywuutsstvwvsvz|{zyyyxy}~|zz{{{{{||yyzuvvvwwwwwvvvvvvvwxy~z}{||{}{}|||{}{~zzyxxxxwvvvvvvvvvwwwwvvvvvvuuuuvvvwwx~y}z|{y|w|t}r|qzuy|xwx~y~{|}z}xwvuttu}xz{y}x~w~w}w}w}w}w}w}w{wzvzvyuyu{t}s}r{qzpyoxnxpypzp{qysxuvvuwtwtzsyrwrtssvszs|s~rqq}p|pzpzq{qzqypxpwpxoxpxqtqpqnpopoqososnsorpqoppptpyp{pzqxqxqyqxrwrvqtqrrrrtnuirdqftjylzkylxkukmgjcjapcvg|lnoqs~u~s`RYbeil}n|p|r|tzuzs{r{q}p}m|bpTkNkMlOmOlRsbvmzj}WYjkk|lypwpvpvpwqzq|r{otkmgknqtwuyvzv{x|z|xznucobpiwq{s|rznvkqkqousyv|wwww{wwvvu}ut{u|u}uxx}qygv`u]ubviym{q|u}y|z{x|u}p|oznykyizmzo{n{m|k~j}h{hzlzrzx|{~|zxxxyxv}u{vxuustrsqtsuutvswrwrwrxtxuxuvwvxvztzryqxrwrvsvvvrwiyaz[{X{[z_{`{\\yTnN\\MV\\`afO[PZ^blksrtww~xwwwwxxxxww~w}uzuxuxwzz{x|x{y{z{{{{{z{zz{{{|{|z|z{z{yzwysuormpmqnqkqfqfrjtoxrzoynxnxlwnyr|s~wyz{zxvtu~yzu}r{luiunwqzszryqymwktksiriqirirjrlqnqpqpqqqprlskugyk}prrpqr~r}q{ovorokperhuoxszvzxzxyyzyyyyyyyyzyyyyxzx|x}yzzy|xzxxxyyzy|y~xwxyz{zzzyxyyyzy~w{wzvzvzxzxzyzyzz{yzyzxzyyyxxwxwwywyvyuyvywz{{}|}|||z|yxwwwxx}w{tzryqxrxtxwyyyzyzy{y{x|w}w}v}u}s|tzxyzxzxxxwwvxvywzy{{{~}{||~~z~v~t}q}u}z}||}|~|{~{~{~{~|~|~|~{~{~{}z}y}x}x}w}v~v~w}w}w|wzvyvxuxtxsxqyq{t|u}w}y|y}y|x|v{v{v{v{v{u{u{v{wzy{|{}~~~}}}~}}}|}}}}~~}}}{{s{z{}}~~}}}||||||}~|{~z}z}z}z}z}z~z{|{{{zzz{{{z~z}z|z{zzyzy|y~yzzz~zzzzyw}uytwsvruqupuourttsttsvpwwxyytztzszsztyuywy|xy~z}}}~}~~}~|{ywvuvvwyz~{~|}}}~}~~~~~~~}}~}}~||~{yywxyz|{}||{}z|xywrjb[WUX`kty}}}}|zu~nkjWYeWQSW[VW[gnh[_jrszi|vx{|{|}}~{}{y{|}~}}}}}}~~~~}~}~|~}}||}~}~~zsu{||~v~q~q|~~~~}zy{zzzx}w~wwy{}~}y}y}y~v~pyxpy|}}{{||~|t~f~X}V}^|gzizn|t~xwtppsuvwyyuplpn]fxuroljnxvsvwxy|}}}{xvtuwwvuuwxuqruxz{zyyyy|~~|{|zutv~~yw~v}wv~v~vwwwwww~v~vuvvvvwx~y}z{{{|{|{|||}{{zyxxxxwvvvvvvvvvwxwwvuuuuuuuuuuuvwwxy}z|zz{y|w|u|szsyuxxw{w|x~y}z{|z~wutrrs~u|yz|yxwvwvv~v}w{wywxvwuwtyt}r~q|pzoynwnxozp{o{ozpxrvsxtyuxwuttssqtrxs{r}rqq~p}q|q{q{qzpzqypypyozozoxpsqoqmqnqnrotptptpsqrqpqouozo|p{p{qzrzqzryrwrtrsqsqvnvitetgxl|m|kzkxlvln^iTkRoVuc{lmnps~t~q`Yckln}q{rzszszszszr{r{q}p}k}_qQnLpLvNnNrLsZrgwlyd}Zgjj~lzowpvpuowpyqzr|swttrssuuwuyuzuzuztxpsinbialhuo{q}q}qzpvltovsyu|wxxx|x|v|t{szszu|v}s}r}o{kygvbu`uawhyr{x|z}}|z{vzr{n{k{m{ozqzszr|r~rr~r}q}r|v|w|z}|{yxwxxww|wzxxwvtususuuuvswqwpwrxtxvwvtvsvrvpwnwlvjviuitmtquovkxfyaz]{]{a{a|`|^xYkP[\\`agR\\PY\\alnsuuyw~wwwwuvvwvvu~t|ryrzuyv{y{y{y{z{z{z{z{z{z{{|{|z|z{z{y{xzvxrtnrkokolpjohogpktmvr{q{q{qzoxpyr}s~uwx{{yvtp{rzvzu{ryovmunwoxpwpwnwjvjskriqiqirisiskrmroqqqrqrrpsluixm}r~ts~n~p~q~ts}r{pwpoqksmusxwxyxyxzxzyzyzyzyyyzyyzyy{y}yxyyx{yyywywzxz{zzy|xyz{zzz{zxxyy{z}xzwywytysxtwuxyyyzwyxxywzvztyuyvyyxzwzuyuyuyyz{{}{||z{x~xxwxyx~w|t{ryrxsxuxwyyy{y{x|x|x}v~u}t}t}t|vz{y|yzxxywxwwvxwyxz{{|{zz{|{}{yztztzxz{z{z|y|y}y|z|{}{}{}{}{}{}{}z}z|y|x}w}w}w}x}x}w|wzvzvyvxuxsyqzqzr|t|u|w|y}y}x}w|v{v{v{u{t{tzuzw{z{}||}~}|}{||}}}~||}}}}}~}}}|||}}}|||{zz{|{{}~~}|~{~z~{~z~z~z~z{|||{{zzzz{{{{~{~z}z|z}z~zzyy~xyyyyyw{vvxsvurxouluotwsxtuwtzuzwzuztztztztztyuyyzzz|{}}}~}~~}~|zxww~v~w~w~x~y}z}{}{}|}}}}}}}}}~}~~}~}}}}~|~{}zzyyyzy{{{{{{zvtrg\\WXX[aepy|}~}}|xqjkfc]TRTY\\_`^Y`kmsx{z|w|x~y~z~zy|~}~||zzz{|~}}~}}~~~~|~|~{|{{{|~||}|{|}{}z~x~uy~||wy~}}~}|}{~yy{}~}~{~y~w~v~z{{{}||{{z{~}ypa~^~\\~d|hzjyn{s~vtqnoruvwxwtpllfboyurolosxvuwwwwuy{zzvttuxywvuz}tmmpswzyxyzyxxz|{|zsigptrp~p~tv~v~v~w~wwww~w}v}v~vvvvvvwx}y{zz{z|{|||}{{zyxxxxwvvvvvvvvvwxxxwvuutttttuuuvvwwx~y}z|z{{z{y{wzvyvxwwyw{w~wx~z}|z~xurpp~q}u{zy~xwwwvvvw|xzxxxwwvvxv{t}s}szrxpxpyp{o}m|kzkwmwpzr|r{sxpwpvpwqyr|r}r}q~q}q|r{r{q{pzpypyoyozozoyoxpsqnqlqlrmsotqururtrrpppouo{o}o}p}q|r|q{rzrxrursrtqzm|jzgzk~omjzjxlwlrWlHlGpOua|kkln~q}rmbcmpq}s{uyuyuytyszrzr{r{q}p|iy\\nPlKrJ{MrNzJsToatiwizb}fgik~n{nzoypzpzqzs{tzuwtvuwuxtxpukpjoinhkejcicmhvl{n~o~p|pznyoxrzt}wyy}x{y|w|t{rzqzu|u}q}l{hzgxgwfvcvbwjyw{||||~{x{pznzozq{s|x|{|z}wvyz|~|~~~}|zyx}x|y{w|v|w{xzyyyxvwuwuvvuwswqwrwtwwvvsuotmsjsgsdsas_s_sbshsjukvkxmykzh{e{g|h|h{h{fx\\e[_`k`fUZW_gvo}u{v~uuutpnnptu~u}rzoyoyrzuzwzxzxzyzy{y{y{y{z{z{z{yzyzxywxvxtzrxotkpjokokojnjnkrntszt~ts}qzq{q~r~ruvz{{zvo{kvotqxrxsxtxtytysyrypxlwktkrjqiqirjsjsjrkrmrqqrqrrrsmukxo|t~y~xrqsuvtr{qvqsrttwvzvzv{w{wzxzxzxzyyyyyyzyz{z~{wwvwzyyyxyxzxzzzxyxy}yzzyyy{{xyzyy~x{vwuwwwrxoxrvquwwwywxxvzs{rzqysyxy{y{wzuzuztyvxxy|z{|zxxxywxyx~v}t{sysxtwuwxxzx{y{x|x|w}t~s}r}s|{|}z{{{zyzwywxwywywzzy|ywwwwww|wzwxwxwywywyvyvzx{z|z|z|{}{}{}|}|}|}{}z}x}w}w}w}x}x}x|x|w{x{w{vztzs{r{t{u{v{w|x}y}y}x|w|v{v{uzuzuzv{x{{{~{}{z{v{v{v{w{y{z|||~|}}}}}}}}|||}||{||{zzzzz{~~~~}||~{~{|{{zz{|}}}|{{{{||{|{{{{{{zyy~x~wxyyyy{wtuurwqvnvkuntxqoo{xwzvzv{u{u{uztztytyvzxzz{}|}}}}~|~{yxw~x}x}x|x|y|z{{|{|{|||}|~{}{}|}|~}~~~}|}|}|}{}z|z{y{y{y{zzzz{ysqsnhimmosw|{{}}}}{ywtsqpiffiorvsnely||~{~x|t}t|y}v~|~}~}~{~ywwyz{~}}}~~~}}||{{zz{}|{~|~|~}ywtv}x~}~zrr~z}~}|~ywwy~~}~{~z~|~~~~}|{{zxw|{voqvoo}o{ozr}uuol~o}p}s~t~u~vvtstvvomxyttqqwvvvvxxtnmrvwvts~t}v}y}z~{zwutquwsqtxyxwxtqpruwyzumluyumhjvvvww~w~w~w~w~v}v}vvvuuuvw~x|y{z{{{{|{}{{zyxxxwwwvvvvvvvvwxx~x~w~w~vuuttttuuuvvwwwx}y}z}z|z{z{yzyzx{w|v~vvvxz~|z~wur~p~p}s|wz{yxxxwwwx~x}y{zzyzyzyzy|y|yzvxtxszr|p~l}gzgwjvnzp}p|pzoxowpxqzr|q|q|q|q|r{r{r|q{pzoyoxnynzoznynxnsonplqkqkrltoupurtrsppqnunzn|n{o{q|r|q|rzrxrvrvrxq}n~m}m|poi|gxgxjyivRoDnFrRwc}kii~k}o}pkgkss|s{uzwxwyuzuzt{r{r{r|q}o{guZnOpLwL~MzPTtZpcshviyh{g~ghkm~m}n~oo~p}r|r{sytxvyuytymraf]`bdfheidmfthzi|i~l~m}n|n{pzqzt}vxy}x|y|v|s|q|p|s}t}n}k{iyixkxlwkwhxnzv{yzvzvzr{q{t|w{v|x~}~~|yy}~~|}y{xxxwxwwyv{v{w|y|x|xzwyvwwuwtxsyuxwwwrtmripeo`o[p[p[p\\p`reskumvmwnxqyqzpzn{n|n|n{n|m{ip^a`klq\\_U`euk~q|s~s~utqjhlqqp}p|nxkwmxqxsytytytyvywywzxzx{x{xyxzx|v|twsurwr{r|qxntmrmqmplnlmnportxv~vus}s~rr~q~stxyz{yu}nwltnvqwsxuyuzv{u{t{szpymvlskqjqjrjrjrjrjqkrnrorprpsntmwp{t~w~wustuvut}ryqxrxsyu{u{u{w{wzxzxyxyyxywywyxz|{{wvuuzxyxxyxyxyyyyyyyzy~xwvvwyzyz{ywztvrtrsrtrwrxsvpusvvyxxyvzs{qzpyryuyyxzw{uzuzuzuyvxzxy|ywx|yzwxxw~v}t{sytyuxvxyx{w{y|x|x}w~t~s}s|t|}{yz~{{}x{x{x~xxwxxyzy{wttssrs~t|uzuyuyuyuyvyvzx{z|z|{|{}{}{}{}|}|}{}z}x}w}w}w}x}x}x|x|w{x|w|w|w|v|v|v|w|w|x|x}y}y}x|w|v{v{v{u{u{v|x{z{{{yzvzuzv{w{w{x{y{||~|~|||||||||||}|{{|~|{zzzz{~~}}}|||||}||{{{|}~~}|~|~}}}|}{~{~{z{{{{{{zyx~w~w}w~x~x~w~t|szrwpvnvkvlutrojwyyw{w|u{u{v{wzsysyuzvzy{}|}}}}}|~z~y~y~x}y}y}y|y|z|{|{|{|{}{|||}|}|||||}}}~}}|}|}|}{}{|z|z|z}z|z{z{{}{xu~wxx{||{uz~|||}|||}|{zy{|~yx~wwy|~zy||z|~z~xyxr{~{|xsxn}ruxxz|~~~~~~}}}|{{z{||}}|}||{ywvwtstz{qq~w|z||~}~xsv}~~~}}|}}}}~~}|{{zzxvxxvt{|qpp}t}wunik~r}t|u{r{n|nmkpuy|yvyvvvtszxvuwyyslkptvvt~s}t}w}y|z}{~{yqkoy|xusvxyxvronoruy{zyy|~yi^]vvvwwww~wwvv~vvuuuuuvw~x}y}z}{}{~{{zyxxwwwwvvvvvuuvvwxx~w~w~vvvuuuuuuvvvwwwwx~y~y~y~y}y}y}x~wvuuvxyz}{{}y}v}s}q}s|v{zz|y|y|y|y}y~xxyz~z~z}z|z{z{z|zzxxvyu{s|q~n|iyiwkwnypzpzoypxpxqyrzq{q{q{q{qzqzrzq{q{pzoynxmymzm{mzmxmsnnpjpkqkqlsouqvstssqprntlxmynwnxpzq{q|q{qyrwrxryqzpypzq{s|o{fxctevh{hzQpGnNu[{f}khg}i}n|o}lmp~s|szrzsztyvzv{t|t|r|q|q|q|n{etXwO}NOO~T~bxethuivjwkyj{j~jkm~m~nooop~q|s{tzu{vzuzqudh[]__ddfhhrj{h~d~f~i~i}l}o}p|q|s}uvx}x|w|u}r~p~p}r~r~n}l|k{lzpyqyrynyhznykvawfyo{u|{~z|s|x{y}~~y|wytxvxxwvvvvyv~wxxxx{wxxwyvzvzxyyuunpgmbl]lWmVm[n`ncphrouswtwtxtysyrzqzqzq{q|q{q|ozpvdjenrycfYchvl|p|r}s~ssplkprp~p|nzlwjwnwrwsxsxrxswtxuxuxvyuytztytzuusyrvpwq{s|szpwouotnrmomopqqrsusxt{u~t~trr~q}q}svxzzzyuzovmuouqwtxuzuzv{v{u{rzpwntlrkqkrkrkrjrjriskslsmsnsmtnvpyr}s~ttttuutt~s|r{r{s{t{u{uzwzwywywxwwwvwvxwyyz~{zwuutzwywwwxxxxzy|z|{zy|w}v~u~v~vx{{}|xtwproqopmrswwyvxvvtwwyywzv{t{r{pzpzpytxxwzvyu{vzvzwzxyy}x|x{y~zvw~w~v~v}t{tzuyvxxxzx|w|x|x}w~v~t~t}t|v{}z~xx|yzw~xxxwzwzx{x|w~tttut~t}u|vzvyuyuyuyuzv{x{z|z|{|{}z}z}z}z}z}z}z}y}x}w}w~w}w}w}w|w{w{w|w}x}x}x}x|x|x|x|x|w|w|w{v{v{u{v{v{v|w|x|x{x{vzv{w{y{z|z|||||}|~|}||{}{{{{zyyy~z~{{~{{}}{zz{{{}~}|||||}}}}}|{{{|}~}{xwy}{{|z}{~{~z{{{{||{{zx~w}w|w|w}w~zoglttnwmwsvztp{wxzv|w|v|v{w{yztyrytyuzyz}{}}}~}|}z}z}z}z}z}{}z|{|{|{|{|{}z}z}z}{|{|{|{|{}{~|~|}|}|}|~|}{}{{z~z}z|z{{{|~{ywu{vvsuqxquwzzz{}}~|uyvt|tzxx{{}}|{}{z{xvx{~{yy}~~~xr{}|pyo}txyxz|~~~~~~~~}~}~}}|{{||~}}|~|}~}|zyxlr{w~}~}~zwvuw~z~|}|w~w~}~~~~}}}}|}z{zzzzyyxvwxxwzwnps~w~xumlq~v|v{pzfz^{]~YYiwyzyvtpttuuzxwvvxxvpnrstss~s~u}w}x|y}x~wytnrrsvwu~t~u~uuuuuutuwz{|{tpprkeevvvwwwwwwvvvvuuuuuuvwxyyzzzzyxwwwwwvvvvvuuvvwww~w~v~vvvuuuvvvvvvwwwwwxxxxxxxxvvvvxy~y~y}z|{z{w|u|v{x{|z|zyzv{r{v{}z~y~y~y~y~y}z}z}y|x|w{vzvzu{s|q|n}lykwlxnyoxoxowowpxqzq{qzqzqzqyqyqyqzq{pzpznylwlymzm{m{myltmpomolqnrpssuuvvuusrqrnrlulvmunvpxqzp}q|q{rxryryrwqurwryszowiucrdug{hzTrNpYx]|d}i~h~h}i|n{p{o}p}r}r|qzqyrysyuzu{t|s}q|q}q}p|mydtW~PPQQWe{jyjyjxlwmwlxlyl|m}m}m~m~o}p}n~o~o|rzsyu{vzvzuxnrcd`acchmmypohi~k}i}l}o}p}q|s}tuv|v}u~t~rppqqp~n~m|o{s{t{t{nzdxkw\\rRsdxq|u~ws|l|t}|xy}z|~|x}wxuwvwvwsvuvwv~wwwyy{yyzx{y{z{zyystjmaj[jXjXl^ldmhnkqpsuvxxyyyyxyvytzszrzqzqzqzq{qzqyltluszkpemmxn|p|}}t~poqptts~p|q{pzkxiwnvqvrwrwrwrvswswtwswrxrxrxrzs}t~syrxrxryt{t{rxpwpuntmqmqpsqsprnoorr|ssrq~p}p|q}svxyyzt{otntntpurwtyuzv{v{v{t{rypvntlrlslslskrkrjsktlslsnsmtmuoxp|q}s~tuut~t~tttt~t~t{uzvywxxyxzxywxvvvtvuxwy~z{z~wuuu}vyvwvwwwwyx{z{|{{{y|w}u}v}v~w~{}z|rumplompnrvxz{zz|xyxzx{w{v{u{s{q{o{nyqwvvwvyu|v{w|y}xyx|xyy~zv~v~v}u|u{t{u{vywxyw{w|w|v}v}v~v~v~w}x|yy|w}u}u{uzvpo~xw|w}v}w|w}uvvyx~x}w|w{vzvyvyuyuzv{x|y|z|z|z|y}y}x|x|x|x}x}y|y}x~x~w~w~w}w}w|w|w|w}x}w}w}w}w|w|w{v{uzuztztytztzu{v{w|x|x|w{vzw{x|y|{||}|}}|~|~|~|}||{z{|z}z~yx|wwuwtwszu|w{x|y}{}}}{~yy{|}|}|~zz{|||}}}}||{{{{}}|zww~x|z{~z~z~{~z{|{{||||{zy~x|w|w{x}~va[mrwoxt{vzuwvyw{v{v|v|v{w{yzvzsytyvy|yy{}}}||{|{}{}|}|}|}|||{|{||{|{}y}x}x}y}y|y|z|z}z~z~{~{~|~||~||{ww{yw~yz|}zuokwmoovmpszwy{}~~~{{wvzt}y||ztty{{|yzzw{x}yursvyz{}~~~}~~~}}|sq~w|x~xy{{~|}|}~~~~}{|~~||}~}}}~|~|~qlv{w}y~z~xq}w{vwz{}}~}~{~}~~}~~}~|~{~xxxyyxxyywwyzzyuprtw~yxpsw}y|t{hzXzP{M~HLeyzzyvrptvxxyyxxxxwwsputpqrsu~v}w}w}w~wwvrqquvvsq~m~jjnpqvy}~~wqq~l~g~h~qtuuuvvvwwwwwvvvvuuuuuuuuvwxxyzyxxwwwwvvuuuuvvvvw~v~v~v~vvvvuuuuvvvvvwvwvwwxxwwwxyxww~wx~x}x}x}x}y|y{zz{z{zzzzy{v{s|p}s}z||z}y}y~y~y}z~z}y}v|u|u|u{t}r{qzn|nynwnxoyoxowouovpxp{q|q{qzpypxpxqxqypypynxlxkxlyl{l|l|lzlvlsnrospurvsxuywxvvtsqqnqlrlslsmtovpyq|q|r|rzrxsvswrvrwrxpwmuhtcqdthzh{VtVx[{]|e~h~h}h|i|mzpzq|s|t|q{ozoypxrytys{r|r}p|q}p}p{mxdrXRSSSZe}j{j{kymvmtksjslvnxqypypyqwqxn{m|n|rzsyt{uzuzuzryksdhdcjvoturrpl~mn~p~q~r~ssu|u}srqqopqqp~o}q}t}u}u{ozeweuQqYtlzsvup|m{l|p|tty}}|~{w~r}rzyyzyzxwwvvvsvrvrvtvxw}ww}y{zz{y{y{{{|z|xyrtgl]hXhYjbljnlonprrutxvxxyyzyzyxywzvzuzrzrypyrzrzrzqyqzrzqwpwpzq{r|~|q}i~l~qtutt}r{qyswwsptuusuqvqvqvrvrvrvrvqvqvpwqwqwrxsxsxrwrwsxt{t{syqwpuoumsmsovpvpvnpopqyrrqpppq~r~tvwxyozlrnsmtmuovtyuzvzvzv{v{tzsxpvntmtmtmtlslsksmtmtmtotmtmunwozq|s~ttts~s~tuuuuu{vywxxwxyx|xzvwvuusutwwxzy|xxw|vvvuzvwvvvvvvwvzy|{||{}x}w}v}v}x}z~}}}~{zrtnqkpoqstyy{{|z|y|y}x}w{v{u{s|p}n|mzowtvwuzt}v{x|zxxy|yzzyv~u~u|uztzu{u{wzyyzw{w|v|u}t}u}v~y~z}{||v|t|r|r{u|yypm}yv~vuv~x}v~xxz~{}z}y|x|w{v{vzuzu{v{w|x|y|y|y|x|x|w|w|w}w}w|w|x}x}x}w}w}w|w}w}w}w}w}w}v}v}v|u|u{t{syrxqxpxpwpxqxsyuyw{y|x|w{w{x{z|{}|}}~}~~}|||{z}z~yyxv}tvrsorjtjwnwpyrztzvzvzu{v~{}~}}{|x|x}z~z||}}}}|{zzz{|}~|zy}z|zz{zy~y}z~z{||{{||||{zy}w|w{y}}|aWivwqyv|x}w{uzvzv{v{w{w{w{x{xzuysywyxwy|{}|||||||}}}}}}}|||{|{|{||z}x}w~vvw~w|y|y}y~z~z{~{||~}~~~slttjgpy~wrm~pptwp~r{u|z{}~}z}w{qr{rwz{|y{zz{z~z~wrprw|}||~|}|{zxz|{tqoqv~x}z}|}y{r~t~~~}z}~~||~|{|}~~|yse]lzzyx~wz~{zwyz{~{}{}y}{~|~~|~z~y~xxyzzzzzyxxyzz|ulnu~xzxrvz}y|q|`|Q|K}GAHdyzz{yvuxz{{zyyyywusruzytqpstu~u~tsrttqnnsuutoifgjlnrrvxwplo~o}l~ovz{{uuuvvvwwwvvvvvuuuuuuuuvvwxxxxwwwwvvuuuvvv~v}w}w}v}v~uuuvvuuuuuvvvvvvvvvwwwwwwxy~z}y}y}x~xxxx~x|w}x~x~x}y~y~y~y}z|{{{w}t~u}y{|z}y~y~y~z}z}y|v}t}s}s|s|rypxozoynwnxnynxnvnsoupxp|q}q|q|pzpxpwqxqypzoymxkwjxjzk{k}k}j|jzkwmxmzo{q|s{vzwyvwttqqnpkokqlsmtovpxq{r|r}r{ryswswszryrwpvmtgscretjzj~^{[}Vza|g~i}i|j|l{n{pzs{t{r{pzlylxmwoxqyqzq{q|p|p}p}pzmxeqY}TTTT]f|jzj{lzjucpZnZn]pdqktptrsrspumyk{n{rysysztzt{s{q|n}hsehk{oquvvsoooqqrrrs|t}rqpqppqrqq}r}t|t|v{tzjw_uVrgwq}twxu|n{cxawhyn}v~{~zy~x~w~s}o{nyrxuyuxvxvvwsvpvowovpwww{wyyzzz{z{{{}z}y|wzrtgmZhVh]jjnoporrsvtwuwvxvxwxxzyzyyzyzxyuysxpyqzrzr{rzq{q{szszszs{r{x{n|h}i~osrt~u|u{yx|usuusvsvqupupupupupupvpvpvoupvpvqwrwsvrvrvswtztztyrwpuoumtmtnwoxq{qzrwryqqppoppqrtuuvmwmuounulumvsxtyvzvzv{u{u{uyrwpvounumtmsmsmsosospspsnsltlunxqyttsrss~uuvuuuyvwwwxwx{x~x|wvvturvsxwy|y{wwuuuzuuuuyuwvvvvvuwwyz{}{}{~y~x~x~w~x}z|{{~z}yywtsqrnrqswv{y|{|z|y}y~x~w|v|t|s}q}o|ozqwuuxu{t}w|x|{xzxwxxxu~u~t}t{u{u|u|w{yz{x{x|w|u|u|v|w~z}|||{|u|s|r|r}v}v|xwvz{wvwwy}y}z}{~||{}z}y~x}w|u{u{u|u|w|x|x}x}x}x}x}x}x}x}w~w}v|w|w|x}x~x}x}x}x}x~xx~w}u|t{tzsysyqxpwovnumumununvpwrxtywzy{y{y{z{{|}}~}}}}|{{{zyyy~xvtq|nugpgqjtnupvqwrwswrxrzy|}}|~{z{w{y}y~{||}}}|{zy{||~}}}{|{{{y{y|y~w}t{u|z{{{{{{|||||{~x~x}|{{xhhqxytzz}{}x{v{uzvzw{w{w{w{w{xzvytyxyxxz{{|}|}|}|}}|}}}}||||{|{}{}|z~wuttuu}x|z}z}zzz{~{~|~|}pfqwohkooppv|{yz|~|}~~~~~~~v{qt{ruz}~}~}}~||zxtv}|xxyzyywvvxz~vljv~x}{|~{t~u~~~|x|}~}|{{}~zrsqspuz{zz{|}{xyyz~v|s|t}w~{}}|~y~x~z{{{|{{zzyxxyzyoiijpwwrvz~y~n~ZONIAIfxxx~z~|{z{|||{zzzyvrosxvrqqqttsqmkkprsqprtvwtpmk~m~pqodgpoptwutwzzxvttttuuuwvvvvvuuuuuuuuuuuvvvwwwwvvvuuuuvv}v|v{w{w{v}v~uuuuuuuuuuuvvvvvvvwwwx~x~x~x|z{|x}x|y{{z~yyyxx}x}w~w}x~xxxxxyy||v~sv}z{}z~z~z}z}y|x|v}t~s}s}s|qypwnxoxnwnwmymxmwntoupxp{q}r}q|q{qzqyqxqzp{nylxjwixjzjzj{i|i|i{j{k{l|n}p|s{tzuxuwttqrnpkplqmsnuovpvryr{r|s|s{szszs|rytvttpsjtdsgvl}neVzVyd|i}j{kzm|n{nznzqzrzoymyjwiwjvmwoxpypzqzo{o|o|o{nzgs\\|WVUT_hzkykzmzhuYnNkMkPjSkZneokqmrlukxkzo{rzszszszs{q}m}jg}gvjnmsvsnklmoqqqqq}r}q~ppqpoqss}ozozp{s{v{wznxbwivtys}tvwv}l{\\wXt_vfyl{q|s}t~u~u~t~t|t|v{v{v{wzwwwuwpwnwnwnwvwzwzy{y|{{z|y|x{vyuwqtelXhViakmpprqtvuxwwwwvwuwvxxzyzzzzzyzxwxuxqyqzq{q{qzq{q{s|s{t{s{s{uzozm{k|k}n~p~s}s|uzzy{w{vsxpypwpupupupupvpvqvqvpvpuptpuqusvsururvsvtwtxuxtxrupunumuoupwqzs|s|s{r~qpoooppqrrssnxpysxswqwpwrxsyuzu{u{u{u{uzsxrwpvovnumtmsmsorpsqsqsnrlrktmuqvvusstt~vvvvv~vwwvxwxyx}yy~wwwtvrwsxvyxwwtssrsytuuuxuvvuvvwwwzx}zy}y~xxxwx~x|y{z{zxwuustsrtuuyw|y|y{x|x}w~v~v|u|t|t}r|p|rytwwuyu{t}w|x}yv{s|owowpxs|u~vu}t|u{v|v~y}z{{y|x|w|v{vzwzx||||{|z|t|s|r|r|v|u|t|y|x}xyzz{}|}}~}|||}{zz}y~x}v|v|v|v}w}w}w}w}x}x}x}x}x}x~x~w}w}w}w}w}v|v{v{tytysxtysysxrwrvqvqvpvounumultltltltltmunvpwsxvzx{yzz{||}|||||{zzzyy~y{yxx~wuspymrnpptrtsuruququpvpwwx{|~}|{{zwzx|x}{~|||}}|z~z}z}{~{{|~|}z|y|y|z|z|u{oxpyx~yzzz{{{||||{z~z}zxvt}|{}y{}}|~z|x{wzxzxzx{x{x{xzwywyvyyy|x~y|z{||}|}|}}|}{}{}||{|{{{{||{~xtsstuv}y|{~{z{z{{{|~~}qkw~~ysfbgnx}~~~~~~~~}~zxuv{~|~y~{~yzx{y}|yy|}~}zz{{yz}{z{}|}~|~~~~~wlx~~ywy{{teps|z|{{zyxv|}x{|zzx|u}v~y|~}}|~|~}}}||||{zyxxxxuhekiqzwq~v~}~|lVPRMDLgvuux{{zz{|||||{ywutu~u}i}[}[}h~quuroighoquyxvwxyx~u~r~p~p~qsunqrpt{xwyz{zr}htttttuuvvuuuuuuuuuuuuuuuuuuvvvvvvuuuuuvv}v{v{w|w|w~wvvuuuuuuuuuuvvvvvvwwxy~y}z|z{{x~us~u|x{|zzzyy~xx~x}x}xwwwvwx}{x~tuw}{{}z}z}z|y{w|u}t~s}s|r|qzpyoypxownxmxlwlwmuoupwqzr}r}r}q}q{r{qzp{oznylxjwhxhyhyhzi{i{i|i|i}k}m|o|q{rysxsvrupsnslslsmtnvnvpvqxqyq{r{rzryryryqvttsrosktgujzmoePr\\wh|m~n}n~o}o{nzl{pzoykvgrfrgthukvnwoxpypzo{n{n|n{n{hx^}[[ZT`jzmxmzmzgvYoKjKiTkPkQlVkZlaphtkxn|q|rzszs{s{q}mjgggknmruncZZcjnppqq~p}pprrrqqso{juhtkwtzy{y{tzoyvzx|u}s}s}t}t|kz[wWv[v^v`wfzl|q}s~t~uv}v}v|v}w}x}x{yzyxxvxvxvxxx{x|y~y~{z|twsutvtuqralQiXigmoqrstuxwyxxxxwxvxuxwzxzyzyzyzxyxwysyryrzqzpzq{q|s{t{tztzsztzqypzpzo|p|q|r|s{szvyxxwwrypypvpuotoupupvqvrvruquqtqtqtrtrusururusutuutvuvxturvpvnvovovrxs|u}uzt{r~pnnnopqqqqroyqztytxsxrxrxsytzu{u{u{u{u{uztyrwqvotnsmrmroqprprprormrlrmsqvuvutttuvvuu}vxwxx{x~xyywxwtvswtxuxvvvsrqqrwstuztwuuvuvwwywzxzy{x{x~xxxxx~x}y}y}y{wwuvtuvvyvzv{w{vzvzv{u|u|u{t{t{t|r|p{txxwxvxuzu{xzx{wtyowjtksmwq{t}wu}t|uyw|y|{}|z|x|x{wzxxyx{z|z{z{x{u{t{s{s{t{t{s|t|v}y~{||~}}~|~|}{}x}t|p{u{|z}y~x}w}w}w~w~w~w~w~x~x~x~x~x~v~v}tzsyrwpunrkpkoknloknknkolqnrptquqvpvounumumtmtltltltltltlunvpwqxuywyyz{{|{{{{{zyyyy|yzyxywxwxwwxu|uytutsutuutvrvqupuoupvvxxz|}|}{}zzzwzx{y|z~{{{||{z|z{{}{~{{{{~z}x}x}y}z|v{szszw~xyyyzz{{||{zy~z|yxv{~~|||}}|}z|zzyzxyyzy{y{yzxyxywywyyxzxzyzz{{||||}|}{}z~z~y~y}z}y}y~xtrstuwy}{}||{|{{{{|~|vns{|xqigmu|~}}~~}~~~~yw|~yw~{|w}t~z|~}}~~}{{yv{{}~z~z}{}}~utz|yx}~yuvxvvy}}~~|~{~{{zyxyzz~{zy{{||~~~~~~}~~||~~~~||{yyxyyukhmk~p}v~s~r}x~~mRQRMERmvvwy{{yz{|}||}|zyvw~v|s{izRzL{Z}s~zutplkmuvwzzzzzzz~x~v~u~r~qpoqtssuxwy{{|{p}Ztttttttuutttuuuuuuuuutttttuuuuuvuuuuuvvvvvwwwwvvuuuuuuuuuuuvuuvvwwxxy~y~y|{z~vss~v|y{}{{zz~yy~y|y{z|y~wvuuvx||x~tru}z{}z|y|x{v|t|s|r|r{r{r{r{qzrxpwnwlwkvkvmunuovqyr|s~s~rr~q}q}p}o{lvjuhvgxgxgxgxgyhzh{h|i}j}k}n|o{pypxpvpvovnvnvnvnwnwnvovowpxpyqyrwruqsqqpnpnpomtjwixj|lmg~Usbwltowpyp{p|o|m{k{lzixcr^g_iboetivlwoxoyozm{l|m|m|m|h{_~]_]T_kzoxozmzeuXpQmXleqdvcwasasatfvlzqr}t{t{t|r}njgghijppqrpbTOUZ`hoqs~r{r|s|tzw{w{w|u|o|hshrnvtz{|||||z|w|v|v~u~s}q{qzszny`x[w]w\\u[uaxizo|r~t~uuu~v~vwyz{{zy~y|y{y|y~yyysujlnpsttsqpblSj^jmnrrttvvxxyxzxzxyxywywywzwyxzxzxzxxyvytyszrzqzq{q{r{s{t{t{t{tzsysysyrzrzrzrzryrysxsxrwrvpvpuououpupvqwrvrvrurtrsrsrsrsrtsusususuttvpwqwxwwtwswqvouotruuwxyyxvxs{pnmnopppqppp~q{qzrxrwsxrxrytzu{u{u{u{uzuzuytxrvntmslrlqnpoqprprormrlrlrnvq~u~vtttuvvuu}v{w{x~xxxxwzvuutvtxtwuvvrspqsutu{uuuvuuvuvwvywvytxuxzx~xxyzz}z}y|y|y{xyvztxwvzszrzszuzuyuzt{tztzsysyszrzpzuyzxxvwuyvyxxxwsxmslqkrmupxt{u~xv|u{vzx|}~}~|z}x|xzyxzv{w|y{y{y{w{uztzszsztztztzt{w|z}||}}|{y~p}f}`|b{o{zz~yy~w~w~w~w~w~w~w~w~x~x~w~v~s|pwlpimgidfbcadcffihlimkpmsouqvrxszsyqxpwovnvnvnunumumumumumumunvnuqvowsxxy|yyyyyzzz}z|zyzyzzzxyxyxxwwwwvwuwtwuvvuvrvqvpupvqwtxw{z{{{{zzyyxzx|y|y}z~{zz~{z~y{xy{||~{{{z~z}x}x}y}y}x|x|w|w}w~w~w~xyyz{||{{z~|}{zz{y|~}|}z|z{zzzyzzzzzzzzyyyxyxyxywywyxzy{z}{}z~y~y~y~xwwxwvtstvw}x~z}z|z}z{{{{{{{|~{rkrtrrsvx}~~~}~~~~~~}~}ws{{~{}{}}~~~~|ztz~~~}}p|b|g}i~ekv{}~~~~{xwwux|~~}|{~{~}~}~|zy{~{yxyz}~}}~~~}}~~~~~||{zyyyyvpnq}m{eyh{h|u}~~oNJLFEYsyyz||zxz{|}}}~}|{yx}t{qykwSvIwS{k~yxwvsrsyzyzz{{zzzyyxvronsxx~vuvwz{z{|z}htttttuuvuuutuuuuuuuuutttttuuuuuuuuuuuvvvvvvwwvvuuuuuuuuuuuvvuuvvvwwxx~xx~y}{{~vst}w}y|{{zz}z~z~z|{yzxzzx|vuttv~z{}urt}y{|y|x{wzuztzqzqyqyqyr{s|s|rzqxowlvkvlumuouovpxq|r~s~rq~q~p|ozlwjriqgtgyfyfyfxfygyh{h{h{i|j|m}n{nznxnwnwnxoyozoyoynymxnxnwnwowpxpvqspnploknmmtl|j~i~kllg]vftnkolomnoosouowmxlwiuap\\bZa\\j`rfwkymznzn{l|j}j~k}k|g|a~^_\\U_lypwoymx_rYo_pisnwo|m~kyjugsjsnws{s|t|u{t|q~lhhikllpppqsl_WRNOYjms}tztytxvvywzxzxvwpwmupxx{{zy|w|v|u|r}p}s~s}p|mxkwjwhxbwbwgweuaucwizn{q}s~s~t~ttttwz{{zzy~z|y}yz{vlnfhlnqrtqsojl^kfkqossuuwwxxyxzxzyyyyxywywyvywyxzxzyzzxzuztzszrzr{q{rzr{s{s{s|s{tztysyrxqxqxqxqxrwswtwuxuxrwpuouotpwqwqxquqwqxrurtrtrsrsstsututtttusvoxnyxy{xyvxsvpupsrtuuzw|wxvuwr|pooopqppppp~p{pypwqwrwrxrxsytzu{u{u{uzuzuztxrvntlskrkqmpnpoqornrmrlrlqltn{s~utsstvvvu~v}w}yyxxww}xwuvwuxuyuwvrtprtuuvxvtvwvwvwvyvzwwyvxww{wxxyz~z|z{y{y{yzyzy|xzxwysyoypytyuyuytztytxswrwsxqyqzuyyxxwwuwwxxwwuosipkpmsqwtyv}wyw~w|wzz{}}{{~y{ywzu{t|u|x{y{x{w{uzsysysysysyszt{v}x~zzv~y~}|~q}f}a|d{ozzzyyww~w~w~w}w}w}w}w~x~w~u|ovgk`d]`[^[]^`cegkkpntpwrzs{t|t|u}u}u|syqxpxoxoxowownwnvmvmumumumumtnuluovuwwwwxyz|z{zzzyzzz|z}z|y{zzzyywyvyuyuyvxvvvtvsvrvruswuwvyxyyyzyzxyxyxzy{y}z}z}x}w|x|y}w{uwxzz~{{{z~y~y~y~z}z|z|z|z}x}w}v}v}v~w~x~y~z{{|}~~}}~~|wqt{|}{}y|z{{{{zzzzzzzzzzyyxyxywywzvzv{x|y}y~xvvwwvvvvutu~xzzzy{yxwvvutwv}yz{{{{z|~|sfinor}w~zz{}}~~~~}|{vx|~xqxz}{x{w}|~~~~~~~~}~}{wz}}x}`{Q{T|Q~_ltz}~~~}~|~}{yzzy~{~~}{~{~|~}~~|{|yzzyywxz~z~{~x~w~{}~~~~~~}~}~{{{zzyyywuu~w|pzdy]zd|{~sYKHGQgxyxxyzzyz{}}}|}}}{y~v|rzowltWtNuTzb~uxxzyxxzzzzyy{{zzz{zxutux{~yvtvx{{zz{~{ttttuuuuuuutuuuuuuuuutttttuuuuuuuuuuuvvwwwvvvvuuuuuuuuuuuvvvuuvvvvwwxxwxz|z~vvv~v~x|y{|z~z~{}{{{x{w|v{yx|vutvx|{y}v~u}xz{x{w{v{uyswqvouosouqyq{r{qzlyexgwkwmvnvpwpwpyq{q}r~r~q~p|n{kxiugrfpfqfufxgxgygzhyhzhzi{j{k{l|m{mzmymxlymzn{p|o|n{o{n{nznxnwowoxowotooomnlmrlykjjklkhezjsnkofodlemhnjnlnlnmlngpbl[gXg[kaqfzk{m{m}k~ihi~i}g~c_][W_lyqvpvlubrgqnqstnxnzn{nsmokmllppsus{t}u|t}pkiklmnnnppqqqmi]RLQacl{ryr{szuyvywywyuxszss~r{pzm{l|l|l|l|n}r~r}o{kwftbt`tcvlwpxnwjwixlzn{o}p}q}q}r~rqqw{~{~{~z~z}z|{{z~yz{umqnqorpqrprnplglmmtputvvvwxwxxzxzxyyyxywywywxwywzxzyzzxzuzuztztzszr{rzrzr{s{s|s|t{tzszrxqwqwqvrwsxuxvxwxvxswqupupuqxqyrypxpzpzquqtqtrtrtsutuutvsvrvrvqxoyvy{zyyxvwrvptqttuzv}v{uxuvyt{srqqurqpqq~p{oyoxqwrwsxsxsytzu{u{uzuzvzvztyrwoumtlskqnpoppqpqormrlrlrmspztuts~suvvvu~v}y}|}{~ywwxuytvvxvyvyvtuquuvvyvxvwvywzw{v|t}u}w|w}v~vwxx~y}y|yzyzyzyyyyxzyy{x}wyqyqysytytytytxswsvrurwqxrzuywywwvuvwwyxvvlqipnsqvvzwxx{y}yw~w{xyz{||w}w|{zwzrzq{r|s|w{x{x{w{uzsysysysysyszt{u|vv~wtuvxz{|v{s{rzvy~yxxwww~w}w}w}w}v}v}v~v~t{kq`cX]V[V\\[_bgjpovrzu}v~u~tt~uuuu~t|r{q{pzpzpypxoxovnvmunununtntntmtmtqu~vwwwxzzyzx{y{z{{{}{~{~z}z|z{{y{wzwzvzvywwvuvtvtvtuvvvwwwwwxxyxyxyxxxzyzy|y|y{vzsytzu|u|svtxw}{{zy~y~y~y~z}z|{||}|}z}w}u}t}t}u}v}w}x}y|z}{}|}}~~~}odhrz{|y|x|y|{|{{{{z{{{z{zzzyyyyxywzwzw{x{y}y}w~u~u~v~v}u|v{wywwwvwuxvyyz~xwxvrtnroqvuy{zzzz{}}{umjopruwxz{{{{||~~|{yxtot{~~zy}|}~z~y{~~}}|{{|}~~}~}|~zz{}|{r}W|A{G~P~mqsy}~~~}}{~|{xz}zwy~~~}~|~{~}~~}|~||x{{{|}yxw}tp~f~e}n}u~z~~~|~|~|||{{zxyyxxy}w{pzg{o}}|rh[V[lxzywvwyzzz|}|{{{|{yw~u|rzkwktZtRvU{a~tuyz{{zzyyxwx|{zxyzzywvwy{~xrvxz}}{{}ttttuuuuuuuuuuuuuvvuuuttttuuuuuuuuuuuvwwxxwvuuuttttuuuuuvvvvuuvvvvvwwxxwxz~|{~xv~u~w}v{u{xz|{}{{{y|v}u{wyzwvuuw}yz|w}u|vzxxzv{u|tzrxquounsnuoyp{qzpzkydygxlwowpwqxqwqwqzr|r}r~q}nzlxhvfterfpgqgtgxhyizizizizj{k{k{k{l{mzmzlylylzm{n|o}o|n|n|o{nzmymxnxnynxnunpnnmrlwk}jiijljji|kumnnkmilglgmhngofoemilpisanYfX`Zdaqgxk{k~ihhhh~g~eb^\\Y`kyqupuntksqsrrrsnzn}nxmplpmpppotszr|r|t|s}ojjlmnonmrqpopqqof\\[_T[{jzo{q|r}s~u~u{szq{pmj|i|h{i{j{l{n|q}t}s}p{mwit`r_rguswuyoylzl{m|n|n}n}o}o}p}q~qt~z}{{zz|z}zyyvyv{xyzzu|rtszrvpqpoponnjnnotrvuwuwvxwxvzwzwyxxwxwxwxvxvxwyxzyz{x{rztzuztztzszs{s{r|r|r}s}t|t|s{rzrysysxsxtxuyvxwxuxsvqupuqvqwqxr{o|l~n|qvrrqrqtrusuutwswrwqwqwrwqyuyxzyzzxytwrwrvstyt|v|u{uywxxw|trs~z{z{r{q}r~r|qzpypxrwswswsxsytzuzuzuzuzvzvztzsxrtpsormrnpoppppqoqnrlrlrmsq{uuts~tuvvvv~sx|x~{xvzjouuvuwwyxvwuwvxwzw{wzw{y|z~xuvxxwwwxx~y|y{yzyyyyyxzxywzw|w}wyxyuysyqxsysysxrxrwqvqwrxryuyvyuwtvuwxyzvymsmtqxtzx|yyzxzwyywzwxwyz{}{||n|s|xzl{n{o|p|s|u{w{w{v{tzszsysysyszs{s|t|u~v}v}v{v|u}v~wyyy~x}xwvvvvv~v}v}v}v}u}t}t~t~r{hq[bU[T[Yaaijrqyt}u~wwvutuuuuus~s~r~r~r|rzqyovnvnuoupuqupunumvmuovywwwxzyyzxzxzyzyz{z|z}|}{}{|z{xywwuvuvuvvvvvuvuvuuvuwuwuwvwvwvwwxxxxwxyxzy{y{xytxqwqwryryqvqwuzzzxx~x~y~y~z}{|||~}}~z}v}t}s}s}t|t|u|v{v{w|y}{}~~~~{niovy|zy{w|y}{}|||{{{{|{|{{{{zzzyzxzxzxzzzz{z|y{w|v{v{uzvxvvwuxrzszuy{yxxw|vuvrtsruuy{yy~y~z{||}z}wtprssttu{x~yyyxw{}|}~~~}{yzyxvw~z~}|{{}~~}{|}}}}}}|{||~~~~}{}z~z{||}{i}P}R~_osty}~~}~z~yyw~u~w|wuz~}}~~|~|~~~~}~|~}~}}yyxxx~vrh~e}k}q~w~}~{~}~||{|~{~zzyyzz~y}w|t}x{ylefefmttrxzwwy{zz{|{{{{zywtt}r{lxiv^vQxY|d~rwyyz{zzywvvx||vnlrz|yxw|~y~uz||}~}|}ttttuuuuuuuuuuuvvvvvuutttttttttuuuuuvwwxyyxwvutttttuuuuuvvvvuuuvvvvvwwxxwxy~{|~y~v~v}z{{z|z~zz}{z{y|x|w{xz|xvvw}y{|x}u}u{vzyw{u}t}r{qwpwovoyn}o|ozozmzjylyoypyqxqwqvqvrxs|r}r~q}myjugsfrfrgrhshuixjyjzjzkzkzl{l{lzlzmymymzmzmzmzm{n|n|n|m|m|n|n{mzlylymzmyntnqmplvj}ihiijklkk~kwlrmpmnmlmlnkokpjpgpkormwgz]rYdXa]fbqgzi~hhgghh~g~fc^Y^j{qwquptqututtprmymvmqkmimfpkrkunyozp{s|q}n~jjk~l}m}n~mmsrqqqrsutomiZW}c{lzo{rtuq|n{l{k}k~i}i|l{o{q{t{u|u}v}u~s}q|oxbs\\rfusxtyn{n{o|n}n}n}n~n~o~p~r~t~w}y{wwxuyvyvpthwn}uwyyv}u|u~txqrppppnqnqqsttwuwuwuwuxuzvzvxvwvwvwvxvxvxwyxzzz{x{q{sztyuyuyuyuzt{s|s|r}s}t}u|t|s{tztyuyuyvyvyvyuxsxrwquqvrwqyrztsnnowrrrrrurvtvvtxsxqypxpwpwrxuyvywz{x|vzs{rxruusyu{uzvzxzyy{v}s~s~v}}wrvqxryszr{qzqyrwswswswsysytytyuyuzvzvzuzuxttsssrqropppqpqpppoqmrmrntr|vvutuvvvuu~tw|uuz}vudjutuuvxxzwyxzw{x~y~y}z}|~}}|}}y~x}x}x}x|x|x{yzzyzxzw{w{u{uzvzwz|zzztyrysyszszrzrzqyrysysztyuxtwswuwxy{wzqvryv{x|z~{}|z{xzvxvwvwxzy{zx|l|n{t{f{k|m|o|r|s{v{vzuztzszszszszszs{t|t|v~y{zwywxxvyu{u~vwwwwvuuuuut~t~t}t}s}r}r}r~p{doXaT\\X`ajjtqzv~wvwvuttttttvuuuuut|szqwpvpvqutuuuruounwnwnvtwxx}zzzzyyyyyyyxyyyyyz{{{|zzwyswntltmtouqvsvuvuuuuvuwuwuwvwvwuwuwvwvwwywyxzxxwvtuqtpupvpvovovryy|x}v}v|w|x~y~y}z|}}}~}{~v}t}t~s}s|s{szszryrzv|z}~}~|zx{w~{|{x~yzzx|z~|}}||||||}|}|}{|{|z{zzzzyzy{y{z|z{yyxwxvwvwvuvuvuxv{y{zyyyxw~wwv}x}yzyyyyz}{}{|z{x{wzvzv{u~uuttxw}xxxy{~~||y{|}~}}||}|{y~x~y{{{}~}}}}}}~~~~~}~{~z~{|{vw|wtqoqsuy||zwwzz~x~v{|~~~~~}~}~|{zreccnuz{zys~o}p~r~w|}zy}~{{~{~}~~~}~{zyzzyz~z}raaimoqpliqzyxz{{{||{||{yvuss~t}t{nzezVzb~k~sxwuuwxxxvttvzzxtmdluwtw|}|yz|}~tttttuuuuuuuuvvvwwwvvuuttttttttuuuuuvwwwxx~xwvutttttuuuuuvvvvuuuvvvvvvwwxwxxy{}z}u{wy}wyyy~z|{z{y{x{xzzy}wvx~x|{y|w}u}u{wyzv}ts}rzrxqwq|po|ozoyoznzo{p{q{qyqwpuptqwrzr|q}p{lxjshqhqhsitiuhuhwhwjxkxkxkykzlzmymwnvnxnzn{n{nzmzmzm{mzlzmzn{m{lzkylzkzlwmsnpmtkzihghhiklkkkxkulsmqnpoopopprptntoquozhb]s[i[b^icsfyg|g~ggghh~h~h~cZ^g|oxrursqtqvpzozmymumqhqcm_nhqjqkrlvnypzn{k{h{fzgxhxizl|mmssss~ts~t~uvvtrmec|j{n{r}v~r}l|i|h|i}n}o|q{s{v{w{y|w|v{v{u|t~u~u{duVr_tpwoxjyl{o|n}n}n~o~p~p~qsu~x}szsvwtwrtreq]wlvwzy~uwv|utrqqqqqrssttuuvxuwuwuwtwtzt{uyuvuuvvvwvxvxwxxyzzz{{t{r{szuyvxuxvytyszr{r|r|t}u}t|t{uzuzvywzzzyyvxtwrxqwqwryu{u~uwxvmmzqustsvsvtvvtxsyqypxpxqxsxuxuxtyvxzv~tr|qwsturwtwyw}v~uurqqtq|q{rzs|s|r|qzrvsvtwtwtxsxsytytyuyvzvzw{wyvvvuutssqqpqpqpqqppppqospvs~vvuuuvvuuv}v}x}|yw~x{m\\esquvvyx{y{y|y}y~y{~|}~~||{zyyzy{x{x|x{yzzyzy{x|w|u{uzvzyz|z{zwztztzt{t{s|s|r|r{s{sztztyrxsxuxxzzyzvxx{z|z||}||~|}{zywxvxvzv{yx{q{k{l{g|i}k|l|p|q{tzuytysys{s{szszszs{t{v|x{~z|x|v|t|s|ttuuuuvutttssr~r~q}q}p|p}q~r{bjU`W`bjluq{u~wwvuttttssttvvuutuv}vzuwtvtvuvxvxvtuquqvpvnvpwwx{y|y{y{xzxyxyxxxxxwxxzyzzxxswlugshsitjumurvuvvuvuwuwuwuwwwvwvwuwvxvxvxvxwxwvvssqqqpspuoununvqxxywzuztyuzw|y}y|y|}}}~~{~w~u~u~t~s}r{ryqxoxpyt{z}{yt}y|}}~zzyw|y}z~|~~}}|}|}}}}|}|~{}{|z{y{y{x{w{x{x{wzvxvwuvuvuuvuwxzz~zyyzzyxxyyyyyyyzzz}z|{}{|yzxyxyxywzv{vv~v{x}xyy{|}z}t}vy{}~~}{{|~~~}}}}}~~~}|}|z~{~}}{uv||{ywuuwzyyxts|}wy~}~~zz{|ynjstovz|{zy~t~sux{~w~st{|yy~{~}~~~}yxyyxz{~xpnrstusmggu}~{z{{|}|{zzywtsrtw~y~v~p~b~mq~uwsonqtwwvtrsvwy{r_Y^fkryxwywwz{|}}~uuuuuvvuuuuuvvwwwxxxwvvuuutttttuuvvvvwwwwxxwvuttttuuvvvvvvvvvuuuvvuvvvwwww~wwx{}}u~r{vx|yxxx~y|z{zz{y{vyvwzww~x}z{|x~v~u}u{xx{v~t~t|ryswsxqzoyoxpypzo{p{q|q|q{qyqxqwqwqyq{p}o{mvkrjpjqjtjuiuhugtftgthtiuivjxjxlvltnuoyo{o}o{nznymylylxkxkxlylzlzkzj{jzkwmtnslxj~hgfhhikllk}kylvmumtmsnroqppqpqpqqpumyhdb~ar]d\\b_gbnfxg}ggggg~i~l~k~c_e|mxqtrrqsoonpmxnynzozfxctfxp|o{nxmym{nzlygxcvbtctcufxk{nnrsss~t~s~s}t}v~vrrurll~o~r|uzo|k|i|g}j}p}t}u|t|t}u~u}r|rxrvrxs{u{vzjvXu[slulxkykzm|n|o}o~pqqqrtv~v{vxyvysvpdp^znxyzwv{zzusrprprqttvvwvwvxuwvvwuwutytzuyuvvuwuvvvwvwwwwwyyy}{v{r{rztxuxuwuwtxryqypyq{s|t|u|u{vzvzvzy{}{|yvxrwpwqvqzuxwxxxvij|pwtusvtvuuvswrxpxpxpxswvwwwxwswrwyvutszrvsrtwt~srqrqpopqq~s{r{r{r|rzrwswtvtwtvswrxsxsxtxuyuzv|w}x~x}v|tyqrorororpqqqqqqsqwr~uvttuu~u~uuu~vxtquux{y~{n]duvu|v|x}y}y|y}z}z}|}}||}}||{~y}x{wzyyzyzyzyyzy{y{z|y}x}wzwxxyzz|{|{z{w{v{u{u|t|t}s~s}t|t{t{szrysyuyw{y{xzy{z|z|z|{|||}|}{{{yzwyuzt|vzzxzozizk|k}l~k}n}p|s}t{uzs{s{s{s{szszszt{u|uxu~u~s}q}r}utssrtuttssrrqq~p~p}p|q|q}pzagXbbknvu}vwwvttstssssstvvtsrs}v{yzywywwwxxywywwvuuuvtvsusvtwyx{xyxzxzwywxwxvxwxxxyzzyxxrwjtfshsguivovtwwwxvwuwuwuwvwxwxwwwwwvxuxuxvwvvvtuptnsoqrqupunvnvrwxyw{uysxuxxz{|z|{|}}~~|~x~v~u~u}s|qzqxpxpyryv{z}~|zy{~~}}{w{w}z~{~}}|~{~{~|}|}}|~|~{}z}y|x|w{vzvzvzvzuxtxtwuvuuvuwwyz{y~xwxyzyy{{zyxxyzyyz~z|z{z{y{y{yzyzx{w{w|w}x~xyz{zz~xws~tx{~~~}||}~~~~}|}|{|}~}|{}}zyyxyzzuxtr}|y{~x|~}~ysw|}|v{z{xz|~{xx~wwvxz~w~t~v{ywxz|}~|zyyxuvtty||zwyyttxv~p~it~~|||||}}|wuvuttuwy{{znqt~wvrmlquwwvuuuuvwwtgRIVgrzxuwwvsoqz}~uuuuuuvvvvuuvvwwxyy~y~x~xvvvuuuutuvvvvuuvwwwwwwvutttuuvvwwwwwwvvvuuuuuvvvvvwwvvvx{|}w{tzuy|xwwx~x}y|zzzxzuyvy{y~y~z|{y}w~u}t|vzyw}v}t|sztytxtxrxqxpxpzp{q|q}q|q|q{q{rzrxqyq}p|ozm{lrlplslukuitgqeododperfrerfsgriqkqmtoyp|p}p|ozoznzlykwkwkwkxlykzk{k|k|lymvmuk{igffhijklkk|kxlwlvmwmwmtmrnpoonpmpmslui}ef~hsgfaa\\_^afpg|hhggh~j~o~t}o~c}e{lxqsqqprnqmrntovqyrz_x^xi{o~nl}j{k|m{m{j{hyfxevevgwl{o~oqr~r~r~q~p}p|lwszvpqsspnor~r|n}i|i|i|l}q}u}t~q~ponm{kujpkspwuxwxrwgwcrkvvzu{n{k{n|p}q~r~q~ppqrt~v}wzywztxqfrd}qxz{|vx{wvrrqorqtuwwwwwwwxwzu|szrxuwwvwvvwuxuwuwxvrvrwrxsyyzuzpzqzsytxtwtwrwownwnwpzr|t}u|u{vzwzvzz|~|xyuxqwpwqur}uywwwvsnf_f}pxsvrwtwutuqvpwpwqwqwtvxv|v}vzvyv{vwwv~s{rzr|rrppqpppprr}rzryrzszsyswtwswswsvrvqwqwrwrwswsvuzvxyw|u{svpuosnpnqoqpqprqvs}tvttt~u~u~uuu~ww{lm{vy|}xmpwzuv}x~x~z}z|{{{{|{}{{{zzy~x}v|v{vzyyyyyzxzx{x{x|z|{~zz|zyzy{z|{|{z{y|w|w|w}u}u~u~u}v}v}u|t|tztzu{v{x{w{x|y|y|x|y|y{z{{{{|x{vzuzs{u{xzysyizm{n}ml|n}o{r}u{uzt{s{s{s{szsyszt{s}tus~r~r}t}u}v~u~s~q~q~r~t~t~t~s~rrqqp~o}o}p|p|q{mxafckq{v|xwvvussssssssssttro|nzqyvyzyzxzwywxxyxywyvxuxuxuwtuurvwwzxyxzwywywxwxvxwxxyy{{zzyuxmtfsftgumwsxvxxwxwwvwuwuwvwwwxwywxwwxuxuxuvvvvtupumtntqsurvpwowrwvywzuyuxwxzz{{{|{|}}}~|~x~v~v~t|r{pyoypyqytzx||}}~}~}|}~~}{{|x|{}|}}}~|~{}{}|}|}}}~|~{~z}y}x|w{vzvzvyuytytytxtvuuvuwwyzzzyvvrwo~s{z{||{yvwxyyxyy}y|y|y|y{y{y{x{x{x|x|x}x~y{||}x}tuy|}}}}~~|{{}~~~}~}}}}|}}}}|}}~~~|{zyy{zyxwxyx~~~||}vytmrz}~}}}~}{}~{ww~xxwx|z}z~x~xzxvwxz{{yvuttsqkhnvyxvwtjlvyv~sw~|||||}}v~sttt~uwy~{~|{wrq~t~vwqknuvwxwwwvuuuxyr_J[nqtxxyxvoghruy|~vuuutuvvvvvvvvwxyz~z}z}z}z~yxwvvuuuuvvvvuuuuuvvvuutttttuvwwxxxxyxwwvuuuuvvvvvvvvuuuwxx|x{x~wwwwwx~y|zyzxz{z~y~yy}z{}x}u}t|u{vzxxzuzt{s{szsyryrxryqzq|q}q~r}q|r}r}s}r{qyqzp|o}n{krlqmtmwlvjtgpdlclbnbpcqcpcqdpfohnkqmwo|p~p}p|o|n|mzmxmxkxkylzl{n|n{m{mznynzj~hffgijklkjjzjwkwlwlylylulrmpnpmqmqmplni{gjxnpogif`d]``kcwf~hggj~k~p}y}x}i}g{jxpupsosmslsmspuvxzxfwgwmym{kg|dyfzl}oponk|iyjyo{q~qpp~p|o}n|m|m{jvmypopqqpopqp~m|f{g{k|p}rsqnmmkj{frcldolttwvxuxrymskx|~x}q|r}s}t}t}s}q~ppqrsu}wzxxwugxktvy|u}sz~}{yssppqqtuvwvyvzv|v~tr|rzsyuxuxuytytxswswjviwixnxuxsylymzozqyrxrxqxnwmwnwpzr}t}u|v{w{x|v|z}||vzszpypysttdvXuZtnqla|U{T|`~nzqvrzsytutovnwpvsvtuuuzu~vvvwwyyxurrrrpqrrqrrrzrvqvqwrxsxsxtwuwtwswrvpupvpvpwpvqrpnqrt{wxxvxvxzw~t{qwnqmrmrnrosqvt|tttsuvuuuuwwjbgv}{~{~z~ywtvwx{}{{|x|y|y|y~y~y~y~x~w}v}u{vzwyzyyzxzw{w{w|x|{}}}||{|y}z|z|zzzy|x|x|x}v}v~v~v}w}x}w}v}u{u{u|v{w{w{w|w|x{x{x{x{yzy{z{x{uztzrzs{u{u{tnxs{s|qnzozqstxw|wzu}t{s{s{szszszs|r~qrqqu~v}x}w~v~t~r}q}r}r}s}s}r}q~q~p~p~p}p}p}p|p|nziqfjmwvx~w~tsutssrrssssssrrp}nyowrwvwyxzxzwywxxyxzwzvzuztztxuuunurvxw|wzxywxwxwxwxxyyzz||{~{yxquiugulvuxwyxyxxwwwvvuvuvvwwwzw|w{wxxvxvxvvvvvtvrupuotqtusvqwpwqvswtwtwuwvxxyyzz{{|}|~}~}|~w~u~u}s{pynxoxpytzw{{}}~||}}||~}~~}}{~|}|}}}}~|~{~z}{}}}}}~}~|~{~{}z}y|x{xzwzvytysysysxtwuvvvxxz{{|{yurniun|{{|}|yvvwwxwvvww}x}x}y|y}y|y|x|x{x|x}y{}~~{~wx{}}|||}}~~~}||~~zx||{ss}~~}}|}|~~~~~|~{{{|}~}}}ytv~}~upps|}}}}}~~~~}~|~{~~{xxz~zywyy~z~xwwwwxxyyxsqpqqohdjsvw~x~xpeityy~z{}}|||{|~}x~s~s~r~s~uwz~|~}}y~n}g}j}p~stoloyz{zz{{zwuuzyvncowsotwzyvofdjnu{~wvvuuuvvvvvvvwxxy~z}z|y{z{{|z}zyxwvvuvvvvvuuuuuuuttttttttuvwwxyyzzzyxwwvuuvvvvvuuvvvuuvvvvvvvvvwx~y{z{z}y~y~x~x}y{{z|x}w}u}t|u{vxwvytzszryqyqyqyq{r|r~sr}q|q}r}s~r|rzqvp{o|mvkqlqnuoxnwkugqdncmcocrdsdsctcreofniolrnyo~pp~p~o~o}o{ozmzmzn{o|o|n{mzmzm{n}jgffhjjkkjh}gxhvivjwkyjyjujrkplomqnunukuj|izkomjogoiij`iZh^neyhhiklr~y}y}n|i{jyowpunumtlsnstvzx~ysxuxuzp{gy[t[rawj{n}opop~n}n|q|q~pnn~m|l|k{k{kzlylzl~moqpopqqq|lzeyh{o|s~sqonnmki{dr`lamhrrwv{vzuxswl}~t~s~t~u}u|t|r|p}o~o~pqs}v{vytziptuzuzpv||z}|{ttqqqrtvvxvzu|t}t~s~s|s{tztztztzt{szqxnwfvfvbwjwrwpxhxiylznynxpypyoynxowp{r}t|t|v|x}x}w}y~w}szryq|q}s}uutnqnpum|g}XyNxMzZj|ovq}q}rwtqvowtvwuvtwtzt~uvwxxyywtrqqqpqststu|tyswrwsvtwtwtwuxvxuwtwruptotoupwqwqsnknjqpumvoxvy}ywt|qumrlrmrntrwt|trrrtuuuuvvyn\\Wbl~xu~wxxuvwy{z}y~x}x|x|x|x|w|x|w|v|v|uzvzxyzyxzw{w|w|x}x}|~~}|}y}z|{{{zzx|x|x|x}v}u}u~w~x}y}x}x}w|v|t|u{v{w{v{v{w{xzxzyzzzzzz{y{w{vztyszr{q}qsvvzw{syosqwsfwiywy{v}t{s{s{szszs{r}q~pop~q~v}v}x}w~v~t~r~q~r~r}r}r}q}p}p}p}p}q}q}q}p|o|mzkrlsq}t~u~t~r~qtsssrrsssssrrrr|rxuvwvxwyxyxyxxwxwzwzvzuzuzu{uyvwvqvqwvw{xyxxxxxxxxxyxzyzz}|||{zswkwmwtxyzwzvzvyvxvwvvvvvvwwxyx{xzxxxvxvwvvvvvuusurtqsrstrvqvqvquqtrurvtwvwwxyyz{{{}|}~~|~w~u}t{rynwlwmxpyu{y||}}||}|{zyz~|}~}}}}~|~{~|}{|||~|}}~|~|}|}{}{|z|z{yzwyuysysysysxuxwxyzz||}}}yxrnqm}{||}}|zvu}u~uvutttu~v~w~xxyy~y}y|x|x}y~{|}}{|w{x{}~}||~}}}}}}|}}}}}}~~}~|~|}~~}}}}|}|~||}}~~}~}}~~~|}yz||~|{{{{{yv~x~}~|zyyzzxvxzvttxwxxzywspooonhdhptv}x~wqjpw~z~|||}|||||{{{x~u~t~r~r~s~v~x~{~|~w~l~d~hppooqtyyzzz{||yyy|{zyxzzvru~y|{vncaiknv}wwvvvvvvwwvvvwwwx~y}z}z|z{{z{{{|z~yxwwvvvvvvvuuuuuuttttttttuuvwwxz{{~{~{~z}y~x~wwvvvwvvuuvwwvvvvvuuuuvvvwxx~y~yxww}x|z||z}x~v~t~s~s|uywvyrzqypxpxpyq{r}ssr~q|q|r|s~s|rzqwpwowmtkqlrouqxpxlvfs`q`parduevfvdvduetfshqkqmwo~pqqppp~p}o|o|o}o~m}k{jzk{l}ojefgijkkkig|fxfugvhviwhwhuhshqjolpnvoxlvkwkqlhlgkhokpoeqWg[ecugijlmq}u|w{q{l{lyoxpxnuntntqvvyyy|ywz{zx}o|_tNlUmavhyhyl~m~m}o~pq}r{o}nllk{jzizjzkym}m|k}koqp~p~r~s}s|qynxjyl{q}srqonmmkj|fvao`mdoovv|xzwwu|ownp~s~t|s|r{qzo{o|o}o~p~r{tvrsnymtz~~pyztx~x|}zttprqssvuyt{s{r{r{q{t{t{t{t{s{t{t{s{pzlxiwjvdwivovnwgxiyjylylxnyoyozoypxp{r|s|u|w|x}y~x~w~t|szrzt~vxwxu{r}n{j{d{ZyRxQzY~f|n|pqr|tuutv{u}tysxszt~uvvwwxxvsqppqpqsvwxy~x}vzuywxwwvwvwwxwxvxuwruptntouqwtyt~qunlpmtpvvx}yywvr|mtmrmsousyu}t~qpqstuuvvwyh[ajzynvxzy~w~x{zv|t~xyz}y|y{x{w{w{v{v|v|vzvzxyyyxzw|x~x~y{~~}}z|{||{|z{x|x|x|w}t|r}q}s~u}u|u|v|w|v|u|t|v{w{w{w{xzxyxzyzzzz{z{z{z{yzwxrxl|koxv{yzyutqmtuvdzf{lz|x}u|t{s{szszr{r}q}p~pqr~w}v}w}v~v~usrrr~q}r}q}p}p}p}q}r}r}r}q}p|n{myo{r~s~r}r}r~rssssssssssrrst~u{vxywywywyxyxyxywyv{u{u{u{v{w|w{wzwzwtwrxwxyyxyxyxyyyyyzyzz}{}||yztzlyryyzx{u{s{rzsytxtwuwvwwvxxxzxywxwvwuvuvuvuvuutttsrsrtrurvququrtrtsvuwwxzx|y|z}{~|}~|~w~v|uyswovlwlxpyw{|}~~~~~~|zyvv~y}}}}|~|~{~{~{}|z|z~{~||}|||||||||||{{{{{yzwzuzsyrysytzwzy{{}~}~~~xwrq{{}~~}|zw|uzu{u}u~u~t}s}s|t}t}uwxxy~z}y|y|x|x}y}{~{{}{{y{y~|~~~~~~}~~}|{~{~y}x}x|~}||~}~~~}~}~||}~y}u}u}y~}~|||~~~~}~|}~{|~~~{~y{{|{xu|~~}|{{{{zwwvvxxywyz{zwsqpoong]`mrr~t~tqoru~v~w~x~z|||||}|zzy~xw~q~m~ouwyyyuqpvrnpvxyxwwwyz{zzz|}||zxwvvy~|~}zqhgjhenxxwvvvvvwxwwwwwwwxy~y}y}y}z{{z{z{{z}yyxwvvvvvvvvvvvvvuuuuttuuuuuwxy{~|}|}|||{{{z{y|x~wwwwvvvvwx~x}x}x}w~wwvvuuuuuvwwxxwvv~w|z||z}x~vtsr~s|uxwsxpxoxoxpyp{q}qrr~q|q{r|s}s}r{qxpvosmqkqkrmvsxoygx`v[tUsZtdvgxfwewevfufthskrmxo~pqqpop~p~o}n|l|k|i|h|h|j}jlhedghklkihh|gxewfvgugvgvgvguhtirkqnuovmultlllekflhomnshw^h[abtgjkkl~o|rztxryo{mzoyowmtmtouswwyyzzzy{z}w~s}gvPkSkavgxfyk}i{buhzo~q}q{n|mllk{jzjykzlzmznyj}kqs~t}t|v|v{uzswpwnyp{r~rrqomlklk}ixetbnbmkstzvzuwst~~r}m~o}r}r|q{pyoynyozozo{p{ryrpqql}qwvn~{xytw}y|ytupsqtrwryrzrzrzrzrysztzs{s{s{s|s|r|n{kzgxjwlwkvlvjwfxiyjykykylzn~o{pzqyqzr{tzu{w|x}x~x~v}u|szt{v~wwv|t~q~l|g{cz`y]z\\z]|e|loqr~sytxt|ut|s{s{t~uuuvvvvusrqqppqtxz~~{y}wzwxwxwwwxxxyxvyuxrvptntourwu{vururqvvx~xxxwurn|nunqpst|wvsqrsttvwxx{~wtu~{hhuy~{|{{yyzv{t}tw{|~z}y|w{v{v|w|w}x|x{w{wzxyx|x~zz{}~}||{|{}z~z~y}x|x{x{w|s{p{l|n~o}o|p|t|v|v|v|u|v{w{x|y|yzxzxzyz{{{{z{z|{{{{xynwd}^n|yy|xxttnwrzl|m}i{tz}w}u|szszrzrzrzq{q{q}r~t~x}v}v~u~utssrrr~q}q|p|p|q|r}s~s~s}r}q}p|p}q}qqr~r~sssssssssssssstu}wzxxywywywywywzwzv{u|t}u~vxy~x|x|x~xzxvywyxzzzzzyyyyyyyyyz|z|z|x{u|o|o|t|s}q|o|n{ozpyqxswvvxvxxwzwyvwuuvtvtutvuvuwtvtususususususustsutvuwwx{x}y}{~{|}~{~w}uzvxwvuvowkxpyy{~}~~~~|{yxvu}w|{|}|}{|z{yzxzyyzxzvyvxwwyxzy|x|y}y}y}z}z|{{{y{wzuysyszu{x{z||~~~}~yx}{~~}{x{vyuzu|u}u}t{s{szt{u}uwxy~y}z|z{z{y|y|y|y|zz{{|{}{}~}|}~~}{~z|w{tzs|n}t||ss{}|}|}}}|~zwxs~h}ly~{{{|||y{~}zwvu~}{~y}x}~~~~||~~}}|||}|{wrtyzywxy{zxtsrpqq_W[hoqqqonpq~p}p}r~vz}}}~~}|{~z~|~{~tmotvxyyywvvsnqy|zxvttuwyxwvwz||xwwxx{}~}wpmkihpzxwvvvvwxxxwwwwwwwwxxxy~y|zz{zz|z~yyxwwwwwwwxxwwwwwvvuuuuuuuuwxy{|}|||{|z|z{zz|y~xwwwvvvwx~y}y|y{z{y|x}x~wvuuuuuvvvwwvvw~w}y}|{}y~vtsrrs|uxvturtpuowozo}o}q~q}q|q{r|s}s|r{qzqxounsmskskvmyc{\\y]xZvWvVv^wfwfvfveuesfqhqkum{o~pppo~m~l}l}k}j{izh{h|h}iiihfcbcbb`cgii|iyhxhvguhuiuhvhwiwiwkwnwovntnsmnmemenkosoyl|dn]bavhlll}l|mxnupuqwqzo{nxmukrmrpuuxwzy{y{y}yww~sz[oSj`tfxezj|ew[obwm|o|p{n|mmmm|mznyozozozpzk~kru|v{w|x|x{vzuxqypzp|q~qqpnljjk~k|k{jyfpbkgopvtysxqv}x{pzozp{r|q{oynvnunuovovpvpxqwrqqxmpw{svz~y|yvywzyytwrvrwqxpypyqyrzrzrysyrzrzr{r|q|q|q}m|e{`zeymxkwkwhwfxjykzkykylzno{p{qzrzsyuzuzw|x~x~w}w}v}v|u{u}r}q}q}q}p~j}f|ayaxbzbz`{d|ilprs}s|s|tt~t~t}ttttttuuvw{ztooqswy~|}y|xzwyxxxxxxyxxxuztyrwpuntouqxt|vvt}sxvzwxwvvuspo~osprs~wwvts~s~tuvwxyy~umjkclv~y{{y|wzw{u|v~wx{|z~x}v|u|u|w}x~y}y|x}x}y{y~zz|}~~|{zz~z}y~yxxx|x{xzvzt{rzk{j}k|k{p{t{v|x|w|v|v{w{y|z}z|y{y{z{{{{{z{z{{|z|yzqvixa|p}|z|xxv|w~y~y~m}p{zy~v~u|tzs{s{svrtrruzv}v~y}v}u~t~uuttrqrq~q}q}q}r}s}t~t~t~t~s~s~r~rrrrr~ssssssssssssstuv|xyxwxwxwxwywywzw{v{tyt{uwxyzyyyyz}z|{|z{yzyyyyyyyyyzy{y{x{v|r}h~l~m}l}j}j|k{lznxqvuvwvwxvyvxuvtuttutututvuwtwtwsvsvsvtvtvtvtutuuvuwvxyx{z|{~{|}~z~w|vwxuzu|uwuoxsyy{}}~}~|~|||y}x~wvv~v|w{yzzxyxxwwwvvvvvwuwqsnopptsyv|w|w}v}w|x}x}y|z{{y{wzuzt{v|y|{}|~~~}}}|y{wyuzu|u}u}u{tzuzvzv|w~x~y|y|y}z|{{z|y|y|y{yux~x|{~~~~~}~|{z}}~~}{~y{typxmyg|n~}yx~}~tjjnqsvy}z||xofgoz||{{vsyx|~|zrmvxwuvv~w~|}~~|~{{||||||}|}{sswwwvvx||xvutrrhW]_fnrsroors}p}o|o}r~w}~~~~}{~z}{}z~uqqtuwyzzyvsqpt||zxvtrsvwutrtw{{wyyyz{|}}{xrmjnuzwwvvvvwwx~x}x}x}x~xwwwwwwwwx~x}y}z}y~yxxwwwwwwxxxwwwwwvvvuuuuuuuuvwz|}|~z}|{|z}yxwwvvvvvwx~y|y{zzzzz{y{x}w~vuvuuuvvvvvuu~v~w}x}z{{y}wusrqqr|tysvtsvqwozn{m|m|p}q|r|r{s|s|r|r|q{qzpypwnwkxczUzTz`y\\yWyUy\\xfwgvgueueseqhsk{nopo~m}k{h{g{g{g{gze|d~dghgeba^_b]SONU_]ciyjvjvjvkujwjxkzlzn{p{pzoxnwmummninooxp|m~gs`ebthlmm|lyltmqmroupxoymvkskrnsrvvxy{z|z}yxx~w}v|hpYjarhzf{jzjw_qdwl{n{nzn{n~noo|p{qzqyqyqzrzm}oqvzwzw|y}x|v|u|q}p~o~pppnlkji~k}k|l|l}hvenfnntsytzovv}sxpwpyr{r|q{oxmumsnrorosospvpwpvn{k}mwqrstwyt{v|y|x|p{s{v{tytxrypyoyoyqyryryqyqypypzp{p|p|p|p|m}k}c|b{hzkylxjxiykzl{kzlzmzn|oupxqzsyuyvzw{x}xx~xxw~v}v|t|q}n}n}o}o~i|d{_x^wbyf{c{b|f~h~mqr~r}s}t~uu~tssstttvvv{~{~}v~s~qsvx{y}w{xzxywywxxxxwxxwxt{szqxovmunvqxt{u~uo~n{q{tvvvvvurqpwqrruvwvts~r~s~t|v|x{w|v~oiilkrv|yy{w|u{u|t}uwy|}zx}v|u|v}w~yz~z~zzz{z~z~|}yxxw}x}xwwww}x|x{vyuzuzm{h}i|o{t{v{w|x|x|w|w{w{y||}|}{}{}{}{|{zzzz{z|y|z{wxstntp{{|}|{|}v}u|yz~xw}u|t|t|tothulxwx}w}x}v}utuuttsqqrr~r~r~s}t}t~t~u~u~uutttsss~ssssssssssssstv}x{yxyvyvywyvyvzvzuyuwtotouzwxyyxy{{||{}z|yyxxxxxxxxyzyzy{y{w|r}f~h~i~hg~g}h|jzlxovrvrvtwtxtwsvstststtuuuvtwuxuxtwtwtwuwvwvwvwuwuwuxuxvxxz{{|||}}{}xzytxuvu|s}suvuyv{x|y|y{x{xzv{v|u}u}v|v{vzwyvxvwtvtvtuuuvurslnhijkpourvrvqvqwrwtyu{w|y|{|{z{w{v{x}z}|}|~}~~~~|zzwxuxt{u|u{vzvywyxzx{x|x|y{y{y~z~z~z~z}z}z~zyy~|~~}}~|y{x{y{y{w{w{w|w|w{txnvixd{n}~|~|i[bilouz}zwulistx|~{{}yvxvzzpjimruwy}}zxy|{z||}{z{}}wuwvuwy{}}zwutrn^[`\\fqwwustww~u~s}r~p~sz~~~}|y~w~w~v~tsrsuwyyz{xspu|~}|zxvsqruwvvtuuvzy|xz{zyyxvurnlr}vvuuuvvw~w}w|w|x|x|y}x}wwwwvvvvwx~y~xxxxxxxxxxxxxxwwwwwvvvuuuuuutuwy|}|~y}|{~yxwvvvvvvvvw~x|x{yzy{y{y{y|y|y{x|x}x~vvvvvvvvvvw~w~x}z||y~vtrpppq|sxvtyr|o{izfzk|n}q}q}r|s{s{rzr|r}r~s~s{qzlz]zSzVzZzWzNyVybygwhvftetesfsiwk}nnnn~k|hzfyezeze{f|^]afgfc^ZUUeic][RCQZai}mxmvlvnwoyo{q|r}r}q{nzjxiwhsiqkukyl|j{fwbjcqh{k~l}lyltkpkolpnrnsntlrkqlqptuwxyzzz|z~yxv{sxrurnbmetlwlwnvnvivjyl{m{m{m{n{oop}q|r{rzqzqxrvoyr}s}wyyyw{w}v}tsqpnpqolkk~k}j|j{kzl|kkjxiqmtrxu{owt|sysyszs{r|q|oynwnvouptpuptpvpxm|llzltlqirltkvpxtzs|s}r}s}r{syryqyoyoxnxoynynzmylymynzp|o}p}q~o}l|b}_|czjzmylzlzl{l|l{l{m{nyoqpwqztzuywzx|y~yyyxxw~w}u}r}r~r~q~p~k|d|^x\\vdzl~h~d}c~e}i~m}p|r}s~uuuttttuuvwwuv~z{~~xtsuwyv|tzxywywzvyvyuytzvzr|q{pznwnvqwtyw{s|p|jzgxkxp|t}u~u}uvvuts}rzrstvvvtq~r~q{v{x}t}pjiimpu|wzzw{v{u{u|u}vxy|}z~x|v|v|w}wyz{{{{{z}z{|}~{wvvv~w~wvvvv}x}w|vzvzwzq{i}k|w{y{x{x|x}x}x}w{v|y|}}~~}||~}{|x|wzyxxxxyyyzvvvpqmtv|}|}}|{~|~~~~~y}x|x{{z~xw~v}u{vjw^ykx{w~v~w~v~vuvuttsrrsst~t~t~t}t}t}t~vvvutttss~ttsssssssssstuv|xzyxzvyvyvzuzu{tytutrtktjuqvxxxx|~}}}|}z{xyxxxxxxyyyzzzz{y{x|r}g~g~hggg~h|jzmxovpvpvrwsxsvrvrtrtrusutuvuwuxuxuxuxuxvyvyvyvyuytytysxsxuyx{x{{|}|||x{uytvrwpwswuwqxqxszs{s{u{u{u{u|t|t}u}u|v{vzvzvyvxuxuwuvvvwustkmefgiklnmjgjeifkhonsqwtzw|z}{{{y{x|{}|~}~}~}~~~~|}yxwvuvuxvywzxyyxxxyxxyyyxvxxx{xzzyy{{{~~~~~~}zzvxrytxq{q{r{w|y}x{uyrxqxl{v}~{{z{qhlpqrorkajoqyxwwy}~yy{~~upu}~}~~~}sjltuvxz}zz|{{}~}xqty{|{yxyxwz||}}{yvurkfmdjuy}|ywxyyxt~q~pqv{}}|zy~vut~s~ttttuvxy~z~{zv~r|u}z}|}zxurooquxywvw{|xyxzzyyxsqrsrrv|}|vvvvvvvvw~w|w{x{y{y|x|w~wvvvuuuvwwxxxxxyyyyyxxxxwwwwwwvvvvvvvutuvx{||{||zxwvuuuuuuvvvw~x}x|x{x|x{y{yzzy{x{yzyx|wwvvvvvvvvwwy~{{~xurponopytrxozjzcz`zi|n~p}q}q|rzryryrzs}tts~r|n{Z{RzVzYySyRyXyaxfwgvftesdsfwk{kmmnm~k{iyhxhzh{j{b~SVafgec[RP^fjhfb[[XVY`kl{lypyqzq{v}u}j{dyby`x`w_uaudxeze{fzdzctdsfvjyjwkrkpjnknknlpmqmqlqkplqqtvwyyz{z}yx~v{tuomnkkjeliooprqrsrunxmzl{m|m|nzoyn|pp~q}r|q{qzqyqxryu|v{vywxtyuzt|r~rrqprqn~k}k|i|j{izhyiyj{flrnwnrqvt|nxv{vzv{u{t|r|q|p|o|o|o{pzpzqzqyp|hkn~nxltgrhsjunwrys{s|s}r}r{rzryqynxkxixiyizizjzjzl{n}oopsr~h}\\|[|b{g{k{m{m{m|l}l}m}m|n{ozpzq{s{u{w|y|zz{{zzyx}w}u~u~t~s~r~o}k}cz^vf{pnhe~e|f|j|o}r~uvvvuvvwwwxxwutw{|~~{vuuuu}u|uyvxvxvxsyryrzq{q{p|r|rzpxpwux{zy{u{p{lxivhvjxlxmxryt|u}uwvut~ssstvwwtr}q|w|y}rkhhjnrwzyy{v{v{v{u|u}vwz||y}x{w{w|w}x~y~z{~{|{{y~z{|}}}~ywvwwwwuuuv~wv~v|v{vzs{m|q|w{x{x{x|w}w}x}x|v|y}}~~}}~|~x}tysyuxrxvy{xwxrrjrfyv||}}{~{~|~{}z}z|y|y{{z|y~w~vzwhx^znw}v~v~v~v~v~vutsssrrttu~u~t~t}t}s}t~uvvu~t~tts~s~ttsssssssssstu~w|xzyxzvzvzv{u{u{uvuqunukupuuv}wxy{~~~}{|yzxxxxxxyyyyzz{zz{z|w|r}g~f~ggfg~h|kznxqvqususvswsvrvruquqvqvsvuuwuyuzuzuyuyvyuyuzuytysyryqyqxryszu{v{v{uztzqynxnymznzn{ozpyqys{t{t{t|s|t|t|t|u|v|v|vzxyyxxxxwwwwvxvwwtvmpfffgililebd_cbdeghllsqyv|y|z|{z{z|}}}~}~}~}~|{zwwuvuvwxxyy{y{yyxzyyxxwxuxwxyy~z{z{||~~~~~~~}}|~||{xyuwryuzy|z|y}|}}~{|{{zzxzy{}~~|{z||zxttttvrgpwz{~{wuu}xvux|}uonpv|}~}}|tqsvxxxz}|}}}}}}~}}odoxzzzyyzzz{|}}}|zxvsntvinsuyz|zz{zxtortrx}|zywusst~tvwvttwxyz{x~t|qzl|lwzvrqnjg~i~qwwww{|yxxz{zz{wwyttwy{ywvvvvvvvvww}w|x{y{y|x|x~wwvvuuuuvwwxxyyyyyyyyyxxwwwwwwvvvvvvvvttuwz{{{yxvuuuuuuuvvvvvw~w~w~w~y|yz|w~u~t}t{wz{x}wvvvvvvvvvwz}|z~vtrqpnn|pusoufxayazi{m|o|p}p|qxqvqvryr|s}t~s}s|r|\\|M|T{[y\\xYx[x_wdvfuftererfxk}illml~k{jyixizi{e}XR]eggd_XTZdjjgc__b`XTQTZco~u}u}u~gyZsXs]u_w`xaxbybxbxaybxbzbybwdxgyiukpkoknkmkmlnmpmqlqkrlsquvyy{y}y~w}v{tvrpnjkfighgliqjtmupstoxm{l|k|m{nzozo{opp~q|q{q{qzrzvzy{w{txtwtwtyszr{r~ssrsrn~izgyexewewewgxg}clvt~rusws~o{{{y{w|u}t}q}p~pooopps~r~nelqpznxkwkvnwpxqyszs{u{u{v{szoylxgxfxfyhzj{l|l~mnppqruti~[|X|`|c|i}m|n|m}m~m~n}n}n}o~p}q}s}u}w}y}z{{{{|{{y~w~v~u~u~t~t}t~k|cxi~rqk~j}k|l}n}q~svwwwvwxyyyzywvwxzzyxwvvwu~u|tysxqwqxpyozn{n|q|u{y{zzvysxyy~{}{z|v|r{lxewducubufvmys|v}v~w~v~u~u~ttuvyyy~v~q}z~{nhhikqu}xyzx{v{v{vzu{u}uwz{{}y{xzxzx{x{x|x|y|z{{||~{}z}z{z}}~{{|y}x}x~x~x~w~v~u~u~uv~vvw|x{wzu{r{u{v{wzx{x|w}w}x}y|v|y}}~}}}x~sysxyytyp{pzoysvpugvnyz}~|}z}y}y}z|{|z}w}t|u{|ywzykzf{vww}v}w~vtt~r~t~uutttttu~u~t}s|r|r|r|s}t}t}t|s|r}r}r|s|s}s~sssssssrrstu~w|xzyyywzwzw{w}w|xvxowlviusuvwy|~~~~}~{{yxxxxxxyyzzzz{{{{{y|v}q}h}f~g~gffg}kzoxrvtuuuuvtvsvrvrvqvpvpvrvtvwvzvzu{uzuzuztzt{t{szryqypxowpxqxryrzrzryqyoxmxmxnynxo{qzqyszt|u|t}t}s}s}t}t|t|v|w{xyzx{x{w{vzvzuzuyxwzrujigghkhlecb_`a`dcdghpnxu{y|z}{|{}}~~~~~~~~}{{wxuwvxwzw{x|x|xzxyxyxyyyxyxyzz}{~||||||||{vyyy{z}{|}}}{zzxzvzu{v{x||}~~~}~~~}}~~~~~}~}~}}xwy|~{}~}|}|xuxzrosxzqkljq{}zxttuy{{zz{z{|z{|~|jdt|}||zy{|~}||{{{{zxxwzytodnonx{}{zxvtz{w{}{xwutsuwxzzwut~v~w~y~z~{~yvq~k|myzurpom~_|X|^htwuz|{xxz|{z|}~yuvzz{xuvvvvvvvvww~w|x{y|y}x~xwwvvuuuuvwwxxyyyyy~y~y~y~y~y~xwwwwwwwwwwwvvvuuvwxyyyxwwvuuuuuuvvvvvwvvvw~y|{y~vrr}t|vzxy|wvvvvvvvvwx~z||y}w~utspnn{otrjwd{b{hylwmxn{ozpwpsqsrwr{r{szrzrzs{b|]}`|Yz^x\\w\\v]vavfvgveseqewi~hjkll~k|jyiyi{h|Z~T^hihfbXX^ehjhe]US_d_^[Y^amvsg{\\tYr[t_u`v_v_xaxaxaw`w_w`xaxaxbyeyhwktlrlokmlmmnmomplqlrmtqwuzw|w}v|tztwsvqrnnliieidmfqitmuostowlzk{j{l{n{n|n}nopq}q|q{q{s{y{z{rwfmfmlqpvsyu{t}srstrj}dwbvbucucuewexddnuwx{v{qq{~~zy|u~s~r~p~oooopprsrihnrq|p|p|pzpznzmzmznzqzu{w{rzjyfxdxfyi{l|n|p}pqrrrrrvvn^~V}[|_|f}l}m}m~m~mn~o}o}p}q}r}s~t~v}w}y}z{{|}}{~wu~u~u~u}t}s|r|m|lyqt~q}n|p|r{t}ttuwwwwwxxxyyyxwwxxvuuuvuvwvu~r{pymwnxnynyn{p{v||{z~z{zyz|{~|~|}|z~t}lzexbu_t_sctfwhxkzq{u}v~v~v~uuvwy{{~{}x~tjghkmt~{|~y~wzvyvzvyuzu|u}wz~{{zzxyxyxyyzyzyzyzz{zzzy{zz{z{{}}u~v~u{vywywyyyzy{x|w}v}v~v~v~wx~z{{zzzwzu{vzvzxzx{y|x}w}w}x|w}x~}}~~zvztxxyy{v}q|l{lyoxowuy|~}}}z}x|x|{{{{z|x|s|r{zyx{yszqz}vv}v}v~wus~s~x~y~xvvut~t~s~s}r|q{q{q{q{q{q{r{r{q{q{q{q{r{r|s}s~ssssssrrstu~v}w|x{xyxyyyzy}z{|ztynxivrvv|wyz|}~}}~~}~|{zxyxyxyyy{z{z{{{z{x|t}p}h}e~f~feeg}jzoxsvvuwuvvuvtvsvrvqvpvpvrvtvvvyvzv{u{tzszs{r{r{qzpzpxoxowowpxpxpypypzpzoynxnxoxowqzrzszs{t|t}t~t~t~t}s|t|v|x{xzzx{x|v|u}t|t{t{u{xz{wxroihfhfkcfa`_`_aabffomxu|x}y~y~z}~~~||xzwywzx{x|x}x|wywxwxxyy{z{zz{z{{||~|||{yx|uqrrstvwy{z|z|xxuxuyv{v|x|{}~~~}~}}~}yy|~}~}}~}~|{{{~ynltwtmkrru|~zuqrvz~~~}~}~yqt{}~~~~~rs{~~~|{||xxyz||{{}{zzulrhety{yyyxx|}~~|wttttvxz||yv~t~u}v|w|y{y{wurpty~xuqonh~T{K{Vkxvsyzyvvx{zxw}{{|zz{vvvvvvvvvwwx}x|x{y{y}xxwwvuuuuvvwwxxyyyy~y~z}z}z}z}y}x}x~x~x~wwwwwxxwwwwuuvwwwww~w~wwwvvuuuvvvvvvvvwvvwx}|yu~u~t}r|t{vyxw{w~vuuuuvvvx~y|{{|y|x}w~tqonzqruhxaydwjtlumynynuorprquqyqyqxqxqxt{j}m~n|\\zax_v^u_vcxjzk{ixgthxj|fgilmk|izhzh|g}Y~[fkigdaX]eijifaULG|K|X~afa\\YY^kiSsXpZrZq[r[sZpYq[t]w^v^u^u^u_w_w`xcygxjvltkqkplomomnlnlplrmuqxtzvzuysxrvruquqspqmljgjfmhplrorqpunxlzjzi{k{l|m}m~mmno}p|p{p{s{x{vyfoT`P]Tb^khqovt{s|r}q}rofy_t_tatcudvfygzdfptwz~w}qqu}wyt|rqp~onnnopqrrrfkoo~o|q{qzoymymylznzozq{uzvzpyhyeyhzk{n|p|q}r}sst~ttsruvrcV}X|^}e}j}l~mmmno~p~p}q|q|r}s}t}t|w|x~z{~~|~y~t~s}s}t}t|s|r|l{j{oztu}t{szu{w|wwwwwwwwwwwxxxxwvvwvsqqrstuvvvs}pzmxmymynyozrzx{{z}z{zxzw{w{x{y|y|x~s~m|gzdvbuateubu]u]vjxp{t}u}u~uuuvx{|~|~|~mhghlpv}{xwyvzv}uzszt{u|v|z{zyzxxxxyyzyzzyyyyzzzzyzx{yzz{z}y~o~o}n{nzoyoysytyvxyx{w{w}w}w~x~||~y~y}xyyvzuzvzwzxzz|||y|v|v}w~y}~~}z|wzoyx{}}~{~t}s|xz|{~{}|~y}y{{yzyzyxzvzwz|yx}yzyzx~u~v}u}v~v~x~y~{~|~z~u}s}r}r|r|r|q|q{q{pzpzq{p{p{p|q|q{q{q{q{q{r|r|r}s~sssssrrrrsttu~u}u|u|v|x|{}}||ztykwpvxvswoxvz|}}}}}~|{zxywyxyyy{y{z{{{y|v|s}p}i}e}e~edce}i{nxsvvuwuwvvwuvsvrvrvrvqvrvtvvvywzw{vztzryqypzpzoyoxowowovovpwpxpyqzq{q{pzpypypxpwqzrzs{s|t}t~ttt~u|v|y{z{zzzyzy{x|w|u|s|t{tztzwz{yzxskhegekciac`_``aagfpnyu|w}w~xy|~~~|}z|y{y|y|x}x}w{vxvwwwxxy{z|{zzzy{y||||||zy|vurvsvvzy}wzvxuwswtzx|y}z~|~~~~~~}}}~~}}~}y{||~z||}}|yyz||{rlonlmtyvw|zqqs|~~~xruz|}xwwv{~~}{}{ssx{}||}}{z{{vtmlttwwyzyyz||vtutssuw{|z~u~q}q{rzuyxyyyw{tqpr~t}u~srolh~[|W|_~hllryzxwwxyzxw{~}}wsxzxwvvvvvvwwx~x|x{xzy{y|x~xwwvuuuvvwwwxx~y~y~y~y~z}z}z}z}z}z}y}x|x|x}x}wwwxxxxxwwvvvwww~w}w}x}x}x~x~wwwvvvvwwwwwwxxwwvx}|y|x}t~q}r|tztyvxyw|vutuuuuvwx~y}y}z{{x}urpp|qsteucuhsltmxmxmtnrosotpwpxpwpvqxtzq|r}r|izfwav`vdwjzo~qo~nzozm|e}a}h}m}q~m{hyg{f|e}`~djjhfb_]bghge`YPN|N{P|V}_}c}f`RTZ]]~UqQmLkJhNiTnXoZqWqYs[s[s\\s]u]v^w`wcxfxjvlultlrmqmonnnnoppspvrxtyuyswquptpupvquqsopmlkjmkmolrksivkykyjyizi{k|k}l}kllm}lzmyoys{w|ox_jTaK[GWKZP\\Xbfonxr}pzl{jzevcsbtbufwhyi|j|dktuwx~u~qqq}r|q}poo~nmlmnppqqrimmk}m{qxqwnwkxnypzrzszuzuzsymyhyiym{o|q}r}r}s}s}t|u{u{usqqrqg]~[}_|d}h}k~l~mmnoo~p~p|q|q|q|r|r|t{u}w~y{|{y}v|q|q|q|r{r{r{q{nzi{i{q~v{xzy{y|x}xxyyxxwvvwwwwwwvtuvtpooopprtuusr|ozmznynypyryszrzsyqyoznznzozp{q{r|q~o}l~i{gxfwdu_t[t\\tgumxqzt|t}u~uuvwz}~~~zgiigmq~t{|yw}wyu{u~t|t|u{v{w{xzyyyxxyxzy{y{zzyzy{z{zz{y{z{{{{}x~q~p|mzmzlykymynypysywxxx{x|x}y|~zw}w}w{xwyvyuywzxz{zz{y{w}w~y}~~}}||zyxxzy|z~~}|~}}~z{|zzxyv{w|w{w{xzx|y}x~w~x}w}v}u~u}u}u}u}x~{}}~|~xr{pzoypyq{r{q{qzqzqzqzr{q{q|q~r}r}r}r~r~r~s}s}s~r~rrrrrrrrrssstt~t~t~t~u~y~~}||zqxowqvnvlwuy{|||||{{zxzxyxyyy{z|z|y|w|t}r}r}o}h}e~dbbd~g{lxrvvvvvvvvvuvtvtvsvsvsvsvuvwvywzx{wzuzrxpxoxnxnwnwnvovpvpwqxqyqzr{r|r|r{rzqzqyqxrzrzr{t|t~ttt~t}w|xz|y|yzyyyyzzy{v{t{q{rzsytzuzwzwxtomhigjfjdeaa``cbigrp{v|w}w}w~xz|~~~~}~{}z}z}z}y}x|wzvwvvwvxvyxz{z{zzx{x{z|~||||{xvv~w}yyvtstrxuzy||}|~}}~}}}w~v~}~~zz}x{yxu~z~~}vuxz~}~~}~}xqigpx||xx}|rwz~~|yx}~~{tefruqilxz||yvuy|}{|~||wrwwxxxwrswyz{zz{|}{vuwutrqquwy~w}p}j{oyozi{j}qokjmq~s~ttqnmi~d}a}`}`}`}g~uyxyyyyzzzy|}ztsvyvsvvvvvww~x}x{xyxyxyyyxzx|wwvvuuuvvwwwxx~y~y~y}y}z|z|z|z|z|z|z{y{x{x{x|x~wwwwwwwwwvvvwwx~x}x}y|y|y|y|y}y~xwvvwwxxxwxyyxwuvx~yy|s}o}o|r{vzyxywzv}uttttttuuvvw~x|zy|v~s~q~pzqssltltntmxmxlumtotoupwpwpwqwqyr{s|s}r|pzkwdvaweym|qsrp{q{m{f|b|m|s{ulygye{d{e|f}h}j~ji~ga^`dghgdOIRY}Z|W}R~S}Q{Y{bz[Uba[}VpMiEfGcMfUm\\v]xVpVoXpZr[s]u^w`wbvevivlumtnuntospqqoroupvtuvtxtxtwrtqsosoxo{q{sysuorlpipfsducucwfxfxgxgyhzi|j|j{jjkk{jwlxoys{v}m|]kSdTeUbT`NZIVMZXeftn|m|eybtctdufxizk{k}k~dowwt|s|r~ppp~q~p~oonm~k~ij~l}o~p~n~n~ngjki}j{qypxlxlxpytzu{uztyrxlxjxkynzp{r}s}s}s}s|t|t|u{vzv~tqn|m|m}i~d}c|c{e|g}j~k~m~nno~o~o~p|p{p{p{p{p|r|s}s|t|s{s|szqzozozozpzpzp|q|s{p|o|w|z{{{z|y~xyyyyyxwvvvwwwvus}q}s}s}r}n}n}n~nnoprssrr~r|n|nzozqysytyrzrypyoyoyozozozo{o|p}p}po}nzlxevau_t`titjujwlyq{t}u~uvwy}~~wekifps~szyx}w|vzuxuzu|w|x{x{yzwyyzxyyzy|y}y|y|y{y}z}{~{|{z{{||}z~x~v|uztyrypymylymyoysztzwzzy{yy|w~u{u|v|xzzxyuzvzxz}zy{{|}y}x~}~~~~{}||}{yyyt{t}z|}}{~zvv~v|v{w|x}y}y}z|y~x}w~v}v}v}v}u}u}u}v}v~x~y}z~zxu}t}t|t|s|t|s{szrzrzrzr{r|r~sssssstttts~r~r~r~r~r~r~r~r~ssts~t~u~u~u~t~u~w~{~}|{xzpxnwnwmwvy{|||||{}zyzxzxyyy{z|y|v|t|q}q}s}u}m}e~d~bbc~f{kxqvuvvvwvvvvvuvuvuutvtvtvuwwwywzw{wzuzsxqxoxowowowovpvqwryryrzr{s|t|t|t|s{r{r{q{rzs{s{t}u~t~t~t|u{wzxzzxzxxywzx{yzzwzuyrynxlxpysyvyvxtsqmmikhkdf`a``edmjur{w|w|w|w|x}yz}~~~~~~~|~{~{~z}z}y{xywwvwvuwsxrywzzz{y|x{y{||~|~}||{zx~x{xvuvtxt|y}}~~~~~~~xx}~}~~}||}y}xu~v~|~xv{~~||}~~|wrs}~zxwwwy~~~|~~~|zy|~~}{zytloxzoYdruwyy{zyz{zz|zujgrwzyxvvwxy{zz{{z{}zvvxvutrpsv{~x}o}g{lzm|b~dlgcdkotv~vtrpkedf}gzbxczovwzzyyzztswyvpszytpvvvvww~x{yyywxwxwxwxwxyxzw|w}vvvuvvvwxxx~x~y}y}y|z|z{{{{{{{{{{{zzzyyyyyxzx{x|w}w~wwwwxwwwwxxxy~y}y|z{zzzyzzz{y}x~w~wwxxxyyyyyy~y~xwww}yy{v|v{v{yz{yzxxxzw|u~ttttttssttu~v}x{yxyuyszswutvrwpyozmzlwmvnwnypzqzqxrxqzq{q{r{qzpyowjwdxfzl}qqq~pzo{m|j}j}q|u|vmxhvfxeyf{g{izj{j|j}ja^bfiicS61EUZ}U{K{FzCzHyYxi~^`aYyPlKgKfNgVm]r^v^vXrWsXrZr\\t_vaxewhvjuluotospuqtrtsrtqurwtxvvwuxswrtqpqrown{o}r~v}t{qymwiwewfwfwfwfwewewgwgyjzjzixh|ii|jwkwm{p{t}v~rl|arVkWeYfWeR_JWHUP]^kgtevascsfvizk|l}m|mgqww}s{q}qqpq~r~qpppnk~h~i}k|n|n|m|l}l~e~f~l~i}h|o|o|l{l{r{u|u{sznwjvgwkxozr{r|s}s~t}s}s|s|t}u|v|vsp|lykxkyj{izhyhzg{h|i~kmoo~o~o~o~o~o|o{o{o{q{tzvutqsrqypxpwovowpxpyqyq{s|t}v}w}z}{|{|z|y}xxyyyzyxxwvvwwvtr~o{o{p|q|p|o|n|o}n~n~nopponnl~l~m|m{ozrztzs{tztytytytztzs{r{r{q|q|s}s{tyqwkwgveuetjtct]u_wlzr|u}u~vwx{|}viiihtv~vyzw|v|v{vxvxw{y{z{z{zzxzz{yzy{y~yy}y|y{y~z{{{z{y|}||~|}|{}y{yzyxysyryqyqyqzqzrzuyyxyzv{uzt|v~y}|ywzv{x{~zy{{}|}x~{~~z}z{|zxxxpwoxvz|{~y~w~w~x~z}{}{}|~|~z~z~y~x~v}v~u}u}u}u}u}v~v~v~vw}x~yy{zzyxw~w}v}u|u{tzs{s{r}sttttuuvvvt~s~r}q|q|q|q|q|r|s}s}s}s|u|x|y}y}x}w}x}z~~}|{|ztypxoxoxxy{|||||{{{zyzyyzy{y|x|u|r|p}q}u|x|r|g}d~cb~b~e{jyqwuwvwwwwvvvvvvvvuuuuvuvvwwwywzwzwzvytxrxqxpxpwpwqwqxrxsyszszs{s|t|t{t{t|r}r}r|s{t|t|u}u}t}t|u{uzwzwywywyvzw{x{yyzxyvxuwmvgwoxtyxyxxvutqqlnhlce__a`ihqoxt{w|w|x|x|x|x~z|}}}~~~~}|~{~z}x{wzvyuxuvvswpyv{z||{}z|y{z{||}|}|{~z|xywwwzvvw{}~~}~z|}|}}}~|wwvzqo~p~z{z~~~~}|}zz{}tqvxwz}z}wuz~}yssy{yxxxwz}|irussvz~~~~ywtqqrnjhltz{xvvy{zzzyzz{{{|zwwywutqosv|wq~q}w}v~pqsniimqu~x~xwtrnkmps{oukvn~swyzxyzztqrtqmr{zxwv}v}w~ww}x{xxywyvyuyuyvxvxwxxxywzw|w}v~vvvvvwx~x}x|x|y|y{y{zz{y{y{y{y{y{yzyzyyzy{y{x{w{w}w~wwwwxxxxxxxxyy~y{zy{x{w{xzzy|y~xxyyyyyyyyz}{|z}xxww~x|y|z|z}z}y{ywyvywxzv}uuttsssstttt~u|uzvwwvwuvvtwsxqyozmymymzm{o|q|rzrzqzpzpypypxpxqxpxlyk{n}qpp}o|n|n~mn}p|r{u~pxkuhufwfygziyiyizizlb`chjjdE,*.9HL{NyMyMzOzW{fzg}__Y{MkJfOiWn_ucw[s[rZs]u[t[t_ubwfxiwlvouptqsrsrtstututvtwtwwvxtyryqxptqspvo{m|o~quts~o|l{jyjymxmxjyhxgxhxhyiyiyiwhyh}ixkwmyp}r|t~utsl{bv[mTdWg]m\\jUaR^Vb\\gan`qasfwj{k}l~lvfgrtr{pxnylmmo~q~qrrrqon~n}n|m{n{n{n|p}l}l}o~l}i}n}p}n}n}r}v}u{qykweugwoxszt|s}s}s~s~s}s|r|s|t{u}uro{kwjvkwlykxkxkxjyi{j}knoqq~pppq~p}p}q|r{uwyj{cyku{sxqtqurxryrysyu{w{y}x~z~y~u}x}x}w~xxxyyyyxxwwwwwvr~o}l|m|p|r|q|p|o|n}n~n~m~nmkjihe~ik~k}l|m|o{o|q{qzrytzvywywzwzvzu{tzvyvxvwtwrwnwlvkufu^u[t^vhxp{t}u~v~w~w~y~z|xnhhixy~zz|x|w|w{wyxyxyzz{{{{{zy{y|w|w}xxx}x{x{yyzzz|zz{~|~|{z~y|y{y{yyyxzwzvytyszqyqywxyxwyuyu|v~y}yyzu{x{zy{{|}y~y~~|~z}|xmtmnokqqyv|zy~z}y{}~~|~z~{~y~w~v~w~u~u~u}t}u|u}u}xw~u~tv}w~wy{{{zxwx~x~x}x~w}u{t{s|t}ttttuvvvut}s|q{qzpypypypyqzszszqzqzuzz{|||{|{{{|{}|||{~{yzsypypyzz{|||||{{}{zzzzzy{y|x|t|q|o}q|w|{|v|j}d~c~b~b~d|izqxuxwxxxxxwwwwwvwvvvvvvvwvwvyvzvzvzwyvyuytzszrzryryrysysyszszs{s{t{t{t{t|s}s}s|t|u}u|u|u|t|t{uztyvyvyuyuzu{w{yz{xzuxuwxvrvkwrywzzzzyyxxtvprjlce__cbnmuszv{w|x|y|y|y|y|z}{||{|~~~~}~{}y|x{w{v{uyvwxuzw|{}|}}}|{{z{z{||~}|~{|zzxxvyw~y{{||}~~~}~}{}|wz}ww{}~~~|xsvvm~k~t~|{}~~{srwzv|{utvwuz}xy{mpux}}~}zvnovzyyyxvttwywyusrsv{}zyvrqrqprwy||{xvw{{zzxyz{{{{zyyxwusplpv{wtw{xuutrrrruvxzxvutsrtyx{sxq~twxyxzxxxutusompvv}v}w~w}w{xyxwyvyuyuyuzuyuyvxwxwxxxzx{w|w}v}v~v~vww~x}x|x{x{y{yzyzzy{x{x{x{xzxzxzyzzz|y{x|w|w}wwwwwxxxxxxxxxxy}zy{v{u{u{xzzz}yyyzzzzyyxy}z{{yz{z~xwwwxxyx}yyzvzuzuxxw|v~utsrrrssssss}t{tyuxuwtwswrypzozmzm{m|n}p~q}q|p{oznznyoxpxrxryqzp{p}q~p~o|n|m|n~o~p}o|p{r{owmsksiugwhyiyixhxivk|caeikkl[?-(*0?}OzXyYzZzY{]zg|ec^NlJfVn`vezdx]uZs[s]v^u_ucvfviwlxnwpuqtrrtqtrurvswtwtwuvwtwrwqwpvpuqvqxoymzn}oqrr~r~q|ozmzmymzlzkyjyjykyjzmylwixiziykxnzq}s|utsr}o}m~g{^r[o\\k]i^k`n^j[dX`Wd]iesi~hyat]t\\iqm{hweseth~jk~n}q~q~s~trsqq~q}p}n|n|o|o|p}n}o}o}n}l}o~q~r~r~t~u}t|qyjwevjwsyvzv|t~s~s~sss~r|r~r|s|t}r}nzkwjvjvkwlwlwlvkwjyj{knprtsrrsqpq~q}tyyr{lzju|rsttwtytztzuzwzy{z|z~y~w}v}w}vwwxxyyzzzyuuwxxy~r}k|l|o|q|s|s|q|n|n~n}m~m~l~kihgg~fhi~i~ijk~l~m}n|n{qztzw{x{yzxywywvwuwuwuvwtwrwpwnwkveu`u_vcwrzv{w|w~w~w~x~x{yrjglz{||{y{w{wzwyxyyxzx{y{z|{{|x}u~v~wxx~x}x|xyyyy~z~zzzzy}yzzzzzz{zz{y{yzxyxzwytywyyyyywyuzt|twyyzt|y{zz{{|}|~y~|~}{|z|trqmokqmrquuwvzx~z~~~~}~{~y~wuuuuttt}t|u}u}yx~v~t~u}v}v~w~x~yxx~v~v~v~v}w}x~xx~w~u|t{t|s~tttuvvu~t|rzrzryqxpxpxpxrytytyryryuyzz}{}z}y~yy{{{|||{wzrzrz{{{|||||{{~{{{zz{z{y{w{s|q|p|r|u{z{x|l|d}b~a~a}d|k{rywyxyxyxywyvxvxwwwvwvwvwuwuxuxuyvywywywzv{u|t|t{szsysysysyrzrzs{s{t{t{t|t|t|t|u|v|v|v|u|u{uzuyuxvxvyuzt{u{w{yyzxywywwxvwwtwvyyz{{|z{yzwxstlndgaaghtryv{w|w|x|y|y|y{zzzz{{||{|z}{~}}~|~}~~}~}||z|x|w{v{wyyxzy}|~}~}}|||z{z{||~}~|}z|yzxyvzw{|{wsw|}}}}{yzzx{~|qltz~~~}yqt}x~o~s~|~|z}~}~~~uadkkq|}|{zxvty}yxyqqtsuw||{{zwsoory{}|zsfnwxyxxwxvrrw||||{zwstx{|~}{zy{{{{zyyz{||{{{zxvvxvqooprv{zwwvsqrsuvwwxwxxvuuwz{x~vvwxx~y~ywwwttuurmir}zv~v}v}w|wzxxxvyuyuztztztytyuyvyvyxyyxzw{w|w}w}v~v~w~w~w~x}x|x{x{x{yzzyzx{w{wzwzxzxzyzzz{y|x}w~wwwwwwxxxxxxxxxxyy}z|z{zzzy{w{v{x{zz|zzzzyyxxz|{y|w{xy{x}wvvvwxz~{z{v|s{syvw{u}tsr~q~q~rstsrsst}u{uyuxuxtxsyqzozoymxn{opp}p|o{m{nzoyqyryryqyrzq{q{p{o{n{n{n|n}o|ozoypwntmrlrjthvivisjqipiojuccgjloopcF0)+7J}W{XyXyQyLyQyae`QoNiYsbydzbx]v[t]v_wbvcugulunwpxpwqvrtsrupuqvrvsvuvvuuttrqppoporrururuounyn}opqrst}r|p{o|o|p|o|p|o|p|p{q{nxjxj|l~o|q{s}t}tsssrqnke|`qXfWcanesam[dXdZd^lShKbH`Mi\\niz\\pYmZj\\la|eg}k}p}q}u}w~tuvww~t~o}o}p}p}p}p}o|p|p}q~q~r~s~tuu~u|qzjyhyn{u~v}v}tssssss~ss}t{t{r{ozkwjvjvkvmwlxlvkvkxk{lnqtvvuutqoppps~v{uwwxvxvzv{v|w|w|x{x|x|w|u}u|v}v~wwxxyyyz~zyxtuy{y{}o|l}p}t}u}t}t}p|n|n~m~l~l~jigffhjihhhijll~l}n{pyswuuvtvtvtvtwtwuxuxwxxuxtxtxrxrwrvlvfwfwpxvyyzx}x}x}w}w~zzvnhoz|{z|zyzyyyxzw{v{v|w{zz|y}w~vw~xyyyy~yzzz~z~zzyyyz~z{{z{y{y|x}w}v}w{y|{{xzx{y{{zyzyxwzv}u}uzwuzzzzz{{|}~{~{}|~~~~|{{y|pwlrkpkonrpttwtzy}}~~}~~~{~xvuuuvuuu}u}u}u|z~y~w}u}u}u|u{v{w{w|v}v}v}v~v}t|s|szu|w~v~u|tyswrzr{s}t~t}t}s|s|szsysysxrysxsxsxtxuyvyuyuywzyz{z|y|x~wwyz{||~{y{uztz{{{|~{|{~||{{~{|{zz{z{z{w{r|r|r|s{o{v{x|p|d}a~`~a}e|l{szxzyzxzxzwzvyuxvxvwvwwvwuwuwuwtwuxvywywzw{v|v}u|t{szsxrxrxrxryrzt{t{u|u|u|v}v|v|w|w|w|v|w{wzwywxwxvyv{u{v{wyyxyxyyxzwzwzwyxzy{z|{}{|z{yzuwosegeenrxw{y{w{w{w{y|y|yzzyzx|x|y{yz{{}}}~}~}}||}{z|y|x|x{zz{{}}}}~}~|}|{|{|}}~~~}}{|z|y|x}z|~}xx{}~~~|wpty|~~zqiu|~~~|}zqqu~|xy{yx{}~~~{wtiaoy||~~{vttz~{wwuvsjk{|rrvtlfelw|oct~|||~zrovzz{zyzyusy}~|}}{zw}{{{zzz{|||{{|{yxx{~{wuuuvxzywywsnnrvyywsptzxvvy}}{yyyzz~z~yvspmnqvwslowvv~v}v{wywwxvxuyuzuzuzu{tztzuzvzvzwyyyzx{w|w}w}v~v~vw~w~w}w}x|x|x|x{yzzyzxzxzwzyzyzzz{z{z{y|x}wwwwwwwxxxxxxxxxyyyyyy}yzzwzwzwzxz{zzyyyxxy~z|{w{szuy{x~wwvvxyz{z|u|sztxwwzu|t|s|s}r~q~rssrrrst}t|t{uzuzuzt{rzpwovnwo}p~p~p}m|l|k|n{q{qzqzqypypypypxoxoynymym{n{nynxovouotntltiujqjljjijhkhpefhlmlnrxnM3*-:ELzMwHxDxGx[zf|]RsTq\\vcygyex^v^v`vcvduhuktotruswrwrvsttrvpuquruttvswsurspnnjmiqnurtqrqown}oqrstuu~u}s}s~s~s~s~s~s~r~o|nzlxlylnp}r{s{t}sttssqonkh{`qYe\\hbrguftdsZjXfKaEcXoc|fqctRjUi\\natfhm~q}t|t|s|t}uvwxwup~o~o~n~p}p}q|q|r}r~q~r~stuv~u}q{l{k|oqtut~s~rsttuu~u}uxuwszq{mwjvjujvlwlxkwkwkxlzloruwxwvtroooopqq}rqu|v|v}w~w~w}w|u|s|r|p|r}t~uwxyyyyxy~zzyvv{~y~w|p}s~u~w~w~u}r}n}m}m~lkkigfeegihffgiklm~m}n{pysvtrrnqmpmsovswvxxxyyzwyvyvxuxsxvxyxwxlwjwux{yx|y|x|w|w}y}zzsjtz|zxx~x|w|u}u}t}u}v{zx~vvwx~yzzzzzz{z~z~zzzyy{~{{|y}w~vutss~uxvw~x}{|z|}|{z{{y{u{uww{yyzz{{|~}{}z~z~}~~}|{zywqznqllkolqmrrutvz{}|||}{~xvuuvvwwwx~x~v~v}x}x}v|u|u|t{tzuzvzv{u|u|v}v~w~v}t{pxpwrwryt|uzrvpvpwqyszs{s{r{rzsysxsxsytyvxwxwxxxyyyyyyyzzzzzzyzx{w}vvxyz{{{|{xzwz}{{z|zyz|{~|~{~{}{{zzzzz{y{w{s{s|t{szozq{v|u|f}c}a~b}g|n{uzxzxzxzxzwzvzuzuyuxvxvwwvwuwuwtwuwvxwywzw{w|v|v|uztyswrwrwrwrxsyuzu|w}w}w}x}x|x|x|x|x|x|y{y{yzyyxywzv{v{vzxyyxyxxywzw{w|w|x|x}z}z}z}z|z{xzrwgfkjxz{z{z{yzxzyyyzyzyyyxzw|v}v|w|y}|~~~~}~~~~}}}||{z{||z|x|y{{{||}}}~~}~}}}|}|}}~~}}}|||{}{}z~{|~~~~}wtrrstwxipx{|{xxs|~}{}{utrz}|ytpt{~~~~|ywy|ywy{||}||zyy}~|{{{yssrzxjnwrdZ]jx}}~{ql~}~}zwx|xrw~}|{yxxvuwz|}|wl}pz|zzyz{|{zyyzzyz{~|{z{zywwz{ytposx{{yqimwutwz}~}{|||{zywuqonouxvtvxyv}v{vyvwwuxtxtyuzu{u{u{t{t{u{u{vzwzyyzx{w|w}w}v~vvvwwwww~x~x}x|y{z{z{z{z{z{z{z|z|z|y|x}x~wvvvvwwxxxxxyyyyyyxxxxxyy}y|y}yyyyzyyzyy}y|y{y|x~wwvvwxyz~zz{wzvyvxwwxvyuzu{t}s}s~r~rrqrrsss~t}u|u|u{tzswrwqwp{q|p|p}m{ixhwkwnyoypyoypxoxowowoxnxnxmxmzmzmynynxoxowowmwkuknljljkkkmhqghi|kymynynzozt}|pT8*+09D{MzQyTx]vgvZvRxZybyhznynwavavdufugtjtlspsstsurvrustvrwqurusstqwqxqwpunpljjhqkwqusquozoprsrtuwv~u~u~ttssrp~ixhxlzn{nnl{kymzo|qsssrpo~n|m{l}jzet]m`ogvhzdvOgSd^jgup|llpivbuewkznlmq~r|r{ozk{k}p~ssssohfgi~n~r}r}r}r}r}p}p~qstuu~r~nloprtt~s}r~qstvvv}vxvxu|s}oylvjuivjxlylxkxlymzmortxxxwusqonnmn}n|rxuxr{s{s{t|t|s~s}r}q}p}p}r~vxzzzzyyxz~{{yvv|x~p}w~yx~w~u~t~p~k~j~kjjjihgfeehgfhij~l~m|n|n|o|q{szsvppnlmiqmuswwxzx{y|x{wzwyvyvyxyzyyxrwhxsxzxz{z{y{w|w{x{z}{wlxzzxvv~utssst}w{{wvwyz~yzzzzzz{{~{~{{{zz~||}ywusrqrsutrvw~y}z~zz{{zy||yzw|x}y~{{{|{||||{}z~z~z~}~}|zywv~t{ptnmkplpnptryu~zz{||y}vuuu~vwxyyz{~z~x~w}v|u{u{tzt{tztzuzuzuzu|t}t}t|u|w}v{rzpwpupuryu{syounuovryryszszsysxrxsxsyuyxxzx{w}w}x|x|y}z}z}z|y{xzw|v}v~wxzz{z~z|z{yyyx}xzx}y~z~z}z{zzzzyzyzy{x{t{s{uztztzqzs|t|h}d}c}d|j{p{uzxzxzxzwzvzu{u{uzuzuyvxvwwvwuwuwuwvxvxvxvyvzv{uzuytxswrvrvrvrwsxv{x}y~y~y~x}x}y}y}x}y}y}y|y|y{yzxzx{w{v{wzxyxxxxxzw{w|w}w}x~x~x}y}y}y}y|y{txjjpp|}|}{|zzyxywywxxxxyxzw|u}u~v~x~yw{}~~~}||||{{{z{{}|z|z}{||||}|}|~}~}}}}}~}~}~}~|}||}|}|~{~{|}~zunkhimu}nt{}}~z~~~}{xv{|yvqrw|~~vmio|~{||}}|}~{{}~~~~~~{ytiuzqtzpYLZp{||}|xv~~~~}~{~r~k~n~zzvx{{{|}zxwwvwy{}|yk}fy}|zyyzzwtr~s~uvwwy~|vsqutsu}}|wtrtw{|{rijpppu|}|}{{{}{ywwxxvqqtvvustyv|vzvwvuvtwsxrysztzt{t{t{t{u{v{w{x{yyzx{w|x}w~vvuuvwwwwwxxx~y~y~y~y~y}y}z}z~y}y}x}x~x~wvvvwwwxxxxxyyzzyyyyy}x}y}x}x}xyyyyyzzzywwwxxwwvvwwwyy~y|yzyyyxxvxvwwvxu{t}s}r}r|q}qrrrrr~t~t}u}t|t{sysxsxryrzqzq|myhtgqiqksmunwnyoypypypyoynymxmwlwlxlxlxmxoxoxozn}m{lqllmlmmmnjrhiipkmlqlrksjunxt~xtf~J~2%*;~M{VyYx[uftZrVw`{l{qzryowcvfwhuhtitjsjrlrpsrtruruttvrwrvssspuowoxoxoxmujmhipkxptuqyo}pqspifkpt~t~tsssrro}fthwo|p~nmjzhxixkzo~r~r~r}q}o}n}l|k|k|l{m{gucrfufzRjD_Zkdrm{rpoqq~o~jzat^hrs~k{czeydzh|l}o~oopi_\\\\]m~u}t}s}s}q}o}o}o~prst~sqooprss~r|q}p~qrtuuv~w}wur{mwjviwixkxkxlxmyn|noqsvwxwvusqon~m|nzmzmyoypyqyqyqzq|q}q~p~r}w~z~z{{||||{{zz~zxvtrtvu~syyxw~u~t~solkjkkjjihfgjigj~k|lzmymynzn{p|q|s|s|qwpqpkrmusxxy{y}y}y}x|wzwzxz|z|zzywxmypxzxxzy{x{y{x{x{y|y~wouwwvts~tsrrrt}xz|xwxz{~yzzzzz~z~{~|~|}}~}~|~|~|{~yvtrrqqsv}y|wvww}w|x|xxz~|z}}z|y|y|z|{z|{|z|y|x}x~{~}~}{y}w|v{u|t|ryowmwmuqswu{v{{}|w|v~vvt~u~u~w~x||||~z~y~w}u{tztytztztzuzv{v{v{u|t}s|qzqxrxsytztyrvpvpvsytzqxovouqxqxsyszszsyrxrxryuyzy}x~xwwwwxyy~y|y{x|w|w}w~xyyyyy~y}xxxwvwwxx|yzyyyyyyyzy{w{t{t{uzvzvzszs{s|j}d}c|g{o{s{vzw{xzxzwzvzu{u{u{uztzuywxxwxvwuwvxvyvxvxvxuyuyuxtxswswrvrvrurvtxx|y}{z~y}y}y}y}z~y~z}z}y}y|y{yzyzx{w{w{xzxxxxxywzv{v|w}w}x~x~x~x}x}y}y|y{wystxv|~|~|}{zzwyuxuwwwxxx{w{v}v~vwwvvxy~~~|}||{{{zz{~|||{}{}|}|}{}z~{~|~~~~~~~~~~}}|}}|~}~}~}~|{||{{{{vqqs|}y{~{||{}}~|~|~|yz||zxxy|~~~}yx{}z}}~~{{~}zz~}zv{~~}}sYJ_y~~~}||~~~~{~y}o}d~oz{wus~u}y~{wuuvy{|{||||yuz|{zyyxvqi~j~nr~s~t~p~nvyxqomsqqx|{zxvuuvxzwpjjoqrw|{xvvz{}xrtyywtsrsuutnfgv{vyvvvtvswsxsytytzt{t{s{t|u|v|w|x{yzzy{x|x}w~vvvuvvvwwwwxxxxxxxxyyyyy~y~x~w~wwwwwwxxxxxxxy~yyyyyyy~y~xxxxyyyyz{}{}yxwvwwwwvvvvwwxxxy}y|yyzxywxuwuwxuztysvrwr{rrqqqr~s~s~t|t{szuyuxtytysyryovkrioiojqlsmunxp{q|q|q|p|ozmxlultktktktlumyn{nnmlwkqlpmompktiixikjnkuithtguirlsnuoulsawM5*2~F{UyXy]vbu_s^we{m{ozoykxfxiwkujujujsjrlrosqtqurtrtusvstsqsnwmzmzmzmzlzjsilpkuppvozn|o~qrneadio~q~qrrr~rs~q|lxnzq~q~om}lzixixkyn{p{q{pzoznzm{l|k}k|l|n|m|hxevfyRiShjwjunzqqppk|ft^mTo\\ows}jzbybybyc{e|j}l~m~ok`XTRgu~u}t}t}r|o|o}o}o~pqr~r~rqppqqr~q{pyovp}qrsuuvwur|nyjviviwjxkwlwmyo~oopruvvwwwutrp}oxoxnxnwoxowowowpyp{p}p}q~t~|~~~~~~}|{y~ursrnmnquwwww~vvwvqmllmnmkjj~k~omjj|jxkvlvlwmyn{p|p|r}s~s|swtrurwvyzy|y~y~y~y}x|x{x{y{}{zzzsyqyvyv{w{w{w|w|w|w|v}tpqstsrrrrrrr~u}yz|yxyz~{}y~z~z~zz~z}{|||~|~{{{{zxvtsqqqruyy|y|{||{}y{xzxyw{wy|{}z|z|z|{}|}|~}||{|y|z}|}~}|y}v{tzuztys{spo~o}s|x{|zz~zyv~wxxu}t}t|w}z~~~~~}~{~y~x}v}tztytzt{t{t{u{v{v{u{t|s|r|q{pxpwqwsyuzsxqwnuovqwryqvnuovqxszt{t{tzsyryryvzzz}z~yxwwwwxxy~y}y}y~y~wxxxxxww}w}wwvuuuuu}v{wzxzxzy{y{w{u{uzvzwzvzuzv{u{k}d|d|k{t{wzwzx{xzxzwzvzv{u{u{u{tztyvxywyvwuwvxwywyvxvxuxtxtxswswswrwrvsvsvuxx{z}{~z}z|z|z}z~zzz~z~z}y}y|y{x{x{x{x{yzyyxyxzw{w{v|w}w}x~x~w~w}x|x|y{yzyzyy{z}||{|zxxtwuxvywzx|w|w}w~wxyy~z~{|~~~~~~~}|||{{~|||{}{~|~}~|~z}z~z~|~~~~}}}}|}}~}~}~}~|~|}~~~}|}}yy{~}~}~}~~~zw~v~u~x{z~y~x~|~~~z~x~}}|}~~~}~~y|~}}|{{|}~~zi]l~~~}~~~|~{~w~o~x||yqqv}}}z~v~uuwz|}}}||}~|wppuwwuqkilrt~t~n~lsvwtstunhr{{zyxwwxzywqmntxx{~wmlvywokqutojmnpsvxveZw{wywwvvwuwuwuxuyvyvzv{u{u{v{w{x{y{zy{x|x}x~xwvvvvvvvwwwwwwwwwxxxyyyyyy~x~wwwwwwxxxxwwwx~x~xxxyyyxxxxxxxxyy{||{{|zyxxwwwvvvvvvwwwxxx}y|zyzwyvxvwvvvuttusyr~rqpq~r~r~s~s}s{sztyuyuzuzuztzsxquosmrlrmsmuoxq{r}r~q}p~n{lvkslqkqkqjpjqktlzl~mm~l|kxlulslslvj{hyhsiwi}h|h{g}g{iwjxjxhwjwgyR|:}0|@{UzYy^v`udtfwizk{lzjyiwiwjuktktktjsksmsotoupuounuptussulpjvkzk{kzlyk{lwmqqnppivlzo{p|q}q~o~k~i~i~j~j~j~knp~q}r~r}r|q|r|r~q~p~o}nzmymymzoyoyoxnwownxnzm{m|m|m|n}m~i|fwgwasgwr}nxnzq~rpl~au\\jYk\\ykuso~kzfycxax_za{f|i}l}m~neWON\\o~u}v}v|t{r|q}p}p~qqr~r}s~rpoopon{oqocpnq}rstuvvu~s|pzlwivivjwlwmxp}qrpoprtuvwxwvtr~qzpynynxnxnwowoxqzr|s}r~t~x}}|zv~pmqrolknsuvwwvwxxtqppqqom~k}l|n|q~pl~k{ivisjukwl{m|n{p{r{t|u}uzvxwxyzy|y}y~y~y~y~x}x|}|z|y||{|zyzsypyu{u{s{s|s}u}u}t~s~qprrrqqrrrrr~v}y{|y~yz~z}{}z}z}z}z}z|{{|z}zxxxxwwutsrrqstw}zy|y~{~{}}|{zzyyvzuzw~yz}z|{|{}|~||}|}|{|||}|~zywt|ryrzr{p}qqppqrw}}zy{{uy~{~~zw}t{t{w||}~}~}}}z}x}v|u|tytytzt{t{t|u|u{t{s{r|r|r|s|qypxowqxuzuzsxoumtouqvpuotqvsxu{u|u|u{u{uzu{w{z|||}|~{~zyxxwwxxxyyxyxxxxwv~w}wwvutssrs~u|w{x|y|y|w{v{vzvzwzxzxzx{v{k|c|g{q{x{y{y{x{xzxzwzvzwzw{v|u|t{tzvyxxzwywwwywywzvzuytxsxsxsxsxsxsxsxtwuwwxy{z|{|{|{{{|{}z~zzz~z~y}x}x}x|x|x{x{y{yzyyyzx{w{w{v|w|w}x}x}w}w|w|w|x{zz|z~z{}}|{zyyuyu{v|x}y}x}w}w}w~x~{||zz}}}~~}}~}~||~|||{}y}y~{~{~{}z}{~|~}}|{~{}{}|}||}}}~}~|~|~|~~~~~~~~~|}~~~~|~|~~~|~s|o~t~{~}~|~x~|}{|}}{|~~}}}x|||}~}{yyy{yv|yry~~~}~}{z{|}}|zww}}||zyxy{}~~}|zxxwkeuywvuuqruvvsruwxwwxxsmoswxxxy{|}|zwtt{|}}yvnjrvl]ivxtpliinsw|~sgw}wzwyvxvxvxwxwxxyxyxyyxzxzxzxzyzzz{y|x}x~xxwwvvvuuvwwwwwwwwxxxxyyyyyxwwwwwwwxxxwwwwxx}x{x{x|yyyxxxxxxxxxyz{|y|x|z{}yxwwwvvvvvvwwwxxx~y~y|y|y{xyxxwwwvvvuxt{s}r}r}r}r~s~r}r}q|qxryr|s{syrzrzryswsvrtpsptotpvrxs{r{r{p~n{mujrkrlqlskrkqjrjsjskrlsk|l}lxlulukwjyiyhxiykyjqjphxg|hzh{i|izhydx`xT{L|L{Z{\\z`wdwixlzl}m}m|lylvlultlsmsmshshtjuktmtmxkxfwkwtvrwcjblisktisjritksnsqqjrbvkypypzq|p}p}q}q}p}n}i~f~hjm~p}r}r}r}r}r}r~q}q}p|p{o{o{ozoyoyoxnxoxnxnzozozn{o|o~k~h}g{dxhyn}p}o|o}qrqo|fvdtdxkppni~d{`y^x]x`ycye{g{i|k}m~hYNLRht~w}w|u|t|s}r}r~t~t~r}s|t{s|q}onn~m~l|mspZsbsysstuuvv}t|t|nxitjulumwp{sutqnnprtuvwxxvuts}oznxmwmxmxnzq|s}t~t~vz~~|xupossqnnoruuvvvwxxvtstutro~m|m{n{q~qo}mzjvjtjvkyk|l}n{ozqxtzt{u{v{x{z|y}y}x}x}x~xw~w}z}{~y}v||z}zvzmyw{u{q|p}q~s~s~str~qrqqqqrrrrs~w}z{}z}{{~{}{{z{z{z{z{zz{y|w~wvvuuuutssrrrtv~y{{y|z|{|{}|}{{yyywyuxw{w}x|z|{||}|||}|||{||{|y}v~s}r}q{pzq{q|noopqstx~|u~|yv{|~~~|}y|u{u{y{}}~}~}}}z|w|u{szsytytzu{u|u|t|s|r|r|r|s}u}t{qypxmxpxtyvztypuntotqururuuwvyw|w|v|v|w|w{w|x|z|{}|}|||{}zzyxwxxxyyyyyxxwvvwxxwvutsrsu}v}x}y}y|w|w{wzwzx{y{y{y{v{j|e{mzvzz{z{z{y|x{xzwzwyxxyzx{w|u|u{uzwy{x{xyyzx{y|w|u{szsytytysysysytyuyvyxz{{{{{{{{{{{|{}{~zzz~y~y}x}w}w|w|x|x|y{yzyzy{x{x{wzwzwzx{x}x}x}w}w}w}w}x{yz|z{||{{zz{u|u~w~x~y~y~w~v~w~x~z{|t~y~~~~~}~}~{}{|y|w}v}v}w}y}z}{~}~~~{yx}x}x|y|{|~||~|~{~|~|}yz~~~~||~~~x}sx}~|}~~}||||~~~~wywwy|~}zxwy~{w~~~}}}|{}~~~}}}~}{z{}}|}}|~~zsuz~~|ywy{rjz|yxy|{xxwwxxwxxxxyzxuqquwxyz|~}z{zyyz{|ywsroostgZnyvtttnmptz||ytw}w|w{v{v{v{v{v|w|w}w}x|x{x{y{y{y|x}x~xwwwwwvvvvuvwwwwwwwwxxxxyxxxxwvvvwwwwwxwwxxxxwww~w~xxxxxyyyyyxxxy|{z|x|y{{yxwwwvvvvvvwwwwwww~x~w~w~w}xzxyxwxvxwwxuytzs{s|t|t}r~q}p|pvpwpyozoyoxpyqysxsvsurtruqtrusvrvpxqvp{vwostltmrmtluktkrjmjkjnktkykxlvmtltkvjwjwjvlumslnjphwg{gzh|i}j{g{fzd{b|_|^|b|d|ezfyjzm}nnn}m{mwmumslrmsmsitau^ufrkukxhxbxiwqwitZfVahkjohohmgniplsnthtbvjwqzqzq|q}q}r~s~r~p~n~kjjno}p{q{q|q|r}r~r~r}r}r}q|p{ozoynynxnxnxoyoyp{p|q|r}o}k}i}i~hzk|nn~o~o~q~rq~q}o~p|oqqoli~c{_yZxXx]ycye{g{g|g|h|i_QNN^qw~x}v}v}u}t}t~v~v}r|r{szszr{s{q}n~m}m}nxqnwozyuttuuv~v}u|w}qxjtktmuoxr~uwupllnqstuvwxxxwtrp|nymymymzo{r|s}s~v{~}yursuutssrstuvvwxyyxvu~v~w~utpn}n|n|q~rq}ozlvjvjxk{k}l~m|ozrysyuzv{w|x}y~z}z}x}w~w~wwv~v~w~w}u|y{z{v{qzw{u{r|q}r~tttut~r~qpppqqqrs~t}x}{{}z}|~{}{{{zzyzyzyzyzx{x|v}v~v~v~vuuutttrqrux{{y|x|z{{{{|z|y{xzxxxwxxyxzyzy{z|{||~|~|}|}{{{z{{x{v{t|q|p|p}p}q~q~ssqrrtvyz{|}yz}~~}}}y|w|x|{|}}}}}}~}||x{u{rzszrzuzx{v}u}s}r}r}r}t}v~v}t{rzoymyoysyuztzpvotpuqwsvuwvzy|y}x}w|vzuyuyuywzyz|z}z}y~y~x~yyxxwxxyyyyyyyxwwxyyyxwvtttu}w}x}y}y}x{xzxzxzy{y{y{x{v{mzkxtxzxzyzzz{z{yzx{w{wxxvzwzyy{w{v{uzvy{y|y{z{{|}~|~z}y|w{vztztzszsztzvzw{y{z{{{{{{{{{{|{}{~{zyy~x}w}w|w|w|w|x|x|y{y{y{x{xzxxxuxwxzw|x|x}x}x}w}u~u}x{vzvz{{|{zzy{v}vwxx~x~w~v~v~w~x}z{|{~~~~}z~x|x|v|u}t}t}v}x}z}{~}}|{y~w}v|w|x|z|~|{{{|~|~|}}tw~}|{|}~~z~x{~~}~||{|~~~}|xwuuy{}}yvwzzv}~}}}|||}}|~~~~~}}~~~|{z{||{|}|~zpt{~~~}{z|~}y~|zyyzyxvwxyyyyxxyyxvtqruwxz{}~|wvvyuljtwuqnorurgeuvrstvqootzyvvwvv~v~v~v~v~u~vvvwww~w~w}w}w~xxwwwwxwwwwvvvwwwwwwwwxxxxyxxwwvvvvvwwwwwwwxxxxwwvwxxxxyyyyy~yyxxx~y}z|{|z~xwwwwvvvvvvvvwvvvwv~v~uu~w}xzxyxwxvxvwvvwvyvyvzv{u{s{rzpvnwmzkyjwkvlwnxqxswrwrvqvquqtrururupvqynhtlvksmumwmxlsjljkkoktkuktlrmrmrlululvmtpqppnrltixixixhyi{i{i{j|j}i}g}g}g}h}i}i~lnnoon~nznwmtltltosmtiububthxfycwbvgvlt`kQ`O\\bigndncnenhpjrltjuivkxo{p{q|r}r~sss~r~rrpopp}pypyqzq{q}r~r~r~r~r}q|p{oynxnxnwnwnxoyoyq{q|r|t|r}m}j}k}l|n~o~o~pqsqp~n~oqqporqpm}h{bz]y^zc{f|h}g|f{dzf}d\\QLWlvx~x~w}w}v}v~x}w|pzlypypzn|k}l~n}o|q|s|u}w~x}v|v|v~v~v~w}w|w|y~symtltnup{sutpk~h{jzn|oqrsuvxxxxvtsp}mzlzlzn{o|o}o~u{~{wvwwxxxwuuttuvvwxyyxw~v}w}v~u~rp~p}p}r~s~s|qzmxkxj{k}l}l~m}o{r{tzvzw|x}y~y}y}x|v|u|s|t}uttr}r|s|u{u{u{tztztzq|r}uxxxyxt~qp~o~o~pppqs~v|z||{}z}{}{{{zzyyxzxzxzxzwzw{w{x{xzxzxzx{x{w|w~uusrrvzz|x|w|y|||{|y{xzvzvzyyyyyyzzzyzy{z|{{|{{z{{z{y|w|u{t|t|s}q~qqprrqqrtxz{~z~z~y~}~}}||z{y||}}~~~}}~}~}~|z{uzrztzrzuzxzt}s}s}s}s}t~v~w}v|t{rzpynypzszu{t{qxpwqxu{w|x}yz~y~x}w{txsvrvruswvwyw{v~ttu}v~xxxwwxyyzzzzyxxxxyyzzyxwvvv}w|x|y}y|y{yzyzyzyzyzyzxzvzrxruwtztzvzxzzyyxwwyw{wxyuzu{v{wzyyywzwzyy{y}z}|~~~}~}}||x|t{t{s|t|t|v{x{y{z{{{z{z{z|z|{}{~{zyx~x}x|x|x|x|x|x|x|x|x|x|x{xzyvysyxxzvywzx|z}{~|~zx~x|t{szwzzy}ywyu{u~vwwxw~v~u~u~v~w~y}{~}~~}}~~~|{x~v|u|t|t|t}u}w}x}z}{~}}|zy~w}v|v}x}z|~{{{{{{|~{xjow~}{z{|}}}}}}||{{{zz{|}{yxzzxvtw{{|{ywy{xmy~}|}||}~~~~~~~~~~}|zz{{||{zyyzzz}}wow~~}~}~}zyxwwvuvxyyzyxvsqttpprtvy{{||ztrswrdhwxrnmortphjssrsttpomnqpkovwwwwwwvvvvwwwwwwwxxwwwwwwwwwwvwwwwwwwwwxxxxyxxwwwwwwwwwwwwwxxxxxwwvwxxxxyzzzz~zzzyxwxxxwvvwwvvvvvvvvwvwwwv~u~u~u~v}v{vzvxvvvuvtvvvwwwxwyvzuxuvurtquowkuitititluouquqvqvpvpupupupvtwr{|ykn~{tynumunwnzmwlnkllplslslsmqmqmrltltmvmrpnponslxjziwhvixixjwkwlvlwlxkyk{i|i}h~hlnoppooo|nwmsiqfqerhvfu\\tVpPlNiXl`rcqZlUhSabibl\\maniokrkskvlwmxnyq{r|r}r~stttttutsr}qzpxpypzpzq|r~r}q}q}q|p{oznxmwmvmvmvnwoxpxpyq{r{u{v|q|j}k}op~p}q~rturpo}l}knmlqrrsro~k}i}j~k~m~j|i|g{f|hhWNRapww~w~w}w}v}t}n{gzeylymzjzeze|f|f{g{k|s{u|u{wwwvxxxyx{x|y{y{y}tyotmtpyr~sspk|gyfxj}ppwoupqstvvwxwvvrn}l{l{l|m}m~m~s~{~{yxxyzzzywvutuuvwxxxxww~w~w}v~t~s~s~s~s}s{t{rzozl{k}k~l~mn~p}s|v|w|x}x~x}w}u|szrypxmxnzq}rqo|o{q{s{szszszszszp|q}o~rtuuwvp~p~o~o~p~ppq~s~w}z|{||{}{|{zzxyxywzwywywywzwzwzyxyxyxyxzxzxyxyzw{v~trrw|{|x|x|z}}}||zzyywzw{z{z{z{zzzyzy{z{}{}z|{||z}v~t|t|u}t~srqpqropswy|~}zzz}~}|{|{|{}~~~~~~}}~}~}}|y{uzrzt{uzsypzq|r}t}t}s}t~u|u{tzrzpypypzr{u{u|u|rzryszw}x~yyzyx~w{svrtqsqrptpuqust}rrr{t|v~wxwwxyzz{~{~{}z}y}x}x}x~xyzzyyyxxx~x}y|y|y|yzyzyzyzyzyzxzwzvzuwvrwqyqysyuyxxxwtvuvywyyw{u|t}s|t{uzxyyyxzw}y~z~}}}~}{|w|u|u}u}u}u|w|y|z|{{z{z|z|z}{~{~{zyy~y}y}x|x|x|x|x{x{x{w|w|w|xzywywyzxwuwvxxz{|}~~~|}y{{{zyzwuwsvtyu}uvwwvv~u~t~u~v~w}z}|~}~}}}~}~|{y~x}v|u|t|t}v}w}y}z}{}|~}}|{z|x{x{x}y~{}~|{{{{~{~|~om{~}{z|}~}|{zyyzyxy{{{||vvwy{wtptxz{{{z|}ypy}~~}~}}~~~~~~~|zyyyyz|{yvwyz|~xus|}~}}~|yyxwvuuwyzz{zyvohjomnqrtwyzzzyvusvtoqleeijmttpkilosvvtpnnjeddnwxxxxxxwwwwxxxxxxxxxwwwxxxxwwwvwwwxxxxxxyyyyyxxxxwwwwwxxxxxxxxxxxwwwwxxxxyyzzzzzzzxwvvvvvvwwvvvvvvvvwvwwww~v~v}v}v|u{tzt|szrurrsttwuxwwxvxuwuvuvuuusupskrhrgqjrlrnsouovnununtnuowq{q}z{s~xz|pwmumwmzmwmomnmqmtmumtnrnqnqnrmsmumrnmommukzi{hxhuhvivjukultmsmsmulxkzi{g~f~kmoppoqolvdpWkQj`roy`vJr@k;e?cOh]p_qZnYlXiak_l\\mdnipkslulwmypzqzs|s}s~s~tuuuut~tsr}qzpxpwoypypyqzq|q{p{p{pzoynxmwmvmumumununwoxpyqyqysyvzs{i~l~ss~rrsuutrpkhmkkooqstsrssrqn}n}m}k}l~me`[^mtvvu~u~t}q|h{ezj{s|t{t{tzt|r|q{qzrzrzs{u{wyyvzuzvxxwzxzx{x}v|rxowr}trrylxivitlrpyrqunlnto{pqsuvwvwxtol|l}l~llmt{~~~~~|yxwxyzzzwvutuuuvwxxxxxxx}w}w}w}w}u~t|tzuzszp{m|k~k~m~npr}u}w}w}v|v}u|s|p{nylwkvjvlxo{q~q}p{pzrzsysysysyszs{r|r}n}n~n~n~oprq~n}n~o~o~pqqt~w~x~x~x}{{{zyzwyvzu{v{wzwzwzwzwyywywywywzxzwzwyxwzv|trqv{~{z{y|{}}~|{{zyyzyz{{{{zzyyyyyzz{{}{{|}}x}u}u}w}wusqpprsru{{z{|~}}}{||}}}~~~~~}}}|}||{xztzs{u|w{qzk{p{s~u}u}t}s|t{tztyryqyrzt{u|v|u|t|r{s{tzx}y}y}y}z~yy~x|tvsrrqqqrsqtpuqt~tszrvsyu}vwwxyzz{{~{}{|z|y{x{w|v}w~x~xyyyyyyyy~y}y|y{yzyzyzyzyzxzwzwzwywwxrwpwowpyrxuxvwsvqvswwyz{x|t}p~o}q|t{vzx{w|w}y~|}}~}~}{|z|x}w}w}w}w|y|{|{|z|z}z}{~{~{zzzz~z}z}y}y}x|x|x|x{w{w|w|v|w{y}y{xzwtuvuwwx{z{|}}||{y{vutststswv{v~vvvvvvu~u~u~v~y}{}|}}}}}}~}~}~}{{{~yzzw|u}v}x}z}{|{|{|{}{}|~}|{zztytyzz~|~}}~}~}~}~}~~~t~yw{~|yxywxzyuu{}||~~~~~|vvy~{~{xuswyyz|}}~}z~~}~~~~~~}||zyyyz|yxwxyz||srv}~~}}}{xwwvtttuyyz{|{ytigmnorrssvxwvwxwuuuulYXdlprvvrnkipwyyvpltqe_huyxxxxxxwwwwxxxxxxxxxwwxxyyxxwwwwwxxyyyyyyxxxxyyyyxxxxxxxxxxxxxxxxwwwwxxxxyyyyzz{{~{~z~y~xwvvvvwwwvvvvvvvwwwxx~x~w}w}w}v|uztzs|r{pvpqpsrutwuxuxuxtwtwtvtuttrtlrhqfphpkqlqntmumultltlunwnwozsxtr|qwltktktlwmumomnmrnvnwnvotornpnpnpmrmrmlmlkuj{i{gwgufthukulvmvmsmrnrmtmxjyh{`}innopnlj{]qHiDkVoiwo}dxJp;i8e;cGfYn^p[p[o[mal_lamhoiqlumvnyozr{t|u}u}u~u~u~v~vvu~s}r|q{qypwovowoyoypxpxpxoxoxoxowownwnwnvnununtnunwoypzqzryrytyn{i}r~wvttttsqpnjhjjkoprttuuttsrq~p}p}o}p}o}p~o~k~hmrtut}r}o|k|i|n}u~x~xxxxzzzzu}u|v~w}yzzyzyxywzwzvzw~vs{pyr}s|rvntkxjwmsqrtytq{mmmomomtnrtuvvvtqm~l~l~l~mlqu~|}~}}z}~~~}~~y~wwuvwwxvtssuuuvwxxxyyyy~y|y{z{y|w|uzuzvzuzq|n}l~l~npr~t}v~v~t|s}p|n|l{jzixhvivkwmyp{q|r{qzrysxsxsxsxsysyt{t}u~v~t}r|o}m~l~m~o~n~oopqrrt~vvuu~x|y{wzu{s}r~s~u}v{v{wzwzwxwxwxwywzxyxywzv|v~tsqqxz|}{~}~~}}||z|{|z|z|zyxxxxxx{y|{|zwxzj~q~v~yzvsrqrrqux|~{{{|}}~|~}~}~~~~~~~~}|}{{{zzwztzt|v}x|q{l{r|v~w}v}u}t{tzvyvywywzx{w|w|x|v}u|t|u|v|w{xzxxxwzzy}y~y|uvtrsqsqvuvvwwyvv~uusrtwt|u~v~wxyzz{{~{}{|z{xzwzv{u|v|v|w}w~xyyyyyyy~z|yzyyyyyyyzyzxzxzwyxyywzrxpvowoxoxrwtvqunvpwvz{|z}v}q~o~p}s|u{w{w{x|z}|~|~|~}}~}}~|}|{}y}y}y}y}{}{}{}{}{~{~{~{{zzzz~z}z}y}y}y}x|x|w|w|w|x|v|v|x|x{xywvtvtvvwyx|y{||||}{zxttqrrrsstuwyw}vvuvvv~vu~u~v~x}z}{}|||}|~|~~~}zvsw{{x}w~y~|}}|||{|z|z|{}}|~|v{l{k{u|~|~~~~~}~}~}~~~~{~u~j~q~~~~~{xwxzy~wlq}|x{}~~}~~~~{zz~{}{yyyz{{|}~~~~~~~~~~}}}|{{|}~||}zwvwusu|~~~}zxwutsrsuxyz|}{||urtwwwvtqtvvtuwwtstpaX`jnnrvwusrqsx{~|tr}}mds|{wxxxyyxxxxxwwwxxxxwwwwxyyyxxwxxxyyyyyyyyxxxxyyyyxxxxxxyyy~y~y~y~y~yyxwwwxxxxyxxxxyz{|}}|||{|z}y}x~w~w~w~w~wwww~wwwwwwww~w~w}x}x}w}w}w|uzuysyqypvosososqvsys{s{rzqxqwqupsotksgqepfoipjqmrmsltktktlvmymvmxo~on|mwjtitjtjuktmrmpnqnrouowoxpwpspqpoommmlnlkkkjtjzhzgwfteshtlunxnyovornqnrntlvixczi}nnnnl~h{gxWqCkMpdzpmezPq>i8d:bBcRi_n^p]p\\o`ncmengoirmvoyr{s|t|u|v}v}v~v~v~w~wvs}q{pypxownvnwoxoypxpvpsnrmsmtnuououovpxpxpwpvovovoxpzq{r{r{r{pzh{k}t|wvvutr~pmkihhhjloqrtttutssrq~q~p~opq~r~rp~ooqsts}s}p}q~t~wxyxxwwwwwwvvuvxyyx~w}w|vzs{r{pxowqxqvptlyk}l{pyuyvurmrlpkmlnnxtsssrpnl}k}l}l|k|l|l|j{gzs|u}pzjwkxozw|v{p{t{z}z}w}s~q~q~s~uvsqqqtuuvwxxyyyyyz{{y|z{zy{wzxzxzw{s}o~l~moqtu~usp~p~l}k}j|i{hzixjxlyo{qzrzsysxtwswswswswsxsyt{t}w~z{~y|u}p~nnoopqqrrrrssqqt|v{u{s|q~pprs}u{vzwzvxwywzu|t}t~t~ttustt~quxz~z|}{~|}zz~z}z|xywxvwyw|x{zxxmyQQpzyz|||~vqqqsrtz~~}zz{|||~|~}~~~~~}}}{|zzzyzvzu{u}v~w}r|p}t}x}y}x|w{wywxyxyy{z{z{{y|x|x}w}w}v}w}x}w{wywvwtyxy|y}y|vvurtquryw{x}xyx~vxtvtxt{u|v}v~wwxyz~{}{|{{zzxzwzvzuzuzu{u{v|w~xyyyyyz~z|zzyyyyyyxywyvyvywyyxzw{sypwpxnxnxovpuotmupxw{z}w}u}s}r}s}t}w|x{y{y|{||}|}|}|}}}~}~|~|{}z}z}{}{}{~{~{~{~{{{{zzzz~z~z~z~z~y~y~y}x}w|w|x|x}u}t|t{uzuyuxuwuwuwwwxw~xy{|}~|zyuusssrvsyvyzx}w~vvvwv~vuu~v~x}z|{|||}}}~}~|zvsrw||{~z|~}~}}|||{{{z|{}}~}}|u|l}i}r}~~~~~~~~x~i~_~w~~~~~|yuvyz{yuty}zv{~~~}~~~~~|~|}|}}{{}~~}~~~}}~~~~~}}~~}~}~~}{{~}zzzvuv|}~}~~}{ywtsrstuvwxz{z}~|||{zxurtvvstxyvutj[Yaipqqvwxyxvvy}|{tnz~}xyyyyyxxxxxxxwwwwwwvvwwxyyxxwwxxxyyyyyyyxxxxyyyyxxxxxx~y~y}y|y|y|y|y|y}y~y~xxxxxxwwxxxxxz{|}}{}z|z|z{{z|y}x~xxwwwwwww~w~w~w~w~w~w}x|x}x~x~x~w|wzuxswqwouowoxnxoypzq{q|p|pznxmulsktitgsereqhqirlsltlslslumyn}l{lzm{m}lzkwjvjvkvlvltmrmsnupspupwpxpwpvprpnolnjlkjlioithxgxgwftfrirmup{q{pworopopnqmskvixj|j~klmmk~j{^xRrbuknmg|YuBk:d9d?eLh]m`q_q]p^oaocogrkupxs{u|v}u}u}w~w~w~v~v~v~v~u~r{pyoxoxoxoyozp{q{pwornmklknmposornrowr{s|szrzqzpyqyr{s|s|r}r}k|h}n~r|suxvq}n|k}ihgghilnprstttutsrrqponnopqppprsss}u}u~x~yyyyxwvusrrrssstvwxwxxu|mtjoinkrqytro}moswxvsnujsgrcoasg{jmnkj{j{l|l{k{kzizhyiy`wUvbxlyev\\s\\tfymziy`xfxozx}{~z}u|s}t}r}s}t~u~s~o~oqtuuvwxxxxxyzz{|z~z}{{{z|{|{}w~tpl~k~m~psssqpom~k~j~k}l|l{m{p{p{rzsysxswswswswswswswrwryr|t~x{|ysqpqppppppooponno}q|r{s|r}o~mnn~q|t{vyvxxxxzu}sqqqsttv|xzv}uvsruxw}y}x~y}y|yzyxwwyx|v|wzyf{G9]wx}w~x|{w|t|sssv|~~~|~{~{{{~|~|~}~~~~~~~|}z|x}y|y{zw{v|v~twv~v~w~y}y|yzyyywzv{w{x|z|z{{y|x|x}w}w~w~w}x}w{w{wxwwyzy|y|y{vusrsruryw|x~yzyw}u|t{s{t{u|u}v}v}w~w~x}y}y|y{yzxzxzwyvytytztzu{v|w~xxxyyz{|zzyxxxwxwxvyuysytxxwyvzszqyoynymwnuntmupvtyx|w}u}t}v}v}v}w}x|y{z{z|{|{||}{}{}{}|}}|||{|z}{}{}|}|}|~{~{{{{{{zzz~z~z~z~z~z~z~y~x~w}v}w}w}u}s|r{szsytxtwuwuwuwvvxwy{|~}|x~v|uvx}{y}x~wvvwwvvuv~w}y||{||}}}~~|zwvwy~}|||}}~}}}||{{|{}}}}{|u|p}l}s}~~~~~~~y~h~e{z~}~~~~zxwwuy{zy~}{z{}~~~~~~~~|~|~|}|~~|{|}}~}}}~~~~~}|~~~|~}~~}{{~|||{sis~|}}||zwtrprstuvxyyyy{|}~|{{xvssrqprxyyytj`achrvuwy{||ywy}~}{xw{}{y~y~z~zzzyyyyyyxwvuuuuuvvwwxxwwwwwxxxyyzyyxxyxxx~x~x~xxxwwww~x}y|y{yzyzyzyzz{z|z|x}x~x~xxxxwxxxxxyzz}|{}z}y}x}y|z{{z|y}x~xwwwww~w~w~w~w~w~w}w}x}x}y~xww~w{vyswqvovpxoynzozozp{p|o}o{mylukrjsithtfrergsisltmununuovozp~nn~n~n}m{mzlylzmzmylvltlwnvptpsqtrvqwqwpvprploiohmjiogtfugvgwgvhultqwszsxrtqqpqopnpmslvkwhze}gkmnm}m{ew`uiyl}kki}dxJn=f;g>gHeXl^p^p]o]n]o_ogtoxs{w|w~x~v~v~w~x~x~w~w~w~v~t}pzoxoxoypzp{q|r}s|rwoplhhgikpoqqopnppyrtu~s}q|q|q{s{s|s}q}o}k}k~o~r~twwr}l}i|g~ffghjmnpqsttttttssrqonmm|opqpopr~s~s~r}r~t~u~wxxyxvutrrrrtuuwvussuwtmtijknpzttsqqsuxxvtqsnuou`oNkRm]ug|i}i|izizj{k{kzkyhyfyexcwVxZyhxew[vYvdynznyhxfvlyt|v{q{kymyvzv|v}v}w~s~o~pqtuvvwxxyyxyzz|{{}{|~|~}~~{wspn~i~i~n~rssssrpnops~t}u}u}r{qyrxrwswswswrwswswrwrvqxpyp|rw{yso~nnnnnnmmmmmmlll~n~p|s{s|o}l~k~k~l~n}r{tywxxyv|rpopstv}wyxxxzwwusqst~v|v}x{zyzwzwzv{y}w|wyzYv5Dy}}||~|{~wzvzv|uu|~~}|}z}{~|~|~|~|~}~~~~~~~}}~|z~x}v~wy|{w|w}wuy{z~y~y}y{yyzxzvzu{v{x|z|{||y}x}w}w}w~x~x}x}w{w{wzw{y|y}y|yzuurrqrssyw{x}yz{y{w}u}s|r|s{t{t|u|u|u}v}v}w}w|x{x{x{xzxywyuytyuyuzu{v|w}w~xxyz{}{yyxwxvxvxuxuxqxsxwvwuys{q|oznymvmtmtovtyx{x}w}v|u|v|w|w|x|y|z{{{{|{|z}z}z}y}y}x}y|y|z|{||}|}|}|}|~|~{{{{{{{zz~z~z~z~z~z~z~z~y~w~v~v}w~v~u}u{vyyx|w~w}w}v|vzvxwyx}z|}||{zzzz}{z|y~x~wvwwvvuuw~y}|||{}}}}|zyz{}~|{{||~}}}{}{|}|}|}|{|x}t}r}y~~~~~~~~}}~~tuz|~~~~}~~|{{{zxw{}}{{~~~~~}~}~~~}zxz}~}}}~~~~}|}~~~|~|~~~~}|{||{~~}zy{vlu~{~~~}|{zxtqnoqruxy{{{wrsy|zz{yvssronqvxyytljlmnrxyux||}{yz~}|||{zy}z}z}z~zzzzyyyxxwvvuuuuvvvwwwvvvvwwwxxyzzyyxxxwx~x~xxxxxwww~x}y|y{yzyyyyzyzzzzzzyzy{y|y|y}y~y~xxwwwwxyz~{|}z}y~x~x}x|z{zy~xwwvvvvw~w~w~w~w~w~w}x}x|x|x}w~w~w~w{twsuptpwoynzozoyoyo{n}n|mzktjpiqirhtgtfshrjslvnwpvovpvpxoyo{n|n}o}o}o~o}n~n~m{lykukumuotpsqtquqvqwpxpupnpiqfogjlgqgshthuiwpwtwvxvztvssssqsoonnmqmumwiyf}gkmno|myjviwk{l}l~m~l}l{YoBd<b<cA_Qe^m_p]n]m]o^phtpyu|x}y~yvu~v~w}w}y}y}y}w}t{qypyrzs{r{r|s}t~t}swpojfgfkjrprpnnnpozqrsp~on~o~q}q}q|n|l|k}m~pstv~s~n}j}f}e~ffgiknpqsstttttsssrqoono|qrvshi~p}r}r}q~qstvxxxxvtssrsutvwwvtssuvuowlrovt~vvsr~s}t|v}xxwu{tuutvvitQkGeXodxh{i{j{j{j{kzlzlzkzjzhyiydzfzrzszo{m{s|y|{|y|u{x}z~y}r{hwfuoyw|z}x~wtpq~s~tuvvwxyyyyyzy}z{}{}}~yurqppnpuwwwxxusuwyzy}x|tzqxpwqwrwrxrwrwrwswrwrvrwpxnynzq|uup}m}k~kkllkkklmmmmllmn~p}s|n}k|m}p|l}i~j}m}p|t{u|sqqqtuwzxwxwxyw|w}x|w}tt~v~w|w{zy{x{vzwzwzz{y~yz}S{/\\~}~}zr|r|u}wx~~}|}|}{}|~|~|~|~|~|~}~~~}}}{~zxv~uv~y{|x~v~vvyz~y}z}x|xzyxzwzuzu{w|y}{}||}z~x~w~w~w~x~x}x}w{w|w|w}x~x}xzwwxuusqqqrvuzx}zzzwzu|s|s|s|s|t{t{t{t|t|u|u|u|u{v{w{x{x{yzxzvyuyuyuyuyuzv{u|v}v~w{}~|zxxwxvyuyuyxyuytxwvtuwt|rp|ozmwmunusxx{z}y}x}x|w|w|w}y|z|z|{{{{{|z|y}y}y}x}x}w}x}x|z|{||}|}|}|}|~|~|||{{{{{~z~z}{}{~{~{~z~z~y~x~w~w~xy~w}w{zy~xxwuvwvv}w}y~z~zz{{|~|}|||z|x|w}w~w~w~wwwvvvw~y}{}||~}}|{{{{|~~|zz{||}}{~|}}}~}~}}}|}y~z~}~~~~~~~~~~~~}~{}~~~~}|~||{|~yv{~}{|~~~~~~|zxy}~~~~~~}~~~~~}|}~|~{~|~~~~~~~|zwtry{|~}zywtx~~xx}~}}|{yuqooprty{wzxsrry{xxyxwrtsporuuvxqqrowwsvyuxz{{zyy}}}{~}|zz|z|z}z~z~zz{yxxxwwvvuvu~v}v}v~vvwvvvuvwwwwxyzzyzyxxxxxxxxxxxxxyy~z}z|z|z{zzz{z{zyyyyyyzyzyzy{y|y}x~xxxxxxz~z}|{}y}x}x}x|y|zz|y}xwwwvvwxwwww~w~x~x}x|w|w|w~w~y|xyvxrxpyo{nznxowownzm{m{l{lvjsjrjsitithsjrkunypyqypzoxmtmrnuoxpzp|p~po~n}m|mxlvjtjtltnspsqtqtqtqvqxqupooiqfnfhjemgoiqhskuvvyxyzy{vvuvtysyqpolnnotowmyk|kkm}m{mzmxmumtmtmvmyo|p}q~ktPh?`9a=\\K`[k`p`n`m^p]rjvs|v}x}x~x~v~u~w}x|x|z|{|z|v|tztzv{w|u{t{t{u|u~t}swqojgignkpnoomolrmvnyn|n|m|l|kzkzmymzl{k{k|k|n~p~s~t~u~k~h~f~f~fhiiimprstttttssstutrrsstvx{xhe~o}r}q~rrsuwxyxwuttuvwwwwwwwvuuuvvuu|x~zzxus~t|uxwuyxxwv}t{uzs|nz]rQj[pewizk{k{k{l{m{o{o{p{p{o{o{p|t}{}~~~|~~~|s~n|kyjws{x}x~v~trrstuvvwxyyzzyyx~y||}~~}urqrsvuvz{{|}}zwvwyx~u|t{rxpxowowpwqxqxrxrxrwrwrvsvrxpyp{r}tto~l}k~kkjkjkkmnnnonmmlln}k}l{r{wyq{l|k|n|q|s|u|u|t~stu|vzxwyvxvxwwywzxxxyx{xzx|y{yz{yzxzwyxyyy{y|~}zG8p}}|yoo~ty{~~~~}}|}|}|}|~|~|~|~|~|~|~}}}{}yxvuuwzzz|xvvwwx~x}x}y{yzzxzw{v|w}y}{~}~}}~z~y~x~x~w~x}x|w|w{w|w}w}x}x|xxwuzwytvrtrssxx}{y|u|s|r|r|s|t|t{t{t{t{t|t|t|t|t|t|v|w|x|y|x{vzuzuyuxuxuyuztzt{t|t~tu~y{{y{y{zxzw{}z{ywxvwsvuu{tr~pznwnupvuyz|{}z}y}y|x|x}y}z}{|z|z{z{y|x}w}w}w}x}x}x}x}y}{}|}}}}}|}|}}~|~|||{{{{{~{~{}{}|}|}|~{~z~z~y}x}y~yz~x}w|y{~zxvssuuuuvv|vywzxzy|{|{{{x{w{v{u|v}v}w~w~wwvvuw~z}|}|}~~|{{|}~~~}{zz{|}}~|~|~}~~}}~~||~~~~~~~~~~~~~~~~~~~}~|~z{|{|{{{||}~~~~~}{{y|}|~~~~~~~~~~~~~~~|~|~|~|~}~}~~~~~~~{xtqowyz}{x{{rorx~~~}{xtqqrrtyqcjmmmqvwutvyxnjjsuvxunnovuiddhouuvwyxxyyxwx{}}vu|}|zz|z|z}z}z~{~{zyxxwwvvvu~u}u|v|v}v~vvvvvvuuvwwwxyyzyy~yxwwwwxxxwwwxxyyy~z}z}z}y}y}y}y|y{y{y{y|y{y{y{y|x}x~x~xxxxxy{}{{|y|y|z|y|y{yzyy{y|x~wwvwwxxwwwww}w|w{w{w|w|x|xzvyrxoynzmwnunuounwnynznzmylwlvlvkvktjsksmuoypzpzpznzmwnuowpzp|p~o~o}o|nzmxlvktjtjslsnsotpuqtqsrtrurrplohoflgfgdjipksktqv|wzyvzzzwxw{vu~turkqmqvovnwlzk}l~l|l{l|k{l{mylvlwlzm}n~oq|aqGc8a;]E_Wi`p`obn_qevq{t}s|r{pzqzs|v|w|w|w{x{y{w{tzuzy{y|x|t{rzrys{t|s}ryqqkhlhpmoolqksktlslrktkujyjxiwiwjwiwhyiyj{k|o~p~q}r}q}i}g~g~hjkogenqsstutsrpprtutrtwxxyzzzph~p}r}q~qstuwxxwwuttuvvuutttxyyzxxxwwxyyxvuv}wzxszryyx~vro~lm|gvatcvgxkzmzmzm{n{o|r|r|s|s|s}s}s~v|~~~yp{q~rn|p}u}w~u~utsssuvwwxyyzzyywwy~}~u~r~p~pq~s~s~t~uxyz{|{yvts~s}r|pzoyoxowmwmwnwoxpxqxqxrwrwsvsvtxt|tuusnookighjklnooppomkjijk|pzxyzwwxtysywxxxyxyyyxxxwzwzxxywyuzuyuyvxvxxxvywyxzx{z{y{x|x{x{xyyy{y~z~yNW{|}}{xqqvxw~w}x|y{|}}}~~~~|~}~}~|~|~{~{~{~{~{}{}}|}z~xvvvv}xx{z}xwwxx~x}y|y|z{zz{x{w|x}z~{~}~~~~~~}~{~{~z~y~y}x|x{w{w{w|w}x}y|ywxtxxxuysxstswx|z~x|u|s|s|s|t|u{t{tzuzu{t|t}s|s|s|s|u|v|x}y|x{w{uzuzuyuxuyuytytzs{s|r}o}m|r{y{{{{|||{~yzwvvsvtwyv~t}rzpwpvqwvzz||}|}z|y|y|y}y}z}z}y|y{x{w|v}t}u}w}x}y}y}y}z}|}}}}}}}}~|~|~|~|~||{{{{~{~{}{}{||||}|}|}{}z}y}x}x}x~x}v}u}v}y||{}yurttttss{twvwwxyyzwzuzszszs{t|u}v}w~wwwvuw~z}|}}}~}|{|}~}}|{zz{}~~}}}~~~~~}}|~}~~~~~~~~~~~~~~~}~}zxy{zz}|}}~~||~~tqwzz|~~~~~~~~~~~~~~~~~~}~|~|~}~}~~~}~}~}~}{xvsqwyz}~|zyqgkrt|~}{xvusuzzq^X]einsvusuy{smktuvwvnmtzwbHD^pvyxxyxxyzvsv{{znnxyzxy|y{z|z}{}{~{~{yyxxwvuvuu~u~v~v~vvvvvvv~v~v~w~wwwwxyz~y~y~xxwwwwwwwwwwxxyyy~y~y~y~y~x~x~x~x}x}y}y~y}y}y}y|x}x~x~y~x~xxxxy~z}z|z}z}z|{{zyywywy{y}x~w~wxwxxxwwvv~v|w{xzx{x{w{vyuxqunsltltmtotpuowoyozoyn{n{nznymxmwmumtnvoxoynxnumvnyo|n|o~o~o~o{oxowovosmsmtktktlunwnxoxpvqtrssrsnqjpipjnkhiglnvpxsxyyzz{u{z{x{wwww}vrssr~pxnvlwk{kzkwkxj}jjkjjjkllmh|Oh<]:]?]Qf]n_n_n`qlyu}r{kxfvbuevmxsyrzpxnvmwoznyqzuywzvzrznyjuktnxp{q|q{pumhnjponrktkvkvnumslrkrkvj{j}k~k|jzizi{l|m}p~q}p}o}m}i}h~j~lnqq`~d}o~rssuutqo|m~morspptvxxyxwxvoq~r}qprstvwwwvutstuuutttuvwxyzzyxxxyyxxwwxy}zy{zx}r~l|j{j|kxjwjxiyjzmznzoyozpzr{t{t|s|r}q}q~ru|~~~~v~mymyq|t~q~r~u~v~vurrrtuvwxxyzzyxvuvzw~o}o}p}p}p}q}q}q}q}r|s|t|u}w}u}s|r|p{p{p{pzoyoynxnwnwnwnwnwnxowpwrwrvtvtvuwu{u|t~sqookedghjlmoqrrpomjiik~qzxw|v|u|uzuzv|v}v}v}v}u|uzvzw{v{u{u{uzuzuzvyxywxvxxzx}x|v}w{w{w{yzzx|w~y|w[o{}}|xuwyv~n{mzmynysztzv{x}{|||{~z~y~y~y}y}z||{~yxwwwx|zx|z~xxxyyy}z|z||{|y|x|x}z~|}}}}}}}}}}}{}y}y|w{w{w|x|x|y{yvyttxuuvuwutsvxzy|w{u|t|t|t{u{v{uzuzu{u|s~r}s|t{t|t|u|w|x|y{x{w{u{tztyuxuytytytxtyuzv|s|j|d{f{j{v|~||z|xxwuwuxwx{v{tyswrwsxwz{{||||{{z{z|z|z|y|x|w{w{v{u|t}t}v}x}z}z}z}z}{}}~~~~~}~}~|~{~{~{~{{{{{~|~{}{}{}{||||}|}|}{}z}y}w}v}v|u|t|s|r|s{s{u~x||torsstsst|uxwuxsyryryqyqyrzs{u|v}w~w~xwvuw~z}}|~|~|||}~~}|{{{{{}~~~}}~~~~|{{}~~~~~~~~~~~~~~~|{{}|{{{{{z{|~~~~~tt~{wrv{z}~~~~}}~~~~~~~~~|}~~~~~}~~~~~}{yxvtz{{ytpotus|~}}{zyvw|{vePO\\krsvvuwz{{zuuutqpomrws]BDi|}|{|}{zz|zxz}|xoouvvtx}y|y|z|{|{|{}{~zyyxwvuuuuuuvvvvvvvv~v~v~w~w~w~wwxx~y}y}x~xwwvvvvuuvwwwwxxxx~x~x~xxxxxxyyyyy~y~x~xx~x}x}x}w~w~xx~y~y~yyyy~x|x{x{y|x}x~x~w~xxxxxwwvuu}vzwwxyy}x}vytwrtorlsltmtospuowozo{o{o{o|o|pzpyoxownxoynxnxmulslrltmwnxoyoyovpspopnpnomnqmvlulvmwnyozozpxqursrprlrhqnpupwnsnspwszy{~{|z}x}y~xxxyxw}uzr{qynwmwlzkzjyi{hhiihhhhjkkjUlA[;X<WLaZm`r`rfsjvpypwgtZqXm[ncqdrap^m`ndrixkwnvmtjthtgtgsZj^kirkwnynynwmlnmnqktjvkxkxoxpxnumtltlwl|mnnm~k}l~nqqp~n}j}i}j~moptla}j}qsttttro}lyk|k}l|m|n~nqtvxyxxwwwrq~qpoqrsuvvvutssttttuuvwwwxyzzyxxxxyxxxxyyzzvm}g{gzizjxjxkykzmynxoxpxpyrzszs{s|r|p}o}o}q~u~{~~~y~o|lzjymyq|q}q~s~v~wuqpqstvwxxyzyxwtstuw~q}n}o}p|q}q}r~r~q~q}q{pzqzqzqzpyoyoyozozp{pzpzpyoxoxoxnwnwnwmxnwowrvsvuuuuvuvxuxtzq{o{l{ey`y`zd{i}llm~n}p{s{t}s}q}p~o~jg~j~r|yx|u|u|t}u|u}u~t~t~u~u}t|u{v{v}w}v}v|v|v|v{w{yzyyyyzyyxxpttuvuzvx|yw{u}yyodv~}|}|xz{xt}mzkykxlxnxnxoyq{w~z~z~{z~y~x}x}x}x|z{|{zyxxxz|{y}{}yyy~yzz~{}||}{}y~xy{}}}}||||||{~}|~{~y|yxy{y|y|yyyvyuvvvuutuuttuvuwwwvvyvywzwxxxxzwzv}t}s}q}r|szuyvzv{w|x}y{zyyyw{u{uztxtwtxtytxsxtxuzv|v|q{h{_{\\zj{||}|z|ywyvzwzxyywwvvuvvwxx{y|y{zzzz{z{z{y{x{xzwzwyvzt{t|u|w|z|{}{}{}{}|~~~~~~~~~}~|~z~y~y~y~z~{~{~{~{}{}{}{}{}|}|}|}{}z}z}y}w}u|t{t{s{rzp{pzozozqxstvq}sutttttv{wuxsysxtxtxuxuyuzv{x|x}x~xxvvx~{}}|~{{~{}~}|{{zz{|}~~~~~}{z{~~~~~~~~~~~~~~~~}|{|}}~~~}~~~~~~~|xvptz{~ysrv~~~~}}~~~~~~~~~~~~||}}~|zvx{|{~}xvw{}ws{~~~~~~}|||||zy{zwj[NVnuonsvwzzzwuvvtsrmklmqaRbw~~~~}}{yxz{yuuvxwuwx~y}z|z{{{|||~zzyxwvuuuuuuuuuuvvvvv~v~w~w~w}w~w~x~x~x~x~xwwvvuuuutuvvwwxxxwwwwwwwwwxxyyyyxwwx}y|y|x|x}x}x}x~x~x~x~x~xwwxxx~x}x}x~y~x~x~x~w~wwvut~v{wyywxyy|w{uzswpunvnwnxpvpwpzopp~p}p}o}p|q{q{p{p|p|oznxmtlrlplomqnrntnuosoqpopnpopmosnxnwnvnxozp|p}ozowqtqqrlrhqppwpwpsqopnts{z}}~yyyyyz{{yw|t}r|p{nzl|k}jhhijjhhggiijj]vKa>Y<UL`[natduftcthvdu[sSlLdIcLeQeOcL`QfYmascp_kWgRfSgXh\\gRaWc_iepiukululplojrhugwixkxo{r|q{pynwmvmwn~prqmmoqqom~j}j~mpqrpgg~qtttttspm}j{i~ij|n~psuuvxyvtqrsqponnoqrsuuutsssttsstvxzxxxxyyxxxxxxxxxwyyyysj}e{fzizizjykzkymwovoxoypzq{r{r|q|p|o|p}p}r|v}{~~~~w}n{mzlzl{n{o|p}r~uwtpop~rtuwxyyzywurrrrr~p~p~r}r}s~s~ss~s~r}r{qypxoxpyoyozozo{p{q|q{q{qzpypypyoxnwnwmwowqwtvuuvuvuwuvwuxtyrzoxirao]n_pdritlvlwmvouqtsutxsysyrzszo{lzpzyx{w{vzvzu{vzv{u}t}s}u}v}u|v{w|w~w~w}w}w|w}w}y|z{{z{z{yynw^s\\tYtiuqvwwwyu{z}zpnw~y~zy{zw{{w}r|mykxjwkwkwkwlxnyt|v}x}y~x~x}w}w}w|x|z|{|~{z~zyz{||x~z~z~z~z~yz{|~}|}{~yyy{}}}|{{zzzzy|~}{}zxzyz|yzywyuytyuxtwtvutttusvrwqxrxsyvywxxv{t|t}r{rxrvuvvvxvxxxzy|z}{|{xzvxxvyvzuyuxuytxsxsxsxtyuzv{v{q{iz_yazr{{|{z}yxyxzx{x{wzvyvxvxuyt{t|t{vzxyyyzyyyyxyxxxxxxwxvxvzw{y{{{{|||}}}}~~~}|{~y~x~w}w~w~y~z}z}{}{}{}{}{}{}|}{}z}z}z}y}w}u|t{t{szrypyoyoxpxqwqwsv{vwvuuuuwwxxwywyyyxxxxyyxzx{y|y|y~y~xwwx~{|}z~zz{}~~|{{zzzz{|~~~|{||~~~~~~~~~~~~}vpqtx|z{{uw|pknv|||{||~~}~~~~~~~~~~~}}~}~~~||~{x{yrrxz|tlv~~}}}}}|{z{|{zzyyyvoWauxqouwwusqqrvywxvnkilwsnu~|{z}|zyz}|{||{zzz|{{vwx}y|z{{z|{{}zyyxwvvuuuuuuuuuuvvvvv~w~w}w}w}w}w}x~xxxxwwwvvvvvvwwwwwwwwvvwwwwwwxxyzzz~xxwxy}z|z{y{y{y{y|y}x}y|y|y}y}xy~y}y|x|x|x}y}x}x}x~x~xx~wus~t|uzwxwwywx|w}u{syryqxqxquqvq|qqqq~q|q|q}p|q|p|p}p}p{pxouoqnonnnonpnrntotpupvpuororownxntoupwq{q}p}o{nyovosopoloooqpppkqhpjtqzz}~{yyyxyz{{y}wzt}r~q}o{m|m}lkjk~l|k{i{i{i|h}ijjigZqDa>XMa\\natbrauhxmzdy^|XsNh@_A]E\\C]A\\C_GdRfQbI\\BY@YF\\M^R\\T_YbYd_kcpfqhqjohofpfsgwixjxlzo}p~p~o|n{nxp{rssomnoomlk}l~mnppockttsstsrmkiiijnmjcdkswqnzh{knonnmmnopqsssrrsssrqqqsuwwwwwwxwwwwwxxxxwyzwuoi|ezfzh{i{j{kzlymwnyn{o|o|p|o{p|o}p}p}q}r|t|w}|}y|q{pznzm{n{o|o|q}s~vtpoo~p~stvxyzzywtrqrrrrst~t~uuuts~r}qzqypyoypzozo{o{p|q|q}r|r|r|q{p{pzoxmumumuourwtwuvvvvvvvvwuxuytyrworhndkcjbieihkkmlonoporqtusvsususuuwxwywyvwwvxwwuxuxvvwszq{r{t{v{v{w{w|w|x}x|x|x|w}y}{}y}y{y{xzzvxkscsXs`t\\t\\uawqxuzv|w}u}v|u|t|s|u}t}s}w~v|r{mzlwjvjvkwkwlxoyqzt{u|u|v}v}w}w}w}w}x|y|z|||}{{{}z{|{}wz~z~{~{~yyz{~||}{zzz{|||{zzyxxyx{}|~{{zyzyyyyvyuytytxtxtwuvuwvvwrxnymyoysyzt|r|r|swtturwryrztzuzwyyy|z}{||x{tztxvwyv{vzuzuxtxtwtwtwuxwzx{v{q{kzazdzozvzyyzyxyx{w|w|w{vzvzvzt{r{p|q{szvyxyxyxywywyvyvyvyvxwxxxxyy{y{z||}|~}~~}{zx~v~v}u}u}u}w}z}{}z}{}{}{}{}{}z}z}z}z}z}x}u|t{t{t{ryqypxqxqxryszuzyz{y}xwvvuvw{yzyzy{x{x{y{yzzy{z|z|z}z~y~x~x~y}{{~y~yyz~|~~~}|{{zyyy{|}~}}~~~~~~~~~~~~~~~~~~|wsvzxutvwrs||topw}}|{z{}}}}~~~~~~~~~~~}}~~~~|{||}~zxx{~}zpqxwyodr~}}|{{{|{zyyzyyzywx{vykvxwwxxywtqjdfqvuywpjjr~}~~}}~zutuy|zxwy{{|||~}zyz{}uvwx~y}z|z|{}zyxxwwvuvvuuttttuuuuvwv~w}x}w|x|x}x}x~x~xxxwwwwwwwwwwwwwwwvvvvwwwwwxyz{{~{}z}z~yyz~z|{y{y{yzzyzxzxzyyzzzyzxyxzxyzyzy{y|x|y}x~x}x}y}y}y}y~v~s}qzrys{uywtwuwxvzu{uzuytwsusvsys~ss}r|r{ryqypxpvpwpxpxqwqvquqrppoonqnrnsnuouovpxpwotnknqmznzpxrzs|r~q}p|ozoxmumsnoonpmpkphqhqntvx|yywwxwxyz~y|x{uxrzr{q{qzozpypypzpzpznymvktiuiviyj}kkjne~Nl?ZKb]nar_qbxfihef}[sEdC^A]>_<^>_DbP`IW?T>VEYN[R^R[Vb]h_h_j`ncoeofndncmgslym{lziyizj{l}n~pp~q~qstonmnnml~l~m~nmmmj}i~lstsssqokjjiijljZMOSV[a~c}gknnmnmnooooqqqqqrrrpoonnpsuvvvvvvvvvwwwwxxzyuni~f{fzf{g|h|j{lzlzm{n}n~n~n}n|o|o}prstu}v}x~|~}y{s{q{o{n{n{o|o|p}r~ttrpn}n~p~svxyzzywtsrrssttuuvvusq~p|p{pzozpzp{o|o|p}p}q~r~s}s}s~r}q}oymoihjjlpouqwrwrvtvtvuvuvtvuwuwuvuuqrlnhkbgafdgiikjnlpmrptstttsssosvu|vzwvwsvswtwsxtvuqumwowrvuvwvwwxyxzxzxzxyyzy|x}{}}}w~w}w}u|{|y~tztrtstdt[t`ujuewgytzwzuzszpzoynxmxmxoynxkxhwkvivjvlwlxmyszv{x{v{s{s{u}w}w}w}w}w}x|y|y|y{x{{{|~}{xz~{~{~{~yyz{~|}}|~{{{{{{{zzyxwwxx{~~{||~{zzxzxxwxvyuyuxtxtyuxuyvxwuypyoyqywx}r|syuuxrxrztzt{t{uzwzyy{y}z}{||x|t{rzsyvwzv{v{vyuxuwuuvuvvwxyzx{u{u{iz]zdylzrzu{w{x|w|w|v|v{vzvzt{r{p{q{szvzwzwzvzvzuztzrztzuyvxvxvywzw{x|z}{~}~}{zx~w~v}v}u}u|q|s|w|z|y}z}{}z}z}z}z}z}z}z}z}x}v|u{u{u{szryrxrxsxszt{v{wztztyyxwvuvx|y|z|y{yzyzyzzzzz{z|z|{|{}z}y}x}y|{z}x}w~w}y}||}||{{{zyyy{||}~~~~~~~~~~~}|}}|}~~}{~~{~}wqt}vqu}}|{|}~~~~~~~}~~}}y~|~~~|~|}}~~~zvy}{vrtxz|zx~z}zz~ytjdr~~}yyyyzyxxzzyyxxvx{xvsvvwwwwz{vpfeejompsvppx}~~|wpkmuz{yyzzvvwxz}}tlmt{tuvwx~x~y~y~yyxwwvvvuuuuttttttttuvvv~w~x|x|x}x}x~x~xwxxwwwwwwwwwwwvwvvvvvvwwwxyzz{{}||{|z}y~y~y}z|{z{x{yzzy|x|x{x{yzz{y|z{y{zzzzz{z{z|z}y~y}y|y|y|z|z|x|t{nyoxryuzvxvvvvvxvzvzvzuxtvtvtwtzszszsztyrvqspqpoopprqrqrrtrurtqqprotntnununvowpxpxpvnpmqmvnxoyr{t}s~q~r}q{oxnvnunqonpkpjpiplqotwv}wwvvvvvwx~w}u}tzqzqyqypxqwqvrvswrwqwpvnslsjsjvjyk}l}k|j}m~j\\pCYJa]naq^rd{jjjikd{QjA`>^<_;_<_FbRbKX@V<UIYT^\\f^fdkfpcn`j`kblcmcncmdlkts}sq}k{gzhxlzp~qqqrstpnnonn~m~nonlk~j~i}j~mrssssoljjkkjklkie_VQQTX_cfiklmmnnnoopooprrpoonnoqrtuuutttttuvvvwwwyxsje|cydydzf{h{j{m{k|l}llm~m|n|p~qsuvwwxy{}~~~}~{|v{s{q|p{o{n{o|o|p}q~s~tsq~o~n~nrtwxzzxwutssttuuuvvutq~o}n|o|p|p|p|o}o|o|p|p}q}r}s}s}s~s~r~oxidf\\hemqnwpxpwqvrusututuuuuuvvwuvvsvptmpinflgjjiljnhqksstrututttqttwwxvxtvsusutuvtwmxjvmtstvrxrxszuzwzxywxwxvxwxzw{|||}u~v~w~t}z{zuv}vuwtrtrspsdt`ukxuxvyvztzpxmukuitkvjvhvhukujvlwoxszu{z|}}}|y|u|t|u}w}w}w}w}w}w}x}w}w|x|z||||~zzy~z~z~z~xx~y~z}{}||}||||{zzzzywvvwwz|}y{||{zzyzwywxwwxvxuxtxuyvywxxvytzrztyyv{tywvytztzuzvzuztzwz|{~z~z}z}{|{y|w{t{syuxxwzw{wzvyvwvuwtwtvuuxvzw{y{szfzaygzp{vzx{x|w|v|u|u|w{wzuztzt{tzvzwzvzv{v{u{s{q{o{p{szuxtxtxuxuyv{x|y}{~}~}{y~w~w}w}w}v|u|r|r|t|w|x|z|z}y}x}x}x}y}z}z}z}y}w|v|v|v|x{vztytysysytzv{wzsyqyty{xvuu~wzy{z{y{xzxzyyyzz{zz{{{{{|{{|z|y|y|zy{w|v|w|z{}{~{~{~{{{zyyxz{|}}~~~~~~~~~~}{{}}{~~}}|{{||}~}plu}~wrw}}|}~~~~~||~~}|~w~{~~~}~{}|~|~~{vwzyrptxzzwtw}~~|nbhv~~{xwxxyyxx{{zyxvtx|zxwwwxxwwy|wsssqpqlirusqv{}{ysijpv{{zxyyuuuwxzzmbepzttuvvwxxxwwwvvuuuttttsttttttuvvvw~x}x|y|y}y~xxxxxxwwwwvwwwwvvwvvuvvvvwwxyzzz~{}|||{|{z|y}x}y}z{{y{y{zz|y~xx~x}y}y~y~y~z}z|z{zzzzz{z|y|y{yzyyzyzyzxwwrwqwrxuzv{uzuzvyuyuzu{uzuyuyuxuxtxtxtwtvttrqqopmompnqoqpqrrvrwrwpwownwnwnwmwovowowovnsmrlsmuoxr|t~t~t~t}s|qzqxpupspoqmqlqmqqrssyt}uuuvuuuu~v}u}t|szpyowovourtsttsusutstqtosltjvjyjzj}k~kkllfwK_Ma^nbr`uf|ji~j}jki~^rKh=b:`;_?^NfZlRcE\\>YN\\[fhpnsswnxgsbl`iakcmcmcngopvussl}f}gyjzn}nllopr~q~q~q}q~q~q~qrrokhghjnrsttrmlmmmmmllmpqnje`]ZVUX_fjlmnonnnnnnoqqoonnoqu}wwvtssrrrsttuuuuvwwrjd{cycycyfzi{l{p|p|p}p~n~m}m}o~stvwxyyxy~{}}}~~}|~y}w|t{s|q|p|o|o{o|o|o}q~r~t~t~s~r~o~npqtwyyxwutssttuuvvuuso}n|o}p}r~r~q~p}p|p|p|p}q}r}s}t}t~s~r~nxg`g]mmpypzqxqvqurtrtstttututvuvtrnllhlikkpntnyl{mwnqqntquqvrwsvstusxtztzsvsttsusypzhxktuoyq{o|o|p}r}t|t{uyuyvyvyxxz}{z|u}v}w}u|y{z|uvuu~t~t}t{susnumwsyvzx{x{uyqvnuktjuhtgthulukulwqxw{|}~}}}x}v}v}x}x}x}w}w}w}x}w~w}x}y}{}zzyx~x}x}x}w}x}y~{~{}|}}}~}~}|{zzzzywvuvx{z|x~{|~}}{|y|x{wzwyxwxvxuxuxvxwxxwyuztzuxyvzvxxvzuzuyuysxryszv{z||{|{|{|{|{{{z{x{xzxyyx{x{x{wzwxwvxuytytwvvyw{yzyzsygzjzs{yzw{x{x|v|t|t|w{wzsyszsztzwzvztzs{u|u|t|q|k|j|l{nynypxsxuxvzx{y|z}{~~}{~y~w}v}w}x}x|w|v|t|r|r|u|v|y|y|x}v}u}v}w}z}z}y}x}w|v|v|v|x|v{szqyryrysyvyxyvytzszwywvv~wwyxzzyzyyyzyyyzz{z{{{{|{|{|{{{z|z{yyzv{u{w{{z~zz~z}{}{~z~yyy~x~z~{||}~~~~~~~~~~~~}|~{|{~{}}}{zy{}~~~}}zy{ywtofhpsy{{vy}~~}~}~~~z~xz}~|~~~~~zy|}~}{xwxvvxzzyuqsxzz||ockv{{ywwyyzzyz||||zxuyzzz{||{yuuy{z||{zzyrmrpjgkqusrnouy|~}{xttxvvxxysjgkprtttuuvwwwvvvvuutttttssttttttuvvvwx~x~y~y~yyxxxxxwwvvwwxxwwwwvvuuvwwwxx~y~y~z}z|z|{{{z|z|{{|z|y}y}y{zzzyzyy|yyyyyxxxy~y}z{zzzyzyzyzzyyyxzwywyuyuxuwuvwwxwyvzu{u{u{t{t{tztxtvtuuututvtvsussrpqnpnpnqoqopoqprrrvryq{pyoxnxnxnyoyoynxnwmtlrkqkrltowqys|u}u}t|r{qzpxpuqrrqrqrrruqwrzs}t~uuuusqqr~r|rzqxotmrmonpppqprprrtrtsqsnulxk{k~k|kyjzklmmiXkTg]nbtdyf}g~g|h{i~ii~hz_oB`9]9]A^Rh^qZlMc>[O^fnvxy{x{q|jwdn_iajcldmfpmvt{tpojg~i}j{j{j~iijko}r}s|q}p~s~sssqmiffikpstttsmnrrpoooooqrssrnfa\\XW\\begilnoooonnnoonnmmnrv}xxusrrqqrrtssssstuurlgzfyfyfyizl{o{q{u|w|v|s}n}o}q~rtwxyzz~y}y|z||}~~~|~y}w|t{r{r|r}q}p}o|o}o}o}p~q~s~t~u~t~s~p~pqruxxxvutttstuuvuutrp|p}r~tvvus~q}q|q|q|q}r}s|t}t~tsnxjcmku~ut|rxrurtrssststsvtututttmjd_]Y]Ydciiiphvj}mpzssupxoypvrttrwrzrzswsuttwqylxlsto|k|p}p~n~n~oq~q|szvywywzwyy~yzzw{w{x{vzyzy|t~u~ttu~t~t~sszvryszu{w}y}y}wzvyrxmvhuhuivkvjvkwpxrz||}~~~|{z~y}y}x}x}x}w~x~ww~x~y~z~yyy~w}w|w|w}x}y}z~|~|~}~}~}}}}~|{zzzzywvuwx}{z}y~|~}~}~|~{}z|y{yzxyxwxvxvxvxwyyxyxxwxxwzwxxuzszsyrxqwpwqxtzv|v}w}w}x|z{z{z{z{z{{{{z{z|y|x|x|xzxxxyyw{u{wyxxzxz{zyzpzp{s{wzwzwzx{w|u|t|v|vzryryqyryuysypzo{u|w|x}v~m~i}h|hzhzmzszwzx{yzzzz{z||{}y|w|u|v|w|y|y|x|v|t|r|q|r|s|v|w|v}t}s}t}v}y}y}x|w|v|v|v|v|u{t{pzoyqyrxsxuywyxzx{xzxz|yxw~wuyuyxzyzyyzx{x{y{z{z{z|z|z|z{{z{z{yxyvzvzx{{zzz~z}z}z}y~y~y~y}x|y|z|{{|}}~~~}|}~~~~~~~~{wry~}zy}}w{}}|ztrusqnnmml~jrzzy}~~}}}}|}|~|}~}zx~y|~}}~|~~~~|~~zxyz{||{zxutxzyxytnonlighox{{{{|}}|{{yvxusw|}}}ytuwttzzy{|}{xuja^^dijjlry|~{rouzzz|{ynjswm^ttttuvvvvuuuuutsttttttttstttuvvvwwxxxxxxxxxwwwvvwwxwwwwwvvvvwxx~x~y}y|y|y|y{y{zzzzzy{y|z{{{|z}y~y~y~y|yyxzyzyxxxwxxx~y|z{zyzyzzzzzyzxyvyuytyszsztytxvwwwxvzu|u}tzs|szstsqspsrstsvswsursrqqopnpopppopoqpqprrqvqwpwownxozn{o{nynvmulsksjqiqjplqotsyt{o|l{o{q{qzpxrurtsurwrxrxrzs|t}t~sromjjln~n{nymvmslplnolojqlqpssturwoxn{n}m~m~k}j}illkiau[l^obve{g~ff}f|g|f}f~k{hnG]9X8ZE^Ui^o\\mUiG^Q^nt{||~x~r}kyfrblbielfnjtq}sspllnpm}jyl}llk~k~m}r|r|o}ostsp|l}i~gffilqttutrppqqqqqrrqrrsturomjgdbaaaeikmopponmmnmmllmpsttqpqqq}mlypvvsrrrsstsozlwkwkymyqzs{u{vzwzx{v{t|p|r|t}r~swxz~z|z{z{y{x|z}~~|zx~u|r|q|r}s~r~q~p}o~n~n~o~p~rs~u~v~w~v~t~r~pruyyvtsstttuuutssr~r}s~uxzzyvt~r}r|r|r|s|t|t}t~tsoynipywwv}twstrssssstsusutuuuutvqsge]WYR]Z^Z_Xa[ekjyk~owtqwnxnwqutrwqyqyrxrwttvpxkstl|j}i}n}q}o}o}o~q}p{rywyxyxyxyy}yzyyyyyyxxxzxyzuzu{u}u~v}u~ts}s}uvyuzt|u~y{}}z|rzkwivkwjwivjvmxlyw{|~~}~{}z}y}y~x~xwww~x}y}x~x~x}v|u|v}x}y}z}{}}~}~~~}~|}{}{|{{{z|z~zzywvuwy|{{||~|~}~}~|~|~{~{}{|x{wywwxvxuyvzyzyyxywxwwytyqzoyoxownvovrxvzw|u}t}t}u|w{xzx{x{x|y|{{{{|z|y{y}y|y{y}xzyv{wyxyzxz{{|{w{u|t|v{wzvzwzw|v|v|w|wzvyuytysxqxoxjyjzr|w}z~{wq~n}l|h|l|t}z~z}{{|z|z{z{yzwzvyuzuzw{x{y|x|w|u|s|q|p|q|s|t|s|r|q|r|t|w|x|x|w|w|w|x{y{zzxzszqzsztytywyyy{z}{~{}{|{~yx}xtxsyuyxyyxzw{x}z}{}{{{{z|z|z|z{{z{zyyxzx{y{{yyyy~y~y~yy~y}y{xzxyywzv{y|{}|~|~}~}||}~|{{}~~~~}vir}~~|||tx~~zrqy{zuuyvlhox~zwz~~}~}|}z}w}s}t~y~yu~v~{}~~~||~}~|~}~~~~|{|~z~tkq|}|{wtxzzxxyxtk^UOQcv|{{|}~~zwz{xsotz}~}}zwwvngowy{||{xwpe^ZZ]_`hnt|~~vgl~~ut}~q`uuuuuuuuutttttsstuuttttsssttuvvvvwwxxxxxyyxwwvvwwwxwwwwwvvwwwww~x}x|y{yzyzyzyyzyzxzxzw{y{zz{z|y~xxxx~xzyxy|yxxwwwwwx~x|y{y{y{y|y{yzzyzwzw{w{wzxyxyyxywxvyu|t~tysyrwrormrnrqrtswrxrvrsrqpoooqpppooonoopoqpqqpsotovoxpzo|n{nwmtlqkqjsishrhpiomrswtzj{e{m|p{q{pzsxswswryrzryryrzs{s}rndcfhkklmmnn~n~o{oyp{r|sysyszr{q|p}q}i}b}\\}g~l~i}g|f{aw_o`pbwe~ffe~f}g|f|h}q{lmEZ8U:XI`Zj_n\\n_oZg]hsx{~{w~s}nzmuiocjcmhsmzpqrrmorsp~n|n}n~ommm}r|o|kosrpj{f{e|g~f}f}i~lqtttsqpopopqrssssrstutrqpnlhb_^aeimpqqponmlllkkkmopnmmpq|qupnouvsrqqrrstxrsprptpwsytzuzvzwzwywyuzt{s{v{x{w{w{x|y|y|y|y|x|w|t}w~~~{ywt}r|r|r}s~s~r~q~p~o~n~n~oqrt~v~x~{~{~u~rpsxxvtssttuuutsrqr~u~vwy||{yv~t}r|r|r|r|s|s}t}tsq{oup}uwv{uvtssstststsususutuuvvvwntfpak`b_]^W^TaZdddjhjqpxowouqrunxoyqyqwrwsstrtpowi|i{j|l|r|q|q|r|r|rzuxzx|xzxyy{{z{x{y{y{wzu{uzuwuwwvyv{w|vu~t}t~uyxwyt}uy{}~z|oyjxlxlxjwjvkxixqx|}~~~}~|~{~z~y~xxw~w}w|w|w{w{v{u|v}w~z~{~|}}}}}}}}}|}{}y|w|w{w{yz|{zzxvuwyy{w|x|x}y}y~z~z~|~{}{}w{wzwywwyt{u|y{zxxwwtwpynynymxmwnvovqwsyu{v|u}t}s}t|vzxyxzw|x}y}y}x|x{xzxy{z|z}z~y|y{z{xyxzw{y|z|y}w}v}v|uzuywzy{w{x|x{xzwywyvxsxqvmwixiyo|u~y||xs~p}j~k~ry{||}y}x|yzxyvxuxuyuywzx{x{x{x{v{u|r|p|p|q|r|q{p{p{q{s{u|w|w|x|y}z||{}{~z~z{{z|y|y|z{zz|{~{|||z|zz~y|ytxrxsyvyxxzw|x{|||||{|z|z{zy{y{zzzy{z{{y|w~wwxxyy~y~y}y{xzxyxxywzx{y|y}y}z}y~y~z~|~|zz{{}~|zz~~~}{y{}~~{}~|xy{x~{laep|{v~v~z}}}~~~}}{}t}m}o}w}u~q~w}~~~}~~~~~~~~xv~v}w}s~al{}|}}{vtwxyyz{{yq]LCC\\u{zz{}~yvzzyqmv|~~~}{{zzqacu{||{yyzxm`XPMPQbxz||||xsw|z~~xqvvvvuvuutsttttttuuutssttsstuuvvvwwwxxxxyxxxwwvvwxxwxwwvvwwvvvvwx~x}x}x{y{z{y{yyzxzvzv{v{wzxyzz}yxwwwy|yzx}xwwwvvvww~x}x}y}y}y}y}y{zy{x{yzzz{y{x{x{wyvzu|t~syrwrtqmqkrmrprurzr{ryquqrppppsqppnpnonnonpnqnpporouoxozo{nzmvlqkpkojpjrhrhrhokqquuxmyezk{r{s{rzsxswsxsysyrysysyszq|o~njjk|kvlxlynzpzp{m|hdhoruu~t}t}t}s}p}m{Y{O{Y{e|dycwav`v_u_q`qbwe~ec~b}e|g}h}m}xzuoO];V=XNc]l_o]qgrmrlswzz~ywt}p{nviqblalhvnoorrno}p}p}n}n~l|l}llln~q|o~nqomkg{e{gzhzfyfyh{k~psssqommnnnoprsrrrrtutqpopqomiedehlpssqponmmllkkklmlllno}rysqqsrqqpppqrysopnosnvmxozp|q{rysxswtxtytztzwzxzwywzxzx{w|v}v}u}u}q}s~~}~zxvt~r}r}r}s~r~r~r~qp~o~o~o~op~r~t~t~x~x~r~ompwwusrsvuutttsssu~xxxz}~}zv~t}r|q{q{q{r{r{s|ut~r{p|r|u~v|vyuutstrtrtsututvsustuuvuxpmmlylvhpekdada_^b^jlwpzprqqvoyozpzqxswrtpvowlylylxmyozsytzuyvyvzvywwzv|v|y{z~|~||}|}}}{|x}x|wzwzxxyx{y{x|w{v|u~t{wyxu|uyz}u|nznzoylxkwkxkyrxv{}~~~~~|~z~z~z~yxx~w}v}v|u{v{w{w{v}x~z|}~}}||||{}{}z}w|v|s{s{t{v{z|~{}z}yvuv{xrzpzqzq{s|s|t}u}v}v|v|v{vzvzvyzw|v~y|{uxqvqwmxmxlxlwmwnvpvrwtyuzu{u|u}t}u}w{zyzzy|y~z~y~w|u{tzuzwzz{|{|{|{|z}y{w{w|w|w~y~y~x~w|v{tztyw{w{w{x{xzxyxyvytxqvmviwhxn|sw|{zws~n~jnvz~|{|x|w|w{vzvyvyvyvywzxzxzy{y{x{w|t|q|p|p|p|p{ozp{p{q{s{v{w{y|{}}|{{zz{|}}~}~|||}|}|v|w{zzxytyryrytzvyyy{y|}}~|}{}z|z{{y}y|z{{{{{y|v|v}v~wwxxx~x~x}x~y~y|z{zzzy{x|x|w}w}v~w~y{~~|yyyyyz{|{z|~||}~~~~~}}}~~~yw{}|v|~~q]]o~~x~t}v}x|z}{~{~}~|~u}s}w}z}s~r~{~~~|~~~|~{~zov|ytx{yvvwxxxy{}|wjR=Gevyyyz|~~{xyyzuux~}~~}|{{{|{ndlw}}{{{{ypcTFAHOc}~{yz{~~~xtxzyxwwwvvvuttssssssstuutssttsttuuvvvvvwwwxxyxxxwwwwxxxxxwvvvvvvuuvvwx~x~x}y}z}y|y{yzyyyxywzxzyy|y}y~yyxwxx~xwwvvvvuvv~w~x}x~x}x}x}x|y{zzzzz{y|x}w}w|wzvyu{t~s~r{rvqqqnrnrqrvrzq|r{rwqsqrrrurormpmomnnmpmqlqmpoosovoynznymvmrlplpkqjririqipkqottwqyj{k|m{qztyswswsxsysxtxtyszq|no~o{mylwlslokqlsnsqsstrvo|lors~vvuv~t~s}r|fzIyMz^zaz\\uZrYrZs[s]r^s_xe}c~b}a|d}g}k}p}zyrbeBX@YUh^o_patowv{tzx|x~xwt~q|lwgqdmclgvl}m|k|p{q|m|lzjzjzj{k|j|j}klloq}rtrlhgf}i|k{kygwgxizl}oqrrpmlkkkklnpqqqqrssrpppppppoligilptutronnnmmmllklmmlllp}qrqpoooooopuqsqwnxl{izhyiwkwnvptqsqtswtytzszrzrzpzs{w{u|u}u~utr}q}q}|~{~xvts~r~r}r}r}r~r~s~rqq~p~o~n~o~p~q~s~r~n~l~klovvtrqrvut~t~tttuuwyxwy|}|yt}r{q{pzpzpzpzq{r|uu~r{p{r{t|uxuvtttststrtsututvsutswrzqoquuvqm}mvhr\\gZbfksqyqtprtvxv{r}s{sxqumyl{m{oxqurvsvuuvvwwxwxxxwxvxvywzzy|y{z{}~y|z|y|yz~}|{|yz}z{zyvxuvzv{wzxvzv~y{|~{u}u|szoylxlymztx{v|{}}|}{}{}}}{}z}x}z}y~x~x~w~v}u|v|v{w|w|x|w~z|||~{}z|y{y{w|u|s|r{p{qzr{s|v|y}y{zzwuvtwlylynynzo{o{o{n{n{o{o{szszszuzzz}xx}zqxmwowowowmwmwnvovqvrvtwtxuzu{u|u|w}x{zyzyy{y|z|{|x{vztzu{u{x|z|x|x|y{zz|x|x|x|x}z~zy~y}x{uzryq{uzwzw{wzxzxzwzuxrwnviwixl|psxz{zxr~k~ksy{{y|x|w{x|w{xzyzyzzzz{{{{{{|{|{|y{w{s{q|q{p|o{ozozozpzrzu{w{y|||||{{{{|}}}}|}}}z|t|v{xzwzuztzszszuzwzy{}}~}|~{}{||z}x~x~y}z|z|w|t|t}v}w~vwww~x~x~y~z~{}|{|y{y{y|z|y}y}w~wy{}~~|yxvuwzzxxy{~|{{{|}~~~~{wuw{~~|su~|vr}~~}j^nz~{~w}u}u}u}u~x||x~z~~~~tv~}}~{w{}{z~}{vxyyxxyyyyz|~~{xbEWswyzzz{|~}{zy{{zz}~}|{{{{{}xgbpz}}}}{ytlXCBNcoyzzyxz|~{{~~{uosxz{vvvuuuttstttttsttuuutttttttuuvvwvwwwwxxxxxwwvwwwxxxxxvuvwvvutuvwwwwwxx~x}x}y|y{y{y{y{x}x}y~y~yyyyxxwwvvvuvvuvw~ww~x}x}x|y|y|z{zzx{w}v~v}v{uztzt}s~s{swrursrsrsqwq{q|q|ryruqtrtvsnrmqmonnomplqkrkqmpqouoxnxmxmvmsmrnrmrkrjqjqjqlqntsxszp}m}k{nyrxrvswsysztytxtysyq|o~q|qypwntlrkpjqksmsptswtzw~yv}spkmqw~r~s}v|fzGzY{ezbzYsTqSpVrYt\\t]u]x`|a}`|c|f}h}j}m|vzukmD[F[Yj^pcrovs{o{r{u|y}y~yt~o|kxgshrfretetesaqgtkvhwhxfwfxhyizl|n~pqqqrssojgfgl~o}n{kyjykzn|p~qqqpmlkihhikmnoppqqqpppppopqqqpkinrrwwtpoonnmnmmmnnnnnmo~qrrqonlmlmzowp}ppmixhrhokonqsstuuwvywzwzv{u{t{s{t|u|q}v}x~xuq}p|q|{}~~y|wusrr~r~r}r}r~s~s~sr~r~p~o~n~n~o~q~s~qllkopssqpoprs~st~uvuvvvvvvxzzxt~p{ozoynynyozp{r|s}vt~r{p{qysxtutttstststsusutuuuttvr{okmsxwwsstnXqUlinkrrsyqrp|v}}vw~wyqwnzn{pysuurustsutxwyxzxzxzxxwvwuxvzv|u{xy}zwxxzvzxz}|||x{x{{|||u{pyty{x|xzyz{z~{{}}}~y|tzpymzpzuzyyz{y|y|y{y|y|y}z}y}z}y}x~w}w}v|v|w|w|x}x}y~y{|{z~x|w{v{szq{q{p{pzpzpzr|t}v}ww}x|~xwwtxlzmzoznznznznzmzmznzmzozpzq{s{yz}y~w|xqwmwmwowovmvmvnvouqtsususvtxtzt{uzv{vywwxwwwxwxxyxxxwyv{v|u|w}x}t}t}u|v|zy{y{yzy{{|{}{~z}x|wzsypztzvzvzwzw{w{x{wzuyqwlxixi|omovz{{~w}p|l}r|xz{y|y}y|{}{|||}{}{~{~|}|}}~}||z|w|r{q{p|p{pzpzpzqzrzt{v{y|||||{{{{|||}}}~~}}y}u|t{u{v{uztzszt{t{uzu|y}}}|{~{|}y~wuv~x}x|v|t}u}w~xxxwww~x}y}{|}y~vu~w~x~{~|~{~ywy{}~~}zxsqw}}{zyz||}}||}~~|}}}yqnqx~vemzyyw~}~~wmrvu~y~x}u}u}t}s~x|}|~~yz}|}}yxz{~|y{~{uy{}||||{zzzzz|}~zwm[fux{|{{{|~~|{{{|||}}||{{||||{oisz}~~~}{yveQQ^ssljspqy{xvw|}yuw|}}uutttttttttttttuuvvuutssttuvvvwwvvwwwwwwwwwvuvvww~xxxwvvvvwvvuuvvvvvwwwwxx~y~y~x~x}x~w~y~y~z}z}z~{~zxwvvvvuuuuuvv~ww~w~w}x}y|y{ywyvwzv|u}u}u}t|t{tztxtwsxryryqxqxpzp|q}q{rxqururuotnsmpnmojpirirlrorrptounvmwmvmtnrosnrlqkqjqkpmqotrxu|v~u~o|myrwrvswrysztzsysxsyqzp|rzsxqvpumtksjsjtlupvsyt{w|yzwyt{k\\]ht~q~t}t|dzU{i{m|gzZsQpSqYt]t^u]v]y_|`|`{d{g~h}h}j}s|xoqG\\K_]mdsovtxoylzozpzx|z|u~p}o{nxkvlxjwcqaneqcqdreqeufwgwizj{l|o}q~s~ssrqrpmigfhmp~p}o|o|o|q}q}q~qqpomlkiiijjklnoopooppqqppqrtsoknssyzxtqonnmlmloppppop{qrqrqpmkjjjiimqnjujlkjonstwxyzxzx{yzz{z{y{y{{{u|q}q|w|}}y~ro}p|t|z|||y|vtrrrrr~r~rss~s~r~r}q}p}o}n}m}i~q~rnomnoponnnnorsstvvutrtuwwsq~o|m{mzmymxmxnyozp{s}u~vtr|q|rztvtssstststsususttrtqspqnxkhkrxwwtuwo~WoSl`p[tqwzsuqtru|y{~|xrwnyqxtuwqwptrrtrxw{|z|z|z|zzywyuzu{vzvzyvs{tzuwwyz{{~y|yyywzs{u~z}w}u{w{|z~y~y~z|{{}{{}~z|u{q{s{v{x{x|w|w|w|w|w}y}y}z}{}y}x}w}w|w|w{x}x}y~y~zzz{zx}v|t|r{r{qzpzqzqyqzq{t|u}w~v~u}x||zxyvyp{p{p{ozozozo{nznznznznzo{o{r{tzwxxwxwwxsxpxoxnvmwmwovpvruststsutvtwtwuwuwuuutusususutvtvvwyw{v|v}v}v}u}u}t}u}w{y{yzxzx{y|{}||}y}x{uzrzszuzwzw{w{x|x}y|xzsynxkyj{n~toty~{~|~{~w~t}s|w{{{|{}{~}~}}}}~}~~~~~}~|}|{|u|r|q{q{qzrzrzrzrzszu{y{}|||{{{{{{{|}}}~}}z}v|t{t{u{t{t{u{u{u{t{t{v|{||{}{wvtuw~w~w~v~w~z{yyxww~y}y|{{~xtqpswyzxxy{}~~|zxspu{~|{zz||}}}}}}||}||zokpx~~}pYcv{z|yy~{yvyw~z~z~w}v}v~vz~}}~}|}~wppuy~|z{|}~~|wy~}|{{{{|~~~}~wvtlovy{||||}~}{{|||{|||||||{{|{wrw|~~~~|zzzumlsvxrpm^fy{{{y{~~zwz~}sssrrsstuuuuuuuuuvvuutttttuvvvwvvvvvvwwwvvvuuvww~x}x~x~xwwwwvwwvvvvvuuuvwvvwxxyxxwwxy~z|{{|{|{z|y}x}vv~v~v~vvvvuuu~uv~w~w}x}x{yxzuysxwvyu|t~u~u~u{twuvuwt{r|r}q{pzp{p|p}q|rzrxswqwqvpuoronplqnsrsvsxrwquotntmskslsnrqrprmqkpkpmqoqqtsyv~yyt|qyqwrwsxszt{tztztysxrwqxrytxtxsxpvmtjuiwlxoxsxtwttusvrvrsvj|`[lsvn~a}c}i}e`}SrNoTr]vaubv_w^{_{`{^xb{f~g{g}i~r|}yqtK^Rdarqvtyoxkxmynynyv{u|o}m|o{ryryozkwdodolwnxpyjvgxhyiyl|m}p~qr~r}q}q~qqrpliihim~p~q~r~r}r}s}r}q~p~oppqppn~mljhiiklmnnopprrrqqsvxwomqv{~|vqonnmlkkquust{twsyqrr~r~qzozljijjjkosomqnjqouuyy{{||z|z|{{{{|z|z{z|{r{p|v|z{z{t|o}p|s|x{{{{{y{w|t|s~rrrrrrss~s~r}r|r|q|p|o}m}g~mqpnllmmmlllmnprrssssttsrq}q}o}m{lzlzlzmzmymymynzo|svwut}t|sztvtssstststsusttrunnibf\\efdpdiednqxxxuvyt}YpQmTmer~ywwsrsotzz~{{wrvowsvvswqvrrunxo|x~~|~|}|||z{x{x|x{wxyw}rop}qzs|u~utt}u{wrzo}r~z}}|}|{zz{}||}z~z|~|z|u|v|w|w|w|v}v}v}x}x~y}z}{}{}z}x}x|x|x|x|y}y}z~zzzzyy}x|w|v|v|u|v{uzvzx{z{z~x~x~w}u}u|w|{|{{{{v}u}t|t|r|r|q}q|q|q{p{o{n{n{o{pzsywx{xz}yvxqxnvmwmwpvqusttstsssststtttttstrtrsqsqspsptqusvwwzw|w}v}v}w}v}u}u}u}w}y|y{x{x|y|z{}z}y|w{t{t{v{x{x{x|y~z{~z}w{qymyk{n}|wwy{|||zw~x}z}|}}|}~}||~}|}|}}~~~~}}z|z|{|w|t|t|t{s{t{t{tzsztzt{x{{|~|||{{zzzz{||}}}|}x|t|t|u|u|u|u{v{v{tzs{u{w{{{|z|z|~zuvtuvvxyz}|{zyxxy~z}{|}xrkhjnquvxz|~~}|zxwuv{}~}{{|}~~~}|z{|}|pisy{~~||q`q}~wpqz}|}~~~~|}}~}~{}~~~~~}{z|}}qilsw}~}{{|~}|~~~~~~~|zz{|~~~{~r~suwwx{||||}~~}|||{{zz{}~~~{zz{|{}}{wx{}~}xwzxysbeu{~~~}{{~~rrrqrrstuuuuuuuuuvvuuttttttuvvvvuuuuvvvvuuuuuvww}x}x}x~wwwwwvwwvwwvuuuuuvvvwxxyxx~w~v~w~y}{{{z|y|y{zz|x~wu~u~vv~v~v~v~v~vuuv~w}w}w}x}x{xwxvwwvyv|v}v~v~u|uyvvvwuzs|r~q}q|p|p}p}q}r{r{szsxrxqvptpqqoqsswt}srxqsoplojnjnkonrrspqmnknlpnuqurvt{wyyv|rxqwrxszs{t{tztytxsyrxqxsztztytxrultivhwkxowrusrsqssuuvvuvqvj}_kqrnf~i|e~YS~HoLnXsbxgvfv_x]{\\{_y\\vb{f|fyg{i|p{zyrwVd\\klvqxoxkylynykynzr{q{l|n{qztzt{p{kwhrlur|r|qzdtbvj|m}n}p~sts~p}m|m|o~qtqnkkkl~o}q|r}r}s}t}t}r}q~o~mmostvu~tqmihgijllmnpqssrqqsvvusnmp~uxwrnnnnnlklsxz~y|zvxuu}p~owqwryrxoul}jhhjnrsrmxmmrnwvzz{|}|}|{|{||{|z|z|zzzv{pzu||{yzozlzq{w{x{{z|z|z{{x|v|s}r~rrrrrrs~s~r}s|s|r|q|p}n~k~kmonlkklkkkkkmnnnnnnrvvq~m|l{l{oznznzmzmzlzlylylymzn|rwwv~t}s{sysvsstrtsutututtvoqha`L]Q^^`Y`M^Ohkwxxvuyzjv\\r]nkroxuyruspuxy~}yvuququstuqvrutpxm|o~x~~}}|~{~x}w}z}z{yx{tomnn{p~qqppr~svwq{q}{}|{||||~}|}z~z~{}~~~}}}}|y}w}v}v}w}w}x}x~y~y~z}{}{}{}y}x}x|x|x|y{y}z}z~z~z~zy~x}x{x{y|z}{}{}z{x{z{}}}}wztzrzr{u|v}y}{||||}{~|{~{}y~w~v~v~u}u|s{q{p|o|n|o{qzwy~yzy{xtxowmwnwqustususuststssrsrsrsqspsprqrpsnsnsosqtuwyx{x|w}w}x}w}v}v}u~v~x}x|xzx{w{y{|y|y{x{v{v{w{y{y|y}z|||~x}s{pznzl|z~|z{{{{{{zz~z}z{{z{z|z|zzy{x{w{y}~}}|}||z|x{u{s{t|w}w}w|v}v}v|v{u{u{u|v|w|x|x|z{{zyyyyz{|}}}|}y}u|u|w|x|w|v{u{uzuzt{t{u{vzuwrtwzy~vvuuwwwyy{{zyyyxy~z}{}}zsjfeeinrwz}~~}|{zzzz|}~|||}}{yz}~~wnwxw{}{|xt~~zwy}~~zy{}~~~~~}}~~}|yxxz|ylhnvy}~~}{||~}~~}|zyz|}}zr~uy|{{||{{||~~}|{{{{yy{~~zxyz{|~}|{{zwx|~|ys~ruwxxttqpy|}~~~}}|xy~~}qqqqrrstuutuuuuutuuuutttttttuuuuutttuuuuttuuuvww~w}x}x~wwwvvvvvvvvvuvvuuvvvwxyzxw~v|v|w}x|z|z{{y|x|zz|y}w~vuuu~v}v}w}v}v~vvv~v~w}x}xww~w|v|u|v}v|v|u}u}u|vxvvvwt{s~rqq~p~p~p}q|rzrzrxrxrwqvptprqqsttzs}rvqpolljjijhkknoqrpomllmlnotqwsxu{x~yw}t{qxpxqyszs{s{tztysysyryrzs{t|t{tzrxkvgwhxmyqxrwsustsvuzv{uzrxoyo{p}ggonm|f|YP|KmRo^ufymxnx`x\\yVv\\v]uaydxewfwgyoywxvyajdokxkyjylznznznzozozo{o{pzqzrzr{ozmymvoyq}r}q|ar]uj|m~nq~s~s~q}n|j{j{l|p~ss~pooo~o}q|r{s|s|t}t}s~r~p~olmmpqoq~trokhhiijklmoqrrrqpqrq~p~o~l~j~lnopnmmnnnllmswy~{}{{w|r|mvnpqxr{svplkshffjqwtplmonuwzzz|y}z|z|{|{{{{|zzzxzuzrztzx{|{uzaygyvy|y}z}z}z}z|{z{w|t}r~rrrrrrr~r}s|s|s|s|r|q}o~o~kkmmlkkkkkkkkkjjjjjmsvsn|n{ozoznznymzlzl{k{lzlymzm{n|svvu}s|q{qxsutststtuuuutxsuidaS[JZ^]i_U^L[Qfkwwxvuxyv}nv^oXppwqzpyttvwx{zwtvqvrtrstrtusxqzo}r~y~~}~}|~{~x~x}z|zzzx|rmmo~o{p~oonnpq{tuyu|y|~{~z~||}}~}}}{}{~|~|}~}~}~|~}~}}}y}w}v|w|x}z}{}|}{~{~|}|}{}z}x}x}x|x|y{y{y}y}z~z~z}y}w|v|v{x{{}}~~~|}{}}}zyzsxnwnwpyszx|y~yz~y~z~{~~~~}~|~{~{~z~z}y|w|t|q|p|p|o{rzzyzy|wvxqxnwowstusvsusustststrsqsqspsororprpsnsmsnrosswwzzy{y|x|x|w|v|v}v~v~v}w|w{xyxzxz{z{y{x{w|x|y|z|z~z{}}|zv~t|u{l{v}}~zzzzyxxzzz{yxwwwuzu{uytvsvswuywzxzvyvyuyu{s|r|t|x|x}y}x~x~w~w}v|v|v|u|u|t{r{szvzzyxxyyyz{||~}z~x~w}w}z}{|y{t{szszuzv{u|u|tzqvmptwx~wvuvxwwxxyyyyxxxyz~|~}~yqkecehmt{}~~~}|||||}~~}}}~{y{{xxuw{~}{{}~}~~~~~uty|~~~}zyz|~~}zwvvy|~~vmpw{|{y|}}}~~}}}~~~}|{zyxy{|}{tx{|||||{{{|}~{z{{{yxz~{vxyy}~zwvtvvxvvvvur~q~rtux~ylrvy||zxxywxzzzzqqpqrrsstttttutttuuuuutttttttuuuttttttttttuuuvwv~w}x}w~wwvvuuuuvvvvvvvuuuvvwxyyxw~v~u}w~w}y}y{{y{y{zz|y}x~wwvvvw}x|w{w|wwwv~w{x{x|x}w}v~u~v}u~u|u}u}u~vv|vvwtvyt}srqpp~p}q{qzrysxswsvqvpupspqrqstsurtqnohmfkekekhmkqnommkmkmkoorrtwu{x~x~u|qzoxpyqzs{s{sztztztzsyrzr{s|t|t{s{rzkwfxgypzszsysysxsyt{u|t{ryrwqxqzj~_ipo{jx\\TzUp]rdwi{ozqx`xXxNsXu^u`vbucsetcukvwxz|jsiviygzjyn{o{m{lznzn{nzozoznznynymyiwjwlxnzo|p}ixfxj|k}m}r|u|o{lzl{kzkzj{m{p{r|s~r~r}q}r|r{r{s|s}s~r~q~o~nnnnknmklq~qoljjjjijkmnoqrqpn~n~n}m|l|k|j}i~ijj~k~k~l~m~mnnnnosuuzosp~w~qzm~nopkrytxqtlxcbgossqooonrvr{t|s}u}y|x{v{v{w{wztzqzmyqyyzv{wzjy]xfxvw{w{x|y|y}z}zz{x|t}s~r~rrrrrr~r}r|s|s|s|s|r}o~o~kjmllkkkkkkkjihhhhikp~q}m|o{r{s{r{ozmzlzlzkzkzl{mznzn{o|s~uu}t}q|pzpxrutttsuuuvuxtzpkdR^KXUZi^i`P^I\\QglwwwvvwyzqyUo_powmzowsu{vwvsswqwssstuttwszs|t~w}z}}|}}{}z}y}y|z{{y{w}rnno}p{p~oonnopryvv{w{z{z{||}|~}}~}}}}}}~}~|~|~|}|}|}{}z}x}w|w|y|{|}|~|~}}}}~|}|}{}y}x}x}x|x|y{y{y}y}y}y}y|w|v{t}v|z|}}~~~|~}}}yyrwmvlwnwszx||~|{y~x~y~z~}~~~~~~}~}~|~|~|~|}|}y}u}s}q|n{nzty}yy|wwxuxqxpwutvsvtutututtttstrsrsqsoroqorormrmrmqnspyv{yz{z{y|y{w{v{w|w}w~v~v}v{xyyyyzzyzy{y|y|z}{}{~{~|}~~}zxy~|}u|u}xyyzyxwvwyz{xwtutsvrxrxrtrrrssusvsvsvrurwrzr{r{t{v{w|x|w}w}v}v|u{u{v{w|x{v{szsztyvxxx{xxyyyz{|x}r~tu~u}x{x{tzpzqyqytzu{u|u|tzrxqutxv}vvvuttvxwxwxxyxxzz|}}{vmgdeipw|~~~~~~~~~~~~~{y|~||yyy|}|z}~~~}~~~yx{~~~~~~|wvz}~~}zxwwy|~}vsy~zw|~}~w{~~~||{zxwwxy{||yz{{|}}}|{{{|~}zxyzzxx{|yrswxwxzwxxwuutrponortsrsv{}|yy}zwwtruyxvvxyppqqrrrrsssttttttuuuuuuuuttstuuutsstttttstuuuvvvw~w~wvvvutuuuvvvvvuuuuuuvwwxyxxvvvwx~y}z{z{z{y|y}y}x~xxwww~wzwxxwxzx|wwwx}y|x{x{w}w~w~u}s}s|t|u~vvv{vtvtuys}r~q~p~o}o|p{qyrxswsvruqupuqsqrrssutwruqooilfkdjeifkinknkmjniniokqnsrtxw|w}t{qyoypzr{r{szszs{s{szsyryqyszs{s{szq{kygyjzp{r|r|r{ryryszt{tyrwrvqvqwpzd~foo{kwb~\\y`tfvixl|o{rzbzUzOuXv]v^t_r_p`p]qetxxvzhvfwhxgxlyn{m{k{kzmzpzpznzlzkzkzlzlzhygwixlyo}rrp|l|j}k|mynxhwgwkylzlziyixlyozt|t|t|s|s|s|r|s}s~qpnlmmrronnmjm~p~o~mlkkkkjklnnpponl}k|k|k{j{i{i|h}h~h~h}i|j|k|k}l}m~noqssocsZoeyuvp}mnpmt~v~sxm{b`hrusq|qosvu}o}o~r~uz~u|pzpzp{qzozkzjzqzyzqzrzay`xiwrxvxwyxyzy|y|y{zx{u|s}r~r~rrss~r~r}r|s|s|s|t}s~o~nlklkkkklllkkjihggfff}g{gzgzlzq{t|s{n{mzl{l{kzlzmzmznzo{p|s}t~s}r|p{pzowqututuuvvxuzsxl_`J\\JW^[i`]`I_H_Yjvwxwwwvyzt}\\q`ojvlzntrtxssttrxrxtsvvxwwyw|u~x~z~{}||||{|{|{|z{zz{y|v}rooo}p{p~onnnnoq|swyu{v|u|w|{}}}~}~}}}}}}~}}||~|~z}y}w}w}x|z|||~||||~}}}|}{}z}y}x|x|x|x{y{y{y|y}y}y|x|v{u|u~w}{}~}~~~~}~}||qxlvkvowsxz{}}~{y~x~x~z}}}~}}~}}}}~|~|~|~}~}}|~y~v~t}q|o{ozxy|x{wxxwxsxqwtuutuuuututututuststssrproqnrnrmrlrlqmtpzv{zy{z{z{yzvzvzw{v|v}v}u}v|xzyxzyzyzy{z|{}{~|~}}}}~~}{zz|xttx~z{{zwuuw{|zyvvttrssrvrusrsrssstststrtrvryqzqzsyuyuyuzu|u|u{u{tztzt{w{{{yzsyvyxxwxvwuxvxzyyyz{|{}s~r~s}r|qzqzqyqyqyqysytzt{u{uzsyryszt|t~tur|mznzt}wwxwwxxxy{{~}~~}}~|umfcdjqx~~~~~|{}~}~{z{}~~}{|~~~~~~{yw{~}{{|~}yx{}}}||{{{|~|ww~{x}~ywzt{}}}|||{yxwxz{||||{{z{||}|{{{|}}{xxxzyxx|xtsnrwwtssortwwxwstupmpwyzz{{{|}~{yz{ypsuwzwsty{ppqqrrrsrrsssstuuuvvvuuuuutstuuutsssttttstuuuvvvvvvvuutttuvvvwwvvuutuuuvwxxxwwvuvwx}y}y}x}x~x~x}y|y}y}y~xxw}w{wyxwwxw{x~xy~z|zyzxyyw|v}s}q|q|rzt{u}vv~uxustvsyr{q{p|o|o{pzpxqurururtqsqrrrrrsvtzu|tzstpnmjlhjghghhjjljljmiminjolpprvv|x|w{szqzq{q{r{r{r{r|r{rzryqxpxqxpxqxpxnxjukwnxoxnzo{p{pxpwqwrxrvququqvrwrxm|hmp}myh{dygwkymzn|o|q{e{V{TzXzYv[r]o[mYlXncrsvlwdufuhwgxkzmzlzkykynyryqynzkzjzj{k{m|k}k{m{p|uvurm}j|gydvbt_satjwmxlxgwgviwlys{t|t|s{s|r}q~r~qpnkj~j~krtqnlkj~l~o~n~lklmmlkjlnnoonm~k}j|i|j{j|i{i|i}i}i}i}j|j|k|l}m~n~oprt}sms^qVqcyv{s}onprwywqdairut~sstzv}tn~q}usvs}o{lzl{mzlzk{l{p{w{ozly\\ycxlxpyrysztzwy{x|y|zzzv|s|r}r~s~s~s~s~s}s|r{s{s|t}u~spmkkkkkklmlkkkjihggfe~c|azbyezjzn|o|o{m{l{l{m{lzmznzozpzr{s{t|t|r|q{pzpzpxqvsvtxuzvztzpqhU_I\\OXb]baR`E`Jbjmvwxxwuxzwfu^qfvozpvs}uwtxt}r}swuuyx{yz{z|w~zz~{}{||{|{|{{{{z{z{y|w}s~ooo}p|p~onmmnno~qwxszs}r}t}w}{}|}}}|}|}}~}}|||~y}w}v}w}y|||~{{{||}||}{}z}y|x|x|x{x{x{y{y{y|y|x|x{w{v{u|v~y}{}}~~~}}|uzlvkwnwuxyz}~{yx~y~z}|}~}~}~}}}|}|~|~|~|~~~~~{~yxx}v|p{uyxxxwwxvxtyrxswtvtvtwswtwtwsvsvsustrrroqnrmrlslrlrmtqywz{y{z{z{yzvyuzv{v|v|v}u}v|xzzx{wzxzy{{|}}}~~~~~~~}|zxvvv~y}z}{~{ywutuzz}xzwwutrssstttttuuuvuvtuswsyszqyqzqzryrxs{s|s}s{szrzrzrzuz{z|zqy{yx|xxwuwsxqxtx{x}yz{|~}w~r}p|pzpyryryqxqyrzszt{t{u{szqypzo{p|q}s|qylvmxt}vwxwxxyyy{~|~~}{|~~{ukebejs|}}~~~~}}~~|{~}}~~~}|~~yvuty|}}}~}||}|{{|}~}zvy~|{~~yt}z|~~}}}}~~~|{yz{}~~}}}}|{z{{}|{{{{{zxwwxyxyy~~tnqsvxwuurnklrw{{zyxsnpw{~}{xxyz|}yvxyrv}{zvstz}oppqqrrsrrrsssttttuuuuttttsstttttsssssssttuuuvwwvwwvuutstuvvv}w|w}w}w}v}u~uuuuvvwwxwvvuvwwwxwwww}xzyyyyyzy{x|x|xww{wxxwxxyzzzzy{w{v{uzxw{s|r|q{rztzt{t|u~t|txtysxsxryqyqzpzpypwqtrururursrqsqsttyu~vvu{svqrnnijfgfhijjililhlimjnloopvv|y|y{vzrzq{q|q}q|q|q|p{qzpypxounsmplojphpgoktoulshqjrlrmrmqnqororospupurwswpzm}np}ozl{iykwmxnyo{o|p|j|Z}VV~TxWrZoWlSjWmctkuduevjzgxgxizjzjykylypxrxrwnxkykzl{m{n|o}q}s}t|w~wusn}jzex\\rWo\\qbtivkwjwdtdtgvjxp{s|s|q|o}opronkj~h|h|j}o~olkj~j~j~j~j~j~i~i~jmnmmklnnoonl~k|j|j|k}k}k}k}k}k}k~k~l~l~l~m~noprrt|r~ooktbrhxxvsvryy{yuifksvtvt|vxtn~u}smrup~n{m{m{l{k{n{o|s|o{gzYydxlxoypzpzq{tyzw}x}z{xwzt|s}r}s~s~s~s~s}s}s|t{s|t~utpmkjkkklmnmkkkjihhhhh~f}b{czgzkzm|k|h{j{k{l{mzmzozqzrztzvzvzu{t{r{qzpzqyqyqxsyszu|u|symjeM_J\\UZ^^VaLaFbMfxouwwwwuwyynzcrjttwqzuw}vuuuwwwxzz{z|z|y~zz~{}{}|||{|{{z{z{z{y{x|t}poo~p}poommmmn}qwwr{q~r~t~v}x}y}z}{}|}}}}|{{x}v}w~y|z||{~{{{|~|~}|}{|z|y|y|y|y{y{y|z{z{y{y|x{x{wzwzv{w}y|z}|}}}}}||z{uzpyoxqywz||~}~{yxx~y}{}}}~}|~||||}}}}}}}~~~}{z{~z}v|wzvyvxvxuxsyqyqyrxrxrxrxsxsxswswsvrvrtrpqnqmrlslslsmtqwxx{x{y{y{xzuztzv{w|w|w}v}v}w{zx{xzxyzz||}}~~~~~}}|zwx{~}}z}{~{{ywvutuvww|wxvwvwvwvxwxxxyyyxyw{u{szr{p{p{p{q|qqrq|q{q{q{p{s{y{{qzzyx|xwwtxryrysyryuz}{{}}u}q{oxoxrzryrxqyqyrzsztztzszqzpzozo{q{s{szrzs|t}v~wwwyz{yz|}~~|~{}{shbackwz|}~~}}}~|~~~~~~}~y~{~~~~~~xrty{~~}}~~}{zz{}~|ywz~~}|}~{z~}tvy{||}~|{|}~~~|zy{~~|||{zyxxxyxxyy}~ukpx{|{xtoh`blwxzyvusqrwyzzwuuxxx{}yvvz|~|{wtuz|ooppqqrsrrrsstutttuuttttttttsttssssrrssttuvvvuvwwvvvuttstuvw~w|x{xzx{x{x|w}vvuuuuwwwwvutuvwwvvvvv}v{wxxwywyxyzy|x~x~w~xzywytztzuzuzu{u{uzvxxuzs|r{s{s{szs{s}s}s}s|tytvsvrxqyqzqxpuqtquqwqvqtqqrrsutzvwxw}tzsxpulrinhlikjjljkjkkmlonnpovv|{}z{wzrypzp{p|p}p}p|p{pzoyownulpklikgkeiflipmrioflhkikjnknknlompnrotpvpwqwpvozo}p|p{nzlxmvnvoxozp{o|m|]TRPyUpUkMeOgWnbtar^sfwizfxgzk{kzjykymxqvsurtnvlxlylznzo{p{s{uzvxwzw}vt~o|kycvZpXn\\qdujwjvhvdtcsevixozq|r|p}o~nno~o~n~l}j|h{hzi{j|j}j~j~k~j}i~i~i~i}h}h~jloppoooooonl~k|k|l}m~m~l~m~m}m}m~nmnnoppqqrrq~o{o}lwnxw}xxwwxyxukmruvs{twxsp~x~omsurpp}m{kzkzm{m}p}p}ez]yfynypzp{oyo{ryzv}v~{xuxxvzs|r}r}r}s~s~t~t}t}t|t}s~tsoljjk~kklmnnljkjiiiijkk~h|hzb{j{o{l{e{i{k{l{nzoyryuyvywyxywyuytysyryqypzpyqzr{s{t|s}qzjlcH_K]V\\W`MaKbKdaipt}v~w|w|v|v}v~w}v}qylqntsuqzt~v{wvxwzxzy{z|{}{}{}{~{}{}{|{{|{|{{z{z{zzz{y|v}r~oo~p~ppommmmn}qvwr}q~q~s~t~u~v~w~x}{}|}}|zy~w|w|x}{|y{zz}zz{{||}}{|z|y|y|z{z{z|z|z|{{{{z{y{y{x{x{x{x{x|y{y|z|{|z|z{vzqynxryvz|{}}~|yxxx~y~{}}}~}}}}}}}}}~|~~}~||~|{{~{}z|vyuwtwswrzqzpzpypyqyqyryryryrxrxrwsvsrroqmrlrksltnutvzwzw{y{y{x{t{t{v|w|x|x}v}u}w{yyzxyxxzy|z~{|}~~~}}||~{zyz|~}}|}}|{z~xvussttuw~x|y|x|w}w}x|z|{{zz|w}t}r~p}o|o~ppqrq~p~p~p~q}r}v|y|v||{z}yvytytztzrypyqzvz|z{|||uznwmsouqyqyryryqyqzrysztzvzsypyoyozr{u|w}x~wwwwxy{{zz|~~~}}{~}~vkd`aguy|}~~~}}~~~}~~~~~~~z~w~z~}|}}~~ystyz}~||~voty|~|{{{|~~{{zz|~~|{{}~zxtrlkqutuz~~}}~}~~~}{z|}}}}|zyyyyzzyy{xyztjmt{||ytnh\\Yiwtspsywvuwxyxvtuwyuquzzyz|}}|wvvy|pppqqqqqrrrsstuuuuuttttttttttstssssrrrrstuvvvvuvvvuuutsssuvw~x|xzxyyyyyyzw{v~wuuuuuvwwwuutuvwvuuuuv}w{xyxxxwyxx{x}x~wx}yzyvzs{szsztzu{vzvzvxwvyu{t}s}q|q{p{q|r|r}s{tytwtvsvsxryqwqurrrsqvqwquqwrxt|vxyyw~v}u|pznxmslplmnnnononppqospxw|~}{}y{sypyozp{p|o|o|o{ozoynxmukmjghfgfefehgkhlfkdjfigigjhjikjllonrovpvpvpuospupwoxoyoxoxototpupwqyq{p}`TOMxTnOgE`LfYrawYoZqgvdwbwezo|o|l|m{ozrwsusupxnynymynynyoxrxuvuvvwv{v}u|rzkybuXnYnctkylyixgvdtcsevhxlzo|q}r~pnl}j{fzcydydyfzgzh{i|j}k~mmj}h}i~i}i}j}i~jloqsrqqoonnm~l}m~n~nmmnnooonooppppppppooq}r{v~wyxxxxwuqtwvwtswwttytsttrp}ozlzjzjzk|m~oqd{_yeymyp{q|pzo{pywur~yyqquuys|r}r}r}s}t~t~u~uut~t~tpkjiij~kklmnnljkjjjjjjkjl}o|b{_zezizgzk{l{m{nzpztywxxxxyxywyuxtxsxrwqxpzp{q|r}s|s|r}o{kndH`P^\\^SbK`LdRgumqsvuxvuvtuuuuututttqwqqrsrvrzrvssx{y|z}y|y|y|{||||||||||||||{||}|}{|z|z|z{z{z{x|t~ooo~ppommnmo|ruxr}q~p~rr~s~t~u~v~y~{||{yx~w}x}{~}}||}{z{{|z|~}z|z|z|z|{|{|{|{}{||{|z{zz{z{y|y|z|z{y{x{x{x{x{x{wzsyoxpyyz~{|}~~}zxxwx~z~~~~~~~~}~|~|~|}}||||{~{~{{{z~xzvwuwswrzq{pzoyoypzpzqyryryryrysysxstsqrnqlrjsltquxw|wzx{y{x{w{t{s|w|x}y}x}v}u}v{xyxywyw{w}x~y{||~}}|||~||{zz{|~|}|{z~x~wutsttuwx~zyxxxz~{~z|{z}v}s~q}p|p}pqqrqppqqrs~t~v~z~~}~|y{szuztzt{s{rzqyryuy|yz{{zqwlqjnlrowrxsxryqyqyrztyvytwpwmwnyq{v|x~zyxwxy{}}{{}}~|~z~{~}}~~{rha_fvz|}}}}{}~~~{|~~~~|~w~x~|~~}yuw|}~yvy{}~}{~tacr{~~~}||}}|yx{}~{zz|~}unjmoeijd~f~s~}~~~~~~~~~~~}||||||||zzzzzzyxxyxsprigluyzyuqlc\\iwokir~{ywyz{zxuvxyyoltyzx{{|{yxxz|ppopppppqrrsstuuuuttttttsttttssssrrrrrrstuuuuuutuuuttsrrstuv~w}x{xzxyxxxyxzw}vvvuuuuwwxwvuuuvvvvvvvvw}w|wywxwxwzw}wwx}yyzu{szrzsyuyvzv{uzvxvvwu{r|ozmzozqxqwrwrysztztxtttssvsxrvrqrrquqxqxqxryt|vwy{zxwt~r}q{qxqwqwtwswqvnunvryy|}|~y}sypvoxozozo{oznyozozn|nzlskljihgffegchcicidhfigihihjikknlqnsovpuosnomnororlolrltpxqvqtpuowpyq{r}cTMLwTnNgCcQmbzh}ZnYpcv_v_vcym|pno~p}rztyszq|p{o{mzmxmwouptsrtttwuyu{uztynwcsXm\\qfxnzlzlzlykwgvevhxjznzp|u}s~m}gzby_vbvewfwfzg{h|i|j}lopk~h}i}j~k~k~j~j~lmpstrqpnmnnnooooopqqqoooppoo~o~o~o~o~o~o~pqqsuwwwwxw~wvvvwxtrvvuvxwurn}hzgwgugvfvfvgwk|n}pf{dygymypzq{pyqzrzvxovmtsuys|r|q|r|r|s}t~uvvttsnhhhjkkk~klmnljkklmmkkihmv~k|^z\\ybxjzm{n{m{nzpysxvxwyxywywyvxtwsvrvqvqzq|r}r~s|s|r|pzlleGaU_b`QcJaKfVlzq~ryrusvutututtstpsmrnqqqosrtwu{stur}z}z|{z|y|y{{{}{}{}{}{}{}{}{}{~{~z}y}y|z{zzz{z{v~o~nn~ooonmnmozttzq}p~p~qq~r~r~s~t~w~yzzyyxx~z~}~}{{~|||~}x}{}y}{|{|{||||||}|}}|}{}z}z{{{{{|z}{~|}{}z|y|x{xzyzxytxrxvyzy~{||}~~~~}yvw~v~v~x~~~~~~}~}~}~}~|}}|}|}|~|||{z~xzwwuwtxszrzqypypypzpzqyqyryryszs{tztwstrpqlqjrltsuzw}xzy{y{y{x|u|t|x}y}{}y}v~u}u{wzvzuzu{u}v~xyzz{}{|||~|}}~}}}|{{{||{{z~ywvuvvvwx}y|z}zyxxz{z~z||y|v{s{r{q}qqqqpppppqqrsttv~w|w{vzszt{t{tzsyrxrxxxyz{v{nwingkioorqwqyqzryryrysxpvktitlvqyv}x~zxwwwz|}}||}}}{~z{ywxz}|zkbamz~~}|}|z|~~~}~|}|z{~~~~{~x~z~|~|wpou}~|~~~|{|~}yhiw}~~}}}{xvx|~{yyz{}{tpouwkhc~Q}V~n~|~~}~~~}}}}}~}}}}|{zywwz}{yyzzywwxxtomiecjqtvwvtnekxroos}}{z|}~|xtssvypkopv|}}zyxzz{}ooooppppqqrsssuuuuuuttttsttttsssrrqqrrrrsttttttssstssrrqrsuvw~w|w{x{wzwywywyv{v~vvuuuvwxwvuuuuvwwwwwwvvvvyvvvzv}vvwx|yyzwzvyuyvxvyuztzuywwxvytzoynxpxqurrqrqtrwsxsxswtutvtwtwsusvrxryqxqwrwsyu}wz|{ywvut~t}t}t~v~u}s{ozoyqzx{~}{~x~s{puovnynynynyoxoyo{o|n|mwlrknjkghdgbfbhchdgfihiijjkkmlpmsoupvpuoqmllklpknififjonwqyqyoynzo{p|r}gWONwXqRjLh_vm}ozdsasdybz`zbyh|nopqrstsr~q}n{kxksnpoornrsswsys{uzvyqvcrTm[qhwmzj{q}s|r{lygwfvhwjxozs|p|g{_x_waubvdwexfzg{i|j}k~mrsmh}h}i~j~j~j~k~l~lnqtsqommmnopppqrtttrppppoo~o|o|o|o|o|o|o|p}p~p~q~sttu}vzx|xwyvswwr~p~tst~t}u}ro{iweuasaqbpap`o]o]qfxl~kc|gyixlynzpzpyqyryuxnvkrwyr|q|q|q|r|s}u~wxwvtslghiij~kl~j~ijnnkklnp~onkjjovr|n{dyayjzo{o{m{mznyryuywywzwzwzvytwsvrurvryr{s|s}s{s{s|qzmnfJbR`\\`KbIbLh^mxq{qzryrxsxtxtxsxstrmqjrlrmvsxyz|{x|w{}z{{y|x|y{{z~z~z~z~z~z}z~z~z~z~yy~y|zzzzzzz{v}p~nnnoonmnmpxvs{q~pppqq~r~r~s~v~x~yxxxwx~z}~}|||{}x~}~w~x~y}||||||}|}|}|~|~{zz~z}z{{{|||}}~}}||{|z|y|y{yzxvwvwzx{yzz|{||}}}t|t|t|n|i}m|o}r}u}{~~~~}~}~}}}}}~}}~}}}||{y~w{vxuxtyuztyrxqxqxqypzqyqyryrzs{s|s{tysvrrqnrlrosuu|w}x{y{z{z|z|y|w|z|{}z}x}v}u|v{vzvzu{t{t}u~wxxy~y|y|{|||}}~}}|{zzz{{{{~zxvv~x{||{zz~z~y}y}y}z}y~y~z~{~{{~}}|z{x|u}trqqqqqqqqqqqqqqs{}~|w{s{t{u{vzv{vzv{z}~}|z{yuynuhmefiinsqyrzszryrzrypwiterjtpxv|x~ywuuwz}~~~}~}~}~~}vpsy|~pdct}~~~}~~}~~~~|~z~z|~~{y}~}~z~z~z~zyspv||zy{}|{z|~~yy~}|zwvx}vrwzz{}~}zxwxvwpl`~H}Wv}}}}}~~}|||}}}}}}}|{yywwz|wtx{zxusrqqmjec_horuxxxunqyxxzz~~}|~~|vroopsvssvrv{}}{xx{z{}ooooooppqqqrrsuuuuvvutttsttssssrrqqqqqqqrsststsrrrrrrrqqrstuvvv~w}w}w|wzvyuyvyv{uuuuvvxwvuuuuuvwx~x~x~x~wwuuu~u~u~uuuww~x}x|x|wzxwytzszuyvxwwwuxsxrxrwsusrqqqqqtrvrwsxtxtxtxtxtxsxryrxqxrurvtyu|w}z|{zxwvv~v}v}u~uuus}q|q|x|}|y~wr~qzpxnxmwmwnwnxozp{p{oznxovowmukrhnekdmemfkhkjkkllmmonqnrotpvoumskkjghmhjg`g`ilmwo{o|n|m|m}p}o~j`YSyXvSnWmiwqzpukvi{hgcaeloprrstttsp|lxkpmmnnqqqtrwrzr|t{wytwgtSk[oivkyi{s~y~u~p|jygvhvjvnxnzk{fyawavbucudvdwfyg|h|i}k~mqpjd~g}i~k~j~j~k~l~lmorsqolk~lnopppqtwwuspooonnn~n|n{o{p|p|p|o|o}p}q}qrsu|w}xwvzsqvyt|o{o}o|p|p|o{n|myjwfuetcrdqdqfphpjskwiwbu`tiunwqyoyoypxqxqxsyyy~vkpx{u}qs}q|r|t|w~xyywuskgkjjln~t}r}i~g~lnkjko~rr~q~mllnpr~x|ozezezl{n{n{nzozrytyvyvzw{w{vztzsyrwrwrwsxtytzt|t|s}q|nxhacQaVaKcKd[jrlxnzpzqzqzrzszszs|rxrmsjumwqxu{z~|~{}z|z{zy{x{x{y{zz}z~yy~y~y~z~z~z~z~yy~y{yyzzzyzzw}q~onnnonmmm~qwxr|q~qqqqq~q~r~s~u~w~x~x~xyxx~y|~~~}}|}}z~xxvx~y}||}{}{}{}|~|~{zzyy~y|z{{|z|z}y|x|w}x}w}w|w{wvwyw|x{x}yzzw{~{{x{dzdzey^yZy_ybzg{h{n|u}|}~~~}~}~}~}~~}|}||{{y}v{uytyuzvzuytwsvrwrxqyqyryryrzr{s{s|tzsysurososstyu{w|w|x{y{z{||}}|}}}||z|x|v|u{v{u{uztzszs{t{v|w}w}x|x|y{{{{|{|{}|{zyyy~y}z~z~{~zxwwz|uvy~|}~{yxx~y}y|y|z|{}{~{|{~{||z}y~vtrrrrrrrrrrrqrty~||x{uzuzw{z}{~{{z~|~|x}xyzszksdgbcglnuryryrys{szuxutnqjsqxw|x}w~tstvz~~~~~~~~~~~|rnsy~uhew~}}~~~~~~~~|~v~y~}|}~~}~}{~z~z~yyyuv~|vpw~}}~~}~~~~}{ywx{~znmxz{}~}zvtuyuvws_~P~j}xy{|}}|{{|}}~}}}}|{z{||{xniqy{vqpoomjia^eiosvvswwpqw{}~{{|}{vqnpsuyzy|{uwz||{xwyx{}oooonoopqqqrrsuuvvwwvutssssssrrrrqqppqqqqrrrsssssssrrqrrrstuuvvvvvvu~u}u~uutuvwvvvuuttuvvwx~x}y|y{y|x}wvutttttuvwwvvv}wzxwyuytxtxtwuvuvvvwvvtsrqqppqpsqvrys{t{s{s{sysyryryrxrsstt~vx}z}|{zxwv~v~w~w~vvvvtr~r~y}}}x~vrq}pzownvmwnxoyp{q{q{pzpzqzr{qzpznzmwkvkvkulrmqmpnpopoqoqprounultjkidgffdf`gailmxn}n~mlklljgc_{_z]ueupwovpoounmnjfinpqqqssuuvsn{ktmrmsowqxqzr{s}u|vzwxluUm]oiukyj|r~ws~p}lzgwfugtiwjxhydxcwdvdvdvdvewfyg{h{i|k}mqqjdf}j}m~nnopppqstrpnlmnnnopqsvvusqonooooo|o{o{p|q|q|p|p|p|p|q}s~tvxwvuvppvuq{lziylzl{lzl{o|p|p}m{lzjwkuntssxuywtwgu]q]ofsivmzlzkzozpyqxsyv{{u|fynw{u{pq}q|s|u}x}yzzxurjgiijlp}z|y|l}f}hlljkp~t~u~u}q~mmmmou}s|j{dzbzhzmzmzoyqysyuzv{w|v}u|t}s|rzryrwsvtwuxu{t|t}q}o~jveXbUbKeRhpj~kzlznzqzrzszszszr|rysovlzs|v}x}z|{{zzyxyxzw{w{w{x{yz|z~x~xxxyyyyyx~xzyyzyzyzzx|s}p~onnonmnn}ruyr}q~qqqqq~p~q~r~t~v}w~w}x~x~w~x}y~z|}||}|}}|{zyz~z}{||{|{|{|{}{~z~zyy~y}y{yzy|x|x}w|v}v}v}u|v{wzwxw{v}w}wxyzz|z~zsy_y_y^xXxVwYv\\v]wZxXy_zl{u|y||}~}~~|{{}|{zz~x}u{tytyuyvyvxvvuutvswrysysysyrzrzr{s{s{szswsrtqtvu{v|v{w{wzxzy{{||}|}}}{|y|w{vzuzv{u{tztysytyuzv{w{w{w{x{y{y{z{x|y|{zyzzz}y{x{y{{}{}z}y}zy}sstw{~}{~xwxx~y}y{{{|||~}~||{~|}}|~yvtsssssssssrrtuw}zz{y|x|y~z~{~z}x{y{{{}~|~|||w{pxhoacadhopxryryszt{zy}vwtqvuzy}x~u~rrrt~{~}}}}}}~}wuz~wliy}}~~~~}}~~~~~~~y~}~|z||z{}~}{zz~y~yzzz}}~~zv{~}~~~~}}~~|{yyy{|xpsyy|~}|zvvx{xx|ygcvypnv|~}{zz{}~~~}}|{{|}}|yneit{tnmppjec`ckmquwvuwrhjrz}zuuxxvsoquy|~}{zxuwz||xsuww|oooonoooppprrtuvw~w~xxwutssrrrrrrrqqppppqqqqrrssrrrrrsrrsssstuuuuuuututttuuvwxxxwvvuttuvvww~y|zzzyzyy{w~vtsssttuuuuuvvv|wywwwvwuwtwsxrxswsvrsqrpqpprpupxq{r|r|r{rzrxrxsxrxrsrrt}vxz~|{zxvvww~wvvvutstz~~}x}u~rp|pyowowoxpzpzq|r{szrzs{t{tysyszs{r{q{o|o|pyqwqsproroqpppqptnultjmhgcl]q\\sdvixn}mmlljjjjihg~g}f~nvtxqopupponmnopppqrsuuwtpl{lymyozqyqyr{u|w|u|wznw^rbrivlzm|q~s~r~p|kzhweuctdvgxgydxfxixgxewdwdxfzg{h{h{j|mtungg}j|p}t~wxyxxxxywussrpnnnnopstsrqppppqqq~p|p{p|p|q|p|p|p{p|r~tvxxvutso}o}so{mzkyjykykzl{n|qtutss{uyyvzvywvypylyevdtfugwizlzn{p{r{rzsyuyz|xqtts{xxt|o}q}s}v}x}xyyxuqighnpmk~u}z}p~g}e~jmkko}v}x}x|u}p~o~mmmp~t|r{mzaxcxjymznyoyqzt{v|w}v~u~sr~q}r{ryswtwuwuyuzt|r}p~k}gcdUdJh^k}k}l{mzozqzqzrzszrzr{qzuryr}w~x~z|zwzvyvwuwvxv{w|w|w{wzzz}x~wvwxxzzyxyzzyzxzyzzy{u|r}pnnnnmo~qzutzq}q~rrrr~r~q~q~r~t~u~w~w}x}x}x}x|x|y}{|{{|{||}~}~~~~~|}||z|{{{z{z{z|z}z}z~yy~y}y{y{x{x|w}u|t}u}u|v|w{x{yzx|v}w}wx~ywzwywzpzezczaz[yZxZw\\vYvUvQwXwbxjymzq{w|}}{yy{|z~y~x}v|tztytyuyvxwwwuvuvuuwtxtxtytysyszszszs{szswsstsuwv{w|w{x{x{wzxzy{z|z|z|y|w|v{vzuzuzuzuzuytzuzvzw{w|w{v{w{xzxzx{w{y{{{z{~}}|{zyywyw{x|y|y{y{w|t}s~tuwx~yz|xxxxy}z{{z|{}}~|{zz{~}{~xvtsttssssssssu~zz}xvvtts~s{tzwz{||~{||xzszksbf]abikrqwrytzw{}zy{yxzy|z~x~uqpqt~{}|||||{|~~~yqm{}|~~~~}~{z{|~~~~~~~~~~|xz{z|}|zyxyzz{{||}}}~}}~}~~}~~}}~}}{|~~|zyz|}zytu}||}}{|{zutyzttz{vhcq|~}zxy|}~~~}|zz|}}{ywqluxslkornd\\gqpqrstuvtj`elqt|}xqpttsolnuz|{vvwvwxz{ztoprtzonnooopppppqqstvw~x}yywvtsrrrrrrqqqqppopqqqqrrrrrqqqqrssssssttuuuvvvuuuuuuuvwxyyxxwvutuuuuvy}zz{x{v{wyzx|v~utstttuuutuvvv}v|v{vyvxvvwvwuxuxtvsurtqrrpsovpypzqyqypxqwrwtwtvrrqsrytwz|{zxvvwxwvvvttt~u~{~~}y~u~r}pzpxoxowoxpzqzq|r{szsztzt{tysytytys{r|p~p~q}s{swqtosoqoqqqqtototkqeoUwA}AVkoo~n~n}m~ihhhhiifcdkkl|m~mooopqqqpooqrt}t~tqom~l}m|n|ozpzszw{w|t}q|mzgwfvkwnyo{p|q}q}m|kzixevaucwhyizgzizmzjzgyeydyf{h{izizj|n~qsok}j|j{l|r}w}~}}}~~}{{||{yxwqoopqqrrr~ss~tttt~s}r|q}p}p}p|o}o|p~stvwvussso{lxlymynynzoznynzo{q}tuxxyy|zy{xuwtxszr{rzpynzk{jylypzu|s}t}u{tywu}xvyr{~v|yr}r}t}x~y}x~vvvtpkjnwyqisztk~ggklkn~u|z|{{y|t}r}omno~t{vzuyowfwfxmylzmzp{tzv}w~vtsppq~q{rytxuwvxuytzr}p}m}ikfWfKjin~nznzozqzqzrzrzrzrzsyvzzw|w|x|yzzxzsyqtqqsssxv|w}w|w{wzzz}x~wuvwxyyyy~yzzy{y{y{zz{x|t}q~omnmnqysuxr|q~qrrr~r~r~r~r~s~s~t~v~w|x|x|x|x{x{x{z{zz{z{z}{}|~|~||~{}y{yzyyzyzz{z|z}z~y~y}y}y|x|x|w{v|u|u|v|w|x{zz{{{{z}x}xzxxytzn{tywzr{l~j}g|c|b{a{^yYxVwVw]vdwcw`x_yjzw{z}x~xz~z~x}w}w}u|tztxuxuxvxwwxvvuvuuvuwtxtytytysysyszszsyrwrtstuxw|x|x{y{y{xzxzxzx{x{x{w{v{uzuyuyuyuzvzvzuzvzx|x|x}w|u{v{wzwzw{w{y{{z}{z|z}z{xyvxuyt{t{t{tztzszrzr{s~sttu|yy~yyxww}yz{z}{}~|zxwwyz~|z~wutssssttv~wvv~w|yy|vusss}rzsxtytzu|x{zx{tzntei\\a^dempvrytzy{{|}||}{~{xuqpqt~|}|{{|{{|~~~}zvs|~}|}}~~~~}~~~~~~~~~}~wz~|yxxyzyz{~}~}xx~~|}~~|{}}}~~}}}}{y{~|yz}~}vkq~{{~~}|wpqy|{z|zvniw}ywx|~~~}|zyz{|zxyyvvuqonowwmas~wwrjmrvunbddgjpwyqpuutnknuz|{yxwuwyzywpjgdfs{onnnopppppppqstvw~x}yyxvtsrqqqqqqqpppooopppqqqqqqqpqqrssttttuuuuuvvwvvvvuuuvwxxxyxwwvuttttuxzz{w|u{u{wyyx{v}utsttttuuuuuu~u~u}u|u{v{v{v{v{wywxwwvvtursqsququqvqvququsvuvtuqrpspvrzu}y{{ywu~v~wxxwvuts~s~v~|~~~z~t}q|pyoxpwpwpxpyqzq{r{r{r{szt{szrzsyszs{q}p~p~r~u|uyrtornrospsotptouksbwCy:O`ko~p}p|s{n{g~eeegiic[YZbhklnnoopqqpnoprs|s}rpnll}l|m}m{n{rzwzu|q}o|kzhyhxkxmymzlzo|l|i{lzjydvcvfwiyj{i|l|m|lzhzezf{i|o{rztzt{u}u~ts}q}p|m{j|n}rtsstuwyz{zz|~~~tqonoqq~s~t~t~u~v}vww~u|s|q}p}p}p}p}p~qsuvvusrqp~nzlxmxpzq{r{s{s{t{u}tuvx~{~{}yz|xyyuyyzy{x|v|v|t|n}ml|myoyruvu~xzyxwx|wq{vu}t|w|{}{}w|t|p|ptqmqsyzupw|yqidgkjlr}u|xzwzv{u|p~lp~q}tzwyxxvwnwixjyk|nzq|u{w~wuspnnop}q{sytxuwuwuwszp|n}ksgWhTlqp|pypzqzqzqzqzrzrzszuz{z|y{yyxxywzuyqwmommpurxu|v}w{xzxz{z}y~wvuvwxx~x}y|yyzx{x{y|z{{z|v|r}pnmmo}sswq{p|q|qrrr~s~sssrr~s~s}u|w{w|w|w{w{xzyzyzz{{{|{}z}z}{{}z}x{xyxxxxyyzy{z|y}y~y}y}y|x|x|w|v}v|v|w|y|{{}{~{}|z|xzxxxtypzuzwyzzy}t~rr~o~n}l|izdy^x_xdxfwbwXwUw`xnzv|w}x~y~x~w}v}v|u{uzuyvyvywyxxwwvuvuuuuvtxtxtytysysysyszsyrxquruvxx{y|y|y|x|w{wzwzwzvzvzvzvyuyuxtxtyvzvzvzv{w{y}z~zw}u{uzvzvzw{x{{{}z{zx{v{v{vzuytytzs{r{qzqypxpxpxqzq}rrrs~v}x|z|{{~yyy|{z|z|{|~zwvuvvxy}{y}u~ssstttw{zy}x{xy{w~uss}s{tytwtxtyuzwzyyzv{rykp]d^chnqvryt{z{||}~}}}|~wtropt~}~}}||||}~}~~|{{zx}~}|||}~~~|~}}~~~~~}~{|~~~|{{{{xy{~{vy~~|~~~~~~{y~|~~}}}{y{~~~{{}~}wpv~||~~~}{uosz|}}|zxtwz}yvx|~~~~|zxyz{ywyyysrqsusxysv|}~|hZdqwuroe^`dlw|vvxyxusuy{}{yyxwyzzxvqkjg`p|onnoopqppppppqruuvwwvusrqqpppppppppooopppqqqqqqpppqqrstuuuvvvuuuvwwwvvvutuuvwxx~y~xwvuutttuwz|{x{v|u|t{uzwxzw}uttssttuutttts~t}t}t~t~t~u~u}u~v~u}v{uxuwtwtvtttssrsttvuvutprnrmrouszw~zzy|vyuyu|w~xxwv~u~s~r}s}x~|~zu~r|pzpxpwpwpwpxqxq{r|r|q|q{rzq{p{q|r|r|q}p}o~q~v~x{uurqornuovovovovkw^yGzO~ek~n}o}n|m{m{j|c~bbcfhhaWSU]fikkklmnqsqnoppr~rqpnl~l}l|m}l}n}s|u|r|n}l|j{hzhykxjwhwexhzg{h{mzmzhxgyjzk{l}k}l}n}m{i{f{j|r|x|z{|z|{||||{}{}}}~}}|{{v|r~onmln~r~tvvvuv~{~}}~|vqnnp~r~u~v}x}y|z|z|{|z|x|w|s~q~p~p}q~rtvvutrqp~o}n{nypxrys{s|s{rypuotovoxpxszwzyzxzsuyxvw}|~~~|zyxs~o}k|kzlzosvv~w|y|v|u}w{s~z}u{x}}}}z~w}q|l}popvvxxuuy|}yofdhijl~l}l{n{r|s|p|k~o|p|uzwyxxwxrxmyjzoxsquvw{wwvspmlmno}q|syuwuvuvswp{n|lwj]j^nwqzryrzryqzqzqzrzszv{z{~{|{wyvxuxtyrypvllknoyryu|w|x{yzzz|z}y}xwvvvx~y{yzzzzx{x|x|y|z{z|{x{t}qomnq{vv|sq~p|rqq~q}ssrsqqq}p|r{u|x}zz~y}y{x{x{x{z|{|||||{|z|y|wzvxvwvwwxxxzy{z|y~y}y}y|y|x}w|w}w}w|x|{|~|||{|xzuytysyuy|z~z~{{~vvvuutt~q~m}l|l|j{dy^xZw^xgyp{v|w}x}x}w}v}v}u|u{vzwzw{x{xzwxtutttttutwtytytysysysysysyrypuquwxyzz|z|z|x|w{xzwywyvyuyuyuxuxuxuxuxvywzwzxzx{y}z~zx~v{uzuyvzxzzz|z{yxyvyuzuztysytyuzt{s{qzpypxoxpxq{q}rrsstvwvw}}|zz}{z}w}y|}zxvutuvx~yyzu|t|t}u~uuvzz}zzyyzy|w~trr|sztyuxvxwyxzy{{{{y|{|wtbg`epquxuzv{z|{zz{||~wtrpqu}~~~~}}}~~}}~|{{}}|~~}|}}~}~zx}~~~~~~~}zy|~{z}~~}~~~~~{~z~}~~}}~~|z|~}|~}~}|||||zusy}~~~}||}}zy{~~~}~~~|zxxyyxvvwtnjrz}|yux|{y|t`XgsyxyznXTdu|{zyz{{{|}~~{zwx{|zxwvwptxs}onnnopppppooppqsttuutsrqpppppooppppooopppqqqqqqppqqqrstuuvvvuutuvwxxwvvuuttuvvw~x~x}w~vvvvuuvwy}zz{w|u{t|t{tzvyzv}utsssttttttssttts~s~s~s~s~s~t}t|s{szsztxuwuuuttvrwqwrumskrkplrpvt{wx~wyvsttuzv~ww~v}u|t{s|r}t~x|}zu~r|qzpxpvqvqvqwrwrzr|r}q|p{pzpzp{q|r|r|r{q{o|q}w}y{wxuuqvnxoynynxlxkycx^yh|n}n}n}l|k{izf{g|d~babehhcXUWbijjjhjqphbjoopprrrpnm~m}l}m}l~o~s}q}o}l}k|i{izhygyfxfxhxjymyo{o{o{n{l{l|k}l}k}m~m}n|l{m{o{v{t{s{t{w{y{zz{{|||}~}|||{~yvtr~t~v}x}y}x~x~w~w~y}y|{|~~~~zsnmp~s}u}w|x|y|y|z|{{|{{{x|t~rqq~rtvwurqpp}o|o{pzrztzv{w}v~sznqhgcd`ebfjmqtwvutorknxzx{{zy{zuzrtntmwk|mps~u~u~t~r~t~wvv|t}w}}}}|~|}z}r|jjpxwwxvwz{{{qb~^~c~i~jhfc}d}g}h|h|f}i|k{pzszuzuzqymylzpzssuxuuuus~p~ml~l~m~n~p}r{tyuwuwtwqznzmylilhozqyqyryqypzp{p{r{u{{{{{yzsxtwswrxqyovmomrpyszv|x{z{z{|{|{|z|y}wvuuw}zy{x|w}x|y}x}x|y{y}zz{v}qnno~s{y|yvs~sp}n{n{o{kziym{o{o{lyiwjvnxszv|w|v{tytyuzw{x{z|{}z{wzy|xzwyvvuwuwuxvxyyzz}y}x~x}y|y}x}w|w}w}x}z}|}|{|~x|s{r{u{xz{y~z{z{}wvvvvwwwvvspl}j{gzfyhzl{s{v|w|w}v}u|t{t{tzuzv{v|w{wzvxstrsrssttvtxtysysysysysxsxuxsvpuwwyzz|z|y|x|w{wywxvwuwtwtwtxuxvxvxvxwxxyxyxyyzy{y|y}x}w{vyvywxyy{y|w{vxvvvvwvxuxtyuzuzu{t{rzqypypxqzr{r}rsstuuvtswz}{zz}uw~y|~zxvuuuvw}wxyuxuxvyv{v}v~x}x|yzyx{x}wuss}t{uyvyw{w|x|z}|}}~}|vlkgh{t{yw{y|}|zwvwy{|vsqpqu}~}}~~}~~}}~~}}~~~{z}~~~~~~}~~~~~~~~~~}|~~~~~~~~}~|~}~~~}{|~||}~}}}~~~}{{{{{{zxy}~}~~||||}~{z|}~~|{yxxwvuvtpklsw{}|{{zxwvf]duz|{{~w\\Ndz{{zyxvvuwy}~~~}}~~{yxxvz~~onnnooppppoopppqrrsrrqpooooooppppppppppppqqrrrrqqpqrrsttuuvvuvuuvwxxxwwvutttuuvww~v~v~wvvvuuwx~z{zy|w|v|t|s{tzvxyw{uttstsssttsstutsss~s~t{uyuyuxsyryqxrxrxryrzp{mzlxowktjsiqkrntrxu|u{uwustsuyvwv}u{uysyq{r}t~xzzxur}qzqyqwqvqurvrxqzr|q}q}p|o{o{o{p|q|r{ryqxoxpytzuzuzuyryozn{n{nzozoykxjxiyh{l|k|i{hzeyezh|i~fdcehig`ZXciijkhinnc\\hoppqrssqon~m}l}m}lo~r}o}l}k|j{j{i{hzhzizk{n{q{t{q{p|p}o}m}l~l}l}k|l|m|m|p{ozmzkzj{kzizkznxpvqusvuyyz{zzz|z{}{yxx~x}z|{|{}z}z}y}y}{}y}w}z}}~{uonq~s|u|v{uzu{v{x{{{|{z|x|trpqsuvvsqop~p|p{q{r{t{v|w}wvt~pvijab[^]_mlvtwsnlc_fh|zzyxy{{t|kvogpglwjlp~t~vvuv~y{x|v{t}s~x~{~{}~}|}|s}jmuwvwwy{zsk_VUb~knm}ize}ccb|b|c|c|e{h{kzmzmzlyjykyk{lwm{nzo~q~p}o|l{i|i}j}l}m~oq~t|v{uytxryoxnznunspypwqyqzpyozo{o|q{w|}|{~zxxrwrvqwpxpyowntpusxuzx{y{{{{{||||z{zzzx~vuvx{{x}w~ww~x}w|w{x|z}zz{v~qno~q|uz{{{|{u~n{kwkwkscp`ogrktkugqcobnfqltnwnvlujrksousytyuzvyvxvxz}xzwxvwvwuxtxtyx{yz|y|x~x}y|y|x}w|w}x}z}|}~|zyx~s}s|w|z{|y~xyz{z~vuuvvvvvvvusss~t}s{p{m|n|t{u|v|u{tzszryrxsyszt{uztyswpsprqrrstutvtxsysysysyrxswxxwvpuvvyyy{y|x|w{wzvxvxuwtwswtwuwvwwxwxxwxwywywyxyyyyyzy{y{xzxyxxywzw{u|s|szsxswtwuwvvxvyvzvztzs{rzqzqzr|s}s~srstuuutstv{}||y~wxz~||{yxwvuuvzwuvwuytxvvyt{u|u{vzxx{x~xw~v~v|w{w{x{x|x~xyz{yzwtlqivz~{~{{xtrsw{|urppru}~~~~~~~~|{}~xx~~~~~}}~~~~~~~|z|~~~~~~~~~~~~}~~~~~~~~}|zyz}|{|~vv|~~~~~~}{{{zzzyy{}}|}}yttx|{vw{}~}||zywtsuxxsoopqu{~|zwtrnbdr}{{zj]kzyywwurpqrvz}~yxxy{|}~xooonnoooooooooooppqppoonnnnopppqppppppqqqqrrrqqqpppqrsttuuuuuvuuvvwxxxwvvuuuttuuuuv~v~vvvuuvwy}z{{y{x{v{u{u{uzuxwwzv}ttsssssssstutsrrr~s|t{t{t{s|r{pyqyryrvqvnxkykylxkvjtjsktmupvrxryrwsvsvtzv~v~u|tytxryp{q}svwvvtr}q{qzqyqwqvqvqwqyq|q}p~p~p}o}o}p}p|pzpwptnsntovpwpxpypypzn{m{n{ozkx_w[v[wYy^zd{f{fyeyezh{h}g~feegijj`[dkmm}lihjlfdkqppqrstusom~m~m~moq~m~j~j}k|k{k{k{l|j|g}b~j}p}o}o~o~o~mk~k|izfxgwhwjzevgxhxizi{i{hziykwmtnrpspumxlzmzozw}zzzz~z|z|z|z|z|z|y|y|z}y}x}z}{}{~v~r~q~s}u|tzrxqwqxrzt{w|x}w}u~sqooqrssqpp~q~q}r|s|t{v{v|w}wwvsnrfc][`_vptpolc_hatv{{zyyz|u}ephvZxqs|m~nsuvvu~w{{yxxs{m|l}n}o~q~s}y}|~}|w}tvzwuvwyo]SMXehntt{srntgzd~c|d|d|d|d{fzfzfygygyhyixjykzl|k{j}j|jwj{fycxdygzi{k|m~qtu}tzsyryqwozpypxpzozpzp{ozn{n|o}r|y||{|zwwsvsvrwpxoyoypwrwuyvzz{{{|{||{|z|w|w{xy}wvw}zy}wwvv~u{uzuyuzw{wyyu}popzrxvxzxz}}yq{ivgvktepcpismukvfrbobngomsnvmwkugpirlsovotnrmqpsvyy}yzwywxvxvyuyuzw|x{wzyx}w{x{x|w}v|v|x||||{x~w~s}v~z~|~}{}xw~y~y}{yutuuvuuvwvuuv~v~y}z|w|p|m{q{s{tzsyqwovnunuovowowowovntnsorqrsstsuuuwtxtysysyrxswwxxxtvuuxwxzx|w|v{vytwsvsvsvtwuwvwvwwwxwyvyvzvyvywyxyxyyyyyyyyyyzwzv{uzszqzpzozozpzrysxuwwwxvxuzt|s}r|r|s~tts~r~s~t~tttssstuw~y~zz{|~~}{zxwvvw|wwvxuztytuvsyrzr{tyvxwxyxzxzy{y{zzy{y|x}vssutvxy~s}pyzz{{xtrsv{{uqpqtz~~}~~~~~~~|ywz~~~rl~~~~~|~~~~~~}~}yv|~~~}~~~~~~~~~~~~}zyy|}|yy{~~st}~~~}{{|{zzzz{|||}~{topv||wtw{}}|||{ywuuwz{xrpml~q~{~}{xoihlqw|}|{|}|vrt{{zwuronkkry{~~zy}yxwy{}}|yooonnnoonooooooooooonooonoopqrrqqppqqqrrrrrrrqqppppqqrsttttttuuuvvwxxxxxwwvvvuuttuvv~v}u{v|uuuuwy~z}z|z{zyzxzv{t{tzuyww|v~tssssssrsttssss~s}s}s|s{r{r~qr~s{tvtsrtpusuruotntmumvmvnvovowowpxrys{s|r{rzryrxpzp|q~rssssss}r{qypyowouospsptpwp{p}pp~o~o~o~o|oynumqlolqmtmvmwnxoypzoznylykx`vRtQsRtQwWyazezezdzg{i|h}k~l~kggilo|g^fnrtrrprnwjikjjmppoqrsssqmj~j~klmkhij~k}k|k|l|m|k~e`eklmnnli}eyat]p]p]ndvfxjylzl|l}j}i|hzjwmuptttvvwxwzxzwzx}xzzz~x|x|x|x|x{x{x{w{w}w}x~y~z}z~y~w}v}v|t{szqxovoxp|q~stssqpoooopqqqrs~s}s}t|u{u{u|u}vwwwt{nsfgfesnhfgdb_qp||~y{wyw{w}wxz{z|lsw|nwxr|otuvvu}vz}yyyn|i|i|j|h{gzgzm{t{|{~}|}yxriTEFZqtopwz{p{muqoyl|j|f|e|e{gzhyhyexeygyhykzkzk{j{f{e}fwfzbw`vbvdvewewhym|q~q|pyqxqxrxpypypzo{n|n|n|n|n|o~p~s~{}~||{yyvwuwtwswqxpypyrytyvzwz{{|{|{||z|y}w}x}y{~xv~x{{x~w~wt}syqwpuotouqvqtssxp~o|purrusxtzw{zz{~w}pzlzoznyoypypzp{mylwmvruvwvzuztyrxtytytxrunqimlntwyxyxywxwyvyvzv|v}u|q{tyzvxvyu{u|u{u{z{~{{yv~t~s~wy{|}}z~w~x}z{|wtuuvuuuuvuuv|x|y|{|{|x}u|p{o{q{pyovmskrkrksktltkskslrlrosqssrtrurvtvwuyuytzszsysxtyyzyxutvtvww{v{uztxrvqtrtsvuwvwvvwvxvyvzvzvzwzwyxyxyyyzyyyyyyzx{w{uztxrwqwpyozo{o{pzqzsyuyvwvvvuzu}t~t~tuut~t~u}v}u~utsssssv{~|{z{|~~}{zxwxxzxywzuwutvtxuywyxyyyyyyyyyxyyzyzzz{x}v~snnojntzyvzyzz{ywtsu{{tqprw|~}~~~~~~~~~|ywy}~}}{ztryxz~~~~~~~~~~~~~}|~~~|vv}~~~}~~~~~~~}{{{|zxx{~~zsmrz||||~}|||||{{{|||{||}~{vsty}~}zvuy{{{{{||zxvspryzvrk~h}o}|~}|yrlmuwxwwx{}~{{||{xsoomgbfquy}~}vsyzyxz|}}{yooonnnonnoooooopoonnnooooppqrrrrqqqqrrrsrrrrqqqppoppqqrrsssstttuuvwwxxxxwwwwvvvutuuvuu}u}utttuvxxyy~y|yz{w|t|r|rzuxxv{t~ttssssstssttu~u}u|u|s{q{r|r|rzsyuyvuvtuswtvtttstrtqupvovnvnvnvnxpzq{ozmznyoxoyo{p}rqqqqqr~r|qypwovntnrnqopooorowo|o~o~o~n}n}n{mxmumrlqmsmumwmxnxoyoyoxowlwcvUsMrOqRrUv]yd{e{e{f|h}i}j~o}s}s}i~gik}lzheir{vrvrsuoxl}klkkmnooprssoonh~h}i~j~khijhi}k|k|l{m|l~jhjkkklljcxZnShPeUhYl_rjzn|o}o~om~l|i{jymxpwswuxwzx{y|y{y~y~zyy~w|v|w|w|w{v{v{u{u}u}v~xx~z~y~y}x}w}t|s|r|r|r}rssstssrqpppqqrrsrrr~s}t|t|t{t{tuwxwuszqtkh]^cbhft|z|toqkqjqkqottvvxwxw{wwrnktw{uvv~wx~y|z||w|g|g|g{f{ezcue{q|{y}}~~{u`I=Hbt{vtsw{|}~u}tzzx}r}l}h|c{aydxexexfygyizk{lzkziygyff{fydwbvdvdvcvbudvixlxkwiumvovqwpwoxozn|m}m~m~l~n~p}q}u}{||zyyuxuvuvuwtwrxqyqyszvzwzxz{{|{|{{|y}y~y{|}~zwy{}yv|u{pwmtmrlqkpjplqlpnquo{oxpoqlsntnrqsszu|x{x}v{s}s~s}t}qzpxovkskrkqpqrpsrwxz{|}}}}}z{xxuunsmrptuywvwxvxvyvywzx|y~w~t}p|rxvvwtxsyrysyxy}zzyt~tstvwy||}y}x|xy}vstuuuutvuvv~v{y{|{~{||x}x|v{p{pzoxmtjrhqiqirjsksjrkqlrmrqsssusvsvswuwyw{v{t{szsztzu{y{zyxuuruvwzvzuxsvrtrtsutwvwwvxuxuxuyuzvzwzxyxyyyyyzyzyzyyzxzw{vzuxuutssssvsyr{qzpzqzrzsztytxtvvvzv}v}vvwvw~x}y}w}usrrrsux|~}zyyz{}~~}|yxyz|z{yzxwwvwwwzx|y|z|z|z|z|yzyzzzz{y}w~uspplacjtzz|yyyyyzzxvttzytrru{~~~~~~~~~~~}||~~~~~yy|zv}~}vtw~~~~~~~~~~~}}|||xx}}zxy{~~}}~~~||}}{xx||qb]fprsuy|}}|||}~}|||}|||{zz{~}yxy|}|{ywwxyyzyz{{zxsjeju{xun~f}i}u~zzz{xvxyywttv{}~|yyzytoomia^imow}}xw|{zy|~}zxoppoooonnnnnnnooonnnooppopqrrssssrrrrrrrrrrqqqqqppqppppqrrrrsstuuvwwxxyyxxxwwwwvvvwwvuuuttsstuvvwww~x|yyzv{szrxrxtvxv|u~tsrrsssrtuv~v}w|v{u{tzs{s{s}s|tzuxvvvuwwxwwvwvuutusuruqtptouoxpzo{lzjykwmwnyn{q}rrqppp~p}q{pxounsmrmqnpooonopotoxo|n}n|m{lxlwlxmvmtmsmtmvmxmymxnxoxowowlw_uPrKqOrTt[yb{g{f{d|e}g}i~k}n}s|q{e|e~iiybugzjkq{uvtwqym{l|l|k~kkmmmnppqroqqk}h|h}h}i~i~mlef~i~k~l|m}lllkkkikh~byWkL`E]F_Uhewdvizn~pqpp~o}m|n{n{o{p{r|u|x{x|y|y~zzyy}w|w|v|v|w|v|u|u|u}v~vxx~y~y~z}y~wwuuuuvvss~uwvtsssssrrrrqqrs~s}s|s|r{r}rtuvuvvyge\\[dcmnwvtqdnblblbofsmvqxrysxtuqps|wx{v~w~v~wz}ywvuxdxfzhway`yfwm{{~}~~}~{}|}x~tb@-?f~{zywxz{}}~{~{xv~o{g{dycxcwfxgyiyjyjzkykykyjyjj~j{iygygyi{h{gzizjzjzhzhykyoxpvnwmymzm|n}m~ml~m}o{rzuyxxyvvvrusttutvtwtxrysyuzy{xzzz{{|{{|y|x}z~|}~~|x~z}~z}uyqwntlslrkrkqjpkpkpmqtpzptplrirkqkplomrpspvryuzv|u}t|rznvkoimgjdicgdgefffnouv{{}|~{|z{xzywyt{rxrtsvuxuyvyvyv{w|x~x~wt~t{uzuwutvrvpvswxx}xzt~vuvstvy{|{{z|wtrsttuu~v~z~vvv~w|y{}{~{}{|}{|x|t|q{owltiqgphqjskskskslrmtptstusvswtwtxvyzy}x}v{tztztzvzzzzyyvvuuwwyvyuwtususutvvwwwxvyuytztzuzvzwyxyyyyyyyzyzyyyxzwzvzvxvvvrwpxpyswwvytyszqzq{rzsztysxtxwwyw}vwwxxx~y~w}u~srrstvx{~|~zxwxyz|}}{zz{}||{z{yzxyyxyxyyyzy{zz{z{z{z{y{y|w}v~wvvvp`]ah}qywyxxxyyyxvu{zustx}~~~~~~~~~~{{|{zz~}xyy~}}~~~~~~~~}{|zvvvw}}ss}~~}|}~}~~~}}}}||~~|yy|viglqpmrvz}}}}}~~~~}}||{yxy|~|{{||}|{zxuvxyxxxxxurifmuvwws~h}c}g~mqx|{xxyzyvuvyz{||yvuuyzuqollgadeht}~{z{{{{|~yxoooonnnnmnnnnnnonnnnooopopprs~s}s~tttssssssssrrqpqqpqppooopqqqrrstuuuvwwxyy~xxxwxxwwvwxwvuuttssssstuvwvww~x|xzxwxrwqvsuwu|tsrrrssstu~u}v|v{vzu{t{tzt{s}s~s~s|tzuxvxwwwxwxvyuyuwvuuuttsuqwrypzmzjykwlvmwozr}trqppp}p|pzpwnumslrlqmqnpnqnrntnvownxmxlxlvlvlxlvmtmtmvmwmymymxmxnwnvowlv_uOqKpSs\\vc|g}h|f{d{d|g}i~k}l|o{j{bzc|hhw]rgvi{k}o{syqynzl|l}l~lkjlmmmnnnoqqkf}f{f{e}g}i~kliij~l~l}l~lkjijkjk~btPgD]=Y=WH_`rm{gyi{o~oqqqp}o}o}p}o}p|r~u{wzwzx{y~yxx~y}x|x|x|w}v}w}v}v}v~vvwwyy~y~yxwwvvvwv~s~s~s~s~t~uwvvutsrrrqpqr~s}s}s|q|q}r~st~s|r{s|w}rvfbgaqtvwrmnekdibg^mcuowqyrzrxr{tuz{~x{v|v~v~v~w~z~wnostmvqpqrdxe{ozx}~}}}|}{~z~y~|~}N2-Ux~~}{y{{{z{{x~o{hzdxdxexgxiyiyjxjxjxjxkykzkjk{jykyjzj{k}j|k|k|j|i{h{jznzowmxlym{m|m}m~l~m}m|pzrxxuttuttsrssrstsuuxvxtytytz{zzzzz{{{{y|x|y}{~~~~~|~z|{y{vxsvrurvrwrwpwountmtmsmrtqwppplrirkpkqkojpmplrnurxu{v}s|qwmrjlgkfichbgaf`f_dcgikrryv|x{x|x|z{{ztzsvrvtxuyvyvzvzw{w}x}x}v}v|u|szsvtstnuovqwtyyy|w}zywtssvxy}x}usrtttu~v~z}}{~ww~w}z|||~||}}|}y}u|s{rxmujsirjsktltltlsmrousuutvsvswtxuxwyzz|y}v|uztyuxyx{y{xywwwvxwyvxuvuvuvuwuxvwwvxuxuytytyuyvywyxyyyyyyyyyyyxywyvyvxvvwsxpzn|o|r{uxxvztzq{p{q{sztztzsytyvw|vvwwxxwv~u~t~srstvxy~{}y~wvvvy||}~{{|~||}{|y{yzyywzv{w|x|y{z{{z|z|x|w}v~uvvxxsmh`ci{s|xxwxyzzxxw{zw~vx~|~~~~~~~~}}|{{~}{{~~~~~~~~~~~~~~}zz|zuuvy}~ru||{|}}~}|{{|}~}|{}{sr{|ysrvz|}~~~~~~~~~}}|zyxy|}|{{|}}|}}zvuxxwvutsrqggnsrwyw~n~e}b~co{|zxvurqprvz{vqvvtuvxzvqopomighox{}}}}|{{||}}yvnnnnmmmmmnnnnnoonnnnooopooprs}s|s}tutsssssrrrrrqqqppppppppqqqqqrsttuuuvvwxx~x~xxwwxwwwyz~y~x~wutttstsstuvvvvvvv~v}v{vyvzu|t~tsrrrssst~u}u|t|u{u{u|u|u{u{u}ssrs~s|t{uzuyuxuxuyvywyvyuxtwsxrzp{nzmylvmumvpyt}vsqpp~p|o{oxnvmtlslrmrmrnsntntntnsorosnsmrlslumvmvmvmvmxmxmymymxmwmumtnxnxdwRsNrXvbyh~i~i}g{d{d{h}j}l}k|h{bzaybvc|evcritmwoxpyuzqzl|j}k~mmkjll~llll~l~lmljk}i{dza{d|i}kmmlllk}klkjijkmn~^nE\\:W;WE\\Xhm|rm~np~opqqp~p~p~q~q~r}t}uzvxvwwzxxxxy~y|y|x|w~w~w~wwwwwwxxyx~x~xxyxxxv~u}r~pprrrstu~v~uuttsrqqr}s}s}t|r|r|r}q}q{qzqzs{w~ypojeqtpmkdibgcf`d]kcuqwryrypxqxsvyuvvu~u~v~v~v~x|z|xxyzx~rxrhwj{u}~~}~{}z}z{{~G)Cr~~~~}{zyyy|{xp|hzdxfyiyjykykyixiwhwiwjyk{l}j|k{j{ay`yhzl{l|m}m}m}l}k|k|n{pxnyjzn|m|m}m~m}m|mzqxtvusprursrsqsptsttvxwywyvyuy}z|z{z{{z|w}x}z~~~~}~||zvxruruuwxyz|{~{}y|wzvztyrxqxswtuqtotmtnsntmrkskrmrmrqvu{v~t{qvnqkmhkfjdicichdhcgcgehmottxvyvzwzyyzy|uzuyuyuyvzvzvzvzvzv|w|w}v}v}u}s|rytvurvqupvqysyw{~}xusrtwwvuuuuuuv~w}||||}y~wx{~}}}}}}|}z}v|u{uzpxmvktktltltlslrnrrvvwwvwtwtwuwuwwxyy{y|x}v|uyvxyx|w}v|wzxwyvyuxuwvwvxvywxwwxvxuwuwuxuxvxwyxyyyyxyxyxxxxxwxvxvxvvwtxrzp{o}o~q|rzuwwtyrzpzqzszs{t{rzrxtw}uuvvwwwvuu~usrtuvwy}wvttux|||~|{~|~}}}{|z{yzyzwzv{w|x|y|z{{{|z|x|v}u~tvv~x}w}u~nkebe}o|wvwxz{{zyy{{y~y~|}~}~~~~~~~~}vy|~~||~~}~~}}~~~~~|yy|}xv{}||}~~yz~|y{||}~~~|{zz{||}}}~zsfVTahqw{}~~|||}~~~~~~}|{ywz||}}}~~~~~xvwvuusqpprfhpfjuyysg~[~`t~xwtqmiecfmsvuqvss{{yyuprsstqot{{wvx|}}}~~~{yxnnnmmmmlmnnnnooonnnnoppqpopqr~r}s~ttssrrsrrqqqqqpppoopqqrrrqqqqrssttuuvvvww}w}w}wwvwwxxz~{}{}yxvtststtstuuvwwvu~ttttttssrrrrrrrst~t}t|t|u|u}t}v|u{u{t}s}s~t~s|r}r}s|szsysxtzu|t}s}s|q|p}o}n{nynvouowqzv}vsqq~q|q{pyovotnsmslsmrmsntnvnwotorppopoqnqmumymymxnxnxnynzmymxmwlultntqyp{jzUwQv]zf}ikj~i|e{f|h|k}m}l}i{fzhxhvhwjvkuouqusuqvvyozk|k~l~nnmlll~k~jj~j}j}j~jhip~k|cz`{d|j}lmnnlkk~kklkjkm~oo|bnG^<WAYVfjtrroppoopppp~qrtt~u~u|uwttvyx~xxxyy}y|x|w}w~w~wxxwwwxx~x~x~w~x~w~xxwv~x~x~ustutqopqrsttttsrqr}s}t}u|t{t{t{s|q{qzp{s{v}ywzrtprjbd[d]d^d\\b[kcvrwrxsxrwrwsvyuvvuuu~u~vx|}y~y}|}~zvxhyn}u{}{zyzzyxy?,_~}}}}|~}vrppsvwr}k{dyfzizlzmzjxhwfwfvgvhyj{k{ixfzY{?{<zKyRyY{c|k}n|o|n}m|m{qyrzn|n|m|m}m}m|l|lzpwrtnrorwsrrrorntquuwyyyyyyyyyz~z}z|{z|x~x~|~~~}}{|xytvtwvyy{|}~~~|~{~y~yx~w~v}t{s{szszqxoxmvnvpvtyw|w~u{rworlnilgkfkgjgjikililjmnqqssusutvtwsxtxuyvzwzvzwzvzuzuyuyu{v|vvvv~t}u{xzyxxvvsvsvsww|zy|y~wusrsuuvvxx~wwv~x~x}{|~|z}z~yz|~~~}~}}}}}{|w|v{w{vzqxmvlujsjrkqlqnstvxxywxuwuwuvuuvvwwxxzy|x}wzxxzw}w~v}w{xxyvytxuxvywzxyyxywyvyvxvwvwvwwxxyyyyxywywxvwvwvvvvvvvvtwsxqzp|o}o}o|ozowrtvryqzqzrzs|s{rzrwuv~uuuuuvvuuv~x~vtttuvwutsssu|}}}}~{~{}|}}}~|}{|z{zzx{x{x{x|y|z{{{|z}x|u|s}s~uw}wzyxywg{ekecm}uvxz~{{zzyy{{{|||~|}}}}}~~}}qfo{~~}~~~~{{}}}}~~|zz|}xu{}{yz}~{|}~~}{z{{|||~}zxxz{z{|~}|xgIGbkox{}~}yz{||}~~~~~}|zy|~~~}|z{ywtstqnoppfcrcdpyxsh\\gzzwyzwrkd]\\bksxy|vwypjsxnmruzyx{|wvx{~~|}~}vuxynnnmmmllmmnnoponnnnopqqrqpppqqrssrrrrrrqqpppppppooprsssrrqqrrstttuuuuuvvv}v}vvuuvxxz~{}{|z{xvtttssttuuuvwww~v~utsssrrrrrqrrrrssss~s~s~t~t}v|v{vzvytxuyuzs{r|q{q{q{p{p|r}s}s~r~q~ponn}nzowpwpxt{wurr~s}s{syrxpuosnsntmultlumununwnvotorosotntnwnzn{n{nznznznzmymxmvmtmtoxs}r~n|SzTya|h~jk~k~k}h|h|j}l}n}m}l|izjxkwlvnvqurvrustqtwxo{l{k|l}l{m{lkkkjii~h}i}h}jggnj}e{d{g}k~lmmmmlk~j~jkkkl~kzlwjr]iG_@ZG\\]nm{q~q~o~qqoooppqrsttuu~tzqstww}wwwxx~x}x}w}w}w}x~xxwwwww~w~w}u}t}s}v|v|r|s}u~vutuuwsppqqqrssssrqrrs}t|wzxzxzvztzrzr{s|u}w~yw~qrf_`XaZa[bZcZlewswtwtwtvsvtv{uuuttuvwy{{{{{{vrtwy{zzzzywwv>Bs}z~~}{y{~tmif~ekrp~m}gzhyjzmys{lyguetdtfvgxi{k{hv[y@zD{Fz8y+x1xDx\\zhzl{l|m|k{pzt|r}o|m|l|l|l|k{kzmwmulssstvqsqnrmtqvtxx{x|y|y|yz~z~{}{{}xy{||~|~z}y|wzwzx|y}z~{~}}~}~}|zyywvwxwsp|p}u|x|y|v}uztxrtprlojnknlnlnnooqoqptququpuououovpvswuyvzw{w{w{v{uztztyuzv{v|w}w}w}x||{~{|{ywwtvsuuuyv{w}v}utrrrstux{}{|z}y~x~y~y}z}{}{}{~|~|~}~~}~~~}~}~}||y{x{y{{{vzmxmuiqhpjnlopsuvyxzxywxvwvvuuuuuvvwxxzx|y{yy{x}w~v~w|xyyvyuyuyvzx{zzzyzx{w{wzxyxwxwxyyyyyyxywxvwuvuvuvtvtvtvswsxryqzp{o{mzlxkvmsqrwqzqzrzr{s{ryswwv~uuuuuuuuux~z~{wuttuvttsstu~{|{{}z}z|{|}}~}~|}{|{{z{z|y|y{y|y|z|{{|xytyozn}r}u|ty{wukvc~rndkvz{|}|~{zzyz}{}{||}}~~~~~~}vgox|yww{~yy|~~}{{{{yxz}||{|~}xxz|~~~~}z{{}}~~|tu{{y{~~}~sa_uuvz}~~}zy{{{|~~~~}|ywy|~~|zw}}{xusromopogZgnpxywtolw|vvz~~{xocZ]eosw}yyyqlqwmglv~}z|~~}~~ysjlz|wqlfnnnnnnmmnnnopoonnnopqrs~srqpqpqqqqqqqqqqqpoooopppoprtuuussrrsstuuuuuuuuuuuuuuuuvxxz~{}{|zzx}vttssstuuuvvvwxx~wusrrrrrqqqrrrrssrrsst~u}v|xyxywyu{t{s|r|q{pyowownwn{o|p}q~q~qponn~n{nyoyp{u~xsrt}v|vztxrwrvqupunumumumultmunvnwnxnwnwnxnymzn{n|n|m|m|m{mzmxmwmvmsntpztso~Z}\\~e~jkkl}m}j}j}k}m}n|o|o|oznxowovpururururtquoxm{l{k|k}k|j}j~jjjijii~j~i}hhiki~g}h}j}k~klmnmlki}h}j~jkm}lyjs_lQd@^@_Sgetm}oo~o~qq~pppppqrssss~uu|rttwv|vvvvww~v}v}v|v|w|x~x~wwwvw~v~u}s|n|k{kzlzmzo{r~tutrpttrpppqqrrrrqppqrt|xzzxzxxyvzu{t{t|u}vwwqshbe[d[bZaYe]nhvrwuwtvsvswuw|vvuuuvvxyz{|||zyyxxyyzzzyzxyyI[x{||zxy|xwto~i~i~i~h}h|fzgzkzqzrzivgsfresfuiyj}k|mwiyQzI{GzCyHxKvKwLwKxSzbzn{o|p|s}q}o|l|l|l|l{l{lzmxmwmtqupxqvtpqmwpwtzx|x~xyyzz~{||z~yyxxz~z~x}w|v|w}w}x~x~y~y~z~z~z~z~|}|{ywwwvvwxvsru|uyuwtxtxtytyszptnpprqrsrtrtsuttwtwrwqvnunvpxrytzvzw{w{w{v{u{u{tzuzuzuzvzvywywyzyz{}zyxxsvsvuuyuzv{v|u~tsstrru{}}}|}||}{}{~{}{}{}|}}}~}~~}~}}||}|z{z{{{}{vzoxoukqgnimlnqsvwyxyxxwxwwvvuututvuvvwyxzy{yz{x}w}w}w|xzyxyvzvzw{y{z{{z|y}y~y~zzyxyxyzyyyyyxxwwuvtvtvtususustsutvswrxqyoxnwlvjujsnqupypyqzpzpyqwtvyu}uuuuuuuuu~x~|}|~yvuutssttstw||zyy~y~z}{}}}}}}}||{|{}{}|y}v|xz{yzywwsuoxj{n{vzvyvw|uwvizwykgv|}}~|~{zyz{}{}{||}~}tkfw~xoouzywz~~}|{|}|zwz~|}~~}ytuvz~~~}}~{y{|~|rt|{|z|}zw{{{}~~}|}zyxxz~~~}|{xtsuz~}{yuz}yvsqoomljjfn{|z|{upy|xwz~~}zoa[^ffjuxuvvtuvm`br}wz}~xqiTVv~zztdcnooonnnnooopoonnnopqr}sytxt|tsrrqpppppppqqqppoonoooppqsuvwwutsstttuvuuuuuuttttttttvwxzz}{|zzy{x}vutsssuuuvvvwxy~y}w~utsrrqqqqrrsssrrrstt~u}w{yxzvyzw~s~p}o}o{oynxnwmwlxm{o~pppppooo~o|o|o}twrty~z}xzuwsvrwqwpxowownvnumtmtmvmzm|m}m{m{m{mzn{n{m|m}m}m{mzlxlvmunroqpvr}qnd~ehlmmn}o|n|n}m}n}o}p|p{pypwpwqvrusuruqvqvpxnznzlzj{h}g~gh~j~jkjjjj~j}i~hgijjij~j~j~h~i~loomki}i|i|i|j}k~m{gsYjNdB^Meaqjym~opp~q~r~r~r~q~q~p~p~rrrrswvrwsyu|u~ttttt~t}u|u|u{v{w}w}wwvvvu~s}r|kzcy_x`whxmzo}suusqoopno~q|qrrssrqpppqs~w{zyzxxyvzv{v|v}v~vwvqshbf]e\\bZbYg`pjurwtwsvswrxuw~wwwwwwwxxyz{{{zzzzyyxyxxxywxtViwy{{|}{t~p~sxy{||yr~k~h}g}g{izo|v}nw`q_q]r\\t\\vawlxhwcrhtqv^yBzEyXx]wWvUvVv[xcylzq{q|q|p|n|l|l|m{m{m{mzmznynvoxp{ozttppupvtzy}yyyyz~{|{x|v~wyuux~x~w~v}v}v~v~v~w}w}v~w~x~z~z~z~xyxvttttttuut~s{rvqssrqrqtsxtzs{quprttutytztyuyvxxwytxrxowpyt{u|v|x{x{w{v{v{u{u{t{u{uzuyuxvwvvwvyv}w|x{xywxtyrxtwxxyxyxzw|v~utwutw~~}}~}~}}}}}}}}}|}~}~}}}}|||||~||{}{}z|zvzpxqvnrgmhmkosuvxxxxxxwwvvuvtvsvrvsvuwxxzy{yzzy{x|w|w|x{yzzy{x{x{y|{|{{|z}z}{}|{{{z{z{zyyxywxvwtvsususurururtsttutusvqvnvkujuhshrkpsowoyoymxlxrvzvu~uuuuuuu~u~v}y}||{}y}w~v~vuttutrszy}wwxx~y}{}}}~}~~}~}~|~|}wnq{xwzwxuvutvmxkyty{zxx{w|xqyw|~uju}~}~|}{{z~z~{~|~||}~whkr{~~wrty}{wy}}{z{~~yvz}}~|wrrtz~~~~~~{z|~|z}~}{wqvzvvx|}~~~~}~~~~~}|{xvtux~}||{yusuy}~~}{xwx~}zxusrrsstvsqwxuvwpku{vuvx}~|z{ui_Z[]bltvx{{zyqdfrxz}|xz|tfoubd}}z{ymtonnnnnooppooonnmnopqr{tytxuyt|tsrqqpppoopppqqqpppppqqpqsvwx}xvutttuuuuvvvvvvutsststtuvwyz}z|z{z{zzwzvusstttttuuvwy~y~y}x~vutsrrrrstttsrsstuu~v}x{zx|u{vzxuyq{p|o{ozn|n|m|m{m}n~opp~p~pooopoorspu||~y{uxswsxsyryqyqypwouosmslvlzm~mm}lzlymwmwmxmym{m|m{mymvmtmtnropoto|onkkkmnno}o{o{n|o~n}o{pzpwptptpupvpwpwqwqwqyq{n{k{jzhyf|e~fiklkjj~j~i}i}h~fhikkkkj~h}f}g}j~npnlj}i|g|f|h}i~m{esThLbF^`mkwk{n~rqq~q}q}q|q}p|p|o|o|q~rrsuwvs|t{u}u~t~s~r~r~r~r}s|s|t{u{v|v}v~v~vuttt}t|nzexZvZudviyl|rvxwtqqqlnq|qrsstsqppppru}xzyywzv|u}wxvv}vunld]cZc[`[c[ibrmvrwswsvrwrxvxxxxxxxxxxyyzzzzzzzzyxwvvvwxvpgpvxywwyx~rymxp|vxyz{uqn~l{kymyr|fvUqNsEvEwKwRvXs\\oXkQm[qotnwXyAx<xHwWwbvkvqwrxsyrzq{p{o{m|m{n{o{ozozo{n{nypzq}m}wyrsqquuyz|z~yxz{}{v{r|q~tyutvv~vvvvvv~u~u~t~t~t}u}u~v~uvutssssstr{rzswrtppqornqnopqrstrtpsptttxu{v|v{w{xzzy{uzszryt{w}x}x|y{x{w{v{v{u{tztzu{uzuxuwuvuuvtxsysytysyrxryryszw{y{y|z{{z|z}{~~}}||}}}}~}~}}}}}|||||{~{zz~zyyrxrwrthnfolqtvvxwyxxwvvuvuvtvrvrvrvuwwxyx{y{zyzx{w|v|w{y{y{zzzyzz{{{{{{|z|y}y}{|}|}{{{zzxyvxuwsvsuststststrsssstttstpulujtjtlsnqopsovoxmzkyhxtwwvvvvuuu~t~u}v}y}z}z}x}w}v}w}y}y|x}w~trt}wvvvvw~y}{|}|~}}~}|}~wlm}wwzwxvyvywtxjxpy~z~y{y|yxyy{}}|~st{}}~|~{~z~{~|~|~}}}}~~{oky~~~}xyx~x||xy|~~}{{~}zx{}}~|vqpsz~~~}~}|{{xx{{{wrpw}|vxyy{}}~~~~~~}|zyvrrx~~}|||{ywx{|}}}{{zz{{{zywuvwz{~|xsvuqrwskkkjpsv{|{z{wrj]Xcfkquvxzzyxtojm{xkjtg^vyz~{{zw}nnnmmnoopppoonnnnoqrs|tzuyuxu{u~tsqqpoooopppqqqpppqqrrrrtvwy}x~wuttuuuuuuuvvwvuuttsssstvvwx~y|z{{z{yzwx{vussssssstuuvx~x~y{w{v{t|srrssttutssrrtttu~v|xy{w|s|rzsvwtzr{q{q}p}n~m}m~nooo~o~o~o~ooppoppnpvzx|tysxsysyszrzr{qypvpsnslvkyl}mm|lwlsmrlrltlvlvmxmwmwmumsntnuounwn}nnmnnnonn|ozozo|p~n}o{oyowpsosouovnwnxpxpwmz]}W|g{lwiwhzg{f|f{g|h}ii}j|k|i|h|f}fhikkjkj~h}f|f{h}k~mml~j~j~i}i{jzl{owgrSfM_Oaepgtnyq~rp~p}p{pzp{o{oznzmzmyp|rstuvvuu~v~v}t}r}p}p}p}p}q}q|q{r{t{u}v}v}utttu~u|tynwgwcvgviyl|swyxxvurmnqrqrttsrrrqppru}v{w{wwxxvv}wumg`Y`XaZ_\\d\\ldsnvsxsxrwrwswywxxxxxyyyyzzyyyyzzzzzxvttuvxwrrtvwwttuvw~q|r}uwwy}~~{vso}ivarWmJvCELy\\xew`xTyKqaq[oXpWqctovfyOz@yJxYw]w_vewoxrxsyqzpzn{n|n{n{ozozn{n|n{q|r}o|{|wwrstvw|z{}wwz{{{s{o|p}sxvu~u~uuuvuuutsrrqp~psuutsssrrrr|qxptqprlqirkrkrlqmrnsoqmonqrutzv|w|x{y{z{{x|v{u{u{x}y}z~z|yzxzxzv{u{t{tztzuzuytxtutwuvuuvqvnwpwoxnxnypys{w}y~z{~{|||}~}}|||||||}}}}}}}|{{{{{{zyyy|xwxuxvvmrjsotvxwywxwxvvvuvtusururusvuwwwyxzxzyyzxzw{u|u|v|v{wzwzxzx{y{zz{y|y|y|||~|}{{zyzwyvxtwsvsusttstsssrsqtruruqunvmvluquws}q|pxpxo{m}i}e{ryyyxw~wwvuu~u~u}t}u}w}x~w~w~v~u}v}w|x{x{yyw|vx~}uuuuuu~v}x{zz{z||}}}|~yno}txyxywzwzxzyryty~z~{{z}z|z}{{}~~{~w~y~|~|~|~zz{~|~}~~~~~~~}{u|~~~~|x{ywz~|yz|~~~~~}}~~}|{|~xy||}~~||}~}wsrtz~~~{yxy{~~{wutv|~~xz}{|~~~~}|z|yttz~}|{{|}}|{{{|||{|}|{yxwwtvy|~{xy~}xu{|sgcgsvxyz{|{yzwfaqsqrqpmouttvn^k~}p][iddz}|yxznmmmmmnoopoonnmnopqrs|tzuzuzu|uusrqpponopqqrrrrqqqrrsstuvx~z}y~wvuuuuuuttuvvvvvvuutssrstuvx~x|z{{z|x|wzyx{v}trrrrrrrstuvwww~vtsrrstuu~u}t~srrrttsst}u|xz|v~s}t{vzxvzs{s{r|p}o}o}n}n}n{nzmznzoyo{o~opoonm~m~r~x~w|szrxrxryryrzrzryqwquotmulxl|m~m{lulpmqmumumtltmununtnsotouoxo{o|nmnnoooon~n|ozoyo{o~o~n|nzoxouotmumwmxnxowpwgzC}O|j{kvgtdr`v^tZoZoaxfi|i{h{f{b{b|f~iiiii~i~i}g|f{e{g|j|l}l~l}l~l~m|nynwnxowjv^lQdUh]lgsozr}r~p}o|nznynymymylxkxlxo{q~stuuuuvv~v~u}r}p}o}n}o}p}p}p{q{s{t|u}u}t~sttu~u{vxvwtxqvlwjym}s~xyxxwvtqopqqrstsrrrqppqsu}w}yyyxwvxwope^aYbYbZf^mesovswsxrxrytw{xxwwxy{{{{{{yxyz{{{zzxvttvwxvrrsttsrsvwwttuuvvz{~}wq|dwVrJsA}@FR`ykxkyf{ZzEsPreoan_parlutyqzfy]xRxJwLwYvfvnwrxqyqyo{n{m{mznznymzm{o{r|t|tzx{vytusurzrtvp~vz~{y{rzp{q|s}w~v~u~tsstttttssrrqqqsutsssrrqq~qxrvqsqorhrdrgqnqlsltlslqiokrows{w|y|z{{{|z|x|v{u{x|z~{~{}{{zzxzvyuzuztztztztzuzu{uyuzuyuvunukulvkwkxkylzr}vy{||||||}}||{|||||||||||||{{{{{zzyyx}xzxxywwqunutwwywxwxvwvuvtvsururusvswuwxwyxyxyxxywzv{u|u|t|s|s{s{r{s{u{wzyy{y|{|}|}{|zzzxyvxuwsvrurtsustststrsptpvpwownwmwqw{vurqp~pnjhg~rzww|v~uuu~u~u~u}u}t}u}v}v}u}t}t}t~t}u}v}x{x|y|{z}uttutt~t{tzuxvyzz}|~|}|{|{trt{vyyyyyyyzyx{x{{{}{}{~{}{}{|}}}|}{}z|~}}~{z{|}~~~~~~~~}{z~~~}{wzzy{~|zz|~}}~{}|~~}yyz|}~}tw{}}~~||}~~zwwx{~~|yxz~yuyxx}~~xy~~z}~}{{zxwx}~}{z{{~}|{{|zz}~{ywvutv{}~}zx{zw{{wnfjtzyy{}~}}|}vquusrpmfgnpnmkdn}zp^V`hly~|xtwwnnnnnnooopooonnopqrst~u}u|u}vvutrqpponopqqrrrrrssssstuvxy~z}y}x~wvvvuuvuuvvvvwvwvvuttssttuwx~z||z}x}w}w{wyyv}tssrrrqqrstuuuutsrrsstu}u|t}rqqqsssrrru~y|{y{w{u|t{wwzu{s|r|q|p{oxntmsmtmvmumsmvn{oppo~n~n~psut}r{qzqxrxryqyqyqyrxqxqvovnvmwnymxlrlpmuo}o{ntmpmpnporptqvqyp|o~oonnnoooonn~n|ozo{o}o~o}o}o{nzmylylylymxovpvfxIzc{lv_nWkSiRiSgQkSt]ze|gzfydzaz_{c|h~jhggg{g|g|g|f{fzh{i{j{j{l{m|n|ozowownyn|k|ftVl_udtlxs}t~q}n{mylxlxlxkxkwjwjwkxnzp}rtttuvuu~u~t~r~q~o~o~o~p~p~p}p{rzt{u|u}t~stt~t}t}uzwxvxuwqxnzq}twwwvvvtrpoooprsrqqqqpopqswzzxxxwyyrzjfe^d[d[g`ngsnvsxrxrzs{v{}|zyyy{}}}}}|yxyz{{{zzxuttvyxuqppqrpprwxwvussrruw}}vzjvWrIxDCEyMu^ukwlykzo|p~]xDqLiamcm`oerowx{z{szfzUxHxOw`whwnxoypyozn{m{lzlzlzl{m{p|r{sytuqsornpmpkoggli{vz|{w{szs{t|t|v}u~t~rqqrrrsssssrrrrstssttsts}ryrustrsrrsqsgqcpiqitjvjtirfphtnyu|y|z|{{|{|y|w|v|v|y}{{~{|{{zyxyvzuztztzs{s{s{t~vvvv}vyvpuiuhvhwhxhyjxp~ux{||||||||{{{{|||||||||||{{{{{zzzzyyyy}xzwwwvxvxwxwwvwvuvtvsvsvsvsvtwuwwwywxxxxwxwywzv{w|w|v|t|t{s{q{q{s{tzwyyy{z{{{|{{{yzxyvxuwsvrurtsuststrtqtouowownwnxoxux~wwurqqplgj}xz{w}v}u~tu~u~u~u}u}t|t|u|u|t{s{s{s}s~tuvwx}{y~vuut~t~r|ryqxqvsvwxzz}{~||y}txxu~t}w{xzyzyzyzyzzz{z}z~z~z~{~|~}~}~}~||~|~z{{|}~~}~~~~~~~}~}~~|uwz{|~|{}~|zwy|}zuu~v~}~ts}|}~}}~}{{|~~~}~{{}{~qox{{|{~|xuv|znr}{{zxy{}~~|{yz{}~|||{xy|~{wsstx~}{xwz|~~xwz}|wqsxxttw|~}||||zywsqonfgorogfkvzwqcW]ks{}ulo{{nnnnnopppponnnnopqrstu~u~uvvutrqpoooopqqrrrststtuuuvwxy~z}z|y}x~xwvvvvvvvvvvwv~v}w~v~vutstuuvwxz||y}v}u}u|u{wxyv{u~ttsrqqqqqrsttsrqrrrss~u|u|t~rrqrrrqqqsuv}v{vxyu{uzwxyvys{q|o{numpmrmumwmvlslslxn|ppo}o~prrpop}p{pyqwqxqxqyqzr{szszryqxpxpyoymwlwmzq~r|qwotosospuryr{q}p~oooooooooonnn}n{n{o}o~p~o~o}n|m|l{kzlymwoupugvbwnxhsWgLgEfLbRiQuSy^yexhxfxcybzd|e~fggggf}e|e{f{g{gzhzhyhyiwkxmyn{m{m{l|l~lj~gy`ug}n~s{u~tp|lsjpjujykyjxjxjxjxkyn{o}pqrsstt~ttsrqppppqq~p|q{r{t|s}t~t~t~uutts|rzqzpzn{q~rttttttsrpnnnnpqqppppooopruxxyyxxxyv~omiaf\\e\\h`ohupwrxsxrzt~x~~|{{~}|zyzz{{{zzxuttwyxuqnopponpuwwwusqpprux|v{`yLyDDGxPnZscsjviyn|s}s~t|`sJfVkbmeofriurzw|u|r{my_ySx[xbxhxmynzpzn{lzkzk{j{k{m|o{qyosmlgfbbcdhgfdb`jjyw}zz{v{uzu{u|t}t}s~s~rqrssstttts~r~q~q~q~rsstuu~v|wxwvvrururstswt}tupen[pbtgugserdrivrz{{{||{}{}z}x|u|w}u|w~zz}z|zzyywyuztztztztzs{s|t~vwyyx}wvvmvfvfwfxfyhzotx{|||{{{{{{{{{{{{{||||||{{zzzzzzzzzzzy~w|tzsxuxyxxwvwuvtvsvsvsvsvswuxwxyxzxyxxxvywzwzv{y|z}z}x}x|u{s{s{sztzvzyzzz{z{z{z{yzxyvxuvsvrurtrururuqupuovowownwoxrxvx|yx~w~u~uvtpjtz~y~v}v}v~uu~u~u~u}u}t|s|t{tzsyrxryr{r|s~u~u~uv{zvv~u}u|t|rzpxovotputwyy{z}||y~uzswyv{wzxzyzyyyyyyzy{y}y}y~zz|}}}||}|~z{{}}~~}zz{}~~~~~~~{~z~{~tt{}~~|~}wtvz{xsq~v~~~~~~rw}|}~~~~~|{ywz~|{}|s~hkw|~|{~w~mnrwzkk~~}}||z{|}}}|ywxy|~~}{xz}}{ywwy|~}yxz|~|vrt|~~~{z{ytstyzyvvvyzzxtqoplovyujdkuztm_^oy}|shwnooooppppponnnnopqrstuuuvvusrpooooopqqqrrsstuuvvvvvxyz~{|z}y~xwvuuv~vwvuuuvv~v|v|v|v~vuuuvvvwy~z{|x|u}t}s}u|vzwywxyw}utrrqqpqqrsssrrqqrrsu}v|u}srqrrrqrrrrsss|szww}u}t|uwxs{o{ltmpmtnwnxnxmulslsmuoyo{o|p~ppolln~n|ozpzqzqzq{q|t}t}u|t|t|s|r|o{m{l|n{qzs{s|r|q|r|s|s}s~rqpooooooppponn~n}n|n}o~ppo~n~l}k{kzkxmwouotjtlupvms]lMmFlMgSsRwUi^pfwjxixeyc{d|e~fffghg}f|f|h|h|hzgwgxgwhvjxlxm{k}jjjjhhgkr~u|ur}hsbdddkqk{jzjyjykykzl|m}m}n~p~pqqrs~ssssrrrqqrrq~p|p{q|s}t~t~uuuu~spo~o}n|n}opqrqqrrqpnml~l~loponmnnnmmmoruvxyyxxxv}nkj`f\\f]iapjvqxsxrwrzuz|z{}}zz{{|||zyxvttwyzwsonoppo~m~orvwwtsrr}s~uwzy|dyLtCFNk\\pduhvkwlzm|o~p~n|gyWpKhXkephrgtnxs|s|p{pzmzcz]y`yfylzn{p{n{m{k{j{j|k|l{nxmqije`]YYX]^gbc`geptyy|zy{w{w{v|v}t~r~rrsrstuuu~u~u}u|t|s{q{q~qqrsu~wzxwytzrzrypypwpuvt|sspolWm\\sctcrarespxz{~{}{}{~z~y}w|u|v|t{t}w{~z}x{wzvzuzuzuzuzuztzs{s|vxz{zzywwhxfwdxezjpux{~|~||{{{{{{zzzzzzz{{|||{{{zzzzzzzzzzyyv}q{ozsyyyxxvwuvsvsvswtwswtxxx{x{xzxyxxyvzw{w{v|w}y~y~y}z}z|x{xzxzxyyz{z{{{{{z|z|y{yywwuvsuruqtququpuovovowpwownwoxrxvw|xx~w}x}y||{{|x|u{|x~x~v}v}v~uu~u~u~u}t}t|s|s{syrwrvrwqzr{s}u}v~wv{|wv}v{vzuysxqwouosptsvwwzy~z|zv|uzvxwxxxyxyxxyxzxzx{x|x}x~y{{|}}}|}{~{{{|}~~|yvvx{~~~~}~z~x~y}rs~}|}~~~{wxyywsu~y~~~|~zy~||}~~~zuvtkiv|yynkqy}~y~lorpuy}~ur}~}}~~~~~}}||{xutuw{}}{{||zvtxyyy{|}~}|||uqt|~}{zxwvvvtqonotxwurrsruz|zrpqu{utkjtx||{z}~~|wp}~noppqqqqppoonnnopqqsttttuutsqpopppppppqrrrstu~v}w~wvuvwxz~{}{}z~zxvuuuvvvuuuuuu~u}u}u~uutuuvvwy~zz|w|s|r|r|t|v|u{uzvyyw{v}srrqpppqrsrrrrrrqrt~v|v|u}rqrrqrrrrrrrrr}uzyv{t|t{vyxqzlvlsmvnxnynzmylukqlonpnuo{o~oomkklm~n}o|p|q|q}r~tuu~u~uus~o|l|l|nzqxsys}ssttt~r~q~poppppppppppooon~nooonl~j}i{ixjwlvountltntptpr`nKsIqTmVnXl]iWu[{f|h{f{b{b|d}f~ffgii}i|i|j~jhtfqevgwgwjyj{k}iiijjhhjns~t~toxcj]abdjnkwjzjzkzl{l|m~l~l}l}m~noop~q~qqrrrrssrqpp~o}p|q|s}t}u}v~vvt|u~so~m}m}m~mnoooooommmkk~j~loqpmkkkkkkkmoqqstvvuusxlhi^f[f]jcpkvrxsvsvs{v{~{xx{~|zz{{||{zywvvvwz{{wrop~q~r~p}l}i~osvvuvw}vzv|v}vxzp}SyDHYplykwjwkxlzm|m}m~l}n{fsUk\\lnqurorqvt{s{rzp{o{m{gzbzdzl{o|p|o|n{l{j{k|k|l{kthiba[WSQ[Vd]fadbqqw{|z}{||{|{{z|x}u~rqrsuwxyy~y}y}x|w|u}s}r~rrr~s|t|wxytzr{r|q{p{q{pyswzustqwk`jTq]s_r_sjuwz|||~{y~x~v|t|u{tzszw{z}x|wzuzuzuzvzvzuztzrzrzt}wy{|{{~ylxewcxg{oswy~{}|}||{{{{{zzyyzzzzz{{{{{{{zzzzzzzzzyxxw~s|r{vzzyxxvwuvtvtvtvtvswtxyy}y|y{xzwywxxx{x|x}w~x~x}z}||}{~{}z|z|z|{|{|||||{|z{yzyywwuvsuruquqtpupvovovpwpwownwoxqxuw{v~vvw~w}y|{||{zy}x}x}v}v}v~uu~u~t}t}t}t}t|s{syrwquqvqyszt}u}x}{|yz|~w~v{wxwxvwtvruptpsqtstvtxu}y{zv}t{uyvywyxyxyxzxzx{x{x|z~z~{{||}}}}~}{~z{||}~~~~|yvtsuz~~~}~{~}rs~~~}{}~~~~zx~y~z~z~{~}~~~}{||{|}~|qjnphgw~zxqswz|{{}|wxvmkr~{~}{|~~~|||~~}|{zwsn~nq{|}~~{wurnpstwxxz{|~~}~~}ywwz}~{zxvpsroopplmsuuttsuwyz{{{{|zuvvuvw|{lit|}}zvy{zoppqqrrrqpoooooopqrssttutttrqpoooppppppqqrstu~v|w}vvuuwxz~{}{}{~zywvvuvuuutttttttttttuuuvxyz||y}u}t}s|t}u}u}t}t|vzwxyu|tsrqqppqrrqqqqqqqt~u~u}v|t}rrqqqqqqq~q~qqqr}tztxtwuwuwpzlxkvmznzn{m|l|lyktkollmqnyoonlkjkklm~o~qsstuttvvto|k|k|nyqvrwrzr|s~tuus|p{o}nopppppppppppoonnonm}j|hzgxivktltntotntotpssqemOsQp\\n`n_s[yY|_}e}c|`{_z^za{c}degik}k}k}l~jgpemevgyhzi|i}i}h}h~i~j~ighjnstsrxjqeodqiukxkykzm{n{n|m~l~l}k}k}l~mnoppppqqqqrq~p~n}m}n|p}r}t}t}u}u~uut~t~q~m}l|k~k~kmmmmmmkjjjkkjlpsromkjjjjj~k~kkkkmopp~q{pumijah]h^jdpmvrwsutwu|x||}}v}rtw|~|zz{{|{{zywvwwyz|}{uqq}r{s{qzn{h|l}n~q~q}o~o|qyowpxryu}wxsZIQxizukvjwkyl{m}n~o}q}szqvptprzs|rwqutvxwzuzs{s}t|s{l{f{k{m|q}q|p{n{lzl|l}kziqdd\\YTQNO_Xh^c`ii{z}|~|||~}|~}z~u~rrstxz||~|~{}{}z}w~tssssstzvwyszp{q|r|q|o|p{tzxxvtsq{lkkToYr\\sbtsw~{}||{zxv}u}vzvuuuy||~x{v{uzuzvzw{v{uztzryryt{v}y{}}|{znyevewl{u~wyz{||{{{{{zzyyyyyzzzzzzzzzzzzzzzzzzyxxwxw}wzzy{xywwwvvuvuvuvuvswtxxy|z}z|y|w{tzvzyz{y}y~x~y}{||{~{z~z~z}{}|}}|~|}|||z{zzyywwuvsuruququqvpvpwowpwpwownwnxpxsxxw}vvusqtw}zz{y|x|v}v}u}t~u~t}t}t}t}t}t}s{syrwqvqvqys{t}v}{{~y{}z{}v}uyvvvvwvxvvuuuttttususwt{w}y{v|szuyuxwywzxzyzy{z|z}{}|||}}}}~~~}~{{|||}}~~}||zwsrw~~~~~}vr{~}z|~~~~z~w~{~||}||}~~}}~}{rhnvuu}~|}}wuvx}|vtw{|xqmw~}}y{zz|~|zxu~q~i}h~lx||}~ymb`gqvxz~|}}~{|}|z{|{{{{|}|ytrlrpnqrvoouxwwvuvwvwx|~}z{zxvxygU^rz}|yvvwwpqqrrrrrqqpppppppqrrssttttsrpooooopppppqqrstu~v~v~vutuwxz~{}|||}z~zx~vvuuttsssssssssssstuuvwy{}~~{~w}u}t~ttsst|tzxw|v~trqqqqpqqqrrqppqrtu~v}t|t}srqppp}p|p|p}p}ppq~r{qzpzoynxmykwkwl|m|m|l|l}l|lxkplkmonxp~pomk~j~k~k~lmortuttssuwtn|i{i{mwpuqtququqws|uvszpxn|mnopppppppppppoonmm}kziyfwfuhtlsmsmsnsntnuottogjTmZnbnkqfyZ|]saq`w^z]z^x]x_y`{a|c~fi~j}k}k~k~igsfpevg{h|j~i}i|i|i}j~j~iffiorqruzowiwhxiykzlzlzn|p|q{p~m~k}i|i}j~klnoooooooop~o}n|j|j{k{n|q}r}s}s}u~uusp}m{k|j}i~i~j~mmlkkiihhijj~i}l~puurpnnnmmllkji~i~jlll~n{ownslkkci`kepnurvsuuwv|y|{{{s{p}optx{||zxxz{{|{{zxwwxyzz{|{wsr|ryrxqxpzk{j{j{kyexaybykxfvcvmwtzv~wraP]up|p~jyjxlxmwnzp~r}u}wyxtxsztzsxqwpwrwtxvxxx{x~y~z}w|n|k{m|t}u}t|r{o{m|l}k{isccYTOLPPc[e_dcos~}~|~{{|||~}z~tssuw~{~|~~~~~~}}|||z~wtrrsttvywszp{q{q|q|p|n|r{zzywurp}mrl^oYr]tmu{x{|}||zxw~v~wywtxr{}|}zyxvzu{u{w{w{w{uzsyqyqytzw|y{~}~w~q{nygvgwr{{z{{|||{z~z}z}z}z}y}x}x~yyyyyzzzzzzzzzyyyy~zzzyxxwxy}zz|z{yyxxxwwvvuvuvuvtwtxwy{z|{|z|x{t{uzyy{y}y}z}z|{{{{}z}z}{|||||}{|{}|||{|z{zzyywwuwsvrurvrvrwqwqxpwpwowowownxoxrxxx|wwtspnou~x|yzyv|u}t}s~t}t}t}t}t}t}t}s|szrxqwqxr{r|t~x}}{~y~y}x~v}typvrvuwxwxvxvwuwuvtvtvszu|v}z}v|tzuzvyxzxzyzz{{{||}~}~}}}~~~~}~~~~}}||}~~~~}}~~}xux~~~|z|~z{yrw~}{z}~~}}~~{~}~~~~}|||}~~~~|{{}~{~yqx~~~|zyxvvz~}~x~w~z~~~|vrz~}~~~|vyyz|~~|xtr~n}f|c}d~t}{|}xjbdinpqqruvy{}}zx{yvwyz}}|{{{z{zxqpmromoqrqv}}zywvvussty|}}~}|zxxzu[M]px~|wuvwwqrrrssrrqqqpppqqqrsssttttssrqpooooppppppqrstuuuutsuwwy}{|||{|{~{~zxwvtssrrrrrrrrrrsstttuwy{~|{~w~t~srrss~s~s}s|uzzw|u{s|qqqqpppppqqpnoqrsu}u}u{t|t~rppo|o{ozozo|o~o~p}q{q{q{ozmxlykxkyk|k}l|l{l|l~k{kqlkmmoup}qqn~l}k}k}k~lmoruvutssuwtm|h{jznvptqsprprqts{uu~rxowm|lmnnoooppppppppoml|kyivgtetftitntntmululvlvmupqgiZj`ngqjskvbqaeYcVn]w[wVuXtYu\\y_zb}e}h~j~j~jj~i}gtgsgwf|f~i}i}i|i|i}j}k~ifehoqmop{nxn{k{kzkzlylyn|p|r{s~o~i{h{i|i~iknooonnnnm~n}n|l{i{gzhyj{l{n{p|q}ttt~r~m{j{j~j~i~i~j~lmljihii~j}k|l|k|kzl{qvwusrstsrqommmlnqrqn~m|ozntljjbkepntsustuvx|z{}zwzszqzn~kkmnooqvxz{{|{zyxxxyyzz{|{xtr{rxrwrxqzn{l{kygwZvQw`xnxcv[uguuwvzw}ve}V{k|p}l|izkylsminoqzwu|vwrniqjzt{szqxpxpxqysyvxyx|x}{}{~v}p|o|v|y}x|u|q|m|l|k|jwfiYULIPQg_cbimsz{|}{}{}{~{||}}y~utvwy~}}~}}}|~||}zvsrrsuuzwtxqzozq{p{p{p{q{w{zzxvqp~nwnkp]s[uxv|y{|}}|{yxwv}w|xzz{}|w{wxyuzt|x|x|w{tyrxpxrxtywzy|{y~r~o~p|sykvjxu|}{{||||{z~z|z{y{y{y|x|x|x}y}y~yyyzzzzzzzzzy~x|x|y}yyyyxxyz|||{{{zzxywwvvuuuuuvuwuxvyzz{{|{|yzxzyy|x|x}x}||}{z{zz{z{{{|{|z}z}{|{{|z|z|{|{{{yyxwwtvsuuvvvtwqwqwpwpwpwpwpwoxoxrxxx|xwwwupjltutxzu}t~s}t}t}t}t}t}t}t}t|szrzqyrys|s}u~y|~zxwv~v}rzkwltswxvzvzvzvzvyuwtwtxszv|y{w{u{u{vzxzyzzz{{||}}}~}~~~~~~~~}~~||}~~}}~|y|}~}z{}~|z||vv}~zz}~}~~|z|}}{||}}}||}|{z|~~|y{{z}||zzyzzz{}~z~z~}~}~~~~xqu~~}~~}}x{|{|}}}~~}ytqo~m}b|]|`}r~}||}zqjlnnkgddkvyvvzzwyyutw|~}zxxvssrtssrnntsqty}{zxvssqooptxzuv}|zzyzzp^`ksw{{xwxyyqqrrssrrrrqqqqqqqrrssssttssrqpoooooppoppqrstttttsrsuwx}y{z{{|{~z~zywvusrrqqqrrqqqqqrsstuvxz~|z}w}t~rrrrs~t}t}t|t{uxyvzu|s|s}rrqqpoopoommoprs~t}u{uxt{s}q~p~n|n{nznyn{o~o~o|pzp{p|o{mzlzkzj{j}j}j|j{j|jj|kqkkmqovq|rqp~n~k}j}k~mnprvwvussuvuo}l|nzpvpupvpvqvrxt}tr{pumtkwjzk{k|l}m~mnooppppppnm}kyiuhsgqergsjtquovlwkwjwkwlwnuioeoirkslsnsgiac\\cZp`uYtMrPrTsXu\\w^zb|f}h}h}h~i~i{fshsgxd|c}g}j|k|k|k}k~k~jhdgqnknq|r|s}o|l{jzkylxmyoyrzr~n~i{hzi|h~h~kmnnnnmmm~m}m|m{lzizfyfyhyjzl{o}p}tutrn}l}j}j~i}j}k~llkihij~k~l~m}n}n}l{m|quvvtuvwvuusrqooqtxtn~n~o}o{msjakdpnsstttvvxzz|zyztzq{o{n|l}m~n~prsuvxy{{{zyyxyyyzzz{{zxurzqwqxrxryozlzjxfvYuKw`wmycv]tdsuuvxv{r{gzb{s}r}l}j{jzlxmloiqgvczitihcmezs}v|tzqypypzqzsyvyzy|z}{~z}v|q{y|z}y}t}o|k|j{jzk|muecJJPPkagfpvv|{{{z|z}z~{|}{|}x~vyxw~z}}|~||~||}}z~wursstu}wwyryqypyrzqzqzszwz|zz|zw~sq~ozpsqjtavzwzyz{|}|{yxwwvwyz~zx{wyxuzu{x|y|x|uzsyqwsxtwyv{u}r~n}o}t{wyovmwv{}|z{{|{{zy}y|y|x|x}x}x}x|y|y}yyyyzzzzzzyy|x|x{xzx|x~yyxwxyz{~{z~y}x{vzuxtwtwtuuvuwvyyz{{|{|zzyyyx{w}v~v}z{{{x|w|w|x}x}y}z~z}{|z{{{{{{|{|{|zzxxwvuwu{u|vvwpwpwpwpwpwpwpwowoxsxyx|x~wwwxvpjmts~uw{t}t}t}t}t}t}t}t}t}s|t{s{rzszs|s}u}z{xwvu~t}p{mxnwpxtwvwww{w|w{vyuxtxuywzwzwztztzu|w{x{zz|z}{~|~}}~~~~~~~~~~~~~}}~~}}~~yz}~~~}|}~~~~~}||~~yv|~~~||x|xz}~~~{{||||{|~}}{|}||zzzz}}yyzyyz{{}~|~{~{~|~}~}~}~~zrr~~x~|~~~}}||{zz{|{vrpp~l|a|[|`}r~}|||xtrrrokilnpurlnw||zzvux|~{wuwysmruutqnpvxuw{|zwsqpponmmnvukt{{zz|}ywuvtsv{{ywyyyrqqrrrrqrrrqqqpppqqrrrssssrrqpppoooppopppqrssssssrrtuv|w{y{y{z|z}zyxvtsrqqqqqqqqqqqrrrtuvxyz}|y}vtrqqs~t|u|u|u{uzwx{usr{s|ssrqqpponllmnopq~r}txuxtzr{p}n}m{mzmzm|m}m|n{o{o|n}n}l}k}j}j}i}i}i|i|h|h}izjoklmuo|q~s~s~rpn~k~l~nopruwwusssttr~p}pzpwpwp|qqrts}pxnslqirhththtivkxl{m~noppppponl|jwhrgqfpfqhtkwuzpzkyjxjxmxoyoymvkumwnxoyozgsam^g\\narZtIpIqNqUrXt[v^yczf|f|f}i}i|esgueya{^|d}i|l|l}m}k}l~lkjhlkjnq}o{ozm{k|j{kylynyoxpzn~k|h{h{k|j~i~kmnnnmml~l}l|l|k|k{izhzfxgxhyhzm}puuusqnki~i~j~kkkjiiklmorssqqrrrtvwxxx~x|x{v|u~tstuxyvq~p}o}o|mwkclepmsrstsvtywzwztzq{m{k|m|p|r|s|t}uwyxzzzzzyyxxyzzzzz{{yvt}ryqxrxqyqynykyiwcuRtFwbxkydv_t`stsvvtyrzm{o}u~qm}jziyjzjxlqnbo^rcldd_kdzs~y|v{s{r{q{r|s{u{w{zz|{}{~w}w|z|y}w}u}p}l{kzkxl|spvQSPMkblmvy{{}z}y~yyz{}z||z}z~~z~x}{}}|~|~|}|~}{~wttsttuv|yv{tzrzqytxtxtywx{yz{~|zw~tr{qxr{tpv|x{zz{||{yxvvv~uvvv~v|yyxyvzv{y|z~y~w{tzswuvwuzr|q}r}r}r}uztytvrwx{}|{{{{{{zzyxx~x~y~y~y}y~y~y}y}y}yzzzzzzy}yxxxwywywzx|xyxxwxyzzyx~wzuvttsttttuvvvwwxyz{z|{|{zzyywyv|t}u}x{zzvzu{t{u|v}y~y}z}z}y|z|z}{~{~|}z{xywxu{u~uuvvovpvqwpxpwpwpwpxpxtxzx|w}wwwwx}wql~t~vuzzu|u}u}t}t}t}t}t}t}s}s|t|t{t{t|t|u{zx}v}t|s{r}rt~t{ozkyoxqxsxwxyw|w|vzvzwzwzvyuzszs{u}x}y|y{|{}{~|~}}~}~}~~~~~~}~}~}~~~~~~~~~~}}}~|utvxz|~~~~~}}~~|~~{u|~}{xysp{~~|~~~~~~|}}}}}}~~}||}}|zxwwursyx|}~~~yyzz~{~|~}~~|xpvs~y~~~|xuuwwwpnps~n}_}Y|a~s{|}|ywwxwtstxyxrignv||yy{~}|ywuw{zwwuutpmr{zxy{zxurppnnqv|vioruy{|{zxot|{wvx||zxxy{rqqqqqqqqrrqqqpppqqrrrrrrrrqqqppppoppppqqqqrrrstssrst~u|u{wzx{y|y|y~yxvtsrqqqpppppqrrrrrstvvxy{|}yvsqprt}v}x|y|x|wywvttt}u|s{r}r~rqrqpnmmlll}l|m{p{s{s{szp|n|mzlylylzkylyl{m}m~mlkkj~i|h|h|h|g|g|f{gwinkmmxnqs|u}vurpoppqsuwwvsrrrrqp}pzovoxo~pppqq|owmskrhtgtgsfrgrhtiwkzm~noppooon~m{kwirgqgqhriskwvzqzkxjxnyrzr{q{nzlzn|o}olf}aw^i]kcs`zMsDpIpTpWrWsZv_xdzd{d{g}i~ewg{e{`{[|_|d}h}l}m}m~m~n~nolfhjln|mylyl{m}k|lzm|m{nzn{l|j{i{i{l}k~klnonmml~k~k}k|k{j|i{i{hzgxfxgyh{m~qvvuutqlj~ijkkjiilopprtutqrsomqtuvwxy|yzyzx|w}v~vvtrqp}p|o|p{nzmlnhqmrrrurwryszrzqzo{m|m|p|r{szs{s|t~vxy{{zzzyxxxxyyyyz{{xt}r{q{qzqzqypylyhxbvZtHsBwcxkyew^t\\srsvvuzu{s}rpnmj|hyhxg|i~kqkjndi`d^jcwq}x|w|u|u|t{s|s|t|v{xz{{}{}y|y|y|w|u}w~t|p{oyowp{uvadSKfaor{vyxwwwxy~y}z}|}|}|}y|||}{}{}||}}~y~urtuvvw}xz{v~u~t|szvxvwwxyw|z{~}{yyvs}s}tt}wx~z{{{{yvus}s}t|t}t~s~t}r{uyvywyxxzz{{x}v{uwwuxs{s|t|t|t|t|tzsxtuxw{|}|{zzzzzzyyxx~x{yzy|y|y}y~y~y}y|y}y}zzzzzy}yvxywzwzw{w|xxxxxxxyyxv|twspsososqttvuwvxxzy{z|{}{{{yzxyvzu{v{xxyuuuttsutwuzx}x}y}y}x}y~z{||~{|y{w|u~u}uvtvowpwpwpwpwpwpwpwrxvx{x{w{w}wwxxx|vq{uyz}x|yx{v}v}u}u}u}t}t}t}t}u}u|v{v{u|u|v{yw|tzrxpxpzq}s}t{o{mzkylymxlxsx{ww{x{x{wyvyuytyt{u}w~x}y|||}|~|~}}~}~}~}}~|~|~|~|~}~}~~~~~~~}}{vwz{|{{|}~~~~~|~}~zyz{~}~wy}{uxts|~~~~~}}}~~~~|{|}~}{z|{xstsstrsvvz}~}~~zyyzz|vpu~|~|xusuuupnqtr~f~`~hu|}}}{zyxvtuyyxvnhkrw}~|{zvssuwwwy{|{xxwsqtyxwvwxxwwwtpnpw~wbo{x{{tl^i}~}|}~{wuvzrqqppppqqqqqpppppppqqqqqqqqqqqqppppoppqqrrrqrstuttstt~t}t|u{v{x|x|x~xwutsrqqqqpppprrrrrrrsuuwy{~}|~xtrqqsu}x|z|y}w|t{zxwwuztvsvswsys}t~sqpnlki|hzfxgxiylzp{q|q|p}n{mykwkvjujvjzk}k~kkkjj~i|h{g|g|g|f{f{fwhqipkwmzq}u}v~yywusrpp~ruwvurqppqpo{ovnsnun{n~nn~n|mzmwltjtivgxfxevetfsgtiwk{mnoooooo~n|lxjuithshrisjuuxrylwkwryu{u{rzo{j|h}i~khd~a`oaoeydXyHqIoTqYrXsYu^wbzczbzf|i~gzji~e}`}Y|Z}a}i}l~m~n~o~p~pphgiln}o|q}s~tqs}q|izhzj{l|j|i{j|l}l~lmnoonmk~k}j|j{j{i{izizh{gzgyhzi|nqtuuuutonmmmmmllmooooonoonmmnprstuwxx}zzzzx{x{w|v}s}q}p|p|p|p{pyp|oupmqprsrvqxqxqxpyoymzn{o|q{q{r{s|s}t~vxy{{{zyxwwwxyxxxy{zvs|rzqzr{qzqyoylxgweu]sKsHvfymzew\\tZrrstvqzp|n~mlkkjh}f|e|gzjynxprnkicfbrl~x}w~w~w~u|t|t|s{uzvyxz{z{w{w{w|u|u}y}w|uzsytxs{wzst\\Qcbqt{twvuvvwxyyzz{~{z|}||||||}{~{~wssux~x}x}x{zx}wwvu}xzxxyvzv{z~|~yu~w}x~t}s~stvxzzzyxvs~r|q{q{rzr{s|s}s|qzsyuzwzyv{z||z|xzxvywyv{u{u|t{t{s{sytwuu{v}{~}|z}zxyxyzy}yyy~xzxuxryrytyyy|y}y}y|y|y|y|z|z~zzzyyxx{w{w{w|w}w~xxxxx~wxwv}tzrvrqrqsqsrttuuvvxwzx{z|{}{|{{zyyxxwwwtwqwntmrlpmqqtxw{x|x|x}w}x~yz{{{~y~wvv}v~vsvpwpwpwowpwpwowpwtxyx{wzwywzwyw~www~w{vywvzyz{yzzy|w|w}v}u}t~t~v}x}y|y|z{yzw{v{wzyv{t{rzq{q|q}p}q|q{m{fzhzkzeymyxx~wzwzxzxzwyvxuyuzv}w}x~y}|}}}~}~}}~~~~~~}~|~|~|~|~}~~~~~~~~~|}}{yvt~u~{~z~{~zx{}~}{w}}~|z}~~~~~~~~}~}~}~~}|}}~~|wtw{|}~~|zz|~{~l~`mts|{vsqu{}|{|}~~|zwxxzzr{~}|~{||{ywwxxxutx|}xssy}~|||{xvtqrvxywrprty{~~yrkjkswwux|}{xwwvtuuqoopvzyxwtppuz}zp{~wl`l~|wrtzrqqppppqqqppppoooppqqqqqqqqqrqqppppppqqrssssstuvuutttt~s}t}u|v|w}wwvutssrrrrqqqqrqqqqqrrstvxz|~}z~vtsqqr}u{x|w}vst}w{|yw~u~s|t|szszt|s}s~roli~f{dxbubtdtfvjxlynzm|l|l|kzjxititiwi{j~kkkjj~i|h{g|f|e|e{ezfwgshsjtlvp{v~z{yvtsrp~nyq|vwutqqppponxnpmnmpmulyl{mzmxlxkwkwkvjvixgzfxevetetfuhwkzl}nnnoopo}m{lzkxjuisiqituwrwmwlxr{t{tzs{p|g}`}c}h~gb~a}bweuhzjgYySsVr\\r_scwfyh{cz_xd{h~i~klj~e}Z}U|Z|c}j~m~n~o}p~p~qmjhlsvxyyvwmzcwf{m~n~k|i{i{j|l~lnooonmk~j}j|i{i{hzhzhzh{h{hzi{k}mnoqrrsrponooooprrpnmlkklmoppppq~rruvwwxy|y{xzwzvzt{s{qzq{q{p|q|q|ryrtsssuswqxpxoxoxnxmynzo{o|p|q|s}u~vwyz{{{zyxwwwxxwvwyzyv}s{ryqzrzqyqyoxkxivit^rMsUwjylzcw[sYrsruvl{l~kjjjjjigg}hzjxnzq|p{ipgcki{v}x}w~v~u}u|t|s|sztyvwxuytztzt|t}t|v|v{tytywywz{|}}ywhagfqswt~vvvvwxyzz{{{~|}|}}~}|~{xvtruw~z|z{y{yz{xwxwwzzyywzvzy|}{|}|yxxywzxwzt{s}suwyyxwu~s|q{pzpypyqzr{s{s{r{qzrytzw|x|z}||~{uzvyvyuyz{x{u{t{s{szsyuwwt{u}z}}{ysylxjxkxmxpxqxpwownwnxnypysyvy~x|x|y}y}y}z|z}zzzyy|xzx|w}w}w~wwxxxxwwv{uysxqwqurtrtrtsutuuvvwxxyz|{}{|{{{zyywxvwrvoulsjqhoionrww{x|x|x|v|w}w~xz{{xwvv}w}vtvpvpvowowpwpwpwqwww{w|wzwywxxwx|wwwxzyvzv{rzyyz}{z|y}w}v~u~u~x~|}||z|yzywzvzxv|t}s|r}q~p~o}n|k{bz`za{kzfzjysxxwxvywzwywqvsvxw|w|x}x}z~{~}}~~~~}~~}~}~|~|~|~|~|~}~~~~~~~~~}z~y~u~u~y~z{}~|~~{vz~}|}~}}}}}}}~|~|~~}}}}~~~~}{wtx{|}{{zy{{|}~~~x~do{y|||z{xuuzvt{}~{xxy|}}zvw|~z{{zywxzz{}~}}}}}yz}~|zzyvsrpqw|}{zywvuvxz||xrllouwtqt{|ysptwxuqmmoqv|{xvqqu{~~~~~}|{y~|hUbz~~~}xtvzrrqqqqqqqpppooopppppqqrrrrqqqrrqpppqqqrsstttuvw~w~v~vuuuttttuuvvuttssssssrrqrsrrrrrsrrsuwx{||}y~w~usqp~s|u{u|vtrs}s|xz}wtsrr~s~t~s~s~qmh|dxcuasasbrctetfugvhxi|j~jiziuirisiwj{kkkkj~j}h}g|f|d|c{dxdsfohqjskvo{v||xtrsrp~nyq|uvtrrrrqponzmrmmmmlqlumwmwnwnxmxlxkxkwjwixgxfwdwdveufshsjvl{lmoppp~n~m~m|kxishqiruurwnxnyq}s}t|t|s}h}^}_~fgd~c}f{iym{nni~bxdwjwkxn{q|n}cz\\wbyh~ikmlg_~X}U}Z}f~moo~o~r}t}v}s}lmvyzz~y~upcvdwl~rqo}j{i{izj|l~nooonl~k}j|i{i{hzhzgzh{h|i|i|j}l~lmmoppppoonnnnnpqomjjllnpqqpoopp~q~s~wxxxxwy}y{zyyywyuytzs{r|r|r}s|sztxtusvsxrxqxpxoxnxmxnyozo{p|q}s~uwxyzzzyxxw~v}v}vwwwutvxzxt|rzrzrzqyqxoxkwjvhsYqLrZvkxjzbv[r[qvrwwo{p~nlkkjjiklm|m{n{m|l{grfigfws}wwv~u}tysurprksitivlwpyqzs{s}s|s{syrxsxuyvyyyzyxwpnlmprtszuvvwxy{{|~|~}|}}}}}}~~|yvsrsw~z}{{z{zyzx}xwwvvxxxyyy~xxvsrqr}twurwrytxtxvyvzu{u{s{qyqyqyqyqzrzr{s{t{s{qzrzt{w~xz{~{z{q{wyzxyx{|zvzuztzuyuxxwyu{u|x||z~xlwjwixhxhxixjwlvmvmvmwlxkxlxoxzx{x|x~x~y~y}z}z~zzyyyyx}x~w~wwwwxxwww}vvturupvovpuqtqtptqurvswvxwz{{|{|{{{zzyyyxxwwuvrtqskphplrww{x|x|w|u|v|v}w~zzzwvuu}v}utvpvpvpwowowpxqwtvzv~vu|vywxxyxzxwwx}yuzrzqzzyzz{|z|x}v~u~v~{}}|{y{w|xxzuzvv|t|s}s}q~o~n}k|b|Wz\\{`|j|g{izoxsvwuxvyvxwtxvx{y}y}y|x|z}{~|~}}}~~}~}~}~|~|~|~||}~|{|}}}~~~~~~}~{~z~y~z}}}~}|yz~}|~~}}~~}}|~||}~~~{~{{zzyxyz|}}|xr~k~n~sqs~z~~~~t~z~~}xx~~zvimx|~|~}~~}|yvz}}xyyxwvwy|~~}|{{}|zyxwtrqsw|}||zxwxvwxy{{xtrtuxxtoptxunmv|{vrqtwxz}}zxvw{|yuu}q\\f{~~~}ywxzrrrqqqrrrqqpoooppooopqrrrqqqqrrrqqqqqrsttttuvwx~x}w}w~w~vvutstttutttttsstsssssstssssstssstuwyz{}|{|y~wtq~q}s{t{u}u~srq~t|vy{vsrporrs~r}o{iyewdubtbsbsctdteufwfyi~ijjzitipioirjwk|kkkkji~h~f}e|d{dweqgljmjrlvo{w~}xrrsrpp}ruusssuvtponm|mtmqlqmrmtnvowoxnymylzkyjviuhvfxexewduergpirjxk|m~nppponn}m{kwitiuvwsxozo|prt}u}t~n~b~Z}^~fh~h}l}n|p}qqqo|n{jygyi|l~kd{^wbzfijlkgc~\\~T}T}`~j~op~p}s|v|z{y|qmuzzyxrat`sh{orqrm{kzhxj{k}moonm~l~k}k|i{hzhzhzhzi{j}j}j~klmmnppoooomk}k}k}j~kkd~^}]~`gmpnmklnppppqs~z{{{z|z~z~y~z}z{{y{xzxyxwyuzt{t{t|t{uztxtwtxsysxrxpxoxnxnxoxpyp{q}q~o~prtvwxwvvvu~u~u~vwxwtqsuxwt}s{rzqyqxqwowivgt_qOnGpZvjxjycu\\r_rusuxt{r}pnlll~j~kprs}r|o{jzixithpikws~v~v{swqpqfq]rXrXr_sdulwpyrzq{r|r{rzryrxryqzrysyvxwxttosprrsxu}wwwx~{{}y}w~w~zz{||~|xutsuz||{|zy|{z~xxwvutuuuvvvv~usqpnopzqssrtrrrqtqtssusvrwrwqwqxqxryrzs{s{s{s{qzr{t|v~x~y~y{zxytz{{z~y{zzywyxyxxyxzw{v{vzxzzzxwivlvlxkxjxhwjwlvlulukvjwhwfwgwvw{w|x~x~x~x}y}z}zzyyy}y~x~xwwvvwwwww|vuttsuqupuototosntoupvqwtxvzz{{|||{|z{y{xzxzxzwyvyvssmsmtxx{y|x|w|u|u}u~vxyxvtrrs|uvuqvqvpwoxpxqxsxwv}trr~szuxwyxxxwx|wxyxzpzuz}z~zyz{{{|y}v}v~y}}}||{}y{w~yzzuztw{u|t}s~q}o}o}l|`|U{`|b}g}e}hzlxqvuuuuxwyxy{y}|||{{z{y|z}{~}~}}~~}}}}~}~|~|~|||}~|||}}}}~~}~~~~~{~x~w~w~x~w}~~}{|{y|}|~~~~~~~{z~~zuuuuvwz{|zxuql~c~i~i~^~k~|~}~}~}~}~}}z{}xiltx}~~~|}zxz}|{zxvvwy|~~}|{z{{yyywtstyzwvwxwvuwz{zzwsnnsy{|xspnmqrps{{wwwxz{{}~|||~~{vssqss|}tw|}~~~}|zxxyqrrrrrrrrrqqpppppooopqqqqqqqqrrqqqqqqrss}t}t~tuvwww~w}w~x}xwutsttttuuuutttttttssstsssstuttsttuvxyyz~{}}z~u~r~r~r}s|t{t|t}s}t}r{qxwu}snlmnq~s|szoxjyfxdwdvevevgwgyg{g|iij~jxjrknknkokskwk|kllljhg~f}fzfvfriololsmvozw}{|xrssrqqsutsstvxupnmmmvmqlplpmrnunwownxmymykyiwhvgwfxexewevergphrjukyl|n~opponnn}m{lylyxzwzq}ppqs~v~uqi]}[|dj}l|o}q}r~ttso~i{[uYt`xgjh}dyc{g~iijifd`W~R~Y~f~npr}s|u{yzzzw}ptyxwuh{\\sgymoppr~p|kydwfyi|mooom~l}l}l}k|j{hzhyhyizk|k~kklmmnonmooml~izg{h|j~m~c~V|U{Zz`|jlida`~a~cehjkos~{z}y|y{z{z{zzzzz{z{{{{{zzyyyxzw{v{vzvyvyuxuyuyuytyrypxnxnxoypypzr}sqomoqstttttttuvwxwurrruut}t{szrxqwqwowivdt[pPmKo^vlzix`t]rhsvusyu|s}o~mll~m{ozszv{||}}y|rzjxgvivjultvsyrnseo\\nVpPqQsXsashtjukwnypzq{r|r{rzrxrxsyqyrysytxvxtuosororutzw~xyz|{~v~rsxxyz|}{wsttv~{||yzxzyyxwvtsrssrsss}szt}utronoyotpsqrorospsqsrststrtrvrvrwryrzrzrzrzrzqyrzs{t}u}u{uyvyuwx~||{|z}y{y{y{x|x{wzwyxxzyyyvvgtjujwixfxaxdwhujtitithufvbvbvqwyw|w~x~x~x}y}z}z~zy~zzzyyxwvvvvwww}wyvxuxtxrvpuountmunuovpwsxtyxz{{||{|y|x{xzxzxzxzx{xywvwvwyy{x|x|x|u}t~uuwwvsqppr|twvrwqwpxpyqysyvxyv~snmn}qyuywwxtxux{xxyrywy~zz{v{|z|{{|w}w}}}}|{zyxz~zyzvx{v|u}s}p|o|q{r{e{Z{h}g~d~b}f{kypqsmsruwz{{yz~z}z{{z|{}|~}}~}~}}}}}~|~|~||||}~~}}}~~~~~~~|{}~~~|~w~r~r~u~w|}~}z{{xz~~||}}~~zvw~}sopvxy{|zroqmfb~g~f~Zo~||xw}}}ytw{wortxy{}~|}~~}}{{{~|xwvwy|~~}||}|zy|}zwvvx|zuuuvvvuuz}xxvrptz~}yrlkjmsx{zyz||zxxyz}~~~~{wtsuhW\\x}}~~~~}{zxwxrrrrrrrsssrrqppqqpppppqqqqrrrrqqpppppqr~r}s}s~tuvwwww~x}y}y~xvutttttuuvvuuuuttttttttt~ttuuttttttuvwwxyz|}x~tr~q}q|sytyuzu{u{tzxyxwzsnklmo}q|szrxmxhygxgxgwgxhyi{h}gijj{jukomnnnnolqktkzl~mmmkjih}h{hxhvkumumvmwpzx{zzwrrsrppqsrq{r|ruzvonmmmumolnlomqmsnunwnxmxlxjyhxgxgxgxgwfvftgrhritjvkxlzm~noonnmmm~m~o}w|z|t~qqrtvuuqg~[|c}l|n{p|s~uwwvu~hzUsTq^xg~ll~hzf{h~jihgdc~e\\MJ~Z~hor~t}u{wzyzx|t~uxwuncufwk}ooop~r~p}lzcvcyi|moonn~n~o~m}m|l{izgyhyj{k}llkkllmnmkmook}gzfzg}k~o}`|E{PyPxQ{^gga`~`}`~`~a~begi~q}zz}y}x|x|x|x{x{y{{{}{}|{{yzyyzx{x{x{wzwzvyuyvyuyuzuyqyoymxnxpxrzv}wvtpnnopqsrsttuuvwxwts}rwtzuu~u{uysxrvpvovivet\\qSnQn_ukygv^s`slsvvwys|q}n~ll~l}nzpxswxx{|}{tzkxhviuivjsisbqYnRoHmOoZqftptqtntlvjwlxoyrzr{rzqyqxrxtyrzszrzsytysvotnqoqssyv~yy|~|z}x~tsvvyz{zzxsssw~{|{whruvyxwustsqqpppqzsxvxxyyvrq{pxpuouosososptqtrtrsrssstsusvsxryryqzrzqzqzqyrzr{s{szsytyuyw~z}}|zy~y}x}x|xzxywxxx{zzywvesitivfwcw]xawfuhthsgsfsetauavmvxw|x~y~y}y}y}z|z}z~z}z~{{zz}y~x~w~vvvwwxx}y|y{yzwxuwrvpvouovovovpwrxuyz{{{|}z|yzwywxwxwyxzxzyyyyyzx{w|w}w}v~uvvvvtqoopr}twvrwqxozp{s{xz}y{xofhim|rxvwxvxvxxy~y~wxxzy}z|{|{~{}{{{x{x|}}z}{|{{{{{{|y~y~y~v}r|p{s{v{m{_|k~j__~c~i{otrmqosyz}{xxy}y{{z||}|}}}}}}}}}~}~|~|||||}~~}}}~~~~~}|{|~~}~w~n~l}uw{|}~~}|}||}~~~~~||||~~}yy~zor{}}}~rszyl^~m~s~hwzwtt|||zojx|yxy|{{z{}|rsx{~}||}}xwvxz|~~}}}}|}|zxz{ywvwz}{vuttuvuuxz{zywwz{zz{wrmgjnuz|xx{}{xvvwy{}|zwwy{|ywz{{y|qXa|~}|}~~}~{ywwwssssssstttssqqqrrqqqqqrrrrrrrrqqppqqqqqqrrrstuvvvx}y|z}ywutttuttuvwvvvvuuuuttttt~t~u~v~v}u~uutttuuuvv~w}x{zy}v~u~r~q{rxtwvxvywxxxxy{x{v|r}omk}k{mzo|txuurvnzl{iygyhzh|ijjjiyjtkomnnonomqlulzm~mnnmlkj~j}k{kymyoynyozq{y{xywqqpom~l~no~nwmqnroyszvppnmmxmqmnmnmomqntnvnxmxkxixgxfxfxgwhthrhqiqisjvkxkvlum{nnnnmlmmmn~u}x}trrrtuuvvqeg}o|p|qsvxyzykzUrUr`yk~p~p}l{i{j}jjhfe~e}idSIRbmrs~u}w|x|x|u~u~v~ur~ixj}npoono}p|p}m{awbxh|kmmnno~p~o~o}n|k{hzizk|mlkkjkllmmnqsrk}g{g}h~l}t|_z@xKxIxLz_~hfccb~a~a~a}`}_}_}`}e|o{wz{y|x|x|w|w{y{}zzz~{{{y{yzzy{y|y{yzwyvyvyuzvzvzrzoymxnxqxsyv|vuspnmmnqrstttuuvwxxwu{tqssu~vw}uzswrvpvowmwjubrWoUp`tkwfu^scsrtwwuzq|n}lkl~l}mymvpuxuy{{yyqxkvgsdq\\oUrMvHwLtMn_ooq|u{usumujvjwlxoyszr{pypxpwsxuys{s{s{s{szsxpunroqrsxu~xy~}}}{|z|w~tuwz{|{{ysst~w}y{}wjp|tyxwususppooowrwvwzu|t}{zvuuturvpwownvoupurururtrtststrtttvsxsyqyqzrzr{rzqzqzqzqzszt{v{u|w~||{zx}x|x|yzyxxwxvyx|{~{zzwesgsftcu`u\\w_vdtfrgreqerdsbs`tguvw{x}y}y|z|y|y|y}z~z~{~{{{}zzyyxzw|vvvwxxy{~{}||{{yzwxtxrwovmululvmwqxxz|{{|y{xyvwvwvxvxwywxxwxwxyw{v|w}x~w~vvvvuspo~prt~vywuxryp{q}t}y|~zxz|qcbbgoyuwwvwtxtzwy{w|w~yz{z{~{}{z{x||}}~|~||}zzzzzzz{{x~t|s{vzy{q{a}g~ja`af~l{russs|x~ywwx~x|z{{|||}}}}}}}~}~|~|~|||||}}}}}~~~~~~~}~~}~y~p~o~xy||}~}~~~~~}~~}~~~~}yvuv{~~~}~}}uf~y~~y}|vqor{ywojt}}}~|~}~zy|th^ew}|||{{|}}~|zyyz|}~~~~~~|{{{||zxxwutvy|}}zxvtuvvusstwutyzuminqprsqosx|z{}{vsqruwyzvokotvqmrtohdquks}{|}}~{~y~xwxtttttttuuuttssrrsrrrqqrrrsssssssqqqrrqrqrrrrrstuvw~x|x|x~wuttuuttuvwvvvwwvvuuuutuu~v}w|v{v{v|u}uuuuuuu}u}u|v|x{z{{y|v|t{syuwvwwwwvvvvwtwswuvvtyq|n~l~l~l~myruvvs{n|jzgxfxezh}kji~hyiukqmpnonomrlxl}mnoooonn~m~m}m|n|o|o}p}t}{|yzvonm}kyiwivkwkxjsiojnkpoyw~u~ppnmm{mtmommmnmqmtnwnymykxhxfxewfwgvgriojojqktkwkzkvlqmxnnnmmlllln~s|t}qqr~ssstuutjl}o}pprsvwz{ozZrZue|o}t}t|q{o{m}ljiff~g}mk`ST_jq~s|u|u}v~v}u}t~t~s~qymymnoonnn~n|o|m{fzi{k~lmmnopoo~o~n~k}i|j|lmkkjjknnoprsroj~i}j}m}r|w{dyMyY{\\|bnmkihfb_]~[|\\{\\|\\|^|b|h{qzzy|x|w|w{x{{z~yyz|{y{yzzx{y|y{z{wzwywzwzw{wzszqynxoxqwryt|uutsqnnoqstuuu~u}u~uvwxyxuztxu|vxu{sxrvpwpxmwhu^qRnRo_tkvft`rdtqvsyn{l}k~jkk~k}kylumtvu~y{z}ztylwgr^oSmItEzFzXq^gdfsl}uxvkvjvivjwmxpyszs{nyiwhvoxtzs{t|t{t{t{syqvosprprvt}vx}{z|z{z|w}u}v~x~|}||}~zrv~z}{{zz|x|uvzyxvstsonpsstvvzu}trt~}zyrxswuvwtxrxqwqwrwrvrustttttstttutwsxryrzs{s|s{r{r{qzqzrzt{x|y~xz{{y~x}x|xzyxyvyuyvzx|{{}|yksfrcr`sZsWvZuasdqeqcpcpbq`rbtkuxw|x}y|y|z|y}y}y}z}z|{|{|{{zyyuytxtwyv}vvwwxy~|}}|~{}z{xzvyowkviuhuhvmwszzz{{yyxwwvuvtvuwuwuuututuuuxv{w}w}v~vwwvusqp~rtw~x{xwytzq|q~s~y}|{t|wwh^\\`kxtwvuvswrzsyxw}wxyyz||||}|}~}||z|y~xxxyz{{yv|vzx|z}t|a|b}i~ga`ci~r|u|t}w~xvu~v}v|y|z||}|}}}}}}~}~|~|||||{|}}}}~~}|zu~w~}}}~~}}{z~{~~~~~}q^\\ny}}}}~|~w~{tpprzwtqt~~tryyuy~|jRbutrz|}{}zx{||||}}}~~~~|xxy||zxwvtsvy||}{zxwwxxvomowsoxzulemrootttvx}|zxusqsuvvvvspnswwpnxvmXRmsppw|~~}y{}~}{z{|vv~u~u~u~u~u~u~v~v~vutsssssrrrrsttttuuuttsssssssrrrrrrrstuvwwvvttsttttuuvvvw~v}v}v~uuuuutuu~v}v|v{v{v{v|u}u~uutt~u~u~u~uvwx~zz{w{vyuxvxvwvvvuvuxvyvwwvvwtzr}ommk|m{r}r}m{jygwfvfxi{kj}i|iyixjultmrmomsmzmnooopqp~p}o}n~m~nnoqu}~z{vnlk{iwhuiujujvhtgrgogojspwqwownzn}m}m{mvmqmomqmtmvmxlykzjyiygxfvfuftgqiojokrkvkyk{kxlrmvn{n|n~mmlllmo~r}q~pqs~ttttutsln~ooopqrtxzs~ax`zi|q{tytzt{r|o~mkigfh~npi^X\\~g}p}tzuzu~uu~u~tsrq}ppoponmmn}n|n}knnopponmmmnmlk}k}mmkjjklprsssrlhh~i~n~r~w}y{l{_|e}hlqnnnnlgb\\Z}Y|Y{[|]|`|b{h{qzxyzy{x|x{yz{y}xx~z{zzyzxzxzy{y|x{xzx{y{yzxzvztyqypypxpzr~sttutqpp~q}s~ttuu~u|u~vwwxyyv}u{u|vxu|sxqupwpxnxft\\qQmRo_shtesbsjtrvo|j|h}h}k~lk~k}kyjulsqt}wyzywxmwer_pRnGtKwUulolgeaok{txwkwgwhwmwqxsytztzpxcwcvkwsytzu{u{u{u{tzrwptpsoqus~uxzzu{w{x{x{w{w|y|~{zz{|z}r|}{zyxwyzzywttrmntwyxxzy}wvsr~s{x{s}rux}zyzuxswrwrwrutsusususutttvswsxszt|t}t}t}r|rzqyrys{u|v}w~xyzy~x}x|y{yxyxywyzy|{}y~{}{xwjs`q^qUrStWt^rbpcpcpbp`p\\qcsru{w|x|y|y{z|y}y~y~z|z{z{zzzyywysyqxqwuv{v~vvw~x}y}|~|}||~|}{|yzsxnvjuhuguiwnyyy{yxwwuwtututuuttsrqopopprttxuzv|v}v|v~wwusq~q~sw~x~z|zzzv{r~qsw}yzs~uzn^W]~kvvvwuwsys|t{uyzz~yxyy}}}}}}~}|{zzxzw{w{w}xyzyyx~w|x~z~v}d|^|e}ib^ahqu~v}x}w~s~p}r}t|x|z}{~|~|~}}}}}~||||{{z{||||}}~}}zx{~~~}|~~zut~}~}|r_]u}~|{}~~~~~~|wuuxxpx|~}lmrmr}~sarxplv~|xy|}}}}~}}~~~~~{wvy~~|zyxvttvy|{z{{{{zzywyxwpqx{xutvvpgiu|{y}zwuwututsuwxwxz|||x~v|y`[yuf_py~~~{xy{~~}}~w|v|v|v|v|v|v|v|w|w}w~vuttttssssstttuu~t}t}t}t}t~t~sstttsssrrrrrrstuuuuttssssstttuuuvvv~vuuuuttttuu~v}u|u|v|u|u|u|u}t}t{u}u~ttuwwy|zy{vzuzvywwywyv{u|t}t}v}w|w{u}r~pnmmnl|jyhwgvgzh}jlj|izizi{j|kzlulqmtmznoooppq~p}p|o|n~mmnnp}uz||zyt~mj}jyiwiwjwjwjuithsgrfqgrjrlplnlplslwlymwlslrlulylylxkyjzkzkyixhvgtfsgrhqjrjtkwlykzkwlqmqnvn{n~nmmlmno}p}oppstuuuutrnooonnooqtxtg}f}l|rzsxtxt{s}pnljggiknkbWV~c}o}u{vzu}tsssrrrppppponno}o}nnppqqqonkkkmnmlmomjijkmqrrqpnkiikpv{~{}v|p}mllmnpqrqojd^[|Z{[{\\|_|^{^{c{i{o{vzxyzyxywzw|w~y~y|xzwzwzw{w}y{yyy{y{xzxzwzwzuyrzpypzqqstvvsrpr~rsuuu}u}v}wwwxyyx}x|w}wus|qxpwpxqypyjwcqQmJnaret^tftqupwk|h|i|j|l~l~l~l|lykvltnt{wyzyxwovir`rOsFsTtjslqnkfcne}swwlwgwivpwtxtyuzvytykwfvhwoxsytzu{u{u{uzsxruqtnqrs{uyy}v~x}x|z{{z{z|{~{yyyzw|u~~{yxwwxyy{zyuspnq{|y~~{zu~s|rzt|tsuz||zywuvrvqvrussusvrvrvsvtvtwtxuzv|v}w~wu}s|rzqyrzr{s|v}w~xyx~x}x}y{yyzyzz{}y}y}x{wy}zywuar`p]pTsTr[rapcpboao_pZpcrst{w}x}w|x{y{z|z~z}z{yyxyxyxxxwxtxqxqxswww{wvwxxxy|{}{}z~z{||~|{xytwpvluitgvixxxzxxvwsvrvrusuttrsoommllmoqqtswt{u}uyvxv~vusr~r~u~x~z~{}{|zw|s~qsv}yyu{t{|q_Qc|xu{vyvyt{t~s~t~u}x|z}{}|}~~~}}||}}~{{yyxywyvzwzx{x|x~yyxw~wzy}m{[{a}i~da`fpu~x~x~v~q~m~q}t}x}z~{~{~|~|~|~|~||||{zz{{{{{{|~~~~~~}|yx{~~~~~}|}~}|y|~}}~~|ytnp|~|}~}}~~}zyz|xsy~~zqrusw}}z|xrq~z~}~}|~~~}~~~~{wuy||{{zzxuqopswy}~~|zz|xtllsyyxxurrpiipx}||ztqpommpsuxzzz}~}~}~z~yywqoxfap|~|~|xx{~|}~wzwzwzwzvzwzw{vzwzw|w}v~vuuutttssstttttt~s~s~s~tsstuuttsssssssssttttsssssrrrssstttuuuuuttttstttuuu~u}v|v|v|v}u}u~t~t~tttuwwy|zy{w{uzuzvxxxyw{u}ttuv}wzwyvyuytzs{s}r}oynvkuiuiwj}kmk~j|j|j}kk~lymrmsnzooppppp}p{pzo|nmmmnoysszvw|wrxkwixixixjxjykyjwivhvgtfsfrgqhoininipjskwkwkuktlwlzk{kyjyjzkzkzjxivhtgsgrirjtjvkylzlxkslmmmnto{n~nnmlmno}n|mopsuvvutsqooonnmllmpurjj~n{rytwuxt{s}qomkiijllkfZO~Z~jt~w|v{t}rsrrqqpqqqpponooopqqrqpomiikmonnnomjhikmopnmmlkkkmpv{|{~woklopqmf}b|b~fhgd^}Z|Y|Z{[{[{\\|_}e}m~u}xzwyvyv{v~xx}w{vztyt{u}vw}wzw{w{x{x{yzxzuzr{p|oprtvvtsrssssuv~v|wzw|xxxyyy}y|x}w~t~r|pyoxpyqzqzrznuSnCm]qftbvmvuxoyl|lyn{n{n}n~n~n}mzlwmtntyvxyyxxqvjuUuEzMtkrrsjvmriilayrsvjufujvqwsxtxuywywysxmwivlwqxsyuzv{u{u{uytvtsoqprvu}z{~{~}|~|}|~{}{|{}{~yxyzw{x|ywwwxyyz|{zvroot|zz~w|sysxuzu}t~vz~z|x{uwttusurvsttrvrxqxrxtxtwvxvzw}x}x~xw~v|t{rzqyqyqzs{u}v~xwx~x}x{yzz{z}zx|vyruottwxvds^p_oSrPrXr`qaoan`n^nYocqus|v}w}v}w|x|{|{}{|zzxxwxwyxxxwxtyryqyrxtwxwvvtwtxyy{y|y{xyvyw|y|{zzxxtvpulthuhwwwyvvtvsvrvrvsvrurronmkkiljnmqotrwtzuwutvxv}ut~s}s}v~yzzzzy{t|r}r}u{xxvytyzsaUmxt}vzwxvzu~ttsttuvxz~}||{||~||zzxzwzv{v|w{w{w|x~yyx~wyy|pzYz^|h}f~ba~g~p~u~w~v~v~sruw~y~z~{~{~{~{~{~|~|||{zyyz{zzzz|~~}}}~~~|zyyy{~~}|{{|}|{}~}~}{yz}}~~}|}}|||{y{}~}}zwpsx}}}yov|vux~}~~}~~~}|}zxyyyz{{{zxtoklry|~}ws||zvoorqrstwyzzxtonqx~~xtqnjglty{zww{~}~~{~wuvz{{wy}|xw}}zz{{|}~wzvzv{v{v{v{v{v{w{w|w|v}v~vvvuuuttttttttssssssstuvuutttssssstttttttssssssssttttttttttttttstuuuuuv}v|v{w{v|v}u~uttttvv~x|zz{x{u{t{tztyuxxw{v~vv~u}wzwxxxwxwxwxwwvuuuutttrtpvntmxmlkk~kllm}mvnuozo~ppqpop}pzozn|nnmmnnxqtyuw{yrykvivjwjwjyjzjyixiwhwhvhugtfsfqgphpiqisiujvjujtkvkyj{jyjxjykylykxjwiuhsiqjrjtkvkylylvlqmlnmouo|onnmmmmn~j~ilnsuvvusqonnnnmmkklnpomm~ozrwtvuxt{s}r~pnmlllkkkjaSQcpu}uys{rsrqpppqqpqponnnopppqqppmhhkopponnljijllmnlkkkkklmptwyzxqmosqc|OvCrErRva}konf\\X~Z|\\|\\|]}^}bint~v{vyvzx{y|x|v{uzsytytyt~tu~u~u|w{y{y{zzw{s}o}np~r~stuttsttqm~q}x|wzxxxxxyx{x}y~y~y}x}x|w|t|r{q{pzpyqys{w}xzYqAlZqgtkyuzv{t|q~s|r{r|q}p~on~m{mwotosyvxzywxrvgvNwG|Zvrsltkykyfofehscvftftlvqysytytyvyxyxyrxivivnwrxtyuzt{t{uyuwvtpqnqst|y~~z{{}}{}z}z|z|{z}yzz|{{wwxxy{z{||{wrppyvy{zy{tvsutwtytzu{w{v{uzsysvttutwtutrwrxpzqysytxuyvzx|y~y~yx~w~u}t|rzqyqyqzs|u}vvww~x}y|y}y}x}uyrtmqlrpv|wwkt[qXoMqLqTq^q_o`m_l\\mZohqws}u~v}u}u}v}y}y}y{xzwxvyvzwzxxxuyqypypxqwtwyv~vtwrxxyyyzyxwtsrrttyvzyzywvustptlujvxvxuusvrvqvqvrvrvqronmkkhkgljnmpqqsuuuusutuzu~t}t}uwyzzyxzyvysysytxwwuxuyyteazwwv{w{xzx|w~v}v}v}u}t~tttuw~{}|||{{~z{x{w{vzv{w{v{v|w}xyx~v~x~x|lyVyY{a|h}_}`}k|r}s}u}u~u~wzzz{~{~{~{{{{{|~}|{xwxy{zyyz|~~}||}}}}~~~~}{wwz}~~~~~}{{z{|}~}}~~~}~~|{}~~~|z}}{{||}zywx|}lq~|vw}~}}}|||}~}|{zyz|}||zwsnmquwy{ztsxvtqliggmqvz|{}zlcdv~}|vmgiqxyywy|~}~ywxzz|~z~y~wpe^gx~}{z{|}~~v|v|u|v|v|v|v|v|v|v}w}w}w~wvvvvuutttttttsssssstuuvvvuuutttttttutttttsssssttttttttttttssttstuuuuuvv}w{wzwzvzv{u|u}u~utuuv~y|{y{v{t|s{r{rzsywx{v}v}u|uzu|w}v~v|vzvztzsysxrxrypyn{mym{mlllmmmn~o}p}p}pqqpoo~o|n|n~nnnnnnzpwyvx}|v~p|lxkvjtjuivivhviuiwiwiyhyhwgvguhuiuiuiuiuiuiviuhuhuivivjvkwkykykwjujrjqksktlulwlymwmumtnvo{poonmmmn~o}i~fjmruvvtrpnmmnnmmllmnonnn|oyrvuuuwtzs{r|p|nnmmmllljfZSamrq~qqqqonorsrqpponmllmnopqqpniilnpponmkjijklllkjjkkkllnqsvwvssvvrU|:v?tTxc~mqrrnf]_~e~d~a~_~`~gkprs|v{yzyzx{v|t|szszsyszs{r}r}s|t{u{vzy{z{u|o|p~s~srstuttuuq|jynwywwwxvxvxwxzx}y~y}y}y}y}y~v~t}q}n|nzqyv{w~y~cvGoXpgwp}wrw~wwv|t}r~qpo~m{nwotqsxv{||{twvvitPtYxjzqxgvkyjxcqYjPtNx`uftmwr{s{tytyuywyxxrwhufvlwpxszsztztztyuvxstpnposwwzz|~{x~w~w~x}x{yzzz~z|{{wxyyz{{{{{zvsq|rxxy}{}{vvtututwswtwtwuyuytztxuwvvwuvuswrxpzpzrztyvzw{x|y}y~y~x~x~v}t|r{qxqxqyr{suuvwx}x|y}x|uyrtrsrsuvsx{yyxvctZpNqJpPpYp^n^m[mZn^qps{u~v~u~t~t~uvv~v}v|v{u{v}w|x{yuzqzpypxqwrwtw{vuwrxxy{z{{zzyywvssqrwvwwvvttsstounuytvtvtxtwrwqururuqtoqnnlikflimnorotqtrurtstvt{tztyu{w~xyxvu|vxuuvtwtvvvuxuzyv~j~myx~w|y|z|zzyzyxyxyxytytxuxuxyw{w}x~{~}}{z{z}x|w|v{v{v{v{v|w~wxx~w|v|w{jyUwSyW{h|a|d|r|t{s{s|s}t}w~{{|{zz{{{{|~}~}~|zvvxzzzyyz|~~}||}{{{||||}}||zz||zz|}}|z{{|}~~~}}~~~}|~~~~~~~}||~~~|zz|~~{zy{~||~~|}~}}}}~~~}~~~~~|yvsqrstuyy{|pnjgc__emsyzwvw{vmgdnz|}~~zrlmsx{yx{~~~}|zzyuvy~h}\\~nmvfIVx~zz{{{{{uuu~v~v~v}w}w}w~w~w~w~wwwwvutttssssssssssstuvvwxxwvuutttttuutttttssssttttttttttttutttutuuuuuuvvw}w{wzvyvyvyv{u}u~ttuvx}zzzw{t{s|q}p|q{rzvxyv{u|u|u|uvu}uzt{s}q{ryqxpyoyn|lylxmmmmnnnopo|o|pqqpon~n|n}n~nnonnn{oxwvx~~wq~nzkuitithththsitiujxjzj{izhxhwiwjxjwiviuhuhxhvhshpgphpiqjtjxkykwktkrlqltlymzmymymymxm{n}o~poonn}nnn~n|h}filqtvutromllmnnmmlmnnnno{pwrvtutwtzs{r|qxowmlmnmmkjjaT`lnnnoopnmorrsqpoonmhj~l~m~mppppojjloqqpnlkihijklkkkkklkkllmnopruxvuqX};yR{c|mqrrrsrfbmog`~_djopr~u{xyyzx{v|t~szszrzryqzp|q}q|s{s{s{w{y|v{p|r}u~srrtuuuvvs}nzpzwxwxwxwyw{w|x~xxxxxxvyp~j|m{rzv|xxs{^r\\phxrwtwxxw}u}sqo~n}mzmwnsqsxvz{vypvrvdo[tfxr~p|iylxhw`qMlEwIz]tgtnxr|t{tztztzvywwrvhuguivnxqyrzszszsxvtzrxotorqts{v{}{xv~vw~wv|uzuzwzx{zz{xyzz||||zzx~usswuyz{|}}|yyvwsvswruststtuuxvyvzvzvzvxvvswrxpyqysztzu{x{x|x|x}x}w}w~v~u~s}qzpxpyr|s~tuuvw}x}x|uzptoqsuxx{{y{{z~xsufrRqIpLoWn^m]lYm`pksuu}w~w}v}u}ttuuutt~t~tv~x|yuzpypyqxpxqxrxwwuxsywz{{|{|{|{yxuttrsrsrrrrssstrtsuwuvvxxzvytxrvrvrvquptnomhlbmlntpupuotptqsrstsysttquuwyw}wvtr~rzswtuvuwuwvyv{yx{q{ty|xz{r~p~o~pqqs~s}r}r}r|r|s{szvxyw{x|{|}{}{|z}x|v|u|u{v{v|w}w~xxxw~u}v{lxVvNxMza{e|h|p|s|r|r|s|t}v~y~{{zzz{{{{~{~|~|~{~yuvzz{{zzz|}~}||{zxyz{zz{}}}||~~zxwz|}{{{}~~|~}~~~~~|}~}||}~~~}}~~~~~~~~~~~}~}}~~|zz|~}|zy{~~~~~}~~}~|}~~~~~}~~}{xvvuuvvxy{|xrieegjmou{{utqnoxxjjxz|}|xsnotz{yxy||{{z{zzzyuuv~i~]`lzuVf|{z|{{{{ttttuvvvvvvvvvvvuttttttssstssssstuvwwwwwvvuuttuuuutttssstttttttttttuuuuuuuuutuuuvvvvvww~w{wzwzwzvzv{v{u}u}t}u}x|yzzxzu{s{r}p|p}p{qysxvvxuzu|ttts|qpn}n{mxlxkzk|kylumxm}nnnnoo~pzowowoyq|qponn}n}n~nooono}nytw~y}~ysn|kwithrhqgqhpipjskxl|l~j~i}i|j|k{jyixjwjxj~jyhsgofngmhmiqjvjykwltlqmqmtnyn|n{nzn{m}noopppoonoo}oyi|gi~lqtuusqnlkkzl{m}nmmmmmnoo~o{qvsutuuxuztq}m{l}llmnnmkileT`kmmmnnmmlmnnonmnonme}d{i{i|l~opppomlopqqpnmlkiijjkkkkkklkjkkkkklorsppo^L~clqrrrrqtnemtme`ainoqt~x{xywyvzts}rzq{p|p|p|q|q|r|q|q|r{s|u|t|v}yvrqsuuuwyv}s}t{vzwywzw}wxyyxwvvvsvk~j{nzryt{vwxjw_rkzruvwxxw~v~tqo}nzmvmumrpswvz}yotmsltcphwqtrp}lvfrZpIpE|JXqhuoys|u|v|u{tzuyvwqviuguhvmxpzr{s{szswtrxpzn{o{pxqwswzyxww|w~xxw}t{tztzt{u{tz{z{|}~}}zy}vytt|vzyy|{~|~{}x{vzuzuxrwrurssstvuxuyv}u~u|uxtxrwqyqzs|t|u}w}x}x|x|x}x~w~vvu~s|rzqzr|r}tttuu|w}v|tymspryy{{}}|}~||~z|yuu\\sIoHnTm^k\\kVmhrvx{z}z~y}x}w}u~tsrrrrrrtv}xuyqyqyqxqxrxrxrxrxsyxz}|}~~}}{zyxuvrrppoqqqrstuvwtxt|{}}{|xytwrurvqvptnomhmdtquzqwpvntnsosqrtrxsrtpuqwvw~vutsr{syuwwvyvywzxzyyzvyxw{wxyu{tztzv{t|s}rrqqqp~p}q}r{sztzvyxvzu{wzzx{v|t{t{u{u|v|w}w}x}x~w~uu|mxUvNwMy]zd{g{m|q|p|p|r{s|v}x~z{{{{{{{{~{~{~|~z~w~rv|}||{~{||}}}{{yvstxyxv{|~}ywvy|}}}~~~|}||}zy{~~|yyy{|}}}~~~~~~~~~{{}|}~}}{{{~~}~~~~~|||zz}}z~}{zzzzz{{{xwxvnfgjotuux}td]qy}}to{{ywvtqnry}|zvtssrstuuvw{xuw~rhbtuuyzxw||{|||rstttuuuuuuuuuuutsttttsssstssssstuvvvvvvvuuuuuuvvvutttttttttttttttuuuuuuuuuvuuvvvvvwwwww~w}w}w}v}v|v{v{v{v{v{w{xzxxywzuzt{t{t|t{s{r|r{qzrxsvyu~usr|qzozmzlxkwkykkl~m}m~nnooo~o|osoqorotpyp}ponn~n~n~noopop~mzoxsxv}uqn~lzjxivhshqhpiqkslxl|l~kjj~k}l{kzjxiyj{i}iygteqepfmgmhphuixkxlumsmqnqntnyn{n{n}m~nnnoooonnnnxntkyh}j~l~qtttromkj|jzkzl{m~mnnmmno~o}o{qyswuvuxt{t~ryo{nmmnnmlkjmfUbkmmmnononlkkknppppne~azfzh{l~ooonnmmopqqponmkiiijkkkkkkkkjjlllklmonmmlebossqpnmmpqkmrqmfbhnpqsv~x|w{uztsr}q}q~q}q}r}s}s}s}q|p|r}u}v}u~srqqsvwwwxw~u~v{wyw|wxxx}y~yxwvtsp}n{gzpyqxsxryqzp{rzjuavlwq}s~tuvwwvtq~oynumslsmrorvv}zzxoslqlskwq~xvtrlvdqVvGFKyZmjvo{s}w}w}v{tzuyuxrwkvhvivlxpzs{s{rzqvqqrnxo}qrqwrvuw}xx~x|y~{{z~v|szrzs{t{sz{{{|}~~}zxyuxt}v|z{~z~z~{}zy~y~z~z|qzqxsursrttutvu~uuu{syrwqxqzs}s~tvx}x}x}x}x}w~w~v~v~ut~r{r|s}uut~t}szu|t|t{svwy|{z|{|{||{{{{y~y}wjuLqEnRl]j[jXnruz{|||{}z|y|x|v}utsqppooqu}xuyqypxpxqxrxqxqxqxsyxz}|~~}~{}y{vvrommlnnssvxyt{s|~}{{xytwsvrupsoooktmy|uvototnsorprrrrsqurvqvvvutsr~s|uzwyxwxwxxxxxyxyxw{utttsst}xx~trqqqprt~r}q}p|p{rxvtyszwz{w|t{r|s|t}u}w|w|x{xyxzv|v{kyPwOwUx]zaze{l{p|q}q}q|s}u~w~z||||||||~{~{~{~z~y~u~x~}~}}~}~}~}}~}}|yvsqtx{zy{}~~zxxy{||{||}~}}~{y~~~|yy{|zyy{|}}}~~}|{~|}zz}}~}}~{{{{|}~~~~~~~~~}}~~|}}~}}|{zz{}|{{zysoppkfghmruwz}{se`w~z|{y~|yxuojdkw}}ytpmlllnmmonrz}{wpo|}xugq~}|}}}rsssstuuuuuuuuuutssssssssttsssstuuuuuuuuuuuuvvvwwwvutttuuuuuuuuuttuuuuuvuuuvuvvvvvvwwwwwwwwvvv~v}v|v|v|v{vzvzwyxyxxyxyxzxzw|t}q}o}n|nzqxtwzu}t|syqzpynylymzmmmmnnooo}o}o~pxotoqpppupzo}nnnnnnnnppr~n{jxlwozp~om~k}j{iyiviuisjtkukxlzl}kkkl}l{k{kzi|h|gxdqbocpcoeoenfogriujwlxmvnsnqnsown{n}m~m~m~mmn}nynwnvnwnwntnmmmltjyj{k}prsrpnlkj|jzjykzl}lmn~n~n~n~n~np~r~s|tyuyt{tt|srqqppnljjnfTamompsvtqlotsonoooprmd|e{j|p~qmllkklmopqppomkihhikkkkkkkjjjkmnlllllkllmpstromkkknonnrrqneclprsuvv~u}s}srqqr~s~s~u~v~v~v~u~v~yz~zw~s{qzq{r}tuuuvvuv}wwxxy{yzy}xwvut~r|q|o|kw}t|szrxpxpwqvmuhvkvpxqxrzs{t~uvvur}ownsmrlqmrptvvzxwvqtlrnuq{twwvuoy_rNwFEOl_onyp}s~v}v|v{v{wyvxtwmwiwhwjxpyuzu{szqxrxtwxu|s~r|pxownxvy{y|y|z~||z~w{t{szszs{tz}|||}~~|z}vvt{t~w}|{~{~{~~{{||zt|t{twqtqtrpsss{ttu}szrwqwqzr~stvw~x}x}x~x~w~w~w~xwvt}s|s|t}t}s{strvs|qyqxwz{}y|y{y{z{zzyyyx{x}xvvTsCoMl\\i[i]oxx{|{|||}{|{|z|y|w~vtrpommps|wvyqypxpxqxqxpxqxqyszx{}}~~~}|z|wpmkfnhrqyy|w~x|~~}}{zwxtwrupsppsp}u}||vrvpuntotpspsptpurvpvtv~uutt}u{vzvyvxvwvwuxuxuwwu}trttt|vxxu~pmm~p~p~prsrqq~p~p}r|txwuyw{zy|w|s|q}s}u~v~v}w|w|w{w{wyiwLwSw`x\\y`yc{j{q}r}r~r}s}u~w~z||||||||~{~z~{~|~|~z~|~}~~~~~~~~~~~~~~~}zwtsx|~}}||}}}~~wtwyz{{{{|}}~}~|x}~~{z{|{{{|}}}~}|{z~||{z}~~y{|}{{}|}~~}}}|}~~}||||}~{zzyyz|}yxwuonpojfdehkpw{~wttxzx||||xxxslifmw}}wpproklokisxv||yz~|umcr~~}}sssssttuuuuuuuuutsssssssstttttttuuuuuuuuuttuvvwwwwwvuuuuuvvvvvuuuuuvvvvvvvvvvvvvwwwwwwwwwwwvvvwwvvu~t~t}t|u|v}v}w}x}y|{y|u}q}p}o|ozoyqxuvyuzsxryp}p~n{nnnmnopoon~o{o{oyptqpptoxo{o}ooooonnppp~o|lykxl{l~lk~j{iyizj{jzjxkwkwkxkzl|k~klm~m}l}k}j~g|enbh`lbobpcqdoeofphrjvlxmwntnsouozo~nm~l|l{lzl{lymrmomomnmmnommmmlljnjvl}oqqpomkk~j|jzjyjzk|l}m~no~o}o~n~oqsrs{uwtzstuutttrqliiohUanom~nqrmns{ytqoonoqqjc~f|l}oifjkjjknopppppomigfjkkkkkkkkkkkopmkkjjklnprrromkiikmnnnppqqkegorsttutssrqqrsuwxyyyz{{{zw}v{uzszs{r{r|s|t}uvwwwxx~y{yzx}wvu}t|u{t|r}qrut}rzqxpvouounumvmvpxqxqxrxrzs~ttts}pxntmrmrmsotsvwwuuqtmsowr|tuvwwr|dvRuE}E{Slkvq{r}s}u~u|w|w{wzvytxnwkwjxixnxsytzrzqzs}u}yy{szsyswqxoyuzyz~zz{{~y}vytzsyrzrztz}}}}~~}{yyvutux}|{z}~~}|||{xw}x}vypvpxqtqsqzrsts{rxqxqzr~stuvw~w~x~x~w~w~xyyyvt}t|u{v{wytvrsnrotsvxzrukquzyzzyyxywzwwwtx~wduDqJm[j_lht{y}z|z|{}{}|}|||{z|x~vtrollos|wuypypyqxqxrxqxqxrytzx||}~~~~}}}|wtqjngrp{{|z{}}~|{{xytwrvqtstyux}zzzwyxrvouqururtrtrurvqwtwvuu|wzx{wytxrwrwrwrwqwqwtv|ttsv{tqn~n~n~r~xz{zx{s|s~srqqqq~q~s|uywwzz{{x}t}r~u~wwvu~u~t}w{vydwXv`vbw]x]yb{i|p~r~r~r}r}t~w~y~yz{||{{|~{~{~{~|~~~~~~~~~~~~~~~~~~~~~~~}~|yww{{{{{zz{{|}yuvxxxz|}}}~~}|~y~~}}}}}}}}|}~~~~~~}|}~}}}|||{~}{}~~{y|~}}}|}~~}|}}||~~}}}}}}}}}|zyyxxy{|xvvurrrnhb`djlpx}~~|zyy||{zwwwtporuz{zvrswsoprmlw|z{~}zxyy}vjpsy~}|ssssst~t~u~u~uuuvvuutttttttttttttuuuvvuuuuuuuuuvvwwwwwwwvvvvvvvvvvvvuuuvvvvvvvvvwwwwwwwwwwwwwwwwwwxxwwutsssttuvwy}{z{v{t{rzqyqypxpwsvvuvtvsws{qpooooooonnn|ozpzpwpsptovoyo|o~oooonnpppo}m{kzj}kjj}izixjyjzk{k{l{lzkxkxkzk|l~mm~m~llkhzembhalaobobpbocnephrkulxmwnuouowo|on~lylwkuktkvkukplnlmljljmmmmllkjjkktk}nooomlk~j}j{iziyjykzl{m|n}o|o|o|p}prtrr~sys|suvwvvutrmjjoiWcoo}k|j}h~gjrlkoqqponprmedk~n~i~^\\ehjjloqqqpnmljigeijkklkkkjkklopljiiiiknooonmljjjklnnmmmnppmikqsttssssrqqrstvwyz{||||||{~v|s|r~suut}t~tuvvwx}x}x}w~v~v|u{uzv|usqrq|pznwmvmumuovowoxpxqzr{r{r|pzowpypzs}t|pxntmslrmsmsputurtosmsnwp|rtuvwvo|^yD|F{Xts|s|t}t}t}u|x}y}y|w{uzpyoynykylyqytzszryt|u{xyztxvwywxyvzy{|zyyyx|w|uxsyrxpyqyszz|}~~}|z}wwuuuzvy{~~|z||}}|zzzy}w}w~xu|p{p~ppypwp}qrr}qyqyp{rstuvvw~w~w~x~x~yyzzxt~s|s{rzqxpvosotuyy{}}wytxxzzzzyxxxwywuwpxwyswVsLoXkepsy|z|y{y|z|||~|~|~z|{z|x~urplnqs|wuxoyoyqxqxrxrxryszt{x||~~~~~~~~~~|zvrqjso~{}|}}~|||y{vysxqvquuw{yywxwyywxqwsvuvsvsususvxxyywvv~y{xztxpwnvovovovnvnvpwvw}zz}omo{rzww}vwwx|yvzu|u}t~s~rr~q~q~q}szuxwyy{y~v~t~wwwtrrr~vzuxgvfujucv\\w]yb{h|l~pq~q~r}s~u~u~vxy{{zyz~{~|~}~~~~~~~~~}~|~}}~~~}}}}{zz{zzzz{||{{}xvz{zyz|~~~~}~||}~~|||}~}{||{}}~~{y{~}}}}}}}||||{~~}||||{zzyyyyyxwwxwuuuxxrnkeabisvw{}~~}zwxz{{xvuwvtuwyzxuvxywsprsqrz|zz|~|yxuuy{sjv}~~}{rsssss~t~ttttuuututttttttttttttuuuvvuttuuuuuuvvvwwwwvvvvvvvvvvvvvvvuuuvvvvvvwwxxxxxxxxxxxxxwwwwwwwwwvvutsssstuwx}y{yyyxxwwvwuwtvvvwuytyswsyrqp~o|poooonmm|nynyowouououowozo~ooonnnooo~n~m|k|k~kkj}jxjvjvkyl{m|m}m|lzlxlxlzm~mmmllli|hufpdpcnbnamamcmfojsmwnyoxovovowoxozmxlskqjqkqkrkrjojokllilhljljkjkikmkwl}nnnmlk}j|i{iziziyjykylzm{n|o|o|o|o}n~khlprr~rtvwvvvvupkkli]hp~n|hzg{f}gipebkqrqqprqigin~j~d[Wbhjjloqqpnnmkkjgdhhkllkkkjjjklkjjhijjlnnmmlllkjjjklllkkkmppmjmprsrrssrqqrstvwyz{||{||||x}s|q}q~t}tzsvsusxt{u~uwxxxwv~w{wzwzs{q|q|pxpvnxkyjzjzmyoyqzr|r}s~stuuro|lvktmtovotnsmrmslsmtntptnsmrkslvmzo~suuvxzlFJ~azus}u}u}v}w}x~x~x~x}w|t{t{rzmzkyqytztzszt{uzwzxywxvzwzyz{}zyxw~vzuyu{tyrxownwpxqyw{|}}~{wxuvuvuuw|~~}{{{{{zxx}x|wzv{u~tr~p~oooovo}pqq~r{qzq~rrsuvvw~w}w~w~xzzzzxvt~s{ryqypxq{s|w|y{{{x{y{{z|zzyvxtxvxvyszr{xzlvRqUjnsz{|{{w{x{{|}||~{}{}y{zz|wsqnosu|wuxoyoxpxqxsxryszt{v|y}|~~~~~}~}~~~~}ywuovnx|{z~z}{{|x{uyrxrwsvwvzx|wvyw}yyyzxqwtwtvtutusw|w{xyv~uv~x|wzrwnvlumumumumvmwlxp{v~u}rzrwyt}u|s~stv{wuxsyuzv{u}u~ts~r~r~q}s{tzvzw|x~xwwwurpqr~uztxmvmumuev]w`yg|i~kmmor~ttssuxyzywy~{~~~~~~~~~}~{~z{|}}~}||||||{zyyz~|}~zx{|{zyz{{|}}}~|{|}~}|}~}|~|yz|~~~||~~~~~~~~~}}~~}||{|}|||{{ywuvwxyxvtssqnpqvtlkliinu{{z|||}~{zz{|{zxxzyxwyzzywy|}{xvvwuvyxwxy{{ywvuuuqo|~~~}{rrsssssssssttttutttttttttttttuuuvuuttuuuuuuvvvwwwwvuvvwvvvvvvvvvvvuuvvvvvwwxxxxxx~xxxxxxxxxxww~w~w}x}x~w~w~wvuttssssuuv~w}v}v|v{vzvxuxtxsyszrzr{r}qp|oyo~ooonnm~lzowqwpvptptptpvpyo}nooonnnnn~m~l}k}kkk~j{jxjukwl{lmn~m|mzmwlvlxm~mlll~l|l}jzi{ivfqdobm`l`kckhmlsoypzpxpwowouosnrmpkojnjojpjpjpjpipjmkkkgkikjjijhkmkvl{m~mmmkj}j{iziyizjyjykxlxmyn|o|o}n}k}i|a~[ekopqsuwwwxwuqlllialrn~ezd{e}kaYafmqrrrqnljjjj~j~lfYbijmmnnmllmoqrokfgilmmlkkjjjjkjiiiiklmmmlllllkjjijjjjjjjkkklk~l~nrqqstsrrrstuwxyz{{|{||{|y~r}o{mxpupqppoqprrvs|uwxxyxw~w{yzwyrypzqzpzozn~llnprs~t~ttttvvtqlyjvjulwnvntmsmslslrlrmsmrkrkrjukxl|quvvwxnJOh~ur}s|u|v}v~wwwx~y|x|u{t|r}o{q{s{u|t}u~v|w|w{vzvyw{y}z~yxv|uyuxuxu}u|pymvkumvoxsz{{}~~|}uwuuvtwtzz~~||y}y~y~w}v{vzvxvxu{sqp~onnnnzozp~qrr}r|rrsstuvw~w}w}w~xzzyvwxw~u|t{s{t}t|szuwtuuuvvyy{{{zyztzqytywzt{x|x{vxYrTkqvz}y|zwzw{z{|{}{|z{z{xzyy{w~trprvw|xwxqxoxpxqxsysztzu{w|y|{~}~~~~~~~}}~~~|yyvxrvyz~u|q{vzyx{uzsyrwuu|tuuvzw|yyzywyqxtwtvuuvvyvywvtwtxtzuysxpvmvlvlvlvlvlwmwjznstrzvv~us~t~t~t}xyxuxuyvwvyw{w{vzvxvzu}t~t}s|t|v}w~xxxwvrpst~wzvwruotluewazk|q~p~pqpopwwvssux{zwy~~~~~~~}~ywz|{}}}}}~~}{{z|~}|ywwxyzz{|~|{{|~~~~~~}||}}xx|~~~}~~}}~~~~}~~}}~~}~~~}|||||xusuxyyvtpomjhklpnlmnnsxyz{|}zy|~}|{{zz{{||{ywustx{|~~|zzxvvxwutuwyyxxwvussu||}~}|sssssstttttttttuuuuuuuuuuuuuuuuvvutttuuuvvuvvvwwwvuuvvwvvvvvvvvvvvuuvvvvwwxxxxxxxxxxxxxxyyy~x}x|x|x}y}x|w|w|w}v~utttttsttttut}u|u{vzuytxrwrxqzq|q}p~o{nyo}ooonlk}kynvovouotprprqtqxo}nooonnnmmmmllkk}kzkwkvkwl|lmn}m|mymvlulxl}llll~l{kzkzk{jwhsepbm`jakeojpntqyqzqxpwpwovotntmrkrjrjpjojoioioiojoknknllkjkikhkkltlzl}mmlkj}j|i{hziyizjykxkxlym{n|n|m|j|h|m|agmopqsuxxwwvtpllljcntpe{czd{dVSainqrqromkkkjj~jkibbikmmlllklmoturmhhimonmllkjjjjijiijkmmllmmlmlkjjjjiihh~ghijklm~n~oorqssrqrrrtuvwxyzz{||||||tm}lxmtmrmonpnrpvs}twxyyxx~x{xyvxrxpzq{p~nmllortvvuuuuvvurmzkzk{m|nzowntmrlrlqlrmrlqkqjsjujxkzptvvwwrVRmvs}s{t{u|u}v~vwwy|y{w}u~uq|q|s}u~v~vv~v~v}vzvvwzx|y~x~v|uxuxv{w~wvqzmwjukumwryw{}|}ytxvvztztzx~~~|{w|x}w|uztxtxuwtys}rpoonmno|o{p}rsss~rrssstuw~w}w}w~x~z~z~zx~y~{{~x}v}v}w|uzrtmopprqssww{|{{x{t|s{s{t|s|w}{}xzctUmqwx}v|wyxxyyx{x{xywywywyxxyw}ussuw~x}yzyrxpwowqxrysytzuzw{y|z}|~}}~~}}}}}}z{xyu}w~y{zzxzsyuyvyyvytyrxuusssuv}x~z|{~zztxtvuuututwuvuuswswswswrwpvnvmwlwlwlvlwlwm{prss}ty|utu|u{uyvwuuuuvvvwxxyxzxxxwxzw|v}u}t}s}t}v~w~w~ww~wvuuw}yzwxsvotjveyj|y}|~ywxuqo|~zts~t~x~|~{~x~{~}~~xw{|z}}}}}~~~~~|ywwwxzzz|}~~zzz{~~~~~~~~}}~~~|||~zyyz||}~~~~~}}}~~}~~}{{{|}}|||}~|xtstxzxvspnmhdilolnnknvzyyyz|zv|~~|xywy{||}|ywtpnu{}}}|{zxvxxwsttvwwxyyxuttx~}yy}~~}ttttttuutttttttuuuuuuuuuuuuuuuuuuuttttuuvvuvvvwwwvuvvvwvvvvvvvvvvvuuvvvvwwxxxxxxxxxxxxxxyy~y}x|x|x|x|y|x{x{x{x|w|v}v}u~uuttt~uutttt~u}vzuyttrrquqyr|r~q}o{n{n}ooonl~k}kzkykwmumsoqpqqsqvp|oooonnnmmnmmml~l|lzkxkxkzk}lm~m{mylxlvlvlwk|lllk~lzlxlymwmulwivfqcjepiymyqvrvrwrvqupupuown|m~l{lwkrknkojojnjnkpkrlvmtlmlglflilplxl|l~lkk~j}j}i|h{izizjykykylzn{o|o|n|m|k{g{g~jpqqstvwwvuspmklljfzqvsg{by_y\\OUdkoqqqnllmllkkkjkjfjkllkkklmo~q~tvtpjikprpnmljjiihhijjkmonlmlllllkjiiiihg~g~e~gi~mnqqrqjadqroo~q~rrtuvwwxyz{|}}|}}vm~j{kvkskslsmvp{stwxyyyx}x{wztxqzq}spnllmpsvwvvvuuvvut~q{ozn{n}p|p{pvnrmrlrkqlqkrkrktkvjwkxm}svwvxv`Wrvt~s{syszs{t}u~w~x~x|x{y}xvttuvxxwwwv{vpwswzw}v}uztyu|vxyxt~nxkujtmusxuz|~{~~yuwzw~w~v|x~}}~}{zv{vzuyswsvtxuyu{sqpponmnp~p}q|stutssrrr~r}t}v}w}w}w}x}y}z|{{{y{y{{{{z}x}x}zzwwpqjmkjljpotuz|z{v|s}t|t}s|t}u}y}x{lv\\pqxw}t}tzvywyvzvyvwwwwxwxxxyx|v~uuw~y~y~z}yvxpxowpxqyrysztzwzz|{}|}}~~}}{}{}{}{|{{yzxzw{y|yyywywvxsxryuwxuwqwrt}qpprt|w}z{|y{{yyvvutusususururvrvswtwswrvqvownwmwmvlwlxo|qsssszzvt~u{vyvvuututuuvvwxxyx{y{x|w|w}w}v}u|t}s}u~v~v~w~w}x~x~w~wx~y|xzvwpvjyi|s~|z{yuozz|yx~v~x~{~|~z~|{zyyz|~~zy}|z{~|{||}}~~~}~~~~|yxxxyz{{{||{xttu{|{}~~~~}{~~}}~~~}zyyyyz{|}}~~~~~}}}~}{|~~|yxyy||||}ytsvz{xvtrpnjeinomprosxxwuttvzsw}~xttxy{|~}{yvqmsy{|{yyywxzxvtttttuxy{{xwwy|}|z{}}~uuuuuuuuutttttttuuuuuuuuuuuuuuuuuuttttuuuuuuvvwwwvuvvvvvvvuuvvvvvvvvvvvvwwxxxxxxwwwwxxxxyyy~y}x}x}w}x|x{xzxzx{x{x{x{w|vutu~u}v~vuuttu~u|uztvrtrwr{s}rq}o{n{n}ooonl~l~k}k|kymtoqppqqqsqvp{ppponnmmmnnnnm~m}m{lykykzk{l{lzlxkwjvjujvkxk{k}k~k~k|lymyn|nwpwp~n}lwhpjxlo|qtrqrsrtqtptpspuoznmm~lvlplqkqkokmlplsm|m|msljlhlilolwk{k}k~k~k}k}j|i|i{izizj{k|k|l}m}o}o|p|o|mzfzm~prssuvuurqnjfbfmonwlrs|xuj}`x]wR}LZfkoqqpommlllllmnpp~mlllll~l~l}n}o}q|s|t}usplklqrqonmljiiiiiiijlmmllkkkkkjihhhhg}f}f~e~gjg}a|X{TSUM{C}Okrp|n|n}o~prtuvwwxy{|}}||{tk~i|jwktktlumwoyr~tvwxxxx~w{vztys}rspmmlnsuvwvvvvu~u~u~ts~s|t|s|s|s|s{qxoumtlslrkqkrkslulwkwjxlyrwvvwuf]uuts|r|rzrzr{t|u|t|rzqxuzv{uuwv~uwwxxwwwwwqwwvutxt{uwyzzvq}lvisnttwty{|~|zwx~yyx~y}|}|{yx}uytxsvsuuxv|w~urppponmnpqr~tuuttsr~q}q{qzr{t|v|w}w|v|v{wzwyxxxwwxwzw|w|v{vysuvsxoqoonstwyy|y|u}s}t}s}s}s}t~w}w|sxkuryv|u|s{tzuxuxvwxxyyyzxzwzxyzw|w~w~x~z~z~y}ywxqxoxpyqzrzsztzwzz{|}|}|||||{{{yzyzyyxxxxwyxzyzzxzvzuwwtxszuzvwwswquzrpnnq{v}z||u||{{yzuwsvststrtpuqurvtvuwuwtwswqwpvovnvmwmxo|qrrsszyvu|uzvwvwvwuvuvuvvwwwxx{x|xww~x~w}u|u|u}u~v~w~x~x}y~yx~xyz~z}wypxmznw~}||zwvxv|}}z~z~|~}~}|ysrsuwz||||}|yy~|zzz{{|}~}|}~~~~~{vux|}}||{|{zytnlnvus~~}~}z~|zz|{{|}}~~}}|}~~~}||}|z|~}zwwwxzz{|~{utvxyxvuttssprsroswwzzyyvtqv~uuz}}}xkipstw{}~~|z}}||zwwtsuwyyvvvsrtv{}|{zyz{||yyz{|~vvvvvvvvvuttttttuuuuuttttttttttuuuuttttttttuuvwwwwuvvvvvvuuuvvvvvvvvvvvwxxxxxxxxwwwwxxxxyyyxx~x~x~y}w|x{x{x{x{yzyyyyx{v|v|v|w|w}v~u~u~ttuu}t|s{rzr{s}s}s}q}o|n|o|o}o~nmlllm~mynspoqoqqqtqwp{ppppnmmnnoooonn~m{lzkykxlwlvluktjtitgthuiyj|k|k|jzjylwmym~pzs|usr}oyn}np|qvrtrvqxqvptpsptpwo~onnzmvmwlvlrkolomum~nnymtmslnlplxk{k|k}k}k}k|k|j{jziziyj{k{k~lmno~o}o|ozpzs~tqqpuvvrmliTQ\\h~n~qxqmpittv~vndy\\yM}Pafimqqponmmllmmnpt~u}s~olkmn}p|q|rzrzsysytzt|spmmmq~r|q{ponljjjlmkiiijkklmljjjjihgggg~g}f}g~gji_wIr>t;=C{=x8Kjs|rxlzk{m}psttuvwwwxz{|||ztlj|jxkukukvlvnwp{q~uvwxxwv|uzuzutrmjmlotvwwvvuu~t}u~u~s~q~q}q}r|r|p|o{nymwlulskrkrksltmvmwkxkxmyquvvvvlcussrrr{syswswrwmwftdrfuiws|t~t~t}tvwxxxww~wswtvu}uwu~vwyzzxunxhrmtrwrz~{xzzzz{{zz~{|zyw|vytwsvttuuw{yxusrrrpnmnqrttuut~t~s~r~q}r{rzrzrzt|v}v|u|u{uztzuytytyuyv{w{wyyxpvuv{surutwxw|w|w|t|r}t}s}s}s~s}u}v{vyuytzu{u|s{tyuxvwwxyyzzz|y|x{xzzy{x|x|y|z|y}y|ywyrxpyqzr{r{s{tzwyzz|{}}|x|u{yzzyyxxwwwwwwxwyxyyxzw{uzsxvvxt{u|v{xxxtxvvrnln|s{y}|t{xyyv{tyrvsurtrtotpurutvuwvvuwtxsxrxqwpvownyn}pqqrsywv~vzuxuvuvuwvwvwvwuwvvuwuwxw|w~w~x}w}v|v|v|v}w}x}y~yyy~x~xyzzx|u{r|rw|||~|~}{{|{w~}|{~{~}~~~zyvuvyzyy}|{yxzyyyyzz{}~~~~}~~~{wuvy}~|xwwwxxuqrtzxw~~||~~|{|~{||~~}}}}}}|{{{||~~}|||||{}~}zxwvwxy{|~{vvxyxvvvxxz|zzyvsw{{|}||zzz}~vswyxsa}Vbnopvz}}~}|{zvsnmmmvy{xuroqv{~}{yyzywuprwwwyvvvvwwwwwvutttttuuuuuttttttttttuuuuuuuuuuuuuuvwwwwvvuuvvvuuuvvvvvvvvvvvwxxxxxxxxwwxxxxxxyyyxxwwxx}y|y|y|y|zzzxzw{wzxzxyxyyzyyyxyv|u~uutsrqr~s~s}t{r{p|p|p}o}n~m~lkklnnzosppqqqupxpzp|pppponnoppppoon~n{mykxjwkulslrksitgtereqgvj|l}l{jwjukulxmptwxwtqpp|q|r}rq~qyptpsqwq{ppoon|n}n|lwltltmwnnn}n}m}mvmulyk{k|k|k|j|k|k{jzjyjxjwjukwl|lmmnn~o}o{o{rrqpnqsnhhlmpU}FZo~s~r|rsrktnvyvph~\\}KTefilpqponmlll}m~n~oo~p~q}p~nmln~p}q|s{szszryszs{s|r~qonoqq~r{q{p}omkkloqnkihhiikkkiiiihhgffg~g}f}ghkc~Ot?t8}8;Ev<x7Mkqykviyi{l}pstttwvwt}owqzv}{|}|wpk|jxkwkwkwlwmvnxpzs}uvwwwv~u{u~vtlhknptwyxwyxvt~s}r}p}m}l}l}l}m|l|k{j{iyixjvktkskrlsmunxnymymzn|m}ouvvxsksrrsss}sysvruouht`p^m^qauqzt|r|r|s~uwwxyxwwxwrwv}u|uwxyyyywp{guluqxs{~|yyz~zz{{z{{yw{uxtvsuttvuwzx{xutuwwtolmqrttt~t~s|s|r}r~r}s{v|u{u{u}v}v}u}v|x|v|u{t{tztyuzyy}w|vxvzwyupo|txyu}u|t{s{s|s|s|t}t}s}t|u{uzvzt{t{u{sztyuxwxxyzz{{z}y|x{xzyyzxzxzyzyzy{y{yvysyqzr{r{r{rztywx{x}z|{|t{n{uzzxzxxwvwvvwwwxxxyxzw{tztyuvxt{u}v}x|zxzwwtoll}pxvzzxyyxzv|tzswsvstrtotqtrttutututvsxszs{rwqvpyozn}oqqq~rxwv{uwuvtvuwvxvxvxuwuvtvsusuwv|v~v}w}w{w{w{w{w|x|x|y}y~x~x~x~x}xxx~w}x}w}tvzz|~|~|{{|}|}{{{~|~}~~~~~|{wqw|zwr|{ywwvwxyyzz{|}~~|}~~{xyz{{|yzurptwxvutvz{{}~~{~~{z{}~~~~}|}}~}||||||{{{{z|}~~~~}|}}~~~{xutuwy{|}}}|zyy{zywwyz~}|yyxwv|~||~}|wuuspg_bkqsuxyz~~}}{yvx{{{unlmlqrtqjggmvz||zxyzumffoyxvuvvvvwwwwvvutssstttttttssssttttttuuuvvvuuuuuuuuvwwwvvuuvvvuuvvvvvvvvvvvvwwxxxxxxxxxxxyxxxyyyxxwwxx~x~x~x}x}y|yyyw{w{v{vzvzw{vzvzvxwxxv{u}trqqqrr~r~r}r}q~p~n~ljiiklnn{pwquqwpzp}o~o~oppponnnopqpoonnzmykxjwkuktlujxhyevbqbneriyl}m{kuksmxo}mptxzzvrp}p|qrrqqzqsqsqyrqqppooon}m{m{m}noo~n~mm|mzm{l|k|k{kzjzjzkzjyjxjvjukqlrlxmmmmn~n~n|n|pqqiTL\\dfiosse|R`tvsrsztuvzurl]KVggilooonmlll}l|m}o}p~n}lzmzm}nmmo~p|r|r{r{r{s{s|r}rrqpppppp}qzpzo~mlkmpqpnljihhihhhhhhghgfff~g~g~hjeUxAq:{89>Gr<|7Ok}kydwgzj{l}n~qsssuuuozhtjwq{w~{}}zunl{kzkzlzmymxnxpxr{t~uvwvvuvwthhlquxyxzyv~r~p~m}l}m~q}t}t|r|p|o{m{kzjziyixkvltlslsmsmuoxozp|o|n|i|i~ptvwuqrrrsttt{rxovjtas[pZnZq]sryu{rzq{q|uwwxxxww~wuvwwwxyyzzyxt~jymwr{w|}{|xyyz{{{{zw{uvstrttvvvx{zz{ywvxzzwomnqrs~s|s|r|q{q{r|s}t|v{y|z}z~zx~wu}u}x}w}w|v{uzsyryvyyx|v{v{vyvsq}vy{u|t{szszs{s{s|s}s}t|t|tztzu{s{t{t{sytxuxwxxyz{z|z}y|x{xzyyyxyxyyxyyyzyyyuytyrzs{s{s{rzsxvxxyzx{x|n{gzryyxzxywwvvvvvwwwwxwyvzt{tyuvxt|uvy{~{}yvqmk~nwtxxzyyw~u|uxtwturtqtrtsttststtttsws{s~sqypuozn~opppryvwxuvuutvtwuxuxtxtwtvsuutxu|u~v~v{wzxyxyxyxzwzxzx{x{y|x}x~xy}x~vwoxo}y{wwxy~{}|~|~{|{{zzzz{~}~~~~~~~~~}~}|xtz~zvr|ytwzzzzzz{{{|{{|{|}}~}}}}|zusyvvz|{ywuuw{|{||}~{}|zz{~~}}~~~~~~}}}}~~}}}|{{||||{z{|}~~~~~|xtrrxz|||{zywwx{|yyyz}~~}zxvtv|}||~~|yunkikmpsvxxvuuwzxvxxslmsv{xsqtuuutsnmouyz{zxxzzuh\\_n}|xwvvvvwwwvvuttttttttttttsssssstttttuuuvvvvuuutuuvvvvwwvvvvuuvvvvvvvvvvvvvwwwwwxxxxxyyyyxxxyyyxxwvwwwwww~x}x{xyzyzxzwzwzwzv{u{uzuyuxvvxt{s~r~r~q~qpppqqqqnjfhkkm~m|o{q{p|p~oooopppponnooppooon{mykyjxjwjwkzj|g{dvapamdogtjym{mznsp~qnotyzzvs~qzq{qrrrqzqsrsr{rrrqqppppoonooo~o~nmm}m|l{k{kzjyjxjxjyixiwiujskokqlyl~mmm~m~m~m~m~oprs_KWglnq}tyq~ijsvsrsuuutp_KWhhhjkkj{j|k~ll~l|m{o{q~rpn|o{o}o~nop}p|q|q|o|r|r}s}s~sssrrrrpo}o|o}onnmnoponlkjigfeddfgihggfffghihW}Dv:w99<@Ep:~8Pj|n{mzp{o{l|l}n~psstwrjxivkxn{s~w{}|wo~k|jzjylylzm{nznzq{s|t~uvvvvvvskjlnqtutrn}j{j{j|j}k~n~q}t|u|t|r{o{o{nzmylxmwmvmumtmsmtnupxq{q}r~n|hzf{i~ouuussstuvvu~rzmwbuXsWpXnWp\\uqyv|t|r{q{tvwxxxwww}wwyyzzz{{wzwp{ozs}z~~{yyz{{{{zxzussqrqstuxx|z||{yxy{}}yqnoq~r}r|qzqzpzpzq{s|t|w}y|{||||{zv~u}w~x~x}y|wzvxsxsxux{v|u{uywww|zv|u{tzsysyszszs{s}s}t|t|tzszt{s{t{tzsysxtxvxwyyzy|y|x|w{xzyxxxxxwywyxyyyyzvztzsztzt{szsysxtxvzxyywzpygypyxwzwyvvvvvwwwwwvxvyuztzuxvvyu}vwyzzyvqnlnysxx}zyxw{wxvvusssssssssssssssssstswtzsr}qup{o~ooop}qxuvvuvtusvswswswswsvruruvt{u{uyvuvtwtwuwvwwwxwywywzwzw{w|w}x~xw}sojsj}y~}yxwy~|~}~}~|||zxxxz|~~~~~~~~~~|{|~|{yxuw|~~}|{{{{{{zy{||{{~~~~~~}{tu|y{~yvwvwxzyzzz}~~~}}~~z~{}}}~~}|}}~~~~~}~~~}{{|||||||||}~~~~~~xssy{}}|zxwurquyyz{|{||~zvqu{||||||~~|yupmjirvxxyxwvvwwpjjopkimrywuttuwy{||{|}|{ywvx|{vi[Ygz{vtvvv~v~wwvvvutttttttttttssssssssssttttuuvvvuuuuuuuvvwwwvvvvuuvvvvvwvvvvvvvwwwwwxxxxxxxxxxxxyyyxxwwxwvvvvvw~w|x{yzyyyyyxyxzx{wzvytytxtwvuvtwsxq|pppoopqrqlijl}k|l}l}n~pqppppp~qppponnnnopooon}lzjxixixiyj|i}gzdtbmbmdserislyn|ozqrootxzzvs~qzq{qrsrq}ryryr}rrrrqpqppppppppp~on~m|m{lzkzkxjwjviwixixjwjujskrkwl~llmm~m}m~mn~pqrupacnpqr}sysrnpusrstttutbJVfhhhe{dxcuhyk~mn~n|nzp{rron}o{p}q~q~q}q}r|r|q|o|n|q}rss}t|u{t{u|v}u}s~p~lkmmoonooonllkjgffebbfiihhffffhg`}Ix;{89<?D{Ct:@\\mq}u|{{pzm|l}k~k~o~suwo{ivjxkzk|n}s~y{|wn}j{j{jxlxlyl|m}n|o|q|s}tuvvvwurmlmmknpq~rr~s{t{s|s}s~r~p~l|k|k|kzlzlymxmxowowpvovovnumuovqxr{r}r|pznwmxmzp~stsrstuvwwvs}ny^uRrSpUnUo\\uqyw|t|s|q{r~tvwxwwvwwxyzzyxyzvzxv~s}w{|zzz{{{zyvutntnuqvwx|z|}|zyyz|~~{ro~q~t~t}r|ozozozrzs|u|y|}~}~}||x~v}v}x}y}z|{yzwxvtwvw|u}t|uzyxzw{q{rzsysxsxsysyrzr|s|t|t|u{t{u{t{t{tzsytxtwvxvxwyx{x{w{wzxyywzwywxxwxvyuywzx{uztztztztztytxtyu{vzwxxtxqxtwwwwvwuuuvvwvwvxvxvxuytyuwwv|vxyzzzxurnln|syx|zzy}yyyuxrvrtrsrsstsssssstsssrssstt}sr}q~poop}qzsxvvwuvtususvruqvqvswtvuvxvxvvvsurururusvuuwtxvywzw{v{vzu{v|w~y~x{qqjwo|z~}{yx~z~}~}~}~}~~~zyy|~~~~~~}~~~~~{uu{~}}}||||{{zzy|}}||~~~}}~|yxzxy}|{{|zyyyyy{{}~~~~}|}~}z|{~~~||||}~~}}~~~}~|{{{{|}}}||}~~~}}}~~}xy|}~}{yyxumhrz|{|zz|}vpu{||{zyz}~~{xvvvtnsz{zzzxwyyypfb`_dkuy{wtuvwyyzxwwxyzz{yy{~xokd]`t|wsv~v~v~v~vvvvuutttttttttttssssssssssstttuuvvvuuuuuuuvvwwwvvvvuuvvvvvwwwwwwwwvvvwwwxxxxxxxxxxxxxxxwwvwwvvuuuuuu~v}v{v{vzvzvzw{xzwzyyywxxwxvxtyr{qpoonpqqpmkkl}k|k}l~npqqqq~q~q~p~p~p~p~o}n}nmnopoooo~mzkwjvjxizi|i|gzdsclcmevfriqlxn}prrpqtx{{wsq}p~qqrqq~q{r|r~rrrqqqqpqqqqqqpp~o~n|mymxlxkxkvkukujvjxjyjxjukslulymmmmnnm|m{m|p~rruupmprrrqom~l~pqqssttuwxdIXeggg~bwbvewh}kmo}o{ozp{p}ok|jwlyo}q}q}q}q}q|s|r{o{n}o~rr~t|tzuxvxvzwyw{t{q~jilmnonnnnmllljhfedaadghhgfeefgfW{Cu9|89=@Ex@y:Kfoqr|s{p{m|l}k~l~nrrunzixk{k|k}l}p~wz{w~n}j|j|kwlxlzl|m~no~p|r}stuuuusqommmlnnoq~s~v|w{w|w~vtq~o}l|k|k{kzlylxmwnxoxowowpvpwnwowqyr{s|rzqxpwownxq{rttstuvwxxwuq|\\vMsNqPpRq[tryv{s|s{rzr}tuxxxwwwxxyywurruzyvwxz|~}{{{{|||zxuruouqwvx|z{}}|{zz{|~}ztp~swv~s{nzozpyr{t|w~z}~~~~~}|{}y|w|w|x|y{zyzwyuxtzt}t~t}vyyw{uzrzryrxrwrwrwrwryrzs|s|u|u{u{u{t{s{sysxswtwuwuwvxvzvzvzvywwyvyuyuxvvwuxtzwzx{uzuzuyvyv{wzwzv{v{vzuzvyvxvwvvvuuuvuvvvwvwvxvxvxuyuxuuyu~vxyzyywurnlmr|wzz{{{zzyyxtxpvpuptqtrsssrrsrrsrsssttutyt}trqpoq{sxuxwwwuvtussrsqsptrvtwvwzxzxxwuvrtptrtrttwtuuuxvyxzx{w{u{t|t}v}}}w{mxl{w}|}}~{w~y~|~~~~~~~}}~{vww|~~~~~~~}}}~|{yy|yz}~}||{{{{zx{}}~}~}|}~~~|yywwz{z||{zyxyz{}~~}}~}||~|~~}}|||}}~}}|}}~~}}{zzz{|}~}}~~~~}~~}~~|{~~~~{{{~xqlq{|{{z{}~wux}~}{yxy}~{xwy|}zy{{~}zyxxzyqeVORZlwzzwuvvyzzyuqqrvyz{zy~}uonrjcq}zvv}v~vvvvvvuttttttttttttsssssssttttttttuvvvvuuuuuuuvwwwwwvvvvvvvvvwwwwwwwwvvvvvvwxxwwwxxxxxxxxwwvwxxwwvuuuuuvv}w{vzvzuzv{v~vx~x}x{wzvzuytyr|q~ponoooonlmnllm~np~r~r~r}r}r}q}p|p{ozozozn{n}n}n~o~o~o~oooozmuksktjzj}j|izftdoeoh{iwjtmxo}qrrqruxyyu~q}o|o~ppppqq~qrrrrqqqqpqqqqqqpp~o}oznumsltkukuktkukwkykzlylwlvmxm}nmmm}mzmzlwmvmwq{rrsu|vusssqpnl~l}n}p}r~stst~uvzdHZhfe~czdyezi~jlmo|o{pzpzo|lzdrcmisozr|q|q|p|p|s{v{r{n~mqs~vyvvwvxvyxzwzwxyu|kgklnonmmllmmlkjgdbaa`bghffddehdRx@u:~:<?ABt:<Slsrq}p|p|nllklnnrl}jkl~k}k}n~sz{vn~k}kmxmyn|n~noop~qrstttssqp~o~oonnl~m~mps}v|x|yxxvu~q~o~o}n|nzmylylykylxnxtxsynypyq{r|r}ryqwpwowowqyr|sttuvvwxxwvtZxJrJqLpPqZtrxv{t|t{szr|tuwwwwwwyxxvtqllr}xty}}}||{{{{{{{zw~trvsxy{~|~}|}|{{{||~|yvtwzys|myp|qzt|x||}~~}}}}~~~{|{y{x{x|x{yyzxzu{s}r}s}t|wyzvztzryqwpvoupupuququqvrzr{u{u{v{v{t{szsysxswtwtwtvtwtxtxtxtwvvxtxtxtwuvxuytzw|y}v{uzvywyx|y|y|y|x|w{w{wzwyvxvvuuutvuvvvwvwvxvxvxuyuwvsztuyyyyxwuromns~xz{z{yzzy{xvxpvnvouptrssssrsqrrrrrsstuuwu{t~rqpq}szvyyxywxvwuutrsprqqssvwyyy|z{zyyvwsuquruswuzsysxwxyyzx{w|v|t|s}t}v|t{o{t|{~}~~~~|~~~~~}~}~{~{{xppt{~~~~|}|}}}~~}|{{|}{~{~|zzz|{y{~~~}|}~~~~~zxxwxxyz{{zyz{|}~}}}~~~~|}~~~~}}}}~~~~}~}||{{{{|}~~~|z|~}}~}}|}|vuyttz{|||}~}}~}zxww{{xwz~}{yy{{{xwz}{wjYT_ekvxyywwx{|zxutsswxy|yuvvqqt|vjq{vvvvvvvuutssttttuuutttssssttttttttttuvvvvvuuuuuvvwwwwwvvvvvvvvvwwwwwwwwvvvvvvwwwwwwwxxxxxxxwwwxyy~y}y}x~w~wwvvww~x|w{vzvyvzv~vvvw}w|v|uztzsyqzp}onnmmmlkmnnnop~r}s|r|r}s}r~q}pzoxovnvnvnxo{n|n}n}o}o}o~ppo{nwmtlskyk~k~k}lzjwiulzmymynzp}qqq~q~r~uvuzrxntltltmwnyozozo{p{pzp|r}qqqqrppqqqqqqqpp~p}pyosmrlrlsltlukwkyl{l|m{mzmyn{nnn|mxlrlqlrkslsmsoxonmn}pqrqppqqon~p}r|s|t~tt}tzs|uyeEQbde~d|e~fghjk~m{mzkzjyhzewbteskwpzr{p{m{m{m|p|t{s|n}n~qt|uvutvtxvzx{xzxyxw{mhkklllkjjjmoomlidagme^befeddehb~Nx>v:~<=@B}@r9?Yqtsrq~o~nlkjklnollmmllm~qyzu~p}n}mo}qqqppqqrsssssr|rzpzpzpzpzp{o{nynyn{o}ssr~swwyzy~vt~r~p|n{kzizfzeyeyiyrzv{s{r{r}r~r}qypwownvovpxqzrstuvvwwxxwvZzGrFpIoNpXtrxv{t|t|s{r}stuuvvwwxwusomkntzuv}}|{|{{{{{{zw}uswxz}~}|||||||}}|zwwy|zuzkwqzs|v{}}}~~|||~|~{y~y{zxzx{x{zzzy{v}s~r}r|u{xxytzrypxnvmtmsnsnsosopooptqyt{u{v{v{u{szsxsxswsvtvsususvsvtvtuutvswsxsxvxywzv|y}y|w|uzvyxzy}y}y}y}z|y{yzxzxxwwwuvtvtvuvvvwvwvxvxvxvxvvws{suxyyxxvtsporv|yy{xzwywxwxtxpwnvnuotqsrssrsrrrrrrssttuvuyt}sqqs{wyzx|x}x|v|uxtssprpssuwyzz{}}}}{|yzvxswuwvyw|t{s{wzxzzx{w|w|v}v~t}o}l|r|z}{~}~~~}~~~|{~y~y~yn`\\lw|{~x}y~|~~}}||}}~~~{yxy{{{|~~~}|{|}}~~{zyyxvvxy{zyxy{}~}}}}~}}~|{}~|}~~~~~~}}{{{||||}}|||yyyz}}}~}}{{{{siozxux{}~~}{yxwvsv}}}|yrrx{||zyxy{{{{|xvqihsvswx{zwxxzzwuuvwtuz{{tlnosxz{qu}vvvvvvutttssstttuuuuuuttssstttttttuuuvvvvvvuuuuvwwwwwwwvvvvvuuvwwwwwwwwvvvvvvvwwvwwwxxxxxxxxxxyz~{|{|z|z|y}y}x~x~x~x~x}x|w|vzwywxwxxzv|v|v|v|u|u{t{tyrxq{o}n~m~l}k}j{jzkymznopqr~s{szs{s|s}r~q}pzownumtmsnuozp{o|n}o~o}p}p~p~po|oxnwmzm}m~nr~p}oyqzpzo{o|p{pxpuoupvrzu~v~rwptkqjqjqlrntnuovnvnuoupvqyr~qoprqqqqqqqqq~p~p~qp{nvmtlrlrltlvlyl{l|m}n}n|n{n}nnmzmulnlnlnlplplrmwlf_befjmnprssrrt~uvvv}v{u}uulPEVciggfee~f|gziyiygzaz\\u[s^tfvlxpypzlzizhzj{j{o|q|o~nprysstrtsvuxyyzzzzzy{rljjjjjihhjmopnmkidksna_cefefgi]~Hz;}8<>@Az@q;Dasssrq~q~oljjkmnnnnnnnmmovyu~s~q~qrstssrqrsssrqq}pypwpwpxpxpxqyoynwmvnyqzu}rmmqtyyy~w~t}p}k{hzfyeydydybydyi{r|r}q}q~q~q}oynxnwmwnwowpxr|rtuvvwwxwwvZ{EsEpGoLpWtqxv|t|t|s|s~rrstuvvwwvsplkmrxwrx~|||{{{{{{{w{vvy~|~~~}||||||||}{zyyz||~wzlvsyw~y{|~}}}{{w{s~u~vw~w{xzyx{x{yzzy{x|t}r}s~vyxvxrypxnwlukslslslrmqmomlnppvsztzuzuztztzsxswsvsusurtrtrtsusuststutvszszvzyy{y}y~x|v{uzvzx{x}x~x}y}y{z{zzyyyxxvwuwtwuwvvvvwvwvxvxvxvxwvxs|suxxyyxvtsqp}t{wyyxzwzuysxqxqxpwovovnuotqtssssrsrsrssttuuvwu{tss~vy{w}wwwvu|uvtpspsrvvyyz{|}|}~}|{zyyzyyzy{u|r{u{v{wxzv|w|y}{~z~w~n}l}r~z~~}}}~|z{yv~v~t~aKJZjwvtw~|~~~}}~~~~~~|{zyxy{|~~~}|{}}||~z}}zwvx{~{xsvz}}}}}~~}{yz|}|}~~}~~~}}}}~|z{|||}}}~|wx~{wyyy~}|{z{zz{xmhu|xxw{|~{xwtrtwvsrrry}xrou{}~{zz{~~}|xommqrtxuuw}~zyz{{vsrmkpstu{ztmmswy{yuy}}}wwwwvvuttsssssttuuuuuuuutttuuuuuuuuuvvvvvvuuuuvwxxxxwwwwwvvvuuvwwwwwwwwvvvvvvvvvvvwwwwxxxyyyyxyz~z|z{z{z{z{z{y}y}y|y|y|y|x|w|xzxwxuyww|w~w~v}v|v|u{u{syryp{o{mzkzjyjwjukulxn~oqqs}szsysyt{s~rq~q{pxowntnrotqyp|o}n~o~p~p}p}q}p}p|o{pzo{n}o}o~q}r|r{q{p{p}p~q{puoqnpoprtv~wu~r{oxmvlumtnuounumumtnrprqsqwp|o~orqqpqqqqqq~q~q~qp|nymvlslqmqmumym{m{n|o}o~o}o}nnn}mzltlrlplqlnljlvg_W]b`djnqsuutuutuuvvtt~swhNK^gfff~d{cybwbwcxe{e|d}`x[sVs^vixmykyhyfyfzi{i{m|o|n}n~pr|rrrqssuuwyx{z}z|y|s~mjiiihgffimooommlehruiabegghifVA~99<=>?u>t<Shrrrsrqoljjlmnooooonnmoswuu~sttsssrrrrsrrqpp|o{oyoypxqxqxpzo{nzmxmxoxq{p}k~k~mqtu~u~q}m|j{gyeydycydxdyezezg{i|j}m|n|n|m|kyixjxlxmxnxowqzq|stuvwwvwxvc|IsGoGnKpVtpyv|u}w~u{s}rqrstuvwwvrnjiltxvr{}||{{{{{{{w|wzz}}}}||||||||{|{zz{|}}y~pyuyzz{{{{{}~~~~{x{q|m~q~su~u|uzxx{x|y{zz{{|v|n}twxxtwqwovmultltmtltlskqkokmmnntrysytytytytyswsvsustrtrtqtrtrtqtqsqsrtvtzt|v|z{{z~x~w|uztzu{w|w}w}x|y|y{yzyzyyywxvxuwuwvwvvvvwvwvxwxwwwxxwyr|t~uyzzzxvutrs{wyyxzwztyrxpwnwowqvuvuvnuoupuruuuststrsrsstuuvuyu~tt}xy}wwwvut~txtqspsqutxyy{z~|~~~}|{{{{{{z{x|v{t|r|uz|v|w|{}}~}~}~}~u~m~v~~~|~|{zywts~r~Y~>~C}F~Zpmsx}~~~~~~~~ywyzyyzz|}~~}}}~|z|}~~~}wx~~zy{|xrv{}}||~~~~xz}~~|zwy|}}}~~~~~~}}}|{{{|}||||||ww~}{||}}zxxxxx{zwtu{zzyz|~~yssvrmrxzxtoanytvvy}}{{||xodhqpmv{zz|y{||re^ROgwrqturnnquwxyuuuvxw~x~x}y}x~wvutssssssttuuuuuuu~u~u~uuuuuuuuuuvvvvvvuuuuvwxxxxxxxwwwwvvuuvwwwwwwwvvvvvvvvvvvvvwwxxxyyyyyzz}z}y}y|y|y{zzz{z|z{zzzzzzyzx{y{zxytztywxzw{v|u|v{vzu{t{szq{p|nzkxkwkwktltmxn~opp|rxrusrtttys~srr~r|q{pypvqwr{r}p~opq~q}q}q}q}q|q{q{p{p{p|p}n|o|o{ozo{p}q|rzqupqonpnsov{xxws~p{oxowpvpuouovnvovpvrurwpzn~oqqqqqqqqqq}q}q~qp}n{mxmtmpnnnrnwn{n{o{p}p~p}o}o~nnmmzmvmrmqmqmoiybZ[ab`cjmqrsssrrstuvusrv}x~vbNXb~b}c|bzax`w`w`xa{cgif}bw\\v`ugwgwexexdxeygzhzkzn|n}n}pr|qrqprqssvxw|y~y~x|s~lhhhihgefilnnnmnnfenvpeaeiijjeS}?|89<>??w>|Hdrssrsrqnlllnopqqqppooooruutsuusrrrrsrrqq~p{pzoznzozpyqyqyqypzn|n{mylxmwmymzl{l{l}l~n~o~n}i{gzeydycxbxcxdxexfzgzg|f|f|i{k{m|o{pzpylymymymynwpwpxrtuvwxvuwwk~QuInFoJqStnyu}t}y~x{usrrrsuvwwvsmifksutu~~}||{{{{{|{x}x}||||||||||||||{{{{|}~}yt{xvzu|w|{|}}}}{{r{n{l}p~rv~v|t|wy{y|z{z{{}{yzq|vywwqvpvntlslsmsltltlskpknkmlonspwrxsxsxtxtxsvsusurtrtqtqtqtqsprororptut|vx~|}}yv~u{szrxqxrxsztzvzxzxzxzxyxxxxxwxvxvxvwwvwvwvwvwwxxyyzyzys|vwyzzzxvvut~u{xyzxyvxsxqxownwoxpvtwxwpwowowrxvxtwtuststttutvuxu|u~v|zx~wwvutttytqsqrptqvvwzy~|~~|}|||{|z|w|t|p}tz|w{w|{}|}}~~~~{y}~{yyyxwtrs~r~X}9{;{>}Tpmu{~~~~~||}|wuwyx{{{|}~~~~}~~|{|}~}wov~~~~~~~}zsx}}~}{|~~~~~qhu{|}|zwu{}}}||}}}|}}||}~~}|||}}yx}~~~|xvx{|{|zrkty|{{{|}~~ysuwrknuz}t[aigrwwy|~}}}~~}yrpousnry|~~~{y|~}mTLKUajklnqponptwyysqqrux{yzzy{y|zz|xwvussssstttuuuuu~u}u}u}u~u~uvvvvvvvvvvvvvvvvvwxyyyyyxxxxxwwvvuvvwwwwwvvvvvuuvvvvvvvvwxxx~y~y~z~z~z}z}y}y~yx~x~x}y|y|y{yzyxyxyxyxyzzyzxzvzvyvyuxwvyv{v{u|u|t}s|r|q}o|mylxlzmwmxn{n~no~pzqvrssptouwutttsrrr}s~ts~q~p~q~r}r}r}r}r}r}r{q{q{pzp{p|n{nzoyo{o{q|rzryrxruqrqqsov{xxvsq|pzpxpvququpvowo{q}r~r~r~qqqqqpppqppppqqp}n{nymvnsnpnqouozp|p|q}p}p|p|o}onnn|nxntnqnwmyi~_Y`cb`empqppponpruwwvtstvxoXV~^{^z_x_v`v`vawb|cdhig~dzewfvcv`vawbwcxcxbxbxezj|l|n}p~q}qqpnpnrpvvw{y~x~w~rliiijjihhjklmmmnogejrqjefjlljgYyEs<};>@@}>wAVostrrrrqnmmmoqrr~r~q~p~p~poooqtttrttsrqrrrrr~q{qxpupvpwpxpzpzq{q{pzpyo{nzmylxkxkxkxmxlxkzij~k}k|hzezdycybybxcxdxfxhzizj{h|f|h{i{j{l{nzrytysynylylymwoxq|stvwxvvwxs]wIpFpGqOslys|s}u|tztssrstvwxxwtng^gsvrw~}|{{{{{{|{x~y||||||||||||||{{{{}}}}{x}{v{w|{||}}||v{pzo{n}p}s~wv}t}x{|z{{x{yz~y|yuyw|xrwmunultlsmsltltltlrlokmkmknmqouqxrxsxswsvsususurtqtptqtqtpsoroqnqnstt{xz|~yvs}szqwnulumtovrwtxvxwxxyxyxyxxxxxwxwxwwwvwvwvwwwxwzyzzz{xs|vxyz{zzxwvt}u|wzxxwvwrwpwnxnxnwowsvywuzqyoxrzw|v|vyvvuuututvuxwzx|yz|x~wwvuttt{trsqqorouswzy~{~~|~|}}|}{|y{v{r|uy}v}v~z~{~}~~~~}}zxxwwvutuy{~`}9|5{9|Sxzz}~~~~~~}{y{|zyzzy{|||}~~~~~~~~~~}}~~{uqy~~~~~|wz~}~~|{|~~}~nixz{|{yvuz|y{}{z{|}}~}|~~~~~~~~}}}~~|z{}~|||}~~}}~}~|ywy|{~|j^lw|}}||||}}}}{ywvrnltz|s_`baiooopu|}|||}}|{zzxvtqos|~}{vstxqVRam`Yafjmpqrstvz{uosuvywzv|u~u~w}y{{y~xvtssssttttuuu~u}u}u}u}v}v}v~w~wwwvvvvvvvvvvvvwxxyyyyyxxxxxwwwvuuvvvvvvvuuuuuvvwwwwwvvwwx~x}x}y|z|z|z{z|z}zyxxxyx~x}x|x{xyxxywxxyxyxy{y{yyyvyvwvwywzv{v}u~t~s|r|q{ozn{n}n|o|o}o~n~n{oypxrwsutqtytutttsrtuvus~p~q~r}s}r}r|r}r}r|q{q{pzpzpzoypxqxqyp{q{qxryt{uzrvqttsw~xvts|qzqypxpvququpuowozp|p}q~qqppooooppppoonn}nzmymvmynynxoxpupxq{r|q{q{p{p|p}oooo}ozoworo}mi_]d~dbbjrsqnm}j~g~e}jpuww}vutqrup`\\}^y^v^v_wazf|g~fffhhg~eycw`v^v^v`wbwbwaw^x_xdzj|l~m}n~p~ptoponqoutvzy}x~vpkjklllkjjkllkloonihjpqoliknmjgX{Ex>AB@?u>vE^nopqqqrqonnnpqrqr~q~p~p~pponpsssrtssrrrrrr~qyqypvpupuouovpxq{q}p|pzoxoynymymxlxkwkwlvmumwi{i|j|jziygzgzexdwcyc{dzgyjzozp|j|g|j{l|k|i{i{jzlznzlzi{jzkymxoyq|suvwvuvyxd}IrErGtPsjyu|t}n{o|orrstuvwxxwvpfYaryqv~||{{{{{{|{y{|||||}}}}}}}}|{{{||}}||{|z|}|||||{{{s{q{n|o}t}v~zz~z~z||{x{w{uy}w}vwuwwwmvjumtltlsltltlslskqkojmjmkomqoupwrxrwsvsusususururuptqtqsprornqmpmqosvy{}ywwu{tysxpumsmsotqurvrwswtxvxyyyyyyyyyxxwwvuwuwvwwwxw{w|y{xxr|u~wyz{z{zxvu~t}u{uyvvvrvownwnwnvovpuyuyztzpys{w~x{}zxwuvstsvvx{y}z|y~xwvvvuutztrrpqnqntqvyy~|~~}}}{}{|{{{{yyvxvwutwxzz~~y~zyyxwursx~~k}B}9|?}^}~~}~~~~~~~|z{||{|{y{||}}~}}~~~~~zuu{~~~{|~~}{|~~~yx{{|||zxxz||~}ywwyz{|~}|~~~~~~~}}|{{~}xwxy{}}|z~|~}}~z{~}zz{m^nw{}~~}{z{{|||{xuvvqv|~ytpnkhgjmjinuyyxxxz|z}~|vttnglxprwqjjqvgfrqdZ^`glqwvspqswtnvzzzv{u}s~tu~v}x{{y}w~utsssttttuuuu~u~u~v~w}w~x~x~x~xwwwvvvvvvvvvvwxxyyyyyyxxxxxwwwvuuuuuuuuuuuuvwwwwwwwwwww~w~w~x}x|y{yzzzz{z|z}zyxxxxwxx}x}y|yzyyyxyyxyxyyxyxywxuwtwuwyw|v}u~t|s{ryq{p|pppooo}ozoypyqysxtwtztttssrstvxwtqp~q}r}q}q}q}r|r|q{p{ozoyoxpxpxpwpyp{pzqxrytzx{twruswwyvt~s{ryqxqwpvpuquounultntnuovoxoyp|poonnooo|oyo{n{mxltkpknkrlvm|mo{pvqwr{r{rzqypzp|p}pooo~o|o{ozo|m~h``~b~bcho~uuspm|jydwbvh~mtvvutsrqsnb~]z]w]u_wayf|iiiggggg~eycw^u\\v^v`waxbwav^yayg{k|l|lnpoznrnmonsswxy|x}uplklllmmlkklkilokfgfkprutnmn~njfW|@}?CCA?v?wG\\mnnmnqqqpnnooqqqqq~q~p~p~p~onpqq~r~sssrrqrrrr|qvpwpvpuountouovpzp~o|oyownxoxnxmxlxlwlvmtmslslukwdyhzm{m|k{gxfxg{f|d{fzjylzj{f{f|k}p~s}r|n|izgzg{h{g|g{izkynxpzr~tvwvvwxvf|InFmLpRrjxv}u|q|p~pqrtuvwwwxwwrhW]oxqv~~||{{{{{{{{z||||||}}}}}}}}|||||||||||}|||||{{{y{s{s{o|n~r~v{{z~z}{|x{wzuy{u|twsvptmtktltltltlsltkskrjpjmimjmkomroupxqxrwsvsuststsusurtqtpspsornqmplolplqrzvxwx~v|vzuxswqwqupuosotpupvuw{x}y{zzzyzyyxwwuuvuwuwvwxvzv}x|vvpzt}uyzzzzywuts~s|sytuuqupwnvnuouovruwtxvuwsyt{xy}~{zywwuurwxzzz}y}wvvvvvu~uyssrqqpqpsrvwy||~}~~}~|~{|{{{{|z}w{u{tsstqtux~~~sw{|{ywsrsz}t~S~K}_~t~~~~~~~~~~}~~~~~|{{}}|}{y{{|}~~}}~~~~~{uw{~~~}~~~~~||~}|||}}}{yy{}}~}zxvxyy{}~~}}~~}}~~}|{||~}}|yxxz{||{z~{}~~}|~}{zzompw{}~~}{yyyz{zzyx{}{{|}zwuspmknuwtqqroqsw|{y~~zzsU~CI~_~IHbqqqrtsy{ug\\]`gmsywrnnptsox{|zv|u}sstv~x|zz|x}v~uttttuttuuuuuuvwxx~x}x~xxwwvvvvvvvvwwwwxyyyyyyxxxxxxxwwvuuuuuuuuuuvwwwwxww~w~w~w~w~v~v~ww~x}x|y|y{y|z{z{z}zyxwwwwwwx~x|x{xzxywxxwxwxxxwxuxsxrxuwxw{v|uzuysxszr}rrqpppp|p|p|p|r}s~t~tssrrrstxz{x~sp~p}r|q|q|r|r|r{qzpzoyoxpwpwpwoyozo{ozpxryu{{}vzswrwv}vt|szryrxrxqxoxowpvnulrjojnkolpmrnsntouozooooo|oxntmtlukqjmiiigiiimjtl}oqzrxs{r{ryqxpzp}p~poooo~o~o~n~lidc_]fn~ryv~wvus}mrfsduhwlzrtussrtspid}b{ayaye{i}nomkhhghg~eybw]u]v^x`xaxaxaxczi|op}kwi{mnmmsllnlrpuxx|w}t~qlkmmnonmlkkkhkkc^~_~ajprttqoom~jdS==CCA?u@xJ_kllklpqqpoonooppppqq~qppooo~qqssrqqqqqr~qzqtpupupuouotnuovpzq|p{owovowowownwmwmvmtlskrkqltlvixcyc{j|q}mynzq~q~p}pynwn|m~j~h~h~h}k|n{m{jzg{e|f}f~g}g|izlynxq{rtuvvwxvkRpKiMlWrlyw}v}s}rrssuwwwvwwxxtl[\\ktqu}~||{{{{{{|{{||||||}}}}}}}}||||||||||||}}}||{zxzszt{p|o}t~vywxx~z{yyyxyx|wzsvntlrkrjrksksktksksjripinimimjmkpmtowpyqyqxswsustrusututtrtornrmqlpkojniohnmytywv}v}u{tztytysxqwouqvuv{w}w}wzxyyyyyyxxwuustttvuvvvwuzu~w{supxt|vyzzyyyxvtqp}pzrutrvpwnuntptqussvqxqwtuxt{x~z~}}{zyuvsxy{{{{y|wvvvwwv}uwtsrqqpqpsruvy{|}}~}}|~|}||||}z~wsqqqsnpruz|~uy}{ytrqz}rtfe~r~z~~}||}~~~~~~|}~|{|~}{{{||~~~}~~|~|xy|}|z{~~~zuty~~~~|}~~~~~~}|}~}|}~~||~~~~~~}}~~}}~}|{|}|{yyy{{||{{}~~}|zyvvx{}~~}{zyxyyyzzz{{|~}{zzwvtttuvyyxvpjlqv{|wv|}~zrZ<69G~?:Idsvvtr{zsicdlru{xrnmnonqz||zw|u~s~s~t~v}x{yzzy{w}vuuuutttuttuuuvwwww~w~w~wwvvvvvvvvwwwwwxyz~z~zyyyxxxxxxxwvvvvvuuuuuuvwwwxx~x~w~w~w~w~wvvvvww~x~x}y}y|y{y{y|y~xwwvwvvww~w}w|xzwywywywxxwyuysysysxswuvwwvwuuvuxt{s~srpqqqq~q|q}r~ss~s~rqqpqrtx|~~|}v}q}p|r{q{q{r{rzrzqyqypxpwpvpwpxn{m|m}n|oysyuzz|vzswrwu~xu|szqyqypypyoxowownukrjmikjkkllonsoyoxpxp{o~ooo}nymwlwkwiqhlhihihihhilkyn~q~s{s|s{ryqypzp}p~pooooo~o~m~ljiib`hqt~vvvwt~qlmljslgmmpxqqq}q|r}ttqml~m}m|n}qrsrolhghigezbv^u^v_xayaxaxd{iosjz[iexnomktlmmlqotxw|v~tolkl~m~noomlkkjiib[}[yXyX{a~inqqqqqokh\\K?>AA@uCxQdlllkloqqpoonoooopqqqqq~q~qpoqqrrq~p~p~p~p|q{q{qypuptotouovnvnvovpyqzqypvpupvovowovnvntnslrjqjqmwp~j|dzfxnxsyq{q|t~v}y{zwyuw|vtplf}d{h{hzhzg{g|f}g~g~f}h{jznypzq~stuvwwvteyTnImYsmzv}utssttvwwwwwxxyxshafoqv}~||{{{{{{{|||||||||}}}}}}}||||||||||||}}}|{zyzyvyvzr{o|s}{~}~z~y~w}x{yx}t{x{yxqumslsjsjsjrjsisiriqhpfogmgminknmqovpzp{qzqyrxsvrurtruvuwtssormqlpkoinhmgmeklxv{}w}t~s}s|s{s{u{vzwyxwzw|v|vyvvvuvwvwvvuvtuqsqsrsttuuuwtyt}tyrtpws{vyzzzyyxvtpl~o{svvrwpwovnupsqtttvsxswuuwtzv}x~|~~~||zvxszz||}|wzwy~wvvwvv|uvtrrpqpqqrruuyz|}}~~}}|~|~|}|}}zxsppqsmpqux~xx~z~~}{wuuzzmusrqruwxz{{|||~~|{|~|~|~}~}{{||}~~}}~||{yy|zy~uy|}xqlq|}}}~~}~}|}~}~~~~~~}}}~}|{zzy{{|}||~~~~~~||||}~~~|zyxxxyyyz{{{xyyxyzyxxxz~{xxzzmakrx}{vtwx|xrbD3138~59Xongeeknsvsmkt{{|ytppssprz|{zv|t}s}u}w|x{yzzyyyzx{v}v~vuuuuuutttuuvvvvvvvvvvvvvvvvvwwwwxyz~{}{}{}z~z~z~y~y~yyxxxxwvvvvvvvvvvvwwwxx~w}w}w~w~w~wwvvvvvwwxx~x|y{y{y|y}xxwxwvvvvw~x|w|w|v|v{wyxvxtytysxswtwtxtytwuvwtyt|s~rqqrssrrrssr~q}p}p~pqrty~}|y|r{p{rzqzqzqzqyrxqxqxqwqvpvpwozn|l}l}m|nyqxsxxxtvqusxvyw~s{pynynzo{ozownumskojljkjjkjlonvo}pqq}p~oo~n}n}m}l}j{iqhlhjgigihiimkun|qs}s|s|rzqzp{p|p}p}o~o~o~o}o|n|lllmmjjmruvtrsszrlp`ovnhokpyppp~p}p}rqpppq~rstssrqnjiijhf|cw^t^vaxdydyayf|osnZlF\\_sqrkiwjqmmpnsyv}u|s~okkllmnnnmljjih]NzNvUxZz_|d~lpoorrokkl~g~P@?@AvKy]immlkkoqqpoonooooppqq~r}t|t|t~sssrsqq~p}q|p{pypupypxovovnuntmumvmvovpvqwrwrvqvpwpvowovountnrmqnqnsqytg|k~suvkwutyrys}s{v{{x|ty|wvsog~c{ezfzfzfzf{f|f}f}f}g{i{m{q|r}rstuwwvyt_vJp[tmzu~stttuuvwwwvwxxyywqkjnrw|~||{{{{{{{||||{||||}}}}}}}||||||||||||}}}|zx~x|xyxxytzq|r}{~~~}~z}y|y|yy{r{yzywmrmuqvpulrkqirgrgqgqfpdodlfmjolqmtowp{q}q|qzrxswruqtqurtstprnqlpkoinhmglekaikuy}y|u}q~p~q}q|s|u|x{}zx}wxvqvovovpurursrrrprororprrrsssusyszt{qwpxs{rvyzzxyywvojp|wxysyqwovnupsqtttvvxvxwvxuzu|v|{}|}z{xyw|}~~z}s{tz|xwvvv~v{uutqsprprqtruuyz||}~~~~~}}|}z|z|z{{{}xtpprsoqqtvuu~v~{}zyxwwpvsqoqtvx{~~~~~~~|}~}~~~}{{{|}~~~~~}||}}~}|zzz~}~x}s~qx}~|yuqt{}}~~}}~~{}}~~}}}}~|}~~|~~}}~}~~~||}|{zy{{|}}|~~}}~}{zyxxxyyz{{z|{xwwxyz{{{{zyyy{w~_~M~_~fgpwuooqywwrN5346:G\\cXT_ga^gnqqtz~}|zwssxxsryzzzu|t|t|w|y{{z{xzxyxyxzx|w}v~vuuuuuutsttuuuuuuvvvvuvvvvwwwxxxxy~z}{||{|{{|{}{}z}z~z~yyyxxwwwvvvvvvvvvwwwww~w}w}w~x~xxx~wwwvvvvwww~x|x{y{z|y}y~x~ywvuuvw~x}w~v~v~u~v|wzwwxuxuxuxvwvxwxwwwuvtzt{s}qqrsttsssssrq|p|p|p~qruz}{{y|s{qzryqzp{pypwqtqtqtqtqvqwqyo|m~m~m}m{nyqyqvrqqkomnsnxozo{nymymznzn{o{owntlokmkkkkkklgmknyoqqq~pon~n}n~m{lwjrioininhmimimjpltnzp|r}r|r|r|r|q{pypyp{o|o|o}o|o{n|l~kmnoopqrrssssus{plounnopp|pqppo~ooonmllklnqqppomllje~`x\\u\\u`wfyexcxh|qr^tIZ?WUmj}lih~lznspnswv|t|plkkkllmnmmllkjii_|NxPwXx_z_z]|jrnqsplmt|hFBADwTyhpqpnmlnqppoonoooooppqr~t|u|u|t}s~rrrpp~p|pzpynxlumwqxrxjwivkukwlvmxnwpwqwrvsvrvqvqwpwovounsorororpqoyn|kyszuz_xqv|twr{q{r|xyywy{xvsske}d|dzezdydze{e|e|g|i|l|p|s~s~ttuuvww{vg{Lq]to{v~tuuuvvwvvvuvwxyyyurmprx|}||{{{{{{{||||{{{{|||||||||||||||}}}|}~~~{zw~v}w|x{yyzs|t}z}~}}}|}{|y}zz|s|zzywrurwwzvulrjqiqfpepepfofn`jgmjolrnuoyp}q~q}q{ryswruruqupuptnslqkojnimhlekci^girz{x}s}ono~p}r}u|x{{zxwtvnvkvjvlvnuotoroppoqopopopppqrrtrwrws}qxqqq|lpxyxwxzyvpmv}zz{tzqxovntpsrsutyvzwxxwyvyvzvz{xu~u|zz}|w~r|szyywvvu|uxtssprprprptqvvzz|}}~}~||z{xyuvttsstsxr{pprstopqstr~n~s|}zusssvuttvxz|}~~}}|}||~}~~~}zx|{y|}|}}}}|{z{||}~|{{~z~r~qt~z}}{zwwy|yy{zyz}}~~~~}||}}~~|z}~~~}}|{}~~~~~~}{zz{|}}{y{{|||{}~~~}}}~|z{zyyz||}}{yyzxvtttuvxyyyxyzy~f|F|;}J}Y}Y~bpwrpsyvvn~E}4~9~<=CQXQIVndVZekotwz|}|yxvuxzutzzyyv{u{v{yz|y}x|xzxyxyxyy{x|w}wvvvuuttsssttuuuuuvvvvvwwwxxxyyyyy~z}||}z}z|{||||{|{}{~z~zyyxxwwwwwwwwwwwwwwwww~w~wxxx~x~x~x~wwvvvvvvw~x}y|z{z{z|y|y~xwvv~v~w}x|w}v~v~v~v~v|v{wywxwxwwvxvzt|t|u}t}t|s}rrstuutttttsq}q{q|r~rsv{}{{y|s|r{rzq{p}o|oypvquqxqzq|q}q}ponn~n|nyoxouoonpmulskvkxjxkxkylynznzozoxntmnljljlnmpmqmunzo~qq~q~pon~n}m|lxkqjojoipiqjqjqjqkrlunxp{q|q|r|r}r}q{pwpvpxo{o{o{ozn{m{k~l~n~q~tzu{u~usppq~qzrrqonznuoxqqrqpo~l{kzn|nqplhlopoo}q}q~qppmg~bz\\vZu_wdwdwfzm~upXmEWB[Rmb|fhkppxpnrtu|rmjkkkllmnmmmlkjjkjdY{PxQxWxX{amkptpn~px~pMABGyZzovvuqpnoqoonmnooooopooprt~t}q}o~npmko~p|pzoyjwgufujwjzezdyfvgyiyl|n{qxrwsvtvsvsvrxqwpvouosorototnunwlzs|yyuxgwtywvttxrzp~t}w{x|yxuwrje}f{dycxdydyd{e|i}m}p~s~uuvuttvwwzwmSs_to{vvvvvvwwwwvvvwxyyzxusttx|~||{{{{{{{{|||||||||||||||||||||||}}}}~~~{yvv~w~x~yzx|t|y|}}|~|}|{~{{|x||{|xyxy{{|wwksjqhodnancmendm\\gemkqnuoxozp}pp}p|rzsxsvsvsvruqtoslqjnimhmhlejbh^fiozyv~qnno~q}r}t|vyvwvurupunvmwmwnvouosnqoopnpnpnpnpopprququr|qyqto}kltwvvwxxwtw{~}|}x{sxoumsosrsvuzv{wxywyvywyxw~sno}}|~zw}y{}zwuu~tytutrsprprprotqwvzz{|{}z|xztwqsopmmklkkljrknrstpoprrro~u|~{vpqty{||z{|~~}||||}~~{y|xty}{z|{{{{zyyz|}~~{xx~w~v~v{}||zyy~|~yxzywx{}}}{{|}~~~~~~}||}|zz|}|{{{zyxy{|}~}|||~~}zxy{|}}{z{|||{z{|||||}~~|{}||}}~~|yxwurqnlkmoprtvxyyo|X{E{E{J|P~h~u{zxxyutq^I?OUSRMK~YkqaYXYgmpsx{||zzxwxxuu{{zxwywyxy|y~xx}x{xyyyyyyzy{x|x~wwwvuutttttttuuuvvvvww~w~w~xxyyyyyzz~{}}|~z~z~z}z}{||||{}{~{~zyyyxxwwwwwwwwwwwwwwwwwxxx~y}y}y}x}x~w~vvvvvvwx~y|z{{z{zz}y~xww~w}w}w|v|v|w}w}v~v~u}v|v{vyvxuxtxsxt|t~t}s}s~sstuuuvuuvutr~r}r}sstx}}|}y~t}r|q|p}o~o~nzovovo{oppqqqppo}n{nxmwltkskukukvjwiwjwkxmynyoyoxownsmnmkmlmpnxo~oo|pq~r}q}pp~o~n}m|lwkpjniniqirjsktktlultnvpyq|r{r|r}r}q{qxpvownynynznzm{l{k~l~os}vzxvyzyusqp}ozn~omonn|n~qrrrrpn|nzo{n}l}i}l~qrqpoo}o|q|r|s~sqm~i{^wZu^vcwdxj|sumRiBWLe\\xcimnoo|pqrtu|rmkijklllllmmmkihhikh]}PzOyY{bhkqrooqsojVGDI{_|txwusrpoonnmmnnooopponpqrrniknhgn}p{p{m{iwct_s`ubyaz`x`tbwexj{nzqxsvtutusvswrwqwpvounsnrorpxq|rtrxuzw}wx~yxytw{v{t}rruw~yxwwvrkh}f{dydzezf|i}n~rsuvwwvttvwxxvs`vdvo|vvvvwwwwwwwwwwxyyyxxwwvx{~|z{{z{{{{{{|||||||||}}}}|||||||||||}}}~~{yvv~wwyy}{{{}{~||~|}|{}{z|y{{z}x}x|{}~v|hsgpdl_j_j_jal`lWdcmksmwozo|p}p~p}p|r{sytwtvsvsvqunslqhnflflfkci`g_fenvxs~ooopq}r|s{uxuvustssuqvpwpwpvpupsoqoopnpmomomonpnqospsqxqzpzn}nmrxvuvwwvx|~}}z|uxpvntqtttxt{v{xxywyvyxy|vng~j~z}}~}~|yz||z~wvu|tvtstqsprpqorotqvvyzz{x{uzrwptnqlmklilgjegmhnruuqnprsuw~z~}~{vuv~t~v~x~z~{~{}~~~~}}}|}~~}}|rpw|yy|{zzzxwwy{|}}}}~}zww{zz{}}}{||~}~}{ywxzzzyyxy|~~}~~~~}}||}~{xy|~}||||{zyyz|}|{zz|~~|zxxy{{{{{}}~~}|{{{{{{}~~}||}~|zzzxtqkecdinoqtwyxx}n|W|E|H}W~lox}||zutvrVKjzvk^arzumeY[jqopvyzz{}{xupmpz}|w|w}w~www~w}x{xyyyyyzzy{y{x|x}wwwvvutttttuuuuvvvvw~w}w}x}x}y~yyyyyz{~|}}{}z}z}y~y~y}z}{|||||}{}z~zzzyyxxwwwwwwwwwwwwwwxxy~y}z|z|z}y}x~wwvvvvvwy~{|{z{y{{z|y}x}x|x|x}x|w{vzw{w|v~vuu}u}u|uzvzuuttuwuxuwuwtys{s~tuvuvuvwuuussttuy|}}}~x~s}q}q}p}o|nzmtmompmvn}opqrrrrqo{nxlvkvjujujujvjviuiukvmwoxowovotnpnononpouopqrs~s~r~r}qq~q~o~m}lwjoimhnhqiqjrksksltmtotqwqzr{r|r}r}q|qypxownymzm{m|l}k|k}l}o|r|vzyxyzwuutq~n|n~mlmqonqrrrrrqp}l{i{j|j}pvvtspoop|rzt{u~trn}axWu^udwfzn~vumWlF[Rkb}d|j~nkhilxsws|pnkhgjjkkkllljgc{bzdze{f}f~e|c{RyVz_~ejpllmljghbQCH}d~uxusrqnlmmmnnnnoopqrrq~q~qpojhlmhhm}n{n}j|ex]sXpVq\\vby^u[r_vbvgxlxpvrususutvswswrvpvnumtnrprrvvyuyz}~zsuwy}xwusruvxxwwwtpk~g{ezczd{i~os~tuvwwvroruwxvtxi~jzp~uvvwwwwwwwwwwxxyyyyyyzxw{~~zyzzz{{{{{{||||||||}}}}}|||{{{{{{{{|}}~~{yvvwwxxzzz{{}|z~{}||zzzx}w~w~z|~v}hufp`iVdVcZf]i^jUcblkvmynzn|o}o~o~p|q{rzsxswtxtxqvntkqgmcjbiah^g[f\\edooxm~oppqq~q|r{sxsvstsusvrwrxrwrvruqsqqpopnomnlnlnkokpmroqpuqwqj|ljltutuvwvy|~~~~{|wyqwpvtuxt{s{tzxxywywz{y}wmc~e}t|}{~{{{z{w|x{zz|y}w~vzuttrsqsqrpqorotqvvyzw{syrwpwotnqmnlnloilfhqinrusppprty}~~|~|~{~y~s~q~s~v~y~{|}~~~~~~~}~~||zqqx{vx~{zzywuuux{~|y|}~}|}}}}|}}}}~~~~zwvxyxxyzyz{~~|zz{~~}{{|{||{wvx|~~|~~}|{|}|{yxwx{}|zwvvxxyz|~}|{zz{{{|}~~~}}}}~~|}~~}{|}{wtne^^jssosxxwyy~i}S}d~srnz~}|zyxymqz|xx{{z|o\\ahjjltwxyywusplefr}}vvvvv~w}w{xyxyyxyyyyyyyzy{x|w~wwvvuttuuuv~v~v~vvvvw~w}w|x{x{y|y|y}y~y~y~y~z~{}||~{~z}y~y~xxx~z}{|||||}{}{~{}z~zyyyxxwwvvvwvwwwwwxxy}y|z|{|z}z}y~xwwwvvuvxy~z}z{{zz{y{x|x|x|x|x|x{wzwyxzw|w~v~uu~t~t}t}u{uzvwwuvtuquttwt{t~u~uvvvvvvvutuuuux|~~}w}r|p|p}o~n{mylrlnlmlsmzoqqrsssrp|owmvlwkviuiuiuiuititkvmyozovotnqnonrnxo{p~qsstssttttt~q~n|kvjmikimipiqkrkrlsmsntotqvryr{r}r~r~q}q{pzozn{m{m}m|l}k}j}k|nzq|u|xzw|usutro~ppsjmnorrrqrrrpgzezk|p}tutttrono}q{s{t}usq~eyWu\\uexj{rvupg{RhZpaw[pg|heeci}p{p|l~mmkiiijkkkklif}dzbxcxbyczcycze{\\{X{\\~cgjjjihfefkdGI~guwutsrnklmmnqonn~o~qrrs~s~s~qomihllijl}l|j~f|aw\\sTnRn\\tax^sZq^v`vdwiwovpurusvsvsvsvrvpuntmsnspqsttxw{wyzwwvywvussuvwxxxwusl}fzdycyczkuvuuvwvqifmtwwwvwplzpvvvwwwwwwwwwwxxyyyyyzzywz}}zxyyz{|||||||||||||}}}}||||{{{{{{{||}~~~{xvuww~ww~wxyy{}|}}|~}{{zy{w|v}u}{|~xp{fo\\fI_M_TcYg\\gVc_kmzl{m{n{n|n|n}o~p}q|rysyvyvyswovjqdl_h\\eYdTcQdWepsuyopppq~p}p{pzqwrusurvswtxtxtxtwswsurpqnpnomnlmkminiokqmqntpvpe|icbptsuvvwyy~{|~~|}zzvxtxxw}u}qzsvwzzyzy{}z~xngd}o{xx{wzwxwwwvxxxzx}xx|wtuqsprpqoqorpvtxxy|u{pyoxowotnplonssxrugnwlnrsspopruy|~~~~~~~|~|~}~y~r~p~r~v~z{|}}}~~~~~~~}{|zss{ztx|yzywtssw{~|y{}~~~~}}}}}~}~~~}}}}~}xrvwxyyy{~~~}}|zxx~~}{z{|||{ztrw|~|zyy{|}}}{yxwwy}}{{xusvxy{}~~}{zz{|||||}~}{yyy{}~|yvy{|}|{|zxvpjdclurqt|w{~}~z~u~{~}}zwvw{{y{~}zvtvwyywonplijtvwvurooljiemu}{uuuuv}w{wyxxxxyxyyyyyyzzzzy{w}wwvvutuuu~v~v}v}v}v~vvvw~w|w{xzxzy{y{y{y|y|y|y|z|{|}{}z}z}y}x~x~xw~y~z}{|||||}{}{|{{{|{|z|z|y|y~xwwwvvvwwwwwxx~y{z{{{|{{|z|y}y~x~xxwvuuvxx~x}y|y{yzyzy{x{x|x|x|w|w{w{wwvxv{vvuttu~u~w{yxxvwvutustwtzu|u~v~vvvv~vvvuuuuux|~|u|pyo{n}n}m|mzlulqkmknmwnprsttsrq|pwnvmxlxjvjtjsjsjqjrltnvowotnrmomnnrnwo|qrtuvtuuvvvv~s}p{ltjljhikjnjplrlrmsmunvowqwrxr{r}r~r~q~q}p}p}n}n~nm~lk~j}kznxr{uwurptutssrmdsssrrrrqssog|f{m}s}urkiiilopp~q}r~utr~mzYuYugyp}uuspq_t]sUjYmg}a~bha]ij~cc~dhlljjjjkjjihge}f|e|c{azb{dzcy[yZ{chiiggggghqtROowwvvwvoklmnrupnn~o~qrsstvrkikmmkijkk~hd{^uZqQkPlZt_x\\q\\q_w_vbwfwkunupurvsvsvsvquounumsosqqspupurvwx{xwwxwvvtssuvxxxwwvk}ezdyeybylwvvvvuvngdkrvwwwwsn}rwwvwwwwwwwwwwxxyyyyyzzzxz}}{yyyz{|||||||||||}}}}}}||||{{{{{{||}~~~~{xvvvv~v|v{v}wwx{||~|~z{yxwvvuwtyv{w{}u~jqXd?[G[O`UdYeVc^jo}m|n{o{pypyp|oo~p}q{r{u{x{uyrxlrck\\gXdUcNbIcPftuzwq|o}oopo}p{qyrwsutusvtwvxuxtwswsxrvrsqopoomnlmkminiojrkslwlwod{i`^lsttvwxwv~w~y~}}}~|z{yz|z~xr|rww{zz{{|~{wrni}ozuuxtxswswsvswuxvzwxwyvrtqrpqoqpsrxwzzy}t{oyowovosopnoqtx|y{ot{oorrspnoprsux}~~~~{~y~y~z~w~r~q~t~x~{|}|yy{}}||~}{|}}~~~}~~{y{sv|z{ywsrpty}}{}~~|||}}~~~~~~|{{yuwwxz}}||{|}~~}|{{|}{wu~}|yz|}}|{ypox{}}|||~~~}{yyyy|~~||{yvsuxz|~~|{{{|}}}}||~~}|zyxz|}}{wsuw{||zyxwxwwsoq~xuuvzsx|~|{{}{vomqxxtu{~zupotuvxxyyvqrzzvsssqlflnghmsuuuv}v{wywxwwwwxxxyyyyyzyzyzzx|w}w~v~v~u~u~u~v}v}w|w|v|v|v}v~v~w~w}w|w{wzxzxzxzxzx{y{y{y|z|{||{}{}{}z}y~y~xwxy~z}{}||}|}|||{|z|z{z{zzzz{y}xxxwwvwwwwwx~y|zz{y|y|z|{{{z|y}x~xxxwvvvvwww~w}x}y}y}x}w}w}w~w~v~v}v{vzvxwwvzu|t~tutv~w{wzwyvztztztyt{u|u}u}u}u}u~vvv~uttttx||t|oynzm|m|m}l|m{lwkqkoluo}qrsssrr~q{pvpunxmxkvkskrkrlrmrntpwpwotnqlnllmmmpospxr~tvuttvwwxw~u~q~myknjgjiklkpmsmsmsnuoypzqyrzr{r}s~r~q~qpponnm}l~k}k|lxovr}uvto}l}qttttq~h|h}yxvrrqqqrroji~n~r~usoke`afkmoqqrq~mzbv\\vk{u}vrqpsh{WoJbauk_enfV`b^ZX_lomljkllkjihhihc~`}a}c|f{dz`zb|f~g~hffggihjlVVv}yxxwwqlkmqvxronnopqqsurjhllkjijjihf~_uYpOiNjYs]vZp]qaw`vbwdwgvltotrusvtvsvquptntmtntrtwsuprmsnzzz}wvwxwuusrrsuwwwvwwh}d{h{k{dxmxxwzwzvuupheiouwwwwuptxxwwwxwwwwwwwxxyyyyyzzzxz||{zzz{|||}}}}||||}}~~~~~}}}}{{{{{||}~~{xvuu~u~u|u|v~u|uwyy~y|x{uxuwruptqttsxt{zx~qtXd;XDXLZR_XaUb[hm|k{l{pytutrsvq~nno}p}t}w}x{uxlrbjYfTcPcJbDcJhnvyuqyn}nnoo}p{qyrvtuuvuwuxuyuxtwsvswrwswruqponnmmkminiojrlql|gzlh~mdanquuyyxxw~v~x~{~{~{}}||~z~ztrzv{y{||~|yutp~r{twvtwtwrvqvqustttvyww{wvtsrpqpqrttxy}|y}t{oypwouoropomts|{}|zy}spqrsqopokgdmx~~{~x~w~v~w~v~s~q~t~x|}~{uty|}~}|zzzzzzyz|}~~~~~~{v~x}zxzyyvtsw{~}|~~}{|}}~}~}}|{yw{{u{}}|zzzyxxy{~|y|{xz~~~}{zqowz|}~~~~|{}}|||}}{{{{|}}|{{{zxyz{}~~}||~~~~}||~~}{{{}~}}}|zwssty{zxvuvwxzzwvvqpsztnnx~|{}zxxzzxvtstqiks||wtvvusru{}|zy|}ztsuvm^bptqlgu~u~v|v{vywxwwwwwwwxxyyyyyzxzyzzy{x|w}v}v}v}u}v|w|w{wzxzw{w{w|w}w}w~w~w}v|w{w{w{xzxzxzx{x{y|y|z}|||{|{|z}z~y~yxxyz~{}|}||||||||{|{|{|z{y{yzzy|y~xwwvvvwwwx}z{{z{x|w|x|y|{{|z~y~xxxxwvvvwvvvwwwvvvvvvvvv~vzvwvvvvuxtzu}t~uu{uvwrvyu|tysytzt{t|t{t|t|t~uu~u~u~tsssw|~~}~t}n{m{lzlzl|m|m|mzlvktlun{q~ss~r~q~q}q|qyqupuownwlulslrnrosptqxr{q{pwosmoklliminjqprytvtrptwxyxwtp|mtlnlnlpmunvnvosoupyp{qzr{r|s}s~s~rqpppon~l|j|k|m|nzpysvwuo{iym}suutq}nzs|~~xuqqqqqqqpmnp|r|uusrnhec`bekoppf~jzcyp}v~sooqrn}VoJceykeiomVU]\\ZX_lqomjjlmllkffhhdabc}g{hycxawcze{ggggeii~ji_^v}yxxvvqmlnrwwsqpoopppqqnjjkkkjiiiiji`wXpLiMj[t\\uZr^sbxcvcwbwdvjtntqurususustqsptnunssvxv|suur{xz{txtwt}tttsqqpqrtvvuvvff}n~q~hynxxxuxuv~tspichmtvvvwwuuwwwwwwwwwwwwwxxyyyyyzyyxz|{zyyz{||}}}}}||||}}~~~}}}|||{{{{||}~|yvuu~u~tt}w|w{x{{y|vztzqzqxowmvnvouswx|ytx]h=W@VFWLZP^O`Zfpykzm|tvxkzhwnr{nmmn~q~v}y|wzmqahVdNbIbCb@dLjnuttowm}mno~q}r{sxtvvvxvxxwyvytxtwtvtxsyszszqroonolommnkolrotp~h|m}nqomsowvz|zyyy~{~||{|{{~zwu}x|y||}~|zyuu~v{xwyvxtwruquqtssutwxxzyyurrpqpsswwz{~}z}v|qzpxpuprpoqmws}y|z}urrrrqoprj]Ucx~}~z~w~v~v~w~w~s~r~uy}{ut{~}|||{|{ywxz|||}}}|~|||}|{y~z}{zzy{yxvz}~~}|~{{{{{}}|}~}}}}|||{{|~yz{|~}yxywvvx{||{x{~}{{rry{|}||}}ywxyzzz{|{|}}}}}|{|}~}||}}}~}|}~~}}}}}~~|zz{}~}}|{zxuqqw{yvtrruwxxwupnnrwsmpy~zqow{zz||{y||yncckw}wqpopqqswz{{zz|{tsuvn_^n|xphu|u|vzvyvwwwwwwxwxwyxyxyyyyxyyyzy{y{x|w|v|v|v{w{wzwyxyxyxywzw{w|w}w~ww~w}w|w|w|w{w{w{x{x|x|y}y}{|{|{||{}{~z~yxxyz~{}|}|||||||||||}||{|z|z{yzzy|x}w~vvuvwwxy}y|z{{y{x{w|w|y{z{|z}yxxxwwvwwwvvvvvuuuuuv~v}w}w}v{vzuyuxvyuzs}rrs}s{vuuutttttvtyszszs{s|s|s}tu~t}t}s~rrrw}~|}|~t~n|mzlxkylymym{mzl|lzlumwp{r}r}q}p}p|pzqxqvpupunumsmrnrpsqurvryr|qzqwounpllmkmiohqjsvt}usqnrwww}w}vws|nwmtmvnxmyoyowpupwpyqyrxrys{s}s~srqppq~q~o}a{Y{gzn|prqsutozbw`|rutrqoxt{|v~t~qqqqrrrrrsszlxe{dmttumrp{gx_}ilmnln|g{s}v~pnprt}s}_sTmdykjhloaSY_\\]`hopl~i}ijllkkc`efffe~e}ezdu^s^s`wd{fhkjg~g}g}j~kfenttvvusrqnotvutssqqprqomjjkllkjjkkknlcyUpKiMhZv\\u\\t_uaxcxcxbxcvitlsptrutuuustrrqsrupsswxxvy~{}x}stqrrzqpoommmoprssstrmlrqnowwxzytx{v~u~r~jcintwwvwwwvvwwwwwwwwwxxxxxxxyyyzyxxz{{zyyz{{|}}}}}|||||}}}}}|||||{{{||}~~}zvvv~u}uu~xzzy|}}{|yyzu{rzqyoxnwnvnupvvyy}v}en@U<T@SCUGXH[Z_wklxl|vg}`}azctyommmot~x}}|pq^gQbJaDb>d@g^lptsvryp}n~n~o}r|u{vxwwxwywywxxwxsxqwtxuytzsztxrtpqnpmpmonmpmtqvtu|u|u~uvuvntsx|zzzz{|{{{{z~yyw}y}y|{~~~}~}wtv~yzzyyvwtvrtqtrrssuvwxyzvwtrsrwtzy}}~~{~x|syrwosmpmospyt~x{{}xtrrqpoqvp^Sp~~~|~y~v~u~v~x~x~u~tvz}~|yz~}|}~}xuvy~~|||{~z~zz||z{|~}{x{|zw{~}}|~{~{~xvy|~}||}~}}|}|||||}|{{y{}}zwy{ywuw{~}~||}~|{|vtx{}}}}~~}zxvxxzz{||}~~~~}|{|~~}}}||~~~|{z|~~}}}}}}}{xy{|||{zyyvomxyxwsnmntzwrysnnoquy|~zroyxwwz{zy|}{sigiq{vmijmpptwyz{zyxuonpsqicizyuqu{uzvxvwvvwvwwwxwxwxxyxyxyyyyzyzy{y|y|w{v|v|v{w{wzwyxwxwxxxywzw{w}w~wwww~w~w~w}w|w|w|w}x}x~x~y}z}{}||}|}{~z~x~x~x~y~{}|}|||||||||||}}|||{{{{zz{y|x}wvuuvwwxx~y}z|zz{y{x{w|x|x{yzzy|x~x~xwwwwxxw~w~w~w~v~uttuuv}w|w|w|v|u|u{u{u{u|s}r~rr}r|txuxtuuqvsuvtxsyr{q|q}r}s~t~s~s}r|r~r~q~u~{|y|zw}q~n}mwltlxlzmzm|m}m~l{ksmsoxpyq{p|o}o|pypvquptpsoqopoqospuququqyqzqzqxqvpsnqoroqpnrosxt}t~ttrsvu|rxo|qr~qvmsmsmwmznzoxoxpypzqzryrwsxszt}s~srqq~p|q|q|q|e|V{f{p|stqsyxjz]t[|qutlg|ktoosus{r}qqqrssqi^TKH~HQ~b~qttgmvuxpswlyg|dfiml~r~spoqq|ryozfxbvh{n~kefno}\\~R[b``dlpj|g|ikmkihU~FyL{Z|c~g~h}e{av[oWmZo_ud{instnh~g}g}i~hiklnppprvvqruvtqstssqponkijlmmllnnonomibwOlIeYt\\u]v`wbxbwbxaxbwguksosrtsutvtvtstsvxsvuwxyxxxupznxozn~mml~l~m~m~nprsrqrpopusrqvwxzz}zy}y}v~ldkpuwwvwxwwwwvwwwwwwwxxxxxxxyyyyyxyzz{zyyz{|}}}}}|{{{|}~~~~}|||||{{{}}}~~~}y~uv~ww~x|x}{w|y~~}wx}zy|v{szqypxnwmuourwwzxksCX5V9R;R@TDVZW|^qpoxy^^~h{mv{qnmmn~q~u~||lpUeGaE`@bDgUllpsusxszr|o}n}o}s{vzwxywzwzwzwxwywswrvvwzyv{szuytxtuqrnpmnnkpkury|~}}{~ywvskiak|~|~z~}z{{{zzzzyzz~z}z~~yrtwyusvy}z|zzxwwturtqsqrsutwwzx{uuuqyu}z~}~}{~w|uxqtmqnpvs{u~xzz}xusqponqwxjd~~~|~y~v~t~u~w~y~xxxz}}~}}}~}|~}xtstwyz|}|{yyz}}|}~~{x}||z}~}{~{~{~{~xuy~{z|}~~|{|{{{{{{||{z|}x{|{{|{xwx|}}}~}{z{wv{|}}~~}{yz{{z{|}~~}||}~~~|{|}{ywxz|}}}}}||{|}|wsswz{{zyxyumkuuvsleenw}wnvwqommry}zttsqnpqstxwvxwplmwtjhlpnqwz{{|{ywqjeioqojittvxu{uzvxvwvwwwwxwxxwxxyyyyyzyzy{y{y|y|x|w|w|v}v}w|w|wzxyxxxyxywzw{w|w~w~wwwwwv~v~w~w~w~w~x~x~y~y~z{~|}}|}{}y}y}y}z}{}|||||||||||||}}}}|}{|{|z|y}w~wvuuvvwwxxy~z{zz{y{x|x|w|w{wzyy|x~xxwwxx~x~x}x}x}x}w}u~uttuv~w|w{v|v}v}v}u}u}u~s~r}r|r|r}t~ss|uwutvttusvq{o}p~q}s|s~r~r}r}r}r|q|q{pypwpwozo}o|nwmrmvmzm{n}n~nlzkrlpnunxp{p}p~p}pypvpuosoqonomonpspwqwpvpupvpvpwqvqvpxq|q}qyrys{t{t{u|v~urtsmzgzi~lyltjqlplsmwmxmunvoypzqzrzsytyt|t~tsrqq~p{p{p{q}l}W}e}t~wwusspg{cxb|qtrl|dziwnposq|q~q~q}q|p}meR>8;FR]h~p~t~x~w}hkmxrqvvtvpwm{llnnpqpqppq|n~j}j}knjbbi}nyczQR^`_ahlg}e}ghkjhi[}Gv;v@wLz\\{f{hybuWmRiVl_th{pvzyuqmj~i~l~kjjjllmpvxttvvsposwwupmljijkllllmoqpnmmm[uEfTp[s^v`w`wawbxaxbxhvksnrprrutxsxsvuuxzvywwxwzxxzuyt~qnn}n}n~n~n}m}m}o|p}pstttrqonpuuusuvwzzys~|xngnsvxxwxxwwwwvwxxxxxxwwwwwwwxxxyxyzz{{zyyz{|}}}}}|{{{|}~~~~}|||||{{{|~~}|~|y~t~u}w|yy{p{y~x~z~{vy}|x|vzsxqxoxnvmupvuv{xpuIc3_6Y8R<PBRXT}[ultv{hm~wzzw~romlmos~y|hqOd?`AcIh_mqsqtrwrzr{q{m|n|p|szvxyw{v{v{v{vyvyvuuvu|u~vxxtzw|x|yztuoqnnnjpjvsz}~~~|vvtsmdVc~~}w}zzz{{zzzyyzz~z~z}jbgnutsuxz~{|zzyvwsurtqsptrvv{zwxwr{w~|~~~}|y~yysuosprxt{u}vwv}vtrponot{}wx~~~~~~z~w~v~v~x~y~y~yyz{||||}~~}~}~|xusqoprx}}}zzz}}~~|x}}|{}}|~{~|~}~|~{x{}zxxz~{~|{{{{{{zyz{|~||{w{}~|yvwz}|}}~~~}|{zyvy}||}~}~}~}}|{zz{}}||}~~~}|{yvuwy|}}||||||}~{toptxyxxxwtnihmovrkdfs|~xsutnljlou{~}rosrkfdfltxvx{wqqwrmouvpt{|{{}|zxsjccgikmnrqvzu{vzvxvxwxwxwxxwywywzxzyzyzzy{y{y|y|x|w|w}w~w~w~w~w}xzxzxzxzwzw{w|w}w~wwvvvvvvwwwwxyyyz{|~|}|{|{|z|{||||{|{|{|{|||||}|}|}|||||z|z}y}wuttuuvvwwxy}z|z{{z{y|w|w{w{yz}y~xxwwxx}y|y|z|y|yyxzv}vtt~u~u}w|x{w|w|wwv}v}v~s~r}r|r|s{s}r~qqq|tzuwsvo{m~op~s{szr|r~s~s}s{s{rypwnukujwmypzqyotmumymzn}n~on}mvmqntnvo{p}ppp{pypxowotoqoopopspyoyounqnrnuowqwqyq{r~rr~r~q}r{syu{u|uxt|t~s~n{j{j|lxlslqlqlrltmtmsntoupvqwrwsyt{u~utssrq}p{pxpwq{q}`~b~w~|xlkon}l|l|k~qsrnwgtftkspxq}q~qypuqufzPA>BO[gmpq|o|n{k{rzh{e`|fusxtvutvutzqonnnruspxynllnicbb^|PxH~NZ^__cgd}^}^ciihii|^xJx?v?sJsZwf|h{[rOhSj_sl{vz|{y{xr}q}t~q~qpmklnmqttvxvsnlqxzwrmkjjkjji~i~i~jl~nmmllmlRlRnXpZq\\s^uavaw`wcwhwlsnqpssvsxszsyuxw}w}v{xsynxntrp}mmnoppq|q{rytxt{t~uvvvsqpoosuwvuvwyy|y{{}wqkruwxwwwwwwwwwwwwxxxxwwwwwxxyyxxyy{|||zyz{|}~}}}}|{{{|}~~~~}|||||||||}~~}|~~xs}u{yx{t~o~w~z~{~~~{z~}}{z}xyvtsuqwowmvoutr{ptrOk4h4^6Q9MBQW\\}hypxy|wz}|z{wtpnmmnq}z|epHf>d=iSpntsxrxsyu{s{rynzm|p|syvxxwzvzv{v{uyuytvt|tutyvwzy~{{~xystqonhrjyu{z~|~{xvtttxobj}}y}yz|}|{~z~y~y~w~x~w|y~{u\\[bjrtqsy}~}}|{{xytwrvqtrusww}zwywv{z~|~~}|~|yuvruttzu}uvww~vtrpnnqv{}|}~~~~z~w~x~x~{~{~{~yyyz{|||}~~~~~|zxywtpnmt}}|{~}}}|{z||{{||{z~|~~~~}~}{yvxy~{~||}|}|zwuwx{yzzy{|}}zuuwz{{|}~~}}|{{zz}}z|~|{}}{xwy}~~}|}~}~|zyyyz|}{zz}}}~}xtrsuuttttnebbfirusoopsqvwurnjedisz}~}sqywmcZaqvutuutsvwsrt{yux{xvw{|zzwph`]`gnrvuttv{vzvxvywywyxyywzwzw{x{y{z{zz{y|y{y{x{x{w|w}w~wvw}x{x{x{xzwzw{w|w}w~wwvvvvvvwwwwxxxxyyz{{~{|{|{|{}{}{}{|{|{|||||}|~|}{|{|{{{z|y}wuuuuuuuuvwx~y~z}z|{z|x|w{w{y{{z}yxwwx~x}y|z|z|z|zyzyx{w~u~t~t~t~v}w|w{w{w}x{xxxxvyt|s}r}r|s|s}r}ppps}sxqwl{l}m~o}r{rys|s}s~s}s{szrypwotmslumwpyqxpunvnwnyn|o~oonynrnsnvozo}ooo~o}o|pzpwpupsqspup{oxmplolsnwnxpxqzr|r~rrqq~r{syt{u}vrtqus~o{lzlwmvmrmqmqlrlslrmrnrospsqtrusxt{u~ut~s~s~s~r}q{ovouqys|h~_~x}vtrt~q}p~npqrrozmzlwmvrzr~r}qvnqiqEx6GZelprph}^y\\z]xRrfrloaep}r|twtmuqtxs~onlmqurqyypmmmgdcaZyTxM|GPY^_cda}\\~[bihhi~k}h|_{QvDr=q>sNw`{avRjQhbqo{x~}|zyvt~q}s}r~p~ppmmoonnrwy~y~xtnklp~p~okijjkjih}g|g|h}i|i}k}l~mnmmqbyUrRmTmXo]raubvawbwhxmtnqssrwqyoymzs|wwww}ytxtsxo}m~mpqsstzuvyrxtw{u~vwwwusqporuvvvvwyyyywrnsvwxwwwwwwwwwwwwxxxxvvvvwxxyyyxyz||}|zyz{|}~~}}||{{{|}~~~~}}|||||}}}}~}}}~}{~x{zv{q|p~s|w{zzz{{~z{~~}{|~zvypsqnuoynuotwqzmxp[q5e2\\2S6O@RU_|u{wzy|y~{}{z}yvronmmp~z{apEg?hKlauqxsyrzu|w|uzrzn|n}q}qztyvxxw{v|u|u{tysyt|t~u~u{vxz{}}}z~wzssogsl|y}y}z}|~zxussturv|~}~z~yz~||yvvsvtwtvvvxw||~ugbfkqsorz~~~{}}|wyqvqwuvy|zw{xy||~~~~~}|||vyuwxv|u}uvyz~xurpnnsw{~}}}~~~}~z~w~x~y~|~}~|~z~xwyz|}}~~~~~}z{|}xrppt}~}|}}}~~}|{{{{||{{{{{~}~~~~}zywx~x~z~}~~~}~}xurtvwvwyy|}}||{ywvwxz{|~~}~}}|{|}}{{~~zy}|}~|vwx}~~~~~~}~~~}|||zyz}}~~~~~}ztssrqrsumb^_dgouxuomhltvtqpl`_ds|}~~zvwzunf\\jzxrpprqquxwtsstvxyuqqvy{|zvobY[goywusovzvyvxvywxwxxxywzw{w{x{x{y{y{zz{y{yzyzxzx{w|w}w~w~w~x|x|x|x|x{x|x}w~wwwvvvvvvvwwwxxxyyxyyyyyyy~z~z~z}{}{}||||}|~|~{}{}z|{{|{|y}w}w~vvvvvvwxxyyz}{{{z|x|x|x{xzyyzx{w}w}x}x|y|y{z|z|z~z~y|x{v|u}u~t}u}u}v{wzxxyvzszrysvvtxs{r}s~s|r{p|n~npoymxizh|l|p}s~s|s|s}t}t|t{uzuytwqtpsntovqyqxpuounwnxo{p|p}po}ovnunwnyo|oppoo~p~p}q|q{q}p|p|nuloknkrmxnypzp{q|r|rrqpqs}u}uvwvyutr~pzornpnpnsntnumtmtntnuovouptqsrusyt|t|t|s|s|s|r{qzovouovqyn}\\~sywvwsqorrnqsvus}ttr|pskj]k9uJ|jrsutpi~\\yMvQvYvKsTtnsj~lutrpwqlrwq~polkj}lypys{v~s}q}q~omfccddxdsY{FFPY]_`_~^~agiiijl~lg}^yXvJt:s>sQubw^pXkcrmzs}utttpn}n|n|n|n}l~mnoqqpotz{~y~s~nki~i}j|l}l}j~h~jkkjh}g{gzf{f{fzf{g|j}pstssk^xUnQkTl[oasav`w`xj|pwntstuwuysyr{t}wxwwtxouxp~n|o|p~suwxx}xyzrzsyyx}xxxxwvtroosuwwvwxxxyxuqtvwxwwwwwwwwwwwwwxxxvvvvvxxyyywyz}}}|zyzz|}~~}|||{{{|}~~~~}}|||}}~}~~~}}}~}}tlo}q|vwzt{t{t{w{x}yyy}~u}lznsspznvovxtzj{oit@\\2Z0Y3V<UK\\rr~y~w~x~z}{{~z~x~t~p~onmoyy\\nAhGm_rnyt{t{r{u|v|wyzspxl~o|nzqxtwwv{u|t|s|rzqzq~svx|y{z~}}}zvwpiup{}z}{}}~}|ytqpsx{||yx{~~}|wztxpwpurttvvyyy{x|tllmnmry{{yxwyyyturtvvz{|y}z|}~~~}}~}z{yy}xwuv{}{ytqoqu{}~}|z{{{~y~wwx{~~zwvyz}~~~|vtsw~~~}}~~~|{{{{|}}|}}|}~~|xxz~{}y}{~~|vomqqrstwz|~}{yxvvvwx{~}~~~~~~}~~}}}zx{|yuwy}~z|~~~}~~}}{xy~~~{uqpqrtvxsg`_bfmtwskhhjqpoqur]Y]s}}}|ywxzwtrnx}tkgjollqyykcgjmrqljnrz}|zwk]Zoqosrolvyvxvwwxwxxwywzv{w{w{x{x{x{y|yzzzzyyyyyyxzx{x|x|x}x}x|x{y|x|x|x}x~xwwwvvvvvvvwwxxxyzzyxxxxxxyyyz~z~{~|}||}|}|}{}z~z}{||||z|y{y{x|wvvvwwxxyyy~{}{{|y}y}x|wzwywxxwzw{x|x|x|y{y{z|zzy~x}w}u}t}t}t}t}u|w|wxyuztzs{qyqwsuys~sr~r~p}o~o~n~mzkyi{j|m{p{t}t|t|t|u|u|u|u{uyuwrtqsntpwryqwpsnsnuovoypzpzqwpuptounvnyo|p~p~p~o}o}p}p~qr}q|pzo|nylrkqltmxnzo{p{p{q{qrqpqsuvwvutr|pyosnrosovowovnunuouowoxovpsprqtrvsxsxryryrysysyqwovntmrpup{gnxuuvvtrqsslptyvttts}nr_hCqEoaquruutnczStGsSuZuMqNwdyportusqyrswvrliiznxtyt{sztzt{q~hdcdflunqayGBJSY\\]adghjmnorqhc|f{eyXwLtKpWr`q^pbup{q|q}pqqo}m{nzmzm{o{m|n}p~qrpnqv{~v}r~o~m~l}i}i}l}r~t~pkkkkj~h|g|g|g|h|f{f{e{h|o~uwwurmbtSlPkYo`sau`vbzou|pwsvvxxzyyx{w|wxwvpvmqyo~swttsvvxyyxxvyrywyzy~yyyxwutqprsvwvvwwwzyvtuwwxwwwwwwwwwwwwvwxxvvuuvwxyyxvyz~~}|zyz{{}~}{|||||}~~~~~}|||}}}~~~~}}}}~}ng{swutxrzs|u|w|v|t~ttuz|}u}sxxr}oyqzyzzm|uqwN]3`/d0a5[?Ybk|wtw~z}|{~zyv~r}p~nmo~wxXmElYrlvr{r|r{q{q}s|vy}oxqozl{mzoxrwvuzt|s|r{qzn{o~r~vz{{|z{{||y{rnvq{}{}|}|~}}xqkmqvwwyxzz|{{{~|z|uzrwqvququsvuvyrpmjimruuqomllsxusrvv{{}|}~~~}}~}|}zxvru{~{vsruyz||{{zzz{~zxwx{{wvxz|}~{yy{~}||||||{{{{|}~~~~~}}~}}~~}{v}v|z|}}|}|}~}zvqpsyvtstvy|}|{xvstvwx{}~~}|}~~{{z{||yvvwy||||~~}~~~}}}~~|}}}~}}~}}~}z{~}xuruyz||vmea^cktvogfjeflmotr]]_t|{{zwux|zz|}|yofckrlhjs|}jXZ_dpyrmfqz}|{ytliwpgjossvxvwvvwwxwyvyvzu{v{w{x{x{x{x{yzzyyyyyxyxyyxzx{x{x|x|x|y|y|y}x~x~xxxwwvvvvvvwwxxxyzz{zyyxxxxxxyyz{{~||}|}|}{}z}z}z|{{}{}{z|v|uy{x}xxxxyyyyy~{}|{}z~y~x}w{wzwyxxywzx{x{x}x}y}y~y~y~x~x~w}v}u}t}s}s}t~u}vzxyyxzv{s{pyrwvt{srqqpp~o|nzmyl|l~n}p{t{tztzu{u|u|u|u|uztyrvpuovpyqxqtoqnqnsoupwpzqyquqpqrptouoxo|o~p~p}o|o{pzq{r|r{qzpyo{mymwlumvnynzpznyoxoyq|r~qqrsv}w{wzu{tzs{rzpxnuntnvoxoxovouotpupwpxpuprpqprqsrtquqwqwrwrwsvqunrmqmspwo|mhuuuuuutstsqrtwwuuus~mvUnFp[fmjstvutn^xMpFqWr[qUl[t[wq|o~i}o~svuuwz{xsnnzotrurxvvtsruo{b~``admvpsbuHAGPX[]dijhipqrr{qi}g}o~r}kz]wLtCsIsZsfwq~s~t~vwvr}p|p{oyoyozo{o{p|p}pompuw~r}o~s~t~n~j~i~l~u~wpkjjjj}i}i|i}i}k~m}k|g|g|j}r~uuonss|[pLiVl`rbucwj|vzpzsxuzwzzyzzy|x~wwv{txr{q~tzuwvvvwxxzzy{rzuzvyzy}zzxwvusqqruvvuvvwxxvuvwwxwwvvvwwwwwvvvwwxwvuvwyyywwxz{~~~|zy{{||~~}||||||}~~}||||}}~~~~~}}~~|uvrrzrzr{u}x~~~{wvsp}t}vz{~zv|szt||{zr|yuzZj7n0q/m3e9\\Wf{rot~y}}{yzy~v}r~olo|pwPnQpjxpzq|r|q{q|p}p}r{sxzpxsnzmznxpwtuzt|r|q|p{n|o}s}y}|{|}zzz{~}z}usxt}}|}{}zzzunmmpsqopvz{y~y~x~x|~~~~}}yztxrwpvqusvuu|tqmlnqrqpqkf]jtuuwv{z}~~~~}|}}{wqm~py}ywwy{zyyz{{{|}}{{|}zxvxxz|}~~~~~~~~~~}||~}zz}||{{z{{|}~~}}||~|~{}y}u}t~y}|{{|{yspqsw{xvutvxz||{yvrsvxxz{|}~~~~|z{|}}}|zzz}}yxyz|zyy{{|}}|{{|}}~~}~}}~~}||{|~}||~~}}zx||wsmg_dpwwnechbckpsup`mrzxyzyvsuz}~~|wwsifqumjggoxkYZeirwvzqtz{{{z{{{zokjoy}vxvwvvwvxvxuyu{u|v|v{w{x{y{y{zz{yzyzyyyyyzx{x|x|x}x}x}y~y~y~xxxxwwwvvvvwwwxxxyzz{{zzyyyyxxxxyyz{{}||||}{}z}y}y|z{|z~z}{y|w{zz{y~yxxyzyyz~{|}z~y~x~w~w|w{xyzx{w{wzxyx{x{x{x|x|x|w|w|w|w|v|t|t|t|s}t~u}w|x{yyzv{tztxuvuuxs}rrq}pyoyowownzn~p~r|sztytzu{u{u|u}u}t|szqypypyq{pxpropnpnsotpxqzq{ryrwqvpuouowo{o~o}o|o{oypyqyryr{qzpzozoxmwmwmvnyn{o{mxmunuqxr|rrrsv|xwwvtvswr{qzoxnvmunuoxpypwpupuqwqypxptpqppppprqspspvqwqvruruqunpmomup{qoktuuuuuutsqlmruuuuvsjzXwVqglsstuuvtp^xKmGnZrUsTq]rhupvqtiseuh|osuwz|{xuqyorlpqqurrooolwh~gfcfl}pyayIGLKV[^ioniiprrr{p}l}n~u~u}m|gz`xSvKtXtiyq~wz}{zxv~u}s|q{p{o{ozo{o{o~olotu~s}u~vuo~l}j}j}n~o~m~jjjjj}i}i}i~knsr~p}l|j|o}sspotxbrKhSk`q^vhzsxyu~t{s|v|z|z|z{y}xwut~s~suuwvvwwxyy~zzzwzvzxzzyyywwvtrqrtvvuvwwwwvuvwwwvvvvwwwvvvuuvwxxwvuvwxxxvvz||~~~|zy{|}}~~}{{||||}~~}|{|||}}~~~}}~~y}q{r}t~w~y{{{z{xvt}t~q~p~x|{z{tzv|}w{p}vy~l{E{2z.s2i8dKhtnko|w{yyz|}y}r~nkrzcuOmersys|r}s|s{r{p|n~o|o{txvyr{ozmynxrvzt|r|p|o|m|n}t}}||~~zxz{}}~|~{|}~}}{~vuusontqtrigs|vt~z~~||~~}y~{z}vysvqxqwuvyv~sonmmmprnechozuyr|t~x|}|}}~}}~zuni~ny~|||}|yvwy{|}~{z||zxwyz{|}}}}}}|||||}~}|}~~|yz}~}}|{{|}~~}}}||{~{~{~{~y~w~x{||{{{zypryyxxwvutuwy{}}|wuvz{zyxy{}~~}||}}}{zzz{|~}|{y{}}}}|{|~~||}}~~|zz|}~~}~}~~~~~|z{||{xxz}}~|xwxyz~~yvurlpy{xph`bhjntzvtrxzvpvwxuqrw|~zwqtuqqtmkkhdenojoyxzyuwwxxz{{{}|{wrsvt}vxvxvwvvwuxuzt|t}u|v|w{y{z{z{{z|x|x{x{x|x|x}x}x}x~x~x~y~y~y~xxxwwwwwwwwwwwxxyzz{~{~|~{~{~z~zzzyxxxxxyzz~{}|}||}z~y~x}x|zxwxxy~y}y~xxxxyyy~{}||}z~x~wvv}w|xzzy|w|w{wyxwxwwwwxw{w|v|v|v|v|v|u|t|t|t|t}t}v|w|x{yyywyvyvxtvtuxt}sr{qtpspspspvpzp|q{rysxtzu{u{v}u~t~t~s~q}q}p}q}pyptornrnuowpzq|r}r}r}qzpwounxn|n~n~o|o{pypyqxrwrzq{p|oyovmsmsmtnxoyoxlulqmqqusys~ss~tyuuwtvtttruqxpwnvmtmsntowpypxpvqvqxqyqwptpppoopprpsotpvqxqxrwrvquornrowr~ssovuttuuutsnh}k}q|s|t|u}vvum~d}dzmwt}tttuurayLmFlZr[u\\vcvovwszusvjtjzosuu|vzx}y{ytzosmprkslokmim{qp~jfgmq_MW\\KSY`otqkhnqrqppsxu}n}j}k}hz[xZwmzx{}~|zzywu~s}r|q|p{p{o{o}nkouw}w|z}w~s}l}j{h{h{h|i}i~ijkk}k|k|j}jjlrvx~w}s}p~stutuxhxNkPj^q`wn~wyxxwuu~w}z|z|z}ywvuuuwwyxwwwxxxy~yyzxzwzzy~yyxxwutsrsuvuuvvvwvuvwwwvvvvvvvuuuuuuvxxxvuuvxwvuvz||}~~|zz{|}}~~}{{{|||}~~~}||||}}~~~|}~~vsw{|zyyz{|{zx}ut~ru}xz}zw{x||r|l|wxv~kzVwBt3k4iAljlhk|vzxyz{~z~p~mluw[m]jwoxxx}t}t|uytysxp}o|n|o|r|s|n{lznyrwyv|r|o}m|l}n}u}~|}~y~uxz|~{~|}~~~}xvutrruwzrpv~z~y}x}|}~~}~}~{}|}|zyvyttswwv{tojhghkvvoiin~s{s~tx|~}}}~}|}~}|xslg~oz}yuvy{}~{vvx~{yyyzz{{{{||~z~{~|~|}}~}}|{|}}|x{~}|}~~~~~~~|zzz{~{~{~{z{{{yyyyyz{{{xsv{zxvuuuuuvxz|||yxz||{xwwy|~}{yxyz{|{yxy|~|yy{|}|~~~}{z{}~~}zzzzywvwz|{{~ztuwxwz}~yvvyzzyyvnechpqrxwyz||ztyzywsprxzusortqsvnkkhcfnqs{}}{wxyzyz{|}~~}yxyuxywywxvwvwwvxuzu|t|u|v{x{zz{z|z}y~x~w}w}w~w~wwwwxxxx~x~xxxwwwwwwwwwwwxxyzz{~{}|}|||||||}{~zzyxxxxxxyyz~{}||~z~x~x~yy{w~xxyyyxxxxxxy~z}|{}y~wuttu~v|yz{x|w}w|wzwzvzvzv|v}u}u|u|v|v|v|t|t|t|t|u|v{u{w{xzxxxxxxxwwwwtvsvwuysyrvqsqspvpzp{pzrxsyt{u|v|v}v~u~utrrqq~p|pzpwpwpypzq}q~r~rr~q{pvounxn|n~n~o}o{p{qzryryr{q|p}ozovmqmqmtnwnyoxkumrnqqttwt{tt}tuuvuwuysxqvpsoqnpmqmqntowpxpxpwqwqxqxqvptprproupwpwowpxqyqzrxrvqtpsospwruurxusqstutsqn{pzqzpyrytzu}wwtporvwutuvul}SqEmVsbvf|krx~xn|kwlzswv~rypwq|tz{w{sxrwonmmnmoeoytrmiiopZR_|b}ORYestpmjnqrqqqtwu}o|k~l~o}e|_{m|y}}}{yyxwu~u~t}s}r}p|p|n}mlouy}y|w|n|l|j{j{j{k|k}k}jhik}l{k|k}k~kijsxz{z~wwwzzxzrVoQj]rgywyyxwwxss}y{z{z|zxwvvwyyyxwwwwwxyz|zyzyz{z~yyyxwuutssuvuuuvvvuuvvwwvvvvuuuuuvvuuuwxxwuuvwuuvx{}}}~~{zz||}}}}|zz{|||}~~}}}}}}}~~~}|}~~~yw|||yxvwxyzzz~xywts|~zy|y~}r~f~m~u{z}mssdsEm2m7pYm}g~j|u{yz{zynmnzphishm|vzzt~t}wywtxrv{q|m|n}p}q}m}l|n{rzwy{t|o|k}k}q}x~}|}}~w~svy~|~{}z~z}~~}~{yutvt|vvwq~g}h|s|~}~~}{||{{~}~~{zrrvqvwu~phfggiuywnknp}tw{}}}~}|}{~{xtnjqz~~~}ywvyz}zvrw}~~~}{yxxyyzz{{~y~{}~~~~}|z{|}|{x{~}}~~~}}||{xxxy{{~|{|}||{zyzz|~~|{w{|zwtssuuuvwxyz{z{{|{zwvvx{|}|{zxuuwz}}{zy{~~|zz{|||}~|zz{~~~~}|{y{zwttxz|}zxyy|ywyyxuuwy{|ysnmszzyz{vrkfqmlsvwxzzxsz|{zwpllopomopmowwpjghpust|}{|{yyz{zz{}~zusonpw{w{vyvxwwxvyvzv{v{w{zz|y}y~y~xwvvvvvvwwwxxxx~x~x~xxxxwwwwwwwwxxyzz}{}{}|||{}{}{}{||{}zyxxxxxxxyyz{}|||{|z|{z{z|zyyxxxwwwwxxy}{{}ywtsstt}v|wzyw|x}w|v}v~u~u~u}u}v|v|v|v|v|u|u{u{u{u{v|u|v|v{v{v{vzwywywuxpwpwtuwsxrvqupuownyoxqvryt}u|v|v}v~vtsssrqp~p~p}p}p}p}rrr~r}qzpxpuovnzn}o~o~o}o}o}p}r}r|q|p}p}o{oymulsltmwlymzmxnwpusvuxuzt~tt|t~t}s}rzpwosnqmpmqmrnuowpxqxqxqwrwrvqtqrpspvpyp{p{pzpzqzrzrxrvqtprpqosqzrsqvrpmptttsqozpypzozq{r|s~vwxuuuwxwtt~vwvayErQsexnqttm`a~muwwt|p{m~quxy|tyoxkslrpqprnvqnljknhZ|[ueum|VPZjsrponppqrrstus~q}p~q~sn~g~i|u~{}|zxxwv~u~u}t}t~s}r}q}n}mkouy}x|r|l|o|p|p}p~p~p~pok|i{gyi|k}k~k~llpvz{~{~zyyy}}{xxavTm`so|~zzxwvysq}v{yzz|{z~y}xxyzzyxwwwvwxyz|{{{|z~zzyyxwvvuttuvuuvwvvuuvvwvvvvvuuttuvutstvxwvttuuuvxz|}}}~}{z{|||~}}|zz{{{|}~~~~~~~~~~~}}}~}yy||{wu~s~t}t}u}w~x~z~zwzxs}{yx|x{xcbm}pc{ryuhn@n3rDppl~p}u{~z{|yvqpq~zgwd~jpyyu}rru{wuyrzvvxs{p}o~o~l~l}n{s{x||v|o|k}j}t~z~{}}}}~xvvy~|~z}z~y{|xz~zwuxu}ls{xj}Y|c|z}~{zyyy{}~zx~pysuuuv|pjnooorsrmjhkpuy|}~~~~~}}{~zyuurvz~~~|~}~}{xwx~z~}~~~~}}}yww}~~~~~~|xuuxxyz|zy{~~~}}}}|||}|{xvy|}~~}}}~}||{{xxwxy{|{|}}}}{{}}~~}{}{vsprrtvvvvvwxyzz|{zyvvwxyyyyyyxwsvz}~}{{{|}}|{{|{||}~|zyy~|xxwuvwrsu}}}}yvqpvyyzxtrrsvyxtomnu{{zz{{wi]bceosroqqqqxyz{ytjb`gilnsvqqtukisz{uswxz{|{{{{{zzzz{|}~ztpljjw}w|w{w{xzxyxyxyyzy{y|x~xxwwvuuuuvvvwwwxxx~y}y}y}y~yxxxxxxxxxxxyz~z}{|{||{|z}z~y~y}z|{{}zxxxxxxyyyyyz~{}{|{{{z{{{}z~yxxwwwwwxxy~{|}yvussss~t|u{wyyx{x|w}w}v}v}v|v|v{v|u|u|u|u{vzwzvzw{v|u|u|v|u|t|u|u{uzuyvuwswsvvtwrvqvqtosnumvovqzs|t|u|u}v~uusttsqpqq~p~p~q~qrq}q{pxpuouovn{n|n|o{n|o}o~o~q}q|q|p|o|o{nymvltkskulwlwmxowrxtxvxvzu}uuttr~q{owntmqmqmrmtnuowpxqxqxrwrvrtrqqpqrpvpzp|p|p{q{r{ryrxrvrspqoonnoqqtrtrusfbnutusokzl{p}q~ssrtvxwvvwxwusv~vuq~VuPtespstsnfjpuvwv}t}rqpvy~t}l|qzqypyp~nun{lzl~kmid{_vhuozsdO_mrqqpppqqrrsstsr~s~s~v~v}m}h{s~y{zyxwvu}t}u|u|u}u}t}q}n~mkntx}v{s{r|t}u~u~uttttp~k{fyh{i}k}l~m~p~s~y~{~z}yxwxx{|~}~|zkTkcvu}|{zxvwrp~t{xz{{|y{yzzyzzxxwwwvwxz~{||{|~{{{zzyxvvutttuvvvwvvvvvvwwvvvuttsstutrrruwwussttuwy{|}}}}}{z|}}}~~}{yzzz{|}~~~~~~~~}}~~|yy||zu~t|s{rzryszu{w{y{zzyxw~xyv}y}~uhh~`[}q}x|ljpIs;qYpzr}v|}z~|~|yvsss|{fel~turpqt|uwyu{uzvwxr{o}m~m~l}n|s|y|n|h}o}i}u~{~z~|~~~|yxz~}}}}}~}|ztw|{xwxy~z{rtyzo~^|P{m}~{woov~~~{sto}rxuuwzrksywroonoabhkrvy{}~~}}}}}}}{~zzy~|~z{}}~}}}}~~~~}{yyz~|~|~}|||yyy~~~~~~~}{xtuyz{{{zxz{{||}}}|}}|zwvwy{{{{{||}}}}|zxwxxyz|{{|}}}|{|||}~~~}}zuqnqqrxxutuuvwxzzyxvvwwxvssvxxzyvwz|}|{zy}}{{|||{{{}~{yxx|}zsj^Wbieoz}}{{xuoorvz{wpostvxuqmqt|~}{wuwqf_bflrrqmlnpqwyyzzvk^[`djnrvuswxstx{{tqtwz|||{|{{yyyyz|}~zvrnifw~w~x}x}x}w}w}w}w~w~wvvvvvuuuvvvvvvwwxxy~z}z|z|z}z~y~yyyyyyyyyyyz~z}{{{{|z|z}y~xw~y}z|{{}yxxxxyyyyyyzz~z}z|{{{z{y{yz{y}xxxxxxxxy~z||z}w~v~u~uuu~s~r~r|t{v{xzyyzxzxzw{w{x{w|v|v|v|v{wzxzw{w{v|u}u}u}t}s}s~ssrs}t{tztxqxpxowpuornumynzp{q|r{r{s}s~uvvuus~r~q~qqppq~q~p}p|oxotnrmtmyl|kykvkvkylzn}o}p}q}p|o|o|o{nzmxktjpjpkplpnrpvszuywywzw|wvutrp{nxmvlululumunuovpvpwqwqvrtrtrvrvqvqyq{p}p}p|q{r{rzryrwrtppoommnmoronqusofcnuuutoj}l~suvvtstvwvuvxywrtustg}]zg|rwv}u~t~t~uutux~x|x|vsptzskr}s|q}omukvmqoym}h~dzdxlvtzuvkRapsrrssrrrrsstttuu~w}y|yzqzgyn|yxxxwvu}t|t{t{u|u|u|t}r~omlntw}w|w|w}w~xxxwwwvurj~f{g{j|l|n}r}t}z}z~x~wuuwwy{~}~{~qWngzw||{zyvurpq|vz{~~u~q{|{{{zywvwwwxy{v}x}{||{{{zyxwwvutuuvvvwvuvvvvwwvvvutrqrsssqpquxvtrrrtvxz{|}}|||zz|}}}~}{yzzz{|}~~~~~}~~}{{||xs}s{r{qzqzrzsytxwzz|{yx}w|wx{}|q_VY~q{y|trltMuJuou|v}z|{}y|{x}w{wvx}x}geoyzqooopqu}|uqpxtqzn}l~m~o|t{|~t~p~u}f~s~}~}~~~~~}{|~~}~~~~{vx}||y~|~|}wjeemu}V{e||}wodaju~}~~vnolt}zwzvunvywsmkkbVYekqux{}~~}}}}}}~~~~~~~~~|~{~|}~}~~~~}yxxz{{|||{|}~~~~~~~~|~yywvw{}~~{xvwwx}}|}~~}{zzvttvxxxyyz{|~~~}|ywzywxy{{{|}~~~}|}~~~~}xspkoruzvssuutuwxyxwvvwxxvnmqrtx{yz{{{zyy{}zy||}}|{||yxwuvz~}{xp[E=DRV]ly|wxtqnpptx{ysooquxvrotx~~~|vqrswyyzzzvsnorstxzzz{xpgccckqrnor{}zy{}{wsrw{}~|{{||yxxxz|}~~}zumaw~w~xxxwvuvvvvvvuuuuvvvvvwwwxxyz~z|z{z{z|z}z~y~yyyyyyyyyyz{}{{{{|z}z}y~xvw~x}z{{z~xxxyyyyyzzzzz~z|{{{z{y{yzzzzy}xxxxxxxyz~z}{z|y}y}x}y~x}v~sqqq~s|t|v{wzxyyyyyzx|w|w|w|w{xzyyx{w|v}u}u~v~v{uzt{s~rqqqq}o|l{k{lynwnvmym}n~n}o|o{p{p|p}p~svuus~r}q~q~qqp~o|n{m{lylukqkojqjsitgqemdjejhlmvn{p|p|p|o{o{oznzmxktjpjmkmlnnpqutyvywxwyw{w~vusrp|nylwkvkvlumunuoupupuqvqvqurxr}r~r|q}q}q}p}p|q{r{rzrxrwrvqspqonpqqsrstztqootvvuurnquwvtsssuuttvxxwqruutsnnsv}v|u|w|x~wwu~v{w{xy|wtqu{vsrppojwkwnomskufxeymywvyztwqVcqtttstssssstttttv~y|xztxqwmzn}uvvvut~s|s{sztzt{t|t|s}romlot~w}w}x~xxyyyyyxwtqok~j{kzm{o|r}s}w~vvtstuuwy}|}~}~vavn}y|||{zwvspn}t{xv~o|z{{zzyxwwwwyy{v}x}{|||{zzyxwwwvuuuvvvvuuuuuvwwvvutsqpqrrrppptwuspqqtvxz|}}}{{zzz|}}}}|zyyyz{|}~~~~~~~~}{||{ws{r{r{qzrzrzrzsyv{z|{y}xyw}yz|~xwj`Y}n{x{x|w}vlxTwbuxs|w}x~x|{w}yyzn{x{yde}qu~onoopps{vpm{rtzo~nm~o|ux~xpnmh~w~}}}}}~~~}~~~~~~~|~yz}|~~|~~~zVT`o~|o|j}x}yr~g~_bl~w{qormuy|wxtowywsmjkdZ[clqux|~~~~~|}}}}}~}~~~~~~}}}}}}}~~~~~~zvuwy{{|}}||~|~~~~~~~y~uvyz{}~}|ywv~w~y~|~~xx||zxxzvrtvxyyxxyz|~~}}}ywzzz||}|{z{}~~~}~~~}{yxpqsy}rpswvutuwwwvuvwxyzpkortx|{{||||{{}|z{{|{{|z}}}}}}}~}ywwvussvz{||}kUHBIWY^s|zxuolpprtvyyurswyxtqux|}}|zussx{|~~{xustuusuvwz|zvsqjepxxrno{{xxyzvtvx{||{{{|ywx{}~~~~~{vm]wwxxxwvuuuuuuuuuuvvvvvwwxxxxyz~z|z{z{z{z|z}z~yyyyyyyyyyz{~{|{||{}{}z~xwwx~y|{{}yyyyyyyzzzzzzz}{|{{{{{{{|z}y}y}x~xwwwxxyyy}z|{||||}|||z}wsqnn~p~r}t|u{vzxzxzzyzy{y|y{yzzxyxxzv|u}u~v~w}w{vwtwtwsyq{p|n}k}i|i}i|myoyn|nooo}n|n|n|n|o}q~ttsr~r}q~q~q~p~o}m{kyjyivhqhnikimioiqirhpglfihjlumyo|p|o{oyoyoynzmylvkqkllmnrpwryuywywxwywzv}utrpn{mxlwkwkwlvmtntotptptpuqvqvqyr~rrrq~p}p|q|q|r{ryrwrwrzrvrtqoqpqrots~vvvvwvvvvustvvussstutr}r|t|w}w~wtsvwutqp|qstuw|w}xwvvvywuwww|v|srtyzyxrnjevgvhpfpgpjrnvpwsuqvm|ut]hrssstuuttttttttuw~z{tykzj{o|r|vwtssr}r|q{szszs{s|s|r~pommos}v}w~wxxyyyyyxwsrqpq{pzmzm{q|s}v~ttsrrtvwy{{x|}|}|n~v}{}||{{xwwto~r|v|w~q|}{zyyyxwxxxyy{}||}{}}|}|~{zzyxwwwwuuuuvvvuuuuuvwwwvtsqonopqqpootusqnoqtwyz|}}|{zzz{}~}}~|{zyyyz{|}~~}}}}~~~}}{||zws{rzrzqzrzrzrzrzv{y~|~{~y{xwx|{}|{~u~qx~y~rg|r||zyyw|wz}h{`rno{w~tu}zy~{y|o~q|rl}sy{spoqpqqqxysq}tuys{p}mo|vwaYWZl~{}}x}v}}}~~}~}}~~~~~}|~||{|~}~}~~~{_dk~o~||~}v~yxm~b~^~dnuopspuw~u|v~uz{zyussxsfflruy|~~~~~~|}}}}}~~{~{{~~}~~}}}}~~~~~~~zvuwyz{|}}}{~{~}~~~~ytvy{|}|yxuvy~|~}~}~~|~tsxyxuw{ws~uyzz{zyxy{||{{{xyyz|}zxy{}}~~~}~~~uuv}rquvutuvwwuttuwwz}uqvxvy|yz{}}}~~{}z}|{{zzz}~~|yyxvtsstw{~~~~ynjbfeiv~|{wpmppqqrvxxyyyyywtvx{{{{{xspsxy|}{ywunmrrqqtyyvsrsplv}~wpr~~}zwvvxxvtuvy{{yy}{xwz}~|{}{tnjYwwwwwvuuuuuuuuuuvvvvvwwxxxxxyz~z|z{z{zzz{z|z}z~yyyyyyyyzz{{~{~|}}}}|~z~y~x~x~y|{{}zyyyyyzzzzzzzz~z}z|z|z|{}zzyxwwwwwxxxxxyzzzz}{{|x~uqon~n~o}r}s|t{u|wzwyxwyv{yz|x|wzxxzv|u}u~u~v|v{wywxuxtyrypzm{j{i|i|n{p{p}ooon~n}o}n}n|o}q~tsr~r|q}q~q~q~p~n}m{kzixhthohjiiiliqitjwjwhrglhlksmvnzozozoypypyoynymyltlkmmovq|s|u{v{wzwzw{v}t~r}p|nzmxlwkwkwkvlultmsnsotptpuqvqwqzq}rrqq}p|q{q{r{r|rzsvsvs{syrwsqsqrrsrsyw~v}u}vwwwvvvuvvvvusstsrypsprs|v}vxvztt~tuutrryqqtqwvx}wvvvw~x|w~v~u|u~sssuxy{xnc~aucsbqbrhtnuqgpsjuawd{s}t~kortrstvuutsttss~r|rr~r|n{f}ip~ttwvpno~o}o|p{r{szs{r|r}p~onnnps}u~vwwxxxxxxwvsrqrv{xyqym{q|t}v~wvtrrssuw{yu{y|}|yz{{{{||{zy}{}~v~tv{|y|v{zzyyyxxyyywwx{~|}~|}{|z{}zzxxwwwwvuuuvvuutuuvwwwvusqommnopqnmnsrqnmoptvxz{||{zzyz{}~~~~{{zyzz{{|}~~~~~}}}}~}}}||{zws{rzqzqzrzrzrzrzvzy{{{||z}x{y{{x}s~n~m~u||}{~{|}|~}y}w{vz~sxqpvo|w~rqw{~|{~md~f}xyuqppp~p}q}q~q~vzvt~vvxxsvxonzvyiZOTr}}}w}k}}}~~{zz~~~}}}|~z~{~}}|}}~||~z~z~z~}}}}}|~w~yxobZYbinpqsutu}y|y~{|}~}}|~xsrtv~y~{~~~~~~}|}~}}}}~y~xx|~~~}}}~~~}~~~~{xvwy{{|}~}|~{~}~~~~|~yyzzzzxvtrsx~}~~~~~|~tsuvuux|xt~w{{{|{zyy{{zywvwyy{|}yy||yyz}~}}}}~~}|}}zz{}zxywtttuvvtssuvwx{xx~|}vwyyyz|}~~~~|zy|z|~~zyyyxx{}}}||zwuuwwx|~~~~}zxz{xyxwutrqqpqrssswzzzxwuv{{yutvwwvwyz|z{yugeuwtuy{yqjcgpuz||wory{||{yvxxxvutuyzxx}|ywx|}yuxse`f]vvvvvuuuuuuuuuuuvvvvvwwwwwxxyy~z|z|z|z{z{z|z|z}z~zyyyyyyzz{{~{|~}}~}|~|~z}z}{||{~zyyyyyz{{zzzzzz~z}z}z~z}z}zyxwwwwwwwxwwwxxxyy~y|{z}x}v~s}q}p|q|r|t{u{t|t{tzuyv{v|v}v|vzwyyw{u|s|s}s}u}v}v{uztxrzo{k{g|h|l|p|p}oooooo~n}n|q}str{rzqzq}q~qqpn~l|k{iyiuioiijhjkjqkvlzlzktipimkplqntovoyp|q}q}p{ovnvnvnqpsq{s~t~u~u}v|v{v|u}r{pvnrlrlulvkvkvkultlslrnsotpupvqwqxqzq|q~qq~q}q{qzqwrvryszsxswsxtxtwtuuuv{wywzvyvyvzvvwwwwvvvvvvvuuspymqlsnorpvwv~uu~t|ttttssr{szw~wwvvwxyw~vuvuutt~sztzu|v~xtj|jxireobq`pkjrmpcnq^x[zh|u}u|p~ruusuvx~wvtssrrqpljhhjmr}wrusnlmn~o}p|r{szs{r|p}o~ooooqs}uvwwxwwxxxywusst~x{{yvxp{p|r|x~yxtrqqrst|uyvyw}xyz{yyz|||||~y{w}vx{~{zyyxxxxxyyywwxz{}|}y|w{z{zxwwwwwwvuuvvuuttuvwwvvtrnmkklnpqnmnrpnjknqtvxz{{{zzzyz|}~~}zzyyz{{{|~~~~~}}}}}}}}|{zyv~s{rzrzrzryqzqzryuxxx{x{{zyy{}w~t~q~r}x{~{}z{}}v}r|t{|txyu|u}{~wsw}}}~rbc{|wspopp}p|p{pzpzuz~ursxu~iyfqnv}p_c~v}|}y}m}}}~|yww|~~~}}}}}}|}}||}~~{x~~}}}~~~}~y~xxyrfZY`glnoqrqry}|~~~~~~~}}}}~}}}~~xuv~w~z~|~~~~~}}z}}}}}}}{~wvy|~~~~~~~~}~~~~|~yxy{}}~~~}~~~~~~~{~yzzyyyxwurqu}~|~xwvuuwy~z~w~t~x{{y~{{zzz{{{zz{}}}{{}~~}zxz{zzz{{{{{|||{z||}}|{||~zvtsssrrrsuvvx{{|~}~z|{zyy{{}}zwvzz|~}|yyzyxxz|}}}~|zyz{zzyy{}|z{slmqruxutusponmknruwwwuuxwtoknstuwxz|z||{rp||ww{zwspberuyxxrjlsy|}}{yyyxvutstvxz}}{xw|}wrpf[\\eivvvuuutttttuuuuuvvwvvvvvvwwxyyy~z}z}z|z|z|z}z}z~z~yyyyyyyzz{{|~}}~}~}~|}||}{~zyyyyyyz{~{{zzzzyyyyz~y~yyxwwwxxwwwwwwwwwwwwxz~{}{}{|{z{y{x{xzyzw{t{t|s}q|p{q|r|t{t|vzwwytys{qqrss~q}p|l|i|e|f|l|p}p~oonoppo~o}r~uurzpxpzq~q~qponl}k|k{jxjsjmjjjkkqkwlznzlviqhnjmlmnpospwq{q}q}q|pwotovpyq{s|tttu~u}u|u|t|qwoommkplslvkvkuktlslslsmsntoupvqvqwqxqzq|q}q}q{qzqyqwrtrrsusxtxtwtwtxuxuyx{y|uvuuvwvwwwwwwvvvvvvvvsmyjwj~n{rqurvuutttttttrtvvvvuvxxxwv|vutussstuyu~spoxotmnflbm`ik]rhkodu`}irvt~qsvvsstu~ttsrqpqsqvlcekoqpwzyvt~q~n~oppq~q|r{s{s{s{p|o}opqst~u~vwxyyxxxxyzywvuvy|yyyyr{p|r}x}y~xtrppppqq|q|r~stu}uvy{||||}|{|{yvw~wzzzyyxxxxxyyywwwyz}|}y}y|{{ywwvvwvvuuuwvutsttuvvutrolkiilmoponoqlihjmpsvxyzyyyyyz{|}~~~|zyyyz{||}~~}}}}}}}}~|}|{{zyu~r{rzrzryryryqyrzuywy{z{y{}zz{}y~x}y}{|~{z{z{~|v}r}q}ywzwz{}|~zux~{}xgf{}vrppooo|ozoxpwwvqlqzsc~_u|px}rjiv~{}}}|}t}~}~vyvtty~}~~}}}}|||}}~~|uz~}~~}~{~z~||}wpkgghjklorrt{~~~~~}}~}}}}~{~x~x~y~{~|~~~~~|}y}|}}}}}}~x~xzz~}~~~~~~~~~}~y~x~z~}~}~~~~~~~~~~~~}}~|~yyz{zzz{{yusw{~~}|{xxxzz~w}vvxxwv~xyzz{|}}|~|~z{yyz~zuvy||{yxxyz{{zyyz|~~~{y~~{vutttrqqqrtuvx{|}~||{~{yyyyz|~}|ywuy{}}}{yy{zyyz{|}~~~||{{|}|xy~|~z{|ytkefjlrxwwyvqomljjnu{z{ywutrojghjouxzzyz|~~~vqqrroqxljnprquskjqyzz{{{yxvtuuuux||||{zz||xurf`iprvvvuutttttttuuuuvwwwvvvvvvwwxyyy~z~z}z}z}z}z}z}z~zyyyyyyyzz{|~|~}~~~~~~|}}|~{yyyxyyyz{~{~|{zyyyyyyyyxxxxxxyxxxxwwwwwwwwwwwyyyyy~y}y}y~x}xyxxzw{u{szszt{t|s}t}t{uxuuxr}rrsqnk}g|c|f|h|l~o~p~onnopqpq}svvq|p{p|q~q~q~ponnm~l}l}kzkukqkpkslwlzlxjuiqhljjlknpotpwqvqxq|q~pzpxpyq|r|rzs}tt~t|tytytysyqtonlmkqktkvkvkuktlsltltmtntotqururuqvqxqyq{q{qzryrxrxrxrsrsswswsvsyszt|u~vxxvpvswyxxwwwwwwvvvvwwuspmnp}swuyvvuuttttttrtuuttttuwxxwv{ustoroqquxyvs~rumnhl^m`qcon^spo~d}r~uutstvussstssssqpru|vjqhfmq~thvwvyr}s~r~sttss{szr{r|p{lzm}psvxyyyyyyyxxxxyzzxwvwyz{y{t|s}s}w}wwtrqrqqsr~q|ppppqsx{||}||zzyykwqwyz{zzyyxyyxxxvvvwy|{|{|~zyywvvvvvuuuvvutrqrstuutroljhhikmnoooqngffhlosuwxxxwxxy{|}~~~~|yxxxz{|}~~}}}}}}}}~~}{||{{zxus|szrzrzryryqys{u|w}z}{z{zz{zz}z}||~~}}}|{zz{|||v|m~n{sz|x~t~yy~ywujnz~vrppooo|ozpyqxxv~sot|rcdzttz|yliky}}||}z}~z~wwvsrv~z~|~~}||||||~~|vz~~}~~|~}~~~}zvoifdeiovx}~}}}}}}}|~~~~{~y~z~z~|~}~~~|~y}z}}~}~}}~z~~~~~~~~~~~~~~}~z~y~{}~~~~~~~~~~~~~~~}~|{{{zz{||}|yxz{|}}||{zy|}~z~w~vwxu~u}r~ty{{}}~~}}}zywvw{yt~r~w~|~|wwwxyz{zxwy{~~|w|xrruvvutsrpprstvz|ywuvywxxyvwx}~}zvxwuy}~}|zxxyxxyz{|}}~~}}||}{{}{~t~rtxxwrmjjpvzyxyxuspqsprx{z}{yvvusqlgdgmqz|zzy{zpkmmlhgmppmjiny|tosz}}|||{vrpsxz{|}}yz{}{zwxxwqmsyyvvvuuttttttttuuvwxxxxwwwvvvwwxy~z}z~z}z}z}z}z}z}z}y~yyyyyyyyzz{|~}}~}~}~|}}|~{zyxxxyyz{}{}{~{zyyyyyxxxxxxxxyyyxxxwwwwwwwwwvwxxy}y}y}yxwww~w}x|x{yyxxxxzv|utss}sztwvuyt|s~rn~i|e{`{f|i}m~p~poonooqq~r~txwr}p|p}r~q~q~ppoonm~m}l{kwkrkrkskwkxjvjsiohjjlkomsovpzpvqtq|p}p|p}p~pq~r~rrr}r{rxsvsxsxqunqlokqkskvkwktkrlrltlumuntosqsrsrtqsqtqwqyqzryrxrwrxrzrwrtrvrvrurys|s}tuvvuzwuw{xxxwwwwwwwwwwvtsrssstvvvvuutttttqsustsrrswxxxv{upsrrtruuywwt|ismrgt`octlsrstzqtttssuuutsssssssrprvxytninsuxuvtyr{u}t}sttttzszr{o{lzhzm}svxz{{zyyyyxxxyz{{ywwwyy}y{v|u}t}v~wvt~rqrqtvw|t{p|ps}onqw{{|||zyyxfw_x|yy{{zzyxxxxwwvvvwy{x|xzyxxvvuuuuttuuutsqpqrsttspmihggijlnoonnicdegjnrtuvvvwwxz{|}~~}{xwwxyz|~~~~~~~~~~~}}}~}|z{|{{zxvt|szszszsysyqyt{u~xyz|{{{y{z}{}|}}}}~{|{{wzzzz|{{||h~\\|f|o|mi~|~{~vsskrzvsqpooo{ozoypxwv}w~y~}|vhbiv}tgks~x}|{{|||~}z}x~y~ywu~u}v}y}{}~|{{||}~~{xz}|}~~~~~~~~~~~wpid[_cmvwv~~|||}}}}}~~|~{~{~{~}~~~~}~z~z~}~~~~}~~}}~~~~~}}}~~~~~~~~|~z~y}z}}}~~~~~~~~~~~}~}{|}{yyyzz{||{|{||||{zzz}~~{~wxyz~v}v}p}j~z|z{|~~{~z~xz~|zyurtyzs~q}w~x~yxxwywx{~|{ywwz|~}|wwuopvxwvuvtommnpuy|vlptwvxxytst{~}|ytt~v~w~{~~}|ywwwwvxzz{||}}~}}||~|{}}y~q~k~p~uxxvsnkszyxxyzyywxxxy|~{~{~|~z~y~vvvusohefgmy}zz{|}{vqnpokgcfjllkkrz~zwy{~~}}}}vo~n~sx{|}~}zs{|{xussuvuuvxvvvuutsttttttuvvwx~yyyxwwvvv~w~x}x}y}z}z}z}z}z~z~z~z~y~y~yyyyyyyyyyz{|~}}~}~|~|}}{~zyxwxxyzz~{~{~{zyyyyxxxxxxxxy~y~z~z~yyyxxwwwwxwwwvwx~y|z{z{y~wwwwww~w}x}w|w|yyzwutsr}r|rztyvwxuzpzkyey]zb|h~oqpppnnoppruuur}q}q}r}q|q}qqqpoo~n{mxlskqkskskukujsiohmhnjrkunxnyo{pxpspvpyp{p~pppq~q~qp}pzpvqtrvrxqxoumtkrksktktkqkokqltlwmvnuosprqrqrqqpqquqyrzryrxrvrxr}r~szrvqtqspwqyszt~ut~tux~xyyxwwwwwwwwwwvtuvwvvvvvvvvuuuuutrsussrpprvyyxxxyw{v}v}wvkiyisq{l|bvk{u|x|wuw~ynttuutttsssstttsrstvwunptt|rvsxuzwzszo{o~pst|t|r{kydwhys}y{||{{zyxxxxwwxy{{ywwxyy~y|w|v}v}w~wxwutsruz}|xxytyt~xvqpv{{z||{yyypxWxnyy{||{zyxxwwwvvvwxzr{ryxwwvuuuutttuuutrpoprssroligfeghjmnnomjdadefimqrsttuwwy{|}~~|ywvwxy{}~~~~~~~~~~}}}~}|z{{{{zywt}szszszsysyqyt{vxz{~|{|z|z}|}}}{}z~x~v}r{t{x{r|s}v}q|q|s}b~W~p}|}qpsm~uyvsqooo~o{nyoxqwxx{{{~z}zoagzyq`mw~r}y|{{|{{|{||}{~z~{~{z~w}v}w~y}{}~{{||}~~|{}~}|}~~~~~~~{~~~xpg`c^blspmy|{{|}}}~}|{|~~|~y~{~~~~~~~~~~~~~}~}}~~~~~~}~{~z~y}y}{}|}~~~~~~~~~~~}{z|}{zxwvuvwz|~~}|{zzzy|~}~{z|~~|~}{}s~|~wtx{ysp~kms{}|yxxzzw~u~x~t}rruvwt~s~v~yzzyy{~|~}{vrqpry{zyxvrlllmpuz}shkrwyyyytsv|vv{}zwvx{~}|yxwvuvwyyz{{||}~}||||||{zvn~k~o~twxzzvryzvuxz||{{}}}}|zz~{}z}y}x~xyxuppoojix|{{|}{xurrohb__bhnrsx}}|}}~}|v~k}l}r~y}||||}{ywuqomopqqqtvvvuttttttttuvvv~w~y}y~yyxwwvvw~x|x|y|z|z|z}z}z~z~z~z~y~y~y~yyyyyyxxxxyz{|}}~}~|}||}{zxxxxyzzzzzzyyyxxxxxxxxyy}z|z|z|z}z}z~yyyxwwxxwwwxy~z|zzz{y~wwwwxxww~w}v}x{yy}wusrq~q}q}r{tyuuupvjxbybzh|qrqqp~o}n}n{oyozpzsysyrxqxpzq|q|q{q|q~qrqq~p}nzmvkskpkpkpkqkrjqinhliqjxlzn{nzoxotprpupwpzp}ppp~p}p~poo|oxqtquqwpzoxmvksjsjujvktkqkrltlvmvnuotosprqqppppqtqyr{rzryrxrys{s|t|s{sxrwrwsvtwt}t~t{tzvxxyyywwwwwwwwwwwvwxxwvvvvvvvvuuuutsststsqpquxyxwyy{{yrgkrul|duoyv|y~vttwrlsuuuttsssstuvvvuuuvxxtrttrztzv|z}wzmze{ptuur~i{iyr|{~|}|{|{zyx~xxwvvvwy{ywwxyy}y{x|w~w~wxyxvutru{{~r}q|lvvu}xrv~y}{{|||yyyxjwyxy{|||~{~zxxxwwvvwwxys{syxvvvuuuttttuutsqomnqrrpligeddfhjlmnnke`_deegkopqrsuwyz|}~}zxwvwxz{~~~~~~~~~~~~}}}~}}|z{{{{zyxu~szs{r{ryryqytzx}yz{||}{}{~}}~}z~v~t~v~s|p{o{k}j}j~p|}||o~\\}x||}zlqwn}tyvtqpp~o}o{pxnxrxxzz}zy|}tnr|yq`q~~~t}n|{{{z{z|z||}z~y~z~{~}}z}w}v~x}|}|{{|}~~}{|~}}~~~~z~|~~yskeh^_bhkpx~~}||}}~}ywy{|{z{}~{~y~z~~~~~~~~~~}~}}~}}~~~~~~~{~x}x}x}x}z}~}~~}}}|}|~||zyyyyyxvtqopv|~~~~~~|~yyyxy~|}|}{{{}~~~{vvywsplmpxzxww{{z{zzt~mpuxwvs~stwz}~~~|~{zywtssuy|}|ztnloqrtw}~xmntxzzyyuuwypu}~|zz{|}~}}{yxwvvvvwxyzz{{|||{{{{{{{yvrq~twuttvuv}~{z{|}|{{{|~~zyz~z}y|x}x~yzyvsvwytkp}{yy|~~|ywuri`^\\^hpwz|}~~|}~~}}|}v~m~m~sz|zy{{|~}zxuplghkknpswvvuutttttttuvvw~x}x}x~xxxwwvw~w}x|yzy{z|z|z}z~yyyyyyyyyyyyyxxxxyyz{|}~}}}}|}|~zyyyyyyyyyyyyyxxxxwwxxyy~y}y{zz{z{z{z{z{{{}z~zyxxxwwwwxy}z{z{y~xxxxxxx~w}w|w}w|y||z~wttt~t~s}r}r{rzrwssunvnwnyr|r~qqp~o|nxmtnrmqnqprpqprqtpxp{q{q{q|q~qqq~q~p|o{mxkujtkqkqkrlrkojliljrlym{o|ozowovpxp{p{p|p~p~p~p}o|o}onno|qwqsquqzoxmvlskqktjvjujskslsmtmsntotoupvpspppoqtqzr|r{szsysysytztzt{uztyuyuuuruvuutvxyyyxwwwwwwwwwxxyyyxwwvvvvwwvvvuvvtrttttrqruxxwuvx|}{rmuusj{hwqzv|xtrsusotuutsssttuvwwwwvwyyxwutuvuv~wvz{zys{s~uxwtps}z~}{{zzr{k{uzyxxwwuuu~u~wyxwxxyy|y{y|x~w~wyyxwuusv{}~o~hdzkw|~}v~w~x||}}}{}~yyxw~wxxz||{~z~zxxxwwwwxxyzw{{yxxwvvuuttttuttromlnopplhgedccfhjklmjfb^_dfghjmnpruwxz|}~~}ywwwwy{|~~}}}}~~~~~~||}~~}}|z{{{{zzxu~s|rzqzqyqwswwx{z{~{{|}}|}|}~}}}y~s~v~v~p|l{k{g|f|f~i}u}~}t}l|||}~vmrxq|tywtqpo~o}nzpxpxszw|z~{~z{~~z~z~~|}um|}}}k||{{y{z|z|{}y~x~y~z}|}~}{}x~z}|}|{{|~|{{|~~yvx~z|~~~|xtqeZTW`ozuv~~}}}~~vurqsuwyxy|}~|{~x~{~~~~~~~~~~}~~}}}~~~~~~~{~w}v}v}x}z}~}}~}||z}y}z~zzxu~s~ssvwxvrn~n~s~{}~}}}}}{}|~|}z}w|u~v~{{|{}}}~~~~|{{zyyxxyyxsopx|}}~{vpry}z{yutwz~~~|~zxwvvuuvy}}ysopsvvwy}srw{}}}zvuxwsuy|}~}|||||{zyxwwwvtuvxyzz{{{{{||{z{{yvtuxzuspsrjq{~}}}|{zyxyyyyzz~y~x~xzzywvwy|znjxwwz|}~~|zxtmdb``jrx{}~}{{}}~|zzz{xrpsy{wxy~qqv|uokdgkhlprvvvuuuttttttuvvwx~w~wwwwwwvw~w}x|y{y{y|y}y~yyyyyyyyyyyyyyxxxyyyyz{{|||~{{{z~zzyyyyyyyxxxxxxwwwxyyy~y|y{{z|y|x}w}w}y|z|}{~yxxwwwwwxy}y}y~x~x~x~x~x~y}x|x|w{w{w|w{xyzw{v{wzyzyzw{u|r|q}q|rysysytxvwyt|s~qpo}ntmpmomnlonppqpspuoxpzp{p|p}ppq~q~q}p|nzlwkujukqkolpltmvmwmwmyn|o|p|pzpxpxpyp{p{p|p}p}p|o{o{o}onoop|ryryrzpwnumtlqlqksksjrkrlqmomonqnuoxoypwprqpqtqzr|r|s{szsysytztzu{uzuyvyvwvsvuv~uuwxxyxxxwwwwwwwwxyz~z~yyxwvvvwwwwvvvxwtqttttsrsuwwvssw|~|ututpl~m|q|t~xtssvtstuusqqstvwxxwxxvw}~}xvtsuwxxyyz|wyuzt|vxyyz{~}ywxzw{n{tzyxxwvuu~u}v}vwxxyyyy}y|x|x~xxyz~yrryz|w}m|sxqw|z~z~xx||}{}u|xyyxwwxxy{{z~zyxxwwwwwyyz{v{zyyxwvutttttutsqmkjlnnlifedbcdgijkkjf^]]`dfgikmortvxz{}~}|xwwvxz|}~~~~~~~~~~~~}|}~~}}|z{{{~{~zzyvt{rzpyqxqvuvzv}x}||{|}}|}|}~}}~z}s}x}w}h~i~g}g}_|d}t~y~~~u}r}{}z}yuuryu}uzwtqp~o}n|nypxpxt|x~z~zz{|~{z|}|}{|~}{|}{~{{{x|z||}{}x~y}z}{}}}{~|}~}|||}~~yxxz}~|rimx~}~~~}~}{|{bMSixynmw}}~~somnqtuwvxz||{y~x~z~}~~~~~~~~~~~~}~}~}|~z~w~~~~z~v}v}w}y}z}|}}}|}z|x|w}x~y~xt~p~n~n~oswzzw~r~r~u~{}~}}}~}~}}|~{|{t|r~w|}}~~~{~z{}~}|}}}}|{{{}~~~x~n~o}}}{|wtux{zyyyyz|~~~}~~|yxwwwwxz}~xrstvvutvx|~zvuy}~xsrwxwxxz}~}zwyzzzzyxxxvsoswzyzyyyy{|}|{{{ywvwyzvtsyrmij}{|||{zzxwvwyzzywuu{}xwxzzzzvtxxy{}||}}{xvqlmjintz|~~|zz|}}yvx|}zursx{uwywrpw}{vrnjormprqvvuuuuuttttuuvvvwwwvvvwwvvw~x~x}x}x}x~xxxyyyyyyyyyyyyxxyyyyyyzzz{zz{{~{}z}z~zzyyyyxxxxxxxxwwxyyyy~z|{{|y}w~u~uuv}w|z{|zxwwvvvwwxx~x~x}x}x}y}y|y|x|x|x{x{xzxxxwxwwzv{v{wyyw{t{t}t|t|t|syrwsrvsyq|qpo~oynsnqmqmqosqvq{p}p}o|o|p}pppqp~p}o|mzlwktkskplomrnwo|ooo~p~p}q}q{qzqyqzpzpzpzp{o|ozoyozo}oopppr~r~r}rxpvnvnvmultlrkqkplommmlnpnvozo{pypuqtqvqyr{s|t|t|s}s}t}u|u{uzuyvwvwvwv|vvvxxxxxwwwwwwwwwwxy}z{zyzyxwvvwwwwwvvvwwtruuuttstuwwvssv{}|xuuttstoksuvvwwwwvurqnruuwxxxxwuvuyxuz}zuuxxyyyxv|syrzs{u|x|y{}~~{xw~y{y{{{zyxxwvuu~v|y|z~yyyyyzz~y|x}x~xxyz~xssz{|}}y{y~y}}~z{|||{|y||zyxwxxxyzz~z~zyxxwwwwxyz|zr{p|{zxz}yxvutttttttrnjhhjlligeedcdfijjjgeb^]adeghkloqtuwy{{}~|zwwvvy{}~~~~~~~~~~~~~~~~~~}}}~~}~}|z{{{~{{{zxu}s|pyqwtuxu|u~v~z~||}|{|z}{}}}}~z}w}x}z}m~j~c~b~\\}a~z~s~t~u~s}y}w~utywyv}wz~xvtrp~n|nypxryv}yzzzz{{z|}|{z{||{{|{x|z|}}|}y}z}{}|}}}~}}}}}}}~}xvwy{zyjfmw~~~~~~~~cSl|yoow~~{njmqsuvuwy{{zy~y~{~}~~~~~~~~~~~~~~~~~}~}}}x~u~o~x}{x~v~w~w~y~|~{~{~{~{}y}x}w}w}x~v~r~n~l~m~puy}~~|~y~x~z~{}~||}}}|}|x{t}u~z~~~~~~zy{}~}||}}~~}||}}}{}s}u}}{zxwxyyywx{||}~~~|xyzzzzz|~tnrwyxustvyzywvwvx~|smnuvuvxz}|zy{~}|{zzywtpswzxxxxwxz{}}||{yxwxxxvtswuttiptxyyyyywvuwyzzxvpikquxyyzzyvvxyzz{yy{{ywtplloqtttsrsvxy|||xuz{uqrv{xxyyuty||xutsvxvwwsuuuuuuuutttuuuuuvvvvvvvvvuvwwwwwwwxxyyyyyyyyyyyyyyyyyyyyyyyyzz{~z}z}{}zzzyyxxyyxxxxxwwxyyyz~z}{{}y~wutrrsu~w}zz|xwwvvvvwxx~x~x}y|y|y{y{y|y|y{y{x{xxwxwxvzu{t{uzuywxxxywzv{v{tztxtrvoxnzp{pxouounununvowqxr{r~q~p}n{nzo|o~pppo~n|m{m|m{mxmxmvnvoxo|p|p|p}q~q~q~q}q{ryqypxowovovoxnynynxnzo|ppqqprrrr}q{pwownvntmrlplolomnnnnqnvozo|p{pypwqxqyr{s|t|t~ttt~u|u{uyvxvvvvwxw{wwwxxxxxwwwwwwwwwwxy}zyzvzyxwvvwwxwvvvvvvvtuuuuttuvvvvuuw{|{xvuvvvwqlsvutstuvwvto~guh{puwwwwwvre{`olqz{zxwxyxxx~w}s{oyozq{tzvzx~z}~}zxx}zwzo|v{zyxxwvuu~w|y|{}{zyyyzzz}yyxyyz{wtvy~z{|}|zy{~|zw~~~{}t}z{{{zyxwyzzzzz~z}yxwwwwwwxy|zi{d{k}||s{r{zyxvuttuuuusoifefgihfededcfgjkihdb```dffgimnqsvwxz{|}~~zxwwwwz|}~~~~}~~~~~~~}}}~~}}}~|{{{{{{{zzw~u|qyrwwtyt}tvxy~x~x~w~y}{}}}}}{}x}}}x~j~Y~V~\\}\\~m~p~v~t~s~x~v~v~v~|x~u}xzyywtro}ozpyszw~z{{{z{|||}{{{{||{{||y|{}~}}}z}|}}}~}}}}}}}}}}~~}{xyzvzzwuqr|~~{z{~~~~~~uu|vvww~{}|plopqrstwzzyyy~y~{~|~|~|~|~}~~~~~~~~~}~}}}{~{~{~}xpn~t~y~z~{~|~{~y~y~y~x}w~w}w}w}v~r~n~n~p~s~x|~~~~~}}}}}}}}}|~}}~~}{|v|t}x{~~~~~~~~}~~}||}~}}||}~~~~|~x~z~~}{{{xxxyyxwxz{||}~}wwy{|||||~}vqvy{yuqprwxxxwwrmtwrmlrqoqwz}|{~}||||zxvwxyzyyxwxyz|}}||zyxxwvurilpv|sjquwxwwwuttuyzzyxwnddnrtwwxurruxz{yusuvuqrtplpvywvuttuzz{||xuxyywqoomsxvwxyy{||zyxy{{||zvuuutttttttttuuuuvvvuuvvvuuuvvvwwwwwxxxyyyyz~z~yyyyyyyz~z~z~yyyyyyyzzzz~z~zyyyxxyyyyxxxxxxxyyyyz}z||y}xvtrpppr~t}v|xz{y}wvvvvwxx~x~y}y|y|y|y|y}y}y~y}x|x|x|x|x{vzuzuztztzuyuytytxvytym{gzm|p}pzououowowpxq{r|s~rq~qyovnuovo|oppo~m{lzmzm{n|o}n}n}o|p}o~o~p}q}r~q}q}qzqwqwpwovouosovoyoyoyoyp{q|q}q~qprrrrr~qzpypxounsmqmrlrmrnonqnwozo|p|pzoyryrzs{t|v|v}u~uu~u}u{uyvvwswsxvx|xxxxxxxxwwwwwwxxyyyy~z}zwzyxwvvwwxyvutuvvvuuttuuuuvvvvvvy|}{yvuvwxw{t|svvrqooruwwvsjni}quxwwvvvqbfyux}}{ywx~xxxw|u|qymwpxq{tzuzx~z}~|{yxzzzt{p{sz}zyxwwvv~w|y}{{zzzz~{}z~z~zyyyzz{xx~yyzz{~z~z}zzz|~vnkvz~r|y{{zyyxxz|||z~z}y~yxwwwwvvwyzv{l{p{w{p{qzzxwwvttuuuvribaadedddccdeeghjjgfb`__aceghknpsvwxyz{|~|yxxwxy{}~~~~~~}}}~~}}|~|{{{{{{{zzxw}rzsxyu{tsuuvsqqw}y}}}}~w~~}~~n~V~J]~k~c~l~q~s~s~w~y~y~y~zt~v}|zz{zvqp~ozoyu{y{||{|}~~~}||~|~|~|||||~|{}|}~}~}{}}}~|||||}}~}|}z}z~{~|~{{{~~zyz||qq|~}z{~{~~}}}~|~y{~zvvu~slht~{rlmlmopr~x~y~y~w~w~xxyz{||~~~~}~}~}~}}}~}~~~uqr~w~z~|}{}y}x}w}v~w~w~w}x}w}w}w}w~s~r~t~x~{~~~}}}~}~}}}~}~}~~~~~~{}w}v~y}~~~~~~~~}}}~}||||}~}~~||~~|{z{}zwtsttvyyyyyyy|yux{}}}}}}}}zy{{}{umimswwxxxwrsvtqqrqopuy|~|{}~~}}}}|{zyyyzz{zxwxy{}}}|{zzzxxxtfiqv|wsuvwwwwvttv{{yyxsmg_eloqtywsnioxzslghlomjtsllpwyxwqqx|~|||zxvqoqplgaittxyzzz{{{{{}~~~~|xuuuutttttttttuuuuuuuuuuuuuuvvvwwwwwwxxxyyyz~z~yyyyyyz~z~z~z~z~z~z~z~zyyyzyyyyyxxxxyyyyyxxxwwwxxxyy~z|z{{y}x~urpooqrs}u|vzxyzx}wwwwwwxx~y}y|y|y}y}z~z~y~y~y}y}x}y{xyvyuyuzsztysyrzrzt|s{l|l|n}p~q{pwpwpvpvqyr}rrrq}qzpwovoxo|ooonl{lylymxnzn}o~o~o|o|oo~p}p}q|q}q|qyqvpvpvptprpqpuoyozoypzqzr{r{q{q~pqqr~r~q}p{pzpzownunsmumvnxnpnqnxozo{o{o{pzuztzszu{v|v}v~v~v~v}v{vyvvvrwqxsxyxxxxxxwwwvwwwyyyzyyzzyxxwvvw}wtxwt~r|tuuvuttuuvvvvvvvvwxz{zxvuvwxwswqw~wwtsqqttvwxvspru~w~wvuvwtut|xz}~{xus{sxwwu}u{pymvpwrztztyv|x~{|{zxxyy|{uzwz~yyxxww~w}x}y{{zzzzzz|{}{~zzzzz{{yy}{u{r|zz~z}zz{}z~smouz~x|z||{yxxxxz}~}{~z~yxxwvvvvuvxy~z|y{y{yxyvyxwvuuuvvvuqe]]^abbbbbdefghiihfc`^__adegilpruvwyz{|}~~}zxxxxy{|~~~~~}}|}}}||{~{~zz{{{}{{zzxy}sztz{x}truuuqmmr}v|}~~ww~y}z~r~]~h~k~l~l~p~t~t~v~z}z}y~}~z~u}x|zz{{xrpp{pzu|{|}}|}u~y}}}}~{}}|{|~||~}~}~~}}|}}}||||}|}}}}}}z}x}x~z~{~{~{~}~~zy}}tsz|{{{~|}~|||}~~{{|ztopphdj~ljhjmnlo~z~y~w~v~v~wxyzz{|~~~}}~}}|||}}~}~~{~y~z}}~}}~}w}u}t}t}t~v~w}y}v}u}z}{~x~w~w~y~|~}~~}~}}~}~}~}~}~}}~~~~~~~~~{}w~u~y|}~~~~~~~}}~~~}{||||}{}}||{{|~w~r~mnqsvxwwuuttuuwx{}~~~~}}}|}|}}|vlffltuwxxyutvvtstrpruy|~|{{{|~~~~~~~|{yxyy{|{yxxz|}~~}|{zzzzzwqqsw||xtuvwxwwwwuv{zuxxsnjffimsuzwtm`Ycpogcbinptttnjmuywwsqw{~}|{|zvokrqmlnruu{{{{z{{z{}}zuuuuuuuutttttuuuuuuuuuuuuuvvwwwwwwwwxxxyyyzz}z~yyyyyz~z}z}z}z}z|{|{}{}z~yyyyxxxxxwwxxyy~y~y~y~x~xwwwwxxxyy~y}z|{z}v~sqqqrsqpp}q|r{tzwyyy|x~wwxxy~y~y~y}z}z}z~z}y}y}y}z}{{zyzyxyxywywxvxuytyt{s|r~r~rrr~r|rzqwqtqxr~rrsr~q}pzpypyp{o}nonm|mymvlskslxnyozoxo|nop}p{q{q{p|pxpspsqrqpqnqpqtqyq{q|q|r{ryrxqwpzqq{rzryryqzp|p}p|oyowovoxozo{ovovnyozo{n{ozqyzywzt{u{w{v|u|u}u}v|vzvyuwutvpwoy}yyxxxxxxxww~wwwxzzyxxyyxxxwvvvxvyu{y|t{qypxtuuutttuvvvvvvvvwwyzzyxvuvwwwzxsy}yxvtstuttuxxwvuv}v}vvvxz|}}~{|z}z~vq~kyjootuut}qxmuqvtztysytzv|z{{zxxyyz}yyyyxy~x~x}x|y}z{zzzzzz{{{{zz{|w|s{y{~|u}o}v|{z~z|}v~ttzy~{}}{}q{~xxxxy{~{{xxxwvvvvuvwxxxxxwwvvvuuuvvvum_WX[^__`acefghhhfdb`^^_aceghknrtvxxyz{|}~|zxxxxyz|}~}}||~{|z|{{}{{{~{|{z{}{{{z|v|w}|{~utuuusrrp~t}~~~~nq~v}}}~o~o~n~n~o~q~u~v~t~w}w}w}y}y}{|{zz||zwrp|s{w{|}}}~ytaWj~}~}~{}}|||||~|~}}~}}}|}}||||}|z|z}z}|}{}y~x~y~{~~~}}~~~~|~yyywvxyz{|~|}~||||}~~}~}|xsqokjrseiloopos~{~w~u~u~w~wxyyz{|~}~~~~}}}}}||}}~}}~|~|~~}~}}}{}v}u}t}t}v}x}y}q}p}z}}~z~z~z~y~yyz~z}|}}}~~~~~~~}~~}}}~~|~x~t~wxz{|||}}~~}~|xx{||||{}~~}}}}}~xmknsvwwvttttssuy{}~~~~~~~~zsljlqtvxz|zyxxxwwwvvx{||{{zyz}}}}~~}zyvuwy{|}~~~}}~~}||||||{zzzzzxvuuvyzyxxunkorrw{voqojhowz{xtpjYVgmjecirvutwwursvstutuwtty|~|vtuxwuvz|yy~|{zzyxy|}uuuuvvvvuuttttuuuuuuuuvvuvvwwwwwwwwwxxxyyyzz}z}z~yyyyz~z}z|{|z|z{{{|{|{{|z}z~yxwwwwwwwxy~x~x}y}z|y|y}x~w~w~wwxxxxyyy}z{|x}v}t~t}t}v}v~utrq~o}n|p{ryxx}wwxxyyz~y}y}z}z|z{y{x{y|z|{{{z{zzyzwxxvxvwvwvwvxwxwyvzvzuztztzsxsvquqyq}rssr~r}q{rzqypyo|o}n~n}n{o{o{ovltmvnyoyo{o~n~o}p{pzqzq{q|qxqsqrrrrqrprqrtryr|rr}r{rxqtpspvq|ryrxrwrwqzp{p|p{p{pypypypypypxoxoyozozn{nzry}yz{v|v|v{v{u{t{t|u{uzuytxsvtswpx}yyxxxxxxwwwxuu}v}yyyxxxxxxxwvvuuutxsytkunwq~uvussstuvvvvvvvvwwxyzywvuvwwwx~yyxwvuuvuuvwxxwvuu~vxy{|}~{{w{x~vof{aufqqxuytxptlsqvtzsxqwqys|x{zyxxyyyyyyyyy~y}y{z{{|{~{zyyzzz{{{{zz{|y|k|w|}u~s~{}{~{|z}{|}w}p|~}}}x}}x|h{{xxxxy{~~|{yyxwvvvvuuwwwwwwvvvuuutvvvvtjYSVY\\^__bdffhggfca_^^_acdehimpsuxyyxz{|~}zwwxxxy{|}~~~~~||{{y}w}x|z|~|{{}||{{{||~y|{~}zuwyyusvxx}z}}}|~o~d~o}x||{}s}q~p~pp~q~v~x~v~v}v}w}x|z{}{{zz|}{|uq|vzy|{|~|skb[\\t}|}~}}}|||z|||}}~}~||}~|||~|z|x|x}z}}}|}z~x~y~{~~~}}}{}|~~~~}ywuvwwvwy~{}~||||}}~}|zvqjfjsviuy{|xww{~{~u~s~u~x~xyyyyz{~{~{~{~{~}~~}}}|}}}~|~~~}~}}}z}v}w|w|w|x|z|{}v}u}}}~~}~}~|~|~z~yy~y~z}|~}~~~~~~~}}~~~~{~vsqsuvyz{|~~~|tsx{{{{|{||{{}~~~}|tqquxyyxyz|}|yxxz|}}}}}~~~~~}ztqqrtvxy{ywwxyxxxxy{}|zzzyxy|~|{{|}|zxuuwyz|~}|}~}{{{{zz{{{zywutstvyyyzvlgmvz}|zuxwojpwyyxutuh]jsqjedffekx{~|uqsrsvzrcfsw{zswywttwz|{|~||{{yxy|~}uvvvwwvvvuuttttuuuuuuvvvvvwwxxwwwwwwxxxxyyzz~z~z~yyyyz~z}z|{{z{zz{z|z}y|z{{{|z}xxxxxxxxyyyy~z}z|z|y}x~x~w~w~wxxxxxyy~z|{y|x|w|v|w|x|z|z}z~x~v~t}s|s{szwx|x~wxxyzz~z}y}y}x|x{wzwxxzyzzzz|z|yzywwxuxtxuyvyvywzw{w{xzvyvyvyuxtxryq{q{q|r~rr~q}q{qyqwpyoznzmznyn}o~o~o|nwnwo|poo|oupwpzpzqzq{r}ryrtrusvsuststrwrzr|s~r|rxqtpppoqsrzryryryryrzqyqyqypypypzpzqzqzp{pzoyoyoynzoytxyz|w|u}u|u{t{txtwtxu{t{r{o{pztxwxxxxxxxwwwxzr{pyt{zyxyyyxwxxwvutwtqznwpfwq}wuusp}qtuvvvvvvvvvwwxyzywvvvwwwxyyxwwvvwwwwxyzzxwwx{~}~~}~}~{y{y~xpe|`}fyottrtqsrmsqutytwsyo{n}qyzyxyyyyyyyyzz~z}{{{z|z{|{yxxyzz{{{{z{~||~}s}~~r~u~|}|}{|{||}|x}s}||}{{{{}{p{~xxxxy{~~}||{{ywwvvvuuvvvvvvuuuutttvvv}w~tbSRUX[]^`bdffgfdb_]]^`bbbbdjmpruwyvvxz{}~{xvwwxxy{|~~~~~~|{zzx~t}q|t|{|{|{|x|{{{|~~~{~}{~trxz{vw{~}}||z|x}q}l~i~z}||z}t}s~s~rr~r~s~v~v~u}v}z}||z|z{}{z{|}~{~x~t}xy{{{}vbX_egp~~}|~||{{|||}||}}~|}}~}}}~}{}y}{}|}~}~}}~z~z~|~}~~}}}}}}~~~}{wvwwx{|~|}}||||}}~}zwtkgdixw~k~~~~~|~{~|~{~u~t~u~w~xxxxyzzyy~y~yyzx~y}|}}}}~}~}~}~}}}w}w|z|||||}|~|~}~}~}}~~~~~~}~|~{~{~{~z~{~|}~~~}||}~}zwwxyyyz|~~~~yrwz{zzz{{||{}~~~~~}~{yxutwz{zzxxz}}|{{||||||||||}~~}{xvtstvxxywwvwxyxxxy{||{zzyxwz}}{zz{||zyvvwyz|~~|{{}}zwwxxxzz{zxwusrrsuwz{zrnu|}|||z{{vsvwxwyzywrmpwwqmie`^jy|~tmstuz}rhortwwwyywtuy{}||}}|||{yyz{}~|{vvvwwwwvvvuutttuuuuuuvvvvwwwxxxxwwwwwwxxxxyyyyyyyyz~z}z|z{z{{z|y|y}x}x}x|y{{y}yyyyyxxyz~z~z}{{{{{|z}y~xw~w~w~wwwxxyz}z|zz{y{x|x}x}x|z{|{}|}}||{|{{zzzyzx|x}x~x~xyz~z}z}y|y|w|w|v{uywyxxyyx|x|x|wzuytxuxuxuzt|s|q}q|t|uzuyuytxsyr|qzqxq{q~rr~q|qyqwpvpxoznxnumvn}oooo}o{o}pposopptpwpyq{r|r|ryruswtwsusssvrzr|r|r}rwqrpoompmqqquryrxrvrvrvqsqtqwqyqzqyqyqyqzq{pzoyoxoxnzq{yyxz|w~ut~t}t{tutrtvu|t}r|o~o}s|x|yxxxxxwwwxx~y|ryoys|zzxyzxvvyzxxvupqwmuuo~uvt|ovmunxq~tuvvvvvvvvwwwxyzywvvwww~w{wxyyxwwwxxyyz{|{{z{{}~|zz{zsh|q~noyssuqtrmsrtrutts{pmpxzzzyyxxxxyzz{~{}|||z{y{yzxxxyyzz{{{{||}~~~~~z~u~x}{|||||z}x|v|w|{{}{~yyzzwxxxy{||{z~{~}~}zxwvvvuuuuuuuuttttsttvwrvrypq~[OQUWZ\\^_bdefec_]ZZZ]aebaagmppqwxyvvxz{}}ywuvwwwz||~~~~~~}{||{s}i|l|s|s}q|m|q|v|u}u~x{}|}zr~u~r}w}v|w|z|{~|||{|z|s}q}~}}|||}u}r~s~v~v~t~p~p~p~p}s|{}}~}t|x{z{|~|}{~~|{~w}zy|y|~yfMFXmbo~}}|}|{{{|||||}~}}}}}}}}}}}}~~}~}~|~}~~~~~}yvvvz~~}z|{|||}}~~~zwtmqtty~~}}}~~}~}~{}y}w}v}w}v}v~v~v~vvwxzzyxxyyxx~v~x}{}}~~z~y~|~~~}}||z|||||{~}~}|}~}~~~|~{~y~y~z~z~y~y~z{||}~}~|~{~{~|~{~y~yyxxy~z~|~}~~~~~~{~vz}{zyz||}~~~~~~~|~zwuuuy{zz{wpmotz~~~}|||||{zzzz{}~}{yyxusuwxxxwwuvxyxxxxyz{{{{zxvw|}{zz{|}|zxxyz|}~~}|{|}~zvtvxy{||zwutsrqqruxxwtsuxz{}}{{{zyyxy{{xwvtuwywtrpngcp{{}ypkrxxz}|xvuvtstuxz{{||{z{{|||}{yyyzzz|~{yyvvwwwwwwvvuuttttuuvvvvvwwwwxxxxxxwwxxxxxxxxxxxxyyyy~z}z|z{z{{z|y|y|x}w}v}w|x{{z}y~yyyyy~z~z|{{|x}u}u}x|{z~ywwwwwwxxy~z}z|{z|y|w}w}v~u~v}x|z|{||{}{}z}y}y|y|y|y}y}y}y}z~z}{|z{z{x}v}v}v|wzxxxywyv{v|u}s}s}uxvwuwtyr{o}n~p~s|s{s{s|r|r~qwqsqyq}q~q}qzpwpuptoxo}oyosnto}ooppppp~pzomojprpvqyq|r~r|rysvswtvsssssyr}r}rzrzqtqppopnpoqrqvrxrwrtrqrqqqqrqtqxqxqyqyqxqxqxpxpxoxowpywxwx{}w~us~s~s|txutuwv{u~tstwz~y~xxxxxwwwxwxxtvxv|w|{yxywvrwzyyywryxwyzu}t~t}rzkripmsq|uvwwvwwwvwwwwxyyyxwwwww}wwwxyyxxwwxyz{|}~~~|zyy}xr{so~szswqslqsrsstru|utrx{|{zyxxxyzzz~{|~|~|{{{z}yxyyyzz{{{{{|}~~~~~~}z}t}w}z}y}s}m}q|u||z|z|zyxyyxxxyz{|~{}{z{~}|zxwvvvuuuuttttssssrstvwuwuzukULOSVY[]_acdd`^YXWY[^bd`aemqpotyzywxy{}~}xuuuuvvxz|}}}}||}|t}e|g}n}o~p}n}l}j}i~hmru}~~}~{}u|~|z|u|w|~|{{|{~|}|v}a}w}}~|~|}|x}u~t~w~w~u~n~k~k~m}g}o}z~x}k|p{}{{z{z{}|}}||{zy|y}z|~~thVBWcK[t~yz~|{{{{||||}}}}}}}~}}x~|~~{yxzz|~~~~~~~zwvw{~}y|q|r||||}}~~{yvuz|}~~}}}}}{}z~{}z}y}w|w}y}x}v}u~t~uuvwy{yyxyzy{~|~{}|}}}|~x~w~y~}~~~}~}{}|||||~}{}}}}~{~zzzyw~w~z}y}w}wyy{{{}~~~}~z~y{}yw~w~x~x~wv~y~{~|~}}}}~~~~~z~}}{zyz{}~~~}~zxut~v~w~xxwxztkefi~q~}~~~~}|{zyxxwy|{zxxwtstwwwxxwvwz{zyxxyz{{{|{xvz}{{|}}}|{{|}}~}|{|}~~yvwyz|~}zusstsrrrstrqqqswy{||{{zyxwvwxxutuwz{zwtrquqit|{wrnntyywuvrmmssrnrw}~~~~}||}}}}{xxwwvuwzxwvvvwwwwwwwvuuttttuuvvvvwxwwxxxxxxxxxxxxxxxxxwwwwxxyyz}z}z|{{{z|z|y|x|w}u}u}v|x{{z|y~y~yy~y~z|{z|w}u~rp~r~w||zxxwwwwxx~y~z}z{{y|x}v~u~sqqr}u}w|x{{z}y~y~y}y|z|z|z|z|z|z|{|{{{z{yyzxzw}v~w{xywyvwvwvxt{t}t~uzvvvuvuvwtzq{q{r{szs|r}r~r}ruqtqxq{q|pzpxpvptpuozoo|ototo|o~p~p~p~qqq~q{psprptpuqwq{r~r|swsususrsososwr|r|rxqtqoqnqqppprqtqwrwrvrsrorpqsqtqtqvqwqxqxqxqvquqvqwpxoxqxzxvw{}w~t~sst}uzvxwxwzx}xxyzyyxxxxx~w}v~wwu{vxx~xy{yvwwvuluzx~y}zywzp|eyo{vunzltots{uvwwwxyxwwwwxxyyyxxxxwww|wxzyxxwwxy{|~~}zxwx~||qlww}qsjmsqsqtuuwxwz|}|{zyyyzz~z}z|{|{}|}{}z~zyyyyzz{{{~{~{~||}y~|~|~|~}~~}|||v}x}z~u~m~g}n}y{|z{zyxxxyyyyz{{}|~{{zz|{ywwvvvuuuuttsssrrrsstvx{zuy{^OJNSUX[]_`bc^ZXUVY\\\\ahd_aioqpqwzzxx{z|~yttuutuvy{}~~~~~}}}}}~}v~h|e}i}m~q~u~s~r~hefk~u|}~~|}x|||n|o}}|~|}|{}|}x}e}e|y|~{|{}||}x}v~w~v~s}n}j}j~k}a}i~x~x~d}e|p{r{k{s{y|z||{{{v}x~z}{~y|kDSSBUnzwy~~|{{{{||||}}}}}}}}|}z}w}~~~{vrsuz|~|~~~~~~~|ywwy~}}~|v{j{i{r|x|}}~}~~}~zyz{z|~}}}|}z~xz~z~y}x}y}{}z}w~t~t~tuvwxyyyyz|}~~~~}}}}~|~y~y~z~{|}}~}~|}}}}}|}}z~y~x~wwxyzzzz~y~w~wyyyyz|~~~~xuz}ww~y~|~{~z~x~{~~~~~}}}}||{yz|{zzzz{|~~~|xtrtxzywuwzukfff~n}~}~~|{zyxxwvx}}{zyyxursuvvxxxxz~{|{yyyzz{{{||yz~~}}}}}}~}}}~~}||}~{yxxxy{{ytrtvvutttrnmllouwwuuyzyxvvwwxvqot{~}{urpmkgbpywroqsuxyxusnhlutrnqv}~~~}|}}}~}zxwvvutuwutuvvvwwwwwwvvuutttuuuuvwwwwxxz{{yxxxxxxxxxxxxxxxwwwxyy~z~z}{|{{{|{z{y|w|u|t|u|v{y{{z}z}z~z~z}{{|z}w~troor}v{|zyxxxwxx~y}z|z{{y|w}tsqomnoq~r|v|zz}z~z|{|{{{{{z{z{zzzz}z|{{|y|xzyy|w|w{vzvzvywwvvvvvxuzuzvyvvvtuuwtvtvvuwuxtzs{s}s{rwryrzryqyqxqxqvpwpzo~oo}oyoxo}o}p|p|q}qqqqq}q}qyqtqvrzr|rysusssssprjrjrtryrzrvrprkrmqqqrqtrvrxrwrsroqoqqqtrurtruruqvqvquqsrrruqxqyqyty~ywwz}v~t~r~st~u|vzwxzyz{y}yyyyxwyyyyw|ryuwwwwxxxtpswtrjvzx}y|zz{|xp~s~wwuts}uvwwwy{~{xwwxxxxxyyyyxxxwwy|{ywwwxy{}~}}|zxwtv~}srywvlnrrspu|wxyz|~~|zzzz{}{|{{{z{z{{{|{}zzyyyyz{{~{}{{{z{v|s}r~y~z~z~{}{|}{|{{}|~wqnm}v||{z~zyxxxyyzzz{||{zzy{zyxwvvwuuuuuttssrrrsstuv}{ruzTMMOSUWZ\\___[WTUVWZY[ehbadknqrtwyxyxz{}~}vsutttuwz|~~}}}~~~~~~~~~}}}~~}}z~k|b}e}i~n~u~y~}~tmi~m~y{|~}~s}q}}}{}s}t}}}}}z}|}}}z}d|t|{}{|}}}v~o~n~m}m}m}nmkpyxi~i}k|d|_|h|l|j{r{z|x~y~y|x}z~wSIKKfuxty~}|{{{{||||}}}}}}}}}x}x}{}~~yssswwx||~~~||zyy~}|~{{{j{f{k|s|y}{}{~|~}~|~{zyy|~~~}}}~|x{|~{}{}}~~}~yutuxywxwxyz|~}~~~~~~~|~{~}|{z{{{{{}~}}}}~}~}}}{~y~w~vvwxxyz{{y~y~wwwwwy~~}~vuy}zz~}~~~~}~{~}~~~~~}|{yyxyz{{{{{{|}}xtssw{||zyy{wqnlj~q}~}|{zyxxxxx{~}|zzzzxurrstvxxyz{||{{zyzz{{|}}||}|}|}~}||~~~}}}~}|zxywxyzyvtw{{zzyvqnmkiinrspowzxvuuvwwsmkry{zxtssqmilx{xtrtuuvz{{ztptupnpsw{}~}|{|}}}|zxxxwxwutssuvvvvwwwwwwwvvuutttttuvwvvwxz{{zxxxxxxxxxxxxxxxxxwwxxyyz~z}{|{|{{|y|v|v|v|w{xz{z}z}z}z}z|{{{z}w~vtqoo~p|v{zz}y~x~xw~x~x~y}z|z{{y{w}trpommmno}s|v|z{|{{{{{||||z{y|xzxy{y{{{}x|x{yzzxzw{v|vzuzwzxwxtxrvrvuvvuvsuuuvswswuwuuvtwuyuytztzs{szswrvrwqxqxpzp|o~o~o}o|ozo}p|q{q{q{q~qqqqqq{qsrtryrzrxrtsrsssqrmrmrsryryrvrprkrnrrqsqurwrxswsrroqrqsqtrururtrsrsqsqsrrrrrvrzs{t{w{zvxy~usr~r}s|uzuxwxyx{yz{zyxyxz|{zyv}put~wwwwxxwrnswtrlxzw~y}z{{{yxxxyxwuvwwwxz{~|ywwxxxxyyzzzyyxww|zwwwxy{}~~}}}}|{zyvurx~~|}vuzzu{oprotwwwxz|~}{{~{{~|{|z|z|y|y{z{|{zzyyyyz{~{}{|{{|x|r|o|n}y~z~y~z}|{}{}{}~uom~s}{|~{zzyxwxxzz~z~z{{{{{{zzyxyxwvvvvvuvvutsqqqrstuty}eOLSVSUXZ]^^\\WTSTWXYY]egbchkortwxxxxyz|}~|yttusstwx{}~~~~|||}~~~~~~~~~}}~}}}||m}c~e~i~n~t~|~~}upp}y|}}w}p}o}{}z}w}y~~~|~{~|~}}}i|r|{{||z}j~^~`}h~j~n~prstolj~k}j}d|d}g}c|_|]|n}y}z}y|x}z}xhFFZwrkrx~}|~||~|~|}}}}}}}}}}~~}~y}x}|}~zvuuvvw{{|~~}}}z~z}||~|y|k|c|k}r}x~r~lov|~~~{~{~|~~~}}}~~z||~}}}}}}~z~utwz{ywvwy{~|}~~~~~}~|~|~||{{{{zz{|~}}|}z}y}x~xxxyz~|~|zxz{zz~y~xvttux}~~z~vy}{|~~~~~~|~~~~~~}}|||}}}|{{{|~}xsvz|~~~{z{|xtqpk~s}~zyyyxxwxxy{~}zzyyzwtrqrtvwyzz{{{|{zyyzz{||}|yy{{|}~}{|~~~~~}~~}}{yyzzyyyxwz{{zzzvqnpngeipwtttvvtstttsqnmqvvuux{zxwuruwy{vqnmnrsrvzxvuqrsuxz|~}}{|}}||{yz|{zxusssuvvvvwwwwwwwvvvuuttttuvwvvwx{||{yxxxxxxxxyyyyyy~y~y~xxyyyyyyz~{~{}{|{{{z{z{z{{z|z}z~z~{~{}{{{z|y}xvtrpo~n|p{tzwy{y}x~x}y}z|y|y|zzzx}v~s~r~qpoonm~o~p~u}x}y{|{}|}{{|y}w{v{wzw{x|x}x|xzxyyxywywyvzw|x|yyyuxtwtvtuuswsytyvvwtxuwtwswswsxtwwvyuxtwtwsxrzq}p~p}p|o{o|o}o}p|pzqyqxqzq}qrrrrr}rtrprvryrvrqsqsssurvrvrwryryrwrussttstssstsvswsxstsrrtqururururtrrrprprqrtsvtzt}u~x}}}{wxw~ts}qvr{s{uzuytvvu~z||uyxy{}}x~zvkutxyxxxxwtrw}y{v|t}u|zxxz{{|{zzyyyxwwxxxxz{}|yxwwxxxyz{{{zyyxy~{xwxyz{|~|{{||{zxvrqp}{y|~{{{yv~sttsu{xyy{}~{||}|||{|z|{|{|y|x{x{{{~zzyyy}z{{z{z{{{{|x}r|l|j~v~xy~z}{{|~}snk~u}{zzzyxxxyz~{|{}{~{{{{~{z{{zyyyyxwvvvvvuvvutsqqqrrsssr[MQVUTVYZ\\[ZURQSVXXY`fcdhkjlqtvxyxxxz|}~}xutvvtsuxz}~~}}}|||~~~~~~~~~~~~~}}||}o}g~l~l~n}u}}}~}yx~y~~~s~n}t}{~{~{~{~}~|~|~~~~}}q|u|{{{}n}R}N~W~a~fkppnjddh~j}l}m|n}m~h}a}Y}d}{}~|}|y}yywmNRqubclv~|}~|}~}~}}}}~}}}}~|~y~{~}~}}~}|~{|||{zyvy}||~~~~~{~z}|}~}}|k|`|j}w~|~rc]bjrw~z~|~~~}}}~~}|~~~}}}}}~x~wz~~|xuwy~|~}}~~~~~}|{{{zzzxxyz~{|y|w|v|u}v~x{~~~}yxyyz~{~ytrruy~}}~}~|||}~~~~~~~~~~~~~~~~~~}zyz{|~}z}~}}|{ywwwrw{xxxyyywwwy|~}|yxx~y~ywusrstuwxyyzz{|||zzz{{|||{ywxz|}}}||~~~~}}||||~}zyxxyzzyxxxuqonhcbdmwywonrrqpoprsqruwxz}~|zwutpqvyyrnmmnnpsx}{yuwzz{{|}~~~}~|}||{zyy{~~|ywuuvwvvvvwwwwwwwvvvuuttttuvwvvwx{|{zxxxxxxxxyyyyyy}z{z{z{z|z~zzzyyyzzzz{{~z~z~z}z~z~z~z~{{~{}{|{{|z~yxvtqn~m}p{tzyz|y|y|z|z|y|y|y{yz{x|v|u}t}t~r~q~p~n~o}q|v|z{{z}z~z}|{|y~v~t}t}s|t|t}v|wzxyyxzxywxvyw{w~x}xzwwvvvvtvrxrzs|uzwxxxwwwuxtyszqzqyrxsvuuuswrzqpp~p|p{o|o}p|pzqyqxrwrxr{r~rrr~r}r}rxrsrwrzrvrqrqstsususwszrzrxrwswuwvvvuututtuuxuzsxrvrvrurtrururtrsrqrpsrswt|t~t~vz~~}yxw~u~s{rssxt|v~u}swjrxw}zyxy|zt|gpwzpyuxyyyxxyxwx{yxy{y}y{yxxyz{{zzzzyyxxxxxxxyzz|zxwwwwxyz{||{zyz||yxyyyz{}|zzzz{zywtrpr|zy|~~}||{{y}wxv{w~yyz|~~}|}}|{|||}|||{|z|w|z{|{z{{z}zyy~zz{y{z{{{{|x}q|l|k~uwxz~||{}}upk~v|{zz|zyyyyz~{{|z|||}||||}|x{{zyyyyxwvvvvvuvuutsqqqrrrrsiQORSSVWXYYWURRQTWXZ^egeehlmptvvwxxxz{}|~|vtsuussux{~~~}}}}}}~~~~~~~~}|{{|x~s~u~q}r}w}}}}~~{w}~t~u}u}n~t~xx~x~z~~~~~}~}w|x{{{{|r}]}U}Y~^~^~dgca\\W\\f}p|p|o}o~o~j~d~f~n}}}||}}z~vnkdg~lT[kv~z}z}z}z}{}}}~}}}~~}yvy||||~{~y~y{|}zwsmox~~~||y~x~z}}}n}`}j~vxpbTXdou~x~{~~~~}}}~}}~~}}}}~~z~z~}~{wuw~y~}~~}~~~~~}||{zyxxxwvu}u|u|t|s|s}r~ty~~~~zvuutu~x~z~wtsvz~~~}{~|~}~}~|~~}}}}}}~~~~~~~~~}}~~~~~yuvxzz|~}|~}|||{zyxzw{|}{yyzzzywuvwz|}|{zyz}z}zywustuvwwxxyy{|}}{zz|||{zzzyyz{{{~}~~~}||}}}}}|{zyxxxyxwutttuuphehhpy}ujflqpkjkosssvurrx{zuqqrsw{|wrpqttsv|~}{zz{ytqsxz}}~}}||{zxusuy}|zyyyyyyvvvvwwwwwwwwvvvuuttuuuvvwwxz{zyxwwxxxxxyyyyy~y}zz{y{xzyz{z}zzyyyyyyzzzzzzzzzz{{~{}{}{}{||{}ywtrq~r}t|w|y{zz{z{{z{{z{z|y|z{zy{z{y{x{x|w|u|s}r|tzvx{wvxy~y}z}|{~xusq~q}r~s|u{vzyy{y{x{vzv{vuv|uzuyuztxqxpypzr{t{u|u|u{uyvwxtxswswtuwtxszr|qqpp}p|o|o|p{qyqxrxrwrwryr}rr~r|rzrzr{rzr{r{rwrsrpsqtststws{r{rxswtwvvwuxuxtwtvuvxuzsyrwrwrurprqrsrtrurtsttvtzu~tuwz~~zyw|u{ttytyv~xwt~o{vx|}yyyyyvz`~cnyzy{xzwwyyyxyyyww}x{z}z~zyxxxyzzzzzzzzyxxyyyxxyyz~ywwwwxy{|}}|{y{}}zzzzzz{|~~{yxxyyyxvtrpuyzz{|}|{{z}zyyyx}xyz|~~|{|~~||||~||~|}|z|x|{||{{v{zzzyz{|{|{|{{|y|t|p|p~xxyz|~|z|}~ytq}y{zyzzzyyz{||}{}{}|}}}~||}|z|}zyxyyxwwvvvvuvuussrrrqqqqp`LQPOT\\XVVUTPOQRUVZ]dfeeeinqsuuvvxyy{|||}ysrrssrsvy{~~}||}}}}}}}}~~~~}|{{|}~|~{~v}u}t}x}y}~~|x~{~~}w}~}s}b~n~tq~r~{~~~~}~}|||{{{{|~}x}c}[}\\}S~Z\\[ZUNWt}||q}q~lgfq~}}}|||}~y~rprowgU]px~x}s}p~p}p}t}}}~~ztsvwwvvvz|{{zwrkddr}}~zxx~x~z~}~~r~c~glql]Xbsyw~y~{~}~~}}}}~~~~}||~}}}}}~}|~|~}~~~{vux~y~}~~}~~~~~}||{zyxwxxu~s}s}t|u|t|r|q}ot}~|yuttrml~p~v~yxvx{|~y}x}z~{~{~|~~}}~~~}}~~}~|~|~|~|~|~{~{~z~{~~~}wsvyyxyz{{{~||{|}}|zxxx{{|z{zzyxvsstuwyyyyyz{~{}{~zyxwwvwvwwwxxz{|}{{{|{{zz{{|}}||{}~~~~~~~~~~}}||}~~}|{yxwwwvwvustuvxywqqxux{~uibhpogde~jnrsrpnmmsvrppswy|}ytruyvuy}}yxz~vjbdnw||}|{{{zyvqorvyyy{||{{zvvvvwwwwvvvvwvvvuuuuuuvvwxxxyxxxwwxxxxxyyyy~yy~z{{x{wzxzyz|zzyyyxyyyyyzzzzzzzzz~z}z}z}z}{}|{}x~vut~t~t}v}w|y{y{y|y|yzzy}y}y{yzy|y|y{yzzy{w{v|u}u|v|w|zz|y|x{w{x|z||yvsr~r}q~r~s~s}t|wz|x~wvtss~s}s}s~r}p|nzo{q{s{t|s}s}s{sztytwtvtxs{r|r}r~qqpp~p}o|o|p{qyqxryrxrvrxr|r~r}r|r{r{r|r}r}r|rzrxrusutvtutws{szswtwuvwuxuyuytyuxvvwswrwrwrxrsrkrlrprqrrsttzt|u}u~u~u~vy}}{}zxyxywx}x~xyxwvw{y}yy~y~yxg~kvsx}wzuzwxxxxyyyxxyyzzzyyxxyzzzz{{{zzyyyyyyxwxz{~{xwwwxz{}~~}{y{}~|zz{{{{|}~~|zxwwwxxwusoluyzz{|||{{z~zvyvx~xyz}{yy{}{{||||||{|x|v|x|||{{zzzz{{{{~||{z{y{y}zyywv~|z{~}|~z}x||{zyyz{zy{{}~~}~|~z~z~z}|}|{|zzyxxyxwwwvvvusrrrrrrrqrqogYPROTYWUTSRRPQSSTV_dfdcdgkpsuvvuvwy{}}|{{urpqrqrswz{~~}|}}}}~}}}}~~~~}|{{|~~~{~w}n}q}s}|}~~z{~z~z|~||}}v}x~qf~o~~~~}~~}}}}|~{{{{|}}p}^}R}N~WU[^YOV}|{|z|v~qmmv~{~~}|||}~~{xvrpgcet{~y}l~jj~i~h~r}}}~xttx|ysrw{wttrvqjhap|zzu~|qw{|}wjfl|qbbhuswy~{~|~|~}}~}~}}~~~|{~{}}}}}}}|~|~|~}~|wv~x~z~~~}~~~}||{zzyyz|~x}w}z}w}x}x}u}x}p~p~}{vvvutrpn~o}u}{~}{zzw~u}w}y~y~z~{~~~~~~~~~~z~x~v~v~w~x~w~xy{~~}xvy{ywwxz|~{yzz{|}~}{yxyyy|~~|zyxurqttuuutuwxz{~{}{|~|{zxvvwwxxwxy{}}}}|{zzz|~~}}|}~}|{{~{~}~~~~~}|{{{|}}|zwusssstutttvx{u|{|{~|{{{umfjqpihkrttqrrrrpszuoqstvyz{zz{yssy}~zxx}~wk`_kw{}}zzzzyzxsqsuvxz|}~~|{vvvvvvvvvvwwwwvvvvuuuuvvvwwxxwwwwwxxxxxyyy~y~zzz}zzzyzzz{z}zyyxxyyyyyyz{{zzzzzz~z}y}y}z}z~{}||}{~y~y~xwv~v~v}w}x}x~v|u{yz|z}y~y~z}y{yzyyzyzx{w|u}t}s|t|s|r{r{s{s|t|t}t}t}t}t}t~r~q~o~n~o}r{uzwwyt{s|r}r}r~rp~n~m}m}n}q|q}r~q~q|q|r|r{rzryqzq{r~rrqqp~o}o|p|p{qzrzr{rzryrzr|r}r}r}r|r}r~r~r~rr~r|s{tztxtvtututttsusvswsxvywyvxvwwvxtwrvqvrwrvrrrrrrrlsgsktwu|u}u}u}u}v}y}}{|zxwyuvwvxy|yzzyz~xxyyy~y|y{y{v}jt}v~y|t{t~wwxxxyyyyxyz{zzzyyxyzzz{{{{{zyyyyyyyyxzz||xvwwxz|~~}zy{{zz{{{{{|}zz{zxwvvvwwvuqppyy}zzz|~|~|~{zz~yuxvxyz|}wvvz}{{{||||||||u|||}|{{zzzz{{{{{{{~||}{zywt|~|zz|||~{zzyyzzzy{{}~~{wtt~w||zyyxxxy{xyxzwwvvuuusqrrrrsrrplaUPSTWVRRQQPOPRSSU\\dieabfjnqsuvvuvxz|}}|{xrpopqqrtwz|~~}|}|}}}~~~~~~~}|{{|{~~s~k}s}x|z|~}~~{~|~|}}|||}~~x~m}w}}~}~{~|}}||{{{{{|}{}i~U~W~\\Yag^SY~|{{~||}|~{xs~q~y}}}||}~}zwogdghs~w~u~ggig~`~R}i}~~~~}~zttywmhlnqnlngqxuqht{tx|}}|{rhjywrokpny{~|~|~|~|~}~~~~~~}|y~z}|}~}~}~}|~|~|~|~|~|~y~x~y~{~~~~~}||{{{{{{|~~}{}y}{~{~{~{~{~~~z~y~zuxvsqtw~w~t}x|~}~~}zu}v}z}{~z~z~{~|~~~~~z~v~t~r~s~u~w~w~uy}~~|xwz{xwwxz||||zyz{||}}|zyy{zyy|}|zyxuqqttutspqsvyyz|~|xvuvxxxwwxz|}~~}|zyz{}~~~}}}|||{{~{~~}}~~}|{zz{||{zxuspooopsuusvxocluyy~{{zyxtprtsnmpwwwvvtqomlrrpuvqsxzxwwzyzzz}}zxx}~yqhaiwz||yxxxyzzxuutuwz}~~}{{wvvvvvvvvwwwwwwvvvvuuuvuvwwwwwwwwwwwwxxxxy~y~zzy~y}z}y~zzyxxxxyyyyyyz{{zyyzzzz~y}y}y}z~z{|}|~{ywutu~v}y}|~x~t~s|v{yz{z|z{zzzyyyzyzy{y|x}v}t|s}r}q~p}q|p{qzszs{u{w{x{x|v}u}r}p~o~o}o|qyrvttwtzs{s|r}p}m}l}l}n}o}p}r}q}q}p|q|q}q|qzqwqxr|rrrqp~o}o|p|p|q|r|r~rr~r|r{q|r}r}r}r~rrrrrr~s|sxtstrtptototpurvswtxwywyvwwuztzswrururusvswrxrwsnsesitwu}u}u{u{u{v}y~~~}{zxxvxtrormxyyxzvz|yyy|y}z~y~z~y~vu}|r~z}z}yyyyyyxyyyxyzzzzzzyyyzz{{{{{{zzyzzzzzzz{~{}{xwwwxy{~{yyz{{{{||||}|yyywuuuuvuusqmv||zzz{|}w}v|xz|yyyx{yy{}{tsux|{z{{{{|}}|}y}u}v|t||{{zzz{{{{{{{|||z~z~{{x{zzz{{{{zzyyzyyy{{}~}{vpp}vzxwxxxxy{xvxuw{vvuuuxvsrrrrrrpog[RQTWUQPPPONOPQSV\\chga_eimprrtuuvwxz|||{ytponpqrrtwz|~}||}|}~~~~~~~~~~~~}|}}}}{~y~p}t}x|z|~}~}|}|}}}}}~~~~~{~|~~}~{~y~|}}|{{{{{{{}}y~j~b~`\\hldZ]}{||||}}~~u~p~x}~}||}|~zyvkbcllp~s~o~cfihd~W}j|}}}~~~~~|ywwna^jnponsmv{uogenz{||{{}ximnqqeg}~~}~}~}}}~}~}~~~~~~~{y~z}|}}}~}}~}~{~z~y~y~y~y~z~|~~~~~|{{z{||}~}~}~}~}{}y~yvqpv~}~~~~~zxzx~pnsy~z}z|{|~}~~|~y~u}w|{|{}{}|~{~|~|~||~~{~u}q}q~s~u~w~y~y~w~x{|||zxyyyyzz|~}wvxx{}|{{|{yy{yyzzyyyywttuvuttqqqswxy{~{wuuvwxxwwwyz|~~~|{zz{}~~}}}}|||{{~}~}}}~~~}{yyz{||{yxwwusqqqvxvoqukZXivy|zyyyxxxvtqlkktvz}yrnknosuvurpnrutojgdm{z{{zz|}ywtkou{{|ywwxxz{zwurqv{}}|{zywwwwvvvwwwwwwwwwvvvvuuvvvwwwwwwwwwwwxxxxxx~y~z~z~y~yyyyyxxxxxyyyyyz{|{~{zzzzzz~y}y~y~y~z~{~|}}{~ywtrrst~w}|}{}w}s}r|t{u{wzxzzzyzzzz{z{z|z|z}y|y{x{w{vzwzwyvxwxxxxxyyyyzzz{{{y|w|v}s}r}r{sztxuxwwxuzszr{p{n|m|n|o|p|r{szrzrzr|r|r|r{szszr}q~rrqpo}o{p{q|r}r~ssss|r{q{q|q}r}r~rrsssrr|sutotntntntouqutvuwtxuyuxuwwu|t}sysvstsrsrstsusyswsosrt{u|u{uxuwuzv}y~~~|~zywxtxsrlqhw{xzzvzzz~zyytyxz}zzyyyzsmx{yyyyyyyyyyyz{zzzzzyyyzz{{{{{zzyzzzzzz{{|~}{xwxwxy{~|z|}~||}||}|y|x|{}{yxwutttttsrqq{{{{{zz{{}u}q|szyyy~yyyzwqpsw{{~{~{~||}{}|}{}x~vz}|}|}w|}|~{{zz{{{{{{|||{|y}z|}}}{yyz{{{{{zzyyyxxz{}~~|~|}yon|xzwuvwxxyyyxxvw}vuuuuxxtrrrrrsog]VQRSRPRSPNNMNPSW^cffc^cilnprrstuvwyz{{{yuqnmnprsqsvy{}|{|}|}~~~~~~~~~~~}|}}}|||zyx~t}u}w}~~~~~~}}|}|}|~~~}~}~}~|~{~{~}|{{{{{{{}}}{}n~iafmkde}n|m|n|v}|}}~~}}{}~}}|~||}z~|{riekqkg~n~pgkkhk~z||~|~}~}~|~~}~{uh[Znvtrqtv}yvr]cz{{{yz|xhYThros~~~}~}}}}~}~~}}}}}~~}~{~{~|}}}~~~~}|~y~x~y}z}z}|}}~~~~~~|zyyz{|}~~}~}~}~}~{wtngfnw~{}{}z~z~{~{x~q~otx~z}||~||}}~|~x~w}z||||}~}~~|~v~stx{~}~x~s}r}r}t}w~x~x~|~z~y~||}~}|{zy{{|~~~~}wv~x~y~z{ywyzzyz~~}~~~~zyxy{|ywwvutsrrrsuwxz}~zusuwwxxyyyyz|}~}|{z{{|}}}}}||||||~}~~~~~~zxwy{{{{yyyxyzzxv{zvklsuhXcz~|{{yxxyxvqkffhtw|xoloqnmswtprmkpplfdgjy{{zy{|~{vw|xxx{||ywwxxz{{yumjryxwxxxxwxxxwwwxxxwwwwwwwwvvvvvvvwwwwwwwwwwxxxxxxx~y}z}z|y|y~yxxxxxxxyyyyyyz~{~{~{~{~zzzzzzy~y~y~y}z}{|{{}y}w~utrqqrtw~y|y|x|x|w{w{xzyzzz{{z{{{z{z}z}{}{|{{zzzyzxzxzwywxwywywywzx{x|x{x{yzyyzx|w|v|u{uzuzuzvyvxwwwtys{q}p~p~p|r{ryryryr|r|r|r{u{t|r}qqqqqp}p{p{q{r}s~ss~s~s|r{r{q|q}r}r~sssssrr}swtrtototpurutuvvuwtxtytxsvstws|s{swstspspsqsrsxs{sysxt{uzuxuvuvuyw|z~}||zywxtwstqtxx}z{zwzyz|z{zzzz{~zzzyywqs}wzyyyyyyyyyyzzz{{{{{zzzzzzzzzzzzzzzzzzz{{{||{xwxxxy{}~|~}~{}}|||{}u}t|{}{yxvtsssrrqqpsx|t{x{{yy{{}u}p}s{yy~yyzzzytoosw~{{|{}|||z}y}z}v~rt{~}~~~w}y|{|{{{{{{{{{||~}z}x}z|}|{yyyyz{{||{zyyyxxyz|}{|~{}q~p|xzxuuvwxyyyyyxxw~uutttww~urrrrrsk[RQPQPPORRPNMNOPU[aegc]`imlnqrruvvwxyz{{ywpmkklpqsqruxz|{|}}|}~~~~~~~~}}}}}}|{skrtz~}|~|}z}z}z|}}~}|~|~~~}~|}}}}|{{{{{{{|}}|}~wdfnqq}q|p|m|h|n}{}}~~}}}~}}~|~|{}{~|riiqtl_~k~p~ooni~n}|{||~~z~{~}~}~zth\\^rytqqtzzxr`fww~|~|wy{zk[_ksw|~~~}~}}}}}}}}}~}}}}}}~~}~|~}~~}}~}~}|~z~y~y}z}|}~}~~~~|zyxz{|~}}}}}~~{wqliiox~|~{}z}|}~}}}x}s~r~u~y}{|}|~|~|}|{}x~v~x}}}~}}~}~}}{~s~mqu~t~w~x~v}x}y}y}{}y~z~~~{~z~{~{}~~}|zxzz|~{~zzzy~y~z~zyvuwxyxz~{~~}z~{~}~zwutttsrsrstuwy{}~ytrtwvwyzzyyz{}}}||{{{{|}}}||||||~|~|~}~~~}~~~}xuwyz{{zzzxwwsptxz|ohlr|zko||||zwvxxuphfgpyy}ypnrwvttsnhhgdegmqsruvyyxwy{|zwy{|yyz{{{yxxyz||{vmhkommpsxyx~x~x~x~x~x~xxxxxwwwxwwwvvvvwwwxxwwwxxxxxxxxxxxx~y}z|z{zzy{y}xxxxxyyyzzzzzz~{}{}|}||{}z}zzzzyyzz~z}z}{||{}z~xwsqppprt}y||{}z|z|z|y}z~{~|}}|~z~yyz~{}|||z|y}x}w|v{v{v{uzvzvzw{w{w|x}x|x|yz{w{v|u|u|u|t}t}t|t{txuwvuwuwsxrxpypxqzrzs|s|t{uyw|ur~r~rrrrq}p|q{r{s|s}s~t~t~t|s{r{q{q}r}r~r~ssssss~s{tttototquvuxvwvvwtytyswrvqtuszs|szsvsrspsosnsvtxtwtwuwuvuvuuuutyv}z~}{|zywxuxuwwy~{{}{{{{{}{~{}{}{~{zzyxwtvxz~yyyzzzzzzzzzz{|{{{zzzzzzz{{{{{{{{{{{{{z{z|}~}wxwxz{~~}|}|z}s~q}{}}zwutsrrqppoppv}v{~zyy{|}x}t}v||z}yz{~{~|~uolnrw|z{{||||~{~z~v~s~osy~|~|~v~t}z|~{{{{{{{{|}}}~z~x}{|~{{zyyyz{|}w}s|u|y{}yyxyz{|{}z{xx|zy|v{yyvuuwx}xzxywzwvtssttvusrqqrn`RNNOOOORQNMMNNPT[adddZ^emnnoqrtvvwwxy{{zxsmkijloprpqsvx{||||{}~~~~~~}}}}}~~|tlqv|{{{vutu~u~uwxwyyx~{~}}}|~||{|~{~{{{{|}~}~}}|~k~j~r~y}z||||~|u|x}z}~}~}}}~}|}}}}|~|}~upqw~v~m~g~g~f~nsrm~r}{{||{~x~~~~~~~{wrmggx~uo~p~s~|~|zsdj~x~}}}~~~z~{}xqqstx~}}}~|~|~}}}~}}||}}}~~~}~}~}~}~~~}~~|~|~|}}}}}~~~~}{{zz{|~}}~}}}~~{vrmkmsz~}}|}{}|}|~}{}w}u~w~z}||}|}{}{y|t}s}u}x}x}x~w~z~~~~y~r~ors~p~t~|~}~}~}~}}}~~~~~~{~z~y~z|}}}zvvy|~x~w~z{{{zxusruxyy{~zx|~~~~~}~|zwrpquvsqsuuttvxz|~~ztqtvuvxyz{{{{}}}|||{{{||}||||||{~{~{~}~~~}}{{||xsqtxzzzzzzxum]\\my|zidoxz{}|}{srwvrmiimsz|}zlgsz|zvokhgec[Tdt{{xrsvvvwwz{{||}|{||}|{yxy{|}}{wsokgdgnx|x}x|x|x|y|y|y}yy~y~y~yxxxxxwvvvwwwxxyxxxxxxxxxxxxxyy~y}y|z{y{yzy{x|xxxyzyzzzzzz~z}{}{||||{{{z{z~zzzyyzzzz{|~|}}|~yurponnpt|x{{y|y}y~yz||~~|zxxxy{}|{|z}y~x}w|w{wzvyvyvyxzx{x{x|x}x|xzyyzwzv{v|v}u~u}t}s|s{s{tysysxsvtsvpyq|r|s}t|w|y|y}t~q~r~rrrr~r}q|r{s{s|s|s}t}u}u|t{rzq{q|r}r}r~r~r~rs~s~t~t|tuunumuquuvwvwwuxsxsxrvrursuryr{szsxswsxs|sytxtwtuttutuuuwuwtxt{u}z}|{}yyxxuxtxvz}{~|~||{{{~{}{{zzyyywxxz{yyzzzzzzzzzzzz||{{zzzzzz{|||||||||||{zzzy{xy|vww~y~{~~}|}}{}}||}|}v|{}}zvutsrqpponpr~z|}{yxz~|z~}~{}}|zz{~|~|~yplkmsx{{z}{~|~~~~y~r~svx~y~y~v~y}~||~{}{}{~{{~{{|~~|yx}}{{zzzzz{||}l~a}c}g|sz~yxyz{~|y{}yvuwzwztxvuuvwxwzwyvutttttuutrqpodVNMNNNOPQMLLMNRTX[^]df]bjpnoprttvvwwxz{{ytojihjknpqopruw{|||{|~~~~~~~}}}}}}~{vqrwxu|~yrollnqrpqrq~v}|}}}}}|}||t|f|p|y|~|{|~|~}}}z}q}r}u}||~||||z|y}y}{}}}}}}}||}|~|}~~~~z~y~w~w~x}w}j}^}m~y~z}y|z||||}}z~{}}}qhfmtu}{uqvx~}~~}ztjp~z}}}}~}~~~zvqv}}~|}}}}}}~}~}}||}}}~~~~|~{~|~}~}}~}~~~~~}}}~}}}~~}|||~~~}}}}~}}~}~{wspoqv|~}~}}}}|}|{}y}w}w~x~{}}||||{z{t|m|n}t}v}s~rrtx~y~v~ssuu~t~z~~}}}}}~~}|~{~{~|~|{~|su~y~|~{~{~{{||zxtqqv{{zz}|xx{~~~~}~}x~tsn}i}n~x|xsrtsrsuwyz{|}yttutvvvvvxyz|}}|}|{{{{|||||||{{~{|}~|ywxyyvsswxxxyyz|{lWYly}{kit}{}~}yqhluvsnjjmpv{yxxolswyyuljnmlj_Tftzzvibgkpuxz|~~~~~}}}~}|zxy{}~~}}{tnheipz~x}x|xzyzyzyzzzz|z|z|{|z~zyxxxwvvwwwxxyyyyyxxxxxyyyxyzy~x~x~y}y|y{y{y|z|{||}|}|~{zy~zzzz~z}{}{||{|z{z{zz|z~z~z}z|z}z}z~z~z{~|~{~|}}{wsqonmmpt~w|z{{z}z~z~{~|}}{ywwwxy~{}{{}z}y}x|x{xzwywyxyyyyzxzxzw{w{x|y{y{yyyxzxzw{w{v|t{t{uzt{tztyswttusxs{s{s|u|x~{zt}q|s~s~ssss~r}s|s{s{s|s|s{u{u|t{r{q{q{r|r|r|q|r}r~s~t~u~u|utunumvpvuvwwvxsxqwqvrtsstqvqxqxrxsxsxsys|t{t|uyuwuvuvuwuyuytzs|u~{}zy~zyyxwxwyzz{{|{{{{{{{zzyyyyyyyzyzzz{{{{zzzzzz{{{{zzzzz{|}}||||}}}}|z|y}y}yy{xy}tu~w~z~{~~~~}|{|~~||}}||{}}zvtsrqqoonnqx~~{yyz||y~~}|{{~|||}}umkiltz{}y~{{}}}z}r}s~wz~|~|~{}|||{~{}{}{{{{{|~{vsx~|{{{{{zz|}s~e~Y~]}r{yxyzzz~yxvvxx}x~vuuuuvww}v|utttrtst|tuusrqnfYPMNNMMOOMKLKLPX[XUYbibaemqnpqtuvvvwwxy{zvplgggijmnnnpswx{{{{{}~~~~~~}}}}}}|{vtuwuqx|xogfejmlfkos~x}~}}}}{|~||a}K}a}n}t|{{~|}|{|{|z|x|v}v}v}x|}|}}x}s}v}w}{}}~}}}~}}}||{|{}}~~~~~~~{~x~y}|}p}g}t}}||||}}~~||xsx|vkjjv||{zqpq~w~~~|xqu{~y}v}v}{~}~~zrlrxwu~~~~~}~~~~}}}}}}}~~~~|~{{{~|~}}~}}}}}}}}}~}~~~}}~~~|}{}|}}}~}}~|yvtsvz}~}}~|||y|v}t}t}v~y}{}||z|z{x{s{m|o}v}w~x~w~trstttvwwz~~~~}}}}~}}}~~~~|}~~~~~~~}~z{{x~y~{~{}z}z~z~{{{zxvtxzywwwzzx}~~~~}|}s}r~v}q|j{p|}~|vrqppqrtvxyz}|vttstsrqrtwz|}}}}|{{{{{|||||{{{{|}~}{xtsw{yvtuvvvxy{tccmw}{sry~}~~~xnnpuvtleaaityvsrqsuuwxvmnwuplgerzyxufX[epuwz|}~~~~}}}~}|zyz}}|||ysnnsw}x}x|yzyyyyyxzxzz{z{z|{{}{zxxxwwwwwxxxyyy~yyyyyyyyyyyzzzyyyyy}z{{z~xvtsuz}}{}z~zyy~z}z}{|{|{{{zzzzzzzzzzyzxzxzx{x{y{z{{{|{{{{|y}w~usrqomort~w}x|z{{{{{|{{|{~yxwwwxy~z|{{{z|y|y{yzxyxyxyyyzyzxzxzyxzyzxyyyyyxzxyyxywzvzuzuzvzwzvztysxtxuwwvxuyuyvzw}zzt}r|s}s}t~ttst~t}s|s{s{s{sztzt{s{rzq{r{r{rzrzq{r|r}s}u|u|uzuuuququuuxvywwwswqvrtsstqvpvpvpvqwswswsxtzt|t|u|u|u{uytyuytzs{r|u|{{xw~zzzxzx|yz{{{{{{{{{{zzzzzzzyyzzzz{}{w{z{{{z}z{z|zxzv{}{{{zzz{{|}}}}|~|~|~}}}}|{{uzt{u{z||}|{ss~w~z}{}}}}|{{z|~|z~||}}{{}{yvsrqqponnnqv~~|{{|}~}}|~}~}|~|{|||zrmkglx~}z~{}|{|}}{}o}p~v}~~}||}|{{{{{{{{{|~zsln{}||{{{{y{|~}s}T}c|zyxxyyyxwxxywwvuuuuuvvutttztetktwt|u}tsrpjZQMMNMLLMMJLNKIS_VRU]fhabgnqnpsuuvvvwwxyzvqkgefgiiiikmqtwyzzz{|~~~}}~~}}}}}||{uvuqrpq{xldfgmdeZ]m~u~z}}}}}~}|}x}e}`~h~r}v}y||{s{m|r|u|x|y|u}t}t}y~{}~}u~x~|}}}{}}|}{}{}{}z}y}t}s}v~z}~~~}~|~z~x}z}y}x}v|{|}|{~{|||}{~yusssuxyvmift|}}wmkt~}}~}wyw~t|p|r}x~{~|yupmstsv~y~q~y}}}}}}}}}}~~~~|{zyz~{~}}}}}}}}~}}~~~~}~}~~}}{}z}{}}}}}~~~{ywwy{~~}}|||x|u}s}u}x~z}|}|}z|y|w{u{q|v}{}|~~~z~usrstuvwxy~z~{~|}|}}}~}}~~~}~z~{~|~~~~}~y~wz~|~}~|~z}x}x}x~yzzzyz{~xpmoqvuw|~~~~~}y}r~u~{~y}t|x|}~wrpooopqstvwyxwuststssrsuy{}}}}|{{{{{{{{{{{{zz{}~~}}|ysoqtuv~v~t~ttvxz|{qfdpzyyz}}~}~{rqtlkpmhd^htxtpnrtusrvyxz{wpihmtwzysla_jsvxy{}}}}|{{|||{z{{}~}zz|{xttvz}x}x|y{zyyyyxzxzz{z{{{{{}{~zyxxwwwwxxxyyy~y~y~yyyyyyyyyzz{{zzzzz}{|}zvronosy}|zzyyy~y}z}z}{|{|{{{{{z{y{wzvztztzuzvzwzvzvzvzw{v{w|w{v{v|u~sqnnoqs~v}w|y|y{z{z|y}x}x~xxxx~y}y}y|z{zzzzzzyyyzxyxywyxyyvzu{v{w{w{w{v|v|v{wywwwvwxvzuztyvvxsytztzuyuxvvwvyv{u{t|r|r}s}t}t~ttttt}t|t{t{t{s{tztysxryrzr{rzryryrzr{s|t{uzuyuyuxuwtxu{u}u|vywuwsusstruqvpupupuqususvtwtyt{u|u}u|u|tytwtwtwsyrzuz}ytu~zz|x}yzz{{{{{{{{{{{{{{{{{zzy{~{{}{s{u{{{{{z{{{{|z|}{{{{{|||}}}}|~|~}}}}}~}||y{xz{zzz{qotx}y||||{zzyyzz|{||~}{{}zxusqqpponnosx}}}|{|}~}~~}y~x~|}}}|~~woljho|}~z~|}}~||||~|v|w}{~}}||{{{{{{{{{{|}}{us{}||||{{yz{||s|x{yyxxxyyxwwxxwwvuuuuuuuutttt{tutytzt|t{sro`OLLMMLLKKKKNPLNYVTTZaggceioqoruvvvvvwwxxxrkfbdeghgggkosvxxyz{|~~}~~~}|}}}|{|splfnrnzxlqzrkd\\QV~m~v}x}z}~~~~}~|}z}t~nq~s~w~x}x|t{ez\\{d{n{z{{|s}p}q~w~w~t~r~~~}~}y}~}|}}}{}y}u~r~m~l~o~v~z|~|~{}z}y}y}z}z}w}x|y{}{~||}{~zvmjoy|}|ytpbeq~zywsqw}||}~}yyq~o|o|q}t~y~~~zvqllrz~~{~p}s}|}}}}}}}~~~~}{zyyz~|}}||||}}}~~~|~{~|}}}}|}{}{}}}~}~}zzyz|~~}}}||}}}~}|}}}~~}}}}{}{|z|x|w}{}}~}|~y~x~x~v~t~u~v~v~w~y~z~z~{~|}|}|}|}}~~~}~|~|~|~|~}~}~{~{~}~~~~~|~z}x}v}u~wxyyy{sihlpwvx|~~~~y~tw{~}~~~~}~~xrppopopprtuvwwusstwxwsruz|}}}|||{||||{{{zzzzz{}}}}}{ytooprv~w~t~s~tx|~~~u_Ueqwy}~~}}~~~~~vvypjosrqnosusqprtvvw|{yz{xrkcbfkwxqpjgkqwxyz{{{{zzz{{{zz{||||{xyz{zwwxz|}x~x}y|z{yzyzzzz{z|z|z|z}z~zyyyxxxxxxyyyy~y~y~yyyyyyyyzz{|~|}{}{}{}{}{}||}zwsomlmux|}zyxyy~y~z~{~{}{}{}||{{{yzwyvyvyvzvzwzwzwywzxzxzyzyzzyzzz{xuqonopsu~w}w}w|x|x|x|x}y}y~y~x~xw~w~w}x|y|x|x{x{xzwyxyxwzu{s|t}t~u~ut~u~u|uzuxuwuzr|o|m{mvnsosqtsutvtvuwtyqyqzu|vts~t~t~tttu~u}t|t{t|t|t|v{vyswrwsyszs{szryszsytyuxuwuvtxtytzt{t~uu~uzvwvuuusvrvqvpuptqtrtsttutvtxuzv{vzuztytvttssstrurvuw~wrr}yz|z~z{{{{{{{{{{{{{{{~{{{|{{~{|||t|r{}|||{{{{{|||{|{{{{|||}~}}}}}}}}~~~}|}||~}~|rjnru}{||{zzxwxy}{}}}{{}zxurppoonnnpw}}{||}~~~}~~~zwx~z~|~tljiir~|~{|}z~{|~||||}}|}~}}||{{{{{{{{{{{{|z{~|~z}}|||}}|{yyz{{{zyyxxyxxwvxxwwwvvvvvvvuuttsttt{tzt{sys~ocSJKKLLLKJJKNPRRTQQTZagfecflprqtvvvvvvwwxwvngb`bdffeeimquxyyy{|~}}~}|}||{{|vqehpjn{xqxynl\\V~Z~n}w}{}~}}~|~z~x~v~r~mwx~z~z}y|w{hz`{g{q{y{{|u}s~u~{~x~e~o~~~|}y}u}{}~}}{}w}r~n~j~j~n~u~y|~{~z}y}x}w}x}w}t}t}v|z|}||}{ytmer{{wrnbdx{|xqpx~~}||}}}|zy~l}o|r|r}t~x~}~{vokn{~|~~}{|}||}}}}}~~~~}{zyyz~|~}}}~}}}~}}~|yy{~~}}}}}|}{}}}}~~~}|{{|}~~~~}~}}}~}}}}}}}}}}~}|}{}}}~}{}z~y~w~u~t~v~w~w~w}y}z}{~{~{~z}y}z}}~}~{~{~}~}~}~{~y~x~y~|~~~}~|~|~z~y}v}t~stvvvw{~piinu~|~|wxw{~~~~}~{uqrrsqpoprstuvtstuxxxuuy||}}||||||||||{{zzzyzz||}|||{vqmmpv~w~u~s~v~{wcZfpvz}}{||~}}~xrqt}snkjqusqtutssssuw|voqxwtne[X[mwqkklknvyxxyyyyxyyzzzzz{zyyzywxzzyxxxz{|xxy~y~y}y}y}y}y~y~y~y~yyyyyyyyyyyyyyy~y}y~yyyyyyyyz{||~}|}{}{}|}}|}}}}|yuqnllqu|{z~yxxyy~z~{~{~{}{}{}{|{{zyyxyxyxzxzxzxzyyzyzz{y{z|z}y}z}z||z~wtrqqstuuu~u|v|w|w|w|y|y|x~wvvu~v}w~w}w}w|w{w{w{wyxwyvyv|u}u}u}t}t~t}t|t{tzsyq{o|n{kvisiskumwowowqxpyozq{u}ttstu~utuu~u}u|t|t}t}u~w~w{txswsxszs{s{sztztytwtvtvtvsxszs{s|t}t~t}t{sxswsvrvqvquqtqsqsrssttutvtvuxvyvyuxtvsssqrqsssutwwxwrs~y{}{{|{{{{{{{{{{{{{|{{{~{|||{|}||{|z|||||{|||}~}}|||{|}|||~~}}}~}~~~{zz{{}vkimsz}|{zyxwvw{~}{{}{xtqpoonnnnpv~y||{~|}~}~~{ywx{~|~xojijls~|}||y~x~y}|}~}~||{||||{{{{{{{{{{{{{{{|~~~|~||{|||{zzzz{{zyxxxxwxwwxxwwwwwvvvvvuuttssstttsshTHLLKKKKKKLNSUSPPMQYajldachnqrsuvvvuvvwwwvrjd_^aefddfjotwyzzz|}}~}~~~}|{{{{~}|zlwxiu}|wxy}}~~m~_~_}p}z}~~~}~w~tqoiw~v~w~y}z}y|v{r|p|k|k|p|t}t~z~~~y~j~mr~h~q}r}y}}}}}x}w}u~s~s~r~s}v}z}}}}~{~y~w~u~u~s~q~q}s}w}}}}~{yunlz|q~nlfefhwvzwpv}~}||}~}|~|~{~n}u}t}r}u}w~w~z~{~y~s~m~m~|~~~p~f}k}}||{||}}}~~~~~~~|zzz|~~~}}~}}}}~|~|zywxz~~~~~~~|}|}~}}}~~~}||{|{|~}}}~|~{~}}}}}}}}}}}}}}}}{}y~w~t~r}s}v}x}x}y}{}z}y}x~u~s~t~w~{~|~y~w~x~z~z~z}y}w}w}{}|}|~z~z~x~w}t}r}q~rtsrrv|zqllqy~~~~~~~|{xz}~~~~ysuvxvuqppqstuuutuvv~u~ux{|{{{{|||||||}}||zxwxy{{{|||{|ztmkotv~v~v~x{~}xqnruvw|}yxy||{ytkfq{xrnkpqnnsvwuttvurrnlputqpmcXR^qtonnnrwwvvvwvvvyz|zxyyzywvvwwyzyxwxyzzzwxyyyyxxxxyyyyyyyyyyyyzyyyy~y}y}y~yyyyyyyyz{~|}}}}{~z~{~{}{}||}}|yuqnmot}zz~yyyzzz{{{z~z}{|{{zzyzyzyzzzzzzzz{y{y|y|z|z}z~zzy~{}}|zwutttutst}v}v|v{w{x{y{y}xwuu~t~u~v~w~v|v{v{u{uzvyvxxwxwyvzv|u}t~s}s|s{sxrwqyp|oznvmtmunvownxnxnxnznzp{r}rrssu~u~uu~u}u|u{t|t}s~uww}u|tzsyrzr{r{s{tzuytwtvtwtxsyrzs{s{t|t}t}r{qyqxqwqvqvquqtqsrrrrsttutvuvuvvwvwuvttrprnrqsuswuyyzxqs|||{||{{|||||||{{~{{|}{{|}|y|~|}~}~}}}}~}~|}||||||~|}|}{{{{{{||}~~~}}~|{zz{yw}~yqgisx}~{zzywvuux|}}{|~{yurqpooonnpsv|y|}}}~~{~}{vpow~{}}}ulhhjmt~{~{}y}w~z}}|~|~||{{|}}|||{{{{{{{{{{{||}}{}{~{{z{{{{zzz{{zzxxxxxyyxxxwwvvvvuuuututssrrsttrl]MILKJJJKKKOSXVQKMS[aiom^_hnqrstvvuutuuvvvsmfa^_adccehmqvy{|{{|}}~~~~~}|{{{{~~~~~}~{~}~~~~~y~|~~}}r}l}m|z|}~~~~|~u~knliw~s~t~w}y}y|{|||u|e|c|m|s|t}z}~}x}k~k~ki~k~r~x~y|x|u|w}w}u~v~z~v}v}{}}}}~{~x~w~u~s~s~r~p~q~w~}~}~}~ywpq~~~z~j~`~_~Y~Z^aiqw{}|}~~}}}}|}}}|}x}t}q}w}v~s~w~|~~y~p~m~l~o~j~g}k}x||||}}~~~~~~~}|{{{|}~~~~~~}}}}{}{zyww{}~}}}}}}}||}}}~}~}||{z{~~~}~|z~{}~}}}}}}}}}}}}|}z}y}w}u}r}t}w}y}y}{}|}y}w}w~s~p~r~w~{~z~w~t~r~t~w}z}{}{|{|z|y|y}x}x~w}v}s}p}o~quurq~svvrppuz~~~~}|}~}{|}~~~|wyz{zwtpoqqstuuuvut~t~uxyyyz{|||||{{|}~}|zxwwx{zz||{{||unlpstw~yz{|~~|yyxzvuuz}ywxzyvuwwqrzzutrromkrvutttvvrnjpusqorrog]Xgxvsqruwwtsvvtrwyz|zxxzyxusuvx{{ywwxyzzywxyyyxxxxxxyyyyyyyyyyzzzyyy~y~y~y~yyyyyyyyz{~|}}|}{~zy~y}y}{|{}}zvromot~z{~zzz{{{zz{~{}z|z{{{{{{{z{y{y{y{y|y|y}z~z~{~{~{{zzz{}}~{~zxvuutstu~u}v|w{y{z{z|z~xvu~ttuv~u}u|t|t{u{vzwywyvyvywxyv{t}s}r|r{rxrwqypzpypwpvpwpwpxnwnxmymzmzn{n{o}p~rtuu~u~u~u}u{t{t{s}t~uwwut}s|r|r{rzs{tzuytxtwtxtzs{s{s{s{t{t|s}q|qzqxqwqvqvquqursrrrrsttuuvuvuvuvvuuutrrmqlrrtyv|w~{~yqu|{{||{{||||}}}||||||}|}y}|}~|~|~}~}||}|||||||}|}|~{{{{|}~|{z|}}||~}tl}|}{wlgnu}|{zzywuttuwy|}{||yurqpooonnooo}u}|~~~~z~{vnhgt|~}}qkhikpu~y~z}y}x|||{{{{{||~{~}}||{{{z{{{{{{{||~||}{||{{{{{{{{zzzzzzzyxxxxyyxxxwwvvvvvuuuttssrqqssrncRKJJIIIJJLNRTVRMJPYbjopj\\bnsrsuvvuttttttutpga_^`a`_cekptx{|||||}}~~~~~}|{{{|~~~}}}}|~||}}}}|}|~|v|u|w|~|}}~|~}~{~v~t|ujtk~l~s}w}y|}||z|c}_}h}r}r}x}|}v~h~b~pzpr~t~q|q|o|w}|}y~y~|~y}x}z}~}~~}~y~w~u~s~t~u~t~r~w}~}}~}~|xx~~|~y~l~_~[~V~XZ[bny~zx~{}}}}}}}}}|}t}n}t}u}o~q~|~~~~u~l~l~o~s~v}v}{|~|||}~~~~~~~~~~~~~~~~~}||}}}}~~~~~~~}}}|zvwz{~~}~}|}|}~}}}}}}}~}~}||||~}~}~}~{~z~{}}}}}}}}}}}}}~}|}z}y}x}x}u}w}{}|}z}z}z}v}u}w~x~w~y~{~|~y}u}q}p}s}x}z}z|z|y|x|w|w}w}x~x}v}s}o}n}q~wxvuttuuttwx|~~~~~~~}|||}~~}~~~~~~|xtqppqstuuwwvuuwwwxz|}}}|{{||}~~}zxwxz}|{||{zywtrrsrrwz{{{|}~}{{|}{spoy~~|{zywtsuwwy{|}|{wsqnptwwvuxyvqmqqlknuzxrh\\fyzvuvutqlhkrqnqvx{xxy{{zvstvy||xuvxy{{zwwxyyyyyyyy~y~yyyyyyyzzzzzzyyyyyyyyyyyyyz{~|}}|}{~zyx~x}y|{}}~|xrnlot~z{~z{~{{~|}||}|}{z~z}z|z}z|z|z{zz{y{y{y|y}y~z~z{{~{{zzzz|~}~~|~zxvvuuuu~u}t}t}v|x{zz|||}y}w~uttt~u~u}t|s{uzwyyxzw{w{w{w|v|t~rr}r|qzqzqzqzqyqwrvqwqwpwoxnynznznzm{m{n|o}q~ttuuu~t}tzsyszs|t~u~wxvts~s}rzrxsytyuxtxtxtytzt|t|t{tzt{s|s|q|q{ryrwrvrvrvrvrusrsqsttvuvuuututusurtorkskttu{w~x|xqv|{{{|||~}}}}}~}~}}}||||||}}~}}~}w~z~}}}||||||||||~|}|}|~|{|}~~~~}zxy~}{zz|~pf{||zskjr~z{yyxwussstvy}~|}|yurpoooonnpstx}~~z~{{sh~gwz}{ojhjlrw|~~}~}~{{z|}}v}v}z}|s~v~z}||||{{{{{{{{{||{}s}r|y|{{{{{{{zzzzzzzyxxxyyyxxxwwvvvvvvuttsssrqqrrpgYKJKIHHIJLNPQQQMMPW`hkonh`hpqruwvutttttttuslc^]]__]^dhnrw{}}||{{}~~~||{{{|}}~}|}}~}||||~}~}~}||{|}|z|{|||~||}{~z~z~z~zuh]hf~h~o}w}z}~||}s}k}j}p|s}u}z}x}i~d~qusrpj|k|i|m}r}q~q~uuuy~~~}~~y~w~v~v~y~}~|~u}x}~}}}~~~|~{~~~{~|~r~c~^~U}S~Q~S~^~q~}~}xtv~~~~~}}}}}}}}y}y~|}t}h~k~w~y~z~u~n~n~r~{~}}}}z|~||}~~~{~{~{~|~|~|~|~|~||}~~~~~~~~~}}}}{vvxz|~{~y~z|~~~~~}~}}}}~}~}}}|~y~z~{~{~|}|}~~~~~~~~~}}}}}~}|}z}y}z}y}x}z}|}}}z}x~x~w~w~{~}~~~~~}~{}v}r}p}r|v|z|||||{|z|w|x|x}y}{~y}x}v}s}q}r~vzyywwwwvvwy{{|}~~}~}|yz|}~~~~~{wtqpqrtvvxxwvuuuwy{}}|{{{||||}}~|zyz}~}}|{yuqqvzxtsvyyxyz||}zy{|{snoz}}~}|zxvsrqrx}}}~}|xtrquzxxxy|}{wuwpkkqw|zwohowwtuurmif~_}\\hnliijvzx{|zwtstw{|{yvwxz||{xxxyyyyyy~y~y}y~y~yyy~y~y~z~zzz{{zzyyyyyyyyyyyzz{~|}}|}{~zyx~w}y|y|{~}yrmmpu}{{~z{~|}|}}|~zxwvww~w~x~x}x}y|z{{z{z|z}y~z~z{{{{{zzz{~}~}}}{~yvvwx~x~x~w~u~s~s~t|u{x|z|z|x}w~uss~s~t~s}r}r|vyzv|utuutsrrrr}r}r{qyrxsvtwswrxpyozn{n{o{o|m|m{n{o{q}s~tttts~szsxswtzu}v~y~yvtssszsvswtwtwtytysytzt|t|t{t{t{s|s|r|r{ryrwrvrvrvrvrusrsqsttvuuutusuruoumumtlulvvv|x~y~~}wrx~|||{||~||}|}|}}}~}}}||||||}}}}}u~{}~}|{{||||||}}|~|~|~|||}~~~yz~}}}|}zyzv{wz}|||~~~|vp|}xoip~w{yyxwusrrrtw|}}{yuqponommotxxxy}~~z~{~s~p}{z~wlhgkov~{~~}}|{|}}yqs~z~x|~~~}}|~||{{{{{{{||}~}o}i}w||{{{{{{zzzzzzzyxxxyyxxxxwwvvvvvvvtsssrrrrsrm^OJJJIHIJKMPOOOMLOY`gjlnmhdjpqstvutttttttutpg`\\]]]]\\`fkquz|||{{zz}~~~~~}||{z|}}~}|}}}{|~|||}|}|}y}z}{}{}}}}~}{}z}y}{}{~~~zjZ_e~i~q~w}z}~}}~|}x}u}v|v}t}w}z}v~uxtqole|b|`|a}e}h~j~nqsv|~~~z~x~x~y~~~~}y}z}}}}}~}~}~|~y~z~u~g~c~Y}P~I~I~`~x~~}{xtv{||~|~{~|~}~~~|~w~w~l~a~bmuv~t~o~n}o}x}}}y}u|{|~|}~~z~x~y~{~{~{~{~{~{~|}~~~~~~~~}}~|yuuvwxxusuy}~~~}~}}}}}}~}~~~~~}~{~{~|~~~~}~}~~~~~~~~~~~~~}}~}}}~}}}{}z}y}y}y}{}|~|~x~v~x~y~{~~~~~}}w}s}q}s}w}y|{||}}|||z|w|w|y}{}|}{}y~y~y}x}v}x~|||yxxwwwxyzz{|}}~}~}yxz}~~~}||}}}}}~~}zvrqrqsw{|{zxvvvx{}~~}{{{||||||~}|{|~~}{xtnnu|zusuxxvvvwy|zxz}}urs{||}}|zxvssrrx}~~~}zwspkmuyxy|}z{{urrx}}{{xwxwsopttkcf~c~[cnmkhejpv}{sposwz}~}{zzz{|||yyyyyyyy~y}y}y|y}y~y~y~y}y}z}z}{~{~{|{{zzyyyyyyyzzzzz{~|}||}|~{zx~w~x~x~z|zpjknv|}z{{~|}}{zywuuuuuvvv~w~x}y|{{|z}z~z~zz{{{~|~|}|}|~|~}~~}~zx~v~v~w}y|{||}z~ywvsp~q}s|u|w|v~u~t~s~s~s~s~r~r}q{twzt}sstsssrrrr}r{ryswtwuwtxrxqyozozo{p|p}n}n|n{oxqyr|sttsr~ryswsvtyu{v}y~z~wtsss|sxswtvtvtxsysxsxtzt{t{t{t|t|t}t}s|szsxswrwrvrvrusssssttutturuquqvmvivevnwrwzxyz~}usx~|||||~|||{}{}}}~}}}}|||||||}}}}}}|}}|{{||||~}}~~}}}~}}}}}}}}~v~y}||{{~zzzv{w|}}~~}}~~}}}}ztoq~v{~yyxwusrqqruz}}{xtqonnnllpy|vsuyzzz~z~z~~|}{}~{pkggks{~}}~|}|}}skpqst~|}|}~}}|~{{{{{{{||}}}u~htwy}||{yyz|{{zzzyyyyyyxxxxwwvvvvvvvtsssrrrrtqgVJJIIIHIKMOONNNMLR^ejjklnjdiosstttttttuuuuskb^\\]^\\\\^cjotx{{{{zzz|~~}~~~~~~}}||{z{||}}|}}}||||}}}}}{}|}|}|}}}}~}|}}}|}~}}~~~tml~h~m~w~y~p~z~~~{~}~|~z}w}s}u}z}}~{wtqlfa|]|]|_}d}h~psssu|~~|~z~|~~}~}}}}}||~|}}}~~}~|~z~x~yw~k~f~a~]~T~I~g~~~|vsmqzwuxw~w~y~{~~~~}~{~t~n~e~elrxu~p~o}q}u}u}r}q}t|y|||}~~{wx{~|~|~|~|~|~|~}~~~~~~}}|}~{rqsutsvsmmu|~~}}}}}}}}~}~~~~~~~}}~~~~~}}}}~~~}}~}}}}~}}}|}{~z~z~{~|~{~x~w~y~}~~~~~~~{}u}s}u}x}{}{}{}{}{}||z|w|v|x}y}{}z}y~{}|~{~{}|}~~~~{yyxwxxyyzz{}~~~~{x{}}}}}{zyy|~}|}~~}{xtsrqu{{{{{zyyy{}~|{{{|||{zxz|}}}}}}zxtolqwwttvyxurqqq}~{~~~~}xwxzz{|{zxywsuxz|}}}}{xwvtssvxzz|vrrsvy~~}~~{uolntwnglrnnpquxdYcr}|smoux{}~}}||{||||yyyyyzzz~z}z|y|y}y}y~y}y}z}z}{}{}{}|~|~|{{zyyyyyyzzzzzz~{~{}{}||}{~z~y~ww~v~w~y~ywvuv}z{y{{}}~{zxvuttttttttvw~y}z{|{}z~yz~z~{~{~|}||||||}}~}|zx~v~v}x}{|~{~{|{||z}x~w~t~r}q|s|u|u}w~u~s~r~r~s~tron{qwvuzt~tssssrrr~r{syswswuxuysyqxpyozp|p}p}o|n{nyosqsqxr}s~t~s}s{ryswtwtyu{v|y}z}w~usss~s{sytvtvswswsvsutwtxtzu{u{v|w|v}u|s{szsyrwrvrtrsstsvsvsutstptpvrvsxkxfxvxyyyz{}trx~|||||}|{|{}|}}}}}}}|||||||}}~}z}|}~}}|||}}}}}}~~~}}}}}|~}~~~}~v~y~~~}}}}~}{~z}~}~}{}~}ytt}w{~yxwvusrqqqsw}}~{xtponnnlms}uqqvxzyy~y~}}||wnighlu~}}||}}~umijkrquz~}x}|}~}||}|}{{{{{{||n}e~m~jnpqy{{|{y{|}|{zzyyyyyyyxxwwwwvvvvvvvtttsrqrsuo]NIHIHHIJLMLLMONMMTafjjknrmegotssssstuuuuvtoe]\\\\^]\\^bgnqwzzzyyz{{}~||~}~~~}|||{z{||}||}}}|||}}~}~}}}}|}|}~}}}}|~|~||}~~~}~z~w}t}z}}}w~irvvy~}~~~z}w}s}v}~}~|vqpolk}l|j|g}h}p~yzwwx}~~|~x~z~|~|}{}y}z}}}{|z|~}}}}}}~|~z~x~vvx~q~m~j~g~c~_~m~{{vronoruuw~v~v~w~y~|~~~}|}u}n~g~i~o~v~x~u~q}o|q|r|v|x}{}|}~}||}}~y~uwz~|~}~}}}}~}~}~~~~~}}~}}}|}~~{utttttupmpv{|~|}}}}}~}}}}}}}}}}~~~~}~}~}}~}~}~}}~}~}~~~~~~}~~~}~|~|~}~|~{~x~y~|}~~~~~~~~|}x}s}s}v}x}z}y}y}y}z}{|z}x}v}v|x}{}z}z~|}}~}~}~~}~~|{zyxxxyyyz{|}~~}{|~}}}{zywyzyz{|}|{yvuruxyxxxxyzzz{}~~~|{zz{|||{yyz||}}}|}}{yxvqllpsttwywqoopq~~~~~}z}{z{||yvttuvuv{}~~~||}}zyz{~}uq{~z~q}i~e~cfilps{}|{zxurqsx{wvx|zwrryzcP]u{wsruvwxz{||}}|||{{yyyyzzzz~z}z}z}y}y~y~y~z}z}z}{}{|||||}}}}|~{zzzzzz~z{zzzzz~z~z~{~{}||}{~y~wwvu~u~w}}||~|~{~zyz{}}}{zxvtssssrrrrstvx~z|{{}z}z}z}{~{||{|{|{|{}{~{{yxvu~w~z|}{~z~z~z}z|{{|z}x|w|x|x{y|y}w}u}s}r|t|u|u~tq}o|pytwzv}u~tttsss~s{szsysxuytysxqwowpwqzq|q|o{nznwnrprqvq{r~s}szsytyuyt{t|u|v|y|z|w}u~s~tt~t|tztxsvsvswswsutttuuwuyvzw{x|x|x|u{szryrwstsqsqsssustsrspsmtnvsxyywysz}z~z{{||srx~|||||}||}|}}}}}}}}||||||||||{||}}|}|||||~{|}}~}}}~~~~}}}}}|~}~~~~~~y~y{}~~~~}||||}~~}}|~~~|xx}y{~yxwvutrqpqqty~zwspnmmmmnu~}xtvx|{z{~|}~|~}qmhgipt{}~~}}}~xkcclqjjv~}v}}}}}|}{}{{{{zz{|f}O}U~aqvx{{xy|z{}}}|{{zyyyyyyyxwwwwwwwwwwvvvutrqrsvjRGGHHHJJLLKJKNPOMOXbfijlrrmfipsrsrrstuuuvvsj_[]]^]^afkqtxyxvwz|||~}}}}~~}}~~~~}||||{z|~||||}}}|}||}}}~}|}y}y}{}||}||{|}}~~~~~}}~}}~~uklk~p~w~}}~~{}x}v}w}}}|~zuonruv}z}y}v}v~y~zww{{yuu~v}z}z}x}x|~}y}u}w}y~yzy~y~x~vsv~w~w~u~m~e~f~owtpllorrwvy~w}w}v}w}z}~}}~}v}q~k~n~p~r~w~w~t}r|r|s|y|}}}}||~|}}z~x~y~|~}~}~~}}}}}}}}}}~}~|||}}~~|}ytuuwvppvz{{~|}}}~}}|||||}}}}~~~}~}~}~~~~~}}}~}~~~~~~~~~~~}~}~}~{~{~z}|}~}~}|~}~~~}~{}x}t}s}t}t}v}w}w}w~y}z}z}x}w}x}z}{}|}{~|~}~}}~~}~}|{zyxxwxyyz{|}~~}||}~~|{yvvuvvy{|{yxwvvyxwxyxxxyzzz{|||{{zyz|}|{z{{z||}}|zyzzzyvplnsuvy{wqruvv}~zx{}}||}|xuvwvwy{||{zyz}~}}~~wry{k~R}J|J|P~Z``aiw~|zyxvuronquz|~{uu|yjYbyywwxxustvy{}~~}|zzyyyyzzzzz~z~z~z~yyzz~z~z}{}|||{}{~{~|}||~{zzzzz}{|{{zzzzz~{~{~||}{~z~xwwu~u}x{~zzzyyyz{|}|{~zxvtsrrqqppppqsuw~y}{{|z}z}{}{|{{|z|z|z}y}y~y~ywutu~w|w|x{z{|z}z}z}{||{|z{z{{{z|z|x|v|t|s{s{s|t}v~u~t|qzrxvw{w}vvuuu~t~t|s|r|rztxuytxrwpupuqwqzqypyoxovotosptpvqzr|s{t{u{v|u}s}u}w|z|z|w|t}t}t}t}t|tztxtwsxsysysvtqtqutuwvywyyz{{{|x{uztzvzvtuntosqsrspsnsmrjtkxrzxzz~{~{|||}}sry}~{{{||~|}}~}}}}}}}||}}}|||{{~{|}~|wytzx{{|~|{}{~|~}}}~}|||}~}~~~|zxy|~|{zz{{||~{{|~~{z~{|zxwvusrqpppquz}yvronmllmpw}}|{{|}|~}}||}}vlkihkqtxx{~~}}~zjdqwreo{}}}z|~|||~{{{{{z{{|}^}X}o~}|z{~|x~y{{{}}}||{zyyyyzyxwwwwwwwwwwwwwwusortt^LGFGGHKLMKJLOQPNNU\\adgjmsphhlprqrrstuuuuvuod]\\\\]__aejnsvxwvtx{}~~}||}}~~~|~~}}}}}|{{}{x|}||||}}}}~}~}~~~~}|}y}y}{}~|~|~|{|}}}~~~~~~~~zvrng~k~w}~}~}}{}w}v}v}x}{~yrnrw~w}v}x}}~~~~~}ssuxy{wr~r}|}}|||||~}{}w}w~utwwx~{{vvw~z~|~}t}o~vypjfep{zyw~{}{}z}w}v|x|~|||w}s~n~m~o~o~v~z}y}w|u|w||{|}}|}z|z|~|}}}|}|}}}~}~}}}}}}}}~}~}|~|~|~|~|~}~}}~||wuvxwtw{}|~{}|}}}}}||||}}}}}~~}~|~~~~~~~}}}~~~~~~~~~~~~~}~|~{~z}z}|}~}~~|~|~~~~~}}y}v}t}s}s}u}v}w~x~z~|~{~z~y~{~}~}~}~}~}~|~{~{~}~~~~}~~~~}|{yxwxyyyz{|}{yy{~~}{ywwutvxyzywvvwwzyz{{ywwxxyyz||||{{z{|}}}}|z{|}}|zyz{{{yuqruwx|}|xxyxz~}~yy|}|}~}}}|zz{z{yxvvwz~~ywxraL~D}C}J~W][]gt||{{|{zwrledlsy|}}|{{}}uijwxyyyuropsvy|}|{zyyyyzzzzzzzzzzzz{~{}||}{}z~xww~y}|{zzzz~{~|~}~|~{~{zzz{{~{~|}|{}z~yy~y~z~{}}{zzyyyyzzz}||}{~zyvtrqpoooooopsu~v}y|z{|z}z}z|{{z|z|{{{z|y}y~x~vtsu~v}v}v|x{zz{z|z}z|{{{{z{zz{y{z{x|v|u|t{s{r{r|t~u}t|p{ryvxzx}xwwv~v~v~u}s|r|q{szwyvxtwqtqtquqwqxpwowouososorospvqzs|t{w|y}v~s~s}u}||{|v|t{t{t{tztztztytytzt{tztwtqtpusvvwxwyyy{z}{}{{{z~x|wuvovpuqtpsmslskrjwlyryxzzz{{~|||{}}rsz}}{{|}}}||||}}}}|}}}}||{{{{|}~|yyyz|z}z~}wxy~{~|||}|}||||}}~~~{yy|~~~~~{zyxyyso|{wvx|~}||}~zxwvutrqppooqu{}|xuqnmlkknrx|~~}|{{{}~}~~|}{}|sjjjimtvvux~|}~|}~{pqy{uru~}}||}|~{{{{{{{{{||||w|o}~}y~{~{x~x|~|||}||{zyxxxyyyywwwwvvvvvvwwwwurorrdOIHFGGIKLMJJMRRNNNYeadflnqjflopqpqrttuutwuth_\\\\]^aadhmqtuvvtvz|~~~}|{||~~}}|~~}}}||||~{s|w||||}}}}~{}|}|}~}}|||z|z}}|~|~{~{{|}}}}~~~~}~yurlf~i~v}}}~}|}y}u}s}t}{}z~t~r~u~w~t}q}t}u}q~n~zgepuxz{yx~z}~|||}~}~{~yttvww~}{uvx~}}}}~}zpjffr~~y~w}|}~}||x|u|v||||}|u}t}p~o~r~r~w~{}z}y}w|y{}{|||z|y|y|{|}|~|~}}}}}~}}}}}}}}~}~}~}~|~|}}~}}}}~}~}|~|xwwxxwz~~{}z}{}}}~}}||||}}}}}~~~~}~~~~~~}}}~~~~~~~~~~~~~}~|~{~y}y}{}}}~}~}}~~~~~~}{}x}v}u~v~x~z~{~{~|~}~|~{~z~{~~~~~~~}~}~}~z~z~|~~~~}~}~~~~}zxxwxyyyz{|~{~w~w~z~}~}|{yyywwwxyyxvtuvxzzz|{yuuwyzz{|}}}|{{{{|}~~}}{{{|||{{{|||{ywwwwx{~}{zzxy}}|z{~||}~z{{yywvvwvx|~~xuqrtl~`}W}W~dmimsz{{zy|}zxsneahqv{}}}||~}wppvvxxwurppqtux}}}|||yyyyzyyyyzzzzzzz{{}||}z~xvttw}z|}zzz{~|~}}~{~y~y}{|~{{{{~{}|||{}z}y~y~z~{~|}~{zyyxxyzzy~z}{}|}~{yvspooponnnnorsv}x|{{}z}z}z}y~y}y}z{z{{z|x}v}t~s~t}w}x}u|t{v{xzzz|z{z{{z{y{x|x|x|w|u|u|t{s{r{q{p|p|p|o{rzwz{z}zzy~y~x~x~w}u}s|sytuvxuzrzqwqvqtqtqupupvptproqonomprrxt|v}z~|xt~t~v}|}|}v}u|tytvtwtytztzt{t{t{tzuxuttrurvtvvwxxy|yz{}}{|ztysxqwouksifjcorr|vxyw{y|{~|||{}}rs|}}{||}}}|{{|}}}}|}}}}|{{{{||~{zzvzptrwjsv~{{{|}|~|{{{||}~~}{{~|}}}~|||~~}zxxz{~|xxu}r}s~y}~||~|ywvutrqppoooqwzyvtqnmlkjory|}~}}||~~||~unjhjls{{xvvz~}}}~~yy}|~~}|||{{{{{{{{{||||}|z|w||}{~w~x~y~x~y~}}||||{zyxxxxyyyyxxxwwvvvvvvxwvtqqtmVIHIGGHILMKIJPUTONOV\\_diopnhjppoooqsttuuuvvo^\\]]^`cegkosstttuw{~~~~|{{|}~~}}}~~~}||}}~|v|m||||{}}|}~}y~z~{}}}~}|~||||||~|~|||}}}}~~~|~zskfe~f}q||}~}~}{}v}o|m|s|{}{}x}y}z}w}t}q}l}d~b~r^bovz|}}~~}||}}~~~~xvyxv~{~wtst~{}}}}~~uromw~z~z}}}}}|x|t|v|x{|{x|u}y}w}u~y~x~z~{}z}y}y|z{|{~|~|}|y|w|w|y|{|}|}}~}}}}}~}~|||}}}~}~|~|}}}}|~|~|~}}}{zzzyz|~~~~}}z}y}{}}}~}~}||||}}}}}~~~~~~~~~~~}}}}}~~~}~~~~~~~~}~}~{~y}y}y}}}}}}}}}}}z~y~z~{~}~~~~~~~~~~}|z~|~~~~~~~~~~~~|~|~}~}~}}~}}~|zyxwxxxyz{|~|x~v~y~}~}~|~{~{}||{zyyxwvtuuwz{{||ytsvy||{{{{{|{{{{{}~~}|{{{|||}}~~~}}|{zxvwy|}}}ywz}}|yy{}}|{|~|xy{zuruwzywtrg{y||wrot~~~zvrvuvurnmrtxyzyyvnikptx||}}}~|yttuttuvxusrrrpnnsy{||}yyyyyyyyyyzzzzzz{{~|}}{~ywuu~w}z{}zz{~|~||}z~wsst~x~||~{~{}{}|||{}y}y~yy~z~{}}{~zyyyyyzzzzz{|~~|yurppqqpnmlmnqu~w}z{|{}{~z~yyyz~{}{||{{x|w}u}v}t}v}y|y|y{zy{y|y|z|{z|y}y|x|w}v}t}t|t|t|r{r{r|q|o|n{p{s{uzw{x{x{w{wzxzyyyxxuxuuvswwvzt{rzqypupsptpupuosoropololqrtyw}y|}yu~t~v~|}{}v~t}swtstutytzt{t{t|t|u{uyuuuqupuqvtvwwxzy~y{}~}}}~||zxwrqnkpkwv|{~x~v}x|{~|||{}{qs|}|{}}~~}|||~~}||}}}~|~|~{~{{~|}||~}}}|xf}dsvysyx~{{}{}{}{|{~{}{}|~}}~~|~z~z}z|{{|{}z}|}|zzz|~~}~{wtxz~}|yxvutrqpponnosvvtspnlkjiory|~~~~}yokiginw~~~~{wvx{~~}~~}~}~~~~}||||{{{{{{|||~|~|~|}|z|u|s{}{|}}{~y~y~x~x}z|||||{{zyxxwwxxxxxxxwvvvvvvvwwutstudKGGIIGHIJLJHJRVTPNMSY`eimnkkpqommorstuutuwueY[\\^`bfhjjnrrssuwy|~~~}|zz{|}~}|}}~~~}}}|}|p}b{{|}w}w|~}~}yz~z~{~|~~}}}}|||~|~||||}}}~}~}||rifh~i}l|x}}~}}}~}~}u|o{o|z}}}}{}{}y}x}t}n}f~m~w~dgqw{{}}~~}}|}}~}}~~z~~ysnnt~w~x~|~~~z}{z|~{z~{}~}|}|x|t|u|z{z{v|w}z}y}w}z}x}z}{}z}z}y|y{z{{|||||z|x|x|y|{|}|~}}}}}}~}~|||}}}}|~|~}}}}~|~|~|~}~|~|~|~|~|{|}~~}~{}y}y}{}}}~}~}~|~|}|~|}}}}}~~~~~~}~{}z}|}~}~~~}~~~~~~~~~~~}~|~{}{}|}~}}}}}}}}}~|~}~~~~~~~~}|{~|~~~~~}~}~~~~~~~~~~}~}}~}}}~}zyyxxxxyyyz{|zxx~{~|~{~{~|~~~~~|zxwvuuvwy{|z{|{vtuy|{yyyyyz{{{{z{|}|{zz{|||}~~~|zyyxwwz{{|wvz}}}zvsvy||}zxuy}{vtxz}||ygTjhswvpqw~}{zumqsromllnklouwuttxz|||||{}|zwvutrsuyyvutroh]ct{}~~yyyyyyyyyyyzzzzz{{|~}~~|~z~y~y}z||{}z~{~|~|}}{}y~uqonpu~z|}{~{}{||{}y}x~xxx~y}{{|z~zzyyyzzzzzz{|~{wsqqrtsqomjkpuw}z||{|{~z~z~z~z{}||}z}y}y}x~y~x~t~t~x}z|z{{y|y|z|{|}{}{}z}y|w}v}u}u}u}u}t|s|r|q|p|n|o{r{qzoznzm|m{m{nzpyqxsuuuuxu{vzxxxtzrypuospsptpsornqnoojqlsvv}y{}}zw~u~v~}~{}u~t|svsstvtzt{u|u|t|u|uzuvuoukuluouruuvvxw|x{}~}z~tzhxo|{~ywy}|~}||{~zqsz}||~~~{{~}~~~~}~|z}{}|}}}}||||||~{~{}|{|x}wy~~~}yklz~|{||~{}{}}}~~~}}{|{|{}|~~~~}{}y|w}v|x{z{{{|}||}~~~|}}xxspu}|}{|~~~{ywvutrqpoonnnorsrrpnljiinrz|~~|~~~|~~qkhgfipy~}~~{xvwz}~~~~~}~}~}}}|}}}||{{{||}~}}|||||~|{|w{v{~{{|}|~{~x}w|w|z|||{{zyxxwwvwwwwwwwvvvuuuvvutstwq~ZCFGIJGIJKJHHKRVTPOPX^^chlllopmjknqrtuuuttvmZ\\[\\^aeijkknqrrsuwy|~~~~}{zyy{||}|}~~~~~~}}}}~~{]}c{||{}r}q}|}}z{{{|~~~~~}}}}}~}~}}}}}}}~{~y~y|vjhkk~i}t|}}}}|||x{v|{}}~}{}y}v}r}q}t}n~k~s~n~qpuz{|||~|}{}y}y}x~xxxwy~~~~}qijq~uwz~~~|}~~~~{~z~{}}}~|||z|v{s{{{z{v|x}z}|}{}w}w}x}z}z}z}z|y{x{x|z}|}||z|z|{|||~}}}}}}}}}}}||||||~}~}}}|~|~|~|}|~}~}~}~}}}}}|~{~z}{}|}}}}}}}}|}|}|||}}~}~}}}~}~~~~~}}}|}z}{}~}}~~~~~~~~~~~~~~~}~|}|}~}}}}}}}}}~~}~~~}~}~}~~~~~}}|~}~~~}~}~|~}~~~}||}~~}}}}~~|zzyxxxxyyyyyzzzyz{~|~|~|~~~~}{xuttwz{|~}ywyywuvz{zyxxxyyz{zzz{{{{zzz{|||}~|zyyxvuz}{zyxz}}~}woou{}~|wtsy||{{}~~~~~~zdR[jptpqw~~wssojolprohdb`_antxyx{}~|{{zy||{zxvtrtuz{zywvvn_au{}~~yyzzyyyxxyyyyyzzzzz{||~|}|}{}{~{~{~|}}}}|}{}ywsoklp~x}{{~{}||{{|y|x~x~ww~x}x|z||{}{zzzzzzzzzz|}}zvtrswwvsqkkptw~z}{|||}{~z~z~{~||}z~wtr~tzyvuw~y}y{{zzzz{x}wvw}x}x|x|v|u}u~u~u~u}t}t}r}q}r|r{rzryrzrzr{s{sysuusvruttuwzw{w{uzvwwtwqvpsptquqsppnpnooirlwyz|}}|zx~w~x}~}|}u}t{sustsxt{t|t|u|u|u{uzvvvovkukumtptsttvvyx|{~}~~~~y~w}w~z{yy{~|~}~}~}{~xqsy||}}}}~~{{|{ww{vnyyzzz|z|{|||}|~|~|~|}~~~~~~~}ywu{}}||~{|||}|~{|{{z}y|y}|}}}}|{|y|w|v}x|x|y|z~z}}}~}{}z~yvlfpzvrv~}{xwvutrqppooonoopqqonljhinrz|}~}}}||~}~xmifeflsy|}{xvvxz|~|~|~|~~}}~~~~}~}~}|}~}~|}|~||}}~~~|}}||||{{{{{|}}}}{|z|z|}{{|{{zyyxwvvvvwwwvwxxwwvvwvussszbKGGHHHGJLIHHJMRVTPPTZ\\Z`hplornhhloqstuuusspf\\]]^`cgkmmmo~qrrs~u~wz~}}~~~}}{yyyy{{{||~~~~~}}~~}~}z[}d{i|y}t}j}j}{~|z||z|}~~~~~~~~~~~~~~~~}~|~}~~~}~y~v~vyyjjnkk~r|~|||~}~||{}{{|z}|}{}y}v}r}i}g|r}s~j~i}k~l~l~t~~{~y~{~z~u~m~k~l~nmliip~~~~}~|{zvnioy~|xw{~~}|}}~~}~}}}}}}|||||~|{{u{t{y{y|w}y}}}{}x}w}x}y}z}y|y{x{x|y}{}}}}|}|}|~}}}}}}}}}}}}}|||}}~}}}}}|}{}{}{}}}}}}}}~~~}||||{~{~|~}}}}|}|}}|}|~|}||||}|}|}~~~~~}~}~}{}y}z}}}}}~~~~~~~~~~~~~}~}~|}}}~}~}}}~}}}}}}~}~~}~|~z~z~~~~~|~}}}~}~}~|~|~|}~}{z|~~}}}~}}}|~{{{zzyyyyyyyyyzz{||~~~~~~~|~|~}~}|xurtx|~wsvxxwvy{{zxwwxyzzz{{{||{zzz{||}}~|zyyxxv||{{z{|}~}yqou{}~}{ytpry{z}~}~}~|~|vdYhwxssvz{{yxwvsplnole\\_a\\\\jry|||}}y{{wxz|~~|zvtvw{}}{yxvphity{}~yyz{zyyxxxxyxxyyyyyzzzz~z~{{~{}|}}}}|}|}{}z~yvqmmp}w|{zz{}{||z}y~xvuv~v~w}y}z||{~{zzzzzzzzz{~}|{xvwz{zxvtssuw~y}z}z|{|}{}{}||}z~xuqlmsvvuuw~w|y|y|x~tpmnt}v}x|x|x}x~w~w~u}u}u}t}t|u|u{tztytyuyvzx}xsxaz_{k{s{v{yv{q{q{uyxvxsyqwrxuxtuqqpoppqruux{z{|||zw~v~x||}}v~u~sysvsys{s|s}t|u{u{v{vwwqwmvlumtptrtsuuwxy|{~||~~~}||~||||}|}}}|~}xquy||}|||~{xyxuu|vrwzyzy|{|}|||~|||}}}~~~~}{z{}~~~}|}||{{ryoxvx|x|z}}}}}~}~|~|}{z{x|x}x}y}y}||~|}}{z~wtuqnuxovu}zxxvutrqqqqppoonnoponljijorz{|~~}}}||~}{rhfeehnuz|}~{yvtuwwx~y~{~}~}||~~~~}~~~}}}}~}}~~|yx~z~~}||{{{{{|||||{{{{{{zz~y}yxwvvvwwwwwwwwwvuuvuusrsrWFHHGHHGKLIIIKMPTSQRVXZX^gloqrmginprtuuutroia]\\]`cfimoooqrsstv~x}{}|}~|}}}||zxyyzzz{|}~~}}|~}}}}{l}g{Z|h}j~a~d~x~{zz{{{|}}~~}~~~~~~}~z~y~x~x~w~u~t~swwlnromr}||||~|||{{~{||y}x}y}w}s}n}h}a}j}t}t|k|d}a}\\~h~|~~}|}y~s~l~m~lnoooppw~~z~yyyxurqy}urx~}~|~}}~~~}}}}|}z}|}{|s|v|||~|y}v~y~}}}}}z}y}z}z}{|z|z{{|{||}~}}~|~}}}}}~}~}}}}}}}}}}}}~~~}~}~|}{}{}{}{}}}~}~}~~~~|~{{zzz~z~{~|}|}{}{}}|||}|{|{||}}}~~~}~|}|}}}|}z}x}y}|}}}}~}~~~~~~~~~}~|~|~|~|}~}}}~}}}~}}}}}~}~~}~|~z~{~|~~~}~|~|~|~|~|~|~|~|~|~|~~}zz}~~~~}~}}}}}{~|{{{{zyyyyyyyyzz{|}~~~~~|~|~|~}~~ytprv|}~~vsuwxxvuvxxvvvxyz{||}}~~|{z{{||}}~~}zz{{{|~}|{{||}|yutw|~~~}zwtswxx{}~~||~z~y~z{xqw~zxy{{{{z{{zxutnkmhcnsnhptx{|{yxy{{xwwy~|xwxx{}|zwsmghmquxz}yz{|~{~z~yxxxxxxxyyxxyyyyy~y~z~z~{}|}}|}|}{}{}{~zxtsrt}y|{z~{}|z}x~ussssttuuw~y}{|~{{zzzzzz~z~z~{~|~~|~{~{}|}}}}}|}{}|~{zxwx~y~y}z|{||{|||}}{ytkimrstuu~v~w}y}x~xsnkp~s}w|{|{|z|x|w|u|u|u{u{v{wzvzuzuyuyvzwyy~woyUUjvwyx|r{s{vyzw{u{szvzy{wxsuqqrquyx~y~xyz||zw}vzxxy}|x}xv}twswryr{r{s{szuzuzvxvtwownvouqusuuvwwzx}y{|~~~}~|{{yzz}|}|~{vquz||||||~|wxzxxzz|||~|{|||}|{}z}}~~}}~~}}}}~~~~}}~|~x|hzfyxz}{||}~}~~|zv~uz{y~xx~x}y|{|~}~ywz~tlqz}{wq{{~}zzzxutsrrrrrqoonnonnnljijosz{|}}~~~~~~}~~~vmgeefjpw~z|~|~|zwuvvvwx~|~~}zz|}~}}~~~~~~}{yurty~~}}||{x{|{{{{||||{zzzzzz~zyzxyxwwwxzyyyxwwwwvuuuttsrrdPHIHHHHGJLIIIJKLQSSTUW[_flnnoolhkoqsuvvvvqjc^\\]^adgjmoqrstttuw~x|z|||z~x~x~~|{{zyxyyzy{{|}~~}}|}}}}~|}~r|X}[}`~^~gxyxyzz{}|}~~}~|~~~~~~{~ws~m~k~m~p~pt{wmqwsnr}{||{{~{}{~|~}|}y}w}t~q~l~j~b}g}q|w|i{]|X|S}[~u~}~}x~r~n~qqrrtz}{~~{~~~}{xvy}~~~v~ty~~}~}}}}}~~~~~~~~}~{~~~|}w}z}}}}~{~y~{}}}|}{}{}|}}|~|~|~|}|~|~|~|~||}}}}}~}~}}}}}}}}}~~~}~}~{~{}z}{}|}}}~}~}}~}~{~{~zzyx~y~z~{}{}{}|}}|~|~|||z|z|{}|}}~~|}z}z}{}z}x}v}v}y~{~{~{~}~~~~~~~~}~{~{~{~}}}}}}}~~}}~}~}~}~}}~~~}~}~}~}~}~}~|~|~|~|~}~}~}~|~|~||}}|}~~~~~~}}~}}}{~{~||}|zzzzzyyyyyy{{|}}z~z~z~|~~{uoosxz}~wtvxyywtrrstuvwxz{|~~~~}}{zz{{||}}~~~~}}||~~}~}|{{{||{zyxz}~~~}{yke~m~zzttz}~}~|}~|z~|uu{|{{z{}}{ywtpoonpx{ztsstxyxvsy~}yvrt|~}zyz{||zyvqielnjnrw|yz{}}||{||{~yyyyyyyyyxy~yzzz~z~z}z}z}{|||}|}{}{}{}z}z~y~xx~y~y|z|{|{}y~w~wvtrqqqrrrtux~{}}|{{zzz~z~z~z~z{{~|~|~{~{{{|~|~}}}|~zxxxx~x}x|y{{{~|~~}|wpnnoosuut~v}x}y~y~wtpops}z|}{}|z{x|w{u{vzwzwywyvyuyuyuyvzuyv}ttu_|a|r|zzz{zz{x{w{vzyxzv{uyxz}{{yuwrxtxwzy}y~yyz||zv{utys}w}z{y|w{uypwoutrxqxrysyuyuxvxvvvrwqvrvtwwwyuzw|x~y{|~~}|}~~||uzsyu{}|~{zuov}}|||{|~{~wz}~{{}~}||{{|||}z}z~zxvxz~z|~}}}}}}}}~|~x~m}n|||~}}~}}~~||q~i|yz~yxx}x}x|{}|~y~xytoszzwurw}}{}z}}}yvttsrsrrrponnoonnljiins{|{{{{||}}~|qhgfefltyz{~|~|{yxxzyy~{~~}xwz|||||~}~|zyywrppw}x}w|r|x{{{{||||{zzzzyzzyzwz|y}wxx{}y|z{zywwuuttssssrqlVKJIIHHHHJLJIIIJJ{N}STUXY]fkmmlllljmqstvvvutld`]]]^aegimoqrstuuvxy|zz{}{y}v}w}}{zzyxxxyzy{{}}~~~~~}}|}}~~}~~{}b}Y~Z~Vm|wuw{z|}}~}~}~|~}~~|uod~b~n~v~ty~ylq{uns~{~z}z|}||{{||}~}|}u~rpmje~g}i|f{XzR|W|[}^~s~z~|~y~v~tsrrtuzwt}~~~~zvtrsy~~~~~~z~x~|}~}~}|}|~}~~~}}}~~~~~|~{}~}~~~~~~}~z}|}}}}}|}~}~}||||~|~|~|}|||~|||}}}}}}}}}}}}}~~}}|~|~{~z~z}{}|}~}~~|~|~{~{~{~z~y~y}y}y}z}z}{}|}}}~|}||}z}y}z}|}~}~~|}y}x~y}y}w}u}t~v~x~y~z~|~}~}~~~}~|~{}y}{}}}}}}~~}~~~}}}|}}}|}|~|~|~|~|~|~|~}|{~z~{}|}|}}~|~|~||||}}~~~~}~}}}|}z}z~{~}xwyz{zyyxxyyz||{xxy~|~~|wpnqvx|~~zxyzz{{xs~qruxxwxyz|~~~}}|{zyz{|||||||||}}~~~}||||||{{{|~}}~~~~nj~u~~~xoq}~}}|zzytxwprzzwuw|}|||xrsutvvtplmqttsqw|{yxux{||{zz{{{zwwvqihkgeglqyz{||y~w~w}y||zyyyyyyy~y~y~z~z{{~{~{}{}{|{|{|{{|{|{|{|z}z}y}y~y}x}y|z|z{{|||{|{|z~wuqonnnoopprt~x}||{zzzz~z~z~z{{{~{~z~z{{|~|~|}||~{~zyxw~w~w}w{z{}{~|~~zwsqnnqu~s~s~u~x}z}y~ywrqpr~x}||{{|y|v|w{vzwyvyvyuyuyuytzuyuzt|twtqwryvszr{w{w{pzqztyxyzw|v{{zy~yvysyuzw|y}zz{}~zv|usyq}w~y~se_ca{fqrqusysyuyuwuzuxutvswtwuyxyzv|x|yz|}~~~}{z{~~}}u{hzp{{{~{~ztmv~}}||||}}}|}}}}}~}~}z}{|~}|||{|}}}}{~xwxyx~q{x||}}}}}}~|y~r~v~|~~}}}~~|~oa}y{yyy~x~v}z}}|y}yzuuuwtrsut~y|z|}}wwutsrrqqpoooonnmkjihns{|{zzzz{||zskgffegmvyz~{~{~|~|yx|~~~~~}vtxzzz{|}zwwwwumhi~w}y|r|x|{{{|{{{z|yyyyyzz}z|zyxyy|x~p~r|~{yxvusttssqoqpbRJHHIIIIIKLIIHHIJNRUW[[_jlmmmlllmprstvvutohb_^^_`cfhim~orrstvvwyz}{z{{{y|w}x~|~|zxxxxxxyzy{|}~~~~~~}}}||}}}|~}~s~k}`}R~j~wsw~{~}~~~~~~~~~~~~{~|~}rl~_}a}x~{wtojozvosyxy}|||~{z|{}~}}}s~n~x~v~m~j}m|i{MzIzS{m|i}n~s~x~z~y~x~v~s~rruvrot~|~}~{qlosw~{}~}}}{~y~y~{}}|~|~}}}}}}}}}}}}~~~}~{~|}}~}~~~|~y}z}|}}}}}~}}|||||~|~|||z|{|}|||||}}}}}}}}}~~}}|{~|}}}{}z}y}||}~|~{~{~{~z~y~x}x}y}y}z}{}{}|}}||}{}z}z}{}~}~|~z~w~x}y}x~u~su~v~w~y~{~{~|~|~|~{~z}y}z}|}~}}}~~|~|~~}}}}}~}}}|~z~y~z~|~|~|~}~}~{~y~x}{}|}|~{~{~{{{|||~~~}}}z}y}y}z~|~~~uqvz{{zzyxxyyzz{yyz{|~}~}yvttvx}~}{zz{~}x~vxzzzxxxz|}~~}}||{zyyz{{||{zzz{}~~~~}}}||||{|}}}|{|}}zuqrvonx}~|{|{{yyyvstzxqpuz~~|sknuuvustutpkiiorsrssuxz{xz{{zyyz{{ywvupijmb[^gmr{||x}spnq~v|{{~zzz~z}z}z}z}z~{~{~{~|~|}|}||{|{|{|{{{{|{|{|z|y|y|x}v|u|u{w{z{|{}{~{~||~yuqnmllllmmnps~x~}}||{{~z~zzzzzz~z~z~z~{~{~|~|}||~{~zyxwvvu}w|y{}{~}~}~{~zvrnlm~q~t~u~w}y}x~xwvutrps}w|z}x}t}s|uzwyvyuztztztzuzuzu{u{uzrxoyozp{s{w{u{q{qzryxyzx~x}}{yyuyszv{x}y~yz{}{wvzyw~xxo_X]Z}^rmpsrzt|v|wzv}vzuuwuyw|xyzz|z}z{|}}~~}~{yy}~~{~v~r|w{|{~{tlv~}|}~}}}~}}~}~}~}{||||||}|{|}}}{}y~z}|w~q{v|||}||||}||z{|~}}}~~}~yp}{{{{{zw~z}}{{{{|~zwtqlklsq|zu{||uvuutsrqqppooonnmljihms{{zyxyzz{yunheeefkry{{~|~|~}~|~xu|}~zsswwuxz|}ysqtx{vdav~~|v|{||{{{zzz~zxy|yyyzzzyxxxyy|ulm~z|zxwtsssrrqrvlSNIGHHIJJKKKIGGHILPSX[^]`lmklmnnnorstuvutrkeb``acehjkknqsstuwwyz{~{z{z{y|y|{}~~}{yxxyyxxxyy{|}~~~}}}}|{|}}|~~~|~w}q|i~svsv~|}}}}~}~}~~~}~y~y}}oi~_}h|~rfehhhvwttwyz~}||{{|{}}}}~y~~~w~w}}{u{X{G{[{|z}y~w~y~y~{~{~x}t}r}t~xxss~z~|~{~xtnls|~~|}|}{}y}y}z}|}}}~}}}~}}}}}}}}~~}~|~{~{~{~z~y~x}z}{}}}~}}}|||||||||~|||{|}|||}}}}}}}}}~~|||{z~{~z~x}z}||~}~~|}{}{}{}z~y}x}x}y}y}y}z}z}{}}}}}}}|}|~{~{~~~}|y{}}~zvtt~u~w~x~y~z~z~{~{~z~z}y}z}|}~}}}~~|~{~~}}}}~}z~u~t~v~{~{~{~}~}~|~w}t}y}z}z~{~{~{{z{||}~~~~~~}~y}y}{}}~}~}~~zrpwz{{zzyxxxxyz{|||{~|~|~|~{{{||~|{{|}~~~~|yw~x~{~}~}}||{zzyzzz{{{zzz{|}~~~~~}}}|{{{{{zyxvqpopppos{}{yx|~|yvuy{xolptzw_NT_ciqsuuvrl~d`gqssqpprvwvwyyyyxyzzyyzyqhileVRcrq{z|t~okilpv}x||z}z}z}z}z}z}z}{}{}|}|}}|}|}||||||}|||||||||z|y|y|y|w|w{w{x{{z}z~z{|~}{wrommllllllmosy~}}}||{zzzzzz~z~z~{~{~{~{~|}||~{~zyxwvwwv~w}{|}|~|~|~|~}|~zwq~l~j~m~p~u}y}z~{~zxxxvojk}q~vtpq|t{uzu{t{s{s{s{u{w{y|}|{|t|k|l{s{u{r{p{n{qzyz}yy~}y}wpxpyv|yyyz{~~}}}wvzzxre`db~fursxv}xyy~ywv{x{{|{vv|||}{{|}}}~~}}}~}yz}|}}~}}}}||{tlw~~~}}}}}}}}~}~}~||||||{|}}}}}}}~|{|}}|||||||||}|}}}}}}~~~~}}{||}~~}~||y|rzxrqojkotmtsp{~wpttvutsrqqppppommljiintzzyxxxyzyupiecddgnv|{}|~}~}~}~}~z~x|}|~}|}{uqtwwruy~zporxrgz~}z|}|||{zzzzzyz{zzzzzyxwwxxy|vnnz}zxwtsssrrrrrbLLIIIIJKMMMKIHHIKNRW]`babhlkkmmnpqrtuuutspiedcdfilppppqsuuvwyyz{{}{y{x{w|z|}~}}zxxyyyxwwxy{|~~~~}}}}||}}~}~~}~}}~}yxz~}|||~y~z~vtyyl~h~_}n}klurmjowzrlkfn}~||||}|}x}u}t~~{}z}~||{n|Y|i|||}}{}~}~}}}}}z}v|t}x~}~}~y~|~~zuqmlow~}}}}{}y}y}z}|}}}}~}~}}}}}}}}}~}~|~{~z~z~z~y~y}z}{}{}|}~}}||||||||||~|x|x|~||}}}}}}}}~~|{z{|~~~|~y}{}}|}}~~}}|}{}{}z}z}x}x}x}y}y}z}z}{}z}{}|}}}|~|~{}|{yz{{xvuv~w~x~x~x~y~z~z~z~y}z}{}|}}}}}~~}~{~}}}}}~~|~x~w~z~|{~z~{~{~z}x}w}y}z}z~z~z~{zz{||~~~~~~~{~|}}~~|~|~|ztxy|{{zzyyxxxzz|}}|~|~||~~}~|zyy{}~~~{~x~x~{~~~}}|||{{zzyyz{{zzz{{|}~~~~~~~~}{yyyyyxtnheehqwz|{ywuw|}{wxxxwtqnms}xcI@GMVcnuvuq~m~f`cnvxwuqqsrruxyzzyxyyz{}}ujlts_O\\w~{x|t~oliijor~w|{z|z|z}z}z}{}{|||||}|}{~{~{}{|||}|~|~|}|}|||||{|{|{|{{{{|{|z}z~zz{~||~ytrpooonnlkkloty~|~~}~}|{zz{{{z~{~{~{}{}{}|}||}{~zxwvuvyywx~z}|{|||}~}~x~p~k~l}o}s|y||}}}}}{~y~yxvqp~prpmmq}s|u|t|s|r{r|t|x||||}y}k|m|t{v{q{j{i{s{}z}z~{~|xwufvlwwzy~yyz{~~}zz~~wv{{zwolooszzz|z~{{{zywx|~vv{}|}{|}}}}}}}}}zxyzz|}}}}}|smy~~~}}}}}}~}}}}}|||||||||}}}}}~}}}|||||||||}}}}}}}}~~~~~}~}|||}}}yx~uirrl~onkn~tymoomz~rntvxwutsrrqpponmmlkjintzyyzzzzxvqkgeddejsy||~}}}}}~}~}~}}}}~|{{{yvsqpuwvqrw}~sqry~~s}~}|}||{{zzyzz}{~{}{}zzzyxwwwxx{|ut}}{yyuttttrpk_SOLKKKKLNOOMKJIIJLPU[acefefjkilmoqrstuuttqnifffhjnqtutstuwxwxzz|||~|z|w|w|z}|}||zxxyzywvwwy|}~~~}}}}||}~~~~~~|{}~}|{|}~~z|~usxzq~n~g~q~xpw~xsmgwytpofn}|||{}q~f~VXmhh~s~}|y|n|w}{|||}}}}}}{}x}w}|~~~~}~~wplhekw~~~~~}}|}{}y}y}{}}}~}~}~}~}~}}}}}}}}}}}~}~}~|~|~{~{~z~y~z}z}{}}}}|||||||||||{|z|~||}}}}}}}}~~|zy|~~~~}}}}}|~}}~}}|}|}{}{}{}y}x}w}w}y}z}{}{}z}z}|}}}}}}~}~}~}}|||{xwxy~z~y~x~w~y~{~z~z~z}z}{}|}}}~}}~~|~|~}}~}~~}}}|~||yyy~z}y}x}z}|}z}z}z~y~y~yyz{|}~~~~~~}~}}}~~{~z~z|}~~}|||{zzyyyxyy{}~~~~}{~}~~~|zz{|~~~}~y~x~y~{~}~}}}||{{|}{z{|||{{|{{{{|}}}}}~}}~~~~~}{yxxxyyunhe\\]l{zwttx|}|{{ywxzuvzvnhlz{mV;:BRfottr~p~n~mfgqwzzxurpnpw|||{zyxxyyz{xst|~pbgw{zx|u~qmjhikns~x{{z|z|z}{|{||||{|{}{}z~x~x~x}{|}|||~|}|}|}|}|}|}||{}{}{|{}{~{{{|}}{}w~uuutttqnkjjkoswz~|}~|{{{{{{~{~|~|}{}{}{|{}||}|~{yxvuuvxwuv~x|}|~{{|~}}}|}y}w}v}u|u|y{||~|~|}|||{|{}z~x~v}u~vsmknq~s}t}s|q|q}r}w}}}|}~}w}q|u|y|u|l|p|v|{{|{}{}{wqt`tmuzyz~zz{|~{vv}xw||z~x~vu~ts~t~v}w|{||{{{yvvz~ww{}|~|}}}}}}||||~~zywx{|}}}}zqmy}}~~}~}~}~}~}}}}|||||||||}}}}}}~~}|||||||||}~~~}}}}}}~~~~~~}|||}|{xupoprom}l|l~nr{wqqqx~spwxyywutsrrqponmllljhlqy{z{||zusmhfddeeow}z~y}{}|~}}~}~}~}~}~~|~zz{wokoqtwwtsw~}~~tqptz~{~{|~}~~}}}|{{zzyyz{{w{yz{z}yxxwwwwx{~||~}|yuuvwsiaYSONNNNNNPQQQOMKJJKMQW]bdghhfgjmnoqrstuuttsoligggjlortuuuvwxyxyz{}}||||x|x}y}{}{{yxxyzywvwxz}~~~~}}}}||}~}}~}||~~}|||}~~||~}|usx~|~}~|~roxtsrprsokqwvwstx}||}|{}dQJN]WQU~m~~}y}w}x}||{{||}}~}{~z~z~}~~~}~}~slkihgz~|~|}{}y}y}x}x}x}}}~}~}~}~}~}}}}}}}}}}~~~~~~~~~}~}~{~y~y~y}{}}}~}}||||||||||||||}}}}}}}}~~|{{}~~~~}}}}~|~}~~}}|}|}|}|}|}y}w}t}u}x}{}|}|}{}|}|}~}~}~}~~~~}~~~~}{yz|~|~}~|~z~x~{~x~{~x~y}{}{}|}|}}}}~~~}~{~z~{~{~z~{zwsuwy}y}x}|}}}{}{}|~z~x~uy|z|}}~}~}~}~}~~~~}}~}~y~x~z}~}|||{zyyyxxyz|}~~~}z{|~~~~~~~}}}~~~~z~w~y~{~|~|}}}|||{|}}}|{|||}}}}|z{|}}|{|}}}~~}~~~|yxxwvvurog\\Tey~~zxvvxyyzxvvvxwsv}xnceqxvm[B7CYjpuw~v~t~p~m~k~mtxzzzywsoqy~~}|{yxxxwxyz{z|{wutvvzy|u~pljhiklqv|y{{{{{|{}{|||||||}{}z~x~v~w~z}}}|||~|~|~|~|}|}|}|}{}{|{|{}||||~|||z|y}y~zyyxurmkjjknrx{~|}~||||||~|~|~}~|}|}{}{}|}}}}|{zywsrtussty}{|}{{~|}|||||||{}y|x|y|{||||{}{}z}{}|||{|z}y~xtolknq~t}u|s}q~o~p~t}{}}}~}s}p|y}{}t}v}v}y|z|{||{vwtntxt}x{}{|}~}~ztt{zy}~|~|}{}z~vrqqrs}x}z||{yvvz~xx|~}~}}}}}~~}}||||~}{~ywvvy{||}zqn{}}~~}~}~}~}~~}}}|{|||||||}}}}}}}}|}||||||}}~~}}}|}}~~~~}|||||xurpqtus~q{p{t|qpqstsv{~zmjtyzzxwutssrpomlklllhhow{||}~zrnifeddgirx}y~y}z}{}|}|}|}|~}~}~|zzywqkimryzyw~z~~~|wvvy~|~}~~~~}}}|{{}{zz|zyyz{|{x{|z}y~xxwwwwwx{~{vtuniaZUTSRRRRRRSTUTTRQNLJKMQX]acijhhhmrprsstuuutsqmkhggilmoqrsttvwxyyyzz|}|}~}y}z}||~|zzxwxyxxvwwy{~~~~~}}}|||}~~~~~~~~~}}~}}~|||}}~~}xyxyutt~x~zztpmvx~q~lnmjjmuy|zz|}}}z}{}~~hREIVSPN^z~{~z}z}{|||||}}~~|~{~{~{~z}z}x}z|vqnnoq~~|}|}z}x}v}u}w}y|}}}}}}}}}}}}}}}}}~~~~~~~}~z~y~y~{}|}}}~}}}}}}}~|||||||}}}~}}}}}}}~}~}}}~}|||~~~~~~{}}}~|}~~}~|}|}|}|}|}{}x}s}s}w}z}|}}}|}|}}}}}}}~~~~}}~~~~~~~~~~}~~~~|~~|~r~r~u~x}{}{}|}|}}}}~~~}~z~x~x~x~y{|ywy}|~{}y}|}}}|}}}}~|~}wwxy{{y~y~y~z~}~~~~~ywy|~}}~~~~}}{zyyyyxyy{}~~|yy|~~~~~~}{{{{|~yvy{{|||||||{||}~~~~~~~~~~}||}~}{{{{|}}}}}~}|{zyxvrnkiii\\bz}}zzzzxsvywuuw{~{~z}yqgdfmrrmXDZqrrwy~x~urnm~qwxyyz{|zvuz}}|||{zyyyxy{|}{zxyxxvzz|t~njjjklnrv}y{{z{z|z}{}|~|~|}||}{}y~x~x}y}|}~}}}||||~|~|}|}{}{||||||~||{~{|{|{{{|||}|}|~{~yvtrpopruyz~{}|}~||||}~}~}~}~}}}}|}|}|}|}}}~|~|{zvqoqqqqtx}z{}z}{|{{|{|z}z}z}y}x}y}z}{|}|}{}{}{|{||{}z~yvrnkmor}w}w}v~r~o~n~r~x~|}}|}x}{}}||}z}s}u}w|{||{vt~tu}y{}{}~~~}zttz||~|z~{}|}{tkjlmp~v|zzzzywuz}xw}}}~~~~}~~~}~{{z{z|z{zzzy|xxyz{{{{xqo|}}~}}~|~{~}~~~}}|{|||||||}}}}}}~v~r}z}~||}~}~}}~}}~}}||}}}~~|{{|||y~v~t}s}s}uurnktwunmptz}}|karxzzyxwutsrpomlkkllijmvyyz||wnjfdedehmuxxx~y~x}y|z|y}z{{zyzzyvrlnu|~|z~}~~~~z~xxz~{}}}}}}}|}|||||{z|{|zzyyzz{zyxwwvvvvwwz}}}~scfg`WTVZ[ZXWUTTTUUUUUVUPLJKMQY^cfkjgeimpqsttuuuusqoligfgilmopqrssuvwxxyyzz|||}z~}}|zxxwwwwwwvwwy{~~}}}|||}}}~~||}}}~~~}|~{||}}|zvtuwuvv~x~x~xzyr~}~y}s~rqmhlrvz~~|~}{}~}~~jBDTVJPl}~}~{~y}x}z}}}}}}~~~}~{~{~z}z}y}t~v}wrmkow~~}}}|}{~y}w}w}{||}}}}}}}}}}}}}|||}}}~~~~|~z~z~z~{~|~}}}}|~{~{}}}||||||}}}~}~}~}~}~}~}~}}}~}~}~}~~}||||~|~|~|~|}~}}}~~}~|~z}z}z}{}z}y~w~w~{~~~~~}|}|}}}}}}}}~}}}~}}}}~~~~~|~x~w~r~r~v~y~{~|~|}|}}}}~~~~{~x~x~w~x~{~|~~~~}~{~z~|~}~}~}~}~zyuz{zt~r~s~y~~~~~~|~v~uy~}~{~|~}~}~}|{zyyyxxyz{||zxy|~~~~~~~~~|wwy}|xz{{{{{zz{|||}~~~~~}|{yyy{|}}}}}}}||{zxtojd`koq{}}|{||xsuyyxxy|~}zyvrkaepvsiar|yvxxwtpnpty{{zyzzzyy{{{{|}}|{{{zz|||{yxyyyyzz{w}t~qpoopqsv~x|z{{z}z~z{{{{~|}||}z}z}{}|}}}~}|||{z~{~||}{~{z~z}||{{~{}z}z}z}{}{~{~|~}}~{~z~w~v~uwz|}|z~z}|}~|||}~}~}~}~}}}}}}}}}}}}}}}}}}~}~|~ytppqqqrtu}z|}{z}{||{}z~y~x~x~y~z~z|{|{}{}|}|}|}{}{~z}xvrmklnt~{~|zt~p~n}o}s}x}|}{|y}{~|~z~t~u~w|z|{zwtuw}{z{~~}ytty~}}|yw~x}z~ztjfkjnuzyw}xzyvuz}xu{~~~~|}~~}}{wzuywywzyz{z||}~}|zzzxpp{~}~~~~~|~zyz|}}|}~}}~|||}}}}}~}}~~}up~x}~|}}}}}}}~~|zz}~~}|||}}}~~{xz}~|z~y~x}t}sutspknstsrrtxzz{sqzvwz{yxwusrpomlkklljkmtvwxxvqkhfeeefinwywxyw~v}v}w~wxyxxz~{zzytty}~{z{~}~|~y~w~u~s}s|u|v}u}t}t|z|||{}z}z{zzyyzzyxxwvvvvvwwy{{zxuj_`^^[\\`cc\\WTOSXRPPPTUXYSNLNQU\\dgiliefmqqrtttuuutspmjgeegilmnoqrstuvwxyz{{{zzz|~~}{yxxwwvvvuvwxz|~~~~}}}|||}}}~}|{|}}~~}}|}|}}~~}wxwvwyyxw~w~}~z~~~y|t~ttplu||{}~}||||}~wOJOOEQ~~~{~x~u}v}y}|}~}~~~~~}~{}z}w}w|w}x~y~yonokgo~}~}}}}~}~{}z}{|||}}}}}}}}}}}}||||}}}~~}~{~{~{{~{~}~}~}~}~{~z~}}}|||||}}}}~}}}}}}}}}}}|}|}|}|}}~{z{{z~z~x~{~~}}~}~}~}~|~z~y~y~w~v~w~x~z~}~~~~|}|~}~~~~~~~~}}}~}~~~~~~~~~~~}~~z~{~|~|~|~|~}~}~}~~~~~~}~{~{~z}z}|}~~{|}~}~|{z{}~~}}{{y{||v~r~q~x~}~~}}|~w~wz~}~{~{~|~}}}|{zzyyxxxyzzyyz}~~~}}~~~~~|zxz}||{{{zyxxz{|}~~~~}}|zxxxy{|||||}}~~}{ywvunilx~||}}~~}zxxyxvuxxw{|wtstpjirvwu{|yzwvsq~nmrvwy{{yxwxxyz{{{|}}}}}}|||||{zyyzyyzx~y|zz{x}t~srqrtvx}z||{~zzzzz{{~{~|}|}}|}|}}~}~~}~}|{{{}|{~zxusuz}}{z~z}z}z~z~z~z~z~{~|}}|}|}z}y~x~x~y{|{yx~{}}}||~}~}~}~}~}}~}~}~}~}~}~}~}~}~}~|zxxxvtsrrtw}|{~{~{}{|}z~y~wwx~y~y~y}z}z}z}{}{~{~{}z}z~wsnjjlrz~{ztu~u}r}p}u|y|{|z}{~{yvv~w}z}{zwuwy||x{~}zutxz~ywtu~z~ztjjmlo}vyxtzv~yxvuy}ytz~~}}}{{}~~~||ywxtytzxz{z~{{}~|zzzyppz|}~~~}zyyz{~~}~~|}~}|}~~}~}{}{}|}{ww}}~}~}~}}}}z~|zyyx~x}z}}}}}}}~~zy{~~{vzy~ttz{{vtstuutsvwwwxyvrory{zyxvtsqonlkllkjkmruvuqmkigfeefhkouwwxxvs~s~uwwxxxyz{{zywy{|zxy~{~{~y~x}u}p|l{p{s|t|t|v}x}}|~{{y|y~z{~{{{zzzyxwvvvvwvwwxvrme_^_a^^_`]ZWSPNQTOMNOSTYZSNMORW^fikmjhinrrrsstuutsrolheddgikmnoqrttvwxxy{||{zzz{~}{yxxwwvuttuwy{}~~~}}}|||}||~}|{||}}}~|~}}~}~~~}{vyxzyyzvt~t~~~y~x~~~~~z}ruvqnz|~|}}|||||}~~tumS>Wn~~~~{~w~v~x~{~|~~~~~~~~~|}{}z|w|v{v|y}z}v}k~otrhj~z}|}|~}~}~|~{}{}||~|}}}}}}}}}~~~}||||}}}~}~|~{zz{|}~~~~~}~|~{~~}}||||}|}|~}~}}}|}{}{}|}}}}}|}|}|}}~|~zyyyyyz{|~}~}~~~~}|zyxvu~v~y~z~|~~~~~}~}~~~~~~~~~~~~~~~~}}}}}}}}~}}~}~}}~~~~~~~~~~~~~~}~~~}}~}}}}|}{}||~}~zz|{~zz{|}~~~}|z|}}xwvwz|~}~}~{~z~z|}~}~}~}~~~~}}||{zzyxxxyyyyyz|~~~|zz|}~}~}~~~~}{{|~~~|{~}~|{xvwx{}~~~~~~~~~~~}||zyyyy{{||||}~~~{xwy~~trz}}}~~~{zxyxvqorvyzvrqsqkimsvtpmqxurrpm~r~x~zyzz{xvvwxyzz{{|}}~}}}}}|{{{zyyzyxyxxy}z{{x|u~tssuwy~{|}{zz~zz{{|~|~|}|~}}~|~|zxx~z~{|}}{wtrpmjltz|~{{{z~{~{~{~z~{~{~|}|}|||z}x~v~uuvvxy~z}}}~|~|~}~}~}~}~~}~|}}|}}|{yvtuy}~{yxussrv~z|||~|~}{~z~wvwx~x~x~yyyyzz~{~|}{}zvqljhlsutps~u}v|w|z{||}|~}~~|zxwx~z{zwwz~|z~w{~~}zutwv~uspr~x~y~vo~r}u|t}uzyvwrwt{xyvuz}yrx}~|z~|z{x|~|}yxxuyrzxz}z{{{}|{~zz{zoo{{}~~}~}~{ywv~w}~~}zy}|}|}~~~~~|}w|uuw~~}~~~~~}~x~{~~{z}~}}~}~~~}}}}}~~~}yvtyxtu|~~}~zwuutsswzxvusqqnjmw{{{xvtsqonmlllkkklorrpmjihgffehlnnptwxwtq~q~uz{xwxyyzzzyxwxwvvyz~{~{~{}v}m}h}l|s|v|w|x}y}}}~|}{{yxyvzv{x{{|||}{zzyxwwvvwxwtplfbdcbbbccba]URPLKOLLJILNQTXXSPMPU]djllljjlpssssstutsroliecbcfhkmnortvvxxyyz|~~|{{z|{yxxxwwutssuwxz}~~~}}}}|||}||~~|{{{|}~}}~|}}}~~{zzyzxyzyzqn~n~}~t~k~o~{~w~o~kxzpq|~~}~||||||~||}|~}~}jUkx~~y~w~x~{~}~}~~~~~}~}~{}|}||x|t{t|z|y|p|k}s}|zpj~s}z}y~{~}~}~{~{~{}|}}}~}}}}}}}~~~~}}~||||}}}~~|~zyzz{|}~~~~~~~}~}~}}|||~|z|z||}|}z}y}y}z}|}~}}}|}~}}~}~xwxxxyz{||~}~~~~|zyxxxy~{~z~{~~~~~~}~}~~~~~~~~~~~}~}}}}}}}}}}}}}~~~~~~~~}}}|~}}}}~}~|~|~|}}}zyzz~yz{}~~}}}~}zxxy{~|~|~{~{|}~~~~~~}~}~}~~~}}}|||{zyyxxxxxy{|}}|zxyz{~{~{~|~~}}~~|}}~~~~}xuuwz}~~~~~~}{}~~}|{|||||||}~~~{xwy||ww{}~~~~~}|{yyyxpgiqxyvssrmhcfknmbPQesrrqu{~{{zywuuwyzzz{{{||}}}}}|{{zzzyzzyxyyyxy~z{|x}vttuwz~||~{zz~z~{~{~|~|~|}}}}}}}~{ywsosuxuqomljiinu{}~|~{{{{~{~{~z~{~{~|}|||{}y~w~tsstwy{~}}~}~}~}~}~}~}}~}|||{{|{yvrnotz}}}}}|ywtqqr~v}z}{~{~y~wvvww~x~xxxxxyzz}z~zwsoliijknkmp}v||{~{~||}~}{yxxz{ywx{~}zv{~~}zvtvt~rqnow~y~v~o|lxsvsxrxzwzw{x~yyv}ty}zsw{~z~y}}{y{x|~|~yxytyrzxz}zz{~z|zz|x~y{zooz{|}~~~}zw~n~q~y{{y}{|}}}~~~~}~x}p|r}st~~}~}x~z~|{wvz|~~~~~}~}}}}~vqvxywqpvz||y|v}r~nosy||xsmhknhlv{{{ywutronmlllkkkkkmmlkihhhgfejsttrvxxuq}i}f}ny~yxxxxxyyxwwxwuw~z~|~|~|~|~y~r~m~o~u}z||||}|}|}}|}{z{v{r{p{r|u}x}{|{zyywvwwwuofa`begfdcdedb`]WTPNPRIHIKNOQRWVRPMQV_fklkkkloruttssttsrpmjgcaacfhlmnqtwxyzz{{|~~|{zyyxxwwwusrsuwwy|~~}|||||||||~}{{{{|}~}}}}~~{uuwxyuporqci~k~|~skh~n~h~g~ovjmv~~~}~}}}|{{||z|{~|~}yprv{|{x~y~y~|~~~~~~}~{}}|~|}|z{z||~|v|p|s|w~uvk}p}w~v~w~z~{zz~z~{}|}}}}|}}}~~~}~}}}|~|||}}}}~|zyzz{|}~~~~~~~~~}}|||}|{|{|}}|}z}y}y}z}{}}}|}|}}}~~z~x~xwxyzz{|}~~~~~~|zxwz{|~|~{~{~}~~~~~~~~~~~~~~~~~~}~}}}}}}}}}}}}}}~~~~~~~}~}~|~}}~||~|}}|~{{yxyz{~{|}}~~}}}~}{xxy{~{~{~|}}~~~~}|||}}}~}}}}}|{zzyxwxyyz{||zyxxz{z~z|~~~}{yy{~~~}~~yvvxz}~~~~}}~~}|z{}}}~~||}}~~~zxxyyvux{}}~~}{yxyzyyxxodhrwzyxwqhabnmgkeUFQmvqqv|{z|~}zvttwyz{z{zz{{||}}|{z{{zzxyzyxxzzyxy}zz|x~uuvwz~}|{z~z~{}{}|}||||||||||}|~zxuqoqrtsqonljihilrw}||~{{{{{zz~{~{~|||{}z~xuuuvxz{~|}}}~}~}~}~}}}}~|{{{zzzzzxuqnpsz}}~}|zvrortuy{zxvvww~xxxwwxxx~z~yxtqnkiihiggl~u|z|z{|{|}~}{yxxzzywy}~zu{~}}zwuvutspquvtp|qtvsswvz~{{zzy~v}uy}zuvz~x~y}}{{{{}~}~zwxtyszyz}zz~yxyxzx|u~z|znpz{|}}~~~|z~}}y}z}~~{|{}}}|z{~{|~{}}||||v|}}{}~yz{{xvvw~z~z~xy|~~~~~}|vko|}zuqopuvvtokp{~~zsnilpmpv{{{ywutrpnmlllllkihjjjihhiihggowyywxxwup|e|Z}c~t|{yxwwwwxxxxx~y~z}|}|}}}}~}~|{wtrt~z}~}}}}}~|~|}|||y|v|s|p}q}v~|}|zzyxwxvne_^_bghc_aceffc^\\VSNNONHGJLPQQRTTRPORXagkkjklnruvvutstsrqnkhfa``cgjnmmquy{{|||}~~|zzyyxxwwvusrsuwwx{}~~}||||{{|||}}~|{zz{|}~}~}~|xspqvwpkdqq`mq{{xs~k~b~l~x}mimtz|||}~~||}|{|{}{}{~}{xuvz{{z~z~x~{~~~~}~{}}|||{|||||t|o|q}n~v~m}o}u~t~v~x~yxyy~z~{}}}~}|}}~~~}~|~}}}}~}}}}}~~}|{zzyzz}~~~~~~}~}}|}|}|||||}}}}}}|}{~z~z}{}{}z}z}}}|}z~w~x~y~yz{{{{{~|~}~~~}~|~zyxy{||~{~y~y~z~|~~~~~~~~~~~~~~~~}}~}~}}}}}}}}}}}~~~~~~~~~}~}~}~~}|}~|zxxwwx{~{~||||}~~}}||}}|zyyz{{~{~|}~~~}||||||~|}~~}|{{zzyxxyyyz{{yyxy{|||}~~~~~}zxxy~{}~}~~|yyz|~~~}|||{zyxxyy|~}}~~~~|{{zyusx{{||}{wsqtwyxwvphjrvz|{xsj~`~d~qlde[UXcprrpsvuw|}yvstwxz{zzzyyyz{||{zz{}|zxyzyyy{{zyy~z||y}w~w~w~x~z}||}{~{}{}{||||||{|{|{|{|{}{~zwtrqqrttsqomlkihims~y}||{{{{zzz~{}{||{}{~yvvvvxxyz~{~|~}~~}~}}}|~|{{zyxxxyzywsrosy}~}}~{vqmkpu{ywvvw~wxxwvwww~yyxvromjjijjjnu}w|v|x{}|}~~}zyyzzxwz~~zv{}}|zwvvvvurrrrsw~w|vrzw~{{x{xz{zyw}vy|zuxy~y}x|w{z|}~~{xytytzy{yz{yvxoyvyt{q}z~~znpz{|}}~~~|~x}{}|}{}}}~|}{}|}|~{~u}u|y|}||||}{|{zxwz~|~|~zz{zyxy|~x~q~zwz~}~~~~~}~|zrnu}~zusrtxwqqqns}~}~~yttwwyyy{|{{ywutrpnmlllmmkihhiihhhiihhjsyyyyyxwvq}i|_}lx~u~z~{ywwwxxyzz~z}{|}|}|||{|{}{~{~{zxuuy~~}}|~|{|~|}}y}x}v}t}t~w}}}{zyxxuja`aehheb`beeefheb_ZSOMMMKJJLMQRRQRRQPRW]cgjjjlnqtvwvutssrqoljgda`behlponrv{||||~}{zzyxxxwwvttssuvvwz|~~|||||{|||}}}|{zyz|}}}}~~zwvplstojjt|s}z{|~q~j~o~xwsqswwvvxxyy|~}}}|{|{}|}|~{~z~yvwz||z~y~x~{~~~}~{}||||||||{|n|k|j}m}o}p}p}r~u~w~w~wxyy~z~{~}}}}}}~}}~~}~{~{~|~~}}}~}~}~~~~~}{zyyz}~~~~~~~~}|}||{|{|||}}~}~}}}|~|~|~{~z~y}y}y}y~y~w~w~y~{~|~|}}||~|~{~z~w~u~u~v~xyz{|~|~|~y~x~y~z~}~~~~~~~~~~~~~}}}}}~~~~~}}}}}}}}~~~~~~~}|~}~~~}~zwuuwyz{~|~|{{{|}~}{zz{||{zzz{{{{~||}~~~}}|||{{||~}|{{{{{zyxyyyyzzzyz|}~}}~~~~}}}}|zxy{~~}}~~|{|~~|{{zzzxwvvwxy|}~~~~}{usx{{{{{zuqoquxxxvvrkovz}}|{~v~h~]~`~dc]RFRifgkrvvwz}~{xvtuvxz{{{zzyxy{||{yz||{zyyzzzy|~|{zyy}z{|z}y~y~z~{}{}||}|}{||{|{|{|z|z|z|z|z}z~yxvtssstuusqpnljhgjou~y}||~||{{zz~{~{}||}{~ywvvuvwwxxyz~|~}~}~}~|~{{zyxwwxyzzxwqnrw~}|~|~~{vrmiiktyxvvw~xyxwwvvv~vvtsqpnmkihghjort~u}z|~}~~|zyzywvy}}zw{|{{zwvvwwvttuuuz{}zw~zt|o{n{s{{ywwz|{vsvw~v}r|t}|~~~{zzvzu{v{wzuypysyyz{|z}~~znpz{|}~~~~{~w|{|~|||||z}z{zzozlzxz}{}||~|~{}}{wx~z}|}yy{{zyxy~{~r~sty}~~~}~|~{~zwty|zw~t~s~swzxstwt~tu~z~|~|{wtv{~~~~~}||ywutrpnmlllmmljhhhhgghijjkmuyyyzzxxxvs~ltyv~z}|~zyyyzz{|~|}}|}|||||z|z|y|y}{~{~}|zy{}}~}~|||~|}~y~vw~w~x~{|{zxurjdabfhhhfebbgkhggid_aZOMMMKKKKMNRSRQPPQRV[beefilnpsvvwvttrrpomjgebbbdhloqqqtx|}}||~~}|z{{yxxxvvuttssuvwxy{}~}|||||||}~}}}}|zyy{|}~}|~{{{leloopokzzqnw{~r}p}u}{~}|zxyukhkmmorvy}{|}}}}|~|~{~zxx{|{zy~y~{~~~}~{}z}|}}||||||s|k|h|i}k}o}r}u~u~w~x~yz{|~|~}~}}}}z}z~z~~~~~~~~~~~~}}~}|}|~~~~~|zxxy|~~~~~~~}}|}{|z|{||}~}~}~}}~}~}~|~{~z~y~x~y~y~x~v~x~{~}~~~~~~}~}~}~}~{~w~r~p~q~t~w~y~z~{~|~}~}~|~|~|~}~~~~~~~~~~~}}}}}~~~~}~}~~~~}}}}}}~~~~~~}}}}~|~}~~~}~{wvuwyz{|~|{zz{|~}~||{zzzzzyyz{||||||}}~~}~~}|{{||||{{{|}|{zyyyyyyzzz{}~~~}|{zzzzzyxy{~~}}~~~|{zzzzyxxyz{{|}}}}~~~~~vuz{{z{{zwsqprvxxwxtqsw{~~~~}~q~^~[~ce`]LCJOYfv~|}~~~~~}zxvvwwxz{{zzzyxxz||zyz{{yyyyzzyx~}}|zyxy~{}{|}|~{~{~{~{~|~|}{|z|z|z|z|y|y|y|z}z}z~zxvuttuvv~vutroligilpuw~z}}}~|{{z{~|}||}{~ywvuuuuuttvwy~{~|~}~|~|~{zyxwwwxz~{~|{vqotx|}||}}{xvrmggltvww~x~xyxwwwvu~srpoppqpnmkihhikoqu}z}}}~~|zy~ywvx|}~zw{|z{zxwvvvuu~wzz{z{z~{}{~l{j{k{q{zzxw{}|tnot~v}q|m~v~~~|}{z{w|x|x{uztz}{|}}|}{zopy{~|}}}~}}~}}~}|}y}y|}||||||~x|w{zywyvyyyyz||z~zyvy}}~|xxyyvtqjw~y~y~y{~~~~~}~{~z~|}|zwuu~u~t~u~{~|~y~r}q}v~x~u~q~v~z{{z~x}y}{~~~~~||}||zwutrpnmllmmmlkihgggghiklpw||{{zyxxyyxxzzx~{}|}{~{z{{{||~}}||}|{|z|{{{{z|{|}}}~~~|~||~|~}||||}~y~u~u}w}{|~zyvof\\\\bknmjebdgikllhgffaacWMNMLLLLMMNRTRPPPRTY]bcdgkoprtvvvutsqpnlifdbacfilqqrsuwz}}}|}~~~}||{{zzzzyxxwvvuttttuwxyz{{}~}{||||}~~}}}~~}{yy{|||~{~|~}n]bfjoqgxy~okvz~s~v}z}~}}~x~sstqkf`]^eiov|}}~}}~}~|{zyz{{yy~y~{~~~~~~|~x~u~u~y}~||}}}{|y|o|h|e}h}m~t~x~x~x~y~{~|~}~~~~}~}~}~~x~v~t~w~z~|~}~~~~~~~~~}~{~|~}~}{yyz|~~~~~~~}~}}}}}}|{|{|z|{}~}~}}}}~}~}~}~|{yxy~z~z~{~}~~~~~~~~}~}~~~}}y}s}p}p~t~w~y~y~z}{}}}~}~}}}}~~~~~~~~~~~~}}}}}}}}~~~~}~}~~~}}}}}~~~~~~}~|~}~}~}~}~~}}}}ywuwyz{{~{{zz{|~}~}~}|zyyyyxxyz|}}}}}||}}~~~~~~~}~|~{||||||}~~~}|{{zyyyyzzz|}~~~}|yvuuvwxwxy|~}}~~~~~~~~~|{z{{{{{||}~|{|}}|}}}~~~vu{|{z{||zxurruwwtomquvz~~~~|~|~{~v~p~le`cR<9EZkv~~~~~}~{yxxyyz{{zz{{zyxy||zyzzxxxyzzzyx|~}{yyyz{~|}}{~{{{{~{}z|{|{}{}z|y|y|y|y|z}{~{{ywtssuw~xxwurpnlmmoqru~x~{}}|~{~{{~|~}}}|~zwvuttsrrrrstwy{{{~{~zzyyyxxx~z}{}|~{xww~y|}|~|~}~~{{ytoklpru~w}x}x~xxwxxwv~ttrrrsstutspmjgfjlp~u}y|}|~~~{~x}ywttw}{zw{|z{{xvvuvwz~}}{zzz~u|i{j{o|t|y{zx}u{~|rkkpv}t|p}w}~~|~||||}}}||{{{{|}}}}v|txpqy|}~|~|~|||||||}z}{|||||||~{}{|{{{z|z~yxwwx}|z|xx}{wxyytrpmq~q}x||~}|~}|}y}y{~zust~v}w~y~~}|z}p~lo~s~t~u~w~y~{~||~{~{|~vsw|||zxvtrponmmmmmmkihgggghikow}|~}|zyyyyz{{{{~|~|}}}}}|~}~}~}~|~|{~|}|||||{{y{y{y{{{~||||~}}}|}z|{{z{{}{}wyyxzz~|zti^\\_ejjjjjihijklmlheda^bbSQPMKLMNNMNQSRQPPRUY^bdfkorstuvvuttrpomjgca_aeimpsttuxy{|}}|}}||{yyyyyyyyxxwvuuuuuuvwxyz{|||~}|||||}~~~~}}~}|zy{|||y}{}|~}s_bjikloz}w|~|~y~~~}~x~z~z~z~x~o~j~kopsnaTV\\bhmx~}~~|~|{yxxzzyx~y~z{{}|{up~m~k~n~v}y}{}z}y}z}q}g}d}h~n~v~z~z~z~z~{~|~}~}}}~~z~t~q~t~xyzz{~}~}~|~{~|~}~~|zyz}~~~}}}|}|}~}~}|}|||z|z|z}z}z}|}|~}~}~}{zyy{~}~}~}~~~}~~~~~~~~~~~~}}|}v}p}p~t~x~y~y~y}z}|}}}~}~}}}}~~}~}~}~~~}}}}}}}}}}~~~~~~~~}}}}~~~~~~~}~|~}~}~}~~}~}}}~~{xvvxz{|~{~{{{{~|~~~~~~~zxxzx~vwyz{|}~~}}||~}~~~~~~~}~}~|~|}}}}~~~}}|{zzyyyy{|}}~}{vpoqtvwwxz}~~}~~~~~}}~~~~~~|||||||}}~~{|}{zyz{}~~}uv|}{z{}~}|zvtuwxtllrsuz~~}~xz~~}{plpdG9Hbtv{~~~~~~~~}|{{{{{{{zzz|}|{yz||{zzywwxy~zzzyx|~~|{zyyyz|~}|~{zzzz}{|{||||}{|z|z|z|z|{}|~}|{yvtsvx~zyxvsroonnnnpsv~y~{}}|~{~{{|}}|~zxvutsrqppooprsvxy{{zzyyyyyz~z}|}|}|~|~{~{|}}~}}}~~}}|~{~xrrpopr~t~u~u}v~w~x~y~z}y}y~x~uttutuuwvtpkigghjns}x{||~~}~y|zxqmp~wz~w{{x}|wvuvvy|}~{z{z}q|i{k|n|r|sr{wrz{sljl~q}t{v||}~}~|}}~}}}||}}}|}y|ywpqy~||~|~|~{{|{z{{|||||}|~|}||||{||{zywusqu{{xvy|{xx{ystzopr}u|~~}~|||{|w}x{}}~~}wv}x}z}|~~|||}r}m~kk~o~v~y~y}v}y~{{{|~}qks|}|zwutrponmmmmmmljihgghhjkqz~|}~}{zyyz{{|~|~{~}}}|~|}|~||}}}|}{~{~||{{{~{|{zzzz{z~zzzzz{~||{{{|zyyy{~u~jqy{u_UU]dlmkjkkkkkklkljgeb^^eWLTQLJLMONMNQSRRPORTZ^beinqstuuvuutsqomkhd`]]aflpstvvwz{|}}|{|{{zyxwwxxxxxxwwvuutuuvvwxxz{{||}}|||||~~~~}}}~}zy{|}|z||}}~}ypqrmllox|p~u}}}~~~|~z~y~x~r~k~k~hnqongbXZagfn{~~~}}}}{zxwyy{~x~w~xzz}|zjdcbcktxyxv~q~h~g~n~s~x~{~}~{~z~{~}~~}}}}~~|~z~v~u~wyzz{~|~|~{~{~|~|~}~~}~{~z~z~|~~~}}}}{}{}~}||~|||{|z|x}w}x}{}}~~~~{}||~}~|~}~|~|~|~}~}~~~~~}}|}x}s}o}p~t~x~y~y}y}z}|}|}}}~}}}}~~}~|~}~~}}}~}~}}}}}}}}~~~~~}}}~~~~~~~~~~~~~}~~}}}}}~|xvvxy||~|~||{{~|~}~~~~z~x~y~z~x~xwyz{{|~~~~}~|~|~~~~~~~}~|~|~}~}}~~~~~~~~}|{zzzz{|}~~{tnmquwwxy{}~~~~~~~~}|||}}~~}~~~}|||}}}~~~|}}{xwxy{}~~}xsu{}|{|}~~~~{wvwvromiksx}}~vw~~~}~~}||sX;Viqwz|}}}}||{||||{zzz|}}|{|}|{{{yxxxyyyyxw~{}~|{zzzzz|~}}~{zzzz~{|||}|}}}|||{|{|{||}}}~~}~}~|~y~w~v~x~z}{~zxvtrqqponmmoruy~{}||~|~||~}|~{ywutttsqonmmnnqsvy{{~{~{~{zzyyz~|}|}}}}}}}}|}~}~|~}}}|||||z}w~usqpop~q~q}r~u~v~x~z}z}z~z~z{{zxwwvtplkihgghkr}y{{}~~~{||yphis{{w|{x|{wvvwy{~~~}}~}u|k|g}h}l}lm|tqz{tolk~n|t|y|}~~~}|}|}}}}}}}}}}|}{}zwqrx}|{{{{{{{{{|||||}~~~}~|~|~|}|}|zxusqprtttsuwzzyx~u~qljksz}~}{y}z}{}z~{{|~|}|}z}w}x}z}||~||}~x{t{uu~t~p~k}i}m~swwxy{ynku~}|zwutrponmmmmmmljihgghjjmu~}}~||~}~~}{zzz{{~{}|}|}}}~|~|||{{|~}|}{~|}}|{zzyyyyyxyyyyzzzyxxxwwmbqxrcPQ\\gmommmopppomjhhhfda\\[XPRVQJILNPPOOQRRQPPSV\\aeimpstuuuuutsrpmkiea][\\ahnrtuwxxyz{||{z{zyxwuuuvwwwwvvuttstuvwwwxxy{{|}~}|||}~}}}~~{z{||}}}~|zzuqoks|n}n}}}}~{~x~y~x~w~l~j~s~omghljebbdhhgm{~~}~}~}}{yz}~~|zz}~{f`dbbhkruvy~y~u~t~u~w~z~}~}~|~y~{}}}~}}}}~~~|~y~w~wxyyy~z~{~{~|~|~|~}~}~{~y}y}z~~~}}~~~|}{}|}}||||{|x|u}t}x}{}~~~~~~|~z~x~x~y~z~z~{~|~~~~}~}w}r}o}n}p~t~x~z~{~{}|}}}}}}}~}}}}~}}~}~}~~}}}~}}}~}}}}}}}~~~~~~}~~~~~~~}~}~~~~~~}}}}}~|ywwxz|}}|{{{{}~~~~~~~z~z~|~}~z~yxyz{{|}~~~}~}~~~}~}~|~|~|~}~}~~~~~~~~~}}}}|{{{||~~ysruxyzz{|~~~}~~~}}|{z{|}~~|{{~|~|~}~~~}{ywwxz{}}|zwsqty{{{|~}~~~~~~}wwunknmehpqsx|~y{~~}}}~xgYqvvxz{|}}|||||}}||{zz|}~~~~}}|{zyxxxwvvv~}}~{{zzzzz|~}}~{zyzz|}~|~|~|~|~|}|}|}|}|~}~}~}~}~}~}}|||||||{~zyvtrqqpponmnprux~z}|}~}}~}}~|{ywvvvutrpommmoqtxz{{{{{zyyz{~{}{}||||}|}~}}~|}|}|||{{|z}x~vsqonmn~o~r~t~w~y}z}z}z~{|{zywvuspmmkigffimt}{|}~~}|~xpijqzyw{{x{zvuvwz{~~~~~}{|}|~r}g|b}c~gil|urz{tngg}l}t|y}~~|~z|y|z|{}}}}}}}~}|||}{wpqu}z{{{{{{{||~}}}}}}~}~|~|~{~{~{~{xwusuwwurqqrvz}{w~s~tmafos}~|xwz{{{zyx|w{q|s|z|||z}}}zwps{|~~}x}o}i}h~jnqqqtwwomw}|zwutrponmmmmmmljihghikntz~||}|~|~|}}|~zyz{~{~{}||||}|}|}|~|||{{{~{}|}|{{~z~z~yyxwvuvxxxxyxxwwwwvtiavtcSPYeonoprssrrrqnkjjigeb\\TGJVOKHILOSSRQQRQPPQUY`eilprsttuuuutsrplifa]ZY\\aioruvxxwwxxyywwwwwvusstuvvvvutttsstuvvwvwxyz{|}~}}}~~}}|z{||}}}}}~|{wuqhi}j|n}}}{}w}q}u}}~~~{~k~i~}~{m^cjlifdadjmkr}}~~{{|}{z|~~~~}}ytfcacfknrv~{~|~}~{~z~{~}~|~}~}}}}}}}~~~|~{~y~yyxxx~y~z~{~}~}~}~|~|~|}|}}}}}}}~}}~}~{}{}|}}}||~|{|x}v}w}z}~}~~~~~~~}~x~u~u~w~w~v~u~v~y~}~}}}v}o~k~l~o~svx~{~}}~}}}}}|}}}~}~}~}~}}~}~}~~~~}}~}~}}}}}}}}~~~~~~~~~~~{{~{~|~~~}}}}}~~~|zxxy{}}}|{{{{{|~}~}~{~{~}~}~|~{{{z{{|}~~~~~~}~~}~}}~|~{~{~|~}~}~~~~~~~~~~~~~~~}}}}}}|||||}~}yxyz{||}~~~}~}}}}}~~}zyyz{~}~~~|{zzzz{|{xuqnoswyyz}~~~~~}~}}zwxshdjkcfljioxz}~}}}}yuy{z{{|||||||{~z~yyyyyyz{|}~~~~~|{zxwxwvtts|~{{{zzzz{|}}|zyyyz~||~|||||||~|~||||||{{{{}||}{yvtrrrqponmllnptw~z~|~~}}~}}~|~{zyyyxwvutsrrrtwxzz{{{zzyyyzzz~z}z|{|}}}~}~|~|}||||{|z|y}w}v~spnno~p}s}u}v}x}x}z}z~{~{zzywuuttsrokgefghls~{}}|}~xqmmqzyw{{x{yusuyx|~~}~~~~}zwuvtm~g}f~i~ln~r{zs{zvqoj}j}o}y~~||v|t{t|w|{}}}}}~}}|z|z}zxpqt}x{{|||||}}}}~}}}}}~~|{zz~z~z~ywvwy~}xussuxyzy~x~w~yvpsrmy{yz{zyxvtv}r{k|q|z|||w~{{usy{}{~z}t}r~r~qpnmmlptuqpw~|zwutrqponmmmmmljihhijmqy}|{}||~||~}|}z~zz~{}|}|}||||||||||}|~|{~{~{}z~z~yywxxwuvuvytsrrrsuuvvxxwvwwxxtiavmWMT`lppoqtuusrrrponmkheb[PDCQEGHKNPUVTRQQQQRT[^dhloqrrstuvvutrqpmfa\\YXX\\`horuwwwsrspuutsstttsqqrstuuutssssrstuvvvwxyyz{|}~~~}}~}{{||z}y}}}~~{xutu~k{d}m|u~}}}z}x}y}|}~~~~q~mz~s^akrpe^Z\\ksrt~y}}~zqsz~ztkeq~~~zy~xrfa\\^_bfmp~w~|~}~|~z~{~|~|~~}}}}}}}}~~|~{~{~{{ywx~x~z~|~~~~z~{~}}}}}}}|}{}{~z}{}{}~}}}~}}}{}z}y}z}|}~~~~~~~~~|~y~u~u~v~v~s~p~o~p~t~x}z}v~o~i~j~mqux{~}~~}}}|}{}|}}}~}~}~~}~}~}~}~~~~}}}}}}~}}}}}~}~~~~~~~~~}~{zzy{{~{~|~~~~}}}}~~~~}}{yyy|}~}|zzzzz{|~}~~~|~|~~~~~}}||{|}~~~~~~}~}~~~~~~~|~z~z~{~|~|~}~}~}~}~}~}~|~|||||}}}}}}||||}~~}|||}}}~~~~~}}~~}zxwxz}~~~}|{{{|}|xsnmoruwx{~~~~}~}|zxxzwnhjiddiijouyz|~~}}}}{|~}~}|{||{{||{~z~w~u~uvwxxyz{|}~~}||{ywuuwvusqq{{{{zzzz{|}~{yxxy{}}|||||||||{{{{{{{{{{~|}}{~ywuttsrponlkjlnqtx~{~}~~~~~}~||||{{z{{zyyyyzzzzz{{zzyxxxxyyy~y}z}|}}~}~|}|~|}{|||{{z|x|w}u~rpopr}t}u}v}w}x}y}y}y~x~xxxwtzr{swvvtmgffffhms}y|~|}~ztqpryyw||y{xsrtyx|~}}}~}~{yvuuts~t~uwv~x}zz~w{zwx|p}k}q}{~~|{r{l{s|y|}|}}}}}|||y|z}zwqqs}w{}|}}}}~}}}}~~~~~}{zy~z~z~y~yxz|{zxvttvwssswv}urqrux~~}{zyywtrp|q|t|w|y|{|~~{wz||{z|v|r}u}o~osplk~pvxxuwy}}|zwutrqponmllmmljihhjlquy~y~x}~}}}}~}|~|~|}|}}}}}}||||||||{|{}{~|}{}z|y}w~wttryqrrqrtq~pqqpoopqsuvuuvwxythfj_QOZelmmoruvusssrqonljfb]WL@=JGFIMOQVXUTQQQSUZadiloqrrrsuvvvusqqpme]XWYY[`gnqtvwuojlgnooooqqrqpqrrrssssttttsttuvvvwxyxyz{|~~~}~~||||z}y}~~~}~{zplopn~j|u|~~{~u~w~y~~~~|~wrmplfbfqof^hlntqsu~vtmoz{wsdX[~y~|~tqlrvzp^YYW_iv~z~|~}~|~{~y~z~~}}}}}}}}~}{}{}{~{~|~~}zxx~w~x~{~~~~x~w~z}}}}}}{}y}y}z}|}}}}~|~|~|}{}z}|~~~|~{~|~}~}~}~}~|~~~~~|zy~z~{~y~y~v~n~l~m~q}u~v~r~k~i~kpvy{|~}}}}|~|~|~}~}~~~}}~}~~~~~}}}}}}}|}|}}}~~~~~~~~~~~}~|~{~z~{{{||~|~}~~~~~~}~~~}~}}}|zzz|}~}|{{{zz||~~~~~}~}~~~~~~}}||}~~~~~|~{~|~}~~~~|~z~z~{~{~{~|~}~}~}~|~|~|{{{{|}}}}}}|||||}~~~}}}}}}}}~~~~|{}~~~~|zwwz~}~~~~}}|{z}}vonnoqsuwz}~~~}~}{wwy{ztnmljhkptwyzz{~}}}}}|{{||~|~|{{{z{{~|~|~x~t~s~u~v~wwwwxy{|}|{zyxxwtrsuut~q}n}m{{{zzzz{{|}~{yxxz~{}}{{{{{{{{{{{{{||||{{|~}}}{~z}y}y~y~y~vsqomlklnpswz~}~~~~~~}~}}}}}}~~}}}}}}}|||{{zyxwvvvvvvw~y}{|{|}|}}}~}~|~|}{{z{y{w|u|s~sss}t}w|x|w}v}w}x}y}x}x~xxwvsxo|p~tstspkhfffgilp~w||{}~xutsyxw|~{|xrpryv|~}}{~z~zywvuvvy~{|{~~|yx|~zy{}v}x}|}}}|}{h{m{y|||||||~|||{|{}{wpqs}u|{|~}~~~~}}}}~~~~}|zy~z~{~{~{~z{{zyxwutuwwslnqsqmmrx||xqoquxxwtr}t}v|y{x{w{x|}}~}~z|y{w|w}x}p}e~i~ps~n~k~t{|{}~~|zwutrponmlllmlljihikoty~z}x}w}{}}}~}}~}}}~}}}~}}}}||{{{z{z{{{}{~y}y|v|u~qolopq}rfrguuvuqpnmlmnoqruwwyshd^TPT^gkllosuvuttsrpmkjf^UPKF?=GGGKOPQSUTRQRSUY_gjnprsssstuvvvuspppmdZUVXX[`flpsuvqjdhaghjkkmnpopqqqqrrrstuuttuuvvvvwxyxxxy{}~~~}~~}}}~~~~~~|yjbbg}q|q}x}ww~y~{~~~~|yvvpkhkqxshnzvprqrrqruqx~vkpohcn}z~zrdds~zdSQblny~z~{~|~{~z~y~z~~}}}}}}}}}}}}}z}y}{~~~~{yy~y~x~z~~~~x~v~y}|}}}~}|}x}v}w}y}{}|~}~|~{~{~z~z~{~~~~~~~{~z~y~x~w~v~uvwxy{x~{~z~t~p~q~v}x~y~x~s~m~lqvz|}~}}}}}~|~}~}~}~}~}}}}}~~~}}}~~~~}~}}~~~~~~~}~|~|~|~{~z~z~z{{||~|~}~~~~~~~~}}}}}|{{|}~}}}}}|{}}~~~~~|~|~~~~~}}||||}~~~~~}~{~{~|~~~}~|~z~{~{~|~|~}~}~}~}~}~}|||{|}}}}}~}||{{{{|}}||}}}}}}}~~~~~~{zz|~~~}}~}{wvz}|zzz~{~|||{ywsoifefinsuvz}~~~}}yvx~z{yuuxywsswz||{{{~}}|}~|{{{~|}|~|{{zz{~}~}~~|~x~u~u~u~u~ttuvxz{|{zxwvvtqpqrrr}p{kzizzzzzzz{{|~}|zzzz~||~{z{{{{{{{{|||}}}}|||}~}~}~|}|}}}}}~zvtrqppppqswz|~~~~~}~}}}~}}~~~~~~~~~~~~~~}~||||{zywutttttttvy}z||{~}}}}~}~|~||{{yzx{v{u|t|t|u|v|x|y|w}w~v}w}x}x}x~xxwvs~m~mpppqqolhhghgghmqy~{zyuxuw|~{}xqpqxu{~|}{}z}zzxvvww{|~}~|yv{yxz{{}}}}~~|u|~|||||||||~}}}|{vorv~w}z}|||}|~}}~}~}}}~~~~~|zz~z~{~|~}~|~z~w~www~vtstx}xmmqusqpqswzwibkrvz|{x|x|x{w{w{t{s{y|}}||z{x}u~q~g}i}j}i}j}k~n~w}~}|{|~}|ywusrpnmllllllkjiijmrw~||||x}w}x}y}z}{}|}~}}|||}|||{|z|y{y{{z~z~y}w|v|t}t~stxzwv~v|xvusrrpmihghlnsvvxsh^TNQXbillmpsuvuutspmifd_RD@@@A@FFHNQQOPQRRSTUX^djnqstttttuvvvutromnneXTUWW[`ekorttnd^f_abehijkmnoppqqqrrstuvvvvvvvvvwyzxwxyz{|~~}|~~~~~}{xqa_g~g~t}n}m~{|xzz~|~~~~}zxyxqcXgpajsi`hoqtuuuvpv{veqyssp~y}bV`nvoci{|z~z~y~z~z~z~y~z~~}}}}}}~}|}~}}}}z}y}z~|~|~{zy~|~y~x~{~{~|~y~w~w}y}{|}||||v|w}x}{~|}{zz~y~y~y~|~~~~~~}y}x}v}t}o~mmqwyyyvx~v~r~v~{}|}}~}~~~|~wssw{~~~}~}}}~|~|~|~|~|~|||}}}~~~~}~~~~~~~~~~~~~~}~|~|~{~|~|~}}}|~|~|~}~~~~~~~}}}}}}}}}~}~}~}~~}~~~~~~~~|~{~|~}~||||||}~~}~{~z~|~~~}~|~{~|~}~}~~~~~~~~~~~~~}}||}~~~~~~}|{zyyxyz{{{|}~~~}}}}}}}}}~~}zwuuz~~|}~}xvwz}~ztps~wyyyzwofca][`jswwz}~~~}xuwwwvtw}~~~~z~y~z~|~}~}~}}~}}~|||}|||~|}|~{{zzz{~}~~~}~}|}x}t}s~r~qrstuxz{zyxwvvtqnnnpp|nyixezzzzzz{{{{|~}}~|~|}||}{~{{~{~|}|}|~||{||}~}}{{|}~}}}|{{{|~}|~zwuuuwxxwvwxy{~}~~~}}|||||||}~}~}~}~~~}~}~}~}}}}|zywtsrrrrrrtvx}|{|~}}~}}~|}{|z{xzwzvzuzu{u{v|v|v{v}v~u~u~w~w~x~x~xwvtqqusqoppmmkjjkhfghmtxz|}~xxww~}}{|xrqrxv~z|||{|{}{yvuxyvxy~}yw{~yvyz{~}}}{|}~~}~}}}|||||}||}|}}{unu~|}{~|~||y{v{x~{~{||~}}~~~~~~|z|~z}w~{~{~{~x~s~r~t~v~u~rprvyytvuwxxxwvxxylelsuyz~||||||{{z{w{u{u{z|}}|~||~u~i~l}{{s{g{f|q}y~x~{~~}~x~rsz|zxvusqonmllllllkjijkpty}||||y|v|t|w|{|||~||{{|~|{}{}{}y|y|z{|zyz~z|z{y{y|x|xwwvwwvvutssrokhjghkqtvwsfYPPU]fjklmpsuvvutqlga][SD;;<?CDHFKPRPMMORSWWZ^cioqstttttuvvuutrqnllmeXSTWW[`eiloqqlc]b]\\`cfghiklmnoppqqqssuvwvvvvvvwxyzwvwyzzz{}}}~~}}~}}}~||xwttrhWa|~h~q~l~kuzxyy~{~}~~zxss`HJ`rda`PSblotuxwuosyvmwxpssx}~`NQ`nvy|y~|z~y~x~y~z~z~z~|~~}~}}}}}}|v}x}z}z}{}{~z~z~{~{~{z~|~z~w~w~w~y~x~x~w}x}z|}|||y|w}w~y~{{~{~{~|~z~x~v~w~|~}}}}|}{}y}x}v|s|o}m~pu~|xwxm~f~v~{}|~|~}~~}xvy~~~}~|~|~|~|~{~{~{~|~|||}}~~~~~~~~~~~~~~~~~}~}~|~|~~~}~~~~~~|~|~|~}~~~~~~~~}||}}}}~}~}}}}}}~~~~~~~~~~~~~~|~{~{~|~{zz{|||}~~}|{{}~}|}}~~~~~~~~~~}}}}~~~~~~}{zzzyxxxxzz{{|~~}}}||||}~~{ywvtrry}||~zsqv{|{{{uposwxz||ulkf[SZj}u~yz|}~~{vsqlmrrtw}{}|~z~y~{~|}}}}}~~}}|||~|||~|~{~zzzzz{}}}~}~}~}}}z}v}r}p~pqqqsuxyyyxwwwvqlkknp|kxgvczyyyzzz{{{{||~|~|~{{{{~|}}|}{~|~}}~|||~}}~{zyz|}~}|{{{{|~||~zwuuy|}}~|~{zyy~z~{|}||{{zz{{{{||~}~}~}~}~}~}}~}~}~|{yvtrqqppooqqt}{|{~{}}}}}}}||}z|y{xzwyuyuzuzv{u{u|u|t}s~tv~xy~w}v}wvttsutrnpqmnljlokggfghmsy~}xw}~|{{wsrtxv~z||{{}|~~vmozzkgy~zv{zuwz~{xwxz}~~~~~}}|}||}z}y|||~|snv~}}{|~zzw{x|{{~{}|~}~~~{y~|}|}w}z~x~u~u~r~l}q}v}s}qnpsvwvwwxz{}~|zumpknwvosz{}|~{}{~{v{w{z{~||||~}{~t}q|x{z}ylyh{n{q}t}z~|}y~y~s~r||zvuusqomlkllmmmlkjkmqv~y}z|{}x|u|t|x||{{{{{{{|||}z}{}z||{|zyy~y}yzxzxzw{x}wwvvvvvvutsspkhjhgimrtwreUOQYafjkklortvvusph`VWQE9<>@BAFKFLQSPJJPXZZZ]afmqrtuuuuuvvutsrqoljjkcWRSVVZ_dgjnpokc\\_[[_bdefgijklmooopqrsuvvvvwwwwwxyywvvyzyxvxy{||||}~~}|}yxusrtrqcfvhp~hequvn~w}z}}~~xwvugXdlfYbh]U]iknsvvtnsxrnmmpttv~~|]RQ_ktwry||~z~y~x~x~y~z~{~|~~~~~~~~~}{}w}t}u}y}{}{}y~x~z~{~{~{~{~y}w}v}v}x}y~y~y}x}z}||~|{}w}v}w~yzz~{~|}|}z}x~t~u}z}z}z}y}x}x}x|v|r|p}o~qy~~ztpts~n~u~y}{~|~}~~{ut|~{~z~z~{~{~{~z~z~{~{{{|}}~}~~~~~~~~~~~~~~~~~~~~~}~}~}~}~~~~~~~}~|~|~}~~~~~~~~~~~~}|||~|}|}|}|}|}}}}}}~~~~~}~~}~}}~{~z~z~|~{~zxy||z|}}||~z~z~|~}~}~}~~~~~~~~~~~~}}}~~~~~}}|{yyyyyxxyyzzz{}~~~|||{{{|}}yvutstwz|}}}}||}~~{pks{xvyzyvsswyyyz~xtsqdW_nv{}~~}~}xvumcempru}y~{~zy~{}z}{~|}~}}}}}}}{{{{zzzyyz{}|}}}~}~}~}|}w}r}p~r~srqqruvwxyxy{{tljjlm|iygxczyyyzzz{{{{{{{{{{{{|}~|zyz{~}|~|~}|zxwyz{}~}{zzz{}|{}xtssvy|~}}~}}~}~{~z~z~{{|{zzyxxxxxyz{~|~}~}~}~}~}}~}~}~|{{xtqrrqonmnnqx}}{}{}|}|}|}}|}{}z|y{xzvzuytzs{s|s}s}r~q~svz|z~x~wvutsrsrmoplmgisxrmljifdgox|~xy}~|{zwttvvx}z{{zy|{}|nhpvherzzuzyssv}ywsrsw{~~~}~}~}|x}u}v|{{~}rmw}|zyz{||||{~z}z~{yvy~~|xs~|}}|~zuqp~p~p}n}q|q|q}opstwyyyz{}~~~}tovwr{wqt{{{{{y{r{z{|{|||~}|}x}p{lxmxpxsxrxqztzw{w|y}x}s~n~k~ly{zvuusqomlkllmmmlkjlos~x{z|~}}{{{{{{zzzzzz{~|}|y}s}o}t|{z~yyyy~y{zzyyy{ywvvuvvwwvutslegjiijoruqbRQT[bfhijlortvutqm`WKHC:6@DDECJOGMQROJMS\\`^\\afjpsstuvvvvvutsqomljiih`VQRUVZ_dehkmmlg^\\YZ_acddegijjlmmmnoqruuvvvwxwwxyyyxut}x}y~wvr~r|ux|z~{{{|~~}|{{{zprrsussrsjdqxz~ympp~v}z}|~~|uuvytiTV__bnfY]elpsrqrltvlmjgktvs~zoUTWiv{{wz}{~{~y~x~x~y~z~|}~~}}~}}~|~y}v}s}u}|}}}}}y}v~y~{~{~z~z~y}x}w}x}{}|~|~{}z}z}z}{|y}v}u}w~y{||~~}~}|}y~u~r~u~x~x}w}v}v}u}s|s|r}qtz}|xsgp{~|~y~{}|~}~~~~}xkp|y~x~x~y~z}|}{~{~{~{~{~zz{||~}~}~~~~~}}}}}}}~~~~~~~~~~~~~~~~~~~~~~}~}~}~~~~~~~~~~}~}}|~|}|}|}{}|}|}}}}}~}~~~~~~}~}~}~}~|~{~|~|~|~|wx{zx{||{{~z~z~{~|~}~}~~~~~~~~~~~~~}~}}~~~~~~|{zyxxyz{{{zyyyz{~~~}~|{{{{{|~~{zyyxxyzyyz{{~||||}~{upprrsvz{{zy{zwtv~xxyztgfq~y}~~~}xz}o`^emqu~y|yvw~x}yz~}}~}}}}~~|{{{{zyyyyzz~|}}}~}~}~}}}y}u~t~v~wurppprtwyz{~{smkki~h}h{gzyyyzz{|||{{zzz{{{|}~|zxxx|}~|~}|zxvxyz|~}}|zz{{}|z}wtqsuwz~}}|}~}}~|~|~|{{zyxxwvvuuvwy{~|~}~}~}~}}~}~}~}|}{wutttrpnlkmsz||{}|}|}|}}|}|}{}z|x{w{vztzs{r|r|r}q~q~sty{zxxwvusrpnnqro~qqtyzsoqpnljhlt{{xy}~}|zwutuuw~y{zzz|}}xmlmpw}~zuz~xrp~p{qrrprx}}~}}}}|~{~{~}|q|p}u}}{~~qmw}|{w}swz|}|{{~{}{~zvqu|}zsj~r}}~{wtss~o~m}q|t|t}utwwxwwxz{{~u}o~lp{{tss{z{}|z{{{|{r{v{|||||~}{}x|ozew`wbxfypytzwzy{y{s|j}c}]}Z~]qzzwuusqomlkllmmmlkklo~szwzyzz|}|~{zzzzyyyyyyz{~|x}q}m}q|x{|{~zyyyz~z{y}xvtttuuvvuutsogchgghlptn_PRW]bdfhklorsutsnh[O@=;;<DHHGDNTJMPQPNQX`a__flpqssuuvwwvutrpnljifffe^URRUW[_ccfhjkljbZVX`^abcdfhiijkllmnoqtuvvwxxwwxyyyywu{x|w|uso|p{s|vzx|z{|{|~}|}~~wmqsvwtk}t}lbg{~v~h~z~|}|}|~~{stuwvrd_jthmdZdkpuqonqswoeqkchwxswfQRVlz}}~|~~z~z~x~w~w~w~y|~~}|{{{z~y}w}t}v}}}}}|}z~{~{~z~z~z~{}z}z}{}~}~~~|}{}z}y}y|y}w}w}x~{~~~~~}~{~yuqr~v~w~u}t}s}r}p|q}r~rtxyywtir~~|~|}}~~~~~~~}yt{|yx~w~x~z~|}|}|}{}|~|~{~zzz{{~|~}~}~}~~~}}}}~}}}}~}~}~~~~~~~~~~~~~~}~}~~~~~~~~~~}~}~~~}||~|}|}|}|}|}|}|}}}}}~~~~~~~}~|~|~|~|~|~|~|~}~}~}ywy{z{||{~{~z~y~z~{}|~}~~~~~~}~|~|~|~|~|~|~|}~~~|{|}}{zzyxwwwxz{{{zzz{|}}~}|{{{{|}~|ywz|{zyvuuwy{~|~|~|~|~}~~~}xkgnsx|}~~~~}yww~yz{|{tp~u~{}|}{}z}yz{z~~qbZ]hr{~~~~|ut~u~vy{~~}}}|~~|zzzzyyyyyzz{~|~|~}~}~|~{~y~y~{~{xsommptwz{z|~yvtqm~l}m}lzzzz~{~|}|~}~}~}|{zyyz{{|~}zwvwz~}}~~}zxvxyz{~|}~|zz{{~|}}yspqtvz}}{||~}~~}~}|{zyxwvuutsstvy{~|~}~}~}}~}~}~||}|zyyxwuspmjimrx}||}|}{|||}|}{}z|y|w{vzuzszr{q{q|p~p~ppsuuwwxvuutp~l}m~p~rrsxwnvsostqrsru|{w~vy~~}{xutssst~v}z}|}~|t}{uz~xqm}l|otvru{}|{{|||{z{|q}o}w~~|~~qlv}z{qyjzq~x{{zzz~}}|~}|yy{ztq~j~k~x~{vwvvuqp~s}u|v}y~xyxvqtx|}~z}p~f~b~dmrjosy|~}|~{{{v|t|}|||{||||||||y|u{nzhydyhymzqzrzrzr{s{i{]|U}P}Q~Zrzzwuusronlkkklllkkjln~r{t{v{z{~{zz~z~z~z|y|y{y|y}y~yyzz~{x|u}u}u|x|{{zyyyy~xwutsstttttssspkcdcdfjnsk[PUY]`bdhlmprsssqkbTH7:@DDFHHHCOWMMNPRRV]aa`bjrssttuuvwvusromkigfdddc\\URSWY]_abcfgimlh]VU_]`abcfhhijjkklmnpsuvwwyxwwxyyyzyw}z~s}qpn{p{r{t{v}y{}|z}}~~}~~{uuvz~y~u~i{n|phb~z~x~t~~}~}}}}~}vvvxwtphoxnmc[fnttspqux{vww~r~im{znpk]SNevz~x~{~~|~w~y~x~v~v~vy|~}{zzzzz~y~x}v}x}~}}}~}}~~~|~y~y~z~}}~}}}}~~}}{}z}z}z|z}z}y}z}~}~~~{yxuqqv~x~t}r}r}s}r}p~p~rrtwxwvry~~}~}~}~}~~~~~~~}{z{xkwx~y~{~|}~}}}|}{}|~|~{~zzz{{~|~|~}~}~}~}~~}~}}}|}{~{~{~|~~~~~~~~~~~~~}~}~}~~~~~~~}~}~}~~~}}|}~~}~}|~z~zz~{~{~|}|~}~}~}~{~{~{~{~|~|~|~|~}~~~~~{xy{z{~||~{~|~{~{~z~|~}~~~~~~~}~{~z~z~z~{~{~{~|}~~~|zzz{{{{{ywutuwz|}|}|}||~~~~~|{{{{{{zzz}}zxsqruwxz~|}}}}~}~|||~znjqx|~~~|{zz~{{{|~~{~{{zzwzu{s}qtwz|xtk^_lt}}|vtvwz}~}}|}~{yyyyyyyzyyyzz{{~|~|~{~{~|~}~}{wpkmsx{||{yz{{{~z~y}v}t}s|qzzz~{}||~|~{{|~}}~|zyyyzz|~}zwuvz|z|~{uuxz{z{~}|{z{{|~}zrnptx{~~|{{||~}~~}||zyxwvutsrrrtwy{~}~~~}}~}~}~|~|{{{{{zyxwtrnkjkrw~{||{|||||}{}z|y|x{wzvyvyuzt{r|q}q~pppsx|{xvutur~o}m}g~isuvvxxwu~wupsvtyxsty~~}{xtsqqpptw}{|}|}}}}~~~~}uy~~xrq~t}wzysuw{ywz}|||{z}z|x~y~{~~{~|qmv~|{owdwl|z}{uuz~}}~~~~ttrnr~r~t~yrqpopqrst~v~w}w~x|{yvtx~|}~|}}w~oljjikpts|zz~v}v|n|n|r|x|z|||~||}|y{wyoyfxeymzuzy{z{x{s{mzk{g{a{Y|J|K}gv{{xvutrqomlkjkklkkkkloqs~vuyzz}{{{zzxzxywyyy{y}yyyy}zp{m|v}s}v|{{zyyxwvutssstsrrrsssrmda``ackuhWRUZ^_adhmnprrrqoi\\M?43CNGDGIJAOYQNMQUT_edegjnrtttuuvvvutqnjhgfedbbcb[USU[[^``e`deflmmc]X]^_`bdgghijkkkkmmortvwxywwwxyyz{{{{qn~n}nzq|r}s~uxy||yz{}zyy~{~{~v~m{jzqcct}~zy~z~~}}}}~~~~|{yvmlqwthhlckqohqxtx~|z|}~|~y|zmmmn`S_s~x~v~y~}~x~x~z~{~x~w~w~y|}|zyyyzyy~y}y}{}~}}}}~~|~x~y~{~}}}}}~~~}}{}y}z}{}|}}}|}||}}~}zxwurrwz~v~t~u~y~x~r~pqrsvwxxv{~~~|~}~}~}~}~}~|~{~zustwt~v~y~{}{}|}|}{}{}{~|~{~zzz{{~{~|~}~|~|~|~|~|~{~z~z~z~{~|~}~~~~~~~~~~~}~}~}~}~~~}~}~}~|~~~}}}|}~}~z~wvyzz~z~|~|~|~|~{~{~z~z~z~z~z~z~{~}~~}{zzyy~z~{~|~~~~~}~|~}~~~~~~~}~|~z~x~x~y~z~z~{|}~~}|{zzyzz{{zwustx{}~~}~}}}~~~~}|{{zyxyzz{}yrotxyxy{}~~|zz{{yy{}~~}{zz{|{yyy{}~|xwtqvoyq|qsvx~tostiktv~|~|~}zvwx{}~}||}~{yzzyxy~{~{{zyyyzz~{~{~{~|~|~|~||ysmpx|~~~~}~}~zuv{{}z|z{y{x{v{szzz~{|}{yxxz{|}~{yyyz{|~}zvsrv|}}{utvyyyz{}}{{{|}~~zspsx|~~}|{||}}~~~}|{zyxwvtsrqrrux{}~}}}~|~|~|~|{{||~}|{zzxwurpnnrv}x|z{{|{|{|z|z|y{w{vzvyuyuzs{r|q}q~p~opuxyywussrp~p}i~lvywwyyzz{xptxuyvrty~|zwspopppqsv}w|z||}~~~}}}}~vy~~yuw{~~|uttyrpz|||}|}|{{}{|}~~{~~{rnv~~}}ztyq|v~~|xxz~~}~~vtrnr~x~}~|rnllnnrvxyxt~q~t{xxwy~y|tzp{t}xwvsplnstpsmlm}w|w|w}r}r}x}z}|}{|{{{yow_v[wfypzt{s{x{uzozi{j{i{g{f{]|W}oy{{xvutsrpnlkkkkklllkllmqxwxyz}{{{zzzyzyzxyw|w}wxxxwykzj|r|s|w|{z~y~xwwvuttsrsssrqrrtutoha][Z[cpdSSVZ^`bgkmopqppongXE825;PNFFJM?NYSMNSY[fjhiloqtuuvvvvvutrokecccbba`ba\\UTY_hib^aY^`bkmnmi^^^``deghhijkkkkmnnqtvwxxvvvxyz{|}|{rnm}o|r~rstvwyzyzz}~~|||~}}z}o{lzqc`o|{xxz{~|~|~}~~|wpotyynll\\ajjmssmx}}}||~~}}~|qpqvn_cu~y~w~w~|~y~z~}~~~y~w~w~x~z{{yxxyzzz~z~z~z}{}{}~}~~}~y~w~z~|}}}~}}}}~~~~z~x~y~{~~~~}}}}}}zxwvsty|~x~w~x~}|vssstvxxxx|~~~|~}~|~|~|~{~y~y~x~sprtr~u~z}|}x}x}z}{}{~|~|~{~{{{{{~{~{~|~|~|~{~{~{~z~y~y~z~{~}~}~}~~~~~~~~}~}~}~}~}~}~|~|~|~|~}~}~}||{~}~~~|zz|{z~z~||{{zyy~y~x~x~w~x~|~~~~~}{zyy~z~{}~~~~~~~}~~~~}~|~z~y~y~z~{~||}}}~~~~}{yyyz{zywvwz|}~~~~~~~~}|{zzyyz||{{~~||wrv{}zwx{}~|z{~||{zy{}~|zy{}~|xspt|}|stmlsjxn|q~q~r}r}o~i~h~o~u~zur|uzx}z}~}yyz}~~~}|||}~~{zzyxx~z~|~|{zyyyzz{~{~|~|~{~y~y~y~x~v~t~v~z~}~}}}~{xssw~|}|{{zxytytyt{z{~||~xvuuwxz||~zzz{{|}~|xtonouz~~{utvyxxyy|}||}~~{vtv|}}||||}~~~~}}|{zzxwusrqrrtwz|}}|||{{{{|~}~~}|{{{zzzywttw~y}z|z|{|{|{|z|y|x{w{vyvyuzt{s{r|q|p}o}o~o~quxzwrppqq~oqwxxwxz{{|xosxsuzzu}w}{}}|yvsonmprsqpqr~v~x~|~~}|||}~wy~~zvw|~~zwv~ywdx^w}|}~~~~{}}||}}~{|~ytry~~~|}y}y~{yxx~x~z~}~zxup~u~z~xttpjjlnsxzzxrp~r|x|zxup|m{f|s~wyyxspruwun\\`e~w}||~}x}w}z}z}z}z|yzyw`uQv_wwy~zz{x{uzrzkzf{lznzmzp{q|k}u{|{xvutsrqomkkkkklmmlmnorx}yxyz}z}y~x~xw}vvvvwwywuyv{w{w{zz~yxwwvuttsrrttrpolllorng`YVRRXf^RSVZ^bejmnoppoomi_O>439<IRJEJP?KSOKPX]cikkmprtvvvvvvuusqnkgb```a``aba]WU]emhb^`VY]`hknpqfa``bffgghijkjjlmoopsuwxxvvuxzz|~~~|tpn~p~rrrrtuuxy{{{|~~~~~~}|}u|ryqc^kyzxxzzzzz~z~|zwww{zrkbirrvplkx~~~{{|~||~ursvvko~~{~{~|~z~{~}~{~u~s~t~v~x~yzyyz{|{~z~z~{~x~x~y~~~~~|~x~w}z}{}{}|}|}|~~~~~{~x~y~|~~~~~}}~}zxwvvwz{~w~v~wzzxwvuuwxwwv{~~~|~}~|~|~{~z~y~x~w~wtpo~p~v~{}|}x}w}x}z}|~|~|~{{zzz~{~{~{~{~{~{~{~{~z~z~z~z~{~|~}~}~}~}~~~}}~}}~}~}~}~|~|~{~{~{~{~}~}~}~|{y~z~{~|{|}|z~{~}}|{{zyy~x}v}u}v}z}|}~}}~||{zz~{~|~~~}}~~~}~|~{~z~z~{~}}}}}}}}}~~{z{{{{zyxy||}~}}}~~}}|{{zzz{{}}zxyxtx}{{}~{wvy{~|zz~|wwxvtvz}~{yy|{unmvzzpskmrjyl}n~m~n}m|f|\\|]}j}w}|zuwmukxt~}|~~{yz||~}~}}~}||}~}{zzxw~x~{~}~}{zyzz{{~{~|~|~{}y}u}s}s~t~x~{~{~z~{~}}~}{~tpqsv~{|}{|zxysxuyx{{{~|{~wtsstuxz~}{{{{{~|~}~~{wrmkkpuyzxxxyyxxxz~}~~~~|{wtsuy~}}|}}~~~~~~~~}|{zxvtsrqrstwy{|||{{zy{||}~}|{z{{|||zxxyz~z~z}z}z}{}z}y}x}w{vyvzuzuztzs{q{q{p|o|n|m}p}svtonppooptwxvuvutwvnrwqoq}s|t~vxvsrqnmknqpnlnqtwz}~}|{|}~ww~~yuw{~~~~~uiu[}qz{}~~}|}}}|}{xvv{~~}{~z~xwwy~y~y~z~}~~~~{xtpu~zvnn~hf~bhqwyyxwtv~{}z||zwx~s{c{n}ruvvutrsuxnSY~c~u}y}y}w}z}|}{~|}|||yuwVvQwnx}yz{z|{wztzr{lzqzsztzv{v|y}y~}|yvtttsrqomllllmnomnqstu|xxxxxyyxvvuu~t|tyuxyy|y~xwvvvuttssqsut}j~o~rniefijd^VOLJKYVRRW\\`filnnopponi_PA843:IELJEHS@HOKJS\\`immoptuvvvvvvusqnligea__`aabccc^XXaje__^dWW``cfkprmjd_dighghhjjkkmnopprtvxwvvvy{z}|vrnprqpprssvx{||z|~~{}y~xzrc^gszyyyzxxv~t~}~~~~yvy{}unry|tkmnw~{zyyz|xstutrx|~z~w~y~|~{~v~q~q~q~s~t~w~yzz|~}~}~|~z~y~y~w~y~{~~~~~y~x~y~{}{}y}z}y~y~{~~~|z~{~~~~~}~}}~~}zxvvxy{y~v~uuvwxxxwxxwuux~|~|~{~}~}~}~|~z~y~z~y~z~vo~l~p~w}|}|}z}x}w}y~|~}~|~{zzz{~|~|~{~z~z~z~{~{~z~z~z~{~|~}~}~}~}~}~~~~}~}}}|~|~|~{~{~zzxy~y~{~|~{~{~{{~{~zyyz{{{~{~}}}}|{zyx~v}t|t|v}v}x~y~~}|}~}~}~~}}}~}~|~{~{~|~}~~~~~~}}{}}zz{||||{zyz{|~||||zz{{{{z{|~}~~{yxvsx}ywx|}{yyy||{z~}~~||}ywxz|}{zz}~{uos{yvwvqzn}mmlnr}n}^}_}r~}|zsrnlpjxt||~{yxwyyx~y~|~}|}~~|{zywu~w~{~|{{zzzz~{~{~|~|~|~{}y}t}q}p}s}y~~~}~zy~{}}}yoimqu~y}}|}{yzuzvzz{{{~}{~wsqqsuwy||~{{~{~{~{}|}}zwrnjjnrwyyzzzzzyyz||zwuronptx|~~}}}~~~~~~~~~~~~}{ywusrqqrsuwy{{{{zzyxy{|}}{yxxy{{||{yvuwx~y~x}y}z}y}y~x~w|wzuzuztzszrzrzqzp{o{n|l|n}q}sqnnppoopsvvtssoipqmqvpkjklnonmpqolklooljlnrtx|~~|{{{|wv~xtuy~}}{~x{kya~ny{}~~}||||~|~zxtw~{~z~ywv~x~z~z}{}z}|~~~}~{unnu~zutv}i~a~]itxyyxvuw~y~{}|{xwo{]|c}o~uwvvtqpqsp~_~Q~j~u~v}v}w}z}~}~}}|zxxawXxrxzz{zx{v{t{{{zzvzuzu{w{w|y|{}|~|{zwuuuutsqonnmmmoonot}uwx|xvuvxyyy~xwww|txtwtww{x}x~xwvvvuttssrrsqd~eo~somhdcc^WOMID@ELQUY_chkmnnnonnmaN>9696:MNKICFRAGHIJS_bkopqrttuvvvutsrnkhgedb``_`accca^YZdjgVY]gUO`^`bhnqpmk_fkhihhhjjllnopopqsvxwvvvy|z}|wsmoroooqqrtw{}~|z|}~~|~{~z{qb\\cpxxxxwwwshuvvwxsxyz}}yyzzkgopu}{y{zwz|xrurqrwzzwvuy|ysoq~r~r~r~t~{~}|~}~}~~~}~z~y~x~x~z}~yxyz~z}y}y}x~wy{|{{z{~~~~|~}~zuuwy{{wtuuuvxyxwxwwuu~y}{}{}z~}~}|~{~z~z~{~{~u~n}l}p}u}y}z}y~x~v~x~}~~~{~{zzz{|~}~|~z~y~z~{~{~z~z~{~|~}~~~~~~~|~|~}~}~}~|~{~{~{{zyyxx~x~z~{~{~z~z~{~|zxyy{||~|~}}~~}}|{yx~w}u|s}s~qw}}~~~~~}}}}~}|~|~|~}~~~}}}{}}{yy{}}}~|~|~z~zz{{|{{zyxy{{{|}~~~~|zxvz~xrorx}}{z{~~~~|~{}{~~~~~{yy{|zz~~~~~|}~{~z||z{zu}omkkp~t}y}u}s~|~|ypqglqlyu{|y}xvvuvvvx~|~~}}}~{zzxvu~t~wxyyzzzz~z~{~{~{~|~|~z~v~s~s}w|{}~~|~yy{~{}xrkikp~x~}~}}z|w|w|y|{{|}~xtqqsuwy|}~|~|~|~|~{~|}||~ytpljlotxz{|{{{{{{{zxtqomlllouz}~~~~~~~~~~~~~~}zxutsqppqsuwyzzzzzywvvy||{xvuuwz|~}~}{ywvwwx~w~w~x~x~xxw}wzvzuztzsyryryrzrzrzp{n{m|m|n}mmnppusqrstq~q}mc`honosnjjklllmoonnmkklnmlkjknty|~~}|zz|vu}~wrtx{{}}|~r}f|f}hnv{||||||{{{{xwxzwv~wxww~z~|~}}~}}}|~}{zwpghrwwtr|gY`txxxxxvr~o}nqwzwts}i}b}f~gkoqsrnnt~w}n}_}q~v~v}t}u}y}~}}}|~|vzizdzzzzz{zo{j{c{g|s}x}u}q}r}t}w}z}{}|{zxvvwwvusqpoonnppno|ryvxz|zwuvxy{{|y||{}{}|x{rzqwtwzwwwvuuutssssstsb^jstojf`]^ZQKHD>8:FRZ^ehklllnnnjhaR=25:?@<DRHKHHOGMKKMVbenrssrppsttsrrpnkfdcdedda`_`aba]\\\\ahhdTQZiRN[[Z\\bjnpqqbhljjhhhjjlmnopopqstvvuvvy{z||xuon~p~m~m~pqprtvz}}yyz|~}||zp`Y_kuvwwvvupfqoknuwwwx|~~{{}~}}rgipqrx|ytlmruwxrto~ruvusqqty{{sop~s~q~q~r~y~{~{~|~}~~}~{~z~z~z~}|yyzz~z}z}z}x~wwxxwyyy{|||~}~~yvwx{}zussttvxzzyywut~u}y}y}y~z}~}}{~z~{~|~}n|f|m|n|p|s}v}v~v~tx~~~|~z{}}}~~~~|~z~y~z~{~{~z~z~{~|~}~~~~~~{~{~|~|~|~{~{~{~zzzyyyy~z~z~z~z~z{||xvxy{|~{~|~||}}}}|{{|~{}y}t}o~ry~~~~~~~~~}}}}}}}||}~~~~}}}}z}~yxwy{}}}~|~|~{~zz{{zxxxwuwyz{}~~~~~|zz|{upptvz~~~|~}~}~~}}|}|}~}{y{zxwx|~~~~~~{}~~}}}{~tmjhh~k}r|{}~~}~~||ltbqwr~u}v|u|r}qqrsssv|~}}}}~{zz~x~wtrruwyyzzzzzz~{~|~|~{xw~w}y||}}~{zz~|}{}xtpnp~t~y|~|~y~wuw||{|}~zurrsuwy{~}}}}}}}}}|}|~||}zvqnkknsx{|}|||||~|{zwtqomkihintz~~~~~~~~~}}~}}|zxvtrqooqrtvxzzzyyxvtrv||yurqsuyz||~{zxwwwwv~u~u~v~vxx}w|v{uzuytxsyszs{t|t|s{p{n{o|o}n~n~o~oprqrtus}oxkvhyc}bjmonpnlmoponmmjgknlkmoppmihjouy|~~|{{{~vt|wqsvzz||y~p|c|ltvxz{{{zzz{{{{zz{~u~n~q~vyww~z~|~|}|}|}|~zyvrlfhrw~sxzwoevvwxxzt}g|_|[~bpzxvx~r~_~ccgjkqvsov~}}{}q}v~u~u}u}v}v}x}z~|~z~v}r|r{t{z~zz~zrz]{[{i|w~y~z~u~q~t~w~z~{}{~{{yvwxxxwusrqppopol{kuovt~x{~{xvuwy{y~wz{zwrq}wx~wwvuttttssssr}q~g\\ehjlkc^YWZWMGB=76=NZadikmljgfe`YRJ?505@GJDAQGNUONNSONOXdinssqnccjlnnnmlkidbbccdcb_____^YX]fjfaYLZhQVVWWW\\dkmpthjllliijjkmmnoopqqrrtuuvvx{y{~{wurp~p|m|n|rsqqsuy{~}ywxy|}~~}~}||yn^V\\lruvxxxtolupegvxqsvz}}{{}{}ugfliffkpoldfkprupvq~ruurnmnv|{ypqvv~r~p~q~v~y~y~z~|~}~}~|~|~{~|~}||{z||yz~{}|}{}z~yyywuuttvxy{~|~~zvy{~ysprtuwyzzzywus~s}u}u~x~z{{{|{~z~{~}}}m|d{l{k{l{n|r}u~u~tx~}~}~y~yz}~}}}~{~y~y~y~z~{~{~z~{~{~|}~}{{{~{~{~{~{~z~zzzzz{{~{~z~y~x~y{}{wvxz{{~{~{~{~||}}|{{||~|~z~w~t~y}||~~~~~~~}}}}}}}||}}~~~~}}}}}{}zvwxz{|}}}~|~{~|~}|xuvwvtvyz|}}~}||}|}~zwxytuyxxz}}}}}}~}}||}~~}||||~ytpv~z~~}~~}~~{wrjee}h|o}y~~}}}}||txnv}v~w{u{q|m}k~mmoqrv~{}}}}~~|{{yxtqruxyyzyyyy~y~z~{~|~zx~x}x}y}{~{zzz~}}|}z~w~u~u}v~y~{~|~z~xutw|{{|~~zvrrsuwyz{~|~{~{~{}||~|}||}ytqmlosx{|}|||}~}}}|zwtqomkhhhkqx}~~~~~}~}~}}}|zywutqpoprtvxyyyyxwusqtz{ytooqtwxxz{{yxwvvuttuuwxw~v|uzuytxtzt{u|v}w}v|s{p{o|o}p~p~p}o}n~nnpuut{ouhrhwl}oooonnnmnoqrqponmnnlijmpqnjhilpv{~~|{{|~v~s|~xpqwz{}}{~v~r~x{yyyzzzyyyzzz{{||}v}n}t~xyxv~xz{~{~z~zywtpkjkqqfw{yxqpwwwxz~o|Z{O{O}Ylxyxuwijmnmmtytpuz}}}v}x~u}u}w}w}x}v~vvsr~q}y}{|{}z{zz{zfzn{{{z{w{{{{|w|v}xyz~x~vyxwwzxwwwvutrqppozlwmsost{z}{xutvwyzy{{yvss{xwwvttsstutspmbX]e^]dh_WSSVUMB843=KZbegjllhc\\[TLF<67:99FPPMISKP[TOQSONP[cgqrsohUS_agfghihhdb`aab`acbb`]\\WYdjgcbdOVeUXUYUUW`gilsrlmmnjjkikmnnopqrqpruuuvvxzyz}~}yuttrr~o}p}ttrqqtxy{|zwvvwy{|}}}~z{~}|xl[QZpsutxzyuoovqfhwwpqtz}}zwwvzrejoib\\\\afgffgilpott~ssvqjimw{ytlt|x~q~p}p}u~x~x~y~{~|~}~~~}~|~|~|{yxy~|z{~{}|}|}{~z{zxvutssuwz~|~~}zx{|ztrtvvxy{{yyxwv~r}n}o~t~wvvvyzz~}~~}}w|l{h{h{j{m|q|s}v~vu~xwuwy}~}|{z~x~x~x~y~{~{~z~z~zzz|}{{{~{~|{{{{{z{{||~|~{~x~v~wz|zxxy{{zz~z~z~z~z{{{{{{zyyxz{|||||||}}}}}}}}}||}}}}}}}}}}}}{|yvz{{{|||||~|}~~zuvxwuwyz|}}}|{zyz{}~}||~xyzoks~y{{y{{}}}|{{{}}||~}~}~}~zsx~y~{}|~}~~~~}~zpfg}n}r~y}|{~z~{||z|~{{y~v}p{h{f|i}k~l}n}q~t~y}}}}~~}{zyurtx{{zxwwwx~y}z}{}|~{~y}x}w}w~xxyyy~{}||zyxwuwuxvzx|z|z|x}uttw{~{{|~~zuqqsvxz{{{zz{~|}~|~|}||~xuqpruy{||~|~|~}~}~~~~|{wtqomkiggjpw|~~~~}~}}}}}|{yxwuspoppsuwxyyyxwusqsxzxsnmortutuwxzzyxvussttvwvu~u{tytytyu{u{v}w~v}t|q|p}q~rrrqqqqsuvup|m{k{l}mmnonnnmnoqrrqpnnonkgfjomkjijjlsy|}|{{|~w~s|~xop|z}}|zxxxxxw~xyyyxyyyyyz{~~{}x}x}y~xxvvwxx~x~xxxvtqhb__VLl{vwvuwvvwy~j|N{I|M}[nyyxxwtxvsxwx|vrqu~q|s|t|v}t}r}e}n}w}x~tporr~u}||~{}{|z~z{ztzwzz{s{q|s|w|y{x}yxuq~n~xvrv~y{v}stvvwwvtsrrryqsstv}|~~zxstro~n{v||}{|tzwv{wy}norqqqqsuvuph`UQRVXPZb[UPPQPJ?47AMPX`dgijjcYKMLED=8<BB@GRTNOUOOQWTRROOQ]chrqql]KIUX^abcd_fdcbba`^__`[VXX[brn\\_dlWRcWVX^VST\\ccdoynnoojjlglmnnopqrppsvuvuvwxxx{}{wsstssssuvtrprvwy{|vtss|u{xy{z{}|v~x~~~}ymTMZrwwuz{yuommpglxvpqsz}ztomszyqsrxoZRVagecfcfjnptr~sxqdfmvxwrosqp~m}p}t}u}w}y}z~z~y~z~|~|~{~{{wv{|}|zz~|}~}~}~~zzyxxz{xutvz~}~~~~|yyz}~}|{zzzz{zzyz{|x~o}i}h~l~onmnpuz~|~~~~}|}t|j|b|k|o|n|p}v~v~qruvy{}}|{zyx~w~x~y~z~{~{~{~yzy{||}|||{{{{{zz{||{~}~y~u~vyzzz{{||zy~x~x~x~x~yyyyyywvwyzzzzyxxxz|}}}|}}}}}}}}}}}|||}}}}ywz~~|zz{|~~}~~|yzzxwyz{}}}}{zzzz{|{{{}}{ugdnztrvrvwyy{xyyuyuzx{z}{{z|~~}~|~~{~y~w~wz{zxyz{{xnfp~z~vy{{zxxz~}}~z{}w~p|h{gzjzl{l|n}q~r~w}~}}}~~|zxusuz}~}zvutuw~w}y}z}|}{}y}x}w}v~vwxvt~v|wxvrtmqlnlnqqvsxtzt|ssssz~zz~|}}{vrqtwy{{{{zz{~|}~|||~}|~{xwvy{~|~}~|~|~|~}~~~~}{zvtrpnkiggjpw|~~~~}}}}}||{zywvsqppqrtvxyxxxvutrswzxsnlmprsrruvyzyxwutsstuvutt~s|s|s{tztzt|t~r~q~pqstttuuutuvwvtpm~kklloponlmprsssrpooomllmkffjkkjjqw{}|{{|~x~s|~yontzyuuxxwwvvwxxxxyyzyyyyy~u}t}y~{~|{{z{wu~t~v~vvvunaYXVK@Nnzxwwwwwwyj}N}G}O}_~q{zxvxxxxx}u{z|rnl|d{i{p}r}q}n}k|j|d}o}j~jmsr~v}||}{}{{z{y|y{zzzvznzjykzozv{{|{xrkr~y~p}j|tzyxpzk~n~rux{zwvuuwwyyw{z{|{xvrspc~_ehga~m|s{i|lbcdddfhkllg^TMHHJMRKPTSOMLMH@94AMQQW_cfhiibRB:BBCB@?EIIKOQNRYPKJTWTPNPR`ejoqndUFFSUY^^]^Y_abbb`^\\]]``\\TZgoqcScfkaO^YY^bXSRX_^^i{rpqpjjmelmnnnqqqqqsvuuuuvwwxz|zvrrssuuuwwusrrtuwzzusrrzsyvwyyy{zs|u~{{|~zq\\JTtuvsvvuuqihnkozvqpqwzvkdhpy|wpnupZKJV^__dhnrsotq~surgilqtsqop~l~k~k}o}t~v~x~{~|~|~z~w~x~x~y~zzwxy{zzz|~|}|}{~y~wxyz{|~zwuvz|~~~}{zyxwxz||}||{{{||zyyyxxp~f~d}d~g~iiiilqx~{~|~|~|~x~p}b}g}m}m}k}s}v~sruwz{~}|zxwwvwyz|}}zyxy||}||{{{{{zzzzzzyzyxxyzzzz{{{z~y~x~x~x~x~xxxxwvttvyzzzzzyyy{{|}||}~~~~~~~~}}}||}~~~{z{~|yxyy{}~|||}zxvvxy{|}~~}|zzzzyxwwz~~~~{mg}mtqoopnpopprlvgyh{n}s~v~y{||~}||{}|~~{~xwvqruuuwzzvrwxwvyzyvvz~}~{||w}r}nzpwpwoyn|p~r~r~v}~}}}~~|ywutw{~~}~}y}t}r}r~su~u}v}x|z|z|y|y|w}v~vw~u}o{kymumomnkqlonkmklmktlym|p~ssoz~z~z~{}}{~xvuvxz~|~|~|{zz{~}}~{{{|}~}}~|~{~|}}}}}~~}~|~|~}~}~}|zyusqpnljhhkqx|~~~~}|||||{zzyxvsqpqrstvwwwwvvusrsvywrmkloqqporsvyzyxvutstuutssrrrr{sxrzr|ppprtuuvvvvvvwwwvspnmooqrqnlloqqrsrqomllnrqjdeikkiiovz|{{{{}z~t|~yonswwmmrvvvuuuvwwwxyzzzyyxws~t~{~~}}}{x~u~t~t~s~suukYSNJC>BavxxwwwxxzpU}K}N|\\|lwxxuxyywuyw}|z~o~n}g{Wy_zm~rt~u}u|l|a|d|e}d}h}n}o}q|s{w{zz}y}y~yzzzrznzmzm|n{t{|{|~zvs~v~v}m|kyswwzp~n}nzpzv}|~|zxxxz{}|vwxuroihaUOSTSOZ_ZaWVUUVWZ\\\\YQH@=@CFHJHJGHGFGHA75=KPNPV_defgg`K:56>DGC=AKPQOMMR[OKHTXTOMPSaekmqjYMCITTX]ZY[VY_bcca^[[]_ba\\crvcPLik_dR\\[^ddZTTV[YYdzvrroijlfllmllopooqsuttttuvvwx{zxsrrsuvwxwvttsttvwvrssszszuxw{xzys{s}v~wy}{vpXY~tsspqr~s~v~s~i~emnnwuqootvoe_ajsvsjjqn]FBPZ^cjntxvpuq~ssrlommnoop~o}k}i}j}n~s~wz~|~~~~~}~y~w~v~xyzz{xvtw{~~}~z~v~r~tvxz{{zvuuvz{}{ywvuuuvxy|||||{{zywvxx~x~o~d~b}b~d~eefhlrw~z~{~{~{z~t~k~e~h~n~m}o}s~ttuwz{}|{{ywvuvy{||}zxxy{|||~{~zzzzzzzyyxwwvy{{{zz~z~z~y~y~y~x~x~y~y~x~w~wxwwvvuuwzzzz{|||{{{{|{|}~~}}}}{{|}~|}}|tpqty{~}y{}|xsrtx{|||}~~}{yxxvutuy}~~}}}vpzppoqltkkljjoaw[}_ip~t~x~zzz{{zu|}{~~~}~zyshimpuvxz{yyv~u}r}uy{wvz~}~y{uwuszs{xyvxuys}tts~x}}}}~~|yvutvz}}}{x{q{o|p}r~s~s~t}u|w|x|x|y|x}x~w}t{nwgqgjlemgmrjzlqvkykuiosjzl}p}t}s}lz~z~z~{}||}{~y~yyz~{}|}}}}~|{z~{~}|~{zz{|}~}}~}}}}~}~}}~}~|~|~}~}|{xwtrponmljimtz~~}~~~}}}|{{zzyxxvtrrrsuvuuvuuuttsstvxwrmklnoponnoswy~zxwvu}t|t|u~ttsrqppq~szszr{p~pqruvvvvvvvvvvutsrrrrrssspmllmnqsrqnjhimqqlihijjhinuz{{yy{||}s|}xomsqrqpqsttttuuwtwxyzzxxy{{z{~}}|z~y}t|q|m|n}p~sum[MFECNcs{xxxxxxyyyf~T}O{]|frxxuyyzuloquusskzYxbylsw~y|y{pzq{^|b|`|`{dzczbzczjzvzyy~x{xqzm{o|pqsx|}}zvq}p}tv~v}vxvwpxk{m|r|z|zz~~{yz|}~rrpmj`XVQJEGIIINRQYPONNNNONLHC>;;=CFFDBD>AAAAF@9@HNNMNU^efgfc]I614;BJHABKQTOLNPZQOMWXUOMOT`fllnfSHEOUP[_ZY]XZ_bcba_\\]^__`hmqpeUSiiV\\Z[]bdb[UTVVTWaxytrngikgkkkiklmlloqurrrsttuvvxyztrrqtvwxwwuuuuuusmlqtst~u{w~x|xvyr|p}vwz}}z~olwssrpoout~o~jnnnsrqoortnid^cimjeiloeLJZ_cltsvyuqussrrosnmkmo~u~u|m|k}j~n~s~wz|}~~~~~~}~{{z{|}ysruz~~~|~u~p~ruwz{yussuwz{|zwutsssu~v~w~z~z~{~{{zyxvttvy~{~t~jdabccdgpvz{~|~|{zxxlhpq~s~x~y~xvxyz{y{{zxvutx{|yvuutwzz||~|~z~y~z~yyyz|yxxwvz}}|{z~y~y~w~w~v~v~w~x~z~xvvxwwwwx{{|{|}}}}||{{{zzz|~}}}~}||}|{{|}~~~~{sllpwy|}}{{}~}{wsruy{{zz|~~|ywwvuuuy}~~|zzyv}swlxfwepgoduXyS}]m~u~v~wwwvxyysz|}~~~~udacluvxxx~v}wzuvqunxsy{xw{~{~p{ixpr}pt}z{|{z~y~x~x}{}}}}~~|ywutux{}|{yzrzp{r}s~s~r~r~s~t}v}x}y}y~y~y}uzltfjm_u]vdtrivdmqd|bzhrtjzk}n|p{o{jz}z}z}{|{|||}|}{~z~z~{}|}}}~~}~|~|}}}~|{zz{|~}}~}~}}}}~}}}}}|}|}|~}}|zwusqponnnmlov}}|~~~~~}}|{zyxxxwvtssstuvuuttsssssstuwvsolkmnonnmnqtx}y~xwvu}u{u{t|s|s}qqonoqst}s{q}pprtvvvuvvvvutsrqrqrrrssrpmlklnpqppnkklmppmkiiiihhkry|{yxy{~}t~||wplqy{wsrssttsuvwwwxxyxxwy||||}}|||{zy}s{jzd{h{l~ptukXW`gpwyxwxxxxxyyxvke{m|dswxuyzysfczl|qtknl{jzixkrw}y{zy}zt{[{Z|V{Xy^yZwVxRy`{rzyx}xrxjzi|m}orv{}}{qj}n|pvzwzvonugzi|r|}}u}ty{z|z{|{wuyxpe_^[QHGIFCEGHHKMNPPONONMKHEA@=:;=CEH><=<=@?>D@@JPNLMNU_egfd_RG6/17;EMKFKPUPLJMUTTW\\\\XNMOT_flll`RHHWSM\\`XX\\WY`ccba_]__acgnolki]Yi`YW][_dd`YUUUTSXau{vrlijjhiiigkjkjjmospppqrssttvwzutrpsuvwwwvvvvutqki|osstvzw~x{xxyrzp}wx{}}{zvuyut~sqopsq~p~mnnnpqpoostqklc^adbaijnj`ftgjsxxwvtttssqqksrmkkp~v~v}o}l}l~p~u~{~|~}~~~}~{~y~z|~zrqux~z~{~{~yrqsuw{zustwyzzzyuttrssu~v}w}x}y~y~zyzywuttvvwupjdcddfkuy{|}~|{zy}xtsux~z~x~vuxxxyz|{zxwutw|{vrqstuxy{~|~}~{~z~y~y~zz{|{{{zz{|||zyy~x~x~w~v}v}v}x}y~x~w~w~w~xxxxy{{||}~~}{{~z~z~z~z~zz|}}|||~}||||{{{}}~~}wnmmwyz|{||}{xwxz{{{{xvvy|}~}|ywwvvuvx{}~~|xxzxt|k{czavdvdyZ{V}f~z~|~y~ywvvwyyx{|}}~~ub][cswx|vxturqrnoknmnxsxzxwz~}w~f|fwvq`fw}}{|}{~z}z}|}|{}~|ywuttvy~{{{zwzuzv{v}u}s~r~rs~u~x~z~{~z~z}y}uzpowd~c{gwkgl_mrjzioojrhuhwjxkzk{jz}z}z}{|||}|}|}|}|}|}|}}}~}}~}~}~}~|{{z{~||}z~yyzz~|}|}}~|~|~|~}}|zwusqpoooonnqx}}|~~~}~}}}{zyxwwvuutuuvwwvtrrrrrrrrstvutqnkllnmmllnqu}x~yxwu~uzuyt{t{s}ssqnnprtu|s|poqsuvvuvwvvusrpoonnmmnopoonnnnnmmnnmnooonmkjihiihhnv}{xwwy{v~|{uomt|xtttuvuvxz{zyxxwxyzz{|{{zzzzyzy~s{iy_yazh~ktyusqxyxxxxwwxxxxxwxywurh}q}tuvzzyuopzptknoopnlwjp~r{tyzxzzv{e{W|PzVx`w[uVvRxYyi{zzy{yxxrzr~rst|x}~{l]drttuxurtlyl}t{|xuusntrxvr~kfejmh[RNLFBCFFEEGHILNPQQRSRQNKEA@>?@AACCE?68>CCB>CFLOPLILOW`ghfaXCD;1366@MSLKLRPIFJQY^ba_XJJNU^flojYOJLXRL_^UUWUYadcbbacedghhihdcfb]]ZWU]Z`hf^VVWUTXafoxzskmljihhhgmjkiiknqommnpqqqqtuyuvroqtuvvwvwxvvurlhxj{mq~s|wwxzxwxx{yt{~}~~~~}|zzzxwvyxtlhqqqnllonnqvurlrjded_[kiiihjlknuywsrttuuqppitwqklvu~s~q~q~r~v~z~~~~~|y~w~w~xz~|ustu~y~{~~~xsssvzyuuvz{{zwuuvwyxxv~w~w~v~u~vvwxxxwxxwvuttvodckptzz{|||zyyzxttwzzx~v~uxtsy~zyyxutw|{tmnsxurw{~~~|~{~z~{~}~|{|||||{|||{zyzz~|~{}x}v|u|v}v~w~x~y~x~xxxxxyyz|~}|{z~y~{~z~y~yz|{{yyz}|||{{{|}}~~}zqnjqxz{|~{{xrsz~}{xvvxz||{zyxxxwwww~y~zzxwywsi^~X~]~kj~e~q~~~~{~zxwwxz|~~}}}~{r`Z_pv}x|wxtromlhiegeimo{tvvwwxzzp|l|vwo[^m~{|~}~}}}~}|||}~|ywvvuux{||z{yzzzzy{w{u|r}r~s~t~w}y|z|z}z}z~x|wv{p}lziuihicnwrstdsfmdkelhrhyh{jz|z|{|||}|~|~|~|~|}|}|}}}~|~|}|||{{~{}|{~ywvvvwyz~{~|~|~|~}}|zxvtrpooopopsy~}||~~~}~~}}|zyxwvvvuuuvwwxwutrrqqqqqrrtuuspmkklmlkkmorw~yxvut|txtyuzu}urnmnortv~t|q}oqqstuuvwvutrpoonmmmmmnooppqpnlkknnnqsqnkjkkihijhgktxuppqsxw~|{unmt|xwvwxy||}}zyxxxz{zzzyyxwwxxyzzxv|m{a{\\~htyzzyzyvwxxwwwwwwwwwwwtsp{pvlovzyywwyrsfyjorsrkvd}k|izhyxxyyyzuz[|P{YyixgvavZwSya|s}|{}zw}y|xvv|y}~}~{hW]noot}yvwvvzv|{z|tsylpqazex`XTTY\\YOGCBAADHKIHIJLNPRSSSTSQMIC@>@BEEFFD?C96@HHGFGAFOOJDJQYbhhcZP=;74474:FTPIELNKILWaihb\\QBGNU]flngTMLQWQRcbYQQSX`bbaa_]^cfea\\[\\ZUYZVUUW`\\_if[WXWWZemlhnyunqnlkjijlpkljikmomkklnoponrsutxspprstuvuwxwvvtroxkxkyqzsxwuxwxtwvw}wzx{||}{}}~~}|{xtrxzxrqrrqomlmlfituokxuqrnf\\gkedghimpsusruxxvtrmtntusor|xppq~v~{~~~~~~~}{x~x~yyz{}xvwyz{||vrrrtvutwx{|{ywuvxxyywu~v~v~t~sstuwxxz}~{yvtvwunlqxyzyzz{zyyyxwstvwxx~x~swwrz}xxyyvz}|{vonovxwz{~{~y~x~w~x~y~{~~~}||}}||||{zzz{{||~|~{}y|x}v~x~{~|~zyyxwvstxz}~}{zy~z~{~{~y~yyvssuwz~|{{{{{{|}}}}}{xtrjox{|}yxvpt|~}~}~|zxwxz{{{zyyyyyxus~s~uvvuwvskdchsstv~z~{~z~z~yxx~y~{~~}}}}~~~~|xsf_m{~z|yzwutmrfqao`mgqvwvssuw}wzwxy{y~tk\\\\f~y|}|}|~|||||}~|zxwxxxy{}}{}z|z{zzzwyuxszr|r|s{tzuyvywzw{x|x|y~z}yvxlujlleqnvnzgygqfogohuh{i{lz|{||{}{~{~{~{{|~|}}}}}~|~||||{{~{}|{}xutqqrtvxz{~|}|~}}|{ywusqpooppqty~}|{}~}}~}~}}|{zywwwwvuuuvwxyyxvtsqpppqqrrtsqmkjkllllllouyxvtsrzsyuzu}tplnpqstvt}r}qpoqrtuvuutsqpponnnnnnnopqssqnkjknooqrpliilljiijihinojffimsx|}{vpns{~}zwvwxz||{yxxwy~}zxyxvtstwxyyyvq~s|p|f~pxyyyyyyxyvuwxxyxxxwvuqoqtxjra|gowyyxwvxt|xwvwvmwg|n{m|kzxy|y}z}zd{U{\\znyuxowbwPy_}p}z{}yw{}zxy{}~}~}xhY\\glqvyy{w|y~xr~ivnqayJJJHGGILHE@??@BGMPMKKLNPSSTSRQNKGEB??BFHJJIEAD?==JLIFA7@EFB?JTZ_edYND:7656655<PSGAHPSQVbkmdXQE@HNT]ekldWSMRURS`_YPMTY`abca^XSTX\\ZTSWVMQXXWWV`\\[c`\\ZZ[^grvqdbnyurpqnkjlpsmmkkllmjijklmnmlopqsvtqqrrqsutvwwwvts}s{pznzs{uzwxxxxxw{vuuxyyzxz|~~}{smvyxwvusqqppol^`kpomxyyzvmaajeacksoqsstwzyxvsrlwoppruy~|snpv~y~|~~{~z~|}~~}{{|{z{{xx{}zyxvssqpqsrsvy{{zwvtuwtpoqst~t~s~qpruxxxz|}{ywusqpuvvwxxyyyyyyyz|zwwwtst~xw{{zvwzxxxyx}{zwssxuuy~y~p~m~q~q~s~u~u~}~~}}}}||{{zzz{{{{{}~~|}{~xy{|zyyxwvstxy{|}{zzz~{~|~{~z~zuoklruy}|ywy{{{{{|}|{zywxwppswz{|ywvsw{{{{~{||{{{{{{zzzz~zzzyxw~vvwutuvwsrwxxvuuuxy~y~y~x~x~y~|}~}}}}}~}~~||zupkw{~{|yywtvjye|`y^ujuzvroru~w}v|v~vs~n}kdd~i}y|{|{|}||||||}~}{yyyzz{|}}||{|{zzxzvwtuswryqyovototouqwsxtyv{www{wsxqrrgtfvmzn}j{iziyizi{j{o{|{{|z}z~z~zz{{~}~}}~}~|||{{{{~{||z~wrpmmmoruy{~|}}~}~}|{ywtrpoooopqty|}|}~}}~}~}~}}{zyyyyxwvutssuy{zxvsqppppppqssqnkjjllllkjmqu~v}v}usrr{szt|urnqsttuuut~r}p}o~opstuttsrrqppppnljkmoqrrspnnmlnonmlkjjklkjijkjhhiie}c~hmloyz~{vqpsxzyvttvy{|~~|zxxwwy|{~w~tyxusrtwyyyxqim}r}s~wyyxxxxyyzsgrwxyyxwvusnljxguaxfvazdsyx{wniz}xwyyvyiubzfq|yzzzxytytzd{ZzpzvyvymyXze|t{yz}xy|{zz|~~~}xwqdckosx}{w~wul\\RQMB=?ABCCA?>>?@ADJPROMMNOQSSRPOMIDA@BACFILMMKHDEBD@HHD@:3:756?NZ]\\\\YNA;865677656CNI@ANW\\bhf^UIE@AHMS\\dkke_ZOSVRS^bZNMV[_`b`_^\\YVVVSRRVWTRZ^]YV`YVZ\\\\]agkryytf^cuxtstsljmrrmnmlmkhgiiklklkjlnorqtqrqpopssuvwwvss{s}s}s~u}v{vywzw|vusrqqqsuy{}}|wowywuutpnqrsrnjilprruwxyum^Ziddkmrorstuwyxvtrrsxpknrw{~~z~u~posw~z~w~u~u~w~|~~~}|{zzz{zxxz{{ywttspnnpppowzywvvusrponoqrrqonquyywxzzyxwutqlkqtwzzz{{zzzzz{{{|~qho~xy|{qpxzyxzzyyxyyyyzyvxzu~o~l}k}p}q}s~v~{~|~{{{{{zzyyyz{|{y}w|~~~~{~xxzzyyxwwwwwxy{||{|||~{~{~{~{~yztkiqx~}yxy{{{{{{|{{yxwyzvqotyxyyvvvxzzyyyz{}~}{{~}~~z{{{ywuvwvutu~u~x~y~ywxxwuqp~vzy~y~x~w}x}{}|}{}z}|~}~|{{xusw{~{}z{xuwlgbv`oknxnlpuv~v}w~vvr}n|n|n{k{r{y}{~{~|~~||||{|}~}{zyz{|}~}}||{|z|y{xzvwtusurvpulnjlhmhpktovrxtxuytxuyw{zyxxsvpvounumwkwiwh{g|k~p{|{{|y}y~y~yz{{~}~~}~||{{z{{~{}{|}zwrnkjjloswz}||}~}~}|{zwtqoooooopsx{~~}}~~}~}~}~}}}||{{{zxwvtsqsy|}{xuspooooooprqnkjjklmlkijlpt|v{vtqpq}s{v|wtuvvuuuvtsr}p~oooqstssrqqqqqqpooqrrrrqpmnsqmnonkhhjlnmkjjjjjhgjig}a~ekimzy|xtsuyyusrsvyz{}}|{yxwxz~~~|y{{ywwxyyyywqjf~h~qtwyxxxxxxwpbfswxxwvtrpmi^wgym~rnjntvzzqfv}yyz}||uyn{ou~z~y|uzsy|ywzk{v{xzzzvzk{q{xzzx~w|~{{||~}}zrj~i~j}ortvz~yvq_LB@@>=>?BCA==>@CDEGKOPOMNOPQRRPKIGDA??BDGILNOOMOIFKLJH=87644108GUZZXVMB87655678665?FGCET`ff_OEGEA>?EKRZbimhc_RUYUS[cZOPY^]]``_ZY]^]YSQSWXWU\\ab]ZbVQVX]ckrtwvtqkbcltwtrpmknssnonnmhffjjlljjiijlmposprpnnnqqsuvwvtttt~tv~v|vzv}vutrqmmmorvy{|}~|y{ytuxyzwwvvvsqpptuxxxxxtl]Vhmkqqqosuvwxyxvtsqo~trjop~r~w~z~w~p~klptvvwxz~|~~~}|ywxyzzxwvvwwwuuqfdkopolkpvwxwwx{{wsrqrqonnquyyvvxyyxwutvnjptwz{|||{zz{{~~}njux|~~|sswrsv~x~vuuvyxvvvwyzzxu~s~s}w}x}w~x~y~z~yxxxyyxxx~x~x}w}wvzrymu{|~yyxwxyywvxyyyyzz{{|||{~z~x~x~x~yzvonsz}}{zz|||||{|{zzyxx||vqqvzzxuuuwyyywwy~{~}~~~~|~zy~z~{~{~y{{zywvuuuu}v}v|x}{~}~}{z{~x~v}q~q~u~xx~y~x~x~y}z}y}x}y~z~|~|||z~yxz{~|~{|zyzr~i{foikqmyptqlr~}~|{vs~r{swtwpyv|{z{zz{z{||}|~||{{|~}~{~z~y}z}{}|~}}~}|}{}z~y~w}vzuwturpolkghfeidngsovtwrvrtpsqvv|}}||y{vwtqtjrllwgdcg}n{|{{|z}z~z~zz~{~|~~~~}~|~{~{zz{~{~{}|}}{wrnihhilrw|}~|~~}~}|{zwtqonnnnnprvz}}~~}~}~}~}~}}}}}|~||{zyxutqrvz}yvurpooooonoqpnljjkkllkiiilqu|v}wtpop~t|vzw}wwwvuuvuttrpomoqrssrqppqqqppqrtsqponlnvtnnnnljijnpnlkkjjihgiih}ehgfn}{|ytqtwwtrtwxyzz~|}}|yvwy{|}~~|yxxyzzyyxwxyqbalvyxxxxxwwvjeqwxwuuuqoojfq}u~wxrlpvuromr|z{{}~~|~zw~x{yv{vyyzy{y{x{y{s|p}p~s}xz}x~}}}|}{}~|yxv}r{r~stvuzv~yzvkS@;;<>@BACEC>>?BFGHJLNNNMNOOMMLMHCCBA@ADGILNPPPNNMKSRFB62124612>NXYRTLB95555567:98;DAFMYcge[L>5?EB>?BHPY`gmhb^TW[VSXb[RV\\`[ZY\\\\][ZZ\\YTRRW[ZX[_^Z[hWTY[`luwwvpmlnhhfmwwonnlntrnooplcdgjkmmihgjklmoorprpnnmoopruuvtttt~t~u~u}u}uttsrplkkkptwyz{|}~|yqsw~~|ywwxvuuwwwvuuvri\\Reyornmotwxxxxwvuusstpgqn}i}l~x~y~q~l~klptxyx{~|~~{yvuvwyyxvtrvwywwuifmrusohjqvxz||{soqssrpopsvxxuuwxxxwuu{tqwxxyz{{zzyz{|}}}|ytt|{|zz{z{vjkr~w~vuuwyv~q~o~n~s~z}xwzz~z~}}}}y~y~y~x~wvuuvxxx~w~v}s|oxkuirivcnxxwx~z~uvyywwyzzzzzz{||}|z~y~v~u~u~vvxuuw{|||||}}}||||{{zzyx|~zvqu{xwutuwyyywv~w}y}|}}}|}z}w}v|t}s}v}y{{zxxwtrtw}y|z|{}}}~}~~~~~~{}x|u{u|u}v}w~x~y~y~{}z}v}t~v~y~|~|}}|~{{|~}~}~|}||}x}nvjmqqxv{w~zrmv~~~}|wx~y{zyyxsxvzxqzwyyy|z|||}||{{}~~}~{~z}y}y|{||}}}}}|}{~zyxv~uzusskqhmdidfhcnftqxvysxqsmmkory|}}|z{yxxtyrvtlc^]_e{|{||{}{~{~{~|~}~||{~{~{}{||{}{~{~{~{}|}~{xrnigfhkqx~}|~|~}~}~~}{yuronnmnnoqsvz}~}~}~}~}~}~~~}}~}|||{{xwutuxzxvuspooooonnponljjjjkkjjiijmq~rzv~vsplos|u{w~wwvuuuttsrpnmnppqpppoopqqpommpollmppqutommnnljjmonmlljhhhhhim~nphgq}|~}ytnpsss~vz{zzz|~||}{wtwz{zz}}zwusuzyxwwwxxwngpvxxxxxxvvytptwxsrturosqik|nywrmptsrvss~y|z{|}~~{yvuy|{{{zyzu{u{u{t{h|ikov~|y~|~{yw~x~}||}}x{oypys|u{wy~vutndM;9>@ABDDEEC???CGIKKLLLMMMPNJFFGFBBAABCEHILLOQPKOTVTE:862013646@LTXJJA=66666779==<BOIO^lndVHB@7<CE>BCFNV]dkf`]UW[XRT`ZVZ`a^[ZYX^`]ZZWTQOV\\a\\UW]ZMXY]]^iv{vtrojlnjkhiryuspmnspnmpoj^eikkkmiffkmmnnopopoon~n~n~m~n~o~rssrrrr~s~s~sssss}r~rrolkknqtvxz{}~xprw{~|zxwxyxxxwvurstwri[Qb|pommotzzyxwwvvvwotxlkh}a|c}h}p}r}o~m~j~l~r~vvpu~{{vvttvyzyyxvsvxzxy|xojpsrqnmorvz~|qostttttuvutttuwwwwwvtrlnwyzyyzzyzyz{{xxxwxz{{|{wvz||xkh~p~uwxwxx~t}n|i|h|n~wywwyz{~|~|~z~y~x~v~usrstvwxvu~s}nvcp]t^zbluvuy{~tuyzwwzzz{|{{{||}|x~t~r~t~tvvxyz{}}{{|~}}}}||}}}|||{z}~}ysrrsrrsuwy{|{~w}u|v|x|z{yzw{t{r{r}r~u~y~zzyxwv~spqt~w~y~{}~}|}~~~~~~~}{zwwwtzu|v~spsxx~t~s~v~y~|~~~~~~}}~||~~}~}~}~|~{~uzrvxy{}~~zvz|}}{|~~}~|{ztwtuwkzxw|x|y{||~||||}~}{z~y|y{z{{||||}|}{~zzzxv{vuvosnqgmekljrkxrzu|t{rukhdfiqt{z{zyyxxvvwo}c[WYVU{}z}{}|}~~~~}|{yxw~y}{}||}{}{}{}|}}|wrnjhhimtz~}|~|~|~}~~~~}|yvsqponmmnoqux{~}~}~}}}~}~}}}}}}}~}~}~}{zzyyxyxwusqpooonnnoonmkjiiiijjihijmp~t~tsqpqr|t|t~uuvvvusrrqnmlmnnopponooooomlknmkimrtrpqpmmnpplklllmmljgfghhip~unhhs~|{}ztonpq|s{uz{zz{|{|}zvuvxzyz{|yxursyywvvwxxxusswxwwwwxxxxwvvxupjstrpuwoym}ptvrnoqrqops}x{z{~}}zxuty|~}{|z{yxzs{j{k|m{hzhlqw~{z~zzxvvw~||{z{ywwtwm||vpomm`TF::DHCCFFEDB??@DGIJKKKJLKJNNHECCCBABDBEGHIJJMPQMPVZP:24432248;<?DKYB=>9566767;;;CJIQW_ki`WLA@?::CD@FEFKQZ_fhd_WU[XQR`^W[cc`\\YXXZ^_][XRPMMWcaRU\\[SSYfdjt|ysporhmnjjjiowwvronpnnlplh]gllkjlhfelmnopooooooo~o~n~l~m~m}oqqqppp~q~qqrrrr~r~strnmmnoruwyz|}~zsrvz|zyxxyyyyywusrtuxwh\\RXlklnomsz|zwwwwwxxsrzmNU|X{f{h}p}q}r}q}k}k}q~t~s~n~qz~wstttvxyyxxwtvyzyz~ogimppoqrqq{{tzyurututvvvvtqruxxwzxwusrkoxzzxwyyyzzz{{zzyyy{{||{ywwyzwtn~o~puw~rs~v~t}l|f{f|i}mwuvxyz||zyvtsrqstuvwv~u~s~q{bWZdxruwxy}xtxy~v~tvxz|}|{zz|{xussuvwwxz{|}}}}}}}||||}}~}}||~|~|~}}}~|vropqqswxzz}z}u{t{sztzuywxuxpzr{r}u~w~zzzyxww}s}o~nnpv~x~||{|}}|}~{|uvtswt|v}qlinq~t~s~w~z~}~~~~}~}~~}}~~}}}}|{~y|yy{}}}~~~|~|~{~{~}~|~}}~~}{{vtvrvty}vw|y{||||||~|zy~y}x{y{y{z|{}|~{}z}z|y|w|vzwwvvuqropmnpnvoyr|s}s}rvjec`enqyyyxxxwwwuzlZPVVMF{~{{|~~~~}yvttux{}||}{}{}||}zvpnkiijov|}~||}}~}~~}{xvtrqpnmmnpswz~|~}~}~}~}~}}}}}}}~}~~}~~}|{{{zzyxvtrponnnmnnonmlkihhhjjihghjmq~s}t|t}t~t}r|s|s}tuvvutr}p|o|nlllklmnpqqqppoopmljmkjhlrsnjnrnlnrsomjikllkigfghiks~upkls~{z|{uomnxospwqwxxz{|||}yuuvxz{{zyz{xnnwywvvwxxxxxwxxwwwwxxxxy{xnehjstsrvx}t}suuvspmlnqppuw~z~}~}|xvwy~}|{{|{v{q|g|^|]{`zkpuy~}zxwwwvw{}}{w{s|m^fadfd^PB=>?FLHGHGFDB@@ACFHIJJIIJHFJLFCBCBBDFIFGIIHFEGNRTPLPG43235634<FD==@XB<>8478:7:ADIRVOP]geVMOJDD@:<DDBJHHKPY[bggaXUZXTS]]VZggb\\YZYYYZZZ\\ZQG@FRXQUa_TR[mmtvxronsxnroihajlrtwvqonmmmphf_ilkkikgggmnnpqpoppopooom~m~n~nmnmmmm~n~opqqr~s~s~uwvsqpooqtwxy|}~~zuvwyyxxyzzzz{yvrs~vwymc`PO^dhjjjouvwvvwxyzz~xpfU<}C{izf|k|o}w}yutsmm~qy{zrqstuvvwwvzywwyyzz{yngjlosuwuqw|tdcakwwvvsrqttsoqvxskkmqqqtnpuvwyzyyyzz{|{{{{{{{|}}|xvvwww{x~l~i~u~x~q~quw~q}k|j|m}mtuuvxz||{yvtstuvvvvv~u}t}rl^TWcvnwzyz||wofe~gkpw}~~zywrnprtwz|zyz{|}~~~~~}{{{{|}~~~~~~~~~~~~~~}zvptuwxzzzyx}v|rzpyqyqxqwswswqzv{x~{||{yxxw{v|tpnkmrty}~|}|~xy}{{rspouszu{r~mhgjn~t~x~{~~~}~}~}~}~~~~~}~}|||||~|}}}}}}|}{~{~|}|}}}}}~}~|~}~~~|{xvyuxwx}s~u}x{||||||~|zy~y|xzx{x{x|z}z|z{yyxtvrtttxv{w}wzvwvutxt{t|s}r}s}qymmghjqpwvwvvuvuyt|m_WYUIE|}|~||~~~~}ytrqsv{~|}}|~{}||}zvqoljjlqx}}}~}}}|~|~}}}}|~|~{ywvutqomnpsxz|~}}}}}}}}}}}}~}~}}~~}~}|||{{zywusqoononnnonmlkihggijihgghjnq~q|s{t{u|s{r{r}s~t}uzuyt{s{q{ozmzl~kkklmnnoppppooopmkjmnmjlrsnjlonmnqsqnjhhiihhghhiklqtqkjpy{}{vqoptpnovpttxzzz|||xtuwyz{{yttzysnwywvvwxxxxxxxxwwwwwxxxz{ysjamruxvtuvyzyuttrompnoruz}}}}|yxy}z{}|}}|}}xogb}b{l}vz~}{ywwxwwxyyvpl_INJORNE@<;?FHKJHGECBAAABCEFHHHHGHFCGIEDDDBCFHJFFGHHHEIMOQQBDA36467976@QK@<<SB<;8474:@IRPVTYRO^cSFGNLHF@<?FDBJHILPVX^dfaYUYYXWYUTV_c`_[XVWZ[UUW[[TMHFHCRlcOSattusnnkjrzoqmmpookmqxzvpllnnmehckkihkjgfimmnpqpopppppppooonnmlkk~l~m~n~opqs~s~swyxvtrqqrtwwy}}~~zyzzzyxz{{{||{xtuwwta[eUJXhmlmmnprtwwxyyz{}sgmyQ}8|c{a|d|l~z}ywukmv||vstuuuusuwwyyxxxxxwvtrssuxxyywrphjgSNYnuvupifnusrvzxukfknnourpoqvy|zyyzz{||{{{{{{|}~}yvuuwxxx~n~l~n~r~n~rx|~w~r}q}w~wywvvxz~|~|~{xustuwwutts~r~pkd]b`fsqx{{{||xpmkiiouvy{{zwrnrvy{~|{{|}}}~~~}|{{|{|}~~~~~~~~~~~~~}||xwxxyzzzzu~r}s{qzpxownwnvnvnwpzw{y{{{zyxxw}vvsplmpsw|}~~~{{}~|xxlokktoyqzt}v~s~qnp~u~y~|}~}}~}~}~}~}}~}}~}|||~|~}~}}}}}|}z}y~z}{|{|{|||}|}{}|}||}x{sysxrwsxpwrwvyz|~{{|}~|zyy}xzxzwzwzwzwywyvwupqlopqvv{w|u|v|vzx{x|w}u|t{s|t~uysvsysxtvtuuwuzr}qjdem|pzqz~|}}}~~~~~ytrqsv{|}}|}|}||}zwurolkmrx|~|ywtuvxyz~zzzyyxuroopty{|~}}}}}}}}}}}}~}~}~}~}}|||{zyxwvtrqppppponmmllkjhfhjjiigggknnp}r|t{s{r{r|r}s{txtwtyrzoxmyk|k}j}jkllkiilmnnoooommloppmmqpmijloqopqpnljhfffghjkkklnqnkhlwz|{xtqs{tzs{suvxyyz||zustwz{{zwnltxutxzxvvwxxxwxxxxwwwwwwwxvtttlkumesv~uwy{}|usvvvsljjmou|{|}zyz|{||}||xqu}u}x}z~}{ywvwxxxvusnhbN<DA@?<9:>=?LJGGGDA@?@BBCCDEFFGFFGFDFHFFEEABCDFA=CFIJKKOJGPA:<3:86789;EQQH@@J<9874::FKMRPOEOMR_XJHGJIHF?>DGFCGFJOPTVZbda\\WVXZ]TSSUW\\_`^YVV\\_\\XUWY_ca_YGUn^MYmwusoilkerwrjfq|ugmrzyqllmmkgihjifgmgcdmjkloponopppqpqpppoonmkk~k~l~n~n~p~q~r~s~sxzyxvusssuwxy|}~~~}}}||zyyz{{}}{zwywvvkhmZNYotrpnqpsvwwxxxyzyja~o~~|o}Q}o}c}cp|{vtrorvwvttvvuuutv{zwwwxxxvtttuxy{|zxwvtoRBINQOXotspca~lposwyxyvqpqpoqqqosvxzyyyzz{|||{{{{{zz}}yvvvxyyx~r~l~e~f~jqz|wt~u~}|zxwwx~z~{~z~x~vsstuvvtrq~n~mmb[\\^Zbpmvxwx{|{trp~ruxwllvz{xywvwyz{||{|}}}}|||{{{|||}~~~~~}|||||{zzzyxxyxxyzu~q}t{qzoxmvlvlvkwkxn{u|xxxyyxyxwwv}v|t}p}o~rswz}~~~~~~~~||twjpikrmwnzs{w{|{z~vs~u~w}z}||}}~}}}}}}}}~{}}}~|}|~|}|~}}}~~}~}~|}|}|{{{z{z{{{{{|||}y}v|qykwiwjymxqytyw{y{{{||~}~~|zxy~y{yzwzvxttsrssrsqrqqosqvtwuxs{u{w|x|v|u{rvpsovq{v|v}t~uxuvvwwyv{t|u}t~p}q{u{xyxtwz|~~||}~~ytrqsv{|}}}}}|}{~zyxwurqqswxuqmjjlnqtwyz{{{ywtrrvz|}~}}}}}}}}}}}}}}~}~||{zzzyxwwvutsrrrrrqomlllkkkjhhhiihgghjlnnp}q|r|q|q}q{rytxtyrxoumwk{j{i{i}jkje__hnppoooonmmpqqnmpkccfhptqppomlljgeegijjjhhkomkhiw{|{xsqtvwwwwwxyz|zwtstx{zzxwqntyyxxyyxwxxwwwxxxxwwwwwvwtrlqwnptpcfnvquwz{{vstsupdkhjhoz~z|zy{}|}}|~~zy}|~}|}~{xvuvwxwspj`\\R<=CA?;9:<DC>IGEDC@????ACDEDDDDEEEEFEFGGGFFAA@@BA;@DHKNOJF>B@684<<6579?GHMKI>B<7765=EOHAGGIDDHS`NGOFFGGG>AGIHDDALSQSUV]bdeZTWX`RRSVVZ[^]\\\\Z\\aaa```^en`[aiaVQ]syurolkjt|xuiq|sjouyyrnmlkkkjjigegmf^`ogffkonmlooopoqpqqqplnmil~i~n~m~o~p}q}r~swyyyxwuuuvxyzz{}~~~}}}}||zztt{~|}}}zzywwrkl^W]eqrmnqquwuvyvwzwj`e{q{|{~z~xkq{zwrpoquspopsvqruvvx{wqruwyyvtrsuvwxzyvttrskNFNTVdossqghmjltxyyyxwutqpprrrtxww{zyyz|}}||{||{yxxy{xwvzyyxuq~j~fjrwxvtxzyyxxw~w~wy~t~n~nrnqtuusnp}e}c}fZRUWWerpxuusx{||x~v~uurqm~g}^}qy{zwssuwxwxz|~~~|{zyxxxz{|}}}~~}|{zzzzzyyzzyxyxusvxur~r|m{lwkvjukvmwpyt{w}w~x~y{zxxyxxx}v{uxtxr{r}stux~{~}~~}}{|wyqugrkmqktpxosnxs|u~t~u}v|x{yyx|{|zz{|}{{}{}~}}{~|~||}{}}}|}}|~}~}}~}}|}{}z}w{u|v|v}x~y}x{twlwhxh|m}p{szu{u{v{x|{}~~~{yxz}z||{yzvvslqepjpmnugzh{hykwmvnzo|p}p{n{oxqplhifhhlrpzu|v{xyyzy{v{u{v{t|t|tzvywyxorvy}}}}~~ytqqsvz~{}|}|}|}{~zzzzyxvsstsplhfefhlnruy{||{yxwwy{|}~}}}}}}}}|}||||||~|{zyyxwwvvvuuuuuttsqomllmmmlihhiihgggijlln~o~p~p~op}q{rzszr{pznxlwkyiyi{i~jjieeimopppponmnqrqpopldcegpurpomklmlifegijjhcchnmjgev{|{wrptwxxxwxxyyzxtstux{zyxxxxyzzyyyyxwwwwwwxxxxwwwwwxwqjlrwsrogchhtc{gpuz{vqminkdjihzcxh{}{{{xy||~}}{|~~ywx{xy~}|ywutvxxupg[PLF;==9:89;<AEAEB@??>?@??ADFFDDCBCDDEFFEFGEEGD@><>?<?CGJKLGA:5:533<<7458=C>CFG=?;7998>IN>5<?DC@FT^JFRGGFGIAEKLJHE@MUSTVTXahj`VTU_QSTWWXYXY\\]_abbcb_\\VXek\\`n`USavxrmknjhsxqxznuvvmqptrrrolijkflhechkecYleabfkkigkmnpmpppppokmjhj~g~l~l}m}n|p}p}r~vxxxyywvvwy{{yy|~~~~}}}~}z{vw||yy|}{zxwytnmb[W^knkjqrwtonsuyxobc}h|t|~ytwx{yrommnqqljjmrvvxyzwsuwtuyyxwurqrsttvwutrqruuZNR[Tdtssunrrmmsvwxyyxxwvsrsstvwyy{zyz{|}}||||}zwtuwzzvqtyvtrppmntuwutqqsuwvuwz~zsj~kmlqstuuxp|ezbz[~PKOREKd|rtvz{||yv~rpkfc}d]wm{uwyxvwwyxwxz|~~}|{yxwwxyz|}}}}}|{zzzyyyxxyyyyyyurtvus}s|ozmwkvjvkvnvqxuzv|w~v~y|{yxzz~{~{}wxurqtqyq{o}mmqu~y}{}{{|||u{evhvoiilajjgtn{t~w~y}y{yzw{u}u|szpysxywyvsurwvyt|w}{}|~{}{||}|~{|~{~{~z~x|v}u}v~xy~y{wxsxpzn~oq~r{s{r{t|v|z}}~~{yxy}y|{zyzuurip`panlkvZ~\\_}d{g{hyfyf{fhj}kvfkcffnkwp}tw}x|y{x{uztzuztzuzuzvzwywknrw{~}}~~}ytqrtwz~z}{}{}{~{zz{{{{yvsrqmjhfeefijmquxy{zyzz{|}~}~}}}}}}}}}~}~}}|||||{{{zyxwwwwwwvvwwvuusqonmnoomkihhiihgghikkkmmmnno}p|q|q}p}o|mxkyizizi}jkkigfghilopnmmnpqqpoqpiiigotqnmkjjllkhgghihgdcgjlhdcu{{{vporwxxxxxxyyxvsuvvy{yyxyyxxxxyyyyxxvutuxxxxxwwwwwwxuprwsssldgmkzb{_dmw|zupmjiklnkxbp]xq|}}|yxz}|~}y{}zwwyvx|{zxvut}v~xxreVJ@><:;84::===>DCA=<=>?ACA@BDGFCCBABDEFGFDEFBBEE@:8:<;<?ACDDF>6165347986369>8<?>=<;79:;>AD948<AA@GR[LFPIMKIMEJOMLKJDNTVVTRWbkldYQS[QTWZYYWUW[]aa]\\[ZZXVOUoidn`WScvxqickjmrvtktwyplmnnrspkgjjdnhc^hfdiWlfa`chgfdfkmolnnnnkihi`eh~e~k~j~j}l|n}n}p}t~vwxyyyxxxz{{zz|}~~~~}~~}||{|{yuvz|{xvvusnkf]PVagjipsxuokqvzrhlk~jtxtuy{wronklnooihhlrvzzzwvstwxy{zvsqrrrrqqturpmmnnsaURYRVnlymrrvvrrsuwwxxxwvvuutuuttvxzzyz{}}}||{{zzwssuyywtw|xvutwuuxwvusonruvusux~vkc~h{lzpnqtusso}ozezO~HFKMEOlzyxxyzzzytlb[[XWvlzsrvxyzzzyxxz|~~}|{zyxxyyz{|||||{{zzzzzyyxyyz{|{wrt~v~v~v|w{rzoxlxjxkwnvrvtyu{v}u~y||zx{~{}||zyutppksnxoym{g}g~k~p}u|w{yz|z|zzrutqop_xXmgbsl{u~w~u|qzrzswvuryi{bu_teqboYqZtcxn{y}~}|~{}z|y}x~xy~y~z~zy~x}w}w~yz~x|w{wzw{u}u~u|t|r|q|q}u}y}|~|ywwvzwvuxsvqoohkjdn`wY~`b~d}e}dybvdsitovlxc{`z^va{h}mzp{r|t}u|tzqzqysytytyuzv{w|vkmqw{}}~~~~}zvrprwz~{}{}{~{zzz{{||zxvsqnkhfffegikmqttuuvxz|}|||{|}}}}}}}|}|||||{{|{zyxxxxxxwxxyxwwutrqonnonljhhiihhghijkjikklmlm~n~oonk|i|h|h{i|iiifdcb`dkqpmkmpqpppppnkllipsomlljjkkkihhhhhgffghkhebs{{{vporvwxxxyyyxvusuvwyzyyxxxxxxxyyyyxxvqosyxxxxwwwwxxvmjtxpohdbhoqjbbly{spooljpnpnyfu]{cikoswz}}}z{}{xwyvvyxwvvu{uyw{z}ufRC<8787886<>@A@;@@<::=>ADDBACEHFBBBACEGGFFDDDA?@B?96677899:;:<94344433466567848@;::989:;<=?85;===@IQYPIMLQNLQMPSQLNOHOSXWRQWahibWOPVPVY[ZYUPX]_d`[[XVX^a^\\knib][Tduxob`gkompqmp~~ux{vqslojijhcqg`Weba`[lg^^`cca``fkniiihgcbce\\beci~h~i}j|l|m}o}r}tuwxyzyyyzz{{{{|}~~~~~~~}|z|xxzzurrsuslml]MRZfmkquyxtqtutllmpuwy|wtqmnpnklmnnlifhruwwtrvyzyxvxuspruvvqmmpqokfhlhoe\\MKTN[Z{_hqspoqkqsuyxxwvvvvvvurqrtxzz|||||{{zzzywttvxwutxyyyyxzyxxvsuuuvwvtuusoh\\V{`umzpbktutsq~py]zQKFK~KLMVow~xv~xwxzywoi_YLD_qhiswyz{{xwy|}}||{{zzzz{zzz{{|{{{zzzxyz{{{{||}|xtu~v~w}w{xzuzrynzl{kylsotqyr{s|u}x{|{z{||v~tzptqpsnvpxozm{h}i}m|q{qyqxswxwzzzyuxsh}]{cbl^whzp}p}lzh{f}j{uptihk_l[nTqSuWx\\zh{v{~|~}}}||{|z|{}y|x|x{y|z}y}y}z}z|{}||z{y{y{z{z}z}y}v}r|o}o}r}w||~|yvt~rsqopxr}qzpulren[rbzk~e~f~ge~fzkmu`~etu`{\\z\\w]zaxgshtkxpzszszqzpzrzryszt{u|v}vkmrw{~~}}~}{xuuxz~{}{~{{zzzz{||zxvsqpnligffghjlnoppprvz||zxvuvwz|}~}|||||||{||~|{zzxwxwwwwwxxyyxxwvusommmmljhhhihhhgiikjijklkkklmmlhgh~h}j}jjhfdcabcjqolknqqpopqomlmmlrqmmkkkjklkkighgggggghhjgar{{{vporvwwxxyyyxvtsuvwyzyxxxxxxxxxxxxxxvrqtywvwwwwwwxxskmtropibjlotrkmu{yuqspommnmm~k|h}\\P[mrwz|~~}z|~}{xvuuuuvvuu|uurrpzlVD966887678:=?@BA;=>;9;>BDEDBCFGGEBABBDGGGFDCCA?=<<;85445566787753455531256555635>;8899999;:975:>::@HQXSLJQROOUTRWVJOUPQRWVPQW`di`WQOTPXY[[ZURWZ^c_\\\\ZXYZ_ehhif[ZZTcuwn_^fkntinrvz{xjmliifapfaXbd]L_ie]\\^a^b_`dikfce_][[c_[_aaig~g}i|k|m}n}p}r~t~vxxyyyzzzz{{{{||||~~~~~{~{zzytpqsvrciw^LP]ilmpuyxvtvtojpptywurqkjkmnnmnmnmmidenpprrqvyzzyvtrqqsxzwrllmpqkdekommmaIHTOU_gmlcO_^dbevxxwwwwwwwvutstvxz|}|{{{zyyyxxwwxyxvuxxyyyyyxvtiqxw~uyxvxuwwk\\PNY{_UQe}wuusq}nyezUPL~OOV}]]^xirvu~twvwmmkfZSBCh`S_ksx}|wuy{{{|||||||||{yxy{{|{{yxwwy{{{z{{|||yuu~v}v{wzw{u{s{o|m}lzlqmroyp{r|t}w~z{{z{||s~hylrqnunwpyozl{i|j|qzsxowiuissqvqtupvnisamj_v^yayfj|myjybfvunxmsmin[pSuO{P[g|s|z|}}|}||{{|{}x}vvuywzyx|y}y|{|||}|}{|{zz{{|{}{}{|}w}q}m}n}r|u{x}zzxuq}oqrrtyo~ppmxkojmlrk}h}f~feg~kvqkwhqifr`{`_{a{pzryoxqytzszr{qzqzrzt{v|w|x}worvz~}}}}~~|{zz~z}z~zzzyyyyyywutsrqpmjhgghiikmnnmnoswyxupmlkotx{{|{{{|{{||||{yyxvvvwwwwxxyyyyyyxurppomljihhiiihghhjnlijkjjjklkifegilmljhhgecejommjnpppqsspllnpqunjkkkklnmlolffffhiihhhiiesz|{vporuvwxxyyywuttuvxzzyxxxxxxxxxxxxxxyyyyyvquwwwwwwvojo}ljotliropswtw|~yrlononoopqrpiizzwxy}}|{~}ywutssuvvv~uxrqkqV{I;656689888<=?@@CB;:<::=BFGFDBEJLJEBBCDEIIGDA@@=<;97654223345455444577640013565424:;7899986756778;79>DQZSMHUUMOTSV[ZKPYXYWWURSX_di_XWUWSX[\\[ZUTVUV^[^cca]XZciedbWVUS`swl\\]eikj^lwz|~zvilpjgd`caddX[bQ_fb[YZ]Tgbeed`[Z`WTVWa\\YZ^afe~f}h}k|l|m}n}o}q}s~t~uvwxyyyyzzz{{{{{|}~~}}~~~~}{xutuyr\\Lb_OP]lmnouywwwtrnrwwwuqrplihjlprsrnljljfdjlkghnvz{z{wuusrvy{yrlkhoupijnqkrsiTS[Q]Y]he`RDGLEVqvwvvvwxxxxvutuwyz|||zyyxwwwxxxzzzyyyyzzzyyxxusquvqq{{|wuvyveTLIJNDLzk|laju~qydtWRSY]yb^^^azi}ruxx{xoddheb_J:QcV^immvyuwz{{{||||||}}{yxxy{{{{{ytsuxzzyvvxyxxxwv~v|vzwzw}v}u~sol{kqkrlyo{p{s|v}x~y~z~z}z{|qlvpjugxjxmzo{o|l|mzrxsunrgpgnjkkifrducffhcx\\^|]za~gznyo}k~mrvpxuswnwewayT|L}[|j|t|y|z|{||}{||y}swomrkupxv{y|z||{}{~z~z}y}z}z~zzz~|z|t|o{n{ryuwouiuqxryqxmyj{ik}kymypzqxrpreqgquk}e~efgil{otnkknjyigi~w|{zvyvxwyv{t|r}s|r|s{u|w|x}wqty|}~}}}}~|z~z~yyyyyxwurqomlnpqpmjhghhiijklmllnqturolhggimrvyzzz{{{{||{{zxwvtuuuvwwxxyzyyzzywtrrqomkihhhhhhgggdippnnkkklligcbehmmljigfdabfhfljmmnnopqooomnonmkjjiimrqoqmhgggjkjhggdjiu{{{vpnqtvwxyyywvtstuvxzzyxxxxxxxxxxxxxxxyzyxtpsxwwwwwvttq{nswv|n~qzqpsy|}~}~|wlnruvtrqturnnuyyxy~}}|~{zwutsstyzwt~n{_}L<4477789;:;<@BB>?A@;;=<=@EHHECAENQMHCCFFFIIJD@=;98875335443446457544799761.-03775337:79:::9552367788:9=OXNLJWXMORRVZ^WU][\\\\[XSRW^`cg_[VYUZ\\][ZWVUQPUV[[cfb\\X`ffdbZXRS^rxjY[cfd^\\r{{vzvs~ommjgifebcdTO\\\\_dc_UZ_M^Ydj[WTVZNMTU_ZXW\\dccf}i}k}l|m|m|m|m}n}n}p~stuvvwwxxxyyyyyz{}}~}}~~~}{yxyqV6PcSOZhikmuywwxsrsyzwrnnnmkjjlmq~ttrnif~ghhgfghfiovxyxyvuwuusvwvsnmjswppnklitqcXX^UW^y_VZWQ=>=8Qksrrrtwxyyxwvwxyyz{zzzyxwwwwwxxyzzyyyyzzzyyxxwwywrk_iz{}xotypcUOLOW]dzkzf|_muv|lv^tTZal}sa\\ci~n}qtuvytmffidXSHBBPQisi]moiuz{{{{{{{{|}}}zy{|{{{{|zvsuxvtprtvwxxxxxw}v|w}xwvtp~m|jtlwm}o}q|r|u}u}v~w~w|ypzjykoqfxfyhxjvmuqwmwiwlulrlnhjfjfkgjctezfkerd}ewcx_`}ezlxpzszuvtwoylwlvkxiz\\{Vzfyr{v}z}{}{}{{{|zqmjcti{q~vx~z}{|||}{}z|z}z~z~zyyz||wzrwnukukrmmjjjslxnyky`|Z]zftlxq{t}vvvbwZxfrvgyfzf~hj}nxoypvpvn{llp}u|x{w{wzvzu{s|q}q}q|q{s{u{v{vux{}}}}}|}~~}}||{~z~yyyxxwuromllkmpppnjhhiijjjjklllnqttrnkiggghkpvyyyzzz{|{{zyxwvtssstuuvwyyyyzzyxvutsqnkhgggggggggggkpqqnllmlid`_chpmkjkjfdaacc`gimmmmlklmoolnmgfiijjlpssqpmjjjkllkfdfajlt~yzupnquvwxxxxvttstuwxzzyxxxxxxxxxxxxxxxxxxwusuwwwwwxwxxuwz}y}qxttx}~~||~~~}pqvy{xuqvxrs~z~{|xz{wwtsrrsty|rhbXD742269:9;>?AACFF>>>>;>>=@DHJHECAEORNJEDHGEFHJE@;7556643356655554577668=<8720.04896444669<<;;651357788<67KTIJKXZRRUUVXcdce``^\\VRQV]baki^Y[V[]^[Z\\ZSNMNQ\\V]e_WUafdcb^[TQ[qxl^_beb\\d|uszoz{oljjsmjc_[UTXd[cgiTivZNM]hXXWVUFJTU_]XV]fadf~h~l~m}n|m|m|l|k|k|l|o}q~rssttuvvvvvvwxy{|~~~~~~~~~~~~|{xpYAWmXNUbgglvxvuvstyytpkjllmmmnpqstsrmlh}gjllifkqsqtuvuvpotxvqsssqonmwyxxqijiwr\\TU_nXw`^Ve]RE?>AVflklotwwxz{xxzz{zyzzzzyxxxwwwxxyyzyxxxyzyxyyyyyzsurTOoykpt{hw\\wWPMNVfn|lyjwh{h|ikk{b|^chsvgdlm~n|nppptpmhjl]GEIMIKZov`Mc^[v||}{zz{{{|}}}wtz}{{{zzyyxwyunimtwwxxxwxwxyzyxu~r|nynonnpqqwrzq|r|r|r|q|t{yn|m{sm{ezhxkxgngdmlioarduirmgleikhpjsk|osxp{owprhpbxbvfuktowuw{u{pwjoenatbyd{kzvxuzu|y}|}z~yzy~yrnle{x{yxy}{}||}||{|z}{}|~|{zz~|zvvmrmlogmjgpjlwlm~k{iz\\}Xxatnvsxx{zxygxZz^wpnwkuitinpitnr|srljm}o|r{r|s|t{r{s{q|n}m}m}n{p{rzsytxz~|}~~~~~}}}}~~}||~{~z~yxxxxxvtpnmllmpppmhgikkkjjjjklnoswwtpligfeefjqwyyyyz{|{{{zyywurqqqrstuwyyyyyyyxwvutqljhgffgggghjlmqrqolmpmkigeikmmqmjkjgdfhgbbglmmlllklnmllpleiklmnprsqpmklmnnle\\^fgilqtxtqnquvwxxwwutsstuwyzyyxxxxxxxxxxxxxxxxwwvvvwwwwwwxvwxwux}zy|zy||~~}x|{~}|xwxy{zvx{|zwzzy}~~|x|{wtttrqrsx~zwzUFB;744568:;<<?CFHFGG?>>><@@=BHKKHFECFPSOMFDHGEEEDD@;64456544666777778:;;89AA977.914;:6666776@>:<723454777<78ELHHLX\\ZXXYZ]bc`_bbZSQPPTZ_`aaac]XZ\\^[[^\\SOMOQ\\VWdhWRY`_aa_\\UQXpzocacedejrzrry~{{vpyljgjwibgb`S[X\\]YUfa}yZjnnfWZ[XJBNUVa_YW_chef~h~l~m~o|n|m|l{kzjzkzl{m|o}p~p~q~r~r~s~t~t~s~s~stvwy{~~~~~~}}|}}}}~xldmo`NQ]gektwt~urguwspljillprstussstsnpl}gmnoskoutrrqqtyolwzvprqonmjoz}~zmosyta[Y]o|svg`cdaXIGC[bfk_fmrwvrx|vr{{{zyyyzzzyyyyyyyxxwxxxwwxyxxyyzyywuxr[KVjiom}^}ZUPKKQV]}]~U~b{d}Vzd~gemrvywnmrpm{gpflqnompsojdJR]PWi~nYK][Yp~~|}zzz{{{|}~|zyy|}|zzzyxyxyvogktvwvutwxyyz{zxv~s{rqqcx[yYyasvo|ounnmcofqrxn{p}qqudwivwyetadgldo`sb~homZqglteyl|ruuu}txnqkhcjbsjyo{u{v{x}x|utoidh^rcym{xz{yxzu|x|y~yxyxw|s|v~xyyyz}|}}}}||{|{|{}|}|~}{~{}|ztzgybwdwcx`wkqxm~m|luijeqdwjxqwyx~z}|ywwjwevrvvupsmtkunvttpiej~mwjyp}u}r|q|r}o~ki~h~j|n{pzrys|~|}}~}}~~~}}|}~~~~}~{~z~yyyyyyxvspmllnpqpojjjkmlkkjjkmopswxvpkigfedehntwxxyy{||||{{zxvrpooppqruwxyyyyyyxwvurmjhfeeffggimqqrrqollmkljjjifabf`[_gjlpqngbdimmllkjkkkhfegirrqqrrqqoopmmnoolh``efhihjpspmptvwxxwvtsrrsuwxyyyxxxxxxxxxxxxxxxxwwwwxxxxxxwxywuqos}}||tuwzzzy~}u|wzzzyyx~z|y|~~|z|{{~zyw|~zttuxsrsrmi}^B620259::<=??@ACHMJHF@@A@>CC@EMOMKHHFHRWRNIEFFFEC?@=:6445776567789:;;;<<=;9BE95;<9=1=?9658997??=?956743665:79?DDELU[^^]\\]\\]^\\[`c\\RPONQSSRRU^kj]U_`[\\`\\TPTLKXZT^j\\OPXZ^__^XRWo}thefhlmomtvtz{wx||inle[hqaYca`T[VP^TCURhfVvve[^\\U?FVPO^b][bfkggim~n~p}o|m{lzkylylykzkzk{l|m}n|o|o|p|q|q|p|p}p}q}s}u~x~{}~~}}}}|{{zzzyz}zrtufPP\\hjlqt~otjnookhhghlmvvsqpqssvuprpi~lyqoosvtrpopqwketxwpnmlkih|r|{vjtmas{{xp]YYMo}rohhf_UHEWTfSYjkfetlm}gYtmuzyxxyzzyyyyyyyyxvvvvvvwxxxzz{zywutj^SRVTqvg]SPOOORY\\NKR{lgUex~xx{xrswi{^za]ltrurqtxvrcLVg`\\doeZP``Vcwz{wvyz{|}}}|{z{|}}{yyxxxzywtnpvvvwwwxzzzyyyyxv}tzros`n\\kfjpisipidk^jhfveprv~qymkphn~jurktoynyi{f}iomdqup}p}u~zzxv~uxprmjffjsr}v|x{x|y~y|yvtllmjup{x|{|{{y{x|y|y~y~wwwwxz{{z{}}|~|}|}|||{{|{}|}|}|}|}|{|s{i{d~`b~nuzo{m{nzmnjsi|n|vy}yyxzzwvutwqzf}d~fiv|y~xpfb{hukrhwn~t}p|rzvxtwj{h|g}i|n{pzqyr~}~}}~|{|~~}||}~~~}~|~zzyyyyywuromlnpqqrrqpnonmkjjkmprsvxvqmlkifdegmtvxxxy{|}}}}||{xsqonnnnpsuwxyzzzzyxwvtolhfddefgggfilmmlkkkjedehkkf^ZZYX_dgilpqkefhjklnomlljgbchnxwutsroljknnnnnnmkheaeghddflomptwxxwvustrrrtvxyyxxxxxxxxxxxxxxxxxwwwwwxxwxyxwsmloor~xzvyqqswxyy~~r~rtuwyxztxw|{|}{~|y{|xtvzy{tuvwwtrkWG@510247;=>>@BBBDFGKLHD@BDD?EEBFMNLKJJIJSZTMKEBDECA;:99655688877789:<=>=<;;:9@A63;D<>28A=579:;:BFDNA95852664:88;>@BJRW[aa^\\\\]`\\[`b^UPNPRPONNRVevlYb`\\]_[TSVJFT]XVa[QNSW]cc]WUZn}wjegjptsjmirxsxtrffc\\Zfhc\\_WY`XSQ\\YOUUg|w^_accbTL@QVDK^e^_finiijnno~n|mzmylymylylykzkzk{k{l{l{m{m{n{m{m{m{m{o|q|t|v}z~}~}}}||{zyxxwwwy}z{pUS]hmmnsvpfokiedfgjnsvtrsuu{r|q~wvqqrj|jvpprsuqooppom]Rmrwollmlji}lncN]WTju}znU=<>]omkjjf\\JPQSZA`fedfg^djUASTnzzwvyzzyyyyzz{zywuuvwvvvwwy{|{zxtk\\VVfnId}ym`WVVUTUXXJ>EjXRyrpuuy{se~X}\\TLHf}wpvsstxzuj}h}nwlprqsukr`]\\ebWRSeuxwwxz{|}}|{{{{|}}|yxwxyyxuqquvxuuwxyzxvuvwwvuwvrci]k`m`menhl^fb]l_vburu}v}psqmj}f|yw~wv~r}o|mxmsn|q|t|v}x~xwuu|tzsvqts{x}y}x|w}x}y}zzzvwwx{|~~}|}z{z{{|{|z}y~xwvvwy{{{}~}|~|}|}}|}{}{|{}z}z}{|||y||rmnvv{p{m}nn|l~lp}yz~yx~yywsvrsug}emkgs}y{zz|qf~czjwmvlzo}q|pzpvrrpohthujtnwsxtxsxs~}~}|z{}}|||||}}~}zyyxxxxuspmlnpprtwwvsqpnlkjkmprtvxvspmlifdehntvwwwxz|}~~~}}|yurpnmmlmoruxyyyzzyyxwuqmifdeeefeffhlpo~llmkg]W]ckomfb``bgb^\\`ejhedefhkorpmlkgimmhmruvtroljjlmmmkllkkf]dghca_jnmotwxxvutuvtsrsuwyyxxxxxxxxxxxxxxxxxwwwwwurqtwyr~gbdnvu|txsxuqpsvy{~sppruyyzrxo}rt~x}~|}zx{{wsuy{xtuwy~}q[F8333478:=ACABFEBEIJHIG@?CJG@FFBCGIJKJJLLRXSLID@??=;76787557:;9868889;<=<:8778<;43:>A:64<>99;:;?NPFPB=8;62675<779:==GSRX\\a__^`b^Z^`ZRMOW\\[^beaZ[txfb_]`a[VY[KEV_\\SV]SQUW^hibYVYl{wjfgktwriijrrlqw|xoyxqf_bfbddk`]Z[`TMUdbuosz}Y\\mleaIHJWP>Nbf[dhlqlkkpnn~l|lzlymynxmxlxlykykzkzkzkzlzlzmzlzkzkzkzm{q{r{t|x}|}}~}}|zyxwvutrtxy|x`Z]fjnnt~jfgghffgjnqyqpuuvpzg{o~xxpqtmjkouturgghlhd^MBciqlmoqplijbYXb`fbmz{l_D<?Kmmmkif]VdV^dZ_RUcmc\\aNRA=Kguxutx{{yyyzz||{zywwxxxvtvxyz|||yse[[Y[`MOph_Z[[ZVTVZJ=?TTSdlsptvq}eyZwUMA;Vvvzxysrruxx~vwp_zfrqzpa]ahh_TTgtvvvwyz{|}||{{zz}}}{yxwxxvtnmqvwspsusuqnoqstutrxmii^mUuTvTxUxYmhfxns|uwxzxytxvstusu|u}s|q|r{r}rxnxjxiyl|o}p}q~qsu~uuv~w}w}v}u}u}x}z}||||}}~~~~|}}|}|}||||}{~yxwwwyy{|~~}}}|}|~||}|~{zyxxz{{zy}~{{}|v~p~mn}o~nl~r|{zyw{ttqounvtp}yyol}wz{x{w|r~j~h}pytyowowowouhockbiekjiqhxp{txuuvq~~~|z{}~}||||||}~{yxwxxwvtqnllmortvwvutrpmkjkmprtvxwurolhedfinsuvvvvxz|}~}}}|zvtqpnmlkmotwxxyz{zzyxvsnjgfgeefeefhkpn~l~lnjb]^`ciqplebbffb[^^]\\XY^cfgfhlnkkkhijid`isvspnmkjlmmkiikkkhhihfc`emompuwwwvtsuvusrrtwxxyxxxxxxxxxxxxxxxxwwwwwtniksxoedisy}{ywrxwmnqux{}}uqpqsx{|wxkx_zi|u}{~|yy|~{vttxz|vtuwx{t_F;532479;;=CEBBGFCFKLGGF?>CMJBCA??BCHMLKMMNOMGB?=;97555777657;;996778889887455554549<A984:;97<==HYX@IA=8;73688>988:::ETQVY___^_a`Y[^VPOTcdciqun_Xkytd_^aaYW[^MMX^\\TO]USVX`hme[YYj{xkghlrumigkqhjlurvtjafngfgfcab^Y[XZTKWim~~ma_clca`DETWKBJZhZiimnmlkpml~l|lzlymynxmxlxkxkykykzkzkzkzkzlzkzkzkzkznzqzr{s|v}z~|}}~}{zyxvutrqrtvy|}ti_eimmtqgffghhikoqrrsruuto{l|oywpturnppsuusVJ]dYMLLFH[agjruuqlia[eedrlrwqgOBBDMckmkhddIQM[ef_VS\\llg_RI@=HYkutqwz{zyzzz{||{yyxvnqrrvxxxy|{yrg_ako]OScb^\\^^]WQRQMCAQ`fe{tqnpqndw\\uaR?9Hnipy~wtsrrmqvrdUTcbUy^vh~rniflvxxxwxxzzz{{{{zz{||}|zyxxxusmmoijsssomgfjmp~p~swtm~jziml^l]k[tZu`mnj|qt~t|t{r{s{r{s{t{u|txoviym{qypukugwezf}g~k}m~nquvv~vu}u~u~t}u}x}{}|}{}z}|}~}}}{}{}{}|~|zxwwwxyz|~|~|}|}}}}}|~|{zxwwxzywwz|}|vl|iyo{q~km}t}{{z|vvtsqmqmpss{zvu|xy{w{w|w}u|q|rwwvunomlrlsiqbl[h\\eddog{lps{ttto~}}z{}~}|{{|||}~{xvvvwwvurolklmqtwyxwvsqnljkmprtvxywurmheefkptuuuttvx{}~}}}|{xwuspnljklrvvvwyyzzyywuoljjjigfdeefhjlknpe[^elhemrpicdjibY`gkh^WZcgebchjiikiijhc_grsmmnnlllmlighjjjhjljgddnvsoquxxwursvwutrqsvyyyxxxxxxxxxxxxxxxxwwwwwtpjintrjfjt}{}yuzwipuxyz{~{}ttsrsw{}}xqxfyk{pwxwz~{wuv|zu~tuuvvugO;43447:<>=>FJFDHHCFKNECGA?DMJA<:<=@BELOMLLIE@;889876556798766;<88767655655533458798<::9:97444?JOS\\T9A?;6<859:;A:9:;84BZUSSZ[\\\\]`aYWYSQU^egknlj_UScw{ja_c^WZZbUW_[ZZP_\\WZ^cgllb^Yjzxlgilmlpwmnqtkilpvkb`ifbbdca]]]\\b\\RTPVhprqh\\~tvr`]^MUXPBDE_][gjnnmlkolk~k|k{lzlymxlxlxlxlxmylylykykykykylymzmzn{o{p{pzq{s|w}y}{~}~}|{zywutrppqrtx}|ugfgkhqkfdghjkmptttsstuuro}osyvqtvusstvwwuXIR]^WGHIIQWnuvxywqhabfc}anptvqmf[MNRbijkh]VJBAQ]deZMOhygL=9<IWcmstttxy{{zzyz{{zz{xlY`}jneossvzzxsoid[USUY_^^cfcZ[_RKEGNSdq{hzdkoklibu]~UH?=Eq^osyxutqpnrxn[NNY}Q}Qbjr|lknqsrtvwwwx||}{{zzzz{|}|{zyyzxvsnijkuwxwm^\\enq~p~tvrnmkxgmfnekkhkkivjrssq~p}p}p}q}s|tyttmperi|pynshrdub}__cfkptt~s|s|s}u~v~v~v}x}{}}~}~|~|}}~{~y~v~w~y~}~|zxwwwxz{}~y}x}x}{}}~|~|{zyxxyywvx~|}~zxsk{kzt{s|p}u~z}{|xwttrqnpnptvy}}y|yy{w|u}v}u|v{vyuvvnt`m_gjelam]j[d`ajarh}o~r|rvqnqk~~}{|~}|{{|||}{xvuuvvvutpmjjkpuxzzywuqnljkmpsuvxzywtnheehmrvvvuttuwz|}}}}||zyxvuqmiikptttuwxxxyyxvqmlnomjhedddeffmojheh~mribhkkhfgllgfb^biaZ]bhe_^bhjjghiiigemsrnnppnlkkkhfgiiigjkjhefovtpquxxwtrtwwtsrrtwyzyxxxxxxxxxxxxxxxxwwwwwvvvutvuohlw}~{zyzv~gtx{{zw}vyn}rvutwz~{{v{r|r}swy{}~zxw~zw|v}wxxtqkT>63357:;=@@?EKIFIHDFKNDAFBACFA=:9<?BEFIKJHFB=854578898888887668:7875443343466<DIMPLB?;88<>:68>N\\\\VRM:CF>:99:<>?C=:;<85?Z]OQVUWZ\\^_ZUUQT^egnqkhe]SM[r}ticf\\Y\\XbY_a[Y]PYb`]bfbfohd[jzyoijkkfsm`plo{mwcedffaa_\\gh`]aclfRRVagaQgmrta~viU`[XdWE:CHaPYdgkkjimlkk~m|m{lzlylxlxmxmxnxnymymylylylylymzozq{r|r|q|o{o{p{s}v}y~|~}}|{ywvtrpooprtx~}slhdboigglnppqruuuuuuuspp~sw{uquxxvvvwwur\\TZZPFKSaV^\\qsvxzyuiacdggnopqqqq`S[YdihhdYHC@EKW_d]PJ`wmYMKSbmmptwwvvwy{zzyyyzyyytfQ]h~ofg~onqvxqihjfYQS^e~d`bef`S_qf\\NGILXi|c^ivupkycq_[PLLV}\\z`}lutqomrvkYUT[~[YYWavc}hqtspsuxxupx~{zzzzzz{|}}|{{{{||~yuuuzzz}yngklmnsvvuqmi{i|l{pxnym|mrs~r~q~o~n~n~o~p}s{tyoshlfqerfqfrat_{bcabiqu~v{rypzs|x~z~{}{|{}|}}~~~~~~~{usqv{|{ywvvxz|}~~}x}v~v~y~|~{zzz~y~y~zzywvy~|}zxwwpxmwxx}yy|w}x~y|xwtustqtrtvwy{{xzxwytzr|s}t|u{uxsmt]sYofipdn^n\\m_fhbpaqhnmlninfoepf~}}|}~}|{||||~{xuttuuvvtqmjhjpvyzzyxurnljjmprtwy{zzvohedhnuwwwvvvwwy|}}}}||{zzyyuqkjjnqqqrtvvuwwxwsnnqsqmjfedcccelmjknnqnedlkklllkjig]SVhcYWbd^YY\\dkkjjjkllorsomnrrokjjjgfgijihhihgdeouspquyxvttuwvtrrstwzzyxxxxxxxxxxxxxxxxwwwwwwwwxxxvsorz}~|{|{x~lqx||yy}uzj{qyvtvzv|s~t~v~x}z~{{{}|zz~|{}{~|zwsfWC556589=<=BC?CKJHIHGHKKB?CA@?=::;;>ADECBBA?><975468:;<;:88878789:77743223347>EQWZ\\WRHB;;:;@@AIS\\aXKEGAAF;869=@BDG?;<=89>W]NMTRUZ[^]XSSU\\dhjrrlifbYNTizztgdZ\\^Y`^a_ZZ]TUadaddbfnli\\iyzpjjkigouebmexjedeed]be_Vkg`ZSXdd]Z`zw^eioz|i~nVIWJLUW;6DQUNSfcegggmiklp|n{mzlylxmxnxoxoxoynynymylylymynzq{t|v|v|v}r|q|p|r|s}w~z|}}|{zxvsqpnmnpru{zskcaqkkmrtuuuuuuuvvvuspqvwxspvzzxwwwwtm^^bb\\TO`{s_SMdjquyyvkb]aljkkilqqqlnfZ]fecb]T??FN~W\\\\YWUdolVKZ^acfmvyyywtwyyxxvvwxyvk^NXZgyqc{g~eglqtniie|htgdhliedb|\\{[]`eb`]SOQS~[uW~]ajusnxfz`UQZy`_XYhrsooplcZX[[acYVTU{^xfnsquyy{yqbmzxxyxxyyz{}}}||||}|{z}|{~~}{{{{wlfhlpstokhjnqqqp~s}u|u|u}r}n~l~n~o~rusvnfd^_hbqfsbvb{nnebj~t|wyuuptmyr}x~|~|}z|y{z{{}|}}}~~zussx|zxvv~vxy{~~~}}}w~u~u~x~zxwwy~y}y}{{zwy}}~zwvvvyspuuxv~wyyuzw{w{xyvwuwtxuwwwwwwuutrsouoyq}s}t{svrlqcpkntjrep`p^pbnjlnkhmanbo`n]m`oi}}~~}~}|||||}~zwuttttuuspmjhipxz{{zxvsoljjmoqsvyzyzwogcdhrwx~y}y|z|z|z}z~{~{~{}|||{{|{{{zzxsomnppooorrqsuwvtomqtqnkhfdccbdfgjkipwlccfgknpmgfkjd``acbcfcYX[\\`ilklprusrrqnmnrrojhhggikjjihgghgfhqurqquxwustvwusrqsuxzzyxxxxxxxxxxxxxxxxwwwwwwwwxxxxvvx|~}}{y|xsox~}{~~y{p{v~|xtwxv}s~uz|{y{y|}zy}}~yoiiXE;::98:;@=<BC?AJJIHHIHJHA=??><::;=>?@A>;999888776679;<=<987888:;=<976322547<CKRWTPWSMJA:;;:AGPTVVTH@=CC?G=88:=CEHIA<@A<7BLUPKSRUZ[]]VSU\\hjgnqoljggaSM^v}wligfa\\_gb]Y[]Z[`ddfeeinom]iwzqkjjijljddddmnccb_[VRbdZOhkdd^VZ^[\\iv^}usOTNTSUV9:IPINXm\\^fbilfknq}n{mzlymynynyoxoxoyoyoynymylymynzp{u|y|{}|}x~u~t~s~r}r{w~}}}|{zxvsqonmmnprv{zsmpqnsuvvwwvwwwwwwvvtrsuwvqpuz{yxxxxuk`bed^UNYazXNJT]hruysj\\P\\gcgjoqppruqfYC`W__]WSMK[USUWa^oleSP\\agflvwxtz|xvzv{wtssttobWSTVX[XUTXX`jomhjhflonidgf|^q[\\`bfgg[abRyWr[zglkqtn|gybs\\`a~\\`aiquvmloi]Y[]^cga\\WWb}h|i}_ct|{~xp_eux{zyxxyz{}}|||||||yxtuy{zz{}~|wohhnrssmfjpqrrr}u{xzyz{{v|m}n~s~t~vx{ujn_ieiqmxoxnxp{vumio|wxvttppsoxs|x~wt}qxovryv~z~{{|z~~xuruwvvwx~y{|~~}~|y}z}y~y~w~vvuvwx~z}|}zy|~~~zvvu|twsuuuvuvusvqwsxvywywyvyuxtwtussqpokkhfnjvp}t~vzuwrqlninehffeocrbtgwmwmvftdripeo`ncpl}}~~~}}||||}zwutttttsrpmjgglty{{zxvtqnlklnnpsvwxzxrkfffoxz}{{{z{z|z|z}{|||}{}|~}||{{{|||||{xtqooonlkoooprtutoklpnmkigeecbbccaa`gniccddfkpma_hkgdc~c~fikke\\^b`_fknpty{xtqnkmnpqomkhghknlkihghjklpvvsqswwvssuvvusqqsuyzzyxxxxxxxxxxxxxxxxwwwwwwwwxxxxwxz|}}|~vwwuz|{~}}z|~{}xyywuwy{{}|xx|{{~paVTN=9@?=<<=C?>CD@?ILKIIKHHE><=<;::;=?@@?<8545667888889:;;<;7679:;>?BA;77535:=DKJHLRPNTNFD>9<>8GPPID>>=9:ACDI?<<;@FIJKE@EE>9HKJTNQUW[Z[\\TT\\fkefqonnmkkhZNVl{xlgjklgajaZX]`^^aegghhkmrrajxzqlllkkkgcb`afeeecbcZXc`TKTd^bdaVZ]\\hjgbu||qrXZGZQ^W9ANIKKbkVZdcgifnqp~m|l{lznzozoypypypypypyoynymymynypzs{v|y}|~}zywu~s|v~}||||{xvsqponnnoqtw|{vwusuvuvwwwwwwwwwwvvvvutspquz{yxxxxwmdfgbZQJRZRKP\\`iqst[RNKRY^jnqrqpqpg^YARJZ[_agc^iRGNPOfnlbON]hoovwuxvwyzwzxwwtpnke_ZXWWVUQNNOSRW^fddlqqssq~ng^df~^]bcflomtthz`|Z~pxqpo}jyfudxfifbkotvuuruqlhc_ademidZYj~p~k~dlw{wwodbhtzwwyyxxy{||{{zzzzzxurptvwx{}}|}{vrqtvtrnkorsttt}w{zzyzx{v|u|w}y~y~z~ywtipmsuuyx|x{u|t}stusr{svqrqopstxx{~wzsnqcpfpktrxvwyuxy{~zxrnpsuy}~~~~}~|||y}v}t~t~t~stuvww~z~||{z|~~}{wv~vzuwswtvtvqunuovqwuxwyxzwytvprmnlmjkgjfmhtozw|y{x{w{ttknekecjfmriwhymxqxqxlvkuotlrhtkus}}~~~}}}}||~zvttttsrqpomkkjkqx{zywvusqonllmnosvyzyvromknuz}|{zyzx|x|x}y}{|{||||}~||{{{||}}}|zwusqpmkhkmoopprsojhjjjkigfgfedcca``bfjjigecjpoe`flkig}g}gkha`abdbaeimosxyvrnllnnnlmmjihimonmjhfgkpty{yvtuwvtrsvvvtrrqsuyzzyxxxxxxxxxxxxxxxxwwwwwwwwxxxxxxz||{zwywsy}~{y~~{y|||zyy{yy{}z{y~~~}|}zn]QDCB@?AABA>>DA@DEAAJMLJJLGFB::<;;:;<>@A@=85434579:::::;;;:97558;??BCED>:<<<?EDJQMKMLNMQI@>==;ADLOAB@:9::<@DGKAEA@CIKILGEKG=;JLJRTNRV[[YXW^fhjgiooooomnleTQaxtfdfmojqfYX_baadfhiijkotuelwxqonnljhgdd`adeihgij_^_ZRKBNPQT\\MOfgvj_nliq{thr^PCRIgQ=HLDNGjdR\\abgfjqro~l|k{l{ozpzpzpzqzqzqzpzoynymymynyozp{s|t}x~|~~~{yux}}}}|ywtrqpoonnpruy~}{|xusstuvww~x}x|x|x{x{w~wwxyxv~t~rprtxyxxyyyzphhgc\\SHPVONSbftskgJGKNKSastrrrqpnaHB?DHPVeimeXPHD;B@WVd^QRcouqomnqxndruqvxxvpg\\UQUY[[[XUQRTXTXX[[_hnpmhm~qmfff`aeehovwy}xjfrztsr~ozlzjlkghlnquyvtrqmlfbhjh~tqma[k~upntuvul^`dlwyvvxzxxyzzzyxxwwxxxvtuxzz{{{wsrtvy{zuqmlorssuuv}x{{zz{u|q|t|x}y}z}{~zzwrv{y~{}|~|~y~v~r~ruu~r{pvosnppstwxx}m~dof^gcgk_r]rhllrt}|}~}~zwuw{}~~~~~~}~|}{}y}s}o}m}q~stwxwx~{~|{{{zz~|}|~yx~w|v{tyuysxpvmwnwrxuyyzzyxxstmmhhfgfifkerh{osutr|qupspvrxt{s{m|nzpvsusvqvqvsvrwoyq{r}}~~~~~}}}}}|~zvtttssqonmmmmnoruxxwuttutrpnmllprtuvwyyxvusuy~y|yyxxxxzx{x}z|y{z{z|||~{zzz{|||}|{xvvtrnkhjlnnooqrpmjjlmljhhikjiffefjjloqphddglpmd`fkn~k}h{f~haWX_ccb`aeimqttqnkjlopommmkjklopnmjhfdjsy||zyxxxvsrtwwvtsrqsuyzzyxxxxxxxxxxxxxxxwwwwwwwxxxxxxxyy{{w~rsvrjpw|~}|}}}}{zzz~}~~}}|{}~~|{|~{~{~zzy{zoh\\KA9:>DIABDCAAECBFGDELPOKJICA<67:;;<=>@A@>:6444568:;;;;;<;:8657:=AEHIJJJGDDDDEHIMMLHGGJHJF?=ADBCKMB=AA=:==>AFHLCLIGGKKCLHIOF;?FJRNVMNQY\\XS\\hlqtojnlpppppnl[QXn}}truwxuzsdX`eccdfhjkkmostgowxrqqrjhhhfe_^degffge`ZUVVQGFQU``UOT`{ycvn`fuht|qWGIHiGAMJKKMh\\Ucc^keosrn~l}k|m{o{o{pzpzqzqzqzpzoynynxnxoyozo{p|q{t}y}|~|{yw{~}|}|{xvtsrqqoooqtv{~|{ztxpvputuuvuwuxuxtytzszr{rzryvyzz{z}y~y}x|v{uyst~uzu{uuvxz{}rlkif^YVZb]UUairiSKFJPSMT^nttsrqrqcOA@CHO[cnviSQOM@=BNWlgWTgruoelutpaN_cYftwuk\\QPNSW\\]]^\\YZZ]Z}YXYZ_``f`S`nnmghohfhmtvwxvsnrtwvwwus}p|lgchkkqvzxwoqqmiiopoqogUGXsspsnlsXKepnsvrqpuxyzzz{xwwurvxyxvruwxyzwpifksyzvqkgjptssuvx~z|{|{}v~m~m}s}v}w}y~z~z{y~{}{}|~|{y~u|r|r|q{qzqyqwpwqxuyuyrpugkgbfehn`x\\s]acaljvr{z}~}}~~y~xz|~|~|~|~|~{~x~w}q|m|l|p}q~svxxy}{|{}|}|~{z~{{|{}z|y{wyzw|uzuyuyrxpyryuyxy{z|yyxstlmggffhglgjgfpfuhumtlsgmekholurxs|q|nzosqnqqqupvqvswuys{s|q}}~~~~~~~}}}}}|}zvttusrponmmnnopqsrpnnnpsssqomlmqrqpruwyz~x~v~u~uw~x|wzwywxwwyx{y|y{zzzz{{}z~yyz{{|||{z}y|w}w~vtplijkmmoopqqomlnpnkjilmmkihefimmnpjdbehiki`XZjn~m~g}caa\\WY_a`^_adjoppoljijmonmmlkkkmoomlihfdiv{||{z{ywuttvxwvtsrrtvwyyxxxwwwwxxxxxxwwwwwwwwwxxxxxxxxyyzzuwhqtpgglw}{|z{{|}z}|}|}}~~}~x|x~}~|{|~{{|xxym{VLI@97;=DDBBCCBCDBCHIGHNRQLHF?:757:;=?@ABC@<87654578:;;;;:;;697AFILORUUTTSROJEDEHHJKKFFFECDE@>CJGAIL@?@@>:>>?BGJMIPPNJKJBMHJOF=AFHTOUMLOSXVUant|zpimkqpooonnbST_u~zwsrtr{sabefffgilnkkmsriqwwtqpogpkhgf^Zdefed^ac[NRWTGCPWb_\\[ZXmpokxwfhqfszxXOGTc>FNMRL]fR[gefdeqtqmm~l|m{n{o{ozpzqzqzqzpyoxoxnxnxoyoznyozp{s{u|u}u~wwx|}|||}|zxvusrqppprsux{~{{zmwhwkwlvlwmxnzn{o|p|n{m{n{r{rzrztzvzvyvxvvvuuutuststxt}uw{{~rlkkiaehUcYX`xcoriRONNSX\\]ajuvtsqrjTA>AELV\\afndONSTKBIRets^[nhjejrtk`UMOSUiqrhZNMMNQV]`__`__^^y]XW\\bb_V]^MWfjnijmmhjsvtwwgjnrtwvuwppnn|keiljrvz{xsutqmnrtrqpfTKUmxtrigtOJey|vspptwzzzzz{wvvtqvwxwvtrsuxywpc]esvvqkggkpvttuvxz~{~xsml}r}u}t}x}{}|}|}|~z~z{}|}typyo{pzqzsysyrzsystrroqjlfidjfhpb}bxikigkhtpyu|x|v|w}x~y~z~z~z}{}{}{~z~x}s}n|n{n|p}r~suwy~y}z|{|{}{{~zx|x}um~i|p{wxzvzuzuzszr{tzvzyz|y|xyvsumqikhhjgpmvrtqphoawbodaiZm]mjsqwrzpxnrpdqgnqlunuotrvuytzs{r}}~~~~~~~}}}}}}~~zwttutrqonnnnoooonkigfgimpqpponoqqsqrtuxyx~w{wzw}w}w|vzuyuxuxwxyy{yzyyyxzy{y|x}y~y~zz{{{zy}y{xzy{y~wtplklmmnnnoqqrqrs~p~mmnprrpmjffjppnmf`ahnlhfgeamkika]`]Z_c^][\\^bglmmmlkjjjjijmmmkkklmlljhhdjy}}}||}zwtsvxyxvtsrstvwyyyxxwwxxxxxxxxwwwwwwwwwxxxxxxyyyxxrjbkrniig~lurytyv|zzxwz}}}vzyyz{{|{wus}unzXB88769=@DEDCBDFECBELMJJPTSKFB;7568;>@BDDEEA;8997678:;;:9879<DIWY]\\[\\]][YWTPMF??ABDDILGGEB<>DBAEKG@DHBBAAA=@?BEHJNMVVQLJIBMIINDEFGCUUPKLMOQSWdqwyvlfliqpoponmgXQXl~~la]`jhvxkfgijjjjmnkijqqnuxxvpmkgnmjjg[Vehhfc`heUOPUXF=MYYLSNLJ`gmb`dbcg\\oipRTI[\\?KOSUUgbUclgg`gstqon~m}n|m{m{nznzozpzqzpypxowowoxoyozoypzqzrzrzr{q|s~uz}xwxz|}}{yvtsrqqrstvxy~~|xzozlylylzm{n|o}r~s}r|q|r|s|q{n{n{mznznypypxoxnxmwnvruwu~vyz~pmlmminc_g}SVT_quwm~fYa``ejhggnuxusrtpeSMHDPZ^ac^L@CIPMGQevwi\\bplrpryr^SONOT`lde[QLOPRVZcgc``____aabghfaTSVOT]frmlotlhywndtoimtvwvuuqtsr~uqkbanuzz{vwwvstxxwsshZ^bhossfbv[QXYitonrw{}|{z{{ywwwuwxwvvtstuwxyum_euttpkgeimstuvvwxyyupp~t~u~v}x~{~|}|}{~yz}z~v|nxkvkxmxqytyvzx{wuohfjdscrcogogkgflikpjqnoptuwwzx{t|s}v}x}w~u~v}w}y~y~y~y}x}v|t{r|r}t~v~v~w}y}z|z{{{{|z{zr{f}abcfn}xz{w{u|u}u}v}x|z{|z}z|xyougofmonmojpqvzyvthu_]}bkhbkbkjnosmtlonbr\\peiofuhujqmspvqxqyr}}~~~~~~~}}}}}}}~zvttuusqonnnnooonligeccegjlnooopstuvvwvwwvv{vyv|w|w}v|vzuytxuxwyyzzzyywzw{w|x}x}x~yyzzzzy}x{yzzyz|ywtpnnnnmmnoq}r}s}s~t~s}r}p~popsssplfekrurj~`~aclpojd^ZWed`\\WYcba_[[\\[_adgklllmnkkihilonkhhjllmlljjhn|~}}|}ytrrwyzywtsrsuvwyyyxxwwxxxxxxxxwwwwwwwwwxxyyyyyyxv|vws|lpuojhhhgyhxlyt~{xssy{{zwvoxl~vz~|{wuxu_}IA85679;>@CDCCBEGECCGNOJHMTSIB=9658<?ABEHHGGA:<DI@:9:::86559@LWLW_a`]\\\\[XURNID?;;<>@AFJHFDB;;ABBFID@DFGC?AD???CGHJPQ]\\RJIKGMJHNAHJI@RWHHNPNNQWerwvrmljippopnmlk\\PTbw~eYZ\\gdoutmlmopnkkmljjprquxxvmimkmkggk_ahhjhghmbPROT]NEJUVHUTRPboj^_f_\\e]db_RXQ_VEPSX[\\i_]kolfbkvurpn~m}m|l{l{mzmznzpzqyqypxpwpwowoxpypyqzqzq{q{q{q|u}w~w}u}t}s}t}w~z}~}yvtsrrrstvwx|~||{t{t{t{t|u~v~v~v}t{s{s|t|r{p{o{nzmzlylykykyjyjykxmwruxuwx|ommmomrgij_SOSpmhmrp_][Z_dginwzzvvvxsgTOJGW_`boraGCHOQZbpuukhoxjplpvnZQQUYYa]QVROQSVZ`fli`]\\^__af~kopmgbXSSW`imqonnprmw}nZmvlkruxwwvvtmt~wph`Ygsts{yyyyxxyyxtsidfmhhsuc[|vaJ?\\uvuuy{{zzzzyyzz{yyxvvvvwwxxz{|{omqqqojedfinuywvsuyzxttv~x~z~{~z~y}x}x~wxytp}gyeye{hznzsxuvvxt|q|mwkuhuerfmaiViRoVuextxwzxzz{}|~}}}z}w}s~p~o}q}t~v~v~x}z}||z|v|t}w~y~x~x}y|y|z{y|y|y{yqzf}mg\\`t}}z~x~vuuuxz}||}|z~wssknmmqmqmvrxtyrqrgsczgpkhiefeleqesjkq_vdoigierhthnjomrmtmti}~~~~~~~~~}}}}}}~yvtuvusqonnnopppomjgecbcegilnnosutuvxyxvrsv}wzvzv{v~ww|vzuytyuzwzxzwyvzv{w}w~xw~w~xyyzyx~x|xzzz{{z}xvsqppomllno~p}r}r}r}r}r}q~q~poprusnhfim~p}m~i}f}i}msqnke^ZVdheb^\\aZ[^Y[\\\\``bejmmmmmlkhgjmppnlklmmmllnpns}~~}}||xtstyzzyvtsrsuwxyyyxxwwxxxxxxxxwwwwwwwwwxxyyyyyxw{ussuoyiqrkfefghfzgxpvspsxzz~wypwlzx{||}{|~zw{d}I4478::;<=?ABCCDGIGDDHNOKHKRQI@:877:>BDEIMLHD?8?S]SA<<974249@EQVJLUZ[YUVVRPKGB>;::9:<>ADGCBA;;>@AEG@@CDH>=BF@?>DIIKRUc\\NGKMJLJIM>JMJ@OYGJQTRPRYgsvwtrpnkoonoplkf\\TTZm}n_`emfjkxywvuusnknnllpstuxyujhmmplcbkcgkjlgikn_LRSZ\\QPP^eZ_\\WOVeypmrfcql\\^dWZ[`QQTW^``hahtunbapxuqon~l}m|l{kzkzlznzqyqyqxqxqxpxpxpxpypyqzq{q{q{q|r|t|z}r}o|q{q|r|t}x~{|~{xvutttttvwy{~~}|~|~|z~z|z~w}s{r{r{r{p{o{n{mzmykyiyhyhzhyhyiykxmvsuyvuynlmmnmuqiydkXRQYjeosd^[XZ`fhrxztqsptukc_UQ`dbeihTEHP\\aqrpidivutc`alsk\\VX[^`TRMOQTVX\\`goodYY[_}``djnookc\\Z[\\eqsphjpnnqswl^Vcw}p|ektxwvupe[imilqadnnkuzyyy{zywursjdgspnwv\\QypTII_nltwyyxyz{zyyzz|zxvsrtwyzzzzz{wy{tplhdbbfkpwzwrnqx~{wuvwwxx~v~t}t}u}uvwv~owgqau_{b}i|oxsnollvm{kybx\\x]x`q`lZpUu[yk}w~w~t}r}r}u}y~w~u~qml~m~o~r~s~t}w~y~y~v}u~x~y~y~x}x|x{x{x{w}w~x{zt}|wijz}{ywvuuvxz||{{xxtmmmhpfqgrlsuz{zwpojqnnseqah`h_oasipolrrommilpkrjmjkilililf~~~~~~~~~~~}}}}~~yvuvwutqonmnpqrsqnkhfdccdfhjlnptvutsutoomqx~y{vzv{v}xx~w|uztysztzv{vzuyu{v}vwxy~w~vwxxxw}w{y{z|y}xwuttrpnmllmm~n~o~o}o}o}p}q~oigkqroighih}i}h|l|r}twsokd^]^feZ`__dggc[[^^~^`aejnommmmkiilnqrpnoponkjlptvy}~}}|{yvuuwz{zxvtsstvwxyyyxxwwxxxxxxxxwwwwwwwwwxx~yyyyxx~wxusruqoqppomjiik|p{tvtssxzywzqyq{w~}saWQF<9:=<;;====?ACDEHLKGFHMPMIJMMIA;:::<@CEGMPJB?=:CORK><;73027AD?FIGDINUSKOROJD@<989:::9:<?ECA>;;=?@CHA?EBG>;CH@<=EKHJRY^W@DONKJIJG@NLJCMWHMSWUSU\\hssrnopololkmpkib`ZTSby{ie_gpmcjtwvtsspnnnmnpssux{yrmmmljfhkdfmnjfhjm\\MY_[[_TSVba`XFBLYgb^`bn{w[Zc\\^``Q\\Y]bdcgdqxuoaeuxuqnm~l}n|n{kzkzlynyryqxqxqxqxqyqyqxqypyqzq{q{s|t|u|v}u|r|o{ozp{q|r}v~y~z|}}zxwvuuuuvvxz|}}}~}|~|~w|s{qzo{n{l{lzlzlykyjyhyfyfygygyhxjxmwpvuu{sqmllmmmpod\\a]WWZq[s]_cn`_gheln`]Qg[`fjf]_addbfjgb`T_k`mppkjqsi[_ehnqj_]`b`|^^`\\X__[_adhd^`YY\\cbcehjb^\\VVY^ahmeibkojnurvxcSZu|vkjlprslbb_{^dimmlnpkcl{wrsvv{rlinrkbhux}ynMEkbW_\\chghnsvrtz|{yyyz{yurnmqvyywyxxyyyvromlidahosvvtohm~}}t}ruxvruu~r~n}r}u~v~vxw~sylvayZ~]dj{qspqlvszryfy_{^|]|^yczg}l}r~w~s~l~j~k~o~r~s~t~v~tkgfkq~t~w~x~x~u~t~v~x~y~y}x|v{u{v|w}w~w{yy|x~zy{}~{ywwvuvvy}{}|z}x{zwwqkklfnggljt{xwyuvrwn{gyal]f`lctjupvtwrtpqnqmqlmkjec`b`e^~~~~~~~~~~yvuvwvuqommnpstutpkhfddcdegilnpruwurokfjlszz~x|w|v|vv~v~t|rzqzq{s|t|u{v{u}uwy|~{}w}wwvvvw}x|x}x~wwwxxvspnlkkjjkl~l~l~m~n~lfbdipqmjhfde}h{n{u|vvqomcYX]^ZVX^hmne[Zbg~f{ca`djoqponnmmnppnmnpqqpojjmrvxz{|}}|{xwwxy{{yxvuttuwxxyyyxxwwxxxxxxxxx~w}w~w~w~w|w{w{wzxxxxyxyzyzy{x|x{wwvtt{tsrsstrpoxprssys{t{xz{w}w|z|{{y{tzq{t}yw_E::97:>A?==??>==AEFHJNPLJJLPOJHHFD@=<<<>BEFIOOF;;AIKC;647841059@A<=?>?CGOMCDHGD=9668:;<;::9<CBB@>=>@?BIFAFAD@=DI@>@FMJKSWVL8EPJJIDHFDPJIHLSKTWXXVX^irolimooonjfjpkhdc^XQZrtdXeuqbclsqnosrrppqqqrsux{|wsqojjjlnagpkcjlpgY[af[_kW]Y[`d\\VTZ\\TPHEHXca]Xb_c__V`Y`ddnojvzvpgnywsoll~k}o|o{jzkykynysyqxqxqyqyqzqyryryqyqzq{q{t{t|t|s|q|o|n{nzn{p|s}w~x~y~z{}~~{yxxwwvvvvwxz|~}|~y|~y~u|s{q{o{m{k{iziziyhyhyfyfyfygygxhxiwlwnvptuqolkllmf[fb`ea\\\\]{]{bfjopnmjbdf\\`NMOV_iiVU]jliiihjleiojmnmmmlkjaagjtylddghbUV`b]cb]cfged[`bYZW[kf][XUSPRW\\]ij[i|uifssrw}r\\Woxlfdbjnc^eayX`fc~`~h|jmj]evncdgfnb[[hoi]bsy{qYI@X~_[Z^pk\\aVgxilwz{yxxzywspkkoxwpjosvxyxvsqrsomlqvwuronknsmottrpqsr~r~w~|{wzyw|p{c}Z`ij~qzuxsyw{x{r{e}\\]bjqtutphccgjk~m~prkb_emquvurqsuw~y}v}u|s{t|v}w~wy~||{}~|zxxvuvvy}|y~pjk|rywuxpop^sdu{xy}wxuvrujtam^edjjtpyu{v{sypwntmqlojlhak^h`_~~~~~~yvvwxwurnllnpsuvurmhfddddfhjmnnmswxwojkootyyxwu~ttts~q}o|o|q}s~u}w}u~ttwxxw}v}u|u~uuu}w|v}v~vwxyzyurpnlkjjjjjk~kkjgccgoqnlidbc~g|n{t|usnmlbXXdfa[Zeqn`[]`diifc`ekprqponnmnookjkopnmlklpuwxy{|||{zxwxyz{zywvuuvww}x|x{x{y{x{x{w{wzwzxyxyxxxxxxxyxyxyxxxwwvwvwwwvwuwuwuwsxryrytytxtxtxtxrwsxvwyw{w~wv}w|v~vtwlxjyk{k{k|l{myozr{s|sxstusxwv|aH50156:?BA@@A@?>>AFIKLMPONLKOOJEC?>?>==>?CGLLSXI<DV]K853123212468::889;?DIF>=AA?84358;=>>>=;=BCDDBABDCCGKDHBCCADGA@AFLMNQRM?7GJFFIAFHJRJIKMNNYXZZXZajqnZbjimpolbjqmkgb^[SUh}za[ism^`ionlmsvrqqrrsstvx{|{wtpjjlnmcjsl_kgbY[akgXcjSib`iog^^ca]bb[XY]\\a[ade\\_\\^Zbbgtrpzzwsosvtqmkl~m}n|n{lzkzkynysyqyqyqzqzrzrzszsyryqyqzrzs{t{s{q|p{n{mznzm{p|v|x}x}v~v~wy}~{yyyyyxwwvwwyz}~~z~v~v}u|t|t{r{p{n{lzjziygygxgxgxfxfxgxhxhwiwlwlvntqrvo}l~jnnne\\\\_ddc``bekkZHimfa\\\\_YdcYQV_mk_acoofehmprqpjjnomkikolkijkoshcfjkd[YZUT\\[|Xdjha_ZUZWUMMbYY`TSUPSVYY[ZXoqjbksqxzzweZpynhfd{mqb^a_{TZaa|_cghaZ_kaXXZ|ZrYTTYa\\M\\uxr]??BSc~^UHDGWeN\\q_dpvxxxyzyxtqnmpurnidny~zzxwvvvssvwyxvsolnurnloqnnorrt|~zvwtqme`f~o~q~s~w}r|o}p}w~p]Zeovxwtpha]^a~c~h~npkaY\\diprroopr~t~v}v}t|r|r|u}w~xz}~}~}|zyxwvvwz~}ztq~p|u|zwwxfwhw~xyw|wwvqoogqeojqpxw{x|u|rznxluksjsjsnd|[|]y~~~~~zwwxyxwrnkjlosuwvrmigedefgjllmlkpuwvroqsuuuwyvsprsrqnpqtvwtrqroqttt}s|s|s|t}v}u~u~uuwxxvssqpnmmlkjiihiihgfiqrmjhd_`f}o}t}vtpkid^~_ejeZWbha`deacfeb``flpqpnmmlllmnljknmkjknpsuwxy{{|{zyxxyyy~z~yxwvyvvwtwuxtxsxsxsxsxsxswrwrwtwtxsxsxsxsxtxtxuxuxtxsxrwrwrwrwrwrwqwqxpypyqyqxpxpxoxoxpxpylylyqxqxnxmxmymzk{kzkzjzjzjzizjzk{l{mxmxoyn|gJ:322679>BCCDDDBAACGJNNLLMOPNONGA?<<>>?>>>AIQKNVKER`]G641/11112333685777<DGB;;>>=62259<?ABCB@@BDFGEDHKHGJKIHFCDDEFADCDKPQMLE99HFAFIFHJPQNILMKQ]Y[\\YZalrmVbf`komkfnrnlhd`^VS^s~fbmpeZ_imljnrtrqrstuvwwwyyxvtolmmnngkqpfhb[bjdpeWheYfciijcaaa_bda_]]adf_aibafa^bfcjplvyxvrprsrplkm~n}o}o|l{lzmypysyqyqzq{r{s{s{szsyryqyqzrzr{s{r{q|o{n{mznzm{p{t|t|t|q}q}s~v~z|zyyyyzzyyxvvwxz}~}y}u|s{s{s{r{r{p{nzlzjyjyixhxixgxhwiwjwjwjwlvmvmunsnruozlmmaNGP[ccccejmpbPABUPVVWZYW`b[_grqoiT\\]X\\llksitqprqonnommnpmlifcafki_YY][V^\\[hlfYY[NNLKOIQO]kUPUTVXXVTRQbZ`bbamwwwxk_qvjhhhmphb[YTX`fhffbYWX]ZTSVY\\\\X{R~VTKWtypkWHH[~i{^X?=Pa[M^s`\\bhpvxyzzurqpnkignqmtvvy{|{{ywtvwwwwwwuvrvwvvuwsopqrtzyvrspmfghj~r~xvoehqsoa_jsvwwrnmeZW~[~b~i~q~snfZPS\\hnnno~p~q}r}t~u}t}r|q|t}v~y{~}|zyxvuvwz|}~|}}{}yzyyx{xwxyzxx}wytwownxpys{v|v}t|pzlwiuftfvgwfjq^y]~~~~~~{xwxzzxsmkikosvxvqlgedb`dkonjhklosuussssutruxxsoqrqoprrpstqonnmmprsss~szt{u|u}t~uuvxyussrpooonljihgghhhhj~p~rjfgf__e~m}u~wxrkhfdeegd]Y\\ilhjf_aig``aflnnmmmllllmmllmnonopstvvwxz{|{z{y{yzzyzxyxxxyyzxzxzxywuwswrwqxpxpxpxpxpxpxqwqwrwrwrwqxqxqxqxrxrxrxrxsxrxrxqxqxqxqxqxqxpwpwoxoxoxpxpyoyoyoyoznznzmymymymymymylylzkzjzizizizhzh{h{h{i|izhze|_Q>6323679=BDEGFFEFFFHLOOMLKKOQNKD=<<<>@?=<;>FLBAMMHKME:554211011222465666:CG@::<=:8657;?BBDGFEDDFHIGFLPMLMOOIICEEFFCCCEKUJIE?@?AACGIIHNXWOKMMLR`]]]ZY_msn]beainlmlornkhd`^ZSZk}tfuk[WarljkossqqqrsvwxxyvsqommlmnonnlnnniecjialfahdbfblfZ[_c]YUZZ_]\\^ekdchaeic_hhelnowwvsqqrqqommno~p}p|n{lznyqyrzqzq{r{s{s{s{szsyryrxpyryrzr{r{p|n{n{mzmzmzn{q{q{p{n|o}q}t~x~z~yxxyyyzzyxwvvwy{}~||x|u|t|s|s{r{q{ozmzlykykxjxixixiwjwkwkwkvlvlvkvlvmtnqsoxo|on^TU_cde{glnutP:BFKOUVV[[`ST^itxk^TCEJYbjcNcXhovvrnmkkmpwtpph``aglg[VTUZ}Y^agnnaLFJJNRSNEHU_aWKSW\\_ZXUSXaX_`]aowxxunkzmWWgjouup`^[Y]add^ZWTR[aVSWY^^~Y{OHOYQWpmliKH_gRQZh{cMMdxhPM[kvxyz{shprqnjkpvxwvrqx{||{xvvvuvxxwvvuvwwwwvtrqrstwtspoqojkmpuwvointof_}_}ktvuunjrj~Z~W~[~c~j}n}n~mh\\PKThnoopq~q}r~t~t~t}s}r|t}w~z}~|zyxvstvy|}{yvwxxyxxyyyy{yywxvxtyrzq{r|q~qn|jyguct`w]yWs`pqnw~~~~~|yxyzzytnkjkosvxvqjfdeeehpsqlhlnorsttssropruwwrnprlighilqpmjjjkknrttsr|szu{u}u~vvvwwustsqppponljigggijkl}n~oheiliddh~m~pwumih~i~igd`Z]fpohgeb]`c`_aekmmnnnmmmmmnoppopqstvvwwxy}zy{u{t{szsyrxrxrxqwqxrwrwqwqwpxoxoypypypxpxoxoxpxpwpwpwpwpwpxpxqxqxqxqxryryryqxqxqxpxpxpxpxpxowowoxoxoyoyoynynymzmzmzlzkzkzkzkzkzkzjzjzjzjzizhzhzgzg{g{g{g|g}c}]SE62335899>DGHJJJIJJJJLNPPLJGKPLF?:;<<=A@=98:=>=EMG?;:864333210012345657748BHA87::::989<ACCFIHGFFHJKJIMSSQQVVMNGEGGFEEEFMQJIBAFA>ADGGIMV]XRNPQPU```_[W[mtqcfdaiilrsolkifc`^]VWeyzom_VYivgimttrqqqppsvwwuqmjhhjlnnllqnhhigfglefihfkfiibiaY\\cd_\\[[V^^_ajoojeeilfdnhglprwyxxutrqppoopp~q}p|o{nzpzszrzrzr{r{s{s{t{t{sysyrxqyqzqzq|q|o|o|n{mzmzlzlzlzlzk{k{k{m|q|t}u}u}v~vwwxz{{zxxxxxz{|}~}z}v}t}s|s|r{p{nzlzlzlylykxkxjwjwkvkvlvlvlvlwlwlvmunsrrvs|toc_`bgikoqp{fKCEJP{XXP\\_NQ\\kswupTG>6?WiroZIO^iyxqkihjmtwwsod^_cmodVMLLJU_fkpg[SGGLS\\VVYX^cbSKLQ_edgc`^SZa`cnwxyz}yvv]LQ]emttrfecWY^eaZ[[[Yd~l\\RUZ_]}YWSSUNB<LacOQgfLJWevaMQgyhYf{|{zyz~{uvwvsooswxzwoipvyyvuttttuwxxxxwwwwwwwutsstttstsqqpopqsuusqmnokfbeirsojhdhie_]fk~k}h}h~jg^PPhtssttt~tuuut~t}t~w~{~~|zywvtuvx{{xurswxyyyzzzz}y{yzxyvyrzozm|mlki}gyexayW|R{`zpzu~~~~~|yxxyzyuqnnnqtvwuojecefghnppnmnoopqrrrqnhkqtvvqlkkgedfhoqnkiiiikprrsts~t|u{u|t~u~v~uuuvxwtqponmlkjhfffgikl~mkedjqric~a~`}c}ntokjl}mje`\\bkjfcaeijfa_^`dknnoppppponopqrs~t|v{w|w~www~x}xxyuyszqzqzpzpyoxowowowowpwpwpwpxoxoypyqyqyqxqxqxpxpxpwpwpwpwpwpxpxqxqxrxrxrxryqyqxqxqxpxoxoxoxoxowowoxoyozoznznzmzmzlzlzkzkzjzj{j{j{j{j{i{j{i{h{h{h{h{g|g|g|f}d~[RF:21357:;;?FJKMNNMNNMMMNPRPLHGLJB==<=<<>>:77668>>:9:::842123310012357988847AGA96899:;::;@BCFGGFFGIJMNMOTUUPXZQQKBGGHGFHGRONLEKH?@GDDDHU\\\\USRSUUW\\c`a]VYkpnfd`beeoojhggfdb`_\\ZZ`q|vfZXcsrbjoutsrrpooquwvuqmgehlnonlionga`behkgkljjnjpvogiidbaaced[_`cfnqtpifgllimgdouvxxyywurrqqppqq~q}p|o{o{q{s{s{r{r{r{s{s{t{t{tzsyrxryqzq{q|q|p|o|n{mzmzlzlzlzlzj{j{jzk{n{p{q|r|r}s}s~uvxz{zyyyyyyz{|}~~~z~v~s}r}q|o{m{l{l{lzlzlylxlxlwlvlvlvlvlvmvnvnvmvmunupuwumegfcklossosYAIHLQYPPa[T[mmtyxr\\E><JZkj_]RT^l{wrljijou}{k[`_`dh`SNIEHLVbilm_LFGLSXXSYaflncQLMS^zeiomlUUfbjuwwtxz{v\\NYZjpnquuvp`ciea_|decaiqcRUZ^Y}Zemke]N<IceV]njOMtrZXhytrx{{zzyz{||yzyvssttuuwuqtwzywutrqpsvwxxxxwwwwwwvuuuuutstutqpqqqrsrpqomlhedeltvtrurppslhlnj~d~`~hmk[Qhwvvwwwwwwwwv~vwz}~|zzyxvvwxyzwtqqvyzzzzzzz~z}y{yzwysyo{mmllkkl~i~^^~lvw~~~~|yxxyyywtsstuvvwuojebdfdgjnpppppppqpppoldekoqslhffikprrqqonnligkqstuutr~t}t}s}v}v}u}u~uw{zuqpnljijihfffghjijhccgmp~lfa~]~^}fnlkjkkkgddmneflf\\[_]]`^`dlqrstsssrqqrsu~v|vxxuyuzuzuyuxtxsxrxqxpypypzpyoyoxpwpwowowowpwpwpwpwoxpxpyqyqxqxqxqxqxpwpvpvpvpwpwpxpxqxqxqxqxqxqyqyqxqxqxpxoxoxoxoxowoxoynynznznzmzmzlzlzlzkzjzj{j{j{j{j{i{i{i{h|h|h|h|h|h}g|e~d^PD;412579=??AHMNPQQQQQQPPPQSTPJHJHA>=<<<98767755>G>47:<=:51/2443101237:=<:868AD>96667;==<:=ACEEEEEGJLQRSSTTXPQYVUN@GHKJIJKXRPPKTKAELFCEK\\^XSQSTXWWWc^c`Y\\imjdb_aadnc`_ddca`_][a\\[kzzkabnti^jrutsrrqppqrtuvuqmjlopqponqpjd`_dlokoonorrspejnoh]Z_e`fbcdginorpjggmrnmggqxyvvvvtrosrqppqq~q~p}o|p|q{s|s|s|r|r{s{s{t{t{tzszsyrzrzr{r|r|q|p|o{nznzmzmzlzl{j{jzjzkzmzmzm{n{o{o|p}q}s~u~w~xxwyyzzzzz{|}~yu~p~o}n|l|k|l{l{m{mzmymxmxlwlvlvlvmvnvovowownvnvnvpuzrpplgmorutpqieXQSUZ]e\\N^]lorwvbLGAWjiqwf[W\\kyztrmiikqu{zvo``cff[SURHIPYbkmc[SNORU[Yy_b^^lqeTPV\\^xehnyytsrqvxsppux}~}|dPVZafmpwzzxhkkecczehkjntk[[[^^~aeowrk`ZLSUVfwq[Rcy|qa_hwpt{yyyzyyxxxzyxwvvvtsrsy}~~~}|{xrnpsvwwwxwwwwwwwvuvvvutssstrqppppqpoommlhecdlvxwwwvvvvustsqhdhmj_Zmxwwxxwxxxxyyyz{|~~}|{zzyzzzzywtuxz{{{{zzzzzz~x~v~trrrqqrtsmovyy|yxxxyyxwwwxxxwvuplgedfjnprsrsrrrqqpooomihjmnpqqrrqotuuqonpqmhekrtuvurqss~r}w|x|v}u}v~wwwuroljiijjhhiigeefifbafd~e~iief~e}d}dgiihgecbcffcddc^YZ`a^^acnwy~x|v|v|v|v|w{wzwzxxxwyvyuztzszs{szryrxrxqxqxqxqxpxoyoyoxowpwpwpxoxoxoxowpwowowpxpypypxqxqxqxqxpwpvpvpvpwpwpwpxqxqxqxqxqxqyqyqyqyqxqxpxpxpxoxoxoyoynynznznzmzlzkzkzkzkzjzj{j{j{j{j{i{h{h{h|h|g|g}g}g~f~b[QD8212369;>BDEINPRRSTTTSRRQRTURMOMFDA=:;;73026755?E<57;>>940/2444200259=AA<878AB<97546=@@?:<@CEEEEEGKMSWWXTTZRCTZWP>DKMMLKQXVUQRUOFINIGMY\\\\TSRSTYWYU^\\b^]djlje``\\ceha\\[`aa_^]\\bd_Ydv|mefkidcknsssrrrqprrstppupoppqrrrqqqnifgkpppqrsttspmghkmi``dfcfghhjkmopolkknpnmhlsyyvuuuspmsrqpoqrq~p}p}p|r|t}t}s}r|r|s{t{u{u{t|t{s{r{s{r|r}s}r}q|p{pzozoznznzn{n{n{nzmzkzjzizjzkzn{n|o|p}r}s}s~s~vwyzzzzzyz{||ztq~m}k}l|m|n{n{n{nznymxmxmwmvlvmvnvowpwqwqwpwnvmuosurponnkvxwssusfad^bkc[fg]opstsi\\MF_wuaconY\\qzjlulhgkpvuyvibbgjeYTKGHJR[`ko`OPRRSVY{^|^ZVamnidVRT\\dgkv{|truwrqqqsv{}}q[V^hrxzwvy|zsmgkoyf{jqtxwriijliigluwe_gc]TWmzqh\\^qtgfmpswy{{{xyxxvwzzzyxxxwvsoovy||||}}xoltvvwwwwwwwwwwwvvwwwuttsssrqpoppppooomkgdbcjwxuvwvvwwwwxwvusrojgnvxxwwxxxxyyzz{{||}~~~~}}{{{|{{{z{yyyz{|||{{{zyyyyxxvvuwxwxxwxxyy|yxxxxyyyyyyyyxvuromkjiorsststtutrqpopqqqrrqpoqsttrqssqnmmljhgfmstuutqoront}w}w|v}trprttqnmkijkjkmml~e\\`fd_`f~`}_~gkih~g|g|c}efedccdeba``abb_[`eedccbo}y{{zzyyyyyyyyxzwzv{u{t{s{r{r{rzqzqzpypxpwpxoxowowowpxoxoxnxowpwpwpxoxoxoxoxowowowpxpxpypyqxqxqxqxpxpwpvpvpwpwpwpwpxqxqxrxrxryryryqyqyqyqxpxoxoxoyoyoyoyoznzmzlzkzkzjzjzjzjzj{i{i{j{j{i{h{h{g|g|f}e~b`^XMB:301148;=@EIHKPSUVVWWVVUTRSUVUQQPMKD;87753//255358548<?=61/0245541026:>CF>659A?899636@A@@<=@DGFEEDEJMUYZXRU[WEV]YTEJPPRQNT[ZXRTXULKOMMV__YQTTUSXX\\X[ZbZahjlmi^\\^bdf]Y\\___^]\\]dc`]_q{leddadhjmqssrrrssvvsqlosooopqssttstrqqsuusrruvuuspollklliebfgjlmllmnonmooooonliqvxwvuvxtqlrrqpoqrq~p~p}q}s}u}t}s}r}r|s{tzu{u{t{s|s|s|s{s|s}s}r}q|q{qzqzqzpzozo{o{o{n{nzkzizgzgziylzl{m{n{n|o|o}p}r~uwyzyyyzyz{|~~~{vp~n~n}o}o|o|n|n{nznynxnxnwnwnvovpwqwrwswrwpvouptqssrqpoozzwvuyvqmnkmqliqrgkmqrrhZG<Znvc_hj^qyznSgulggkpsuulbegjkcXWNJILS[^kqr`OPPTW]c^Z^emnk^TTW\\dffjovrrvwssuvuux{~ua\\ft|}wtuz{smkvw}hdnxzxqjs{pankjtr^YkreSZpt^bVZgypnyvlty{|{zyxxwwz{zyyyywrompwz|||~~zwv{xwxxwwwvvvvwvvvwwwvttsssrrqpppppppomkgcabhxwwwxwwwwxxyxxxwvtpovyxxxxxxxyzz{|}}~~~~~}~~~~~~~~~}~}~~~~}}}}}}~~~}}||{zzyz{||{{|||}|{zyyy~|yxxxxyyyzzzzzxutrqqspmmpppqrtutsqpopqrtuutrpoprttrqqonlnolffiknqqqrtsqpjhns~u~tojhknopnlggijkmljihddgc_`h~`~_~ghhig~c~^_^^``dijgc~a}`}`}beb_cdfigb_ozzw|w{w{vzv{v{u|t|t|s|s{rzrzryqyqypypxoxowoxoxoxoxowowoxoxnxowpwpxpxpxpxpxoxoxowowpxpxpxpyqyqxqxqxpxpwpwpwpwpwpwpwpwpxqxqxrxryryqyqyqzqzpyoynynymymymynynznzmzlzkzkzjzjzjzjzj{i{i{j|j|i|h{g{f|f|e}aXQLG@84311369;=@EJJLRUWWXXXXWVUSTUWVTRPMH@9644332014554368:<>:4//0246642125:>AEB858@>7:;837A@=@>?BEGHGECCGMUYYVRW]]KVZ[YORTQUUQV]]ZTW\\[NJNNV_c`WQWXVSXZ^\\^ZaXahiknl[Y]^ceYY`b`__^]_dafc]m}neb_]hllmqsrpoortwwufmttpnnoprstttvwvvwwvtsstvttrmnonlljgbkolkmopnooopmoqsqonmjrvuusstwurnrrqppqrrq~q~r~t~u~t~s~s}s|t{uzt{t{t|t|s|t|t|t}t}s}r}r|r{r{rzrzqzpzp{p{o{o{n{kzizgzfygykykzkzlzlzl{m{m|o}r~uxwvwyyzzz{}~~{vsrq~p}p}o|n{nzoyoyoxnxnxnwovpwqwswswswrwqvquqtss|rqpq|zwvuxvtrrtwusnfnpfW[bcKFB;Hketiqsmnn_Z]SkoooprsuuroonlnngYVTSNOSYalou]QRVY\\bgdflklkka_`Y\\dilifikuxxwyzzwvvy|~wgbkvz||xsuvvoknz|oclvxtmkw~sjvnnqlWVkseUfztd\\WT]r}|zyjkpwzzyyyyyy{{zyyyxvqqsvy{}}}}~zqnssuxxwwwvvvvvvvvvwvuttttssrrqppppppomjfb`agvwwwxxwwwxyyyxxxwwvvwzyxxxyxxyz{|}~~~~~~}~}~}~~~~~~~~~~~~~~~~~~~}}||{{{{|}}}|}}}~~|{{zz}|zxxxxyyyzzzzyxsolloqpomlnmoprssqonmnqrsssrpnnnoqsrppomlprnigilnmlklorpniikorpkedgijlkjgghjlnl~jfgmmnhdchc~d~edfilfa_\\Y[\\bgigg~g}d}b~deeb`^aegaa}rwzt{t{u{tzt{t{s{s|s|s{szrzrzqypxpxpxowpwoxpxoxoxoxnwowpwowoxqxqyryryryqypypxoxowoxpxpxpxpxpyqxqxqxpwpwpwpwpwpwpwpwpwpxpxpxqxqxqxpxpypyoznznzmzlzlylzmymymzmzmzl{k{k{kzjzjzjzj{j{j|i|i}h}h|g|f|e}c~[L@:763233459:;<?DILNSWXYZYYYXVUTUVWVURNH@:74222321257:;9<=;;:62001357754224:>>AB;56<;7:;936@><@@BFGGJKFBBFMTXXURW]_SWVZ^XYZWYWUV[][X]a^OIMP\\dd^UQXXTSZ[^\\bZ_Ybffglk[YYZ`cXZcecba___bbif_n}pe`_aknmnprqpprrrttrntrhmopqqsststvwwtqssuttstrqoloopmlmikpoonprtqqstumoqtrnpsoptrrppnproqssrrrssrrs~s~t~utt~t~s}u|t{t{t|t|t}t|s|s|s|s|s{s|r{r{r{s{t{r{p{p{r{q{p{o{l{izfzgyhykykzjzjzizi{k{l{m|p}r~t~t~t~uwyyzz{|}~~|{zwus~q}p|p{pzpypyqzqyoynwovpvqvrwswswtwsvrvqurswr|poq{zxxwvtqkikpkon_ei\\JL_kYOE9<pSp_wpopdX__]^mmvzyxxwxrlnnoqni[[ZXVUVZblkhUf[ZbdilkmqhfehkohYih_`dbipv{zz|}|wvvwy|wqloy}{zysprolkoy|vkptsqgfu~uggvsmcR^qsaXhyzpdbijdxyoxsjgowvxxxzxy{zyxxwvsporrrx{~{|}qSCKUkuwwwwvvvvvvvvvvuuuuuttssrqqqqqqpnljfcaaeswwwxxxxwxxyyxxxxxxxxyyxxxxyyz{|}~~~~}}}}~~~~~~~~~~~~}}}||||}}}}}}}}}}}}}~~~||{{{~}}|{yxxyyyyyyyyyywrkghilnnljnqppqqqpljhknoqsrnlhnnopqqponmnqspjijlokihhkqnmmkijnmkihkmnnlifefglnkigiouulfdh~kjfabhnfa`WY\\Xccadhh}e~defdb__bdef~kyutzrzrzszszrzrzrzr{r{rzrzrzqypypxoxowowowowowpxoxnxnxoxpwpwpwqxryszszszrzqypxpxpwpxpxpxoxoxpxpxqxpwpwpwpwpwpwpwpwpwpwoxoxnxoxoxpxpxpyoynynznzmzlzkykylzmzlzlzl{k{k{j{j{i{izi{i{i|i|i|i}h}f}e}e}d}c~W<30/0013557:;:<?CHLPUXYZZZYYXVUTUVVUTQJD>964212321259<>>>=;96300124688643249>?>=:669858:957=<<@BFKIFMNGBBGMTXWTRW_^YWUY_[\\\\Z\\ZXTY[W]dcZNLQ\\b``\\UOWURS[[[Zb[]`cdb_ikZ^UX^aY[dgeda```cdig`n}na^`flonoqrqqrsrrtuttwtpppqqqstsstuwwsqrsuutsrrrqppppmmnnoqopqsuusruvumpqtqnqvsqqqnoqomnmsqqqstttsrttutttt~t}t|t{s{s|t|t|s|s{s|s|s{s{s|s{r{r{r{t{r{p|q|r|r|q{p{m{jzgzhzjylzjyiyhzhzhzizk{m|o|q}q}q}r}t~vxyzz{{|}}}~}{xur~q}p{pzpzqzrzqypynwnvpuqvrvrvsvswtwswrvqtpsrqvo{p~uxyyvmom\\MZ^\\deZZWLHMc~tkYD8>vLzRWimga_hknrrtvltvyz{wsqqolhgg`]dZ\\_dhkcTWVZfgmrpd^[Y[^fnb\\cnYWebdek{}}||wpnswyurwupz~zzxtmjgknqvyvtvqsqf^fwufkv}rhfkstpquz{ypgnmlsjegum\\_kuxxxyxyzyyxvutsnmllnvz}{{z{xcFJWfrwwwvvvvvvvvvvuttttttssrqqppqqponkifb``dovwxxxxxxxxxxxxxyyyyyyyxyyyyz{||}~~~~~}}}~~~~~~~~~~~~~~~}}}}}}}}~~}~~}~|~|~}~~}}||||~}||{zyxxyyyyyyyyyxuqkkiknnmllpsrpppqqkfdgkmorqppiknoppqqpnmoqqpmloqqmmnnoomllkjjkklllopqolgdbabilic_`fqqfccillgbchleafgfddg_[_fg~fffc`a`abbe}izqvxr{p{qzrzrzqzqzqzqzqzrzqzqypypxoxoxnwnvowowoxpypyoyoyoxpxpwqxryszt{t{t{szryqxpxpxpxoxoxoxoxoxpxpwpwpwpwpwpwpwpwpxpxpxoxoxnxnynynynxnynynynymylykyjyjykzkzlzlzk{k{j{j{i{i{i{i{i{i|i}h}h}g~e~e~e~d~cZA4/--.148<<<<::>BHLRVZ[\\[ZYXWUUUVUUSROF>:75421233357:=>?>=:74101345777654437?@;876797469857<<=ACJNHFMNHDCHOTVUTT[`^UTXYa_\\^``^[PTYYae`VOPVa`Z[ZUMRRPV[]X]`[]cdegdhk\\_UX[`[Zeeba``abehjgbo{k\\Z`inoonrtqruuutuvvwxvsqpprsstttstuuvuuuvussrsttssrpooppqrrrsuwvtsuwtnpssqnqxytqomopqnkiqlmqtuuttuvuuuuuu~t}t|v|q|s|t|s{s{szszszszszs{s|s|r{r{s{p|o|q|r|s|r|p{m{jzhzj{lzlzjzhzgzfzf{h{jzl{n{o|o|o|p|r}t~v~xzzz{{|}~~~}{yyv~r|o{q{s{s{qzpyoxnvovoupuquqvrwsxswsvqvptosopspxr|uxvmgtrSAXUT`cUT[[IB^}zofCFKWzTkkonhZ[eomj\\^^lswy}~|yvsmfge_cfagiic~]ZSQQWbiqrq_MSUUZmp`YSaVVka[]kz|}~|tk_jzynotvsz}y{xupontxwmjnrrow{o\\Vovhirniuuw{|zzy}}}tihrm`V][yoflntxxwwxxxyywtsrsoibfkv{}|{y{xm^dlntwwvvvvvvvvvvvuttstttssrqqppqqpomkheb``cmwxxxxxxxxxxxxxyyyyyyyyyyyzz{|}}~~~~~~}}}~~~~~~~~~~~~~~~~~~~~}}}~}~}~}|{||}~~}||||~}|{{zyyxxyyyyyyyyyxuqoonpqooonnqonppqrmgfhknpqpptpppssrqrromlnppmllmnoprssolllmoomkklmooomgd~babcimiecdgmk`_ahlkiecbgiklqmjqvjbcdffec^]abccc~f{mwutzq{qzqzqzqzqypypypyqzqzqyqypxpxoxnxnwnvowowowoxpyoyoypxqxqxryszt{t|t|s{r{rzqypyoyoxoxoyoyoxoxowowowpwpwpwqxqxqxqypypyoyoynynynynymxmymymymylxkykyjyjyjykzkzkzk{j{j{i{i|h{h{h{h{g|g}g}g}f~e~e~d~e~ecM90---/49=>:9:<?CIMRWZ\\]\\ZYXVUVWWUSQPKB;755433345568:;<<:9742101357876654435=@:556687346547<=?BCJLGIMNIFGLRVUTTW``YR[^Wc_X`cdc\\MQZ\\ccYQQVZ_ZTW^WPPQW[\\\\Xa^_abbeifkk`]WYZ_]XdaY]^`bdgjkfcoyfXY_jqommuvosuvvvvwxxxwwvtstutttsstvwwwwwvutttvwvtttsrqrrrrrstuwwttvutqrrspppuwsqppolorqqsfgqrttttvvuvvuuu~u}u}u}q}v}q|s|s{s{szszszszs{s|s|r|r|q{o|p|s|s}s}s|p|n{k{jzlzl{k{izgzfzfze{g{izl{n{n{n|n|o|q|q}t~wyxzzz{|}~~~|{zzx}v|r|q|q{qzqzpxownvnvnuoupvpwrwsvsvrvpuotmsmrprwt~vvofpnO>OSPY]TTNBH;^sycGf_a~Uiturld[\\cbiZHQdntwz|||xrlfc][befmzomaTSUTSWbjof_^VY[X]idYTQQT^oic`cir}}zsi_dstlqtvy}~|{yzyyw|{pjlonoxoZQNaruwqaTdtz}~~|x}}ztkbptn[V`|wssjuxxxwwxxyyxsnmpojcgnvxuwx|yuvrlrtxwvvvvvvvvvvvvvttstttssrqqppqqonljgda__blvxxxxxxxxxxxxxyyyyyzzyyzzz{|}~~~~~~~}}}}~~~~~~~~~~~~~~~~~~~}}||||||{z{{|}~}}}|}|{zzzyxxxyyyyyyyyyusqonopqqqqnmmlmnoprpnlnpqqpolrssstvsrssnkfjnnmmmmmnoqrronnnqtuqljiknmkjjj~g~dbcehgfefgikdbbgknkgb]`ltokjlsxpffdgheb^abcde~c{gxouwryqzqzrzryqyqyqxqxqyqyqyqyqxpxpxoxnxnwowowownwnwnwnwnxoxqxryrzs{t{t{s{r{rzqzpyoyoxnxnxoyoyoyoxowowowpwpwqxqxqyqyqypypyoynynynynymxmxmymymymylykykyjyjyjykzkzj{j{j{i{i{h|h{h{g{g{f|f}f}f}e~e~e~e~e~fhU=1---.28<;669=BFKMRWZ\\\\\\ZYWVVWYWRNNMF>9655566688788998865432123469:855655439@=634698434447<>@CFJIILONJHJPWWUTUZa\\TYc]VaYR]ace\\LQZ^d_QPX[YYTRV]XRPS[\\\\\\Z``bda_dddljc\\Z[[`^Va[R[^`abfmmecqvcXYblqnmnuursvwwwwxxxxwwvutuutttssuxxxxxxwvuuvwwwuuvutsssssstuvwwuuttttsssqrsvvrqoqpkmpopuppqqrsttvvvuuuuu~u~t~t~s~u}q}r|t|t{t{szszszs{s|s|r|r|q|p|r|t}t~s}r}p|o|m{m{n{mzkzizgzfzezezgzizk{n{n{m|m|n|o|n}r}v~vuxyyz{|}}}||{{|{~w}q|q|t{rzqypwownvmvnuovpvqvqvrvqvpvoumtkslsrszsssj_E<>IUU_hZUWZPCdjsohlgjmsvwrlYX][XJEHOaouxzxxxtmfigcabgl~l{i~f\\SQUY[]fjja`\\P_ea`]ZUQPMYqvqcPQ^p{vpjhjnqooruxyyyyz||zv{|yuqpqovuVINasvsqnjqtwz}}{vzzzxrikjo`Re~}x|wvxyyxwxxxvuukhlrssoqtrkmx|tpsupzyxvvvvvvvwwwwwwvtsstttssrqqppppomkifc`^^`ivyxyyyyxxxxxxyyyzyyzzzyzz{|}~~}}}}}}~~~~~~~~~~~~~~~~~~}|||{zzz{{{zzz{|}~~~~}}~|{zzzyyxxxxxxxyyyyxtppooppqqrrqnllmopqrrrqrsrqpoqjhomossqqqkhchnnnmnomkmoqqppppqrrpkhgilkiiii~hfdcehgfddddiiihekmokb\\`ktrlhkmlieediolfcdefig~dzgvqswqyqzrzryryryryrxrxryqyqxqxqxqxqxpxoxoxowownwmvlvlulumvnvpxqyrzrzrzrzryqypyoyoynxnxnxnxnxoyoxowowowovpwpwqxqyqyqyqypypyoynymxmxmxmxmxmxmylylylykyjyjyjyjykzj{j{i{i{i{i{i|h|h{g{f{f|e}e}e}e~e~e~e~eedW>0.--.26:9348=BGKNPTWXXZYUTSSUWUNHHHB=865469;<;:987886544444334469;966666548??733699655458<?ADHIGJNONKILRYXTTY`_[ZZWPZZLO[^`d[PRZ`a_KW^ZWVOX_ZXQVYX[_\\\\_`ee^]cfghfc[_\\\\b^W\\XR[^ad\\fplddrkaX\\dmompqtttuvvwwyyyyxwwvuuututtttvxxyxxxxwvvvwwvvvvvuttttttuvwwwvvtssussrrrsuusqorsommkjmqpppqsstvvvutttt~t~tss~t~r}s}t|t|s{s{rzrzr{r|r|r|q|q|p}s}t~s~s~r}p}p|o|o{o{mzjzizgzfzezezgzizk{m{m{l|l{m{m|m|s}t~p~rtuwyz{{|||{{{|||z}w}s|t{rzqxpwownvnunuovpvpvqvqvpunulujtktosvrpkjeTD<FX[cqY\\Z_cLjklsroknuxxxtn``]]]ZSOSdzvz|}{xtqj^^elllmkc[WRQUY^cghffi]T_hjhb^YVUU]szueU_q{}wooqqskjrkvvwxxqx{}}zuw{~}xsruru{q\\TivlXO^mpqoz|vwssvzwnf`cmXDQ}|ywwxxyyywxxwrtxunnstsnluriq~unqsuvwwwvuuuuuvwwwwwwvtrsuvtssrqqppppnmjheb_\\\\^cuyyyyyyyyyyyyyyyyyyyyzz{{|}}~}||}}}}~~~~~~~~~~~~~~~~~~~|{zzzyyyz{{zz{{|~~~~}}|{zyyyyxxxxxxxyyyyvqnopqqqrrrqpnnpqrrqqrstsrqomoqjcefjlnonkgfdjppommopnnoppqrrqqponjgdfjkiijjihfeeghgecbadgjjegjlh^Yalsvohfffefecdghggfcfhgfzkvsrxqyqzrzsysyszsysysysyrxqxqxqxqxqxpxpxoxoxownvlukukukululvnwpxqyqypypxpxowownwnxnxnxnwnwnwnxowowowowowpxqxqxqyqyqypypyoynymxmxmxmxlxlxlxlylylylykykyjyjyiyjzj{i{i|i|i|i|i|h|g{g|f|f|e}d}d}e~e~e~efb\\N90.../2698237=BGJLLNOONTUNLNNPRNHCBB>;86546<BB?>=:8775578877777679=<87677767=@8336:;976568<?BEIHFKOOOLKPT\\\\UY_^^[QPTT_TLLY[^c[SU]e^WM\\bYUVL]dZZV[[WY_^^^bgc\\[aefcaa^d]^e_XYVS[_bd]ing`isc[Z`fknptvxxxy}xxxxz{zzyxxwvvvuuutttvwxyyxxxxwwvwwvvvvvvuuvvvvwxxxwwwuttvusrrstsssropurokijnqpoprstuvwvvut~s~t~tuuut~s~t~t}t|s|r{r{r{r|r}r}r}r}r}r}t~s~s~s~r}p}q}p|o{n{lzizhzfzfzezezgzi{k{l{k{k{k{l{l{k|p}q}n~o~p}q}t~vwxz{{{{{||~}~x}v|t{rzqxpwovouououovovpvououmululumtnsoqso~mnl^K:EZZapinjrndulnqqquy}}zxwtsh\\`b^YZVizwxyyw|~tg_]`ijjg]TRQQSY^c{eydbgcVWfib~\\`[VXY[^otncYUfx|tlgiownjptqnqqvswz}}zurwzwvw{|{ygVlssYDKfpmmwukqnlmoliuogkbQLyyvvwxyyyyxwxxtuzyusvwvsswvqomfjpsvxxxvuttttuvwwwwwwvtstuuttsrqqppppnljgea]ZY[`ryzzzzyyyyyyyzyyyyyyz{{||}~~~~}|}}}}~~~~~~~~~~~~~~~~~~}{zyyyyzzz{{z{||}~~~~}|{yyyyyyxxxxxxyyyyxspqrsssrsrqonpstttrqqsttrpnlmmjjmjljllliggflrqoomlopoonnnpqpppoolgfhjlllllkigefhiheb`__beecaeig`^emqqjcb`_aca`^]aehgddgd~gypuvrzqzr{r{szszs{szszszryqyqxqxqxqxpxpxoxownwmvlvkuktktktktlumvowpxoxnwnvnvnunumvmwmwmwnvmvnvnwnwnwowoxoxpypyqyqyqyqypyoynxmxlxlwlwlwkwjxjxjykylzlzkzkzjzizizjzi{i|i|j|i|i}h}g}g|g|f}f}e~d~d~d~d~eee\\N=3//0014798325;@CDEEEEEBINGBEGHIFB?=<;:98766?GGCB@=:98658<><:::;9779:886666669;74359;:87678<?AEIHFJOOONOT\\aZPV\\Z]_W_``aYKR^_`c[UX]c]UQ]aZWRIX_\\`\\__YZ^^_^cha[Z^deb\\\\bg^_hb[YWU]`facljb^oqb_^chlqty{}~}}}zxyxx{x}z~{{zzyyxwwvvuuuuuuwxxxyyyyxwvwwvvuuvvuvvwwxxxyyxxxwwvwvutssrrqttpmsqolklnklnrtuttuvwvvuut~uvvuutt~t}s}r|r|q|r|r|r}r}r}s~s~s~u~t~s~r~q}q}r}q|p{n{k{izhzfzeze{f{h{i{j{k{jzizjzjzj{k|m|m}m}m}n|o|q}r}s~uxzzz{||}}}~y}w}t{qzpxpwpvovovnvnununtmtmumuntntmsmrnpqoxomgX?Qb_bkxwvyswxoqrsv|~{ywvuttjfiimmj^s{xwwwy{oi`[[aded[SPPRX\\`bcb_^]\\chliefd`\\Y[V`mg_Xaq}}|uoqsvrnktprrostux{|ztou~}}}}|n\\qnmUYtzumqyrhlhgffheuvppkcTvwvvwxyyyxwwxwwxzyxwxxzyy|{td[gpstvwxwvuttttuvwwwwwwwutuvuttsrqqpppomligd`\\YWW\\nwyyyyyyyyyyyzzzyyyz{{{}~~~~~~}}}~~~~~}}}}}}}}}}~~~~~~}|{yxxy{||||{{||}~~~}~~}|{zyyyyyyyyyyxyyyyyvtttttrqrsrplnqtutsqqsttrplmpttsqprnmlkihgejookllnorqpoopqppqrrrokiikmnommmkhffhjigcbb`adgkgmlkijkmmha^_]\\]^a`~]\\_bffedee|jvsryqzqzrzr{q{q{p{pzpzpzpypyoxpxqxpxpxoxnwmwlwkvkuktktktktkulumvmwnwmwlvlvlvlulumumvmvmvmvmvnvnvnwnwnwoxoxoypypyqyqypyoynymxlxlxkwkxkxkxkxkykykzkzkzj{j{i{j{izizh{h|h|i}h}h}g}g}g}g}f~f~e~d~d~d~d~db_R>001111258974348:;<===<;:@GB=ADEEB?=;:::::;96?KKGDB?<;9769>CB>;>@<7544477655566654358::87778<?@FIIFJORSQU[_^XV[\\]ea_bbfaXT[a_a`\\Y\\\\\\_ZT]a\\[SHRVZb`ca[[]^a_afa\\WYbhe\\Xbj_aif_[[Y^_fbcjf^amkhfdgkmprw}y|r{s{x{z|{|~|{zzzyxwwvvvvuuvvwwxxyyzyxwwwvwvuuvuvwwwxxxyyxxxxxwwvwvusrqqsromqqnpsrrnoptvuussuvwvvvu~vwwwvtt~s}r}q}q|q|r|r|r}s}t~t~ttu~t~s~q~p}q}q}q}p|n{l{j{h{f{e{g{f{i{i{i{i{hzizjzjzjzj|k|l|l}k|m|o|o|o|p}q~uxxxz{{|}{}~}}~z~v|s{qypxpxpwpvovnvmumtmtntptototnsnqnpkpjooowqiUa_eoptuuvuwvtssstvvtpstrplnrlgoumizzxxww{|~zumf]W]`cc_UQRS[_`ccbabhgfefiidbaWV[TYbdja^iv{zyvvvvuqtsqmlnxwwwwz{vpvyxv{~|}}}qbqvp`Sm{yow{vmgfddegdw|qgak`wwxwwwxxxwvvwxzyyyyyz{|{|}~|pmwyvuvwwvutttstuvwxxxxxwutuvvusrqqppppomlifc_[XUVYfvyxyyyyyyyyyzzzyyzz{}}~~~~~~~~~~~~~~~~~~}||||}||||}~~~~~}|{zyxz{|}}}||||}~~~}}}}}~~~~~~}|{zzzyyyyyyyyyyyyyyxxzvttsqoqqroikorqqrqprssrplmqqqqqqqpomljhfehmnjimnoqqppopqpoprsrpmkjlnppp~pomigfhjjhdedcbddfghijmopnid`_`bcddbb~_]abdddddfynutpyqzqzqzqzpzozoynynyoyoxnxowpwpwpxowowmwlwkvjujujtktmumvlvlvlvmvmwlvkvkvkukukulululvmvmvnvnvnvnvnwnxnxnyozozpzpzpzoznzmylxlxkxkxkxkykyjyjyjykyjzj{i{i{i{i{izhzg{h{h|h}h}g~g~g~g~f~f~e~e~d~d~d~cb\\N?515642234787423588858:964:DA<@DDC@><;<<;;<?=8=JLHHFC@>:76;?BFB=ADA93311666544663334579987777<??FJKHJPUVTZa_]WX]]^_`\\[aaXX`cb]a`\\`g\\[ZXW]b`^TLWVVa`ed[\\]_d``ad^UR^gg_U`l^agld[`\\X\\feehe`fmpmljjnsstx}~zw}v}x|y}z}||~{zyyyxxwvvvvuuuuvwwxyyyxxxwwwwvvuuuvwwwxwxyyxxxxyxvwwwusqppqpomqqorvuspqrtwvusrtvwwwvvwwwwwus~q~p~o}p}q}r}r}s~s~t~uutut~r~q~p~p~q~p~o~m}l|k{h{e{e{g{f{j{h{h{g{h{izjzjzjzhzl{m{i{k|m{n{n{n|m|n}q~ttuxyzz{{||}|{~y}v{t{pzpyqxqwpvnvmumtntotptqtptosnqmqlplplpnqtq{nnjlpstuutvvvutsrstrqrrrpoonmkjmoruwyxwuuxzywsplc^_acca]Z[T]_\\cbfbdlmhefiibVUV_\\Vcb^kc__dxvyyvuuwrprslctyvvusvyrqzujgq{{x|}{sorusqqx}xuxwwtfedcegcwurstl`xyxwwwwxwvuuwxzyxzz{|||{{||{xvwywvuvvvutttstuwxyyyxwvvvxxxvtsrqpppppomifb^ZXUUW^vyxxxxyyyyzzzzyyyz{|~~~}}}~~}~}~}}~~~~~~~~}{{{{{{{z{|}~~~~}||{zyyz||~~~}}}}~~~}}}||||}}}}~~}|{zzzzzyyyyzzzzyyyyyxuvssrqonoonkjlnpmkqqprsssrpprsrrrrqqpnlkigfdbjlnpooppooopponnoqqpmmlkoqr~u|v{u}pihhikjhfgggfdcedefinqqnia^adj}l}n~mifdeedccdceiwqrunxoypypyoynymxmxmxmxmxmwmwnwowowowowownwlwkvjukukulununvmvmvlvlvkvjuiuhuhuiujukululumvnvnvnvnvnvnwnwmxmxmynzo{o{o{n{mzlylxlxkxkxjxjyjyjyjyjyjyizh{h{h{h{i{i{g{gzf{f{g|g}f~fffffeddddb`T=313:<93345675322354347;<84;C@;>BB?=;;<>?>>@CB;<GJGJKHEB=98>@>DE?<?F=1542334432441134578876676:=?FKLJKRXYW]a^\\Y\\`c`^_]X]V[cca_Z``Yah\\\\YXY^ddaVQ[W[`_hb[]_`hc^af_UQ[ehbW`naadlg^c\\QZhhiigdlpqnmmnszzz|~}}|{zy~y~z}}|~{yyyyyxwvvvuuuuuvwwxxxxwwwwwwvvuuuvvvvvvwxxxxxwyxvxxywtqqpoommqrqrvusqqsvxwvtstuvwwvvwxyywut~q~p~o~p}q~r~s~s~u~vuutts~s~q~p~p~p~po~n~m}k}h|e|d|i|f{k{h{f{e{h{jzjzjzjzhzkzk{i{j{m{o{n{m{l{l|n|p}q~s~vwwwwwxy{|}~|}{}v|r{pzsysxqwovnvmuntotquqtqtpsormqlqlqkrkslsossszs}t~u}v|v|v|u}u~uvvvusrqqpopqrpmkifffhnuvwxxwvuvvspnnnjggfegfdbdja[ad`a]afhgfehleYUZe^Zmqjqkhgevswxtssxtmpvqswopqkinthbqzl_gmuruyxsopuvt{}xwzxyyndjogffvxvx}yqyzyxwwvvvuttvwywwzz|~~}{{{|{xvvxxvuuvvutssstvwxyyyxwvuvxxxvtsrqppoppomiea]ZXUUU[nwyyxxyyyyzzzzyyz{|}}|||}}}}}}}}~~~~~}{{{{{{zz{{|}~}}||{zzyz{|}~~~~}~~~}}}}|{{{||||}}|{{zzzzzzyyyzzz~z~yyyyxvpppqsrrpnmjllmmkjinpqrsstsrrsssrrqponmlkkmoljmqtrpnnoqpoonmllmnoomqqimlm}u{w{v}pkjiikjiggghgfdccdfimppnhcacei~l}nmhfhkhebdfgizmrsoumwmxnxnxnxmxlwlwlwlwmwmwmwnwowowowowowownwmvlvlvlvmvnvnvnvmvlulukujuiuhuguiujukvlvlvmwnwnwnwnwnwnwnwmwlxlxmymzn{n{mzlzlylykxkxkxjyjyjyjyjyjyjyizh{g{h{h{i{i{g{g{f{f{f|f|e}e~effedddcb`WH7005<>:5478884212465447<?<7<@;8:=<<;:;=CEDDFHF@>EFELPMJFA?><AB<?>97<D>:;843322232/1345678755756<@FKMLMSYZW[`^\\\\`chgfhe[XT]aadb\\b`W^fY[[[\\_fieXR]Z`bbca\\\\bbke`be\\VTZbiaZbmdaaig`cXL\\jkkkhiqojiilrx}~~~}}}}}}{ywy}~~{yyyyyyxwvvuuuttuvvwwwvvvvvwwwwvvvuuuuttuwwwwwwxwuwwxvsrrqomllpqpoqrpnnruwwvttuuvvvvvwxyyxut~r~p~p~p~q~r~t~tvvuuttttr~q~p~ponl~k}k}h}f|d|i|f|k|h|e|e{h{j{j{i{i{jzjzj{j{k{n{n{l{l{l{k{l{m|n}q}s~ssssstv~y~z~|}}}}}y|u|s{tztyrxownwnvnuotpuquptptormqlqlqkrkrjsjsnurvvwywywxwwwwwwvxvyvzv{v{u}t}s~s~srqqrrponia[`gsvvxyyywtsrolllpppolihfbchq`Wbf_a_a]^bb`ekh`^irkcszsqnlkcorxzvtsvui`ijjeiooklrs]M^|seXcuuruusmgrtqu~}tpxz{{tjyxigfjw|||}vyyxxxxwvvusqssuruxz|~}{yz{|{xvtutttu~vvutsttuvxyyyyxwvuvxxxvtsqpoooopolhd`]ZXVTSXfwzzyyyyyyzzzzyz{|}~}||||||||||||}~~~~}{{{{zzzz{{{|}|||{zzzz{||}}~~}~~~}}}}}zz{{{{{||{{{zzzzzzzzz}zzzxzvzvyvyuyuyzwtmmmqrsusqjhnlkkiiknqprstutsuttvutromkjjlljlnonqsomlmoqqponlkkklmnmrsihcco~qoonmlkkjihggiifcacgijllnojgeddfgigccgkgeadhxmtpprmtmumvkvkvkwkwlwlvlvmwmwmwnwowpwqxpypypypypyoxnwmwlvlvlvmvnvmululukujuithtguguhujvkwlwmwnxoxoxoxoxoxnwmwlwlwlwlxmymzmzlzlykykykyjyjxjyjyjyiyiyiyhygzgzf{g{g{h|h|f|f|e|e|e|e|d}d~deeeddd~caYF::216::859=<=:4102587658<@?778556789:=AFKPQQSSOJGFCDMRPNKD?A?AE=9??><GH;=<53212331/0345666544656=BHJLNNRXYX[^]^`dedbeh`W[\\]]bcb_b^U]eV[]_^^ekgXR]^aeg\\d^\\eemgafdZXXXajb]clfc`edabWN^ilmkjknhegipuz~}|}||}|zwtx|~~{yyyyyyxxwvuuutttuvvvuuuvwxxyyxwwwvutttttuuvvvvwvuuvvusrponmlmoonjmnnklpstuuuuuuuvvvvwwxxxvtr~q~q~q~q~r~t~stuttuuvutrq~onl~j~j}i}h}g}f}i|g|j|g|d|e|h{j{j{i{i{j{k{l{k{l{n{m{l{k{l{k{k{l{m|o|p}p}p~o~o~o}q}s}v}x|y|z}||{|z|y{v{tzrypxowownvoupuptptptormqlqlqlqlrkrjsluovsxwxxxxxxxxxxwwwwwvvvvvvwuwuwuvuvuwuxuzu}ttsxqd\\akyvwyzzywtqqonoprrqpnligcegf[U]eckkcYY^]`ehc\\cowrpyuoigfaZjrvzxvrrugS]egjvmfeiklV>InqfVf~|ssqnhelllgmsolt{|yuu~zmjpqytutjbvxxyxwwwvusqnortwyz|}{xwyz{zxvsqprt~u~vvutsttuwxxyyyxvuuvxxxvusqonnnnoolgc`]ZXVUTW`ryzyyyyyyzzzzz{|}~}||||||{{{{{{|}~~~~~~}|{{zzzzz{{{||||{zzzzz{|}}}}}}~~~~~~~~~{{{||||{{{{{{zzzzzzzxzuztzszszsyryqyrx}vronoprtuurkhnlkkkilpssssrssrtts~v~vurmjhgikmmoqqppppmhktsrqpnlkjjlmoppomgdehmlkjknlmljighjida`behgefkpmigddhikfabdfeecg}lsqotnunumumukvjvkvkvlvmvnvowpwpwowpxpxqyqzqzqzqzqzpynxlwlvlululumulululukujuithtguguhvivjwkxlxmynyoypypyoxnxmwlwlwlwlxlylylzkykykxjyjyjyjyjyjyiyiyiyhyhxgyhzhzg{g|f|f}e}e}e}e|d|d|d}c~ddeddcc`YM>437605776?CAB<411489:999<>?50234437=BGMRX]abccb_ZPFFMRPNPNE>?@><;>GLDBB;;;52013552/0345666533458>CIIKONQWXY[]^^aeb_geb`]_`Y`dZ]gcUYdf\\_bd]\\cmeWU^`_fddda]efnf`ic[YZV_jeaclhbabccb[Y_fklkjlcf_gnux}}}||||||{xusvz|{yyyyyyyxxvvutttuvwwwwwwxxzz{{zyyxwwvvvvvvwwwwxxxwvtsrqomllmmmnnljlllijnqrssuuvuuuuvvvwvwvvut~s~q~q~p~q~rsssttuvwvusp~n~l~j~i~i~i}h}h}g}h}h|i|f|d|e|h|i{i{i{i|j{l{m{l{l{m{l{k{k{k{j{j{k{l{m{m|m|m|l|l|m|o|q|t|v|v|x|y|{|~|}|y|v{szqypxpwovoupuptqtptosnrmqmqmqlqkrjsltnurwvyxyxyxyxywxwxvwwwwvwvwvwvwvwvwwwwwwwwvvvuwuxv{u~qoo|syvyxyxzyyzzz|y~wutt~t|t|t|s~ssrqpnmmlkjd[TW^eqpXPU[\\cgf^`inrrqjmjfde_`qsvzzwrqqeUbooprqmhh\\^P=A_pf_mwz{qkgddgedXTkolo{vopkmnfvuatsLXvvswvwxxwusqlkswxz{{|{wwz|{yyvspos~v}w~wvuttuuvxxxxxxwvuvwxyywusqonmmnookfb^[ZXVUUVZfvyyyyyzzzzzzz{|}~}|}}}|||||||||}~~~~~~~~||||{{zz{{{{||{{zzzzz{|}}}}}}}~~~~~~~|{|}|||{{{{{{{zzzzzzxztzszrzqzqypyoyqx}vsqprsrstsrolnljjjkmorsrqopqpsqr|wzx|tponlklmmnprqponmlkmoqqqponmllmn}p|q|r|q~pommnonnnn~pllkjjkjjhc`^`cdcabgnmigedjkkfbceeeefzkspotmvmvovovnvlvkvkvkvlvnvnvowpwpwpxqyryryqzqzq{q{pzoymxkwjvjvkvlululultkujuiuhthtguguguivjwjwkxlynzoyoyoynynymxlwlwlwkwkxjyjyjyjxjxjyiyiyjyjyiyiyiyhyhygygzgzg{f{f|f}e}e}d}e}d|d|c}c~ccdddcb_VNB6/28:1468:CGEE>5347:<=====;<4023345@NWXY\\afijigggfd^VSVSLPRMFCCA>>@GUPAA<;>86413773/045666643237;@FJGJOLOVXZ\\]]][^]]abgd`_^]ce\\^g`V_hg`YZh^Yam]VZbcc^befd_gfhdch`\\Y\\U]jheclhedcced`_`dgijjg[`lrtu~~||||||{{zwttuwz}~{zyyyyyyxwvuttuvwyyyyyyzz|||||{{zyyxxxxxxyyyyzzzyxvsqqolklmnnnmlllkkhilopqqtuvuuuuvvuutuuvvut~r~q~p~pqqrrtuwxwwuspo~l~i~h~h~h~h}h}h}g}h}g|f|e|f|h|i|i|i|j|k|n|n|m{l{l{l{l{k{j{j{j{j{k{l{l{k{k{j{k{l{n{p{r{s|s|t|v|z}~}}{}x|u{syqxqwpvpupvpuququqtpsnrmrmrmrlrkrktltpvuxwywzxzxzwywywxwwvwvwvwvwvwvxvxvxuyuxtwswtwtyuyvxvwuvtwuxvyvywywyxywxwxwxwwvwuwuvuvvvvvwuxtytzs{s}s}rzr|q~qnhb``hpodTRV]efa[donnslZbilnje^rvwz|{rib\\[ktroorthd[>59?TkdXPN]sticceg`ZSLl|riuxd^clpgy~yZfpEL[qrtvyxxxwutposvwx{y{{xwxyxxxvrpqu~x}y~xvutuvvwxyyyyywvuvwyzywusqonmnopplgc_\\[ZYYZ[]cqw}y}y}z~zzzz{{{{|}~~~~~~~~~~~~~~~~~~~~~}}}~}}|{|{{{{{{{zzzzz{||}}}}}}}}}}}||||}|||}}}}|{{{{{{{zzzzzzzuzszqzqzrzxzwyrxxvusrtvuqnnqpmiiijjihknrqommnnnkkp}r}rssrpqqponoooppporojhorqqqqp~o~n}o|pzrysxtxtytzvyuzu|u~t~t}t{tzs{t}mkjkkmmljda^^`a``bdiihgfehigcchih~h|hylmpntnumwnwowowownwmwlvlvlvmvmvnwnwnxoxoypyoyoynynymymylxkwjwivivjvkujujujtjujuiuhthtguguguhvivjwjwkxlymymynynymxlxlwkwkwjwixixixixjxjxiyiyiyixixiyhyhyhygzh{g{g{h{f|f|e|e}d}d}d}c}c}b~b~bccddb^VH>60.16;567<@HIEB;558;=>@BBB@>>500017FVbgdbdhhjkhfcbdfghgbZSQSUPHDCA?ADPL>C?:?=>=33784/157666643459=CHKGJPMOVYZZ[__\\__`\\afdaa``aa_`fa]hkfaZcodVec[Y`dei\\]cde`ec_^fc]\\V^V[ikfbkghfbeggec_`cekleVe{uss|~}|}||||{{zyxxwwy||~zzyxyyyxwvuuuvxy{||||||||}}}||||{{zzzz{{{{{{{{{{zxvtsqnkklmmmkklllkiiknpoortttuuvuuutttttuuur~q~o~pqqqqsuwwvvttrol~j~h~g~h~h~h}h}g}h}g}f}f|g|h|i|i|i|j}k}n}o}m|m{l{k{k{j{i{i{i{j{j{k{kzkzkzkzkzl{m{o{p{q{q{q{s|w}}}~}~z~x|u{szryqxqwpvpvqvrvrurtptnrnrnrmrlrksltnuqwtyvyvzwzwzwzwywxvwvwvxvxvyvyvyuyuyuytxtxuxuytyuyuyuxuxvxvyvyvyvyvyvxuyuxtxtxsxrwswswswtwuwuwuwuwvwvvsvuvvvuvws|qmlnqnbPMUX[ZULUioeoud_agkkcctuy|zi]YZbpsqmkmtigp`G76Qf]OI[s|umfb_^YTQNqzij|ub]fvxqwvQZr]NL_`nvyxyyxxxwutuutuqtvyyustwwvrpqtw~yywvuvvwxyyyyyywvuvwyzywusrponopqqokgdbabdegikn{tywxxxywzy{{{~{{||||}~~~~~}}|||{{{{zzzzzz{{{{{{|||||{{zyyyz}}}~~~~}|||||{{{{{{z{ztzrzrzx||{yxyvx{wusuvwsnnpqrnmlmljgknqomllmmnkjoq}stsr~s~s}t}t~sqommoqrrrml~q}s|t|s{sztztysyrxrxswtvuuwuwuxvxvyvxvxwxwwwwvwuwtvuwwqyp{n~mkmnmjea^]^^^beeefhhgeeecaf}kzmxltlpokrjtnumvnwoxpwpxpypyoxnwmvlvlvlvkvlvlwlwlwlwkwjxjxjxkxkwkwkwjwiwivivjviuiuhuiuiuiuhuhuhuhuhuivivjvjwjxkxlylymymylxlxkxkxjwiwixhxhxixjxjxiyiyiyiyiyhyhzhzhzgzg{g|g|g|f|e|d|c}c}c}b}b}a~`~``abbc_RE:31/-/39:9:@FLID=747<?@ADGHHECA81//8J_jnjgiiedeb^\\YWW\\cgijif_[]YPIFD?<?LQFEB:>?DE748:5027865665467:?DJLIKQQPVZYXY^`_a`d_a`abca`]]adgfemjec]lf_[`_^]dcbhcV[`d^b_XXc`[YT_YZgkfajehhcfgihd\\\\_aioeYrwonu|}||}}}||{{z{{{yxyz}}{zyyyyyxwwuvwxz{}~~~}}}}}}}}}}}}}||||||||||||||||{zxwuqnlllnonnmnnmlklnponprrstuvvvvtssstuuur~q~p~p~srqqstuuutttrolj~j~h~g~i~g~f}g}h}h}g}g}h}h}i}i}j}k}l}n}n}m}m|l|k|j{i{g{g{h{i{j{j{jzjzkzkzkzl{m{n{o{o{ozozp{t|z}}~|~|}}|z|w{uzsyryqxpwqwrwsvsvqupsprorornrnsltmuovrwtwuyuzvzwyxywxwxwxwxwxwyvyuyuyuytxuxuxuxuyvyvyvywxwxwywywywyvywyvxvyvxuyuytxsxsxtxuxvxvxvxvxuxvxuxvwwwvwuxvwvwyvzuxvvtxqjZX]XU~SNMGTheozojnuvsehpty{|vf^[^ipnnljlla`vx^;>cZUJE\\v}tpjaUOPSPNu{pe}|mY[syq{dFW|uE/3Cdtwxzzzzzyyyxtpnmoqvxuutsqprqrtvxxxxxxxwxyyyyyyxwvvwxyzxvuut~s~srsttspmllmo~q{svtuvtwvy{y}zz{{||}|||}}}~~}~~}||{{{zz{zzyzz{|{{zyxwwwx~~~~~~~~}}}}|||{{{{zy}xsyv{}~|zvxrzwyusrsuspppstrspoqnnpsroonnmnnosqqt~t~s}s|t{uywxxzw~vqljnrtt|tztxuwvuvuvuutvtvtwsvsusvsvtxtxtysytzuzuzuztytytysxsxrwrwrwstutxq{n~m}m|n|m|l|h|d~b`__aceefgiihggghi{kunspppnqkrjsjumumvnwowpxqyqzpypxowmvlvkujujuiviuiujvivhvhvhwjwkvlvlvkwkvjviviviviuiuhuhvivhvhviuiuiuiujvjvjvjwjxjxkxkxkykykyjyjyjxixhxhxhxhxixjxjyiyiyiyhyhyhzh{g{g{g{f|f|f|f|e|d|c|c}c}b}b}a}`~`~```__YN@521///029;<=CINLE<648>ABCGLMNJFB;219Nfmlkhhjf]`_VRQPOLOV[afgfcad\\UKIIA98COKDA:>@CI@68:6237975565689<@EJLLNRRPVZYVV_b^^`gabbbbge`cbcejljlieeik``ab^`bebZcbXZ_a[^_WT`]ZVS^ZYgja`hhfbedehh`WX\\^hmd`pvnmv}}||}}~}||z{|{{zyxy|{~zyxyxxxxwwxyz|}~~~~~}}}}||}}}}}}}}}}}}}}}}}}}}}}|||{wuspnmnooooonnnllmooooqrrttuvwvsrrrtuutrroprrpqrrstssssrpljjj~g~i~f~e~f}h}i}i}i}i}j}i}i}j}k}l~n~n}m}m}m}l}j|i{hzhzhzhzizizizjykzkzkzl{m{n{n{n{nzmzo{r{w|z}x}{|~|||y|w{u{szrxqxpwqwrvrvqupspspsprornsmtlunvqwrwsxuyvywywyxyxywywxwxvxvxuxuxtxtxtwuxuxuxvxvxvxwxwxvxvyvyvyvyvywywxvxvxvxvxuxuxuxuxwxwxwxvxvxvxvxvxvwvwuxuxvwwvvvuuuvvtytqojezh{b}Xcfhlnruqnsxvrmnrtwyxupha`uqklkloqjjttj@ZsIKMOP]osqmeZPRPKNtyvpquxgVgzzuuVMY{nH07Letvwyz{zyyyzytmqqonmqvvspqrrrstvxxxxyyyxxxzzyyy}xwwvwxyyyxw}vwuuuvuxt{t|u{uzuzu{u{u{uxuvvvvwwyx{y~z{|||}}}~~}}}}}}~~~~~}zz{zzz{zzzz{{zyyywwwww~~~~~~~~}}|{{{zxvx{|~|yuwww}vsqprvvusrttstqlq~vvt~v~vsqppopqrtqno~q|szuxvwwuytzvyxzzv}sqrt|uzvxwuwsxrxrxrxrwrwqxqxqxpxqxqysysyszrzs{t{t{tzszszrypxpxowowoxoxqwrvwrzpypypxpxoxnwlyjigggghhjkkk~k{mxmulslqmnomqlrksjsithtjukumvnwnwoxpyqzqzpynxmwkviuhugtftftftgtgufufufuhujulumvlvlvkvjviviviujuhuhvgvgvhvivivivivjvjvjvjvjwjxjxjxiyiyiyiyhyhyhyhxixixixixixjyizizhzhzhzh{g{g{g{f|f|e|e}d}c}b}b}b}b}b}a}a}`~_~___[SH=4012233469=@AEIQRJ?86;ADEGKQSRLGA739PdhggegidYW_YMLMNNLKORUZ[\\^\\aVUIIKC83=NNGB<?CEJE;9:8337:755667:=?AEIMOPUURX[YUSad\\Y_ibbb^allchgggkmjjihhmk_^bdbdefaZ][[]_\\V[^YS]ZXSTZYWa_X_ibddhbbd`URXXYgc`druopw~}|}}}~~||{{|||{yxy{|~{yxxxxxwwxyz|}~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{zxtqpqqrrrppoomllopqpprsssuvwvsrsttttsrmrusqqqqqqqrrssrplkkjg~i~f~e~g~i~k~j}j}j}j}j}j}j}k}l}m~m~n~o~n~m}l|l{l{k{jzjzhzhzizjzkzlzlzm{n{n{n{n{nzmzn{q{u|x|u|y|}|||{|z|x|v{syqypxpxqwrwrvruqtqtqspsptntmumuovpwrxtxuyvywzxzxzwywyvxuxvxuxuxtxtxtxuxuxuxuxuxvxvxvxvxvyvyvyvyvywywyvywywxwxxxxxxxwxxxxxxxxxwxvxvxuxuxuwuwtwtwtwtwswswtwtwtwswuwvvtwvtxnyryuzu{u|w{z{y|w}v|w|x|w}u}s|st|u{w{x{x|vsnilztkjkpuxrlpqmFptM?QjqopqqpmePNPRTrsoigeagdoz~|xvcPTsyrSOcqvwvxz{zxwx{{vrsuuslmprqpqrtuvwxx~y}yyyzzzyyzz|yzyxywyxxyxzwywxwwxwxvyvyuxtxrwqwqwrvtwvwvvuvtwtwswswrxtxvzx{||||}}}~~~~~~~}}}}}}~~~~~~~~~~~~}||}|{zyzzyxxxx~~~~~~}||{zxvw~z{zx{y{xtrponqtuuutrqqrsnq{u}w{vywzy|wtrrqqrrq~s}r|p{sxvvwtxsysysztztzsyuxwyyvyvvvtwsxqypypypypypxqxpxpypyoypypzrzszs{s{s{t{t{s{r{rzqypyoxownxnymynyowsuvsvrustssssssrrrvp|n|m|ljiil~n}n{mxnupprmqipfqfrhsitjtithshsitjtkulvlvlwmxnynymxlwjviuhuhtgtftfsftftftfteteuguiukulvlvkvjvivhvhviviuhugufvgvgvhvivivivjvjvkvkvjwjxjxixiyhyhyhyhyhyhxhxhxixixixiyiyizhzhzgzgzg{g|f|f|e|d|d}d}c}b}a}`}`}`}`}`}`~_^^^\\SD920234569;=<=BDGIPUOB;9<ADGJNUVSLE<4;M`d^^_agdUMU^UKLOPRRPQQRRROSRTLOKIKD:39KPIC>AGHJG>987547:856677:?BBCIOQRWVQY[YUTbeZV`i`bebfmhcjiddgjhhijili[\\_cdddb_\\ZX_^aYUX\\]QZYWRRUVSXTQ\\g]bfi_`aWNW_Y]bXagvxrqx~}||}}}}}||||||{yxy{}~zyxxxwwwxyz|}}~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{wutssssrqpponnmopqqqrsrrttttsstttttsssvqlqqqppppqrrsqnjijighfefi~k~j~k~k~k~k~j}j}k}l}m}n~o~oo~n~l}l|k{k{j{izhzhzizjzlzmzmzm{n{n{n{n{nzmznzq{t{t|r|v|z|z|z|{|{{z{uzszqxqxqxsxswrvququqtptqtpunumvmvnwpwrxsytyuzvzwzvyvyvyuyvxuxuxtxtxtxuxuxuxuxuxuxuxuxuxuyuyuzvzvyvyvyvywywyxyyyxyxyxxxxxxxxxxwxvxvxuxuxuxuxtxtxsxsxrxrxsxtxsxryszsytyuyuxuxuyuxvxuxtysxtwuxwyxywxwxvwvwxwwwwwwxxwyw~usux}|upmnrw{yusro[zu_GXmxurssssn^Y]ceuroigcgsrvwxurrhMUscXgkuvu~t~u}w}x}y}x}w}u|u|t|w{w{v{t{v{x{w{q{p|p}p}q}q}r~s}t}u}v}w|x{xzxyyyyyyzyzzyzxzwzvyuytxrxrxrxswsxtwtwtwtwsxsxrxsxsxswrwqwqwrxrxrwrwrwrxrxsyuywzy|{|}}}~~~~~~~~~~~~}}}~~~~~~~~~~~~~~~~~~~~}|zzzz~~~~~}}|{ywwyxwuyxzxvtrpoqstuutrpoputrmszvvxvzyx~usssrr}s{qztxyvyuxsxryqyryrysytxsxrxszt{syrwrwqxpxoxoyoyoyoypyqypypypyoypzpzrzs{s{s{s{s{s{rzrzryqypyoxownwmxmxnxnxpwruruqtqupuounuktlspqpqrpvo{m|myoxpvqtqrqpsntltktjshsgshtitisgsfsgshshthuhuhuhujvjwiviuhththtitiththththtgtftetdueufuhvhwiwiwhwgwgvgvhuhuhugugvgvgvgvhvhvhvhvivjviviwiwhxhxgygygygygygyhxgyhyiyiyiyhygzf{f{e{d{e{e|e|d|d|c|b}b}b}a}`}_}_~_~_~_~^~^~]\\]]TG9200479:;>BBA?CFHGIPLA::<@CFIMTUPHA99HXUPUX[_`YNNUXRMPSTUUSSSSSQMONIHJOMKG?8:HNIC@DGIGD?:666458745789<@CBCJPTSTYQW\\ZVWddYV_e\\_fcfkeflib`chfhjhgie]_`adda\\][WXab_YX[[^PYXWTSQSOPQOXaZ_cd^a^RSeg[dVXinz{ttx}}||||}}}|||||{yxy{}~zxxwwvwxy{|}}~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}{yxwusrrrqqqppnnoppqrqppqqrrtssssrrrptppstrqppppqqqqokihjhfhgffgkkkkkkk~j}k}l}m}n}opom~i}g|g|g{h{f{gzhzizkzmznznzn{n{n{n{n{nznzozq{t{q{n|q{v|w|x|{{~{}{yzwztyryqyrzsyrxqxqwpupuquqvpvovnwnxnxpxqyrysztztzuzuzuyuyvyuxuxtxtxtxuxuxuxuxuxuxtxtxsxsxsytztytytytytyuyvywyxzwzwzwyxyxyyyxyxywyvyvyuyvyvyuytxtxsxsxsxsxtxtxtxtyuyuzu{uxtytytxuxuwuwuxvwvxwywywzvyuyuyvxuxuxuxvxwxywwxyzzzy{}vusrux}w|yzx{v{uyv}s}w~}sfv~u|wvu}v{vxuutwsqm~nwrxsyx{v{t|q}p~nzr~spturokhpZ`reQp}s{v{v|szsxuxvxwxxxwxwxuxtwrwtvuvvvuvutususurusttstststtuuuvvvvwvwvwuxuxtxryqyqyqyqyoyoxnxoxpwpwowpwqwqxrxswtwtwtwtwsxtxtxswswrwrwrwrxrxrwrwsxvywzz{||~}~~~~~~~}}}}}~~~~~~~~}}}}~~~~~}}}}{|||{|~~~~~~~~~~}|{ywxyxwvuxuxwwwvvuvuxtzuzu|u~uut~t}t~s~t}s}rrqszvwywzyy{v|u{u{u{t{tyuwuvvtwrxqypypypyqyryrxrxrxrzryqyqypxpxowownxnxnxoxoxoxoypxpxoynyoypzrzrzszszszszszryryqypyoyoxnwnwmwmwmwnwowpvououounumuluktksjsishrjrnroqprormsksisjtmuouquptlsisisjsisgsdrcqcrdsdsdsdsesftftftgtgshsisitjtjtjuiuhugtftetdtdudududvfwgwgwfveveufuguhugugvfvfvfvgvfvfvgvhvhvgwgwgwgxgxfyfyfyfyfygygygyfyfyeyeydyczb{b{b{c{c{c|c}b}a|a}a}a}`}_}_}^~]]]\\\\\\\\[\\VG:1/0169?@@?DBGCEFGGFGD?<:<@CDFHMMHB<<ENMGHPUZ]ZUSVXTQPSVXYWUUUVVSOPPOIIRQIGE@AHMKDBFGHB>?:55633663479;=ABBDJOUSRYQV]\\YZbbZX_aY]ebbeffkkcbgidieaiacail`YffW\\\\WYbb_Z[][_RWWWTTPRNIPVY\\W]bc`]ZQ`lbZfSbqtxywvx~}}||||}~}}|||{yxx{}~zxwwvvwy{|}~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}|{{zwtrqrrrrqqonnooqqqopnoprssrsqpqqpootutrqppppppppnhhhigfggjgeljkkllkk~j~k}l}m}osmi~i}j|j{j{h{j{f{gzlznznznzn{n{n{n{o{n{nznzp{q{r|o|l{o{t{u{v{z{|{|{|{{{y{u{q{sztztysyrxpxowpwrwrwrwpxpxnxnxnyoxqyrzrzszuzuzuzvzvyvytytxtxuxvxvxvxuxuxtxsxsxsxrxrxryryrysysytyuyvywzwzwzwzxzxzwzwzvzwzvzvzvzvzuzuyuytytxtxtxuxtxtxtxuyvzvzwzwzwzvytytyvxuwvxvxvxvxwxwywywzwywyvyvyuxvxwxvxuxuxuyvyvxwvwvwvwvwwvxuytxtwswswswtxuwvuvtvtuuuwvwwuvutvrvququtttuuvtvuuuuvuvvvvvuvuvutututuststtsvswsxsyryqzq{r}r{sxuuvsurusususvtvtwtwtwtvttssrtrtrurvruruqvqvpvqururtrururvrvqvqwrwrvswrxrxqxpxqxqwqwqwqwqwqwqwqwpvpwpwqwrwrwswswsvtwtwsxsxsxswsvswswsxrxrwswvxxy{{}}~~~~~~~~~~~}}}}}|||}}~~~}|{{|}}}~~~~~}}}~~~}|||||}}}}}}}~~~~~}{yxyyyyzy{v{v{u{szqysxtxtxtwuvuvuutvsvsvswrvsuuuxtxuwwvyvyvxwvwvvvwvwvwvvvtwsxrxpyoyoyoyoypypypxpxqxqzqypypyoxoxnwnwnwmwmwnwowowpxpxpxpxoypypyqyqyryryryryqypypxoxnxlxlwlwlvlvlvlvmwmwmvmvlvlulukujuithsgsfserdrfshsirhrgrfresftjumuoumtjrfrfrfrerbq`p_p_q`q`r`qapbqdrdrdserfrhrjsjtkukukvjvivhufuetdtctbtbucudveveveveududueueueufvfvfvfvfvevfvfvfvfvfwfwfxexfxfyeyeyeyeyeyeyeyeyeydzczbza{`|`|`|`|`|`}`}_}^}^}_~_~^~^~]~]~]\\\\\\\\[[XPF92/147:>EGDBCHEEFFGGDB@=;<=?@ABBCA>;;?IKFGJPVYYWUX\\YTRSVY\\\\ZXXXYZYXYWSPMQTOLKHHJKIFFHHG?;=:5453244337;=?ACBEJOTRQUPT_`]]__]\\__Y^d_^bffigddghb`]gf_cdoneYaie_WXZ`a_\\]_\\`UTVZUTRPNFTZZYTZ^a[VRQec\\[eYiwwvxyxy~~}}|||}}}}}||{yxy{~~zxwvvwy{}}~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~}}}}}}}}}}}}}}}|||{xvsrrqqpppponmnpppnpklnqqtptlppopruwvurqpppooppojhhghggfefecjijlmmlkjj~k~l~mlh~g}h|h{g{g{g{e{b{dzjzm{n{n{n{n{n{n{n{o{o{o{p|p|q|l|j|n{r{s{t{x{w{v{y{zz}{}{|{z{y{y{wzuzsyqxqxsxsxrxqxqypynylymxmwnxpyqzsztzuzvzvzvytytytyuyvyvyuyuyuytytysxsxrxqxqxpxpxqxqyrysytyuyuyuyvzw{w{w{w{w{w{w{vzvzuzuzuzuyuyuyuxuxuxuyuyuyvywzxzxzxzwzwzwzwzvyvxvxvxuxuxvxwxwyxyxyxywyvyvxwxvxvxuxtytxtxuxuwuwtwswtwtwtxtxsxsxtxtxtxswrwrwqwrxsxtxtwsvrvqvqvrvsvswtxuxvvvvvvuvvwwwwwvvuvtvsvsvsusvsvrvpvqvqvqusvtwtwswsvsvrvrvrvrvrvrvrvrvrururuquqtqtrurusvsvrvquqvqvqvrvrvswswswrwrxswswrwqxpwpwpwqvrvrvrurururvqvqupvpvpvqwqwqwrxrvswtwtxtxtxswsvrwswtxuxuwvxyy|{~}~~~~~}}}}||{{{{|}~~~~|{{{|}}}}}}}}|||||}~~~~~}|{{{{||||||}}~~~}}}}~~~~~~~~~~~}{yyyz{{||}~}z|w|u{s{r{rzqyqxqwqvpwowoxozpyoxpxowrxrxsysyrxrwrwrwswswswswrwqxpyoynynynynynyoyoxpwoxoyoyoynymxmwmwlwmwlvlvmvnvowpwpwqxpxpxpxpxpxpxqxqxpxoxnwmwlvkvjvhviuiuiujtjujtiujviuiujujuiuiuhthshsgrgrfqeqfrgrfqeqcqaqaqbrdsdsdscr`q^q^q_q_q^q\\p\\p]p_q`q`papbpcqcrcrdrergsitiujuivhvhvgvfveududtctbtbtcudueueueueududududueuevevevevfvfvfwfwfwfwgxgxgxfxgxgyfyfyeydyezdzdzczczbzaz`z`{_|_|_|_|_|^}^}]}\\~\\~]~]~]~]~]~]]]]]][ZQB30016:=@CIKHDEIDFGGFHD>=<<=>?@ABA@?>>@EIJILOSXYWYY^c]XWWZ\\^_\\[[[[[\\^][WTQRVWTRNNNLJHJJHG?:=954420233249>@CEDFJMSQPSQU`b_]^^__^^Z_c_]aegcbbcgf_\\bddadckkm]cick^\\]^``^^`\\aZQW[UVSOPHX^[XVW]_NQUY__V^bboxz||{yy~~}||||}}}}}|{zyz{}ywvvwy{|}~~~~~~~~~~~~~~~~~~~}}}}}}~~~~~~~~}}}}}}}}}}}}}}}}{yxutqponnnopnnnoqpnpkjmopqpioppoqstqppppppoooppojigcfhjgbbcbghjlmmljjijjkji~h}f|e|d{d{e{d{bzdzizl{m{m{n{o{o{o{o{p{p|p|p|o}o}k|k|n|q{pzq{t{rzpzrzs{u{{{{||{{}zwztyryryryryqyrypyoynylxmwmwnxoyqyrztzuzvzwzvzuzszsztzuzuzuztztztytytysyryqxqxqxqxqxqxrysytytytytyuzuzvzwzvzv{vzvzuzuzuzuzuyuyuyvxuxvyuyuyuyvywzwzxzwzwzwzwzvzvyuxtxtxuxuxuxvxvxwyxyxywyvyvywyvyvyuytytxuxwxwxwxvxuxtxtxuxvxvxvyvyvxvxuwtvtvtvswtxtxtwswrwrwrvrvtvsxuwuxvwwvwvvwwwwwwwvwtwtwtwswtvtvtwswrwsvtvsvswsxsysxsxswsvtvtwswrwrwqvqvquququqururusususvsvsururvswswswswswtxsxsxsxsxsxsxrwrvqvrvrususvtvsvsvsvsvrvqvqvqvqwqwrxrxrwswswtxtxsxswrvrwsxtxuyvyyz|{~|}~~}}}}}}||||{{{{|}~~}|{{|}}~~~~}|{{{{{{|}}~~~~}|{{{|||||}}~~}|||||||}~~~~~~~~}|zzz{||||}}}}}|y}w|v|u{tzsysxqxoxoxpztztyqypxqypxpyqypxowoxoxpxpxqxqxpxpxoxoxnxmxmxmxmxnynxownwnxnxnxmxlwlwlwlwmvmvlvmvmvmvnvovpwpxpxoxpxpxpxpwpxowmvkuiuhtgtftetesfsgshshsgsgsftftftgtgtftftfsgshrgrgrfqfqgrfreqcp`p^p]p^p^q^q\\r[q\\q\\q]q^q_q^p]p_papbqdqdqdqdqcrcscrdrerfsgsftfufvfvfveveveududududtdudvdvevfvevevdvdvdvevfvfwfwfwgwgwgxhxhxhyhyiyiyizhzhyhzhzhzfzezdzc{c{b{b{a{`{`{_|_|^|^|^}^}^~]~\\~[~[~\\\\]^^^]]]\\ZVJ?73249>CEHGLMJEDEEEFGHFA=;<=>@ABDEEFGGGHKMOPRTWZZY[\\`eb^\\[]_`a_]^]Z^aaa_YWWWXZYXUSSPLJLMKI?9<954310122226=@DHFFJLPNORRVac`^]_a`__^ac`]_bd]cbcfe`b^_cbdckmnZhjcchba_`___a^b^RWZWWVMRL\\`[W[U^[QWZ[SbU]bjtz}|zy}~}|||||||||||zzz|}x~vvwy{}}}~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~~~}}}}}}}}}}}}}~}}|zzxurpnmkklnnnmnqqpoliorotfaonorrqohlkoooonnoopqmicafgjhb_abfijlmmkiiiiijlk~i}f}d|d|d|e{h{ezfzkzn{m{m|n|p|p|p|q|q}p}p}r}p}m}j}k}n|o{nzo{p{nzmzkzkyjzqzx{}{{{{z}zxzsyqyqypypyqypyoyoynxmwlwlwmxnxoxrysytzvzvzuzszszrzszszszrzszuzuzuzuztysysyryrxrxrxrxsytytytytyuzuzuzvzuzvzvzuzuztztztztyuyuyvyvyvyvyvyvyvyvzvzwzvzvzvzvzvzvyuxuxuxuxuxuxuxuxvxvywywywyvyvyvzwzvzvzuyvywxxyxywywyvyuyuxvxvyvxwxwxwxvwuvtvtvtwuxuxuwuxtxsxswtwuvuwuwtwuwvvvvuwvwvwvwuwtxtxtwtwtwtwtwtwvwvvwvvvuwuxuxuxtxtxtwtxtxtxtxswsvrvrurtrururusvtvtvsvsvrvrvsvswtwtwtwsvswrwrxrwswrwrxrxrwrwrwsvsvuwuwuwuwuwtwswrwrwrvsxsxsxsxswswswswsxsxrwrvrwsxuywzx{{|~}~~~~~~}||}}||||||||{||}~~}{{|}~~~}|{zzzzz{{{|}~~}}|||||}}}}}~}}|{{|||}~}}}~~~~}{z{||||||}}}}~~}z}w|u{szsyrzrzryryqyqypyqypypyoxpxpxpxpxqxqxqxqxpxoxoxoxnxmwmwmwmwmxnwowpwpwpwowownwnvnvmvlvlvlvlvmumumumvmvlwmwnwmwlwkwkwkwjwivhtgtftesdsdsdrfrfqfrfrfreresdsdsdsdsdsdsesfsfrgrfrfrererdqcq`p^o]o\\p]p]p\\p]p\\p[p\\p^p^p_p_p_p`qdqergrgqfqerdscscsasbsctdteteudveveveveuevdueudueteuevevevfvevdvdvevevevfvgxgxgxgxhxhyiyiyiyjyjzjzjzjzizizizhzgzezd{c{b|b|b|a|`|_|_}_}^}_}_}^}]~]~\\~[~[~[\\]^^^][WUOG;22368?FJOMHLLHCBABDEFFC?;:<@ADFGHJLNNNOPPQRUUXZ\\\\[\\^`ec`^^`a`b`_`]Z_cdda[Z[YYYYZYWVUQJKLLJ@:;964210001104;?FKHGJKNKOPRX_ba^__b_^__bba^_aa_`acedaa`acccdjlfVskd^egf``aaab`c[YYZXWWMSU\\`\\\\aVXUYXaZW`W`ekuz~}zy{~~}||||||||||{zz{}x~vwz{}}~~~~~~~~~~~~~~~~~~~~~}}}}~~~~~~~~}}}}}}}}}}}}}}}}}||{{zwspmljihkmlk}mqrpoljrrloa_gloqqomnmnooonnnmnopnh]bdfigbZ`dgijlmlihhiiijjih~e}e}e}e|f|h{e{f{k{l{m|l}o}o}o}p}p}p}p~p~r~q~l~j}l|m|n{mzmzmzmzkziyjyjylypzrzu{xz}zzyyysyoyoyoyoxnxoxoxnxoxnxnwmwlwlwmwowpxrysytztzrzryryqzqzqzrzs{v{vzvzuztzsztzszsysxsxsxtytytytysztztzuzuzuzuzuzuzuztztztztytyuyuyuyuzvzvzvzvzvyvyuyuytytyuyuyuyvyvyuyvyuxuxuxtxuxvxwywyvyuyuyvyvyvzuyuxuyvyxyxzxzwzvyvyvxvxvyvxvxvxvwuwuwuwuwuxvxvxvxvxuxuxuwvwuwuwvwuwuvuvuvuvuvuwuwuwuwuwtwtwtwtwtwtwuwvvwuvvvwvwuxuxuyuyuxuxuxuytytxswrvsuststrvrusvsvsvrwrwrvrvrvsvsvtvsvsvrvqwqwrwrwrwrwqwqwrwswsvtvuwuxvxvxuxtxsxrwswswsxtxtxtxtxtxsxsxswsxrwrwrwsxuyx{y||}~~~~~}}}}}}||||||||{{|}~}||}~~~~}|{{{zzzzzzz{}~~~}}|||||}}}}}~~~||}}~~}|||~~~~}||{|}}}||}~}~~~~}}z|u{s{rzrzrzqzqyqyqypypyoyoxoxoxpxpxpxpxpxpxoxoxoxnxmxlwmwmwmwnwnwowowowownwmwmvmvlvlvlvkvkvkululukukvjvjvjviuiuhvgvgugugtfsfsfserdrererereqerdrdrdrcrbrbrbrbrbrcrcrdrdsdscscsbsasar`q_p^o^o]o]o^o^n^n^o^o_papcpcpcpbqdrgrirjrjrisgsetdtcs`sasbtbtcucucvdwewevevevfufueuftfufvfvevevewewewfwfwgwhwhxhxhyiyizj{j{k{k{l{l{l{l|k|j{j{k{j{g{e{c{b|b}b}b}a}`}_}_}_}_}`}`~_~^\\\\[[[\\^__^ZTLHA:4137=@GJMOQJDB@;::<?@@?;99;@DFHJLMOQTSTTVVXX[\\^_``^`aadedcccdadbac_Ybggfca_^][Z[]][ZZTKKLMKD><:742210034249>GMIHJHIGLOQW]aa_``b^^abcb`_^^^^`cdfecbbbddbejh^Ztgf^`iia`acdcad[\\Z[ZXXNTY\\_^`cVUS][a]\\_Xapkrw~}{yz}~~~}|||||||||{zz{|x}u~wz|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}||{yurmkhge|h|j|jhykpqomljsrih`cimonlmprqpoonmmmlmnnkdZdbbge`Z^eghjkkjhghhiijihgf~g~g~g~g}f|d|d{h{l|m|m}o}o~o~o~oo~o~n~s~q~j~j}m|n|m{l{lzlzjzizhyhyfxgxhyiykznzuz{z}yxyrynymylymxnxoxpxqxpxoxnxnxkwjvjvkvlwnxpxqyrzrzryrzqzpzpzrzs{u{v{w{v{u{uzuztztztytxtxtytytytytzuzuzuzuzuzuzuzuzuztzszszsztyuyuyuzuzuzvzwzvzuytytytysysysytyuyvywywyvyvxuxuxtxuxuxuxvxuxuyuyuyuyuyuxtxuyvywywzw{v{vzvzvyvxvyvxvxvwuwuwuwuxuxuyvyvyvyvywxwxwxwxwxwxwxvwuwtvtvtvuvuwuwuwuwuwtwtwswtwtwuwuwvvvvvwwwwxwxvyvyvyvyuzuzuzuzuxtwsvsurtruqvrvswsvsvswrwswrwrwswswsvrvrvqvqvqvrvrvrvrwqwqwswtwtwuwvxvywywywyuytxsxswtwuxuxuxtxtxtxtxtxtxtxsxsxsxtyvzy|z}}~~~}}}}||||||||||||{{{{|}~~||}~~~~~~}}|{zzyyyyyyzz{|}}~~}||||}}}}~}}}}{|}~~~}|{zz{|~~{}v|v|x{y{y||}}|||~|y}z~|~}}}~}~{}w|u{s{rzr{rzqzqyqypypyoyoxoxpxpxpxpxpxpxpxoxoxnxnxmxlxmwmwmwnwnwowowowownwnwnwnvmvlvlvlvkvjujujuiuiuhuhuhuhththuhugtgtgshshshrhrgsgshsgsgsfsfsfrerdrdrcqcqbrbrbrcrcrbsbsbsbsas`r`q`p`p`p`p_p`q`p`p`o`o`papbqdqdqdqcrdsgsisksjsishtftetdtasbsbtdtdududvevfvfvfvfvgugufugugvgwgwfwfwfwewfxfxgxhwhwhxhyhyhzi{j|k|k|k|l|m|l|k}j}j|j|i|h|g|e|c|b}b}b}b}a}`}`}`~`~`~a}a~`_]\\[\\\\]__][VJ?<72149<BFLNPPKC::86568:::978;?DILNOQSTVWWXYZ[\\]__abccabcceffffffdccaea[ejjigedb`_\\\\]^]\\\\VLKJILIB=<942221156569>FKIHIDCDILNSZ`_^``a^_bbba`_^^^_abdfdcccdeecgkf[eqcga]jiaabdec`d[]\\\\[XYQWZ\\]^bbUTUZ]````Zkuely}{zz}~~}||||||||{{zz{|x}u~x{}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}}}|{zvsmkihfzfxgzh|gxj~nomkkkppkjgknooifjmpponnmmnnnoojc]\\i``ec_[_bcfhiiiffhhhiihhhgg~f~f~e~d}c|c|h|k|m}m}n~n~o~m~mm~n~m~r~o~j~k}o|n|l{l{k{kzhzhziyfyexewdxexfyiynzryqyoymykxjxkxlwmwnwoxpxpxpxoxnxkxjwjvjvjvkvmwoxpyqzrzrzrzrzrzrzs{t{u{v{v{u{u{u{t{uzuyuyuyuyuyuytytzuzuzuzuzuztzuzuztzszszsztyuyuyuytztzuzvzvzuztysysysytytytytyuyvywywywyvyvxuxtxtxuxuxuxtxtxtxtxuxuxtxtxuyuyuyuzvzv{vzvzvxvxvyuxuxuwuwuwuwuxuxuyvywywywyxyxyxyxyxyxywywxvwuwtvtvtwtwtwuwuwuwuwtwtwtwuwuwuwuwuwvxwxwxwxvyvyvyvyvzvzvzvzuxtwsvruququqvrvsvswswswrwswswswswswsvrvrvqvqvqvrvrvrvrwqwqvswtwtwuxvxwywzwzvzuytxsxswtwtxuyuxtxtxtxtxtxtytytytyuyvzw|z}{}~~~}}}|||||||}}}}|{zzzz{|}~~~~~}{|}~~~~~~}}|{zzyyxxxyyyzz{{|}~~}}||||{{{{{{zyyz|}~~}|{zxwwxy{|~}~{}x|u|t{u{v{u|v|{||||x|u|u}v}w}w}x}w~u}u}t}u|t{s{rzr{rzrzqzqypypypypypypypyqyqyqyqyqypxoxnxnxnxmxlwmwmwnwnwowowowowowowowownvmvmvlvkwkvjvjuiuiuiuiuiuititjtjujuitjtktksksjsjtjtjtjtjtiththshsgsgsereqdrcrcrcqcrcrdrcrcrbraraqbqbqbqdqcqbrcrbqbpbpbpbqcqdrdrerdsdsftgthtithtgufufufueteteufufvfvewfwgwgwgwgwgwgwgvhwhxhxhxgxgxgxgxgxgygygxgxgygygzg{h|h|h|h|i|i|j|j|h}h}h}g}f}e}d}c}b}b}b~b~a~a~a~a~`~`~`~a~`~`_^^^^^^^^WNF<442016>BEGMNPM?865434566778:<?CHMPQSUVXYYZ[\\^_`aabdeffeeeefhhhhiifcdbfe`joonmkjhfd`^_`__^XMJHGJKE>=;4111237999:?CFDDD?=@GIINV\\_^``_]`bba`____`abcdedccddeegikf\\lnbfe_ki`bceea^a[_\\[[W\\UZ[^\\^baVTTXZ\\_bbasq_o}{z{}~~}|||||||{{{zz{|w}v~x|}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}}}}}|{{wtmjihgzgxhyizjyk|nnljjjlmonklmiloqkkmnnmllmoopmmf`^ahcada^\\^``deghgeefggghgghgg~d~d~d~c}b}b|f|i}k}l~m~m~n~k~j~i~k~l}o}m}j}l|n|l|k{k{j{j{f{g{jzfyexdwdwdwexgxiyixhxgxgxgwgwhwhwiwjwkwlxoxoxoxnxlxkxjwjvjvjujvkwnxpys{s{t{u{tzszrzs{s{t{u{u{u{u{uzvzvzvzvzuzuzuzuzuzuzuzuzuztztzuztzszszszsztyuyvyvyuzuzuzvzuztztyrysytyuyuyuyvyvyvywywyvyvyuyuytytytyuytytytytxtxtxtxtxtyuyuyuzuzvyvyvyvzvyvyvyvyuxuwuwtwtwtxtxuxvyvywywyxyxyxyxyxyxyxywyvxuxtwtwtwtwtwuwuwuwuwuwtwtwuwuwuwuwuwuxuxuxuxuxtxtxuxuxuyvyvyuytxtwsvsuquqvrvswswswsxtxtxtxtwtwtwtwswswrxrxrxrxrxrxrwqwrwswswtwtxtxuyuzuzuztysxrxrwsxtyuyuyuyuyuytytytztzuzuzv{x|y}{~{}~~~}}||||}}}}}}}|{{zzzzz{||}~}}|{|}}~~~~~~}||{zzyyyxyyyyyyy{|}}}|{{{{zzzzyyxxxz|~||{yxwvu~t~t~t~u~v~xyz~y}x|u|s{r{r{s{s{s|u|x|{|z|u|s{r{s{s{s{t{t|s|s|s|s{s{r{rzrzrzrzqzqzqzqzqzpypyqyqyqyqyryryqypyoxnxnxnxmxmxmwmwnwnwmwmwmwmwmwmwmwmwnwnwnwmwlwkwkvkvjvjvjvjvjvjujujukukukukulumtltltkujukujujuiuiuithtithsgsfrfrerererererfrererdrdrdrfrgrfrerdrdsdsdrdqdqdqdqdrdresesdsetfteufugtfuevevfvgvfugugugvgwgwfxgxhxhxhwhwhwgwhwhwhxhyhyhxhxhyhyhygzgzgygyfyfzf{f{f|g|g{g{g|h|g|g|f|f|e|d}d}c}b}b}b}b~b~a~a~a~`~`~`~_~_~_~```___^^]]YI<3.024436@GGGFFGC913432445677;>ADIMPRSUXYY[[[\\^_`abddffghgfgghijjkllljjlnonquvutsssqpljjigfb\\RKHGJKF=>?8311369==<<??<=><9:=FGEHOZ^^`_\\[ba_a`__```abcdedccddddihif]rgcfgakh_bcdc`\\^]b\\Y[U]Y\\^^[^aaYTTYVX`aclupht}{{|~~~}|||||||{{{z{{|w}u~y}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}|}}}}}|||xunjihg{gxi{k{l}m|mmkiggillpdqqrspommnnmkjkklljkhfbcehdcc`]\\^^_bcefedcceeffgggfe~c~c~c~b}_}^|c|e}j}k~k~m~n~i~f~f}h~k}l}k}h|i|j|g{j{i{i{h{e{g{izezdxdwdwcwdwewexexdwcwcwdvevevevfvfvgwhwlwpxpxmxnxmxmwlwkvkujujvlwpyszt|u{t{s{qzpzoypyqyrytytzuzuzvzwzwzwzvzvzvzvzvzvzuzuztztztztztzszszszsztyuzvzvzvzuzuztzszszryrysytyuyuyvzwzwzvzvzuzuztztztztztztztztztysysytytxtxuxuyuzuzuzuyvyvyvxwywywywyvyvxuxuxtxtwtxtxuxuxvywywywzxzxzxzxzxzwzwzvyuytxtxtxtwtwuwuwuwuwuwuwuwuwuwuxuxuxuxuxtxtxtwswswtwtwtxtxtytxuyuxtxswsvqurusvswsxtxuyuyuxuxuwuwtwtwtxsysysysysysysxrxrwrwsxswtwtwtxtytytysyrxqxrxsytyuzvzvzvzvzuzuztztzuzv{v{y|{~|}}}~~~}}||}}}}}}}|||{zyyyyz{{|}|}|{|||}~~~~~}|||{{zzzyyyyxxxxz{|||{{zzzzzzzxxxxxw{xxwvu~t~s}s|r|r|r|s|s|u}w~w}w|v|t{s{q{q{q{q{q{r{s{u{t{szrzpzqzqzqzrzq{q{p{p{q{qzrzrzrzrzrzrzrzqzqzqzpzpzqzqzqzqzrzrzqzpyoynxnxnxmxmxmxnwnwnwmwmwmwmwmwnwnwnwowownwmwlxlwlwlvkvkvkwkwkwkvkvlvlvlvlvlvnvnunumulvkvlvkvjvjvjviuiujuithtgsgsgsgsfsgshshshsgsfsfsgshshsgsgsfsftftfsfrfrfrfrfsfsftgtgtgteueududuevevfwhwiwivivivivhwgwfxgxhxhxiwixhyhxhxixiyiziziyiyiyiyiyhzhzgyfyfzfzf{e{e|e|d{d|d{e{d{d{d{c|c|b}a~a~a~a~b~bbaa```~_^]^~__``_`_]\\[SA3,*/289869?FFA?>93.13334578::>BCGKORSTVY\\\\]]]`abcdeffhhiiiiiijkmnooqqrstvwwxyzzzyyzyywwvurplf[QJHIKH=>C<62026:@A?>=:678767<BDAFLX]^]\\Y[b`_`_^`aaaabbcccbbcdeelffdeqgegfblg^`abaabeeh]XZR\\]_``Z]`_[TU\\TWaafputnx}|{|~~}}}}||||{{{{{{{v|ty~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}||}}}}}}|yvnjhgg|gzj|m|p~p|m}ljgddfiheZqxsqopqrqmkhihfddfhlkifggfda^\\\\]]]`acbbcaaceeefffec~b~b~a~_~\\~[}_}b}g~i~j~k~l~h~c~b}e|i|j|g|c{c{d|c{g{g{h{e{c{gzgzfydydxdwdwdwcwdxexfwewdvdvdvdudueueufuhvjvmvmvmwnxnwnwnwmvlvjvjulvpxuyw{w{u{r{ozozoyoypyqyrysytyuzvzwzwzwzwzvzwzvzvzvzuzuzszsztzszszszszszsztzvzvzwzvzvzuztzszrzryrysytyuyvzvzvzvzvzuzuztztztztztztztztztztzszszsztytxtyuyuyuzuzuyvxwxwxwzwzwzwzwywyvyvyuyuxtxtxuxuxuxvywywywzxzxzxzwzwzvzvyuyuytytxtxtwuwvwvwvwvwvwuwvxvxvxvxuxuxtxtxsxswrvrvsvsvrvrwrwtxuyuyuytxtwrvrusvswsxtyuyvyvxvxvxuwuwuxuytzt{t{t{t{t{tzsyswrwrxswswswsxrxsyryrxqxqwrytzuzv|w{w{w{w{v{v{u{u{v{w|x}z~|}}}}}~~~}}}}}}}}}}}}||{{zyyyyzz{||}|{{{{|}~~~}}|||||{{zzzyyyyxxyz{{{{zzzzzzzzzyzz|~u~u~t}t}s}r|q{q{q{q{q{r{r{s|u}u|v|u{t{s{rzqzqzqzqzqzqzrzrzrzqzpzpypypypypzpzozozozoypypzrzrzrzryrzrzrzqzqzqzqzqzqzqzrzrzqzpzoyoyoxnxnxnxnxnxnwnwmwmwmwmwmwmwnwnwowownwmwlxlwmwmwlwlwlwlxlxlwlwmwmwmvlvlvnvnvmvmvlvkvkvkwjwiwiwivhvivhuhugtgtgtgthtitititithtgtgthtitiththtgtfuguhthshthshshththuguhuhugufueufvfvfwgwiwjwjwjwivivhwgwfxfxgxhxhwhxgyhyixiyizjzjzjyiyizizhzh{g{gzfzf{f{f{f|e|d|c{c|b{b{b{b{b{b|b|a}a~`~a~a~bbbaa```_^]^^____`^]\\ZR>0+*/4;?>;78@B;8520/1445679;=?CECGLPSTTX[^__^_acdffghhijjkkkklmnoqqsuvwxyzzz{|}}}||{{zz{{zxwvqg\\QJKMH?>C@:42139AD?;:6335547=BCAGLV\\\\[YX]a_a_]^`abbbbbccbbbcefflecbomhfedblg`abefhikkm^X\\PXa^baZ[\\\\YVY_RUc`gpuvu{~}||}~}}}}}|||{{{{{{|v}uz~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}||}}}}}}|zwplhff}f{jzmzp{q|o}njd_]`ed`]rvnkjkjjgddefffcbegkljghgeb^[[\\^]]_____`_`bcdccdeca`^\\[[~\\~^~a~e~g~h~i~j~h~b~`}d}g|h|h|`{]z`{`{c{c|f{c{c{hzfzeyexexexewdwdwexfxhwfwevdvdvcvdueugththuhtgthukvnwowowownwmvkvjulupvuxyy{zy{v{rzqzoyoyoypyqyrysytzuzvzvzwzvzvzvzvzvzvzuzuzszszszszszszszszszsyuzuzwzvzvzuztzszrzryryrysytyuyuzuzuzuzuztztztztztztztztztztztztzszszsytytytyuyuyuyuxuxvywyw{x{x{x{xzxzwzwzvzvyuyuyuyuxuxuxvywywyvzvzvzwzvzvzuyuytytytxtxuxuxwxwxwxwxwxvwvxvxvxvxuxuxuxuxtxtwsvsvswswswrxsxuyvzvzvzuyuxswsvsvswsxtytyuxvxvxuxuwuwuxtytzt{t|u|u|u{t{tzsxrwrxswswswsxrxsxrxrxqxqxszt{u{v|w|w|w|w|v|v|v|v|w}x}x~{|}}||}}~~~~}}}}}}}}}}}}}}}|{zzyyyyyz{{}|{{zz{|}}}}}}||||{{{{zzzzyxxyyzz{zzzz{{zz{||}~r|r|r|r{q{pzpzozqzqzqzqzq{r{t|t|t{t{s{r{szrzrzrzqzqzqzrzrzrzqzpzozpyoypypypyoyoyoynyoypzqzqyryrzrzrzrzrzqzqzpzpzqzqzrzrzrzqzpzpyoynynxnxnxnxnxnwmwmwmwmwmwlwmwmwownwnwmwmxmwmwmwlxlxlxlxlxmxmxmxmxlwlwkwmwmvlwkvlvkvkwkxjxixixiwiwiviviviuhuhuhuiujujujuiuhuguhuiuiuiuhuhugugvhuiuitiuiuitiuiuiuiuiuhvgvgvfvgvgwhxixjxjxjxjxiwhwhwgwgxgxgxgxgxgygygyhygygzgzgzgzgzfzfzf{f{f{gzf{f{f{e{e|d|c|b|a}a|`|`|a|a|b}a}a}a~a~a~a~bccbbaa`__^^^___^^\\[[ZU@/+,04:@A?9798521012455789;=@EGEEGMPRSUY\\^````bdegghiijkkllmnnoqstuvxxyzz{{||}}}}}|{zyz{{{zzyvodWNNNIC@CC=73116@F>874335559@EEDKPV[[ZZZ]_^`^]^`accbbbbbbabceggke`csifddbdgfdfhlolkllo_X]OTb\\__\\YWXXX\\cPRechpuxz}~~~~}||}~}}}}|||{{{{{{|w~w|~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}|||}}}}}|{xsnieef}izlzozq|p~qk]TS\\chelnleeeeb][\\^abdfeefhkhgfefb_]VW\\`]\\]^]\\^]]`a`_`abcb_^\\ZZ[\\_a~d~f~g~h~h~h~d~b}e}g}h}i}`|[{^{_|a|a|d|c{c{gzfzgygygxfxfxfxfxfxgxhxgwfwewdwcvdvfugthtithtgshtkvmvnwnwownvmvlukulunuqvtxzy~z{}{zzwzwyvyuyryqyryryszuzvzuzuzuzuzuzuzvzuzuztzszszrzrzrzrzrzryszuzu{v{w{w{v{u{t{szryryrysytytytytztzuztztztztztzt{t{u{u{u{u{uzuzt{szszsytytytytytytxtxuyvzv{w|w|x|x{x{w{w{w{vzvzuzuzuytytxuxuxuyuyuzvzvzvzuzuyuytytysxsxtxuywywywywywywywywyvyvyuyuxuxuxuxuxtwtwuxuwuxvxuyvywzwzwzvzvytxtwswswtxsxsxtxuxuxtxtwtwtxtytzu{u{u{u{u{tztzsysxrxrxswswsxsxsysyryrysys{u|u|v}v|w|w|v|v|v|v}w}w~y~z~{|}||}}}}}}}}}}}}}~~~~~}}}}|{zzzzyyyzzz{{z{zzz{|}}}}||||{{{{{{{zzyyxyyyyyyzz{{{{z{|}~~}}}}~~~q{q{q{p{pzpzpzqzpzqzrzrzr{r{s{t{t{s{r{rzrzszszrzrzqzqzrzrzqzqzpzoyoyoypypypypyoxoxoxnxoypyqyqyqyqyqyqyqzqzpzpzozpyqzrzrzrzqzqzpzoyoyoxoxoxoxoxoxoxoxoxnxnxmxmxnxnxnxnxnxnwnxnwmwmxmxlxlxmxnynymxmxlwkwkxkxkwkwkwkvlvlwkxkxkxkxjxjwjvjvivivivivivjukujujujvivhvhvhuivivivivhuhuiuiujujvjujuiuiviviviviwgwgwgvhviwixixjxjxjxiwhwhwgwgwhwhxgxgxgxfyfzfygyfyfze{e{ezeze{e{e{e{f{g{g{f{e{e{d|c|a|`|`}_}_}_|`}a}a}a~a~`~a~a~abbccbba`_^^^]^^^^][[ZZXF1,-/37=<975442044456778:;<>DGHDEHMPRSUZ^_aabbcefhhijjkklmmnoprsuvwxyzz{{{{{|}}~~~}|{zz{{zzzywsj\\RPQMFCED>95002=F<56545556:BHGGLQVZ[[[[]^]^^__`bcbabbbaa`abdfgjd]ooiecbadjjjmouulglss_WbSNbYY]\\XPTVY_aKWfglpuw|~~~}}|~~}}}}|||{{{{{{}{{{}}~~~~~~~~~~~~~~~~~~~~~~~~~}}}}|||||||||{ytokgefh|j{m{p|prl[MMUahhimecbddddb`^\\ceeffghkgffde`]]OW_`][_^W[\\[\\__\\X[_aeb_^\\YY[\\^_bfgg~g~g~dc~e~g~h}h}a}]|`|`|a|b|d|c{d{fzfzgzgyhygygygyfxgxhxhxgwfwewewdwevevguhuhtgtgshtjulvmwnwnvnvlulukuktltnuqvvx~zz{{zz~z{zyzvzszryszsztztztztztztzuzuzuztztzszrzqzrzrzrzryrysytzu{v|v|v{v{u|t{szsysysysytytyuyuytztzszszsyszszt{t{u{u{u{u{u{t{t{r{rzrzsztztztztzsysytyuzvzvzw{x{w|w|w{w{w{w{vzvzuztytysxsxsxsxsxtyu{u{u{uzuyuytytysysxtyuywywywywzwzwzwzwzvyvyuzuyuyuyuyuxuxtxuxvxvxvyvyvyvyvzvzvyvyuytxtxtxtwswswsxtxtxtwtwtxsxtytztzt{t{t{tztysysysyryrxsxsxsxtxtxtysysyszt{t|u|v}v|w|w|v|v|v}v~w~xzz||}}}}}}}}}||||||}}}~~~}}|||{{{{{zzyzyyyyzzzzzz{|}}}|{{{{zzzzzzzzyyxxxxxyyyzz{{{{z{{zzzxy||||zxxxxxozpzpzpzpzozozpzpzqzrzszs{r{r{s{s{r{rzrzrzszszrzrzqzqzrzrzqzpzoyoynynypxpxqxqxpxpxpxoxpypypyqyqypypyqypzpzozozpzpypzqzqzqzqzpzpzoyoyoxoxoxpxpxpxpxpxpxoxnxnxmxnxoxoxoxnxoxoxoxnxnxnymymymynynynymylxkxkxjxjxjxkwkwmwmwnxnxnxnxmxmxlwkwkwkwkvkwkvkvkvkvjvjvivivivhviviviviviuiuivjvjujvjvjviviwiwiwjwiwhwhwhvjwkwlxkxkxjxixiwhwhwgwhwiwixhyhyhxgyfzeydycybzb{b{b{b{c{d{e|e{e{g{h{g|f|d|b}a}_}^}^}^}^}_}`~a~a~bbaaaaabbbba`__^]]]]]]\\[YZ[Z[J5/./1376543211/4556899:<=@BGHIDHIMPRTV\\```bcdefgiijkkklmnoprsvwwxz{|{{zz{{||}}~~~~}}|{{{zzzyxun`VTTPIFFFB=82118C:35568767<FKJJNTXZ[]^_^]]^^```cebabca``_acddeg``qkgddcbhopsuwzwjakxxbV_YP[YPZ]YMQUZ`^O[kqux|}}}|~~}}}}|||{{{{{|~|||}}~~~~~~~~~~~~~~~~~}}}}||||||||||zwrmhfegi~k~m~pqrmeb__ejkkhebgnhhghkkhgdfjlkmggfcc`\\^R\\``][^[X[\\YZ_]WSW\\_eb__\\XXZ[]\\bfdfg~g~e~egi~i~h~d}b}b|c|c|d|d|d{e{fzgzhzizhygygygygxhxhxgxgxfwfwfwfwfvevevfuhthtisjtjtkulvlvmvmumulukujtjsjtkuowwxz{{{{{{{{}zzztzrzrzsztztztztztzuzt{tztzszrzqzrzqzqzqyqyqyrzs{t{t{u|v|u{tzszsysysytyuyuyuyuytztzszszrysyszszt{u{u{u{u{u{t{t{r{qzqzrzszszszszryrysysytzuzvzw{w{w{w{w{w{wzvzuzuytysysyrxrxrxsxtyu{u{u{uzuyuytytysysxtyuyvzwzxzx{x{x{x{w{w{v{v{vzvzvzvzvyvyuxvyuyuyuyuztztzuzvyuyuyuytytxtxsxsxrxrxsxsxswswsxsxsytytztztztztysysxsyryryrxsxtxtxtxtxsysysysytzt{u|v|v|v|v|u|u}t}u~wy{|||}}}||||}}|{|||||||~}}}}|||{{{{{zzyyyxxxxyzzzzzz{||{{{zzyyzzzzyyyyxxxxxxxxyzz{{{{{{zzzz{||zzywvvvvozozozozozozpzqzqzqzrzrzrzr{r{r{r{rzrzrzrzrzrzqzqzpzozqzqzpzpyoyoynynypxpxqxqxqxqxqxpxpypypypyqypypypypzpzozozpzpypzpzpzozozoyoyoyoyoypypypyqxqxqxqxpxoxoxoxoxoxoxoxoxoxoxpxoxoxoyoyoyoyoyoyoyoyoynymymylykxkxlwlwnwoxoxoxoxpxoxnxmwmwmwmwmwmwlwlwlwkwjwjwiwiwjwjwiwiwjwjwjvjvjviviviwivivhwjwjwkwkwjwiwiwhwjwlwlxlxkxkxjxiwhwhwhwixjxiyiyhyhygzfzdzczczczb{b{c{c|e|f|g|f|f|g|g|f|e}c}a}`~_}^}]~^~_~`~a~b~ccbbaaaaaaaa`__^^]\\[[[[ZYYYXWVG50..0143221111/25679;<=?ACEIJIELLOQRSW]`__bdefghijklllmnopqsuwxxyz{|||{{{{||}~~~~}||{{zzyxwuod[WUQLHGHD?:6413=82568:967=GLJJPUWX[]_`^]^_`aaacdbacda`__accc^f^fndeffffovwxwvqia]ixyaX\\WUWYKV[ZOQV\\^^Zbpz~~~~~}}}|{{{{{{{}|}|}}~~~~~~~~~~~~~~~~~~}}}}|||||||||{zxtojfefgikkkibZ`jjgnopmjegkdbb``aehgkmlikilgcb^]_U``_]\\]WY\\\\XY^\\SOSX]d``_ZTUWXZ]aa_effff~gi~i~f~d~d}f}f|e}e}e|e{f{gzgzhzhyhygygygyhxhxhxgxgxfxfwfwfwfwfvevfugththsitjtjtkukululumumultktjsishtivowyxyz{{{{{{zzz}zyzwztzsztztztztztztztzszrzrzrzrzqzqypypypyqzr{s{t{t{szszszsysytytyuyvyvyuytzszszrzryryrzszszt{u{u{u{t{tztzrzqzqzrzszszszszryrysysytyuyuzvzv{v{v{v{vzvzvzuytysysysyryrxrxsytzu{u{u{uzuyuytytysysxtyuyvzwzxzxzx{x{w{w{v{vzvzv{v{v{v{vzvyuyuyuxsxrxsyrzrzrzsysysytytxsxsxsyrxrxrxsxsxswswsxsxsytytytysxsxsxrxrxrxryryrxsxsxtxtxsxsxryrxsxsysztzv{u|u|u|u}t~u~v~xz||||}}}}}}}}}|{{{{{{{{|}}||{{{{{{{{zzyyyyxxxyyyyyyyz{{{zzyyyyyyyyyyyyxxxxxxxxyyyzz{{{|||}~||{zzyxwxwwoyoyoyoyoyoypyqyryrzrzrzrzrzqzqzqzpzpzpzpzpzpzozoznzpzqzpzqzqypyoypyoypxpxpxpxpyoxnxnxnypypyqyqypypzpzpzpzpzpzpzpzpzpzpzoznynynynynyoypypypzpypypypyoyoyoxoxpxpxpxpxpxpxpxpypypypyqzqzqzqzqzqyqyqypyoynymymxlxmxmxnxoxpxqxpyqypxoxnxnxoxoxnxnxmxmxlxlxlxkxkwkwkwkxjxkxkxkxkwkwkwkvjvjviwiwiwkwkxlxlxkxjxixiwjxkxjyjyjykykyjxixhxhxiyiyhzhzgzgyfze{e{ezeze{d|d|e|e|f|h|h|g}g}g|f|e}c}b}a}`}`}`~`~a~a~abc~ccba``________^^^]\\\\\\\\[ZZYVRNI>3/../123321122/2578;<?@CDFGKLJHOPQQSVZ_```cefghijklmmnnopqsuvxyyyz{{{{{{{|||}~~~~}}|{zzyxxwsme_YTQMJIJG@<8620752558<;78>HLHIOUVVY\\_`^]_`abaaddbbdea`_^abba[e^jl`eikmmw{xtmg`[VZixv^[\\UUYVKSZXRUZ___clw|~~~~~~}||{{{zz{}y}|}~~~~~~~~~~~~~~~~~~~}}}}|||||||{{{zyvrlheeegijllneRNZlonlhedb]da][Z[^bhkljfikpkecZ^_Yba^]^[RZ]\\ZW\\ZOKPSW`[[[VOPPPSYZX\\bddeeghhgf~g}i}g}g~f}f}g|g{gzgzhzgygygygygyhxhxgxfxfxfxfwfwfwfwfwfvfuftgtgsisjtjtjtjtkulumvnvmumtktjsgtgukvsw|xyz{{{{{{{zzz~zzzwzuztztztztzsztzszszszszrzrzqypypyoypzqzrzr{szszszsztytztztzuzuzuzu{s{s{szrzqyqyqzrzszszt{tztztztzszrzrzrzr{t{t{t{t{tztzszsztyuyuyuzuztztztztztzuytytysysysysysysytyuzv{v{v{uzuyuyuyuytytytyuyvzwzwzwzwzwzwzvzvzvzvzvzvzvzvzvzuyuytxtwsxrxrxqxqyqzryryrxrxrxqxqxqxqwqwrwsxsxsxsxsxsxsysytysxsxsxsxrxrxrxryryrxsxsxsxrxrxrxrxrwrwrwrxsxsyszszs|s}t}v~x~z{|||}}}~}}}||||{{{{{{{{|||||{{{{||{{zzzyyyyyyyyyyyyyyzzzzyyyyxxxxxxyyyxwwwwwwwxy{|zz{|}||}}|yyyzzyyyzznynynynynynypypyqyqyqyqyqyqyqypzpyoynynynyoyozozozozpzqzqzqyqypypypypyoyoynynymxnxmxlxmylynyoyoypxpypzpzpzozpzpzpzpzpzpzoynynynymynynyoyoyoyoypypyoynyoypypyqyqyqyqyqyryqyqyqypyqzrzrzszrzrzryrxrxqxpxoxnxnxmxmxlwlxmynyoyoyoynypyoyoyoypyoxoxnxnxmxlxlxlxlxlwlwlwkwlwlwlwlwlwlwkwkwjwjwjwjxkxlxmxlxkxjxjxixjyiyiyhyjyjyjyixhxhxhxhygygzf{e{ezezf{e{e{e{e{f|e|f|f}g}g}g}f}f}e}d}c~b~b~b~a}a~c~c~c~bbbccba`__^^]^^^__^^^\\\\[\\\\][XVOHA:410/0013443211112477;=ACFHIJNMILQRQQTX^```bdfghijklmnnnoqrsuvvyyzzz{{{{{{||}~}}~~~~}}||{zyxwwurkfaZTPNMLKGB=9632531557<<78?HKGGMTVUWZ^_^]_abbbbeeccedaa_^aba_`b^mjijouvrvqke]\\][W[ixt]W[NVZVNTYVVX\\b``iu{}~}}}~~~}}|||zz}|w~|}}~~~~~~~~~~~~~~~~}}}}|||||||{{{zzyuoieddchplnlRLKPW`a_]]dbgfaXYX]ddgflfbdlpoefU^]acb]]bVVZYZZUXWJGOMMZRVSOLKJIIKORZ^^dg~e~ffffe~g}h}g~g~g}g}g|g{gzgzgzgyfyfyfygygxgxgxgxgxfxfxfxfxgwfwfvfufuftgthsjsjtjtjtktlulumunuovnvlvitgtgtlutwxy{{{{{{{zzzzzy|zxzvztzszsztztztzszszszrzqypyoyoypzqzrzrzszszszsztztztztzuzuzuzt{s{s{szrzqyqyqzqzqzrzszszszszszszszszszt{v{v{v{v{uztztztzt{uzuzuzuztzsztztztytytytytytytytytytztzuzwywywyvzv{v{v{v{vzuyuyuyuzvzwzwzwzvzuztztztztztztzuzuzuyuyuxtxswsxsysyuztytytxtxrxqxpwpwpwpwpwqwrwsxtxtxtxtytysysysysxsxsxsxsxsxrxryryryryryqyqxqxqxqxqwpwpwpwqwrwrxrzr{s|u}w}y~{}}}}}}}}}|{zz{{{{{{{{{{|||||{{{{||{{{zzzzzzzzzzyyyyyyyz{{{{{zzyxxxxxyyyyxxxxxyxxz|zzzzzzz{}zxxyyzzz{{|nxnxnxnxnxnxoypypyqyqyqypyoyoyoynymymymynynyoyozozpzqzqzryryqyqypypyoynymylykykxkxjxjxjykylymynxoxpypzozozozozpzpzpzpzoyoynynynymynynynynynynynynynynyoypyqzrzszszszszszszrzryqyrzszsztzszszszsysyryqypyoyoxnxnxmwmxlymynynyoynyoyoypypyqypypyoyoynynynyoyoxnwnwmwlwmwmwmwmxmxmxmxlxlxkxkxjxkylymylylykyjyjxiyhzhzgzhzizhzhyhygyfyfzfzf{e|e{e{f{f|g|g{g{g|g}f}g}f}f}e}e}d~d~c}c}b~c~d~d~d~e~fff~edcccba`^^^^]^^^^___^^``a`^WSNIB;4/00/1135554322334699=?DFJLNNORJOTUTTX\\aa`bdfghijklmnnopqstuvwxyz{{zz{{{{{|}}~~~~~}}}|{zyxwwvuqkd_XRNMOOLFC>9532320587;=:;AHKEDIPTTTW[\\\\\\^acccceeddec`cdbcda__a_okpttsqif^ZWSTYYX]lwnZV^SVZUSW\\WY]`d`cny}}~~~|||}}~~~}}}{{y|w~|}~~~~~~~~~~~~~~~~~}}}}|||||||{{{zzywrmgb_bdfknfHEDHLIBL^\\dch]^VVW\\epokpjegnppgcU`]cbc[_cVX[TUZSPOFCKHFRMQPOLGDA>CGMVZX]a~d~dddef~g}g}g~f~f}g|f{f{fzgzgygyfyfyfyfxgxhxhxhxhxgxgxgxgxhxgwfwfvfvfuftgsisjsjsitjtjtkumuouovnwmvjuhtfshtou{wy{{{{{{{zzzzyxyzzzvztztztztzuztztzszrzqzqypypyqzqzrzrzszsztztztzt{t{t{u{u{u{t|s{s{rzqzqyqyqzqzqzrzrzrzrzszsztzszszszt{v|w|w|w|v|v|v|v{u{uzuzuzuyuytytytytytytytzuzuzuzuzuztzuzuzxyxyxywzw{w{w{w{wzvzvyvyuzuzvzuzuytysyryrxrxrxryrysytzuzuzuytxswrxrxrxsytytysysyrxqwpwownwovpvrwswtxtytytytytytysysysxsxsxsxsxrxrxryryryqypypyoxoxoxoxownwnvovovqwqxqyrzs{v{z~{~~~~~}}||{{zzz{{z{{{{{{{||||||||||{{{{zzzz{|{{zzzyyyyyyzzzzzzzzyxxxxxxyyyxxxwwwwwz{yyyyyxyz{ywwxyzz{{||nxnxnxnxnxnxnxoyoyoyoypypyoyoynymymylylymynynyoyozpzqzqyryryqypyoyoynymylykxjxjxjxjxixixiyjykxlxmxnynynznznznzozozpzoyoyoynynynyoyoyoyoyoyoyoxoxoxnxnypypzrzs{s{s{s{s{s{s{r{rzrzrzt{t{u{t{t{szszszrzqypynynynynxnxmxmymymymymynyoyozpzpzqzqyqypyoyoyoyoypxpwowownwmwnwnwnwmxnxnxnxmxlxjxixhyiyjzkzjzjzjziziyizhzhzgygzgzgzfyfyezezf{e{d|d|d|d{e{e|f|g|g|g|g}g}g}f~f~e~cb~b~b~c~cdeeefgggedccba`^^^^^^^___``_^^_]YUSNIEC?6/-./022344333335568;<?AEGLOQRSSKRWXWW[^cccdeghijklmnnopqrtuvwxxz{{|{{{{{||}~~~~~~}}|{{zyxwwvtqkd\\VQMMNPMFA=74334426<9;>=>CIICCIMQQPQVYXX[_bccdeeefjhbbefggc^^`_plgmkf_WTRQPOPTVY^jsfNMYQQVVVZ^X\\ace`fq|~~~}zzz{{|}~~~~|{u{w~{}~~~~~~~~~~~~~~~~~}}}}|||||||{{{zzyxupjfegggii\\<:79>G@BR\\fcinnb`dibnqnrnmlnmlh`\\b`dad]ebX\\[ROZQHGH@FECFILNRRGB?:>BHSXTY~]~a}b~b~c~d~e~e}f~f}f}f|f{f{fzezfygygyfyfxfxfxgxixjxixixixixhxhxhxhxgwgwfwfvfufthshsisisisisjtktnuovownwlviugsgsktxvy{{|||{{{{zzyxxxy}zzzxztztzuzuztzszrzrzqzqyqyrzrzrzrzszszt{t{tzt{t{t{u{u{t{t|s{r{qzqzqyqyqzqzqzrzrzrzrzsztztzszszszt{v|w|x|x|w|w|w|v|v{v{v{v{uzuzuzuzuzuzuzuzu{v{v{v{v{u{t{u{uzxyxzxzx{x|x|x|x|x{wzwzwzvzvzuztzsysyryryrxqxqxqwrxrxsytztztysxrwpxoxoxqysytytytysxrxqwpwpwpwpwqwrwtxtytytytytytysysysxsxsxsxrxrxrxryryryqypyoyoxoxoxoxnwnwnvovovqwrxszt{t|w|z~|~~~}}}|{{{zzz{{zz{{{{{{|||||||||||{{{zzzzz{{{zzzzzyyyyyzzzzzzzyxxxxxxyyyxxxxwvutwzwvvwwwxyywuuvwxyz{zzoxoxoxnxnxmxmxnxnynynyoyoynynymymymylylylymymynyoyozoyoypypyoyoynxnxmxlxlxkxkxjxkxkxjxjxixjxkxkxmxmymymylzlzlzmznznyoyoyoynynyoyoyoypypypypypxqxpxpxoyoypzq{r{s{s{s{s{s{r{q{qzqzqzrzrzr{r{rzqzrzqzpzpyoymymymxmxnxnxnynymylylylxnynzozozozpzpzpzoznzoyoyoxownwnwmwmwmwmxmxlylymymxlxjxixgxfyfygzhzhzizizizjyizizhzgzgzgzgzfzgzf{f{f|e|c|c|c|b|c|b}c}d}d}e}e~e~f~e~d~c~b~bacdeffffghgfecbba`^^]]]^_```__^^\\ZXUMHFECAA=5.+-/133321013457779<ABCEGNQSUUUPVYZ[\\_aedeefghijlmnnoppqsuvwxxyz{||{||||}}~~~}}||{{zyxwwvsoic\\UPLKLNMF@<73367:68@<:?ACGJIBDIKNNKKRUQRT[`abcdghit{nabflrg^_``tzccg\\SKNNNNKLPSW[bgZ@AMHIQTVY]Z\\bedais|~}yyyyzz{|~~~|{t{x~|}~~~~~~~~~~~~~~~~}}}}|||||||{{{zzywvsnid_^cf]N30/35;DNW^gcimlemfrjpmmqnrqliii_`ebc_b`h^[`\\RNZSDCI=AB@>DLLWUGB@<>ADPZVY~]}_|`}`}b~c~c}d}d}e}e|e|e{ezezdyeyfygyfxfxfxfxgxjxlxkxjxixixixixixhxhwhwgvfvfufugthsisirirjrjsjsltnvowoxnwkuitgsitsvx{||||{{{{{yxwvwwxyywytzt{s{s{s{r{rzqzqzrzs{s{s{s{s{s{t|t|t{t{t|t{t{s{t{t|s|r|q{q{qzrzrzrzrzrzrzrzrzszszszrzrzr{s{u{v|v|w}w}w}w}w}x|x|x|x|x|w|w|w|w|w|v{v{v{v{w{v{v{u{t{t{tzwzx{x{y|y}y}y}y}y|y{y{x{w{u{t{s{szsyryrysysysxsxsysytztysysyrxqxoxnxnxpxqxsytytytytytysxrxqxpwpxrxsxtytytytytysysysysysxsyryryryryryryryryryqyqxpxpxoxoxoxoxpwpwqwrxszt{u}w~z|~}}}||{{{{{{{{{{{{{{{{|||||||||||{{{zzzzzzzzzzzzzyxxxyyzzzzzzyxxxxxxyzyyyywvuttuwuttvwwwwwusstuwxyyxxpypyoyoxnxnxnxnxmymynynynymxnxmxmxmxlxkxkxkxlxlxmxmynynyoyoynynxmxlxlxlwlwlwlwmxlxkxkxkxlxlxlxlxlxmymymylylylymymymynynynzmzmznznyoyoyoyoypypxrwrxrxqxpypzqzq{q{q{r{r{q{qzpzoyoyoypzpzpzozozpzpzpzpyoynxmxmxlxmxnxoyoynymylxlxmxnynynynznyoyoyoynynynynxoxoxnwmxnxnxmxmymylylymylykxixhxfxeyezfzfzg{h{i{i{izjzizhzhzhzh{h{gzg{g|f|f|e|d}c|b}b}a}a}a}b}c}c~d~d~d~c~c~b}b}b~bdeffgggggfecbaa`_]\\\\\\\\]^__^^][ZVQLIECBCDCB=4-+,.13320/.02469:98<FEEEGOQTVWVUY[\\]^aefffgghjjklmnoppqrtuvxxxxyz{{||||}}~~~}}||{|{zyyxwusmgc^UOMLKIHC=:945::?;:C?;@FIJKIBDJIKJGHPQMPRT]^^bdhjfuzehknwg_ehctz]QVXNKLMNMJIMRUVYXM=@D@GJOQX\\\\\\becbit|}{{{zzzz|}~~}|zw|z|}}}}~}}~~~~~~~~~}}}}||||{{{{zzyyxwwuqie^ad[L9+,/37<DLVcadhigejnrommoqosqhelh^afba]`abaaa\\TNWWG@J<?A>9AKK[WHCA>@@AOUUZ~]}]|^}_}a}a}b}b}c}e}e}d{e{dzdybydyexgxgxgxfxfxgxjxmxlxkxjyjyjyjyjyixiwhwhvgvfufugtgshsjrjrjririsjtlunvnwmvmujtgtiunvwxz|}}{{{z{{zywvvvwwx|yuyszszr{rzrzrzqzqzqzrzszt{t{t{t{t{t{s|s|s|s{s{s{r{r{r{r{q{q{r{r{rzrzrzrzrzrzrzrzrzrzrzrzqzrzszt{t{u|u|v|w|w|x|x|y|y|x|x}x}x}x|x|w|w|w{w{w{v{v{u{u{t{tzuzv{w{x|x}y}y}y|y|x|w|v|u|s|s{s{szszsysysytytxtytztztytysyryqyqxpwowowowqxrxsytzuzuzuztyrypxpxpxpxqxrxsyryryryryryryryryryrzrzszsysysxsyryryqyqyqxqypypypypypxqxrxsyt{u|v}xz}~~}}||||||{|||||{{{{zz{||||{{{{{{{{{{zzzzzzzzzzzzzyxxxxxxyyyyyyxxxxxxxxxxxwwvussstusrsuvwwwvutttuvwxwwwrzrzqypypyoxoxmxmxlylylykxkxlxmxlxlxkxkxixixixjxkxkxkykylxlxlxlwlwkwkwlwmwmxmxnxmxmxlxmxmxmxlylylylylykykykykylylymymymymzlzlzlzlymymyoyoypyoynxmymylykyjzjzjzlzozozozoznymymxmxmxmxmxmylylzlymymymymxmxlxlxkxlxnxnynymylylxlwlwlxmymymymynynyoyoynynynxmxmxmxnynyoynynynymymylykyixgxfxdxdydzezfzf{g{h{i{i{jzizhzhzi{j{j{j{j{j|i}h}g}e}c|b}a}`}`}`~a~a~b~b~b~a~a~`}`}a}a~cdgghhhhhfca__^]]\\[ZZZ\\]]\\[YXVRMHECBDCDEFEA;3-+,.1442/..0257:=;9=GHHIJQSVXYZ\\\\\\^`bdghhhiijklmnooppqqrtvwxxxxyz{|}}}}~~}||{{|{zyyxwtqjdb_VPONLHDC@;;86?BD?=GD=@HLMMJDGJGGFCELKFMPKWX[agjhhrrgl~|qmghu~lhb_qkVJJNMNMJJNQRQQOF=@A?EFKMUY]\\adabis{}{zzzzzz{}~~~~~~}||zv|{|}}}}}}}~~~~~~~~~}}}}||||{{{{zzyxxvwvtmia^VI;/',05:@FEEXi``egiosutrmrrpqhbhjg`cgb`Z]_abbc^WSR[PCK>=C>8>HI[WIDECDCANTUZ~]}]}^|_|_}_}_}_}b}d}e}e|d{czcyaybydxgxhxhxgxgxhxlxnxmxlykykylylylykyjxiwhwgwgvgugtgshsisjrjrirhrisjsltmunumtkthtgugvox|y{}}|{{z{{{zywwvvvvw|xtyryrzrzrzrzqzpzqzqzsztzt{t{t{t{t{s{r|r{r{r{r{r{r{r{r{r{s{s{s{szszszszszszrzrzrzrzrzrzqzpzpzqzq{r{s|t|u|v|w}x}y}y}y}y}y}y~x}x}w}w}w}w|w|v|u|u|t|t{tztzuzv{w{w|x}y}x}x}w}v}u}t|s{szszszsztztzuzuzuzuzuzuzuytysyryqypxowownwnvpwrxtztzv{v{u{tzrypxoxnxnxoxqxrxryryryqyqyqyqyryryryrzszsysysxsysysysysyryqyqzqzqzqzqzqyryszt|u}wy{|}}}|||||||||||||||||{z{||||{{{{zzzzz{zzzzzyyyzzzzzyyyxxxxxyyyyyxxxxxwwwwwwwvutrrsssqprstuvvuttttuvvwwvvs{rzqzqzpypyoxnxmxlxkxkxjxjxlxlxmxmxlxkxjxjxkxjxkxkxkxkxlxlwmwmwlwlwlwmwmxmxmymynynymynynynymymymymylylykykykykylylymylylzkzkzkzjykylymymynzmzkyjziziziyhygxhxjxlxlxmxmylxkxkwkwkwjwkwkxkxkxkwkxkxkxlxlxlxkxjxkxlxlxlykykxkxjwjwjwkwkxkxlxnxnxoynynymymxlxlxlxnyoypyoyoyoynzlzjzhzgyfyeydydydzezezf{f{g{g{h{h{h{h{h{j{k|l|l|k|k|j}i}g}d}b}a}`}a}a}c~d~c}c}b}a}a}a}a}`}a}a~cdfghhhfeca_]]]\\\\[YYYYYZYVTQMKHDBACEGGGGFB;50.--/2441//02368;@=:>FJMOMRUXZ[]^_^`ceghijjjklmnooppqqqrstvwxxxyz{|}~~~~||{{|{zywwvsphcb`ZSQQOJGC@=;><BGGB?JI?>FKMKFEFECCCBEGEFQPJUUXcosjt{cj}|i_bkno^[[_pOKPQPPNNQRONMKEBCDCDFIKRW[Y_c`agpy~~|{{{zzz{{~~~~}}~~}{xzu{{|}}}}}}}~~~~~~~~~}}}|||||{{{{zzywwvwwurqgVD6.+,/6;<<GLJJXfZafjmmpsvw{|yvmeiffbegb_X[_aabb_ZWSYWHKD?FA9?EGZWLFJEJHFORTZ\\~]}^|^|^|]}]}^}b}g}g}e|d{czby`yaycxgxixixixhxixlxnxmxlylzlzlzlzlykyjxixhwhwhvgvgugththsisirhrgrhrirjsksltltkthtfteuhwsxz|||{{{{|||{zyxvuuuw|xsxqzrzrzqzqzpzpzqzrzszszs{t{t{s{r{q{q{q{q{q{q{q{r{r{r{s{t{t{t{tzszszrzrzrzrzrzrzrzrzqzpzpzpzpzp{q{q|r|s|t|u}w}x~x}y}y}x}w}w}w}w}w}w}v}u|t|t|t{tztztztzuzu{v{w|w}v}v}u}t|s|r{rzrzrzszsztzuzuzvzvzvzvzvzvytysyryqxpxpwowowowpxrxsytzu{v|u{tzrypxoxnwmwnwpwqwrxrxrxqwpwowpwqxrxryrzrzsysysyszsztztztzszszrzq{q{q{r{r{rzs{t|v~xy{|}}|||||||||||||||||||{{||||{{{{{zzzzzzzzzzzzyzzzzzyyyyyyyyyyyyyyyyyyxxwwwwvutrqqrssrpqrstuuuttuuuvvwwvvr{rzqzqzpypypyoxnxmxlxlxkxkxlxmxmxmxmxlxkxkxlxkxkxkxkxlxmxnxnwnwmwmwmxmxmxmylylzmzmzmznznznznzmzmzlzlzlylylykykylylymylylykzjzjzkykykylylzlzkzkyjyjyjykxkxkxjwiwjwkwkwkwjwjwjwiwiwhwiwiwjwkwlwlxkxkxkxkxkxkxjxjxkxkxkxjxjxjxjxjwjwjwjxkxkxmxmxmxlylykykykxmxmynyozqzpzoznzkzizgzezfyfyeyeyeyezezdze{e{f{f{f|g{g{g{g{h{j|j|j|k}k}j~h~f~d}b}b}a}c}c}e}f~e}e}d}c}c}c}c}c}b}b~cdeeffdca`_^]\\\\\\\\[ZYWWUSOLIHECBCDFHGFGGFA<40..//022211234567;@?<?ELNPOSVZ\\]^__`diihikllmmnopppqqqqrsstvwxyyz{|}~~}{zz{zyxwvurogbb_\\WQOLIF>;<<CEFIHA?JLA<CGKHACB???@@BCEKVMNTSUgwy`keTV]^XSTROYlg^azgbkZTRTRRUSNMMLHHHHGGHIKQVYX^ea`dku~~~~}{{{{zyyzz}~|{{{~{~ytxsy{|~~~}}}~~~~~~~~~~}}|||||{{{{zzyxwwwwwvssgQ<-(+47>DC>BD@AEPa^bcdbhpvx|}}}{ncbdcgfdbZ\\_aa``_]Z[TWJHGCJE>BCCVXQKNIPNJOQTY\\~]}^}^}]|]|^}_}d}i}h}f|d{bz`y_y`ycxgxiyjyjyjykylymxmylzm{m{m{mzlzkyjxixhwhvhvhuhugugtgtgsgsgrgrgrgrgrhrisitithtftfuevkwxxz|||{{||}}}}}{xvuttvxwryqzqzqzqzqzqzpzpzqzqzqzrzrzrzqzpzpzpzpzpzqzqzrzr{s{t{u{u{u{t{s{rzrzrzrzqzqzrzrzrzrzrzrzqzpzpzp{p{o{p{q{r{t{u{u{v|v|u|t|t|t|t|t|t{s{s{r{s{sztzszszsztztztzt{t{t|t{s{s{r{rzrzrzrzsztzt{u{u{v{v{v{v{vzvztysyryqxqxpwpwpwpxqyrysysyszt{t{szsyqxoxnwnwnvovpwqwrwrwqwpwowowoxpxpyqzrzryryryryszsztzs{s{s{r{q{q|r|r|r|s|t}u~wyz{|||||||||{{|}}}}}}}}|||{{||{{{{||{{{{{{zzzzzzzzzzzzyyzzzzzzzzzzzzzzzzzyyxxwwusqpprsssrpprstutuuuvvvvwwwwoyozozoyoyoyoyoynynymylylylxmxmxnxnxmxlxkxkxlxkxkxkxkxlxnxnxnxnxnxnxnxnxnxmxlykykylzmzmznznzmzmzlzlzlzlylylykykylxlxmxmxlylylykykzkzlzmzmzlzkzkykyjyiyixixiwhwiwivjwiwiwiwiwiwhwgxhxhxixkxlxmxlwlwlwkwkwjwiwiwhwiwjxjxjxjxjxixixixjxjxjxkxlxkxlxkxjxjyjykylylynzozozoznzjzhzfzezezezfyfyfyeze{d{d{d|d|d|d|e|f{f{f{g{f|g|h}i}h}h}h~g~e~c}c}c}b}c}d}f}g}f}f}e}c~d~c~d~d~c~b~aacddcb`__^]]]\\\\\\[XVRRKCAACCCCDDEFFFECBA=81.-/00001212446778:@BACELOQRUW[^^^`cegjjjjklnnopqqqqqqqqrstuvwyzz{|}~~|{{zzyxwvutqnfa_XTRKGD@<9::=DHIKI@=ELD;@CGF<??::<??ABFJQLRTTUhtp\\]nkSFBIMPNKJLWaceb]`h|aTUXVWXUQPPOLLNMJHMKJRVYY_icaado}~~|{{zzzyyyz|~~{zxz{yzxpvrxz{}~~~~~~~~~~~~~~~~~~~~}|||{{{{{{{zyyxwwxwwvrrdR9/+-5?EJMCCCCC@ET[^^^`hqwy||{||sidcceeef[\\^``_]\\]`^TRKFEIOIFFDBRWSWOLTRIPOUZ\\~^~_}^}^}^}`~c~g~j~i}g|d{bz`y_y`ycxfyhyjyjykylymymymzm{n|n|n{m{lzjyixhwhvhvhuhuhugugtgtftfsfsfrgrgrgrgrhsfsftftetetfuhvmwxxz||||||}~~~}zwvttuvxwryszqzqzqzpzpzozozozozpzqzqypyoyoyoyozpzpzqzrzr{s|t|u|u|u{t{s{rzrzrzrzrzq{r{s{s{s{s{s{s{s{rzqzpzozozoypyqysysytzuztzszszrzrzrzqyrzqzqzrzszszszszszrzrzszszszszrzrzrzrzrzqzrzrzsztzt{u{u|v|v|v|v|v{vztzsyryryqxqxpxpxqyqyrysyryryryszsyrxrxqxpwownvovpwqwrxrxrxqwpwpwoxoxoyoypyqyryryryrzszszs{s{s{r{q|q}r}s}s}s}u~vxz{|||||{{{{{{{{{{{{{{{{|||||{{{{{|||||||{{zzzzzzzzzzzyyyyz{{{{{{{zz{{{{{{{zyxwvtrpooqrssrqqqrsttuvvvvvvwwxxlylzmynyoyoyoyoynyoyoynynynxnxnxnxnxnxmxlxlxlxkxlxkxkxlxmxnxoxoxoyoyoyoynxmxkxkyjykylzlzmzn{mzmzlzlzlylylylylylxlxmxmxmxmymymymymzmznznznznznzmylxlxkxjxjxiwiwiwiwiwiwhwhwhwhxhxgxhxixjylymynxnxmxlxkxjwiwhwhwgwhwixjxjxjxjxixixixjxjyjyjykyjyjxixixiyjykykylzmzl{l{l{k{g{e{d{e{e{e{fzfzfzeze{d{d{c|c|c|d|e|e{e{e{e|e|d}e}e}d~d~ddde~e~e~d~c~d~e~e~e~d~d~ddeeecba``aa`^]\\]^^^^]]\\ZSMFC@<>?CDEFGGHHGEA?=<;60--/21/./135678999;@DDEGNQRSWY\\]]^dijihikkmnopqrsrrrrrqqstuvwxz{{|}~~~~}||{zzyxwutqnh_YTIB><<;86568=DIKMI?<AHC<@@DD8;;6767<?BFGMMTSOKOY]ZVUPIA<@EOOLJJKRUY\\`pc`ZWZ[ZZ[XUTUSRQSRMKQMNSVY\\bnga``gu{~|{{zzzyyyy{}~}{xx}xwwovoxx~{}~~~~~~~~~~~~~~~~~~~}|||{{{{{{{zyxwwwwwwuod<A;043-6>AHHEEJMKELXZ[\\^grxy{{{{yridb``aei^]^`^]ZY[][LHCBEKPLKKF@OWW]RP\\RHRSX\\_~`~`}`}`}a~dgklj~g}d|b{azazbycxfyhyiyjyjykymynzn{n|n|n|n|m{kzixhwgwgvgvguhuhvhuhugugtftesesfrgrfrgrgsfsftftftfteueuhupvyy{||||||~yio{|xvtsttvrxqzqzqzqzpzpzoznznznynynyoynynynynynynyozpzqzrzs{t|u|u{t{s{r{szszszszs{s{s{s{t{t{t{t{s{s{rzrzqzpzpzpypxpxqyryryryqyqyqyqypypypypyqyqyrzrzrzrzrzrzrzrzryryryrxrxrxrxryryqyrzrzszt{u{u|u|v}v}v}v}v|v{u{tzszszryryqxqyrzrzszsyryrxqxrxrxrxrxrxqwpwowpwqxryszszsysyrxqxpxpxoyoyoyoxpxpxpypyqzqzq{r|r|r{q|q}r}s~t~t~vwy{||{{{{zyyyyyz{{z{{zz{{|||||{{{{{{{{{{{{{{zzzzzzzzzzyyyyyz{{{|||{{{{||||||{zxwurponopqrrrqqpqrstuuvvvvwwwwwjxkylylymynynynynyoyoyoynynxnxoxnxnxnxnxmxlxlxlxkxkxkxkxlxmxnxnxoyoyoynymylxjxjxjxkylymymynymymymymymymymymylylxlxlxmxnxnynymymynzozozozozozoznymxmxlxkxkxjxixiwhwgwgwgwgwhwhxhxhxixixjykzlzmymylykyjyixiwiwhwiwiwixjxjxjxjxixixhxhxhyiyiyjyiyiyiyjyjykylymylzlzl{k{j{h{g{e{d{f{f{f{fzfzfzeze{d{d{c|c|c|d|e|f{f{f{e|e|e}e}d~d~d~deef~f~f~e~c~c~ccbbbbcdcba`_^^__^\\[\\]]]\\\\[YUME?;;:>DDGHKKKKJJGB?<:984.-./11.-/14689::;<>AGGIJPSTUYY[]^ckkjhghjmnopqrstsrrrqqrttuwxyz{|}~~~}||{yyyxvroie^SKF=5213543457;CIKLI@==BB=?>BA68969;?BCBB@JMOREDDRYVQIBHD@@FSSOLIGKSZ\\aa][W[][\\\\][XXXWVWXUOQTQRTUX^dqkca]ajsx|~|{{zzzyyyyz{}~~{xxxvwqwpxv}x|~~~~~~~~~~~~~~~~~~}|||{{{{{{{zyxwwwwwwukG/-2.49537:<BEEHRUQPSWX[_hqwyzzxwtmc[ZZ[^ag^]]_^\\YVUVR@9<AFIMJNPJCPVV^SR_MCTUY_bb~c~b~c~dgjmmjg}e|d{dzdzdyeyeyfygyhyizkzmzn{o|o|o|n|m|l{kzixgwfvfvfuguhuiuiuhuhuhugtftfsfsgrgrgshsgsgsgtgtgufueufuivqw{y{{||||~zblz}xvtsttv~wrxozpzpzpzpzoznznznynymymylylymymynynynzozpzpzqzrzs{t{s{r{r{s{t{t{t{s{r{r{s{t{t{t{s{s{s{szszrzrzrzrzryqyryryryqyqyqyqyqyryryryqyqyqyqzrzrzrzrzrzrzrzqyqyryrxsxsxryryqyqyrzrzs{t{u|u|u|u}v}v}v}v}u|u|t{t{t{t{szsyryrzqzrzryryrxqxqxrxsxsxsxrwqwpwqxryszt{t{t{tzszsyryqyqypyoyoxnxnxnxoypzpzq{r|r{r{q{q|r}s~tuvxz|||{{{{zzyyyyzzzzzzzz{{|||||||||{{{zzzzzzzzzzzzzzzzyyyyyyyzzz{{{{{{{||||||{{yvsqooopqrqqqpqppprstuuuuuvvwwwkxkxjxkxkxlxmxmxlxmxnxoxoynynyoyoyoyoyoynxmxmxlxkwkwjwjwkwlwmwmxmxnynymzlykyjxkxkylymymymynynznznznznznzmymylylxlxlxlylymzmzmzmzozpzpzpzp{pzpzoznynymylykyjyixixhwhwhwhwiwiwjxjxkxlxkykyjzkzkykykyjyjyiyiyjyjykxjxjxkxkxjyiyiyiyiyiyiyiyiyjyjyiyiyjzkzlzmznzmzlzl{k{i{h{g{f{e{f{g{g{g{f{f{e{e{e{e{e|e|e|d|d|d{e{e{f|f|e}e}e~e~e~eefffedcb~b~ba`abbba`_^]]]]^]]\\]]\\\\YUSOJA;99;>CHIKLPOMKJIEAA>9763/-.///..0258:<=>@@CFJKLNSVWTYY]adgjihhhijlnoppruutrqppqrttvwxz{|}}~|{{xwyywtmcZTMD=:620123334679@JKKHC@<=><==@>5676>KRNJGE>TnhjVEERTQMEGOIFEJUSNMMIKT\\XPWYYZ]_^``_][[[ZZ[\\XRVVTVTSX^esngd_^dlqv{~~}|{zzzzzyxyz|}}}~|zy~yuyqxqxt|w~{}~~~~~~~~~~~~~~~}|||{{{{{{{zyxwwwvvvumO+,,+)7E35788:@EHLTWSTV\\aiqvwyyvtogYMOUYZ[b[[\\]^[VRLID638AHGHFMTOCLRUYNQ]D?RPX`ceee~fhjknmkg~e}e|f{fzfzeyeyeyfygzgzizl{n{o|o|o|o|m{kzjyhxfwdvdveufuhuhuiviviuhuhugtfsgsgrhrhsishshshtgugugugufugujvpw{yz{|||~~{||xvttstuvxwoyozozpzpzpzpzozoyoyoyoynynynynynynynznzozozpypyqzrzqzqzrzr{s{s{s{r{r{r{r{s{s{s{s{s{s{s{t{s{szszszszrzrzrzrzrzqzqzryrysysysysysyryrzrzrzrzrzrzrzrzryqyqyqyqyryqyqzpzpyqzrzs{t|u|t|t}t}u}u}u}t|t|u|u|u|u|u|t{tzszrzrzrzryryryqxqxrxrxsxsxsxrxqxryszt{t|t|u|u{t{tzszrzrzpzozoynxmxmxmynyozozp{qzryrzr{r{r~stwy{|||{{{{{zzzzzzzzzzzzz{{|}}}}}}}||{{{{{{{{{{{{zzzzzzyyyxxyyyzzzzzzzz{|}}|||}}zvtrppqrsssrqpqopprsttttttuvwxxkxkxjxjxkxkxlxlxlxlxmxnxnyoyoyoyoypypypyoynxlxlxkwjwjwjwkwkwkwkwlwlxlykykxkxkxlylymymymynymynznznznznynymylylykykykykykzlzlymymynzozpzpzpzp{p{pzozoznzmzlzkyiyhxhwhwixhxixjxkxlxmxmymykyjyjyjyjyizjziziyiyjyjykxkxkykyjyiyiyiyjyiyiyiyjzjzkzjzjzkzl{m{n{p{r{q{q{m{j{h{g{g{f{f{ezg{i{h{g{f{f{f|f|f{f{f{e|d|c|c|d|e|e}e}d}d~e~e~e~d~e~efdcbcb~b~a```aa`_^]\\[[]]]^]]\\\\[ZRGB>:7779=AEHJMOQMKJJJFCBC<752/.-.////1369;>?ACEIKMNOQUWXUZ[^ceghgfghhjlnppqrttsrqppprtuvxy{||~~}|{zuuwvtn`OD?<964432123346886=MMJHDC=;;;;;;95679CPOMW`NE]lXNLJFJPMOYYQKIRQRQNMPNJSZULRXXZ`dfed_[\\[]\\]^][XXXWVUSX]etrkhddehknx|~}}|{zzzyyxyz|}}|~|{z|ztyryrxt{v|y{|}}~~~~~~}~~~~~~~~~}|||{{{{{{zyxxwwwvvvunZ8,+,149;348;54>?<?JSTUYcipuvwwtrlfPAKRXWQW[YVV\\XQJA:6578;GGDAHRSCHNRTHQS:AKMU]ceffghilnmjge~f}g|h{fzfzeyeyeyezfzhzj{l{n|o|p|o|m{kzhyfxewdvdvdvfuhuhuiviviviviuhugtgtgsgshshshsisishuhuhvhvgufuhukwty~yz|||}}~|~{xvtttttuwuxqypzqzqzqzpzpzpzpzpzpzpzozozozozozozozozoyoypypzqzqzqzqzqzqzqzqzp{p{p{p{q{r{r{rzrzrzs{t{tzszszszszszszszrzqzqzqzqzrzrzszszszszszrzqzrzrzrzrzrzrzqzpzpzqzqzqzqzpzpzpyqzrzszt{t|t}t}t}t|t|t|t|t|t}u}v}v}v}u|u{tzszrzryqyryryryryrxryrysysyryryrzszt{t{t|u|u|t{t{s{szszrzpynymxlxlxmynynyozozqyryrzq{q{qrtvy{{{{{{{{{{{{{{{{{zzzyz{{|}}}}}}}||{{{{{|||||{{{zzzzzyyxxxxxyyyyyyyz{|}}}~~}zvsqpqrstttrrqppopqstsssttuvwxyjxjxiwiwjwjwkwkwkwkwlxmxnyoyoyoyoypzqypyoynxlxkxjwkwkwjwjwjwjwjwjwkxkxjxjxkxlxlylymynynynynynynznznynymylykxjyjyjyjyjykykylylylymymynynyozp{q{pzozoznzmzlzkziyixiwiwjxixixjxlymynyoyoymykyjyiyiyhzizizizjzlzlzmzlykykyjyjykykzkzkzkzkzkzjzk{k{k{j{j{k|l|k|j|i|h{i{h{h{h{h{g{f{fzg{i|h|g|f|g|g|h|i{i{h{g|f|e|c|c|c}c}c}c}c~d~d~d~c~c~ccba`aa~c~ba`__^]\\[[ZZZ]^__^\\[YRNF=96657:>ADFHJLMNLIHIKIGEHC9210/.-./01358;>ACEHIMPQQSTWZ\\[]^cffeddefghhhiiklorsrpoooprtuwyy{}}~|{zwpnqoi^O?643222223323458::7;JKHIHE>:99899657:>CBCMUZQTu{l^LJGO_TaQDNSghVNROOQXdj_TSUWZZevtns_^^^]]__`_]\\[[ZXVX\\fvvoljjjjlnuz~~}{zzzyxxxy{}|u~~}||~}}}|}|w{szryrxsyu{x{|}}~~~~~~}}}~~~~~~~}|||{{{zzzzyxxwvvvvutrjH2.--/22;1/=C?9;96>LTX]flqttutqoheOFNPTSNPROLNXPF>84248:6@H=:@MSBDKNNCHD:F@GPX_eghhhglnnifeg~h}i|h{gzfzeydydzezf{i{i|l|n|o|n{lzkzhyfxewdvdvdvfuhuhuhviviviviviviuhtgsgsgshshsisiththuhvhvhvguguivlwtxyz|||{{{zyvtttttttv{xsyqzqzrzrzqzqzqzqzqzqzqzpzqzqzqzqzqzpzpzoyoypypzpzqzrzqzqzpzpzpypzoznznznzozpzqzqzqzrzsztztzszsztzt{t{s{r{qzqzqzqzrzrzsztztztzszrzrzrzqzqzqzqzqzpzpzpzpypzozozozoypyqyrzszs{t|s|s}s|s|r|r|r|r|t|u}u}v}v}u|t|t{tzszsyryryryryryryryryryryryrzrzrzs{s{s{s|t{t{s{szszrzqzoynxlxlwlxmynynynxnxpxpyqyq{q|pqsvy{||{{{{{{{{{{{{{{zzzzzz{{||}}}}|||{{{{{|||||{{{{zzzzyyxxxxxyyyyyyz|}~|vsrqqqstuuttsrqqpqrstttstuvwyzzjxixhwiwiwjwjwjwjwjwlxlxmymymynynyoyoyoynxlxkxkxjwkwkwkwkwkwkwkwjwkxkxjxjxkxlxmymymynynynynymymymymylylykxkxjyjyjyjyjyjyjxjxjxjxkxkxlxlymynzozozoznzmzlzlzkyjxjxiwjwixixixjxkymynyoynymylykyjyjyizizizjzjzl{m{m{lzkzjzjzkylylzmzlzlzlzlzlzk{k{j{g{f|f|f|d|c|c{b{f{f{f{f{f{f{e{f{h{i|i|h|g|h|i|j|k|j|i|h|g|f|d|c|b}b}b~b~b~c~d~c~b~b~ba```ab~c~ca_^]\\[ZZZY[\\^^^\\WUQLB<976567:<?BDEFGGHIKKJJMPICDB:10/.../023579=ADGILNPSTTVWZ]^^`eeeededefgggfgghjloqponooqrtvxyz{}~~}{yxrgbfd[NA721012344554468:<=:;FJFHJD=;;:98767<ACDIUYVOGSoupdSOK[wZ>APak{_U_[PRiymXXeyaSX`bis_db_\\^_`bba`_^][XX\\hxysqommnorwz}~~}{zzyxxxyz|n~xvtqp~q~s}v}t|q{qzqxqwsxtzw}z|}~~~~~~~}}}~~~~~~~}|||{{{zzzzyxxwvvvvutrmK30.-+.01883@HDAA@@GT^finpqqqplicbONRLMQKIKHEFOF:55645985;F=:<GPCDKMKDB:EC=EKS[bdeedejlkgee~f~h}j|i{hzgzfydydzezfzg{g|j|l|m{m{lzkziygxewdvdvdvfuhuhuhvhviwjwjwjwjvhuhtgsgsgshshshshthuhvhvhvhvgvgvivlvywy{{{zxwvusrrrstttuwvyrzrzqzqzqzqzqzrzrzrzrzrzszszszszrzqzqypypzpzq{r{s{t{t{t{s{rzrzryqzpzoznznznzozozozqzqzrzrzszszszszr{qzqzpzpzpzqzqzqzrzrzszszrzrzrzqzqzqzqzqzpzpzpzozoyoyozozoyoypyqyryrzszs{s|s|r{q{pzpzpzpzqzr{s{t|u|t|t|t{s{szsysyryryryryqyqyqyqyryryryrzrzr{r{r{s{s{szszryqyoynymxlxlwlwmxnyoyoyoyoyqzrzqzq|q~qrtvy{||{{{{{{{{{{{{{{zzzzzzz{{{|}}|||{{{{{{||||||||{{zzyyyyxxxxyzzzzz{}~xonopqrstuttssrrqqrstttttttuwxyzkxkxjwixjxkxkxkwkwkwlxlxlylylylymymynymylxlxlxkxjwkwlwlwlwlwlwlwkwkxkxjxjxkxkxlymymymynynymymylykykyjyjyjxkxkykykykykykykyjxjwjwiwjwjxjykykylzmymymylykzkyjyixixhwiwhxhxgxhxiykykylylykykyjyjyjyjzkzlzkzlzn{n{m{lzkzkzlzmzmzm{m{l{l{k{k{jzi{h{g{d{b{b{b{c{c{d{d{e{e{d{e{e{e{e{f{h|i}i}h}g}h}i}j}j}i}h}h}g}f}e}d}c~c~b~b~b~b~bba```____``~`_]]\\[ZZZ[ZZZZXUOHD@=63143579;=?ACCEEDDEHHFFJPJC=;61/.../013469<?BGJLOQSVWWYZ\\_aacheefgfeeeffghiihijmonnprrstuvwyz|~}{xvsk^WZXMA:53212367887658<>>>?>EJFFHA<>=<<;98;BGGFNVZfgQRVVQUcbLGcz\\ABMU_i^Ydi_jmcna\\\\Zlz_TVWZZ[b`]Z]`bfdfjeb`^Z[^hw{wvspppsvxz}}~~}{zyxxxyz|o~sqnki~j~k~m~l}l{nzowovqxsyv|y{}~~~~~~~}}~~~~~~~}|||{{{zzzzzyxwvvvvutrmQ5...+-,02754:AEGGCDR^gjnmmmmkhbZ[MTQEIQHBHHB=C<448;778479CA@@GMDHMMKD@=K;CEIRZ\\]\\^`afgfdd~d~e}g}i}i|h{g{gzezdzfzgzfzf{g|i{k{lzkzkyjyhxgwdvdvevfuhuhuhvhwiwjwjwjwjwivhuhtgtgtgsgsgshthuiviwiwhwhwhvhvjvrv}xzzzxvtrpoopqrsstuwzxsyqzpzpzpzpzpzpzqzqzr{r{s{t{t{t{szrzryqzqzr{s{t|u|u|u|u|t{t{s{szqzpzoznznznznynyozozpzpzpzqzqzrzrzqzpzozozozozpzpzpzpzpzqzqzqzqzqzqzqzqzqzrzqzqzpzpzpypypypypypyqyqyqyqyqzqzr{r{qzpzpzoyoypypyqyqyrzs{s{s{s{s{s{szryqyqyqyqyqyqypypypyqyqyryszs{r{r{s{s{s{szqyoynymxlxlxlwmwnxoyqzqzq{q{s}s|r|r}rssuwz{||||{{{{{{{{{{{{{zzzzzzzzz{||||{{{{{{{|||}}}||{zyyyyyyxxxxyz{{||}~slkmpsttstsrqpqqqrrstttsrstuvwwwlwkxlxkxkxlxlxlxlxlxmxmxlylylykylymymylylylxlxlxkxkxlxmxmxmxmxlxlxkxkxjxjxkxkykylymymynynymymylykykyjyjyjxkxkylylylylylylykykxkxjxjyjyjyjyjyjykykykykyjyiyhyhxhxhxhxgxexexfxhyhyiyjyjyjyjyiyiyizj{l{l{m{m{o{n{l{kzkzlzn{n{m{l{k{k{j{j{h{f{e{f{e{fzfzfzf{fzfzfzgzfzezezezezeze{f|f|g}g}g}g}h}i}h}h}g}g~f~f~e~d~c~c~b~b~bbbaa`^^^]]]]^^^]\\\\[ZZZZXUPLIE@:546675245779<=@ABCDCCBBCCCBDDFB=830/.../12468;>ADHLNPRUWXY[]^`bcddegiifdeeffghhhhiikmnoqstuuuuvxz}}|yupldZNLKC<865543589;<;:9;@A@ACCEIGB@<<??>>??>AHNNNU[]mr^WSc^p~qMIQQMBEEFCMOLSZiznZd`\\^^^_]YZXUUY][YX\\bdgefqmba`]\\_gpvyyurqruwy{|}}~}|{zyxyz{|{~qroomjik~l}m{mzmxnwowqyt{x~{|}~~~~~~~~~~~~~~~}}~~~~~~~}|||{{{zzzzzyxwvvvutsrpeC./000013776:@=23??EMQonjcjeefWPPIYN@GTD=IC:99746<@;=956:?CHFEIENPNICAGF?CGJQVTSTVZ_abbb~c~d}d}f}h|i|h|h{hzfzezgzgzezeze{h{izizjykykyjxgwevevevfuhuhvhvhwiwjxkxkxkxjwiviuhuhugtgtgtgthuiviwiwiwhwhwiviumvrxyyyywuromlmnopqrstvwuyqzpzpzozozozozozozpzr{s{s{t{tztzszszrzq{r{s|t|u}v}v}u}u|t|s|r{q{o{nznzmznznynynzozozpzpzpzpzqzqzpzpyozozozozoznzozpzpzpzqzqzqzqzqzqzqzqzrzrzrzqzqzpyqyqyqyqyqyqyqypypypyqzqzqzpzpzpzozoypypyqyqyqzqzqzq{r{r{s{rzrzqyqyqyqyqyqypypypypypyqyrzs{r|r|s|s|s|s{rzpyoynymxlxmwnwoxpyq{r{s|s}rr~s}ssstuwz{||||||||||||{{{{{zzzzzyyyzz{{{{{{zz{{{{{||}}|{{zyyyyyyyyyyz{|}~~yniilnrtvurpnnnopqqrssrqpprtuvussnxmymylymynynynymynynynxmylylykylylylylymymxmxmxmxlxlxmxmxmxlxlxkxkxkxjxjxjxkxkykylymymymymylykykykyjyjykxlxlymzmzmzmzm{m{mzlzlylykyjyjyiyhyiyiyiyiyhyhyhyhyhyiyhyhygydydxexfygygygyhyhyhygygyhzh{j{j{i{i{j{i{g{fzfzgzh{i|h|h|h|h|g|g|f|d{c{d{d{ezfzfzgzhzhzhzhzhzhzgzfzfzezd{e|e|e}e}e}e}f~f~f~f~e~c~d~d~e~d~c~b~b~abaa`_^\\\\\\[[[[[[[[[\\\\[[ZXRG?9643555666534579;=>ACCCCCCB@??>?@BBA<61//../02468:>BEHJLOQSUWYZ\\^_aceecdjmkecdefggfeffggikmqtwxxwvuuw{~}{vpjd]VJA?<9788:946<=???=<?CDABEFGIF?<:=ABABCCCFKOPTVVWamZUhoblrZIMNGEDFFBDKLHJMWb\\_i`^_inj__bb^\\]]XVVboefmhopefme^adiow{xutuwy{|}}}~}|{zzz{|||~pqnnmlmnpp}m|nynxoxpxs{w}z|}~~~~~~~~~~~~~~~~~}}~~~~~~~}|||{{{zzzzzyxwvvvutsstmK125555559:9:@DB91BABGg_cUa]^`QIIEWH<HQ?7?:346658?E?@>:7<?FNPJHFTRNGCDJEBIJKOPNLNQU[~^~__~`~`}a}b}c|e|g|h|h{h{fzfzhzgzfzezezfzfzgzhyiyjyjxiwfvevfvguhuhvhwhwiwkxlxmxmxlxkxjwiwivhuhuhuhuiujvjvjwiwiwhwivjvjulvqwvxxvtqnlkklmopqrtuvzxrzp{p{o{o{nzmzmzmznzozp{r{sztzuztzszr{q{q{r|s|t}u~u~u}t|s|r{q{p{oznzmzmznznznznznzozozozpzpzpzpzpzpzozozozozozozozpzpzpzpzpzozozpzpzqzqzqzrzrzrzrzrzrzrzrzrzrzrzqyqyqypypypyoypypzpzpzozpzpyqyqyqzqzpzpzp{q{r{rzrzqzrzrzrzrzqzqypyoyoypypzq{r{s|s|t}t}t}t|t{s{qzpzoynxnxoxpyqzs{t}t}t}sssrsstvxz{{|||||||||||||{{{{zzzzyyyyzz{{{{{zzzyyzz{{||{{{zzzzzzzzzzz{|}~}sjghiknpqrrpnmmnppqrrrrrqprtuvusroymzmylylylymymznznznynymylylylymylylylymymynxmxlxlxlxlxmxmxlxkxkxkxkxjxixixjxjyjyjykykylylykykykykykykylylykzlzmzm{m{m{m{mzmzmzlzlzkzjziziyjyjyiyiyiyizjzjzjzkzjzhzgzezdyeyfygygygygygyfyfyeyfzg{h{h{f{e{f{e{c{bzczcze{e|f|f|f|f|f|f|e|e{d{e{d{ezfzgzhzizi{i{j{i{i{h{gzezdzc{d|c|c}c}b}c}d}e~e~e~c~b~b~a~b~b~a~aa``a`_^][\\\\\\]]\\\\\\\\]]]]\\[YQH<52//39;;97554868:<>?BDEDDDCB@>>@BCBA>931//./01358;>BFILKMOQSUWY[]_`bcecaelomgccdfghggggiiiknsvyyyxvvuwz~|yqic^XSH=8768:;==89>?ABB@@BDD@?@@@A@<98=BCBCEFFIKNOPNO\\ptPHLRVSK==GIGGEIKFIMOIKKHT\\thY^afjja_cknda`[^_cebbjhjtlfzsdcbbhszywwxz|}~~~~~}||{{||}}~pokkklmooon~o{oyoypxryu|x~z|~~~~~~~~~~~~~~~~~~~~~~~~~}|||{{{{zzzzyxwvvuttstuqQ54679::9;;=;<?AII8<:D\\OTGVSVYLEEBPC9FH:264.13435<CABD<9BBHUZQFKZRMHEGHDIRMJKLKIJNSX~[~]~]~]~]}^}_|`|b|e|g|h{h{h{g{i{h{g{f{fzfzdzezeygyiyjyhxgwfvfvgwhwhvhwhwiwkxmxoyoymykyjxjxiwivhvhuhuiujujvjvjwiwiwiviuhuiulvqw|vv{t~romkkkloopqrtuwtzqzp{o{o{oznznznzmznzozpzrzszt{t{r{r{q{q{q{r|s|s}s}r|q|p{o{o{nzmzmzmzmznznznznznzozozozozpzpzpzpzpzpzpzpzpzpzpzpzpzpzqzqzqzpzozozozozozozpzqzr{r{r{r{s{s{s{s{szrzrzrzqzpzpypypypypzpzpzpzpzqyqyqzpzpzpzp{p{q{rzrzr{s{s{s{s{rzqypyoyoypypzpzq{r{s|t}u}u}t}t|t|r|p{oznyoypypxqyr{s}t~s~sr~rrrstvxz{{{zzzzz{{zz{||||{zzzzzyyyyzzz{{{zzzzzzyyzz{{{{{{{{{{{||||||}}~{tmkjkmopqrsrrrqrstuvvutsssuvwwvtsnylykykykxkxlylylymzlylylykyjykzlzlzlylylykykykykykylxlylylykykykykykyjyhygyhyhyhyhyhyiyjyjyjyjykylylylylylykzkzkzkzkzlzlzlzlzlzlzlzlzkzjyjykykykykzkzk{k{k{k{k{k{j{hzezeyfygyhyiyiyhyhygygyfyfzf{h{g{f{f{f{e{d{czdzdzf{f|g|g|g|g|g|h|g|g|f|f{e{d{e{f{g{h{i|i|j|j|i|h|f|e{d{d|e|d|d}d}d}d}d}e~e~d~d~b~c~b~b~b~`~_```a`_]\\\\]]_``_^____^]\\ZUH>511115<?=965448789<>@BDFFFEDC@@ABDED?:631///01247:=@FIMPMNNPRTWXZ\\_`abda_fnqojfeefgikllklmlmquxxyzywwxz|~~~}zumc\\YULD<659<?>=@?;>BDFEBBDDB>98757989;?BCCDEFFHKLLKLHLUKG@@?XO=:@DEGIHKPP]\\SKLNMY[e\\VZ^ablqkggffda^ckhanjabe{ycopga_`emrstwy|~~~~~}|}}~xnjggfghjkkop}o{ozoypxszv}x{}~~~~~~~~~~~~~~~~~~~~~~~~}|||{{{{zzzyyxwvuuutsssrY=667::??;=DB8::ELDC;ESLHANKOSKFCBNB7@>5110./12137<BBD=;GGKYaWHS^QNHGJHFQWLGJNKHJNRW~Z~[~[~[~[}\\}^}_|`|b|c|f|h|h|h{i{h{h{g{g{ezdzczdyfygyhyhxgwgwfxgxgxhxhwhwhwjxmypzpzmzkzjyjxjwivhvhvhuhuiuiuivivivjviviuhuguhukuvvuusyqnlkjkmmnoqrtvxyqzp{q{q{pzpzpzoznznzozpzpzqzrzq{p{pzpzpzpzq{q{q{p{p{o{n{n{mzmzmzmzmzmznznznznznznznznznzozozpzpzpzpzpzqzqzqzpzpzpzqzqzrzrzqzqzpzpzozozozozo{p{p{p|q|r|s|s{s{szszrzqzqzqzqzqyqyqyqyqzp{q{q{qzqzqzp{pzozozp{p{q{r{r{s{s{s{s{rzqypypzpzpzpzpzpzq{r{t|t}t}s}s}s}r|p|o{ozoypypxpyq{r}r~r~r}qqqqrtvxyzzzyxyyyzzzzz{{{{{{{zzzyyyyzzzz{zzzzzzzzyyzz{{|||}}}}}}~~~~{yyz{{}}}|{|{{{{z|}~~}{|z{||{yxwlzjyjxjxjxkxlxkykylykykykyjyiyizjzjzjzjyjyjyjyiyiykykylykzkzkzjzjzkzjzizhzfzfzfyfyhyhyhyiyiyjyjyjykylylylykyjykyjyjyjzjzkzkylylylzlzkzkzjzjzkzlzlykzk{l{k|k|j|j|i|h{gzfzfzgzjzkyjyjzjzizizhzhzgzfzgzgzgzfze{e{d{c{d{e{f{g|h|h{i{i|i|h|h|g|f|f|e{d{d|d|e|f|g|h}i}h}h}g|e|d|e|e|f}f}f~f~f~f~f~e}f~edccccba`____^]\\]]_``aaa```a`^\\[WK=4310125;?=764457789;>@BCEGGEDC@@AABC@=8420/./13469<?DGJPVQNOPQTVXZ[]_`ab^_hppojhgggfhihfdjnnoruxxxyxwxy{}~~}}|ztl_USRF><679=BB@?@??DEFFCCDB@<6334568:=@CDDEEFFGJKHEDD@=HMC=>GIA>ACDGIHJO\\fZTJMPPWYYXUW[]arqhfhgeb^_bhcbljd_bllcgsn`_`cfhiouy|~~~~}}}~~ulheccddgjlnon|nznynxqzu}x{|}}}}}}}~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~}|||{{{{zzzyywvuuttsrsqtfK7258<@B@?DC:=@CC?D=LOLJEGILMLHCAOA544200/./001248<==<;FMNZb[IZ\\RPHILHLVUJBJOLJNQSX~Z~[~[~Z~[~\\}^}_}_|`{b{e|g|h|i|i{h{h{h{g{f{dzczdyeygygygygxgxgygxgxgxgxgwgwixlyozpzmzjyjyjyjxjwivhvhvhuhuiuiuhvivjvjvivhugtguiuqu~utsqyoljjjklmnpqsv|xrzp{p{p{p{pzpzpzozozozpzpzpzpzpzpzozozpzpzpzpzpzp{p{o{n{nzmzmzmzmznznznzozozozoznznznznznzozozozozozpzpzpzpzpzpzpzp{p{q{r{q{q{p{pzpzp{p{o{o{ozozo{p|p|q{r{szrzrzqzqzqzqzqzqzqzqyqyqzq{q{q{q{qzq{p{pzozozozp{p{q{r{r{s{s{s{r{rzrzqzqzqzpzpzpzp{q{r|s}s}s}s}r}q}p|p{pzpzpypxpypzq|r}r}r|qppqrtvwyyyyxxxxyzzzyz{{{{{{{{zyyyyyyzzzzzzyyzzzzyyyzz{||}~~~~~}spqppnnprtuvwxy{}izhyixixixjxjxixixhyiyiyhyhygygzgzhzhzhygygzgzgzhziyjykyjzjzjzkzlzkzjzizgzfzdzdyfygyhyhyhyhyiyiyjykylylylykykyjyiyhyhyhyiyjyjykylzkzkzkzkzkzlzmznymzm{m|l|k}j}h|h|h{gzgzgzhzjzlzmzmzm{l{l{k{j{i{h{h{gzgzfze{e{d{d{f{f{g{h|j|k{k{k|k|j|j}i}h|f|d|c|b|c|c|c|e}e}g}g}g}f|f|e|g|g}i}i}j~j~j~j~i~h~ffeeeeddca`__^]\\Z\\]_abcccbbcba^\\ZQC513212359;:54345678:<?@ABDFGGEDABA@=<:86421//02479<?BEHINXSQPQQTVWXY[]^_a]`joihikjihgiijijlopqsvwwxxxz{|~~~|{yytjZOLMG:=@=9?FHEDBCBGGGGECA><:6334578;@CEGGFDFGGJKE@?@>>HH<9:>@?ACBBEGGJO^[USJLSSTX]^XSTVYa][]_a`^XZ]_[[`^Z[~\\~_`~^~_jj^`~b~c~bbbgnvy|~}}}~~~|wpjd`__`begjkllm|m{myozs}w~z{|}}}}}}}}~~~~~~~~~~~~~~~~~}~~~~~~~~}|||{{{{{zyyxxwvuuttsrrprbG<=:5>CAGB?B@@CC@:EAOPMJGGHJMMLC@L?1//000011101246789:<DNQ[`[ObWWTMPOMQXRFDNRNOTV~W~Z~]~]~\\~[~\\~_~_}_}^|_{`{d|g|h|i|i{i{i{i{i{g{e{d{dzeyfyfygygygygzfzfyfyfyfxfxhxjymzozlzjykykykxkxjwivhvgvgugugvgvivjvkvjvhuguguftjtvttsrpnkjjkklmopruwsym{n|o{o{ozozpzpzpzpzozoznznzozozozozpzpzpzpzpzpzpzozoznznznznznzozozpzpzpzpzpzpzozozoznznznzozozoznzozozozozpzpzp{p{q{q{q{q{p{pzpzp{p{p{o{ozozozn{n{o{o{pzpzqzqzpzpzqzqzqzqzqyqzqzq{r{r{q{qzqzpzpzpzozozozo{p{q{r{r{s{r{rzrzrzrzrzqzpzpzpzp{q{r{r|s}s}s}r}q|q|r|r{r{qzpyoxnyo{p|q|q|p~poprtvxyyyyyxxyyzzzzz{{{{{{{zyxwwwxyyyzzzyyyyyyyxxyyyz{|}~~~|qlmopomllkllmmnopppppqstwy}fzfygyhxixjyjyiyiyhyhyiyiyhyhygzgzgzgzgygygzfzgzhzhyiyjyjzkzkzkzkzjzizgzfzezdzdyeyfyeyeyeyeyfygyhyiyjykykykyjyiyhyhyhyhyhyiyjyjyjzjzjzjzjzjzjzjzkzkzk{j|j|i|g|g|g|g{gzgzgzhzjzkzlzn{m{m|l|k|k|j|h|g|f{ezdzc{c{d{d{e{f{f{g{i{j|j|i|i|h|g}g}f|d|c|b|b|b|b|b|c}d}e}d}d}d|d|e}g}g~i~k~llkkjhfedcbbbba_^]]\\[ZY[]_bbbddccba_]\\UH:2133234467733345679;>AAABDFHHFEBCB>:8655431//1359=?ADDDCKWTRRSTVWWXXZ\\]`b^aklecfjjjihjjkjkmppqrtvwxwvy|~~}~}{ywyufULGFF=9HB>>GMJIFGFJJHFEC?98975678:<?CGIJIFCEJJKKC==?=;>>;<878;ABAACDEGKWSRRKMVUV]^]VOOPUW\\VWVYZZRUVVUV[WV~Z~Z}\\}]}\\}X~\\~`~^~`}c}b}a}a~`~bglpsx|{xxy{}|vrmieba`abdfgghij}k|mynyq|v}y{|}}}}}}}~~~~~~~~~~~~~~~~~~}~~~~~~~~}|||{{{{{zyyxxwvuuttsrrqpY;6=A>8AEAEC@=>CCA;EBOOMLJIIJLLKA:C:2000001222223455679:@KRZ]XV]QYWUTQRSUNCITTSTY~Z~[~]~_~_~_~^~_~a}a}_}_|`{a{c|f}h|i|i|i{j{j{i{g{e{d{dzezezfyfyfyfyfzezezdzdydyexfxhxjylzkykylylykxkxjwiwhvgvfvfvfvfvgvhvivivhuhuhuftesjsuttsrpnmmmnmnoprtwwxmzm{m{m{nznznzozozoznznznznzozozozp{q{q{q{q{q{q{q{p{p{o{ozozozozozozpzqzqzqzpzpzpzpzpzozoznznzmzmznzozozozozozozp{p{p{p{o{p{p{pzpzp{p{p{p{pzpzoznzn{o{o{ozpzqzqzqzqzqzqzpzozpzqzq{q{q{r{r{rzqzqzqzqzpzozoyoyozozpzq{r{rzrzrzrzrzrzqzpzpzpzp{p{q{r{s|r}r|s|r|r|s|r|r|q{oznzmynzn{o}oonopstwyzzzzyyyyyzzzzz{{{{{{zyxxwwwwxxxxyyyyxxxxxxxxxxyz{|~~xniiloponmkihhijklmlljgfefjlqtuvwwxz|~dzezfygyhyhyiyiyhyhyhyiyiyhxhyhzgzgzgzgygzfzfzgzhzhyiyizizizizhzgzgzfzezezezdzdydydydzczczbzbzczdzezfzgzgzhzhzgzfzfzfzfzgzgzgzgzg{g{g{g{h{h{h{h{gzgzhzg{g|g|g|h|h{h{i{h{h{h{jzizjzk{k{j|j|i|h|g|f|e{ezdzczb{b{c{d{d{e{e{f{g{f|e|e|d|d|d}d}c}c}b}a}a}a|a|a|a}b}c}b}a}b}b}c}e~dfghihgecaaa`^^_^^]\\\\[ZZYY[\\^_^_aba`_]ZXVJ<3224545545543345679;=BDEDDDGIIHFDBA=96545421/1359<@BDEDCBJTSRTTUWWXYXYZ]bc_biidbehiiihjkjfemnnooqsuuuwy|~~~~~~}zvuypbSLGCDA?AME?GOOOLJKMMJFEC=7799889;=@EHJLNMGADIIJKB<;;;;=:79878:?AABCCBEJRVSPMQWVX]XVRNNPXV_[XUVWYPPQTTTXV~W~Y~Z}]}]}Z|X|Y}]}`}`|b|a|`|a|b}a}c~dfhovuonquy~~{zwronlihggcbdffbbbef~h|jylyozs|vzz||}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}|||{{{{{zyyxxwvuuttsrrqoT4<:8;=@CIEED>=@DD>GEOKKNMJKJIGD;48432222223234434556789=DNY\\YYUS\\[[WSTPPKFSZWTY]~\\~\\~_~_~`~`~`~`~b~a~_}`}b|b|b|d}g|h|h|h{i{i{h{g{e{d{dzdzezezeyfyfyfyezezdzczdydxexfxgyhyiyjykykykxjxjwjwiwhwgvfvfvfvfvfvgvhvhuhuhtgtdsdsjsttuusrppqqppqrstuzwnzn{n{m{lzlzlzmzmzmzmzmzmzmzn{o{o|p|p|q|r|r|r|q|q|q|q{p{ozozozozozozozpzpzpzpzpzpzpzpzozozozozoznzozozpzpzpzozozo{o{o{p{o{p{p{pzpzp{p{p{pzpzpzoznzo{p{p{pzpzqzrzrzrzqzqzpzozozpzq{q{q{r{r{rzr{r{r{q{p{pzozoyozozozozpzpzpzpzqzrzrzrzqzqzq{p{p{pzpzq{q{q|q|r|r|r|r{q{p{pzoznynzn{m|mmnoquvxyzzzzzzzzz{{{{{{{{{{zyxxwwwwvwwwwxxyyyxxxxxxxxxyzz{|}~}vjgjilopnmmkjiijjkklmlkjihhikoqrpqrtvwy{|}~d{dzezfzfyfygyhyhyhyiyiyiyiyizhzhzgzgzgzfzfzfzfzfzgzgzfzf{e{e{f{e{dzdzczd{e{ezezezezdzczczbzbzbzbzbzbzczdzdzdzdzczdzczczczczczczd{d{e{e{e{e{e{d{czezezfzf{g{h{h{i{i{i{j{i{i{i{i{i{h{h{h{g{g{f{e{d{dzdzdzdzc{c{d{e{e{e{e{e{d{c|b}a}a}a}b~b~b}a}`}`}`}`}`}`}a~a~`~`~_~`}a}a}b~cdefedb`_]]aa`_^]^]]\\[ZYYXYY[[[[]]][YUPQJ:1025666654433345579;=ADGHFDEGIJIHEDA<865443200136;?BDFGIIIKPTUTUUWXXZYYZ_ff`adeccegghhhjkkjipnhhknqstuwy|~~}|}~}|wssum_TMGCEGGEKLIFKNOMKJIJJGDA;679:9:<<?DHKMMNNHACHHJJB<:899:97888:;>ABCCCBFJRVROOSWWXYSQNLORWWa\\XTVY]PLNTVUWW~W~X}Z}]|]|Z|X|Y|]|^|`{a{a{a{b{b|b}b}a}a~bhpnediou{|ztppmiklljjlgaeehe^[]`d~e|gzjxmypzt}vyz||||}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}|||{{{{{zyyxwwvuttssrsrpW;9?;5<BDJGDD><?EG>HGMGJSNJHE@<9523344343433245444556789;?IV\\YZQV]`\\UVSMMOO^ZUW^_\\~]~__ab`~`~a}`}_}b}b}`}b}c|e|f|f|f{g|g|g|e|d{d{dzdzdzdzezfzfyfyezezdzdzdydxdxexeyfygyiyjykyjyjyjxixhwhwgwgvgvfvevevfvfvguhuhthtgsesfsgtmvyvvutttsrqqsstuwrynzo{o{o{n{n{m{m{m{m{m{mzmznzn{o|p}p}q}r}r}r}r|q{q{p{o{o{o{n{o{o{o{o{p{p{p{p{p{p{p{o{o{o{o{nznznzozozozpzpzpzozo{o{p{p{p{p{p{pzpzpzp{pzpzpzpzpzozp{p{p{p{p{p{q{r{q{q{p{pzozozpzp{p{q{qzr{s{r{r{r{q{q{pzpzpzpzoznznzmzmzmznzo{p{q{r{r{q{q{q{q{pzpzpzp{o{o|p|q{q{q{p{p{pzpzoznznzm|llmprvwz{{{zz{{{{{{{{{{{{{{{zyxxwwwwvvvwwxxyyyyyxxxxxyyz{{|}}~xqmkjjlpqonmlkjijjklmllljihhjlosuuuuvwxyzz{|}}}}~d{d{ezezeyeyeyfyhyiyiyjyjyjzizizhzgzgzfzfzeze{e{d{czczb{b{a{a{b{a{aza{c{cze{fzfze{e{d{c{c{b{b{b{a{`{`{a{a{b{b{a{a{a{`{`{`z`z`z`za{a{b{a{a{a{b{b{azbzczdzf{h{i{j{j{k{k{k{j{j{h{h{g{f{e{d{d{c{d{c{d{ezfzezeze{d{e{e{e{f|e|d|b|`|_}^}^}_}`~a~`~_~_~_~_~_}_}`}`~a~a~`~`~`}`}`}`~`abbba`_^]_dcbba_^]]]\\ZXWWWXXWWWXYYWUQONF5/269:986653333568:<>AEHKKJFEFHJJHFEC>97764210135:?CFHIIKMNMOOQSTUWZY[[Z[`gh``bbcceffgghjkljhmkghjmpstvx{|~~}|{ytpnmpqf]VOJGGKLJHMMKKKKLLJCAHIB>:779;;=??AFJLMMMKGBDHHIHA=:76777789:<=@CEFFDCHKSVROPUWWWTPMKKPSVXc[USVXXMLPWZWXY~Y~Z}Z}]|]|[|Y{[{]{]{^{`z`zazb{c{c|b|a|`}`~d~kha`ekrxwqihgcbfhebdbeedhh_WV[_a~b|d{gyjylyp{r}uwz{{|}~~~~~~~~~~~~~~~~~~}}}~~~~~~~~~~~~~}||||{{{{zyyxwwvuttsrqrqoX=2<D@;BCGFCE><?FHDJJLDETLBB>84211256555655545654456789:<>DR\\ZZTZ^`[TSOKQUV`ZX\\ca]^``ba_~_~_}`}a}c}a}]}a}c|d|d|d|d|d|d|d|c|c{c{b{bzbzczdzfzgygyfzfzezezezdydydycycxeygyhzhzhzhzhyhxhxhxhwhwgwgvfvevdvdveuguhthtgserbsctfumwuwwvuuutssttuvvvxozq{q{p{o{o{n{n{n{n{m{mzmzmzn{n{n|n}o}p|q|q|q|q{p{o{o{o{n{n{o{o{o{o{o{p{p{p{p{p{o{o{o{o{n{nznznznzozozozpzpzpzp{q{q{q{q{q{q{pzpzpzpzpzpzpzpzpzpzp{p{p{p{p{o{p{p{p{p{p{p{p{p{p{p{p{p{q{q|r|r|r{q{q{q{q{q{q{q{q{oznzmzlzlzmzn{o{p{q{q{q{q{q{q{p{pzozn{m{l{m{n{o{n{n{ozpzpzoznym{lkkmprvwz||{zz{{{{{{|||||{{{{zyxxxwwwwwwwxxyzzzzyyxxxyz{|}}~|vrnljkloqsrqonnlklnmnmmmmljijloswywxxz{{{{{{|}}||}~c{d{d{dzdzdzdzdzfzgzizizjzj{i{izhzgzfzfzeze{d|c|b{a{`{`{_{_{`{`{`{`z`{b{czd{ezeze{d{c{b{b{b{b{a{`{_{_{`{a{a{a{b{b{b{a{a{azazazaz`{`{`{`{`{`{a{a{azbzczezf{h{i{i{h{h{i{i{i{h{g{f{f{d{c{b{b{b{c{c{b{c{c{c{c{b{b{c{c{c|d|c|b|`}^}]}]}]}^}`~b~b~b~b~b~b~a}a}b}b~c~b~b~a~a}a}`}`~_`aa``__``bgdcba__^]\\[XVUUUVVUUTUVVUSPKB:/07;=<;86543234689<>ADGJLLKFEFGHIHGFEB=:863100246;AFIKLLNOPPONOQSUY\\[\\]\\\\ahia_`abdfgggghjlmkihjjhlpsuuwz|}~~~~~~}{yurmhfhjmke`XQLKKNOMHKMJGEDDFJC;BG?:989:;;=BBCGJKLKJHGFHKJHEA?=:87679:<=?@CFHIIGDILSTROPRSTSNMLKLQVVY`WQQVUPNPSY\\XY[\\~]}]|^|^{]{\\{^{_{]{_{_z_zazb{c{b{b{b|a|`}c}g~e~aadiossi`bb]^^][\\][ca\\XUQQV[_`~a~b}d{gzizlzo{r}swxzz||}~~~~~~~~~~~~~~~~}}}~~~~~~~~~~}}}||||{{{{zyyxxwvuttsrqrpjU<04@H>A>ABBD=:>GIIGKOC>QD::720//3697657877667765679:;<<=@BP\\[YX\\X[XROLQYZZ`Z]`fc^^a_aa^]~]~^}_}_~^}]}a}b}b|c|c|b|b|b|c|c|c{b{b{b{b{czdzezgzgzgzhzgzfzezeydydycycydyeyfzfzfzfzfyfxfxgxgwgwgwfwevevdvdvdufugthtgserbsctfufvhwovyvvvvutstttuvzxpzo{o{n{n{n{n{n{n{m{l{lzlzlzlzl{l{l{m{n{o{o{o{o{n{n{n{n{n{n{o{o{o{o{o{o{n{n{n{n{n{n{n{n{n{nznznznznznznzozpzpzq{r{r{q{q{q{p{pzpzpzpzpzpzpzpzpzp{p{p{p{p{p{p{p{o{p{p|p|p|p|p{o{o{p{p{p{p{q|q{q{q{q{q|r|r|r|r|q|q|p{n{mzlzkzlzm{n{o{p{p{p{q{p{p{o{o{n{m{l{m{n{o{oznzo{p|p|o|n{m}lklmpruvz{|{zyyxyyyyz{||{{{{{zyxxxxxxxxxxxxyz{{zzzyyz{|}}~~yqmlllkllmlmpqpoomllponnnonliijnpuy{zzz{|}}}}}~~~~c|c|c{d{c{c{c{c{d{d{e{g{f{f{f|f{f{e{e{d{d|d|c}b}`|_|^|]|^|^{`|a{`{`{a{a{b{c{d{d{d{e{d{b|a|`|`|_|_|_|_{_{`{a{c{d{d{d|c{c{c{d{d{c{b|b|b|b|a|b{b{c{czezgzh{h{f|e}e|c|b|b|b|b|c|d|d{d{c{b{b{b|b|b|b|a|a|a|`|`|`|`|a|`|`|b|b|a|`|_}_}_}a}b}d~d~e~e~f~e~e~d~c~d}d~d~c~ba_~^~]~\\Z\\]^^^^^^^`db``_^_^\\[YWUVWXWVUVUSSRQLHB8002;@>;;:75334578:;>@DGIKLKHDDEFGGFDEGGB>:73111368;BGLNPPQRRQPNPRUW[^]^^]^bhfa^^`bceffghgilmljhjmmortvwy|~~~~}~~|zz|}{woiffgikllkgb[SOMNOOMJHGECBBADHC<?C=9:<;;::?FEDGHHIHFGHILNLFCA@@?;88:=>?@ACFIKLJIHHKRSQQONOOPMMNNNTYTZ[TOOTTOTTV~Z~\\[Z\\_`}`|_|_{_{^|a|a|_{`z_z_zazbzb{a{b{b{a|a|b|c}d}b~ceilolc]`_ZZXY[VP]_UOMMT[[]_``c~c}f{f{h{j{m|o|s~uvxz{|}~~~~~~~~~~~~~~}}}~~~~~~~~~~}}}||||{{{{zyyxxwvuttssrqojN;917FFF>>A?C=:=FKKFKQD9I:3320//04<?<979;987698768:=>@A<?BAM[YWUWTXXURLV]]]`\\bdgc^^`^``]\\[~[}[}[~[}\\}^}`}a|b|b|a|a|a|a|c|c{c{c{b{b{c{dzezgzh{i{i{i{h{g{fzezdzdycydydzezdzdzdzdydydxexexfwfwewewdwdwdwewfwfvguftftdteteteudvfvmvxwwvvtsssttuwqzm{l{l{l{l{l{k{k{k{l{l{mzmzmznzn{m{m{m{m{m{m{m{m{l{m{n{n{n{n{n{n{n{n{n{n{n{o{o{o{o{o{o{o{ozozoznznznznzozozozp{p{p{o{p{p{o{ozozozozpzqzq{q{p{p{p{p{p{q{q{q|p{p{p|q}q}p|p{o{o{o{o{ozozo{p{p{p{q{q{q|q}r}r}r}q}q|p{n{mzlzkzlzmzmznzo{o{o{p{o{o{o{n{n{n{m{m{n{n{o{o{o|p}p}p}n~mllmnprtvy{||{zyyxwxxz{{|{{{{zzxxxxxwwwwwxxyyz{{{{{{{|}~~{vrliijkklmkikoppopnlmnmkmoppolkkorwz{z{{|}}}~~~c|c|c|c{b{b{b|a{a{b|b|b|b{c{c{e|e|c{c|c|b|b}a}`}_|]|^|]|]|_|a|a|a|a{b|b{b{c{d{e{e{e{d|b|`|_|^|^|^}^}^|_|_|`|c|c{d{d|c|c|d|e|e|d|c|c|c{c{c{dzdzd{e{h{i{i{h|d|a}`}a}`}`}_}`}a}b|c|c|c{b|d|d|d|c|b|a|`|`|_|_|_|_|_|_|_|`|a|a|`|_|`}a}b}c}e~e~f~f~g~g~g~f~e~d}d~d~b`_]]\\XWY[\\]]\\\\\\[\\^_^]]]]]\\YXXXZZZZYXVTPNLE>=84413<C?;;<75436899<>@BFHJKJJFCCEFGGFDEGHC?;72012468<AHMPQQRQRQONPSUVZ^^_^]_bfb^^adcbdefggghknmjiknoqsuvwy|}}}|{{{|wurz{wocbcfhklmljhe_YRPPPPMJFCBBCCBDGC>??>;<==<::@GFDFEEECACGJKJID@??AB@::=BCBABEJLMMJKNKLSSQROIKMOMNOOOWYT[XSQOTTRY~Y~X}Z~\\~[Z]ab~b}`|`|a|a|c|c|a{bz`z`{a{bzaz_{`{a{a{`{a|b|d}c}c}e~hkjha]`^ZYYXXRQ[WJIKQW]]_```cc}e|e|d{g{j{l{p}rsuwy{{}}}}}}}}}}}}}}}}}~~~~~~}}}}}}||||{{{{zyxxxwvutstsrrohD8=20DJKB;H>B<8=EJKGIND87401011027?CA;89A:877:986;?BDFH>AC?IUYUSUVVXVSPY_]]`\\bdea]\\^[`^]\\ZY~Y}Y}Y}Z}\\}^}_}`}`}_}_}`}a}b|c|c{c{c{c{d{d{e{f{h{j{j{j{i{h{g{f{ezezdzdzdzdzczbzbzbzbybxcxdxewewexdxdxdxdxewfwfvfuftfteueueteueuevgvkvpwxvvtsssttuwuyl{k|l|k|l|k|j|k|k|k{k{l{m{m{nznzm{m{m{l{l{l{l{l{l{l{m{m{m{m{m{m{m{n{n{m{m{n{n{o{p{p{p{p{p{p{o{o{n{n{n{n{n{o{o{o{o{n{ozozoznznznzozpzqzr{q{p|p|o|o|p|p|p|p|p{o|p|q}q}q|p{ozozozozoznznzn{o{p{q{q{q|q}q~q~q}q}p|p{n{m{l{kzlzlzmznzozo{o{n{n{m{n{n{n{n{n{n|n|n{n{o{p{p|p}o}mmllmoprtvxz|||{zyxwxyyz{{{{{zzyxwxxxxxwxwwxyyz{||}}||}}~}vrnjiiijkmmnnoppqqomllllmopqqqpopstxz{{{||}~~~~~c|b|a|a|a|a|`}_}^|^}^}^|^|_|`{b|b|b{b|a}a}_~]~]}\\}]}]}^}_}a|c}d|d|e|e|e|e{e{f{f{g{g|f}c}a}^}\\}\\~\\~\\}]}]}^}_}a}a|c|c|b|b|d|e|e|e|e|e|e{f{f{fzgzi{k|l|l|i|d}`}]~]}^}_}_}^}^}^}`}c}d|e|f|g|g|g}f}e}c}a}_}^}_}_}_|_|^|^}`}a}a}a}a}b}b}d}f}h~i~i~j~j~jjif~c~a`_^\\[\\[YXY[]\\[ZYXWXZ[[[[[[[ZYYY[]]]\\[YVQHC?;54336639EC:9>97669<>>??ADHJLKIGECDFHHHHGEDEE?941135779<AHNQQPPOONMMOSSUX^___^`bf`]^adcbdefffeejppjkmoqrtuwyzzzzyxwuuwrokrtofadgknoomkiiifaZUSQPMIFB@AEFGFEBFC>=>@@?=::@GFCB@AA><?EJJIIEA?ADDDA>AGHEDEHMPPPLJONPTSSTOKJLPONTSQZZT^XWVTXUU~^~\\}\\}\\}]~\\[^ded}b|a|c}d}f}e}e|e{czb{b{bzaz_z`{`{_{_{`{`{b|c|e|e}g~hgd_^__\\[[[QLTVMEHKQZ\\_aa`bfdg~d~`}`}d|h{k{n}o~qtvyz|}}}}}}}}}}}}}}}}~~~~~~}}}}}||||{{{{{zyxxxwvutttssrpe;1:=<EJLD<P@C<8<BHMIDF>200/0233249@EC>97@<777<:97=EGIKK>DC<DPTSSSSTUWVQZ_[[\\[^^_\\YXZX^]\\ZYX~X}W}W}W}Z}\\}]}^}^}]}]}^}_}b}c|d|d{d{d{d{d{e{f{h{i{i{i{h{h{g{g{f{fzezdzdzczczbzaz`z`yaxbxbxcwcxcxcxcxcxexfxfxfwfvfveueueueueuevevdvevgwlwsv{utsstttvzyn{k|l|l|m|l|l|l|k|k{k{k{l{n{pzpzpzoznzm{m{m{l{l{l{k{k{k{k{l{l{l{l{l{l{m{m{n{n{n{o{p{q{q{q{q{p{p{o{n{o{o{o{o{o{o{n{n{mznznznzmzmznzozpzq{q{p{o|o|o|o|o|n|m|m{n{o|p|q|q|p{ozozoznznzmzmzmznzozpzq{q|p}q~q~q}p}p|p{o{n{m{mzlzmzmznznzn{n{m{m{l{m{n{n{n{n{n|n|n{n{o{pzp{p|o~mmlmmoprtvxy{}}}|{zyzzz{{zzzzyyyxwxxwwwwwvwxyz{|}~~~~}~~wqnmlkjjklnopqqqrrromlklmoqqsttsssuwyz{{|||}~~~~~b|a|a|`|_|_|_}^}]|]}]}]|]|^|_|`|a|a{a|`}`}_~`~`}`}`}`}`}a}c|e}g|h|h|h|i|j{j{j{j{i{h|e}b}^~\\~[~[[[~[~\\~\\~^~_}`|`}_}_}^}_}a|c|d|e|f|g{g{g{f{g|g|f}e}c}`}]}X~Y~[}\\}_}a}b}b}c}b}d}d|f|g|h|h|g}f}e}d}b}a}a}b}b}b|a|a}`}_~`~_~_~^~_~a~c~d~e~g~iijjjhda_^^]^___\\[]_a`_^\\ZYWWXXXYYYXWWYZ[\\[ZYXWSLA64554699:35AF<79:;::<>@@@@BEIKMLJHFEGJMNMLJGDCC<51136789;<AGLNMLJJIHGFILLMS[]\\]]_bf_[]adddfeeddccfkqtttsssuvxyxvuuutqonpqkcgkf``eilnpokijjkhc\\WTRQNJGFCDHIKHEBMH<;?A@><99?EDA><=>=<>CFGHHGDCDHHIE?BJLIGGJORRTQLNQTWUXWNRNOTTTWUTZZU_\\\\ZXZVY~a~_~_}_}_~\\[_eed}b|b|d}g}i}f}f|f{dzd{d{czaz`z`z`{_{^{`{`{b{b{c{c|d}d}d~caaa`^]\\WNOWRIEJOPXV]```bgfib]]~`}c|g|i{k|m}psvx{|}}}}}}}}}}}}}}~~~~~~~}}}}}||||{{{{{zyxxxwvuttttsrpe;1>LQONJC=VEB:;=@EIG>;70--/1345458>BA<86=?788:::7>HIJKJ@FA:AJOSVTRPPSTRWZVXVWVVXUSTVU\\]]YXY~X}W}W~W~Y~Z}\\}\\}]}\\}\\}]}^}`}a|c|c{d{d{d{d{d{e{f{g{g{g{h{h{h{h{h{g{fzezdzczbzbzaz`z`yaxbxbxcwcxcxbxbxcydyeyfyfxfxeweweveveuevevdvdvdvewgwhvluptrttuxvzv|vwyys{p|q|r|t|t|r|p|o|m|l{k{l{l{nzozoznzmzm{l{l{l{l{l{k{k{l{m{m{m{m{m{m{m{m{m{m{n{n{n{o{p|q|q|q|q|p|p|o|o{o{p{q{q{p{p{o{ozozozoznzmzmznzozpzp{o{n{m|m|m|m|m|m|l{l{m{o|p|p|p|p{q{q{q{p{o{n{m{mznzozp{p|o}o~o~o}o}o|o{o{n{m{mzlzmzmznznzo{o{o{n{m{n{n{o{o|o|n}o}n|n{n{nzn{n|m~llklmnpqstvx{|}|{{zzzzz{{zzzzyyyxwxwwvvvvwxyyyz|}~~~~~xrpoonnmlmnpqrsttsssqolklnqrtvwwvuuwwyyzz{{|}~~~~~a|a|`|`|`|`|`}`}_}_}`}`}`}`|`|b|b|a|a|b|b}a~c}c}c}c}b}a}b}d|f|h}i|j|j|k|k|k|j|i|i}f}b~_~\\~ZZZZZ[\\\\~^~_~_}`|_}]}\\}\\}`|b|d|e|h|i{h{g|f|d}a}]~X~V~V~U~S~V~W}Y}[}]}^}`}b}a}b}b}d|f}e}e}d}d}d}c}c}d}e}d}d}c}c|b}a~`~_~^~]~\\~]~^~`~b~d~efefeeca_]_aabdcc`_abdedb^]\\ZYYYXXXWXWWXXWTSTUUSKB9329<?AA=;65;B;57;=???>???ACFJLMLKIHIJKMPPNKGDA?93136899:;=@FJKHFEECB@?BEGIOWZZZ\\_ae_[[`ccejgecbcde``irxwtttruwvpjkmnkihijhabebacfikjlkjklkjhaWRQQPLJJIFEIKLJGCQH89<=<;999=AA?<;=??>?ACEILKGEFLOLHBDKPNKKLQUUUVRSVWYY\\ZOVRRUYZZYY\\ZW_``^[\\Z\\ba~a~`}_~[[^ddb}a|c}f}i~j~g~f|e{dzd{dzdzbzaz`z`z_z_z`z`zazbzb{a{b{b|c}d~dccba`YUOQRNMKMNQRO]_]]bhghbZ[\\^~b~d|h{j{l}o~ruy{|||}}}}}}|}}}~~~~~~~}}}}}||||{{{{{zyxxxwvuttsssqpc>6=BHNMFA=VHC;?>?BD@742/./01356546:>=976:>8;9:::8?HIIHIAB<7>EIPWTNLKNPMPQOQOTOORQQQTUZ^^YXZ~Y}X~X~X~Z~[~\\~\\~\\}\\}[}[}\\}^}_|a|c|d{e{e{d{d{d{e{e{e{e{f{g{h{h{h{g{ezdzczczbzbzaz`zaybxcxcxcxcxbxbxbybybycydyeyeyexdxdwdwdwcvcwcwcwcvdwdwdwdvdwewgwkxnxrxxxyyz{||}|~|~||||y|w|r|p|n|m{l{l{lzlzkzjzk{k{l{l{l{l{k{l{m{n{n{o{o{o{o{o{n{m{m{m{n{n{n{o|p|q|q|p|p|p|p|p|p|q|q|q|q|q|q|p|o|o|n|m{l{m{mznznznzmzl{k{k|k|k|l|l{m{mzm{n{p|q|q|r|q{q{p{p{o{n{n{m{m{n{o|p|o|q}r}r}q}p|o|n|n{n{m{lzmznznznzo{p{p{p{o{o{o{p{p|p|p}p}o|o{o{nzn{m|m~llklmnpqrsuvx{{zyyxyyz{{{{zzzzyxvvutssrrstuvvwxyz{|}}}~~|xurrqqpooooopqsuvvvvutrpooqsuuwxxwvwxxyyz{{|}}~~~~~a{`{`{`{`{`|a}a}`}`}a}b|b|b|c|b|b|a|a{b|a}`}b}c|c|b|b}a}a}b|d|f}g}i}i}j}i}h|g|d}a}]~[~YYYYYYZ~[~[~]~^~`~`}_|_}]}\\}]}`|b|b|e|k|j{i|i|g}c}[~XUVVYZZW~W~W~Y~Z~]~`~`~a~a}b}b}a}a}`~`~b~b~d~e}f~e~d~c}b}b}a~`_^\\~[~[~\\~^~^~^^___`_^^^^`cdfefeabdfgigb_][YXXXXXXXWWWVSNFGKPSL@77:<BGMMG<95454635;?EEA?>>?ACFILNMLKIJJJIKNNKFC?:52248:99::<@FIIFDCA=<:9=@DHNUVVW\\^`c_Z[_bbfmjdcbbdfaZW^mtrqpkltug_aflebbcba`_agfehihhghjjkjie^RKLLMJJKJGGIKKJGFF?:8:;;:99:=@@@>=@DECAABDIQOHGILOPMHFKSTNLNSWWTUWXYZZ[][STXXWZ^`a`ZYYadca^^^_bbba~_[Z]cb~_~`}c~gjlhd}c|c{c{dzdzdzbzazbzazayayayayazazazazb{c}d}e~edba`YTONNNSSNMRMK^^VT_fdf_UWXZ\\^~b}d|g{i}m~puwxxz{{|||||||}~~~~~~}}|||||||{{{{{zzyxxxwvuutssrqo]A7=EGJHC?=JHC=A?>@<720//./013443346::8768;8<::;::AHGFGG?<47<ADKQOKIIJMMLKLLLPJKNQTPUWW^_ZYZ~Z~Y~X~Y~Z~\\~\\~\\~\\~\\}[}Z}Z}\\}^}_}a}c|d|d|d{d{d{d{d{c{c{d{e{g{g{f{e{dzczczczbzbzazazbycycydydxcybybybyazazbzczdzdzdydycxcxbwbwcwbwbwcwcwdwcwbwbxcxexgwiwkwnxuy{z{{||||}}}}|||u{p{m{k{k{i{i{j{k{k{l{l{l{l{l{m{n{n{o{o{o{n{m{m{l{l{m{m{m{n|n|o}p}p}p}p}p}p|p|q|q|r|r|q|q|p|n|m|m|l|l|l{mzmzmzmylzkzk{k|k|k|l{l{l{lzm{n{o{q|q|q|p|o|n{n{n{m{m{m{m{m{n{p{r{s|q|r}q|o|n|l|l|m|n{n{m{n{n{n{n{o{p{o|n|m|n|n|o|o}o}o}o|o{n{nzn{m|m~lkklmnpppqstvwyzxvtuvwxxxxwwwwwvsqonmljiiiijkklostuvwwxyxwusrstutrpoooonmnpruvwwwwwvutuwxyzzzyzz{{||||}}}}~~~a{a{`{`{a{a{a{a{b|b|c|d|d|d|d|d|c|a|`|`|_|^}^|^|^|_|`}_}_}_|`}a}b}d}e}e}d~c~a~]~Z~X~V~VVWXXYZ~[~\\~^~`~a}a|`}`}_}_}a}c|d|b|b|f|d}a}_~]ZWVTUVXYZW~V~V~W~Y~Y~[~\\~]~]~^}^~]~\\~[\\^^~`~aaa`~`~_~^~^~__^\\~Z~Y~Z~[~[~[ZZ[\\]\\]_``beffgggdegghjgb]ZWUTTUUVWXXXVRME;;BJMF:58?DKORL>754222224<@DDA><<>@CFILNNNNMLKIEEGHGE@;53258;;989:<?BFHHDA>;878=@CFLSSRS]\\]`^\\\\adaiqmfdccglh_WWcmmmkgbbndYY]fb]\\^^]^]_dgecbdfghiihge^UJDEGGGGJJFFHHGEDB?;999889:<>@CDDCBEJJGECACKRTKFLPQQQMIJSXSOPTWYWWY[\\\\\\\\^aWV[\\Z^adec\\Z]dffdbaabddca~^[ZZa_~\\~^~dillgb}a|a{b{e{ezfzezdzczczcycybybybyayayaybyczc|e~e~dcb^WTQOPSXUOOUNN[WNP[]^bXORTUVX[]~`}a}g|i|n~qstvwyz{{||||}~~~~~~~}}||||||{{{{{zzzyxxxwvvuttsrpp]E>ACCFE@<;DHD?A?;;71/..//0012333346::877898>;<=<>DGEDED=927<?BEIIJJJJKKIHIKMPJILQWSXYW``[Z\\[~Z~[~[~]~]~^~^~]~\\}[}Z}Y}Z}\\}^}`}b}b}b|b|b|b{b{b{b{b{b{c{d{d{d{c{czczczczczczbzbzcydydydydydycycycybzazazbzbzbzczczcybybybxbxbxbxbxbxbxbyaybybxcxewewfxfxjypzw{}|}}}}}}}}}}|~|{{x{p{k{h{g{h{j{k{l{l{l{l{l{l{m{m{m{m{l{k{j{j{k{l{l{l{l|m|n}o}p}p}p}p}p|o|n|n|n|o|o|n|m|l|k|k|j|j{k{kzkzkzkzkzjzj{k|l|l|l{l{k{kzl{m{o{p{q|q|p|o{n{n{m{m{m{m{l{l{m{o{ozpzo{m|m|l}j}i}k|m|n|n|o|o|n|n|n|m|l|k}i~h}i}j}j}k}l}l}m|m|m|m{m{l|l~jijjkllmlklllmnonllnpqqrrrqrrqpoljhgfecbaa```__bfhijlmnoonmlmopqpnlkjjjiiikosuwxxxxwvvwxz{||||{||}}|}}}}}|}}}}~~~az`{`{`{`{a{a{`{`|`|`|`|_|`|a|`|`|^|^|^|]|Z}Z|Z|Z|[|\\|[}[}[|[}[}[}[}\\~]~]\\[XV~T~T~TUVVWWX~Y}Z}[~]~`~a}c}d}b~b}d}g}g~d~b~a~]~YWVTSSSTTVWXX~X~[~\\~\\~\\~[~[~\\~[~[}Z~Y~X~WWXYZ[\\~\\~\\~[}[}Z}[~\\~\\~\\~[~Y~Y~Y~Z~Y~YXYY[]]^^^]^``abbb_`baaa]YTRQPPPQQRTUUSNHB<65;CC=76<DIPQQF725542567;=?AB@><<>@CEHKMLJIHHIHHEDCCA;62148;>=;::;;>?DHJGC@<:9;?ADFKPPOQYYX[YWX^edhnngedchmjbYU[cghgd^Ub^VVXb^XWYYZ[[X^`abdfijiea^\\[VJBAACDEFIHFFFFCA@=;::9999;>ABDGIIHGJNMJIGAAIPSMFLSQORSOLOVVSTVXXXWZ\\\\[\\[]a\\Z]][_dghf_]`effedccdddca^ZXX_\\~[~^~dimkd`}_{`{b{e{f{hzgzfzezdzeyeydydycycybyaxbyczc{d}d}c~a_[WUSSTW[TLRWPRYOIRZRY]QIOQRRRTUWZ^~a}g}kmortvwy{||||}~~~~~~~~~}}||||||{{{{{zzzyxxxwwvuttsroraKEEB@DC?<9CGC>>?;62.-//001123444479;<<;:9:9>=?A@CFFEEFE>94:>?BDEHLLKLLKJJLOOSMLKRZX[\\W_`\\\\\\Z~[~\\~]~^~_~_~`~_~]}[}Z}Z}[}]}_}b}c}b}b|a|`|`{`{a{b{b{a{a{b{b{b{bzbzczdzdzdzdzczczdydydydydydycycybyazazazazazazbzczbybybycxdxdxcxcxcxcxbyayayaxbxcwcwcxcxeygzlzs{v{x|z}~}}}}}}}}}|||{|r|m|j|j|j|j|j|j|j|j|k|j|j{j{j{j{i{h{h{h{i{i{j{j|j|k}l}l}l}l}l}l}k}k}k}k}l}l}l}l|k|l|l|m|m|m|m{m{l{k{k{j|j|k|l|n|n|l{k{jzk{l{m{n{o{o{m{l{l{k{j{j{i{i{h{h{i{j{jzkzk{j|h|g}f}f}f|g|i|l}m}m}m}m}l}j}h}f~e~d~e~f~f~f~g~h}h}i|i{i{h|h}hgffffeeeddca`accb`beghijkkjjjiigfdbaa`_______^\\^`_`acdeeddcdeghhgedbcbbcdeglptwxyxwutsuwyz{||}}}}||{{{{zyyyzz{|}~~~~^{^{]{]{]{^{^{]{\\{\\{]{\\|]|\\|\\|\\|\\|[|[|Z|Y|X|X|X|X|X|X|Y}X}Y}X}X}X}X}Y}Y}Y~X~X~VUTTTUTTTTSSTTV[`~cda`_~c~daa\\WTSSRRSTTUVVWX~Y~[~]~]~]~\\~[~[~Z~Y~XVVUUUUVWXXXX~X~X~Y~Z[\\\\[[[[ZYYYYYZYWWWVVXXYZYZWVVUUTPNLMNOPPPPQQROJE?;989<=;87=BGJMJI=4257558:;<==>?><<<>@CDFHJGC?=<BFJJFB>9421359=@?<<;<==?CGKKHGC@?@CDFGJMNMOUSRWRMPV_dbeihfedegfdYTWZ^cc`^SYZTWX\\ZXVVVWXYXZ[^]_dghd\\VQMMKC==?ADDGIGEDDDA?><<=>>><=AEGGFJNNLLPQPNLKEAENQMEISQNQVSOLPVXZZZZZY[ZZZYVW_]\\^^\\^djjg`]`bbcdcbb`ddcb_YV[a]~]~a~dhkib`|_{`{b{e{h{izgzgzfzezgzgyfyfyeydycybxcxcybzb|a|a}_~]ZXWXWV[[SQRXTVYMKYULY[QJOPQQPNNPTUZ`~e~gimpstuy{{{{}~~~~~~~~~}}||||||{{{{{zzzyxxxwwvvutrpmm^RNMC;=?>=;@B?;8;930..002334456677:<?@>=<<=<AABDDFHEGFHIA;9@CCDDEJOOMNOONOPSRSONMR\\Z^]W[^]]\\Z[^^^^_a~a~]}\\}\\}\\}\\}^}a}c}d|d|b|a|`{_{`{a{a{b{a{a{a{a{b{bzbzbzczdzdzdzczczdydydydydydycybybyazazazazaz`zazbzaybycydxexexdxdwdwdxdycybybxaxaxbxbxdxdycyezhzkznzq{v{{|}|~||~|}}}}}}||}|s|j|h|g|g|f|f|f}g}f}f|f|f|f|f|f|g|g|h|g|g|g|g|g}g~g~g}g~g~g~g~gg~g~g~h}j}l}m~prssu~t~s}r}o}o}n~j~j~k~p~s}r|m|k|i{i{j{k{k{l{k{j{j|j|j|i|g|f|d|c|d|e|e|f{f|e}d~d}c}b}b}b|d|f}g~g}g}g}f}f~d~b~a~`aabbbc~c~c~c~c~c~c~ccbbbbaa`__^^]]^^^]^`aaabcbbbcbba`_____^^^^____^___^^________`aaaa`__```abcfjmruwxwtqnnnpsuwxyzzzywuuvuutssrsttvxyz{|}~~]{]{]{]{]{]{]{\\{\\{\\{\\{\\{\\{\\{\\{\\{[{[{Z{Y{Y{X{X|W|W|X|X|Y|X|X|X|X}W}W}W}W}W}W}V~V~TTSTSRQQQQQQQSVY[]]\\[ZZYWUSRRSTUUUVVWW~X~X~Y~Z~\\~]~]~\\~[ZYWVTTTUUUVVWWWVVVWYYZZ[[[[[ZZZYWWVUTTSSSTUUURSQQPONLLMLNNOOPPOPNKE<899::;;658>BCCB?95436777:;==<;<====<=?ACEEFDA?=>BEIJGA:621247:=@?=>==>?ADGKMMJGCCBEEFGJLLLMTQOTQJOVZa^`ffeedadddZUWVY]`_^UTVSVYXXWUUVVVXYWY]^][[ZUPLGADB?==?BDCGIGDBCB@@??ACEFECCGJNMHMXXQRUTSQONKDEMQIBENQKOWWSRNOUYZZZZYWUTSSMPUX\\^]Z\\diie]T^\\X]__][Zdccb]WX^aa~a~b~dghgb~`|`{azb{d{h{j{hzgzgzezfzgzhzhzgzfzeydxdxcxbyaza{_|_|\\~[~ZYZYX\\\\UUWZX[YOQZMK`ZSOQTTSNLJJQNT[`~a~c~g~nppquwxyy|}~~~~~}}}||{{{|||{{{{{zzyyxxwwwwvutpmkb[U[QD9;>><;<;:75320///12455667889:=?AB>>>?@BCEFGFHJFHHLLC=>EFEECELQROOQQPQSVSRLMNQZ[_^XX]]][Y[]]]]^a~a~[~[~^~_~_}a|c|e|f|d|c|b{a{`{`{`{a{a{a{a{a{a{a{azbzbzczdzdzdzdzdzdzezezezezdzczbzbzazbzbzbzaz`z`z`z`zazbycxdxewewewewexexexdxbyayaxaxaycybybybydyeyfygykzp{u|x|y|||}|||}|~}}|}|{|{s{i{g|f|d|d}d}c}d~c}d}d}d}d}e}e}e}e}e}e}e}d~d~e~e~e~e~eeeeeed~f~h~j~lprtuvutrpookiko~u~x}w|m|h|g|h|h|i|i|i{i{i|i}h}g|f|c}b}a}`}`}`|_}_}`~a~a~a~`~_~`}b|c|c}d}d}d}b}b~a~`~`~_~_~`__``aa~`~`~`~a~a~a````__^^]]\\\\]]]\\]]_^^^_^^^__^]]]]]^_^^]^_____^^^^^^]]\\\\\\]]]^^_^_^]]^_`abcehknqttrmhhkifhjlnpqqonmihkplhggffffhkopsvz|}^z^z_{_{^{^{^z^z^z_z_z_z^z^z^z]z\\z\\z[z[z\\{[{Z{Y{Z{Y{Y|Y|Y|Y|Y|Y{X|X}W}X}X}X}W}W~U~S~RQQPNNNOQPPOPRTUUTSRQQRRRSUWXYZZY~Y~Z~Z~Z~Y~X~Y~Z~[~[~Z~YXWUSRSUVWWWWWVUTTUVWWWWXXYZZZZZYVTTTUTSRRRQPOOONNNMLKKLMNOPPPONMHD<768:<;:8559==:976544568:;<<<<;:;=>>=<<=?ABAA@@?@BDEEGH=6201589:<?@??@AACEGINQSNIJIGFDEEHIIIKRMLRRKOYTZYZ`cced\\`dc[VXTTZ_`^VPSPW[ZYXVTUUTXZVXZSOIGEDDCB?CCAAABEEDGHEBABCEEEEGJMMNLKKNTUMOY[UUXVVVSQOJHKQQHFNSKKUWUVRLPWYYYYXUPNMNIIPUXZYUYbfc\\UOWSRVZXTQU___`[W[be~e~d~e~defe~c}b|b{b{c{d{g{j{h{j{i{hzhzizjzizizizhygyfxexcwbxay_z_{^|]}]~\\]\\Z_]YY[]\\^[UXYINd\\XTUXXVOJHJQKPX]~\\}]}b}f~ijmrtuvvyz|}~~~~}}|||{{{{||{{{{zzzzyyxxwwwwvtufciYVXYUH:9;><9854210//01234678889::;=ABEG>@@CDEFHIJIKNKLLPPHBEJJIGDFMSUPPRQOPSVSNILPPVX^]WVZ]ZYZ\\\\[Z[]a~_~]~`~a~a~b}d}f|h|i|f|d|c|b|]{\\{_{_{_{`{`{a{a{a{azazbzczdzdzdzezezfzfzfzfzezdzdzczczbzbzbzbzaz`z`z_z_z`z`yaxbxcwdwdwfwgxgxgxfxeydycybybyay`yayaybxcxcxcwdxhylzozq{t{w{x|y|{}}}|}|{{zs{g{d|a|b}b}c}c~b~c}d}d}d}d}c}c}c~c~c~b~baaaaabbaaa``acfjnprrtrrpnnrmkkmt|~}}u}i}d~c~c~d}e}e}e}e|e|d}d}b~a~_~]~]\\\\\\]]^__~^~^~^~_}`|_|_}_}_}]}^~^~^~_~_~_~_^]^^^^^^^^^^^^^]]]]]]]]^_^^^___]]\\\\\\]]^^^]\\[\\^`a`_^^__^^]^^^^^^]]\\\\\\]]^___^^]\\]^`aabbcefgikkieaaca_^`abdeecba_^abb^]]]\\\\]^`cegjnoort_z`z`z`{`z_z_y`yay`y`y`y`y_y_y^y^y^y]y]z^z]z\\{[{\\{[{[{Z{Z{Z{Z{[zZ{Z|Y|Y}Y}Y}X}X~V~T~S~RQPOPQRTSRQQQQRRQQPOPPQRSSUWYYZY~Y~Y~Y~Y~Y~X~YZ[ZWVUTRQQRSTUUUUTTSRRSSTSSSTTUVWWWYXVTVVVSONNNMMLKKKKKJIIIJKKLLLLKJHC>64369:964558:866555678::<<<<<<<<=>???>==<>AA@@ABDFEDBCD:42147::::?B@ABDEGIKLPSVLGLJFCABCFGHGJLJJMQNQZVUWY]bcde]\\d_\\YWVTY]`]WNROV]][YWUVVUXXWWSH@<:;>@BDBFHHGFEEECEECBCFGKLKKMOSTUSPMOUYRNUYVUWVXYVUUROOSXQKSVNKRUTURKKPRSSSSPKIHJGJLPSSRQV]^ZTQPQMRWXTNNUWY[^ZY^~c~c~c}d}e~dd~e~e~d}c|c{d{d{e{g{j{h{j{izizizjzkzjzjzjzjziyhxgxewcxbyaza{a{`|_~\\^`__^\\]^`_a_]^VHTe^ZVX[[XPJINSLQXZZ[^`~beinpqrtuwy{}~~~}}|||{{{{{{{{{zzzyyxwvvuvuutri[[d^ZONVRE??>;7320//010123446899:;;<<>ACFGBABEFFFHIMJJOONNTSMGJNLLJGHMRTPNMLKKNRQLHLQOQUXZWWY[VVZ[YVVXY[\\^bbc~c}d}f}h|h|e|c|`|[|W|W|Y{Z{[{[{\\{\\{]{^{_z`zazbzdzezezezezezfzfzezezezezezdzdzdzdzdzczbzbzaz`z`z`y`xaxbwcwdwfwhxhxhxgygygyfyeydybyayayayaxbxaxawbxcxfyiykynypyqzs{u|x|{|~|||{zzv{g{d|e}d}d}c~c~c}d}d}d}d}c}c~c~c~b~a~a~aaaaaaa``___aceghgjjmmmljjnlmmkns~u}p}f}b~a~a~b~b~a~ba~a~a}`}`~_~^~\\[\\^_`a`_~_~`~`~`}`|`|a}a~`~_~^~_~^~_~`~a~a~``_^___^________^]]^^^^^^^^_`___^^]]]\\]^^^]\\\\]_bccba`_^^]\\]^____^^]]\\]^_____^]]]^`aabaaaaabbca_\\[[[ZZ[[[\\\\\\\\ZYY[\\]\\[ZZZYYXYZ\\\\^`bbaceazayayazazayaybybybybyayax`x`x`x_x_y_y_y_y_y_z^z^z]z\\z[z[z[z[z\\z\\z[{Z{Z|Z|Z|Z|Y}W}V~V~V~UUTTUVUTTSRSSTUTSRPOONNOQSTUUVUUUUUUTTUVUSRRQQQQQQRRQQRRRQPPQQQPPPQRSSSSTVVUTTSQNKJJJJJIIIHHHGFEFGGHHHHHGEC=9423578765567898777789:<<===<==>>===>????>=>==>@BDGGC>>@83247:<;;9=@BCEGILNOOQRTJDKLE?>@BEGFGJKKKMNPTZ]TWX]beffdY^`^[WVVX[^\\ZRVRW_`_ZVUWXWUTRNH?;:<>ACEGGHJJJGFDC@BBACFJMPQPPRTWWXUQMMPUQLMPPPQPTWVTUTRRSVTNRUOKNPONLHGIJKKKKKIGHKIKLPQQQQUYXTPQQQNVZ\\VQUWSV[\\YZ~\\~`~`}a}a}c}c~d~e~f~e}e|d{e{e{e{gzjzh{jzizi{j{j{k{k{k{k{jziziyhxfwdxcybzb{b{b|a}^~`b```_aaa`aacaULY`\\YUX[\\XPLOTUPTZWXZ][cfhjmmnqqsvx{|}}}||||{{{|||||{yyyxxwusrrtsqpkc_c``WF@PSKB?;7420/1122112345789::;;<<=@BEGCBCEFEEFIMJINRQPVUPLMOOOLJILOPMIGFDEHMNKHJPOPRVYXXY[STZZTQTWWVX\\^aaabccc~`~_YPOR~T~U~V}V}W}X|Z|[|\\{]{_{b{c{c{c{c{czczdzdzdzdzezezfzfzfzfzfzfzezdzdzczczbzbybyaxbxcxdxfxhyiyiyhyhyhygyfyeydycycycycxcxbxbxbxbxdyfxgxhxjxjxlynzqzt{w{{|{{yyywzl{g|g|g}f}f~d}c}c}c}d}d}d}e~d~d~c~b~b}b~b~bbbbaaa~`~a~a~abccaefjhjjhghhhhg~g~h~i}g}d}c}b}b}b}b}a}a~`}`}`|`|_}`}_}_}^~_a~b~b~c~c~a}b}b}c}c|c|c}d}d~c~a~`~a~a}b~b~b~baaa`aabaaaaaaa``_^^^^^^]]]]]^]]]\\\\[[\\]]]^^^^_`abccbaa`_^]]^_``a```__^^^^^^]]]\\\\]^_`a``_^]]^^]\\[ZYYXYZZZZZZZYXXX[\\[[[[[ZZZZZZYZ[[[[Z[\\aybybxbybybycydxcxcxcxbxaxaxaxax`x`x`x`x`x`x`y_y_z_y]y[y[y\\y]y]y^z]{\\{\\{[{Z{Z|Y|X}W}W}W~W~W~W~W~V~WVUTSSTUVVUSRPNNNOPPRTTTSRRSSRRRQTSPQRPOQQQQQQQPQRRRRQPPPPPPPQRRRRRSTSSSSQMKIIIIIIHGGGGFEDCCDEFGHGEB>;8532356787778999:98889:;<=>===>???>===>@BA@@???@ABDGFB<:863359<==;9>ABCGJLNRQPPPOHCKMD:=@ADGFFIKKLOLPUX_XXX\\adggi^Y__YUVVVX[[[ZZYZbda[WWXYXPKF@<<=?CFFDDGGHJIHFDCA?@@@EHMORRSSTUVWWTQLJKJIHGFDFFFMPPPPQPOOONLLNNKJJHGGGFFFFFFGIIHIMMMNQQRSSUVUTSRRSU[b_\\YZWSU\\\\Y~[~\\~^}_}_}`}b}c~c~d~f}f}e|e{f{e{f{gzizjzkzizh{l{k{k{k{k{k{j{jziyhyfxexdyczc{c{b|a}^~aca```bcb_abf`VPVZXVQZ][WPLU\\UVXZTX[Z]dffgjjlnooquxz{{{||||{{{{{{|{zxwwwvusrpqqpnlihd`ZPVK8DIE>:74211133321113568::;<==<<=@BDFCBDFGFEFJLIHLTQQVTPMOPQQNKIKMNJEDDCAFILJGIOPQRVY[ZYZTUXWPMRUVWWWX[[[ZYYWUQMKLMNOPR~T~V}X}Y}Y|[|]|^|_{^{^{_{_{_{`{a{b{b{c{d{e{f{gzh{h{h{g{f{f{e{d{d{czbzaybxcxdxfxgyhyhyhyhyhzhzgzfzezezezezeydycxcxbxbxcydxdxexfxfxgyhyjymzo{s{v{yz~yxyy|zo{j|h|f}e}d|c|c|c|c}c}d}d}e}d}c}c}b}b|b|b|b|b|b|b|b|a}a}a}b}b~b~b~bccefedeff~e~e~d~c~c~c~c}d}e}d|b|a|b|b|b}a}`}a|`|`|`|`|`|a|`}`}`}b}c}d}d}c}d}d}e}f}f|f|f}g}g~f~c~a~b~c~d~d~c~bbbbbbbbbbbbbbba__^^]]]]]]\\\\\\\\[\\\\[[[[\\]]]]]^^_`aabbaa``_^]\\]^__`aa`___^^]]\\[ZZYZZ\\^_``_][ZYZ[[ZYYYYYXY[[[Z[[ZZYXZ]\\\\\\\\\\\\\\\\\\[ZZ[[\\\\[ZYYbxcxcxcxdydxexexdxdxdwcwcwbwbxbxbxbxaxaxbxbxbxaxay`y_y]y^y^x_x`y`z_z^z^z]z\\{[{Z|Y}Y~Z}Z}Z|Z|Y}Y}Y~Y~XWVU~U~VVWVUTQOONOPQRSTTSRQSSUTTSQSSQTVTTTTTTTTTTUVVUTSRQPPQQQQQQQPPPPPOOPOMLKKKJJIHGGFEDCBAABCDEFEA?;97545678:::::;<<<<;::::;<>>??>>?AAA@>=<>@CEFFFEEDDDDEE@:75346:<>??=;?CCEJLNOQPNLJIGDLOC:>BCCIGFJLLNSOPV]^[VW\\behhjdZ]_[STVWYZ]^^^^]^cd]YXUYYNF@<;=?EILJHHKHFFEDBAA@AA@@HJNOQQRRSTUTTPMIGFEDDCA@CCCILLLLMLKKKJHHJKJHFDEFGGGFGGGILMKLPQQQTUVWWWWWVUUUVY]aa~`~^~^WW]_~Y}\\}\\}]}]}^}_}`}a}c}d}e}g}h|g{g{gzg{g{h{i{j{l{j{h{m|l|l|k|k|k|k{jzizhzgyfxeydzdzc{b{a}_~acaa`aadb_bde_WSSTRRMX\\YUNNW^VV[WQZ[UYcb]_edegijlptvx{|{{{{{{{{zxwvtttuvutqonnljhhhijd\\XWOCAA=74322233555321159;=>>?@A@@??ABCCCCDGHHGGJMIEISQPRPONOPQQNKIJKLGCDEEDHHKJFGNRSTW[]]YYRRTSMKQSSSSSTTSOLJIJJIIJLNOPQST~V~W~W~X}Y}Z|Z|[|Z|Z|[|[|[|\\|]|^|^|`|a|c|e|h{i{i{j{i{h{h{g{f{e{ezdzczcydyeyfygzgzhzhzhzhzhzgzfzfzfzgzhzgygyfxfxdxcxbybxaxbxbxcxcxdwexhyjylzozrzxyxxwx|yozg{e|e}d|c|c|b|b}b}b}c}d}c}c}b}c}c|c|b|b|b|b|b|b|b{b|c|d}c}c|c|b}a}a}b~b~b~`~a~b~b~`~`}`}`}`}`}a}b}c|c|b|a}a}a}a}a}a}b|b|b|b}a}b}c|c|b}c}c}d}f}g}g}g}g}h}i}i|i|i}j}j~h~e~d~e~eeedcbccccccbbbbbbba_]\\\\\\\\\\\\\\\\\\\\\\[[Z[[Z[\\]]^]]\\\\]^_`___````_^]\\\\]^^_`aaa_^^]\\[YXWVUVVY[\\]]\\[YXWXXXXWWXXXYZ\\\\\\\\\\\\]]\\ZZ_^________^]\\\\\\\\[ZYYYcxcxcxdxexexexexexexewewdwcwcwcxcxcxcxbxbxbxbxbxbxax`y_y`y`xaxbyazaz`z_{^z]z\\z[{[}[}[|[|[|[|Z|Z}Z~Z~Z~Y~X~W}W}X}X~Y~X~WUTRRQRSTTUVVUTTUWYYZYXYYWZ[YXXWWWWWX~X~YZZZYVTRRRSSSSSRQPPPQPPONMKIIIIIIHGFEEDBA@?@AABCBA>;975555679;<<<=>>?>>=<<<<=>?@@@@ACDCCA@?>?AEGIIIIHGFDCBA>9667::=?A@?>=BDBDJKLKMLKHGGHEMOA9>IECJLHJLNPVVST[\\[TW\\_beige`[]]VSUX[]_abca\\X`e^ZXVTSKD><=ADJOQMHHMHDCCCBDEEFEDCIKMNNMMMMNONNKIGEDCBBBB@CDDHJJIJJIIIIIHHJKIGEDFGHHIIIIJLPQOOSSTUXYY~Z~Z~Z~Z~Z~Y~Y~YYYZ\\^~_~c~b~^~W\\~b}`}\\|_|_|_|`|a|a|b|c|d}e}e}h}i|h{h{hzhzi{i{j|k|m|l|i|n|m|m|m|l|k|k{j{i{hzgyexeydydzd{c{b}`}a~c`^^^_``]]`]WRPPONOLVZUQKKRYUXVQR[SNR[UQTZY[]_ag~kmotxyyyyyyyyxvtrqpqstsrpmjhgdcdfffgiea]RC<952334456888753239?ABBBCDEDCBABCCDEFFHJJJJMOIFIMMLLLKKMOPNKIHIKLHEHIKILKMLHGOSTWZ]^^[YPOQQKJNPOOOOOOKGECBDFHLOQRSTUV~W~X~X~X}Y}Y|Y|Y|X|X|W|X|X|X|Y|Z|Z|Z|\\|]|_|b{d{g{h{i{i{i{i{h{g{g{gzgzfzeyeyfyfygzgzhzhzhzhzgzfzfzgzhziziziyhyhxgxgxexcybxaxax`x_x`xaxcxdxfyhzizjzqyzyxwvwyyh{d|c}c|c|c|b|b|a{a{a|b}b}a}a}a}a|a|`|`|`|`|a|b|c{c|d|e}e}e|d|c|b|a|_}_}`}^}^}_}_}^}^}^}_}_}_}_}_}`|_|^|]}]}^}_}`}a}b|d|d|d}d}d}d}c}c}c}b}a}d~ijhi~j~i~i~i}h}h}g~f~d~c~c~ccbbb`````__^^^^__^]\\ZZ[[[[[\\\\\\\\\\[[\\\\\\]]]^___^^]\\\\]^^^^^__^^]\\\\\\\\\\\\\\]]]]]\\[[ZYWVUUTTTVXYZZZYXWWYZZZYYYYZ[[]]]]^^__^]]a`aabbbaa`_^]\\[ZYXWWWdxdxdxexexeyfyfxfxfxewewewewexexdxdxdwcwbwbwcxcxcxbxayaybybybycycybzaz`z_z^z]z\\{\\|\\|\\{[{[{\\{\\{\\|\\|\\|\\}[}Z}Z}Y}Y}Y}Z}Y~X~WVUUUUUVUVVVVVVWXZ[\\\\[^^\\^_][ZZZZYZ[[]^__[XTSSUVUUTRQPQPPPOMJKHDDGHIIIHGFDCCBA@@ABAA?=;:9888865679<==>???@@@>==<=>>@@AAABDDDDCBBCDFGHJLLJHFB>;:::98:?B?>BCB?=>DDBEIIIHJHICFIJGLMB:?JLGIONKKNQX[YXZ\\]YZ\\]_aagec`^^YVXZ]_`bcebZT[^\\ZUQOLE?==?CHMSSMHFHFBADFGGHIIHGFJMMMJIHHHHHIJIGFEDDDDDDDFGGIJJIIIHHIIJJKLLJHGGIJKKLLMMNPTTRRUVXZ\\\\[~[~[~[}\\}]}]}]~]}]~]~]}]}^}b~e~c~_~[~`}d}c|a|_|`|a|c|d|d|e|f|e|e|f|h|i|i{h{h{h{j{k|l}l}m}k}j}o}n}n}m}l|k{j{i{hzgzgyexeydydzd{d{c|a}a~a~_]\\\\\\\\[YWVRLKLNMMNLSVQMIHLQOSPKNVMHMSMNPRSVXZ]cggjpvxz{zzzzzxwtsrqrspnkigfedfeegfdegaVVL:742456:87:=<:87878>DDFDEFGHIFDACEFGHGHIJKLMOOLHIJKJJHHIKLLKHHIKKKJILMNLNMNNKJPTUX[\\]\\YVNMNNKKMLKKJKKLJHFFGHKOSU~W~X~X~X~Y~Y}Z}[}\\}\\}[|[|[|Z|Z|Y|Y|Y|Y|Y|Z|Z|Y|Y|Y|Z|[{^{`{c{f{h{i{i{i{i{h{h{hzizizhzhyhyhygzgzhzgzgzgzfzfzfzgzhzizjzjyiyiyixhxfxfyeydxcybyayaxaxaxbxcydzezfziypyzyyxwyszi{f{d|d|d{e{d{c{b{a{a|`|`|`|a}a|a|a|`|a|a|b|c{d|e|f|g|f|f|e|d|c|b|`}`}a}_}_}`}`}^}_}`}`}`}`}`}^}\\}[}Z}Y}Y}Z}[~\\~]~_}a}b~c~d}e}d}d}c}c}c}a~c~h~iddedddc~c~b~ba``^^]^^]]]]]\\[[[[[[\\\\[[ZZZ[[\\\\\\]]]\\\\]]]]]]]^_``__^]]]]^^]]\\\\[ZYYYZ[[ZZYYYYYYYYXWWVVVUUUVXXYYXXXXY[\\]]\\[\\\\\\\\\\^_____`a`_`cbbcddca`_^]\\[ZYXWWWWdwdxdxexeyfyfygygxgwfvevevewewfxewewewdwcwcxbxbxbxbxaybycycycycycyczbzaz`y_y_z^z]{\\z\\{\\z\\z\\z^{^{^{^{^{]{\\|[|[}[}Z}Z}Z}Y~Z~X~X~X~WWWWVVVVWWVWWYZ[\\\\\\\\[\\\\[ZZZZZZZ[\\]_`^ZXTSTVVVTSQPPPPONMKHIGCDGJJJJIGFDCCBAAAABA?=;:999:996678:<<>?@@@@@?><<<>>>??@ABBCEEDDCDEFHJKMNMID>997668:<>BEA?BDA>;>ECAEHHFEGFI@FKLIJLD?AKRNIOULLNPW\\\\ZZ[]\\\\]]]`affec`^[XXZ^a_`a`_UPQSSRQLGD@>=>@DIOSSMGEEECBEGIJKKKJHIKNOMIGFGGFEEGGGFEEFGHHGGHIIJJJIIIHIIJKLMMLJIIKLMNNNORSRSUUTUVXZ\\^^\\\\~[}\\}^}^}_}_}_}`|a|`|`|`}d}e}b}`}_}b|e|e|d|^|c|e|g|g|f|f|g|f|f|g|h|h|i{h{g|h|j|l|l}m~l~j~o~o~m~n}m}l|j{i{hzgzfzfzfyfyezezd{d|c|b|b}a}^~\\[ZXXVSRQPNLLLLLMMPOLHFEFHHIHJLKJJOOKPOPSVVX\\bcdgnuxz{{{{{{ywutsrrqnkdgifejfffheeb^ZWH=944356;?;7=E@;9<?;=DDCGFGIJKKKGBCEHIJIIJJKLNOOLJJJJJJIIIJKKIHILLLJJKLMONONOOLLPSVWYYXWTPNMNNLKMKIIJJLLLLLMOQTZ[Y~[}\\|\\|\\|\\}\\}]|]|]|]|^|^{]{\\{[{Z{Z{[{\\{\\{\\{\\{\\{[{Y{Z{[{\\{^{a{c{f{g{g{h{h{i{i{i{i{i{izjzjzizhzgzgzgzfzfzfzfzgzhzhzizjzjyjzjyiyhygygygyfyeydycyayayaybybxcycycycyfynyxyxxy~yrzh{e|d{f{g{f{e{czb{`|`|_|_|`|`|a|`}`}`|a{b{c{c{d{e{f|e{e{d{d|d|c|b|a|a}`}_}`}a}`}`}a|a|b}a}`}^}]}[}Y~X~X~X~Y~Z[[~\\~]~_~a~c~c}d}c|c}c}b~b~c~b~a`^]\\[[\\]]^^][[Z[[[[[[[[ZZYYYYZZZZZZYZ[\\\\]\\\\\\\\\\\\]]\\\\\\]^^__`_^]]\\\\]]]\\[ZYXWWWXZZYXWWWWVWXXXWWWWVUUVVWXXXXXWXY[\\]]\\\\\\\\\\\\\\]_____````acccdded`\\[[ZYYXWWWWXXdxdxexfxgyhyiyiyixhwhvgvgvgwgwgxgxgwfwewdwcxcxbxcycycycydydydyeyeydydzczbzayay`y_z^y]y]y^z_z`z`zaz`z_z_z_{_{^{^{]{]{]|\\|\\}\\|\\|[}Z~ZYXXXXWX~W~W~W~WXYYZZZZZZYYXWWXXXXYZZ[[ZXWUUWWVTRQQPPPPNLJGDIGEIMNNMMLJHFEDCCBCCB@>;9:;<<<==99:::;<>@AA@??>=<<===>>>?ABBCEFGHHHJKMNPRQNG@:632359?CCFHD>BC@=:@HDBGHEBBEDJ;ENOLJJGDDKPTOQUMNMNSY^^]\\]]^]]]_adghgb^\\ZVUW[[YZYVOLLKLLJFCA?>?ABEJPSPJFDDEGFHKMMOONMKLNRSPIFFHHGFGGGGGGIJKLLKKKLLKKJJJIJKKLNPPPNLLMNOPQQQSUVUVYXWXY[^_``]\\~[}]}_}a|c}c}d|d{e{d{d|d}g}h~d~c~c~e}i}h}g|b|g}i}j}i}g}g|h|g|d|e|g|g{h{h|f|g|i|k|m|l}k}i~p~p~n}n}m}l|k|i{g{f{fzfzfzfzf{f{f{e|d|c|b|`}^~\\YWVUSQPONMLLKJIJLLLJFCBCDEFGIKLMNPPNSQRTWWZ\\__bejrwzz{{|||zywvtrqonmijigefghhgd`YQLKA:746679=?<8CI@9:@C>?CDAIGJLMNOOKCDFJLMLLKKKLNNNMMMLMMMMLLMMLJKLOOLKKKMNOPPOPQOPSUVWVTQOMKKLNONNNLKKLNPPQRSUWY[__^~a}`|`|_|_|_{`{`{`{a{a{a{`z_z^z^z^z_z`z`z`z`z_z^z]z\\{[{[{\\{^{`{b{d{e{f{g{h{i{j{j{j{k{kzkzkzjzizhzgzfzezezfzhzhzhzizjzjzkzlzjzjziyiyiyiyhyfyeydycybybybxbyayay_yayfynzuzzy{yzxuylzh{f{gzhzhzgzezc{a{_{^{]{^|_|_|_}`}`|`{a{b{c{c{d{e{e{d{d{d|d|d|d|c|b}b}b}b}b}a}a}b|c|d}d}b}_}]~[YXX~X~X~WXXXY[]`~b~c}d}c}b}a~`~_~^~][ZXWWXYYYZZYWWVWWXYYYYYYYYYYYYZ[[[ZZZ[[\\]\\\\[ZZZZ[[[\\]]^^^_^]]]]]\\[[YWVUTSSSTVVVUUTTTTVWXXWWXXXWWVVWXWXWWWXYZ[\\\\[ZZYYZZ[]_____`abbccdeeeb\\XWWVVVUUVVWXYexexfxgxiyiyjyjyjxjwivivhvhwhwhxhxhxgwfwewdxdxcxcycydydxexexexfxfyeyeyeyeydycyay`y`x_x^y_y`ybybybyazaz`zaz`z`z_z_z^{^|]|]|]|]|]|\\}[}[~Z~Y~Y~X~X~W~W~W~V~V~WXYYYYYXXXWVV~VVVVVWVUTRRRSSTUTRQQQQPQQPNLIFDLJHLPQQOONLIGEDDDDDDCB@>==>>>=<><;;::;;=?BBBA@?>>?@@@@??@ACEGIJLLKKMNPRRSQLC<744558<BGFDEC=AA?=<@IECHJFCEGGK9DOOMJIJLHEOYUQRLNMNQUY]\\ZXXZ[ZZ\\]`ced]YYUNLLRRQQPNJHHGHGFDBAABBDEGJMOLJFEGHLLKLNPRRQPOPRUUSKIIKKIHIJKJJKMNOPPONNNNNMNNMMNNOPRSSRPOPQQRSTTTVXYXX[[ZZ\\^aa``]\\~\\}^}a}d}f~f~g~h}i}g}g~hjjgffi~k~k~f~g~j~l~l~j~h}d}g|g|e|d|f|f|g|f|e|g|h|j|k|j|i|i}n}n}o}n}l|k|k{i{h{g{gzfzfzfzf{f{f{e|d|d|c|a}_~\\YWVVTROMLKKKHEDEHJJIGDEFHIJKLNPPRSPOQOSUW~WXYYY]^ahnruwyyzzyxvusrpqoqkheb_[]_cb^TLHC>?>959;<=ADAAII<9<CD@?DEBKIKMNOQRNGGILNOOONMMMNNNNNNNPPPPPOOOONOPRQMLLLNNOPPOOOOPRSTSRPLKIIJMPRSSSRRRSUWWX~Y~Z~[~\\~]}_~baa~e}e}c}b}b|b|c{c{c{d{d{d{czbzazazazbzbzbzczczbzaz`z_{^{]{]{_{`{a{c{c{d{e{e{f{g{h{h{h{i{j{j{i{h{g{fzezdzdzezfzgzgzizjzkzlzlzl{kzjzizjyiyhyfyfyeydycybybxbyay`y_y`ycyezizlymynymyjzfzdzfzg{gzfzdzb{`{^{]{\\|]|]|^|^}^}^}^|_{`{a{b{c{d{d{d{e{e|e|e|e|d|c}c}c}d}c}c}c}c}c}c~c~a~_~]~\\ZZ[[ZZXWVWY[\\^~`~`}a}`~_^]\\[YWUUVWWXXXWWVVUVWXYYYZZZYXXXYYZ[[[[[[ZZZ[ZYWVVVWWXYYZ[\\\\\\\\\\[[[[[ZYYXWUSRRRRSTTUUUTTTTVWXWWWWXWWVVVVWWWWWWXYYZZZXWVVWWXYZ[\\\\\\\\]]^_```aa`[VTTTSSSSSTUVWXgxfxhxixjykykykykxjwjviviviwiwixhxhxgwgwfxexexeydycycydxdxexexexexeyeyfyfyeyeycybxaxaxayazazbzbybybzbzbzbzbz`z_z_z_z^{^{^{^{^{^{\\|[|Z|Z|Y}Y}X~X~Y~Y~Y~Y~Y~Z~Y~Z~Y~Y~YXXXXWWVVVVVUUSROMONQRRSSRQRSRQPONMLJHHONLNQRQOMKIGEDDDCCDDDDB@@@@A?<<=<=<;;<=?BEEEDCBAABCCCBBABDFHJLMOONNNORUTQJD=9677:;;=AFD@A?<?@??>BIFEKKGGIJKN=EONNIHLSMEJWWRQLNNOQTVX[ZWVWWVVVX[^]YTQQMHGFKLKKJIHFFEFFEEEEEFGHIKKLLKIHIHMRRPPRTVUTSRSUWXVNLLMNLKMNNNNPQRSSSSRQQPOPQQPPQRRSUVVUTSSTTTUWWVXZZZ[]\\\\]_acca`^]~_}a}d~f~hikkljjklljiggmnimnmli~g~b}d}e}c|b|c|d|d|c|d{e{f{i{j{h{h{i|l|k|l|l|k{k{k{j{i{h{g{gzfzfzf{f{f{e{e|e|e|c}a~_\\ZXWUTPLJJJIFC>@GKHIHGHKLMNNNPRSUUONQQUVWVUUUUYZZ\\aelrtvyywutrrrqooolib]ZSSZ^^ZMFGD>CD=9>A@ADIGEID:;AEB>?EHELJKMOOQRRKKKNOPONNNMMNOOOOOPQSTSSRRRRQSSUTQOMMNOOPPONNOPQRRQPPNMLMORUVW~X~YYY~Y~[~\\~\\~\\~]}^}_}_~_}`}b~cce~h~h}g}e}e}d|e|e|f|f{g|g|f|e{d{czczdzdzdzezezezdzczb{b{a{`{a{b{c{c{c{c{c{c{c{d{e{e{e{f{f{g{f{e{e{d{c{bzbzczdzezezfzfzgzhzi{i|i{hzhzhzhzhzgzfyezdzbzbyayazazazazazbzbzazbzcydycydyczbzdze{e{e{c{a{_|]|\\|[|\\}\\}\\}\\~\\~\\}\\}^|_|`}a}a}b|b|c|c|d}d}c}c}b}a~`~`~`~``__~_~_~_^]~]\\\\]^^]\\ZYXXWYZ[\\\\]^]\\[[YXVTSUVVWWWWVVVVVWWXYYYYYXXYYYYZ[ZZZZZYYXXWVUTSTUUVVWXXYYYYYZZYXWVVVWWWVUUUUUUVVVVUUUUTUVVVVVWVUUUUVVWWWWWWXYYYYXWVVVVVWWXXXXXYYZZ[\\\\]][XVUVVVUUTTTUVVWgxfxhxjyjykykykykxkwjvjvjvjwjxjxixhxhwgwgxfyfyfyeydycxcxdxdxexexexeyeyfyfyfyexdxdxcxcxbyczbzczczczcycybycybyay`y`y_y^z^z^z^z^z^z]{\\{[|Z|Y|Y}Y}Y}Z}Z~[~[~\\~[~[~[~Z~Z~Y~XXXXWWWVVVVVUSSTUUTSSTUUUUUTRQONMMLKKMNOOOQPPNLJHGFEEDCDDEEDCBBBBB@===@@>==>>ADFGGGFEDDDDEEDCCDGIKMOQRRQPPPSUXL<66:<<=DBA>ADE?>=<>?A@@CJJGPOGKOLPNEEONOIIMRSPBQWSRPPPPRSUVYYXVUUTRPPQSRNKIIIJJKLLLLLKKIGGIIIIIJKLLLKKKKKJIKKLQWWUSTVWVVTSTUXXVPNNOPOORTRQRTTUVVVUUTSRQQRSRSTTTTVXXVUUUUUVWXXXY[[Z\\^]]^`cdda___~a~c~e~hkmmllllmmoljhglmnqonkh~f~g~c~_}a}b}b}b|b|b|c{d{fzizj{f{g{h{i|k{k{k{k{k{k{k{j|i|h{h{g{f{f{f{f{f{g|g}f}e~c~`][YXWUQLHHHHFD8?GLGJLLMNQQPPPQSTWWR~PQSUV~Y~Y~X~VUUWW~VSVYagkpvvtsrrrqqooonje]^MMX[YTLJVSQKEA9EH@DCIFBCB:?EE?=?GLKILOMOOPQRLKKMNONNNMMMMNONNOQSTUUTTTTTSUVVVTROMOOOPPPPRQPQRRQOQRRSTVY[~[~\\~]}]}^~_~_~`}`}`}_~`~a~a~a~a}b}c~deg~h~h~h~g~g}f|g|g|g|g|h|h|g|f|e{e{e{e{e{f{g{g{g{e{d{d{c{c{bzbzbzczczczczbzbzbzczczczdzd{e{e{d{d{c{b{azaza{a{b{b{b{b{b{c{c{d{e{f{f{g{g{gzfzfzezdzdzbzbzaz`z`zazbzczc{a{b{b{azay`y_y_z`zb{c{d|c|b|a|_}]}[}[}Z}Z}Z}[~[~[~[~\\}]}^}_}`}_}_}_}_}`~`~`~_~_~^^^^]]\\Z~Y~YZ[\\~]\\]^__]\\ZZYYWWWXYZ[[\\[ZYXVTSRSUVWWWWVVVVVVVWXXXXXXWXXYYXXXXYYYXWWVUUTSSSTTTUUVVVWXXXXXWUTSTUVWWWWWXXXWWWVVVUUTTTUVVVVVUUTUUUVVVWWWWWXXXXWVVVVVUUVVVVVUUUVVWXYYYXWVUVVVVVUTTUUVWixhxixkylykykykykxkwkvkvkvkwkxkxjxixhwhwhxhyhygygyeydxcxcxcxdxdxexexexfxgxgxgxfxexeyeydydzdzdzdzdzdydydydydyay`y`y`x`y`y`y`y`y`y_z]z\\{\\{[|[|[|\\|]|^}_}_}_}_}^}]}[}Z}Z~Z~Y~Y~Y~YYXXXXXWWWXZ\\[ZYYZ[\\[ZYWSPNMMMMNOPPOOOONNLKJIHHHHGEEEFFEDCBCDEDB@@CCA@@ABDGIIJJIHGGGGGGFGGGJLNPSTVVUTSQSRSF724<AABGED@?@@<<;<>@CCCFLNLTRINRNQPIGMPPJKORUSIMUVVTTSSTTSSVYXVRPOLJIJLLJHHJLMNOPPOOOPPNLKMNOOQRSRQOOOOOONMOOPTZZVTUWWWVUSTVXXTRQQSRPRWYWVVWXYYYYXXWVUUTUUUVWWVWYZZYXXWWWXYZYYZ\\\\\\^`__`bdec`__a~d~f~g~jlnnmllllmnmkjgmpqsokif~c~a~`~b}e}d}c}b|a|b|c|d{fzjzgzdzfzj{f{i{k{j{k{l{l{l{l|j|i{i{h{h{h{h{i{i{i|i}h~f~d~b`][YXVQKHGGHHI=AHMGNPPQRSSSRSSTTVXVTTVV}Y}\\}\\|Z|Y|X|Y|V|V}W}TUVX\\bjqqqqrrqpoooopnjdcQPZYTNILXUUOKI@IJBE@NB:?>9<@B=?BKOLINRKNOPRRKJIKMNNNMMLLLLMNNOQRSTUUUUUTTUVWWWVROQPOOQQRVVTTTSRRUWWYYY\\_~_~_~`}`}b~b~c~c~c~c~cbbccc~c~dfgj~k~k~k~j~i~h}h}h}h}h}h}i}h}h|g|g{g{g{g{h{i{i{i{h{g{g{g{g{fzezdzdzczczczbzbzbzbzczczczczczczbzazaz`z_z_z_{_{`{_{_{_{_{_{`{`{a{b{b{c{d{dzdzd{c{b{b{a{`{_z^{_{a{c{d|e{d{d{c{b{az_{^z]z_za{b{b|b}a}`}_~]~[~Z~Y~Y~Y~Z[ZZ~[~\\~]]]\\~[~[~[~\\\\\\[[[Z[[ZYXVUUWY[~\\\\]^^][ZZ[[ZXWVVVWWXXXWWVUSQQRTUVVVVUUUUUUUVVWWWWWVWVVVUUUUVVVVUTTTSTTTTTTTTTTTTUVWVVUTRQPQSTVWXYZ[[[ZYYXWVUUTTTUUUUUUUTTUUUVVVVVVVVWWVVUTTUUUTTUUUUUTTTTUUUVUUVVVVWWWVVUUUVVWWhxhxixkxkylylylylxlwkwlvlvlwlxlxkxjxixjxjxiyiyiyhygyexdxcxcxcxdxdxexexfxgxhxhxgxgxfwgxfyeyezezezfzeyeyeyeydxdxbxbxaxayaybybybybyay_z^z^z^{^{^{_{`{`|a|b|b|b|a|_|]|\\|[|[}[}Z~Y~XXWXYYYYXYZ\\^~]\\]^_``_]YUQOOOOOOPQQRQPOOPPONLJIJJJHGGFGGGFEEGGIHEEEGDBACDDEGJKMLKJJJJIHHIJJKMNQSVWYYXVTQNMKA657@IGFHGD@==<;><<>@CEEGOQOVTLQUORRLJNPPMORTVUPJQUWVTSTUVUTTURNIHGGFEGIIIIKMOPQRSSRRSSSRQPPRSUVWVUTRQQQQQPOPPRV[\\WQTVVVUTRSUVUTSRTWSOT[][ZYZ[[Z[[[[ZYXWWXYYYYYWX~[~\\~[~Z~Y~XWWWXYZZYY[]]_a``abbcb_^_~`~d~e~g~i~kmmkiijjjklkkinppqkfhid~a}c}f}d}c|a|`|b|c|d{e{hzhzezezhzj{f{h{j{j{k{l{m{l{k{k{j{j{i{i{j{j{j{j|i}i~h~feb_\\ZYWTQMJIIHINDDJOJQSSSTVUSTVUTTTWWWVXY~Y~\\~\\}[|[|[{]{Y|X}Z|[ZYVZ^`efjmprpommllmnnnkY\\eYSUSPXTRPPOFGEA@DL<:@@:9<CEDFNRLGNTHINQOLGGHJLMNMMMLKKKKKKLMNOOPQQQQRSTTVVUVRPPPNNOPPSUSRRTUVWXX[ZZ]b~b~a~a}b}c~d~e~e~f~e~edcddc~c~e~fh~k~l~m~m~l~l~k}j}i}h}h~h~h~h}h}h|h|h{h{i{i{i{i{i{h{h{h{h{h{hzgzfzfzezezdzczdzdzdzdzezezezezdzczbzbzbzaz`z_{_{_{_{]{]{]{]{^{^{^{_{`{`{a{a{a{az`{`{`{_{_{^z^{_{_{b{d{e{e|e|c{b{`|_|^{]{^{_{`{a|a}`}_~^~\\~[~Z~Y~X~Y~Y~ZZY~Y~YYYYY~X~W~W~XXYZZ[[[YYXWVUUWXZ\\\\\\\\[[YYZ[[[YXXWVUUTUTTUUUSSRTVWXXXWWWWWVVUUUTTTTTTUUTTSSTTUUUUUTTTTTUUUTTTTUUUTTTUUUTSRRQQSSUVXYZZ[[[ZXWVVUUTTTUUUUUUUUTUUUVVVVVVVVVVUUTSTTTTSTTTTTTSSSSSSTUTTTTTTUUUUTSRRSTUUfxfxhxjxlxlymymxlxlwkwlwlwlwlxlxkxkxjxkxkykyjyjyiyiygxexdxcxcxdxdxexexfxfxgxgxfxfxfwfxfyeyeyezfzgzfyfyfyfyeydxdxdxcxcycydycycycycyayay`y`zazazazbzc{d{d{d{c{c{b{_{^{\\{\\|\\|\\}[}Y~Y~X~Y~Z~[~[~[[ZZ~Z~ZYYYZ[\\\\[XUTSSTTSSSSTUVUUSRSROLKKKKKKJIHHJIIHHHKLNLJIMKGDDFGHGIMNPNLKLMKJIJLMMNOQRSTUUUTSPLGCA=9:<DKIHFC@=<;<<@>?ABEEEFNQQTSOSWSSQMKMNNMQSRSROLNQRQONOPQPONNJFDEEFFGHIIJKLNQRQQTUUUVVVUTSSUWY[ZYWSOOOOPPPPQRTWZZTPRUVUUTTUVVUTTUV[WRX_a_]]]]\\\\]^^^^[XXYZ[[[\\[XY]~^~[~Z~Z~ZXWWWXZZYY[\\]_aa`aabcb]~\\~_~a~b~a~b~d~f~fffdc~e~g~fhkklknmmnhbg~h~e}d}e}e|b|c|b|b|d|c{d{d{h{hzgzhzj{i{g{j{i{i{k{k{l{lzl{k{j{i{i|i|j|j}i}h}g~g~gfdb_\\YXUQNOMMKKKNIJNQPSTSSSSUUUXXUTSUVVU][~[~[~\\~[~[}\\|b|\\}Z}]|`~]}\\}Y|]}\\\\^]bdioqrrqooopqpndgkXVfbXWQRQRTKJFBBMJ@@B@98=FJLKPQLGMSHIOOKHEFHKLMMMMMLKJIIJJJJJJKLMMMMNOOPSUTROLMMMLMKIKNMOPRTWYWX[\\[]a~b~b~b~c}c~d~e~e~f~g~fedd~c~c~d~d~f~h~j~l~l~l~l~k~j~j}j|i|h}h~h}h}i}i|i|i{h{h{h{i{i{h{h{h{g{g{hzhzgzgzfzfzezezezdzdzezfzfzgzfzfzezdzezezezdzczb{b{b{a{`{_{^{_{`{`{_{_{`|_|_|^{_{`{`{`{_|_{_{_{^{`{`{b{c{c{c{c|b|b|a{_|^|^|^|^{^{_|_}^}^~^~\\~\\~\\~\\~[}[~Z~[~[ZXWWW~V~V~U~T~T~UVWXXYYYXXXWVUVWXYZZ[[[[Z[\\\\\\[[[[ZYWUTTUVWXXXWVVWXYYYXXXXXWVVVUTTTTTSTTTTTTTUUVVVVVUVWWWVVVVVVVVVVUUUUUUUTTTSTTVWXXXXXXXWWVVVVVUTUUUUVVVVVUVVVVVVVUUVVVUUUTTTUUUVVWWWWWVUUUUUUUTUUUUUVVVVVTSSSTUUewewgwiwlxmxmxmxlwlwkwlwmwmxmxlxkxkxkxkykykzkzkyjyiyhyfxdxcxcxcxdxdxexfxfxfxfxfxfxexexfxfxfxfyfyfyfyfyfyfyeyeydydycycydydydycydycycybybybxbycydyezezfzf{f{e{d{czaz`z_z^z]{]{\\|[}Z~Z~Z~[~[~[~[~[~[~ZYYXWWXXXXWUTUWWXWWVVWXYYYWVUUSNKKLLLKKKKJJKKIIIJLMONMMQPIEFHHIJJNPQOLJKKIHIJLNONPPQRQPPOMLKG@??=<<?EJIFC@?=<>>>?ABEFFFEFNQRSQPQVSQOLJKJKKMNONMMJLNOMLKHHHHGFDCBDDEFFGIIJKKLNPQQORUVUVVUUTTUVWY[[ZVQNNOOOOPQQRUVYWSPQUUUUTUVWWVUTWY]XU]ab`^^^]]^^^^`_[XXYZ[[[\\[YZ__\\Z[[YWVWXYZYZ[\\]_aaaaaacb~\\~\\~`~a~a~Z~]~_~]~]__~^~]~_~b}e~g~jklkkiikfd~e~f}e}f|g|e{e|e|b|f|d{d{czczh{hzhzi{k{f{gzkzjzizjzkzkzkzkzjzj{i|i}i}j}i~i~g~g~ffeca_\\YVSNKOMNMMLNNOQSSTURSRRVVVXYUURTUUT^][Z[~Y~Z~]}f}]}Z|^|b}_|]{\\z^{]|\\}[[__djnqutqoopponljbW\\nj_ZOURSVROLMNRKJFB?<=CIMOOQQOLMLJJMKJGEFHLMLMNNNLKJIIIIIIHHHIJJKKLLLNRTRPMLLMMLKJIIKLNORTVXZ[]]\\^`~a~b~c~c~c~d~d~e~f~g~gecc~c~c}c}d}f~h~j~l~lllkj~i}h|h|g}g}h}h}h|h|i|h|h|h|g|h|h|h{g{g{gzgzgzhzhzg{g{f{f{e{e{e{e{e{fzfzfzfzfyfyfyfyfzfze{e{e{d{c{c{b{b{azaza{a{a{`{_{_{^{^{^{_{_{_{_{^{_{_{_|`|`|a{a{b{b{b{b{a{a{`|_|^|^|^|]|]|]|^|^}]~]}]}^}^|]}]}\\}\\}]~[~Y~X~X~W~V~U~U}T~T~U~U~V~W~XXXXXXWWVVUVWXXYZZZZZ[[\\\\[[[\\[YWUTSUVXZ[[ZXXXYYYYYXXXXWVWWVUTTTTTTTTUUUUVVVVWWVVVWXWVVVVWWWWVVVVVVVVVVVUUTUVWXXWVVVWVVVVVVVUUVVVVVVWWVVVVVVUUUUUVVVUUUUUUVVWWXXYYYYXWVVUUUUUUVVUUVVWWVTSRSTTSewfwgwhwkxmxmxmxlwlwkxlxmxmymylylylylylylylzmzlzkzjziygyexexdxdxexexexexexexexexexexfxfxfxfxfxfyfyfygygyfyfyfyeyeyeydydyeyeyeyeyexexexewewfwfwgxhyhyhyhzhzgzezdzcybyay`y_z_{^|]|]}]}]~\\~\\~\\~\\~[[ZYWVUTSSRRSTVY[\\]\\\\[\\]^__^\\ZXVSNLMNPOMMLLLLNNKKKLOOPOOPTSKHJLKLNOPPPNJIHGFEEGKLONNNMMLJIGEDDA?>@??@BDEEB@>==?ABBCEFIJJJIIMPRPNMMPOLJIGEEFGHIJJIHFGHIIHHGFEEEEDDDFGIIIIIIJJIJLMONKNRSSRRRSSTUVVXZYWTOKLNOPPQRSTUUUTPOPSUUUUVWYYXWWZ]`[Zbdd`^^^^^_^^]][XVVWXYZ[]]ZZab\\Z]^[~W~V~V~W~Y~Z~Z~Z[\\]_``aaa~`~b~b}]}[}`}c}^}V}Z}Z}Y}W~X~X}X~W~X~^}c}f}h~jkjgegjf~c}b|d|f|g|j|g{g|g|g|j|d{d{czazh{jzkzk{j{e{i{mzmzlzkzkzjzjzjzj{i{h|h}h}h~h~g~g~feedb_]ZWTRMHROOLNNOPRUUUUVRSSRWUUWXXVTSTUQ]aYYZVZ~\\~b~a}\\}`|e|a{^{_y`{`|`|\\~^]\\`dgimnllmnmmlkg]U`kkhfWRUUVUUUUVVQSLD??CINQSSSSRPNLLMLIIIHJJLMMMNNNMKJIIIIIIHHHIIIJKLLLLQSQOMOPPOOONMNOPRSTUWY[\\]__`~a~a~b~cddd~d~e~f~h~hdbb~b}b}c}d}e}g~i~kkkige~d}d|d|d|e|g|h|h|h|h|h|h|h|g|g|g|g{g{g{gzgzgzhzhzg{g{f{g{g{g{g{f{e{dzdzdzdzezgyiyjzjzjzi{i{h{h{g{g{f{f{ezdzdzdzczbz`{`{`{_{_{^{_{_{_{_{^{^|_}_}`|a{`{`{`{a{b{a{a{a|`|`|_|]}\\}[}[|[|\\|\\}]}^|_|`|`}_}_}^}_}^}\\}[}[}Z}Z}Y}X~W~W~V~V~W~X~XXWVWWWWVVUUVVUVWWWWXYYZYYZ[[ZYWUTTUXZ]^_^]\\ZXWWXXXXXWVVWXXVUUUUUVVVWWWXXWWWWWVVWXYXXXXWWXXXWWWWWWWWWWWWWVWXYYXVUUTUVVWXXXXXWWWWWXXWWVVVVVVVVVVUVWWVVVWWWWXXYZ[\\\\\\ZYYXXWVVUUUVVWWXXYYWUSRRSSSewewfwgwjxkxlxmxlxlwkxlxmymymymymymymymymymzmzmzlzjziyhyfxfxexexexexexexexexexexexfxfxfxfxfxfxfyfyfygygygyfyfyfyfzeyeyeyeydydyeyfxfxfxfwfwgwhwhxiyjyjyjzizizgyfyeydycybyaz`z`{_{_|_}_}^~^~^~^~]~\\~\\ZXWVUTTTUVWZ\\^`a`_^_`abb`]YVUSPOPRSRPNNNNOQQONNNOPPPQRTQLLNOOOPOMKKJIHGFFEEFHJLLLKIHHFDBBBBA@ADBBBBCCB@??@ACEFFGIJKMNMLKMNOLIGGIGFDDCAABCDFFFEDDFHJKKKJIIJJIHGGHJKLLKKJJJIIJKMMLNPRQQPPQRSTUVWVVVTQOPPQRQRSTUUTSRPONQSSTTUVVWXWW\\_^[_hgc_^^]]]]\\[YXVVVVVVWZ]`b]Z_b]Z]`]~Y~W~W~X~Y~Z~[~[~[~\\~]~_~a~a~b~b~b~a}`}b}a}[}^}h}\\}W}Y}X}W}U}U}T|U}T}U}\\|a|c|f}g~h~f~c~b~c~g~g}d|_|d|h|j|m|i{i|i|i|i|c{d{dzazi{k{l{k{i{d{j{o{o{n{m{l{k{jzi{i{i|h}g}g~g~g~gffedb`^\\YUTRMITPNIMOOPRUTSTVTVWWXTTWZ[ZXUWYSYZYXZVY~Z~`~d~^~_~c~`}^}_{b}c}c~____acceikjkmopoolgdbgjjgn_XZYYZZZYXWWYPJHKOQTVWWWWUSRQPPMKKMLMLMNNNNONMLKJJJIJJJJIIKIJMPOOORRQQQSRRRRSSTTTUUVVWX\\^^^_a~a~a~a~a~bcccc~c~d~f~fc`a~`}`}b}c}e}f~h~i~ihfdb~a}`|`|a|b|d|f|g|g|h|h|h|h|g|f|f|f{f{f{ezezfzgzfzf{g{g{h{i{i{h{g{e{dzczbzbzdzfyhyizizj{k{k{k{j{j{i{i{i{hzgzfzdzczbz`{`{`{_{_{`{`{`{_{_{^|^|]}^}_|`{`{a{a{a{`{a{b{a|`|`|^|]}\\}Z}Y|Y}Z}[~\\~\\}]|^|^}^}_}_}_}^}]}]}^}^}^}]}[~Y~Y~X~X~X~X~XXWVWXXXXWVVWWWVVUTTUVVWWXXYYXWWUTSUWY[\\]^]\\[YXWVVWXXWWWXYYYXXWWWWXXXXXWXXWWWVUVWYZYXXXXXXXXXXXXWWWWWWWWWVWXYYYWUTTUVVWXXXXWWWWWWXXWVVUUUUVVVVVUUVVVWWWWWWXYYZ[\\\\\\ZXWWVVUUUTTTUVWWWWWVTRPQSSRewdwewfwhxjxlxlxlxlxlxmynynyoyoynynynynynynznzmzlzjyiygxgxgxgxfxfxexexexexexexexfxfxfxfxfxfxfxfyfyfyfyfyeyeyeyeydydydzdzdydydydydxexfxfxfxgwhwixjyjyjzjzjyjyiyhyfyeydycyczczczbzb{b{a|`|_}_}^}]~\\~\\ZYXWWVVWXZZ[\\]]\\\\[ZZZ[\\\\[XUSRSRSTTTSRQQQQQSSQQQPQPPOOPPNLMQQONLJIGFGHJJIIIIJKLMNNMJHHHEDEEFDEEGEEEEDCBABBDEGIJJKKLOMLLKJIHIFECBCBBCDECCFEFFFEDDEHKMNONMMMMMLKJIJKMMMLLKLLKKKLNONNPQRRQQRRSTUVWXWVUSRRSTUUUTTTSSRRQPQRRRQSTTTTTSUY[[[`heb^\\]\\[[ZXWVUUVVVV~VW[_ac_Z]a_Z[_`~\\~Y~X~X~Y~Z~[~\\}]}^}_~`~b~c~b~c~b~`}`}c}c}]}_}f}]}\\}[}Y}X}X|X|W{V{W|W{Z{]|`|c}c}d}b}a}`}^|c|d|c|]|c}h}l}p}l|k}m}f}f}e|d{ezd{j|l|n}k}h}e|k|p}o}o|m|k|j|i{j{j|i|i}g~g~fffeedb`^[YWTSRNLUPQHMMNPQTRRRVTVXYWTTW[_`\\XY]XWVTX\\V]Z~\\ba]_`}`}_|c}e~fc_abefgi~k|j~hilorsrpnmnqomii_b`^a]^_[YZ[ZVSUXZZYXZZZYWTSSSRONNQQOMNPRRRRRQONMMMLNNNMMMNKMQTTSSTUUUTVSRSTVWXWWWXXXXZ_ba_`b~c~a~_~`~bbba`~_~`~b~b^\\]~\\}]}_}b}d}e~g~g~g~e~d~c~c}b|`|_|^|_|`|c|d|f|h|i|i|h|g|f|e|c|c{c{bzbzdzezfzf{g{h{i{k{l|k|j|h|g{e{d{c{czezfzgzh{i{k|l|m|m|l|l|k|k|i{g{f{dzbz`z`{`{`{`{`{`{a{a{`{_{_{^{]|]|^|_{_{_{_{`{`{`{a{`|_|^|]|\\|\\}[}[|Z}Z}Z~[~Z}[|[|[|[}\\}]~]~]~^~^~^~^~]~]~\\~[~Z~Y~Y~Y~Y~Y~X~X~X~XXYYYYXXYZYYXWWWWXXXXXYYYXXXWUTVWXYZ[[[ZZYXWWWXYYYXXYZYYYXXWWVVVVWWWXXWWVUVWX[[[[[ZYXXXXXXXXWWWXWXYYYXXYZZZXWVVVWWWXXXXWWXXWWXXWWVUUUUVVVVVUUVVUUUUUUVWWWWXXXXXWVVUUUTTSSSTUUUVVVUTRQQQQQdwcwdwewhxixlxlxlxmxmxnynyoyoyoyoyoyoyozozoznzmzlyjyhygxgxgxgxgxfxexexexexexexexfxgxgxgxgxgxgxgyfyeyexexexeyeydydydyczdzdydydydxdxexexexfxgxhxiyjzjzjzjyjyjyiyhygyfyfyeyeyezdzdzc{b{a|_|^|^}]}]}\\~[~Z~YYYY~YXYZ~[~\\~\\~\\~\\~[[ZXWXXWWVVTQOPPQSUUUSRRUVTRSSRRQQPONMMNNLKLPONLKHEDCDHLMMMMMNNNOOOMJIIHGGGHHGIIJHHHGFEEEFFGILNMJLJKOLHIGFEEDDCDEFGGGGHEINOKHFDEEGILOPQPOOONNNMKKKLMNNMLLLLLLKMOOOOQRSSRQRRSSUVWWWVUSSSTSSTTTUTSSSSRRRSRQQSSSSRSSTXYYZ_bca]\\[ZZYXWWVVUVW~W~W~W~X~Z~]~`a^[\\`_[[`a~]~Z~Y~Y~Y}Z}[}\\}]}^}_~`~b~d~c~c~c}a}`}c}e}b}b}e}^}^}]}Y}X}Y|Y{X{XzZzZ{[{[{^{a|a|b|a|`|_|\\|`|d|a{^}d}g}n}p}k|j}j}g}e}e|e{ezf{j}k}ole}e}k}o}p~o}m}k}i|h|i{j|i|h}g~f~fedba_\\[[ZXVTQOONRPQTNMMOQRQOPRRPQTTRRSY`fcWQ^^[_UWY\\[WX_a^^`~_~^|b~fif`cdejkkkj}h|h~jmnprrqqtrpokhda]ce[^aba\\[ZYZ\\`g]\\Z[ZZZVTSRQROSTUTPNOQSTTSSSSRQPPPQQQPOOOOPRVWVVVXYZ[[XTTUVVVVWXYYYZ\\`ba_`bb_~]~^~ab`^]~]~^~_~^ZXY~W~X}[~`~d~e~f~f}e~d~c~c}c}a|`|^|]|\\}]}_}b}e}h}i}h}g}g}f}d}b|b{a{a{a{b{c{d{e|g|h|j|k|m|l|k|i|h{g{f{d{c{dzezfzh{i{j|l|m|n|m|l|k|j|h{f{d{b{a{_{_|`|`|`|`|`{`{`z`z_z_{^{]|]|^|_{^{^{^z_{_{`{`{_|^|^|]|]|]|\\|[|[|[}[~Z~Z}Z}Z|Y|Z|Z|[}\\}\\}]}^}^}^}]}]~\\}[~[~Z~Z~Y~Y~Y}Y}Y~X~Y~Y~Z~Z~Y~YYZ[[[ZZYYXYXXXYYYYYY~YYYWVVWWYZZYYZYYXXXXXYYYYYYYYYXXXWWVUUVWWWWWWWWVVWY[\\\\[[[ZYXWWXXXXWWWWXYYYYYYZZZZYXWWWWXXXXWXWWXXWWWWWVVUUUTUVVVVUTUUUUTTSTUVVVVVVWWWVUUTTTTSSRRSSSSTUUTSRQQPPPdwcwdwewgxixkxlxmxmxmxnyozozpzoyoyoyozozozoznzmzkyiygygxgxhxhxgxfxexexexexexexexfxgxgxgxgxgxgxgyfyeyexexexeydydycxcyczczcycycycycxcxcxcydyexfxgyhzh{hziziyjyjyiyhyhyhygygygzfzfzdzbz`{^|]|]|\\|\\|[}[}Z}Z}[}[~[~[~[~[~\\~]~]}]}]}\\~\\ZYWVVUTRQPONMNOPPQQPPPRTUTRRSRQPOMLKKLNNMLLLKJJIHHHGGKNPPPPPQQQQQOMKJJJJKLLMLLMMKKKJIHHHIIIKMNNJLIHOJEECBAACEGIJKLKKKLILSTPKHFFHJMPRRRQQQQQQPONMLLMNNMLKLMMMMNOPQQRSSRQQQPQSTUUVVUUTTTUTTUUUUTTUVVVVVUSQSUWVUSRRTVWXY[_a`][YXXWVVWXXXX~X~X}X}Y}Z}Z}[~^_^\\\\^`\\Z_c~a~^~]~[~Z}Z}[}\\}^}_}`~b~d~e~c~e~f}b}b}e}g}d}c}c}a}`}^}[}[}[|Z{Yz[y]y]z]z]|_|`}a|`|_|_|^|\\|^|a|a|a}b}f}j}j|h|h}i}h}i}h|h|h|i}l~nqh`g~l~oo~o~l}j}h|g|i|i|g|g}f~ffeb_[YXWWWVTQNLMPQOPTNLKLMNNLKMNLMPPNMOTWWVOKXZW[PSUXVPU\\b`]cZ\\~_cifbfggkmkomh|g|g~ijlpsuuvtrrokiggf`X_fid`]]]]_cj`_\\^ZZ[VTSRQQQRSUVQPORUWWWVVVVUTTTTTTTSRRRSUWXWWW[]^^^[WUUUUUUVWYZ[\\]`a```a`~]~Z~]~_^\\ZY~Y~Z~Z~XWWU~S~U~X]ac~e~e}c}b}a}b}b}a|_|]|[}Z}Y}Z}]}b}f}h}g}f}f}e}c}a|a{a{`{a{a{b{c{d|f|i|l|n|o}n}m}k}j|i|h|f|e|e{dzdzf{g{h|i|i|j|i|i|h|f|d{b{`{_{^{]{]|]|]|^|_|`{`{`z`z_z_z_z^{]{^|^{^{]{]z^{_{_{_{^|]|]|^|^|^|]|]|\\{\\|\\}\\~\\~[}[}Z|Z|Z|[}\\}\\}]}]}^}^}^}]~\\~[~[~[~Z~Z~Y~Z}Z}Z~Z~Z~Z~Z~Z~Z~YZ[\\]][[[[[ZYYXYYY~Y~YZZZZYX~X~XYZZZYYYZZYXXXXWWXXXXXXWWVVVUUUVWWWVWXXXXWWXY[\\\\\\[[ZYXWWXXXWWWWXYYZZ[[[[[ZYYXXXWXXXXXWWVWWWWWWWVVUUUUUUVVVVUTUUTTSSRSTUUUUUUUUUUTTSRRRQQQQQQQQQQQQQPPONNNdwcwdwewgxixjxkxlxlxlymymynzozozozoyoznznznzmzlzjyhygxgxhxhxgxfxfxexexfxfxexexfxgxgxgxgxgxgxgxfyfyeyfxfxfxfyeydydxdydzdzdyeyeydydxdxdxdydyexfxfygzg{gzhzhzhyhyhyiyiyiyiyiyiygyfyeycyaz_{^{^{]|]|]|]|]|\\|]|]}]}]}]}\\}\\}]}^}^}^}^}]~\\ZXWVUTRPONNNNNOOONMLMNOOOOOPPONLKKLNPRRQPMLLLMMLMMKIKMONNOOPPPPONLIIJKKKLNPNNOOMMLKJIIJKLLLLNQMPLIOIEDCCDEGHKMMOPONOPKMSVSMIGHJLORSSRRQPRSSSRQPOOOOOONMNNOOPQRSRRSSRQPOQQRSTTTUUUUVVVVUVWWWWWXXY~Y~Y~YXWUTVYZYXVUUVWWXXY[\\]\\ZYYYXXYZ[[[[~Z~Z}Z}Z}[}[}\\~]~^~^~][]a`\\_c~d~c~`~]~[}[}[}\\}^}_}a}c~d~e~d~f~g~c~c~f~h~f~e~d}a}_}]}]}]}[|Z{[z^y_y`z`z`|a|a}a|`|_|_|^|]}_}`}a|d}g}g}g}e|f|e}f}i}k}k}k|k}j~nqldcfjlm}l}j|h|h|g|h|f}d}d~c~cc`\\WTRQRSTUSQNKLPWPLNNLKJJKKIHJKGJKKJIJLKJKKMMOLTMQQQOLTZ`^[`WY]`daafgghlltsk~g{f|g~gglquwvuuurooong]^ckceca__^`ci``^`\\Z[VTSSRQQQRTURPQTWXYXYYYYXXWWWWWWVVVVWXZZXWY^_aa`\\WUSRSSTUWYZ\\\\]__^]\\\\[~Y~Y~Z~\\[YXY~Y~Y~Y~VVWU~U~V~X~[^a~b~b}a}`}a}a}a}_|]|Z|X}W}V}W}X}Z}]}_}`}a}a}a}a}a|a{`{`{`{a{a{a{b|e|h|j|l|m}m}l}k}j|i|h|h|f|d{c{b{b|c|c}d}d}d}d}c}b}a}_|^|]|\\|\\}[}Z}Z}[}\\}]|^{^{^z^z]z^z_z^{]{^|]|]{]z]{^{_{_{^{]|\\|^|_|_|_|^|^|]|]|]}]~\\~\\}\\}\\|\\|\\|\\}]}]}]}]}]}]}]}]~\\~[~[~[~[~[~Z~Z}Z}Z~[~[~[~[~[~[ZZ[\\]]\\[[[[ZYYYXYY~YZZ[[\\[[~Z~Z[\\\\[ZYYYYXXXWVVVVVVVWWWVVUUUVVVWXWWWXXXWWWWXZ[[ZZYXWVVVWWWWWWVWWXXYYYYYYXXWWVVUVVVUUVVVVVVVVVVUUTTTUUVVVVUTTTTSSRQPQRSSSSSSSSSRQQPONNNNMMNNNMMMNNMLLKJJJdwdwewfwhxhxixjxkxjxjykykylylymymymzmzmzmzlzlzkyiyhxgxhxhxgxfxfxfxexfxfxfxfxfxgxgxgxgxgxgxgxfyfyfyfygxgxhygygyfyfxeyfzfzfyfyfyfyfxexexeyeyfyfzfzfzgzgzgzhzgygyhyhyhyhyhyhygyfyeyeyczb{`{_{_|_|_|_|_|_{_{_{_|_|_|_|_|_|_|_|_|_|^}^~\\~Z~YWVUTRQPOOONNOONNMLMNNNOOPPPPPOPPRTUUUTSPONNNNLLKJHIIJIKKMNNONMLJIJKKLLLLNLKLLJJJIIIIJJJJJJMMLOLHKGEFFFGHJKMNNNOOONOKKOQPKIKKMOQSTTTRPPSVWUUSRRRRRSRRQRQRRRSTTSSRQQPQQSTUUVVVWXYYZYYYXXXXYYYZZ[~[~[~Z~Y~X~WXZ\\\\[ZZY~Y~Y~Y~YZYZYZ[[ZZ[[[Z[\\\\\\\\Z~Z}[}[}[}\\}]}]~^~_~_~^]_bb_`c~d~d~b~`~^}]}\\}]}_}a}c}c}d~d~d~f~g~eeehge~d~c}_}[}^}_}\\|Z{[{^z^z]z_z`|`|a|a|_|^|]|]|^|`|b|c|f}i~i~g}e}b}e~g~k~l~m~m~j~j~kleb~gfgij}h}f|e|e}d}d~b~^~\\~[[ZWSQQOOPQQRQQONMPWPLNNMLKKLLLLMKHHIKLLNLKJIMMMLIPLRSRMKUY]ZX\\TVZ[_[^bdcekovunjg|f}hffksxxwwwtrtwqjfdoedccca_\\]_e^_^a]\\]XUUVWWWVUVUTSSVXYYXZ[[[[[ZY[ZYXXXXY[[\\[ZZ\\__``_\\WTRQRSTUWY\\]\\\\]]]\\~Y~Y~XY~Z~Y~\\\\YY\\~]~\\~YXXY[\\~[~[~]~_~a~b~`}_~_~_~_~_~]}Y}V}T}S}S}T}T}T}T~V~X~Y~Z}\\}]|^|_|_|_|_{_|`|`|a|b|d|f|h|i|i|i}i}h|h|g|f|d}b|a|_|^|^|^}^}^}_}_}^}]}]}\\|[|Z|Y|X}W}W}X}Y}[}\\|]{]{\\{[|\\|]|]{]{^|^}^|^|^|_|_|_|_|^|]|\\}\\|]|^|_|_}]|\\|\\}\\}\\~\\~]}]}]}]|]|]}^}^}^}^}^}]~]}]~\\}\\}[}\\}\\}\\}\\}\\}\\}\\~]~]~]~]~\\~\\~[[[[[[YXXYZYXWXXXY~Z[[\\]]^]~]~]]^^][[YYXWWWVUUUUTTUUUUUUUTTVWWXXXWWWWWWWXXXXYXXXWVUTTTUUVVVWWWWXXYYYXXXXXWWVVUVVUVVUVVVVVVVVVVWWWVVUTUUUUUUUTTTSRRRRQQQPOOPPPPONLLKKKKKJKKJIIIIIHHGFEEEewewewfwhwhwhwiwixixiyiyjxkxkykykykykykykykyjyiyhxgwgwgxgxfxexfxfxfxfxfxfxfxgxgxgxgxgxgxfxfyfyfyfygyhyhyhyhygygyfyfyfyfyfygyfyfyfxfxfxfyeyezfzeyfyfzgzgygygygygxgxgxfyfyfyeyeydydyczbz`z`z`{`{`{`{`{`{`{a{a{`{`{`{`{`{`{`{`{`|_|^}\\}[~Y~XVUTSRQPPOOONNNMLMNOOOOPRRRQQQRSTVWWVUSQONNNMLKKIHIIIIIJKLMMLLKJIJJKKLLKLIIIIIIHIIIIIHHHHHIHIIIGIGHHIIJJKLMMMMNNMMMKJMNMKJLMNOQTUUTQNOSXXVVUSSTTTUUUTTTSSSTUTTSQQPPRRTUVWWWXXZZZ[[[ZZYYZZZZ~[~[~[}Z}[}Z}Y~X~X~X~Z~\\~]~\\~[~[~]~\\}[}[}Z~Z[[[Z[ZZ[\\\\\\[[\\\\\\[Z~Z}Z}Z}[}\\}]}^}_}`}`}_~_~a~d~d~a~b~d~e~d~c~a~`}^}]}^}`}b}d}d}d}d}e}g~hfeefg~e~d}c}_}\\}^}_}[|Z|[{_{]z[{]{`{^{`|_|^|\\|\\|\\|^|`|c|e|g~i~i~h~f~b}e~h~l~llki~i~ig~d~d~e~dde~d~b}_}_}_~^~]~[XVSRSRQPQNNOPOPPOONNOPPMNOONMLLMMNNKIHJLNOPNLNPPQPVMNRVWVTPSYZXTUTTXYVPZ[Z\\dgostslh|f}hecgryxxxxtssspnmpldcdcdc_ZXZ\\^^^^^^\\ZWWYYZZYWWWUTUWXYYXZ\\\\\\]]\\Z\\\\ZYYZYZ]\\]\\\\\\^`_a`]\\WTRQPRTVVZ]^]\\]]\\[~X~X~Y[[Y\\~\\~ZY]_]~Z~Y\\_^][~\\~^~`~a~a~`}^~]^^\\~Z~W~T~S~R}R}S}T}T}S~TUV~W}X|Z|[|\\|]|^|^|_|_|`|`|a{b{c{d{e|f|g|f|f|f|e|d}b}`}^}]|\\|\\|\\|[|[|\\}[}\\}[|[|Z}Z}Y}X}X}V}V}V}W|Z|[|\\|[|Z|Z|Z|[|\\|\\|]|]}^|^|^|_|_}_|_|_|]|\\|\\}]}_}`}_}]}\\|[}[}[}\\}\\}]}]}]|]|]}^}^}^}^}]~]~]~\\~\\}\\|\\|]}]|]|\\|]|]}]}]}]~]}]}\\}\\~[[ZZYYXWWXXWWVWWXYZ[\\\\]^__^~___^]\\[YWWVUUUTTUTTSTTTUUUTTTUVXXXWWWWVVVVWWWXXWWVVTSRRRSTTUUVVVWWXXXXXWXWWWVUUUUUVVVVVUVVVVVVVWXXXWVUTSTTTTTTUTSSRRQPPONMLMNONMLKJJIIIIIIIHHHGFEEEDCBBBBewfwfwgwhwgwgwgwgwgxfxfxgwhwhwiwixixixiyixixhxhxgxgxfxexexexfxfxfxfxfxfxfxfxfxgxfxfxfxfxfyfyeydyeyfyhyiyiyiyiyiyhygygygygygygygygygyfyeyeyezezeyfyfygygyhygygyfxfxexeyeyeydydycydzdzdzdzczbzbzbzbzczc{c{c{b{b{b{b{c{bzbzb{a{a{`{^|\\}[}Y}X}W~V~TTTSRQQPPOONMLMPSTSSTUUUUUVWWXYXWUSRPNMMLLLKJJJKLKKJJKKLLKJIIJJJJJJIHGFFFFGGHHGGGGFFEFEEDEEEFHIKKLLLLKKJJJJJJJIIIHIJKKLOPPPSUWVTPMOTYXVXWUTVVWWXXXXWVTTTTTSRQPPQRTVWXXX~W~XY[\\\\]]]\\[YXYYZZ~Z~Z~Z}Y}Z}Z}Y}X}X}Y}Z}\\}\\}[}[}\\}]}\\|\\|\\|\\}\\}]~]~^^]\\[[\\\\]\\\\\\\\[ZY~Z~Z~Z}Z}[}]}^}_}_}_}`}b}d}e}f~e~e~g~g~f}c~a~`~_}^}_|a|c}d}e}e|f}g}h~h~hgdde~c}c}b|^}^}]}]|[|[|\\|_|\\|Y|\\{]{\\{^{^{]{\\{\\{\\{^|a|e|f|i~i~i~i~h~hikmmjgde~f~f}e}b}a}a}`}_~\\~[~X~X~Z~YXVSQPQRQRQQOPQPPOONNNOPPQQRRRQPOOPQRQLJKMORSTQPRUUVT[UTW[[ZWSVWWUTRQUXVRMUTWbjorononh}i~feceqyyxxvuuuutsrrleeecef`WTVXZ[\\]^_^]YY\\^``_][ZXVVWXXZY[^]^_`^[]][Z[][]a__^^^^`^^^\\[XTRQRTVVW[__^]~]}]~]~\\~[~\\~]``Z^~^~ZX^b_~^~^ada^]~_~a~a~`~`~_~]~\\~\\~YWUSST~T~U~U}T}S~TTTVX~X}W|X|X|Y|[|]|^|_|`|`|a|a|`{`{a{b{c|c|c|b|b|`}]}[~Y~X}X|X|X|W|W|W}W}X|X|X|Y}Y}Y}X}X}V}V|U}V}X|Z|[|Z|Y|Y}X}Y}Y}[|\\|]}^|^|^|_|_}_~_}_}^}\\|Z}\\}^}`~^~\\~\\}[}Z}Z}[}\\}]}]}]}\\}\\}\\}]}]}]~]~]\\\\~\\}\\|]|]|^|^{^|^|_}_}_}_~_}_}^}]~\\~[~Z~YXWVTTUTTUVWXYY[\\]^_`a``aaa`^\\[YVUTSSTSSSSSSTTSTTTSSRTUWWVVVVVVUUUVVWWWVUTSQPOOQRRSSTUUVWWXYYYXXXXXWVUUUUUVVVVVVVWWXXXXXYZZXVSSRSSRRSTVVSQPOONMKJIIJKLLJIHGGHHFFGGGFGHFCAAA@@????gwgwgwhwhwhwgwgwfwewewewfvfvgvhwhxhxhxhxgxgxgxgxfxfxexdxdxdxexexexexexfxfxfxfxfxexexexdxdydydydyeyeygygygyhyhyhyhygygygygygyfyfyfyeyeydydyezfzfyfyfyfyfyfyfyfyexdxdxdycycybycydydyeyeyeydydycycyczdze{e{d{d{c{c{c{d{dzdzczczb{a{_|]|\\|[|Z|Y}X}V~VVUTSSRRPPONNOQSTSSSSRSSTUUUUUTSRPOMLMMMMLLLMNPQQPPOONNMKJHHHIHHGGGFDDCCDEFEEEEEEDCDEDDCCDEFHJLLLLLKKJIIHHHHHHHHIIJKMNQRRRTVXVSOLNSXYWYYWUVWWXXYYYXWUUTTTSRQPQSUWXWW~W~W~W~WXZ[[[[ZZYWXYZZZ~Z~Z~Z}Y}Z}Z}Y}X}Y}Y}Z}Z}Z}Y}Z}[}[}[|[|\\|\\}]}^~_~``_^\\[[\\\\[[[[ZYXZ~Z~Z~Z}[}\\}^}^}^}^}`}b}d}f}g~f~g~j~k}h}c}`~`}`}`|a|b|c}d}e}e|e}f}g~h~jgbbb~b}a|a|^|_|`|_|\\{\\|]|`|]|[|\\{Z{\\{_{_{_{^{]{\\{^|a|e}g}j~j~j~j~k~jgdcbcehg~e~d}b}^}]}]}[}Y~W~W~U~V~V~UTRQQRTUUTSRQRSSSSSRRRRSSTTUTTSRQQSTTTNLMOPTUWUTWZZZU][ZZ^_]YVYXXWVTQVYVTQRN[hjnnkh|k}p~k}hffgiovxxxwuuuuuutsolkjghhaWTVXZ[\\]^_^][\\^bcdca_]ZXVWXX[[]]\\^`a_[\\]\\]^`^^a``^]]]^[][YZYVTTUWYWX\\``^]~]}^~^~]~]~_~_`c__~`ZX_b`~`~acda]^a~b~a~`~_~^~^~\\ZWTSTUW~W~X}X}V}U~U~V~W~Y~[}Z}X|X|W|X|Y|[|]|^|_|_|`|_|^|^{^{^{_|`}_}^}]}]~Z~W~V~U}V}W}X|X|W|V}W}X|Y|Y|Y}Z}Z}Y}Y}W}W}V}V}W}Z}Z|X|X|W}V}W}X}Y|Z|[}[|\\|\\|\\}]~]~]~]}\\}Z}Y}Z}\\}^~]~[~[}Z}Y}Y}Z}[}[}[}[}[}Z~Z~Z~ZZ[[~[[~[~\\}\\|]}]}]|]|]|^}^~^}_}_}_~^~]~\\~[ZXWVUTTTRRTUVWXXZ\\]^_``__``a`_][XVTSSSSTTSSSSTTSSSTTTSSTUUTTUUUTTSSTTTTSRRRPONMMOPPQQQRTUVWXYYXWWXWWVUUTTTTTTTSSTTSTUWWVVWVVTQONNONNMNPRRONMLJIIGFEEFGHGFEEDEDDDCCDDCCDCA?>>>==<<<ixiwiwjwjwiwhwgwfwewdwfwfvgvgvgwgxgxgxgxgxgxfxexdxdxdxcycydxdxdxdxdxdxexexdxdxdxdxdxcxcycycycycydydyeyeyfygygygygyfyfyeyeyeyeydydycycycycydyeyfyfyfyfyfyfyeydycxcxbxbyaybybybycydyeyfyeyeydycycydyezfzfzf{e{d{d{d{ezeyeyezdzb{a{`{_{^{]{\\|[|Z}Y}Y~X~VUUTSRQQPOOPQRQPPPOOPPOPPPOONNMLLLKLMMLLLLMOQSTTTSRQOLJIGFFFEEDDDDDDCBCDDDCBCDEEEEFGFFFGHIJKLMLKKJJIIIGGGHHIJKKKLMNPSRRQRTWURPNPSVVUWWVUWXXXXXWWWVUUUUTSRQRTVXYXWW~V~U}S}T~U~V~W~WWXWWWYZ[[\\[~Z~Z~Y}Y}Y}Y}Y}X}Y}Y}Z}Y}X}X}X}Y}Y}Z|Z|Z|\\|]}^}`}a~`_][[ZZ[ZZZZYXY~Y}Z}[}[}[}\\}\\}\\}]}]}_}a}b}d}e}f}h}j}j}h}d}a}a}b}c|c|c|c|d}d}c|d}e~fhiea`a~a}`|_|^|`|b|_|\\{\\{^|b|`|_|_{\\{]{`{a{`{`{_{_{`|c}f}h}k~m~m~k~j~hebbeikif~c~`}^}[}X}U}T}U~U~U~V~V~VUSRQRTWYXUSRQQSUVWWWVVVVVVVUUTSRQRTUVVRPPQRSTXVVX[^ZV^]Y[]_]YUXXXYWURX~\\YWVPO`haejih}kmmjkhkmquwxxwvvvwuuvutwsqonjaZY[\\^^^^^_^^\\]_ceedca_]ZXWXXZ[]]]^__^[\\]\\]^^[[^\\\\\\[\\Z[XYYWXYYXXZ\\]ZZ\\``]\\~^}_~`~_~_~`aadbbb^[`bb~c~deeb__aa`^\\[~[~ZXVUVWXY~Z~Z~Y}X}X~X~Y~Y~Y~Y}Y}X}X}X}X}X}Y|Z}[}\\}\\}]|\\|\\|[|Z|Z|[}[}\\}\\}\\}[~Z~Y~X~X}Y}Z}Z|Y|X|W}X}Y}Z|[|\\}\\}\\}[}[}Z}X}X}X}X}Y}Y|W|V|U|V}V}V|V|W|X}Y}Y|Y}Y}Z~Y~Y~Z}Y}Y~X~Z~\\~]~[ZZ~[}Z}Y~Y~Z~Z~Z}Z~Y~X~X~W~WWWWWXY~Z~[}\\}\\}\\|\\|\\}]~]~^~^^~^~^~]~\\[ZXWVUTTTSQRSRTUUWXZ\\]^^^^^_`_][YWVUTUUVVVVVWWVVUUUUUUUTUTSRQRSRQQPPPPPPPPPPQPONNNOPQPPPQSTVWWWWVVWVVUTTTTTSSRQQQPPPPPOOONPQPNMKJJJIHHHHJKIHGGEEDCBABCCCCCBBBAAAAA@AAA@A?>=<<<<<<;;jxjxjxjwkwjwiwgxfwewewfwgvgvgwgwfwgwgwgwgxfxexdxdxcxbxcycxcxcxcxcxcxcxcxcxcxcxcxcxcxbxbybycycxcxdxdxdyeyeyfyfyfyfyexdxdxdxcxcxbxbxcybybycydyexeyeyeyeyeyeyeydxcxbxayayayaybybycxdyeyeyeydycycycydyezezezezezdzdzezfzfyfydzczbzbz`z`{`{_{^{^|]|[}Z}Y~W~VUUTSRQPPOOPPOMLLMMMMMMMMMMLKKLKKKLLLLLKLMOQTUVVTQONLJHGEDCDCDCCDDDCCCCCCCBCDEFFFGHHGHHIIKLMMLKJIIIIHHGIIKMOOOONNPQRRQQRSUTRQOQSUUTVUUUVXXXXWVVVVUUUTTSRRSUXYXWV~U~U}T}R}S~T~U~U~VVVVVW~Y~Z\\\\\\\\~[}Z}Y}Y}Y}Y}Y}Y}Y}Z|Z|Y|X|W|W|X|Y}Y|Y|Y|[|\\|^}_}`}_~^]\\[[ZYXWYZYW~Y}X}X}[|\\|\\|\\|\\|\\|\\|]|^|_|a|c}e}f}g}i}i}g|d|a|a}c}d|d|c|c|e|d}c}c}e~fghea`~`~`}`|_|]|a|b|`|[{^{`|_|_|b|b|^|]|`|`|`{`{`{`{a|c}f}i}l~n~mligfffghgda~_~^}\\}Y}W}U}T}T~T~U~VVVVTSRRUXYXVTRQQSUVXZ[ZYXXWWVVUSRQPQSVVWSRQSRQRWVTZ_\\XV]]WZ\\^[YUXYXWXYR~W~^~][YRX^a`cghhklmjginnqstvuwwwwvvvvuuttssqmgddddcca_^__^]^_ceedcb`^[YXYY[[]\\]^^_^\\\\\\\\\\[[Z\\\\ZZ[\\[YZ[XUWY[[[\\^_`^]^``]\\^~_~_~_~_~acafdcc`_`bcd~deea_`aa_[YXXXWVUVWX~Y~Y~Z~Z~Y}X}X}X~X~X~X~W}W}W}W}X}X}X}Y}Y}Z}Z}Z}[}Z|Y|X|X|Y}Z}Z|[|\\|[}[}Z}Z}Z}Z|[|\\|[{Y|X}X}Y}Z|\\}\\}]}]}\\}[}[}Z}Y}X}X}Y}X|V|V{U{V|V|V|V|W|W}W~W}W}V}W~W~W~U}U}W~X~Y~X~YYZZ~[~Z~Y~Y~Y~Y~Y~Y~X~W~VVVUUUVVXY~Z~[~\\~\\}[}[}\\~]]~]^~^~^~]~\\[ZYXWVUUTSRSRQQRTUVXYZ[\\\\\\]^^]\\ZXVVUUVWXXXXXXXXXWWWWWWVVUTSQPQQQPONNNNNNNOPPQPOOOPPQQPOOQSTUVVVVVVVVUUTTTSTSSQPOOOONNMMLLMMMLJIHGFFEDCDFFFFEDCCBA@?>?@@@@@@@????>>>??????=<;;;<<;;;kyjxkxlxkwkwiwgwgxfxhxixiwiwhwhwhwhwhwhwgxfxexdxcxbxaxaxbxcxbxbxaxaxaxbxbxbxbxbxbxbxbxbxbxbxbxcxcxcxdxdydyeyeyeyeydxcxbxbxbxbxbxbxbyaybycydyexexeyeyeyeyeyexcxbxayay`yayaybybycxdyeyeydycybyaybycydzezezdzdzdzezfzfzfyeydzczbzbzazaza{a{a{a{`|]|\\|Z}X~W~V~UTSRQPONMLMLKIIJJJJKKKJJJKKKLLLKLLLLKLMNOQSSSROKHGHIIHGGFGFEDDDFGFEDDCCCBDFGFHIIIJJKKJIKLLLKJIIIIHHIJLMOQSSSSRQRRSRQQQQTRRRRRSTTTTTTUUWYXVUTTTUUTTTTTTVWWXWVTSS~U}R}Q~R~S~T}U}V~V~V~W~W~Y~[~\\~]~^~]~]}\\}Z}Y}X}X}Y}Y}Y}Y}Z|Z|Y|X|W|X|Y|Z|Z{Y{Y{[{[|]|]|^|^}]~\\~\\~\\\\[[Z[][W~U}Y|Y|Y|]|]|]|^|^|^|]|]|]|]|]|_|c|d|e|h|h|g|e|c|b}c}d}d}d}d|e|e|d}d}e~ffed~d~c}a}`}_|`{\\{`{b{`{[{^{_|_|`|d|c|_|^|`|`|`|a{b{b{b|d}f}i}m~n~nljiiihhea^\\~[~Z}Y}W}V}U}T}S~T~UVVUUTSRTVYYXVTRRQRTVYZ[ZZYYYYWTRPPOPQSUWXVUUVSPPTVTWZXUV\\\\TXZ[ZXUXYZYZ[V~[~`~]~[~[V[\\^_abehjkln~klnnppprsvvvvuvvvuuvwwwvtqrrqpnjea_`^^]^`deedcba`^\\[[[\\\\]]]]]]~]~\\~\\~[[[YXWYXXXZZYYZ[WUVX[]^^^`````a`^\\__~_~^~`~adagfedccccdddddcbaa_\\YUTUVVUUUUU~V~WXXW~W~V~UUUU~U~T~U~V~X~X~X}X~W~W~W~X}X}X}X}W}W}W~Z~\\}]}^}^}]}]}]}]|^{^{^{]|[|Y}Y}Z|[|]}]}^}^}]}\\}\\}\\}[}Z}Z}Y}X|V|W|X{Y|Y|X|W|V}V~V}V}V}V}U~T~T~S}T}U~U~V~WWXY[]~\\~Z~Y~Y~Y~Y~X~W~VVUTSSSTUVXYZZ~Z~Z~Z~[\\\\]]\\\\[[ZZZYXWVVUUTTSRPPQRSTUVWXYYYZ[ZYXWUUVVXYZ[[ZZZZZZZZYYYYYXWTSQQPQPNMLLKKKLMOPQRRQQRSRRRQPPQRSTUUUTTTUTSSSTUTSRRPNMNNMMMLIHGIIJHFDCCA??>=>@ABA@@???>=<;<>>?>==<<<;;;;<====>=<;;:;<<<<<kylymynxnxlxjxhyhxixjxkxkxkxjxjxjxjwiwiwhxgxexdxcxax_xbxbxcxcxbxaxaxax`xaxaxbxbxbxbxbxbxbxaxaxbxbxcxcxcxcxdxdxdxdxcxbxbxaxbxbxbxbxbxaybycydyexdxdxdxdydydycxcxbx`y`yayaybybybydxeyeydycybyayaybycydzdzdzczczdzezfzfzeyeyczbzb{b{bzbzbzbzczbza{_{^{\\|Y}W}W~V~UTSRQPOLKLLKJKKKKLMMLLKKLLLMMMLMMMMMLMNOONNMKHEEFHJLLKKJIHGFGHIJIGFFFFFGIHGFHHJJKLMNMLLMMMLJJJKKKLLMPQSUVVVVUTSTTSSRQQTRSTUUTRRSSSRSUXYWUTSTTTUUUVVVVWXXWVTSRS~U}R}R}S}T}U}V}W~W~X~X~Y~Z}\\~]~^~^~^~]}\\}Z}Y}X}X}Y|Z}Z}[}[}Z|Z|Y|Y|Z|[|[|[{Z{Z{Z{Z{[|\\|\\|[}Z}[}[~\\~\\\\\\\\][XV~U}Y|Y|[|_|`|`|a|a|a|`|_|^|\\|[|\\|_|b|d|g|g|f|e|d}c}c}c}c}d}e|g|f|d|c|b}c~d~b~c}g}f|b|^|]{a{_{^{`{^{Z{]{]|_|b|e|c|_|^|`|`|a|b|b{b{b|c}f}h}m}n}n~m~mmljhe_[ZZ~Y~Y}X}W}V}U}T}S~T~UVVUUUTSTWY~Y~Y~W~V~T~R~R~S~TVY[\\[[[[ZZXTQOOPQRTVXYXWWYWSPQTRRRSRQXZRVX[YXV~Y~[~]~\\~Z~[}\\~`_\\[~]Z\\Z__[_cghiknkjlklllnprssrrsuvvvvwwyyxwxxwvsmfb`^\\\\\\^`deecccba`_^]]^^____^]~^~^}^}^~][YYXXXXXUVWXY[WUWZ\\^^^]^`bbbab`__]~\\~]~_acafgfdddddccccbbdb]ZYVTSSSSSTTTS~TUVVU~UTSSSTT~T~U~V~W~X~X~X~W~V~V~W~X~X}W}W}W}X~Y~\\}]}^}_|`}_~_~_}_|_|_|^|]|[}Z}[|[|^}_}_}_}_}^}^}]}]~\\~[}[}Z}Y}X|Y|Z|Z|Y|X|W}X~X~X}X}W}V~T~T~S}T}T~T~TTTVY[]]~[~ZYY~X~W~VUUTSRRRTUUVWXXX~X~YYZ[[[ZZYYYYYYXWVVVVUUTRQQQQRSSTTUVWXYYYXWUUUVVWXYZZZYYZ[[[ZZZYYYXWTRQQPPOOONNMLLLMOPQRQQQRSSSSRQQRRSSSSSSSSSRQQRSSRQPPNLKLKJKLIEDDFHGEB@??><:99;>?@>>==<<;;:9;==>=<;::9999:;<<;;<<;:::;<<<<<mznznzpzpynylxjxjykylynymymymylylxlxkwkwixgxexexbx`x`xexdxdxcxbxbxax`x_x`xaxcxcxbxbxbwbwawax`x`xaxbxbxbxbxcxcxcxcxbxbxbxaxbxcxcxcxcxbycycydyeydydycydydxdxcxcxbxbyaybybybycycydxdycycycybyayaybybybybybzbzczc{d{d{d{dzczczbzbzczczczczczczczaz`z_{]{[|Z|Y}Y}X~W~UTSRPNLMNMMMMMMNOONMMLMNNONONOOOOONOPPONMLKJJKLNONMLLKKJIIKMNNMKKKKKKKKIGFGHIKMOPQPONOPNMMMNOOOPPRUUVWVX[[YXVUVUTRPPTSTUUVUTRRQQQSUWXVUSSTUVWXYXXXXYYYXVTTUV~X~U~U~V}W}X}Y}Y}Z}Y}Y}Y}Z}\\}]}^}^}]}]}\\}Z}Y}W}Y}Z}[}Z}\\}\\}[|[|\\|\\|\\|]|\\|\\{Z{Z{Z|Z}Z|Z|Y|Y|X|Y}Z}Z~[~[~[~[~Z~W~U~V}W}\\|\\|^|b|c|c|d|d|c|c|b|`|^|]|]|_|a{d|e|e|e|d|d|c}b}b}c}c|d|e|e|d{c{c{d|d|c|d|i|i|d|^{^z`{_{`{b{_{\\{]{^{`{c{g{e{`{_{`{`{a{c{c{b{`|`|d}g}j~l~l~l~l~k~igd_~ZVVW~X~W}W}W}V~U~T~T~T~TTTTUUTTUWY~Y~Z~Y~X~W~V~V~V~U~V~Z[\\\\\\]]\\[YVTSSTTTUWY\\[YYZXUSTXUSPRPPWYSWZ[Y~Y~Y~[~Y~^]]^~_db\\^a_^]__\\_`bgggigfghijjjlnopoonpstvwxxwwxwwwvusmgda^\\[\\_aeeedccccccb`__`cca`a```a~b`][ZZYYXXUUUUVWUUVX[\\\\[Z\\^`___`a`_~\\~[~\\]_`_dedccbbba```__a_ZWWVUUVUTTWWUU~VVWWV~UTSSSTUU~U~U~V~W~X~X~X~X~W~W~W~X}X}X}X}Y~Z~\\~]~^~`}a~a~b~c~c~b~b}`~^}\\}]}[}Z}_}`}a}a}`}`~`~`~_~^~^}]}]}\\}[|[|\\|\\|[|Y|Z}[~\\~\\}[}[}Z~X~W~W}W~W~V~U~UUWZ\\]\\ZYXWWVUUUTSRRRTUUVVWWWVVVVWWXXXWWWXXWWWWXWWVVUTSRRRSTTTSSTVWXXXWVUTTUWWWWWXXWWXYZZYXXXYXWWUTSTSSRRRRRPONMNNOOPPPPQRRRRRRRRRSSSRRRRRQQPPQQPOONMLKJIHHIIEBABDEDB@??>:8767;>?@><<;;;;989:<=>=<;:98779::;;::;:::::;<<<=<o{o{p{qzpznzmylylymynynynzmzmzmzlylylxkxjxfxfxexbx`xbxfxfxexdxcxcxbx_x_xaxbxbxbxcxcwcwbwaw`w`w`wawbxbxbybxbxbxbxbwbwawbxbxcxdxdxcxcxbycycycycydxdxcxcxcxcwbwbxaxbybycycycycydycycycycybyayayayaxbxbybybzbzazazbzczczczbzbzbzbzczczcycybycycybzaz_z^{]{[|[|[}Z}Y~XVUSQPOOPONNOONNOOOONNNNNOOOOPQPOOPQQQPONMLLMMNOPONMLLLLKKLNPPNMLMNMMLJIGGHHJMOQRSRQPPOPONPPRTRV[TTUXWXZ^][YVTWVTRPPSSUUVVVTRQPPQSUVWVTRRTVXY[ZZ~Z~Z~Z~[~[~Z~X~V~U~U~V~X~Z~V}V}X}Z}Z}Z|Z|Z|Z|Y|Y|Z|\\}]}]}]}]}\\}[}Z}X}V}Z}Z}[}Z}]}\\|[|\\|^{]{^|]|\\|\\|[{Z{Y|Z|Z|Y|Y|X{W|X|Z}Z}[}[}Z}Z}Y}X}W}V}X|[{_|a|d|d|d|e|e|e|d|c|b|`|^{^{_{b{d{e{e{d{d{d|c|b|b|c|c|d|d{d{d{d{d{d|d|c|d{g{g{d{`z^z_z`zazczaz]z^z^z_z`{c{e{c{a{_{_zbzczc{a{^|^{c}e~g~h~i~h~e~d~d~b~^~Z~W~U~X~X~W}W}W~V~U~T~T~T~T~T~S~S~T~T~U~U~T~U~W~Y~Y~Y~Z~X~Y}Y}W}X}U~V~Z\\]]^^^]\\ZXWUVWWTUWY\\\\[Z[XVTWXWTQPQPUXSWZ[~Y~Y~\\~[~Y~^~_~_~a]fc]`ed_^`^^^a]hgdedbfghiiijkjkllkloruwxwvvwvvvutrlgeb_]\\^`cdeecccccdddb`^afga`c_accb`]\\[YZYYWVUVVVVUTUXZ[ZYYZ[\\]\\]~^~_~_~^~[~Z~\\\\\\]]abbbaa`__^]]]]^\\XWWVWWW~W~T~UXXUU~W~WWWW~UT~TTSTUV~V~U~V~W~X}Y}X}X~XWW~X~Y}Y}Y}Y~Z~[~]~_}`~a}c~cd~cc~b~`~_~]~]~[~Z~^~a~b~a~a~b~d~a}_~^~_}_}^}]|]}]}\\|\\|\\|Z|Z}\\~]~]}]}\\}\\}[}Z~Y}Y}Y}X~W~W~W~XYZ[ZZYXVVVVVUTSRRSUVVWWWVV~VUUTUUVVVVUVVWVVVXXWVWVVTTTSTUUTSRSTUVVWWVVUTTUVWWWVVVVVVWXYYXWWWWWWVUTTTSRSSSSRQPONNNNNOOPQQRRRQQQRRRRRRRQRQPPPPPPONMLLJIIHFFGFA@?@BCCA?>>=85678:=>>=<;;:;:888:<===<:9987789:::::99999:;<<===p{q{r{r{qzpznzmznzozpzozn{n{nznznznznylyiyfygyeyay^xdxixgxexdxdxcxbx^x^xbxbxbxbxcxcwcwbwaxax`x`xbxbxbyayaxaxaxawawawawbxcxcxdxdxdxcxcxdxcxcxcxcxcxbwbwbxbxbxbxbxcydycycycydydycycybybyayayayayaxaxaxayaz`z`z`z`zazayayayazazbzczczcycybybycybyaz`z_z^z_z_{^{^|]}Z~X~W~V~U~TSRRRQQQPPOPQQQQQPPPPPQQRRQPPQRRRRQPPPPPPPPPONNNNNMLMNPQPNMNOONMKIHGHIJMQSSTTSSRRSRQQSTUXSX`WVWYWV^_`\\^URUVSQPQRSUUWWVURQOOPRTUVUTSSUW~Z~\\~^~]~\\~[~[~\\~]~]~\\~Z~X~X~Y~Z~\\~]}Y}Y|\\}]|]|\\|\\{[{[{[{Z{[|]|^|^|]|]|]|\\|[|Y|V|[|]|]|\\|^|\\|[{]|b{_{_{^|]|\\|[{Z{Z{Z{Y|Z|Y{Y{W{X|Z}Z|[|[|[|Z|Y|Y|X|Y{\\{_|c|d|g|h|h|h|g|f|f|e|d|c|b{a{azc{d{d{c{c{c{c|c|b|b|b|b{b{c{d{ezfzg{g{g{f{f{f{f{d{bz`z^zbzf{g{dz`z_z_za{b{d{f{e{bz`z^zbzd{d{a{]|\\|`}a~c~d~e~d~a~_~_~^}[}X}V~U~X~X~W}W}W~W~VUTTT~S~R~R~T~U~V}W}W~X~Y~Z~Z~Z~Z~Y~\\}\\}Y}[}V~V~\\^__```_^\\[ZYZZZ~U~U~X~Z]]\\[ZWWWZ[YWTSSTU\\VYZ\\[[_~\\~X~Z~a~_~fZdd`ahfbaa^`f`]kgc`bbdcgjiggggghhggjmqtvvvvvvvvtroljgc__^`bddeecbabccdfda]ajkbaeabddb`][YXYYYXXYXXWVUUUWXYWWWWWXXY[~\\~\\~]~\\~[~Z~[[YYZ]__^^^]\\\\[ZZZZXWVVWWXYZ~YWY[YWYZYXXWVV~VVUVWXW~V~W~X~Y~Y}Z}Y~YXW~X~Y}Z}Y}Y~Z~[]~_}`}b}d~deeea_^]_~Z~Y~^~b~cccb~c~b~`~a~a}a}`}_|_}^}]}^|^|[}]}^~^~^}]}^}_}_}^~]}]}]|\\}[}Z~Z~[~ZZYYXXWVWXXWVUTSS~U~V~W~X~YXWWV~VUUTTUUVVUTTUVWWWWWWVWXWVWVUVWVUTSSSTTTUUUTTTTUVWWVUUUUTTVWWXWUTUVVVUTTSSSSSSTSSRQQPOOONOPPQQQQQQQPPQQQRQRQQQQPQQQPONLKIHHIGEDGB<;=?ABB@>==;52457:=>>=;::<<;:988:<==<;:98778:;;;:989999:;<<===q{q{r{q{qzpznznzozpzpzo{n{o{o{ozoznzozmyjyhyfydy`y`ygxjxfxfxdxdxdwbx^x^xbxbxbxbwcwcwcwbwbxaxaxaxbxbxayay`x`x`xawawawbwbxcxcxdxdwdwdwdxdxdxdxcxcxcwcwbwbxcxcxcxcxcxdxdxdxdxdxdxcxcxbybybxbxaxayayayayay`z`z_z`z`zazayayay`zazbzbzbzbybyayaxbxbybybyay`yayazaz`{_{]}[}Z}X}W}V}V~UUUTTSSRQRSTTSSRRRRQRRSSSRRRSSRRQQQRQQQQQQPOOOOONMNOPPOLMOQOLKKJHIJKMPSUUTTRQRRSSRQUX[[TWcZTYZWV^``[^SPQQRRRQRSUWXXWURQOOPRTUUUTTUV~X~[~\\~^~^~]~[~[~]~^~^~^~]~[~[~\\~]~_}`}\\|]|_}`|`|_|_{^{^{^{^{_|_|_|_|_|_|_|^|^|\\|X|Z|^|^|]|`|^{\\{]|b{`{a|`|_{]{\\z[z[{Z{Z{[{\\{[{[{Z|[|\\{]{]|]|\\|[|[|Z|]{b|c|e|g|i|i|i|h}h}g|f|f|e|d{c{c{d{e{e{d{d|d|d|c|b|b|a|`|a{a{b{c{dzfzhzi{i{h{g{f{e{d{bzaz^zb{g{h{e{bzaz`za{b{e{i{i{fzbz^zbze{e{b|_|^|b}b~b~dc~a~^~]~]}]}Z}Y}X}X}X}V}V}W~W~WVUUUUT~T~T~V~X}Z}Z}Z~\\~\\~[~[~[~\\~[~^}_}\\}^}X~X~_baabbba`_]]\\[\\]~W~V~X~Z]^^]ZXYY[]ZYVVTOUa\\VWYYZ^[WXe~\\~d[adaagedbaacfcahda`cdb`gjhecccdcb`adgknppqrqqqponllkfb`a`abcddc`_]^``accb^bjlcbgdccba_][YYZZZ[[[[[ZYXWVWXWXWVVVWWXY~Z~[~\\~[~Z~YYYWVVWXXXXYYXXWWXXXWUSTXZZZYYZ^]WV[\\ZYXWVV~WXWXXXX~W~X~Y~Y~Z~Y~Y~X~WW~W~X}Y}X}X~Y~Z\\~^}`}b}d~eeed]ZY[^~Z~X~^~b~c~b~a~a~`addd~b}`~`}_}_}^}^}^}\\}_~_~^~]}^}^}_}_}_~^}^}^|]}\\}\\~\\~[[YYXXXWXYZ[[ZYWVU~V~X}Y~Y~ZYXWW~VVVVUUVVVUTUWXXXXVUVWXWWXYXVUVVVUTSSRRRRRRRSSSTUUTTRRRRQQRSSTSQPQRSSQPPPPPPOPQRRRRQONNNMMMNNNNNNNNNNNOOOOOPPPOOOOOOONKJHGGHGDEF>79;=?@A?>=<:534469<>=;999:::9999:;<<<;:987789;<;:988999:;<=>>=nznznznzozozoyozp{q{pzp|p|q{q{p{p{p{ozmzjyhyeycybydykykxfxfxewewdwbw]w_wbwbwbwbwcwcvcwcwbwbwbxbxcxcwbxbxaxaxawawawawbwbxcxcxdwewewdwdxdxdxdxdxdxcwcwcwcxcxcxcxcxdxdxdxexexfwewdwcwbxbxbwbxbxbybybybybyazaz`z`z`zayaxayay`z`{azazaz`y`yayaxbxbycycybybxbxbyayaz`z_{]|[|Z|Y|X|X|X}X}X~WVVUTTTUUUUUTTUUTTSSSSSRSTTSSSRRSRQQQQQQQPPPPOOOOPONLNOPNLLLLKKKLMOQRRRROOOPPQQRU[_^WXe\\X\\\\XW[]\\XWSNOPRRRRUVWXZZZXUSQQQSTUUUTUV~X~Z~\\~\\~]~^~]~\\~\\~^~_~_~`~_~^~^~^~_~`}`}_|`|b}c|b|b|a|a{a|b|b|c}c}b}c|b}a|b|a|a|_|[|\\|_|`|_|a|`{^{_|c{c{c{b|`|`{_{^z]z\\{\\{^{_{_{^|]|]{^{^{^|^|^|]|]|^|a|d|f|h|h|i|i|h|g}f}e|d|d|d|c{d{e{g|g|f|e|e|g|f|d|b|a|`|_|`{`{a{a{bzdzfzhzhzh{g{e{d{c{bzbz`{c{g{i{f{czbzczd{d{f{j{j{h{e{azc{f{f{d|a|a|e}f~f~ec~a~^~]~^}_}]}Z}Y}X}W}U}V}W}W}W~V~V~W~W~W~W}W}X}Y}[}]}]}]~_~_~^~\\~^~_~]~a}`}^}`}Z~Z~bddccedcaa``^\\^_YXY[^`^]YYZ[^\\XXXWSOZdWPRTUW[ZXZf_bZ^d~`_eddca`badbba_`aa_^cfc`^]^^\\[ZZ]^beggggffffefhgca_^``___```][YZ\\]^_``_bgibbgecbaa_][ZZ[\\^\\]\\\\\\[ZY~XWXXXYXVVVVWXY~Y}Z}Z~Y~Y~XXWVUTSSSSSTUUUTTUWWWUTV[]]\\\\[]`]WWZ[YXWWVW~XYYZZZZ~Y~Y~Z~Y~Y~Y~Y~Y~XW~W~W~W}V~W~YZ[~]~^}`}a~bcba[XY\\\\[~Z~^~`~a~a~_]]_dfc`^\\]\\Z[~\\~Z~\\~^[Y~Z~[}\\}]~]~\\~]}]}\\}[}[~[~[ZXWWVWXYZ[\\\\\\\\[ZYZ[\\]\\[YXXYYYZYXXXXVTUWXXYXVWXXXWXYYXVUVVVUTSRRQQQQPPOOOPQQQPPOPONMMMMMLKKLMMMLKKJKLKKKLMMNNMMLLKJIIIHHHHGIIJKKJJJLLMMMMMMMLLLKIGEDDEDBCC;47;=>>?>=<;955557:<=<98889999::99;<<<;;:97789;;;;988999:;<>>=<lylymynynynyozpzpzpzp{p{q{q|q|q|p{p{o{lzjyhyeycydyfyjyjygxfxewewdwaw]w`wcwcwcvcvcvcvdvcwcwcwcwcwdwdwcxcxbwbwbwbwbwbwbwcxcxdxdwewewewexdxdxdxdxdxdwdwdwdxdxdxdxdxcxdxexexfxgwfwewdwcwbwbwbxbxbxcxcxcxbybyazazazazbybxayay`z`z`z`z`z_y_y`xaxbxcycycxcxbx`xay`yay`z_z^{\\{[|Z|Y|Y|Z}Z}Y~X~XWVUUUVVVUUUVVVUTTSSSSSSSTTSSRSRRRRQQRRRQPPPPOPOONMLNOONLLMMMMMMNOPRRQPONNPQPPRU[`^XYb^]\\]XWXZZVTRMOOQRRTWXZY[[\\ZVTRSSUUUUUUVW~Y~Z~[~[~]}]}]}\\}\\~^~`~`~a~a~`~_~_~`~`~`}`}b|e}d|b|c|b|c|d|d|e|e}g}f}e}b}c}b}a}_|]|\\|]|_|`|`|`|_{^{_|b{c{d{c|a|a|`{_{^z[z\\{`{a{`{_{_{_{_{^{_{^{^{]{^{`|b|e|g}h}h}h}g}f}e}c|b|a|a|b{b{c{e|g|g|f|f|f|g|f|d|b|`|_|_|_{_{`{`{azbzdzezeze{e{d{c{bzbzazb{e{h{j{h{fzezeze{e{g{h{i{g{e{d{a{fzf{d|c|d|g}h~j~j~f}a}^}^}_}c}_}Y}Y}Y}W}U|V|W}X}X~X~X~X~X~W~X}Z}[}\\}\\}]}^}_}a~c~`~[~_~a~\\~b~a}_~`~\\~[~cecddhdcbaba`]__ZYZ[^`^\\YY[\\^ZTWZWSQY[QOOOQTXXXZca_][a^~]~b~a~ccccccb`___^aa^^bda^ZXXXVUSSTVYZ[\\\\\\\\\\\\\\\\]^^]]\\[[\\\\\\ZZYYXXVVXY[\\]]^bffccddccba_\\ZZZ\\]^[]\\[[ZZY~X~XYXW]VVVVVWXX~Y}Y}Y}Y}X}X~XVUTSSRQQQSTTSSSTVVUTTWYYZ^^\\^`]WVYYXXWWVW~YY[[[[Z~Z~ZZY~X~Y}Y~ZYWWV~V~V~VXZ~[\\~\\~^~_`a`^ZXX[]\\[~]~^~_~_~]ZY^b```\\Y\\XXYZ~X~Z\\WVXX~Y~Z~Z~[~[~[~[~Z~Z~ZZYXVVUVXYY[\\]]\\\\\\\\\\^__^\\ZZZ[\\]^Z[ZYYVTUWXXYXWXYYXXXXXWUTUVUTSRRQQPPOOMLMLMMNNNONMMKJJIHHHGGHIIHGFFFGHGGGIIJJJJJJIIGFGFEDDDDEFFGGFEGHJKKJJJJJJIIHFDBABCB@@@:47;===>>=<;854557:<=;87789999:;:::;<<<<;98789:;;;989999:;=>>=<jyjxkxlxmxnyoyozpzpzq{q{r{r|r|r|q|p|o{lziygyeydyfygyiyiygxfxfwfwdwbw\\wbwcwdwcvcvcvcvdwdwdvcvcvdvdvewewdwdwdwcwcwcwcwcwdxdxexewewewewexexexexexexewewdwdxdxdxdxdxcxdxexfxgxhwhwfwdwcwbwbwbwbwcxcxcxcxcycybzbzbybycycxbxbxay`z`y_y_y^x_x`x`xbxcydydxdxbxax`x_x`y`y_z_{]{\\{\\{\\{\\|\\}\\}[}Z~Z~XWVVWWWWWWWXYYXWUSSSSTSSSSSSRRRRRRRRRRRRQQQQPPOPONMNOPOMNOPPPOOPQRRRQPOOQSSSRSUZ_\\ZZb`^]]WVUVURQPNPQRSUX\\]^^^^^]YVUUUWWVUUVX~Z~[~[}Z}[}]}^}]}]}]~^~`~a~b~c~b~a~a~b~a~`}`}c}h}e}b|c|e|f}g}g}h~i~jj~h~c~d}c}a}_|]|]|_|`|a|b|a|`|^{_|b{b{c{b|b}a|a|a{^z[z]zbzczb{b{a{`{`{_{_{_{_{^{`{a|b|d}e~f~e~e~e~c~b}`}^|]|]|^{`|c|f}h}h}g}h}i}j}h}e|b|`|_|^|^{^{_{_{_z`zazbzbzb{a{a{b{bzbzbzc{d{g{i{i{hzgzgzh{h{h{h|h}h}h}h|e|g{e{e{d|g|i}j~m~m~i}b}^}_}`}e}b}\\}Z}Y}V}V|X|Z}[}[~[~[~Z~Z~Y}Z}\\}^}^}^}_}`}a}c}f~c~\\~b~d~[~e~c~ab^^efddejedccedb_a`[Z[[^a_][YZ[_VPW\\~WSUXUQPNMPQTUUX_a\\[Z^[[\\]``````_]^_^\\`a~__cb_[WUTTSRPOPQSTTTTUVVVVWWXXYXXXWXXXVUTUUUTUWXYZ[[^bcba`abddcc^\\[YY[]^Y[ZYYXXW~WXZZX\\WWWWWWXX~X}X}X}X}X}X}X~W~V~UTTSRRQRSSSRSTUUTTUX\\]^`a___\\YXWWXYYXXX~Y[]]\\\\\\~[[[Z~Y~Z}Y~YYXVU~U~UVWXYYY~Z~[\\]\\ZXXY[]\\\\[[[[ZXW[[Y[\\YVXUVVWWWYTSTUVW~WWXYYYYYXWVUTUVXYYZ[\\]]^^_`aba`^\\\\]^___\\_]\\ZXVUWWXXXYZ[[ZZYXWVTSSSSRRRQQPPONLIHHGHIJLNNLIHGFECBAA@?ACCCA@@?@ABAABCDEEFFFECBBBBA????@@BBAA?@CDFFFFEFFEEEDB@>==>>=>>947;=<=>=<<;85578:<>><9888::99:;<<;;;<<<<:9789:;;9889::::;====<gxhwiwjwkwlxmynyozozp{q{r{q{q|q|q|p|o{lziygyfyeygygyhygygxfxgwgwewbw]wbwdwdwdvcvcvdvewewdvdvdvevewfwfwfwewewewewewdwdwdxexfxfwfwewewexexexexexexewewfwexexexexdxcxdxexgxhxiwhwgwewcwbwbwbwcwcwdwdxdxdydydydydydydxdxcxcxbyaz`y_y_y^x_xaxbxbxdyeydxdxbxax`w_x`yayaz`{_{^{]{]{]|]|]|\\}\\}[}Z~YXXYYYYYYYZ[[ZYWUUUTTTSSSSSSSSSSSSRRRSSRRRRRQPQQPOPQRQOPQRSSRQRSSSSSRRRTWWVTTWZ^\\YY`_^][URRRQPPRKSTTUWZ_a`````_ZWUUVWWVUUVX~[~\\~\\}[}\\}^}`}a}`}`}b~c~c~d~ddc~c~b~a~_}a}d}h}g}e}f}g|h}i~i~i~kmmide~c}^}\\|[|]|^|_|`|a|`|_|\\{]|`{`{`{`|`}_}_|_{^{]{^za{c{d{c|b|b{b{a{a{a{`{`{_{a|a|b}a}a}`}`}`}_}_|]|\\{[{\\{]{`{c|f}h}h}h}i}j}i}h}e|b|_|^|]|^{_{_{^{]z]z]z^z_z_{_{`{a{bzbzbzczdzgzizizizizh{i{i{h{g|g}g}i}k}g}f|e{e{f|h|k~l~onj~c~_}`}a}e}b}^}[}X}V}Z|\\|\\}]}]~]~]~\\~[~[}[}^}_}_}_}`}a}c}e}h}e~^~d~e~\\~g~edeccgedehlefccdeebcb]]]]`b`_\\XY[]UOW[~X~VUXVTRONQRQRSTW[XVW[YXXY][XX[[[Y[\\[X]`]^ba^YURRRQPONPQRRRRRSTTTTUUVVVVVVUUUTSRRSTTSTVWYZ[\\^abaa`acdedc\\XWVVX[ZUWWWXXWW~XZ\\^[YXXXXXXXX~W}V}W}X}X}Y}Y~X~W~V~VUTSSSTUUUTSSSSSSUX^a`abb_][ZYXXYZZZZZ~\\\\^^^]]~]][[~[~[~Z~YYXWWV~VVVWWWV~VWXXXVVUWYZZZYXXXWUWXVSTWVUTRVXWUUTSRRRSTTTVWWWWWVVTSSTUVWXYZ[\\]^__`abba`^]^_aa][a^]ZXWUWXXXXYZ[[ZZXVTSQQQQQQPPPONNLKIFDDCCDGHJKIFEBAA@>==<;=???>==<<=>>>>?@@AAAA@@>?@@?=<;<=>>>=<;=?@BBBBABBBBBB@><;;<<<>>956:<<<=>><:86789<>@@=:99:;;::;<==<<;<<<;:8789:::9889::::;====<fwfwgwhwiwjxkxlymynyozpzp{p{p{p{o{n{m{kzizgzgzgygygygxgxfxgwgwhwfwbw^wcwewewdvdvcudvewewevewfwgwgxgxfxfwgwgwgwgwfwewewexfxgwhwhwgwfwexexexexexexfwfwfwfxfxfxexexdxexfxhxixiwiwgwfwewdwcwcwcwdwewewexdxeyeyeyexexexewdxcxbxay`y_y_y^x^x_x`xaxcydyexdxcybx_x^y`yayazaz`z`z_{^{^{^{^{]|]|\\}\\~\\~[Z[[[[[ZZ[[[ZYXVVUTSRRSSSSSTTUTTTTTTTTTTTTTTSRSRQRSTTTUVWVUTQRTUTSRSSUWZZXVUWX\\ZXX\\\\[ZXRPORUSSUPWWWWW[`bcdb`abZSQRSTTTTUXZ~]~^~^}^}_}a}c}d}d}c}d~e~d~d~d~d~c~d~c~a~_}b}e~g~g}g}i~i~i~iiklmnjed~`}[}Y|Z|Z|[|]|^|`|_|]|Z{[|]{]{]|]|]|\\|\\{\\{^{]{]{a{e|f|e|d|d|d|d{d|e|d|c{b{b{b{b{a{a{`{_|_|^|^|]{^z^{_{_{a{c|e|f|e|e}e}f}f|e|c|`|^|]|]|]{^{_{_{^z^z^z^z^z^{^{^{_{`zazbzczdzfzhzizj{j{i{i{i{i|h|g}g}h}j}i}f|d|c|c|f}ijlkh~e~c~c}c}g}c}_}\\}Y}X}\\|^|_}^}_~_~^~]~\\~[}\\}_}a}a}a}c}c}c}e}h}f~a~f~e~_ghgfefhfdfjlefcedfgdfe``abbda_^\\]]^WRZ^~[~ZY[YVTQQRQNPQQQVRSTVUUTTYVRSVVWWYZWTY]ZZ]]ZUSSTRTSRPQSVTUTTTTUUUVVVVVVVVUVUUSQPQSTSTUUWXYZ\\_aa``bdeec^XUUUTVXXSUVWXYZZ[\\^a^[\\\\\\\\\\[\\~[~Z~Z~Z~[}\\}\\}\\~\\~[~Z~Y~XVUUVXYYXVTTSRQRTW\\`__`_\\Z[[[[Z[\\\\[\\\\~^_`````~a`_]\\~\\~[[[ZZZZXXWWVUT~S~TUUTTSTUVVVVVUUTUUWXTQSVWVTRWXWUSRRSSSRSTTTUVVVVUUTSSTUVWVWXYY[\\]^_`aa``_^_`a`]]b`][YXWYZZYYYYZZYXVSSQQQRQQQQPPONLJIGDA??@@@CEGCB@?==<;;;::;<<<<;;;;;;;<<<<<=======>>>=<;;<==<<:879;<>>?>>?@@@AA?=<;;<<<==:669;<=>??=;879:<>@BA?<;;;<<;<=>>==<;<<<;:8889:::988:::;<<====<ewewewfwgxgxhxiyjylymznzozo{o{o{n{mzk{izhygygygyfxfxgxfxfwfwhvgvevcw`wdxfwfwevcubucvdwfwewexgxhxgwgwfwfwgwgwhwhwfwfxexfxgwhwhwhwgwfwexexexexfwfwgwhwhxgxgxfxfxexexexfxgxhxhxhxhxfwewdwcwcwcwdwdwdwexexeyeyexfwfwfwgwfxdxbxay_y_y_x_x^x_x_x`xbxcxcxdxdxby_y^yaxbybyazaz`z_z_{_{_{^z^{^|]|]}\\~\\~\\\\\\\\[[[Z[[ZZYXXWVVTSRRSSSTUUUUUTTTTTTUUVVVUTTSRRSTUUVVWXXVSPQTVTRRRTUXYYXVUWXZYWVZYXWUPNKRVUTURXXWWX[`ccgb`ccWPPQQRSSSUX[~]~`~`}`}`}b}d}e}e}e}d~e~e~d~d~c~c~e~c~_~`~b~e~f~f~g}i}i~h~g~hjlnnje~c~_}Z|X|Y|Z|[{\\{^{^{]{\\{Z|Z|Z|Z|[|[|[|[|[{[{]{\\|\\|a|e}h}g}f|f|f{f{f{f{f{e{dzczczczbzaz`{_{^{^{^{_{_{`{`{`{a{b{c|d|c|b|c|d|d|c|b|`|]|\\|\\{]{]{^z_z_z_z^z_z_z_{^{^z^z_z`zazbzczezg{i{i{i{i{i{h{h{h|h|g|f}h}h}g}c}b|a}d~h~i~hh~f~e~d~e~e~g~`~^~\\~T~Z}c|`|_|^}_}_}^}]|\\|\\}]}_}b}b}b}c}d}d}d}f}e~d~f~eaghhgefgecfklffcfffgfhgcbbcda__^^_^]XV~[~_~]~[ZZZXVSRRQNORONSQPPQPSONRRQRTTSVYYVSX[YYXVSTSSTRVVT~Q~R~TWTWWVTUUVWWVVVWWWVVVVVSSPQTTTSTUVWXYZ\\^```bbdc_ZWUTTTUVVVVVWXYZ[\\]^_____``__^~]~\\[\\~]~]~^~^~_~^~\\~[~Y~X~WXY[\\ZYWUSRQQRSUX[]^^]ZZ[\\^^]]]\\\\\\\\_`aaaaaba`_]\\\\\\\\ZZZZYXWXVUTTUUVUTTTTUSSSRSQRTV~W~X~VTTTUUVUWXWUSRRSTSSSSTTUUUVUUTSTTUVVWVVVWXZ\\]]]^_``__^_```^^``^[YXXYZ[ZZYYYYYWTRRRRRQPOPQQPONLJHFC?>=>=<?CC@?=<;::9999::;::::::::::::::;;;;;<<==<<;;;;<==<:87789:;;;<=>>>????<;::<====:658;<>?@@><97:<>@BCB@=<;<==<<=>>>=<;;;;:98999:::9889:;<<=>>==<ewewewexexexexfxfxhyizkzlzlzlzlzkzjzizgygyfygyfyeyexfxgwevfvhvgvevdwbwfxgwfwevcuaubvdwfwewfwiwjwhwgwfwfwgwhwiwiwhxfxexfxiwiwjwjwhwgwfwfwfwfwfwgwgwgwhxhxhxgxgxfxexexfxfxgxhxhxhxgxfwewdwdwdwdwdwdwexexgxgxgxfwgwgwhwgwewcwaw`x`x`x_w`x_x^x`xawbwcxdxcxcy`y`xbxcycybyayay`y`y`y`z_z_z^{^|^}^}^}]}]}]~]\\[ZZ[[[[Z~Y~Y~XWVUTSSSSTTUVWVUUUUUUUVWXYYXWVUTTUVWYYXYYXVRNNTVSQQRSUVWWVUUVWWWVUVVUURONPVYWVVWZ[XXY[_bcf_^e`RLOPQQRSTVZ~]~^~a}b}b}b}c}d}e}e}e}e~e~e~d~d~a~a~d~c~]~_~b~ef~e~e}i}g}e~d~e~h~j~k~k~f~d~a~\\~Y}W|X|Y|Y{[{^{^{]{\\|Z|Y|Z|Z|Z{Z{[{[{ZzZ{]|[|[}c}g}i}i}h}h|h{g{h{h{g{f{ezdzdzdzdzdzc{a{`|`|a|b|c|d|c{b{b{czc{c{b{a{`|a|c|d|b{`{^{]{]{\\z]z^z_zazazayayaz`{`{_z^z_z_z`zazbzcze{g{h{h{h{h{g{g{h|h|h|e}d}g}g}d}`}_}b~f~f~d~f~e~d~f~f~f~g~]~\\~[~X~_~g}c}a|]}`}`|_|\\|[|\\|\\}`}c~c~c~c}c}c}b}c}d~e~eecghjigfedbejkhgdhchhgmjgdca_\\\\]_aa`^ZZ\\~`~]~][WYYWU~USROQUPMSRQORQSMNQTTTUVRTYXUUWYXWURQSSSSPWYW~S~R~UZVZ[YWVWXYYXWVWWX~X~X~XYYWWRRVUTSSTTUVVVWYZZZ[\\_^ZVUTTTTUUUUVWWXZ\\]^^_```aaaabba~`~_^^__````_~]~[~Z~Y~Z~\\^^^\\~Z~WTSRRQQRTWYZ~Z~Z~X~Y~]~_~_~_^`_]\\]]_accdc~cddb`^[[\\\\[[[ZYYXXVTSTUU~VVUTSSSQQRSRRTUV~W~X~XXWXXYYYXWVUSSSTTTTTUTTTUUUUTTTTUVWWWVVUUWYZ[\\\\]^___^^]^^__```^\\ZZZ[\\]\\[YXXWWUSRSTSRQQQRRQPPOMJHEB>;;<<9;??;;::98888789::9999998889:::::::;;;<==<;;;;;<===:8789:98899:;<<==>>=<;;<=>>><857:<>ABB@<99<>@ACCB?>==>??>>?@@@?>=<<<;:9::::::9889;<=>>?>==<dwdwdwdxcxcxcxdxdxexfxgxhxiyiyhyhygyfyfyfyfyfydycycxfxfwevevgvgvevewewhwhwgwevcvbvbwdwfwfwgwjwjwhwgwfwfwhwiwkwkxixgxfxfxiwjwkwkwiwhwgwgwgwgwgwgwgwgwhxhxhxgxgxfxexexewfwfwgwgwgwfwfwewdwewevevdwdwexfxgxgwgwgwhwhxixhwfwewcwbwbwbwaxay`x_x_wawbwcwcwcwax_xaxcxcxcycybybyayaxaxay`y`y_z_z_{_|_|_|_|_}^~]~\\~\\}[}\\}\\~]~]~\\}[}Z}Y~X~XWVUUTUVWXXYXWWWWWWWXYZ[\\\\[ZYXWXYZZYWVTTROMMRROPPRSUVWWVVVWXXXWVVUUTRPPV[YTYZ\\\\_W\\ZZ]ab`Y\\cWNOTRRSTU~W~Y~\\~_}`}c}d}d}d}d}d}c}c}d~f~ecb~a~^~^~b~a~\\~^~a~d~d~d~c}d|a|`}^~`~d}g}g}f}_}_}^}[}X}X|X{Y{Y{[{^{^{]{]z\\{[{[{[{\\{\\{[z[z[z[{]|[}\\}e}g}h}h}h}h|g{g{g{g{f{e{dzczczczdzdzc{c|b|b|c}f}g|f|f|d|c{c{d{d{c{bza{b{e{f{d{b{_{^{]{\\z\\z]z^z`zbzbzczczb{b{a{`z`z`z`zazbzczd{e{f{g{g{g{f{f{g|g|g|d}b}e}e}b}_}`}c~d~c~a~d~d~c~f~f~d~d~Z~[~[~]~e~j}d~a}^}`}a|_|\\|[|\\|\\|]}`}a~b~a}`}`}`}a}b~c~cb`dfggdcbcdeihhifjbjggljfa^[YWX[_bb`]Y[^~_~[~\\ZVYZYW~X~UTRUWSPUUSQTUUORUW~X}XXXTUYYUWWWVUSQQTTSRPYZXT~S~V\\X~]^\\YYYZ~[[ZXWWW~X~Y~[~[~[~\\[[VTUUTSRRRSTTSTUVVTUUXYVUTTTUUUUUUVWXY[]^_^^___```abba~a~a```aaa``^]~\\[Z[]^_^\\~Y~WUTSSRQRRSTUVW~Y~\\~]~^~^~^^`_[ZZ\\_acdcbccb`^\\ZZ[ZZZZYYXXVVUTTTU~VUUTSSRQRRSSSUWXYZ~Z[[\\\\[[ZYXVUTTSTUVUTUTTTTTTTSSSTUVWVVVUUUVXYZZZ[\\]]]\\[[\\\\]^__^][ZYYZ[[ZYWVVVUSRQRSSRRQRSRQPQOMIFC@<98::87;;789887777789::99888888889:::;;:;;;;<<;;;;;;;<==;99:;:998899:;;<<===<;;<=>?><967:=@CDCA=::>@BDDDC@?>?@@@@@AAAA@?>==<<;:;;;;::999:<=>???>=<;dwdwdwdwdwdwdwdwdwdwewexfxgxgyfyfydxcydyeydydycyaybxdxewdwcvevevfvfwhwjwjwiwgvevcvdwfwgwgwhwjwkwiwgwfwgwiwjwlxkxixhxfxgxjxkwlwlwjwiwhwhwhwhwhwhwhwiwixhxhxgxgxfxfxewewfwfwfwfwfwfwfwfwfwfvfvfvewewfwgwgwgwhwhwiwjxjxiwgwfwewdwdwdwcxcyax_x_w`wbwcwcwdwcxbxbxdxcxcydycycybxbxbxaxaxayayazaz`z`za{a{a|`|_}^}^|]|^|^}_}^}^|]|]|]}\\}[}[~ZYYXYYZ~Z~Z~ZYYYYYYXXXYZ[\\]^^]\\[\\\\\\[YUSRQPOOPSROQSTVXYYYYYYYZ[[ZYXWWVUSV[\\VX]^``cY`][\\`a\\V]aSPS~Z}V}U}V~X~X}Z}\\}^}`}a}c}d}d}c}d}c}b}`}`~b~b~`~^}]}\\}\\}`~_}[}\\~^~`~a~`~]}]|\\|[}X~[~`}c}c|b|Z|\\|]|\\|[|Z|Z{[{]{_z`zaz`z`{_{^{^{^{_{_{^z^z_z_{^|]}`}f}f}e}e}e}e|e|e|e|e{d{c{bz`z`zazbzc{c|c|c|d|f}h~j~j}i}g|f|e|e{f{f{ezd{f{h{i{g{c{a{`{]{[z\\z]z^zazdzd{d{d{d{d{c{c{bzbzbzbzczczc{d{e{e{e{e{e{e{e|e|e|b}a}c}c}`}`}c}d~b~a~a~d~c~c~d~c~a~`~Z~\\~_~bfg~a~_~^}`}b|_|]|]|]|\\|[}]}^~^~^~]\\\\]^``^]`aba~_~^~^~^bdfefhgjbiecfb^ZXVUWWZ]_`_^Z\\\\~\\~Y~YXWYYYZ~\\~Y~XVX[VSWYXUXY~YRVX[~[~[[[WWZZWXXWTTSRRRSRQQX\\YUVW]~\\~_~_^\\[~\\~]~^~]\\ZYY~Z~[~]~^~_~_~_^]XUVTRQQPOPQRSTUVVUTTUUSSTUUVVWVUUWXXY[]]\\[[\\]]]]]^___~_~______^^^][ZYYZ[\\\\[[~Y~XWVVUTTTTTTU~U~W~Y~[~\\~]~]~]]^]XUUX\\_aba`_`][ZYXWXVVVWVVVWUUUTTTU~UTTSSSRRSSTTTUVWXYYZ[\\\\\\[YWVVVUUVWWVVUTTSSSSSSRSSTTUUTUTTTTUVWWVWXYYZYXXWXXYZ[[ZYXVUUVWWVUTSSSSRQPQRRRQPPQRQQPNLFB@=:83897777367777666679:::988888888899::;;;;::;;;::;<;;<==<:9:::99899:;<<;;<<=<<<=>?@?=;97:>ADEDA=;;?ADFFEDBA@AABBABBCCBA@?>===<<<<<;;;;;;;<=>>>>=<;:ewewdwdwdwdwdwdwdwdwdwdxdxdxcxcxbxcxbxcxcxcybyay`yaxbxbxbwbvdvevfvgwiwkwlwkwivgvevcwhwhwgwgwkwkwhwgwfwhwjwkwmxlxixhxfxgxjxkwlwlxjwjwiwiwiwiwiwiwiwixixixhxgxgxfxfwewfwfwfwfwfwfwfwgwgvfvgvgvfvfvevfvhvgwgwhwhwixjxkxjwhwgwgwfxfxfxexdxbw`w`wawawcwdwdwcxbxbxcxdxdxdxdxcxcxbxbxbxbxayayazazazaza{a{a{`{`{_{_{_{_{_{_|^|_|_|_|^|]}]}\\}\\~\\~[[[Z~[~[~[~Z~Y~Y~Z~Z~YYYYYXY~Z~[~]__`a`_^\\[XUSSRQPQSUSSVXY[[[ZZZZZZ[\\]]\\\\[ZZYXY_]VZ`fde`Zd^\\\\`a\\W]SUUX~X}X|W|W|Z}[}]}^}_}`}a}b}c}c}c}c}b}_}]|[}]~]~[~Y}X}Y}[}^}^|\\|[}\\}^}_}]}Y|X|X|W}U}X}\\|]|\\{[{Z{Z{\\{\\{]{]{^z_z_zazbzczczc{c{b{a{a{a{b{b{czc{c{c|d}d}f}f|d|c|c|b|b{b{b{a|`|_|_{^z^z_z`zb{b|c|c|d|f}i}j~l~k~h}f}e|f|g|h{g{g{g{i{i{g{c{a{_{]{[z[z\\z]zazdze{e{e|e|e|e|d|d{dzdzdzdzdzd{c{d{d{d{d{d{d{e|e|d|b}a}b}c}`}a}e}d~b~a~b~d~c~b~b~a~^~]~Z~]~_~b~f~d~`~_}]}a}b|_|]|\\|]|\\|Z}[}[~Z~XWWWWYZZZXZ[]~\\~[~[~Z~[~_aa]`aefed_^WXXVU~T~TWWY[~]_^^[[[ZWXX~WXYZ~\\~]}]~][[\\ZW~Y^ZY^a~`~U^b_~^~^^]YY[ZYYYWUUTSRRQQPRX\\YVWX~]~]~`~``^]~^~_~`~_^\\[\\~\\~]~_~a~a~aa``[UUSQOONNOPQRSTUXWTSUTRRTUUVWXWWUWXYZ[\\\\[YYXYZ[[ZXXY~]~^~^^]\\[[[[[[ZXWXYZZZZZYXXWVUUVWWVT~T~U~W~XY[[[\\\\][WTSUY\\^]\\Z[[YXWVUUUTTTTUUTUTTTTTTU~UTTSSSSRSTSSTTUUVWWXZ\\]\\ZXWVVVUUVWWWVUUTSSSSSRRRSSSSTSTSSSSTTUUUUUVVVVVVUUVWXXXXWVTRPQQRSRRQRRQQONOPQQPPPPPPOOMJD@>;8656976544567776665789:::988888888889::;;;:::;;::;<<<=<<;:::::99899:;;;;;;<==<=>>???>;97:>ADEDA=;;?AEGGFDCBABBCCBCDDCCBA@?>>>=<===<<<;;;;<<=====<;:ewewewewewewewewewewewdwdwbxbxcxbxbxbxbxaxayay`yaybybxaxaw`vbvdvfvhwjwlwmwlwkvivfvbwjwhwgwgwlwkwiwgwgviwkwlwnxlxixhxfxhxjxkwmxlxkxjxjwjwjwjwjwjwjxjxjxjxixhxgxgxfwfwfwfwfwfwfwfwgwgwgwgwgwhwgwfvfvgvhvgwhwixixixjxkxkwjwiwiwhxhyhyhyexcwbwbwbvbwdwewdwdxcxcxcxeyexexdxcxcxcxbxbxbxbxbybybzbzczczbzbzazaz`z`z`z`z`z_{_{`{`{a{`|`|`|_|_|_|_}]}\\}\\}[|\\}[}[~Z~Z~[~\\~[~[~Z~YY~X~W~X~Z~\\^`bcba`]YWUUUTSST~UXWW~[~\\^^^^]\\\\\\\\\\]^_`__^]]\\[[a\\W^ehhd_^c_]^b`]Z]SY~Z~\\}[|Z{Z{\\{^|`|a}b}a}`}a}b}c}c}c}b|a|]|Y|X}Y}X}W}V|V|Y|Z{^|^|\\{[|Z}\\}\\}[}Y|X{X{Y|V}X|[|\\{]z^z]{]{_{`{a{a{bzczczezezezfzf{e{d{c{c{d{e{e{f{g{f|f|f}f}e|c|b|a|`|`|_{_{^{^|]|]{\\{\\{\\z\\z^z`{b|c|c|d|e|h|k}n~m~i}f}f|g|i|j|j{k{k{j{h{f{c{a{_{[{Z{Zz[z\\z_zcze{e{f|g}g}g}g|g{h{h{h{g{fzf{e{d{c{c{c{c{c|d|d|c|`}^}^}_}_}c}g}f~c~b~c~d~c~b~a~_~]~[~[~^~a~b~c~`~^~^}^~a}b|_|]|]|]|\\}Z~X~VUTSSSSUVVUTVWY~X~V~V~U~V~YZ\\YZ[\\]]ZUWRW~X~V}S}S~T~[YZY[^_`[ZZXVWW~W~X~Y~Z~\\~^~_~_~\\~[]~\\~[}X`\\[^e~a~Y`dbaaa`\\\\[[ZYYXVWVTRQPPRUZ[YVW~Y~]~`~a~bb`_`aba`^]^~_~`~b~d~ddedc\\TTPOOONMNOPRSSSWXVUVTQQSTVWXZ[XUWZ[[[[ZXWWVVYZYXVVW~Y~Z~ZZYXWWXXXXXWVWXXXWWVWXXXWVW~X~Y~Y~Y~Y~X}X~W~WWXYZ\\^]YTSRSVXZYVTUWSQQSSSRRRRRRQRSTUTTTUTTTSSSSSSTSSSSSSTTUUUTUWWXWVUUUUVVWXWVVTTSRRRRRQRSSRRQQRRRRRSSTTSSSTTTTSSSRRSTSSSRRPOMMMNOOOOOOONMMNNNNONNNNMLLKHB?<97656887543456776665689::::98899988889::::::::::::;<<<=<<;:::;;:999::;;;::;=>>==>>>>>=<:7:>ACDCA=;<@BFHGFECCCCDDDDDEFEDBA@@?>>>=====<<;:::;;<<<<<;:9fwfwfwfwfwfwfwfwfwfwfwewdwcwbxbxcxcwcxbxaxay`ybydydxbxaxawavbvdvfvhwjwkwlwkwjvivgvbwkwiwfwiwmwlwjwhwgviwlwmwoxmxixgxfxhxjxkwmxmxlxkxlxlxkxkxjxjxkxkxkxkxjxixhxgxgwgwfwfwfwfwfwfwfwfwgwgwhwhwgvgvfvgvhvgwhwixixixjxkxlwkwjwjwjyjyjyjygyewcwcwcvcwdwewewexdxdxdxfxfyfyeydxdxcxcxcxcxcxbxbybycycycydycyczbzazbybyazaza{`{a{azb{b|a|a|a|`{`|_|^|]|]|\\|\\|\\}\\}[}\\}]}]}^}^~^~_~^}[}X}Y}Z~[\\^`aa`]ZWVWXW~VUUU~V~X~Z~[~^~```_^^]]]^^^__`a`_^^]ZZ^X[effggZ`a`_aee]`[Z\\~_}]}\\|[{]{_{a|c|d}d}b}a}a}b}c}c}c|b|a|\\|V|U|V|V|U{T{VzXz[{_{_{]{\\|\\|^|]|\\|Z|Z{Z{\\|X}Z|]{^{_{`{`{a{b{c{c{c{e{e{ezfzf{g{h{g{f|e|d|d|e|e{f{g{h|h|h|g}f|d|b{a{`|_{^{^{^{]|]{^{^{^{]{\\z\\z^{`{a|b|b|c|d|g|k|l|l}h}g}h|i|k|k|j{j{h{f{d{b{_{^{]{[{[{\\{\\z\\z^z`zb{c|e|h}i}i}i}i|j|k|k{j{h{f{d|c|b|b{a{a{b|b|b|a|`}`}`}_}`}d}h~g~d~d~d~d~dcc~a~^~[~]~`~c~c~a~^~]~^}`~a~a|`|]|]|]}\\}Y~URRQQQPQRTUSSTUW~W~U~T~S~R~SUWZYWUUVU~R~X}Y}Y|[|W}V}T}R~Z]]\\\\_`~_ZZYZZYX~V~W~X~Y~[~\\~]~\\[Y\\]]}U\\\\][ea]bfdaccb^^\\\\[YXWWXWVTQQQTWZ\\ZWX~Z~^~a~cccbaabcba``b~a~a~b~ddeedaYQSPQQQONNOQSSSRUXXWWURPRTWXZ\\]YUX\\]\\[ZYXWWVVXYXXYYYX~X~XWUTSTUVWWWWVVWWVUUUVVVVVWWXXYYZ~Z~Z~X~WWWXY[[ZXTSQRTUVUSQQRNMOPRSSTSSSRRRSTTTUUUUTSSRSSRRRRSSRRRRRSSQPPSTTTTTSTTTUVVUUTSRRQQQQPPQQRQQPPQQQQQQQQQPPPQQQQQPPOOOPPPOONNMMLLMMMLLLLKJJIJKKKKKKKKJJIHEA=:86546887543456777665579:;;;::9::9998889:::::;:::::;<<<<<<;:::;;;;:::;<<;;:;=>>><;;;<==<:8:=@BCB@=<<@CGHHGEDDCCDDCCDEFEDCBA@????>>====;:999::;;;::998fwfwfwfxfxfxfwfwfwfwfwfvewewewewdxdxdxcxbxbybzdzeydxbxaxbwbwcwdwewgwiwiwjwiwivhvgvcwjxiwixkxoxmwkviwivkwmwoxoxmxiygxfxhxjxkwmxmxmxmymylylykykxkxkxkxkxkxkxjxixhxgwgwgwfwfwfwfwexexfxfxgxgxgwfvgvfvgvgvgwhwixixiyjxkxlxlxkxkxkykykyjyiygwfwewewewewfwexfxfxfygyhygygygyfyexexdxdxdxcxcxcydydydyeyeyeydzczbzcycyczczb{b{b{bzc{czbzbzaza{a{a{`{_|_|^{^{^|^|]|^|_|_|_|_|_|_|^|\\|Z}Z}[~\\]]\\]]\\\\ZXYZ[~Z~Y~W~V~U~V~W~X~Z~\\~__^]\\\\\\]]]]\\\\]]]]\\[ZYWXYW[ec~bddV]^`acfe`e^_`~c}a}_|_{`{b{d|f|f}e}e}d}c}d}d}d}d|b|^|Y|U|U{V{V{V{VzWz[z\\z_{`{_{_|`|a|a|`|^{^{^{`|\\|]|`{a{b{c{d{d{c|c|b{a{c{d{e{f{f{g{h{g|f|f|e|c|b|c|e|f|g|g|g}g}f|d|c{b{c|c{b{a{aza{a|a|a|a{`z_z^z_{`{`|a|`|a|c|f|i|g|f|e}g}h|h|i|h|e{c{`{_{^{^{^{^{]{\\{\\{\\{\\z\\z]z^z`{a|d}g}i}i}i}i|j|j|j|j|h|f|d|a|_|^|]|]|^|^|^|^|_}c}b}a}a}e}g~g~d~d~e~fgggda~_~`~b~d~c~a~^~^~_}a~b}a}_|]|\\|\\}[~WROQSSQQ~Q~S~U~W~T~S~U~X~Y~X~X~V~U~U~UUWZZXUUVV~V~]}]}^|^|Z}Y}Y}T~Z~a`_^^`\\WWWXYXVUWWW~W~W~XYWUY\\Z~RXZZXbb^cgc`ced]_^\\ZXWWWXXXVTSSTVZ]~\\~X~Y~Z~_~acdfdb`_cecbbba``aaaa_[SMSSTUTRPQRTUUSQRVYXXVSQTWYZ[]`\\VY^_^]\\[ZZZXY[[YY\\[ZZYXWVUTTUVWXXWWWVUSRRSSSSSTVWYYYXYY~Y~YXXXYXYYZYWVTTTUUUTRQRQPPQTTUVUUTTTUUUUTUUTSRRRSSTSSSRSSSSSSSRSQQQRSSSSSSSSSSTTTSSQQQPPPOOOPPQPOOOPONNNNNNNMMMNNNNNNNNNNNNONNNMMMLMMMLKJJIIHGHHGGGGGGGGFFECB>:874446888653334567765568:;<<<;:::::998889::::;;::::;<<<<<;;9::;;<;::;;;;;;:;=>><:999:;<<:9:<?@A@>===ACGHHGECBBABBBBCDEEDCBA@@???>>=<<<:98888899998777ewewewewewewfvfwfvfvevevevewewewdwdwdxdxcycycydydxcxaxbxbwcwcwdwewfwgvhvivhvhugufwewiwjvjwmxoynvkvjvivkwnxoyoylyixgxgxhxjxkxlxmynymymzmzlzlykykxkxlxlxlxkxjxjxixhxgwgwgwgwgwfwewexdxexfxfxfwfwfvgvfugvfvgwgwhxhxixjxkxkwjwjxjyjykyjxixhxgxgwfxexexexexfygyhyhyizhyhygyfxfxexexdxcxcxbxcydydyeyfyeyeyeydzdzdzdzczdzczb{c{c{d{d{czbzbzaza{a{`{`{`{`{`{`{`{_{_{_{`{`{`{`{_{^|]|[|\\}\\~]~]~\\~[~ZZ[\\YZ[~\\~\\~[~Z~X~V~U~V~VWX[\\\\[ZYZZ[[[[[ZZZ[[ZXWVVVWX[]~^~_~_~\\~X~Z~]~_adfebb`cd~d}c}`|`|`|b|f|g|g|e|f}f}e}e}e}e}e|b|[|V|U|V{W{XzXzWzXyZz]z`{`{a{a{a{c{b{a{a{b{b{b{_|`|b|c|d|d|e|d|c|a|`|_{a{c{e{e{f{g{g{f|d|e|d|a|_|b|c}d}d}d|e|e|e|d|c{c{d|e|d{d{czd{e|d|d|c{bzaz`y`z`z_{_{`{`{c{f{f{c{b|c}e}g}g|g|e|`{^{[{Z{Z{\\{^{^{^{]{]{\\{\\{\\{\\{^{_|`}c}f}g}g}h}j}j}j|j|i|g|e|c|`{]{[|Z|Z|Z|[|\\|\\|\\|^}a}c}e}e~f~f~e~d}f~ghhgeb~a~a~c~d~c~a~^~_~`~a~a~a}_}]}\\}[~Y~UQPQTTS~R~R~T~W~X~U~T~X~Y~[~Z}Y}X~X~X~VVWXXW~VUVW~Y~\\~_}_}`}]}[}\\|Y}[}c~a_^\\[XUUUWXVUUWVVUTUTTRTTUPUTUU]]]```^cec[__\\YWWWXYYYXVSSS~U~Y\\~]~W~X~Z~_~b~ccgdb^^cccbab_^\\\\[ZZXUMOTTVYWSQVVUVVSPPVXYXWTTVY[~][]`^WY`_^]\\\\\\\\\\\\\\\\\\[[\\[[ZYYW~V~U~V~V~W~XXXWXXWUTRQQQRRRRTUW~Y~YXWXY~Y~X~XXYXXYYYZYWVVUTUVUSQSTQQRUVWWWUVVWVVUUUTTTSRQRSTTTSSRSSSSSRSSRRRQRSSRRRRRRRRRSSSRQPPOOOOOOPPOOONNNMMMMMLLLLLLLLMMLLLMMMMMMMMMLLMLLLLKJIHGGGFFFEEEEEDDDCCB@>;97645678887542235666654479;<<<;;::::9998789::::;;:9:;<<<<<;;:9::;;;;;<<;;<<<;;<<;98889:;<:9:;=@?>=<<=@CFHHGEB@@@@@@ABCCDDCBA@??>>>>=<;:988887888777655eweweweweweveveveveueuevfvfvfwfwewdwdwdxeyeyeydxcxbxbxcxcwcwbxbxcxewfwgvgvfvfufufvgwhwjulwnwpxnululukvmwoypyoylyhxgxgxhxjxkylymymynynznzmzlylylylxlxlxlxkxjxixixhxhxgxgwgwgwfwdwdxcxdxexexfwfwgvgvfvfwfwgxhygxgxhxiwjwjwjwjwixjxjxjxjxjxixhxgyfyeydyeygyiyjzkzjziyiyhxgxfxfxexexcxbxbxcydyeyeyfyeyexfyfzfzfzezezdzczc{d{d{d{d{czbzbzczczczbza{a{a{a{a{azaz`z`zazazaz`z_z^{]|]|]}^}^}^~]~\\~[[\\]~Z~[~]~]~\\~\\~[~Y~W~V~U~UTUWXXWVVWXYXXXWWVWVVUTSTUVWW~X~Z~Z~[~Y~W~V~X~[~^abccbbceff~e}c}a|`|b|f|g|h|f}h}g}g}f}f}e}d|`|Y|U|T|X{[z[zZzZy[y]y_yazb{b{c{c{e{d{c{e{e|e|e|a|b|d|e|e|e|d|c}_}[}[|]|_|a|b{c{d{e{e|e|b|c|c|_|]|_|`|`}`}`|b|c|d{d{d{e{f|g|g{g{f{f|f|g{g|f|e{dzcya{_{_|^|_{a{a{b{b{`|_|a}b}d}d}d|`|[{Z{Y{Z{[{]{_{`{`{`{_{^|]|]{]{^|^|`}c}e}e}f}f}f}f}g|h|g|e|c|`|]|Z{X|W|V|V|W|X|X|X|Z|^}a}b}d~f~f~e}d~fhiigecbbc~c~c~b~a~a~a~a~a~_~]~\\~[~ZWTSTUW~W~V}T}T}W}Z}[}X}V}\\}]}^}]}]}]}]~[~Z~YWWVUVWWY[~\\~_~a}b}`}_}^|_}a}b~b_\\XVSRRSUUTTVWUUTQQPPNPQRMQPQQWVVWYY[acbX`]ZWVVWXYZZZXU~S~T~U}Y}Z~_~\\~X~Y~_~b~bcjec][adba_^ZWVVUUTRRMPTVY[XSSYYYZZVOMTXYXWXY~Z~\\~]~^~\\]`_YZa__^^____^__^]^`][[\\[ZYXY~Z~[~[ZXWXXWURQPOPQQQPR~T~V~Y~YYYZZZ~Y~YYYXXXYZZ[ZXWVUVWWVUWXUSTXYYYXWXXYXXWVUTTSRQQRSTTTTRRSTTTTTUTSRRRRRSSRRQQQRRRRRRQPOOOOONNONNNNNNNMLKKKKJJJIIIIIJJIIJKLLKKKLLLMMMLLLKJIIHGGGEEEDCCBBBA@@?>=:864446789998742124566654369;===<;;:99::9988999:::;;::;<==<<;;:::;;:;;;<;:;<<;::999987689:;:999;===<<<=?ADFFECA??>>>=>@ABBBBBA@?>>===<<:8777777777766544eweweweweweveveveveueufvgvfvfvevdwdwdwexfxfxexcxbxbxcxdwdwcwcxbxbxcwdwevevevdufufvgwhwkumwnwpxnvmululwnxpyqzoylxhxgwgxiykylymymznznznznznzlzlymymymymxlxkxjxixixixixixhxhwgwewcwcxbxcxdxexfwfwgvgvfwfwgxhygxgxgxgxhwiwiwiwiwhwhxixjxkxjxjyiyhyfyeydyfyhyjylzmzlzkyjyixhxgxgxfxfxdxcxcxdyeyeyexfxexdyfzgzgzgzgzgzdzbzc{e{e{e{d{dzczczdzdzdzdzczczczczbzbzbzazazbybybybyay`z_{_{_|^|_|_}_}^~_~_~^~_~\\}]}a~`~]}Z~YYX~X~W~V~U~UUUUTSTUVWW~W~V~V~V~V~V~U~U~T~S~S~TUWWX~Y~X~X~X~W~U~U~W}[~^~]\\]_`~a~c~e~f~g~f}c}b|`|`|c|e|i}h}j}i}h}g}e}d}c|^|W|T|U|[{^z^z^z]y]y^zazazb{c{c|d|e|d|d|e|d|d|e|a|b|d|d|d|c|`}]}X}V}W}Z|\\|^|`{`{b{b|b|b|^|`|_|\\|\\|]|]|\\|]|^|`{a{c{e{f{g|h}i}i|i|h|g|h|i}i}h|g{f{cza{`|]|]|_{`{a{`{_{^|_|`}`}a}a}`}]|[{Z{[{\\{^{`{`{a{a{`{`|_|^|]|]{^{_|`}a}b}b}b}`}_}`|c|e|e|c|`|]|[|Y|X|W|V|U{U{V{V{V|X}\\}^}^}\\~_~c~c}d~ehhhfdcbbcc~c~b~a~a~a~`~`~^~\\~Z~YXWVVWYZ~Z~Y}W}V}X|[|]|\\}[}_}`}a}_}^}`}`}^~]~[XWVUUVWXZ~]~_~c~c~b}a}`}a}b~cb^ZTRPPPQSUVXZYVV~U~S~SSTRSSSNQQMMSQQRSUW[[\\X\\WVVWWXYZ[[[ZW~V~U}W}Y}Z~]~_~[~[~`~bbblha[\\__`_[ZVSRRQQPOPNQSW[\\XRW]YY\\\\WOMTYYYXZZ~\\~^~^~_~\\^b`YZa__^]^__`aaa`_ac^]]_^]]\\]]]][ZYXWUSRQPPQRRQQR~T~V~X~XYYZ[[[ZZZXXWXZ[\\\\ZYWUVXXWVZZWUVYZ[ZZ~YYZ[ZZYWVUTSRPQRSTTTTSSTTUUUUVUTTSRRSSSRPPPPQQQQQQPONNNNNNMNMMMMMMLKJIIHHGGFFFFEFGGFFGHIJIIIIIJJKKJJJJIIHGFFEEDCBA@@@?>=<;;:865345779:;:9853123567664358;=>>=<;;::::::99:999:;<;::;<===<;:::;;;;:;<<;::<=<:87888776789:99889;;;<<<<>?BDDCA?>==<<;<>?AAAAA@??>==<;;;:8666676666654433fwfwewewevevdveveveueufvfvfvevevdwdwewfxgxgxfxdxdxexfwfwfwdwcxcxbxcwcwcvdvdvcuduevevhvjukvmwnxmvlvlvmxoyqzrzoykxhwfvgwixkylymzmznznynznznzmzmznznyoyoymxkxjxixhxixixjxjxixgwdwbxbxbxcxdxexfxfxfwfwfwfwgxgxgxhxgxgxgxgwhwhwhwhxhxhxixjxjxixhxgxexdyeygyiykylzlzlzkykyjxixixixhxhxfxexexdxexewewewdxdxexfygyhyhzhzdzbzdzfzfzfzezdzdzezezezeyeyezdzdzdzczczczczczdydycycybyay`z`z`z`z`{a|a|b}c}c}b}a}_}`}c~`~\\}Z~ZYYZ~Y~X~W~V~V~W~W~VUVWX~X~W~W~V~V}W}W}X}V}V}W}W}W~X~XYZ[~Z~Z~Y~W~V~V~V}Y}\\}\\~[~Y~Y~\\~^~`~`~c~c~d}c}b}`}_|]|^|a}f}h}j}i~h}f}c}b}`|[|V|W|Z|_{bzaz`z^z]z_z`z`{a{b|b|c|c|c|c|d|b|a|c|`|a|a|a|`}_}[}X}T}S}W|Y|Z|[{\\{]{^{^{^{]|Z|]|[|Y|Y{Z{Z{[{[{\\{^{a{c{e{g{g|i}k}j}j|i|g|i}i~j}i}h|f{d{b|_|]|]|^|_|_|_|_|_|^}^}_}_}^}]}[|[{\\{^{_{a{b{b{a{`{`|`|_|_|^|^{_{`{a|a|`|_|_|]|[|\\|_|b|b|_|^|]|[|Y|Y{Y{X{W{W{XzX{X{Y|\\|]}Z}U}Y}^}`}`}b~d~efdbb`bdcaa~`~`~`~_~^~\\~Z~Y~XXWXZ[\\]~[~Z}Y}Y}[}^}a}`}_}a}b}d~b~`~c~c~a~^~[YWTTUVVWY[]bba`_`ab`\\VRPQQRTVXZ\\~^\\Y~Z~Y~W~VVXVWWWRUSNOSSRQTUVWSWXYRWXZZ[[[]\\Y][~Z~Z}[}]}^~_a__abb`lha\\[]\\\\[XVSQQPOPPPQQSSXZZVSX^YZ]^ZROUYZYYZZ\\^^^\\]a`WW^\\\\[[]_`abbbbbce`_`ba`__`aa`]ZXWUTTTSRRTUTSRSUVWXXYZ[[[[[ZYWVWYZ[[[YWVVWXWXZ[YWX[[[[Z~YY[\\[ZYYXVUSRQQRSTTTTSTUUVWWUVVUTSRSRRRRPPQQQPPPPPQQPPPOONMMMLLLLLKJHGFDCBBAAAABCDDDCCDEEEDDDEEFFFEEEFEFEEDDDBBA@>===<::9887654445789:;;:975223577886448;>???=<<;::;;:::;:99:;<<;:;<=>>=;::9:;;;:;<<:9:<=<:87788765789998788::;;;;==>?AA@?><;::9:;<=>>???>>==<<;::::8655566666654322fwfwewewevevdvdvdvdueuevevevdwdwdwdwexfxgxgxfxexfxfwfwfwewdxdxcxcxdwdwcvcvcvcudueuevgviukvlwmwkvlwlwnypzrzqzoxkwhvfvgwixkxlymzmznynynznznzmznznyoyoyoynxlxkxjxixjxjxkxkxixgxdxbxbxcxdxdxexexexfxfwewfwfwfxfxgxhxgxgxgxhxhxhxhxhxhxixixixhxhxfxdxdxdyfyhyjzkzkzkzkykyjxjwjwiwjxixhxgxfxexewewewewdxdxexfxfxgygygzdzczezgzgzfzdzdyezezfzfzfyeyezdzdzdzdzczczczdydydydydycxax`x`y`z`z`z`za{b{c|c}b}a|`}b~e~`}[}Z~Y~Y~Y~Z~Z~Y~X~W}W~W~X~YZZZZ~Y~X~W~W}W}X}X}X}Y}X}X}Y}Z~[~[~[~\\~\\~\\}[}Z}X}W}W}X}Z}\\}\\}Z}X~X~[~]~^~^~]~\\}\\}]}^}^|]|\\|[|_}c}e}g}g}e}c}a}`}^|Z|U|Z|]|c{d{c{a{^{^{^{^{_{`|a|a|b|a|a|a|b|`|_|a|^|^|_|^|]}Z}W}U|S|T|W|Z|Y{Y{Zz[z\\z\\{[{Z{X{X{W{X{X{Y{Z{Z{[{\\{^{`{b{e{g|g|i}k}j}i|h|g}i}i}j~i}h|f|d{a|_|\\|\\|]|^|]|a|b|^|]}^}^}^}]|[|[|\\{]{`{b{c{c{b{a{`{_{_|^|_|_{_z_{_{`{a{`|_|^|\\|Z|[|^{`{_{^{]{\\{[{[{[{[{\\{\\{]{]z]z_{_{]|]|[|U|^|`|_|_}_~`~cdca``adba`_~_~^~]~\\~[~Z~YYYYZ[\\]]~\\~Z}Z}[}]}_}a}b}a}b}b~ee`~e~e~c~_~]YYPTUUTUXZZ[ab___`^\\XTQQSTUV~XZ\\~^~`]\\~[~[~Y~Z~Z~]\\\\\\\\Y~ZUNSWU~W~Q~TUXYWQaaUXZ\\]]\\[^^X\\\\~\\~^}^}^~^`bb`bbc`jia\\[[ZYZWTSPOOOOPQQSUWYYX~U~TXYYY]^ZSQUXYYXXYZ[[YVX\\[WVWXWVWYZ\\]_`abcdd``acca`_`aa`]ZWUTTVWUSTVWVUTTUVWXXXY[[ZZZZXWVVWYZ[ZXVUUVWVUZ\\XXYZ[[[ZZY[\\\\ZYZYXUVSQQRSTTUUTTUVWWWUUUUTSRQQPPPQQPPPOOOOPQRRRQPOONNMLLKJJIHFEDB@???????@ABA@@AAABBBBBBBCCCCCCBBBBBAA@??><;;::98766554434589:;<;;:85323578897547;>@@?>=<;;;;;;;;;;:::;<<<;:<=>?><::9:;;:::;;:99;<<:876776657889887789::;;<<<=>??>><:99999:;<<====<<<;;;::::97654556666665433gwgwfwevevdvdvdvdvduevevdvdvcwdwdwdwexfxfxexfxgwhwhwgwfwewdxdxdxdxewdwcvcvcvcucuduetguiujvjwjwjwkwkxnzq{rzqznxjvgufufvhwkxlymzmzmymymzmzmznznzoypypyoyoxmxlxkxjxjxkxlxlxjxgxexdxdxexexexexexexewewewewewfwfxgyhxhxgxgxgxhxgxgxgxhxhxixixhxgxexdxdxdyfygyhzizjzjzjyjxiwjwkwkxkxkxixhxfxewewewewdwdwcwdwfxfxeyfyfyeyfygyhyhyfzdzdzezezezfzfyfzezdydydzdzdzdzdyeyeyeydydxcxaw`waxay`y`y_y`zazb{c|b|`|_}a~a~^}\\~\\~[~Z~Z~[~[~[~Z~Y}Y}Z~[~\\~]~]~]~\\~[}Y}X}X}Y}Z}Z}Z}Z}[}\\}]}^}_}_}_}`}_}_|_|^|[}Z}Z}[}]|]|\\}[}[}[}\\}\\}\\}[}Y}X}W}Y}Z}[|\\|[|[|[|_|`|a}a}`}_}`|_|^|[|V}\\|`|e|e|d{a{^{\\{\\{]{^|_|_|_|_|^|^|_|`|^|]|]|\\|[|[|[|Z}X}V|U|U|W{Y{[{Z{YzZzZz[z[zZzZ{Y{Y{Y{Y{Y{Y{Z{Z{[{[{]{`{c{f|f|f|h}i}h}h|g}g}h}i}i~h~g}e|d|b}_|\\|\\|]}_}`}`}_}^}]}^}]}]|]|[|[|\\{^{`{b{d{c{a{`{_{^{^{^{_{_{_z_{_{`{`{`|_|_|\\|[|]|^{_{^{]{\\{\\{]z]{^{_{`{a{a{bzbzc{c{a|`|]|V|`|a|^|^|^}_~`~a~`]\\~_~e~c_`_]~\\~\\~\\~[~Z~Z[[ZYZ\\\\]^~\\~Z}[}]}_}`}a}b}b}b~cgfaffc_\\XYPUUUSTVWVSZ\\[\\]\\ZXTRRSVXYZ~Z~\\_`~b~`~_~^}^}]}^~_~aa``a^^WQVZZ[~T}V~X~[\\\\T`bZ\\]_`_^[]bUYa`a~`}`~abdcbbcc`gf_[YXXXXWTSPOOPPQQRSUWXXV~U~UUVW[^^[VTVWXXWVVVWVURRUUSRSSRRRSUWY[]_`bddbaaccb`__aa_[WTSSUY[XVWYYXWVVWXXWWXY[[ZZZZXUTUVWYYYXVUUUVWXY[YZ[\\[ZZZZYZ[[[Z[[VTTSRRRSTUUUUUVVWWVVUTTSSRPOONOPPPPONNNNOQRSSSRQONLLKJIHHGFECA?=<;;;;;<=??>=====>??@@?>>????>=<<====<<<<:998876554455445689;<<<;;97434578998657;>@AA?>=<;;;;;;;<;;::;<=<;;;=>??=;:9:;;::::;:99:<;:877776656789887789::;;<;;:;<=<<:8888999:::;;;;::::::99:::8765556667775433hwhwgwfvevevdvdvdvcududvdvdvcvcwewewdwewewewfwgwhwhwhwgwewdxdxdxexfwdwcvcvcvbubtdtdufuhuivjviwiwixkyn{q|r{pymxhveueufviwlylymzmzlymymymynynyoyoypypypyoxmxkxjxixjxlxmxlxjxhxexdxexfxexexexexexdwdwdwdwdwewfxgygxgxfxfxfxfxgxfxfxgxgwhxhxgxfxexdxdxdyeyfygzgzhziyixhxhwiwjwkxkxlyjyixgxfwewewewdwcwawdwfxexdxdxdyfyhyhyiyiyhygygzfzezfzgyfyfyeydyeyeyezdzezeyfyfyeydxdxcyax`xaxayay`y_y_z_z`{`{_{]|\\}]}]}\\}\\}]}]~\\~[}\\}\\}[}Z}Z}[}\\~]~^~^~^~^~]}[}Z}Z}Z}[}\\}\\}\\}\\}]}^|`|a|b|b|a|b|a|a|`|_|^|\\|]}]}^}^}]}\\}\\}]}]}\\}[}Y}W}V}U}V}Y}Z|\\|[|Z{Z{\\{]|\\|\\|]|]|^|^|`|_}Y}^}`|d|d|d|a{^{[{\\{]{]|]|^|^|]|[|[|[|]|\\|\\|[|[|Z|Z|Y|Y|X|X|X{Z{[{]{]{\\z[z[z\\z]z]z\\z[z[{[{[{[{[{[{[|[|[|\\|^|`|b|d|d|e|f|g|g|f|f|e|g}g~h}g}f}e}c|a|^|\\|[}]}^}a}_|]|_|^}]}]}\\|\\|\\{\\{^{^{`{b{c{b{`{_{_{^{^{^{_{_{_z_{`{`{`|`|`|_|^|^|_{_{^{]{\\{\\{]{]z^{_{`{b{d{e{e{e{h{g{e|c|`}Y}b}d|`|`|a}b}b}a~^\\\\~a~e~`~^~b~^~Z~Z~Z~Z~Y~YZ\\\\[ZZ\\\\]]~\\~[}[}_}a}b}b}b}c~ccgfbfeb]YVZSVWVSTWWTQVXXXZYVTRQSUZ\\]]]^_adba~`~`}_}`~bddbbda^YTY]`_~U}X~[~^__Y`c___abba^`_[Wa_c~d~bbbccbaba_ecZYXWWXYXUSPOOPQQRSUWYZYX~USRSWY\\\\ZXUVWWUTSRRSSQPNPPOOPOOOPQRTUWY[\\^``__`bba_^^__\\XUSRSW[]ZXY[[ZXWWWXXWVWXZZYYXWURRSTVWWWWUUTUVYWXYZ[\\\\[YYYYXYZ[ZZ[ZVTTTSSSSSSTUTTUUVVUUTSSRRQONMMNNOOONNMMMNPQRRQQPNLJIHHGFEECB@><;9989989;<<;:::::;<===<:9:;::9988899999::9877765444445545689;<<<<;97545679999766:=@BB@?>=<;;;:;;<<;::;<<<<;;=>??=;:9:;:999:::989;;9877776657889987789::;;::::;;<;:9767899:9999999888998899998876656778887644iwiwhwgvfvfvevevevdududvcwdwcvcwewewewewewfwfwgwgwgwfwfwewexfxfxfxfwewdvcvcvcucteteufuhuhuhvhwhwhyjyn{p{q{pylwgveueugvjxlymzmzlykxlxlylymynynynyoyoyoynxlxkxjxjxkxlxmxlxixgxfxexfxfxfxexfxexexdxdxdxdxdxdxexexexexdxdxexexexexfxgxgxhxhxgxfxfxexexexexexfyfygygxgxgxgxhxixjyjyjyjyhyfxewewdwewdwcwawcwexexdxcxdxfxhyiyhyhygygzgzgzezezfzfyfyeydyeyeyeydyeyeyeyeyeydycybyaxbxayayay`z_z_z^z^z^{^{]{\\|\\|[|[|\\|]}\\}[}[}[}[}Z}[}[~\\~]~]~]~^}]}]}\\|[|Z}[}]|^|_}`}^}_}_|`|a|a|b|b|b|c|c|c|b|`}_}]|`}_}^}]~\\}\\}\\}]}]}[}Z}Y}W}X}V}W}Y}[|^|^|]{\\{\\{[{Z{Z{Z|[|]|^}_}_}[}^}_}a|`|b|a|^|\\|\\|]|]|^|_|^|]|[{Z{[{]{]|]|\\|]|]|\\|\\|\\|\\|]{]{_{`{_{_{_z^z]z^z`z`{`{_{]{]{^{]{^{]|\\|\\|\\|\\|^|_|a|b|b|b|c|d|d|c|c|c}d|e|f|e|d}c}a|`|^{\\|\\|]|]|]|^|_|_|^}\\}\\|[|[|[{\\{^{^{`{b|b|`{_{_{`{`{_{^{_{`z`z`{_{`|a|`|`|`|`|_|^{^{]{\\{[{[{[{\\{\\{]|_|b{d{e{f{g{i|j|h|f}c}^~e~g~e}d}d}d}b}_~\\~\\~_~`}a~\\~^~`~[~X~Y~Y~Z~YYZ[[ZZZ[[\\\\~\\~[~\\~_~b~b~b~b~ba`aa_a_]ZYW[WYXWSTXXVTVXWVVUSRQSWY~^~``````abcaaa~_~abca``c_\\YX\\`c_~V}Y~]~a^\\\\aebbabccda_Zb^_^ceb``__^^^^^b_ZYZYYXYYWRPPPPRRRSVY[\\\\ZWRRSVWZZXXWWWVTRRRQQPPNMNONOPOONPSSSSSVUVWXZ[\\]__^]]\\\\\\ZWUSRSVYZYWY[[ZYXWWXWVUVWXWVVUTQONOQSTUUUTTSTUXVVXZ[\\[ZXXXXXYZZYXYYWVWTSRRRSRRRRQRSTSRRQQPPOOMMKKLLMMMMLLLLLMNNNNMLKIGEDDCBAA@><;:9877666788998877789:;:9766777776567777888887776655556666669:;<<<<;:87667799::9767:=@BAA@?>=<<;;;<<;:8:;<==<;<>???>;99::9:9:98778:::98777777788998778999:::9::::;::865788:;;;:::99998888889998877767788999866jwiwhwgvgvgvfvfvevdvdvdudwcwdwdwdwdwdwewewfwfwfwfwfwewfwfwfwgwgwgwfwewdvdvdudududueufuguhuhuhvhwgxiymzozpznyjwgvevevhwkxmymylykykxjwjxjxkylymynznymynymykyjyjyjylynxmxkxixgyfyfxfxexfxfxfxexexewewdwdwdwdwdwdxdxdxdxdxcxcxdxexfxhxhxgxgxhxgxgxfxfxexexexeyeyfxfxexewfwgwhxhxhxixhxgyeydxdwdwewcwbwbwcwdwdwcwbwdxfxgxhxgygygzgzf{f{ezezeyeyeydxdxdydydydydydydydydycxcxcxbxbxbxbxay`z_z_z^z^z^z^z^z]{\\{\\{[|[|\\|[}[|[|Z}Z~Z}[}\\}]}]}]}]~]}]}\\}[|[|[|\\|]|`|a}a}`}`}`|`|a|a|`|a|a|b|c|c|b}`}^}\\}b}_}]~\\~\\}[}\\}\\}\\}[}[}[}Z}X|X}X}\\}\\|_|_|^|]{]{[{Z{Y{Z|[|[|\\|^}^}]}^}^}^}^}`|`|^|]|]|]|^|^|_|_|^{\\{[{[{]{]|]|]|^|_|^|^|]|^{`{b{a{a{`z`{`z_z_z_zaza{c{a{`{`{`{`{_|_|^|]|\\|\\|^|_|`|`|a|`|_|_|_|`|a|a|c|c{d|c|b|a|`{_{^{]{\\|\\|[|\\|^|_|^|\\|Z|Z|[{\\{\\{]{^{^{`{a|a|`{^{_|`|`|_{^{^{_z`{`{_|`|a|_|`|`|`|_{^{]|]|\\|[|Z|Z|[|[|\\|^|`|c|e|f|g|j|j|h|f}e~b~g~ig~f}e}c}a}^}[~\\~_}_}^~\\~]~]~Z~W~Y~Y~Y~XYZ[ZZYYZZ[[\\[\\^`a`ab`_^^]]][YWY[X\\YXSUYXVUVTTTUSRQQSX[~^~aaa`````bbaa_`a``^^a^ZZY^ac_~X}[}`~b]Y]adbbaaccec^]_^^_cea^\\\\\\\\\\\\\\\\^]ZZZ[YXXZWRORPPRRSTVY[\\][XTSTVXXXXXXXWVTQQQRQPOOOPOOOPPOMPTUSRRTTSSUWXZ[\\\\\\\\[[[ZYVTSSSUXYXWXYYYXWWWWWVUUVVVUTSQOMLLNPRSSTSSSTTUTVXYYZXXWWWXWXYXWWWXWUTTSRRQRRQQPPQQQQPOOOONNNLKKKKLMMMLLLLLLKLLKKKJHFDBAA@@??><;98765555556777666666789985456666665565556888776676555666776689:<<=<<:9767889:;;97779=@ABA@?>>=<;;;<;:989;<==<<;<>??=;:99::99997678:::98888778888888888889:::9999:998765678;;<;;::9999988878889887777778999:986kwjwiwhvivhvgvgvfvfvevdvdvdvdwdwewdwdwewdwewewewewewewfwgwhwiwiwhwgwewevdvdueueufufugufugtguhvgvfxhxlynynylyhwgwgwgwiwkxmxmxlxkxjxiwixixjykylzlzmylylylyjyjyjykylymylxjxhygygyfxfxexfxfxfxexexewewdwdwdwdwdwdwdwcwcwcwbxbxcxexgxhxhxhxhxhxhxhxgxfxexfxexexexexdxdxdwdwewfxfxfxfxexdycybxcwcwdwdwcxcxdwdwdwdwcwdwexfxfxfyfyfze{e{e{e{ezdydydxcxdxdxdxdydycycxcycycybxbxcxcxcxcxbybzaz`y`y_y_z^z_z_z^z]z\\z[{Z{Y|X|Y}Z}Z}Z~[}\\}\\}\\}\\}[|[|[|[|[|[|[|\\|]|^|`|b}b}a}`}`|`{_|_|^|_|`|b|b|c|b}_}^}\\}e}^~\\~[~Z}Z}Z}Z}Z}Z|[|\\|[|Z|Z}[}_|`|c|b|a|`|_{]{\\{\\{[{Z{Z{Z|\\}]}^}^}]}\\}]}_}_|_|_|_{_{_{`{a{`{_{^{^{^{_{_{`|`|a|b|a|`|`|b{d{c{b{bza{b{c{b{az`zb{c{e|c|b{b{a{a{`|`|_|]|\\|[|]|^|_|_|^|^|]|\\|\\|]|^|_{`{a{b{a{`|_|^{^{^{]{]{\\{Z{[{^|^|\\|[|X|Y{Z{[{\\{]{^{^{`|a|a|_|^|_|a|b|a|^{^{_z`{`{_|`|a|_}`|`|`|_|^|]|\\|[|Z|Y|Y}Y}Y|Y|[|]|_|c|e|g|i|k}i}g}f~fhjjh~e}b}`}\\}Z}[}]}]}]~\\~Z~Y~X~X~Z~YXWWXYYXXXXYZZZ[[]]^^^_^]\\ZYZ[[YX[\\Y`[ZRWZXVUTTTTTSRQRUY]`ccca```]bbaa_``\\][[^\\YZ[^`a_Z~]~_~c_X]aca`^^_acc_\\]^]]ab][XXXXXXXYZZ[\\]]ZXX~Z~YPPTPPUTTTWZ\\]]\\ZXWWXXXXYYYXWUSQRRTSRQSSRQQQRRPMQXXURRTTRQRTVXYZZZZZYXXXVUTSSTUVVUVWWWWVVVUUUUTUTTRPOONLKJKMOPQQRRRRRSSUVWWVVUUUVVWVWVVUUTTSSRQQQRQQOONNNNNNNMMMLLLLKJJJKLLLLKKLKKJIHGGGGFDA?>==<;;;;:976544444345665554445678986434556665454456788877776666778899889:;===<;:988889:;<:9889:<ABBA@?>>=<;;<;9878<>??><;;<>@><;::;:999865689::9888888888888888888899999988776653689==<<<;::99::99988789888778888999:;:8lwkwjwjvjvjvivhvhvgvfufvevevdwewewdwdwdwdwdwdwdwdwcwdwfwgwhwiwiwhwgwfvfveueufufufugugugtftguivgvfvgwjxlxlxkxhwhwiwiwjwmwmwmwlwkxjxhwhwhwiyiykzkzkylykyjyiyjykykykylykyjyhygygygxgxfxewfwfwewewewewdwdwdwdwdwdwdwdwcwcwawbwcwewgwhxhxhxhxhxhxhxgxgxfxfxexexexexdxdxcwdwdwcxcxcxcxbxbyayaxbxcxdxdxcxcxdwdwdwdwdwdwdwdwdxdxdydzdzdzdzdzdzdydxdxdxdxdxdxdxdxdxcxcxcycycxcxcxcxcxcybzbzayay`y`y`y`y`y`y_y]y\\y[zZ{Y{X|Y|Z|[}[}\\}\\|\\|\\|[|[|[{[{[{[|[|\\|\\|]|_{a|c|c}b}a}`|`{_|^|]|^|_|b|c|d}a}^}_|]|e}_~\\~[~Z}Y}Y}Z|[|[|]|^|]|]|]|^|a|b|c|d|c|b|a|_|^{^{]{\\{[{Z{\\|^|_}^}]}\\}]}_}_|`|`{a{a{a{b{c{bzb{a{`z`zazb{b{c{d{d|c|b|c|d{f{e{c{c{b|d|e|e{d{b{c{d|e|c|b|b{a{a{a|`|^|]|[|[|]|]|^|]|]|[|Y|Y|Z|Z|[{\\{^{^{_{^{]|]|\\{^{^{]{]{[{[{[|^|\\|Z|Z|V|W|Y|Z|[|\\|^|_|`|a|`|^|^}`}b}d}b|_|^{`{a{a{`|`|_}`}c}a}`|_|^|]|\\|[|Z|Y}X~W}W}W}W}Y}\\|_|b|c|f}h}f}d~ehgfgg~d~b}_}[}Y}Z}[}\\}[~Z~X~W~W~X~YYVTUVWWVVVWXYYYYXYZ[[[[[Z[ZY[]^[Z]^[a\\[VXZWUTSTTTTSSRSUY]acdcba__Za```^_^XZXX[[Y\\[[]]]]^]a`Z[__\\[XXZZ[][YZYXX[\\YXWWVVVVXXYZ[\\]]ZXX~Z~ZPQVRRWVUUW[]^_^\\[ZZYYYYZZZYWVSPSTVUTUVUTSSSTSRPUXZWRQTVUTTTVXXXXXXXWVVUUTSSRRSSSSSSSSSTTTTTSSTSRRPNMMLLKJJKLNNOPPQQQQQRSTTSSRRRSSTTTSSRRQQQQPPOPQPOMMLLLLLKLKKKJJJIIIHJKKLLKJJJIIHGEDCDCA@>=<;::::::9865433333456654444334668986544455666545677888888887666789::;::9:;====<;:98889:;<;99889;?ABA@?>>><;;<;9878;>@?=<::;=?><;::;:987644689::9888888888888888888899999998886654689<<===;::99:::::9988999988777899:;<;9lwlwkwkwkwkvkvjvjvivhvhvgvfvevfvfwewewdwdwcwcwcwcwcwdwewgwgwhwhwhwgvgvgugufufuguhuhuhthtgtfuhvfvfvfvhwjwjwiwhwiwiwjwkwlwlwlwlwkxjxhwgwhwhxixjyjyjykyjyiyixjxkxkxkxlxkxiyhygyfygxgxfwfwfwfwewewewewdwdwdwdwdwdwdwdwdwcwbwbwcwewfwgwgxgxgxgxfxfxfxfxgxgxfxexexexdxdxcwcwbxbxbxbxbyayay`y`yaxcxdxdxdxdxdwdwdwdwcwcwcwcwcwcxcyczczczczdzdydydxdxexexexexexexexdxdxdydydxdxdxdxdxcyczczbybyayayaxaxayay_y^y]y\\z\\z\\z[{[{[{\\|]|]|]|]{\\{\\{\\{\\{\\{\\{[|[|\\|]|^|_{a{c{c|b|b|b{a{_|^|]|]|^|a|c|d|a|^|_|`|f|a}^}]}\\}\\}\\|]|]|^|`|a|`|_|_|`|d|d|d|e|d|d|b|`|`|a|a{_{]{]{^|`|`|_|_|^|^|_|a|b{c{d{c{c{czdzdzdzdzczbzbzc{d|d|f|e|d|b|c|e|e|c|c|c|c|e|f|f|d{b{b|b|c|a|`|_|_|_|`|`|^|\\|[|\\|\\|]|\\|\\|[|Y|X|W|X|X|Y|Z|[|\\{]{\\{[|[|[|]|^|]|\\|[|Z}Z}]}Z|X|W|U|W|X|Y|Z|[|^|_|a|a|`|_|^}a}c}e}c}`|_|a{b|a|`}^}_~c~d}b}`}_}^|]|\\|[|Z}Y~X~X~X}W}W}W}X}[|^|`}c}d}b~`~b~edbcd~b~`~]}Z}W}X~Z~Z~Y~W~U~T~T~UWVSQSSVUTSTUVWWWVUVVWWWWWY\\\\[]`a^^^_\\a[ZYYWUTSSSTSSSUUTUZ^bcccca`\\X^___]__YYXWXZZ[ZXYZ[[[W[\\YWXWUSQPSSSUVVVUUUWXWWWWWVVVXWWXYYZYWWZ~[~ZSTZUUYXVWWZ^__`^]\\[[ZYYYYZYWVSRUWYXWVVUUTTTTTSRUXZXTTVZYXVWYYXXWWWWVUTSSSRRQQRRRRQQQPQRSSRRRSSSRQONMMNNLKKLLLLMMMNNNOOOPPPOOOOOPPQQQPOOOOOONNNMNOOONLKKKKKKKJJJIIIHGGFGIIIHHGFFEEDCA@???>=<;:9899998876543344455775444333456898654444567655678899999999987789:;<<<;:;;<===<;:98889::::99878:=?A@@???>=<;<;9878:=>><:89:<>=<;:;<:98764358:9:9888988999988889988889::::9888766479:=====;::999:;;::99899999888899:;<=<;mwlwlwlwlwlwlvkvkvjvivivhvhvgvgvgvfwewdwcwcwbwbwcwcwdwewewfwhwhwhvgvgugugufufuguhuiuitithtguhvfvevfvgvhvhvhwhwhwiwjwjwkvkvkwkwjxixhwhwhvhwixiyiyiyjyixhxixjxkxkxkxixhxhyhygyfyexexfwfwfwfwfwewewdwdwdwdwdwdwdwdwdwcwcwbwcwcwewfwfwewfwewfxexexexfxgxfxfwewexdxdxcxcwcwcwcxcxbyayax`y`y`ybxcxcxdxexewewdwdwdwcwcwcwcwcxcyczczczczczdydydxexewexexexexexexexexexeyeyexexexexexdydydycycybybxbxbxbxbxax`x_y_y^z^z^z^z^{^{_{^{^{]z]{]{]{]{]{]{\\|[|\\|]|^{_{a{c{c{c{b{b{a|`|^|]|]|^|a|c|c|`{_{`{b|g|b}_}^|^|^|^|_|a|a{c|b|a|`|_|a|e|f|e|e|e|d|a|a|c}c}c|b|`|^|`|b|b|b|`|^|^{`{a{c{d{ezdzdzdzdzczczdzczczczd{d{d|e|e|c|a}a}b}c}b}c|d|d}d|d|d|c|a|`}a}`}_}_|^|]|^|`|`|]|\\|[|[|]|\\|[|Z|Y|Y|X|X|W|V|W|X|Y|[|[{[{[{Z|[|]|]|\\|[|Z}Y}Y}[}Y|W|V|T|W{X{Y{Z{[|^|`|b|b|a|_}^}a}d}e}c}`}_|`|a|`}_~^~^~c~e~b}a}`}^}]|\\|[}Z~Y~X~Y~X~X}W}W}X}Z}\\|]|^|]}]}\\}_~c~b`__~_~_~]~X~T~U~Y~Y~W~V~S~S~RSSSQPQRTTSSRSTUVUSSRSSTTTWX]]]]bc`^^ab\\YYXXUSRRQQSSSTUUTUZ_bccccb_\\X]^]]]_`YYXWTXZYWTUVUVSRQQPNMLMLKKMNOQSTTTUVWWWXXWWWVVWWWVVWXXVV\\~\\~[TW[QVYXWWVX]_`_^^]\\[ZYXXXYYWUSSVWZXXXVTWUSTTTRRUWZYVVY^][XY[ZYXWWVUTSSRQQQQPPQQQQQQPPPQQQQQQRRSRQONNNNOMLKKKJJKLLLLLKKLMNNMMLLLLLMNNMNNMMMMMMLLMNNNLLKKKJJJJJJIIHHGFEEEFFFFFEDCCCBA?=<<<;;:9877788888765445444568865344334568986544445777667899:::::::::9889:;<<<<;::;<<=<<;:99878899999878:<>?@???>>=<;<;98789;==;:889;==<;:;<:9765324799:988899999999999999889::;;::998776589;>>==<;::999::;;;:998999999899:;<=>=<nxmwmwmwmwmwmvlvlvkvkvkvjvivivhvhvgwewdwcwbwbwbwbwcwdwewewfvgvgvhvhuhugugufufuhuiuiuhtiththuhvgvfvfvfvfvgvgwhwhwhwiwivjvjvjwjwjxjxiwiviviwixjyiyixixixixiwjwjwjwjwhxhygygyfyfyexexfwgwfwfwfwewewdwdwdwdwdwdwdwdwdwcwcwbwcwdwewfwewdwcwcwcxcxcxdxexfxfwfwewewdxdxcxcwcwdwdxdxcyayaxayayaybxcxcxdxexewewewdwcwcwcwcwcwcxcxcyczczczcydydxexexewexexexexexfxfxfxfxfyfyfxexexewexexexeydydycxcxcwcwcwcxbxaxax`yayayay`y`y`zaz`z`z_z_{_{_{_{_{^|]|[|\\|]|^{`{a{a{b{c{d{d|c|a|_|]|]|^|a{a{b{_{]{^{e|g}e|a|`|`|`{a{b{c{d|d|c|b|`|^|`|c|h|d|e|e|e|^|c}d}f}g}f|c|a|b|d|d|c|b|`{`{a{c{d{e{dzdzczczczbzbzczbzbzbzc{b{c|d|d|b}`}_}^}`}`}b}b|a|a}a}a|`|_}^}^}]}\\}[}Z|[|[|]|]|[|[|[|[|]|\\|Z|Z|Y|Z|Z|Y|X|W|V|W|X|Z|[{[{[{[|\\}]}]}[}Y}Y~X~X~Z}Y|X|W|V|W{X{Y{[{\\|^|`|b|b|a|_}^}`}b}c}b}_}]|^|_}_}^~\\~^~d~d~`}`}`}_}^|\\|[}Z~Y~Y~Z~Z~Y~Y}Y}Y}[}\\|]|]|]|\\|]|_}b~`~^~\\~\\~]~_~]~W~S~U~V~V~U~S~R~QPPPQQQQOSUTRRSSTUTSQPQRRRSUX\\]]\\ad_]Z]]XVUUUSQOOOPRSSUVUTVZ^abccbb_\\X[[[\\]__ZZYWRWXWTQRRQRPPMMLJHHIJIHJKNQSTUUVWXXYZYYXXXXWWUUUTVVUR]~\\~[WZ\\TWZZWWVWZ]]^]]\\[ZYXWWWXWUUTTWX[WWUSRVURRTSRSUWXXWW\\`^\\YZ][YWVUUTSRQPPPPPPQRRSSRQPPPQQPPQRRSTSRPOOPPPOMLKJJIIJJJIIIIJJJJIIIJIJJKKKLMLLLLLLKKJKLNONLKKKJJJJKKKJJIGFDCCBBBBBA@@??>=<:9889998765567888876445555668875455433568:875454348876789::;;;;;;;;;:99:;;<=<<;;:;;<<<;;::998877889987789;>?@@?>><;;<;98768:;<:97779:;::::;:9765433799:9889999::::999999999:;;;;;:99977658:<??>==<;:9999:;<;;9989999999::;<=>>=<nxnxnwnwnwnwnvnvmvlvlvmvlvkvkvjviwhwfwewdwcwcwcwcwcwdwewevfvgvgvhuhuhuhuguguguhuiuhuhthtithuhugufveveugvgvhwiwiwhwhwhviviwiwjwkxkxjwjwjwjwjxkykyjxjxixiwiwjwjwjwjwhxhygygygyfyfxexgwgwgwfwfwfwewdwdwdwdwdwdwdwdwdxcxcwcwdwewewfwewewcwawawbwcxdxexfwfwewewewdwdwcwcwdwewewexdxbxbyayaybxbwcwdwexewewewewdwcwcwcwcwdwdxdxdydydydydydyexewewexexexexexfxgxgxgxgxgygyfxfxexewfwfwfxfyeydxdxdwdwdwdwdwcxbxbyaybxcxcxbybybybyayay`z`z`z`{`{`{_|^}]|]{^{_{`z`{`{a{b{b{b{a|a|`|^|]|^{_{`{`{_{\\{^{e{f{d|a|`{`{`{a{b{c{c{d{c{a|_|]|`|d|g|c|d|e|e|^}c}f}h~i}i}f|b|c|f|e|d|c|a{`{`{b{c{d{czczbzbzazaz`z`z`z`zazb{a{a{b|b|`}^}]}[}\\}^}`}`|_|^}^}]|\\|\\|\\}\\}[}Z}Y}W|Y|Y|[|[|Z|Y|[|[|\\|\\|Z|Y|Y|Z|Y|X|W|W|V|W|X|Z|\\{\\{\\{\\|]|^}]}[}Z}Z}[}[}[}X|X|Y|Y{Z{Z{[{\\{]|_|_|`|`|^|\\}\\}]}^}^}]}[}Z|[|\\|\\}[~Z~\\~b~b}_}_}_}_}^|]|\\}Z}Y~Z~[~Z~Z~Y}Y}Z}[}]|^{_{_{_{a|c|c}`~]~[~[~]~_~]~W~TW~U~U~U~S~RQQQQRRSSNRVUTTTTUVUSRPQRRRQTUYYYY^`[VTVVTSSSRQPNNNPRRTVVVUW[]_``aa`^\\XXXYZ[\\]YY[UPUVUTOOONPQQMLKJHIKLJHIKORTUVVWXYYZ[ZYYYYYXWVTUVWVUR\\[~[X[XXXYYWXVVXYZ[ZZYXWVUTTUVVUUUUWXXUSROPTTRSTSSTUUUUVW\\a_]Z[\\XVTTSSRQPOONOOPQQRSSSRQQQPQRQQRSSTUSRPPPQQPNMLKJIHIJIHHIIIJKLKKJJJIJJKJJKLLLKKKKKKIJLMNMMKJIIIIJJKKKJJHGEBA@?>>>=<<;;;:98766777765445679:877555555668986555444579:976565337:87889:;<<<;;<<<<;::9:;;<<<;;::;;<;;;:::98877889:98889;=>???>=<;;<<:87679;;:988789:::99:9875433479::9889:::::::9999::::::;<<<;;::988758:=@@?>><<:::9:;<<<;::89:9999::;<=>?>>=oyoxoxoxoxownwownwmvnvnvnvmwlwkwjwiwgwfwewdwdwdwdvdvevfvfvfvfvguguhuhuhuguguguhuhuhuhthtiuhuhuhugufvevgvgwhwixiwhwhwgvfviwiwjwlxlxkwkwkwkwlxlylykxkxjwjwjwjwjwjwjwixiyiyhygygygxgxgwgwgvgwfwfwewdwdwdwdwdwdwdwdwdxdxcxdwewfwgwgwfwdwcwbwbwbwcwewfwfwfwfwewdwdwdwdwcvewfwfwexdycybxbybxbxbwcwdwexfwfwfwewexdxcxcxdxdxdxdxdydyeyeyeyexexewewexdxexexfxgxhxhxhxhxgygygxfxfxfwgwgwgwfxexexdwdwewexdxdxdxcxbybycxdxdxcycycycybxaxayaybybybza{`{_{^{^{_z_z_z^{^{_{_{^{_{`{`{_{^{]{]{^{_{_z^{\\{^{a{c|b|`{_{_{_{`{a{a{b{b{b{`{^|\\|^|a|c{b{c{d|c|_|d}f~j~j~j~g}c}d}f|f|e|d|a{_{`{a{a{a{azazazaz`z`z_z_z_z^z_z`{`{_{`{_|^|\\}\\}[}\\}]}_}_|^|\\}[~[}Z|[|\\}\\}[}Z}X}W|X|X|Z|Y|Y|Y|Z|Z|[|[|Y|X|Y|Y|X|W|W|V|V|W}Y}[|^{^{^{^|_|_}_}]}\\}\\}]|]|\\|Y|Z{[{\\{]{^{^{^{^|^|^|]|\\|[|Y}Y}Z}[}[}Y}X}W|W{Y|Z}X}X}[}`}_}\\}^}_~_~]}\\|\\}Z}Z~Z~Z~Z~Y~Y}X}Y}Z}]|^|a|c|d|e|f|e}a~\\~[~^~a~a~_~ZWXV~U~T~U~U~TTTTUUVUQSYXWVVWXYXVTSSSSPOQRTTSTXYVQQSSRQQQQQOMMMOQSWYXXVXZ[\\]^^^\\[[XWVVXXYZVVZWQUUVWSRRRSTUPNONLMPPOKJMQTWWXYYZ[[\\[ZZZZ[[ZZYXYZZZVUYY~YYYWXWWWWWVUVUVWVVUUTSRRRSSTUUTTVWWSSQOQWUTUVUTUTSSUVW[_]\\ZYXURQQRRPOPPOOPQRRSRQRRRRRRRSSSTUVVWVUTRQQQQOMLLKKJJJKJJJKKKLMMLLLKKJKKLJKJKKLKKKKKJIIKMNMMKJIHGGHHIIIHHGFDA>=<;;;98877777655455555555568;;:87566666678999776666679;986565438<98889:<<=<<<==<=<;:::::;;;;:99:;;::::::9877789999889::;=>>>>=<;;;<:98778::;:988889::9998765433479::98999::::::999::;;;;;;<<<;;:::88758;>B@@?=<<;;:9:;<<<<<:::;;::::;;==>???>pypypxpxpxoxowoxnwnwownwnwmwlwkxjwjwhwgwgwfwfvevevevevevfvfufufufuhuhuhvgvguhuhuhuhuguiuiviuiuhugufueugvhwhwixixiwiwgvdviwiwjwlwlxlxlxmxmxnxnymylxkxkxkxkwkwkwkxkxkxkyjyiyiyhxgxgwgwgwgvgwfwfwewdwdwdwcwcwcwcwdwdxdxdxewfwgwgwgwfwewdwbwbwcwdwewgwgwfwfwfwewewdwdwdwewexexewdxcxcxbxbxbxbxcxdxdxexexexexdwdwdwdwdwewdxexexeyeyeyfxexexexexdwdxexexfxgyhyhxhxgxgxhxgxgxgwgwgwhwhxgxfwfwewexexdydydydycxbxcxcxdxdxdxcwbxbxawaxaxbxbxbybybyaz`{_{_z_z^z_{^{^{]{]{]{]{]{^{]{]{\\{]{^{^z^z]z\\|]|`|`|`{^{]{]{]{^{_{_{`{a{`{_{]{\\{]{`{_{`{a{c{c|a|d}f~k~m~n~j}b}b|d|f|d|c|`{_{_{_{^{^{^{_z`z`z`z_y_z_z^z]z^z_z_{_{_{^{\\|\\|\\|[|[|]|_|_|]}[}Z~Z}Z|[|\\|]|\\|[|Y|X|X|X|Y|Y|X|X|Y|Z|Z|Z|Y|Y|Y|X{X|W|V|V{W|X|Z}\\}^|^{_{`{`|`|_|^|]|]|_|_|^{\\{\\z]z_y`zazay`z_z^{^|\\|Z|Y|X}X}X}X}W}V}U|U{V{W{Y|X}X}[}]}\\}[}^}_~_~^}\\}\\}[}Z~Z~Y~Y~X~W~V~W}X}[|_|a|c|e|f|f|d}`~]~^~_~b~c~_[ZZW~U}U}W}W~W~V~V~W~W~W~Y~Y~T~T~Z~ZYXXXZ[ZWUTTSRPOPQPONPSUUTSSRQQQQQQONMMOQSWZYXVXYY[[\\\\\\ZY[XVUUVWWZSTZXRUTVYTTSTTUWRPQONPSXQLJOSVXYZZ[[[\\\\\\[Z[Z[]^]][\\]_^YWXXXXYWWVVUUUVVTSSUUUTSRQQPQQRRSTTTUVWSRSSRYWVXWVVWTRSUVW[^][YWURPOPQROOQPPPQRSSTRPQQQRRRTTTTUVWWXXVTRQQPONLLKKKKJJKKJJKLLLMMMLMKKJKKKKJJJKKJJJJJJIIKLMMMKJIHGGGHHHGFFECA><;:99887555565544434455555457;<:976556666689::977666779;:97666448<:8889:;<>===<<=<=<;;:99:;;::98899::999998778789989999:;;<==>>=<;;;;987679::9877889:99887665444568::998899999999:::;;<;;::;<<<;;;:97659<@@?>==<<;;::;;<<==<;;;<;;;;::;<=>??>>pypypxpxpxoxowowowoxoxoxnxmxlxkxjxjwiwhwhwhwgvfvfvfvfvfvfueueueufuhuhvhvhvhuhuhvhuhuhuiuiviujuivgvfueuguhwhwixjxjwjwgwcwjwiwjwkvkwlxmxmxnynyoynymxlxlxlxlwkwlxlxmxlxlykykyjxixhwhwgvgwgwgwfwfwewdwdwcwcwcwcwcwdwdxdxexfwgwhvhvhwgwfvdvdwdwdwewgwhwhwgwfwfwfwewewexfxfxexexdxdxcxcxbxbxcxcxdxdxdxdxexexexdwdwewewewewdwewexexeyfxfxfxfxfxexdxdxfxgxhyiyiyhyhygxfxgxhxhxgwgwgwhwgxfxfwewewexexdyczczcycxcxcxdxdxdydycxbxaxaxawawbwbxbxbxbyay`z_z_z_{^{^{]{]{]{]{]{]{]{]{\\{\\{\\{]{^{^{^{^{]|^|^|^|]{\\z\\z\\z\\z\\z]z]z^z_z_z^z]z\\z[z]z]{]{_{b{c{c|d}d}j}l}k}f}a}`|c|d|b|a|^{^{^{^{[|Z|[{]{_z`zazay`z_z^z]z_{`z`z`{_{]{\\{[{\\|\\|\\|^|_{^|]}[}Y~[}]|^|_|_|^|\\{Z{Y|Z|Z|Y|Y|Y|Y|Y|Y|Y|Y|Y|Z|Z|Y{X|W|V|W{X{Y|[}]}_|`{`{a{a|a|`|`|_|_|`|`|`|`{_z`zbzc{d{czb{a{_{]|[|Y|W}V}V}V}V}U}T|T|U{UzVzX{X|X|\\|\\|Z|[|^}_}_}^}]}]}\\}[~Z~Y~W~V~U~U~U~V}Z|^|a|d|e|f|f}c~^~[~]~`~d~d~a_]\\X~V}V}Y}Y}Y~X~Y~Z~[~Z~\\~\\~X~U~[~[~[ZYZ\\]\\YWTTSRPNOONMLMPSTTTSRRRRSRRQONMORTX[[ZWXXXXXYZYWXYYTUUTTV[QS[YSWVX[VVVVWXYSRSRRTUXTNNOSUXZ[\\]]]^]]\\[[[]`bba``ab`\\XVWXXXX~WVUTTTUVUTRSTTSRRQPOOOPQRRSSSUYTSUVR[YXZYYXYUPRVXXZ\\[YWUSQONPRSOORSSSTTUVVROPPQRSTUVVVWXYYZZXVTRQOMLKJKLLLKKKKKLMMNNNNNMMLLLLLKKKJIIJKJJKJJIIKLMMMKKIHGFFGGFEDDCA><:9876665433345554432445565446;>;876557777679:;:98877779:::8665448<;98889;<=>>=<<=<<<;:98889::997767888899877788888899999::;<=>>=<;:;;;9876789987788988876654444445899898888899999:::;<<;;:;;==<;;;;:865:<AB@>====<<;;;;<<=====<====<;::;<=>>>>qyqyqxpxpxoxowowowoxoxnxmxlxkxjxjxjwjxixiwiwiwhvgvgvgvfvfueueueufuguhvhvhvhuhvhvhvhuhuiuiujvkvjvhvgueuguhwhwiykxkwkwhwcwiwhwivjvjwkxmxnynyozoynymxmxlxlxmwlwlwlxmxmymylykxkxjxiwhwhwgwgwgwgwfwewdwcxbxcxcxcxdwdxexexfxgwhvhvhvhvgvfvdvcvdvfvgwhwiwiwhwgwfwfwewfxgxfxfxfxexexdxcxcxcwcxdxdxdxdxdxdxexexewewewdwewewewdwdwdwexfxfxgxfwfxfxfxexexfxgyiyjyjyhygyfxfxgxhxhxhxgwgwfwfxexewdwdwdxdxdyczczczcycxcxdxdxdycycxbxaxawaxaxbxbxbxbxbyay`y`z_{_{^{^{^{^{^{^{^{]{]{]z\\z\\z]z^{_{_{_{_{^{^{^{^{]{]z\\z\\z\\z\\z\\z\\z]z]z^z^z^z\\z[z[z\\{\\{]{`{a{a|b|_}d}f}e}b|`|_|^|_|_|^|]{]{^{^|Z|W|Y|Z{_zbzczbzbza{`{_{a{a{b{b{`{]{\\{[{]{^|]|^{_{^|\\|\\}[}]|_{a{b{a{_{]z[zZ{[{[{Z{Z|Z|Y|Y|Z|Z|Z|[|Z|Z|Y{X|W|W|X{Y{Z|[}]}`|a{b{b|b|d|b|b|a}b}b|c|c|b|b{czd{f{f{e|c|a|_}]|[|Y|W}V}V}V}V}U}U|V{VzVzWzY{Z{\\|^|Z|X|[|^}_}_}_}^}_}^}]~\\~Z~X~V~U~U~U~V~X}\\}`}c}c}c}c~`~\\~X~\\~^~d~d~a`]\\Y~W}X}\\}]}[~Y~Z~]~]~\\~\\~]~[~V~Y~[~ZYYZ\\\\[YWTRQPPPPONMMNPRTUUUUTTTTTTSQPOPSTX[[[XXXXVVWXXUWY[RXVTTWZPU]ZTVUW[WVVYXWWRTTTSUUTQOPQRTXZ\\^__~__^]]\\\\\\_cedcbbba_[XVWXX~Y~Y~YXWUUTUWWVTTUUTSRQPONOPPQQQQRTXSRWWRZZZ\\[[YYUPRWXXYYYXVSRQPOQTVQPUUTUUVWWWROPPQRSSUVVVWXYYZYWUSPNKIIIJKLMLKKKJKLMMMMMMMLLLLKLKKJJIIIIJJJJIIHGIKKLKKJIGFEFEDCCBA?=<:987655543323345554334455553349>=:87667887779;;::9988889:::9755448<<:8879;;=>==<<<<;;::877789998654667889876667887779::::::;;<===<;;<<;:987878888789988876543444445899887788899::9::;;==<<;<<==<;;;;:8769<@B@?==>>=<<<;<<<==>>>=>===<;;:;<=>>>>qyqyqxqxpxpxpxpxoxoxoxnxmxlxkxkxjxjwkxjxjwjwjwivhvhvgvgvfueueueufugvhvhvhvgvgvhvhvhuhuiujvkwlvkwjwhvevgvhxhxiykxlxkwiwdwhwhwivivjwkxlynzozozoznzmymxmxmxmwlwlwmxmxmymylykxkxjwiwiwhwgxgxgxgxfxdxcxbxbxcxdxdxdxexfxfxfxgwgvhvhvgvfvdvcucueugviwjwjwjwiwhwgwfvfwfxgxhxgxgwfwewdwdwdwdwdxexexexdxdxdxewewewfwfwfwfwfwewewdwdwewfwgwgwgwgxgxfxfwfxgxhyiyjyiygyfyexfxgyhxhxgxfxewdwdxdxdwdwdxcxcyczdzdzczcycxdxdxdxdycycxbxaxaxaxaxbxbxbxbxay`y`y_z_{_{^{_{_{_{_{_{_{^{]z]z]z]z^z_z`{`{`{_{_{_{_{^{^z^z^z_z_z_z_z^z^z_z_z_z_z^z\\z]z[{Z{[{\\{]z^{^|[|_|`|_|_|^|\\|Z|[|\\|\\|\\{]{^{]|Y|T|X|[|`{czezfze{d{c{b{c{d{e{d{b{_{^{_{`{^{\\{]{_{_{\\|\\}\\}_|b{c{d{b{`{^z]z\\{\\{\\{[{[|[|Z|Z|[|[|[|[|\\|\\|[{Y|X|X|X{Z{[|]}^}`|b|c|c|e|g|e|d|d}e}f}g|f|e|e{f{g|h{g{e}b}a|_|^}\\}Z|X}X}X}X}X}W|W|X{YzYzZz\\{^|a|`|[|Y|\\|`|a}`}`~`}a}`}_~^~[}Y}W~U~U~V~V~V~Y}]}_}`}`~_~\\~X~V~Z~\\~a~a~_\\ZYX~Y}[}^}_}\\~Z~\\~^~^~\\~[~]~]~V~V~X~XWWXZZXVTTTRQQRRQQPOPQTVWXXWWWVVVVUTRQQSUX[[[YYZYXXZZXXXX[UXUTUY\\RU]YTUTVZVUUXWUUQSSSSUTSPQQQQSWXZ^a____^][\\\\_ceec_``^[XWVWXY~Z~[~\\[[YXWWYZZXWWVUTRQPONOPPQQRRSSWSTUWQWXXZZZXXTPSXXVUVUUTSRSRPQVYTRWWWWWXYYYTQQPPPQRUUVUVVXXXVTRPMJHFHIJKLMMLLLKLMMMMMMLLKKKKJJJJIIHHIIIIIHHGGFFGHHHIHGEDCDBA@?=<;;:9876655544332234765434455553337=>;8767788878:;<;;::98889;;;:865559:<;88779:<<<<;;;;::::876678987533457889776556788779::;;::;;<<==<<<<=<<;9887878899:99998754444566678877778889::::::<<>>>=<<=>>=<<<<;9879<@BA?>>>>>=<<<<====>>?>>>===<<;;<=>>>>qyqyqxqxqxpxpxpxpwoxnxnxmxlxkxkxkxkwlxkxkxkwkwjwivhvgvfufueueufufvgvgvhvgvguguhvhvhvhvivjvjvlwlxkwhvdvgwhxiyjykxlxmxjxewgwgwhvhviwjwlxnyn{o{o{nzmymymxlxlxlxlxlxlxlylylykxjxiwiwiwhxhxhxgxexexfxdxcwcwdxdxexfxfxfxfxfwfvgvgvgvfvevdvcudufuhvjwkwkwjwiwhwgvfvfwgwhwhwhwgwfwewewewewewexfxfxfxexexewfwfwfwfwfwfwgwgwewewdvdvfwfwgwgwgwgxgxgxgwgxgxhyiyjyiygyfyexfygyhyhxgxfxexdwcwcxcxcxcxcyczdzdzdzdycycxdxdxdxdxcxbxaxaxaxbxbxbxaxaxay`y`z_z_z_z`{a{a{a{b{b{a{`z_z^z^z^z^z_z`zaz`{`{`{_{_{_{_z_z_z_z`z`z`z`z_z_z_z_z`z`z`z^z]z\\{\\{[{[z\\z\\{\\{]|^|^|]|]|]|Z|X|Z|[|\\{\\{\\{]{^|X|R|W|[|_{bzezg{h|g|e|d|e|g{g{f{c{`{`{`{`{]{[{\\{_z^{\\|[}]}`}b|e{e{c{`z^{]{\\{\\{\\{\\{[|[|Z|[|\\|\\|\\|\\|]|\\|[{Z|Y|X|X{Y{Z|\\}^|`|b|c|c|e|g|g|g|f}h}j}j}f|g|g{g{h|i}g}e}b}`~_~]}\\}[}Z}Z}Z}Z}Z}X|X|Z{[{[z\\{^|a|c|b|_|^|a|d|c}a}a}b}b}b}a~_~\\}Y}W}V~U~V~V~T~U~W~W~X~Y~Y~WVTV~W~[~[~Z~X~W~X~Y~Y}[}^}^}\\~[~]~^~^~\\~[~\\~[~U~R~TTUUWYXVTTUUTSQTUUUSRRSVXYZZYXXWWWWWUTSRTVYZZZZZZZYY[\\WYXXZWWUSUY[TU\\VTTRQRSSUXUTSRRSRRUUSQQQPPQTUX[`]]^^^\\ZZ[^aa`][YYXXWVWXYZ~\\~]~]]\\[ZYY[\\][ZYWVURQONNPQQRSSRRRTTQPTQTWUUWWTTTRSUTRSRRRRRRTTPQWYUVXXWWXYZZ[XSRQPOPPRSSRSSSSQOMLJHFEEGIKLMNMLLLLMMNNMMLKKJJIIHHHHHHGHHHHHGGFGGFDEEFGFEDCA@@?>=<;:9988876655554443223665434444543337<>;9777899989:;<<;;::9889;;;:8655589<;976689;;;;:9:::::9866678876532246788765455778779:;<<;::;<<==<;<<===;::988789::;::998765445666677766778999:;;::;<=>?><<=>>>=====;:978=@BA@>>>?>===<<===>??@??>===<<;<==>>>>qyqxqxqxqxpxpxpxpwoxnxnxmxmxlxlxlxlxmxmxlxlxkwjwjwivhvgvfueueuevfvgwgwgwgvgugugvgvhvhvhwjwjvlwmxkxhwdwgwhxiyjykxlxnxlxgwfwfwhvhvivjwlxmynzo{o{nzmzmylxlxlxkxkxkykykykyjyjxiwiwiwhxgxhxixfxdxfwgwewcwcwewfxgxgxhxgxfxfwfvfvfuevevdvcvcueuhujvkwlwkwkxkwkwivfvgwgwhwiwiwhvgwfwewewfwfwfxgxgxfxfxfwfwewfwfwfwfwgwgwgwfwevdvdvevfvgvgwgwgxhxgxgwgwhxixiyjyiygyfyeyfygygygyfxexdxcxcxdxdxdydyczczd{e{ezdydxcxdxdxdxdycybxaxaxbxbxbxbxaxaxay`z`z_z_z`zazbzbzbzb{bzbzaz`z_z_z_z_z`zazazaz`{`{`{`z`z`z`zazazbzbzbzazazaz`zazazbzbzaz_z]{]{\\z[z[z[z\\{]{]{]{]|\\|Y|V|W{Z{Z{[{\\{]{]{_|X|Q|X|\\{`{bzg{j|k|j}h}g}h}k}j|h|e|b|b{b{a|]|Y{Z{]z^{]|]|_}a|c|f{f{d{a{^{]{\\{\\{\\{\\{[{[{\\{\\{\\|]|]{^{^{]{\\|[}Z|Y|X|Y|Z|\\|]|_|`|b|c|e|g|g|h|h}h}k}k}f|g|g{h|i}j}g}d~a~^~^~^}]}]}\\}\\}\\}\\}\\}Z|Z{[{\\{\\{^{a|d}f}d|`|`|c|e|d}c}c}c}c~b~a~_~\\}Z}Y}W~U~V~V~S~T~U~U~UUUTTSTU~W~X~V~T~T~U~X~Y}\\}^}]}\\~]~_~]~]~]~\\~]~Y~S~Q~RSSUWXWVTU~W~Y~YWSWXY~XWUUVXZ[[[ZYYXXXXWVTSRTUYZZYZ[\\[[[\\^X\\XXWXVUSUZZVTZRSSNKLQRTWTTSSSRQRUVTQQPPPPRQUW_Z[[_[\\YXY\\^]\\XVUUTTUVXY[\\~]~^~__^]\\[[\\^^][ZXWVSQOOOPQRRSSSRQRURMQQRSOORRPQROORPOOOOOPQRVUOQXYVVXXVUUVXY[XTTQOMMMOOONNONLJHHGFDDCEHJLNONNLLLLMMNNMLKJIIHGGFFFFGGFGHGGGFFEFEEDCCDEDCB@>=<;;:9878776776565555444223886444444433346:>;:77889:::::;<<<::::989:;;:8654579;;98656799998889:::9766677776533236678764344777889:;<<<;::;;<<;;;<==>=<;:9889:;;;::998876555788766656789:::;<<;;;==???==>>??>>>>><;989=ACB@>>???>======>>?@@@@?>==<<;<=>>>>>qxqxqxqxpxpxpxoxoxoyoyoynynymymymxmxnxnxnxmxlxkxjxiwhwgvfvfvevevewfwgwgwfvfufugvgvgvgwhwjwjvlwmxkxhwdwhwixjyjylxnxnxmxhwfwhwhvhvivjwlxmymzn{n{mzmzmylylykykyjyjyjyjyjyixixiwiwixhxhxiyjyfxdwhwhwewcwdwewgxgxhyiyhxgxfwfveveudvdvcvcvdvfvhvkvlwmwlxlxmxlwhvevgwhwiwiwiwhvgwfwfwfwgwgwhxhxhxgxgwgwfwfwfwfwfwfwgwgwhwgwfvevevevfvgvgwgwhxhxhxgwgwgwhxiyjyhygyfyfygyhyhygyfxexdxdxdxeyeyeyeydzd{e{f{ezdydxdxdxdxdxdycybxaxaxbxbxbwbwaxaxaxayaz`z`zazbzczczczczczbzaz`z`z`z`z`zazazazazazaz`z`z`z`z`zazbzbzbzbzbzbzbzazazbzczdzbzaz_{^{]z\\z\\z\\z]z^z_z_{^{\\{U{U{[{\\{[{\\{]{^{_{^{W{Q{Z{\\{^{c{h|k|m}l}k}j}k~m~l}i}f|c|c|b|b|]|X|X{\\{^{^|^|_|a{d{g{g{d{`{^{]{\\{\\{\\{\\z[{\\{]{]{]{^{^{_{^{^z]{[|[}Z|Y|Y|Z|[|[{]|^|`|b|d|f|g|f|f}h}j}i}e}g}g}g|h}i}g}d~a~^~^~^}^}]}]}]}^}^}^}\\|\\{]|\\|]|^|b}e}f}e}`|a|e|f}f~d~d~d~c~c~a~_~]}[}Y}X~V~X~X~U~T~UUTTTUTSST~U~U~T~S~S~T~W~X}[}\\}\\~]~_~_~]~]~^~_~]~W~S~T~SRTVXYXWV~W~Z~\\~\\~ZVY[\\~[YWWXZ[\\]\\[ZYXWWWWUSSRSUXYYYYZ\\\\\\\\]`Y\\WVUVTRPRVYUTWPRRLIIOSUVTUUUSRRSWWURPPPPPPPRS[YWV\\YYXWXZZYXTSSSSTUWY[]]~_~`~``_^\\\\\\^__^\\ZYWVSRPPQQQQQPPQRROUSMOPPPKLOOOPPLLOONNNNNOPRTRMRXWTTVVSRRSVWXUTTROKJKLLKJKKJIGEEDDCCEGJLNOPONLLLKLMNMLLJIHGFEDDCCCDEEEFFFEDDCDDDCBABCB@>=;:98877666666666666665555433776545544434446:=<;8889:;;:::;<=<::::999:;;:86445789:98655688887778999876666776654444456787544577788:;<<<<;;::;<<<;;<==>>>=;9889:;<<;;:9876555578876666789:;;;<==<<<>>@@@>>>?@@?????=<:9:>ADB@?>?@@?>>>>>>?@@@AA@??>=<<;<=>>>>>pxoxoxoxoxoxoxoxoxoyoypypzpzoznynynxoxoynxmxlxkxjxixhwgwfvfvevewewewfwfwfvfvgugvgwgwhwhwjwjwlxlxixhwfwixjxkykylxmxnxmxixhwhwivivivjwlxmymzlzmzmzmzmylylykzkyjyjyjyiyixixixhwiwixhxgyjyjyfxexiwiwdwcxexgxgxhyiyjyixhxgwfveveudvdvcvdvevfvivkvlwmwmxmxnxjwfwewhwiwiwiwiwivhwgwgwhwiwiwixjxixixhwgwgwgwfwfwfwewfwgwhwhwhvfvevfvfvgvgwhwhwiwhwhwgwgwhxixixhygyfyfygyhzhygyfxexexdxexfyfyfyfyfze{f{g{fzeydxdxdxdxdydycybxaxaxbwbwbxbxbxbxaxayaz`z`zazbycycydyczczbzbzazazazazazbyayaybybyazazazazazazbzczbzbzbzbzbzbzazbzczczczbz`{`{_{_{^{^{^{_{`{b{a{`{\\{V{Y{]{]{]{]{^{_{`{]{W{U{^{_{_zc{g|j}m}m~l~k~ln~m~j}f}c|b|b|`|]|Y|X|[{]{_{_{a{b{d{f{e{c{`{^{]{]{]{]{]{[{]{^{^{^{_z_z_z_z^{\\{\\|\\}[}Z|Z|[|[|\\|\\|^|`|b|d|d|d|c|c}d~e}e}c}d}d}e|g}i}g}e~b~_~^~^}^}^}^}_}`}`}`}^|^|^|\\|\\|^}a}c}e}c}`}b}e}g~g~e~f~f~d~a~`~^~\\}[}Z~Y~Y~Z~Y~W~VVVUUUVVVUU~U~V~V~V~V~V~W~X}Y}Z}Z~[~_~]~[~]~_~_~[~U~U~W~UTVYY[[YY~Y~[~]~]~ZVZ\\]~^[YZ[[[\\\\[ZXWVVVVVTSRQRRSVWXWYZ[[\\\\]XXTRRSSQOPSWUTRQQQMIKRTVYVWWWVVUV[[VRPPPQRPPQPWURPXWWVVVVWUUSSSTUVWXZ]_`abbba_]\\^`a`_]ZYYWUTRSSRPMNLLLPPLSROOPOOLLNNMPPLKPRPPPONOPRQLJPUTRQRRPNNPRSSQPRQNKIHIIHGHHHHIGGGFFFFFHKMOPOMLLLLLLMLLKJIGFECCBABAABCCCDDCBAAABA@?>?A@?=;97666655666666667888877766445666555554455569<=<::99:;<;;:;<=<:88:::99::986444678998655677877677899876556666654444345678754556788:;<=>>=<;;;;;<;;<==>?@@>;:9:;<<<<;:987665556887666679:;<<<=>>==>?@AAA????AAA@@@@?><;;>ADC@?>@AA@@@@AA@ABBBCBA@?>>==<==>@@@@oxoxnxnxnxnxnxnxoyoypyqypzqzpzozoyoyoypyoynylykyjyixhxgxgwfwewewdwewfwfwfvfvfvfvfvgvgvivjvkvlwkxhwgwhxjxkykykylxmxmymyixhxixivivivjwlxmykykzkznznynylylykykyjyjyhxhxhwjwiwgwiwjxhygyjyjyfxfxixhwdxdxexgxhxjykyjyjxixhwgvfveudvdvdvevevgvivkwlwmxmylxlxixewfwhwhwiwiwivivhwgwhwiwjwjxjxjyjxixhxhwhwgvfvewewdwewgwiwhwhvfvgvhvewfwhwhwiwiwiwhwgwfwgwhxhxhygyfygyhzizhzgzfyfygygygygzgzgzfzgzg{g{gyfxexdwcwdxdxdxcycybxbxcxcxcwcwcxbwbwbxbyay`z`yaybycydydycybybybzbzbzbybybybybybyayay`zazazbzbzbzbzbzbzazazazazazbzczczczczb{`{`{`{_{_{_{`{a{b{b{bz`{]{W{Z{]z^z^{^{^{_{_z[{X{[{^{_z_ybze|j}m~m~llm~o~m~j}e|b|b|b{_|\\|[|Z|\\{^{_{`{a{bzdze{c{a{_{^{]{^{^{^{]{\\{^{^z\\z_zbzaz_z_{_{\\|\\}]|\\|[|[|[|[|\\{\\|]|_|b|c|c|a|`|_}a}b}b}a}a}b}c}f}g}f}d}b}`}^}]}^}^}_}`}a}a}a|`|_|^}\\}[}]}`}b}c}a}_}`}c}e~e~effc`~_~]~[}Z}Z~Z~Z~[~Z~X~X~W~W~W~W~V~W~V~V~W~V}W}W}X}X}X}X~X~W~X~X~YZZZ[\\]]YUUWUTVZX[[ZYY[]\\YWZ\\\\_[Z[[ZZ[[ZXWVUUTTSSRRQQQQTUVWXYY[[Z\\VWSRQRRQNPSUUTQQPQOPKRVZZXYXXWXXW\\]WSPPQQRQQQQRSOPTVVTTUUUTSSSTUUVXY[]_`abccb_]\\^`aa`][YYYWWRUVSOFHIIIMNKRPNNONNMMMMLPPMKPRQPPPOOPPNKJNPOOOONKIJKMOPONPOLJHHGGGGGHHIIHHHGGGFFGJLOPOMKKKLLLLKJIHFEDDBBA@??@@@@ABB@???@@?=<=>??><976555455556666667899887777653456555555555568;=<::::;<=<;;;<=<9868999899987544557898766567877667788876556666554433223567754456678:;=>>>>=<;::;;<<<==>?@@?=;::;===<<;:98776656776676799:<<<=>>>>>>@AAAAAAAAAAA@@@A@@?>=>ACBA??@BCBBAAAABBCDDCCBA@??>=??@A@AAAnxmxmxmxmxmxnxnyoypyqyqyqyqypyoyozozpzqzpyoymykyjyiyhxhxgwgwfwdwdwdwewewewfwfvfvfvfvgvivjukvkwiwhwgxiykykykykxlxmxlylykzjyjyiwjwjwkwlwlxjyiyiznznznzlylylylykyjxixfwiwjwiwgwjxjygyfxixixfxfxhxfxdxeygyhyjylylykyjxixhwgvfvevdvdvdvevfvgvivjwkxlxlxkxjxgxhwhwgxgxiwjvjviviwiwjxjxkxlxlylykyjxjxiwhwgvfvevevdvevgwhwiwhvgvgvgwdwfwhwiwjwjwiwhwgwfwfwgwgwfxfyfygzhzizhygyfyhyiyiyhzizhzhzhzhzhzhzgyfxfxewdwcxcxcxcybybxbxcxdwdwcwcwcwbwbxbyay`y`yaybycydydycybyaybybybybybybybybybyay`y`zazazbzbzczczbzbzbzazazazazbzbzbzbzaz`{`{`{_{_z`z`zazb{c{b{b{`{]{[{\\z]z^z_z_z_z_z]zY{Y{^{b{bzaycze|i}l~nlll~o~m~h}d|b{a{_|^|]|]|]|_{`{`zazbzczc{c{b{`{^{^{]{]{^{_{^{\\{_{`{^{_{bzbz`z^{`{[|^}_|]|\\|\\|\\|]|]{]|^{a|d|c|b|`|\\|Z|Z}[}\\}_}[}]}a}b}d}d}d}b}_}^}]}]}^}`}a}b}b}b}a|`}^}\\}[}]|_|`|`|_|_|`|b}c~bceea^]~\\~[}Z}Z}Z~[~\\~[~Y~X~X}X}Y}Y}X}X~W~W~X~X}Y}Y}Z}Z}Z}Z~X~W~W~W~WWWWXZZYVTVUSTW\\X[ZYXXZ[YWVYZZ_ZZ\\\\YXXYXVTSSSSRSSRRRQPORUUVVXXZYXXUTRQRRSRPQSTUTRQOQPTMSS`\\[ZZZZ[[Y_`XSOPQRSSSSQQQMMRVTRRSSSSTTUVVWWXY[]_abcdcb`]\\^abba^\\[[[ZYTXXTMDFFGFJLHPNMMMMMMMNMLPPNLOQQQQPPOONLJIKLKKKKJGGGHIKKLLMLKJIHGGGGHIJKKKKKJIHGEDHJMNMLLLLKKKJIGFEDCBBAA@?>>>>>>?@@><<===<;::;<<;:8653333455666677789:::98888864455666666566668;==<;;:;<>=<<<<<<98568988888876444467788765567666667788776666655544332124667654445679;=>?@?>=<;::;<<===>?ABA?<;:;<====<;:98876557766789:;;<==>?@@@?@ABBBBAAAABBBAABBBAA@>?ABAA??ABCCCBBBBCDEEEDDCBA@??>@@@AABBBlxlxkxlxlxlxmxnyoyqzrzsyrxqypxoypzpzqzqzpynylyjyiyiyixixhwhwgwewewdwewewfweweveveveufuhuiujviwhwhwhxjykykyjxkxkxkwlxlylzkykyjwjwjwkwlwlxixhyhznznznzlylymymykyjxixhwjwivhwhwjxixdxexhxhxexfxgxeyeyfzhyiylynynzlyjxixhwgvgvevdvdvevevfvgvjvkwkxkxjxixhxgxjxkwfxgxjwkvkvjvkwkwkxlxmxnxnymylykyjxjxiwhvgvevevdwfwgwgwgwgwhwgwewdwhwkwjwkwkwiwhwgwfwfwewewexfxgyhyiyiyhygygyiyjyjzizjzizizizizizizhygxfxewewdxdxdxcybycxcxdwdwdwcwdwdwcwcxbyayay`yaycydydydycybyayayayayaybybybybybyay`y`zazazbzczczczczczbzbzazazazazazazaz`z`z`z`z_z_z_y`yazbzc{c{b{_{\\{\\{\\z^z^z_z_z_z^z\\yZz\\z`zbzcybybzd|g}i~j~hi~l~o~m}g}d|b{`{_|_|_|`|`{a{b{czczczdzd{c{b{`{_{^{^{^{_{`{`{]{a|a{`{`{a{b{a{^zb{[|_|`|_|^|^{^|_{_{^{_{b|e|d|b|^|Z|X|V|X}Y}\\}X}Z}]}^}_}_}_}^}\\|\\|\\}\\}^}_}a}b}b}b}b}b}`~\\~Z}[|]|]|^|^|]|^|_}_~_`aa^\\[\\~\\}[}[}[}\\~\\~[~Y~X}W}X}Y}Y}Y}X~W~W~X~X}Y}Z}Z}[}\\}Z~Y~X~W~VUUUTUXXWUUWTSTW\\WYYWVWXYWUTWXX]XY[[WUUUUTSRRRRSSSTTTSQPRTUVUVVXWVUSRQRSTUTSSTUUTRQOPRUPVV_^^\\\\\\]]^[b`XTPPQRTTTTRQRMLRUSRTTSSSTUVWWWXYY[]_abcddca^]_bbba_][[[[[VWVSLDFGHGIJHOLLLLLMMNNMMQQNMNNNPPPONNLJHGHHIIHHHGGFFFGHIJKKJJJIHHHIJKLLLKKKKIGECBEHKKKJJKJJJIGFDCBA@?????>======>??=;;;;:::989::987542222345555778889:;;:9899986555566666677778;<==<;::<>>=<<;<<:8547787788876543345677765456555566788776666665554442212467655445679;=>?@@?=<;::;<====>?BCCA><:;<======;:99865579878:;<<<=>??@ABAAABCCCBBBBBCCCCCCCDCCB@@BCB@?@BCDEECCBBCEFFFEDDCA@@??AAAAABBBjxjxjxjxjxjxkxnyoyrzrzsyrxpxoypzq{qzrzqzoymylyjyjyjyjxjxiwhwgwfwewdwewewfvevdvdueuetfuhvivivhwhwhwixkxkxkxjwjwjwkxlxlylzlylykwjwjwlwmwmxixhxiynznznzmymynymykyjxixhwivivevjwhxfxcxdxfwfxdxexfyezgzhzjykymyozmzkyjxixhwgvgvfvevdvevevfvhvjvkwkxjxhxfxfxixkxixgxhxjwlvlvkwlwmxmxmxnxoyoynymylykxjxiwivhvfvewewfwgwfxgwgwiwgwdwewjwlwkwkwkwiwhwgwfwewewdwdxexfxgygyhyhygygyiyjzjzjzjzjziziziziziziyhxfxewewexexexdybydxexewewdwdwewewewexcybybyaybycydydxdxcxcxbxaxayaybybybybybybybyayayaybybycycycycycycycybyazazazazazaz`z`z`z`z_z_y_y`yazbzbzaz`{^{\\{[{\\z^z_z`z`z_y^y]y]z_zazczcybyczd|d|f}f~d~f}k}o}k|f|d{c{b{a{a{a{b{c{e{f{e{e{e{f{f{e{c{a{`{`z_z`zazb{b{a{c|c|a|a{b{c{b{^{b|\\|`|b|_|^{`{`{a{`{_{a{d|f|d|a|]|Y|W|U|W|Z|\\}V}W}Y}Z|[|[|Z}Z}X}Y}Z}[}\\}_}`}`}a}a}a}b~a~]~Z~Z}Z|Z|[|\\|\\|\\}\\~\\\\]^^[Z[\\~\\}]}\\}\\}\\}[}Z~X~W~V~V~W~W}W}V~U~U~V~W~X}X}Y}Z}[}Z~X~V~UTTSSRTWWVVWWSSTWZXXYWWWXXUSSTVVYVWYZVSTTTTSSRSTTUUUUUUUSTVVXWVUVVVUTSSTTVWWUVUUUTRQOPSXTZZ]]`]\\\\\\]^[a`XTPQRSUVVUPSRNNSURSWVUTUUVWWWWWXYZ]^`abdedc_^`aaa`^\\[YZ[[UUTQLFIIJHKKJOLLLLLMNOONNQPNMLJKNNMLLKJHFFFFGGHHHHHGFFFGHIKKKLLLKJKKLLMMLKJJJHFC@@CFHHGGGGHHGGEDB@@?>=<;;<<<;;:9:<==<;::98876789998764211134456677889::<<;:989987654456777777789:;<==<;:<>?=<;:;;<:734466778877654334677765445445556677777666666655442212468766655679;=>?@A?=<;:::<===>?@BDDB?=;;;<===>><;;:86568:98:;<=>>>?@@ABCCCCDDEDCCCCCDDDDDEEEDDCBBBCBB@ACDFFFEDDCDEFGGGFFDCAA@@BBBBBBBBhxhxhxixixjxkxoypyszrzqzpypypzqzq{r{rzpzoymykyjyjyjxjxjxiwhwgwfwewdwewevfveveveueuetguhuivivhwgwhwixjxkxkwjvjvjvjxkxlzmzlylyjwjwkwkwmwlxhxhxjymzmzmymynynymykyixhxhwivivhviwfxcxcxdwfwfxdyeyfyfyhzozlylyoyqzkzgyhxixhwhvgvgvfvewevevfvhvjwkxjxhxfxexfxkxmxgxgxjwmwlvmvmwmxnynyoyoypzpzoznymylykxjwivhvgvfwfxgxgxgxgxgwhwfwdwfwkwlwkwjwjwiwhwfwewdwdwcwcxdxexfxfxgxgxfyhyiyjzjzjzjzizjzjzjzjzjziyhxgxfwewdxexfxcybyexfxfwewdwewfwfwfwexdycybyaybxcxdxexexdxcxbxbxaybybybybycycycybyayayaybybybycycycycycycybyazbzazazaz`z`z`z`y_y_y^y_y`y`yazaz`z_z^z\\z[z\\z^z`zayay`y_y_y_z`zbzdydydybzc{c{c}c}c}d|h|i|g{e{d{c{b{b{a{b{d{e{f{g{g{g{g{g{g{f{e{c{a{`zazbzbzbzc{d{e|d|a|a|c{e{c{^{b|\\|a|d|_|^{a{a{b{`{_{a|e|e|d|a|]|Y|W|X|Z|Z|\\}W}V}V}X|X|W|V|V}W}X}Y}Z}[}]}^}_}_}_}`}`~_~]~Z~Y}Y}Y}Z}Z}[}Z}Y~XYZYWXZ[\\~]}^}]}\\}[}Z}X}W~V~U~V~W~W~V~U~T~T~U~V~V}W}W}X}Y}X~W~UTTRQRRTWWWVWWTTTXYXYYXXXYYVUSTUUVTVXYVRSTTTTTTTUVXWWVWWWVVXXZYWVUVWVUUUUUWYYWWVUUTRPOPRSRWX[\\_\\YYXYZZ[ZWSPQRTTVVVPTSPPTUUUXXXWVUWWWWVWXXZ[]^_`bcdb_^_`_^\\[ZXWZXRQUSPLIJKLIKLLNLKKLKKNPPOOPPOMKJIKJJIIIHGFFFGGGGHHIIHGFGGHJKLLMMMLLLLLMMLKKJIHFDA?>BEGFFEFFFFEEDB@>=<<;:9999::9878:<<;;:976655567888765200133456678899:;<=<;:888887644568887888999:;=>=;:<>>><:9:;<=932346778877654334668875444334455567777666666655443212357776766789;=>?@A@><;:9:;<=>>?@BDEB@><;;;<==>>=<<;97679;:9;<=>???@@ABCDDDEFFGEDDDDDDEEEEFEFEEDCCDDDBAACFGGHFEEDEFGHIIHGFDCBBACCCCCCCCgxfxgxhxhxixjxnyqyszqzozozozqzq{r{r{qzozmylykykykxkxkxjxiwhwgwfwewewewevfvfvfufufuftguhuivivhwhwhwixjxkwkvjviuivjxjxlzmzlylyjwjwjwkwnxlxhxjxlymylymynynymykyiyhxhwhvhvhvhvhwcxbxdxewewexeyeyfyfyiznzmynypzozjzhyjxjxixhwgvfvfvevevevguivjwjwixgxfxexhxlxjxgxhwjwmwmwnwoxoynznzozpzq{q{pzoznzmylxkwjvhvgwgxhxixiyiyhxhwgwfwewhwjwiwiwjwjwiwgwfwewdwdxcwbwcwcwdwexexexeyhyjyjzjzjzjzizjzjzjzjzjzjyhxgxfwewfxgyfycycyfxgxgwfwfwfwgwgwgwgxeydycybxcxdxexfxexdxdxcxbxbybybybycycycycybybybybycycycycycycycycycycybzbzbzazaz`z`z`yay`y_y^y_y`yazaz`z_z^z]z\\z[z]z_y`yaybyayayayaybybycydycybybzaza|b|b|c{d{d{c{c{b{b{a{a{b{c{e{g{h{i{h{g{h{j{i{h{f{d{b{bzc{d{dzdze{f|g}f}b}b|e|g|e{`{c|]|a}f|^|^|b|a}d|_|]|`|d|d|c|`|\\|Z|Y|[|]|]|]}Y}W}V|X|X|W|U|V}W}X}X}Y}Y}Z}[}[}\\}]}^}^~]~\\~Z~Y~X}X~Y~Y~Z~YXXYYXVXZ[]~^~_}^}\\}Z}Y}W}V~UUU~V~V~U~S~RRT~T~U}U}U}V}W}V~UTSSRQRRTWWXXYYUVVYYZZZZ[[\\[YWVUTSSSTUXVRSTUUVVVVWYZZYXWYZ[Y[\\]\\ZXVWXXWWWWWX[[YXUTTSQOOPQPPTVVWYWUVUUUUVVVSRRSSTVVUPVTQRUWXYZYZZWVXXWWVVWWXYZ\\\\]^^_^]\\[ZXWVUSRSXTNPNPMLLMMMJLMMMLLKLJJNPPPOPPNKIHGGFFFFFFEEFGGHHHHIIJJIGHIKLMNNOOONMMMLLLKKIHGGECA?>BDEEDEGEDBBA@?=;:::9976778875358::;:98654433457898763112356677789::;;<=<;:877898754568888999999:;<==<:;>>><9889;=:31134677876654334678876543223445566777666666665543322335778877788:<=?@@@?=;989:<=>>?@BCDCA?<;;;<======<;:878:<;;<=?@AAAAABCDEEEFGHHGEEEEEEFFFFGGGFFEEEEEEDDDEHHIIGFEEFGIJJJIIGFDCCBDDDDDDDDfwewewfwfwhwjwnxoyqzoznznzpzqzr{q{q{oznzmylylykxlxkwkwjwiwhwgwfwewewewfvgvgvhvhvhvguhuhuiuivivhwhxhwiwjvjviuiuivjxjxlzmzlylyjwjwjwkxnxlxixjxlymylylymymykyjyhxgxgwhvhvhvgvewaxcxgxewdxdxeyeyfyeyhylylyoyqzlzhzjylxjxixhwgvfvevevfvgvhviwjwiwhwfxexgxlxkxfxhwjwjwkwnwoxpypzozo{p{q{r|r|q{p{oznymxlwjwhwhwixjxkxkyjyiyhxgwfwfwhwhwgwiwiwiwhwgwfwewdxcxbxbwbwbwcwcwdxdxexgyiyizjzjzjzi{j{j{jzjzjzjyhxgxfwgwgxhyfybydyhxhxgwfwgwgwhwhwhwhxgyeydycxdxexfxgxfxexdxcxcxbybybycycycycycybybybybycycycycydydydydycycybzbzbzazazaz`zayay`y_y^y_y`yaz`z`z_z_z]z\\z\\z^y`yaybybybycycycycycybybyayay`z`z`{`{`{a{az`z`{_{`{_{_{`{b{d{f{g{h{h{h{g{h{i{j{i{g{e{d{dze{e{e{ezh{j|i}g}b}c}h|h|f|b|e|_}c}f}\\|^|b|a}c|\\|[|^|b|b|a|_|\\|[|[|]|`|a|`}]}Y|X|Z|Y|X|W|X}X}Y}Y}Y}X}X}X}X}Y}Z}[}\\~\\~[~Z~Y~X~X~Y~YZYXXYZYXYZ\\\\]~^~]}[}X}V}U~U~UVVW~W~U~TSRT~T}U}U}V}V}V~VUTSSSSSTVXYYZ[[XXY[[\\\\\\]]^^][ZWUSRRRSTWVRSTUWXXYY[\\]][ZXZ[^]^__^\\ZXYYYYYYYYZ[[ZXTSSQPNOOPNMPQQOQQQRQQQQQRSRRRSSTUTRRYTSTWXZZ[\\\\]ZYYXWVUUUUUVWWXXYXXXVUSQNNNOOLPUQKLJLJLNNMKIJMKJJJJJHIMOPPOPPMIGFEEDEEEEEEEFGGHHIIIJKKJHIJLMNOONOPPOMMLKJJJHGFEDB@>>ACDDCCEDA@>=<;:9888887555665323789998764322234689987532246888889:;;;<<=<;:8668:9865568899:;;;:99:;==<;;==>;8558:;941123677776554333578987643222344556676666666665543322234689:99888:<=>?@@?=;988:<==>>?ACDCB@=;;;;<======<:878:<;;=?@ABCCCCBCEFFFGHIJHFFFFFFGGGFGGHGGFGGGGFEFFGIIJIGGGGHIJLLLKJHFDCCCEEEEEDDDewdwdwewewgwiwkxmxoymzlzmzo{p{q{p{nznzmymxlxmxlwlwlwkwjviwhwgwfwewewfvgvhvhvhvgvgvgvivivivivivivhwhwiviviuhuhuhvjxjxkzlzlykxjxiwjxkxmxkxixixkylykykykyjyhxhxgxfwfwgvgvgvfwcwaxdxgxfwexdxdydydyeyhyiykymzozizhyjylxjxixhwgvfvfvfvgvhvjvjwiwiwgwfwfxhxlxjxcwhwjwjwkxpxqyqzqzp{q|q|r|s}s|q|p{o{nymxlxkwiwiwkxlxlykykyiygxfxfxgxgxfwfwhwiwiwhwgwgxexdxcxbxbxbwbwbwcwdxdxexgxhyhzizizi{i{j{j{j{jzjziyhxhxhwhwhxhygydyfyixhxgxhxhxixjxjxjxjxhyfyeyexfxfxgxgxfxfxexdxdxcxcycycycycydydycybybybycycycycydydydydydycybzbzbzbzbzazazaybyay_y^y`yayaz`z`z`z`z^z]z^z_yaybybybycydyeydycycycybyayay`z`z`{_{`{_z_z^z]z\\z]z^z^z_za{c{d{e{f{f{e{f{g{h{i{i{g{e{d{czd{e{f{g{j{l|l}i}c}c}h|h|f|c|f}b}f}f}_|`|c}a}_}\\|[|]|`|`|_|^|^|^|_{a|d|d|c}`}]|\\|]|[|Z|Z|Z}Y}Y}X}X}X}W}V}W}X}Y}Y}Z~Z~Z~Z~Y~Y~X~YZZYXXYZZYYZ[[[[~[~Y~W~W~W~WWXXYX~W~VTTU~V}X}W}W}V~W~VVVUUUVV~VXZZ[[\\]Z[[^]]]~^____^][YVSRRRSSUTRRSUWXZ[\\^___^\\ZZ\\_`_```^]ZZZZ[ZZZZ[[ZYWSQPNNMNONLKNNMLLNMONNNMMOPQPRSTTUURUYVUVXYZ[\\]]_\\[YVUTTSSSSSSSSTTTSSRPNKIIKLLLNONKILIGJMKJJHHJIGHGGGFFJLNMLMLJGEDDEEFGFFFEFGGHIIIIIJLLJHKKLNNPOOOPPOMLKJIIIHGEDDC@>>@ABAA@@@=<99877766568754454432468999986543322468::986433579:::;:;;;;;;<<;:8668:986567899:;<=<;:99:;<;;:;;<964359::6201356777655543346789865422223455666666666666555445444468:;;:9888:<=>?@?><988:<<==>?ABCCA@=<;;;<<====>><:89;=<<=?ABCDDDCCDEFFGHJKKJGGGGGGGGGGHHHHHGHHHGGFFHHJJJIHHIJJKKLMMLKIGEDDCEFEEEDDDdwdwdwdwdwfwhwjxkxkxjykymznzn{mzmymymylxlxlwlwmwmwlvkviwhwhwgwfwfwfwgvgvivivgvgvgwhvjvjvjvjwiwiwiwiviviuhuhvgvhwiwixkylykyjxjwixiyjxkxjxhxixiyjyjyiyiyhygxfxfxfwfwgvfvfvdwcwaxdxfxfwfxdxdxcydydygyhzkzlzj{izjzjyjykwhwevevfvgvhvjvjvkvkwjxiwgwgwgwhxhxhwgwgwjwjxlypyryrzqzq{s|s}s}t}r}q|p{o{oynylxlxjxkxmxnylykykyiygygxgxgxgxgxgxgwhwhwhxhxgxfxexdxcxcxcxcwcwcwcxdxexgxgygzhzhzhzh{i{j{j{j{jzjyixhxixixixhygygyiyiygyhxiyiyjykxkykykyiygyfyexfxgxgxgxgxfxfwewdxdxcxcxcxdydydydydycycycycycycycydyeyeydydycybybzbybzbzbzbzbyby`y_y_y`yayayazazay`y_y^y^y`ybyayazbzcydydydycycybzaz`zaz`z`z`z_z_z_z_z^z]z\\z]z^z^z_z`zazc{d{e{d{d{e{f{g{h{g{f{d{c{c{c{e{f{g{j|m}l}i}c}c}g}g}e|c|d}c}e}e}`}b|b}a}^}\\}Z|\\|_|_|^|^|^|_|a{c{d|e|c|a|^|]|]|[|Z|[|[}Z}Y}X}X}W}W}V}V}X}X}X}X}Y}Y}Y}Y~XXXYYYXXZZZYZZZZZYY~W~W~W~X~X~YZZZZX~W~V~V~W~W~Y~X~X~Y~Y~Y~Y~X~X~X~Y~Y~Y~Y~Z[\\[[\\^\\\\\\^^^^^_```^\\[ZVRPQRSSTSQQRTVXZ\\^`aaa_][Z[`a``a`_^[[YYZ[[[[\\[ZYVROMKLLNNLKLMMLJKNNOONMLMNNPOQRSUUUSUXWWWXYZ[\\]^^]ZWUSRRQQQQQQPQRSSRRSROMMLJLLMLLKKJKHGIIHGHGHGFEFFFEDEHJKJJKKHECDEEEFGGGGGGGHHHIJJIJKKJHKLMNOOPOPOOOMKJIHHGGFDCCC@?>?@@@?=<:86555555444566433334434578999876433222469:98754468:<<<;;;<<<;:;<;:866798777678::;<=>>=;99889::999:7422478:741024677666555444578876543222334566666566666655455555568:<<;;98789:<==>>=<989:<<==>?@BBBA?=<<<;;<<<=>?><:89;<;;=>@CDDDDDCCDEFGIKKLKHGGGGGGGGGHHHHGHHHHHGGHHHJJJIIHIJJKKMMNMKIHFEDEFGFEEEDCdwcwcwcwdwfwgwixjxixixjykylykzkykykxlxlwlwkwlwmwmwlviwhxhwhwhwgwfwfwgvivjvjvgwewewiwlwkwkwkxjxjxiwiwivhugvgvgvgwhwhwixjxjxjxiwixjxixixhxgxgxgxgyhxhxhxfxexexfwfwgwhwgwewbwcwcwdwfwgwfwdxdxcxcydyfygzjzjzhziyjykxkxkwgwdvevgvhvjvkvlvmwlwkxjxiwiwiwhwhwgwgwhwiwjxmypyrzrzr{s|t}u~t~s~q|p{o{o{oznzmymxlxmynynzmzlzkyiyhyhyhxhxhxhxhxhxhxhxixixhxfxexdxdxdxdxdxdxdxdxdxexfxfxgyhzhzhzh{h{i{j{j{jziyixixixixiygyezhzjyhygyiyjyjyjykykylylyjyhygyfxgxhxhxhxgxgxfwewewdxdxdxexexdydydydycycycycycycycydydydydycybybybybybzbzczcycyby`y_y_yaycybyazazayay`y`y`yayayayazazbzcycycycybzazazazazazaz`z`z`z_z_z^z]z\\z]z_z`z`zazazazb{b{b{c{c{e{f{f{e{d{czb{a{a{b{d{f|h|j}j}h}b}b}d}e}d}b}a}b}c}c}a}c|b}`}]}[}[|\\|]{^{]|^|^|`{b{d|d|d|c|a}_}]}]|\\|\\|[}[}Z}X}W}X}W}V}U}V}X}W}W}X}Y}Y}Y}X~XXWXXXWXZZZYYYYXXWWV~W~X~Y~Y~Z~[\\\\\\[Z~X~X~X~Z~]~Z~Y~Z~[[~[~[~[}Z~[~\\~[~[~[~\\]\\[\\^]]]_`_^_```_^\\[ZWQMPSSSSQPPQSVWY\\^`baa`^[Z[___``a`^\\ZXXY[[[\\[ZYXVQNKJKKOOMLMOMLHKOOOONMLMNNOOQRSUVVVUWXYXXXYZ[\\]]\\XUSQQPPQRRQQQRSTTSTVUSQROKLMNMLLKKJGEFEDDGGEDDDDDCBBCEGGGGIIGDCDEFGHHHHIIIHHHHJJJJIJJIHLMMMOOQPPONNLJIHFGFFEECCBA@??@@?><;974223355432456532223333567898876544333469::9754468:<==<;<=>=<::;:9876788888789:;<==>>><:98789998775200267:853114577666655544467887643222334556666566676665445788778:;<<;:9888:;;<<===;:99;<<=>?ABBA@?=<<<<;;;<=>?>=;::;;:;<>@CDEEEDCCDEFGIKLMKIHGHHGGHHHHHHGGGHHGGGHHIIJKKJIIIIJKKLMNMLJHFEEFGHGFEEECdwcvcvdvevfvgvhwiwhxhxhyiyixhxixjxjwjwjwjwkwlwmwlwkxgxfxhwhwhwgwfwgwhwjvkvkwhwdxgxjwmwkwkxkxkxjxjwiwivhvgvgvgvgwgwgwhwiwiwiwhwhwixhxhxgxfxewexfxgxgxfxewdxewfwfwgwhwgwdwawcwdwewgwgwfwewdxdxcxcxfygzjzhzfziyjxkwkxjwfwdwhvivjwkwmwnwmxlxkxjxkxjxiwiwhwgwgwhwiwjxmyozqzqzs|s|u}u~t~r}p|o{o{o{ozoznznynymynznzmzlzkzjyjyjyjyjyiyiyiyixixixixixhxfxexexexexexexexdxdxdxexexfxgxhyhzhzhzh{h{i{jziyixixjxjxjxiygyfzizizgyhyjzlzlykylylzmzmzkzizhygyhxixixixhxhxgwfwfxexdxdxexexexexdydycycycycycycycycydydycycybybybybybyczdzcycyby`y`y`ycycycybzbzbybybyayayayayayazazbzbzbybybzazaz`z`z`z`z`z`zaz`z`z`z^z^z]z^z`zazazbzbzbzbzb{a{a{b{d{d{c{czbz`z_{^{]{^{_{`|a}b}b}b}`}_}`}a}`}_}^}^}_}_}_}_}^}\\}[}Z|[|[{[{[{\\|\\|]{^{`{a|b|a|a}`}^}\\}[}Z}[|[}[}Z}X}V}W}W}V}U}W}X}X}W}W}X}X}X~WWWVVVVVWYYYXXXXWWVVV~X~Y~Y~Z~[~[\\\\\\[[~Z~Z~Z~[~_~[~Z~[~\\~]~^}]}\\}\\}\\~]~\\~\\~\\~\\~^]\\\\][]]__^^^_``_][ZYVPLPTTTSRPPQSUVX[]_``__][ZZ[\\^^``_][XVVXZ[[[ZYXVTPMKKLMQPNMNPNMILPQQQPONNOOOOQRTVXXWVXXYXVVVWYY[ZYVTRPPPPSSTTTUVWXXWWYYVTTQLLMONMLLKHDBAADEFEDCCCCCCCCCDEEDEGGGEEFGHIJJJJKLKJIIIKLKJIJJHHLMMMNOPONNMLKIGFDEDEEDCCAA@????><;:863111355432347742223333457788876544333468:::865579;=>>=<=>??=9:;:987677899889:;;<==>>>=;:87767776541/.04799763235777666666544567876543222445665555666777764237888889:;<<;98789::::<=<;:99:;;<>?AAA@??==<<;;;;<=>??>=<;;;:;<=?BDEEEDDDDEFGIKLMKIIHIHHHHHHIHHGGGGGGHHIIJJKKKJIIIJJKKLLMLKJHFEFGHIHGFEEDdwcvcvevfugvgvhvhwgwgxgxgxgxfwgwhwiwiwiwjwjwlxlxkxjxfxexgwhwhwhwhwhwiwkwmwkwfxdxhxlwnwkxkxkxkxjxjwjwivhvgvgvgvgwgwgwhwiwiwiwhwhxixixhxfxdxdwdxexfxfxewdwdwewewewfwhwfwcwawcwewgvhvgwgwfwdwdwcwcweyeyhyezdyhxixkwkxhwdxewjvlwlwmwnxnxmykxlxmxlxlxkwjwivhvhvhwiwkxmynzozp{r|r}t}u~s}q|p|o{o{p{pzozozoznznznznzmzlzkzkzkykylykykykykyjyjxjxjyiyiygyfyexexexfxfxfxeydxdwdwewewfwgxgygzgzgzg{hziziyixixjxjxjxiygygzgzfzgzjykzlzmzmzlzmznznzlzjziziyixjxjyjyjyixhxgwgxfyfyexewewexeyeydydydycycycycycycycycycycybybybycycydzdzdycybybybycyeyeyeydydydydydycycycybybybzazazazazazaz`z`z`z`zazazazazazbzbzaz`z_z_z_zazbzczdzdzczczczb{b{a{a{azaz`z`z^z]{\\{[{Z{Z{Y|Z}[}\\}\\}]|]|]|]}]}\\}\\}[}[}Z}Y}Y}Y}X}X}X|Y|Z{[{Z{Z{Z{[{[{]{]|]|]}\\}\\}[}Z}Y}X}Y|Y}Y}X}V}U}V}W}V}U}W}X}X}W}W}X}X}W~VUUTUUUUVWWWWWWWWWWWX~X~Y~Y~YZZZ[\\[[[~[~[~\\~_~\\~[~\\~]~^~_}^}]}\\}\\~]~]~[~[~\\~]~]~\\~\\~\\~Z~[~[~]]]\\]^_^]\\ZZYUOLPVWVUTSSTUVVWYZ\\\\[[[ZXWWWY[[]]\\ZXVTUWYZZZYWVTQNLMMNOTRNNPQQNJNQSSSRQPPPPPPQSUVXXXVWXXWTSRTVWWVVTRQPOQRTVWXXYYZ[[ZY\\\\XUTRMMNPONMLJFA??AEGGEDCDEEDDEEEEFDDFIHHFGHIJKLKKKLMMLKJJLMLKIJIHHKLLLMMMLKKJHGFDBABABCBBB@?>===<;988752001356532336974323333356778887655433468:::98778:;>??>==>?><::;:98777789999:;<<==>>>>=<;:9765566541.+-157897434567877777765555678765433244457666567787777643578889:;;<=;:98899988:<;;98778:;<>@@@??>=<<;;;;;<=>???>===<;:;=?BDEEEDDDDEFHJKLLLJJIJIIHHHHHIHHGGGGHHIIJJJKKJIIJJJKKJJKLKJIIGFFHIKJHFFFEdwdvdvfvgvhwhwhwhwgwfxfxgxgxfwfwgwhwhwhwixjxkxkxjxixdxexgwhwiwiwiwiwjwkwlwixfxdxixnxnxlxkxkxkxjxjwjwivhvgvgvgwgwgwgwhwhwhwhwiwiwixixgxexdxcwcwdwewfwevdvdvewewewfwgwewcxdxexgwhwhwhwgwfwewdwcwbwbwcwbxcwdwhvjvjwiwgxexixlwmwnwnxnxmylylylxmxmylxlwkvivhuhuiviwjxlxlynzp{p|p}s}t|r|p{o{n{o{p{p{ozozoznznznznzmzkzjzkzlymymylylylylylykykxkyjyiygyfyfxfxfxgxgxfyeyeydxdwewewfwfxfyfyfzfzfzgzhyixixjxkxkxjyiyhzgzfzfzhyjykzlzmzmzmznzozozmzkzjzjyjykykykyjyjyixhxhygyfyfxewewexexeyeydydydydydydydydycycycybybybybybycyczdzdycycycydydzfyfyfyeyeydxdxexexdxdycycyczbzbzazazaz`z`z`z`zazazazazazbzbzbzbzaz`z_z`zazczczezfzfzezezdzbzazaz`z`z`z`z^z\\{[{Z{Y{X{W|W|X}Z}Z|[|[|Z|Z|[}Z}Y}X}W}V}U}T}T}U}V|W|Y{Y{YzY{Y{Y{Y{Y{Z|Y|Y|X|X}X}X}X}W}X|X|X}W}W}V}U}V}W}V}V}X}X}X}W}X}X}W}W~V~UTSTTTTUUVVVVVVWWWXXXXXXXXY~[~\\[[[~[~[~\\~]\\~\\~]~Z~`~`}_}\\}]}V~Z[[~Z~[~\\~\\~\\~\\~[~Y~Y~Y~ZZ[[\\]]\\\\[ZYYVQNRWYYXVVVVVVVVWXWVUVUVVUUUVXXZZYXUTSTVXYYXWUSQOLLNNPQXSNORRSPLPSUTTSRQQQQQQRSTUXXXVVWWWSRRSUUUTSRQPOPQRVWYZ[\\\\]]][[]\\XVTSONOPPONLID@@ABFHGECAEGFEFFGGGFFDGIIHHHKKLLLLLLMNNMKKKMMMKHIIHGJKKJKKJIHIHFECB@?@@@@A@@?><<;;:88765320/0356643235875433443346777888766554579:;:::989:;=???>=>?=<:9::9887789:::::;<==>??>><;;:9875565541.++.2689864456898777777665567886543334445677766778888775445789:;<<<<;98788987789::987679:;=??>>>==<<;;;;;<==>?@?>>==<;;<>ACDEEEDDDDEGIKKLKKJIJJIHHHHGHHGFFFGHHIIJJJJKJIIJIJJJJJIJJIIHGFFHJLKIGFFFevevfvgvhviwhwhwgwfwfwfwgwgwfwfwgwgwgwhxixjxkxkxiyfxcxdxhxixixiwjwjwkwjwkwhxexhxlxnxmxlxlykykxjwjwjvivhvgvgwgxgxgwhwhwiwiwiwjwjwiwixgxexdwcwcwdvdvevevdvdvewewewfwhwewdxfxgwiwivivhwhwgwfvevcvbwbwavawavcvfvhwjxhxgygylxnxnxoxoxnymylymyoynxmymylwkvjviuiuiuivjwkxkymzn{n|n}q}s{q{oznzm{o{o{o{o{o{oznzn{o{n{m{k{kzlznyoynymymymymymylylylyjyiyhygyfxfxgxgwgxfyeyexdxdwdwewfwfxfyfyeyezeyfygxhxhxjxjxjxjyhygzfzgzhyiyjykzlzmznznzozozozmzlzlykykykylylylykyjxixiyhygygxfxexexexeyeyeyeyeyeyeyeyeydzdzczczbybybybybybyczczcycydyeyfzfzgzgygyfyfyexfxfyfyeyeyeydydzdzczbzazaz`z`z`zazazazazazbzbzbzbzbzbzaz`z`zazczczezfzfzfzfzezczaz`z`z`z_z_z^z\\{[{Z{Y{Y{Y{Y|Y|Z|[|[|[|Z|Z|Z|Z|Y|X|W|V}V}U}U}V|W|W{Y{Z{ZzYzXzW{W{W{W|V|V|W|W}W}W}W}W|W|W|W}W}X}W}W}W}W}W}W}X}X}X}X}Y}Y}X~W~V~U~TTTTTUUUUUTTUVWWXYYXWVVVWX~Z~[~ZY[~\\~\\~[[[\\^\\_^~\\~Y~[~VYZYX~Z~Z~Z~[~Z~Z~Y~X~X~WWXY[[[ZZZZZYXUQTX[[ZYYYYYXWVTTSQQQRSSRRRTUVWWVUTSSTVXXWVURPNMLMQQSTZTOOSSUSORUVUUTSRRRRRRSSSTVWVUUVVUSRRSTTTSSRQQPQRTUWY[\\^^^__\\[\\ZWUTSQPQQQPNLIEBCDEHHHFDDHIHGHHIIIHHEIKIIJJMMNNNNMLMNNMLKKMMMKGIIHHHIIIHGEDCCDCB@>=<====>>>><;987655444220/0356653234666543444456777888877666679:;;:;::9::=?@?>>>=<;989:988889:::;:::;<=>???>;:989985444541/,+,0479875556899888887766567887654443456677777777899897534679;<<<<;:9767887657888765579:<<<<<<===<<;;;;;<<=>?@??>>>=<;<>@BDDDDEEDDDFIKKLKJJIJJJIHGGGGGFFEFFGGHIIIIIJJIIIIIIJJIHIHHHHGFFHIKJHGFFFevevfvhvhviwiwhwgwfwewfwgwgwfwfwgwgwhwixjxkxlxjxgxbxbxfxixjxjxjxjwkwkwiwgwdxexkxnxnxmxlylykykxkwjvjvivhvhwgwgxfxgwgwhwhwhwiwiwiwiwhwgwewdwcwcvdvdvdvdvdvevdwdwewfwgwfwewgwiwjvjvivivhvhvgvfvdvcvawav`vaubvevgwhxhxhyjymynxnxoxoynymymynyoynxmxmxmwlwkvjvjuiuiviwjxjykzl{m|n|q{rzpznzmzm{n{o{o{o{o{o{nzo{o{n{l{k{k{lzmzoynymynynymymylylylykyjyhygygxgxhwgwgxfyeyexdwcwdwewfwfxexdydydydxexfxgxhxixjxjxixgyfyeyfygxhyjykzkzlzmzmzmznznzmzlylykykylymymylylykxjxjyiyiyhyfxexexdxeyeyeyfyfyfyfyfyeyezdzczczbzbybybybybybzbzbzczdzezfzgzgzgzfzfzfzfyfyfyfyfyfyfyfyfzezdzczbzaz`z`zazazazazazbzbzbzbzbzbzbzbzazazazbzczezfzgzfzfzezczbzaz`z`z`z_z^z]{\\{\\{[{[{[{[{[|\\|]|]|\\|\\|\\|[|Z|Y|Y|Y|X}W}W}W|X|X{Y{Z{[{[zZzYzXzW{W{W|V|W|W|X|X|W|X|Y|Y|Y|Y}Y}Z}Z}Y}Y}Y}Y}Z}Z}Z}Z}Z}Z}Z}Z~Y~X~W~U~U~TTUVVUTTSSTUWXYYYWVUUUUWZY~XYZ~[~[~[ZZ[_[][ZVZXYYWWXXXYYYYWVUUVWYYYYYYZZZZXUUZ\\][[[\\\\[ZXVSQPMNOPRRRQQSTTUUTSSSSTVWVVTRONLKLOSSUV\\UPPTTVUQSVWVVUTSSSSSSSSRRTTUSSTUTTTSSTTUUUSRQQRSTUVX[^__^`_]ZYXVUUUTRQQQPOMKGFFGHIJIGGHJIHHJJJJJJIJKJGKKKNNOPONNMMNNMKJKMMMJEGHGGHGFFECA?>>??><;:9:::::;<<:986554333222001356653234666544444567888889988876789:<<;<<;:::<>???>=<;:9789989999::::::::;<==>?>;86689864434541.,,/2689976668998888877765678987654434566778888778899::865579;=<<;:986567764467776545789;;;;;<===<;;;;;<<<=>??>???>==<==?BCDDEDDDCDEGIIJJJIIJJJIHGGFFFEDDDDEFHHHHHHIIHHHHHHHHHHHGGGGFEEGIKJHGFFFfvfvgviviviwiwhwgwfwfwgwgwgxgxhwiwiwiwjwjwjxjxhxexbxcxgxjxjxkxjxkwkwkwhwdxbxgxnxnxnxlylylylykykxkvjuiviwhxhxgxfxfwgwgwhwgwhwhwhwhwgwgwewdwdvdveveudududvevdwdwdwewewfwfwiwjwjvkvivivhvhvhvgvevevbvbububucvevfwgxhxiylynyoxnxoxoxoynynyoymymxmwnwnwmwlvkvjvjuivhwhxiyiyi{k{nzqzqyoymylylzm{n{o{o{ozo{nzn{n|m|l|k{l{m{mzmznznynynymylymylylykyjyiyhxhxgwhwgxfyeydxcxcwcwdwewewexdxcycxbxbxcxexfxgxixixixhxgxfyeyfxgxhxhyizizizjzkzkzkzkzkykykykxkylylzlzlykykxkykyjyiyhyfyexdxdxeyeyeyfyfyfyfyfyeydydzczczczczbybybybzbzbzbzczdze{e{fzfzezezezezeyeyezezezezezfzg{fzezdzbzazazazazazazbzbzbzbzbzbzbzczbzbzbzazazbzbzdzezfzezdzczdzczbzazazaz`z_z^{^{]{]{]{]{]{^{_|_|_|^|^|_|]|Y|Z|Z|[|[|Z|Z|Z|Z{Z{[{\\{\\{^z^z\\zZzZzZ{Z{Z|[|[|[|Z|[{[|[|[|[|\\|]}]}]}\\}[}[}\\}\\}]}\\}]}\\}\\}\\}[~[~Z~X~W~V~W~W~XWVUTTSSTUWXYYYWVVUUUWYYXYZ~Z[~ZYYY^X[YYVYXXXWVWVVWWWVTSSTUUVVVWWXXYZ[YWVZ\\\\ZZZZYYYXVTQPNNPQSSSSSSSSTSRQQQQRTTTTRPNMLLMQUUWX^UPQUUXWSTWWWWVUUTSSRSSSRRRRSSTUUUVUVVVVWWWUTSSSTUVVX[^_^^^]\\YWVVVWWWSQPPOONMJIIIIJJJHHILJJIKKJJKKJKLJIKLLNOQQPOONNONNKJKNMLIEFEEEEDCBA@=;::;;:9876777778898875443222222001356764334566655554568999889:::::889:;<<<==<;;:<=>>===<:986578889:::::::9999:;<==><964689965457641--/1489987668999999988766689:97765445667789998888899;;97668:<<<:99886555544456665445689::;;;<===<;;<<;<<<==>?>>???>>===?ABCCCCDDCCDFHIIHIIIJJJIGGFEEDCCCCCDDFFFGGGGHGGGFFFGGGGFFFFFFDEGHIIHFEFEfvgvhvivjvjwiwhwgwfwgwgwgxgxhxixjwjwjwkwkwjwixgxdxbxdxhxjxkxkxjxkwjwhwfxcxexjxoxnxmylzlzlzlxkxkvkvjviviwhwhxgxfwfwfwgwgwgwfwfwgwgwgwgwfwewdvevfvfueuevevewdwdwdwdwewfwgwjwjwkvjvivhvivivhvhufvevcvbububucvdvfwgxhxjxlxoxnxqxqxnxnxoyoynymylxmwnwmwmwlwkwkvjvhufvfwgxhygzj{nyqzpynylykylzm{nzozozozo{o{n{n|m|l|k{m{o{kzjzlzoymylykylylylykyjyiyhyhxhxhwgxfydycycxcxcwcwcwdwewdwcxbxaxaxbxcxdxexfxhxhxhxgxfxexdxexfxfxfxfyfygzhzizizjzjyjyixixixjykykzkzkzkykykyjyiyiyhyfyexdxexexeyeyeyfxfxexeyeydydydydydycycycybzbzazbzbzczdze{d{d{d{c{czczczczdzd{d{d{d{e{f{g{f{ezczbzazazazbzazazbzbzbzazazazbzbzbzbzaz`z`zazbzczezdzdzczczczczbzazazaz`z`z_{_{^{^{^{^{^{_{`{_{_{^{_{`|^|X|Z|[|\\|\\|[|[|\\{\\{\\{]{^{^z_z_z^z[z[z\\{\\{]|]|]|\\|[{]{]{]{\\{]|_|_}_}^~^~]}]}]}^}^}^}^}^}^}]}]~]~\\}Z}Y}X}Y}Z~Y~X~WVUSRSTVWXYYYWVVVVVVYYXYZZZZXWXVVZZXVXXXXWUUUTUTTTSRRRSTUUUUUVWXYZXVUYZYXXWWWWWVVSQPPPRRTUTTSSSSSRQONNOPRRRRQOMLLLMQVUW[_TQRVVYXUTVVXYVVVTRRQQSSSQRQQSUVVVWWWWWWXXWWUTTTUVVWW[]^^\\\\\\[YWVWWYY\\RPPONMMLKJJJIIIIIIJKKKJJJJJJJJJLJIKKMNPRRPPONOOONLKKMMKHDEDDCBA@@?=<9889987654555655667765433222222101355664323566556655678:::899:;;::989::;;<==<<;;<<==<<<;9987545668:;<<<<;:9889::<=>;8534789755676641.--159;:9667899999988766789::996454677888899998889:;;98768:;<<:987765554333455554456789::;<==<<;<<;;;<<===>>>>?>>>=>==?AACCCCCCCBBEGHHHGHHIJJJHGFEDCCBBBBCCDEEFFFFFFEEEEEEFEEEEEEEEEEFFHIGEDDChvhvivjvjviwhwgwfwgwhwhxhxhxhxjxkxkxkxkxkwjxhxfxdxexgxjxkxkxjxjxjwiwfxdxdxixmxownwmylzlzkzlwkwkvjvjwiwiwhwhxgxfwewewewewewewewfwgwgwgwfwevevevfvfvfvfvfwewewcwcwdwdwfwgwjwjwkvjvjvivivivivhugvfvcvcucucucudvdvfwgwjxmxoxnxmxlxkxmxoyoynylylxmwmwmwlwlwkwjwivgvdwewfxgxgyiymypyoxmxkxiylzmznzoyoyoyozn{m{l{l{k|k{m{n{jzjznzoymyjyjykylxkxjyiyhxgxgxgxhxgxeycybxbxbxcwcwcwdwcwcwbwax`xaxaxbxcxdxfxgxhxgxfxexdxexfxfxfxexdycydzezfzgzgygygxgxgxgyhzizjzjzjzjzjyjzizizhygyfyexexexexexeyexexexdxdxdxdxdxdxdydxcxcxcycybzbybybzczdzd{c{c{b{b{bzbzbzbzaza{a{b{c{d{e{d{d{czbzbzazazbzbzazbzbzbzbzazazazbzbzbzaz`z_z`z`zazbzczczbzbzbzczczczbzbzbzaz`z`{_{_{_{_{_{_{`{`{`{_{_{a{`{_|W|[|]|_|_|^|^{]{]{]{^{_{`z`z`z_z]z^z^{^{_{^{_{_{^{^{`{^{\\|_|c}c}a}a~`~_~_}_}_|`|a|a}a}`}_}_~_~^}\\}[}[}\\}]}\\}Y~W~V~USRSTVWXYYYXXXWWWWYYYYZ[~ZXVVVVUWXWVVWWWVUTSRQQQQQQQQRSSSSSSSTUVVUTTUTTTTTSSSSTTSRRSTUUVWWVUTTTSQOMKKLNPPPPONNMNNOSWVV]_TQTXXZZVUVVWXUUWUOOOORRSRQPPSVVWWXYYYYYZZYYXVVVXYXXXZ\\]\\Z][ZYVWYY[\\YJONMLKJJJIIIHHHHHHIJJJJIIIIIIIIIJJJKLOPRQPPPNOOPPNLKMLJGDCCBB@>>=<;:8777776554444433345554322212222222355665323466545566789;;:999:;<;;:99::;;<<===<;;;<;:::999864235689;<<<<;;988788:<=;853256:975577763/,,.27;;966789999998876679:::;:644558899889:::9889:;;:98789:;:98777776643334555555678899:;<==<<;<<;;:;<===>===>>>>=>==>@@BBBABBBBABEGHGFFGHIJIHGFEDBBAAAABCDDDEDDDDDDDDCDDDDDDDDDCCDEEEFGGECBBjvjvkvjvjwhwgxfxfxgxhxixiyiyjxkxkxkxkxkykxiygyeyeygyiykxkxkxjwjwixgxcxcxfwkxnxnwmwlylylzlylwkvjvjviwiwiwhwgwfwewdwdwdwdwdwdwdwewfwgwgvfvfvfvfvfvgvgvfwewewdwcwcwcwdwewgwiwiwjwjwiwivivivhvgugvgvcvdududvdvdvdvdwgwjxlxlxjxixjxmxoxnynylykylxmwmwlwlwkwkxiwjwgwdwdwfxgxgxiylymxmxlxjyiymznzoznynyoynzm{l{k{k{j|j{k{jzhzkzozmykyiyiyjykxjxixhxgxgxgxgxhxgxexbxbxbxbxcxcxcxcwcwbwawax`x`xaxbxcxdxfxgxgxgxfwewewewewfxdxcybybybyczdyeyeydydxdyeyfygzhzhzhzhzhyhyhzizhzgzgzfyeyexexexexexexdxdxdxdxdxdxdxcxcxcxcxcxcycybybybybyczdzd{c{b{b{czczbzbzazaz`z`za{b{c{c{b{b{b{bzazazazbzbzbzbzbzbzbzazazazbzbzbzaz`z_z`z`zazbzbzbzazazbzczbzbzbzbzbzaz`z_{_{_{_{_{_{_{`{`{_|_|_{`{a{`{Y{]{_|`|`|_{_{^{^{^{^{_{`zazaz`z^z_z`z`{_{_{`{`{`{_{b|^|^|a|e}d}c}b~b~a}`}`}a|b|c|c}a}a}b}b~b}`}_}^|^|_|^|]}[}X~V~USSSTVWWXXXXYXXXXXXXYZ[[~ZXVUVVTVWVUUUUUUTSRPONOPPPPPPQQRRRQPPQQQQQQPNNOPPOOOPQSSTUVWWXYYYXWVUUSPMLIIJLNNOOOOOOPPQTXWW^_URUYZ[[WVUUTQNRVSLMMMPRSSQQQSVWYYZ[\\\\\\\\\\\\[[ZXYZ[[ZZYZ\\\\[Y\\\\XZUXZZX[NDRNKJIHHHHGGGGFFGGHIIIHHHHHGGGGHIJJKLNNPPPOPNMNONLKJKJIFBA@@?><<;::97656666554433322223443322211223332355665433467544566789:;::99:;;;::999:;;<<==<<<<<<:987777654123579;<<==<;9877789:<:75324589865677641.,-06;<;8899::99998766679:<<<;7546589:8789:;;:9889::987779::9777787766543455555667899::;<=>>==<=<;;:;<===============>??@AA@AAAAAACEFFEEFGIIHGFEEDB@@?@@ABCCCDDCBCBBBBBCDDDDCCBBBABCDDEFEDBAAlvlvlvkwiwhwgxfxgxhxixiyixjxkxlxlxlxlylykxjygzfzgzizlymxmxlwlwkxixfxbyexhxkwmwmxlxlylylylylwkwkvjvjxiwiwhwhwgwewdwdwcwcwcwcwdwewfwfwfvfvfvfvfvfvfwfwfwewdwdwcwcwcwdwewfwhwiwhwiwhwhwhwiwhwgvhvgvcvevfvevdvdvcvcwgwkxjxhxgxhxjxoxpxmylykykylxlwlwlwkwkwjxixjwgwdwexgwhwhxixkxlxkxkxjyjzmznzoznymynylzk{j{j{j{j{j{izgzhzlzmykyjyhyixixixixhxhxgxgxhxgxgwgxexbxbxbxbxcxdxcxbxbxaxax`x_x`xaxbxcxdxexfxfwfwfwewewewewexdxcybybycydyeyeydycycycydyeyfzfzfzfzfzfygygyhygzgzfzfyfyeyeyexexdxdxcxcxcxcxdxdxcwbxbxbxbxcycycycybxbxcxdydzdzdzczczdzdzdzczaz`y_y`z`zazbzbzaza{a{a{azazazbzbzbzbzbzbzbzbzazazbzczczbzaz`z`z`z`zazazazaz`zazazbzbzbzbzbzaz`z`{`{`{`{_{_{_{_|_|_{_{_{`{`{a{[{_|`|`|`{_{_{_{_{^{^{_{a{a{a{`{_z`zaz`{^{^{`{_{_{^{a|^|`|e|f}e}d}b}b}b}a}a}b|d|d|c}b}b~d~d~c~a}_}`}a}b}a}^}Z}W~V~UTSTUVWWWWWXXXWXXWWWXZ\\\\~ZXWWYXUVWVUUUTSSSSRPONPRRRQQPPPQQPONNNMMNNNLJJKMMLLLNPSTVVXYYZZZZYXXWUSPMJGGIKMMMNOPPQRRTUYWX\\^WTVZ[\\\\XVTSPKHNROJKJMPRTTRRRSVXZ\\]]]^_^^_]]\\Z\\]^^\\[\\\\]]\\[\\\\WYSVXVSRGEPLHFEEFFFFFEFFEEEFGGGGFFFEEEEEFGGHHIJLMNMMNMKKKKIGFHHFC@>==<;:9999976555655433222222112333221112234444556775445774335666789:;::999::::9999:;;;<<;;<<;;9876665554212468:;<===<98766788:9653334588766777641.-/5:<<:999::99986566789:<==<8656579:9889:<<:8778999878889887667877776656777766789:::;<=>>>===>=<;::;<=======<<<=====>??@@???@@@@BCDEEEEFGHGFEDDDA@>>??@ABBBCCBBAA@AAABCCDCBBAAA@ABCCDEDCBA@mwmwmwkwiwgwfxfxgxhxixjyjxkxlxmxmxmxmylzkyjyhzizjzlynymxnxnwmwkxgxdxayfyjxkwlwlxlxlymymylylwkwkwkwjxjxjwiwiwhwfwewdwcwcwcwcwdwdwewfwfwfvfvfvfvfwfwfxfxexdxdwcwcwdwewewfwgwgwgwhwhwhwhwhwhwhvivevdwfvfvfvevdvcvcwfwixgxexfxgxhxixjxkxjyjykykxkxkxkxkxjxjxjxkxgxdxgxhwhwhwhxjxjwjwjyiyjzlznznzmymylyjzizhzizizizizhyeyiylylykyiyhxgxgxhxgxgxgxgxgxhxgxgwgxexcxbxbxcxdxexdxcxbxax`x`x_x`xaxbxcxdxexfxfwfwfwewewewewfxdybyaybycydyeydycybybxcydydzezfzfzfzfyeyfyfygyfyfzfzfyfyeyeyeydycycybybycycycxcxbwbxbxaxbxcxdydycybxcwdxeyeyeyeydydyeyeyeydyby`y`y`z`zazazazaz`{a{azazazazazbzazazazazazazazbzbzczczczbzazazaz`z`zazazazazazazbzbzbzbzbzaz_z_{`{az`z`z_{_{_|_|_{^{^z^z`z`{_{`{a{`{`{`{`{`{_{^{_{_{a|a|a|`{_{`{a{_|]|]|`|_{]{^|`|_|a|f|f}d}c}b}b}b}b}b}c}d|d|d}c~c~de~d~a}`}b}b}c}`}]}Z}W~V~V~U~TTUVWWWWWWWWWWWWVWXYZZYXWYZXVWWVUUUTSSSSSQQRSUTTSRQPPPPPNMMMKLMNNLIIKMMLLLNPSUWXYZZZ[[ZZXWVTROLIFGHJLLLMOQRSTTTUYWXZ^YTWZ\\\\[XTSRNGGLOMHJJMQSTTSSSTVX[\\]^___``___]\\]^_`\\[^]]\\][\\[RURQQNKGDEJIFDCDEFGFFFFFEDDEFGGFFEDDDDDDDEEEEFHJLKKJJJHFEEDCDBBB@>=<;:9888888765455554210/02321001223211123455556678864457742346656789:::9889999988889::;;::::;:87655555654234679;;==<;98666667876433234687678887420..27:<:::;::999865567898:==<866656799889;<<:8667888889998776566788787778888766789:::;<>???>>?>=<;:9:;<=======<<==<==>????>>??@@?@ACDDDEEFGGEDCCC@?==>>@@AAABCBBA@@@@ABCCDCBBA@@@@ABBCDCCBA@mwmwlwkwiwgwfxfxgxixjxkykxlxmymynynymylzkyjzizjzlynyoyoxnwnwmwkxfxbycyhxkwkwkwlxlxmymymylylwkwkwkwkxjxjxjwiwhwgwfwewdwcwcwcwdwdxexewfwfwfwfvfwfwfxfxexexexdxdxcxdxewewewewewfwgwhwhwgwgwhwgvgvdwewgvhvhvfvevdvdwdwfxaxaxgxfxgxhwhwixhxiyjxkxjxjxkxkxkxkxjxjxgxfxiyiwhwhwhwiwhwhxhyhyjzlzmzmzmylyjyhzgzgzhzhzhyhyfyfyjykyjyjyhxgwgxfxfxfxgxgxhxixixhxhwgxexdxcxdxexexfxexdxcxbxax`x_x`xaxbxcxcxexfxfwfwfwewewfwfwfxeycybybydyeyeydycybycxcydydzezfzfzfzeyeyeyeyeyfyfzfzfzezezeydydycybybybybybycycxbwaxaxaxbxcxdxdycxcxdwdxeyfyfyfyeyfygygxfxeycyaxaxaybzbzbzbzaza{a{`zazazaz`z`z`z`z`z`z`z`zazbzczczczczczbzbzbzazazazazbzbzbzczbzbzbzbzbzaz_z`{`{azaz`z_{_{_|_|^{^{^z_z`z`zaza{a{a{a{a{`{`{`{_{_{`|a|`}`}_|_|_{`{_|]|Z|^|^|\\|]|^|_|b|f|f}d}b}a}a}a}a}b}c}d}d}c~b~b~ccb~`~`~b~b~b~`~]}Z}X~W~W~V~T~T~U~V~WWVUVVVVVVVUUUVWXXXWX[[ZXYYWWVUTTTTUUTTVWXWVUTRQQQPONMMMLMPPPMJKNPOOMMNPSVWXYYZZ[ZZYXVUSQNKIGHIJLMMNORTTUUUUYWWZ_ZVWZ\\ZYXSRQLFHILKIJJNRTUUTTTUVXZ[]_````````_^``a`]Xa^^Z]XZWNOLJHFCCEFFFDCCEFGHHHGGFEDCDDEFFEDCCCCCCCCCBCDEGIHGFFFDBA@???>>>=<;:998777777655444443210/023220001232212345666567888754566312455556789::98777888877788999988899766544556654446789:;;::87655566654433333577678888641/.159;::::::9998645679668;<<:7666679999:<=<:8656788899:9765556778988878999888789:;;;;<>?@@@@@?>=<:99:;=========<====>?>??>=>???>??@BCCDEFGFECAAA@>==>>@@A@@ABBAA????@ABCDDCAAAAAAAAABCBBA@?mwlwkwjwiwgwfxfxgxixjxkxkylymymynynynymzlzjzkzmyoyoyoyoypxoxkxhxeydygykxlwkwkwlxlxnynymylykwkwlwkwkxkxkxjxixixgxfxewdwdwdwdwexexexexexewewfwfxfxfxexexexexexdxdxexdwdwdwdwdwewfwgwgwfwgwgwfvewdwfwhvivhvgvfvdvevaw^x`xexgxfxgxgwgwhwhxixixjxjxjxkxkxkxkxkxixgxiylyixhwhwhxhxgxfxfygzhzjzlzlylyjyhzgyfyfygygygyfxfxgxiyiygyixhwgwgxgxgxgxhxhxixixjxixixgxfxdxdxexfxfxgxfxexdxcxbxax`xaxaxbxcxcxdxexexfwfwfwfwfxgxgxfydycycydyeyeydycycydxeyezezezezezezeydydydyeyezfzfzezezezdzdycybzazazazbzbzcycxbxax`yaybxcxdxdxcxcxdwdxeygygyfyfyfygxfxfxeycyaxaxbyczczczczbzb{a{azazazaz`z`z_z_z_z_z_z`zazbzczczczczczczbzbzbzbzbzbzczczczdzczczczbzbzaz`z`{a{bzazaz`{_{_|^|^{^{^z_z`zazazbzb{b{a{a{a{a{a|`|`|`|`}`}_}_}_|_{`{_|]|X|\\|^|]|]|^|`|b|d|e}c}a}`}`}`}a}a}b}b}b}a~`~`~`__~^~^~_``~^~[~Z}Y}Y~X~W}V~V~V~W~WWVUUUUUUVUUTTUUVVVVXZZY~X\\[ZYXWUUUVWWWWYZZYXVTSRRRPOMMNNMPSSRNLNQSRRPNOQTUVWXXXXXXXWVUSROLKIHIKLMNNOPSTUUUUUYWVZaYVWX[XWVRQOKEFGJKJJLOSTVUUUUVXXYZ\\^_````_`___`aba[Z`\\ZZZSSQLIHFDBBBEGFFDDDGHJJJIIHFECBBCDEEDCCBBBBBAAAAABDDFECBBA@>=<;;;;;;;::9876666676555433333210//234321001222223457776678887544553123554455789;:9766777766667778867777776654567877646778999987654445555443222357788899976421147999::9:99886445797569;<:8666778899:<=<:865678889:::743456788988889:;;::989::;;;;<>?@@AAA@?><;99:;=>>>?>>=======>?>>>===????==>@BBDDFFFEB@?@>>==>>@@AA@AAAAA??>>@@BCEDDBAAAAAAAAABAAA@?lvlvkvjvivgwfxgxgxixjxkxkxlymymynynynzmzlzkzlynypyqypypyoylyiygyeygylxmxlwkwkxmymxoynylykykwlwlwlwlxlxlxkxjxixhxgxfxewewewewexfxfxfxfxfwfwfwexexexexexexexexdxdxdwdwdwcwcwdwewewfwfwfwfwewewcwdwgwiuiuhufufvevdw`wZwdwjwexfxgwgwgwhwhxixixixjxkxkxlxlxlxlxixixkylyjxhxhxhxhxgxexeyfzgyhyjykyjxhxfyeyeyfxgxfxexexfxfxhxhygyhxhwhwhxhxhxhxhxixjxixjxjxjxhxgxexexfxgxgxhxhxfxexdxcxbxbxbxbxbxbxcxcxdxexfxgwgxgxgyhyhygydycycyeyfyeydydydyexfyfyfzfzfzfzezeydyczczdzezezezezezdzdzczczbzazazazbzczcycxbxayayaybxcxcxdxcxcxdxdyeyfyfyfyeyeyfxexexdycybxbxcydzdzdzczb{b{b{azazazaz`z`z_z_z_z_z_z`zazazczczczbzczczbzbzczczdzezezfzfzfzfzezezdzdzczbzb{b{czczb{`{^|^|^|_{_{_z`zazbzbzbzbzb{b{b{b{b|b|a|`|_|_}^}^}^}^|_{_{_|]|X|[|]|_|^|^|_|a|c|b}`}_}_}_}_}_}`}`}_}^~]~]~\\~]~\\~\\~\\~\\~]]][~Z~Z}Z}Z}Y}X}W}W~W~X~XWVVVVVVVWVTSTTUVVUUVXYX~Z^^]\\[YWVVVWVWZZ]]ZXVSRQPSPMNPPOOSWVSONPTVUTQOPRUTTTUUUUUUTTSRQOMKJIIKMLOPPPQSUUUUUVYVSZcXTUUYTTRQNMJDEFIKLLMPRSUUUTVWXXXYZ\\]]^^^^^]^^^__]XX]YVXVOMMHGGFECADGHHGGHHJKLMKJIHFECBAABCDCCBBBBBBBBAAA@ABCCA@??><<;::99999988765555665554333333210//2344210/1232334568887678888754443123554444579;;:8655665555555666655566666556679887566777778766554445554432223567898999987533467789:9:99876445677657:;:8767777889:;<<;976567899:::74345678998789:;<<;;:99:;<====>?@@ABBA@?><;:;<=>>>?>>=======>?>>=<<<>???><<=?ACDEFGEB@?>>===>?@@@@@ABBBA??>>?ABCEEDCBBBBBBBAAAABA@@lvkvjvjvivgwfxgxhxixkxkxlxlxmymymynynymylymynypyqyryrypymyjygyeyezjynxmxlwkxkymxnxoxnxlxkxlxlxlxlxlxlxlxkxjxixhxgxfxfwfwfwfwfxfxgxgxgwgwfwewexexexexexexexdxdxdwdwdwcwcwcwdwdwewewewewewdwdwcwdwgwhvhvgvfvewewevavbwewgwgwgwhwhwhxixiyiyiyjykylymxmxmwmwlwlwlxlxjxiyiyiyiyhyfydydyeyfxhxixixixhxfydyexfxfwewdxdxexexgxhxgxhwgwgwhxixixixixixixjxjxiyjyhyhygxfxgxhxixhxhxgxfxexdxdxcxcxcxbxbxbxdxexfwgwhwhxhxhyhyhzgyeycycydyfyeydyeyfyhyiyiyiyhzhzgzfzeydzczdzdzezezezdzdzdzdzczczbzazazbzczczcycxbxbyaybycxcycycycycxdydydydyeyeyeyeydxdxdxcybybybxcydzdzdzczbzb{b{azazaz`z`z`z_z^z^z_z`zaz`zazczczbzczdzdzbzbzdzfzfzfzgzhzhzhzgzgzgzfzezezd{c{czdzdzb{`{^|_|_|_{`{`zazbzczbzbzbzbzbzb{b{b{a|`|`|_|^}^}^}^}^|_{^{^|\\|X|Z|]|^|]|^{_{`{a{a|_|]|^}_}^|_}^}]}]}\\~[~Z~[~\\~[~Z~Z~[~[~[~Z~Y}Y}Y}Y|Y|Y}X}W}W~X~X~YXWVV~V~XWWXVTSSTUVVUUVXX~Y[^^]\\[ZWVUUUTW[~Z~\\\\YWTRPPPSOMORQNQVYWTONRUWWUROQRUSRSTTTTRRQQQONNLKIHILNKORQPRTVVUUVVXVRZcXSRSURQPOMKIEEFIJKLMOQQSUTTUWXWWXYZ\\\\]]]]\\\\\\\\\\\\]ZVUWWUSOMLKFEHGEC@FHJIIHIKLNNNMKJHFECAAABCCCBBBBBBBBBBAA@@@@A@>==<;:988999988887654455555443333332220/024542100122345678997667888765432112344443468:;:86445544444445565555566666544679:986556555666654334455443212346878999::987544577899:9888654445766679987777777899:;<<;9866667789:975445678998778:<==<<;::;<<==>>>?@ABCCBA@?=<;;;<=>?@?>=<<<<<<=>?><<<<=?@@><:;>ABDEEFEB@>====>>??@@@?@BCCB@??>?@CDEEECBBBBCCBBBBBBBA@kvkvjvjvivgwfwgwhxjxkxkxlxlxmxmxnxnynynyozoypyqysytzrzoykxixfyeyhzmyoxnxmxlxmynynynxmxlxlxlxlxlxlxlxlxlxkxjxixixhxgwgwgwgwgwfxgxgxgxgwgwfwexdxdxdxexexexexexexewdwdwcwcwcxcxcxdxdxexewewdwcwcwevgvgvgvgwgwfwgwfvdvevgwhwhwhxixixiyjzjzjzjzkylylymynxmxmxmxlxmxmxkxiyiyiyiyhyfyeyeyexfxgxhxhxixhxfxeyfxfxfwewdwdwdwewfxgxhwgwgwgwixixjxixixixixjxkxjyjyiyiyhxhxhwixixhxhxgxgxfxfxexexdxdxcxbxbxcxexgwhwiwixiyiyiyhzgzezczczezgzezeygyiyiyjyjyiyizhzgzgzfzezezezezezezdzdzdzdzdzczczbzazbzczczczcycxbxbybycycycycycycycyczczcycydydydydycycybybybybycydydzdzczbzbzb{b{azaz`z`z_z_z_z^z_z`z`zazazbzbzbzbzdzezdzbzczezgzgzhzizkzkzkzjzizizhzgzgze{e{ezfzfzc{`{_|`|`{`{azazczczczczbzbzbzbzb{b{a{`{_|_|^|^}]}]}^|^{^{^{]|\\|Z|[|^|]|\\{^{_{`{`{_|]|\\|^|^}\\}]}]}[}Z~Y~Y~Y~Z~Z~Z}Z}Y}Z~Y}Y}X}X}X}X}Y}Y}Y}X}W}W~X~XYXXX~W~W~ZYXZW~U~S~SUVWVUUVWXZ[]]]\\[YVUSRSQTYWZZVTROMMPULKPTPNRY[WSOOSWYWUQOQQSRQQQQRQPONNMLKKJIIHIMPJPSQQSUVVVUVWXUQYbVQOOQNMKMKIGFFGIJKKLNOOQTQRTVVVVVXXYYZZZZZYZZYYXWTRRSROKJKIEEIJHD>GJLLLLLMNOONLKIGEDCA@@ABCBBAAAABBBBBA@???>>>=<;;:98778888777766555445544433333333320/023432101222345788876667877654310012333334569;:86444333333444555544566666655579:98755655556665433344445542123588899:;;:98766666689:988765445566677888777778899::;;<;;:987767789987655568987667:<>>==<;:;<=>???>>?@ACCCBA@?><;;<=>>??>><<<;<==??>=<<;=?AA?<:9<?BEEEEEDA><<==>>?@@@@@ACDDCA@@??@CDDEEECCCCCDCCCCCCCCClvjvjvjvjwhwgwhwiwjxkxkxlxmymymynynynynyozpzqzryszszqyoykxhxeygzkzmyoxnxmynyozoynymymylymymymymxmxmxmxmxkxjxjxixiwhwhwhwhwhxgxgxgxgxgxgwfxexdxdxdxexfxfxfxfxexexdxdxcxcxcxcxdxdxdxdxdxdwdwcwdwewevfvfwfwfwgwgwfwfvfvhwjwjwixjxjyjzjzj{k{k{kzlzlzlymymxmxmxmxmxlxjxjxixixiyhxgxfxexfxgxhxhxhxhxhxfxexgxgwfwfwewdwdwewfwgwgwgwfwgxjxkxkxjxjxixjxlylykykykyjyiyixiwixixhxhxhxgxgxgxgxfxexexdxcxbwcwewgwiwjxkxjyjyizi{hzfzdzdzgzhzfzfziyjykykykyjyizizhzgzfzfzfzfzfzezezdyeyeyeyeydycybyaybyczdzdzcycxbxbycydydydycycycyczczczczcycycybybybybybyczczczcycydzczbzbzbzazb{azaz`z_z_z_z^z^z_z`z`zaz`zazazazbzezdzbzbzezfzgzhzizjzlzmzlzkzjzjzjzizhzgzg{gzgzgzd{a{`|a{a{bzczczczczczbzbzazazazaza{`{_{_{^|]|]}]}^|^|^{^{]{]|\\|\\|]{^{]{]{_{_{_{_{^|]|\\|^|^}[}\\}\\}Z}Y}Z~Z~Z~[}\\}\\}[}Y}X}W}W}W}W}V~W~X~Y}X}X}W}W~WWXY~X~X~X~X~[YZ[~X~U~T~TVXXWVUVWXYZ[[~[~ZYWTSQOROOSRVVSQOLLMSVIMSUPOTZ[VROPUXYWSPNOPQQQPQQPONMLLKJJJIHHHJNPKQTRRTUVVVTUUVSPW\\TOLLNLJIKIHHHHHIJJKKMLMORMOQSTTTUVWWWXXXXXWWWVUTSQPOPOMIHJHDEJKJE?ILMNMMMNNOOMKIHFDCBA@?@ABA@@??@@AAAA@?>==<<<<;::987666776666665555555444433333333320//134421101123446788776667776543100123332234568:97533332233344555555555566655568998776655556665433344455553112478899:;;;:988776667999887654566666777778777899::;;;<<<<;;99877777777655568987667:=??>>>=<<=>?@@@@@?@ABCCCBA@?>=<<<=>??>>=<;<===???==<;=?AB@=:9;?BEEEEEEB?=<<=>?@AA@@@ACEFECA@@@ABDEEEEDCDDDEEDDCCCCCDkwjwjwkwkwiwhwiwiwkxkxlxmymymymymymymymyozpyqyrzr{qyoxnxmxhydyizlznxnxmynzoyqypznznzmzmynynynynymymymxmxlxkxjxjxjwjwiwiwixhxhxhxhxgxgxfxfxfxexdxdxexgxgxgxfxfxexdxdxdxcxcxdxdxdxdxdxdxdwdwcwcwdwdwevewfwfwgwgwfwfwgviwkxkxkykykzkzk{k{l{l{l{lzkzkzkykxlxlxmxlxkxjxixixixiyhyhxfxgwgwhwiwixhxhxhxfxfxgxfwfwewdwdwdwewfvgvgwfwewfxixkxjxjxjxixjylykzkzlzmzkyjykxjxjxjxixixiwiwiwhwhwgwfwfwexdwcwdwfwhwjwkwkxjyjzizizh{f{ezezhzizfzfzjzlzlzlzlzkzjzjzizhygygzgzgzfzfzeyeyeyeyeyeydycybybycydzdzdzcycxbxcydydydyczbzbzczczczczczcybybybyayaybybyczdzczczczczbzbzazazazazazaz`z`z`z_z_z^z_z`z`z`z`zazaz`zazdzczazazdzfzgzhzjzkzmzm{l{l{k{k{kzjzizhzg{h{h{g{e{b{a{b{b{czczczczczczbzaz`z`z`z`z`z`{_{_{^|^|^|^|_|_|_{_{_{^|^|^{_{_{^{^|`|`|`{_{_|^|^|`|_}\\}\\}\\}[}[}\\}\\}]}]|^}^}]}Z}X}W}V}U}U~UVW~W}X}X}W~WWWX~Y~X~Y~W~WZZ[~\\~Z~W~U~VWYYXWVUVWXYZY~Y~WVUSRPOROMQPUVSPNKLNSSJNUVRRVYYUQPSVXXVQNLMNPPPOOPONLKJJIIIHHHIJLNPMQTSRTUUVUSRQRNORVPLJJLJHHJIHHIIIJJJJKLLLMNJLNOPQRSUUUUVVVVVUUUTSQPNNMMMKGGHHDEKLKF@JMNONNNONNMLJHFDCBBA@??@A@?>==>?@@??>><<;;:::9888766655555555555665544444333344333220/123432101223445677765555665543100123333344457998644322223344556666665566766668889898665455544433444445664312467899:;;;;9999:866688877765457777777777788899:;;<<<<<<<===<;:9876667776678988778:=??@AA@?>>?@@@@@@@@ABCCCCBA@??>=<==?@??>>===>>??@?>=<=?BCA>:8:>BEEEEFFDA><<=>@AAAAA@ACEFFDB@@ABCDEFFEDDDEFFFEDDDDDDDjwjwkwlwlwjwiwjwjxkxkxlxmymymymymymymymynyoyqyqzpzpyoxnxlyfzezkznymxmxmyoyqyqypzoznznznznynynynymymymymxlxlxkxkxkwkwjwjwixixixhxhxgxgxfxfxfxexdxdxfxgxgxgxfxfxexdxdxdxcxdxexexdxdxdxdxdxcxcxcxdxdxdwewewfwfwfwfwfwgwixjxkxkykzkzkzlzm{m{l{k{jzjzjyjyjxkxkxjxixhwhwiwixixixhxgxgxhwhwiwiwixhxhxhxfxfxfxexewevdvdvdvevfvgvgvfwdxexhyjyixixixiyiykzjzlznznzlylylxkxkxjxixjxjwjwjwjwiwhwgwgwfwewdwdwfwhvjwkwkxjyjyizizh{f{ezezgzhzfzgzkzlzm{m{m{mzlzkzjziyhyhzhzgzgzfyfyfyeyeyeyeydycycycydydzdzdzdycxdydzezezczbzbzbzbzczczczczczbybybyayaybybzczczczbzbzbzazaz`z`zazazazazazazaz`z`z_z_z`z`z`z`zaz`zazbzbzbzazbzbzdzfzhzjzlzn{n{m{l{l{k{k{jzizhzg{g{f{f{d{c{b{b{c{czczczczczbzaz`z`z`z`z`z`z_{_{_{_{_|_|_|_|`{`{`{a{a{a{a{a{a{a{a|a|a|a|a{`{`{`{a|`}\\}\\}]}^}`}a}a|`|`|`}`}_}\\}Y}W}U}T~UUVWW~X~W~W~WWV~X~Y~Y~Y~V~VYZ[~\\~Z~X~V~W~XYYXWVUVWXX~X~X~WUSSTSSQOOQSVXWVTPMMNSQMQXXUVWZYUQQTVXWTPLKLMNNNMMNNMKJJIIIIHHIJJLOPORSRSTUUTSQOOLLMMPNKIJKJIHIIIIIJJKJJJJKKLLIHIKLMNOQRSSSSTTTTSSSRPONLLKKKIFEFFDEIJLEAJMNNOONNMMLKIGECBAA@@?>???>=<<<=>>>==<;;:99988777655544444444456776554444333344433332012232111233344456765444455554321012333445444589865443223333445666776666778888766889766544444433344555678632235789889::::::::97656777776656899888877788999:;<<=====<<==>>=<:876667776778998789;=?@ABBBA@?@@AAAAAA@AABCCCBBA@??>==<=>??>>>>>>??@@??><=?BCA?<::>BDDEFFGEB?<<>>@ABBAA@@BEGGFCA@ACDEEFFFEEEGGHHGFDDDDDDiwjwkwmwlwjwjwkwkxkxlxmxmymymylylylylylymynyoyoyoyoxoxmyjzf{i{mzmylxmxnypyqzrzqzqzpzozozoyoyoynymymynynymxmxlxkxlwkwkwjxjxjxixixixgxfxfxgxgxfxdxdxfxgxgxgxfxfxexexexdxdxexexexexdxdycycycycxcxcxcycxdxdxewewewewfwgxhxixjxkykzkylymzmzm{l{kziziziyhxixixjxixhwhwhwixixixixhxgxgxhwiwiwjxixixixhxfxfxfxcxexfwewdwdwfvgvhvhwfwdxdyhyjyiyhxhxhyizjzkzlznzmzlymylxlxkxjxjxkxkwkwkwkwkwjxixhxgxfxexewfwgvivjvjwjxjyjyizi{g{f{gzhzhzgzizlzm{m{o{o{n{m{lzkzjzizhzhzgzgzfyfyfyfyfyfyfyeydycydyeyezezeyexdxeyezezd{c{b{b{bzczczczczczczbybyayaz`zazbzczczczbzbzazaz`z_z`z`zazazazbzbzbzazaz`zazazaz`z`z`zazbzaz`z`z`{a{a{c{e{g{j{k{m{m{l{k{k{j{i{h{gzfzf{e{e{d{c{b{a{b{czczczbzbzbzazaz`z`z`z_z_z_z_z_z`{`{`|`|`|`{a{a{a{b{b{b{b{b{b{b{c|b|b|b|b|b{b{b|a|`}^}^}`|a|c|c|c|b{b|b}b}a}^}Y}W}U}U~VVWXW~W~W~WWWW~X~X~Z~Z~U~TWXZ~[~Z~Y~X~X~X~Y~YXWVUVWWWW~W~VTTTUUUSQQSUXYXWVTQOQUPPU[ZYYZ[YURSUVWURMJJKLMMMLMMLKJIIIIIIHIIJLNOPQRSSSTSSRQOMKHHIKMLJJKLKJIJJKKKKKKKKJJJLLKFHHIJKLMNOPPPPPQQQQQONMLLKIHHGECCDDCDFGHECJLMNNNMLLKJIGECBA@@@?>>>>>=<;;;;<<<<;:99988887766544333333333456777655444333334443342111232211233334445654322344544332112344444433468875544333433345667777667778888766788765444333333445556688754345788778899:::;;<87456666666579::9999888999::;<========<=>??>=;9866789999899:989:;=?@ABDDCBAAABBBCCBAAAABCBBBBAAA@?>=>>?????>>??@@A@?>=>@BBA?<::=@CDDFGHGD@=<=?ABCCBA@@CEHIGDA@BDEFFFGGFFGHIJJIHFDDDDEjwjwkwlwkwkwlwlwlxlxmxnxnxmylylykykykykykylymynynynxmxjyhzi{mznzlykxmypxqyqzqzrzqzpzpzpzpyoynymymynynynymymxlxlwkwkwkwkxkxjxjxjxixgxfxfxgxgxexdxdxfxhxhxgxfxfxexexexexexfxfxfxexexdycyczczcycycycycycxdxdwdwdwewfxfxgxhyiyizjzjylylzmzlzkzjzhyhyhyhxixixixhwhwgwgwhxixixixhxgxgxhxixixixhyiyiyhyfyfyeycxfxfxfxexexgwhwiwiwfwdxdyhyiyhygxgyfygzjzlzlzmzlylymxmxlxkxjxkxlxlxlxlxlxlxkyjyhygygxfxfwgwhvivjvjwjwjxkyjzizg{gzhzizhzhzkzm{n{n{p|p|o|n|m{l{kzizhzgzgzfyfyfyfyfyfyfyfyeydyeyfyfzfzfyeyexeyfzfze{c{b{b{c{czczczczczczczbzazaz`z`zazbzczczczbzbzazaz`z_z`z`zazbzbzczczczczbzczczczbzbzazazazazaz`z_{_{`{a{b{d{f{h{j{k{k{k{j{i{h{g{f{ezdzc{c{c{c{b{b{a{bzczczczbzbzbzazaz`z`z`z_z_z_z_z_{_{`{`|`|`{`{a{a{a{b{b{b{b{b{b{c|c|b|c|b|b|b{b|b|a|a}_}_}a}b}d|d|c|b|c|d}c}a}]}Z}W}W~W~XYYYYX~X~XXXX~Y~Y~[~Z~U~SUWY~Z~Z~Y~X~X~Y~Y~Y~XWWVVWXWWVUUUVVWWVTTUWYY~Y~XXWVSTVRSW\\\\[[\\\\YVTTUUUROLJJKKLLLLMMLKJIIIIIIIIJKLNOPQQRRRRRQPOMJHEIJKLLKKLMLLKKLMMLMLLLMLLLLLKFGGHIJKLMMLLLLLLMMMLKJIHHGGEECBABBBABBBDEDHJLLLLKJIHHGECA@????>>>==<<;::::9:;::9888777766654332222222223567776654443333344333332223321112333333345443212334443321233444554434699865543334433456778877678878887666665654444433444455567887654568877556789:;;<=:855555666568:;;;;;:9999::;;<<=>>>>?>=<=>@@?><:877899:::9:::::;<=>?@ABDDCCCCCBCCCCCBAAAABBBBBAAAA@?>>>???>?>>?@@AA@@?=>@ABA?=;<>@CCDEGIHD@==>?BCCDBBA@BFJJHFBABDFFFGHHHHIJKLLKIGEEEEEjxjwkwkwjwkwmwmxmxlxlxmxmylykxkxjxjxjxixixjykxlwmxlykyizh{j{lzlykxkxnypyrzrzrzrzqzpzpzpzoyoynymymynynymylylxlxlwkxkxkxkxkxjxjxjxhxgxgxhxgxfxdxdyfygyhyhxhxgxfxfxfxfxfxfxfxfxfxfxexdycybzbzczdydycxcxcxcxcwcwdwdwexexfxfxgyhyizjykylylzjziziyhygxhxhxixixixhxgxfwgwgxhxixhxhxgxgxhyhxgxgygygyiygyfyeydycyeyfyexexfxgxgxiwhwfxdxdyhyhygyfxfxeygyizkzlzkyjykxmxlwkxkxlymymymynynynymylykyiyhygxgxhwhwhvivjvjwjwkxkykyjzizh{i{j{i{j{l{n{o{o|q|q|p|o|n|l{j{i{g{fzezfyeyeyezezfzfyeydydydzezfzfyeyeyexeyezdzb{a{a{b{c{dzdzdzdzczczczbzazaz`zaza{b{czczczczbzbzaz`z`z`zazbzczczdzdzdzdzdzezezezdzczczczbzbzazaz_{_{_{`{a{b{c{d{f{g{g{f{g{f{e{d{c{bzbzbzb{b{b{b{b{bzczczczczczczbzbzaz`z`z`z_z_z_z_z_{_{_{_{_{`{`{`{a{a{a{b{b{b{b{b|b|c|b|b|a|`|`|`|`}`}_}^~_~`~a}b}b}a}a}b}c}b}_}\\}Y}X}X~Z~[~\\\\[[Z~Z~ZZZ~Z~[~[~[~Z~V~UVWX~Z~Y~Y~Y~Y~Y~Y~Y~Y~X~Y~X~XYZYWWVVWYYYXVVWW~Y~Y~Y~Y~ZYYXVWXTTW\\[[[\\\\YVTSSRQOMLKKLLLLLMNOMLKJJJJJKKJJKLLNNNOOPPPOONNLIHGJKKMMMLMONONMOQONPNMNONMMMMLHHIJIJKLLKJIGGHHHHHHFEEDDCCBBAA@AAAAA@=ADDFGIIIHHGFEEDBA?>==>>===<<;::999989999888776665454433222222222356788765444444444433333334432101233333334444321123344333233344455443359:8665433344434567889876789888887655434445654454445556778776656788754455689:;==<:76555666668:<=<<<<;;;;;<<<<=>>>>??>=<=>@AA?=;98789:;;;;;;;<<=>?@@@ABDDEEDDDCCCDDCCBAAAAAAABBAAAA@???>??>?>?@ABBBAA@?>@ABA@=<=?ADDEFGJIEA>>?@BCDDCB@@BGKMJFCBCDFFFGHIIJJLLMNMJHGFFFFjxjxkwjwjwkwnxmylxlxlxlxlxkxjxjxiwiwiwhwhxhxiwjwkxkyjzizh{jzlylxkwkxmyoypyqyqzqzqzpzpzozoynymymymymymymxlxlxlxlwkxkxkxkxkxkxjxixgxgxgxhxgxexdxfygyiyiyixhxhxgxgxgxgxgxgxfxfxfxfxeydyczczbzcydycxcxbxcxcxcwcwdwdwdxexexfxgxgxhyjykylykzjziyhygxhxhxiwhwiwiwhwgwgxgxgxgxhxgxgxgxgygyfxfyeyeyfygygyeydycybyeyexdxdxfxfxgxhwgwfxdxeyhyhygyfxfxfygyizkzkzjyixkxkxjxixlymznzozoznznznzmzlymymykyhxhxhwhwiwiwjwjxkxkykzkzk{j{i{j{j{j{k{n{o{o{p|q|q|q|p|n|l{j{g{ezdzdzdydydydzdzezeydydydydydzezeydydydxeydzcza{`{a{b{c{dzdzdzczczczczbzaz`z`zaza{a{bzbzbzbzbzaz`z`z`zazbzcycydydydydyeyezfzfzgzfzezdzczczczbzaza{`{`{`{`{`{a{c{d{d{d{d{g{f{a{`{`{a{azazaza{b{c{c{czczczdzdzczczczbzbzaz`z`z_z_z_z_z^{^{^{_{_{_{`{`{`{`{_{_{_{_{_{_|`|`|`{`}_}_}_}_}_|^}]~]~]~^~^}^}^}^}^}_}`}`}]}Z}X}X~Y~[~\\~]]~\\~\\~\\~[}Z~Z~Z}[}\\}\\}\\}[~V~VWX~X~Y~Z~Y~Z~Z~Z}Z~Z~Z~Y~Y~Z~Z[ZYXWWWXYYZXWWYYYYXYXXYYXYWSUWYYYZ[[XUSSQPLLLLLLMMMLMNPPNMLKKJJJKKKKKKLMMMNNONNMMMLKIGHJLLNNNOPPQPPOQSPNRPNNPONNNNLHJJJJKLMLKIGEDDDDDDCBAAAABBBBA@@@AABA@ABDDDDEFFEDCCBBA@?====>====<<:9988888999887777666544443332222212235678876554444333433333234554210123333333444442101233444334443445554214897665433344544445789877788877888765433445665555555667787666657788653234578::<==<:87666667679<==<====<<===>>>>>??@@>=<<>?@A@><:989:;<<<<;<<<=>?@@A@ABDEFFEEEDCCDDDCCBAAAAAAABAAAAA@???>>>>??@ABCCBAA??@@AA@?=>ABDDEGIKJHC@?@ACDEDCA??CGLMKGDCDDFFGHIIJJKLMNNMKIGGFFFjxjxjwiwjwlwnxmxlxkxkykykxkxjxjxiwiwhwhwgwhwiwiwixiyhzizjzkzkyjxjwkwmynynyoyqyqzpzoznznzmymymzmzmzmymylxlxlwlxkxlxkxkxkxkxkxjxixhxgxgxgxfxexfygyhyiyiyixixhxhxhxhxhxgxgxgxfxfxfyeydycyczczcycycxcxcxcxcxdxdxdxdxdxdxexexgxgxhxixjxkyjyiyhxhxhxixixixixixhxgwfwfwfxfxfygyfyfyfyfyeydycycydydxexexdxcxbxbxcxdxcxcxexexfxgwgwfxexeyhyiyhygxgxgygyhyjyjyiyhxjxiyhyiykymznznzozozozoznzmyoynykyhxixjwjwjxixjxjxkykzlzl{l|k|j{k{k{k{l{m{n{p{p|p|p|p|o|m{k{i{f{czbzbzbycybybzczdzdycycycycycyczczcycycycybzaz`{`{a{b{bzczczczczbzbzbzbza{a{a{b{b{bzbzbzbzbzaz`z`z`z`zazczcycydydyeyeyeyfzgzhzhzhzfzezdzdzdzczczb{b{az`z_z_z`zazazaza{a{c{b{_{_{`{a{azazbzbzc{d{dze{e{ezdzdzdzd{c{c{b{az`z`z_z_z^z^z^{^{^{^{^{^{_{_{_{_{^{^{^{^{^{^|^}^}^|^}]}\\}\\}\\}\\|[}Z~Z~[~[}[}[}[}[|\\}]~]~]~[}Y}X}Y~Y}\\}^~^~^~^~^~]}\\}[}[}[}\\}]}]}\\}[~Y~XYYYZ~[~Z~[~[}[}[}[~[~Z~[~[~\\~\\[ZY~X~X~Y~YZYYXXYZ[ZYYYWWYZYYVTUUVUWWYXVTRQPNJILMNOONMLNPRSQPNMLLLLMLLKKKKKKJKKKLLLKKKJHHKJLMOOOPQQSSSQSUSPUSPPRSQQPNMJLLLKLMMMKIFCBBBBAAA@@@@@ABCCBBBBBBCBBBCDDCCCDDBA@@@??>=<<<<==<==<<:998888788887776655543333333322212233467898655544333333334433345421001233333344444210012345444444444445310389876543224465433468987789876677887654445566666666666677766566678865312467799:<==;:8777778879;===>??>==>????????@@@>==<=?@A@><;:9:;<<<<<<<=>>?@ABBBBCDEFGGFFFEDDDDDCCBBAA@@@AAAAAA@@@@?>>?@AABCCCCCBAA@ABA@??ACEEFFGIKKHC@@ABCDEDCA@@CHNOLHEDEEGGFHJJKLLMNOPOMKHGGGGjxjxkwjwjwlxoxnxlxjxiyjyjxjxixiwiwhwhwhwgwhxhxixhygyhzjykylykxjwjwjxkylymyozpzqzoznzmzmylylzlzmzmzmymylxlxlwkxkxkxkxkxkxkxjxjxixhxgxfxfxfxgyhyiyiyiyhyiyiyixixixixixhxgxgygygyfyeydycycycycycxbxcxdxdxdxdxdxdxdxdxdxdxexgxgxhxixjxjxixhxgxhxixixiyiyhygxfxfwewexeyeyezezfyeyeydycybybybxbxcxdxdxcxcxaxaxcxcxbxbxdxexfwfwfwfxexfyhyhyhyhxhxhygyhyiyiyhxhxixhyhyiykymzmzmznznznznznzoyoymyjyiykxlxkxjxjykykylzmzm{m|m|l|l{l{l{k{l{n|o{p|q|q|q|o|m{l{j{g{ezbzazazayayazbzczdzdzcybyayayayayazazaybybyay`z`za{bzbzbzczczczbzbzbzazaza{a{b{b{b{azbzbzbzaz`z_z_z`z`zazbzcycycycycyeyfyhzizizizhzgzfzfzezezdzdzc{c{bz`z_z`zazazazaz`{_{`{_{]{_{`{a{azbzczczdzezfzf{f{f{e{e{e{e{d{c{b{az`z`z_z_z^z^{^{^{^z^z^z^z^z^z^z^z]{]{]{]{]|]|]|\\}\\}[}[}Z}Z}Z}Z|Y|Y}Y}Y}Y}X|X|X|X|Y}[}Z~Z}Y}X~X~Y}Z}\\}^~_}^}^}^}^}]|]}\\}]|]|^|^}]}\\}Z}Y~YZ[[~[~[~[~[~[}\\}\\}\\~[~\\~\\~\\~\\[~Z~Y~X~XXYXWXYYZ[\\[[ZZYYZYXXUUUUTSTTVUTRRRPNJJNOQQPPONOQSTSRPOMMLLMNMLLKJJJIJJJKKJJJJIIGLKLNPPPQRRTTURTUVSUUSRTTSSQPNLNNMMMNNMLIEBAAAA@@@???@ABCDEDCCCCCDCCCDDDCBBBB@>>>>>>=<;;<<<;:;<<;:98877788777766555543333333333222223335788765454433333333444434543110123333333444431001234555553455443420048987554221457653246898779:975567788765555566666677766677766566678865301487778:<=>=;:988888889;<=>?AA@>>@AAAAA@@@@@@?>=<=>@@@?=<:9:;<<=====>>??@ABBBBCDEFHHGGGFEEEEEDCBBBA@?>@AABBA@@@A@???@ABBCCCDDDCBBBAA@@@BDEFFFGIKKIDAABCDDDDCA@ADIOPNHEEFGHHGGIKMMNOPQQPNLJHGGGixjxkwjwixlxnxkxjxgxhxixixixixhwhwgwhwhwgwhxhxhxgxhyiyjykxjxixiwjwjwjxlxmyozp{p{n{mzmylylylzlzmzmymymxlxlxkxkxkxkxkxjwjwjwjwixhxhxgxgxfxgyiyjykyjyiyhyiyjyjyjyjyjyjyiyhyhyhyfyeydydycybybybxbxbxcxdxdxdxcxdxcxcxcxcxcxexgxgxhxixixixhxhxhxhxixiyiyhygyfxexdxdxcycydydydzdzdzdyczbyayayaxaxbxbxcwcwbwaxaxbxbxaxaxcydxfxexexfxfxfxgxhxhxiyiyiyixhxhxhxhxhwhxgyhyiyjzkzkzkzlzlzmzmynyoyoylyiyjykxlxkxjxjykylzlzmzm{m|n|n|n{m{m{lzl{n|o|p|q|q|o|m{l{jzhzfzczbzazazazazazbzczdzdzcybyay`y`y`y`z`z`zayay`y`y`yazbybybybybzbzbzazazazazazb{b{c{bzazaybyazaz`z_z_z`zazbzb{b{b{bzbzcyeygyhzizjzjzizhzgzfzfzfzfzezdzc{bzaz`zazbzbzbzazaz`{`{^{]{`{a{bzczdzdzezfzfzgzg{g{f{f{f{f{f{e{d{c{bzaz`z_z_z^{]{]{]{]z]z]z]z]z]z]z]z]{^{^{]|]|]|]|\\|[}Z}Z}Y}Y}Y}X|X|X}Y}Y}X}W|V|V|W}X}Y}X}X}X~X~W~X}Y}[}\\}]}]}\\}\\|\\|\\|]|]|\\|]|^}^}]}\\}Z}Y~Z[[~Z~Z~Z~Z~Z~Z~[}[}[}[}[}[~[~[~Z~Y~W~WUVXVTVXYY[]]\\[[Z[\\ZXVUWVVSRRSSRQQRSROLMPRSSRQQPOPRSSRRPOMLMNONMLKKJIIJJJJJIIIIIHFMLLNPPQQRRTUVSTUVTUVTSUUSRRQOOPOMMMNNMLIEA@@@@A@@@@ABBCDEFEDCCCDDDCCDDCCBAA@?=<<<==<;;;;;:989:;:99887767777776655444333333333333333333467874455532234443343443455421112333333333443210023445665444443342//38976543222568753246898779:975556788887655566777777766677777666667976411276778:<=?>=<;::9999::;=>>@BBB@?BCBBBBBAAAAA@>=<<=>?@?><;:;;<=>>>>>>??@ABBBBCDDEFHHHHGGFEEEEEDCBBA@>=>?@BBAA@AAAA@@@ABCCCDEEDCBBBB@@@@CDFFFGGIJKIEAABCDEDDCAABEJOPOJFFGHIHGHIKMNOPQRRRPNKJHHHixjxkwjxjxmxmxixhxfxhxhxixixhxhxgxgxgxhxhxgxhxhxhxixjxjxjwiwiwhwiviwkxlxnyoyozmzlzlylxlxkykylymymymymxlxlxkxkxkxjwjwjwjwiwiwiwhwhwhwgxhxiykylykyjyiyiyjyjykxkxkxkxkxjxixixhyfyeydycybybybybxaxbxcwcwewewdxcwcxcxcxcxdxexgxgxixixixixhxhxhxhxhyhyhygyfyexdxcxcxbxcycydydydzcycybyay`y`yaxaxaxbwcwbwbwawaxbxaxayaybxdxexdxdxexfxfwgwhwixjxjyjyixiwiwhwgwgwgxgyhzizizjzkzkzkzkzlylymynymykykylylxkxkxkyjykylzmznzn{n|n|n|o|n{mzlzl{n|o}o}o}o|m{k{jzhzgzezbzaz`zazbzbzbzczdzdzdzcyay`y_y_y`y`z`z`z`z`z`z`yayaybybycycyczczbzbzbzazazbzczczczbybybybzbzaz`z_z`zazazb{a{a{a{`z`zazdzf{h{izizizhzhzgzgzgzgzfzfzezc{bzazazbzczcybybybzaz`z]z]{`{`zbzdzdzezezfzgzg{g{g{g{g{g{g{f{e{d{c{bzaz`z`z_{^{^{^{^{]{]{]z]z]z]z]z\\z\\{]{]|\\|\\|\\|\\|[|Z|Z}Z}Y}Y}X}X}X}Y|Z}Z}Z}X|W|W}X}X}W}W}W}X~X~W~X}Y}Z}[}\\}[}[}[|[}[}[~[~[}\\|]}]}\\}Y}W}W~X~Y~Y~Y~Y~Y~Y~Y~Y~Z}Z}Z}Y}Y}Y}Z}Y~X~W~VVTVVURTWWY\\]^^\\[[[\\ZYVVVUUSSRRQQQRSSSQNOSUUUTRQONNPQRRRQNLKLNOONLKJJJKKKKJJIHHHHGGMMMNNOQQRQTUWSUTVUTUUUTTSRRQQPPPNMMMNMLIEA@@@@A@@@ABCDDEFFEEDCCDDDCCCDCBAA@?=<;;;<<<;;;;:98889::99887667777766554433332233333333333233345553234532245543343344556532112333333333443210012345665445554332..38976553223578753246898779;:75556789998766667777777766677886654456887410256789:<>@??><;::::;:<<>??ACCCAACDCCCCCBAABBA?>=<<=??@>=<;;<=>???????@@ABCCBCDDEFGHHHHGFEDDDDDCCBB@><=?@BBBBABBBAAABCDDDDEDDDCCCCB@?@BEEFGGGHIJJIFBABDEEEDDBBDHKPPOLHGHHIHGGIKNPQRSSSSQOLJIIIixjxkxjxjxnxmxgxfxfxgxhxhxhxgxgxfxfxgxgxhxhxhxhxiwiwjwjwiwiwhwgwgviwkxlxnyoynzlzlylxlxlxkykykylxlxlxlymxlxkwjwjwjwjwkxjxjxixhwhwhwhwixjykylylykyjyjyiyjykykxlxlxkxkxkxjxixhyfyeydycybybyaxaxaxbxcwcwexexexdxdxdxdyexexfxgxhxhxixixhxhxhwhxhyhzhzgygyeydxcxbybybxbxbxcxcycycybzayay`y`yayayaxbwcwbwaxaxaxaxax`y`ybxcxdxdxdxexexfwgwhwiwjxkykxjxjwiwiwhwhxgygzhziziziyjyjyjyjyjxkxmxmymykyjykykykxkykykzlzl{m{n{o|o}o|o|o|n|m{l{m{o|o|o}n}m|k{j{hzgzfzdzbzaz`zazbzczczdzdzdzdzcyay`y_y_y`y`z`z`z`z`z`zayayaybycycycyczczbzbzazazbzbzczczdycybyczczczbzaz`z`zazaza{`|_|^|^{^{`zcze{g{hzizizhzhzhzhzhzhzhzgzfzd{bzbzczczcycycycyczbz`z^z^z`z`zbzdzezezfzgzg{g{g{g{g{g{g{f{f{e{d{c{b{a{a{`{_{_{_{_{^{^{\\{\\{\\z\\z\\z\\z\\z]{]{]|]|]|\\|\\|\\|[|Z|Z}Z}Z}Y}Y|X|Y}Z}Z}Z}X|W}V~W~W~W}V}W}X~W~W~W~X}Y}Y}Y}Y}Y|Y|Y}Y~Y~Y~Y}[}[~[~Z~X}W}W}X~X~Y~X~V~W~W~W~XX~X}X}W~V~V~V~U~USSSRUURPRUUW\\]_^][[\\\\ZYXWVUTTTSSRRSSUUUSPRVVVUTRPONMNNOPQPNLKLOOPNLKJJKMNNLKJIIIIIHILOMMMNQRRPRTVSTSSRRSUVUTRPPPQRQPMLKLMMKHDA@?@@@AAABBBCDEFFEEDCCCDCBBBBAA@?>=<::::;;;;:::9888789988877665677765554322222223322222343333334553235653234433343333467654323443333333444321012345554444555442-.2897655433477886434679988:;97655678:::987777788877776667788775556788864013578:;=?AA@@>=<;;<<<=>?@ABDDCAACEDDDCCBBBCDCA?=<;<=??>=<<<=>?@AA@@@AAAABCCCCDDEFGHIIHGFFEDDDDDCCB@?<=?ACCBBBCCCCBCDEEEEEEDDDCCCCBBABBEGGHHHIJJJIFDBCEFFFEDCCEJMQQOMJJJJJIGGJKOQRRSSTTRPMLJJJixjxjxixixlxixexcxexfxgxgxfxfxfxfxfxfwgwhwhwhwiwiwjwjwiwhwhwgvgvgwixkymynyoymylykylxlylykykykxkxkylymymxlxkwjwjwjwkxkxjxjxjxiwiwiwjwkxlymylylykykyjyjykykylxlxlxlxlxkxkxiyhygyeydycybybxaxaxaxbycxcxdxexexexexexeyfyfygyhxhxhxixhxhxhxhxhyhzgzgzgzfydycxbxaybybxbwbwcwcwcycyczbybyayayayayaybxbxbxaxaxaxay`y`y`xaxcxdxcxcxcxdxewfwgwiwjxjyjxjxjwiwiwiwixhyhzhziziziyiyiyiyixixixkxlylyjyjykykykykykylzmzm{m{m|n|o}o}o|o|n|m{l{m{o|o|n|l|k{j{h{gzfzezczbzazazbzbzdzdzezezezezcyay`y`y`yayazazazaz`zazayayaybycycydydzdzczb{a{azbzczdzdyeydycydzdzd{c{b{bzbzbzaza{`|_|^|^{^{`zczd{f{gzhzhzhzhzizizizhzhzgzezczczdzdzdydydydydydyczaz_zaz`zazdzdzdzezezfzf{f{f{f{gzgzfzfzezezdzc{c{b{a{a{a{a{`{`{_{_{]{[{[{\\{\\{\\{\\{\\{]{]|]|]|\\|]|\\|\\|[|[}[}[}Z|Z|Z|Z|Z|Z|Z}X}W~V~WWW~W~V}W~W~W~W~W}X}X}X}X}X|X}X~WX~Y~Y~Z~Z~Y~X~W}V}V}W}X~W~V~U~U~U~UVWV~V~U~T~T~T~SRRRRSVTQPRRQRY]^_^\\[[[ZYWWVVUUUTTTTTUVWWVSTWVVTRQONMLLMNOPOMMLMPPQOMLJJLNOONMLKKKKKJKMQNMLNRRROPRTRRRPNOPSUTSPMMMPQPNKJIJKKKHD@???@@AAABBBBCDEDEEDCCBCBA@@@??>=<<:999:::::9998766667788776556677655543222222222222222344333334543335664224433344333456655433444333333444432101234444334456542.-1786655433479997545779:99:;98656689:;;:98888899887667777788876666789986202479;<>@BAAA?>>=<=>>?@ABBCEECAACEEEEDCBBCDEDB@=<;:<>>>=<<=>?@ABBAAAAAABCBBCCCCDEFGHHHGFFEEDDDDDCC@?=<?ACCCCCCDDDCDEFFFEFEEEDDCCCCBACDGHHHIJKKLJIGEDEFGGFFEDEGKNRRPMKKMLLJHGJKOQSSTTUUSQNMKKKixixhxgxhxhxdxcxcxcxcxdxexexexexexfxfwgwhwhwhwiwjwjwjwiwhvgvgvfwhxjxlynznymylxlxkxlxlylykyjyjxkxkylxmxmxlxkwkvkwkwkxkxkykykxkwkwkwlwmxmymymylylykykykykylylxlxlxlylykykyiyhzgzfzeycybybxaxaxbxbxbxcycydyeyeyfxfxfzgygyhyhyhxhxhxhygygygygygzgzfzfzfzdycxcybybybxbwbwcwcxdydzczcybybyayayayaybxbybyaybyayay`y`y`yaxbxcxbxbybybycxexexgxhxiyiyiyixixixixixiyizizizizjyjyjxixixhxhxixjyjyiyiyjyjykykyjzkzlzm{m{l|m|n|n|n|n|m|l{l{l{m{m{k{j{i{h{fzezezczbzaz`zazbzczdzezfzfzfzdycybyay`yaybybzbzbzbzazaz`y`y`yaybycydydzczbzazazazbzczczdyeyeyeyezfzf{e{d{dzdzdzcza{`{`|_|_{`zazczdzezfzgzgzgzhzizizizhzgzfzdzczczdzezeyeydxdxdxdyczbzazbzazazdzdzdzdzdzdzd{d{d{e{fzfzfzezezdzd{c{c{b{c{c{b{b{b{b{a{a{_{]{\\{\\{\\{\\{\\{[{\\{]|]|]|]|]|]{]{]|]|\\|\\|[|[|[|[{[|[|[}Y}W~WXY~Y~X~X}X~X~XX~W~W~W}X}X}X}Y}Y~X~Y~Y~Z~Z~Y~X~W~W}V}V}W~X~W~W~V~V~V~VVVVUUU~T~S~S~RQRS~U~W~UTSRQPRX]^`_[ZZ[ZYWWWWVVVUUUUVWWXXWTTWVUTQPONNMNNOOPONMMNPPPOMLKKMNPPPNNNMMNMMLPRONKOTSRNNPSQQOLKLMPRRQNLKKNPMLIHHIJIJGC?>??@@@AAAAAABBCBBCCAA@A@>>==<<;;;:999999:999877555445677765555556655543222222222222222343333334444434665313433454433456665444554333223344442111123344444456663/-057565644458:;:8655689:::;;98777789::;;:9889999887667788888877777899;:951247:;=?ABBBBBA?=<=>?ABCCCDEEDBBDFFFEDCBBCDEEB@><;:;=>>=<<=>?@ACBAABBBBCCBBBCDDDEFFFFFGFFEEDDDDDDC?>==@BDEEEDDEEEEFGHHHHGGFFEEEEEDDCDFIJJJJKLMLKIGFEFGHHGFEFFHMPSRQOMMNNMKIHJKPRTTUUVVTRONLLLhxhxfxexfxexaycycybxbxcxexexdxexexfwgwgwhwiwiwiwjwjwiwhwgvgvfwgxixkylzmymymxlwlwkxkykzkykyjyjxkxlxmxmxlxlxlwlwlxlxlxlylylylxlxlxmxnxnxnymymymylylylzlylylylylxlxlylylykyiyhzfzezeydycxbxbxbxcxcxcycybycydyexfxgygygyhzhzhzhyhygygygyfyfyfzfzfzfzgzfzezcycxbxcybycxcxcxcydydzdzdzcybyay`yazaybybybybyayay`z`y`yayaxbxbxbyayaybybxcxdxexfygxgygyhxhxixixixiyiyiyiyiyiyjxixixhxhyhyhyhyhyiyiyiyiyjyjzjzj{j{k{k{k{l|l|l|m|m|l|l{k{k{l{l{j{izhzfzezezdzbzaz`z`zazbzczezfzgzgzfzdycyayay`xaybycycyczbzaz`z`y_y_yaybybycydybzaz`z`z`zazczczdyeyeyeyfzgzg{f{f{ezezezdza{`{`{a{a{`zaycyczdzdzezfzgzgzhzizhzhzgzezczczdyeyeyfyexdxdxdxdxdybyaybyaybycycycyczbzbzb{c{c{czdzezezezdzdzc{c{c{c{c{d{c{c{c{b{b{a{`{^{]{\\{]{]{\\{\\{\\{\\{]|]|]|]{]{^{]|]|]|]|\\|\\|\\{\\{[{[|[|Z}X}X~Y~Y~Y~Y~Y}Y~Y~X~Y~X~X~X~X~Y~Y}Z}Y}Z~Z}Z~[~[}Z}Y}X}W}V}W}X}X~X~X~X~W~W~WWWVVVU~U~T~S~R~R~S~T~U}W~VUUSQQRX\\]_^ZYZZYZYXYWWVVUUUVWWXXWVTTUTSRQPOOPOOOOPPOONNNOPPNMMKLNMOPPPPPOOPOONRTPMKQUTRMNNQPONLHFHLOQONJIJMNLKGFGHHHIKE?=>??@@AAAAAAAAA@ABA@???><;;;;;::::988888988876654323455665555545555554332222222222222233333333444444456531233344433446766554555543222223333211112333454445665310134556655558;;:965469:;;<<;:9988889::<<;:99:998988766778888888889:;;;;:612379=?ABCCDCBA@><=>@ACDDDEEEDCCEFFFEDCBBBDEEC@>;9:;<>>>=<=?@@ACCBBBBBCCCBABCCDDDDEEEEEDDDDDDDDDDC@?<=@DGGGEEEEFFFHHIJIIIHHHGFFEEEEDEGJKKJKLMMMKIGFFGGIIHHGGHJOPTSQPNNOPOLJHJKPSUUVWWWVSPOMMMgxgyfydyeycybybybyaxbxcxdxdxdxdxexexgxhwiwiwjwiwiwiwiwhvgvgvgwixkymynzmymxlxlwkwkxkxkykyjyjxkxlxlxmxmxlxlxlxmxmxmxlxlxkxkxlxmxnxoxoxoynymzmzlzlzlzl{lzlzmymymymymymylykyiygzfzeydydydxcxbxcxcxdxdycybycydyexgygyhyhzhzhzhyhygygygygyfyfyfzfzfzfzgzgzezcycxcxcxcxcxcxdyezezdzdzdzcybyayayazbybybybybyayayaz`z`yayayaxaybyayayaybxbxcxdxeyfyfyfyfxhxhxhxiyiyiyiyiyiyiyixixhxhxhygygygygygyhyhyhyizizh{i|i{h{h{h{h{i|j|k{k{k{k{j{j{j{j{hzfzezdzdzdzbzaz`z`zazbzczdzfzgzgzgzfzdybxax`xaxbxcydydycybzaz`z_y_y_y`yaybycycyaz`z_z_z`zazbzczcydyeyfygzhzh{h{gzgzgzgzezc{b{b{d{d{czcycyczczczdzdzezezfzgzfzfzezdzczczdyeyeyeyexdxcwdxdxdycybybybycycycycybzaza{a{b{b{bzczdzdzdzdzczc{c{d{d{e{e{e{e{d{d{c{czb{`{^{]{]{]{]{]z]z]{^|^|^|^{_{_{^|^|^|]|]|]|]|\\{\\|\\|\\}[}Z}Y~Z~Z}Z~Z}Z}Z~[~Z~Y~Y~Y~Y~Y~Z~[}[}[}\\}]}^}^}]}\\}[}Z}Y}X}X}Y}Z}Z}Z~Z~Z}Y~XXXXXXW~W~V~U~T~T}U}V}V}W~WWWURRSX[[_]YXYZZ[YXYXWWWWVVVWWWWVUTTSSRQPPPOPQRQQQQPPONNOOONMMLLMMOOPRTSRQQQQOSUROLRVURNMNPNNLIGFGJMPNMIGHJLKIEEFGGFGIF@<>????@@@@@@@??>>??==<<<:888899999878888887765443222344555544334544443333222222333222223322233345554335653323444333456766554556654332222233211123444344345665420124566766669<=<975579:;<==<;;;:9888::<<;;::;:9998877767888888889:;;<===862368<?ABCDDDCB@>==>@BDEEEEEEDCCEFGFEDCBBBCDDCA>;9::<>>>==>@BBBBCCBBBBCBBBABCCCDCBBAABCBBCCDEEDDDC@?=>AEHHHGFFFGGGIIJKKKKKJJIHGGGFEEFHKMMLLMOONLJHGGHIIIIHHIJLPRTTRQOOPQPNKHJKPTVVWWXXWTQPNNNfxfyeydycybybyayayaybxcxdxdxdxexexfxgxhxiwiwjxixiwhwgvfvfvgwhxjxlymynymylxlxkwjwjxjxjyjyjxkxlxlwmwlwlwlwlwmxnxnynxmxmwlwlxmxnyoyoypyoynylzlzlzmzmzmzmzmznynynymymymymykyjyhzfyeydydydxdxdxdxdxdydycycydyeyfxhyhyhyhzhzhzhyhxgxhxgxgygygygzgzfzfzgzfzfycycxcxdxdxdxdxeyfyeyeydycybyaxayaybzbybybybyayayaz`z`y`y`yayayayayayayayaxbxbxcxcydydydyexfxfxhxhyiyiyiyiyiyiyixhxhxgxgyfyeyezfzfyfygyhzhzh{g|g{gzfzezdzdze{f{h{h{h{h{h{g{g{gzezdzczbzczczbzazazazbzczdzezfzgzgzgzezcybxax`xaycydyeydycybzaz`z_z_z^z`zazcydycyaz_z^z_z`zazbzbybycycyezg{i{i{i{hzhzhzhzf{c{c{d{e{e{dzdycybzczczczczdzdzezfzezdzdzczbybycydydydycxcxcxcydydycycycycybycycybybzaza{a{a{a{azbzczdzdzczczczd{e{e{fzf{f{f{ezezezdzc{a{`{_{^{^{^z^z^z_{_|_|_|_{_{_{_|^|]|]|^|]|]|]{]|]}]}\\~[~[}\\}[}[}[|[|\\}]}\\}[}Z}Z~Z~Z~[}[}[}\\}]}_}`}`}_}]|\\|[|Z|Z|Z|Z|[}[}\\~\\~\\}[~ZZZZZZ~Y}Y}X}W}W}W}W}W~X~XXYXVTTTXYZ^[WVXYZZXWYXWWWWWVVVVVVUTTSRQQPPPPPPPQQQQQQPOOOOOONNNMMMLNOQRUUSRRRRPSVSPMRUVSNMNOMKIGGFEHLNMLIGGHKJIEBBDEDEDD@>==>????>>>>>====>=<<;;:987787777777777777665433211223455544433344443323221122333333333332223334565433466432345433246776554455665433332112332113444444443456553112466788878:=>=:75468:;<>>===<;:998:;<<<;;::::999988777788888889:;<=>??:84468<@ABCDEDDB@>==?@BDEEEEEECCCDEFFEECBBABCCBA>;99:<=>>>>?ABBBBCCBBBBBBBBABCCCCBAA@@AAAACCDEEDCCCA@>>BFHIHHGGGHHIJJKLLLLLLKJIIHHGFFGILNNMMNPQPNKIHHIIJJIIHJKNQSTTRQPPQSQOLIJKPUVWXXYXXVRQOOOexdxdycybybyayayayaxbxcxdxdxexexfxgxgxhxhxiwjxixhwgwfvevfvfwhxjxlxlxmxlxkxkxjxjxjxkxkxjxkxlynynxnxlwlwlwmwnxoxoynxnxnxmxmynyoypypypyoynylzlzlzlzmzmzmzmznynynynynynymylyjyhygyfyeyexexexfxfyeyeydydzczezfzgyhyiyiyhzhzizhyhxhxgygygzgzhzhzhzgzf{gzgzgydydydydydydyeyfyfyfyeycycxbxaxaybycybybzbzbzazazaz`y`y`z`zazazazazazazayayaybxbxbybxcxcxcxeyeyfygyhyhyhyhyhyhxhxhxgxgyfyeydydzezeyeyfygzgzg{f{e{ezczbzazazazbzczdzdze{e{d{e{dzdzczczbzbzczbzazazbzczczdzezfzgzgzfzeycybyayaybycydyeycybybzaz`z_z^z^z_zazbzczbz`z^z]z^z_z`z`y`y`y`ybydzg{i{i{h{hzhzhzgzezd{d{e{f{fzezeydyczczczczczczdzezezdzczbzbzbybybycybybybybybybycydycycycyczcycycycycybzczb{b{a{azbzczczczczczczdzezezfzgzg{gzgzgzfzfze{c{b{a{`{_z_z_z_z`{`|`|`|`{_{^{^|]|]|]|^|]|]|^{^|^}]}]}\\}\\}]}]|]|\\{]{^|^|^}]}\\}\\}[}\\}\\}\\}\\|]}^}`}a}a}`}^}]}\\}[}[|[|[|\\|]~]~^~^}^~^]]]]~]}\\}[}[}Z}Z~Y~Y~YYYYYXWUUUWXY[YUSVWXWUUZXVVWWWVVVUVUTTSSRQPPPOOOOPPPPQQPPOOONNNMNNOONLMNQRUUTSRRQQSWTRNRVWTNMMMLIFEFFEGJLLLHFGGIHHD?=@AAAAA@==<======<<<<;;<<<<;;::98766777666677666555443221112223455544333454432222221233343333333222233445664334665434455432467765444556654333321122332234444555444566643234689:9989;>?>;85468:;=>>>>>=<;::9:;<<<;;;:::99:99988888888888::<=??@?;97567<?ABCDEDDCA?==?@BCEEFFEDCCCCCDDEFECBAABBA@>:789;=>>>>?ABCBBBCCBBBBBBBAABCCCBA@??@@@@BCDEEDCCCBA??BGIJIIIIIJJKKLLMMMMMMLKJJIIHGGHKNOONNOQRQOLJIIJJKKJJIKMPSTTSRQPQSUSPMJJKQUWXYYYYXWSRPPPdxcxcxbxbybybyayaybxcxdxexexfxfxfxgxgxhwhwhxixhxgwfwevdvfvfwhxjxkxlxmxlxkxjxixixjxkxlxkxlynynymxmxkwkwlwmxnxoxoynxoxnynynyoypypyoyoynymylylykzkzlzlzmzmznzoznznynynymylyjyiyhygyfyfxfxfxfyfyeydydydzdzezfzgyhyiyiyhzhziziyhyhxgygygzg{gzgzg{f{e{h{hzhydydycydydyeyeyeyfyfydybyaxaxayaybycybybzbzbzazaz`z`y`y`zaza{a{azazazazazayayayaxaxaybybybyczdzezfygygygygyhygxgxfyeyezdzczczczdzdyeyfyfzfzg{f{ezczbybyay`z`z_zazbzczczc{b{czbzbzbzbzbzbzbzbzczczczczczdzezfzgygyfyeycybyayaybycydydycybzaz`z`z_z^z]z_zazbzczaz_z^z]z^z_z_z_y_y_y_y`zb{e{g{h{h{hzhzgzfzezdzezfzgzgzfzezezdzdzdzdzcycydydydzczczbzazayaybybyayayayazazbybyczcycycydydydydydydycyczc{c{b{bzbzczczczczczczczdzezfzf{h{i{i{i{h|g{e{czbzaz`z`zaz`z`{`{a|a|`|_{^{^{]{]|\\{\\{]{]{]|^{^{^|^}]}]}]|^|^|^{^{_{_|_|_|^|]|]|]}]|]|\\|\\|]|_|a|b|b}`}_~^~]}\\}\\|\\|\\|]|^}^~_~_}`~_____~^}^}]}\\~\\~\\}[~[[ZY~YXWVUUUVWWUTSSUUUUTUXWVUVWVVVVUUTSSSRQQPOOOOOOOOOOOPOONNNMMMMNNONMMLNPQTTSRPRQPRWUTNQVWTNMLLKJGDDEDFHJJJGDDDEEEB>;=>?==>><=<:;;;;;;:::99:;;;::::9876666655556655544333322111222345555333345543222222233334444333322223444566544456544445433245666544445665544432112233234565456555567766433478:;::::<?@?<854679<=>????>=<;:::;<<<;;;;9:99:::988998778888:;;=>??@=;8668<>@BCDDDDCB@>=>?ABDDEEEDBBBBBBBDEEDBA@A@@?=:778:<>>>>?@ABAAAAABBBBBBBAABBBBA@@??@@@@BCDDDDCCCCB@@CHJKKIIIJJJKLMNNOOOOONMLKJJIHHILNPPOOPSSSQNLKJKKLLKKKL~ORTVUSQPPRTUUQNKKLQUWYYYYYYWTSQQQcxcxcxcxcycyczbzaycxdwewfxfxfxfxfxfxgxhwhwhxhxgxfxewdwdwewfwhxixjxkxkxjxjxjxixjxjxkxlxlymynynymxlwkwkwlxmwnwnwoyoynynynynzozoyoynynymymylykylxlxmxmxnxoynznznznznzmzlzkzjyiyhyhygygxhxhxgyfyeydycyczdzezfzgyhyhyhyhzhzizhyhyhxgygyfzgzg{g{f|f|e{h{hzizdzczczdzdzdzezezezezeyby`x`x`yaycycycycybzbzazayayayayay`z`{a{azazazazazay`y`y`y`yazazazbzbzczdzezezfzgygyfyexeydyczczbzbzbzczczdydyezezd{e{d{czaz`y`y_y^z^z^z_z`zazazazazazazazazazbzczczdzczczdzdzdzdzezgzgygyfyezczbyayaybycydydycybzaz`z`z_z^z]z^z`zazbzaz_z^z]z]z^z^y^y^y^y_z`zazc{d{e{ezezezezdzdzdzdzfzgzfzfzezezeyeyeyeydydydydydzdzdzczbzayayayayayayayayaybybyczcydydyeyeyeyeyeyexdydzd{d{d{czczdzdzdzdzczczdzdze{f{f{h{i{i{h{h|g{e{c{a{azazbzbzaz`{a{a|`|_|^{]{\\{\\{[{\\{\\{]{^{^{^z^{^{^|^|]|^|_{_{_{_z`z`{`{`|_|_|^|^|^|^|]}[|]}`}b}b|b}`}_~^~]}\\|\\|\\|]|^|_}`~`~a}a~aaaaa`~_}^}^}]}]}\\}\\~\\[Z~XWUTTUUUVUTSRRSSTSTVVUTUVVVVUUTTSSSRRQPOOONNNNNMMMMNNNMMLLLKLMMNMLKJLNORRPNNPONPUQQOQUVTLKKJIHGDCDDDFGGGFCA@AAC@<:9<=;<<<;<<::9::::988789:::::998876665555555544444433332111223445665333345544333333333334444333222223444566544345654444432235666543345665544432001333345665346666678777544589;<;;;<=@A?=84457:<=?????>>=<;:;;<<<;;;;:9999::988999889988:;;=>??@?=;889;>@ACDDDDCB@?>>?@ABCDEDDBBBA@@@BDDCA@@??>=<9667:<=>>>>??@@AABBBCCCBBBAABBBB@@?@@AA@ABCCDDDCDDDCBAEJLMMLKKKLLMNNOPPPPPPONLKJJJIIJMOPPPPQSTTROMLLMMMMLLL~N~QTVXVTQPPSVWVSOLLMQUWYYYZZYXUTRRRcxcxcxcycyczbzczcydxewfwgwfxfxfxfxfxgxhwhwhxgxfxexewdwewfwfxhxixixjxjxixixhxixjxjxjxkylymymymylxkwkwkwlwmwmxnxoyoynynynznznznynynymymylylxlxkxkxlxlxmynynznznznzmzlzkzjyjyiyhyhyiyixixixiyhyfydyczbzczezfzgygyhyhygzgzhzhyhxhxgxfyfzfzg{g|f|d|c|g{hzizdzczczdzdzdzdzezezezfzby_y`y]z`zcydydycybyazaybybybyayay`z`zazazazazazaz`y`y`y`y`z`z`zazazazbzczczczdzeyeydycycybzazazazazazbzczcydzdzdzc{b{bzaz`y_y_x^y^z^z^z_z`z`z`z`z`z`z`z`zazbzczdzdzdzdzezezezdzezfzgzgygyfyezdzbybybycydyeydydyczbzaz`z_z^z]z]z_zazazaz_z^z]z\\z]z]z]z]z]z^z^z_z`zazbzczczbzbzbzbzczczdzdzezezdzdzeyfyfyfyeyeyezezezezdzdzczcybybybybybybyayaybybzczdyeyeyfyfyfyfxfxewexeyeze{ezezfzezezezezdzdzdzeze{f{f{g{h{h{h{g|f{d{b{a{azbzbzbzaza{a{`|_|^|]{\\{[{Z{Z{[{[{]{^{^{]z^z]z]{]{\\|^{`{`{`z`zaza{a{a|`|`|_|_|^|`}]}Z}[~]~a}b}a}`}^~]}]|\\|\\|]|^}_}`}`~a~a}b~bbbcba~_}^}^}^}]}]}\\~\\[YWVTTTUUUUTSSSRRRSSTVUTTUVVVVUUTSSSRRRQPONOMKKMMKKKLLLLKKKKJJJJKKJJGHHKLOOMKKMMLLRMMOQRRPIGGHFEEDCCCCDEDDC@><=>@>:87:;::;::<;99899998776789999:99887655555555554433444333322122345677643334544433333344343333332221233454456654434555543322123566543334566665544200134444567544667777888876679;<==<<=>@A@=954579<>?????>>=<;:;;<<<;;;;:999:::9889:9889989::;<=>???>=:::<=?ABCDDDCA@??>??@ABCCDCBAA@?>?@CCBA???>=<;96679;<>>>>??@@AABBBCCBBBBAABCCBAA@@ABAABBCDDDDDDEEDDCEJMNNMLLLLMNOOPQQQQQQQOMLKKJJJLNPPPPQRTUTSPNNNNNNNMM~M~O~RUXYWTPOPSWYXUROMNRUWYYYZZZYVUSSSdxdxdxcycybzbzdzeygxhwhwiwhxgxfxfxfxgxhwhwhxhxgxexdwdwdwewfxgxhxhxhxixhxhxhxhxixixjykylylylykykwkwjwkwlwlwmxmxnynynynynznznynymymylykykyjxjxjxjxkxkxmymynznzmzmzlzlzkzjyiyiyhyhxixixixiyhygyfydzczbzdzfzezfyhyhyfzfzfzgzhyhxhxgxfyfzfzg{g|e|b|b|f{h{hzezdzdzczczczdze{e{e{ezaz_y_y\\z_zdyeyeydzbyayaybycybxbxbyazaz`z`zaza{azaz`y`y`y`z`{`{`zazazazazbzbzczczdycycybyay`z_z_z`z`zaz`zazazbzczbza{`{_z`z_y_x_x^y^z]z^z_z`z`z`z_z_z_z_z`{a{bzczdzdzezfzgzgzfzezezfzhzhyhygyfzdzcycycycydyeyeydyczbzaz`z_z^{]{]{^{_z`zaz_z^z]z]z]z\\z]z]z^z^z]z]z^z_z_z`z`z`z`z`z`z`zazazazbzczczdzeyfygygyfzfzfzf{fzezezezezeydydydxdxcxcxcxbybzbzczdyeyfygyhyhyhxgxfwfwfxfyfzfzfyfygzgzfzfzezeyeyeyezf{f{g{g{g{f{f{e{cza{`{a{bzczbzaz`{`|_|^|]|[{[{Z|Z|Z|[|[|]|^|^|]{]z]{]{\\{]|^{`{azazazazb{b{b|a|`|`|_|_}`}]}[}[~]}`}a}`}^}\\}[|[|\\|]|^}_}_}`}`~`~`}`~abbbba~_~^~^}^}^}]}\\~\\ZXVUTTUUUUUUTTSSSSSTTVUTTUVVVVUUUSSSSSRQPONOMJKKKJIIJLLKJJIIHHIGGGFEDFFGHLKJHFJJIGNJJMNMMLECCDCCCCBBBBBCBA@=;::;><8669:9::::;;998999998766789999::98765555554444332334443332222234678875433343333333334444333333322223345455665443456665321123566654323456666555421013455567865577778899998779;<=>>>>??AA@>:65679;>>?@@?>>><;:;;<<<;;;;::99:::9989::999:::::;<<=>>>>==<;<=>?ABCCCBA@???>>>?@ABBBAA@>=<<?ABA@?>==<;:97778:<=>>>??@@AABBBBBBBBBBBCCCCBBAABBABCDDEEDDEEFFFFFGJMOPONNMMNOQRSSSSSRSRPNMLKKJLMOQQQQRSUVUSQOOOOOOONN~N~Q~TXYYWTPOQTXZZWSQOPRUWYZZ[[ZZYWUTTdxdxdxdycyczczezfygxhwhxixhxhxgxgxgxhxhxhxixhxgxexdxdwdwewexfxgxgxhwgwhwgwgwhxixixjyjyjyjyjyjxjwjwiwjwkwlxlxlxlymymymylylylylylykykyjyiyixixhxhxixkxlymymzmzmzlzkzjyiyiyhyhygxhxixixiyhygyfzezdzdzbzfzgzezeygzgzdzezezfygyhxgxgxfyezfzg{f{c{a{b{f{g{h{e{dzezdzdzczczezezdzezaz^z^zZz_zeyeyeyczbybybybycxbxbxbyaz`z_z`zazazaz`z`z`z`z`z`z`z`zazazaz`zazazbzcycycybzbz`z_z^z^z_z`z`z`z`zazbzbzaz`z_z^z_z^y_x`x_y^z^z^z_z`z`z`z_z_z_z_z_za{czdzdzezfzfzgzhzgzfzgzhzizhyhygyfzezdycycydyeyfyfyeyczbzazaz`{^{]|]|^{_z`z`z_z_z^z]z\\z\\z]z]z]z]z]z]z]z]z^z_z_z^z^z^z^z^z_z`z_z`zazczdzeyfygzgzfzfzfzf{f{f{f{f{fzfzeyeyeyexdxdxdxcyczbzczdyexfygzhziyhyhxgxfwfxgygygygygygygzgzfzfzeyeyeyfyfzfzfzfzezezdzczczaz_z`{b{b{bz`z`{_|^|]|\\|[|Z|Y|Y|Z|[|\\|]|^|^|^|^{]{]|\\|]|^{`zazbzazbzb{c{c|b}a|`|_|^}`}]}[|[}]}_}_}^~]~[}Y|Z|[|\\|]}^}_}_}_~_~`}`}a~`~`a`~_}^}^~_}^}]}]~\\[YWUTSTUVVVVUUTTSSSTTUVTTSTUUUUTTVSRTTSRPONNNMJJKKIHIJKKKJJIHHFHFFEEDDFFFGJJIFDIOECIIILJFIHB@@CABCCCBBBBAA?>;:889:98667889999::999888887666788889998887655555444332123334433222223467888644333333333333334433333332222335655655544445555420013456665322234566666653101345656675457778899:::988:<=>???@AABBA>955679;=>?????>==;:;;;<;;:::::::::::9:;<;:::;:::::;<==>>>>==<<=>??@@AAA@@@@?>==>>?@@@@@?=<;;=@A@?>==<<;:87778;=>>?>??AABCCCCCBBBCCDCCDDDCCBBBCBCDFFFFEDEFHIHHGIKNPPPPNNMNPQSTUUTTTSRQOMLKKLLNPQRRRRSVWVTQPPPQPOONN~P~SVY[ZWTQOPUY[[XUSQPRVXZZZ[[[ZYWVUSexexdxdydydydzfzgyhxixjxjxiyhygygyhxixixixixhxfxexdxdxdwdwexexfxgxgwfwfwfwfxfxgxgxhyhyhyhxhxhxiwiwhwixjxjxkxkxkykykykykyjykykyjyiyiyhygygygyfygyiyjykzkzlzkzkzjzjyiyhyhyhygygyhxixhyhygzgzfzezdzdzczhzhzdzczfzg{b{czezfygxgxfxfyfyezfzg{e{c{a{a{e{g{h{f{e{ezdzczczdzdzdzczcz_z]z]{\\z`zdyeydyczbybybycycxcxcxcy`z`z_z`z`zaz`z`z`z`z`z`z`z`zazazazaz`z`zazcycycyczbzbz`z_z^z_z_z_z_z_z`zaza{b{`{^z]z]z^z_y`x`x`y`z^z_z`z`z_z_z_z`z`z_z`zazbzdzdzezfzgzhzhzgzfzgzhziyiyiyhyfzezdzezezezfzfzfzezczbzbzaz`{^{]{\\{]{^{_z_z_z_z^z^z]z]z]z^z]z]z]z]z]y]y]y^y]y]y\\z\\z\\z\\z]z]z]z^z_z`zazczezfzfzfzezezf{f{g{g{g{gzgzgyfyfyfxexexdxdycyczdyeyfygzhziziziyiyhxgwhxhyhyhyhyhyhyhzhzgzgzfyfyfyfyfzfzfzfzezdzdzczczaz_z_{a{b{a{`{_{^|]|\\|Z|Z|Z|Y|Z|[|\\|]|^|^|_|_|_{_|^|^|_|^|_{a{bzbzbzb{c|b|b}b}`|_}^}^|\\|[|\\}\\}^}^}]~[~Y}X|Y|Z|[|\\}\\}]}^}^~_~_}_~_~^~^~^~]}]}\\}]~^~^~]\\ZYWUSSTUVVWWVVVUUTTUUVVVUTTUUUUUUTWSRUUTQOONNNLJIKJJIJJLLKJIHHHFIGFEDCDFFGGHHGFFHLDBIIHJIBGFA>?BABCEDCCCBA?=<;:87999888789999::::9999998777767788899888765555544433211233443332222346788875433322233333333444333333332233566555554444455531/0136776542112445566667641012578765655577889:;;;;;::;=>?@@@@AABBA>:66789;==>???>>=<;;;;<;;;:::::::::::::;<<;;;;;;;;;;<===>>>=<<<==>>>??@@@@@?>><<<==>???>=<;:;<>@@?>==<<;:97789<>>?????ABCCDDDDCCCDDEDDEEEDDCCCCDDEGHHGEDEHJKKJIJLNQRRQONNOQSUVVVVVVUUSQ~OMKKLNPRSSSSTUXXWURQQQRRPONN~P~TX[\\[XUQOPUZ\\[ZVTRRSVXZ[[\\\\\\[ZXVTQexexexexeyeyeygygxhxixjxjyiyhygyhyiyixixixhxgxfxexdxdxdxdxeyeyfyfyfxfwfwexexexfxfxfyfyfxgxgxgxgxhxhxhxhyiyiyiyjyiyiyiyiyiyiyhyhyhygyfyfyfyfyfyeyhyjzkzjzizizizhzgzgyfygygyfyfygyhyhygzgzfzezdzezfzdzhzhzczbze{f{b{c{dzeyfxfxfyezezezfzf{d{b{a{b{e{f{g{e{d{ezdzcydydzdzdzcza{^{]{\\{^{azbzdzdzczcycybycycydxdydzaz_z^z`zazbzazazazazaz`zazazayayayay`y`yaycycycyczbzbz`z_z_z_z_z_z_z_zazbzb{b{_{^z]y]y_y`yayay`y`z`z`z`z`z`z`z`zazaz`z`zazbzczdzezfzgzhzhzgzgzgzhzizizizhzfzezdzdzdzezfzfzfzdzczbzbzazaz_{]{\\{\\{]{^z_z_z_z_z_z^z]z^z_z_z^z^z^y^y^y^x]x]x]y\\y[z[z\\z\\z\\z\\z\\z]z^z`zbzdzdzezezezeze{f{h{i{i{hzhzhzgygygxfwewexdxcydyeyfygyhzizjzjzjzjziyhxhxhyhzhzizizizi{i{h{h{gzgzfzfzfzfzfzfze{d{d{dzczaz_z_{a{a{`|^|]|\\|[|Z|Y|Y|Z|Z|[|\\|]|]|^|_|_|_|`|`|`|`|`|`|`|b{b{b{b{b{b|b|b|b|a|_}_}^|\\|[}\\~]~^~^~\\~Z~Y~X}X|Z|[|[}[}\\}]}^~^~^}^~]~]~\\~\\}[~Z~Z~[~\\~\\ZYXVTSRSTVVWXXXWWVVUVVWWWXVVVUVVVVVUWSRUUTQOOONMMKKLLKKKLMMKJIHHGFJHGFDDEGGFGHHHHIJIDCKKJIHAGD@=>BABCFFEDDCA@<:::77999999889::::999999:;:9987666777898887655555544433211233444332222346888865433322233333333444433333321134676554444444444420/025676543101244555667765200269987666678899:;<<===<<==>@@@@AAABCA=;77789:<<>>>=>=<;;;;;;;;;;;:::::9:::::;<<<<<;;;;;;;<===>>=<;<====>>>>?????>>=<<<<====>==<;;<=>??>>==<<;:8778:<>>@@@?@ACCDEEEEDDDEFFFFFFFEEDDDDEEGIIIHFEFILMMKJKMOQSSRPONORTVWXXXXWWVT~S~P~MKKMNQSTSSSUWYZXVSRSSTSQO~M~N~Q~UZ\\]\\YUQPPTY\\\\[XURRSUXZ[[\\]]\\ZYVTRexexexfxfygygyhyhxhxixjxjyiyhyhyhyiyjyjxhxgxfxfxexexexexeyfyfyfyfyexewexexexexdxdydxdxdxexfxfxfxfxeyfyfygygygygygygygyfyfyfyfyfyfyeyeyeyeyeyeyeyhzjzizhzgzgzgzfzezdzezezezezezfzgzfzfzezezdzdzezfzezizfzbzaze{f{b{c{dzeyfyfxfxeyezdzeze{c{b{b{c{e{f{f{e{d{ezdzcydydzdzdzbz`{]{]{]|^{a{czezezdzczczcycydydxeyezbz^z^z`zbybybybzazazazazayaybybybyay`yayaycycycyczbzbz`z`z`z`z`z`z`zazczdzc{b{_{]{\\z^zazazbybybzbzbzbzczbzbzbzbzbzbzazazazbzczdzdzezgzhzhzgzfzgzgzhzhzizhzfzezdzdzdzezfzfzfzdzbzazazay`z^z]{]{\\{]{^z_z_z_y_z_z^z^z^z_z_z_z_z_y_y`y_x_x^x^x\\y\\z\\z\\z\\z\\z\\z\\z]z]z^zazbzczdzdzdzdzd{f{g{h{i{izizhzhygygxfxexexdxdydyeyfygzhzjzk{k{k{jzjziyixiyizhzizizizi{i{i{i{izhzgzgzhzgzg{g{f|e{d{dzdzaz_{^{_|_|^|\\}Z}Y}X}X|X|X|Y{Z{\\{\\{]{^|_|`|`|`|a|a}a}a}a}a|a{c{c{c{c{c{c{c{c|b|a|`}_}^|\\}\\~]^~^~^~\\~Z~Y~Y}Z|[|\\|\\}\\}\\}]}^}^~^~^~]~]~\\~Z}Y~Y~X~YZ~YXWVTSRRTUWYZZZYYXYXXXXYYYYXXXWWVVVVVYSQVUTRPPPOONMMMMMLLMNMMKIHHGEKIHGEEFGGHHHHIILMJ@ENLLJIBHE?=>BBCDFGFEDDCA<9997699::::99::::999999::;;::9876656778877655444554443311123344433333334688886433332223333333455543333332123467654444444443331//036776532//0244555567875200269:98667789:::;<=>???>=>>?@AA@AAABBA>;888999;;<=<<<<;;;:;;;;:;<;;;:::;;;::;<<==<<<<<<<<<<=>>>>==<=>>>>===>>?>>>>==<<;<<=<<=<<;;;<==>?>>==<<;:8678:=>?@AA@AADDEFFFFFFFFGGGGGGFFFFEEEEEHJKJIGFGKNNNLKMMORTTSQPOPSUWYZZZYYXWU~T}R}OLLMORTUTTTVXZ[YVSSSTUTQO~N}O}R~W~[]^]YVRPQUZ\\]\\YV~SSTUXZ[[\\]]\\ZXUSQeyexfxgxhyhyiyiyixhxixkxjyhyhzhzizjyjyixhxgxfxfxfxfxfxfyfyfyfyfyeydxdwdxdxdxdxcxbxbwcxdxdxexexexeyeyeyfyfyeyeyeyeyeyeyeydydydydydydydycycydydyfzfzizfzezfzezezdzdzczczdzdzdzdzezfzezezezdzdzdzezgzfyhzfzazb{f{g{c{d{dzeyeygyfxfyezezeze{b{b{b{d{e{e{e{e{dzezdzdydyfzfzfzezb{_{\\|]|^|a{d{e{e{dzczczczdyexdxeyfzcz_z_zaybycycxcybzbzbzbzbyayaybybyby`yaybycycyczczbzbz`z`z`zaz`z`zbzczdzezc{a{_{]{^z`zczczczdzczczczczdzczczdzdzdzczbzbzbzbzczczczezfzgzgzfzezfzgzhzhzhzgzfzdzdzdzdzdzezezezczaz`zaz`y`z^z]{]{]z]z^z_z_z_y_y_y^z]z^z^z_z`z`z`y`y`yax`x`x_x]y]z^z^z]z]z]z\\z]z]z^z`zbzb{b{b{b{b{c{e{g{g{h{hzhzhzgygygyfxexexexeyeyeyeyfzhzizk{k{k{k{kzjyjyiyizizizizizj{j{j{j{jzjzizizhyhzhzg|f|e{dzdzdza{_{^|^|^|\\}Z}Y~W~V~W}X|X|Y|Z{[{\\{]|^|_}`}a}a}a|`}a}b}c|c|a{c{d|d|d|d{d{d{c{c|b|a}`}_|]}^~_~__~]~[~Y~Y}Z|[|\\|]|]}]}]}]}^}]}]~]~^~]~\\~Z~X~W~WXXW~VVUSRRSTVXYZ[~[ZZYYZZZZ[ZZZZZZYXXXXXWZTRWTSRQQQPPOONNNMMMNNNMKIHGGELIHHFFFHHJIHGHIMOL@GPNLKJDIF@>?CCCDFGFEDCCB>877779:;;;:9:;;::998899::::;:987655667776654444544444331112334443333344568887543333322333333345554333333222346765444444443322100146776531..0244555567876300269::975789::;;<=>?A@@@?>>?@@@@@@AABA>;888889::;;;;<;;;::;;;;;;<<<<;;:;;;;;<==>===<<======>????>==>>??>===>>>>>>====<<<<===<<<;;<<===>>>===<<:8778;>@@BBBABCEFFGGGGGGGHHHHHHHGGGGFFFFFIKLLKHHHLPPONLNNPSUUURQPQTWXZ[[[[ZZYW~U}R}PMLNPRTUUTTVY[\\ZVSTUVVTRO~N}P}S~X~\\^^^ZVRPQUZ]^][X~US~S~U~X~Z[[\\]]\\ZXURQfxfxgyhyixjxjyjxjxixjykyizgzhzizizkzkyixgxfxgxgxgxgxgygygygyfyeyeycxcxcxcxcxcxbwawbxcxcxdxexexeyeyeyeyfyeyeyeyeydydydydycycydydydycycybybycycyezezgzczczdzdzczczczbzbzbzbzbzbzdzezdzdzdzdzdzezfzfzgyhzezazb{f{g{d{d{ezfzfygygyfyezezdzc{b{b{c{d{e{f{f{fzezezdydyeyfzfzfze{b{_|]|^|_{b{d{f{ezdzdzczdzeyfyexeygzdz`zazazbycxcxcyczczbzbybybyaybybyby`yaybycycydzczbzbzazazazbzazbzczezfzezc{a{_{^z`zazdydyeyeyezezezezezeyeyezezfzezdzczbzbzczczbzdzezfzfzezezezfzgzgzgzfzezczbzazbzczdzdzczaz`z`z`z`y_z^z^{]{]{^z^z_z_z_y_y^y]z]z]z^z_z`zazayaybxbxbwaw`x_y_y`z`z_z_y^y^z]z^z_z`{`{a{a{`{`{a{c{e{f{g{gzgzgzgygygygyfyfxfxexeyeyeyeyfzgzi{j|l|l|l{l{kzkyjzjzizizjzkzk{k{k{k{kzkzkzjziyiyizh{g{e{d{dzc{a{_{]{\\|[}Z}Y~W~V~V~V}V}W|X{Y{Z{[{]|_}`}`}`}`}`}`}`|c|e|c|b|d|e|e|e|e|d|d|d{c{c|b~a}_|^}_}`~`~_~]~[}Z}Y}[|\\|]|]|]}]}]}^}^}]}]}^~^~]~\\ZX~W~WXXW~VUUSSSSTUWY[[~[[ZZZ[\\\\\\\\[[[[\\\\[ZYYYYXZUSWUTSSSRRQQPPOONNNNNNMKIHHGDKIHHGFGIHJKHFGIMQMAIQPMJIFJGA?@CDDDEFEDCBBB?95678::;;;:9:::::988788::::::986544566665554444444444331122334444333455667786543333333333333345664433333322346754433443433221101257776520--024445555677630/169::975799;<<<<<=?BAAA@??>?@@@@@AABA><99988889:::;;:::::;;<<;<<=<<<<<<==<<<=>>>====>>>>>>?@@@@?>>>????>>=>??>>====>=====>>>>=<<=>>>=========;9778<?ABDDDCDFGHHHIIHHHHIIJJJJIIHHHHHGGGJLMMLJJJNQRQPNNOQTVWVTRQRUXZ[\\\\\\\\\\[~Z}X}V}T}QNMOQSUVUUUWZ[\\ZVTTVWVUR~P}O}Q}T~Y]__^[VRPQU[^_]\\Y}V~T~S~T~W~Y[[[\\]\\ZWTRPgxfygyhyixjxkxkxkxkylykzizgzgzizizkzkyiygxfxgxgxgxgxgygyhyhygyeydycxcxcxcxbxawawawbxcxdxexexfyfyeyeyeyeyexdxdxdxdxdydycycycycydydydycybybybycyezezezbzczczczbzbzbzaz`z`z`z`zazczdzdzczczdzdzezfzfzgzhze{a{c{g{g{d{e{f{fzgyhygyfyezd{c{b{b{b{d{e{e{e{ezfzezezdyeyezfzfzf{e{c{`{^{_{_{b{e{g{fzezdzdzdzeyfyeyfygze{`{`zazcycxcxdydzczcybybycybybybybyayaybydydyezdzczczbzbzbzczczdzezezfzd{b{`{^z`zbycyeyeyfygyfygygygyfygygygygyfyfzezdzczczczdzbzczdzezezdzczdzezfzfzfzezc{b{a{azazbzczczbzay`y`y`z`z`{_z^z^z^z^z^z_z_y_y_z^z\\z\\{\\{]z_z`zazayaycxcxbwawawaxaxbybybyayay`z_z^z_{`{`{`{_{_{_{`{b{d{e{f{fzfzfzfyfyfygygygyfxfyfyfyfyfygzhzi{k|l|m|m|m|l{k{kzk{j{j{j{k{k|k|k|k|k{l{kzjziyiyizi{h{f{d{c{a{`{^{\\{[|Y}X}W~W~W}W}W}W|W|X{Y{Z{[{\\|^}`}a}`~`~`~`~`}c}g}e|c}d}e}f}f}e|d|c|d|d|d}c}b}`|_|`}a~a~_~^}\\}Z}Z|\\|]|^|]|\\}\\}]}^}]~]~]~]}]~]~\\~ZX~W~WXWWVVUTSSSTTVY[\\\\[ZZZ[[[\\[[[[[]\\[ZYYYYWXUTUUTTTTSSRRQQPPNNNMMMLKHGGECJIHGGFGIHKLIEGHMPLCJQNLJHEHF@>?BCDCCDDCAABA?95568:;<;;:999::998777888999987543246665444433334444432122334444444456677777654333333344444445666443333433344675433233443221111235776541/-.1344444445687410169;;97679;<===;;=?BBBBA@?>?@???>?@AA>=:::98899::::::::::;;<<<<====<<<<==<<=>????>>>>>???@@AAAA@?>??@@@?>>????>==>>?>>>>?????>>=>????>>===>>><:878<@CDFFFEEHIJJJJJIIIIJJKKLKKJIIIIIHHHKMNMMKKLORRRQOOOQUXXWUSRSVY[\\]]]]]\\~[}Y}W|U}R~PNORUWXWUUWZ\\][XUUWXWVS~Q~P}R}U~Z^``_\\WROQU[_`_\\Z~V~T}S~TWYZZZ[\\[YVSQPgxgyhyiyjxjxkxkxkxlylykzizhzhzjzkzkzjyiyhxgxgxhxgxhxhyhyhyhyfyeydydxdxcxcxbx`w`wawbxbxcxdxeyfyfyfyfyeyexdxdxcxcxdxdxdydycycyeyeyeydycybybybycydzdzdzczczbzbzbzbzaz`z_z^z_z`zazczczczczczezdzf{fzfzgzgzc{b{c{f{g{f{f{g{gzgzgzezdzdzcza{a{azbzczc{c{dzezezezdzdzeze{fzf{f{d{b{`{^{^{`{c{e{fzezezezeyeyfyfyfzfzhze{`{`zazcycxdxeyeydycycycydydydydycxaxaxbycycydzdzczczbzbzczczdzezfzfzezc{a{`z`zbzdyeygyfygyhyhyhyiyhyiyiyixhyhyhygyfzezezdzezezczbzdzezdzczczbzczczdzd{c{b{a{`{`z`zazbzaz`z_y_z_y`z`z`z`z_z_z^z]z^z_z_y_y_z]{[{Z{[{]z_z`z`z`ybydxexdwcwbwbwcxdydydydydybza{`{`{a{a{`z_z_z_z`zazczd{d{d{ezezdydyeyfygygxgxgxgygxgxgyhzizj{k{m|m|m|m|m|l{l{k{j|i|j|k|l|l|l|j|j{k{k{kzjzhzi{h{g|e|b|a|_{]{[{Z{Y{Y|X}Y}Z}Z}Y|X|W|W{W{X{YzZ{\\|]}_}_}_~`~b~b~a}b}e}e|c}d~e~f~e}d|c}c}d}d}d}c}b}`|_}a}b~a~_~]}[}Y}Z|\\{^|_|]|[}Z~[~\\~\\\\]~]~]~\\~[~Z~Y~XWWWWVVVTTSSTUVXZZZYXXXXYZZZZZ[[]\\[ZYVVWWVUUUTTTTSSRRRQPONLKKJLJJJGFDCDIGGGFFFHIKKHDFGLOKDKNJKHFDED?=>ABBBBBCB@??><85568:;<;;:99999987666666666676542248764343332223444432233444444444566777766554333333344444456666543334434455675433343444221222235676530.-/1344333345688620169;;:867:<=>>=<:<>BCCBA@?>>>>>>=>?@@>=:::9999::;;;:::::;;;;<<=>>>>=======<>>?@A@@?>>??@@@ABBBBA@?@@AAAA@@@@@??>>??@????@AAAA@??@@@@@??>?????>;878>CEEGGFFGJKLLLKJJJJJJKKLMMLKKJJJIHHILNONMLMNQSSSRPOPRUY[ZXUTTWZ\\]^^^^^^]~Z}Y|W}T~QPQTWXXWUUWZ]^\\YVVXXXWT~R}Q}S}V[_``_\\VROPS[`a`^[~W~T~S~TVXZYZZZZWURPOgxgyiziyjykxkxkylylymykzizgzhzjzkzlzjyhygxgxgxhxhxhxhyhyhygyfydydyeydydybybx`x`xaxbxbxcydyeyfyfyfyeyexdxdxcxcxcxcxcxcycydydyeyfyeyeydybybybycydzdzcybybyaycycybyby`z^z^z_z`zazczdzdzdzdzdzezezfzgzgzg{a{c{e{e{f{g{gzgzgzfzfzdzczbzbzaz`zazazbzbzczczdzdzdzczd{e{e{eze{e{d{b{_{]{_{`{d{e{ezezdzezeyfyfyfzezf{g{e{_z_zazcydxexdydydycycycydyeyeyeycxcxbxcxcycycycycybybycycydyeyfzgzfzd{b{a{azbzdzezgzhzgzhziziyiyjyjyjykyjyiyiyiyhzgzfzezdzfzfzdzbzczdzczbzbzbzbzc{b{b{a|a{a{azayayazazaz`z_y^y_y_y`y`z`z_z_z_z^z^z^y_y_z^z\\{Z{Y{Yz]z_z_z_zaycydxexdwcwcwcxeygygygyfyezc{b{a{a{a{azaz`z_z_z`zazbzczc{czczdzdydyeyfygxgxgxhxhxhxhxhxiyjzk{l{l{m|m|n|m|l|l|k|j|i|i|j|l|l|k{j{h{j{k{jzizh{h{g|e|c|`|_|]|\\{[{Z{Z|Y|Y}[}\\|[|Z|Y{X{X{XzWzYzZ{[|]}^}^}_}`~b~b}`}b}c}c|d}d~e~e}d}c}c}c|d}d|c}c}a}_}^}a}a~`~_}]}Z}Y}Y}[|]|^}\\}Z~Y~Y~[~[[\\\\\\\\[~ZXWWWWWUX~XWUSRSTUWXXXWVVVWXXXXXXYZ[[ZYWUUVVUVVTSTTSRSRRQQPMMKJJIIIIHEEDBDHFFFEEFHHJIGECFJKHELLGHGECCB><=@AA@?@A@>=<<;75568::<<;;:988776555555444456553114886433333223333333334444334444456777666655444333323433356766654334333456666543333444321112234566542/--/1343333345689731159;<;978:<=??><:;=ACBA@?>=<<<<==>???>=;::::::;;<<<;;;;;;;;<===>????????>>>??@ABBA@>>?@AAABCDDCBAAABBBBBAAAAAA@@@@AAA@@@ABCCCBAAAABBAA@@@AA@@><98:?EGGHHGHIKMMNMLKKKKKKKLMNNMMLKKKJHIIMOONNMNORTTTSQPQSVZ][YUTUWZ]_______^]~Z}X~T~RPRTXZZXVVWZ^_]ZWWXY~XW~U~S}S|U}W~\\^a`_\\VQNPSZ`ba_[W~T~SSVWXYYXYXVURPNgyhyiyjykylylykylymymykzizgzhzkzmzlzjyhygygygyhxixixixiyhygyfyeydyeyeyeycyax`xaxaxbxbycydyeyfyfyfyexdxdxcxcxcxcxdxcycycydyeyfyfyeyeydybybybyczdzdzcycybyaycycybyay`z_z_z`zaybzdzdzezezezdzezezfzfzfze{`{d{e{f{f{gzgzgzgzezdzczbzaz`z`y_z`z`zazazbzbzbzczczdydzdzezezezdzb{`{^{]{_{azczdzdzdzdzezeyeyezezezfzg{e{`z_z`zdyexdwdxdxdycycycyexexfxexcwcwbwbwcxbxbxbxbxbxaxbxdxexfygzgzezc{b{b{bzdzezfzgzhzizjzjzkzkylylylylykyjyjyjyizhzhzgzfzfzfzezdzczczczczczczczbzb{a{`|_{`{azbybyazaz`z_z^y^y_y`yayayaz`z_z_z^z^z^y_y^z]z]{Z{W{Xz]z`z^z_zaydyfxfxexdwdwdxfygyhygyfzfze{d{d{c{c{bzazaz`z`y`y`yazbzbzbzbzdzdzdzezfyfxfxgxhxixixixiyizj{k{l{l{l{l|l|m|l|l|k|j|h|h|h|k|k|j{h{g{h|j|i{h{h|f|e}c}`}^|\\|\\|\\{[{Z{Z|Z|[|\\|]|]{\\{Z{X{XzXzXzYzZ{[|\\}]}]}^~_}`}`}_}`}a|b|c}d}d}d}c}b}b|c|d|d{c{b|a}_}]}`}`}_}]}\\}Z~X~Y~Z}]}^}\\~YWXYZ[[\\\\[ZYXWWWWWT~W~XWUSRSTUVWVVUTTSTTUVUUUVWXXWVUSRSTTVUTSRRQQPPPPONLJHGGGFFFGCFDAEFDEFEDEGHIIFCDEFFDEHGDDCA@BA<9:=?>>>=>><99997655688:;;:9887665444433333345554214996323333223333333334444333444456777666666554333333433357775554333443456676543333444332111234566542/-.01344444445689842258;<;:88:;<>?>=;;<@BB@?=<<:;;;<<=>>>>=<<;;;;<<===<<<<<<<<<=>>?@@@@@@@@@???@ABCDCCA@?@@ABBCDEEEDCBBCCCCCCBBCBBAAABBCBBBBBCDDDCBBCCCCCBBAABBAA?=:8;@FHHIHHIKMNOONNLKKLLKKLMOOONMLLLKHHIMOPOOOOPRTUTTS~RRSWZ]\\[WVVY\\_aa`````_^~\\~Y~V~SRSVZ[[YVUWZ^`^[XXYY~XW~U~S}S}W}Y~\\_``_\\VRONRZ`ba_\\XU~SSUWXXXWWVUTRPOfygyhyiykylylylylymylzkzhzgzhzjzlzkziyhygygyhyjyjyjxjxixhxfyfyeyeyfyfyfydyax`xbxbxbxbycydyeyfyfyeyexdxcxcxcxcxdxdxdydydydyexexfxexdxcxcybycycydzdzdycybybydydycybxay`z`zaybyczezezezezezdzdzezeyeygzdz_zc{e{f{f{fzgzgzezczbzaz`z`y_y_y^z_z`z`zazazazbzbzczcydzdzdzdzdzczaz`{^{^{`{azczczczdzdyeyezdzezdzdzezfzdz`z_zaydyeydxcxcycycycycyexexfxfxexdxbxbxbxbxbxaxawawawbwcxexgyhyfzd{c{b{b{czezfzg{g{i{j{k{l{mznznznznzmzlzkyjyjyjyizizhygzgyfyfyeydydycycycydydyczc{a{`|`{a{bzbybyaz`z_z_z_z_y`zazbybybyaz`z_z_y^z^y_y^z]z\\{Z{V{Wz^zaz^z^zaydyfxgxfxexdxexgyhyiyhygzgzf{f{f{f{e{d{czbyay`y`y`y`zazazazbzdzdzezfzfzfyfygyhyhyjyjyjzj{k{k{k{j{j{i|j|k|k|k|j|h|f|f|f|i|j{h{f{f|g|g|g{f|d}b}a}_}^}\\|\\|\\{\\{[{[|[|[|\\|^|_{^{\\{ZzYzYzYzYzYzZ{Z|[}\\}]}^}_|_|^|^|^|`{b{c|d|c|c|b|b|b|c|d|c|c|b|`}^}\\~_~`~^}]}[}YXX~Z~]}^}\\~XVVXYZ[\\\\[YYXWWVUUS~WXWUSRRSTUUTTSSSRRRRSRRSTUVUTSSRRPQQTTSQPONNMMLLMLJHEDEEEEEFBEC@CDCEEDCDFHIGDCCCCCBCDCAA@>>@?:99<=<<;:;=;6668765447788888876654333323322334554214::73333333333344333234333334444567776666666553333334333578875543334434566655433333443222222345654320./1234444445568:963357:<;;:9::;<>>=<;;>@@?=;;:9:::;<===>>=>>=<<<<=>>==========>??@AAAAAAAAA@@@ABCDEEECBA@ABCDEFFFFEDDDDEDDDDCCDCCBBBCDDCCCCCDEDDDCCDDEEEDCBBBCCA?=:9;AFHIIIIJLNOPPONLKLMMLKLNPQPONMMNKHHINPQPPPPQSUV~U~U~U}T~STWZ]]\\YXXZ]abbbaaaa`_]ZXURSVZ\\\\ZWVWZ^`_\\YYYZ~YW~V~T~T}W~Z]_``_\\WSPORY`ba`]YUS~SUVWXWWVUTRPONeyeyfyhyjykylylzkzkzkzjzhzfzg{j{kzjzizgygyhyiykykykyjxixgxfyezezfzfzfyfydybxbxcxcxbybycyeyfyfxexexexdxdxcxcxcxdxdxdxdxdxdxdxexexexdxcxcxcycydyeyezdycycycydxdxdxcxbyaybycydyezfzfzezezezdzdzezeyfyfzbz_zdzezfzfzfzfzfzczbzazaz`y`y_y_y_z_z`z`zazazbzbzbzczdydzdzdzdzczbzaz_{^{^{_{`zbzbzczczdzdzezdzc{c{bzdzdzbz_z_zbydydydxcycybzbycycxexexfwfxexdxbxbxbxbxbxaw`w`w`w`wcxexgyhyfzdzb{c{c{d{e{f{g{h{j{k{m|n|n{o{o{o{o{n{mzlzkyjyjyjzjzizhzhzhygyfyeydycycydydzdzdzc{a{`|b|c{czcybyaz`z`z_z_z`yazbzczczczb{a{`{_z_z_y_y]z\\z[{Y{U{Xz^z`z^z^z`ydyfxfxexexdxexgyiyiyizhzgzf{g{g{g{f{ezdycybyayay`y`z`zazc{dzezezezfzfzfzezfzgzhziyjyjzj{j|i|i|h{g{g{g|g|g|g|f|d|c|c|d|f{g{e{c{c|c|d|c{b|a|_}^}]}\\|\\|]{]{\\{\\{\\|\\|]|^|_{`{_{]z[zZzYzYzZzZzZ{[|[|\\|]|^|^|^|]{]{]{_{a{b|b|b|b|a|a|`|a|a|a|a|`}^}\\}[~^~^~]}\\}Z}X~W~X~Z~\\~]}[~XVVXYZZ[ZYXYYXWVTU~S~VWWUSQRTUUUTTTTSRQQQRQQRSTSRPPQQPNOPRQPNLKJJIIIIJJGFDDDEEEFF@CB@CDCDEDCCFGGFDCBB@@?@AA@?>=<>=9879<:9979:94447755446665666655543333212222235654215;:74333333333444333233332334444468865555665554333334333578875543343345566665543333332222333456765310//13455555555689:754579:<;:9:::;<==;::;>>=;99999:;<=>===>>????>===>>>>==>>>>>>?@AABCBBBBBBBAAABDEFFFFECBAACDFGHHHGFEEEFFFEEDDDDDDCCCCDDDDDEEEFEEEEDEEFGGFECCCDDC@=;:<BGIIJJJKMPQQQPNLKLNNMKKOQRRQONNOLHGJOQQQPQQRTVW~W~W}W}U~UUX[]^]ZYX[_bcccbaaaa`^~[~Y~USTW[]][XWXZ^`_\\ZZZ[~YX~V~T~U~W}Z]_``_\\XSQPQY_ba`]YUS~RSVWWVUTTSQPNMcydyeygyizjzkzjzjzjzizhzfzfzgzizkzjziygygyhyiykykykyjyixgxeyezezfzfzfyeydxcwcxdxcybybydyfyfygxfxfxexewewdwcwcwdwexdxdxdxdxdxexexexdwdxcxdxdyeyeyezdydycydyexexdxdxcybycydyeyfzgzfzfzezezezezeyeyeybz`zbzezezezezezezezbzaz`zayay`y_y_y`z`zazazazbzbzbzczdydzdzdzdzdzczbzaz_{^{_{_{`zazazbzczdzdzczczbzazbzbzczbz`z`zbydydycybybzazbycxdxdxewfwfxexdxbxcxcxdxcxbwaw`w_vawcxexfygyeyczbzd{d{e{f{g{g{h|j|l|n}o}o|p|p{p{p{n{m{lzkzjzkzkzjzjzizizhzhygyfyeydydydzezezezc{a{`|c{ezeydybyaz`z`z`z`z`zbzczdzdzczc{b{a{azazay`y^z\\z[{Y{VzYz^z`z^z^z`ycyexexdxdxdxeygyiyjzjzizhzg{h{i{i{h{gzeydycybyayayazazczdzdzezfzgzfzfzeze{e{f{g{hzizj{j|i|h|g|g|f|e{e|e|d|c|c|b|`|`{`{c{c{a{`{`|`|a|a{`|_|^|]|[|\\|]{]{^{^{^{^{^{_{`{a{a{`{^{]{\\zZz[z\\z\\z[{[|[|[|\\|]{^|]{[{[{\\{]{_{a|a}a}a|`|`|`|_|_|_|_|^}]}[}Z~\\~\\~[}Z}Z}X}W~Y~Z~[~[~Z~XVVWXXYYY~X~XYXXWVTT~VUVWUSSSUVVVUUUUTSRRQQQQRSSQOMORONMNOPPNLJHHHGGGGGGGFEDDDEEEG@BB?CDCDEDBCEEEDCDBA?>=>???=<;<<<9878:98768874346755445444455544443233111122235564216<:64433333334554432233332344543457765555565554433344333567875543333344555666554334332223444567875310012456676655568998655679;;;:99::;<<;:9:;<:978999:;<=>>>>?@@@@@?>==>>>>>>>>>>>?@BCCDDCCCCCCCBBBCEGGGGGFECBBCEGHIIIHGFFFGGGFFEEDDEEDDDDDEEEEFGGGGGGFEFFGHHHGEEEEFDA><;>DIJJJKKMORSSSQNLKMOONKKOSTTRPOOPMHHLPRRRQR~R~S~U~W~X~Y~Y}Y}X~WWY]^_^[YY[`cdddcbbbb`_~\\~Z~V~T~U~X~]_^\\XWX[^_^][[[[~Z~X~W~U~U~W~Z~]__`_]XTQQRX^aa`]ZVS~RRTVVTTSRQPOMKcycydzfzhzjzjzizhzgzgzfzfzfzgzizjzjyhygygyhzizjzkzjyiyhxfxeyeyezezfyfyexexewexexcyaybydygygxhxgxgxfwfwewewdwdwdwewdwdxdxdwdwewexexewdwdxexeyeyfyeyeydydydxexexexdxdycydyeyfygzgzfzfzfzfzgzgzfyfyfybzazczezdzezezdzdzczaz`z`zaybyay`y`yazazbzbzczczczczdzdydzezdzdzdzczbz`z`{_{_{`{`z`z`zazbzczczczbz`z`zazazazazazazdydycyczbzazazbycxdwdwewfxexdxdxcybydxdxdwcwawaw`wawbxdxfyeydybzazezf{e{e{f{h{i{k|n|o}p}p|p|q|q|q{o{m{lzkzkzkzkzj{jzjzjzjziyiyhyfyeydzezfzfzfzc{a{a|d{gygyfycybyay`y`zazbzczdzdzdzdzczbzbzazazaz`z^z\\{[{Y{Wz[z_z`z^z^z`ycydxdxdycydyfyhzjzk{k{j{izi{i{i{i{h{hzfzeydxcxcybybzbzdzezezfzfzfzfzezd{d{d{e{f{gzgzg{g|g|f|e|d|c|c|b{b{b{a{`|_|]|]{]{_{_{^{]{]{^|^|^|]|]|\\|\\{\\{\\{]{^{_{`{`{`{`|`{b{c{b{a{_{^{]{[z[z]y]z]{]{\\|\\|\\{\\{\\{[{Y{Z|[|\\|^|_|`}`}`}`|_|_}^}^}]}^}]}[|Y}Y}[~[~Z}Z}Y}X~W~XZ[~Z~Z~XWV~V~VWXXXXWXXXWVTUVUVXWVUUWXXWWVVVUUTSSRRSSSROLKOQNLLMNNNLJHFGFFFFFFFFEEDEEEEEG?BC@CDBCDCBBCDCCBCBA?=<=>>><;::;;8766887767874236755444322333334433222101222224453127;964333333345554432233333345654457654555555554433333224567865543334444556666655444443234445678875310134577888766678998765579;<;:99:::;<:988998767889:;<>????@ABBAA@?>>???>>>>>>>?@ACDEFEDDDDDDDDCCDFGHHHHGFECCDFGIJJJIIHHHHHHGGFEEEFFFFEEEEEFGHIIIIHHGGGHIJJJIGGFGHFC?==@FKKKKKLNPSTUTROLJMOPOLLPTUVT~RPOOLIJMQRSSRS~T}U}V~X~Z~Z}[}Z}Z~YYZ^_`_[ZY\\acefedcbbba`]~[~W~U~W~Z~^_^\\YWY[___^\\\\\\\\~[~Y~W}U}V~X~Z~\\____]YURPRW]aa`]ZVSRQSTTSQPPOOMLJcyczdzfzhzizizgzfzezezezfzgzgzizjziygygygygzhzizjziyhygxexdydydyeyeyfxfxfwgwgxfxey`ybyeyhxhxhxgxgwgwgwfwewewewewewewewdwdwewewexexewewfxfyfyfyfyfyexexdxdwewexexexdydyeyfygyhzgzfzfzfzgzhzgzfzeyeybyazczfzdzdzdzczczbzaz`zazbybybyayaybzbzczczczczczdzdzdyezezezezdzdzbzaz`{`{`{`z`z`z`zazbzczczbzbz`z`zazazazbzbzbzdzdzczbyazazazbycxdwdwewexexdxdxcybydydxexdxbxbxaxaxcxcxdydycyaz`zgzf{f{f{h{i{k{m{n|o|p|p|q|r|r|p|n|m{k{kzkzlzkzkzk{k{kzkzjziyiyhyfyezfzgzhzfzd{b{b|e{iyiygydybyayayazbzdzezezezdzc{czbzbzbzbzbzaz_{\\{\\{Z{Xz]zaz`z^z_zbydydydycycyeygzi{k{l{l{k{j{i{j{j{j{i{hzgzfyexdxdycyczdzezezezezfzfzezd{c{b{c{d{dzdzezd{d{c|c|c{b{a|a|`{`{`{_{^{\\{[{[{\\{\\{\\{\\{\\{\\|\\|\\|[|\\}]|]{\\{]{]{^{_{`{`{`{a|a|b|c{d{d{c|a{`{^{[z\\z_y`z_{^{]{]{]z\\z\\{[{Y|Z|[}\\}]}^}_}_}_}_}^|]}\\~[~[~\\}\\}Z}Y}Y~Z~Y~Y}Y}X}W~WXYZ~Z~Y~X~W~V~V~VVWWVVWXXWVUSUVVWZYXXXXYYXXWWWWVUTTTTUUTQOILNNMKKKLMMJHGFFGGFFFFFFEEDEEEEEF?BC@DDBBCBBAAAAAACB@?=<<>>?<;:9::7655776656674236655444322233444433221012322234553137;954333334455665432234434456654456645555555544432233334568766554444544566777765555543334556788986421246788888777789998765678:;;;:99:::;:99988766789:;<>?@@@@ABCCBBA@??@@@???????@ACDFGGGFEEEEEEEDDEGHIIHHHGFDDDFHJKLKKJIIIJJIIHGFFFGGGGGFFFFGHIJKKJJIHHIIJKLLKJHHHIHEA?>AFLLLLLMOQTTUUSOMKNQQPMKOTVVU~SQPOKJLOSTTTST~U~V}W~Y[~\\~\\}\\}\\~[[\\__`_\\ZY]adfgfedcbbba^\\~X~W~Y}\\~_`_]YXY\\_``_^]]]~\\~Z~X~V}V}W~Z\\^_`_]ZVSQQV[_`_\\YUSQPQRRQONNNMLJIcyczdzezgzgzgzfzezezdzezezfzgzhzizhygyfyfygzhzizizhzgyeycyczczdzezfygxgxgwgwgxfxcy`zcygyixixhxhwhwhwhwgwfwfwfwgwfwfwfwfwewfwfxfxfwfwfxgxgygygygyfyfyfxexdwdwexexexeyeyfyfyhyhyhyfyfygygyhzgzfzeycyaybyeyfzdycybybzazazaz`zbzcycycybybybzczdzezezdzdzdzdzeyezfzfzezezdzczb{a{a{azazazazazbzbzczczczbzazazazazbzbzczczdzczbzbyaz`zazbycxdxdxdwdxdycycyay`ybydyexdxbxax`x`xaxbxcycybyazazfzf{f{f{i{j{l{n{o{o{p{q|q|r|r|p|n|l|l{l{mzlzlzl{l{l{l{lzkzkyjzizgzfzfzhzizgzd{b{c|g{jyjyhydzczbybyczczezfzf{e{d{c{c{bzazczdzdzbz_{\\{]{[{Yz_zbz`z^zazczdzdzdzcycyezgzi{k{m{l{k{k{j{j{j{j{i{hzhygyfxeyeyeyezfzfzfzezeze{d{d|c|b{a{b{b{bzbzbzb{a{a{a{a{`{`{_|^{^{^{]{\\{Z{Y{Z{[{[{\\z\\{\\{\\|[|[|[}\\}]|]|]{\\{]z^{^{`{`{a{b|c|d|e|f{e|d|b|b|_{]z^zayazaz`{_{^{^z]z\\{[|Z|[}[}\\}]}^}^}^}^}^}^}]}[~Z}Z}[}[}Y}W~WX~X~X}X}W~WWXXY~Y~X~W~W~V~V~VVVVUUVWWVVUSTVUWYYYZZZZZYYXYYXWVUUUUUUTPNKLNMLJJJKKKIGFGGHHHHHHGFEEEFEEDDE@BCADDBBAAA@????@BA@?====>><<:9:97654665544574236654333332223455443210023422345543248:964333334556666543223434566764356544556555544433333344567776555555555566777776656544445566789986432357899998777789:99876668::;;;:9999::::98766689:;<=?@AAAABCDDCCBA@@@AA@@?@@@@ABDEFGHHGFEEFFFFEEFHIJIIIIHGFEEFIKMMMLKJIIIJJJIHFFGHIIIHGGFFGHIKLLKJIIIIJKLMMMKJJJJIGC@?AGLMMMMNPRTUVVSPMLNRRRNJOUXXV~TRPOLLNPTUVUUVW~X~YZ[\\~]~^}^~]]]^_`_\\ZY\\adghhfdccbcb_]Z~X~Z}]~`a~_~\\~Y~X~Y~\\_aa`_^^_^\\ZW~V~W~Y[]___^ZWTRRTY]_^\\YURPOOPQPMMLKKJHGczczdzezezfzezezdzdzdzdzezezfzgzgygyfyfyfygzhzhzhzgzfydzczczczdzezfyfxgxfwfxfxeybzazdzhyixixiwhwhwhwhwhwgwgwgwgwgwgwfwfwfwfwfwfxgwgxgxhyhygygygygygxfxewexdxdxeyfyeyeyfygyhyiyhyhygygygyhygyfzdycybydyeyeydybybzazaz`z`zazazbybycybybyczczfzgzgzfzdydyeyexfyfzfyfyfzezezdzd{czbzbzazazbzbzczczdzczczbzazazazbzbzczczdzczbzbzazazaybydxdxdxdwcxcycyay`y^yaybydxcxax`x_x_x`xaybybybzaz`zdzf{fzfzh{k{l{n{o{o{p{q|q|q|q|n|l|j|j{o{q{o{m{m|m{m{m{m{lzkzjzj{hzgzgzhzizg{dzc{e{h{j{jzhzezdycybyczdzf{g{g{fzezczbzbybydyfyfzcz^{\\{^{\\{[z`zbz`z_zazczezezdzczczezgzi{k{l{l{k|j|k{j{j{i{i{hzhygyfyfyfyfyfzfzfzfzezdzd{d{c|b|a|a{aza{a{`{`{`{`{`{`{`{_{_{_|_|^{^{]{]{[{Z{Z{Z{[z\\z\\z\\{\\{\\{\\|\\|\\|]|]{]{\\z]z^{^{`{`{a{b|c|e|f|f|e|e|c|c|`{^{`{bzczczb{a{_{_{^z\\{[|[|\\}]}^}^}^~^}^}^|^|^|]|[}Z}Z}Z}Y~X~WV~W~W~W~V~V~VWWWX~X~XWWWWVVVVVUUVVVUTSSUUWXYZZZZ[ZZYYZZYXWVVVVVUSPNKMNMKJIIJJJHGFGGHIIIIHGFFEEFEDDDC?ABBCCBA@@??>>>?@A@@?=<<====<;:987765555544464225654333333223355543210124433456542258:86433333346677654322233456777424554455555544444444444567787766666666666777777666654445566779::9754346899988876678999987656789;<;::8889:::9976679:<==>@BBBBCCDEEDCBA@@AAAAA@AABBBCDEFGHHGFEEFGGGFFGIJJJJJJIHGFDFILNOONMKJIIJKKJHGGHIJJJJIIGGGHJLMMLKJIIIJKLMNNLKKKKJGC@@BGMNMMNOQTVWXXUQNLNRSSNJMU[ZW~USRPNNPQTVWVVWX~Y~Z[\\]~^~^}_~_____`_\\ZY\\bdghhgedcbbba^\\~Z}[}]}`~`~_~\\~X~X~Y~\\~`bca````_]ZWVW~X[^^_^]ZWTRTUZ^[ZYUTROMNNONMKKJIHGGczdzdzdzdzdzdzdzdzdzdzdzdzdzezezezezeyeyfzgzgzhzgzfzdyczczczdzezfzfyfxfxfxexeydzbzbzfziyjxjxixiwiwiwiwiwhwhwiwiwiwhwhwgwgwgwgwgxgxhxhyiyiyhyhyhygygxfxfxfxexexfyfyfyfygyhyhyiyiyhyhygygygyfyezcycycydyfyeydybybzaz`zazazbzczcydycxcxcydydzgzhzhzfzeyeyeyeyfygygzg{fzfzfzezezdzczczbzbzczczczdzdzdzczbzbzazazbzbzczczdzczczbzbzbzbzczdydydydxcybzaz`z^z^z`zbzdyby`y_y^y^y_y`yazazaz`z_zb{e{ezf{h{k{l{m{n{o{p{q|r|q|p|n|l|k|l{q{q{n{n|n|n|n|n{m{mzlzkzizhzgzhzizizf{d{c|g{j{k{jzhzezdycydze{e{f{g{g{fzezdzczcydyeygyhycz_z^{`{^z]zazbzazazczezezezdzczdzezgzizj{k{k{j|j|j|j|i|i{hzhygyfyfyfyfyfyfzfzfzezdzd{c{c{b|a|a|`{`{`{_{_{_{_{_{_{_{_{_{_{_{_{^{^{]{]{\\{[{[{\\z]z]z^z^z]{]{]|]|]{^{^{]z]y]z]{^{`{`{a{b|d|e|f|f|f|e|d|c{a{a{c{d{e{e{d{b{`{_{_z\\zY{\\|]|`|a}`}_~^~_}_|_|_|]|[|Z}Z}Z~YWV~V~W~WWV~UUVVWWXXXWWWWWWWWVVWVVUTSTUVWYZ\\[[[[[[[[\\[ZYXWWWVWVSNNMNMLKIIJIIIHGGHIJJKKJIHGGFFFEDCCA?@BBCBA@?>>>===>@@@??=<<=====;:987765554444454224544333333222345543200134433455542248986433333345777764322223456788423444345565554444444555667788877777666667777887776665556677789:;:7644578::988887678999987655679;<;;:98789:9::8778:;=>?@BDDDDEEEEEEDCBAAABBAAABBCCBCDEFGIHGFEFGHHHHHIJKKKKKKKJHFDEHKNPPPOMKJJKLLKIGHIJKKKKKJIHHIKMNNMLKJJIJKLNOONMLLLKHDBBCHMNNNOPSUWXYYWSNLOSTUOJMT[ZXVTSQOOPRUWXXXY~Z~Z~[~\\~]~^_`~aaaa```^\\ZY]adgiihfdcbbbb_^~\\~\\~]}`~`~^~\\~X~W~X~\\~`~cdbaaaa`^[XVVX[]^^^\\ZWUSSTX[XXWUTROLLLMLLJIHHGGFczczczczczczczczczczczczczczczdzdzdzezezfzfzfygyfzdzczbzczczdzezfyfyfxfxeydyczbzdzezhyiyjxjxjxjxjxjxixiwiwjwjwjwjwiwhwhwgwgwgwhxhxiyjyiyiyiyhyhygxgxgxgxfxgxgxgygyfxgxgyhyhyiyiyiyhyhyhygyfyezczczczezfzezdzczbzbzazazbzczdzeyexdwcxdyeyfyhyiyhzgzeyeyfyfygygygzgzg{f{fzfzezezdzdzdydydydydyeyezdzdzczczbzbzbzbzczdzdzdzdzczczczczczdydydydxcybzaz`z_z^z`zazbz`y_y^y_y_y_y`y`z`z_z^z]{`{d{d{d{g{i{j{k{m{o{o{q|r|p|o|n|l|m|o|q{o{l|n|o}n}n}n|m|m{l{j{izhzhzizjzi{f|c|c|i|l{j{izhyfyeydyezf{f{g{h{h{fzezezeyeyexfxhxiydz_z_zaz`z_zazbzbzcyeyeyeyeydycycyeygzizj{j{j|j|j|i|i|h{h{gzgyfyeyezezfzfzfzfzezdzc{c{c{b|a|a|`{`{`{_{^{]{]{^{^{_{_{^{^z^z^{^{^z^z]z]{]{]z]z^z^y_y_z_z_{_{_|_|_{_{^{^z]y]z]{]{_{_{`{b|d|f|f|f|f|f{e{c{b{c{e{f{g{g{e{dzbza{`{^{]|_|`|b}b}`}_~_~`}`|_|_|^|\\|[}Z}Y~W~V~V~V~V~V~V~V~UTUVVWXXWWWWWXXXXWWXWVUTUUVVXYZ[[ZZ[[[[\\[[ZZYXWVVVVQMLNNMKKJIIHHHHHHIJJKLLKJIGGFFEDCBA@>?AAB@??>=<<;;;<>????=<;=====;:97776555444555422454443333322234554310013443345653125798543333334567777643222235679952244334556655555444555667787887777777677888789888776666678889:;;:8654679::988888789:99876555579:<<;:98789::;;9879;<>?@BCEEFFFFFEEEDCBAAABBAABBCCCCCDEFHHIHGFGHIIIIIJKKKKKLLLKIFDCFJNQQRQOLKKLMMLJHHIKLLLLLLJIIKMNOONMLKJJKKLNPPONLLMLIFCCDINNNNPQTVWXYZXTOLNSUVQKMTZ[YW~USRPPQSUXYZZ~[~[}\\}\\~]~^_`bbbbba``^[YY\\adgjiigecbbcb`_~]~]}^~`~_~^\\X~W~X~\\~a~ddcbaaa_^[XVVXZ]^^][YWUSTTVWUVUUUROLKKKKJJIHGGGFbzbzbzbzbzbzbzbzbzbzbzbzazazazbzczdzezezfzfyfyfydzbzbzbzczdzezeyeyexexexdyczbzczezgyhyhyjyjxjxjxjxjxjxjxjxkxkwkwkwjwhwhwhwhwhwixjxkykykyjyiyhyhyhxhxhxhxhxhxhxhxhxgxgxgygygyhyiyjyiyizizgzfzezczdzdzfzgzezdzczczczbzbzczdzezfygxfwexeyfygyjyjyizgzeyfygygyhyhzhzhzgzgzgzfzfzezezdzdydyeyeyeyeyfyezezdzdzczczczczdzezezezezdzdzdzdzdzdydydydycybzbzaz`z_z`zazaz^y^y^y_y_y`y`z`z`z]z\\z\\{_{c{c{c{e{g{h{i{k{m{n|p|q|p|o|m|m|n|p|q|o{n|o}p}o}o}o}n|m|k{j{izhzhzhzjzi{e|c}c}k}m|j{hzhygyfyeyfzg{h{i{i{i{hzgzfyfxfxgxhxjyjyezazazczbzazczczdzeygygyfyeydycycydyezgzh{i{i|i|i|i|h|h{gzfzfyeydydzdzezezezdzdzdzc{c{b{b|a|`|`{`{`{_{^{]{]{]{^{^{^{]{]{^{^{^{^z^z^{]{]{^{_z_z`yayaz`{`{`{`|a|a|b{az`y`y_z^{^{^{_{`{b|d|f|f|f{f{e{dzc{b{d{f{g{h{h{f{e{d{b{`{^|_|a|c}e}b~_}_~`~a}a|`|`|^|]|[}Z}X~W~VVVVVV~VUTTUVVWWWWVWXXYY~Z~Y~YYXWVVVVWWXZZ\\\\[[ZZ[[\\[[ZYYXWVUUUPKKMMLKJIIIHHHHIIIJJKLMLKIHGFEDCA@??>??@@?>=<;::999:<==>><<;<<<<<:98777655544455532244444443332223456542001344334665312688865444333456778775432223467897423333445565556655556666678887777777777889989::9987766678889:;<;:8655689;:988888899:99876555568:;<;;:9889;<=<:88:<>@ABCDFFGGGGGFFFEDCAAABBBCCCDEDCDDEFHIJIHGGHIJJJIJKLLLLLLLKIFDCDHMQRSSPNLLMNONLIHIKLMNNNMKJJKMOPPPNMLKJKKLNPQPONNNMKGDDFJNNNOPRUWWXY[YUPMNSUVRMMRXZZWVTSQQRT~V~Y[[[\\\\~^~^~^~_`abccccba~_~^ZYY\\`dhjjigecbbcca_~]}]}]}_~_~^[XW~X~\\~a~cdcbaaa_^ZYWVWZ]]^][XVTSTSTUSSTSUSOLKJKJJIHGFGHGbzbzazazazazazazbzbzbzaz`z`z`zazczdzezezfyfyeydzdzbzazbzdzdzdyeyeyexdxdyczczbzczezfygyhyiyjyjxjxjyjyjxkxkxkxkxkxkxjxiwhwhwhwiwjxkylylzlzkzjyiyhyhxhxhxiyjxjxjxixiyhygyfygzgzhzizjzjyjzizhzfzezdzezezgzgzfzezdzdzczczczdzezgzhyhxgxfxfygyhykykyjzhzfxfxgxhxiyhyiyhyhzhzhzgzgzfzfzezeyeyfyfxfxfxfyfyfyeyezdzdzdydyeyfyfyfyfyezezezezeyexdxdydycyczbzazaz_z_z`z`z^z^z_y`y`y`z_z_z_z]z\\z\\{_{b{b{a{c{e{f{g{i{k{m|o|p|o|n|m|m|o|p|p|o|o}p}q~q~p}o}n|l|k{jzizhzhzhzizi{e|b}d}l}l|j{gzhygyfygzg{i{j{j{j{i{izhyhxgxgxhxiykzkzcz`{c{d{a{bzezdzdzfygygzgzfzeycycydyezezf{g{h{i|i|h|g{g{fzezdyczczczdzdzdzdzdzdzczc{b{b{a|a|`|`{`{`{_{]{\\{\\{\\{]{]{]{]z]{]{]{]{^{^z^{^{^{_{`z`zayazaza{a|`|a|b|b|c{bzbyayaz`{_{^{_{a{b|d|e|e|e{e{d{dzczc{e{g{h{i{h|g|e|d{b|`|]|`}b}d~d~`_~`~b~b}b|a|`|_}]}[}Z~XWVUUVVVVUUTUVWXWWVWXYYZZ~[~[~[ZYXWWWWWWYZ[\\\\\\[ZZZ[[[ZYYXWVUTSROKJLLKJIHIIHHHHHHHHIJLLLJHGFEDBA@>>=<=>>>=<;:9988778;;;<=<;:;;;;;987677666644455432244444443332223456642011344334675312699865444444456788876533333457887543222345555556666666777778887888887777889999;:::97777788899:;;;:9656789;;:9999999::998776655679;<<<;:99:<=>=;98:=?BCDDEFGGGGGGGGGFDCAAACCCDDEFFFEDDDEHIKJIHHHIJKKJKLLLLLMMMLJGDCDGLPRSTRPNMNOQQNKIIKMNNOOOMKKKMOPQQONLKKKKLNPQRQPONMKHEEGKONMOQSUWXXYZZVRNNSUVSNNPUYZXWU~T~SS~S~T~W~Z~\\~\\\\^^~_~_~_~_`abcdddcb~`~^ZXY\\adhjkihfdcbccb`^~]}]}_~_~][WVX~[~_~bcbaa``^]ZXWVWY[]^]ZXVTSTSSTPPRSUSOLKJKJJIHGFGHHazaz`z`z`z`zazazazazaz`z`z_z`zazczdzezeyeyeyeyczc{b{bzczdzdydydydycybzbzbzczdzdzdzezfzfzhziyiyjyjyjykykxkxlxkykykyjyixhwhwixjxkxmynznzmzlzkyjyixhxixixkykylykyjyjyiyhyfzfzgzizjzkzjyjzizhzfzezdzezfzhzgzgzezdzdzczczczdzezgziyhxgxfxgyhyiykykyjzhzfxgxhxhxiyiyiyiyizhzhzhzhzgzgzfzfyfyfyfxfxgxfxfyfyfyfyezezeyeyfzgzfzfzfzfzezezeyeyeyeyeydydzczbzb{a{_{_z_z_z]z_z`zayay`z`z`z`z]z\\z[{_{a{a{`{b{d{e{f{h{j{l|n|p|n|m|l|m|o|o|o|o}p}p~p~q~p}o}m|l|k{izhzhzhzizjzj{e|a}f}l}l|j{hzhzizizi{i{j{k{k{k{j{jzjyjyiyhyiyiyi{h{b{b{f|e|b{czezdzezfzgzhzhzhzgyeycybyczdze{f{g{h|g|f|f{ezdzczbzazazazbzczczczczczb{b{a{a|a|a|a|`{`{`{`{^{\\{[{\\z\\z\\z]z]z\\{]{]{]{^{^{^{^{_{`{azazazaza{a|`|a|b|c{d|d|czdyczb{a{`{_{_{a{a|c|c|c|c{c{c{c{c{d{f{h{i|i|h|f|e|c{a|^|^}`}c~d~`^_abb~b}`}_}^}]~[~YXWVUUUVVVUUUUVXXWWXYYZZ[[~[~\\\\[ZZYYYYXXY[[\\[[ZZZZ[[[ZYXXWVUTRPOKJKKJIHHHHGGGHHHGGGIJKKIGEDCB@?>=<;;<<==<:987766667::::;;:9:::99876666666644455433344444443332223456642112344334565313799865444444445778887643334457887643222345665567766677877788888889998888889999;:::9887788899:::;:9865679:;;:::999999::98887665779;<===<;;<>>@?<:9;>ACDEEFGHHHHHHGGGGECAAACDCDEFGGHGFEDEHIKKKJIIIKKLKLMMMMMNNMLJGEDDFJORTUTQPOOPRSPMKJLMNOPQQOMLLMOQRRQONLKKKLMORSSQPONKHEFHLOONOQTVXYXYZ[WTOOSTWSOMOTZ[ZXW~V~T~S}T}U~X~Z~\\~\\]``a~`~`~``abcddedc~`~^ZX~Y\\aehjkjhfdcabcca_~^}]}^}^~]ZWV~W~Z~^~aba``__][YWVVWX[\\]\\ZWUSRSSRRNNPRTSOLKJKJJIHGFGHI`z`z_z_z_z`z`zazazaz`z`z_z_z`zbzczdzezeyeydydzc{b{b{bzczczcycycycybzbzazbzczdzdzdzezezfzgzhzhziziziziyjykykykykykyjyjyixhxixjxlynynznzmzlzkyjxixixixjylylymylylykyjyhzgzfzgzizkzkzkyjzizhzgzfzezfzgzizhzfzezdzczczczdzezfzhyiyhxhxgxgyiyjylykyjzizfxgyhyhyiyjyjyiyizizi{i{izhzgzgzgygygygxgxgxgxgxgygyfyfyfzfzgzgzgzgzgzgzgzfzezeyeyeyeyeyezezczczb{a{_{_z^z_z[z`zazbzaz`z_z_z_z\\z\\{\\{_{`{`{`{a{c{d{dzg{i{j{l|n|m|l|k|l|m|m|n|o}p}o}o~o}n}n|m|l{kzizizhzizizj{j|c|b}g~k~k}j|i{izizi{i|j{k{k{k{k{k{kzkzkyjyiyjyjzh{e|b|f|i|f|c{e{fzezezfzgzgzhzhzgyeycybybzczd{e{f{f|f|e|d{dzczbzaza{`{azbzczczbzb{b{a{a{a|a|a|a|a|a|a{a{a{_{^{\\z\\z]z]z]z]z]z^{^{^{_{_{_{_{`{`{azazaza{a{`|`|a|b|c{d|d|d{ezdzc{c{a{`{`{`{a{b{b{b{b{c{c{c{c{e|g|h|h|h}g}e|d|b|`}^}^~`~b~b_^_`bb~a~_}^}]~[~Z~YXWVUVVVVVUUVVVWWWYYZ[[Z[[~\\]]\\[[ZZZZYYY[[\\[[ZZYZ[ZZYXWWVUTSPONKJJJJHHGGGFFGGGFEFFGHIHGFDBA@>=<<;::;;;;:87666555669988999899988765566665544455433334444443332333567642123344444564313789865544444444677888754444557888643212345666667887777888889888899:999888899::;;::988888899:;;:::9865679:;;;::999889::9998877778:<=>>>====?@B@=;:<@CDEEFGHIIIIIIHGGGECAAACDDEFGHIIHGEDEGIKKKKJIJKLLLMNNNNNOONMKHFEEEINQSUTSRPPQRSRPNLMNOPQRRQOMLMOQRRRQPNMLLMNORTTSQPNLIGGHLPPPP~R~TVXYYYZZXUQPSTWTPMMSZ][ZY~W~U~T}T}U~X~Z~\\~]^`ab~a~a~`~aabcddeec~a^ZX~Y\\aehjkjigdcabbbb`~^}]}]}\\}[~YVU~V~Y}]~`aa`_^^[ZXWUUVX[[\\[ZWTPPRQQOLNPRTSPLKKLKKJIHFFHH`z_z_z^z_z`z`z`zazaz`z_z_z`zazbzczdzdydydydzc{b{b{bzczczcycycycybzazazazbzczdzdzdzdzezezfzgzhzhzgzgzhzizizizjykyjyjyjyjyjxkxmyoypzoznzmzlzkyjxixixjxkymymymymylykyjyizgzf{h{jzkzlzkzjzjzizhzfzfzgzhzhzhzfzezezdzdzdzdzezfzhyiyiyiyhyhyiykylykyjyizgygyhyiyjyjzjzjzj{j{j{j{j{izhzgzhyhyhyhygygxgxgxhyhygygygzgzhzhzhzhzhzgzgzfzeyeyeyeyfyfyfzfzdzczb{a{^{_{_{_{[{a{bzcybyay`y`yay\\{[{\\{_{`zazaz`zazbzczezh{i{k{l{k{j{j{j{k|k|m|n}n}n}n}n|m|m{l{l{kzjzjzizizj{j{g|a}c}i~l~j}i|i{jzj{j{j|k{l{l{l{l{k{lzmzlzkykylzk{h|d}b}g}j}g|d|e{f{e{e{fzgzgzhzhzgyfyeycyczbzc{d{e{e|d|d{c{b{a{`{`{a{`{a{b{b{b{b{a{a{`{`|`|`}a}c}c|b|b{bzb{a{`{^z_z_z_z_z_z^z_z_{_z_{_{^{^{_{_{`zaza{`|`|`}`|a|b|c|c|d{ezdzdzd{c{a|`{`{a{a{b{b{b{b{b{c{c|d|f|h}h}g}f}e|d|b|a}_~^~^~`~a_^_````~_~]~\\~[ZYYXVVVWWWWWVVVVVWWXYZ[[[[[[\\^^^]\\[[[ZZZZZ[[ZZYXWXXXXWWVUTSRQNNMKJKLKIHGGFEEFFEDCCDEFFFECA@?>=;:;::::::987765555556887777788887544566555554444433333344444333333466775322334444455431368887655444444445689986544556788875421234677777899888898889999899:;:9999999::;;;;:9888899::;;;:::9976678::;;;;:99999::::998888::;<=???>>>>@ACB><;=ADEFFFGHIJJJJJIHHHECA@ABDDEFGIJJJHFDDFHJKKLLJKKLMNNOPPPPPPOMLJHGGGJMPRTTTSRRSSTTQOMMNOQRTUTRNLLNPRSTSQPONNMNPRTUTRQPMKIHILPPPP~R~T~WYZYYYZYVRQTUXUQNMQY^]\\ZX~W~V~V~V~Y~\\~^~_`abcc~b~b~bbbcddeddb_[~Y~Y\\`dgjkkkhfcaabaa`_~]~]~Z~X~VTSU~X~\\~_aa`_][YWVVTUWXZZYXWUQNMPPOMLORTUTQMLMMLLKIIHHII`z_z^z^z_z`z`z`z`z`z_z^z_z`zbzdzdzdzdydydydzc{b{bzbzbzczcycycycybzazazbzczczczdzdzdzezezfzfzfzfzfzfzfzgzgzhyiyiyiyiyjyjylymyoypzpzoznzlzkzjyjxixjxkylymymymymykyjyjzizhzg{i{kzlzlzkzkzkzjzhzgzfzfzhzhzgzfzfzfzfzezezezezgzizjzjyiyiyhyhylymylyjyizhyhyizizjzjzjzkzk{k{l{k{k{izhzhzhyhyhyhyhyhyhyhyhzhzhyhzgzgzhzhzhzhzhzgzgzfzeyeyfyfyfygzgzfzezd{c{a{^{^{_{`{\\{czcycybyayaxbxbx]z[z[{`zazaz`z`z`z`zbzdzgzh{j{j{i{h{g{h{i{j{k|l|m}n}n|m|m{m{m{m{kzjzjzizj{j|i|e|a}d}j}k}j|j|j{jzj{j{j{k{l{l{l{lzlzm{m{m{lzkzlzl|j}g~f~f~f~g}f|f{e{e{e{fzgzgzhzgzfyfyeydyczb{b{c{d{c{c{c{bzbzaz`z`za{a{a{b{b{b{b{a{`{`{`{_|`}a}c}d|d|d|c{c{b{a{_{`{bzayby`y^y_y_y_z_{^{^{]{]{]{`{`{`{`|`|`|`|`|`|a}a|c{d{e{d{c|c|a{a{a{a{b{b{b{c{c{c{c|d|e|g}h}g}f~d}c}b}a}`}_~^~^~``_]_`_^^]\\[ZYYXWVUVWXWWWVWVVWXXYZ[\\\\\\[[\\]^__^^]\\\\[[[[[[[ZYXWWVWWVVUTTSRPONMMJJKLKJHFFEEDEEDCBBABCDCB@>>=<;9999999999876555555567776556667654344665545433332323333333343233445667753222344444554323677777665555434456899866545567788864212246877799:9889999899:9999:;;;::::999::;;;;;:98899::;;<<;:999877789:;;;;:::99999:::99989;<==>?@?@@@@BCCC?=<>BDGGFEFGIIKKJJIIHFEC@@ABDEEFHJKKKHFEEGHIJLLLLLLMMOOPPPPPQPPNLKIHGHJMPRTUUTTSSSTTSQONNPQSUWVTNKKLPRTTTSRQPONOPSUUTSRPOMJJJNOPQQ~R~T~VX[ZYYYYWTSUVXVRNLQX__][Y~W~W~W~W~Y~\\~^~_abdeed~c~cbbccdddcb`\\Z~Z~\\~`cfiklkifdaaaaa`_~^~\\~ZWURRTWZ]``_^\\ZWVTTSUWXXYWVUSOMLOONMLPSUVSPNMMNMLKKIIIIJ`z_z^z^z_z`z`z`z`z_z^z]z^z`zbzdzdzdzczcydyczczczbzbzbzbzczczczczbzbzazbzczczczczczdzdzezezfzezezdzdzdzezfzfzgygyhyhyjyjymynypzqzqzozmzkzjziyixixjxkymynynymymykyjyjzizhzg{i{kzlzlzkzkzkzjzhzgzgzfzgzgzgzfzgzfzfzfzfzfzfzhzjzkzjzjzjzizizlzmzlzkzizhzhyizkzlzm{m{mzl{l{m{l{k{izhzhzhzhzhziyiyiyiyhzhzhzizizhzhzizizhzi{jzhzhzgzfyfygygygygzgzfzeze{c{a{^{_{`{`{]{dzdydxcxaxaxbxbx]z\\z\\{`{a{az_z_z_z_zazczezf{g{g{f{e{e{ezfzg{h|j|k|l|l|l{l{l{lzlzkzizizizj{i|g}b}b}e}j}j}j|j|j{kzk{j{j{k{l{l{l{lzlzm{m{l{k{k{l|m|j~g~f~g~g~g}g|g{f{e{f{fzfzfzfzfzezezdzczbzb{bzczc{b{b{b{bzbyay`zaza{a{a{b{b{b{b{b{a{`{`{_|a}b|d|d|e|e{e{d{d{c{a{bzcybycyay_y`z`z`{_|^|]|\\|\\|]|_|_{`|`|`|`|`|_|^}_}_|a|c|d|d|c{b{a|a{a{a{b{c{c{d{c{d{d|e|f}h}g}f~d~b~a~a~`~____~`~`_^^^]]\\\\[ZZYYXXWUVXXWWWVVVVXXYYZ[\\]]\\\\]^``__~_~_~^~^~]\\\\\\[YYXWVUVVUUVUTSRRPONMLLKJKKKIGFEDDDDDCA@?>?@A@?=;<;::88888888887766665556667654334454422356654554322212333333234432344445667532233444444443234566777765554444567999877556677888753233468889;;;;::9:9999::9999:;<<<;;::::::;<<<;::989:;;;<<<;;::9987789::;;;;;:999::;;:::::;=>??>?@AABBBCDDD@?=?CEHIGFFGIIKLKJJIGFDB@@ACDEEFHJLLLJHFFGGIJLMNNMMMNOPQQQRQRQPONLJIIJLNPRUVUUUUUUVVUSQPOPQSVWWUPMLMPSTUUTSSRPOOPSUUUTTRQOMLLNPQQR~S~TVX\\ZYXYYYVUVWYWSNLPX_`^\\Z~X~X~W~X~Z~]~_~`bdeffe~d~cbbccccccb`][~Z~\\~`cfikkkifdaaaaaa`~^~\\~YURQQSVY\\_``^[YUTSSTTWXXWTSRPNKKNMMLMPSVUSPNNOOMMLLKKKLL`z_z^z^z_z`z`z`z`z_z^z^z_zazczdzdzdzczcycycyczczczczczczczczczczczczczczczczczczczdzdzezezezdzdzdzdzdzdzdzezezfzgzgzizjzmynyqzqzpznzlzkzjziyixixjxkymynynymymykyjyjzizgzg{h{kzlzlzkzkzkzjzhzgzgzgzgzhzgzgzgzgzgzgzfzfzgzjzkzkzkzjzjzjzjzmznzmzkzizhzhyizkzmzm{m{mzl{l{m{l{k{izhzhzh{g{hzhzgzgzhzhzh{h{hzgzhzizizjzi{i{j{jzizhzgygyhygygzgzgzfzezd{c{a{^{^{`{a{^{dzeydxbx`xaxdxcy^z\\{^|a{b{a{`z_z^z_z`zazdzdzdzdzczczczczdze{f{h|j|j|k{k{k{kzjzjzjzizizh{i{h|e}a}c}f|i|j|j|j{jzjzj{j{j{k{l{l{l{lzlzl{l{k|j|k|l}m~jhgghh~h|g{f{f{f{f{f{e{e{d{d{c{b{b{b{bzbzczczb{b{bzczcybzazaza{a{a{a{b{b{b{b{a{`{`{_|a}c|e{f{f{f{fzfzfzdzbzbzcycycyby`z`zaz`|`|_}^}\\}\\}\\|_|_|_|_|_|_|_|^}]}^}^}_|a|c|b|a|a|a|a|`|a{b{c{c{d{c{d{d|f|g}g}f}d~b~`~_~_~__```~`~`~_~_~^^]]\\\\[ZZYYXXVUUWXXXWVVUUWXYZ[\\]]]\\\\]_~`~`_~_~_~^~_~^~]~]~\\\\[YXWVUTUUTUUUTSRPONNMLLKJKKIGFDCBCCCCB@>=<=>?>=;:;:9977788899988777666556678765445565533467765654433323444444345543455445677543334434445543345656788876555444568::999755678888875434457999:;;;;::9::::::::::::;<=<<<;;;;;;<<<<<;;:9::;;;<<<<;::9988899::;<<;;;::9:;<<;;;;;<>?@@?@ABCCCCDEEDA@>@DGJKIGGHIJKLLKJHGFDB@@ACDEEFHKMNMKHFFGHIJLMNNNMMNOPQQRRRSRQPNMKJJKMOQSUVVVUUUVVWWUTRQPRTVXXVQNNNP~S~UVVUUTSQPOPRTUVUUSRPONNPQRRR~S~UVX\\\\[YYZZXWW~X~YWSOMQX`a_][Y~Y~X~Y~Z~]~_~acdeffe~d~cccbbccccb`][~Z~\\~`cfikkkifdaaaaaa`~^~\\YURQQSUX\\^___\\YUSSSSTVWWVSRQPMLKNNMLMPSVUSPNNOPONNLLKKLL`z_z^{]{_z`zaz`z`z_z^z^z_zazczezezezdzcycycycydzdzdycycyczczczczdzd{d{dzdzdzczczczczdzezezezdzdzczczczdzdzdzezfzfzgzizjzlznzpzozoznzlzkzizhyhxjxjxlymynynymymykyjyizhzgzi{h{lzmzmzlzkzkzjzizhzhzgzhzhzgzgzgzhzgzgzgzg{h{jzkzkzkzjzkzjzjzmznzm{kzizhzhyizkzmzm{m{mzl{l{m{l{k{izhzhzh{g{h{gzgzfzfzgzh{g{g{g{hzizizjzi{i{j{j{izizhygyhyhyhzhzgzgzezd{c{a{_{_{a{a{_{cydydxbxax`xfyey^{]{_|b{b{bzaz_z_z_z`zazbzczbzazbzazazaybzc{d{f|h|h|j|j{i{izizhzhzhzi{h{h|h|e|a|c|g|i|j|j{j{j{j{j{j{j{k{l{l{k{kzk{k|k|j|k|k|k~kjiiiij~j|h{f{f{f{f{f{e{d{c{c{b{a{a{a{bzbzczbzbzbzczczczbzazb{a{a{a{a{a{a{b{b{a{`{`{`|a|c{e{g{g{g{g{h{hzfzc{b{bzbzczbza{`{`|`}`}_~]~\\}\\}\\|^|^|_|^|^}]}]|]}\\}]~^}_}`}a}a}a}`|`}_}_|`|a{b{c{d|c{d|f|g|h}g}e}c~a~`~_~^~_`aaaa`__^^]\\\\[ZZZYYXXVUUWXXXXWVUUVWXZ[[[\\\\\\\\]^~_~_~_~_^~^~^~^~]~\\~\\\\[YWVVUTTTTTUUTSQQPONMMLLKKJHFEDCBBCCCB@><<<=>=<;::::98778999999988876656888987656556554466776565555554455555545665456555667864344454555654345677778:998665555678::999766778899976434457999:;<<<;;:;;;;;;;:::::;<<====<<<<<<<==<<<;:;;<<==<=<;;::99889:;;;<<<<;;::;;<=<<<<<=?@A@@ABBCDDDEFFEBA?@EILLJHHIJKKLLLJHGFDB@@ACDEFGILNOOMJGGGHIKMMOOONNOPQQRSSSTTRQPNLKKLMPR~S~UVVVVVVVWWXVUSRQSUWYYVSPOOP~S~UVVVUUTRPOOQSUVVVTSPOOOQQRRS~T~UUX]^]ZZ[[ZY~Y}Z}ZXTPMQYaa`^\\Z~Z~Y~Z~[~]~_~acdfffe~e~d~c~cccbbbcb`][~Z~\\~_bfikkkifdaaaa```~^~\\YUSQQSUX[^___\\YTSRSSTVWWUSRQOMLLONMLMPSVUSPNNOPPOONLKKMM"
  },
  {
    "path": "shell/resources/mac/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"16x16\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"32x32\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"128x128\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"256x256\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"mac\",\n      \"size\" : \"512x512\",\n      \"scale\" : \"2x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "shell/resources/mac/Assets.xcassets/Contents.json",
    "content": "{\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}"
  },
  {
    "path": "shell/resources/mac/Base.lproj/MainMenu.xib",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.Cocoa.XIB\" version=\"3.0\" toolsVersion=\"21507\" targetRuntime=\"MacOSX.Cocoa\" propertyAccessControl=\"none\" useAutolayout=\"YES\" customObjectInstantitationMethod=\"direct\">\n    <dependencies>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.CocoaPlugin\" version=\"21507\"/>\n        <capability name=\"documents saved in the Xcode 8 format\" minToolsVersion=\"8.0\"/>\n    </dependencies>\n    <objects>\n        <customObject id=\"-2\" userLabel=\"File's Owner\" customClass=\"NSApplication\">\n            <connections>\n                <outlet property=\"delegate\" destination=\"Voe-Tx-rLC\" id=\"GzC-gU-4Uq\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"-1\" userLabel=\"First Responder\" customClass=\"FirstResponder\"/>\n        <customObject id=\"-3\" userLabel=\"Application\" customClass=\"NSObject\"/>\n        <customObject id=\"Voe-Tx-rLC\" customClass=\"AppDelegate\">\n            <connections>\n                <outlet property=\"window\" destination=\"QvC-M9-y7g\" id=\"gIp-Ho-8D9\"/>\n            </connections>\n        </customObject>\n        <customObject id=\"YLy-65-1bz\" customClass=\"NSFontManager\"/>\n        <menu title=\"Main Menu\" systemMenu=\"main\" id=\"AYu-sK-qS6\">\n            <items>\n                <menuItem title=\"IGLSample\" id=\"1Xt-HY-uBw\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"IGLSample\" systemMenu=\"apple\" id=\"uQy-DD-JDr\">\n                        <items>\n                            <menuItem title=\"About IGLSample\" id=\"5kV-Vb-QxS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"orderFrontStandardAboutPanel:\" target=\"-1\" id=\"Exp-CZ-Vem\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"VOq-y0-SEH\"/>\n                            <menuItem title=\"Preferences…\" keyEquivalent=\",\" id=\"BOF-NM-1cW\"/>\n                            <menuItem isSeparatorItem=\"YES\" id=\"wFC-TO-SCJ\"/>\n                            <menuItem title=\"Services\" id=\"NMo-om-nkz\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Services\" systemMenu=\"services\" id=\"hz9-B4-Xy5\"/>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"4je-JR-u6R\"/>\n                            <menuItem title=\"Hide IGLSample\" keyEquivalent=\"h\" id=\"Olw-nP-bQN\">\n                                <connections>\n                                    <action selector=\"hide:\" target=\"-1\" id=\"PnN-Uc-m68\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Hide Others\" keyEquivalent=\"h\" id=\"Vdr-fp-XzO\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"hideOtherApplications:\" target=\"-1\" id=\"VT4-aY-XCT\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Show All\" id=\"Kd2-mp-pUS\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"unhideAllApplications:\" target=\"-1\" id=\"Dhg-Le-xox\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"kCx-OE-vgT\"/>\n                            <menuItem title=\"Quit IGLSample\" keyEquivalent=\"q\" id=\"4sb-4s-VLi\">\n                                <connections>\n                                    <action selector=\"terminate:\" target=\"-1\" id=\"Te7-pn-YzF\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"File\" id=\"dMs-cI-mzQ\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"File\" id=\"bib-Uj-vzu\">\n                        <items>\n                            <menuItem title=\"New\" keyEquivalent=\"n\" id=\"Was-JA-tGl\">\n                                <connections>\n                                    <action selector=\"newDocument:\" target=\"-1\" id=\"4Si-XN-c54\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Open…\" keyEquivalent=\"o\" id=\"IAo-SY-fd9\">\n                                <connections>\n                                    <action selector=\"openDocument:\" target=\"-1\" id=\"bVn-NM-KNZ\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Open Recent\" id=\"tXI-mr-wws\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Open Recent\" systemMenu=\"recentDocuments\" id=\"oas-Oc-fiZ\">\n                                    <items>\n                                        <menuItem title=\"Clear Menu\" id=\"vNY-rz-j42\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"clearRecentDocuments:\" target=\"-1\" id=\"Daa-9d-B3U\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"m54-Is-iLE\"/>\n                            <menuItem title=\"Close\" keyEquivalent=\"w\" id=\"DVo-aG-piG\">\n                                <connections>\n                                    <action selector=\"performClose:\" target=\"-1\" id=\"HmO-Ls-i7Q\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Save…\" keyEquivalent=\"s\" id=\"pxx-59-PXV\">\n                                <connections>\n                                    <action selector=\"saveDocument:\" target=\"-1\" id=\"teZ-XB-qJY\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Save As…\" keyEquivalent=\"S\" id=\"Bw7-FT-i3A\">\n                                <connections>\n                                    <action selector=\"saveDocumentAs:\" target=\"-1\" id=\"mDf-zr-I0C\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Revert to Saved\" keyEquivalent=\"r\" id=\"KaW-ft-85H\">\n                                <connections>\n                                    <action selector=\"revertDocumentToSaved:\" target=\"-1\" id=\"iJ3-Pv-kwq\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"aJh-i4-bef\"/>\n                            <menuItem title=\"Page Setup…\" keyEquivalent=\"P\" id=\"qIS-W8-SiK\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" shift=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"runPageLayout:\" target=\"-1\" id=\"Din-rz-gC5\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Print…\" keyEquivalent=\"p\" id=\"aTl-1u-JFS\">\n                                <connections>\n                                    <action selector=\"print:\" target=\"-1\" id=\"qaZ-4w-aoO\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Edit\" id=\"5QF-Oa-p0T\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Edit\" id=\"W48-6f-4Dl\">\n                        <items>\n                            <menuItem title=\"Undo\" keyEquivalent=\"z\" id=\"dRJ-4n-Yzg\">\n                                <connections>\n                                    <action selector=\"undo:\" target=\"-1\" id=\"M6e-cu-g7V\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Redo\" keyEquivalent=\"Z\" id=\"6dh-zS-Vam\">\n                                <connections>\n                                    <action selector=\"redo:\" target=\"-1\" id=\"oIA-Rs-6OD\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"WRV-NI-Exz\"/>\n                            <menuItem title=\"Cut\" keyEquivalent=\"x\" id=\"uRl-iY-unG\">\n                                <connections>\n                                    <action selector=\"cut:\" target=\"-1\" id=\"YJe-68-I9s\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Copy\" keyEquivalent=\"c\" id=\"x3v-GG-iWU\">\n                                <connections>\n                                    <action selector=\"copy:\" target=\"-1\" id=\"G1f-GL-Joy\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste\" keyEquivalent=\"v\" id=\"gVA-U4-sdL\">\n                                <connections>\n                                    <action selector=\"paste:\" target=\"-1\" id=\"UvS-8e-Qdg\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Paste and Match Style\" keyEquivalent=\"V\" id=\"WeT-3V-zwk\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"pasteAsPlainText:\" target=\"-1\" id=\"cEh-KX-wJQ\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Delete\" id=\"pa3-QI-u2k\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"delete:\" target=\"-1\" id=\"0Mk-Ml-PaM\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Select All\" keyEquivalent=\"a\" id=\"Ruw-6m-B2m\">\n                                <connections>\n                                    <action selector=\"selectAll:\" target=\"-1\" id=\"VNm-Mi-diN\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"uyl-h8-XO2\"/>\n                            <menuItem title=\"Find\" id=\"4EN-yA-p0u\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Find\" id=\"1b7-l0-nxx\">\n                                    <items>\n                                        <menuItem title=\"Find…\" tag=\"1\" keyEquivalent=\"f\" id=\"Xz5-n4-O0W\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"cD7-Qs-BN4\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find and Replace…\" tag=\"12\" keyEquivalent=\"f\" id=\"YEy-JH-Tfz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"WD3-Gg-5AJ\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Next\" tag=\"2\" keyEquivalent=\"g\" id=\"q09-fT-Sye\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"NDo-RZ-v9R\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Find Previous\" tag=\"3\" keyEquivalent=\"G\" id=\"OwM-mh-QMV\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"HOh-sY-3ay\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Use Selection for Find\" tag=\"7\" keyEquivalent=\"e\" id=\"buJ-ug-pKt\">\n                                            <connections>\n                                                <action selector=\"performFindPanelAction:\" target=\"-1\" id=\"U76-nv-p5D\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Jump to Selection\" keyEquivalent=\"j\" id=\"S0p-oC-mLd\">\n                                            <connections>\n                                                <action selector=\"centerSelectionInVisibleArea:\" target=\"-1\" id=\"IOG-6D-g5B\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Spelling and Grammar\" id=\"Dv1-io-Yv7\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Spelling\" id=\"3IN-sU-3Bg\">\n                                    <items>\n                                        <menuItem title=\"Show Spelling and Grammar\" keyEquivalent=\":\" id=\"HFo-cy-zxI\">\n                                            <connections>\n                                                <action selector=\"showGuessPanel:\" target=\"-1\" id=\"vFj-Ks-hy3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Document Now\" keyEquivalent=\";\" id=\"hz2-CU-CR7\">\n                                            <connections>\n                                                <action selector=\"checkSpelling:\" target=\"-1\" id=\"fz7-VC-reM\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"bNw-od-mp5\"/>\n                                        <menuItem title=\"Check Spelling While Typing\" id=\"rbD-Rh-wIN\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleContinuousSpellChecking:\" target=\"-1\" id=\"7w6-Qz-0kB\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Check Grammar With Spelling\" id=\"mK6-2p-4JG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleGrammarChecking:\" target=\"-1\" id=\"muD-Qn-j4w\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Correct Spelling Automatically\" id=\"78Y-hA-62v\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticSpellingCorrection:\" target=\"-1\" id=\"2lM-Qi-WAP\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Substitutions\" id=\"9ic-FL-obx\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Substitutions\" id=\"FeM-D8-WVr\">\n                                    <items>\n                                        <menuItem title=\"Show Substitutions\" id=\"z6F-FW-3nz\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"orderFrontSubstitutionsPanel:\" target=\"-1\" id=\"oku-mr-iSq\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"gPx-C9-uUO\"/>\n                                        <menuItem title=\"Smart Copy/Paste\" id=\"9yt-4B-nSM\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleSmartInsertDelete:\" target=\"-1\" id=\"3IJ-Se-DZD\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Quotes\" id=\"hQb-2v-fYv\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticQuoteSubstitution:\" target=\"-1\" id=\"ptq-xd-QOA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Dashes\" id=\"rgM-f4-ycn\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDashSubstitution:\" target=\"-1\" id=\"oCt-pO-9gS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smart Links\" id=\"cwL-P1-jid\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticLinkDetection:\" target=\"-1\" id=\"Gip-E3-Fov\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Data Detectors\" id=\"tRr-pd-1PS\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticDataDetection:\" target=\"-1\" id=\"R1I-Nq-Kbl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Text Replacement\" id=\"HFQ-gK-NFA\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleAutomaticTextReplacement:\" target=\"-1\" id=\"DvP-Fe-Py6\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Transformations\" id=\"2oI-Rn-ZJC\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Transformations\" id=\"c8a-y6-VQd\">\n                                    <items>\n                                        <menuItem title=\"Make Upper Case\" id=\"vmV-6d-7jI\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"uppercaseWord:\" target=\"-1\" id=\"sPh-Tk-edu\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Make Lower Case\" id=\"d9M-CD-aMd\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"lowercaseWord:\" target=\"-1\" id=\"iUZ-b5-hil\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Capitalize\" id=\"UEZ-Bs-lqG\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"capitalizeWord:\" target=\"-1\" id=\"26H-TL-nsh\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Speech\" id=\"xrE-MZ-jX0\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Speech\" id=\"3rS-ZA-NoH\">\n                                    <items>\n                                        <menuItem title=\"Start Speaking\" id=\"Ynk-f8-cLZ\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"startSpeaking:\" target=\"-1\" id=\"654-Ng-kyl\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Stop Speaking\" id=\"Oyz-dy-DGm\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"stopSpeaking:\" target=\"-1\" id=\"dX8-6p-jy9\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Format\" id=\"jxT-CU-nIS\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Format\" id=\"GEO-Iw-cKr\">\n                        <items>\n                            <menuItem title=\"Font\" id=\"Gi5-1S-RQB\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Font\" systemMenu=\"font\" id=\"aXa-aM-Jaq\">\n                                    <items>\n                                        <menuItem title=\"Show Fonts\" keyEquivalent=\"t\" id=\"Q5e-8K-NDq\">\n                                            <connections>\n                                                <action selector=\"orderFrontFontPanel:\" target=\"YLy-65-1bz\" id=\"WHr-nq-2xA\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Bold\" tag=\"2\" keyEquivalent=\"b\" id=\"GB9-OM-e27\">\n                                            <connections>\n                                                <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"hqk-hr-sYV\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Italic\" tag=\"1\" keyEquivalent=\"i\" id=\"Vjx-xi-njq\">\n                                            <connections>\n                                                <action selector=\"addFontTrait:\" target=\"YLy-65-1bz\" id=\"IHV-OB-c03\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Underline\" keyEquivalent=\"u\" id=\"WRG-CD-K1S\">\n                                            <connections>\n                                                <action selector=\"underline:\" target=\"-1\" id=\"FYS-2b-JAY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"5gT-KC-WSO\"/>\n                                        <menuItem title=\"Bigger\" tag=\"3\" keyEquivalent=\"+\" id=\"Ptp-SP-VEL\">\n                                            <connections>\n                                                <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"Uc7-di-UnL\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Smaller\" tag=\"4\" keyEquivalent=\"-\" id=\"i1d-Er-qST\">\n                                            <connections>\n                                                <action selector=\"modifyFont:\" target=\"YLy-65-1bz\" id=\"HcX-Lf-eNd\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"kx3-Dk-x3B\"/>\n                                        <menuItem title=\"Kern\" id=\"jBQ-r6-VK2\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Kern\" id=\"tlD-Oa-oAM\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"GUa-eO-cwY\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useStandardKerning:\" target=\"-1\" id=\"6dk-9l-Ckg\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use None\" id=\"cDB-IK-hbR\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"turnOffKerning:\" target=\"-1\" id=\"U8a-gz-Maa\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Tighten\" id=\"46P-cB-AYj\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"tightenKerning:\" target=\"-1\" id=\"hr7-Nz-8ro\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Loosen\" id=\"ogc-rX-tC1\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"loosenKerning:\" target=\"-1\" id=\"8i4-f9-FKE\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Ligatures\" id=\"o6e-r0-MWq\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Ligatures\" id=\"w0m-vy-SC9\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"agt-UL-0e3\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useStandardLigatures:\" target=\"-1\" id=\"7uR-wd-Dx6\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use None\" id=\"J7y-lM-qPV\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"turnOffLigatures:\" target=\"-1\" id=\"iX2-gA-Ilz\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Use All\" id=\"xQD-1f-W4t\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"useAllLigatures:\" target=\"-1\" id=\"KcB-kA-TuK\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem title=\"Baseline\" id=\"OaQ-X3-Vso\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Baseline\" id=\"ijk-EB-dga\">\n                                                <items>\n                                                    <menuItem title=\"Use Default\" id=\"3Om-Ey-2VK\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"unscript:\" target=\"-1\" id=\"0vZ-95-Ywn\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Superscript\" id=\"Rqc-34-cIF\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"superscript:\" target=\"-1\" id=\"3qV-fo-wpU\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Subscript\" id=\"I0S-gh-46l\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"subscript:\" target=\"-1\" id=\"Q6W-4W-IGz\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Raise\" id=\"2h7-ER-AoG\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"raiseBaseline:\" target=\"-1\" id=\"4sk-31-7Q9\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem title=\"Lower\" id=\"1tx-W0-xDw\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"lowerBaseline:\" target=\"-1\" id=\"OF1-bc-KW4\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"Ndw-q3-faq\"/>\n                                        <menuItem title=\"Show Colors\" keyEquivalent=\"C\" id=\"bgn-CT-cEk\">\n                                            <connections>\n                                                <action selector=\"orderFrontColorPanel:\" target=\"-1\" id=\"mSX-Xz-DV3\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"iMs-zA-UFJ\"/>\n                                        <menuItem title=\"Copy Style\" keyEquivalent=\"c\" id=\"5Vv-lz-BsD\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"copyFont:\" target=\"-1\" id=\"GJO-xA-L4q\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste Style\" keyEquivalent=\"v\" id=\"vKC-jM-MkH\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteFont:\" target=\"-1\" id=\"JfD-CL-leO\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                            <menuItem title=\"Text\" id=\"Fal-I4-PZk\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <menu key=\"submenu\" title=\"Text\" id=\"d9c-me-L2H\">\n                                    <items>\n                                        <menuItem title=\"Align Left\" keyEquivalent=\"{\" id=\"ZM1-6Q-yy1\">\n                                            <connections>\n                                                <action selector=\"alignLeft:\" target=\"-1\" id=\"zUv-R1-uAa\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Center\" keyEquivalent=\"|\" id=\"VIY-Ag-zcb\">\n                                            <connections>\n                                                <action selector=\"alignCenter:\" target=\"-1\" id=\"spX-mk-kcS\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Justify\" id=\"J5U-5w-g23\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"alignJustified:\" target=\"-1\" id=\"ljL-7U-jND\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Align Right\" keyEquivalent=\"}\" id=\"wb2-vD-lq4\">\n                                            <connections>\n                                                <action selector=\"alignRight:\" target=\"-1\" id=\"r48-bG-YeY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"4s2-GY-VfK\"/>\n                                        <menuItem title=\"Writing Direction\" id=\"H1b-Si-o9J\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <menu key=\"submenu\" title=\"Writing Direction\" id=\"8mr-sm-Yjd\">\n                                                <items>\n                                                    <menuItem title=\"Paragraph\" enabled=\"NO\" id=\"ZvO-Gk-QUH\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                    </menuItem>\n                                                    <menuItem id=\"YGs-j5-SAR\">\n                                                        <string key=\"title\">\tDefault</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionNatural:\" target=\"-1\" id=\"qtV-5e-UBP\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"Lbh-J2-qVU\">\n                                                        <string key=\"title\">\tLeft to Right</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionLeftToRight:\" target=\"-1\" id=\"S0X-9S-QSf\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"jFq-tB-4Kx\">\n                                                        <string key=\"title\">\tRight to Left</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeBaseWritingDirectionRightToLeft:\" target=\"-1\" id=\"5fk-qB-AqJ\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem isSeparatorItem=\"YES\" id=\"swp-gr-a21\"/>\n                                                    <menuItem title=\"Selection\" enabled=\"NO\" id=\"cqv-fj-IhA\">\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                    </menuItem>\n                                                    <menuItem id=\"Nop-cj-93Q\">\n                                                        <string key=\"title\">\tDefault</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionNatural:\" target=\"-1\" id=\"lPI-Se-ZHp\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"BgM-ve-c93\">\n                                                        <string key=\"title\">\tLeft to Right</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionLeftToRight:\" target=\"-1\" id=\"caW-Bv-w94\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                    <menuItem id=\"RB4-Sm-HuC\">\n                                                        <string key=\"title\">\tRight to Left</string>\n                                                        <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                                        <connections>\n                                                            <action selector=\"makeTextWritingDirectionRightToLeft:\" target=\"-1\" id=\"EXD-6r-ZUu\"/>\n                                                        </connections>\n                                                    </menuItem>\n                                                </items>\n                                            </menu>\n                                        </menuItem>\n                                        <menuItem isSeparatorItem=\"YES\" id=\"fKy-g9-1gm\"/>\n                                        <menuItem title=\"Show Ruler\" id=\"vLm-3I-IUL\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                            <connections>\n                                                <action selector=\"toggleRuler:\" target=\"-1\" id=\"FOx-HJ-KwY\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Copy Ruler\" keyEquivalent=\"c\" id=\"MkV-Pr-PK5\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"copyRuler:\" target=\"-1\" id=\"71i-fW-3W2\"/>\n                                            </connections>\n                                        </menuItem>\n                                        <menuItem title=\"Paste Ruler\" keyEquivalent=\"v\" id=\"LVM-kO-fVI\">\n                                            <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                            <connections>\n                                                <action selector=\"pasteRuler:\" target=\"-1\" id=\"cSh-wd-qM2\"/>\n                                            </connections>\n                                        </menuItem>\n                                    </items>\n                                </menu>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"View\" id=\"H8h-7b-M4v\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"View\" id=\"HyV-fh-RgO\">\n                        <items>\n                            <menuItem title=\"Show Toolbar\" keyEquivalent=\"t\" id=\"snW-S8-Cw5\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" option=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleToolbarShown:\" target=\"-1\" id=\"BXY-wc-z0C\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Customize Toolbar…\" id=\"1UK-8n-QPP\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"runToolbarCustomizationPalette:\" target=\"-1\" id=\"pQI-g3-MTW\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"hB3-LF-h0Y\"/>\n                            <menuItem title=\"Show Sidebar\" keyEquivalent=\"s\" id=\"kIP-vf-haE\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleSidebar:\" target=\"-1\" id=\"iwa-gc-5KM\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Enter Full Screen\" keyEquivalent=\"f\" id=\"4J7-dP-txa\">\n                                <modifierMask key=\"keyEquivalentModifierMask\" control=\"YES\" command=\"YES\"/>\n                                <connections>\n                                    <action selector=\"toggleFullScreen:\" target=\"-1\" id=\"dU3-MA-1Rq\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Window\" id=\"aUF-d1-5bR\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Window\" systemMenu=\"window\" id=\"Td7-aD-5lo\">\n                        <items>\n                            <menuItem title=\"Minimize\" keyEquivalent=\"m\" id=\"OY7-WF-poV\">\n                                <connections>\n                                    <action selector=\"performMiniaturize:\" target=\"-1\" id=\"VwT-WD-YPe\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Zoom\" id=\"R4o-n2-Eq4\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"performZoom:\" target=\"-1\" id=\"DIl-cC-cCs\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem isSeparatorItem=\"YES\" id=\"eu3-7i-yIM\"/>\n                            <menuItem title=\"Bring All to Front\" id=\"LE2-aR-0XJ\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"arrangeInFront:\" target=\"-1\" id=\"DRN-fu-gQh\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Debug\" id=\"OEF-Sp-0RM\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Debug\" id=\"VfV-hD-Kgz\">\n                        <items>\n                            <menuItem title=\"Tear down ViewController\" id=\"BLa-cg-scq\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"didClickTearDownViewController:\" target=\"Voe-Tx-rLC\" id=\"jQV-3G-pLz\"/>\n                                </connections>\n                            </menuItem>\n                            <menuItem title=\"Reload ViewController\" id=\"9aA-2t-wwT\">\n                                <modifierMask key=\"keyEquivalentModifierMask\"/>\n                                <connections>\n                                    <action selector=\"didClickReloadViewController:\" target=\"Voe-Tx-rLC\" id=\"iW2-MY-QWu\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n                <menuItem title=\"Help\" id=\"wpr-3q-Mcd\">\n                    <modifierMask key=\"keyEquivalentModifierMask\"/>\n                    <menu key=\"submenu\" title=\"Help\" systemMenu=\"help\" id=\"F2S-fz-NVQ\">\n                        <items>\n                            <menuItem title=\"IGLSample Help\" keyEquivalent=\"?\" id=\"FKE-Sm-Kum\">\n                                <connections>\n                                    <action selector=\"showHelp:\" target=\"-1\" id=\"y7X-2Q-9no\"/>\n                                </connections>\n                            </menuItem>\n                        </items>\n                    </menu>\n                </menuItem>\n            </items>\n            <point key=\"canvasLocation\" x=\"140\" y=\"20\"/>\n        </menu>\n        <window title=\"IGLSample\" allowsToolTipsWhenApplicationIsInactive=\"NO\" autorecalculatesKeyViewLoop=\"NO\" releasedWhenClosed=\"NO\" animationBehavior=\"default\" id=\"QvC-M9-y7g\">\n            <windowStyleMask key=\"styleMask\" titled=\"YES\" closable=\"YES\" miniaturizable=\"YES\" resizable=\"YES\"/>\n            <windowPositionMask key=\"initialPositionMask\" leftStrut=\"YES\" rightStrut=\"YES\" topStrut=\"YES\" bottomStrut=\"YES\"/>\n            <rect key=\"contentRect\" x=\"335\" y=\"390\" width=\"480\" height=\"360\"/>\n            <rect key=\"screenRect\" x=\"0.0\" y=\"0.0\" width=\"3440\" height=\"1415\"/>\n            <view key=\"contentView\" wantsLayer=\"YES\" id=\"EiT-Mj-1SZ\">\n                <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"480\" height=\"360\"/>\n                <autoresizingMask key=\"autoresizingMask\"/>\n            </view>\n            <point key=\"canvasLocation\" x=\"140\" y=\"281\"/>\n        </window>\n    </objects>\n</document>\n"
  },
  {
    "path": "shell/resources/mac/Entitlements.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"https://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n    <dict>\n        <key>com.apple.security.get-task-allow</key>\n        <true/>\n    </dict>\n</plist>\n"
  },
  {
    "path": "shell/resources/mac/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>$(DEVELOPMENT_LANGUAGE)</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIconFile</key>\n\t<string></string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>$(PRODUCT_NAME)</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>1.0</string>\n\t<key>CFBundleVersion</key>\n\t<string>1</string>\n\t<key>LSMinimumSystemVersion</key>\n\t<string>$(MACOSX_DEPLOYMENT_TARGET)</string>\n\t<key>NSHumanReadableCopyright</key>\n\t<string>Copyright © 2023 Meta Platforms, Inc. All rights reserved.</string>\n\t<key>NSMainNibFile</key>\n\t<string>MainMenu</string>\n\t<key>NSPrincipalClass</key>\n\t<string>NSApplication</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "shell/resources/models/DamagedHelmet.gltf",
    "content": "{\r\n    \"accessors\" : [\r\n        {\r\n            \"bufferView\" : 0,\r\n            \"componentType\" : 5123,\r\n            \"count\" : 46356,\r\n            \"max\" : [\r\n                14555\r\n            ],\r\n            \"min\" : [\r\n                0\r\n            ],\r\n            \"type\" : \"SCALAR\"\r\n        },\r\n        {\r\n            \"bufferView\" : 1,\r\n            \"componentType\" : 5126,\r\n            \"count\" : 14556,\r\n            \"max\" : [\r\n                0.9424954056739807,\r\n                0.8128451108932495,\r\n                0.900973916053772\r\n            ],\r\n            \"min\" : [\r\n                -0.9474585652351379,\r\n                -1.18715500831604,\r\n                -0.9009949564933777\r\n            ],\r\n            \"type\" : \"VEC3\"\r\n        },\r\n        {\r\n            \"bufferView\" : 2,\r\n            \"componentType\" : 5126,\r\n            \"count\" : 14556,\r\n            \"max\" : [\r\n                1.0,\r\n                1.0,\r\n                1.0\r\n            ],\r\n            \"min\" : [\r\n                -1.0,\r\n                -1.0,\r\n                -1.0\r\n            ],\r\n            \"type\" : \"VEC3\"\r\n        },\r\n        {\r\n            \"bufferView\" : 3,\r\n            \"componentType\" : 5126,\r\n            \"count\" : 14556,\r\n            \"max\" : [\r\n                0.9999759793281555,\r\n                1.998665988445282\r\n            ],\r\n            \"min\" : [\r\n                0.002448640065267682,\r\n                1.0005531199858524\r\n            ],\r\n            \"type\" : \"VEC2\"\r\n        }\r\n    ],\r\n    \"asset\" : {\r\n        \"generator\" : \"Khronos Blender glTF 2.0 exporter\",\r\n        \"version\" : \"2.0\"\r\n    },\r\n    \"bufferViews\" : [\r\n        {\r\n            \"buffer\" : 0,\r\n            \"byteLength\" : 92712,\r\n            \"byteOffset\" : 0,\r\n            \"target\" : 34963\r\n        },\r\n        {\r\n            \"buffer\" : 0,\r\n            \"byteLength\" : 174672,\r\n            \"byteOffset\" : 92712,\r\n            \"target\" : 34962\r\n        },\r\n        {\r\n            \"buffer\" : 0,\r\n            \"byteLength\" : 174672,\r\n            \"byteOffset\" : 267384,\r\n            \"target\" : 34962\r\n        },\r\n        {\r\n            \"buffer\" : 0,\r\n            \"byteLength\" : 116448,\r\n            \"byteOffset\" : 442056,\r\n            \"target\" : 34962\r\n        }\r\n    ],\r\n    \"buffers\" : [\r\n        {\r\n            \"byteLength\" : 558504,\r\n            \"uri\" : \"data:application/octet-stream;base64,AAABAAIAAgADAAAAAwACAAQABAAFAAMABgAFAAQABAAHAAYABgAHAAgACAAJAAYACgAJAAgACAALAAoADAAAAAMADQAOAA8ADwAQAA0AEQAPAA4ADgASABEADwARABMAEwAUAA8AEAAPABQAFAAVABAAFgARABIAEwARABYAEgAXABYAFgAYABMAGQAMABoAGgAbABkAHAAZABsAAwAaAAwAHQAeAB8AHwAgAB0AHgADAAUABQAfAB4AHwAFAAYABgAhAB8AIAAfACEAIQAiACAAIgAhACMAIwAkACIAIQAGAAkACQAjACEAIwAJAAoACgAlACMAJAAjACUAJQAmACQAJwAdACAAGwAoABwAKQAcACgAKAAqACkAKwApACoAKgAsACsALQAuAC8ALwAwAC0AMQAwAC8ALwAyADEAMQAyADMAMwA0ADEANQA0ADMAMwA2ADUANwArACwAOAA5ADoAOgA7ADgAPAA4ADsAPQA7ADoAOgA+AD0ALAA/ADcAQAAtADAANwA/AEEAQQBCADcAQwBAAEQAMABEAEAARABFAEMARgBFAEQARABHAEYARgBHAEgANABIAEcASABJAEYASgBJAEgASABLAEoARwBEADAAMAAxAEcARwAxADQASwBIADQANAA1AEsATAA+AE0ATQBOAEwATABOAE8ATwBQAEwAUQBMAFAAUABSAFEAUwBRAFIAUgBUAFMAUwBUAFUAVQBWAFMAVwBTAFYAVgAYAFcAVgBVAFgAGABWAFgAUwBXAD0APQBRAFMAPQA+AEwATABRAD0ATQA+ADoAOgBZAE0AWQA6ADkAOQBaAFkAPQBXAFsAWwA7AD0AOwBbADwAFwA8AFsAWwAWABcAVwAYABYAFgBbAFcAWAATABgAXABdAF4AXgBfAFwAYABfAF4AXgBhAGAAYABhAGIAYgBjAGAAZABjAGIAYgBlAGQAZABlAGYAZgBnAGQAaABnAGYAZgBpAGgAaABpAGoAagBrAGgAbABcAF8AXwBtAGwAXwBgAG4AbgBgAGMAbgBtAF8AYwBvAG4AYwBkAHAAcABvAGMAcABkAGcAZwBxAHAAZwBoAHIAcgBxAGcAcgBoAGsAawBzAHIAdABsAG0AbQB1AHQAdQBtAG4AdgB0AHUAdQB3AHYAeAB2AHcAdwB5AHgAeAB5AHoAegB7AHgAeQB3AHwAfAB9AHkAegB5AH0AfQB+AHoAfgB9AH8AfwCAAH4AfQB8AIEAgQB/AH0AfwCBAIIAggCDAH8AgAB/AIMAgwCEAIAAhQCDAIYAhgCHAIUAgwCCAIgAiACGAIMAhgCIAIkAiQCKAIYAhgCKAIcAigCLAIcAiwCMAIcAjQCBAHwAfACOAI0AjgB8AHcAdwB1AI4AbgCOAHUAjgBuAG8AbwCNAI4AjQBvAHAAcACPAI0AgQCNAI8AjwCCAIEAggCPAJAAkACIAIIAjwBwAHEAcQCQAI8AkABxAHIAcgCRAJAAiACQAJEAkQCJAIgAiQCRAJIAkgCTAIkAcwCSAJEAkQByAHMAiQCTAJQAlACKAIkAiwCKAJQAlQCWAJcAlwCYAJUAmQCYAJcAlwCaAJkAmQCaAJsAmwCcAJkAnQCcAJsAmwCeAJ0AnQCeAJ8AnwCgAJ0AoQCgAJ8AnwCiAKEAoQCiAKMAowCkAKEApQCmAKcApwCoAKUAqQCqAKsAqwCsAKkArQCuAKsAqwCvAK0AsACeAJsAmwCxALAAsQCbAJoAmgCyALEAsgCaAJcAlwCzALIAswCXAJYAlgC0ALMAtQCzALQAtAC2ALUAtwCyALMAswC1ALcAsgC3ALgAuACxALIAuQCwALEAsQC4ALkAsAC5ALoAugC7ALAAngCwALsAuwCfAJ4AuwC6ALwAvAC9ALsAnwC7AL0AvQCiAJ8AogC9AL4AvgCjAKIApgC+AL8AvwCnAKYAwAC/AL4AvgDBAMAAwQC+AL0AvQC8AMEAwQC8ALoAqgC/AMIAwgCrAKoAvwDAAMMAwwDCAL8AwgDDAMQAxADFAMIAqwDCAMUAxQCvAKsAwADBAMYAxgDDAMAAxADDAMYAxgDHAMQAxADHAMgAyADJAMQAxQDEAMkAygDJAMgAyADLAMoAzADFAM0AyQDNAMUAzQDJAMoAzQDOAMwArQDMAM4AzgDPAK0A0ACtAM8ArgCtANAA0ADRAK4ArADSANMA0wCpAKwAqADUANUA1QClAKgAoQCkANYA1gDXAKEAoAChANcA1wDYAKAAoADYANkA2QCdAKAAnACdANkA2QDaAJwAnADaANsA2wCZAJwAmACZANsA2wDcAJgAlQCYANwA3ADdAJUA3gDfAOAA4ADhAN4A4gDfAN4A3gDjAOIA4gDjAOQA5ADlAOIA5gDlAOQA5ADnAOYA5gDnAOgA6ADpAOYA6gDpAOgA6ADrAOoA6gDrAOwA7ADtAOoA7gDtAOwA7ADvAO4A7gDvAPAA8ADxAO4A8gDxAPAA8ADzAPIA9AD1APYA9gACAPQAAgD2APcA9wAEAAIABwAEAPgA+AD5AAcABwD5APoA+gAIAAcACwAIAPoA+gD7AAsAzwD8ANAA/QD8AM8AzwD+AP0A/gDPAM4AzgD/AP4AAAH/AM4AzgDNAAABygAAAc0AAQECAQMBAwEEAQEBBQEGAQcBBwEGAQgBCQEKAQsBCwEMAQkBCAENAQcBDgEPARABEQEQAQ8BDwESAREBEwENAQgBFAERARIBEgEVARQBFgEUARUBFQEXARYBGAEWARcBFwEZARgBGgEYARkBGQEbARoBHAEaARsBGwEdARwBHgEcAR0BHQEfAR4BIAEeAR8BHwEhASABIgEjASQBJAElASIBJgEnASgBKAEpASYBJAEqASsBKwElASQBKwEqASwBLQEuAS8BLwEwAS0BLAExASsBMgEzATQBNAE1ATIBNgE3ATgBOAE5ATYBOgExASwBLAE7AToBOgE7ATwBPAE9AToBPgE/AUABQAFBAT4BQgE9ATwBQwFEAUUBRQFGAUMBPAFHAUIBQgFHARMBEwFIAUIBSQFKAUsBSwFMAUkBCAFIARMBTQFOAU8BTwFQAU0BUQFSAVMBUwFUAVEBVQFRAVQBVAFWAVUBVwFTAVIBUgFYAVcBWQFXAVgBWAFaAVkBWwFZAVoBWgFcAVsBXQFbAVwBXAFeAV0BXwFdAV4BXgFgAV8BYQFfAWABYAFiAWEBYwFhAWIBYgFkAWMBZQFjAWQBZAFmAWUBZwFoAWkBaQFqAWcBawFoAWcBZwFsAWsBawFsAW0BbQFuAWsBbwFuAW0BbQFwAW8BbwFwAXEBcQFyAW8BwQByAXEBcQFzAcEAwQBzAXQBdAHGAMEAxwDGAHQBdAF1AccAxwB1AXYBdgHIAMcAywDIAHYBdgF3AcsAbgFvAbkAuQBvAXIBuQC4AG4BcgG6ALkAugByAcEAbgG4ALcAtwBrAW4BaAFrAbcAtwC1AGgBaAG1ALYAtgBpAWgBeAF5AXoBegF7AXgBfAF5AXgBeAF9AXwBfAF9AX4BfgF/AXwBgAF/AX4BfgGBAYABggGDAYQBhAGFAYIBhgGFAYQBhAGHAYYBhgGHAYgBiAGJAYYBigGJAYgBiAGLAYoBigGLAYwBjAGNAYoBjgGNAYwBjAGPAY4BgQF+AZABkAGRAYEBkgGQAX4BfgF9AZIBkwGSAX0BfQF4AZMBlAGTAXgBeAF7AZQBEAGVAQ4BlgEOAZUBlQGXAZYBBwGYAQUBmQGaAZsBmwGcAZkBnQGaAZkBmQGeAZ0BnQGeAZ8BnwGgAZ0BoQGgAZ8BnwGiAaEBoQGiAaMBowGkAaEBpQGkAaMBowGmAaUBpQGmAacBpwGoAaUBqQGqAasBqwGsAakBrQGuAa8BrwGwAa0BsQGyAbMBswG0AbEBsQG0AbUBtQG2AbEBtwG2AbUBtQG4AbcBuQG6AbsBuwG8AbkBvQG5AbwBvAG+Ab0BvwG7AboBugHAAb8BwQG/AcABwAHCAcEBwwHBAcIBwgHEAcMBxQHDAcQBxAHGAcUBxQHGAccBxwHIAcUByAHHAckByQHKAcgBywHKAckByQHMAcsBzQHLAcwBzAHOAc0BzwHNAc4BzgHQAc8B0QHPAdAB0AHSAdEB0wHUAdUB1QHWAdMB1wHTAdYB1gHYAdcB2QHXAdgB2AHaAdkB2wHZAdoB2gHcAdsB3QHbAdwB3AHeAd0B3wHdAd4B3gHgAd8B4QHfAeAB4AHiAeEB4wHhAeIB4gHkAeMB5QHjAeQB5AHmAeUB5wHlAeYB5gHoAecB6QHnAegB6AHqAekB6wHpAeoB6gHsAesB7QHuAe8B7wHwAe0B8QHvAe4B7gHyAfEB7wHxAfMB8wH0Ae8B8AHvAfQB9AH1AfAB9QH0AfYB9gH3AfUB9AHzAfgB+AH2AfQB9gH4AfkB+QH6AfYB9wH2AfoB+gH7AfcB+wH8Af0B/QH+AfsB/AH/AQACAAL9AfwB/QEAAgECAQICAv0B/gH9AQICAgIDAv4B9QH3AQQCBAIFAvUB8AH1AQUCBQIGAvAB7QHwAQYCBgIHAu0BBgIFAggCCAIJAgYCBwIGAgkCCQIKAgcCCwIIAgUCBQIEAgsCDAILAgQCBAINAgwCDQIEAvcB9wH7AQ0CDgINAvsB+wH+AQ4CDwIOAv4B/gEDAg8CDgIPAhACEAIRAg4CEQIMAg0CDQIOAhECEgIJAggCCgIJAhICCAITAhICEwIIAgsCEgIUAgoCFQILAgwCCwIVAhMCDAIWAhUCFgIMAhECFwIRAhACEQIXAhYCEAIYAhcCLgAnABkCGQIvAC4AIAAZAicALwAZAhoCGgIZAiAAGgIyAC8AMgAaAhsCGwIzADIAJAAbAhoCGgIiACQAIAAiABoCMwAbAhwCHAIbAiQAHAI2ADMAJAAmABwC8gF7AHoAegDxAfIB8QF6AH4AfgDzAfEB8wF+AIAAgAD4AfMB+AGAAIQAhAD5AfgB/wGFAIcAhwAAAv8BAAKHAIwAjAABAgACHQIeAh8CHwIgAh0CIQIgAh8CHwIiAiECIwIeAh0CHQIkAiMCIwIkAiUCJQImAiMCIQIiAicCJwIoAiECJgIlAikCKQIqAiYCKwIqAikCKQIsAisCLQIrAiwCLAIuAi0CLwItAi4CLgIwAi8CMQIvAjACKAInAjECMAIyAjECMwIsAikCKQI0AjMCNAIpAiUCNQIzAjQCNAI2AjUCNwI1AjYCNgI4AjcCOQI2AjQCOAI2AjkCOQI0AjoCNAI7AjoCOQI8AjgCJQI7AjQCMQIyAj0CPQI+AjECMQI+AigCPwJAAkECQQJCAj8CQwJCAkECQQJEAkMCQwJEAkUCRQJGAkMCRwJGAkUCRQJIAkcCSQJHAkgCSAJKAkkCQQJAAksCTAJNAk4CTgJPAkwCTQJMAlACUAJRAk0CUgJQAkwCTAJTAlICUwJMAk8CTwJUAlMCUQJQAlUCVQJQAlICVQJWAlECUgJXAlUCWAJLAlkCWQJaAlgCWgJZAlsCSwJYAkECXAJdAl4CXgJfAlwCXQJcAkQCRAJBAl0CRQJEAlwCXAJgAkUCYAJcAl8CXwJhAmACYgJgAmECYQJjAmICYAJiAkgCSAJFAmACSgJIAmICYgJkAkoCZAJiAmMCYwJlAmQCXwJeAmYCWwJnAloCZwJbAmgCaAJpAmcCaQJoAmoCagJrAmkCbAJtAm4CbgJvAmwCbAJvAnACcAJxAmwCcgJxAnACcAJzAnICdAJyAnMCcwJ1AnQCawJqAnYCdwJ4AnkCeQJ6AncCegJ5AnsCdwJ6AnwCfAJ9AncCdgJ+AmsCbwJuAn8CgAJ+AnYCdgKBAoACggJ/AoMCfwKCAm8CgwKEAoICggKEAoUChQKGAoIChwKGAoUChgKHAnMCdQJzAocChQKIAocCiQKHAogChwKJAnUCiAKKAokCbwKCAoYChgJwAm8CcwJwAoYCiwJ9AnwCjAJ9AosCiwKNAowCjgKNAosCiwKPAo4CjwKLApACfAKQAosCkQKQAnwCkgKQApECkAKSAo8CkQKTApIClAKTApECkQKVApQClQKRApYCfAKWApEClgJXApUClQKXApQClwKVAlcCdwJ9AowCjAKYAncCeAJ3ApgCmAKZAngCVQJXApYClgKaAlUCmgKWAnwCfAJ6ApoCewKaAnoCVgJVApoCmgJ7AlYCVwJSApcCmwKcAp0CnQKeApsCmwKeAp8CnwKgApsCoQKgAp8CnwKiAqECoQKiAqMCowKkAqECpQKkAqMCowKmAqUCpQKmAqcCpwKoAqUCqQKoAqcCpwKqAqkCngKdAqsCqwKsAp4CrQKfAp4CngKsAq0CogKfAq0CrQKuAqICrwKjAqICogKuAq8CpgKjAq8CrwKwAqYCsQKnAqYCpgKwArECqgKnArECsQKyAqoCrAKrArMCswK0AqwCrQKsArQCtAKzArUCtQK2ArQCtgK1ArcCtwK4ArYCuAK3ArkCuQK6ArgCuwK2ArgCuAK8ArsCvAK4AroCugK9ArwCvgK8Ar0CvQK/Ar4CvAK+AsACwAK7ArwCwQLAAr4CvgLCAsECwgK+Ar8CvwLDAsICxALCAsUCxQLGAsQCwgLEAscCxwLBAsICyALHAsQCxALJAsgCxgLJAsQCxgLKAskCxgLLAsoCuwLAAswCzQLMAsACwALBAs0CzALNAq8CrwKuAswCzgLMAq4CzALOArsCtgK7As4CzgK0ArYCtALOAq0CrgKtAs4CsAKvAs0CzQLPArACwQLHAs8CzwLNAsECsQKwAs8CzwLQArEC0ALPAscCxwLIAtAC0QLQAsgCyALSAtEC0ALRArICsgKxAtAC0wLSAsgCyALJAtMC0wLJAsoC1ALVAtYC1gLXAtQC1ALXAtgC2ALZAtQC2gLZAtgC2ALbAtoC2gLbAtwC3ALdAtoC3gLdAtwC3ALfAt4C3gLfAuAC4ALhAt4C4gLhAuAC4ALjAuIC5ALlAuYC5gLnAuQC6ALpAuoC6gLrAugC6ALsAu0C7QLuAugC2gLdAu8C3QLeAvAC8ALvAt0C7wLwAvEC8QLyAu8C8wLvAvIC8gL0AvMC9QLzAvQC8wL1AtkC1ALZAvUC9QL2AtQC1QLUAvYC9gL3AtUC9wL2AvgC+AL5AvcC+gL4AvYC9gL1AvoC9AL6AvUC2QLaAvMC7wLzAtoC+wLxAvAC8AL8AvsC/QL7AvwC/AL+Av0C/wL9Av4C/gIAA/8CAAP+AuUC5QLkAgADAQMAA+kC6QLoAgEDAAMBAwIDAgP/AgADAwMCAwEDAQMEAwMDBAMBA+gC6ALuAgQD4QLiAv4C/gL8AuEC3gLhAvwC/ALwAt4CBQP9Av8C/wICAwUDBQMCAwMDAwMGAwUDBwMGAwMDAwMIAwcDCAMDAwQDCQMHAwgDCAMKAwkDCwMEAwwDBAMLAwgDCgMIAwsDDAMNAwsDDQMMA+0C7QIOAw0DDgPtAg8DDwPtAuwC7AIQAw8DEQMSA+sC6wLqAhEDEwMUA+cC5wLmAhMDFQPjAuAC4AIWAxUDFgPgAt8C3wIXAxYDGAMXA98C3wLcAhgDGAPcAtsC2wIZAxgDGgMZA9sC2wLYAhoDGgPYAtcC1wIbAxoDHAMbA9cC1wLWAhwDHQMeAx8DHwMgAx0DHQMgAyEDIQMiAx0DIwMiAyEDIQMkAyMDIwMkAyUDJQMmAyMDJwMmAyUDJQMoAycDJwMoAykDKQMqAycDKwMqAykDKQMsAysDKwMsAy0DLQMuAysDLwMuAy0DLQMwAy8DLwMwAzEDMQMyAy8DPwJCAjMDMwM0Az8CNQMzA0ICQgJDAjUDNgNDAkYCRgI3AzYDOAM3A0YCRgJHAjgDOQM4A0cCRwJJAjkDDwM6Aw4DOwMOAzoDOgM8AzsDDgM7Az0DPQMNAw4DDQM9Az4DPgMLAw0DCwM+AwoDPwNAA0EDQQNCAz8DQwNEA0UDRQNGA0MDRwNIA0kDSANHA0oDSgNLA0gDSwNKA0wDTANNA0sDTQNMA04DTgNPA00DTwNOA1ADUANRA08DUQNQA1IDUgNTA1EDUwNSA1QDVANVA1MDVQNUA1YDVgNXA1UDVwNWA1gDWANZA1cDWQNYA1oDWgNbA1kDXANdA14DXgNfA1wDYANhA2IDYgNjA2ADZANlA1wDXANfA2QDZgNlA2QDZwNoA2kDaQNqA2cDZANrA2YDbANtA24DbgNvA2wDcANxA3IDcgNzA3ADZgNrA3QDdAN1A2YDdgN1A3QDdAN3A3YDeAN5A3oDegN7A3gDdgN3A3wDfQN+A38DfwOAA30DfAOBA3YDggOBA3wDfAODA4IDhAOFA4YDhgOHA4QDggODA4gDiQOKA4sDiwOMA4kDiAONA4IDRgONA4gDiANDA0YDjgOPA5ADkAORA44DkgOTA5QDlAOVA5IDkwOSA5YDlgOXA5MDlQOUA5gDmAOZA5UDmQOYA5oDmgObA5kDmwOaA5wDnAOdA5sDnQOcA54DngOfA50DnwOeA6ADoAOhA58DoQOgA6IDogOjA6EDowOiA6QDpAOlA6MDpQOkA6YDpgOnA6UDqAOpA6oDqgOrA6gDqAOrA6wDrAOtA6gDrgOtA6wDrAOvA64DrgOvA7ADsAOxA64DsgOxA7ADsAOzA7IDsgOzA/0C/QK0A7IDtQO0A/0C/QIFA7UDtQMFAwYDBgO2A7UDtwO2AwYDBgMHA7cDtwMHAwkDCQO4A7cD8gKwA68DswOwA/ICrwP0AvIC8gLxArMD/QKzA/EC8QL7Av0C+gL0Aq8DrwOsA/oC+gKsA6sDqwP4AvoC+QL4AqsDqwOqA/kCuQO6A7sDuwO8A7kDuQO8A70DvQO+A7kDvwO+A70DvQPAA78DvwPAA8EDwQPCA78DwwPEA8UDxQPGA8MDwwPGA8cDxwPIA8MDyQPIA8cDxwPKA8kDyQPKA8sDywPMA8kDzQPMA8sDywPOA80DzQPOA88DzwPQA80D0QO/A8IDwgPSA9EDvwPRA9MD0wO+A78DvgPTA9QD1AO5A74DuQPUA9UD1QO6A7kDSQPWA0cD1wPYA9kD2QPaA9cD1wPaA9sD2wPcA9cD3QPcA9sD2wPeA90D3QPeA98D3wPgA90D4QPgA98D3wPiA+ED4QPiA+MD4wPkA+ED5QPkA+MD4wPmA+UD5wPoA+kD6QPqA+cD6wPsA+0D7QPuA+sD7wPwA/ED8QPyA+8D8wPyA/ED8QP0A/MD8wP0A/UD9QP2A/MD9wP4A/kD+QP6A/cD+AP3A/sD+wP8A/gD+gP5A/0D/QP+A/oD/gP9A/8D/wMABP4DAAT/AwEEAQQCBAAEAgQBBAMEAwQEBAIEBQQEBAMEAwQGBAUEBwQFBAYEBgQIBAcEBwQIBAkECQQKBAcECgQJBAsECwQMBAoEDAQLBA0EDQQOBAwEDgQNBA8EDwQQBA4EEQQSBBMEEwQUBBEEEgQRBBUEFQQWBBIEFgQVBBcEFwQYBBYEGAQXBBkEGQQaBBgEGgQZBBsEGwQcBBoEHAQbBB0EHQQeBBwEHgQdBB8EHwQgBB4EIAQfBCEEIQQiBCAEIgQhBCMEIwQkBCIEJAQjBCUEJQQmBCQEJgQlBCcEJwQoBCYEKAQnBCkEKQQqBCgEKwQsBC0ELQQuBCsELgQtBC8ELwQwBC4EMQQvBC0ELQQyBDEEMgQtBCwELAQzBDIENAQyBDMEMwQ1BDQEMgQ0BDYENgQxBDIENwQ2BDQENAQ4BDcEOAQ0BDUENQQ5BDgEOgQ7BDkEOQQ8BDoEOwQ6BD0EPQQ+BDsEPwQ9BDoEOgRABD8EQAQ6BDwEPARBBEAEQgQ1BDMEMwRDBEIEQwQzBCwELAREBEMERAQsBCsEKwRFBEQERgRDBEQERARHBEYERwREBEUERQRIBEcESQRCBEMEQwRGBEkEQgRJBEoESgRLBEIENQRCBEsESwQ5BDUEOQRLBEwETAQ8BDkEPARMBE0ETQRBBDwETgRNBEwETARPBE4ETwRMBEsESwRKBE8ERgRHBFAEUARRBEYESQRGBFEERwRIBFIEUgRQBEcESgRJBFMEUQRTBEkEUwRUBEoETwRKBFQETgRPBFUEVARVBE8EVQRWBE4EbQJsAlcEVwRmAm0CZgJXBF8CWARXBGwCXwJXBFgEbAJxAlgEWQRYBHECcQJyAlkEWARZBGMCYwJhAlgEWARhAl8CWgRZBHICcgJ0AloEWQRaBGUCZQJjAlkEMAQvBLoCugK5AjAEvQK6Ai8ELwQxBL0CvwK9AjEEMQQ2BL8CwwK/AjYENgQ3BMMCxgLFAj4EPgQ9BMYCywLGAj0EPQQ/BMsCWwRcBF0EXQReBFsEXQRcBF8EXwRgBF0EWwReBGEEYQRiBFsEYwRiBGEEYQRkBGMEZQRgBF8EXwRmBGUEZwRjBGQEZARoBGcEZwRoBGkEaQRqBGcEagRpBGsEawRsBGoEbARrBG0EbQRuBGwEbgRtBG8EbwRlBGYEbwRwBG4EZwRqBHEEcQRyBGcEYwRnBHIEcgRxBHMEcwR0BHIEdARzBHUEdQR2BHQEdwRyBHQEdwR0BHYEdwR4BHIEeAR5BHIEdgR6BHcEcgR5BGMEewRwBG8EbwR8BHsEZgR8BG8EfQR+BH8EfwSABH0EfwR+BIEEgQSCBH8EgwR/BIIEfwSDBIQEhASFBH8EhASDBIYEhgSDBIcEhwR+BIgEiASJBIcEhwSKBIYEiwSMBI0EjgSKBIcEhwSJBI4EhwSDBI8EggSPBIMEjwSQBIcEkASBBH4EfgSHBJAEkQSGBIoEigSSBJEEkwSUBJUElQSWBJMElwSYBJkEmQSaBJcEmwScBJ0EnQSeBJsEnwSgBKEEoQSiBJ8EowSkBKUEpQSmBKMEpwSoBKkEqQSqBKcEqwSqBKkEqQSsBKsErASpBK0ErgStBKkEqQSvBK4EsAStBK4EsQStBLAEsgSqBLEEsQSzBLIEsAS0BLEEtQS2BLcEuASzBLEEsQS0BLgEuQStBLEErQS5BKwEsQS6BLkEugSxBKoEqgSrBLoEtASwBLsEuwS8BLQEvQS+BL8EvwTABL0EwQTCBMMEwwTEBMEExQTGBMcExwTIBMUEyQTKBMsEywTMBMkEzQTOBM8EzwTQBM0E0QTSBNME0wTUBNEE1QTRBNQE1ATWBNUE1wTVBNYE1gTYBNcE2QTXBNgE2ATaBNkE2wTZBNoE2gTcBNsE3QTbBNwE3ATeBN0E3wTdBN4E3gTgBN8E4QTTBNIE0gTiBOEE4wThBOIE4gTkBOME5QTjBOQE5ATmBOUE5wTlBOYE5gToBOcE6QTnBOgE6ATqBOkE6wTpBOoE6gTsBOsE7QTrBOwE7ATuBO0E7wTtBO4E7gTwBO8E8QTvBPAE8ATyBPEE8wTxBPIE8gT0BPME9QTzBPQE9AT2BPUE9wT1BPYE9gT4BPcE+QT6BPsE+wT8BPkE+gT9BP4E/gT7BPoE/QT/BAAFAAX+BP0E/wQBBQIFAgUABf8EAQUDBQQFBAUCBQEFBQUEBQMFAwUGBQUFBwUFBQYFBgUIBQcFCQUHBQgFCAUKBQkFCwUJBQoFCgUMBQsFDQULBQwFDAUOBQ0FDwUNBQ4FDgUQBQ8FEQUPBRAFEAUSBREFEwURBRIFEgUUBRMFFQUTBRQFFAUWBRUFFwUVBRYFFgUYBRcFGQUXBRgFGAUaBRkFGwUZBRoFGgUcBRsFHQUbBRwFHAUeBR0FHwUdBR4FHgUgBR8FIQUiBSMFIwUkBSEFJQUhBSQFJAUmBSUFIQUlBScFJwUoBSEFIgUhBSgFKAUpBSIFKgUlBSYFJgUrBSoFJQUqBSwFJQUsBScFKgUtBSwFKgUrBS4FKwUvBS4FKgUuBTAFMQUjBSIFIgUyBTEFMgUiBSkFMwUxBTIFMgU0BTMFNQUzBTQFNAU2BTUFNwU1BTYFNgU4BTcFOQU3BTgFOAU6BTkFOwU5BToFOwU8BTkFOwU9BTwFPgU8BT0FPQU/BT4FQAU+BT8FPwVBBUAFQgVABUEFQQVDBUIFRAVCBUMFQwVFBUQFRgVEBUUFRQVHBUYFSAVGBUcFSAVJBUYFSAVKBUkFSQVLBUYFRwVFBUwFTAVNBUcFSAVHBU0FTQVOBUgFRQVDBU8FTwVMBUUFQwVBBVAFUAVPBUMFUQVQBUEFQQU/BVEFTgVNBVIFUgVTBU4FTQVMBVQFVAVSBU0FUgVUBVUFVQVWBVIFUwVSBVYFVgVXBVMFTAVPBVgFWAVUBUwFVAVYBVkFWQVVBVQFTwVQBVoFWgVYBU8FWAVaBVsFWwVZBVgFUAVRBVwFXAVaBVAFWgVcBV0FXQVbBVoFXgVRBT8FPwU9BV4FXwVeBT0FPQU7BV8FYAVfBTsFOwVhBWAFYgVdBVwFXAVjBWIFZAVjBVwFZAVcBVEFUQVlBWQFUQVeBWUFZQVeBV8FZgVhBTsFOwU6BWYFZwVmBToFOgU4BWcFaAVnBTgFOAU2BWgFaQVoBTYFNgU0BWkFagVpBTQFNAUyBWoFKQVqBTIFZwVoBWsFawVsBWcFbAVrBW0FbQVuBWwFaAVpBW8FbwVrBWgFawVvBXAFcAVtBWsFaQVqBXEFcQVvBWkFbwVxBXIFcgVwBW8FagUpBXMFcwVxBWoFdAVzBSkFKQUoBXQFdQV0BSgFKAUnBXUFdAV1BXYFdgV3BXQFcwV0BXcFdwV4BXMFcQVzBXgFeAVyBXEFeQV1BScFJwUsBXkFegV2BXUFdQV5BXoFbgV7BXwFfAVsBW4FbAV8BX0FbAV9BX4FfgVnBWwFZgVnBX4FfgV9BX8FYQVmBX4FgAVhBX4FfgV/BYAFYAVhBYAFXwVgBYEFZQVfBYEFgQWCBWUFZAVlBYIFgwWEBYUFhQWGBYMFhwWDBYYFhgWIBYcFiQWHBYgFiAWKBYkFiwWFBYQFhAWMBYsFjQWLBYwFjAWOBY0FjwWNBY4FjgWQBY8FkQWPBZAFkAWSBZEFkwWRBZIFkgWUBZMFlQWTBZQFlAWWBZUFlwWVBZYFlgWYBZcFmQWXBZgFmAWaBZkFmwWZBZoFmgWcBZsFnQWbBZwFnAWeBZ0FnwWdBZ4FngWgBZ8FoQWfBaAFogWhBaAFogWgBaMFpAWiBaMFowWlBaQFpgWnBagFqAWpBaYFqgWoBacFpwWrBaoFrAWqBasFqwWtBawFrgWsBa0FrQWvBa4FsAWuBa8FrwWxBbAFsgWwBbEFsQWzBbIFtAWyBbMFswW1BbQFtgW0BbUFtQW3BbYFuAW2BbcFtwW5BbgFugW4BbkFuQW7BboFvAW6BbsFuwW9BbwFvgW8Bb0FvQW/Bb4FwAW+Bb8FvwXBBcAFwgXABcEFwQXDBcIFwwXBBcQFxAXFBcMFwQW/BcYFxgXEBcEFvwW9BccFxwXGBb8FvQW7BcgFyAXHBb0FuwW5BckFyQXIBbsFygXJBbkFuQW3BcoFywXKBbcFtwW1BcsFzAXLBbUFtQWzBcwFzQXMBbMFswWxBc0FzgXNBbEFsQWvBc4FzwXOBa8FrwWtBc8F0AXPBa0FrQWrBdAF0AWrBacFpwXRBdAFLgUvBdIF0gXTBS4F0wXSBdQF1AXVBdMF1QXUBdYF1gXXBdUF2AXZBdoF2gXbBdgF3AXdBd4F3gXfBdwF4AXhBeIF4gXjBeAF5AXlBeYF5gXnBeQF6AXpBeoF6gXrBegF7AXtBe4F7gXvBewF8AXxBfIF8gXzBfAF9AX1BfYF9gX3BfQF+AX5BfoF+gX7BfgF/AX9Bf4F/gX/BfwFAAYBBgIGAgYDBgAGBAYFBgYGBgYHBgQGCAYJBgoGCgYLBggGDAYNBg4GDgYPBgwGEAYRBhIGEgYTBhAGFAYVBhYGFgYXBhQGGAYZBhoGGgYbBhgGHAYdBh4GHgYfBhwGIAYhBiIGIgYjBiAGJAYlBiYGJwYkBiYGJAYnBigGKQYkBigGJAYpBioGKwYkBioGJAYrBiwGJAYsBi0GLAYuBi0GJAYtBi8GMAYkBi8GJAYwBjEGMgYkBjEGJAYyBjMGNAYkBjMGJAY0BjUGNgYkBjUGJAY2BjcGJQYkBjcGqQWoBTgGOAY5BqkFqQU5BjoGOgY7BqkFOwY6BjwGPQY4BqgFqAWqBT0GPgY9BqoFqgWsBT4GPwY+BqwFrAWuBT8GQAY/Bq4FrgWwBUAGQQZABrAFsAWyBUEGQgZBBrIFsgW0BUIGQwZCBrQFtAW2BUMGRAZDBrYFtgW4BUQGRQZEBrgFuAW6BUUGRgZFBroFugW8BUYGRwZGBrwFvAW+BUcGSAZHBr4FvgXABUgGSQZIBsAFwAXCBUkGSgZLBkwGTAZNBkoGTgZNBkwGTAZPBk4GTgZPBlAGUAZRBk4GUQZQBlIGUgZTBlEGUwZSBlQGVAZVBlMGVQZUBlYGVgZXBlUGSwZKBlgGWAZZBksGVwZWBloGWgZbBlcGXAZdBl4GXgZfBlwGXwZeBmAGYAZhBl8GYQZgBmIGYgZjBmEGYwZiBmQGZAZlBmMGZgZlBmQGZAZnBmYGXQZcBmgGaAZpBl0GagZrBmwGbAZtBmoGbgZtBmwGbAZvBm4GcAZuBm8GcAZvBnEGcAZxBnIGcAZyBnMGdAZrBmoGagZ1BnQGdgZ0BnUGdQZ3BnYGeAZ2BncGdwZ5BngGegZ4BnkGeQZ7BnoGegZ7BnwGfAZ9BnoGfQZ8Bn4GfgZ/Bn0GgAZ/Bn4GfgaBBoAGggaABoEGgQaDBoIGhAaCBoMGgwaFBoQGhgaEBoUGhQaHBoYGiAaGBocGhwaJBogGigaIBokGiQaLBooGigaLBowGjAaNBooGjgaPBpAGjgaQBpEGjgaRBpIGkwaUBpUGlQaWBpMGlwaYBpkGmQaaBpcGmwaXBpoGmgacBpsGnQabBpwGnAaeBp0GnwagBqEGoQaiBp8GowakBqUGpQamBqMGpwajBqYGpgaoBqcGqQanBqgGqAaqBqkGkwWVBasGqwasBpMFrAarBq0GqwauBq0GqwavBq4GrAatBrAGrQaxBrAGrQayBrEGswa0BrUGtQa2BrMGtga1BrcGtwa4BrYGuAa3BrkGuQa6BrgGuga5BrsGuwa8BroGvAa7Br0GvQa+BrwGvga9Br8GvwbABr4GwAa/BsEGwQbCBsAGtAazBsMGwwbEBrQGxAbDBsUGxQbGBsQGxgbFBscGxwbIBsYGyAbHBskGyQbKBsgGygbJBssGywbMBsoGzAbLBs0GzQbOBswGzgbNBs8GzwbQBs4G0AbPBtEG0QbSBtAG0gbRBtMG0wbUBtIG1AbTBtUG1QbWBtQG1gbVBtcG1wbYBtYG2AbXBtkG2QbaBtgG2wbcBt0G3QbeBtsG3AbbBt8G3wbgBtwG4AbfBuEG4QbiBuAG4gbhBuMG4wbkBuIG5AbjBuUG5QbmBuQG5gblBucG5wboBuYG6AbnBukG6QbqBugG6gbpBusG6wbsBuoG7AbrBu0G7QbuBuwG7gbtBu8G7wbwBu4G8AbvBvEG8QbyBvAG8gbxBvMG8wb0BvIG9AbzBvUG9Qb2BvQG9gb1BvcG9wb4BvYG+Ab3BvkG+Qb6BvgG+gb5BvsG+wb8BvoG/Ab7Bv0G/Qb+BvwG/gb9Bv8G/wYAB/4GAAf/BgEHAQcCBwAHAwcEBwUHBQcGBwMHBAcDBwcHBwcIBwQHCQcHBwMHAwcKBwkHCgcDBwYHBgcLBwoHCAcHBwwHDAcNBwgHBwcJBw4HBwcOBwwHDgcPBwwHEAcNBwwHEAcRBw0HEQcSBw0HBgcFBxMHEwcUBwYHCwcGBxQHFAcTBxUHFQcWBxQHFgcVBxcHFwcYBxYHGAcXBxkHGQcaBxgHGgcZBxsHGwccBxoHHQccBxsHHQcbBx4HHQceBx8HHwceByAHIAchBx8HIQcgByIHIgcjByEHIwciByQHJAclByMHJQckByYHJgcnByUHJwcmBygHKAcpBycHKgcpBygHKgcoBysHKAcsBysHKgcrBy0HLgcnBykHKQcvBy4HLwcpByoHKgcwBy8HJwcuBzEHMQclBycHJQcxBzIHMgcjByUHIwcyBzMHNAcvBzAHMAc1BzQHNgcuBy8HLwc0BzYHNwc2BzQHNAc4BzcHOAc0BzUHNQc5BzgHOgcxBy4HLgc2BzoHNgc3BzsHOwc6BzYHPAcyBzEHMQc6BzwHOgc7Bz0HPQc8BzoHPgczBzIHMgc8Bz4HPAc9Bz8HPwc+BzwHPgc/B0AHQAdBBz4HQgc+B0EHMwc+B0IHQgdDBzMHQgdEB0MHQwdEB0UHRQdGB0MHRgdFB0cHHQdGB0cHRwdIBx0HRgcdBx8HHwdJB0YHQwdGB0kHSQcfByEHIQczB0kHMwdDB0kHMwchByMHHQdIB0oHSgccBx0HHAdKB0sHSwcaBxwHGgdLB0wHTAcYBxoHGAdMB00HTQcWBxgHFgdNB04HTgcUBxYHFAdOBwsHTwdMB0sHSwdQB08HUQdPB1AHUAdSB1EHUwdNB0wHTAdPB1MHTwdRB1QHVAdTB08HVQdOB00HTQdTB1UHUwdUB1YHVgdVB1MHVwcLB04HTgdVB1cHCwdXB1gHWAcKBwsHCgdYB1kHWQcJBwoHWgdZB1gHWAdbB1oHWwdYB1cHVwdcB1sHVQdWB1wHXAdXB1UHCQdZB10HXQcOBwkHXgddB1kHWQdaB14HUgdQB18HUAdgB18HYQdgB1AHUAdLB2EHSgdhB0sHYQdiB2AHSAdhB0oHYwdiB2EHYQdIB2MHRwdjB0gHXwdkB1IHZQdmB2cHZwdoB2UHaAdnB2kHaQdqB2gHagdpB2sHawdsB2oHZgdlB20HbQduB2YHbgdtB28HbwdwB24HcAdvB3EHcQdyB3AHcgdxB3MHcwd0B3IHdAdzB3UHdQd2B3QHdgd1B3cHdwd4B3YHeAd3B3kHeQd6B3gHegd5B3sHewd8B3oHfAd7B30HfQd+B3wHfgd9B38HfweAB34HgAd/B4EHgQeCB4AHggeBB4MHhAeCB4MHhAeFB4IHhQeEB4YHhgeHB4UHiAeJB4oHigeLB4gHiweKB4wHjAeNB4sHjQeMB44HjgePB40HjweOB5AHkAeRB48HkQeQB5IHkgeTB5EHkweSB5QHlAeVB5MHlQeUB5YHlgeXB5UHlweWB5gHmAeZB5cHmQeYB5oHmgebB5kHmweaB5wHnAedB5sHnQecB54HngefB50HnweeB6AHoAehB58HoQegB6IHogejB6EHoweiB6QHpAelB6MHpgejB6UHpQenB6YHowemB6gHqAehB6MHoQeoB6kHqQefB6EHnwepB6oHqgedB58HnQeqB6sHqwebB50HmwerB6wHrAeZB5sHmQesB60HrQeXB5kHlwetB64HrgeVB5cHlQeuB68HrweTB5UHkwevB7AHsAeRB5MHkQewB7EHsQePB5EHjwexB7IHsgeNB48HjQeyB7MHsweLB40HEgcRB7QHtAe1BxIHtQe0B7YHtge3B7UHtwe2B7gHuAe5B7cHuge7B7wHvAe9B7oHvge/B8AHwAfBB74HwgfDB8QHxAfFB8IHxgfHB8gHyAfJB8YHygfLB8wHzAfNB8oHzgfPB9AH0AfRB84H0gfTB9QH1AfVB9IH1gfXB9gH2AfZB9YH2gfbB9wH3AfdB9oH3gffB+AH4AfhB94H4gfjB+QH5AflB+IH5gfnB+gH6AfpB+YH6gfrB+wH7AftB+oH7gfvB/AH8AfxB+4H8gfzB/QH9Af1B/IH9gf3B/gH+Af5B/YH+gf7B/wH/Af9B/oH/gf/BwAIAAgBCP4HAggDCAQIBAgFCAIIBggHCAgICQgHCAYIBggKCAkICwgKCAYIBggMCAsIDQgMCAYIBggOCA0IBggPCA4IDwgQCA4IBggRCA8IEggRCAYIBggTCBIIFAgTCAYIBggVCBQIFggVCAYIBggXCBYIGAgXCAYIBggZCBgICAgZCAYIGgiKB4kHiQcbCBoIGwiJBxwIHAgdCBsIHggdCBwIigcaCB8IHwiMB4oHjAcfCCAIIAiOB4wHjgcgCCEIIQiQB44HkAchCCIIIgiSB5AHkgciCCMIIwiUB5IHlAcjCCQIJAiWB5QHlgckCCUIJQiYB5YHmAclCCYIJgiaB5gHmgcmCCcIJwicB5oHnAcnCCgIKAieB5wHngcoCCkIKQigB54HoAcpCCoIKgiiB6AHogcqCCsIKwikB6IHLAgtCC4ILggvCCwILAgvCDAIMAgxCCwIMggxCDAIMAgzCDIINAgyCDMIMwg1CDQINgg0CDUINQg3CDYIOAg2CDcINwg5CDgIOgguCC0ILQg7CDoIPAg4CDkIOQg9CDwIPgg/CEAIQAhBCD4IQgg+CEEIQQhDCEIIRAhCCEMIQwhFCEQIRghECEUIRQhHCEYIRghHCEgISAhJCEYISghACD8IPwhLCEoITAhNCE4ITghPCEwITAhPCFAIUAhRCEwIUghRCFAIUghTCFEIUghUCFMIUghVCFQITghNCFYIVghXCE4IVwhWCFgIWAhZCFcIWQhYCFoIWghbCFkIWwhaCFwIXAhdCFsIXghdCFwIXAhfCF4IYAheCF8IXwhhCGAIYAhhCGIIYghjCGAIYwhiCGQIZAhlCGMIZQhkCGYIZghnCGUIZwhmCGgIaAhpCGcIaQhoCGoIaghrCGkIawhqCGwIbAhtCGsIbghtCGwIbAhvCG4IcAhxCHIIcAhyCHMIcAhzCHQIdQh2CHcIdwh4CHUIeQh6CHsIewh8CHkIfAh7CH0IfQh+CHwIfgh9CH8IfwiACH4IgQiCCIMIgwiECIEIhQiGCIcIhwiICIUIiAiHCIkIiQiKCIgIigiJCIsIiwiMCIoIdQeNCI4Ijgh3B3UHjwiOCI0IjwiQCI4IkAiRCI4IjwiNCJIIjwiSCJMIjwiTCJQIlQiWCJcIlwiYCJUImQiYCJcIlwiaCJkImwiWCJUIlQicCJsImwicCJ0InQieCJsImQiaCJ8InwigCJkIoQigCJ8InwiiCKEIoQiiCKMIowikCKEIpQikCKMIowimCKUIpQimCKcIpwioCKUIqQioCKcIpwiqCKkIqQiqCKsIqwisCKkIrQisCKsIqwiuCK0IrQiuCK8IrwiwCK0IsQiwCK8IrwiyCLEIsQiyCLMIswi0CLEItQi0CLMIswi2CLUItwi0CLUIsQi0CLcItQi4CLcIuQi4CLUItQi6CLkItwi7CLEIsQi7CLwIvAiwCLEIrQiwCLwIvAi9CK0IrQi9CL4IvgisCK0IqQisCL4Ivgi/CKkIqQi/CMAIwAioCKkIpQioCMAIwAjBCKUIpQjBCMIIwgikCKUIoQikCMIIwgjDCKEIoQjDCMQIxAigCKEIoAjECMUIxQiZCKAImQjFCMYIxgiYCJkIlQiYCMYIxgjHCJUIlQjHCMgIyAicCJUIyQjKCMsIywjMCMkIzQjJCMwIzAjOCM0IzwjNCM4IzgjQCM8I0QjPCNAI0AjSCNEI0wjRCNII0gjUCNMI1QjTCNQI1AjWCNUI1wjVCNYI1gjYCNcI2QjXCNgI2AjaCNkI2wjZCNoI2gjcCNsI3QjbCNwI3AjeCN0I3wjdCN4I3gjgCN8I4QjfCOAI4AjiCOEI4wjhCOII4gjkCOMI5QjjCOQI5AjmCOUI5wjlCOYI5gjoCOcIygjnCOgI6AjLCMoI6QjqCOsI6wjsCOkI7QjpCOwI7AjuCO0I7wjtCO4I7gjwCO8I8QjvCPAI8AjyCPEI8wjxCPII8gj0CPMI9QjrCOoI6gj2CPUI9wj1CPYI9gj4CPcI+Qj3CPgI+Aj6CPkI+wj5CPoI+gj8CPsI/Qj7CPwI/Aj+CP0I/wj9CP4I/ggACf8IAQn/CAAJAAkCCQEJAwkBCQIJAgkECQMJBQkDCQQJBAkGCQUJBwkFCQYJBgkICQcJCQkHCQgJCAkKCQkJCwkMCQ0JDQkOCQsJDwkOCQ0JDQkQCQ8JDwkQCREJEQkSCQ8JEwkSCREJEQkUCRMJFQkMCQsJCwkWCRUJFQkWCRcJFwkYCRUJGQkYCRcJFwkaCRkJGQkaCRsJGwkcCRkJHQkcCRsJGwkeCR0JHQkeCR8JHwkgCR0JIQkgCR8JHwkiCSEJIQkiCSMJIwkkCSEJJQkkCSMJIwkmCSUJJQkmCScJJwkoCSUJKQkoCScJJwkqCSkJKwksCS0JLQkuCSsJLwkwCTEJLwkxCTIJMQkzCTIJLwkyCTQJMgk1CTQJMgk2CTUJNQk3CTQJLwk0CTgJNAk5CTgJNAk6CTkJOQk7CTgJLwk4CTwJOAk9CTwJPgkvCTwJPwlACUEJQQlCCT8JQwk/CUIJQglECUMJPwlDCUUJRQlGCT8JQAk/CUYJRglHCUAJSAlBCUAJQAlJCUgJSQlACUcJRwlKCUkJSglHCUsJSwlHCUYJSwlMCUoJTAlNCUoJTAlOCU0JTAlPCU4JSglNCVAJUAlJCUoJUAlICUkJUQlGCUUJRglRCUsJRQlSCVEJUAlTCUgJUAlUCVMJVQlSCUUJRQlWCVUJVwlVCVYJVglYCVcJWQlWCUUJRQlDCVkJWglZCUMJQwlECVoJWQlaCVsJWwlcCVkJXAlYCVYJVglZCVwJXQleCV8JXwlgCV0JYQlgCV8JXwliCWEJXgldCWMJYwlkCV4JZAljCWUJZQlmCWQJZwlmCWUJZQloCWcJZwloCWkJaQlqCWcJawlqCWkJaQlsCWsJbQluCW8JbwlwCW0JcQlyCXMJcwl0CXEJdQl0CXMJcwl2CXUJdwl1CXYJdgl4CXcJeQl3CXgJeAl6CXkJeQl6CXsJewl8CXkJfAl7CX0JfQl+CXwJfgl9CX8JfwmACX4JgQmACX8JfwmCCYEJgwmBCYIJggmECYMJgwmECYUJhQmGCYMJhwmICYkJiQmKCYcJiwmKCYkJiQmMCYsJjQmOCY8JjwmQCY0JkQmNCZAJkAmSCZEJkwmPCY4JjgmUCZMJlQmTCZQJlAmWCZUJlwmRCZIJkgmYCZcJmQmXCZgJmAmaCZkJmQmaCZsJmwmcCZkJnQmcCZsJmwmeCZ0JnwmdCZ4JngmgCZ8JoQmfCaAJoAmiCaEJowmhCaIJogmkCaMJpQmjCaQJpAmmCaUJpQmmCacJpwmoCaUJqQmoCacJpwmqCakJqwmpCaoJqgmsCasJrQmrCawJrAmuCa0JrwmtCa4JrgmwCa8JrwmwCbEJsQmyCa8JsgmxCbMJswm0CbIJtQm0CbMJswm2CbUJtwm4CbkJuQm6CbcJuwm6CbkJuQm8CbsJvQm4CbcJtwm+Cb0Juwm8Cb8JvwnACbsJwQnACb8JvwnCCcEJwQnCCcMJwwnECcEJxQnECcMJwwnGCcUJxQnGCccJxwnICcUJyQnICccJxwnKCckJyQnKCcsJywnMCckJzQnMCcsJywnOCc0JzQnOCc8JzwnQCc0J0QnQCc8JzwnSCdEJ0QnSCdMJ0wnUCdEJ1QnUCdMJ0wnWCdUJ1wnUCdUJ0QnUCdcJ1QnYCdcJ2QnYCdUJ1QnaCdkJ1wnbCdEJ0QnbCdwJ3AnQCdEJzQnQCdwJ3AndCc0JzQndCd4J3gnMCc0JyQnMCd4J3gnfCckJyQnfCeAJ4AnICckJxQnICeAJ4AnhCcUJxQnhCeIJ4gnECcUJwQnECeIJ4gnjCcEJwQnjCeQJ5AnACcEJwAnkCeUJ5Qm7CcAJuwnlCeYJ5gm6CbsJtwm6CeYJ5gnnCbcJtwnnCegJ6Am+CbcJvQm+CekJ6QnqCb0J6wnsCe0J7QnuCesJ7wnrCe4J7gnwCe8J8QnvCfAJ8AnyCfEJ8wnxCfIJ8gn0CfMJ9QnzCfQJ9An2CfUJ9wn1CfYJ9gn4CfcJ+Qn3CfgJ+An6CfkJ+wn5CfoJ+gn8CfsJ/Qn7CfwJ/An+Cf0J/wn9Cf4J/gkACv8JAQr/CQAKAAoCCgEKAwoBCgIKAgoECgMKBQoDCgQKBAoGCgUKBwoFCgYKBgoICgcKCQoHCggKCAoKCgkK7AkJCgoKCgrtCewJCwoMCg0KDQoOCgsKDwoLCg4KDgoQCg8KEQoPChAKEAoSChEKEwoRChIKEgoUChMKFQoNCgwKDAoWChUKFwoVChYKFgoYChcKGQoXChgKGAoaChkKGwoZChoKGgocChsKHQobChwKHAoeCh0KHwodCh4KHgogCh8KIQofCiAKIAoiCiEKIwohCiIKIgokCiMKJQojCiQKJAomCiUKJwolCiYKJgooCicKKQonCigKKAoqCikKKwopCioKKgosCisKLQouCi8KLwowCi0KMQowCi8KLwoyCjEKMQoyCjMKMwo0CjEKNQo0CjMKMwo2CjUKNwouCi0KLQo4CjcKNwo4CjkKOQo6CjcKOwo6CjkKOQo8CjsKOwo8Cj0KPQo+CjsKPwo+Cj0KPQpACj8KPwpACkEKQQpCCj8KQwpCCkEKQQpECkMKQwpECkUKRQpGCkMKRwpGCkUKRQpICkcKRwpICkkKSQpKCkcKSwpKCkkKSQpMCksKTQpOCk8KTwpQCk0KUQpSClMKUQpTClQKUwpVClQKUQpUClYKVApXClYKVApYClcKVwpZClYKUQpWCloKVgpbCloKVgpcClsKWwpdCloKUQpaCl4KWgpfCl4KYApRCl4KYQpiCmMKYwpkCmEKZQpjCmIKYgpmCmUKZwpoCmkKaQpqCmcKawphCmQKZApsCmsKbQprCmwKbApuCm0KbwpwCnEKcQpyCm8KcwpvCnIKcgp0CnMKdQptCm4Kbgp2CnUKdwp1CnYKdgp4CncKeQp3CngKeAp6CnkKewp5CnoKegp8CnsKfQp7CnwKfAp+Cn0Kfwp9Cn4KfgqACn8KgQp/CoAKgAqCCoEKgwqECoUKhQqGCoMKhwqICokKiQqKCocKiwqHCooKigqMCosKjQqLCowKjAqOCo0KjwqQCpEKkAqSCpMKkwqRCpAKlAqTCpIKkgqVCpQKlgqUCpUKlQqXCpYKmAqWCpcKlwqZCpgKmgqYCpkKmQqbCpoKmgqbCpwKnAqdCpoKkQqeCo8KnwqPCp4KngqgCp8KoQqfCqAKoAqiCqEKoQqiCqMKowqkCqEKpQqkCqMKowqmCqUKpwqlCqYKpgqoCqcKqQqnCqgKqAqqCqkKqwqpCqoKqgqsCqsKrQqrCqwKrAquCq0KrwqtCq4KrgqwCq8KsQqvCrAKsAqyCrEKswqxCrIKsgq0CrMKtQq2CrcKtQq3CrgKtwq5CrgKtQq4CroKuAq7CroKuwq8CroKtQq6Cr0Kugq+Cr0Kugq/Cr4KugrACr8KvwrBCr4KwQrCCr4KvgrDCr0KvgrECsMKxArFCsMKxgrHCsgKyQrKCssKywrMCskKzQrMCssKywrOCs0KzgrLCs8KzwrQCs4K0QrPCssKywrKCtEK0QrKCtIK0grTCtEK1ArOCtAK0ArVCtQK1grXCtgK2ArZCtYK2QrYCtoK2grbCtkK1wrWCtwK3ArdCtcK3grbCtoK2grfCt4K4ArZCtsK1grZCuAK2wrhCuAK4AriCtYK3ArWCuIK4grjCtwK5ArcCuMK3QrcCuQK4wrlCuQK5ArlCuYK5grnCuQK5wrmCugK6ArpCucK5ArnCuoK6grnCukK6grrCuQK5ArrCt0K6QrsCuoK7ArpCu0K6QruCu0K7grvCu0K8AruCukK6ArwCukK6ArxCvAK6AryCvEK8wrhCtsK2wreCvMK9Ar1CvYK9gr3CvQK+Ar3CvYK9gr5CvgK+Qr2CvoK+gr7CvkK/Ar5CvsK+wr9CvwK/gr8Cv0K/Qr/Cv4KAAv+Cv8K/woBCwAL9QoACwELAgv6CvYK9gr1CgILAQsCC/UKAwsECwULBgsDCwULBwsGCwULAwsGCwgLCAsJCwMLCQsICwoLCgsLCwkLDAsLCwoLCgsNCwwLDgsMCw0LDQsPCw4LEAsOCw8LDwsRCxALEgsQCxELEQsTCxILFAsSCxMLEwsVCxQLFgsUCxULFQsXCxYLGAsWCxcLFwsZCxgLGAsZCxoLGgsbCxgLGwsaCxwLHAsdCxsLHgsdCxwLHAsfCx4LIAseCx8LHwshCyALIgsjCyQLJAslCyILJgsnCygLKAspCyYLKgspCygLKAsrCyoLLAsqCysLKwstCywLLgssCy0LLQsvCy4LMAsuCy8LLwsxCzALMgswCzELMQszCzILMgszCzQLNAs1CzILNAs2CzULNAs3CzYLOAs5CzoLOws8Cz0LPQs+CzsLPws7Cz4LPgtACz8LQQs/C0ALQAtCC0ELQwtBC0ILQgtEC0MLRQtDC0QLRAtGC0ULRwtFC0YLRgtIC0cLRwtIC0kLSQtKC0cLSwtKC0kLSQtMC0sLTQtLC0wLTAtOC00LTQtOC08LTwtQC00LUAtPC1ELUQtSC1ALUwtSC1ELUQtUC1MLVQtTC1QLVAtWC1ULVwtVC1YLVgtYC1cLWQtXC1gLWAtaC1kLWwtZC1oLWgtcC1sLXQtbC1wLXAteC10LXwtdC14LXgtgC18LYQtfC2ALYAtiC2ELYwtkC2ULZQtmC2MLZwtlC2QLZAtoC2cLaQtqC2sLawtsC2kLbQtrC2oLagtuC20LbwttC24LbgtwC28LcQtvC3ALcAtyC3ELcwtxC3ILcgt0C3MLcwt0C3ULdQt2C3MLdwt2C3ULdQt4C3cLdwt4C3kLeQt6C3cLewt6C3kLeQt8C3sLfQt7C3wLfAt+C30LfQt+C38LfwuAC30LgAt/C4ELgQuCC4ALgwuCC4ELgQuEC4MLhQuDC4QLhAuGC4ULhwuIC4kLiQuKC4cLiwuHC4oLiguMC4sLjQuLC4wLjAuOC40LjwuNC44LjguQC48LjwuQC5ELkQuSC48LkwuSC5ELkQuUC5MLlQuTC5QLlAuWC5ULlwuYC5kLmQuaC5cLmwuZC5gLmAucC5sLnQueC58LnwugC50LngudC6ELoQuiC54LowukC6ULpQumC6MLpwuoC6kLqQuqC6cLqAunC6sLqwusC6gLrQuuC68LrwuwC60LsQuyC7MLswu0C7ELsQu0C7ULtQu2C7ELswuyC7cLtwu4C7MLuQu4C7cLtwu6C7kLuwu2C7ULtQu8C7sLuwu8C70LvQu+C7sLvwu+C70LvQvAC78LvwvAC8ELwQvCC78LwwvCC8ELwQvEC8MLwwvEC8ULxQvGC8MLxwvGC8ULxQvIC8cLxwvIC8kLyQvKC8cLywvKC8kLyQvMC8sLywvMC80LzQvOC8sLzwvOC80LzQvQC88LzwvQC9EL0QvSC88L0wvRC9AL0QvTC9QL1AvVC9EL0AvWC9ML1gvQC80LzQvXC9YL1wvNC8wLzAvYC9cL2AvMC8kLyQvZC9gLyAvaC9kL2QvJC8gL2gvIC8ULxQvbC9oL2wvFC8QLxAvcC9sL3AvEC8ELwQvdC9wL3QvBC8ALwAveC90L3gvAC70LvQvfC94L3wu9C7wLvAvgC98L4Au8C7ULtQvhC+AL4Qu1C7QLtAviC+EL4gu0C7MLswvjC+IL4wuzC7gLuAvkC+ML5QvmC+cL5wvoC+UL6AvnC+kL6QvqC+gL6gvpC+sL6wvsC+oL7AvrC+0L7QvuC+wL7gvtC+8L7wvwC+4L8AvvC/EL8QvyC/AL8gvxC/ML8wv0C/IL9AvzC/UL9Qv2C/QL9gv1C/cL9wv4C/YL+Av3C/kL+Qv6C/gL+gv5C/sL+wv8C/oL/Av7C/0L/Qv+C/wL/gv9C/8L/wsADP4LAAz/CwEMAQwCDAAMAgwBDAMMAwwEDAIMBAwDDOYL5gvlCwQMBQwGDAcMBwwIDAUMCAwHDAkMCQwKDAgMCgwJDAsMCwwMDAoMDAwLDA0MDQwODAwMDgwNDA8MDwwQDA4MBgwFDBEMEQwSDAYMEgwRDBMMEwwUDBIMFAwTDBUMFQwWDBQMFgwVDBcMFwwYDBYMGAwXDBkMGQwaDBgMGgwZDBsMGwwcDBoMHAwbDB0MHQweDBwMHgwdDB8MHwwgDB4MIAwfDCEMIQwiDCAMIgwhDCMMIwwkDCIMJAwjDCUMJQwmDCQMJwwoDCkMKQwqDCcMJwwqDCsMKwwsDCcMLQwsDCsMKwwuDC0MLQwuDC8MLwwwDC0MKQwoDDEMMQwyDCkMMwwyDDEMMQw0DDMMMww0DDUMNQw2DDMMNww2DDUMNQw4DDcMNww4DDkMOQw6DDcMOww6DDkMOQw8DDsMOww8DD0MPQw+DDsMPww+DD0MPQxADD8MPwxADEEMQQxCDD8MQwxCDEEMQQxEDEMMQwxEDEUMRQxGDEMMRwxIDEkMSQxKDEcMSwxMDE0MSwxNDE4MTQxPDE4MTQxQDE8MTQxRDFAMTQxSDFEMUQxTDFAMUAxUDE8MUAxVDFQMVAxWDE8MTwxXDE4MTwxYDFcMVwxZDE4MSwxODFoMWwxcDF0MXQxeDFsMXAxbDF8MXwxgDFwMYQxfDFsMWwxiDGEMYgxbDF4MXgxjDGIMXgxdDGQMZAxlDF4MYwxeDGUMZQxmDGMMZwxjDGYMYgxjDGcMZgxoDGcMaAxmDGkMaAxpDGoMaAxqDGsMZgxlDGwMbAxpDGYMbAxlDGQMYQxiDG0MZwxtDGIMbQxuDGEMbAxkDG8MbAxvDHAMYQxuDHEMcgxxDHMMcwx0DHIMcgx0DHUMdQx2DHIMYQxyDHYMcQxyDGEMdgxfDGEMXwx2DHcMdwxgDF8Mdgx1DHgMeAx3DHYMeQx6DHsMewx8DHkMfAx7DH0MfQx+DHwMegx5DH8MfwyADHoMgAx/DIEMgQyCDIAMgwyCDIEMgQyEDIMMgwyEDIUMhQyGDIMMhgyFDIcMhwyIDIYMiQyKDIsMiwyMDIkMjQyODI8MjwyQDI0MkAyPDJEMkQySDJAMkgyRDJMMkwyUDJIMlAyTDJUMlQyWDJQMlgyVDJcMlwyYDJYMmAyXDJkMmQyaDJgMmgyZDJsMmwycDJoMnAybDJ0MnQyeDJwMngydDJ8MnwygDJ4MoAyfDKEMoQyiDKAMowykDKUMpQymDKMMpwyoDKkMqQyqDKcMqwysDK0MrQyuDKsMrgytDK8MrwywDK4MrAyrDLEMsQyyDKwMsgyxDLMMswy0DLIMsAyvDLUMtQy2DLAMtgy1DLcMtwy4DLYMuQy4DLcMtwy6DLkMuQy6DLsMuwy8DLkMvAy7DL0MvQy+DLwMvgy9DL8MvwzADL4MwAy/DMEMwQzCDMAMwgzBDMMMwwzEDMIMxQzEDMMMwwzGDMUMxQzGDMcMxwzIDMUMyAzHDMkMyQzKDMgMygzJDMsMywzMDMoMzAzLDM0MzQzODMwMzwzODM0MzQzQDM8M0QzPDNAM0AzSDNEM0QzSDNMM0wzUDNEM1QzWDNcM1wzYDNUM1QzYDNkM2QzaDNUM1wzWDNsM2wzcDNcM3QzaDNkM2QzeDN0M3QzeDN8M3wzgDN0M4QzgDN8M3wziDOEM4QziDOMM4wzkDOEM5QzkDOMM4wzmDOUM5QzmDOcM5wzoDOUM6QzoDOcM5wzqDOkM6QzqDOsM6wzsDOkM7QzsDOsM6wzuDO0M7QzuDO8M7wzwDO0M8QzwDO8M7wzyDPEM8QzyDPMM8wz0DPEM9QzzDPIM8wz1DPYM9gz3DPMM8gz4DPUM+AzyDO8M7wz5DPgM+QzvDO4M7gz6DPkM+gzuDOsM6wz7DPoM6gz8DPsM+wzrDOoM/AzqDOcM5wz9DPwM/QznDOYM5gz+DP0M/gzmDOMM4wz/DP4M/wzjDOIM4gwADf8MAA3iDN8M3wwBDQANAQ3fDN4M3gwCDQENAg3eDNkM2QwDDQINAw3ZDNgM2AwEDQMNBA3YDNcM1wwFDQQNBQ3XDNwM3AwGDQUNBw3cDNsM2wwIDQcNCQ0KDQsNCw0MDQkNDA0LDQ0NDQ0ODQwNDg0NDQ8NDw0QDQ4NEA0PDRENEQ0SDRANEg0RDRMNEw0UDRINFA0TDRUNFQ0WDRQNFg0VDRcNFw0YDRYNGA0XDRkNGQ0aDRgNGg0ZDRsNGw0cDRoNHA0bDR0NHQ0eDRwNHg0dDR8NHw0gDR4NIA0fDSENIQ0iDSANIg0hDSMNIw0kDSINJA0jDSUNJQ0mDSQNJg0lDScNJw0oDSYNKA0nDQoNCg0JDSgNKQ0qDSsNKw0sDSkNLA0rDS0NLQ0uDSwNLg0tDS8NLw0wDS4NMA0vDTENMQ0yDTANKg0pDTMNMw00DSoNNA0zDTUNNQ02DTQNNg01DTcNNw04DTYNOA03DTkNOQ06DTgNOg05DTsNOw08DToNPA07DT0NPQ0+DTwNPg09DT8NPw1ADT4NQA0/DUENQQ1CDUANQg1BDUMNQw1EDUINRA1DDUUNRQ1GDUQNRg1FDUcNRw1IDUYNSA1HDUkNSQ1KDUgNSw1MDU0NTQ1ODUsNSw1ODU8NTw1QDUsNUQ1QDU8NTw1SDVENUQ1SDVMNUw1UDVENTQ1MDVUNVQ1WDU0NVw1WDVUNVQ1YDVcNVw1YDVkNWQ1aDVcNWw1aDVkNWQ1cDVsNWw1cDV0NXQ1eDVsNXw1eDV0NXQ1gDV8NXw1gDWENYQ1iDV8NYw1iDWENYQ1kDWMNYw1kDWUNZQ1mDWMNZw1mDWUNZQ1oDWcNZw1oDWkNaQ1qDWcNaw1sDW0NbQ1uDWsNbw1wDXENbw1xDXINcQ1zDXINcQ10DXMNcQ11DXQNcQ12DXUNdQ13DXQNdA14DXMNdA15DXgNeA16DXMNcw17DXINcw18DXsNew19DXINbw1yDX4Nfw2ADYENgQ2CDX8Ngg2BDYMNgw2EDYINhQ2GDYcNhw2IDYUNgA1/DYkNiQ2KDYANig2JDYsNiw2MDYoNjQ2ODY8Njw2QDY0NkA2PDZENkQ2SDZANjA2LDZMNkw2UDYwNlA2TDZUNlQ2WDZQNlg2VDZcNlw2YDZYNmA2XDZkNmQ2aDZgNmg2ZDZsNmw2cDZoNnA2bDZ0NnQ2eDZwNng2dDZ8Nnw2gDZ4NoQ2iDaMNow2kDaENpQ2mDacNpw2oDaUNqA2nDakNqQ2qDagNqg2pDasNqw2sDaoNrQ2uDa8Nrw2wDa0NsA2vDbENsQ2yDbANsg2xDbMNsw20DbINtA2zDbUNtQ22DbQNtg21DbcNtw24DbYNuA23DbkNuQ26DbgNug25DbsNuw28DboNvA27Db0NvQ2+DbwNvg29Db8Nvw3ADb4NwA2/DcENwQ3CDcANww3EDcUNxQ3GDcMNxg3FDccNxw3IDcYNrg2tDckNyQ3KDa4Nyg3JDcsNyw3MDcoNzA3LDc0NzQ3ODcwNzw3QDdEN0Q3SDc8N0g3RDdMN0w3UDdIN1A3TDdUN1Q3WDdQN1w3YDdkN1w3ZDdoN2Q3bDdoN2Q3cDdsN3A3dDdsN2w3eDdoN3g3fDdoN3g3gDd8N4A3hDd8N4A3iDeEN4Q3jDd8N3w3kDdoN3w3lDeQN3w3mDeUN5g3nDeUN6A3pDeoN6w3sDe0N7Q3uDesN7Q3sDe8N7w3wDe0N8Q3tDfAN8A3yDfEN7Q3xDfMN8w3uDe0N9A3uDfMN8w31DfQN8g3wDfYN9g33DfIN+A35DfoN+g37DfgN/A34DfsN+w39DfwN/g36DfkN+Q3/Df4N/A39DQAOAA4BDvwN/Q37DQIOAg77DfoNAg4DDv0N+g0EDgIOBA76Df4N/g0FDgQOBQ7+DQYOBg7+Df8NBg4HDgUOCA4HDgYOBg4JDggOCg4IDgkOCQ4LDgoODA4JDgYOCw4JDgwOBg4NDgwO/w0NDgYODA4ODgsODg4PDgsODw4QDgsODw4RDhAOCw4QDhIOCg4LDhIOCg4SDhMOCg4TDhQO/Q0DDhUOFQ4ADv0NFg4XDhgOGA4ZDhYOFw4WDhoOGg4bDhcOHA4XDhsOGw4dDhwOHQ4bDh4OHg4fDh0OHw4eDiAOIA4hDh8OIQ4gDiIOIg4jDiEOIw4iDhgOFw4cDiQOJA4YDhcOGA4kDiMOJQ4mDicOKA4lDicOKA4nDikOKQ4nDioOKg4rDikOKw4qDiwOLA4tDisOLQ4sDi4OLg4vDi0OLw4uDjAOMA4xDi8OMQ4wDjIOMg4zDjEOMw4yDjQONA41DjMONQ40DjYONg43DjUONw42DjgOOA45DjcOOQ44DjoOOg47DjkOPA47DjoOOg49DjwOPg48Dj0OPQ4/Dj4OPg4/DkAOQA5BDj4OQQ5ADkIOQg5DDkEORA5FDkYORg5HDkQOSA5JDkoOSg5LDkgOSw5KDkwOTA5NDksOTQ5MDk4OTg5PDk0OTw5ODlAOUA5RDk8OUQ5QDlIOUg5TDlEOUw5SDlQOVA5VDlMOVg5VDlQOVA5XDlYOVg5XDlgOVg5YDlkOVg5ZDloOWw5cDl0OXQ5eDlsOXg5dDl8OXw5gDl4OYA5fDmEOYQ5iDmAOYg5hDmMOYw5kDmIOZA5jDmUOZQ5mDmQOZg5lDmcOZw5oDmYOaQ5oDmcOZw5qDmkOaQ5qDmsOaw5sDmkObA5rDm0ObQ5uDmwObw5uDm0ObQ5wDm8OcQ5vDnAOcA5yDnEOcQ5yDnMOcw50DnEOdA5zDnUOdQ52DnQOdg51DncOdw54DnYOeA53DnkOeQ56DngOeg55DnsOew58DnoOfA57Dn0OfQ5+DnwOfg59Dn8Ofw6ADn4OgA5/DoEOgQ6CDoAOgw6EDoUOhQ6GDoMOhg6FDocOhw6IDoYOiQ6KDosOiw6MDokOjA6LDo0OjQ6ODowOjg6NDo8Ojw6QDo4OkA6PDpEOkQ6SDpAOkg6RDpMOkw6UDpIOlQ6UDpMOkw6WDpUOlQ6WDpcOlw6YDpUOmQ6YDpcOlw6aDpkOmQ6aDpsOmw6cDpkOnA6bDp0OnQ6eDpwOnw6eDp0OnQ6gDp8OoQ6fDqAOoA6iDqEOoQ6iDqMOow6kDqEOpA6jDqUOpQ6mDqQOpw6oDqkOqQ6qDqcOqg6pDqsOqw6sDqoOrA6rDq0OrQ6uDqwOrg6tDq8Orw6wDq4OsQ6wDq8Orw6yDrEOsQ6yDrMOsw60DrEOtA6zDrUOtQ62DrQOtw64DrkOuQ66DrcOuA63DrsOuw68DrgOvQ6+Dr8Ovw7ADr0OwQ6/Dr4Ovg7CDsEOww7EDsUOxQ7GDsMOxw7IDskOyQ7KDscOyw7JDsgOyA7MDssOzQ7ODs8Ozw7QDs0O0Q7SDtMO0w7UDtEO0w7SDtUO1Q7WDtMO1w7SDtEO1Q7SDtcO0Q7YDtcO1w7YDtkO2Q7aDtcO1w7aDtsO2w7cDtcO1w7cDtUO3Q7cDtsO1Q7cDt0O2w7eDt0O3w7WDtUO1Q7gDt8O3Q7gDtUO4Q7iDuMO4w7kDuEO4g7hDuUO5Q7mDuIO5w7mDuUO5Q7oDucO6Q7qDusO6Q7rDuwO7Q7pDuwO7g7vDvAO7g7wDvEO8A7yDvEO8w70DvUO9g7zDvUO8w72DvcO+A7zDvcO8w74DvkO+g7zDvkO8w76DvsO/A7zDvsO8w78Dv0O9A7zDv0O/g7/DgAPAA8BD/4OAg8DDwQPBA8FDwIPBg8HDwgPCA8JDwYPCg8LDwwPDA8NDwoPDg8PDxAPEA8RDw4PEg8TDxQPFA8VDxIPFg8XDxgPGA8ZDxYPGg8bDxwPHA8dDxoPHg8fDyAPIA8hDx4PIg8jDyQPJA8lDyIPJg8nDygPKA8pDyYPKg8rDywPLA8tDyoPLg8vDzAPMA8xDy4PMg8zDzQPNA81DzIPNg83DzgPOA85DzYPOg87DzwPPA89DzoPPg8/D0APQA9BDz4PQg9DD0QPRA9FD0IPRg9HD0gPSA9JD0YPSg9LD0wPTA9ND0oPTg9PD1APUA9RD04PUg9QD08PTw9TD1IPUQ9QD1QPVA9QD1IPVA9VD1EPVg9VD1QPVA9XD1YPWA9XD1QPVA9ZD1gPUg9ZD1QPWA9ZD1oPWg9ZD1IPWg9bD1gPUg9TD1wPXA9dD1IPUg9dD1oPXg9fD2APYA9hD14PXw9eD2IPYg9jD18PYw9iD2QPZA9lD2MPZg9nD2gPZg9oD2kPZg9pD2oPaw9sD20Paw9tD24Paw9uD28PcA9xD3IPcw9xD3APcA90D3MPdQ90D3APcA92D3UPdw92D3APcA94D3cPeQ94D3APcA96D3kPcg96D3APew98D30PfQ9+D3sPfw+AD4EPgQ+CD38Pgw+ED4UPhQ+GD4MPhw+ID4kPiQ+KD4cPiw+MD40PjQ+OD4sPjw+QD5EPkQ+SD48Pkw+UD5UPlQ+WD5MPlw+YD5kPmQ+aD5cPmw+cD50PnQ+eD5sPnw+gD6EPoQ+iD58Pow+kD6UPpQ+mD6MPpw+oD6kPqQ+qD6cPqw+sD60PrQ+uD6sPrw+wD7EPsQ+yD68Psw+0D7UPtQ+2D7MPtw+4D7kPuQ+6D7cPuw+8D70PvQ++D7sPvw/AD8EPwQ/CD78Pww/ED8UPxQ/GD8MPxw/ID8kPyQ/KD8cPyw/MD80PzQ/OD8sPzw/LD84Pzg/QD88Pyw/PD9EP0Q/SD8sPzA/LD9MP0w/UD8wP1Q/SD9EP0Q/WD9UP1w/UD9MP0w/YD9cPzg/ND9kP2Q/aD84P0A/OD9oP2g/bD9AP3A/aD9kP2Q/dD9wP3g/bD9oP2g/cD94P3w/RD+AP4A/hD98P4Q/gD9AP4g/jD+QP5A/lD+IP5Q/kD+YP0A/nD+EP5w/QD9sP5g/oD+UP4w/iD+kP6Q/qD+MP0Q/fD+sP6w/WD9EP2w/sD+cP6A/mD+wP7A/bD94P7A/tD+gP3g/uD+wP7Q/sD+4P7g/vD+0P8A/xD/IP8w/0D/UP9Q/2D/MP9w/4D/kP+Q/6D/cP+w/3D/oP+g/8D/sP/Q/7D/wP/A/+D/0P/w/9D/4P/g8AEP8PARD/DwAQABACEAEQ8g8DEPAPBBAFEAYQBxABEAIQAhDXDwcQCBAHENcP1w/YDwgQCRAKEAsQCxAMEAkQDRAOEA8QDxAQEA0QERASEOoP6g/pDxEQExAREOkP6Q8UEBMQFRATEBQQFBAWEBUQFRAWEBcQFxAYEBUQGBAXEBkQGRAaEBgQGxAaEBkQGRAEEBsQBhAbEAQQHBAdEB4QHhAfEBwQIBAcEB8QHxAhECAQIhAgECEQIRAjECIQJBAiECMQIxAlECQQJhAkECUQJRAnECYQKBAmECcQJxApECgQKhAoECkQKRArECoQLBAqECsQKxAtECwQLhAsEC0QLRAvEC4QMBAuEC8QLxAxEDAQMhAwEDEQMRAzEDIQNBAyEDMQMxA1EDQQNhA0EDUQNRA3EDYQOBA2EDcQNxA5EDgQOhA4EDkQORA7EDoQPBA6EDsQOxA9EDwQPhA8ED0QPRA/ED4QHRA+ED8QPxAeEB0QQBBBEEIQQhBDEEAQRBBAEEMQQxBFEEQQRhBEEEUQRRBHEEYQSBBGEEcQRxBJEEgQShBIEEkQSRBLEEoQTBBKEEsQSxBNEEwQThBMEE0QTRBPEE4QUBBOEE8QTxBREFAQUhBQEFEQURBTEFIQVBBSEFMQUxBVEFQQVhBUEFUQVRBXEFYQWBBWEFcQVxBZEFgQWhBYEFkQWRBbEFoQXBBaEFsQWxBdEFwQXhBfEGAQYBBhEF4QYhBjEGQQZBBlEGIQZhBnEGgQaBBpEGYQQRBmEGkQaRBCEEEQahBrEGwQbRBsEGsQaxBuEG0QbxBtEG4QbhBwEG8QcRBvEHAQcBByEHEQcxBxEHIQchB0EHMQdRBzEHQQdBB2EHUQdxB1EHYQdhB4EHcQeRB3EHgQeBB6EHkQexB5EHoQehB8EHsQfRB7EHwQfBB+EH0QfxB9EH4QfhCAEH8QgRB/EIAQgBCCEIEQgxCBEIIQghCEEIMQhRCDEIQQhBCGEIUQhxCFEIYQhhCIEIcQiRCHEIgQiBCKEIkQixCJEIoQihCMEIsQjRCLEIwQjBBqEI0QbBCNEGoQjhCPEJAQkBCREI4QjhCREJIQkhCTEI4QlBCTEJIQkhCVEJQQlhCQEI8QjxCXEJYQmBCWEJcQlxCZEJgQmhCbEJwQnBCdEJoQnhCfEKAQoBChEJ4QohCjEKQQpBClEKIQphCnEKgQqBCpEKYQqhCrEKwQrBCtEKoQrhCqEK0QrRCvEK4QsBCuEK8QrxCxELAQshCwELEQsRCzELIQtBCyELMQsxC1ELQQthC3ELgQuBC5ELYQuhC7ELwQvBC9ELoQvhC6EL0QvRC/EL4QwBDBEMIQwhDDEMAQxBDFEMYQxhDHEMQQxRDEEMgQyBDJEMUQyhDIEMQQxBDLEMoQzBDEEMcQxxDNEMwQyhDLEM4QzhDPEMoQ0BDREMwQzBDNENAQ0hDGEMUQxRDTENIQ0xDFEMkQyRDUENMQ0hDTENUQ1RDWENIQ1xDVENMQ0xDUENcQ2BDKENkQ2RDaENgQyRDYENoQ2xDcEN0Q3RDeENsQ3xDbEN4Q2hDgEMkQ1BDJEOAQ3hDhEN8Q4hDdENwQ3BDjEOIQ5BDZEMoQyhDPEOQQ4BDlENQQ5RDfEOEQ1xDUEOUQ4RDmEOUQ5RDnENcQ5xDlEOYQ5hDoEOcQ6RDqEOsQ7BDtEO4Q7hDvEOwQ8BDxEPIQ8hDzEPAQ8xDyEPQQ9BD1EPMQ9RD0EPYQ9hD3EPUQ9xD2EPgQ+BD5EPcQ+RD4EPoQ+hD7EPkQ6xD8EOkQ/RD+EP8Q+xD6EAARABHQEPsQ0BAAEQERARHRENAQAhEDEQQRBBEFEQIRBhEHEQgRCBEJEQYR4xAKEQsRCxHiEOMQ4hALEQwRDBENEeIQDREMEQ4RDhEPEQ0REBEPEQ4RDhERERAREhEQERERERETERIREhETERQRFBH/EBIR/xAUEf0QFREWERcRFxEYERURGBEXERkRGREaERgRGhEZERsRGxEcERoRHBEbER0RHREeERwRHhEdER8RHxEgER4RIBEfESERIREiESARIhEhESMRIxEkESIRJBEjESURJREmESQRJhElEScRJxEoESYRKBEnESkRKREqESgRKhEpESsRKxEsESoRLBErES0RLREuESwRLhEtES8RLxEwES4RMBEvETERMREyETARMhExETMRMxE0ETIRNBEzETURNRE2ETQRNhE1ETcRNxE4ETYROBE3ERYRFhEVETgRORE6ETsROxE8ETkRPBE7ET0RPRE+ETwRPhE9ET8RPxFAET4RQBE/EUERQRFCEUARQhFBEUMRQxFEEUIRRBFDEUURRRFGEUQRRhFFEUcRRxFIEUYRSBFHEUkRSRFKEUgRShFJEUsRSxFMEUoRTBFLEU0RTRFOEUwRThFNEU8RTxFQEU4RUBFPEVERURFSEVARUhFREVMRUxFUEVIRVBFTEVURVRFWEVQRVxFYEVkRWRFaEVcRWxFcEV0RXRFeEVsRXxFgEWERYRFiEV8RYhFhEToROhE5EWIRYxFkEWURZRFmEWMRZhFlEWcRZxFoEWYRaBFnEWkRaRFqEWgRahFpEWsRaxFsEWoRbBFrEW0RbRFuEWwRbhFtEW8RbxFwEW4RcBFvEXERcRFyEXARchFxEXMRcxF0EXIRdBFzEXURdRF2EXQRdhF1EXcRdxF4EXYReBF3EXkReRF6EXgRehF5EXsRexF8EXoRfBF7EX0RfRF+EXwRfhF9EX8RfxGAEX4RgBF/EYERgRGCEYARghGBEYMRgxGEEYIRhBGDEYURhRGGEYQRhhGFEWQRZBFjEYYRhxGIEYkRiRGKEYcRihGJEYsRixGMEYoRjBGLEY0RjRGOEYwRiBGHEY8RjxGQEYgRkBGPEZERkRGSEZARkxGUEZURlRGWEZMRlxGYEZkRmRGaEZcRmxGcEZ0RnRGeEZsRnxGgEaERoRGiEZ8RoxGkEaURpRGmEaMRphGlEacRpxGoEaYRqBGnEakRqRGqEagRqhGpEasRqxGsEaoRrBGrEa0RrRGuEawRrxGwEbERsRGyEa8RsxG0EbURtRG2EbMRthG1EbcRtxG4EbYRuRG6EbsRuxG8EbkRvRG+Eb8RvxHAEb0RwRG9EcARwBHCEcERwxG+Eb0RvRHEEcMRvhHDEcURxRHGEb4RvxG+EcYRxxHGEcURxRHIEccRxhHJEb8RyRHGEccRyhHDEcQRxBHLEcoRzBHLEcQRxBHNEcwRzRHEEb0RvRHBEc0RxxHOEckRzxHQEdER0RHSEc8R0xHQEc8RzxHUEdMR1RHTEdQR1BHWEdUR1xHVEdYR1hHYEdcR2RHXEdgR2BHaEdkR2xHcEd0R3RHeEdsR3xHgEeER4RHiEd8R4xHfEeIR4hHkEeMR5RHjEeQR5BHmEeUR5xHlEeYR5hHoEecR6RHqEesR6xHsEekR7RHpEewR7BHuEe0R7xHtEe4R7hHwEe8R8RHvEfAR8BHyEfER8xHxEfIR8hH0EfMR9RHzEfQR9BH2EfUR9xH4EfkR+RH6EfcR+xH5EfgR+BH8EfsR/RH7EfwR/BH+Ef0R/xH9Ef4R/hEAEv8RARICEgMSAxIEEgESBRIBEgQSBBIGEgUSBxIDEgISAhIIEgcSBxIIEgkSCRIKEgcSCxIKEgkSCRIMEgsSDRILEgwSDBIOEg0SBRIGEg8SDxIQEgUSERIQEg8SDxISEhESExIREhISEhIUEhMSFRITEhQSFBIWEhUSFxIYEhkSGRIaEhcSGBIXEhsSGxIcEhgSFxIaEh0SHRIeEhcSHxIdEhoSGhIgEh8SIBIaEhkSHxIgEiESIRIiEh8SGRIjEiASIRIgEiMSHhIdEiQSJBIlEh4SHhIlEiYSJhInEh4SJxIbEhcSFxIeEicSIxIoEiESKRIqEisSKxIsEikSLBIrEi0SLRIuEiwSLhItEi8SLxIwEi4SMBIvEjESMRIyEjASMhIxEjMSMxI0EjISNRI2EjcSNxI4EjUSORI6EjsSOxI8EjkSPBI7Ej0SPRI+EjwSPhI9Ej8SPxJAEj4SQBI/EkESQRJCEkASQxJEEkUSRRJGEkMSRhJFEkcSRxJIEkYSSBJHEkkSSRJKEkgSShJJEksSSxJMEkoSTBJLEk0STRJOEkwSThJNEk8STxJQEk4SURJSElMSUxJUElESVBJTElUSVRJWElQSVhJVElcSVxJYElYSWBJXElkSWRJaElgSWxJcEl0SXRJeElsSXBJbEl8SXxJgElwSXhJdEmESYRJiEl4SYxJiEmESYRJkEmMSYxJkEmUSZRJmEmMS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zRPOE8sTzxPOE80TzRPQE88T0RPPE9AT0BPSE9ET0xPRE9IT0hPUE9MT1RPUE9IT0hPWE9UT1hPSE9AT0BPXE9YT2BPXE9AT0BPNE9gT2RPYE80TzRPME9kT2hPbE9wT3BPdE9oT3hPfE+AT4BPhE94T3xPeE+IT4hPjE98T4xPiE+QT5BPlE+MT5hPlE+QT5BPnE+YT6BPmE+cT5xPpE+gT6BPpE+oT6hPrE+gT6xPqE+wT7BPtE+sT7RPsE+4T7hPvE+0T7xPuE/AT8BPxE+8T8RPwE/IT8hPzE/ET8xPyE+ET4RPgE/MT9BP1E/YT9hP3E/QT+BP5E/oT+hP7E/gT9RP0E/wT/BP9E/UT/RP8E/4T/hP/E/0TABQBFAIUAhQDFAAUAxQCFAQUBBQFFAMUBhQHFAgUCBQJFAYUCRQIFAoUChQLFAkUDBQNFA4UDhQPFAwUEBQRFBIUEhQTFBAUERQQFBQUFBQVFBEUFhQXFBgUGBQZFBYUFhQZFBoUGhQbFBYUGxQaFBwUHBQdFBsUHhQdFBwUHBQfFB4UIBQhFCIUIhQjFCAUIxQiFCQUJBQlFCMUJhQnFCgUKBQpFCYUJxQmFCoUKhQrFCcULBQtFC4ULhQvFCwUMBQvFC4ULhQxFDAUMhQzFDQUNBQ1FDIUNhQ3FDgUORQ6FDsUOhQ8FDsUORQ7FD0UOxQ+FD0UPxRAFEEUPhRCFD0UORQ9FEMUPRREFEMURRRGFEcURxRIFEUUSRRIFEcURxRKFEkUSxRFFEgUSBRMFEsUTBRIFEkUTRRLFEwUTBROFE0UTxROFEwUTBRQFE8USRRQFEwUURRHFEYUUhRTFFQURxRRFFUUVRRKFEcUSRRKFFYUVhRKFFUUVhRXFEkUTxRQFFgUSRRXFFgUWBRQFEkUWBRZFE8UVRRaFFYUWxRcFF0UXRReFFsUWxReFF8UXxRgFFsUYRRiFGMUYxRkFGEUZRRhFGQUZBRmFGUUZxRoFGkUahRrFGwUbBRtFGoUbRRjFGIUYhRqFG0UbhRsFGsUaxRvFG4UcBRxFGcUZxRyFHAUaRRyFGcUcxRuFG8UbxR0FHMUdRRxFHAUdhRzFHQUdBR3FHYUeBR5FHUUdRR6FHgUcBR6FHUUexRlFGYUfBR9FH4UfxR+FH0UfRSAFH8UgRR/FIAUgBSCFIEUgRSCFIMUgxSEFIEUhRSGFIcUhxSIFIUUiRR7FIoUihSLFIkUixSHFIYUhhSJFIsUZhSKFHsUfhSMFHwUXxR8FIwUjBRgFF8UjRSOFI8UjxSQFI0UkRSQFI8UjxSSFJEUkxSUFJUUlRSWFJMUlhSVFJcUlxSYFJYUkRSSFJkUmRSaFJEUmxSYFJcUlxScFJsUnRSeFJ8UnxSgFJ0UoRSgFJ8UnxSiFKEUoxSeFJ0UnRSkFKMUpRSmFKcUpxSoFKUUqRSnFKYUphSqFKkUqxSsFK0UrRSuFKsUrxStFKwUrBSwFK8UrhStFLEUsRSyFK4UrRSvFLMUsxSxFK0UtBSrFK4UrhS1FLQUtRSuFLIUshS2FLUUtxS4FLkUuRS6FLcUuxS6FLkUuRS8FLsUvRS5FLgUuBS+FL0UvxS6FLsUuxTAFL8UwRS8FLkUuRS9FMEUwhTDFMQUxBTFFMIUxhTEFMMUwxTHFMYUyBTJFMoUyhTLFMgUzBTJFMgUyBTNFMwUzhTLFMoUyhTPFM4U0BTRFNIU0hTTFNAU1BTSFNEU0RTVFNQU1hTXFNgU2BTZFNYU2hTYFNcU1xTbFNoU3BTdFN4U3hTfFNwU4BThFOIU4hTjFOAU5BTlFOYU5hTnFOQU6BTpFOoU6hTrFOgU7BTtFO4U7hTvFOwU8BTsFO8U7xTxFPAU8hTuFO0U7RTzFPIU9BT1FPYU9hT3FPQU+BT5FPoU+hT7FPgU/BT4FPsU+xT9FPwU/hT6FPkU+RT/FP4UABUBFQIVAhUDFQAVBBUFFQYVBhUHFQQVBRUEFQgVCBUJFQUVChUEFQcVBxULFQoVDBUIFQQVBBUKFQwVDBUKFQ0VDRUOFQwVDxUQFREVERUSFQ8VExUUFRUVFRUWFRMVFxUYFRkVGRUaFRcVGxUXFRoVGhUcFRsVHRUbFRwVHBUeFR0VHxUdFR4VHhUgFR8VIRUZFRgVGBUiFSEVIxUhFSIVIhUkFSMVJRUjFSQVJBUmFSUVJxUoFSkVKRUqFScVKhUpFSsVKxUsFSoVKBUnFS0VLRUuFSgVLxUwFTEVMRUyFS8VMhUxFTMVMxU0FTIVNRU2FTcVNxU4FTUVNhU1FTkVORU6FTYVOxU8FT0VOxU9FT4VPRU/FT4VOxU+FUAVPhVBFUAVOxVAFUIVQxVEFUUVRRVGFUMVQxVGFUcVRxVIFUMVRhVFFUkVSRVKFUYVRxVGFUoVShVJFUsVSxVMFUoVShVMFU0VTRVOFUoVShVOFUcVRBVDFU8VUBVRFVIVQxVIFVMVUxVPFUMVVBVIFUcVUxVIFVQVRxVVFVQVVhVOFU0VRxVOFVYVVhVVFUcVTRVXFVYVVBVYFVMVWRVaFVsVWxVcFVkVWhVZFV0VXRVeFVoVXxVgFWEVYRViFV8VYhVhFWMVYxVkFWIVZRVmFWcVaBVpFWoVahVrFWgVYBVfFWsVaxVqFWAVaRVoFWwVbBVtFWkVbhVnFW8VZxVuFWUVbxVwFW4VbRVsFXEVcRVyFW0VcBVvFXMVchVxFXQVdBV1FXIVcxV2FXcVdxV4FXMVcxV4FXAVZBVjFXkVehV7FXwVfBV9FXoVexV6FX4VfhV/FXsVfxV+FYAVgBWBFX8VghWBFYAVgBWDFYIVhBWFFYYVhhWHFYQViBV5FYkViRWKFYgVhRWEFYoVihWJFYUVeRWIFWQVfRV8FV4VXhVdFX0VixWMFY0VjRWOFYsVixWOFY8VjxWQFYsVkRWSFZMVkxWUFZEVlRWWFZEVkRWUFZUVlxWQFY8VjxWYFZcVmRWaFZYVlhWVFZkVmxWcFZ0VnRWeFZsVnRWcFZ8VnxWgFZ0VmxWeFaEVoRWiFZsVoxWkFaUVpRWmFaMVphWlFacVpxWoFaYVqRWqFasVqxWsFakVrBWrFa0VrRWuFawVrxWrFaoVqhWwFa8VqxWvFbEVsRWtFasVqhWpFbIVshWzFaoVsBWqFbMVsxW0FbAVtRW2FbcVtxW4FbUVtxW2FbkVuRW6FbcVuBW3FbsVuxW8FbgVvRW7FbcVtxW6Fb0VvhW/FcAVwBXBFb4VwRXAFcIVwhXDFcEVxBXFFcYVxhXHFcQVxBXHFcgVyBXJFcQVxhXFFcoVyhXLFcYVzBXNFc4VzhXPFcwVzxXOFdAV0BXRFc8V0hXTFdQV1BXVFdIV1RXUFdYV1hXXFdUV2BXZFdoV2hXbFdgV3BXdFd4V3hXfFdwV4BXhFeIV4hXjFeAV5BXlFeYV5hXnFeQV6BXpFeoV6hXrFegV6RXoFewV7BXtFekV7hXrFeoV6hXvFe4V8BXxFfIV8hXzFfAV9BX1FfYV9hX3FfQV9RX0FfgV+BX5FfUV+hX3FfYV9hX7FfoV/BX9Ff4V/hX/FfwVABYBFgIWAhYDFgAWBBYAFgMWAxYFFgQWARYAFgYWBhYHFgEWCBYGFgAWABYEFggWCRYKFgsWCxYMFgkWDRYOFg8WDxYQFg0WERYSFhMWExYUFhEWEhYRFhUWFRYWFhIWFhYVFhcWFxYYFhYWGBYXFhkWGRYaFhgWFBYTFhsWGxYcFhQWHBYbFh0WHRYeFhwWHhYdFh8WHxYgFh4WIRYiFiMWIxYkFiEWJRYjFiIWIhYmFiUWJxYhFiQWJBYoFicWKRYqFisWKxYsFikWLRYrFioWKhYuFi0WLxYwFjEWMRYyFi8WMxYvFjIWMhY0FjMWNRY2FjcWNRY3FjgWNxY5FjgWNxY6FjkWORY7FjgWNRY4FjwWPRY+Fj8WPxZAFj0WQRY9FkAWQBZCFkEWQxZBFkIWQhZEFkMWRRZDFkQWRBZGFkUWRRZGFkcWRxZIFkUWRRZIFkkWShZJFkgWSRZKFksWTBZLFkoWSxZMFk0WTRZOFksWTxZOFk0WTRZQFk8WShZRFkwWURZKFlIWSBZSFkoWUhZIFkcWUhZTFlEWUxZSFlQWRxZUFlIWVBZVFlMWTxZWFk4WTxZXFlYWVxZYFlYWWBZXFlkWWRZaFlgWWxZYFloWVhZYFlsWWhZcFlsWXRZbFlwWWxZdFlYWXBZeFl0WXxZdFl4WVhZdFl8WXhZgFl8WYRZfFmAWYBZiFmEWYxZiFmAWYBZkFmMWZBZgFl4WZRZjFmQWZBZmFmUWZRZmFmcWZxZoFmUWXhZpFmQWaRZeFlwWXBZqFmkWaRZqFmsWaxZsFmkWZBZpFmwWbBZmFmQWbBZrFm0WbRZuFmwWbhZnFmYWZhZsFm4WbxZuFm0WZxZuFm8WbRZwFm8WcRZvFnAWcBZyFnEWcRZyFnMWcxZ0FnEWcRZ0FnUWdRZ2FnEWbxZxFnYWdhZ3Fm8WbxZ3FmcWZxZ3FngWeBZoFmcWeRZ4FncWdxZ2FnkWdhZ1FnoWehZ5FnYWaBZ4FnsWexY+FmgWfBZ7FngWeBZ5FnwWeRZ6Fn0WfRZ8FnkWfhZ8Fn0WexZ8Fn4WfRZ/Fn4WfxZ9FoAWgBZ9FnoWgBaBFn8WghaBFoAWgBaDFoIWaBY+Fj0WPRZlFmgWZRY9FkEWQRZjFmUWYhZjFkEWQRZDFmIWYhZDFkUWRRZhFmIWSRZhFkUWXxZhFkkWSRaEFl8WXxaEFlYWThZWFoQWhBZLFk4WSxaEFkkWhRaGFoMWhhaFFocWhxaIFoYWiBaHFokWiRaKFogWixaKFokWiRaMFosWhxaFFnoWehZ1FocWhxZ1FnQWdBaJFocWcxaMFokWiRZ0FnMWjBZzFnIWchaNFowWjRZyFnAWcBaOFo0WjhZwFm0WbRaPFo4WjxZtFmsWaxaQFo8WkRaQFmsWaxZqFpEWkRZqFlwWXBZaFpEWkRZaFlkWkhaTFpQWlBaVFpIWlhaSFpUWlRaXFpYWlxaVFpgWmBaVFpQWmBaZFpcWlBaaFpgWmhaUFpsWmxaUFpMWmxacFpoWnRacFpsWmxaeFp0WlxaZFp8WnxagFpcWlhaXFqAWoRagFp8WnxaiFqEWoxahFqIWohakFqMWpRagFqEWoBalFpYWoRamFqUWpxamFqEWoRajFqcWqBaeFpsWmxapFqgWkxapFpsWqharFqwWrBatFqoWrhatFqwWrBavFq4WrhavFrAWsBaxFq4WrRauFrIWshazFq0WsxayFrQWtBa1FrMWsxa1FrYWtha3FrMWtxaqFq0WtxatFrMWrhaxFrgWuBayFq4WtBayFrgWtRa5FrYWuRa1FrQWtBa6FrkWuxa6FrQWtBa8FrsWuBa8FrQWvRaxFrAWsBa+Fr0Wvxa9Fr4WvhbAFr8WwRa4FrEWsRa9FsEWvRa/FsIWwhbBFr0WwRbCFsMWwxbEFsEWxBa8FrgWuBbBFsQWxRa7FrwWvBbEFsUWxRbEFsMWwBa+FsYWxha+FrAWsBbHFsYWxhbIFsAWyRbHFrAWsBavFskWyhbJFq8WrxasFsoWyhasFqsWqxbLFsoWyxarFswWzBarFs0WzhbMFs0WqxaqFs0WqhbPFs0WzxaqFtAW0RbSFtMWzBbUFssW1BbMFs4WzhbVFtQW1hbXFtgW1xbWFtkW2RbaFtcW2hbZFtsW2hbbFtwW3RbeFt8W3BbbFuAW4BbhFtwW4hbhFuAW4BbjFuIW5BblFuYW5hbnFuQW6BbpFuoW6hbrFugW5RboFusW6xbmFuUW6RbsFu0W7RbqFukW7hbtFuwW7BbvFu4W8BbxFvIW8hbzFvAW8hbxFvQW9Bb1FvIW9Rb0FvYW9hb3FvUW9xb2FvgW+Bb5FvcW+Rb4FvoW+hb7FvkW/Bb9Fv4W/hb/FvwW/xb+FgAXABcBF/8WARcAFwIXAhcDFwEX/BYEF/0W/RYEFwUXBRcGF/0WBxcGFwUXCBcJFwoXCxcMFw0XDRcOFwsXDxcIFwoXEBcRFxIXEhcTFxAXEhcRFxQXFBcVFxIXFBcWFxUXFBcXFxYXFhcYFxUXGRcaFxsXGxccFxkXHRcbFxoXGhceFx0XHxcgFyEXIRciFx8XHxciFyMXIxckFx8XJRckFyMXIxcmFyUXJxclFyYXJhcoFycXJxcoFykXKRcqFycXKxcsFy0XLhcrFy0XLxcuFy0XMBcxFzIXMhczFzAXNBcsFysXKxc1FzQXNhc0FzUXNRc3FzYXOBc2FzcXNxc5FzgXOhc4FzkXORc7FzoXPBc9Fz4XPhc/FzwXPxc+F0AXQBdBFz8XQRdAF0IXQhdDF0EXRBc9FzwXPBdFF0QXRBdFF0YXRhdHF0QXRxdGF0gXSBdJF0cXSRdIF0oXSxdMF00XThdPF1AXUBdRF04XUhdRF1AXUBdTF1IXVBdPF04XThdVF1QXVhdUF1UXVRdXF1YXVhdXF1gXWBdZF1YXWRdYF1oXWhdbF1kXUhdTF1wXXBddF1IXXhdfF2AXYBdhF14XYhdhF2AXYxdkF2UXXxdeF2YXZhdnF18XaBdnF2YXZhdpF2gXahdoF2kXaRdrF2oXahdrF2wXbBdtF2oXbhdtF2wXbBdvF24XPxY+FnsWexZwFz8WfhZwF3sWgxaAFoUWehaFFoAWcRdyF3MXcxd0F3EXdBdzF3UXdRd2F3QXdhd1F3cXdxd4F3YXeBd3F3kXeRd6F3gXexd6F3kXeRd8F3sXfRd8F3kXfBd9F34Xfxd+F30Xfhd/F4AXgReAF38XfxeCF4EXgxeBF4IXgheEF4MXgBeFF34Xhhd+F4UXfheGF3wXexd8F4YXhReHF4YXiBeGF4cXhheIF3sXhxeJF4gXhBeCF4oXixeEF4oXjBeLF4oXjReLF4wXjBeOF40XjheMF48XjxeMF4oXjxeQF44XkBePF5EXiheRF48XkReSF5AXkheRF5MXkxeRF4oXkxeUF5IXlBeTF5UXlReWF5QXlBeWF5cXlxeYF5QXkheUF5gXmBeXF5kXmReaF5gXmxeaF5kXmRecF5sXmBedF5IXkBeSF50XnReeF5AXnxeeF50XnRegF58XoBedF5gXmBeaF6AXoRefF6AXoBeiF6EXmhebF6IXohegF5oXoReiF6MXoxeiF5sXoxekF6EXpBejF6UXpRemF6QXpxemF6UXpReoF6cXqReoF6UXpReqF6kXqhelF6MXoxerF6oXmxerF6MXrBerF5sXmxecF6wXqxesF60XrReqF6sXqhetF64XrhepF6oXrxesF5wXnBdyF68XrBevF7AXsBetF6wXrRewF7EXsReuF60XsRewF7IXshewF68XshezF7EXtBexF7MXrhexF7QXsxe1F7QXtBe1F7YXthe3F7QXcxdyF5wXnBeZF3MXdRdzF5kXmReXF3UXdReXF5YXlhd3F3UXeRd3F5YXlheVF3kXeReVF30XfReVF5MXkxe4F30Xihe4F5MXuBeKF4IXghd/F7gXfRe4F38XuRe0F7cXtBe5F64Xrhe5F7oXuhe5F7sXuxe8F7oXvRe6F7wXvBe+F70Xvxe9F74XvhfAF78XuhepF64Xuhe9F6gXqBepF7oXpxeoF70XvRe/F6cXpxe/F8EXwRemF6cXpBemF8EXwRfCF6QXoRekF8IXwhfDF6EXnxehF8MXwxfEF58XnxfEF8UXxReeF58XkBeeF8UXxReOF5AXxReNF44XxhfHF8gXyBfJF8YXyRfIF8oXyhfLF8kXzBfJF8sXxhfJF8wXyxfNF8wXzBfOF8YXzxfGF84XxxfGF88XzhfQF88X0RfPF9AX0BfSF9EX0xfNF8sXyxfUF9MX1BfLF8oX0xfUF9UX1RfWF9MX1hfVF9cX1xfYF9YX1RfUF9kXyhfZF9QX2RfaF9UX2xfXF9UX1RfaF9sXzxfRF9wX3BfdF88XzxfdF8cX3hffF+AX4BfhF94X3hfhF+IX4hfjF94X5BfjF+IX4hflF+QX5hfiF+EX4RfnF+YX6BfmF+cX5xfpF+gX6hfpF+cX5xfrF+oX6xfnF+EX4BfrF+EX7BflF+IX4hfmF+wX7BfmF+gX6RfqF+0X6BfpF+0X7RfuF+gX6BfuF+8X7xfwF+gX6BfwF+wX5BflF/EX8RfyF+QX8hfxF/MX8xf0F/IX5RfsF/UX9RfxF+UX8Rf1F/YX9hfzF/EX9xf2F/UX9Rf4F/cX+Bf1F+wX7BfwF/gX8BfvF/kX+Rf4F/AX9xf4F/kX+hfyF/QX5BfyF/oX+hf7F+QX9Bf8F/oX5Bf7F/0X/RfjF+QX4xf9F/4X/hfeF+MX3xfeF/4X/hf/F98XABjfF/8XABgBGN8XARgAGAIYARjgF98XARgDGOAXAxgEGOAXBRgGGAcY/xcIGAAYAhgAGAgYCBgJGAIYChgLGAwYChgMGA0YDRgOGAoYDRgPGA4YDRgQGA8YEBgRGA8YEhgPGBEYERgTGBIYEhgTGBQYFBgVGBIYFhgXGBgYGBgZGBYYGhgbGBwYHBgdGBoYHRgcGBcYFxgWGB0YHhgfGBsYGxgaGB4YIBghGB8YHxgeGCAYIhgjGCQYJBglGCIYJhglGCQYJBgnGCYYKBgmGCcYJxgpGCgYKhgoGCkYKRgrGCoYLBgqGCsYKxgtGCwYLhgvGDAYMBgxGC4YMhgwGC8YLxgzGDIYNBgyGDMYMxg1GDQYLhgxGDYYNxg2GDEYMRg4GDcYNxg4GDkYOhg7GDwYPRg+GD8YPxhAGD0YOhhBGDsYQhhDGEQYRBhFGEIYRhhEGEMYQxhHGEYYRxhIGEYYRxhJGEgYSBhKGEYYSxhMGE0YTRhOGEsYThhNGE8YTxhQGE4YURhSGFMYUxhUGFEYVRhSGFEYURhWGFUYVRhWGFcYVxhYGFUYWBhXGFkYWRhaGFgYWxhaGFkYWRhcGFsYXRheGF8YXRhfGGAYXRhgGGEYYhhjGGQYZBhlGGIYXxheGGYYZhhnGF8YZxhmGGgYaBhpGGcYaRhoGGoYahhrGGkYbBhrGGoYahhtGGwYbhhvGHAYcBhxGG4YchhuGHEYcRhzGHIYdBhyGHMYcxh1GHQYcBhvGHYYdhh3GHAYeBh3GHYYdhh5GHgYehh4GHkYeRh7GHoYfBh6GHsYfRh+GH8YgBiBGIIYghiDGIAYgBiDGIQYhBiFGIAYghiBGIYYhhiHGIIYhxiGGIgYiBiJGIcYihiJGIgYiBiLGIoYjBiKGIsYixiNGIwYjhiFGIQYhBiPGI4YkBiRGJIYkhiTGJAYkBiTGJQYlRiWGJcYmBiSGJEYkRiZGJgYmBiZGJoYmhibGJgYmxiaGJwYnBidGJsYnhidGJwYnBifGJ4YnhifGKAYoBihGJ4YrxdyF3EXcReiGK8XrxeiGLIXtxe7F7kXoxikGKUYpRimGKMYoximGKcYpxioGKMYqRimGKUYpRiqGKkYqxipGKoYqhisGKsYqxisGK0YrRiuGKsYpRikGK8YrxiwGKUYsBivGLEYsRiyGLAYsxi0GLUYtRi2GLMYthi1GLcYtxi4GLYYthi4GLkYuRi6GLYYuxi0GLMYsxi8GLsYvRi7GLwYvBi+GL0YvRi+GL8YvxjAGL0YwBi/GMEYwRjCGMAYwhjBGMMYwxjEGMIYxRjGGMcYxxjIGMUYyRjGGMUYxRjKGMkYyRjKGMsYyxjMGMkYyBjHGM0YzRjOGMgYzxjMGMsYyxjQGM8Y0RjSGNMY0xjUGNEY1RjTGNIY0hjWGNUY1xjYGNkY2RjaGNcY2xjcGN0Y3RjeGNsY2xjeGN8Y3xjgGNsY4RjiGOMY4xjkGOEY5RjmGOcY5xjoGOUY6RjqGOsY6xjsGOkY6RjsGO0Y7RjuGOkY7xjwGPEY8RjyGO8Y8xjwGO8Y9Bj1GPYY9xj2GPUY9Rj4GPcY9xj4GPkY+Rj6GPcY+xj8GP0Y/Rj+GPsY/xgAGQEZARkCGf8YAhkBGQMZAxkEGQIZBRkGGQcZBxkIGQUZzRgFGQgZCBnOGM0YCRkKGQYZBhkFGQkZCxkKGQkZCRkMGQsZDRkJGQUZDBkJGQ0ZBRkOGQ0ZDRkPGQwZEBkRGRIZEhkTGRAZFBkSGREZERkVGRQZFhkQGRMZExkXGRYZGBkUGRUZFRkZGRgZGRkaGRgZGxkWGRcZFxkcGRsZHRkeGR8ZHxkgGR0ZIRkfGR4ZHhkiGSEZIxkdGSAZIBkkGSMZJRkhGSIZIhkmGSUZJxkjGSQZJBkoGScZKRkqGSsZKxksGSkZLRkuGS8ZLxkwGS0ZLhktGTEZMRkyGS4ZMBkvGTMZMxk0GTAZNRkyGTEZMRk2GTUZNxk1GTYZNhk4GTcZORk0GTMZMxk6GTkZOxk8GT0ZPRk+GTsZPxlAGUEZQhk/GUEZQxlEGUUZRhlHGUgZSBlJGUYZSBlHGUoZShlLGUgZTBlNGU4ZThlPGUwZUBlNGUwZTBlRGVAZThlNGVIZUhlTGU4ZUxlSGVQZVBlVGVMZVhlVGVQZVBlXGVYZWBlPGU4ZThlZGVgZWhlYGVkZWRlbGVoZXBldGV4ZXhlfGVwZYBleGV0ZXRlhGWAZYhlhGV0ZXRljGWIZXBlfGWQZZBllGVwZZRlkGWYZZhlnGWUZaBlnGWYZZhlpGWgZahloGWkZaRlrGWoZbBlqGWsZaxltGWwZbhlvGXAZcBlxGW4ZcBlvGXIZchlzGXAZdBlzGXIZchl1GXQZdhluGXEZcRl3GXYZdBl1GXgZeBl5GXQZehl7GXwZfBl9GXoZfRl8GX4Zfhl/GX0ZgBmBGYIZghmDGYAZhBmFGYYZhhmHGYQZhxmGGYgZiBmJGYcZihmLGYwZjBmNGYoZjhmPGZAZkBmRGY4ZkhmTGZQZlBmVGZIZlRmUGZYZlhmXGZUZmBmZGZoZmhmbGZgZmxmaGZwZnRmeGZ8ZnhmdGaAZoBmhGZ4ZoRmgGaIZohmjGaEZpBmlGaYZphmnGaQZqBmpGaoZqhmrGagZqxmqGawZrBmtGasZrhmvGbAZsBmxGa4ZrxmuGXYZdhl3Ga8ZshmuGbEZsRmzGbIZshmzGbQZtBm1GbIZrhmyGbYZthmyGbUZthm3Ga4ZtRm4GbYZuRm6GbsZuxm8GbkZvBm7Gb0ZvRm+GbwZuhm5Gb8ZvxnAGboZvhm9GcEZwRnCGb4ZwhnBGcMZwBm/GcQZxBnFGcAZxhnHGcgZyBnJGcYZyRnIGcoZyhnLGckZxxnGGcwZzBnNGccZyxnKGc4ZzhnPGcsZzRnMGdAZ0BnRGc0Z0hnTGdQZ1BnVGdIZ1hnXGdgZ2BnZGdYZ2RnYGdoZ2hnbGdkZ1xnWGdwZ3BndGdcZ2xnaGd4Z3hnfGdsZ3xneGeAZ4BnhGd8Z3RncGeIZ4hnjGd0Z5BnlGeYZ5hnnGeQZ6BnpGeoZ6xnsGe0Z7BnuGe0Z7xnwGfEZ8RnyGe8Z8hnxGfMZ8xn0GfIZ9Rn2GfcZ9xn4GfUZ+Rn2GfUZ9Rn6GfkZ+Rn6GfsZ+xn8GfkZ/Rn8GfsZ+xn+Gf0Z/Rn+Gf8Z/xkAGv0ZARoAGv8Z/xkCGgEaARoCGgMaAxoEGgEaBRoEGgMaAxoGGgUaBRoGGgcaBxoIGgUaCRoIGgcaBxoKGgkaCRoKGgsaCxoMGgkaDRoOGg8aDxoQGg0aDxoOGhEaERoSGg8aExoSGhEaERoUGhMaExoUGhUaFRoWGhMaFhoVGvgZ+Bn3GRYaFxoYGhkaGRoaGhcaGxoXGhoaGhocGhsaHRobGhwaHBoeGh0aHxodGh4aHhogGh8aIRofGiAaIBoiGiEaIxohGiIaIhokGiMaJRojGiQaJBomGiUaJxoZGhgaGBooGicaKRonGigaKBoqGikaKxopGioaKhosGisaLRorGiwaLBouGi0aLxotGi4aLhowGi8aMRovGjAaMBoyGjEaMxoxGjIaMho0GjMaNRozGjQaNBo2GjUaNxo1GjYaNho4GjcaORo6GjsaOxo8GjkaPRo8GjsaOxo+Gj0aPRo+Gj8aPxpAGj0aQRpAGj8aPxpCGkEaQRpCGkMaQxpEGkEaRRpEGkMaQxpGGkUaRRpGGkcaRxpIGkUaOho5GkkaSRpKGjoaShpJGksaSxpMGkoaTRpMGksaSxpOGk0aTRpOGk8aTxpQGk0aURpQGk8aTxpSGlEaURpSGlMaUxpUGlEaVRpUGlMaUxpWGlUaVRpWGlcaVxpYGlUaWRpYGlcaVxpaGlkaWxpcGl0aXRpeGlsaXxpcGlsaWxpgGl8aXxpgGmEaYRpiGl8aYxpiGmEaYRpkGmMaYxpkGmUaZRpmGmMaZxpmGmUaZRpoGmcaZxpoGmkaaRpqGmcaaxpqGmkaaRpsGmsaaxpsGm0abRpuGmsabxpuGm0abRpwGm8abxpwGnEacRpyGm8acxp0GnUadRp2GnMacxp2Gncadxp4GnMaeRp4Gncadxp6GnkaeRp6Gnsaexp8GnkafBp7Gl4aXhpdGnwafRp+Gn8afxqAGn0agRp9GoAagBqCGoEagxqBGoIaghqEGoMahRqDGoQahBqGGoUahxqFGoYahhqIGocaiRqHGogaiBqKGokaixqJGooaihqMGosajRp/Gn4afhqOGo0ajxqNGo4ajhqQGo8akRqPGpAakBqSGpEakxqRGpIakhqUGpMalRqTGpQalBqWGpUalxqVGpYalhqYGpcamRqXGpgamBqaGpkamxqZGpoamhqcGpsanRqbGpwanBqeGp0anxqgGqEaohqgGp8aoRqjGp8apBqlGqYaoRqlGqQapBqjGqEaphqnGqQanxqoGqIaphqpGqoaqhqnGqYaqhqpGqsaqxqsGqoarRqsGqsaqxquGq0arRquGq8arxqwGq0asBqvGrEasRqyGrAashqxGrMasxq0GrIatRq0GrMasxq2GrUatRq2Grcatxq4GrUauRq4Grcatxq6GrkauRq6Grsauxq8GrkavRq8Grsauxq+Gr0avRq+Gr8avxrAGr0awRrCGsMawxrEGsEaxRrCGsEawRrGGsUaxRrGGscaxxrIGsUayRrIGscaxxrKGskayRrKGssayxrMGskazRrMGssayxrOGs0azRrOGs8azxrQGs0a0RrQGs8azxrSGtEa0RrSGtMa0xrUGtEa1RrWGtca1xrYGtUa1xrWGtka2RraGtca2xraGtka2RrcGtsa2xrcGt0a3RreGtsa3xreGt0a3RrgGt8a3xrgGuEa4RriGt8a4hrhGsQaxBrDGuIa4xrkGuUa5RrmGuMa5xrjGuYa5hroGuca6RrnGuga6BrqGuka6xrpGuoa6hrsGusa7RrrGuwa7BruGu0a7xrtGu4a7hrwGu8a8RrvGvAa8BryGvEa8xrxGvIa8hr0GvMa9RrzGvQa9Br2GvUa9xr1GvYa9hr4Gvca+Rr3Gvga+Br6Gvka+xr5Gvoa+hr8Gvsa/Rr7Gvwa/Br+Gv0a/xr9Gv4a/hoAG/8aARv/GgAbABsCGwEb5BoBGwIbAhvlGuQaAxsEGwUbBRsGGwMbBxsEGwMbAxsIGwcbBxsIGwkbCRsKGwcbCxsKGwkbCRsMGwsbCxsMGw0bDRsOGwsbDxsOGw0bDRsQGw8bDxsQGxEbERsSGw8bExsSGxEbERsUGxMbExsUGxUbFRsWGxMbFxsYGxkbGRsaGxcbGRsYGxsbGxscGxkbHRscGxsbGxseGx0bHRseGx8bHxsgGx0bIRsgGx8bHxsiGyEbIRsiGyMbIxskGyEbJBsjGwYbBhsFGyQbJRsmGycbJxsoGyUbKRsmGyUbJRsqGykbKRsqGysbKxssGykbLRssGysbKxsuGy0bLRsuGy8bLxswGy0bMRswGy8bLxsyGzEbMRsyGzMbMxs0GzEbNRs0GzMbMxs2GzUbNRs2GzcbNxs4GzUbORs6GzsbOxs8GzkbOxs6Gz0bPRs+GzsbPxs+Gz0bPRtAGz8bPxtAG0EbQRtCGz8bQxtCG0EbQRtEG0MbQxtEG0UbRRtGG0MbRhtFGygbKBsnG0YbRxtIG0kbSRtKG0cbSxtIG0cbRxtMG0sbSxtMG00bTRtOG0sbTxtOG00bTRtQG08bTxtQG1EbURtSG08bUxtSG1EbURtUG1MbUxtUG1UbVRtWG1MbVxtWG1UbVRtYG1cbVxtYG1kbWRtaG1cbWxtcG10bXRteG1sbXRtcG18bXxtgG10bYRtgG18bXxtiG2EbYRtiG2MbYxtkG2EbZRtkG2MbYxtmG2UbZRtmG2cbZxtoG2UbaBtnG0obShtJG2gbaRtqG2sbaxtsG2kbbRtsG2sbaxtuG20bbRtuG28bbxtwG20bcRtwG28bbxtyG3EbcRtyG3Mbcxt0G3EbdRt0G3Mbcxt2G3UbdRt2G3cbdxt4G3UbeRt4G3cbdxt6G3kbeRt6G3sbext8G3kbfRt+G38bfxuAG30bfxt+G4EbgRuCG38bgxuCG4EbgRuEG4MbgxuEG4UbhRuGG4MbhxuGG4UbhRuIG4cbhxuIG4kbiRuKG4cbihuJG2obahtpG4obixuMG40bjRuOG4sbjxuNG4wbjBuQG48bkRuPG5AbkBuSG5EbkxuRG5IbkhuUG5MblRuTG5QblBuWG5UblxuVG5YblhuYG5cbmRuXG5gbmBuaG5kbmxuZG5obmhucG5sbnRubG5wbnBueG50bnxugG6EboRuiG58boxuhG6AboBukG6MbpRujG6QbpBumG6UbpxulG6YbphuoG6cbqRunG6gbqBuqG6kbqxupG6obqhusG6sbjhurG6wbrBuLG44brRuuG68brxuwG60bsRuvG64brhuyG7EbsxuxG7Ibshu0G7MbtRuzG7QbtBu2G7Ubtxu1G7Ybthu4G7cbuRu3G7gbuBu6G7kbuxu5G7obuhu8G7sbvRu7G7wbvBu+G70bvxu9G74bvhvAG78bwRvCG8MbwxvEG8EbxRvDG8IbwhvGG8UbxxvFG8YbxhvIG8cbyRvHG8gbyBvKG8kbyxvJG8obyhvMG8sbzRvLG8wbzBvOG80bsBvNG84bzhutG7AbzxvQG9Eb0RvSG88b0xvRG9Ab0BvUG9Mb1RvTG9Qb1BvWG9Ub1xvVG9Yb1hvYG9cb2RvXG9gb2BvaG9kb2xvZG9ob2hvcG9sb3RvbG9wb3BveG90b3xvdG94b3hvgG98b4RvfG+Ab4BviG+Eb4xvkG+Ub5RvmG+Mb5xvlG+Qb5BvoG+cb6RvnG+gb6BvqG+kb6xvpG+ob6hvsG+sb7RvrG+wb7BvuG+0b7xvtG+4b7hvwG+8b0hvvG/Ab8BvPG9Ib8RvyG/Mb8xv0G/Eb9RvzG/Ib8hv2G/Ub9xv1G/Yb9hv4G/cb+Rv3G/gb+Bv6G/kb+xv5G/ob+hv8G/sb/Rv7G/wb/Bv+G/0b/xv9G/4b/hsAHP8bARz/GwAcABwCHAEcAxwBHAIcAhwEHAMcBRwGHAccBxwIHAUcCRwHHAYcBhwKHAkcCxwJHAocChwMHAscDRwLHAwcDBwOHA0cDxwNHA4cDhwQHA8cERwPHBAcEBwSHBEc9BsRHBIcEhzxG/QbExwUHBUcFRwWHBMcFxwWHBUcFRwYHBccFxwYHBkcGRwaHBccGxwaHBkcGRwcHBscGxwcHB0cHRweHBscHxweHB0cHRwgHB8cHxwgHCEcIRwiHB8cIxwiHCEcIRwkHCMcIxwkHCUcJRwmHCMcJxwoHCkcKRwqHCccKRwoHCscKxwsHCkcLRwsHCscKxwuHC0cLRwuHC8cLxwwHC0cMRwwHC8cLxwyHDEcMRwyHDMcMxw0HDEcNBwzHBQcFBwTHDQcNRw2HDccNxw4HDUcOBw3HDkcORw6HDgcOhw5HDscOxw8HDocPBw7HD0cPRw+HDwcPhw9HD8cPxxAHD4cQBw/HEEcQRxCHEAcQhxBHEMcQxxEHEIcRBxDHEUcRRxGHEQcRhxFHEccRxxIHEYcSRxKHEscSxxMHEkcShxJHE0cTRxOHEocThxNHE8cTxxQHE4cUBxPHFEcURxSHFAcUhxRHFMcUxxUHFIcVBxTHFUcVRxWHFQcVhxVHDYcNhw1HFYcVxxYHFkcWRxaHFccWxxZHFgcWBxcHFscXRxbHFwcXBxeHF0cXxxdHF4cXhxgHF8cYRxfHGAcYBxiHGEcYxxhHGIcYhxkHGMcZRxjHGQcZBxmHGUcZxxlHGYcZhxoHGccaRxnHGgcaBxqHGkcaxxpHGocahxsHGscbRxrHGwcbBxuHG0cbxxtHG4cbhxwHG8ccRxvHHAccBxyHHEccxxxHHIcchx0HHMcdRxzHHQcdBx2HHUcWhx1HHYcdhxXHFocdxx4HHkceRx6HHccehx5HHscexx8HHocfBx7HH0cfRx+HHwcfhx9HH8cfxyAHH4cgBx/HIEcgRyCHIAcghyBHIMcgxyEHIIchByDHIUchRyGHIQchhyFHIcchxyIHIYciByHHIkciRyKHIgcixyMHI0cjRyOHIscjhyNHI8cjxyQHI4ckByPHJEckRySHJAckxyUHJUclRyWHJMclByTHJcclxyYHJQcmByXHJkcmRyaHJgckhyRHJscnBydHHgcnRycHJ4cnhyfHJ0cnxyeHKAcoByhHJ8coRygHKIcohyjHKEcoxyiHKQcpBylHKMcpRykHKYcphynHKUcpxymHKgcqBypHKccqhyrHKwcrBytHKocqxyqHK4crhyvHKscrxyuHLAcsByxHK8csRywHLIcshyzHLEcsxyyHLQctBy1HLMctRy0HLYcthybHLUcmxy2HJIceBx3HJwctxy4HLkcuRy6HLccuhy5HLscuxy8HLocvBy7HL0cvRy+HLwcvhy9HL8cvxzAHL4cwBy/HMEcwRzCHMAcwhzBHMMcwxzEHMIcxBzDHMUcxRzGHMQcxhzFHMccxxzIHMYcyBzHHMkcyRzKHMgcyxzMHM0czRzOHMsczBzLHM8czxzQHMwc0BzPHNEc0RzSHNAc0hzRHNMc0xzUHNIc1BzTHNUc1RzWHNQc1hzVHNcc1xzYHNYc2BzXHLgcuBy3HNgc2RzaHNsc2xzcHNkc3BzbHN0c3RzeHNwc3hzdHN8c3xzgHN4c4BzfHOEc4RziHOAc4hzhHOMc4xzkHOIc5BzjHOUc5RzmHOQc5hzlHOcc5xzoHOYc6BznHOkc6RzqHOgc6hzpHOsc6xzsHOoc7RzuHO8c7xzwHO0c7hztHPEc8RzyHO4c8hzxHPMc8xz0HPIc9BzzHPUc9Rz2HPQc9hz1HPcc9xz4HPYc+Bz3HPkc+Rz6HPgc+hz5HNoc2hzZHPoc+xz8HP0c/Rz+HPsc/hz9HP8c/xwAHf4cAB3/HAEdAR0CHQAdAh0BHQMdAx0EHQIdBB0DHQUdBR0GHQQdBh0FHQcdBx0IHQYdCB0HHQkdCR0KHQgdCh0JHQsdCx0MHQodDB0LHQ0dDR0OHQwdDx0QHREdER0SHQ8dEB0PHRMdEx0UHRAdFB0THRUdFR0WHRQdFh0VHRcdFx0YHRYdGB0XHRkdGR0aHRgdGh0ZHRsdGx0cHRodHB0bHfwc/Bz7HBwdHR0eHR8dHx0gHR0dIR0fHR4dHh0iHSEdIx0hHSIdIh0kHSMdJR0jHSQdJB0mHSUdJx0lHSYdJh0oHScdKR0nHSgdKB0qHSkdKx0pHSodKh0sHSsdLR0rHSwdLB0uHS0dLx0tHS4dLh0wHS8dMR0yHTMdMx00HTEdNR0zHTIdMh02HTUdNx01HTYdNh04HTcdOR03HTgdOB06HTkdOx05HTodOh08HTsdPR07HTwdPB0+HT0dIB09HT4dPh0dHSAdPx1AHUEdQR1CHT8dQx1BHUAdQB1EHUMdRR1DHUQdRB1GHUUdRx1FHUYdRh1IHUcdSR1HHUgdSB1KHUkdSx1JHUodSh1MHUsdTR1LHUwdTB1OHU0dTx1NHU4dTh1QHU8dUR1PHVAdUB1SHVEdUx1UHVUdVR1WHVMdVx1VHVQdVB1YHVcdWR1XHVgdWB1aHVkdWx1ZHVodWh1cHVsdXR1bHVwdXB1eHV0dXx1dHV4dXh1gHV8dQh1fHWAdYB0/HUIdYR1iHWMdYx1kHWEdZR1jHWIdYh1mHWUdZx1lHWYdZh1oHWcdaR1nHWgdaB1qHWkdax1pHWodah1sHWsdbR1rHWwdbB1uHW0dbx1tHW4dbh1wHW8dcR1vHXAdcB1yHXEdcx1xHXIdch10HXMddR12HXcddx14HXUdeR13HXYddh16HXkdex15HXodeh18HXsdfR17HXwdfB1+HX0dfx19HX4dfh2AHX8dgR1/HYAdgB2CHYEdZB2BHYIdgh1hHWQdgx2EHYUdhR2GHYMdhx2FHYQdhB2IHYcdiR2HHYgdiB2KHYkdix2JHYodih2MHYsdjR2LHYwdjB2OHY0djx2NHY4djh2QHY8dkR2PHZAdkB2SHZEdkx2RHZIdkh2UHZMdlR2THZQdlB2WHZUdlx2YHZkdmR2aHZcdmx2ZHZgdmB2cHZsdnR2bHZwdnB2eHZ0dnx2dHZ4dnh2gHZ8doR2fHaAdoB2iHaEdox2hHaIdoh2kHaMdhh2jHaQdpB2DHYYdjByLHKUdpR2mHYwcph2lHacdpx2oHaYdqB2nHZYclhyVHKgdqR2qHasdqx2sHakdqR2sHa0drR2uHakdrx2uHa0drR2wHa8drx2wHbEdsR2yHa8dsx2yHbEdsR20HbMdsx20HbUdtR22HbMdtx22HbUdtR24Hbcdtx24HbkduR26Hbcdux26HbkduR28Hbsdux28Hb0dvR2+Hbsdvx2+Hb0dvR3AHb8dwR3CHcMdwx3EHcEdxR3EHcMdwx3GHcUdxR3GHccdxx3IHcUdyR3IHccdxx3KHckdqh3JHcodyh2rHaodyx3MHc0dzR3OHcsdzh3NHc8dzx3QHc4d0B3PHdEd0R3SHdAd0h3RHdMd0x3UHdId1B3THdUd1R3WHdQd1h3VHdcd1x3YHdYd2B3XHdkd2R3aHdgdzB3LHdsd2x3cHcwd3B3bHd0d3R3eHdwd3h3dHd8d3x3gHd4d4B3fHeEd4R3iHeAd4h3hHeMd4x3kHeId5B3jHeUd5R3mHeQd5h3lHecd5x3oHeYd6B3nHekd6R3qHegd6h3pHesd6x3sHeod7R3uHe8d7x3wHe0d7R3wHfEd8R3yHe0d8x3yHfEd8R30HfMd8x30HfUd9R32HfMd9x32HfUd9R34Hfcd9x34Hfkd+R36Hfcd+x36Hfkd+R38Hfsd/R3vHe4d7h3+Hf0d/x39Hf4d/h0AHv8d/x0AHgEeAR4CHv8dAx4CHgEeAR4EHgMeAx4EHgUeBR4GHgMeBx4GHgUeBR4IHgceBx4IHgkeCR4KHgceCx4KHgkeCR4MHgseCx4MHg0eDR4OHgseDx4QHhEeER4SHg8eER4QHhMeEx4UHhEeFR4UHhMeEx4WHhUeFR4WHhceFx4YHhUeGR4YHhceFx4aHhkeGR4aHhseGx4cHhkeHR4cHhseGx4eHh0eHR4eHh8eHx4gHh0eIR4gHh8eHx4iHiEeIR4iHiMeIx4kHiEeJR4kHiMeIx4mHiUeJx4oHikeKR4qHiceKx4qHikeKR4sHiseKx4sHi0eLR4uHiseLx4uHi0eLR4wHi8eEh4vHjAeMB4PHhIeMR4yHjMeMx40HjEeMh4xHjUeNR42HjIeNh41HjceNx44HjYeOB43HjkeOR46HjgeOh45HjseOx48HjoePB47Hj0ePR4+HjwePh49Hj8ePx5AHj4eNB4zHkEeQR5CHjQeQh5BHkMeQx5EHkIeRB5DHkUeRR5GHkQeRh5FHkceRx5IHkYeSB5HHkkeSR5KHkgeSh5JHkseSx5MHkoeTB5LHk0eTR5OHkweTh5NHk8eTx5QHk4eUB5PHlEeUR5SHlAeUx5UHlUeVR5UHlYeVR5XHlMeWB5ZHloeWh5ZHlMeUx5XHloeWh5bHlgeVh5cHlUeXR5eHlgeWB5bHl0eXx5eHl0eXR5gHl8eXx5gHmEeYR5iHl8eYx5iHmEeYR5kHmMeZR5jHmQeZB5mHmUeZx5lHmYeZh5oHmceZx5oHmkeaR5qHmceax5qHmkeaR5sHmseax5sHm0ebR5uHmsebx5uHm0ebR5wHm8ebx5wHnEecR5yHm8ecx5yHnEecR50HnMedR52Hncedx54HnUedR54HnkeeR56HnUeex56HnkeeR58Hnseex58Hn0efR5+Hnsefx5+Hn0efR6AHn8efx6AHoEegR6CHn8egx6CHoEegR6EHoMegx6EHoUehR6GHoMehx6GHoUehR6IHoceiR6KHoseix6MHokejR6MHoseix6OHo0ejR6OHo8ejx6QHo0ekR6QHo8ejx6SHpEekR6SHpMekx6UHpEelR6UHpMekx6WHpUedh6VHpYelh53HnYelx6YHpkemR6aHpcemB6XHpsemx6cHpgenB6bHp0enR6eHpwenh6dHp8enx6gHp4eoB6fHqEeoR6iHqAeoh6hHqMeox6kHqIepB6jHqUepR6mHqQeph6lHqcepx6oHqYeqB6nHqkeqR6qHqgeqh6pHqseqx6sHqoerB6rHq0erR6uHqwerh6tHq8erx6wHq4esB6vHrEesR6yHrAesh6xHrMesx60HrIetB6zHrUetR62HrQeth61Hpoemh6ZHrYetx64HrkeuR66Hrcetx66Hrseux68HrcevR68Hrseux6+Hr0evR6+Hr8evx7AHr0ewR7AHr8evx7CHsEewR7CHsMewx7EHsEexR7EHsMewx7GHsUexR7GHscexx7IHsUeyR7IHscexx7KHskeyx7MHs0ezR7OHssezx7OHs0ezR7QHs8ezx7QHtEe0R7SHs8e0x7SHtEe0R7UHtMe0x7UHtUe1R7WHtMe1x7WHtUe1R7YHtceuB7XHtge2B65Hrge2R7aHtse2x7cHtke2R7cHt0e3R7eHtke3x7eHt0e3R7gHt8e3x7gHuEe4R7iHt8e4x7iHuEe4R7kHuMe4x7kHuUe5R7mHuMe5x7mHuUe5R7oHuce5x7oHuke6R7qHuce6x7qHuke6R7sHuse7R7uHu8e7x7wHu0e8R7wHu8e7x7yHvEe8R7yHvMe8x70HvEe9R70HvMe8x72HvUe9R72Hvce9x74HvUe+R74Hvce9x76Hvke2h75Hvoe+h7bHtoe+x78Hv0e/R7+Hvse+x7+Hv8e/x4AH/seAR8AH/8e/x4CHwEfAR8CHwMfAx8EHwEfBR8EHwMfAx8GHwUfBR8GHwcfBx8IHwUfCR8IHwcfBx8KHwkfCR8KHwsfCx8MHwkfDR8MHwsfCx8OHw0fDx8QHxEfER8SHw8fEx8SHxEfER8UHxMfEx8UHxUfFR8WHxMfFx8WHxUfFR8YHxcfFx8YHxkfGR8aHxcfGx8aHxkfGR8cHxsf/B4bHxwfHB/9HvweHR8eHx8fHx8gHx0fHR8gHyEfIR8iHx0fIx8iHyEfIR8kHyMfIx8kHyUfJR8mHyMfJx8mHyUfJR8oHycfJx8oHykfKR8qHycfKx8qHykfKR8sHysfKx8sHy0fLR8uHysfLx8uHy0fLR8wHy8fMR8yHzMfMx80HzEfNR8yHzEfMR82HzUfNR82HzcfNx84HzUfOR84HzcfNx86HzkfOR86HzsfOx88HzkfPR88HzsfOx8+Hz0fHh89Hz4fPh8fHx4fPx9AH0EfQR9CHz8fQh9BH0MfQx9EH0IfRB9DH0UfRR9GH0QfRh9FH0cfRx9IH0YfSB9HH0kfSR9KH0gfSh9JH0sfSx9MH0ofTB9LH00fTR9OH0wfTh9NH08fTx9QH04fUB9PH1EfUR9SH1AfUx9UH1UfVR9WH1MfVh9VH1cfVx9YH1YfWB9XH1kfWR9aH1gfWh9ZH1sfWx9cH1ofXB9bH10fXR9eH1wfXh9dH18fXx9gH14fYB9fH0AfQB8/H2AfYR9iH2MfYx9kH2EfZB9jH2UfZR9mH2QfZh9lH2cfZx9oH2YfaB9nH2kfaR9qH2gfah9pH2sfax9sH2ofbB9rH20fbR9uH2wfbh9tH28fbx9wH24fcB9vH3EfcR9yH3Afch9xH3Mfcx90H3IfdR92H3cfdx94H3UfeB93H3kfeR96H3gfeh95H3sfex98H3offB97H30ffR9+H3wffh99H38ffx+AH34fgB9/H4EfgR+CH4Afgh+BH2IfYh9hH4Ifgx+EH4UfhR+GH4Mfhh+FH4cfhx+IH4YfiB+HH4kfiR+KH4gfih+JH4sfix+MH4ofjB+LH40fjR+OH4wfjh+NH48fjx+QH44fkB+PH5EfkR+SH5Afkh+RH5Mfkx+UH5IflB+TH5UflR+WH5Qflx+YH5kfmR+aH5cfmh+ZH5sfmx+cH5ofnB+bH50fnR+eH5wfnh+dH58fnx+gH54foB+fH6EfoR+iH6Afoh+hH6Mfox+kH6IfpB+jH4QfhB+DH6QfpR+mH6cfpx+oH6UfqB+nH6kfqR+qH6gfqh+pH6sfqx+sH6ofrB+rH60frR+uH6wfrh+tH68frx+wH64fsB+vH7EfsR+yH7Afsh+xH7Mfsx+0H7IftB+zH7UftR+2H7Qfth+1H7cftx+4H7YfuR+6H7sfux+8H7kfvB+7H70fvR++H7wfvh+9H78fvx/AH74fwB+/H8EfwR/CH8Afwh/BH8Mfwx/EH8IfxB/DH8UfxR/GH8Qfxh/FH6Yfph+lH8Yfxx/IH8kfyR/KH8cfxx/KH8sfyx/MH8cfzR/MH8sfyx/OH80fzR/OH88fzx/QH80f0R/QH88fzx/SH9Ef0R/SH9Mf0x/UH9Ef1R/UH9Mf0x/WH9Uf1R/WH9cf1x/YH9Uf2R/YH9cf1x/aH9kf2x/cH90f3R/eH9sf3x/cH9sf2x/gH98f3x/gH+Ef4R/iH98f4x/iH+Ef4R/kH+Mf4x/kH+Uf5R/mH+Mf5x/mH+Uf5R/oH+cfyB/nH+gf6B/JH8gf6R/qH+sf6x/sH+kf6x/qH+0f7R/uH+sf7x/uH+0f7R/wH+8f7x/wH/Ef8R/yH+8f8x/yH/Ef8R/0H/Mf8x/0H/Uf9R/2H/Mf9x/2H/Uf9R/4H/cf9x/4H/kf+R/6H/cf+x/6H/kf+R/8H/sf/R/+H/8f/x8AIP0fASAAIP8f/x8CIAEgASACIAMgAyAEIAEgBSAEIAMgAyAGIAUgBSAGIAcgByAIIAUgCSAIIAcgByAKIAkgCSAKIOkf6R/sHwkgCyAMIA0gDSAOIAsgDiANIA8gDyAQIA4gECAPIBEgESASIBAgEiARIBMgEyAUIBIgFCATIBUgFSAWIBQgFiAVIBcgFyAYIBYgGCAXIBkgGSAaIBggGiAZIBsgGyAcIBogHCAbIB0gHSAeIBwgHiAdIB8gHyAgIB4gICAfICEgISAiICAgIiAhICMgIyAkICIgJCAjICUgJSAmICQgJiAlICcgJyAoICYgKCAnICkgKSAqICggKiApIAwgDCALICogKyAsIC0gLSAuICsgLyAtICwgLCAwIC8gMSAvIDAgMCAyIDEgMyAxIDIgMiA0IDMgNSAzIDQgNCA2IDUgNyA1IDYgNiA4IDcgOSA3IDggOCA6IDkgOyA5IDogOiA8IDsgPSA7IDwgPCA+ID0gPyBAIEEgQiBBIEAgQCBDIEIgQyBEIEUgRSBCIEMgRiBFIEQgRCBHIEYgRyBIIEkgSSBGIEcgSiBJIEggSCBLIEogSyBMIE0gTSBKIEsgQSBOID8gTyA/IE4gTiBQIE8gUSBPIFAgUCBSIFEgUyBRIFIgLiBUIFUgViBVIFQgVCBXIFYgWCBWIFcgVyBZIFggWiBYIFkgWSBbIFogXCBaIFsgWyBdIFwgXiBcIF0gXSBfIF4gYCBeIF8gXyBhIGAgVSArIC4gYiBjIGQgZCBlIGIgYyBmIGcgZyBkIGMgaCBnIGYgZiBpIGggaSBqIGsgayBoIGkgbCBrIGogaiBtIGwgbiBsIG0gbSBTIG4gUiBuIFMgbyBwIHEgcSByIG8gcyBxIHAgcCB0IHMgdSBzIHQgdCB2IHUgdyB1IHYgdiB4IHcgeSB3IHggeCB6IHkgeyB5IHogeiB8IHsgfSB7IHwgfCB+IH0gfyB9IH4gfiCAIH8ggSB/IIAggCCCIIEggyCEIIUghSCGIIMghyCDIIYghiCIIIcgiSCHIIggiCCKIIkgiyCJIIogiiCMIIsgjSCLIIwgjCCOII0gjyCNII4gjiCQII8gciCPIJAgkCBvIHIgkSCSIJMgkyCUIJEglSCTIJIgkiCWIJUglyCVIJYgliCYIJcgmSCXIJggmCCaIJkgmyCZIJogmiCcIJsgnSCbIJwgnCCeIJ0gnyCdIJ4gniCgIJ8goSCfIKAgoCCiIKEgoyChIKIgoiCkIKMgpSCmIKcgpyCoIKUgqSClIKggqCCqIKkgqyCpIKogqiCsIKsgrSCrIKwgrCCuIK0gryCtIK4griCwIK8gsSCvILAgsCCyILEglCCxILIgsiCRIJQgsyC0ILUgtSC2ILMgtyC1ILQgtCC4ILcguSC3ILgguCC6ILkguyC5ILoguiC8ILsgvSC7ILwgvCC+IL0gvyC9IL4gviDAIL8gwSC/IMAgwCDCIMEgwyDBIMIgwiDEIMMgxSDDIMQgxCDGIMUgxyDIIMkgySDKIMcgyyDHIMogyiDMIMsgzSDLIMwgzCDOIM0gzyDNIM4gziDQIM8g0SDPINAg0CDSINEg0yDRINIg0iDUINMgtiDTINQg1CCzILYg1SDWINcg1yDYINUg2CDXINkg2SDaINgg2iDZINsg2yDcINog3CDbIN0g3SDeINwg3iDdIN8g3yDgIN4g4CDfIOEg4SDiIOAg4iDhIOMg4yDkIOIg5CDjIOUg5SDmIOQg5iDlIOcg5yDoIOYg6SDqIOsg6yDsIOkg7CDrIO0g7SDuIOwg7iDtIO8g7yDwIO4g8CDvIPEg8SDyIPAg8iDxIPMg8yD0IPIg9CDzIPUg9SD2IPQg9iD1INYg1iDVIPYg9yD4IPkg+SD6IPcg+iD5IPsg+yD8IPog/CD7IP0g/SD+IPwg/iD9IP8g/yAAIf4gACH/IAEhASECIQAhAiEBIQMhAyEEIQIhBCEDIQUhBSEGIQQhBiEFIQchByEIIQYhCCEHIQkhCSEKIQghCyEMIQ0hDSEOIQshDiENIQ8hDyEQIQ4hECEPIREhESESIRAhEiERIRMhEyEUIRIhFCETIRUhFSEWIRQhFiEVIRchFyEYIRYhGCEXIfgg+CD3IBghGSEaIRshGyEcIRkhHCEbIR0hHSEeIRwhHiEdIR8hHyEgIR4hICEfISEhISEiISAhIiEhISMhIyEkISIhJCEjISUhJSEmISQhJiElISchJyEoISYhKCEnISkhKSEqISghKiEpISshKyEsISohLSEuIS8hLyEwIS0hMCEvITEhMSEyITAhMiExITMhMyE0ITIhNCEzITUhNSE2ITQhNiE1ITchNyE4ITYhOCE3ITkhOSE6ITghOiE5IRohGiEZITohOyE8IT0hPSE+ITshPiE9IT8hPyFAIT4hQCE/IUEhQSFCIUAhQiFBIUMhQyFEIUIhRCFDIUUhRSFGIUQhRiFFIUchRyFIIUYhSCFHIUkhSSFKIUghSiFJIUshSyFMIUohTCFLIU0hTSFOIUwhTyFQIVEhUSFSIU8hUiFRIVMhUyFUIVIhVCFTIVUhVSFWIVQhViFVIVchVyFYIVYhWCFXIVkhWSFaIVghWiFZIVshWyFcIVohXCFbITwhPCE7IVwhXSFeIV8hXyFgIV0hYSFiIWMhYyFkIWEhZSFjIWIhYiFmIWUhZyFlIWYhZiFoIWchaSFnIWghaCFqIWkhayFpIWohaiFsIWshayFsIW0hbSFuIWshbyFuIW0hbSFwIW8hcSFyIXMhcyF0IXEhdSFxIXQhdCF2IXUhcSF1IXchdyF4IXEhciFxIXgheCF5IXIheiF1IXYhdiF7IXohfCF6IXsheyF9IXwhfiF6IXwhfiF3IXUhdSF6IX4hfCF/IX4hdyF+IYAhgCGBIXcheCF3IYEhgSGCIXgheSF4IYIhgiGDIXkhhCGAIX4hfiF/IYQhhSF8IX0hfyF8IYUhfSGGIYUhhyGFIYYhhiGIIYchiSGHIYghiCGKIYkhiyGJIYohiiGMIYshiSGLIY0hjSGOIYkhjyGMIYohiiGQIY8hkSGMIY8hiyGMIZEhjyGSIZEhjiGNIZMhkyGUIY4hlSGNIYshiyGWIZUhkSGWIYshlyGTIY0hjSGVIZchjiGYIYkhmCGZIYkhjiGUIZohmiGYIY4hmSGYIZohmiGbIZkhnCGZIZshmSGcIYchhSGHIZwhnCGdIYUhnSGcIZ4hmyGeIZwhniGfIZ0hhyGJIZkhhSGdIX8hfyGdIZ8hnyGEIX8hoCGhIaIhoiGjIaAhpCGgIaMhoyGlIaQhpiGiIaEhoSGnIaYhqCGmIachpyGpIaghqiGoIakhqSGrIaohrCGqIashqyGtIawhriGsIa0hrSGvIa4hsCGuIa8hryGxIbAhsiGwIbEhsSGzIbIhtCG1IbYhtiG3IbQhuCG1IbQhtCG5IbghuiG4IbkhuSG7IbohvCG6IbshuyG9IbwhviG8Ib0hvSG/Ib4hwCG+Ib8hwSG3IbYhtiHCIcEhwyHBIcIhwiHEIcMhxSHDIcQhxCHGIcUhxyHIIckhySHKIcchyyHKIckhySHMIcshzSHOIc8hzyHQIc0h0SHOIc0hzSHSIdEh0yHUIdUh1SHWIdMh1yHYIdkh2SHaIdch1yHaIdsh2yHcIdch3CHbId0h3SHeIdwh3iHdId8h3yHgId4h4CHfIeEh4SHiIeAh4yHiIeEh4SHkIeMh5SHjIeQh5CHmIeUh5yHoIekh6iHpIegh6iHoIesh6iHrIewh7SHqIewh7CHuIe0h7SHuIe8h7yHwIe0h8CHvIfEhsiGzIfIh8yH0IfUh9iH0IfMh8yH3IfYh+CH5Ifoh+iH7Ifgh/CH9If4h/iH/IfwhACIBIgIiAiIDIgAiBCIFIgYiBiIHIgQiCCIJIgoiCiILIggiDCINIg4iDiIPIgwiDiINIhAiECIRIg4iEiITIg4iDiIRIhIiFCIVIhYiFiIXIhQiGCIVIhQiFCIZIhgiGSIUIhciFyIaIhkiGyIcIh0iHSIeIhsiHyIgIiEiISIiIh8iIyIgIh8iHyIkIiMiJSImIiciJyIoIiUiKSIiIiEiISIqIikiKyIlIigiKCIsIisiLSIuIi8iLyIwIi0iMCIvIjEiMSIyIjAiMyI0IjUiNSI2IjMiNyI1IjQiNCI4IjciOSI3IjgiOCI6IjkiOyI5IjoiOiI8IjsiPSI7IjwiPCI+Ij0iMyI2Ij8iPyJAIjMiQSJAIj8iPyJCIkEiQyJBIkIiQiJEIkMiRSJDIkQiRCJGIkUiRiI9Ij4iPiJFIkYiRyIpIioiKiJIIkciSSJKIh8iHyIiIkkiLCJLIkwiTCIrIiwiTSJOIigiKCInIk0iLCIoIk4iTiJPIiwiUCJRIlIiUiJTIlAiVCJSIlEiUSJVIlQiKSJHIlYiViJXIikiLCJYIlkiWSJLIiwiHyJaIlsiWyIkIh8iXCJdIl4iXiJfIlwiYCJhImIiYiJjImAiZCJlImYiZiJnImQiZiJlImgiaCJpImYiaiJpImgiaCJrImoibCJtIm4ibiJvImwicCJxInIiciJzInAidCJ1IiIiIiIpInQidiJ3IngieCJ5InYidyJ2InoieiJ7IncifCJ9In4ifiJ/InwifyJ+IoAigCKBIn8igiKDIoQihCKFIoIihiKHIogiiCKJIoYiiiKLIowijCKNIooijiKPIpAikCKRIo4ijyKOIpIikiKTIo8ikyKSIpQilCKVIpMilSKUIpYiliKXIpUilyKWIpgimCKZIpcimiKZIpgimCKbIpoinCKaIpsimyKdIpwiniKfIqAioCKhIp4inyKeIqIioiKjIp8ipCKiIp4iniKlIqQipSKeIqEioSKmIqUioyKiIqcipyKoIqMiqCKnIqkiqSKqIqgiqSKnIqsiqyKnIqIioiKkIqsiqyKsIqkirSKrIqQipCKuIq0iriKkIqUipSKvIq4isCKvIqUipSKmIrAisSKsIqsiqyKtIrEiqiKpIrIisiKpIqwisiKzIqoisyKyIrQitCK1IrMitSK0IrYitiK3IrUityK2IrgiuCK5IrciuiK4IrYitiK7IroityK5IrwivCK9IrcivCK5Ir4iviK5IrgiviK/IrwiwCK6IrsiuyLBIsAiuCK6IsIiwiLDIrgiuCLDIr4ixCLCIroiuiLAIsQiuyK2IsUixSK2IsYixiK2IrQitCLHIsYixyK0IrIisiLIIsciySLHIsgiyCLKIskirCLIIrIiyiLIIqwirCKxIsoixyLJIssiyyLGIscixiLLIswizCLFIsYiuyLFIswizCLBIrsizSLOIs8izyLQIs0iziLNItEi0SLSIs4i0CLPItMi0yLUItAi1CLTItUi1SLWItQi1iLVItci1yLYItYi2CLXItki2SLaItgi2iLZItsi2yLcItoi3CLbIt0i3SLeItwi3iLdIt8i3yLgIt4i4SLiIuMi4yLkIuEi5CLjIuUi5SLmIuQi5iLlIuci5yLoIuYi6CLnIuki6SLqIugi6iLpIusi6yLsIuoi7SLsIusi4iLhIu4i7iLvIuIi7yLuIvAi8CLxIu8i8SLwIvIi8iLzIvEi9CL1IvYi9iL3IvQi9iL1Ivgi+CL5IvYi+iL7Ivwi/CL9Ivoi/SL8Iv4i/iL/Iv0iACMBIwIjAiMDIwAjBCMFIwYjBiMHIwQjBSMEIwgjCCMJIwUjCSMIIwojCiMLIwkjCyMKIwwjDCMNIwsjDSMMIw4jDiMPIw0jDyMOIxAjECMRIw8jESMQIxIjEiMTIxEjFCMVIxYjFyMVIxQjFyMYIxUjGCMZIxUjGCMXIxojGiMbIxgjHCMbIxojGiMdIxwjHiMcIx0jHyMgIyEj4CLfIiIjICMfIyMjIyMkIyAjJSMmIycjJyMoIyUjKSMqIysjKyMsIykjLSMuIy8jLyMwIy0jMSMyIzMjMyM0IzEjNSM2IzcjNyM4IzUjOSM6IzsjOyM8IzkjPCM7Iz0jPSM+IzwjPyM9IzsjOyNAIz8jQSNCI0MjQyNEI0EjQyNCI0UjRSNGI0MjRCNDI0YjRiNHI0QjSCNJI0ojSiNLI0gjTCNNI04jTiNPI0wjTCNPI1AjUCNRI0wjUiNTI1QjVCNVI1IjTiNNI1YjViNXI04jVSNUI1gjWCNZI1UjWiNbI1wjXCNdI1ojXiNcI1sjWyNfI14jYCNhI2IjYiNjI2AjYyNiI2QjZCNlI2MjZSNkI2YjZiNnI2UjZyNmI2gjaCNpI2cjaSNoI2ojaiNrI2kjYSNgI2wjbCNtI2EjbSNsI24jbiNvI20jbyNuI3AjcCNxI28jcSNwI3IjciNzI3EjcyNyI2sjayNqI3MjdCN1I1cjVyNWI3QjTCN2I3cjdyNNI0wjWSNYI3gjeCN5I1kjVSN6I3sjeyNSI1UjWSN8I3ojeiNVI1kjfSN+I38jfyOAI30jgCN/I4EjgSOCI4AjViODI4QjhCN0I1YjhSOGI1kjWSN5I4UjhyOII0wjTCNRI4cjiSOKI4sjiyOMI4kjjSOOI48jjyOQI40jkSOSI5MjkyOUI5EjlCOTI5UjlSOWI5QjliOVI5cjlyOYI5YjmSOaI5sjmyOcI5kjnSOeI58jnyOgI50jTSOhI6IjoiNWI00joyOkI6UjpSOmI6MjpyOoI6kjqSOqI6cjpCOrI6wjrCOlI6QjrSOuI68jryOwI60jqCOxI7IjsiOpI6gjsyO0I7UjtSO2I7MjtyO4I7kjuSO6I7cjuyO8I70jvSO+I7sjuSO4I78jvyPAI7kjwSPCI8MjwyPEI8EjwSPEI8UjxSPGI8EjxyPII8kjySPKI8cjyyPMI80jzSPOI8sjyyPOI88jzyPQI8sj0SPSI9Mj0yPUI9Ej1SPWI9cj1yPYI9Uj2SPaI9sj2yPcI9kj1yPWI90j3SPeI9cj3yPgI+Ej4SPiI98j4yPkI+Uj5SPmI+Mj5yPfI+Ij4iPoI+cj6SPqI+sj6yPsI+kj7SPuI+8j7yPwI+0j6SPsI/Ej8SPyI+kj8yPeI90j3SP0I/Mj9SPyI/Ej8SP2I/Uj9yPnI+gj6CP4I/cj+SPAI78jvyP6I/kj+yP8I/0j/SP+I/sj/yMAJAEkASQCJP8jAyQEJAUkBSQGJAMkByQIJAkkCSQKJAckCyQGJAUkBSQMJAskDSQOJA8kDyQQJA0kESQOJA0kDSQSJBEkEyQUJBUkFSQWJBMkFyQYJBkkGSQaJBckGyQYJBckFyQcJBskHSQeJB8kHyQgJB0kISQiJCMkIyQkJCEkJSQmJCckJyQoJCUkKSQkJCMkIyQqJCkkKyQsJC0kLSQuJCskLyQwJDEkMSQyJC8kLCQrJDMkMyQ0JCwkNSQ2JDckNyQ4JDUkOSQ6JDskOyQ8JDkkPSQ2JDUkNSQ+JD0kPyRAJCkkKSQqJD8kQSRCJD0kPSQ+JEEkQyREJDQkNCQzJEMkRSRGJAskCyQMJEUkRyRIJEkkSSRKJEckSyRMJE0kTSROJEskTyRQJFEkUSRSJE8kTyRSJFMkUyRUJE8kVSRWJFckVyRYJFUkWSRaJFskWyRcJFkkXSReJF8kXyRgJF0kYSRgJF8kXyRiJGEkYyRhJGIkYiRkJGMkZSRjJGQkZCRmJGUkZyRlJGYkZiRoJGckZyRoJGkkaSRqJGckayRqJGkkaSRsJGskYyRlJG0kbSRuJGMkbyRtJGUkZSRnJG8kcCRxJHIkciRzJHAkdCR1JHYkdiR3JHQkdSR0JHgkeCR5JHUkcyRyJHokeyR5JHgkeCR8JHskeiR9JHMkeiR+JH8kfyR9JHokgCSBJIIkgiSDJIAkhCSFJIYkhiSHJIQkiCSJJIokiiSLJIgkjCSNJI4kjiSPJIwkjCSPJJAkkCSRJIwkiiSSJJMkkySLJIoklCSVJJYkliSXJJQkmCSUJJcklySZJJgkmiSbJJwknCSdJJokniSaJJ0knSSfJJ4kniSfJKAkoCShJJ4koiSeJKEkoSSjJKIkpCSlJKYkpiSnJKQkqCSpJKokqiSrJKgkrCStJK4kriSvJKwksCSxJLIksiSzJLAktCSxJLAksCS1JLQksySyJLYktiS3JLMktyS2JLgkuCS5JLcktCS1JLokuiS7JLQkuSS4JLwkvCS9JLkkviS9JLwkvCS/JL4kwCTBJMIkwiTDJMAkwyTCJMQkxCTFJMMkxSTEJMYkxiTHJMUkxyTGJMgkyCTJJMckyiTJJMgkyCTLJMokzCTNJM4kziTPJMwk0CTRJNIk0iTTJNAk1CTRJNAk0CTVJNQk0yTSJNYk1iTXJNMk1yTWJNgk2CTZJNck1CTVJNok2iTbJNQk2STYJNwk3CTdJNkk3iTdJNwk3CTfJN4k4CThJOIk4iTjJOAk4iThJOQk5CTlJOIk5iTlJOQk5CTnJOYk5yTkJOgk6CTpJOck6iToJOQk5CThJOok5iTnJOsk6yTsJOYk7STsJOsk6yTuJO0k7yTwJPEk8STyJO8k8yT0JPUk9ST2JPMk9yTzJPYk9iT4JPck+ST3JPgk+CT6JPkk+yT5JPok+iT8JPsk/ST7JPwk/CT+JP0k/yT9JP4k/iQAJf8kASX/JAAlACUCJQElAyUBJQIlAiUEJQMlBSUDJQQlBCUGJQUlByUFJQYlBiUIJQclCSUHJQglCCUKJQklCSUKJQslCyUMJQklDSUMJQslCyUOJQ0lDyUQJRElESUSJQ8lEyUSJRElESUUJRMlEyUUJRUlFSUWJRMlFiUVJRclFyUYJRYlGSUYJRclFyUaJRklFiUYJRslGyUcJRYlHSUbJRglGCUZJR0lECUPJR4lHyUeJQ8lDyUgJR8lISUeJR8lHyUiJSElHiUhJSMlIyUkJR4lHiUkJRAlJSUhJSIlIiUmJSUlJyUlJSYlJiUoJSclJSUnJSklKSUqJSUlISUlJSolKiUjJSElKyUnJSglKCUsJSslLSUrJSwlLCUuJS0lKyUtJS8lMCUvJS0lLSUxJTAlMSUtJS4lMiUwJTElMSUzJTIlLyU0JSslJyUrJTQlNCUpJSclLiU1JTElMSU1JTYlNiUzJTElNyU4JTklOSU6JTclOiU5JTslOyU8JTolPSU+JT8lPyVAJT0lQCU/JUElQSVCJUAlQyVEJUUlRSVGJUMlRiVFJUclRyVIJUYlSSVIJUclRyVKJUklSyVFJUwlTCVNJUslTiVLJU0lTyVMJUUlRSVEJU8lTSVQJU4lUSVSJVMlUyVUJVElVSVWJVclVyVYJVUlWSVaJVslWyVcJVklXSVeJV8lXyVgJV0lYSViJWMlYyVkJWElZSVkJWMlYyVmJWUlZyVoJWklaSVqJWclayVpJWglaCVsJWslbSVlJWYlZiVuJW0lbyVtJW4lbiVwJW8lcSVvJXAlcCVyJXElcyVxJXIlciV0JXMldSVzJXQldCV2JXUldSV2JXcldyV4JXUleSV6JXsleyV8JXklfSV5JXwlfiV7JXoleiV/JX4lgCV9JYElfCWBJX0lgSWCJYAlgyWAJYIlgiWEJYMlbCWDJYQlhCVrJWwlhSWGJYclhyWIJYUliCWHJYkliSWKJYgliiWJJYsljCWNJY4ljiWPJYwlkCWNJYwljCWRJZAljyWOJZIlkiWTJY8lkyWSJZQllCWVJZMllSWUJZYlliWXJZUllyWWJZglmCWZJZclmiWbJZwlnCWdJZolnSWcJZ4lniWfJZ0lkCWRJaAloCWhJZAloiWhJaAloCWjJaIlpCWlJaYlpiWnJaQlqCWlJaQlpCWpJaglpyWmJaolqiWrJaclqyWqJawlrCWtJaslrSWsJa4lriWvJa0lryWuJbAlsCWxJa8lsSWwJbIlsiWzJbElsyWyJbQltCW1JbMlqCWpJbYltiW3JagluCW3JbYltiW5JbgluiW1JbQltCW7JbolvCW6JbsluyW9JbwlviW/JcAlwCXBJb4lwiW+JcElwSXDJcIlxCXCJcMlwyXFJcQlxiXEJcUlxSXHJcYlyCXGJcclxyXJJcglyiXIJcklySXLJcolzCXKJcslyyXNJcwlziXMJc0lzSXPJc4lziXPJdAl0CXRJc4l0SXQJdIl0iXTJdEl1CXVJcAlwCW/JdQl1iXVJdQl1CXXJdYl2CXZJdol2iXbJdgl3CXaJdkl2SXdJdwl2iXcJd4l3iXfJdol4CXaJd8l3yXhJeAl2iXgJeIl4iXjJdol5CXaJeMl4yXlJeQl2iXkJeYl5iXnJdol2yXaJecl5yXoJdsl6SXqJesl6yXsJekl7SXqJekl6SXuJe0l7CXrJe8l7yXwJewl8CXvJfEl8SXyJfAl7SXuJfMl8yX0Je0l9SX0JfMl8yX2JfUl8iXxJfcl9yX4JfIl+SX4Jfcl9yX6Jfkl+yX8Jf0l/SX+Jfsl/yX8Jfsl+yUAJv8lASYCJgMmAyYEJgEmBSYBJgQmBCYGJgUmByYFJgYmBiYIJgcmCSYHJggmCCYKJgkmCyYDJgImAiYMJgsmDSYLJgwmDCYOJg0mDyYNJg4mDiYQJg8mESYPJhAmECYSJhEmEyYRJhImEiYUJhMmFSYTJhQmFCYWJhUmFyYVJhYmFiYYJhcmGSYXJhgmGCYaJhkmGyYcJh0mHSYeJhsmHyYbJh4mHiYgJh8mISYiJiMmIyYkJiEmJSYhJiQmJCYmJiUmJyYfJiAmICYoJicmKSYnJigmKCYqJikmKyYsJi0mLSYuJismLiYtJi8mLyYwJi4mMSYyJjMmMyY0JjEmNSYyJjEmMSY2JjUmNyY4JjkmOSY6JjcmOyY8Jj0mPSY+JjsmPyZAJkEmQSZCJj8mQSZAJkMmQyZEJkEmRCZDJkUmRSZGJkQmRiZFJkcmRyZIJkYmSCZHJkkmSSZKJkgmSyZKJkkmSSZMJksmSyZMJk0mTSZOJksmTyZHJkUmRSZQJk8mRyZPJlEmUSZJJkcmUiZTJlQmVCZVJlImViZXJlgmWCZZJlYmWiZYJlcmVyZbJlomXCZSJlUmWiZbJl0mXSZeJlomVSZfJlwmYCZhJlwmXCZfJmAmYiZjJmQmZCZlJmImZiZnJmgmaCZpJmYmaiZrJmwmbCZtJmombiZvJnAmcCZxJm4mciZxJnAmcCZzJnImbCZrJnQmdCZ1JmwmdiZ3JngmeCZ5JnYmeSZ4JnomeiZ7JnkmfCZ9Jn4mfiZ/JnwmfyZ+JoAmgCaBJn8mgiaBJoAmgCaDJoImgyaAJoQmhCaFJoMmhiaHJogmiCaJJoYmiiaLJowmjCaNJoomjiaPJpAmkCaRJo4mkiaTJpQmlCaVJpImkiaVJpYmliaXJpImmCaUJpMmkyaZJpgmmiaYJpkmmSabJpomnCaXJpYmliadJpwmniaaJpsmmyafJp4mniafJqAmoCahJp4moiajJqQmpCalJqImpiakJqMmoyanJqYmqCamJqcmpyapJqgmqiaoJqkmqSarJqomqiarJqwmrCatJqomriavJrAmsCaxJq4msiazJrQmtCa1JrImsia1JrYmtia3JrImuCa0JrMmsya5Jrgmuia4JrkmuSa7JromvCa3JrYmtia9Jrwmvia6Jrsmuya/Jr4mvia/JsAmwCbBJr4mwibDJsQmxCbFJsImxibDJsImwibHJsYmxibHJsgmyCbJJsYmyibGJskmySbLJsomzCbDJsYmxibKJswmzSbJJsgmyCbOJs0mzSbOJs8mzybQJs0m0SbSJtMm0ybUJtEm1SbWJtcm1ybYJtUm1ibVJtkm2SbaJtYm2ibZJtsm2ybcJtom3CbbJt0m3SbeJtwm3ibdJt8m3ybgJt4m4CbfJuEm4SbiJuAm4ibhJuMm4ybkJuIm5CbjJuUm5SbmJuQm5iblJucm5yboJuYm6CbnJukm6SbqJugm6ibpJusm6ybsJuom7SbsJusm6ybuJu0m7SbuJu8m7ybwJu0m8SbyJvMm8yb0JvEm8Sb0JvUm9Sb2JvEm9yb2JvUm9Sb4Jvcm+Sb3Jvgm+Cb6Jvkm+yb5Jvom+ib8Jvsm/Sb6Jvgm+Cb+Jv0m/yb8Jvom+ib9Jv8mACfzJvIm8yYAJwEnAScCJ/MmAScAJwMnAycEJwEnBScDJwAnACcGJwUn8iYGJwAnBCcDJwcnBycIJwQnCCcHJwknCScKJwgnCycJJwcnBycMJwsnDCcHJwMnAycFJwwnCicJJw0nDScOJwonDicNJw8nDycQJw4nEScPJw0nDycRJxInEicTJw8nECcPJxMnEycSJxQnFCcVJxMnDScWJxEnFicNJwknCScLJxYnEycXJxAnEycVJxgnGCcXJxMnGScaJxsnGyccJxknHScbJxonGiceJx0nHycgJyEnIicgJx8nIScjJx8nHyckJyInJScmJycnJycoJyUnKSclJygnKCcqJyknKScqJysnKycsJyknLSclJy4nLicvJy0nLycuJzAnMScmJyUnJSctJzEnMCcyJy8nMyc0JzUnNSc2JzMnNyc4JzknOSc6JzcnOyc8Jz0nPSc+JzsnPydAJ0EnQSdCJz8nQydEJ0UnRSdGJ0MnQydGJ0cnRydIJ0MnSSdKJ0snSydMJ0knTSdOJ0onSidJJ00nSCdHJ08nTydQJ0gnUCdPJ1EnUSdSJ1AnUidRJ1MnUydUJ1InVCdTJ1UnVSdWJ1QnVidVJ1cnVydYJ1YnWSdYJ1cnVydaJ1knWydcJ10nXSdeJ1snXiddJ18nYCdhJ1wnXCdbJ2AnYidfJ2MnXydiJ14nYydkJ2InZCdjJ2UnZSdmJ2QnZidlJ04nTidNJ2YnZydoJ2knaSdqJ2cnaydpJ2gnaCdsJ2snbCdtJ2snbidvJ3AncCdxJ24nbidxJ3IncidzJ24ndCdwJ28nbyd1J3Qndid0J3UndSd3J3YneCd2J3cndyd5J3gneid4J3kneSd7J3onfCd9J34nfid/J3wngCd8J38nfyeBJ4AngidzJ3IncieDJ4IngieDJ4QnhCeFJ4InhieHJ4gniCeJJ4YnhieJJ4oniieLJ4YnjCeIJ4cnhyeNJ4wnjieMJ40njSePJ44nkCeOJ48njyeRJ5AnkieQJ5EnkSeTJ5InlCeSJ5MnkyeVJ5QnlieUJ5UnlSeXJ5YnmCeLJ4oniieZJ5gnmCeZJ5onmiebJ5gnlieXJ5wnnCedJ5YnnSecJ54nniefJ50noCehJ6InoiejJ6AnoSegJ6QnpCelJ6EnpSekJ6YnpienJ6UnpyemJ6gnqCepJ6cnqSeoJ6onqierJ6knqyeqJ6wnrCetJ6snrSesJ64nrievJ60nryeuJ7AnsCexJ68nsiexJ7AnsCezJ7IntCeyJ7Mnsye1J7QntiejJ6Inoie3J7Yntie3J7gnuCe5J7Ynuie7J7wnvCe9J7onvSe8J74nvie/J70nwCe+J7wnvCfBJ8AnwSe8J8InwifDJ8EnxCfCJ7wnvCfFJ8QnxSe8J8YnxifHJ8UnyCfGJ7wnvCfJJ8gnySe8J7snuyfKJ8knyyfMJ80nzSfOJ8snyyfOJ88nzyfQJ8sn0SfNJ8wnzCfSJ9En0yfRJ9In0ifUJ9Mn1SfQJ88nzyfWJ9Un1SfWJ9cn1yfYJ9Un2SfTJ9Qn1CfaJ9kn2SfaJ9sn2yfcJ9kn3SfeJ98n3yfgJ90n3SfgJ+En4SfiJ90n4yfkJ+Un5SfmJ+Mn5CfjJ+cn5yfoJ+Qn6CfnJ+kn6SfqJ+gn6ifpJ+sn6yfsJ+on5iflJ+0n7SfuJ+Yn7iftJ+8n7yfwJ+4n8CfvJ/En8SfyJ/An8ifxJ/Mn8yf0J/In9CfzJ/Un9Sf2J/Qn9if1J/cn9yf4J/Yn+Cf3J/kn+Sf6J/gn+if5J/sn+yf8J/on/Sf+J/8n/ycAKP0n/if9JwEoASgCKP4nAygEKAUoBSgGKAMoBigFKAcoBygIKAYoAigBKAkoCSgKKAIoCigJKAsoCygMKAooDSgOKA8oDygQKA0oESgPKA4oDigSKBEoEygUKBUoFSgWKBMoFygYKBkoFygZKBooGSgbKBooGygZKBwoHCgdKBsoHigfKCAoICghKB4oIigfKB4oHigjKCIoJCglKCYoJignKCQoKCgpKCooKigrKCgoLCgtKC4oLigvKCwoMCgxKDIoMigzKDAoNCg1KDYoNig3KDQoOCg2KDUoNSg5KDgoNCg3KDooOig4KDkoOig3KDsoOyg8KDooOig9KDQoOSg9KDooPig/KEAoQChBKD4oQihDKEQoRChFKEIoRihHKEgoSChJKEYoSihLKEwoSihMKE0oSihNKE4oTyhMKEsoSyhQKE8oUShSKFMoUyhUKFEoUShUKFUoVShWKFEoVyhYKFkoWShaKFcoWyhcKF0oXSheKFsoXyhgKGEoYShiKF8oYyhkKGUoZShmKGMoZyhoKGkoaShqKGcoaChnKGsoayhsKGgobShqKGkobChrKG0obihqKG0obShvKG4oaShwKG0obShwKGwocShyKHMocyh0KHEodSh2KHcodyh4KHUoeSh6KHsoeyh8KHkofCh7KH0ofSh+KHwofih9KH8ofyiAKH4ogCh/KIEogSiCKIAogiiBKIMogyiEKIIohSiEKIMogyiGKIUohSiGKIcohyiIKIUoiSiIKIcohyiKKIkoiSiKKIsoiyiMKIkojSiMKIsoiyiOKI0ojSiOKI8ojyiQKI0okSiSKJMokyiUKJEolCiTKJUolSiWKJQoliiVKJcolyiYKJYomCiXKJkomSiaKJgomiiZKJsomyicKJoonSieKJ8onyigKJ0ooSifKJ4oniiiKKEooyikKKUopSimKKMopyilKKQopCioKKcoqSinKKgoqCiqKKkoqyipKKooqiisKKsorSirKKworCiuKK0orSiuKK8oryiwKK0osSiwKK8oryiyKLEosyixKLIosii0KLMotSizKLQotCi2KLUotyi1KLYotii4KLcouSi3KLgouCi6KLkouyi5KLoouii8KLsovSi7KLwovCi+KL0ovyi9KL4ovijAKL8ovyjAKMEowSjCKL8owyjCKMEowSjEKMMoxSjDKMQoxCjGKMUoxSjGKMcoxyjIKMUoySjKKMsoyyjMKMkozSjLKMooyijOKM0ozyjNKM4ozijQKM8o0SjPKNAo0CjSKNEo0yjRKNIo0ijUKNMo0yjUKNUo1SjWKNMo1yjWKNUo1SjYKNco1yjYKNko2SjaKNco2yjaKNko2SjcKNso2yjcKN0o3SjeKNso3yjeKN0o3SjgKN8o4SjiKOMo4yjkKOEo5SjhKOQo5CjmKOUo5SjmKOco5yjoKOUo6CjnKOko6SjqKOgo6ijpKOso6yjsKOoo7SjuKO8o7yjwKO0o7yjuKPEo8SjyKO8o8yj0KPUo9Sj2KPMo9ij1KPco9yj4KPYo+Cj3KPko+Sj6KPgo+ij5KPso+yj8KPoo/Cj7KP0o/Sj+KPwo/yj+KP0o/SgAKf8o/ygAKQEpASkCKf8oAikBKQMpAykEKQIpBCkDKQUpBSkGKQQpBikFKQcpBykIKQYpCCkHKQkpCSkKKQgpCikJKQspCykMKQopDCkLKQ0pDSkOKQwpDikNKQ8pDykQKQ4pECkPKREpESkSKRApEikRKRMpEykUKRIpFCkTKRUpFSkWKRQpFykWKRUpFSkYKRcpGSkaKRspGSkbKRwpGSkcKR0pGSkdKR4pGSkeKR8pGSkfKSApGSkgKSEpGSkhKSIpGSkiKSMpGSkjKSQpGSkkKSUpGSklKSYpGSkmKScpGSknKSgpGSkoKSkpGSkpKRopKikdKRwpHCkrKSopHSkqKSwpLCkeKR0pHiksKS0pLSkfKR4pHyktKS4pLikgKR8pICkuKS8pLykhKSApISkvKTApMCkiKSEpIikwKTEpMSkjKSIpIykxKTIpMikkKSMpJCkyKTMpMyklKSQpJSkzKTQpNCkmKSUpJik0KTUpNSknKSYpJyk1KTYpNikoKScpKCk2KTcpNykpKSgpKSk3KTgpOCkaKSkpGik4KTkpOSkbKRopGyk5KSspKykcKRspOik5KTgpOCk7KTopOyk4KTcpOSk6KTwpPCkrKTkpKyk8KT0pPSkqKSspKik9KT4pPiksKSopLCk+KT8pPyktKSwpLSk/KUApQCkuKS0pLilAKUEpQSkvKS4pLylBKUIpQikwKS8pMClCKUMpQykxKTApMSlDKUQpRCkyKTEpMilEKUUpRSkzKTIpMylFKUYpRik0KTMpNClGKUcpRyk1KTQpNSlHKUgpSCk2KTUpNilIKUkpSSk3KTYpNylJKTspSilLKUwpSilNKUspSilOKU0pSilPKU4pSilQKU8pSilRKVApSilSKVEpSilTKVIpSilUKVMpSilVKVQpSilWKVUpSilXKVYpSilYKVcpSilZKVgpSilaKVkpSilMKVopTSlOKVspTilPKVwpXClbKU4pUClRKV0pUSlSKV4pXildKVEpUylUKV8pVClVKWApYClfKVQpVilXKWEpVylYKWIpYilhKVcpWSlaKWMpWilMKWQpZSlkKUwpTClLKWUpZillKUspSylNKWYpWylmKU0pZCljKVopZCllKWcpZyllKWYpZyloKWQpZilpKWcpaSlmKVspWylqKWkpailbKVwpXClrKWopaylcKWwpbClcKU8pTylQKWwpXSlsKVApbCltKWspbSlsKV0pXSluKW0pbildKV4pXilvKW4pbyleKXApcCleKVIpUilTKXApXylwKVMpcClxKW8pcSlwKV8pXylyKXEpcilfKWApYClzKXIpcylgKXQpdClgKVUpVSlWKXQpYSl0KVYpdCl1KXMpdSl0KWEpYSl2KXUpdilhKWIpYil3KXYpdyliKXgpeCliKVgpWClZKXgpYyl4KVkpeCl5KXcpeSl4KWMpYyl6KXkpeiljKWQpZCloKXopeyl8KX0pfSl+KXspfSl8KZIEkgR8KX8pfymRBJIEgCmRBH8pfymBKYApgimBKX8pfymDKYIphCmFKYYphymIKYkpiSmKKYcpiCmHKYspiymMKYgpjCmLKY0pjSmOKYwpeymDKY8pkCmPKYMpgyl/KZApkSmQKX8pfyl8KZEpkimRKXwpjymSKXspfCl7KZIpkymUKZUplSmWKZMplymYKZkpmSmaKZcpmymcKZ0pnSmeKZspnymgKaEpoSmiKZ8poymkKaUppSmmKaMppymoKakpqSmqKacpvASqKakpqymqKbwEvAS7BKspqym7BKwprCmtKaspqymtKa4primvKaspsCmxKbIpsymvKacppym0KbMptCmnKaoptSmrKa8prymzKbUptimqKaspqym1KbYpqim2KbQptym4KbkpuSm6Kbcpuym8Kb0pvSm+KbspvynAKcEpwSnCKb8pwynEKcUpxSnGKcMpxynIKckpySnKKccpyynMKc0pzSnOKcspzynMKcspyynQKc8p0SnPKdAp0CnSKdEp0ynRKdIp0inUKdMp1SnTKdQp1CnWKdUp1ynVKdYp1inYKdcp2SnXKdgp2CnaKdkp2ynOKc0pzSncKdsp3SnbKdwp3SneKdsp3SncKd8p3SnfKeAp4CnZKdop3SngKeEp2iniKeAp4CniKeEp4ynkKeUp5SnmKeMp5ynjKeYp5inoKecp5SnkKekp6SnqKeUp6ynsKe0p7SnuKesp7ynrKe4p7inwKe8p8SnyKecp8SnuKe0p7SnyKfEp5ynzKfEp8SnzKfQp9Sn0KfMp8yn2KfUp9inzKecp9Sn2Kfcp9yn4KfUp+Cn3Kfkp+in5Kfcp9yn7Kfop+yn3KfYp+Sn8Kfgp9in9Kfsp+yn9Kf4p/in/Kfsp+in7Kf8p/ykAKvopASoCKgMqBCoFKgYqByoGKgUqBSoIKgcq5yn9KfYpCSoHKggqCCoKKgkqCyoJKgoqCioMKgsqCyoMKg0q/SnnKegp6Cn+Kf0pDir4Kfwp/CkPKg4qECoOKg8qDyoRKhAqDioQKhIqDioTKvgpEyr1Kfgp9SkTKhQqFCr0KfUp9CkUKhUqFSoWKvQp9CkWKvEp7inxKRYqFirwKe4pFyrwKRYqFioVKhcq8CkXKhgqGSoaKhsqGSobKhwqGSocKh0qHiocKhsqHCoeKh8qICofKh4qHiohKiAqICohKiIqIiojKiAqISoeKiQqGyokKh4qJColKiEqIiohKiUqJSomKiIqHyogKicqJyooKh8qKSonKiAqICojKikqHyoqKhwqKiofKigqKCorKioqKiorKiwqLCotKioqLSocKioqLSodKhwqLioZKh0qHSovKi4qMCoxKjIqMiozKjAqNCozKjIqMio1KjQqNio0KjUqNSo3KjYqOCo5KjoqOio7KjgqPCo7KjoqOio9KjwqPio8Kj0qPSo/Kj4qQCo+Kj8qPypBKkAqQipDKkQqRCpFKkIqRSpEKkYqRipHKkUqSCpJKkoqSipLKkgqTCpJKkgqSCpNKkwqTCpNKkAqQCpBKkwqTipPKlAqUCpRKk4qUipQKk8qTypTKlIqUCpSKlQqVCpVKlAqVipRKlAqUCpVKlYqUipTKlcqVypYKlIqWCpXKlkqWSpaKlgqWipZKlsqWypcKloqXSpcKlsqWypeKl0qXypdKl4qXipgKl8qXSpfKmEqYSpiKl0qXCpdKmIqYipjKlwqZCpVKlQqVCplKmQqZCplKmYqZypmKmUqZSpoKmcqZypoKmkqaSpqKmcqayppKmgqaSprKmMqaCpsKmsqbCpoKmUqZSpUKmwqYyptKmkqaippKm0qbSpuKmoqZipvKmQqbiptKnAqcCptKmMqcCpxKm4qcipxKnAqcCpzKnIqWiprKmwqbCpYKloqaypaKlwqXCpjKmsqcipzKnQqdSp0KnMqdCp1KnYqdip3KnQqeCp0KncqdCp4KnIqdyp5Kngqeip2KnUqdSp7KnoqfCp6Knsqeyp9KnwqcyphKnUqYSpzKnAqcCpiKmEqYypiKnAqYCp9KnsqeypfKmAqdSphKl8qXyp7KnUqfip3KnYqeSp3Kn4qdip/Kn4qfyp2KnoqfiqAKnkqgSp6KnwqeiqBKn8qfCqCKoEqgyqEKoUqhSqGKoMqhyqEKoMqgyqIKocqiSqHKogqiCqKKokqiyqEKocqhSqEKosqhyqMKosqjCqHKokqiyqNKoUqiSqKKo4qjiqPKokqkCqJKo8qiSqQKowqjypZKpAqWypZKo8qjyqRKlsqkSqPKo4qjiqSKpEqkyqRKpIqWyqRKpMqkiqUKpMqlSqTKpQqlCqWKpUqkyqVKmAqYCqVKpcqlyp9KmAqfCp9KpcqlyqYKnwqmCqXKpkqlSqWKpkqmSqXKpUqmSqaKpgqYCpeKpMqkypeKlsqgip8KpgqmCqbKoIqmyqYKpoqmiqcKpsqnSqeKp8qnyqgKp0qoSqiKqMqoyqkKqEqpSqjKqIqoiqmKqUqpyqlKqYqpiqoKqcqqSqnKqgqqCqqKqkqqyqpKqoqqiqsKqsqrSqrKqwqrCquKq0qryqtKq4qriqwKq8qryqwKrEqsSqyKq8qsyqyKrEqsSq0KrMqtSq2Krcqtyq4KrUquSq1KrgquCq6Krkquyq5Kroquiq8KrsqvSq7KrwqvCq+Kr0qvyq9Kr4qvirAKr8qwSq/KsAqwCrCKsEqwyrBKsIqwirEKsMqxSrDKsQqxCrGKsUqxyrFKsYqxirIKscqySrKKssqyyrMKskqzCrLKs0qzSrOKswqzyrQKtEq0SrSKs8q0yrPKtIq0irUKtMq1SrTKtQq1CrWKtUq1yrVKtYq1irYKtcq2SraKtsq2yrcKtkq3SrZKtwq3CreKt0q3yrdKt4q3irgKt8qeSrfKuAq4Cp4Knkq3ircKuEq4SriKt4q3CrbKuMq4yrhKtwq5CrhKuMq4irhKuQq4yrlKuQq5CrmKuIq4irmKucq5yroKuIq3iriKugq6CrgKt4q6CrnKnEqbipxKucq5yrpKm4q6SrnKuYqcSpyKugqcip4KuAq4CroKnIq5irqKukq6irmKuQqbirpKusq6SrqKusq6ypqKm4qairrKuwq7CpnKmoqZipnKuwq7CrtKmYqbypmKu0q7SruKm8q7irtKu8q7yrwKu4q8SrwKu8q8irwKvEq8yryKvEq8yr0KvIq8yrxKvUq9CrzKvYq8yr3KvYq9yr4KvYq8SrvKvkq7yr6Kvkq+Cr3KvsqbyruKvsq/Cr4Kvsq7ir8Kvsq7irwKv0q/Sr+Ku4q/ir9Kv8q/yoAK/4qASsCKwMrAysEKwErBSsBKwQrBCsGKwUrASsFKwcrBysIKwErAisBKwgrCCsJKwIrCisLKwwrDCsNKworDisMKwsrCysPKw4rDCsOKxArECsRKwwrDSsMKxErESsSKw0rBSsGKxMrEysUKwUrBysFKxQrFSsUKxMrEysWKxUrFysVKxYrFisYKxcrGSsXKxgrGCsaKxkrGysXKxkrGSscKxsrHSsZKxorHCsZKx0rGiseKx0rHSsfKxwrICshKyIrIisjKyArJCsgKyMrIysiKyUrJSsmKyMrIysnKyQrKCskKycrKSsnKyMrKispKyMrFysbKysrLCslKyIrIistKywrLSsiKyErISsuKy0rJysvKygrJyspKzArMCsvKycrMSswKykrKSsyKzErMispKyorKiszKzIrMiszKzQrNCs1KzIrEissKy0rLSsNKxIrLSsuKworCisNKy0rKysVKxcrNisUKxUrFSsrKzYrFCs2KwcrNys4KzkrOis5KzgrOCs7KzorPCs6KzsrOys9KzwrPis6KzwrPCs/Kz4rOis+K0ArQCs5KzorOStBKzcrQis3K0ErOStAK0MrQytBKzkrQStEK0IrQitEK0UrRStGK0IrRytEK0ErQStDK0crRStEK0crRytIK0UrSSs8Kz0rPys8K0krPStKK0krSStLKz8rTCtGK0UrRStNK0wrTStFK0grSCtOK00rTStOK08rTytQK00rUStNK1ArUCtSK1ErUCtPK1MrUytUK1ArUitQK1QrVCtVK1IrVitXK1grWCtZK1Yr+SlWK1krWSv8KfkpViv5Kfop+ilaK1YrVytWK1orWitbK1crXCtdK14rXytgK2ErYStiK18rYytiK2ErYStkK2MrZStmK2crZytoK2UraStoK2crZytqK2kraStqK2sraytsK2krbStuK28rbytwK20rcStwK28rbytyK3Ercyt0K3UrdSt2K3Mrdyt0K3Mrcyt4K3creSt6K3sreyt8K3krfSt8K3sreyt+K30rfyuAK4ErgSuCK38rgyuCK4ErgSuEK4MrhSuGK4crhyuIK4UriSuIK4crhyuKK4kriSuKK4sriyuMK4krjSuIK4kriSuOK40rjiuJK4wrjyuFK4griCuNK48reiuQK5ErkSt7K3orfit7K5ErkSuSK34rjCuTK44rlCuVK5YrliuBK5QrhCuBK5YrliuXK4QrmCuZK5ormiubK5grmyuaK5wrnSueK5krmSuYK50rniudK58rnyugK54roSugK58rnyuiK6ErnCujK5sroSuiK6QrpCuWK6ErlyuWK6QrpCulK5crpiunK6grqCupK6YrqiupK6grqCurK6orrCuoK6crqyuoK6wrpyutK6wrrCuuK6srryuwK7ErsiuwK68rsSuzK68rryu0K7IrtSu2K7crtyu4K7UruSu1K7gruCu6K7kruyu5K7oruiu8K7srvSu7K7wrvCu+K70rvyu9K74rvivAK78rwSu3K7YrtivCK8ErwyvBK8IrwivEK8MrxSvDK8QrxCvGK8UrxyvFK8YrxivIK8crySvKK8sryyvMK8krzSvJK8wrzCvOK80rzyvNK84rzivQK88r0SvPK9Ar0CvSK9Er0yvLK8oryivUK9Mr1SvTK9Qr1CvWK9Ur1yvVK9Yr1ivYK9cr0SvSK9kr2SvaK9Er2yvaK9kr2SvcK9sr3SveK98r3yvgK90r4SvdK+Ar4CviK+Er4yvhK+Ir4ivkK+Mr5SvjK+Qr5CvmK+Ur5yvoK+kr6ivrK+wr7CvtK+or7ivqK+0r7SvvK+4r8CvxK/Ir8ivzK/Ar9CvwK/Mr8yv1K/Qr9iv0K/Ur9Sv3K/Yr+Cv2K/cr9yv5K/gr+ivuK+8r7yv7K/or/Cv9K/4r/iv/K/wrACz8K/8r/ysBLAAsAiwDLAQsBCwFLAIs+SsELAMsAyz4K/krbCpUKlIqUipYKmwqbyr7KgYsBixkKm8qZCoGLFYqVipVKmQqBywILAksCSwKLAcsBywLLAgsDCwNLA4sDiwPLAwsECwMLA8sDywRLBAsECwRLBIsEywULBUsFiwXLBgsGCwZLBYsGiwYLBcsFywbLBosGCwaLBwsHCwdLBgsGSwYLB0sHSweLBksGSweLB8sHywgLBksFiwZLCAsICwhLBYsIiwjLCQsJCwlLCIsJiwiLCUsJSwnLCYsKCwpLCosKywpLCgsKiwsLCgsLCwqLC0sLiwmLCcsLSwvLCwsJywwLC4sLiwwLDEsMSwyLC4sKCwzLCssNCwyLDEsNSw2LDcsNSwvLC0sLSw2LDUsNyw4LDUsMSw5LDQs5So6LDssOyzkKuUq5Co7LOoq6inpKTwsPCw9LOopPizsKesp6yk/LD4sPyzrKe8p7ylALD8sQSxALO8p3SpCLEMsQyzZKt0q2irZKkMsQyxELNoqQizdKt8q3ypFLEIsRSzfKnkqeSqAKkUsRixHLEgsRixILEksSCxKLEksRixJLEssSSxMLEssSSxNLEwsTCxOLEssTixPLEssRixLLFAsUSxSLFMsUSxTLFQsUSxULFUsUSxVLFYsVSxXLFYsVSxYLFcsUSxWLFksWixbLFwsXSxeLF8sWyxaLGAsYCxhLFssYixfLF4sXixjLGIsWixkLGUsZSxgLFosZixiLGMsYyxnLGYsaCxmLGcsZyxpLGgsaixrLGwsbCxtLGosZCxqLG0sbSxlLGQsbixoLGksaSxvLG4sayxwLHEscSxsLGsscixzLHQsdCx1LHIsdixyLHUsdyx4LHkseix7LHwsfCx9LHoscCx6LH0sfSxxLHAsfix/LIAsgSyCLIMshCyFLIYshyyGLIUshSyILIcsiSyKLIssiyyMLIksjSyJLIwsjCyOLI0sjyyNLI4sjiyQLI8skSySLJMskyyULJEslSyULJMsliyXLJgsmSyaLJssmiyZLJwsnSyeLM0qnSzNKssqyyqfLJ0soCyfLMsqyyrKKqAsoSyiLKMsoyykLKEspSykLKMsoyzUKqUspiylLNQq1CrSKqYspizSKtEq0SqnLKYspyzRKjUqNSqoLKcsqSyoLDUqNSoyKqksqSwyKjEqMSqqLKksqyysLK0srSyuLKssqyyuLK8sryywLKsssCyvLLEssSyyLLAssiyxLLMssyy0LLIstCyzLLUstSy2LLQstiy1LLcstyy4LLYsuCy3LLksuSy6LLgsrSysLLssuyy8LK0svSy8LLssvSy+LLwsvSy7LL8swCy+LL0suiy5LMAswCy9LMEswCzCLLoswCzBLMIswyzELMUsxSzGLMMsxizFLMcsxyzILMYsySzELMMswyzKLMksyyzMLM0szSzOLMsszizNLM8szyzQLM4sxyzRLNIsyyzOLNIs0izRLMss0izTLMcs1CzTLNIs0yzULNUs1SzWLNMsxyzTLNYs1yzWLNUs1SzYLNcs2SzXLNgs1yzZLNos2izbLNcs1izXLNss2CzcLNks2yzdLNYs3izdLNss2yzfLN4s3yzbLNos2izgLN8s4SziLOMs5CzlLOYs5SzkLOcs5yzoLOUs1izdLMcs6CznLOks6SzqLOgs6izpLOss6yzsLOos7CzrLO0syCzHLN0s3SzeLMgs7izvLNws3CzYLO4s7yzuLPAs8CzxLO8s7izYLPIs7izzLPAs2CzVLPIs9CzyLNUs1SzULPQs9CzULPUs0iz1LNQs9SzSLM4szizQLPUs9Sz2LPQs9yz2LPUs9SzQLPcs9yzQLM8szyzNLPgs+Cz5LM8s+iz4LM0szSzMLPos+yzJLMosyiz8LPss/Sz+LP8sAC0BLQItAC0CLQMtAi0ELQMtAC0DLQUtBi0FLQMtBS0GLQctBy0ILQUtCS0ILQctBy0KLQktCy0FLQgtBS0LLQAtCC0MLQstDS0MLQgtCC0JLQ0tDi0HLQYtCi0HLQ4tBi0PLQ4tDi0QLQotAy0RLQYtDy0GLREtES0SLQ8tEy0SLREtES0ULRMtFC0RLQMtFC0DLQQtFS0WLQQtBC0CLRUtFy0YLRktGS0aLRctFy0aLRstGy0cLRctHC0bLR0tHS0eLRwtHy0gLSEtIS0iLR8tHy0iLSMtIy0kLR8tJC0jLSUtJS0mLSQtJi0lLSctJy0oLSYtKS0qLSstKy0sLSktLS0rLSotKi0uLS0tLy0wLTEtMS0yLS8tLy0yLTMtMy00LS8tJy00LTMtMy0oLSctNS02LTctNy04LTUtNi01LTktOS06LTYtOy05LTUtNS08LTstNS04LT0tPS08LTUtPi06LTktOS0/LT4tQC0+LT8tPy1BLUAtQi1ALUEtQS1DLUItQi1DLUQtRC1FLUItRS1ELUYtRi1HLUUtSC1GLUQtRC1JLUgtSS1ELUMtQy1KLUktOy08LUstSy08LT0tQS0/LUwtTC1NLUEtQy1BLU0tTS1KLUMtTS1MLU4tTi1PLU0tSi1NLU8tTy1OLVAtUC1RLU8tTy1SLUotUi1PLVEtUS1TLVItUC1OLVQtVC1OLUwtVC1VLVAtVS1ULUstSy1WLVUtVy1SLVMtSC1JLVctSi1SLVctVy1JLUotUy1YLVctVy1YLVktWS1aLVctTC07LVQtSy1ULTstWy1aLVktWi1bLVwtXS1cLVstWy1eLV0tXi1bLV8tWS1fLVstXy1gLV4tXC1dLWEtYS1iLVwtYi1hLWMtYy1kLWItXC1ILVotVy1aLUgtYi1kLUctRy1GLWItXC1iLUYtRi1ILVwtXS1eLWUtZS1eLWAtZS1mLV0tYS1dLWYtYC1nLWUtYy1hLWgtZi1oLWEtaC1pLWMtai1rLWwtbC1tLWotbC1rLW4tbi1vLWwtby1uLXAtcC1xLW8tbi1rLXItci1rLWotci1zLW4tcC1uLXMtai10LXItdS1xLXAtcC12LXUtdi1wLXctcy13LXAtdy1ALXYtdi1ALUItQi14LXYtdS12LXgteC15LXUteS14LXotei14LUItei17LXktey16LXwtfC19LXstRy18LXotfi18LUctRy1kLX4tfi1kLWMtYy1/LX4tgC1+LX8tgC19LXwtfC1+LYAtfy2BLYAtei1FLUctQi1FLXotfy1jLWktaS2CLX8tgS1/LYItgi2DLYEthC2FLYYthi2HLYQtiC2JLYotii2LLYgtiy2KLYwtjC2NLYstjS2MLY4tji2PLY0tjy2OLZAtkC2RLY8tkS2QLZItki2TLZEtky2SLZQtlC2VLZMtlS2ULZYtli2XLZUtmC2XLZYtli2ZLZgtmC2ZLZotmi2bLZgtnC2dLZ4tni2fLZwtnS2cLaAtoC2hLZ0toS2gLaItoi2jLaEtoy2iLaQtpC2lLaMtpS2kLaYtpi2nLaUtpy2mLagtqC2pLactqS2oLaotqi2rLaktqy2qLawtrC2tLastrS2sLa4tri2vLa0tsC2xLbItsi2zLbAttC2yLbEtsS21LbQtti23LbgtuC25LbYtuS24Lbotui27Lbktuy26LbwtvC29LbstvS28Lb4tvi2/Lb0twC3BLcItwi3DLcAtwy3CLcQtxC3FLcMtxS3ELcYtxi3HLcUtxy3GLWAtYC1fLcctyC3DLcUtxS3JLcgtwy3ILcotyi3ALcMtyi3ILcstyy3ILcktyy3MLcotyS3NLcstzi3NLcktyS3PLc4txS3HLc8tzy3JLcUtWC3OLc8tzi1YLVMtUy3QLc4tzS3OLdAtzy1ZLVgtWS3PLcctxy1fLVkt0C3RLc0tyy3NLdEt0i3QLVMt0C3SLdEtUy1RLdIt0y3SLVEtUS1QLdMt0y1QLVUtVS3ULdMt1C1VLVYtVi3VLdQt1i3ULdUt1S3XLdYt2C3WLdct2C3XLdkt2i3YLdkt2i3bLdgt3C3aLdkt3C3dLdot3S3eLdot3S3fLd4t2C3gLdYt4C3hLdYt1S1WLeIt3y3iLd4t4y3VLeIt3y3jLeIt5C3XLdUt1S3lLeQt5i3nLegt6C3pLeYt6S3oLeot6i3rLekt7C3qLegt6C3tLewt7S3oLect5y3uLe0t7y3rLeot6i3wLe8t8C3qLewt7y3wLfEt8S3yLe8t8i3xLfMt8y30LfIt9C3zLfUt9S32LfQt9S3zLfct9y34LfUt9i31Lfkt+S31Lfgt+S36LfYt+C37Lfkt8y3xLfwt/C33LfMt/S38LfEt8S3wLf0t7C39LfAt/i3/LQAuAC4BLv4tAS4ALgIuAy7+LQEuAS4ELgMuAi4FLgEuBC4BLgUuBS4CLgYuBS4HLgQuBi4ILgUuCC4GLgkuBS4ILgouCi4HLgUuCS4LLgguDC4LLgkuCS4NLgwuCC4LLg4uDi4KLgguDi4LLgwuDC4PLg4u/i0DLhAuEC4RLv4t/y3+LREuES4SLv8tDC4NLhMuEy4ULgwuDy4MLhQuFC4VLg8uFi4VLhQuFC4XLhYuFy4ULhguGC4ZLhcuGi4WLhcuFy4bLhouGy4XLhkuGS4cLhsuHS4eLh8uHy4gLh0uIC4fLtks2SzcLCAu2izZLB8uHy4hLtosIS4fLh4uIS4eLiIuIy4kLiUuJi4nLiguKC4pLiYuKi4mLikuKS4rLiouKS4oLiwuLC4tLikuLS4uLikuLi4vLikuJy4mLjAuMC4xLicuJi4qLjIuMi4wLiYuLS4sLjMuMy40Li0uNS4uLi0uLS40LjUuLi41LjYuNi43Li4uLy4uLjcuNy44Li8uOS44LjcuNy46LjkuMC4yLjsuOy48LjAuPC47Lj0uPS4+LjwuPy48Lj4uMC48Lj8uPy4xLjAuPi5ALj8uQC4+LkEuQS5CLkAuQy5BLj4uPi49LkMuQC5CLkQuRC7pLUAuPy5ALukt6S3rLT8uPy7rLe8t7y0xLj8uJy4xLu8t7y3yLScuJy7yLfQt9C0oLicuKC70LUUuRS4sLiguLC5FLkYuRi4zLiwuRy5ILkkuSi5LLkwuTC5NLkouTC5LLk4uTi5PLkwuUC5RLlIuUi5TLlAuUC5TLlQuVC5VLlAuVi5XLlguWC5ZLlYuWi5ZLlguWC5bLlouWi5bLlwuXC5dLlouXi5dLlwuXC5fLl4uYC5hLmIuYi5jLmAuYC5jLmQuZC5lLmAuZi5nLmguaC5pLmYuaC5nLmouai5rLmgubC5tLm4ubi5vLmwucC5xLnIuci5zLnAuaS5oLnQudC5oLmsudC51Lmkuay52LnQudy54LnkueS56Lncuei57LnwufC53LnoufS5+Ln8ufy5+LoAufy6BLn0ugC6CLn8ugy6CLoAugC53LoMudy58LoQuhC6DLncuhS59LoEuhi6HLoguiC6HLokuiS6KLoguiC6KLosuiy6MLoguiy6KLo0ujS6KLokujS6OLosujy6OLo0ujS6QLo8uiS6RLo0ukC6NLpEukS6SLpAuky6ULpUulS6ULoUulS6WLpMuly6TLpYuhS6YLpUuli6ZLpcumi6ILowujC6bLpouiC6aLoYugS6YLoUunC6dLp4uni6fLpwunC6fLqAuoC6hLpwunS6cLqIuoi6cLqEuoi6jLp0uoS6kLqIupS6mLqcupy6mLqgupy6pLqUuqC6qLqcuqy6sLq0urS6uLqsurC6rLq8ury6wLqwusC6vLrEusS6yLrAusi6xLrMusy60LrIutC6zLrUutS62LrQuri6tLrcuty64Lq4uuC63LrkuuS66Lrguui65Lrsuuy68LrouvC67Lr0uvS6+Lrwuvi69Lr8uvy7ALr4uwS7CLsMuwy7ELsEuwi7BLsUuxS7GLsIuxC7DLscuxy7ILsQuyC7HLskuyS7KLsguyi7JLssuyy7MLsouxi7FLs0uzS7OLsYuzi7NLs8uzy7QLs4u0C7PLtEu0S7SLtAu0y7SLtEu0S7ULtMu0y7ULtUu1S7WLtMu1y7YLtku2S7aLtcu2C7XLtsu2y7cLtgu3C7bLt0u3S7eLtwu3i7dLt8u3y7gLt4u4S7iLuMu5C7lLuYu5i7nLuQu5S7kLugu6C7pLuUu6i7rLuwu7C7tLuou7S7sLu4u7i7vLu0u7y7uLvAu8C7xLu8u8S7wLvIu8i7zLvEu6S7oLvQu9C71Luku9i73Lvgu+C75LvYu9y72Lvou+i77Lvcu/C79Lv4u/i7/Lvwu/y7+LvMu8y7yLv8uTC0/LTktOS07LUwtVi1LLQAvAC/iLVYtPS0AL0stAS8CLwMvAy8ELwEvBC8DLwUvBi8HLwgvCC8JLwYvBy8GLwovCi8LLwcvDC8LLwovDS8OLw8vEC8RLxIvEi8TLxAvEy8SLxQvFC8VLxMvEi8WLxQvEi8XLxYvEi8YLxcvGC8SLxEvES8ZLxgvGi8ZLxEvES8bLxovGy8RLxAvEC8cLxsvHS8eLx8vHy8gLx0vIC8fLyEvIS8iLyAvIy8kLyUvJi8kLyMvIi8hLycvIy8oLyYvJS8pLyMvJy8qLyIvKy8qLycvJy8sLysvLS8pLyUvJS8uLy0vKy8sLy8vMC8xLzIvMi8zLzAvMy8yLyYvJi8oLzMvLy80LysvzC3LLTUvNS82L8wt0S01L8stNy84L8QtxC3CLTcvNy/CLcEtwS05Lzcvxi3ELTgvOC86L8YtYC3GLTovOi9nLWAtOy88Lz0vOy89Lz4vPS8/Lz4vPS9ALz8vPS9BL0AvQC9CLz8vPy9DLz4vRC87Lz4vRC8+L0UvRi9HL0gvSS9GL0gvSi9JL0gvSi9IL0svSi9LL0wvTS9KL0wvTi9JL0ovTy9QL1EvUi9TL1QvUy9SL1UvVS9WL1MvVi9VL1cvVy9YL1YvWC9XL1kvWS9aL1gvWi9ZL1svWy9cL1ovXS9eL18vXy9gL10vYC9fL2EvYi9jL2QvZS9mL2cvaC9pL2ovaS9oL2svay9sL2kvbS9uL28vby9wL20vcC9vL3EvcS9yL3Avci9xL3Mvcy90L3IvdS92L3cvdy94L3UvdS94L3kvei97L3wvfS9+L38vgC+BL4IvgS+AL4MvhC+0LYUvsi20LYQvhC+GL7Itsi2GL4cvhy+zLbItiC+JL4ovii+LL4gviC+LL4wvjC+7LYgvuy2ML40vjS+5Lbstti25LY0vjS+OL7YtHC22LY4vji+PLxwtHC2PL5AvkC8XLRwtGC0XLZAvkC+RLxgtki+TL5QvlC+VL5Ivli+VL5QvlC+XL5YvmC+WL5cvly+ZL5gvli+YL5ovmi+bL5YvlS+WL5svmy+cL5Uvki+VL5wvnC+dL5IvnS+cL54vni+fL50voC+eL5wvnC+bL6AvoS+gL5svmy+aL6EvoC+hL6Ivoi+jL6Avni+gL6Mvoy+kL54vny+eL6QvpC+lL58vpS+kL6Yvpi+nL6UvqC+mL6QvpC+jL6gvqS+oL6Mvoy+iL6kvqC+pL6ovqi+rL6gvpi+oL6svqy+sL6Yvpy+mL6wvrC+tL6cvrS+sL64vri+vL60vsC+uL6wvrC+rL7AvsS+wL6svqy+qL7EvsC+xL7Ivsi+zL7Avri+wL7Mvsy+0L64vry+uL7QvtC+1L68vti+qL6kvqS+3L7Yvty+pL6Ivoi+4L7cvuC+iL6EvoS+5L7gvuS+hL5ovmi+6L7kvui+aL5gvmC+7L7ovuy+YL5kvmS+8L7svvS+7L7wvvC++L70vvy+9L74vvi/AL78vwS+/L8AvwC/CL8Evvy/BL8Mvwy/EL78vvS+/L8QvxC/FL70vuy+9L8UvxS+6L7svxi+5L7ovui/FL8Yvxy/GL8UvxS/EL8cvyC/HL8QvxC/DL8gvxy/IL8kvyS/KL8cvxi/HL8ovyi/LL8YvuS/GL8svyy+4L7kvuC/LL8wvzC+3L7gvzS/ML8svyy/KL80vzi/NL8ovyi/JL84vzS/OL88vzy/QL80vzC/NL9Av0C/RL8wvty/ML9Ev0S+2L7cvti/RL9Iv0i/TL7Yvqi+2L9Mv0y+xL6ov1C/SL9Ev0S/QL9Qv1S/UL9Av0C/PL9Uv1C/VL9Yv1i/XL9Qv0i/UL9cv1y/YL9Iv0y/SL9gv2C/ZL9MvsS/TL9kv2S+yL7Evsi/ZL9ov2i/bL7Iv3C/aL9kv2S/YL9wv2C/XL90v3S/eL9gv1y/WL98v3y/gL9cv4S/WL9Uv1S/iL+Ev4i/VL88vzy/jL+Iv4y/PL84vzi/kL+Mv5C/OL8kvyS/lL+Qv5S/JL8gvyC/mL+Uv5i/IL8Mvwy/nL+Yv5y/DL8EvwS/oL+cv6C/BL8Ivwi/pL+gv6i/oL+kv6S/rL+ov7C/qL+sv6y/tL+wv7i/sL+0v7S/vL+4v7C/uL/Av8C/xL+wv6i/sL/Ev8S/yL+ov6C/qL/Iv8i/nL+gv8y/mL+cv5y/yL/Mv9C/zL/Iv8i/xL/Qv9S/0L/Ev8S/wL/Uv9C/1L/Yv9i/3L/Qv8y/0L/cv9y/4L/Mv5i/zL/gv+C/lL+Yv5S/4L/kv+S/kL+Uv+i/5L/gv+C/3L/ov+y/6L/cv9y/2L/sv+i/7L/wv/C/9L/ov+S/6L/0v/S/+L/kv5C/5L/4v/i/jL+Qv4y/+L/8v/y/iL+MvADD/L/4v/i/9LwAwATAAMP0v/S/8LwEwADABMAIwAjADMAAw/y8AMAMwAzAEMP8v4i//LwQwBDDhL+Iv4S8EMAUwBTAGMOEvBDADMAcwBzAIMAQwAzACMAkwCTAKMAMwCzACMAEwATAMMAswDDABMPwv/C8NMAwwDTD8L/sv+y8OMA0wDjD7L/Yv9i8PMA4wDzD2L/Uv9S8QMA8wEDD1L/Av8C8RMBAwETDwL+4v7i8SMBEwEjDuL+8v7y8TMBIwFDASMBMwEzAVMBQwFjAUMBUwFTAXMBYwGDAWMBcwFzAZMBgwFjAYMBowGjAbMBYwFDAWMBswGzAcMBQwEjAUMBwwHDARMBIwHTAQMBEwETAcMB0wHjAdMBwwHDAbMB4wHzAeMBswGzAaMB8wHjAfMCAwIDAhMB4wHTAeMCEwITAiMB0wEDAdMCIwIjAPMBAwDzAiMCMwIzAOMA8wJDAjMCIwIjAhMCQwJTAkMCEwITAgMCUwJDAlMCYwJjAnMCQwIzAkMCcwJzAoMCMwDjAjMCgwKDANMA4wDTAoMCkwKTAMMA0wKjApMCgwKDAnMCowKzAqMCcwJzAmMCswKjArMCwwLDAtMCowKTAqMC0wLTAuMCkwDDApMC4wLjALMAwwCzAuMC8wLzAwMAswLjAtMDEwMTAyMC4wLTAsMDMwMzA0MC0wNTAsMCswKzA2MDUwNjArMCYwJjA3MDYwNzAmMCUwJTA4MDcwODAlMCAwIDA5MDgwOTAgMB8wHzA6MDkwOjAfMBowGjA7MDowOzAaMBgwGDA8MDswPDAYMBkwGTA9MDwwPjA8MD0wPTA/MD4wQDA+MD8wPzBBMEAwQjBAMEEwQTBDMEIwQDBCMEQwRDBFMEAwPjBAMEUwRTBGMD4wPDA+MEYwRjA7MDwwRzA6MDswOzBGMEcwSDBHMEYwRjBFMEgwSTBIMEUwRTBEMEkwSDBJMEowSjBLMEgwRzBIMEswSzBMMEcwOjBHMEwwTDA5MDowOTBMME0wTTA4MDkwTjBNMEwwTDBLME4wTzBOMEswSzBKME8wTjBPMFAwUDBRME4wTTBOMFEwUTBSME0wODBNMFIwUjA3MDgwNzBSMFMwUzA2MDcwVDBTMFIwUjBRMFQwVTBUMFEwUTBQMFUwVDBVMFYwVjBXMFQwUzBUMFcwVzBYMFMwNjBTMFgwWDA1MDYwNTBYMFkwWTBaMDUwWDBXMFswWzBcMFgwVzBWMF0wXTBeMFcwXzBWMFUwVTBgMF8wYDBVMFAwUDBhMGAwYTBQME8wTzBiMGEwYjBPMEowSjBjMGIwYzBKMEkwSTBkMGMwZDBJMEQwRDBlMGQwZTBEMEIwQjBmMGUwZjBCMEMwQzBnMGYwaDBmMGcwZzBpMGgwajBoMGkwaTBrMGowbDBqMGswazBtMGwwajBsMG4wbjBvMGowaDBqMG8wbzBwMGgwZjBoMHAwcDBlMGYwcTBkMGUwZTBwMHEwcjBxMHAwcDBvMHIwbzBuMHMwczByMG8wcjBzMHQwdDB1MHIwcTByMHUwdTB2MHEwZDBxMHYwdjBjMGQwYzB2MHcwdzBiMGMweDB3MHYwdjB1MHgwdTB0MHkweTB4MHUweDB5MHowejB7MHgwdzB4MHswezB8MHcwYjB3MHwwfDBhMGIwYTB8MH0wfTBgMGEwfjB9MHwwfDB7MH4wezB6MH8wfzB+MHswfjB/MIAwgDCBMH4wfTB+MIEwgTCCMH0wYDB9MIIwgjBfMGAwXzCCMIMwgzCEMF8wgjCBMIUwhTCGMIIwhzB/MHowgDB/MIcwejCIMIcwiTCIMHowijCIMIkwiTCLMIowizCJMIwwdDCMMIkwjTCMMHQwjjCMMI0wjDCOMIswjTCPMI4wjzCNMJAwbjCQMI0wkTCQMG4wkjCQMJEwkDCSMI8wkTCTMJIwkzCRMJQwbTCUMJEwkTBsMG0wbjBsMJEwlDCVMJMwjTBzMG4wdDBzMI0wlTCUMJYwljCXMJUwlzCWMJgwmTCYMJYwmjCYMJkwmzCYMJowmDCbMJcwmjCcMJswnDCaMJ0wnjCdMJownzCdMJ4woDCdMJ8wnTCgMJwwnzChMKAwoTCfMKIwozCiMJ8wpDCiMKMwpTCiMKQwojClMKEwpDCmMKUwozCnMKQwqDCnMKMwozCpMKgwqjCoMKkwqTCrMKowrDCqMKswqzCtMKwwrjCsMK0wrTCvMK4wsDCuMK8wrzCxMLAwsjCwMLEwsTCzMLIwtDCyMLMwszC1MLQwtjC0MLUwtTC3MLYwuDC2MLcwtzC5MLgwujC4MLkwuTC7MLowvDC6MLswuzC9MLwwvjC8ML0wvTC/ML4wwDC+ML8wvzDBMMAwwjDAMMEwwTDDMMIwxDDCMMMwwzDFMMQwxjDEMMUwxTDHMMYwyDDGMMcwxzDJMMgwyjDIMMkwyTDLMMowzDDKMMswyzDNMMwwzjDMMM0wzTDPMM4w0DDOMM8wzjDQMNEw0jDRMNAw0DDTMNIw0TDUMM4wzzDVMNAw0zDQMNUw1TDWMNMw1zDTMNYw1jDYMNcw2DDWMNkw2TDaMNgw2zDZMNYw1jDVMNsw3DDbMNUw1TDPMNww2zDcMN0w3TDeMNsw2TDbMN4w3jDfMNkw2jDZMN8w3zDgMNow4DDfMOEw4TDiMOAw4zDhMN8w3zDeMOMw5DDjMN4w3jDdMOQw4zDkMOUw5TDmMOMw4TDjMOYw5jDnMOEw4jDhMOcw5zDoMOIw6DDnMOkw6TDqMOgw6zDpMOcw5zDmMOsw7DDrMOYw5jDlMOww6zDsMJkvmS+XL+sw6TDrMJcvly+UL+kw6jDpMJQvlC+TL+ow7TDlMOQw5DDuMO0w7jDkMN0w3TDvMO4w7zDdMNww3DDwMO8w8DDcMM8wzzDNMPAw8TDwMM0wzTDLMPEw8jDxMMswyzDJMPIw8zDyMMkwyTDHMPMw8jDzMPQw9DD1MPIw8TDyMPUw9TD2MPEw8DDxMPYw9jDvMPAw9zDuMO8w7zD2MPcw+DD3MPYw9jD1MPgw+TD4MPUw9TD0MPkw+DD5MPow+jD7MPgw9zD4MPsw+zD8MPcw7jD3MPww/DDtMO4w7TD8MP0w/TD+MO0w5TDtMP4w/jDsMOUw/zD9MPww/DD7MP8wADH/MPsw+zD6MAAx/zAAMcIvwi/AL/8w/TD/MMAvwC++L/0w/jD9ML4vvi+8L/4w7DD+MLwvvC+ZL+wwATH6MPkw+TACMQExAjH5MPQw9DADMQIxAzH0MPMw8zAEMQMxBDHzMMcwxzDFMAQxBTEEMcUwxTDDMAUxBjEFMcMwwzDBMAYxBzEGMcEwwTC/MAcxBjEHMQgxCDEJMQYxBTEGMQkxCTEKMQUxBDEFMQoxCjEDMQQxCzECMQMxAzEKMQsxDDELMQoxCjEJMQwxDTEMMQkxCTEIMQ0xDDENMQ4xDjEPMQwxCzEMMQ8xDzEQMQsxAjELMRAxEDEBMQIxATEQMRExETESMQEx+jABMRIxEjEAMfowEzERMRAxEDEPMRMxFDETMQ8xDzEOMRQxEzEUMe8v7y/tLxMxETETMe0v7S/rLxExEjERMesv6y/pLxIxADESMekv6S/CLwAxFTEOMQ0xDTEWMRUxFjENMQgxCDEXMRYxFzEIMQcxBzEYMRcxGDEHMb8wvzC9MBgxGTEYMb0wvTC7MBkxGjEZMbswuzC5MBoxGzEaMbkwuTC3MBsxGjEbMRwxHDEdMRoxGTEaMR0xHTEeMRkxGDEZMR4xHjEXMRgxHzEWMRcxFzEeMR8xIDEfMR4xHjEdMSAxITEgMR0xHTEcMSExIDEhMSIxIjEjMSAxHzEgMSMxIzEkMR8xFjEfMSQxJDEVMRYxFTEkMSUxJTEmMRUxDjEVMSYxJjEUMQ4xJzElMSQxJDEjMScxKDEnMSMxIzEiMSgxJzEoMRkwGTAXMCcxJTEnMRcwFzAVMCUxJjElMRUwFTATMCYxFDEmMRMwEzDvLxQxKTEiMSExITEqMSkxKjEhMRwxHDErMSoxKzEcMRsxGzEsMSsxLDEbMbcwtzC1MCwxLTEsMbUwtTCzMC0xLjEtMbMwszCxMC4xLzEuMbEwsTCvMC8xLjEvMTAxMDExMS4xLTEuMTExMTEyMS0xLDEtMTIxMjErMSwxMzEqMSsxKzEyMTMxNDEzMTIxMjExMTQxNTE0MTExMTEwMTUxNDE1MTYxNjE3MTQxMzE0MTcxNzE4MTMxKjEzMTgxODEpMSoxKTE4MTkxOTE6MSkxIjEpMToxOjEoMSIxOzE5MTgxODE3MTsxPDE7MTcxNzE2MTwxOzE8MUMwQzBBMDsxOTE7MUEwQTA/MDkxOjE5MT8wPzA9MDoxKDE6MT0wPTAZMCgxPTE2MTUxNTE+MT0xPjE1MTAxMDE/MT4xPzEwMS8xLzFAMT8xQDEvMa8wrzCtMEAxQTFAMa0wrTCrMEExQjFBMaswqzCpMEIxQzFCMakwqTCjMEMxQjFDMZ4wnjBEMUIxQTFCMUQxRDFFMUExQDFBMUUxRTE/MUAxRjE+MT8xPzFFMUYxRzFGMUUxRTFEMUcxRDGeMEgxSDFHMUQxRzFIMZkwmTBJMUcxRjFHMUkxSTFKMUYxPjFGMUoxSjE9MT4xPTFKMUsxSzFMMT0xNjE9MUwxTDE8MTYxTTFLMUoxSjFJMU0xSTGZME4xTjFNMUkxTTFOMW0wbTBrME0xSzFNMWswazBpMEsxTDFLMWkwaTBnMEwxPDFMMWcwZzBDMDwxmTBIMZowmjBIMZ4wlDBtME4xTjGWMJQwljBOMZkwnjBDMZ8wnzBDMaMwTzHSMNMw0zBQMU8xUTFSMdYv1i/hL1ExUzFUMQIwAjALMFMxVTFWMSwwLDA1MFUxVzFYMVYwVjBfMFcxWTFaMVsxWzFcMVkxiTB5MHQwejB5MIkwXTGHMIgwiDCKMF0xhzBdMV4xXjFfMYcwhzBfMYAwgDBfMWAxYDFhMYAwXzFeMWIxYjFjMV8xZDFlMWYxZjFnMWQxaDFkMWcxZzFpMWgxaDFpMZMvky+SL2gxaDGSL50vnS9qMWgxZDFoMWoxajFrMWQxZTFkMWsxazFsMWUxbDFrMW0xbTFuMWwxbzFtMWsxazFqMW8xajGdL58vny9vMWoxbzGfL6UvpS9wMW8xbTFvMXAxcDFxMW0xbjFtMXExcTFyMW4xcjFxMXMxczF0MXIxdTFzMXExcTFwMXUxcDGlL6cvpy91MXAxdTGnL60vrS92MXUxczF1MXYxdjF3MXMxdDFzMXcxdzF4MXQxeDF3MXkxeTF6MXgxezF5MXcxdzF2MXsxdjGtL68vry97MXYxezGvL7UvtS98MXsxeTF7MXwxfDF9MXkxejF5MX0xfTF+MXoxfzGAMYExgTGCMX8xgDF/MYMxhDGDMX8xfzGFMYQxhTF/MYYxhjGHMYUx2DCEMYUxhTHXMNgwgzGIMYAxiDGDMYkxiTGKMYgxizGJMYMxgzGEMYsxhDHYMNow2jCLMYQxizHaMOAw4DCMMYsxiTGLMYwxjDGNMYkxijGJMY0xjTGOMYoxjjGNMY8xjzGQMY4xkTGPMY0xjTGMMZExjDHgMOIw4jCRMYwxkTHiMOgw6DCSMZExjzGRMZIxkjGTMY8xkDGPMZMxkzGUMZAxlDGTMZUxlTGWMZQxlzGVMZMxkzGSMZcxkjHoMOow6jCXMZIxlzHqMJMvky9pMZcxlTGXMWkxaTFnMZUxljGVMWcxZzFmMZYxmDGZMZoxmjGbMZgxnDGdMZ4xnjGfMZwxoDGfMZ4xnjGhMaAxojGgMaExoTGjMaIxoDGiMaQxpDGlMaAxnzGgMaUxpTGmMZ8xnDGfMaYxpjGnMZwxpzGmMagxqDGpMacxqjGoMaYxpjGlMaoxqzGqMaUxpTGkMasxqjGrMawxrDGtMaoxqDGqMa0xrTGuMagxqTGoMa4xrjGvMakxrzGuMbAxsDGxMa8xsjGwMa4xrjGtMbIxszGyMa0xrTGsMbMxsjGzMbQxtDG1MbIxsDGyMbUxtTG2MbAxsTGwMbYxtjG3MbExtzG2MbgxuDG5MbcxujG4MbYxtjG1MboxuzG6MbUxtTG0MbsxujG7MbwxvDG9MboxuDG6Mb0xvTG+MbgxuTG4Mb4xvjG/MbkxwDGxMbcxsTHAMcExwjHBMcAxwTHCMcMxwzHEMcExxDHDMcUxxTHGMcQxxjHFMccxxzHIMcYxyTHIMccxxzHKMckxyDHJMZ0xnTGcMcgxpzHGMcgxyDGcMacxxjGnMakxqTHEMcYxrzHBMcQxxDGpMa8xwDHLMcIxwTGvMbExnTHJMcwxzDHNMZ0xnjGdMc0xzTHOMZ4xzjHNMc8xzzHQMc4x0DHPMdEx0THSMdAx0jHRMdMx0zHUMdIx1DHTMdUx1THWMdQx1jHVMdcx1zHYMdYx2DHXMdkx2THaMdgx2jHZMdsx2zHcMdox3THYMdox2jHeMd0x3jHaMd8x3zHgMd4x4THeMeAx4DHiMeEx3jHhMeMx4zHdMd4x5DHWMdgx2DHdMeQx5THkMd0x3THjMeUx5DHlMeYx5jHnMeQx1jHkMecx5zHUMdYx1DHnMegx6DHSMdQx6THoMecx5zHmMekx6DHpMeox6jHrMegx0jHoMesx6zHQMdIx0DHrMewx7DHOMdAx7THsMesx6zHqMe0x7DHtMaMxozGhMewxzjHsMaExoTGeMc4x7jHpMeYx5jHvMe4x7zHmMeUx5THwMe8x8DHlMeMx4zHxMfAx8THjMeEx4THyMfEx8zHxMfIx8jH0MfMx9THzMfQx9DH2MfUx9zH1MfYx9jH4Mfcx+TH3Mfgx+DH6Mfkx+zH5Mfox+jH8Mfsx/TH7Mfwx/DH+Mf0x/zH9Mf4x/jEAMv8x9zH5MQEyATICMvcx9TH3MQIyAzIBMvkx+TH7MQMyBDIDMvsx+zH9MQQyBTIEMv0x/TH/MQUyBDIFMgYyBjIHMgQyAzIEMgcyBzIIMgMyATIDMggyCDIJMgEyAjIBMgkyCTIKMgIyCjIJMgsyCzIMMgoyDTILMgkyCTIIMg0yDjINMggyCDIHMg4yDzIOMgcyBzIGMg8yDjIPMhAyEDIRMg4yDTIOMhEyETISMg0yCzINMhIyEjITMgsyDDILMhMyEzIUMgwyFDITMhUyFTIWMhQyFzIVMhMyEzISMhcyGDIXMhIyEjIRMhgyGTIYMhEyETIQMhkyGDIZMhoyGjIbMhgyFzIYMhsyGzIaMhwyHDIdMhsyHjIbMh0yGzIeMhcyFTIXMh4yHTIfMh4yIDIeMh8yHjIgMhUyFjIVMiAyHzIhMiAyIjIgMiEyIDIiMhYyITIjMiIyHTIcMiQyJDIlMh0yHzIdMiUyJTImMh8yITIfMiYyJjInMiEyIzIhMicyJzIoMiMyKDInMikyKTIqMigyKzIpMicyJzImMisyLDIrMiYyJjIlMiwyLTIsMiUyJTIkMi0yLDItMi4yLjIvMiwyKzIsMi8yLzIwMisyKTIrMjAyMDIxMikyKjIpMjEyMTIyMioyMjIxMjMyMzI0MjIyNTIzMjEyMTIwMjUyNjI1MjAyMDIvMjYyNzI2Mi8yLzIuMjcyNjI3MjgyODI5MjYyNTI2MjkyOTI6MjUyMzI1MjoyOjI7MjMyNDIzMjsyOzI8MjQyPDI7Mj0yPTI+MjwyPzI9MjsyOzI6Mj8yQDI/MjoyOjI5MkAyQTJAMjkyOTI4MkEyQDJBMkIyQjJDMkAyPzJAMkMyQzJEMj8yPTI/MkQyRDJFMj0yPjI9MkUyRTJGMj4yRjJFMkcyRzJIMkYySTJHMkUyRTJEMkkyRDJDMkoySjJLMkQyQzJCMkwyTDJNMkMyTjJCMkEyQTJPMk4yTzJBMjgyODJQMk8yUDI4MjcyNzJRMlAyUTI3Mi4yLjJSMlEyUjIuMi0yLTJTMlIyUzItMiQyJDJUMlMyVDIkMhwyHDJVMlQyVTIcMhoyGjJWMlUyVzJVMlYyVjJYMlcyWTJXMlgyWDJaMlkyWzJZMloyWjJcMlsyWTJbMl0yXTJeMlkyVzJZMl4yXjJfMlcyVTJXMl8yXzJUMlUyYDJTMlQyVDJfMmAyYTJgMl8yXzJiMmEyYzJhMmIyYjJdMmMyYTJjMmQyZDJlMmEyYDJhMmUyZTJmMmAyUzJgMmYyZjJSMlMyUjJmMmcyZzJRMlIyaDJnMmYyZjJlMmgyaTJoMmUyZTJkMmkyaDJpMmoyajJrMmgyZzJoMmsyazJsMmcyUTJnMmwybDJQMlEyUDJsMm0ybTJPMlAybjJtMmwybDJrMm4ybzJuMmsyazJqMm8ybjJvMnAycDJxMm4ybTJuMnEycTJyMm0yTzJtMnIycjJOMk8yTjJyMnMyczJ0Mk4ycjJxMnUydTJ2MnIycTJwMncydzJ4MnEyeTJwMm8ybzJ6MnkyejJvMmoyajJ7MnoyezJqMmkyaTJ8MnsyfDJpMmQyZDJ9MnwyfTJkMmMyYzJ+Mn0yfjJjMl0yXTJ/Mn4yfzJdMlsyWzKAMn8ygDJbMlwyXDKBMoAygjKAMoEygTKDMoIyhDKCMoMygzKFMoQyhjKEMoUyhTKHMoYyhDKGMogyiDKJMoQygjKEMokyiTKKMoIygDKCMooyijJ/MoAyizJ+Mn8yfzKKMosyjDKLMooyijKJMowyjTKMMokyiTKIMo0yjDKNMo4yjjKPMowyizKMMo8yjzKQMosyfjKLMpAykDJ9Mn4yfTKQMpEykTJ8Mn0ykjKRMpAykDKPMpIykzKSMo8yjzKOMpMykjKTMpQylDKVMpIykTKSMpUylTKWMpEyfDKRMpYyljJ7MnwyezKWMpcylzJ6MnsymDKXMpYyljKVMpgymTKYMpUylTKUMpkymDKZMpoymjKbMpgylzKYMpsymzKcMpcyejKXMpwynDJ5MnoyeTKcMp0ynTKeMnkynDKbMp8ynzKgMpwymzKaMqEyoTKiMpsyozKaMpkymTKkMqMypDKZMpQylDKlMqQypTKUMpMykzKmMqUypjKTMo4yjjKnMqYypzKOMo0yjTKoMqcyqDKNMogyiDKpMqgyqTKIMoYyhjKqMqkyqjKGMocyhzKrMqoyrDKqMqsyqzKtMqwyrjKsMq0yrTKvMq4ysDKuMq8yrzKxMrAyrjKwMrIysjKzMq4yrDKuMrMyszK0MqwyqjKsMrQytDKpMqoytTKoMqkyqTK0MrUytjK1MrQytDKzMrYytzK2MrMyszKyMrcytjK3MrgyuDK5MrYytTK2MrkyuTK6MrUyqDK1MroyujKnMqgypzK6MrsyuzKmMqcyvDK7MroyujK5MrwyvTK8MrkyuTK4Mr0yvDK9Mr4yvjK/MrwyuzK8Mr8yvzLAMrsypjK7MsAywDKlMqYypTLAMsEywTKkMqUywjLBMsAywDK/MsIywzLCMr8yvzK+MsMywjLDMsQyxDLFMsIywTLCMsUyxTLGMsEypDLBMsYyxjKjMqQyozLGMscyxzLIMqMyxjLFMskyyTLKMsYyxTLEMssyyzLMMsUyzTLEMsMywzLOMs0yzjLDMr4yvjLPMs4yzzK+Mr0yvTLQMs8y0DK9MrgyuDLRMtAy0TK4MrcytzLSMtEy0jK3MrIysjLTMtIy0zKyMrAysDLUMtMy1DKwMrEysTLVMtQy1jLUMtUy1TLXMtYy2DLWMtcy1zLZMtgy2jLYMtky2TLbMtoy2DLaMtwy3DLdMtgy1jLYMt0y3TLeMtYy1DLWMt4y3jLTMtQy3zLSMtMy0zLeMt8y4DLfMt4y3jLdMuAy3TLcMuEy4TLgMt0y4DLhMuIy4jLjMuAy3zLgMuMy4zLkMt8y0jLfMuQy5DLRMtIy0TLkMuUy5TLQMtEy5jLlMuQy5DLjMuYy4zLiMucy5zLmMuMy5jLnMugy6DLpMuYy5TLmMuky6TLqMuUy0DLlMuoy6jLPMtAyzzLqMusy6zLOMs8y7DLrMuoy6jLpMuwy6TLoMu0y7TLsMuky7DLtMu4y7jLvMuwy6zLsMu8y7zLwMusyzjLrMvAy8DLNMs4yzTLwMvEy8TLyMs0y8DLvMvMy8zL0MvAy9TLtMugy7jLtMvUy6DL2MvUy9zL2Mugy+DL2Mvcy9zL5Mvgy+TL3Mvoy4jL6Mvcy+zL6MuIy/DL6Mvsy+jL8Mvky+zL9Mvwy/TL7Mv4y3DL+Mvsy/zL+MtwyADP+Mv8y/jIAM/0y/zIBMwAzATP/MgIz2zICM/8y/zLaMtsy3DLaMv8yAjMDMwEz+zLhMtwy4jLhMvsyAzMCMwQzBDMFMwMzBTMEMwYzBzMGMwQzCDMGMwczCTMGMwgzBjMJMwUzCDMKMwkzCjMIMwszDDMLMwgzDTMLMwwzDjMLMw0zCzMOMwozDTMPMw4zDzMNMxAzETMQMw0zEjMQMxEzEzMQMxIzEDMTMw8zEjMUMxMzETMVMxIzFjMVMxEzETMXMxYzGDMWMxczFzMZMxgzGjMYMxkzGTMbMxozHDMaMxszGzMdMxwzHjMcMx0zHTMfMx4zIDMeMx8zHzMhMyAzIjMgMyEzITMjMyIzJDMiMyMzIzMlMyQzJjMkMyUzJTMnMyYzKDMmMyczJzMpMygzKjMoMykzKTMrMyozLDMqMyszKzMtMywzLjMsMy0zLTMvMy4zMDMuMy8zLzMxMzAzMjMwMzEzMTMzMzIzADIyMzMzMzP/MQAy/zEzMzQzNDMFMv8xNTM0MzMzMzM2MzUzNzM1MzYzNjM4MzczOTM3MzgzODMtMzkzNzM5MzozOjM7MzczNTM3MzszOzM8MzUzNDM1MzwzPDM9MzQzBTI0Mz0zPTMGMgUyBjI9Mz4zPjMPMgYyPzM+Mz0zPTM8Mz8zQDM/MzwzPDM7M0AzQTNAMzszOzM6M0EzQDNBM0IzQjNDM0AzPzNAM0MzQzNEMz8zPjM/M0UzRTNGMz4zDzI+M0YzRjMQMg8yEDJGM0czRzMZMhAySDNHM0YzRjNFM0gzSTNIM0QzRDNDM0kzSjNJM0MzQzNCM0ozSTNKM1wyXDJaMkkzSDNJM1oyWjJYMkgzRzNIM1gyWDJWMkczGTJHM1YyVjIaMhkySzNCM0EzQTNMM0szTDNBMzozOjNNM0wzTTM6MzkzOTNOM00zTjM5My0zLTMrM04zTzNOMyszKzMpM08zUDNPMykzKTMnM1AzUTNQMyczJzMlM1EzUDNRM1IzUjNTM1AzTzNQM1MzUzNUM08zTjNPM1QzVDNNM04zVTNMM00zTTNUM1UzVjNVM1QzVDNTM1YzVzNWM1MzUzNSM1czVjNXM1gzWDNZM1YzVTNWM1kzWTNaM1UzTDNVM1ozWjNLM0wzSzNaM1szWzNcM0szQjNLM1wzXDNKM0IzXTNbM1ozWjNZM10zXjNdM1kzWTNYM14zXTNeM4cyhzKFMl0zWzNdM4UyhTKDMlszXDNbM4MygzKBMlwzSjNcM4EygTJcMkozXzNYM1czVzNgM18zYDNXM1IzUjNhM2AzYTNSM1EzUTNiM2EzYjNRMyUzJTMjM2IzYzNiMyMzIzMhM2MzZDNjMyEzITMfM2QzZTNkMx8zHzMdM2UzZDNlM2YzZjNnM2QzYzNkM2czZzNoM2MzYjNjM2gzaDNhM2IzaTNgM2EzYTNoM2kzajNpM2gzaDNnM2ozazNqM2czZzNmM2szajNrM2wzbDNtM2ozaTNqM20zbTNuM2kzYDNpM24zbjNfM2AzXzNuM28zbzNwM18zWDNfM3AzcDNeM1gzcTNvM24zbjNtM3EzcjNxM20zbTNsM3IzcTNyM7EysTKvMnEzbzNxM68yrzKtMm8zcDNvM60yrTKrMnAzXjNwM6syqzKHMl4zczNsM2szazN0M3MzdDNrM2YzZjN1M3QzdTNmM2UzZTN2M3UzdjNlMx0zHTMbM3YzdzN2MxszGzMZM3czeDN3MxkzGTMXM3gzeTN4MxczFzMRM3kzeDN5MwwzDDN6M3gzdzN4M3ozejN7M3czdjN3M3szezN1M3YzfDN0M3UzdTN7M3wzfTN8M3szezN6M30zejMMM34zfjN9M3ozfTN+MwczBzN/M30zfDN9M38zfzOAM3wzdDN8M4AzgDNzM3QzczOAM4EzgTOCM3MzbDNzM4IzgjNyM2wzgzOBM4AzgDN/M4MzfzMHM4QzhDODM38zgzOEM9sy2zLZMoMzgTODM9ky2TLXMoEzgjOBM9cy1zLVMoIzcjOCM9Uy1TKxMnIzBzN+MwgzCDN+MwwzAjPbMoQzhDMEMwIzBDOEMwczDDN5Mw0zDTN5MxEzhTOGM0IyQjJOMoUzhzOIM3AycDJ5MocziTOKM5oymjKjMokzizOMM8QyxDLNMoszjTOOM48zjzOQM40z9zLnMuIy6DLnMvcykTP1MvYy9jL4MpEz9TKRM5IzkjOTM/Uy9TKTM+4y7jKTM5QzlDOVM+4ykzOSM5YzljOXM5MztzGYM8AxyzHAMZgzmDOZM8sxmTOYM5ozmjObM5kzmDO3MbkxuTGaM5gzmjO5Mb8xvzGcM5ozmzOaM5wznDOdM5sznjOfM6AzoDOhM54zoTOgM6Iz1zGiM6AzoDPZMdcx2TGgM6MzozOkM9kxojOlM6EzpTOiM6YzpjOnM6UzojPXMdUx1TGmM6IzpjPVMdMx0zGoM6YzpzOmM6gzqDOpM6czqTOoM6ozqjOrM6kzqDPTMdEx0TGqM6gzqjPRMc8xzzGsM6ozqzOqM6wzrDOtM6szrTOsM8wxzDGuM60zrDPPMc0xzTHMMawzrjPMMckxyTHKMa4zrzOiMaMxozGwM68zsTOvM7AzsDOyM7EzszOxM7IzsjO0M7MzIzKzM7QztDMiMiMyszMjMigyKDK1M7MzsTOzM7UztTO2M7EzrzOxM7YztjO3M68zojGvM7cztzOkMaIxpDG3M7gzuDOrMaQxuTO4M7cztzO2M7kzujO5M7YztjO1M7ozKjK6M7UztTMoMioyujMqMjIyMjK7M7ozuTO6M7szuzO8M7kzuDO5M7wzvDO9M7gzqzG4M70zvTOsMasxrDG9M74zvjOzMawxvzO+M70zvTO8M78zwDO/M7wzvDO7M8AzNDLAM7szuzMyMjQywDM0MjwyPDLBM8AzvzPAM8EzwTPCM78zvjO/M8IzwjPDM74zszG+M8MzwzO0MbMxtDHDM8QzxDO7MbQxxTPEM8MzwzPCM8UzxjPFM8IzwjPBM8YzPjLGM8EzwTM8Mj4yxjM+MkYyRjLHM8YzxTPGM8czxzPIM8UzxDPFM8gzyDPJM8QzuzHEM8kzyTO8MbsxvDHJM8ozyjPLM7wxyTPIM8wzzDPNM8kzyDPHM84zzjPPM8gzxzNGMtAz0DPRM8cz0jPwMfEx8THzMdIz0zPSM/Mx8zH1MdMzAjLTM/Ux0zMCMgoyCjLUM9Mz0jPTM9Qz1DPVM9Iz8DHSM9Uz1TPvMfAx7zHVM9Yz1jPuMe8x1zPWM9Uz1TPUM9czDDLXM9Qz1DMKMgwy1zMMMhQyFDLYM9cz1jPXM9gz2DPZM9Yz7jHWM9kz2TPaM+4x6THuMdoz2jPqMekx6jHaM9sz2zPtMeox3DPbM9oz2jPZM9wz3TPcM9kz2TPYM90zFjLdM9gz2DMUMhYy3TMWMiIyIjK0M90z3DPdM7QztDOyM9wz2zPcM7IzsjOwM9sz7THbM7AzsDOjMe0x3jPfM+Az4DPhM94z4DPfM+Iz4jPjM+Az4zPiM+Qz5DPlM+Mz5jPkM+Iz4jPnM+Yz5zPiM98z3zPoM+cz6DPfM94z3jPpM+gz6jPoM+kz6TPrM+oz6DPqM+wz7DPnM+gz5zPsM+0z7TPmM+cz7jPtM+wz7DPvM+4z7zPsM+oz6jPwM+8z8DPqM+sz6zPxM/Az8jPwM/Ez8TPzM/Iz8DPyM/Qz9DPvM/Az7zP0M/Uz9TPuM+8z9jP1M/Qz9DP3M/Yz9zP0M/Iz8jP4M/cz+DPyM/Mz8zP5M/gz+jP4M/kz+TP7M/oz+DP6M/wz/DP3M/gz9zP8M/0z/TP2M/cz/jP9M/wz/DP/M/4z/zP8M/oz+jMANP8zADT6M/sz+zMBNAA09TP2MwI0AjQDNPUz7jP1MwM0AzQENO4z7TPuMwQ0BDQFNO0z5jPtMwU0BTQGNOYz5DPmMwY0BjQHNOQz5TPkMwc0BzQINOUzCDQHNAk0CTQKNAg0CjQJNAs0CzQMNAo0DDQLNA00DTQONAw0DzQNNAs0CzQQNA80EDQLNAk0CTQRNBA0ETQJNAc0BzQGNBE0BjQFNBI0EjQRNAY0ETQSNBM0EzQQNBE0EDQTNBQ0FDQPNBA0FTQUNBM0EzQWNBU0FjQTNBI0EjQXNBY0FzQSNAU0BTQENBc0GDQXNAQ0BDQDNBg0FzQYNBk0GTQWNBc0FjQZNBo0GjQVNBY0GzQaNBk0GTQcNBs0HDQZNBg0GDQdNBw0HTQYNAM0AzQCNB00HjQdNAI0AjQfNB40HzQCNPYz9jP9Mx80HTQeNCA0IDQcNB00HDQgNCE0ITQbNBw0IjQhNCA0IDQjNCI0IzQgNB40HjQkNCM0JDQeNB80HzQlNCQ0JTQfNP0z/TP+MyU0JjQlNP4z/jMnNCY0JTQmNCg0KDQkNCU0KTQjNCQ0JDQqNCk0KzQiNCM0IzQsNCs0ITQiNC00LTQuNCE0GzQhNC40LjQvNBs0GjQbNC80LzQwNBo0FTQaNDA0MDQxNBU0FDQVNDE0MTQyNBQ0DzQUNDI0MjQzNA80DTQPNDM0MzQ0NA00DjQNNDQ0NDQ1NA40NTQ0NDY0NjQ3NDU0NzQ2NDg0ODQ5NDc0OTQ4NDo0OjQ7NDk0PDQ6NDg0ODQ9NDw0PTQ4NDY0NjQ+ND00PjQ2NDQ0NDQzND40MzQyND80PzQ+NDM0PjQ/NEA0QDQ9ND40PTRANEE0QTQ8ND00QjRBNEA0QDRDNEI0QzRAND80PzRENEM0RDQ/NDI0MjQxNEQ0RTRENDE0MTQwNEU0RDRFNEY0RjRDNEQ0QzRGNEc0RzRCNEM0SDRHNEY0RjRJNEg0STRGNEU0RTRKNEk0SjRFNDA0MDQvNEo0SzRKNC80LzQuNEs0SjRLNEw0TDRJNEo0STRMNE00TTRINEk0TjRNNEw0TDRPNE40TzRMNEs0SzRQNE80UDRLNC40LjQtNFA0UTRQNC00LTRSNFE0UzRPNFA0UDRUNFM0VTRONE80TzRWNFU0TTRONFc0VzRYNE00SDRNNFg0WDRZNEg0RzRINFk0WTRaNEc0QjRHNFo0WjRbNEI0QTRCNFs0WzRcNEE0PDRBNFw0XDRdNDw0OjQ8NF00XTReNDo0OzQ6NF40XjRfNDs0XzReNGA0YDRhNF80YTRgNGI0YjRjNGE0YzRiNGQ0ZDRlNGM0ZjRkNGI0YjRnNGY0ZzRiNGA0YDRoNGc0aDRgNF40XjRdNGg0XTRcNGk0aTRoNF00aDRpNGo0ajRnNGg0ZzRqNGs0azRmNGc0bDRrNGo0ajRtNGw0bTRqNGk0aTRuNG00bjRpNFw0XDRbNG40bzRuNFs0WzRaNG80bjRvNHA0cDRtNG40bTRwNHE0cTRsNG00cjRxNHA0cDRzNHI0czRwNG80bzR0NHM0dDRvNFo0WjRZNHQ0dTR0NFk0WTRYNHU0dDR1NHY0djRzNHQ0czR2NHc0dzRyNHM0eDR3NHY0djR5NHg0eTR2NHU0dTR6NHk0ejR1NFg0WDRXNHo0ezR6NFc0VzR8NHs0fTR5NHo0ejR+NH00fzR4NHk0eTSANH80dzR4NIE0gTSCNHc0cjR3NII0gjSDNHI0cTRyNIM0gzSENHE0bDRxNIQ0hDSFNGw0azRsNIU0hTSGNGs0ZjRrNIY0hjSHNGY0ZDRmNIc0hzSINGQ0ZTRkNIg0iDSJNGU0iTSINIo0ijSLNIk0izSKNIw0jDSNNIs0jTSMNI40jjSPNI00kDSONIw0jDSRNJA0kTSMNIo0ijSSNJE0kjSKNIg0iDSHNJI0hzSGNJM0kzSSNIc0kjSTNJQ0lDSRNJI0kTSUNJU0lTSQNJE0ljSVNJQ0lDSXNJY0lzSUNJM0kzSYNJc0mDSTNIY0hjSFNJg0mTSYNIU0hTSENJk0mDSZNJo0mjSXNJg0lzSaNJs0mzSWNJc0nDSbNJo0mjSdNJw0nTSaNJk0mTSeNJ00njSZNIQ0hDSDNJ40nzSeNIM0gzSCNJ80njSfNKA0oDSdNJ40nTSgNKE0oTScNJ00ojShNKA0oDSjNKI0ozSgNJ80nzSkNKM0pDSfNII0gjSBNKQ0pTSkNIE0gTSmNKU0pzSjNKQ0pDSoNKc0qTSiNKM0ozSqNKk0oTSiNKs0qzSsNKE0nDShNKw0rDStNJw0mzScNK00rTSuNJs0ljSbNK40rjSvNJY0lTSWNK80rzSwNJU0kDSVNLA0sDSxNJA0jjSQNLE0sTSyNI40jzSONLI0sjSzNI80szSyNLQ0tDS1NLM0tTS0NLY0tjS3NLU0tzS2NLg0uDS5NLc0ujS4NLY0tjS7NLo0uzS2NLQ0tDS8NLs0vDS0NLI0sjSxNLw0sTSwNL00vTS8NLE0vDS9NL40vjS7NLw0uzS+NL80vzS6NLs0wDS/NL40vjTBNMA0wTS+NL00vTTCNME0wjS9NLA0sDSvNMI0wzTCNK80rzSuNMM0wjTDNMQ0xDTBNMI0wTTENMU0xTTANME0xjTFNMQ0xDTHNMY0xzTENMM0wzTINMc0yDTDNK40rjStNMg0yTTINK00rTSsNMk0yDTJNMo0yjTHNMg0xzTKNMs0yzTGNMc0zDTLNMo0yjTNNMw0zTTKNMk0yTTONM00zjTJNKw0rDSrNM40zzTONKs0qzTQNM800TTNNM40zjTSNNE0xjTLNNM00zTLNMw0zDTUNNM00zTUNNU01TTWNNM00zTWNNc01zTYNNM02TTYNNc01zTaNNk02TTaNNs02zTcNNk03TTcNNs02zTeNN003TTeNN803zTgNN004TTgNN803zTiNOE04TTiNOM04zTkNOE04TTkNLk0uTS4NOE04TS4NLo0ujTgNOE03TTgNLo0ujS/NN003TS/NMA0wDTcNN002TTcNMA0wDTFNNk02TTFNMY0xjTYNNk00zTYNMY05TTkNOM04zTmNOU05TTmNOc05zToNOU06TToNOc05zTqNOk06TTqNOs06zTsNOk07TTsNOs06zTuNO007TTuNO807zTwNO008TTwNO807zTyNPE08zTwNPE07TTwNPM08TT0NPM08zT0NPU09TT2NPM09jT1NPc09zT4NPY0+DT3NPk0+TT6NPg0+jT5NPs0+zT8NPo0/DT7NP00/TT+NPw0/jT9NP80/zQANf40ADX/NAE1ATUCNQA1AjUBNQM1AzUENQI1BDUDNQU1BTUGNQQ1BjUFNQc1BzUINQY1CDUHNQk1CTUKNQg1CjUJNQs1CzUMNQo1DDULNQ01DTUONQw1DjUNNQ81DzUQNQ41EDUPNRE1ETUSNRA1EjURNRM1EzUUNRI1FDUTNRU1FTUWNRQ1FjUVNRc1FzUYNRY1GDUXNRk1GTUaNRg1GjUZNRs1GzUcNRo1HDUbNR01HjUdNRs1HTUeNR81HzUgNR01GzUhNR41HTUiNRw1IjUdNSA1IDUjNSI1IzUgNSQ1JDUlNSM1JjUjNSU1JTUnNSY1IzUmNSg1KDUiNSM1IjUoNSk1KTUcNSI1KjUpNSg1KDUrNSo1KzUoNSY1JjUsNSs1LDUmNSc1JzUtNSw1LjUsNS01LTUvNS41LDUuNTA1MDUrNSw1KzUwNTE1MTUqNSs1MjUxNTA1MDUzNTI1MzUwNS41LjU0NTM1NDUuNS81LzU1NTQ1NjU0NTU1NTU3NTY1NDU2NTg1ODUzNTQ1MzU4NTk1OTUyNTM15TM5NTg1ODXjM+Uz4zM4NTY1NjXgM+Mz4DM2NTc1NzXhM+AzMTUyNTo1OjU7NTE1KjUxNTs1OzU8NSo1KTUqNTw1PDU9NSk1HDUpNT01PTUaNRw1GjU9NT41PjUYNRo1GDU+NT81PzUWNRg1FjU/NUA1QDUUNRY1QTVANT81PzVCNUE1QjU/NT41PjVDNUI1QzU+NT01PTU8NUM1PDU7NUQ1RDVDNTw1QzVENUU1RTVCNUM1QjVFNUY1RjVBNUI1RzVGNUU1RTVINUc1SDVFNUQ1RDVJNUg1STVENTs1OzU6NUk1SjVJNTo1OjVLNUo1SzU6NTI1MjU5NUs1STVKNUw1TDVINUk1SDVMNU01TTVHNUg1DjRNNUw1TDUMNA40DDRMNUo1SjUKNAw0CjRKNUs1SzUINAo0CDRLNTk1OTXlMwg0RjVHNU41RzVNNU81TzVONUc1TjVPNVA1UDVRNU41UjVONVE1UTVTNVI1VDVSNVM1UjVUNUE1QDVBNVQ1VDVVNUA1FDVANVU1VTUSNRQ1EjVVNVY1VjUQNRI1EDVWNVc1VzUONRA1DjVXNVg1WDUMNQ41WTVYNVc1VzVaNVk1WjVXNVY1VjVbNVo1WzVWNVU1VTVUNVs1UzVbNVQ1WzVTNVw1XDVaNVs1WjVcNV01XTVZNVo1XjVdNVw1XDVfNV41XzVcNVM1UzVRNV81YDVfNVE1UTVQNWA1XzVgNWE1YTVeNV81OzRhNWA1YDU5NDs0OTRgNVA1UDU3NDk0NzRQNU81TzU1NDc0NTRPNU01TTUONDU0XTVeNWI1YjVjNV01WTVdNWM1YzVkNVk1WDVZNWQ1ZDVlNVg1DDVYNWU1ZTUKNQw1CjVlNWY1ZjUINQo1CDVmNWc1ZzUGNQg1BjVnNWg1aDUENQY1aTVoNWc1ZzVqNWk1ajVnNWY1ZjVrNWo1azVmNWU1ZTVkNWs1bDVrNWQ1ZDVjNWw1azVsNW01bTVqNWs1ajVtNW41bjVpNWo1bzVuNW01bTVwNW81cDVtNWw1bDVxNXA1cTVsNWM1YzViNXE1cjVxNWI1YjVzNXI1czViNV41XjVhNXM1cTVyNXQ1dDVwNXE1cDV0NXU1dTVvNXA1ZTR1NXQ1dDVjNGU0YzR0NXI1cjVhNGM0YTRyNXM1czVfNGE0XzRzNWE1YTU7NF80bjVvNXY1bzV1NXc1dzV2NW81djV3NXg1eDV5NXY1ejV2NXk1eTV7NXo1fDV6NXs1ejV8NWk1aDVpNXw1fDV9NWg1BDVoNX01fTUCNQQ1AjV9NX41fjUANQI1ADV+NX81fzX+NAA1/jR/NYA1gDX8NP40gTWANX81fzWCNYE1gjV/NX41fjWDNYI1gzV+NX01fTV8NYM1ezWDNXw1gzV7NYQ1hDWCNYM1gjWENYU1hTWBNYI1hjWFNYQ1hDWHNYY1hzWENXs1ezV5NYc1iDWHNXk1eTV4NYg1hzWINYk1iTWGNYc1jzSJNYg1iDWNNI80jTSINXg1eDWLNI00izR4NXc1dzWJNIs0iTR3NXU1dTVlNIk0hTWGNYo1ijWLNYU1gTWFNYs1izWMNYE1gDWBNYw1jDWNNYA1/DSANY01jTX6NPw0+jSNNY41jjX4NPo0+DSONY81jzX2NPg09jSPNZA1kDXzNPY0kTWQNY81jzWSNZE1kjWPNY41jjWTNZI1kzWONY01jTWMNZM1lDWTNYw1jDWLNZQ1kzWUNZU1lTWSNZM1kjWVNZY1ljWRNZI1lzWWNZU1lTWYNZc1mDWVNZQ1lDWZNZg1mTWUNYs1izWKNZk1mjWZNYo1ijWbNZo1mzWKNYY1hjWJNZs1mTWaNZw1nDWYNZk1mDWcNZ01nTWXNZg1uTSdNZw1nDW3NLk0tzScNZo1mjW1NLc0tTSaNZs1mzWzNLU0szSbNYk1iTWPNLM06TSWNZc1kTWWNek06TTsNJE1kTXsNO007TSQNZE18zSQNe00nTW5NOQ05DTlNJ01lzWdNeU0lzXoNOk05TToNJc1njWfNSA1IDUfNZ41IjSgNaE1oTUtNCI0QTVGNVI1TjVSNUY1TjSiNaM1ozVXNE40eDSkNaU1pTWBNHg0aTVuNXo1djV6NW41ojSmNac1pzWrNKI0qDWpNao1qjWrNag1zDSsNa01rTXUNMw01TTUNK41rjWvNdU0sDWxNbI1sjWzNbA1szWyNbQ1tDW1NbM14TO1NbQ1tDXeM+Ez6TPeM7Q1tDW2NekztjW0NbI1sjW3NbY1uDW3NbI1sjWxNbg1uTW3Nbg1uDW6Nbk1tzW5Nbs1uzW2Nbc1tjW7Nesz6zPpM7Y18TPrM7s1uzW8NfEzvDW7Nbk1uTW9Nbw1vjW9Nbk1uTW6Nb41vzW9Nb41vjXANb81vTW/NcE1wTW8Nb01vDXBNfMz8zPxM7w1+TPzM8E1wTXCNfkzwjXBNb81vzXDNcI1xDXDNb81vzXANcQ1xTXDNcQ1xDXGNcU1wzXFNcc1xzXCNcM1wjXHNfsz+zP5M8I1ATT7M8c1xzXINQE0yDXHNcU1xTXJNcg1yjXJNcU1xTXGNco1yzXMNc01zTXONcs1zTXMNc81zzXQNc01zTXQNdE10TXSNc010zXNNdI10jXUNdM10jXRNSU1JTUkNdI11TXQNc81zzXWNdU10DXVNdc11zXRNdA10TXXNSc1JzUlNdE1LTUnNdc11zXYNS012DXXNdU11TXZNdg12jXZNdU11TXWNdo12zXZNdo12jXcNds12TXbNd013TXYNdk12DXdNS81LzUtNdg1NTUvNd013TXeNTU13jXdNds12zXfNd414DXfNds12zXcNeA14TXfNeA14DXiNeE13zXhNeM14zXeNd813jXjNTc1NzU1Nd414TM3NeM14zW1NeEztTXjNeE14TWzNbU1sDWzNeE14TXiNbA15DXlNeY15jXnNeQ16DXpNeo16jXrNeg16jXpNew17DXtNeo17TXsNe417jXvNe018DXuNew17DXxNfA18TXsNek16TXyNfE18jXpNeg16DXzNfI19DXyNfM18zX1NfQ18jX0NfY19jXxNfI18TX2Nfc19zXwNfE1+DX3NfY19jX5Nfg1+TX2NfQ19DX6Nfk1+jX0NfU19TX7Nfo1/DX6Nfs1+zX9Nfw1+jX8Nf41/jX5Nfo1+TX+Nf81/zX4Nfk1ADb/Nf41/jUBNgA2ATb+Nfw1/DUCNgE2Ajb8Nf01/TUDNgI2BDYCNgM2AzYFNgQ2AjYENgY2BjYBNgI2ATYGNgc2BzYANgE2CDYHNgY2BjYJNgg2CTYGNgQ2BDYKNgk2CjYENgU2BTYLNgo2Azb9NQw2DTYMNv01DDYNNg42DzYONg02DTYQNg82ETYPNhA2EDYSNhE2EzYRNhI2EjYUNhM2EzYUNhU2FTYWNhM26zUVNhQ2FDboNes18zXoNRQ2FDYSNvM1EjYQNvU19TXzNRI2+zX1NRA2EDYNNvs1/TX7NQ02FzYVNus16zUYNhc2GDbrNeo16jUZNhg2GjYYNhk2GTYbNho2HDYaNhs2GzYdNhw2HjYcNh02HTYfNh42IDYeNh82HzYhNiA2IjYgNiE2ITYjNiI2JDYiNiM2IzYlNiQ2JjYkNiU2JTYnNiY2JTYjNig2KDYpNiU2KjYlNik2KTYrNio2KTYoNiw2LDYtNik2LjYpNi02LTYvNi42IzYhNjA2MDYoNiM2KDYwNjE2MTYsNig2MjYxNjA2MDYzNjI2MzYwNiE2ITYfNjM2NDYzNh82HzYdNjQ2MzY0NjU2NTYyNjM2NjY1NjQ2NDY3NjY2NzY0Nh02HTYbNjc2ODY3Nhs2GzYZNjg2NzY4Njk2OTY2Njc27zU5Njg2ODbtNe817TU4Nhk2GTbqNe01MjY1Njo2OzY6NjU2NTY2Njs2OjY7Njw2PDY9Njo2PjY6Nj02OjY+NjI2MTYyNj42PjY/NjE2LDYxNj82PzZANiw2LTYsNkA2QDZBNi02QTZANkI2QjZDNkE2QzZCNkQ2RDZFNkM2RTZENkY2RjZHNkU2RzZGNkg2SDZJNkc2STZINko2SjZLNkk2SzZKNkw2TDZNNks2TTZMNk42TjZPNk02UDZINkY2RjZRNlA2UTZGNkQ2SDZQNlI2UjZKNkg2SjZSNlM2UzZMNko2TDZTNlQ2VDZONkw2VTZUNlM2UzZWNlU2VjZTNlI2UjZXNlY2VzZSNlA2UDZYNlc2WDZQNlE2UTZZNlg2WjZYNlk2WTZbNlo2WDZaNlw2XDZXNlg2VzZcNl02XTZWNlc2VjZdNl42XjZVNlY2XzZeNl02XTZgNl82YDZdNlw2XDZhNmA2YTZcNlo2WjZiNmE2YjZaNls2WzZjNmI2ZDZiNmM2YzZlNmQ2YjZkNmY2ZjZhNmI2YTZmNmc2ZzZgNmE2YDZnNmg2aDZfNmA2aTZoNmc2ZzZqNmk2ajZnNmY2azZpNmo2ajZsNms2bDZqNm02ZjZtNmo2bTZmNmQ2bTZuNmw2bjZtNm82ZDZvNm02bzZkNmU2bzZwNm42cDZvNnE2ZTZxNm82cTZyNnA2czZrNmw2bDZ0NnM2dDZsNm42bjZ1NnQ2dTZuNnA2cDZ2NnU2djZwNnI2cjZ3NnY2eDZ2Nnc2dzZ5Nng2djZ4Nno2ejZ1NnY2dTZ6Nns2ezZ0NnU2dDZ7Nnw2fDZzNnQ2fTZ8Nns2ezZ+Nn02fjZ7Nno2ejZ/Nn42fzZ6Nng2eDaANn82gDZ4Nnk2eTaBNoA2gjaANoE2gTaDNoI2gDaCNoQ2hDZ/NoA2fzaENoU2hTZ+Nn82fjaFNoY2hjZ9Nn42hzaGNoU2hTaINoc2iDaFNoQ2hDaJNog2iTaENoI2gjaKNok2ijaCNoM2gzaLNoo2jDaKNos2izaNNow2ijaMNo42jjaJNoo2iTaONo82jzaINok2iDaPNpA2kDaHNog2kTaQNo82jzaSNpE2kjaPNo42jjaTNpI2kzaONow2jDaUNpM2lDaMNo02jTaVNpQ2ljaUNpU2lTaXNpY2lDaWNpg2mDaTNpQ2mTaSNpM2kzaaNpk2mzaRNpI2kjacNps2kDaRNp02nTaeNpA2hzaQNp42njafNoc2hjaHNp82nzagNoY2fTaGNqA2oDahNn02fDZ9NqE2oTaiNnw2czZ8NqI2ojajNnM2azZzNqM2ozakNms2aTZrNqQ2pDalNmk2pTakNqY2pjanNqU2pzamNqg2qDapNqc2qTaoNqo2qjarNqk2rDaqNqg2qDatNqw2rTaoNqY2pjauNq02rjamNqQ2pDajNq42ozaiNq82rzauNqM2rjavNrA2sDaxNq42sTawNrI2sjasNrE2szayNrA2sDa0NrM2tDawNq82rza1NrQ2tTavNqI2ojahNrU2tja1NqE2oTagNrY2tTa2Nrc2tza0NrU2tDa3Nrg2uDazNrQ2uTa4Nrc2tza6Nrk2uja3NrY2tja7Nro2uza2NqA2oDafNrs2vDa7Np82nzaeNrw2uza8Nr02vTa6Nrs2uja9Nr42vja5Nro2vza+Nr02vTbANr82wDa9Nrw2vDbBNsA2wTa8Np42njadNsE2wjbBNp02nTbDNsI2xDbANsE2wTbFNsQ2xja/NsA2wDbHNsY2vja/Nsg2yDbJNr42uTa+Nsk2yTbKNrk2uDa5Nso2yjbLNrg2sza4Nss2yzbMNrM2sjazNsw2zDbNNrI2rDayNs02zTbONqw2qjasNs42zjbPNqo2qzaqNs82zzbQNqs20DbPNtE20TbSNtA20jbRNtM20zbUNtI21DbTNtU21TbWNtQ21zbVNtM20zbYNtc22DbTNtE20TbZNtg22TbRNs82zzbONtk2zjbNNto22jbZNs422TbaNts22zbYNtk22DbbNtw23DbXNtg23TbcNts22zbeNt023jbbNto22jbfNt423zbaNs02zTbMNt824DbfNsw2zDbLNuA23zbgNuE24TbeNt823jbhNuI24jbdNt424zbiNuE24TbkNuM25DbhNuA24DblNuQ25TbgNss2yzbKNuU25jblNso2yjbJNuY25TbmNuc25zbkNuU25DbnNug26DbjNuQ26TboNuc25zbqNuk26jbnNuY25jbrNuo26zbmNsk2yTbINus27DbrNsg2yDbtNuw27jbqNus26zbvNu428DbpNuo26jbxNvA26DbpNvI28jbzNug24zboNvM28zb0NuM24jbjNvQ29Db1NuI23TbiNvU29Tb2Nt023DbdNvY29jb3Ntw21zbcNvc29zb4Ntc21TbXNvg2+Db5NtU21jbVNvk2+Tb6NtY2+jb5Nvs2+zb8Nvo2/Db7Nv02/Tb+Nvw2/jb9Nv82/zYAN/42ATf/Nv02/TYCNwE3Ajf9Nvs2+zYDNwI3Azf7Nvk2+Tb4NgM3+Db3NgQ3BDcDN/g2AzcENwU3BTcCNwM3AjcFNwY3BjcBNwI3BzcGNwU3BTcINwc3CDcFNwQ3BDcJNwg3CTcEN/c29zb2Ngk3CjcJN/Y29jb1Ngo3CTcKNws3CzcINwk3CDcLNww3DDcHNwg3DTcMNws3CzcONw03DjcLNwo3CjcPNw43DzcKN/U29Tb0Ng83EDcPN/Q29DbzNhA3DzcQNxE3ETcONw83DjcRNxI3EjcNNw43EzcSNxE3ETcUNxM3FDcRNxA3EDcVNxQ3FTcQN/M28zbyNhU3FjcVN/I28jYXNxY3GDcUNxU3FTcZNxg3GjcTNxQ3FDcbNxo3EjcTNxw3HDcdNxI3DTcSNx03HTceNw03DDcNNx43HjcfNww3BzcMNx83HzcgNwc3BjcHNyA3IDchNwY3ATcGNyE3ITciNwE3/zYBNyI3IjcjN/82ADf/NiM3IzckNwA3JDcjNyU3JTcmNyQ3JjclNyc3JzcoNyY3KDcnNyk3KTcqNyg3KzcpNyc3JzcsNys3LDcnNyU3JTctNyw3LTclNyM3IzciNy03IjchNy43LjctNyI3LTcuNy83LzcsNy03LDcvNzA3MDcrNyw3MTcwNy83LzcyNzE3MjcvNy43LjczNzI3MzcuNyE3ITcgNzM3NDczNyA3IDcfNzQ3Mzc0NzU3NTcyNzM3Mjc1NzY3NjcxNzI3Nzc2NzU3NTc4Nzc3ODc1NzQ3NDc5Nzg3OTc0Nx83HzceNzk3Ojc5Nx43HjcdNzo3OTc6Nzs3Ozc4Nzk3ODc7Nzw3PDc3Nzg3PTc8Nzs3Ozc+Nz03Pjc7Nzo3Ojc/Nz43Pzc6Nx03HTccNz83QDc/Nxw3HDdBN0A3Qjc+Nz83PzdDN0I3Nzc8N0Q3RDc8Nz03PTdFN0Q3RDdFN0Y3RjdHN0Q3RDdHN0g3SDdJN0Q3SjdJN0g3SDdLN0o3SjdLN0w3TDdNN0o3TjdNN0w3TDdPN043TjdPN1A3UDdRN043UjdRN1A3UDdTN1I3UjdTN1Q3VDdVN1I3UjdVNyo3KjcpN1I3UjcpNys3KzdRN1I3TjdRNys3KzcwN043TjcwNzE3MTdNN043SjdNNzE3MTc2N0o3Sjc2Nzc3NzdJN0o3RDdJNzc3VjdVN1Q3VDdXN1Y3VjdXN1g3WDdZN1Y3WjdZN1g3WDdbN1o3WjdbN1w3XDddN1o3XjddN1w3XDdfN143XjdfN2A3YDdhN143YjdhN2A3YDdjN2I3ZDdhN2I3XjdhN2Q3YjdlN2Q3ZDdlN2Y3ZjdnN2Q3ZzdmN2g3aDdpN2c3aTdoN2o3ajdrN2k3azdqN2w3bDdtN2s3bTdsN243bjdvN203bzduN3A3cDdxN283cTdwN3I3cjdzN3E3czdyN3Q3dDd1N3M3dTd0N3Y3djd3N3U3dzd2N3g3eDd5N3c3eTd4N3o3ejd7N3k3ezd6N3w3fDd9N3s3fTd8N343fjd/N303fzd+N4A3gDeBN383gTeAN4I3gjeDN4E3gzeCN082TzZONoM3hDeDN042TjZUNoQ3gzeEN4U3hTeGN4M3hjeFN4c3hzeIN4Y3iDeHN4k3iTd9N4g3ijeJN4c3hzeLN4o3izeHN4U3hTeMN4s3jDeFN4Q3hDeNN4w3jTeEN1Q2VDZVNo03jjeNN1U2VTZeNo43jTeON483jzeMN403jDePN5A3kDeLN4w3izeQN5E3kTeKN4s3kjeRN5A3kDeTN5I3kzeQN483jzeUN5M3lTePN443jjeWN5U3ljeON142XjZfNpY3lzeWN182XzZoNpc3ljeXN5g3mDeVN5Y3lDeYN5k3mTeTN5Q3kzeZN5o3mjeSN5M3qzaaN5k3mTepNqs2qTaZN5g3mDenNqk2pzaYN5c3lzelNqc2pTaXN2g2aDZpNqU2kTeSN5s3kjeaN5w3nDebN5I3mzecN503nTeeN5s3nzebN543njegN583oTefN6A3nzehN4o3iTeKN6E3oTeiN4k3fTeJN6I3ojd7N303ezeiN6M3ozd5N3s3eTejN6Q3pDd3N3k3dzekN6U3pTd1N3c3pjelN6Q3pDenN6Y3pzekN6M3ozeoN6c3qDejN6I3ojehN6g3oDeoN6E3qDegN6k3qTenN6g3pzepN6o3qjemN6c3qzeqN6k3qTesN6s3rDepN6A3oDeeN6w3rTesN543njedN603rDetN643rjerN6w31jauN603rTfUNtY21DatN503nTfSNtQ20jadN5w3nDfQNtI20DacN5o3mjerNtA2qjerN683rzewN6o3pjeqN7A3sDexN6Y3pTemN7E3sTeyN6U3dTelN7I3sjdzN3U3czeyN7M3szdxN3M3cTezN7Q3tDdvN3E3bze0N7U3tTdtN283tje1N7Q3tDe3N7Y3tze0N7M3sze4N7c3uDezN7I3sjexN7g3uTe4N7E3sTewN7k3uDe5N7o3uje3N7g3tze6N7s3uze2N7c3vDe7N7o3uje9N7w3vTe6N7k3uTe+N703vje5N7A3sDevN743vze+N683rzfAN783wDevN6s3qzeuN8A3vje/N8E3wTe9N743vTfBN8I3wje8N703ADfCN8E3wTf+NgA3/jbBN783vzf8Nv42/Da/N8A3wDf6Nvw2+jbAN643rjfWNvo2uze8N8M3vDfCN8Q3xDfDN7w3wzfEN8U3xTfGN8M3xzfDN8Y3xjfIN8c3yTfHN8g3xzfJN7Y3tTe2N8k3yTfKN7U3bTe1N8o3yjdrN203azfKN8s3yzdpN2s3aTfLN8w3zDdnN2k3ZzfMN803zTdkN2c3zjfNN8w3zDfPN843zzfMN8s3yzfQN8830DfLN8o3yjfJN9A3yDfQN8k30DfIN9E30TfPN9A3zzfRN9I30jfON8830zfSN9E30TfUN9M31DfRN8g3yDfGN9Q31TfUN8Y3xjfFN9U31DfVN9Y31jfTN9Q3KjfWN9U31TcoNyo3KDfVN8U3xTcmNyg3JjfFN8Q3xDckNyY3JDfEN8I3wjcANyQ3WjfSN9M3zjfSN1o3WjddN843zjddN143XjfNN843ZDfNN1431jcqN1U3VTdWN9Y30zfWN1Y30zdZN1o3VjdZN9M3kTbXN9g32DedNpE2vzbZN9o32jfINr82ijeRN583mzefN5E36TbbN9w33DfyNuk2EzfdN9433jccNxM33zfgN+E34TfiN983tje7N8c3wzfHN7s3PTfjN+Q35DdFNz03RjdFN+U35TfmN0Y3DjbnNww26DcMNuc3DDboNwM25zfpN+g36jfoN+k36TfrN+o36DfqNwU2BTYDNug3CzYFNuo36jfsNws27DfqN+s36zftN+w37jfvN/A38DfxN+438jfwN+838DfyNyI2IjYkNvA38zfwNyQ2JDb0N/M37zf1N/I39jfyN/U39Tf3N/Y38jf2NyA2IDYiNvI3HjYgNvY39jf4Nx42+Df2N/c39zf5N/g3+jf4N/k3+Tf7N/o3+Df6Nxw2HDYeNvg3GjYcNvo3+jf8Nxo2/Df6N/s3+zf9N/w3Fzb8N/03/Tf+Nxc2/DcXNhg2GDYaNvw3FTYXNv43/jcWNhU27zXuNf83/zcAOO81ADj/NwE4ATgCOAA4AjgBOAM4AzgEOAI4BDgDOHI2cjZxNgQ4dzZyNgM4AzgFOHc2BTgDOAE4ATgGOAU4BjgBOP83/zcHOAY4Bzj/N+417jXwNQc4CDgHOPA18DX3NQg4BzgIOAk4CTgGOAc4BjgJOAo4CjgFOAY4BTgKOHk2eTZ3NgU4gTZ5Ngo4CjgLOIE2CzgKOAk4CTgMOAs4DDgJOAg4CDgNOAw4DTgIOPc19zX4NQ04DjgNOPg1+DX/NQ44DTgOOA84DzgMOA04DDgPOBA4EDgLOAw4CzgQOIM2gzaBNgs4izaDNhA4EDgROIs2ETgQOA84DzgSOBE4EjgPOA44DjgTOBI4EzgOOP81/zUANhM4FDgTOAA2ADYHNhQ4EzgUOBU4FTgSOBM4EjgVOBY4FjgROBI4ETgWOI02jTaLNhE4lTaNNhY4FjgXOJU2FzgWOBU4FTgYOBc4GDgVOBQ4FDgZOBg4GTgUOAc2BzYINhk4GjgZOAg2CDYbOBo4HDgYOBk4GTgdOBw4HjgXOBg4GDgfOB44IDiVNhc4FzghOCA4QDY/NiI4IjhCNkA2QjYiOCM4IzhENkI2RDYjOFE2WTZRNiM4IzgkOFk2JDgjOCI4IjglOCQ4JTgiOD82PzY+NiU4PTYlOD42JTg9NiY4JjgkOCU4JDgmOFs2WzZZNiQ4YzZbNiY4JjgnOGM2JzgmOD02PTY8Nic4KDgnODw2PDYpOCg4KTg8Njs2OzYqOCk4Kjg7NjY2NjY5Nio4JzgoOGU2ZTZjNic4cTZlNig4KDgEOHE2BDgoOCk4KTgCOAQ4AjgpOCo4KjgAOAI4ADgqODk2OTbvNQA4KzgsOC04LTguOCs4LzgrOC44LjgwOC84MTgvODA4MDgyODE4MzgxODI4Mjg0ODM4NTgzODQ4NDg2ODU4Nzg1ODY4Njg4ODc4OTg6ODs4Ozg8ODk4PTg+OD84QDhBOEI4QzhEOEU4RThGOEM4RzhIOEk4SThKOEc4SzhMOE04NDgyOE44TThPOEs4UDhROFI4UThQOFM4UjhUOFA4VThWOFc4VzhYOFU4WThaOFs4WzhcOFk4WThcOF04XTheOFk4OjhZOF44Xjg7ODo4Xzg4ODY4YDhaOFk4YThiOGM4ZDhWOFU4ZThmOGc4ZjhlOGg4aThIOEc4XThcOGo4ajhcOFs4ajhrOF04WzhsOGo4bThYOFc4VzhuOG04bzhUOFI4UjhwOG84cThPOE04TThyOHE4czhKOEk4STh0OHM4dThGOEU4RTh2OHU4dzh4OHk4ejh7OHw4czh0OH04fjh/OIA4gDiBOH44fzh+OII4gjiDOH84hDiFOIY4hziGOIU4gziCOIg4iDiJOIM4gziJOIo4iTiIOIs4iziMOIk4jDiLOI04jTiOOIw4jjiNOI84jziQOI44kTiSOJM4kziUOJE4ijiJOIw4lThvOHA4kjiROGs4azhqOJI4jjiQOJY4ajhsOJc4bThuOJg4mTiaOJs4nDidOJ44nzicOJ44njigOJ84oTifOKA4oDiiOKE4ozihOKI4ojikOKM4pTijOKQ4pjinOKg4qDinOKk4qjikOKI4ojirOKo4ojigOKw4rDirOKI4rTiqOKs4qziuOK04rziuOKs4qzisOK84TjgyODA4sDixOLI4sjizOLA4QThAOLQ4tDi1OEE4RThEOLY4tji3OEU4RTi3OLg4uDh2OEU4eDi5OLo4ujh5OHg4uzi8OL04vTi+OLs4sTiwOL84vzjAOLE4wTjCOMM4sTjAOMQ4wzjCOMU4wzjGOME4xzi9OLw4vDjIOMc4wTjGOMk4yTjKOME4yzjKOMk4zDjIOLw4zTjOOM84yTjQONE40DjJOMY40jjTONQ41DjVONI4xjjDONY41jjDONc40jjVONg41jjZOMY4xjjZONA4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A3/VviBGp74drRY/UW3FviBGp779hRY/EKXLviBGp74fahM/wQK9viBGp74wKxA/ER/FviBGp74kfQ4/f/m5viBGp74cswg/h8TCviBGp74cswg/wQK9viBGp74IOwE/ER/FviBGp74D6QI/UW3FviBGp75WwPU+EKXLviBGp74S+Ps+6yLSviBGp77oVe0+A3/VviBGp74WcvU+ExPhvso1lL5a1eI+ExPhvn19nL5a1eI+b93yvn19nL78cuY+b93yvso1lL78cuY+OAABv319nL7aePA+OAABv8o1lL7aePA+JwMGv3x9nL7cm/8+JwMGv8o1lL7cm/8+99EHv3x9nL4cswg/99EHv8o1lL4cswg/JwMGv3x9nL5KmBE/JwMGv8o1lL5KmBE/OAABv3x9nL67KRk/OAABv8o1lL67KRk/b93yvnx9nL6qLB4/b93yvso1lL6qLB4/ExPhvnx9nL6L+x8/ExPhvso1lL6L+x8/t0jPvnx9nL6qLB4/t0jPvso1lL66LB4/sZECvyBGp74IOwE/JwMGv3x9nL7cm/8+OAABv319nL7aePA++Lj8viBGp75WwPU+b93yvn19nL78cuY+OwPwviBGp77oVe0+ExPhvn19nL5a1eI+ExPhviBGp76mTOo+OwPwviBGp75Fuxo/b93yvnx9nL6qLB4/OAABv3x9nL67KRk/+Lj8viBGp779hRY/ExPhviBGp77mPxw/ExPhvnx9nL6L+x8/6yLSviBGp75Fuxo/t0jPvnx9nL6qLB4/t0jPvn19nL78cuY+t0jPvso1lL78cuY+t0jPvn19nL78cuY+1SXAvso1lL7aePA+1SXAvn19nL7aePA++h+2vso1lL7cm/8++h+2vn19nL7cm/8+NYKyvso1lL4cswg/NYKyvn19nL4cswg/+h+2vso1lL5KmBE/+h+2vn19nL5KmBE/1SXAvso1lL67KRk/1SXAvn19nL67KRk/t0jPvso1lL66LB4/t0jPvnx9nL6qLB4/UW3FviBGp779hRY/1SXAvn19nL67KRk/t0jPvnx9nL6qLB4/6yLSviBGp75Fuxo/wQK9viBGp74wKxA/+h+2vn19nL5KmBE/f/m5viBGp74cswg/NYKyvn19nL4cswg/wQK9viBGp74IOwE/+h+2vn19nL7cm/8+UW3FviBGp75WwPU+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41LwPn99nL6qLB4/41LwPsw1lL6qLB4/h4jePn99nL6L+x8/h4jePsw1lL6L+x8/K77MPn99nL6qLB4/K77MPsw1lL66LB4/6HX/PoB9nL7aePA+470EP4B9nL7cm/8+bUwBPyJGp74IOwE/DtECPyJGp74cswg/s4wGP4B9nL4cswg/470EP4B9nL5KmBE/bUwBPyJGp74wKxA/aC76PiJGp779hRY/6HX/PoB9nL67KRk/41LwPn99nL6qLB4/r3jtPiJGp75Fuxo/h4jePiJGp77mPxw/h4jePn99nL6L+x8/K77MPn99nL6qLB4/X5jPPiJGp75Fuxo/aC76PiJGp75WwPU+41LwPoB9nL78cuY+r3jtPiJGp77oVe0+h4jePoB9nL5a1eI+h4jePiJGp76mTOo+K77MPoB9nL78cuY+K77MPoB9nL78cuY+K77MPsw1lL78cuY+SZu9Psw1lL7aePA+SZu9PoB9nL7aePA+apWzPsw1lL7cm/8+apWzPn99nL7cm/8+qfevPsw1lL4cswg/qfevPn99nL4cswg/apWzPsw1lL5KmBE/apWzPn99nL5KmBE/SZu9Psw1lL67KRk/SZu9Pn99nL67KRk/K77MPsw1lL66LB4/K77MPn99nL6qLB4/K77MPn99nL6qLB4/SZu9Pn99nL67KRk/xeLCPiJGp779hRY/X5jPPiJGp75Fuxo/apWzPn99nL5KmBE/NXi6PiJGp74wKxA/8263PiJGp74cswg/qfevPn99nL4cswg/apWzPn99nL7cm/8+NXi6PiJGp74IOwE/xeLCPiJGp75WwPU+SZu9PoB9nL7aePA+X5jPPiJGp77oVe0+h4jePga0g776hNw+f7zyPga0g74soOA+f7zyPj53kL4soOA+h4jePjh3kL76hNw+bfYBPzh3kL7oAew+bfYBPwC0g77oAew+S6cHPzh3kL5AMv0+S6cHPwC0g75AMv0+5LQJPz53kL4cswg/5LQJPwa0g74cswg/S6cHPzh3kL4YzRI/S6cHPwC0g74YzRI/bfYBPzh3kL40ZRs/bfYBPwC0g740ZRs/f7zyPj53kL4jFiE/f7zyPgC0g74jFiE/h4jePj53kL68IyM/h4jePgC0g768IyM/jFTKPjh3kL4jFiE/sFTKPgC0g74jFiE/NSS5Pj53kL40ZRs/jFTKPjh3kL4jFiE/sFTKPgC0g74jFiE/ViS5Pga0g75FZRs/eMKtPjh3kL4IzRI/esKtPgC0g74YzRI/R6epPjh3kL4cswg/R6epPgC0g74cswg/eMKtPjh3kL5AMv0+esKtPgC0g75iMv0+VCS5Pjh3kL7oAew+ViS5Pga0g77oAew+rlTKPj53kL4soOA+sFTKPga0g74soOA+h4jePn/mW75a1eI+41LwPoDmW778cuY+41LwPvjqf778cuY+h4jePvjqf75a1eI+6HX/Pvjqf77aePA+6HX/PmXmW77aePA+470EPwTrf77cm/8+470EP4DmW77cm/8+s4wGPwTrf74cswg/s4wGP3/mW74cswg/470EPwTrf75KmBE/470EP2TmW75KmBE/6HX/Pvjqf767KRk/6HX/Pn7mW767KRk/41LwPvbqf76qLB4/41LwPn7mW766LB4/h4jePvbqf76L+x8/h4jePn7mW76L+x8/K77MPgTrf766LB4/K77MPmTmW766LB4/SZu9Pvbqf767KRk/K77MPgTrf766LB4/K77MPmTmW766LB4/SZu9Pn7mW77MKRk/bJWzPvbqf75KmBE/bJWzPmTmW75KmBE/qfevPvbqf74cswg/qfevPmTmW74cswg/bJWzPvbqf77cm/8+bJWzPnLmW77cm/8+SZu9PgTrf77aePA+SZu9PmTmW77aePA+K77MPgTrf778cuY+K77MPn/mW778cuY+h4jePsG1Ur6mQ98+ELDxPs+1Ur4yKOM+ELDxPiimV74yKOM+h4jePjWmV76mQ98++/0APyimV77M8u0++/0AP8+1Ur7M8u0+SGMGPzamV76wPv4+SGMGP8K1Ur6wPv4+nlUIPzWmV74cswg/nlUIP861Ur4cswg/SGMGPyimV77QRhI/SGMGP+O1Ur7QRhI/+/0APyemV77TbBo/+/0AP861Ur7TbBo/ELDxPjSmV74g0h8/ELDxPs61Ur4g0h8/h4jePjSmV75lxCE/h4jePsC1Ur5lxCE/H2HLPiamV74g0h8/H2HLPs61Ur4g0h8/GhW7PiamV77TbBo/H2HLPiamV74g0h8/H2HLPs61Ur4g0h8/GhW7PsC1Ur7TbBo/oUqwPiamV77hRhI/oUqwPs61Ur7hRhI/9WWsPjSmV74cswg/9WWsPs61Ur4cswg/oUqwPiemV76wPv4+oUqwPs61Ur6wPv4+GhW7PiemV77M8u0+GhW7Ps61Ur7M8u0+H2HLPiimV74yKOM+H2HLPuO1Ur4yKOM+h4jePsw1lL5a1eI+h4jePjh3kL76hNw+f7zyPj53kL4soOA+41LwPsw1lL78cuY+bfYBPzh3kL7oAew+6HX/Psw1lL7aePA+S6cHPzh3kL5AMv0+470EP8w1lL7cm/8+5LQJPz53kL4cswg/s4wGP8w1lL4cswg/S6cHPzh3kL4YzRI/470EP8w1lL5KmBE/bfYBPzh3kL40ZRs/6HX/Psw1lL67KRk/f7zyPj53kL4jFiE/41LwPsw1lL6qLB4/h4jePj53kL68IyM/h4jePsw1lL6L+x8/jFTKPjh3kL4jFiE/K77MPsw1lL66LB4/K77MPsw1lL66LB4/jFTKPjh3kL4jFiE/NSS5Pj53kL40ZRs/SZu9Psw1lL67KRk/eMKtPjh3kL4IzRI/apWzPsw1lL5KmBE/R6epPjh3kL4cswg/qfevPsw1lL4cswg/eMKtPjh3kL5AMv0+apWzPsw1lL7cm/8+VCS5Pjh3kL7oAew+SZu9Psw1lL7aePA+rlTKPj53kL4soOA+K77MPsw1lL78cuY+6HX/Pvjqf77aePA+bfYBPwC0g77oAew+f7zyPga0g74soOA+41LwPvjqf778cuY+h4jePga0g776hNw+h4jePvjqf75a1eI+sFTKPga0g74soOA+K77MPgTrf778cuY+ViS5Pga0g77oAew+SZu9PgTrf77aePA+esKtPgC0g75iMv0+bJWzPvbqf77cm/8+R6epPgC0g74cswg/qfevPvbqf74cswg/esKtPgC0g74YzRI/bJWzPvbqf75KmBE/ViS5Pga0g75FZRs/SZu9Pvbqf767KRk/sFTKPgC0g74jFiE/K77MPgTrf766LB4/K77MPgTrf766LB4/sFTKPgC0g74jFiE/h4jePgC0g768IyM/h4jePvbqf76L+x8/f7zyPgC0g74jFiE/41LwPvbqf76qLB4/bfYBPwC0g740ZRs/6HX/Pvjqf767KRk/S6cHPwC0g74YzRI/470EPwTrf75KmBE/5LQJPwa0g74cswg/s4wGPwTrf74cswg/S6cHPwC0g75AMv0+470EPwTrf77cm/8+h4jePn/mW75a1eI+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z0nnPkmBpD6qD1U/NjEbPgldhD7oOXQ/NjEbPgldhD7oOXQ/z0nnPkmBpD6qD1U/XMktvvdHez9owbM9XMktvvdHez9owbM9XMktvvdHez9owbM9XMktvvdHez9nsbM9XMktvvdHez9owbM9XNEtvvdHez9owbM9XMktvvdHez9nobM9XMEtvvdHez9owbM9XMktvvdHez9owbM9XMktvvdHez9owbM9XOEtvvdFez9o4bM9XMktvvdHez9owbM9XMktvvdHez9owbM9XMktvvdHez9nsbM9XMktvvdHez9owbM9XNEtvvdHez9owbM9XMktvvdHez9owbM9XMktvvdHez9owbM9XNEtvvdHez9nsbM9XMktvvdHez9nsbM9pYFSvvwBfrv1hXq/FgkLPszBZT36N32/n4XPPh1RDj7PTWe/YV2wPiT5ET7biW2/DvsGP1OxKT6rV1W/C2MFvx4Rj720w1m/jMVFvxIhCb4+4x6/3AFuv4LZQL5E/aG+84V5v8gJZL4owZO84tdwv+uhdb7qKXU+r3VXv/Q5er7tjfY+X10vv+OJcb5hczA/xvnivq9xV76+DV8/4AHwvU+ZJ772wXo/y5FlPqlx1L3wD3g/FCUKPzWBGr2vTVc/h6VDPzIBmTxKBSU/rgFXP1GhKD0Viwo/XNEtPvdHe79owbO9XMktPvdHe79owbO9XMktPvdHe79nsbO9XMktPvdHe79nsbO9XMktPvdHe79nsbO9XMktPvdHe79nsbO9XMktPvdHe79owbO9XMktPvdHe79owbO9XMEtPvdHe79owbO9XMEtPvdHe79owbO9XNktPvdFe79nsbO9XNktPvdFe79nsbO9XMktPvdHe79nsbO9XMktPvdHe79owbO9XNEtPvdHe79o0bO9XMktPvdHe79o0bO9XNEtPvdHe79owbO9XNEtPvdFe79o0bO9XMktPvdHe79nsbO9XMktPvdHe79owbO9XMktPvdHe79nobO9XMktPvdHe79nobO9XMktPvdHe79nsbO9XMktPvdHe79nsbO9XMktPvdHe79o0bO9XMktPvdHe79o0bO9XMktPvdHe79owbO9XMktPvdHe79owbO9XNEtPvdHe79owbO9XNEtPvdHe79owbO9XMktPvdHe79owbO9XMktPvdHe79o0bO9XMktvvdHez9nsbM9XMktvvdHez9nsbM9XMktvvdHez9o0bM9XMktvvdHez9o0bM9XMktvvdHez9nobM9XMktvvdHez9nobM9XMktvvdHez9owbM9XNEtvvdHez9o0bM9XMktvvdHez9owbM9XMEtvvdHez9owbM9XMktvvdHez9owbM9XMktvvdHez9owbM9XMEtvvdHez9o0bM9W7ktvvdHez9o0bM9W7ktvvdHez9owbM9W7ktvvdHez9owbM9XMktvvdHez9owbM9XMktvvdHez9owbM9XNEtvvdHez9owbM9XNEtvvdHez9owbM9XMktvvdHez9owbM9XNEtvvdHez9owbM9XMktvvdHez9nsbM9XMktvvdHez9nsbM9XMktvvdHez9owbM9XMktvvdHez9owbM9XMktvvdHez9o0bM9XMktvvdHez9o0bM9XMktvvdHez9o0bM9XMktvvdHez9owbM9XMktvvdHez9owbM9XMktvvdHez9owbM9XNEtvvdHez9owbM9XNEtvvdHez9nsbM9XMktvvdHez9owbM9XMktvvdHez9owbM9+iH9vfzzfb+WQcs86MFzPfwxfr+jcdE9IsEQvf7Zfr9nkbM9IhkRvvoxfb9NoSa93hHvvfmlfL/HseO9E48Jv17xLr/6Bf2+GuUMv1g7LL/6If2+EtcIv1+DL7/6/fy+DN0Fv2TbMb/61fy+UW0ov1ZBq71/lz+/bgU3vzA5GL5e5S6/VOUpv9G5aL5tbza/O38dv49xR76HjUO/Pg8fv4gBRLuRk0i/K50Vv2bhsr2dhU6/G4kNv4ThQb2q9VS/C10FvyDxj720xVm/MaGYPntTPb81exo/XV2uPm91N784zRs/NBmaPnrzPL81lRo/C1mFPoQVQr8yBxk/Z6GzPu4x973buW0/piHTPpl5TL7Hi2M/dAm6PujRc77Nk2Y/RYWiPkJBIb7fYW8/RamiPs4BZ7zls3I/Js2SPkIhIb3qCXU/7NF1PiQhEr3xV3g/uVFcPprBTL3zq3k/1XFqvx7hDj2a2cw+04NpvxoBjTukydE+0adovzVhGj2pudQ+xstivz2hnj3UIeo+xuNivzwxnj3Uxek+z6Nnv1QBKju09dk+z4Fnv0ABoLq1gdo+z1NnvzYBG7y2Ods+aOkzPveJez/uIXc9aOkzPveJez/uAXc9VBEqPvj3ez/sIXY9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XMktvvdHe79owbO9XMktvvdHe79owbO9XMktvvdHe79nobO9XMktvvdHe79nsbO9XMktvvdHe79nsbO9XMktvvdHe79owbO9XMktvvdHe79owbO9XMEtvvdHe79owbO9XMEtvvdHe79owbO9XOEtvvdFe79nsbO9XOEtvvdFe79nsbO9XNEtvvdHe79nsbO9XMktvvdHe79nsbO9XNEtvvdHe79owbO9XNEtvvdHe79owbO9XMktvvdHe79owbO9XMktvvdHe79o0bO9XMktvvdHe79nobO9XMktvvdHe79owbO9XMktvvdHe79nsbO9XMEtvvdHe79nobO9XMktvvdHe79nsbO9XMktvvdHe79nsbO9XMktvvdHe79o0bO9XMktvvdHe79o0bO9XMktvvdHe79owbO9XMktvvdHe79owbO9XNEtvvdHe79owbO9XNEtvvdHe79nsbO9XMktvvdHe79owbO9XNEtvvdHe79o0bO9XMktPvdHez9o0bM9XMktPvdHez9nsbM9XMktPvdHez9nsbM9XMktPvdHez9o0bM9XMktPvdHez9nobM9XMktPvdHez9nobM9XMktPvdHez9owbM9XMktPvdHez9owbM9XMktPvdHez9owbM9XMEtPvdHez9owbM9XMktPvdHez9owbM9XMktPvdHez9owbM9XMEtPvdHez9o0bM9W7ktPvdHez9o0bM9W7EtPvdHez9owbM9W7EtPvdHez9owbM9XMktPvdHez9owbM9XMktPvdHez9owbM9XNEtPvdHez9owbM9XNEtPvdHez9owbM9XNEtPvdHez9owbM9XNEtPvdFez9owbM9XMktPvdHez9nsbM9XMktPvdHez9nsbM9XMktPvdHez9nsbM9XMktPvdHez9owbM9XMktPvdHez9o0bM9XMktPvdHez9o0bM9XMktPvdHez9o0bM9XMktPvdHez9owbM9XMktPvdHez9owbM9XMktPvdHez9owbM9XNEtPvdHez9owbM9XNEtPvdHez9nsbM9XNEtPvdHez9owbM9XMktPvdHez9o0bM9+iH9Pfzzfb+WQcs83hHvPfmlfL/HseO9IhkRPvoxfb9NoSa9IsEQPf7Zfr9nkbM96MFzvfwxfr+jcdE9EtcIP1+DL7/6/fy+GuUMP1g7LL/6If2+E48JP17vLr/6Bf2+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AAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAD+f78AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAD+f78AAACAAAAAAAD+f78AAACAAAAAAAAAgL8AAACAAAAAAAAAgL8AAACAAAAAAAD+f78AAACAiO3DvgABALjZgWy/iO3DvgABgLjZgWy/AAAAAAAAAAAAAIC/AAAAAAAAAAAA/n+/agM1vwAAAABqBTW/agM1vwAAAABqBTW/2YFsvwAAAACI7cO+2YFsvwAAAACI7cO+AACAvwAAAAAAAACAAACAvwAAAAAAAACA2YFsvwAAAACI7cM+2YFsvwAAAACI7cM+agM1vwAAAABqAzU/agM1vwAAAABqAzU/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/iOnDPgAAAADZgWw/iOnDPgAAAADZg2w/iOnDPgAAAADZgWw/agM1PwAAAABqAzU/agM1PwAAAABqAzU/iOnDPgAAAADZg2w/2YFsPwAAAACI6cM+2YFsPwAAAACI6cM+AACAPwAAAAAAAACAAACAPwAAAAAAAACA2YFsPwAAAACI7cO+2YFsPwAAAACI7cO+agM1PwAAAABqAzW/agM1PwAAAABqBTW/iO3DPgABgLjZgWy/iO3DPgABgLjZgWy/iO3DvgAAAADZgWy/iO3DvgAAAADZgWy/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/agM1vwAAAABqAzW/agM1vwAAAABqAzW/2YFsvwAAAACI7cO+2YFsvwAAAACI7cO+AACAvwAAAAAAAACAAACAvwAAAAAAAACA2YFsvwAAAACI7cM+2YFsvwAAAACI7cM+agM1vwAAAABqAzU/agM1vwAAAABqAzU/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/AAAAAAAAAAAAAIA/AAAAAAAAAAAA/n8/iO3DPgAAAADZgWw/iO3DPgAAAADZgWw/iO3DPgAAAADZgWw/agU1PwAAAABqAzU/agM1PwAAAABqBTU/iO3DPgAAAADZgWw/2YFsPwAAAACI7cM+2YFsPwAAAACI7cM+AACAPwAAAAAAAACAAP5/PwAAAAAAAACA2YFsPwAAAACI7cO+2YFsPwAAAACI7cO+agM1PwAAAABqAzW/agM1PwAAAABqAzW/iO3DPgAAAADZgWy/iO3DPgAAAADZgWy/iO3DvgAAAADZgWy/iO3DvgAAAADZgWy/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/agM1vwAAAABqAzW/agM1vwAAAABqAzW/2YFsvwAAAACI7cO+2YFsvwAAAACI7cO+AACAvwAAAAAAAACAAACAvwAAAAAAAACA2YFsvwAAAACI7cM+2YFsvwAAAACI7cM+agM1vwAAAABqAzU/agM1vwAAAABqAzU/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/iOnDPgAAAADZgWw/iO3DPgAAAADZgWw/iOnDPgAAAADZgWw/agM1PwAAAABqAzU/agM1PwAAAABqBTU/iO3DPgAAAADZgWw/2YFsPwAAAACI7cM+2YFsPwAAAACI7cM+AP5/PwAAAAAAAACAAACAPwAAAAAAAACA2YFsPwAAAACI7cO+2YFsPwAAAACI7cO+agM1PwAAAABqAzW/agM1PwAAAABqAzW/iO3DPgAAAADZgWy/iO3DPgAAAADZgWy/AAAAAAAAAAAA/n+/AAAAAAAAAAAAAIC/iO3DvgAAAADZgWy/iO3DvgAAAADZgWy/agM1vwAAAABqBTW/agM1vwAAAABqBTW/2YFsvwAAAACI7cO+2YFsvwAAAACI7cO+AACAvwAAAAAAAACAAP5/vwAAAAAAAACA2YNsvwAAAACI6cM+2YNsvwAAAACI6cM+agM1vwAAAABqAzU/agM1vwAAAABqAzU/iOnDvgAAAADZgWw/iOnDvgAAAADZgWw/AAAAAAABgDkAAIA/AAAAAAABgDkA/n8/iOnDPgAAAADZgWw/iOnDPgAAAADZgWw/iOnDPgAAAADZgWw/agM1PwAAAABqAzU/agM1PwAAAABqAzU/iOnDPgAAAADZgWw/2YNsP8ABYDmI6cM+2YFsPwABgDmI7cM+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agM1PwAAAABqBTW/2YFsPwAAAACI7cO+2YFsPwAAAACI7cO+AACAPwAAAAAAAACAAACAPwAAAAAAAACA2YFsPwAAAACI7cM+2YFsPwAAAACI7cM+agM1PwAAAABqAzU/agM1PwAAAABqAzU/iO3DPgAAAADZgWw/iO3DPgAAAADZgWw/AAAAAAAAAAAA/n8/AAAAAAAAAAAAAIA/iOnDvgAAAADZgWw/iOnDvgAAAADZg2w/iOnDvgAAAADZgWw/iOnDvgAAAADZg2w/agM1vwAAAABqAzU/agM1vwAAAABqAzU/2YFsvwAAAACI6cM+2YFsvwAAAACI6cM+AACAvwAAAAAAAACAAACAvwAAAAAAAACA2YFsvwAAAACI7cO+2YFsvwAAAACI7cO+agM1vwAAAABqAzW/agM1vwAAAABqAzW/iO3DvgABgLjZgWy/iO3DvgABgLjZgWy/iO3DPgAAAADZgWy/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/iO3DPgAAAADZgWy/agM1PwAAAABqAzW/agM1PwAAAABqAzW/2YFsPwAAAACI7cO+2YFsPwAAAACI7cO+AACAPwAAAAAAAACAAACAPwAAAAAAAACA2YFsPwAAAACI7cM+2YFsPwAAAACI7cM+agM1PwAAAABqAzU/agM1PwAAAABqAzU/iO3DPgAAAADZgWw/iO3DPgAAAADZgWw/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/agM1vwAAAABqBTU/agU1vwAAAABqAzU/2YFsvwAAAACI7cM+2YFsvwAAAACI7cM+AACAvwAAAAAAAACAAP5/vwAAAAAAAACA2YFsvwAAAACI7cO+2YFsvwAAAACI7cO+agM1vwAAAABqAzW/agM1vwAAAABqAzW/iO3DvgAAAADZgWy/iO3DvgAAAADZgWy/iO3DPgAAAADZgWy/AAAAAAAAAAAAAIC/AAAAAAAAAAAAAIC/iO3DPgAAAADZgWy/agM1PwAAAABqAzW/agM1PwAAAABqAzW/2YFsPwAAAACI7cO+2YFsPwAAAACI7cO+AACAPwAAAAAAAACAAACAPwAAAAAAAACA2YFsPwAAAACI7cM+2YFsPwAAAACI6cM+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iO3DPgAAAADZgWw/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/agM1vwAAAABqAzU/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/agM1vwAAAABqBTU/2YFsvwAAAACI7cM+2YFsvwAAAACI7cM+AP5/vwAAAAAAAACAAP5/vwAAAAAAAACA2YFsvwAAAACI7cO+2YFsvwAAAACI7cO+agM1vwAAAABqAzW/agM1vwAAAABqAzW/iO3DvgAAAADZgWy/iO3DvgAAAADZgWy/AAAAAAAAAAAAAIC/iO3DPgAAAADZgWy/iO3DPgAAAADZgWy/AAAAAAAAAAAAAIC/agM1PwAAAABqAzW/agM1PwAAAABqAzW/2YFsPwAAAACI7cO+2YFsPwAAAACI7cO+AACAPwAAAAAAAACAAACAPwAAAAAAAACA2YFsPwAAAACI7cM+2YFsPwAAAACI7cM+agM1PwAAAABqAzU/agM1PwAAAABqAzU/iO3DPgAAAADZgWw/iO3DPgAAAADZgWw/AAAAAAAAAAAA/n8/AAAAAAAAAAAAAIA/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/agM1vwAAAABqAzU/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/agM1vwAAAABqAzU/2YFsvwAAAACI7cM+2YFsvwAAAACI7cM+AACAvwAAAAAAAACAAACAvwAAAAAAAACA2YFsvwAAAACI7cO+2YFsvwAAAACI7cO+agM1vwAAAABqAzW/agM1vwAAAABqAzW/iO3DvgAAAADZgWy/iO3DvgAAAADZgWy/AAAAAAAAAAAAAIC/iO3DPgAAAADZgWy/iO3DPgAAAADZgWy/AAAAAAAAAAAAAIC/agM1PwAAAABqAzW/agM1PwAAAABqAzW/2YFsPwAAAACI7cO+2YFsPwAAAACI7cO+AACAPwAAAAAAAACAAACAPwAAAAAAAACA2YFsPwAAAACI7cM+2YFsPwAAAACI7cM+agM1PwAAAABqAzU/agM1PwAAAABqAzU/iO3DPgAAAADZgWw/iO3DPgAAAADZgWw/AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/iO3DvgAAAADZgWw/iO3DvgAAAADZgWw/agM1vwAAAABqAzU/iO3DvgAAAADZgWw/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\"\r\n        }\r\n    ],\r\n    \"images\" : [\r\n        {\r\n            \"uri\" : \"data:image/jpeg;base64,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\"\r\n        },\r\n        {\r\n            \"uri\" : \"data:image/jpeg;base64,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UZ90Phl1EwYurKzuAqZ08s+CwIyPzr/r3fJ4y1PzzPVnws26xG2+2lJUAK6AzVW222222ywefyBFKgcLcjH4232222y22/223+LJmIxUNcMDzMbHMBs1kkklV7qHRZz6gJh8inbo5KJirR/0BfFU0txPG/rSdSxP/mlLC/jbHneAtk3bHm26GqsWS+VFeY2222222/cFVJ0MY9PVNA3G28W222222+WyG221JzUifQrpFe4Hi8llkkkhlLVji0JalFrS5KvAJk10CijKFDPK98hNkP5tBpP1nVroXGyGUHq+SeIjFW2wMgSyLBLD2322222225T97ymU/LUiQHG225222+222yW2w0iD10UV4tnNnWNft4Okkkkg5NmydH73Yj31DWFynOv88WTNvFHN33LNhHqeQSh3ACod4dSIUkK81WCmjW2526PH48hiG2+22222273VpHD2d+VWWr222I222yW22y+f3/SONcqMJ5lKCFON4MkkkkkkhB0l6HYV6vP8ikZGFYPzpz2OXQCWR1oG+L7k19K5HrlJ1F420gGVEhguZW2sG6qG29M722623G2222BzZib0hQn4KyW23G2222m220WW23zBeqEL6rwBUD5mAEkkkkrmkA324FGrUCEWveiY0keu1H7i5pACO+jQvsKwdz+Ks7RBFyfeXSZ8VLUfrW3VeU7Q4M3iG28W+22227NUMAB+v9jkL22222222fQ3m2n/AJ9vnkeUf4MmREIoC+TKRNJJDvCYHJuIGRz9CBELbkR36EyZyDpK8kb/AGLQDIWe9tnbXeO7NGasu4M4qHctbbcJJqsb6PCbbhbjbbbfC0k8YBC2lC6lbbbbbbbaZ7tbZcc7x3Awww4xfcdzChmgpATGqSKautSXejEzrSwQZ2RAg/O2W0PV+hPKL8jmg4m3GSnaWg7wemoNnOfiH0NtbbbcvIfg/wBJ22x222223KXAcH82825YWW2232bW2TCSWWg82+8uFN1L9rhYlteDMkRJYAQCAsPJhymLZJdN0EHpgEtCFPU65cv5sNdD1FcYA7zM3ySfKPSENEXmTGdKLW231MTW+/8ApS1vxttptt9nFKMvtttuk/DNtvjMFt22C+8xcx+DTcTl90mICaSn/TJIBLbgQ3sUm5eJzcB0or7gDKcUlyq5pSQXwhNW1STshTkrrfUldFY9aK6l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\"\r\n        },\r\n        {\r\n            \"uri\" : \"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAUDBAQEAwUEBAQFBQUGBwwIBwcHBw8LCwkMEQ8SEhEPERETFhwXExQaFRERGCEYGh0dHx8fExciJCIeJBweHx7/2wBDAQUFBQcGBw4ICA4eFBEUHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh7/wAARCAgACAADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD4yooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApRSU4dKAG0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAPxzWp4g0TU9BngtdWt/s889vHcpEzAuqONylgD8pIIODg4IOOa6v4XaTp1nbXfjzxHEX0nSZFjtrfHF9eEEpDnptAG5z2GB/EK5DxDq2o67rN3rGsXcl3fXcplnmfq7H9AOwA4AwBwMUjNVHKbS2W/r2+XX1RmUUUUzQKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAfmgitbww2qNqq2WjWn2u8v0azSDyRK0nmDbhQQfmOeCORX15p/wCyloJ+GC6XqV55Hi3aZm1CNyYUkI4hKngxjgEgA5yR6UkrmFXEwpW5up8V8Uciul8feC/EXgfWH0jxHp01ncLyhIzHKv8AeRhwQfb8cHiuaNM2jJSV4sSiiigYUUUUAFFFFABRRRQAUUUUAFFFFADh61veCPDt74p8R22kWfymTLzTEZWCJQWeRv8AZVQT+GOpFYioWYKqkknAA6mvR/EwXwB4QPhWB5I/EmtRpNrjqQDaW4y0dn65OVd+R0Qc4NIyqzatGO72/wA/l+dkZHxN8RWWpXVnoOgGZPDuixtb2AlPzTMzFpJ2A43OxJ9lCjtXF9qd6fL+tNNBcIKCshKKKKZQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBasLy5sbyG8sriS3uIXDxSxsVZGByCCOQQa+yPgJ+0XZeKVsPCHjaQWOskLFbak3MN44GFEmfuOTgZ5BPoSAfi6lBIOQSDQm07owxGGp4iDhNbn6W/E/wN4c8X+CbzTvG7eVZ2qG4W83ASWQRSTIrkcDGSQRgjjFfnFr8GnW2tXtvpN7JfWEczLb3DxeW0qA8MVycEjtmuw1f4uePdT8BL4Hv9bmuNKSRTlyfOZAOImfOTGDg4PcDnHFT6FfeH/GmmWXhrX5NK8O6nZQeVp2sLAIopgMYhutoA9cSkZB+9kHNOU+Z3scuFw8sHDlu2l5307+fy6d7Hm4waO9bPi3w7q3hbWZdI1q0a2uo8HBIZXUjKurDIZSOQQSDWN1FSegmpK6EooopjCiiigAooooAKKKKAF60GgdK6n4ceF/+Ek1iQ3kj2ujafEbvVbxcfuLdeuM8F2OEUc5ZgMUEykoq7N34e2UHhXQ3+I2sWjzPHKYNAtmwFuLvB/fNnJMcXDcDl9gzjNcJqV9dalfT319M891cOZJpXOWdickmt74i+Kn8U60k0NsLHS7OIW2m2SsSttAv3Vz3J6k9yTXMHikZ0oO7nLd/gui/z8/kMooopmwUUUUAFFFFABRRRQAUUUUAFFFFAC9aDR711vw08L23iPVp5NVu2sNE06E3OpXSjLJEP4E4IMjnhQep9gaCZzUFzMg1bww+l+ENK12+uxFc6o7ta2RjO4wKdvnFs8AtkAY5wT0rmsV0Xj/xLc+K/E1zq80YhhciO0tV+5aQLxHEgAAAVQB05xnqTXOUhU+blvLf+tPkJRRRTLCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD0Dwd4z0ptGTwp44019T0RSfsl1CcXmmE5JMLHgoW5MZ4PJGDWX458Fap4Y+z3jFL/Rb75tP1W3+a3uV54BH3XGOUOGBByK5X3rq/A3jG48PifTL2H+0/D18y/wBo6XK5CTgHhlP8EgHRxyPccUjFwcG5Q+a7+nZ/g+vc5XHPSkru/GvhHS/sZ8R+Bbu71fw/tBuUljxc6YxPEdwBkAHs4+U4IzkEVwn4UGkJqSuhtFFFMoKKKKACiiigDR0PTL/V9WtNL0y3e5vLuVYYIkHLuxwAPzrtPiHqdhoukR/D/wAPyRy21tKJdWvopC6392Bg7SOPKQkhQOvU5JGLVuq/Dbwn9pkWH/hL9dtSIF37n0yykXG/A+7NKrcc5VDngmvMmx0Hakc6/fSUui283380unS+vYbRRRTOgKKKKACiiigAooooAdSV0ei+ENb1jw5qOu6ZbpdWunEfa0jkUyxof+Whjzu2DoWAwO9c6c9qRKnGTaT23G0UUUygooooAsWltPd3UVpbRNLPM4SNF5LMTgAe5Nd/8RrqPwtodv8ADnTLqKVoXFzr88SjE14ekO7qUhXC44G8ucdKd4EMfgrwzL48uTENXuy9n4egdNzI4A827IPACBgqk5yzEgfIa89uJpZ55J5pGklkYs7scliTkknvSMLe0nrsvxf+S/P0IKKKKZuFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAb/gvxXrfhDWBqmhXrW0xTZKpG6OeM9Y5FPDoe6kEVb0zRtU8batqt1o9nYQzpG959ghdULrnLJBGTl8DJ2rkgA+lcsCO9WLK5uLK7hu7SZ4LiCQSRSI2GRwQQQR0IIzmlYhx15luQspViGyCKAOOleotfaT8VcQX0em6H4zP+rvciC11Y/wB2QcLHMez8BicHBINcBr+jaroGqXGla1YXGn31u22WCdNrKe34Ecgjgg5FAqdS75ZKz7fqu6/p2MqiiimaDhwR7V3/AMPdJ03StJm8e+I4La5sbV2i03TpskajdAcBgMZhQkFzkZHAOTXAHriui8ZeKb7xLLZCeK3tLTT7VLazs7dSsUKADJAJySzZYkkkkmkZ1FKVorbq/Lt8/wArmbr+rahrusXer6rctdX15M008rADczHJOAAAPQAAAYAAAArOzQetHWmWlbQSiiigYUUUUAFFFFABRRRQB6x4DvbLxEbC30W507wh4v063ENpOreXbawBx5c2TtWUjAyflfJBGSDU3iPwtZ+LtQuLTRfDz+G/G1oWOoaAzbYrnA5a23cq/wDEYskEHKk4xXkn059a9J8L+MNG1mxs9E8bie3uLQBNL8R2hIurEZ+VJMf62IHoD8yj7pA4pHHVpSg+eD1Xz+TXVeW66PoeeXVtPaXMlvdQyQTRNtkjkUqykcYIPINQEYPNe0eKtK/ti5j0nx9J9g8UzxhtJ8QrhrPWIjjZ5rKMHjAEoyeQHHGa8r8R6Fq3h7U5dL1rT5rG9iPzRyjBx6jsQexHB7UG1Ksp+69H27+a7r8Vs0mZeOK6r4b+GofEWtudTufsWi6fEbvVLs/8soFIBA9XYlUUd2Ydq52xtbi8u4bS0hee4ncRxRoMs7E4AHqTmu/+Il5beFtAj+HWjXsN0yS+frt3AMLc3I4WEN1aOLnB6EknHAoCrJ6Qju/wXV/5eZz3xD8Uz+K9d+2GGO1sreMW1haRrhLa3X7iAfiST3JJrmO1HFHWmaRioRUY9BKKKKCgooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAd/OvRvDfizQtf0yLw78RPtTJBGItN1yEGS4sFHRHXrLCCc7c5Xnb1xXnWOeBSZ/OkTOCktTf8X+FtX8L3UUWpW/+j3KebZ3kfzQXcR6SROOGU8e46EAggYAHTjOa7bwT44fTdO/4RfxFHLqvhO4mD3FlkGS3OeZbdj9yQZJ4IDdDwc1yN79m+1S/Y/M+zbz5Xm43bc8ZxxnGM4pCg5Xakvn3/4JVoooqiwooooAKKKKACiiigAooooAKKKKACiiigDtvBnjBLPTz4X8Tpcap4VmkEj2iviS1k5/fW5OdkgycjowJBBBru9cW2l0e1sfEmoXfiDwJI3laP4nit91zpjnBEUo6kDOGiY9OUI4B8Q5HI4r1H4EXV9p02r6nfapJZ+Ebe3B1u3aISx3yHIW3CH5TI54DHBXk5GKmxyYinFLn7fffuuz/B7NdS9NocHwj05/ELavY6jr2oREeHJbXLLFA2Q19zgq2MqgIyG+YfdBryN2Lks2ST1JPNbfjfxLe+Kdfn1i+WOISAJBbxLiO2iUYSJAOiqoAA9vWsI4IHpQa0ISirz1k9/8vl+d2MoooqjYKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA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ZlI+5IOocDI9xkVpeKvBtvc6dN4q8D/a9Q8PIdtxHIoNzprY+7MBnK+kg4OMHB4rhRgjkc1seFvEeseF9WTU9EvpbS4UbWK/dkU9UdTwynuCCKRjOm03OG/4P18/Pf1Rn2N3dafeQXtlcS211C4eOWJyrowPBBHQ16NHe+H/AIk2jDXb8aR43JOy/kT/AEXVeBtWXH+qmPQPjaeMkHmkk0Hwj45j/tPQ9b0zwvqrHN7pWpyNHbkk/ftpQD8v+wwBGeCQM1XX4XPnB8e+BRubaG/tlTg5A5AG7v6djSuRKcJrVuLX3r9Gn9z/ACh+G+j6lZfEU+E9WtZrGfUYZ9MuIJ02kNJGQhIOOA/luOcHaOcVwdxG8UrJIpV1JDA9QRwRX0h4NEck+jweNvHvgu9TR7iKfTNVi1IPd2hRgRE4YKZISAQQclc5B4xXLeLPBGm6Z448QeNtdNvdeDRdvd6abe5BXWDIxMcMTAk4zy56oFIOCRQZxxFpvm7La9m7u1rpatdOnexzvhe2i8AaBB4z1SBX1+/Rv+EdtXI/cryrXsi88DOIwRgsC3ROfPr25uby7mu7yeSe4mcvLJI2WdjySSepNafi/wAQ6h4o1241fUXXzZiAkacJCijCxoOygYAH9c1iY7ZpnRSg170t3v5dkvJfi7sbRRRTNQooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAHDn6V6T4Z0jTvBWlWnjPxXaRXV9coZdD0WdDifqFuJhxiEHkKf8AWEY+7k1F4T0DTfDuiReNfGdmLmGTnR9Idtrag4P+skHUW47njecAcEmuR8Ua7qviTWrnWdau5Lu9uWzI7/wjsqjoFA4AGAAAB0pGEm6rcYv3Vu+/kv1fyXW0Ov6tf65q91q2q3L3N7dymWaV+rseT9B6AcAcDis6ig+9BskkrISiiimMKKKKACiiigAooooAKKKKACiiigBe9HFHatvwd4d1HxTrtvo+mRhpZTl3P3IYxy8jnoqKASSewpCk1FXbLnw+8Lt4k1Kb7XeJpuj2Mf2jU79xlbeHIHA/idiQqr1JI7ZIm+IviweI7y2tNPthYaDpkZg0yyU8RoTku3rI5GWPc4HQCtD4h+JNPXTofBXhOeb/AIR+yffNMw2tqVx/FM4H8IxhFJOBk9Sa4Ogxpxc2qkvku3n6v8FpvcbRRRTNwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAHH26V2Pw+g8MW8V74h8TTpcx6eUFrpCk77+ZgxUMQRthXblyDnBAHJBrjjmk/GkTOPMrGz4r8Q6n4n1eTVdWnEs74VVRQkcSDhURRgKgHAAGAKxulHSjrTGkkrISiiigYUUUUAFFFFABRRRQAUUUUAWbGKOe7iimuFt43YK0rKSEB7kDmu58S+E9Pl0+0vNGuYWuJ3htbeCJTtvHPylkLHIOcEg9Nw6VwAHPPNdH4H1XQLC9lh8T6LJqunXMRhLQzmO4tMkHzYTyu4Y6MCCMg4zmkYVoTupRb06K2v9f8NqZGr6bf6TqM+m6nZz2d5A2yaCZCjo3oQeRVPsK9v1/TdNv9Gtj411C4vtKuAE0LxjbJ5nlKM/6NdoPm4445ZTnG4HjyzxV4Y1jw5qaWGo2xDTKHtZY/niuozjbJEw4dTkYI+hAIICCjXVTyf4P09Oqeq6ozdJsLzVNRt9OsLeS5urmQRQxIPmdycAD8a7/xpd2XgnQpfA2hXMU2p3O0+ItSgc/OwORZxkYHlKcFyM7nA6BMGWQxfC3R3gjkgm8a6jAFlOwk6LA6kMgJOBO4YZIGUXgHLHHmJJJz1zTEr1pc32Vt5vv6Lp3eu1hlFFFM6AooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA9L0DQ9N8R+EPI02zjW4gkQSuuDOrk4yScFt5IVVA2KASSCTnjfEugap4ev2s9UtWgkBIBxlXx1KnoRnjIqnpt/d6bdpd2M8kE6dHQ4PIwR9MZrq7u917x9ObHTNKiluI42vLiOBVM1zIFHmSgkbmJAJ2DOOcDAACORRqUqjd04avXdfPscSfegqc8iu/13wTZX3h+TxP4Pvje21uudS0yX5bzTjnBLL1eLP8AGBxnnBzXAgj1wO1B0U5xmroZRRRTLCiiigDqfA/i688M3E0L28ep6NeYW/0u4Y+Tcr+HKuOoccggdRkH17WNfsfhx4Pt5tNub67l1WMXXh7R9ZgV5NBYkhrndzkkE+XgAHO4jIGfPPBekaf4c0eLx14otorlC5XRdJmB/wCJhKMZlcAgiBCck/xEBeRmuP8AEWr6hr2r3Or6rcNcXly++R2P5ADsAMAAcAClfoccqUatW8dlv5tbfd1fy11tVvrq5vrya8vLiW4uJnLyyyMWd2JySSeST61Vop1M7BtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQApq3pd/eaZfwX+n3U1pd27iSKaJirow6EEcg1U60YoE1c9g0DxFD411a21JtUsPDPjy0YNb37II7XVCP4ZiBtSUjI3EbHBw2OpZ4h8MQ+NtVu7XStCt/DXjWzBN9oe8JFfMOrWwJwHxgmMHBBBXIzXkZ4HWvR9E8Y6Xruj2/h/xvEwkt12aZr8AP2mxOflWTH+thBxx95RnBPApX7nFUoSpPmp7L716LqvLddH0PP7y3ntLmW0uoHgnicpJHIuGRgcEEHkEdMGoc85xXtXivR4b37PpHxEKadr00eNK8VQyedZ6oo4Xz3GcjoPN6gEbwAM15T4l0PVfDuqSaZrVhPY3cfJSVcbgejKehU9QRwR0JoN6NdVF5/g/Nd1+K6pGWfWu78CeGdOi00+M/GCzL4et5NttbIQsmqzg/6mMnogxl3AOBgDkgiv8AD3wrZajb3HiXxLdGw8Nae4WdxkS3cpBIt4R3cgAk9FBBPUA5/j7xVc+LNXS6a2gsLK2iFvYWEAxFaQDoi+pySSTySSe+KAlJzlyR0tu+3kvP8l52IfG3ibUfFmtyarqLqCVEcMKDEdvEPuxIOgUDgD6k8k1gdqOKOtM1jFQSjFaISiiigoKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOz8FeL4NPt/7C8UWU2teGpSS9n5xSS2cjHnQNzscemMMOCOhHpdjYWmoeGp7fXNY/t34aWMZmsdXcql/p7jpaIrHO8nAMfKEYYEcCvL/APhB/EUtzfX16uk6Dp6eZqGpSIWSIdkUDl5GPCqOSSOg5pfH3iyLW/s2k6PZDS/DunbksLFTljk8yyn+OVupPQdBgAClfQ4qtJTqWg7Pd9l5rtL06bp6EfxA8Wy+JLu2trWFrDQ9NTydM04PlLdOMk8DdI5G53IySfQADlaB60UHXCCgrISiiimUFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAD+MZPWup8A+D7jxNcXN1cXUemaJYKJdS1KYfJbpnoBxvkPRUHJJA4GSE8A+EZ/Et1NcXNwNN0OwTzdS1ORSY7ZADgAfxSMRhUHJJHQZIs+P/ABdDrEFv4f0CzXTfDGnsTaW5UCSdsYM87D70rDrzgA4AAySjGc3J8kN+r7f8Hsvm/NfiB4wi1mO20HQbeXTPDGncWdmzAtK/8U8xGN0rHJJ6AHAwBzxhHNKCfrQcdqDSFONOPLEZRRRTKCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigB/Jrq/h94RbxHPcXt/eJpOg6eA+o6lKpKQqTwigffkbnag5OCegJGBpC2D6jbrqs08VmXHnvAgaQJ32gkAn0ya6Px74xGuW9roukWbaT4c08k2dgH3FnPBmlYAb5T3OOBwMAUjKo5t8sdO77end/lu+w/x74wj1i2ttA0Gz/snwzYMTbWgcs8znAM8x/jkOB7AcDuTxp6nmjk55pCc+9BcIKCshKMCjrWkNG1NtK/tUWU32Lfs87b8uenHqM8Z6Z4pjbS3MyiiigYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQA45yea9F+GvjuPS57HS9ZhifT4mREmVFEkQ84SHJIOVyWyBg4Y89q86Io5yOKEzKtRhWg4TWhu+M10pdXxpLIYwg84xsWj8zJzsJAJGMckDnOABgDBpaQUi4R5YpCUUUUygooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFFFGK7HwJ4CvvFenXl7bXkFutu2xQ6kl3xnHHQYxzz16UpSUVdibSONop8qNHI0bfeUkH6g0ymMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKv6bq+p6dHNHYahc2qTDbKsUhXePfFUKKLAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRTtp2FvQgfz/wptABRRRQAU9FJUsO1NNXdNjLrICPlIHJ6A5FTJ2VxN2RSzS0+aGSI4dSM9D2NRCqTuMU0qKWOACSewptaNjGqIZ5AOP0/wD1/wCetTKXKrik7IzyKSnyO0jl25JOTTKoYUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUuKAEpTQBzzVmKAbWaTKgf5/yKTdhN2GFCttkjqwx9MGltI1ll8tuNwIU+h/r6Uk8wc4UbUHQVGjMjBlOCDkH0pK9mGth00TxOVcEc8e9M79a1LfUY2BjuolZT3A4J9SP6jBqzHZWJlilUkwnrz8oIGTnv74/Cs3VcNJIhz5d0UtN057kq7gpESeT3x1x7DjNSXl6kSiC0G0KTlhz+X6896bqmpGf9zANkIPOOC3pn2HYVm55ojBzfNP7v8wUW9X9xp2+pgjZdxh1PBIHJHuOh+vB96f9itblC1tKFb+71/Q8/wCe9ZHenKWU5XrTdKzvF2G4W2di7HYOZmSRlAQZOOSR7f8A16bezqYhDF0zliP89P8AAU4yyywNI0h3FNpyeSARx+R/SqHWnFOTvLoCu3d9BKKKK0LCiiigB1FFFADaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAClBIOR1pKKALCyAr1wR0Pbr+lMnlLueoXPC56U1MZ5z0P544of7xx07UrK4rK4yiiimMX3rV0IFllTAIyM5HY5Gf1FZXatPw+xW5cL1KcD6EH+lZV/gZnVV4szXG1iDSGrOpJsvJV9HNVu1aJ3SZad1cSiiimMv2SiSArkg5IHpyDj9QPzqifvVo6XGXR2ZCUVlJPpz0z9M/lVW8t5baYpIpBzwSODWcWuZozi1zNFeiiitDQKUU+KNpDhRT5VVFCZyQeeKTavYVyKinALnluP1pGOT7UxjKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKU47ZpKACiiigCSIgSLuGRnkUsw5BHcf/Wq7Y2o4nnbagIIB4z05PtU0ElhODFPhTuOGIwOfcdBnnkGsnUSeiuZuWtzIoFbFxokgy9tIJF6gHg4/kazJYJon2SRurehGKqFSM/hZSmpbEdb3hvTZ5XNywZIwpxxy3B6CpND0QEfatQ+SMDcFJxnr1PYcH3puua6ZlFtZ5jiUY3Dgkew7D29zXNUquq3TpfN9F/mZTk5vlj95Y1LQpLrbc20ilnXJUkYJHBwRwRkGueu7S4tX2TxMp9x1qSw1K7snDQykAHO3sfwrdt/EVvPGItQtwQSOQMj64/woXt6PTmX4iXtIabo5bmtXSdIlu/3r5SAHk9z7D/GtyHSNMmK3ULFourDdwOMnJ6jvWXrOsmbdb2g2Q55I4JH9B04o+sSrPlpK3dvp/wAEftHPSKJNUv4LVDaWKocdWHIHTp6n39zUMOsJIojvIgy4wSoH5kH/AOtWJzRzWqw0FGz18+pfso2sbMljaXKh7SUKT1Gc8/TqKrJps3mfvAFQdSDnPsP88d6oqxU5BxWqJpZ9KdmJLD5d3cgEcGiSnTVr3W2u6E+aPXQqzzoiiODt/F/X6+/5VSzQaMVsopGiVhKKKKYwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApyAE4Jx6dqbRQBKIieV5GcVZgjjhxJN94H7v+e/+FV7ZiJV7gnBHqKW7J83B7KMfkKhpt2Jd27Drq5ebgnC5zj39arjrRig1SSWiGkkWrK9uLR90LkDrt7flXS6FqKajIsE8KiRRlTgEY+h6dT0rkOprW8LPs1VBz82Rx9K58VSjKm5W1sZVYJpu2o/xLfzz3j25JSONioXPXB6n3rG7ZrW8VxmPWZ8jG5t35jP9aye2K0oW9nHl2sVSSUVYSiiitTQ6jwawe3u4Ceqgj26j+tc5cLtmZfQ1t+DHC30iHo8ZB/Dn+lZmsx+VqUy4/iNctPTETXdJmEdKjRSooorqNxTWrpId7O4jXkYJxj2P+H6Vld63NEtpY1aR/lDgEA98HOf8+tY12owuZ1HZGHmjrWhd6bLGSY8SDPQdf8/SqBBBweK0jNSV0XGSaugptOqRYyQGbgH/ADmm3YdxmPlpKUtycAAelJTAbRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFADgSGBHUVa1AHepI6g/zNVkVnbCgk1pzWjzQIAwDL0z0PAHXt079aznJRauRKSTVzKzSVPPbSw/6yMqM9e1QVaaexSdx3b3q9om4alCUBOHHSoLK0mu5xFCpYnr7V00KWehWolkIlnbIGDzx6eg7Z6kHtWFeqorkSu3sjKrNJcvVkHjSzlNylzGhaPYAWHQEcYPp0rmSCDz1rp4PFMnmnz4I2Q/3eCB/I/iOas/ZdG1UMYWEUmMgYwR26dD+Fc9KrOhBRqx07rX7zOE3TSUlocdUkMUkzhI1LMTwBWzd+HLqKUCMrKhPBXg49TnpWrFFZaDbiR23zsOw5zz09B05781vPFQt7mrey/rYt1lb3dWRaRYRaTGLy7kCuQeP7vHT3P6c0TLpOrOdrlJT0zwT9R0P4flXP6pqE99NvkOFHCqOgHoKpglTkHBqFhpy9+UrS8vyJVJv3m9TYvtBu4AWi2zL/ALPX8qyvLkEnl7DvzjGOav2WsXlvhSwkjBHyv/Q9R+Fakd7FdMLlIwJACG4G4nBPX3IPOM1ftKtNWkk13/zKcpw+JXKttYQ2URuLwruGML6H6dz046daoalfvdttGUiHRc/zqPULyW8mLyHAB+VR0A9BVUVdOm7809X+XoXGL3luWYLyeHgNuXurcg1ZN1bXBUTptYdW6/r1/PNZpoq5U4t3KcUy8IYo2LkllAz0BA7Aj157ce9VZpS/HRc8CrUflvZE5O8KwAHfBByfwJ/KqJoitdRR3EoooqywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFFPVCwz27k9KFPY5wamlVoB5eVJOckdsEj+n60mxNj3kEG5EGW6c449f8A9VVvNcPvDnd655pnWjFCikCSRqWeqMmEuEEi4wSOpH8j+NWfsmn3sRkgbYwPIA5x/uk/XofyrDqzppVbyMMcKx2njoDx/Wsp0kryi7MzlCybjozda9g0m2jS2QNMRu5AOe4Lfzwex5rnbmeS4lMkrFmPcmrOrLiVGz95B+eMH9RVGijTjFc3V9QpRSV+rACno7owZGII6EUzNHWtjWx0mh6jPOpgnPmqg3Dd1GDzg/QmsvW5JJL6QyMWIYgZ9Kf4ddlv1AOC2QPxBpPECgXzsBgNzj6jNcsYqNd2XQ5lFKqZlFFFdR0iitPRiDuUtt5U59OcZ/WsztV3SjiSRfVDj8Of6VnVV4szqq8WVZVKSsp4IOKYelWdRXbeSYOQTkH2PNVh0q07q5cXdCUUUUxmhYmNoGSQHO75TjgZUjn8Qv61Q/irR05WiBd4twO0qOnQ5/IjI/Gq8ttIGJUbhk49azUkpMhNJsq0UUVoWFFKBxntQetACUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAL3qzcxssStuLZOT7ZAP68j8DVbvVpkQ2u4OC2AxX05I/wP40nuJ7lSiiimMXtT4XKSqwGcHOKZUltBJcSrHEpZieAKTtbUTL+tKgCsmdoZhz9cj9CKzMV0Vzpz3MWAVVhggnoSQM/TkZyeDmsa9sbi1YrLGwweuOKxoVItct9TKlNWs3qVulGaDU9pbS3MqxxIWZjgAVs2krs1bSJdLZhexkA/eFaPiO3l3rLtJAG0sOhIOP5Yq9BBaaPbmWZlaY42kde/TP4c+oqtb+IfnYS26iMk8JxgH2Oc1xOpOpP2lON0tPX0OZtylzRWxzpBU8iiuomtdM1FC9u4R+uBweuOR/UEj2FZ1xoV4km2NRKPVew9SOoHv0reOJg9JaPzNI1ovfRmUiM7bVBJNbtjp6WsP2i8fbngjH3Qf5nBOB7VLBBbaTEs0x3ykH/Dj9RnsRWPqGoTXbjecKOijoKlylWdo6R7/wCQm3U0WxpCGwv0+RysoHHY8eueD+H5VQu9MuIOUHmrjOV6j61RyQeKu22pXEG0bt6g8BucfT0quScPhd12ZXLKOzuUsHOK0Le0SJfOuccDIU/p9e/HtzVyCeGZHmEI3LycjJAwT19+ecVk3U8k75Y8DoPSmpSm7Wt3BNy02H3ly03AyFH6+5qKKd0GAcqex6VEKDzWqikrGiikrFlpY5WzICDjk5ySf8+v50woAoJOe+COCPr9eKhFSrnyjzwP/rUrW2Fa2wx2yTjpnv1NMooqigooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoopwUkjPQ0ACqScCrAMaDaW46cDqM5z/Lj/JhLYGFJxnNMzSauJq5cazDAGFweO5498f8A18Gq8kUkZw6lfqKbFI8bbkYqfar0F+v3J1yhPJAH8jwf0qffj5k+8vMr2drJcuVQcDkk9AK12nt9LiCQgPMy/Nz1z6+g6HHqOajv7r7KgSCNYy4PQEBR0yO+ff2FYrMzHJOT3rJJ1tZaLsSlz6vYsfbbnzjMJXD9Mg9vT6Vq2uvsQVu494YYJXH8ulYJo4rSdGE1ZoqVOMlZo6RrHTr7DwSCNjnIHQc9weR+BIp881rpFs0Ma75Wx94YJGO/oOeg79aw9Kl8u+ibPG4Zq74oBF8j5B3IDkfTH9K5nTftFCTbW/3GLg+ZRb0M68upbqVpZnLMTkk1AKMUCu1JJWR0JJDldlbKkg10Hh2+lmka3mbcAhK56jA9fTGfzrnu1WNPuntJxMihjgjB6dMf1rKtTVSDVtehFSHNF23JNYd2vZN5JIYjmqQ6VLdStPM0r4DMcnAqI9KuCtFIqKsrCUUUVRRf025SDeJOQQO3fP8AhkfjVI/ezSc0YpcqTb7kqKTbEoooplBRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFO429abS9qAEooooAKKKKAL+o3KTxxAfeUc8Y7D+oJ/GqIoxSVMYqKshRikrIKKKKoYoJHenO7ucuxY+5zTKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAFA/KnAZOBQMY5qQFUHBBP+f0qWyWxDGoHJqM4zx0pWYnrTTTSfUaT6gaBSqCeAMmpLiF4GCyDBIzj05p31C5DRRRQMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBaVEZ2CqMk9KQCtywtlhTezDdgEseij/PSoqVFBXJnJRQWVotum98bwMliOFH+PoKzdSnSafMYwqjAJ6nnOf1qXUb3zv3cWRGD+Z9TVDrUU4S+OW5MIu92JRRRWxoFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFF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g47CtbV/CPhLSI0fT/CmmYbTJ7tTMrSnzIhE5HzE8FHYYrGf4gW9xPdpHoGszyRSK06CMZXfaGJgRknkgH6DnFZer/FI/Z7G1bQJ1ltbZ7eT7RLt3B4BE3AGRyAfwxXP9Rxsldp282/811Of35O17/Py9Tv76OHT4dVj06xsLVrdtQSIwWqKR5axzRHIGchCR7g1xPx7u9Q/4Rq+aG+uEWy8TSIvlyFcQzQLIi8Y4ByAO1c3e/FXxBL5pt9M0xRKSWLF3JJgELdx1AB+oFVb3xRdeIPAXie11kE6nNdWU9qIIDsdYlKNkjIBCAEk9adLA1aM1UlFbrz6/Pua06XK02l0POZWeQN5kkkhIOS7kk/ma9K+No+3eF/hxr2wf6VoAtWbHVonK/yNebEMM5BH1FTT315Pa21nPeTTW1oCLeJ3JSEE5IUdsnrivU6p9juIMsCCpww5B9D2P507xmiSXVvqsS4TUIRIwHRZAAHH5jP40RANKgbdtZgDtAJweOAeM1veJNGEOl3GlxStObZRfQuyhTsOVlAx9EP4GkpqM4/1p/w9hKSjNf1p/wAPYybBh4i0b+z2wdUsULWrEnM8Q5MXuRyR7ZHYVzFT2dxPa3UdxbSNFNGwZHXqpHQit3xLbwX9qviOyjVEmfZeRDpDMR1A/ut1HocjtXQn7OVuj28n29H+fqbpckvJ/g+3z6edzmaKKK2NR3GfUUq8EE/yzQME+lbd74cvorf7XZSRanaKOZrRi4QZ/jU4ZP8AgQAPbNNRctiZTjHdmIzckjIB9TUkVxInAOR71CRSVLSY7I0Vezn4ceUf73X+X+FWFs7a3jNw7F1XBHHBJ7e//wBasg9a1WXzdDDDOUPP5/8A16xqR5bWbs2ZyVrWZUv717puflQdFH8z71UooraMVFWRoklohKKKKYwooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAHr14o56Vq6Rod7qSm4XZb2aHEt1MdsUfsT3PsMk9gak1KXRLe0ay06J72Yn576bKA4PSNB0HuxJPoOlXyaXen9dP6sZ+0XNyrV/l/Xbcw6KKKg0CiilAoAefl4z071u+DII/t8up3ABttOj+0yBhkMwOEQ/Vyo+mawh94YHPpXcReHtbk8IQ2mm6ZdTfaB9uvp0Q+XFGMiMO3QADcxyR1FRUTl7kVq9P8zKtNRjZu19P8zlJFvtTmurzy5bhi3mTyKhIGT1PpzXYHQZ7uxs0SWOBLGwWSTeCWLOWcgAd8YH5UzwYtp4d1hLi91WK4inU291Z2yeb50TYBQnIAPQjBOCBXpY0+ztvE82l20QVbqNDbXFxJvE6AYXABUAggqQMnKkHpW7wkqvKotJ9vuS0XldeTPOxmM9m7RWiV07fJ7228lseV6do9xeMBbW890cZPlISB9SBx+JrXh8N/ZwWvLuysSeSm8SSH8Ezj8SK7Dxdp7G2b+yr1rqC1QtcxpICFGfv7VwABkDHJ55rkPYV0yw0KLs1d/h+H+ZywxMq8bp2Xbr+O33FmKDRIcBbe4vnJALTsUT8FUgn8TW9401bUjqKML1wJIUBePAYgDAUuOTgADkmuYoqHfmUk7Wvsu/nv8AiDpptN6+uv8AwPwK1tJIuqXjeY+5gjE7jknHr361rJq2oqnl/bpnjHRJSHUfQNkD8Kx4zjVph/egB/IgVbopyaTs+r/M0nFO110Rckvo5hi50zT5z/e8nY35qQfyxVzS9Q0e0hu4jpVxH9pQKfJuMge4DDPfpurHpRkkAdTwM05WmrSSa9EZ+zVrK6+b/wAy9b+F4tQtnuNOuLx44jiQy2u4KcdCVPH5Giw8CXV5qlvYmeyCykGVhJsaOMcs+xwpIABPAOcV2WkmbSbyHTLS0eKSIiO4aWHcpfPzOJQQoX0JOABmuc8QamkGjalqqJ5U+uSva2yFQDHbAgyEgADJyiZxz8/cGumrRowgpSV2t+39XsjnpV685uMXo9tm9fu6Xf3HI+INKvP7Wurqx0a4tbIzFrdEBcImflBIzzjHJrP0y+ltdTguLmR2RTslDkn92eGH5EnHtW14I0i+17xJp2iWEksUl3MELISAi9WcgdgoJP0r6i+K0Xhfw54Gub2/0LTb9rWBba0+1W6u7uRtQFsZJ7kg9ATXnxwUa8ZTvZa72fra1jtqYr2UlTavddNH2W99z4m1ywfTdUuLJzu8pyFPZl6gj6gg/jVnwzqcenXTx3SGWxuk8m6iHUp6j/aBwQfUY6E11WuXdpeaVaX9zo1ncupNtOyl42BXBUjB6FT+lYZh8NzKSbXUbJ/VJVmUfgQpH5ms401Up2bv0e61X9XR6Ea/NG04v8P87+ZjatbQ2t/NBBdJdRK3ySp0ZeoPscdR2qlXRto2kS/Nb67Gh7JcW7p+ozTZPC+oPzZSWd8Ov7i5Qsf+AEhv0q/ZTVlb+vkaRr07au3roc/jvVqwvbmxnW4s7mW3mX7rxsVYfiKsXeh6vaqWn026iUDJJjOAPc1m+1S04vU1UozWjTR0a65Yajtj1/S0lbB/0q0xDN9SANjduoHHekPhtr1RLoN7Fqq4LGFV8u4QD1jJ5+qFgB1xXPA4PFOV2R1dSVYHIIPIrT2ifxK/5/8ABM/ZcvwO3l0+7p8hZY5IpDHKjIw6hhgj61raePM0WdCcgbsDOPQ/0qzH4lmuI1ttbs4tXhHAaUlZgPaQfN785/LitWLS7NdFl1HS7iXyGnSCaG4wHhZ0YjDDhwQh5wCOAR3rDEQvG8Nba+em/wDX4GdSq0rSVnfS2q/zXzXzOG4o4rZudAuUBaBhMoHbg/lWVNDLE22RGUjsRShUhP4Xc6FNPYjo606GNpXCICxPAxXR6b4b8xQ127J/sggH261NWtCkryYpzUdzms0Yq5q9p9jv5rcEMEbgg54IBH44NU81qnzK6KTuJRRRQMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAHfjR+NH4VuaFosd1Yz6vf3QtdOt5BEzKu6SSQgkIq+pAJycAY604xcnZEykoq7Mqxs7q+uUtrOCSeZzhY413MfoK3jY6ToX/IUlTUb9cEWdvJmJD/ANNJBkE/7KZ7gkHiob/xAVtpNO0S3/s2xkULJtbdLOP9t+pH+yMD2rAx3zWl4x21ffp/Xr9xmlOfxaLt1+/p8vvNPXNYvdUkUXLqkUfEUES7Yoh6Ko4FZo6VPZWd1ez+VaW0txIeQkSFj+QrXi8M3aLu1O5tNNT0nlBk/wC/a5f8xSUZzd7Nlc1OlpovL/gGD2zTkUyOFRSzHoAMmuiit/D1qg/c3WpyjrubyYvyHzn8xUv9uXUKeXYxWmmpjH+jRDf+Ltl/1pqlbd/dqZuvf4V9+n/BKFr4a1WZFmmijsoD/wAtbmQRj8AeT+ANWItM0K25utRmv5B/yztISqfi74P5KarzyyTSF5pHlYnJZ2JP5mmjirSiun3/AOWxm5Tlu/u0/F3/AENWx1e2spojaaRbW6IwZnZRLKRnnDOCAe3Ar7B+F3i3TPiH4JEptYEQqbW+sQvyKcYI2jjaQQR7HHavir3rt/gX47fwP4tiuZpGOl3mIL5B2XPDgeoJJ+hrooVeSWuz08jixeG9rByitV6691/kT+NfAc3g74mxaKymSxeYXFnI3SWDJIBPqMEH3Bqz4R1SfWbeXSxO8epW8sl7pcqnDkklpYQfcDevoVYdXr6M+LvhSLxV4aN9p6pPqNjBJPYSoc+aHQgqD6EEEe496+QbSW4s7iKeF3guLdw6MOGRwcg+xBH6VhWi6FfmS0aX53f3aNfIxpT+tU3d6r/g6/PZ/M74+ILNLo3H2O6aMOXFlJIot85zsYAAsvbBwcDtWDJBLHHE8kTxpKu+MspAcZxkZ6jI611Wm6jayTW3iBFEdjqBMN5CsYdYLoDOCp42uPmH0b0rS8WWI1aU2SSF9TiyZhLGF2OBgoXUBQoAwBjr3rudN1oOSd2tl3v/AJrp6nEqqo1FFqye7vtb/J9fQ4AdKSl/Aj2IwRSVxneVGGNWQ/3rcj8iTVuqk/GqWp9Y3H6E1bqIbv1/yLl09P8AMDzWp4d0gapLMJLj7NDEo3TFcqhJ4yOuOucZI9DWXXoOl6fP4c0qz1ASwWEzjdI90hJDnOAhAyvynGCOueSMV14elzyu1ot/6/4Jx4qs6cUk9Xov61/JnO3Wg3sdzZaWmqJdT3cgjijidmiAPck8YA5OBwAfSud8c6jBf600VmSbCxjFpae6JnLH3ZiznHdz611mt6uIbDUddikkww/szShIQWUkAzOCOoAJweoMie9cDo2nXOq6naaXZRmS4u5lhjUdySAP51hipLm5Idf+GX3u7+42wsXy+0qdF6eb+5WX3nun7JnhTC3/AItuY+WzaWmR+MjD8cD8/WsX9qnxZ/aXiK38M2subbSxvnAPBnYdD/urgexJ9a9n1GfTfhr8OiYgpg0m0CR9jNKeB+LOc+wPtXx1f3dxfXs97dSGS4uJDLK57sTkn8zV4j9zRVJbvf8AX73+Rnhk61Z1Xstv0+5fmWNKUXMV5prcm5j3xcdJU5GPqMj8a54jnB4Na1vNJbTxXERw8Th1+oOcU3xPbLBqjSRDEFyBcQ46bW5x+ByPwrhpu02u+vzW/wCFvuPTi7O3cy6QgHggH2IpaK6TQsWuoXtsALe8uIQOgWQgD8M4q8Nc1CcYuHgvMDH+lW6SHHoGI3D8DWTRSvJKyZLjFu9lc2beGHUNwPhe3lEYy8ltM8YUE4yckjrxzUN5o2ipMIJV1PTpiA2G8udcHocgrgfnUGm6pc2EheLYzEYy4yR9Pf8AlVjUry6v41vbmQO4UIuFGSATySOpz3Pt6Ck5rlV0m/RW/CzJ/eKWj09X+t0Mi0SwVP8AR9cs2YjOJleJiPQZBx2rZsdB1afwLr0EUMd2UuLWSMWsqSnALqThSSPvdwK5U5YksSSeTmui8MDzPCviuH+7bQSj8LhBn8iaqlCDk21q0+r7Pvciu5xine+q3Xmu1u5zXmazpXE8M8Sg/clQgfTmr8GuWlyojv7cY6DAz/PpWna3E914E8QwzTSzCCS2kQSPu25cg4znHB7Vw49Ca5MRhKTaa6q/Z7tfodNNqrzKSs07fgn+p2nl6dplqb+KHcCBt5zyfr0FczqWqXN7OZHcgdlB4H0rclXz/Ci/7IyM98Mc/wA65XnNcWEgm5Slq02rsqjFO7erEYljliST3JpKKK7jpCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAfnt+ddj4Z06+1TwBrlvZ2sk7x31pIAq9AVmBJPQAcfnTPAcUDWevXj28E89rZrLbmVA4Q7wCdpBB4PcGtbSNRvdR8IeKIbu6lmWNLaVULYVcOwOFHAHzDoK66FNaNvdPT5P/ACODFVnrGK2cdX5tdPn3ObTw7bwDOp6vb257xwqZpPyBAH4mrenxaKl1FBZ6U15NK4jWS9m+QZIAPloB692NZagAYAAHoKWN3SRZEdldSGVlOCCDkEHsQanRNWX6/n/kN88k7t/kvw1/E6bxEmqWVlg6kEhLhBb28RjQjBycjjAwOCc8/WuXGOcDr6d6f5jldplcqeSNxIJ9cUlOUuZ3RNODgrPf0sFFFFBYUUUUAFIenTPGKWigD6f/AGT/ABzLqXh+XwxqchaewwLKRm5kiOSY/cqRx7EDtXI/tM+BRoWujxJp8IXT9TcmZVHEU/U/QN1Hvurzfw5qV3oFhpWp6fKYrxL1rmNgcZCAAA+xywP1r6ysLnR/il8PCXCm31GIxzIOTbTj09CDgj2PvWlKSxNOUJbpu3y2/VM8eunh63tYrRvX9f8ANHyt4J1W3s7ybTtRk2aXqSiG5Y8+S2cpOB6q2CfVSw713emald6JaXcV9fqbmyk8iS3nBdFTA2yIFB3A8gknA4PcV5t4n0W98Pa5e6NqEZW4tJDG3GA46hh7EEEfWur8OatPqGimWNwdT0mDy5VYAi6ssjIIPUoccf3QT2owlZ024vRq9v1Xy3Xz8i8ZRjVipLVO1/0fz2fy8yHxDazSXFzfraTRxCQLMWhKKkh5wASSM9eTyc1k9667XfFlje2MlmlpcXHmgeZNMFDEjpjrgDt39+a5D8c1dZQUrxd7k4Z1HC01a35FS94vbFvdx+YFW6q6hxNZN6TAfn/+qrVc0d3/AF0Op7L+upp+HNJn1W5lSAKTBEZiGQsGIIwpABxk+vGAa6OUX+mRyJ5NjPPdRLb2qQyOC8sgwQFyQdgJGSAMkEdMVy2lareaY5ezkWNiQSxUE/nWvFrNwLa98UXiwLLaRi2tPKiCB7hwQCQAASqh3Jx2Azkiu2lOEIaN369rf8N+Njgq06k6mqTj073/AOH/AAuc/wDEC7iOpRaPaSiSz0iP7MjL0lkyTLJ+Lk49go7V6N+yl4VN9rt34ouY8w6ephtiRwZWHJH0Ukf8C9RXjEMUs8yRRK0ksrBVUAksScAD1JJr7B0C0svhj8Mk+1bB/Z1sbi5II/eznkgepLEKPXA9a5sNF1arqPZa/wCX3I6MVJUqSpLd/wBP72eWftYeLftOp2fhK0fMVpi5u8HrKRhFP0Uk/VvavEKs61qV1q+qXeqXrl7m7maaRic8k5wPYdB9KrVzVpupNy6dPQ6qFJUqaj16+oVavE+2eH9wIMmnybcHqYnOR+TZ/OtHwP4Q13xjqg03QrJrhxgyyniOAHu7dB9Op7V9DR/B3wj4S+HesxaxqVu19e2phfUrkhUik6osYPQbgPUn9K4cRiqdFpN3d1ovxv8AK/mXOai13Pkqin3EUkE8kEqlXRirA9iDTK9NNNXRsFFFFUMKuoQ2lso6rySewBz/AFqlVy0INlOh9CT78DH8qyqbJ+aJZtaZ8OPHWpW0V1Y+D9XuIJ1DxyLBhXB6EEkZBrpNM+HfjPw94Y8U6hrvhu706zbTCvmSsuNwkVgMAk9vSuYh+IfjaCzhsoPF+rw20CCOKKOcqEUdAMdhWr4R8Ra9q8+sWeqa5qN/FNpN1+7uLl3XIhYg4JxkEV0UuXmS66/kzKtz8jbtZWfW+jRieG18zw94phPObOKQf8BkB/rXFZ5rt/BXzW3iGHrv0mUj8CprjYIZJ5AiKSe/tWNdrli32/U6cPpKd+6f4f8AAOl0UiXwxMhJLKGwP1/pXKDg49K6zSzHYWptZbhIxJkuxJ5BGCBj6k59vrUd14bimXzbG4Uqc4DHP4ZH4fia8inXhTnLmdk3ddhwmot36nLcUcV0mn+EtQum3SGOCMMAWbnI7kAdce5H88UvEmjNo91FF5pmSRNwfy9oznBHU57Hr3Fdca9OcuWLuzeNSLdkzHooorUsKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAOw+Gx3x+IYP7+kykfUEGtb4b6fearbeJdLsLWa7u7jTA0UMKlmcrNGcADrxk/hWV8LMtrN7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RRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAOo7UCu8+FHwr8YfEjUPJ0Cw2WabxNqVyGS0iZVB2Fwpy53L8qgn5gSAMkZ4jEUsNTdWtJRit23ZIEm3ZI4PtRX254b/AGS/AdlDavrmsa1q91FJunEbpbW84DkhdgDOoK4BxJk8kEZAHXD9nL4L/wDQm/8AlUu//jtfB4rxMySjJKHPNd1Gy/8AJmnr6HUsFUe9kfntg0mPWv0o8P8Awe+Fuh2b2lj4H0WSJ5DITeW/2twSAMB5tzAYHQEAHJxkknR/4Vt8Of8AoQvCv/gnt/8A4muGXirlielGf/kv+Zf1Gp3X4n5kBeMg03Hev06/4Vv8Of8AoQvCv/gnt/8A4murrkxPixhY29hhpPveSX3WTKWAl1l+B+WfiPwt4k8Ni3/4SHw9qukfaN3k/bbOSDzduN23cBnG4Zx0yPWsb9K/SL9oPwJ/wsL4YalocCZ1KHF5pvP/AC8Rg4XllHzqWjyxwN+7BIFfnNqFrc2N5PYXkE1tdQSNFNDKhR43U4ZWU8gg5BB5BFfZcKcTU+IMLKqo8k4uzje++zXWz/NNHNXoOjJLe5Uooor6cxCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA+hfgN+zhqnjO0tPEni24m0jw/cRs8EMRxeXIwNjruUqkZJyGOSwXhcMHr7Q8OaLpXh3Q7TQ9DsYrHTrOMRwQRg4UZJJJPJJJJJJJJJJJJJPBfs2/ET/AIWH8N7O/wBQ1C0udetMwarHEnlsjhmEbsnQb0AbKjaTvAxtKj041/NXGWd5njsdPDY33VTk7RV+VdE9UnK6taTWqeiSdj2cPSpwinHr1CrMdjK6bjgZ6A9arDrWtHdwMgJcKccg9RXNwvl2XY6rUWNlayVldRvvd3fbTS/UqvOcUuVFUafL/fWl/s9+8g/KrZurcf8ALVaDd2//AD0FfY/6vcNx3mv/AAYv8zn9rWf/AAxU/s5/+eg/Kh9PkC5DgkdsYzVo3dsP+Wg/I0172BVJVix7DB5qKmT8Lwg7zitHqptv5K71+TBVK7e34GUQRxjkV+avx/0680v40+MLa+i8mV9WnuFXcGzHK3mxtwcco6nHUZwQCCB+lbHcxbuTXxb+3roAs/Hmh+IoorWOLVbBoH8tcSSTQONzvwAfkliUHJOEwcADPP4Y46NDNamGvpUi7X3vF3X3q48dC9NS7P8AM+aqKKK/eDywooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAO3+DvxD1b4Z+M4vEWmQxXKNGbe7tZMAXEDFSybsEocqpDDoVGQRlT98/D34p+A/HMFv/YHiC1a8m4Gn3DiG7DBA7KI25baCcsu5flbBOCa/NHr2pSfevk+JODsFnzVSo3ColZSVvkmnvbyae5vRxMqWi2P1jo/Cvyb69q2fDvinxL4c8//AIR7xDquj/aNvnfYrySDzNudu7YRnG44z0yfWvhpeErS93F6/wCD/wC2Or+0P7v4n6mUV+ZP/C0fiT/0UHxX/wCDef8A+Ko/4Wj8Sf8AooPiv/wbz/8AxVR/xCWr/wBBUf8AwF/5j+vx7H6bUhPvX5zaH8d/i5o1q1rZ+NtQljaQyE3iRXbgkAcPMrMBgDgHA5OMk1e/4aO+NH/Q5f8AlMtP/jVefV8KszU37OtTa6P3lf5crt97KWPh1T/A/QvoK+av2+rjSF8BeH7SdYf7Wk1NpLVmhJcQLEwmAfGANzwZGRkhTg7cjwr/AIaO+M//AEOP/lMtP/jVcn8QviP4z+IH2H/hL9Y/tL7B5n2b/RoYdnmbd3+rRc52L1zjHGMmvb4Z8P8AMMqzSli69SDjC91FyvqmusUuuuuxnWxcKkHFJ3Zx9FFFfrp54UUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUU5+tNoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiilGO5oASnKAQc9qbSgkDA70AaNtbQyQbymTj1Pr9at2ljavgvFnIz94/41n2l2Y/kZcoAeB+da9pexmYnaC3XAGfz7duT71pBx6nDiPaK9r/AHnsP7L/AIb+HureM4LHxho9ldmdd9gbmSbBuUcFYyoYIysu/KyAglQB1IbtvjH4V8LWPjS6trHw5o9rCrIFjhsY0VcjnACgV558FJoB438OzlApXUIsAdMknGOcfn/hXsfxwiMfjq6kkt433Rg4fOOQfmGOcjHet4Rje9t0fI5niq17czVn3fVPzRyvjHwx4Zg+C0V/D4e0mK7N8VNwllGJCN7DG4DOOBxmvHPDWn6dL4v0WCWwtZIn1WBHRo1KspYAqQRggjqDxXt3iO2a5+A15iQube+3tnOVw46cc9e3rXiuksbHxPo9ww8ryNQgkJxkIA4OSe+aVRJX0NcrrVZQfNJt69X29TM8fWVlb+K9eggs4IY47yVY0jjCqgDHAAAwAPQViQW0L7QII2J4Hyjnmum+LkbwePfFEC5jxqcrKvUAE559jnpWN4S0m+uL2BzpmpSxBvMEttGC2R0Izweax0ue9Tk1QUnLouvkvP8AU0tA0hZJIHfS1dN3zEwgjHPWvW7Hw14ffwhPct4f0xnGsQRrIbOMkIc5UHGcHuOlN8PxX0FtmdtTjBI3G8voY8epxyRmuhT974C1i4SdJpbe/guGImMgwDjBYgDoTwOle1l8IOLuk9V0Xf0PmcVjasp6Sa1to35+Z8xeKYYor+4EUSRqJ3ACqAAAeAMdqwn64rpPGsflavex/Mdlw68/XiubbrXnY1KM+VK1rn22Ek5Uk2N7UlFFcR0nYaRa2rfDHXLtreFriO+tlSUoN6g7sgHGQDgZHfFciOAKnS4nS2eBZZBC7BnQMdrEdCR3IzUHbpVznzJJdFb8X/mZU6bg5Nu93f00St+H4jaXFHfmjv6VBqOQbmAOa2dBsra4lUTR7xxn5iO+OxrHj++OnB713vwv0Uazfx2rRzsjOS5gIEgQDPyhiATnHGa68LBSbur6M48bVdKk5Xsb+leGtCgaKRNNhdnj+bzCZAeV5wxIB9wO9Yvim10xJEigsbZHRCzbYlHpgHA68E8+o9a7LxVoF1o8CyWkXiAkYASaE4C8c5QnAyBXnWoXsPmubgyLKThxJkE8cDkdqUlFaWPn8JOrVlz8zfzf+ZBHbWxWIm2h59UHPA9q1PH1jY2/irU4YLK3ijSRQqJGFVR5aHAAGByT+tZdnKs8kKRvgF1UDOcknA59K3PHjrP401gBANtyEIzk5CKp/Vazsnt/Wh3uVSNXVu1n1fdHYfCzwF4T1v4f+INW1bSRPeWq7oJBcSoEyCeisAe3UGrOgfC/wjrms2OmyW91ZpM/zyW9wd5HH9/cAOc9M10HwbOz4V+LHweMICfXpj681e+Hl0o8X6UCFQq5LknIIA3ZGPYGtlCPLqv6sfN4jHYqFebhUaSemr0+R8/6v4XtYJGFtcyqFcg+YAxPOB6ViXGleTtHn53HH3Mf1rsNTvbeVmPmgMzsTkYAGf8ACsC6ltpWQCblW546jHaspRjfRH02FxGIa99t/L/gGHJaOiMxZcL16+uKgPHWtG+kj2FUbdznkY6/zxms5vmYn1rFpJ6Hr05OSuxtFFFI0HP9402nMcmm0IAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKUjGOnIzSUAKQR1pKUknrRQAdqns3KyLhinOcgVDjFSW5KyAgk+oHHFBMtUep/Dm7MGrabdByPJvIpCyjBADgkgdevP419KfHayeXxTZzRqr/brYENnAB5wcnjGCa+a/hRqS6br+lXzjKpcplSAQQTg9exB719WfGyze48PaPfKE22zmIkDOQcjH0xiuqm9UfBZtG0pabWf42/C4z4E29vPbXumTwQSwrcsHRjuAymDweDyB0r5v+IOgSWF/qcLqI/s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RfC9i2j6XKwFzKMG5ux0O5v4VxyFHHrVCx0iG7S81N73+yfDNkxD6ldgZx1CIo+/ITkYHTjNdCio6v8Ar+ux4U6sqzait/vf9eX3d7Y0qz1q8lfTjNpWlWdusmsXt4+RbP1LKT1J7L1JrzX4peOYtbkt9O0qB7Lw7pYKWFsRzIc/NNIO7seeemak+JPjwazBFoeiW8umeHbY74rZmy9y/eaY/wATdwOgrzPUNQ80lUyeSQSMcdKznNWPcyzLXFqUlr27f8H8vW7Kt9c+e+R+Z6ke/aqlKck5PWgetc17n1EYqKshD16UlOz8xJ5ptBQUvpwKCSeTQDg9AfrQAhopcHGe1FAAMZ5GaSiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAXNAPPNJRQAp68UlFKAevpQAlFKcDjBB70H8KAEooooAKBx0opTQBatLkxEHOMMCeM5rtPA/i/VPDuqf2jo939nnOBJH1jmX+5IvRgffp7VwXQYzmpIJniOV69qqM7aPY5a+GjVTTR9H+HNa8O+MJ9unyweGNcdg0tjcSEWlyx/wCeL/wEnseM1p3N9qWj6rBFd2k2lXkQAjKqQWI6kHODnOc5xXznZakCf3gyzdRnAOO/t9a9D8KfE/WNOto7G/Fv4g0pcL9j1BS5jB7RyD5l/Mj2rpjUVu58tjclabcF8n+j/K/3n0Z4R+KetW8cou7VtRtogPMmXhogeAXI4wSSATXUy6/8PfFtsYtYsLUzYAK3CBHX23DjPPavn7Tdf8G6xG0Om61ceF5pSM2mo7pLaQ54UyKCcA9MggGtdtF8QJarPbWyanbu+TLp8yTLjPHA5yeOoqmot3Wh4so16Huy27NX/r5M9R1P4L+DNQVptL1m7sgcBQjCVBkdCM89a5zUP2e3lzLYeLrRyWyPPhI9eMZ4PNcY2tXVqwMZvbHBHlq7uhUgYPBAzWnbeN9aCEprsyKgB2vIGyeygnvx3ocX3/AUcRKL+D7m1+dyTVf2fNYjtbh11/R7hkRm8sOwdyASAB0yTiuAT4TeNLhI3Xw9NEH5AdgD+Pv7V3p8f+IkAK6kWfOTujUgD0PfPArN1bxtrpYIfE80ocGTKsF8s56E+oxRyd2bxxtX7Kt6u5jab8CPFVwBJqU9jpkAO4tI+SPXI/Kt2H4bfDzQgT4g8TyanPwfs9kuc9+MZ46Dk1gzaleX2ZZb+91F2OShkZwPcjoR7Vo2PhTX5IftC6Z9htmO43F3IIUA9ecHHtQopbjnisRPRyt6aG5/wmdlosP2TwZ4atdGjkJIvLhN0zcYBXt17nNcrc3Wpa/qpjeS71TVJWyMAu5HsOgH5Cl1HUPBugsRq3iKXxBPHhVstIUlFPcea3G31xXMa/8AFfVJbabTtBtbbwxYPyyWZ3TyDoQ8x5OfQYFLnSehpRwNatrbTu/8t393zOp1p9A8Jxs3ii6+36nw0WiWEmcH0uJRwg6cDk/SvNfiB471TxJdo988UNrCNtrYwLtgtR6IvQnHUnk1yd1qsZBCguWO5iTncc9c9c1lXlxJM+WPA6DrisZ1ex9JgsqjSd5K77v9F0/Pu+hNql89zJgMdn86pkknk0mMDPakrFu7PbhBQSS6AcZ46UH6UlFBYUo56DPrSUUAFLxjjOaSl70AGaOcYoAJOKSgAope1JQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABS0HPekoAUkk5OcmlxxkfjTaUngDA4pAJRRRTAKKUDJ5OKBjvmgAAycUpJ5JOc9abS8e/tQAZqe3uZYvuMRUGaUdcCgTSejNez1MopD7mUDABJJPPY9q19D8Q3llP5ljqNzZyE5Bt5ShJHrgjmuRPalRyhypwatTaOWphITvpue7eDvi3rdpcRx+INSvdS04AgxkI8mexBcdj1Ga6qH4leCZ1U3NkhlL5KyaUiAgd/kY5PvxXzPbXksWQrAAjHTnFWl1R1UkZLA8Z5Bz39jVe17Hk1sjpTd0vu0Pd/EnxG8LwyRNo3hvSdVd8mZpoHhMZBGMckHPPYYxWHN8YJAVW38I+HICjZ+eIvz7Z4/wD115FLqMjoVBOT1I4//XVVrqZsB23Beg6U3VLpZHRivejf1bv+f+R63qPxg8Xyqfs2pWmmLwALK0RSo47kZrl9Y8Q6lrEm/VdVvNRZiTm4nLDt+H4YrjobhwTuC4Axg123hvxB4R07SrdpvCL61qysS8t3cstv7AIvJ4xxkVLq3N3gIUFeEdfJL83/AJlKxt76+uBbabZy307dIraMsccAcDOM571h6zDd2V5LZ3kDQzxsUkjY8xt3B9xXX6r8SPEk1t9i0+8tNBsyCPs+lQCADvguPmP4muBuJ3lld5GZ2Y53EkknueeTmolJs6MLSkneSS+9v9F933kGSCQD9abRRSO8WkpRjPNHfigBKWlYgnIAFNoAKKKKACncYJJ57U2igAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKXtikooAKUdaSigBTgn0opKKACiiigAooooAKKKUn+VACUvf1pKKAF4x360lFFABSkknJpKKAFAqRJCoI9Rio80UCauOYt69efWkA55JoZs446CkzSGJRRRTAKKKKACiiigApQRgjH0pKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAHryea9l+CP7P8A4l+JWm/22b2LRtIZikNxJCZXmIODsQEZAPBJI5BxnBx40Bk9K/Sr9lvWNH1P4NeG20t4wsFkltKi9UmTiQEepOTz1BB7189xHj8RhKVKNCSg6kuVyaT5VZvRPS7tZX0v3ehrRgpN3V7I+P8A42/s8eJvhzpDa7Dfxa3pMZAuJo4TFJBk4BZCT8pJAyCevOK8UPrX6cftH6to+mfCHxLNq0kflSadNAoY/ekddqKPUliMfTPavzJfr04o4cx+IxVOrCvNTdOXKpJJX0T1S0vF6O2nkndBWgotWVrkdFFFfQmQUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFACiuq8B+P8Axf4HuJZvCuuXOnedjzUUB45MdCyMCpI9cZFcseaO9Z1qNKvB06sVKL3TSafqmCbTujrPHnxE8Z+OHibxTr1zqCRHMcRCpGp9QiADPvjNckfpS0cCihQpYeCp0YqMVskkkvkgbbd2NooorQAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDd8HeHL3xJqi2dqNqjBkcjhRXr9t8H9BW22zzTPLjlgx6/nWZ+zsIPst+ePO39+uMCvX64a9aSk0naxjKTvZHzb8RfAlz4YcXETmezc4D919M1xXSvpf4uiA+Cb7zscIdvrnB6V80HrXRQm5xuy4SbWolFFFbFhRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAb/gnxLd+GtVF5bjejcSJn7w/xr2S1+Lfhx7UPMJY5McptPX8q+fDRWVSjGbuyZQT3O7+JPj2bxMRaWyNDZqc4PVv/AK1cKKAKOlXGKgrIaSQlFFFUMKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9k=\"\r\n        },\r\n        {\r\n            \"uri\" : \"data:image/jpeg;base64,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IZzyaqSGrE7ZJqs9AEEneoRy2KmemwRF5QO2etAF6ALBbGR+AAWJ9ABXk+u3Lanrzyk5AJOPQnoPwFeieNL4WOjOobBk4HsByf6D8a840aEyOZWyWc7iTQBu6VBhRkYHFb9pH0xwKo2EWABitm2jwBgUATxJgCrKCmxr04qdF4FACoKkAFAHenge1AABTgKBThQA3FKBTgKAKAExQBS4paACjFFLQAmKWiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooASkNOooAaaT+VOptADDTGGRUpFNIoAqypkHIr4q/bQ8crq3iWPwfpspkttObEwQ5ElwRgjA67Qdv1LV9T/GzxrB4E8BX2tFlF4wMNipwcysDg4PUAAsfpjvXwN4H0668WeNHv7rdNHHJ5kjPk73Jzkk9T39c49aAPWfgn4IbS9LjnusSXMx3yMM8k9Bz6DAz3xnvXtumWQjQALjFUPCNgsNnGmMYAFdZBbgAcUARW8WO1atlHyBiooovatTTLctIo6ZPegDa0yLy4dxHJqeaRIo2llZURAWZicAAckk04KFUKOgGK4n4yaydN8KtZRPi41FvIUA8hMZc/TGB/wIUAeU6lfyeIPE15q7hts0n7pT1VBwg/IDPvmuq0W2AVeK5vw9acL8td3o9v8Ad45oA3tHt+BkV09lHhRxWXpkOFXjFb1suAKALEQwKlHApqDin0AIetNbpT6Y/AoAqXTYBrB1SXCtzWxePgHmuV1yfarZOMDvQByPim82I/PavI/Ety003lR5LOdoGe5Ndt4wv/vKD0zXK+DrA6vrvnHlYjge57/596AO8+HfhtobWCMKWJAJIHUnk165YWEVlbgYAOPmP9Kb4Y0mPTtOjZ1AkK5J9Bisnxlry2sZghI8wjj2Hqf6UAV/FHiFLUNb25BkHBPZf8TXn811eajdMluSxyBJK5OxMngkgH0JwATgHAOKY66lq0k62MTyiJS8zg4Cjk9T1JwTjrgE9Aa1IruKDS4rC3txAFH70g5LtxkknnnAP4DsAAAQaRarpmrfaLiOG9eIkDeAy9uQM4BGOCDkZ4PQ1parqct4264k6EnHQZOMnA7nAye/eudv9SitwSDzj1zmq1mk2pI8jztCoA2h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wE2hZ17MVIH6jmpLa2JbfIdzHuegqa3t1UBQoA7VfgiHHFADrSPaBxir8faool4FWEFAD161IOKaop4FACge1JSgUUAFJnmgnFJQA/vQOaaP5UoNAAetL3oP1pKAJBTh0qNaeKAHA0tNBp1ABRRQOtAC0UUUAFNJ4p1RsaAAnmkJ96bmjNAHN49qTFPxTkXJoAhKE9qgmhODgVr29sZGAAqxLaKiYAz6nFAHDaqzxqSBkjPtXDeIdVu4UcRoA2Dgk5wa9P1qzBVjt7V5t4ptG+bCsTjsCaAOJHi+/huooZIBJvcKWDEYycZxg16BYStLArngkZrz/T9Klm1qMmJwqEkkqcHtjP416PYQFIVBHQUAKd7cAkU+10+a4lCruOTViKMZ5FdD4MvLddW+ytCWYKSHxwh7f5/+vgArzeGbyziDuuM9wQefwqKO3mjYbi3Fejkqw7EHsay7/TY3y0S4PcUAc7BNKoALH86tpdOB94/nTZbYoSMYqPaRQBaF0/8AeNBuW/vGqhzTWY0AWZLtgDyaoXV42DyaSVjg1mX8u1SSaAMnxLfFLeR84wCetfOesRXfxB+KGmeELdw1tPODcgYJESkO565BwAAR1JIz1FeufEXW1stKuCAXbaQFHUnsB71S/Ys8KSXTap48vm817iQ2tm5zgxKxLlcgYDPngjjbQB9M6JYw6fptvZwRrHHFGEVVGAABjAA6VfApAMDFOA4oAWiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigBDivG/2hdK1Gxh07xZoiKjWcwS/Kj5zCSSOcZIDEjHQeYWOMZr2WqOs2Ftqel3On3cCT29xE0csTjKyIQQVI7ggkH60AcH4L8Q2eq6Zbz2twsqugII75FddbPvwRXhfw48D6/8PPE99pV9ere6RcSCTS7g5DuDksHycbxg5AzyC3AYAe46QjOq8cmgDVtkzyelWQMUiKFAAp1ABRRRQAUUUUAFFFFABVa5XKnjmrNMkGRQByHiW0We1kUjOQRUvwyvmn0JtPlYmawkMJz1KdVP0xx+BrS1KIMrAjqK5HQZzpHjdFY7YL9TC2eBvHKE/qPxFAHpNFFFABRRRQAVieM9OGpaBc24HzhdyHuCOQfzFbdNdQylTyCMGgDzrwXemWzQNww+UgnkEcEV0moDdCrDnAwa5FI20jxbeWRyscrebHnpg9f1z+ddjFia2K+3FAHOX3Ga5jWslGrqtQQ5IrnNWiJU8UAeMfElzHAx6cjn8RXk+qXzJLwa9x8faBLqVq8UT+WxIIYrnGDnpXlGp+A9QaXm6BGeQIzyPzoAxbfVGAHNWRqjY+9VpfA1wg/18lKfBk4GPOkoApvqbf3qrT6kSDlv1rU/4Qyc/wDLeSkPgW4f/lvJQBgwX5+0jLdT612vgqdpdYhUHJwePxFU9M+Hh88PLJJIPQ8D9K9C8H+DrawuVuFjbzAMZLE8fQn2oA9N8M58hM+ldFHxdwfU1kaND5cajHStdR/pluPc0AdzpuPKXgDgVqJ0FZemA+Uv0FakY4FAEi04dabTh1oAWiiigAooooAKKKKACiiigAooooAhuyBCR61z94OTW7e/cArHnTc2PWgDHuF61QnTOa27y2ZULYyPUVkSkBiKAKLRfNnFOnWZ7OQRozlFLYHUgc1aCBqnt/3bZxweDQB5RrVjPcX0F3cW6iSJiIsgFxkgEA9s4GfoK7/Rrdo4VVlIIHINXDZRJem4jUEj7pZeV9wexq5BFznHX0GKAJrdMAcVfgTkH+lQwJ044q/EmAOOaAJIk6fzq1GoHWo4lxirCCgB6CpFFNUVIBQAopwFIKfQAUUUCgAo70UtACUjMqjk1BdXccIILAt6elUBd+acq2aAL7zdhxURkOetVg5zzTg1AE/mGmlz60wGlVSfegCvelnjKgkZGODislxJHkZlI7ZOT/St9ogRyKheBT1ANAHPmaXJyshHscGmmaX+FZPb5/8A61bjWq+g/Kmm1XI4FAGOZ5j0R/xYf4UnmzYxsfP1H+FbH2YD+GlFsvQKKAMcPNg/Ixz6kf0FIGuMg+UCPQmtoW3Iyv6UotcdEJ/CgDEInJ/1aj8/8afuucYC4xwOT/jWyLQ9kOB7U4Wjdo2z9DQBiAXJ6oD75b/GnIk+clRz7k/zNbYtG/55t+Rpy2r5z5bD8KAMmKCZiCyr+Wf0rRtITGc9MjkAYq0lswH3CPwqVYWH8JoARM1KnUUmwgDIxUiDkUAS0UUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAQzpn5hVOROtaJ5GDVaZME0AZ0seaqSQDOQK0nHNRFRQBUiiA7VajTinIoqVFoAEWpAMUKKeBQAAU+kApwHFABSUoHFBoAaf1pKcRTT1oAUelL+lN/XFO75oAO1AooHBxQA4U6mLT6AHU6mjpTqAEpaKB1oAWiimscCgBHbtURNDtk1GTQA4mkJpm6k3UAY6jmrFum5gKhUZNaWnR7nBI4HNAF63iWNAMcnrSyBdpJ4A6k1JVPUJdqbQfrQBi6u6uSFGAO/euavLJJCcqD9RW/d/MTWfKuSaAME6bEp3BFB+lMkjWMHjGK2ZVGDWRq52xMR2FAFe3dZHKKQSBnFdF4btPJkMpADMck14jrt5qo1cXVhdy27RZCMmO/XqOQcDg+laGl/EjxlpuFmSx1FBwfNh2P8AgUIH6GgD6Nhc7RUueK8c0j422A2rq/h6+tj0LW0izD64O0j6c/jXYaV8T/A1/tVdcjtZD1W6jaHH1LAL+RoA6u5t1lBOMN6+tZU1swYjFadjqFhqEXm2F7a3af3oZVcfmCaldFb7wzigDCe1k2Ftpx61Ql+UkGuinvbCAET3ttF1yHlUdOvU1yWr6rpp1Bre0vYZzgN+7YEAH3HB/DNAD5W61ia5JshZs4wK0GmBGc1geLLlY9OmfPRSaAPn/wCNuoXd3cW+k2AMs15MtvGoJGXc4UAjoc8jOAdp+h+wfhT4at/CngfStDtwNttbohbGCxA5J9yck+5r5O+COlr42+PS3k4ElpoytcHBJAkztRWHTIO5wR7ZPavtuJQqhQMADFAD1606kA4paACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5bxhaSNYPcWtoLi8tG8yBcAMVYgOAT0GQCTgnA4BOK0/D0kU9uskZVgVBBByPwNWb+ONjH5iB0cmKRSMhlbggj0yRWB4Yh/sqR7F7i4nEcrAyzjDOSSScemSQMADjgYxQB1lFFFABRRRQAUUUUAFFFFABSMOKWigCheplSa4TxtaSeQLi3+WaBhJGw6gg5B/MV6HOuQa53XLYSQOpXOQRQBtaFfx6npFrqEfSeMMR/dOOQfcHIq/XDfDC7aFr/Q5W5gk86EE/wMeQPocn8RXc0AFFFFABRRRQBwfxPtDDLZaxGMGJ/LkI/unj+eK0tCnEtujA5BArW8TWC6jolzasPvxnB9Djg1yPgiZ3tFR/vIdpx6jg0AaerW4VyVGAeRXO30OQeK7TUYvMgDAcjgmuavYsE8UAchf2KvnIrDu9IQknaK7S5iHPFZ88IOeKAOMl0dM/dH5VAdITP3R+VdfJAPSoTbj0oA5ZdHTP3R+VTxaOmR8o/KujW3GelTxW4z0oAxLbSEBHyj8q2rGwC4wKuwwDjirsEQ4oAdaQhQOKmK/wCnW/Hc1NEmKR0/063HuaAOy0z/AFa/StRPu1m6aP3Y+grTQcCgBy04daQUo60ALRRRQAUUUUAFFFFABRRRQAUUUUAVrzpj0FZ5X5s1euvvGqj4CknoKAM7WbkW1s7McAAkj19q4CfWfLmJnKgE8kcAVt+Mr7JEAP8AtN/Qf59q4zS9Om8Q6/BpcZYRk752XqsYIyR7nIA9yKAO20+VZ4FkRgysAQQeCPWrqrkUsi26zlLVFSJAFUKMAADHAPOOO/NSIKAGLGM9KmRcEAU4DAzUkKAnNAE0CcCrsS8Cool9R+FWoxQA9BxUyCmoKlA4oAVaeBSCnigAAp1FA4oAKKKWgAqnqFz5ER2/ex19KnnkEa579qw9RmJJJOaAOK8Q+JjHfPZxuDKp+bP8PcZ/Cr3hTVWkYxSvk9VJPX1FVPiBox1LT2160RRdWCATqowXiA5J9SAMjvgNnsBzWg3rI0cqNgqQRQB7AuGAI70ozVLQ7tbm2RlPBGQPT1FaDpxmgATrVu2UZ3Y6VUjHNX4BhM+tAEm1fQflSbV9B+VOooAaVH90flRtAH3R+VOooAaAB0FLS0UAJijFLRQAlGKWigBMUYpaKAExRS0UANfmkQYNErYFJEwOcdqAJKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmOu4e9PooAzpRg1AetXb9dqb+3es8uCetAEiHmrCrx7etUw/NTxTY4PIoAsgU4CmoysPlPPpUgFACAU4UClxQAlIRTsUYoAaaa3FPNNIoAZS5JNJ0NKKAFB5x3oPrRxnrSmgBR1pw5pi+lPFADh0pRSDpSigBaB1opaAE6VFI1OlbAxVZ360AI7UwtTXeo2agCQtSFqhL0hegCunWtfTQNrH6CsVG5rW06QCNufSgDQrFv5dzmtIzLg84965+7mG8896AIZzkmqrjJqZmzTCM0AVJRwaxdYRmiZV6ngV0Lx57VUuLXeRlaAPPrjR1JJK8/SqE+iKf4a9Eew9uPpUD6cMn5cUAecS6Ep48vP4VA3h2M9Yh+Vektpqn+H9KYdNGelAHnMPh1YpVliTZIpyGXgg+oI5q6+kzz/8AHxNNNwBh3LfzNdyNMGR8v6VKmmgH7tAHDQaCmRiJfyrT0/Smt5BJGNpHoO1dfFpoGMLUxtFRclQAOtAGLJI0cY3eledfFnxE2n6DdNHIokK7V3EAZPAyTwOSOtd/r0oVDt4AFfOnxxvri5kg0q0ZHmvJBCkLqT5hYhcD/aBIIz6Z64BAPaP2J/DbWng288UXCP52r3JeMyHLiFMogJxzjDEHjgjA9fowDjFcx8M9Eh8PeDNK0eBQEtbWOIEDGcKBnn1xmuoHWgBaKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAr3yGS0kUcNtJB9COleBT/ABZNz8fvEXg6e4QWtjDbLYxqmMkxh5ST3O6QDk9FGB1NfQhGRg96+CPidBP4W/a5v2QBIdQkSYFic7HiBOOePnQ/hQB926TcrdWUcqkZwAcVbrk/h7dmXSostkOoP44rrKACiiigAooooAKKKKACiiigBjjiszUIgQR61qkcVUu0ypoA88uJTovi2x1MErEz+TP2GxuMn2Bwfwr04YIB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PEY9KAM2KxUEHb+lallAFI4p6RjNWoE5FAGnYLiIj6VZqC04Q1OOtABRS0UAJRS0UANxQRxTqTtQBnXK5zXIeNhs02aTsFJrtJ1zmuZ8X2Ru9LuIFHLoQPyoA+UPh5pzeLP2jNP3I7W+no94+HyjgEohx2Icnr1AGMdT9uQqEjCgYAAFfOv7M3w+vPCfivxDq2s+QJb2RFtihYkIC2ScjgnIJGcA8Divo1CCBggj1BoAd2paKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACqmqR+ZZTR4+9GR+lW6jmGUI9RigD4l+Bnw91PTPGPi7V2jVdPXVZbKA5OSY5Hz26YKnPfI98fTHh2IxooI6VR0UQ2NtrOmQ27Ora9M7PxhSYInPc8kyY7dCfSt3T4wACBigDpNLkxhc8HitOsWyOCK2IzuUGgB1FFFABRRRQAUUUUAFFFFABTHAp9IaAIinqKQIvYVLikOMEnpQAwgKCTwBWRqdwTlVPA6Veu5cggcCsW8JOaAMPWJDsbntXnuuStskbpkmu91cEo30rz/X1PkSY96AOq8KYtfBGmRRzDfcM808Y6gkkqT/wFgPwx240IR3rD8NJKfDmlXBDeU1ukYY/xMqgNj6HjPqD6VuwHIFAE6Cn4pq1IO1ADSKaVzUoFKBQBB5Q9K1fD4VbnymxskBDA9CMdKpACrukxs99FtGcMCQPQcn+VAHhEFi2n6xfaaVINtcyQjPorED9BXo3hx98SEelchqiCTxprcituU6hPg+o3mux8MxkRJx2oA7XRoi7KoGSTXVBFACgcAYrntAXEin3roc0ABjQ9R+tNMEX939acWPvSZNADTbxH+H9aQ2sPoR+NO3H1ozQA37LD/dP5002kJ7MPxqTPuaXcfU0AQ/Y4f8Aa/Oj7FCe7fmP8KlyfejcfWgCL7FD6t+Y/wAKT7DF2LfpU24560ZPvQBC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t5j4HQdBSxLjFMUc1PGKAJ4h0qxGKhjFW4F70APReM04AU6igBMCloooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooATFGKWigBMUUtFACUmOtOpKACilooASilooATFFLRQAUUUUAFFFFABRRRQAUUUUAJ2qpeLujYeoq5UE4ypoA4G7zb6oy5AD9AByTSzyHZU3iaNkvY5FUE5xn0FVLjPl/hQBz/iC4YRNg147r1ww8Wow/590B9+Wr1nxACY2FeS69E3/CUKf+mCfzagDrtInZlXJ7DpXS2DkkYBNcvocRIXjtXY6ZCQBxzQBqWaFsZFa9rGcCq1lAeMg1sW0BwOKAFgi4FXIo8Y4p0MXA4qzHHx3oASJfap0XilRPaplX2oARR7VIFpVFSAcUANA5pQKcBS4oAaKKWg8UAITikJpT0pvagAJ5pM0E00mgB2aaWpM0hNADs0bqZmjNAD91G6o80ZoAlDUu6oc0oNAEoalDVDmnA0ATBqUNUINODUASg04Goc07dQBKDSg1EDTs0ASA0tRg0oNADwaWmA0uaAHUU3NLQAtFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUmaAFpKDRQAGkJozSE0ABOaQmkJpCaAGuRVO6PBqyzcVTuiOeaAOa8SN+5k+lZ3wtI/srXyRz9rX/ANBFXPEjHyJMelUPhYSdL1454+1L/wCgigDbydxprtxVgxqEDbefWqtxkZoAgklA701ZlJxmqd7vAJU4rEuL24gmQg5UuAcjoCaAOwiywzUyirnh+3gurIuxO4YGR06dajnhaOUqRgg0ARoKsRLntTIl5FXbaEsRgZoAdDETjir8EAwGYYFSQQBQCRk+lTf5xQAm0AYAwPSnAetAH50tABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAnSm0480UARtSGnGkIoAYRSU40h4oAQ0UUdaAKeOaevWmLT1oAsxoAAT3qQccCoYm4xUoPFADwaUGmg0vWgB9RSrkZFSCg9MUAQoc1IpzULgq3tT1bOKAJqKapp1ABRRSZoAWikzSZoAdSZpM0ZoAXNJmkJpu6gBxNNYikZqiZ8DrQAkpXniqk7KM0+eUY5NZ93NhTz+FAFa+nC556VyGv6ksSszNgD9a1NZuwiN83PtWF4a8PyeLdTaW6LrpUDYkIJBnb+4COg9SPoOegBH4G8Mz+Krs6nflo9KifCgcGdgeQD6A9T68Dvj1YSW9pAtvbRqiIMKqjAA9hVu1t4ba3jtreJIoYlCxxoMBQBgAAdBVPUkVX3DuM4oApzTvIxJJNMGSaCOaeooAcgqdBUaCpkFAE0Qq3DwDVWMVbi6UAPooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqOUcGpKbIMigDkfF8IaIt0A5OPSsVmEkKsBgEZwa6rxHFvtG4zxXJwZMIDdeelAGDrUW5SMda801+1Y+LGTb92FAOPqf616zqMW44x3ridesh/wmkw28+Un8jQBa0G0IReOa7DTrU4HFUdFs8KOMV1VhbYAAFAElpb4A+XmtOCLoMdKdbwYAGKuxRdKAGJHx0qZI/apVj4qQKKAI1THanqtPC04CgBoFOApwHtS4oAbijFOwKDxQAw0hFONIaAGEU3tUhppoAY1NNPNNNADDRTiKQigBhpKfikxQA2inYoxQA3mlHSjFLigApO9LRjFACg0oNNxThQAoNOBpgFKKAHg04GmA0oNADwaXNMBpwoAeDSg1HTqAHg0oNRilBoAfzSimg0ZoAfRTc0A0AOopBS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFNJoAdSZpM0ZxQAtITSE5ppNADs0maQmkJoAUmkJppNITQApNNLUhppNADXb3qldN19KtSHiqN03WgDmPEp/cPzVT4UtnSddB6/ax/wCgip/EjZhk9Peqnwo50nXSf+ftef8AgIoA6sj90Kp3IGD6VbDfuhx0qlcvwccUAZt50OM9O9c3rCEo3ODiuhu3HPIrC1JgyHkUAdp8P7wTWZBP3owcfT/9dbOoqCwYDk9a4L4cXypdtbk4ILLg+hGR/Ku7mlDxEZyRzQBDBjeBW9aqoiXgDjn1Nc1DMPM/Gtq2ucgDtjpQBpUdKiilB7/hUoIIyKAFooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAE7UUEZpOlACHpTSKceaQ9KAGkUhGaUjNFADTxSU+kxQBQBxThTM07NAEyNipkbiqqmpEPNAFoGlBqNWzin0APBp1MBpQaAEkXKn1qurFWKtVuqt0h+8tAEimpAc1UjkyOtShqAJiaM4pgagmgB2aCajLU0tQBJupC1RF/emGSgCYvimM+KgaT3qJ5eetAFh5KgklxnmoJJ+OtU57kDOTQBNcTYz61j6jc4ByeKS8vQFJzXPXd1LeXAtbfl3OM9h7mgBqWtxr2pCyiZkhBBnkXqB6D3P6dfr6bpttb6XYRWtvGsccagBV6DArL8LaZFp9mqqMnqWI5YnqTW1c48g5PTmgCGW9xkKMe9UpZWkYsxJJqORssaQUAPA5p601RUiigB6CpkFRoKlSgCZOKsRHiq6VPF1oAlooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApp6U6k7UAZmrR7rdxjtXDwALcTR85BySfevQL1dyMPUVw13Gyam6rwpGT9aAK1xHlhx3Fc5r9sP+E6uFC9IYv5V1jJl1+orK1uD/AIr66XsIYv5UAaukWoCLxXQ2sGAOOlVtMgAQcVswR4xxzQAsMWB0qwi05F4qQLigBAtOCgUoFKBQAgFKBS4paAGgUuKWigBMUdKWkxQA00008jFIaAGGmkVIRSEUARkU0ipSKTbQBGRSFakK0YoAixSEVKVoxQBFik25qXFJigCPFGKkxRigCPFLtp+KTFADcUuKXFGKAEFKBRil70AFFFA60AFOpO1LQAo6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\"\r\n        },\r\n        {\r\n            \"uri\" : \"data:image/jpeg;base64,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N4s8M2OPsdnG7f7XzNWXtalXaMpEc06j92PMT2+k3VygkKKif3pG21Ju0HTTvnl84x/wjhWrEutf13WXP2eLYv8Aem+7/wB81FFodq3z3j+a/wB5m3/LT9jNr97L/wABD2fv+9Iu6t41FxGbOz2v/chhT5aoDS5NQbztUeT5v+WMb/KtXobe2t1CQpt/3Up/8H4VpHlpx5YIpckfhIrexsLVfJtUVRt+dVep/ur8ifd7U3D/AO7R29/9+l8Qpe8G58fw1NYqWuR86qqqzfNUVT2uxYZnk67NtRL4S6fxRkV3VxTKl2xf5FG2L/IquYjlY0feNS03bt+bP6U6iQR3CiiimWFMZs8mhmzyaiojEAooorQAooooAKKKKACiiigAooooAKKKKACiiigAp6sE4zTKKALFFRq/y8d6krMAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigCNvufnUdPl6/jTKACiiigAooooAKKKKUSpBRRRRImAUUUUwCiiigAqRU+XjtSD7xqWgJhUdSUx/vGgzEpF6n60tJx9/2oAWl3fNmm8KKOFFAC0dF9qRPuiloAKXb8uaSigApc7c01d+2j7vV6AFopFO4UvINACbtv3P8Ax6nK0Eo+dNpp6xo61Eyore1ADmXFLH3ptJ2+fFADpG8z/V0lFJwwoAOFFG5NtO2/KrpTd6+tAC0m35duaT593tUi/MM/7FADaT7q06TH+ro29u9ADd6+tD/dNH8f4UtAEdy80ce+GHeaSzsby4uUmuCuF+bbUqjd0NJc6ncnfaWdttX7ru1HNLaJPNGM+aUv+3SBZPtF5NePzufan+7Um2RmzjbSxx+WoT+6tOLBa0Q+YFG0U77zfWkpG6/crMYtJwwpaTdL/k0ALRRRQAn3loVgnGaWk+T/AG6ADd/co/g/ClPzfwUn3W+tAC0UgULRsX0oAWiiigApN0jUtFACP90075PekpP4PwoAH+6aN6+tB+8KAoWgXKMp/wA+38aNi+lS0DK9SUirv5xTtsa//WquZi5QPU0lKeppn/xNSMf95vrScg01mdT1+WlWTB9KAH/f9sUjx0beyUK2ORQBFT1YJxmlZd/akZQnan8QD0fdTqjpfN9xU8oCum6k+ZaWPvTqYBRTPmajyvYUADMR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\"\r\n        }\r\n    ],\r\n    \"materials\" : [\r\n        {\r\n            \"emissiveFactor\" : [\r\n                1.0,\r\n                1.0,\r\n                1.0\r\n            ],\r\n            \"emissiveTexture\" : {\r\n                \"index\" : 2\r\n            },\r\n            \"name\" : \"Material_MR\",\r\n            \"normalTexture\" : {\r\n                \"index\" : 4\r\n            },\r\n            \"occlusionTexture\" : {\r\n                \"index\" : 3\r\n            },\r\n            \"pbrMetallicRoughness\" : {\r\n                \"baseColorTexture\" : {\r\n                    \"index\" : 0\r\n                },\r\n                \"metallicRoughnessTexture\" : {\r\n                    \"index\" : 1\r\n                }\r\n            }\r\n        }\r\n    ],\r\n    \"meshes\" : [\r\n        {\r\n            \"name\" : \"mesh_helmet_LP_13930damagedHelmet\",\r\n            \"primitives\" : [\r\n                {\r\n                    \"attributes\" : {\r\n                        \"NORMAL\" : 2,\r\n                        \"POSITION\" : 1,\r\n                        \"TEXCOORD_0\" : 3\r\n                    },\r\n                    \"indices\" : 0,\r\n                    \"material\" : 0\r\n                }\r\n            ]\r\n        }\r\n    ],\r\n    \"nodes\" : [\r\n        {\r\n            \"mesh\" : 0,\r\n            \"name\" : \"node_damagedHelmet_-6514\",\r\n            \"rotation\" : [\r\n                0.7071068286895752,\r\n                0.0,\r\n                -0.0,\r\n                0.7071068286895752\r\n            ]\r\n        }\r\n    ],\r\n    \"samplers\" : [\r\n        {}\r\n    ],\r\n    \"scene\" : 0,\r\n    \"scenes\" : [\r\n        {\r\n            \"name\" : \"Scene\",\r\n            \"nodes\" : [\r\n                0\r\n            ]\r\n        }\r\n    ],\r\n    \"textures\" : [\r\n        {\r\n            \"sampler\" : 0,\r\n            \"source\" : 0\r\n        },\r\n        {\r\n            \"sampler\" : 0,\r\n            \"source\" : 1\r\n        },\r\n        {\r\n            \"sampler\" : 0,\r\n            \"source\" : 2\r\n        },\r\n        {\r\n            \"sampler\" : 0,\r\n            \"source\" : 3\r\n        },\r\n        {\r\n            \"sampler\" : 0,\r\n            \"source\" : 4\r\n        }\r\n    ]\r\n}\r\n"
  },
  {
    "path": "shell/resources/shaders/ShaderLibraryTest.metal",
    "content": "#include <metal_stdlib>\n#include <simd/simd.h>\nusing namespace metal;\n\nstruct VertexUniformBlock {\n  float4x4 mvpMatrix;\n  float scaleZ;\n};\n\nstruct VertexIn {\n  float3 position [[attribute(0)]];\n  float3 uvw [[attribute(1)]];\n};\n\nstruct VertexOut {\n  float4 position [[position]];\n  float3 uvw;\n};\n\nvertex VertexOut vertexShader(VertexIn in [[stage_in]],\n       constant VertexUniformBlock &vUniform[[buffer(1)]]) {\n  VertexOut out;\n  out.position = vUniform.mvpMatrix * float4(in.position, 1.0);\n  out.uvw = in.uvw;\n  out.uvw = float3(\n  out.uvw.x, out.uvw.y, (out.uvw.z - 0.5f)*vUniform.scaleZ + 0.5f);\n  return out;\n }\n\nfragment float4 fragmentShader(\n      VertexOut in[[stage_in]],\n      texture3d<float> diffuseTex [[texture(0)]],\n      sampler linearSampler [[sampler(0)]]) {\n  constexpr sampler s(s_address::clamp_to_edge,\n                      t_address::clamp_to_edge,\n                      min_filter::linear,\n                      mag_filter::linear);\n  float4 tex = diffuseTex.sample(s, in.uvw);\n  return tex;\n}\n"
  },
  {
    "path": "shell/shared/extension/Extension.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n/**\n * @brief Return type for type safety with C factory function\n */\nstruct IGLShellExtension {};\n\n/**\n * @brief C factory function for creating new function\n *\n * @return New instance of Extension\n *\n * @note Callers usually use ExtensionLoader instead of calling this directly.\n * @note Callers should call `delete` to free the extension\n *\n * @see ExtensionLoader\n */\nusing IGLShellExtension_NewCFunction = IGLShellExtension* (*)();\n\nnamespace igl::shell {\n\nclass Platform;\n\n/**\n * @brief Base class for shell extensions loaded by ExtensionLoader\n */\nclass Extension : public IGLShellExtension {\n public:\n  virtual ~Extension() = default;\n  virtual bool initialize(Platform& /*platform*/) noexcept {\n    return true;\n  }\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/extension/ExtensionLoader.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/extension/ExtensionLoader.h>\n\n#include <shell/shared/extension/Extension.h>\n#include <shell/shared/extension/SymbolFactoryLoader.h>\n#include <igl/Core.h>\n\nnamespace igl::shell {\n\nconst char ExtensionLoader::kDefaultPrefix[] = \"IGLShellExtension_New\";\n\nExtensionLoader::ExtensionLoader() : ExtensionLoader(kDefaultPrefix) {}\n\nExtensionLoader::ExtensionLoader(std::string prefix) : prefix_(std::move(prefix)) {}\n\nExtension* ExtensionLoader::create(const std::string& name) noexcept {\n  IGL_DEBUG_ASSERT(name.length() > 0);\n\n  const std::string symbolName = prefix_ + name;\n  auto factoryFunc = SymbolFactoryLoader::find(symbolName);\n\n  return factoryFunc ? static_cast<Extension*>((*factoryFunc)()) : nullptr;\n}\n\nExtension* ExtensionLoader::createAndInitialize(const std::string& name,\n                                                Platform& platform) noexcept {\n  auto* extension = create(name);\n  if (extension) {\n    extension->initialize(platform); // initialize extension\n  } else {\n    IGL_LOG_ERROR_ONCE(\"igl::shell::ExtensionLoader() Could not create extension(%s)\\n\",\n                       name.c_str());\n  }\n  return extension;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/extension/ExtensionLoader.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n\nnamespace igl::shell {\n\nclass Extension;\nclass Platform;\n\n/**\n * @brief Loads extensions using platform-specific symbol lookup utilities\n */\nclass ExtensionLoader {\n public:\n  static const char kDefaultPrefix[];\n\n  ExtensionLoader();\n\n  explicit ExtensionLoader(std::string prefix);\n\n  ~ExtensionLoader() = default;\n\n  /**\n   * @brief Creates Extension. Does not initialize.\n   *\n   * @return Returns new allocation of Extension. Not initialized.\n   *\n   * @note Relies on a function with signature IGLShellExtension_NewCFunction that instantiates\n   * the extension. The name of this C function is: <prefix> + name.\n   *\n   * @see IGLShellExtension_NewCFunction\n   */\n  // E is the Extension type. Requirements on E\n  // 1. The static method `const char* E::Name() noexcept` must exist\n  // 2. E must subclass from igl::shell::Extension\n  Extension* create(const std::string& name) noexcept;\n\n  /**\n   * @brief Creates Extension and initializes it\n   *\n   * @return Returns new instance of Extension (i.e. alloc'd and init'd)\n   *\n   * @see ExtensionLoader::create()\n   */\n  Extension* createAndInitialize(const std::string& name, Platform& platform) noexcept;\n\n private:\n  std::string prefix_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/extension/SymbolFactoryLoader.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/extension/SymbolFactoryLoader.h>\n\n#include <igl/Core.h>\n\n// clang-format off\n// Default behavior if project doesn't override\n#if !defined(IGL_DL_UNIX) && !defined(IGL_DL_DLL)\n  #if IGL_PLATFORM_APPLE\n    #define IGL_DL_UNIX 1\n  #elif IGL_PLATFORM_ANDROID\n    #define IGL_DL_UNIX 1\n  #elif IGL_PLATFORM_WINDOWS\n    #define IGL_DL_DLL 1\n  #endif\n#endif // !defined(IGL_DL_UNIX) || !defined(IGL_DL_DLL)\n#if !defined(IGL_DL_UNIX)\n#define IGL_DL_UNIX 0\n#endif\n#if !defined(IGL_DL_DLL)\n#define IGL_DL_DLL 0\n#endif\n// clang-format on\n\n#if IGL_DL_UNIX\n#include <dlfcn.h>\n#elif IGL_DL_DLL\n#include <windows.h>\n#endif\n\nnamespace igl::shell {\n\nIGLShellSymbol_NewCFunction SymbolFactoryLoader::find(const char* name) noexcept {\n#if IGL_DL_UNIX\n  auto factoryFunc = (IGLShellSymbol_NewCFunction)dlsym(RTLD_DEFAULT, name);\n#elif IGL_DL_DLL\n  auto factoryFunc = (IGLShellSymbol_NewCFunction)GetProcAddress(GetModuleHandle(NULL), name);\n#else\n  IGL_LOG_ERROR(\"IGL WARNING: Runtime symbol lookup *not* supported on this platform\\n\");\n  auto factoryFunc = (IGLShellSymbol_NewCFunction) nullptr;\n#endif\n\n  if (!factoryFunc) {\n    IGL_LOG_ERROR_ONCE(\"SymbolFactoryLoader::find() Could not load symbol(%s)\\n\", name);\n  }\n\n  return factoryFunc;\n}\n\nIGLShellSymbol_NewCFunction SymbolFactoryLoader::find(const std::string& name) noexcept {\n  return find(name.c_str());\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/extension/SymbolFactoryLoader.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n\n/**\n * @brief C-function signature for factory that instantiates instance of symbol\n */\nusing IGLShellSymbol_NewCFunction = void* (*)();\n\nnamespace igl::shell {\n\nstruct SymbolFactoryLoader {\n  /**\n   * @brief Finds a factory function that creates symbol corresponding to `name`\n   *\n   * @return C function if symbol exists; nullptr otherwise.\n   */\n  static IGLShellSymbol_NewCFunction find(const char* name) noexcept;\n  static IGLShellSymbol_NewCFunction find(const std::string& name) noexcept;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/fileLoader/FileLoader.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/fileLoader/FileLoader.h>\n\n#include <cstdio>\n#include <filesystem>\n#include <limits>\n#include <igl/Common.h>\n\n#if IGL_PLATFORM_ANDROID\n#include <shell/shared/fileLoader/android/FileLoaderAndroid.h>\n#elif IGL_PLATFORM_LINUX\n#include <shell/shared/fileLoader/linux/FileLoaderLinux.h>\n#elif IGL_PLATFORM_APPLE\n#include <shell/shared/fileLoader/apple/FileLoaderApple.h>\n#elif IGL_PLATFORM_WINDOWS\n#include <shell/shared/fileLoader/win/FileLoaderWin.h>\n#endif\n\nnamespace igl::shell {\n\nFileLoader::FileData FileLoader::loadBinaryDataInternal(const std::string& filePath) {\n  if (IGL_DEBUG_VERIFY_NOT(\n          !std::filesystem::exists(filePath), \"Couldn't find file: %s\", filePath.c_str())) {\n    return {};\n  }\n  const uintmax_t length = std::filesystem::file_size(filePath);\n\n  if (IGL_DEBUG_VERIFY_NOT(length > std::numeric_limits<uint64_t>::max())) {\n    return {};\n  }\n\n  std::FILE* file = std::fopen(filePath.c_str(), \"rb\");\n  if (IGL_DEBUG_VERIFY_NOT(file == nullptr)) {\n    return {};\n  }\n\n  IGL_SCOPE_EXIT {\n    std::fclose(file);\n  };\n\n  auto data = std::make_unique<uint8_t[]>(static_cast<size_t>(length));\n  if (std::fread(data.get(), 1, length, file) != length) {\n    return {};\n  }\n\n  return {.data = std::move(data), .length = static_cast<uint64_t>(length)};\n}\n\nstd::unique_ptr<FileLoader> createFileLoader() {\n#if IGL_PLATFORM_ANDROID\n  return std::make_unique<FileLoaderAndroid>();\n#elif IGL_PLATFORM_LINUX\n  return std::make_unique<FileLoaderLinux>();\n#elif IGL_PLATFORM_APPLE\n  return std::make_unique<FileLoaderApple>();\n#elif IGL_PLATFORM_WINDOWS\n  return std::make_unique<FileLoaderWin>();\n#else\n  return nullptr;\n#endif\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/fileLoader/FileLoader.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <memory>\n#include <string>\n\nnamespace igl::shell {\n\nclass FileLoader {\n public:\n  struct FileData {\n    std::unique_ptr<uint8_t[]> data = nullptr;\n    uint64_t length;\n  };\n\n  FileLoader() = default;\n  virtual ~FileLoader() = default;\n  virtual FileData loadBinaryData(const std::string& /* filename */) {\n    return {};\n  }\n  [[nodiscard]] virtual bool fileExists(const std::string& /* filename */) const {\n    return false;\n  }\n  [[nodiscard]] virtual std::string basePath() const {\n    return \".\";\n  }\n  [[nodiscard]] virtual std::string fullPath(const std::string& /* filename */) const {\n    return \"\";\n  }\n\n protected:\n  FileData loadBinaryDataInternal(const std::string& filePath);\n};\n\n/// Create a cross-platform compatible file loader.\nstd::unique_ptr<FileLoader> createFileLoader();\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/fileLoader/android/FileLoaderAndroid.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/shared/fileLoader/android/FileLoaderAndroid.h>\n\n#include <android/asset_manager.h>\n// @fb-only\n// @fb-only\n#include <filesystem>\n#include <limits>\n#include <igl/Core.h>\n\nnamespace igl::shell {\n\nnamespace {\n\n// @fb-only\n  // @fb-only// Try to get ActivityThread so we can get a Context\n  // @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only // Get an Application (a Context) object from ActivityThread\n  // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n// @fb-only\n\n// @fb-only\n  // @fb-only\n    // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n      // @fb-only\n          // @fb-only\n          // @fb-only\n          // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n// @fb-only\n\n} // namespace\n\nFileLoaderAndroid::FileLoaderAndroid() {\n  // @fb-only\n}\n\nFileLoader::FileData FileLoaderAndroid::loadBinaryData(const std::string& fileName) {\n  if (fileName.empty()) {\n    IGL_LOG_ERROR(\"Error in loadBinaryData(): empty fileName\\n\");\n    return {};\n  }\n\n  if (fileExists(fileName)) {\n    if (assetManager_) {\n      // Load file\n      AAsset* asset = AAssetManager_open(assetManager_, fileName.c_str(), AASSET_MODE_BUFFER);\n      if (asset != nullptr) {\n        const off64_t length = AAsset_getLength64(asset);\n        if (IGL_DEBUG_VERIFY_NOT(length > std::numeric_limits<uint64_t>::max())) {\n          AAsset_close(asset);\n          return {};\n        }\n\n        auto data = std::make_unique<uint8_t[]>(length);\n        auto readSize = AAsset_read(asset, data.get(), length);\n        if (IGL_DEBUG_VERIFY_NOT(readSize != length)) {\n          IGL_LOG_ERROR(\"Error in loadBinaryData(): read size mismatch (%ld != %zu) in %s\\n\",\n                        readSize,\n                        length,\n                        fileName.c_str());\n        }\n        AAsset_close(asset);\n\n        return {.data = std::move(data), .length = static_cast<uint64_t>(length)};\n      }\n    }\n    // Fallback to default behavior (i.e., loading w/ C++ functions) if asset manager is not set or\n    // doesnt not contain the file.\n    return loadBinaryDataInternal(fullPath(fileName));\n  }\n\n  IGL_LOG_ERROR(\"Error in loadBinaryData(): file not found in %s\\n\", fileName.c_str());\n  return {};\n}\n\nbool FileLoaderAndroid::fileExists(const std::string& fileName) const {\n  const std::vector<uint8_t> data;\n  if (fileName.empty()) {\n    IGL_LOG_ERROR(\"Error in fileExists(): Empty fileName\\n\");\n    return false;\n  }\n\n  if (!fullPath(fileName).empty()) {\n    return true;\n  }\n  return false;\n}\n\nstd::string FileLoaderAndroid::basePath() const {\n  std::string basePath;\n  if (assetManager_) {\n    AAssetDir* assetDir = AAssetManager_openDir(assetManager_, \"\");\n    if (assetDir != nullptr) {\n      const char* fileName = AAssetDir_getNextFileName(assetDir);\n      if (fileName != nullptr) {\n        const std::filesystem::path filePath(fileName);\n        basePath = filePath.root_path();\n      }\n      AAssetDir_close(assetDir);\n    }\n  }\n  if (basePath.empty()) {\n    basePath = std::filesystem::current_path().string();\n  }\n  return basePath;\n}\n\nstd::string FileLoaderAndroid::fullPath(const std::string& fileName) const {\n  if (assetManager_) {\n    // Load file\n    AAsset* asset = AAssetManager_open(assetManager_, fileName.c_str(), AASSET_MODE_BUFFER);\n    if (asset != nullptr) {\n      AAsset_close(asset);\n      return fileName;\n    }\n  }\n  if (std::filesystem::exists(fileName)) {\n    return fileName;\n  }\n\n  auto fullPath = std::filesystem::path(\"/data/local/tmp\") / fileName;\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n\n  fullPath = std::filesystem::temp_directory_path() / fileName;\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n  return \"\";\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/fileLoader/android/FileLoaderAndroid.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#ifdef __ANDROID__\n\n#include <android/log.h>\n#include <string>\n#include <shell/shared/fileLoader/FileLoader.h>\n\nstruct AAssetManager;\n\nnamespace igl::shell {\n\nclass FileLoaderAndroid final : public FileLoader {\n public:\n  FileLoaderAndroid();\n  ~FileLoaderAndroid() override = default;\n  FileData loadBinaryData(const std::string& fileName) override;\n  [[nodiscard]] bool fileExists(const std::string& fileName) const override;\n  [[nodiscard]] std::string basePath() const override;\n  [[nodiscard]] std::string fullPath(const std::string& fileName) const override;\n\n  void setAssetManager(AAssetManager* mgr) {\n    assetManager_ = mgr;\n  }\n  [[nodiscard]] AAssetManager* getAssetManager() const noexcept {\n    return assetManager_;\n  }\n\n private:\n  AAssetManager* assetManager_ = nullptr;\n};\n\n} // namespace igl::shell\n\n#endif\n"
  },
  {
    "path": "shell/shared/fileLoader/apple/FileLoaderApple.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/fileLoader/FileLoader.h>\n\nnamespace igl::shell {\n\nclass FileLoaderApple final : public FileLoader {\n public:\n  FileLoaderApple() = default;\n  ~FileLoaderApple() override = default;\n  [[nodiscard]] FileData loadBinaryData(const std::string& fileName) override;\n  [[nodiscard]] bool fileExists(const std::string& fileName) const override;\n  [[nodiscard]] std::string basePath() const override;\n  [[nodiscard]] std::string fullPath(const std::string& fileName) const override;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/fileLoader/apple/FileLoaderApple.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/fileLoader/apple/FileLoaderApple.h>\n\n#import <Foundation/NSBundle.h> // @donotremove\n#import <Foundation/NSFileManager.h>\n#import <Foundation/NSString.h>\n#include <string>\n\nnamespace igl::shell {\nnamespace {\n// returns the NSString version of the full path of fileName within any bundle\n// it'll first attempt to find the bundle path using the full fileName\n// if not found, it'll attempt to find the bundle path using just the root of the fileName\n// a return value of nil indicates that the fileName wasn't found within ny bundle\nNSString* getBundleFilePath(const std::string& fileName) {\n  // NOLINTNEXTLINE(misc-const-correctness)\n  NSString* nsFileName = [NSString stringWithUTF8String:fileName.c_str()];\n  if (nsFileName == nil || [nsFileName length] == 0) {\n    return nil;\n  }\n\n  if ([[NSFileManager defaultManager] fileExistsAtPath:nsFileName]) {\n    return nsFileName;\n  }\n\n  // NOLINTNEXTLINE(cppcoreguidelines-init-variables)\n  for (NSBundle* bundle in [NSBundle allBundles]) {\n    NSString* nsPath = [bundle pathForResource:nsFileName ofType:nil];\n    if (nsPath != nil) {\n      return nsPath;\n    }\n\n    // next search for the root file name without the path\n    // since the bundle path may be different and flattened within the bundle\n    // NOLINTNEXTLINE(misc-const-correctness)\n    NSString* nsRootFileName = [nsFileName lastPathComponent];\n    nsPath = [[NSBundle mainBundle] pathForResource:nsRootFileName ofType:nil];\n    if (nsPath != nil) {\n      return nsPath;\n    }\n  }\n\n  return nil;\n}\n} // namespace\n\nFileLoader::FileData FileLoaderApple::loadBinaryData(const std::string& fileName) {\n  return loadBinaryDataInternal(fullPath(fileName));\n}\n\nbool FileLoaderApple::fileExists(const std::string& fileName) const {\n  // NOLINTNEXTLINE(misc-const-correctness)\n  NSString* nsPath = getBundleFilePath(fileName);\n  if (nsPath == nil) {\n    return false;\n  }\n  return [[NSFileManager defaultManager] fileExistsAtPath:nsPath];\n}\n\nstd::string FileLoaderApple::basePath() const {\n  std::string basePath;\n  const char* cstr = [[NSBundle mainBundle] resourcePath].UTF8String;\n  if (cstr != nil) {\n    basePath = std::string{cstr};\n  }\n  return basePath;\n}\n\nstd::string FileLoaderApple::fullPath(const std::string& fileName) const {\n  // NOLINTNEXTLINE(misc-const-correctness)\n  const NSString* nsPath = getBundleFilePath(fileName);\n  if (nsPath != nil) {\n    return {[nsPath UTF8String]};\n  }\n\n  return {};\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/fileLoader/linux/FileLoaderLinux.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/fileLoader/linux/FileLoaderLinux.h>\n\n#include <filesystem>\n#include <fstream>\n#include <iterator>\n#include <string>\n#include <igl/Core.h>\n// @fb-only\n// @fb-only\n// @fb-only\n\nnamespace {\n\nstd::string findSubdir(const char* subdir, const std::string& fileName) {\n  std::filesystem::path dir = std::filesystem::current_path();\n  // find `subdir` somewhere above our current directory\n  while (dir != std::filesystem::current_path().root_path() &&\n         !std::filesystem::exists(dir / subdir)) {\n    dir = dir.parent_path();\n  }\n\n  std::filesystem::path fullPath = (dir / subdir / fileName);\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n\n  dir = std::filesystem::current_path();\n\n  fullPath = (dir / \"images/\" / fileName);\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n\n  return {};\n}\n\n} // namespace\n\nnamespace igl::shell {\n\nFileLoader::FileData FileLoaderLinux::loadBinaryData(const std::string& fileName) {\n  return loadBinaryDataInternal(fullPath(fileName));\n}\n\nbool FileLoaderLinux::fileExists(const std::string& fileName) const {\n  std::ifstream file(fileName, std::ios::binary);\n  auto exists = (file.rdstate() & std::ifstream::failbit) == 0;\n  file.close();\n  return exists;\n}\n\nstd::string FileLoaderLinux::basePath() const {\n  // Return executable path:\n  return basePath_;\n}\n\nstd::string FileLoaderLinux::fullPath(const std::string& fileName) const {\n  if (std::filesystem::exists(fileName)) {\n    return fileName;\n  }\n\n  auto fullPath = std::filesystem::path(basePath_) / fileName;\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n\n  fullPath = std::filesystem::path(\"shell/resources/images\") / fileName;\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n\n  // @lint-ignore CLANGTIDY\n  const char* folders[] = {\n      \"shell/resources/images/\",\n      \"samples/resources/images/\",\n      \"samples/resources/models/\",\n      \"samples/resources/fonts/\",\n      \"samples/resources/fonts/optimistic\",\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n  };\n\n  // find folders somewhere above our current directory\n  for (const char* folder : folders) {\n    if (std::string p = findSubdir(folder, fileName); !p.empty()) {\n      return p;\n    }\n  }\n\n// @fb-only\n  // clang-format off\n  // @fb-only\n  // @fb-only\n  // @fb-only\n                                     // @fb-only\n                                     // @fb-only\n                                     // @fb-only\n                                     // @fb-only\n                                     // @fb-only\n                                     // @fb-only\n                                     // @fb-only\n                                     // @fb-only\n                                     // @fb-only\n  // clang-format on\n  // @fb-only\n    // @fb-only\n    // @fb-only\n      // @fb-only\n          // @fb-only\n      // @fb-only\n        // @fb-only\n      // @fb-only\n    // @fb-only\n  // @fb-only\n// @fb-only\n\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n  return \"\";\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/fileLoader/linux/FileLoaderLinux.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/fileLoader/FileLoader.h>\n\nnamespace igl::shell {\n\nclass FileLoaderLinux final : public FileLoader {\n public:\n  FileLoaderLinux() = default;\n  ~FileLoaderLinux() override = default;\n\n  FileData loadBinaryData(const std::string& fileName) override;\n  [[nodiscard]] bool fileExists(const std::string& fileName) const override;\n  [[nodiscard]] std::string basePath() const override;\n  [[nodiscard]] std::string fullPath(const std::string& fileName) const override;\n\n private:\n  std::string basePath_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/fileLoader/win/FileLoaderWin.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/fileLoader/win/FileLoaderWin.h>\n\n#include <filesystem>\n#include <fstream>\n#include <iterator>\n#include <string>\n#include <igl/Config.h>\n// @fb-only\n// @fb-only\n// @fb-only\n#if IGL_PLATFORM_WINDOWS\n#include <windows.h>\n#include <igl/Common.h>\n#endif\n\nnamespace {\n\nstd::string findSubdir(const char* subdir, const std::string& fileName) {\n  std::filesystem::path dir = std::filesystem::current_path();\n  // find `subdir` somewhere above our current directory\n  while (dir != std::filesystem::current_path().root_path() &&\n         !std::filesystem::exists(dir / subdir)) {\n    dir = dir.parent_path();\n  }\n\n  std::filesystem::path fullPath = (dir / subdir / fileName);\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n\n  dir = std::filesystem::current_path();\n\n  fullPath = (dir / \"images/\" / fileName);\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n\n  return {};\n}\n\n} // namespace\n\nnamespace igl::shell {\n\nFileLoaderWin::FileLoaderWin() {\n#if IGL_PLATFORM_WINDOWS\n  wchar_t path[MAX_PATH] = {0};\n  if (IGL_DEBUG_VERIFY(GetModuleFileNameW(NULL, path, MAX_PATH) != 0)) {\n    basePath_ = std::filesystem::path(path).parent_path().string();\n  }\n#endif\n}\n\nFileLoader::FileData FileLoaderWin::loadBinaryData(const std::string& fileName) {\n  return loadBinaryDataInternal(fullPath(fileName));\n}\n\nbool FileLoaderWin::fileExists(const std::string& fileName) const {\n  std::ifstream file(fileName, std::ios::binary);\n  auto exists = (file.rdstate() & std::ifstream::failbit) == 0;\n  file.close();\n  return exists;\n}\n\nstd::string FileLoaderWin::basePath() const {\n  // Return executable path:\n  return basePath_;\n}\n\nstd::string FileLoaderWin::fullPath(const std::string& fileName) const {\n  if (std::filesystem::exists(fileName)) {\n    return fileName;\n  }\n\n  auto fullPath = std::filesystem::path(basePath_) / fileName;\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n\n  fullPath = std::filesystem::path(\"shell/resources/images\") / fileName;\n  if (std::filesystem::exists(fullPath)) {\n    return fullPath.string();\n  }\n\n  // @lint-ignore CLANGTIDY\n  const char* folders[] = {\n      \"shell/resources/images/\",\n      \"samples/resources/images/\",\n      \"samples/resources/models/\",\n      \"samples/resources/fonts/\",\n      \"samples/resources/fonts/optimistic\",\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n  };\n\n  // find folders somewhere above our current directory\n  for (const char* folder : folders) {\n    if (std::string p = findSubdir(folder, fileName); !p.empty()) {\n      return p;\n    }\n  }\n\n#if !defined(IGL_CMAKE_BUILD)\n  // @lint-ignore CLANGTIDY\n  const std::string resfolders[] = {\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n      // @fb-only\n  };\n  // @fb-only\n    // @fb-only\n    // @fb-only\n      // @fb-only\n          // @fb-only\n      // @fb-only\n        // @fb-only\n      // @fb-only\n    // @fb-only\n  // @fb-only\n#endif\n\n  return fileName;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/fileLoader/win/FileLoaderWin.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/fileLoader/FileLoader.h>\n\nnamespace igl::shell {\n\nclass FileLoaderWin final : public FileLoader {\n public:\n  FileLoaderWin();\n  ~FileLoaderWin() override = default;\n  FileData loadBinaryData(const std::string& fileName) override;\n  [[nodiscard]] bool fileExists(const std::string& fileName) const override;\n  [[nodiscard]] std::string basePath() const override;\n  [[nodiscard]] std::string fullPath(const std::string& fileName) const override;\n\n private:\n  std::string basePath_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageLoader/ImageLoader.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/imageLoader/ImageLoader.h>\n\n#include <IGLU/texture_loader/ktx1/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/ktx2/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/stb_hdr/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/stb_jpeg/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/stb_png/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/xtc1/TextureLoaderFactory.h>\n#include <array>\n#include <shell/shared/fileLoader/FileLoader.h>\n\nnamespace igl::shell {\nnamespace {\nstd::vector<std::unique_ptr<iglu::textureloader::ITextureLoaderFactory>> createLoaderFactories() {\n  std::vector<std::unique_ptr<iglu::textureloader::ITextureLoaderFactory>> factories;\n  factories.reserve(6);\n  factories.emplace_back(std::make_unique<iglu::textureloader::stb::hdr::TextureLoaderFactory>());\n  factories.emplace_back(std::make_unique<iglu::textureloader::stb::jpeg::TextureLoaderFactory>());\n  factories.emplace_back(std::make_unique<iglu::textureloader::stb::png::TextureLoaderFactory>());\n  factories.emplace_back(std::make_unique<iglu::textureloader::ktx2::TextureLoaderFactory>());\n  factories.emplace_back(std::make_unique<iglu::textureloader::ktx1::TextureLoaderFactory>());\n  factories.emplace_back(std::make_unique<iglu::textureloader::xtc1::TextureLoaderFactory>());\n\n  return factories;\n}\n\nconstexpr uint32_t kWidth = 8, kHeight = 8;\nconstexpr uint32_t kWhite = 0xFFFFFFFF, kBlack = 0xFF000000;\nconstexpr std::array<uint32_t, 64> kCheckerboard = {\n    kBlack, kBlack, kWhite, kWhite, kBlack, kBlack, kWhite, kWhite, kBlack, kBlack, kWhite,\n    kWhite, kBlack, kBlack, kWhite, kWhite, kWhite, kWhite, kBlack, kBlack, kWhite, kWhite,\n    kBlack, kBlack, kWhite, kWhite, kBlack, kBlack, kWhite, kWhite, kBlack, kBlack, kBlack,\n    kBlack, kWhite, kWhite, kBlack, kBlack, kWhite, kWhite, kBlack, kBlack, kWhite, kWhite,\n    kBlack, kBlack, kWhite, kWhite, kWhite, kWhite, kBlack, kBlack, kWhite, kWhite, kBlack,\n    kBlack, kWhite, kWhite, kBlack, kBlack, kWhite, kWhite, kBlack, kBlack,\n};\nconstexpr std::array<uint32_t, 64> kWhiteTexture = {\n    kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite,\n    kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite,\n    kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite,\n    kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite,\n    kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite,\n    kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite, kWhite,\n};\nconstexpr uint32_t kNumBytes = kWidth * kHeight * 4u;\n\nclass CheckerboardData : public iglu::textureloader::IData {\n public:\n  [[nodiscard]] const uint8_t* IGL_NONNULL data() const noexcept final;\n  [[nodiscard]] uint64_t size() const noexcept final;\n};\n\nconst uint8_t* IGL_NONNULL CheckerboardData::data() const noexcept {\n  return reinterpret_cast<const uint8_t*>(kCheckerboard.data());\n}\n\nuint64_t CheckerboardData::size() const noexcept {\n  return kNumBytes;\n}\n\nclass WhiteData : public iglu::textureloader::IData {\n public:\n  [[nodiscard]] const uint8_t* IGL_NONNULL data() const noexcept final;\n  [[nodiscard]] uint64_t size() const noexcept final;\n};\n\nconst uint8_t* IGL_NONNULL WhiteData::data() const noexcept {\n  return reinterpret_cast<const uint8_t*>(kWhiteTexture.data());\n}\n\nuint64_t WhiteData::size() const noexcept {\n  return kNumBytes;\n}\n} // namespace\n\nImageLoader::ImageLoader(FileLoader& fileLoader) :\n  fileLoader_(fileLoader),\n  factory_(std::make_unique<iglu::textureloader::TextureLoaderFactory>(createLoaderFactories())) {}\n\nImageData ImageLoader::defaultLoadImageData(const std::string& imageName,\n                                            std::optional<TextureFormat> preferredFormat) noexcept {\n  const std::string fullName = fileLoader().fullPath(imageName);\n\n  return loadImageDataFromFile(fullName, preferredFormat);\n}\n\nImageData ImageLoader::loadImageDataFromFile(\n    const std::string& fileName,\n    std::optional<TextureFormat> preferredFormat) noexcept {\n  auto [data, length] = fileLoader_.loadBinaryData(fileName);\n  if (IGL_DEBUG_VERIFY(data && length > 0)) {\n    return loadImageDataFromMemory(data.get(), length, preferredFormat);\n  }\n\n  return {};\n}\n\nImageData ImageLoader::loadImageDataFromMemory(\n    const uint8_t* data,\n    uint32_t length,\n    std::optional<TextureFormat> preferredFormat) noexcept {\n  if (data == nullptr) {\n    return {};\n  }\n\n  Result result;\n  auto loader = preferredFormat ? factory_->tryCreate(data, length, *preferredFormat, &result)\n                                : factory_->tryCreate(data, length, &result);\n  if (loader == nullptr || !result.isOk()) {\n    return {};\n  }\n\n  auto texData = loader->load(&result);\n  if (texData == nullptr || !result.isOk()) {\n    return {};\n  }\n\n  ImageData imageData;\n  imageData.data = std::move(texData);\n  imageData.desc = loader->descriptor();\n  imageData.mipLevelBytes = loader->mipLevelBytes();\n\n  return imageData;\n}\n\nImageData ImageLoader::checkerboard() noexcept {\n  ImageData imageData;\n  imageData.data = std::make_unique<CheckerboardData>();\n  imageData.desc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                      kWidth,\n                                      kHeight,\n                                      TextureDesc::TextureUsageBits::Sampled,\n                                      \"Checkerboard\");\n  imageData.desc.numMipLevels = TextureDesc::calcNumMipLevels(kWidth, kHeight);\n\n  return imageData;\n}\n\nImageData ImageLoader::white() noexcept {\n  ImageData imageData;\n  imageData.data = std::make_unique<WhiteData>();\n  imageData.desc = TextureDesc::new2D(\n      TextureFormat::RGBA_UNorm8, kWidth, kHeight, TextureDesc::TextureUsageBits::Sampled, \"White\");\n  imageData.desc.numMipLevels = TextureDesc::calcNumMipLevels(kWidth, kHeight);\n\n  return imageData;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageLoader/ImageLoader.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <IGLU/texture_loader/IData.h>\n#include <IGLU/texture_loader/TextureLoaderFactory.h>\n#include <memory>\n#include <optional>\n#include <string>\n#include <vector>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass FileLoader;\n\nstruct ImageData {\n  TextureDesc desc;\n  std::unique_ptr<iglu::textureloader::IData> data;\n  std::vector<uint32_t> mipLevelBytes;\n};\n\nclass ImageLoader {\n public:\n  explicit ImageLoader(FileLoader& fileLoader);\n  virtual ~ImageLoader() = default;\n  virtual ImageData loadImageData(const std::string& imageName,\n                                  std::optional<TextureFormat> preferredFormat = {}) noexcept {\n    return defaultLoadImageData(imageName, preferredFormat);\n  }\n  static ImageData checkerboard() noexcept;\n  static ImageData white() noexcept;\n\n  [[nodiscard]] virtual ImageData loadImageDataFromFile(\n      const std::string& fileName,\n      std::optional<TextureFormat> preferredFormat = {}) noexcept;\n  [[nodiscard]] ImageData loadImageDataFromMemory(\n      const uint8_t* data,\n      uint32_t length,\n      std::optional<TextureFormat> preferredFormat = {}) noexcept;\n\n  [[nodiscard]] const FileLoader& fileLoader() const noexcept {\n    return fileLoader_;\n  }\n\n  [[nodiscard]] FileLoader& fileLoader() noexcept {\n    return fileLoader_;\n  }\n\n private:\n  ImageData defaultLoadImageData(const std::string& imageName,\n                                 std::optional<TextureFormat> preferredFormat) noexcept;\n\n  FileLoader& fileLoader_;\n  std::unique_ptr<iglu::textureloader::TextureLoaderFactory> factory_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageLoader/tests/ImageLoaderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <shell/shared/imageLoader/ImageLoader.h>\n\n#include <cstring>\n\nnamespace igl::shell::tests {\n\nclass ImageLoaderTest : public ::testing::Test {\n public:\n  void SetUp() override {}\n  void TearDown() override {}\n};\n\nTEST_F(ImageLoaderTest, CheckerboardReturnsValidData) {\n  auto imageData = ImageLoader::checkerboard();\n\n  EXPECT_NE(imageData.data, nullptr);\n  EXPECT_EQ(imageData.data->size(), 8u * 8u * 4u);\n  EXPECT_NE(imageData.data->data(), nullptr);\n  EXPECT_EQ(imageData.desc.width, 8u);\n  EXPECT_EQ(imageData.desc.height, 8u);\n}\n\nTEST_F(ImageLoaderTest, WhiteReturnsValidData) {\n  auto imageData = ImageLoader::white();\n\n  EXPECT_NE(imageData.data, nullptr);\n  EXPECT_EQ(imageData.data->size(), 8u * 8u * 4u);\n  EXPECT_NE(imageData.data->data(), nullptr);\n  EXPECT_EQ(imageData.desc.width, 8u);\n  EXPECT_EQ(imageData.desc.height, 8u);\n}\n\nTEST_F(ImageLoaderTest, CheckerboardDataIsReadable) {\n  auto imageData = ImageLoader::checkerboard();\n\n  ASSERT_NE(imageData.data, nullptr);\n  const uint8_t* dataPtr = imageData.data->data();\n  ASSERT_NE(dataPtr, nullptr);\n\n  uint32_t firstPixel = 0;\n  std::memcpy(&firstPixel, dataPtr, sizeof(uint32_t));\n  EXPECT_EQ(firstPixel, 0xFF000000u);\n}\n\nTEST_F(ImageLoaderTest, WhiteDataIsAllWhite) {\n  auto imageData = ImageLoader::white();\n\n  ASSERT_NE(imageData.data, nullptr);\n  const uint8_t* dataPtr = imageData.data->data();\n  ASSERT_NE(dataPtr, nullptr);\n\n  uint32_t firstPixel = 0;\n  std::memcpy(&firstPixel, dataPtr, sizeof(uint32_t));\n  EXPECT_EQ(firstPixel, 0xFFFFFFFFu);\n}\n\n} // namespace igl::shell::tests\n"
  },
  {
    "path": "shell/shared/imageWriter/ImageWriter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <string>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\n\nclass ImageWriter {\n public:\n  ImageWriter() = default;\n  virtual ~ImageWriter() = default;\n  virtual void writeImage(const std::string& imageName,\n                          const ImageData& imageData,\n                          bool flipY = true) const noexcept = 0;\n\n private:\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageWriter/android/ImageWriterAndroid.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/imageWriter/stb/ImageWriterSTB.h>\n\nnamespace igl::shell {\n\nusing ImageWriterAndroid = ImageWriterSTB;\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageWriter/ios/ImageWriterIos.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <shell/shared/imageWriter/ImageWriter.h>\n\nnamespace igl::shell {\n\nclass ImageWriterIos final : public ImageWriter {\n public:\n  ImageWriterIos() = default;\n  ~ImageWriterIos() override = default;\n  void writeImage(const std::string& /*imageAbsolutePath*/,\n                  const ImageData& imageData,\n                  bool flipY = true) const noexcept override;\n\n private:\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageWriter/ios/ImageWriterIos.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/imageWriter/ios/ImageWriterIos.h>\n\n#import <Foundation/Foundation.h>\n#import <UIKit/UIKit.h>\n#include <igl/IGL.h>\n\nnamespace igl::shell {\nvoid ImageWriterIos::writeImage(const std::string& /*imageAbsolutePath*/,\n                                const ImageData& /*imageData*/,\n                                bool /*flipY*/) const noexcept {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageWriter/linux/ImageWriterLinux.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/imageWriter/stb/ImageWriterSTB.h>\n\nnamespace igl::shell {\nusing ImageWriterLinux = ImageWriterSTB;\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageWriter/mac/ImageWriterMac.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/imageWriter/stb/ImageWriterSTB.h>\n\nnamespace igl::shell {\nusing ImageWriterMac = ImageWriterSTB;\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageWriter/stb/ImageWriterSTB.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/imageWriter/stb/ImageWriterSTB.h>\n\n#include <limits>\n#include <string>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <igl/IGL.h>\n#if defined(IGL_CMAKE_BUILD)\n#define STB_IMAGE_WRITE_IMPLEMENTATION\n#endif // IGL_CMAKE_BUILD\n#include <stb_image_write.h>\n\nnamespace igl::shell {\n\nvoid ImageWriterSTB::writeImage(const std::string& imageAbsolutePath,\n                                const ImageData& imageData,\n                                bool flipY) const noexcept {\n  if (imageData.desc.width * 4 > std::numeric_limits<int>::max() ||\n      imageData.desc.height > std::numeric_limits<int>::max()) {\n    IGLLog(IGLLogError, \"Failed saving the file: %s\", imageAbsolutePath.c_str());\n    return;\n  }\n  stbi_flip_vertically_on_write(static_cast<int>(flipY));\n\n  IGL_DEBUG_ASSERT(imageAbsolutePath.length() > 4);\n  auto ext = imageAbsolutePath.substr(imageAbsolutePath.length() - 4);\n  std::transform(ext.begin(), ext.end(), ext.begin(), ::tolower);\n  int ret = 0;\n  if (ext == \".png\") {\n    ret = stbi_write_png(imageAbsolutePath.c_str(),\n                         static_cast<int>(imageData.desc.width),\n                         static_cast<int>(imageData.desc.height),\n                         4,\n                         imageData.data->data(),\n                         /*int stride_in_bytes*/ 4 * static_cast<int>(imageData.desc.width));\n  } else if (ext == \".bmp\") {\n    ret = stbi_write_bmp(imageAbsolutePath.c_str(),\n                         static_cast<int>(imageData.desc.width),\n                         static_cast<int>(imageData.desc.height),\n                         4,\n                         imageData.data->data());\n  }\n  if (!ret) {\n    IGLLog(IGLLogError, \"Failed saving the file: %s\", imageAbsolutePath.c_str());\n  }\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageWriter/stb/ImageWriterSTB.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <shell/shared/imageWriter/ImageWriter.h>\n\nnamespace igl::shell {\n\nclass ImageWriterSTB final : public ImageWriter {\n public:\n  void writeImage(const std::string& /*imageAbsolutePath*/,\n                  const ImageData& imageData,\n                  bool flipY = true) const noexcept override;\n\n private:\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/imageWriter/win/ImageWriterWin.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/imageWriter/stb/ImageWriterSTB.h>\n\nnamespace igl::shell {\nusing ImageWriterWin = ImageWriterSTB;\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/input/InputDispatcher.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/shared/input/InputDispatcher.h>\n\n#include <shell/shared/input/MouseListener.h>\n#include <shell/shared/input/TouchListener.h>\n\nnamespace igl::shell {\n\nvoid InputDispatcher::processEvents() {\n  const std::lock_guard guard(mutex_);\n\n  while (!events_.empty()) {\n    auto& event = events_.front();\n\n    if (event.type == EventType::MouseButton || event.type == EventType::MouseMotion ||\n        event.type == EventType::MouseWheel) {\n      for (auto& listener : mouseListeners_) {\n        if (event.type == EventType::MouseButton &&\n            listener->process(std::get<MouseButtonEvent>(event.data))) {\n          break;\n        }\n        if (event.type == EventType::MouseMotion &&\n            listener->process(std::get<MouseMotionEvent>(event.data))) {\n          break;\n        }\n        if (event.type == EventType::MouseWheel &&\n            listener->process(std::get<MouseWheelEvent>(event.data))) {\n          break;\n        }\n      }\n    } else if (event.type == EventType::Touch) {\n      for (auto& listener : touchListeners_) {\n        if (listener->process(std::get<TouchEvent>(event.data))) {\n          break;\n        }\n      }\n    } else if (event.type == EventType::Key) {\n      for (auto& listener : keyListeners_) {\n        if (listener->process(std::get<KeyEvent>(event.data))) {\n          break;\n        }\n      }\n    } else if (event.type == EventType::Char) {\n      for (auto& listener : keyListeners_) {\n        if (listener->process(std::get<CharEvent>(event.data))) {\n          break;\n        }\n      }\n    } else if (event.type == EventType::Ray) {\n      for (auto& listener : rayListeners_) {\n        if (listener->process(std::get<RayEvent>(event.data))) {\n          break;\n        }\n      }\n    } else if (event.type == EventType::Intent) {\n      for (auto& listener : intentListeners_) {\n        if (listener->process(std::get<IntentEvent>(event.data))) {\n          break;\n        }\n      }\n    }\n\n    events_.pop();\n  }\n}\n\nvoid InputDispatcher::addMouseListener(const std::shared_ptr<IMouseListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  mouseListeners_.push_back(listener);\n}\n\nvoid InputDispatcher::removeMouseListener(const std::shared_ptr<IMouseListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  for (int i = mouseListeners_.size() - 1; i >= 0; --i) {\n    if (listener.get() == mouseListeners_[i].get()) {\n      mouseListeners_.erase(mouseListeners_.begin() + i);\n    }\n  }\n}\n\nvoid InputDispatcher::addTouchListener(const std::shared_ptr<ITouchListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  touchListeners_.push_back(listener);\n}\n\nvoid InputDispatcher::removeTouchListener(const std::shared_ptr<ITouchListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  for (int i = touchListeners_.size() - 1; i >= 0; --i) {\n    if (listener.get() == touchListeners_[i].get()) {\n      touchListeners_.erase(touchListeners_.begin() + i);\n    }\n  }\n}\n\nvoid InputDispatcher::addKeyListener(const std::shared_ptr<IKeyListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  keyListeners_.push_back(listener);\n}\n\nvoid InputDispatcher::removeKeyListener(const std::shared_ptr<IKeyListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  for (int i = keyListeners_.size() - 1; i >= 0; --i) {\n    if (listener.get() == keyListeners_[i].get()) {\n      keyListeners_.erase(keyListeners_.begin() + i);\n    }\n  }\n}\n\nvoid InputDispatcher::addRayListener(const std::shared_ptr<IRayListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  rayListeners_.push_back(listener);\n}\n\nvoid InputDispatcher::removeRayListener(const std::shared_ptr<IRayListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  for (int i = rayListeners_.size() - 1; i >= 0; --i) {\n    if (listener.get() == rayListeners_[i].get()) {\n      rayListeners_.erase(rayListeners_.begin() + i);\n    }\n  }\n}\n\nvoid InputDispatcher::addIntentListener(const std::shared_ptr<IIntentListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  intentListeners_.push_back(listener);\n}\n\nvoid InputDispatcher::removeIntentListener(const std::shared_ptr<IIntentListener>& listener) {\n  const std::lock_guard guard(mutex_);\n  for (int i = rayListeners_.size() - 1; i >= 0; --i) {\n    if (listener.get() == intentListeners_[i].get()) {\n      intentListeners_.erase(intentListeners_.begin() + i);\n    }\n  }\n}\n\nvoid InputDispatcher::queueEvent(const MouseButtonEvent& event) {\n  const std::lock_guard guard(mutex_);\n  InputDispatcher::Event evt;\n  evt.type = EventType::MouseButton;\n  evt.data = event;\n  events_.push(evt);\n}\n\nvoid InputDispatcher::queueEvent(const MouseMotionEvent& event) {\n  const std::lock_guard guard(mutex_);\n  InputDispatcher::Event evt;\n  evt.type = EventType::MouseMotion;\n  evt.data = event;\n  events_.push(evt);\n}\n\nvoid InputDispatcher::queueEvent(const MouseWheelEvent& event) {\n  const std::lock_guard guard(mutex_);\n  InputDispatcher::Event evt;\n  evt.type = EventType::MouseWheel;\n  evt.data = event;\n  events_.push(evt);\n}\n\nvoid InputDispatcher::queueEvent(const TouchEvent& event) {\n  const std::lock_guard guard(mutex_);\n\n  InputDispatcher::Event evt;\n  evt.type = EventType::Touch;\n  evt.data = event;\n  events_.push(evt);\n}\n\nvoid InputDispatcher::queueEvent(const RayEvent& event) {\n  const std::lock_guard guard(mutex_);\n\n  InputDispatcher::Event evt;\n  evt.type = EventType::Ray;\n  evt.data = event;\n  events_.push(evt);\n}\n\nvoid InputDispatcher::queueEvent(const IntentEvent& event) {\n  const std::lock_guard guard(mutex_);\n\n  InputDispatcher::Event evt;\n  evt.type = EventType::Intent;\n  evt.data = event;\n  events_.push(evt);\n}\n\nvoid InputDispatcher::queueEvent(const KeyEvent& event) {\n  const std::lock_guard guard(mutex_);\n\n  InputDispatcher::Event evt;\n  evt.type = EventType::Key;\n  evt.data = event;\n  events_.push(evt);\n}\n\nvoid InputDispatcher::queueEvent(const CharEvent& event) {\n  const std::lock_guard guard(mutex_);\n\n  InputDispatcher::Event evt;\n  evt.type = EventType::Char;\n  evt.data = event;\n  events_.push(evt);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/input/InputDispatcher.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <mutex>\n#include <queue>\n#include <variant>\n#include <vector>\n#include <shell/shared/input/IntentListener.h>\n#include <shell/shared/input/KeyListener.h>\n#include <shell/shared/input/MouseListener.h>\n#include <shell/shared/input/RayListener.h>\n#include <shell/shared/input/TouchListener.h>\n\nnamespace igl::shell {\n\nclass InputDispatcher {\n public:\n  // Consumer methods\n  void addMouseListener(const std::shared_ptr<IMouseListener>& listener);\n  void removeMouseListener(const std::shared_ptr<IMouseListener>& listener);\n\n  void addTouchListener(const std::shared_ptr<ITouchListener>& listener);\n  void removeTouchListener(const std::shared_ptr<ITouchListener>& listener);\n\n  void addKeyListener(const std::shared_ptr<IKeyListener>& listener);\n  void removeKeyListener(const std::shared_ptr<IKeyListener>& listener);\n\n  void addRayListener(const std::shared_ptr<IRayListener>& listener);\n  void removeRayListener(const std::shared_ptr<IRayListener>& listener);\n\n  void addIntentListener(const std::shared_ptr<IIntentListener>& listener);\n  void removeIntentListener(const std::shared_ptr<IIntentListener>& listener);\n\n  // Platform methods\n  void queueEvent(const MouseButtonEvent& event);\n  void queueEvent(const MouseMotionEvent& event);\n  void queueEvent(const MouseWheelEvent& event);\n  void queueEvent(const TouchEvent& event);\n  void queueEvent(const KeyEvent& event);\n  void queueEvent(const CharEvent& event);\n  void queueEvent(const RayEvent& event);\n  void queueEvent(const IntentEvent& event);\n\n  void processEvents();\n\n private:\n  enum class EventType {\n    // Mouse\n    MouseButton,\n    MouseMotion,\n    MouseWheel,\n    // Touch\n    Touch,\n    // Key\n    Key,\n    Char,\n    // Ray\n    Ray,\n    // Intent\n    Intent,\n  };\n\n  struct Event {\n    EventType type;\n    using Data = std::variant<MouseButtonEvent,\n                              MouseMotionEvent,\n                              MouseWheelEvent,\n                              TouchEvent,\n                              KeyEvent,\n                              CharEvent,\n                              RayEvent,\n                              IntentEvent>;\n    Data data;\n  };\n\n  std::mutex mutex_;\n  std::vector<std::shared_ptr<IMouseListener>> mouseListeners_;\n  std::vector<std::shared_ptr<ITouchListener>> touchListeners_;\n  std::vector<std::shared_ptr<IKeyListener>> keyListeners_;\n  std::vector<std::shared_ptr<IRayListener>> rayListeners_;\n  std::vector<std::shared_ptr<IIntentListener>> intentListeners_;\n  std::queue<Event> events_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/input/IntentListener.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <string>\n\nnamespace igl::shell {\n\nenum class IntentType : uint8_t {\n  ActionView,\n};\n\nstruct IntentEvent {\n  IntentType type;\n  std::string data;\n};\n\nclass IIntentListener {\n public:\n  virtual bool process(const IntentEvent& event) = 0;\n  virtual ~IIntentListener() = default;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/input/KeyListener.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <string>\n\nnamespace igl::shell {\n\nenum {\n  kKeyEventModifierNone = 0,\n  kKeyEventModifierShift = 1 << 0,\n  kKeyEventModifierControl = 1 << 1,\n  kKeyEventModifierOption = 1 << 2,\n  kKeyEventModifierCapsLock = 1 << 3,\n  kKeyEventModifierNumLock = 1 << 4,\n  kKeyEventModifierCommand = 1 << 5,\n};\n\nstruct KeyEvent {\n  int key;\n  bool isDown;\n  uint32_t modifiers;\n\n  KeyEvent() = default;\n  KeyEvent(bool isDown, int key, uint32_t modifiers = kKeyEventModifierNone) :\n    key(key), isDown(isDown), modifiers(modifiers) {}\n};\n\nstruct CharEvent {\n  int character;\n};\n\nclass IKeyListener {\n public:\n  virtual bool process(const KeyEvent& /*event*/) {\n    return false;\n  }\n  virtual bool process(const CharEvent& /*event*/) {\n    return false;\n  }\n\n  virtual ~IKeyListener() = default;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/input/MouseListener.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nnamespace igl::shell {\n\nenum MouseButton {\n  Left = 0,\n  Right = 1,\n  Middle = 2,\n};\n\nstruct MouseButtonEvent {\n  MouseButton button;\n  bool isDown;\n  float x;\n  float y;\n\n  MouseButtonEvent() = default;\n  MouseButtonEvent(MouseButton button, bool isDown, float x, float y) :\n    button(button), isDown(isDown), x(x), y(y) {}\n};\n\nstruct MouseMotionEvent {\n  float x;\n  float y;\n  float dx;\n  float dy;\n\n  MouseMotionEvent() = default;\n  MouseMotionEvent(float x, float y, float dx, float dy) : x(x), y(y), dx(dx), dy(dy) {}\n};\n\nstruct MouseWheelEvent {\n  float dx;\n  float dy;\n  MouseWheelEvent() = default;\n  MouseWheelEvent(float dx, float dy) : dx(dx), dy(dy) {}\n};\n\nclass IMouseListener {\n public:\n  virtual bool process(const MouseButtonEvent& event) = 0;\n  virtual bool process(const MouseMotionEvent& event) = 0;\n  virtual bool process(const MouseWheelEvent& event) = 0;\n\n  virtual ~IMouseListener() = default;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/input/RayListener.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <glm/vec3.hpp>\n\nnamespace igl::shell {\n\nstruct RayEvent {\n  glm::vec3 start;\n  glm::vec3 end;\n  bool buttonPressed = false;\n};\n\nclass IRayListener {\n public:\n  virtual bool process(const RayEvent& event) = 0;\n  virtual ~IRayListener() = default;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/input/TouchListener.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nnamespace igl::shell {\n\nstruct TouchEvent {\n  bool isDown;\n  float x;\n  float y;\n  float dx;\n  float dy;\n\n  TouchEvent() = default;\n  TouchEvent(bool isDown, float x, float y, float dx, float dy) :\n    isDown(isDown), x(x), y(y), dx(dx), dy(dy) {}\n};\n\nclass ITouchListener {\n public:\n  virtual bool process(const TouchEvent& event) = 0;\n\n  virtual ~ITouchListener() = default;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/netservice/NetService.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <string>\n#include <shell/shared/netservice/Stream.h>\n#include <igl/Core.h>\n\nnamespace igl::shell::netservice {\n\nclass NetService {\n public:\n  struct Delegate {\n    virtual ~Delegate() = default;\n    virtual void willPublish(NetService& sender) noexcept = 0;\n    virtual void didNotPublish(NetService& sender, int errorCode, int errorDomain) noexcept = 0;\n    virtual void didPublish(NetService& sender) noexcept = 0;\n    virtual void willResolve(NetService& sender) noexcept = 0;\n    virtual void didNotResolve(NetService& sender, int errorCode, int errorDomain) noexcept = 0;\n    virtual void didResolveAddress(NetService& sender) noexcept = 0;\n    virtual void didStop(NetService& sender) noexcept = 0;\n    virtual void didAcceptConnection(NetService& sender,\n                                     std::shared_ptr<InputStream> inputStream,\n                                     std::shared_ptr<OutputStream> outputStream) noexcept = 0;\n  };\n\n  virtual ~NetService() = default;\n  virtual void publish() noexcept = 0;\n\n  [[nodiscard]] virtual std::shared_ptr<InputStream> getInputStream() const noexcept = 0;\n  [[nodiscard]] virtual std::shared_ptr<OutputStream> getOutputStream() const noexcept = 0;\n  [[nodiscard]] virtual std::string getName() const noexcept = 0;\n\n  [[nodiscard]] Delegate* delegate() const noexcept {\n    return delegate_.get();\n  }\n\n  void setDelegate(std::unique_ptr<Delegate> delegate) noexcept {\n    IGL_DEBUG_ASSERT(delegate && delegate.get());\n    delegate_ = std::move(delegate);\n  }\n\n private:\n  std::unique_ptr<Delegate> delegate_;\n};\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/NetServiceExtension.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/netservice/NetServiceExtension.h>\n\nnamespace igl::shell::netservice {\n\nconst char* NetServiceExtension::name() noexcept {\n  return \"IglShellNetService\";\n}\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/NetServiceExtension.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <functional>\n#include <memory>\n#include <string_view>\n#include <shell/shared/extension/Extension.h>\n#include <shell/shared/netservice/NetService.h>\n\nnamespace igl::shell::netservice {\n\nclass NetServiceExtension : public Extension {\n public:\n  static const char* name() noexcept;\n\n  // Return true to keep searching or false to stop searching.\n  using DidFindService = std::function<\n      bool(NetServiceExtension& sender, std::unique_ptr<NetService> service, bool moreComing)>;\n\n  [[nodiscard]] virtual std::unique_ptr<NetService> create(std::string_view domain,\n                                                           std::string_view type,\n                                                           std::string_view name,\n                                                           int port) const noexcept = 0;\n\n  virtual void search(std::string_view domain, std::string_view type) const noexcept = 0;\n\n  [[nodiscard]] const DidFindService& delegate() const noexcept {\n    return delegate_;\n  }\n\n  void setDelegate(DidFindService delegate) noexcept {\n    delegate_ = std::move(delegate);\n  }\n\n private:\n  DidFindService delegate_;\n};\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/NetServiceFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <shell/shared/netservice/NetService.h>\n\nnamespace igl::shell::netservice {\n\nclass NetServiceFactory {\n public:\n  virtual ~NetServiceFactory() = default;\n  [[nodiscard]] virtual std::unique_ptr<NetService> create(std::string domain,\n                                                           std::string type,\n                                                           std::string name,\n                                                           int port) const noexcept = 0;\n\n  [[nodiscard]] virtual std::unique_ptr<NetService> search(std::string domain,\n                                                           std::string type) const noexcept = 0;\n};\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/Stream.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <cstdint>\n#include <functional>\n\nnamespace igl::shell::netservice {\n\n// ----------------------------------------------------------------------------\n\nstruct Stream {\n  enum class Event : uint8_t {\n    None = 0,\n    OpenCompleted,\n    HasBytesAvailable,\n    HasSpaceAvailable,\n    ErrorOccurred,\n    EndEncountered,\n  };\n\n  enum class Status : uint8_t {\n    AtEnd,\n    Closed,\n    Error,\n    NotOpen,\n    Open,\n    Opening,\n    Reading,\n    Writing,\n  };\n\n  using Observer = std::function<void(Stream& sender, Event event)>;\n\n  virtual ~Stream() = default;\n\n  virtual void open() noexcept = 0;\n  [[nodiscard]] virtual Status status() const noexcept = 0;\n  virtual void close() noexcept = 0;\n\n  [[nodiscard]] const Observer& observer() const noexcept {\n    return observer_;\n  }\n\n  void setObserver(Observer observer) noexcept {\n    observer_ = std::move(observer);\n  }\n\n private:\n  Observer observer_;\n};\n\n// ----------------------------------------------------------------------------\n\nstruct InputStream : Stream {\n  virtual int read(uint8_t* outBuffer, size_t maxLength) const noexcept = 0;\n  virtual bool getBuffer(uint8_t*& outBuffer, size_t& outLength) const noexcept = 0;\n  [[nodiscard]] virtual bool hasBytesAvailable() const noexcept = 0;\n};\n\n// ----------------------------------------------------------------------------\n\nstruct OutputStream : Stream {\n  virtual int write(const uint8_t* buffer, size_t maxLength) noexcept = 0;\n  [[nodiscard]] virtual bool hasSpaceAvailable() const noexcept = 0;\n};\n\n// ----------------------------------------------------------------------------\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/apple/NetServiceApple.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <string>\n#include <shell/shared/netservice/NetService.h>\n#include <shell/shared/netservice/apple/StreamApple.h>\n\n@class NSNetService;\n@protocol NSNetServiceDelegate;\n\nnamespace igl::shell::netservice {\n\nclass NetServiceApple final : public NetService {\n public:\n  NetServiceApple(std::string_view domain, std::string_view type, std::string_view name);\n  NetServiceApple(NSNetService* netService);\n  ~NetServiceApple() final;\n  NetServiceApple(const NetServiceApple&) = delete;\n  NetServiceApple& operator=(const NetServiceApple&) = delete;\n  NetServiceApple(NetServiceApple&&) = delete;\n  NetServiceApple& operator=(NetServiceApple&&) = delete;\n\n  void publish() noexcept final;\n  [[nodiscard]] std::shared_ptr<InputStream> getInputStream() const noexcept final;\n  [[nodiscard]] std::shared_ptr<OutputStream> getOutputStream() const noexcept final;\n  [[nodiscard]] std::string getName() const noexcept final;\n\n  [[nodiscard]] InputStreamApple& inputStream() const noexcept {\n    return *inputStream_;\n  }\n\n  [[nodiscard]] OutputStreamApple& outputStream() const noexcept {\n    return *outputStream_;\n  }\n\n protected:\n  void initialize();\n\n private:\n  NSNetService* netService_ = nil;\n  id<NSNetServiceDelegate> netServiceDelegateAdapter_ = nil;\n  std::shared_ptr<InputStreamApple> inputStream_;\n  std::shared_ptr<OutputStreamApple> outputStream_;\n};\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/apple/NetServiceApple.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/shared/netservice/apple/NetServiceApple.h>\n\n#include <igl/Assert.h>\n\n// ----------------------------------------------------------------------------\n\n@interface IGLShellNetServiceDelegateAdapter : NSObject <NSNetServiceDelegate> {\n  igl::shell::netservice::NetServiceApple* _owner; // weak ref\n}\n@end\n\n@implementation IGLShellNetServiceDelegateAdapter\n- (id)initWithOwner:(igl::shell::netservice::NetServiceApple*)owner {\n  self = [super init];\n  if (self) {\n    self->_owner = owner;\n  }\n  return self;\n}\n\n- (void)netServiceWillPublish:(NSNetService*)sender {\n  auto* target = (_owner ? _owner->delegate() : nullptr);\n  if (target) {\n    target->willPublish(*_owner);\n  }\n}\n\n- (void)netService:(NSNetService*)sender\n     didNotPublish:(NSDictionary<NSString*, NSNumber*>*)errorDict {\n  auto* target = (_owner ? _owner->delegate() : nullptr);\n  if (target) {\n    int errorCode = [[errorDict valueForKey:NSNetServicesErrorCode] intValue];\n    int errorDomain = [[errorDict valueForKey:NSNetServicesErrorDomain] intValue];\n    target->didNotPublish(*_owner, errorCode, errorDomain);\n  }\n}\n\n- (void)netServiceDidPublish:(NSNetService*)sender {\n  auto* target = (_owner ? _owner->delegate() : nullptr);\n  if (target) {\n    target->didPublish(*_owner);\n  }\n}\n\n- (void)netServiceWillResolve:(NSNetService*)sender {\n  auto* target = (_owner ? _owner->delegate() : nullptr);\n  if (target) {\n    target->willResolve(*_owner);\n  }\n}\n\n- (void)netService:(NSNetService*)sender\n     didNotResolve:(NSDictionary<NSString*, NSNumber*>*)errorDict {\n  auto* target = (_owner ? _owner->delegate() : nullptr);\n  if (target) {\n    int errorCode = [[errorDict valueForKey:NSNetServicesErrorCode] intValue];\n    int errorDomain = [[errorDict valueForKey:NSNetServicesErrorDomain] intValue];\n    target->didNotResolve(*_owner, errorCode, errorDomain);\n  }\n}\n\n- (void)netServiceDidResolveAddress:(NSNetService*)sender {\n  auto* target = (_owner ? _owner->delegate() : nullptr);\n  if (target) {\n    target->didResolveAddress(*_owner);\n  }\n}\n\n- (void)netServiceDidStop:(NSNetService*)sender {\n  auto* target = (_owner ? _owner->delegate() : nullptr);\n  if (target) {\n    target->didStop(*_owner);\n  }\n}\n\n- (void)netService:(NSNetService*)sender\n    didAcceptConnectionWithInputStream:(NSInputStream*)inputStream\n                          outputStream:(NSOutputStream*)outputStream {\n  auto* target = (_owner ? _owner->delegate() : nullptr);\n  if (target) {\n    auto input = std::make_shared<igl::shell::netservice::InputStreamApple>();\n    input->initialize(inputStream);\n    auto output = std::make_shared<igl::shell::netservice::OutputStreamApple>();\n    output->initialize(outputStream);\n\n    target->didAcceptConnection(*_owner, std::move(input), std::move(output));\n  }\n}\n\n@end\n\n// ----------------------------------------------------------------------------\n\nnamespace igl::shell::netservice {\nnamespace {\nNSString* fromStringView(std::string_view str) {\n  return [[NSString alloc] initWithBytes:str.data()\n                                  length:str.size()\n                                encoding:NSUTF8StringEncoding];\n}\n} // namespace\n\nNetServiceApple::NetServiceApple(std::string_view domainStr,\n                                 std::string_view typeStr,\n                                 std::string_view nameStr) {\n  NSString* domain = fromStringView(domainStr);\n  NSString* type = fromStringView(typeStr);\n  NSString* name = fromStringView(nameStr);\n\n  // Use port 0 to assign random (available) port\n  // Otherwise publishing with NSNetServiceListenForConnections fails\n  netService_ = [[NSNetService alloc] initWithDomain:domain type:type name:name port:0];\n\n  initialize();\n}\n\nNetServiceApple::NetServiceApple(NSNetService* netService) : netService_(netService) {\n  initialize();\n\n  NSInputStream* inputStream = nil;\n  NSOutputStream* outputStream = nil;\n  [netService_ getInputStream:&inputStream outputStream:&outputStream];\n  IGL_DEBUG_ASSERT(inputStream);\n  IGL_DEBUG_ASSERT(outputStream);\n\n  inputStream_->initialize(inputStream);\n  outputStream_->initialize(outputStream);\n}\n\nvoid NetServiceApple::initialize() {\n  if (IGL_DEBUG_VERIFY(nil == netServiceDelegateAdapter_)) {\n    netServiceDelegateAdapter_ = [[IGLShellNetServiceDelegateAdapter alloc] initWithOwner:this];\n    [netService_ setDelegate:netServiceDelegateAdapter_];\n\n    inputStream_ = std::make_shared<InputStreamApple>();\n    outputStream_ = std::make_shared<OutputStreamApple>();\n  }\n}\n\nNetServiceApple::~NetServiceApple() {\n  [netService_ setDelegate:nil];\n  netServiceDelegateAdapter_ = nil;\n  netService_ = nil;\n}\n\nvoid NetServiceApple::publish() noexcept {\n  [netService_ publishWithOptions:NSNetServiceListenForConnections];\n}\n\nstd::shared_ptr<InputStream> NetServiceApple::getInputStream() const noexcept {\n  return inputStream_;\n}\n\nstd::shared_ptr<OutputStream> NetServiceApple::getOutputStream() const noexcept {\n  return outputStream_;\n}\n\nstd::string NetServiceApple::getName() const noexcept { // NOLINT(bugprone-exception-escape)\n  return {[[netService_ name] UTF8String]};\n}\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/apple/NetServiceExtensionApple.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Foundation/Foundation.h>\n#include <shell/shared/netservice/NetServiceExtension.h>\n#include <igl/Common.h>\n\nnamespace igl::shell::netservice {\n\nclass NetServiceExtensionApple final : public NetServiceExtension {\n public:\n  NetServiceExtensionApple() = default;\n  ~NetServiceExtensionApple() final;\n  NetServiceExtensionApple(const NetServiceExtensionApple&) = delete;\n  NetServiceExtensionApple& operator=(const NetServiceExtensionApple&) = delete;\n  NetServiceExtensionApple(NetServiceExtensionApple&&) = delete;\n  NetServiceExtensionApple& operator=(NetServiceExtensionApple&&) = delete;\n\n  bool initialize(igl::shell::Platform& platform) noexcept final;\n\n  [[nodiscard]] std::unique_ptr<NetService> create(std::string_view domain,\n                                                   std::string_view type,\n                                                   std::string_view name,\n                                                   int port) const noexcept final;\n\n  void search(std::string_view domain, std::string_view type) const noexcept final;\n  void stopSearch() const noexcept;\n\n private:\n  NSNetServiceBrowser* netServiceBrowser_ = nil;\n  id<NSNetServiceBrowserDelegate> netServiceBrowserDelegate_ = nil;\n};\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nIGL_API IGLShellExtension* IGLShellExtension_NewIglShellNetService();\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/apple/NetServiceExtensionApple.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/shared/netservice/apple/NetServiceExtensionApple.h>\n\n#include <shell/shared/netservice/apple/NetServiceApple.h>\n\n@interface IGLShellNetBrowserServiceDelegateAdapter : NSObject <NSNetServiceBrowserDelegate> {\n  // NOLINTNEXTLINE(readability-identifier-naming)\n  igl::shell::netservice::NetServiceExtensionApple* owner_; // weak ref\n}\n@end\n\n@implementation IGLShellNetBrowserServiceDelegateAdapter\n\n- (instancetype)initWithOwner:(igl::shell::netservice::NetServiceExtensionApple*)owner {\n  IGL_DEBUG_ASSERT(owner);\n  self = [super init];\n  if (self) {\n    owner_ = owner;\n  }\n  return self;\n}\n\n- (void)netServiceBrowserDidStopSearch:(NSNetServiceBrowser*)browser {\n}\n\n- (void)netServiceBrowser:(NSNetServiceBrowser*)browser didNotSearch:(NSDictionary*)errorDict {\n  IGL_DEBUG_ASSERT(owner_);\n  owner_->stopSearch();\n}\n\n- (void)netServiceBrowser:(NSNetServiceBrowser*)browser\n           didFindService:(NSNetService*)netService\n               moreComing:(BOOL)moreComing {\n  IGL_DEBUG_ASSERT(owner_);\n  const auto& delegate = owner_->delegate();\n  bool keepSearching = moreComing;\n  if (delegate) {\n    auto service = std::make_unique<igl::shell::netservice::NetServiceApple>(netService);\n    keepSearching = delegate(*owner_, std::move(service), moreComing);\n  }\n  if (!keepSearching) {\n    owner_->stopSearch();\n  }\n}\n\n- (void)netServiceBrowser:(NSNetServiceBrowser*)browser\n         didRemoveService:(NSNetService*)netService\n               moreComing:(BOOL)moreComing {\n  IGL_DEBUG_ASSERT(owner_);\n  auto delegate = owner_->delegate();\n  if (delegate) {\n    // delegate->didRemoveService(*owner_, service);\n  }\n}\n\n@end\n\n// ----------------------------------------------------------------------------\nnamespace igl::shell::netservice {\nnamespace {\nNSString* fromStringView(std::string_view str) {\n  return [[NSString alloc] initWithBytes:str.data()\n                                  length:str.size()\n                                encoding:NSUTF8StringEncoding];\n}\n} // namespace\n\nNetServiceExtensionApple::~NetServiceExtensionApple() {\n  netServiceBrowser_ = nil;\n  netServiceBrowserDelegate_ = nil;\n}\n\nbool NetServiceExtensionApple::initialize(Platform& /*platform*/) noexcept {\n  if (!netServiceBrowser_) {\n    netServiceBrowser_ = [[NSNetServiceBrowser alloc] init];\n    netServiceBrowserDelegate_ =\n        [[IGLShellNetBrowserServiceDelegateAdapter alloc] initWithOwner:this];\n    netServiceBrowser_.delegate = netServiceBrowserDelegate_;\n  }\n\n  return true;\n}\n\nstd::unique_ptr<NetService> NetServiceExtensionApple::create(std::string_view domain,\n                                                             std::string_view type,\n                                                             std::string_view name,\n                                                             int /*port*/) const noexcept {\n  return std::make_unique<NetServiceApple>(domain, type, name);\n}\n\nvoid NetServiceExtensionApple::search(std::string_view domain,\n                                      std::string_view type) const noexcept {\n  if (IGL_DEBUG_VERIFY(!domain.empty())) {\n    NSString* serviceType = fromStringView(type);\n    NSString* serviceDomain = fromStringView(domain); // @\"local.\"\n    [netServiceBrowser_ searchForServicesOfType:serviceType inDomain:serviceDomain];\n  }\n}\n\nvoid NetServiceExtensionApple::stopSearch() const noexcept {\n  if (IGL_DEBUG_VERIFY(netServiceBrowser_)) {\n    [netServiceBrowser_ stop];\n  }\n}\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nIGL_API __attribute((retain, used)) IGLShellExtension* IGLShellExtension_NewIglShellNetService() {\n  auto* extension = new NetServiceExtensionApple;\n  return static_cast<IGLShellExtension*>(extension);\n}\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/apple/StreamApple.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#import <Foundation/Foundation.h>\n#include <shell/shared/netservice/Stream.h>\n\nnamespace igl::shell::netservice {\n\n// ----------------------------------------------------------------------------\n\nstruct StreamAdapterApple final {\n  StreamAdapterApple() = default;\n  ~StreamAdapterApple();\n  StreamAdapterApple(const StreamAdapterApple&) = delete;\n  StreamAdapterApple& operator=(const StreamAdapterApple&) = delete;\n  StreamAdapterApple(StreamAdapterApple&&) = delete;\n  StreamAdapterApple& operator=(StreamAdapterApple&&) = delete;\n\n  bool initialize(Stream* owner, NSStream* stream) noexcept;\n\n  void open() noexcept;\n  [[nodiscard]] Stream::Status status() const noexcept;\n  void close() noexcept;\n\n  [[nodiscard]] Stream* stream() const noexcept {\n    return owner_;\n  }\n\n  [[nodiscard]] NSStream* nsStream() const noexcept {\n    return stream_;\n  }\n\n private:\n  Stream* owner_ = nullptr; // weak reference\n  NSStream* stream_ = nil;\n  id<NSStreamDelegate> delegate_ = nil;\n};\n\n// ----------------------------------------------------------------------------\n\nstruct InputStreamApple final : InputStream {\n  void open() noexcept final {\n    streamAdapter_.open();\n  }\n\n  [[nodiscard]] Status status() const noexcept final {\n    return streamAdapter_.status();\n  }\n\n  void close() noexcept final {\n    streamAdapter_.close();\n  }\n\n  int read(uint8_t* outBuffer, size_t maxLength) const noexcept final;\n  bool getBuffer(uint8_t*& outBuffer, size_t& outLength) const noexcept final;\n  [[nodiscard]] bool hasBytesAvailable() const noexcept final;\n\n  bool initialize(NSInputStream* stream) noexcept {\n    return streamAdapter_.initialize(this, stream);\n  }\n\n private:\n  [[nodiscard]] NSInputStream* inputStream() const noexcept {\n    return (NSInputStream*)streamAdapter_.nsStream();\n  }\n\n  StreamAdapterApple streamAdapter_;\n};\n\n// ----------------------------------------------------------------------------\n\nstruct OutputStreamApple final : OutputStream {\n  void open() noexcept final {\n    streamAdapter_.open();\n  }\n\n  [[nodiscard]] Status status() const noexcept final {\n    return streamAdapter_.status();\n  }\n\n  void close() noexcept final {\n    streamAdapter_.close();\n  }\n\n  int write(const uint8_t* buffer, size_t maxLength) noexcept final;\n  [[nodiscard]] bool hasSpaceAvailable() const noexcept final;\n\n  bool initialize(NSOutputStream* stream) noexcept {\n    return streamAdapter_.initialize(this, stream);\n  }\n\n private:\n  [[nodiscard]] NSOutputStream* outputStream() const noexcept {\n    return (NSOutputStream*)streamAdapter_.nsStream();\n  }\n\n  StreamAdapterApple streamAdapter_;\n};\n\n// ----------------------------------------------------------------------------\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/apple/StreamApple.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/shared/netservice/apple/StreamApple.h>\n\n#import <Foundation/Foundation.h>\n#include <igl/Core.h>\n\n// ----------------------------------------------------------------------------\n\n@interface IGLShellStreamDelegateAdapter : NSObject <NSStreamDelegate> {\n  igl::shell::netservice::StreamAdapterApple* _owner; // weak ref\n}\n@end\n\n@implementation IGLShellStreamDelegateAdapter\n\n- (instancetype)initWithOwner:(igl::shell::netservice::StreamAdapterApple*)owner {\n  IGL_DEBUG_ASSERT(owner);\n  self = [super init];\n  if (self) {\n    self->_owner = owner;\n  }\n  return self;\n}\n\n- (void)stream:(NSStream*)stream handleEvent:(NSStreamEvent)eventCode {\n  using namespace igl::shell::netservice;\n\n  IGL_DEBUG_ASSERT(stream == _owner->nsStream());\n  Stream::Event event = Stream::Event::None;\n  switch (eventCode) {\n  case NSStreamEventNone:\n    event = Stream::Event::None;\n    break;\n  case NSStreamEventOpenCompleted:\n    event = Stream::Event::OpenCompleted;\n    break;\n  case NSStreamEventHasBytesAvailable:\n    event = Stream::Event::HasBytesAvailable;\n    break;\n  case NSStreamEventHasSpaceAvailable:\n    event = Stream::Event::HasSpaceAvailable;\n    break;\n  case NSStreamEventErrorOccurred:\n    event = Stream::Event::ErrorOccurred;\n    break;\n  case NSStreamEventEndEncountered:\n    event = Stream::Event::EndEncountered;\n    break;\n  }\n\n  if (_owner) {\n    const auto& observer = _owner->stream()->observer();\n    if (observer) {\n      observer(*_owner->stream(), event);\n    }\n  }\n}\n@end\n\n// ----------------------------------------------------------------------------\n\nnamespace igl::shell::netservice {\n\n// ----------------------------------------------------------------------------\n\nStreamAdapterApple::~StreamAdapterApple() {\n  delegate_ = nil;\n  stream_ = nil;\n  owner_ = nullptr;\n}\n\nbool StreamAdapterApple::initialize(Stream* owner, NSStream* stream) noexcept {\n  IGL_DEBUG_ASSERT(owner && stream);\n  const bool result = IGL_DEBUG_VERIFY(nullptr == owner_ && nil == stream_);\n  if (result) {\n    owner_ = owner;\n    stream_ = stream;\n    delegate_ = [[IGLShellStreamDelegateAdapter alloc] initWithOwner:this];\n  }\n  return result;\n}\n\nvoid StreamAdapterApple::open() noexcept {\n  [stream_ open];\n  [stream_ setDelegate:delegate_];\n  [stream_ scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];\n}\n\nStream::Status StreamAdapterApple::status() const noexcept {\n  auto appleStatus = [stream_ streamStatus];\n  switch (appleStatus) {\n  case NSStreamStatusAtEnd:\n    return Stream::Status::AtEnd;\n  case NSStreamStatusClosed:\n    return Stream::Status::Closed;\n  case NSStreamStatusError:\n    return Stream::Status::Error;\n  case NSStreamStatusNotOpen:\n    return Stream::Status::NotOpen;\n  case NSStreamStatusOpen:\n    return Stream::Status::Open;\n  case NSStreamStatusOpening:\n    return Stream::Status::Opening;\n  case NSStreamStatusReading:\n    return Stream::Status::Reading;\n  case NSStreamStatusWriting:\n    return Stream::Status::Writing;\n  }\n  IGL_UNREACHABLE_RETURN(Stream::Status::Error)\n}\n\nvoid StreamAdapterApple::close() noexcept {\n  [stream_ removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];\n  [stream_ close];\n}\n\n// ----------------------------------------------------------------------------\n\nint InputStreamApple::read(uint8_t* outBuffer, size_t maxLength) const noexcept {\n  IGL_DEBUG_ASSERT(outBuffer);\n  return [inputStream() read:outBuffer maxLength:maxLength];\n}\n\nbool InputStreamApple::getBuffer(uint8_t*& outBuffer, size_t& outLength) const noexcept {\n  IGL_DEBUG_ASSERT(outBuffer);\n  return [inputStream() getBuffer:&outBuffer length:&outLength];\n}\n\nbool InputStreamApple::hasBytesAvailable() const noexcept {\n  return [inputStream() hasBytesAvailable];\n}\n\n// ----------------------------------------------------------------------------\n\nint OutputStreamApple::write(const uint8_t* buffer, size_t maxLength) noexcept {\n  IGL_DEBUG_ASSERT(buffer);\n  return [outputStream() write:buffer maxLength:maxLength];\n}\n\nbool OutputStreamApple::hasSpaceAvailable() const noexcept {\n  return [outputStream() hasSpaceAvailable];\n}\n\n// ----------------------------------------------------------------------------\n\n} // namespace igl::shell::netservice\n\n// ----------------------------------------------------------------------------\n"
  },
  {
    "path": "shell/shared/netservice/zeromq/NetServiceExtensionZeroMQ.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/netservice/NetServiceExtension.h>\n#include <igl/Macros.h>\n\nnamespace igl::shell::netservice {\n\nclass NetServiceExtensionZeroMQ final : public NetServiceExtension {\n public:\n  NetServiceExtensionZeroMQ() = default;\n  ~NetServiceExtensionZeroMQ() override = default;\n\n  bool initialize(Platform& platform) noexcept override;\n\n  [[nodiscard]] std::unique_ptr<NetService> create(std::string_view domain,\n                                                   std::string_view type,\n                                                   std::string_view name,\n                                                   int port) const noexcept override;\n\n  void search(std::string_view domain, std::string_view type) const noexcept override;\n  void stopSearch() noexcept;\n\n private:\n  // NSNetServiceBrowser* netServiceBrowser_ = nil;\n  // id<NSNetServiceBrowserDelegate> netServiceBrowserDelegate_ = nil;\n};\n\nIGL_API IGLShellExtension* iglShellExtensionNewIglShellNetService();\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/zeromq/NetServiceZeroMQ.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <shell/shared/netservice/NetService.h>\n#include <shell/shared/netservice/apple/StreamApple.h>\n\n@class NSNetService;\n@protocol NSNetServiceDelegate;\n\nnamespace igl::shell::netservice {\n\nclass NetServiceZeroMQ : public NetService {\n public:\n  NetServiceZeroMQ(std::string_view domain, std::string_view type, std::string_view name);\n  NetServiceZeroMQ(NSNetService* netService);\n  ~NetServiceZeroMQ() override;\n\n  void publish() noexcept override;\n  std::shared_ptr<InputStream> getInputStream() const noexcept override;\n  std::shared_ptr<OutputStream> getOutputStream() const noexcept override;\n\n  InputStreamApple& inputStream() const noexcept {\n    return *inputStream_;\n  }\n\n  OutputStreamApple& outputStream() const noexcept {\n    return *outputStream_;\n  }\n\n protected:\n  void initialize();\n\n private:\n  NSNetService* netService_ = nil;\n  id<NSNetServiceDelegate> netServiceDelegateAdapter_ = nil;\n  std::shared_ptr<InputStreamZeroMQ> inputStream_;\n  std::shared_ptr<OutputStreamZeroMQ> outputStream_;\n};\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/netservice/zeromq/StreamZeroMQ.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#include <shell/shared/netservice/Stream.h>\n\n//@class NSInputStream;\n//@class NSOutputStream;\n//@class NSNetService;\n//@class NSStream;\n//@protocol NSNetServiceDelegate;\n//@protocol NSStreamDelegate;\n\nnamespace igl::shell::netservice {\n\n// ----------------------------------------------------------------------------\n\nstruct StreamAdapterZeroMQ final {\n  ~StreamAdapterZeroMQ();\n\n  bool initialize(Stream* owner, NSStream* stream) noexcept;\n\n  void open() noexcept;\n  void close() noexcept;\n\n  Stream* stream() const noexcept {\n    return owner_;\n  }\n\n  NSStream* nsStream() const noexcept {\n    return stream_;\n  }\n\n private:\n  Stream* owner_ = nullptr; // weak ref\n  // NSStream* stream_ = nil;\n  // id<NSStreamDelegate> delegate_ = nil;\n};\n\n// ----------------------------------------------------------------------------\n\nstruct InputStreamZeroMQ final : InputStream {\n  void open() noexcept override {\n    streamAdapter_.open();\n  }\n  void close() noexcept override {\n    streamAdapter_.close();\n  }\n  int read(uint8_t* outBuffer, size_t maxLength) const noexcept override;\n  bool getBuffer(uint8_t*& outBuffer, size_t& outLength) const noexcept override;\n  bool hasBytesAvailable() const noexcept override;\n\n  bool initialize(NSInputStream* stream) noexcept {\n    return streamAdapter_.initialize(this, stream);\n  }\n\n private:\n  StreamAdapterZeroMQ streamAdapter_;\n};\n\n// ----------------------------------------------------------------------------\n\nstruct OutputStreamZeroMQ final : OutputStream {\n  void open() noexcept override {\n    streamAdapter_.open();\n  }\n  void close() noexcept override {\n    streamAdapter_.close();\n  }\n  int write(const uint8_t* buffer, size_t maxLength) noexcept override;\n  bool hasSpaceAvailable() const noexcept override;\n\n  bool initialize(NSOutputStream* stream) noexcept {\n    return streamAdapter_.initialize(this, stream);\n  }\n\n private:\n  StreamAdapterZeroMQ streamAdapter_;\n};\n\n// ----------------------------------------------------------------------------\n\n} // namespace igl::shell::netservice\n"
  },
  {
    "path": "shell/shared/platform/DisplayContext.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <glm/glm.hpp>\n\nnamespace igl::shell {\n\nclass DisplayContext {\n public:\n  float scale = 1.0f; // TODO: Transition call sites to pixelsPerPoint and remove this\n  float pixelsPerPoint = 1.0f; // e.g. retina scale on apple platforms\n  glm::mat4 preRotationMatrix = glm::mat4(1.0f);\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/Factory.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/platform/Factory.h>\n\n#if IGL_PLATFORM_ANDROID\n#include <shell/shared/platform/android/PlatformAndroid.h>\n#elif IGL_PLATFORM_LINUX\n#include <shell/shared/platform/linux/PlatformLinux.h>\n#elif IGL_PLATFORM_MACOSX\n#include <shell/shared/platform/mac/PlatformMac.h>\n#elif IGL_PLATFORM_WINDOWS\n#include <shell/shared/platform/win/PlatformWin.h>\n#elif IGL_PLATFORM_IOS\n#include <shell/shared/platform/ios/PlatformIos.h>\n#endif\n\nnamespace igl::shell {\n\nstd::unique_ptr<Platform> createPlatform(std::shared_ptr<IDevice> device) {\n#if IGL_PLATFORM_ANDROID\n  return std::make_unique<PlatformAndroid>(std::move(device));\n#elif IGL_PLATFORM_LINUX\n  return std::make_unique<PlatformLinux>(std::move(device));\n#elif IGL_PLATFORM_MACOSX\n  return std::make_unique<PlatformMac>(std::move(device));\n#elif IGL_PLATFORM_WINDOWS\n  return std::make_unique<PlatformWin>(std::move(device));\n#elif IGL_PLATFORM_IOS\n  return std::make_unique<PlatformIos>(std::move(device));\n#else\n  return nullptr;\n#endif\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/Factory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/platform/Platform.h>\n\nnamespace igl::shell {\n\nstd::unique_ptr<Platform> createPlatform(std::shared_ptr<IDevice> device);\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/Platform.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/platform/Platform.h>\n\n#include <shell/shared/extension/Extension.h>\n#include <shell/shared/extension/ExtensionLoader.h>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/input/InputDispatcher.h>\n#include <shell/shared/platform/DisplayContext.h>\n\nnamespace {\n\nint gArgc = 0;\nchar** gArgv = nullptr;\n#if IGL_PLATFORM_ANDROID\nbool gArgsInitialized = true; // Android has no argc/argv to initialize with\n#else\nbool gArgsInitialized = false;\n#endif\n\n} // namespace\n\nnamespace igl::shell {\n\nstruct Platform::State {\n  ExtensionLoader extensionLoader;\n  InputDispatcher inputDispatcher;\n  DisplayContext displayContext;\n};\n\nPlatform::Platform() noexcept : state_(std::make_unique<State>()) {}\n\nPlatform::~Platform() = default;\n\nExtension* Platform::createAndInitializeExtension(const char* name) noexcept {\n  return state_->extensionLoader.createAndInitialize(name, *this);\n}\n\nInputDispatcher& Platform::getInputDispatcher() noexcept {\n  return state_->inputDispatcher;\n}\n\n[[nodiscard]] DisplayContext& Platform::getDisplayContext() noexcept {\n  return state_->displayContext;\n}\n\nstd::shared_ptr<ITexture> Platform::loadTexture(const char* filename,\n                                                bool calculateMipmapLevels,\n                                                TextureFormat format,\n                                                igl::TextureDesc::TextureUsageBits usage) {\n  auto imageData = getImageLoader().loadImageData(filename);\n\n  return loadTexture(imageData, calculateMipmapLevels, format, usage, filename);\n}\n\nstd::shared_ptr<ITexture> Platform::loadTexture(const ImageData& imageData,\n                                                bool calculateMipmapLevels,\n                                                TextureFormat format,\n                                                igl::TextureDesc::TextureUsageBits usage,\n                                                const char* debugName) {\n  // @fb-only\n  // For D3D12 backend: If\n  // mipmaps are requested, we need Attachment usage so that generateMipmap can create render\n  // targets for each mip level.\n  auto effectiveUsage = usage;\n  if (calculateMipmapLevels && getDevice().getBackendType() == igl::BackendType::D3D12) {\n    effectiveUsage = static_cast<igl::TextureDesc::TextureUsageBits>(\n        static_cast<uint32_t>(usage) |\n        static_cast<uint32_t>(igl::TextureDesc::TextureUsageBits::Attachment));\n  }\n\n  TextureDesc texDesc =\n      igl::TextureDesc::new2D(format, imageData.desc.width, imageData.desc.height, effectiveUsage);\n  texDesc.numMipLevels =\n      calculateMipmapLevels ? igl::TextureDesc::calcNumMipLevels(texDesc.width, texDesc.height) : 1;\n  texDesc.debugName = debugName;\n\n  Result res;\n  auto tex = getDevice().createTexture(texDesc, &res);\n  IGL_DEBUG_ASSERT(res.isOk(), res.message.c_str());\n  IGL_DEBUG_ASSERT(tex != nullptr, \"createTexture returned null for some reason\");\n  tex->upload(tex->getFullRange(),\n              imageData.data->data(),\n              0,\n              !imageData.mipLevelBytes.empty() ? imageData.mipLevelBytes.data() : nullptr);\n  return tex;\n}\n\nint Platform::argc() {\n  IGL_DEBUG_ASSERT(gArgsInitialized, \"Accessing command line args before they are initialized.\");\n  return gArgc;\n}\n\nchar** Platform::argv() {\n  IGL_DEBUG_ASSERT(gArgsInitialized, \"Accessing command line args before they are initialized.\");\n  return gArgv;\n}\n\nvoid Platform::initializeCommandLineArgs(int argc, char** argv) {\n  IGL_DEBUG_ASSERT(!gArgsInitialized, \"Must not initialize command line arguments more than once.\");\n  gArgc = argc;\n  gArgv = argv;\n  gArgsInitialized = true;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/Platform.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/Device.h>\n\nnamespace igl::shell {\n\nclass Extension;\nclass FileLoader;\nclass ImageLoader;\nstruct ImageData;\nclass ImageWriter;\nclass InputDispatcher;\nclass DisplayContext;\n\nclass Platform {\n public:\n  Platform() noexcept;\n  virtual ~Platform();\n  virtual IDevice& getDevice() noexcept = 0;\n  [[nodiscard]] virtual std::shared_ptr<IDevice> getDevicePtr() const noexcept = 0;\n  virtual ImageLoader& getImageLoader() noexcept = 0;\n  [[nodiscard]] virtual const ImageWriter& getImageWriter() const noexcept = 0;\n  [[nodiscard]] virtual FileLoader& getFileLoader() const noexcept = 0;\n\n  virtual InputDispatcher& getInputDispatcher() noexcept;\n  [[nodiscard]] virtual DisplayContext& getDisplayContext() noexcept;\n\n  std::shared_ptr<ITexture> loadTexture(\n      const char* filename,\n      bool calculateMipmapLevels = true,\n      TextureFormat format = igl::TextureFormat::RGBA_SRGB,\n      igl::TextureDesc::TextureUsageBits usage = igl::TextureDesc::TextureUsageBits::Sampled);\n\n  std::shared_ptr<ITexture> loadTexture(\n      const ImageData& imageData,\n      bool calculateMipmapLevels = true,\n      TextureFormat format = igl::TextureFormat::RGBA_SRGB,\n      igl::TextureDesc::TextureUsageBits usage = igl::TextureDesc::TextureUsageBits::Sampled,\n      const char* debugName = \"\");\n  // 'argc' and 'argv' are the exact arguments received in 'main()'.\n  static int argc();\n  static char** argv();\n\n  // Don't call this from the application level. The shell framework will use this API to expose\n  // command line arguments for the application.\n  static void initializeCommandLineArgs(int argc, char** argv);\n\n public:\n  Extension* createAndInitializeExtension(const char* name) noexcept;\n\n  /**\n   * @brief Create a And Initialize object\n   *\n   * @return template <typename E>*\n   */\n  // E is the Extension type. Requirements on E\n  // 1. The static method `const char* E::name() noexcept` must exist\n  // 2. E must subclass from igl::shell::Extension\n  template<typename E>\n  E* createAndInitialize() noexcept {\n    // TODO static_assert() to enforce subclass\n    return static_cast<E*>(createAndInitializeExtension(E::name()));\n  }\n\n private:\n  struct State;\n  std::unique_ptr<State> state_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/android/PlatformAndroid.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/platform/android/PlatformAndroid.h>\n\n#include <shell/shared/fileLoader/android/FileLoaderAndroid.h>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/imageWriter/ImageWriter.h>\n#include <shell/shared/imageWriter/android/ImageWriterAndroid.h>\n\n#if IGL_BACKEND_VULKAN\n#include <glm/ext.hpp>\n#include <shell/shared/platform/DisplayContext.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n#endif\n\nnamespace igl::shell {\n\nPlatformAndroid::PlatformAndroid(std::shared_ptr<IDevice> device, bool useFakeLoader) :\n  device_(std::move(device)),\n  fileLoader_(std::make_unique<FileLoaderAndroid>()),\n  imageLoader_(std::make_unique<ImageLoader>(*fileLoader_)) {\n  if (!useFakeLoader) {\n    imageWriter_ = std::make_unique<ImageWriterAndroid>();\n  }\n}\n\nvoid PlatformAndroid::updatePreRotationMatrix() {\n#if IGL_BACKEND_VULKAN\n  if (device_->getBackendType() != igl::BackendType::Vulkan) {\n    return;\n  }\n  // Get the surface transform matrix\n  getDisplayContext().preRotationMatrix = [&device = *device_]() -> glm::mat4 {\n    auto& vulkanDevice = static_cast<igl::vulkan::Device&>(device);\n\n    float angle = 0.0f;\n    switch (vulkanDevice.getVulkanContext().getSurfaceCapabilities().currentTransform) {\n    case VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR:\n      angle = -90.0f;\n      break;\n    case VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR:\n      angle = -180.0f;\n      break;\n    case VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR:\n      angle = -270.0f;\n      break;\n    case VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR:\n    default:\n      return glm::mat4(1.0f);\n    }\n    return glm::rotate(glm::mat4(1.0f), glm::radians(angle), glm::vec3(0.0f, 0.0f, 1.0f));\n  }();\n#endif\n}\n\nIDevice& PlatformAndroid::getDevice() noexcept {\n  return *device_;\n}\n\nstd::shared_ptr<IDevice> PlatformAndroid::getDevicePtr() const noexcept {\n  return device_;\n}\n\nImageLoader& PlatformAndroid::getImageLoader() noexcept {\n  return *imageLoader_;\n}\n\nconst ImageWriter& PlatformAndroid::getImageWriter() const noexcept {\n  return *imageWriter_;\n}\n\nFileLoader& PlatformAndroid::getFileLoader() const noexcept {\n  return *fileLoader_;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/android/PlatformAndroid.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <shell/shared/fileLoader/FileLoader.h>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/platform/Platform.h>\n\nnamespace igl::shell {\n\nclass PlatformAndroid : public Platform {\n public:\n  explicit PlatformAndroid(std::shared_ptr<IDevice> device, bool useFakeLoader = false);\n  IDevice& getDevice() noexcept override;\n  [[nodiscard]] std::shared_ptr<IDevice> getDevicePtr() const noexcept override;\n  ImageLoader& getImageLoader() noexcept override;\n  [[nodiscard]] const ImageWriter& getImageWriter() const noexcept override;\n  [[nodiscard]] FileLoader& getFileLoader() const noexcept override;\n  void updatePreRotationMatrix();\n\n private:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<FileLoader> fileLoader_;\n  std::shared_ptr<ImageWriter> imageWriter_;\n  std::shared_ptr<ImageLoader> imageLoader_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/ios/PlatformIos.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/fileLoader/FileLoader.h>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/imageWriter/ImageWriter.h>\n#include <shell/shared/platform/Platform.h>\n\nnamespace igl::shell {\n\nclass PlatformIos : public Platform {\n public:\n  ~PlatformIos() override = default;\n  explicit PlatformIos(std::shared_ptr<IDevice> device);\n  IDevice& getDevice() noexcept override;\n  [[nodiscard]] std::shared_ptr<IDevice> getDevicePtr() const noexcept override;\n  ImageLoader& getImageLoader() noexcept override;\n  [[nodiscard]] const ImageWriter& getImageWriter() const noexcept override;\n  [[nodiscard]] FileLoader& getFileLoader() const noexcept override;\n\n private:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<FileLoader> fileLoader_;\n  std::shared_ptr<ImageLoader> imageLoader_;\n  std::shared_ptr<ImageWriter> imageWriter_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/ios/PlatformIos.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/platform/ios/PlatformIos.h>\n\n#include <shell/shared/fileLoader/apple/FileLoaderApple.h>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/imageWriter/ios/ImageWriterIos.h>\n\nnamespace igl::shell {\n\nPlatformIos::PlatformIos(std::shared_ptr<IDevice> device) : device_(std::move(device)) {\n  fileLoader_ = std::make_unique<FileLoaderApple>();\n  imageLoader_ = std::make_unique<ImageLoader>(*fileLoader_);\n  imageWriter_ = std::make_unique<ImageWriterIos>();\n}\n\nIDevice& PlatformIos::getDevice() noexcept {\n  return *device_;\n}\n\nstd::shared_ptr<IDevice> PlatformIos::getDevicePtr() const noexcept {\n  return device_;\n}\n\nImageLoader& PlatformIos::getImageLoader() noexcept {\n  return *imageLoader_;\n}\n\nconst ImageWriter& PlatformIos::getImageWriter() const noexcept {\n  return *imageWriter_;\n}\n\nFileLoader& PlatformIos::getFileLoader() const noexcept {\n  return *fileLoader_;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/linux/PlatformLinux.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/platform/linux/PlatformLinux.h>\n\n#include <shell/shared/fileLoader/linux/FileLoaderLinux.h>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/imageWriter/linux/ImageWriterLinux.h>\n\nnamespace igl::shell {\n\nPlatformLinux::PlatformLinux(std::shared_ptr<IDevice> device) : device_(std::move(device)) {\n  fileLoader_ = std::make_unique<FileLoaderLinux>();\n  imageLoader_ = std::make_unique<ImageLoader>(*fileLoader_);\n  imageWriter_ = std::make_unique<ImageWriterLinux>();\n}\n\nIDevice& PlatformLinux::getDevice() noexcept {\n  return *device_;\n}\n\nstd::shared_ptr<IDevice> PlatformLinux::getDevicePtr() const noexcept {\n  return device_;\n}\n\nImageLoader& PlatformLinux::getImageLoader() noexcept {\n  return *imageLoader_;\n}\n\nconst ImageWriter& PlatformLinux::getImageWriter() const noexcept {\n  return *imageWriter_;\n}\n\nFileLoader& PlatformLinux::getFileLoader() const noexcept {\n  return *fileLoader_;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/linux/PlatformLinux.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/platform/Platform.h>\n\nnamespace igl::shell {\n\nclass PlatformLinux : public Platform {\n public:\n  explicit PlatformLinux(std::shared_ptr<IDevice> device);\n  IDevice& getDevice() noexcept override;\n  [[nodiscard]] std::shared_ptr<IDevice> getDevicePtr() const noexcept override;\n  ImageLoader& getImageLoader() noexcept override;\n  [[nodiscard]] const ImageWriter& getImageWriter() const noexcept override;\n  [[nodiscard]] FileLoader& getFileLoader() const noexcept override;\n\n private:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<FileLoader> fileLoader_;\n  std::shared_ptr<ImageLoader> imageLoader_;\n  std::shared_ptr<ImageWriter> imageWriter_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/mac/PlatformMac.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/platform/mac/PlatformMac.h>\n\n#include <shell/shared/fileLoader/apple/FileLoaderApple.h>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/imageWriter/mac/ImageWriterMac.h>\n\nnamespace igl::shell {\n\nPlatformMac::PlatformMac(std::shared_ptr<IDevice> device) : device_(std::move(device)) {\n  fileLoader_ = std::make_unique<FileLoaderApple>();\n  imageLoader_ = std::make_unique<ImageLoader>(*fileLoader_);\n  imageWriter_ = std::make_unique<ImageWriterMac>();\n}\n\nIDevice& PlatformMac::getDevice() noexcept {\n  return *device_;\n}\n\nstd::shared_ptr<IDevice> PlatformMac::getDevicePtr() const noexcept {\n  return device_;\n}\n\nImageLoader& PlatformMac::getImageLoader() noexcept {\n  return *imageLoader_;\n}\n\nconst ImageWriter& PlatformMac::getImageWriter() const noexcept {\n  return *imageWriter_;\n}\n\nFileLoader& PlatformMac::getFileLoader() const noexcept {\n  return *fileLoader_;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/mac/PlatformMac.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/platform/Platform.h>\n\nnamespace igl::shell {\n\nclass PlatformMac : public Platform {\n public:\n  explicit PlatformMac(std::shared_ptr<IDevice> device);\n  IDevice& getDevice() noexcept override;\n  [[nodiscard]] std::shared_ptr<IDevice> getDevicePtr() const noexcept override;\n  ImageLoader& getImageLoader() noexcept override;\n  [[nodiscard]] const ImageWriter& getImageWriter() const noexcept override;\n  [[nodiscard]] FileLoader& getFileLoader() const noexcept override;\n\n private:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<FileLoader> fileLoader_;\n  std::shared_ptr<ImageLoader> imageLoader_;\n  std::shared_ptr<ImageWriter> imageWriter_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/win/PlatformWin.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/platform/win/PlatformWin.h>\n\n#include <shell/shared/fileLoader/win/FileLoaderWin.h>\n#include <shell/shared/imageLoader/ImageLoader.h>\n#include <shell/shared/imageWriter/win/ImageWriterWin.h>\n\nnamespace igl::shell {\n\nPlatformWin::PlatformWin(std::shared_ptr<IDevice> device) : device_(std::move(device)) {\n  fileLoader_ = std::make_unique<FileLoaderWin>();\n  imageLoader_ = std::make_unique<ImageLoader>(*fileLoader_);\n  imageWriter_ = std::make_unique<ImageWriterWin>();\n}\n\nIDevice& PlatformWin::getDevice() noexcept {\n  return *device_;\n}\n\nstd::shared_ptr<IDevice> PlatformWin::getDevicePtr() const noexcept {\n  return device_;\n}\n\nImageLoader& PlatformWin::getImageLoader() noexcept {\n  return *imageLoader_;\n}\n\nconst ImageWriter& PlatformWin::getImageWriter() const noexcept {\n  return *imageWriter_;\n}\n\nFileLoader& PlatformWin::getFileLoader() const noexcept {\n  return *fileLoader_;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/platform/win/PlatformWin.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/fileLoader/FileLoader.h>\n#include <shell/shared/platform/Platform.h>\n\nnamespace igl::shell {\n\nclass PlatformWin : public Platform {\n public:\n  explicit PlatformWin(std::shared_ptr<IDevice> device);\n  IDevice& getDevice() noexcept override;\n  [[nodiscard]] std::shared_ptr<IDevice> getDevicePtr() const noexcept override;\n  ImageLoader& getImageLoader() noexcept override;\n  [[nodiscard]] const ImageWriter& getImageWriter() const noexcept override;\n  [[nodiscard]] FileLoader& getFileLoader() const noexcept override;\n\n private:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<FileLoader> fileLoader_;\n  std::shared_ptr<ImageLoader> imageLoader_;\n  std::shared_ptr<ImageWriter> imageWriter_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/AppParams.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n#include <functional>\n#include <shell/shared/renderSession/DepthParams.h>\n#include <shell/shared/renderSession/QuadLayerParams.h>\n\nnamespace igl::shell {\nusing QuadLayerParamsGetter = std::function<QuadLayerParams()>;\nusing PassthroughGetter = std::function<bool()>;\n\nstruct AppParams {\n  DepthParams depthParams;\n  bool exitRequested = false;\n  float sizeX = 1.f;\n  float sizeY = 1.f;\n  QuadLayerParamsGetter quadLayerParamsGetter;\n  PassthroughGetter passthroughGetter;\n  float passthroughOpacity = 1.0f;\n};\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/BenchmarkTracker.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/renderSession/BenchmarkTracker.h>\n\n#include <algorithm>\n#include <cstdio>\n#include <cstring>\n#include <sstream>\n\nnamespace igl::shell {\n\nBenchmarkTracker::BenchmarkTracker(size_t bufferSize) : bufferCapacity_(bufferSize) {\n  circularBuffer_.resize(bufferCapacity_, 0.0);\n  reset();\n}\n\nvoid BenchmarkTracker::recordRenderTime(double renderTimeMs) {\n  // Detect hiccup before updating running average\n  const double runningAvg = getRunningAverageMs();\n  if (totalSampleCount_ > 10 && runningAvg > 0) {\n    lastFrameWasHiccup_ = (renderTimeMs > runningAvg * hiccupMultiplier_);\n  } else {\n    lastFrameWasHiccup_ = false;\n  }\n  lastRenderTimeMs_ = renderTimeMs;\n\n  // Check if buffer is full and needs to overflow\n  if (bufferCount_ >= bufferCapacity_) {\n    flushBufferToOverflow();\n  }\n\n  // Add sample to circular buffer\n  circularBuffer_[bufferIndex_] = renderTimeMs;\n  bufferIndex_ = (bufferIndex_ + 1) % bufferCapacity_;\n  if (bufferCount_ < bufferCapacity_) {\n    bufferCount_++;\n  }\n\n  // Update running statistics\n  runningSum_ += renderTimeMs;\n  totalSampleCount_++;\n}\n\nvoid BenchmarkTracker::flushBufferToOverflow() {\n  if (bufferCount_ == 0) {\n    return;\n  }\n\n  RenderTimeOverflowRecord record;\n  record.sampleCount = bufferCount_;\n\n  for (size_t i = 0; i < bufferCount_; ++i) {\n    const double val = circularBuffer_[i];\n    record.minRenderTimeMs = std::min(record.minRenderTimeMs, val);\n    record.maxRenderTimeMs = std::max(record.maxRenderTimeMs, val);\n  }\n\n  overflowRecords_.push_back(record);\n\n  // Reset buffer state\n  bufferIndex_ = 0;\n  bufferCount_ = 0;\n}\n\nbool BenchmarkTracker::shouldGeneratePeriodicReport() const {\n  const auto now = std::chrono::steady_clock::now();\n  const auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - lastReportTime_);\n  return static_cast<size_t>(elapsed.count()) >= reportIntervalMs_;\n}\n\nvoid BenchmarkTracker::markPeriodicReportGenerated() {\n  lastReportTime_ = std::chrono::steady_clock::now();\n}\n\nRenderTimeStats BenchmarkTracker::computeStats() const {\n  RenderTimeStats stats;\n  stats.totalSamples = totalSampleCount_;\n\n  if (totalSampleCount_ == 0) {\n    return stats;\n  }\n\n  // Compute from current buffer\n  for (size_t i = 0; i < bufferCount_; ++i) {\n    const double val = circularBuffer_[i];\n    stats.minRenderTimeMs = std::min(stats.minRenderTimeMs, val);\n    stats.maxRenderTimeMs = std::max(stats.maxRenderTimeMs, val);\n  }\n\n  // Include overflow records\n  for (const auto& record : overflowRecords_) {\n    stats.minRenderTimeMs = std::min(stats.minRenderTimeMs, record.minRenderTimeMs);\n    stats.maxRenderTimeMs = std::max(stats.maxRenderTimeMs, record.maxRenderTimeMs);\n  }\n\n  // Compute average\n  stats.avgRenderTimeMs = runningSum_ / static_cast<double>(totalSampleCount_);\n\n  // Convert to FPS (avoiding division by zero)\n  if (stats.minRenderTimeMs > 0) {\n    stats.maxFps = 1000.0 / stats.minRenderTimeMs;\n  }\n  if (stats.maxRenderTimeMs > 0) {\n    stats.minFps = 1000.0 / stats.maxRenderTimeMs;\n  }\n  if (stats.avgRenderTimeMs > 0) {\n    stats.avgFps = 1000.0 / stats.avgRenderTimeMs;\n  }\n\n  // Determine hiccup threshold\n  stats.hiccupThresholdMs = stats.avgRenderTimeMs * hiccupMultiplier_;\n  stats.hasHiccup = lastFrameWasHiccup_;\n\n  return stats;\n}\n\nRenderTimeStats BenchmarkTracker::computeRecentStats() const {\n  RenderTimeStats stats;\n  stats.totalSamples = bufferCount_;\n\n  if (bufferCount_ == 0) {\n    return stats;\n  }\n\n  double sum = 0.0;\n  for (size_t i = 0; i < bufferCount_; ++i) {\n    const double val = circularBuffer_[i];\n    stats.minRenderTimeMs = std::min(stats.minRenderTimeMs, val);\n    stats.maxRenderTimeMs = std::max(stats.maxRenderTimeMs, val);\n    sum += val;\n  }\n\n  stats.avgRenderTimeMs = sum / static_cast<double>(bufferCount_);\n\n  // Convert to FPS\n  if (stats.minRenderTimeMs > 0) {\n    stats.maxFps = 1000.0 / stats.minRenderTimeMs;\n  }\n  if (stats.maxRenderTimeMs > 0) {\n    stats.minFps = 1000.0 / stats.maxRenderTimeMs;\n  }\n  if (stats.avgRenderTimeMs > 0) {\n    stats.avgFps = 1000.0 / stats.avgRenderTimeMs;\n  }\n\n  stats.hiccupThresholdMs = stats.avgRenderTimeMs * hiccupMultiplier_;\n  stats.hasHiccup = lastFrameWasHiccup_;\n\n  return stats;\n}\n\nbool BenchmarkTracker::hasBenchmarkExpired() const {\n  if (benchmarkDurationMs_ == 0) {\n    return false; // No limit\n  }\n  return getElapsedTimeMs() >= static_cast<double>(benchmarkDurationMs_);\n}\n\ndouble BenchmarkTracker::getElapsedTimeMs() const {\n  const auto now = std::chrono::steady_clock::now();\n  return static_cast<double>(\n      std::chrono::duration_cast<std::chrono::milliseconds>(now - startTime_).count());\n}\n\nvoid BenchmarkTracker::setBenchmarkDuration(size_t durationMs) {\n  benchmarkDurationMs_ = durationMs;\n}\n\nsize_t BenchmarkTracker::getBenchmarkDuration() const {\n  return benchmarkDurationMs_;\n}\n\nvoid BenchmarkTracker::setReportInterval(size_t intervalMs) {\n  reportIntervalMs_ = intervalMs;\n}\n\nvoid BenchmarkTracker::setHiccupMultiplier(double multiplier) {\n  hiccupMultiplier_ = multiplier;\n}\n\nvoid BenchmarkTracker::reset() {\n  bufferIndex_ = 0;\n  bufferCount_ = 0;\n  overflowRecords_.clear();\n  runningSum_ = 0.0;\n  totalSampleCount_ = 0;\n  lastFrameWasHiccup_ = false;\n  lastRenderTimeMs_ = 0.0;\n  startTime_ = std::chrono::steady_clock::now();\n  lastReportTime_ = startTime_;\n}\n\nsize_t BenchmarkTracker::getTotalFrameCount() const {\n  return totalSampleCount_;\n}\n\nsize_t BenchmarkTracker::getOverflowRecordCount() const {\n  return overflowRecords_.size();\n}\n\nbool BenchmarkTracker::wasLastFrameHiccup() const {\n  return lastFrameWasHiccup_;\n}\n\ndouble BenchmarkTracker::getRunningAverageMs() const {\n  if (totalSampleCount_ == 0) {\n    return 0.0;\n  }\n  return runningSum_ / static_cast<double>(totalSampleCount_);\n}\n\nstd::string formatBenchmarkStats(const RenderTimeStats& stats, const char* prefix) {\n  char buffer[512];\n  snprintf(buffer,\n           sizeof(buffer),\n           \"%sFPS: avg=%.1f, min=%.1f, max=%.1f | \"\n           \"Frame time (ms): avg=%.2f, min=%.2f, max=%.2f | \"\n           \"Samples: %zu%s\",\n           prefix,\n           stats.avgFps,\n           stats.minFps,\n           stats.maxFps,\n           stats.avgRenderTimeMs,\n           stats.minRenderTimeMs,\n           stats.maxRenderTimeMs,\n           stats.totalSamples,\n           stats.hasHiccup ? \" [HICCUP DETECTED]\" : \"\");\n  return {buffer};\n}\n\nstd::string generateFinalBenchmarkReport(const BenchmarkTracker& tracker, bool wasTimeout) {\n  const auto stats = tracker.computeStats();\n  const double elapsedSec = tracker.getElapsedTimeMs() / 1000.0;\n  const double elapsedMin = elapsedSec / 60.0;\n\n  std::ostringstream oss;\n  oss << \"\\n\";\n  oss << \"╔══════════════════════════════════════════════════════════════════════════════╗\\n\";\n  oss << \"║                        IGL BENCHMARK FINAL REPORT                            ║\\n\";\n  oss << \"╠══════════════════════════════════════════════════════════════════════════════╣\\n\";\n\n  if (wasTimeout) {\n    oss << \"║  Status: COMPLETED SUCCESSFULLY (benchmark timeout reached)                  ║\\n\";\n  } else {\n    oss << \"║  Status: COMPLETED (application terminated normally)                         ║\\n\";\n  }\n\n  char line[128];\n  snprintf(line,\n           sizeof(line),\n           \"║  Duration: %.1f minutes (%.1f seconds)                                    \",\n           elapsedMin,\n           elapsedSec);\n  oss << line << \"║\\n\";\n\n  snprintf(line, sizeof(line), \"║  Total Frames: %zu\", stats.totalSamples);\n  oss << line;\n  // Pad to fit the box\n  size_t len = strlen(line);\n  for (size_t i = len; i < 80; ++i) {\n    oss << \" \";\n  }\n  oss << \"║\\n\";\n\n  oss << \"╠══════════════════════════════════════════════════════════════════════════════╣\\n\";\n  oss << \"║  FPS Statistics:                                                             ║\\n\";\n\n  snprintf(line,\n           sizeof(line),\n           \"║    Average: %.1f FPS                                                    \",\n           stats.avgFps);\n  oss << line << \"║\\n\";\n\n  snprintf(line,\n           sizeof(line),\n           \"║    Minimum: %.1f FPS                                                    \",\n           stats.minFps);\n  oss << line << \"║\\n\";\n\n  snprintf(line,\n           sizeof(line),\n           \"║    Maximum: %.1f FPS                                                    \",\n           stats.maxFps);\n  oss << line << \"║\\n\";\n\n  oss << \"╠══════════════════════════════════════════════════════════════════════════════╣\\n\";\n  oss << \"║  Frame Time Statistics:                                                      ║\\n\";\n\n  snprintf(line,\n           sizeof(line),\n           \"║    Average: %.2f ms                                                     \",\n           stats.avgRenderTimeMs);\n  oss << line << \"║\\n\";\n\n  snprintf(line,\n           sizeof(line),\n           \"║    Minimum: %.2f ms                                                     \",\n           stats.minRenderTimeMs);\n  oss << line << \"║\\n\";\n\n  snprintf(line,\n           sizeof(line),\n           \"║    Maximum: %.2f ms                                                     \",\n           stats.maxRenderTimeMs);\n  oss << line << \"║\\n\";\n\n  oss << \"╠══════════════════════════════════════════════════════════════════════════════╣\\n\";\n\n  snprintf(line,\n           sizeof(line),\n           \"║  Overflow Records: %zu (each contains min/max from %zu samples)        \",\n           tracker.getOverflowRecordCount(),\n           BenchmarkTracker::kDefaultBufferSize);\n  oss << line << \"║\\n\";\n\n  oss << \"╚══════════════════════════════════════════════════════════════════════════════╝\\n\";\n\n  return oss.str();\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/BenchmarkTracker.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <chrono>\n#include <limits>\n#include <string>\n#include <vector>\n\nnamespace igl::shell {\n\n/// @brief Stores min/max render time data when circular buffer overflows\nstruct RenderTimeOverflowRecord {\n  double minRenderTimeMs = std::numeric_limits<double>::max();\n  double maxRenderTimeMs = 0.0;\n  size_t sampleCount = 0;\n};\n\n/// @brief Statistics computed from render time samples\nstruct RenderTimeStats {\n  double minRenderTimeMs = std::numeric_limits<double>::max();\n  double maxRenderTimeMs = 0.0;\n  double avgRenderTimeMs = 0.0;\n  double minFps = 0.0;\n  double maxFps = 0.0;\n  double avgFps = 0.0;\n  size_t totalSamples = 0;\n  bool hasHiccup = false;\n  double hiccupThresholdMs = 0.0;\n};\n\n/// @brief Tracks render times and provides benchmark statistics for IGL shell\n///\n/// This class maintains a circular buffer of render times and computes\n/// performance statistics including FPS metrics. When the buffer overflows,\n/// min/max values are preserved in overflow records to maintain historical data.\nclass BenchmarkTracker {\n public:\n  static constexpr size_t kDefaultBufferSize = 1000;\n  static constexpr double kDefaultHiccupMultiplier =\n      3.0; // Frame is a hiccup if > 3x average frame time\n  static constexpr size_t kDefaultReportIntervalMs = 60000; // 1 minute\n  static constexpr size_t kDefaultBenchmarkDurationMs = 30 * 60 * 1000; // 30 minutes\n\n  explicit BenchmarkTracker(size_t bufferSize = kDefaultBufferSize);\n\n  /// @brief Records a render time sample\n  /// @param renderTimeMs The time in milliseconds for the render call\n  void recordRenderTime(double renderTimeMs);\n\n  /// @brief Checks if it's time to generate a periodic report\n  /// @return true if a report should be generated\n  [[nodiscard]] bool shouldGeneratePeriodicReport() const;\n\n  /// @brief Marks that a periodic report was generated\n  void markPeriodicReportGenerated();\n\n  /// @brief Computes current statistics from all available data\n  /// @return RenderTimeStats containing min/max/average values\n  [[nodiscard]] RenderTimeStats computeStats() const;\n\n  /// @brief Computes statistics from just the current buffer (recent samples)\n  /// @return RenderTimeStats for recent samples only\n  [[nodiscard]] RenderTimeStats computeRecentStats() const;\n\n  /// @brief Checks if the benchmark duration has been exceeded\n  /// @return true if the benchmark should stop\n  [[nodiscard]] bool hasBenchmarkExpired() const;\n\n  /// @brief Gets elapsed time since benchmark started\n  /// @return Elapsed time in milliseconds\n  [[nodiscard]] double getElapsedTimeMs() const;\n\n  /// @brief Sets the benchmark duration\n  /// @param durationMs Duration in milliseconds (0 = no limit)\n  void setBenchmarkDuration(size_t durationMs);\n\n  /// @brief Gets the benchmark duration setting\n  /// @return Duration in milliseconds\n  [[nodiscard]] size_t getBenchmarkDuration() const;\n\n  /// @brief Sets the report interval\n  /// @param intervalMs Interval in milliseconds between periodic reports\n  void setReportInterval(size_t intervalMs);\n\n  /// @brief Sets the hiccup detection multiplier\n  /// @param multiplier A frame is considered a hiccup if > multiplier * average frame time\n  void setHiccupMultiplier(double multiplier);\n\n  /// @brief Resets all tracking data and restarts the benchmark timer\n  void reset();\n\n  /// @brief Gets the total number of frames tracked (including overflowed)\n  [[nodiscard]] size_t getTotalFrameCount() const;\n\n  /// @brief Gets the number of overflow records\n  [[nodiscard]] size_t getOverflowRecordCount() const;\n\n  /// @brief Detects if the most recent frame was a significant hiccup\n  /// @return true if the last recorded frame was a hiccup\n  [[nodiscard]] bool wasLastFrameHiccup() const;\n\n  /// @brief Gets the current running average (for hiccup detection)\n  [[nodiscard]] double getRunningAverageMs() const;\n\n private:\n  void flushBufferToOverflow();\n  [[nodiscard]] RenderTimeStats computeStatsFromBuffer(const std::vector<double>& buffer) const;\n\n  std::vector<double> circularBuffer_;\n  size_t bufferIndex_ = 0;\n  size_t bufferCount_ = 0; // Actual number of samples in buffer\n  size_t bufferCapacity_;\n\n  std::vector<RenderTimeOverflowRecord> overflowRecords_;\n\n  double runningSum_ = 0.0;\n  size_t totalSampleCount_ = 0;\n\n  double hiccupMultiplier_ = kDefaultHiccupMultiplier;\n  bool lastFrameWasHiccup_ = false;\n  double lastRenderTimeMs_ = 0.0;\n\n  std::chrono::steady_clock::time_point startTime_;\n  std::chrono::steady_clock::time_point lastReportTime_;\n  size_t reportIntervalMs_ = kDefaultReportIntervalMs;\n  size_t benchmarkDurationMs_ = kDefaultBenchmarkDurationMs;\n};\n\n/// @brief Generates a formatted log string for benchmark statistics\n/// @param stats The statistics to format\n/// @param prefix Optional prefix for the log line\n/// @return Formatted string suitable for IGL_LOG_INFO\nstd::string formatBenchmarkStats(const RenderTimeStats& stats, const char* prefix = \"\");\n\n/// @brief Generates the final benchmark report\n/// @param tracker The benchmark tracker with all data\n/// @param wasTimeout true if the benchmark ended due to timeout\n/// @return Formatted multi-line string for the final report\nstd::string generateFinalBenchmarkReport(const BenchmarkTracker& tracker, bool wasTimeout);\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/DefaultRenderSessionFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <shell/shared/renderSession/IRenderSessionFactory.h>\n#include <igl/Config.h>\n\nnamespace igl::shell {\n\n#if IGL_PLATFORM_LINUX || IGL_PLATFORM_APPLE\n__attribute__((weak))\n#endif // IGL_PLATFORM_LINUX\nstd::unique_ptr<IRenderSessionFactory> createDefaultRenderSessionFactory();\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/DefaultSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <memory>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/RenderSession.h>\n\nnamespace igl::shell {\n\nstd::unique_ptr<RenderSession> createDefaultRenderSession(std::shared_ptr<Platform> platform);\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/DepthParams.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nnamespace igl::shell {\nstruct DepthParams {\n  float minDepth = 0.f;\n  float maxDepth = 1.f;\n  float nearZ = 0.1f;\n  float farZ = 100.f;\n};\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/Fov.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nnamespace igl::shell {\nstruct Fov {\n  float angleLeft = .0f;\n  float angleRight = .0f;\n  float angleUp = .0f;\n  float angleDown = .0f;\n  Fov() = default;\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  Fov(float left, float right, float up, float down) :\n    angleLeft(left), angleRight(right), angleUp(up), angleDown(down) {}\n};\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/Hands.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <glm/ext/quaternion_float.hpp>\n#include <glm/vec2.hpp>\n#include <glm/vec3.hpp>\n#include <glm/vec4.hpp>\n#include <vector>\n\nnamespace igl::shell {\nstruct Pose {\n  glm::quat orientation;\n  glm::vec3 position;\n};\n\nstruct Velocity {\n  glm::vec3 linear;\n  glm::vec3 angular;\n};\n\nstruct HandMesh {\n  uint32_t vertexCountOutput = 0;\n\n  std::vector<glm::vec3> vertexPositions;\n  std::vector<glm::vec2> vertexUVs;\n  std::vector<glm::vec3> vertexNormals;\n  std::vector<glm::vec4> vertexBlendIndices;\n  std::vector<glm::vec4> vertexBlendWeights;\n  uint32_t indexCountOutput = 0;\n  std::vector<int16_t> indices;\n\n  uint32_t jointCountOutput = 0;\n  std::vector<Pose> jointBindPoses;\n};\n\nstruct HandTracking {\n  std::vector<Pose> jointPose;\n  std::vector<Velocity> jointVelocity;\n  std::vector<bool> isJointTracked;\n};\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/IRenderSessionFactory.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <vector>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n#include <shell/shared/renderSession/RenderSessionWindowConfig.h>\n#include <shell/shared/renderSession/ShellType.h>\n\nnamespace igl::shell {\n\nclass Platform;\nclass RenderSession;\n\nclass IRenderSessionFactory {\n public:\n  virtual ~IRenderSessionFactory() noexcept = default;\n\n  // Used on desktop platforms to configure the window hosting render sessions\n  virtual RenderSessionWindowConfig requestedWindowConfig(\n      ShellType /* shellType */,\n      RenderSessionWindowConfig suggestedConfig) {\n    return suggestedConfig;\n  }\n\n  // Used to configure individual render sessions\n  virtual std::vector<RenderSessionConfig> requestedSessionConfigs(\n      ShellType /* shellType */,\n      std::vector<RenderSessionConfig> suggestedConfigs) {\n    std::vector<RenderSessionConfig> requestedConfigs;\n    requestedConfigs.reserve(suggestedConfigs.size());\n    for (auto& suggestedConfig : suggestedConfigs) {\n      if (suggestedConfig.backendVersion.flavor != igl::BackendFlavor::Invalid) {\n        requestedConfigs.push_back(suggestedConfig);\n      }\n    }\n    return requestedConfigs;\n  }\n\n  virtual std::unique_ptr<RenderSession> createRenderSession(\n      std::shared_ptr<Platform> platform) noexcept = 0;\n\n  // Used on Android to get the system properties prefix for reading shell params\n  [[nodiscard]] virtual const char* getAndroidSystemPropsPrefix() const noexcept {\n    return \"debug.iglshell.renderSession\";\n  }\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/QuadLayerParams.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <glm/glm.hpp>\n#include <vector>\n#include <igl/RenderPipelineState.h>\n\nnamespace igl::shell {\n\nenum class LayerBlendMode : uint8_t {\n  Opaque = 0,\n  AlphaBlend = 1,\n  Custom = 2,\n};\n\nstruct QuadLayerInfo {\n  glm::vec3 position{0.0f, 0.0f, 0.0f};\n  glm::vec2 size{1.0f, 1.0f};\n  LayerBlendMode blendMode = LayerBlendMode::Opaque;\n  uint32_t imageWidth = 1024;\n  uint32_t imageHeight = 1024;\n  BlendFactor customSrcRGBBlendFactor = igl::BlendFactor::One;\n  BlendFactor customSrcAlphaBlendFactor = igl::BlendFactor::One;\n  BlendFactor customDstRGBBlendFactor = igl::BlendFactor::Zero;\n  BlendFactor customDstAlphaBlendFactor = igl::BlendFactor::Zero;\n};\n\nstruct QuadLayerParams {\n  std::vector<QuadLayerInfo> layerInfo;\n\n  [[nodiscard]] size_t numQuads() const noexcept {\n    return layerInfo.size();\n  }\n};\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/RenderMode.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nnamespace igl::shell {\nenum class RenderMode {\n  Mono,\n  DualPassStereo, // Render each eye separately\n  SinglePassStereo, // Render both eyes at the same time\n};\n}\n"
  },
  {
    "path": "shell/shared/renderSession/RenderSession.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/renderSession/RenderSession.h>\n\n#include <chrono>\n#include <cstdlib>\n#include <thread>\n#include <shell/shared/platform/DisplayContext.h>\n#include <shell/shared/renderSession/AppParams.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/Common.h>\n\nnamespace igl::shell {\n\nRenderSession::RenderSession(std::shared_ptr<Platform> platform) :\n  platform_(std::move(platform)), appParams_(std::make_shared<AppParams>()) {}\n\nvoid RenderSession::updateDisplayScale(float scale) noexcept {\n  platform_->getDisplayContext().scale = scale;\n}\n\nfloat RenderSession::pixelsPerPoint() const noexcept {\n  return platform_->getDisplayContext().pixelsPerPoint;\n}\n\nvoid RenderSession::setPixelsPerPoint(float scale) noexcept {\n  platform_->getDisplayContext().pixelsPerPoint = scale;\n}\n\nconst ShellParams& RenderSession::shellParams() const noexcept {\n  static const ShellParams kSentinelParams = {};\n  return shellParams_ ? *shellParams_ : kSentinelParams;\n}\n\nconst AppParams& RenderSession::appParams() const noexcept {\n  return *appParams_;\n}\n\nAppParams& RenderSession::appParamsRef() noexcept {\n  return *appParams_;\n}\n\nPlatform& RenderSession::getPlatform() noexcept {\n  return *platform_;\n}\nconst Platform& RenderSession::getPlatform() const noexcept {\n  return *platform_;\n}\n\nconst std::shared_ptr<Platform>& RenderSession::platform() const noexcept {\n  return platform_;\n}\n\nfloat RenderSession::getDeltaSeconds() noexcept {\n  const double newTime = getSeconds();\n  const float deltaSeconds = float(newTime - lastTime_);\n  lastTime_ = newTime;\n  return deltaSeconds;\n}\n\ndouble RenderSession::getSeconds() noexcept {\n  return std::chrono::duration<double>(std::chrono::high_resolution_clock::now().time_since_epoch())\n      .count();\n}\n\nvoid RenderSession::setPreferredClearColor(const igl::Color& color) noexcept {\n  preferredClearColor_ = color;\n}\n\nColor RenderSession::getPreferredClearColor() noexcept {\n  return preferredClearColor_.has_value() ? preferredClearColor_.value()\n                                          : platform()->getDevice().backendDebugColor();\n}\n\nvoid RenderSession::initBenchmarkTracker() noexcept {\n  if (!shellParams_ || !shellParams_->benchmarkParams.has_value()) {\n    return;\n  }\n\n  const auto& benchmarkParams = shellParams_->benchmarkParams.value();\n  benchmarkTracker_ = std::make_unique<BenchmarkTracker>(benchmarkParams.renderTimeBufferSize);\n  benchmarkTracker_->setBenchmarkDuration(benchmarkParams.benchmarkDurationMs);\n  benchmarkTracker_->setReportInterval(benchmarkParams.reportIntervalMs);\n  benchmarkTracker_->setHiccupMultiplier(benchmarkParams.hiccupMultiplier);\n\n  IGL_LOG_INFO(\"[IGL Benchmark] Benchmark tracking initialized\\n\");\n  IGL_LOG_INFO(\"[IGL Benchmark]   Duration: %zu ms (%.1f minutes)\\n\",\n               benchmarkParams.benchmarkDurationMs,\n               benchmarkParams.benchmarkDurationMs / 60000.0);\n  IGL_LOG_INFO(\"[IGL Benchmark]   Report Interval: %zu ms (%.1f seconds)\\n\",\n               benchmarkParams.reportIntervalMs,\n               benchmarkParams.reportIntervalMs / 1000.0);\n  IGL_LOG_INFO(\"[IGL Benchmark]   Hiccup Multiplier: %.1f\\n\", benchmarkParams.hiccupMultiplier);\n  IGL_LOG_INFO(\"[IGL Benchmark]   Buffer Size: %zu samples\\n\",\n               benchmarkParams.renderTimeBufferSize);\n}\n\nvoid RenderSession::recordBenchmarkFrame(double renderTimeMs) noexcept {\n  if (!benchmarkTracker_) {\n    return;\n  }\n\n  benchmarkTracker_->recordRenderTime(renderTimeMs);\n\n  // Log hiccups immediately when detected\n  if (benchmarkTracker_->wasLastFrameHiccup()) {\n    IGL_LOG_INFO(\"[IGL Benchmark] *** HICCUP DETECTED *** Frame time: %.2f ms (avg: %.2f ms)\\n\",\n                 renderTimeMs,\n                 benchmarkTracker_->getRunningAverageMs());\n  }\n}\n\nvoid RenderSession::checkBenchmarkPeriodicReport() noexcept {\n  if (!benchmarkTracker_) {\n    return;\n  }\n\n  if (benchmarkTracker_->shouldGeneratePeriodicReport()) {\n    const auto stats = benchmarkTracker_->computeStats();\n    const double elapsedMin = benchmarkTracker_->getElapsedTimeMs() / 60000.0;\n\n    IGL_LOG_INFO(\"[IGL Benchmark] === Periodic Report (%.1f min elapsed) ===\\n\", elapsedMin);\n    IGL_LOG_INFO(\"[IGL Benchmark] FPS: avg=%.1f, min=%.1f, max=%.1f\\n\",\n                 stats.avgFps,\n                 stats.minFps,\n                 stats.maxFps);\n    IGL_LOG_INFO(\"[IGL Benchmark] Frame time (ms): avg=%.2f, min=%.2f, max=%.2f\\n\",\n                 stats.avgRenderTimeMs,\n                 stats.minRenderTimeMs,\n                 stats.maxRenderTimeMs);\n    IGL_LOG_INFO(\"[IGL Benchmark] Total frames: %zu\\n\", stats.totalSamples);\n\n    // Suppress unused variable warnings when logging is disabled\n    (void)stats;\n    (void)elapsedMin;\n\n    benchmarkTracker_->markPeriodicReportGenerated();\n  }\n}\n\nbool RenderSession::isBenchmarkExpired() const noexcept {\n  if (!benchmarkTracker_) {\n    return false;\n  }\n  return benchmarkTracker_->hasBenchmarkExpired();\n}\n\nvoid RenderSession::logFinalBenchmarkReport(bool wasTimeout) noexcept {\n  if (!benchmarkTracker_) {\n    return;\n  }\n\n  // Log the final report line by line to ensure it appears in logcat\n  const auto stats = benchmarkTracker_->computeStats();\n  const double elapsedSec = benchmarkTracker_->getElapsedTimeMs() / 1000.0;\n  const double elapsedMin = elapsedSec / 60.0;\n\n  IGL_LOG_INFO(\"[IGL Benchmark] ========== FINAL BENCHMARK REPORT ==========\\n\");\n  if (wasTimeout) {\n    IGL_LOG_INFO(\"[IGL Benchmark] Status: COMPLETED SUCCESSFULLY (benchmark timeout reached)\\n\");\n  } else {\n    IGL_LOG_INFO(\"[IGL Benchmark] Status: COMPLETED (application terminated normally)\\n\");\n  }\n  IGL_LOG_INFO(\"[IGL Benchmark] Duration: %.1f minutes (%.1f seconds)\\n\", elapsedMin, elapsedSec);\n  IGL_LOG_INFO(\"[IGL Benchmark] Total Frames: %zu\\n\", stats.totalSamples);\n  IGL_LOG_INFO(\"[IGL Benchmark] ---------- FPS Statistics ----------\\n\");\n  IGL_LOG_INFO(\"[IGL Benchmark] Average FPS: %.1f\\n\", stats.avgFps);\n  IGL_LOG_INFO(\"[IGL Benchmark] Minimum FPS: %.1f\\n\", stats.minFps);\n  IGL_LOG_INFO(\"[IGL Benchmark] Maximum FPS: %.1f\\n\", stats.maxFps);\n  IGL_LOG_INFO(\"[IGL Benchmark] ---------- Frame Time Statistics ----------\\n\");\n  IGL_LOG_INFO(\"[IGL Benchmark] Average: %.2f ms\\n\", stats.avgRenderTimeMs);\n  IGL_LOG_INFO(\"[IGL Benchmark] Minimum: %.2f ms\\n\", stats.minRenderTimeMs);\n  IGL_LOG_INFO(\"[IGL Benchmark] Maximum: %.2f ms\\n\", stats.maxRenderTimeMs);\n  IGL_LOG_INFO(\"[IGL Benchmark] Overflow Records: %zu\\n\",\n               benchmarkTracker_->getOverflowRecordCount());\n  IGL_LOG_INFO(\"[IGL Benchmark] ===============================================\\n\");\n\n  // Suppress unused variable warnings when logging is disabled\n  (void)stats;\n  (void)elapsedSec;\n  (void)elapsedMin;\n  (void)wasTimeout;\n}\n\nvoid RenderSession::runUpdate(SurfaceTextures surfaceTextures) noexcept {\n  // Check if frozen (frame gate)\n  if (frozen_) {\n    return;\n  }\n\n  // Initialize benchmark tracker on first call if not already done\n  if (shellParams_ && shellParams_->benchmarkParams.has_value() && !benchmarkTracker_) {\n    initBenchmarkTracker();\n  }\n\n  // Debug: Log once if benchmark params are missing\n  if (!loggedMissingParams_ && !benchmarkTracker_) {\n    if (!shellParams_) {\n      IGL_LOG_INFO(\"[IGL Benchmark] WARNING: shellParams_ is null, benchmark tracking disabled\\n\");\n    } else if (!shellParams_->benchmarkParams.has_value()) {\n      IGL_LOG_INFO(\n          \"[IGL Benchmark] WARNING: benchmarkParams not set, benchmark tracking disabled\\n\");\n      IGL_LOG_INFO(\n          \"[IGL Benchmark] Use --benchmark flag or set \"\n          \"debug.iglshell.renderSession.benchmark=true\\n\");\n    }\n    loggedMissingParams_ = true;\n  }\n\n  // Check freeze-at-frame gate\n  if (shellParams_ && shellParams_->freezeAtFrame != ~0u &&\n      frameCount_ >= shellParams_->freezeAtFrame) {\n    frozen_ = true;\n    IGL_LOG_INFO(\"[IGL Shell] Frozen at frame %u\\n\", shellParams_->freezeAtFrame);\n    return;\n  }\n\n  // Measure render time for benchmarking\n  const double startTime = getSeconds();\n\n  // Call the actual update implementation\n  update(std::move(surfaceTextures));\n\n  // Record benchmark frame timing if tracker is active\n  if (benchmarkTracker_) {\n    const double endTime = getSeconds();\n    const double renderTimeMs = (endTime - startTime) * 1000.0;\n    recordBenchmarkFrame(renderTimeMs);\n\n    // Check for periodic benchmark reporting\n    checkBenchmarkPeriodicReport();\n\n    // Check if benchmark has expired (only log once)\n    if (benchmarkTracker_->hasBenchmarkExpired() && !benchmarkExpiredLogged_) {\n      IGL_LOG_INFO(\"[IGL Benchmark] Benchmark duration expired, requesting exit\\n\");\n      logFinalBenchmarkReport(true);\n      appParamsRef().exitRequested = true;\n      benchmarkExpiredLogged_ = true;\n    }\n  }\n\n  // FPS throttling\n  if (shellParams_ && shellParams_->fpsThrottleMs > 0) {\n    const double endTime = getSeconds();\n    const double frameTimeMs = (endTime - startTime) * 1000.0;\n    const double targetMs =\n        shellParams_->fpsThrottleRandom\n            ? static_cast<double>(1 + (std::rand() % shellParams_->fpsThrottleMs))\n            : static_cast<double>(shellParams_->fpsThrottleMs);\n    if (frameTimeMs < targetMs) {\n      std::this_thread::sleep_for(\n          std::chrono::milliseconds(static_cast<int>(targetMs - frameTimeMs)));\n    }\n  }\n\n  frameCount_++;\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/RenderSession.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <optional>\n#include <shell/shared/platform/Platform.h>\n#include <shell/shared/renderSession/BenchmarkTracker.h>\n\nnamespace igl::shell {\nstruct AppParams;\nstruct ShellParams;\n\nclass RenderSession {\n public:\n  explicit RenderSession(std::shared_ptr<Platform> platform);\n  virtual ~RenderSession() noexcept = default;\n\n  // Enable move operations (unique_ptr requires explicit declaration)\n  RenderSession(RenderSession&&) noexcept = default;\n  RenderSession& operator=(RenderSession&&) noexcept = default;\n\n  // Disable copy operations\n  RenderSession(const RenderSession&) = delete;\n  RenderSession& operator=(const RenderSession&) = delete;\n\n  virtual void initialize() noexcept {}\n  // NOLINTNEXTLINE(performance-unnecessary-value-param)\n  virtual void update(IGL_MAYBE_UNUSED SurfaceTextures surfaceTextures) noexcept {}\n\n  /// @brief Wrapper around update() that automatically handles benchmark timing\n  /// Platform code should call this instead of update() directly when benchmark\n  /// tracking is desired. This method:\n  /// 1. Measures the time taken by update()\n  /// 2. Records the frame time for benchmarking\n  /// 3. Checks for periodic reporting\n  /// 4. Checks for benchmark expiration and sets exitRequested if needed\n  void runUpdate(SurfaceTextures surfaceTextures) noexcept;\n  virtual void teardown() noexcept {}\n\n  void updateDisplayScale(float scale) noexcept;\n\n  [[nodiscard]] float pixelsPerPoint() const noexcept;\n  void setPixelsPerPoint(float scale) noexcept;\n\n  virtual void setShellParams(const ShellParams& shellParams) noexcept {\n    shellParams_ = &shellParams;\n  }\n\n  /// @brief Params provided to the session by the host\n  /// @remark Params may vary each frame.\n  [[nodiscard]] const ShellParams& shellParams() const noexcept;\n\n  /// @brief Params provided by the session to the host.\n  /// @remark Params may vary each frame.\n  [[nodiscard]] const AppParams& appParams() const noexcept;\n\n  void setCurrentQuadLayer(size_t layer) noexcept {\n    currentQuadLayer_ = layer;\n  }\n\n  /// return the number of seconds since the last call\n  float getDeltaSeconds() noexcept;\n\n  static double getSeconds() noexcept;\n\n  virtual ICommandQueue* getCommandQueue() noexcept {\n    return commandQueue_.get();\n  }\n\n  std::shared_ptr<IFramebuffer> getFramebuffer() noexcept {\n    return framebuffer_;\n  }\n\n  void releaseFramebuffer() {\n    framebuffer_ = nullptr;\n  }\n\n  void setPreferredClearColor(const igl::Color& color) noexcept;\n  Color getPreferredClearColor() noexcept;\n\n  /// @brief Initializes the benchmark tracker based on shell params\n  /// Call this after shellParams_ is set to enable benchmark tracking\n  void initBenchmarkTracker() noexcept;\n\n  /// @brief Records a frame's render time for benchmarking\n  /// @param renderTimeMs The time in milliseconds for the update call\n  void recordBenchmarkFrame(double renderTimeMs) noexcept;\n\n  /// @brief Checks and handles periodic benchmark reporting\n  /// Logs stats every minute if benchmark mode is enabled\n  void checkBenchmarkPeriodicReport() noexcept;\n\n  /// @brief Checks if the benchmark has expired and should trigger app exit\n  /// @return true if benchmark duration exceeded\n  [[nodiscard]] bool isBenchmarkExpired() const noexcept;\n\n  /// @brief Generates and logs the final benchmark report\n  /// @param wasTimeout true if the benchmark ended due to timeout\n  void logFinalBenchmarkReport(bool wasTimeout) noexcept;\n\n  /// @brief Gets the benchmark tracker (may be nullptr if not in benchmark mode)\n  [[nodiscard]] BenchmarkTracker* getBenchmarkTracker() noexcept {\n    return benchmarkTracker_.get();\n  }\n\n  /// @brief Returns mutable reference to AppParams (for benchmark to request exit)\n  [[nodiscard]] AppParams& appParamsRef() noexcept;\n\n protected:\n  Platform& getPlatform() noexcept;\n  [[nodiscard]] const Platform& getPlatform() const noexcept;\n\n  [[nodiscard]] const std::shared_ptr<Platform>& platform() const noexcept;\n\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<ICommandQueue> commandQueue_;\n  size_t currentQuadLayer_ = 0;\n  double lastTime_ = getSeconds();\n\n private:\n  std::shared_ptr<Platform> platform_;\n  std::shared_ptr<AppParams> appParams_;\n  std::optional<Color> preferredClearColor_;\n  const ShellParams* shellParams_ = nullptr;\n  std::unique_ptr<BenchmarkTracker> benchmarkTracker_;\n  uint32_t frameCount_ = 0;\n  bool benchmarkExpiredLogged_ = false;\n  bool loggedMissingParams_ = false;\n  bool frozen_ = false;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/RenderSessionConfig.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <igl/DeviceFeatures.h>\n\nnamespace igl::shell {\n\nstruct RenderSessionConfig {\n  std::string displayName;\n  BackendVersion backendVersion;\n  TextureFormat swapchainColorTextureFormat = igl::TextureFormat::BGRA_UNorm8;\n  TextureFormat depthTextureFormat = igl::TextureFormat::Z_UNorm16;\n  ColorSpace swapchainColorSpace = igl::ColorSpace::SRGB_NONLINEAR;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/RenderSessionLoader.hpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <functional>\n#include <memory>\n\nnamespace igl::shell {\nclass RenderSession;\nclass Platform;\n\nusing RenderSessionLoader =\n    std::function<std::unique_ptr<RenderSession>(std::shared_ptr<Platform>)>;\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/RenderSessionRegistry.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/renderSession/RenderSessionRegistry.hpp>\n\n#include <unordered_map>\n#include <igl/Core.h>\n\nnamespace igl::shell {\n\nbool RenderSessionRegistry::contains(const std::string& loaderName) const noexcept {\n  return loaders_.find(loaderName) != loaders_.cend();\n}\n\nbool RenderSessionRegistry::empty() const noexcept {\n  return loaders_.empty();\n}\n\nsize_t RenderSessionRegistry::size() const noexcept {\n  return loaders_.size();\n}\n\nRenderSessionLoader& RenderSessionRegistry::findLoader(const std::string& loaderName) noexcept {\n  if (auto it = loaders_.find(loaderName); IGL_DEBUG_VERIFY(it != loaders_.end())) {\n    return it->second;\n  }\n  IGL_LOG_ERROR(\"Could not find RenderSessionLoader for (%s)\\n\", loaderName.c_str());\n  static RenderSessionLoader sSentinelLoader;\n  return sSentinelLoader;\n}\n\nvoid RenderSessionRegistry::registerLoader(const std::string& loaderName,\n                                           RenderSessionLoader value) noexcept {\n  loaders_[loaderName] = std::move(value);\n}\n\nconst std::string& RenderSessionRegistry::defaultLoaderName() const noexcept {\n  return defaultLoaderName_;\n}\n\nvoid RenderSessionRegistry::setDefaultLoaderName(std::string loaderName) noexcept {\n  defaultLoaderName_ = std::move(loaderName);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/RenderSessionRegistry.hpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <unordered_map>\n#include <shell/shared/renderSession/RenderSessionLoader.hpp>\n\nnamespace igl::shell {\n\nclass RenderSessionRegistry {\n public:\n  bool contains(const std::string& loaderName) const noexcept;\n  bool empty() const noexcept;\n  size_t size() const noexcept;\n\n  RenderSessionLoader& findLoader(const std::string& loaderName) noexcept;\n  void registerLoader(const std::string& loaderName, RenderSessionLoader value) noexcept;\n\n  const std::string& defaultLoaderName() const noexcept;\n  void setDefaultLoaderName(std::string loaderName) noexcept;\n\n private:\n  std::unordered_map<std::string, RenderSessionLoader> loaders_;\n  std::string defaultLoaderName_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/RenderSessionWindowConfig.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n\nnamespace igl::shell {\n\nenum class WindowMode {\n  Window,\n  MaximizedWindow,\n  Fullscreen,\n};\n\nstruct RenderSessionWindowConfig {\n  uint32_t width = 1024;\n  uint32_t height = 768;\n  WindowMode windowMode = WindowMode::Window;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/ScreenshotTestRenderSessionHelper.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/renderSession/ScreenshotTestRenderSessionHelper.h>\n\n#include <shell/shared/imageWriter/ImageWriter.h>\n#include <igl/Config.h>\n\nnamespace igl::shell {\n\nvoid saveFrameBufferToPng(const char* absoluteFilename,\n                          const std::shared_ptr<IFramebuffer>& framebuffer,\n                          Platform& platform) {\n  auto drawableSurface = framebuffer->getColorAttachment(0);\n  auto frameBufferSize = drawableSurface->getDimensions();\n  const int bytesPerPixel = 4;\n  const auto rangeDesc =\n      TextureRangeDesc::new2D(0, 0, frameBufferSize.width, frameBufferSize.height);\n  ImageData imageData;\n  imageData.desc.format = drawableSurface->getFormat();\n  imageData.desc.width = frameBufferSize.width;\n  imageData.desc.height = frameBufferSize.height;\n  auto buffer =\n      std::make_unique<uint8_t[]>(frameBufferSize.width * frameBufferSize.height * bytesPerPixel);\n\n  const CommandQueueDesc desc{};\n  auto commandQueue = platform.getDevice().createCommandQueue(desc, nullptr);\n  framebuffer->copyBytesColorAttachment(*commandQueue, 0, buffer.get(), rangeDesc);\n\n  const size_t numPixels = frameBufferSize.width * frameBufferSize.height * bytesPerPixel;\n\n#if IGL_PLATFORM_WINDOWS\n  if (imageData.desc.format == TextureFormat::BGRA_UNorm8) {\n    // Swap B and R channels, as image writer expects RGBA.\n    // Note that this is only defined for the Windows platform, as in practice\n    // BGRA might only be used there for render targets.\n    for (size_t i = 0; i < numPixels; i += bytesPerPixel) {\n      std::swap(buffer.get()[i], buffer.get()[i + 2]);\n    }\n  }\n#endif\n\n  imageData.data = iglu::textureloader::IData::tryCreate(std::move(buffer), numPixels, nullptr);\n\n  IGLLog(IGLLogInfo, \"Writing screenshot to: '%s'\\n\", absoluteFilename);\n  platform.getImageWriter().writeImage(absoluteFilename, imageData);\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/ScreenshotTestRenderSessionHelper.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <shell/shared/platform/Platform.h>\n\nnamespace igl {\nclass IFramebuffer;\n} // namespace igl\n\nnamespace igl::shell {\nvoid saveFrameBufferToPng(const char* absoluteFilename,\n                          const std::shared_ptr<IFramebuffer>& framebuffer,\n                          Platform& platform);\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/ShaderProvider.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <unordered_set>\n#include <vector>\n#include <igl/Device.h>\n#include <igl/Shader.h>\n\nnamespace igl::shell {\n\nclass IShaderProvider {\n public:\n  [[nodiscard]] virtual ShaderStage getStage() const = 0;\n  [[nodiscard]] virtual std::string getShaderText(const IDevice& device) const = 0;\n  [[nodiscard]] virtual std::vector<uint32_t> getShaderBinary(const IDevice& device) const = 0;\n  virtual ~IShaderProvider() = default;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/ShaderStagesCreator.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"ShaderStagesCreator.h\"\n\nnamespace igl::shell {\n\nnamespace {\nconst char* getEntryPointName(ShaderStage stage, BackendType backendType) {\n  switch (backendType) {\n  case igl::BackendType::Metal:\n    switch (stage) {\n    case igl::ShaderStage::Vertex:\n      return \"vertexMain\";\n    case igl::ShaderStage::Fragment:\n      return \"fragmentMain\";\n    case igl::ShaderStage::Compute:\n      return \"computeMain\";\n    case igl::ShaderStage::Task:\n      return \"taskMain\";\n    case igl::ShaderStage::Mesh:\n      return \"meshMain\";\n    }\n  case igl::BackendType::Vulkan:\n    return \"main\";\n  default:\n    return \"main\";\n  }\n}\n\nShaderModuleInfo getShaderModuleInfo(ShaderStage stage, BackendType backendType) {\n  return {.stage = stage, .entryPoint = getEntryPointName(stage, backendType)};\n}\n} // namespace\n\nstd::unique_ptr<IShaderStages> createRenderPipelineStages(\n    const igl::IDevice& device,\n    const IShaderProvider& vertShaderProvider,\n    const IShaderProvider& fragShaderProvider) {\n  Result result;\n  auto backend = device.getBackendType();\n  if (backend == igl::BackendType::Vulkan) {\n    auto vertWords = vertShaderProvider.getShaderBinary(device);\n    auto fragWords = vertShaderProvider.getShaderBinary(device);\n    auto vertModule = igl::ShaderModuleCreator::fromBinaryInput(\n        device,\n        vertWords.data(),\n        vertWords.size() * sizeof(uint32_t),\n        getShaderModuleInfo(igl::ShaderStage::Vertex, backend),\n        \"\",\n        &result);\n    auto fragModule = igl::ShaderModuleCreator::fromBinaryInput(\n        device,\n        fragWords.data(),\n        fragWords.size() * sizeof(uint32_t),\n        getShaderModuleInfo(igl::ShaderStage::Fragment, backend),\n        \"\",\n        &result);\n    return igl::ShaderStagesCreator::fromRenderModules(\n        device, std::move(vertModule), std::move(fragModule), &result);\n  } else {\n    auto vertModule = igl::ShaderModuleCreator::fromStringInput(\n        device,\n        vertShaderProvider.getShaderText(device).c_str(),\n        getShaderModuleInfo(igl::ShaderStage::Vertex, backend),\n        \"\",\n        &result);\n    auto fragModule = igl::ShaderModuleCreator::fromStringInput(\n        device,\n        fragShaderProvider.getShaderText(device).c_str(),\n        getShaderModuleInfo(igl::ShaderStage::Fragment, backend),\n        \"\",\n        &result);\n    return igl::ShaderStagesCreator::fromRenderModules(\n        device, std::move(vertModule), std::move(fragModule), &result);\n  }\n}\n\nstd::unique_ptr<IShaderStages> createComputePipelineStages(\n    const igl::IDevice& device,\n    const IShaderProvider& compShaderProvider) {\n  Result result;\n  auto backend = device.getBackendType();\n  if (backend == igl::BackendType::Vulkan) {\n    auto compWords = compShaderProvider.getShaderBinary(device);\n    auto compModule = igl::ShaderModuleCreator::fromBinaryInput(\n        device,\n        compWords.data(),\n        compWords.size() * sizeof(uint32_t),\n        getShaderModuleInfo(igl::ShaderStage::Compute, backend),\n        \"\",\n        &result);\n    return igl::ShaderStagesCreator::fromComputeModule(device, std::move(compModule), &result);\n  } else {\n    auto compModule = igl::ShaderModuleCreator::fromStringInput(\n        device,\n        compShaderProvider.getShaderText(device).c_str(),\n        getShaderModuleInfo(igl::ShaderStage::Compute, backend),\n        \"\",\n        &result);\n    return igl::ShaderStagesCreator::fromComputeModule(device, std::move(compModule), &result);\n  }\n}\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/ShaderStagesCreator.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <shell/shared/renderSession/ShaderProvider.h>\n#include <igl/Device.h>\n#include <igl/Shader.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::shell {\nstd::unique_ptr<IShaderStages> createRenderPipelineStages(\n    const igl::IDevice& device,\n    const IShaderProvider& vertShaderProvider,\n    const IShaderProvider& fragShaderProvider);\n\nstd::unique_ptr<IShaderStages> createComputePipelineStages(\n    const igl::IDevice& device,\n    const IShaderProvider& compShaderProvider);\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/ShellParams.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <shell/shared/renderSession/ShellParams.h>\n\n#include <cstdio>\n#include <cstring>\n#include <string>\n#include <vector>\n\nnamespace igl::shell {\nnamespace {\nstd::optional<BenchmarkRenderSessionParams> parseBenchmarkRenderSessionParams(\n    const std::vector<std::string>& args) {\n  // Flag to track if any benchmark-related parameters were found\n  bool benchmarkParamsFound = false;\n\n  // Create a params struct with default values\n  BenchmarkRenderSessionParams benchmarkParams;\n\n  // Parse command line arguments\n  for (size_t i = 0; i < args.size(); i++) {\n    const std::string& arg = args[i];\n\n    // Check for timeout parameter\n    if (arg == \"--timeout\" || arg == \"-t\") {\n      if (i + 1 < args.size()) {\n        benchmarkParams.renderSessionTimeoutMs = std::stoul(args[++i]);\n        benchmarkParamsFound = true;\n      }\n    }\n    // Check for number of sessions parameter\n    else if (arg == \"--sessions\" || arg == \"-s\") {\n      if (i + 1 < args.size()) {\n        benchmarkParams.numSessionsToRun = std::stoul(args[++i]);\n        benchmarkParamsFound = true;\n      }\n    }\n    // Check for log reporter flag\n    else if (arg == \"--log-reporter\" || arg == \"-l\") {\n      benchmarkParams.logReporter = true;\n      benchmarkParamsFound = true;\n    }\n    // Check for offscreen rendering flag\n    else if (arg == \"--offscreen-only\" || arg == \"-o\") {\n      benchmarkParams.offscreenRenderingOnly = true;\n      benchmarkParamsFound = true;\n    }\n    // Check for benchmark mode flag (enables benchmark mode without specific params)\n    else if (arg == \"--benchmark\" || arg == \"-b\") {\n      benchmarkParamsFound = true;\n    }\n    // Check for benchmark duration (time of run) parameter\n    else if (arg == \"--benchmark-duration\" || arg == \"--run-time\") {\n      if (i + 1 < args.size()) {\n        benchmarkParams.benchmarkDurationMs = std::stoul(args[++i]);\n        benchmarkParamsFound = true;\n      }\n    }\n    // Check for report interval parameter\n    else if (arg == \"--report-interval\") {\n      if (i + 1 < args.size()) {\n        benchmarkParams.reportIntervalMs = std::stoul(args[++i]);\n        benchmarkParamsFound = true;\n      }\n    }\n    // Check for hiccup multiplier parameter\n    else if (arg == \"--hiccup-multiplier\") {\n      if (i + 1 < args.size()) {\n        benchmarkParams.hiccupMultiplier = std::stod(args[++i]);\n        benchmarkParamsFound = true;\n      }\n    }\n    // Check for render time buffer size parameter\n    else if (arg == \"--render-buffer-size\") {\n      if (i + 1 < args.size()) {\n        benchmarkParams.renderTimeBufferSize = std::stoul(args[++i]);\n        benchmarkParamsFound = true;\n      }\n    }\n    // Check for custom parameters in the form --key value\n    else if (arg.rfind(\"--\", 0) == 0) {\n      std::string key = arg.substr(2); // Remove \"--\" prefix\n      std::string value;\n      if (i + 1 < args.size() && args[i + 1].rfind(\"--\", 0) != 0) {\n        // Next argument is the value (not another flag)\n        value = args[++i];\n      }\n      benchmarkParams.customParams.emplace_back(key, value);\n    }\n  }\n\n  // Return the params if any benchmark-related parameters were found, otherwise return nullopt\n  return benchmarkParamsFound ? std::optional<BenchmarkRenderSessionParams>(benchmarkParams)\n                              : std::nullopt;\n}\n} // namespace\n\nstd::vector<std::string> convertArgvToParams(int argc, char** argv) {\n  std::vector<std::string> args;\n  args.reserve(argc);\n  for (int i = 0; i < argc; i++) {\n    args.emplace_back(argv[i]);\n  }\n  return args;\n}\n\nvoid parseShellParams(const std::vector<std::string>& args, ShellParams& shellParams) {\n  // Parse benchmark parameters using existing function\n  // Only override benchmarkParams if command line args specify benchmark parameters\n  auto parsedBenchmarkParams = parseBenchmarkRenderSessionParams(args);\n  if (parsedBenchmarkParams.has_value()) {\n    shellParams.benchmarkParams = parsedBenchmarkParams;\n  }\n\n  // Parse other shell parameters\n  for (size_t i = 0; i < args.size(); i++) {\n    const std::string& arg = args[i];\n\n    if (arg == \"--headless\") {\n      shellParams.isHeadless = true;\n      shellParams.screenshotNumber =\n          shellParams.screenshotNumber != ~0 ? shellParams.screenshotNumber : 0;\n    } else if (arg == \"--disable-vulkan-validation-layers\") {\n      shellParams.enableVulkanValidationLayers = false;\n    } else if (arg == \"--screenshot-file\") {\n      if (i + 1 < args.size()) {\n        shellParams.screenshotFileName = args[++i];\n      }\n    } else if (arg == \"--screenshot-number\") {\n      if (i + 1 < args.size()) {\n        shellParams.screenshotNumber = static_cast<uint32_t>(std::stoi(args[++i]));\n      }\n    } else if (arg == \"--viewport-size\") {\n      if (i + 1 < args.size()) {\n        const std::string& value = args[++i];\n        unsigned int w = 0;\n        unsigned int h = 0;\n        if (sscanf(value.c_str(), \"%ux%u\", &w, &h) == 2) {\n          if (w && h) {\n            shellParams.viewportSize = glm::vec2(w, h);\n          }\n        }\n      }\n    } else if (arg == \"--fps-throttle\") {\n      if (i + 1 < args.size()) {\n        shellParams.fpsThrottleMs = static_cast<uint32_t>(std::stoi(args[++i]));\n      }\n    } else if (arg == \"--fps-throttle-random\") {\n      shellParams.fpsThrottleRandom = true;\n    } else if (arg == \"--freeze-at-frame\") {\n      if (i + 1 < args.size()) {\n        shellParams.freezeAtFrame = static_cast<uint32_t>(std::stoi(args[++i]));\n      }\n    } else if (arg == \"--use-timer-rendering\") {\n      shellParams.useTimerRendering = true;\n    }\n  }\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/ShellParams.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <optional>\n#include <string>\n#include <vector>\n#include <shell/shared/renderSession/Hands.h>\n#include <shell/shared/renderSession/RenderMode.h>\n#include <shell/shared/renderSession/ViewParams.h>\n#include <igl/ColorSpace.h>\n#include <igl/Common.h>\n#include <igl/TextureFormat.h>\n\nnamespace igl::shell {\n\nstruct BenchmarkRenderSessionParams {\n  size_t renderSessionTimeoutMs = 2000;\n  size_t numSessionsToRun = 10;\n  bool logReporter = false;\n  bool offscreenRenderingOnly = false;\n  std::vector<std::pair<std::string, std::string>> customParams;\n\n  /// @brief Duration for the benchmark run in milliseconds (default: 30 minutes)\n  /// When this time elapses, the benchmark will complete and generate a final report.\n  /// Set to 0 for no time limit.\n  size_t benchmarkDurationMs = 30 * 60 * 1000;\n\n  /// @brief Interval between periodic FPS reports in milliseconds (default: 1 minute)\n  size_t reportIntervalMs = 2 * 1000;\n\n  /// @brief Multiplier for hiccup detection: frame time > avgFrameTime * multiplier = hiccup\n  double hiccupMultiplier = 3.0;\n\n  /// @brief Size of the circular buffer for storing render times\n  size_t renderTimeBufferSize = 1000;\n};\n\nstruct ShellParams {\n  std::vector<ViewParams> viewParams;\n  RenderMode renderMode = RenderMode::Mono;\n  bool shellControlsViewParams = false;\n  bool rightHandedCoordinateSystem = false;\n  glm::vec2 viewportSize = glm::vec2(1024.0f, 768.0f);\n  glm::ivec2 nativeSurfaceDimensions = glm::ivec2(2048, 1536);\n  float viewportScale = 1.f;\n  bool shouldPresent = true;\n  std::optional<Color> clearColorValue = {};\n  std::array<HandMesh, 2> handMeshes = {};\n  std::array<HandTracking, 2> handTracking = {};\n  std::string screenshotFileName = \"screenshot.png\";\n  uint32_t screenshotNumber = ~0u; // frame number to save as a screenshot in headless more\n  bool isHeadless = false;\n  bool enableVulkanValidationLayers = true;\n  std::optional<BenchmarkRenderSessionParams> benchmarkParams = {};\n\n  // FPS throttling for testing race conditions\n  uint32_t fpsThrottleMs = 0; // 0 = disabled, >0 = delay in milliseconds per frame\n  uint32_t freezeAtFrame = ~0u; // frame number to freeze at (~0u = disabled)\n  bool fpsThrottleRandom = false; // if true, throttle is random in range [1, fpsThrottleMs]\n  bool useTimerRendering = false; // use external display link for rendering (macOS Metal)\n};\n\nstd::vector<std::string> convertArgvToParams(int argc, char** argv);\n\nvoid parseShellParams(const std::vector<std::string>& args, ShellParams& shellParams);\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/ShellType.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nnamespace igl::shell {\n\nenum class ShellType {\n  Mac,\n  iOS, // NOLINT(readability-identifier-naming)\n  Android,\n  OpenXR,\n  Windows,\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/renderSession/ViewParams.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <glm/glm.hpp>\n#include <shell/shared/renderSession/Fov.h>\n\nnamespace igl::shell {\nstruct ViewParams {\n  glm::mat4 viewMatrix = glm::mat4(1);\n  glm::vec3 cameraPosition = glm::vec3(0);\n  Fov fov;\n  uint8_t viewIndex = 0;\n};\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/testShell/TestShell.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <memory>\n#include <shell/shared/platform/Platform.h>\n#if IGL_PLATFORM_ANDROID\n#include <shell/shared/platform/android/PlatformAndroid.h>\n#endif\n#if IGL_PLATFORM_IOS\n#include <shell/shared/platform/ios/PlatformIos.h>\n#endif\n#if IGL_PLATFORM_LINUX\n#include <shell/shared/platform/linux/PlatformLinux.h>\n#endif\n#if IGL_PLATFORM_MACOSX\n#include <shell/shared/platform/mac/PlatformMac.h>\n#endif\n#if IGL_PLATFORM_WINDOWS\n#include <shell/shared/platform/win/PlatformWin.h>\n#endif\n#include <shell/shared/renderSession/ShellParams.h>\n#include <shell/shared/testShell/TestShell.h>\n#include <igl/tests/util/device/TestDevice.h>\n\nnamespace igl::shell {\n\nnamespace {\n\nstd::shared_ptr<IDevice> createTestDevice() {\n  const std::string backend(IGL_BACKEND_TYPE);\n\n  if (backend == \"ogl\") {\n#ifdef IGL_UNIT_TESTS_GLES_VERSION\n    return tests::util::device::createTestDevice(::igl::BackendType::OpenGL,\n                                                 {.flavor = BackendFlavor::OpenGL_ES,\n                                                  .majorVersion = IGL_UNIT_TESTS_GLES_VERSION,\n                                                  .minorVersion = 0});\n#else\n    return tests::util::device::createTestDevice(::igl::BackendType::OpenGL);\n#endif\n  } else if (backend == \"metal\") {\n    return tests::util::device::createTestDevice(::igl::BackendType::Metal);\n  } else if (backend == \"vulkan\") {\n    return tests::util::device::createTestDevice(::igl::BackendType::Vulkan);\n  // @fb-only\n    // @fb-only\n  // @fb-only\n    return nullptr;\n  }\n}\n\nvoid ensureCommandLineArgsInitialized() {\n  // Fake initialization of command line args so sessions don't assert when accessing them.\n  // Only do it once, otherwise it triggers an internal assert.\n\n#if IGL_PLATFORM_ANDROID\n  static bool sInitialized = true; // Android prohibits initialization of command line args\n#else\n  static bool sInitialized = false;\n#endif\n  if (!sInitialized) {\n    sInitialized = true;\n    igl::shell::Platform::initializeCommandLineArgs(0, nullptr);\n  }\n}\n\n} // namespace\n\nvoid TestShellBase::setUpInternal(ScreenSize screenSize, bool prefersRGB) {\n  ensureCommandLineArgsInitialized();\n\n  // Create igl device for requested backend\n  std::shared_ptr<IDevice> iglDevice = createTestDevice();\n  ASSERT_TRUE(iglDevice != nullptr);\n  // Create platform shell to run the tests with\n#if defined(IGL_PLATFORM_MACOSX) && IGL_PLATFORM_MACOSX\n  platform_ = std::make_shared<igl::shell::PlatformMac>(std::move(iglDevice));\n#elif defined(IGL_PLATFORM_IOS) && IGL_PLATFORM_IOS\n  platform_ = std::make_shared<PlatformIos>(std::move(iglDevice));\n#elif defined(IGL_PLATFORM_WINDOWS) && IGL_PLATFORM_WINDOWS\n  platform_ = std::make_shared<igl::shell::PlatformWin>(std::move(iglDevice));\n#elif defined(IGL_PLATFORM_ANDROID) && IGL_PLATFORM_ANDROID\n  platform_ = std::make_shared<igl::shell::PlatformAndroid>(std::move(iglDevice));\n#elif defined(IGL_PLATFORM_LINUX) && IGL_PLATFORM_LINUX\n  platform_ = std::make_shared<igl::shell::PlatformLinux>(std::move(iglDevice));\n#endif\n\n  IGL_DEBUG_ASSERT(platform_);\n\n  if (platform_->getDevice().getBackendType() == igl::BackendType::OpenGL) {\n    auto version = platform_->getDevice().getBackendVersion();\n    if (version.majorVersion < 2) {\n      GTEST_SKIP() << \"OpenGL version \" << (int)version.majorVersion << \".\"\n                   << (int)version.minorVersion << \" is too low\";\n    }\n  }\n  // Create an offscreen texture to render to\n  Result ret;\n  auto hasNativesRGBSupport = platform_->getDevice().hasFeature(DeviceFeatures::SRGB);\n  auto colorFormat = prefersRGB && hasNativesRGBSupport ? igl::TextureFormat::RGBA_SRGB\n                                                        : igl::TextureFormat::RGBA_UNorm8;\n\n  TextureDesc texDesc = igl::TextureDesc::new2D(colorFormat,\n                                                screenSize.width,\n                                                screenSize.height,\n                                                igl::TextureDesc::TextureUsageBits::Sampled |\n                                                    igl::TextureDesc::TextureUsageBits::Attachment);\n  offscreenTexture_ = platform_->getDevice().createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(offscreenTexture_ != nullptr);\n  TextureDesc depthDextureDesc = igl::TextureDesc::new2D(\n      igl::TextureFormat::Z_UNorm24,\n      screenSize.width,\n      screenSize.height,\n      igl::TextureDesc::TextureUsageBits::Sampled | igl::TextureDesc::TextureUsageBits::Attachment);\n  depthDextureDesc.storage = igl::ResourceStorage::Private;\n  offscreenDepthTexture_ = platform_->getDevice().createTexture(depthDextureDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(offscreenDepthTexture_ != nullptr);\n}\n\nvoid TestShell::run(RenderSession& session, size_t numFrames) {\n  ShellParams shellParams;\n  session.setShellParams(shellParams);\n  session.initialize();\n  for (size_t i = 0; i < numFrames; ++i) {\n    const igl::DeviceScope scope(platform_->getDevice());\n    session.update({.color = offscreenTexture_, .depth = offscreenDepthTexture_});\n  }\n  session.teardown();\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/shared/testShell/TestShell.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <memory>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <igl/Texture.h>\n\nnamespace igl::shell {\n\nstruct ScreenSize {\n  size_t width;\n  size_t height;\n};\n\nclass TestShellBase {\n public:\n  TestShellBase() = default;\n\n  virtual ~TestShellBase() = default;\n\n protected:\n  void setUpInternal(ScreenSize screenSize = {.width = 1, .height = 1}, bool prefersRGB = true);\n  void tearDownInternal() {}\n\n  std::shared_ptr<Platform> platform_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<ITexture> offscreenDepthTexture_;\n};\n\nclass TestShell : public ::testing::Test, public TestShellBase {\n public:\n  void SetUp() override {\n    setUpInternal();\n  }\n\n  void TearDown() override {\n    tearDownInternal();\n  }\n\n  void run(RenderSession& session, size_t numFrames);\n};\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/windows/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nset(PROJECT_NAME \"Desktop\")\n\nadd_definitions(\"-DNOMINMAX\")\nadd_definitions(\"-D_USE_MATH_DEFINES=1\")\n\nfile(GLOB PLATFORM_SHARED_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../shared/fileLoader/win/*.cpp ../shared/imageWriter/win/*.cpp\n     ../shared/imageWriter/stb/*.cpp ../shared/platform/win/*.cpp common/*.cpp)\nfile(GLOB PLATFORM_SHARED_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}\n     ../shared/fileLoader/win/*.h ../shared/imageWriter/win/*.h ../shared/imageWriter/stb/*.h\n     ../shared/platform/win/*.h common/*.h)\n\nadd_library(IGLShellPlatform ${PLATFORM_SHARED_SRC_FILES} ${PLATFORM_SHARED_HEADER_FILES})\ntarget_link_libraries(IGLShellPlatform PUBLIC IGLLibrary)\ntarget_link_libraries(IGLShellPlatform PUBLIC glfw)\ntarget_link_libraries(IGLShellPlatform PUBLIC IGLShellShared)\n\nigl_set_folder(IGLShellPlatform \"IGL\")\nigl_set_cxxstd(IGLShellPlatform 20)\n\nfunction(ADD_SHELL_APP backend)\n  add_library(IGLShellApp_${backend} ${CMAKE_CURRENT_SOURCE_DIR}/../windows/${backend}/App.cpp)\n  target_link_libraries(IGLShellApp_${backend} PUBLIC IGLShellPlatform)\n  igl_set_folder(IGLShellApp_${backend} \"IGL Shell App/${backend}\")\n  igl_set_cxxstd(IGLShellApp_${backend} 20)\nendfunction()\n\nif(IGL_WITH_VULKAN)\n  add_shell_app(vulkan)\nendif()\nif(IGL_WITH_OPENGL)\n  add_shell_app(opengl)\nendif()\nif(IGL_WITH_OPENGLES)\n  add_shell_app(opengles)\nendif()\n# Only add D3D12 shell app if the sources are present (removed in this branch)\nset(IGL_D3D12_APP_SOURCE \"${CMAKE_CURRENT_SOURCE_DIR}/../windows/d3d12/App.cpp\")\nif(IGL_WITH_D3D12 AND EXISTS \"${IGL_D3D12_APP_SOURCE}\")\n  add_shell_app(d3d12)\n  target_link_libraries(IGLShellApp_d3d12 PUBLIC IGLD3D12)\nendif()\n\nfunction(ADD_SHELL_SESSION_BACKEND targetApp backend srcs libs)\n  set(target ${targetApp}_${backend})\n  add_executable(${target} ${srcs})\n  igl_set_folder(${target} \"IGL Shell Sessions/${backend}\")\n  igl_set_cxxstd(${target} 20)\n  target_compile_definitions(${target} PRIVATE \"IGL_SHELL_SESSION=${targetApp}\")\n  target_link_libraries(${target} PUBLIC ${libs})\n  target_link_libraries(${target} PUBLIC IGLShellApp_${backend})\n\n  # Copy dxil.dll for D3D12 executables (required for DXIL signing)\n  if(backend STREQUAL \"d3d12\" AND WIN32 AND MSVC)\n    find_file(DXIL_DLL_FOR_${target}\n      NAMES dxil.dll\n      PATHS\n        \"C:/Program Files (x86)/Windows Kits/10/bin/10.0.22621.0/x64\"\n        \"C:/Program Files (x86)/Windows Kits/10/bin/10.0.22000.0/x64\"\n        \"C:/Program Files (x86)/Windows Kits/10/bin/10.0.19041.0/x64\"\n        \"$ENV{WindowsSdkBinPath}/x64\"\n      NO_DEFAULT_PATH\n    )\n    if(DXIL_DLL_FOR_${target})\n      add_custom_command(TARGET ${target} POST_BUILD\n        COMMAND ${CMAKE_COMMAND} -E copy_if_different\n          \"${DXIL_DLL_FOR_${target}}\"\n          \"$<TARGET_FILE_DIR:${target}>/\"\n        COMMENT \"Copying dxil.dll for ${target}\"\n      )\n    endif()\n  endif()\nendfunction()\n\nfunction(ADD_SHELL_SESSION_BACKEND_OPENXR_SIM targetApp backend srcs libs compileDefs)\n  set(target ${targetApp}_${backend}_openxr_sim)\n  add_executable(${target} ${srcs})\n  igl_set_folder(${target} \"IGL Shell Sessions/${backend}_openxr_sim\")\n  igl_set_cxxstd(${target} 20)\n  target_compile_definitions(${target} PRIVATE \"IGL_SHELL_SESSION=${targetApp}\" ${compileDefs})\n  target_include_directories(${target} PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/openxr-sdk/src/common\")\n  target_link_libraries(${target} PUBLIC IGLShellOpenXR_sim_${backend} IGLShellShared IGLShellPlatform Shcore.lib ${libs})\nendfunction()\n\nmacro(ADD_SHELL_SESSION_WITH_SRCS target srcs libs)\n  if(IGL_WITH_VULKAN)\n    add_shell_session_backend(${target} vulkan \"${srcs}\" \"${libs}\")\n  endif()\n  if(IGL_WITH_OPENGL)\n    add_shell_session_backend(${target} opengl \"${srcs}\" \"${libs}\")\n  endif()\n  if(IGL_WITH_OPENGLES)\n    add_shell_session_backend(${target} opengles \"${srcs}\" \"${libs}\")\n  endif()\n  if(IGL_WITH_D3D12 AND TARGET IGLShellApp_d3d12)\n    add_shell_session_backend(${target} d3d12 \"${srcs}\" \"${libs}\")\n  endif()\nendmacro()\n"
  },
  {
    "path": "shell/windows/common/GlfwShell.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <shell/windows/common/GlfwShell.h>\n\n#include <cmath>\n#include <cstdlib>\n#include <thread>\n#include <shell/shared/input/InputDispatcher.h>\n#include <shell/shared/renderSession/AppParams.h>\n#include <shell/shared/renderSession/DefaultRenderSessionFactory.h>\n#include <shell/shared/renderSession/IRenderSessionFactory.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/ScreenshotTestRenderSessionHelper.h>\n#include <shell/shared/renderSession/ShellParams.h>\n#include <igl/Framebuffer.h>\n\nnamespace igl::shell {\nnamespace {\nvoid glfwErrorHandler(int error, const char* description) {\n  IGL_LOG_ERROR(\"GLFW Error: %s\\n\", description);\n}\n\nMouseButton getIGLMouseButton(int button) {\n  if (button == GLFW_MOUSE_BUTTON_LEFT) {\n    return igl::shell::MouseButton::Left;\n  }\n\n  if (button == GLFW_MOUSE_BUTTON_RIGHT) {\n    return igl::shell::MouseButton::Right;\n  }\n\n  return igl::shell::MouseButton::Middle;\n}\n} // namespace\n\nGlfwShell::GlfwShell() : window_(nullptr, &glfwDestroyWindow) {}\n\nShellParams& GlfwShell::shellParams() noexcept {\n  return shellParams_;\n}\n\nconst ShellParams& GlfwShell::shellParams() const noexcept {\n  return shellParams_;\n}\n\nGLFWwindow* GlfwShell::window() noexcept {\n  return window_.get();\n}\n\nconst GLFWwindow* GlfwShell::window() const noexcept {\n  return window_.get();\n}\n\nPlatform& GlfwShell::platform() noexcept {\n  return *platform_;\n}\n\nconst Platform& GlfwShell::platform() const noexcept {\n  return *platform_;\n}\n\nconst RenderSessionWindowConfig& GlfwShell::windowConfig() const noexcept {\n  return windowConfig_;\n}\n\nconst RenderSessionConfig& GlfwShell::sessionConfig() const noexcept {\n  return sessionConfig_;\n}\n\nbool GlfwShell::createWindow() noexcept {\n  if (shellParams_.isHeadless) {\n    return true;\n  }\n\n  glfwSetErrorCallback(glfwErrorHandler);\n\n  if (!glfwInit()) {\n    IGL_LOG_ERROR(\"glfwInit failed\");\n    return false;\n  }\n\n  glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);\n  glfwWindowHint(GLFW_SRGB_CAPABLE, GLFW_TRUE);\n  glfwWindowHint(GLFW_VISIBLE, GLFW_TRUE);\n  glfwWindowHint(GLFW_DECORATED,\n                 windowConfig_.windowMode == shell::WindowMode::Window ? GLFW_TRUE : GLFW_FALSE);\n\n  int posX = 0;\n  int posY = 0;\n  int width = windowConfig_.width;\n  int height = windowConfig_.height;\n\n  GLFWmonitor* IGL_NULLABLE monitor = glfwGetPrimaryMonitor();\n\n  if (windowConfig_.windowMode == WindowMode::Fullscreen) {\n    const GLFWvidmode* mode = glfwGetVideoMode(monitor);\n    width = mode->width;\n    height = mode->height;\n  } else if (windowConfig_.windowMode == WindowMode::MaximizedWindow) {\n    // render full screen without overlapping the task bar\n    glfwGetMonitorWorkarea(monitor, &posX, &posY, &width, &height);\n    glfwWindowHint(GLFW_MAXIMIZED, GLFW_TRUE);\n    monitor = nullptr;\n  } else {\n    monitor = nullptr;\n  }\n\n  willCreateWindow();\n\n  GLFWwindow* windowHandle =\n      // @fb-only\n      glfwCreateWindow(width, height, sessionConfig_.displayName.c_str(), monitor, nullptr);\n  if (!windowHandle) {\n    return false;\n  }\n  window_.reset(windowHandle);\n\n  glfwSetWindowUserPointer(windowHandle, this);\n  if (windowConfig_.windowMode == WindowMode::MaximizedWindow) {\n    glfwSetWindowPos(windowHandle, posX, posY);\n  }\n\n  glfwGetFramebufferSize(windowHandle, &width, &height);\n  shellParams_.viewportSize.x = width;\n  shellParams_.viewportSize.y = height;\n  glfwSetCursorPosCallback(windowHandle, [](GLFWwindow* window, double xpos, double ypos) {\n    auto* shell = static_cast<GlfwShell*>(glfwGetWindowUserPointer(window));\n    shell->platform_->getInputDispatcher().queueEvent(\n        MouseMotionEvent((float)xpos, (float)ypos, 0, 0));\n  });\n\n  glfwSetScrollCallback(windowHandle, [](GLFWwindow* window, double xoffset, double yoffset) {\n    auto* shell = static_cast<GlfwShell*>(glfwGetWindowUserPointer(window));\n    shell->platform_->getInputDispatcher().queueEvent(\n        MouseWheelEvent((float)xoffset, (float)yoffset));\n  });\n\n  glfwSetMouseButtonCallback(\n      windowHandle, [](GLFWwindow* window, int button, int action, int mods) {\n        auto* shell = static_cast<GlfwShell*>(glfwGetWindowUserPointer(window));\n        MouseButton iglButton = getIGLMouseButton(button);\n        double xpos = NAN, ypos = NAN;\n        glfwGetCursorPos(window, &xpos, &ypos);\n        shell->platform_->getInputDispatcher().queueEvent(\n            MouseButtonEvent(iglButton, action == GLFW_PRESS, (float)xpos, (float)ypos));\n      });\n\n  glfwSetKeyCallback(windowHandle, [](GLFWwindow* window, int key, int, int action, int mods) {\n    auto* shell = static_cast<GlfwShell*>(glfwGetWindowUserPointer(window));\n    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {\n      glfwSetWindowShouldClose(window, GLFW_TRUE);\n    }\n    uint32_t modifiers = 0;\n    if (mods & GLFW_MOD_SHIFT) {\n      modifiers |= igl::shell::kKeyEventModifierShift;\n    }\n    if (mods & GLFW_MOD_CONTROL) {\n      modifiers |= igl::shell::kKeyEventModifierControl;\n    }\n    if (mods & GLFW_MOD_ALT) {\n      modifiers |= igl::shell::kKeyEventModifierOption;\n    }\n    if (mods & GLFW_MOD_CAPS_LOCK) {\n      modifiers |= igl::shell::kKeyEventModifierCapsLock;\n    }\n    if (mods & GLFW_MOD_NUM_LOCK) {\n      modifiers |= igl::shell::kKeyEventModifierNumLock;\n    }\n    shell->platform_->getInputDispatcher().queueEvent(\n        KeyEvent(action == GLFW_PRESS, key, modifiers));\n    shell->platform_->getInputDispatcher().queueEvent(key <= 256 ? CharEvent{static_cast<char>(key)}\n                                                                 : CharEvent{});\n  });\n\n  glfwSetCharCallback(windowHandle, [](GLFWwindow* window, unsigned int codepoint) {\n    auto* shell = static_cast<GlfwShell*>(glfwGetWindowUserPointer(window));\n\n    shell->platform_->getInputDispatcher().queueEvent(\n        CharEvent{.character = static_cast<char>(codepoint)});\n  });\n\n  didCreateWindow();\n\n  return windowHandle != nullptr;\n}\n\nbool GlfwShell::initialize(int argc,\n                           char* argv[],\n                           RenderSessionWindowConfig suggestedWindowConfig,\n                           const RenderSessionConfig& suggestedSessionConfig) noexcept {\n  igl::shell::Platform::initializeCommandLineArgs(argc, argv);\n\n  // Use the comprehensive parser\n  auto args = shell::convertArgvToParams(argc, argv);\n  shell::parseShellParams(args, shellParams_);\n\n  // Apply viewport size if specified\n  suggestedWindowConfig.width = static_cast<int>(shellParams_.viewportSize.x);\n  suggestedWindowConfig.height = static_cast<int>(shellParams_.viewportSize.y);\n  suggestedWindowConfig.windowMode = WindowMode::Window;\n\n  auto factory = igl::shell::createDefaultRenderSessionFactory();\n\n  windowConfig_ =\n      factory->requestedWindowConfig(igl::shell::ShellType::Windows, suggestedWindowConfig);\n  const auto requestedConfigs =\n      factory->requestedSessionConfigs(igl::shell::ShellType::Windows, {suggestedSessionConfig});\n  if (IGL_DEBUG_VERIFY_NOT(requestedConfigs.size() != 1) ||\n      IGL_DEBUG_VERIFY_NOT(suggestedSessionConfig.backendVersion.flavor !=\n                           requestedConfigs[0].backendVersion.flavor)) {\n    return false;\n  }\n\n  sessionConfig_ = requestedConfigs[0];\n\n  if (!createWindow()) {\n    return false;\n  }\n\n  platform_ = createPlatform();\n  if (IGL_DEBUG_VERIFY_NOT(!platform_)) {\n    return false;\n  }\n  session_ = factory->createRenderSession(platform_);\n  if (IGL_DEBUG_VERIFY_NOT(!session_)) {\n    return false;\n  }\n\n  session_->setShellParams(shellParams_);\n  session_->initialize();\n\n  return true;\n}\n\nvoid GlfwShell::run() noexcept {\n  uint64_t frameNumber = 0;\n  bool frozen = false;\n  while ((!window_ || !glfwWindowShouldClose(window_.get())) &&\n         !session_->appParams().exitRequested) {\n    if (frozen) {\n      if (window_) {\n        glfwPollEvents();\n      }\n      std::this_thread::sleep_for(std::chrono::milliseconds(16));\n      continue;\n    }\n\n    willTick();\n    auto surfaceTextures = createSurfaceTextures();\n    IGL_DEBUG_ASSERT(surfaceTextures.color != nullptr && surfaceTextures.depth != nullptr);\n\n    std::shared_ptr<ITexture> colorTexture = surfaceTextures.color;\n\n    platform_->getInputDispatcher().processEvents();\n\n    const auto& params = session_->shellParams();\n    if (params.freezeAtFrame != ~0u && frameNumber >= params.freezeAtFrame) {\n      frozen = true;\n      IGL_LOG_INFO(\"[IGL Shell] Frozen at frame %u\\n\", params.freezeAtFrame);\n      continue;\n    }\n\n    const double startTime = RenderSession::getSeconds();\n    session_->update(std::move(surfaceTextures));\n\n    if (params.fpsThrottleMs > 0) {\n      const double endTime = RenderSession::getSeconds();\n      const double frameTimeMs = (endTime - startTime) * 1000.0;\n      const double targetMs = params.fpsThrottleRandom\n                                  ? static_cast<double>(1 + (std::rand() % params.fpsThrottleMs))\n                                  : static_cast<double>(params.fpsThrottleMs);\n      if (frameTimeMs < targetMs) {\n        std::this_thread::sleep_for(\n            std::chrono::milliseconds(static_cast<int>(targetMs - frameTimeMs)));\n      }\n    }\n\n    if (window_) {\n      glfwPollEvents();\n    }\n    if (frameNumber == session_->shellParams().screenshotNumber) {\n      IGL_LOG_INFO(\"\\nWe are running screenshot test - breaking after %u frame\\n\",\n                   (uint32_t)frameNumber);\n      if (!session_->shellParams().screenshotFileName.empty()) {\n        saveFrameBufferToPng(session_->shellParams().screenshotFileName.c_str(),\n                             platform_->getDevice().createFramebuffer(\n                                 {.colorAttachments = {{.texture = colorTexture}}}, nullptr),\n                             *platform_);\n      }\n      break;\n    }\n    frameNumber++;\n  }\n}\n\nvoid GlfwShell::teardown() noexcept {\n  // Explicitly destroy all objects before exiting in order to make sure that\n  // whatever else global destructors may there, will be called after these. One\n  // example is a graphics resource tracker in the client code, which otherwise\n  // would not be guaranteed to be called after the graphics resources release.\n  session_.reset();\n  platform_.reset();\n  window_.reset();\n\n  if (!shellParams_.isHeadless) {\n    glfwTerminate();\n  }\n}\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/windows/common/GlfwShell.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Config.h>\n#include <igl/Texture.h>\n\n// clang-format off\n\n#if defined(_WIN32)\n#define GLFW_EXPOSE_NATIVE_WIN32\n#else\n#define GLFW_EXPOSE_NATIVE_X11\n#endif // _WIN32\n\n#if IGL_ANGLE\n  #define GLFW_EXPOSE_NATIVE_EGL\n#else\n  #if defined(_WIN32)\n    #define GLFW_EXPOSE_NATIVE_WGL\n  #else\n    #define GLFW_EXPOSE_NATIVE_GLX\n  #endif\n#endif // IGL_ANGLE\n#define GLFW_INCLUDE_NONE\n\n// clang-format on\n\n#include <GLFW/glfw3.h>\n#include <GLFW/glfw3native.h>\n#include <shell/shared/renderSession/RenderSession.h>\n#include <shell/shared/renderSession/RenderSessionConfig.h>\n#include <shell/shared/renderSession/RenderSessionWindowConfig.h>\n#include <shell/shared/renderSession/ShellParams.h>\n\nnamespace igl::shell {\n\nclass GlfwShell {\n public:\n  GlfwShell();\n\n  virtual ~GlfwShell() noexcept = default;\n\n  bool initialize(int argc,\n                  char* argv[],\n                  RenderSessionWindowConfig suggestedWindowConfig,\n                  const RenderSessionConfig& suggestedSessionConfig) noexcept;\n  void run() noexcept;\n  void teardown() noexcept;\n\n protected:\n  ShellParams& shellParams() noexcept;\n  [[nodiscard]] const ShellParams& shellParams() const noexcept;\n  GLFWwindow* window() noexcept;\n  [[nodiscard]] const GLFWwindow* window() const noexcept;\n  Platform& platform() noexcept;\n  [[nodiscard]] const Platform& platform() const noexcept;\n  [[nodiscard]] const RenderSessionWindowConfig& windowConfig() const noexcept;\n  [[nodiscard]] const RenderSessionConfig& sessionConfig() const noexcept;\n\n  virtual SurfaceTextures createSurfaceTextures() noexcept = 0;\n  virtual std::shared_ptr<Platform> createPlatform() noexcept = 0;\n\n  virtual void willCreateWindow() noexcept {}\n  virtual void didCreateWindow() noexcept {}\n\n  virtual void willTick() noexcept {}\n\n private:\n  bool createWindow() noexcept;\n\n  std::shared_ptr<Platform> platform_;\n  ShellParams shellParams_;\n  RenderSessionWindowConfig windowConfig_;\n  RenderSessionConfig sessionConfig_;\n  std::unique_ptr<GLFWwindow, decltype(&glfwDestroyWindow)> window_;\n  std::unique_ptr<RenderSession> session_;\n};\n\n} // namespace igl::shell\n"
  },
  {
    "path": "shell/windows/d3d12/App.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <memory>\n#include <shell/windows/common/GlfwShell.h>\n#include <shell/shared/platform/win/PlatformWin.h>\n#include <igl/Core.h>\n#include <igl/IGL.h>\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/PlatformDevice.h>\n\nusing namespace igl;\nnamespace igl::shell {\nnamespace {\n\nclass D3D12Shell final : public GlfwShell {\n  SurfaceTextures createSurfaceTextures() noexcept final;\n  std::shared_ptr<Platform> createPlatform() noexcept final;\n\n  void willCreateWindow() noexcept final;\n};\n\nvoid D3D12Shell::willCreateWindow() noexcept {\n  glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);\n}\n\nstd::shared_ptr<Platform> D3D12Shell::createPlatform() noexcept {\n  auto ctx = std::make_unique<d3d12::D3D12Context>();\n\n  HWND hwnd = window() ? glfwGetWin32Window(window()) : nullptr;\n  if (!hwnd) {\n    IGL_LOG_ERROR(\"D3D12Shell: No valid window handle\\n\");\n    return nullptr;\n  }\n\n  Result result = ctx->initialize(hwnd,\n                                  static_cast<uint32_t>(shellParams().viewportSize.x),\n                                  static_cast<uint32_t>(shellParams().viewportSize.y));\n  if (!result.isOk()) {\n    IGL_LOG_ERROR(\"D3D12Shell: Failed to initialize D3D12Context: %s\\n\", result.message.c_str());\n    return nullptr;\n  }\n\n  auto device = std::make_unique<d3d12::Device>(std::move(ctx));\n  return std::make_shared<PlatformWin>(std::move(device));\n}\n\nSurfaceTextures D3D12Shell::createSurfaceTextures() noexcept {\n  IGL_PROFILER_FUNCTION();\n  auto& device = platform().getDevice();\n  const auto& d3d12PlatformDevice = device.getPlatformDevice<igl::d3d12::PlatformDevice>();\n\n  IGL_DEBUG_ASSERT(d3d12PlatformDevice != nullptr);\n\n  Result ret;\n  auto color = d3d12PlatformDevice->createTextureFromNativeDrawable(&ret);\n  IGL_DEBUG_ASSERT(ret.isOk());\n  auto depth = d3d12PlatformDevice->createTextureFromNativeDepth(\n      static_cast<uint32_t>(shellParams().viewportSize.x),\n      static_cast<uint32_t>(shellParams().viewportSize.y),\n      &ret);\n  IGL_DEBUG_ASSERT(ret.isOk());\n\n  return SurfaceTextures{std::move(color), std::move(depth)};\n}\n\n} // namespace\n} // namespace igl::shell\n\nint main(int argc, char* argv[]) {\n  igl::shell::D3D12Shell shell;\n\n  igl::shell::RenderSessionWindowConfig suggestedWindowConfig = {\n      .width = 1024,\n      .height = 768,\n      .windowMode = igl::shell::WindowMode::MaximizedWindow,\n  };\n  igl::shell::RenderSessionConfig suggestedConfig = {\n      .displayName = \"Direct3D 12\",\n      .backendVersion = {.flavor = BackendFlavor::D3D12, .majorVersion = 12, .minorVersion = 0},\n      .swapchainColorTextureFormat = TextureFormat::BGRA_UNorm8,\n  };\n\n  if (!shell.initialize(argc, argv, suggestedWindowConfig, suggestedConfig)) {\n    shell.teardown();\n    return -1;\n  }\n\n  shell.run();\n  shell.teardown();\n\n  return 0;\n}\n"
  },
  {
    "path": "shell/windows/opengl/App.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/Macros.h>\n\n#if defined(FORCE_USE_ANGLE) || IGL_PLATFORM_LINUX\n#include <igl/opengl/egl/HWDevice.h>\n#else\n#include <igl/opengl/wgl/HWDevice.h>\n#endif // FORCE_USE_ANGLE\n\n#if IGL_PLATFORM_LINUX\n#include <igl/opengl/glx/Device.h>\n#endif\n\n// clang-format off\n#if !defined(IGL_CMAKE_BUILD)\n  #if !defined(GLEW_STATIC)\n    #define GLEW_STATIC\n  #endif\n#endif // IGL_CMAKE_BUILD\n#if defined(_WIN32)\n  #include <GL/glew.h>\n#endif // _WIN32\n\n// clang-format on\n#include \"AutoContextReleaseDevice.h\"\n\n#include <memory>\n#include <shell/windows/common/GlfwShell.h>\n#include <shell/shared/platform/win/PlatformWin.h>\n#include <igl/Core.h>\n#include <igl/IGL.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/Version.h>\n#include <igl/opengl/ViewTextureTarget.h>\n\nusing namespace igl;\nnamespace igl::shell {\nnamespace {\nclass OpenGlShell final : public GlfwShell {\n  SurfaceTextures createSurfaceTextures() noexcept final;\n  std::shared_ptr<Platform> createPlatform() noexcept final;\n\n  void willCreateWindow() noexcept final;\n  void didCreateWindow() noexcept final;\n\n  void willTick() noexcept final;\n};\n\nSurfaceTextures OpenGlShell::createSurfaceTextures() noexcept {\n  auto& device = platform().getDevice();\n  if (IGL_DEBUG_VERIFY(device.getBackendType() == igl::BackendType::OpenGL)) {\n    auto& oglDevice = static_cast<igl::opengl::Device&>(device);\n    oglDevice.getContext().setCurrent();\n    TextureDesc desc = {\n        .width = static_cast<uint32_t>(shellParams().viewportSize.x),\n        .height = static_cast<uint32_t>(shellParams().viewportSize.y),\n        .depth = 1,\n        .numLayers = 1,\n        .numSamples = 1,\n        .usage = TextureDesc::TextureUsageBits::Attachment,\n        .numMipLevels = 1,\n        .type = TextureType::TwoD,\n        .format = sessionConfig().swapchainColorTextureFormat,\n    };\n    auto color =\n        std::make_shared<igl::opengl::ViewTextureTarget>(oglDevice.getContext(), desc.format);\n    color->create(desc, true);\n    desc.format = TextureFormat::Z_UNorm24;\n    auto depth =\n        std::make_shared<igl::opengl::ViewTextureTarget>(oglDevice.getContext(), desc.format);\n    depth->create(desc, true);\n    return SurfaceTextures{.color = std::move(color), .depth = std::move(depth)};\n  }\n\n  return SurfaceTextures{};\n}\n\nvoid OpenGlShell::willCreateWindow() noexcept {\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, sessionConfig().backendVersion.majorVersion);\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, sessionConfig().backendVersion.minorVersion);\n  if (sessionConfig().backendVersion.majorVersion > 3 ||\n      (sessionConfig().backendVersion.majorVersion == 3 &&\n       sessionConfig().backendVersion.minorVersion >= 2)) {\n    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);\n  }\n  glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE);\n}\n\nvoid OpenGlShell::didCreateWindow() noexcept {\n  [[maybe_unused]] int result = glfwGetWindowAttrib(window(), GLFW_CLIENT_API);\n\n  glfwMakeContextCurrent(window());\n\n#if defined(_WIN32)\n  glewExperimental = GL_TRUE;\n  glewInit();\n#endif\n\n  glfwSwapInterval(1);\n\n  IGL_LOG_INFO(\"Renderer: %s\\n\", (const char*)glGetString(GL_RENDERER));\n  IGL_LOG_INFO(\"Version: %s\\n\", (const char*)glGetString(GL_VERSION));\n  IGL_LOG_INFO(\"WindowAttrib: 0x%x\\n\", result);\n}\n\nstd::shared_ptr<Platform> OpenGlShell::createPlatform() noexcept {\n#if defined(_WIN32)\n  auto context = std::make_unique<igl::opengl::wgl::Context>(GetDC(glfwGetWin32Window(window())),\n                                                             glfwGetWGLContext(window()));\n  auto glDevice = std::make_unique<shell::util::WGLDevice>(std::move(context));\n\n  return std::make_shared<igl::shell::PlatformWin>(std::move(glDevice));\n#elif IGL_PLATFORM_LINUX\n  auto context = std::make_unique<igl::opengl::glx::Context>(\n      nullptr,\n      glfwGetX11Display(),\n      (igl::opengl::glx::GLXDrawable)glfwGetX11Window(window()),\n      (igl::opengl::glx::GLXContext)glfwGetGLXContext(window()));\n\n  auto glDevice = std::make_unique<igl::opengl::glx::Device>(std::move(context));\n\n  return std::make_shared<PlatformWin>(std::move(glDevice));\n#endif\n}\n\nvoid OpenGlShell::willTick() noexcept {\n#if defined(_WIN32)\n  static_cast<shell::util::WGLDevice&>(platform().getDevice()).getContext().setCurrent();\n#elif IGL_PLATFORM_LINUX\n  static_cast<shell::util::GLXDevice&>(platform().getDevice()).getContext().setCurrent();\n#endif\n}\n\n} // namespace\n} // namespace igl::shell\n\nint main(int argc, char* argv[]) {\n  igl::shell::OpenGlShell shell;\n\n  uint32_t majorVersion = 4;\n  uint32_t minorVersion = 6;\n  if (argc == 2) {\n    std::tie(majorVersion, minorVersion) = igl::opengl::parseVersionString(argv[1]);\n  }\n\n  igl::shell::RenderSessionWindowConfig suggestedWindowConfig = {\n      .width = 1024,\n      .height = 768,\n      .windowMode = shell::WindowMode::Window,\n  };\n  igl::shell::RenderSessionConfig suggestedConfig = {\n      .displayName = \"OpenGL \" + std::to_string(majorVersion) + \".\" + std::to_string(minorVersion),\n      .backendVersion = {.flavor = BackendFlavor::OpenGL,\n                         .majorVersion = static_cast<uint8_t>(majorVersion),\n                         .minorVersion = static_cast<uint8_t>(minorVersion)},\n      .swapchainColorTextureFormat = TextureFormat::RGBA_SRGB,\n  };\n\n  if (!shell.initialize(argc, argv, suggestedWindowConfig, suggestedConfig)) {\n    shell.teardown();\n    return -1;\n  }\n\n  shell.run();\n  shell.teardown();\n\n  return 0;\n}\n"
  },
  {
    "path": "shell/windows/opengl/AutoContextReleaseDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Config.h>\n\n// clang-format off\n#if IGL_PLATFORM_WINDOWS\n  #include <igl/opengl/Device.h>\n  #include <igl/opengl/wgl/Context.h>\n#elif IGL_PLATFORM_LINUX\n  #include <igl/opengl/Device.h>\n  #include <igl/opengl/glx/Context.h>\n#endif\n// clang-format on\n\nnamespace igl::shell::util {\n\n#if IGL_PLATFORM_WINDOWS\nstruct WGLDevice final : public igl::opengl::Device {\n  explicit WGLDevice(std::unique_ptr<igl::opengl::IContext> context) :\n    Device(std::move(context)), platformDevice_(*this) {}\n\n  const igl::opengl::PlatformDevice& getPlatformDevice() const noexcept override {\n    return platformDevice_;\n  }\n\n  void endScope() override {\n    Device::endScope();\n    if (!verifyScope()) {\n      wglMakeCurrent(NULL, NULL);\n    }\n  }\n\n  igl::opengl::PlatformDevice platformDevice_;\n};\n#elif IGL_PLATFORM_LINUX\nstruct GLXDevice final : public igl::opengl::Device {\n  explicit GLXDevice(std::unique_ptr<igl::opengl::glx::Context> context) :\n    Device(std::move(context)), platformDevice(*this) {}\n\n  [[nodiscard]] const igl::opengl::PlatformDevice& getPlatformDevice() const noexcept override {\n    return platformDevice;\n  }\n\n  void endScope() override {\n    Device::endScope();\n    if (!verifyScope()) {\n      getContext().clearCurrentContext();\n    }\n  }\n\n  igl::opengl::PlatformDevice platformDevice;\n};\n#endif\n} // namespace igl::shell::util\n"
  },
  {
    "path": "shell/windows/opengles/App.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/Core.h>\n#include <igl/IGL.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/PlatformDevice.h>\n#include <igl/opengl/Version.h>\n#if IGL_ANGLE\n#include <shell/shared/platform/win/PlatformWin.h>\n#include <igl/opengl/egl/Context.h>\n#include <igl/opengl/egl/Device.h>\n#include <igl/opengl/egl/PlatformDevice.h>\n#endif // IGL_ANGLE\n#include <GLFW/glfw3.h>\n#include <memory>\n#include <shell/windows/common/GlfwShell.h>\n#include <shell/shared/platform/Platform.h>\n\nusing namespace igl;\nnamespace igl::shell {\nnamespace {\nclass OpenGlEsShell final : public GlfwShell {\n  SurfaceTextures createSurfaceTextures() noexcept final;\n  std::shared_ptr<Platform> createPlatform() noexcept final;\n\n  void willCreateWindow() noexcept final;\n  void didCreateWindow() noexcept final;\n\n  void willTick() noexcept final;\n};\n\nclass EGLDevice final : public ::igl::opengl::Device {\n public:\n  // NOLINTNEXTLINE(clang-diagnostic-unused-member-function)\n  explicit EGLDevice(std::unique_ptr<::igl::opengl::IContext> context) :\n    Device(std::move(context)), platformDevice(*this) {\n    {\n    }\n  }\n\n  [[nodiscard]] const igl::opengl::PlatformDevice& getPlatformDevice() const noexcept override {\n    return platformDevice;\n  }\n\n  ::igl::opengl::PlatformDevice platformDevice;\n};\n\nvoid OpenGlEsShell::willCreateWindow() noexcept {\n  glfwWindowHint(GLFW_CLIENT_API, GLFW_OPENGL_ES_API);\n  glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_EGL_CONTEXT_API);\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, sessionConfig().backendVersion.majorVersion);\n  glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, sessionConfig().backendVersion.minorVersion);\n  glfwWindowHint(GLFW_DOUBLEBUFFER, GLFW_TRUE);\n}\n\nvoid OpenGlEsShell::didCreateWindow() noexcept {\n  [[maybe_unused]] int result = glfwGetWindowAttrib(window(), GLFW_CLIENT_API);\n\n  glfwMakeContextCurrent(window());\n  glfwSwapInterval(1);\n\n  IGL_LOG_INFO(\"Renderer: %s\\n\", (const char*)glGetString(GL_RENDERER));\n  IGL_LOG_INFO(\"Version: %s\\n\", (const char*)glGetString(GL_VERSION));\n  IGL_LOG_INFO(\"WindowAttrib: 0x%x\\n\", result);\n}\n\nSurfaceTextures OpenGlEsShell::createSurfaceTextures() noexcept {\n#if IGL_ANGLE\n  auto& device = platform().getDevice();\n  if (IGL_DEBUG_VERIFY(device.getBackendType() == igl::BackendType::OpenGL)) {\n    auto platformDevice = device.getPlatformDevice<igl::opengl::egl::PlatformDevice>();\n    IGL_DEBUG_ASSERT(platformDevice != nullptr);\n    if (IGL_DEBUG_VERIFY(platformDevice)) {\n      auto color = platformDevice->createTextureFromNativeDrawable(nullptr);\n      auto depth =\n          platformDevice->createTextureFromNativeDepth(igl::TextureFormat::Z_UNorm24, nullptr);\n      return igl::SurfaceTextures{std::move(color), std::move(depth)};\n    }\n  }\n#endif // IGL_ANGLE\n  return SurfaceTextures{};\n}\n\nstd::shared_ptr<Platform> OpenGlEsShell::createPlatform() noexcept {\n#if IGL_ANGLE\n  auto glesDevice = std::make_unique</*EGLDevice*/ igl::opengl::egl::Device>(\n      std::make_unique<::igl::opengl::egl::Context>(glfwGetEGLDisplay(),\n                                                    glfwGetEGLContext(window()),\n                                                    glfwGetEGLSurface(window()),\n                                                    glfwGetEGLSurface(window())));\n\n  return std::make_shared<igl::shell::PlatformWin>(std::move(glesDevice));\n#endif // IGL_ANGLE\n  return nullptr;\n}\n\nvoid OpenGlEsShell::willTick() noexcept {\n  glfwMakeContextCurrent(window());\n}\n\n} // namespace\n} // namespace igl::shell\n\nint main(int argc, char* argv[]) {\n  igl::shell::OpenGlEsShell shell;\n\n  uint32_t majorVersion = 3;\n  uint32_t minorVersion = 1;\n  if (argc == 2) {\n    std::tie(majorVersion, minorVersion) = igl::opengl::parseVersionString(argv[1]);\n  }\n\n  igl::shell::RenderSessionWindowConfig suggestedWindowConfig = {\n      .width = 1024,\n      .height = 768,\n      .windowMode = shell::WindowMode::Window,\n  };\n  igl::shell::RenderSessionConfig suggestedConfig = {\n      .displayName =\n          \"OpenGL ES \" + std::to_string(majorVersion) + \".\" + std::to_string(minorVersion),\n      .backendVersion = {.flavor = BackendFlavor::OpenGL_ES,\n                         .majorVersion = static_cast<uint8_t>(majorVersion),\n                         .minorVersion = static_cast<uint8_t>(minorVersion)},\n      .swapchainColorTextureFormat = TextureFormat::RGBA_UNorm8,\n  };\n\n  if (!shell.initialize(argc, argv, suggestedWindowConfig, suggestedConfig)) {\n    shell.teardown();\n    return -1;\n  }\n\n  shell.run();\n  shell.teardown();\n\n  return 0;\n}\n"
  },
  {
    "path": "shell/windows/vulkan/App.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <memory>\n#include <shell/windows/common/GlfwShell.h>\n#include <shell/shared/platform/win/PlatformWin.h>\n#include <igl/Core.h>\n#include <igl/IGL.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/HWDevice.h>\n#include <igl/vulkan/PlatformDevice.h>\n#include <igl/vulkan/VulkanContext.h>\n\nusing namespace igl;\nnamespace igl::shell {\nnamespace {\nclass VulkanShell final : public GlfwShell {\n  SurfaceTextures createSurfaceTextures() noexcept final;\n  std::shared_ptr<Platform> createPlatform() noexcept final;\n\n  void willCreateWindow() noexcept final;\n};\n\nvoid VulkanShell::willCreateWindow() noexcept {\n  glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);\n}\n\nstd::shared_ptr<Platform> VulkanShell::createPlatform() noexcept {\n  igl::vulkan::VulkanContextConfig cfg = {\n#if defined(_MSC_VER) && !IGL_DEBUG\n      .enableValidation = false,\n#else\n      .enableValidation = shellParams().enableVulkanValidationLayers,\n#endif\n      .requestedSwapChainTextureFormat = sessionConfig().swapchainColorTextureFormat,\n      .headless = shellParams().isHeadless,\n  };\n  auto ctx = vulkan::HWDevice::createContext(\n      cfg,\n#if defined(_WIN32)\n      window() ? (void*)glfwGetWin32Window(window()) : nullptr // NOLINT(performance-no-int-to-ptr)\n#else\n      window() ? (void*)glfwGetX11Window(window()) // NOLINT(performance-no-int-to-ptr)\n               : nullptr,\n      (void*)glfwGetX11Display() // NOLINT(performance-no-int-to-ptr)\n#endif\n  );\n\n  // Prioritize discrete GPUs. If not found, use any that is available.\n  std::vector<HWDeviceDesc> devices =\n      vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(HWDeviceType::DiscreteGpu), nullptr);\n  if (devices.empty()) {\n    devices = vulkan::HWDevice::queryDevices(\n        *ctx, HWDeviceQueryDesc(HWDeviceType::IntegratedGpu), nullptr);\n  }\n  if (devices.empty()) {\n    // Lavapipe etc\n    devices =\n        vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(HWDeviceType::SoftwareGpu), nullptr);\n  }\n  IGL_DEBUG_ASSERT(devices.size() > 0, \"Could not find Vulkan device with requested capabilities\");\n\n  auto vulkanDevice = vulkan::HWDevice::create(std::move(ctx),\n                                               devices[0],\n                                               (uint32_t)shellParams().viewportSize.x,\n                                               (uint32_t)shellParams().viewportSize.y);\n\n  return std::make_shared<PlatformWin>(std::move(vulkanDevice));\n}\n\nSurfaceTextures VulkanShell::createSurfaceTextures() noexcept {\n  IGL_PROFILER_FUNCTION();\n  auto& device = platform().getDevice();\n  const auto& vkPlatformDevice = device.getPlatformDevice<igl::vulkan::PlatformDevice>();\n\n  IGL_DEBUG_ASSERT(vkPlatformDevice != nullptr);\n\n  Result ret;\n  auto color = vkPlatformDevice->createTextureFromNativeDrawable(&ret);\n  IGL_DEBUG_ASSERT(ret.isOk());\n  auto depth = vkPlatformDevice->createTextureFromNativeDepth(\n      shellParams().viewportSize.x, shellParams().viewportSize.y, &ret);\n  IGL_DEBUG_ASSERT(ret.isOk());\n\n  return SurfaceTextures{.color = std::move(color), .depth = std::move(depth)};\n}\n} // namespace\n\n} // namespace igl::shell\n\nint main(int argc, char* argv[]) {\n  igl::shell::VulkanShell shell;\n\n  igl::shell::RenderSessionWindowConfig suggestedWindowConfig = {\n      .width = 1024,\n      .height = 768,\n      .windowMode = shell::WindowMode::MaximizedWindow,\n  };\n  igl::shell::RenderSessionConfig suggestedConfig = {\n      .displayName = \"Vulkan 1.1\",\n      .backendVersion = {.flavor = BackendFlavor::Vulkan, .majorVersion = 1, .minorVersion = 1},\n      .swapchainColorTextureFormat = TextureFormat::BGRA_SRGB,\n  };\n\n  if (!shell.initialize(argc, argv, suggestedWindowConfig, suggestedConfig)) {\n    shell.teardown();\n    return -1;\n  }\n\n  shell.run();\n  shell.teardown();\n\n  return 0;\n}\n"
  },
  {
    "path": "src/igl/Assert.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#define IGL_COMMON_SKIP_CHECK\n#include <igl/Assert.h>\n\n// ----------------------------------------------------------------------------\n\nnamespace {\nIGLErrorHandlerFunc& getDebugAbortListener() {\n  static IGLErrorHandlerFunc sListener = nullptr;\n  return sListener;\n}\n} // namespace\n\nIGL_API void iglSetDebugAbortListener(IGLErrorHandlerFunc listener) {\n  getDebugAbortListener() = listener;\n}\n\nIGL_API IGLErrorHandlerFunc iglGetDebugAbortListener(void) {\n  return getDebugAbortListener();\n}\n\nnamespace igl {\n\n// Toggle debug break on/off at runtime\n#if IGL_DEBUG\nstatic bool debugBreakEnabled = true;\n#else\nstatic bool debugBreakEnabled = false;\n#endif // IGL_DEBUG\n\nbool isDebugBreakEnabled() {\n  return debugBreakEnabled;\n}\n\nvoid setDebugBreakEnabled(bool enabled) {\n  debugBreakEnabled = enabled;\n}\n\n} // namespace igl\n\n#if IGL_PLATFORM_APPLE || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n#define IGL_DEBUGGER_SIGTRAP 1\n#include <csignal>\n#elif IGL_PLATFORM_WINDOWS\n#include <windows.h>\n#include <igl/Log.h>\n#endif\n\nvoid iglDebugBreak() {\n#if IGL_DEBUG_BREAK_ENABLED\n  if (igl::isDebugBreakEnabled()) {\n#ifdef IGL_DEBUGGER_SIGTRAP\n    raise(SIGTRAP);\n#elif IGL_PLATFORM_WINDOWS\n    if (!IsDebuggerPresent()) {\n      IGLLog(IGLLogError, \"[IGL] Skipping debug break - debugger not present\");\n      return;\n    }\n    __debugbreak();\n#else\n#warning \"IGLDebugBreak() not implemented on this platform\"\n#endif\n  }\n#endif // IGL_DEBUG_BREAK_ENABLED\n}\n\n// ----------------------------------------------------------------------------\n\nnamespace {\nIGLErrorHandlerFunc& getSoftErrorHandler() {\n  static IGLErrorHandlerFunc sHandler = nullptr;\n  return sHandler;\n}\n} // namespace\n\nIGL_API void iglSetSoftErrorHandler(IGLErrorHandlerFunc handler) {\n  getSoftErrorHandler() = handler;\n}\n\nIGL_API IGLErrorHandlerFunc iglGetSoftErrorHandler(void) {\n  return getSoftErrorHandler();\n}\n"
  },
  {
    "path": "src/igl/Assert.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#if !defined(IGL_COMMON_H) && !defined(IGL_COMMON_SKIP_CHECK)\n#error \"Please, include <igl/Common.h> instead\"\n#endif\n\n#include <igl/IGLFolly.h>\n#include <igl/Macros.h>\n\n///--------------------------------------\n/// MARK: - Assert\n\n// When a runtime assert fails, it will:\n//\n// * trap in the debugger\n// * logs to console and/or debugger console: failing expression, function signature, file/line\n// * allows you to continue execution during debugging after a failing assert, instead of exiting\n//\n// ## IGL_DEBUG_ASSERT vs IGL_DEBUG_VERIFY/IGL_DEBUG_VERIFY_NOT\n//\n// Use IGL_DEBUG_ASSERT for debug-only assertions. On release builds, the expressions\n// expand to no-op's, so no perf penalty. IGL_DEBUG_ASSERT logs the failed expression to\n// console. To customize, provide a format argument with printf semantics:\n//\n//   int i = 42;\n//   auto p = std::make_shared<int>(i);\n//   IGL_DEBUG_ASSERT(p);\n//   IGL_DEBUG_ASSERT(*p == i, \"*p is wrong value. Got %d. Expected %d.\", *p, i);\n//\n// Use IGL_DEBUG_VERIFY and IGL_DEBUG_VERIFY_NOT to evaluate expressions and catch asserts on debug\n// builds. Typically, you'd wrap an expressions inside an `if` statement with IGL_DEBUG_VERIFY.\n// IGL_DEBUG_VERIFY_NOT is for `if` statements that check if an error condition is true. That way,\n// you can catch assertions on debug builds. On release builds, there's no overhead; they simply\n// expand to the original expression:\n//\n//   FILE* fp = std::fopen(\"test.txt\", \"r\");\n//   if (IGL_DEBUG_VERIFY(fp)) {\n//     printf(\"Success!\\n\");\n//   } else {\n//     printf(\"Failure!\\n\");\n//   }\n//\n//   void Foo::initialize() {\n//     if (IGL_DEBUG_VERIFY_NOT(initialized_)) {\n//       // Initialize should only be called once!\n//       return;\n//     }\n//   }\n//\n\n#include <igl/Log.h>\n\n#define IGL_ERROR_CATEGORY \"IGL\"\n\nusing IGLErrorHandlerFunc = void (*)(const char* IGL_NONNULL category,\n                                     const char* IGL_NONNULL reason,\n                                     const char* IGL_NONNULL file,\n                                     const char* IGL_NONNULL func,\n                                     int line,\n                                     const char* IGL_NONNULL format,\n                                     va_list ap);\n\nIGL_API void iglDebugBreak();\n\nIGL_API void iglSetDebugAbortListener(IGLErrorHandlerFunc IGL_NULLABLE listener);\nIGL_API IGLErrorHandlerFunc IGL_NULLABLE iglGetDebugAbortListener(void);\n\nnamespace igl {\nbool isDebugBreakEnabled();\nvoid setDebugBreakEnabled(bool enabled);\n\n[[nodiscard]] inline bool iglEnsureNoDiscard(bool cond) {\n  return cond;\n}\n\ninline void iglDebugAbortV([[maybe_unused]] const char* IGL_NONNULL category,\n                           [[maybe_unused]] const char* IGL_NONNULL reason,\n                           [[maybe_unused]] const char* IGL_NONNULL func,\n                           [[maybe_unused]] const char* IGL_NONNULL file,\n                           [[maybe_unused]] int line,\n                           [[maybe_unused]] const char* IGL_NONNULL format,\n                           [[maybe_unused]] va_list ap) {\n#if IGL_DEBUG_ABORT_ENABLED\n  va_list apCopy;\n  va_copy(apCopy, ap);\n  auto listener = iglGetDebugAbortListener();\n  if (listener) {\n    listener(category, reason, file, func, line, format, apCopy);\n  }\n  va_end(apCopy);\n\n  IGLLog(IGLLogError, \"[%s] %s in '%s' (%s:%d): \", category, reason, func, file, line);\n  IGLLogV(IGLLogError, format, ap);\n  IGLLog(IGLLogError, IGL_NEWLINE);\n  iglDebugBreak();\n#endif // IGL_DEBUG_ABORT_ENABLED\n}\n\n[[nodiscard]] inline bool iglDebugAbort(const char* IGL_NONNULL category,\n                                        const char* IGL_NONNULL reason,\n                                        const char* IGL_NONNULL func,\n                                        const char* IGL_NONNULL file,\n                                        int line,\n                                        const char* IGL_NONNULL format,\n                                        ...) {\n  va_list ap;\n  va_start(ap, format);\n  iglDebugAbortV(category, reason, func, file, line, format, ap);\n  va_end(ap);\n\n  return false;\n}\n} // namespace igl\n\n#if IGL_DEBUG_ABORT_ENABLED\n\n#define IGL_DEBUG_ABORT_IMPL(cond, reason, format, ...) \\\n  (cond                                                 \\\n       ? ::igl::iglEnsureNoDiscard(true)                \\\n       : ::igl::iglDebugAbort(                          \\\n             IGL_ERROR_CATEGORY, reason, IGL_FUNCTION, __FILE__, __LINE__, format, ##__VA_ARGS__))\n\n#define IGL_DEBUG_ABORT_INTERNAL(format, ...) \\\n  (void)IGL_DEBUG_ABORT_IMPL(false, \"Abort requested\", (format), ##__VA_ARGS__)\n#define IGL_DEBUG_ASSERT_INTERNAL(cond, format, ...) \\\n  (void)IGL_DEBUG_ABORT_IMPL(!!(cond), \"Assert failed\", (format), ##__VA_ARGS__)\n\n#define IGL_DEBUG_VERIFY_INTERNAL(cond, format, ...) \\\n  IGL_DEBUG_ABORT_IMPL(!!(cond), \"Verify failed\", (format), ##__VA_ARGS__)\n#define IGL_DEBUG_VERIFY_NOT_INTERNAL(cond, format, ...) \\\n  !IGL_DEBUG_ABORT_IMPL(!(cond), \"Verify failed\", (format), ##__VA_ARGS__)\n\n#else\n\n#define IGL_DEBUG_ABORT_INTERNAL(format, ...) static_cast<void>(0)\n#define IGL_DEBUG_ASSERT_INTERNAL(cond, format, ...) static_cast<void>(0)\n#define IGL_DEBUG_VERIFY_INTERNAL(cond, format, ...) ::igl::iglEnsureNoDiscard(!!(cond))\n#define IGL_DEBUG_VERIFY_NOT_INTERNAL(cond, format, ...) ::igl::iglEnsureNoDiscard(!!(cond))\n\n#endif // IGL_DEBUG_ABORT_ENABLED\n\n#define IGL_DEBUG_ABORT(format, ...) IGL_DEBUG_ABORT_INTERNAL((format), ##__VA_ARGS__)\n\n#define IGL_DEBUG_ASSERT_HELPER_0(cond) IGL_DEBUG_ASSERT_INTERNAL(cond, #cond)\n#define IGL_DEBUG_ASSERT_HELPER_1(cond, format, ...) \\\n  IGL_DEBUG_ASSERT_INTERNAL(cond, (format), ##__VA_ARGS__)\n// Supported variations:\n// IGL_DEBUG_ASSERT(cond)\n// IGL_DEBUG_ASSERT(cond, format, ...)\n#define IGL_DEBUG_ASSERT(...)                                                  \\\n  _IGL_CALL(IGL_CONCAT(IGL_DEBUG_ASSERT_HELPER_, _IGL_HAS_COMMA(__VA_ARGS__)), \\\n            _IGL_ECHO((__VA_ARGS__)))\n\n#define IGL_DEBUG_VERIFY_HELPER_0(cond) IGL_DEBUG_VERIFY_INTERNAL(cond, #cond)\n#define IGL_DEBUG_VERIFY_HELPER_1(cond, format, ...) \\\n  IGL_DEBUG_VERIFY_INTERNAL(cond, (format), ##__VA_ARGS__)\n// Supported variations:\n// IGL_DEBUG_VERIFY(cond)\n// IGL_DEBUG_VERIFY(cond, format, ...)\n#define IGL_DEBUG_VERIFY(...)                                                  \\\n  _IGL_CALL(IGL_CONCAT(IGL_DEBUG_VERIFY_HELPER_, _IGL_HAS_COMMA(__VA_ARGS__)), \\\n            _IGL_ECHO((__VA_ARGS__)))\n\n#define IGL_DEBUG_VERIFY_NOT_HELPER_0(cond) IGL_DEBUG_VERIFY_NOT_INTERNAL(cond, \"!(\" #cond \")\")\n#define IGL_DEBUG_VERIFY_NOT_HELPER_1(cond, format, ...) \\\n  IGL_DEBUG_VERIFY_NOT_INTERNAL(cond, (format), ##__VA_ARGS__)\n// Supported variations:\n// IGL_DEBUG_VERIFY_NOT(cond)\n// IGL_DEBUG_VERIFY_NOT(cond, format, ...)\n#define IGL_DEBUG_VERIFY_NOT(...)                                                  \\\n  _IGL_CALL(IGL_CONCAT(IGL_DEBUG_VERIFY_NOT_HELPER_, _IGL_HAS_COMMA(__VA_ARGS__)), \\\n            _IGL_ECHO((__VA_ARGS__)))\n\n#define IGL_DEBUG_ASSERT_NOT_REACHED() IGL_DEBUG_ABORT(\"Code should NOT be reached\")\n#define IGL_DEBUG_ASSERT_NOT_IMPLEMENTED() IGL_DEBUG_ABORT(\"Code NOT implemented\")\n\n///--------------------------------------\n/// MARK: - Custom\n\nIGL_API void iglSetSoftErrorHandler(IGLErrorHandlerFunc IGL_NULLABLE handler);\n// @fb-only\nIGL_API IGLErrorHandlerFunc IGL_NULLABLE iglGetSoftErrorHandler(void);\nIGL_API void iglSoftError(const char* IGL_NONNULL category,\n                          const char* IGL_NONNULL reason,\n                          const char* IGL_NONNULL file,\n                          const char* IGL_NONNULL func,\n                          int line,\n                          const char* IGL_NONNULL format,\n                          ...);\nnamespace igl {\n[[nodiscard]] inline bool iglSoftError(const char* IGL_NONNULL category,\n                                       const char* IGL_NONNULL reason,\n                                       const char* IGL_NONNULL func,\n                                       const char* IGL_NONNULL file,\n                                       int line,\n                                       const char* IGL_NONNULL format,\n                                       ...) {\n  va_list ap, apCopy;\n  va_start(ap, format);\n  va_copy(apCopy, ap);\n\n  iglDebugAbortV(category, reason, func, file, line, format, apCopy);\n  va_end(apCopy);\n\n#if IGL_SOFT_ERROR_ENABLED\n  auto handler = iglGetSoftErrorHandler();\n  if (handler) {\n    handler(category, reason, file, func, line, format, ap);\n  }\n#endif // IGL_SOFT_ERROR_ENABLED\n\n  va_end(ap);\n\n  return false; // Always return false\n}\n} // namespace igl\n\n#if IGL_SOFT_ERROR_ENABLED\n\n#define IGL_SOFT_ERROR_IMPL(cond, reason, format, ...) \\\n  (cond                                                \\\n       ? ::igl::iglEnsureNoDiscard(true)               \\\n       : ::igl::iglSoftError(                          \\\n             IGL_ERROR_CATEGORY, reason, IGL_FUNCTION, __FILE__, __LINE__, format, ##__VA_ARGS__))\n\n#define IGL_SOFT_ERROR_INTERNAL(format, ...) \\\n  (void)IGL_SOFT_ERROR_IMPL(false, \"Soft error\", (format), ##__VA_ARGS__)\n#define IGL_SOFT_ASSERT_INTERNAL(cond, format, ...) \\\n  (void)IGL_SOFT_ERROR_IMPL(!!(cond), \"Soft assert failed\", (format), ##__VA_ARGS__)\n\n#define IGL_SOFT_VERIFY_INTERNAL(cond, format, ...) \\\n  IGL_SOFT_ERROR_IMPL(!!(cond), \"Soft verify failed\", (format), ##__VA_ARGS__)\n#define IGL_SOFT_VERIFY_NOT_INTERNAL(cond, format, ...) \\\n  !IGL_SOFT_ERROR_IMPL(!(cond), \"Soft verify failed\", (format), ##__VA_ARGS__)\n\n#else\n\n#define IGL_SOFT_ERROR_INTERNAL(format, ...) static_cast<void>(0)\n#define IGL_SOFT_ASSERT_INTERNAL(cond, format, ...) static_cast<void>(0)\n#define IGL_SOFT_VERIFY_INTERNAL(cond, format, ...) ::igl::iglEnsureNoDiscard(!!(cond))\n#define IGL_SOFT_VERIFY_NOT_INTERNAL(cond, format, ...) ::igl::iglEnsureNoDiscard(!!(cond))\n\n#endif // IGL_SOFT_ERROR_ENABLED\n\n#define IGL_SOFT_ERROR(format, ...) IGL_SOFT_ERROR_INTERNAL((format), ##__VA_ARGS__)\n\n#define IGL_SOFT_ASSERT_HELPER_0(cond) IGL_SOFT_ASSERT_INTERNAL(cond, #cond)\n#define IGL_SOFT_ASSERT_HELPER_1(cond, format, ...) \\\n  IGL_SOFT_ASSERT_INTERNAL(cond, (format), ##__VA_ARGS__)\n// Supported variations:\n// IGL_SOFT_ASSERT(cond)\n// IGL_SOFT_ASSERT(cond, format, ...)\n#define IGL_SOFT_ASSERT(...)                                                  \\\n  _IGL_CALL(IGL_CONCAT(IGL_SOFT_ASSERT_HELPER_, _IGL_HAS_COMMA(__VA_ARGS__)), \\\n            _IGL_ECHO((__VA_ARGS__)))\n\n#define IGL_SOFT_VERIFY_HELPER_0(cond) IGL_SOFT_VERIFY_INTERNAL(cond, #cond)\n#define IGL_SOFT_VERIFY_HELPER_1(cond, format, ...) \\\n  IGL_SOFT_VERIFY_INTERNAL(cond, (format), ##__VA_ARGS__)\n// Supported variations:\n// IGL_SOFT_VERIFY(cond)\n// IGL_SOFT_VERIFY(cond, format, ...)\n#define IGL_SOFT_VERIFY(...)                                                  \\\n  _IGL_CALL(IGL_CONCAT(IGL_SOFT_VERIFY_HELPER_, _IGL_HAS_COMMA(__VA_ARGS__)), \\\n            _IGL_ECHO((__VA_ARGS__)))\n\n#define IGL_SOFT_VERIFY_NOT_HELPER_0(cond) IGL_SOFT_VERIFY_NOT_INTERNAL(cond, \"!(\" #cond \")\")\n#define IGL_SOFT_VERIFY_NOT_HELPER_1(cond, format, ...) \\\n  IGL_SOFT_VERIFY_NOT_INTERNAL(cond, (format), ##__VA_ARGS__)\n// Supported variations:\n// IGL_SOFT_VERIFY_NOT(cond)\n// IGL_SOFT_VERIFY_NOT(cond, format, ...)\n#define IGL_SOFT_VERIFY_NOT(...)                                                  \\\n  _IGL_CALL(IGL_CONCAT(IGL_SOFT_VERIFY_NOT_HELPER_, _IGL_HAS_COMMA(__VA_ARGS__)), \\\n            _IGL_ECHO((__VA_ARGS__)))\n"
  },
  {
    "path": "src/igl/Buffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <string>\n#include <igl/Common.h>\n#include <igl/ITrackedResource.h>\n\nnamespace igl {\n\n// class forward declaration\nclass ICommandBuffer;\n\nenum class IndexFormat : uint8_t {\n  UInt8,\n  UInt16,\n  UInt32,\n};\n\nstruct BufferRange {\n  size_t size;\n  uintptr_t offset;\n  BufferRange(size_t size = 0L, uintptr_t offset = 0L) : size(size), offset(offset) {}\n};\n\n/**\n * @brief A buffer descriptor used to create a new IBuffer, e.g.\n * by IDevice->createBuffer()\n */\nstruct BufferDesc {\n  enum BufferTypeBits : uint8_t {\n    Index = 1 << 0,\n    Vertex = 1 << 1,\n    Uniform = 1 << 2,\n    Storage = 1 << 3,\n    Indirect = 1 << 4,\n    // @fb-only\n  };\n\n  using BufferType = uint8_t;\n\n  enum BufferAPIHintBits : uint8_t {\n    Atomic = 1 << 0,\n    UniformBlock = 1 << 1, // Enforces UBO for OpenGL\n    Query = 1 << 2,\n    // @fb-only\n    Ring = 1 << 4, // Metal/Vulkan: Ring buffers with memory for each swapchain image\n    NoCopy = 1 << 5, // Metal: The buffer should re-use previously allocated memory.\n  };\n\n  using BufferAPIHint = uint8_t;\n\n  /**\n   * @brief A bit mask of BufferTypeBits. All usage types must be specified.\n   * @See  igl::BufferType\n   */\n  BufferType type = 0;\n\n  /** @brief Data to upload at the time of creation. Can be nullptr. */\n  const void* IGL_NULLABLE data = nullptr;\n\n  /** @brief Total internal store to allocate */\n  size_t length = 0;\n\n  /**\n   * @brief Storage mode.\n   * @See igl::ResourceStorage\n   */\n#if IGL_PLATFORM_MACOSX\n  ResourceStorage storage = ResourceStorage::Managed;\n#else\n  ResourceStorage storage = ResourceStorage::Shared;\n#endif\n  /**\n   * @brief Backend API hint flags.\n   *\n   */\n  BufferAPIHint hint = 0;\n\n  /** @brief Identifier used for debugging */\n  std::string debugName;\n\n  /**\n   * @brief Element stride in bytes for storage buffers.\n   *\n   * For buffers created with BufferTypeBits::Storage, this describes the size of a single\n   * structured element when the buffer is viewed as a StructuredBuffer / RWStructuredBuffer.\n   *\n   * Backends that create structured SRV/UAV views (such as D3D12) use this value to populate\n   * D3D12_BUFFER_SRV / D3D12_BUFFER_UAV StructureByteStride and to compute NumElements.\n   *\n   * A value of 0 means \"unknown/unspecified\" and backends may fall back to a default\n   * element size (typically 4 bytes) for compatibility with existing code that assumes\n   * float / uint elements.\n   */\n  size_t storageStride = 0;\n};\n\nclass IBuffer : public ITrackedResource<IBuffer> {\n public:\n  ~IBuffer() override = default;\n\n  /**\n   * @brief Upload data into a range in IBuffer.\n   *\n   * @param data data to be uploaded\n   * @param range offset (in IBuffer) and size\n   * @return Result::Code::ArgumentOutOfRange if offset + size is > IBuffer size\n   * @return Result::Code::Ok On success\n   * @remark data is allowed to be a nullptr if acceptedApiHints() includes\n   * BufferAPIHintBits::NoCopy. In this case, a nullptr means that the specified range has been\n   * updated. In all other situations, data MUST NOT be a nullptr.\n   */\n  virtual Result upload(const void* IGL_NULLABLE data, const BufferRange& range) = 0;\n\n  /**\n   * @brief Map a portion of the contents of a GPU Buffer into memory. Not efficient on OpenGL.\n   * unmap() must be called before the buffer is used again in any GPU operations.\n   *\n   * @param range offset (in IBuffer) and size\n   * @param outResult result of the operation,  Result::Code::Ok On success\n   * @return a pointer to the data mapped into memory.\n   */\n  virtual void* IGL_NULLABLE map(const BufferRange& range, Result* IGL_NULLABLE outResult) = 0;\n\n  /**\n   * @brief Unmap a GPU Buffer from memory. Should be called after map().\n   *\n   */\n  virtual void unmap() = 0;\n\n  /**\n   * @brief Returns the API hints that were requested in the buffer's descriptor.\n   * @remark It is NOT guaranteed that all of these hints were accepted and used. Use\n   * acceptedApiHints to get those.\n   */\n  [[nodiscard]] virtual BufferDesc::BufferAPIHint requestedApiHints() const noexcept = 0;\n\n  /**\n   * @brief Returns the API hints that were accepted and used in the buffer's creation.\n   */\n  [[nodiscard]] virtual BufferDesc::BufferAPIHint acceptedApiHints() const noexcept = 0;\n\n  /**\n   * @brief Returns the storage mode for the buffer.\n   */\n  [[nodiscard]] virtual ResourceStorage storage() const noexcept = 0;\n\n  /**\n   * @brief Returns current size of IBuffer\n   *\n   * @return Current allocated size\n   */\n  [[nodiscard]] virtual size_t getSizeInBytes() const = 0;\n\n  /**\n   * @brief Returns a buffer id suitable for bindless rendering (buffer_device_address on Vulkan and\n   * gpuResourceID on Metal)\n   *\n   * @return uint64_t\n   */\n  [[nodiscard]] virtual uint64_t gpuAddress(size_t offset = 0) const = 0;\n\n  /**\n   * @brief Returns the underlying buffer type which is a mask of igl::BufferDesc::BufferTypeBits\n   *\n   * @return igl::BufferDesc::BufferType\n   */\n  [[nodiscard]] virtual BufferDesc::BufferType getBufferType() const = 0;\n\n protected:\n  IBuffer() = default;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nproject(IGLLibrary CXX C)\n\nadd_definitions(\"-DIGL_CMAKE_BUILD=1\")\n\nfile(GLOB SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)\nfile(GLOB HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)\n\nif(WIN32)\n  list(APPEND SRC_FILES win/LogDefault.cpp)\n  list(APPEND HEADER_FILES win/LogDefault.h)\nendif()\n\nif(ANDROID)\n  list(APPEND SRC_FILES android/LogDefault.cpp)\n  list(APPEND HEADER_FILES android/LogDefault.h)\n  list(APPEND SRC_FILES android/NativeHWBuffer.cpp)\n  list(APPEND HEADER_FILES android/NativeHWBuffer.h)\nendif()\n\nadd_library(IGLLibrary ${SRC_FILES} ${HEADER_FILES})\n\ntarget_include_directories(IGLLibrary PUBLIC \"${IGL_ROOT_DIR}/src\")\ntarget_include_directories(IGLLibrary PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/glm\")\n\nif(NOT IGL_WITH_OPENGL)\n  target_include_directories(IGLLibrary PUBLIC \"${IGL_ROOT_DIR}/src/igl/opengl/util\")\n  target_sources(IGLLibrary PRIVATE opengl/util/TextureFormat.cpp opengl/util/TextureFormat.h)\nendif()\n\nif(NOT EMSCRIPTEN)\n  # Only link fmt if it's available, use PRIVATE to avoid exporting the dependency\n  if(TARGET fmt::fmt)\n    target_link_libraries(IGLLibrary PRIVATE fmt::fmt)\n  elseif(TARGET fmt)\n    target_link_libraries(IGLLibrary PRIVATE fmt)\n  endif()\nendif()\n\nigl_set_cxxstd(IGLLibrary 20)\nigl_set_folder(IGLLibrary \"IGL\")\n\nadd_subdirectory(glslang)\n\nif(IGL_WITH_OPENGL OR IGL_WITH_OPENGLES OR IGL_WITH_WEBGL)\n  add_subdirectory(opengl)\n  target_link_libraries(IGLLibrary PUBLIC IGLOpenGL)\nendif()\n\nif(IGL_WITH_VULKAN)\n  add_subdirectory(vulkan)\n  target_link_libraries(IGLLibrary PUBLIC IGLVulkan)\nendif()\n\nif(IGL_WITH_METAL)\n  add_subdirectory(metal)\n  target_link_libraries(IGLLibrary PUBLIC IGLMetal)\nendif()\n\nif(IGL_WITH_D3D12)\n  add_subdirectory(d3d12)\n  target_link_libraries(IGLLibrary PUBLIC IGLD3D12)\nendif()\n\n# OpenGL tests use GLES on Windows and we do not use Angle with CMake - so OGL\n# tests are disabled for now on Windows\n# Enable tests when requested. On Windows, allow tests if either Vulkan or D3D12 is enabled\n# (previously required Vulkan on Windows, which blocked D3D12-only test runs).\nif(IGL_WITH_TESTS AND IGL_WITH_IGLU AND (IGL_WITH_VULKAN OR IGL_WITH_D3D12 OR (NOT WIN32)))\n  add_subdirectory(tests)\n  if((IGL_WITH_OPENGL OR IGL_WITH_OPENGLES) AND NOT APPLE)\n    target_sources(IGLTests PRIVATE opengl/egl/Context.cpp opengl/egl/Device.cpp opengl/egl/HWDevice.cpp\n                                    opengl/egl/PlatformDevice.cpp)\n  endif()\nendif()\n"
  },
  {
    "path": "src/igl/Color.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/IGLFolly.h>\n\nnamespace igl {\n\n/**\n * @brief struct to represent a linear color value.\n */\nstruct Color {\n  float r;\n  float g;\n  float b;\n  float a;\n\n  /**\n   * @brief Constructor ingesting red, green, blue. Alpha is assumed to be 1.0f.\n   *\n   * @param red - red channel\n   * @param green - green channel\n   * @param blue - blue channel\n   */\n  constexpr Color(float red, float green, float blue) : r(red), g(green), b(blue), a(1.0f) {}\n\n  /**\n   * @brief Constructor ingesting red, green, blue and alpha.\n   *\n   * @param red - red channel\n   * @param green - green channel\n   * @param blue - blue channel\n   * @param alpha - alpha channel\n   */\n  constexpr Color(float red, float green, float blue, float alpha) :\n    r(red), g(green), b(blue), a(alpha) {}\n\n  [[nodiscard]] const float* IGL_NONNULL toFloatPtr() const {\n    return &r;\n  }\n};\n} // namespace igl\n"
  },
  {
    "path": "src/igl/ColorSpace.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <igl/Common.h> // IWYU pragma: keep\n#include <igl/Macros.h>\n\nnamespace igl {\n\n/**\n *\n * The list of different color space commonly seen in graphics.\n *\n */\nenum class ColorSpace : uint8_t {\n  SRGB_LINEAR,\n  SRGB_NONLINEAR,\n  DISPLAY_P3_NONLINEAR,\n  EXTENDED_SRGB_LINEAR,\n  DISPLAY_P3_LINEAR,\n  DCI_P3_NONLINEAR,\n  BT709_LINEAR,\n  BT709_NONLINEAR,\n  BT2020_LINEAR,\n  HDR10_ST2084,\n  DOLBYVISION,\n  HDR10_HLG,\n  ADOBERGB_LINEAR,\n  ADOBERGB_NONLINEAR,\n  PASS_THROUGH,\n  EXTENDED_SRGB_NONLINEAR,\n  DISPLAY_NATIVE_AMD,\n  BT601_NONLINEAR,\n  BT2020_NONLINEAR,\n  BT2100_HLG_NONLINEAR,\n  BT2100_PQ_NONLINEAR\n};\n\n/**\n * @brief Converts color space to literal string\n *\n * @param colorSpace ColorSpace of the texture/framebuffer.\n * @return Literal C-style string containing the color space name\n */\ninline const char* IGL_NONNULL colorSpaceToString(ColorSpace colorSpace) {\n  switch (colorSpace) {\n    IGL_ENUM_TO_STRING(ColorSpace, SRGB_LINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, SRGB_NONLINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, DISPLAY_P3_NONLINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, EXTENDED_SRGB_LINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, DISPLAY_P3_LINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, DCI_P3_NONLINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, BT709_LINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, BT709_NONLINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, BT2020_LINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, HDR10_ST2084)\n    IGL_ENUM_TO_STRING(ColorSpace, DOLBYVISION)\n    IGL_ENUM_TO_STRING(ColorSpace, HDR10_HLG)\n    IGL_ENUM_TO_STRING(ColorSpace, ADOBERGB_LINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, ADOBERGB_NONLINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, PASS_THROUGH)\n    IGL_ENUM_TO_STRING(ColorSpace, EXTENDED_SRGB_NONLINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, DISPLAY_NATIVE_AMD)\n    IGL_ENUM_TO_STRING(ColorSpace, BT601_NONLINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, BT2020_NONLINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, BT2100_HLG_NONLINEAR)\n    IGL_ENUM_TO_STRING(ColorSpace, BT2100_PQ_NONLINEAR)\n  default:\n    break;\n  }\n\n  IGL_UNREACHABLE_RETURN(\"unknown color space\")\n}\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/CommandBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h>\n#include <igl/Common.h>\n#include <igl/Framebuffer.h>\n#include <igl/RenderCommandEncoder.h>\n\nnamespace igl {\n\nclass IComputeCommandEncoder;\nclass ISamplerState;\nclass ITimer;\nclass ITimestampQueries;\nstruct RenderPassDesc;\n\n/**\n * Currently a no-op structure.\n */\nstruct CommandBufferDesc {\n  std::string debugName;\n  std::shared_ptr<ITimer> timer;\n  std::shared_ptr<ITimestampQueries> timestampQueries;\n};\n\n/**\n * Struct containing data about the command buffer usage. Currently used to track the number of draw\n * calls performed by this command buffer (see specific method usage below).\n */\nstruct CommandBufferStatistics {\n  uint32_t currentDrawCount = 0;\n};\n\n/**\n * @brief ICommandBuffer represents an object which accepts and stores commands to be executed on\n * the GPU.\n *\n * Commands can be added to the CommandBuffer using a CommandEncoder; ICommandBuffer can currently\n * be used to create two types of command encoders: RenderCommandEncoders (render commands using\n * fragment and/or vertex shaders) and ComputeCommandEncoders (compute commands using compute\n * shaders).\n *\n * ICommandBuffer::present() schedules the results of the commands encoded in the buffer to be\n * presented on the screen as soon as possible. It should be called after the commands are encoded\n * but before the commands are submitted (via a CommandQueue).\n *\n * ICommandBuffer also includes methods for synchronizing CPU code execution based on when the GPU\n * executes the commands encoded in the CommandBuffer.\n */\nclass ICommandBuffer {\n public:\n  explicit ICommandBuffer(CommandBufferDesc iDesc) : desc(std::move(iDesc)) {}\n  virtual ~ICommandBuffer() = default;\n\n  /**\n   * @brief Create a RenderCommandEncoder for encoding rendering commands into this CommandBuffer.\n   * @returns a pointer to the RenderCommandEncoder\n   */\n  virtual std::unique_ptr<IRenderCommandEncoder> createRenderCommandEncoder(\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      const Dependencies& dependencies,\n      Result* IGL_NULLABLE outResult = nullptr) = 0;\n\n  std::unique_ptr<IRenderCommandEncoder> createRenderCommandEncoder(\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      Result* IGL_NULLABLE outResult = nullptr) {\n    return createRenderCommandEncoder(renderPass, framebuffer, Dependencies(), outResult);\n  }\n\n  /**\n   * @brief Create a ComputeCommandEncoder for encoding compute commands into this CommandBuffer.\n   * @returns a pointer to the ComputeCommandEncoder\n   */\n  virtual std::unique_ptr<IComputeCommandEncoder> createComputeCommandEncoder() = 0;\n\n  /**\n   * @brief presents the results of the encoded GPU commands the screen as soon as possible (once\n   * the commands have completed executing). Should be called before submitting commands via a\n   * CommandQueue.\n   * @param surface takes a texture param representing a drawable that depends on the results of the\n   * GPU commands. Note: this param is unused when using the OpenGL backend.\n   */\n  virtual void present(const std::shared_ptr<ITexture>& surface) const = 0;\n\n  /**\n   * @brief Blocks execution of the current thread until the commands encoded in this\n   * CommandBuffer have been scheduled for execution.\n   */\n  virtual void waitUntilScheduled() = 0;\n\n  /**\n   * @brief Blocks execution of the current thread until the commands encoded in this CommandBuffer\n   * have been executed on the GPU.\n   */\n  virtual void waitUntilCompleted() = 0;\n\n  /**\n   * @brief Pushes a debug label onto a stack of debug string labels into the captured frame data.\n   *\n   * If supported by the backend GPU driver, this allows you to easily associate subsequent\n   * commands in the captured call stack with this label.\n   *\n   * When all commands for this label have been sent to the encoder, call popDebugGroupLabel()\n   * to pop the label off the stack.\n   */\n  virtual void pushDebugGroupLabel(const char* IGL_NONNULL label,\n                                   const igl::Color& color = Color(1, 1, 1, 1)) const = 0;\n\n  /**\n   * @brief Pops a most recent debug label off a stack of debug string labels.\n   *\n   * This should be preceded by pushDebugGroupLabel().\n   */\n  virtual void popDebugGroupLabel() const = 0;\n\n  /**\n   * @brief Copy data between buffers.\n   */\n  virtual void copyBuffer(IBuffer& src,\n                          IBuffer& dst,\n                          uint64_t srcOffset,\n                          uint64_t dstOffset,\n                          uint64_t size) = 0;\n  /**\n   * @brief Copy texture data into a buffer.\n   */\n  virtual void copyTextureToBuffer(ITexture& src,\n                                   IBuffer& dst,\n                                   uint64_t dstOffset,\n                                   uint32_t level = 0,\n                                   uint32_t layer = 0) = 0;\n\n  /**\n   * @returns the number of draw operations tracked by this CommandBuffer. This is tracked manually\n   * via calls to incrementCurrentDrawCount().\n   */\n  [[nodiscard]] uint32_t getCurrentDrawCount() const {\n    return statistics_.currentDrawCount;\n  }\n  /**\n   * @brief Increment a counter representing the number of draw operations tracked by this\n   * CommandBuffer.\n   */\n  void incrementCurrentDrawCount() {\n    statistics_.currentDrawCount++;\n  }\n\n  const CommandBufferDesc desc;\n  const std::shared_ptr<ITimer> timer;\n\n private:\n  CommandBufferStatistics statistics_;\n\n  friend class ICommandQueue;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/CommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <string>\n#include <igl/Common.h>\n\nnamespace igl {\n\nclass ICommandBuffer;\nclass IDevice;\n\nclass IBuffer;\nclass IRenderPipelineState;\nclass ISamplerState;\nclass ITexture;\n\n/**\n * Dependencies are used to issue proper memory barriers for external resources, such as textures\n * modified by non-IGL code (Skia, Qt, etc), and synchronize between graphics and compute pipelines.\n */\nstruct Dependencies {\n  static constexpr uint32_t kIglMaxTextureDependencies = 8;\n  static constexpr uint32_t kIglMaxBufferDependencies = 8;\n  // Note: please ensure that both arrays are dense, meaning that processing will halt immediately\n  // if any NULL texture or buffer is encountered.\n  ITexture* IGL_NULLABLE textures[kIglMaxTextureDependencies] = {};\n  IBuffer* IGL_NULLABLE buffers[kIglMaxBufferDependencies] = {};\n  const Dependencies* IGL_NULLABLE next = nullptr; // optional extra dependencies\n};\n\n/**\n * A BindGroup represents a set of resources bound to a command encoder.\n * It is a replacement of the old OpenGL-style binding model where individual resources are bound\n * using multiple calls to bindTexture(...), bindSamplerState(), and bindBuffer(...).\n */\nstruct BindGroupTextureDesc {\n  std::shared_ptr<ITexture> textures[IGL_TEXTURE_SAMPLERS_MAX] = {};\n  std::shared_ptr<ISamplerState> samplers[IGL_TEXTURE_SAMPLERS_MAX] = {};\n  std::string debugName;\n};\nstruct BindGroupBufferDesc {\n  std::shared_ptr<IBuffer> buffers[IGL_UNIFORM_BLOCKS_BINDING_MAX] = {};\n  size_t offset[IGL_UNIFORM_BLOCKS_BINDING_MAX] = {};\n  size_t size[IGL_UNIFORM_BLOCKS_BINDING_MAX] = {}; // 0 means the remaining size from `offset` to\n                                                    // the end of the buffer\n  uint32_t isDynamicBufferMask = 0; // one bit per each buffer\n  std::string debugName;\n};\n\nclass ICommandEncoder {\n public:\n  explicit ICommandEncoder(std::shared_ptr<ICommandBuffer> commandBuffer) :\n    commandBuffer_(std::move(commandBuffer)) {}\n\n  virtual ~ICommandEncoder() = default;\n\n  /**\n   * Declares the end of commands generated by this instance of the encoder.\n   *\n   * After endEncoding() is called, the encoder is invalid. You must create\n   * another encoder to submit more commands.\n   */\n  virtual void endEncoding() = 0;\n\n  /**\n   * Pushes a debug label onto a stack of debug string labels into the captured frame data.\n   *\n   * If supported by the backend GPU driver, this allows you to easily associate subsequent\n   * commands in the captured call stack with this label.\n   *\n   * When all commands for this label have been sent to the encoder, call popDebugGroupLabel()\n   * to pop the label off the stack.\n   */\n  virtual void pushDebugGroupLabel(const char* IGL_NONNULL label,\n                                   const igl::Color& color = Color(1, 1, 1, 1)) const = 0;\n\n  /**\n   * Inserts a debug label into the captured frame data.\n   *\n   * If supported by the backend GPU driver, this allows you to easily insert a label into the\n   * call stack of the captured frame data.\n   */\n  virtual void insertDebugEventLabel(const char* IGL_NONNULL label,\n                                     const igl::Color& color = Color(1, 1, 1, 1)) const = 0;\n\n  /**\n   * Pops a most recent debug label off a stack of debug string labels.\n   *\n   * This should be preceded by pushDebugGroupLabel().\n   */\n  virtual void popDebugGroupLabel() const = 0;\n\n  ICommandBuffer& getCommandBuffer() {\n    IGL_DEBUG_ASSERT(commandBuffer_);\n    return *commandBuffer_;\n  }\n\n  [[nodiscard]] const std::shared_ptr<ICommandBuffer>& getCommandBufferPtr() const {\n    IGL_DEBUG_ASSERT(commandBuffer_);\n    return commandBuffer_;\n  }\n\n private:\n  std::shared_ptr<ICommandBuffer> commandBuffer_;\n};\n\n} // namespace igl\n\n#if IGL_DEBUG && !defined(IGL_DISABLE_DEBUG_ENCODER_LABEL)\n#define IGL_DEBUG_ENCODER_LABEL_START(encoder, x) encoder.pushDebugGroupLabel(#x)\n#define IGL_DEBUG_ENCODER_LABEL_EVENT(encoder, x) encoder.insertDebugEventLabel(#x)\n#define IGL_DEBUG_ENCODER_LABEL_END(encoder) encoder.popDebugGroupLabel()\n#else\n#define IGL_DEBUG_ENCODER_LABEL_START(encoder, x)\n#define IGL_DEBUG_ENCODER_LABEL_EVENT(encoder, x)\n#define IGL_DEBUG_ENCODER_LABEL_END(encoder)\n#endif // IGL_DEBUG && !defined(IGL_DISABLE_DEBUG_ENCODER_LABEL)\n"
  },
  {
    "path": "src/igl/CommandQueue.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/Common.h>\n\nnamespace igl {\n\n// Forward struct declarations\n// Forward class declarations\nstruct CommandBufferDesc;\nclass ICommandBuffer;\n\n/**\n * This is a placeholder for future use\n */\nstruct CommandQueueDesc {};\n\n/**\n * Contains the current frame's draw count and last frame's draw count.\n * ICommandQueue controls these values and moves current draw count to last frame draw count through\n * the endFrame function.\n */\nstruct CommandQueueStatistics {\n  uint32_t currentDrawCount = 0;\n  uint32_t lastFrameDrawCount = 0;\n};\n\n/// GPU Fence Handle\nusing SubmitHandle = uint64_t;\n\n/**\n * Overarching structure used to create specific command buffers that accept device commands.\n * There are three different command queue types: compute, graphics, and memory transfer.\n * The key operations command queue provides are to create a command buffer to accept commands,\n * through the createCommandBuffer function, and then a submit command buffer which accepts those\n * commands into the queue through the submit function.  Simple draw statistics are tracked for\n * current and last frame which can be interacted with through the getLastFrameDrawCount and\n * endFrame functions.\n */\nclass ICommandQueue {\n public:\n  virtual ~ICommandQueue() = default;\n  virtual std::shared_ptr<ICommandBuffer> createCommandBuffer(const CommandBufferDesc& desc,\n                                                              Result* IGL_NULLABLE outResult) = 0;\n  virtual SubmitHandle submit(const ICommandBuffer& commandBuffer, bool endOfFrame = false) = 0;\n  [[nodiscard]] uint32_t getLastFrameDrawCount() const {\n    return statistics_.lastFrameDrawCount;\n  }\n  void endFrame() {\n    statistics_.lastFrameDrawCount = statistics_.currentDrawCount;\n    statistics_.currentDrawCount = 0;\n  }\n\n protected:\n  void incrementDrawCount(uint32_t newDrawCount) {\n    statistics_.currentDrawCount += newDrawCount;\n  }\n\n private:\n  CommandQueueStatistics statistics_;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Common.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/Common.h>\n\n#include <cstddef>\n#include <cstdint>\n#include <cstring>\n#include <igl/Device.h>\n\nnamespace igl {\n\n// Make sure the structure igl::Color is tightly packed so it can be passed into APIs which expect\n// float[4] RGBA values\nstatic_assert(sizeof(Color) == 4 * sizeof(float));\n\nstd::string BackendTypeToString(BackendType backendType) {\n  switch (backendType) {\n  case BackendType::Invalid:\n    return \"Invalid\";\n  case BackendType::OpenGL:\n    return \"OpenGL\";\n  case BackendType::Metal:\n    return \"Metal\";\n  case BackendType::Vulkan:\n    return \"Vulkan\";\n  case BackendType::D3D12:\n    return \"D3D12\";\n  // @fb-only\n    // @fb-only\n  case BackendType::Custom:\n    return \"Custom\";\n  }\n  IGL_UNREACHABLE_RETURN(std::string())\n}\n\nvoid optimizedMemcpy(void* IGL_NULLABLE dst, const void* IGL_NULLABLE src, size_t size) {\n  // Add null check for both dst and src\n  IGL_DEBUG_ASSERT(dst != nullptr && src != nullptr, \"dst and src must not be null\");\n  if (!dst || !src) {\n    return;\n  }\n\n  size_t optimizationCase = size;\n\n  // There are cases where this function is used on an array of bytes, For\n  // example, an IGL boolean array. In this case, dst or src only need to be\n  // byte aligned. The logic here checks to see if dst and src are\n  // multiples of 4. If not, then we will use the memcpy default case below\n  if ((ptrdiff_t)dst & 0x3 || (ptrdiff_t)src & 0x3) {\n    optimizationCase = 1;\n  }\n\n  switch (optimizationCase) {\n  case 4:\n    *((uint32_t*)dst) = *((const uint32_t*)src);\n    break;\n  case 8:\n    *((uint64_t*)dst) = *((const uint64_t*)src);\n    break;\n  case 12:\n    *((uint64_t*)dst) = *((const uint64_t*)src);\n    *((uint32_t*)(dst) + 2) = *((const uint32_t*)(src) + 2);\n    break;\n  case 16:\n    *((uint64_t*)dst) = *((const uint64_t*)src);\n    *((uint64_t*)(dst) + 1) = *((const uint64_t*)(src) + 1);\n    break;\n  default:\n    memcpy(dst, src, size);\n  }\n}\n\nvoid destroy(IDevice* IGL_NULLABLE device, BindGroupTextureHandle handle) {\n  if (device) {\n    device->destroy(handle);\n  }\n}\n\nvoid destroy(IDevice* IGL_NULLABLE device, BindGroupBufferHandle handle) {\n  if (device) {\n    device->destroy(handle);\n  }\n}\n\nvoid destroy(IDevice* IGL_NULLABLE device, TextureHandle handle) {\n  if (device) {\n    // do nothing until we transition all textures to handles\n    (void)handle;\n  }\n}\n\nvoid destroy(IDevice* IGL_NULLABLE device, SamplerHandle handle) {\n  if (device) {\n    device->destroy(handle);\n  }\n}\n\nvoid destroy(IDevice* IGL_NULLABLE device, DepthStencilStateHandle handle) {\n  if (device) {\n    // do nothing until we transition depth-stencil states to handles\n    (void)handle;\n  }\n}\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Common.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#ifndef IGL_COMMON_H\n#define IGL_COMMON_H\n\n#include <cstddef>\n#include <cstdint>\n#include <string>\n#include <type_traits>\n#include <utility>\n#include <vector>\n#include <igl/Color.h>\n#include <igl/Core.h>\n#include <igl/base/Common.h>\n\n#define IGL_ARRAY_NUM_ELEMENTS(x) (sizeof(x) / sizeof((x)[0]))\n\nnamespace igl {\n\n// Re-export types from base namespace for backward compatibility\nusing base::BackendType;\nusing base::TextureFormat;\nusing base::TextureType;\n\n// Callback to delete and/or release a pointer\nusing Deleter = void (*)(void* IGL_NULLABLE);\n\n/// Device Capabilities or Metal Features\nconstexpr uint32_t IGL_TEXTURE_SAMPLERS_MAX = 16;\n\nconstexpr uint32_t IGL_VERTEX_ATTRIBUTES_MAX = 24;\n\n// maximum number of buffers that can be bound to a shader stage\n// See maximum number of entries in the buffer argument table, per graphics or kernel function\n// in https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf\nconstexpr uint32_t IGL_BUFFER_BINDINGS_MAX = 31;\n\nconstexpr uint32_t IGL_UNIFORM_BLOCKS_BINDING_MAX = 16;\n\n// See GL_MAX_COLOR_ATTACHMENTS in\n// https://www.khronos.org/registry/OpenGL-Refpages/es3.0/html/glGet.xhtml\n// and see maximum number of color render targets in\n// https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf\nconstexpr uint32_t IGL_COLOR_ATTACHMENTS_MAX = 4;\n\n// See https://www.khronos.org/registry/OpenGL-Refpages/es3.1/html/glDrawElementsIndirect.xhtml,\n// https://www.khronos.org/registry/vulkan/specs/1.3-extensions/man/html/VkDrawIndexedIndirectCommand.html,\n// or https://developer.apple.com/documentation/metal/mtldrawindexedprimitivesindirectarguments.\nconstexpr uint32_t IGL_DRAW_ELEMENTS_INDIRECT_COMMAND_SIZE = 4 * 5;\n\nenum class ResourceStorage {\n  Invalid, /// Invalid sharing mode\n  Private, /// Memory private to GPU access (fastest)\n  Shared, /// Memory shared between CPU and GPU\n  Managed, /// Memory pair synchronized between CPU and GPU\n  Memoryless /// Memory can be accessed only by the GPU and only exist temporarily during a render\n             /// pass\n};\n\nenum class CullMode : uint8_t { Disabled, Front, Back };\nenum class WindingMode : uint8_t { Clockwise, CounterClockwise };\nenum class NormalizedZRange : uint8_t { NegOneToOne, ZeroToOne };\n\nenum class PrimitiveType : uint8_t {\n  Point,\n  Line,\n  LineStrip,\n  Triangle,\n  TriangleStrip,\n};\n\nstruct Result {\n  enum class Code {\n    // No error\n    Ok,\n\n    /// Bad argument, e.g. invalid buffer/texture/bind type\n    ArgumentInvalid,\n    /// nullptr input for non-null argument\n    ArgumentNull,\n    /// Argument out of range, e.g. attachment/mip-level/aniso out of range\n    ArgumentOutOfRange,\n    /// Cannot execute operation in current state\n    InvalidOperation,\n    /// Feature is not supported on current hardware or software\n    Unsupported,\n    /// Feature has not yet been implemented into IGL\n    Unimplemented,\n\n    /// Something bad happened internally but we don't know what\n    RuntimeError,\n  };\n\n  Code code = Code::Ok;\n  std::string message;\n  explicit Result() = default;\n  explicit Result(Code code, const char* IGL_NULLABLE message = \"\") :\n    code(code), message(message) {}\n  explicit Result(Code code, std::string message) : code(code), message(std::move(message)) {}\n\n  [[nodiscard]] bool isOk() const {\n    return code == Result::Code::Ok;\n  }\n\n  static void setResult(Result* IGL_NULLABLE outResult,\n                        Code code,\n                        const std::string& message = \"\") {\n    if (outResult != nullptr) {\n      outResult->code = code;\n      outResult->message = message;\n    }\n  }\n\n  static void setResult(Result* IGL_NULLABLE outResult, const Result& sourceResult) {\n    if (outResult != nullptr) {\n      *outResult = sourceResult;\n    }\n  }\n\n  static void setResult(Result* IGL_NULLABLE outResult, Result&& sourceResult) {\n    if (outResult != nullptr) {\n      *outResult = std::move(sourceResult);\n    }\n  }\n\n  static void setOk(Result* IGL_NULLABLE outResult) {\n    if (outResult != nullptr) {\n      outResult->code = Code::Ok;\n      outResult->message.clear();\n    }\n  }\n};\n\nenum class BackendFlavor : uint8_t {\n  Invalid,\n  OpenGL,\n  OpenGL_ES,\n  Metal,\n  Vulkan,\n  D3D12,\n  // @fb-only\n};\n\nstd::string BackendTypeToString(BackendType backendType);\n\n///--------------------------------------\n/// MARK: - ScissorRect\n\nstruct ScissorRect {\n  uint32_t x = 0;\n  uint32_t y = 0;\n  uint32_t width = 0;\n  uint32_t height = 0;\n  [[nodiscard]] bool isNull() const {\n    return width == 0 && height == 0;\n  }\n};\n\n///--------------------------------------\n/// MARK: - Size\n\nstruct Size {\n  float width = 0.0f;\n  float height = 0.0f;\n\n  Size() = default;\n  Size(float width, float height) : width(width), height(height) {}\n};\n\nstruct Dimensions {\n  Dimensions() = default;\n  Dimensions(uint32_t w, uint32_t h, uint32_t d) : width(w), height(h), depth(d) {}\n  uint32_t width = 0;\n  uint32_t height = 0;\n  uint32_t depth = 0;\n};\n\ninline bool operator==(const Dimensions& lhs, const Dimensions& rhs) {\n  return (lhs.width == rhs.width && lhs.height == rhs.height && lhs.depth == rhs.depth);\n}\n\ninline bool operator!=(const Dimensions& lhs, const Dimensions& rhs) {\n  return !operator==(lhs, rhs);\n}\n\ninline bool operator==(const Size& lhs, const Size& rhs) {\n  return (lhs.width == rhs.width && lhs.height == rhs.height);\n}\n\ninline bool operator!=(const Size& lhs, const Size& rhs) {\n  return !operator==(lhs, rhs);\n}\n\n///--------------------------------------\n/// MARK: - Viewport\n\n/// x, y, width, height in pixels. minDepth, maxDepth are in [0.0, 1.0]\nstruct Viewport {\n  float x = 0.0f;\n  float y = 0.0f;\n  float width = 1.0f;\n  float height = 1.0f;\n  float minDepth = 0.0f;\n  float maxDepth = 1.0f;\n};\n\ninline bool operator==(const Viewport& lhs, const Viewport& rhs) {\n  return lhs.x == rhs.x && lhs.y == rhs.y && lhs.width == rhs.width && lhs.height == rhs.height &&\n         lhs.minDepth == rhs.minDepth && lhs.maxDepth == rhs.maxDepth;\n}\n\ninline bool operator!=(const Viewport& lhs, const Viewport& rhs) {\n  return !operator==(lhs, rhs);\n}\n\nconstexpr Viewport kInvalidViewport = {-1.0f, -1.0f, -1.0f, -1.0f, -1.0f, -1.0f};\n\n///--------------------------------------\n/// MARK: - Enum utilities\n\n// Get value of enum by stripping enum class type\ntemplate<typename E>\nconstexpr typename std::underlying_type<E>::type EnumToValue(E enumerator) noexcept {\n  return static_cast<typename std::underlying_type<E>::type>(enumerator);\n}\n\n///--------------------------------------\n/// MARK: - ScopeGuard\n\n// a very minimalistic version of folly/ScopeGuard.h\nnamespace {\n\nenum class ScopeGuardOnExit {};\n\ntemplate<typename T>\nclass ScopeGuard {\n public:\n  explicit ScopeGuard(const T& fn) : fn_(fn) {}\n  ~ScopeGuard() {\n    fn_();\n  }\n\n private:\n  T fn_;\n};\n\ntemplate<typename T>\n// Ignore readability-named-parameter\n// @lint-ignore CLANGTIDY\nScopeGuard<T> operator+(ScopeGuardOnExit /*guard*/, T&& fn) {\n  return ScopeGuard<T>(std::forward<T>(fn));\n}\n\n} // namespace\n\n#define IGL_SCOPE_EXIT \\\n  auto FB_ANONYMOUS_VARIABLE(SCOPE_EXIT_STATE) = ScopeGuardOnExit() + [&]() noexcept\n\n///--------------------------------------\n/// MARK: - optimizedMemcpy\n\n// Optimized version of memcpy() that allows to copy smallest uniforms in the most efficient way.\n// Other sizes utilize a libc memcpy() implementation. It's not a universal function and expects to\n// have a proper alignment for data!\nvoid optimizedMemcpy(void* IGL_NULLABLE dst, const void* IGL_NULLABLE src, size_t size);\n\n///--------------------------------------\n/// MARK: - Handle\n\n// Non-ref counted handles; based on:\n// https://enginearchitecture.realtimerendering.com/downloads/reac2023_modern_mobile_rendering_at_hypehype.pdf\n// https://github.com/corporateshark/lightweightvk/blob/main/lvk/LVK.h\ntemplate<typename ObjectType>\nclass Handle final {\n public:\n  Handle() noexcept = default;\n\n  [[nodiscard]] bool empty() const noexcept {\n    return gen_ == 0;\n  }\n  [[nodiscard]] bool valid() const noexcept {\n    return gen_ != 0;\n  }\n  [[nodiscard]] uint32_t index() const noexcept {\n    return index_;\n  }\n  [[nodiscard]] uint32_t gen() const noexcept {\n    return gen_;\n  }\n  [[nodiscard]] void* IGL_NULLABLE indexAsVoid() const noexcept {\n    return reinterpret_cast<void*>( // NOLINT(performance-no-int-to-ptr)\n        static_cast<ptrdiff_t>(index_)); // NOLINT(performance-no-int-to-ptr)\n  }\n  bool operator==(const Handle<ObjectType>& other) const noexcept {\n    return index_ == other.index_ && gen_ == other.gen_;\n  }\n  bool operator!=(const Handle<ObjectType>& other) const noexcept {\n    return index_ != other.index_ || gen_ != other.gen_;\n  }\n  // allow conditions 'if (handle)'\n  explicit operator bool() const noexcept {\n    return gen_ != 0;\n  }\n\n private:\n  Handle(uint32_t index, uint32_t gen) noexcept : index_(index), gen_(gen) {}\n\n  template<typename ObjectType_, typename ImplObjectType>\n  friend class Pool;\n\n  uint32_t index_ = 0; // the index of this handle within a Pool\n  uint32_t gen_ = 0; // the generation of this handle to prevent the ABA Problem\n};\n\nstatic_assert(sizeof(Handle<class Foo>) == sizeof(uint64_t));\n\n// specialized with dummy structs for type safety\nusing BindGroupTextureHandle = Handle<struct BindGroupTextureTag>;\nusing BindGroupBufferHandle = Handle<struct BindGroupBufferTag>;\nusing TextureHandle = Handle<struct TextureTag>;\nusing SamplerHandle = Handle<struct SamplerTag>;\nusing DepthStencilStateHandle = Handle<struct DepthStencilStateTag>;\n\nclass IDevice;\n\n// forward declarations to access incomplete type IDevice\nvoid destroy(IDevice* IGL_NULLABLE device, BindGroupTextureHandle handle);\nvoid destroy(IDevice* IGL_NULLABLE device, BindGroupBufferHandle handle);\nvoid destroy(IDevice* IGL_NULLABLE device, TextureHandle handle);\nvoid destroy(IDevice* IGL_NULLABLE device, SamplerHandle handle);\nvoid destroy(IDevice* IGL_NULLABLE device, DepthStencilStateHandle handle);\n\n///--------------------------------------\n/// MARK: - Holder\n\n// RAII wrapper around Handle<>; based on:\n// https://github.com/corporateshark/lightweightvk/blob/main/lvk/LVK.h\ntemplate<typename HandleType>\nclass Holder final {\n public:\n  Holder() noexcept = default;\n  Holder(IDevice* IGL_NULLABLE device, HandleType handle) noexcept :\n    device_(device), handle_(handle) {}\n  ~Holder() {\n    igl::destroy(device_, handle_);\n  }\n  Holder(const Holder&) = delete;\n  Holder(Holder&& other) noexcept : device_(other.device_), handle_(other.handle_) {\n    other.device_ = nullptr;\n    other.handle_ = HandleType{};\n  }\n  Holder& operator=(const Holder&) = delete;\n  Holder& operator=(Holder&& other) noexcept {\n    std::swap(device_, other.device_);\n    std::swap(handle_, other.handle_);\n    return *this;\n  }\n  Holder& operator=(std::nullptr_t) {\n    this->reset();\n    return *this;\n  }\n\n  [[nodiscard]] operator HandleType() const noexcept {\n    return handle_;\n  }\n\n  [[nodiscard]] bool valid() const noexcept {\n    return handle_.valid();\n  }\n\n  [[nodiscard]] bool empty() const noexcept {\n    return handle_.empty();\n  }\n\n  void reset() {\n    igl::destroy(device_, handle_);\n    device_ = nullptr;\n    handle_ = HandleType{};\n  }\n\n  [[nodiscard]] HandleType release() noexcept {\n    device_ = nullptr;\n    return std::exchange(handle_, HandleType{});\n  }\n\n  [[nodiscard]] uint32_t gen() const noexcept {\n    return handle_.gen();\n  }\n  [[nodiscard]] uint32_t index() const noexcept {\n    return handle_.index();\n  }\n  [[nodiscard]] void* IGL_NULLABLE indexAsVoid() const noexcept {\n    return handle_.indexAsVoid();\n  }\n\n private:\n  IDevice* IGL_NULLABLE device_ = nullptr;\n  HandleType handle_ = {};\n};\n\n///--------------------------------------\n/// MARK: - Pool\n\n// A Pool of objects which is compatible with the abovementioned Handle<> types; based on:\n// https://enginearchitecture.realtimerendering.com/downloads/reac2023_modern_mobile_rendering_at_hypehype.pdf\n// https://github.com/corporateshark/lightweightvk/blob/main/lvk/Pool.h\ntemplate<typename ObjectType, typename ImplObjectType>\nclass Pool {\n  static constexpr uint32_t kListEndSentinel = 0xffffffff;\n  struct PoolEntry {\n    explicit PoolEntry(ImplObjectType& obj) noexcept : obj_(std::move(obj)) {}\n    ImplObjectType obj_ = {};\n    uint32_t gen_ = 1;\n    uint32_t nextFree_ = kListEndSentinel;\n  };\n  uint32_t freeListHead_ = kListEndSentinel;\n  uint32_t numObjects_ = 0;\n\n public:\n  std::vector<PoolEntry> objects_;\n\n  [[nodiscard]] Handle<ObjectType> create(ImplObjectType&& obj) {\n    uint32_t idx = 0;\n    if (freeListHead_ != kListEndSentinel) {\n      idx = freeListHead_;\n      freeListHead_ = objects_[idx].nextFree_;\n      objects_[idx].obj_ = std::move(obj);\n    } else {\n      idx = (uint32_t)objects_.size();\n      objects_.emplace_back(obj);\n    }\n    numObjects_++;\n    return Handle<ObjectType>(idx, objects_[idx].gen_);\n  }\n  void destroy(Handle<ObjectType> handle) noexcept {\n    if (handle.empty()) {\n      return;\n    }\n    IGL_DEBUG_ASSERT(numObjects_ > 0, \"Double deletion\");\n    const uint32_t index = handle.index();\n    IGL_DEBUG_ASSERT(index < objects_.size());\n    IGL_DEBUG_ASSERT(handle.gen() == objects_[index].gen_, \"Double deletion\");\n    objects_[index].obj_ = ImplObjectType{};\n    objects_[index].gen_++;\n    objects_[index].nextFree_ = freeListHead_;\n    freeListHead_ = index;\n    numObjects_--;\n  }\n  // this is a helper function to simplify migration to handles (should be deprecated after the\n  // migration is completed)\n  void destroy(uint32_t index) noexcept {\n    IGL_DEBUG_ASSERT(numObjects_ > 0, \"Double deletion\");\n    IGL_DEBUG_ASSERT(index < objects_.size());\n    objects_[index].obj_ = ImplObjectType{};\n    objects_[index].gen_++;\n    objects_[index].nextFree_ = freeListHead_;\n    freeListHead_ = index;\n    numObjects_--;\n  }\n  [[nodiscard]] const ImplObjectType* IGL_NULLABLE get(Handle<ObjectType> handle) const noexcept {\n    if (handle.empty()) {\n      return nullptr;\n    }\n\n    const uint32_t index = handle.index();\n    IGL_DEBUG_ASSERT(index < objects_.size());\n    IGL_DEBUG_ASSERT(handle.gen() == objects_[index].gen_, \"Accessing a deleted object\");\n    return &objects_[index].obj_;\n  }\n  [[nodiscard]] ImplObjectType* IGL_NULLABLE get(Handle<ObjectType> handle) noexcept {\n    if (handle.empty()) {\n      return nullptr;\n    }\n\n    const uint32_t index = handle.index();\n    IGL_DEBUG_ASSERT(index < objects_.size());\n    IGL_DEBUG_ASSERT(handle.gen() == objects_[index].gen_, \"Accessing a deleted object\");\n    return &objects_[index].obj_;\n  }\n  [[nodiscard]] Handle<ObjectType> findObject(const ImplObjectType* IGL_NULLABLE obj) noexcept {\n    if (!obj) {\n      return {};\n    }\n\n    for (size_t idx = 0; idx != objects_.size(); idx++) {\n      if (objects_[idx].obj_ == *obj) {\n        return Handle<ObjectType>((uint32_t)idx, objects_[idx].gen_);\n      }\n    }\n\n    return {};\n  }\n  void clear() noexcept {\n    objects_.clear();\n    freeListHead_ = kListEndSentinel;\n    numObjects_ = 0;\n  }\n  [[nodiscard]] uint32_t numObjects() const noexcept {\n    return numObjects_;\n  }\n};\n\n} // namespace igl\n\n#endif // IGL_COMMON_H\n"
  },
  {
    "path": "src/igl/ComputeCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h>\n#include <igl/CommandEncoder.h>\n#include <igl/Common.h>\n#include <igl/TextureFormat.h>\n#include <igl/Uniform.h>\n\nnamespace igl {\n\nclass IComputePipelineState;\nclass ISamplerState;\n\n/**\n * @brief Object for encoding commands in a compute pass\n *\n * Create IComputeCommandEncoder object by calling ICommandBuffer::createComputeCommandEncoder.\n * You can encode multiple commands in a single compute pass.\n * To encode a compute command:\n * - Call bindComputePipelineState method to set compute pipeline state.\n * - Call one or more other bind functions to specify parameters for the compute function.\n * - Call dispatchThreadgroups method to encode a compute command.\n * You can encode another compute command after calling dispatchThreadgroups or call endEncoding to\n * finish the compute pass. You must always call endEncoding before the encoder is released or\n * before creating another encoder.\n */\nclass IComputeCommandEncoder : public ICommandEncoder {\n public:\n  /**\n   * @brief Construct a new IComputeCommandEncoder object\n   *\n   */\n  IComputeCommandEncoder() : ICommandEncoder::ICommandEncoder(nullptr) {}\n\n  /**\n   * @brief Destroy the IComputeCommandEncoder object\n   *\n   */\n  ~IComputeCommandEncoder() override = default;\n\n  /**\n   * @brief Binds an individual uniform.\n   *\n   * @param uniformDesc A descriptor for the uniform.\n   * @param data The uniform data to bind.\n   * Exclusively used when uniform blocks are not supported.\n   */\n  virtual void bindUniform(const UniformDesc& uniformDesc, const void* data) = 0;\n  /**\n   * @brief Sets a texture for the compute function\n   *\n   * @param index An index in the texture argument table.\n   * @param texture The texture to set in the texture argument table.\n   */\n  virtual void bindTexture(uint32_t index, ITexture* texture) = 0;\n  virtual void bindImageTexture(uint32_t index, ITexture* texture, TextureFormat format) = 0;\n  virtual void bindSamplerState(uint32_t index, ISamplerState* samplerState) = 0;\n  /**\n   * @brief Sets a buffer for the compute function\n   *\n   * @param index An index for the buffer argument table.\n   * @param buffer The buffer to set in the buffer argument table.\n   * @param offset Where the data begins in bytes from the start of the buffer.\n   * @param bufferSize The size of the buffer to bind used for additional validation (0 means the\n   * remaining size starting from `offset`)\n   */\n  virtual void bindBuffer(uint32_t index,\n                          IBuffer* buffer,\n                          size_t offset = 0,\n                          size_t bufferSize = 0) = 0;\n  /**\n   * @brief Sets a block of data for the compute function. A buffer will be created behind the\n   * scenes to hold the input data and bound to the buffer argument table at the specified index.\n   *\n   * @param index An index for the buffer argument table.\n   * @param data The memory address from which to copy the data.\n   * @param length The number of bytes to copy.\n   */\n  virtual void bindBytes(uint32_t index, const void* data, size_t length) = 0;\n  /**\n   * @brief Sets a block of data for the compute function.\n   *\n   * @param data The memory address from which to copy the data.\n   * @param length The number of bytes to copy.\n   * @param offset An offset bytes into the push constants buffer.\n   */\n  virtual void bindPushConstants(const void* data, size_t length, size_t offset = 0) = 0;\n  /**\n   * @brief Sets the compute pipeline state object.\n   *\n   * @param pipelineState A pipeline state object to set for the compute function.\n   */\n  virtual void bindComputePipelineState(\n      const std::shared_ptr<IComputePipelineState>& pipelineState) = 0;\n  /**\n   * @brief Encodes a compute command using a grid aligned to threadgroup boundaries. If the size of\n   * your data doesn't match the size of the grid, you may have to perform boundary checks in your\n   * compute function. When the compute command is encoded, any necessary references to parameters\n   * or resources previously set on the encoder are recorded as part of the command. After encoding\n   * a command, you can safely change the encoding state to set up parameters needed to encode other\n   * commands. The total number of threads per grid is threadgroupCount * threadgroupSize.\n   *\n   * @param threadgroupCount The number of thread groups in the grid, in each dimension.\n   * @param threadgroupSize The number of threads in one threadgroup, in each dimension.\n   * @param dependencies Any textures or buffers accessed in this dispatch.\n   */\n  virtual void dispatchThreadGroups(const Dimensions& threadgroupCount,\n                                    const Dimensions& threadgroupSize,\n                                    const Dependencies& dependencies = Dependencies()) = 0;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/ComputePipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstddef>\n#include <cstdint>\n#include <unordered_map>\n#include <igl/NameHandle.h>\n#include <igl/RenderPipelineReflection.h>\n#include <igl/Shader.h>\n#include <igl/Texture.h>\n\nnamespace igl {\n/**\n * @brief Object for customizing the compilation of a new compute pipeline state object\n * To create a IComputePipelineState object, you create a pipeline descriptor, configure\n * its properties, pass it to one of the creation methods on a IDevice object.\n *\n * The most important property to set is the computeFunction property,\n * which specifies which function to call.\n */\nstruct ComputePipelineDesc {\n public:\n  bool operator==(const ComputePipelineDesc& other) const {\n    return shaderStages == other.shaderStages && imagesMap == other.imagesMap &&\n           buffersMap == other.buffersMap && debugName == other.debugName;\n  }\n\n  /*\n   * OpenGL only\n   */\n  std::unordered_map<size_t, igl::NameHandle> imagesMap;\n  std::unordered_map<size_t, igl::NameHandle> buffersMap;\n\n  /*\n   * @brief The compute kernel the pipeline calls.\n   */\n  std::shared_ptr<IShaderStages> shaderStages;\n\n  std::string debugName;\n};\n\n/**\n * @brief Object that contains a compiled compute pipeline.\n * These objects can be created by calling methods on an IDevice object.\n */\nclass IComputePipelineState {\n public:\n  using IComputePipelineReflection = IRenderPipelineReflection;\n  virtual std::shared_ptr<IComputePipelineReflection> computePipelineReflection() = 0;\n  virtual ~IComputePipelineState() = default;\n  [[nodiscard]] virtual int getIndexByName(const NameHandle& /* name */) const {\n    return -1;\n  }\n};\n\n} // namespace igl\n\n/// Hashing function declarations\n///\nnamespace std {\n\n// ComputePipelineDesc hash\ntemplate<>\nstruct hash<igl::ComputePipelineDesc> {\n  size_t operator()(const igl::ComputePipelineDesc& desc) const {\n    size_t hash = std::hash<uintptr_t>()(reinterpret_cast<uintptr_t>(desc.shaderStages.get()));\n    hash ^= std::hash<std::string>()(desc.debugName);\n    for (const auto& p : desc.buffersMap) {\n      hash ^= std::hash<size_t>()(p.first);\n      hash ^= std::hash<std::string>()(p.second.toString());\n    }\n    for (const auto& p : desc.imagesMap) {\n      hash ^= std::hash<size_t>()(p.first);\n      hash ^= std::hash<std::string>()(p.second.toString());\n    }\n    return hash;\n  }\n};\n\n} // namespace std\n"
  },
  {
    "path": "src/igl/Config.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n// @fb-only\n// @fb-only\n// @fb-only\n\n///--------------------------------------\n/// MARK: - Platform\n\n///\n/// Platform conditionals specify which OS the code is being compiled for.\n///\n/// MICROSOFT(WIN)/APPLE/ANDROID/LINUX are mutually exclusive.\n/// MACOS/IOS(_SIMULATOR) are mutually exclusive.\n///\n/// The following set of conditionals exist and currently are supported:\n///\n/// Windows:\n///   IGL_PLATFORM_WINDOWS\n/// Apple:\n///   IGL_PLATFORM_APPLE\n///   IGL_PLATFORM_IOS\n///   IGL_PLATFORM_IOS_SIMULATOR\n///   IGL_PLATFORM_MACCATALYST\n///   IGL_PLATFORM_MACOSX\n/// Android:\n///   IGL_PLATFORM_ANDROID\n/// Linux:\n///   IGL_PLATFORM_LINUX\n/// WEBGL:\n///   IGL_PLATFORM_EMSCRIPTEN\n\n#if !defined(IGL_CMAKE_BUILD)\n\n// clang-format off\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// clang-format on\n\n#else // !defined(IGL_CMAKE_BUILD)\n\n// clang-format off\n// Windows\n#if defined(_WIN32)\n  #define IGL_PLATFORM_WINDOWS 1\n  #define IGL_PLATFORM_APPLE 0\n  #define IGL_PLATFORM_IOS 0\n  #define IGL_PLATFORM_IOS_SIMULATOR 0\n  #define IGL_PLATFORM_MACCATALYST 0\n  #define IGL_PLATFORM_MACOSX 0\n  #define IGL_PLATFORM_ANDROID 0\n  #define IGL_PLATFORM_LINUX 0\n  #define IGL_PLATFORM_EMSCRIPTEN 0\n// Apple\n#elif defined (__APPLE__)\n  #define IGL_PLATFORM_WINDOWS 0\n  #define IGL_PLATFORM_ANDROID 0\n  #define IGL_PLATFORM_LINUX 0\n  #define IGL_PLATFORM_APPLE 1\n  #define IGL_PLATFORM_EMSCRIPTEN 0\n\n  #include <TargetConditionals.h>\n  #if TARGET_OS_SIMULATOR\n    #define IGL_PLATFORM_IOS 1 // iOS Simulator is iOS\n    #define IGL_PLATFORM_IOS_SIMULATOR 1\n    #define IGL_PLATFORM_MACCATALYST 0\n    #define IGL_PLATFORM_MACOSX 0\n  #elif TARGET_OS_MACCATALYST\n    #define IGL_PLATFORM_IOS 0\n    #define IGL_PLATFORM_IOS_SIMULATOR 0\n    #define IGL_PLATFORM_MACCATALYST 1\n    #define IGL_PLATFORM_MACOSX 0\n  #elif TARGET_OS_IPHONE\n    #define IGL_PLATFORM_IOS 1\n    #define IGL_PLATFORM_IOS_SIMULATOR 0\n    #define IGL_PLATFORM_MACCATALYST 0\n    #define IGL_PLATFORM_MACOSX 0\n  #elif TARGET_OS_OSX\n    #define IGL_PLATFORM_IOS 0\n    #define IGL_PLATFORM_IOS_SIMULATOR 0\n    #define IGL_PLATFORM_MACCATALYST 0\n    #define IGL_PLATFORM_MACOSX 1\n  #else\n    #error \"Unknown Apple target\"\n  #endif\n// Android\n#elif defined(__ANDROID__)\n  #define IGL_PLATFORM_WINDOWS 0\n  #define IGL_PLATFORM_APPLE 0\n  #define IGL_PLATFORM_IOS 0\n  #define IGL_PLATFORM_IOS_SIMULATOR 0\n  #define IGL_PLATFORM_MACCATALYST 0\n  #define IGL_PLATFORM_MACOSX 0\n  #define IGL_PLATFORM_ANDROID 1\n  #define IGL_PLATFORM_LINUX 0\n  #define IGL_PLATFORM_EMSCRIPTEN 0\n// Linux\n#elif defined(__linux__)\n  #define IGL_PLATFORM_WINDOWS 0\n  #define IGL_PLATFORM_APPLE 0\n  #define IGL_PLATFORM_IOS 0\n  #define IGL_PLATFORM_IOS_SIMULATOR 0\n  #define IGL_PLATFORM_MACCATALYST 0\n  #define IGL_PLATFORM_MACOSX 0\n  #define IGL_PLATFORM_ANDROID 0\n  #define IGL_PLATFORM_LINUX 1\n  #define IGL_PLATFORM_EMSCRIPTEN 0\n#elif defined(__EMSCRIPTEN__)\n  #define IGL_PLATFORM_WINDOWS 0\n  #define IGL_PLATFORM_APPLE 0\n  #define IGL_PLATFORM_IOS 0\n  #define IGL_PLATFORM_IOS_SIMULATOR 0\n  #define IGL_PLATFORM_MACCATALYST 0\n  #define IGL_PLATFORM_MACOSX 0\n  #define IGL_PLATFORM_ANDROID 0\n  #define IGL_PLATFORM_LINUX 0\n  #define IGL_PLATFORM_EMSCRIPTEN 1\n// Rest\n#else\n  #define IGL_PLATFORM_WINDOWS 0\n  #define IGL_PLATFORM_APPLE 0\n  #define IGL_PLATFORM_IOS 0\n  #define IGL_PLATFORM_IOS_SIMULATOR 0\n  #define IGL_PLATFORM_MACCATALYST 0\n  #define IGL_PLATFORM_MACOSX 0\n  #define IGL_PLATFORM_ANDROID 0\n  #define IGL_PLATFORM_LINUX 0\n  #define IGL_PLATFORM_EMSCRIPTEN 0\n\n  #error \"Platform not supported\"\n#endif\n\n#endif // !defined(IGL_CMAKE_BUILD)\n\n#if IGL_PLATFORM_ANDROID && __ANDROID_MIN_SDK_VERSION__ >= 26\n  #define IGL_ANDROID_HWBUFFER_SUPPORTED\n#endif // __ANDROID_MIN_SDK_VERSION__ >= 26\n\n// IGL_PLATFORM_XR is for extended reality platforms like OpenXR\n#if !defined(IGL_PLATFORM_XR)\n  #define IGL_PLATFORM_XR 0\n#endif\n// clang-format on\n\n///--------------------------------------\n/// MARK: - Conditional backend support\n//\n// While libraries/utilities/helpers typically want to support all IGL backends, top level\n// applications might want to be more selective about them to minimize dependencies. IGL exposes\n// BUCK configs in defs.bzl to control backend support, and all BUCK modules that have a direct\n// dependency on IGL backends are expected to use the definitions provided there for integration.\n//\n// Furthermore, the macros below are provided so that IGL clients can safely wrap backend specific\n// code for conditional compilation.\n#if defined(IGL_BACKEND_ENABLE_HEADLESS)\n#define IGL_BACKEND_HEADLESS 1\n#else\n#define IGL_BACKEND_HEADLESS 0\n#endif\n\n#if defined(IGL_BACKEND_ENABLE_METAL)\n#define IGL_BACKEND_METAL 1\n#else\n#define IGL_BACKEND_METAL 0\n#endif\n\n#if defined(IGL_BACKEND_ENABLE_OPENGL)\n#define IGL_BACKEND_OPENGL 1\n#else\n#define IGL_BACKEND_OPENGL 0\n#endif\n\n#if defined(IGL_BACKEND_ENABLE_VULKAN)\n#define IGL_BACKEND_VULKAN 1\n#else\n#define IGL_BACKEND_VULKAN 0\n#endif\n\n#if defined(IGL_BACKEND_ENABLE_D3D12)\n#define IGL_BACKEND_D3D12 1\n#else\n#define IGL_BACKEND_D3D12 0\n#endif\n\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n\n///--------------------------------------\n/// MARK: - Angle support\n#if defined(FORCE_USE_ANGLE)\n#define IGL_ANGLE 1\n#define IGL_DISABLE_DEBUG_BUFFER_LABEL 1\n#else\n#define IGL_ANGLE 0\n#endif\n\n//--------------------------------------\n/// MARK: - Linux with SwiftShader\n//\n// IGL_PLATFORM_LINUX_SWIFTSHADER is a use case of IGL_PLATFORM_LINUX that uses\n// SwiftShader for rendering. For example, Rainbow uses SwiftShader in a CPU only\n// environment currently.\n#if defined(FORCE_USE_SWIFTSHADER) && IGL_PLATFORM_LINUX\n#define IGL_PLATFORM_LINUX_SWIFTSHADER 1\n#else\n#define IGL_PLATFORM_LINUX_SWIFTSHADER 0\n#endif\n\n//--------------------------------------\n/// MARK: - Linux with EGL\n//\n// IGL_PLATFORM_LINUX_USE_EGL enables EGL context on Linux, otherwise GLX is in use.\n// GLX is used in CMake builds for samples and shell apps to use OpenGL 4.6 on Linux desktops.\n#if IGL_PLATFORM_LINUX\n#if !defined(IGL_PLATFORM_LINUX_USE_EGL)\n#define IGL_PLATFORM_LINUX_USE_EGL 1\n#endif\n#else\n#if !defined(IGL_PLATFORM_LINUX_USE_EGL)\n#define IGL_PLATFORM_LINUX_USE_EGL 0\n#endif\n#endif\n\n///--------------------------------------\n/// MARK: - Debug\n\n#if !defined(IGL_CMAKE_BUILD) && !defined(IGL_DEBUG)\n\n// @fb-only\n\n#endif // !defined(IGL_CMAKE_BUILD) && !defined(IGL_DEBUG)\n\n// clang-format off\n#if !defined(IGL_DEBUG) // allow build systems to define it\n#if IGL_PLATFORM_ANDROID && !defined(FBANDROID_BUILD_MODE_OPT)\n  // On Android, buck defines NDEBUG for all builds so the test above doesn't work.\n  // FBANDROID_BUILD_MODE_OPT is only defined in production builds and was created\n  // with the exact purpose of allowing native code to differentiate build modes.\n  #define IGL_DEBUG 1\n#elif IGL_PLATFORM_WINDOWS\n  // Visual Studio never defines NDEBUG, it uses _DEBUG instead. See:\n  // https://learn.microsoft.com/en-us/cpp/c-runtime-library/debug?view=msvc-170\n  #if defined(_DEBUG) || defined(DEBUG)\n    #define IGL_DEBUG 1\n  #else\n    #define IGL_DEBUG 0\n  #endif\n#elif !defined(NDEBUG)\n  #define IGL_DEBUG 1\n#else\n  #define IGL_DEBUG 0\n#endif\n#endif\n// clang-format on\n\n///--------------------------------------\n/// MARK: - Logging\n\n#if IGL_DEBUG || defined(IGL_FORCE_ENABLE_LOGS)\n#define IGL_LOGGING_ENABLED 1\n#else\n#define IGL_LOGGING_ENABLED 0\n#endif\n\n///--------------------------------------\n/// MARK: - Soft Errors\n\n// clang-format off\n#if !defined(IGL_SOFT_ERROR_ENABLED)\n  // Either we have IGL_DEBUG, or Windows/Linux/etc, since we don't have good detection mechanism there.\n  #if IGL_DEBUG || (!IGL_PLATFORM_APPLE && !IGL_PLATFORM_ANDROID)\n    #define IGL_SOFT_ERROR_ENABLED 1\n  #else\n    #define IGL_SOFT_ERROR_ENABLED 0\n  #endif\n#endif\n// clang-format on\n\n///--------------------------------------\n/// MARK: - Debug Asserts\n\n#if IGL_LOGGING_ENABLED\n#define IGL_DEBUG_ABORT_ENABLED 1\n#else\n#define IGL_DEBUG_ABORT_ENABLED 0\n#endif\n\n#if IGL_DEBUG\n#define IGL_DEBUG_BREAK_ENABLED 1\n#else\n#define IGL_DEBUG_BREAK_ENABLED 0\n#endif\n"
  },
  {
    "path": "src/igl/Core.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#ifndef IGL_CORE_H\n#define IGL_CORE_H\n\n/**\n * @brief Core.h is a minimal header set for non-graphics utilities (e.g. logging, assert)\n *\n * This is useful for auxiliary modules in IGL that don't involve graphics (e.g. shell)\n */\n\n// Define macros to disable checks\n#if !defined(IGL_COMMON_SKIP_CHECK)\n#define IGL_COMMON_SKIP_CHECK 1\n#define IGL_CORE_H_COMMON_SKIP_CHECK 1 // Marker so we know to undefine at end of header\n#endif // !defined(IGL_COMMON_SKIP_CHECK)\n\n#include <igl/Assert.h>\n#include <igl/Log.h>\n#include <igl/Macros.h>\n\n// Undefine macros that are local to this header\n#if defined(IGL_CORE_H_COMMON_SKIP_CHECK)\n#undef IGL_COMMON_SKIP_CHECK\n#undef IGL_CORE_H_COMMON_SKIP_CHECK\n#endif // defined(IGL_CORE_H_COMMON_SKIP_CHECK)\n\n#include <igl/IGLFolly.h>\n\n#endif // IGL_CORE_H\n"
  },
  {
    "path": "src/igl/DebugMacros.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Color.h>\n\n// Debug macros that take in an igl CommandBuffer and set some debug labels to group the drawcalls\n#if IGL_DEBUG && !defined(IGL_DISABLE_DEBUG_BUFFER_LABEL)\n#define IGL_DEBUG_BUFFER_LABEL_START(buffer, x) (buffer)->pushDebugGroupLabel(x);\n#define IGL_DEBUG_BUFFER_LABEL_END(buffer) (buffer)->popDebugGroupLabel()\n#define IGL_DEBUG_BUFFER_LABEL_START_GUARD(buffer, x) \\\n  IGL_DEBUG_BUFFER_LABEL_START(buffer, x);            \\\n  auto popDebugGroupLabelScope =                      \\\n      folly::makeGuard([cmdBuffer = (buffer)]() { IGL_DEBUG_BUFFER_LABEL_END(cmdBuffer); });\n#else\n#define IGL_DEBUG_BUFFER_LABEL_START(buffer, x)\n#define IGL_DEBUG_BUFFER_LABEL_END(buffer)\n#define IGL_DEBUG_BUFFER_LABEL_START_GUARD(buffer, x)\n#endif // IGL_DEBUG && !defined(IGL_DISABLE_DEBUG_BUFFER_LABEL)\n"
  },
  {
    "path": "src/igl/DepthStencilState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/DepthStencilState.h>\n\n#include <functional>\n\nusing namespace igl;\n\nsize_t std::hash<igl::StencilStateDesc>::operator()(const igl::StencilStateDesc& key) const {\n  size_t hash = std::hash<int>()(static_cast<int>(EnumToValue(key.stencilCompareFunction)));\n  hash ^= std::hash<int>()(static_cast<int>(key.writeMask));\n  hash ^= std::hash<int>()(static_cast<int>(key.readMask));\n  hash ^= std::hash<int>()(static_cast<int>(EnumToValue(key.depthStencilPassOperation)));\n  hash ^= std::hash<int>()(static_cast<int>(EnumToValue(key.depthFailureOperation)));\n  hash ^= std::hash<int>()(static_cast<int>(EnumToValue(key.stencilFailureOperation)));\n  return hash;\n}\n\nbool DepthStencilStateDesc::operator!=(const DepthStencilStateDesc& other) const {\n  return !(*this == other);\n}\n\nbool DepthStencilStateDesc::operator==(const DepthStencilStateDesc& other) const {\n  return frontFaceStencil == other.frontFaceStencil && compareFunction == other.compareFunction &&\n         backFaceStencil == other.backFaceStencil &&\n         isDepthWriteEnabled == other.isDepthWriteEnabled;\n}\n\nsize_t std::hash<igl::DepthStencilStateDesc>::operator()(\n    const igl::DepthStencilStateDesc& key) const {\n  size_t hash = std::hash<igl::StencilStateDesc>()(key.frontFaceStencil);\n  hash ^= std::hash<igl::StencilStateDesc>()(key.backFaceStencil);\n  hash ^= std::hash<int>()(static_cast<int>(EnumToValue(key.compareFunction)));\n  hash ^= std::hash<bool>()(static_cast<bool>(key.isDepthWriteEnabled));\n  return hash;\n}\n"
  },
  {
    "path": "src/igl/DepthStencilState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h> // IWYU pragma: keep\n\nnamespace igl {\n\n/**\n * @brief Comparison tests used in depth testing and stencil testing.\n *\n * Testing is performed by using the CompareFunction to compare a new fragment's value and the an\n * existing value at the fragment's location.\n *\n * Never        : Never passes.\n * Less         : Passes if the fragment's value is strictly less than the existing value.\n * Equal        : Passes if the fragment's value is exactly equal to the existing value.\n * LessEqual    : Passes if the fragment's value is less than or equal to the existing value.\n * NotEqual     : Passes if the fragment's value is not equal to the existing value.\n * GreaterEqual : Passes if the fragment's value is greater than or equal to the existing value.\n * AlwaysPass   : Always passes.\n */\nenum class CompareFunction : uint8_t {\n  Never = 0,\n  Less,\n  Equal,\n  LessEqual,\n  Greater,\n  NotEqual,\n  GreaterEqual,\n  AlwaysPass\n};\n\n/**\n * @brief A stencil operation to perform on a fragment in the stencil buffer.\n *\n * Separate stencil operations can be configured for when the stencil test fails, when it passes\n * and the depth test fails and when both the depth and stencil tests pass. The  operation\n * determines what happens to the fragment's value in the stencil buffer when it is executed.\n *\n * Keep           : The existing value is kept.\n * Zero           : The value is set to zero.\n * Replace        : The value is replaced with the stencil reference value.\n * IncrementClamp : The value is incremented by 1 unless it is already the maximum possible value.\n * DecrementClamp : The value is decremented by 1 unless it is already the minimum possible value.\n * Invert         : The value is logically inverted.\n * IncrementWrap  : The max possible value is set to zero. All other values are incremented by 1.\n * DecrementWrap  : Zero is set to the max possible value. All other values are decremented by 1.\n */\nenum class StencilOperation : uint8_t {\n  Keep = 0,\n  Zero,\n  Replace,\n  IncrementClamp,\n  DecrementClamp,\n  Invert,\n  IncrementWrap,\n  DecrementWrap\n};\n\n/**\n * @brief Describes the stencil operations for either the front or back face.\n *\n * A DepthStencilStateDesc has descriptors for both the front and back face. These control\n * how the stencil buffers are updated during rendering.\n */\nstruct StencilStateDesc {\n  /**\n   * @brief The operation to perform when the stencil test fails.\n   */\n  StencilOperation stencilFailureOperation = StencilOperation::Keep;\n  /**\n   * @brief The operation to perform when the stencil test succeeds but the depth test fails.\n   */\n  StencilOperation depthFailureOperation = StencilOperation::Keep;\n  /**\n   * @brief The operation to perform when both the depth and stencil tests functions pass.\n   */\n  StencilOperation depthStencilPassOperation = StencilOperation::Keep;\n  /**\n   * @brief The comparison operation to use for stencil testing.\n   */\n  CompareFunction stencilCompareFunction = CompareFunction::AlwaysPass;\n  /**\n   * @brief A bit mask that determines which stencil value bits are compared in the stencil test.\n   */\n  uint32_t readMask = (uint32_t)~0;\n  /**\n   * @brief A bit mask that determines which stencil value bits are written to by stencil\n   * operations.\n   */\n  uint32_t writeMask = (uint32_t)~0;\n\n  /**\n   * @brief Compares two StencilStateDesc objects for equality.\n   *\n   * Returns true if all descriptor properties are identical.\n   */\n  bool operator==(const StencilStateDesc& other) const = default;\n  bool operator!=(const StencilStateDesc& other) const = default;\n};\n\n/**\n * @brief Describes the depth and stencil configuration for a render pass.\n *\n * This describes what depth comparison function to use, and whether to retain or discard\n * any new depth data. It also describes the stencil testing and stencil operations to use for both\n * the front and back face of polygons.\n */\nstruct DepthStencilStateDesc {\n  /**\n   * @brief Identifier used for debugging\n   */\n  std::string debugName;\n\n  /**\n   * @brief The comparison operation to use for depth testing.\n   */\n  CompareFunction compareFunction = CompareFunction::AlwaysPass;\n  /**\n   * @brief Determines whether new depth values are written.\n   *\n   * If true, depth values for any fragments that are not discarded are written.\n   * If false, the fragment shader will execute for fragments that pass the depth test but\n   * their depth values will not be written.\n   */\n  bool isDepthWriteEnabled = false;\n\n  /**\n   * @brief The stencil operation to use for the back face of polygons.\n   */\n  StencilStateDesc backFaceStencil;\n  /**\n   * @brief The stencil operation to use for the front face of polygons.\n   */\n  StencilStateDesc frontFaceStencil;\n\n  /**\n   * @brief Compares two DepthStencilStateDesc objects for equality.\n   *\n   * Returns true if all descriptor properties are identical.\n   */\n  bool operator==(const DepthStencilStateDesc& other) const;\n  /**\n   * @brief Compares two DepthStencilStateDesc objects for inequality.\n   *\n   * Returns true if any descriptor properties differ.\n   */\n  bool operator!=(const DepthStencilStateDesc& other) const;\n};\n\n/**\n * @brief A depth and stencil configuration.\n *\n * This interface is the backend agnostic representation for a depth and stencil configuration.\n * To create an instance, populate a DepthStencilStateDesc and call IDevice.createDepthStencilState.\n * To use an instance in a render pass, call IRenderCommandEncoder.bindDepthStencilState.\n */\nclass IDepthStencilState {\n public:\n protected:\n  IDepthStencilState() = default;\n  virtual ~IDepthStencilState() = default;\n};\n\n} // namespace igl\n\n/// Hashing function declarations\n///\nnamespace std {\n\n/**\n * @brief Provides a hash function for igl::DepthStencilStateDesc.\n */\ntemplate<>\nstruct hash<igl::DepthStencilStateDesc> {\n  /**\n   * @brief Computes a hash value for igl::DepthStencilStateDesc.\n   *\n   * The hash value is based on all properties in the igl::DepthStencilStateDesc;\n   */\n  size_t operator()(const igl::DepthStencilStateDesc& /*key*/) const;\n};\n\n/**\n * @brief Provides a hash function for igl::StencilStateDesc.\n */\ntemplate<>\nstruct hash<igl::StencilStateDesc> {\n  /**\n   * @brief Computes a hash value for igl::StencilStateDesc.\n   *\n   * The hash value is based on all properties in the igl::StencilStateDesc;\n   */\n  size_t operator()(const igl::StencilStateDesc& /*key*/) const;\n};\n\n} // namespace std\n"
  },
  {
    "path": "src/igl/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/Device.h>\n\n#include <algorithm>\n#include <igl/Framebuffer.h>\n\nnamespace igl {\n\nbool IDevice::defaultVerifyScope() {\n  return scopeDepth_ > 0;\n}\n\nTextureDesc IDevice::sanitize(const TextureDesc& desc) const {\n  TextureDesc sanitized = desc;\n  if (desc.width == 0 || desc.height == 0 || desc.depth == 0 || desc.numLayers == 0 ||\n      desc.numSamples == 0 || desc.numMipLevels == 0) {\n    sanitized.width = std::max(sanitized.width, 1u);\n    sanitized.height = std::max(sanitized.height, 1u);\n    sanitized.depth = std::max(sanitized.depth, 1u);\n    sanitized.numLayers = std::max(sanitized.numLayers, 1u);\n    sanitized.numSamples = std::max(sanitized.numSamples, 1u);\n    sanitized.numMipLevels = std::max(sanitized.numMipLevels, 1u);\n    IGL_LOG_ERROR(\n        \"width (%u), height (%u), depth (%u), numLayers (%u), numSamples (%u) and numMipLevels \"\n        \"(%u) should be at least 1.\\n\",\n        desc.width,\n        desc.height,\n        desc.depth,\n        desc.numLayers,\n        desc.numSamples,\n        desc.numMipLevels);\n  }\n\n  return sanitized;\n}\n\nColor IDevice::backendDebugColor() const noexcept {\n  switch (getBackendType()) {\n  case BackendType::Invalid:\n    return {0.f, 0.f, 0.f, 0.f}; // Clear\n  case BackendType::OpenGL:\n    return {1.f, 1.f, 0.f, 1.f}; // Yellow\n  case BackendType::Metal:\n    return {1.f, 0.f, 1.f, 1.f}; // Magenta\n  case BackendType::Vulkan:\n    return {0.f, 1.f, 1.f, 1.f}; // Cyan\n  case BackendType::D3D12:\n    return {0.f, 1.f, 1.f, 1.f}; // Match Vulkan for parity testing\n  // @fb-only\n    return {0.f, 1.f, 0.f, 1.f}; // Green @fb-only\n  case BackendType::Custom:\n    return {0.f, 0.f, 1.f, 1.f}; // Blue\n  }\n  IGL_UNREACHABLE_RETURN(Color(0.f, 0.f, 0.f, 0.f)) // Clear\n}\n\nDeviceScope::DeviceScope(IDevice& device) : device_(device) {\n  device_.beginScope();\n}\n\nDeviceScope::~DeviceScope() {\n  device_.endScope();\n}\n\nstd::shared_ptr<IFramebuffer> IDevice::createFramebufferFromBaseDesc(\n    const base::FramebufferInteropDesc& desc) {\n  auto makeTextureDesc = [](const base::AttachmentInteropDesc& attachment) -> TextureDesc {\n    return TextureDesc{\n        .width = attachment.width,\n        .height = attachment.height,\n        .depth = attachment.depth,\n        .numLayers = attachment.numLayers,\n        .numSamples = attachment.numSamples,\n        .usage = static_cast<TextureDesc::TextureUsage>(\n            attachment.isSampled ? (TextureDesc::TextureUsageBits::Attachment |\n                                    TextureDesc::TextureUsageBits::Sampled)\n                                 : TextureDesc::TextureUsageBits::Attachment),\n        .numMipLevels = attachment.numMipLevels,\n        .type = attachment.type,\n        .format = attachment.format,\n        .storage = ResourceStorage::Private,\n    };\n  };\n\n  FramebufferDesc fbDesc;\n\n  for (size_t i = 0; i < base::kMaxColorAttachments; ++i) {\n    const auto* attachmentDesc = desc.colorAttachments[i];\n    if (attachmentDesc && attachmentDesc->format != TextureFormat::Invalid) {\n      Result result;\n      TextureDesc textureDesc = makeTextureDesc(*attachmentDesc);\n      if (attachmentDesc->numLayers == 2) {\n        fbDesc.mode = FramebufferMode::Stereo;\n      }\n\n      if (attachmentDesc->numSamples > 1) {\n        TextureDesc resolveTextureDesc = textureDesc;\n        textureDesc.usage =\n            static_cast<TextureDesc::TextureUsage>(TextureDesc::TextureUsageBits::Attachment);\n        resolveTextureDesc.numSamples = 1;\n\n        auto resolveTexture = createTexture(resolveTextureDesc, &result);\n        if (resolveTexture && result.isOk()) {\n          fbDesc.colorAttachments[i].resolveTexture = std::move(resolveTexture);\n        } else {\n          return nullptr;\n        }\n      }\n\n      auto texture = createTexture(textureDesc, &result);\n      if (texture && result.isOk()) {\n        fbDesc.colorAttachments[i].texture = std::move(texture);\n      } else {\n        return nullptr;\n      }\n    }\n  }\n\n  if (desc.depthAttachment && desc.depthAttachment->format != TextureFormat::Invalid) {\n    Result result;\n    TextureDesc textureDesc = makeTextureDesc(*desc.depthAttachment);\n    if (desc.depthAttachment->numLayers == 2) {\n      fbDesc.mode = FramebufferMode::Stereo;\n    }\n\n    if (desc.depthAttachment->numSamples > 1) {\n      TextureDesc resolveTextureDesc = textureDesc;\n      textureDesc.usage =\n          static_cast<TextureDesc::TextureUsage>(TextureDesc::TextureUsageBits::Attachment);\n      resolveTextureDesc.numSamples = 1;\n\n      auto resolveTexture = createTexture(resolveTextureDesc, &result);\n      if (resolveTexture && result.isOk()) {\n        fbDesc.depthAttachment.resolveTexture = std::move(resolveTexture);\n      } else {\n        return nullptr;\n      }\n    }\n\n    auto texture = createTexture(textureDesc, &result);\n    if (texture && result.isOk()) {\n      fbDesc.depthAttachment.texture = std::move(texture);\n    } else {\n      return nullptr;\n    }\n  }\n\n  if (desc.depthAttachment == desc.stencilAttachment) {\n    fbDesc.stencilAttachment = fbDesc.depthAttachment;\n  } else if (desc.stencilAttachment && desc.stencilAttachment->format != TextureFormat::Invalid) {\n    Result result;\n    TextureDesc textureDesc = makeTextureDesc(*desc.stencilAttachment);\n    if (desc.stencilAttachment->numLayers == 2) {\n      fbDesc.mode = FramebufferMode::Stereo;\n    }\n\n    if (desc.stencilAttachment->numSamples > 1) {\n      TextureDesc resolveTextureDesc = textureDesc;\n      textureDesc.usage =\n          static_cast<TextureDesc::TextureUsage>(TextureDesc::TextureUsageBits::Attachment);\n      resolveTextureDesc.numSamples = 1;\n\n      auto resolveTexture = createTexture(resolveTextureDesc, &result);\n      if (resolveTexture && result.isOk()) {\n        fbDesc.stencilAttachment.resolveTexture = std::move(resolveTexture);\n      } else {\n        return nullptr;\n      }\n    }\n\n    auto texture = createTexture(textureDesc, &result);\n    if (texture && result.isOk()) {\n      fbDesc.stencilAttachment.texture = std::move(texture);\n    } else {\n      return nullptr;\n    }\n  }\n\n  Result result;\n  return createFramebuffer(fbDesc, &result);\n}\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <utility>\n#include <igl/Common.h>\n#include <igl/DeviceFeatures.h>\n#include <igl/IResourceTracker.h>\n#include <igl/PlatformDevice.h>\n#include <igl/Texture.h>\n#include <igl/base/IDeviceBase.h>\n\nnamespace igl {\n\nstruct BindGroupBufferDesc;\nstruct BindGroupTextureDesc;\nstruct BufferDesc;\nstruct ComputePipelineDesc;\nstruct DepthStencilStateDesc;\nstruct FramebufferDesc;\nstruct RenderPipelineDesc;\nstruct SamplerStateDesc;\nstruct ShaderLibraryDesc;\nstruct ShaderModuleDesc;\nstruct ShaderStagesDesc;\nstruct VertexInputStateDesc;\nclass IBuffer;\nclass ICommandBuffer;\nclass IComputePipelineState;\nclass IDepthStencilState;\nclass IFramebuffer;\nclass IRenderPipelineState;\nclass ISamplerState;\nclass IShaderLibrary;\nclass IShaderModule;\nclass IShaderStages;\nclass ITimer;\nclass ITimestampQueries;\nclass IVertexInputState;\n\n/**\n * @brief InDevelopmentFeature is where you'd add in your own enum for testing out\n * an IGL feature you are working on. Once you declare it, you'd set it with\n * setDevelopmentFlags() from outside of IGL and then check for it with\n * testDevelopmentFlags() inside of IGL.\n *\n * For the IGL data types without access to IDevice, you'd need to do some\n * additional plumbing to pass the flag through.\n *\n * Note that none of this in-development code will be upstreamed. These flags\n * are only here so you have a way to revert to a safe path while testing in\n * production.\n */\n\n// @fb-only\n // @fb-only\n // @fb-only\nenum class InDevelopementFeatures : uint8_t {\n  // Define your in-development feature enums here\n  DummyFeatureExample,\n};\n\n/**\n * @brief Interface to a GPU that is used to draw graphics or do parallel computation.\n */\nclass IDevice : public ICapabilities, public base::IDeviceBase {\n public:\n  ~IDevice() override = default;\n\n  /*\n   * Create a new BindGroup for textures.\n   *\n   * Vulkan: If `compatiblePipeline` is provided, the resulting BindGroup will be populated with\n   * additional (dummy) textures and samplers in the binding slots where none were specified but are\n   * expected by GLSL shaders. This ensures that the BindGroup is compatible with GLSL shaders from\n   * the specified pipeline. If there's no pipeline specified, users must ensure all\n   * textures/samplers expected by shaders are provided in the BindGroup description.\n   */\n  virtual Holder<BindGroupTextureHandle> createBindGroup(\n      const BindGroupTextureDesc& desc,\n      const IRenderPipelineState* IGL_NULLABLE compatiblePipeline = nullptr,\n      Result* IGL_NULLABLE outResult = nullptr) = 0;\n  virtual Holder<BindGroupBufferHandle> createBindGroup(\n      const BindGroupBufferDesc& desc,\n      Result* IGL_NULLABLE outResult = nullptr) = 0;\n\n  virtual void destroy(BindGroupTextureHandle handle) = 0;\n  virtual void destroy(BindGroupBufferHandle handle) = 0;\n  virtual void destroy(SamplerHandle handle) = 0;\n\n  /**\n   * @brief Creates a command queue.\n   * @see igl::CommandQueueDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created queue.\n   */\n  virtual std::shared_ptr<ICommandQueue> createCommandQueue(const CommandQueueDesc& desc,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) noexcept = 0;\n\n  /**\n   * @brief Creates a buffer resource.\n   * @see igl::BufferDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Unique pointer to the created buffer.\n   */\n  virtual std::unique_ptr<IBuffer> createBuffer(const BufferDesc& desc,\n                                                Result* IGL_NULLABLE outResult) const noexcept = 0;\n\n  /**\n   * @brief Creates a depth stencil state.\n   * @see igl::DepthStencilStateDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created depth stencil state.\n   */\n  virtual std::shared_ptr<IDepthStencilState> createDepthStencilState(\n      const DepthStencilStateDesc& desc,\n      Result* IGL_NULLABLE outResult) const = 0;\n\n  /**\n   * @brief Creates a sampler state.\n   * @see igl::SamplerStateDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created sampler state.\n   */\n  virtual std::shared_ptr<ISamplerState> createSamplerState(const SamplerStateDesc& desc,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) const = 0;\n\n  /**\n   * @brief Creates a texture resource.\n   * @see igl::TextureDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created texture.\n   */\n  virtual std::shared_ptr<ITexture> createTexture(const TextureDesc& desc,\n                                                  Result* IGL_NULLABLE\n                                                      outResult) const noexcept = 0;\n\n  /**\n   * @brief Creates a texture view resource.\n   * @see igl::TextureViewDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created texture.\n   */\n  virtual std::shared_ptr<ITexture> createTextureView(std::shared_ptr<ITexture> texture,\n                                                      const TextureViewDesc& desc,\n                                                      Result* IGL_NULLABLE\n                                                          outResult) const noexcept = 0;\n\n  /**\n   * @brief Creates a timer for measuring the time taken by command buffers.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created timer.\n   */\n  virtual std::shared_ptr<ITimer> createTimer(Result* IGL_NULLABLE outResult) const noexcept = 0;\n\n  /**\n   * @brief Create a timestamp queries object that can hold up to maxTimestamps entries.\n   * Returns nullptr if not supported on this backend/device.\n   */\n  virtual std::shared_ptr<ITimestampQueries> createTimestampQueries(uint32_t maxTimestamps,\n                                                                    Result* IGL_NULLABLE\n                                                                        outResult) const noexcept {\n    Result::setResult(\n        outResult, Result::Code::Unsupported, \"TimestampQueries not supported on this backend\");\n    (void)maxTimestamps;\n    return nullptr;\n  }\n\n  /**\n   * @brief Creates a vertex input state.\n   * @see igl::VertexInputStateDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created vertex input state.\n   */\n  virtual std::shared_ptr<IVertexInputState> createVertexInputState(\n      const VertexInputStateDesc& desc,\n      Result* IGL_NULLABLE outResult) const = 0;\n\n  /**\n   * @brief Creates a compute pipeline state.\n   * @see igl::ComputePipelineDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created compute pipeline state.\n   */\n  virtual std::shared_ptr<IComputePipelineState> createComputePipeline(\n      const ComputePipelineDesc& desc,\n      Result* IGL_NULLABLE outResult) const = 0;\n\n  /**\n   * @brief Creates a render pipeline state.\n   * @see igl::RenderPipelineDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created render pipeline state.\n   */\n  virtual std::shared_ptr<IRenderPipelineState> createRenderPipeline(const RenderPipelineDesc& desc,\n                                                                     Result* IGL_NULLABLE\n                                                                         outResult) const = 0;\n\n  /**\n   * @brief Creates a shader module from either source code or pre-compiled data.\n   * @see igl::ShaderModuleDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created shader module.\n   */\n  virtual std::shared_ptr<IShaderModule> createShaderModule(const ShaderModuleDesc& desc,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) const = 0;\n\n  /**\n   * @brief Creates a frame buffer object.\n   * @see igl::FramebufferDesc\n   * @param desc Description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Shared pointer to the created frame buffer.\n   */\n  virtual std::shared_ptr<IFramebuffer> createFramebuffer(const FramebufferDesc& desc,\n                                                          Result* IGL_NULLABLE outResult) = 0;\n\n  /**\n   * @brief Returns a platform-specific device. If the requested device type does not match that of\n   * the actual underlying device, then null is returned.\n   * @return Pointer to the underlying platform-specific device.\n   */\n  template<typename T>\n  T* IGL_NULLABLE getPlatformDevice() noexcept {\n    static_assert(std::is_base_of<IPlatformDevice, T>::value,\n                  \"getPlatformDevice() requires T to be derived from IPlatformDevice\");\n    return const_cast<T*>(static_cast<const IDevice*>(this)->getPlatformDevice<T>());\n  }\n\n  /**\n   * @brief Returns a platform-specific device. If the requested device type does not match that of\n   * the actual underlying device, then null is returned.\n   * @return Pointer to the underlying platform-specific device.\n   */\n  template<typename T>\n  const T* IGL_NULLABLE getPlatformDevice() const noexcept {\n    static_assert(std::is_base_of<IPlatformDevice, T>::value,\n                  \"getPlatformDevice() requires T to be derived from IPlatformDevice\");\n    const IPlatformDevice& platformDevice = getPlatformDevice();\n    if (platformDevice.isType(T::kType)) {\n      return static_cast<const T*>(&platformDevice);\n    }\n    return nullptr;\n  }\n\n  /**\n   * @brief Returns a platform-specific device. Returned value should not be held longer than the\n   * original `IDevice`.\n   * @return Pointer to the underlying platform-specific device.\n   */\n  IPlatformDevice& getPlatformDevice() noexcept {\n    return const_cast<IPlatformDevice&>(static_cast<const IDevice*>(this)->getPlatformDevice());\n  }\n\n  /**\n   * @brief Returns a platform-specific device. Returned value should not be held longer than the\n   * original `IDevice`.\n   * @return Pointer to the underlying platform-specific device.\n   */\n  [[nodiscard]] virtual const IPlatformDevice& getPlatformDevice() const noexcept = 0;\n\n  /**\n   * @brief Allow clients to verify that the scope that they are making IGL calls is current and\n   * valid.\n   * @return Whether or not the current scope is valid.\n   */\n  virtual bool verifyScope() {\n    return defaultVerifyScope();\n  }\n\n  /**\n   * @brief Get access to the staging buffer.\n   * @return Pointer to the staging buffer interface, or nullptr if not available.\n   */\n  [[nodiscard]] base::IStagingBufferInterop* IGL_NULLABLE getStagingBufferInterop() override {\n    return nullptr;\n  }\n\n  /**\n   * @brief Returns the backend type.\n   * @return The backend type enum value.\n   */\n  [[nodiscard]] BackendType getBackendType() const override = 0;\n\n  /**\n   * @brief Returns raw pointer to native device handle.\n   * @return Platform-specific device handle.\n   */\n  [[nodiscard]] void* IGL_NULLABLE getNativeDevice() const override = 0;\n\n  /**\n   * @brief Create a framebuffer from base descriptor.\n   * @param desc The framebuffer descriptor.\n   * @return Pointer to created framebuffer, or nullptr if not supported.\n   */\n  [[nodiscard]] base::IFramebufferInterop* IGL_NULLABLE\n  createFramebufferInterop(const base::FramebufferInteropDesc& desc) override {\n    (void)desc;\n    return nullptr;\n  }\n\n  /**\n   * @brief Returns the range of Z values in normalized device coordinates considered to be within\n   * the viewing volume ie. [-1, 1], [0, 1]. Can be used when a client needs a generic way to adapt\n   * how different backends handle NDC.\n   * @return The Z value range within the viewing volume.\n   */\n  [[nodiscard]] virtual NormalizedZRange getNormalizedZRange() const {\n    return NormalizedZRange::NegOneToOne;\n  }\n\n  /**\n   * @brief Returns the number of draw calls made using this device.\n   * @return The number of draw calls made so far.\n   */\n  [[nodiscard]] virtual size_t getCurrentDrawCount() const = 0;\n\n  /**\n   * @brief Returns the number of shaders compiled using this device.\n   * @return The number of shaders compiled so far.\n   */\n  [[nodiscard]] virtual size_t getShaderCompilationCount() const = 0;\n\n  /**\n   * @brief Returns the number of bytes of GPU memory currently in use, or 0 if the device does not\n   * support memory tracking.\n   * @return Used GPU memory\n   */\n  [[nodiscard]] virtual size_t getGPUMemoryUsage() const {\n    return 0;\n  }\n\n  /**\n   * @brief Creates a shader library with one or more shader modules.\n   * @see igl::ShaderCompileDesc\n   * @param desc The description for the shader library to be created.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Unique pointer to the created shader library.\n   */\n  virtual std::unique_ptr<IShaderLibrary> createShaderLibrary(const ShaderLibraryDesc& desc,\n                                                              Result* IGL_NULLABLE\n                                                                  outResult) const = 0;\n\n  /**\n   * @brief This is only used by EGL-based clients, e.g. Android, to set the default framebuffer to\n   * render to. For all other clients, this is a no-op.\n   */\n  virtual void updateSurface(void* IGL_NONNULL /*nativeWindowType*/) {}\n\n  /**\n   * @brief Creates a shader stages object.\n   * @see igl::ShaderStagesDesc\n   * @param desc The description for the desired resource.\n   * @param outResult Pointer to where the result (success, failure, etc) is written. Can be null if\n   * no reporting is desired.\n   * @return Unique pointer to the created shader stages object.\n   */\n  virtual std::unique_ptr<IShaderStages> createShaderStages(const ShaderStagesDesc& desc,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) const = 0;\n\n  /**\n   * @brief Sets the resource tracker used by this device.\n   * @see igl::IResourceTracker\n   * @param tracker Shared pointer to the tracker.\n   */\n  void setResourceTracker(std::shared_ptr<IResourceTracker> tracker) noexcept {\n    resourceTracker_ = std::move(tracker);\n  }\n\n  /**\n   * @brief Returns the resource tracker used by this device.\n   * @see igl::IResourceTracker\n   * @return Shared pointer to the tracker.\n   */\n  [[nodiscard]] std::shared_ptr<IResourceTracker> getResourceTracker() const noexcept {\n    return resourceTracker_;\n  }\n\n  /**\n   * @brief Returns if a resource tracker is used by this device.\n   */\n  [[nodiscard]] bool hasResourceTracker() const noexcept {\n    return resourceTracker_ != nullptr;\n  }\n\n  /**\n   * @brief Returns a backend-specific color for debugging purposes\n   *  - OpenGL: Yellow\n   *  - Metal: Magenta\n   *  - Vulkan: Cyan\n   // @fb-only\n   *  - Custom: Blue\n   */\n  [[nodiscard]] Color backendDebugColor() const noexcept;\n\n  /**\n   * @brief Controls an opaque internal bit field that enables/disables certain\n   * in-development paths at run time.\n   *\n   * It is strongly recommended to set the fields during device creation or very near it.\n   *\n   * Some examples of the usage:\n   *     * Preserving the original path while making a particularly dangerous change\n   *     * Enabling a new IGL feature to a subset of users as an experiment.\n   */\n  bool testDevelopmentFlags(InDevelopementFeatures featureEnum) {\n    const uint8_t pos = static_cast<uint8_t>(featureEnum);\n    IGL_DEBUG_ASSERT(pos < 64);\n\n    return (inDevelopmentFlags_ & (1ull << pos)) != 0u;\n  }\n\n  /**\n   * @brief Set/Unset an In-Development Flag\n   * The pos/value is only meaningful to the client of IGL and whatever\n   * in-development IGL feature you have in your IGL code base. No\n   * in-development paths will be upstreamed or accepted into public IGL\n   */\n  void setDevelopmentFlags(InDevelopementFeatures featureEnum, bool val) {\n    const uint8_t pos = static_cast<uint8_t>(featureEnum);\n    IGL_DEBUG_ASSERT(pos < 64);\n\n    if (val) {\n      inDevelopmentFlags_ |= 1ull << pos;\n    } else {\n      inDevelopmentFlags_ &= ~(1ull << pos);\n    }\n  }\n\n  /**\n   * IGL can only be accessed by 1 thread at a time. Call this function to mark the current thread\n   * as the \"owning\" thread.\n   */\n  virtual void setCurrentThread() {\n  } // NOTE: for now, this is implemented only in IGL/Vulkan and IGL/OpenGL\n\n protected:\n  virtual void beginScope() {\n    ++scopeDepth_;\n  }\n  virtual void endScope() {\n    --scopeDepth_;\n  }\n  [[nodiscard]] TextureDesc sanitize(const TextureDesc& desc) const;\n  IDevice() = default;\n\n  /// @brief Helper to create framebuffer from base descriptor\n  /// @param desc The base framebuffer descriptor\n  /// @return Shared pointer to the created framebuffer, or nullptr on failure\n  [[nodiscard]] std::shared_ptr<IFramebuffer> createFramebufferFromBaseDesc(\n      const base::FramebufferInteropDesc& desc);\n\n  uint64_t inDevelopmentFlags_ = 0;\n\n private:\n  bool defaultVerifyScope();\n\n  int scopeDepth_ = 0;\n  std::shared_ptr<IResourceTracker> resourceTracker_;\n\n  friend struct DeviceScope;\n};\n\n/**\n * @brief Delineates a scope for making API calls into IGL. Useful for marking diagnostics\n * boundaries.\n * @details To use this, instantiate a DeviceScope at the beginning of a code block that contains\n * a sequence of IGL calls. Typically, you do this at a top-level call such as initialization or a\n * per-frame render function. For clarity, it's best to place this sequence of calls inside braces.\n * For methods that call IGL, it's best to add an assert verifying the scope to ensure that the call\n * is occurring inside a valid DeviceScope.\n */\nstruct DeviceScope final {\n  /**\n   * @brief Creates a device scope associated with a given device.\n   * @param device The device to be associated with the created scope.\n   */\n  explicit DeviceScope(IDevice& device);\n  ~DeviceScope();\n\n private:\n  IDevice& device_;\n\n  // Prevent heap allocation\n  static void* IGL_NONNULL operator new(std::size_t);\n  static void* IGL_NONNULL operator new[](std::size_t);\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/DeviceFeatures.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <igl/ColorSpace.h> // IWYU pragma: export\n#include <igl/Macros.h>\n#include <igl/Texture.h>\n\nnamespace igl {\n\n// clang-format off\n/**\n * @brief DeviceFeatures denotes the different kinds of specific features that are supported in the\n * device. Note that this can differ across devices based on vendor support.\n *\n * BindBytes                  Supports binding bytes (temporary buffers), e.g., setVertexBytes on Metal\n * BindUniform                Supports binding individual uniform values\n * BufferDeviceAddress        Supports buffer device address (bindless buffers)\n * BufferNoCopy               Supports creating buffers that use previously allocated memory\n * BufferRing                 Supports creating ring buffers with memory for each swapchain image\n * Compute                    Supports compute\n * CopyBuffer                 Supports ICommandBuffer::copyBuffer()\n * DepthCompare               Supports setting depth compare function\n * DepthShaderRead            Supports reading depth texture from a shader\n * DrawFirstIndexFirstVertex  Supports firstIndex/firstVertex parameters in IRenderCommandEncoder::drawIndexed()\n * DrawIndexedIndirect        Supports IRenderCommandEncoder::drawIndexedIndirect\n * DrawInstanced              Supports IRenderCommandEncoder::draw:instanceCount\n * ExplicitBinding,           Supports uniforms block explicit binding in shaders\n * ExplicitBindingExt,        Supports uniforms block explicit binding in shaders via an extension\n * ExternalMemoryObjects,     Supports accessing external memory objects, including by POSIX file descriptor\n * MapBufferRange             Supports mapping buffer data into client address space\n * MeshShaders                Supports task/mesh shaders\n * MinMaxBlend                Supports Min and Max blend operations\n * MultipleRenderTargets      Supports MRT - Multiple Render Targets\n * MultiSample                Supports multisample textures\n * MultiSampleResolve         Supports GPU multisampled texture resolve\n * Multiview                  Supports multiview\n * MultiViewMultisample       Supports multisampled multiview\n * PushConstants              Supports push constants(Vulkan)\n * ReadWriteFramebuffer       Supports separate FB reading/writing binding\n * SamplerMinMaxLod           Supports constraining the min and max texture LOD when sampling\n * ShaderLibrary              Supports shader libraries\n * ShaderTextureLod           Supports explicit control of Lod in the shader\n * ShaderTextureLodExt        Supports explicit control of Lod in the shader via an extension\n * SRGB                       Supports sRGB Textures and FrameBuffer\n * SRGBSwapchain              Supports sRGB Swapchain\n * StandardDerivative         Supports Standard Derivative function in shader\n * StandardDerivativeExt      Supports Standard Derivative function in shader via an extension\n * StorageBuffers             Supports SSBO\n * Texture2DArray             Supports 2D array textures\n * Texture3D                  Supports 3D textures\n * TextureArrayExt            Supports array textures via an extension\n * TextureBindless            Supports bindless textures\n * TextureExternalImage       Supports reading external images in the shader\n * TextureFilterAnisotropic   Supports Anisotropic texture filtering\n * TextureFloat               Supports full float texture format\n * TextureFormatRG            Supports RG Texture\n * TextureFormatRGB           Supports packed RGB texture formats\n * TextureHalfFloat           Supports half float texture format\n * TextureNotPot              Supports non power-of-two textures\n * TexturePartialMipChain     Supports mip chains that do not go all the way to 1x1\n * TextureViews               Supports IDevice::createTextureView()\n * TimestampQueries            Supports per-filter GPU timestamp queries\n * Timers                     Supports GPU timers\n * UniformBlocks,             Supports uniform blocks\n * Indices8Bit,               Supports uint8 vertex indices\n * ValidationLayersEnabled,   Validation layers are enabled\n */\nenum class DeviceFeatures {\n  BindBytes = 0,\n  BindUniform,\n  BufferDeviceAddress,\n  BufferNoCopy,\n  BufferRing,\n  Compute,\n  CopyBuffer,\n  DepthCompare,\n  DepthShaderRead,\n  DrawFirstIndexFirstVertex,\n  DrawIndexedIndirect,\n  DrawInstanced,\n  ExplicitBinding,\n  ExplicitBindingExt,\n  ExternalMemoryObjects,\n  Indices8Bit,\n  MapBufferRange,\n  MeshShaders,\n  MinMaxBlend,\n  MultipleRenderTargets,\n  MultiSample,\n  MultiSampleResolve,\n  Multiview,\n  MultiViewMultisample,\n  PushConstants,\n  ReadWriteFramebuffer,\n  SamplerMinMaxLod,\n  ShaderLibrary,\n  ShaderTextureLod,\n  ShaderTextureLodExt,\n  SRGB,\n  SRGBSwapchain,             \n  SRGBWriteControl,\n  StandardDerivative,\n  StandardDerivativeExt,\n  StorageBuffers,\n  Texture2DArray,\n  TextureArrayExt,\n  Texture3D,\n  TextureBindless,\n  TextureExternalImage,\n  TextureFilterAnisotropic,\n  TextureFloat,\n  TextureFormatRG,\n  TextureFormatRGB,\n  TextureHalfFloat,\n  TextureNotPot,\n  TexturePartialMipChain,\n  TextureViews,\n  TimestampQueries,\n  Timers,\n  UniformBlocks,\n  ValidationLayersEnabled,\n};\n// clang-format on\n\n/**\n * @brief DeviceRequirement denotes capturing specific requirements for a feature to be enabled.\n * These should be used in combination with DeviceFeatures to understand how to take advantage of\n * the feature.\n * For example, using the StandardDerivative feature with an OpenGL ES 2.0 device requires using an\n * extension whereas it can be used without an extension for an OpenGL or OpenGL ES 3+ device.\n * If a device returns true for hasFeature(DeviceFeatures::ShaderTextureLod) and returns true for\n * hasRequirement(DeviceRequirement::ShaderTextureLodExtReq), then shader code wishing to use the\n * feature must do so via an extension.\n *\n * ExplicitBindingExtReq        Using explicit binding in a shader requires using an extension\n * ShaderTextureLodExtReq       Using Texture LOD in a shader requires using an extension\n * StandardDerivativeExtReq     Standard derivatives in a shader requires using an extension\n * TextureArrayExtReq           Texture array support requires an extension\n * TextureFormatRGExtReq        RG texture format support requires an extension\n */\nenum class DeviceRequirement {\n  ExplicitBindingExtReq,\n  ShaderTextureLodExtReq,\n  StandardDerivativeExtReq,\n  TextureArrayExtReq,\n  TextureFormatRGExtReq,\n};\n\n/**\n * @brief DeviceFeatureLimits provides specific limitations on certain features supported on the\n * device\n *\n * BufferAlignment                      Required byte alignment for buffer data\n * BufferNoCopyAlignment                Required byte alignment for no copy buffer data\n * MaxBindBytesBytes                    Maximum number of bytes that can be bound with bindBytes\n * MaxCubeMapDimension                  Maximum cube map dimensions\n * MaxFragmentUniformVectors            Maximum fragment uniform vectors\n * MaxMultisampleCount                  Maximum number of samples\n * MaxPushConstantBytes                 Maximum number of bytes for Push Constants\n * MaxTextureDimension1D2D              Maximum texture dimensions for 1D and 2D textures\n * MaxTextureDimension3D                Maximum texture dimensions for 3D textures\n * MaxStorageBufferBytes                Maximum number of bytes for storage buffers\n * MaxUniformBufferBytes                Maximum number of bytes for a uniform buffer\n * MaxVertexUniformVectors              Maximum vertex uniform vectors\n * PushConstantsAlignment               Required byte alignment for push constants data\n * ShaderStorageBufferOffsetAlignment   Required byte alignment for shader storage buffer offset\n * MaxComputeWorkGroupSizeX             Maximum compute work group size in X dimension\n * MaxComputeWorkGroupSizeY             Maximum compute work group size in Y dimension\n * MaxComputeWorkGroupSizeZ             Maximum compute work group size in Z dimension\n * MaxComputeWorkGroupInvocations       Maximum total compute work group invocations\n * MaxVertexInputAttributes             Maximum number of vertex input attributes\n * MaxColorAttachments                  Maximum number of color attachments (render targets)\n * MaxDescriptorHeapCbvSrvUav           Maximum CBV/SRV/UAV descriptors in shader-visible heap\n * (I-005) MaxDescriptorHeapSamplers            Maximum sampler descriptors in shader-visible heap\n * (I-005) MaxDescriptorHeapRtvs                Maximum RTV descriptors in CPU-visible heap (I-005)\n * MaxDescriptorHeapDsvs                Maximum DSV descriptors in CPU-visible heap (I-005)\n */\nenum class DeviceFeatureLimits {\n  BufferAlignment = 0,\n  BufferNoCopyAlignment,\n  MaxBindBytesBytes,\n  MaxCubeMapDimension,\n  MaxFragmentUniformVectors,\n  MaxMultisampleCount,\n  MaxPushConstantBytes,\n  MaxTextureDimension1D2D,\n  MaxTextureDimension3D,\n  MaxStorageBufferBytes,\n  MaxUniformBufferBytes,\n  MaxVertexUniformVectors,\n  PushConstantsAlignment,\n  ShaderStorageBufferOffsetAlignment,\n  MaxComputeWorkGroupSizeX,\n  MaxComputeWorkGroupSizeY,\n  MaxComputeWorkGroupSizeZ,\n  MaxComputeWorkGroupInvocations,\n  MaxVertexInputAttributes,\n  MaxColorAttachments,\n  // I-005: Descriptor heap size limits for cross-platform compatibility\n  MaxDescriptorHeapCbvSrvUav,\n  MaxDescriptorHeapSamplers,\n  MaxDescriptorHeapRtvs,\n  MaxDescriptorHeapDsvs,\n};\n\n/**\n * @brief ShaderFamily provides specific shader family usage\n *\n * Unknown       Unspecified shader family usage\n * Glsl          Regular GL shader language\n * GlslEs        GL Embedded Systems shader language\n * Metal         Metal API (macOS, iOS, etc.)\n * SpirV         Standard Portable Intermediate Representation open standard format\n */\nenum class ShaderFamily : uint8_t { Unknown, Glsl, GlslEs, Metal, SpirV, Hlsl };\n\n/**\n * @brief ShaderVersion provides information on the shader family type and version\n */\nstruct ShaderVersion {\n  ShaderFamily family = ShaderFamily::Unknown;\n  uint8_t majorVersion = 0;\n  uint8_t minorVersion = 0;\n  uint8_t extra = 0;\n\n  bool operator==(const ShaderVersion& other) const {\n    return family == other.family && majorVersion == other.majorVersion &&\n           minorVersion == other.minorVersion && extra == other.extra;\n  }\n\n  bool operator!=(const ShaderVersion& other) const {\n    return !(*this == other);\n  }\n};\n\n/**\n * @brief BackendVersion provides information on the backend flavor and version\n */\nstruct BackendVersion {\n  BackendFlavor flavor = BackendFlavor::Invalid;\n  uint8_t majorVersion = 0;\n  uint8_t minorVersion = 0;\n\n  bool operator==(const BackendVersion& other) const {\n    return flavor == other.flavor && majorVersion == other.majorVersion &&\n           minorVersion == other.minorVersion;\n  }\n\n  bool operator!=(const BackendVersion& other) const {\n    return !(*this == other);\n  }\n};\n\n/**\n * @brief ICapabilities defines the capabilities interface. Currently, it is IDevice\n * which implements this interface.\n */\nclass ICapabilities {\n public:\n  /**\n   * @brief TextureFormatCapabilityBits provides specific texture format usage\n   *\n   * Unsupported       The format is not supported\n   * Sampled           Can be used as read-only texture in vertex/fragment shaders\n   * SampledFiltered   The texture can be filtered during sampling\n   * Filter            The texture can be filtered during sampling\n   * Storage           Can be used as read/write storage texture in vertex/fragment/compute shaders\n   * Attachment        The texture can be used as a render target\n   * SampledAttachment The texture can be both sampled in shaders AND used as a render target\n   * All               All capabilities are supported\n   *\n   * @remark SampledAttachment is NOT the same as Sampled | Attachment.\n   */\n  enum TextureFormatCapabilityBits : uint8_t {\n    Unsupported = 0,\n    Sampled = 1 << 0,\n    SampledFiltered = 1 << 1,\n    Storage = 1 << 2,\n    Attachment = 1 << 3,\n    SampledAttachment = 1 << 4,\n    All = Sampled | SampledFiltered | Storage | Attachment | SampledAttachment\n  };\n\n  using TextureFormatCapabilities = uint8_t;\n\n  /**\n   * @brief This function indicates if a device feature is supported at all.\n   *\n   * @param feature The device feature specified\n   * @return True,  If feature is supported\n   *         False, Otherwise\n   */\n  [[nodiscard]] virtual bool hasFeature(DeviceFeatures feature) const = 0;\n\n  /**\n   * @brief This function indicates if a device requirement is at all present.\n   *\n   * @param requirement The device requirement specified\n   * @return True,      If requirement is present\n   *         False,     Otherwise\n   */\n  [[nodiscard]] virtual bool hasRequirement(DeviceRequirement requirement) const = 0;\n\n  /**\n   * @brief This function gets capabilities of a specified texture format\n   *\n   * @param format The texture format\n   * @return TextureFormatCapabilities\n   */\n  [[nodiscard]] virtual TextureFormatCapabilities getTextureFormatCapabilities(\n      TextureFormat format) const = 0;\n\n  /**\n   * @brief This function gets device feature limits and return additional error code in 'result'.\n   *\n   * @param featureLimits The device feature limits\n   * @param result        The error code returned.\n   * -1 means an error occurred, greater than 0 means valid results are acquired\n   *\n   * @return True,        If there are feature limits are present\n   *         False,       Otherwise\n   */\n  virtual bool getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const = 0;\n\n  /**\n   * @brief Gets the latest shader language version supported by this device.\n   * @return ShaderVersion\n   */\n  [[nodiscard]] virtual ShaderVersion getShaderVersion() const = 0;\n\n  /**\n   * @brief Gets the latest backend version supported by this device.\n   * @return BackendVersion\n   */\n  [[nodiscard]] virtual BackendVersion getBackendVersion() const = 0;\n\n protected:\n  virtual ~ICapabilities() = default;\n};\n\ninline bool contains(ICapabilities::TextureFormatCapabilities value,\n                     ICapabilities::TextureFormatCapabilityBits flag) {\n  return (value & flag) == flag;\n}\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/FPSCounter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h> // IWYU pragma: keep\n\nnamespace igl {\n\n/// @brief Based on\n/// https://github.com/PacktPublishing/3D-Graphics-Rendering-Cookbook/blob/master/shared/UtilsFPS.h.\n/// Convenience class to measure and print frames per second (FPS) to the console.\nclass FPSCounter {\n public:\n  /// @brief Constructs an instance of the class\n  /// @param printToConsole whether to print the FPS count to the console\n  /// @param avgIntervalInSeconds how often to update the FPS counter and print the information to\n  /// the console. The default is 1 second\n  explicit FPSCounter(bool printToConsole = true, float avgIntervalInSeconds = 1.0f) :\n    printToConsole_(printToConsole), avgIntervalInSeconds_(avgIntervalInSeconds) {\n    IGL_DEBUG_ASSERT(avgIntervalInSeconds > 0);\n  }\n\n  [[nodiscard]] float getAverageFPS() const noexcept {\n    return avgFPS_;\n  }\n\n  /// @brief Updates the frame count and computes the FPS  if the time passed in as a parameter is\n  /// greater than the threshold set at construciton time. This function should be called when a\n  /// frame has finished being submited for processing by the GPU along with the delta time between\n  /// the current and the previous frame\n  /// @param seconds the time, in seconds, to record and submit this frame's commands. The delta\n  /// time between this frame and the previous frame.\n  void updateFPS(double seconds) {\n    frames_++;\n    time_ += seconds;\n\n    if (time_ >= avgIntervalInSeconds_) {\n      avgFPS_ = float(frames_ / time_);\n\n      if (printToConsole_) {\n        IGL_LOG_INFO(\"FPS: %.1f\\n\", avgFPS_);\n      }\n\n      frames_ = 0;\n      time_ = 0;\n    }\n  }\n\n private:\n  bool printToConsole_ = true;\n\n  uint32_t frames_ = 0;\n  double time_ = 0;\n\n  const float avgIntervalInSeconds_ = 1.0f;\n  float avgFPS_ = 72.0f; // randomly picked high-ish initial value\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Format.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n// On iOS for Xcode 16.3, std::to_chars is not available. To avoid an error, we should not include\n// std::format, and switch to using fmt/format instead. This define is used in conjunction with\n// others below, as this is not the only reason not to include std::format.\n//\n// Note: the _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT is defined in libc++'s <__config>\n// header, which is includes by all other headers. We include <cassert> and <utility> above\n#define IGL_INCLUDE_FORMAT (!IGL_PLATFORM_APPLE || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT)\n\n// libc++'s implementation of std::format has a large binary size impact\n// (https://github.com/llvm/llvm-project/issues/64180), so avoid it on Android.\n#if defined(__cpp_lib_format) && (!defined(__ANDROID__) && IGL_INCLUDE_FORMAT)\n#include <format>\n#define IGL_FORMAT std::format\n#else\n#include <fmt/format.h>\n#define IGL_FORMAT fmt::format\n#endif // __cpp_lib_format\n"
  },
  {
    "path": "src/igl/Framebuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/Common.h>\n#include <igl/ITrackedResource.h>\n#include <igl/Texture.h>\n\nnamespace igl {\n\nenum class FramebufferMode {\n  Mono, // Default mode\n  Stereo, // Single pass stereo rendering. In this mode, IGL assumes there are two layers for each\n          // attachment. The first layer represents left view and the second layer\n          // represents the right view.\n  Multiview, // Reserved for future use\n};\n\n/**\n * @brief Represents textures associated with the frame buffer including color, depth, and stencil\n * surfaces.\n */\nstruct FramebufferDesc {\n  struct AttachmentDesc {\n    std::shared_ptr<ITexture> texture;\n    std::shared_ptr<ITexture> resolveTexture;\n  };\n\n  /** @brief All color attachments */\n  AttachmentDesc colorAttachments[IGL_COLOR_ATTACHMENTS_MAX] = {};\n  /** @brief The depth attachment */\n  AttachmentDesc depthAttachment;\n  /** @brief The stencil attachment */\n  AttachmentDesc stencilAttachment;\n\n  std::string debugName;\n\n  FramebufferMode mode = FramebufferMode::Mono;\n};\n\n/**\n * @brief Interface common to all frame buffers across all implementations\n */\nclass IFramebuffer : public ITrackedResource<IFramebuffer> {\n public:\n  ~IFramebuffer() override = default;\n\n  // Accessors\n  /** @brief Retrieve array of all valid color and resolve color attachment indices */\n  [[nodiscard]] virtual std::vector<size_t> getColorAttachmentIndices() const = 0;\n  /** @brief Retrieve a specific color attachment by index */\n  [[nodiscard]] virtual std::shared_ptr<ITexture> getColorAttachment(size_t index) const = 0;\n  /** @brief Retrieve a specific resolve color attachment by index */\n  [[nodiscard]] virtual std::shared_ptr<ITexture> getResolveColorAttachment(size_t index) const = 0;\n  /** @brief Retrieve depth attachment */\n  [[nodiscard]] virtual std::shared_ptr<ITexture> getDepthAttachment() const = 0;\n  /** @brief Retrieve resolve depth attachment */\n  [[nodiscard]] virtual std::shared_ptr<ITexture> getResolveDepthAttachment() const = 0;\n  /** @brief Retrieve the stencil attachment */\n  [[nodiscard]] virtual std::shared_ptr<ITexture> getStencilAttachment() const = 0;\n  /** @brief Retrieve the mode that this framebuffer was created in. */\n  [[nodiscard]] virtual FramebufferMode getMode() const = 0;\n  /** @brief Retrieve the flag checking if framebuffer is bound to swapchain. */\n  [[nodiscard]] virtual bool isSwapchainBound() const = 0;\n\n  // Methods\n  /** @brief Copy color data from the color attachment at the specified index into 'pixelBytes'.\n   * Some implementations may only support index 0. If bytesPerRow is 0, it will be\n   * autocalculated assuming now padding. */\n  virtual void copyBytesColorAttachment(ICommandQueue& cmdQueue,\n                                        size_t index,\n                                        void* pixelBytes,\n                                        const TextureRangeDesc& range,\n                                        size_t bytesPerRow = 0) const = 0;\n\n  /** @brief Copy depth data from the depth attachment into 'pixelBytes'. If bytesPerRow is 0, it\n   * will be autocalculated assuming now padding. */\n  virtual void copyBytesDepthAttachment(ICommandQueue& cmdQueue,\n                                        void* pixelBytes,\n                                        const TextureRangeDesc& range,\n                                        size_t bytesPerRow = 0) const = 0;\n\n  /** @brief Copy stencil data from stencil attachment into 'pixelBytes'. If bytesPerRow is 0, it\n   * will be autocalculated assuming now padding. */\n  virtual void copyBytesStencilAttachment(ICommandQueue& cmdQueue,\n                                          void* pixelBytes,\n                                          const TextureRangeDesc& range,\n                                          size_t bytesPerRow = 0) const = 0;\n  /** @brief Copy color data from the color attachment at the specified index into 'destTexture'.\n   * Some implementations may only support index 0. */\n  virtual void copyTextureColorAttachment(ICommandQueue& cmdQueue,\n                                          size_t index,\n                                          std::shared_ptr<ITexture> destTexture,\n                                          const TextureRangeDesc& range) const = 0;\n\n  /** @brief Replaces color attachment at index 0 with the 'texture' specified. A null texture is\n   * valid and unbinds the current color attachment at index 0. */\n  virtual void updateDrawable(std::shared_ptr<ITexture> texture) = 0;\n\n  /** @brief Replaces color attachment at index 0 and the depth texture with the textures specified.\n   * A null texture is valid and unbinds the attachment. */\n  virtual void updateDrawable(SurfaceTextures surfaceTextures) = 0;\n\n  /** @brief Replaces color attachment at index 0 and the depth texture with the textures specified.\n   * A null texture is valid and unbinds the attachment. */\n\n  virtual void updateResolveAttachment(std::shared_ptr<ITexture> texture) = 0;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/FramebufferWrapper.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/FramebufferWrapper.h>\n\nnamespace igl {\n\nFramebufferWrapper::FramebufferWrapper(std::shared_ptr<IFramebuffer> framebuffer) :\n  framebuffer_(std::move(framebuffer)) {}\n\nbase::IAttachmentInterop* IGL_NULLABLE FramebufferWrapper::getColorAttachment(size_t index) const {\n  if (!framebuffer_) {\n    return nullptr;\n  }\n  return framebuffer_->getColorAttachment(index).get();\n}\n\nbase::IAttachmentInterop* IGL_NULLABLE FramebufferWrapper::getDepthAttachment() const {\n  if (!framebuffer_) {\n    return nullptr;\n  }\n  return framebuffer_->getDepthAttachment().get();\n}\n\nvoid* IGL_NULLABLE FramebufferWrapper::getNativeFramebuffer() const {\n  // This method can be overridden by the platform-specific implementation\n  return nullptr;\n}\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/FramebufferWrapper.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/Framebuffer.h>\n#include <igl/base/IFramebufferInterop.h>\n\nnamespace igl {\n\n/// @brief Wrapper that adapts IFramebuffer to base::IFramebufferInterop interface\n/// @note This wrapper holds a shared_ptr to the underlying IFramebuffer\nclass FramebufferWrapper : public base::IFramebufferInterop {\n public:\n  explicit FramebufferWrapper(std::shared_ptr<IFramebuffer> framebuffer);\n  ~FramebufferWrapper() override = default;\n\n  // Non-copyable but movable\n  FramebufferWrapper(const FramebufferWrapper&) = delete;\n  FramebufferWrapper& operator=(const FramebufferWrapper&) = delete;\n  FramebufferWrapper(FramebufferWrapper&&) noexcept = default;\n  FramebufferWrapper& operator=(FramebufferWrapper&&) noexcept = default;\n\n  /// @brief Get the underlying IFramebuffer\n  [[nodiscard]] const std::shared_ptr<IFramebuffer>& getFramebuffer() const {\n    return framebuffer_;\n  }\n\n  // base::IFramebufferInterop interface\n  [[nodiscard]] base::IAttachmentInterop* IGL_NULLABLE\n  getColorAttachment(size_t index) const override;\n  [[nodiscard]] base::IAttachmentInterop* IGL_NULLABLE getDepthAttachment() const override;\n  [[nodiscard]] void* IGL_NULLABLE getNativeFramebuffer() const override;\n\n private:\n  std::shared_ptr<IFramebuffer> framebuffer_;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <utility>\n#include <vector>\n#include <igl/Common.h>\n\nnamespace igl {\nclass IDevice;\n\n/**\n * @brief Represents a type of a physical device for graphics/compute purposes\n */\nenum class HWDeviceType {\n  /// Unknown\n  Unknown = 0,\n  /// HW GPU - Discrete\n  DiscreteGpu = 1,\n  /// HW GPU - External\n  ExternalGpu = 2,\n  /// HW GPU - Integrated\n  IntegratedGpu = 3,\n  /// SW GPU\n  SoftwareGpu = 4,\n};\n\n/**\n * @brief Represents a query of a physical device to be requested from the underlying IGL\n * implementation\n */\nstruct HWDeviceQueryDesc {\n  /** @brief Desired hardware type */\n  HWDeviceType hardwareType;\n  /** @brief If set, ignores hardwareType and returns device assigned to displayId */\n  uintptr_t displayId;\n  /** @brief Reserved */\n  uint32_t flags;\n\n  explicit HWDeviceQueryDesc(HWDeviceType hardwareType,\n                             uintptr_t displayId = 0L,\n                             uint32_t flags = 0L) :\n    hardwareType(hardwareType), displayId(displayId), flags(flags) {}\n};\n\n/**\n * @brief  Represents a description of a specific physical device installed in the system\n */\nstruct HWDeviceDesc {\n  /** @brief Implementation-specific identifier of a device */\n  uintptr_t guid;\n  /** @brief A type of an actual physical device */\n  HWDeviceType type;\n  /** @brief Implementation-specific name of a device */\n  std::string name;\n  /** @brief Implementation-specific vendor name */\n  std::string vendor;\n  /** @brief Unique identifier of a vendor */\n  uint32_t vendorId;\n\n  HWDeviceDesc(uintptr_t guid,\n               HWDeviceType type,\n               uint32_t vendorId = 0,\n               std::string name = \"\",\n               std::string vendor = \"\") :\n    guid(guid), type(type), name(std::move(name)), vendor(std::move(vendor)), vendorId(vendorId) {}\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/IGL.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h> // IWYU pragma: export\n#include <igl/CommandBuffer.h> // IWYU pragma: export\n#include <igl/CommandQueue.h> // IWYU pragma: export\n#include <igl/Common.h> // IWYU pragma: export\n#include <igl/ComputeCommandEncoder.h> // IWYU pragma: export\n#include <igl/ComputePipelineState.h> // IWYU pragma: export\n#include <igl/DepthStencilState.h> // IWYU pragma: export\n#include <igl/Device.h> // IWYU pragma: export\n#include <igl/Framebuffer.h> // IWYU pragma: export\n#include <igl/HWDevice.h> // IWYU pragma: export\n#include <igl/RenderCommandEncoder.h> // IWYU pragma: export\n#include <igl/RenderPass.h> // IWYU pragma: export\n#include <igl/RenderPipelineState.h> // IWYU pragma: export\n#include <igl/SamplerState.h> // IWYU pragma: export\n#include <igl/Shader.h> // IWYU pragma: export\n#include <igl/ShaderCreator.h> // IWYU pragma: export\n#include <igl/Texture.h> // IWYU pragma: export\n#include <igl/Uniform.h> // IWYU pragma: export\n#include <igl/VertexInputState.h> // IWYU pragma: export\n"
  },
  {
    "path": "src/igl/IGLFolly.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#if !defined(IGL_CMAKE_BUILD)\n#include <folly/CppAttributes.h>\n#include <folly/Portability.h>\n#include <folly/Preprocessor.h>\n#else\n\n#include <utility>\n\n// folly/Portability.h\n\n#if __has_include(<features.h>)\n#include <features.h> // @manual\n#endif\n\n#if __has_include(<bits/c++config.h>)\n#include <bits/c++config.h> // @manual\n#endif\n\n#if __has_include(<__config>)\n#include <__config> // @manual\n#endif\n\n#ifdef __ANDROID__\n#include <android/api-level.h> // @manual\n#endif\n\n#ifdef __APPLE__\n#include <Availability.h> // @manual\n#include <AvailabilityMacros.h> // @manual\n#include <TargetConditionals.h> // @manual\n#endif\n\n#ifndef __has_extension\n#define FOLLY_HAS_EXTENSION(x) 0\n#else\n#define FOLLY_HAS_EXTENSION(x) __has_extension(x)\n#endif\n\n#if defined(__has_feature)\n#define FOLLY_HAS_FEATURE(...) __has_feature(__VA_ARGS__)\n#else\n#define FOLLY_HAS_FEATURE(...) 0\n#endif\n\n#if FOLLY_HAS_EXTENSION(nullability)\n#define FOLLY_NULLABLE                                   \\\n  FOLLY_PUSH_WARNING                                     \\\n  FOLLY_CLANG_DISABLE_WARNING(\"-Wnullability-extension\") \\\n  _Nullable FOLLY_POP_WARNING\n#define FOLLY_NONNULL                                    \\\n  FOLLY_PUSH_WARNING                                     \\\n  FOLLY_CLANG_DISABLE_WARNING(\"-Wnullability-extension\") \\\n  _Nonnull FOLLY_POP_WARNING\n#else\n#define FOLLY_NULLABLE\n#define FOLLY_NONNULL\n#endif\n\n// Generalize warning push/pop.\n#if defined(__GNUC__) || defined(__clang__)\n// Clang & GCC\n#define FOLLY_PUSH_WARNING _Pragma(\"GCC diagnostic push\")\n#define FOLLY_POP_WARNING _Pragma(\"GCC diagnostic pop\")\n#define FOLLY_GNU_DISABLE_WARNING_INTERNAL2(warningName) #warningName\n#define FOLLY_GNU_DISABLE_WARNING(warningName) \\\n  _Pragma(FOLLY_GNU_DISABLE_WARNING_INTERNAL2(GCC diagnostic ignored warningName))\n#ifdef __clang__\n#define FOLLY_CLANG_DISABLE_WARNING(warningName) FOLLY_GNU_DISABLE_WARNING(warningName)\n#define FOLLY_GCC_DISABLE_WARNING(warningName)\n#else\n#define FOLLY_CLANG_DISABLE_WARNING(warningName)\n#define FOLLY_GCC_DISABLE_WARNING(warningName) FOLLY_GNU_DISABLE_WARNING(warningName)\n#endif\n#define FOLLY_MSVC_DISABLE_WARNING(warningNumber)\n#elif defined(_MSC_VER)\n#define FOLLY_PUSH_WARNING __pragma(warning(push))\n#define FOLLY_POP_WARNING __pragma(warning(pop))\n// Disable the GCC warnings.\n#define FOLLY_GNU_DISABLE_WARNING(warningName)\n#define FOLLY_GCC_DISABLE_WARNING(warningName)\n#define FOLLY_CLANG_DISABLE_WARNING(warningName)\n#define FOLLY_MSVC_DISABLE_WARNING(warningNumber) __pragma(warning(disable : warningNumber))\n#else\n#define FOLLY_PUSH_WARNING\n#define FOLLY_POP_WARNING\n#define FOLLY_GNU_DISABLE_WARNING(warningName)\n#define FOLLY_GCC_DISABLE_WARNING(warningName)\n#define FOLLY_CLANG_DISABLE_WARNING(warningName)\n#define FOLLY_MSVC_DISABLE_WARNING(warningNumber)\n#endif\n\n/**\n * FB_ANONYMOUS_VARIABLE(str) introduces an identifier starting with\n * str and ending with a number that varies with the line.\n */\n#ifndef FB_ANONYMOUS_VARIABLE\n#define FB_CONCATENATE_IMPL(s1, s2) s1##s2\n#define FB_CONCATENATE(s1, s2) FB_CONCATENATE_IMPL(s1, s2)\n#ifdef __COUNTER__\n// Modular builds build each module with its own preprocessor state, meaning\n// `__COUNTER__` no longer provides a unique number across a TU.  Instead of\n// calling back to just `__LINE__`, use a mix of `__COUNTER__` and `__LINE__`\n// to try provide as much uniqueness as possible.\n#if FOLLY_HAS_FEATURE(modules)\n#define FB_ANONYMOUS_VARIABLE(str) \\\n  FB_CONCATENATE(FB_CONCATENATE(FB_CONCATENATE(str, __COUNTER__), _), __LINE__)\n#else\n#define FB_ANONYMOUS_VARIABLE(str) FB_CONCATENATE(str, __COUNTER__)\n#endif\n#else\n#define FB_ANONYMOUS_VARIABLE(str) FB_CONCATENATE(str, __LINE__)\n#endif\n#endif\n\n#endif // IGL_CMAKE_BUILD\n\n#define IGL_NULLABLE FOLLY_NULLABLE\n#define IGL_NONNULL FOLLY_NONNULL\n"
  },
  {
    "path": "src/igl/IGLSafeC.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#if !defined(IGL_CMAKE_BUILD)\n#include <secure_lib/secure_string.h> // IWYU pragma: export\n#else\n\n#include <stdlib.h>\n#include <string.h>\n#include <igl/Common.h>\n\n#define ERR_POTENTIAL_BUFFER_OVERFLOW 34 // matches with ERANGE in errno.h\n\ninline int try_checked_memcpy(void* destination,\n                              size_t destination_size,\n                              const void* source,\n                              size_t count) {\n  if (destination_size < count) {\n    return ERR_POTENTIAL_BUFFER_OVERFLOW;\n  }\n  memcpy(destination, source, count);\n  return 0;\n}\n\ninline void* checked_memcpy(void* destination,\n                            size_t destination_size,\n                            const void* source,\n                            size_t count) {\n  if (IGL_SOFT_VERIFY_NOT(destination_size < count, \"potential buffer overflow\")) {\n    exit(EXIT_FAILURE);\n  }\n  return memcpy(destination, source, count);\n}\n\ninline void* checked_memcpy_robust(void* destination,\n                                   size_t destination_size,\n                                   const void* source,\n                                   size_t source_size,\n                                   size_t count) {\n  if (IGL_SOFT_VERIFY_NOT(destination_size < count || source_size < count,\n                          \"potential buffer overflow\")) {\n    exit(EXIT_FAILURE);\n  }\n  return memcpy(destination, source, count);\n}\n\ninline void* checked_memcpy_offset(void* destination,\n                                   size_t destination_size,\n                                   size_t offset,\n                                   const void* source,\n                                   size_t count) {\n  // Naively, we could just check count > destination_size - offset. However,\n  // if offset is very large, e.g. size_t(-1), then destination_size - offset\n  // will overflow `size_t` and hence act additive to destination_size.\n  //\n  // To avoid this, we properly compute the available_size and then check that.\n\n  const size_t available_size = offset > destination_size ? 0 : destination_size - offset;\n\n  if (IGL_SOFT_VERIFY_NOT(count > available_size, \"potential buffer overflow\")) {\n    exit(EXIT_FAILURE);\n  }\n\n  memcpy((char*)destination + offset, source, count);\n  return destination;\n}\n\ninline int checked_strncmp(const char* str1,\n                           size_t str1_size,\n                           const char* str2,\n                           size_t str2_size,\n                           size_t count) {\n  if (IGL_SOFT_VERIFY_NOT(str1_size < count || str2_size < count, \"potential buffer overflow\")) {\n    exit(EXIT_FAILURE);\n  }\n\n  return strncmp(str1, str2, count);\n}\n\n#endif // IGL_CMAKE_BUILD\n"
  },
  {
    "path": "src/igl/IResourceTracker.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/Core.h>\n\nnamespace igl {\n\nclass ITexture;\nclass IBuffer;\nclass IFramebuffer;\nclass ISamplerState;\nclass IShaderLibrary;\nclass IShaderModule;\nclass IShaderStages;\n\ntemplate<typename T>\nclass ITrackedResource;\n\n/**\n * @brief The IResourceTracker interface allows clients to implement their own Resource Trackers.\n * Clients can track Textures, Buffers, Framebuffers or other TrackedResources\n */\nclass IResourceTracker {\n public:\n  virtual ~IResourceTracker() = default;\n  IResourceTracker() noexcept = default;\n\n  /**\n   * @brief Informs the tracker that the texture has been created\n   *\n   * @param texture Texture to be tracked\n   */\n  virtual void didCreate(const ITexture* texture) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the texture will be deleted\n   *\n   * @param texture Texture which will be deleted\n   */\n  virtual void willDelete(const ITexture* texture) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the buffer has been created\n   *\n   * @param buffer Buffer to be tracked\n   */\n  virtual void didCreate(const IBuffer* buffer) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the buffer will be deleted\n   *\n   * @param buffer Buffer which will be deleted\n   */\n  virtual void willDelete(const IBuffer* buffer) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the framebuffer has been created\n   *\n   * @param framebuffer Framebuffer to be tracked\n   */\n  virtual void didCreate(const IFramebuffer* framebuffer) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the framebuffer will be deleted\n   *\n   * @param framebuffer Framebuffer which will be deleted\n   */\n  virtual void willDelete(const IFramebuffer* framebuffer) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the sampler state has been created\n   *\n   * @param samplerState Sampler state to be tracked\n   */\n  virtual void didCreate(const ISamplerState* samplerState) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the sampler will be deleted\n   *\n   * @param samplerState Sampler state which will be deleted\n   */\n  virtual void willDelete(const ISamplerState* samplerState) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the shader library has been created\n   *\n   * @param shaderLibrary Shader library to be tracked\n   */\n  virtual void didCreate(const IShaderLibrary* shaderLibrary) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the shader library be deleted\n   *\n   * @param shaderLibrary Shader library which will be deleted\n   */\n  virtual void willDelete(const IShaderLibrary* shaderLibrary) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the shader module has been created\n   *\n   * @param shaderModule Shader module to be tracked\n   */\n  virtual void didCreate(const IShaderModule* shaderModule) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the shader module will be deleted\n   *\n   * @param shaderModule Shader module which will be deleted\n   */\n  virtual void willDelete(const IShaderModule* shaderModule) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the shader stages has been created\n   *\n   * @param shaderStages Shader stages to be tracked\n   */\n  virtual void didCreate(const IShaderStages* shaderStages) noexcept = 0;\n\n  /**\n   * @brief Informs the tracker that the shader stages will be deleted\n   *\n   * @param shaderStages Shader stages which will be deleted\n   */\n  virtual void willDelete(const IShaderStages* shaderStages) noexcept = 0;\n\n  template<typename T>\n  void didCreate(IGL_MAYBE_UNUSED const ITrackedResource<T>* resource) noexcept {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n  template<typename T>\n  void willDelete(IGL_MAYBE_UNUSED const ITrackedResource<T>* resource) noexcept {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n\n  /**\n   * @brief Associates a name tag with the next resources to be tracked\n   *\n   * @param tag Name of the tag\n   */\n  virtual void pushTag(const char* tag) noexcept = 0;\n\n  /**\n   * @brief Pops the last name tag in the stack\n   */\n  virtual void popTag() noexcept = 0;\n};\n\n/**\n * @brief Allows any resources being tracked by a ResourceTracker to be associated with a name tag.\n * Makes sure that the tag is popped in the destructor.\n */\nclass ResourceTrackerTagGuard {\n public:\n  ResourceTrackerTagGuard(std::shared_ptr<IResourceTracker> tracker, const char* tag) :\n    tracker_(std::move(tracker)) {\n    tracker_->pushTag(tag);\n  }\n  ~ResourceTrackerTagGuard() {\n    tracker_->popTag();\n  }\n\n private:\n  std::shared_ptr<IResourceTracker> tracker_;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/ITrackedResource.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/Common.h>\n#include <igl/IResourceTracker.h>\n\nnamespace igl {\n\n/**\n * @brief ITrackedResource enables resources to be tracked by IResourceTracker\n * Resources that want to be tracked should derive from ITrackedResource and ensure\n * initResourceTracker() is called during initialization\n */\ntemplate<class T>\nclass ITrackedResource {\n public:\n  virtual ~ITrackedResource() {\n    if (resourceTracker_) {\n      resourceTracker_->willDelete(castThisAsTPtr());\n    }\n  }\n\n  /**\n   * @brief initResourceTracker() sets up tracking with the tracker\n   * When the resource is destroyed, it will automatically deregister itself with the tracker\n   */\n  void initResourceTracker(std::shared_ptr<IResourceTracker> tracker,\n                           const std::string& name = \"\") {\n    if (IGL_DEBUG_VERIFY(!resourceTracker_)) {\n      resourceTracker_ = std::move(tracker);\n      resourceName_ = name;\n      if (resourceTracker_) {\n        resourceTracker_->didCreate(static_cast<T*>(this));\n      }\n    }\n  }\n\n  [[nodiscard]] virtual const std::string& getResourceName() const {\n    return resourceName_;\n  }\n\n private:\n  // ITrackedResource destructor is called after the `T` object is partially destructed\n  // and ubsan complaints about vptr mismatch on this line :\n  //  return static_cast<T*>(this);\n  // So we prevent UBSan by turning off vptr sanitizer on this function\n  //\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n#if defined(__clang__)\n  __attribute__((no_sanitize(\"vptr\")))\n#endif\n  inline T* castThisAsTPtr() {\n    return static_cast<T*>(this);\n  }\n\n  std::shared_ptr<IResourceTracker> resourceTracker_;\n  std::string resourceName_;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Log.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#define IGL_COMMON_SKIP_CHECK\n\n#include <cstdarg>\n#include <cstdio>\n#include <mutex>\n#include <string>\n#include <unordered_set>\n#include <igl/Core.h>\n\n#if IGL_PLATFORM_ANDROID\n#include <igl/android/LogDefault.h>\n#elif IGL_PLATFORM_IOS\n#include <igl/apple/LogDefault.h>\n#elif IGL_PLATFORM_WINDOWS\n#include <igl/win/LogDefault.h>\n#endif\n\n// Returns a \"handle\" (i.e. ptr to ptr) to func\nstatic IGLLogHandlerFunc* getHandle() {\n#if IGL_PLATFORM_ANDROID\n  static IGLLogHandlerFunc sHandler = IGLAndroidLogDefaultHandler;\n#elif IGL_PLATFORM_IOS\n  static IGLLogHandlerFunc sHandler = IGLAppleLogDefaultHandler;\n#elif IGL_PLATFORM_WINDOWS\n  static IGLLogHandlerFunc sHandler = IGLWinLogDefaultHandler;\n#else\n  static IGLLogHandlerFunc sHandler = IGLLogDefaultHandler;\n#endif\n  return &sHandler;\n}\n\nIGL_API int IGLLog(IGLLogLevel logLevel, const char* IGL_RESTRICT format, ...) {\n  va_list ap;\n  va_start(ap, format);\n  const int result = IGLLogV(logLevel, format, ap);\n  va_end(ap);\n  return result;\n}\n\nIGL_API int IGLLogOnce(IGLLogLevel logLevel, const char* IGL_RESTRICT format, ...) {\n  static std::mutex sLoggedMessagesMutex;\n  static std::unordered_set<std::string> sLoggedMessages;\n\n  va_list ap, apCopy;\n  va_start(ap, format);\n  va_copy(apCopy, ap); // make a copy for later passing to IGLLogV()\n\n  constexpr size_t bufferLength = 256;\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  char buffer[bufferLength]; // uninitialized\n  FOLLY_PUSH_WARNING\n  FOLLY_GNU_DISABLE_WARNING(\"-Wformat-nonliteral\")\n  int result = vsnprintf(buffer, bufferLength, format, ap);\n  FOLLY_POP_WARNING\n  va_end(ap);\n\n  const std::string msg(buffer);\n  {\n    const std::lock_guard<std::mutex> guard(sLoggedMessagesMutex);\n    if (sLoggedMessages.count(msg) == 0) {\n      result = IGLLogV(logLevel, format, apCopy);\n      sLoggedMessages.insert(msg);\n    }\n  }\n  va_end(apCopy);\n\n  return result;\n}\n\nIGL_API int IGLLogV(IGLLogLevel logLevel, const char* IGL_RESTRICT format, va_list ap) {\n  return (*getHandle())(logLevel, format, ap);\n}\n\nIGL_API int IGLLogDefaultHandler(IGLLogLevel /*logLevel*/,\n                                 const char* IGL_RESTRICT format,\n                                 va_list ap) {\n  FOLLY_PUSH_WARNING\n  FOLLY_GNU_DISABLE_WARNING(\"-Wformat-nonliteral\")\n  return vfprintf(stderr, format, ap);\n  FOLLY_POP_WARNING\n}\n\nIGL_API void IGLLogSetHandler(IGLLogHandlerFunc handler) {\n  *getHandle() = handler;\n}\n\nIGL_API IGLLogHandlerFunc IGLLogGetHandler() {\n  return *getHandle();\n}\n"
  },
  {
    "path": "src/igl/Log.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#if !defined(IGL_COMMON_H) && !defined(IGL_COMMON_SKIP_CHECK)\n#error \"Please, include <igl/Common.h> instead\"\n#endif\n\n#include <cstdarg>\n#include <igl/Macros.h>\n\nenum IGLLogLevel {\n  // Was previously LOG_ERROR.\n  IGLLogError = 1,\n\n  // Was previously LOG_WARNING.\n  IGLLogWarning,\n\n  // Was previously LOG_INFO.\n  IGLLogInfo,\n};\n\n///--------------------------------------\n/// MARK: - Logging\n\nIGL_API int IGLLog(IGLLogLevel logLevel, const char* IGL_RESTRICT format, ...);\nIGL_API int IGLLogOnce(IGLLogLevel logLevel, const char* IGL_RESTRICT format, ...);\nIGL_API int IGLLogV(IGLLogLevel logLevel, const char* IGL_RESTRICT format, va_list arguments);\n\nIGL_API int IGLLogDefaultHandler(IGLLogLevel logLevel, const char* IGL_RESTRICT format, va_list ap);\n\n///--------------------------------------\n/// MARK: - Custom log handler\n\nusing IGLLogHandlerFunc = int (*)(IGLLogLevel logLevel,\n                                  const char* IGL_RESTRICT format,\n                                  va_list ap);\nIGL_API void IGLLogSetHandler(IGLLogHandlerFunc handler);\nIGL_API IGLLogHandlerFunc IGLLogGetHandler(void);\n\n///--------------------------------------\n/// MARK: - Macros\n\n// Debug logging\n#if IGL_LOGGING_ENABLED\n#define IGL_LOG_ERROR(format, ...)                             \\\n  IGLLog(IGLLogError, \"[IGL] Error in (%s).\\n\", IGL_FUNCTION); \\\n  IGLLog(IGLLogError, (format), ##__VA_ARGS__)\n#define IGL_LOG_ERROR_ONCE(format, ...) IGLLogOnce(IGLLogError, (format), ##__VA_ARGS__)\n\n#define IGL_LOG_INFO(format, ...) IGLLog(IGLLogInfo, (format), ##__VA_ARGS__)\n#define IGL_LOG_INFO_ONCE(format, ...) IGLLogOnce(IGLLogInfo, (format), ##__VA_ARGS__)\n#define IGL_LOG_DEBUG(format, ...) IGLLog(IGLLogInfo, (format), ##__VA_ARGS__)\n#else\n#define IGL_LOG_ERROR(format, ...) static_cast<void>(0)\n#define IGL_LOG_ERROR_ONCE(format, ...) static_cast<void>(0)\n#define IGL_LOG_INFO(format, ...) static_cast<void>(0)\n#define IGL_LOG_INFO_ONCE(format, ...) static_cast<void>(0)\n#define IGL_LOG_DEBUG(format, ...) static_cast<void>(0)\n#endif\n"
  },
  {
    "path": "src/igl/Macros.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Config.h>\n\n///--------------------------------------\n/// MARK: - String Macros\n\n// Concatenation\n#define IGL_CONCAT(a, b) _IGL_CONCAT_ARGS_WRAPPER(a, b)\n#define _IGL_CONCAT_ARGS_WRAPPER(a, b) _IGL_CONCAT_ARGS(a, b)\n#define _IGL_CONCAT_ARGS(a, b) a##b\n\n#define IGL_CONCAT3(a, b, c) IGL_CONCAT(IGL_CONCAT(a, b), c)\n\n// Convert Macro to String Literal\n#define IGL_TO_STRING(a) _IGL_TO_STRING_WRAPPER(a)\n#define _IGL_TO_STRING_WRAPPER(a) #a\n\n///--------------------------------------\n/// MARK: - Macro Helpers\n\n#define _IGL_EXPAND(x) x\n#define _IGL_ECHO(...) __VA_ARGS__\n#define _IGL_CALL(macro, args) macro args\n\n// Returns the 64th argument.\n// clang-format off\n#define _IGL_ARG_64(_,\\\n   _64,_63,_62,_61,_60,_59,_58,_57,_56,_55,_54,_53,_52,_51,_50,_49, \\\n   _48,_47,_46,_45,_44,_43,_42,_41,_40,_39,_38,_37,_36,_35,_34,_33, \\\n   _32,_31,_30,_29,_28,_27,_26,_25,_24,_23,_22,_21,_20,_19,_18,_17, \\\n   _16,_15,_14,_13,_12,_11,_10,_9,_8,_7,_6,_5,_4,_3,_2,ARG,...) ARG\n// clang-format on\n\n// Returns 0 if __VA_ARGS__ has a comma, 1 otherwise\n// Does NOT handle the case when __VA_ARGS__ is empty\n// Handles up to 64 arguments\n// clang-format off\n#define _IGL_HAS_COMMA(...) _IGL_EXPAND(_IGL_ARG_64(__VA_ARGS__, \\\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \\\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ,1, \\\n    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0))\n// clang-format on\n\n///--------------------------------------\n/// MARK: - Linkage\n\n#if defined(__cplusplus)\n#define IGL_EXTERN extern \"C\"\n#define IGL_EXTERN_BEGIN extern \"C\" {\n#define IGL_EXTERN_END } // extern \"C\"\n#else\n#define IGL_EXTERN extern\n#define IGL_EXTERN_BEGIN\n#define IGL_EXTERN_END\n#endif\n\n// Visibility\n#if defined(_MSC_VER)\n#define _IGL_PUBLIC_ATTRIBUTE __declspec(dllexport)\n#elif defined(__clang__) || defined(__GNUC__)\n#define _IGL_PUBLIC_ATTRIBUTE __attribute__((visibility(\"default\")))\n#else\n#define _IGL_PUBLIC_ATTRIBUTE\n#endif\n\n#define IGL_EXPORT _IGL_PUBLIC_ATTRIBUTE\n\n// C API\n#define IGL_API IGL_EXTERN _IGL_PUBLIC_ATTRIBUTE\n\n///--------------------------------------\n/// MARK: - Restrict\n\n#if defined(__GNUC__) || defined(__clang__)\n#define IGL_RESTRICT __restrict__\n#elif defined(_MSC_VER) && (_MSC_VER >= 1900) // VS2015\n#define IGL_RESTRICT __restrict\n#else\n#define IGL_RESTRICT\n#endif\n\n///--------------------------------------\n/// MARK: - Inline\n\n#if !defined(IGL_INLINE)\n#define IGL_INLINE inline\n#endif\n\n///--------------------------------------\n/// MARK: - Function Signature\n\n#if defined(__GNUC__) || defined(__clang__)\n#define IGL_FUNCTION __PRETTY_FUNCTION__\n#elif defined(_MSC_VER)\n#define IGL_FUNCTION __FUNCSIG__\n#elif defined(__cplusplus) && (__cplusplus >= 201103L) // C++11\n#define IGL_FUNCTION __func__\n#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) // C99\n#define IGL_FUNCTION __func__\n#else\n#define IGL_FUNCTION \"<function> \" __FILE__ \"(\" IGL_MACRO_TO_STRING(__LINE__) \")\"\n#endif\n\n///--------------------------------------\n/// MARK: - Newline\n\n#if IGL_PLATFORM_WINDOWS\n#define IGL_NEWLINE \"\\r\\n\"\n#else\n#define IGL_NEWLINE \"\\n\"\n#endif\n\n///--------------------------------------\n/// MARK: - C++17 attributes (these should be inlined after all of our compilers are on c++17)\n\n#if defined(__has_cpp_attribute)\n#if __has_cpp_attribute(maybe_unused)\n#define IGL_MAYBE_UNUSED [[maybe_unused]]\n#endif\n#endif\n\n#if !defined(IGL_MAYBE_UNUSED)\n#define IGL_MAYBE_UNUSED\n#endif\n\n///--------------------------------------\n/// MARK: Visual Studio compatibility\n\n// not all control paths return a value\n#if defined(_MSC_VER) || defined(__GNUC__)\n#define IGL_UNREACHABLE_RETURN(value) \\\n  IGL_DEBUG_ASSERT_NOT_REACHED();     \\\n  return value;\n#else\n#define IGL_UNREACHABLE_RETURN(value)\n#endif // _MSC_VER\n\n///--------------------------------------\n/// MARK: Integrated profiling\n\n/// Do not use Tracy for GPU profiling if IGL_WITH_TRACY isn't defined\n#if defined(IGL_WITH_TRACY_GPU) && !defined(IGL_WITH_TRACY)\n#undef IGL_WITH_TRACY_GPU\n#endif\n\n#if defined(IGL_WITH_TRACY) && defined(__cplusplus)\n#include \"tracy/Tracy.hpp\"\n// predefined 0xRGB colors for \"heavy\" point-of-interest operations\n#define IGL_PROFILER_COLOR_WAIT 0xff0000\n#define IGL_PROFILER_COLOR_SUBMIT 0x0000ff\n#define IGL_PROFILER_COLOR_PRESENT 0x00ff00\n#define IGL_PROFILER_COLOR_CREATE 0xff6600\n#define IGL_PROFILER_COLOR_DESTROY 0xffa500\n#define IGL_PROFILER_COLOR_TRANSITION 0xffffff\n#define IGL_PROFILER_COLOR_UPDATE 0xffa500\n#define IGL_PROFILER_COLOR_DRAW 0x00ff00\n\n// GPU profiling macros\n#if defined(IGL_WITH_TRACY_GPU)\n#define IGL_PROFILER_ZONE_GPU_OGL(name) TracyGpuZone(name);\n#define IGL_PROFILER_ZONE_GPU_COLOR_OGL(name, color) TracyGpuZoneC(name, color);\n\n#define IGL_PROFILER_ZONE_GPU_VK(name, profilingContext, cmdBuffer) \\\n  TracyVkZone(profilingContext, cmdBuffer, name);\n#define IGL_PROFILER_ZONE_GPU_COLOR_VK(name, profilingContext, cmdBuffer, color) \\\n  TracyVkZoneC(profilingContext, cmdBuffer, name, color);\n\n#define IGL_PROFILER_ZONE_TRANSIENT_GPU_OGL(varname, name) \\\n  {                                                        \\\n    TracyGpuZoneTransientS(varname, name, 0, true);\n#define IGL_PROFILER_ZONE_TRANSIENT_GPU_VK(profilingContext, varname, cmdBuffer, name) \\\n  {                                                                                    \\\n    TracyVkZoneTransientS(profilingContext, varname, cmdBuffer, name, 0, true);\n#define IGL_PROFILER_ZONE_GPU_END() }\n#else // IGL_WITH_TRACY_GPU\n\n#define IGL_PROFILER_ZONE_GPU_OGL(name)\n#define IGL_PROFILER_ZONE_GPU_COLOR_OGL(name, color)\n\n#define IGL_PROFILER_ZONE_GPU_VK(name, profilingContext, cmdBuffer)\n#define IGL_PROFILER_ZONE_GPU_COLOR_VK(name, profilingContext, cmdBuffer, color)\n\n#define IGL_PROFILER_ZONE_TRANSIENT_GPU_OGL(varname, name)\n#define IGL_PROFILER_ZONE_TRANSIENT_GPU_VK(profilingContext, varname, cmdBuffer, name)\n#define IGL_PROFILER_ZONE_GPU_END()\n\n#endif // IGL_WITH_TRACY_GPU\n\n#define IGL_PROFILER_FUNCTION() ZoneScoped\n#define IGL_PROFILER_FUNCTION_COLOR(color) ZoneScopedC(color)\n#define IGL_PROFILER_ZONE(name, color) \\\n  {                                    \\\n    ZoneScopedC(color);                \\\n    ZoneName(name, strlen(name))\n#define IGL_PROFILER_ZONE_END() }\n#define IGL_PROFILER_THREAD(name) tracy::SetThreadName(name)\n#define IGL_PROFILER_FRAME(name) FrameMarkNamed(name)\n\n#else\n#define IGL_PROFILER_ZONE_GPU_OGL(name)\n#define IGL_PROFILER_ZONE_GPU_COLOR_OGL(name, color)\n\n#define IGL_PROFILER_ZONE_GPU_VK(name, profilingContext, cmdBuffer)\n#define IGL_PROFILER_ZONE_GPU_COLOR_VK(name, profilingContext, cmdBuffer, color)\n\n#define IGL_PROFILER_ZONE_TRANSIENT_GPU_OGL(varname, name)\n#define IGL_PROFILER_ZONE_TRANSIENT_GPU_VK(profilingContext, varname, cmdBuffer, name)\n#define IGL_PROFILER_ZONE_GPU_END()\n\n#define IGL_PROFILER_FUNCTION()\n#define IGL_PROFILER_FUNCTION_COLOR(color)\n#define IGL_PROFILER_ZONE(name, color) {\n#define IGL_PROFILER_ZONE_END() }\n#define IGL_PROFILER_THREAD(name)\n#define IGL_PROFILER_FRAME(name)\n#endif // IGL_WITH_TRACY\n\n#if !defined(IGL_ENUM_TO_STRING)\n#define IGL_ENUM_TO_STRING(enum, res) \\\n  case enum ::res:                    \\\n    return IGL_TO_STRING(res);\n#endif // IGL_ENUM_TO_STRING\n\n// Define this to 1 to enable shader dumping. Currently only the Vulkan Device supports it.\n// It will dump the SPIR-V code into files in the specified path below in\n// Device::createShaderModule(...)\n#define IGL_SHADER_DUMP 0\n\n// Replace IGL_SHADER_DUMP_PATH with your own path according to the platform\n// Ex. for Android your filepath should be specific to the package name:\n// \"/sdcard/Android/data/<packageName>/files/\"\n// @fb-only An example path used with the CodecAvatars app:\n// @fb-only \"/sdcard/Android/data/com.meta.ar.codecavatars/files/\"\n#define IGL_SHADER_DUMP_PATH \"/path/to/output/file/\"\n"
  },
  {
    "path": "src/igl/NameHandle.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/NameHandle.h>\n\nnamespace igl {\nnamespace {\n#if !defined(__cpp_constexpr)\nstatic const CRC_TABLE;\nuint32_t iglCrc32Fallback(const char* p) {\n  uint32_t crc = ~0u;\n  while (*p) {\n    auto v = (uint8_t)*p++;\n    crc = (crc >> 8) ^ kCrcTable[(crc & 0xFF) ^ v];\n  }\n  return ~crc;\n}\n#endif\n\nuint32_t iglCrc32Impl(const char* p) {\n#if defined(__cpp_constexpr)\n  return iglCrc32ConstExpr(p);\n#else\n  return iglCrc32Fallback(p);\n#endif\n}\n\n} // namespace\n\n#if defined(__ARM_FEATURE_CRC32)\n#include <arm_acle.h>\n\nnamespace {\ntemplate<typename T>\nbool isAligned(const void* p) {\n  return !(reinterpret_cast<uintptr_t>(p) % std::alignment_of<T>::value);\n}\n\nuint32_t iglCrc32ImplARM8(const char* s, size_t length) {\n  uint32_t crc = ~0u;\n  for (; !isAligned<uint64_t>(s) && length > 0; s++, length--) {\n    crc = __crc32b(crc, *s);\n  }\n\n  for (; length >= 8; s += 8, length -= 8) {\n    crc = __crc32d(crc, *(const uint64_t*)(s));\n  }\n\n  for (; length >= 4; s += 4, length -= 4) {\n    crc = __crc32w(crc, *(const uint32_t*)(s));\n  }\n\n  for (; length > 0; s++, length--) {\n    crc = __crc32b(crc, *s);\n  }\n\n  return ~crc;\n}\n\n#if IGL_PLATFORM_ANDROID && defined(__aarch64__)\n\n#include <asm/hwcap.h>\n#include <sys/auxv.h>\nbool detectCrc32() {\n  uint64_t hwcaps = getauxval(AT_HWCAP);\n  return hwcaps & HWCAP_CRC32 ? true : false;\n}\n#elif IGL_PLATFORM_APPLE || IGL_PLATFORM_IOS || IGL_PLATFORM_MACOSX\nbool detectCrc32() {\n  // All iphones6+ are support it\n  return true;\n}\n#else\nbool detectCrc32() {\n  return false;\n}\n#endif\n} // namespace\n\nuint32_t iglCrc32(const char* data, size_t length) {\n  static bool hwSupport = detectCrc32();\n  return hwSupport ? iglCrc32ImplARM8(data, length) : iglCrc32Impl(data);\n}\n#else\n\nuint32_t iglCrc32(const char* data, size_t /*length*/) {\n  return iglCrc32Impl(data);\n}\n\n#endif\n\n#if IGL_DEBUG_ABORT_ENABLED\nbool NameHandle::checkIsValidCrcCompare(const NameHandle& nh) const {\n  const bool res = nh.crc32_ == crc32_ && nh.name_ != name_;\n  IGL_DEBUG_ASSERT(!res,\n                   \"NameHandle CRC check fails: name1 (%s %x) name2 (%s %x)\\n\",\n                   name_.c_str(),\n                   crc32_,\n                   nh.name_.c_str(),\n                   nh.crc32_);\n\n  return res;\n}\n#endif // IGL_DEBUG_ABORT_ENABLED\n} // namespace igl\n\nsize_t std::hash<std::vector<igl::NameHandle>>::operator()(\n    const std::vector<igl::NameHandle>& key) const {\n  size_t hash = 0;\n  for (const auto& elem : key) {\n    hash ^= std::hash<uint32_t>()(elem.getCrc32());\n  }\n  return hash;\n}\n"
  },
  {
    "path": "src/igl/NameHandle.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <functional>\n#include <string>\n#include <string_view>\n#include <utility>\n#include <vector>\n#include <igl/Common.h>\n\nnamespace igl {\n// Constexpr as constexpr. In most cases all hashes from string would be generated in compile-time\n// crc32 generation is based on gcc implementation\n\n#define CRC_TABLE                                                                         \\\n  std::array<uint32_t, 256> kCrcTable = {                                                 \\\n      0,          0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, \\\n      0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, \\\n      0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, \\\n      0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, \\\n      0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, \\\n      0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, \\\n      0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, \\\n      0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, \\\n      0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, \\\n      0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, \\\n      0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, \\\n      0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, \\\n      0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, \\\n      0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, \\\n      0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, \\\n      0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, \\\n      0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, \\\n      0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, \\\n      0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, \\\n      0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, \\\n      0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, \\\n      0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, \\\n      0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, \\\n      0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, \\\n      0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, \\\n      0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, \\\n      0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, \\\n      0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, \\\n      0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, \\\n      0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, \\\n      0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, \\\n      0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, \\\n      0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, \\\n      0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, \\\n      0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, \\\n      0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, \\\n      0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D}\n\n#if defined(__cpp_constexpr)\nconstexpr CRC_TABLE;\n\n/**\n * @brief Calculates CRC32 for the incoming character array.\n * @param data null terminated character string\n * @returns CRC32 representation of data\n */\nconstexpr uint32_t iglCrc32ConstExpr(const char* p) {\n  uint32_t crc = ~0u;\n  for (; *p; ++p) {\n    uint8_t v = (uint8_t)*p;\n    crc = (crc >> 8) ^ kCrcTable[(crc & 0xFF) ^ v];\n  }\n  return ~crc;\n}\n\nconstexpr uint32_t iglCrc32ConstExpr(std::string_view sv) {\n  uint32_t crc = ~0u;\n  for (auto p : sv) {\n    uint8_t v = (uint8_t)p;\n    crc = (crc >> 8) ^ kCrcTable[(crc & 0xFF) ^ v];\n  }\n  return ~crc;\n}\n#endif\n\n/**\n * @brief Calculates CRC32 for the incoming character array.\n * @param data null terminated character string\n * @returns CRC32 representation of data\n */\nuint32_t iglCrc32(const char* data, size_t length);\n\n///--------------------------------------\n/// MARK: - NameHandle\n\n#if IGL_DEBUG_ABORT_ENABLED\n#define CHECK_VALID_CRC(a) (void)checkIsValidCrcCompare(a)\n#else\n#define CHECK_VALID_CRC(a)\n#endif\n\n/**\n * @brief Creates a mapping between a string and its equivalent CRC32 handle\n * This way when we need to check if a uniform exists or if it matches another\n * uniform, we can do an integer comparison rather than a string comparison.\n */\nclass NameHandle {\n public:\n  NameHandle() = default;\n  ~NameHandle() = default;\n\n  NameHandle(const NameHandle& other) = default;\n  NameHandle(NameHandle&& other) noexcept = default;\n\n  NameHandle(std::string name, uint32_t crc32) : crc32_(crc32), name_(std::move(name)) {}\n  NameHandle(const char* name, uint32_t crc32) : crc32_(crc32), name_(name) {}\n  NameHandle(std::string_view name, uint32_t crc32) : crc32_(crc32), name_(name) {}\n\n  /**\n   * @brief Returns a null terminated character array version of the name\n   * @returns null terminated character array\n   */\n  [[nodiscard]] const char* c_str() const {\n    return name_.c_str();\n  }\n\n  /**\n   * @brief Returns a reference to the actual name string\n   * @returns Reference to the actual name string\n   */\n  [[nodiscard]] const std::string& toString() const {\n    return name_;\n  }\n\n  /**\n   * @brief Returns crc32 handle for the name string\n   * @returns crc32 handle\n   */\n  [[nodiscard]] uint32_t getCrc32() const {\n    return crc32_;\n  }\n\n  bool operator==(const NameHandle& other) const {\n    CHECK_VALID_CRC(other);\n    return crc32_ == other.crc32_;\n  }\n\n  bool operator!=(const NameHandle& other) const {\n    return !(*this == other);\n  }\n\n  bool operator<(const NameHandle& other) const {\n    CHECK_VALID_CRC(other);\n    return (crc32_ < other.crc32_);\n  }\n\n  bool operator>=(const NameHandle& other) const {\n    return !(*this < other);\n  }\n\n  bool operator>(const NameHandle& other) const {\n    CHECK_VALID_CRC(other);\n    return (crc32_ > other.crc32_);\n  }\n\n  bool operator<=(const NameHandle& other) const {\n    return !(*this > other);\n  }\n\n  NameHandle& operator=(const NameHandle& other) {\n    if (crc32_ == other.crc32_) {\n      return *this;\n    }\n\n    crc32_ = other.crc32_;\n    name_ = other.name_;\n    return *this;\n  }\n\n  NameHandle& operator=(NameHandle&& other) noexcept = default;\n\n  operator const char*() const {\n    return name_.c_str();\n  }\n\n private:\n#if IGL_DEBUG_ABORT_ENABLED\n  [[nodiscard]] bool checkIsValidCrcCompare(const NameHandle& nh) const;\n#endif\n  uint32_t crc32_ = 0;\n  std::string name_;\n};\n\n/**\n * @brief Helper function to convert a string to a NameHandle\n * @param name String to convert\n * @return NameHandle that includes the name and its CRC32.\n */\ninline NameHandle genNameHandle(const std::string& name) {\n  return {name, iglCrc32(name.c_str(), name.length())};\n}\n} // namespace igl\n\n#if defined(__cpp_constexpr)\n/// @def IGL_DEFINE_NAMEHANDLE_CONST(name, str)\n/// @brief Declares and assigns a named igl::NameHandle variable.\n/// @param name The name of the NameHandle variable.\n/// @param str The name the handle represents (e.g., uniform name). Must be a const char*.\n#define IGL_DEFINE_NAMEHANDLE_CONST(name, str) \\\n  const igl::NameHandle name(str,              \\\n                             std::integral_constant<uint32_t, igl::iglCrc32ConstExpr(str)>::value)\n\n/// @def IGL_NAMEHANDLE(str)\n/// @brief Creates an igl::NameHandle instance.\n/// @param str The name the handle represents (e.g., uniform name). Must be a const char*.\n#define IGL_NAMEHANDLE(str) \\\n  igl::NameHandle(str, std::integral_constant<uint32_t, igl::iglCrc32ConstExpr(str)>::value)\n\n#else\n// To avoid stlib include, this function is trivial\ninline size_t iglStringlength(const char* str) {\n  size_t r = 0;\n  while (*str++) {\n    r++;\n  }\n  return r;\n}\n#define IGL_DEFINE_NAMEHANDLE_CONST(name, str) \\\n  const igl::NameHandle name(str, igl::iglCrc32(str, iglStringlength(str)))\n#define IGL_NAMEHANDLE(str) igl::NameHandle(str, igl::iglCrc32(str, iglStringlength(str)))\n#endif\n\n/// @def IGL_NAMEHANDLE_ACCESSOR(name)\n/// @brief Declares a function returning a const igl::NameHandle& instance.\n/// @param name The name of the NameHandle function to create.\n///\n/// Use IGL_NAMEHANDLE_ACCESSOR_IMPL to define the function body.\n/// Use these to avoid compiler warnings with file-scoped const NameHandle instances.\n/// TODO: Remove once C++20 can be used as NameHandle can be constexpr.\n#define IGL_NAMEHANDLE_ACCESSOR(name) const ::igl::NameHandle& name();\n\n/// @def IGL_NAMEHANDLE_ACCESSOR_IMPL(name, str)\n/// @brief Defines a function returning a const ref to a local static igl::NameHandle instance.\n/// @param name The name of the NameHandle method to create.\n/// @param str The name the handle represents (e.g., uniform name). Must be a const char*.\n///\n/// Use IGL_NAMEHANDLE_ACCESSOR to declare the function prototype.\n/// Use these to avoid compiler warnings with file-scoped const NameHandle instances.\n/// TODO: Remove once C++20 can be used as NameHandle can be constexpr.\n#define IGL_NAMEHANDLE_ACCESSOR_IMPL(name, str)    \\\n  const ::igl::NameHandle& name() {                \\\n    static IGL_DEFINE_NAMEHANDLE_CONST(name, str); \\\n    return name;                                   \\\n  }\n\nnamespace std {\n\ntemplate<>\nstruct hash<igl::NameHandle> {\n  size_t operator()(const igl::NameHandle& key) const {\n    return hash<uint32_t>()(key.getCrc32());\n  }\n};\n\ntemplate<>\nstruct hash<pair<igl::NameHandle, igl::NameHandle>> {\n  size_t operator()(const std::pair<igl::NameHandle, igl::NameHandle>& key) const {\n    return hash<uint32_t>()(key.first.getCrc32()) ^ hash<uint32_t>()(key.second.getCrc32());\n  }\n};\n\ntemplate<>\nstruct hash<vector<igl::NameHandle>> {\n  size_t operator()(const std::vector<igl::NameHandle>& key) const;\n};\n\n} // namespace std\n"
  },
  {
    "path": "src/igl/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n\nnamespace igl {\n\n/**\n * @brief PlatformDeviceType represents the platform and graphics backend that a class implementing\n * the IPlatformDevice interface supports.\n *\n */\nenum class PlatformDeviceType {\n  Unknown = 0,\n  Metal,\n  OpenGL,\n  OpenGLEgl,\n  OpenGLWgl,\n  OpenGLx,\n  OpenGLIOS,\n  OpenGLMacOS,\n  OpenGLWebGL,\n  Vulkan,\n  D3D12,\n  // @fb-only\n};\n\n/**\n * @brief IPlatformDevice is an interface for platform-specific functionality. It enables\n * type-safety and avoids unsafe downcasts by exposing a method to check the PlatformDeviceType of\n * the IPlatformDevice. Each implementation of IPlatformDevice can contain different\n * platform-specific functionality. For example, a common use-case is to expose a method to create a\n * new igl::ITexture from some platform-specific objects or data, such as a drawable surface on the\n * given platform.\n */\nclass IPlatformDevice {\n  friend class IDevice;\n\n protected:\n  IPlatformDevice() = default;\n  /**\n   * @brief Check the type of an IPlatformDevice.\n   * @returns true if the IPlatformDevice is a given PlatformDeviceType t, otherwise false.\n   */\n  [[nodiscard]] virtual bool isType(PlatformDeviceType t) const noexcept = 0;\n\n public:\n  virtual ~IPlatformDevice() = default;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/RenderCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h>\n#include <igl/CommandEncoder.h>\n#include <igl/Framebuffer.h>\n#include <igl/Uniform.h>\n\nnamespace igl {\n\nclass IDepthStencilState;\nclass IRenderPipelineState;\nclass ISamplerState;\n\nnamespace BindTarget {\nconstexpr uint8_t kVertex = 0x0001;\nconstexpr uint8_t kFragment = 0x0002;\nconstexpr uint8_t kAllGraphics = 0x0003;\nconstexpr uint8_t kTask = 0x0004;\nconstexpr uint8_t kMesh = 0x0008;\n} // namespace BindTarget\n\nclass IRenderCommandEncoder : public ICommandEncoder {\n public:\n  using ICommandEncoder::ICommandEncoder;\n\n  ~IRenderCommandEncoder() override = default;\n\n  virtual void bindViewport(const Viewport& viewport) = 0;\n  virtual void bindScissorRect(const ScissorRect& rect) = 0;\n\n  virtual void bindRenderPipelineState(\n      const std::shared_ptr<IRenderPipelineState>& pipelineState) = 0;\n  virtual void bindDepthStencilState(\n      const std::shared_ptr<IDepthStencilState>& depthStencilState) = 0;\n\n  // Binds the buffer to a shader\n  //\n  // Vulkan: `index` is the buffer binding index specified in the shader.\n  // Metal: `index` is the buffer index specified in the shader.\n  // OpenGL: `index` refers to the location of a uniform. The `index` value can be found by using\n  // igl::RenderPipelineState::getIndexByName()\n  // `bufferOffset` is the offset into the buffer where the data starts\n  // `bufferSize` is the size of the buffer to bind used for additional validation (0 means the\n  // remaining size starting from `bufferOffset`)\n  virtual void bindBuffer(uint32_t index,\n                          uint8_t target,\n                          IBuffer* buffer,\n                          size_t bufferOffset = 0,\n                          size_t bufferSize = 0) = 0;\n  virtual void bindBuffer(uint32_t index,\n                          IBuffer* buffer,\n                          size_t bufferOffset = 0,\n                          size_t bufferSize = 0) = 0;\n  // On Vulkan and OpenGL: bind a vertex buffer (as in \"a buffer with vertices\").\n  // On Metal: bind any buffer to the vertex stage. Apps should take care there are no 'index'\n  // collisions between bindVertexBuffer() and bindBuffer()\n  virtual void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset = 0) = 0;\n  virtual void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset = 0) = 0;\n  /// Creates and binds a temporary buffer to the specified buffer index.\n  virtual void bindBytes(size_t index, uint8_t target, const void* data, size_t length) = 0;\n  /// Binds push constant data to the current encoder.\n  virtual void bindPushConstants(const void* data, size_t length, size_t offset = 0) = 0;\n  virtual void bindSamplerState(size_t index, uint8_t target, ISamplerState* samplerState) = 0;\n\n  // For metal, the index parameter is the index in the texture argument table,\n  // by the \"texture\" attribute specified in the shader.\n  // For OpenGL, 'index' is the texture unit\n  virtual void bindTexture(size_t index, uint8_t target, ITexture* texture) = 0;\n  // This `bindTexture()` overload assumes `BindTarget::kFragment`\n  virtual void bindTexture(size_t index, ITexture* texture) = 0;\n\n  /// Binds an individual uniform. Exclusively for use when uniform blocks are not supported.\n  virtual void bindUniform(const UniformDesc& uniformDesc, const void* data) = 0;\n\n  virtual void bindBindGroup(BindGroupTextureHandle handle) = 0;\n  // if any uniform/storage buffers are marked as dynamic, then `dynamicOffsets` should include one\n  // element for each `isDynamic` array element\n  virtual void bindBindGroup(BindGroupBufferHandle handle,\n                             uint32_t numDynamicOffsets = 0,\n                             const uint32_t* dynamicOffsets = nullptr) = 0;\n\n  virtual void draw(size_t vertexCount,\n                    uint32_t instanceCount = 1,\n                    uint32_t firstVertex = 0,\n                    uint32_t baseInstance = 0) = 0;\n  virtual void drawIndexed(size_t indexCount,\n                           uint32_t instanceCount = 1,\n                           uint32_t firstIndex = 0,\n                           int32_t vertexOffset = 0,\n                           uint32_t baseInstance = 0) = 0;\n  virtual void drawMeshTasks(const Dimensions& threadgroupsPerGrid,\n                             const Dimensions& threadsPerTaskThreadgroup,\n                             const Dimensions& threadsPerMeshThreadgroup) = 0;\n  virtual void multiDrawIndirect(IBuffer& indirectBuffer,\n                                 size_t indirectBufferOffset = 0,\n                                 uint32_t drawCount = 1,\n                                 uint32_t stride = 0) = 0;\n  virtual void multiDrawIndexedIndirect(IBuffer& indirectBuffer,\n                                        size_t indirectBufferOffset = 0,\n                                        uint32_t drawCount = 1,\n                                        uint32_t stride = 0) = 0;\n\n  virtual void setStencilReferenceValue(uint32_t value) = 0;\n  virtual void setBlendColor(const Color& color) = 0;\n  virtual void setDepthBias(float depthBias, float slopeScale, float clamp) = 0;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/RenderPass.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <vector>\n#include <igl/Common.h> // IWYU pragma: keep\n\nnamespace igl {\n\nclass ITimestampQueries;\n\n/**\n * @brief LoadAction determines the loading time action of the various components of a\n * RenderPassDesc. This can be DontCare, Load, or Clear.\n *\n * DontCare : No specific operation required.\n * Load : Preserve previous render contents\n * Clear : Clear render contents\n */\nenum class LoadAction : uint8_t {\n  DontCare,\n  Load,\n  Clear,\n};\n\n/**\n * @brief StoreAction determines the resolution action of the various components of a\n * RenderPassDesc. This can be DontCare, Store, or MsaaResolve.\n *\n * DontCare : No specific operation required.\n * Store : Preserve render contents\n * MsaaResolve : Use MSAA to preserve render contents\n */\nenum class StoreAction : uint8_t {\n  DontCare,\n  Store,\n  MsaaResolve,\n};\n\n/**\n * @brief RenderPassDesc provides the basis for describing a render pass and provides default\n * operations for depth and stencil.\n *\n * RenderPass by default does not contain any ColorAttachmentDesc operations.\n */\nstruct RenderPassDesc {\n public:\n  /**\n   * @brief BaseAttachmentDesc sets default load action, store action, cube face , mip level, and\n   * array layer for the attachments of a RenderPassDesc\n   */\n  struct AttachmentDesc {\n    LoadAction loadAction = LoadAction::DontCare; // default load action for color\n    StoreAction storeAction = StoreAction::Store; // default store action for color\n    uint8_t face = 0; // Cube texture face\n    uint8_t mipLevel = 0; // Texture mip level\n    uint8_t layer = 0; // Texture array layer\n    Color clearColor = {0.0f, 0.0f, 0.0f, 0.0f};\n    float clearDepth = 1.0f;\n    uint32_t clearStencil = 0;\n  };\n\n  /**\n   * @brief colorAttachments properties which is empty by default.\n   */\n  std::vector<AttachmentDesc> colorAttachments;\n  /**\n   * @brief depthAttachment property which is clear to 1 and use provided MSAA by default\n   */\n  AttachmentDesc depthAttachment = {.loadAction = LoadAction::Clear,\n                                    .storeAction = StoreAction::DontCare};\n  /**\n   * @brief stencilAttachment property which is clear to 0 by default\n   */\n  AttachmentDesc stencilAttachment = {.loadAction = LoadAction::Clear,\n                                      .storeAction = StoreAction::DontCare};\n\n  /// Per-render-pass GPU timestamp query attachment.\n  /// When set, the backend measures GPU execution time for this render pass.\n  /// slotIndex is a logical timing slot allocated by GPUTimingCollector.\n  /// Metal maps it to two sampleBufferAttachments indices (slot*2, slot*2+1).\n  /// OpenGL uses it as the GL_TIME_ELAPSED query index.\n  struct TimestampQueryDesc {\n    std::shared_ptr<ITimestampQueries> queries;\n    uint32_t slotIndex = 0; ///< Logical timing slot from GPUTimingCollector\n  };\n  /// Optional per-render-pass GPU timing. Null queries pointer means disabled.\n  TimestampQueryDesc timestampQuery;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/RenderPipelineReflection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <vector>\n#include <igl/NameHandle.h>\n#include <igl/Shader.h>\n#include <igl/Texture.h>\n#include <igl/Uniform.h>\n\nnamespace igl {\n\n/**\n * @brief A structure that describes a buffer argument to a shader.\n */\nstruct BufferArgDesc {\n  /**\n   * @brief A structure that describes a member of a buffer argument.\n   */\n  struct BufferMemberDesc {\n    NameHandle name; ///< The name of the member\n    UniformType type = igl::UniformType::Invalid; ///< The type of the member\n    size_t offset = 0; ///< The offset from the beginning of the structure\n    size_t arrayLength = 1; ///< The number of elements if the member is an array\n  };\n\n  NameHandle name; ///< The name of the buffer argument\n  size_t bufferAlignment = 0; ///< The required byte alignment in memory\n  size_t bufferDataSize = 0; ///< The size of the buffer argument in bytes\n  int bufferIndex = -1; ///< The index of the buffer argument\n\n  ShaderStage shaderStage = ShaderStage::Fragment; ///< The shader stage the argument belongs to.\n  bool isUniformBlock = false; // used in the OpenGL backend only\n\n  std::vector<BufferMemberDesc> members; ///< An array of BufferMemberDesc that describes\n                                         ///< each members of a buffer argument.\n};\n\n/**\n * @brief A structure that describes the texture argument to a shader.\n */\nstruct TextureArgDesc {\n  std::string name; ///< The name of the texture argument\n  TextureType type; ///< The type of the texture argument\n  int textureIndex = -1; ///< The index in argument table\n  ShaderStage shaderStage =\n      ShaderStage::Fragment; ///< The shader stage that the texture argument belongs to.\n};\n\n/**\n * @brief A structure that describes the texture sampler argument to a shader.\n */\nstruct SamplerArgDesc {\n  std::string name; ///< The name of the sampler argument\n  int samplerIndex = -1; ///< The index in the argument table\n  ShaderStage shaderStage =\n      ShaderStage::Fragment; ///< The shader stage that the sampler argument belongs to\n};\n\n/**\n * @brief An interface that provides access to the information of different types of arguments to\n * a RenderPipelineState object. The RenderPipelineReflection object can be obtained by calling\n * renderPipelineReflection on RenderPipelineState.\n */\nclass IRenderPipelineReflection {\n public:\n  /**\n   * @brief A function that returns an array of BufferArgDesc that describe buffer arguments to\n   * the RenderPipelineState.\n   *\n   * @return An array of BufferArgDesc that describes the buffer argument.\n   */\n  [[nodiscard]] virtual const std::vector<BufferArgDesc>& allUniformBuffers() const = 0;\n  /**\n   * @brief A function that returns an array of SamplerArgDesc that describe the sampler arguments\n   * to the RenderPipelineState.\n   *\n   * @return An array of SamplerArgDesc that describes the sampler argument.\n   */\n  [[nodiscard]] virtual const std::vector<SamplerArgDesc>& allSamplers() const = 0;\n\n  /**\n   * @brief A function that returns an array of TextureArgDesc that describe the texture arguments\n   * to the RenderPipelineState.\n   *\n   * @return An array of TextureArgDesc that describes the texture argument.\n   */\n  [[nodiscard]] virtual const std::vector<TextureArgDesc>& allTextures() const = 0;\n\n  /**\n   * @brief Destroy the IRenderPipelineReflection object\n   */\n  virtual ~IRenderPipelineReflection() = default;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/RenderPipelineState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/RenderPipelineState.h>\n\nusing namespace igl;\n\n///\n/// RenderPipelineDesc\n///\nbool RenderPipelineDesc::operator!=(const RenderPipelineDesc& other) const {\n  return !(*this == other);\n}\n\nbool RenderPipelineDesc::operator==(const RenderPipelineDesc& other) const {\n  if (topology != other.topology) {\n    return false;\n  }\n\n  if (vertexInputState != other.vertexInputState) {\n    return false;\n  }\n\n  if (shaderStages != other.shaderStages) {\n    return false;\n  }\n\n  if (targetDesc != other.targetDesc) {\n    return false;\n  }\n\n  if (cullMode != other.cullMode || frontFaceWinding != other.frontFaceWinding ||\n      polygonFillMode != other.polygonFillMode) {\n    return false;\n  }\n\n  if (vertexUnitSamplerMap != other.vertexUnitSamplerMap) {\n    return false;\n  }\n  if (fragmentUnitSamplerMap != other.fragmentUnitSamplerMap) {\n    return false;\n  }\n  if (uniformBlockBindingMap != other.uniformBlockBindingMap) {\n    return false;\n  }\n\n  if (sampleCount != other.sampleCount) {\n    return false;\n  }\n\n  for (size_t i = 0; i != IGL_TEXTURE_SAMPLERS_MAX; i++) {\n    if (immutableSamplers[i] != other.immutableSamplers[i]) {\n      return false;\n    }\n  }\n\n  if (isDynamicBufferMask != other.isDynamicBufferMask) {\n    return false;\n  }\n\n  return debugName == other.debugName;\n}\n\n/// The underlying assumption for this hash is all of the shared pointers in\n/// this structure can uniquely identify the object they are pointing to.\n/// It is the responsibility of the caller of this function to make sure\n/// that is the case.\nsize_t std::hash<RenderPipelineDesc>::operator()(const RenderPipelineDesc& key) const {\n  size_t hash = std::hash<uintptr_t>()(reinterpret_cast<uintptr_t>(key.vertexInputState.get()));\n\n  hash ^= std::hash<int>()(EnumToValue(key.topology));\n  hash ^= std::hash<uintptr_t>()(reinterpret_cast<uintptr_t>(key.shaderStages.get()));\n  hash ^= std::hash<RenderPipelineDesc::TargetDesc>()(key.targetDesc);\n  hash ^= std::hash<int>()(EnumToValue(key.cullMode));\n  hash ^= std::hash<uint32_t>()(key.sampleCount);\n  hash ^= std::hash<int>()(EnumToValue(key.frontFaceWinding));\n  hash ^= std::hash<int>()(EnumToValue(key.polygonFillMode));\n  hash ^= std::hash<uint32_t>()(key.isDynamicBufferMask);\n  hash ^= std::hash<igl::NameHandle>()(key.debugName);\n\n  for (const auto& i : key.vertexUnitSamplerMap) {\n    hash ^= std::hash<size_t>()(i.first);\n    hash ^= std::hash<igl::NameHandle>()(i.second);\n  }\n  for (const auto& i : key.fragmentUnitSamplerMap) {\n    hash ^= std::hash<size_t>()(i.first);\n    hash ^= std::hash<igl::NameHandle>()(i.second);\n  }\n  for (const auto& i : key.uniformBlockBindingMap) {\n    hash ^= std::hash<size_t>()(i.first);\n    for (const auto& names : i.second) {\n      hash ^= std::hash<igl::NameHandle>()(names.first);\n      hash ^= std::hash<igl::NameHandle>()(names.second);\n    }\n  }\n  for (const auto& i : key.immutableSamplers) {\n    hash ^= std::hash<uintptr_t>()(reinterpret_cast<uintptr_t>(i.get()));\n  }\n\n  return hash;\n}\n\nsize_t std::hash<RenderPipelineDesc::TargetDesc>::operator()(\n    const RenderPipelineDesc::TargetDesc& key) const {\n  size_t hash = std::hash<int>()(EnumToValue(key.depthAttachmentFormat));\n\n  hash ^= std::hash<int>()(EnumToValue(key.stencilAttachmentFormat));\n  hash ^= std::hash<size_t>()(key.colorAttachments.size());\n\n  for (const auto& ca : key.colorAttachments) {\n    hash ^= std::hash<RenderPipelineDesc::TargetDesc::ColorAttachment>()(ca);\n  }\n\n  return hash;\n}\n\nsize_t std::hash<RenderPipelineDesc::TargetDesc::ColorAttachment>::operator()(\n    const RenderPipelineDesc::TargetDesc::ColorAttachment& key) const {\n  size_t hash = std::hash<int>()(EnumToValue(key.textureFormat));\n  hash ^= std::hash<uint8_t>()(key.colorWriteMask);\n  hash ^= std::hash<bool>()(key.blendEnabled);\n  hash ^= std::hash<int>()(EnumToValue(key.rgbBlendOp));\n  hash ^= std::hash<int>()(EnumToValue(key.alphaBlendOp));\n  hash ^= std::hash<int>()(EnumToValue(key.srcRGBBlendFactor));\n  hash ^= std::hash<int>()(EnumToValue(key.srcAlphaBlendFactor));\n  hash ^= std::hash<int>()(EnumToValue(key.dstRGBBlendFactor));\n  hash ^= std::hash<int>()(EnumToValue(key.dstAlphaBlendFactor));\n  return hash;\n}\n"
  },
  {
    "path": "src/igl/RenderPipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <unordered_map>\n#include <vector>\n#include <igl/Common.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPipelineReflection.h>\n#include <igl/Shader.h>\n#include <igl/Texture.h>\n\nnamespace igl {\n\nclass IVertexInputState;\n\n/**\n * @brief BlendOp determines how to combine and weight the source and destination fragment values.\n * Some blend operations multiply the source values by\n * a source blend factor (SBF), multiply the destination values by a destination blend factor (DBF),\n * and then combine the results using addition or subtraction. Other blend operations use either a\n * minimum or maximum function to determine the result.\n *\n * Add : Add portions of both source and destination pixel values.\n * Subtract : Subtract a portion of the destination pixel values from a portion of the source.\n * ReverseSubtract : Subtract a portion of the source values from a portion of the destination pixel\n * values.\n * Min : Minimum of the source and destination pixel values.\n * Max : Maximum of the source and\n * destination pixel values.\n */\nenum class BlendOp : uint8_t { Add = 0, Subtract, ReverseSubtract, Min, Max };\n\n/**\n * @brief The source and destination blend factors are often needed to complete specification of a\n * blend operation. In most cases, the blend factor for both RGB values (F(rgb)) and alpha values\n * (F(a)) are similar to one another, but in some cases, such as SrcAlphaSaturated, the blend factor\n * is slightly different. Four blend factors (BlendColor, OneMinusBlendColor, BlendAlpha, and\n * OneMinusBlendAlpha) refer to a constant blend color value that is set by the\n * setBlendColor(red:green:blue:alpha:) method of RenderCommandEncoder.\n *\n * Zero : Blend factor of zero.\n * One : Blend factor of one.\n * SrcColor : Blend factor of source values.\n * OneMinusSrcColor : Blend factor of one minus source values.\n * SrcAlpha : Blend factor of source alpha\n * OneMinusSrcAlpha : Blend factor of one minus source alpha.\n * DstColor : Blend factor of destination values.\n * OneMinusDstColor : Blend factor of one minus destination values.\n * DstAlpha : Blend factor of destination alpha.\n * OneMinusDstAlpha : Blend factor of one minus destination alpha.\n * SrcAlphaSaturated : Blend factor of the minimum of\n *                    either source alpha or one minus destination alpha.\n * BlendColor : Blend factor of RGB values.\n * OneMinusBlendColor : Blend factor of one minus RGB values.\n * BlendAlpha : Blend factor of alpha value.\n * OneMinusBlendAlpha : Blend factor of one minus alpha value.\n * Src1Color : Blend factor of source values. This option supports dual-source blending\n *             and reads from the second color output of the fragment function.\n * OneMinusSrc1Color : Blend factor of one minus source values. This option supports dual-source\n *                     blending and reads from the second color output of the fragment function.\n * Src1Alpha : Blend factor of source alpha. This option supports dual-source blending\n *             and reads from the second color output of the fragment function.\n * OneMinusSrc1Alpha : Blend factor of one minus source alpha. This option supports dual-source\n *                     blending and reads from the second color output of the fragment function.\n */\nenum class BlendFactor : uint8_t {\n  Zero = 0,\n  One,\n  SrcColor,\n  OneMinusSrcColor,\n  SrcAlpha,\n  OneMinusSrcAlpha,\n  DstColor,\n  OneMinusDstColor,\n  DstAlpha,\n  OneMinusDstAlpha,\n  SrcAlphaSaturated,\n  BlendColor,\n  OneMinusBlendColor,\n  BlendAlpha,\n  OneMinusBlendAlpha,\n  Src1Color,\n  OneMinusSrc1Color,\n  Src1Alpha,\n  OneMinusSrc1Alpha\n};\n\n/*\n * @brief Values used to specify a mask to permit or restrict writing to color channels of a color\n * value. The values red, green, blue, and alpha select one color channel each, and they can be\n * bitwise combined.\n */\nusing ColorWriteMask = uint8_t;\nenum ColorWriteBits : uint8_t {\n  kColorWriteBitsDisabled = 0,\n  kColorWriteBitsRed = 1 << 0,\n  kColorWriteBitsGreen = 1 << 1,\n  kColorWriteBitsBlue = 1 << 2,\n  kColorWriteBitsAlpha = 1 << 3,\n  kColorWriteBitsAll =\n      kColorWriteBitsRed | kColorWriteBitsGreen | kColorWriteBitsBlue | kColorWriteBitsAlpha,\n};\n\n/*\n * @brief Control polygon rasterization modes\n * Fill : Polygons are rendered using standard polygon rasterization rules\n * Line : Polygon edges are drawn as line segments\n */\nenum class PolygonFillMode : uint8_t {\n  Fill = 0,\n  Line = 1,\n};\n\n/*\n * @brief An argument of options you pass to a device to get a render pipeline state object.\n */\nstruct RenderPipelineDesc {\n  struct TargetDesc {\n    /*\n     * @brief Description of render pipeline's color render target\n     */\n    struct ColorAttachment {\n      TextureFormat textureFormat = TextureFormat::Invalid;\n      /*\n       * @brief Identify which color channels are blended.\n       */\n      ColorWriteMask colorWriteMask = kColorWriteBitsAll;\n      bool blendEnabled = false;\n      /*\n       * @brief Assign the blend operations for RGB and alpha pixel data.\n       */\n      BlendOp rgbBlendOp = BlendOp::Add;\n      BlendOp alphaBlendOp = BlendOp::Add;\n      /*\n       * @brief Assign the source and destination blend factors.\n       */\n      BlendFactor srcRGBBlendFactor = BlendFactor::One;\n      BlendFactor srcAlphaBlendFactor = BlendFactor::One;\n      BlendFactor dstRGBBlendFactor = BlendFactor::Zero;\n      BlendFactor dstAlphaBlendFactor = BlendFactor::Zero;\n      bool operator==(const ColorAttachment& other) const = default;\n      bool operator!=(const ColorAttachment& other) const = default;\n    };\n\n    /*\n     * @brief Array of attachments that store color data\n     */\n    std::vector<ColorAttachment> colorAttachments;\n    /*\n     * @brief Pixel format of the attachment that stores depth data\n     */\n    TextureFormat depthAttachmentFormat = TextureFormat::Invalid;\n    /*\n     * @brief Pixel format of the attachment that stores stencil data\n     */\n    TextureFormat stencilAttachmentFormat = TextureFormat::Invalid;\n    bool operator==(const TargetDesc& other) const = default;\n    bool operator!=(const TargetDesc& other) const = default;\n  };\n\n  /*\n   * @brief Describes the primitive topology for this graphics pipeline\n   */\n  PrimitiveType topology = PrimitiveType::Triangle;\n\n  /*\n   * @brief Describes the organization of per-vertex input data passed to a vertex shader function\n   */\n  std::shared_ptr<IVertexInputState> vertexInputState;\n\n  /*\n   * @brief Describes the vertex and fragment functions\n   */\n  std::shared_ptr<IShaderStages> shaderStages;\n\n  TargetDesc targetDesc;\n  CullMode cullMode = igl::CullMode::Disabled;\n  WindingMode frontFaceWinding = igl::WindingMode::CounterClockwise;\n  PolygonFillMode polygonFillMode = igl::PolygonFillMode::Fill;\n\n  /*\n   * GL Only: Mapping of Texture Unit <-> Sampler Name\n   * Texture unit should be < IGL_TEXTURE_SAMPLERS_MAX\n   */\n  std::unordered_map<size_t, NameHandle> vertexUnitSamplerMap;\n  std::unordered_map<size_t, NameHandle> fragmentUnitSamplerMap;\n\n  /*\n   * GL Only:\n   * Maps block binding points to vectors of (BlockName, blockInstanceName) pairs of all uniform\n   * blocks that should use this binding point.\n   * Uniform Block Binding Point should be < IGL_UNIFORM_BLOCKS_BINDING_MAX.\n   * This should only be populated if explicit binding is not supported or used.\n   */\n  std::unordered_map<size_t, std::vector<std::pair<NameHandle, NameHandle>>> uniformBlockBindingMap;\n\n  uint32_t sampleCount = 1u; // MSAA\n\n  // Vulkan only: specify if buffer binding locations correspond to Vulkan dynamic buffers\n  uint32_t isDynamicBufferMask = 0; // one bit per each buffer binding slot\n\n  // Vulkan only: immutable samplers per each binding slot (for example, Ycbcr conversion etc)\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  std::shared_ptr<ISamplerState> immutableSamplers[IGL_TEXTURE_SAMPLERS_MAX] = {};\n\n  NameHandle debugName;\n\n  bool operator==(const RenderPipelineDesc& other) const;\n  bool operator!=(const RenderPipelineDesc& other) const;\n};\n\nclass IRenderPipelineState {\n public:\n  explicit IRenderPipelineState(RenderPipelineDesc desc) : desc_(std::move(desc)) {}\n  virtual ~IRenderPipelineState() = default;\n\n  [[nodiscard]] virtual std::shared_ptr<IRenderPipelineReflection> renderPipelineReflection() = 0;\n  virtual void setRenderPipelineReflection(\n      const IRenderPipelineReflection& renderPipelineReflection) = 0;\n\n  [[nodiscard]] virtual int getIndexByName(const NameHandle& /* name */,\n                                           ShaderStage /* stage */) const {\n    return -1;\n  }\n\n  [[nodiscard]] virtual int getIndexByName(const std::string& /* name */,\n                                           ShaderStage /* stage */) const {\n    return -1;\n  }\n\n  [[nodiscard]] const RenderPipelineDesc& getRenderPipelineDesc() const {\n    return desc_;\n  }\n\n protected:\n  const RenderPipelineDesc desc_{};\n};\n\n} // namespace igl\n\n/// Hashing function declarations\n///\nnamespace std {\n\ntemplate<>\nstruct hash<igl::RenderPipelineDesc> {\n  size_t operator()(const igl::RenderPipelineDesc& /*key*/) const;\n};\n\ntemplate<>\nstruct hash<igl::RenderPipelineDesc::TargetDesc> {\n  size_t operator()(const igl::RenderPipelineDesc::TargetDesc& /*key*/) const;\n};\n\ntemplate<>\nstruct hash<igl::RenderPipelineDesc::TargetDesc::ColorAttachment> {\n  size_t operator()(const igl::RenderPipelineDesc::TargetDesc::ColorAttachment& /*key*/) const;\n};\n\n} // namespace std\n"
  },
  {
    "path": "src/igl/SamplerState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/SamplerState.h>\n\n#include <igl/Common.h>\n\nnamespace igl {\n\nbool SamplerStateDesc::operator==(const SamplerStateDesc& rhs) const {\n  return (minFilter == rhs.minFilter) && (magFilter == rhs.magFilter) &&\n         (mipFilter == rhs.mipFilter) && (addressModeU == rhs.addressModeU) &&\n         (addressModeV == rhs.addressModeV) && (addressModeW == rhs.addressModeW) &&\n         (depthCompareFunction == rhs.depthCompareFunction) && (mipLodMin == rhs.mipLodMin) &&\n         (mipLodMax == rhs.mipLodMax) && (maxAnisotropic == rhs.maxAnisotropic) &&\n         (depthCompareEnabled == rhs.depthCompareEnabled) && (yuvFormat == rhs.yuvFormat);\n}\n\nbool SamplerStateDesc::operator!=(const SamplerStateDesc& rhs) const {\n  return !operator==(rhs);\n}\n\n} // namespace igl\n\nsize_t std::hash<igl::SamplerStateDesc>::operator()(const igl::SamplerStateDesc& key) const {\n  IGL_DEBUG_ASSERT(key.maxAnisotropic >= 1 && key.maxAnisotropic <= 16,\n                   \"[IGL] SamplerStateDesc::maxAnisotropic is out of range: %su\",\n                   key.maxAnisotropic);\n  IGL_DEBUG_ASSERT(\n      key.mipLodMin < 16, \"[IGL] SamplerStateDesc::mipLodMin is out of range: %su\", key.mipLodMin);\n  IGL_DEBUG_ASSERT(key.mipLodMax < 16 && key.mipLodMin <= key.mipLodMax,\n                   \"[IGL] SamplerStateDesc::mipLodMax is out of range: %su\",\n                   key.mipLodMax);\n\n  // clang-format off\n  const size_t hash = igl::EnumToValue(key.minFilter) |         // 0,1: 1 bit field\n                igl::EnumToValue(key.magFilter) << 1 |    // 0,1: 1 bit field\n                igl::EnumToValue(key.mipFilter) << 2 |    // 0,1: 1 bit field\n                igl::EnumToValue(key.addressModeU) << 4 | // 0,1,2: 2 bit field\n                igl::EnumToValue(key.addressModeV) << 6 | // 0,1,2: 2 bit field\n                igl::EnumToValue(key.addressModeW) << 8 | // 0,1,2: 2 bit field\n                (key.maxAnisotropic - 1) << 10 | // subtract 1 so it fits 4 bits\n                key.mipLodMin << 14 |                     // [0, 15]: 4 bit field\n                key.mipLodMax << 18 |                     // [0, 15]: 4 bit field\n                igl::EnumToValue(key.depthCompareFunction) << 22 | // [0, 7]: 3 bit field\n                (key.depthCompareEnabled ? 1u : 0u) << 25 | // 0,1: 1 bit field\n                igl::EnumToValue(key.yuvFormat) << 26;      // 0,255: 8 bit field\n  // clang-format on\n\n  return hash;\n}\n"
  },
  {
    "path": "src/igl/SamplerState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <string>\n#include <igl/DepthStencilState.h>\n#include <igl/ITrackedResource.h>\n#include <igl/TextureFormat.h>\n\nnamespace igl {\n\n/**\n * @brief Filtering option to use when sampling textures within the same mipmap level.\n *\n * Nearest : The sampled value is the value from the texel closest to the sampling point.\n * Linear  : The sampled value is linearly interpolated from the texel values nearest to the\n *           sampling point.\n */\nenum class SamplerMinMagFilter : uint8_t { Nearest = 0, Linear };\n\n/**\n * @brief Filtering option to use when sampling textures between mipmap levels.\n *\n * Disabled: The sampled value is the selected from mipmap level 0.\n * Nearest : The sampled value is the selected from the nearest mipmap level to the filter.\n * Linear  : The sampled value is linearly interpolated from the sampled values from the nearest\n *           mipmap levels.\n */\nenum class SamplerMipFilter : uint8_t { Disabled = 0, Nearest, Linear };\n\n/**\n * @brief Filtering option to use when sampling outside the boundary of a texture\n *\n * Repeat       : The texture repeats outside the range [0, 1].\n * Clamp        : Sampling locations < 0 are clamped to 0. Sampling locations > 1 are clamped to 1.\n * MirrorRepeat : The texture repeats outside the range [0, 1]. Every other repetition is a mirror\n *                image.\n */\nenum class SamplerAddressMode : uint8_t { Repeat = 0, Clamp, MirrorRepeat };\n\n/**\n * @brief Describes the texture sampling configuration for a texture.\n *\n * This describes what sampling filters to use, what mipmap levels to sample from\n * how to sample between mipmap levels, how to handle sampling locations outside\n * the texture, and what comparison operation to use when sampling depth textures.\n *\n * The type and valid ranges for mip lod min/max were decided based on:\n * - Ability to hash a SamplerStateDesc: the current implementation\n *   relies on perfect hashing and we don't have many free bits left.\n * - Realistic use cases: negative values aren't useful (Metal says so)\n *   and big values aren't either (GL says so). In practice, a texture\n *   will only have log2(max_size) lods so a value of 16 is more than\n *   any of our platforms support.\n */\nstruct SamplerStateDesc {\n  /**\n   * @brief The filtering option to use when a texel is smaller than a fragment.\n   */\n  SamplerMinMagFilter minFilter = SamplerMinMagFilter::Nearest;\n  /**\n   * @brief The filtering option to use when a texel is larger than a fragment.\n   */\n  SamplerMinMagFilter magFilter = SamplerMinMagFilter::Nearest;\n  /**\n   * @brief The filtering option to use between mipmap levels.\n   */\n  SamplerMipFilter mipFilter = SamplerMipFilter::Disabled;\n  /**\n   * @brief The sampling address mode to use for the U texture coordinate.\n   */\n  SamplerAddressMode addressModeU = SamplerAddressMode::Repeat;\n  /**\n   * @brief The sampling address mode to use for the V texture coordinate.\n   */\n  SamplerAddressMode addressModeV = SamplerAddressMode::Repeat;\n  /**\n   * @brief The sampling address mode to use for the W texture coordinate.\n   */\n  SamplerAddressMode addressModeW = SamplerAddressMode::Repeat;\n  /**\n   * @brief The depth comparison to use when comparing samples from a depth texture.\n   */\n  CompareFunction depthCompareFunction = CompareFunction::LessEqual;\n  /**\n   * @brief The minimum mipmap level to use when sampling a texture.\n   *\n   * The valid range is [0, 15]\n   */\n  uint8_t mipLodMin = 0;\n  /**\n   * @brief The maximum mipmap level to use when sampling a texture.\n   *\n   * The valid range is [mipLodMin, 15]\n   */\n  uint8_t mipLodMax = 15;\n  /**\n   * @brief The maximum number of samples that can be taken from a texture to improve the quality of\n   * the sampled result.\n   *\n   * The valid range is [1, 16]\n   */\n  uint8_t maxAnisotropic = 1;\n  /**\n   * @brief Whether or not depth comparison is enabled.\n   *\n   * If true, the depthCompareFunction will be configured in the sampler state.\n   * If false, the depthCompareFunction will be disabled.\n   */\n  bool depthCompareEnabled = false;\n\n  /**\n   * @brief A user-readable debug name associated with this sampler.\n   *\n   */\n  std::string debugName;\n\n  TextureFormat yuvFormat = igl::TextureFormat::Invalid;\n\n  /**\n   * @brief Creates a new SamplerStateDesc instance set up for linearly interpolating within mipmap\n   * level 0.\n   *\n   * minFilter and magFilter set to SamplerMinMagFilter::Linear.\n   * mipFilter is set to SamplerMipFilter::Disabled.\n   * All other parameters have their default value.\n   */\n  static SamplerStateDesc newLinear() {\n    SamplerStateDesc desc;\n    desc.minFilter = desc.magFilter = SamplerMinMagFilter::Linear;\n    desc.mipFilter = SamplerMipFilter::Disabled;\n    desc.debugName = \"newLinear()\";\n    return desc;\n  }\n\n  /**\n   * @brief Creates a new SamplerStateDesc instance set up for linearly interpolating within and\n   * between mipmap levels.\n   *\n   * minFilter and magFilter set to SamplerMinMagFilter::Linear.\n   * mipFilter is set to SamplerMipFilter::Linear.\n   * All other parameters have their default value.\n   */\n  static SamplerStateDesc newLinearMipmapped() {\n    SamplerStateDesc desc;\n    desc.minFilter = desc.magFilter = SamplerMinMagFilter::Linear;\n    desc.mipFilter = SamplerMipFilter::Linear;\n    desc.debugName = \"newLinearMipmapped()\";\n    return desc;\n  }\n\n  /**\n   * @brief Creates a new SamplerStateDesc instance set up for YUV conversion\n   */\n  static SamplerStateDesc newYUV(TextureFormat yuvFormat, const char* debugName) {\n    SamplerStateDesc desc;\n    desc.minFilter = desc.magFilter = SamplerMinMagFilter::Linear;\n    desc.mipFilter = SamplerMipFilter::Disabled;\n    desc.addressModeU = SamplerAddressMode::Clamp;\n    desc.addressModeV = SamplerAddressMode::Clamp;\n    desc.addressModeW = SamplerAddressMode::Clamp;\n    desc.debugName = debugName;\n    desc.yuvFormat = yuvFormat;\n    return desc;\n  }\n\n  /**\n   * @brief Compares two SamplerStateDesc objects for equality.\n   *\n   * Returns true if all descriptor properties are identical.\n   */\n  bool operator==(const SamplerStateDesc& rhs) const;\n  /**\n   * @brief Compares two SamplerStateDesc objects for inequality.\n   *\n   * Returns true if any descriptor properties differ.\n   */\n  bool operator!=(const SamplerStateDesc& rhs) const;\n};\n\n/**\n * @brief A texture sampling configuration.\n *\n * This interface is the backend agnostic representation for a texture sampling configuration.\n * To create an instance, populate a SamplerStateDesc and call IDevice.createSamplerState.\n * To use an instance in a render pass for a texture, call IRenderCommandEncoder.bindSamplerState.\n */\nclass ISamplerState : public ITrackedResource<ISamplerState> {\n protected:\n  ISamplerState() = default;\n\n public:\n  ~ISamplerState() override = default;\n\n  /**\n   * @brief Returns whether this sampler state is configured for YUV color space conversion.\n   * Required for Vulkan to take proper care of immutable samplers\n   *\n   * @return true if the sampler is configured for YUV format, false otherwise.\n   */\n  [[nodiscard]] virtual bool isYUV() const noexcept = 0;\n};\n\n} // namespace igl\n\n/**\n * @brief Provides a hash function for igl::SamplerStateDesc.\n */\nnamespace std {\ntemplate<>\nstruct hash<igl::SamplerStateDesc> {\n  /**\n   * @brief Computes a hash value for igl::SamplerStateDesc.\n   *\n   * The hash value is based on all properties in the igl::SamplerStateDesc;\n   */\n  size_t operator()(const igl::SamplerStateDesc& /*key*/) const;\n};\n} // namespace std\n"
  },
  {
    "path": "src/igl/Shader.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/Shader.h>\n\n#include <cstring>\n\nnamespace {\n\nbool safeDataCompare(const void* IGL_NULLABLE a,\n                     size_t lengthA,\n                     const void* IGL_NULLABLE b,\n                     size_t lengthB) {\n  if (lengthA != lengthB) {\n    return false;\n  }\n  // Handle null pointers;\n  if (a == nullptr || b == nullptr) {\n    // If both are null, consider them equal. If only ond is null, they are not equal\n    return a == b;\n  }\n  return (memcmp(a, b, lengthA) == 0);\n}\n\nsize_t safeDataHash(const void* IGL_NULLABLE ptr, size_t length) {\n  if (ptr == nullptr) {\n    return 0;\n  }\n  size_t hash = 0;\n  for (size_t i = 0; i < length; ++i) {\n    hash ^= static_cast<const unsigned char*>(ptr)[i];\n  }\n  return hash;\n}\n\nbool safeCStrCompare(const char* IGL_NULLABLE a, const char* IGL_NULLABLE b) {\n  if (a == b) {\n    return true;\n  }\n  if (a == nullptr || b == nullptr) {\n    return false;\n  }\n  return (strcmp(a, b) == 0);\n}\n\nsize_t safeCStrHash(const char* IGL_NULLABLE s) {\n  if (s == nullptr) {\n    return 0;\n  }\n  return std::hash<std::string_view>()(std::string_view(s, strlen(s)));\n}\n\n} // namespace\n\nnamespace igl {\n\nbool ShaderCompilerOptions::operator==(const ShaderCompilerOptions& other) const {\n  return fastMathEnabled == other.fastMathEnabled;\n}\n\nbool ShaderCompilerOptions::operator!=(const ShaderCompilerOptions& other) const {\n  return !(*this == other);\n}\n\nbool ShaderModuleInfo::operator==(const ShaderModuleInfo& other) const {\n  return stage == other.stage && entryPoint == other.entryPoint;\n}\n\nbool ShaderModuleInfo::operator!=(const ShaderModuleInfo& other) const {\n  return !operator==(other);\n}\n\nbool ShaderInput::isValid() const noexcept {\n  if (type == ShaderInputType::String) {\n    return source != nullptr && data == nullptr && length == 0;\n  } else if (type == ShaderInputType::Binary) {\n    return data != nullptr && length > 0 && source == nullptr;\n  } else {\n    return false;\n  }\n}\n\nbool ShaderInput::operator==(const ShaderInput& other) const {\n  return type == other.type && options == other.options &&\n         (type == ShaderInputType::String ? safeCStrCompare(source, other.source) : true) &&\n         (type == ShaderInputType::Binary ? safeDataCompare(data, length, other.data, other.length)\n                                          : true);\n}\n\nbool ShaderInput::operator!=(const ShaderInput& other) const {\n  return !operator==(other);\n}\n\nShaderModuleDesc ShaderModuleDesc::fromStringInput(const char* IGL_NONNULL source,\n                                                   ShaderModuleInfo info,\n                                                   std::string debugName) {\n  ShaderModuleDesc desc;\n  desc.input.type = ShaderInputType::String;\n  desc.input.source = source;\n  desc.info = std::move(info);\n  desc.debugName = std::move(debugName);\n  return desc;\n}\n\nShaderModuleDesc ShaderModuleDesc::fromBinaryInput(const void* IGL_NONNULL data,\n                                                   size_t dataLength,\n                                                   ShaderModuleInfo info,\n                                                   std::string debugName) {\n  ShaderModuleDesc desc;\n  desc.input.type = ShaderInputType::Binary;\n  desc.input.data = data;\n  desc.input.length = dataLength;\n  desc.info = std::move(info);\n  desc.debugName = std::move(debugName);\n  return desc;\n}\n\nbool ShaderModuleDesc::operator==(const ShaderModuleDesc& other) const {\n  return info == other.info && input == other.input && debugName == other.debugName;\n}\n\nbool ShaderModuleDesc::operator!=(const ShaderModuleDesc& other) const {\n  return !operator==(other);\n}\n\nShaderLibraryDesc ShaderLibraryDesc::fromStringInput(const char* IGL_NONNULL librarySource,\n                                                     std::vector<ShaderModuleInfo> moduleInfo,\n                                                     std::string libraryDebugName) {\n  ShaderLibraryDesc libraryDesc;\n  libraryDesc.input.type = ShaderInputType::String;\n  libraryDesc.input.source = librarySource;\n  libraryDesc.debugName = std::move(libraryDebugName);\n\n  if (IGL_DEBUG_VERIFY(!moduleInfo.empty())) {\n    libraryDesc.moduleInfo = std::move(moduleInfo);\n  }\n\n  return libraryDesc;\n}\n\nShaderLibraryDesc ShaderLibraryDesc::fromBinaryInput(const void* IGL_NONNULL libraryData,\n                                                     size_t libraryDataLength,\n                                                     std::vector<ShaderModuleInfo> moduleInfo,\n                                                     std::string libraryDebugName) {\n  ShaderLibraryDesc libraryDesc;\n  libraryDesc.input.type = ShaderInputType::Binary;\n  libraryDesc.input.data = libraryData;\n  libraryDesc.input.length = libraryDataLength;\n  libraryDesc.debugName = std::move(libraryDebugName);\n\n  if (IGL_DEBUG_VERIFY(!moduleInfo.empty())) {\n    libraryDesc.moduleInfo = std::move(moduleInfo);\n  }\n\n  return libraryDesc;\n}\n\nbool ShaderLibraryDesc::operator==(const ShaderLibraryDesc& other) const {\n  return moduleInfo == other.moduleInfo && input == other.input && debugName == other.debugName;\n}\n\nbool ShaderLibraryDesc::operator!=(const ShaderLibraryDesc& other) const {\n  return !operator==(other);\n}\n\nIShaderModule::IShaderModule(ShaderModuleInfo info) : info_(std::move(info)) {}\n\nconst ShaderModuleInfo& IShaderModule::info() const noexcept {\n  return info_;\n}\n\nIShaderLibrary::IShaderLibrary(std::vector<std::shared_ptr<IShaderModule>> modules) :\n  modules_(std::move(modules)) {}\n\nstd::shared_ptr<IShaderModule> IShaderLibrary::getShaderModule(const std::string& entryPoint) {\n  for (const auto& sm : modules_) {\n    if (sm && sm->info().entryPoint == entryPoint) {\n      return sm;\n    }\n  }\n  return nullptr;\n}\n\nstd::shared_ptr<IShaderModule> IShaderLibrary::getShaderModule(ShaderStage stage,\n                                                               const std::string& entryPoint) {\n  for (const auto& sm : modules_) {\n    if (sm) {\n      const auto& info = sm->info();\n      if (info.stage == stage && info.entryPoint == entryPoint) {\n        return sm;\n      }\n    }\n  }\n  return nullptr;\n}\n\nShaderStagesDesc ShaderStagesDesc::fromRenderModules(\n    std::shared_ptr<IShaderModule> vertexModule,\n    std::shared_ptr<IShaderModule> fragmentModule) {\n  std::string debugName = (vertexModule ? vertexModule->info().debugName : std::string()) + \", \" +\n                          (fragmentModule ? fragmentModule->info().debugName : std::string());\n  return ShaderStagesDesc{\n      .vertexModule = std::move(vertexModule),\n      .fragmentModule = std::move(fragmentModule),\n      .type = ShaderStagesType::Render,\n      .debugName = std::move(debugName),\n  };\n}\n\nShaderStagesDesc ShaderStagesDesc::fromMeshRenderModules(\n    std::shared_ptr<IShaderModule> taskModule,\n    std::shared_ptr<IShaderModule> meshModule,\n    std::shared_ptr<IShaderModule> fragmentModule) {\n  std::string debugName = (taskModule ? taskModule->info().debugName : std::string()) + \", \" +\n                          (meshModule ? meshModule->info().debugName : std::string()) + \", \" +\n                          (fragmentModule ? fragmentModule->info().debugName : std::string());\n  return ShaderStagesDesc{\n      .fragmentModule = std::move(fragmentModule),\n      .taskModule = std::move(taskModule),\n      .meshModule = std::move(meshModule),\n      .type = ShaderStagesType::RenderMeshShader,\n      .debugName = std::move(debugName),\n  };\n}\n\nShaderStagesDesc ShaderStagesDesc::fromComputeModule(std::shared_ptr<IShaderModule> computeModule) {\n  std::string debugName = computeModule ? computeModule->info().debugName : \"igl/Shader.cpp\";\n  return ShaderStagesDesc{\n      .computeModule = std::move(computeModule),\n      .type = ShaderStagesType::Compute,\n      .debugName = std::move(debugName),\n  };\n}\n\nIShaderStages::IShaderStages(ShaderStagesDesc desc) : desc_(std::move(desc)) {}\n\nShaderStagesType IShaderStages::getType() const noexcept {\n  return desc_.type;\n}\n\nconst std::shared_ptr<IShaderModule>& IShaderStages::getVertexModule() const noexcept {\n  return desc_.vertexModule;\n}\n\nconst std::shared_ptr<IShaderModule>& IShaderStages::getFragmentModule() const noexcept {\n  return desc_.fragmentModule;\n}\n\nconst std::shared_ptr<IShaderModule>& IShaderStages::getComputeModule() const noexcept {\n  return desc_.computeModule;\n}\n\nconst std::shared_ptr<IShaderModule>& IShaderStages::getTaskModule() const noexcept {\n  return desc_.taskModule;\n}\n\nconst std::shared_ptr<IShaderModule>& IShaderStages::getMeshModule() const noexcept {\n  return desc_.meshModule;\n}\n\nbool IShaderStages::isValid() const noexcept {\n  if (desc_.type == ShaderStagesType::Render) {\n    return desc_.vertexModule && desc_.fragmentModule && !desc_.computeModule;\n  } else if (desc_.type == ShaderStagesType::Compute) {\n    return desc_.computeModule && !desc_.vertexModule && !desc_.fragmentModule;\n  } else if (desc_.type == ShaderStagesType::RenderMeshShader) {\n    return desc_.meshModule && desc_.fragmentModule && !desc_.computeModule && !desc_.vertexModule;\n  }\n\n  return false;\n}\n\n} // namespace igl\n\nnamespace std {\n// @fb-only\n\nsize_t hash<igl::ShaderCompilerOptions>::operator()(const igl::ShaderCompilerOptions& key) const {\n  const size_t result = std::hash<bool>()(key.fastMathEnabled);\n  return result;\n}\n\nsize_t hash<igl::ShaderModuleInfo>::operator()(const igl::ShaderModuleInfo& key) const {\n  static_assert(std::is_same_v<uint8_t, std::underlying_type<igl::ShaderStage>::type>);\n  size_t result = std::hash<uint8_t>()(static_cast<uint8_t>(key.stage));\n  result ^= std::hash<string>()(key.entryPoint);\n  return result;\n}\n\nsize_t hash<igl::ShaderInput>::operator()(const igl::ShaderInput& key) const {\n  static_assert(std::is_same_v<uint8_t, std::underlying_type<igl::ShaderInputType>::type>);\n  size_t result = safeCStrHash(key.source);\n  result ^= safeDataHash(key.data, key.length);\n  result ^= std::hash<uint8_t>()(EnumToValue(key.type));\n  return result;\n}\n\nsize_t hash<igl::ShaderModuleDesc>::operator()(const igl::ShaderModuleDesc& key) const {\n  static_assert(std::is_same_v<uint8_t, std::underlying_type<igl::ShaderInputType>::type>);\n  size_t result = std::hash<igl::ShaderModuleInfo>()(key.info);\n  result ^= std::hash<igl::ShaderInput>()(key.input);\n  result ^= std::hash<string>()(key.debugName);\n  return result;\n}\n\nsize_t hash<igl::ShaderLibraryDesc>::operator()(const igl::ShaderLibraryDesc& key) const {\n  static_assert(std::is_same_v<uint8_t, std::underlying_type<igl::ShaderInputType>::type>);\n  size_t result = std::hash<size_t>()(key.moduleInfo.size());\n  for (const auto& info : key.moduleInfo) {\n    result ^= std::hash<igl::ShaderModuleInfo>()(info);\n  }\n  result ^= std::hash<igl::ShaderInput>()(key.input);\n  result ^= std::hash<string>()(key.debugName);\n  return result;\n}\n\n// @fb-only\n} // namespace std\n"
  },
  {
    "path": "src/igl/Shader.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <utility>\n#include <vector>\n#include <igl/Common.h> // IWYU pragma: keep\n#include <igl/ITrackedResource.h>\n\nnamespace igl {\n\n/**\n * @brief Type of shader stage in the rendering pipeline.\n */\nenum class ShaderStage : uint8_t {\n  /** @brief Vertex shader. */\n  Vertex,\n  /** @brief Fragment shader. */\n  Fragment,\n  /** @brief Compute shader. */\n  Compute,\n  /** @brief Task shader. */\n  Task,\n  /** @brief Mesh shader. */\n  Mesh,\n};\n\n/**\n * @brief Configuration used when compiling a shader to toggle features such as fast math.\n */\nstruct ShaderCompilerOptions {\n  /** @brief Enable optimizations for floating-point arithmetic that may violate the IEEE 754\n   * standard. */\n  bool fastMathEnabled = true;\n\n  bool operator==(const ShaderCompilerOptions& other) const;\n  bool operator!=(const ShaderCompilerOptions& other) const;\n};\n\n/**\n * @brief Metadata about a shader module.\n */\nstruct ShaderModuleInfo {\n  /** @brief The module's shader stage. */\n  ShaderStage stage = ShaderStage::Fragment;\n  /** @brief The module's entry point. */\n  std::string entryPoint;\n\n  std::string debugName;\n\n  bool operator==(const ShaderModuleInfo& other) const;\n  bool operator!=(const ShaderModuleInfo& other) const;\n};\n\n/**\n * @brief A enumeration of shader input types.\n */\nenum class ShaderInputType : uint8_t {\n  /** @brief String with shader source code. */\n  String,\n  /** @brief Binary data with pre-compiled shader code. */\n  Binary\n};\n\n/**\n * @brief A union of the available shader input structs.\n */\nstruct ShaderInput {\n  /**\n   * @brief Null-terminated string containing shader source code.\n   * @remark Only used when type is ShaderInputType::String\n   */\n  const char* IGL_NULLABLE source = nullptr;\n  /**\n   * @brief Shader compiler configuration. Only used by Metal backends.\n   * @remark Only used when type is ShaderInputType::String\n   */\n  ShaderCompilerOptions options;\n  /**\n   * @brief Pointer to pre-compiled shader binary data.\n   * @remark Only used when type is ShaderInputType::Binary\n   */\n  const void* IGL_NULLABLE data = nullptr;\n  /**\n   * @brief Length in bytes of pre-compiled shader binary data.\n   * @remark Only used when type is ShaderInputType::Binary\n   */\n  size_t length = 0;\n  /**\n   * @brief The type of shader input.\n   */\n  ShaderInputType type = ShaderInputType::String;\n\n  /**\n   * @brief Returns true if the input is valud.\n   * The descriptor is valid for string input if:\n   *   * source is NOT nullptr,\n   *   * data is nullptr, and\n   *   * length is 0.\n   * The descriptor is valid for binary input if:\n   *   * data is NOT nullptr,\n   *   * length is greater than 0, and\n   *   * source is nullptr.\n   */\n  [[nodiscard]] bool isValid() const noexcept;\n\n  bool operator==(const ShaderInput& other) const;\n  bool operator!=(const ShaderInput& other) const;\n};\n\n/**\n * @brief Descriptor used to construct a shader module.\n * @see igl::Device::createShaderModule\n */\nstruct ShaderModuleDesc {\n  /** @brief Metadata about the shader module. */\n  ShaderModuleInfo info;\n  /** @brief The input to create the shader module. */\n  ShaderInput input;\n  /** @brief The module's debug name. */\n  std::string debugName;\n\n  /**\n   * @brief Constructs a ShaderModuleDesc for a shader from source code.\n   * @param source Null-terminated string containing compute shader source code.\n   * @param info Shader module metadata.\n   * @param debugName Debug name for the shader module.\n   */\n  static ShaderModuleDesc fromStringInput(const char* IGL_NONNULL source,\n                                          ShaderModuleInfo info,\n                                          std::string debugName);\n\n  /**\n   * @brief Constructs a ShaderModuleDesc for a shader from binary data.\n   * @param data Pre-compiled shader binary data.\n   * @param dataLength Length in bytes of the precompiled shader binary data.\n   * @param info Shader module metadata.\n   * @param debugName Debug name for the shader module.\n   */\n  static ShaderModuleDesc fromBinaryInput(const void* IGL_NONNULL data,\n                                          size_t dataLength,\n                                          ShaderModuleInfo info,\n                                          std::string debugName);\n\n  bool operator==(const ShaderModuleDesc& other) const;\n  bool operator!=(const ShaderModuleDesc& other) const;\n};\n\n/**\n * @brief Descriptor used to construct a shader module.\n * @see igl::Device::createShaderModule\n */\nstruct ShaderLibraryDesc {\n  /** @brief Metadata about each shader module the library provides. */\n  std::vector<ShaderModuleInfo> moduleInfo;\n  /** @brief The input to create the shader library. */\n  ShaderInput input;\n  /** @brief The library's debug name. */\n  std::string debugName;\n\n  /**\n   * @brief Constructs a ShaderLibraryDesc for a shaders from source code.\n   * @param librarySource Null-terminated string containing shader source code.\n   * @param moduleInfo Vector of metadata for shader modules in the library.\n   * @param libraryDebugName Debug name for the library.\n   */\n  static ShaderLibraryDesc fromStringInput(const char* IGL_NONNULL librarySource,\n                                           std::vector<ShaderModuleInfo> moduleInfo,\n                                           std::string libraryDebugName);\n  /**\n   * @brief Constructs a ShaderLibraryDesc for a shaders from binary data.\n   * @param libraryData Pre-compiled shader binary data.\n   * @param libraryDataLength Length in bytes of the precompiled shader binary data.\n   * @param moduleInfo Vector of metadata for shader modules in the library.\n   * @param libraryDebugName Debug name for the library.\n   */\n  static ShaderLibraryDesc fromBinaryInput(const void* IGL_NONNULL libraryData,\n                                           size_t libraryDataLength,\n                                           std::vector<ShaderModuleInfo> moduleInfo,\n                                           std::string libraryDebugName);\n\n  bool operator==(const ShaderLibraryDesc& other) const;\n  bool operator!=(const ShaderLibraryDesc& other) const;\n};\n\n/**\n * @brief Represents an individual shader, such as a vertex shader or fragment shader.\n */\nclass IShaderModule : public ITrackedResource<IShaderModule> {\n protected:\n  explicit IShaderModule(ShaderModuleInfo info);\n\n public:\n  /** @brief Returns metadata about the shader module */\n  [[nodiscard]] const ShaderModuleInfo& info() const noexcept;\n\n private:\n  const ShaderModuleInfo info_;\n};\n\n/**\n * @brief A collection of compiled shaders. An individual shader module can be retrieved from a\n * library given an entry point name.\n */\nclass IShaderLibrary : public ITrackedResource<IShaderLibrary> {\n protected:\n  explicit IShaderLibrary(std::vector<std::shared_ptr<IShaderModule>> modules);\n\n public:\n  /**\n   * @brief Retrieves a shader module from this library given an entry point name.\n   * @param entryPoint The name of the desired entry point.\n   * @return Shader module associated with the entry point. nullptr if one does not exist.\n   */\n  std::shared_ptr<IShaderModule> getShaderModule(const std::string& entryPoint);\n\n  /**\n   * @brief Retrieves a shader module from this library given an entry point name and a shader\n   * stage.\n   * @param stage The shader stage.\n   * @param entryPoint The name of the desired entry point.\n   * @return Shader module associated with the entry point and stage. nullptr if one does not exist.\n   */\n  std::shared_ptr<IShaderModule> getShaderModule(ShaderStage stage, const std::string& entryPoint);\n\n private:\n  std::vector<std::shared_ptr<IShaderModule>> modules_;\n};\n\n/**\n * @brief Type of shader stage in the rendering pipeline.\n */\nenum class ShaderStagesType : uint8_t {\n  /** @brief Render shader stages. */\n  Render,\n  /** @brief Compute shader stages. */\n  Compute,\n  /** @brief Mesh render shader stages. */\n  RenderMeshShader\n};\n\n/**\n * @brief The set of shader modules used to create a IShaderStages object.\n * @see igl::Device::createShaderStages\n */\nstruct ShaderStagesDesc {\n  /**\n   * @brief Constructs a ShaderStagesDesc for render shader stages.\n   * @param vertexModule The vertex shader module.\n   * @param fragmentModule The vertex shader module.\n   */\n  static ShaderStagesDesc fromRenderModules(std::shared_ptr<IShaderModule> vertexModule,\n                                            std::shared_ptr<IShaderModule> fragmentModule);\n\n  /**\n   * @brief Constructs a ShaderStagesDesc for mesh render shader stages.\n   * @param taskModule The task shader module.\n   * @param meshModule The mesh shader module.\n   * @param fragmentModule The vertex shader module.\n   */\n  static ShaderStagesDesc fromMeshRenderModules(std::shared_ptr<IShaderModule> taskModule,\n                                                std::shared_ptr<IShaderModule> meshModule,\n                                                std::shared_ptr<IShaderModule> fragmentModule);\n\n  /**\n   * @brief Constructs a ShaderStagesDesc for compute shader stages.\n   * @param computeModule The compute shader module.\n   */\n  static ShaderStagesDesc fromComputeModule(std::shared_ptr<IShaderModule> computeModule);\n\n  /** @brief The vertex shader module to be used in a render pipeline state. */\n  std::shared_ptr<IShaderModule> vertexModule;\n  /** @brief The fragment shader module to be used in a render pipeline state. */\n  std::shared_ptr<IShaderModule> fragmentModule;\n  /** @brief The fragment shader module to be used in a compute pipeline state. */\n  std::shared_ptr<IShaderModule> computeModule;\n  /** @brief The task shader module to be used in a mesh render pipeline state. */\n  std::shared_ptr<IShaderModule> taskModule;\n  /** @brief The mesh shader module to be used in a mesh render pipeline state. */\n  std::shared_ptr<IShaderModule> meshModule;\n  /** @brief The type of shader stages: render or compute. */\n  ShaderStagesType type = ShaderStagesType::Render;\n\n  /** @brief Identifier used for debugging */\n  std::string debugName;\n};\n\n/**\n * @brief A set of shader modules used to configure a render pipeline state.\n */\nclass IShaderStages : public ITrackedResource<IShaderStages> {\n protected:\n  explicit IShaderStages(ShaderStagesDesc desc);\n\n public:\n  /**\n   * @brief The type of shader stages: render or compute.\n   */\n  [[nodiscard]] ShaderStagesType getType() const noexcept;\n\n  /**\n   * @brief The vertex shader in this set of shader stages.\n   * @return Vertex shader module.\n   */\n  [[nodiscard]] const std::shared_ptr<IShaderModule>& getVertexModule() const noexcept;\n\n  /**\n   * @brief The fragment shader in this set of shader stages.\n   * @return Fragment shader module.\n   */\n  [[nodiscard]] const std::shared_ptr<IShaderModule>& getFragmentModule() const noexcept;\n\n  /**\n   * @brief The compute shader in this set of shader stages.\n   * @return Compute shader module.\n   */\n  [[nodiscard]] const std::shared_ptr<IShaderModule>& getComputeModule() const noexcept;\n\n  /**\n   * @brief The task shader in this set of shader stages.\n   * @return Task shader module.\n   */\n  [[nodiscard]] const std::shared_ptr<IShaderModule>& getTaskModule() const noexcept;\n\n  /**\n   * @brief The mesh shader in this set of shader stages.\n   * @return Mesh shader module.\n   */\n  [[nodiscard]] const std::shared_ptr<IShaderModule>& getMeshModule() const noexcept;\n\n  /**\n   * @brief Checks if the IShaderStages object is valid.\n   * The object is valid if it has both a vertex and fragment modules for render stages, and if it\n   * has a compute module for compute stages.\n   * @return True if valid; false otherwise.\n   */\n  [[nodiscard]] bool isValid() const noexcept;\n\n protected:\n  ShaderStagesDesc desc_;\n};\n} // namespace igl\n\n/// Hashing function declarations\n///\nnamespace std {\n\ntemplate<>\nstruct hash<igl::ShaderCompilerOptions> {\n  size_t operator()(const igl::ShaderCompilerOptions& /*key*/) const;\n};\n\ntemplate<>\nstruct hash<igl::ShaderModuleInfo> {\n  size_t operator()(const igl::ShaderModuleInfo& /*key*/) const;\n};\n\ntemplate<>\nstruct hash<igl::ShaderInput> {\n  size_t operator()(const igl::ShaderInput& /*key*/) const;\n};\n\ntemplate<>\nstruct hash<igl::ShaderModuleDesc> {\n  size_t operator()(const igl::ShaderModuleDesc& /*key*/) const;\n};\n\ntemplate<>\nstruct hash<igl::ShaderLibraryDesc> {\n  size_t operator()(const igl::ShaderLibraryDesc& /*key*/) const;\n};\n\n} // namespace std\n"
  },
  {
    "path": "src/igl/ShaderCreator.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/ShaderCreator.h>\n\n#include <igl/Device.h>\n\nnamespace igl {\nnamespace {\nstd::unique_ptr<IShaderStages> fromLibraryDesc(const IDevice& device,\n                                               const ShaderLibraryDesc& libraryDesc,\n                                               Result* IGL_NULLABLE outResult);\n} // namespace\n\nstd::shared_ptr<IShaderModule> ShaderModuleCreator::fromStringInput(const IDevice& device,\n                                                                    const char* IGL_NONNULL source,\n                                                                    ShaderModuleInfo info,\n                                                                    std::string debugName,\n                                                                    Result* IGL_NULLABLE\n                                                                        outResult) {\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  const auto desc =\n      igl::ShaderModuleDesc::fromStringInput(source, std::move(info), std::move(debugName));\n\n  auto sm = device.createShaderModule(desc, result);\n  if (result && !result->isOk()) {\n    return nullptr;\n  }\n\n  return sm;\n}\n\nstd::shared_ptr<IShaderModule> ShaderModuleCreator::fromBinaryInput(const IDevice& device,\n                                                                    const void* IGL_NONNULL data,\n                                                                    size_t dataLength,\n                                                                    ShaderModuleInfo info,\n                                                                    std::string debugName,\n                                                                    Result* IGL_NULLABLE\n                                                                        outResult) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  const auto desc = igl::ShaderModuleDesc::fromBinaryInput(\n      data, dataLength, std::move(info), std::move(debugName));\n\n  auto sm = device.createShaderModule(desc, result);\n  if (result && !result->isOk()) {\n    return nullptr;\n  }\n\n  return sm;\n}\n\nstd::unique_ptr<IShaderLibrary> ShaderLibraryCreator::fromStringInput(\n    const IDevice& device,\n    const char* IGL_NONNULL librarySource,\n    std::string vertexEntryPoint,\n    std::string fragmentEntryPoint,\n    std::string libraryDebugName,\n    Result* IGL_NULLABLE outResult) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  const auto libraryDesc = igl::ShaderLibraryDesc::fromStringInput(\n      librarySource,\n      {\n          {igl::ShaderStage::Vertex, std::move(vertexEntryPoint)},\n          {igl::ShaderStage::Fragment, std::move(fragmentEntryPoint)},\n      },\n      std::move(libraryDebugName));\n\n  auto library = device.createShaderLibrary(libraryDesc, result);\n  return (result && result->isOk()) ? std::move(library) : nullptr;\n}\n\nstd::unique_ptr<IShaderLibrary> ShaderLibraryCreator::fromBinaryInput(\n    const IDevice& device,\n    const void* IGL_NONNULL libraryData,\n    size_t libraryDataLength,\n    std::string vertexEntryPoint,\n    std::string fragmentEntryPoint,\n    std::string libraryDebugName,\n    Result* IGL_NULLABLE outResult) {\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  const auto libraryDesc = igl::ShaderLibraryDesc::fromBinaryInput(\n      libraryData,\n      libraryDataLength,\n      {\n          {igl::ShaderStage::Vertex, std::move(vertexEntryPoint)},\n          {igl::ShaderStage::Fragment, std::move(fragmentEntryPoint)},\n      },\n      std::move(libraryDebugName));\n\n  auto library = device.createShaderLibrary(libraryDesc, result);\n  return (result && result->isOk()) ? std::move(library) : nullptr;\n}\n\nstd::unique_ptr<IShaderLibrary> ShaderLibraryCreator::fromStringInput(\n    const IDevice& device,\n    const char* IGL_NONNULL librarySource,\n    std::vector<ShaderModuleInfo> moduleInfo,\n    std::string libraryDebugName,\n    Result* IGL_NULLABLE outResult) {\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  const auto libraryDesc = igl::ShaderLibraryDesc::fromStringInput(\n      librarySource, std::move(moduleInfo), std::move(libraryDebugName));\n\n  auto library = device.createShaderLibrary(libraryDesc, result);\n  return (result && result->isOk()) ? std::move(library) : nullptr;\n}\n\nstd::unique_ptr<IShaderLibrary> ShaderLibraryCreator::fromBinaryInput(\n    const IDevice& device,\n    const void* IGL_NONNULL libraryData,\n    size_t libraryDataLength,\n    std::vector<ShaderModuleInfo> moduleInfo,\n    std::string libraryDebugName,\n    Result* IGL_NULLABLE outResult) {\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  const auto libraryDesc = igl::ShaderLibraryDesc::fromBinaryInput(\n      libraryData, libraryDataLength, std::move(moduleInfo), std::move(libraryDebugName));\n\n  auto library = device.createShaderLibrary(libraryDesc, result);\n  return (result && result->isOk()) ? std::move(library) : nullptr;\n}\n\nstd::unique_ptr<IShaderStages> ShaderStagesCreator::fromModuleStringInput(\n    const IDevice& device,\n    const char* IGL_NONNULL vertexSource,\n    std::string vertexEntryPoint,\n    std::string vertexDebugName,\n    const char* IGL_NONNULL fragmentSource,\n    std::string fragmentEntryPoint,\n    std::string fragmentDebugName,\n    Result* IGL_NULLABLE outResult) {\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  std::shared_ptr<IShaderModule> vertexModule, fragmentModule;\n  vertexModule =\n      ShaderModuleCreator::fromStringInput(device,\n                                           vertexSource,\n                                           {ShaderStage::Vertex, std::move(vertexEntryPoint)},\n                                           std::move(vertexDebugName),\n                                           result);\n  if (result->isOk()) {\n    fragmentModule =\n        ShaderModuleCreator::fromStringInput(device,\n                                             fragmentSource,\n                                             {ShaderStage::Fragment, std::move(fragmentEntryPoint)},\n                                             std::move(fragmentDebugName),\n                                             result);\n  }\n\n  return (result && result->isOk())\n             ? fromRenderModules(device, std::move(vertexModule), std::move(fragmentModule), result)\n             : nullptr;\n}\n\nstd::unique_ptr<IShaderStages> ShaderStagesCreator::fromModuleBinaryInput(\n    const IDevice& device,\n    const void* IGL_NONNULL vertexData,\n    size_t vertexDataLength,\n    std::string vertexEntryPoint,\n    std::string vertexDebugName,\n    const void* IGL_NONNULL fragmentData,\n    size_t fragmentDataLength,\n    std::string fragmentEntryPoint,\n    std::string fragmentDebugName,\n    Result* IGL_NULLABLE outResult) {\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  std::shared_ptr<IShaderModule> vertexModule, fragmentModule;\n  vertexModule =\n      ShaderModuleCreator::fromBinaryInput(device,\n                                           vertexData,\n                                           vertexDataLength,\n                                           {ShaderStage::Vertex, std::move(vertexEntryPoint)},\n                                           std::move(vertexDebugName),\n                                           result);\n  if (result->isOk()) {\n    fragmentModule =\n        ShaderModuleCreator::fromBinaryInput(device,\n                                             fragmentData,\n                                             fragmentDataLength,\n                                             {ShaderStage::Fragment, std::move(fragmentEntryPoint)},\n                                             std::move(fragmentDebugName),\n                                             result);\n  }\n\n  return (result && result->isOk())\n             ? fromRenderModules(device, std::move(vertexModule), std::move(fragmentModule), result)\n             : nullptr;\n}\n\nstd::unique_ptr<IShaderStages> ShaderStagesCreator::fromLibraryStringInput(\n    const IDevice& device,\n    const char* IGL_NONNULL librarySource,\n    std::string vertexEntryPoint,\n    std::string fragmentEntryPoint,\n    std::string libraryDebugName,\n    Result* IGL_NULLABLE outResult) {\n  const auto libraryDesc =\n      ShaderLibraryDesc::fromStringInput(librarySource,\n                                         {\n                                             {ShaderStage::Vertex, std::move(vertexEntryPoint)},\n                                             {ShaderStage::Fragment, std::move(fragmentEntryPoint)},\n                                         },\n                                         std::move(libraryDebugName));\n\n  return fromLibraryDesc(device, libraryDesc, outResult);\n}\n\nstd::unique_ptr<IShaderStages> ShaderStagesCreator::fromLibraryBinaryInput(\n    const IDevice& device,\n    const void* IGL_NONNULL libraryData,\n    size_t libraryDataLength,\n    std::string vertexEntryPoint,\n    std::string fragmentEntryPoint,\n    std::string libraryDebugName,\n    Result* IGL_NULLABLE outResult) {\n  const auto libraryDesc =\n      ShaderLibraryDesc::fromBinaryInput(libraryData,\n                                         libraryDataLength,\n                                         {\n                                             {ShaderStage::Vertex, std::move(vertexEntryPoint)},\n                                             {ShaderStage::Fragment, std::move(fragmentEntryPoint)},\n                                         },\n                                         std::move(libraryDebugName));\n\n  return fromLibraryDesc(device, libraryDesc, outResult);\n}\n\nstd::unique_ptr<IShaderStages> ShaderStagesCreator::fromModuleStringInput(\n    const IDevice& device,\n    const char* IGL_NONNULL computeSource,\n    std::string computeEntryPoint,\n    std::string computeDebugName,\n    Result* IGL_NULLABLE outResult) {\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  auto computeModule =\n      ShaderModuleCreator::fromStringInput(device,\n                                           computeSource,\n                                           {ShaderStage::Compute, std::move(computeEntryPoint)},\n                                           std::move(computeDebugName),\n                                           result);\n  return (result && result->isOk()) ? fromComputeModule(device, std::move(computeModule), result)\n                                    : nullptr;\n}\n\nstd::unique_ptr<IShaderStages> ShaderStagesCreator::fromModuleBinaryInput(\n    const IDevice& device,\n    const void* IGL_NONNULL computeData,\n    size_t computeDataLength,\n    std::string computeEntryPoint,\n    std::string computeDebugName,\n    Result* IGL_NULLABLE outResult) {\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  auto computeModule =\n      ShaderModuleCreator::fromBinaryInput(device,\n                                           computeData,\n                                           computeDataLength,\n                                           {ShaderStage::Compute, std::move(computeEntryPoint)},\n                                           std::move(computeDebugName),\n                                           result);\n  return (result && result->isOk()) ? fromComputeModule(device, std::move(computeModule), result)\n                                    : nullptr;\n}\n\nstd::unique_ptr<IShaderStages> ShaderStagesCreator::fromRenderModules(\n    const IDevice& device,\n    std::shared_ptr<IShaderModule> vertexModule,\n    std::shared_ptr<IShaderModule> fragmentModule,\n    Result* IGL_NULLABLE outResult) {\n  const auto desc =\n      ShaderStagesDesc::fromRenderModules(std::move(vertexModule), std::move(fragmentModule));\n  return device.createShaderStages(desc, outResult);\n}\n\nstd::unique_ptr<IShaderStages> ShaderStagesCreator::fromComputeModule(\n    const IDevice& device,\n    std::shared_ptr<IShaderModule> computeModule,\n    Result* IGL_NULLABLE outResult) {\n  const auto desc = ShaderStagesDesc::fromComputeModule(std::move(computeModule));\n  return device.createShaderStages(desc, outResult);\n}\n\nstd::unique_ptr<IShaderStages> ShaderStagesCreator::fromMeshRenderModules(\n    const IDevice& device,\n    std::shared_ptr<IShaderModule> taskModule,\n    std::shared_ptr<IShaderModule> meshModule,\n    std::shared_ptr<IShaderModule> fragmentModule,\n    Result* IGL_NULLABLE outResult) {\n  const auto desc = ShaderStagesDesc::fromMeshRenderModules(\n      std::move(taskModule), std::move(meshModule), std::move(fragmentModule));\n  return device.createShaderStages(desc, outResult);\n}\n\nnamespace {\nstd::unique_ptr<IShaderStages> fromLibraryDesc(const IDevice& device,\n                                               const ShaderLibraryDesc& libraryDesc,\n                                               Result* IGL_NULLABLE outResult) {\n  Result localResult;\n  Result* result = outResult ? outResult : &localResult;\n  IGL_DEBUG_ASSERT(result);\n\n  if (!IGL_DEBUG_VERIFY(libraryDesc.moduleInfo.size() == 2)) {\n    Result::setResult(result,\n                      Result::Code::ArgumentInvalid,\n                      \"Library descriptor must contain 2 module info entries\");\n    return nullptr;\n  }\n\n  auto library = device.createShaderLibrary(libraryDesc, result);\n  if (result && !result->isOk()) {\n    return nullptr;\n  }\n\n  auto vertexModule = library->getShaderModule(libraryDesc.moduleInfo[0].entryPoint);\n  if (vertexModule == nullptr) {\n    Result::setResult(\n        result, Result::Code::ArgumentInvalid, \"Could not retrieve vertex module from library\");\n    return nullptr;\n  }\n  auto fragmentModule = library->getShaderModule(libraryDesc.moduleInfo[1].entryPoint);\n  if (fragmentModule == nullptr) {\n    Result::setResult(\n        result, Result::Code::ArgumentInvalid, \"Could not retrieve fragment module from library\");\n    return nullptr;\n  }\n\n  return ShaderStagesCreator::fromRenderModules(\n      device, std::move(vertexModule), std::move(fragmentModule), result);\n}\n} // namespace\n} // namespace igl\n"
  },
  {
    "path": "src/igl/ShaderCreator.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n#include <igl/Shader.h>\n\nnamespace igl {\n\nclass IDevice;\n\n/**\n * @brief Helper class simplifying the creation of IShaderModules in common scenarios.\n */\nclass ShaderModuleCreator {\n public:\n  ShaderModuleCreator() = delete;\n\n  /**\n   * @brief Constructs an IShaderModule for a shader from source code.\n   * @param device The device to construct the shader module with.\n   * @param source Null-terminated string containing shader source code.\n   * @param info Shader module metadata.\n   * @param debugName Debug name for the shader module.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::shared_ptr<IShaderModule> fromStringInput(const IDevice& device,\n                                                        const char* IGL_NONNULL source,\n                                                        ShaderModuleInfo info,\n                                                        std::string debugName,\n                                                        Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs an IShaderModule for a shader from binary data.\n   * @param device The device to construct the shader module with.\n   * @param data Pre-compiled shader binary data.\n   * @param dataLength Length in bytes of the precompiled shader binary data.\n   * @param info Shader module metadata.\n   * @param debugName Debug name for the shader module.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::shared_ptr<IShaderModule> fromBinaryInput(const IDevice& device,\n                                                        const void* IGL_NONNULL data,\n                                                        size_t dataLength,\n                                                        ShaderModuleInfo info,\n                                                        std::string debugName,\n                                                        Result* IGL_NULLABLE outResult);\n};\n\n/**\n * @brief Helper class simplifying the creation of IShaderLibrary instances in common scenarios.\n */\nclass ShaderLibraryCreator {\n public:\n  ShaderLibraryCreator() = delete;\n  /**\n   * @brief Constructs an IShaderLibrary with a vertex and fragment shader from source code.\n   * @param device The device to construct the shader library with.\n   * @param librarySource Null-terminated string containing shader source code.\n   * @param vertexEntryPoint Vertex shader entry point name.\n   * @param fragmentEntryPoint Fragment shader entry point name.\n   * @param libraryDebugName Optional debug name for the library.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderLibrary> fromStringInput(const IDevice& device,\n                                                         const char* IGL_NONNULL librarySource,\n                                                         std::string vertexEntryPoint,\n                                                         std::string fragmentEntryPoint,\n                                                         std::string libraryDebugName,\n                                                         Result* IGL_NULLABLE outResult);\n  /**\n   * @brief Constructs an IShaderLibrary with a vertex and fragment shader from binary data.\n   * @param device The device to construct the shader library with.\n   * @param libraryData Pre-compiled shader binary data.\n   * @param libraryDataLength Length in bytes of the precompiled shader binary data.\n   * @param vertexEntryPoint Vertex shader entry point name.\n   * @param fragmentEntryPoint Fragment shader entry point name.\n   * @param libraryDebugName Optional debug name for the library.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderLibrary> fromBinaryInput(const IDevice& device,\n                                                         const void* IGL_NONNULL libraryData,\n                                                         size_t libraryDataLength,\n                                                         std::string vertexEntryPoint,\n                                                         std::string fragmentEntryPoint,\n                                                         std::string libraryDebugName,\n                                                         Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs an IShaderLibrary with shaders from source code.\n   * @param device The device to construct the shader library with.\n   * @param librarySource Null-terminated string containing shader source code.\n   * @param moduleInfo Vector of metadata for shader modules in the library.\n   * @param libraryDebugName Optional debug name for the library.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderLibrary> fromStringInput(const IDevice& device,\n                                                         const char* IGL_NONNULL librarySource,\n                                                         std::vector<ShaderModuleInfo> moduleInfo,\n                                                         std::string libraryDebugName,\n                                                         Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs an IShaderLibrary with shaders from binary data.\n   * @param device The device to construct the shader library with.\n   * @param libraryData Pre-compiled shader binary data.\n   * @param libraryDataLength Length in bytes of the precompiled shader binary data.\n   * @param moduleInfo Vector of metadata for shader modules in the library.\n   * @param libraryDebugName Optional debug name for the library.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderLibrary> fromBinaryInput(const IDevice& device,\n                                                         const void* IGL_NONNULL libraryData,\n                                                         size_t libraryDataLength,\n                                                         std::vector<ShaderModuleInfo> moduleInfo,\n                                                         std::string libraryDebugName,\n                                                         Result* IGL_NULLABLE outResult);\n};\n\n/**\n * @brief Helper class simplifying the creation of IShaderStages in common scenarios.\n */\nclass ShaderStagesCreator {\n public:\n  ShaderStagesCreator() = delete;\n\n  /**\n   * @brief Constructs IShaderStages for a vertex and fragment shader from module source code.\n   * @param device The device to construct the shader stages with.\n   * @param vertexSource Null-terminated string containing vertex shader source code.\n   * @param vertexEntryPoint Vertex shader entry point name.\n   * @param vertexDebugName Debug name for vertex shader module.\n   * @param fragmentSource Null-terminated string containing fragment shader source code.\n   * @param fragmentEntryPoint Fragment shader entry point name.\n   * @param fragmentDebugName Debug name for fragment shader module.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderStages> fromModuleStringInput(const IDevice& device,\n                                                              const char* IGL_NONNULL vertexSource,\n                                                              std::string vertexEntryPoint,\n                                                              std::string vertexDebugName,\n                                                              const char* IGL_NONNULL\n                                                                  fragmentSource,\n                                                              std::string fragmentEntryPoint,\n                                                              std::string fragmentDebugName,\n                                                              Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs IShaderStages for a vertex and fragment shader from module binary code.\n   * @param device The device to construct the shader stages with.\n   * @param vertexData Pre-compiled vertex shader binary data.\n   * @param vertexDataLength Length in bytes of the precompiled vertex shader binary data.\n   * @param vertexEntryPoint Vertex shader entry point name.\n   * @param vertexDebugName Debug name for vertex shader module.\n   * @param fragmentData Pre-compiled fragment shader binary data.\n   * @param fragmentDataLength Length in bytes of the precompiled fragment shader binary data.\n   * @param fragmentEntryPoint Fragment shader entry point name.\n   * @param fragmentDebugName Debug name for fragment shader module.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderStages> fromModuleBinaryInput(const IDevice& device,\n                                                              const void* IGL_NONNULL vertexData,\n                                                              size_t vertexDataLength,\n                                                              std::string vertexEntryPoint,\n                                                              std::string vertexDebugName,\n                                                              const void* IGL_NONNULL fragmentData,\n                                                              size_t fragmentDataLength,\n                                                              std::string fragmentEntryPoint,\n                                                              std::string fragmentDebugName,\n                                                              Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs IShaderStages with a vertex and fragment shader from library source code.\n   * @param device The device to construct the shader stages with.\n   * @param librarySource Null-terminated string containing shader source code.\n   * @param vertexEntryPoint Vertex shader entry point name.\n   * @param fragmentEntryPoint Fragment shader entry point name.\n   * @param libraryDebugName Optional debug name for the library.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderStages> fromLibraryStringInput(const IDevice& device,\n                                                               const char* IGL_NONNULL\n                                                                   librarySource,\n                                                               std::string vertexEntryPoint,\n                                                               std::string fragmentEntryPoint,\n                                                               std::string libraryDebugName,\n                                                               Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs IShaderStages with a vertex and fragment shader from library binary data.\n   * @param device The device to construct the shader stages with.\n   * @param libraryData Pre-compiled shader binary data.\n   * @param libraryDataLength Length in bytes of the precompiled shader binary data.\n   * @param vertexEntryPoint Vertex shader entry point name.\n   * @param fragmentEntryPoint Fragment shader entry point name.\n   * @param libraryDebugName Optional debug name for the library.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderStages> fromLibraryBinaryInput(const IDevice& device,\n                                                               const void* IGL_NONNULL libraryData,\n                                                               size_t libraryDataLength,\n                                                               std::string vertexEntryPoint,\n                                                               std::string fragmentEntryPoint,\n                                                               std::string libraryDebugName,\n                                                               Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs IShaderStages for a compute shader from module source code.\n   * @param device The device to construct the shader stages with.\n   * @param computeSource Null-terminated string containing vcompute shader source code.\n   * @param computeEntryPoint Compute shader entry point name.\n   * @param computeDebugName Debug name for compute shader module.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderStages> fromModuleStringInput(const IDevice& device,\n                                                              const char* IGL_NONNULL computeSource,\n                                                              std::string computeEntryPoint,\n                                                              std::string computeDebugName,\n                                                              Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs IShaderStages for a compute shader from module binary code.\n   * @param device The device to construct the shader stages with.\n   * @param computeData Pre-compiled compute shader binary data.\n   * @param computeDataLength Length in bytes of the precompiled compute shader binary data.\n   * @param computeEntryPoint Compute shader entry point name.\n   * @param computeDebugName Debug name for compute shader module.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderStages> fromModuleBinaryInput(const IDevice& device,\n                                                              const void* IGL_NONNULL computeData,\n                                                              size_t computeDataLength,\n                                                              std::string computeEntryPoint,\n                                                              std::string computeDebugName,\n                                                              Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs an IShaderStages with a vertex and fragment shader.\n   * @param device The device to construct the shader stages with.\n   * @param vertexModule The vertex shader module.\n   * @param fragmentModule The vertex shader module.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderStages> fromRenderModules(\n      const IDevice& device,\n      std::shared_ptr<IShaderModule> vertexModule,\n      std::shared_ptr<IShaderModule> fragmentModule,\n      Result* IGL_NULLABLE outResult);\n\n  /**\n   * @brief Constructs IShaderStages with a compute shader.\n   * @param device The device to construct the shader stages with.\n   * @param computeModule The compute shader module.\n   * @param outResult Optional param to receive success or error information.\n   */\n  static std::unique_ptr<IShaderStages> fromComputeModule(\n      const IDevice& device,\n      std::shared_ptr<IShaderModule> computeModule,\n      Result* IGL_NULLABLE outResult);\n\n  static std::unique_ptr<IShaderStages> fromMeshRenderModules(\n      const IDevice& device,\n      std::shared_ptr<IShaderModule> taskModule,\n      std::shared_ptr<IShaderModule> meshModule,\n      std::shared_ptr<IShaderModule> fragmentModule,\n      Result* IGL_NULLABLE outResult);\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Texture.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/Texture.h>\n\n#include <cstddef>\n#include <limits>\n#include <utility>\n#include <igl/IGLSafeC.h>\n\nsize_t std::hash<igl::TextureFormat>::operator()(const igl::TextureFormat& key) const {\n  return std::hash<size_t>()(static_cast<size_t>(key));\n}\n\nnamespace igl {\n\nTextureRangeDesc TextureRangeDesc::new1D(uint32_t x,\n                                         uint32_t width,\n                                         uint32_t mipLevel,\n                                         uint32_t numMipLevels) {\n  return new3D(x, 0, 0, width, 1, 1, mipLevel, numMipLevels);\n}\n\nTextureRangeDesc TextureRangeDesc::new1DArray(uint32_t x,\n                                              uint32_t width,\n                                              uint32_t layer,\n                                              uint32_t numLayers,\n                                              uint32_t mipLevel,\n                                              uint32_t numMipLevels) {\n  return new2DArray(x, 0, width, 1, layer, numLayers, mipLevel, numMipLevels);\n}\n\nTextureRangeDesc TextureRangeDesc::new2D(uint32_t x,\n                                         uint32_t y,\n                                         uint32_t width,\n                                         uint32_t height,\n                                         uint32_t mipLevel,\n                                         uint32_t numMipLevels) {\n  return new3D(x, y, 0, width, height, 1, mipLevel, numMipLevels);\n}\n\nTextureRangeDesc TextureRangeDesc::new2DArray(uint32_t x,\n                                              uint32_t y,\n                                              uint32_t width,\n                                              uint32_t height,\n                                              uint32_t layer,\n                                              uint32_t numLayers,\n                                              uint32_t mipLevel,\n                                              uint32_t numMipLevels) {\n  auto desc = new3D(x, y, 0, width, height, 1, mipLevel, numMipLevels);\n  desc.layer = layer;\n  desc.numLayers = numLayers;\n  return desc;\n}\n\nTextureRangeDesc TextureRangeDesc::new3D(uint32_t x,\n                                         uint32_t y,\n                                         uint32_t z,\n                                         uint32_t width,\n                                         uint32_t height,\n                                         uint32_t depth,\n                                         uint32_t mipLevel,\n                                         uint32_t numMipLevels) {\n  TextureRangeDesc desc;\n  desc.x = x;\n  desc.y = y;\n  desc.z = z;\n  desc.width = width;\n  desc.height = height;\n  desc.depth = depth;\n  desc.mipLevel = mipLevel;\n  desc.numMipLevels = numMipLevels;\n  return desc;\n}\n\nTextureRangeDesc TextureRangeDesc::newCube(uint32_t x,\n                                           uint32_t y,\n                                           uint32_t width,\n                                           uint32_t height,\n                                           uint32_t mipLevel,\n                                           uint32_t numMipLevels) {\n  auto desc = new3D(x, y, 0, width, height, 1, mipLevel, numMipLevels);\n  desc.numFaces = 6;\n  return desc;\n}\n\nTextureRangeDesc TextureRangeDesc::newCubeFace(uint32_t x,\n                                               uint32_t y,\n                                               uint32_t width,\n                                               uint32_t height,\n                                               uint32_t face,\n                                               uint32_t mipLevel,\n                                               uint32_t numMipLevels) {\n  auto desc = new3D(x, y, 0, width, height, 1, mipLevel, numMipLevels);\n  desc.numFaces = 1;\n  desc.face = face;\n  return desc;\n}\n\nTextureRangeDesc TextureRangeDesc::newCubeFace(uint32_t x,\n                                               uint32_t y,\n                                               uint32_t width,\n                                               uint32_t height,\n                                               TextureCubeFace face,\n                                               uint32_t mipLevel,\n                                               uint32_t numMipLevels) {\n  return newCubeFace(x, y, width, height, static_cast<uint32_t>(face), mipLevel, numMipLevels);\n}\n\nTextureRangeDesc TextureRangeDesc::atMipLevel(uint32_t newMipLevel) const noexcept {\n  TextureRangeDesc newRange = *this;\n  newRange.numMipLevels = 1;\n  newRange.mipLevel = newMipLevel;\n  if (IGL_DEBUG_VERIFY_NOT(newMipLevel < mipLevel) || newMipLevel == mipLevel) {\n    return newRange;\n  }\n\n  const auto delta = newMipLevel - mipLevel;\n  newRange.x = x >> delta;\n  newRange.y = y >> delta;\n  newRange.z = z >> delta;\n  newRange.width = std::max(width >> delta, 1u);\n  newRange.height = std::max(height >> delta, 1u);\n  newRange.depth = std::max(depth >> delta, 1u);\n\n  newRange.numMipLevels = 1;\n\n  return newRange;\n}\n\nTextureRangeDesc TextureRangeDesc::withNumMipLevels(uint32_t newNumMipLevels) const noexcept {\n  TextureRangeDesc newRange = *this;\n  newRange.numMipLevels = newNumMipLevels;\n\n  return newRange;\n}\n\nTextureRangeDesc TextureRangeDesc::atLayer(uint32_t newLayer) const noexcept {\n  TextureRangeDesc newRange = *this;\n  newRange.layer = newLayer;\n  newRange.numLayers = 1;\n\n  return newRange;\n}\n\nTextureRangeDesc TextureRangeDesc::withNumLayers(uint32_t newNumLayers) const noexcept {\n  TextureRangeDesc newRange = *this;\n  newRange.numLayers = newNumLayers;\n\n  return newRange;\n}\n\nTextureRangeDesc TextureRangeDesc::atFace(uint32_t newFace) const noexcept {\n  TextureRangeDesc newRange = *this;\n  newRange.face = newFace;\n  newRange.numFaces = 1;\n\n  return newRange;\n}\n\nTextureRangeDesc TextureRangeDesc::atFace(TextureCubeFace newFace) const noexcept {\n  return atFace(static_cast<uint32_t>(newFace));\n}\n\nTextureRangeDesc TextureRangeDesc::withNumFaces(uint32_t newNumFaces) const noexcept {\n  TextureRangeDesc newRange = *this;\n  newRange.numFaces = newNumFaces;\n\n  return newRange;\n}\n\nResult TextureRangeDesc::validate() const noexcept {\n  if (IGL_DEBUG_VERIFY_NOT(width == 0 || height == 0 || depth == 0 || numLayers == 0 ||\n                           numMipLevels == 0 || numFaces == 0)) {\n    return Result{\n        Result::Code::ArgumentInvalid,\n        \"width, height, depth, numLayers, numMipLevels, and numFaces must be at least 1.\"};\n  }\n\n  const uint32_t maxMipLevels = TextureDesc::calcNumMipLevels(width, height, depth);\n  if (IGL_DEBUG_VERIFY_NOT(numMipLevels > maxMipLevels)) {\n    return Result{Result::Code::ArgumentInvalid,\n                  \"`numMipLevels` must not exceed max mip levels for width, height and depth.\"};\n  }\n\n  if (IGL_DEBUG_VERIFY_NOT(face > 5 || numFaces > 6)) {\n    return Result{Result::Code::ArgumentInvalid,\n                  \"`face` must be less than 6 and `numFaces` must not exceed 6.\"};\n  }\n\n  constexpr uint32_t kMax = std::numeric_limits<uint32_t>::max();\n  if (IGL_DEBUG_VERIFY_NOT(\n          static_cast<size_t>(mipLevel) > kMax || static_cast<size_t>(x) + width > kMax ||\n          static_cast<size_t>(y) + height > kMax || static_cast<size_t>(z) + depth > kMax ||\n          static_cast<size_t>(layer) + numLayers > kMax)) {\n    return Result{\n        Result::Code::ArgumentInvalid,\n        \"mipLevel, x + width, y + height, z + depth, and layer + numLayers must all not exceed \"\n        \"std::numeric_limits<uint32_t>::max().\"};\n  };\n\n  size_t product = (static_cast<size_t>(x) + width) * (static_cast<size_t>(y) + height);\n  if (product <= kMax) {\n    product *= z + depth;\n    if (product <= kMax) {\n      product *= layer + numLayers;\n      if (product <= kMax) {\n        product *= numFaces;\n      }\n    }\n  }\n  if (product > std::numeric_limits<uint32_t>::max()) {\n    return Result{Result::Code::ArgumentInvalid,\n                  \"(x + width) * (y + height) * (z + depth) * (layer + numLayers) * numFaces must \"\n                  \"not exceed std::numeric_limits<uint32_t>::max().\"};\n  };\n\n  return Result{};\n}\n\n#define PROPERTIES(fmt, cpp, bpb, bw, bh, bd, mbx, mby, mbz, flgs, planes) \\\n  case TextureFormat::fmt:                                                 \\\n    return TextureFormatProperties{IGL_TO_STRING(fmt),                     \\\n                                   TextureFormat::fmt,                     \\\n                                   cpp,                                    \\\n                                   bpb,                                    \\\n                                   bw,                                     \\\n                                   bh,                                     \\\n                                   bd,                                     \\\n                                   mbx,                                    \\\n                                   mby,                                    \\\n                                   mbz,                                    \\\n                                   planes,                                 \\\n                                   flgs};\n\n#define INVALID(fmt) PROPERTIES(fmt, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0)\n#define COLOR(fmt, cpp, bpb, flgs) PROPERTIES(fmt, cpp, bpb, 1, 1, 1, 1, 1, 1, flgs, 1)\n#define COMPRESSED(fmt, cpp, bpb, bw, bh, bd, mbx, mby, mbz, flgs) \\\n  PROPERTIES(fmt, cpp, bpb, bw, bh, bd, mbx, mby, mbz, flgs | Flags::Compressed, 1)\n#define DEPTH(fmt, cpp, bpb) PROPERTIES(fmt, cpp, bpb, 1, 1, 1, 1, 1, 1, Flags::Depth, 1)\n#define DEPTH_STENCIL(fmt, cpp, bpb) \\\n  PROPERTIES(fmt, cpp, bpb, 1, 1, 1, 1, 1, 1, Flags::Depth | Flags::Stencil, 1)\n#define STENCIL(fmt, cpp, bpb) \\\n  PROPERTIES(fmt, cpp, bpb, 1, 1, 1, 1, 1, 1, Flags::Stencil | Flags::Integer, 1)\n#define MULTIPLANAR(fmt, cpp, bpb, planes) \\\n  PROPERTIES(fmt, cpp, 0, 1, 1, 1, 1, 1, 1, Flags::Compressed, planes)\n\nTextureFormatProperties TextureFormatProperties::fromTextureFormat(TextureFormat format) {\n  switch (format) {\n    // NOLINTBEGIN(readability-identifier-naming)\n    INVALID(Invalid)\n    COLOR(A_UNorm8, 1, 1, 0)\n    COLOR(L_UNorm8, 1, 1, 0)\n    COLOR(R_UNorm8, 1, 1, 0)\n    COLOR(R_F16, 1, 2, Flags::HDR)\n    COLOR(R_UInt16, 1, 2, Flags::Integer | Flags::HDR)\n    COLOR(R_UNorm16, 1, 2, Flags::HDR)\n    COLOR(B5G5R5A1_UNorm, 4, 2, 0)\n    COLOR(B5G6R5_UNorm, 3, 2, 0)\n    COLOR(ABGR_UNorm4, 4, 2, 0)\n    COLOR(LA_UNorm8, 2, 2, 0)\n    COLOR(RG_UNorm8, 2, 2, 0)\n    COLOR(R4G2B2_UNorm_Apple, 3, 2, 0)\n    COLOR(R4G2B2_UNorm_Rev_Apple, 3, 2, 0)\n    COLOR(R5G5B5A1_UNorm, 4, 2, 0)\n    COLOR(RGBX_UNorm8, 3, 4, 0)\n    COLOR(RGBA_UNorm8, 4, 4, 0)\n    COLOR(BGRA_UNorm8, 4, 4, 0)\n    COLOR(BGRA_UNorm8_Rev, 4, 4, 0)\n    COLOR(RGBA_SRGB, 4, 4, Flags::sRGB)\n    COLOR(BGRA_SRGB, 4, 4, Flags::sRGB)\n    COLOR(RG_F16, 2, 4, Flags::HDR)\n    COLOR(RG_UInt16, 2, 4, Flags::Integer | Flags::HDR)\n    COLOR(RG_UNorm16, 2, 4, Flags::HDR)\n    COLOR(RGB10_A2_UNorm_Rev, 4, 4, Flags::HDR)\n    COLOR(RGB10_A2_Uint_Rev, 4, 4, Flags::Integer | Flags::HDR)\n    COLOR(BGR10_A2_Unorm, 4, 4, Flags::HDR)\n    COLOR(R_F32, 1, 4, Flags::HDR)\n    COLOR(R_UInt32, 1, 4, Flags::Integer | Flags::HDR)\n    COLOR(RGB_F16, 3, 6, Flags::HDR)\n    COLOR(RGBA_UNorm16, 4, 8, Flags::HDR)\n    COLOR(RGBA_F16, 4, 8, Flags::HDR)\n    COLOR(RG_F32, 2, 8, Flags::HDR)\n    COLOR(RGB_F32, 3, 12, Flags::HDR)\n    COLOR(RGBA_UInt32, 4, 16, Flags::Integer | Flags::HDR)\n    COLOR(RGBA_F32, 4, 16, Flags::HDR)\n    COMPRESSED(RGBA_ASTC_4x4, 4, 16, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_4x4, 4, 16, 4, 4, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_5x4, 4, 16, 5, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_5x4, 4, 16, 5, 4, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_5x5, 4, 16, 5, 5, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_5x5, 4, 16, 5, 5, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_6x5, 4, 16, 6, 5, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_6x5, 4, 16, 6, 5, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_6x6, 4, 16, 6, 6, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_6x6, 4, 16, 6, 6, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_8x5, 4, 16, 8, 5, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_8x5, 4, 16, 8, 5, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_8x6, 4, 16, 8, 6, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_8x6, 4, 16, 8, 6, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_8x8, 4, 16, 8, 8, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_8x8, 4, 16, 8, 8, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_10x5, 4, 16, 10, 5, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_10x5, 4, 16, 10, 5, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_10x6, 4, 16, 10, 6, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_10x6, 4, 16, 10, 6, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_10x8, 4, 16, 10, 8, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_10x8, 4, 16, 10, 8, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_10x10, 4, 16, 10, 10, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_10x10, 4, 16, 10, 10, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_12x10, 4, 16, 12, 10, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_12x10, 4, 16, 12, 10, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_ASTC_12x12, 4, 16, 12, 12, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_ASTC_12x12, 4, 16, 12, 12, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA_PVRTC_2BPPV1, 4, 8, 8, 4, 1, 2, 2, 1, 0)\n    COMPRESSED(RGB_PVRTC_2BPPV1, 3, 8, 8, 4, 1, 2, 2, 1, 0)\n    COMPRESSED(RGBA_PVRTC_4BPPV1, 4, 8, 4, 4, 1, 2, 2, 1, 0)\n    COMPRESSED(RGB_PVRTC_4BPPV1, 3, 8, 4, 4, 1, 2, 2, 1, 0)\n    COMPRESSED(RGB8_ETC1, 3, 8, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(RGB8_ETC2, 3, 8, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_ETC2, 3, 8, 4, 4, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGB8_Punchthrough_A1_ETC2, 3, 8, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_Punchthrough_A1_ETC2, 3, 8, 4, 4, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RGBA8_EAC_ETC2, 4, 16, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(SRGB8_A8_EAC_ETC2, 4, 16, 4, 4, 1, 1, 1, 1, Flags::sRGB)\n    COMPRESSED(RG_EAC_UNorm, 2, 16, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(RG_EAC_SNorm, 2, 16, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(R_EAC_UNorm, 1, 8, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(R_EAC_SNorm, 1, 8, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(RGBA_BC7_UNORM_4x4, 4, 16, 4, 4, 1, 1, 1, 1, 0)\n    COMPRESSED(RGBA_BC7_SRGB_4x4, 4, 16, 4, 4, 1, 1, 1, 1, Flags::sRGB)\n    // @fb-only\n    // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n    // @fb-only\n    // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n               // @fb-only\n    // @fb-only\n    DEPTH(Z_UNorm16, 1, 2)\n    DEPTH(Z_UNorm24, 1, 3)\n    DEPTH(Z_UNorm32, 1, 4)\n    DEPTH_STENCIL(S8_UInt_Z24_UNorm, 2, 4)\n#if IGL_PLATFORM_IOS\n    DEPTH_STENCIL(S8_UInt_Z32_UNorm, 2, 5)\n#else\n    DEPTH_STENCIL(S8_UInt_Z32_UNorm, 2, 8)\n#endif\n    STENCIL(S_UInt8, 1, 1)\n    MULTIPLANAR(YUV_NV12, 3, 16, 2)\n    MULTIPLANAR(YUV_420p, 3, 16, 3)\n    // NOLINTEND(readability-identifier-naming)\n  }\n  IGL_UNREACHABLE_RETURN(TextureFormatProperties{})\n}\n\nuint32_t TextureFormatProperties::getRows(TextureRangeDesc range) const noexcept {\n  if (range.numMipLevels == 1) {\n    const uint32_t texHeight = std::max(range.height, 1u);\n    uint32_t rows = texHeight;\n    if (isCompressed() && !isVariableLength()) {\n      rows =\n          std::max((texHeight + blockHeight - 1) / blockHeight, static_cast<uint32_t>(minBlocksY));\n    }\n    return rows * range.depth * range.numFaces * range.numLayers;\n  } else {\n    uint32_t rows = 0;\n    for (uint32_t mipLevel = range.mipLevel; mipLevel < range.mipLevel + range.numMipLevels;\n         ++mipLevel) {\n      rows += getRows(range.atMipLevel(mipLevel));\n    }\n    return rows;\n  }\n}\n\nuint32_t TextureFormatProperties::getBytesPerRow(uint32_t texWidth) const noexcept {\n  return getBytesPerRow(TextureRangeDesc::new1D(0, texWidth));\n}\n\nuint32_t TextureFormatProperties::getBytesPerRow(TextureRangeDesc range) const noexcept {\n  const uint32_t texWidth = std::max(range.width, 1u);\n  // For variable length formats, bytesPerRow is always 0 and the caller will handle it as needed.\n  if (isVariableLength()) {\n    return 0;\n  }\n  if (isCompressed()) {\n    const uint32_t widthInBlocks =\n        std::max((texWidth + blockWidth - 1) / blockWidth, static_cast<uint32_t>(minBlocksX));\n    return widthInBlocks * bytesPerBlock;\n  } else {\n    return texWidth * bytesPerBlock;\n  }\n}\n\nsize_t TextureFormatProperties::getBytesPerLayer(uint32_t texWidth,\n                                                 uint32_t texHeight,\n                                                 uint32_t texDepth,\n                                                 uint32_t bytesPerRow) const noexcept {\n  return getBytesPerLayer(TextureRangeDesc::new3D(0, 0, 0, texWidth, texHeight, texDepth),\n                          bytesPerRow);\n}\n\nsize_t TextureFormatProperties::getBytesPerLayer(TextureRangeDesc range,\n                                                 uint32_t bytesPerRow) const noexcept {\n  const uint32_t texWidth = std::max(range.width, 1u);\n  const uint32_t texHeight = std::max(range.height, 1u);\n  const uint32_t texDepth = std::max(range.depth, 1u);\n  const size_t texFaces = std::max(range.numFaces, 1u);\n  // For variable length formats, bytesPerRow is always 0 and the caller will handle it as needed.\n  if (isVariableLength()) {\n    return 0;\n  }\n  if (isCompressed()) {\n    const uint32_t widthInBlocks =\n        std::max((texWidth + blockWidth - 1) / blockWidth, static_cast<uint32_t>(minBlocksX));\n    const uint32_t heightInBlocks =\n        std::max((texHeight + blockHeight - 1) / blockHeight, static_cast<uint32_t>(minBlocksY));\n    const uint32_t depthInBlocks =\n        std::max((texDepth + blockDepth - 1) / blockDepth, static_cast<uint32_t>(minBlocksZ));\n    const uint32_t widthBytes = std::max(bytesPerRow, widthInBlocks * bytesPerBlock);\n    return texFaces * widthBytes * heightInBlocks * depthInBlocks;\n  } else {\n    const uint32_t widthBytes = std::max(bytesPerRow, texWidth * bytesPerBlock);\n    return texFaces * widthBytes * texHeight * texDepth;\n  }\n}\n\nsize_t TextureFormatProperties::getBytesPerRange(TextureRangeDesc range,\n                                                 uint32_t bytesPerRow) const noexcept {\n  IGL_DEBUG_ASSERT(range.x % blockWidth == 0);\n  IGL_DEBUG_ASSERT(range.y % blockHeight == 0);\n  IGL_DEBUG_ASSERT(range.z % blockDepth == 0);\n  IGL_DEBUG_ASSERT(bytesPerRow == 0 || bytesPerRow == getBytesPerRow(range) ||\n                   range.numMipLevels == 1);\n\n  size_t bytes = 0;\n  for (size_t i = 0; i < range.numMipLevels; ++i) {\n    bytes += getBytesPerLayer(range.atMipLevel(range.mipLevel + i), bytesPerRow) * range.numLayers;\n  }\n\n  return bytes;\n}\n\nuint32_t TextureFormatProperties::getNumMipLevels(uint32_t width,\n                                                  uint32_t height,\n                                                  size_t totalBytes) const noexcept {\n  const auto range = TextureRangeDesc::new2D(0, 0, width, height);\n\n  size_t numMipLevels = 0;\n  while (totalBytes) {\n    const auto mipLevelBytes = getBytesPerRange(range.atMipLevel(numMipLevels));\n    if (mipLevelBytes > totalBytes) {\n      break;\n    }\n    totalBytes -= mipLevelBytes;\n    ++numMipLevels;\n  }\n  return numMipLevels;\n}\n\nsize_t TextureFormatProperties::getSubRangeByteOffset(const TextureRangeDesc& range,\n                                                      const TextureRangeDesc& subRange,\n                                                      uint32_t bytesPerRow) const noexcept {\n  // Ensure subRange's layer, face and mipLevel range is a subset of range's.\n  IGL_DEBUG_ASSERT(subRange.layer >= range.layer &&\n                   (subRange.layer + subRange.numLayers) <= (range.layer + range.numLayers));\n  IGL_DEBUG_ASSERT(subRange.face >= range.face &&\n                   (subRange.face + subRange.numFaces) <= (range.face + range.numFaces));\n  IGL_DEBUG_ASSERT(subRange.mipLevel >= range.mipLevel &&\n                   (subRange.mipLevel + subRange.numMipLevels) <=\n                       (range.mipLevel + range.numMipLevels));\n\n  // Ensure subRange's dimensions are equal to the full dimensions of range's at subRange's first\n  // mip level.\n  IGL_DEBUG_ASSERT(subRange.x == range.atMipLevel(subRange.mipLevel).x &&\n                   subRange.width == range.atMipLevel(subRange.mipLevel).width);\n  IGL_DEBUG_ASSERT(subRange.y == range.atMipLevel(subRange.mipLevel).y &&\n                   subRange.height == range.atMipLevel(subRange.mipLevel).height);\n  IGL_DEBUG_ASSERT(subRange.z == range.atMipLevel(subRange.mipLevel).z &&\n                   subRange.depth == range.atMipLevel(subRange.mipLevel).depth);\n\n  // Ensure bytes per row is either 0 OR subrange covers only the base mip level of range.\n  IGL_DEBUG_ASSERT(bytesPerRow == 0 ||\n                   (subRange.mipLevel == range.mipLevel && subRange.numMipLevels == 1) ||\n                   bytesPerRow == getBytesPerRow(subRange));\n\n  size_t offset = 0;\n  auto workingRange = range;\n  if (subRange.mipLevel > workingRange.mipLevel) {\n    offset += getBytesPerRange(\n        workingRange.withNumMipLevels(subRange.mipLevel - workingRange.mipLevel), bytesPerRow);\n  }\n  workingRange = workingRange.atMipLevel(subRange.mipLevel);\n  if (subRange.layer > workingRange.layer) {\n    offset += getBytesPerRange(workingRange.withNumLayers(subRange.layer - workingRange.layer),\n                               bytesPerRow);\n  }\n  workingRange = workingRange.atLayer(subRange.layer);\n  if (subRange.face > workingRange.face) {\n    offset +=\n        getBytesPerRange(workingRange.withNumFaces(subRange.face - workingRange.face), bytesPerRow);\n  }\n\n  return offset;\n}\n\nTextureRangeDesc TextureDesc::asRange() const noexcept {\n  TextureRangeDesc range;\n  range.width = width;\n  range.height = height;\n  range.depth = depth;\n  range.numFaces = type == igl::TextureType::Cube ? 6u : 1u;\n  range.numLayers = numLayers;\n  range.numMipLevels = numMipLevels;\n\n  return range;\n}\n\nbool TextureDesc::operator==(const TextureDesc& rhs) const {\n  return (type == rhs.type) && (format == rhs.format) && (width == rhs.width) &&\n         (height == rhs.height) && (depth == rhs.depth) && (numLayers == rhs.numLayers) &&\n         (numSamples == rhs.numSamples) && (usage == rhs.usage) &&\n         (numMipLevels == rhs.numMipLevels) && (storage == rhs.storage) &&\n         (debugName == rhs.debugName);\n}\n\nbool TextureDesc::operator!=(const TextureDesc& rhs) const {\n  return !operator==(rhs);\n}\n\nfloat ITexture::getAspectRatio() const {\n  const auto dimensions = getDimensions();\n  return static_cast<float>(dimensions.width) / static_cast<float>(dimensions.height);\n}\n\nSize ITexture::getSize() const {\n  const auto dimensions = getDimensions();\n  return Size{static_cast<float>(dimensions.width), static_cast<float>(dimensions.height)};\n}\n\nuint32_t ITexture::getDepth() const {\n  return getDimensions().depth;\n}\n\nuint32_t ITexture::getNumFaces() const {\n  return getType() == TextureType::Cube ? 6u : 1u;\n}\n\nsize_t ITexture::getEstimatedSizeInBytes() const {\n  const auto range = getFullMipRange();\n  return properties_.getBytesPerRange(range);\n}\n\nResult ITexture::validateRange(const igl::TextureRangeDesc& range) const noexcept {\n  auto result = range.validate();\n  if (!result.isOk()) {\n    return result;\n  }\n\n  const auto dimensions = getDimensions();\n  const size_t texMipLevels = getNumMipLevels();\n  const size_t levelWidth = std::max(dimensions.width >> range.mipLevel, 1u);\n  const size_t levelHeight = std::max(dimensions.height >> range.mipLevel, 1u);\n  const size_t levelDepth = std::max(dimensions.depth >> range.mipLevel, 1u);\n  const size_t texLayers = getNumLayers();\n  const size_t texFaces = getNumFaces();\n\n  if (range.width > levelWidth || range.height > levelHeight || range.depth > levelDepth ||\n      range.numLayers > texLayers || range.numMipLevels > texMipLevels ||\n      range.numFaces > texFaces) {\n    return Result{Result::Code::ArgumentOutOfRange, \"range dimensions exceed texture dimensions\"};\n  }\n  if (range.x > levelWidth - range.width || range.y > levelHeight - range.height ||\n      range.z > levelDepth - range.depth || range.layer > texLayers - range.numLayers ||\n      range.mipLevel > texMipLevels - range.numMipLevels ||\n      range.face > texFaces - range.numFaces) {\n    return Result{Result::Code::ArgumentOutOfRange, \"range dimensions exceed texture dimensions\"};\n  }\n\n  return Result{};\n}\n\nTextureRangeDesc ITexture::getFullRange(size_t mipLevel, size_t numMipLevels) const noexcept {\n  const auto dimensions = getDimensions();\n\n  const auto texWidth = std::max(dimensions.width >> mipLevel, 1u);\n  const auto texHeight = std::max(dimensions.height >> mipLevel, 1u);\n  const auto texDepth = std::max(dimensions.depth >> mipLevel, 1u);\n\n  auto desc = TextureRangeDesc::new3D(0, 0, 0, texWidth, texHeight, texDepth, mipLevel);\n  desc.face = 0;\n  desc.numLayers = getNumLayers();\n  desc.numMipLevels = numMipLevels;\n  desc.numFaces = getNumFaces();\n\n  return desc;\n}\n\nTextureRangeDesc ITexture::getFullMipRange() const noexcept {\n  return getFullRange(0, getNumMipLevels());\n}\n\nTextureRangeDesc ITexture::getCubeFaceRange(size_t face,\n                                            size_t mipLevel,\n                                            size_t numMipLevels) const noexcept {\n  IGL_DEBUG_ASSERT(getType() == TextureType::Cube);\n  return getFullRange(mipLevel, numMipLevels).atFace(face);\n}\n\nTextureRangeDesc ITexture::getCubeFaceRange(TextureCubeFace face,\n                                            size_t mipLevel,\n                                            size_t numMipLevels) const noexcept {\n  IGL_DEBUG_ASSERT(getType() == TextureType::Cube);\n  return getCubeFaceRange(static_cast<size_t>(face), mipLevel, numMipLevels);\n}\n\nTextureRangeDesc ITexture::getLayerRange(size_t layer,\n                                         size_t mipLevel,\n                                         size_t numMipLevels) const noexcept {\n  IGL_DEBUG_ASSERT(getType() == TextureType::TwoDArray);\n  return getFullRange(mipLevel, numMipLevels).atLayer(layer);\n}\n\nvoid ITexture::repackData(const TextureFormatProperties& properties,\n                          const TextureRangeDesc& range,\n                          const uint8_t* IGL_NONNULL originalData,\n                          size_t originalDataBytesPerRow,\n                          uint8_t* IGL_NONNULL repackedData,\n                          size_t repackedBytesPerRow,\n                          bool flipVertical) {\n  if (IGL_DEBUG_VERIFY_NOT(originalData == nullptr || repackedData == nullptr)) {\n    return;\n  }\n  if (IGL_DEBUG_VERIFY_NOT(range.numMipLevels > 1 &&\n                           (originalDataBytesPerRow > 0 || repackedBytesPerRow > 0))) {\n    return;\n  }\n  const auto fullRangeBytesPerRow = properties.getBytesPerRow(range);\n  if (originalDataBytesPerRow > 0 &&\n      IGL_DEBUG_VERIFY_NOT(originalDataBytesPerRow < fullRangeBytesPerRow)) {\n    return;\n  }\n  if (repackedBytesPerRow > 0 && IGL_DEBUG_VERIFY_NOT(repackedBytesPerRow < fullRangeBytesPerRow)) {\n    return;\n  }\n\n  for (size_t mipLevel = range.mipLevel; mipLevel < range.mipLevel + range.numMipLevels;\n       ++mipLevel) {\n    const auto mipRange = range.atMipLevel(mipLevel);\n    const auto rangeBytesPerRow = properties.getBytesPerRow(mipRange);\n    const auto originalDataIncrement = originalDataBytesPerRow == 0 ? rangeBytesPerRow\n                                                                    : originalDataBytesPerRow;\n    const auto repackedDataIncrement = repackedBytesPerRow == 0 ? rangeBytesPerRow\n                                                                : repackedBytesPerRow;\n    const auto totalNumLayers = mipRange.numLayers * mipRange.numFaces * mipRange.depth;\n    for (size_t layer = 0; layer < totalNumLayers; ++layer) {\n      uint8_t* repackedDataPtr = repackedData;\n      const std::ptrdiff_t increment = flipVertical ? -repackedDataIncrement\n                                                    : repackedDataIncrement;\n      // Start at the end\n      if (flipVertical) {\n        repackedDataPtr += repackedDataIncrement * (mipRange.height - 1);\n      }\n      for (size_t y = 0; y < mipRange.height; ++y) {\n        checked_memcpy_robust(repackedDataPtr,\n                              repackedDataIncrement,\n                              originalData,\n                              originalDataIncrement,\n                              rangeBytesPerRow);\n        repackedDataPtr += increment;\n        originalData += originalDataIncrement;\n      }\n      repackedData += repackedDataIncrement * mipRange.height;\n    }\n  }\n}\n\nconst void* IGL_NULLABLE ITexture::getSubRangeStart(const void* IGL_NONNULL data,\n                                                    const TextureRangeDesc& range,\n                                                    const TextureRangeDesc& subRange,\n                                                    size_t bytesPerRow) const noexcept {\n  const auto offset = properties_.getSubRangeByteOffset(range, subRange, bytesPerRow);\n  return static_cast<const uint8_t*>(data) + offset;\n}\n\nResult ITexture::upload(const TextureRangeDesc& range,\n                        const void* IGL_NULLABLE data,\n                        size_t bytesPerRow,\n                        const uint32_t* IGL_NULLABLE mipLevelBytes) const {\n  if (IGL_DEBUG_VERIFY_NOT(!supportsUpload())) {\n    return Result{Result::Code::InvalidOperation, \"Texture doesn't support upload\"};\n  }\n\n  const auto type = getType();\n  auto result = validateRange(range);\n  if (!result.isOk()) {\n    return result;\n  }\n\n  if (IGL_DEBUG_VERIFY_NOT(type != TextureType::TwoD && type != TextureType::TwoDArray &&\n                           type != TextureType::Cube && type != TextureType::ThreeD)) {\n    return Result{Result::Code::InvalidOperation, \"Unknown texture type\"};\n  }\n  if (IGL_DEBUG_VERIFY_NOT(range.face > 0 && type != TextureType::Cube)) {\n    return Result(Result::Code::Unsupported, \"face must be 0.\");\n  }\n\n  const auto formatBytesPerRow = properties_.getBytesPerRow(range);\n  if (bytesPerRow > 0) {\n    if (IGL_DEBUG_VERIFY_NOT(bytesPerRow < formatBytesPerRow)) {\n      return Result(Result::Code::ArgumentInvalid, \"bytesPerRow too small.\");\n    }\n    if (IGL_DEBUG_VERIFY_NOT(range.numMipLevels > 1 && bytesPerRow != formatBytesPerRow)) {\n      return Result(Result::Code::ArgumentInvalid,\n                    \"bytesPerRow MUST be 0 when uploading multiple mip levels.\");\n    }\n  }\n\n  const bool isSampledOrStorage = (getUsage() & (TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Storage)) != 0;\n  if (!IGL_DEBUG_VERIFY(isSampledOrStorage)) {\n    return Result(Result::Code::Unsupported,\n                  \"Texture must support either sampled or storage usage.\");\n  }\n\n  std::unique_ptr<uint8_t[]> repackedData = nullptr;\n\n  // Repack data if necessary for upload\n  if (data != nullptr && needsRepacking(range, bytesPerRow)) {\n    repackedData = std::make_unique<uint8_t[]>(properties_.getBytesPerRange(range));\n    ITexture::repackData(\n        properties_, range, static_cast<const uint8_t*>(data), bytesPerRow, repackedData.get(), 0);\n    bytesPerRow = 0;\n    data = repackedData.get();\n  }\n\n  return uploadInternal(type, range, data, bytesPerRow, mipLevelBytes);\n}\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Texture.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <algorithm>\n#include <igl/CommandQueue.h>\n#include <igl/Common.h>\n#include <igl/ITrackedResource.h>\n#include <igl/TextureFormat.h>\n#include <igl/base/IAttachmentInterop.h>\n\nnamespace igl {\n\n/**\n * @brief TextureCubeFace denotes side of the face in a cubemap setting.\n   Based on https://www.khronos.org/opengl/wiki/Cubemap_Texture\n\n  PosX            - The U coordinate is going behind the viewer, with the V coordinate going down.\n  NegX            - The U coordinate is going forward, with the V coordinate going down.\n  PosY            - The U coordinate goes to the right, with the V coordinate going forward.\n  NegY            - The U coordinate goes to the right, with the V coordinate going backward.\n  PosZ            - The U coordinate goes to the right, with the V coordinate going down.\n  NegZ            - The U coordinate goes to the left (relative to us facing forwards), with the V\n coordinate going down.\n */\nenum class TextureCubeFace : uint8_t { PosX = 0, NegX, PosY, NegY, PosZ, NegZ };\n\n/**\n * @brief Descriptor for texture dimensions\n *\n *  x            - offset position in width\n *  y            - offset position in height\n *  z            - offset position in depth\n *  width        - width of the range\n *  height       - height of the range\n *  depth        - depth of the range\n *  layer        - layer offset for 1D/2D array textures. Not used for cube textures faces.\n *  numLayers    - number of layers in the range\n *  mipLevel     - mipmap level offset of the range\n *  numMipLevels - number of mipmap levels in the range\n *  face         - face offset for cube textures\n *  numFaces     - number of cube texture faces in the range\n */\nstruct TextureRangeDesc {\n  uint32_t x = 0;\n  uint32_t y = 0;\n  uint32_t z = 0;\n  uint32_t width = 1;\n  uint32_t height = 1;\n  uint32_t depth = 1;\n  uint32_t layer = 0;\n  uint32_t numLayers = 1;\n  uint32_t mipLevel = 0;\n  uint32_t numMipLevels = 1;\n  uint32_t face = 0;\n  uint32_t numFaces = 1;\n\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  static TextureRangeDesc new1D(uint32_t x,\n                                uint32_t width,\n                                uint32_t mipLevel = 0,\n                                uint32_t numMipLevels = 1);\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  static TextureRangeDesc new1DArray(uint32_t x,\n                                     uint32_t width,\n                                     uint32_t layer,\n                                     uint32_t numLayers,\n                                     uint32_t mipLevel = 0,\n                                     uint32_t numMipLevels = 1);\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  static TextureRangeDesc new2D(uint32_t x,\n                                uint32_t y,\n                                uint32_t width,\n                                uint32_t height,\n                                uint32_t mipLevel = 0,\n                                uint32_t numMipLevels = 1);\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  static TextureRangeDesc new2DArray(uint32_t x,\n                                     uint32_t y,\n                                     uint32_t width,\n                                     uint32_t height,\n                                     uint32_t layer,\n                                     uint32_t numLayers,\n                                     uint32_t mipLevel = 0,\n                                     uint32_t numMipLevels = 1);\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  static TextureRangeDesc new3D(uint32_t x,\n                                uint32_t y,\n                                uint32_t z,\n                                uint32_t width,\n                                uint32_t height,\n                                uint32_t depth,\n                                uint32_t mipLevel = 0,\n                                uint32_t numMipLevels = 1);\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  static TextureRangeDesc newCube(uint32_t x,\n                                  uint32_t y,\n                                  uint32_t width,\n                                  uint32_t height,\n                                  uint32_t mipLevel = 0,\n                                  uint32_t numMipLevels = 1);\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  static TextureRangeDesc newCubeFace(uint32_t x,\n                                      uint32_t y,\n                                      uint32_t width,\n                                      uint32_t height,\n                                      uint32_t face,\n                                      uint32_t mipLevel = 0,\n                                      uint32_t numMipLevels = 1);\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  static TextureRangeDesc newCubeFace(uint32_t x,\n                                      uint32_t y,\n                                      uint32_t width,\n                                      uint32_t height,\n                                      TextureCubeFace face,\n                                      uint32_t mipLevel = 0,\n                                      uint32_t numMipLevels = 1);\n\n  /**\n   * @brief Returns a new TextureRangeDesc based on this one but reduced to the specified mipLevel.\n   *\n   * @param newMipLevel The mip level of the returned range.\n   * @remark The returned range only has 1 mip level.\n   */\n  [[nodiscard]] TextureRangeDesc atMipLevel(uint32_t newMipLevel) const noexcept;\n  /**\n   * @brief Returns a new TextureRangeDesc based on this one but with the specified number of\n   * mip levels.\n   *\n   * @param newNumMipLevels The number of mip levels in the returned range.\n   */\n  [[nodiscard]] TextureRangeDesc withNumMipLevels(uint32_t newNumMipLevels) const noexcept;\n  /**\n   * @brief Returns a new TextureRangeDesc based on this one but reduced to the specified layer.\n   *\n   * @param newLayer The layer of the returned range.\n   * @remark The returned range only has 1 layer.\n   */\n  [[nodiscard]] TextureRangeDesc atLayer(uint32_t newLayer) const noexcept;\n  /**\n   * @brief Returns a new TextureRangeDesc based on this one but with the specified number of\n   * layers.\n   *\n   * @param newNumLayers The number of layers in the returned range.\n   */\n  [[nodiscard]] TextureRangeDesc withNumLayers(uint32_t newNumLayers) const noexcept;\n  /**\n   * @brief Returns a new TextureRangeDesc based on this one but reduced to the specified face.\n   *\n   * @param newFace The face of the returned range.\n   * @remark The returned range only has 1 face.\n   */\n  [[nodiscard]] TextureRangeDesc atFace(uint32_t newFace) const noexcept;\n  /**\n   * @brief Returns a new TextureRangeDesc based on this one but reduced to the specified face.\n   *\n   * @param newFace The face of the returned range.\n   * @remark The returned range only has 1 face.\n   */\n  [[nodiscard]] TextureRangeDesc atFace(TextureCubeFace newFace) const noexcept;\n  /**\n   * @brief Returns a new TextureRangeDesc based on this one but with the specified number of faces.\n   *\n   * @param newNumFaces The number of faces in the returned range.\n   */\n  [[nodiscard]] TextureRangeDesc withNumFaces(uint32_t newNumFaces) const noexcept;\n\n  /**\n   * Validates the range.\n   *\n   * A range is valid if:\n   *  1) width, height, depth, numFaces, numLayers and numMipLevels are all at least 1.\n   *  2) numMipLevels is less than or equal to the max mip levels for the width, height and depth.\n   *  3) mipLevel, x + width, y + height, z + depth and layer + numLayers are all <=\n   *     std::numeric_limits<uint32_t>::max().\n   *  4) (x + width) * (y + height) * (z + depth) * (layer + numLayers) * numFaces <=\n   *     std::numeric_limits<uint32_t>::max().\n   *  5) face < 6 and numFaces <= 6\n   */\n  [[nodiscard]] Result validate() const noexcept;\n\n  bool operator==(const TextureRangeDesc& rhs) const noexcept = default;\n  bool operator!=(const TextureRangeDesc& rhs) const noexcept = default;\n};\n\n/**\n * @brief Encapsulates properties of a texture format\n *\n *  name               - Stringified IGL enum for the format\n *  format             - IGL enum for the format\n *  componentsPerPixel - Number of components for each pixel (e.g., RGB has 3)\n *  bytesPerBlock      - Bytes per pixel block (compressed) or per pixel (uncompressed)\n *  blockWidth         - Block width for compressed textures (always 1 for uncompressed)\n *  blockHeight        - Block height for compressed textures (always 1 for uncompressed)\n *  blockDepth         - Block depth for compressed textures (always 1 for uncompressed)\n *  minBlocksX         - Minimum number of blocks in the X direction for compressed textures\n *  minBlocksY         - Minimum number of blocks in the Y direction for compressed textures\n *  minBlocksZ         - Minimum number of blocks in the Z direction for compressed textures\n *  flags              - Additional boolean flags for the format:\n *                        - Depth:          Depth texture format\n *                        - Stencil:        Stencil texture format\n *                        - Compressed:     Compressed texture format\n *                        - sRGB:           sRGB texture format\n *                        - Integer:        Integer formats do not support sampling via\n *                                          float samplers `texture2D` (require `utexture2D`)\n *                        - HDR:            More than 8 bits per component\n *                        - VariableLength: Variable length blocks\n */\nstruct TextureFormatProperties {\n  static TextureFormatProperties fromTextureFormat(TextureFormat format);\n\n  enum Flags : uint8_t {\n    Depth = 1 << 0,\n    Stencil = 1 << 1,\n    Compressed = 1 << 2,\n    sRGB = 1 << 3,\n    Integer = 1 << 4,\n    HDR = 1 << 5, // Color format with more than 8 bits per component\n    VariableLength = 1 << 6, // Variable length blocks\n  };\n\n  const char* IGL_NONNULL name = \"Invalid\";\n  const TextureFormat format = TextureFormat::Invalid;\n  const uint8_t componentsPerPixel = 1;\n  const uint8_t bytesPerBlock = 1;\n  const uint8_t blockWidth = 1;\n  const uint8_t blockHeight = 1;\n  const uint8_t blockDepth = 1;\n  const uint8_t minBlocksX = 1;\n  const uint8_t minBlocksY = 1;\n  const uint8_t minBlocksZ = 1;\n  const uint8_t numPlanes = 1;\n  const uint8_t flags = 0;\n\n  /**\n   * @brief true for TextureFormat::Invalid\n   */\n  [[nodiscard]] bool isValid() const noexcept {\n    return format != TextureFormat::Invalid;\n  }\n  /**\n   * @brief true for compressed texture formats.\n   */\n  [[nodiscard]] bool isCompressed() const noexcept {\n    return (flags & Flags::Compressed) != 0;\n  }\n  /**\n   * @brief true for integer texture formats.\n   */\n  [[nodiscard]] bool isInteger() const noexcept {\n    return (flags & Flags::Integer) != 0;\n  }\n  /**\n   * @brief true for sRGB texture formats.\n   */\n  [[nodiscard]] bool isSRGB() const noexcept {\n    return (flags & Flags::sRGB) != 0;\n  }\n  /**\n   * @brief true for high precision color texture formats.\n   */\n  [[nodiscard]] bool isHDR() const noexcept {\n    return (flags & Flags::HDR) != 0;\n  }\n\n  [[nodiscard]] bool hasDepth() const noexcept {\n    return (flags & Flags::Depth) != 0;\n  }\n  [[nodiscard]] bool hasStencil() const noexcept {\n    return (flags & Flags::Stencil) != 0;\n  }\n  [[nodiscard]] bool hasColor() const noexcept {\n    return !hasDepth() && !hasStencil();\n  }\n\n  /**\n   * @brief true for depth-only texture formats (e.g., TextureFormat::Z_UNorm24).\n   */\n  [[nodiscard]] bool isDepthOnly() const noexcept {\n    return hasDepth() && !hasStencil();\n  }\n  /**\n   * @brief true for depth-only and depth-stencil texture formats.\n   */\n  [[nodiscard]] bool isDepthOrDepthStencil() const noexcept {\n    return hasDepth();\n  }\n  /**\n   * @brief true for stencil-only texture formats (e.g., TextureFormat::S_UInt8).\n   */\n  [[nodiscard]] bool isStencilOnly() const noexcept {\n    return !hasDepth() && hasStencil();\n  }\n  /**\n   * @brief true for depth-only, stencil-only and depth-stencil texture formats.\n   */\n  [[nodiscard]] bool isDepthOrStencil() const noexcept {\n    return (flags & Flags::Depth) != 0 || (flags & Flags::Stencil) != 0;\n  }\n\n  [[nodiscard]] bool isVariableLength() const noexcept {\n    return (flags & Flags::VariableLength) != 0;\n  }\n\n  /**\n   * @brief Utility function to calculate the number of rows in the range for the texture format.\n   * For uncompressed textures, this will be range.height. For compressed textures, range.height\n   * rounded up to the nearest multiple of blockHeight.\n   *\n   * @param range  range.width, range.height, and range.depth should be the actual dimensions of the\n   * range to calculate for. For subranges and mip levels other than 0, these should be the\n   * dimensions of the subrange and/or mip level, which may be be less than the full texture\n   * dimensions.\n   * @return Calculated number of rows of texture data for the texture format.\n   */\n  [[nodiscard]] uint32_t getRows(TextureRangeDesc range) const noexcept;\n\n  /**\n   * @brief Utility function to calculate the size in bytes per row for a texture format.\n   *\n   * @param texWidth  The width, in pixels, of the texture data. This should be the row width to\n   * calculate for. For subranges and mip levels other than 0, this should be the width of the\n   * subrange and/or mip level, which may be be less than the full texture width.\n   * @return Calculated total size in bytes of a row of texture data for the texture format.\n   */\n  [[nodiscard]] uint32_t getBytesPerRow(uint32_t texWidth) const noexcept;\n\n  /**\n   * @brief Utility function to calculate the size in bytes per row for a texture format.\n   *\n   * @param range  The range, in pixels, of the texture data row. range.width be the row width to\n   * calculate for. For subranges and mip levels other than 0, this should be the width of the\n   * subrange and/or mip level, which may be be less than the full texture width.\n   * @return Calculated total size in bytes of a row of texture data for the texture format.\n   */\n  [[nodiscard]] uint32_t getBytesPerRow(TextureRangeDesc range) const noexcept;\n\n  /**\n   * @brief Utility function to calculate the size in bytes per texture layer for a texture format.\n   *\n   * @param texWidth  The width of the texture layer.\n   * @param texHeight  The height of the texture layer.\n   * @param texDepth  The depth of the texture layer.\n   * @param bytesPerRow The size in bytes of each texture row. 0 for the format's default.\n   * @remark texWidth, texHeight and texDepth should be the actual dimensions of the range to\n   * calculate for. For subranges and mip levels other than 0, this should be the dimensions of the\n   * subrange and/or mip level, which may be be less than the full texture dimensions.\n   * @return Calculated total size in bytes of a layer of texture data for the texture format.\n   */\n  [[nodiscard]] size_t getBytesPerLayer(uint32_t texWidth,\n                                        uint32_t texHeight,\n                                        uint32_t texDepth,\n                                        uint32_t bytesPerRow = 0) const noexcept;\n\n  /**\n   * @brief Utility function to calculate the size in bytes per texture layer for a texture format.\n   *\n   * @param range  The range of the texture to calculate for. The range should be the full size of\n   * the first mip level to calculate for. range.x, range.y, range.z, range.mipLevel and range.layer\n   * are not used.\n   * @param bytesPerRow The size in bytes of each texture row. 0 for the format's default.\n   * @remark range.width, range.height, and range.depth should be the actual dimensions of the range\n   * to calculate for. For subranges and mip levels other than 0, these should be the dimensions of\n   * the subrange and/or mip level, which may be be less than the full texture dimensions.\n   * @return Calculated total size in bytes of a layer of texture data for the texture format.\n   */\n  [[nodiscard]] size_t getBytesPerLayer(TextureRangeDesc range,\n                                        uint32_t bytesPerRow = 0) const noexcept;\n\n  /**\n   * @brief Utility function to calculate the size in bytes per texture range for a texture format.\n   *\n   * @param range  The range of the texture to calculate for. The range should be the full size of\n   * the first mip level to calculate for. range.x, range.y and range.z are not used.\n   * @param bytesPerRow The size in bytes of each texture row. 0 for the format's default. This\n   * mustt be 0 if numMipLevels is more than 1.\n   * @remark range can include more than one layer. range can also include more than one mip level.\n   * When range includes more than one mip level, dimensions  are divided by two for each subsequent\n   * mip level.\n   * @return Calculated total size in bytes of a the range of texture data for the texture format.\n   */\n  [[nodiscard]] size_t getBytesPerRange(TextureRangeDesc range,\n                                        uint32_t bytesPerRow = 0) const noexcept;\n\n  /**\n   * @brief Utility function to calculate the number of mip levels given a total size in bytes of\n   * texture data.\n   *\n   * @param texWidth  The width of the first mip level of the texture.\n   * @param texHeight  The height of the first mip level of the texture.\n   * @return Calculated number of mip levels.\n   */\n  [[nodiscard]] uint32_t getNumMipLevels(uint32_t texWidth,\n                                         uint32_t texHeight,\n                                         size_t totalBytes) const noexcept;\n\n  /**\n   * @brief Utility function to calculate the byte offset of the start of a subrange within a block\n   * of data.\n   *\n   * This method assumes the following data hierarchy:\n   *   mip level\n   *     array layer\n   *       cube face\n   *         z slice\n   *           row\n   *\n   * This method only handles the case where the subrange is a proper subset of the full block of\n   * data. It also only handles subranges in terms of mip levels, layers or faces. It does not\n   * handle subsets along the x, y or z dimensions.\n   *\n   * @param range The range of the full block of data.\n   * @param subRange The subrange within the full block of data for which to get the byte offset.\n   * @param bytesPerRow The number of bytes in each row of range (the full block of data). 0 means\n   * the default for the texture format. Must be 0 if subrange starts at a different mip level than\n   * the full range or covers more than one mip level.\n   * @return The byte offset within the full block of data for the start of the subrange. */\n  [[nodiscard]] size_t getSubRangeByteOffset(const TextureRangeDesc& range,\n                                             const TextureRangeDesc& subRange,\n                                             uint32_t bytesPerRow = 0) const noexcept;\n};\n\nenum ImageAspectBits : uint32_t {\n  ImageAspectBits_Invalid = 0xffffffff,\n  ImageAspectBits_None = 0,\n  ImageAspectBits_Color = 0x1,\n  ImageAspectBits_Depth = 0x2,\n  ImageAspectBits_Stencil = 0x4,\n  ImageAspectBits_Plane_0 = 0x10,\n  ImageAspectBits_Plane_1 = 0x20,\n  ImageAspectBits_Plane_2 = 0x40,\n};\n\nusing ImageAspectFlags = uint32_t;\n\nenum Swizzle : uint8_t {\n  Swizzle_Default = 0,\n  Swizzle_0,\n  Swizzle_1,\n  Swizzle_R,\n  Swizzle_G,\n  Swizzle_B,\n  Swizzle_A,\n};\n\nstruct ComponentMapping {\n  Swizzle r = Swizzle_Default;\n  Swizzle g = Swizzle_Default;\n  Swizzle b = Swizzle_Default;\n  Swizzle a = Swizzle_Default;\n  [[nodiscard]] bool identity() const {\n    return r == Swizzle_Default && g == Swizzle_Default && b == Swizzle_Default &&\n           a == Swizzle_Default;\n  }\n};\n\n/**\n * @brief Descriptor for texture view creation methods\n */\nstruct TextureViewDesc {\n  TextureType type = TextureType::TwoD;\n  // mutate the original texture format, subject to the underlying graphics API limitations\n  TextureFormat format = TextureFormat::Invalid; // use Invalid to keep the original format\n  ImageAspectFlags aspect = ImageAspectBits_Invalid; // use Invalid to keep the original aspect\n  uint32_t layer = 0;\n  uint32_t numLayers = 1;\n  uint32_t mipLevel = 0;\n  uint32_t numMipLevels = 1;\n  // swizzle RGBA components in a custom way\n  ComponentMapping swizzle = {};\n\n  std::string debugName;\n};\n\n/**\n * @brief Descriptor for internal texture creation methods used in IGL\n *\n *  width              - width of the texture\n *  height             - height of the texture\n *  depth              - depth of the texture\n *  numLayers          - Number of layers for array texture\n *  numSamples         - Number of samples for multisampling\n *  usage              - Bitwise flag for containing a mask of TextureUsageBits\n *  numMipLevels       - Number of mipmaps to generate\n *  type               - The type of texture (2D, 3D, Cube, etc.)\n *  format             - Internal texture format type\n *  storage            - Internal resource storage type\n *  tiling             - Image layout for texture storage (Optimal or Linear)\n *  exportability      - Whether the texture can be exported (NoExport or Exportable)\n *  mipmapGeneration   - Specifies when and how mipmaps should be generated (Manual,\n *                       AutoGenerateOnUpload)\n *  debugName          - Optional debug name for the texture\n */\nstruct TextureDesc {\n  /**\n   * @brief Bitwise flags for texture usage\n   *\n   *  Sampled - Can be used as read-only texture in vertex/fragment shaders\n   *  Storage - Can be used as read/write storage texture in vertex/fragment/compute shaders\n   *  Attachment - Can be bound for render target\n   */\n  enum TextureUsageBits : uint8_t {\n    Sampled = 1 << 0,\n    Storage = 1 << 1,\n    Attachment = 1 << 2,\n  };\n\n  using TextureUsage = uint8_t;\n\n  /**\n   * @brief Flag for texture image storage (Vulkan Only)\n   *\n   *  Optimal - Image layout for best texture read performance\n   *            Corresponds to VK_IMAGE_TILING_OPTIMAL\n   *  Linear - Image layout for linearly storing texture data\n   *           Corresponds to VK_IMAGE_TILING_LINEAR\n   */\n  enum class TextureTiling : uint8_t { Optimal, Linear };\n\n  enum class TextureExportability : uint8_t { NoExport, Exportable };\n\n  /**\n   * @brief Flag to specify whether IGL needs to generate mipmaps and when\n   *\n   *  Manual - Mip levels are expected to be generated after the texture\n   *           is created and uploaded by the caller by calling one of IGL's\n   *           mipmap generation functions OR provided during upload.\n   *\n   *  AutoGenerateOnUpload - IGL will generate mipmaps when the texture\n   *                         is uploaded to the device\n   */\n  enum class TextureMipmapGeneration : uint8_t { Manual, AutoGenerateOnUpload };\n\n  uint32_t width = 1;\n  uint32_t height = 1;\n  uint32_t depth = 1;\n  uint32_t numLayers = 1;\n  uint32_t numSamples = 1;\n  TextureUsage usage = 0;\n  uint32_t numMipLevels = 1;\n  TextureType type = TextureType::Invalid;\n  TextureFormat format = TextureFormat::Invalid;\n  ResourceStorage storage = ResourceStorage::Invalid;\n  TextureTiling tiling = TextureTiling::Optimal;\n  TextureExportability exportability = TextureExportability::NoExport;\n  TextureMipmapGeneration mipmapGeneration = TextureMipmapGeneration::Manual;\n\n  std::string debugName;\n\n  bool operator==(const TextureDesc& rhs) const;\n  bool operator!=(const TextureDesc& rhs) const;\n\n  /**\n   * @brief Utility to create a new 2D texture\n   *\n   * @param format The format of the texture\n   * @param width  The width of the texture\n   * @param height The height of the texture\n   * @param usage A combination of TextureUsage flags\n   * @param debugName An optional debug name\n   * @return TextureDesc\n   */\n  static TextureDesc new2D(TextureFormat format,\n                           uint32_t width,\n                           uint32_t height,\n                           TextureUsage usage,\n                           const char* IGL_NULLABLE debugName = nullptr) {\n    return TextureDesc{\n        .width = width,\n        .height = height,\n        .usage = usage,\n        .type = TextureType::TwoD,\n        .format = format,\n        .debugName = debugName ? debugName : \"\",\n    };\n  }\n\n  /**\n   * @brief Utility to create a new 2D texture array\n   *\n   * @param format The format of the texture\n   * @param width  The width of the texture\n   * @param height The height of the texture\n   * @param numLayers  The number layers of the texture array\n   * @param usage A combination of TextureUsage flags\n   * @param debugName An optional debug name\n   * @return TextureDesc\n   */\n  static TextureDesc new2DArray(TextureFormat format,\n                                uint32_t width,\n                                uint32_t height,\n                                uint32_t numLayers,\n                                TextureUsage usage,\n                                const char* IGL_NULLABLE debugName = nullptr) {\n    return TextureDesc{\n        .width = width,\n        .height = height,\n        .numLayers = numLayers,\n        .usage = usage,\n        .type = TextureType::TwoDArray,\n        .format = format,\n        .debugName = debugName ? debugName : \"\",\n    };\n  }\n\n  /**\n   * @brief Utility to create a new cube texture\n   *\n   * @param format The format of the texture\n   * @param width  The width of the texture\n   * @param height The height of the texture\n   * @param usage A combination of TextureUsage flags\n   * @param debugName An optional debug name\n   * @return TextureDesc\n   */\n  static TextureDesc newCube(TextureFormat format,\n                             uint32_t width,\n                             uint32_t height,\n                             TextureUsage usage,\n                             const char* IGL_NULLABLE debugName = nullptr) {\n    return TextureDesc{\n        .width = width,\n        .height = height,\n        .usage = usage,\n        .type = TextureType::Cube,\n        .format = format,\n        .debugName = debugName ? debugName : \"\",\n    };\n  }\n\n  /**\n   * @brief Utility to create a new 3D texture\n   *\n   * @param format The format of the texture\n   * @param width  The width of the texture\n   * @param height The height of the texture\n   * @param depth  The depth of the texture\n   * @param usage A combination of TextureUsage flags\n   * @param debugName An optional debug name\n   * @return TextureDesc\n   */\n  static TextureDesc new3D(TextureFormat format,\n                           uint32_t width,\n                           uint32_t height,\n                           uint32_t depth,\n                           TextureUsage usage,\n                           const char* IGL_NULLABLE debugName = nullptr) {\n    return TextureDesc{\n        .width = width,\n        .height = height,\n        .depth = depth,\n        .usage = usage,\n        .type = TextureType::ThreeD,\n        .format = format,\n        .debugName = debugName ? debugName : \"\",\n    };\n  }\n\n  /**\n   * @brief Utility to create a new external image texture\n   *\n   * @param format The format of the texture\n   * @param width  The width of the texture\n   * @param height The height of the texture\n   * @param debugName An optional debug name\n   * @return TextureDesc\n   */\n  static TextureDesc newExternalImage(TextureFormat format,\n                                      uint32_t width,\n                                      uint32_t height,\n                                      TextureUsage usage,\n                                      const char* IGL_NULLABLE debugName = nullptr) {\n    return TextureDesc{\n        .width = width,\n        .height = height,\n        .usage = usage,\n        .type = TextureType::ExternalImage,\n        .format = format,\n        .debugName = debugName ? debugName : \"\",\n    };\n  }\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n  /**\n   * @brief Utility to create a new image texture with linked hardware buffer\n   *\n   * @param format The format of the texture\n   * @param usage A combination of TextureUsage flags\n   * @param width  The width of the texture\n   * @param height The height of the texture\n   * @param debugName An optional debug name\n   * @return TextureDesc\n   */\n  static TextureDesc newNativeHWBufferImage(TextureFormat format,\n                                            TextureUsage usage,\n                                            uint32_t width,\n                                            uint32_t height,\n                                            const char* IGL_NULLABLE debugName = nullptr) {\n    return TextureDesc{\n        .width = width,\n        .height = height,\n        .usage = usage,\n        .type = TextureType::TwoD,\n        .format = format,\n        .storage = ResourceStorage::Shared,\n        .debugName = debugName ? debugName : \"\",\n    };\n  }\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n  /**\n   * @brief Creates a TextureRangeDesc equivalent to descriptor.\n   *\n   * The range includes the full width, height, depth, number of layers, number of cube faces, and\n   * number of mip levels in the texture descriptor. */\n  [[nodiscard]] TextureRangeDesc asRange() const noexcept;\n\n  /**\n   * @brief Utility to calculate maximum mipmap level support\n   *\n   * @param width  The width of the texture\n   * @param height The height of the texture\n   * @param depth The depth of the texture\n   * @return uint32_t\n   */\n  static constexpr uint32_t calcNumMipLevels(uint32_t width, uint32_t height, uint32_t depth = 1) {\n    if (!width || !height || !depth) {\n      return 0;\n    }\n\n    uint32_t levels = 1;\n\n    const size_t combinedValue = width | height | depth;\n    while (combinedValue >> levels) {\n      levels++;\n    }\n\n    return levels;\n  }\n};\n\n/**\n * @brief Interface class for all textures.\n * This should only be used for the purpose of getting information about the texture using the\n * gettor methods defined below.\n */\nclass ITexture : public ITrackedResource<ITexture>, public base::IAttachmentInterop {\n public:\n  explicit ITexture(TextureFormat format) :\n    properties_(TextureFormatProperties::fromTextureFormat(format)) {}\n  ~ITexture() override = default;\n\n  /**\n   * @brief Indicates if this type of texture supports upload.\n   */\n  [[nodiscard]] virtual bool supportsUpload() const {\n    return ((getUsage() & (TextureDesc::TextureUsageBits::Sampled |\n                           TextureDesc::TextureUsageBits::Storage)) != 0) &&\n           !properties_.isDepthOrStencil();\n  }\n\n  /**\n   * @brief Uploads the given data into texture memory.\n   *\n   * Upload supports arbitrary ranges. That is, data may point to data for multiple mip levels, cube\n   * faces, array layers and Z slices.\n   *\n   * This method assumes the following data hierarchy:\n   *   mip level\n   *     array layer\n   *       cube face\n   *         z slice\n   *           row\n   *\n   * @param range        The texture range descriptor containing the offset & dimensions of the\n   * upload process.\n   * @param data         The pointer to the data. May be a nullptr to force initialization without\n   * providing data.\n   * @param bytesPerRow Number of bytes per row. If 0, it will be autocalculated assuming no\n   * padding.\n   * @param mipLevelBytes Number of bytes per mip level. If nullptr, it will be autocalculated\n   * @return Result      A flag for the result of operation\n   */\n  Result upload(const TextureRangeDesc& range,\n                const void* IGL_NULLABLE data,\n                size_t bytesPerRow = 0,\n                const uint32_t* IGL_NULLABLE mipLevelBytes = nullptr) const;\n\n  // Texture Accessor Methods\n  /**\n   * @brief Returns the aspect ratio (width / height) of the texture.\n   *\n   * @return float\n   */\n  [[nodiscard]] float getAspectRatio() const;\n  /**\n   * @brief Returns size (width x height) dimension of the texture.\n   * For 1D textures, return (width,1)\n   * For 2D textures, 3D textures and/or cube, return (width,height)\n   *\n   * @return Size\n   */\n  [[nodiscard]] Size getSize() const;\n  /**\n   * @brief Returns depth dimension of the texture\n   * For 1D, 2D textures, return 1\n   * For 3D textures and/or cube, returns depth\n   *\n   * @return size_t\n   */\n  [[nodiscard]] uint32_t getDepth() const;\n  /**\n   * @brief Returns dimensions (width, height and depth) of the texture.\n   *\n   * @return size_t\n   */\n  [[nodiscard]] virtual Dimensions getDimensions() const = 0;\n  /**\n   * @brief Returns the number of layers of the texture\n   * For non array textures, return 1\n   *\n   * @return size_t\n   */\n  [[nodiscard]] virtual uint32_t getNumLayers() const = 0;\n  /**\n   * @brief Returns the number of faces the texture has\n   * For non-cube textures, return 1\n   *\n   * @return size_t\n   */\n  [[nodiscard]] uint32_t getNumFaces() const;\n  /**\n   * @brief Returns texture format properties of the texture\n   *\n   * @return TextureFormatProperties\n   */\n  [[nodiscard]] const TextureFormatProperties& getProperties() const {\n    return properties_;\n  }\n  /**\n   * @brief Returns texture type of the texture\n   *\n   * @return TextureType\n   */\n  [[nodiscard]] virtual TextureType getType() const = 0;\n  /**\n   * @brief Returns bitwise flag containing the usage of the texture\n   *\n   * @return unsigned bitwise flag\n   */\n  [[nodiscard]] virtual TextureDesc::TextureUsage getUsage() const = 0;\n  /**\n   * @brief Returns number of samples\n   *\n   * @return The count of samples in the underlying texture\n   */\n  [[nodiscard]] virtual uint32_t getSamples() const = 0;\n  /**\n   * @brief Generates mipmap command using the command queue\n   *\n   * @param cmdQueue The command queue that is generated from the graphics device.\n   * @param range The texture range descriptor containing the extents of the image to generate\n   * mipmaps. If nullptr is provided, the function generates mips for all levels. Note: not all\n   * parameters in the TextureRangeDesc structure are supported for mipmap generation. For example,\n   * the x, y, z offsets and the dimensions are not used by this function. Also, not all\n   * implementations support generating a subset of miplevels for an image (OpenGL, for example)\n   */\n  virtual void generateMipmap(ICommandQueue& cmdQueue,\n                              const TextureRangeDesc* IGL_NULLABLE range = nullptr) const = 0;\n  /**\n   * @brief Generates mipmap command using an existing command buffer\n   * @param range The texture range descriptor containing the extents of the image to generate\n   * mipmaps. If nullptr is provided, the function generates mips for all levels. Note: not all\n   * parameters in the TextureRangeDesc structure are supported for mipmap generation. For example,\n   * the x, y, z offsets and the dimensions are not used by this function. Also, not all\n   * implementations support generating a subset of miplevels for an image (OpenGL, for example)\n   * @param cmdBuffer A command buffer that is generated from an ICommandQueue.\n   */\n  virtual void generateMipmap(ICommandBuffer& cmdBuffer,\n                              const TextureRangeDesc* IGL_NULLABLE range = nullptr) const = 0;\n\n  /**\n   * @brief Returns the number of mipmap levels\n   */\n  [[nodiscard]] virtual uint32_t getNumMipLevels() const = 0;\n  /**\n   * @brief Returns a flag to indicate mipmap for the texture has been generated.\n   *\n   * @return True  Mipmap has been generated\n   *         False Otherwise\n   */\n  [[nodiscard]] virtual bool isRequiredGenerateMipmap() const = 0;\n  /**\n   * @brief Attempts to calculate how much memory this texture uses. There are many factors that\n   * make this calculation difficult and we can't be confident about driver implementations, so this\n   * number can't be fully trusted.\n   *\n   * @return The estimated size of this texture, in bytes.\n   */\n  [[nodiscard]] size_t getEstimatedSizeInBytes() const;\n  /**\n   * @brief Returns a texture id suitable for bindless rendering (descriptor indexing on Vulkan and\n   * gpuResourceID on Metal)\n   *\n   * @return uint64_t\n   */\n  [[nodiscard]] virtual uint64_t getTextureId() const = 0;\n\n  /**\n   * @brief Validates the range against texture dimensions at the range's mip level.\n   *\n   * @return The returned Result indicates whether the range is valid or not.\n   */\n  [[nodiscard]] Result validateRange(const igl::TextureRangeDesc& range) const noexcept;\n  /**\n   * @brief Returns a TextureRangeDesc for the texture's full range at the specified mip level.\n   *\n   * For cube map textures, this range includes all faces.\n   * @return TextureRangeDesc.\n   */\n  [[nodiscard]] TextureRangeDesc getFullRange(size_t mipLevel = 0,\n                                              size_t numMipLevels = 1) const noexcept;\n  /**\n   * @brief Returns a TextureRangeDesc for the texture's full range, including all mip levels.\n   *\n   * @return TextureRangeDesc.\n   */\n  [[nodiscard]] TextureRangeDesc getFullMipRange() const noexcept;\n  /**\n   * @brief Returns a TextureRangeDesc for the texture's full range for a single cube face at the\n   * specified mip level.\n   *\n   * @return TextureRangeDesc.\n   */\n  [[nodiscard]] TextureRangeDesc getCubeFaceRange(TextureCubeFace face,\n                                                  size_t mipLevel = 0,\n                                                  size_t numMipLevels = 1) const noexcept;\n  /**\n   * @brief Returns a TextureRangeDesc for the texture's full range for a single cube face at the\n   * specified mip level.\n   *\n   * @return TextureRangeDesc.\n   */\n  [[nodiscard]] TextureRangeDesc getCubeFaceRange(size_t face,\n                                                  size_t mipLevel = 0,\n                                                  size_t numMipLevels = 1) const noexcept;\n\n  /**\n   * @brief Returns a TextureRangeDesc for the texture's full range for a single array layer at the\n   * specified mip level.\n   *\n   * @return TextureRangeDesc.\n   */\n  [[nodiscard]] TextureRangeDesc getLayerRange(size_t layer,\n                                               size_t mipLevel = 0,\n                                               size_t numMipLevels = 1) const noexcept;\n\n  /**\n   * @brief A helper function to quickly access TextureFormat.\n   *\n   * @return TextureFormat.\n   */\n  [[nodiscard]] TextureFormat getFormat() const {\n    return properties_.format;\n  }\n\n  /**\n   * @brief Returns a flag checking if this texture belongs to swapchain.\n   *\n   * @return Boolean.\n   */\n  [[nodiscard]] virtual bool isSwapchainTexture() const {\n    return false;\n  }\n\n  /**\n   * @brief Helper method to repack texture data to achieve a desired alignment.\n   *\n   * Copies data from originalData to repackedData, one row of data at a time. Each row of data will\n   * be repackedBytesPerRow bytes long. If repackedBytesPerRow is less than originalDataBytesPerRow,\n   * data will NOT be 0 padded.\n   *\n   * Repacking only works correctly for 1 mip level.\n   *\n   * This method assumes the following data hierarchy:\n   *   mip level\n   *     array layer\n   *       cube face\n   *         z slice\n   *           row\n   *\n   * @param properties The texture format properties for the data being repacked.\n   * @param range The texture range of texture data that is being repacked.\n   * @param originalData Pointer to the texture data to repack.\n   * @param originalDataBytesPerRow Bytes per row of original data. 0 means no padding per row\n   * (i.e., the data is packed).\n   * @param repackedData Pointer to the destination to write repacked data to.\n   * @param repackedBytesPerRow Bytes per row of repacked data. 0 means no padding per row\n   * (i.e., the data should be packed).\n   * @param flipVertical If true, the repacked data will be flipped vertically for each texture\n   * layer, cube face, and Z slice.\n   */\n  static void repackData(const TextureFormatProperties& properties,\n                         const TextureRangeDesc& range,\n                         const uint8_t* IGL_NONNULL originalData,\n                         size_t originalDataBytesPerRow,\n                         uint8_t* IGL_NONNULL repackedData,\n                         size_t repackedBytesPerRow,\n                         bool flipVertical = false);\n\n protected:\n  [[nodiscard]] const void* IGL_NONNULL getSubRangeStart(const void* IGL_NONNULL data,\n                                                         const TextureRangeDesc& range,\n                                                         const TextureRangeDesc& subRange,\n                                                         size_t bytesPerRow) const noexcept;\n\n  [[nodiscard]] virtual bool needsRepacking(IGL_MAYBE_UNUSED const TextureRangeDesc& range,\n                                            IGL_MAYBE_UNUSED size_t bytesPerRow) const {\n    return false;\n  }\n\n  [[nodiscard]] virtual Result uploadInternal(\n      IGL_MAYBE_UNUSED TextureType type,\n      IGL_MAYBE_UNUSED const TextureRangeDesc& range,\n      IGL_MAYBE_UNUSED const void* IGL_NULLABLE data,\n      IGL_MAYBE_UNUSED size_t bytesPerRow = 0,\n      IGL_MAYBE_UNUSED const uint32_t* IGL_NULLABLE mipLevelBytes = nullptr) const {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return Result{Result::Code::Unimplemented, \"Upload not implemented.\"};\n  }\n\n  const TextureFormatProperties properties_;\n};\n\n/**\n * @brief Holds textures associated with an externally owned surface (e.g., a window).\n */\nstruct SurfaceTextures {\n  /** @brief The surface's color texture. */\n  std::shared_ptr<ITexture> color;\n  /** @brief The surface's depth texture. */\n  std::shared_ptr<ITexture> depth;\n};\n\n} // namespace igl\n\nnamespace std {\n\n// Add a hash function for older compilers\ntemplate<>\nstruct hash<igl::TextureFormat> {\n  // Declare member\n  size_t operator()(const igl::TextureFormat& /*key*/) const;\n};\n\n} // namespace std\n"
  },
  {
    "path": "src/igl/TextureFormat.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n\nnamespace igl {\n\ninline TextureFormat sRGBToLinear(TextureFormat format) {\n  FOLLY_PUSH_WARNING\n  FOLLY_CLANG_DISABLE_WARNING(\"-Wswitch-enum\")\n  switch (format) {\n  case TextureFormat::RGBA_SRGB:\n    return TextureFormat::RGBA_UNorm8;\n  case TextureFormat::BGRA_SRGB:\n    return TextureFormat::BGRA_UNorm8;\n  // @fb-only\n    // @fb-only\n  // @fb-only\n    // @fb-only\n  default:\n    break;\n  }\n  FOLLY_POP_WARNING\n  IGL_UNREACHABLE_RETURN(TextureFormat::RGBA_UNorm8)\n}\n\ninline TextureFormat linearTosRGB(TextureFormat format) {\n  FOLLY_PUSH_WARNING\n  FOLLY_CLANG_DISABLE_WARNING(\"-Wswitch-enum\")\n  switch (format) {\n  case TextureFormat::RGBA_UNorm8:\n    return TextureFormat::RGBA_SRGB;\n  case TextureFormat::BGRA_UNorm8:\n    return TextureFormat::BGRA_SRGB;\n  // @fb-only\n    // @fb-only\n  // @fb-only\n    // @fb-only\n  default:\n    break;\n  }\n  FOLLY_POP_WARNING\n  IGL_UNREACHABLE_RETURN(TextureFormat::RGBA_SRGB)\n}\n\ninline TextureFormat BgraToRgba(TextureFormat format) {\n  if (format == TextureFormat::BGRA_UNorm8) {\n    return TextureFormat::RGBA_UNorm8;\n  } else if (format == TextureFormat::BGRA_SRGB) {\n    return TextureFormat::RGBA_SRGB;\n  }\n  return format;\n}\n\ninline TextureFormat RgbaToBgra(TextureFormat format) {\n  if (format == TextureFormat::RGBA_UNorm8) {\n    return TextureFormat::BGRA_UNorm8;\n  } else if (format == TextureFormat::RGBA_SRGB) {\n    return TextureFormat::BGRA_SRGB;\n  }\n  return format;\n}\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Timer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/ITrackedResource.h>\n\nnamespace igl {\n\nclass ITimer : public ITrackedResource<ITimer> {\n public:\n  ~ITimer() override = default;\n\n  /**\n   * If results are available, returns the measured time in nanoseconds. Otherwise, returns 0.\n   */\n  [[nodiscard]] virtual uint64_t getElapsedTimeNanos() const = 0;\n\n  /**\n   * Returns true if the timer results are available. Results should be available immediately after\n   * calling ICommandBuffer::waitUntilCompleted(), but if you do not wait for the command buffer,\n   * it may take a frame or two for the results to become available.\n   */\n  [[nodiscard]] virtual bool resultsAvailable() const = 0;\n\n protected:\n  ITimer() = default;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/TimestampQueries.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/ITrackedResource.h>\n\nnamespace igl {\n\nclass ITimestampQueries : public ITrackedResource<ITimestampQueries> {\n public:\n  ~ITimestampQueries() override = default;\n\n  /// Maximum number of timing slots this object can hold\n  [[nodiscard]] virtual uint32_t capacity() const = 0;\n\n  /// Number of timing slots recorded so far\n  [[nodiscard]] virtual uint32_t count() const = 0;\n\n  /// Reset the counter to 0 for reuse (does not deallocate)\n  virtual void reset() = 0;\n\n  /// True if GPU has completed and all recorded results are readable\n  [[nodiscard]] virtual bool resultsAvailable() const = 0;\n\n  /// Get the elapsed GPU time in nanoseconds for a timing slot.\n  /// A timing slot represents a single render pass measurement.\n  /// Metal: computes delta from two sampleBufferAttachments samples (slot*2, slot*2+1).\n  /// OpenGL: returns the GL_TIME_ELAPSED query result directly.\n  /// Default returns 0; override in backends that support per-slot elapsed queries.\n  [[nodiscard]] virtual uint64_t getElapsedNanos(uint32_t /*slotIndex*/) const {\n    return 0;\n  }\n\n protected:\n  ITimestampQueries() = default;\n};\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Uniform.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/Uniform.h>\n\n#include <igl/Core.h>\n\nnamespace igl {\n\nsize_t sizeForUniformType(UniformType type) {\n  switch (type) {\n  case UniformType::Invalid:\n    return 0;\n  case UniformType::Float:\n    return sizeof(float);\n  case UniformType::Float2:\n    return sizeof(float[2]);\n  case UniformType::Float3:\n    return sizeof(float[3]);\n  case UniformType::Float4:\n    return sizeof(float[4]);\n  case UniformType::Boolean:\n    return sizeof(bool);\n  case UniformType::Int:\n    return sizeof(int32_t);\n  case UniformType::Int2:\n    return sizeof(int32_t[2]);\n  case UniformType::Int3:\n    return sizeof(int32_t[3]);\n  case UniformType::Int4:\n    return sizeof(int32_t[4]);\n  case UniformType::Mat2x2:\n    return sizeof(float[2][2]);\n  case UniformType::Mat3x3:\n    return sizeof(float[3][3]);\n  case UniformType::Mat4x4:\n    return sizeof(float[4][4]);\n  default:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED(); // missing enum case\n    return 0;\n  }\n}\n\n// Returns the size of the underlying element\nsize_t sizeForUniformElementType(UniformType type) {\n  switch (type) {\n  case UniformType::Invalid:\n    return 0;\n\n  case UniformType::Float:\n  case UniformType::Float2:\n  case UniformType::Float3:\n  case UniformType::Float4:\n  case UniformType::Mat2x2:\n  case UniformType::Mat3x3:\n  case UniformType::Mat4x4:\n    return sizeof(float);\n\n  case UniformType::Boolean:\n    return sizeof(bool);\n\n  case UniformType::Int:\n  case UniformType::Int2:\n  case UniformType::Int3:\n  case UniformType::Int4:\n    return sizeof(int32_t);\n\n  default:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED(); // missing enum case\n    return 0;\n  }\n}\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/Uniform.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstddef>\n#include <cstdint>\n#include <string>\n\nnamespace igl {\n\n/// Type of individual uniform value.\nenum class UniformType : uint8_t {\n  Invalid = 0,\n  Float,\n  Float2,\n  Float3,\n  Float4,\n  Boolean,\n  Int,\n  Int2,\n  Int3,\n  Int4,\n  Mat2x2,\n  Mat3x3,\n  Mat4x4\n};\n\n/// Information required to be specified when binding non-block uniforms\n/// Only used when binding to opengl 2.0 shaders as uniform blocks are not supported in that\n/// version. Code that can use uniform blocks should use uniform blocks.\nstruct UniformDesc {\n  std::string name;\n  int location = -1;\n  UniformType type = UniformType::Invalid;\n  size_t numElements = 1; // number of elements for arrays\n  size_t offset = 0;\n  size_t elementStride = 0;\n};\n\nsize_t sizeForUniformType(UniformType type);\nsize_t sizeForUniformElementType(UniformType type);\n\n} // namespace igl\n"
  },
  {
    "path": "src/igl/VertexInputState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/VertexInputState.h>\n\nusing namespace igl;\n\nsize_t VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat format) {\n  switch (format) {\n  case VertexAttributeFormat::Float1:\n    return sizeof(float);\n\n  case VertexAttributeFormat::Float2:\n    return sizeof(float[2]);\n\n  case VertexAttributeFormat::Float3:\n    return sizeof(float[3]);\n\n  case VertexAttributeFormat::Float4:\n    return sizeof(float[4]);\n\n  case VertexAttributeFormat::Byte1:\n  case VertexAttributeFormat::Byte1Norm:\n    return sizeof(int8_t);\n\n  case VertexAttributeFormat::Byte2:\n  case VertexAttributeFormat::Byte2Norm:\n    return sizeof(int8_t[2]);\n\n  case VertexAttributeFormat::Byte3:\n  case VertexAttributeFormat::Byte3Norm:\n    return sizeof(int8_t[3]);\n\n  case VertexAttributeFormat::Byte4:\n  case VertexAttributeFormat::Byte4Norm:\n    return sizeof(int8_t[4]);\n\n  case VertexAttributeFormat::UByte1:\n  case VertexAttributeFormat::UByte1Norm:\n    return sizeof(uint8_t[1]);\n\n  case VertexAttributeFormat::UByte2:\n  case VertexAttributeFormat::UByte2Norm:\n    return sizeof(uint8_t[2]);\n\n  case VertexAttributeFormat::UByte3:\n  case VertexAttributeFormat::UByte3Norm:\n    return sizeof(uint8_t[3]);\n\n  case VertexAttributeFormat::UByte4:\n  case VertexAttributeFormat::UByte4Norm:\n    return sizeof(uint8_t[4]);\n\n  case VertexAttributeFormat::Short1:\n  case VertexAttributeFormat::Short1Norm:\n    return sizeof(int16_t);\n\n  case VertexAttributeFormat::Short2:\n  case VertexAttributeFormat::Short2Norm:\n    return sizeof(int16_t[2]);\n\n  case VertexAttributeFormat::Short3:\n  case VertexAttributeFormat::Short3Norm:\n    return sizeof(int16_t[3]);\n\n  case VertexAttributeFormat::Short4:\n  case VertexAttributeFormat::Short4Norm:\n    return sizeof(int16_t[4]);\n\n  case VertexAttributeFormat::UShort1:\n  case VertexAttributeFormat::UShort1Norm:\n    return sizeof(uint16_t);\n\n  case VertexAttributeFormat::UShort2:\n  case VertexAttributeFormat::UShort2Norm:\n    return sizeof(uint16_t[2]);\n\n  case VertexAttributeFormat::UShort3:\n  case VertexAttributeFormat::UShort3Norm:\n    return sizeof(uint16_t[3]);\n\n  case VertexAttributeFormat::UShort4:\n  case VertexAttributeFormat::UShort4Norm:\n    return sizeof(uint16_t[4]);\n\n  case VertexAttributeFormat::Int1:\n  case VertexAttributeFormat::UInt1:\n    return sizeof(uint32_t[1]);\n\n  case VertexAttributeFormat::Int2:\n  case VertexAttributeFormat::UInt2:\n    return sizeof(uint32_t[2]);\n\n  case VertexAttributeFormat::Int3:\n  case VertexAttributeFormat::UInt3:\n    return sizeof(uint32_t[3]);\n\n  case VertexAttributeFormat::Int4:\n  case VertexAttributeFormat::UInt4:\n    return sizeof(uint32_t[4]);\n\n  case VertexAttributeFormat::HalfFloat1:\n    return sizeof(uint16_t[1]);\n  case VertexAttributeFormat::HalfFloat2:\n    return sizeof(uint16_t[2]);\n  case VertexAttributeFormat::HalfFloat3:\n    return sizeof(uint16_t[3]);\n  case VertexAttributeFormat::HalfFloat4:\n    return sizeof(uint16_t[4]);\n\n  case VertexAttributeFormat::Int_2_10_10_10_REV:\n    return sizeof(uint32_t);\n  }\n  IGL_UNREACHABLE_RETURN(0)\n}\n\nsize_t std::hash<VertexInputBinding>::operator()(const VertexInputBinding& key) const {\n  size_t hash = 0;\n  hash ^= std::hash<int>()(static_cast<int>(key.sampleRate));\n  hash ^= std::hash<int>()(EnumToValue(key.sampleFunction));\n  hash ^= std::hash<int>()(static_cast<int>(key.stride));\n  return hash;\n}\n\nsize_t std::hash<VertexAttribute>::operator()(const VertexAttribute& key) const {\n  size_t hash = 0;\n  hash ^= std::hash<std::string>()(key.name);\n  hash ^= std::hash<int>()(key.location);\n  hash ^= std::hash<uintptr_t>()(key.offset);\n  hash ^= std::hash<size_t>()(key.bufferIndex);\n  hash ^= std::hash<int>()(static_cast<int>(EnumToValue(key.format)));\n  return hash;\n}\n\nbool VertexInputStateDesc::operator==(const VertexInputStateDesc& other) const {\n  if (other.numAttributes != numAttributes || other.numInputBindings != numInputBindings) {\n    return false;\n  }\n\n  for (auto i = 0; i < numAttributes; i++) {\n    if (other.attributes[i] != attributes[i]) {\n      return false;\n    }\n  }\n\n  for (auto i = 0; i < numInputBindings; i++) {\n    if (other.inputBindings[i] != inputBindings[i]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nsize_t std::hash<VertexInputStateDesc>::operator()(const VertexInputStateDesc& key) const {\n  size_t hash = 0;\n  hash ^= std::hash<size_t>()(key.numInputBindings);\n  hash ^= std::hash<size_t>()(key.numAttributes);\n\n  for (size_t i = 0; i < key.numAttributes; i++) {\n    hash ^= std::hash<VertexAttribute>()(key.attributes[i]);\n  }\n\n  for (size_t i = 0; i < key.numInputBindings; i++) {\n    hash ^= std::hash<VertexInputBinding>()(key.inputBindings[i]);\n  }\n  return hash;\n}\n"
  },
  {
    "path": "src/igl/VertexInputState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <utility>\n#include <igl/Common.h>\n\nnamespace igl {\n\n/**\n * @brief Represents vertex attribute data types for both scalar and vector values\n */\nenum class VertexAttributeFormat {\n  Float1 = 0,\n  Float2,\n  Float3,\n  Float4,\n\n  Byte1,\n  Byte2,\n  Byte3,\n  Byte4,\n\n  UByte1,\n  UByte2,\n  UByte3,\n  UByte4,\n\n  Short1,\n  Short2,\n  Short3,\n  Short4,\n\n  UShort1,\n  UShort2,\n  UShort3,\n  UShort4,\n\n  // Normalized variants\n  Byte1Norm,\n  Byte2Norm,\n  Byte3Norm,\n  Byte4Norm,\n\n  UByte1Norm,\n  UByte2Norm,\n  UByte3Norm,\n  UByte4Norm,\n\n  Short1Norm,\n  Short2Norm,\n  Short3Norm,\n  Short4Norm,\n\n  UShort1Norm,\n  UShort2Norm,\n  UShort3Norm,\n  UShort4Norm,\n\n  Int1,\n  Int2,\n  Int3,\n  Int4,\n\n  UInt1,\n  UInt2,\n  UInt3,\n  UInt4,\n\n  // packed formats\n  HalfFloat1,\n  HalfFloat2,\n  HalfFloat3,\n  HalfFloat4,\n\n  // NOLINTNEXTLINE(readability-identifier-naming)\n  Int_2_10_10_10_REV, // standard format to store normal vectors\n};\n\n/**\n * @brief Controls how vertex attribute streams are consumed, per-vertex or per-instance\n */\nenum class VertexSampleFunction {\n  Constant,\n  PerVertex,\n  Instance,\n\n  // Missing Tessellation support\n};\n\n/**\n * @brief Generic definition of a vertex attribute stream\n */\nstruct VertexAttribute {\n  /** @brief A buffer which contains this attribute stream */\n  size_t bufferIndex = 0;\n  /** @brief Per-element format */\n  VertexAttributeFormat format = VertexAttributeFormat::Float1;\n  /** @brief An offset where the first element of this attribute stream starts */\n  uintptr_t offset = 0;\n  std::string name; // GLES Only\n  int location = -1; // Metal only\n\n  bool operator==(const VertexAttribute& other) const = default;\n  bool operator!=(const VertexAttribute& other) const = default;\n};\n\n/**\n * @brief Defines a binding point for a vertex stream\n */\nstruct VertexInputBinding {\n  size_t stride = 0;\n  VertexSampleFunction sampleFunction = VertexSampleFunction::PerVertex;\n  size_t sampleRate = 1;\n\n  bool operator==(const VertexInputBinding& other) const = default;\n  bool operator!=(const VertexInputBinding& other) const = default;\n};\n\n/**\n * @brief Defines input to a vertex shader\n */\nstruct VertexInputStateDesc {\n  size_t numAttributes = 0;\n  VertexAttribute attributes[IGL_VERTEX_ATTRIBUTES_MAX];\n  size_t numInputBindings = 0;\n  VertexInputBinding inputBindings[IGL_BUFFER_BINDINGS_MAX];\n  static size_t sizeForVertexAttributeFormat(VertexAttributeFormat format);\n\n  bool operator==(const VertexInputStateDesc& other) const;\n};\n\n/**\n * @brief Represents input to a vertex shader in a form of an object which can be used with\n * RenderPipelineState\n */\nclass IVertexInputState {\n public:\n protected:\n  IVertexInputState() = default;\n  virtual ~IVertexInputState() = default;\n};\n\n} // namespace igl\n\n// Hashing function declarations\nnamespace std {\ntemplate<>\nstruct hash<igl::VertexInputStateDesc> {\n  size_t operator()(const igl::VertexInputStateDesc& /*key*/) const;\n};\n\ntemplate<>\nstruct hash<igl::VertexInputBinding> {\n  size_t operator()(const igl::VertexInputBinding& /*key*/) const;\n};\n\ntemplate<>\nstruct hash<igl::VertexAttribute> {\n  size_t operator()(const igl::VertexAttribute& /*key*/) const;\n};\n\n} // namespace std\n"
  },
  {
    "path": "src/igl/android/LogDefault.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/android/LogDefault.h>\n\n#include <android/log.h>\n\nnamespace {\n\nandroid_LogPriority logPriorityFromLogLevel(IGLLogLevel logLevel) noexcept {\n  switch (logLevel) {\n  case IGLLogError:\n    return ANDROID_LOG_ERROR;\n  case IGLLogWarning:\n    return ANDROID_LOG_WARN;\n  case IGLLogInfo:\n    return ANDROID_LOG_INFO;\n  }\n}\n\n} // namespace\n\nIGL_API int IGLAndroidLogDefaultHandler(IGLLogLevel logLevel,\n                                        const char* IGL_RESTRICT format,\n                                        va_list ap) {\n  return __android_log_vprint(logPriorityFromLogLevel(logLevel), \"IGL\", format, ap);\n}\n"
  },
  {
    "path": "src/igl/android/LogDefault.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdarg>\n#include <igl/Core.h>\n\n// At startup, install an Android-specific log handler, so logging shows up in `adb logcat`:\n// ```\n// IGLLogSetHandler(IGLAndroidLogDefaultHandler);\n// ```\n\nextern \"C\" {\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nIGL_API int IGLAndroidLogDefaultHandler(IGLLogLevel logLevel,\n                                        const char* IGL_RESTRICT format,\n                                        va_list ap);\n}\n"
  },
  {
    "path": "src/igl/android/NativeHWBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n// @fb-only\n\n#include \"NativeHWBuffer.h\"\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\nnamespace igl::android {\n\nuint32_t getNativeHWFormat(TextureFormat iglFormat) {\n  // note that Native HW buffer has compute specific format but is not added here.\n  switch (iglFormat) {\n  case TextureFormat::RGBX_UNorm8:\n    return AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM;\n\n  case TextureFormat::RGBA_UNorm8:\n    return AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;\n\n  case TextureFormat::B5G6R5_UNorm:\n    return AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM;\n\n  case TextureFormat::RGBA_F16:\n    return AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT;\n\n  case TextureFormat::RGB10_A2_UNorm_Rev:\n    return AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM;\n\n  case TextureFormat::Z_UNorm16:\n    return AHARDWAREBUFFER_FORMAT_D16_UNORM;\n\n  case TextureFormat::Z_UNorm24:\n    return AHARDWAREBUFFER_FORMAT_D24_UNORM;\n\n  case TextureFormat::Z_UNorm32:\n    return AHARDWAREBUFFER_FORMAT_D32_FLOAT;\n\n  case TextureFormat::S8_UInt_Z24_UNorm:\n    return AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT;\n\n  case TextureFormat::S_UInt8:\n    return AHARDWAREBUFFER_FORMAT_S8_UINT;\n\n  case TextureFormat::YUV_NV12:\n    return AHARDWAREBUFFER_FORMAT_YCbCr_420_SP_VENUS;\n\n#if __ANDROID_MIN_SDK_VERSION__ >= 30\n  case TextureFormat::YUV_420p:\n    return AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420;\n#endif\n\n  default:\n    return 0;\n  }\n}\n\nuint32_t getNativeHWBufferUsage(TextureDesc::TextureUsage iglUsage) {\n  uint64_t bufferUsage = 0;\n\n  if (iglUsage & TextureDesc::TextureUsageBits::Sampled) {\n    bufferUsage |= AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;\n  }\n  if (iglUsage & TextureDesc::TextureUsageBits::Storage) {\n    bufferUsage |= AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN | AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN;\n  }\n  if (iglUsage & TextureDesc::TextureUsageBits::Attachment) {\n    bufferUsage |= AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT;\n  }\n\n  return bufferUsage;\n}\n\nTextureFormat getIglFormat(uint32_t nativeFormat) {\n  // note that Native HW buffer has compute specific format but is not added here.\n  switch (nativeFormat) {\n  case AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM:\n    return TextureFormat::RGBX_UNorm8;\n\n  case AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM:\n    return TextureFormat::RGBA_UNorm8;\n\n  case AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM:\n    return TextureFormat::B5G6R5_UNorm;\n\n  case AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT:\n    return TextureFormat::RGBA_F16;\n\n  case AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM:\n    return TextureFormat::RGB10_A2_UNorm_Rev;\n\n  case AHARDWAREBUFFER_FORMAT_D16_UNORM:\n    return TextureFormat::Z_UNorm16;\n\n  case AHARDWAREBUFFER_FORMAT_D24_UNORM:\n    return TextureFormat::Z_UNorm24;\n\n  case AHARDWAREBUFFER_FORMAT_D32_FLOAT:\n    return TextureFormat::Z_UNorm32;\n\n  case AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT:\n    return TextureFormat::S8_UInt_Z24_UNorm;\n\n  case AHARDWAREBUFFER_FORMAT_S8_UINT:\n    return TextureFormat::S_UInt8;\n\n  case AHARDWAREBUFFER_FORMAT_YCbCr_420_SP_VENUS:\n  case COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m:\n    return TextureFormat::YUV_NV12;\n\n#if __ANDROID_MIN_SDK_VERSION__ >= 30\n  case AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420:\n    return TextureFormat::YUV_420p;\n#endif\n\n  default:\n    return TextureFormat::Invalid;\n  }\n}\n\nTextureDesc::TextureUsage getIglBufferUsage(uint32_t nativeUsage) {\n  TextureDesc::TextureUsage bufferUsage = 0;\n\n  if (nativeUsage & AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE) {\n    bufferUsage |= TextureDesc::TextureUsageBits::Sampled;\n  }\n  if (nativeUsage &\n      (AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN | AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN)) {\n    bufferUsage |= TextureDesc::TextureUsageBits::Storage;\n  }\n  if (nativeUsage & AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT) {\n    bufferUsage |= TextureDesc::TextureUsageBits::Attachment;\n  }\n\n  return bufferUsage;\n}\n\nResult allocateNativeHWBuffer(const TextureDesc& desc,\n                              bool surfaceComposite,\n                              AHardwareBuffer** buffer) {\n  AHardwareBuffer_Desc bufferDesc = {};\n  bufferDesc.format = getNativeHWFormat(desc.format);\n  bufferDesc.width = desc.width;\n  bufferDesc.height = desc.height;\n  bufferDesc.layers = 1;\n  bufferDesc.usage = getNativeHWBufferUsage(desc.usage);\n  bufferDesc.rfu0 = 0;\n  bufferDesc.rfu1 = 0;\n\n#if __ANDROID_MIN_SDK_VERSION__ >= 33\n  bufferDesc.usage |= surfaceComposite ? AHARDWAREBUFFER_USAGE_COMPOSER_OVERLAY : 0;\n#endif // __ANDROID_MIN_SDK_VERSION__ >= 33\n\n  const auto code = AHardwareBuffer_allocate(&bufferDesc, buffer);\n  if (code != 0) {\n    return Result(Result::Code::RuntimeError, \"AHardwareBuffer allocation failed\");\n  }\n\n  return Result();\n}\n\nINativeHWTextureBuffer::LockGuard::~LockGuard() {\n  if (hwBufferOwner_ != nullptr) {\n    hwBufferOwner_->unlockHWBuffer();\n  }\n}\n\nINativeHWTextureBuffer::LockGuard::LockGuard(const INativeHWTextureBuffer* hwBufferOwner) :\n  hwBufferOwner_(hwBufferOwner) {}\n\nINativeHWTextureBuffer::LockGuard::LockGuard(INativeHWTextureBuffer::LockGuard&& g) {\n  hwBufferOwner_ = g.hwBufferOwner_;\n  g.hwBufferOwner_ = nullptr;\n}\n\nResult INativeHWTextureBuffer::createWithHWBuffer(AHardwareBuffer* buffer) {\n  if (hwBuffer_) {\n    return Result{Result::Code::InvalidOperation, \"Hardware buffer already provided\"};\n  }\n\n  AHardwareBuffer_acquire(buffer);\n\n  // textureDesc_ should be updated through createTextureInternal function.\n  Result result = createTextureInternal(buffer);\n  if (!result.isOk()) {\n    AHardwareBuffer_release(buffer);\n  } else {\n    hwBuffer_ = buffer;\n  }\n\n  return result;\n}\n\nResult INativeHWTextureBuffer::createHWBuffer(const TextureDesc& desc,\n                                              bool hasStorageAlready,\n                                              bool surfaceComposite) {\n  if (hwBuffer_) {\n    IGL_LOG_ERROR(\"hw already provided\");\n    return Result{Result::Code::InvalidOperation, \"Hardware buffer already provided\"};\n  }\n\n  const bool isValid = desc.numLayers == 1 && desc.numSamples == 1 && desc.numMipLevels == 1 &&\n                       desc.usage != 0 && desc.type == TextureType::TwoD &&\n                       desc.tiling == igl::TextureDesc::TextureTiling::Optimal &&\n                       igl::android::getNativeHWFormat(desc.format) > 0 && !hasStorageAlready &&\n                       desc.storage == ResourceStorage::Shared;\n  if (!isValid) {\n    IGL_LOG_ERROR(\"invalid desc for HW\");\n    // failed on (1 1 1) (5 1 0) (1 0 0)\n    IGL_LOG_ERROR(\"DESC: (%d %d %d) (%d %d %d) (%d %d %d)\",\n                  desc.numLayers, // 1\n                  desc.numSamples, // 1\n                  desc.numMipLevels, // 1\n\n                  desc.usage, // != 0\n                  desc.type, // 1 = TwoD\n                  desc.tiling, // 0 = Optimal\n\n                  igl::android::getNativeHWFormat(desc.format),\n                  (int)hasStorageAlready,\n                  desc.storage // 2 = shared\n    );\n\n    return Result(Result::Code::Unsupported, \"Invalid texture description\");\n  }\n\n  AHardwareBuffer* buffer = nullptr;\n  auto allocationResult = igl::android::allocateNativeHWBuffer(desc, surfaceComposite, &buffer);\n  if (!allocationResult.isOk()) {\n    IGL_LOG_ERROR(\"HW alloc failed\");\n    return allocationResult;\n  }\n\n  Result result = createTextureInternal(buffer);\n  if (!result.isOk()) {\n    IGL_LOG_ERROR(\"HW internal failed\");\n    AHardwareBuffer_release(buffer);\n  } else {\n    hwBuffer_ = buffer;\n    textureDesc_ = desc;\n  }\n\n  return result;\n}\n\nINativeHWTextureBuffer::LockGuard INativeHWTextureBuffer::lockHWBuffer(std::byte * IGL_NULLABLE *\n                                                                           IGL_NONNULL dst,\n                                                                       RangeDesc& outRange,\n                                                                       Result* outResult) const {\n  Result result = lockHWBuffer(dst, outRange);\n  Result::setResult(outResult, result);\n  return INativeHWTextureBuffer::LockGuard(result.isOk() ? this : nullptr);\n}\n\nResult INativeHWTextureBuffer::lockHWBuffer(std::byte * IGL_NULLABLE * IGL_NONNULL dst,\n                                            RangeDesc& outRange) const {\n  AHardwareBuffer_Desc hwbDesc;\n  AHardwareBuffer_describe(hwBuffer_, &hwbDesc);\n\n  if (AHardwareBuffer_lock(hwBuffer_,\n                           AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN,\n                           -1,\n                           nullptr,\n                           reinterpret_cast<void**>(dst))) {\n    IGL_DEBUG_ABORT(\"Failed to lock hardware buffer\");\n    return Result(Result::Code::RuntimeError, \"Failed to lock hardware buffer\");\n  }\n\n  outRange.width = hwbDesc.width;\n  outRange.height = hwbDesc.height;\n  outRange.layer = 1;\n  outRange.mipLevel = 1;\n  outRange.stride = hwbDesc.stride;\n\n  return Result();\n}\n\nResult INativeHWTextureBuffer::unlockHWBuffer() const {\n  if (AHardwareBuffer_unlock(hwBuffer_, nullptr)) {\n    IGL_DEBUG_ABORT(\"Failed to unlock hardware buffer\");\n    return Result(Result::Code::RuntimeError, \"Failed to unlock hardware buffer\");\n  }\n  return Result();\n}\n\nAHardwareBuffer* INativeHWTextureBuffer::getHardwareBuffer() const {\n  return hwBuffer_;\n}\n\nTextureDesc INativeHWTextureBuffer::getTextureDesc() const {\n  return textureDesc_;\n}\n\n} // namespace igl::android\n\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n"
  },
  {
    "path": "src/igl/android/NativeHWBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n// @fb-only\n// @fb-only\n\n#include <igl/Core.h>\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n#if !defined(AHARDWAREBUFFER_FORMAT_YCbCr_420_SP_VENUS)\n#define AHARDWAREBUFFER_FORMAT_YCbCr_420_SP_VENUS 0x7FA30C06\n#endif\n\n#if !defined(COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m)\n#define COLOR_QCOM_FORMATYUV420PackedSemiPlanar32m 0x7FA30C04\n#endif\n\n#include <android/hardware_buffer.h>\n#include <igl/Texture.h>\n#include <igl/TextureFormat.h>\n\nnamespace igl::android {\n\nclass INativeHWTextureBuffer {\n public:\n  struct LockGuard {\n   public:\n    ~LockGuard();\n\n    LockGuard(const LockGuard&) = delete;\n    LockGuard(LockGuard&& g);\n\n   private:\n    friend class INativeHWTextureBuffer;\n\n    LockGuard(const INativeHWTextureBuffer* hwBufferOwner = nullptr);\n\n    const INativeHWTextureBuffer* hwBufferOwner_;\n  };\n\n  struct RangeDesc : TextureRangeDesc {\n    size_t stride = 0;\n  };\n\n  virtual ~INativeHWTextureBuffer() {\n    if (hwBuffer_ != nullptr) {\n      AHardwareBuffer_release(hwBuffer_);\n      hwBuffer_ = nullptr;\n    }\n  }\n\n  Result createWithHWBuffer(AHardwareBuffer* buffer);\n\n  Result createHWBuffer(const TextureDesc& desc, bool hasStorageAlready, bool surfaceComposite);\n\n  [[nodiscard]] LockGuard lockHWBuffer(std::byte * IGL_NULLABLE * IGL_NONNULL dst,\n                                       RangeDesc& outRange,\n                                       Result* outResult) const;\n\n  Result lockHWBuffer(std::byte * IGL_NULLABLE * IGL_NONNULL dst, RangeDesc& outRange) const;\n  Result unlockHWBuffer() const;\n\n  [[nodiscard]] AHardwareBuffer* getHardwareBuffer() const;\n\n  [[nodiscard]] TextureDesc getTextureDesc() const;\n\n protected:\n  virtual Result createTextureInternal(AHardwareBuffer* buffer) = 0;\n  AHardwareBuffer* hwBuffer_ = nullptr;\n  TextureDesc textureDesc_;\n};\n\n// utils\n\nuint32_t getNativeHWFormat(TextureFormat iglFormat);\nuint32_t getNativeHWBufferUsage(TextureDesc::TextureUsage iglUsage);\n\nTextureFormat getIglFormat(uint32_t nativeFormat);\nTextureDesc::TextureUsage getIglBufferUsage(uint32_t nativeUsage);\n\nResult allocateNativeHWBuffer(const TextureDesc& desc,\n                              bool surfaceComposite,\n                              AHardwareBuffer** buffer);\n\n} // namespace igl::android\n\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n"
  },
  {
    "path": "src/igl/apple/LogDefault.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/apple/LogDefault.h>\n\n#if !IGL_PLATFORM_APPLE\n#error This file should only be compiled on Apple targets\n#endif // !IGL_PLATFORM_APPLE\n\n#include <cstdio>\n#include <os/log.h>\n\nIGL_API int IGLAppleLogDefaultHandler(IGLLogLevel logLevel,\n                                      const char* IGL_RESTRICT format,\n                                      va_list ap) {\n  // Format the message into a buffer for os_log\n  char buf[4096];\n  int result = vsnprintf(buf, sizeof(buf), format, ap);\n\n  switch (logLevel) {\n  case IGLLogError:\n    os_log_error(OS_LOG_DEFAULT, \"[IGL] %{public}s\", buf);\n    break;\n  case IGLLogWarning:\n    os_log(OS_LOG_DEFAULT, \"[IGL] %{public}s\", buf);\n    break;\n  case IGLLogInfo:\n    os_log_info(OS_LOG_DEFAULT, \"[IGL] %{public}s\", buf);\n    break;\n  }\n\n  return result;\n}\n"
  },
  {
    "path": "src/igl/apple/LogDefault.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdarg>\n#include <igl/Core.h>\n\n// At startup, install an Apple-specific log handler, so logging shows up in Console.app / os_log:\n// ```\n// IGLLogSetHandler(IGLAppleLogDefaultHandler);\n// ```\n\nextern \"C\" {\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nIGL_API int IGLAppleLogDefaultHandler(IGLLogLevel logLevel,\n                                      const char* IGL_RESTRICT format,\n                                      va_list ap);\n}\n"
  },
  {
    "path": "src/igl/base/Common.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstddef>\n#include <cstdint>\n\nnamespace igl::base {\n\n/// @brief Backend type enumeration\nenum class BackendType {\n  Invalid,\n  OpenGL,\n  Metal,\n  Vulkan,\n  D3D12,\n  // @fb-only\n  Custom,\n};\n\n/**\n *\n * The IGL format name specification is as follows:\n *\n *  There shall be 3 naming format base types: those for component array\n *  formats (type A); those for compressed formats (type C); and those for\n *  packed component formats (type P). With type A formats, color component\n *  order does not change with endianness. Each format name shall begin with\n *  TextureFormat::, followed by a component label (from the Component Label\n *  list below) for each component in the order that the component(s) occur\n *  in the format, except for non-linear color formats where the first\n *  letter shall be 'S'. For type P formats, each component label is\n *  followed by the number of bits that represent it in the fundamental\n *  data type used by the format.\n *\n *  Following the listing of the component labels shall be an underscore; a\n *  compression type followed by an underscore for Type C formats only; a\n *  storage type from the list below; and a bit width for type A formats,\n *  which is the bit width for each array element.\n *\n *  If a format is vendor-specific, then a \"_vendor\" post fix may be\n *  added to the type\n *\n *\n *  ----------    Format Base Type A: Array ----------\n *  TextureFormat::[component list]_[storage type][array element bit width][_vendor]\n *\n *  Examples:\n *  TextureFormat::A_SNorm8 - uchar[i] = A\n *  TextureFormat::RGBA_SNorm16 - ushort[i * 4 + 0] = R, ushort[i * 4 + 1] = G,\n *                                ushort[i * 4 + 2] = B, ushort[i * 4 + 3] = A\n *  TextureFormat::Z_UNorm32 - int32[i] = Z\n *\n *\n *  ----------    Format Base Type C: Compressed ----------\n *  TextureFormat::[component list#][_*][compression type][_*][block size][_*][storage type#]\n *    # where required\n *\n *  Examples:\n *  TextureFormat::RGB_ETC1\n *  TextureFormat::RGBA_ASTC_4x4\n *  TextureFormat::RGB_PVRTC_2BPPV1\n *\n *\n *  ----------    Format Base Type P: Packed  ----------\n *  TextureFormat::[[component list,bit width][storage type#][_]][_][storage type##][_storage\n * order###][_vendor#]\n *    # when type differs between component\n *    ## when type applies to all components\n *    ### when storage order is hardware independent\n *\n *  Examples:\n *  TextureFormat::A8B8G8R8_UNorm\n *  TextureFormat::R5G6B5_UNorm\n *  TextureFormat::B4G4R4X4_UNorm\n *  TextureFormat::Z32_F_S8X24_UInt\n *  TextureFormat::R10G10B10A2_UInt\n *  TextureFormat::R9G9B9E5_F\n *  TextureFormat::BGRA_UNorm8_Rev\n *\n *\n *  ----------    Component Labels: ----------\n *  A - Alpha\n *  B - Blue\n *  G - Green\n *  I - Intensity\n *  L - Luminance\n *  R - Red\n *  S - Stencil (when not followed by RGB or RGBA)\n *  S - non-linear types (when followed by RGB or RGBA)\n *  X - Packing bits\n *  Z - Depth\n *\n *  ----------    Storage Types: ----------\n *  F: float\n *  SInt: Signed Integer\n *  UInt: Unsigned Integer\n *  SNorm: Signed Normalized Integer/Byte\n *  UNorm: Unsigned Normalized Integer/Byte\n *\n *  ----------    Type C Compression Types: Additional Info ----------\n *  ETC1 - No other information required\n *  ETC2 - No other information required\n *  ASTC - Block size shall be given\n *  PVRTC - Block size shall be given\n *\n */\n\n// NOLINTBEGIN(readability-identifier-naming)\nenum class TextureFormat : uint8_t {\n  Invalid = 0,\n\n  // 8 bpp\n  A_UNorm8,\n  L_UNorm8,\n  R_UNorm8,\n\n  // 16 bpp\n  R_F16,\n  R_UInt16,\n  R_UNorm16,\n  B5G5R5A1_UNorm,\n  B5G6R5_UNorm,\n  ABGR_UNorm4, // NA on GLES\n  LA_UNorm8,\n  RG_UNorm8,\n  R4G2B2_UNorm_Apple,\n  R4G2B2_UNorm_Rev_Apple,\n  R5G5B5A1_UNorm,\n\n  // 24 bpp\n  RGBX_UNorm8,\n\n  // 32 bpp\n  RGBA_UNorm8,\n  BGRA_UNorm8,\n  BGRA_UNorm8_Rev,\n  RGBA_SRGB,\n  BGRA_SRGB,\n  RG_F16,\n  RG_UInt16,\n  RG_UNorm16,\n  RGB10_A2_UNorm_Rev,\n  RGB10_A2_Uint_Rev,\n  BGR10_A2_Unorm,\n  R_F32,\n  R_UInt32,\n  // 48 bpp\n  RGB_F16,\n\n  // 64 bpp\n  RGBA_UNorm16,\n  RGBA_F16,\n  RG_F32,\n\n  // 96 bpp\n  RGB_F32,\n\n  // 128 bpp\n  RGBA_UInt32,\n  RGBA_F32,\n\n  // Compressed\n  RGBA_ASTC_4x4,\n  SRGB8_A8_ASTC_4x4,\n  RGBA_ASTC_5x4,\n  SRGB8_A8_ASTC_5x4,\n  RGBA_ASTC_5x5,\n  SRGB8_A8_ASTC_5x5,\n  RGBA_ASTC_6x5,\n  SRGB8_A8_ASTC_6x5,\n  RGBA_ASTC_6x6,\n  SRGB8_A8_ASTC_6x6,\n  RGBA_ASTC_8x5,\n  SRGB8_A8_ASTC_8x5,\n  RGBA_ASTC_8x6,\n  SRGB8_A8_ASTC_8x6,\n  RGBA_ASTC_8x8,\n  SRGB8_A8_ASTC_8x8,\n  RGBA_ASTC_10x5,\n  SRGB8_A8_ASTC_10x5,\n  RGBA_ASTC_10x6,\n  SRGB8_A8_ASTC_10x6,\n  RGBA_ASTC_10x8,\n  SRGB8_A8_ASTC_10x8,\n  RGBA_ASTC_10x10,\n  SRGB8_A8_ASTC_10x10,\n  RGBA_ASTC_12x10,\n  SRGB8_A8_ASTC_12x10,\n  RGBA_ASTC_12x12,\n  SRGB8_A8_ASTC_12x12,\n  RGBA_PVRTC_2BPPV1,\n  RGB_PVRTC_2BPPV1,\n  RGBA_PVRTC_4BPPV1,\n  RGB_PVRTC_4BPPV1,\n  RGB8_ETC1,\n  RGB8_ETC2,\n  SRGB8_ETC2,\n  RGB8_Punchthrough_A1_ETC2,\n  SRGB8_Punchthrough_A1_ETC2,\n  RGBA8_EAC_ETC2,\n  SRGB8_A8_EAC_ETC2,\n  RG_EAC_UNorm,\n  RG_EAC_SNorm,\n  R_EAC_UNorm,\n  R_EAC_SNorm,\n  RGBA_BC7_UNORM_4x4, // block compression\n  RGBA_BC7_SRGB_4x4, // block compression\n\n  // Depth and Stencil formats\n  Z_UNorm16, // NA on iOS/Metal but works on iOS GLES. The client has to account for\n             // this!\n  Z_UNorm24,\n  Z_UNorm32, // NA on iOS/GLES but works on iOS Metal. The client has to account for\n             // this!\n  S8_UInt_Z24_UNorm,\n  S8_UInt_Z32_UNorm, // NA on iOS/GLES but works on iOS Metal. The client has to\n                     // account for this!\n  S_UInt8,\n\n  YUV_NV12, // Semi-planar 8-bit YUV 4:2:0 NV12; 2 planes in a single image\n  YUV_420p, // Tri-planar  8-bit YUV 4:2:0;      3 planes in a single image\n\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n};\n// NOLINTEND(readability-identifier-naming)\n\n/**\n * @brief TextureType denotes the possible storage components of the underlying surface for the\n * texture. For example, TwoD corresponds to 2-dimensional textures.\n *\n *  Invalid          - Undefined,\n *  TwoD             - Single layer, two dimensional: (Width, Height)\n *  TwoDArray        - Multiple layers, two dimensional: (Width, Height)\n *  ThreeD           - 3 dimensional textures: (Width, Height, Depth)\n *  Cube             - Special case of 3 dimensional textures: (Width, Height, Depth), along with 6\n *                     cube faces\n *  ExternalImage    - Externally provided images, EXTERNAL_OES on OpenGLES\n */\nenum class TextureType : uint8_t {\n  Invalid,\n  TwoD,\n  TwoDArray,\n  ThreeD,\n  Cube,\n  ExternalImage,\n};\n\n} // namespace igl::base\n"
  },
  {
    "path": "src/igl/base/IAttachmentInterop.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/base/Common.h>\n\nnamespace igl::base {\n\n/// @brief Basic attachment descriptor for interoperability\nstruct AttachmentInteropDesc {\n  uint32_t width = 1;\n  uint32_t height = 1;\n  uint32_t depth = 1;\n  uint32_t numLayers = 1;\n  uint32_t numSamples = 1;\n  uint32_t numMipLevels = 1;\n  TextureType type = TextureType::TwoD;\n  TextureFormat format = TextureFormat::Invalid;\n  bool isSampled = true;\n};\n\n/// @brief Attachment interface for interoperability\nclass IAttachmentInterop {\n public:\n  virtual ~IAttachmentInterop() = default;\n\n  /// @brief Get native image handle\n  /// @return Platform-specific image handle\n  [[nodiscard]] virtual void* getNativeImage() const = 0;\n\n  /// @brief Get native image view handle (if applicable)\n  /// @return Platform-specific image view handle\n  [[nodiscard]] virtual void* getNativeImageView() const = 0;\n\n  /// @brief Get the attachment descriptor\n  [[nodiscard]] virtual const AttachmentInteropDesc& getDesc() const = 0;\n};\n\n} // namespace igl::base\n"
  },
  {
    "path": "src/igl/base/IDeviceBase.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/base/Common.h>\n#include <igl/base/IAttachmentInterop.h>\n#include <igl/base/IFramebufferInterop.h>\n#include <igl/base/IStagingBufferInterop.h>\n\nnamespace igl::base {\n\n/// @brief Base device interface for interoperability\nclass IDeviceBase {\n public:\n  virtual ~IDeviceBase() = default;\n\n  /// @brief Returns the backend type\n  [[nodiscard]] virtual BackendType getBackendType() const = 0;\n\n  /// @brief Returns raw pointer to native device handle\n  /// @return Platform-specific device handle\n  [[nodiscard]] virtual void* getNativeDevice() const = 0;\n\n  /// @brief Create a framebuffer for interoperability\n  /// @param desc The framebuffer descriptor\n  /// @param outResult Optional pointer to receive the result code\n  /// @return Raw pointer to created framebuffer. Caller MUST take ownership of the returned\n  ///         pointer, otherwise it will be a memory leak. Use delete to destroy.\n  ///         Returns nullptr if the framebuffer cannot be created.\n  [[nodiscard]] virtual IFramebufferInterop* createFramebufferInterop(\n      const FramebufferInteropDesc& desc) = 0;\n\n  /// @brief Get access to the staging buffer\n  /// @return Pointer to the staging buffer interface, or nullptr if not available\n  ///         Returns nullptr if the staging buffer is not available.\n  [[nodiscard]] virtual IStagingBufferInterop* getStagingBufferInterop() = 0;\n};\n\n} // namespace igl::base\n"
  },
  {
    "path": "src/igl/base/IFramebufferInterop.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstddef>\n#include <cstdint>\n#include <igl/base/IAttachmentInterop.h>\n\nnamespace igl::base {\n\n/// Maximum number of color attachments supported\nconstexpr uint32_t kMaxColorAttachments = 4;\n\n/// @brief Framebuffer descriptor for interoperability\nstruct FramebufferInteropDesc {\n  AttachmentInteropDesc* colorAttachments[kMaxColorAttachments] = {};\n  AttachmentInteropDesc* depthAttachment = nullptr;\n  AttachmentInteropDesc* stencilAttachment = nullptr;\n};\n\n/// @brief Framebuffer interface for interoperability\nclass IFramebufferInterop {\n public:\n  virtual ~IFramebufferInterop() = default;\n\n  /// @brief Get color attachment at specified index\n  /// @param index The color attachment index (0 to kMaxColorAttachments-1)\n  /// @return Non-owning pointer to the color attachmant, or nullptr if not set\n  [[nodiscard]] virtual IAttachmentInterop* getColorAttachment(size_t index) const = 0;\n\n  /// @brief Get depth attachment\n  /// @return Non-owning pointer to the depth attachment, or nullptr if not set\n  [[nodiscard]] virtual IAttachmentInterop* getDepthAttachment() const = 0;\n\n  /// @brief Get native framebuffer handle (backend-specific)\n  /// @return Platform-specific framebuffer handle if applicable, otherwise nullptr\n  [[nodiscard]] virtual void* getNativeFramebuffer() const = 0;\n};\n\n} // namespace igl::base\n"
  },
  {
    "path": "src/igl/base/IStagingBufferInterop.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstddef>\n#include <cstdint>\n\nnamespace igl::base {\n\n/// @brief Information about a staging buffer region for external copy command generation\n/// @note This struct is only valid until removeRegion() is called with it.\n///       After removeRegion(), the info becomes invalid and must not be used.\nstruct StagingBufferRegionInfo {\n  /// @brief Region handle for tracking\n  uint64_t handle = 0;\n\n  /// @brief Total size of the underlying staging buffer\n  size_t size = 0;\n};\n\n/// @brief Information about the destination for an upload operation\nstruct UploadDestinationInfo {\n  /// @brief Native handle to the destination resource (buffer or texture)\n  void* nativeHandle = nullptr;\n\n  /// @brief Byte offset within the destination resource\n  size_t offset = 0;\n\n  /// @brief Size of the upload region in bytes\n  size_t size = 0;\n\n  /// @brief Pointer to native struct with additional data for image uploads\n  ///        E.g. texture destination may require mip level, face index, etc.\n  ///        Must be set to nullptr for buffer uploads.\n  void* imageData = nullptr;\n};\n\n/// @brief Base staging buffer interface for interoperability\nclass IStagingBufferInterop {\n public:\n  /// @brief Allocate a staging buffer region of the specified size\n  /// @param size The size in bytes of the region to allocate\n  /// @return Info about the allocated region. Valid until removeRegion() is called.\n  [[nodiscard]] virtual StagingBufferRegionInfo allocateRegion(size_t size) = 0;\n\n  /// @brief Upload data to a buffer or texture via a staging buffer region\n  /// @param region The staging buffer region info returned by allocateRegion()\n  /// @param destInfo The destination info for the upload operation\n  /// @param data Pointer to source data\n  virtual void upload(const StagingBufferRegionInfo& region,\n                      const UploadDestinationInfo& destInfo,\n                      const void* data) = 0;\n\n  /// @brief Release the staging buffer region\n  /// @param info The staging buffer info returned by allocateRegion().\n  ///             After this call, the info becomes invalid and must not be used.\n  virtual void removeRegion(const StagingBufferRegionInfo& info) = 0;\n\n protected:\n  // Protected to prevent destruction through this interface\n  virtual ~IStagingBufferInterop() = default;\n};\n\n} // namespace igl::base\n"
  },
  {
    "path": "src/igl/d3d12/Buffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/Buffer.h>\n\n#include <cstring>\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/D3D12StateTransition.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/UploadRingBuffer.h>\n\nnamespace igl::d3d12 {\n\nnamespace {\nconstexpr D3D12_RESOURCE_DESC makeBufferDesc(\n    UINT64 size,\n    D3D12_RESOURCE_FLAGS flags = D3D12_RESOURCE_FLAG_NONE) {\n  D3D12_RESOURCE_DESC desc = {};\n  desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;\n  desc.Alignment = 0;\n  desc.Width = size;\n  desc.Height = 1;\n  desc.DepthOrArraySize = 1;\n  desc.MipLevels = 1;\n  desc.Format = DXGI_FORMAT_UNKNOWN;\n  desc.SampleDesc.Count = 1;\n  desc.SampleDesc.Quality = 0;\n  desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;\n  desc.Flags = flags;\n  return desc;\n}\n} // namespace\n\nBuffer::Buffer(Device& device,\n               igl::d3d12::ComPtr<ID3D12Resource> resource,\n               const BufferDesc& desc,\n               D3D12_RESOURCE_STATES initialState) :\n  device_(&device),\n  resource_(std::move(resource)),\n  desc_(desc),\n  defaultState_(computeDefaultState(desc)),\n  currentState_(initialState) {\n  // Determine storage type based on heap properties\n  if (resource_.Get()) {\n    D3D12_HEAP_PROPERTIES heapProps;\n    D3D12_HEAP_FLAGS heapFlags;\n    resource_->GetHeapProperties(&heapProps, &heapFlags);\n\n    if (heapProps.Type == D3D12_HEAP_TYPE_UPLOAD) {\n      storage_ = ResourceStorage::Shared;\n    } else if (heapProps.Type == D3D12_HEAP_TYPE_READBACK) {\n      storage_ = ResourceStorage::Shared;\n    } else {\n      storage_ = ResourceStorage::Private;\n    }\n\n    if (storage_ != ResourceStorage::Private) {\n      currentState_ = D3D12_RESOURCE_STATE_GENERIC_READ;\n    }\n\n    // Track resource creation\n    D3D12Context::trackResourceCreation(\"Buffer\", desc_.length);\n  }\n}\n\nBuffer::~Buffer() {\n  if (resource_.Get()) {\n    // Track resource destruction\n    D3D12Context::trackResourceDestruction(\"Buffer\", desc_.length);\n  }\n  if (mappedPtr_) {\n    unmap();\n  }\n}\n\nResult Buffer::upload(const void* data, const BufferRange& range) {\n  if (resource_.Get() == nullptr) {\n    return Result(Result::Code::ArgumentInvalid, \"Buffer resource is null\");\n  }\n\n  if (!data) {\n    IGL_LOG_ERROR(\"Buffer::upload: data is NULL!\\n\");\n    return Result(Result::Code::ArgumentInvalid, \"Upload data is null\");\n  }\n\n  // Validate range\n  if (range.size == 0 || range.offset + range.size > desc_.length) {\n    return Result(Result::Code::ArgumentOutOfRange, \"Upload range is out of bounds\");\n  }\n\n  // For UPLOAD heap, map, copy, unmap\n  if (storage_ == ResourceStorage::Shared) {\n    void* mappedData = nullptr;\n    D3D12_RANGE readRange = {0, 0}; // Not reading from GPU\n\n    HRESULT hr = resource_->Map(0, &readRange, &mappedData);\n    if (FAILED(hr)) {\n      return Result(Result::Code::RuntimeError, \"Failed to map buffer\");\n    }\n\n    uint8_t* dest = static_cast<uint8_t*>(mappedData) + range.offset;\n    std::memcpy(dest, data, range.size);\n\n    D3D12_RANGE writtenRange = {range.offset, range.offset + range.size};\n    resource_->Unmap(0, &writtenRange);\n\n    return Result(Result::Code::Ok);\n  }\n\n  // For DEFAULT heap, need upload via intermediate buffer\n  if (!device_) {\n    return Result(Result::Code::RuntimeError, \"Buffer device is null\");\n  }\n\n  auto& ctx = device_->getD3D12Context();\n  ID3D12Device* d3dDevice = ctx.getDevice();\n  ID3D12CommandQueue* queue = ctx.getCommandQueue();\n  if (!d3dDevice || !queue) {\n    return Result(Result::Code::RuntimeError, \"D3D12 device or command queue unavailable\");\n  }\n\n  // Reclaim completed upload buffers before allocating new ones.\n  device_->processCompletedUploads();\n\n  UploadRingBuffer* ringBuffer = device_->getUploadRingBuffer();\n  UploadRingBuffer::Allocation ringAllocation;\n  bool useRingBuffer = false;\n\n  // Get fence value that will signal when this upload completes\n  const UINT64 uploadFenceValue = device_->getNextUploadFenceValue();\n\n  if (ringBuffer) {\n    // D3D12 requires 256-byte alignment (D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT)\n    ringAllocation = ringBuffer->allocate(\n        range.size, D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT, uploadFenceValue);\n\n    if (ringAllocation.valid) {\n      // Successfully allocated from ring buffer\n      std::memcpy(ringAllocation.cpuAddress, data, range.size);\n      useRingBuffer = true;\n    }\n  }\n\n  // Fallback: create temporary upload buffer if ring buffer allocation failed\n  igl::d3d12::ComPtr<ID3D12Resource> uploadBuffer;\n  HRESULT hr = S_OK;\n\n  if (!useRingBuffer) {\n    D3D12_HEAP_PROPERTIES uploadHeapProps = {};\n    uploadHeapProps.Type = D3D12_HEAP_TYPE_UPLOAD;\n    const auto uploadDesc = makeBufferDesc(range.size);\n    hr = d3dDevice->CreateCommittedResource(&uploadHeapProps,\n                                            D3D12_HEAP_FLAG_NONE,\n                                            &uploadDesc,\n                                            D3D12_RESOURCE_STATE_GENERIC_READ,\n                                            nullptr,\n                                            IID_PPV_ARGS(uploadBuffer.GetAddressOf()));\n    if (FAILED(hr)) {\n      return Result(Result::Code::RuntimeError, \"Failed to create upload buffer\");\n    }\n\n    void* mapped = nullptr;\n    D3D12_RANGE rr = {0, 0};\n    hr = uploadBuffer->Map(0, &rr, &mapped);\n    if (FAILED(hr) || mapped == nullptr) {\n      return Result(Result::Code::RuntimeError, \"Failed to map upload buffer\");\n    }\n    std::memcpy(mapped, data, range.size);\n    uploadBuffer->Unmap(0, nullptr);\n  }\n\n  igl::d3d12::ComPtr<ID3D12CommandAllocator> allocator = device_->getUploadCommandAllocator();\n  if (!allocator.Get()) {\n    return Result(Result::Code::RuntimeError, \"Failed to get command allocator from pool\");\n  }\n\n  igl::d3d12::ComPtr<ID3D12GraphicsCommandList> cmdList;\n  hr = d3dDevice->CreateCommandList(0,\n                                    D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                    allocator.Get(),\n                                    nullptr,\n                                    IID_PPV_ARGS(cmdList.GetAddressOf()));\n  if (FAILED(hr)) {\n    // Return allocator to pool with fence value 0 (immediately available)\n    device_->returnUploadCommandAllocator(allocator, 0);\n    return Result(Result::Code::RuntimeError, \"Failed to create command list for upload\");\n  }\n\n  if (currentState_ != D3D12_RESOURCE_STATE_COPY_DEST) {\n    // Validate state transition and insert intermediate state if needed\n    const bool needsIntermediate = !D3D12StateTransition::isLegalDirectTransition(\n        currentState_, D3D12_RESOURCE_STATE_COPY_DEST);\n\n    if (needsIntermediate) {\n      // Transition to COMMON first\n      D3D12_RESOURCE_BARRIER toCommon = {};\n      toCommon.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      toCommon.Transition.pResource = resource_.Get();\n      toCommon.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      toCommon.Transition.StateBefore = currentState_;\n      toCommon.Transition.StateAfter = D3D12_RESOURCE_STATE_COMMON;\n      cmdList->ResourceBarrier(1, &toCommon);\n      currentState_ = D3D12_RESOURCE_STATE_COMMON;\n    }\n\n    // Now transition to COPY_DEST (guaranteed legal from COMMON or if direct was legal)\n    D3D12_RESOURCE_BARRIER toCopyDest = {};\n    toCopyDest.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n    toCopyDest.Transition.pResource = resource_.Get();\n    toCopyDest.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n    toCopyDest.Transition.StateBefore = currentState_;\n    toCopyDest.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST;\n    cmdList->ResourceBarrier(1, &toCopyDest);\n  }\n\n  // Copy from either ring buffer or temporary upload buffer\n  if (useRingBuffer) {\n    cmdList->CopyBufferRegion(resource_.Get(),\n                              range.offset,\n                              ringBuffer->getUploadHeap(),\n                              ringAllocation.offset,\n                              range.size);\n  } else {\n    cmdList->CopyBufferRegion(resource_.Get(), range.offset, uploadBuffer.Get(), 0, range.size);\n  }\n\n  // Prepare state transition barriers but defer state update until after GPU completes\n  D3D12_RESOURCE_STATES postState = (defaultState_ == D3D12_RESOURCE_STATE_COMMON)\n                                        ? D3D12_RESOURCE_STATE_GENERIC_READ\n                                        : defaultState_;\n\n  if (postState != D3D12_RESOURCE_STATE_COPY_DEST) {\n    // Validate state transition and insert intermediate state if needed\n    const bool needsIntermediate =\n        !D3D12StateTransition::isLegalDirectTransition(D3D12_RESOURCE_STATE_COPY_DEST, postState);\n\n    if (needsIntermediate) {\n      // Transition to COMMON first\n      D3D12_RESOURCE_BARRIER toCommon = {};\n      toCommon.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      toCommon.Transition.pResource = resource_.Get();\n      toCommon.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      toCommon.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST;\n      toCommon.Transition.StateAfter = D3D12_RESOURCE_STATE_COMMON;\n      cmdList->ResourceBarrier(1, &toCommon);\n\n      // Then transition to final state\n      D3D12_RESOURCE_BARRIER toFinal = {};\n      toFinal.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      toFinal.Transition.pResource = resource_.Get();\n      toFinal.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      toFinal.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;\n      toFinal.Transition.StateAfter = postState;\n      cmdList->ResourceBarrier(1, &toFinal);\n    } else {\n      // Direct transition is legal\n      D3D12_RESOURCE_BARRIER toDefault = {};\n      toDefault.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      toDefault.Transition.pResource = resource_.Get();\n      toDefault.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      toDefault.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST;\n      toDefault.Transition.StateAfter = postState;\n      cmdList->ResourceBarrier(1, &toDefault);\n    }\n  }\n\n  hr = cmdList->Close();\n  if (FAILED(hr)) {\n    // Return allocator to pool with fence value 0 (immediately available)\n    device_->returnUploadCommandAllocator(allocator, 0);\n    return Result(Result::Code::RuntimeError, \"Failed to close upload command list\");\n  }\n\n  ID3D12CommandList* lists[] = {cmdList.Get()};\n  queue->ExecuteCommandLists(1, lists);\n\n  // Ensure the allocator is not reused until GPU completes execution\n  ID3D12Fence* uploadFence = device_->getUploadFence();\n\n  // Signal must succeed; otherwise fence will never reach uploadFenceValue\n  hr = queue->Signal(uploadFence, uploadFenceValue);\n  if (FAILED(hr)) {\n    // Return allocator immediately (no fence wait needed)\n    device_->returnUploadCommandAllocator(allocator, 0);\n\n    // Check for device removal to provide richer diagnostics\n    Result deviceStatus = device_->checkDeviceRemoval();\n    if (!deviceStatus.isOk()) {\n      return deviceStatus; // Device removed - return specific error\n    }\n\n    return Result(Result::Code::RuntimeError, \"Failed to signal upload fence\");\n  }\n\n  // Return allocator to pool with fence value (will be reused after fence is signaled)\n  device_->returnUploadCommandAllocator(allocator, uploadFenceValue);\n\n  // Only track temporary upload buffers (ring buffer is persistent)\n  // Pass uploadFenceValue (already signaled above) to track with correct fence\n  if (!useRingBuffer && uploadBuffer.Get()) {\n    device_->trackUploadBuffer(std::move(uploadBuffer), uploadFenceValue);\n  }\n\n  // Wait for upload fence to signal before returning.\n  // This ensures the buffer upload completes before the caller uses it.\n  Result waitResult = device_->waitForUploadFence(uploadFenceValue);\n  if (!waitResult.isOk()) {\n    return waitResult;\n  }\n\n  // Now safe to update resource state; GPU upload has completed\n  currentState_ = (postState != D3D12_RESOURCE_STATE_COPY_DEST) ? postState\n                                                                : D3D12_RESOURCE_STATE_COPY_DEST;\n\n  return Result(Result::Code::Ok);\n}\n\nvoid* Buffer::map(const BufferRange& range, Result* IGL_NULLABLE outResult) {\n  if (resource_.Get() == nullptr) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Buffer resource is null\");\n    return nullptr;\n  }\n\n  // Validate range\n  if (range.offset > desc_.length || range.size > desc_.length ||\n      (range.offset + range.size) > desc_.length) {\n    Result::setResult(outResult, Result::Code::ArgumentOutOfRange, \"Map range is out of bounds\");\n    return nullptr;\n  }\n\n  // Handle mapping of DEFAULT heap storage buffers requested as Shared\n  // This happens when compute shader output buffers need to be read back\n  const bool isStorageBuffer = (desc_.type & BufferDesc::BufferTypeBits::Storage) != 0;\n  const bool requestedShared =\n      (desc_.storage == ResourceStorage::Shared || desc_.storage == ResourceStorage::Managed);\n  const bool needsReadbackStaging = (storage_ != ResourceStorage::Shared) && isStorageBuffer &&\n                                    requestedShared;\n\n  if (needsReadbackStaging) {\n    // Storage buffer in DEFAULT heap but requested as Shared - need staging\n    if (!device_) {\n      Result::setResult(outResult, Result::Code::RuntimeError, \"Device is null\");\n      return nullptr;\n    }\n\n    auto& ctx = device_->getD3D12Context();\n    auto* d3dDevice = ctx.getDevice();\n    auto* queue = ctx.getCommandQueue();\n\n    if (!d3dDevice || !queue) {\n      Result::setResult(outResult, Result::Code::RuntimeError, \"D3D12 device or queue is null\");\n      return nullptr;\n    }\n\n    // Create READBACK staging buffer if not already created\n    if (!readbackStagingBuffer_.Get()) {\n      D3D12_HEAP_PROPERTIES readbackHeap = {};\n      readbackHeap.Type = D3D12_HEAP_TYPE_READBACK;\n      readbackHeap.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;\n      readbackHeap.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;\n\n      D3D12_RESOURCE_DESC bufferDesc = {};\n      bufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;\n      bufferDesc.Alignment = 0;\n      bufferDesc.Width = desc_.length;\n      bufferDesc.Height = 1;\n      bufferDesc.DepthOrArraySize = 1;\n      bufferDesc.MipLevels = 1;\n      bufferDesc.Format = DXGI_FORMAT_UNKNOWN;\n      bufferDesc.SampleDesc.Count = 1;\n      bufferDesc.SampleDesc.Quality = 0;\n      bufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;\n      bufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE;\n\n      HRESULT hr =\n          d3dDevice->CreateCommittedResource(&readbackHeap,\n                                             D3D12_HEAP_FLAG_NONE,\n                                             &bufferDesc,\n                                             D3D12_RESOURCE_STATE_COPY_DEST,\n                                             nullptr,\n                                             IID_PPV_ARGS(readbackStagingBuffer_.GetAddressOf()));\n\n      if (FAILED(hr)) {\n        Result::setResult(\n            outResult, Result::Code::RuntimeError, \"Failed to create readback staging buffer\");\n        return nullptr;\n      }\n    }\n\n    // ALWAYS copy from DEFAULT buffer to readback staging when mapping\n    // The DEFAULT buffer content may have changed since the last map() call\n    // (e.g., via copyTextureToBuffer or compute shader writes)\n    IGL_D3D12_LOG_VERBOSE(\n        \"Buffer::map() - Copying from DEFAULT buffer (resource=%p) to readback staging\\n\",\n        resource_.Get());\n\n    // D-001: Use pooled allocator instead of creating transient one\n    auto allocator = device_->getUploadCommandAllocator();\n    if (!allocator.Get()) {\n      Result::setResult(outResult, Result::Code::RuntimeError, \"Failed to get allocator from pool\");\n      return nullptr;\n    }\n\n    igl::d3d12::ComPtr<ID3D12GraphicsCommandList> cmdList;\n    if (FAILED(d3dDevice->CreateCommandList(0,\n                                            D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                            allocator.Get(),\n                                            nullptr,\n                                            IID_PPV_ARGS(cmdList.GetAddressOf())))) {\n      Result::setResult(\n          outResult, Result::Code::RuntimeError, \"Failed to create command list for buffer copy\");\n      // D-001: Return allocator to pool even on failure\n      device_->returnUploadCommandAllocator(allocator, 0);\n      return nullptr;\n    }\n\n    // Transition source buffer to COPY_SOURCE with validation.\n    const D3D12_RESOURCE_STATES assumedState = D3D12_RESOURCE_STATE_UNORDERED_ACCESS;\n    const bool needsIntermediate = !D3D12StateTransition::isLegalDirectTransition(\n        assumedState, D3D12_RESOURCE_STATE_COPY_SOURCE);\n\n    if (needsIntermediate) {\n      // Transition to COMMON first\n      D3D12_RESOURCE_BARRIER toCommon = {};\n      toCommon.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      toCommon.Transition.pResource = resource_.Get();\n      toCommon.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      toCommon.Transition.StateBefore = assumedState;\n      toCommon.Transition.StateAfter = D3D12_RESOURCE_STATE_COMMON;\n      cmdList->ResourceBarrier(1, &toCommon);\n\n      // Then to COPY_SOURCE\n      D3D12_RESOURCE_BARRIER toCopySource = {};\n      toCopySource.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      toCopySource.Transition.pResource = resource_.Get();\n      toCopySource.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      toCopySource.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;\n      toCopySource.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_SOURCE;\n      cmdList->ResourceBarrier(1, &toCopySource);\n    } else {\n      // Direct transition is legal\n      D3D12_RESOURCE_BARRIER barrier = {};\n      barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      barrier.Transition.pResource = resource_.Get();\n      barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      barrier.Transition.StateBefore = assumedState;\n      barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_SOURCE;\n      cmdList->ResourceBarrier(1, &barrier);\n    }\n\n    // Copy entire buffer.\n    cmdList->CopyBufferRegion(readbackStagingBuffer_.Get(), 0, resource_.Get(), 0, desc_.length);\n\n    // Transition back with validation.\n    const bool needsIntermediateBack = !D3D12StateTransition::isLegalDirectTransition(\n        D3D12_RESOURCE_STATE_COPY_SOURCE, assumedState);\n\n    if (needsIntermediateBack) {\n      // Transition to COMMON first\n      D3D12_RESOURCE_BARRIER toCommon = {};\n      toCommon.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      toCommon.Transition.pResource = resource_.Get();\n      toCommon.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      toCommon.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_SOURCE;\n      toCommon.Transition.StateAfter = D3D12_RESOURCE_STATE_COMMON;\n      cmdList->ResourceBarrier(1, &toCommon);\n\n      // Then back to original state\n      D3D12_RESOURCE_BARRIER toOriginal = {};\n      toOriginal.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      toOriginal.Transition.pResource = resource_.Get();\n      toOriginal.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      toOriginal.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;\n      toOriginal.Transition.StateAfter = assumedState;\n      cmdList->ResourceBarrier(1, &toOriginal);\n    } else {\n      // Direct transition is legal\n      D3D12_RESOURCE_BARRIER barrier = {};\n      barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      barrier.Transition.pResource = resource_.Get();\n      barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_SOURCE;\n      barrier.Transition.StateAfter = assumedState;\n      cmdList->ResourceBarrier(1, &barrier);\n    }\n\n    cmdList->Close();\n    ID3D12CommandList* lists[] = {cmdList.Get()};\n    queue->ExecuteCommandLists(1, lists);\n\n    // Wait for copy to complete\n    ctx.waitForGPU();\n\n    // D-001: Return allocator to pool after synchronous GPU wait\n    device_->returnUploadCommandAllocator(allocator, 0);\n\n    // Map the READBACK staging buffer\n    D3D12_RANGE readRange = {static_cast<SIZE_T>(range.offset),\n                             static_cast<SIZE_T>(range.offset + range.size)};\n    HRESULT hr = readbackStagingBuffer_->Map(0, &readRange, &mappedPtr_);\n\n    if (FAILED(hr)) {\n      Result::setResult(\n          outResult, Result::Code::RuntimeError, \"Failed to map readback staging buffer\");\n      return nullptr;\n    }\n\n    Result::setOk(outResult);\n    return static_cast<uint8_t*>(mappedPtr_) + range.offset;\n  }\n\n  // Standard path for UPLOAD/READBACK heap buffers\n  if (storage_ != ResourceStorage::Shared) {\n    Result::setResult(outResult,\n                      Result::Code::Unsupported,\n                      \"Cannot map GPU-only buffer (use ResourceStorage::Shared)\");\n    return nullptr;\n  }\n\n  if (mappedPtr_) {\n    // Already mapped, return offset pointer\n    Result::setOk(outResult);\n    return static_cast<uint8_t*>(mappedPtr_) + range.offset;\n  }\n\n  D3D12_RANGE readRange = {0, 0}; // Not reading from GPU\n  HRESULT hr = resource_->Map(0, &readRange, &mappedPtr_);\n\n  if (FAILED(hr)) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Failed to map buffer\");\n    return nullptr;\n  }\n\n  Result::setOk(outResult);\n  return static_cast<uint8_t*>(mappedPtr_) + range.offset;\n}\n\nvoid Buffer::unmap() {\n  if (!mappedPtr_) {\n    return;\n  }\n\n  // Unmap the appropriate resource (staging buffer or main buffer)\n  if (readbackStagingBuffer_.Get()) {\n    readbackStagingBuffer_->Unmap(0, nullptr);\n  } else if (resource_.Get()) {\n    resource_->Unmap(0, nullptr);\n  }\n\n  mappedPtr_ = nullptr;\n}\n\nBufferDesc::BufferAPIHint Buffer::requestedApiHints() const noexcept {\n  return desc_.hint;\n}\n\nBufferDesc::BufferAPIHint Buffer::acceptedApiHints() const noexcept {\n  return desc_.hint;\n}\n\nResourceStorage Buffer::storage() const noexcept {\n  return storage_;\n}\n\nsize_t Buffer::getSizeInBytes() const {\n  return desc_.length;\n}\n\nuint64_t Buffer::gpuAddress(size_t offset) const {\n  if (resource_.Get() == nullptr) {\n    return 0;\n  }\n\n  return resource_->GetGPUVirtualAddress() + offset;\n}\n\nBufferDesc::BufferType Buffer::getBufferType() const {\n  return desc_.type;\n}\n\nD3D12_RESOURCE_STATES Buffer::computeDefaultState(const BufferDesc& desc) const {\n  D3D12_RESOURCE_STATES state = D3D12_RESOURCE_STATE_COMMON;\n\n  if ((desc.type & BufferDesc::BufferTypeBits::Storage) != 0) {\n    state |= D3D12_RESOURCE_STATE_UNORDERED_ACCESS;\n  }\n  if ((desc.type & BufferDesc::BufferTypeBits::Vertex) != 0 ||\n      (desc.type & BufferDesc::BufferTypeBits::Uniform) != 0) {\n    state |= D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER;\n  }\n  if ((desc.type & BufferDesc::BufferTypeBits::Index) != 0) {\n    state |= D3D12_RESOURCE_STATE_INDEX_BUFFER;\n  }\n  if ((desc.type & BufferDesc::BufferTypeBits::Indirect) != 0) {\n    state |= D3D12_RESOURCE_STATE_INDIRECT_ARGUMENT;\n  }\n\n  if (state == D3D12_RESOURCE_STATE_COMMON) {\n    return D3D12_RESOURCE_STATE_GENERIC_READ;\n  }\n\n  // Remove COMMON bit if other bits are set.\n  state &= ~D3D12_RESOURCE_STATE_COMMON;\n  return state;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Buffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12StateTransition.h>\n\nnamespace igl::d3d12 {\n\nclass Device;\n\nclass Buffer final : public IBuffer, public std::enable_shared_from_this<Buffer> {\n public:\n  Buffer(Device& device,\n         igl::d3d12::ComPtr<ID3D12Resource> resource,\n         const BufferDesc& desc,\n         D3D12_RESOURCE_STATES initialState);\n  ~Buffer() override;\n\n  Result upload(const void* data, const BufferRange& range) override;\n  void* map(const BufferRange& range, Result* IGL_NULLABLE outResult) override;\n  void unmap() override;\n\n  BufferDesc::BufferAPIHint requestedApiHints() const noexcept override;\n  BufferDesc::BufferAPIHint acceptedApiHints() const noexcept override;\n  ResourceStorage storage() const noexcept override;\n\n  size_t getSizeInBytes() const override;\n  uint64_t gpuAddress(size_t offset = 0) const override;\n\n  BufferDesc::BufferType getBufferType() const override;\n\n  // D3D12-specific accessors\n  ID3D12Resource* getResource() const {\n    return resource_.Get();\n  }\n  // Returns the element stride in bytes for storage buffers, as provided in BufferDesc.\n  // A value of 0 means \"unspecified\"; callers should fall back to a reasonable default\n  // (e.g. 4 bytes) when this occurs.\n  size_t getStorageElementStride() const noexcept {\n    return desc_.storageStride;\n  }\n\n private:\n  [[nodiscard]] D3D12_RESOURCE_STATES computeDefaultState(const BufferDesc& desc) const;\n\n  Device* device_ = nullptr;\n  igl::d3d12::ComPtr<ID3D12Resource> resource_;\n  BufferDesc desc_;\n  void* mappedPtr_ = nullptr;\n  ResourceStorage storage_ = ResourceStorage::Private;\n  D3D12_RESOURCE_STATES defaultState_ = D3D12_RESOURCE_STATE_GENERIC_READ;\n  // State tracking: single non-mutable field, updated only via non-const methods\n  D3D12_RESOURCE_STATES currentState_ = D3D12_RESOURCE_STATE_COMMON;\n\n  // Staging buffer for mapping DEFAULT heap storage buffers requested as Shared\n  igl::d3d12::ComPtr<ID3D12Resource> readbackStagingBuffer_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nproject(IGLD3D12 CXX C)\n\nfile(GLOB SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp)\nfile(GLOB HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)\n\nadd_library(IGLD3D12 ${SRC_FILES} ${HEADER_FILES})\n\ntarget_link_libraries(IGLD3D12 PRIVATE IGLLibrary IGLGlslang)\n\nigl_set_cxxstd(IGLD3D12 20)\nigl_set_folder(IGLD3D12 \"IGL\")\n\n# Link DirectX 12 system libraries\ntarget_link_libraries(IGLD3D12 PUBLIC\n  d3d12.lib\n  dxgi.lib\n  dxguid.lib\n  dxcompiler.lib\n  d3dcompiler.lib\n)\n\ntarget_compile_definitions(IGLD3D12 PUBLIC \"NOMINMAX\")\n\n# DirectX headers (fetched via bootstrap-deps)\nif(NOT DIRECTX_HEADERS_INCLUDE_DIR)\n  set(DIRECTX_HEADERS_INCLUDE_DIR \"${IGL_ROOT_DIR}/third-party/deps/src/DirectX-Headers/include/directx\")\nendif()\ntarget_include_directories(IGLD3D12 PUBLIC \"${DIRECTX_HEADERS_INCLUDE_DIR}\")\nif(TARGET Microsoft::DirectX-Headers)\n  target_link_libraries(IGLD3D12 PUBLIC Microsoft::DirectX-Headers)\nendif()\n\n# Include SPIRV-Cross for potential SPIR-V to HLSL conversion\ntarget_include_directories(IGLD3D12 PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/SPIRV-Cross\")\ntarget_include_directories(IGLD3D12 PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/glslang\")\n\n# Windows-specific definitions (removed - defined in D3D12Headers.h to avoid conflicts)\n\nif(WIN32 AND MSVC)\n  # Enable multithreaded compilation\n  target_compile_options(IGLD3D12 PRIVATE \"/MP\")\n  # Disable NOMINMAX warning (already defined in D3D12Headers.h)\n  target_compile_options(IGLD3D12 PRIVATE \"/wd4005\")\n  # Note: /Zc:preprocessor (conformant preprocessor) causes issues with\n  # some d3dx12 headers and WRL, so we're using the traditional preprocessor\n\n  # Note: dxil.dll deployment is now handled by individual executable targets\n  # (shell sessions and tests) to ensure it's copied to the correct directories.\n  # See shell/windows/CMakeLists.txt and src/igl/tests/CMakeLists.txt\nendif()\n"
  },
  {
    "path": "src/igl/d3d12/CommandBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/CommandBuffer.h>\n\n#include <igl/d3d12/Buffer.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/ComputeCommandEncoder.h>\n#include <igl/d3d12/D3D12FenceWaiter.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/RenderCommandEncoder.h>\n#include <igl/d3d12/Texture.h>\n#include <igl/d3d12/Timer.h>\n\nnamespace igl::d3d12 {\n\nCommandBuffer::CommandBuffer(Device& device, const CommandBufferDesc& desc) :\n  ICommandBuffer(desc), device_(device) {\n  auto* d3dDevice = device_.getD3D12Context().getDevice();\n\n  if (!d3dDevice) {\n    IGL_DEBUG_ASSERT(false, \"D3D12 device is null - context not initialized\");\n    IGL_LOG_ERROR(\"D3D12 device is null - context not initialized\");\n    return; // Leave commandList_ null to indicate failure\n  }\n\n  // Check if device is in good state\n  HRESULT deviceRemovedReason = d3dDevice->GetDeviceRemovedReason();\n  if (FAILED(deviceRemovedReason)) {\n    char errorMsg[512];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"D3D12 device was removed before creating command buffer. Reason: 0x%08X\\n\"\n             \"  0x887A0005 = DXGI_ERROR_DEVICE_REMOVED\\n\"\n             \"  0x887A0006 = DXGI_ERROR_DEVICE_HUNG\\n\"\n             \"  0x887A0007 = DXGI_ERROR_DEVICE_RESET\\n\"\n             \"  0x887A0020 = DXGI_ERROR_DRIVER_INTERNAL_ERROR\",\n             static_cast<unsigned>(deviceRemovedReason));\n    IGL_LOG_ERROR(errorMsg);\n    IGL_DEBUG_ASSERT(false, \"Device removed - see error above\");\n    return; // Leave commandList_ null to indicate failure\n  }\n\n  // Use the current frame's command allocator - allocators are created ready-to-use\n  // Following Microsoft's D3D12HelloFrameBuffering: each frame has its own allocator\n  auto& ctx = device_.getD3D12Context();\n  const uint32_t frameIdx = ctx.getCurrentFrameIndex();\n  auto* frameAllocator = ctx.getFrameContexts()[frameIdx].allocator.Get();\n\n  HRESULT hr = d3dDevice->CreateCommandList(0,\n                                            D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                            frameAllocator, // Use frame allocator directly - it's\n                                                            // in ready-to-use state after creation\n                                            nullptr,\n                                            IID_PPV_ARGS(commandList_.GetAddressOf()));\n\n  if (FAILED(hr)) {\n    char errorMsg[256];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to create command list: HRESULT = 0x%08X\",\n             static_cast<unsigned>(hr));\n    IGL_DEBUG_ASSERT(false, \"%s\", errorMsg);\n    IGL_LOG_ERROR(errorMsg);\n    return; // Leave commandList_ null to indicate failure\n  }\n\n  // Command lists are created in recording state, close it for now\n  commandList_->Close();\n\n  // Create scheduling fence for waitUntilScheduled() support\n  // D-003: Fence event is now created per-wait in waitUntilScheduled() to eliminate TOCTOU race\n  hr =\n      d3dDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(scheduleFence_.GetAddressOf()));\n  if (FAILED(hr)) {\n    char errorMsg[256];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to create scheduling fence: HRESULT = 0x%08X\",\n             static_cast<unsigned>(hr));\n    IGL_DEBUG_ASSERT(false, \"%s\", errorMsg);\n    IGL_LOG_ERROR(errorMsg);\n    return; // Leave fence null to indicate failure\n  }\n}\n\nCommandBuffer::~CommandBuffer() {\n  // D-003: No need to clean up scheduleFenceEvent_ - now using dedicated events per wait\n  // scheduleFence_ is a ComPtr and will be automatically released\n}\n\n// Pre-allocated descriptor heap with fail-fast on exhaustion.\n// Allocates from pre-allocated pages, switching pages as needed.\n// Fails immediately if all pages are exhausted (Vulkan fail-fast pattern).\nResult CommandBuffer::getNextCbvSrvUavDescriptor(uint32_t* outDescriptorIndex) {\n  auto& ctx = device_.getD3D12Context();\n  const uint32_t frameIdx = ctx.getCurrentFrameIndex();\n  auto& frameCtx = ctx.getFrameContexts()[frameIdx];\n  auto& pages = frameCtx.cbvSrvUavHeapPages;\n  uint32_t currentPageIdx = frameCtx.currentCbvSrvUavPageIndex;\n\n  // Validate we have at least one page\n  if (pages.empty()) {\n    return Result{Result::Code::RuntimeError, \"No CBV/SRV/UAV descriptor heap pages available\"};\n  }\n\n  // Get current page index validation\n  if (currentPageIdx >= pages.size()) {\n    return Result{Result::Code::RuntimeError, \"Invalid descriptor heap page index\"};\n  }\n\n  // Check current offset before acquiring reference (avoid use-after-reallocation)\n  const uint32_t currentOffset = frameCtx.nextCbvSrvUavDescriptor;\n\n  // Check if current page has space; fail fast if pre-allocation is enabled.\n  if (currentOffset >= pages[currentPageIdx].capacity) {\n    // Current page is full - check if we can move to next page\n    const uint32_t nextPageIdx = currentPageIdx + 1;\n\n    // Fail-fast if pre-allocated pages are exhausted (Vulkan pattern).\n    if (nextPageIdx >= pages.size()) {\n      char errorMsg[512];\n      // All pages exhausted - fail immediately (no mid-frame allocation).\n      // Calculate actual descriptor capacity from allocated pages.\n      uint32_t totalCapacity = 0;\n      for (const auto& page : pages) {\n        totalCapacity += page.capacity;\n      }\n      snprintf(errorMsg,\n               sizeof(errorMsg),\n               \"CBV/SRV/UAV descriptor heap exhausted! Frame %u used all %zu pre-allocated pages \"\n               \"(%u descriptors total). \"\n               \"This frame requires more descriptors than available. \"\n               \"Increase D3D12ContextConfig::maxHeapPages or enable \"\n               \"preAllocateDescriptorPages=true, or optimize descriptor usage.\",\n               frameIdx,\n               pages.size(),\n               totalCapacity);\n      return Result{Result::Code::RuntimeError, errorMsg};\n    }\n\n    // Move to next pre-allocated page.\n    currentPageIdx = nextPageIdx;\n    frameCtx.currentCbvSrvUavPageIndex = currentPageIdx;\n    frameCtx.nextCbvSrvUavDescriptor = 0; // Reset offset for new page\n\n    IGL_D3D12_LOG_VERBOSE(\"D3D12: Switching to pre-allocated CBV/SRV/UAV page %u for frame %u\\n\",\n                          currentPageIdx,\n                          frameIdx);\n\n    // Update active heap when switching pages.\n    frameCtx.activeCbvSrvUavHeap = pages[currentPageIdx].heap;\n\n    // Rebind heap on the command list when switching pages.\n    if (commandList_.Get()) {\n      ID3D12DescriptorHeap* heaps[] = {frameCtx.activeCbvSrvUavHeap.Get(),\n                                       frameCtx.samplerHeap.Get()};\n      commandList_->SetDescriptorHeaps(2, heaps);\n      IGL_D3D12_LOG_VERBOSE(\"D3D12: Rebound descriptor heaps after switching to page %u\\n\",\n                            currentPageIdx);\n    }\n  }\n\n  // SAFE: Acquire reference AFTER any potential reallocation from emplace_back\n  auto& currentPage = pages[currentPageIdx];\n\n  // Allocate from current page\n  const uint32_t descriptorIndex = frameCtx.nextCbvSrvUavDescriptor++;\n  currentPage.used = frameCtx.nextCbvSrvUavDescriptor;\n\n  // Track peak usage for telemetry\n  const uint32_t totalUsed =\n      static_cast<uint32_t>(currentPageIdx * kDescriptorsPerPage + descriptorIndex);\n  if (totalUsed > frameCtx.peakCbvSrvUavUsage) {\n    frameCtx.peakCbvSrvUavUsage = totalUsed;\n  }\n\n  // Return the descriptor index within the current page\n  *outDescriptorIndex = descriptorIndex;\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\n      \"CommandBuffer::getNextCbvSrvUavDescriptor() - frame %u, page %u, descriptor %u (total \"\n      \"allocated: %u)\\n\",\n      frameIdx,\n      currentPageIdx,\n      descriptorIndex,\n      totalUsed);\n#endif\n\n  return Result{};\n}\n\n// Allocate a contiguous range of CBV/SRV/UAV descriptors from pre-allocated pages.\n// Ensures the range can be bound as a single descriptor table.\n// Fails immediately if all pages are exhausted (Vulkan fail-fast pattern).\nResult CommandBuffer::allocateCbvSrvUavRange(uint32_t count, uint32_t* outBaseDescriptorIndex) {\n  if (count == 0) {\n    return Result{Result::Code::ArgumentInvalid, \"Cannot allocate zero descriptors\"};\n  }\n\n  auto& ctx = device_.getD3D12Context();\n  const uint32_t frameIdx = ctx.getCurrentFrameIndex();\n  auto& frameCtx = ctx.getFrameContexts()[frameIdx];\n  auto& pages = frameCtx.cbvSrvUavHeapPages;\n  uint32_t currentPageIdx = frameCtx.currentCbvSrvUavPageIndex;\n\n  if (pages.empty()) {\n    return Result{Result::Code::RuntimeError, \"No CBV/SRV/UAV descriptor heap pages available\"};\n  }\n\n  if (currentPageIdx >= pages.size()) {\n    return Result{Result::Code::RuntimeError, \"Invalid descriptor heap page index\"};\n  }\n\n  // Check space before acquiring reference (avoid use-after-reallocation)\n  const uint32_t currentOffset = frameCtx.nextCbvSrvUavDescriptor;\n  const uint32_t spaceRemaining = pages[currentPageIdx].capacity - currentOffset;\n\n  // Check if the requested range fits in the current page; fail fast on exhaustion.\n  if (count > spaceRemaining) {\n    // Not enough space in current page - validate range and check for next page\n    if (count > kDescriptorsPerPage) {\n      char errorMsg[256];\n      snprintf(errorMsg,\n               sizeof(errorMsg),\n               \"Requested descriptor range (%u) exceeds page capacity (%u)\",\n               count,\n               kDescriptorsPerPage);\n      return Result{Result::Code::ArgumentOutOfRange, errorMsg};\n    }\n\n    // Move to next pre-allocated page (fail-fast if exhausted).\n    const uint32_t nextPageIdx = currentPageIdx + 1;\n    if (nextPageIdx >= pages.size()) {\n      char errorMsg[512];\n      snprintf(errorMsg,\n               sizeof(errorMsg),\n               \"CBV/SRV/UAV descriptor heap exhausted! Frame %u needs page %u for contiguous range \"\n               \"of %u descriptors, \"\n               \"but only %zu pages are pre-allocated. \"\n               \"Increase D3D12ContextConfig::maxHeapPages or optimize descriptor usage.\",\n               frameIdx,\n               nextPageIdx,\n               count,\n               pages.size());\n      return Result{Result::Code::RuntimeError, errorMsg};\n    }\n\n    // Move to next pre-allocated page\n    currentPageIdx = nextPageIdx;\n    frameCtx.currentCbvSrvUavPageIndex = currentPageIdx;\n    frameCtx.nextCbvSrvUavDescriptor = 0;\n\n    IGL_D3D12_LOG_VERBOSE(\n        \"D3D12: Switching to pre-allocated CBV/SRV/UAV page %u for contiguous range of %u \"\n        \"descriptors\\n\",\n        currentPageIdx,\n        count);\n\n    // Rebind heap on command list when switching pages\n    frameCtx.activeCbvSrvUavHeap = pages[currentPageIdx].heap;\n    if (commandList_.Get()) {\n      ID3D12DescriptorHeap* heaps[] = {frameCtx.activeCbvSrvUavHeap.Get(),\n                                       frameCtx.samplerHeap.Get()};\n      commandList_->SetDescriptorHeaps(2, heaps);\n    }\n  }\n\n  // SAFE: Acquire reference AFTER any potential reallocation from emplace_back\n  auto& currentPage = pages[currentPageIdx];\n\n  // Allocate the range from current page\n  const uint32_t baseIndex = frameCtx.nextCbvSrvUavDescriptor;\n  frameCtx.nextCbvSrvUavDescriptor += count;\n  currentPage.used = frameCtx.nextCbvSrvUavDescriptor;\n\n  // Track peak usage\n  const uint32_t totalUsed =\n      static_cast<uint32_t>(currentPageIdx * kDescriptorsPerPage + baseIndex + count);\n  if (totalUsed > frameCtx.peakCbvSrvUavUsage) {\n    frameCtx.peakCbvSrvUavUsage = totalUsed;\n  }\n\n  *outBaseDescriptorIndex = baseIndex;\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\n      \"CommandBuffer::allocateCbvSrvUavRange() - frame %u, page %u, base %u, count %u\\n\",\n      frameIdx,\n      currentPageIdx,\n      baseIndex,\n      count);\n#endif\n\n  return Result{};\n}\n\nuint32_t& CommandBuffer::getNextSamplerDescriptor() {\n  auto& ctx = device_.getD3D12Context();\n  const uint32_t frameIdx = ctx.getCurrentFrameIndex();\n  auto& frameCtx = ctx.getFrameContexts()[frameIdx];\n\n  // Add bounds checking to prevent sampler descriptor heap overflow.\n  // The sampler heap is allocated with kSamplerHeapSize descriptors.\n  const uint32_t currentValue = frameCtx.nextSamplerDescriptor;\n\n  // Track peak usage for telemetry (before incrementing)\n  if (currentValue > frameCtx.peakSamplerUsage) {\n    frameCtx.peakSamplerUsage = currentValue;\n\n    // Warn if approaching capacity (>80%)\n    const float usage = static_cast<float>(currentValue) / static_cast<float>(kSamplerHeapSize);\n    if (usage > 0.8f) {\n      IGL_LOG_ERROR(\"D3D12: Sampler descriptor usage at %.1f%% capacity (%u/%u) for frame %u\\n\",\n                    usage * 100.0f,\n                    currentValue,\n                    kSamplerHeapSize,\n                    frameIdx);\n    }\n  }\n\n  // CRITICAL: Assert on overflow in debug builds\n  IGL_DEBUG_ASSERT(\n      currentValue < kSamplerHeapSize,\n      \"D3D12: Sampler descriptor heap overflow! Allocated: %u, Capacity: %u (frame %u). \"\n      \"This will cause memory corruption and device removal. Increase heap size or optimize \"\n      \"descriptor usage.\",\n      currentValue,\n      kSamplerHeapSize,\n      frameIdx);\n\n  // Graceful degradation in release builds: clamp to last valid descriptor\n  if (currentValue >= kSamplerHeapSize) {\n    IGL_LOG_ERROR(\n        \"D3D12: Sampler descriptor heap overflow! Allocated: %u, Capacity: %u (frame %u)\\n\"\n        \"Clamping to last valid descriptor. Rendering artifacts expected.\\n\",\n        currentValue,\n        kSamplerHeapSize,\n        frameIdx);\n    // Return reference to a clamped value to prevent further damage\n    // This will cause rendering artifacts but prevent crashes\n    static uint32_t clampedValue = kSamplerHeapSize - 1;\n    return clampedValue;\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandBuffer::getNextSamplerDescriptor() - frame %u, current value=%u\\n\",\n                        frameIdx,\n                        currentValue);\n#endif\n  return frameCtx.nextSamplerDescriptor;\n}\n\nvoid CommandBuffer::trackTransientBuffer(std::shared_ptr<IBuffer> buffer) {\n  // Add to the CURRENT frame's transient buffer list\n  // These will be kept alive until the frame completes GPU execution\n  auto& ctx = device_.getD3D12Context();\n  const uint32_t frameIdx = ctx.getCurrentFrameIndex();\n  auto& frameCtx = ctx.getFrameContexts()[frameIdx];\n\n  frameCtx.transientBuffers.push_back(std::move(buffer));\n\n  // Track high-water mark for telemetry.\n  const size_t currentCount = frameCtx.transientBuffers.size();\n  if (currentCount > frameCtx.transientBuffersHighWater) {\n    frameCtx.transientBuffersHighWater = currentCount;\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\n      \"CommandBuffer::trackTransientBuffer() - Added buffer to frame %u (total=%zu, \"\n      \"high-water=%zu)\\n\",\n      frameIdx,\n      currentCount,\n      frameCtx.transientBuffersHighWater);\n#endif\n}\n\nvoid CommandBuffer::trackTransientResource(ID3D12Resource* resource) {\n  if (!resource) {\n    return;\n  }\n  auto& ctx = device_.getD3D12Context();\n  const uint32_t frameIdx = ctx.getCurrentFrameIndex();\n  auto& frameCtx = ctx.getFrameContexts()[frameIdx];\n\n  igl::d3d12::ComPtr<ID3D12Resource> keepAlive;\n  resource->AddRef();\n  keepAlive.Attach(resource);\n  frameCtx.transientResources.push_back(std::move(keepAlive));\n\n  // Track high-water mark for telemetry.\n  const size_t currentCount = frameCtx.transientResources.size();\n  if (currentCount > frameCtx.transientResourcesHighWater) {\n    frameCtx.transientResourcesHighWater = currentCount;\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\n      \"CommandBuffer::trackTransientResource() - Added resource to frame %u (total=%zu, \"\n      \"high-water=%zu)\\n\",\n      frameIdx,\n      currentCount,\n      frameCtx.transientResourcesHighWater);\n#endif\n}\n\nResult CommandBuffer::begin() {\n  if (recording_) {\n    return Result();\n  }\n\n  // NOTE: Transient buffers are now stored in FrameContext and cleared when advancing frames\n  // NOTE: Descriptor counters are now stored in FrameContext and shared across all CommandBuffers\n  // They are reset at the start of each frame in CommandQueue::submit(), not here\n\n  // Reset per-command-buffer draw count for this recording\n  currentDrawCount_ = 0;\n\n  // CRITICAL: Set the per-frame descriptor heaps before recording commands.\n  // Each frame has its own isolated heaps to prevent descriptor conflicts.\n  // Uses the current page's heap (will be updated if we grow to new pages).\n  auto& ctx = device_.getD3D12Context();\n  const uint32_t frameIdx = ctx.getCurrentFrameIndex();\n  auto& frameCtx = ctx.getFrameContexts()[frameIdx];\n\n  // Initialize active heap to current page at frame start.\n  if (frameCtx.cbvSrvUavHeapPages.empty()) {\n    const char* msg = \"No CBV/SRV/UAV heap pages available\";\n    IGL_LOG_ERROR(\"CommandBuffer::begin() - %s for frame %u\\n\", msg, frameIdx);\n    return Result(Result::Code::RuntimeError, msg);\n  }\n\n  frameCtx.activeCbvSrvUavHeap =\n      frameCtx.cbvSrvUavHeapPages[frameCtx.currentCbvSrvUavPageIndex].heap;\n\n  if (!frameCtx.activeCbvSrvUavHeap.Get()) {\n    const char* msg = \"No CBV/SRV/UAV heap available\";\n    IGL_LOG_ERROR(\"CommandBuffer::begin() - %s for frame %u\\n\", msg, frameIdx);\n    return Result(Result::Code::RuntimeError, msg);\n  }\n\n  // Use the CURRENT FRAME's command allocator from FrameContext\n  // Following Microsoft's D3D12HelloFrameBuffering pattern\n  auto* frameAllocator = ctx.getFrameContexts()[frameIdx].allocator.Get();\n\n  // Microsoft pattern: Reset allocator THEN reset command list\n  // Allocator was reset in CommandQueue::submit() after fence wait, OR is in initial ready state\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\n      \"CommandBuffer::begin() - Frame %u: Resetting command list with allocator...\\n\", frameIdx);\n#endif\n  HRESULT hr = commandList_->Reset(frameAllocator, nullptr);\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"CommandBuffer::begin() - Reset command list FAILED: 0x%08X\\n\",\n                  static_cast<unsigned>(hr));\n    return getResultFromHRESULT(hr);\n  }\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandBuffer::begin() - Command list reset OK\\n\");\n#endif\n  recording_ = true;\n\n  // Bind heaps using active heap, not legacy accessor, now that the command list\n  // has been reset and is in the recording state.\n  ID3D12DescriptorHeap* heaps[] = {frameCtx.activeCbvSrvUavHeap.Get(), frameCtx.samplerHeap.Get()};\n  commandList_->SetDescriptorHeaps(2, heaps);\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandBuffer::begin() - Set per-frame descriptor heaps for frame %u\\n\",\n                        frameIdx);\n#endif\n\n  // Record timer start timestamp after reset and before any GPU work is recorded.\n  // This ensures the timer measures the actual command buffer workload.\n  if (desc.timer) {\n    auto* timer = static_cast<Timer*>(desc.timer.get());\n    timer->begin(commandList_.Get());\n  }\n\n  return Result();\n}\n\nvoid CommandBuffer::end() {\n  if (!recording_) {\n    return;\n  }\n\n  // No timer recording here; timer->begin() was called in begin(),\n  // and timer->end() will be called in CommandQueue::submit() before close.\n\n  // Close the command list - all recording is complete\n  commandList_->Close();\n  recording_ = false;\n}\n\nD3D12Context& CommandBuffer::getContext() {\n  return device_.getD3D12Context();\n}\n\nconst D3D12Context& CommandBuffer::getContext() const {\n  return device_.getD3D12Context();\n}\n\n// Device draw count is incremented by CommandQueue::submit() using this buffer's count\n\nstd::unique_ptr<IRenderCommandEncoder> CommandBuffer::createRenderCommandEncoder(\n    const RenderPassDesc& renderPass,\n    const std::shared_ptr<IFramebuffer>& framebuffer,\n    const Dependencies& /*dependencies*/,\n    Result* IGL_NULLABLE outResult) {\n  // Begin command buffer if not already begun\n  Result beginResult = begin();\n  if (!beginResult.isOk()) {\n    Result::setResult(outResult, std::move(beginResult));\n    return nullptr;\n  }\n\n  // Create encoder with lightweight constructor, then initialize with render pass\n  auto encoder = std::make_unique<RenderCommandEncoder>(*this, framebuffer);\n  encoder->begin(renderPass);\n  Result::setOk(outResult);\n  return encoder;\n}\n\nstd::unique_ptr<IComputeCommandEncoder> CommandBuffer::createComputeCommandEncoder() {\n  // Begin command buffer if not already begun\n  Result beginResult = begin();\n  if (!beginResult.isOk()) {\n    IGL_LOG_ERROR(\"CommandBuffer::createComputeCommandEncoder() - begin() failed: %s\\n\",\n                  beginResult.message.c_str());\n    return nullptr;\n  }\n\n  return std::make_unique<ComputeCommandEncoder>(*this);\n}\n\nvoid CommandBuffer::present(const std::shared_ptr<ITexture>& /*surface*/) const {\n  // Note: Actual present happens in CommandQueue::submit(). This call serves\n  // as a marker indicating that this command buffer should trigger a swapchain\n  // Present when submitted.\n  willPresent_ = true;\n}\n\nvoid CommandBuffer::waitUntilScheduled() {\n  // If scheduleValue_ is 0, the command buffer hasn't been submitted yet\n  if (scheduleValue_ == 0) {\n#ifdef IGL_DEBUG\n    IGL_D3D12_LOG_VERBOSE(\n        \"CommandBuffer::waitUntilScheduled() - Not yet submitted, returning immediately\\n\");\n#endif\n    return;\n  }\n\n  // Check if the scheduling fence has already been signaled\n  if (!scheduleFence_.Get()) {\n    IGL_LOG_ERROR(\"CommandBuffer::waitUntilScheduled() - Scheduling fence is null\\n\");\n    return;\n  }\n\n  const UINT64 completedValue = scheduleFence_->GetCompletedValue();\n  if (completedValue >= scheduleValue_) {\n#ifdef IGL_DEBUG\n    IGL_D3D12_LOG_VERBOSE(\n        \"CommandBuffer::waitUntilScheduled() - Already scheduled (completed=%llu, target=%llu)\\n\",\n        completedValue,\n        scheduleValue_);\n#endif\n    return;\n  }\n\n  // Wait for the scheduling fence to be signaled\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\n      \"CommandBuffer::waitUntilScheduled() - Waiting for scheduling (completed=%llu, \"\n      \"target=%llu)\\n\",\n      completedValue,\n      scheduleValue_);\n#endif\n\n  // Use FenceWaiter RAII wrapper for proper fence waiting with TOCTOU protection\n  FenceWaiter waiter(scheduleFence_.Get(), scheduleValue_);\n  Result waitResult = waiter.wait();\n  if (!waitResult.isOk()) {\n    IGL_LOG_ERROR(\"CommandBuffer::waitUntilScheduled() - Fence wait failed: %s\\n\",\n                  waitResult.message.c_str());\n    return;\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\n      \"CommandBuffer::waitUntilScheduled() - Scheduling complete (fence now=%llu)\\n\",\n      scheduleFence_->GetCompletedValue());\n#endif\n}\n\nvoid CommandBuffer::waitUntilCompleted() {\n  // Wait for all submitted GPU work to complete\n  // The CommandQueue tracks frame completion via fences, so we need to wait for the current frame\n  auto& ctx = getContext();\n  auto* queue = ctx.getCommandQueue();\n  if (!queue) {\n    return;\n  }\n\n  // Signal a fence and wait for it\n  // This ensures all previously submitted command lists have completed on the GPU\n  igl::d3d12::ComPtr<ID3D12Fence> fence;\n  auto* device = ctx.getDevice();\n  if (!device ||\n      FAILED(device->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(fence.GetAddressOf())))) {\n    return;\n  }\n\n  queue->Signal(fence.Get(), 1);\n\n  FenceWaiter waiter(fence.Get(), 1);\n  Result waitResult = waiter.wait();\n  if (!waitResult.isOk()) {\n    IGL_LOG_ERROR(\"CommandBuffer::waitUntilCompleted() - Fence wait failed: %s\\n\",\n                  waitResult.message.c_str());\n    return;\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandBuffer::waitUntilCompleted() - GPU work completed\\n\");\n#endif\n}\n\nvoid CommandBuffer::pushDebugGroupLabel(const char* label, const igl::Color& /*color*/) const {\n  // Only emit GPU debug markers while the command list is in recording state.\n  if (!recording_ || !commandList_.Get() || !label) {\n    return;\n  }\n\n  const size_t len = strlen(label);\n  std::wstring wlabel(len, L' ');\n  std::mbstowcs(&wlabel[0], label, len);\n  commandList_->BeginEvent(\n      0, wlabel.c_str(), static_cast<UINT>((wlabel.length() + 1) * sizeof(wchar_t)));\n}\n\nvoid CommandBuffer::popDebugGroupLabel() const {\n  // Only pop GPU debug markers while the command list is in recording state.\n  if (!recording_ || !commandList_.Get()) {\n    return;\n  }\n\n  commandList_->EndEvent();\n}\n\nvoid CommandBuffer::copyBuffer(IBuffer& source,\n                               IBuffer& destination,\n                               uint64_t sourceOffset,\n                               uint64_t destinationOffset,\n                               uint64_t size) {\n  auto* src = static_cast<Buffer*>(&source);\n  auto* dst = static_cast<Buffer*>(&destination);\n  ID3D12Resource* srcRes = src->getResource();\n  ID3D12Resource* dstRes = dst->getResource();\n  if (!srcRes || !dstRes || size == 0) {\n    return;\n  }\n\n  // Use a transient copy with appropriate heap handling\n  auto& ctx = getContext();\n  ID3D12Device* device = ctx.getDevice();\n  ID3D12CommandQueue* queue = ctx.getCommandQueue();\n  if (!device || !queue) {\n    return;\n  }\n\n  auto doCopyOnList =\n      [&](ID3D12GraphicsCommandList* list, ID3D12Resource* dstResLocal, uint64_t dstOffsetLocal) {\n        D3D12_RESOURCE_BARRIER barriers[2] = {};\n        barriers[0].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n        barriers[0].Transition.pResource = srcRes;\n        barriers[0].Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n        barriers[0].Transition.StateBefore = D3D12_RESOURCE_STATE_GENERIC_READ;\n        barriers[0].Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_SOURCE;\n        barriers[1].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n        barriers[1].Transition.pResource = dstResLocal;\n        barriers[1].Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n        barriers[1].Transition.StateBefore = D3D12_RESOURCE_STATE_GENERIC_READ;\n        barriers[1].Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST;\n        list->ResourceBarrier(2, barriers);\n\n        list->CopyBufferRegion(dstResLocal, dstOffsetLocal, srcRes, sourceOffset, size);\n\n        barriers[0].Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_SOURCE;\n        barriers[0].Transition.StateAfter = D3D12_RESOURCE_STATE_GENERIC_READ;\n        barriers[1].Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST;\n        barriers[1].Transition.StateAfter = D3D12_RESOURCE_STATE_GENERIC_READ;\n        list->ResourceBarrier(2, barriers);\n      };\n\n  if (dst->storage() == ResourceStorage::Shared) {\n    // GPU cannot write into UPLOAD heap; use a READBACK staging buffer and then memcpy into UPLOAD\n    D3D12_HEAP_PROPERTIES readbackHeap{};\n    readbackHeap.Type = D3D12_HEAP_TYPE_READBACK;\n    D3D12_RESOURCE_DESC desc{};\n    desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;\n    desc.Width = size + destinationOffset;\n    desc.Height = 1;\n    desc.DepthOrArraySize = 1;\n    desc.MipLevels = 1;\n    desc.Format = DXGI_FORMAT_UNKNOWN;\n    desc.SampleDesc.Count = 1;\n    desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;\n    igl::d3d12::ComPtr<ID3D12Resource> readback;\n    HRESULT hr = device->CreateCommittedResource(&readbackHeap,\n                                                 D3D12_HEAP_FLAG_NONE,\n                                                 &desc,\n                                                 D3D12_RESOURCE_STATE_COPY_DEST,\n                                                 nullptr,\n                                                 IID_PPV_ARGS(readback.GetAddressOf()));\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\"copyBuffer: Failed to create READBACK buffer, hr=0x%08X\\n\",\n                    static_cast<unsigned>(hr));\n      return;\n    }\n\n    igl::d3d12::ComPtr<ID3D12CommandAllocator> allocator;\n    igl::d3d12::ComPtr<ID3D12GraphicsCommandList> list;\n    if (FAILED(device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                              IID_PPV_ARGS(allocator.GetAddressOf()))) ||\n        FAILED(device->CreateCommandList(0,\n                                         D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                         allocator.Get(),\n                                         nullptr,\n                                         IID_PPV_ARGS(list.GetAddressOf())))) {\n      IGL_LOG_ERROR(\"copyBuffer: Failed to create transient command list\\n\");\n      return;\n    }\n\n    // Transition source to COPY_SOURCE\n    D3D12_RESOURCE_BARRIER barrier = {};\n    barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n    barrier.Transition.pResource = srcRes;\n    barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n    barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;\n    barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_SOURCE;\n    list->ResourceBarrier(1, &barrier);\n\n    // Copy from source to readback (readback is already in COPY_DEST state)\n    list->CopyBufferRegion(readback.Get(), destinationOffset, srcRes, sourceOffset, size);\n\n    // Transition source back\n    barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_SOURCE;\n    barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COMMON;\n    list->ResourceBarrier(1, &barrier);\n    list->Close();\n    ID3D12CommandList* lists[] = {list.Get()};\n    queue->ExecuteCommandLists(1, lists);\n    ctx.waitForGPU();\n\n    // Map readback and copy into the UPLOAD buffer\n    void* rbPtr = nullptr;\n    D3D12_RANGE readRange{static_cast<SIZE_T>(destinationOffset),\n                          static_cast<SIZE_T>(destinationOffset + size)};\n    if (SUCCEEDED(readback->Map(0, &readRange, &rbPtr)) && rbPtr) {\n      // Map destination upload buffer\n      Result r1;\n      void* dstPtr = dst->map(BufferRange(size, destinationOffset), &r1);\n      if (dstPtr && r1.isOk()) {\n        std::memcpy(dstPtr, static_cast<uint8_t*>(rbPtr) + destinationOffset, size);\n        dst->unmap();\n      }\n      readback->Unmap(0, nullptr);\n    }\n    return;\n  }\n\n  // Default path: copy using a transient command list to DEFAULT/COMMON destinations\n  igl::d3d12::ComPtr<ID3D12CommandAllocator> allocator;\n  igl::d3d12::ComPtr<ID3D12GraphicsCommandList> list;\n  if (FAILED(device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                            IID_PPV_ARGS(allocator.GetAddressOf()))) ||\n      FAILED(device->CreateCommandList(0,\n                                       D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                       allocator.Get(),\n                                       nullptr,\n                                       IID_PPV_ARGS(list.GetAddressOf())))) {\n    return;\n  }\n\n  doCopyOnList(list.Get(), dstRes, destinationOffset);\n  list->Close();\n  ID3D12CommandList* lists2[] = {list.Get()};\n  queue->ExecuteCommandLists(1, lists2);\n  ctx.waitForGPU();\n}\n\n// Public API: Record texture-to-buffer copy for deferred execution\nvoid CommandBuffer::copyTextureToBuffer(ITexture& source,\n                                        IBuffer& destination,\n                                        uint64_t destinationOffset,\n                                        uint32_t mipLevel,\n                                        uint32_t layer) {\n  // Like Vulkan, defer the copy operation until command buffer submission\n  // D3D12 requires this to execute AFTER render commands complete, not during recording\n  // (Unlike Vulkan which can record into the command buffer, D3D12 has closed command list and\n  // padding constraints)\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"copyTextureToBuffer: Recording deferred copy operation (will execute in \"\n      \"CommandQueue::submit)\\n\");\n\n  deferredTextureCopies_.push_back({&source, &destination, destinationOffset, mipLevel, layer});\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/CommandBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandBuffer.h>\n#include <igl/ComputeCommandEncoder.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Context.h>\n\nnamespace igl::d3d12 {\n\nclass Device;\n\nclass CommandBuffer final : public ICommandBuffer {\n public:\n  CommandBuffer(Device& device, const CommandBufferDesc& desc);\n  ~CommandBuffer() override;\n\n  std::unique_ptr<IRenderCommandEncoder> createRenderCommandEncoder(\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      const Dependencies& dependencies,\n      Result* IGL_NULLABLE outResult) override;\n\n  std::unique_ptr<IComputeCommandEncoder> createComputeCommandEncoder() override;\n\n  void present(const std::shared_ptr<ITexture>& surface) const override;\n\n  void waitUntilScheduled() override;\n  void waitUntilCompleted() override;\n\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n  void popDebugGroupLabel() const override;\n\n  void copyBuffer(IBuffer& source,\n                  IBuffer& destination,\n                  uint64_t sourceOffset,\n                  uint64_t destinationOffset,\n                  uint64_t size) override;\n  void copyTextureToBuffer(ITexture& source,\n                           IBuffer& destination,\n                           uint64_t destinationOffset,\n                           uint32_t mipLevel,\n                           uint32_t layer) override;\n\n  Result begin();\n  void end();\n  bool isRecording() const {\n    return recording_;\n  }\n\n  ID3D12GraphicsCommandList* getCommandList() const {\n    return commandList_.Get();\n  }\n  D3D12Context& getContext();\n  const D3D12Context& getContext() const;\n  Device& getDevice() {\n    return device_;\n  }\n\n  size_t getCurrentDrawCount() const {\n    return currentDrawCount_;\n  }\n  void incrementDrawCount(size_t count = 1) {\n    currentDrawCount_ += count;\n  }\n\n  // Track transient resources (e.g., push constants buffers) that need to be kept alive\n  // until this FRAME completes GPU execution (not just until this command buffer is destroyed)\n  void trackTransientBuffer(std::shared_ptr<IBuffer> buffer);\n  void trackTransientResource(ID3D12Resource* resource);\n\n  // ============================================================================\n  // INTERNAL API: Descriptor Allocation (Transient Descriptor Allocator)\n  // ============================================================================\n  //\n  // These methods are implementation details of the per-frame descriptor heap\n  // management system (Strategy 1 in D3D12ResourcesBinder.h).\n  //\n  // WARNING: Do NOT call these methods directly. Use D3D12ResourcesBinder instead.\n  //\n  // These methods delegate to D3D12Context::FrameContext to share descriptor heaps\n  // across all command buffers in the current frame, ensuring efficient utilization\n  // and automatic cleanup at frame boundaries.\n  //\n  // Access: public for friend class D3D12ResourcesBinder, conceptually private.\n  // Returns Result to allow error handling on heap overflow.\n  // ============================================================================\n\n  /**\n   * @brief Allocate a single CBV/SRV/UAV descriptor from per-frame heap\n   * @internal This is an implementation detail - use D3D12ResourcesBinder instead\n   */\n  Result getNextCbvSrvUavDescriptor(uint32_t* outDescriptorIndex);\n\n  /**\n   * @brief Allocate a contiguous range of CBV/SRV/UAV descriptors on a single page\n   * @internal This is an implementation detail - use D3D12ResourcesBinder instead\n   *\n   * This ensures the range can be bound as a single descriptor table.\n   * Returns the base descriptor index; descriptors are [baseIndex, baseIndex+count)\n   */\n  Result allocateCbvSrvUavRange(uint32_t count, uint32_t* outBaseDescriptorIndex);\n\n  /**\n   * @brief Get reference to next sampler descriptor index (for increment)\n   * @internal This is an implementation detail - use D3D12ResourcesBinder instead\n   */\n  uint32_t& getNextSamplerDescriptor();\n\n  // Deferred texture-to-buffer copy operations\n  // These are recorded during command buffer recording and executed in CommandQueue::submit()\n  // AFTER all render/compute commands have been executed by the GPU\n  struct DeferredTextureCopy {\n    ITexture* source;\n    IBuffer* destination;\n    uint64_t destinationOffset;\n    uint32_t mipLevel;\n    uint32_t layer;\n  };\n  const std::vector<DeferredTextureCopy>& getDeferredTextureCopies() const {\n    return deferredTextureCopies_;\n  }\n\n  // Whether this command buffer requested a swapchain present via present().\n  bool willPresent() const {\n    return willPresent_;\n  }\n\n private:\n  Device& device_;\n  igl::d3d12::ComPtr<ID3D12GraphicsCommandList> commandList_;\n  // NOTE: Command allocators are now managed per-frame in FrameContext, not per-CommandBuffer\n  size_t currentDrawCount_ = 0;\n  bool recording_ = false;\n\n  // Scheduling fence infrastructure (separate from completion fence)\n  // Used to track when command buffer is submitted to GPU queue (not when GPU completes)\n  // D-003: Removed scheduleFenceEvent_ - now using dedicated events per wait operation\n  igl::d3d12::ComPtr<ID3D12Fence> scheduleFence_;\n  uint64_t scheduleValue_ = 0;\n\n  // Deferred copy operations to execute after command buffer submission\n  std::vector<DeferredTextureCopy> deferredTextureCopies_;\n\n  // Tracks whether present(surface) was called on this command buffer.\n  // Mutable to allow modification from the logically-const present() override.\n  mutable bool willPresent_ = false;\n\n  friend class CommandQueue; // Allow CommandQueue to signal scheduleFence_\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/CommandQueue.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/CommandQueue.h>\n\n#include <d3d12sdklayers.h>\n#include <igl/d3d12/Buffer.h>\n#include <igl/d3d12/CommandBuffer.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/D3D12FrameManager.h>\n#include <igl/d3d12/D3D12PresentManager.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/Texture.h>\n#include <igl/d3d12/TextureCopyUtils.h>\n#include <igl/d3d12/Timer.h>\n\nnamespace igl::d3d12 {\n\nnamespace {\n\n/**\n * @brief Execute deferred texture-to-buffer copies after render commands\n */\nvoid executeDeferredCopies(D3D12Context& ctx, Device& device, const CommandBuffer& cmdBuffer) {\n  const auto& deferredCopies = cmdBuffer.getDeferredTextureCopies();\n  if (deferredCopies.empty()) {\n    return;\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandQueue: Executing %zu deferred copyTextureToBuffer operations\\n\",\n                        deferredCopies.size());\n#endif\n\n  for (const auto& copy : deferredCopies) {\n    auto* srcTex = static_cast<Texture*>(copy.source);\n    auto* dstBuf = static_cast<Buffer*>(copy.destination);\n\n    Result copyResult = TextureCopyUtils::executeCopyTextureToBuffer(\n        ctx, device, *srcTex, *dstBuf, copy.destinationOffset, copy.mipLevel, copy.layer);\n    if (!copyResult.isOk()) {\n      IGL_LOG_ERROR(\"Failed to copy texture to buffer: %s\\n\", copyResult.message.c_str());\n    }\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandQueue: All deferred copies executed successfully\\n\");\n#endif\n}\n\n// No standalone helper needed - this is now inlined in CommandQueue::submit()\n\n/**\n * @brief Update per-frame fence tracking\n */\nvoid updateFrameFences(D3D12Context& ctx, UINT64 currentFenceValue) {\n  auto& frameCtx = ctx.getFrameContexts()[ctx.getCurrentFrameIndex()];\n\n  // Update frame fence (backward compatibility)\n  if (frameCtx.fenceValue == 0) {\n    frameCtx.fenceValue = currentFenceValue;\n  }\n\n  // Update max allocator fence (critical for safe allocator reset)\n  if (currentFenceValue > frameCtx.maxAllocatorFence) {\n    frameCtx.maxAllocatorFence = currentFenceValue;\n  }\n\n  // Track command buffer count\n  frameCtx.commandBufferCount++;\n\n#ifdef IGL_DEBUG\n  // Keep this at IGL_LOG_INFO because the test harness (test_all_sessions.bat) parses\n  // \"Signaled fence\" from the INFO log; do not downgrade to VERBOSE\n  IGL_LOG_INFO(\n      \"CommandQueue: Signaled fence for frame %u \"\n      \"(value=%llu, maxAllocatorFence=%llu, cmdBufCount=%u)\\n\",\n      ctx.getCurrentFrameIndex(),\n      currentFenceValue,\n      frameCtx.maxAllocatorFence,\n      frameCtx.commandBufferCount);\n#endif\n}\n\n} // namespace\n\nCommandQueue::CommandQueue(Device& device) : device_(device) {}\n\nstd::shared_ptr<ICommandBuffer> CommandQueue::createCommandBuffer(const CommandBufferDesc& desc,\n                                                                  Result* IGL_NULLABLE outResult) {\n  auto cmdBuffer = std::make_shared<CommandBuffer>(device_, desc);\n\n  // Check if CommandBuffer was successfully initialized\n  // CommandBuffer leaves commandList_ null on failure\n  if (!cmdBuffer->getCommandList()) {\n    Result::setResult(\n        outResult,\n        Result::Code::RuntimeError,\n        \"Failed to create D3D12 command list. \"\n        \"Possible causes: device removed, out of memory, or device initialization failed. \"\n        \"Check debug output for HRESULT error code.\");\n    return nullptr;\n  }\n\n  Result::setOk(outResult);\n  return cmdBuffer;\n}\n\n// Error handling behavior for submit().\n// This function executes command lists and presents frames. Error handling:\n// - Device removal: Detected via checkDeviceRemoval(), logs diagnostics, sets device.isDeviceLost()\n//   flag, and triggers IGL_DEBUG_ASSERT. Returns SubmitHandle normally (legacy API limitation).\n// - Present failures: Logged with IGL_LOG_ERROR via PresentManager. Device removal during Present\n//   also triggers IGL_DEBUG_ASSERT. Non-removal failures (swapchain/window issues) are logged but\n//   do not assert. Present result is checked but not propagated as Result (legacy API limitation).\n// - Return value: The SubmitHandle is always returned regardless of errors and does NOT reflect\n//   submission success/failure. Use device.checkDeviceRemoval() or device.isDeviceLost() as the\n//   authoritative source for fatal error detection.\n// Future: Consider Result-based submission API for explicit error propagation.\n//\n// Refactored from 614 lines to under 100 lines using helper classes:\n// - FenceWaiter: RAII fence waiting with TOCTOU protection\n// - FrameManager: Frame advancement and resource management\n// - PresentManager: Swapchain presentation with device removal detection\nSubmitHandle CommandQueue::submit(const ICommandBuffer& commandBuffer, bool /*endOfFrame*/) {\n  auto& cmdBuffer = const_cast<CommandBuffer&>(static_cast<const CommandBuffer&>(commandBuffer));\n  auto& ctx = device_.getD3D12Context();\n  auto* commandList = cmdBuffer.getCommandList();\n  auto* fence = ctx.getFence();\n\n  // Defensive: Ensure we have a valid command list\n  IGL_DEBUG_ASSERT(commandList, \"D3D12 CommandQueue::submit() with null command list\");\n\n  // Record timer end timestamp before closing command list\n  if (commandBuffer.desc.timer) {\n    auto* timer = static_cast<Timer*>(commandBuffer.desc.timer.get());\n    const UINT64 timerFenceValue = ctx.getFenceValue() + 1;\n    timer->end(commandList, fence, timerFenceValue);\n  }\n\n  // Close command list\n  cmdBuffer.end();\n\n  // Signal scheduling fence\n  ++scheduleFenceValue_;\n  cmdBuffer.scheduleValue_ = scheduleFenceValue_;\n  ctx.getCommandQueue()->Signal(cmdBuffer.scheduleFence_.Get(), scheduleFenceValue_);\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandQueue: Signaled scheduling fence (value=%llu)\\n\",\n                        scheduleFenceValue_);\n#endif\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandQueue::submit() - Executing command list...\\n\");\n#endif\n\n  // Execute command list\n  ID3D12CommandList* commandLists[] = {commandList};\n  ctx.getCommandQueue()->ExecuteCommandLists(1, commandLists);\n\n  // Execute deferred texture-to-buffer copies\n  executeDeferredCopies(ctx, device_, cmdBuffer);\n\n  // Check device status\n  Result deviceCheck = device_.checkDeviceRemoval();\n  if (!deviceCheck.isOk()) {\n    IGL_LOG_ERROR(\"CommandQueue::submit() - Device removal detected: %s\\n\",\n                  deviceCheck.message.c_str());\n  }\n\n  // Present only if this command buffer requested it (via present())\n  // and we have a swapchain. This avoids advancing the swapchain for\n  // intermediate offscreen passes that do not render to the back buffer.\n  bool presentOk = true;\n  if (ctx.getSwapChain() && cmdBuffer.willPresent()) {\n    PresentManager presentMgr(ctx);\n    presentOk = presentMgr.present();\n    if (!presentOk) {\n      IGL_LOG_ERROR(\"CommandQueue::submit() - Present failed; frame advancement may be unsafe\\n\");\n      // Note: Continue with fence signaling for now to maintain legacy behavior,\n      // but future work should consider early-return or recovery strategy\n    }\n  }\n\n  // Signal fence for current frame\n  const UINT64 currentFenceValue = ++ctx.getFenceValue();\n  ctx.getCommandQueue()->Signal(ctx.getFence(), currentFenceValue);\n\n  // Update frame fence tracking\n  updateFrameFences(ctx, currentFenceValue);\n\n  // Advance to next frame with proper synchronization\n  if (ctx.getSwapChain()) {\n    FrameManager frameMgr(ctx);\n    frameMgr.advanceFrame(currentFenceValue);\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandQueue::submit() - Complete!\\n\");\n#endif\n\n  // Aggregate per-command-buffer draw count into the device, matching GL/Vulkan behavior\n  const auto cbDraws = cmdBuffer.getCurrentDrawCount();\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandQueue::submit() - Aggregating %zu draws from CB into device\\n\",\n                        cbDraws);\n#endif\n  device_.incrementDrawCount(cbDraws);\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"CommandQueue::submit() - Device drawCount now=%zu\\n\",\n                        device_.getCurrentDrawCount());\n\n  // Log resource stats every 30 draws to track leaks\n  const size_t drawCount = device_.getCurrentDrawCount();\n  if (drawCount == 30 || drawCount == 60 || drawCount == 90 || drawCount == 120 ||\n      drawCount == 150 || drawCount == 300 || drawCount == 600 || drawCount == 900 ||\n      drawCount == 1200 || drawCount == 1500 || drawCount == 1800) {\n    IGL_D3D12_LOG_VERBOSE(\"CommandQueue::submit() - Logging resource stats at drawCount=%zu\\n\",\n                          drawCount);\n    D3D12Context::logResourceStats();\n  }\n#endif\n\n  return 0;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/CommandQueue.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/CommandQueue.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass Device;\n\nclass CommandQueue final : public ICommandQueue {\n public:\n  explicit CommandQueue(Device& device);\n  ~CommandQueue() override = default;\n\n  std::shared_ptr<ICommandBuffer> createCommandBuffer(const CommandBufferDesc& desc,\n                                                      Result* IGL_NULLABLE outResult) override;\n  SubmitHandle submit(const ICommandBuffer& commandBuffer, bool endOfFrame = false) override;\n\n  Device& getDevice() {\n    return device_;\n  }\n\n private:\n  Device& device_;\n  uint64_t scheduleFenceValue_ = 0; // Monotonically increasing fence value used for scheduling.\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Common.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nDXGI_FORMAT textureFormatToDXGIFormat(TextureFormat format) {\n  switch (format) {\n  case TextureFormat::Invalid:\n    return DXGI_FORMAT_UNKNOWN;\n  case TextureFormat::R_UNorm8:\n    return DXGI_FORMAT_R8_UNORM;\n  case TextureFormat::R_UNorm16:\n    return DXGI_FORMAT_R16_UNORM;\n  case TextureFormat::R_F16:\n    return DXGI_FORMAT_R16_FLOAT;\n  case TextureFormat::R_UInt16:\n    return DXGI_FORMAT_R16_UINT;\n  case TextureFormat::B5G5R5A1_UNorm:\n    return DXGI_FORMAT_B5G5R5A1_UNORM;\n  case TextureFormat::B5G6R5_UNorm:\n    return DXGI_FORMAT_B5G6R5_UNORM;\n  case TextureFormat::RG_UNorm8:\n    return DXGI_FORMAT_R8G8_UNORM;\n  case TextureFormat::RG_UNorm16:\n    return DXGI_FORMAT_R16G16_UNORM;\n  case TextureFormat::R5G5B5A1_UNorm:\n    return DXGI_FORMAT_B5G5R5A1_UNORM; // DXGI closest match\n  case TextureFormat::BGRA_UNorm8:\n    return DXGI_FORMAT_B8G8R8A8_UNORM;\n  case TextureFormat::RGBA_UNorm8:\n  case TextureFormat::RGBX_UNorm8:\n    return DXGI_FORMAT_R8G8B8A8_UNORM;\n  case TextureFormat::RGBA_SRGB:\n    return DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;\n  case TextureFormat::BGRA_SRGB:\n    return DXGI_FORMAT_B8G8R8A8_UNORM_SRGB;\n  case TextureFormat::RG_F16:\n    return DXGI_FORMAT_R16G16_FLOAT;\n  case TextureFormat::RG_UInt16:\n    return DXGI_FORMAT_R16G16_UINT;\n  case TextureFormat::RGB10_A2_UNorm_Rev:\n    return DXGI_FORMAT_R10G10B10A2_UNORM;\n  case TextureFormat::RGB10_A2_Uint_Rev:\n    return DXGI_FORMAT_R10G10B10A2_UINT;\n  case TextureFormat::R_F32:\n    return DXGI_FORMAT_R32_FLOAT;\n  case TextureFormat::R_UInt32:\n    return DXGI_FORMAT_R32_UINT;\n  case TextureFormat::RG_F32:\n    return DXGI_FORMAT_R32G32_FLOAT;\n  case TextureFormat::RGB_F16:\n    return DXGI_FORMAT_R16G16B16A16_FLOAT; // DXGI doesn't have RGB16, use RGBA16\n  case TextureFormat::RGBA_F16:\n    return DXGI_FORMAT_R16G16B16A16_FLOAT;\n  case TextureFormat::RGB_F32:\n    return DXGI_FORMAT_R32G32B32_FLOAT;\n  case TextureFormat::RGBA_UInt32:\n    return DXGI_FORMAT_R32G32B32A32_UINT;\n  case TextureFormat::RGBA_F32:\n    return DXGI_FORMAT_R32G32B32A32_FLOAT;\n  // BC7 compressed color formats\n  case TextureFormat::RGBA_BC7_UNORM_4x4:\n    return DXGI_FORMAT_BC7_UNORM;\n  case TextureFormat::RGBA_BC7_SRGB_4x4:\n    return DXGI_FORMAT_BC7_UNORM_SRGB;\n  // Depth/stencil formats\n  case TextureFormat::Z_UNorm16:\n    return DXGI_FORMAT_D16_UNORM;\n  case TextureFormat::Z_UNorm24:\n    return DXGI_FORMAT_D24_UNORM_S8_UINT; // DXGI doesn't have D24 alone\n  case TextureFormat::Z_UNorm32:\n    return DXGI_FORMAT_D32_FLOAT;\n  case TextureFormat::S8_UInt_Z24_UNorm:\n    return DXGI_FORMAT_D24_UNORM_S8_UINT;\n  case TextureFormat::S8_UInt_Z32_UNorm:\n    return DXGI_FORMAT_D32_FLOAT_S8X24_UINT;\n  case TextureFormat::S_UInt8:\n    // Stencil-only formats are not natively supported by D3D12.\n    // TODO: Implement via typed subresource views using stencil plane formats:\n    //   - DXGI_FORMAT_X24_TYPELESS_G8_UINT (for D24_UNORM_S8_UINT backing resource)\n    //   - DXGI_FORMAT_X32_TYPELESS_G8X24_UINT (for D32_FLOAT_S8X24_UINT backing resource)\n    // See: https://learn.microsoft.com/en-us/windows/win32/api/dxgiformat/ne-dxgiformat-dxgi_format\n    IGL_LOG_ERROR_ONCE(\n        \"TextureFormat::S_UInt8 not supported on D3D12 (no stencil-only textures) - use \"\n        \"S8_UInt_Z24_UNorm or S8_UInt_Z32_UNorm instead\\n\");\n    return DXGI_FORMAT_UNKNOWN;\n  default:\n    return DXGI_FORMAT_UNKNOWN;\n  }\n}\n\nnamespace {\nbool isDepthOrStencilFormat(TextureFormat format) {\n  switch (format) {\n  case TextureFormat::Z_UNorm16:\n  case TextureFormat::Z_UNorm24:\n  case TextureFormat::Z_UNorm32:\n  case TextureFormat::S8_UInt_Z24_UNorm:\n  case TextureFormat::S8_UInt_Z32_UNorm:\n    return true;\n  default:\n    return false;\n  }\n}\n} // namespace\n\nDXGI_FORMAT textureFormatToDXGIResourceFormat(TextureFormat format, bool sampledUsage) {\n  if (!sampledUsage || !isDepthOrStencilFormat(format)) {\n    return textureFormatToDXGIFormat(format);\n  }\n\n  switch (format) {\n  case TextureFormat::Z_UNorm16:\n    return DXGI_FORMAT_R16_TYPELESS;\n  case TextureFormat::Z_UNorm24:\n  case TextureFormat::S8_UInt_Z24_UNorm:\n    return DXGI_FORMAT_R24G8_TYPELESS;\n  case TextureFormat::Z_UNorm32:\n    return DXGI_FORMAT_R32_TYPELESS;\n  case TextureFormat::S8_UInt_Z32_UNorm:\n    return DXGI_FORMAT_R32G8X24_TYPELESS;\n  default:\n    return textureFormatToDXGIFormat(format);\n  }\n}\n\nDXGI_FORMAT textureFormatToDXGIShaderResourceViewFormat(TextureFormat format) {\n  if (!isDepthOrStencilFormat(format)) {\n    return textureFormatToDXGIFormat(format);\n  }\n\n  switch (format) {\n  case TextureFormat::Z_UNorm16:\n    return DXGI_FORMAT_R16_UNORM;\n  case TextureFormat::Z_UNorm24:\n    return DXGI_FORMAT_R24_UNORM_X8_TYPELESS;\n  case TextureFormat::S8_UInt_Z24_UNorm:\n    return DXGI_FORMAT_R24_UNORM_X8_TYPELESS;\n  case TextureFormat::Z_UNorm32:\n    return DXGI_FORMAT_R32_FLOAT;\n  case TextureFormat::S8_UInt_Z32_UNorm:\n    return DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS;\n  default:\n    return textureFormatToDXGIFormat(format);\n  }\n}\n\nTextureFormat dxgiFormatToTextureFormat(DXGI_FORMAT format) {\n  switch (format) {\n  case DXGI_FORMAT_UNKNOWN:\n    return TextureFormat::Invalid;\n  case DXGI_FORMAT_R8_UNORM:\n    return TextureFormat::R_UNorm8;\n  case DXGI_FORMAT_R16_UNORM:\n    return TextureFormat::R_UNorm16;\n  case DXGI_FORMAT_R16_FLOAT:\n    return TextureFormat::R_F16;\n  case DXGI_FORMAT_R8G8_UNORM:\n    return TextureFormat::RG_UNorm8;\n  case DXGI_FORMAT_R8G8B8A8_UNORM:\n    return TextureFormat::RGBA_UNorm8;\n  case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:\n    return TextureFormat::RGBA_SRGB;\n  case DXGI_FORMAT_B8G8R8A8_UNORM:\n    return TextureFormat::BGRA_UNorm8;\n  case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:\n    return TextureFormat::BGRA_SRGB;\n  case DXGI_FORMAT_R16G16B16A16_FLOAT:\n    return TextureFormat::RGBA_F16;\n  case DXGI_FORMAT_R32G32B32A32_FLOAT:\n    return TextureFormat::RGBA_F32;\n  case DXGI_FORMAT_D16_UNORM:\n    return TextureFormat::Z_UNorm16;\n  case DXGI_FORMAT_D24_UNORM_S8_UINT:\n    return TextureFormat::S8_UInt_Z24_UNorm;\n  case DXGI_FORMAT_D32_FLOAT:\n    return TextureFormat::Z_UNorm32;\n  case DXGI_FORMAT_BC7_UNORM:\n    return TextureFormat::RGBA_BC7_UNORM_4x4;\n  case DXGI_FORMAT_BC7_UNORM_SRGB:\n    return TextureFormat::RGBA_BC7_SRGB_4x4;\n  default:\n    return TextureFormat::Invalid;\n  }\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Common.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#ifndef IGL_D3D12_COMMON_H\n#define IGL_D3D12_COMMON_H\n\n#include <cassert>\n#include <utility>\n#include <igl/Common.h>\n#include <igl/Macros.h>\n#include <igl/Shader.h>\n#include <igl/TextureFormat.h>\n#include <igl/d3d12/D3D12Headers.h>\n\n// Set to 1 to see verbose debug console logs with D3D12 commands\n#define IGL_D3D12_PRINT_COMMANDS 0\n\n// Set to 1 to enable verbose logging (hot-path logs, detailed state tracking, etc.)\n// This is disabled by default to reduce log volume.\n#define IGL_D3D12_DEBUG_VERBOSE 0\n\nnamespace igl::d3d12 {\n\n// Configuration structure for D3D12 backend.\n// Centralizes all size-related configuration with documented rationale.\nstruct D3D12ContextConfig {\n  // === Frame Buffering ===\n  // Rationale: Triple buffering (3 frames) provides optimal GPU/CPU parallelism on modern hardware\n  // while maintaining reasonable memory overhead. Reducing to 2 can save memory on constrained\n  // devices but may reduce throughput. Increasing beyond 3 provides minimal benefit.\n  // D3D12 spec: Minimum 2, recommended 2-3 for flip model swapchains\n  //\n  // LIMITATION: Currently fixed at 3 due to fixed-size arrays (frameContexts_, renderTargets_).\n  // Attempting to change this value will be clamped by validate(). To enable true configurability,\n  // D3D12Context must be refactored to use std::vector instead of fixed-size arrays.\n  uint32_t maxFramesInFlight = 3;\n\n  // === Descriptor Heap Sizes (Per-Frame Shader-Visible) ===\n  // Rationale: Following Microsoft MiniEngine pattern for dynamic per-frame allocation\n  // Samplers: D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE (2048) is the hardware limit.\n  // D3D12 spec limits: CBV/SRV/UAV up to 1,000,000, Samplers max 2048\n  uint32_t samplerHeapSize = 2048; // Total sampler descriptors per frame (D3D12 spec limit)\n\n  // === CBV/SRV/UAV Dynamic Heap Growth ===\n  // Rationale: Prevents unbounded memory growth while supporting complex scenes\n  // Starts with one page, can grow up to maxHeapPages as needed\n  // 16 pages × 1024 descriptors = 16,384 max descriptors per frame\n  // This supports ~500-1000 draw calls per frame with typical descriptor usage patterns\n  uint32_t descriptorsPerPage = 1024; // CBV/SRV/UAV descriptors per heap page\n  uint32_t maxHeapPages =\n      16; // Maximum pages per frame (total capacity = pages × descriptorsPerPage)\n\n  // Pre-allocation policy for descriptor pages.\n  // Rationale: Following Vulkan fail-fast pattern to prevent mid-frame descriptor invalidation.\n  // When true: All maxHeapPages are pre-allocated at init (recommended).\n  // When false: Only 1 page pre-allocated at init (minimal memory footprint).\n  // Both modes fail-fast when pages are exhausted - no dynamic growth to prevent descriptor\n  // invalidation. Default: true for safety (matches Vulkan behavior and supports complex scenes).\n  bool preAllocateDescriptorPages = true;\n\n  // DEPRECATED: Use descriptorsPerPage instead\n  // This field is kept for backward compatibility but has the same value as descriptorsPerPage\n  uint32_t cbvSrvUavHeapSize = 1024; // Alias for descriptorsPerPage (deprecated)\n\n  // === CPU-Visible Descriptor Heaps (Static) ===\n  // Rationale: RTVs/DSVs are created once per texture and persist across frames\n  // 256 RTVs: Supports ~128 textures with mips/array layers (typical for games)\n  // 128 DSVs: Sufficient for depth buffers, shadow maps, and multi-pass rendering\n  // These values should be tuned based on application texture usage patterns\n  uint32_t rtvHeapSize = 256;\n  uint32_t dsvHeapSize = 128;\n\n  // === Upload Ring Buffer ===\n  // Rationale: 128MB provides good balance for streaming resources (textures, constant buffers)\n  // Smaller values (64MB) reduce memory footprint but increase allocation failures\n  // Larger values (256MB) reduce failures but waste memory on simple scenes\n  // Microsoft MiniEngine uses similar sizes (64-256MB range)\n  uint64_t uploadRingBufferSize = 128 * 1024 * 1024; // 128 MB\n\n  // === Validation Helpers ===\n  // Clamp values to D3D12 spec limits and provide warnings for unusual configurations\n  void validate() {\n    // Frame buffering: Allow 2-4 buffers (double/triple/quad buffering)\n    // T43: Now that renderTargets_ and frameContexts_ are std::vector, we can support runtime\n    // counts. Practical range: 2 (double-buffer, higher latency), 3 (triple-buffer, balanced), 4\n    // (lower latency, more memory) Note: DXGI may adjust the requested count; actual runtime count\n    // comes from GetDesc1().\n    constexpr uint32_t kMinFrames = 2;\n    constexpr uint32_t kMaxFrames = 4;\n    if (maxFramesInFlight < kMinFrames || maxFramesInFlight > kMaxFrames) {\n      IGL_LOG_ERROR(\n          \"D3D12ContextConfig: maxFramesInFlight=%u out of range [%u, %u], clamping to %u\\n\",\n          maxFramesInFlight,\n          kMinFrames,\n          kMaxFrames,\n          (maxFramesInFlight < kMinFrames) ? kMinFrames : kMaxFrames);\n      maxFramesInFlight = (maxFramesInFlight < kMinFrames) ? kMinFrames : kMaxFrames;\n    }\n\n    // Sampler heap: Use D3D12 constant instead of magic number\n    if (samplerHeapSize > D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE) {\n      IGL_LOG_INFO(\"D3D12ContextConfig: samplerHeapSize=%u exceeds D3D12 limit (%u), clamping\\n\",\n                   samplerHeapSize,\n                   D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE);\n      samplerHeapSize = D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE;\n    }\n\n    // Descriptor page limits: Prevent absurd/invalid values\n    if (descriptorsPerPage == 0) {\n      IGL_LOG_ERROR(\"D3D12ContextConfig: descriptorsPerPage=0 is invalid, setting to 1024\\n\");\n      descriptorsPerPage = 1024;\n    }\n    if (maxHeapPages == 0) {\n      IGL_LOG_ERROR(\"D3D12ContextConfig: maxHeapPages=0 is invalid, setting to 16\\n\");\n      maxHeapPages = 16;\n    }\n\n    // CBV/SRV/UAV heap: D3D12 spec limit (generic, tier-independent upper bound)\n    // Note: Actual device limits may be lower depending on resource binding tier;\n    // use CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS) for precise caps\n    constexpr uint32_t kMaxCbvSrvUavDescriptors = 1000000;\n    if (descriptorsPerPage > kMaxCbvSrvUavDescriptors) {\n      IGL_LOG_INFO(\"D3D12ContextConfig: descriptorsPerPage=%u exceeds D3D12 limit (%u), clamping\\n\",\n                   descriptorsPerPage,\n                   kMaxCbvSrvUavDescriptors);\n      descriptorsPerPage = kMaxCbvSrvUavDescriptors;\n    }\n\n    // Keep deprecated cbvSrvUavHeapSize in sync with descriptorsPerPage\n    cbvSrvUavHeapSize = descriptorsPerPage;\n\n    // Upload ring buffer: Warn if too small (may cause allocation failures)\n    constexpr uint64_t kMinRecommendedSize = 32 * 1024 * 1024; // 32 MB\n    if (uploadRingBufferSize < kMinRecommendedSize) {\n      IGL_LOG_INFO(\n          \"D3D12ContextConfig: uploadRingBufferSize=%llu MB is small, \"\n          \"may cause allocation failures (recommended minimum: %llu MB)\\n\",\n          uploadRingBufferSize / (1024 * 1024),\n          kMinRecommendedSize / (1024 * 1024));\n    }\n  }\n\n  // === Preset Configurations ===\n  // Factory methods for common use cases\n\n  // Default configuration (balanced for most applications)\n  static D3D12ContextConfig defaultConfig() {\n    return D3D12ContextConfig{}; // Uses default member initializers\n  }\n\n  // Low memory configuration (mobile, integrated GPUs, constrained devices)\n  static D3D12ContextConfig lowMemoryConfig() {\n    D3D12ContextConfig config;\n    config.maxFramesInFlight = 2; // Double-buffering to reduce memory (T43)\n    config.descriptorsPerPage = 512; // Smaller pages\n    config.cbvSrvUavHeapSize = 512; // Keep in sync (deprecated field)\n    config.maxHeapPages = 8; // Fewer pages (total: 512 × 8 = 4K descriptors)\n    config.rtvHeapSize = 128; // Fewer RTVs\n    config.dsvHeapSize = 64; // Fewer DSVs\n    config.uploadRingBufferSize = 64 * 1024 * 1024; // 64 MB\n    config.validate();\n    return config;\n  }\n\n  // High performance configuration (discrete GPUs, desktop, complex scenes)\n  static D3D12ContextConfig highPerformanceConfig() {\n    D3D12ContextConfig config;\n    config.maxFramesInFlight = 3; // Triple-buffering (balanced, default) (T43)\n    config.descriptorsPerPage = 2048; // Larger pages\n    config.cbvSrvUavHeapSize = 2048; // Keep in sync (deprecated field)\n    config.maxHeapPages = 32; // More pages (total: 2048 × 32 = 64K descriptors)\n    config.rtvHeapSize = 512; // More RTVs for render targets\n    config.dsvHeapSize = 256; // More DSVs for shadow maps\n    config.uploadRingBufferSize = 256 * 1024 * 1024; // 256 MB\n    config.validate();\n    return config;\n  }\n};\n\n// Default frame buffering count (triple buffering).\n// T43: D3D12Context now uses runtime swapchainBufferCount_ queried from the swapchain.\n// This constant serves as the default value for D3D12ContextConfig::maxFramesInFlight\n// and is used by headless contexts (which have no swapchain to query).\n// Applications can configure 2-4 buffers via D3D12ContextConfig::maxFramesInFlight.\nconstexpr uint32_t kMaxFramesInFlight = 3;\n\n// Maximum number of descriptor sets (matching IGL's Vulkan backend)\nconstexpr uint32_t kMaxDescriptorSets = 4;\n\n// Maximum number of samplers; increased to D3D12 spec limit to support complex scenes.\n// D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE is defined as 2048 in d3d12.h.\nconstexpr uint32_t kMaxSamplers = D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE;\n\n// Descriptor heap sizes (per-frame shader-visible heaps)\n// Following Microsoft MiniEngine pattern for dynamic per-frame allocation\nconstexpr uint32_t kCbvSrvUavHeapSize = 1024; // CBV/SRV/UAV descriptors per page\nconstexpr uint32_t kSamplerHeapSize = kMaxSamplers; // Sampler descriptors per frame\n\n// Dynamic heap growth limits (prevent unbounded memory usage).\nconstexpr uint32_t kDescriptorsPerPage = kCbvSrvUavHeapSize; // 1024 descriptors per page\nconstexpr uint32_t kMaxHeapPages = 16; // Maximum 16 pages = 16K descriptors per frame\nconstexpr uint32_t kMaxDescriptorsPerFrame = kMaxHeapPages * kDescriptorsPerPage; // 16384 total\n\n// Maximum number of vertex attributes (D3D12 spec limit).\n// Uses D3D12 spec constant instead of a hard-coded value.\nconstexpr uint32_t kMaxVertexAttributes = D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; // 32\n\n// Normalized error macros - single log per error (no double logging).\n// Debug builds: IGL_DEBUG_ASSERT logs via _IGLDebugAbort\n// Release builds: IGL_LOG_ERROR provides visibility\n#if IGL_DEBUG_ABORT_ENABLED\n#define D3D12_CHECK(func)                                              \\\n  do {                                                                 \\\n    const HRESULT d3d12_check_result = (func);                         \\\n    if (FAILED(d3d12_check_result)) {                                  \\\n      IGL_DEBUG_ASSERT(false,                                          \\\n                       \"D3D12 API call failed: %s, HRESULT: 0x%08X\",   \\\n                       #func,                                          \\\n                       static_cast<unsigned int>(d3d12_check_result)); \\\n    }                                                                  \\\n  } while (0)\n\n#define D3D12_CHECK_RETURN(func)                                       \\\n  do {                                                                 \\\n    const HRESULT d3d12_check_result = (func);                         \\\n    if (FAILED(d3d12_check_result)) {                                  \\\n      IGL_DEBUG_ASSERT(false,                                          \\\n                       \"D3D12 API call failed: %s, HRESULT: 0x%08X\",   \\\n                       #func,                                          \\\n                       static_cast<unsigned int>(d3d12_check_result)); \\\n      return getResultFromHRESULT(d3d12_check_result);                 \\\n    }                                                                  \\\n  } while (0)\n#else\n#define D3D12_CHECK(func)                                           \\\n  do {                                                              \\\n    const HRESULT d3d12_check_result = (func);                      \\\n    if (FAILED(d3d12_check_result)) {                               \\\n      IGL_LOG_ERROR(\"D3D12 API call failed: %s, HRESULT: 0x%08X\\n\", \\\n                    #func,                                          \\\n                    static_cast<unsigned int>(d3d12_check_result)); \\\n    }                                                               \\\n  } while (0)\n\n#define D3D12_CHECK_RETURN(func)                                    \\\n  do {                                                              \\\n    const HRESULT d3d12_check_result = (func);                      \\\n    if (FAILED(d3d12_check_result)) {                               \\\n      IGL_LOG_ERROR(\"D3D12 API call failed: %s, HRESULT: 0x%08X\\n\", \\\n                    #func,                                          \\\n                    static_cast<unsigned int>(d3d12_check_result)); \\\n      return getResultFromHRESULT(d3d12_check_result);              \\\n    }                                                               \\\n  } while (0)\n#endif\n\n// Verbose logging macro (hot-path logs, detailed state tracking).\n// Only logs when IGL_D3D12_DEBUG_VERBOSE is enabled (disabled by default)\n#if IGL_D3D12_DEBUG_VERBOSE\n#define IGL_D3D12_LOG_VERBOSE(format, ...) IGL_LOG_INFO(format, ##__VA_ARGS__)\n#else\n#define IGL_D3D12_LOG_VERBOSE(format, ...) ((void)0)\n#endif\n\n// Command logging macro (D3D12 API command traces).\n// Only logs when IGL_D3D12_PRINT_COMMANDS is enabled (disabled by default)\n// Use for command recording, state transitions, and D3D12 API call traces\n// Note: Treated as INFO-level severity but controlled separately from DEBUG_VERBOSE\n// to allow independent toggling of command traces vs general verbose output\n#if IGL_D3D12_PRINT_COMMANDS\n#define IGL_D3D12_LOG_CMD(format, ...) IGL_LOG_INFO(format, ##__VA_ARGS__)\n#else\n#define IGL_D3D12_LOG_CMD(format, ...) ((void)0)\n#endif\n\n// Convert HRESULT to IGL Result\ninline Result getResultFromHRESULT(HRESULT hr) {\n  if (SUCCEEDED(hr)) {\n    return Result(Result::Code::Ok);\n  }\n\n  // Map common HRESULT codes to IGL Result codes\n  switch (hr) {\n  case E_OUTOFMEMORY:\n    return Result(Result::Code::RuntimeError, \"Out of memory\");\n  case E_INVALIDARG:\n    return Result(Result::Code::ArgumentInvalid, \"Invalid argument\");\n  case E_NOTIMPL:\n    return Result(Result::Code::Unimplemented, \"Not implemented\");\n  case DXGI_ERROR_DEVICE_REMOVED:\n    return Result(Result::Code::RuntimeError, \"Device removed\");\n  case DXGI_ERROR_DEVICE_RESET:\n    return Result(Result::Code::RuntimeError, \"Device reset\");\n  default: {\n    // Include HRESULT code for better debugging of unexpected errors.\n    char buf[64];\n    snprintf(buf, sizeof(buf), \"D3D12 error (hr=0x%08X)\", static_cast<unsigned>(hr));\n    return Result(Result::Code::RuntimeError, buf);\n  }\n  }\n}\n\n// Helper for COM resource release\ntemplate<typename T>\nvoid SafeRelease(T*& ptr) {\n  if (ptr) {\n    ptr->Release();\n    ptr = nullptr;\n  }\n}\n\n// Texture format conversion\nDXGI_FORMAT textureFormatToDXGIFormat(TextureFormat format);\nDXGI_FORMAT textureFormatToDXGIResourceFormat(TextureFormat format, bool sampledUsage);\nDXGI_FORMAT textureFormatToDXGIShaderResourceViewFormat(TextureFormat format);\nTextureFormat dxgiFormatToTextureFormat(DXGI_FORMAT format);\n\n// Align value to specified alignment (must be power-of-two)\n// Template allows use with different integer types (UINT64, size_t, etc.)\n// IMPORTANT: alignment must be a power of 2 (e.g., 256, 4096, 65536)\ntemplate<typename T>\ninline T AlignUp(T value, T alignment) {\n  IGL_DEBUG_ASSERT((alignment & (alignment - 1)) == 0, \"AlignUp: alignment must be power-of-two\");\n  return (value + alignment - 1) & ~(alignment - 1);\n}\n\n// Hash combining utility (boost::hash_combine pattern)\n// Used for hashing complex structures like root signatures and pipeline descriptors\ntemplate<typename T>\ninline void hashCombine(size_t& seed, const T& value) {\n  seed ^= std::hash<T>{}(value) + 0x9e3779b9 + (seed << 6) + (seed >> 2);\n}\n\n// Feature level to string conversion\ninline const char* featureLevelToString(D3D_FEATURE_LEVEL level) {\n  switch (level) {\n  case D3D_FEATURE_LEVEL_12_2:\n    return \"12.2\";\n  case D3D_FEATURE_LEVEL_12_1:\n    return \"12.1\";\n  case D3D_FEATURE_LEVEL_12_0:\n    return \"12.0\";\n  case D3D_FEATURE_LEVEL_11_1:\n    return \"11.1\";\n  case D3D_FEATURE_LEVEL_11_0:\n    return \"11.0\";\n  default:\n    return \"Unknown\";\n  }\n}\n\n// Shader target helper.\n// Convert D3D_SHADER_MODEL enum to shader target string (e.g., \"vs_6_6\", \"ps_5_1\").\ninline std::string getShaderTarget(D3D_SHADER_MODEL shaderModel, ShaderStage stage) {\n  // Extract major and minor version from D3D_SHADER_MODEL enum\n  // Format: 0xMm where M = major, m = minor (e.g., 0x66 = SM 6.6, 0x51 = SM 5.1)\n  int major = (shaderModel >> 4) & 0xF;\n  int minor = shaderModel & 0xF;\n\n  // Get stage prefix\n  const char* stagePrefix = nullptr;\n  switch (stage) {\n  case ShaderStage::Vertex:\n    stagePrefix = \"vs\";\n    break;\n  case ShaderStage::Fragment:\n    stagePrefix = \"ps\"; // DirectX uses \"ps\" for pixel/fragment shaders\n    break;\n  case ShaderStage::Compute:\n    stagePrefix = \"cs\";\n    break;\n  default:\n    return \"\";\n  }\n\n  // Build target string (e.g., \"vs_6_6\", \"ps_5_1\", \"cs_6_0\")\n  char target[16];\n  snprintf(target, sizeof(target), \"%s_%d_%d\", stagePrefix, major, minor);\n  return std::string(target);\n}\n\n} // namespace igl::d3d12\n\n#endif // IGL_D3D12_COMMON_H\n"
  },
  {
    "path": "src/igl/d3d12/ComputeCommandEncoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/ComputeCommandEncoder.h>\n\n#include <igl/d3d12/Buffer.h>\n#include <igl/d3d12/CommandBuffer.h>\n#include <igl/d3d12/ComputePipelineState.h>\n#include <igl/d3d12/DescriptorHeapManager.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/SamplerState.h>\n#include <igl/d3d12/Texture.h>\n\nnamespace igl::d3d12 {\n\nComputeCommandEncoder::ComputeCommandEncoder(CommandBuffer& commandBuffer) :\n  commandBuffer_(commandBuffer),\n  resourcesBinder_(commandBuffer, true /* isCompute */),\n  isEncoding_(true) {\n  IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder created\\n\");\n\n  // Set descriptor heaps for this command list.\n  // Use active heap from frame context, not the legacy accessor.\n  auto& context = commandBuffer_.getContext();\n  auto& frameCtx = context.getFrameContexts()[context.getCurrentFrameIndex()];\n\n  ID3D12DescriptorHeap* cbvSrvUavHeap = frameCtx.activeCbvSrvUavHeap.Get();\n  ID3D12DescriptorHeap* samplerHeap = frameCtx.samplerHeap.Get();\n\n  // Legacy fallback: if the context does not provide per-frame heaps, try the manager once\n  if ((!cbvSrvUavHeap || !samplerHeap) && context.getDescriptorHeapManager()) {\n    auto* heapMgr = context.getDescriptorHeapManager();\n    if (!cbvSrvUavHeap) {\n      cbvSrvUavHeap = heapMgr->getCbvSrvUavHeap();\n    }\n    if (!samplerHeap) {\n      samplerHeap = heapMgr->getSamplerHeap();\n    }\n  }\n\n  if (cbvSrvUavHeap && samplerHeap) {\n    auto* commandList = commandBuffer_.getCommandList();\n    if (commandList) {\n      ID3D12DescriptorHeap* heaps[] = {cbvSrvUavHeap, samplerHeap};\n      commandList->SetDescriptorHeaps(2, heaps);\n      IGL_D3D12_LOG_VERBOSE(\n          \"ComputeCommandEncoder: Descriptor heaps set (active heap from FrameContext)\\n\");\n    }\n  }\n}\n\nvoid ComputeCommandEncoder::endEncoding() {\n  if (!isEncoding_) {\n    return;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder::endEncoding()\\n\");\n  isEncoding_ = false;\n}\n\nvoid ComputeCommandEncoder::bindComputePipelineState(\n    const std::shared_ptr<IComputePipelineState>& pipelineState) {\n  if (!pipelineState) {\n    IGL_LOG_ERROR(\"ComputeCommandEncoder::bindComputePipelineState - null pipeline state\\n\");\n    return;\n  }\n\n  currentPipeline_ = static_cast<const ComputePipelineState*>(pipelineState.get());\n\n  auto* commandList = commandBuffer_.getCommandList();\n  if (!commandBuffer_.isRecording() || !commandList) {\n    IGL_LOG_ERROR(\n        \"ComputeCommandEncoder::bindComputePipelineState - command list is closed or null\\n\");\n    return;\n  }\n\n  // Set compute root signature and pipeline state\n  commandList->SetComputeRootSignature(currentPipeline_->getRootSignature());\n  commandList->SetPipelineState(currentPipeline_->getPipelineState());\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"ComputeCommandEncoder::bindComputePipelineState - PSO and root signature set\\n\");\n}\n\nvoid ComputeCommandEncoder::dispatchThreadGroups(const Dimensions& threadgroupCount,\n                                                 const Dimensions& /*threadgroupSize*/,\n                                                 const Dependencies& dependencies) {\n  if (!currentPipeline_) {\n    IGL_LOG_ERROR(\"ComputeCommandEncoder::dispatchThreadGroups - no pipeline state bound\\n\");\n    return;\n  }\n\n  auto* commandList = commandBuffer_.getCommandList();\n  if (!commandBuffer_.isRecording() || !commandList) {\n    IGL_LOG_ERROR(\"ComputeCommandEncoder::dispatchThreadGroups - command list is closed or null\\n\");\n    return;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder::dispatchThreadGroups(%u, %u, %u)\\n\",\n                        threadgroupCount.width,\n                        threadgroupCount.height,\n                        threadgroupCount.depth);\n\n  // Process dependencies - insert barriers for buffers and textures\n  const Dependencies* deps = &dependencies;\n  std::vector<ID3D12Resource*> uavResources;\n\n  while (deps) {\n    // Handle buffer dependencies\n    for (IBuffer* buf : deps->buffers) {\n      if (!buf) {\n        break;\n      }\n      auto* d3dBuffer = static_cast<Buffer*>(buf);\n      uavResources.push_back(d3dBuffer->getResource());\n    }\n\n    // Handle texture dependencies\n    for (ITexture* tex : deps->textures) {\n      if (!tex) {\n        break;\n      }\n      auto* d3dTexture = static_cast<Texture*>(tex);\n      // Ensure texture is in proper state for compute access\n      d3dTexture->transitionAll(commandList, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);\n      uavResources.push_back(d3dTexture->getResource());\n    }\n\n    deps = deps->next;\n  }\n\n  // Insert UAV barriers for dependent resources before dispatch\n  if (!uavResources.empty()) {\n    std::vector<D3D12_RESOURCE_BARRIER> barriers;\n    barriers.reserve(uavResources.size());\n\n    for (ID3D12Resource* resource : uavResources) {\n      D3D12_RESOURCE_BARRIER barrier = {};\n      barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV;\n      barrier.UAV.pResource = resource;\n      barriers.push_back(barrier);\n    }\n\n    commandList->ResourceBarrier(static_cast<UINT>(barriers.size()), barriers.data());\n    IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder: Inserted %zu UAV barriers before dispatch\\n\",\n                          barriers.size());\n  }\n\n  // Apply all resource bindings (textures, samplers, buffers, UAVs) before dispatch.\n  // For compute pipelines, pass nullptr since there's no RenderPipelineState\n  Result bindResult;\n  if (!resourcesBinder_.updateBindings(nullptr, &bindResult)) {\n    IGL_LOG_ERROR(\"dispatchThreadGroups: Failed to update resource bindings: %s\\n\",\n                  bindResult.message.c_str());\n    return;\n  }\n\n  // Bind all cached resources to root parameters\n  // Root signature layout (from Device::createComputePipeline):\n  // - Parameter 0: Root Constants (b0) - 16 DWORDs\n  // - Parameter 1: UAV table (u0-uN)\n  // - Parameter 2: SRV table (t0-tN)\n  // - Parameter 3: CBV table (b1-bN)\n  // - Parameter 4: Sampler table (s0-sN)\n\n  // Bind UAVs (parameter 1), with debug validation to catch sparse binding.\n  if (boundUavCount_ > 0) {\n    IGL_DEBUG_ASSERT(cachedUavHandles_[0].ptr != 0,\n                     \"UAV count > 0 but base handle is null - did you bind only higher slots?\");\n    if (cachedUavHandles_[0].ptr != 0) {\n      commandList->SetComputeRootDescriptorTable(1, cachedUavHandles_[0]);\n      IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder: Bound %zu UAVs\\n\", boundUavCount_);\n    } else {\n      IGL_LOG_ERROR(\n          \"ComputeCommandEncoder: UAV count > 0 but base handle is null - skipping binding and \"\n          \"clearing boundUavCount_ to 0\\n\");\n      // Clear count to avoid repeated errors on subsequent dispatches\n      boundUavCount_ = 0;\n    }\n  }\n\n  // Bind SRVs (Parameter 2)\n  if (boundSrvCount_ > 0) {\n    IGL_DEBUG_ASSERT(cachedSrvHandles_[0].ptr != 0,\n                     \"SRV count > 0 but base handle is null - did you bind only higher slots?\");\n    if (cachedSrvHandles_[0].ptr != 0) {\n      commandList->SetComputeRootDescriptorTable(2, cachedSrvHandles_[0]);\n      IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder: Bound %zu SRVs\\n\", boundSrvCount_);\n    } else {\n      IGL_LOG_ERROR(\n          \"ComputeCommandEncoder: SRV count > 0 but base handle is null - skipping binding and \"\n          \"clearing boundSrvCount_ to 0\\n\");\n      // Clear count to avoid repeated errors on subsequent dispatches\n      boundSrvCount_ = 0;\n    }\n  }\n\n  // Bind CBVs (parameter 3). Only create/allocate CBV descriptors when bindings have\n  // changed or the heap page has changed.\n  if (boundCbvCount_ > 0) {\n    auto& context = commandBuffer_.getContext();\n    auto& frameCtx = context.getFrameContexts()[context.getCurrentFrameIndex()];\n    const uint32_t currentPageIdx = frameCtx.currentCbvSrvUavPageIndex;\n\n    // Check if heap page changed - invalidates cached descriptors\n    const bool heapPageChanged = (cachedCbvPageIndex_ != currentPageIdx);\n    if (heapPageChanged) {\n      cbvBindingsDirty_ = true;\n      IGL_D3D12_LOG_VERBOSE(\n          \"ComputeCommandEncoder: Heap page changed (%u -> %u), invalidating CBV cache\\n\",\n          cachedCbvPageIndex_,\n          currentPageIdx);\n    }\n\n    // Only recreate descriptors if bindings are dirty or heap changed\n    if (cbvBindingsDirty_) {\n      auto* device = context.getDevice();\n\n      // Allocate descriptors for CBV table - use fixed-size array to avoid heap allocation\n      uint32_t cbvIndices[kMaxComputeBuffers] = {};\n      for (size_t i = 0; i < boundCbvCount_; ++i) {\n        uint32_t descriptorIndex = 0;\n        Result allocResult = commandBuffer_.getNextCbvSrvUavDescriptor(&descriptorIndex);\n        if (!allocResult.isOk()) {\n          IGL_LOG_ERROR(\"ComputeCommandEncoder: Failed to allocate CBV descriptor %zu: %s\\n\",\n                        i,\n                        allocResult.message.c_str());\n          return;\n        }\n        cbvIndices[i] = descriptorIndex;\n      }\n\n      // Create CBV descriptors for all bound constant buffers\n      for (size_t i = 0; i < boundCbvCount_; ++i) {\n        if (cachedCbvAddresses_[i] != 0 && cachedCbvSizes_[i] > 0) {\n          const uint32_t descriptorIndex = cbvIndices[i];\n          D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n\n          // Enforce 64 KB limit for CBVs.\n          constexpr size_t kMaxCBVSize = 65536; // 64 KB (D3D12 spec limit)\n          if (cachedCbvSizes_[i] > kMaxCBVSize) {\n            IGL_LOG_ERROR(\n                \"ComputeCommandEncoder: Constant buffer %zu size (%zu bytes) exceeds D3D12 64 KB \"\n                \"limit\\n\",\n                i,\n                cachedCbvSizes_[i]);\n            continue; // Skip this CBV\n          }\n\n          // Align size to 256-byte boundary (D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT)\n          const size_t alignedSize = (cachedCbvSizes_[i] + 255) & ~255;\n\n          IGL_DEBUG_ASSERT(alignedSize <= kMaxCBVSize, \"CBV size exceeds 64 KB after alignment\");\n\n          D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {};\n          cbvDesc.BufferLocation = cachedCbvAddresses_[i];\n          cbvDesc.SizeInBytes = static_cast<UINT>(alignedSize);\n\n          device->CreateConstantBufferView(&cbvDesc, cpuHandle);\n        }\n      }\n\n      // Cache the base index and page for reuse\n      cachedCbvBaseIndex_ = cbvIndices[0];\n      cachedCbvPageIndex_ = currentPageIdx;\n      cbvBindingsDirty_ = false;\n\n      IGL_D3D12_LOG_VERBOSE(\n          \"ComputeCommandEncoder: Created %zu CBV descriptors at page %u (descriptors %u-%u)\\n\",\n          boundCbvCount_,\n          currentPageIdx,\n          cbvIndices[0],\n          cbvIndices[boundCbvCount_ - 1]);\n    }\n\n    // Recompute GPU handle from cached base index for current heap\n    D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(cachedCbvBaseIndex_);\n\n    // Defensive check: ensure handle is valid before binding\n    IGL_DEBUG_ASSERT(gpuHandle.ptr != 0, \"CBV count > 0 but GPU handle is null\");\n    if (gpuHandle.ptr != 0) {\n      commandList->SetComputeRootDescriptorTable(3, gpuHandle);\n      IGL_D3D12_LOG_VERBOSE(\n          \"ComputeCommandEncoder: Bound %zu CBVs via descriptor table (base index %u)\\n\",\n          boundCbvCount_,\n          cachedCbvBaseIndex_);\n    } else {\n      IGL_LOG_ERROR(\"ComputeCommandEncoder: CBV GPU handle is null, skipping binding\\n\");\n    }\n  }\n\n  // Bind Samplers (Parameter 4)\n  if (boundSamplerCount_ > 0) {\n    IGL_DEBUG_ASSERT(cachedSamplerHandles_[0].ptr != 0,\n                     \"Sampler count > 0 but base handle is null - did you bind only higher slots?\");\n    if (cachedSamplerHandles_[0].ptr != 0) {\n      commandList->SetComputeRootDescriptorTable(4, cachedSamplerHandles_[0]);\n      IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder: Bound %zu samplers\\n\", boundSamplerCount_);\n    } else {\n      IGL_LOG_ERROR(\n          \"ComputeCommandEncoder: Sampler count > 0 but base handle is null - skipping binding and \"\n          \"clearing boundSamplerCount_ to 0\\n\");\n      // Clear count to avoid repeated errors on subsequent dispatches\n      boundSamplerCount_ = 0;\n    }\n  }\n\n  // Dispatch compute work\n  // Note: threadgroupSize is embedded in the compute shader ([numthreads(...)])\n  commandList->Dispatch(threadgroupCount.width, threadgroupCount.height, threadgroupCount.depth);\n\n  // Insert resource-specific UAV barriers for bound UAVs to ensure compute writes are visible.\n  // Only barrier UAVs that were actually bound (more efficient than a global barrier).\n  if (boundUavCount_ > 0) {\n    // Use fixed-size array to avoid heap allocation in hot path\n    D3D12_RESOURCE_BARRIER barriers[kMaxComputeBuffers];\n    UINT barrierCount = 0;\n\n    for (size_t i = 0; i < boundUavCount_; ++i) {\n      if (boundUavResources_[i] != nullptr) {\n        D3D12_RESOURCE_BARRIER& barrier = barriers[barrierCount++];\n        barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_UAV;\n        barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;\n        barrier.UAV.pResource = boundUavResources_[i]; // Resource-specific UAV barrier\n      }\n    }\n\n    if (barrierCount > 0) {\n      commandList->ResourceBarrier(barrierCount, barriers);\n      IGL_D3D12_LOG_VERBOSE(\n          \"ComputeCommandEncoder::dispatchThreadGroups - dispatch complete, %u resource-specific \"\n          \"UAV barriers inserted\\n\",\n          barrierCount);\n    }\n  }\n}\n\nvoid ComputeCommandEncoder::bindPushConstants(const void* data, size_t length, size_t offset) {\n  auto* commandList = commandBuffer_.getCommandList();\n  if (!commandBuffer_.isRecording() || !commandList || !data || length == 0) {\n    IGL_LOG_ERROR(\n        \"ComputeCommandEncoder::bindPushConstants: Invalid parameters or closed command list \"\n        \"(list=%p, data=%p, len=%zu)\\n\",\n        commandList,\n        data,\n        length);\n    return;\n  }\n\n  // Compute root signature parameter 0 is declared as D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS\n  // (b0). Increased to 32 DWORDs (128 bytes) to match Vulkan.\n  constexpr size_t kMaxPushConstantBytes = 128;\n\n  if (length + offset > kMaxPushConstantBytes) {\n    IGL_LOG_ERROR(\n        \"ComputeCommandEncoder::bindPushConstants: size %zu + offset %zu exceeds maximum %zu \"\n        \"bytes\\n\",\n        length,\n        offset,\n        kMaxPushConstantBytes);\n    return;\n  }\n\n  // Calculate number of 32-bit values and offset in DWORDs\n  const uint32_t num32BitValues = static_cast<uint32_t>((length + 3) / 4); // Round up to DWORDs\n  const uint32_t destOffsetIn32BitValues = static_cast<uint32_t>(offset / 4);\n\n  // Use SetComputeRoot32BitConstants to directly write data to root constants\n  // Root parameter 0 = b0 (Push Constants), as declared in compute root signature\n  commandList->SetComputeRoot32BitConstants(\n      0, // Root parameter index (push constants at parameter 0)\n      num32BitValues, // Number of 32-bit values to set\n      data, // Source data\n      destOffsetIn32BitValues); // Destination offset in 32-bit values\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"ComputeCommandEncoder::bindPushConstants: Set %u DWORDs (%zu bytes) at offset %zu to root \"\n      \"parameter 0 (b0)\\n\",\n      num32BitValues,\n      length,\n      offset);\n}\n\nvoid ComputeCommandEncoder::bindTexture(uint32_t index, ITexture* texture) {\n  // Delegate to D3D12ResourcesBinder for centralized descriptor management.\n  resourcesBinder_.bindTexture(index, texture);\n}\n\nvoid ComputeCommandEncoder::bindBuffer(uint32_t index,\n                                       IBuffer* buffer,\n                                       size_t offset,\n                                       size_t /*bufferSize*/) {\n  if (!buffer) {\n    IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder::bindBuffer: null buffer\\n\");\n    return;\n  }\n\n  auto* d3dBuffer = static_cast<Buffer*>(buffer);\n  auto& context = commandBuffer_.getContext();\n  auto* device = context.getDevice();\n\n  if (!device || context.getCbvSrvUavHeap() == nullptr) {\n    IGL_LOG_ERROR(\n        \"ComputeCommandEncoder::bindBuffer: missing device or per-frame descriptor heap\\n\");\n    return;\n  }\n\n  // Determine buffer type\n  const auto bufferType = d3dBuffer->getBufferType();\n  const bool isUniformBuffer = (bufferType & BufferDesc::BufferTypeBits::Uniform) != 0;\n  const bool isStorageBuffer = (bufferType & BufferDesc::BufferTypeBits::Storage) != 0;\n\n  IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder::bindBuffer(%u): isUniform=%d, isStorage=%d\\n\",\n                        index,\n                        isUniformBuffer,\n                        isStorageBuffer);\n\n  if (isStorageBuffer) {\n    // Storage buffer - bind as UAV (unordered access view) for read/write\n    if (index >= kMaxComputeBuffers) {\n      IGL_LOG_ERROR(\"ComputeCommandEncoder::bindBuffer: UAV index %u exceeds max %zu\\n\",\n                    index,\n                    kMaxComputeBuffers);\n      return;\n    }\n\n    // Determine element stride for structured buffer views\n    // If storageStride is not specified, default to 4 bytes to preserve existing behavior\n    size_t elementStride = d3dBuffer->getStorageElementStride();\n    if (elementStride == 0) {\n      elementStride = 4;\n    }\n\n    // D3D12 requires UAV buffer views to use element-aligned offsets\n    if (offset % elementStride != 0) {\n      IGL_LOG_ERROR(\n          \"ComputeCommandEncoder::bindBuffer: Storage buffer offset %zu is not aligned to \"\n          \"element stride (%zu bytes). UAV FirstElement will be truncated (offset/stride).\\n\",\n          offset,\n          elementStride);\n      // Continue but log warning – FirstElement below uses integer division\n    }\n\n    // Validate offset doesn't exceed buffer size to prevent underflow\n    const size_t bufferSizeBytes = d3dBuffer->getSizeInBytes();\n    if (offset > bufferSizeBytes) {\n      IGL_LOG_ERROR(\n          \"ComputeCommandEncoder::bindBuffer: Storage buffer offset %zu exceeds buffer size %zu; \"\n          \"skipping UAV binding\\n\",\n          offset,\n          bufferSizeBytes);\n      return;\n    }\n    const size_t remaining = bufferSizeBytes - offset;\n\n    // Check for undersized buffer (would create empty or partial view)\n    if (remaining < elementStride) {\n      IGL_LOG_ERROR(\n          \"ComputeCommandEncoder::bindBuffer: Remaining buffer size %zu is less than element \"\n          \"stride %zu; \"\n          \"UAV will have NumElements=0 (empty view). Check buffer size and offset.\\n\",\n          remaining,\n          elementStride);\n      // Continue to create the descriptor, but it will be empty (NumElements=0)\n    }\n\n    // Use Result-based allocation with dynamic heap growth.\n    uint32_t descriptorIndex = 0;\n    Result allocResult = commandBuffer_.getNextCbvSrvUavDescriptor(&descriptorIndex);\n    if (!allocResult.isOk()) {\n      IGL_LOG_ERROR(\"ComputeCommandEncoder::bindBuffer: Failed to allocate UAV descriptor: %s\\n\",\n                    allocResult.message.c_str());\n      return;\n    }\n    D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n    D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(descriptorIndex);\n\n    // Create UAV descriptor for RWStructuredBuffer (structured buffer)\n    // D3D12 compute shaders expect structured buffers, not raw buffers\n    D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};\n    uavDesc.Format = DXGI_FORMAT_UNKNOWN; // Required for structured buffers\n    uavDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER;\n    // Element index and count are expressed in units of elementStride bytes\n    // Division truncates if offset is not aligned; see warning above\n    uavDesc.Buffer.FirstElement = static_cast<UINT64>(offset / elementStride);\n    // CRITICAL: NumElements must be (size - offset) / stride, not total size / stride\n    uavDesc.Buffer.NumElements = static_cast<UINT>(remaining / elementStride);\n    uavDesc.Buffer.StructureByteStride = static_cast<UINT>(elementStride);\n    uavDesc.Buffer.CounterOffsetInBytes = 0;\n    uavDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE; // No flags for structured buffers\n\n    // Pre-creation validation.\n    IGL_DEBUG_ASSERT(device != nullptr, \"Device is null before CreateUnorderedAccessView\");\n    IGL_DEBUG_ASSERT(d3dBuffer->getResource() != nullptr, \"Buffer resource is null\");\n    IGL_DEBUG_ASSERT(cpuHandle.ptr != 0, \"UAV descriptor handle is invalid\");\n\n    device->CreateUnorderedAccessView(d3dBuffer->getResource(), nullptr, &uavDesc, cpuHandle);\n\n    cachedUavHandles_[index] = gpuHandle;\n    for (size_t i = index + 1; i < kMaxComputeBuffers; ++i) {\n      cachedUavHandles_[i] = {};\n    }\n    boundUavCount_ = static_cast<size_t>(index + 1);\n\n    // Track UAV resource for precise barrier synchronization.\n    // Note: UAV bindings are assumed to be dense (slots 0..boundUavCount_-1).\n    // Both cachedUavHandles_ and boundUavResources_ rely on this invariant.\n    boundUavResources_[index] = d3dBuffer->getResource();\n    for (size_t i = index + 1; i < kMaxComputeBuffers; ++i) {\n      boundUavResources_[i] = nullptr;\n    }\n\n    IGL_D3D12_LOG_VERBOSE(\n        \"ComputeCommandEncoder::bindBuffer: Created UAV at index %u, descriptor slot %u\\n\",\n        index,\n        descriptorIndex);\n\n    commandBuffer_.trackTransientResource(d3dBuffer->getResource());\n  } else if (isUniformBuffer) {\n    // Uniform buffer - bind as CBV (constant buffer view)\n    if (index >= kMaxComputeBuffers) {\n      IGL_LOG_ERROR(\"ComputeCommandEncoder::bindBuffer: CBV index %u exceeds max %zu\\n\",\n                    index,\n                    kMaxComputeBuffers);\n      return;\n    }\n\n    // Enforce dense binding: CBVs must start at slot 0 with no gaps\n    if (index > 0 && cachedCbvAddresses_[0] == 0) {\n      IGL_LOG_ERROR(\n          \"ComputeCommandEncoder::bindBuffer: CBV bindings must be dense starting from slot 0. \"\n          \"Cannot bind slot %u when slot 0 is not bound.\\n\",\n          index);\n      return;\n    }\n\n    // Check for gaps in bindings\n    for (size_t i = 0; i < index; ++i) {\n      if (cachedCbvAddresses_[i] == 0) {\n        IGL_LOG_ERROR(\n            \"ComputeCommandEncoder::bindBuffer: CBV bindings must be dense. \"\n            \"Cannot bind slot %u when slot %zu is not bound (gap detected).\\n\",\n            index,\n            i);\n        return;\n      }\n    }\n\n    // D3D12 requires constant buffer addresses to be 256-byte aligned\n    // (D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT)\n    if ((offset & 255) != 0) {\n      IGL_LOG_ERROR(\n          \"ComputeCommandEncoder::bindBuffer: ERROR - CBV offset %zu is not 256-byte aligned \"\n          \"(required by D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT). \"\n          \"Constant buffers must be created at aligned offsets. Ignoring bind request.\\n\",\n          offset);\n      return;\n    }\n\n    cachedCbvAddresses_[index] = d3dBuffer->gpuAddress(offset);\n    // Store buffer size for CBV descriptor creation on the next dispatch.\n    // Actual descriptor creation happens in dispatchThreadGroups when cbvBindingsDirty_ is set.\n    size_t bufferSize = d3dBuffer->getSizeInBytes() - offset;\n\n    // D3D12 spec: Constant buffers must be ≤ 64 KB\n    constexpr size_t kMaxCBVSize = 65536; // 64 KB\n    if (bufferSize > kMaxCBVSize) {\n      IGL_LOG_ERROR(\n          \"ComputeCommandEncoder::bindBuffer: Buffer size (%zu bytes) exceeds D3D12 64 KB limit \"\n          \"for constant buffers at index %u. Clamping to 64 KB.\\n\",\n          bufferSize,\n          index);\n      bufferSize = kMaxCBVSize;\n    }\n\n    cachedCbvSizes_[index] = bufferSize;\n    for (size_t i = index + 1; i < kMaxComputeBuffers; ++i) {\n      cachedCbvAddresses_[i] = 0;\n      cachedCbvSizes_[i] = 0;\n    }\n    boundCbvCount_ = static_cast<size_t>(index + 1);\n\n    // Mark CBV bindings as dirty to trigger descriptor recreation on the next dispatch.\n    cbvBindingsDirty_ = true;\n\n    IGL_D3D12_LOG_VERBOSE(\n        \"ComputeCommandEncoder::bindBuffer: Cached CBV at index %u, address 0x%llx, size %zu\\n\",\n        index,\n        cachedCbvAddresses_[index],\n        cachedCbvSizes_[index]);\n\n    commandBuffer_.trackTransientResource(d3dBuffer->getResource());\n  } else {\n    IGL_LOG_ERROR(\"ComputeCommandEncoder::bindBuffer: Buffer must be Uniform or Storage type\\n\");\n  }\n}\n\nvoid ComputeCommandEncoder::bindUniform(const UniformDesc& /*uniformDesc*/, const void* /*data*/) {\n  // Single uniform binding not supported in D3D12\n  // Use uniform buffers (CBVs) instead\n  IGL_D3D12_LOG_VERBOSE(\n      \"ComputeCommandEncoder::bindUniform - not supported, use uniform buffers\\n\");\n}\n\nvoid ComputeCommandEncoder::bindBytes(uint32_t /*index*/, const void* /*data*/, size_t /*length*/) {\n  // D3D12 backend does not support bindBytes\n  // Applications should use uniform buffers (bindBuffer) instead\n  // This is a no-op to maintain compatibility with cross-platform code\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  IGL_LOG_INFO_ONCE(\n      \"bindBytes is not supported in D3D12 backend. Use bindBuffer with uniform buffers \"\n      \"instead.\\n\");\n}\n\nvoid ComputeCommandEncoder::bindImageTexture(uint32_t index,\n                                             ITexture* texture,\n                                             TextureFormat /*format*/) {\n  if (!texture) {\n    IGL_D3D12_LOG_VERBOSE(\"ComputeCommandEncoder::bindImageTexture: null texture\\n\");\n    return;\n  }\n\n  if (index >= kMaxComputeBuffers) {\n    IGL_LOG_ERROR(\"ComputeCommandEncoder::bindImageTexture: index %u exceeds max %zu\\n\",\n                  index,\n                  kMaxComputeBuffers);\n    return;\n  }\n\n  auto& context = commandBuffer_.getContext();\n  auto* device = context.getDevice();\n  auto* d3dTexture = static_cast<Texture*>(texture);\n\n  if (!device || !d3dTexture->getResource() || context.getCbvSrvUavHeap() == nullptr) {\n    IGL_LOG_ERROR(\n        \"ComputeCommandEncoder::bindImageTexture: missing device, resource, or per-frame heap\\n\");\n    return;\n  }\n\n  // Transition texture to UAV state for compute shader read/write access\n  auto* commandList = commandBuffer_.getCommandList();\n  if (commandList) {\n    d3dTexture->transitionAll(commandList, D3D12_RESOURCE_STATE_UNORDERED_ACCESS);\n  }\n\n  // Allocate descriptor and create UAV using Result-based allocation with dynamic heap growth.\n  uint32_t descriptorIndex = 0;\n  Result allocResult = commandBuffer_.getNextCbvSrvUavDescriptor(&descriptorIndex);\n  if (!allocResult.isOk()) {\n    IGL_LOG_ERROR(\n        \"ComputeCommandEncoder::bindImageTexture: Failed to allocate UAV descriptor: %s\\n\",\n        allocResult.message.c_str());\n    return;\n  }\n  D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n  D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(descriptorIndex);\n\n  // Create UAV descriptor\n  D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};\n  uavDesc.Format = textureFormatToDXGIFormat(d3dTexture->getFormat());\n\n  auto resourceDesc = d3dTexture->getResource()->GetDesc();\n  if (resourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D) {\n    uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE3D;\n    uavDesc.Texture3D.MipSlice = 0;\n    uavDesc.Texture3D.FirstWSlice = 0;\n    uavDesc.Texture3D.WSize = resourceDesc.DepthOrArraySize;\n  } else if (resourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE2D) {\n    if (resourceDesc.DepthOrArraySize > 1) {\n      uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2DARRAY;\n      uavDesc.Texture2DArray.MipSlice = 0;\n      uavDesc.Texture2DArray.FirstArraySlice = 0;\n      uavDesc.Texture2DArray.ArraySize = resourceDesc.DepthOrArraySize;\n      uavDesc.Texture2DArray.PlaneSlice = 0;\n    } else {\n      uavDesc.ViewDimension = D3D12_UAV_DIMENSION_TEXTURE2D;\n      uavDesc.Texture2D.MipSlice = 0;\n      uavDesc.Texture2D.PlaneSlice = 0;\n    }\n  } else {\n    IGL_LOG_ERROR(\"ComputeCommandEncoder::bindImageTexture: unsupported dimension\\n\");\n    return;\n  }\n\n  // Pre-creation validation.\n  IGL_DEBUG_ASSERT(device != nullptr, \"Device is null before CreateUnorderedAccessView\");\n  IGL_DEBUG_ASSERT(d3dTexture->getResource() != nullptr, \"Texture resource is null\");\n  IGL_DEBUG_ASSERT(cpuHandle.ptr != 0, \"UAV descriptor handle is invalid\");\n\n  device->CreateUnorderedAccessView(d3dTexture->getResource(), nullptr, &uavDesc, cpuHandle);\n\n  cachedUavHandles_[index] = gpuHandle;\n  for (size_t i = index + 1; i < kMaxComputeBuffers; ++i) {\n    cachedUavHandles_[i] = {};\n  }\n  boundUavCount_ = static_cast<size_t>(index + 1);\n\n  // Track UAV resources for precise barrier synchronization.\n  // Note: UAV bindings are assumed to be dense (slots 0..boundUavCount_-1).\n  // Both cachedUavHandles_ and boundUavResources_ rely on this invariant.\n  boundUavResources_[index] = d3dTexture->getResource();\n  for (size_t i = index + 1; i < kMaxComputeBuffers; ++i) {\n    boundUavResources_[i] = nullptr;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"ComputeCommandEncoder::bindImageTexture: Created UAV at index %u, descriptor slot %u\\n\",\n      index,\n      descriptorIndex);\n}\n\nvoid ComputeCommandEncoder::bindSamplerState(uint32_t index, ISamplerState* samplerState) {\n  // Delegate to D3D12ResourcesBinder for centralized descriptor management.\n  resourcesBinder_.bindSamplerState(index, samplerState);\n}\n\nvoid ComputeCommandEncoder::pushDebugGroupLabel(const char* label, const Color& /*color*/) const {\n  auto* commandList = commandBuffer_.getCommandList();\n  if (!commandBuffer_.isRecording() || !commandList || !label) {\n    return;\n  }\n  // PIX debug markers\n  const size_t len = strlen(label);\n  std::wstring wlabel(len, L' ');\n  std::mbstowcs(&wlabel[0], label, len);\n  commandList->BeginEvent(\n      0, wlabel.c_str(), static_cast<UINT>((wlabel.length() + 1) * sizeof(wchar_t)));\n}\n\nvoid ComputeCommandEncoder::insertDebugEventLabel(const char* label, const Color& /*color*/) const {\n  auto* commandList = commandBuffer_.getCommandList();\n  if (!commandBuffer_.isRecording() || !commandList || !label) {\n    return;\n  }\n  const size_t len = strlen(label);\n  std::wstring wlabel(len, L' ');\n  std::mbstowcs(&wlabel[0], label, len);\n  commandList->SetMarker(\n      0, wlabel.c_str(), static_cast<UINT>((wlabel.length() + 1) * sizeof(wchar_t)));\n}\n\nvoid ComputeCommandEncoder::popDebugGroupLabel() const {\n  auto* commandList = commandBuffer_.getCommandList();\n  if (!commandBuffer_.isRecording() || !commandList) {\n    return;\n  }\n  commandList->EndEvent();\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/ComputeCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/ComputeCommandEncoder.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12ResourcesBinder.h>\n\nnamespace igl::d3d12 {\n\nclass CommandBuffer;\nclass ComputePipelineState;\n\nclass ComputeCommandEncoder final : public IComputeCommandEncoder {\n public:\n  explicit ComputeCommandEncoder(CommandBuffer& commandBuffer);\n  ~ComputeCommandEncoder() override = default;\n\n  void endEncoding() override;\n\n  void bindComputePipelineState(\n      const std::shared_ptr<IComputePipelineState>& pipelineState) override;\n  void dispatchThreadGroups(const Dimensions& threadgroupCount,\n                            const Dimensions& threadgroupSize,\n                            const Dependencies& dependencies = {}) override;\n  void bindPushConstants(const void* data, size_t length, size_t offset = 0) override;\n  void bindTexture(uint32_t index, ITexture* texture) override;\n\n  /**\n   * @brief Bind a buffer to a compute shader slot\n   *\n   * IMPORTANT: For constant buffers (uniform buffers) in compute shaders, bindings MUST be DENSE\n   * starting from index 0 with NO GAPS. For example:\n   *   - VALID:   bindBuffer(0, ...), bindBuffer(1, ...), bindBuffer(2, ...)\n   *   - INVALID: bindBuffer(0, ...), bindBuffer(2, ...) // gap at index 1\n   *   - INVALID: bindBuffer(1, ...), bindBuffer(2, ...) // index 0 not bound\n   *\n   * This constraint is enforced by D3D12ResourcesBinder and will return InvalidOperation if\n   * violated. See D3D12ResourcesBinder::updateBufferBindings for implementation details.\n   *\n   * @param index Buffer slot index (maps to HLSL register b0, b1, etc. for CBVs)\n   * @param buffer Buffer to bind\n   * @param offset Offset in bytes into the buffer\n   * @param bufferSize Size of the buffer region to bind\n   */\n  void bindBuffer(uint32_t index,\n                  IBuffer* buffer,\n                  size_t offset = 0,\n                  size_t bufferSize = 0) override;\n  void bindUniform(const UniformDesc& uniformDesc, const void* data) override;\n  void bindBytes(uint32_t index, const void* data, size_t length) override;\n  void bindImageTexture(uint32_t index, ITexture* texture, TextureFormat format) override;\n  void bindSamplerState(uint32_t index, ISamplerState* samplerState) override;\n\n  // Debug labels\n  void pushDebugGroupLabel(const char* label, const Color& color) const override;\n  void insertDebugEventLabel(const char* label, const Color& color) const override;\n  void popDebugGroupLabel() const override;\n\n private:\n  CommandBuffer& commandBuffer_;\n  const ComputePipelineState* currentPipeline_ = nullptr;\n  bool isEncoding_ = false;\n\n  // Centralized resource binding management.\n  D3D12ResourcesBinder resourcesBinder_;\n\n  // Cached GPU handles for resources\n  // IMPORTANT: Bindings must be DENSE and start at slot 0 for each table.\n  // SetComputeRootDescriptorTable always uses cached*Handles_[0] as the base,\n  // so binding only higher slots (e.g., slot 1 without slot 0) will fail.\n  static constexpr size_t kMaxComputeBuffers = 8;\n  // Increased from 8 to 16 to match IGL_TEXTURE_SAMPLERS_MAX contract.\n  static constexpr size_t kMaxComputeTextures = IGL_TEXTURE_SAMPLERS_MAX; // 16\n  // Increased from 4 to 16 to match IGL_TEXTURE_SAMPLERS_MAX contract.\n  static constexpr size_t kMaxComputeSamplers = IGL_TEXTURE_SAMPLERS_MAX; // 16\n\n  D3D12_GPU_DESCRIPTOR_HANDLE cachedUavHandles_[kMaxComputeBuffers] = {};\n  D3D12_GPU_DESCRIPTOR_HANDLE cachedSrvHandles_[kMaxComputeTextures] = {};\n  D3D12_GPU_DESCRIPTOR_HANDLE cachedSamplerHandles_[kMaxComputeSamplers] = {};\n  D3D12_GPU_VIRTUAL_ADDRESS cachedCbvAddresses_[kMaxComputeBuffers] = {};\n  // Track CBV sizes for descriptor creation.\n  size_t cachedCbvSizes_[kMaxComputeBuffers] = {};\n\n  size_t boundUavCount_ = 0;\n  size_t boundSrvCount_ = 0;\n  size_t boundCbvCount_ = 0;\n  size_t boundSamplerCount_ = 0;\n\n  // Cache CBV descriptor indices to avoid per-dispatch allocation.\n  uint32_t cachedCbvBaseIndex_ = 0;\n  uint32_t cachedCbvPageIndex_ = UINT32_MAX; // Track heap page for invalidation\n  bool cbvBindingsDirty_ = true; // Track if CBV bindings have changed\n\n  // Track UAV resources for precise synchronization barriers.\n  // Tracks UAV resources bound via bindBuffer (storage buffers) and bindImageTexture (RW textures).\n  ID3D12Resource* boundUavResources_[kMaxComputeBuffers] = {};\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/ComputePipelineState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/ComputePipelineState.h>\n\n#include <d3dcompiler.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPipelineReflection.h>\n#include <igl/d3d12/D3D12ReflectionUtils.h>\n#include <igl/d3d12/ShaderModule.h>\n\nnamespace igl::d3d12 {\n\nComputePipelineState::ComputePipelineState(const ComputePipelineDesc& desc,\n                                           igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState,\n                                           igl::d3d12::ComPtr<ID3D12RootSignature> rootSignature) :\n  desc_(desc), pipelineState_(std::move(pipelineState)), rootSignature_(std::move(rootSignature)) {\n  // Set D3D12 object names for PIX debugging\n  const std::string& debugName = desc_.debugName;\n  if (pipelineState_.Get() && !debugName.empty()) {\n    std::wstring wideName(debugName.begin(), debugName.end());\n    pipelineState_->SetName((L\"ComputePSO_\" + wideName).c_str());\n    IGL_D3D12_LOG_VERBOSE(\"ComputePipelineState: Set PIX debug name 'ComputePSO_%s'\\n\",\n                          debugName.c_str());\n  }\n  if (rootSignature_.Get() && !debugName.empty()) {\n    std::wstring wideName(debugName.begin(), debugName.end());\n    rootSignature_->SetName((L\"ComputeRootSig_\" + wideName).c_str());\n    IGL_D3D12_LOG_VERBOSE(\"ComputePipelineState: Set PIX root signature name 'ComputeRootSig_%s'\\n\",\n                          debugName.c_str());\n  }\n}\n\nstd::shared_ptr<IComputePipelineState::IComputePipelineReflection>\nComputePipelineState::computePipelineReflection() {\n  // Return cached reflection if already created\n  if (reflection_) {\n    return reflection_;\n  }\n\n  // Reflection implementation following the pattern from RenderPipelineState\n  struct ReflectionImpl final : public IComputePipelineReflection {\n    std::vector<BufferArgDesc> ubs;\n    std::vector<SamplerArgDesc> samplers;\n    std::vector<TextureArgDesc> textures;\n    const std::vector<BufferArgDesc>& allUniformBuffers() const override {\n      return ubs;\n    }\n    const std::vector<SamplerArgDesc>& allSamplers() const override {\n      return samplers;\n    }\n    const std::vector<TextureArgDesc>& allTextures() const override {\n      return textures;\n    }\n  };\n\n  auto out = std::make_shared<ReflectionImpl>();\n\n  // Get compute shader module and reflect it\n  if (!desc_.shaderStages) {\n    return out;\n  }\n\n  auto computeModule = desc_.shaderStages->getComputeModule();\n  if (!computeModule) {\n    return out;\n  }\n\n  auto* d3dMod = dynamic_cast<const igl::d3d12::ShaderModule*>(computeModule.get());\n  if (!d3dMod) {\n    return out;\n  }\n\n  const auto& bc = d3dMod->getBytecode();\n  if (bc.empty()) {\n    return out;\n  }\n\n  // Create shader reflection interface using D3DReflect\n  igl::d3d12::ComPtr<ID3D12ShaderReflection> refl;\n  if (FAILED(D3DReflect(bc.data(), bc.size(), IID_PPV_ARGS(refl.GetAddressOf())))) {\n    return out;\n  }\n\n  D3D12_SHADER_DESC sd{};\n  if (FAILED(refl->GetDesc(&sd))) {\n    return out;\n  }\n\n  // Extract constant buffer information\n  for (UINT i = 0; i < sd.ConstantBuffers; ++i) {\n    auto* cb = refl->GetConstantBufferByIndex(i);\n    D3D12_SHADER_BUFFER_DESC cbd{};\n    if (FAILED(cb->GetDesc(&cbd))) {\n      continue;\n    }\n\n    // Find the bind point for this constant buffer\n    int bufferIndex = -1;\n    for (UINT r = 0; r < sd.BoundResources; ++r) {\n      D3D12_SHADER_INPUT_BIND_DESC bind{};\n      if (SUCCEEDED(refl->GetResourceBindingDesc(r, &bind))) {\n        if (bind.Type == D3D_SIT_CBUFFER && std::string(bind.Name) == std::string(cbd.Name)) {\n          bufferIndex = static_cast<int>(bind.BindPoint);\n          break;\n        }\n      }\n    }\n\n    BufferArgDesc ub;\n    ub.name = igl::genNameHandle(cbd.Name ? cbd.Name : \"\");\n    ub.bufferAlignment = 256; // D3D12 constant buffer alignment\n    ub.bufferDataSize = cbd.Size;\n    ub.bufferIndex = bufferIndex;\n    ub.shaderStage = ShaderStage::Compute;\n    ub.isUniformBlock = true;\n\n    // Extract member variables from constant buffer\n    for (UINT v = 0; v < cbd.Variables; ++v) {\n      auto* var = cb->GetVariableByIndex(v);\n      D3D12_SHADER_VARIABLE_DESC vd{};\n      if (FAILED(var->GetDesc(&vd))) {\n        continue;\n      }\n\n      auto* t = var->GetType();\n      if (!t) {\n        continue;\n      }\n\n      D3D12_SHADER_TYPE_DESC td{};\n      if (FAILED(t->GetDesc(&td))) {\n        continue;\n      }\n\n      BufferArgDesc::BufferMemberDesc m;\n      m.name = igl::genNameHandle(vd.Name ? vd.Name : \"\");\n      m.type = ReflectionUtils::mapUniformType(td);\n      m.offset = vd.StartOffset;\n      m.arrayLength = td.Elements ? td.Elements : 1;\n      ub.members.push_back(std::move(m));\n    }\n\n    out->ubs.push_back(std::move(ub));\n  }\n\n  // Extract texture and sampler bindings\n  for (UINT r = 0; r < sd.BoundResources; ++r) {\n    D3D12_SHADER_INPUT_BIND_DESC bind{};\n    if (FAILED(refl->GetResourceBindingDesc(r, &bind))) {\n      continue;\n    }\n\n    if (bind.Type == D3D_SIT_TEXTURE) {\n      TextureArgDesc t;\n      t.name = bind.Name ? bind.Name : \"\";\n      t.type = TextureType::TwoD;\n      t.textureIndex = bind.BindPoint;\n      t.shaderStage = ShaderStage::Compute;\n      out->textures.push_back(std::move(t));\n    } else if (bind.Type == D3D_SIT_SAMPLER) {\n      SamplerArgDesc s;\n      s.name = bind.Name ? bind.Name : \"\";\n      s.samplerIndex = bind.BindPoint;\n      s.shaderStage = ShaderStage::Compute;\n      out->samplers.push_back(std::move(s));\n    }\n  }\n\n  // Cache the reflection for future calls\n  reflection_ = out;\n  return reflection_;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/ComputePipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/ComputePipelineState.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass ComputePipelineState final : public IComputePipelineState {\n public:\n  ComputePipelineState(const ComputePipelineDesc& desc,\n                       igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState,\n                       igl::d3d12::ComPtr<ID3D12RootSignature> rootSignature);\n  ~ComputePipelineState() override = default;\n\n  std::shared_ptr<IComputePipelineReflection> computePipelineReflection() override;\n\n  // D3D12-specific accessors\n  ID3D12PipelineState* getPipelineState() const {\n    return pipelineState_.Get();\n  }\n  ID3D12RootSignature* getRootSignature() const {\n    return rootSignature_.Get();\n  }\n\n private:\n  ComputePipelineDesc desc_;\n  igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState_;\n  igl::d3d12::ComPtr<ID3D12RootSignature> rootSignature_;\n  std::shared_ptr<IComputePipelineReflection> reflection_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12AllocatorPool.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12AllocatorPool.h>\n\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/D3D12FenceWaiter.h>\n#include <igl/d3d12/D3D12ImmediateCommands.h>\n#include <igl/d3d12/D3D12StagingDevice.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/UploadRingBuffer.h>\n\nnamespace igl::d3d12 {\n\nvoid D3D12AllocatorPool::initialize(D3D12Context& ctx, IFenceProvider* fenceProvider) {\n  auto* device = ctx.getDevice();\n  if (!device) {\n    IGL_LOG_ERROR(\"D3D12AllocatorPool::initialize: D3D12 device is null\\n\");\n    return;\n  }\n\n  HRESULT hr =\n      device->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(uploadFence_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12AllocatorPool::initialize: Failed to create upload fence: 0x%08X\\n\", hr);\n  } else {\n    uploadFenceValue_ = 0;\n    IGL_D3D12_LOG_VERBOSE(\"D3D12AllocatorPool::initialize: Upload fence created successfully\\n\");\n  }\n\n  // Use upload ring buffer size from D3D12ContextConfig instead of hardcoding.\n  const uint64_t uploadRingBufferSize = ctx.getConfig().uploadRingBufferSize;\n  uploadRingBuffer_ = std::make_unique<UploadRingBuffer>(device, uploadRingBufferSize);\n\n  auto* commandQueue = ctx.getCommandQueue();\n  if (commandQueue && uploadFence_.Get() && fenceProvider) {\n    immediateCommands_ = std::make_unique<D3D12ImmediateCommands>(\n        device, commandQueue, uploadFence_.Get(), fenceProvider);\n    stagingDevice_ =\n        std::make_unique<D3D12StagingDevice>(device, uploadFence_.Get(), uploadRingBuffer_.get());\n  }\n}\n\nvoid D3D12AllocatorPool::processCompletedUploads() {\n  if (!uploadFence_.Get()) {\n    return;\n  }\n\n  const UINT64 completed = uploadFence_->GetCompletedValue();\n\n  {\n    std::lock_guard<std::mutex> lock(pendingUploadsMutex_);\n    auto it = pendingUploads_.begin();\n    while (it != pendingUploads_.end()) {\n      if (it->fenceValue <= completed) {\n        it = pendingUploads_.erase(it);\n      } else {\n        ++it;\n      }\n    }\n  }\n\n  if (uploadRingBuffer_) {\n    uploadRingBuffer_->retire(completed);\n  }\n}\n\nvoid D3D12AllocatorPool::trackUploadBuffer(ComPtr<ID3D12Resource> buffer, UINT64 fenceValue) {\n  if (!buffer.Get()) {\n    return;\n  }\n\n  std::lock_guard<std::mutex> lock(pendingUploadsMutex_);\n  pendingUploads_.push_back(PendingUpload{fenceValue, std::move(buffer)});\n}\n\nComPtr<ID3D12CommandAllocator> D3D12AllocatorPool::getUploadCommandAllocator(D3D12Context& ctx) {\n  if (!uploadFence_.Get()) {\n    IGL_LOG_ERROR(\n        \"D3D12AllocatorPool::getUploadCommandAllocator: Upload fence not \"\n        \"initialized\\n\");\n    return nullptr;\n  }\n\n  std::lock_guard<std::mutex> lock(commandAllocatorPoolMutex_);\n\n  const UINT64 completedValue = uploadFence_->GetCompletedValue();\n\n  for (size_t i = 0; i < commandAllocatorPool_.size(); ++i) {\n    auto& tracked = commandAllocatorPool_[i];\n\n    if (completedValue >= tracked.fenceValue) {\n      auto allocator = tracked.allocator;\n\n      commandAllocatorPool_[i] = commandAllocatorPool_.back();\n      commandAllocatorPool_.pop_back();\n\n      HRESULT hr = allocator->Reset();\n      if (FAILED(hr)) {\n        IGL_LOG_ERROR(\n            \"D3D12AllocatorPool::getUploadCommandAllocator: \"\n            \"CommandAllocator::Reset failed: 0x%08X\\n\",\n            hr);\n        return nullptr;\n      }\n\n      totalAllocatorReuses_++;\n      return allocator;\n    }\n  }\n\n  static constexpr size_t kMaxCommandAllocators = 256;\n\n  if (totalCommandAllocatorsCreated_ >= kMaxCommandAllocators) {\n    IGL_LOG_ERROR(\n        \"D3D12AllocatorPool::getUploadCommandAllocator: Command allocator \"\n        \"pool exhausted\\n\");\n    return nullptr;\n  }\n\n  auto* device = ctx.getDevice();\n  if (!device) {\n    IGL_LOG_ERROR(\"D3D12AllocatorPool::getUploadCommandAllocator: D3D12 device is null\\n\");\n    return nullptr;\n  }\n\n  ComPtr<ID3D12CommandAllocator> newAllocator;\n  HRESULT hr = device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                              IID_PPV_ARGS(newAllocator.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\n        \"D3D12AllocatorPool::getUploadCommandAllocator: \"\n        \"CreateCommandAllocator failed: 0x%08X\\n\",\n        hr);\n    return nullptr;\n  }\n\n  totalCommandAllocatorsCreated_++;\n  return newAllocator;\n}\n\nvoid D3D12AllocatorPool::returnUploadCommandAllocator(ComPtr<ID3D12CommandAllocator> allocator,\n                                                      UINT64 fenceValue) {\n  if (!allocator.Get()) {\n    return;\n  }\n\n  std::lock_guard<std::mutex> lock(commandAllocatorPoolMutex_);\n\n  TrackedCommandAllocator tracked;\n  tracked.allocator = allocator;\n  tracked.fenceValue = fenceValue;\n  commandAllocatorPool_.push_back(tracked);\n\n  if (commandAllocatorPool_.size() > peakPoolSize_) {\n    peakPoolSize_ = commandAllocatorPool_.size();\n  }\n}\n\n::igl::Result D3D12AllocatorPool::waitForUploadFence(const Device& device,\n                                                     UINT64 fenceValue) const {\n  if (!uploadFence_.Get()) {\n    return ::igl::Result(::igl::Result::Code::InvalidOperation, \"Upload fence not initialized\");\n  }\n\n  if (uploadFence_->GetCompletedValue() >= fenceValue) {\n    return ::igl::Result();\n  }\n\n  FenceWaiter waiter(uploadFence_.Get(), fenceValue);\n  ::igl::Result waitResult = waiter.wait();\n  if (!waitResult.isOk()) {\n    ::igl::Result deviceStatus = device.checkDeviceRemoval();\n    if (!deviceStatus.isOk()) {\n      return deviceStatus;\n    }\n    return waitResult;\n  }\n\n  return Result();\n}\n\nvoid D3D12AllocatorPool::clearOnDeviceDestruction() {\n  {\n    std::lock_guard<std::mutex> lock(commandAllocatorPoolMutex_);\n    commandAllocatorPool_.clear();\n    totalCommandAllocatorsCreated_ = 0;\n    peakPoolSize_ = 0;\n    totalAllocatorReuses_ = 0;\n  }\n  {\n    std::lock_guard<std::mutex> lock(pendingUploadsMutex_);\n    pendingUploads_.clear();\n  }\n\n  uploadRingBuffer_.reset();\n  stagingDevice_.reset();\n  immediateCommands_.reset();\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12AllocatorPool.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <mutex>\n#include <vector>\n#include <igl/d3d12/Common.h>\n\nnamespace igl {\nclass Result;\n} // namespace igl\n\nnamespace igl::d3d12 {\n\nclass Device;\nclass D3D12Context;\nclass UploadRingBuffer;\nclass D3D12ImmediateCommands;\nclass D3D12StagingDevice;\nclass IFenceProvider;\n\nclass D3D12AllocatorPool {\n public:\n  D3D12AllocatorPool() = default;\n\n  void initialize(D3D12Context& ctx, IFenceProvider* fenceProvider);\n\n  void processCompletedUploads();\n  void trackUploadBuffer(ComPtr<ID3D12Resource> buffer, UINT64 fenceValue);\n\n  ComPtr<ID3D12CommandAllocator> getUploadCommandAllocator(D3D12Context& ctx);\n  void returnUploadCommandAllocator(ComPtr<ID3D12CommandAllocator> allocator, UINT64 fenceValue);\n\n  ID3D12Fence* getUploadFence() const {\n    return uploadFence_.Get();\n  }\n\n  UINT64 getNextUploadFenceValue() {\n    return ++uploadFenceValue_;\n  }\n\n  UINT64 getLastUploadFenceValue() const {\n    return uploadFenceValue_;\n  }\n\n  UploadRingBuffer* getUploadRingBuffer() const {\n    return uploadRingBuffer_.get();\n  }\n\n  D3D12ImmediateCommands* getImmediateCommands() const {\n    return immediateCommands_.get();\n  }\n\n  D3D12StagingDevice* getStagingDevice() const {\n    return stagingDevice_.get();\n  }\n\n  ::igl::Result waitForUploadFence(const Device& device, UINT64 fenceValue) const;\n\n  void clearOnDeviceDestruction();\n\n private:\n  struct PendingUpload {\n    UINT64 fenceValue = 0;\n    ComPtr<ID3D12Resource> resource;\n  };\n\n  struct TrackedCommandAllocator {\n    ComPtr<ID3D12CommandAllocator> allocator;\n    UINT64 fenceValue = 0;\n  };\n\n  std::mutex pendingUploadsMutex_;\n  std::vector<PendingUpload> pendingUploads_;\n\n  std::mutex commandAllocatorPoolMutex_;\n  std::vector<TrackedCommandAllocator> commandAllocatorPool_;\n  size_t totalCommandAllocatorsCreated_ = 0;\n  size_t peakPoolSize_ = 0;\n  size_t totalAllocatorReuses_ = 0;\n\n  ComPtr<ID3D12Fence> uploadFence_;\n  UINT64 uploadFenceValue_ = 0;\n\n  std::unique_ptr<UploadRingBuffer> uploadRingBuffer_;\n  std::unique_ptr<D3D12ImmediateCommands> immediateCommands_;\n  std::unique_ptr<D3D12StagingDevice> stagingDevice_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12Context.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12Context.h>\n\n#include <cstdlib>\n#include <string>\n#include <igl/d3d12/D3D12FenceWaiter.h>\n#include <igl/d3d12/DescriptorHeapManager.h>\n\nnamespace igl::d3d12 {\n\nnamespace {\n// Import ComPtr for readability\ntemplate<typename T>\nusing ComPtr = igl::d3d12::ComPtr<T>;\n} // namespace\n\n// Static member initialization\nD3D12Context::ResourceStats D3D12Context::resourceStats_;\nstd::mutex D3D12Context::resourceStatsMutex_;\n\n// AdapterInfo helper methods\nuint64_t D3D12Context::AdapterInfo::getDedicatedVideoMemoryMB() const {\n  return desc.DedicatedVideoMemory / (1024 * 1024);\n}\n\nconst char* D3D12Context::AdapterInfo::getVendorName() const {\n  switch (desc.VendorId) {\n  case 0x10DE:\n    return \"NVIDIA\";\n  case 0x1002:\n  case 0x1022:\n    return \"AMD\";\n  case 0x8086:\n    return \"Intel\";\n  case 0x1414:\n    return \"Microsoft\";\n  default:\n    return \"Unknown\";\n  }\n}\n\n// MemoryBudget helper methods\nuint64_t D3D12Context::MemoryBudget::totalAvailableMemory() const {\n  return dedicatedVideoMemory + sharedSystemMemory;\n}\n\ndouble D3D12Context::MemoryBudget::getUsagePercentage() const {\n  if (totalAvailableMemory() == 0)\n    return 0.0;\n  return (static_cast<double>(estimatedUsage) / totalAvailableMemory()) * 100.0;\n}\n\nbool D3D12Context::MemoryBudget::isMemoryCritical() const {\n  return getUsagePercentage() > 90.0;\n}\n\nbool D3D12Context::MemoryBudget::isMemoryLow() const {\n  return getUsagePercentage() > 70.0;\n}\n\n// A-011: Helper function to probe highest supported feature level for an adapter\nD3D_FEATURE_LEVEL D3D12Context::getHighestFeatureLevel(IDXGIAdapter1* adapter) {\n  const D3D_FEATURE_LEVEL featureLevels[] = {\n      D3D_FEATURE_LEVEL_12_2,\n      D3D_FEATURE_LEVEL_12_1,\n      D3D_FEATURE_LEVEL_12_0,\n      D3D_FEATURE_LEVEL_11_1,\n      D3D_FEATURE_LEVEL_11_0,\n  };\n\n  for (D3D_FEATURE_LEVEL fl : featureLevels) {\n    if (SUCCEEDED(D3D12CreateDevice(adapter, fl, _uuidof(ID3D12Device), nullptr))) {\n      return fl;\n    }\n  }\n\n  return static_cast<D3D_FEATURE_LEVEL>(0); // No supported feature level\n}\n\nD3D12Context::~D3D12Context() {\n  // Wait for GPU to finish before cleanup\n  waitForGPU();\n\n  // Explicitly release all frame context resources to prevent leaks.\n  for (uint32_t i = 0; i < frameContexts_.size(); ++i) {\n    frameContexts_[i].transientBuffers.clear();\n    frameContexts_[i].transientResources.clear();\n\n    // Explicitly reset heaps inside each page before clearing the vector.\n    for (auto& page : frameContexts_[i].cbvSrvUavHeapPages) {\n      page.heap.Reset();\n    }\n    frameContexts_[i].cbvSrvUavHeapPages.clear();\n\n    frameContexts_[i].samplerHeap.Reset();\n    frameContexts_[i].activeCbvSrvUavHeap.Reset();\n    frameContexts_[i].allocator.Reset();\n  }\n\n  // Release render targets explicitly.\n  for (uint32_t i = 0; i < renderTargets_.size(); ++i) {\n    renderTargets_[i].Reset();\n  }\n\n  // Release command signatures.\n  drawIndirectSignature_.Reset();\n  drawIndexedIndirectSignature_.Reset();\n\n  // Release core resources explicitly.\n  rtvHeap_.Reset();\n  swapChain_.Reset();\n  fence_.Reset();\n  commandQueue_.Reset();\n\n  // Clean up descriptor heap manager's heaps before deleting it.\n  // Note: heapMgr_ may point to either ownedHeapMgr_ OR external heap manager\n  // (e.g., HeadlessContext owns it via unique_ptr). We cleanup the heaps regardless.\n  if (heapMgr_) {\n    heapMgr_->cleanup();\n  }\n\n  // Clean up owned descriptor heap manager (if we own it)\n  delete ownedHeapMgr_;\n  ownedHeapMgr_ = nullptr;\n  heapMgr_ = nullptr;\n\n  // Release device last, after all dependent resources are freed.\n  device_.Reset();\n  adapter_.Reset();\n  dxgiFactory_.Reset();\n\n#ifdef IGL_DEBUG\n  IGL_LOG_INFO(\"[D3D12Context] All resources released\\n\");\n#endif\n}\n\nResult D3D12Context::initialize(HWND hwnd,\n                                uint32_t width,\n                                uint32_t height,\n                                const D3D12ContextConfig& config) {\n  width_ = width;\n  height_ = height;\n\n  // Store and validate configuration.\n  config_ = config;\n  config_.validate();\n\n  // Pre-allocate vectors to config size (T43). Will be verified/resized after swapchain creation.\n  swapchainBufferCount_ = config_.maxFramesInFlight;\n  renderTargets_.resize(swapchainBufferCount_);\n  frameContexts_.resize(swapchainBufferCount_);\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating D3D12 device...\\n\");\n  Result deviceResult = createDevice();\n  if (!deviceResult.isOk()) {\n    return deviceResult;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Device created successfully\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating command queue...\\n\");\n  Result queueResult = createCommandQueue();\n  if (!queueResult.isOk()) {\n    return queueResult;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Command queue created successfully\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating swapchain (%ux%u)...\\n\", width, height);\n  Result swapChainResult = createSwapChain(hwnd, width, height);\n  if (!swapChainResult.isOk()) {\n    return swapChainResult;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Swapchain created successfully\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating RTV heap...\\n\");\n  Result rtvResult = createRTVHeap();\n  if (!rtvResult.isOk()) {\n    return rtvResult;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: RTV heap created successfully\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating back buffers...\\n\");\n  Result backBufferResult = createBackBuffers();\n  if (!backBufferResult.isOk()) {\n    return backBufferResult;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Back buffers created successfully\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating descriptor heaps...\\n\");\n  Result descriptorHeapResult = createDescriptorHeaps();\n  if (!descriptorHeapResult.isOk()) {\n    return descriptorHeapResult;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Descriptor heaps created successfully\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating command signatures...\\n\");\n  Result commandSigResult = createCommandSignatures();\n  if (!commandSigResult.isOk()) {\n    return commandSigResult;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Command signatures created successfully\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating fence for GPU synchronization...\\n\");\n  HRESULT hr = device_->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(fence_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to create fence (HRESULT: 0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    IGL_DEBUG_ASSERT(false);\n    return Result(Result::Code::RuntimeError, \"Failed to create fence\");\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Fence created successfully\\n\");\n\n  // Create per-frame command allocators using runtime buffer count (T43).\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating per-frame command allocators...\\n\");\n  for (UINT i = 0; i < swapchainBufferCount_; i++) {\n    hr = device_->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                         IID_PPV_ARGS(frameContexts_[i].allocator.GetAddressOf()));\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\n          \"D3D12Context: Failed to create command allocator for frame %u (HRESULT: 0x%08X)\\n\",\n          i,\n          static_cast<unsigned>(hr));\n      IGL_DEBUG_ASSERT(false);\n      return Result(Result::Code::RuntimeError,\n                    \"Failed to create command allocator for frame \" + std::to_string(i));\n    }\n    IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Created command allocator for frame %u\\n\", i);\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Per-frame command allocators created successfully\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Initialization complete!\\n\");\n\n  return Result();\n}\n\nResult D3D12Context::resize(uint32_t width, uint32_t height) {\n  // Validate dimensions\n  if (width == 0 || height == 0) {\n    return Result{Result::Code::ArgumentInvalid,\n                  \"Invalid resize dimensions: width and height must be non-zero\"};\n  }\n\n  if (width == width_ && height == height_) {\n    return Result();\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"D3D12Context: Resizing swapchain from %ux%u to %ux%u\\n\", width_, height_, width, height);\n\n  width_ = width;\n  height_ = height;\n\n  // Wait for all GPU work to complete before releasing backbuffers\n  // This prevents DXGI_ERROR_DEVICE_REMOVED when GPU is still rendering to old buffers\n  if (fence_.Get() && commandQueue_.Get()) {\n    const UINT64 currentFence = fenceValue_;\n    commandQueue_->Signal(fence_.Get(), currentFence);\n\n    FenceWaiter waiter(fence_.Get(), currentFence);\n    Result waitResult = waiter.wait();\n    if (!waitResult.isOk()) {\n      IGL_LOG_ERROR(\"D3D12Context::resize() - Fence wait failed: %s\\n\", waitResult.message.c_str());\n      // Continue with resize despite error - old buffers will be released anyway\n    }\n  }\n\n  // Release old back buffers (T43: use runtime buffer count)\n  for (UINT i = 0; i < swapchainBufferCount_; i++) {\n    renderTargets_[i].Reset();\n  }\n\n  // Store swapchain format and flags for potential recreation\n  DXGI_SWAP_CHAIN_DESC1 currentDesc = {};\n  if (swapChain_.Get()) {\n    swapChain_->GetDesc1(&currentDesc);\n  }\n\n  // Try to resize existing swapchain (T43: use runtime buffer count)\n  HRESULT hr = swapChain_->ResizeBuffers(swapchainBufferCount_,\n                                         width,\n                                         height,\n                                         currentDesc.Format ? currentDesc.Format\n                                                            : DXGI_FORMAT_B8G8R8A8_UNORM,\n                                         currentDesc.Flags);\n\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\n        \"D3D12Context: ResizeBuffers failed (HRESULT=0x%08X), attempting to recreate swapchain\\n\",\n        static_cast<unsigned>(hr));\n\n    // Graceful fallback: Recreate swapchain from scratch\n    Result result = recreateSwapChain(width, height);\n    if (!result.isOk()) {\n      IGL_LOG_ERROR(\"D3D12Context: Failed to recreate swapchain: %s\\n\", result.message.c_str());\n      return Result{Result::Code::RuntimeError, \"Failed to resize or recreate swapchain\"};\n    }\n\n    IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Swapchain recreated successfully\\n\");\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"D3D12Context: ResizeBuffers succeeded\\n\");\n  }\n\n  // Recreate back buffer views\n  Result backBufferResult = createBackBuffers();\n  if (!backBufferResult.isOk()) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to recreate back buffers: %s\\n\",\n                  backBufferResult.message.c_str());\n    return backBufferResult;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Swapchain resize complete\\n\");\n\n  return Result();\n}\n\nResult D3D12Context::recreateSwapChain(uint32_t width, uint32_t height) {\n  IGL_D3D12_LOG_VERBOSE(\n      \"D3D12Context: Recreating swapchain with dimensions %ux%u\\n\", width, height);\n\n  // Get window handle from existing swapchain before releasing it\n  DXGI_SWAP_CHAIN_DESC1 oldDesc = {};\n  if (!swapChain_.Get()) {\n    return Result{Result::Code::RuntimeError, \"No existing swapchain to recreate\"};\n  }\n\n  HRESULT hr = swapChain_->GetDesc1(&oldDesc);\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to get swapchain description (HRESULT=0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    return Result{Result::Code::RuntimeError, \"Failed to get swapchain description\"};\n  }\n\n  // Try to get HWND via GetHwnd (IDXGISwapChain3)\n  HWND hwnd = nullptr;\n  hr = swapChain_->GetHwnd(&hwnd);\n  if (FAILED(hr) || !hwnd) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to get HWND from swapchain (HRESULT=0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    return Result{Result::Code::RuntimeError, \"Failed to get HWND from swapchain\"};\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Retrieved HWND=%p from existing swapchain\\n\", hwnd);\n\n  // Release old swapchain completely\n  swapChain_.Reset();\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Old swapchain released\\n\");\n\n  // Create new swapchain with updated dimensions\n  DXGI_SWAP_CHAIN_DESC1 newDesc = {};\n  newDesc.Width = width;\n  newDesc.Height = height;\n  newDesc.Format = oldDesc.Format ? oldDesc.Format : DXGI_FORMAT_B8G8R8A8_UNORM;\n  newDesc.Stereo = FALSE;\n  newDesc.SampleDesc.Count = 1;\n  newDesc.SampleDesc.Quality = 0;\n  newDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;\n  newDesc.BufferCount = swapchainBufferCount_; // T43: use runtime buffer count\n  newDesc.Scaling = DXGI_SCALING_STRETCH;\n  newDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;\n  newDesc.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED;\n  newDesc.Flags = oldDesc.Flags; // Preserve tearing support flag\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating new swapchain (format=%u, flags=0x%X)\\n\",\n                        newDesc.Format,\n                        newDesc.Flags);\n\n  igl::d3d12::ComPtr<IDXGISwapChain1> swapChain1;\n  hr = dxgiFactory_->CreateSwapChainForHwnd(\n      commandQueue_.Get(), hwnd, &newDesc, nullptr, nullptr, swapChain1.GetAddressOf());\n\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12Context: CreateSwapChainForHwnd failed (HRESULT=0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    return Result{Result::Code::RuntimeError,\n                  \"Failed to recreate swapchain with CreateSwapChainForHwnd\"};\n  }\n\n  // Query IDXGISwapChain3 interface\n  hr = swapChain1->QueryInterface(IID_PPV_ARGS(swapChain_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to query IDXGISwapChain3 (HRESULT=0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    return Result{Result::Code::RuntimeError, \"Failed to query IDXGISwapChain3 interface\"};\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Swapchain recreated successfully\\n\");\n  return Result{};\n}\n\nResult D3D12Context::createDevice() {\n  // DO NOT enable experimental features in windowed mode - it breaks swapchain creation!\n  // Experimental features are ONLY enabled in HeadlessD3D12Context for unit tests\n  // Windowed render sessions use signed DXIL (via IDxcValidator) which doesn't need experimental\n  // mode\n\n  // A-007: Read debug configuration from environment variables\n  // Helper function to read boolean env var (returns defaultValue if not set)\n  auto getEnvBool = [](const char* name, bool defaultValue) -> bool {\n    const char* value = std::getenv(name);\n    if (!value)\n      return defaultValue;\n    return (std::string(value) == \"1\") || (std::string(value) == \"true\");\n  };\n\n  // A-007: Debug configuration from environment variables.\n  // Defaults are tuned for aggressive validation in debug builds so that\n  // issues like PSO creation failures and binding mismatches are surfaced\n  // without requiring the user to set environment variables manually.\n  bool enableDebugLayer = getEnvBool(\"IGL_D3D12_DEBUG\",\n#ifdef _DEBUG\n                                     true // Default ON in debug builds\n#else\n                                     false // Default OFF in release builds\n#endif\n  );\n  bool enableGPUValidation = getEnvBool(\"IGL_D3D12_GPU_VALIDATION\",\n#ifdef _DEBUG\n                                        true // Default ON in debug builds for better diagnostics\n#else\n                                        false // Default OFF in release builds\n#endif\n  );\n  bool enableDRED = getEnvBool(\"IGL_D3D12_DRED\",\n#ifdef _DEBUG\n                               true // Default ON in debug builds\n#else\n                               false // Default OFF in release builds\n#endif\n  );\n  bool enableDXGIDebug = getEnvBool(\"IGL_DXGI_DEBUG\",\n#ifdef _DEBUG\n                                    true // Default ON in debug builds\n#else\n                                    false // Default OFF in release builds\n#endif\n  );\n  bool breakOnError = getEnvBool(\"IGL_D3D12_BREAK_ON_ERROR\",\n#ifdef _DEBUG\n                                 true // Default BREAK on error in debug builds\n#else\n                                 false // Default LOG only in release builds\n#endif\n  );\n  bool breakOnWarning = getEnvBool(\"IGL_D3D12_BREAK_ON_WARNING\",\n#ifdef _DEBUG\n                                   false // Default LOG warnings in debug builds (can be overridden)\n#else\n                                   false\n#endif\n  );\n\n  IGL_D3D12_LOG_VERBOSE(\"=== D3D12 Debug Configuration ===\\n\");\n  IGL_D3D12_LOG_VERBOSE(\"  Debug Layer:       %s\\n\", enableDebugLayer ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"  GPU Validation:    %s\\n\", enableGPUValidation ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"  DRED:              %s\\n\", enableDRED ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"  DXGI Debug:        %s\\n\", enableDXGIDebug ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"  Break on Error:    %s\\n\", breakOnError ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"  Break on Warning:  %s\\n\", breakOnWarning ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"=================================\\n\");\n\n  // Initialize DXGI factory flags\n  UINT dxgiFactoryFlags = 0;\n\n  // A-007: Enable debug layer if configured\n  if (enableDebugLayer) {\n    igl::d3d12::ComPtr<ID3D12Debug> debugController;\n    if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(debugController.GetAddressOf())))) {\n      debugController->EnableDebugLayer();\n      IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Debug layer ENABLED\\n\");\n\n      // Enable DXGI debug layer if configured\n      if (enableDXGIDebug) {\n        dxgiFactoryFlags |= DXGI_CREATE_FACTORY_DEBUG;\n        IGL_D3D12_LOG_VERBOSE(\"D3D12Context: DXGI debug layer ENABLED\\n\");\n      }\n\n      // A-007: Enable GPU-Based Validation if configured\n      // WARNING: This significantly impacts performance (10-100x slower)\n      if (enableGPUValidation) {\n        igl::d3d12::ComPtr<ID3D12Debug1> debugController1;\n        if (SUCCEEDED(\n                debugController->QueryInterface(IID_PPV_ARGS(debugController1.GetAddressOf())))) {\n          debugController1->SetEnableGPUBasedValidation(TRUE);\n          IGL_D3D12_LOG_VERBOSE(\n              \"D3D12Context: GPU-Based Validation ENABLED (may slow down rendering 10-100x)\\n\");\n        } else {\n          IGL_LOG_ERROR(\n              \"D3D12Context: Failed to enable GPU-Based Validation (requires ID3D12Debug1)\\n\");\n        }\n      }\n    } else {\n      IGL_LOG_ERROR(\n          \"D3D12Context: Failed to get D3D12 debug interface - Graphics Tools may not be \"\n          \"installed\\n\");\n    }\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Debug layer DISABLED\\n\");\n  }\n\n  // A-007: Enable DRED if configured (Device Removed Extended Data for better crash diagnostics)\n  if (enableDRED) {\n    igl::d3d12::ComPtr<ID3D12DeviceRemovedExtendedDataSettings1> dredSettings1;\n    if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(dredSettings1.GetAddressOf())))) {\n      dredSettings1->SetAutoBreadcrumbsEnablement(D3D12_DRED_ENABLEMENT_FORCED_ON);\n      dredSettings1->SetPageFaultEnablement(D3D12_DRED_ENABLEMENT_FORCED_ON);\n      dredSettings1->SetBreadcrumbContextEnablement(D3D12_DRED_ENABLEMENT_FORCED_ON);\n      IGL_D3D12_LOG_VERBOSE(\n          \"D3D12Context: DRED 1.2 fully configured (breadcrumbs + page faults + context)\\n\");\n    } else {\n      IGL_LOG_ERROR(\"D3D12Context: Failed to configure DRED (requires Windows 10 19041+)\\n\");\n    }\n  }\n\n  // Create DXGI factory with debug flag in debug builds.\n  HRESULT hr = CreateDXGIFactory2(dxgiFactoryFlags, IID_PPV_ARGS(dxgiFactory_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to create DXGI factory (HRESULT: 0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    IGL_DEBUG_ASSERT(false);\n    return Result(Result::Code::RuntimeError, \"Failed to create DXGI factory\");\n  }\n\n  // A-011: Enumerate and select best adapter\n  Result enumResult = enumerateAndSelectAdapter();\n  if (!enumResult.isOk()) {\n    return enumResult;\n  }\n\n  // A-012: Detect memory budget\n  detectMemoryBudget();\n\n  // Create D3D12 device on selected adapter\n  hr = D3D12CreateDevice(\n      adapter_.Get(), selectedFeatureLevel_, IID_PPV_ARGS(device_.GetAddressOf()));\n\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12CreateDevice failed on selected adapter: 0x%08X\\n\",\n                  static_cast<unsigned>(hr));\n    IGL_DEBUG_ASSERT(false);\n    return Result(Result::Code::RuntimeError, \"Failed to create D3D12 device on selected adapter\");\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Device created with Feature Level %s\\n\",\n                        featureLevelToString(selectedFeatureLevel_));\n\n  // A-007: Setup info queue with configurable break-on-severity settings\n  if (enableDebugLayer) {\n    igl::d3d12::ComPtr<ID3D12InfoQueue> infoQueue;\n    if (SUCCEEDED(device_->QueryInterface(IID_PPV_ARGS(infoQueue.GetAddressOf())))) {\n      // A-007: Configure break-on-severity based on environment variables\n      infoQueue->SetBreakOnSeverity(D3D12_MESSAGE_SEVERITY_CORRUPTION,\n                                    TRUE); // Always break on corruption\n      infoQueue->SetBreakOnSeverity(D3D12_MESSAGE_SEVERITY_ERROR, breakOnError ? TRUE : FALSE);\n      infoQueue->SetBreakOnSeverity(D3D12_MESSAGE_SEVERITY_WARNING, breakOnWarning ? TRUE : FALSE);\n\n      // Filter out INFO messages and a small set of known performance-only\n      // clear warnings that are expected in this backend (no functional\n      // impact). Do NOT filter invalid-shader-bytecode or signature messages so\n      // that pipeline creation problems surface clearly during debugging.\n      D3D12_MESSAGE_SEVERITY severities[] = {D3D12_MESSAGE_SEVERITY_INFO};\n\n      // Filter out only clear-value performance hints (IDs 820/821) and the\n      // known PS float-to-uint RT bitcast warning (677). All other message IDs\n      // (including invalid shader bytecode or unparseable signatures) are kept.\n      D3D12_MESSAGE_ID denyIds[] = {\n          static_cast<D3D12_MESSAGE_ID>(820), // ClearRenderTargetView w/o optimized clear value\n          static_cast<D3D12_MESSAGE_ID>(821), // ClearDepthStencilView clear value mismatch\n          static_cast<D3D12_MESSAGE_ID>(677) // PS float output to UINT RT (bitcast)\n      };\n\n      D3D12_INFO_QUEUE_FILTER filter = {};\n      filter.DenyList.NumSeverities = 1;\n      filter.DenyList.pSeverityList = severities;\n      filter.DenyList.NumIDs = static_cast<UINT>(std::size(denyIds));\n      filter.DenyList.pIDList = denyIds;\n      infoQueue->PushStorageFilter(&filter);\n\n      IGL_D3D12_LOG_VERBOSE(\n          \"D3D12Context: Info queue configured (Corruption=BREAK, Error=%s, Warning=%s)\\n\",\n          breakOnError ? \"BREAK\" : \"LOG\",\n          breakOnWarning ? \"BREAK\" : \"LOG\");\n    }\n  }\n\n  // Query root signature capabilities.\n  // This is critical for Tier-1 devices which don't support unbounded descriptor ranges.\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Querying root signature capabilities...\\n\");\n\n  // Query highest supported root signature version\n  D3D12_FEATURE_DATA_ROOT_SIGNATURE featureDataRootSig = {};\n  featureDataRootSig.HighestVersion = D3D_ROOT_SIGNATURE_VERSION_1_1;\n\n  hr = device_->CheckFeatureSupport(\n      D3D12_FEATURE_ROOT_SIGNATURE, &featureDataRootSig, sizeof(featureDataRootSig));\n\n  if (SUCCEEDED(hr)) {\n    highestRootSignatureVersion_ = featureDataRootSig.HighestVersion;\n    IGL_D3D12_LOG_VERBOSE(\"  Highest Root Signature Version: %s\\n\",\n                          highestRootSignatureVersion_ == D3D_ROOT_SIGNATURE_VERSION_1_1 ? \"1.1\"\n                                                                                         : \"1.0\");\n  } else {\n    // If query fails, assume v1.0 (most conservative)\n    highestRootSignatureVersion_ = D3D_ROOT_SIGNATURE_VERSION_1_0;\n    IGL_D3D12_LOG_VERBOSE(\"  Root Signature query failed (assuming v1.0)\\n\");\n  }\n\n  // Query resource binding tier\n  D3D12_FEATURE_DATA_D3D12_OPTIONS options = {};\n  hr = device_->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options));\n\n  if (SUCCEEDED(hr)) {\n    resourceBindingTier_ = options.ResourceBindingTier;\n    const char* tierName = \"Unknown\";\n    switch (resourceBindingTier_) {\n    case D3D12_RESOURCE_BINDING_TIER_1:\n      tierName = \"Tier 1 (bounded descriptors required)\";\n      break;\n    case D3D12_RESOURCE_BINDING_TIER_2:\n      tierName = \"Tier 2 (unbounded arrays except samplers)\";\n      break;\n    case D3D12_RESOURCE_BINDING_TIER_3:\n      tierName = \"Tier 3 (fully unbounded)\";\n      break;\n    }\n    IGL_D3D12_LOG_VERBOSE(\"  Resource Binding Tier: %s\\n\", tierName);\n  } else {\n    // If query fails, assume Tier 1 (most conservative)\n    resourceBindingTier_ = D3D12_RESOURCE_BINDING_TIER_1;\n    IGL_D3D12_LOG_VERBOSE(\"  Resource Binding Tier query failed (assuming Tier 1)\\n\");\n  }\n\n  // Query shader model support with progressive fallback (A-005)\n  // This is critical for FL11 hardware which only supports SM 5.1, not SM 6.0+\n  IGL_D3D12_LOG_VERBOSE(\n      \"D3D12Context: Querying shader model capabilities for Feature Level %d.%d...\\n\",\n      (selectedFeatureLevel_ >> 12) & 0xF,\n      (selectedFeatureLevel_ >> 8) & 0xF);\n\n  // Helper to map feature level to expected minimum shader model\n  auto getMinShaderModelForFeatureLevel = [](D3D_FEATURE_LEVEL fl) -> D3D_SHADER_MODEL {\n    switch (fl) {\n    case D3D_FEATURE_LEVEL_12_2:\n      return D3D_SHADER_MODEL_6_6; // FL 12.2 supports SM 6.6+\n    case D3D_FEATURE_LEVEL_12_1:\n      return D3D_SHADER_MODEL_6_1; // FL 12.1 supports SM 6.1 (mesh shaders)\n    case D3D_FEATURE_LEVEL_12_0:\n      return D3D_SHADER_MODEL_6_0; // FL 12.0 supports SM 6.0 (wave operations)\n    case D3D_FEATURE_LEVEL_11_1:\n    case D3D_FEATURE_LEVEL_11_0:\n      return D3D_SHADER_MODEL_5_1; // FL 11.x only supports SM 5.1\n    default:\n      return D3D_SHADER_MODEL_5_1; // Conservative fallback\n    }\n  };\n\n  auto shaderModelToString = [](D3D_SHADER_MODEL sm) -> const char* {\n    switch (sm) {\n    case D3D_SHADER_MODEL_6_6:\n      return \"6.6\";\n    case D3D_SHADER_MODEL_6_5:\n      return \"6.5\";\n    case D3D_SHADER_MODEL_6_4:\n      return \"6.4\";\n    case D3D_SHADER_MODEL_6_3:\n      return \"6.3\";\n    case D3D_SHADER_MODEL_6_2:\n      return \"6.2\";\n    case D3D_SHADER_MODEL_6_1:\n      return \"6.1\";\n    case D3D_SHADER_MODEL_6_0:\n      return \"6.0\";\n    case D3D_SHADER_MODEL_5_1:\n      return \"5.1\";\n    default:\n      return \"Unknown\";\n    }\n  };\n\n  // Shader models to attempt, from highest to lowest\n  const D3D_SHADER_MODEL shaderModels[] = {\n      D3D_SHADER_MODEL_6_6,\n      D3D_SHADER_MODEL_6_5,\n      D3D_SHADER_MODEL_6_4,\n      D3D_SHADER_MODEL_6_3,\n      D3D_SHADER_MODEL_6_2,\n      D3D_SHADER_MODEL_6_1,\n      D3D_SHADER_MODEL_6_0,\n      D3D_SHADER_MODEL_5_1,\n  };\n\n  D3D_SHADER_MODEL detectedShaderModel = D3D_SHADER_MODEL_5_1;\n  bool shaderModelDetected = false;\n\n  // Try each shader model from highest to lowest\n  for (D3D_SHADER_MODEL sm : shaderModels) {\n    D3D12_FEATURE_DATA_SHADER_MODEL shaderModelData = {sm};\n    hr = device_->CheckFeatureSupport(\n        D3D12_FEATURE_SHADER_MODEL, &shaderModelData, sizeof(shaderModelData));\n\n    if (SUCCEEDED(hr)) {\n      detectedShaderModel = shaderModelData.HighestShaderModel;\n      shaderModelDetected = true;\n      IGL_D3D12_LOG_VERBOSE(\"  Detected Shader Model: %s\\n\",\n                            shaderModelToString(detectedShaderModel));\n      break; // Found highest supported, stop trying\n    } else {\n      IGL_D3D12_LOG_VERBOSE(\"  Shader Model %s not supported, trying lower version\\n\",\n                            shaderModelToString(sm));\n    }\n  }\n\n  if (!shaderModelDetected) {\n    // Fallback based on feature level\n    D3D_SHADER_MODEL minimumSM = getMinShaderModelForFeatureLevel(selectedFeatureLevel_);\n    IGL_D3D12_LOG_VERBOSE(\n        \"  WARNING: Shader model detection failed, using minimum for Feature Level: %s\\n\",\n        shaderModelToString(minimumSM));\n    detectedShaderModel = minimumSM;\n  }\n\n  // Validate shader model is appropriate for feature level\n  D3D_SHADER_MODEL minimumRequired = getMinShaderModelForFeatureLevel(selectedFeatureLevel_);\n  if (detectedShaderModel < minimumRequired) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"  WARNING: Detected Shader Model %s is below minimum for Feature Level: %s\\n\",\n        shaderModelToString(detectedShaderModel),\n        shaderModelToString(minimumRequired));\n  }\n\n  maxShaderModel_ = detectedShaderModel;\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Final Shader Model selected: %s\\n\",\n                        shaderModelToString(maxShaderModel_));\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Root signature capabilities detected successfully\\n\");\n\n  return Result();\n}\n\n// A-011: Enumerate and select best adapter\nResult D3D12Context::enumerateAndSelectAdapter() {\n  enumeratedAdapters_.clear();\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Enumerating DXGI adapters...\\n\");\n\n  // Try IDXGIFactory6 first for high-performance GPU preference\n  igl::d3d12::ComPtr<IDXGIFactory6> factory6;\n  (void)dxgiFactory_->QueryInterface(IID_PPV_ARGS(factory6.GetAddressOf()));\n\n  if (factory6.Get()) {\n    for (UINT i = 0;; ++i) {\n      igl::d3d12::ComPtr<IDXGIAdapter1> adapter;\n      if (FAILED(factory6->EnumAdapterByGpuPreference(\n              i, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, IID_PPV_ARGS(adapter.GetAddressOf())))) {\n        break;\n      }\n\n      AdapterInfo info{};\n      info.adapter = adapter;\n      info.index = i;\n      info.isWarp = false;\n\n      adapter->GetDesc1(&info.desc);\n\n      // Skip software adapters in main enumeration (we'll add WARP separately)\n      if (info.desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) {\n        continue;\n      }\n\n      // Determine feature level\n      info.featureLevel = getHighestFeatureLevel(adapter.Get());\n      if (info.featureLevel == static_cast<D3D_FEATURE_LEVEL>(0)) {\n        IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Adapter %u does not support D3D12 (skipping)\\n\", i);\n        continue;\n      }\n\n      enumeratedAdapters_.push_back(info);\n\n      // Log adapter details\n      IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Adapter %u:\\n\", i);\n      IGL_D3D12_LOG_VERBOSE(\"  Description: %ls\\n\", info.desc.Description);\n      IGL_D3D12_LOG_VERBOSE(\"  Vendor ID: 0x%04X (%s)\\n\", info.desc.VendorId, info.getVendorName());\n      IGL_D3D12_LOG_VERBOSE(\"  Device ID: 0x%04X\\n\", info.desc.DeviceId);\n      IGL_D3D12_LOG_VERBOSE(\"  Dedicated VRAM: %llu MB\\n\", info.getDedicatedVideoMemoryMB());\n      IGL_D3D12_LOG_VERBOSE(\"  Shared System Memory: %llu MB\\n\",\n                            info.desc.SharedSystemMemory / (1024 * 1024));\n      IGL_D3D12_LOG_VERBOSE(\"  Feature Level: %s\\n\", featureLevelToString(info.featureLevel));\n      IGL_D3D12_LOG_VERBOSE(\n          \"  LUID: 0x%08X:0x%08X\\n\", info.desc.AdapterLuid.HighPart, info.desc.AdapterLuid.LowPart);\n    }\n  }\n\n  // Fallback enumeration if Factory6 not available\n  if (enumeratedAdapters_.empty()) {\n    for (UINT i = 0;; ++i) {\n      igl::d3d12::ComPtr<IDXGIAdapter1> adapter;\n      if (dxgiFactory_->EnumAdapters1(i, adapter.GetAddressOf()) == DXGI_ERROR_NOT_FOUND) {\n        break;\n      }\n\n      AdapterInfo info{};\n      info.adapter = adapter;\n      info.index = i;\n      info.isWarp = false;\n\n      adapter->GetDesc1(&info.desc);\n\n      // Skip software adapters\n      if (info.desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) {\n        continue;\n      }\n\n      // Determine feature level\n      info.featureLevel = getHighestFeatureLevel(adapter.Get());\n      if (info.featureLevel == static_cast<D3D_FEATURE_LEVEL>(0)) {\n        continue;\n      }\n\n      enumeratedAdapters_.push_back(info);\n\n      // Log adapter details\n      IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Adapter %u:\\n\", i);\n      IGL_D3D12_LOG_VERBOSE(\"  Description: %ls\\n\", info.desc.Description);\n      IGL_D3D12_LOG_VERBOSE(\"  Vendor ID: 0x%04X (%s)\\n\", info.desc.VendorId, info.getVendorName());\n      IGL_D3D12_LOG_VERBOSE(\"  Device ID: 0x%04X\\n\", info.desc.DeviceId);\n      IGL_D3D12_LOG_VERBOSE(\"  Dedicated VRAM: %llu MB\\n\", info.getDedicatedVideoMemoryMB());\n      IGL_D3D12_LOG_VERBOSE(\"  Shared System Memory: %llu MB\\n\",\n                            info.desc.SharedSystemMemory / (1024 * 1024));\n      IGL_D3D12_LOG_VERBOSE(\"  Feature Level: %s\\n\", featureLevelToString(info.featureLevel));\n    }\n  }\n\n  // Add WARP adapter as fallback option (software rasterizer)\n  igl::d3d12::ComPtr<IDXGIAdapter> warpAdapter;\n  if (SUCCEEDED(dxgiFactory_->EnumWarpAdapter(IID_PPV_ARGS(warpAdapter.GetAddressOf())))) {\n    igl::d3d12::ComPtr<IDXGIAdapter1> warpAdapter1;\n    if (SUCCEEDED(warpAdapter->QueryInterface(IID_PPV_ARGS(warpAdapter1.GetAddressOf())))) {\n      AdapterInfo warpInfo{};\n      warpInfo.adapter = warpAdapter1;\n      warpInfo.index = static_cast<uint32_t>(enumeratedAdapters_.size());\n      warpInfo.isWarp = true;\n\n      warpAdapter1->GetDesc1(&warpInfo.desc);\n      warpInfo.featureLevel = getHighestFeatureLevel(warpAdapter1.Get());\n\n      enumeratedAdapters_.push_back(warpInfo);\n\n      IGL_D3D12_LOG_VERBOSE(\"D3D12Context: WARP Adapter (Software):\\n\");\n      IGL_D3D12_LOG_VERBOSE(\"  Description: %ls\\n\", warpInfo.desc.Description);\n      IGL_D3D12_LOG_VERBOSE(\"  Feature Level: %s\\n\", featureLevelToString(warpInfo.featureLevel));\n    }\n  }\n\n  if (enumeratedAdapters_.empty()) {\n    IGL_LOG_ERROR(\"D3D12Context: No compatible D3D12 adapters found!\\n\");\n    IGL_DEBUG_ASSERT(false);\n    return Result(Result::Code::RuntimeError, \"No D3D12-compatible adapters available\");\n  }\n\n  // Select adapter based on environment variable or heuristic\n  selectedAdapterIndex_ = 0; // Default to first adapter (discrete GPU on laptops)\n\n  char adapterEnv[64] = {};\n  DWORD envResult = GetEnvironmentVariableA(\"IGL_D3D12_ADAPTER\", adapterEnv, sizeof(adapterEnv));\n  if (envResult > 0 && envResult < sizeof(adapterEnv)) {\n    if (strcmp(adapterEnv, \"WARP\") == 0) {\n      // Find WARP adapter\n      for (size_t i = 0; i < enumeratedAdapters_.size(); ++i) {\n        if (enumeratedAdapters_[i].isWarp) {\n          selectedAdapterIndex_ = static_cast<uint32_t>(i);\n          IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Environment override - using WARP adapter\\n\");\n          break;\n        }\n      }\n    } else {\n      // Parse adapter index\n      int requestedIndex = atoi(adapterEnv);\n      if (requestedIndex >= 0 && requestedIndex < static_cast<int>(enumeratedAdapters_.size())) {\n        selectedAdapterIndex_ = static_cast<uint32_t>(requestedIndex);\n        IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Environment override - using adapter %d\\n\",\n                              requestedIndex);\n      } else {\n        IGL_LOG_ERROR(\"D3D12Context: Invalid adapter index %d (available: 0-%zu)\\n\",\n                      requestedIndex,\n                      enumeratedAdapters_.size() - 1);\n      }\n    }\n  } else {\n    // Heuristic: Choose adapter with highest feature level and most VRAM\n    D3D_FEATURE_LEVEL highestFL = enumeratedAdapters_[0].featureLevel;\n    uint64_t largestVRAM = enumeratedAdapters_[0].getDedicatedVideoMemoryMB();\n\n    for (size_t i = 1; i < enumeratedAdapters_.size(); ++i) {\n      if (enumeratedAdapters_[i].isWarp) {\n        continue; // Skip WARP for automatic selection\n      }\n\n      uint64_t vram = enumeratedAdapters_[i].getDedicatedVideoMemoryMB();\n      D3D_FEATURE_LEVEL fl = enumeratedAdapters_[i].featureLevel;\n\n      // Prefer higher feature level, or same feature level with more VRAM\n      if (fl > highestFL || (fl == highestFL && vram > largestVRAM)) {\n        selectedAdapterIndex_ = static_cast<uint32_t>(i);\n        highestFL = fl;\n        largestVRAM = vram;\n      }\n    }\n  }\n\n  adapter_ = enumeratedAdapters_[selectedAdapterIndex_].adapter;\n  selectedFeatureLevel_ = enumeratedAdapters_[selectedAdapterIndex_].featureLevel;\n\n  // T44: Concise single-line adapter log at INFO level (matches Vulkan/Metal minimalism)\n  const auto& selected = enumeratedAdapters_[selectedAdapterIndex_];\n  IGL_LOG_INFO(\"D3D12 Adapter: %ls (FL %s, %llu MB VRAM)\\n\",\n               selected.desc.Description,\n               featureLevelToString(selectedFeatureLevel_),\n               selected.getDedicatedVideoMemoryMB());\n\n  // Verbose: Detailed adapter info (vendor, device ID, LUID, etc.)\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Selected adapter %u: %ls (FL %s)\\n\",\n                        selectedAdapterIndex_,\n                        selected.desc.Description,\n                        featureLevelToString(selectedFeatureLevel_));\n\n  return Result();\n}\n\n// A-012: Detect memory budget from selected adapter\nvoid D3D12Context::detectMemoryBudget() {\n  if (selectedAdapterIndex_ >= enumeratedAdapters_.size()) {\n    IGL_LOG_ERROR(\"D3D12Context: No adapter selected for memory budget detection\\n\");\n    return;\n  }\n\n  const auto& selectedAdapter = enumeratedAdapters_[selectedAdapterIndex_];\n\n  memoryBudget_.dedicatedVideoMemory = selectedAdapter.desc.DedicatedVideoMemory;\n  memoryBudget_.sharedSystemMemory = selectedAdapter.desc.SharedSystemMemory;\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: GPU Memory Budget:\\n\");\n  IGL_D3D12_LOG_VERBOSE(\"  Dedicated Video Memory: %.2f MB\\n\",\n                        memoryBudget_.dedicatedVideoMemory / (1024.0 * 1024.0));\n  IGL_D3D12_LOG_VERBOSE(\"  Shared System Memory: %.2f MB\\n\",\n                        memoryBudget_.sharedSystemMemory / (1024.0 * 1024.0));\n  IGL_D3D12_LOG_VERBOSE(\"  Total Available: %.2f MB\\n\",\n                        memoryBudget_.totalAvailableMemory() / (1024.0 * 1024.0));\n\n  // Recommend conservative budget (80% of available)\n  uint64_t recommendedBudget = static_cast<uint64_t>(memoryBudget_.totalAvailableMemory() * 0.8);\n  IGL_D3D12_LOG_VERBOSE(\"  Recommended Budget (80%%): %.2f MB\\n\",\n                        recommendedBudget / (1024.0 * 1024.0));\n}\n\n// A-010: Detect HDR output capabilities\nvoid D3D12Context::detectHDRCapabilities() {\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Detecting HDR output capabilities...\\n\");\n\n  // Reset to defaults\n  hdrCapabilities_ = HDRCapabilities{};\n\n  // Need a valid swapchain to query output\n  if (!swapChain_.Get()) {\n    IGL_D3D12_LOG_VERBOSE(\"  No swapchain available, HDR detection skipped\\n\");\n    return;\n  }\n\n  // Get the output (monitor) containing the swapchain\n  igl::d3d12::ComPtr<IDXGIOutput> output;\n  HRESULT hr = swapChain_->GetContainingOutput(output.GetAddressOf());\n  if (FAILED(hr)) {\n    IGL_D3D12_LOG_VERBOSE(\"  Failed to get containing output (0x%08X), HDR not available\\n\",\n                          static_cast<unsigned>(hr));\n    return;\n  }\n\n  // Query for IDXGIOutput6 (required for HDR queries)\n  igl::d3d12::ComPtr<IDXGIOutput6> output6;\n  hr = output->QueryInterface(IID_PPV_ARGS(output6.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"  IDXGIOutput6 not available (needs Windows 10 1703+), HDR not supported\\n\");\n    return;\n  }\n\n  // Get output description with color space info\n  DXGI_OUTPUT_DESC1 outputDesc = {};\n  hr = output6->GetDesc1(&outputDesc);\n  if (FAILED(hr)) {\n    IGL_D3D12_LOG_VERBOSE(\"  Failed to get output description (0x%08X)\\n\",\n                          static_cast<unsigned>(hr));\n    return;\n  }\n\n  // Store native color space\n  hdrCapabilities_.nativeColorSpace = outputDesc.ColorSpace;\n\n  // Store luminance information\n  hdrCapabilities_.maxLuminance = outputDesc.MaxLuminance;\n  hdrCapabilities_.minLuminance = outputDesc.MinLuminance;\n  hdrCapabilities_.maxFullFrameLuminance = outputDesc.MaxFullFrameLuminance;\n\n  IGL_D3D12_LOG_VERBOSE(\"  Native Color Space: %u\\n\", outputDesc.ColorSpace);\n  IGL_D3D12_LOG_VERBOSE(\"  Max Luminance: %.2f nits\\n\", outputDesc.MaxLuminance);\n  IGL_D3D12_LOG_VERBOSE(\"  Min Luminance: %.4f nits\\n\", outputDesc.MinLuminance);\n  IGL_D3D12_LOG_VERBOSE(\"  Max Full Frame Luminance: %.2f nits\\n\",\n                        outputDesc.MaxFullFrameLuminance);\n\n  // Check for HDR10 support (BT.2020 ST2084 - PQ curve) via swapchain\n  UINT colorSpaceSupport = 0;\n  hr = swapChain_->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G2084_NONE_P2020,\n                                          &colorSpaceSupport);\n  if (SUCCEEDED(hr) && (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT)) {\n    hdrCapabilities_.hdrSupported = true;\n    IGL_D3D12_LOG_VERBOSE(\"  HDR10 (BT.2020 PQ): SUPPORTED\\n\");\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"  HDR10 (BT.2020 PQ): NOT SUPPORTED\\n\");\n  }\n\n  // Check for scRGB support (linear floating-point HDR)\n  hr = swapChain_->CheckColorSpaceSupport(DXGI_COLOR_SPACE_RGB_FULL_G10_NONE_P709,\n                                          &colorSpaceSupport);\n  if (SUCCEEDED(hr) && (colorSpaceSupport & DXGI_SWAP_CHAIN_COLOR_SPACE_SUPPORT_FLAG_PRESENT)) {\n    hdrCapabilities_.scRGBSupported = true;\n    IGL_D3D12_LOG_VERBOSE(\"  scRGB (Linear FP16): SUPPORTED\\n\");\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"  scRGB (Linear FP16): NOT SUPPORTED\\n\");\n  }\n\n  // Summary\n  if (hdrCapabilities_.hdrSupported || hdrCapabilities_.scRGBSupported) {\n    IGL_D3D12_LOG_VERBOSE(\"D3D12Context: HDR output AVAILABLE (max %.0f nits)\\n\",\n                          outputDesc.MaxLuminance);\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"D3D12Context: HDR output NOT AVAILABLE (SDR display)\\n\");\n  }\n}\n\nResult D3D12Context::createCommandQueue() {\n  D3D12_COMMAND_QUEUE_DESC queueDesc = {};\n  queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;\n  queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;\n\n  HRESULT hr = device_->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(commandQueue_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to create command queue (HRESULT: 0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    IGL_DEBUG_ASSERT(false);\n    return Result(Result::Code::RuntimeError, \"Failed to create command queue\");\n  }\n\n  return Result();\n}\n\nResult D3D12Context::createSwapChain(HWND hwnd, uint32_t width, uint32_t height) {\n  DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {};\n  swapChainDesc.Width = width;\n  swapChainDesc.Height = height;\n  // Use BGRA_UNORM (non-sRGB) for maximum compatibility with all display adapters\n  // Vulkan baselines use BGRA channel ordering for swapchain and MRT targets\n  swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;\n  swapChainDesc.Stereo = FALSE;\n  swapChainDesc.SampleDesc.Count = 1;\n  swapChainDesc.SampleDesc.Quality = 0;\n  swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;\n  swapChainDesc.BufferCount = config_.maxFramesInFlight; // T43: use configured buffer count\n  swapChainDesc.Scaling = DXGI_SCALING_STRETCH;\n  swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD;\n  swapChainDesc.AlphaMode = DXGI_ALPHA_MODE_UNSPECIFIED;\n\n  // Query tearing support capability (required for variable refresh rate displays)\n  // This capability must be queried before creating the swapchain\n  BOOL allowTearing = FALSE;\n  igl::d3d12::ComPtr<IDXGIFactory5> factory5;\n  if (SUCCEEDED(dxgiFactory_.Get()->QueryInterface(IID_PPV_ARGS(factory5.GetAddressOf())))) {\n    if (SUCCEEDED(factory5->CheckFeatureSupport(\n            DXGI_FEATURE_PRESENT_ALLOW_TEARING, &allowTearing, sizeof(allowTearing)))) {\n      tearingSupported_ = (allowTearing == TRUE);\n      if (tearingSupported_) {\n        IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Tearing support available (variable refresh rate)\\n\");\n      }\n    }\n  }\n\n  // Set swapchain tearing flag if supported (required to use DXGI_PRESENT_ALLOW_TEARING)\n  // Without this flag, using DXGI_PRESENT_ALLOW_TEARING in Present() is invalid\n  swapChainDesc.Flags = tearingSupported_ ? DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING : 0;\n\n  igl::d3d12::ComPtr<IDXGISwapChain1> tempSwapChain;\n  HRESULT hr = dxgiFactory_->CreateSwapChainForHwnd(\n      commandQueue_.Get(), hwnd, &swapChainDesc, nullptr, nullptr, tempSwapChain.GetAddressOf());\n\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"CreateSwapChainForHwnd failed: 0x%08X, trying legacy CreateSwapChain\\n\",\n                  (unsigned)hr);\n    // Fallback: legacy CreateSwapChain\n    DXGI_SWAP_CHAIN_DESC legacy = {};\n    legacy.BufferDesc.Width = width;\n    legacy.BufferDesc.Height = height;\n    legacy.BufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;\n    legacy.BufferDesc.RefreshRate.Numerator = 60;\n    legacy.BufferDesc.RefreshRate.Denominator = 1;\n    legacy.SampleDesc.Count = 1;\n    legacy.SampleDesc.Quality = 0;\n    legacy.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;\n    legacy.BufferCount = config_.maxFramesInFlight; // T43: use configured buffer count\n    legacy.OutputWindow = hwnd;\n    legacy.Windowed = TRUE;\n    legacy.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;\n    legacy.Flags = 0;\n\n    igl::d3d12::ComPtr<IDXGISwapChain> legacySwap;\n    HRESULT hr2 =\n        dxgiFactory_->CreateSwapChain(commandQueue_.Get(), &legacy, legacySwap.GetAddressOf());\n    if (FAILED(hr2)) {\n      IGL_LOG_ERROR(\"D3D12Context: Failed to create swapchain (hr=0x%08X / 0x%08X)\\n\",\n                    (unsigned)hr,\n                    (unsigned)hr2);\n      IGL_DEBUG_ASSERT(false);\n      return Result(Result::Code::RuntimeError, \"Failed to create swapchain\");\n    }\n    // Try to QI to IDXGISwapChain3\n    hr2 = legacySwap->QueryInterface(IID_PPV_ARGS(swapChain_.GetAddressOf()));\n    if (FAILED(hr2)) {\n      IGL_LOG_ERROR(\"D3D12Context: Failed to query IDXGISwapChain3 (hr=0x%08X)\\n\", (unsigned)hr2);\n      IGL_DEBUG_ASSERT(false);\n      return Result(Result::Code::RuntimeError, \"Failed to query IDXGISwapChain3\");\n    }\n    return Result();\n  }\n\n  // Cast to IDXGISwapChain3\n  hr = tempSwapChain->QueryInterface(IID_PPV_ARGS(swapChain_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to query IDXGISwapChain3 interface (HRESULT: 0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    IGL_DEBUG_ASSERT(false);\n    return Result(Result::Code::RuntimeError, \"Failed to query IDXGISwapChain3 interface\");\n  }\n\n  // A-009: Verify swapchain actually supports tearing after creation\n  if (tearingSupported_) {\n    DXGI_SWAP_CHAIN_DESC1 actualDesc = {};\n    hr = swapChain_->GetDesc1(&actualDesc);\n    if (SUCCEEDED(hr)) {\n      const bool actualTearingFlag = (actualDesc.Flags & DXGI_SWAP_CHAIN_FLAG_ALLOW_TEARING) != 0;\n      const bool actualWindowedMode = (actualDesc.SwapEffect == DXGI_SWAP_EFFECT_FLIP_DISCARD ||\n                                       actualDesc.SwapEffect == DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL);\n\n      if (!actualTearingFlag) {\n        IGL_D3D12_LOG_VERBOSE(\n            \"D3D12Context: Tearing flag was NOT set on swapchain (downgraded by driver)\\n\");\n        tearingSupported_ = false;\n      } else if (!actualWindowedMode) {\n        IGL_D3D12_LOG_VERBOSE(\n            \"D3D12Context: Swapchain not in flip mode (tearing requires flip model)\\n\");\n        tearingSupported_ = false;\n      } else {\n        IGL_D3D12_LOG_VERBOSE(\n            \"D3D12Context: Tearing verified on swapchain (windowed flip model + tearing flag)\\n\");\n      }\n    } else {\n      IGL_D3D12_LOG_VERBOSE(\n          \"D3D12Context: Failed to verify swapchain desc, assuming tearing unavailable\\n\");\n      tearingSupported_ = false;\n    }\n  }\n\n  // A-010: Detect HDR capabilities now that swapchain is created\n  detectHDRCapabilities();\n\n  // Query swapchain buffer count for dynamic frame management (T43)\n  DXGI_SWAP_CHAIN_DESC1 swapDesc = {};\n  hr = swapChain_->GetDesc1(&swapDesc);\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to query swapchain description (HRESULT: 0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    IGL_DEBUG_ASSERT(false);\n    return Result(Result::Code::RuntimeError, \"Failed to query swapchain description\");\n  }\n\n  swapchainBufferCount_ = swapDesc.BufferCount;\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Swapchain created with %u buffers\\n\", swapchainBufferCount_);\n\n  // Resize frame management arrays to match swapchain buffer count\n  renderTargets_.resize(swapchainBufferCount_);\n  frameContexts_.resize(swapchainBufferCount_);\n\n  return Result();\n}\n\nResult D3D12Context::createRTVHeap() {\n  D3D12_DESCRIPTOR_HEAP_DESC heapDesc = {};\n  heapDesc.NumDescriptors = swapchainBufferCount_; // Use queried buffer count\n  heapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;\n  heapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;\n\n  HRESULT hr = device_->CreateDescriptorHeap(&heapDesc, IID_PPV_ARGS(rtvHeap_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to create RTV heap (HRESULT: 0x%08X)\\n\",\n                  static_cast<unsigned>(hr));\n    IGL_DEBUG_ASSERT(false);\n    return Result(Result::Code::RuntimeError, \"Failed to create RTV heap\");\n  }\n\n  rtvDescriptorSize_ = device_->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);\n\n  return Result();\n}\n\nResult D3D12Context::createBackBuffers() {\n  D3D12_CPU_DESCRIPTOR_HANDLE rtvHandle = rtvHeap_->GetCPUDescriptorHandleForHeapStart();\n\n  for (UINT i = 0; i < swapchainBufferCount_; i++) { // Use queried buffer count\n    HRESULT hr = swapChain_->GetBuffer(i, IID_PPV_ARGS(renderTargets_[i].GetAddressOf()));\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\"D3D12Context: Failed to get swapchain buffer %u (HRESULT: 0x%08X)\\n\",\n                    i,\n                    static_cast<unsigned>(hr));\n      IGL_DEBUG_ASSERT(false);\n      return Result(Result::Code::RuntimeError, \"Failed to get swapchain buffer\");\n    }\n\n    // Pre-creation validation.\n    IGL_DEBUG_ASSERT(device_.Get() != nullptr, \"Device is null before CreateRenderTargetView\");\n    IGL_DEBUG_ASSERT(renderTargets_[i].Get() != nullptr, \"Swapchain buffer is null\");\n    IGL_DEBUG_ASSERT(rtvHandle.ptr != 0, \"RTV descriptor handle is invalid\");\n\n    device_->CreateRenderTargetView(renderTargets_[i].Get(), nullptr, rtvHandle);\n    rtvHandle.ptr += rtvDescriptorSize_;\n  }\n\n  return Result();\n}\n\nResult D3D12Context::createDescriptorHeaps() {\n  // Cache descriptor sizes\n  cbvSrvUavDescriptorSize_ =\n      device_->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);\n  samplerDescriptorSize_ =\n      device_->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER);\n\n  // Create per-frame shader-visible descriptor heaps using configurable sizes.\n  // Each frame gets its own isolated heaps to prevent descriptor conflicts between frames.\n  // Use pre-allocation with fail-fast on exhaustion (Vulkan pattern, no dynamic growth).\n  IGL_D3D12_LOG_VERBOSE(\n      \"D3D12Context: Creating per-frame descriptor heaps with fail-fast allocation...\\n\");\n  IGL_D3D12_LOG_VERBOSE(\n      \"  Config: bufferCount=%u, samplerHeapSize=%u, \"\n      \"descriptorsPerPage=%u, maxHeapPages=%u, preAllocate=%s\\n\",\n      swapchainBufferCount_,\n      config_.samplerHeapSize,\n      config_.descriptorsPerPage,\n      config_.maxHeapPages,\n      config_.preAllocateDescriptorPages ? \"true\" : \"false\");\n\n  for (UINT i = 0; i < swapchainBufferCount_; i++) {\n    // CBV/SRV/UAV heap: pre-allocate pages based on the configuration policy.\n    // When preAllocateDescriptorPages is true, allocate all maxHeapPages upfront\n    // to prevent mid-frame allocation and descriptor invalidation (Vulkan fail-fast pattern).\n    {\n      frameContexts_[i].cbvSrvUavHeapPages.clear();\n      frameContexts_[i].currentCbvSrvUavPageIndex = 0;\n\n      const uint32_t pagesToAllocate = config_.preAllocateDescriptorPages ? config_.maxHeapPages\n                                                                          : 1;\n\n      for (uint32_t pageIdx = 0; pageIdx < pagesToAllocate; ++pageIdx) {\n        igl::d3d12::ComPtr<ID3D12DescriptorHeap> heap;\n        Result result = allocateDescriptorHeapPage(\n            D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV, config_.descriptorsPerPage, &heap);\n\n        if (!result.isOk()) {\n          IGL_LOG_ERROR(\n              \"D3D12Context: Failed to create CBV/SRV/UAV heap page %u for frame %u: %s\\n\",\n              pageIdx,\n              i,\n              result.message.c_str());\n          IGL_DEBUG_ASSERT(false);\n          return result;\n        }\n\n        frameContexts_[i].cbvSrvUavHeapPages.emplace_back(heap, config_.descriptorsPerPage);\n      }\n\n      const uint32_t allocatedDescriptors = pagesToAllocate * config_.descriptorsPerPage;\n      if (config_.preAllocateDescriptorPages) {\n        IGL_D3D12_LOG_VERBOSE(\n            \"  Frame %u: Pre-allocated %u CBV/SRV/UAV heap pages (%u descriptors, fail-fast on \"\n            \"exhaustion)\\n\",\n            i,\n            pagesToAllocate,\n            allocatedDescriptors);\n      } else {\n        IGL_D3D12_LOG_VERBOSE(\n            \"  Frame %u: Allocated %u CBV/SRV/UAV heap page (%u descriptors, fail-fast on \"\n            \"exhaustion)\\n\",\n            i,\n            pagesToAllocate,\n            allocatedDescriptors);\n      }\n    }\n\n    // Sampler heap: samplerHeapSize descriptors\n    {\n      D3D12_DESCRIPTOR_HEAP_DESC desc = {};\n      desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER;\n      desc.NumDescriptors = config_.samplerHeapSize; // T14: Use configurable size\n      desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n      desc.NodeMask = 0;\n\n      HRESULT hr = device_->CreateDescriptorHeap(\n          &desc, IID_PPV_ARGS(frameContexts_[i].samplerHeap.GetAddressOf()));\n      if (FAILED(hr)) {\n        IGL_LOG_ERROR(\n            \"D3D12Context: Failed to create per-frame Sampler heap for frame %u (HRESULT: \"\n            \"0x%08X)\\n\",\n            i,\n            static_cast<unsigned>(hr));\n        IGL_DEBUG_ASSERT(false);\n        return Result(Result::Code::RuntimeError,\n                      \"Failed to create per-frame Sampler heap for frame \" + std::to_string(i));\n      }\n      IGL_D3D12_LOG_VERBOSE(\n          \"  Frame %u: Created Sampler heap (%u descriptors)\\n\", i, config_.samplerHeapSize);\n    }\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Per-frame descriptor heaps created successfully\\n\");\n  // Memory calculation reflects actual pre-allocation (no dynamic growth).\n  const uint32_t pagesPerFrame = config_.preAllocateDescriptorPages ? config_.maxHeapPages : 1;\n  const uint32_t cbvSrvUavDescriptors = config_.descriptorsPerPage * pagesPerFrame;\n  const uint32_t totalDescriptorsPerFrame = cbvSrvUavDescriptors + config_.samplerHeapSize;\n  const uint32_t totalMemoryKB = (swapchainBufferCount_ * totalDescriptorsPerFrame * 32) / 1024;\n  IGL_D3D12_LOG_VERBOSE(\n      \"  Allocated memory: %u frames * (%u CBV/SRV/UAV + %u Samplers) * 32 bytes = %u KB\\n\",\n      swapchainBufferCount_,\n      cbvSrvUavDescriptors,\n      config_.samplerHeapSize,\n      totalMemoryKB);\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Creating descriptor heap manager...\\n\");\n\n  // Create descriptor heap manager using configuration values.\n  DescriptorHeapManager::Sizes sizes{};\n  sizes.cbvSrvUav = 256; // For CPU-visible staging (not used for shader-visible).\n  sizes.samplers = 16; // For CPU-visible staging (not used for shader-visible).\n  sizes.rtvs = config_.rtvHeapSize;\n  sizes.dsvs = config_.dsvHeapSize;\n\n  ownedHeapMgr_ = new DescriptorHeapManager();\n  Result result = ownedHeapMgr_->initialize(device_.Get(), sizes);\n  if (!result.isOk()) {\n    IGL_LOG_ERROR(\"D3D12Context: Failed to initialize descriptor heap manager: %s\\n\",\n                  result.message.c_str());\n    delete ownedHeapMgr_;\n    ownedHeapMgr_ = nullptr;\n  } else {\n    heapMgr_ = ownedHeapMgr_;\n    IGL_D3D12_LOG_VERBOSE(\"D3D12Context: Descriptor heap manager created successfully\\n\");\n  }\n\n  return Result();\n}\n\nResult D3D12Context::createCommandSignatures() {\n  // Create command signature for DrawInstanced (multiDrawIndirect)\n  // D3D12_DRAW_ARGUMENTS: { VertexCountPerInstance, InstanceCount, StartVertexLocation,\n  // StartInstanceLocation }\n  {\n    D3D12_INDIRECT_ARGUMENT_DESC drawArg = {};\n    drawArg.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW;\n\n    D3D12_COMMAND_SIGNATURE_DESC drawSigDesc = {};\n    drawSigDesc.ByteStride = sizeof(D3D12_DRAW_ARGUMENTS); // 16 bytes (4 x UINT)\n    drawSigDesc.NumArgumentDescs = 1;\n    drawSigDesc.pArgumentDescs = &drawArg;\n    drawSigDesc.NodeMask = 0;\n\n    HRESULT hr = device_->CreateCommandSignature(\n        &drawSigDesc,\n        nullptr, // No root signature needed for simple draw commands\n        IID_PPV_ARGS(drawIndirectSignature_.GetAddressOf()));\n\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\n          \"D3D12Context: Failed to create draw indirect command signature (HRESULT: 0x%08X)\\n\",\n          static_cast<unsigned>(hr));\n      IGL_DEBUG_ASSERT(false);\n      return Result(Result::Code::RuntimeError, \"Failed to create draw indirect command signature\");\n    }\n    IGL_D3D12_LOG_VERBOSE(\n        \"D3D12Context: Created draw indirect command signature (stride: %u bytes)\\n\",\n        drawSigDesc.ByteStride);\n  }\n\n  // Create command signature for DrawIndexedInstanced (multiDrawIndexedIndirect)\n  // D3D12_DRAW_INDEXED_ARGUMENTS: { IndexCountPerInstance, InstanceCount, StartIndexLocation,\n  // BaseVertexLocation, StartInstanceLocation }\n  {\n    D3D12_INDIRECT_ARGUMENT_DESC drawIndexedArg = {};\n    drawIndexedArg.Type = D3D12_INDIRECT_ARGUMENT_TYPE_DRAW_INDEXED;\n\n    D3D12_COMMAND_SIGNATURE_DESC drawIndexedSigDesc = {};\n    drawIndexedSigDesc.ByteStride = sizeof(D3D12_DRAW_INDEXED_ARGUMENTS); // 20 bytes (5 x UINT)\n    drawIndexedSigDesc.NumArgumentDescs = 1;\n    drawIndexedSigDesc.pArgumentDescs = &drawIndexedArg;\n    drawIndexedSigDesc.NodeMask = 0;\n\n    HRESULT hr = device_->CreateCommandSignature(\n        &drawIndexedSigDesc,\n        nullptr, // No root signature needed for simple draw commands\n        IID_PPV_ARGS(drawIndexedIndirectSignature_.GetAddressOf()));\n\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\n          \"D3D12Context: Failed to create draw indexed indirect command signature (HRESULT: \"\n          \"0x%08X)\\n\",\n          static_cast<unsigned>(hr));\n      IGL_DEBUG_ASSERT(false);\n      return Result(Result::Code::RuntimeError,\n                    \"Failed to create draw indexed indirect command signature\");\n    }\n    IGL_D3D12_LOG_VERBOSE(\n        \"D3D12Context: Created draw indexed indirect command signature (stride: %u bytes)\\n\",\n        drawIndexedSigDesc.ByteStride);\n  }\n\n  return Result();\n}\n\nuint32_t D3D12Context::getCurrentBackBufferIndex() const {\n  if (swapChain_.Get() == nullptr) {\n    return 0;\n  }\n  return swapChain_->GetCurrentBackBufferIndex();\n}\n\nID3D12Resource* D3D12Context::getCurrentBackBuffer() const {\n  uint32_t index = getCurrentBackBufferIndex();\n  if (index >= swapchainBufferCount_) {\n    IGL_LOG_ERROR(\"getCurrentBackBuffer(): index %u >= swapchainBufferCount %u\\n\",\n                  index,\n                  swapchainBufferCount_);\n    return nullptr;\n  }\n\n  ID3D12Resource* resource = renderTargets_[index].Get();\n  IGL_D3D12_LOG_VERBOSE(\"getCurrentBackBuffer(): index=%u, resource=%p\\n\", index, (void*)resource);\n  return resource;\n}\n\nD3D12_CPU_DESCRIPTOR_HANDLE D3D12Context::getCurrentRTV() const {\n  if (rtvHeap_.Get() == nullptr) {\n    return {0};\n  }\n  D3D12_CPU_DESCRIPTOR_HANDLE rtv = rtvHeap_->GetCPUDescriptorHandleForHeapStart();\n  rtv.ptr += getCurrentBackBufferIndex() * rtvDescriptorSize_;\n  return rtv;\n}\n\nvoid D3D12Context::waitForGPU() {\n  if (!fence_.Get() || !commandQueue_.Get()) {\n    return;\n  }\n\n  // Signal and increment the fence value\n  const UINT64 fenceToWaitFor = ++fenceValue_;\n  commandQueue_->Signal(fence_.Get(), fenceToWaitFor);\n\n  // Wait until the fence is crossed using FenceWaiter (TOCTOU-safe)\n  FenceWaiter waiter(fence_.Get(), fenceToWaitFor);\n  Result waitResult = waiter.wait(INFINITE);\n  if (!waitResult.isOk()) {\n    IGL_LOG_ERROR(\"D3D12Context::waitForGPU() - Fence wait failed: %s (fence=%llu)\\n\",\n                  waitResult.message.c_str(),\n                  fenceToWaitFor);\n  }\n}\n\nvoid D3D12Context::trackResourceCreation(const char* type, size_t sizeBytes) {\n  std::lock_guard<std::mutex> lock(resourceStatsMutex_);\n  if (strcmp(type, \"Buffer\") == 0) {\n    resourceStats_.totalBuffersCreated++;\n    resourceStats_.bufferMemoryBytes += sizeBytes;\n  } else if (strcmp(type, \"Texture\") == 0) {\n    resourceStats_.totalTexturesCreated++;\n    resourceStats_.textureMemoryBytes += sizeBytes;\n  } else if (strcmp(type, \"SRV\") == 0) {\n    resourceStats_.totalSRVsCreated++;\n  } else if (strcmp(type, \"Sampler\") == 0) {\n    resourceStats_.totalSamplersCreated++;\n  }\n}\n\nvoid D3D12Context::trackResourceDestruction(const char* type, size_t sizeBytes) {\n  std::lock_guard<std::mutex> lock(resourceStatsMutex_);\n  if (strcmp(type, \"Buffer\") == 0) {\n    resourceStats_.totalBuffersDestroyed++;\n    resourceStats_.bufferMemoryBytes -= sizeBytes;\n  } else if (strcmp(type, \"Texture\") == 0) {\n    resourceStats_.totalTexturesDestroyed++;\n    resourceStats_.textureMemoryBytes -= sizeBytes;\n  }\n}\n\nvoid D3D12Context::logResourceStats() {\n  std::lock_guard<std::mutex> lock(resourceStatsMutex_);\n  IGL_D3D12_LOG_VERBOSE(\"=== D3D12 Resource Statistics ===\\n\");\n  IGL_D3D12_LOG_VERBOSE(\n      \"  Buffers: %zu created, %zu destroyed (leaked: %zd)\\n\",\n      resourceStats_.totalBuffersCreated,\n      resourceStats_.totalBuffersDestroyed,\n      (int64_t)resourceStats_.totalBuffersCreated - (int64_t)resourceStats_.totalBuffersDestroyed);\n  IGL_D3D12_LOG_VERBOSE(\"  Textures: %zu created, %zu destroyed (leaked: %zd)\\n\",\n                        resourceStats_.totalTexturesCreated,\n                        resourceStats_.totalTexturesDestroyed,\n                        (int64_t)resourceStats_.totalTexturesCreated -\n                            (int64_t)resourceStats_.totalTexturesDestroyed);\n  IGL_D3D12_LOG_VERBOSE(\"  SRVs created: %zu\\n\", resourceStats_.totalSRVsCreated);\n  IGL_D3D12_LOG_VERBOSE(\"  Samplers created: %zu\\n\", resourceStats_.totalSamplersCreated);\n  IGL_D3D12_LOG_VERBOSE(\"  Buffer memory: %.2f MB\\n\",\n                        resourceStats_.bufferMemoryBytes / (1024.0 * 1024.0));\n  IGL_D3D12_LOG_VERBOSE(\"  Texture memory: %.2f MB\\n\",\n                        resourceStats_.textureMemoryBytes / (1024.0 * 1024.0));\n  IGL_D3D12_LOG_VERBOSE(\"==================================\\n\");\n}\n\n// Allocate a new descriptor heap page for dynamic growth.\nResult D3D12Context::allocateDescriptorHeapPage(D3D12_DESCRIPTOR_HEAP_TYPE type,\n                                                uint32_t numDescriptors,\n                                                igl::d3d12::ComPtr<ID3D12DescriptorHeap>* outHeap) {\n  if (!device_.Get()) {\n    return Result{Result::Code::RuntimeError, \"Device is null\"};\n  }\n\n  D3D12_DESCRIPTOR_HEAP_DESC heapDesc = {};\n  heapDesc.Type = type;\n  heapDesc.NumDescriptors = numDescriptors;\n  heapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n  heapDesc.NodeMask = 0;\n\n  HRESULT hr = device_->CreateDescriptorHeap(&heapDesc, IID_PPV_ARGS(outHeap->GetAddressOf()));\n  if (FAILED(hr)) {\n    char errorMsg[256];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to create descriptor heap page (type=%d, numDescriptors=%u): HRESULT=0x%08X\",\n             static_cast<int>(type),\n             numDescriptors,\n             static_cast<unsigned>(hr));\n    return Result{Result::Code::RuntimeError, errorMsg};\n  }\n\n  return Result{};\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12Context.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <mutex>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Headers.h>\n\nnamespace igl {\nclass IBuffer; // Forward declaration for igl::IBuffer\n}\n\nnamespace igl::d3d12 {\n\nclass DescriptorHeapManager; // fwd decl in igl::d3d12\n\n/**\n * @brief Descriptor heap page for dynamic multi-page growth\n *\n * Part of Strategy 1 (Transient Descriptor Allocator) architecture.\n * See D3D12ResourcesBinder.h for full architecture documentation.\n *\n * Following Microsoft MiniEngine's DynamicDescriptorHeap pattern:\n * - Start with 1 page of 1024 descriptors per frame\n * - Grow to up to 16 pages (16,384 descriptors) on-demand\n * - Reset all counters at frame boundary (no deallocation needed)\n */\nstruct DescriptorHeapPage {\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> heap;\n  uint32_t capacity; // Total descriptors in this page\n  uint32_t used; // Currently allocated descriptors\n\n  DescriptorHeapPage() : capacity(0), used(0) {}\n  DescriptorHeapPage(igl::d3d12::ComPtr<ID3D12DescriptorHeap> h, uint32_t cap) :\n    heap(h), capacity(cap), used(0) {}\n};\n\n/**\n * @brief Per-frame context for CPU/GPU parallelism and descriptor management\n *\n * ============================================================================\n * ARCHITECTURE: Strategy 1 - Transient Descriptor Allocator\n * ============================================================================\n *\n * FrameContext implements the per-frame descriptor heap management system\n * (Strategy 1 in D3D12ResourcesBinder.h architecture).\n *\n * **Key Design Decisions**:\n * - 3 frames in flight: Prevents CPU/GPU stalls while enabling triple buffering\n * - Per-frame isolation: Each frame gets independent descriptor heaps\n * - Shared across command buffers: ALL command buffers in a frame share these heaps\n * - Linear allocation: O(1) descriptor allocation with simple counter increment\n * - Frame-boundary reset: Counters reset to 0, no per-descriptor deallocation\n * - Dynamic growth: CBV/SRV/UAV heaps can grow from 1 to 16 pages on-demand\n *\n * **Descriptor Heap Layout**:\n * - CBV/SRV/UAV: Multi-page array (1024 descriptors/page, up to 16 pages = 16K total)\n * - Samplers: Single heap (2048 descriptors, D3D12 spec limit, no growth)\n *\n * **Access Pattern**:\n * - CommandBuffer::getNextCbvSrvUavDescriptor() - allocates from current page\n * - CommandBuffer::allocateCbvSrvUavRange() - allocates contiguous range\n * - CommandBuffer::getNextSamplerDescriptor() - returns reference for increment\n * - FrameManager::resetDescriptorCounters() - resets at frame boundary\n *\n * **Performance Characteristics**:\n * - Allocation: O(1) with occasional page growth (O(n) for page vector resize)\n * - Deallocation: None (bulk reset at frame boundary)\n * - Memory: ~4MB worst case per frame (16 pages * 1024 descriptors * 32 bytes/descriptor)\n *\n * For architecture overview, see D3D12ResourcesBinder.h documentation.\n */\nstruct FrameContext {\n  igl::d3d12::ComPtr<ID3D12CommandAllocator> allocator;\n  UINT64 fenceValue = 0; // First fence signaled this frame (backward compatibility)\n\n  // D-002: Track maximum fence value of ALL command lists using this allocator\n  // CRITICAL: Allocator can only be reset when GPU completes maxAllocatorFence\n  UINT64 maxAllocatorFence = 0;\n\n  // D-002: Count command buffers submitted with this allocator (telemetry)\n  uint32_t commandBufferCount = 0;\n\n  // Per-frame shader-visible descriptor heaps (following Microsoft MiniEngine pattern).\n  // Supports multiple pages for dynamic growth to prevent overflow and corruption.\n  // Each frame gets its own isolated heap pages to prevent descriptor conflicts.\n  std::vector<DescriptorHeapPage> cbvSrvUavHeapPages; // Dynamic array of 1024-descriptor pages\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> samplerHeap; // 2048 descriptors (kMaxSamplers)\n\n  // Current active page index for CBV/SRV/UAV allocation.\n  uint32_t currentCbvSrvUavPageIndex = 0;\n\n  // Track the currently active shader-visible heap for command list binding.\n  // This is updated when allocating new pages and must be rebound to the command list.\n  // This heap is returned by D3D12Context::getCbvSrvUavHeap() for binding.\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> activeCbvSrvUavHeap;\n\n  // Linear allocator counters - reset to 0 each frame\n  // Incremented by each command buffer's encoders as they allocate descriptors\n  uint32_t nextCbvSrvUavDescriptor = 0;\n  uint32_t nextSamplerDescriptor = 0;\n\n  // Transient resources that must be kept alive until this frame completes GPU execution\n  // Examples: push constant buffers, temporary upload buffers\n  // CRITICAL: These are cleared when we advance to the next frame AFTER waiting for\n  // this frame's fence, ensuring the GPU has finished reading them\n  std::vector<std::shared_ptr<igl::IBuffer>> transientBuffers;\n  std::vector<igl::d3d12::ComPtr<ID3D12Resource>> transientResources;\n\n  // Telemetry for transient resource tracking.\n  // Tracks high-water mark to observe peak usage and detect unbounded growth.\n  size_t transientBuffersHighWater = 0;\n  size_t transientResourcesHighWater = 0;\n\n  // Telemetry for descriptor heap usage tracking.\n  // Tracks peak descriptor usage per frame to detect heap overflow risks.\n  uint32_t peakCbvSrvUavUsage = 0;\n  uint32_t peakSamplerUsage = 0;\n};\n\nclass D3D12Context {\n public:\n  // A-011: Multi-adapter enumeration and tracking\n  struct AdapterInfo {\n    igl::d3d12::ComPtr<IDXGIAdapter1> adapter;\n    DXGI_ADAPTER_DESC1 desc;\n    D3D_FEATURE_LEVEL featureLevel;\n    bool isWarp; // Software rasterizer\n    uint32_t index; // Original enumeration index\n\n    // Helper methods\n    uint64_t getDedicatedVideoMemoryMB() const;\n    const char* getVendorName() const;\n  };\n\n  // A-012: Memory budget tracking\n  struct MemoryBudget {\n    uint64_t dedicatedVideoMemory = 0; // Dedicated GPU memory (bytes)\n    uint64_t sharedSystemMemory = 0; // Shared system memory accessible to GPU (bytes)\n    uint64_t estimatedUsage = 0; // Current estimated usage by this device (bytes)\n    uint64_t userDefinedBudgetLimit = 0; // Optional soft limit\n\n    uint64_t totalAvailableMemory() const;\n    double getUsagePercentage() const;\n    bool isMemoryCritical() const;\n    bool isMemoryLow() const;\n  };\n\n  // A-010: HDR output capabilities\n  struct HDRCapabilities {\n    bool hdrSupported = false; // HDR10 support\n    bool scRGBSupported = false; // scRGB (FP16) support\n    DXGI_COLOR_SPACE_TYPE nativeColorSpace = DXGI_COLOR_SPACE_RGB_FULL_G22_NONE_P709; // SDR default\n    float maxLuminance = 80.0f; // Max luminance in nits (SDR default)\n    float minLuminance = 0.0f; // Min luminance in nits\n    float maxFullFrameLuminance = 80.0f; // Max full-frame luminance in nits\n  };\n\n  D3D12Context() = default;\n  ~D3D12Context();\n\n  // initialize() accepts optional D3D12ContextConfig for configurable sizes.\n  Result initialize(HWND hwnd,\n                    uint32_t width,\n                    uint32_t height,\n                    const D3D12ContextConfig& config = D3D12ContextConfig::defaultConfig());\n  Result resize(uint32_t width, uint32_t height);\n\n  ID3D12Device* getDevice() const {\n    return device_.Get();\n  }\n  ID3D12CommandQueue* getCommandQueue() const {\n    return commandQueue_.Get();\n  }\n  IDXGISwapChain3* getSwapChain() const {\n    return swapChain_.Get();\n  }\n\n  // Get currently active CBV/SRV/UAV descriptor heap for current frame.\n  // Returns the active heap used for descriptor allocation. Use this for heap binding.\n  // For multi-page access or diagnostics, use getFrameContexts().\n  ID3D12DescriptorHeap* getCbvSrvUavHeap() const {\n    const auto& frameCtx = frameContexts_[currentFrameIndex_];\n    return frameCtx.activeCbvSrvUavHeap.Get();\n  }\n  ID3D12DescriptorHeap* getSamplerHeap() const {\n    return frameContexts_[currentFrameIndex_].samplerHeap.Get();\n  }\n\n  // Allocate a new descriptor heap page for dynamic growth.\n  Result allocateDescriptorHeapPage(D3D12_DESCRIPTOR_HEAP_TYPE type,\n                                    uint32_t numDescriptors,\n                                    igl::d3d12::ComPtr<ID3D12DescriptorHeap>* outHeap);\n\n  // Get descriptor sizes\n  UINT getCbvSrvUavDescriptorSize() const {\n    return cbvSrvUavDescriptorSize_;\n  }\n  UINT getSamplerDescriptorSize() const {\n    return samplerDescriptorSize_;\n  }\n\n  // Get root signature capabilities\n  D3D_ROOT_SIGNATURE_VERSION getHighestRootSignatureVersion() const {\n    return highestRootSignatureVersion_;\n  }\n  D3D12_RESOURCE_BINDING_TIER getResourceBindingTier() const {\n    return resourceBindingTier_;\n  }\n\n  // Get shader model capability.\n  D3D_SHADER_MODEL getMaxShaderModel() const {\n    return maxShaderModel_;\n  }\n\n  // Get selected feature level (A-004, A-005)\n  D3D_FEATURE_LEVEL getSelectedFeatureLevel() const {\n    return selectedFeatureLevel_;\n  }\n\n  // Get tearing support capability\n  bool isTearingSupported() const {\n    return tearingSupported_;\n  }\n\n  // Get command signatures for indirect drawing.\n  ID3D12CommandSignature* getDrawIndirectSignature() const {\n    return drawIndirectSignature_.Get();\n  }\n  ID3D12CommandSignature* getDrawIndexedIndirectSignature() const {\n    return drawIndexedIndirectSignature_.Get();\n  }\n\n  // Get descriptor handles from per-frame heaps using the current page for multi-heap support.\n  D3D12_CPU_DESCRIPTOR_HANDLE getCbvSrvUavCpuHandle(uint32_t descriptorIndex) const {\n    const auto& frameCtx = frameContexts_[currentFrameIndex_];\n    const auto& pages = frameCtx.cbvSrvUavHeapPages;\n    const uint32_t pageIdx = frameCtx.currentCbvSrvUavPageIndex;\n\n    if (pages.empty() || pageIdx >= pages.size()) {\n      return {0}; // Invalid handle\n    }\n\n    auto h = pages[pageIdx].heap->GetCPUDescriptorHandleForHeapStart();\n    h.ptr += descriptorIndex * cbvSrvUavDescriptorSize_;\n    return h;\n  }\n\n  D3D12_GPU_DESCRIPTOR_HANDLE getCbvSrvUavGpuHandle(uint32_t descriptorIndex) const {\n    const auto& frameCtx = frameContexts_[currentFrameIndex_];\n    const auto& pages = frameCtx.cbvSrvUavHeapPages;\n    const uint32_t pageIdx = frameCtx.currentCbvSrvUavPageIndex;\n\n    if (pages.empty() || pageIdx >= pages.size()) {\n      return {0}; // Invalid handle\n    }\n\n    auto h = pages[pageIdx].heap->GetGPUDescriptorHandleForHeapStart();\n    h.ptr += descriptorIndex * cbvSrvUavDescriptorSize_;\n    return h;\n  }\n\n  D3D12_CPU_DESCRIPTOR_HANDLE getSamplerCpuHandle(uint32_t descriptorIndex) const {\n    auto h = frameContexts_[currentFrameIndex_].samplerHeap->GetCPUDescriptorHandleForHeapStart();\n    h.ptr += descriptorIndex * samplerDescriptorSize_;\n    return h;\n  }\n\n  D3D12_GPU_DESCRIPTOR_HANDLE getSamplerGpuHandle(uint32_t descriptorIndex) const {\n    auto h = frameContexts_[currentFrameIndex_].samplerHeap->GetGPUDescriptorHandleForHeapStart();\n    h.ptr += descriptorIndex * samplerDescriptorSize_;\n    return h;\n  }\n\n  // Optional descriptor heap manager (provided by headless context)\n  DescriptorHeapManager* getDescriptorHeapManager() const {\n    return heapMgr_;\n  }\n\n  uint32_t getCurrentBackBufferIndex() const;\n  ID3D12Resource* getCurrentBackBuffer() const;\n  D3D12_CPU_DESCRIPTOR_HANDLE getCurrentRTV() const;\n\n  void waitForGPU();\n\n  // Per-frame fence access for CommandQueue\n  FrameContext* getFrameContexts() {\n    return frameContexts_.data();\n  }\n  UINT& getCurrentFrameIndex() {\n    return currentFrameIndex_;\n  }\n  UINT getSwapchainBufferCount() const {\n    return swapchainBufferCount_;\n  }\n  UINT64& getFenceValue() {\n    return fenceValue_;\n  }\n  ID3D12Fence* getFence() const {\n    return fence_.Get();\n  }\n\n  // Resource tracking for diagnostics\n  static void trackResourceCreation(const char* type, size_t sizeBytes);\n  static void trackResourceDestruction(const char* type, size_t sizeBytes);\n  static void logResourceStats();\n\n  // A-011: Adapter enumeration and selection\n  const std::vector<AdapterInfo>& getEnumeratedAdapters() const {\n    return enumeratedAdapters_;\n  }\n  const AdapterInfo* getSelectedAdapter() const {\n    if (selectedAdapterIndex_ < enumeratedAdapters_.size()) {\n      return &enumeratedAdapters_[selectedAdapterIndex_];\n    }\n    return nullptr;\n  }\n  uint32_t getSelectedAdapterIndex() const {\n    return selectedAdapterIndex_;\n  }\n\n  // A-012: Memory budget tracking\n  MemoryBudget getMemoryBudget() const {\n    std::lock_guard<std::mutex> lock(memoryTrackingMutex_);\n    return memoryBudget_;\n  }\n\n  double getMemoryUsagePercentage() const {\n    std::lock_guard<std::mutex> lock(memoryTrackingMutex_);\n    return memoryBudget_.getUsagePercentage();\n  }\n\n  bool isMemoryLow() const {\n    std::lock_guard<std::mutex> lock(memoryTrackingMutex_);\n    return memoryBudget_.isMemoryLow();\n  }\n\n  bool isMemoryCritical() const {\n    std::lock_guard<std::mutex> lock(memoryTrackingMutex_);\n    return memoryBudget_.isMemoryCritical();\n  }\n\n  void updateMemoryUsage(int64_t delta) {\n    std::lock_guard<std::mutex> lock(memoryTrackingMutex_);\n    uint64_t newUsage = memoryBudget_.estimatedUsage;\n    if (delta < 0) {\n      uint64_t absDelta = static_cast<uint64_t>(-delta);\n      newUsage = (absDelta > newUsage) ? 0 : (newUsage - absDelta);\n    } else {\n      newUsage += static_cast<uint64_t>(delta);\n    }\n    memoryBudget_.estimatedUsage = newUsage;\n  }\n\n  // A-010: HDR output capabilities\n  const HDRCapabilities& getHDRCapabilities() const {\n    return hdrCapabilities_;\n  }\n  bool isHDRSupported() const {\n    return hdrCapabilities_.hdrSupported;\n  }\n\n  // Accessor for configuration (sizes, frame buffering, etc.).\n  const D3D12ContextConfig& getConfig() const {\n    return config_;\n  }\n\n protected:\n  [[nodiscard]] Result createDevice();\n  [[nodiscard]] Result createCommandQueue();\n  [[nodiscard]] Result createSwapChain(HWND hwnd, uint32_t width, uint32_t height);\n  Result recreateSwapChain(uint32_t width, uint32_t height);\n  [[nodiscard]] Result createRTVHeap();\n  [[nodiscard]] Result createBackBuffers();\n  [[nodiscard]] Result createDescriptorHeaps();\n  [[nodiscard]] Result createCommandSignatures();\n\n  // A-011: Adapter enumeration\n  [[nodiscard]] Result enumerateAndSelectAdapter();\n  static D3D_FEATURE_LEVEL getHighestFeatureLevel(IDXGIAdapter1* adapter);\n\n  // A-012: Memory budget detection\n  void detectMemoryBudget();\n\n  // A-010: HDR output detection\n  void detectHDRCapabilities();\n\n  igl::d3d12::ComPtr<IDXGIFactory4> dxgiFactory_;\n  igl::d3d12::ComPtr<IDXGIAdapter1> adapter_;\n  igl::d3d12::ComPtr<ID3D12Device> device_;\n  igl::d3d12::ComPtr<ID3D12CommandQueue> commandQueue_;\n  igl::d3d12::ComPtr<IDXGISwapChain3> swapChain_;\n  UINT swapchainBufferCount_ = 0; // Queried from swapchain, replaces kMaxFramesInFlight\n\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> rtvHeap_;\n  std::vector<igl::d3d12::ComPtr<ID3D12Resource>> renderTargets_; // Sized to swapchainBufferCount_\n  UINT rtvDescriptorSize_ = 0;\n\n  // Descriptor sizes (cached from device)\n  UINT cbvSrvUavDescriptorSize_ = 0;\n  UINT samplerDescriptorSize_ = 0;\n\n  // Feature detection for root signature capabilities\n  D3D_ROOT_SIGNATURE_VERSION highestRootSignatureVersion_ = D3D_ROOT_SIGNATURE_VERSION_1_0;\n  D3D12_RESOURCE_BINDING_TIER resourceBindingTier_ = D3D12_RESOURCE_BINDING_TIER_1;\n\n  // Feature detection for device feature level (A-004)\n  D3D_FEATURE_LEVEL selectedFeatureLevel_ = D3D_FEATURE_LEVEL_11_0;\n\n  // Feature detection for shader model.\n  // DXC requires SM 6.0 minimum (SM 5.x deprecated).\n  D3D_SHADER_MODEL maxShaderModel_ = D3D_SHADER_MODEL_6_0;\n\n  // Feature detection for variable refresh rate (tearing) support\n  bool tearingSupported_ = false;\n\n  // A-011: Multi-adapter tracking (structs defined in public section)\n  std::vector<AdapterInfo> enumeratedAdapters_;\n  uint32_t selectedAdapterIndex_ = 0;\n\n  // A-012: Memory budget tracking (struct defined in public section)\n  MemoryBudget memoryBudget_;\n  mutable std::mutex memoryTrackingMutex_;\n\n  // A-010: HDR output capabilities (struct defined in public section)\n  HDRCapabilities hdrCapabilities_;\n\n  // Command signatures for indirect drawing.\n  igl::d3d12::ComPtr<ID3D12CommandSignature> drawIndirectSignature_;\n  igl::d3d12::ComPtr<ID3D12CommandSignature> drawIndexedIndirectSignature_;\n\n  // Descriptor heap manager for headless contexts (unit tests)\n  DescriptorHeapManager* ownedHeapMgr_ =\n      nullptr; // Owned manager for windowed contexts (raw ptr, manually deleted)\n  DescriptorHeapManager* heapMgr_ =\n      nullptr; // non-owning; points to ownedHeapMgr_ or external (headless)\n\n  // Per-frame synchronization for CPU/GPU parallelism\n  std::vector<FrameContext> frameContexts_; // Sized to swapchainBufferCount_\n  UINT currentFrameIndex_ = 0;\n\n  // Global synchronization\n  igl::d3d12::ComPtr<ID3D12Fence> fence_;\n  UINT64 fenceValue_ = 0;\n\n  uint32_t width_ = 0;\n  uint32_t height_ = 0;\n\n  // Configuration for customizable sizes.\n  D3D12ContextConfig config_;\n\n  // Resource tracking (static for global tracking across all contexts)\n  struct ResourceStats {\n    size_t totalBuffersCreated = 0;\n    size_t totalBuffersDestroyed = 0;\n    size_t totalTexturesCreated = 0;\n    size_t totalTexturesDestroyed = 0;\n    size_t totalSRVsCreated = 0;\n    size_t totalSamplersCreated = 0;\n    size_t bufferMemoryBytes = 0;\n    size_t textureMemoryBytes = 0;\n  };\n  static ResourceStats resourceStats_;\n  static std::mutex resourceStatsMutex_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12DeviceCapabilities.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12DeviceCapabilities.h>\n\n#include <igl/d3d12/D3D12Context.h>\n\nnamespace igl::d3d12 {\n\nvoid D3D12DeviceCapabilities::initialize(D3D12Context& ctx) {\n  validateDeviceLimits(ctx);\n}\n\nvoid D3D12DeviceCapabilities::validateDeviceLimits(D3D12Context& ctx) {\n  auto* device = ctx.getDevice();\n  if (!device) {\n    IGL_LOG_ERROR(\"D3D12DeviceCapabilities::validateDeviceLimits: D3D12 device is null\\n\");\n    return;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"=== D3D12 Device Capabilities and Limits Validation ===\\n\");\n\n  // Query D3D12_FEATURE_D3D12_OPTIONS for resource binding tier and other capabilities\n  HRESULT hr = device->CheckFeatureSupport(\n      D3D12_FEATURE_D3D12_OPTIONS, &deviceOptions_, sizeof(deviceOptions_));\n\n  if (SUCCEEDED(hr)) {\n    // Log resource binding tier\n    const char* tierName = \"Unknown\";\n    switch (deviceOptions_.ResourceBindingTier) {\n    case D3D12_RESOURCE_BINDING_TIER_1:\n      tierName = \"Tier 1 (bounded descriptors required)\";\n      break;\n    case D3D12_RESOURCE_BINDING_TIER_2:\n      tierName = \"Tier 2 (unbounded arrays except samplers)\";\n      break;\n    case D3D12_RESOURCE_BINDING_TIER_3:\n      tierName = \"Tier 3 (fully unbounded)\";\n      break;\n    }\n    IGL_D3D12_LOG_VERBOSE(\"  Resource Binding Tier: %s\\n\", tierName);\n\n    // Log other relevant capabilities\n    IGL_D3D12_LOG_VERBOSE(\"  Standard Swizzle 64KB Supported: %s\\n\",\n                          deviceOptions_.StandardSwizzle64KBSupported ? \"Yes\" : \"No\");\n    IGL_D3D12_LOG_VERBOSE(\"  Cross-Node Sharing Tier: %d\\n\", deviceOptions_.CrossNodeSharingTier);\n    IGL_D3D12_LOG_VERBOSE(\"  Conservative Rasterization Tier: %d\\n\",\n                          deviceOptions_.ConservativeRasterizationTier);\n  } else {\n    IGL_LOG_ERROR(\"  Failed to query D3D12_FEATURE_D3D12_OPTIONS (HRESULT: 0x%08X)\\n\", hr);\n  }\n\n  // Query D3D12_FEATURE_D3D12_OPTIONS1 for root signature version\n  hr = device->CheckFeatureSupport(\n      D3D12_FEATURE_D3D12_OPTIONS1, &deviceOptions1_, sizeof(deviceOptions1_));\n\n  if (SUCCEEDED(hr)) {\n    IGL_D3D12_LOG_VERBOSE(\"  Wave Intrinsics Supported: %s\\n\",\n                          deviceOptions1_.WaveOps ? \"Yes\" : \"No\");\n    IGL_D3D12_LOG_VERBOSE(\"  Wave Lane Count Min: %u\\n\", deviceOptions1_.WaveLaneCountMin);\n    IGL_D3D12_LOG_VERBOSE(\"  Wave Lane Count Max: %u\\n\", deviceOptions1_.WaveLaneCountMax);\n    IGL_D3D12_LOG_VERBOSE(\"  Total Lane Count: %u\\n\", deviceOptions1_.TotalLaneCount);\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"  D3D12_FEATURE_D3D12_OPTIONS1 query failed (not critical)\\n\");\n  }\n\n  // The rest of the original validation logic lives in Device::getFeatureLimits()\n  // and related capability queries, so no additional checks are needed here.\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12DeviceCapabilities.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass D3D12Context;\n\nclass D3D12DeviceCapabilities {\n public:\n  void initialize(D3D12Context& ctx);\n\n  [[nodiscard]] const D3D12_FEATURE_DATA_D3D12_OPTIONS& getOptions() const {\n    return deviceOptions_;\n  }\n\n  [[nodiscard]] const D3D12_FEATURE_DATA_D3D12_OPTIONS1& getOptions1() const {\n    return deviceOptions1_;\n  }\n\n  [[nodiscard]] D3D12_RESOURCE_BINDING_TIER getResourceBindingTier() const {\n    return deviceOptions_.ResourceBindingTier;\n  }\n\n private:\n  void validateDeviceLimits(D3D12Context& ctx);\n\n  D3D12_FEATURE_DATA_D3D12_OPTIONS deviceOptions_ = {};\n  D3D12_FEATURE_DATA_D3D12_OPTIONS1 deviceOptions1_ = {};\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12FenceWaiter.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12FenceWaiter.h>\n\nnamespace igl::d3d12 {\n\nFenceWaiter::FenceWaiter(ID3D12Fence* fence, UINT64 targetValue) :\n  fence_(fence), targetValue_(targetValue) {\n  if (!fence_) {\n    IGL_LOG_ERROR(\"FenceWaiter: null fence provided\\n\");\n    setupErrorCode_ = Result::Code::ArgumentNull;\n    setupErrorMessage_ = \"Null fence provided to FenceWaiter\";\n    return;\n  }\n\n  event_ = CreateEvent(nullptr, FALSE, FALSE, nullptr);\n  if (!event_) {\n    const DWORD lastError = GetLastError();\n    IGL_LOG_ERROR(\"FenceWaiter: Failed to create event handle (LastError=0x%08X)\\n\", lastError);\n    setupErrorCode_ = Result::Code::InvalidOperation;\n    char buf[128];\n    snprintf(buf, sizeof(buf), \"CreateEvent failed (OS error 0x%08X)\", lastError);\n    setupErrorMessage_ = buf;\n    return;\n  }\n\n  HRESULT hr = fence_->SetEventOnCompletion(targetValue_, event_);\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"FenceWaiter: SetEventOnCompletion failed: 0x%08X\\n\", static_cast<unsigned>(hr));\n    CloseHandle(event_);\n    event_ = nullptr;\n    setupErrorCode_ = Result::Code::InvalidOperation;\n    char buf[128];\n    snprintf(buf,\n             sizeof(buf),\n             \"SetEventOnCompletion failed (HRESULT=0x%08X)\",\n             static_cast<unsigned>(hr));\n    setupErrorMessage_ = buf;\n    return;\n  }\n\n  setupSucceeded_ = true;\n}\n\nFenceWaiter::~FenceWaiter() {\n  if (event_) {\n    CloseHandle(event_);\n  }\n}\n\nbool FenceWaiter::isComplete() const {\n  return fence_ && fence_->GetCompletedValue() >= targetValue_;\n}\n\nResult FenceWaiter::wait(DWORD timeoutMs) {\n  // Check if setup succeeded (constructor completed event creation and SetEventOnCompletion)\n  if (!setupSucceeded_ || !event_) {\n    return Result(setupErrorCode_, setupErrorMessage_);\n  }\n\n  // D-003: Re-check fence after SetEventOnCompletion to avoid TOCTOU race\n  if (isComplete()) {\n    return Result(); // Already complete, no wait needed\n  }\n\n  DWORD waitResult = WaitForSingleObject(event_, timeoutMs);\n\n  if (waitResult == WAIT_OBJECT_0) {\n    // Verify fence actually reached target value\n    UINT64 completedValue = fence_->GetCompletedValue();\n    if (completedValue < targetValue_) {\n      IGL_LOG_ERROR(\"FenceWaiter: Wait returned but fence incomplete (expected=%llu, got=%llu)\\n\",\n                    targetValue_,\n                    completedValue);\n\n      // CRITICAL: This indicates a GPU/driver issue (event signaled but fence not updated)\n      // For INFINITE timeout, try bounded recovery; otherwise honor the timeout contract\n      if (timeoutMs == INFINITE) {\n        // Bounded spin as last resort for INFINITE waits only\n        const int maxSpins = 10000;\n        int spins = 0;\n        for (; spins < maxSpins && fence_->GetCompletedValue() < targetValue_; ++spins) {\n          Sleep(1);\n        }\n\n        if (fence_->GetCompletedValue() >= targetValue_) {\n          IGL_D3D12_LOG_VERBOSE(\"FenceWaiter: Fence completed after %d recovery spins\\n\", spins);\n          return Result(); // Success after recovery\n        }\n\n        IGL_LOG_ERROR(\"FenceWaiter: Fence still incomplete after %d bounded spins\\n\", maxSpins);\n      }\n\n      // Honor timeout contract: event signaled but fence incomplete = failure\n      return Result(Result::Code::RuntimeError,\n                    \"Fence incomplete after wait (possible GPU hang or driver issue)\");\n    }\n    return Result(); // Success\n  } else if (waitResult == WAIT_TIMEOUT) {\n    const UINT64 completedValue = fence_ ? fence_->GetCompletedValue() : 0;\n    IGL_LOG_ERROR(\"FenceWaiter: Timeout waiting for fence %llu (completed=%llu)\\n\",\n                  targetValue_,\n                  completedValue);\n    return Result(Result::Code::RuntimeError, \"Fence wait timed out (possible GPU hang)\");\n  } else {\n    const DWORD lastError = GetLastError();\n    IGL_LOG_ERROR(\n        \"FenceWaiter: Wait failed with result 0x%08X (LastError=0x%08X)\\n\", waitResult, lastError);\n    char buf[128];\n    snprintf(buf,\n             sizeof(buf),\n             \"WaitForSingleObject failed (result=0x%08X, OS error=0x%08X)\",\n             waitResult,\n             lastError);\n    return Result(Result::Code::RuntimeError, buf);\n  }\n}\n\nbool FenceWaiter::isTimeoutError(const Result& result) {\n  return !result.isOk() && result.message.find(\"timed out\") != std::string::npos;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12FenceWaiter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\n/**\n * @brief RAII helper for D3D12 fence waiting operations\n *\n * Manages event creation, SetEventOnCompletion, and proper cleanup.\n * Eliminates TOCTOU races by rechecking fence after SetEventOnCompletion.\n *\n * IMPORTANT: The fence pointer must remain valid for the lifetime of the FenceWaiter.\n * Typical usage is with fences owned by long-lived context objects.\n *\n * Usage:\n *   FenceWaiter waiter(fence, targetValue);\n *   Result result = waiter.wait(timeoutMs);\n *   if (!result.isOk()) {\n *     // Handle specific error (timeout, setup failure, etc.)\n *   }\n */\nclass FenceWaiter final {\n public:\n  FenceWaiter(ID3D12Fence* fence, UINT64 targetValue);\n  ~FenceWaiter();\n\n  // Delete copy/move to ensure single ownership of event handle\n  FenceWaiter(const FenceWaiter&) = delete;\n  FenceWaiter& operator=(const FenceWaiter&) = delete;\n  FenceWaiter(FenceWaiter&&) = delete;\n  FenceWaiter& operator=(FenceWaiter&&) = delete;\n\n  /**\n   * @brief Wait for fence to reach target value with timeout\n   * @param timeoutMs Timeout in milliseconds (INFINITE for no timeout)\n   * @return Result with specific error code and message on failure:\n   *         - ArgumentNull: Null fence provided to constructor\n   *         - InvalidOperation: Event creation or SetEventOnCompletion failed\n   *         - RuntimeError: Wait timed out (use isTimeoutError() to detect)\n   *         - RuntimeError: Wait failed or fence incomplete after event signaled\n   */\n  Result wait(DWORD timeoutMs = INFINITE);\n\n  /**\n   * @brief Check if fence already reached target without waiting\n   */\n  bool isComplete() const;\n\n  /**\n   * @brief Check if a Result represents a timeout error\n   * @param result The Result to check\n   * @return true if the result indicates a timeout, false otherwise\n   */\n  static bool isTimeoutError(const Result& result);\n\n private:\n  ID3D12Fence* fence_;\n  UINT64 targetValue_;\n  HANDLE event_ = nullptr;\n  bool setupSucceeded_ = false;\n  Result::Code setupErrorCode_ = Result::Code::Ok;\n  std::string setupErrorMessage_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12FrameManager.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12FrameManager.h>\n\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/D3D12FenceWaiter.h>\n\nnamespace igl::d3d12 {\n\nvoid FrameManager::advanceFrame(UINT64 currentFenceValue) {\n  // Calculate next frame index\n  const uint32_t bufferCount = context_.getSwapchainBufferCount();\n  const uint32_t nextFrameIndex = (context_.getCurrentFrameIndex() + 1) % bufferCount;\n\n  // STEP 1: Pipeline overload protection\n  waitForPipelineSync(currentFenceValue);\n\n  // STEP 2: Wait for next frame's resources to be available\n  if (!waitForFrame(nextFrameIndex)) {\n    IGL_LOG_ERROR(\"FrameManager: Skipping frame advancement due to fence wait failure\\n\");\n    return;\n  }\n\n  // STEP 3: Advance to next frame\n  context_.getCurrentFrameIndex() = nextFrameIndex;\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"FrameManager: Advanced to frame index %u\\n\", nextFrameIndex);\n#endif\n\n  // STEP 4: Reset allocator safely\n  resetAllocator(nextFrameIndex);\n\n  // STEP 5: Clear transient resources\n  clearTransientResources(nextFrameIndex);\n\n  // STEP 6: Reset descriptor counters\n  resetDescriptorCounters(nextFrameIndex);\n}\n\nvoid FrameManager::waitForPipelineSync(UINT64 currentFenceValue) {\n  auto* fence = context_.getFence();\n\n  // Ensure we don't have more frames in flight than swapchain buffers\n  const uint32_t bufferCount = context_.getSwapchainBufferCount();\n  const UINT64 minimumSafeFence =\n      (currentFenceValue >= bufferCount) ? (currentFenceValue - (bufferCount - 1)) : 0;\n\n  const UINT64 currentCompletedValue = fence->GetCompletedValue();\n  if (currentCompletedValue < minimumSafeFence) {\n#ifdef IGL_DEBUG\n    IGL_D3D12_LOG_VERBOSE(\n        \"FrameManager: SAFETY WAIT - Pipeline overload protection (completed=%llu, need=%llu)\\n\",\n        currentCompletedValue,\n        minimumSafeFence);\n#endif\n\n    FenceWaiter waiter(fence, minimumSafeFence);\n    Result waitResult = waiter.wait(INFINITE);\n    if (!waitResult.isOk()) {\n      IGL_LOG_ERROR(\n          \"FrameManager: CRITICAL - Pipeline safety wait failed: %s; continuing but overload \"\n          \"protection compromised\\n\",\n          waitResult.message.c_str());\n      // Continue anyway - this is a safety net, not a hard requirement\n      // But future work should consider aborting here as well\n    }\n#ifdef IGL_DEBUG\n    else {\n      IGL_D3D12_LOG_VERBOSE(\"FrameManager: Safety wait completed (fence now=%llu)\\n\",\n                            fence->GetCompletedValue());\n    }\n#endif\n  }\n}\n\nbool FrameManager::waitForFrame(uint32_t frameIndex) {\n  auto* fence = context_.getFence();\n  const UINT64 frameFence = context_.getFrameContexts()[frameIndex].fenceValue;\n\n  if (frameFence != 0 && fence->GetCompletedValue() < frameFence) {\n#ifdef IGL_DEBUG\n    IGL_D3D12_LOG_VERBOSE(\"FrameManager: Waiting for frame %u (fence=%llu, current=%llu)\\n\",\n                          frameIndex,\n                          frameFence,\n                          fence->GetCompletedValue());\n#endif\n\n    FenceWaiter waiter(fence, frameFence);\n\n    // Try with 5-second timeout first (handles window drag scenarios)\n    Result waitResult = waiter.wait(5000);\n    if (!waitResult.isOk()) {\n      // Check if it's a timeout or other error\n      if (FenceWaiter::isTimeoutError(waitResult)) {\n        IGL_LOG_ERROR(\n            \"FrameManager: Wait for frame %u fence %llu timed out after 5s; forcing infinite \"\n            \"wait\\n\",\n            frameIndex,\n            frameFence);\n      } else {\n        IGL_LOG_ERROR(\n            \"FrameManager: Wait for frame %u fence %llu failed: %s; forcing infinite wait\\n\",\n            frameIndex,\n            frameFence,\n            waitResult.message.c_str());\n      }\n      // Fall back to infinite wait\n      waitResult = waiter.wait(INFINITE);\n      if (!waitResult.isOk()) {\n        IGL_LOG_ERROR(\n            \"FrameManager: CRITICAL - Infinite wait for frame %u failed: %s; aborting frame \"\n            \"advancement\\n\",\n            frameIndex,\n            waitResult.message.c_str());\n        return false; // Abort frame advancement - unsafe to proceed\n      }\n    }\n\n#ifdef IGL_DEBUG\n    IGL_D3D12_LOG_VERBOSE(\"FrameManager: Frame %u resources now available (completed=%llu)\\n\",\n                          frameIndex,\n                          fence->GetCompletedValue());\n#endif\n  } else {\n#ifdef IGL_DEBUG\n    IGL_D3D12_LOG_VERBOSE(\n        \"FrameManager: Frame %u resources already available (fence=%llu, completed=%llu)\\n\",\n        frameIndex,\n        frameFence,\n        fence->GetCompletedValue());\n#endif\n  }\n  return true;\n}\n\nvoid FrameManager::resetAllocator(uint32_t frameIndex) {\n  auto* fence = context_.getFence();\n  auto& frame = context_.getFrameContexts()[frameIndex];\n  auto* allocator = frame.allocator.Get();\n\n  const UINT64 allocatorFence = frame.maxAllocatorFence;\n\n  if (allocatorFence == 0) {\n    // First time using this allocator\n    HRESULT hr = allocator->Reset();\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\"FrameManager: Failed to reset frame %u allocator: 0x%08X\\n\",\n                    frameIndex,\n                    static_cast<unsigned>(hr));\n    }\n  } else {\n    // Verify GPU completed all command lists using this allocator\n    const UINT64 completedValue = fence->GetCompletedValue();\n\n    if (completedValue < allocatorFence) {\n      IGL_LOG_ERROR(\n          \"FrameManager: ALLOCATOR SYNC ISSUE - GPU not done with all command lists \"\n          \"(completed=%llu, need=%llu, cmdBufCount=%u). Waiting...\\n\",\n          completedValue,\n          allocatorFence,\n          frame.commandBufferCount);\n\n      FenceWaiter waiter(fence, allocatorFence);\n      Result waitResult = waiter.wait(INFINITE);\n      if (!waitResult.isOk()) {\n        IGL_LOG_ERROR(\n            \"FrameManager: CRITICAL - Allocator wait failed: %s; skipping unsafe allocator reset \"\n            \"for frame %u\\n\",\n            waitResult.message.c_str(),\n            frameIndex);\n        // Do not reset allocator if GPU hasn't completed - would cause sync violations\n        return;\n      }\n      IGL_D3D12_LOG_VERBOSE(\"FrameManager: Allocator wait completed (fence now=%llu)\\n\",\n                            fence->GetCompletedValue());\n    }\n\n    // Reset allocator (safe now - GPU has completed all command lists)\n    HRESULT hr = allocator->Reset();\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\n          \"FrameManager: Failed to reset frame %u allocator: 0x%08X \"\n          \"(maxFence=%llu, completed=%llu, cmdBufCount=%u)\\n\",\n          frameIndex,\n          static_cast<unsigned>(hr),\n          allocatorFence,\n          fence->GetCompletedValue(),\n          frame.commandBufferCount);\n    } else {\n#ifdef IGL_DEBUG\n      IGL_D3D12_LOG_VERBOSE(\n          \"FrameManager: Reset frame %u allocator (waited for %u command buffers, maxFence=%llu)\\n\",\n          frameIndex,\n          frame.commandBufferCount,\n          allocatorFence);\n#endif\n    }\n\n#ifdef _DEBUG\n    if (SUCCEEDED(hr)) {\n      const UINT64 currentCompleted = fence->GetCompletedValue();\n      IGL_DEBUG_ASSERT(currentCompleted >= allocatorFence,\n                       \"Allocator reset before GPU completed all command lists!\");\n    }\n#endif\n  }\n\n  // Reset frame tracking\n  frame.fenceValue = 0;\n  frame.maxAllocatorFence = 0;\n  frame.commandBufferCount = 0;\n}\n\nvoid FrameManager::clearTransientResources(uint32_t frameIndex) {\n  auto& frame = context_.getFrameContexts()[frameIndex];\n\n  if (!frame.transientBuffers.empty()) {\n#ifdef IGL_DEBUG\n    IGL_D3D12_LOG_VERBOSE(\n        \"FrameManager: Clearing %zu transient buffers from frame %u (high-water=%zu)\\n\",\n        frame.transientBuffers.size(),\n        frameIndex,\n        frame.transientBuffersHighWater);\n#endif\n    frame.transientBuffers.clear();\n  }\n\n  if (!frame.transientResources.empty()) {\n#ifdef IGL_DEBUG\n    IGL_D3D12_LOG_VERBOSE(\n        \"FrameManager: Releasing %zu transient D3D resources from frame %u (high-water=%zu)\\n\",\n        frame.transientResources.size(),\n        frameIndex,\n        frame.transientResourcesHighWater);\n#endif\n    frame.transientResources.clear();\n  }\n}\n\nvoid FrameManager::resetDescriptorCounters(uint32_t frameIndex) {\n  auto& frame = context_.getFrameContexts()[frameIndex];\n\n  const uint32_t cbvSrvUavUsage = frame.nextCbvSrvUavDescriptor;\n  const uint32_t samplerUsage = frame.nextSamplerDescriptor;\n  const uint32_t peakCbvSrvUav = frame.peakCbvSrvUavUsage;\n  const uint32_t peakSampler = frame.peakSamplerUsage;\n\n  if (cbvSrvUavUsage > 0 || samplerUsage > 0) {\n#ifdef IGL_DEBUG\n    const float cbvSrvUavPercent =\n        (static_cast<float>(cbvSrvUavUsage) / kCbvSrvUavHeapSize) * 100.0f;\n    const float samplerPercent = (static_cast<float>(samplerUsage) / kSamplerHeapSize) * 100.0f;\n    const float peakCbvSrvUavPercent =\n        (static_cast<float>(peakCbvSrvUav) / kCbvSrvUavHeapSize) * 100.0f;\n    const float peakSamplerPercent = (static_cast<float>(peakSampler) / kSamplerHeapSize) * 100.0f;\n\n    IGL_D3D12_LOG_VERBOSE(\n        \"FrameManager: Frame %u descriptor usage:\\n\"\n        \"  CBV/SRV/UAV: final=%u/%u (%.1f%%), peak=%u/%u (%.1f%%)\\n\"\n        \"  Samplers:    final=%u/%u (%.1f%%), peak=%u/%u (%.1f%%)\\n\",\n        frameIndex,\n        cbvSrvUavUsage,\n        kCbvSrvUavHeapSize,\n        cbvSrvUavPercent,\n        peakCbvSrvUav,\n        kCbvSrvUavHeapSize,\n        peakCbvSrvUavPercent,\n        samplerUsage,\n        kSamplerHeapSize,\n        samplerPercent,\n        peakSampler,\n        kSamplerHeapSize,\n        peakSamplerPercent);\n#endif\n  }\n\n  // Reset counters\n  frame.nextCbvSrvUavDescriptor = 0;\n  frame.nextSamplerDescriptor = 0;\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"FrameManager: Reset descriptor counters for frame %u to 0\\n\", frameIndex);\n#endif\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12FrameManager.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass D3D12Context;\n\n/**\n * @brief Manages frame advancement, fence waiting, and resource cleanup\n *\n * Centralizes the complex logic for:\n * - Waiting for next frame's resources to become available\n * - Pipeline overload protection (ensuring max frames in flight)\n * - Safe command allocator reset after GPU completion\n * - Transient resource cleanup\n * - Descriptor heap reset\n */\nclass FrameManager final {\n public:\n  explicit FrameManager(D3D12Context& context) : context_(context) {}\n\n  /**\n   * @brief Advance to next frame with proper synchronization\n   *\n   * Handles:\n   * 1. Calculate next frame index\n   * 2. Wait for pipeline overload protection\n   * 3. Wait for next frame's resources\n   * 4. Update frame index\n   * 5. Reset allocator safely\n   * 6. Clear transient resources\n   * 7. Reset descriptor counters\n   *\n   * @param currentFenceValue The fence value just signaled\n   */\n  void advanceFrame(UINT64 currentFenceValue);\n\n private:\n  /**\n   * @brief Wait for pipeline to avoid overload (max frames in flight)\n   */\n  void waitForPipelineSync(UINT64 currentFenceValue);\n\n  /**\n   * @brief Wait for specific frame's resources to become available\n   * @return true if wait succeeded, false if catastrophic wait failure\n   */\n  bool waitForFrame(uint32_t frameIndex);\n\n  /**\n   * @brief Safely reset command allocator after GPU completion\n   */\n  void resetAllocator(uint32_t frameIndex);\n\n  /**\n   * @brief Clear transient resources from completed frame\n   */\n  void clearTransientResources(uint32_t frameIndex);\n\n  /**\n   * @brief Log and reset descriptor usage counters\n   */\n  void resetDescriptorCounters(uint32_t frameIndex);\n\n  D3D12Context& context_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12Headers.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#ifndef IGL_D3D12_D3D12HEADERS_H\n#define IGL_D3D12_D3D12HEADERS_H\n\n// Windows headers\n#ifndef NOMINMAX\n#define NOMINMAX\n#endif\n// Don't use WIN32_LEAN_AND_MEAN - it excludes wrl/client.h\n#include <windows.h>\n\n// DirectX 12 headers\n#include <d3d12.h>\n#include <dxgi1_6.h>\n\n// DirectX Shader Compiler\n#include <d3dcompiler.h> // For D3DCompile (legacy HLSL compiler)\n#include <dxcapi.h>\n\n// D3DX12 helper library (header-only)\n// Disable buggy helper classes that have preprocessor issues or require newer SDK\n#define D3DX12_NO_STATE_OBJECT_HELPERS\n#define D3DX12_NO_CHECK_FEATURE_SUPPORT_CLASS\n\n// Manually include only the d3dx12 headers we need (excluding incompatible ones)\n// These headers are vendored from Microsoft's DirectX-Headers repository\n#include <d3d12.h>\n#if defined(IGL_CMAKE_BUILD)\n#include <d3dx12_barriers.h>\n#include <d3dx12_core.h>\n#include <d3dx12_default.h>\n#include <d3dx12_pipeline_state_stream.h>\n#include <d3dx12_render_pass.h>\n#include <d3dx12_root_signature.h>\n#else\n#include <d3dx12/d3dx12_barriers.h>\n#include <d3dx12/d3dx12_core.h>\n#include <d3dx12/d3dx12_default.h>\n#include <d3dx12/d3dx12_pipeline_state_stream.h>\n#include <d3dx12/d3dx12_render_pass.h>\n// Excluded: d3dx12_resource_helpers.h (requires property_format_table.h which needs newer SDK)\n// Excluded: d3dx12_property_format_table.h (requires newer SDK)\n#include <d3dx12/d3dx12_root_signature.h>\n#endif // IGL_CMAKE_BUILD\n\n// ComPtr for COM object management\n// IGL's minimal ComPtr-like smart pointer implementing the subset of Microsoft::WRL::ComPtr\n// used by the D3D12 backend. We keep it custom to avoid preprocessor issues with <wrl/client.h>.\n//\n// WARNING: Do not include <wrl/client.h> before this header in the same translation unit.\n// Use igl::d3d12::ComPtr instead of Microsoft::WRL::ComPtr throughout the D3D12 backend.\n// (Including <wrl/client.h> after this header is technically safe but unsupported.)\n//\n// Supported operations: Get, GetAddressOf, ReleaseAndGetAddressOf, Reset, Attach, Detach,\n// As<U>, TryAs<U>, CopyTo, comparison operators, bool conversion, move/copy semantics.\n// Operations NOT implemented: ComPtrRef, operator&, CopyTo(REFIID, void**), and other WRL\n// internals.\n\n// Compile-time guard: fail if <wrl/client.h> was already included before this header\n#if defined(__WRL_CLIENT_H__) || defined(_WRL_CLIENT_H_)\n#error \\\n    \"D3D12Headers.h must be included before <wrl/client.h>. The D3D12 backend uses igl::d3d12::ComPtr exclusively.\"\n#endif\n\nnamespace igl {\nnamespace d3d12 {\ntemplate<typename T>\nclass ComPtr {\n public:\n  ComPtr() noexcept : ptr_(nullptr) {}\n  ComPtr(T* ptr) noexcept : ptr_(ptr) {\n    if (ptr_)\n      ptr_->AddRef();\n  }\n\n  // Copy constructor - AddRef the pointer\n  ComPtr(const ComPtr& other) noexcept : ptr_(other.ptr_) {\n    if (ptr_)\n      ptr_->AddRef();\n  }\n\n  // Copy assignment - AddRef new, Release old\n  ComPtr& operator=(const ComPtr& other) noexcept {\n    if (this != &other) {\n      if (other.ptr_)\n        other.ptr_->AddRef();\n      if (ptr_)\n        ptr_->Release();\n      ptr_ = other.ptr_;\n    }\n    return *this;\n  }\n\n  // Move constructor\n  ComPtr(ComPtr&& other) noexcept : ptr_(other.ptr_) {\n    other.ptr_ = nullptr;\n  }\n\n  // Move assignment\n  ComPtr& operator=(ComPtr&& other) noexcept {\n    if (this != &other) {\n      if (ptr_)\n        ptr_->Release();\n      ptr_ = other.ptr_;\n      other.ptr_ = nullptr;\n    }\n    return *this;\n  }\n\n  // Destructor\n  ~ComPtr() {\n    if (ptr_)\n      ptr_->Release();\n  }\n\n  // Accessor methods\n  T* Get() const noexcept {\n    return ptr_;\n  }\n  T** GetAddressOf() noexcept {\n    return &ptr_;\n  }\n  T* operator->() const noexcept {\n    return ptr_;\n  }\n\n  // Dereference operator (caller must ensure ptr_ != nullptr)\n  T& operator*() const noexcept {\n    return *ptr_;\n  }\n\n  // Comparison operators (operator< compares raw addresses for use in containers)\n  bool operator==(const ComPtr& other) const noexcept {\n    return ptr_ == other.ptr_;\n  }\n\n  bool operator!=(const ComPtr& other) const noexcept {\n    return ptr_ != other.ptr_;\n  }\n\n  bool operator<(const ComPtr& other) const noexcept {\n    return ptr_ < other.ptr_;\n  }\n\n  bool operator==(T* other) const noexcept {\n    return ptr_ == other;\n  }\n\n  bool operator!=(T* other) const noexcept {\n    return ptr_ != other;\n  }\n\n  // Boolean conversion for nullptr checks\n  explicit operator bool() const noexcept {\n    return ptr_ != nullptr;\n  }\n\n  // Reset to release current pointer\n  void Reset() noexcept {\n    if (ptr_) {\n      ptr_->Release();\n      ptr_ = nullptr;\n    }\n  }\n\n  // Attach a raw pointer without AddRef\n  void Attach(T* ptr) noexcept {\n    if (ptr_) {\n      ptr_->Release();\n    }\n    ptr_ = ptr;\n  }\n\n  // Detach and return raw pointer without Release\n  T* Detach() noexcept {\n    T* temp = ptr_;\n    ptr_ = nullptr;\n    return temp;\n  }\n\n  // ReleaseAndGetAddressOf - release current and return address for output\n  T** ReleaseAndGetAddressOf() noexcept {\n    Reset();\n    return &ptr_;\n  }\n\n  // As<U>() - QueryInterface to another interface type\n  // Note: Unlike WRL's ComPtr::As, this implementation adds null-safety:\n  // - Returns E_POINTER if 'other' is null\n  // - Returns E_FAIL and resets 'other' if this->ptr_ is null (no object to query)\n  // - Otherwise returns HRESULT from QueryInterface (S_OK or E_NOINTERFACE typically)\n  // WRL assumes non-null and relies only on QueryInterface return value.\n  // Rationale: Explicit null checks give more predictable behavior when pointers may be null.\n  // Callers should treat any non-S_OK result uniformly as \"interface query failed\".\n  template<typename U>\n  HRESULT As(ComPtr<U>* other) const noexcept {\n    if (!other) {\n      return E_POINTER;\n    }\n    if (!ptr_) {\n      other->Reset();\n      return E_FAIL; // No object to query\n    }\n    return ptr_->QueryInterface(__uuidof(U),\n                                reinterpret_cast<void**>(other->ReleaseAndGetAddressOf()));\n  }\n\n  // TryAs<U>() - QueryInterface convenience method that returns ComPtr<U>\n  // WARNING: Silently drops HRESULT; returns empty ComPtr on failure.\n  // For error-sensitive code, prefer the HRESULT-returning As(ComPtr<U>* other) overload.\n  // Use case: Optional interface queries where failure is expected/acceptable and doesn't need\n  // diagnosis. In code paths that return igl::Result or log errors, prefer As() so you can\n  // propagate the HRESULT.\n  template<typename U>\n  ComPtr<U> TryAs() const noexcept {\n    ComPtr<U> result;\n    if (ptr_) {\n      ptr_->QueryInterface(__uuidof(U), reinterpret_cast<void**>(result.ReleaseAndGetAddressOf()));\n    }\n    return result;\n  }\n\n  // CopyTo - Copy pointer with AddRef\n  // Note: Returns S_OK even if ptr_ is null; *other will be set to nullptr (matches WRL)\n  HRESULT CopyTo(T** other) const noexcept {\n    if (!other) {\n      return E_POINTER;\n    }\n    *other = ptr_;\n    if (ptr_) {\n      ptr_->AddRef();\n    }\n    return S_OK;\n  }\n\n private:\n  T* ptr_;\n};\n} // namespace d3d12\n} // namespace igl\n\n// For convenience in D3D12 implementation files, you may add a local using declaration:\n//   namespace { template<typename T> using ComPtr = igl::d3d12::ComPtr<T>; }\n// This reduces verbosity without polluting the global or igl::d3d12 namespace.\n\nnamespace Microsoft {\nnamespace WRL {\n// DO NOT define ComPtr here - it conflicts with <wrl/client.h>\n// All D3D12 code should use igl::d3d12::ComPtr directly\n} // namespace WRL\n} // namespace Microsoft\n\n// Note: Library linking is handled by CMake (see src/igl/d3d12/CMakeLists.txt)\n// Required libraries: d3d12.lib, dxgi.lib, dxguid.lib, dxcompiler.lib, d3dcompiler.lib\n\n#endif // IGL_D3D12_D3D12HEADERS_H\n"
  },
  {
    "path": "src/igl/d3d12/D3D12ImmediateCommands.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12ImmediateCommands.h>\n\n#include <igl/Assert.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12FenceWaiter.h>\n\nnamespace igl::d3d12 {\n\nD3D12ImmediateCommands::D3D12ImmediateCommands(ID3D12Device* device,\n                                               ID3D12CommandQueue* queue,\n                                               ID3D12Fence* fence,\n                                               IFenceProvider* fenceProvider) :\n  device_(device), queue_(queue), fence_(fence), fenceProvider_(fenceProvider) {\n  IGL_DEBUG_ASSERT(device_);\n  IGL_DEBUG_ASSERT(queue_);\n  IGL_DEBUG_ASSERT(fence_);\n  IGL_DEBUG_ASSERT(fenceProvider_);\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12ImmediateCommands: Initialized (using shared fence timeline)\\n\");\n}\n\nD3D12ImmediateCommands::~D3D12ImmediateCommands() {\n  // Wait for all in-flight operations to complete\n  if (fence_) {\n    for (const auto& entry : inFlightAllocators_) {\n      if (fence_->GetCompletedValue() < entry.fenceValue) {\n        FenceWaiter waiter(fence_, entry.fenceValue);\n        Result waitResult = waiter.wait();\n        if (!waitResult.isOk()) {\n          IGL_LOG_ERROR(\n              \"D3D12ImmediateCommands::~D3D12ImmediateCommands() - Fence wait failed during \"\n              \"cleanup: %s\\n\",\n              waitResult.message.c_str());\n        }\n      }\n    }\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12ImmediateCommands: Destroyed\\n\");\n}\n\nID3D12GraphicsCommandList* D3D12ImmediateCommands::begin(Result* outResult) {\n  std::lock_guard<std::mutex> lock(poolMutex_);\n\n  // Reclaim completed allocators first\n  reclaimCompletedAllocators();\n\n  // Get or create an allocator\n  Result result = getOrCreateAllocator(&currentAllocator_);\n  if (!result.isOk()) {\n    Result::setResult(outResult, result);\n    return nullptr;\n  }\n\n  // Reset the allocator for reuse\n  HRESULT hr = currentAllocator_->Reset();\n  if (FAILED(hr)) {\n    Result::setResult(outResult,\n                      Result{Result::Code::RuntimeError, \"Failed to reset command allocator\"});\n    return nullptr;\n  }\n\n  // Create or reset command list\n  if (!cmdList_.Get()) {\n    hr = device_->CreateCommandList(0,\n                                    D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                    currentAllocator_.Get(),\n                                    nullptr,\n                                    IID_PPV_ARGS(cmdList_.GetAddressOf()));\n    if (FAILED(hr)) {\n      Result::setResult(outResult,\n                        Result{Result::Code::RuntimeError, \"Failed to create command list\"});\n      return nullptr;\n    }\n  } else {\n    hr = cmdList_->Reset(currentAllocator_.Get(), nullptr);\n    if (FAILED(hr)) {\n      Result::setResult(outResult,\n                        Result{Result::Code::RuntimeError, \"Failed to reset command list\"});\n      return nullptr;\n    }\n  }\n\n  Result::setOk(outResult);\n  return cmdList_.Get();\n}\n\nuint64_t D3D12ImmediateCommands::submit(bool wait, Result* outResult) {\n  if (!cmdList_.Get()) {\n    Result::setResult(outResult, Result{Result::Code::RuntimeError, \"No active command list\"});\n    return 0;\n  }\n\n  // Close the command list\n  HRESULT hr = cmdList_->Close();\n  if (FAILED(hr)) {\n    Result::setResult(outResult,\n                      Result{Result::Code::RuntimeError, \"Failed to close command list\"});\n    return 0;\n  }\n\n  // Execute command list\n  ID3D12CommandList* lists[] = {cmdList_.Get()};\n  queue_->ExecuteCommandLists(1, lists);\n\n  // Get next fence value from shared timeline\n  const uint64_t fenceValue = fenceProvider_->getNextFenceValue();\n\n  // Signal fence on shared timeline\n  hr = queue_->Signal(fence_, fenceValue);\n  if (FAILED(hr)) {\n    Result::setResult(outResult, Result{Result::Code::RuntimeError, \"Failed to signal fence\"});\n    return 0;\n  }\n\n  // Move current allocator to in-flight list\n  {\n    std::lock_guard<std::mutex> lock(poolMutex_);\n    inFlightAllocators_.push_back({currentAllocator_, fenceValue});\n    currentAllocator_.Reset();\n  }\n\n  // Wait if requested\n  if (wait) {\n    Result waitResult = waitForFence(fenceValue);\n    if (!waitResult.isOk()) {\n      Result::setResult(outResult, waitResult);\n      return 0; // Return 0 to signal failure\n    }\n  }\n\n  Result::setOk(outResult);\n  return fenceValue;\n}\n\nbool D3D12ImmediateCommands::isComplete(uint64_t fenceValue) const {\n  if (!fence_) {\n    return false;\n  }\n  return fence_->GetCompletedValue() >= fenceValue;\n}\n\nResult D3D12ImmediateCommands::waitForFence(uint64_t fenceValue) {\n  if (!fence_) {\n    return Result{Result::Code::RuntimeError, \"Fence is null\"};\n  }\n\n  if (isComplete(fenceValue)) {\n    return Result{};\n  }\n\n  FenceWaiter waiter(fence_, fenceValue);\n  return waiter.wait(); // Directly return the detailed Result\n}\n\nvoid D3D12ImmediateCommands::reclaimCompletedAllocators() {\n  // Note: Internal helper called by begin() with poolMutex_ already held\n  if (!fence_) {\n    return;\n  }\n\n  const uint64_t completedValue = fence_->GetCompletedValue();\n\n  // Move completed allocators from in-flight to available\n  auto it = inFlightAllocators_.begin();\n  while (it != inFlightAllocators_.end()) {\n    if (it->fenceValue <= completedValue) {\n      availableAllocators_.push_back({it->allocator, 0});\n      it = inFlightAllocators_.erase(it);\n    } else {\n      ++it;\n    }\n  }\n}\n\nResult D3D12ImmediateCommands::getOrCreateAllocator(\n    igl::d3d12::ComPtr<ID3D12CommandAllocator>* outAllocator) {\n  // Try to reuse an available allocator\n  if (!availableAllocators_.empty()) {\n    *outAllocator = availableAllocators_.back().allocator;\n    availableAllocators_.pop_back();\n    return Result{};\n  }\n\n  // Create new allocator\n  HRESULT hr = device_->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                               IID_PPV_ARGS(outAllocator->GetAddressOf()));\n\n  if (FAILED(hr)) {\n    return Result{Result::Code::RuntimeError, \"Failed to create command allocator\"};\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12ImmediateCommands: Created new command allocator (pool size: %zu)\\n\",\n                        availableAllocators_.size() + inFlightAllocators_.size() + 1);\n\n  return Result{};\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12ImmediateCommands.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <mutex>\n#include <vector>\n#include <igl/Common.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Headers.h>\n\nnamespace igl::d3d12 {\n\n/**\n * @brief Interface for obtaining fence values from shared timeline\n *\n * This interface allows D3D12ImmediateCommands to participate in the\n * device's shared fence timeline without managing its own counter.\n */\nclass IFenceProvider {\n public:\n  virtual ~IFenceProvider() = default;\n\n  /**\n   * @brief Get the next fence value from the shared timeline\n   * @return Monotonically increasing fence value\n   */\n  virtual uint64_t getNextFenceValue() = 0;\n};\n\n/**\n * @brief Centralized management of immediate copy operations\n *\n * Provides a pooled command allocator/list infrastructure for transient\n * upload/readback operations, eliminating per-operation allocator creation\n * and redundant GPU synchronization.\n *\n * Thread-safety: This class is NOT thread-safe for concurrent begin()/submit().\n * Only one begin()/submit() sequence may be active at a time. Multiple threads\n * calling begin() concurrently will corrupt the shared command list.\n *\n * The allocator pool (reclaimCompletedAllocators) is internally synchronized.\n *\n * Inspired by Vulkan's VulkanImmediateCommands pattern.\n */\nclass D3D12ImmediateCommands {\n public:\n  /**\n   * @brief Initialize the immediate commands infrastructure\n   * @param device D3D12 device for resource creation\n   * @param queue Command queue for submission\n   * @param fence Fence for completion tracking (shared with device)\n   * @param fenceProvider Provider for next fence values from shared timeline\n   */\n  D3D12ImmediateCommands(ID3D12Device* device,\n                         ID3D12CommandQueue* queue,\n                         ID3D12Fence* fence,\n                         IFenceProvider* fenceProvider);\n\n  ~D3D12ImmediateCommands();\n\n  /**\n   * @brief Get command list for immediate copy operation\n   *\n   * Returns a ready-to-use command list from the pool. The command list\n   * is already reset and ready for recording.\n   *\n   * @param outResult Optional result for error reporting\n   * @return Command list ready for recording, or nullptr on failure\n   */\n  [[nodiscard]] ID3D12GraphicsCommandList* begin(Result* outResult = nullptr);\n\n  /**\n   * @brief Submit command list and optionally wait for completion\n   *\n   * Closes, submits, and signals the fence. If wait=true, blocks until\n   * GPU completes the work.\n   *\n   * @param wait If true, block until GPU completes\n   * @param outResult Optional result for error reporting\n   * @return Fence value that will signal when work completes (0 on failure)\n   */\n  [[nodiscard]] uint64_t submit(bool wait, Result* outResult = nullptr);\n\n  /**\n   * @brief Check if a fence value has completed\n   * @param fenceValue Fence value to check\n   * @return true if GPU has completed this fence value\n   */\n  [[nodiscard]] bool isComplete(uint64_t fenceValue) const;\n\n  /**\n   * @brief Wait for a specific fence value to complete\n   * @param fenceValue Fence value to wait for\n   * @return Result indicating success or failure\n   */\n  [[nodiscard]] Result waitForFence(uint64_t fenceValue);\n\n private:\n  /**\n   * @brief Reclaim completed command allocators back to pool\n   *\n   * Internal method called during begin() to recycle allocators.\n   * Must be called with poolMutex_ held.\n   */\n  void reclaimCompletedAllocators();\n  struct AllocatorEntry {\n    igl::d3d12::ComPtr<ID3D12CommandAllocator> allocator;\n    uint64_t fenceValue = 0; // Fence value when this allocator was last used\n  };\n\n  ID3D12Device* device_ = nullptr;\n  ID3D12CommandQueue* queue_ = nullptr;\n  ID3D12Fence* fence_ = nullptr; // Shared fence (owned by Device)\n  IFenceProvider* fenceProvider_ = nullptr; // Provides fence values from shared timeline\n\n  // Current command list for recording\n  igl::d3d12::ComPtr<ID3D12GraphicsCommandList> cmdList_;\n\n  // Current allocator being used\n  igl::d3d12::ComPtr<ID3D12CommandAllocator> currentAllocator_;\n\n  // Pool of available allocators\n  std::vector<AllocatorEntry> availableAllocators_;\n\n  // Allocators in flight (waiting for GPU)\n  std::vector<AllocatorEntry> inFlightAllocators_;\n\n  // Mutex for thread-safe allocator pool access\n  std::mutex poolMutex_;\n\n  // Get or create an allocator from the pool\n  [[nodiscard]] Result getOrCreateAllocator(\n      igl::d3d12::ComPtr<ID3D12CommandAllocator>* outAllocator);\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12PipelineBuilder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12PipelineBuilder.h>\n\n#include <igl/d3d12/D3D12Context.h>\n\nnamespace igl::d3d12 {\n\nnamespace {\n\n// Helper function to calculate root signature size in DWORDs\nuint32_t getRootSignatureDwordSize(const D3D12_ROOT_SIGNATURE_DESC& desc) {\n  uint32_t totalSize = 0;\n\n  for (uint32_t i = 0; i < desc.NumParameters; ++i) {\n    const auto& param = desc.pParameters[i];\n\n    switch (param.ParameterType) {\n    case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS:\n      totalSize += param.Constants.Num32BitValues;\n      break;\n    case D3D12_ROOT_PARAMETER_TYPE_CBV:\n    case D3D12_ROOT_PARAMETER_TYPE_SRV:\n    case D3D12_ROOT_PARAMETER_TYPE_UAV:\n      totalSize += 2; // Root descriptors cost 2 DWORDs\n      break;\n    case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE:\n      totalSize += 1; // Descriptor tables cost 1 DWORD\n      break;\n    }\n  }\n\n  return totalSize;\n}\n\n// Helper to convert IGL blend factor to D3D12\nD3D12_BLEND toD3D12Blend(BlendFactor f) {\n  switch (f) {\n  case BlendFactor::Zero:\n    return D3D12_BLEND_ZERO;\n  case BlendFactor::One:\n    return D3D12_BLEND_ONE;\n  case BlendFactor::SrcColor:\n    return D3D12_BLEND_SRC_COLOR;\n  case BlendFactor::OneMinusSrcColor:\n    return D3D12_BLEND_INV_SRC_COLOR;\n  case BlendFactor::SrcAlpha:\n    return D3D12_BLEND_SRC_ALPHA;\n  case BlendFactor::OneMinusSrcAlpha:\n    return D3D12_BLEND_INV_SRC_ALPHA;\n  case BlendFactor::DstColor:\n    return D3D12_BLEND_DEST_COLOR;\n  case BlendFactor::OneMinusDstColor:\n    return D3D12_BLEND_INV_DEST_COLOR;\n  case BlendFactor::DstAlpha:\n    return D3D12_BLEND_DEST_ALPHA;\n  case BlendFactor::OneMinusDstAlpha:\n    return D3D12_BLEND_INV_DEST_ALPHA;\n  case BlendFactor::SrcAlphaSaturated:\n    return D3D12_BLEND_SRC_ALPHA_SAT;\n  case BlendFactor::BlendColor:\n    return D3D12_BLEND_BLEND_FACTOR;\n  case BlendFactor::OneMinusBlendColor:\n    return D3D12_BLEND_INV_BLEND_FACTOR;\n  case BlendFactor::BlendAlpha:\n    return D3D12_BLEND_BLEND_FACTOR;\n  case BlendFactor::OneMinusBlendAlpha:\n    return D3D12_BLEND_INV_BLEND_FACTOR;\n  case BlendFactor::Src1Color:\n    return D3D12_BLEND_SRC1_COLOR;\n  case BlendFactor::OneMinusSrc1Color:\n    return D3D12_BLEND_INV_SRC1_COLOR;\n  case BlendFactor::Src1Alpha:\n    return D3D12_BLEND_SRC1_ALPHA;\n  case BlendFactor::OneMinusSrc1Alpha:\n    return D3D12_BLEND_INV_SRC1_ALPHA;\n  default:\n    return D3D12_BLEND_ONE;\n  }\n}\n\n// Helper to convert IGL blend operation to D3D12\nD3D12_BLEND_OP toD3D12BlendOp(BlendOp op) {\n  switch (op) {\n  case BlendOp::Add:\n    return D3D12_BLEND_OP_ADD;\n  case BlendOp::Subtract:\n    return D3D12_BLEND_OP_SUBTRACT;\n  case BlendOp::ReverseSubtract:\n    return D3D12_BLEND_OP_REV_SUBTRACT;\n  case BlendOp::Min:\n    return D3D12_BLEND_OP_MIN;\n  case BlendOp::Max:\n    return D3D12_BLEND_OP_MAX;\n  default:\n    return D3D12_BLEND_OP_ADD;\n  }\n}\n\n} // anonymous namespace\n\n//=============================================================================\n// D3D12GraphicsPipelineBuilder\n//=============================================================================\n\nD3D12GraphicsPipelineBuilder::D3D12GraphicsPipelineBuilder() {\n  // Zero-initialize the descriptor\n  psoDesc_ = {};\n\n  // Set sensible defaults for rasterizer state\n  psoDesc_.RasterizerState.FillMode = D3D12_FILL_MODE_SOLID;\n  psoDesc_.RasterizerState.CullMode = D3D12_CULL_MODE_BACK;\n  psoDesc_.RasterizerState.FrontCounterClockwise = FALSE;\n  psoDesc_.RasterizerState.DepthBias = 0;\n  psoDesc_.RasterizerState.DepthBiasClamp = 0.0f;\n  psoDesc_.RasterizerState.SlopeScaledDepthBias = 0.0f;\n  psoDesc_.RasterizerState.DepthClipEnable = TRUE;\n  psoDesc_.RasterizerState.MultisampleEnable = FALSE;\n  psoDesc_.RasterizerState.AntialiasedLineEnable = FALSE;\n  psoDesc_.RasterizerState.ForcedSampleCount = 0;\n  psoDesc_.RasterizerState.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;\n\n  // Set sensible defaults for blend state\n  psoDesc_.BlendState.AlphaToCoverageEnable = FALSE;\n  psoDesc_.BlendState.IndependentBlendEnable = FALSE;\n  for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) {\n    psoDesc_.BlendState.RenderTarget[i].BlendEnable = FALSE;\n    psoDesc_.BlendState.RenderTarget[i].LogicOpEnable = FALSE;\n    psoDesc_.BlendState.RenderTarget[i].SrcBlend = D3D12_BLEND_ONE;\n    psoDesc_.BlendState.RenderTarget[i].DestBlend = D3D12_BLEND_ZERO;\n    psoDesc_.BlendState.RenderTarget[i].BlendOp = D3D12_BLEND_OP_ADD;\n    psoDesc_.BlendState.RenderTarget[i].SrcBlendAlpha = D3D12_BLEND_ONE;\n    psoDesc_.BlendState.RenderTarget[i].DestBlendAlpha = D3D12_BLEND_ZERO;\n    psoDesc_.BlendState.RenderTarget[i].BlendOpAlpha = D3D12_BLEND_OP_ADD;\n    psoDesc_.BlendState.RenderTarget[i].LogicOp = D3D12_LOGIC_OP_NOOP;\n    psoDesc_.BlendState.RenderTarget[i].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL;\n  }\n\n  // Set sensible defaults for depth-stencil state\n  psoDesc_.DepthStencilState.DepthEnable = FALSE;\n  psoDesc_.DepthStencilState.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;\n  psoDesc_.DepthStencilState.DepthFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL;\n  psoDesc_.DepthStencilState.StencilEnable = FALSE;\n  psoDesc_.DepthStencilState.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK;\n  psoDesc_.DepthStencilState.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK;\n  psoDesc_.DepthStencilState.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP;\n  psoDesc_.DepthStencilState.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP;\n  psoDesc_.DepthStencilState.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP;\n  psoDesc_.DepthStencilState.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS;\n  psoDesc_.DepthStencilState.BackFace = psoDesc_.DepthStencilState.FrontFace;\n\n  // Defaults for other fields\n  psoDesc_.SampleMask = UINT_MAX;\n  psoDesc_.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;\n  psoDesc_.NumRenderTargets = 1;\n  psoDesc_.RTVFormats[0] = DXGI_FORMAT_R8G8B8A8_UNORM;\n  psoDesc_.DSVFormat = DXGI_FORMAT_UNKNOWN;\n  psoDesc_.SampleDesc.Count = 1;\n  psoDesc_.SampleDesc.Quality = 0;\n  psoDesc_.NodeMask = 0;\n  psoDesc_.CachedPSO.pCachedBlob = nullptr;\n  psoDesc_.CachedPSO.CachedBlobSizeInBytes = 0;\n  psoDesc_.Flags = D3D12_PIPELINE_STATE_FLAG_NONE;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::vertexShader(\n    const std::vector<uint8_t>& bytecode) {\n  vsBytecode_ = bytecode;\n  psoDesc_.VS = {vsBytecode_.data(), vsBytecode_.size()};\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::pixelShader(\n    const std::vector<uint8_t>& bytecode) {\n  psBytecode_ = bytecode;\n  psoDesc_.PS = {psBytecode_.data(), psBytecode_.size()};\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::shaderBytecode(\n    const std::vector<uint8_t>& vs,\n    const std::vector<uint8_t>& ps) {\n  return vertexShader(vs).pixelShader(ps);\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::vertexInputLayout(\n    const std::vector<D3D12_INPUT_ELEMENT_DESC>& elements) {\n  inputElements_ = elements;\n  psoDesc_.InputLayout = {inputElements_.data(), static_cast<UINT>(inputElements_.size())};\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::blendState(\n    const D3D12_BLEND_DESC& desc) {\n  psoDesc_.BlendState = desc;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::blendStateForAttachment(\n    UINT attachmentIndex,\n    const RenderPipelineDesc::TargetDesc::ColorAttachment& attachment) {\n  if (attachmentIndex >= D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT) {\n    return *this;\n  }\n\n  // Enable independent blending when configuring attachments beyond RT0\n  if (attachmentIndex > 0) {\n    psoDesc_.BlendState.IndependentBlendEnable = TRUE;\n  }\n\n  auto& rt = psoDesc_.BlendState.RenderTarget[attachmentIndex];\n  rt.BlendEnable = attachment.blendEnabled ? TRUE : FALSE;\n  rt.SrcBlend = toD3D12Blend(attachment.srcRGBBlendFactor);\n  rt.DestBlend = toD3D12Blend(attachment.dstRGBBlendFactor);\n  rt.BlendOp = toD3D12BlendOp(attachment.rgbBlendOp);\n  rt.SrcBlendAlpha = toD3D12Blend(attachment.srcAlphaBlendFactor);\n  rt.DestBlendAlpha = toD3D12Blend(attachment.dstAlphaBlendFactor);\n  rt.BlendOpAlpha = toD3D12BlendOp(attachment.alphaBlendOp);\n\n  // Convert IGL color write mask to D3D12\n  UINT8 writeMask = 0;\n  if (attachment.colorWriteMask & igl::kColorWriteBitsRed) {\n    writeMask |= D3D12_COLOR_WRITE_ENABLE_RED;\n  }\n  if (attachment.colorWriteMask & igl::kColorWriteBitsGreen) {\n    writeMask |= D3D12_COLOR_WRITE_ENABLE_GREEN;\n  }\n  if (attachment.colorWriteMask & igl::kColorWriteBitsBlue) {\n    writeMask |= D3D12_COLOR_WRITE_ENABLE_BLUE;\n  }\n  if (attachment.colorWriteMask & igl::kColorWriteBitsAlpha) {\n    writeMask |= D3D12_COLOR_WRITE_ENABLE_ALPHA;\n  }\n  rt.RenderTargetWriteMask = writeMask;\n\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::rasterizerState(\n    const D3D12_RASTERIZER_DESC& desc) {\n  psoDesc_.RasterizerState = desc;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::cullMode(CullMode mode) {\n  switch (mode) {\n  case CullMode::Back:\n    psoDesc_.RasterizerState.CullMode = D3D12_CULL_MODE_BACK;\n    break;\n  case CullMode::Front:\n    psoDesc_.RasterizerState.CullMode = D3D12_CULL_MODE_FRONT;\n    break;\n  case CullMode::Disabled:\n  default:\n    psoDesc_.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;\n    break;\n  }\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::frontFaceWinding(WindingMode mode) {\n  psoDesc_.RasterizerState.FrontCounterClockwise = (mode == WindingMode::CounterClockwise) ? TRUE\n                                                                                           : FALSE;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::polygonFillMode(PolygonFillMode mode) {\n  psoDesc_.RasterizerState.FillMode = (mode == PolygonFillMode::Line) ? D3D12_FILL_MODE_WIREFRAME\n                                                                      : D3D12_FILL_MODE_SOLID;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::depthStencilState(\n    const D3D12_DEPTH_STENCIL_DESC& desc) {\n  psoDesc_.DepthStencilState = desc;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::depthTestEnabled(bool enabled) {\n  psoDesc_.DepthStencilState.DepthEnable = enabled ? TRUE : FALSE;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::depthWriteEnabled(bool enabled) {\n  psoDesc_.DepthStencilState.DepthWriteMask = enabled ? D3D12_DEPTH_WRITE_MASK_ALL\n                                                      : D3D12_DEPTH_WRITE_MASK_ZERO;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::depthCompareFunc(\n    D3D12_COMPARISON_FUNC func) {\n  psoDesc_.DepthStencilState.DepthFunc = func;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::renderTargetFormat(UINT index,\n                                                                               DXGI_FORMAT format) {\n  if (index < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT) {\n    psoDesc_.RTVFormats[index] = format;\n    // Auto-update NumRenderTargets to include this slot\n    if (index + 1 > psoDesc_.NumRenderTargets) {\n      psoDesc_.NumRenderTargets = index + 1;\n      // Enable independent blending when using multiple render targets\n      psoDesc_.BlendState.IndependentBlendEnable = (psoDesc_.NumRenderTargets > 1) ? TRUE : FALSE;\n    }\n  }\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::renderTargetFormats(\n    const std::vector<DXGI_FORMAT>& formats) {\n  const UINT count =\n      static_cast<UINT>(std::min<size_t>(formats.size(), D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT));\n  psoDesc_.NumRenderTargets = count;\n  // Enable independent blending when using multiple render targets\n  psoDesc_.BlendState.IndependentBlendEnable = (count > 1) ? TRUE : FALSE;\n  for (UINT i = 0; i < count; ++i) {\n    psoDesc_.RTVFormats[i] = formats[i];\n  }\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::depthStencilFormat(DXGI_FORMAT format) {\n  psoDesc_.DSVFormat = format;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::numRenderTargets(UINT count) {\n  const UINT clamped = std::min(count, static_cast<UINT>(D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT));\n  psoDesc_.NumRenderTargets = clamped;\n  // Enable independent blending when using multiple render targets\n  psoDesc_.BlendState.IndependentBlendEnable = (clamped > 1) ? TRUE : FALSE;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::sampleCount(UINT count) {\n  psoDesc_.SampleDesc.Count = count;\n  psoDesc_.RasterizerState.MultisampleEnable = (count > 1) ? TRUE : FALSE;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::sampleMask(UINT mask) {\n  psoDesc_.SampleMask = mask;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::primitiveTopologyType(\n    D3D12_PRIMITIVE_TOPOLOGY_TYPE type) {\n  psoDesc_.PrimitiveTopologyType = type;\n  return *this;\n}\n\nD3D12GraphicsPipelineBuilder& D3D12GraphicsPipelineBuilder::streamOutput(\n    const D3D12_STREAM_OUTPUT_DESC& desc) {\n  psoDesc_.StreamOutput = desc;\n  return *this;\n}\n\nResult D3D12GraphicsPipelineBuilder::build(ID3D12Device* device,\n                                           ID3D12RootSignature* rootSignature,\n                                           ID3D12PipelineState** outPipelineState,\n                                           const char* debugName) {\n  if (!device) {\n    return Result(Result::Code::ArgumentNull, \"Device is null\");\n  }\n  if (!rootSignature) {\n    return Result(Result::Code::ArgumentNull, \"Root signature is null\");\n  }\n  if (!outPipelineState) {\n    return Result(Result::Code::ArgumentNull, \"Output pipeline state is null\");\n  }\n\n  // Initialize output to null for safety\n  *outPipelineState = nullptr;\n\n  // Validate shader bytecode\n  if (psoDesc_.VS.BytecodeLength == 0) {\n    return Result(Result::Code::ArgumentInvalid, \"Vertex shader bytecode is required\");\n  }\n  if (psoDesc_.PS.BytecodeLength == 0) {\n    return Result(Result::Code::ArgumentInvalid, \"Pixel shader bytecode is required\");\n  }\n\n  // Set root signature\n  psoDesc_.pRootSignature = rootSignature;\n\n  // Create pipeline state\n  igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState;\n  HRESULT hr =\n      device->CreateGraphicsPipelineState(&psoDesc_, IID_PPV_ARGS(pipelineState.GetAddressOf()));\n  if (FAILED(hr)) {\n    char errorMsg[512];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to create graphics pipeline state. HRESULT: 0x%08X\",\n             static_cast<unsigned int>(hr));\n    return Result(Result::Code::RuntimeError, errorMsg);\n  }\n\n  // Set debug name if provided\n  if (debugName && debugName[0] != '\\0') {\n    std::wstring wideName(debugName, debugName + strlen(debugName));\n    pipelineState->SetName(wideName.c_str());\n  }\n\n  *outPipelineState = pipelineState.Get();\n  pipelineState->AddRef(); // Transfer ownership\n  return Result();\n}\n\n//=============================================================================\n// D3D12ComputePipelineBuilder\n//=============================================================================\n\nD3D12ComputePipelineBuilder::D3D12ComputePipelineBuilder() {\n  // Zero-initialize the descriptor\n  psoDesc_ = {};\n  psoDesc_.NodeMask = 0;\n  psoDesc_.CachedPSO.pCachedBlob = nullptr;\n  psoDesc_.CachedPSO.CachedBlobSizeInBytes = 0;\n  psoDesc_.Flags = D3D12_PIPELINE_STATE_FLAG_NONE;\n}\n\nD3D12ComputePipelineBuilder& D3D12ComputePipelineBuilder::shaderBytecode(\n    const std::vector<uint8_t>& bytecode) {\n  csBytecode_ = bytecode;\n  psoDesc_.CS.pShaderBytecode = csBytecode_.data();\n  psoDesc_.CS.BytecodeLength = csBytecode_.size();\n  return *this;\n}\n\nResult D3D12ComputePipelineBuilder::build(ID3D12Device* device,\n                                          ID3D12RootSignature* rootSignature,\n                                          ID3D12PipelineState** outPipelineState,\n                                          const char* debugName) {\n  if (!device) {\n    return Result(Result::Code::ArgumentNull, \"Device is null\");\n  }\n  if (!rootSignature) {\n    return Result(Result::Code::ArgumentNull, \"Root signature is null\");\n  }\n  if (!outPipelineState) {\n    return Result(Result::Code::ArgumentNull, \"Output pipeline state is null\");\n  }\n\n  // Initialize output to null for safety\n  *outPipelineState = nullptr;\n\n  // Validate shader bytecode\n  if (psoDesc_.CS.BytecodeLength == 0) {\n    return Result(Result::Code::ArgumentInvalid, \"Compute shader bytecode is required\");\n  }\n\n  // Set root signature\n  psoDesc_.pRootSignature = rootSignature;\n\n  // Create pipeline state\n  igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState;\n  HRESULT hr =\n      device->CreateComputePipelineState(&psoDesc_, IID_PPV_ARGS(pipelineState.GetAddressOf()));\n  if (FAILED(hr)) {\n    char errorMsg[512];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to create compute pipeline state. HRESULT: 0x%08X\",\n             static_cast<unsigned int>(hr));\n    return Result(Result::Code::RuntimeError, errorMsg);\n  }\n\n  // Set debug name if provided\n  if (debugName && debugName[0] != '\\0') {\n    std::wstring wideName(debugName, debugName + strlen(debugName));\n    pipelineState->SetName(wideName.c_str());\n  }\n\n  *outPipelineState = pipelineState.Get();\n  pipelineState->AddRef(); // Transfer ownership\n  return Result();\n}\n\n//=============================================================================\n// D3D12RootSignatureBuilder\n//=============================================================================\n\nD3D12RootSignatureBuilder::D3D12RootSignatureBuilder() {\n  flags_ = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT;\n}\n\nD3D12RootSignatureBuilder& D3D12RootSignatureBuilder::addRootConstants(UINT shaderRegister,\n                                                                       UINT num32BitValues,\n                                                                       UINT registerSpace) {\n  RootParameter param{}; // Zero-initialize\n  param.param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;\n  param.param.Constants.ShaderRegister = shaderRegister;\n  param.param.Constants.RegisterSpace = registerSpace;\n  param.param.Constants.Num32BitValues = num32BitValues;\n  param.param.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n  rootParameters_.push_back(param);\n  return *this;\n}\n\nD3D12RootSignatureBuilder& D3D12RootSignatureBuilder::addRootCBV(UINT shaderRegister,\n                                                                 UINT registerSpace) {\n  RootParameter param{}; // Zero-initialize\n  param.param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;\n  param.param.Descriptor.ShaderRegister = shaderRegister;\n  param.param.Descriptor.RegisterSpace = registerSpace;\n  param.param.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n  rootParameters_.push_back(param);\n  return *this;\n}\n\nD3D12RootSignatureBuilder& D3D12RootSignatureBuilder::addRootSRV(UINT shaderRegister,\n                                                                 UINT registerSpace) {\n  RootParameter param{}; // Zero-initialize\n  param.param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_SRV;\n  param.param.Descriptor.ShaderRegister = shaderRegister;\n  param.param.Descriptor.RegisterSpace = registerSpace;\n  param.param.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n  rootParameters_.push_back(param);\n  return *this;\n}\n\nD3D12RootSignatureBuilder& D3D12RootSignatureBuilder::addRootUAV(UINT shaderRegister,\n                                                                 UINT registerSpace) {\n  RootParameter param{}; // Zero-initialize\n  param.param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_UAV;\n  param.param.Descriptor.ShaderRegister = shaderRegister;\n  param.param.Descriptor.RegisterSpace = registerSpace;\n  param.param.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n  rootParameters_.push_back(param);\n  return *this;\n}\n\nD3D12RootSignatureBuilder& D3D12RootSignatureBuilder::addDescriptorTable(\n    D3D12_DESCRIPTOR_RANGE_TYPE rangeType,\n    UINT numDescriptors,\n    UINT baseShaderRegister,\n    UINT registerSpace) {\n  RootParameter param{}; // Zero-initialize\n  param.param.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n  param.param.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n\n  // Create descriptor range\n  DescriptorRange range;\n  range.range.RangeType = rangeType;\n  range.range.NumDescriptors = numDescriptors;\n  range.range.BaseShaderRegister = baseShaderRegister;\n  range.range.RegisterSpace = registerSpace;\n  range.range.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n\n  param.ranges.push_back(range);\n  rootParameters_.push_back(param);\n  return *this;\n}\n\nD3D12RootSignatureBuilder& D3D12RootSignatureBuilder::flags(D3D12_ROOT_SIGNATURE_FLAGS flags) {\n  flags_ = flags;\n  return *this;\n}\n\nResult D3D12RootSignatureBuilder::build(ID3D12Device* device,\n                                        const D3D12Context* context,\n                                        ID3D12RootSignature** outRootSignature) {\n  if (!device) {\n    return Result(Result::Code::ArgumentNull, \"Device is null\");\n  }\n  if (!outRootSignature) {\n    return Result(Result::Code::ArgumentNull, \"Output root signature is null\");\n  }\n\n  // Initialize output to null for safety\n  *outRootSignature = nullptr;\n\n  // Build arrays of D3D12_ROOT_PARAMETER and descriptor ranges\n  std::vector<D3D12_ROOT_PARAMETER> d3d12Params;\n  std::vector<std::vector<D3D12_DESCRIPTOR_RANGE>> allRanges;\n\n  d3d12Params.reserve(rootParameters_.size());\n  allRanges.reserve(rootParameters_.size());\n\n  for (auto& param : rootParameters_) {\n    if (param.param.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) {\n      // Store ranges for this table\n      std::vector<D3D12_DESCRIPTOR_RANGE> ranges;\n      ranges.reserve(param.ranges.size());\n      for (auto& r : param.ranges) {\n        D3D12_DESCRIPTOR_RANGE range = r.range;\n        if (context) {\n          const UINT maxCount = getMaxDescriptorCount(context, range.RangeType);\n          if (range.NumDescriptors == UINT_MAX || range.NumDescriptors > maxCount) {\n            range.NumDescriptors = maxCount;\n          }\n        }\n        ranges.push_back(range);\n      }\n      allRanges.push_back(std::move(ranges));\n\n      // Update descriptor table to point to the ranges\n      D3D12_ROOT_PARAMETER d3d12Param = param.param;\n      d3d12Param.DescriptorTable.NumDescriptorRanges = static_cast<UINT>(allRanges.back().size());\n      d3d12Param.DescriptorTable.pDescriptorRanges = allRanges.back().data();\n      d3d12Params.push_back(d3d12Param);\n    } else {\n      // Not a descriptor table, just copy\n      d3d12Params.push_back(param.param);\n    }\n  }\n\n  // Build root signature descriptor\n  D3D12_ROOT_SIGNATURE_DESC rootSigDesc = {};\n  rootSigDesc.NumParameters = static_cast<UINT>(d3d12Params.size());\n  rootSigDesc.pParameters = d3d12Params.data();\n  rootSigDesc.NumStaticSamplers = 0;\n  rootSigDesc.pStaticSamplers = nullptr;\n  rootSigDesc.Flags = flags_;\n\n  // Validate size (64 DWORD limit)\n  const uint32_t size = getRootSignatureDwordSize(rootSigDesc);\n  if (size > 64) {\n    char errorMsg[256];\n    snprintf(\n        errorMsg, sizeof(errorMsg), \"Root signature size exceeds 64 DWORD limit: %u DWORDs\", size);\n    return Result(Result::Code::ArgumentOutOfRange, errorMsg);\n  }\n\n  // Serialize root signature\n  igl::d3d12::ComPtr<ID3DBlob> signature;\n  igl::d3d12::ComPtr<ID3DBlob> error;\n  HRESULT hr = D3D12SerializeRootSignature(\n      &rootSigDesc, D3D_ROOT_SIGNATURE_VERSION_1, signature.GetAddressOf(), error.GetAddressOf());\n  if (FAILED(hr)) {\n    const char* errorStr = error.Get() ? static_cast<const char*>(error->GetBufferPointer())\n                                       : \"Unknown error\";\n    char errorMsg[512];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to serialize root signature. HRESULT: 0x%08X, Error: %s\",\n             static_cast<unsigned int>(hr),\n             errorStr);\n    return Result(Result::Code::RuntimeError, errorMsg);\n  }\n\n  // Create root signature\n  igl::d3d12::ComPtr<ID3D12RootSignature> rootSignature;\n  hr = device->CreateRootSignature(0,\n                                   signature->GetBufferPointer(),\n                                   signature->GetBufferSize(),\n                                   IID_PPV_ARGS(rootSignature.GetAddressOf()));\n  if (FAILED(hr)) {\n    char errorMsg[256];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to create root signature. HRESULT: 0x%08X\",\n             static_cast<unsigned int>(hr));\n    return Result(Result::Code::RuntimeError, errorMsg);\n  }\n\n  *outRootSignature = rootSignature.Get();\n  rootSignature->AddRef(); // Transfer ownership\n  return Result();\n}\n\nUINT D3D12RootSignatureBuilder::getMaxDescriptorCount(const D3D12Context* context,\n                                                      D3D12_DESCRIPTOR_RANGE_TYPE rangeType) {\n  if (!context) {\n    return 128; // Conservative default\n  }\n\n  const D3D12_RESOURCE_BINDING_TIER bindingTier = context->getResourceBindingTier();\n  const bool needsBoundedRanges = (bindingTier == D3D12_RESOURCE_BINDING_TIER_1);\n\n  if (!needsBoundedRanges) {\n    return UINT_MAX; // Unbounded\n  }\n\n  // Conservative bounds for Tier 1 devices\n  switch (rangeType) {\n  case D3D12_DESCRIPTOR_RANGE_TYPE_SRV:\n    return 128;\n  case D3D12_DESCRIPTOR_RANGE_TYPE_UAV:\n    return 64;\n  case D3D12_DESCRIPTOR_RANGE_TYPE_CBV:\n    return 64;\n  case D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER:\n    return 32;\n  default:\n    return 128;\n  }\n}\n\nuint32_t D3D12RootSignatureBuilder::getDwordSize() const {\n  // Build temporary descriptor for cost calculation\n  std::vector<D3D12_ROOT_PARAMETER> d3d12Params;\n  std::vector<std::vector<D3D12_DESCRIPTOR_RANGE>> allRanges;\n\n  d3d12Params.reserve(rootParameters_.size());\n  allRanges.reserve(rootParameters_.size());\n\n  for (const auto& param : rootParameters_) {\n    if (param.param.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE) {\n      std::vector<D3D12_DESCRIPTOR_RANGE> ranges;\n      ranges.reserve(param.ranges.size());\n      for (const auto& r : param.ranges) {\n        ranges.push_back(r.range);\n      }\n      allRanges.push_back(std::move(ranges));\n\n      D3D12_ROOT_PARAMETER d3d12Param = param.param;\n      d3d12Param.DescriptorTable.NumDescriptorRanges = static_cast<UINT>(allRanges.back().size());\n      d3d12Param.DescriptorTable.pDescriptorRanges = allRanges.back().data();\n      d3d12Params.push_back(d3d12Param);\n    } else {\n      d3d12Params.push_back(param.param);\n    }\n  }\n\n  D3D12_ROOT_SIGNATURE_DESC rootSigDesc = {};\n  rootSigDesc.NumParameters = static_cast<UINT>(d3d12Params.size());\n  rootSigDesc.pParameters = d3d12Params.data();\n  rootSigDesc.NumStaticSamplers = 0;\n  rootSigDesc.pStaticSamplers = nullptr;\n  rootSigDesc.Flags = flags_;\n\n  return getRootSignatureDwordSize(rootSigDesc);\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12PipelineBuilder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/ComputePipelineState.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass D3D12Context;\n\n/**\n * @brief Fluent builder for D3D12 graphics pipeline state objects\n *\n * Encapsulates the complex setup of D3D12_GRAPHICS_PIPELINE_STATE_DESC\n * and provides a clean, chainable API similar to VulkanPipelineBuilder.\n *\n * Usage:\n *   D3D12GraphicsPipelineBuilder builder;\n *   builder.shaderBytecode(vsBytecode, psBytecode)\n *          .vertexInputLayout(inputElements)\n *          .blendState(blendDesc)\n *          .rasterizerState(rasterizerDesc)\n *          .depthStencilState(depthStencilDesc)\n *          .renderTargetFormats(rtvFormats)\n *          .sampleCount(sampleCount)\n *          .primitiveTopology(topology);\n *   auto result = builder.build(device, rootSignature, outPipelineState);\n */\nclass D3D12GraphicsPipelineBuilder final {\n public:\n  D3D12GraphicsPipelineBuilder();\n  ~D3D12GraphicsPipelineBuilder() = default;\n\n  // Shader configuration\n  D3D12GraphicsPipelineBuilder& vertexShader(const std::vector<uint8_t>& bytecode);\n  D3D12GraphicsPipelineBuilder& pixelShader(const std::vector<uint8_t>& bytecode);\n  D3D12GraphicsPipelineBuilder& shaderBytecode(const std::vector<uint8_t>& vs,\n                                               const std::vector<uint8_t>& ps);\n\n  // Vertex input layout\n  D3D12GraphicsPipelineBuilder& vertexInputLayout(\n      const std::vector<D3D12_INPUT_ELEMENT_DESC>& elements);\n\n  // Blend state\n  D3D12GraphicsPipelineBuilder& blendState(const D3D12_BLEND_DESC& desc);\n  D3D12GraphicsPipelineBuilder& blendStateForAttachment(\n      UINT attachmentIndex,\n      const RenderPipelineDesc::TargetDesc::ColorAttachment& attachment);\n\n  // Rasterizer state\n  D3D12GraphicsPipelineBuilder& rasterizerState(const D3D12_RASTERIZER_DESC& desc);\n  D3D12GraphicsPipelineBuilder& cullMode(CullMode mode);\n  D3D12GraphicsPipelineBuilder& frontFaceWinding(WindingMode mode);\n  D3D12GraphicsPipelineBuilder& polygonFillMode(PolygonFillMode mode);\n\n  // Depth-stencil state\n  D3D12GraphicsPipelineBuilder& depthStencilState(const D3D12_DEPTH_STENCIL_DESC& desc);\n  D3D12GraphicsPipelineBuilder& depthTestEnabled(bool enabled);\n  D3D12GraphicsPipelineBuilder& depthWriteEnabled(bool enabled);\n  D3D12GraphicsPipelineBuilder& depthCompareFunc(D3D12_COMPARISON_FUNC func);\n\n  // Render target configuration\n  D3D12GraphicsPipelineBuilder& renderTargetFormat(UINT index, DXGI_FORMAT format);\n  D3D12GraphicsPipelineBuilder& renderTargetFormats(const std::vector<DXGI_FORMAT>& formats);\n  D3D12GraphicsPipelineBuilder& depthStencilFormat(DXGI_FORMAT format);\n  D3D12GraphicsPipelineBuilder& numRenderTargets(UINT count);\n\n  // Sample configuration\n  D3D12GraphicsPipelineBuilder& sampleCount(UINT count);\n  D3D12GraphicsPipelineBuilder& sampleMask(UINT mask);\n\n  // Primitive topology\n  D3D12GraphicsPipelineBuilder& primitiveTopologyType(D3D12_PRIMITIVE_TOPOLOGY_TYPE type);\n\n  // Stream output (optional)\n  D3D12GraphicsPipelineBuilder& streamOutput(const D3D12_STREAM_OUTPUT_DESC& desc);\n\n  // Build the pipeline state object\n  [[nodiscard]] Result build(ID3D12Device* device,\n                             ID3D12RootSignature* rootSignature,\n                             ID3D12PipelineState** outPipelineState,\n                             const char* debugName = nullptr);\n\n  // Get the current PSO desc (for inspection/debugging)\n  [[nodiscard]] const D3D12_GRAPHICS_PIPELINE_STATE_DESC& getDesc() const {\n    return psoDesc_;\n  }\n\n private:\n  D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc_;\n  std::vector<D3D12_INPUT_ELEMENT_DESC> inputElements_;\n  std::vector<uint8_t> vsBytecode_;\n  std::vector<uint8_t> psBytecode_;\n};\n\n/**\n * @brief Fluent builder for D3D12 compute pipeline state objects\n *\n * Simplified builder for compute shaders.\n *\n * Usage:\n *   D3D12ComputePipelineBuilder builder;\n *   builder.shaderBytecode(csBytecode);\n *   auto result = builder.build(device, rootSignature, outPipelineState);\n */\nclass D3D12ComputePipelineBuilder final {\n public:\n  D3D12ComputePipelineBuilder();\n  ~D3D12ComputePipelineBuilder() = default;\n\n  // Shader configuration\n  D3D12ComputePipelineBuilder& shaderBytecode(const std::vector<uint8_t>& bytecode);\n\n  // Build the pipeline state object\n  [[nodiscard]] Result build(ID3D12Device* device,\n                             ID3D12RootSignature* rootSignature,\n                             ID3D12PipelineState** outPipelineState,\n                             const char* debugName = nullptr);\n\n  // Get the current PSO desc (for inspection/debugging)\n  [[nodiscard]] const D3D12_COMPUTE_PIPELINE_STATE_DESC& getDesc() const {\n    return psoDesc_;\n  }\n\n private:\n  D3D12_COMPUTE_PIPELINE_STATE_DESC psoDesc_;\n  std::vector<uint8_t> csBytecode_;\n};\n\n/**\n * @brief Builder for D3D12 root signatures\n *\n * Encapsulates root signature creation with support for:\n * - Root constants (push constants)\n * - Root descriptors (CBVs)\n * - Descriptor tables (CBV/SRV/UAV/Sampler)\n * - Automatic cost calculation and validation\n *\n * Usage:\n *   D3D12RootSignatureBuilder builder;\n *   builder.addRootConstants(shaderRegister, num32BitValues)\n *          .addRootCBV(shaderRegister)\n *          .addDescriptorTable(D3D12_DESCRIPTOR_RANGE_TYPE_SRV, count, baseRegister);\n *   auto result = builder.build(device, context, outRootSignature);\n */\nclass D3D12RootSignatureBuilder final {\n public:\n  D3D12RootSignatureBuilder();\n  ~D3D12RootSignatureBuilder() = default;\n\n  // Root constants (inline 32-bit values)\n  D3D12RootSignatureBuilder& addRootConstants(UINT shaderRegister,\n                                              UINT num32BitValues,\n                                              UINT registerSpace = 0);\n\n  // Root descriptors (CBV/SRV/UAV accessed directly via GPU virtual address)\n  D3D12RootSignatureBuilder& addRootCBV(UINT shaderRegister, UINT registerSpace = 0);\n  D3D12RootSignatureBuilder& addRootSRV(UINT shaderRegister, UINT registerSpace = 0);\n  D3D12RootSignatureBuilder& addRootUAV(UINT shaderRegister, UINT registerSpace = 0);\n\n  // Descriptor tables\n  D3D12RootSignatureBuilder& addDescriptorTable(D3D12_DESCRIPTOR_RANGE_TYPE rangeType,\n                                                UINT numDescriptors,\n                                                UINT baseShaderRegister,\n                                                UINT registerSpace = 0);\n\n  // Flags\n  D3D12RootSignatureBuilder& flags(D3D12_ROOT_SIGNATURE_FLAGS flags);\n\n  // Build the root signature\n  // Note: context parameter is reserved for future tier-based validation.\n  // Currently, callers should use getMaxDescriptorCount() when configuring\n  // descriptor tables to ensure hardware compatibility.\n  [[nodiscard]] Result build(ID3D12Device* device,\n                             const D3D12Context* context,\n                             ID3D12RootSignature** outRootSignature);\n\n  // Query limits from device - use this when calling addDescriptorTable()\n  // to ensure descriptor counts are within hardware tier limits\n  static UINT getMaxDescriptorCount(const D3D12Context* context,\n                                    D3D12_DESCRIPTOR_RANGE_TYPE rangeType);\n\n  // Calculate root signature size in DWORDs (must be <= 64)\n  [[nodiscard]] uint32_t getDwordSize() const;\n\n private:\n  struct DescriptorRange {\n    D3D12_DESCRIPTOR_RANGE range;\n  };\n\n  struct RootParameter {\n    D3D12_ROOT_PARAMETER param;\n    std::vector<DescriptorRange> ranges; // For descriptor tables\n  };\n\n  std::vector<RootParameter> rootParameters_;\n  D3D12_ROOT_SIGNATURE_FLAGS flags_ = D3D12_ROOT_SIGNATURE_FLAG_NONE;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12PipelineCache.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12PipelineCache.h>\n\n#include <algorithm>\n#include <vector>\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/D3D12RootSignatureKey.h>\n\nnamespace igl::d3d12 {\n\nComPtr<ID3D12RootSignature> D3D12PipelineCache::createRootSignatureFromKey(\n    ID3D12Device* d3dDevice,\n    const D3D12RootSignatureKey& key,\n    D3D12_RESOURCE_BINDING_TIER bindingTier,\n    Result* IGL_NULLABLE outResult) const {\n  if (!d3dDevice) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"D3D12 device is null\");\n    return nullptr;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"Creating root signature from reflection key:\\n\");\n  if (key.hasPushConstants) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"  Push constants: b%u (%u DWORDs)\\n\", key.pushConstantSlot, key.pushConstantSize);\n  }\n  IGL_D3D12_LOG_VERBOSE(\"  CBV slots: %zu, SRV slots: %zu, UAV slots: %zu, Sampler slots: %zu\\n\",\n                        key.usedCBVSlots.size(),\n                        key.usedSRVSlots.size(),\n                        key.usedUAVSlots.size(),\n                        key.usedSamplerSlots.size());\n\n  // Determine if we need bounded ranges (Tier 1 hardware)\n  const bool needsBoundedRanges = (bindingTier == D3D12_RESOURCE_BINDING_TIER_1);\n  const UINT srvBound = needsBoundedRanges ? 128 : UINT_MAX;\n  const UINT samplerBound = needsBoundedRanges ? 32 : UINT_MAX;\n  const UINT uavBound = needsBoundedRanges ? 8 : UINT_MAX;\n\n  // Build descriptor ranges dynamically - only create ranges for resource types the shader uses\n  // The ranges must remain stable (no reallocation) since root parameters will point to them\n  std::vector<D3D12_DESCRIPTOR_RANGE> descriptorRanges;\n  descriptorRanges.reserve(4); // Maximum: CBV, SRV, Sampler, UAV\n\n  // Track which descriptor range index corresponds to each resource type\n  size_t cbvRangeIndex = SIZE_MAX;\n  size_t srvRangeIndex = SIZE_MAX;\n  size_t samplerRangeIndex = SIZE_MAX;\n  size_t uavRangeIndex = SIZE_MAX;\n\n  // CBV descriptor table (only if shader uses CBVs)\n  if (!key.usedCBVSlots.empty()) {\n    cbvRangeIndex = descriptorRanges.size();\n\n    // D3D12 descriptor tables must start at register 0\n    // Calculate range from 0 to max slot (includes unused slots)\n    UINT maxCBVSlot = key.maxCBVSlot;\n    UINT numCBVs = maxCBVSlot + 1;\n\n    D3D12_DESCRIPTOR_RANGE cbvRange = {};\n    cbvRange.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_CBV;\n    cbvRange.NumDescriptors = numCBVs;\n    cbvRange.BaseShaderRegister = 0;\n    cbvRange.RegisterSpace = 0;\n    cbvRange.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n    descriptorRanges.push_back(cbvRange);\n  }\n\n  // SRV descriptor table (only if shader uses SRVs)\n  if (!key.usedSRVSlots.empty()) {\n    srvRangeIndex = descriptorRanges.size();\n\n    // D3D12 descriptor tables must start at register 0\n    // Calculate range from 0 to max slot (includes unused slots)\n    UINT maxSRVSlot = key.maxSRVSlot;\n    UINT numSRVs = maxSRVSlot + 1;\n\n    D3D12_DESCRIPTOR_RANGE srvRange = {};\n    srvRange.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;\n    srvRange.NumDescriptors = numSRVs;\n    srvRange.BaseShaderRegister = 0;\n    srvRange.RegisterSpace = 0;\n    srvRange.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n    descriptorRanges.push_back(srvRange);\n  }\n\n  // Sampler descriptor table (only if shader uses samplers)\n  if (!key.usedSamplerSlots.empty()) {\n    samplerRangeIndex = descriptorRanges.size();\n\n    // D3D12 descriptor tables must start at register 0\n    // Calculate range from 0 to max slot (includes unused slots)\n    UINT maxSamplerSlot = key.maxSamplerSlot;\n    UINT numSamplers = maxSamplerSlot + 1;\n\n    D3D12_DESCRIPTOR_RANGE samplerRange = {};\n    samplerRange.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER;\n    samplerRange.NumDescriptors = numSamplers;\n    samplerRange.BaseShaderRegister = 0;\n    samplerRange.RegisterSpace = 0;\n    samplerRange.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n    descriptorRanges.push_back(samplerRange);\n  }\n\n  // UAV descriptor table (only if shader uses UAVs)\n  if (!key.usedUAVSlots.empty()) {\n    uavRangeIndex = descriptorRanges.size();\n\n    // D3D12 descriptor tables must start at register 0\n    // Calculate range from 0 to max slot (includes unused slots)\n    UINT maxUAVSlot = key.maxUAVSlot;\n    UINT numUAVs = maxUAVSlot + 1;\n\n    D3D12_DESCRIPTOR_RANGE uavRange = {};\n    uavRange.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV;\n    uavRange.NumDescriptors = numUAVs;\n    uavRange.BaseShaderRegister = 0;\n    uavRange.RegisterSpace = 0;\n    uavRange.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n    descriptorRanges.push_back(uavRange);\n  }\n\n  // Build root parameters dynamically based on shader reflection (Vulkan approach)\n  // Only include what the shader actually declares - no hardcoded assumptions\n  // Order: Push constants, CBV table, SRV table, Sampler table, UAV table\n  std::vector<D3D12_ROOT_PARAMETER> rootParams;\n\n  // Track which root parameter index corresponds to each resource type\n  UINT pushConstantRootParamIndex = UINT_MAX;\n  UINT cbvTableRootParamIndex = UINT_MAX;\n  UINT srvTableRootParamIndex = UINT_MAX;\n  UINT samplerTableRootParamIndex = UINT_MAX;\n  UINT uavTableRootParamIndex = UINT_MAX;\n\n  // Add push constants if shader uses them (always first if present)\n  if (key.hasPushConstants) {\n    pushConstantRootParamIndex = static_cast<UINT>(rootParams.size());\n\n    D3D12_ROOT_PARAMETER pushConstParam = {};\n    pushConstParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;\n    pushConstParam.Constants.ShaderRegister = key.pushConstantSlot;\n    pushConstParam.Constants.RegisterSpace = 0;\n    pushConstParam.Constants.Num32BitValues = key.pushConstantSize;\n    pushConstParam.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n    rootParams.push_back(pushConstParam);\n  }\n\n  // Add CBV descriptor table if shader uses any CBV slots\n  if (!key.usedCBVSlots.empty() && cbvRangeIndex != SIZE_MAX) {\n    cbvTableRootParamIndex = static_cast<UINT>(rootParams.size());\n\n    D3D12_ROOT_PARAMETER cbvTableParam = {};\n    cbvTableParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n    cbvTableParam.DescriptorTable.NumDescriptorRanges = 1;\n    cbvTableParam.DescriptorTable.pDescriptorRanges = &descriptorRanges[cbvRangeIndex];\n    cbvTableParam.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n    rootParams.push_back(cbvTableParam);\n  }\n\n  // Add SRV descriptor table if shader uses any SRV slots\n  if (!key.usedSRVSlots.empty() && srvRangeIndex != SIZE_MAX) {\n    srvTableRootParamIndex = static_cast<UINT>(rootParams.size());\n\n    D3D12_ROOT_PARAMETER srvTableParam = {};\n    srvTableParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n    srvTableParam.DescriptorTable.NumDescriptorRanges = 1;\n    srvTableParam.DescriptorTable.pDescriptorRanges = &descriptorRanges[srvRangeIndex];\n    srvTableParam.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n    rootParams.push_back(srvTableParam);\n  }\n\n  // Add Sampler descriptor table if shader uses any sampler slots\n  if (!key.usedSamplerSlots.empty() && samplerRangeIndex != SIZE_MAX) {\n    samplerTableRootParamIndex = static_cast<UINT>(rootParams.size());\n\n    D3D12_ROOT_PARAMETER samplerTableParam = {};\n    samplerTableParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n    samplerTableParam.DescriptorTable.NumDescriptorRanges = 1;\n    samplerTableParam.DescriptorTable.pDescriptorRanges = &descriptorRanges[samplerRangeIndex];\n    samplerTableParam.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n    rootParams.push_back(samplerTableParam);\n  }\n\n  // Add UAV descriptor table if shader uses any UAV slots\n  if (!key.usedUAVSlots.empty() && uavRangeIndex != SIZE_MAX) {\n    uavTableRootParamIndex = static_cast<UINT>(rootParams.size());\n\n    D3D12_ROOT_PARAMETER uavTableParam = {};\n    uavTableParam.ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n    uavTableParam.DescriptorTable.NumDescriptorRanges = 1;\n    uavTableParam.DescriptorTable.pDescriptorRanges = &descriptorRanges[uavRangeIndex];\n    uavTableParam.ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n    rootParams.push_back(uavTableParam);\n  }\n\n  // Create root signature desc\n  D3D12_ROOT_SIGNATURE_DESC rootSigDesc = {};\n  rootSigDesc.NumParameters = static_cast<UINT>(rootParams.size());\n  rootSigDesc.pParameters = rootParams.data();\n  rootSigDesc.NumStaticSamplers = 0;\n  rootSigDesc.pStaticSamplers = nullptr;\n  rootSigDesc.Flags = key.flags;\n\n  IGL_D3D12_LOG_VERBOSE(\"  Root signature has %u parameters\\n\", rootSigDesc.NumParameters);\n\n  // Use existing caching infrastructure\n  return getOrCreateRootSignature(d3dDevice, rootSigDesc, outResult);\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12PipelineCache.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <mutex>\n#include <unordered_map>\n#include <vector>\n#include <igl/Common.h>\n#include <igl/ComputePipelineState.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/ShaderModule.h>\n#include <igl/d3d12/VertexInputState.h>\n\nnamespace igl::d3d12 {\n\nclass D3D12PipelineCache {\n public:\n  D3D12PipelineCache() = default;\n\n  void clear();\n\n private:\n  size_t hashRootSignature(const D3D12_ROOT_SIGNATURE_DESC& desc) const;\n  ComPtr<ID3D12RootSignature> getOrCreateRootSignature(ID3D12Device* d3dDevice,\n                                                       const D3D12_ROOT_SIGNATURE_DESC& desc,\n                                                       Result* IGL_NULLABLE outResult) const;\n\n  // Create root signature from reflection-based key (for dynamic binding)\n  ComPtr<ID3D12RootSignature> createRootSignatureFromKey(ID3D12Device* d3dDevice,\n                                                         const struct D3D12RootSignatureKey& key,\n                                                         D3D12_RESOURCE_BINDING_TIER bindingTier,\n                                                         Result* IGL_NULLABLE outResult) const;\n\n  size_t hashRenderPipelineDesc(const RenderPipelineDesc& desc) const;\n  size_t hashComputePipelineDesc(const ComputePipelineDesc& desc) const;\n\n  mutable std::unordered_map<size_t, ComPtr<ID3D12PipelineState>> graphicsPSOCache_;\n  mutable std::unordered_map<size_t, ComPtr<ID3D12PipelineState>> computePSOCache_;\n  mutable std::mutex psoCacheMutex_;\n  mutable size_t graphicsPSOCacheHits_ = 0;\n  mutable size_t graphicsPSOCacheMisses_ = 0;\n  mutable size_t computePSOCacheHits_ = 0;\n  mutable size_t computePSOCacheMisses_ = 0;\n\n  mutable std::unordered_map<size_t, ComPtr<ID3D12RootSignature>> rootSignatureCache_;\n  mutable std::mutex rootSignatureCacheMutex_;\n  mutable size_t rootSignatureCacheHits_ = 0;\n  mutable size_t rootSignatureCacheMisses_ = 0;\n\n  std::vector<uint8_t> mipmapVSBytecode_;\n  std::vector<uint8_t> mipmapPSBytecode_;\n  ComPtr<ID3D12RootSignature> mipmapRootSignature_;\n  bool mipmapShadersAvailable_ = false;\n\n  friend class Device;\n};\n\ninline void D3D12PipelineCache::clear() {\n  {\n    std::lock_guard<std::mutex> lock(psoCacheMutex_);\n    graphicsPSOCache_.clear();\n    computePSOCache_.clear();\n    graphicsPSOCacheHits_ = 0;\n    graphicsPSOCacheMisses_ = 0;\n    computePSOCacheHits_ = 0;\n    computePSOCacheMisses_ = 0;\n  }\n  {\n    std::lock_guard<std::mutex> lock(rootSignatureCacheMutex_);\n    rootSignatureCache_.clear();\n    rootSignatureCacheHits_ = 0;\n    rootSignatureCacheMisses_ = 0;\n  }\n  mipmapVSBytecode_.clear();\n  mipmapPSBytecode_.clear();\n  mipmapRootSignature_.Reset();\n  mipmapShadersAvailable_ = false;\n}\n\ninline size_t D3D12PipelineCache::hashRootSignature(const D3D12_ROOT_SIGNATURE_DESC& desc) const {\n  size_t hash = 0;\n\n  hashCombine(hash, static_cast<size_t>(desc.Flags));\n  hashCombine(hash, static_cast<size_t>(desc.NumParameters));\n\n  for (UINT i = 0; i < desc.NumParameters; ++i) {\n    const auto& param = desc.pParameters[i];\n\n    hashCombine(hash, static_cast<size_t>(param.ParameterType));\n    hashCombine(hash, static_cast<size_t>(param.ShaderVisibility));\n\n    switch (param.ParameterType) {\n    case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: {\n      hashCombine(hash, static_cast<size_t>(param.DescriptorTable.NumDescriptorRanges));\n\n      for (UINT j = 0; j < param.DescriptorTable.NumDescriptorRanges; ++j) {\n        const auto& range = param.DescriptorTable.pDescriptorRanges[j];\n        hashCombine(hash, static_cast<size_t>(range.RangeType));\n        hashCombine(hash, static_cast<size_t>(range.NumDescriptors));\n        hashCombine(hash, static_cast<size_t>(range.BaseShaderRegister));\n        hashCombine(hash, static_cast<size_t>(range.RegisterSpace));\n        hashCombine(hash, static_cast<size_t>(range.OffsetInDescriptorsFromTableStart));\n      }\n      break;\n    }\n    case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS: {\n      hashCombine(hash, static_cast<size_t>(param.Constants.ShaderRegister));\n      hashCombine(hash, static_cast<size_t>(param.Constants.RegisterSpace));\n      hashCombine(hash, static_cast<size_t>(param.Constants.Num32BitValues));\n      break;\n    }\n    case D3D12_ROOT_PARAMETER_TYPE_CBV:\n    case D3D12_ROOT_PARAMETER_TYPE_SRV:\n    case D3D12_ROOT_PARAMETER_TYPE_UAV: {\n      hashCombine(hash, static_cast<size_t>(param.Descriptor.ShaderRegister));\n      hashCombine(hash, static_cast<size_t>(param.Descriptor.RegisterSpace));\n      break;\n    }\n    }\n  }\n\n  hashCombine(hash, static_cast<size_t>(desc.NumStaticSamplers));\n  for (UINT i = 0; i < desc.NumStaticSamplers; ++i) {\n    const auto& sampler = desc.pStaticSamplers[i];\n    hashCombine(hash, static_cast<size_t>(sampler.Filter));\n    hashCombine(hash, static_cast<size_t>(sampler.AddressU));\n    hashCombine(hash, static_cast<size_t>(sampler.AddressV));\n    hashCombine(hash, static_cast<size_t>(sampler.AddressW));\n    hashCombine(hash, static_cast<size_t>(sampler.ComparisonFunc));\n    hashCombine(hash, static_cast<size_t>(sampler.ShaderRegister));\n    hashCombine(hash, static_cast<size_t>(sampler.RegisterSpace));\n    hashCombine(hash, static_cast<size_t>(sampler.ShaderVisibility));\n  }\n\n  return hash;\n}\n\ninline ComPtr<ID3D12RootSignature> D3D12PipelineCache::getOrCreateRootSignature(\n    ID3D12Device* d3dDevice,\n    const D3D12_ROOT_SIGNATURE_DESC& desc,\n    Result* IGL_NULLABLE outResult) const {\n  const size_t hash = hashRootSignature(desc);\n\n  {\n    std::lock_guard<std::mutex> lock(rootSignatureCacheMutex_);\n    auto it = rootSignatureCache_.find(hash);\n    if (it != rootSignatureCache_.end()) {\n      rootSignatureCacheHits_++;\n      IGL_D3D12_LOG_VERBOSE(\"  Root signature cache HIT (hash=0x%zx, hits=%zu, misses=%zu)\\n\",\n                            hash,\n                            rootSignatureCacheHits_,\n                            rootSignatureCacheMisses_);\n      return it->second;\n    }\n  }\n\n  rootSignatureCacheMisses_++;\n  IGL_D3D12_LOG_VERBOSE(\"  Root signature cache MISS (hash=0x%zx, hits=%zu, misses=%zu)\\n\",\n                        hash,\n                        rootSignatureCacheHits_,\n                        rootSignatureCacheMisses_);\n\n  if (!d3dDevice) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"D3D12 device is null\");\n    return nullptr;\n  }\n\n  ComPtr<ID3DBlob> signature;\n  ComPtr<ID3DBlob> error;\n\n  // Query highest supported root signature version for this device.\n  D3D12_FEATURE_DATA_ROOT_SIGNATURE featureData{};\n  featureData.HighestVersion = D3D_ROOT_SIGNATURE_VERSION_1_1;\n  HRESULT featureHr = d3dDevice->CheckFeatureSupport(\n      D3D12_FEATURE_ROOT_SIGNATURE, &featureData, sizeof(featureData));\n  D3D_ROOT_SIGNATURE_VERSION highestVersion = SUCCEEDED(featureHr) ? featureData.HighestVersion\n                                                                   : D3D_ROOT_SIGNATURE_VERSION_1_0;\n\n  HRESULT hr = E_FAIL;\n\n  if (highestVersion >= D3D_ROOT_SIGNATURE_VERSION_1_1) {\n    // Use versioned root signature (1.1) when available and preserve NumDescriptors\n    // as-is (Tier 2/3 unbounded ranges are expressed via UINT_MAX).\n    std::vector<D3D12_ROOT_PARAMETER1> params1;\n    std::vector<std::vector<D3D12_DESCRIPTOR_RANGE1>> rangesPerParam;\n    params1.reserve(desc.NumParameters);\n    rangesPerParam.reserve(desc.NumParameters);\n\n    for (UINT i = 0; i < desc.NumParameters; ++i) {\n      const D3D12_ROOT_PARAMETER& srcParam = desc.pParameters[i];\n      D3D12_ROOT_PARAMETER1 dstParam{};\n      dstParam.ParameterType = srcParam.ParameterType;\n      dstParam.ShaderVisibility = srcParam.ShaderVisibility;\n\n      switch (srcParam.ParameterType) {\n      case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS:\n        dstParam.Constants.ShaderRegister = srcParam.Constants.ShaderRegister;\n        dstParam.Constants.RegisterSpace = srcParam.Constants.RegisterSpace;\n        dstParam.Constants.Num32BitValues = srcParam.Constants.Num32BitValues;\n        break;\n      case D3D12_ROOT_PARAMETER_TYPE_CBV:\n      case D3D12_ROOT_PARAMETER_TYPE_SRV:\n      case D3D12_ROOT_PARAMETER_TYPE_UAV:\n        dstParam.Descriptor.ShaderRegister = srcParam.Descriptor.ShaderRegister;\n        dstParam.Descriptor.RegisterSpace = srcParam.Descriptor.RegisterSpace;\n        dstParam.Descriptor.Flags = D3D12_ROOT_DESCRIPTOR_FLAG_NONE;\n        break;\n      case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE: {\n        const UINT numRanges = srcParam.DescriptorTable.NumDescriptorRanges;\n        const D3D12_DESCRIPTOR_RANGE* srcRanges = srcParam.DescriptorTable.pDescriptorRanges;\n\n        if (numRanges > 0 && srcRanges) {\n          rangesPerParam.emplace_back();\n          auto& dstRanges = rangesPerParam.back();\n          dstRanges.resize(numRanges);\n\n          for (UINT j = 0; j < numRanges; ++j) {\n            const D3D12_DESCRIPTOR_RANGE& srcRange = srcRanges[j];\n            D3D12_DESCRIPTOR_RANGE1 dstRange{};\n            dstRange.RangeType = srcRange.RangeType;\n            dstRange.NumDescriptors = srcRange.NumDescriptors;\n            dstRange.BaseShaderRegister = srcRange.BaseShaderRegister;\n            dstRange.RegisterSpace = srcRange.RegisterSpace;\n            // Mark descriptor ranges as DESCRIPTORS_VOLATILE to match the dynamic\n            // per-draw descriptor update pattern used by D3D12ResourcesBinder.\n            // This avoids D3D12 WARNING/ERROR ID=646, which requires all descriptors\n            // in STATIC ranges to be initialized before binding the table.\n            dstRange.Flags = D3D12_DESCRIPTOR_RANGE_FLAG_DESCRIPTORS_VOLATILE;\n            dstRange.OffsetInDescriptorsFromTableStart = srcRange.OffsetInDescriptorsFromTableStart;\n            dstRanges[j] = dstRange;\n          }\n\n          dstParam.DescriptorTable.NumDescriptorRanges = numRanges;\n          dstParam.DescriptorTable.pDescriptorRanges = dstRanges.data();\n        } else {\n          dstParam.DescriptorTable.NumDescriptorRanges = 0;\n          dstParam.DescriptorTable.pDescriptorRanges = nullptr;\n        }\n        break;\n      }\n      }\n\n      params1.push_back(dstParam);\n    }\n\n    D3D12_ROOT_SIGNATURE_DESC1 desc1{};\n    desc1.NumParameters = static_cast<UINT>(params1.size());\n    desc1.pParameters = params1.data();\n    desc1.NumStaticSamplers = desc.NumStaticSamplers;\n    desc1.pStaticSamplers = desc.pStaticSamplers;\n    desc1.Flags = desc.Flags;\n\n    D3D12_VERSIONED_ROOT_SIGNATURE_DESC versionedDesc{};\n    versionedDesc.Version = D3D_ROOT_SIGNATURE_VERSION_1_1;\n    versionedDesc.Desc_1_1 = desc1;\n\n    IGL_D3D12_LOG_VERBOSE(\"  Serializing root signature (version 1.1)...\\n\");\n    hr = D3D12SerializeVersionedRootSignature(\n        &versionedDesc, signature.GetAddressOf(), error.GetAddressOf());\n  } else {\n    // Device only supports Root Signature 1.0. Clamp any unbounded descriptor ranges\n    // (NumDescriptors == UINT_MAX) to a large but finite conservative value so that\n    // the serialized root signature is portable across RS 1.0 implementations.\n    constexpr UINT kMaxDescriptorsFallback = 16384; // Sufficient for current heap sizes.\n\n    std::vector<D3D12_ROOT_PARAMETER> params;\n    std::vector<std::vector<D3D12_DESCRIPTOR_RANGE>> rangesPerParam;\n    params.reserve(desc.NumParameters);\n    rangesPerParam.reserve(desc.NumParameters);\n\n    for (UINT i = 0; i < desc.NumParameters; ++i) {\n      const D3D12_ROOT_PARAMETER& srcParam = desc.pParameters[i];\n      D3D12_ROOT_PARAMETER dstParam = srcParam;\n\n      if (srcParam.ParameterType == D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE &&\n          srcParam.DescriptorTable.NumDescriptorRanges > 0 &&\n          srcParam.DescriptorTable.pDescriptorRanges) {\n        const UINT numRanges = srcParam.DescriptorTable.NumDescriptorRanges;\n        const D3D12_DESCRIPTOR_RANGE* srcRanges = srcParam.DescriptorTable.pDescriptorRanges;\n\n        rangesPerParam.emplace_back();\n        auto& dstRanges = rangesPerParam.back();\n        dstRanges.resize(numRanges);\n\n        for (UINT j = 0; j < numRanges; ++j) {\n          dstRanges[j] = srcRanges[j];\n          if (dstRanges[j].NumDescriptors == UINT_MAX) {\n            dstRanges[j].NumDescriptors = kMaxDescriptorsFallback;\n          }\n        }\n\n        dstParam.DescriptorTable.NumDescriptorRanges = numRanges;\n        dstParam.DescriptorTable.pDescriptorRanges = dstRanges.data();\n      }\n\n      params.push_back(dstParam);\n    }\n\n    D3D12_ROOT_SIGNATURE_DESC adjustedDesc{};\n    adjustedDesc.NumParameters = static_cast<UINT>(params.size());\n    adjustedDesc.pParameters = params.data();\n    adjustedDesc.NumStaticSamplers = desc.NumStaticSamplers;\n    adjustedDesc.pStaticSamplers = desc.pStaticSamplers;\n    adjustedDesc.Flags = desc.Flags;\n\n    IGL_D3D12_LOG_VERBOSE(\"  Serializing root signature (version 1.0, bounded ranges)...\\n\");\n    hr = D3D12SerializeRootSignature(&adjustedDesc,\n                                     D3D_ROOT_SIGNATURE_VERSION_1,\n                                     signature.GetAddressOf(),\n                                     error.GetAddressOf());\n  }\n\n  if (FAILED(hr)) {\n    if (error.Get()) {\n      const char* errorMsg = static_cast<const char*>(error->GetBufferPointer());\n      IGL_LOG_ERROR(\"Root signature serialization error: %s\\n\", errorMsg);\n    }\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Failed to serialize root signature\");\n    return nullptr;\n  }\n\n  ComPtr<ID3D12RootSignature> rootSignature;\n  hr = d3dDevice->CreateRootSignature(0,\n                                      signature->GetBufferPointer(),\n                                      signature->GetBufferSize(),\n                                      IID_PPV_ARGS(rootSignature.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"  CreateRootSignature FAILED: 0x%08X\\n\", static_cast<unsigned>(hr));\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Failed to create root signature\");\n    return nullptr;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"  Root signature created successfully\\n\");\n\n  {\n    std::lock_guard<std::mutex> lock(rootSignatureCacheMutex_);\n    rootSignatureCache_[hash] = rootSignature;\n  }\n\n  return rootSignature;\n}\n\ninline size_t D3D12PipelineCache::hashRenderPipelineDesc(const RenderPipelineDesc& desc) const {\n  size_t hash = 0;\n\n  if (desc.shaderStages) {\n    auto* vertexModule =\n        static_cast<const ShaderModule*>(desc.shaderStages->getVertexModule().get());\n    auto* fragmentModule =\n        static_cast<const ShaderModule*>(desc.shaderStages->getFragmentModule().get());\n\n    if (vertexModule) {\n      const auto& vsBytecode = vertexModule->getBytecode();\n      hashCombine(hash, vsBytecode.size());\n      size_t bytesToHash = std::min<size_t>(256, vsBytecode.size());\n      for (size_t i = 0; i < bytesToHash; i += 8) {\n        hashCombine(hash, static_cast<size_t>(vsBytecode[i]));\n      }\n    }\n\n    if (fragmentModule) {\n      const auto& psBytecode = fragmentModule->getBytecode();\n      hashCombine(hash, psBytecode.size());\n      size_t bytesToHash = std::min<size_t>(256, psBytecode.size());\n      for (size_t i = 0; i < bytesToHash; i += 8) {\n        hashCombine(hash, static_cast<size_t>(psBytecode[i]));\n      }\n    }\n  }\n\n  if (desc.vertexInputState) {\n    auto* d3d12VertexInput = static_cast<const VertexInputState*>(desc.vertexInputState.get());\n    const auto& vertexDesc = d3d12VertexInput->getDesc();\n    hashCombine(hash, vertexDesc.numAttributes);\n    for (size_t i = 0; i < vertexDesc.numAttributes; ++i) {\n      hashCombine(hash, static_cast<size_t>(vertexDesc.attributes[i].format));\n      hashCombine(hash, vertexDesc.attributes[i].offset);\n      hashCombine(hash, vertexDesc.attributes[i].bufferIndex);\n      hashCombine(hash, std::hash<std::string>{}(vertexDesc.attributes[i].name));\n    }\n  }\n\n  hashCombine(hash, desc.targetDesc.colorAttachments.size());\n  for (const auto& att : desc.targetDesc.colorAttachments) {\n    hashCombine(hash, static_cast<size_t>(att.textureFormat));\n  }\n  hashCombine(hash, static_cast<size_t>(desc.targetDesc.depthAttachmentFormat));\n  hashCombine(hash, static_cast<size_t>(desc.targetDesc.stencilAttachmentFormat));\n\n  for (const auto& att : desc.targetDesc.colorAttachments) {\n    hashCombine(hash, att.blendEnabled ? 1 : 0);\n    hashCombine(hash, static_cast<size_t>(att.srcRGBBlendFactor));\n    hashCombine(hash, static_cast<size_t>(att.dstRGBBlendFactor));\n    hashCombine(hash, static_cast<size_t>(att.rgbBlendOp));\n    hashCombine(hash, static_cast<size_t>(att.srcAlphaBlendFactor));\n    hashCombine(hash, static_cast<size_t>(att.dstAlphaBlendFactor));\n    hashCombine(hash, static_cast<size_t>(att.alphaBlendOp));\n    hashCombine(hash, static_cast<size_t>(att.colorWriteMask));\n  }\n\n  hashCombine(hash, static_cast<size_t>(desc.cullMode));\n  hashCombine(hash, static_cast<size_t>(desc.frontFaceWinding));\n  hashCombine(hash, static_cast<size_t>(desc.polygonFillMode));\n\n  hashCombine(hash, static_cast<size_t>(desc.topology));\n\n  hashCombine(hash, desc.sampleCount);\n\n  return hash;\n}\n\ninline size_t D3D12PipelineCache::hashComputePipelineDesc(const ComputePipelineDesc& desc) const {\n  size_t hash = 0;\n\n  if (desc.shaderStages) {\n    auto* computeModule =\n        static_cast<const ShaderModule*>(desc.shaderStages->getComputeModule().get());\n\n    if (computeModule) {\n      const auto& csBytecode = computeModule->getBytecode();\n      hashCombine(hash, csBytecode.size());\n      size_t bytesToHash = std::min<size_t>(256, csBytecode.size());\n      for (size_t i = 0; i < bytesToHash; i += 8) {\n        hashCombine(hash, static_cast<size_t>(csBytecode[i]));\n      }\n    }\n  }\n\n  for (char c : desc.debugName) {\n    hashCombine(hash, static_cast<size_t>(c));\n  }\n\n  return hash;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12PresentManager.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12PresentManager.h>\n\n#include <d3d12sdklayers.h>\n#include <vector>\n#include <igl/d3d12/D3D12Context.h>\n\nnamespace igl::d3d12 {\n\nbool PresentManager::present() {\n  auto* swapChain = context_.getSwapChain();\n  if (!swapChain) {\n    return true; // No swapchain, nothing to present\n  }\n\n  auto* device = context_.getDevice();\n\n  // Check device status before presenting\n  if (!checkDeviceStatus(\"before Present\")) {\n    return false;\n  }\n\n  // Configure VSync via environment variable\n  UINT syncInterval = 1;\n  UINT presentFlags = 0;\n  {\n    char buf[8] = {};\n    if (GetEnvironmentVariableA(\"IGL_D3D12_VSYNC\", buf, sizeof(buf)) > 0) {\n      if (buf[0] == '0') {\n        syncInterval = 0;\n        if (context_.isTearingSupported()) {\n          presentFlags |= DXGI_PRESENT_ALLOW_TEARING;\n        }\n      }\n    }\n  }\n\n  // Present\n  HRESULT presentHr = swapChain->Present(syncInterval, presentFlags);\n  if (FAILED(presentHr)) {\n    IGL_LOG_ERROR(\"PresentManager: Present failed: 0x%08X\\n\", static_cast<unsigned>(presentHr));\n\n    // Check if device was removed during Present\n    HRESULT deviceStatus = device->GetDeviceRemovedReason();\n    if (FAILED(deviceStatus)) {\n      IGL_LOG_ERROR(\"PresentManager: DEVICE REMOVED during Present! Reason: 0x%08X\\n\",\n                    static_cast<unsigned>(deviceStatus));\n#ifdef IGL_DEBUG\n      logInfoQueueMessages(device);\n      logDredInfo(device);\n#endif\n      IGL_DEBUG_ASSERT(false);\n    } else {\n      IGL_LOG_ERROR(\n          \"PresentManager: Present failed but device reports OK; check swapchain/window state\\n\");\n    }\n    // Present failed - return false regardless of whether device was removed\n    return false;\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"PresentManager: Present OK\\n\");\n#endif\n\n  // Check device status after Present\n  if (!checkDeviceStatus(\"after Present\")) {\n    return false;\n  }\n\n  return true;\n}\n\nbool PresentManager::checkDeviceStatus(const char* contextStr) {\n  auto* device = context_.getDevice();\n  HRESULT deviceStatus = device->GetDeviceRemovedReason();\n\n  if (FAILED(deviceStatus)) {\n    IGL_LOG_ERROR(\"PresentManager: DEVICE REMOVED %s! Reason: 0x%08X\\n\",\n                  contextStr,\n                  static_cast<unsigned>(deviceStatus));\n#ifdef IGL_DEBUG\n    logInfoQueueMessages(device);\n    logDredInfo(device);\n#endif\n    IGL_DEBUG_ASSERT(false);\n    return false;\n  }\n\n  return true;\n}\n\n#ifdef IGL_DEBUG\nvoid PresentManager::logInfoQueueMessages(ID3D12Device* device) {\n  igl::d3d12::ComPtr<ID3D12InfoQueue> infoQueue;\n  if (FAILED(device->QueryInterface(IID_PPV_ARGS(infoQueue.GetAddressOf())))) {\n    return;\n  }\n\n  UINT64 numMessages = infoQueue->GetNumStoredMessages();\n  IGL_D3D12_LOG_VERBOSE(\"D3D12 Info Queue has %llu messages:\\n\", numMessages);\n  for (UINT64 i = 0; i < numMessages; ++i) {\n    SIZE_T messageLength = 0;\n    infoQueue->GetMessage(i, nullptr, &messageLength);\n    if (messageLength == 0) {\n      continue;\n    }\n    // Use RAII vector instead of malloc/free\n    std::vector<uint8_t> messageBuffer(messageLength);\n    auto* message = reinterpret_cast<D3D12_MESSAGE*>(messageBuffer.data());\n    if (SUCCEEDED(infoQueue->GetMessage(i, message, &messageLength))) {\n      const char* severityStr = \"UNKNOWN\";\n      switch (message->Severity) {\n      case D3D12_MESSAGE_SEVERITY_CORRUPTION:\n        severityStr = \"CORRUPTION\";\n        break;\n      case D3D12_MESSAGE_SEVERITY_ERROR:\n        severityStr = \"ERROR\";\n        break;\n      case D3D12_MESSAGE_SEVERITY_WARNING:\n        severityStr = \"WARNING\";\n        break;\n      case D3D12_MESSAGE_SEVERITY_INFO:\n        severityStr = \"INFO\";\n        break;\n      case D3D12_MESSAGE_SEVERITY_MESSAGE:\n        severityStr = \"MESSAGE\";\n        break;\n      }\n      IGL_D3D12_LOG_VERBOSE(\"  [%s] %s\\n\", severityStr, message->pDescription);\n    }\n    // messageBuffer automatically freed at end of scope\n  }\n}\n\nvoid PresentManager::logDredInfo(ID3D12Device* device) {\n#if defined(__ID3D12DeviceRemovedExtendedData1_INTERFACE_DEFINED__)\n  igl::d3d12::ComPtr<ID3D12DeviceRemovedExtendedData1> dred;\n  if (FAILED(device->QueryInterface(IID_PPV_ARGS(dred.GetAddressOf())))) {\n    IGL_D3D12_LOG_VERBOSE(\"DRED: ID3D12DeviceRemovedExtendedData1 not available.\\n\");\n    return;\n  }\n\n  D3D12_DRED_AUTO_BREADCRUMBS_OUTPUT1 breadcrumbs = {};\n  if (SUCCEEDED(dred->GetAutoBreadcrumbsOutput1(&breadcrumbs)) &&\n      breadcrumbs.pHeadAutoBreadcrumbNode) {\n    IGL_LOG_ERROR(\"DRED AutoBreadcrumbs (most recent first):\\n\");\n    const D3D12_AUTO_BREADCRUMB_NODE1* node = breadcrumbs.pHeadAutoBreadcrumbNode;\n    uint32_t nodeIndex = 0;\n    constexpr uint32_t kMaxNodesToPrint = 16;\n    while (node && nodeIndex < kMaxNodesToPrint) {\n      const char* listName = node->pCommandListDebugNameA ? node->pCommandListDebugNameA\n                                                          : \"<unnamed>\";\n      const char* queueName = node->pCommandQueueDebugNameA ? node->pCommandQueueDebugNameA\n                                                            : \"<unnamed>\";\n      IGL_LOG_ERROR(\n          \"  Node #%u: CommandList=%p (%s) CommandQueue=%p (%s) Breadcrumbs=%u completed=%u\\n\",\n          nodeIndex,\n          node->pCommandList,\n          listName,\n          node->pCommandQueue,\n          queueName,\n          node->BreadcrumbCount,\n          node->pLastBreadcrumbValue ? *node->pLastBreadcrumbValue : 0);\n      if (node->pCommandHistory && node->BreadcrumbCount > 0) {\n        D3D12_AUTO_BREADCRUMB_OP lastOp = node->pCommandHistory[node->BreadcrumbCount - 1];\n        IGL_LOG_ERROR(\"    Last command: %d (history count=%u)\\n\",\n                      static_cast<int>(lastOp),\n                      node->BreadcrumbCount);\n      }\n      node = node->pNext;\n      ++nodeIndex;\n    }\n    if (node) {\n      IGL_LOG_ERROR(\"  ... additional breadcrumbs omitted ...\\n\");\n    }\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"DRED: No auto breadcrumbs captured.\\n\");\n  }\n\n  D3D12_DRED_PAGE_FAULT_OUTPUT1 pageFault = {};\n  if (SUCCEEDED(dred->GetPageFaultAllocationOutput1(&pageFault)) && pageFault.PageFaultVA != 0) {\n    IGL_LOG_ERROR(\"DRED PageFault: VA=0x%016llx\\n\", pageFault.PageFaultVA);\n    if (pageFault.pHeadExistingAllocationNode) {\n      const auto* alloc = pageFault.pHeadExistingAllocationNode;\n      IGL_LOG_ERROR(\"  Existing allocation: Object=%p Name=%s Type=%u\\n\",\n                    alloc->pObject,\n                    alloc->ObjectNameA ? alloc->ObjectNameA : \"<unnamed>\",\n                    static_cast<unsigned>(alloc->AllocationType));\n    }\n    if (pageFault.pHeadRecentFreedAllocationNode) {\n      const auto* freed = pageFault.pHeadRecentFreedAllocationNode;\n      IGL_LOG_ERROR(\"  Recently freed allocation: Object=%p Name=%s Type=%u\\n\",\n                    freed->pObject,\n                    freed->ObjectNameA ? freed->ObjectNameA : \"<unnamed>\",\n                    static_cast<unsigned>(freed->AllocationType));\n    }\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"DRED: No page fault data available.\\n\");\n  }\n#else\n  (void)device;\n  IGL_D3D12_LOG_VERBOSE(\"DRED: Extended data interfaces not available on this SDK.\\n\");\n#endif\n}\n#endif // IGL_DEBUG\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12PresentManager.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass D3D12Context;\n\n/**\n * @brief Manages swapchain presentation with device removal detection\n *\n * Handles:\n * - VSync configuration via environment variable\n * - Present flags (tearing support)\n * - Device removal detection before/after Present\n * - DRED and Info Queue diagnostics on failure\n */\nclass PresentManager final {\n public:\n  explicit PresentManager(D3D12Context& context) : context_(context) {}\n\n  /**\n   * @brief Present the current frame with proper error handling\n   *\n   * Checks device status before and after Present, logs diagnostics on failure.\n   * Does not throw - sets device lost flag for application to check.\n   *\n   * @return true if present succeeded, false if device was removed or present failed\n   */\n  bool present();\n\n private:\n  /**\n   * @brief Check device status and log diagnostics if removed\n   */\n  bool checkDeviceStatus(const char* context);\n\n#ifdef IGL_DEBUG\n  /**\n   * @brief Log Info Queue messages for debugging (debug builds only)\n   */\n  void logInfoQueueMessages(ID3D12Device* device);\n\n  /**\n   * @brief Log DRED breadcrumbs and page fault info (debug builds only)\n   */\n  void logDredInfo(ID3D12Device* device);\n#endif\n\n  D3D12Context& context_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12ReflectionUtils.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12ReflectionUtils.h>\n\nnamespace igl::d3d12::ReflectionUtils {\n\nigl::UniformType mapUniformType(const D3D12_SHADER_TYPE_DESC& td) {\n  if ((td.Class == D3D_SVC_MATRIX_ROWS || td.Class == D3D_SVC_MATRIX_COLUMNS) && td.Rows == 4 &&\n      td.Columns == 4) {\n    return igl::UniformType::Mat4x4;\n  }\n  if (td.Type == D3D_SVT_FLOAT) {\n    if (td.Class == D3D_SVC_SCALAR)\n      return igl::UniformType::Float;\n    if (td.Class == D3D_SVC_VECTOR) {\n      switch (td.Columns) {\n      case 2:\n        return igl::UniformType::Float2;\n      case 3:\n        return igl::UniformType::Float3;\n      case 4:\n        return igl::UniformType::Float4;\n      default:\n        return igl::UniformType::Invalid;\n      }\n    }\n  }\n  return igl::UniformType::Invalid;\n}\n\n} // namespace igl::d3d12::ReflectionUtils\n"
  },
  {
    "path": "src/igl/d3d12/D3D12ReflectionUtils.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Uniform.h>\n#include <igl/d3d12/D3D12Headers.h>\n\nnamespace igl::d3d12::ReflectionUtils {\n\n/**\n * Maps D3D12 shader type descriptor to IGL uniform type\n *\n * Supported types:\n * - float (D3D_SVT_FLOAT + D3D_SVC_SCALAR) → UniformType::Float\n * - float2/3/4 (D3D_SVT_FLOAT + D3D_SVC_VECTOR) → UniformType::Float2/3/4\n * - float4x4 (D3D_SVC_MATRIX_ROWS/COLUMNS, 4x4) → UniformType::Mat4x4\n *\n * All other types (int, uint, bool, matrices other than 4x4, etc.) map to UniformType::Invalid\n *\n * @param td D3D12 shader type descriptor from reflection\n * @return Corresponding IGL UniformType, or UniformType::Invalid for unsupported types\n */\nigl::UniformType mapUniformType(const D3D12_SHADER_TYPE_DESC& td);\n\n} // namespace igl::d3d12::ReflectionUtils\n"
  },
  {
    "path": "src/igl/d3d12/D3D12ResourcesBinder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12ResourcesBinder.h>\n\n#include <igl/d3d12/Buffer.h>\n#include <igl/d3d12/CommandBuffer.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/RenderPipelineState.h>\n#include <igl/d3d12/SamplerState.h>\n#include <igl/d3d12/Texture.h>\n\nnamespace igl::d3d12 {\n\nnamespace {\n// D3D12 alignment requirement for constant buffer views\nconstexpr size_t kConstantBufferAlignment = 256;\nconstexpr size_t kMaxCBVSize = 65536; // 64 KB (D3D12 spec limit)\n\n// Compute pipeline hardcoded root parameter layout\n// Note: Graphics pipelines use pure reflection-based layout queried from RenderPipelineState\n// Compute pipelines still use this hardcoded layout (should be migrated to reflection)\nconstexpr uint32_t kComputeRootParam_PushConstants = 0;\nconstexpr uint32_t kComputeRootParam_UAVTable = 1;\nconstexpr uint32_t kComputeRootParam_SRVTable = 2;\nconstexpr uint32_t kComputeRootParam_CBVTable = 3;\nconstexpr uint32_t kComputeRootParam_SamplerTable = 4;\n\n} // namespace\n\nD3D12ResourcesBinder::D3D12ResourcesBinder(CommandBuffer& commandBuffer, bool isCompute) :\n  commandBuffer_(commandBuffer), isCompute_(isCompute) {}\n\nvoid D3D12ResourcesBinder::bindTexture(uint32_t index, ITexture* texture) {\n  if (index >= IGL_TEXTURE_SAMPLERS_MAX) {\n    IGL_LOG_ERROR(\"D3D12ResourcesBinder::bindTexture: index %u exceeds maximum %u\\n\",\n                  index,\n                  IGL_TEXTURE_SAMPLERS_MAX);\n    return;\n  }\n\n  if (!texture) {\n    // Unbind texture at this slot\n    if (index < bindingsTextures_.count) {\n      bindingsTextures_.textures[index] = nullptr;\n      bindingsTextures_.handles[index] = {};\n      // Update count to highest bound slot + 1\n      while (bindingsTextures_.count > 0 &&\n             bindingsTextures_.textures[bindingsTextures_.count - 1] == nullptr) {\n        bindingsTextures_.count--;\n      }\n    }\n    dirtyFlags_ |= DirtyFlagBits_Textures;\n    return;\n  }\n\n  auto* d3dTexture = static_cast<Texture*>(texture);\n  ID3D12Resource* resource = d3dTexture->getResource();\n\n  if (!resource) {\n    IGL_LOG_ERROR(\"D3D12ResourcesBinder::bindTexture: texture resource is null\\n\");\n    return;\n  }\n\n  // Transition texture to shader resource state\n  // Note: This must happen immediately, not deferred until updateBindings()\n  // Use pipeline-specific states for optimal barrier tracking:\n  // - Graphics: PIXEL_SHADER_RESOURCE (pixel shader read)\n  // - Compute: NON_PIXEL_SHADER_RESOURCE (compute/vertex/geometry shader read)\n  auto* commandList = commandBuffer_.getCommandList();\n  const auto targetState = isCompute_ ? D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE\n                                      : D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;\n  d3dTexture->transitionAll(commandList, targetState);\n\n  // Store texture pointer for descriptor creation in updateBindings()\n  bindingsTextures_.textures[index] = texture;\n\n  // Mark textures dirty - descriptor will be created in updateBindings()\n  dirtyFlags_ |= DirtyFlagBits_Textures;\n\n  // Update binding count\n  if (index >= bindingsTextures_.count) {\n    bindingsTextures_.count = index + 1;\n  }\n}\n\nvoid D3D12ResourcesBinder::bindSamplerState(uint32_t index, ISamplerState* samplerState) {\n  if (index >= IGL_TEXTURE_SAMPLERS_MAX) {\n    IGL_LOG_ERROR(\"D3D12ResourcesBinder::bindSamplerState: index %u exceeds maximum %u\\n\",\n                  index,\n                  IGL_TEXTURE_SAMPLERS_MAX);\n    return;\n  }\n\n  if (!samplerState) {\n    // Unbind sampler at this slot\n    if (index < bindingsSamplers_.count) {\n      bindingsSamplers_.samplers[index] = nullptr;\n      bindingsSamplers_.handles[index] = {};\n      // Update count to highest bound slot + 1\n      while (bindingsSamplers_.count > 0 &&\n             bindingsSamplers_.samplers[bindingsSamplers_.count - 1] == nullptr) {\n        bindingsSamplers_.count--;\n      }\n    }\n    dirtyFlags_ |= DirtyFlagBits_Samplers;\n    return;\n  }\n\n  // Store sampler pointer for descriptor creation in updateBindings()\n  bindingsSamplers_.samplers[index] = samplerState;\n\n  // Mark samplers dirty - descriptor will be created in updateBindings()\n  dirtyFlags_ |= DirtyFlagBits_Samplers;\n\n  // Update binding count\n  if (index >= bindingsSamplers_.count) {\n    bindingsSamplers_.count = index + 1;\n  }\n}\n\nvoid D3D12ResourcesBinder::bindBuffer(uint32_t index,\n                                      IBuffer* buffer,\n                                      size_t offset,\n                                      size_t size,\n                                      bool isUAV,\n                                      size_t elementStride) {\n  if (index >= IGL_BUFFER_BINDINGS_MAX) {\n    IGL_LOG_ERROR(\"D3D12ResourcesBinder::bindBuffer: index %u exceeds maximum %u\\n\",\n                  index,\n                  IGL_BUFFER_BINDINGS_MAX);\n    return;\n  }\n\n  if (!buffer) {\n    // Unbind buffer/UAV at this slot\n    if (isUAV) {\n      if (index < bindingsUAVs_.count) {\n        bindingsUAVs_.buffers[index] = nullptr;\n        bindingsUAVs_.offsets[index] = 0;\n        bindingsUAVs_.elementStrides[index] = 0;\n        bindingsUAVs_.handles[index] = {};\n        while (bindingsUAVs_.count > 0 &&\n               bindingsUAVs_.buffers[bindingsUAVs_.count - 1] == nullptr) {\n          bindingsUAVs_.count--;\n        }\n      }\n      dirtyFlags_ |= DirtyFlagBits_UAVs;\n    } else {\n      if (index < bindingsBuffers_.count) {\n        bindingsBuffers_.buffers[index] = nullptr;\n        bindingsBuffers_.addresses[index] = 0;\n        bindingsBuffers_.offsets[index] = 0;\n        bindingsBuffers_.sizes[index] = 0;\n        while (bindingsBuffers_.count > 0 &&\n               bindingsBuffers_.buffers[bindingsBuffers_.count - 1] == nullptr) {\n          bindingsBuffers_.count--;\n        }\n      }\n      dirtyFlags_ |= DirtyFlagBits_Buffers;\n    }\n    return;\n  }\n\n  auto* d3dBuffer = static_cast<Buffer*>(buffer);\n  ID3D12Resource* resource = d3dBuffer->getResource();\n\n  if (!resource) {\n    IGL_LOG_ERROR(\"D3D12ResourcesBinder::bindBuffer: buffer resource is null\\n\");\n    return;\n  }\n\n  if (isUAV) {\n    // Storage buffer (UAV) - store buffer pointer, offset, and element stride for descriptor\n    // creation\n    if (elementStride == 0) {\n      IGL_LOG_ERROR(\n          \"D3D12ResourcesBinder::bindBuffer: UAV binding requires non-zero elementStride\\n\");\n      return;\n    }\n    bindingsUAVs_.buffers[index] = buffer;\n    bindingsUAVs_.offsets[index] = offset;\n    bindingsUAVs_.elementStrides[index] = elementStride;\n    dirtyFlags_ |= DirtyFlagBits_UAVs;\n    if (index >= bindingsUAVs_.count) {\n      bindingsUAVs_.count = index + 1;\n    }\n  } else {\n    // Uniform buffer (CBV) - D3D12 requires 256-byte alignment for CBV addresses\n    // Compute base address (must be 256-byte aligned)\n    D3D12_GPU_VIRTUAL_ADDRESS baseAddress = resource->GetGPUVirtualAddress();\n    D3D12_GPU_VIRTUAL_ADDRESS alignedAddress =\n        (baseAddress + offset) & ~(kConstantBufferAlignment - 1);\n\n    bindingsBuffers_.buffers[index] = buffer;\n    bindingsBuffers_.addresses[index] = alignedAddress;\n    bindingsBuffers_.offsets[index] = offset;\n    bindingsBuffers_.sizes[index] = size;\n    dirtyFlags_ |= DirtyFlagBits_Buffers;\n    if (index >= bindingsBuffers_.count) {\n      bindingsBuffers_.count = index + 1;\n    }\n  }\n}\n\nbool D3D12ResourcesBinder::updateBindings(const RenderPipelineState* renderPipeline,\n                                          Result* outResult) {\n  auto* commandList = commandBuffer_.getCommandList();\n  auto& context = commandBuffer_.getContext();\n  auto* device = context.getDevice();\n\n  if (!commandList || !device) {\n    if (outResult) {\n      *outResult = Result{Result::Code::RuntimeError, \"Invalid command list or device\"};\n    }\n    return false;\n  }\n\n  bool success = true;\n\n  // Update textures (SRV table)\n  if (dirtyFlags_ & DirtyFlagBits_Textures) {\n    if (!updateTextureBindings(commandList, device, renderPipeline, outResult)) {\n      success = false;\n    }\n  }\n\n  // Update samplers (sampler table)\n  if (dirtyFlags_ & DirtyFlagBits_Samplers) {\n    if (!updateSamplerBindings(commandList, device, renderPipeline, outResult)) {\n      success = false;\n    }\n  }\n\n  // Update buffers (CBV table)\n  if (dirtyFlags_ & DirtyFlagBits_Buffers) {\n    if (!updateBufferBindings(commandList, device, renderPipeline, outResult)) {\n      success = false;\n    }\n  }\n\n  // Update UAVs (UAV table for compute)\n  if ((dirtyFlags_ & DirtyFlagBits_UAVs) && isCompute_) {\n    if (!updateUAVBindings(commandList, device, outResult)) {\n      success = false;\n    }\n  }\n\n  // Clear dirty flags\n  dirtyFlags_ = 0;\n\n  return success;\n}\n\nvoid D3D12ResourcesBinder::reset() {\n  bindingsTextures_ = {};\n  bindingsSamplers_ = {};\n  bindingsBuffers_ = {};\n  bindingsUAVs_ = {};\n  dirtyFlags_ =\n      DirtyFlagBits_Textures | DirtyFlagBits_Samplers | DirtyFlagBits_Buffers | DirtyFlagBits_UAVs;\n}\n\nbool D3D12ResourcesBinder::updateTextureBindings(ID3D12GraphicsCommandList* cmdList,\n                                                 ID3D12Device* device,\n                                                 const RenderPipelineState* renderPipeline,\n                                                 Result* outResult) {\n  if (bindingsTextures_.count == 0) {\n    return true; // Nothing to bind\n  }\n\n  auto& context = commandBuffer_.getContext();\n\n  // Determine how many descriptors to allocate based on pipeline's root signature\n  // For graphics: Use pipeline's declared SRV range (0 to maxSRVSlot inclusive)\n  // For compute: Use bindingsTextures_.count (legacy sparse allocation)\n  uint32_t descriptorRangeSize = bindingsTextures_.count;\n\n  if (!isCompute_ && renderPipeline) {\n    // Graphics pipeline: Match root signature's SRV descriptor range exactly\n    const UINT pipelineSRVCount = renderPipeline->getSRVDescriptorCount();\n    if (pipelineSRVCount > 0) {\n      descriptorRangeSize = pipelineSRVCount;\n      IGL_D3D12_LOG_VERBOSE(\"updateTextureBindings: Using pipeline SRV range size=%u (bound=%u)\\n\",\n                            descriptorRangeSize,\n                            bindingsTextures_.count);\n    }\n  }\n\n  // Allocate a contiguous range of descriptors for all textures on a single page\n  // This ensures we can bind them as a single descriptor table\n  uint32_t baseDescriptorIndex = 0;\n  Result allocResult =\n      commandBuffer_.allocateCbvSrvUavRange(descriptorRangeSize, &baseDescriptorIndex);\n  if (!allocResult.isOk()) {\n    IGL_LOG_ERROR(\n        \"D3D12ResourcesBinder: Failed to allocate contiguous SRV range (%u descriptors): %s\\n\",\n        descriptorRangeSize,\n        allocResult.message.c_str());\n    if (outResult) {\n      *outResult = allocResult;\n    }\n    return false;\n  }\n\n  // Create SRV descriptors for all texture slots from 0 to descriptorRangeSize-1.\n  // For unbound slots, emit a null SRV so that the descriptor table is fully\n  // initialized and matches the root signature descriptor range exactly.\n  for (uint32_t i = 0; i < descriptorRangeSize; ++i) {\n    const uint32_t descriptorIndex = baseDescriptorIndex + i;\n    D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n    D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(descriptorIndex);\n\n    // Check if this slot is bound (may be null if beyond bindingsTextures_.count)\n    auto* texture = (i < bindingsTextures_.count) ? bindingsTextures_.textures[i] : nullptr;\n    if (!texture) {\n      // Create an explicit null SRV descriptor. D3D12 does not permit both\n      // the resource AND the descriptor pointer to be null, so we bind a\n      // well-formed descriptor with zeroed fields instead. This is treated as\n      // a null descriptor by the runtime.\n      D3D12_SHADER_RESOURCE_VIEW_DESC nullSrv = {};\n      nullSrv.Format = DXGI_FORMAT_R8G8B8A8_UNORM;\n      nullSrv.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;\n      nullSrv.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;\n      nullSrv.Texture2D.MipLevels = 1;\n      device->CreateShaderResourceView(nullptr, &nullSrv, cpuHandle);\n      D3D12Context::trackResourceCreation(\"SRV\", 0);\n      // Only cache handle if within bounds (avoid out-of-bounds write)\n      if (i < IGL_TEXTURE_SAMPLERS_MAX) {\n        bindingsTextures_.handles[i] = gpuHandle;\n      }\n      continue;\n    }\n\n    auto* d3dTexture = static_cast<Texture*>(texture);\n    ID3D12Resource* resource = d3dTexture->getResource();\n    if (!resource) {\n      D3D12_SHADER_RESOURCE_VIEW_DESC nullSrv = {};\n      nullSrv.Format = DXGI_FORMAT_R8G8B8A8_UNORM;\n      nullSrv.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;\n      nullSrv.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;\n      nullSrv.Texture2D.MipLevels = 1;\n      device->CreateShaderResourceView(nullptr, &nullSrv, cpuHandle);\n      D3D12Context::trackResourceCreation(\"SRV\", 0);\n      // Only cache handle if within bounds (avoid out-of-bounds write)\n      if (i < IGL_TEXTURE_SAMPLERS_MAX) {\n        bindingsTextures_.handles[i] = gpuHandle;\n      }\n      continue;\n    }\n\n    D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};\n    srvDesc.Format = textureFormatToDXGIShaderResourceViewFormat(d3dTexture->getFormat());\n    srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;\n\n    auto resourceDesc = resource->GetDesc();\n    const bool isView = d3dTexture->isView();\n    const uint32_t mostDetailedMip = isView ? d3dTexture->getMipLevelOffset() : 0;\n    const uint32_t mipLevels = isView ? d3dTexture->getNumMipLevelsInView()\n                                      : d3dTexture->getNumMipLevels();\n\n    if (resourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE3D) {\n      srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE3D;\n      srvDesc.Texture3D.MipLevels = mipLevels;\n      srvDesc.Texture3D.MostDetailedMip = mostDetailedMip;\n    } else if (resourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE2D) {\n      const auto textureType = d3dTexture->getType();\n      const bool isArrayTexture = (isView && d3dTexture->getNumArraySlicesInView() > 0) ||\n                                  (!isView && resourceDesc.DepthOrArraySize > 1);\n\n      // Prioritize cube textures so that cubemaps created as 2D arrays\n      // with 6 faces are exposed as TEXTURECUBE to shaders that declare\n      // TextureCube / samplerCube.\n      if (textureType == TextureType::Cube) {\n        srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURECUBE;\n        srvDesc.TextureCube.MostDetailedMip = mostDetailedMip;\n        srvDesc.TextureCube.MipLevels = mipLevels;\n      } else if (textureType == TextureType::TwoDArray || isArrayTexture) {\n        srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2DARRAY;\n        srvDesc.Texture2DArray.MostDetailedMip = mostDetailedMip;\n        srvDesc.Texture2DArray.MipLevels = mipLevels;\n        srvDesc.Texture2DArray.FirstArraySlice = isView ? d3dTexture->getArraySliceOffset() : 0;\n        srvDesc.Texture2DArray.ArraySize = isView ? d3dTexture->getNumArraySlicesInView()\n                                                  : resourceDesc.DepthOrArraySize;\n      } else {\n        srvDesc.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;\n        srvDesc.Texture2D.MostDetailedMip = mostDetailedMip;\n        srvDesc.Texture2D.MipLevels = mipLevels;\n      }\n    } else {\n      IGL_LOG_ERROR(\"D3D12ResourcesBinder: Unsupported texture dimension %d\\n\",\n                    resourceDesc.Dimension);\n      if (outResult) {\n        *outResult = Result{Result::Code::Unsupported, \"Unsupported texture dimension for SRV\"};\n      }\n      return false;\n    }\n\n    device->CreateShaderResourceView(resource, &srvDesc, cpuHandle);\n    D3D12Context::trackResourceCreation(\"SRV\", 0);\n\n    // Cache the GPU handle (only if within bounds)\n    if (i < IGL_TEXTURE_SAMPLERS_MAX) {\n      bindingsTextures_.handles[i] = gpuHandle;\n    }\n  }\n\n  // Bind the SRV table to the appropriate root parameter\n  // Use the first descriptor in the allocated range (baseDescriptorIndex)\n  D3D12_GPU_DESCRIPTOR_HANDLE tableBaseHandle = context.getCbvSrvUavGpuHandle(baseDescriptorIndex);\n\n  if (isCompute_) {\n    cmdList->SetComputeRootDescriptorTable(kComputeRootParam_SRVTable, tableBaseHandle);\n  } else {\n    // Graphics pipeline: Query reflection-based root parameter index from pipeline\n    if (!renderPipeline) {\n      IGL_LOG_ERROR(\"updateTextureBindings: renderPipeline is NULL, cannot bind SRV table\\n\");\n    } else {\n      const UINT srvTableIndex = renderPipeline->getSRVTableRootParameterIndex();\n      IGL_D3D12_LOG_VERBOSE(\n          \"updateTextureBindings: srvTableIndex=%u (UINT_MAX=%u)\\n\", srvTableIndex, UINT_MAX);\n      if (srvTableIndex != UINT_MAX) {\n        cmdList->SetGraphicsRootDescriptorTable(srvTableIndex, tableBaseHandle);\n        IGL_D3D12_LOG_VERBOSE(\n            \"updateTextureBindings: Bound SRV table to root param %u (range size %u)\\n\",\n            srvTableIndex,\n            descriptorRangeSize);\n      } else {\n        IGL_LOG_ERROR(\n            \"updateTextureBindings: srvTableIndex is UINT_MAX, shader doesn't use SRVs?\\n\");\n      }\n    }\n  }\n\n  return true;\n}\n\nbool D3D12ResourcesBinder::updateSamplerBindings(ID3D12GraphicsCommandList* cmdList,\n                                                 ID3D12Device* device,\n                                                 const RenderPipelineState* renderPipeline,\n                                                 Result* outResult) {\n  if (bindingsSamplers_.count == 0) {\n    return true; // Nothing to bind\n  }\n\n  auto& context = commandBuffer_.getContext();\n\n  // Determine how many descriptors to allocate based on pipeline's root signature\n  // For graphics: Use pipeline's declared sampler range (0 to maxSamplerSlot inclusive)\n  // For compute: Use bindingsSamplers_.count (legacy behavior)\n  uint32_t descriptorRangeSize = bindingsSamplers_.count;\n\n  if (!isCompute_ && renderPipeline) {\n    // Graphics pipeline: Match root signature's sampler descriptor range exactly\n    const UINT pipelineSamplerCount = renderPipeline->getSamplerDescriptorCount();\n    if (pipelineSamplerCount > 0) {\n      descriptorRangeSize = pipelineSamplerCount;\n      IGL_D3D12_LOG_VERBOSE(\n          \"updateSamplerBindings: Using pipeline sampler range size=%u (bound=%u)\\n\",\n          descriptorRangeSize,\n          bindingsSamplers_.count);\n    }\n  }\n\n  // Get base sampler descriptor index for contiguous allocation\n  uint32_t baseSamplerIndex = commandBuffer_.getNextSamplerDescriptor();\n\n  // Create sampler descriptors for all slots from 0 to descriptorRangeSize-1\n  // For unbound slots, create a default sampler to fill the table\n  for (uint32_t i = 0; i < descriptorRangeSize; ++i) {\n    const uint32_t descriptorIndex = baseSamplerIndex + i;\n\n    // Get descriptor handles\n    D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getSamplerCpuHandle(descriptorIndex);\n    D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getSamplerGpuHandle(descriptorIndex);\n\n    // Check if this slot is bound (may be null if beyond bindingsSamplers_.count)\n    auto* samplerState = (i < bindingsSamplers_.count) ? bindingsSamplers_.samplers[i] : nullptr;\n\n    // Create sampler descriptor\n    D3D12_SAMPLER_DESC samplerDesc = {};\n    if (samplerState) {\n      auto* d3dSampler = static_cast<SamplerState*>(samplerState);\n      samplerDesc = d3dSampler->getDesc();\n    } else {\n      // Unbound slot: Create default sampler for unused descriptor table entries\n      samplerDesc.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;\n      samplerDesc.AddressU = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;\n      samplerDesc.AddressV = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;\n      samplerDesc.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;\n      samplerDesc.MipLODBias = 0.0f;\n      samplerDesc.MaxAnisotropy = 1;\n      samplerDesc.ComparisonFunc = D3D12_COMPARISON_FUNC_NEVER;\n      samplerDesc.BorderColor[0] = 0.0f;\n      samplerDesc.BorderColor[1] = 0.0f;\n      samplerDesc.BorderColor[2] = 0.0f;\n      samplerDesc.BorderColor[3] = 0.0f;\n      samplerDesc.MinLOD = 0.0f;\n      samplerDesc.MaxLOD = D3D12_FLOAT32_MAX;\n    }\n\n    device->CreateSampler(&samplerDesc, cpuHandle);\n    D3D12Context::trackResourceCreation(\"Sampler\", 0);\n\n    // Cache the GPU handle (only if within bounds)\n    if (i < IGL_TEXTURE_SAMPLERS_MAX) {\n      bindingsSamplers_.handles[i] = gpuHandle;\n    }\n  }\n\n  // Update sampler descriptor counter to reserve the allocated range\n  commandBuffer_.getNextSamplerDescriptor() = baseSamplerIndex + descriptorRangeSize;\n\n  // Bind the sampler table to the appropriate root parameter\n  // Use the first descriptor in the allocated range\n  D3D12_GPU_DESCRIPTOR_HANDLE tableBaseHandle = context.getSamplerGpuHandle(baseSamplerIndex);\n  if (isCompute_) {\n    cmdList->SetComputeRootDescriptorTable(kComputeRootParam_SamplerTable, tableBaseHandle);\n  } else {\n    // Graphics pipeline: Query reflection-based root parameter index from pipeline\n    if (!renderPipeline) {\n      IGL_LOG_ERROR(\"updateSamplerBindings: renderPipeline is NULL, cannot bind sampler table\\n\");\n    } else {\n      const UINT samplerTableIndex = renderPipeline->getSamplerTableRootParameterIndex();\n      IGL_D3D12_LOG_VERBOSE(\"updateSamplerBindings: samplerTableIndex=%u (UINT_MAX=%u)\\n\",\n                            samplerTableIndex,\n                            UINT_MAX);\n      if (samplerTableIndex != UINT_MAX) {\n        cmdList->SetGraphicsRootDescriptorTable(samplerTableIndex, tableBaseHandle);\n        IGL_D3D12_LOG_VERBOSE(\n            \"updateSamplerBindings: Bound sampler table to root param %u (range size %u)\\n\",\n            samplerTableIndex,\n            descriptorRangeSize);\n      } else {\n        IGL_LOG_ERROR(\n            \"updateSamplerBindings: samplerTableIndex is UINT_MAX, shader doesn't use samplers?\\n\");\n      }\n    }\n  }\n\n  return true;\n}\n\nbool D3D12ResourcesBinder::updateBufferBindings(ID3D12GraphicsCommandList* cmdList,\n                                                ID3D12Device* device,\n                                                const RenderPipelineState* renderPipeline,\n                                                Result* outResult) {\n  if (bindingsBuffers_.count == 0) {\n    return true; // Nothing to bind\n  }\n\n  if (isCompute_) {\n    // Compute pipeline: all CBVs go through descriptor table (root parameter 3)\n    auto& context = commandBuffer_.getContext();\n\n    // Count bound CBVs and validate dense binding\n    uint32_t boundCbvCount = 0;\n    for (uint32_t i = 0; i < bindingsBuffers_.count; ++i) {\n      if (bindingsBuffers_.addresses[i] != 0) {\n        boundCbvCount++;\n      }\n    }\n\n    if (boundCbvCount == 0) {\n      return true; // No CBVs to bind\n    }\n\n    // CRITICAL VALIDATION: Enforce dense CBV binding for compute shaders\n    // =====================================================================\n    // D3D12 descriptor tables bind contiguously starting from the base register.\n    // For compute CBVs, this means:\n    //   - VALID:   binding slots 0, 1, 2 (dense from b0)\n    //   - INVALID: binding slots 0, 2 (gap at slot 1)\n    //   - INVALID: binding slots 1, 2 (slot 0 not bound)\n    //\n    // This is FATAL validation - sparse bindings will return InvalidOperation error.\n    // Application code must ensure CBVs are bound densely from index 0 with no gaps.\n    //\n    // Rationale: When we call SetComputeRootDescriptorTable with N descriptors at base b0,\n    // D3D12 expects HLSL registers b0, b1, ..., b(N-1) to map 1:1 with descriptor table\n    // entries. Gaps would cause shader register mismatches and undefined behavior.\n\n    if (bindingsBuffers_.addresses[0] == 0) {\n      IGL_LOG_ERROR(\n          \"D3D12ResourcesBinder: Compute CBV bindings are sparse (slot 0 not bound). \"\n          \"D3D12 requires dense bindings starting at index 0.\\n\");\n      if (outResult) {\n        *outResult = Result{Result::Code::InvalidOperation,\n                            \"Compute CBV bindings must be dense starting at slot 0\"};\n      }\n      return false;\n    }\n\n    // Verify no gaps in binding range (all slots from 0 to boundCbvCount-1 must be bound)\n    for (uint32_t i = 1; i < boundCbvCount; ++i) {\n      if (bindingsBuffers_.addresses[i] == 0) {\n        IGL_LOG_ERROR(\n            \"D3D12ResourcesBinder: Sparse compute CBV binding detected at slot %u \"\n            \"(expected dense binding through slot %u)\\n\",\n            i,\n            boundCbvCount - 1);\n        if (outResult) {\n          *outResult = Result{Result::Code::InvalidOperation, \"Compute CBV bindings must be dense\"};\n        }\n        return false;\n      }\n    }\n\n    // Allocate a contiguous range of descriptors for all CBVs on a single page\n    // This ensures we can bind them as a single descriptor table\n    uint32_t baseDescriptorIndex = 0;\n    Result allocResult = commandBuffer_.allocateCbvSrvUavRange(boundCbvCount, &baseDescriptorIndex);\n    if (!allocResult.isOk()) {\n      IGL_LOG_ERROR(\n          \"D3D12ResourcesBinder: Failed to allocate contiguous CBV range (%u descriptors): %s\\n\",\n          boundCbvCount,\n          allocResult.message.c_str());\n      if (outResult) {\n        *outResult = allocResult;\n      }\n      return false;\n    }\n\n    // Create CBV descriptors for all bound buffers\n    uint32_t descriptorOffset = 0;\n    for (uint32_t i = 0; i < bindingsBuffers_.count; ++i) {\n      if (bindingsBuffers_.addresses[i] == 0) {\n        continue; // Skip unbound slots\n      }\n\n      // Validate address alignment (D3D12 requires 256-byte alignment)\n      if (bindingsBuffers_.addresses[i] % kConstantBufferAlignment != 0) {\n        IGL_LOG_ERROR(\n            \"D3D12ResourcesBinder: Constant buffer %u address 0x%llx is not 256-byte aligned\\n\",\n            i,\n            bindingsBuffers_.addresses[i]);\n        if (outResult) {\n          *outResult = Result{Result::Code::ArgumentInvalid,\n                              \"Constant buffer address must be 256-byte aligned\"};\n        }\n        return false;\n      }\n\n      // Validate size\n      size_t size = bindingsBuffers_.sizes[i];\n      if (size > kMaxCBVSize) {\n        IGL_LOG_ERROR(\n            \"D3D12ResourcesBinder: Constant buffer %u size (%zu bytes) exceeds 64 KB limit\\n\",\n            i,\n            size);\n        if (outResult) {\n          *outResult = Result{Result::Code::ArgumentOutOfRange,\n                              \"Constant buffer size exceeds 64 KB D3D12 limit\"};\n        }\n        return false;\n      }\n\n      // Align size to 256-byte boundary\n      const size_t alignedSize =\n          (size + kConstantBufferAlignment - 1) & ~(kConstantBufferAlignment - 1);\n\n      // Use contiguous descriptor index (baseDescriptorIndex + descriptorOffset)\n      const uint32_t descriptorIndex = baseDescriptorIndex + descriptorOffset;\n      D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n\n      D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {};\n      cbvDesc.BufferLocation = bindingsBuffers_.addresses[i];\n      cbvDesc.SizeInBytes = static_cast<UINT>(alignedSize);\n\n      device->CreateConstantBufferView(&cbvDesc, cpuHandle);\n      descriptorOffset++;\n    }\n\n    // Sanity check: descriptorOffset should match boundCbvCount after dense packing\n    IGL_DEBUG_ASSERT(descriptorOffset == boundCbvCount,\n                     \"CBV descriptor packing mismatch: allocated %u but created %u\",\n                     boundCbvCount,\n                     descriptorOffset);\n\n    // Bind the CBV descriptor table to root parameter 3\n    D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(baseDescriptorIndex);\n    cmdList->SetComputeRootDescriptorTable(kComputeRootParam_CBVTable, gpuHandle);\n  } else {\n    // Graphics pipeline: Reflection-based CBV descriptor table binding\n    auto& context = commandBuffer_.getContext();\n\n    // Count bound CBVs\n    uint32_t boundCbvCount = 0;\n    for (uint32_t i = 0; i < bindingsBuffers_.count; ++i) {\n      if (bindingsBuffers_.addresses[i] != 0) {\n        boundCbvCount++;\n      }\n    }\n\n    if (boundCbvCount == 0) {\n      return true; // No CBVs to bind\n    }\n\n    // Determine how many descriptors to allocate based on pipeline's root signature\n    // Use pipeline's declared CBV range (0 to maxCBVSlot inclusive) to match root signature\n    uint32_t descriptorRangeSize = bindingsBuffers_.count;\n\n    if (renderPipeline) {\n      const UINT pipelineCBVCount = renderPipeline->getCBVDescriptorCount();\n      if (pipelineCBVCount > 0) {\n        descriptorRangeSize = pipelineCBVCount;\n      }\n    }\n\n    // Allocate a contiguous range of descriptors from 0 to descriptorRangeSize-1\n    uint32_t baseDescriptorIndex = 0;\n    Result allocResult =\n        commandBuffer_.allocateCbvSrvUavRange(descriptorRangeSize, &baseDescriptorIndex);\n    if (!allocResult.isOk()) {\n      IGL_LOG_ERROR(\"D3D12ResourcesBinder: Failed to allocate CBV range (%u descriptors): %s\\n\",\n                    descriptorRangeSize,\n                    allocResult.message.c_str());\n      if (outResult) {\n        *outResult = allocResult;\n      }\n      return false;\n    }\n\n    IGL_D3D12_LOG_VERBOSE(\n        \"updateBufferBindings: Graphics CBV binding - range b0-b%u, %u descriptors\\n\",\n        descriptorRangeSize - 1,\n        descriptorRangeSize);\n\n    // Create CBV descriptors for all slots from 0 to descriptorRangeSize-1\n    // For unbound slots, create null descriptors to match the root signature range\n    for (uint32_t slotIndex = 0; slotIndex < descriptorRangeSize; ++slotIndex) {\n      const uint32_t descriptorIndex = baseDescriptorIndex + slotIndex;\n      D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n\n      // Check if this slot is bound (may be null if beyond bindingsBuffers_.count)\n      const bool isSlotBound = (slotIndex < bindingsBuffers_.count) &&\n                               (bindingsBuffers_.addresses[slotIndex] != 0);\n\n      if (isSlotBound) {\n        // Bound slot: Create valid CBV descriptor\n        // Validate address alignment (D3D12 requires 256-byte alignment)\n        if (bindingsBuffers_.addresses[slotIndex] % kConstantBufferAlignment != 0) {\n          IGL_LOG_ERROR(\n              \"D3D12ResourcesBinder: Constant buffer %u address 0x%llx is not 256-byte aligned\\n\",\n              slotIndex,\n              bindingsBuffers_.addresses[slotIndex]);\n          if (outResult) {\n            *outResult = Result{Result::Code::ArgumentInvalid,\n                                \"Constant buffer address must be 256-byte aligned\"};\n          }\n          return false;\n        }\n\n        // Validate size\n        size_t size = bindingsBuffers_.sizes[slotIndex];\n        if (size > kMaxCBVSize) {\n          IGL_LOG_ERROR(\n              \"D3D12ResourcesBinder: Constant buffer %u size (%zu bytes) exceeds 64 KB limit\\n\",\n              slotIndex,\n              size);\n          if (outResult) {\n            *outResult = Result{Result::Code::ArgumentOutOfRange,\n                                \"Constant buffer size exceeds 64 KB D3D12 limit\"};\n          }\n          return false;\n        }\n\n        // Align size to 256-byte boundary\n        const size_t alignedSize =\n            (size + kConstantBufferAlignment - 1) & ~(kConstantBufferAlignment - 1);\n\n        D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {};\n        cbvDesc.BufferLocation = bindingsBuffers_.addresses[slotIndex];\n        cbvDesc.SizeInBytes = static_cast<UINT>(alignedSize);\n\n        device->CreateConstantBufferView(&cbvDesc, cpuHandle);\n        IGL_D3D12_LOG_VERBOSE(\n            \"D3D12ResourcesBinder: Created CBV descriptor for b%u (address=0x%llx, size=%u)\\n\",\n            slotIndex,\n            cbvDesc.BufferLocation,\n            cbvDesc.SizeInBytes);\n      } else {\n        // Unbound slot: Create NULL descriptor to fill the root signature descriptor range\n        D3D12_CONSTANT_BUFFER_VIEW_DESC nullCbvDesc = {};\n        nullCbvDesc.BufferLocation = 0; // NULL CBV\n        nullCbvDesc.SizeInBytes =\n            D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * 16; // Minimum valid size\n\n        device->CreateConstantBufferView(&nullCbvDesc, cpuHandle);\n        IGL_D3D12_LOG_VERBOSE(\"D3D12ResourcesBinder: Created NULL CBV descriptor for b%u\\n\",\n                              slotIndex);\n      }\n    }\n\n    // Query pipeline for reflection-based CBV table root parameter index\n    if (!renderPipeline) {\n      IGL_LOG_ERROR(\"updateBufferBindings: renderPipeline is NULL, cannot bind CBV table\\n\");\n      if (outResult) {\n        *outResult = Result{Result::Code::ArgumentInvalid,\n                            \"renderPipeline is required for graphics CBV binding\"};\n      }\n      return false;\n    }\n\n    const UINT cbvTableIndex = renderPipeline->getCBVTableRootParameterIndex();\n\n    if (cbvTableIndex != UINT_MAX) {\n      // Bind the CBV descriptor table to the reflection-based root parameter\n      D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(baseDescriptorIndex);\n      cmdList->SetGraphicsRootDescriptorTable(cbvTableIndex, gpuHandle);\n    }\n  }\n\n  return true;\n}\n\nbool D3D12ResourcesBinder::updateUAVBindings(ID3D12GraphicsCommandList* cmdList,\n                                             ID3D12Device* device,\n                                             Result* outResult) {\n  if (bindingsUAVs_.count == 0) {\n    return true; // Nothing to bind\n  }\n\n  // Validate dense bindings\n  if (bindingsUAVs_.buffers[0] == nullptr) {\n    IGL_LOG_ERROR(\n        \"D3D12ResourcesBinder: UAV bindings are sparse (slot 0 not bound). \"\n        \"D3D12 requires dense bindings starting at index 0.\\n\");\n    if (outResult) {\n      *outResult =\n          Result{Result::Code::InvalidOperation, \"UAV bindings must be dense starting at slot 0\"};\n    }\n    return false;\n  }\n\n  auto& context = commandBuffer_.getContext();\n\n  // Verify all UAVs are bound (dense binding requirement)\n  for (uint32_t i = 0; i < bindingsUAVs_.count; ++i) {\n    if (bindingsUAVs_.buffers[i] == nullptr) {\n      IGL_LOG_ERROR(\"D3D12ResourcesBinder: Sparse UAV binding detected at slot %u\\n\", i);\n      if (outResult) {\n        *outResult = Result{Result::Code::InvalidOperation, \"UAV bindings must be dense\"};\n      }\n      return false;\n    }\n  }\n\n  // Allocate a contiguous range of descriptors for all UAVs on a single page\n  // This ensures we can bind them as a single descriptor table\n  uint32_t baseDescriptorIndex = 0;\n  Result allocResult =\n      commandBuffer_.allocateCbvSrvUavRange(bindingsUAVs_.count, &baseDescriptorIndex);\n  if (!allocResult.isOk()) {\n    IGL_LOG_ERROR(\n        \"D3D12ResourcesBinder: Failed to allocate contiguous UAV range (%u descriptors): %s\\n\",\n        bindingsUAVs_.count,\n        allocResult.message.c_str());\n    if (outResult) {\n      *outResult = allocResult;\n    }\n    return false;\n  }\n\n  // Create UAV descriptors for all bound storage buffers\n  for (uint32_t i = 0; i < bindingsUAVs_.count; ++i) {\n    auto* buffer = bindingsUAVs_.buffers[i];\n    auto* d3dBuffer = static_cast<Buffer*>(buffer);\n    ID3D12Resource* resource = d3dBuffer->getResource();\n\n    const size_t offset = bindingsUAVs_.offsets[i];\n    const size_t elementStride = bindingsUAVs_.elementStrides[i];\n    const size_t bufferSize = d3dBuffer->getSizeInBytes();\n\n    // FATAL VALIDATION: UAV offset must be aligned to element stride\n    // This check immediately fails the entire updateBindings() call and returns InvalidOperation.\n    // Misaligned offsets would create invalid D3D12 UAV descriptors and cause device removal.\n    if (offset % elementStride != 0) {\n      IGL_LOG_ERROR(\n          \"D3D12ResourcesBinder: UAV offset %zu is not aligned to element stride %zu. \"\n          \"This is a FATAL error - updateBindings() will fail.\\n\",\n          offset,\n          elementStride);\n      if (outResult) {\n        *outResult =\n            Result{Result::Code::ArgumentInvalid, \"UAV offset must be aligned to element stride\"};\n      }\n      return false;\n    }\n\n    // FATAL VALIDATION: UAV offset must be within buffer bounds\n    // This check immediately fails the entire updateBindings() call and returns ArgumentOutOfRange.\n    // Out-of-bounds offsets would access invalid memory and cause GPU faults.\n    if (offset > bufferSize) {\n      IGL_LOG_ERROR(\n          \"D3D12ResourcesBinder: UAV offset %zu exceeds buffer size %zu. \"\n          \"This is a FATAL error - updateBindings() will fail.\\n\",\n          offset,\n          bufferSize);\n      if (outResult) {\n        *outResult = Result{Result::Code::ArgumentOutOfRange, \"UAV offset exceeds buffer size\"};\n      }\n      return false;\n    }\n\n    const size_t remaining = bufferSize - offset;\n    // FATAL VALIDATION: At least one full element must fit in remaining buffer space\n    // This check immediately fails the entire updateBindings() call and returns ArgumentOutOfRange.\n    // Creating a UAV with zero elements or partial elements would be invalid.\n    if (remaining < elementStride) {\n      IGL_LOG_ERROR(\n          \"D3D12ResourcesBinder: UAV remaining size %zu < element stride %zu. \"\n          \"This is a FATAL error - updateBindings() will fail.\\n\",\n          remaining,\n          elementStride);\n      if (outResult) {\n        *outResult =\n            Result{Result::Code::ArgumentOutOfRange, \"UAV remaining size less than element stride\"};\n      }\n      return false;\n    }\n\n    // Use contiguous descriptor index (baseDescriptorIndex + i)\n    const uint32_t descriptorIndex = baseDescriptorIndex + i;\n    D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n    D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(descriptorIndex);\n\n    // Create UAV descriptor for structured buffer\n    D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};\n    uavDesc.Format = DXGI_FORMAT_UNKNOWN; // Required for structured buffers\n    uavDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER;\n    uavDesc.Buffer.FirstElement = static_cast<UINT64>(offset / elementStride);\n    uavDesc.Buffer.NumElements = static_cast<UINT>(remaining / elementStride);\n    uavDesc.Buffer.StructureByteStride = static_cast<UINT>(elementStride);\n    uavDesc.Buffer.CounterOffsetInBytes = 0;\n    uavDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE;\n\n    device->CreateUnorderedAccessView(resource, nullptr, &uavDesc, cpuHandle);\n    D3D12Context::trackResourceCreation(\"UAV\", 0);\n\n    // Cache the GPU handle\n    bindingsUAVs_.handles[i] = gpuHandle;\n  }\n\n  // Bind the UAV table to root parameter 1 (compute only)\n  cmdList->SetComputeRootDescriptorTable(kComputeRootParam_UAVTable, bindingsUAVs_.handles[0]);\n\n  return true;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12ResourcesBinder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h>\n#include <igl/Common.h>\n#include <igl/SamplerState.h>\n#include <igl/Texture.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Headers.h>\n\nnamespace igl::d3d12 {\n\nclass CommandBuffer;\nclass PipelineState;\n\n/**\n * @brief Binding state for textures and their associated GPU descriptor handles\n *\n * Stores up to IGL_TEXTURE_SAMPLERS_MAX texture bindings (t0-t15 in HLSL).\n * Each binding stores the texture pointer (for descriptor creation) and the\n * resulting GPU descriptor handle (for root parameter binding).\n */\nstruct BindingsTextures {\n  ITexture* textures[IGL_TEXTURE_SAMPLERS_MAX] = {};\n  D3D12_GPU_DESCRIPTOR_HANDLE handles[IGL_TEXTURE_SAMPLERS_MAX] = {};\n  uint32_t count = 0;\n};\n\n/**\n * @brief Binding state for samplers and their associated GPU descriptor handles\n *\n * Stores up to IGL_TEXTURE_SAMPLERS_MAX sampler bindings (s0-s15 in HLSL).\n * Each binding stores the sampler state pointer (for descriptor creation) and the\n * resulting GPU descriptor handle (for root parameter binding).\n */\nstruct BindingsSamplers {\n  ISamplerState* samplers[IGL_TEXTURE_SAMPLERS_MAX] = {};\n  D3D12_GPU_DESCRIPTOR_HANDLE handles[IGL_TEXTURE_SAMPLERS_MAX] = {};\n  uint32_t count = 0;\n};\n\n/**\n * @brief Binding state for uniform buffers (constant buffers in D3D12)\n *\n * Stores up to IGL_BUFFER_BINDINGS_MAX buffer bindings (b0-b30 in HLSL).\n * D3D12 has two binding methods:\n * - Root CBV (direct GPU virtual address) - used for b0-b1 (legacy/frequent)\n * - CBV descriptor table - used for b2+ (less frequent)\n *\n * This struct stores buffer pointers and GPU virtual addresses/sizes for all bindings.\n * The actual binding method is determined by the pipeline root signature.\n */\nstruct BindingsBuffers {\n  IBuffer* buffers[IGL_BUFFER_BINDINGS_MAX] = {};\n  D3D12_GPU_VIRTUAL_ADDRESS addresses[IGL_BUFFER_BINDINGS_MAX] = {};\n  size_t offsets[IGL_BUFFER_BINDINGS_MAX] = {};\n  size_t sizes[IGL_BUFFER_BINDINGS_MAX] = {};\n  uint32_t count = 0;\n};\n\n/**\n * @brief Binding state for unordered access views (UAVs)\n *\n * Stores up to IGL_BUFFER_BINDINGS_MAX UAV bindings (u0-u30 in HLSL).\n * Used for storage buffers in compute shaders and writable resources.\n * Each binding stores the buffer pointer, offset, element stride (for descriptor creation),\n * and the resulting GPU descriptor handle (for root parameter binding).\n */\nstruct BindingsUAVs {\n  IBuffer* buffers[IGL_BUFFER_BINDINGS_MAX] = {};\n  size_t offsets[IGL_BUFFER_BINDINGS_MAX] = {};\n  size_t elementStrides[IGL_BUFFER_BINDINGS_MAX] = {}; // Byte stride per element for structured\n                                                       // buffers\n  D3D12_GPU_DESCRIPTOR_HANDLE handles[IGL_BUFFER_BINDINGS_MAX] = {};\n  uint32_t count = 0;\n};\n\n/**\n * @brief Centralized resource binding management for D3D12 command encoders\n *\n * D3D12ResourcesBinder is the single entry point for shader-visible descriptor binding\n * (CBV/SRV/UAV/Sampler) used by command encoders. It consolidates descriptor allocation\n * and resource binding logic that was previously fragmented across RenderCommandEncoder\n * and ComputeCommandEncoder.\n *\n * Note: RTV/DSV descriptors are managed separately by DescriptorHeapManager and bound\n * directly by encoders during render pass setup.\n *\n * ============================================================================\n * ARCHITECTURE: D3D12 Descriptor Management Overview\n * ============================================================================\n *\n * The D3D12 backend uses THREE distinct descriptor management strategies:\n *\n * 1. **Transient Descriptor Allocator** (Per-Frame Heaps)\n *    - Location: D3D12Context::FrameContext, CommandBuffer allocation methods\n *    - Purpose: Shader-visible descriptors (CBV/SRV/UAV/Samplers) for rendering\n *    - Lifecycle: Allocated during command encoding, reset at frame boundary\n *    - Strategy: Linear allocation with dynamic multi-page growth\n *    - Used for: SRVs (textures), UAVs (storage buffers), CBVs, Samplers\n *    - Access: ONLY through D3D12ResourcesBinder (internal detail)\n *\n * 2. **Persistent Descriptor Allocator** (DescriptorHeapManager)\n *    - Location: DescriptorHeapManager class\n *    - Purpose: CPU-visible descriptors (RTV/DSV) with explicit lifecycle\n *    - Lifecycle: Allocated at resource creation, freed at resource destruction\n *    - Strategy: Free-list allocation with double-free protection\n *    - Used for: Render target views, depth-stencil views\n *    - Access: Directly by Texture and Framebuffer classes\n *\n * 3. **Root Descriptor Optimization** (Inline Binding)\n *    - Location: D3D12ResourcesBinder::updateBufferBindings()\n *    - Purpose: Bypass descriptor heaps for frequently-updated constant buffers\n *    - Lifecycle: No descriptor created - binds GPU virtual address directly\n *    - Strategy: D3D12 root CBVs (graphics b0-b1 only)\n *    - Used for: Hot-path constant buffers in graphics pipeline\n *    - Access: ONLY through D3D12ResourcesBinder (internal optimization)\n *\n * **Design Rationale**:\n * - Strategies 1 and 2 handle DIFFERENT descriptor types (shader-visible vs CPU-visible)\n *   and lifecycles (transient vs persistent), so they cannot be merged\n * - Strategy 3 is a D3D12-specific optimization, not a separate \"system\"\n * - D3D12ResourcesBinder abstracts these details, providing a unified binding interface\n *\n * ============================================================================\n * Key Responsibilities of D3D12ResourcesBinder\n * ============================================================================\n *\n * - Cache resource bindings locally until updateBindings() is called\n * - Allocate descriptors from per-frame shader-visible heaps on-demand (Strategy 1)\n * - Create SRV/UAV/CBV/Sampler descriptors in GPU-visible heaps\n * - Decide when to use root CBVs vs descriptor tables (Strategy 3)\n * - Track dirty state to minimize descriptor creation and root parameter updates\n * - Support both graphics and compute pipeline bind points\n * - Transition texture resources to appropriate shader-resource states (buffers must\n *   be created in the correct state and are not transitioned here)\n *\n * Design principles:\n * - **Lazy update**: Bindings are cached locally and only applied to GPU on updateBindings()\n * - **Dirty tracking**: Only update descriptor sets when resources change\n * - **Pipeline awareness**: Different root signature layouts for graphics vs compute\n * - **Per-frame isolation**: Uses per-frame descriptor heaps to prevent race conditions\n * - **Implementation hiding**: External code should never directly access CommandBuffer\n *   descriptor allocation methods - always go through ResourcesBinder\n *\n * Thread-safety: This class is NOT thread-safe. Each encoder should own its own binder.\n *\n * Dependencies:\n * - T01: Correct descriptor binding patterns\n * - T06: Shared helper utilities for descriptor creation\n * - T16: Unified logging controls\n * - T20: Consolidated descriptor management architecture\n *\n * Related to Vulkan ResourcesBinder pattern (src/igl/vulkan/ResourcesBinder.h)\n */\nclass D3D12ResourcesBinder final {\n public:\n  /**\n   * @brief Initialize the resource binder for a command buffer\n   *\n   * @param commandBuffer Command buffer to bind resources to (provides context/device access)\n   * @param isCompute True for compute pipelines, false for graphics pipelines\n   */\n  D3D12ResourcesBinder(CommandBuffer& commandBuffer, bool isCompute);\n\n  /**\n   * @brief Bind a texture (shader resource view) to a specific slot\n   *\n   * Creates or updates an SRV descriptor in the per-frame CBV/SRV/UAV heap\n   * and caches the GPU handle. The binding is not applied to the command list\n   * until updateBindings() is called.\n   *\n   * @param index Texture slot (t0-t15 in HLSL, 0-based index)\n   * @param texture Texture to bind (nullptr to unbind)\n   */\n  void bindTexture(uint32_t index, ITexture* texture);\n\n  /**\n   * @brief Bind a sampler state to a specific slot\n   *\n   * Creates or updates a sampler descriptor in the per-frame sampler heap\n   * and caches the GPU handle. The binding is not applied to the command list\n   * until updateBindings() is called.\n   *\n   * @param index Sampler slot (s0-s15 in HLSL, 0-based index)\n   * @param samplerState Sampler state to bind (nullptr to unbind)\n   */\n  void bindSamplerState(uint32_t index, ISamplerState* samplerState);\n\n  /**\n   * @brief Bind a buffer (constant buffer or storage buffer) to a specific slot\n   *\n   * For uniform buffers (constant buffers):\n   * - Stores GPU virtual address for root CBV binding (b0-b1)\n   * - Or creates CBV descriptor for descriptor table binding (b2+)\n   * - **COMPUTE SHADERS**: CBV bindings MUST be dense starting from index 0 with no gaps.\n   *   For example, binding slots 0, 1, 2 is valid; binding 0, 2 (skipping 1) will fail.\n   *   This constraint is enforced because descriptor tables bind contiguously from b0.\n   *\n   * For storage buffers:\n   * - Creates UAV descriptor in the per-frame CBV/SRV/UAV heap\n   * - Requires elementStride for structured buffer descriptor creation\n   *\n   * The binding is not applied to the command list until updateBindings() is called.\n   *\n   * @param index Buffer slot (b0-b30 for CBVs, u0-u30 for UAVs in HLSL)\n   * @param buffer Buffer to bind (nullptr to unbind)\n   * @param offset Offset in bytes into the buffer\n   * @param size Size in bytes to bind\n   * @param isUAV True to bind as UAV (storage buffer), false for CBV (uniform buffer)\n   * @param elementStride For UAVs: byte stride per element for structured buffers (required)\n   */\n  void bindBuffer(uint32_t index,\n                  IBuffer* buffer,\n                  size_t offset,\n                  size_t size,\n                  bool isUAV = false,\n                  size_t elementStride = 0);\n\n  /**\n   * @brief Apply all pending bindings to the command list\n   *\n   * This method performs the actual GPU binding work:\n   * 1. Creates descriptors for any dirty bindings (textures/samplers/buffers/UAVs)\n   * 2. Sets root descriptor tables (SetGraphicsRootDescriptorTable/SetComputeRootDescriptorTable)\n   * 3. Sets root constants/root CBVs if applicable\n   * 4. Clears dirty flags\n   *\n   * This should be called before draw/dispatch commands to ensure all bindings are active.\n   *\n   * @param renderPipeline For graphics pipelines: current pipeline to query reflection-based root\n   * parameter indices. For compute pipelines: pass nullptr (uses hardcoded layout).\n   * @param outResult Optional result for error reporting (e.g., descriptor heap overflow).\n   *                  If nullptr, caller receives only success/fail boolean. If non-null,\n   *                  all failure paths populate both error code and diagnostic message.\n   * @return true if bindings applied successfully, false on error\n   */\n  [[nodiscard]] bool updateBindings(const class RenderPipelineState* renderPipeline = nullptr,\n                                    Result* outResult = nullptr);\n\n  /**\n   * @brief Reset all bindings and dirty flags\n   *\n   * Called at the start of a new frame or when switching pipelines to ensure\n   * clean binding state. Does not affect the underlying descriptor heaps.\n   */\n  void reset();\n\n private:\n  /**\n   * @brief Bitwise flags for dirty resource types\n   *\n   * Used to track which resource types have been modified since the last\n   * updateBindings() call, allowing us to skip descriptor creation and\n   * root parameter updates for unchanged resources.\n   */\n  enum DirtyFlagBits : uint8_t {\n    DirtyFlagBits_Textures = 1 << 0,\n    DirtyFlagBits_Samplers = 1 << 1,\n    DirtyFlagBits_Buffers = 1 << 2,\n    DirtyFlagBits_UAVs = 1 << 3,\n  };\n\n  /**\n   * @brief Update texture bindings (SRV descriptor table)\n   *\n   * Creates SRV descriptors for all bound textures in the per-frame heap\n   * and sets the root descriptor table parameter.\n   *\n   * @param cmdList Command list to update\n   * @param device D3D12 device for descriptor creation\n   * @param renderPipeline Pipeline to query reflection-based root parameter indices (graphics only)\n   * @param outResult Optional result for error reporting\n   * @return true on success, false on error\n   */\n  [[nodiscard]] bool updateTextureBindings(ID3D12GraphicsCommandList* cmdList,\n                                           ID3D12Device* device,\n                                           const class RenderPipelineState* renderPipeline,\n                                           Result* outResult);\n\n  /**\n   * @brief Update sampler bindings (sampler descriptor table)\n   *\n   * Creates sampler descriptors for all bound samplers in the per-frame heap\n   * and sets the root descriptor table parameter.\n   *\n   * @param cmdList Command list to update\n   * @param device D3D12 device for descriptor creation\n   * @param renderPipeline Pipeline to query reflection-based root parameter indices (graphics only)\n   * @param outResult Optional result for error reporting\n   * @return true on success, false on error\n   */\n  [[nodiscard]] bool updateSamplerBindings(ID3D12GraphicsCommandList* cmdList,\n                                           ID3D12Device* device,\n                                           const class RenderPipelineState* renderPipeline,\n                                           Result* outResult);\n\n  /**\n   * @brief Update buffer bindings (CBV descriptor table)\n   *\n   * For graphics pipelines:\n   * - Creates CBV descriptor table for all bound CBVs\n   * - Queries pipeline for reflection-based root parameter index\n   *\n   * For compute pipelines:\n   * - Creates CBV descriptor table for all bindings (hardcoded root parameter)\n   *\n   * @param cmdList Command list to update\n   * @param device D3D12 device for descriptor creation\n   * @param renderPipeline Pipeline to query reflection-based root parameter indices (graphics only)\n   * @param outResult Optional result for error reporting\n   * @return true on success, false on error\n   */\n  [[nodiscard]] bool updateBufferBindings(ID3D12GraphicsCommandList* cmdList,\n                                          ID3D12Device* device,\n                                          const class RenderPipelineState* renderPipeline,\n                                          Result* outResult);\n\n  /**\n   * @brief Update UAV bindings (UAV descriptor table for compute shaders)\n   *\n   * Creates UAV descriptors for all bound storage buffers in the per-frame heap\n   * and sets the root descriptor table parameter. Only used for compute pipelines.\n   *\n   * @param cmdList Command list to update\n   * @param device D3D12 device for descriptor creation\n   * @param outResult Optional result for error reporting\n   * @return true on success, false on error\n   */\n  [[nodiscard]] bool updateUAVBindings(ID3D12GraphicsCommandList* cmdList,\n                                       ID3D12Device* device,\n                                       Result* outResult);\n\n  CommandBuffer& commandBuffer_;\n  bool isCompute_ = false;\n\n  // Cached binding state\n  BindingsTextures bindingsTextures_;\n  BindingsSamplers bindingsSamplers_;\n  BindingsBuffers bindingsBuffers_;\n  BindingsUAVs bindingsUAVs_;\n\n  // Dirty tracking flags\n  uint32_t dirtyFlags_ =\n      DirtyFlagBits_Textures | DirtyFlagBits_Samplers | DirtyFlagBits_Buffers | DirtyFlagBits_UAVs;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12RootSignatureKey.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <algorithm>\n#include <vector>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/ShaderModule.h>\n\nnamespace igl::d3d12 {\n\n/**\n * @brief Key structure for root signature cache lookup based on shader resource usage\n *\n * This structure captures the essential shader resource requirements needed to construct\n * a compatible root signature. It enables Vulkan-style dynamic root signature selection\n * where the root signature is chosen based on actual shader resource usage rather than\n * being globally fixed.\n *\n * The key includes:\n * - Push constant configuration (slot and size)\n * - Resource slot usage (CBV/SRV/UAV/Sampler ranges)\n * - Flags for shader visibility and optimization\n *\n * Root signatures with the same key are compatible and can be reused across pipelines.\n */\nstruct D3D12RootSignatureKey {\n  // Push constants configuration\n  bool hasPushConstants = false;\n  UINT pushConstantSlot = UINT_MAX; // Which b# register\n  UINT pushConstantSize = 0; // Size in 32-bit values\n\n  // Resource slot ranges (sorted for consistent hashing)\n  std::vector<UINT> usedCBVSlots;\n  std::vector<UINT> usedSRVSlots;\n  std::vector<UINT> usedUAVSlots;\n  std::vector<UINT> usedSamplerSlots;\n\n  // Minimum / maximum slot indices (for determining descriptor table windows)\n  UINT minCBVSlot = 0;\n  UINT maxCBVSlot = 0;\n  UINT minSRVSlot = 0;\n  UINT maxSRVSlot = 0;\n  UINT minUAVSlot = 0;\n  UINT maxUAVSlot = 0;\n  UINT minSamplerSlot = 0;\n  UINT maxSamplerSlot = 0;\n\n  // Root signature flags\n  D3D12_ROOT_SIGNATURE_FLAGS flags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT;\n\n  /**\n   * @brief Construct key from vertex + fragment shader reflection\n   *\n   * Merges resource usage from both shaders to create a unified key.\n   * Handles push constant slot conflicts (prefers vertex shader if both use different slots).\n   */\n  static D3D12RootSignatureKey fromShaderReflection(\n      const ShaderModule::ShaderReflectionInfo* vsReflection,\n      const ShaderModule::ShaderReflectionInfo* psReflection);\n\n  /**\n   * @brief Construct key from compute shader reflection\n   */\n  static D3D12RootSignatureKey fromShaderReflection(\n      const ShaderModule::ShaderReflectionInfo* csReflection);\n\n  bool operator==(const D3D12RootSignatureKey& other) const {\n    return hasPushConstants == other.hasPushConstants &&\n           pushConstantSlot == other.pushConstantSlot &&\n           pushConstantSize == other.pushConstantSize && usedCBVSlots == other.usedCBVSlots &&\n           usedSRVSlots == other.usedSRVSlots && usedUAVSlots == other.usedUAVSlots &&\n           usedSamplerSlots == other.usedSamplerSlots && minCBVSlot == other.minCBVSlot &&\n           maxCBVSlot == other.maxCBVSlot && minSRVSlot == other.minSRVSlot &&\n           maxSRVSlot == other.maxSRVSlot && minUAVSlot == other.minUAVSlot &&\n           maxUAVSlot == other.maxUAVSlot && minSamplerSlot == other.minSamplerSlot &&\n           maxSamplerSlot == other.maxSamplerSlot && flags == other.flags;\n  }\n\n  struct HashFunction {\n    size_t operator()(const D3D12RootSignatureKey& key) const {\n      size_t hash = 0;\n\n      // Hash push constants\n      hashCombine(hash, key.hasPushConstants ? 1 : 0);\n      hashCombine(hash, static_cast<size_t>(key.pushConstantSlot));\n      hashCombine(hash, static_cast<size_t>(key.pushConstantSize));\n\n      // Hash resource slots\n      for (UINT slot : key.usedCBVSlots) {\n        hashCombine(hash, static_cast<size_t>(slot));\n      }\n      for (UINT slot : key.usedSRVSlots) {\n        hashCombine(hash, static_cast<size_t>(slot));\n      }\n      for (UINT slot : key.usedUAVSlots) {\n        hashCombine(hash, static_cast<size_t>(slot));\n      }\n      for (UINT slot : key.usedSamplerSlots) {\n        hashCombine(hash, static_cast<size_t>(slot));\n      }\n\n      // Hash min/max slots\n      hashCombine(hash, static_cast<size_t>(key.minCBVSlot));\n      hashCombine(hash, static_cast<size_t>(key.maxCBVSlot));\n      hashCombine(hash, static_cast<size_t>(key.minSRVSlot));\n      hashCombine(hash, static_cast<size_t>(key.maxSRVSlot));\n      hashCombine(hash, static_cast<size_t>(key.minUAVSlot));\n      hashCombine(hash, static_cast<size_t>(key.maxUAVSlot));\n      hashCombine(hash, static_cast<size_t>(key.minSamplerSlot));\n      hashCombine(hash, static_cast<size_t>(key.maxSamplerSlot));\n\n      // Hash flags\n      hashCombine(hash, static_cast<size_t>(key.flags));\n\n      return hash;\n    }\n  };\n\n private:\n  // Helper to merge two slot vectors and sort\n  static std::vector<UINT> mergeAndSort(const std::vector<UINT>& a, const std::vector<UINT>& b) {\n    std::vector<UINT> result = a;\n    result.insert(result.end(), b.begin(), b.end());\n    std::sort(result.begin(), result.end());\n    // Remove duplicates\n    result.erase(std::unique(result.begin(), result.end()), result.end());\n    return result;\n  }\n};\n\n// Implementation of fromShaderReflection for graphics pipeline\ninline D3D12RootSignatureKey D3D12RootSignatureKey::fromShaderReflection(\n    const ShaderModule::ShaderReflectionInfo* vsReflection,\n    const ShaderModule::ShaderReflectionInfo* psReflection) {\n  D3D12RootSignatureKey key;\n\n  // Merge push constants (prefer vertex shader if conflict)\n  if (vsReflection && vsReflection->hasPushConstants) {\n    key.hasPushConstants = true;\n    key.pushConstantSlot = vsReflection->pushConstantSlot;\n    key.pushConstantSize = vsReflection->pushConstantSize;\n  } else if (psReflection && psReflection->hasPushConstants) {\n    key.hasPushConstants = true;\n    key.pushConstantSlot = psReflection->pushConstantSlot;\n    key.pushConstantSize = psReflection->pushConstantSize;\n  }\n\n  // Merge resource slots\n  // IMPORTANT: Exclude push constant slot from CBV descriptor table\n  // Push constants use inline root constants (D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS),\n  // not a CBV descriptor. Including the push constant slot in usedCBVSlots would cause\n  // a root signature overlap error.\n  if (vsReflection && psReflection) {\n    key.usedCBVSlots = mergeAndSort(vsReflection->usedCBVSlots, psReflection->usedCBVSlots);\n    key.usedSRVSlots = mergeAndSort(vsReflection->usedSRVSlots, psReflection->usedSRVSlots);\n    key.usedUAVSlots = mergeAndSort(vsReflection->usedUAVSlots, psReflection->usedUAVSlots);\n    key.usedSamplerSlots =\n        mergeAndSort(vsReflection->usedSamplerSlots, psReflection->usedSamplerSlots);\n\n    key.maxCBVSlot = std::max(vsReflection->maxCBVSlot, psReflection->maxCBVSlot);\n    key.maxSRVSlot = std::max(vsReflection->maxSRVSlot, psReflection->maxSRVSlot);\n    key.maxUAVSlot = std::max(vsReflection->maxUAVSlot, psReflection->maxUAVSlot);\n    key.maxSamplerSlot = std::max(vsReflection->maxSamplerSlot, psReflection->maxSamplerSlot);\n  } else if (vsReflection) {\n    key.usedCBVSlots = vsReflection->usedCBVSlots;\n    key.usedSRVSlots = vsReflection->usedSRVSlots;\n    key.usedUAVSlots = vsReflection->usedUAVSlots;\n    key.usedSamplerSlots = vsReflection->usedSamplerSlots;\n\n    std::sort(key.usedCBVSlots.begin(), key.usedCBVSlots.end());\n    key.usedCBVSlots.erase(std::unique(key.usedCBVSlots.begin(), key.usedCBVSlots.end()),\n                           key.usedCBVSlots.end());\n\n    std::sort(key.usedSRVSlots.begin(), key.usedSRVSlots.end());\n    key.usedSRVSlots.erase(std::unique(key.usedSRVSlots.begin(), key.usedSRVSlots.end()),\n                           key.usedSRVSlots.end());\n\n    std::sort(key.usedUAVSlots.begin(), key.usedUAVSlots.end());\n    key.usedUAVSlots.erase(std::unique(key.usedUAVSlots.begin(), key.usedUAVSlots.end()),\n                           key.usedUAVSlots.end());\n\n    std::sort(key.usedSamplerSlots.begin(), key.usedSamplerSlots.end());\n    key.usedSamplerSlots.erase(\n        std::unique(key.usedSamplerSlots.begin(), key.usedSamplerSlots.end()),\n        key.usedSamplerSlots.end());\n\n    key.maxCBVSlot = vsReflection->maxCBVSlot;\n    key.maxSRVSlot = vsReflection->maxSRVSlot;\n    key.maxUAVSlot = vsReflection->maxUAVSlot;\n    key.maxSamplerSlot = vsReflection->maxSamplerSlot;\n  } else if (psReflection) {\n    key.usedCBVSlots = psReflection->usedCBVSlots;\n    key.usedSRVSlots = psReflection->usedSRVSlots;\n    key.usedUAVSlots = psReflection->usedUAVSlots;\n    key.usedSamplerSlots = psReflection->usedSamplerSlots;\n\n    std::sort(key.usedCBVSlots.begin(), key.usedCBVSlots.end());\n    key.usedCBVSlots.erase(std::unique(key.usedCBVSlots.begin(), key.usedCBVSlots.end()),\n                           key.usedCBVSlots.end());\n\n    std::sort(key.usedSRVSlots.begin(), key.usedSRVSlots.end());\n    key.usedSRVSlots.erase(std::unique(key.usedSRVSlots.begin(), key.usedSRVSlots.end()),\n                           key.usedSRVSlots.end());\n\n    std::sort(key.usedUAVSlots.begin(), key.usedUAVSlots.end());\n    key.usedUAVSlots.erase(std::unique(key.usedUAVSlots.begin(), key.usedUAVSlots.end()),\n                           key.usedUAVSlots.end());\n\n    std::sort(key.usedSamplerSlots.begin(), key.usedSamplerSlots.end());\n    key.usedSamplerSlots.erase(\n        std::unique(key.usedSamplerSlots.begin(), key.usedSamplerSlots.end()),\n        key.usedSamplerSlots.end());\n\n    key.maxCBVSlot = psReflection->maxCBVSlot;\n    key.maxSRVSlot = psReflection->maxSRVSlot;\n    key.maxUAVSlot = psReflection->maxUAVSlot;\n    key.maxSamplerSlot = psReflection->maxSamplerSlot;\n  }\n\n  // Compute min slots (if any resources are present)\n  if (!key.usedCBVSlots.empty()) {\n    key.minCBVSlot = key.usedCBVSlots.front();\n  }\n  if (!key.usedSRVSlots.empty()) {\n    key.minSRVSlot = key.usedSRVSlots.front();\n  }\n  if (!key.usedUAVSlots.empty()) {\n    key.minUAVSlot = key.usedUAVSlots.front();\n  }\n  if (!key.usedSamplerSlots.empty()) {\n    key.minSamplerSlot = key.usedSamplerSlots.front();\n  }\n\n  // Remove push constant slot from CBV slots (if present)\n  // Push constants are bound via root constants, not CBV descriptor table\n  if (key.hasPushConstants) {\n    key.usedCBVSlots.erase(\n        std::remove(key.usedCBVSlots.begin(), key.usedCBVSlots.end(), key.pushConstantSlot),\n        key.usedCBVSlots.end());\n  }\n\n  return key;\n}\n\n// Implementation of fromShaderReflection for compute pipeline\ninline D3D12RootSignatureKey D3D12RootSignatureKey::fromShaderReflection(\n    const ShaderModule::ShaderReflectionInfo* csReflection) {\n  D3D12RootSignatureKey key;\n\n  if (!csReflection) {\n    return key;\n  }\n\n  // Copy push constants\n  key.hasPushConstants = csReflection->hasPushConstants;\n  key.pushConstantSlot = csReflection->pushConstantSlot;\n  key.pushConstantSize = csReflection->pushConstantSize;\n\n  // Copy resource slots\n  key.usedCBVSlots = csReflection->usedCBVSlots;\n  key.usedSRVSlots = csReflection->usedSRVSlots;\n  key.usedUAVSlots = csReflection->usedUAVSlots;\n  key.usedSamplerSlots = csReflection->usedSamplerSlots;\n\n  // Ensure resource slot lists are sorted and unique for stable hashing / min/max tracking\n  std::sort(key.usedCBVSlots.begin(), key.usedCBVSlots.end());\n  key.usedCBVSlots.erase(std::unique(key.usedCBVSlots.begin(), key.usedCBVSlots.end()),\n                         key.usedCBVSlots.end());\n\n  std::sort(key.usedSRVSlots.begin(), key.usedSRVSlots.end());\n  key.usedSRVSlots.erase(std::unique(key.usedSRVSlots.begin(), key.usedSRVSlots.end()),\n                         key.usedSRVSlots.end());\n\n  std::sort(key.usedUAVSlots.begin(), key.usedUAVSlots.end());\n  key.usedUAVSlots.erase(std::unique(key.usedUAVSlots.begin(), key.usedUAVSlots.end()),\n                         key.usedUAVSlots.end());\n\n  std::sort(key.usedSamplerSlots.begin(), key.usedSamplerSlots.end());\n  key.usedSamplerSlots.erase(std::unique(key.usedSamplerSlots.begin(), key.usedSamplerSlots.end()),\n                             key.usedSamplerSlots.end());\n\n  key.maxCBVSlot = csReflection->maxCBVSlot;\n  key.maxSRVSlot = csReflection->maxSRVSlot;\n  key.maxUAVSlot = csReflection->maxUAVSlot;\n  key.maxSamplerSlot = csReflection->maxSamplerSlot;\n\n  // Remove push constant slot from CBV slots (if present)\n  // Push constants are bound via root constants, not CBV descriptor table\n  if (key.hasPushConstants) {\n    key.usedCBVSlots.erase(\n        std::remove(key.usedCBVSlots.begin(), key.usedCBVSlots.end(), key.pushConstantSlot),\n        key.usedCBVSlots.end());\n  }\n\n  // Compute min slots (if any resources are present)\n  if (!key.usedCBVSlots.empty()) {\n    key.minCBVSlot = key.usedCBVSlots.front();\n  }\n  if (!key.usedSRVSlots.empty()) {\n    key.minSRVSlot = key.usedSRVSlots.front();\n  }\n  if (!key.usedUAVSlots.empty()) {\n    key.minUAVSlot = key.usedUAVSlots.front();\n  }\n  if (!key.usedSamplerSlots.empty()) {\n    key.minSamplerSlot = key.usedSamplerSlots.front();\n  }\n\n  // Compute shaders don't need input assembler\n  key.flags = D3D12_ROOT_SIGNATURE_FLAG_NONE;\n\n  return key;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12SamplerCache.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <mutex>\n#include <unordered_map>\n#include <igl/Common.h>\n#include <igl/SamplerState.h>\n#include <igl/d3d12/SamplerState.h>\n\nnamespace igl::d3d12 {\n\nstruct SamplerCacheStats {\n  size_t cacheHits = 0;\n  size_t cacheMisses = 0;\n  size_t activeSamplers = 0;\n  float hitRate = 0.0f;\n};\n\nclass D3D12SamplerCache {\n public:\n  D3D12SamplerCache() = default;\n\n  [[nodiscard]] std::shared_ptr<ISamplerState> createSamplerState(const SamplerStateDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const {\n    const size_t samplerHash = std::hash<SamplerStateDesc>{}(desc);\n\n    {\n      std::lock_guard<std::mutex> lock(samplerCacheMutex_);\n\n      auto it = samplerCache_.find(samplerHash);\n      if (it != samplerCache_.end()) {\n        std::shared_ptr<SamplerState> existingSampler = it->second.lock();\n\n        if (existingSampler) {\n          samplerCacheHits_++;\n          const size_t totalRequests = samplerCacheHits_ + samplerCacheMisses_;\n          IGL_D3D12_LOG_VERBOSE(\n              \"D3D12SamplerCache::createSamplerState: Cache HIT \"\n              \"(hash=0x%zx, hits=%zu, misses=%zu, hit rate=%.1f%%)\\n\",\n              samplerHash,\n              samplerCacheHits_,\n              samplerCacheMisses_,\n              totalRequests > 0 ? 100.0 * samplerCacheHits_ / static_cast<double>(totalRequests)\n                                : 0.0);\n          Result::setOk(outResult);\n          // Upcast shared_ptr<SamplerState> -> shared_ptr<ISamplerState>\n          return existingSampler;\n        } else {\n          samplerCache_.erase(it);\n        }\n      }\n    }\n\n    D3D12_SAMPLER_DESC samplerDesc = {};\n\n    auto toD3D12Address = [](SamplerAddressMode m) {\n      switch (m) {\n      case SamplerAddressMode::Repeat:\n        return D3D12_TEXTURE_ADDRESS_MODE_WRAP;\n      case SamplerAddressMode::MirrorRepeat:\n        return D3D12_TEXTURE_ADDRESS_MODE_MIRROR;\n      case SamplerAddressMode::Clamp:\n        return D3D12_TEXTURE_ADDRESS_MODE_CLAMP;\n      default:\n        return D3D12_TEXTURE_ADDRESS_MODE_WRAP;\n      }\n    };\n\n    auto toD3D12Compare = [](CompareFunction f) {\n      switch (f) {\n      case CompareFunction::Less:\n        return D3D12_COMPARISON_FUNC_LESS;\n      case CompareFunction::LessEqual:\n        return D3D12_COMPARISON_FUNC_LESS_EQUAL;\n      case CompareFunction::Greater:\n        return D3D12_COMPARISON_FUNC_GREATER;\n      case CompareFunction::GreaterEqual:\n        return D3D12_COMPARISON_FUNC_GREATER_EQUAL;\n      case CompareFunction::Equal:\n        return D3D12_COMPARISON_FUNC_EQUAL;\n      case CompareFunction::NotEqual:\n        return D3D12_COMPARISON_FUNC_NOT_EQUAL;\n      case CompareFunction::AlwaysPass:\n        return D3D12_COMPARISON_FUNC_ALWAYS;\n      case CompareFunction::Never:\n        return D3D12_COMPARISON_FUNC_NEVER;\n      default:\n        return D3D12_COMPARISON_FUNC_NEVER;\n      }\n    };\n\n    const bool useComparison = desc.depthCompareEnabled;\n\n    const bool minLinear = (desc.minFilter != SamplerMinMagFilter::Nearest);\n    const bool magLinear = (desc.magFilter != SamplerMinMagFilter::Nearest);\n    const bool mipLinear = (desc.mipFilter == SamplerMipFilter::Linear);\n    const bool anisotropic = (desc.maxAnisotropic > 1);\n\n    if (anisotropic) {\n      samplerDesc.Filter = useComparison ? D3D12_FILTER_COMPARISON_ANISOTROPIC\n                                         : D3D12_FILTER_ANISOTROPIC;\n      samplerDesc.MaxAnisotropy = std::min<uint32_t>(desc.maxAnisotropic, 16);\n    } else {\n      D3D12_FILTER filter = D3D12_FILTER_MIN_MAG_MIP_POINT;\n      if (minLinear && magLinear && mipLinear) {\n        filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;\n      } else if (minLinear && magLinear && !mipLinear) {\n        filter = D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT;\n      } else if (minLinear && !magLinear && mipLinear) {\n        filter = D3D12_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR;\n      } else if (minLinear && !magLinear && !mipLinear) {\n        filter = D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT;\n      } else if (!minLinear && magLinear && mipLinear) {\n        filter = D3D12_FILTER_MIN_POINT_MAG_MIP_LINEAR;\n      } else if (!minLinear && magLinear && !mipLinear) {\n        filter = D3D12_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT;\n      } else if (!minLinear && !magLinear && mipLinear) {\n        filter = D3D12_FILTER_MIN_MAG_POINT_MIP_LINEAR;\n      }\n\n      if (useComparison) {\n        filter = static_cast<D3D12_FILTER>(filter | D3D12_FILTER_COMPARISON_MIN_MAG_MIP_POINT -\n                                                        D3D12_FILTER_MIN_MAG_MIP_POINT);\n      }\n      samplerDesc.Filter = filter;\n      samplerDesc.MaxAnisotropy = 1;\n    }\n\n    samplerDesc.AddressU = toD3D12Address(desc.addressModeU);\n    samplerDesc.AddressV = toD3D12Address(desc.addressModeV);\n    samplerDesc.AddressW = toD3D12Address(desc.addressModeW);\n    samplerDesc.MipLODBias = 0.0f;\n    // For comparison samplers, use the requested depth comparison function.\n    // For non-comparison samplers, set ComparisonFunc to NEVER so that the\n    // debug layer does not flag spurious D3D12_MESSAGE_ID 1361 warnings when\n    // Filter is not a comparison filter. The value is ignored in this case.\n    samplerDesc.ComparisonFunc = useComparison ? toD3D12Compare(desc.depthCompareFunction)\n                                               : D3D12_COMPARISON_FUNC_NEVER;\n    samplerDesc.BorderColor[0] = 0.0f;\n    samplerDesc.BorderColor[1] = 0.0f;\n    samplerDesc.BorderColor[2] = 0.0f;\n    samplerDesc.BorderColor[3] = 0.0f;\n    samplerDesc.MinLOD = static_cast<float>(desc.mipLodMin);\n    samplerDesc.MaxLOD = static_cast<float>(desc.mipLodMax);\n\n    auto concreteSampler = std::make_shared<SamplerState>(samplerDesc);\n    std::shared_ptr<ISamplerState> samplerState =\n        std::static_pointer_cast<ISamplerState>(concreteSampler);\n\n    {\n      std::lock_guard<std::mutex> lock(samplerCacheMutex_);\n      samplerCache_[samplerHash] = concreteSampler;\n      samplerCacheMisses_++;\n      IGL_D3D12_LOG_VERBOSE(\n          \"D3D12SamplerCache::createSamplerState: Cache MISS \"\n          \"(hash=0x%zx, total misses=%zu)\\n\",\n          samplerHash,\n          samplerCacheMisses_);\n    }\n\n    Result::setOk(outResult);\n    return samplerState;\n  }\n\n  [[nodiscard]] SamplerCacheStats getStats() const {\n    std::lock_guard<std::mutex> lock(samplerCacheMutex_);\n\n    SamplerCacheStats stats;\n    stats.cacheHits = samplerCacheHits_;\n    stats.cacheMisses = samplerCacheMisses_;\n\n    stats.activeSamplers = 0;\n    for (const auto& [hash, weakPtr] : samplerCache_) {\n      (void)hash;\n      if (!weakPtr.expired()) {\n        stats.activeSamplers++;\n      }\n    }\n\n    const size_t totalRequests = stats.cacheHits + stats.cacheMisses;\n    if (totalRequests > 0) {\n      stats.hitRate =\n          100.0f * static_cast<float>(stats.cacheHits) / static_cast<float>(totalRequests);\n    }\n\n    return stats;\n  }\n\n  void clear() {\n    std::lock_guard<std::mutex> lock(samplerCacheMutex_);\n    samplerCache_.clear();\n    samplerCacheHits_ = 0;\n    samplerCacheMisses_ = 0;\n  }\n\n private:\n  mutable std::unordered_map<size_t, std::weak_ptr<SamplerState>> samplerCache_;\n  mutable std::mutex samplerCacheMutex_;\n  mutable size_t samplerCacheHits_ = 0;\n  mutable size_t samplerCacheMisses_ = 0;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12StagingDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/D3D12StagingDevice.h>\n\n#include <igl/Assert.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12FenceWaiter.h>\n#include <igl/d3d12/UploadRingBuffer.h>\n\nnamespace igl::d3d12 {\n\nD3D12StagingDevice::D3D12StagingDevice(ID3D12Device* device,\n                                       ID3D12Fence* fence,\n                                       UploadRingBuffer* uploadRingBuffer) :\n  device_(device), fence_(fence), uploadRingBuffer_(uploadRingBuffer) {\n  IGL_DEBUG_ASSERT(device_);\n  IGL_DEBUG_ASSERT(fence_);\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12StagingDevice: Initialized (ring buffer: %s)\\n\",\n                        uploadRingBuffer_ ? \"yes\" : \"no\");\n}\n\nD3D12StagingDevice::~D3D12StagingDevice() {\n  // Wait for all in-flight buffers to complete\n  if (fence_) {\n    for (const auto& entry : inFlightBuffers_) {\n      if (fence_->GetCompletedValue() < entry.fenceValue) {\n        FenceWaiter waiter(fence_, entry.fenceValue);\n        Result waitResult = waiter.wait();\n        if (!waitResult.isOk()) {\n          IGL_LOG_ERROR(\n              \"D3D12StagingDevice::~D3D12StagingDevice() - Fence wait failed during cleanup: %s\\n\",\n              waitResult.message.c_str());\n        }\n      }\n    }\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12StagingDevice: Destroyed\\n\");\n}\n\nD3D12StagingDevice::StagingBuffer D3D12StagingDevice::allocateUpload(size_t size,\n                                                                     size_t alignment,\n                                                                     uint64_t fenceValue) {\n  // Try ring buffer first for small allocations\n  if (uploadRingBuffer_ && size <= kMaxRingBufferAllocation) {\n    auto ringAlloc = uploadRingBuffer_->allocate(size, alignment, fenceValue);\n    if (ringAlloc.valid) {\n      StagingBuffer result;\n      result.buffer = ringAlloc.buffer;\n      result.mappedPtr = ringAlloc.cpuAddress;\n      result.size = ringAlloc.size;\n      result.offset = ringAlloc.offset;\n      result.valid = true;\n      result.isFromRingBuffer = true;\n      return result;\n    }\n  }\n\n  // Fall back to dedicated staging buffer\n  std::lock_guard<std::mutex> lock(poolMutex_);\n\n  // Reclaim completed buffers\n  reclaimCompletedBuffers();\n\n  igl::d3d12::ComPtr<ID3D12Resource> buffer;\n\n  // Try to find a reusable buffer\n  if (!findReusableBuffer(size, false, &buffer)) {\n    // Create new buffer\n    Result result = createStagingBuffer(size, false, &buffer);\n    if (!result.isOk() || !buffer.Get()) {\n      return StagingBuffer{}; // Return invalid buffer\n    }\n  }\n\n  // Map the buffer\n  void* mappedPtr = nullptr;\n  D3D12_RANGE readRange{0, 0}; // Not reading\n  HRESULT hr = buffer->Map(0, &readRange, &mappedPtr);\n  if (FAILED(hr) || !mappedPtr) {\n    IGL_LOG_ERROR(\"D3D12StagingDevice: Failed to map upload buffer\\n\");\n    return StagingBuffer{};\n  }\n\n  StagingBuffer staging;\n  staging.buffer = buffer;\n  staging.mappedPtr = mappedPtr;\n  staging.size = size;\n  staging.offset = 0;\n  staging.valid = true;\n  staging.isFromRingBuffer = false;\n\n  return staging;\n}\n\nD3D12StagingDevice::StagingBuffer D3D12StagingDevice::allocateReadback(size_t size) {\n  std::lock_guard<std::mutex> lock(poolMutex_);\n\n  // Reclaim completed buffers\n  reclaimCompletedBuffers();\n\n  igl::d3d12::ComPtr<ID3D12Resource> buffer;\n\n  // Try to find a reusable buffer\n  if (!findReusableBuffer(size, true, &buffer)) {\n    // Create new buffer\n    Result result = createStagingBuffer(size, true, &buffer);\n    if (!result.isOk() || !buffer.Get()) {\n      return StagingBuffer{}; // Return invalid buffer\n    }\n  }\n\n  // Readback buffers are mapped on-demand when needed\n  StagingBuffer staging;\n  staging.buffer = buffer;\n  staging.mappedPtr = nullptr;\n  staging.size = size;\n  staging.offset = 0;\n  staging.valid = true;\n  staging.isFromRingBuffer = false;\n\n  return staging;\n}\n\nvoid D3D12StagingDevice::free(StagingBuffer buffer, uint64_t fenceValue) {\n  if (!buffer.valid) {\n    return;\n  }\n\n  // Ring buffer allocations are handled automatically\n  if (buffer.isFromRingBuffer) {\n    return;\n  }\n\n  std::lock_guard<std::mutex> lock(poolMutex_);\n\n  // Unmap if it was mapped\n  if (buffer.mappedPtr) {\n    buffer.buffer->Unmap(0, nullptr);\n  }\n\n  // Add to in-flight list\n  BufferEntry entry;\n  entry.buffer = buffer.buffer;\n  entry.size = buffer.size;\n  entry.fenceValue = fenceValue;\n\n  // Determine if it's a readback buffer\n  D3D12_HEAP_PROPERTIES heapProps;\n  buffer.buffer->GetHeapProperties(&heapProps, nullptr);\n  entry.isReadback = (heapProps.Type == D3D12_HEAP_TYPE_READBACK);\n\n  inFlightBuffers_.push_back(std::move(entry));\n}\n\nvoid D3D12StagingDevice::reclaimCompletedBuffers() {\n  // Note: Internal helper called by allocate* methods with poolMutex_ already held\n  if (!fence_) {\n    return;\n  }\n\n  const uint64_t completedValue = fence_->GetCompletedValue();\n\n  // Move completed buffers from in-flight to available\n  auto it = inFlightBuffers_.begin();\n  while (it != inFlightBuffers_.end()) {\n    if (it->fenceValue <= completedValue) {\n      availableBuffers_.push_back({it->buffer, it->size, 0, it->isReadback});\n      it = inFlightBuffers_.erase(it);\n    } else {\n      ++it;\n    }\n  }\n}\n\nResult D3D12StagingDevice::createStagingBuffer(size_t size,\n                                               bool forReadback,\n                                               igl::d3d12::ComPtr<ID3D12Resource>* outBuffer) {\n  D3D12_HEAP_PROPERTIES heapProps{};\n  heapProps.Type = forReadback ? D3D12_HEAP_TYPE_READBACK : D3D12_HEAP_TYPE_UPLOAD;\n\n  D3D12_RESOURCE_DESC desc{};\n  desc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;\n  desc.Width = size;\n  desc.Height = 1;\n  desc.DepthOrArraySize = 1;\n  desc.MipLevels = 1;\n  desc.Format = DXGI_FORMAT_UNKNOWN;\n  desc.SampleDesc.Count = 1;\n  desc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;\n\n  D3D12_RESOURCE_STATES initialState = forReadback ? D3D12_RESOURCE_STATE_COPY_DEST\n                                                   : D3D12_RESOURCE_STATE_GENERIC_READ;\n\n  HRESULT hr = device_->CreateCommittedResource(&heapProps,\n                                                D3D12_HEAP_FLAG_NONE,\n                                                &desc,\n                                                initialState,\n                                                nullptr,\n                                                IID_PPV_ARGS(outBuffer->GetAddressOf()));\n\n  if (FAILED(hr)) {\n    return Result{Result::Code::RuntimeError, \"Failed to create staging buffer\"};\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"D3D12StagingDevice: Created new %s buffer (size: %zu bytes)\\n\",\n                        forReadback ? \"readback\" : \"upload\",\n                        size);\n\n  return Result{};\n}\n\nbool D3D12StagingDevice::findReusableBuffer(size_t size,\n                                            bool forReadback,\n                                            igl::d3d12::ComPtr<ID3D12Resource>* outBuffer) {\n  // Find a buffer that matches type and is large enough\n  for (auto it = availableBuffers_.begin(); it != availableBuffers_.end(); ++it) {\n    if (it->isReadback == forReadback && it->size >= size) {\n      // Prefer buffers that are close in size (within 2x) to avoid waste\n      if (it->size <= size * 2) {\n        *outBuffer = it->buffer;\n        availableBuffers_.erase(it);\n        return true;\n      }\n    }\n  }\n\n  return false;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12StagingDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <mutex>\n#include <vector>\n#include <igl/Common.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Headers.h>\n\nnamespace igl::d3d12 {\n\nclass UploadRingBuffer;\n\n/**\n * @brief Centralized management of staging buffers for upload/readback\n *\n * Provides pooled staging buffer allocation for upload and readback operations,\n * eliminating per-operation staging buffer creation and improving reuse.\n *\n * Inspired by Vulkan's VulkanStagingDevice pattern.\n */\nclass D3D12StagingDevice {\n public:\n  /**\n   * @brief Staging buffer allocation\n   */\n  struct StagingBuffer {\n    igl::d3d12::ComPtr<ID3D12Resource> buffer;\n    void* mappedPtr = nullptr;\n    size_t size = 0;\n    uint64_t offset = 0; // Offset within buffer (for ring buffer allocations)\n    bool valid = false;\n    bool isFromRingBuffer = false; // True if allocated from ring buffer\n\n    StagingBuffer() = default;\n  };\n\n  /**\n   * @brief Initialize the staging device\n   * @param device D3D12 device for resource creation\n   * @param fence Fence for completion tracking\n   * @param uploadRingBuffer Optional existing upload ring buffer to integrate\n   */\n  D3D12StagingDevice(ID3D12Device* device,\n                     ID3D12Fence* fence,\n                     UploadRingBuffer* uploadRingBuffer = nullptr);\n\n  ~D3D12StagingDevice();\n\n  /**\n   * @brief Allocate a staging buffer for upload operations\n   *\n   * First attempts to use the upload ring buffer if available and size permits.\n   * Falls back to creating a dedicated staging buffer for large allocations.\n   *\n   * @param size Size in bytes\n   * @param alignment Required alignment (default 256 for constant buffers)\n   * @param fenceValue Fence value when this allocation will be used\n   * @return Staging buffer allocation\n   */\n  [[nodiscard]] StagingBuffer allocateUpload(size_t size,\n                                             size_t alignment = 256,\n                                             uint64_t fenceValue = 0);\n\n  /**\n   * @brief Allocate a staging buffer for readback operations\n   *\n   * Readback buffers are in READBACK heap (CPU-readable after GPU write).\n   *\n   * @param size Size in bytes\n   * @return Staging buffer allocation\n   */\n  [[nodiscard]] StagingBuffer allocateReadback(size_t size);\n\n  /**\n   * @brief Free a staging buffer\n   *\n   * Buffers allocated from ring buffer are automatically recycled.\n   * Dedicated buffers are pooled for reuse.\n   *\n   * @param buffer Buffer to free\n   * @param fenceValue Fence value when GPU is done using this buffer\n   */\n  void free(StagingBuffer buffer, uint64_t fenceValue);\n\n private:\n  /**\n   * @brief Reclaim completed staging buffers back to pool\n   *\n   * Internal method called during allocate* to recycle buffers.\n   * Must be called with poolMutex_ held.\n   */\n  void reclaimCompletedBuffers();\n  struct BufferEntry {\n    igl::d3d12::ComPtr<ID3D12Resource> buffer;\n    size_t size = 0;\n    uint64_t fenceValue = 0; // Fence value when this buffer was last used\n    bool isReadback = false; // True for READBACK heap, false for UPLOAD heap\n  };\n\n  ID3D12Device* device_ = nullptr;\n  ID3D12Fence* fence_ = nullptr;\n  UploadRingBuffer* uploadRingBuffer_ = nullptr;\n\n  // Pool of available staging buffers\n  std::vector<BufferEntry> availableBuffers_;\n\n  // Buffers in flight (waiting for GPU)\n  std::vector<BufferEntry> inFlightBuffers_;\n\n  // Mutex for thread-safe pool access\n  std::mutex poolMutex_;\n\n  // Maximum size to use ring buffer (larger allocations get dedicated buffers)\n  static constexpr size_t kMaxRingBufferAllocation = 1024 * 1024; // 1MB\n\n  // Create a new staging buffer\n  [[nodiscard]] Result createStagingBuffer(size_t size,\n                                           bool forReadback,\n                                           igl::d3d12::ComPtr<ID3D12Resource>* outBuffer);\n\n  // Find a reusable buffer from the pool\n  [[nodiscard]] bool findReusableBuffer(size_t size,\n                                        bool forReadback,\n                                        igl::d3d12::ComPtr<ID3D12Resource>* outBuffer);\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12StateTransition.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Headers.h>\n\nnamespace igl::d3d12 {\n\n/**\n * @brief D3D12 Resource State Transition Helper\n *\n * Provides conservative validation for D3D12 resource state transitions.\n * Enforces write-to-write transitions through COMMON intermediate state.\n *\n * Conservative Policy (voluntary, not D3D12 spec requirement):\n * - Any state with write bits -> any state with write bits: Use COMMON intermediate\n *   (e.g., RENDER_TARGET -> COMMON -> COPY_DEST)\n * - All other transitions: Direct transition allowed\n *\n * Note: D3D12 spec allows direct write-to-write transitions with a single barrier.\n * This helper uses COMMON intermediate as an extra-conservative policy.\n *\n * See:\n * https://learn.microsoft.com/windows/win32/direct3d12/using-resource-barriers-to-synchronize-gpu-access-to-resources\n */\nclass D3D12StateTransition {\n public:\n  /**\n   * @brief Check if a state contains any write bits\n   *\n   * Tests whether the state mask includes any write-capable bits.\n   * Used to enforce conservative \"write-to-write requires COMMON\" policy.\n   */\n  static bool isWriteState(D3D12_RESOURCE_STATES state) {\n    constexpr D3D12_RESOURCE_STATES kWriteMask =\n        D3D12_RESOURCE_STATE_RENDER_TARGET | D3D12_RESOURCE_STATE_UNORDERED_ACCESS |\n        D3D12_RESOURCE_STATE_DEPTH_WRITE | D3D12_RESOURCE_STATE_COPY_DEST |\n        D3D12_RESOURCE_STATE_RESOLVE_DEST | D3D12_RESOURCE_STATE_STREAM_OUT |\n        D3D12_RESOURCE_STATE_VIDEO_DECODE_WRITE | D3D12_RESOURCE_STATE_VIDEO_PROCESS_WRITE |\n        D3D12_RESOURCE_STATE_VIDEO_ENCODE_WRITE;\n    return (state & kWriteMask) != 0;\n  }\n\n  /**\n   * @brief Check if a direct state transition is allowed\n   *\n   * @return true if direct transition allowed, false if COMMON intermediate required\n   */\n  static bool isLegalDirectTransition(D3D12_RESOURCE_STATES from, D3D12_RESOURCE_STATES to) {\n    if (from == to) {\n      return true;\n    }\n\n    // COMMON can transition to/from anything directly\n    if (from == D3D12_RESOURCE_STATE_COMMON || to == D3D12_RESOURCE_STATE_COMMON) {\n      return true;\n    }\n\n    // Write-to-write requires COMMON intermediate\n    if (isWriteState(from) && isWriteState(to)) {\n      return false;\n    }\n\n    return true;\n  }\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/D3D12Telemetry.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <atomic>\n#include <cstddef>\n#include <cstdint>\n\nnamespace igl::d3d12 {\n\nclass D3D12Telemetry {\n public:\n  void incrementDrawCount(size_t count) noexcept {\n    currentDrawCount_.fetch_add(count, std::memory_order_relaxed);\n  }\n\n  void incrementShaderCompilationCount() noexcept {\n    shaderCompilationCount_.fetch_add(1, std::memory_order_relaxed);\n  }\n\n  [[nodiscard]] size_t getDrawCount() const noexcept {\n    return currentDrawCount_.load(std::memory_order_relaxed);\n  }\n\n  [[nodiscard]] size_t getShaderCompilationCount() const noexcept {\n    return shaderCompilationCount_.load(std::memory_order_relaxed);\n  }\n\n private:\n  std::atomic<size_t> currentDrawCount_{0};\n  std::atomic<size_t> shaderCompilationCount_{0};\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/DXCCompiler.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/DXCCompiler.h>\n\n#include <codecvt>\n#include <locale>\n#include <igl/d3d12/D3D12Headers.h>\n\n// Windows headers for dynamic loading\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#include <windows.h>\n\nnamespace igl::d3d12 {\n\nnamespace {\n// Import ComPtr for readability\ntemplate<typename T>\nusing ComPtr = igl::d3d12::ComPtr<T>;\n\n// DxcCreateInstance function pointer type\nusing DxcCreateInstanceProc = HRESULT(WINAPI*)(REFCLSID rclsid, REFIID riid, LPVOID* ppv);\n\n// Module handle for dxcompiler.dll\nstatic HMODULE g_dxcompilerModule = nullptr;\nstatic DxcCreateInstanceProc g_DxcCreateInstance = nullptr;\n\n// Load dxcompiler.dll dynamically\nbool loadDxcLibrary() {\n  if (g_dxcompilerModule != nullptr) {\n    return true; // Already loaded\n  }\n\n  // Try to load dxcompiler.dll from standard locations\n  g_dxcompilerModule = LoadLibraryW(L\"dxcompiler.dll\");\n  if (!g_dxcompilerModule) {\n    IGL_LOG_ERROR(\"DXCCompiler: Failed to load dxcompiler.dll (error: %lu)\\n\", GetLastError());\n    return false;\n  }\n\n  // Get the DxcCreateInstance function pointer\n  g_DxcCreateInstance = reinterpret_cast<DxcCreateInstanceProc>(\n      GetProcAddress(g_dxcompilerModule, \"DxcCreateInstance\"));\n  if (!g_DxcCreateInstance) {\n    IGL_LOG_ERROR(\"DXCCompiler: Failed to get DxcCreateInstance from dxcompiler.dll\\n\");\n    FreeLibrary(g_dxcompilerModule);\n    g_dxcompilerModule = nullptr;\n    return false;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Successfully loaded dxcompiler.dll\\n\");\n  return true;\n}\n\n// Wrapper for DxcCreateInstance that uses dynamic loading\nHRESULT DxcCreateInstanceDynamic(REFCLSID rclsid, REFIID riid, LPVOID* ppv) {\n  if (!loadDxcLibrary()) {\n    return E_FAIL;\n  }\n  return g_DxcCreateInstance(rclsid, riid, ppv);\n}\n\n} // namespace\n\nDXCCompiler::DXCCompiler() = default;\nDXCCompiler::~DXCCompiler() = default;\n\nResult DXCCompiler::initialize() {\n  if (initialized_) {\n    return Result();\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Initializing DXC compiler...\\n\");\n\n  // Create DXC utils (using dynamic loading)\n  HRESULT hr = DxcCreateInstanceDynamic(CLSID_DxcUtils, IID_PPV_ARGS(utils_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"DXCCompiler: Failed to create DxcUtils: 0x%08X\\n\", static_cast<unsigned>(hr));\n    return Result(Result::Code::RuntimeError, \"Failed to create DxcUtils\");\n  }\n\n  // Create DXC compiler (using dynamic loading)\n  hr = DxcCreateInstanceDynamic(CLSID_DxcCompiler, IID_PPV_ARGS(compiler_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"DXCCompiler: Failed to create DxcCompiler: 0x%08X\\n\", static_cast<unsigned>(hr));\n    return Result(Result::Code::RuntimeError, \"Failed to create DxcCompiler\");\n  }\n\n  // Create default include handler\n  hr = utils_->CreateDefaultIncludeHandler(includeHandler_.GetAddressOf());\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"DXCCompiler: Failed to create include handler: 0x%08X\\n\",\n                  static_cast<unsigned>(hr));\n    return Result(Result::Code::RuntimeError, \"Failed to create include handler\");\n  }\n\n  // Create DXC validator for DXIL signing (optional but highly recommended)\n  hr = DxcCreateInstanceDynamic(CLSID_DxcValidator, IID_PPV_ARGS(validator_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Validator not available (0x%08X) - DXIL will be unsigned\\n\",\n                          static_cast<unsigned>(hr));\n    // Not a fatal error - continue without validator\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Validator initialized - DXIL signing available\\n\");\n  }\n\n  initialized_ = true;\n  IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Initialization successful (Shader Model 6.0+ enabled)\\n\");\n\n  return Result();\n}\n\nResult DXCCompiler::compile(const char* source,\n                            size_t sourceLength,\n                            const char* entryPoint,\n                            const char* target,\n                            const char* debugName,\n                            uint32_t flags,\n                            std::vector<uint8_t>& outBytecode,\n                            std::string& outErrors) {\n  if (!initialized_) {\n    return Result(Result::Code::InvalidOperation, \"DXC compiler not initialized\");\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Compiling shader '%s' with target '%s' (%zu bytes source)\\n\",\n                        debugName ? debugName : \"unnamed\",\n                        target,\n                        sourceLength);\n\n  // Create source blob\n  igl::d3d12::ComPtr<IDxcBlobEncoding> sourceBlob;\n  HRESULT hr = utils_->CreateBlob(\n      source, static_cast<UINT32>(sourceLength), CP_UTF8, sourceBlob.GetAddressOf());\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"DXCCompiler: Failed to create source blob: 0x%08X\\n\", static_cast<unsigned>(hr));\n    return Result(Result::Code::RuntimeError, \"Failed to create source blob\");\n  }\n\n  // Convert strings to wide char for DXC API\n  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> converter;\n  std::wstring wEntryPoint = converter.from_bytes(entryPoint);\n  std::wstring wTarget = converter.from_bytes(target);\n\n  // Build compilation arguments\n  std::vector<LPCWSTR> arguments;\n\n  // Entry point\n  arguments.push_back(L\"-E\");\n  arguments.push_back(wEntryPoint.c_str());\n\n  // Target profile\n  arguments.push_back(L\"-T\");\n  arguments.push_back(wTarget.c_str());\n\n  // Debug info and optimization\n  if (flags & D3DCOMPILE_DEBUG) {\n    IGL_D3D12_LOG_VERBOSE(\"  DXC: Debug mode enabled\\n\");\n    arguments.push_back(L\"-Zi\"); // Debug info\n    arguments.push_back(L\"-Qembed_debug\"); // Embed debug info in shader\n    arguments.push_back(L\"-Od\"); // Disable optimizations\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"  DXC: Release mode - maximum optimization\\n\");\n    arguments.push_back(L\"-O3\"); // Maximum optimization\n  }\n\n  // Skip optimization flag\n  if (flags & D3DCOMPILE_SKIP_OPTIMIZATION) {\n    arguments.push_back(L\"-Od\");\n  }\n\n  // Warnings as errors\n  if (flags & D3DCOMPILE_WARNINGS_ARE_ERRORS) {\n    IGL_D3D12_LOG_VERBOSE(\"  DXC: Treating warnings as errors\\n\");\n    arguments.push_back(L\"-WX\");\n  }\n\n  // Compile\n  DxcBuffer sourceBuffer = {};\n  sourceBuffer.Ptr = sourceBlob->GetBufferPointer();\n  sourceBuffer.Size = sourceBlob->GetBufferSize();\n  sourceBuffer.Encoding = CP_UTF8;\n\n  igl::d3d12::ComPtr<IDxcResult> result;\n  hr = compiler_->Compile(&sourceBuffer,\n                          arguments.data(),\n                          static_cast<UINT32>(arguments.size()),\n                          includeHandler_.Get(),\n                          IID_PPV_ARGS(result.GetAddressOf()));\n\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"DXCCompiler: Compilation invocation failed: 0x%08X\\n\",\n                  static_cast<unsigned>(hr));\n    return Result(Result::Code::RuntimeError, \"DXC compilation invocation failed\");\n  }\n\n  // Check compilation status\n  HRESULT compileStatus;\n  result->GetStatus(&compileStatus);\n\n  // Get errors/warnings\n  igl::d3d12::ComPtr<IDxcBlobUtf8> errors;\n  igl::d3d12::ComPtr<IDxcBlobUtf16> errorsName;\n  result->GetOutput(DXC_OUT_ERRORS, IID_PPV_ARGS(errors.GetAddressOf()), errorsName.GetAddressOf());\n  if (errors.Get() && errors->GetStringLength() > 0) {\n    outErrors = std::string(errors->GetStringPointer(), errors->GetStringLength());\n  }\n\n  if (FAILED(compileStatus)) {\n    IGL_LOG_ERROR(\"DXCCompiler: Shader compilation failed\\n\");\n    if (!outErrors.empty()) {\n      IGL_LOG_ERROR(\"%s\\n\", outErrors.c_str());\n    }\n    return Result(Result::Code::RuntimeError, \"Shader compilation failed: \" + outErrors);\n  }\n\n  // Log warnings if any\n  if (!outErrors.empty()) {\n    IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Compilation warnings:\\n%s\\n\", outErrors.c_str());\n  }\n\n  // Get compiled bytecode (DXIL)\n  igl::d3d12::ComPtr<IDxcBlob> bytecode;\n  igl::d3d12::ComPtr<IDxcBlobUtf16> bytecodeName;\n  result->GetOutput(\n      DXC_OUT_OBJECT, IID_PPV_ARGS(bytecode.GetAddressOf()), bytecodeName.GetAddressOf());\n\n  if (!bytecode.Get()) {\n    IGL_LOG_ERROR(\"DXCCompiler: No bytecode produced\\n\");\n    return Result(Result::Code::RuntimeError, \"No bytecode produced\");\n  }\n\n  // Validate and sign DXIL if validator is available\n  if (validator_.Get()) {\n    IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Attempting DXIL validation and signing...\\n\");\n    igl::d3d12::ComPtr<IDxcOperationResult> validationResult;\n    hr = validator_->Validate(\n        bytecode.Get(), DxcValidatorFlags_InPlaceEdit, validationResult.GetAddressOf());\n\n    if (SUCCEEDED(hr)) {\n      HRESULT validationStatus;\n      validationResult->GetStatus(&validationStatus);\n      IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Validation status: 0x%08X\\n\",\n                            static_cast<unsigned>(validationStatus));\n\n      if (SUCCEEDED(validationStatus)) {\n        // Get the validated (signed) bytecode - this replaces the original\n        igl::d3d12::ComPtr<IDxcBlob> validatedBlob;\n        validationResult->GetResult(validatedBlob.GetAddressOf());\n\n        if (validatedBlob.Get()) {\n          IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Got validated blob (%zu bytes)\\n\",\n                                validatedBlob->GetBufferSize());\n          // Replace bytecode with validated version using move semantics\n          bytecode.Reset();\n          bytecode = std::move(validatedBlob);\n          IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: DXIL validated and signed successfully\\n\");\n        } else {\n          IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Validation succeeded but no blob returned\\n\");\n        }\n      } else {\n        // Validation failed - get error messages\n        igl::d3d12::ComPtr<IDxcBlobEncoding> validationErrors;\n        validationResult->GetErrorBuffer(validationErrors.GetAddressOf());\n        if (validationErrors.Get() && validationErrors->GetBufferSize() > 0) {\n          std::string errMsg(static_cast<const char*>(validationErrors->GetBufferPointer()),\n                             validationErrors->GetBufferSize());\n          IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: DXIL validation failed:\\n%s\\n\", errMsg.c_str());\n        }\n        IGL_D3D12_LOG_VERBOSE(\n            \"DXCCompiler: Using unsigned DXIL (may require experimental features)\\n\");\n      }\n    } else {\n      IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: DXIL validation skipped (validator error 0x%08X)\\n\",\n                            static_cast<unsigned>(hr));\n    }\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Using unsigned DXIL (validator not available)\\n\");\n  }\n\n  // Copy bytecode to output (either signed or unsigned)\n  const uint8_t* data = static_cast<const uint8_t*>(bytecode->GetBufferPointer());\n  size_t size = bytecode->GetBufferSize();\n  outBytecode.assign(data, data + size);\n\n  IGL_D3D12_LOG_VERBOSE(\"DXCCompiler: Compilation successful (%zu bytes DXIL bytecode)\\n\", size);\n\n  return Result();\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/DXCCompiler.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <vector>\n#include <igl/Common.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Headers.h>\n\nnamespace igl::d3d12 {\n\n/**\n * @brief DXC (DirectX Shader Compiler) wrapper for modern HLSL compilation\n *\n * Replaces legacy FXC (D3DCompile) with DXC for:\n * - Shader Model 6.0+ support\n * - 10-20% better shader performance\n * - Modern optimization passes\n * - Future features (raytracing, mesh shaders, wave intrinsics)\n */\nclass DXCCompiler {\n public:\n  DXCCompiler();\n  ~DXCCompiler();\n\n  /**\n   * @brief Initialize DXC compiler (call once)\n   * @return Result indicating success or failure\n   */\n  Result initialize();\n\n  /**\n   * @brief Check if DXC is available and initialized\n   */\n  bool isInitialized() const {\n    return initialized_;\n  }\n\n  /**\n   * @brief Compile HLSL source to DXIL bytecode (Shader Model 6.0+)\n   *\n   * @param source HLSL source code\n   * @param sourceLength Length of source code\n   * @param entryPoint Entry point function name (e.g., \"main\")\n   * @param target Shader target profile (e.g., \"vs_6_0\", \"ps_6_0\", \"cs_6_0\")\n   * @param debugName Debug name for error messages\n   * @param flags Compilation flags (D3DCOMPILE_* constants)\n   * @param outBytecode Output DXIL bytecode\n   * @param outErrors Output compilation errors/warnings\n   * @return Result indicating success or failure\n   */\n  Result compile(const char* source,\n                 size_t sourceLength,\n                 const char* entryPoint,\n                 const char* target,\n                 const char* debugName,\n                 uint32_t flags,\n                 std::vector<uint8_t>& outBytecode,\n                 std::string& outErrors);\n\n private:\n  igl::d3d12::ComPtr<IDxcUtils> utils_;\n  igl::d3d12::ComPtr<IDxcCompiler3> compiler_;\n  igl::d3d12::ComPtr<IDxcIncludeHandler> includeHandler_;\n  igl::d3d12::ComPtr<IDxcValidator> validator_;\n  bool initialized_ = false;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/DepthStencilState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/DepthStencilState.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass DepthStencilState final : public IDepthStencilState {\n public:\n  explicit DepthStencilState(const DepthStencilStateDesc& desc) : desc_(desc) {}\n  ~DepthStencilState() override = default;\n\n  const DepthStencilStateDesc& getDesc() const {\n    return desc_;\n  }\n\n private:\n  DepthStencilStateDesc desc_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/DescriptorHeapManager.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/DescriptorHeapManager.h>\n\n#include <algorithm>\n\nnamespace igl::d3d12 {\n\nResult DescriptorHeapManager::initialize(ID3D12Device* device, const Sizes& sizes) {\n  if (!device) {\n    return Result(Result::Code::ArgumentInvalid, \"Null device for DescriptorHeapManager\");\n  }\n\n  // A-006: Copy requested sizes, then validate/clamp against device limits\n  sizes_ = sizes;\n  validateAndClampSizes(device);\n\n  // Create shader-visible CBV/SRV/UAV heap\n  {\n    D3D12_DESCRIPTOR_HEAP_DESC desc = {};\n    desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;\n    desc.NumDescriptors = sizes_.cbvSrvUav;\n    desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n    if (FAILED(device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(cbvSrvUavHeap_.GetAddressOf())))) {\n      // A-006: Enhanced error message with size context\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager: Failed to create CBV/SRV/UAV heap \"\n          \"(size=%u descriptors)\\n\",\n          sizes_.cbvSrvUav);\n      return Result(Result::Code::RuntimeError, \"Failed to create CBV/SRV/UAV heap\");\n    }\n    cbvSrvUavDescriptorSize_ =\n        device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);\n    // Populate free list\n    freeCbvSrvUav_.reserve(sizes_.cbvSrvUav);\n    for (uint32_t i = 0; i < sizes_.cbvSrvUav; ++i) {\n      freeCbvSrvUav_.push_back(i);\n    }\n  }\n\n  // Create shader-visible sampler heap\n  {\n    D3D12_DESCRIPTOR_HEAP_DESC desc = {};\n    desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER;\n    desc.NumDescriptors = sizes_.samplers;\n    desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n    if (FAILED(device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(samplerHeap_.GetAddressOf())))) {\n      // A-006: Enhanced error message with size context\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager: Failed to create sampler heap \"\n          \"(size=%u descriptors, limit=2048)\\n\",\n          sizes_.samplers);\n      return Result(Result::Code::RuntimeError, \"Failed to create sampler heap\");\n    }\n    samplerDescriptorSize_ =\n        device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER);\n    // Populate free list\n    freeSamplers_.reserve(sizes_.samplers);\n    for (uint32_t i = 0; i < sizes_.samplers; ++i) {\n      freeSamplers_.push_back(i);\n    }\n  }\n\n  // Create CPU-visible RTV heap\n  {\n    D3D12_DESCRIPTOR_HEAP_DESC desc = {};\n    desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;\n    desc.NumDescriptors = sizes_.rtvs;\n    desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;\n    if (FAILED(device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(rtvHeap_.GetAddressOf())))) {\n      // A-006: Enhanced error message with size context\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager: Failed to create RTV heap \"\n          \"(size=%u descriptors)\\n\",\n          sizes_.rtvs);\n      return Result(Result::Code::RuntimeError, \"Failed to create RTV heap\");\n    }\n    rtvDescriptorSize_ = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);\n    // Populate free list\n    freeRtvs_.reserve(sizes_.rtvs);\n    for (uint32_t i = 0; i < sizes_.rtvs; ++i) {\n      freeRtvs_.push_back(i);\n    }\n  }\n\n  // Create CPU-visible DSV heap\n  {\n    D3D12_DESCRIPTOR_HEAP_DESC desc = {};\n    desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_DSV;\n    desc.NumDescriptors = sizes_.dsvs;\n    desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;\n    if (FAILED(device->CreateDescriptorHeap(&desc, IID_PPV_ARGS(dsvHeap_.GetAddressOf())))) {\n      // A-006: Enhanced error message with size context\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager: Failed to create DSV heap \"\n          \"(size=%u descriptors)\\n\",\n          sizes_.dsvs);\n      return Result(Result::Code::RuntimeError, \"Failed to create DSV heap\");\n    }\n    dsvDescriptorSize_ = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV);\n    // Populate free list\n    freeDsvs_.reserve(sizes_.dsvs);\n    for (uint32_t i = 0; i < sizes_.dsvs; ++i) {\n      freeDsvs_.push_back(i);\n    }\n  }\n\n  return Result();\n}\n\nuint32_t DescriptorHeapManager::allocateRTV() {\n  std::lock_guard<std::mutex> lock(mutex_);\n  if (freeRtvs_.empty()) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager: RTV heap exhausted! \"\n        \"Requested allocation failed (capacity: %u descriptors)\\n\",\n        sizes_.rtvs);\n    return UINT32_MAX;\n  }\n  const uint32_t idx = freeRtvs_.back();\n  freeRtvs_.pop_back();\n\n  return idx;\n}\n\nuint32_t DescriptorHeapManager::allocateDSV() {\n  std::lock_guard<std::mutex> lock(mutex_);\n  if (freeDsvs_.empty()) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager: DSV heap exhausted! \"\n        \"Requested allocation failed (capacity: %u descriptors)\\n\",\n        sizes_.dsvs);\n    return UINT32_MAX;\n  }\n  const uint32_t idx = freeDsvs_.back();\n  freeDsvs_.pop_back();\n\n  return idx;\n}\n\nvoid DescriptorHeapManager::freeRTV(uint32_t index) {\n  std::lock_guard<std::mutex> lock(mutex_);\n\n  // Validate bounds\n  if (index == UINT32_MAX || index >= sizes_.rtvs) {\n    return;\n  }\n\n  // CRITICAL: Detect double-free bugs by checking if index is already in free list\n  // Note: O(N) scan - acceptable for RTV heap (typically ~256 descriptors)\n  if (std::find(freeRtvs_.begin(), freeRtvs_.end(), index) != freeRtvs_.end()) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager: DOUBLE-FREE DETECTED - RTV index %u already freed!\\n\",\n                  index);\n    IGL_DEBUG_ASSERT(false, \"Double-free of RTV descriptor - caller bug detected\");\n    return; // Prevent corruption even in release builds\n  }\n\n  // Add to free list\n  freeRtvs_.push_back(index);\n}\n\nvoid DescriptorHeapManager::freeDSV(uint32_t index) {\n  std::lock_guard<std::mutex> lock(mutex_);\n\n  // Validate bounds\n  if (index == UINT32_MAX || index >= sizes_.dsvs) {\n    return;\n  }\n\n  // CRITICAL: Detect double-free bugs by checking if index is already in free list\n  // Note: O(N) scan - acceptable for DSV heap (typically ~128 descriptors)\n  if (std::find(freeDsvs_.begin(), freeDsvs_.end(), index) != freeDsvs_.end()) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager: DOUBLE-FREE DETECTED - DSV index %u already freed!\\n\",\n                  index);\n    IGL_DEBUG_ASSERT(false, \"Double-free of DSV descriptor - caller bug detected\");\n    return; // Prevent corruption even in release builds\n  }\n\n  // Add to free list\n  freeDsvs_.push_back(index);\n}\n\nuint32_t DescriptorHeapManager::allocateCbvSrvUav() {\n  std::lock_guard<std::mutex> lock(mutex_);\n  if (freeCbvSrvUav_.empty()) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager: CBV/SRV/UAV heap exhausted! \"\n        \"Requested allocation failed (capacity: %u descriptors)\\n\",\n        sizes_.cbvSrvUav);\n    return UINT32_MAX;\n  }\n  const uint32_t idx = freeCbvSrvUav_.back();\n  freeCbvSrvUav_.pop_back();\n\n  return idx;\n}\n\nuint32_t DescriptorHeapManager::allocateSampler() {\n  std::lock_guard<std::mutex> lock(mutex_);\n  if (freeSamplers_.empty()) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager: Sampler heap exhausted! \"\n        \"Requested allocation failed (capacity: %u descriptors)\\n\",\n        sizes_.samplers);\n    return UINT32_MAX;\n  }\n  const uint32_t idx = freeSamplers_.back();\n  freeSamplers_.pop_back();\n\n  return idx;\n}\n\nvoid DescriptorHeapManager::freeCbvSrvUav(uint32_t index) {\n  std::lock_guard<std::mutex> lock(mutex_);\n\n  // Validate bounds\n  if (index == UINT32_MAX || index >= sizes_.cbvSrvUav) {\n    return;\n  }\n\n#if IGL_DEBUG\n  // CRITICAL: Detect double-free bugs by checking if index is already in free list\n  // Note: O(N) scan - can be expensive for large heaps (~4096 descriptors).\n  // Only enabled in debug builds to avoid overhead in production.\n  if (std::find(freeCbvSrvUav_.begin(), freeCbvSrvUav_.end(), index) != freeCbvSrvUav_.end()) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager: DOUBLE-FREE DETECTED - CBV/SRV/UAV index %u already freed!\\n\",\n        index);\n    IGL_DEBUG_ASSERT(false, \"Double-free of CBV/SRV/UAV descriptor - caller bug detected\");\n    return; // Prevent corruption even in debug builds\n  }\n#endif\n\n  // Add to free list\n  freeCbvSrvUav_.push_back(index);\n}\n\nvoid DescriptorHeapManager::freeSampler(uint32_t index) {\n  std::lock_guard<std::mutex> lock(mutex_);\n\n  // Validate bounds\n  if (index == UINT32_MAX || index >= sizes_.samplers) {\n    return;\n  }\n\n#if IGL_DEBUG\n  // CRITICAL: Detect double-free bugs by checking if index is already in free list\n  // Note: O(N) scan - can be expensive for large heaps (~2048 descriptors).\n  // Only enabled in debug builds to avoid overhead in production.\n  if (std::find(freeSamplers_.begin(), freeSamplers_.end(), index) != freeSamplers_.end()) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager: DOUBLE-FREE DETECTED - Sampler index %u already freed!\\n\",\n                  index);\n    IGL_DEBUG_ASSERT(false, \"Double-free of Sampler descriptor - caller bug detected\");\n    return; // Prevent corruption even in debug builds\n  }\n#endif\n\n  // Add to free list\n  freeSamplers_.push_back(index);\n}\n\n// Explicit error checking with bool return, building on the basic index validation helpers.\nbool DescriptorHeapManager::getRTVHandle(uint32_t index,\n                                         D3D12_CPU_DESCRIPTOR_HANDLE* outHandle) const {\n  if (!outHandle) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getRTVHandle: outHandle is null\\n\");\n    return false;\n  }\n\n  // Initialize to zero in case of error\n  *outHandle = {};\n\n  if (!rtvHeap_.Get()) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getRTVHandle: RTV heap is null\\n\");\n    IGL_DEBUG_ASSERT(false, \"RTV heap is null\");\n    return false;\n  }\n\n  if (index == UINT32_MAX) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager::getRTVHandle: Invalid index UINT32_MAX (allocation failure \"\n        \"sentinel)\\n\");\n    IGL_DEBUG_ASSERT(false, \"Attempted to get RTV handle with invalid index UINT32_MAX\");\n    return false;\n  }\n\n  if (index >= sizes_.rtvs) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager::getRTVHandle: Index %u exceeds heap size %u\\n\", index, sizes_.rtvs);\n    IGL_DEBUG_ASSERT(false, \"RTV descriptor index out of bounds\");\n    return false;\n  }\n\n  // Check if descriptor has been freed (use-after-free detection)\n  {\n    std::lock_guard<std::mutex> lock(mutex_);\n    if (std::find(freeRtvs_.begin(), freeRtvs_.end(), index) != freeRtvs_.end()) {\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager::getRTVHandle: Descriptor index %u has been freed \"\n          \"(use-after-free)\\n\",\n          index);\n      IGL_DEBUG_ASSERT(false, \"Use-after-free: Accessing freed RTV descriptor\");\n      return false;\n    }\n  }\n\n  *outHandle = rtvHeap_->GetCPUDescriptorHandleForHeapStart();\n  outHandle->ptr += index * rtvDescriptorSize_;\n\n  // Validate final handle is non-null\n  IGL_DEBUG_ASSERT(outHandle->ptr != 0, \"getRTVHandle returned null CPU descriptor handle\");\n\n  return true;\n}\n\n// Explicit error checking with bool return, building on descriptor validation helpers.\nbool DescriptorHeapManager::getDSVHandle(uint32_t index,\n                                         D3D12_CPU_DESCRIPTOR_HANDLE* outHandle) const {\n  if (!outHandle) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getDSVHandle: outHandle is null\\n\");\n    return false;\n  }\n\n  // Initialize to zero in case of error\n  *outHandle = {};\n\n  if (!dsvHeap_.Get()) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getDSVHandle: DSV heap is null\\n\");\n    IGL_DEBUG_ASSERT(false, \"DSV heap is null\");\n    return false;\n  }\n\n  if (index == UINT32_MAX) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager::getDSVHandle: Invalid index UINT32_MAX (allocation failure \"\n        \"sentinel)\\n\");\n    IGL_DEBUG_ASSERT(false, \"Attempted to get DSV handle with invalid index UINT32_MAX\");\n    return false;\n  }\n\n  if (index >= sizes_.dsvs) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager::getDSVHandle: Index %u exceeds heap size %u\\n\", index, sizes_.dsvs);\n    IGL_DEBUG_ASSERT(false, \"DSV descriptor index out of bounds\");\n    return false;\n  }\n\n  // Check if descriptor has been freed (use-after-free detection)\n  {\n    std::lock_guard<std::mutex> lock(mutex_);\n    if (std::find(freeDsvs_.begin(), freeDsvs_.end(), index) != freeDsvs_.end()) {\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager::getDSVHandle: Descriptor index %u has been freed \"\n          \"(use-after-free)\\n\",\n          index);\n      IGL_DEBUG_ASSERT(false, \"Use-after-free: Accessing freed DSV descriptor\");\n      return false;\n    }\n  }\n\n  *outHandle = dsvHeap_->GetCPUDescriptorHandleForHeapStart();\n  outHandle->ptr += index * dsvDescriptorSize_;\n\n  // Validate final handle is non-null\n  IGL_DEBUG_ASSERT(outHandle->ptr != 0, \"getDSVHandle returned null CPU descriptor handle\");\n\n  return true;\n}\n\n// Bool-returning CBV/SRV/UAV handle getters\nbool DescriptorHeapManager::getCbvSrvUavCpuHandle(uint32_t index,\n                                                  D3D12_CPU_DESCRIPTOR_HANDLE* outHandle) const {\n  if (!outHandle) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getCbvSrvUavCpuHandle: outHandle is null\\n\");\n    return false;\n  }\n\n  *outHandle = {};\n\n  if (!cbvSrvUavHeap_.Get()) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getCbvSrvUavCpuHandle: CBV/SRV/UAV heap is null\\n\");\n    IGL_DEBUG_ASSERT(false, \"CBV/SRV/UAV heap is null\");\n    return false;\n  }\n\n  if (index == UINT32_MAX) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager::getCbvSrvUavCpuHandle: Invalid index UINT32_MAX (allocation \"\n        \"failure sentinel)\\n\");\n    IGL_DEBUG_ASSERT(false, \"Attempted to get CBV/SRV/UAV handle with invalid index UINT32_MAX\");\n    return false;\n  }\n\n  if (index >= sizes_.cbvSrvUav) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getCbvSrvUavCpuHandle: Index %u exceeds heap size %u\\n\",\n                  index,\n                  sizes_.cbvSrvUav);\n    IGL_DEBUG_ASSERT(false, \"CBV/SRV/UAV descriptor index out of bounds\");\n    return false;\n  }\n\n#if IGL_DEBUG\n  {\n    std::lock_guard<std::mutex> lock(mutex_);\n    if (std::find(freeCbvSrvUav_.begin(), freeCbvSrvUav_.end(), index) != freeCbvSrvUav_.end()) {\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager::getCbvSrvUavCpuHandle: Descriptor index %u has been freed \"\n          \"(use-after-free)\\n\",\n          index);\n      IGL_DEBUG_ASSERT(false, \"Use-after-free: Accessing freed CBV/SRV/UAV descriptor\");\n      return false;\n    }\n  }\n#endif\n\n  *outHandle = cbvSrvUavHeap_->GetCPUDescriptorHandleForHeapStart();\n  outHandle->ptr += index * cbvSrvUavDescriptorSize_;\n\n  IGL_DEBUG_ASSERT(outHandle->ptr != 0,\n                   \"getCbvSrvUavCpuHandle returned null CPU descriptor handle\");\n\n  return true;\n}\n\nbool DescriptorHeapManager::getCbvSrvUavGpuHandle(uint32_t index,\n                                                  D3D12_GPU_DESCRIPTOR_HANDLE* outHandle) const {\n  if (!outHandle) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getCbvSrvUavGpuHandle: outHandle is null\\n\");\n    return false;\n  }\n\n  *outHandle = {};\n\n  if (!cbvSrvUavHeap_.Get()) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getCbvSrvUavGpuHandle: CBV/SRV/UAV heap is null\\n\");\n    IGL_DEBUG_ASSERT(false, \"CBV/SRV/UAV heap is null\");\n    return false;\n  }\n\n  if (index == UINT32_MAX) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager::getCbvSrvUavGpuHandle: Invalid index UINT32_MAX (allocation \"\n        \"failure sentinel)\\n\");\n    IGL_DEBUG_ASSERT(false,\n                     \"Attempted to get CBV/SRV/UAV GPU handle with invalid index UINT32_MAX\");\n    return false;\n  }\n\n  if (index >= sizes_.cbvSrvUav) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getCbvSrvUavGpuHandle: Index %u exceeds heap size %u\\n\",\n                  index,\n                  sizes_.cbvSrvUav);\n    IGL_DEBUG_ASSERT(false, \"CBV/SRV/UAV descriptor index out of bounds\");\n    return false;\n  }\n\n#if IGL_DEBUG\n  {\n    std::lock_guard<std::mutex> lock(mutex_);\n    if (std::find(freeCbvSrvUav_.begin(), freeCbvSrvUav_.end(), index) != freeCbvSrvUav_.end()) {\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager::getCbvSrvUavGpuHandle: Descriptor index %u has been freed \"\n          \"(use-after-free)\\n\",\n          index);\n      IGL_DEBUG_ASSERT(false, \"Use-after-free: Accessing freed CBV/SRV/UAV descriptor\");\n      return false;\n    }\n  }\n#endif\n\n  *outHandle = cbvSrvUavHeap_->GetGPUDescriptorHandleForHeapStart();\n  outHandle->ptr += index * cbvSrvUavDescriptorSize_;\n\n  IGL_DEBUG_ASSERT(outHandle->ptr != 0,\n                   \"getCbvSrvUavGpuHandle returned null GPU descriptor handle\");\n\n  return true;\n}\n\nbool DescriptorHeapManager::getSamplerCpuHandle(uint32_t index,\n                                                D3D12_CPU_DESCRIPTOR_HANDLE* outHandle) const {\n  if (!outHandle) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getSamplerCpuHandle: outHandle is null\\n\");\n    return false;\n  }\n\n  *outHandle = {};\n\n  if (!samplerHeap_.Get()) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getSamplerCpuHandle: Sampler heap is null\\n\");\n    IGL_DEBUG_ASSERT(false, \"Sampler heap is null\");\n    return false;\n  }\n\n  if (index == UINT32_MAX) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager::getSamplerCpuHandle: Invalid index UINT32_MAX (allocation failure \"\n        \"sentinel)\\n\");\n    IGL_DEBUG_ASSERT(false, \"Attempted to get Sampler handle with invalid index UINT32_MAX\");\n    return false;\n  }\n\n  if (index >= sizes_.samplers) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getSamplerCpuHandle: Index %u exceeds heap size %u\\n\",\n                  index,\n                  sizes_.samplers);\n    IGL_DEBUG_ASSERT(false, \"Sampler descriptor index out of bounds\");\n    return false;\n  }\n\n#if IGL_DEBUG\n  {\n    std::lock_guard<std::mutex> lock(mutex_);\n    if (std::find(freeSamplers_.begin(), freeSamplers_.end(), index) != freeSamplers_.end()) {\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager::getSamplerCpuHandle: Descriptor index %u has been freed \"\n          \"(use-after-free)\\n\",\n          index);\n      IGL_DEBUG_ASSERT(false, \"Use-after-free: Accessing freed Sampler descriptor\");\n      return false;\n    }\n  }\n#endif\n\n  *outHandle = samplerHeap_->GetCPUDescriptorHandleForHeapStart();\n  outHandle->ptr += index * samplerDescriptorSize_;\n\n  IGL_DEBUG_ASSERT(outHandle->ptr != 0, \"getSamplerCpuHandle returned null CPU descriptor handle\");\n\n  return true;\n}\n\nbool DescriptorHeapManager::getSamplerGpuHandle(uint32_t index,\n                                                D3D12_GPU_DESCRIPTOR_HANDLE* outHandle) const {\n  if (!outHandle) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getSamplerGpuHandle: outHandle is null\\n\");\n    return false;\n  }\n\n  *outHandle = {};\n\n  if (!samplerHeap_.Get()) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getSamplerGpuHandle: Sampler heap is null\\n\");\n    IGL_DEBUG_ASSERT(false, \"Sampler heap is null\");\n    return false;\n  }\n\n  if (index == UINT32_MAX) {\n    IGL_LOG_ERROR(\n        \"DescriptorHeapManager::getSamplerGpuHandle: Invalid index UINT32_MAX (allocation failure \"\n        \"sentinel)\\n\");\n    IGL_DEBUG_ASSERT(false, \"Attempted to get Sampler GPU handle with invalid index UINT32_MAX\");\n    return false;\n  }\n\n  if (index >= sizes_.samplers) {\n    IGL_LOG_ERROR(\"DescriptorHeapManager::getSamplerGpuHandle: Index %u exceeds heap size %u\\n\",\n                  index,\n                  sizes_.samplers);\n    IGL_DEBUG_ASSERT(false, \"Sampler descriptor index out of bounds\");\n    return false;\n  }\n\n#if IGL_DEBUG\n  {\n    std::lock_guard<std::mutex> lock(mutex_);\n    if (std::find(freeSamplers_.begin(), freeSamplers_.end(), index) != freeSamplers_.end()) {\n      IGL_LOG_ERROR(\n          \"DescriptorHeapManager::getSamplerGpuHandle: Descriptor index %u has been freed \"\n          \"(use-after-free)\\n\",\n          index);\n      IGL_DEBUG_ASSERT(false, \"Use-after-free: Accessing freed Sampler descriptor\");\n      return false;\n    }\n  }\n#endif\n\n  *outHandle = samplerHeap_->GetGPUDescriptorHandleForHeapStart();\n  outHandle->ptr += index * samplerDescriptorSize_;\n\n  IGL_DEBUG_ASSERT(outHandle->ptr != 0, \"getSamplerGpuHandle returned null GPU descriptor handle\");\n\n  return true;\n}\n\n// Descriptor handle validation helpers.\nbool DescriptorHeapManager::isValidRTVIndex(uint32_t index) const {\n  if (index == UINT32_MAX) {\n    return false; // Sentinel value for allocation failure\n  }\n  if (index >= sizes_.rtvs) {\n    return false; // Out of bounds\n  }\n  // Check if descriptor is currently allocated (not in free list)\n  // This helps detect use-after-free bugs\n  std::lock_guard<std::mutex> lock(mutex_);\n  for (const auto& freeIdx : freeRtvs_) {\n    if (freeIdx == index) {\n      return false; // Index is in free list, so it's not allocated\n    }\n  }\n  return true; // Not in free list, so it's allocated\n}\n\nbool DescriptorHeapManager::isValidDSVIndex(uint32_t index) const {\n  if (index == UINT32_MAX) {\n    return false; // Sentinel value for allocation failure\n  }\n  if (index >= sizes_.dsvs) {\n    return false; // Out of bounds\n  }\n  // Check if descriptor is currently allocated\n  std::lock_guard<std::mutex> lock(mutex_);\n  for (const auto& freeIdx : freeDsvs_) {\n    if (freeIdx == index) {\n      return false; // Index is in free list, so it's not allocated\n    }\n  }\n  return true; // Not in free list, so it's allocated\n}\n\nbool DescriptorHeapManager::isValidCbvSrvUavIndex(uint32_t index) const {\n  if (index == UINT32_MAX) {\n    return false; // Sentinel value for allocation failure\n  }\n  if (index >= sizes_.cbvSrvUav) {\n    return false; // Out of bounds\n  }\n  // Check if descriptor is currently allocated\n  std::lock_guard<std::mutex> lock(mutex_);\n  for (const auto& freeIdx : freeCbvSrvUav_) {\n    if (freeIdx == index) {\n      return false; // Index is in free list, so it's not allocated\n    }\n  }\n  return true; // Not in free list, so it's allocated\n}\n\nbool DescriptorHeapManager::isValidSamplerIndex(uint32_t index) const {\n  if (index == UINT32_MAX) {\n    return false; // Sentinel value for allocation failure\n  }\n  if (index >= sizes_.samplers) {\n    return false; // Out of bounds\n  }\n  // Check if descriptor is currently allocated\n  std::lock_guard<std::mutex> lock(mutex_);\n  for (const auto& freeIdx : freeSamplers_) {\n    if (freeIdx == index) {\n      return false; // Index is in free list, so it's not allocated\n    }\n  }\n  return true; // Not in free list, so it's allocated\n}\n\nvoid DescriptorHeapManager::logUsageStats() const {\n  std::lock_guard<std::mutex> lock(mutex_);\n  IGL_D3D12_LOG_VERBOSE(\"=== Descriptor Heap Usage Statistics ===\\n\");\n\n  // CBV/SRV/UAV heap\n  const uint32_t cbvSrvUavUsed = sizes_.cbvSrvUav - static_cast<uint32_t>(freeCbvSrvUav_.size());\n  const float cbvSrvUavPercent = (cbvSrvUavUsed * 100.0f) / sizes_.cbvSrvUav;\n  IGL_D3D12_LOG_VERBOSE(\n      \"  CBV/SRV/UAV: %u / %u (%.1f%% used)\\n\", cbvSrvUavUsed, sizes_.cbvSrvUav, cbvSrvUavPercent);\n\n  // Sampler heap\n  const uint32_t samplersUsed = sizes_.samplers - static_cast<uint32_t>(freeSamplers_.size());\n  const float samplersPercent = (samplersUsed * 100.0f) / sizes_.samplers;\n  IGL_D3D12_LOG_VERBOSE(\n      \"  Samplers:    %u / %u (%.1f%% used)\\n\", samplersUsed, sizes_.samplers, samplersPercent);\n\n  // RTV heap\n  const uint32_t rtvsUsed = sizes_.rtvs - static_cast<uint32_t>(freeRtvs_.size());\n  const float rtvsPercent = (rtvsUsed * 100.0f) / sizes_.rtvs;\n  IGL_D3D12_LOG_VERBOSE(\n      \"  RTVs:        %u / %u (%.1f%% used)\\n\", rtvsUsed, sizes_.rtvs, rtvsPercent);\n\n  // DSV heap\n  const uint32_t dsvsUsed = sizes_.dsvs - static_cast<uint32_t>(freeDsvs_.size());\n  const float dsvsPercent = (dsvsUsed * 100.0f) / sizes_.dsvs;\n  IGL_D3D12_LOG_VERBOSE(\n      \"  DSVs:        %u / %u (%.1f%% used)\\n\", dsvsUsed, sizes_.dsvs, dsvsPercent);\n\n  IGL_D3D12_LOG_VERBOSE(\"========================================\\n\");\n}\n\n// Explicit cleanup to release descriptor heaps before device destruction\nvoid DescriptorHeapManager::cleanup() {\n  std::lock_guard<std::mutex> lock(mutex_);\n\n  // Release all descriptor heaps explicitly to prevent leaks\n  cbvSrvUavHeap_.Reset();\n  samplerHeap_.Reset();\n  rtvHeap_.Reset();\n  dsvHeap_.Reset();\n\n  // Clear free lists\n  freeCbvSrvUav_.clear();\n  freeSamplers_.clear();\n  freeRtvs_.clear();\n  freeDsvs_.clear();\n}\n\nvoid DescriptorHeapManager::validateAndClampSizes(ID3D12Device* device) {\n  // A-006: Validate descriptor heap sizes against D3D12 device limits\n  IGL_D3D12_LOG_VERBOSE(\"=== Descriptor Heap Size Validation ===\\n\");\n\n  // Query device options for resource binding tier (affects limits)\n  D3D12_FEATURE_DATA_D3D12_OPTIONS options = {};\n  HRESULT hr = device->CheckFeatureSupport(D3D12_FEATURE_D3D12_OPTIONS, &options, sizeof(options));\n\n  if (SUCCEEDED(hr)) {\n    const char* tierName = \"Unknown\";\n    switch (options.ResourceBindingTier) {\n    case D3D12_RESOURCE_BINDING_TIER_1:\n      tierName = \"Tier 1\";\n      break;\n    case D3D12_RESOURCE_BINDING_TIER_2:\n      tierName = \"Tier 2\";\n      break;\n    case D3D12_RESOURCE_BINDING_TIER_3:\n      tierName = \"Tier 3\";\n      break;\n    }\n    IGL_D3D12_LOG_VERBOSE(\"  Resource Binding Tier: %s\\n\", tierName);\n  }\n\n  // === SHADER-VISIBLE CBV/SRV/UAV HEAP ===\n  // D3D12 spec: Max 1,000,000 descriptors for shader-visible heaps (FL 11.0+)\n  // Conservative limit: 1,000,000 (actual limit may be lower on some hardware)\n  constexpr uint32_t kMaxCbvSrvUavDescriptors = 1000000;\n\n  if (sizes_.cbvSrvUav > kMaxCbvSrvUavDescriptors) {\n    IGL_LOG_ERROR(\n        \"  WARNING: Requested CBV/SRV/UAV heap size (%u) exceeds \"\n        \"D3D12 spec limit (%u)\\n\",\n        sizes_.cbvSrvUav,\n        kMaxCbvSrvUavDescriptors);\n    IGL_LOG_ERROR(\"  Clamping to %u descriptors\\n\", kMaxCbvSrvUavDescriptors);\n    sizes_.cbvSrvUav = kMaxCbvSrvUavDescriptors;\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"  CBV/SRV/UAV heap size: %u (limit: %u) - OK\\n\",\n                          sizes_.cbvSrvUav,\n                          kMaxCbvSrvUavDescriptors);\n  }\n\n  // === SHADER-VISIBLE SAMPLER HEAP ===\n  // D3D12 spec: Max 2,048 descriptors (D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE)\n  constexpr uint32_t kMaxSamplerDescriptors = 2048;\n\n  if (sizes_.samplers > kMaxSamplerDescriptors) {\n    IGL_LOG_ERROR(\n        \"  WARNING: Requested sampler heap size (%u) exceeds \"\n        \"D3D12 limit (%u)\\n\",\n        sizes_.samplers,\n        kMaxSamplerDescriptors);\n    IGL_LOG_ERROR(\"  Clamping to %u descriptors\\n\", kMaxSamplerDescriptors);\n    sizes_.samplers = kMaxSamplerDescriptors;\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\n        \"  Sampler heap size: %u (limit: %u) - OK\\n\", sizes_.samplers, kMaxSamplerDescriptors);\n  }\n\n  // === CPU-VISIBLE RTV HEAP ===\n  // D3D12 spec: Typically 64K+ descriptors (device-dependent)\n  // Conservative validation: Warn if exceeding 16K (reasonable limit)\n  constexpr uint32_t kMaxRtvDescriptors = 16384;\n\n  if (sizes_.rtvs > kMaxRtvDescriptors) {\n    IGL_LOG_ERROR(\"  WARNING: Requested RTV heap size (%u) is unusually large\\n\", sizes_.rtvs);\n    IGL_LOG_ERROR(\"  Recommended maximum: %u descriptors\\n\", kMaxRtvDescriptors);\n    // Don't clamp - let CreateDescriptorHeap fail if truly excessive\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\n        \"  RTV heap size: %u (recommended max: %u) - OK\\n\", sizes_.rtvs, kMaxRtvDescriptors);\n  }\n\n  // === CPU-VISIBLE DSV HEAP ===\n  // Similar limits to RTV heap\n  constexpr uint32_t kMaxDsvDescriptors = 16384;\n\n  if (sizes_.dsvs > kMaxDsvDescriptors) {\n    IGL_LOG_ERROR(\"  WARNING: Requested DSV heap size (%u) is unusually large\\n\", sizes_.dsvs);\n    IGL_LOG_ERROR(\"  Recommended maximum: %u descriptors\\n\", kMaxDsvDescriptors);\n    // Don't clamp - let CreateDescriptorHeap fail if truly excessive\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\n        \"  DSV heap size: %u (recommended max: %u) - OK\\n\", sizes_.dsvs, kMaxDsvDescriptors);\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"========================================\\n\");\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/DescriptorHeapManager.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <mutex>\n#include <vector>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\n/**\n * @brief Persistent Descriptor Allocator for CPU-visible and long-lived descriptors\n *\n * ============================================================================\n * ARCHITECTURE: Strategy 2 - Persistent Descriptor Allocator\n * ============================================================================\n *\n * DescriptorHeapManager handles descriptors with EXPLICIT lifecycle management:\n * - **PRIMARY USE**: CPU-visible descriptors (RTV/DSV) for Texture and Framebuffer\n * - **SECONDARY USE**: Shader-visible descriptors for headless/unit test contexts\n *\n * **Key Differences from Per-Frame System (Strategy 1)**:\n * - Lifecycle: Allocated at resource creation, freed at destruction (not per-frame reset)\n * - Allocation: Free-list pattern (not linear) - supports arbitrary alloc/free\n * - Safety: Double-free detection, mutex protection for thread-safety\n * - Visibility: Creates both CPU-visible AND shader-visible heaps\n *\n * **When to Use This vs Per-Frame (D3D12ResourcesBinder)**:\n * - Use DescriptorHeapManager for: RTV/DSV allocation for textures/framebuffers\n * - Use DescriptorHeapManager for: Headless contexts without per-frame infrastructure\n * - Do NOT use for: Transient SRV/UAV/CBV/Samplers during rendering\n * - Do NOT use for: Descriptor table binding in encoders\n *\n * **Design Note**: This class creates shader-visible heaps (CBV/SRV/UAV, Samplers)\n * for backward compatibility with headless contexts. In normal rendering contexts:\n * - D3D12Context uses per-frame heaps (Strategy 1) for shader-visible descriptors\n * - DescriptorHeapManager is only used for RTV/DSV allocation\n * - Its shader-visible heaps serve as a fallback when per-frame heaps are unavailable\n *   (e.g., headless/unit-test contexts - see ComputeCommandEncoder.cpp:32-40)\n *\n * For architecture overview, see D3D12ResourcesBinder.h documentation.\n *\n * Thread-safety: This class IS thread-safe (uses mutex for allocation/free).\n */\nclass DescriptorHeapManager {\n public:\n  // Descriptor heap sizes configuration.\n  // Default values match D3D12ContextConfig for consistency but can be customized at runtime.\n  struct Sizes {\n    uint32_t cbvSrvUav = 4096; // shader-visible (kept larger for unit tests/headless)\n    uint32_t samplers = 2048; // shader-visible (D3D12 spec limit)\n    uint32_t rtvs = 256; // CPU-visible (default from D3D12ContextConfig)\n    uint32_t dsvs = 128; // CPU-visible (default from D3D12ContextConfig)\n\n    // Note: D3D12Context and HeadlessContext construct Sizes manually based on their\n    // specific needs (environment overrides, test requirements, etc.) rather than using\n    // a generic factory method. To customize, construct Sizes with desired values.\n\n    // Default sizes factory - workaround for C++ limitation with default member\n    // initializers in nested structs used as default parameters\n    static Sizes getDefault() {\n      return Sizes{};\n    }\n  };\n\n  DescriptorHeapManager() = default;\n  Result initialize(ID3D12Device* device, const Sizes& sizes = Sizes::getDefault());\n\n  // Shader-visible heaps for binding\n  ID3D12DescriptorHeap* getCbvSrvUavHeap() const {\n    return cbvSrvUavHeap_.Get();\n  }\n  ID3D12DescriptorHeap* getSamplerHeap() const {\n    return samplerHeap_.Get();\n  }\n\n  // Allocate a CPU descriptor from RTV/DSV heaps\n  uint32_t allocateRTV();\n  uint32_t allocateDSV();\n  void freeRTV(uint32_t index);\n  void freeDSV(uint32_t index);\n\n  // Allocate indices inside shader-visible heaps (for creating CBV/SRV/UAV or Samplers)\n  uint32_t allocateCbvSrvUav();\n  uint32_t allocateSampler();\n  void freeCbvSrvUav(uint32_t index);\n  void freeSampler(uint32_t index);\n\n  // Get CPU/GPU descriptor handles with validation.\n  // Returns false on error (invalid index, null heap, use-after-free) and leaves outHandle zeroed.\n  // Returns true on success and writes the valid handle to outHandle.\n  [[nodiscard]] bool getRTVHandle(uint32_t index, D3D12_CPU_DESCRIPTOR_HANDLE* outHandle) const;\n  [[nodiscard]] bool getDSVHandle(uint32_t index, D3D12_CPU_DESCRIPTOR_HANDLE* outHandle) const;\n  [[nodiscard]] bool getCbvSrvUavCpuHandle(uint32_t index,\n                                           D3D12_CPU_DESCRIPTOR_HANDLE* outHandle) const;\n  [[nodiscard]] bool getCbvSrvUavGpuHandle(uint32_t index,\n                                           D3D12_GPU_DESCRIPTOR_HANDLE* outHandle) const;\n  [[nodiscard]] bool getSamplerCpuHandle(uint32_t index,\n                                         D3D12_CPU_DESCRIPTOR_HANDLE* outHandle) const;\n  [[nodiscard]] bool getSamplerGpuHandle(uint32_t index,\n                                         D3D12_GPU_DESCRIPTOR_HANDLE* outHandle) const;\n\n  uint32_t getCbvSrvUavDescriptorSize() const {\n    return cbvSrvUavDescriptorSize_;\n  }\n  uint32_t getSamplerDescriptorSize() const {\n    return samplerDescriptorSize_;\n  }\n  uint32_t getRtvDescriptorSize() const {\n    return rtvDescriptorSize_;\n  }\n  uint32_t getDsvDescriptorSize() const {\n    return dsvDescriptorSize_;\n  }\n\n  // Descriptor handle validation helpers for diagnostics/telemetry.\n  // Note: These are NOT optimized for hot-path usage (O(N) free-list scans).\n  // For per-draw/dispatch validation, prefer the get*Handle methods which cache results.\n  [[nodiscard]] bool isValidRTVIndex(uint32_t index) const;\n  [[nodiscard]] bool isValidDSVIndex(uint32_t index) const;\n  [[nodiscard]] bool isValidCbvSrvUavIndex(uint32_t index) const;\n  [[nodiscard]] bool isValidSamplerIndex(uint32_t index) const;\n\n  // Telemetry: Log current heap usage statistics\n  void logUsageStats() const;\n\n  // Explicit cleanup of descriptor heaps to prevent leaks.\n  void cleanup();\n\n private:\n  // Heaps\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> cbvSrvUavHeap_;\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> samplerHeap_;\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> rtvHeap_;\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> dsvHeap_;\n\n  // Increments\n  UINT cbvSrvUavDescriptorSize_ = 0;\n  UINT samplerDescriptorSize_ = 0;\n  UINT rtvDescriptorSize_ = 0;\n  UINT dsvDescriptorSize_ = 0;\n\n  // Free lists for CPU-only heaps\n  std::vector<uint32_t> freeRtvs_;\n  std::vector<uint32_t> freeDsvs_;\n  // Free lists for shader-visible heaps\n  std::vector<uint32_t> freeCbvSrvUav_;\n  std::vector<uint32_t> freeSamplers_;\n\n  // Total sizes\n  Sizes sizes_{};\n\n  // Thread safety\n  mutable std::mutex mutex_;\n\n  // A-006: Validate and clamp descriptor heap sizes to device limits\n  void validateAndClampSizes(ID3D12Device* device);\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/Device.h>\n\n#include <cctype>\n#include <cstdlib>\n#include <cstring>\n#include <d3d12sdklayers.h>\n#include <d3dcompiler.h>\n#include <dxgidebug.h>\n#include <filesystem>\n#include <fstream>\n#include <mutex> // For std::call_once.\n#include <vector>\n#include <igl/Assert.h> // For IGL_DEBUG_ASSERT in waitForUploadFence.\n#include <igl/FramebufferWrapper.h>\n#include <igl/Texture.h>\n#include <igl/VertexInputState.h>\n#include <igl/d3d12/Buffer.h>\n#include <igl/d3d12/CommandQueue.h>\n#include <igl/d3d12/ComputePipelineState.h>\n#include <igl/d3d12/D3D12FenceWaiter.h>\n#include <igl/d3d12/D3D12ImmediateCommands.h>\n#include <igl/d3d12/D3D12RootSignatureKey.h>\n#include <igl/d3d12/D3D12StagingDevice.h>\n#include <igl/d3d12/DXCCompiler.h>\n#include <igl/d3d12/DepthStencilState.h>\n#include <igl/d3d12/Framebuffer.h>\n#include <igl/d3d12/PlatformDevice.h>\n#include <igl/d3d12/RenderPipelineState.h>\n#include <igl/d3d12/SamplerState.h>\n#include <igl/d3d12/ShaderModule.h>\n#include <igl/d3d12/Texture.h>\n#include <igl/d3d12/Timer.h>\n#include <igl/d3d12/UploadRingBuffer.h>\n#include <igl/d3d12/VertexInputState.h>\n\n#pragma comment(lib, \"d3dcompiler.lib\")\n\nnamespace igl::d3d12 {\n\nnamespace {\n// Import ComPtr for readability\ntemplate<typename T>\nusing ComPtr = igl::d3d12::ComPtr<T>;\n\n// DxcCreateInstance function pointer type for dynamic loading\nusing DxcCreateInstanceProc = HRESULT(WINAPI*)(REFCLSID rclsid, REFIID riid, LPVOID* ppv);\n\n// Helper to get DxcCreateInstance dynamically (dxcompiler.dll is not part of Windows SDK)\nDxcCreateInstanceProc getDxcCreateInstance() {\n  static DxcCreateInstanceProc s_proc = nullptr;\n  static bool s_tried = false;\n\n  if (!s_tried) {\n    s_tried = true;\n    HMODULE h = GetModuleHandleA(\"dxcompiler.dll\");\n    if (!h) {\n      h = LoadLibraryA(\"dxcompiler.dll\");\n    }\n    if (h) {\n      s_proc = reinterpret_cast<DxcCreateInstanceProc>(GetProcAddress(h, \"DxcCreateInstance\"));\n    }\n  }\n  return s_proc;\n}\n\n// Capture D3D12 InfoQueue messages (warnings/errors) into an artifacts log when enabled.\nvoid captureInfoQueueForDevice(ID3D12Device* device) {\n  const char* captureEnv = std::getenv(\"IGL_D3D12_CAPTURE_VALIDATION\");\n  if (!captureEnv || (captureEnv[0] != '1' && captureEnv[0] != 'T' && captureEnv[0] != 't' &&\n                      captureEnv[0] != 'Y' && captureEnv[0] != 'y')) {\n    return;\n  }\n\n  if (!device) {\n    return;\n  }\n\n  ComPtr<ID3D12InfoQueue> infoQueue;\n  if (FAILED(device->QueryInterface(IID_PPV_ARGS(infoQueue.GetAddressOf())))) {\n    return;\n  }\n\n  const UINT64 numMessages = infoQueue->GetNumStoredMessages();\n\n  namespace fs = std::filesystem;\n\n  fs::path root;\n  if (const char* rootEnv = std::getenv(\"IGL_ARTIFACT_ROOT\"); rootEnv && *rootEnv != '\\0') {\n    root = fs::path(rootEnv);\n  } else {\n    root = fs::current_path() / \"artifacts\";\n  }\n\n  fs::path logPath = root / \"validation\" / \"D3D12_InfoQueue.log\";\n  std::error_code ec;\n  fs::create_directories(logPath.parent_path(), ec);\n\n  std::ofstream out(logPath, std::ios::app);\n  if (!out) {\n    return;\n  }\n\n  out << \"=== D3D12 InfoQueue Dump ===\\n\";\n\n  if (numMessages == 0) {\n    out << \"[INFO] No non-info D3D12 messages recorded for this device.\\n\";\n    return;\n  }\n\n  for (UINT64 i = 0; i < numMessages; ++i) {\n    SIZE_T messageLength = 0;\n    if (FAILED(infoQueue->GetMessage(i, nullptr, &messageLength)) || messageLength == 0) {\n      continue;\n    }\n\n    std::vector<uint8_t> buffer(messageLength);\n    auto* message = reinterpret_cast<D3D12_MESSAGE*>(buffer.data());\n    if (FAILED(infoQueue->GetMessage(i, message, &messageLength))) {\n      continue;\n    }\n\n    // Skip informational messages; capture warnings, errors, and corruption.\n    if (message->Severity == D3D12_MESSAGE_SEVERITY_INFO ||\n        message->Severity == D3D12_MESSAGE_SEVERITY_MESSAGE) {\n      continue;\n    }\n\n    // Explicitly ignore well-understood performance-only clear warnings from\n    // the validation layer (IDs 820 and 821). These indicate that optimized\n    // clear values were not provided or do not match but do not affect\n    // correctness; they are tracked separately in the audit documentation.\n    if (message->ID == 820 || message->ID == 821 || message->ID == 677) {\n      continue;\n    }\n\n    const char* severityStr = \"UNKNOWN\";\n    switch (message->Severity) {\n    case D3D12_MESSAGE_SEVERITY_CORRUPTION:\n      severityStr = \"CORRUPTION\";\n      break;\n    case D3D12_MESSAGE_SEVERITY_ERROR:\n      severityStr = \"ERROR\";\n      break;\n    case D3D12_MESSAGE_SEVERITY_WARNING:\n      severityStr = \"WARNING\";\n      break;\n    default:\n      break;\n    }\n\n    out << \"[\" << severityStr << \"] ID=\" << static_cast<unsigned>(message->ID) << \" : \"\n        << (message->pDescription ? message->pDescription : \"\") << \"\\n\";\n  }\n\n  infoQueue->ClearStoredMessages();\n}\n\n// Log D3D12 and DXGI InfoQueue messages to the runtime log to aid debugging.\n// This is used in error paths such as PSO creation failures and device\n// removal checks. It is intentionally tolerant of missing debug components\n// (dxgidebug.dll, Graphics Tools, etc.) and will simply emit nothing if the\n// queues are unavailable.\nvoid logInfoQueuesForDevice(ID3D12Device* device, const char* context) {\n  if (!device) {\n    return;\n  }\n\n  // First, log any messages from the D3D12 device's InfoQueue.\n  ComPtr<ID3D12InfoQueue> infoQueue;\n  if (SUCCEEDED(device->QueryInterface(IID_PPV_ARGS(infoQueue.GetAddressOf())))) {\n    const UINT64 numMessages = infoQueue->GetNumStoredMessages();\n    IGL_LOG_ERROR(\"  [%s] D3D12 Info Queue has %llu messages:\\n\",\n                  context,\n                  static_cast<unsigned long long>(numMessages));\n    for (UINT64 i = 0; i < numMessages; ++i) {\n      SIZE_T messageLength = 0;\n      if (FAILED(infoQueue->GetMessage(i, nullptr, &messageLength)) || messageLength == 0) {\n        continue;\n      }\n\n      std::vector<uint8_t> buffer(messageLength);\n      auto* message = reinterpret_cast<D3D12_MESSAGE*>(buffer.data());\n      if (FAILED(infoQueue->GetMessage(i, message, &messageLength))) {\n        continue;\n      }\n\n      const char* severityStr = \"UNKNOWN\";\n      switch (message->Severity) {\n      case D3D12_MESSAGE_SEVERITY_CORRUPTION:\n        severityStr = \"CORRUPTION\";\n        break;\n      case D3D12_MESSAGE_SEVERITY_ERROR:\n        severityStr = \"ERROR\";\n        break;\n      case D3D12_MESSAGE_SEVERITY_WARNING:\n        severityStr = \"WARNING\";\n        break;\n      case D3D12_MESSAGE_SEVERITY_INFO:\n        severityStr = \"INFO\";\n        break;\n      case D3D12_MESSAGE_SEVERITY_MESSAGE:\n        severityStr = \"MESSAGE\";\n        break;\n      default:\n        break;\n      }\n      IGL_LOG_ERROR(\"    [D3D12][%s] %s (ID=%u)\\n\",\n                    severityStr,\n                    message->pDescription ? message->pDescription : \"<no description>\",\n                    static_cast<unsigned>(message->ID));\n    }\n    infoQueue->ClearStoredMessages();\n  }\n\n  // Next, attempt to log messages from the global DXGI InfoQueue via\n  // dxgidebug.dll, if present. This can surface diagnostics that are not\n  // routed through the per-device D3D12 queue (e.g. swap-chain errors or\n  // certain shader validation issues).\n  HMODULE dxgiDebugModule = LoadLibraryA(\"dxgidebug.dll\");\n  if (!dxgiDebugModule) {\n    return;\n  }\n\n  using PFN_DXGIGetDebugInterface = HRESULT(WINAPI*)(REFIID, void**);\n  auto dxgiGetDebugInterface = reinterpret_cast<PFN_DXGIGetDebugInterface>(\n      GetProcAddress(dxgiDebugModule, \"DXGIGetDebugInterface\"));\n\n  if (dxgiGetDebugInterface) {\n    ComPtr<IDXGIInfoQueue> dxgiInfoQueue;\n    if (SUCCEEDED(dxgiGetDebugInterface(IID_PPV_ARGS(dxgiInfoQueue.GetAddressOf())))) {\n      const DXGI_DEBUG_ID producers[] = {DXGI_DEBUG_DXGI, DXGI_DEBUG_DX, DXGI_DEBUG_APP};\n      const char* producerNames[] = {\"DXGI\", \"DX\", \"APP\"};\n      for (size_t p = 0; p < std::size(producers); ++p) {\n        const DXGI_DEBUG_ID producer = producers[p];\n        const UINT64 numMessages = dxgiInfoQueue->GetNumStoredMessages(producer);\n        if (numMessages == 0) {\n          continue;\n        }\n        IGL_LOG_ERROR(\"  [%s] DXGI InfoQueue (%s) has %llu messages:\\n\",\n                      context,\n                      producerNames[p],\n                      static_cast<unsigned long long>(numMessages));\n        for (UINT64 i = 0; i < numMessages; ++i) {\n          SIZE_T messageLength = 0;\n          if (FAILED(dxgiInfoQueue->GetMessage(producer, i, nullptr, &messageLength)) ||\n              messageLength == 0) {\n            continue;\n          }\n          std::vector<uint8_t> buffer(messageLength);\n          auto* message = reinterpret_cast<DXGI_INFO_QUEUE_MESSAGE*>(buffer.data());\n          if (FAILED(dxgiInfoQueue->GetMessage(producer, i, message, &messageLength))) {\n            continue;\n          }\n          const char* severityStr = \"UNKNOWN\";\n          switch (message->Severity) {\n          case DXGI_INFO_QUEUE_MESSAGE_SEVERITY_CORRUPTION:\n            severityStr = \"CORRUPTION\";\n            break;\n          case DXGI_INFO_QUEUE_MESSAGE_SEVERITY_ERROR:\n            severityStr = \"ERROR\";\n            break;\n          case DXGI_INFO_QUEUE_MESSAGE_SEVERITY_WARNING:\n            severityStr = \"WARNING\";\n            break;\n          case DXGI_INFO_QUEUE_MESSAGE_SEVERITY_INFO:\n            severityStr = \"INFO\";\n            break;\n          case DXGI_INFO_QUEUE_MESSAGE_SEVERITY_MESSAGE:\n            severityStr = \"MESSAGE\";\n            break;\n          default:\n            break;\n          }\n          IGL_LOG_ERROR(\"    [DXGI/%s][%s] %s (ID=%u)\\n\",\n                        producerNames[p],\n                        severityStr,\n                        message->pDescription ? message->pDescription : \"<no description>\",\n                        static_cast<unsigned>(message->ID));\n        }\n        dxgiInfoQueue->ClearStoredMessages(producer);\n      }\n      // Also clear any remaining global messages so subsequent calls only\n      // report new diagnostics.\n      dxgiInfoQueue->ClearStoredMessages(DXGI_DEBUG_ALL);\n    }\n  }\n\n  FreeLibrary(dxgiDebugModule);\n}\n\n// Use std::hash<SamplerStateDesc> for deduplication (implemented in igl/SamplerState.cpp).\n} // namespace\n\n// Helper: Calculate root signature size in DWORDs\n// Root signature limit: 64 DWORDs\n// Size formula (per Microsoft documentation):\n//   - Root constants: 1 DWORD per 32-bit value\n//   - Root descriptors (CBV/SRV/UAV): 2 DWORDs each\n//   - Descriptor tables: 1 DWORD each (regardless of table size)\n//   - Static samplers: 0 DWORDs (free)\n// Reference: https://learn.microsoft.com/en-us/windows/win32/direct3d12/root-signature-limits\nstatic uint32_t getRootSignatureDwordSize(const D3D12_ROOT_SIGNATURE_DESC& desc) {\n  uint32_t totalSize = 0;\n\n  for (uint32_t i = 0; i < desc.NumParameters; ++i) {\n    const auto& param = desc.pParameters[i];\n\n    switch (param.ParameterType) {\n    case D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS:\n      totalSize += param.Constants.Num32BitValues;\n      IGL_D3D12_LOG_VERBOSE(\"    [%u] Root constants (b%u): %u DWORDs\\n\",\n                            i,\n                            param.Constants.ShaderRegister,\n                            param.Constants.Num32BitValues);\n      break;\n\n    case D3D12_ROOT_PARAMETER_TYPE_CBV:\n      totalSize += 2;\n      IGL_D3D12_LOG_VERBOSE(\n          \"    [%u] Root CBV (b%u): 2 DWORDs\\n\", i, param.Descriptor.ShaderRegister);\n      break;\n\n    case D3D12_ROOT_PARAMETER_TYPE_SRV:\n      totalSize += 2;\n      IGL_D3D12_LOG_VERBOSE(\n          \"    [%u] Root SRV (t%u): 2 DWORDs\\n\", i, param.Descriptor.ShaderRegister);\n      break;\n\n    case D3D12_ROOT_PARAMETER_TYPE_UAV:\n      totalSize += 2;\n      IGL_D3D12_LOG_VERBOSE(\n          \"    [%u] Root UAV (u%u): 2 DWORDs\\n\", i, param.Descriptor.ShaderRegister);\n      break;\n\n    case D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE:\n      totalSize += 1;\n      const char* tableType = \"Unknown\";\n      if (param.DescriptorTable.NumDescriptorRanges > 0) {\n        switch (param.DescriptorTable.pDescriptorRanges[0].RangeType) {\n        case D3D12_DESCRIPTOR_RANGE_TYPE_CBV:\n          tableType = \"CBV\";\n          break;\n        case D3D12_DESCRIPTOR_RANGE_TYPE_SRV:\n          tableType = \"SRV\";\n          break;\n        case D3D12_DESCRIPTOR_RANGE_TYPE_UAV:\n          tableType = \"UAV\";\n          break;\n        case D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER:\n          tableType = \"Sampler\";\n          break;\n        }\n      }\n      IGL_D3D12_LOG_VERBOSE(\"    [%u] Descriptor table (%s): 1 DWORD\\n\", i, tableType);\n      break;\n    }\n  }\n\n  if (desc.NumStaticSamplers > 0) {\n    IGL_D3D12_LOG_VERBOSE(\"    Static samplers: 0 DWORDs (free, count=%u)\\n\",\n                          desc.NumStaticSamplers);\n  }\n\n  return totalSize;\n}\n\n// Optional debug helper: validate that the shader input/output signatures are\n// consistent with the input layout and render target configuration we build\n// for a graphics PSO. This is intended purely for diagnostics and has no\n// effect on runtime behavior.\nstatic void validateShaderBindingsAndLayout(\n    const RenderPipelineDesc& desc,\n    const D3D12_GRAPHICS_PIPELINE_STATE_DESC& psoDesc,\n    const std::vector<D3D12_INPUT_ELEMENT_DESC>& inputElements,\n    ID3D12ShaderReflection* IGL_NULLABLE vsRefl,\n    ID3D12ShaderReflection* IGL_NULLABLE psRefl) {\n  // Environment toggle: IGL_D3D12_VALIDATE_SHADER_BINDINGS=0 disables validation.\n  if (const char* env = std::getenv(\"IGL_D3D12_VALIDATE_SHADER_BINDINGS\")) {\n    if (env[0] == '0') {\n      return;\n    }\n  }\n\n  if (!vsRefl) {\n    return;\n  }\n\n  D3D12_SHADER_DESC vsDesc = {};\n  if (FAILED(vsRefl->GetDesc(&vsDesc))) {\n    return;\n  }\n\n  bool hasErrors = false;\n\n  IGL_LOG_INFO(\"=== D3D12 VALIDATE_SHADER_BINDINGS (%s) ===\\n\", desc.debugName.c_str());\n\n  // Helper for case-insensitive string compare.\n  auto iequals = [](const char* a, const char* b) -> bool {\n    if (!a || !b) {\n      return false;\n    }\n    while (*a && *b) {\n      const int ca = std::tolower(static_cast<unsigned char>(*a));\n      const int cb = std::tolower(static_cast<unsigned char>(*b));\n      if (ca != cb) {\n        return false;\n      }\n      ++a;\n      ++b;\n    }\n    return *a == '\\0' && *b == '\\0';\n  };\n\n  // Validate vertex shader inputs against the input layout.\n  IGL_LOG_INFO(\"  [VS] InputParameters=%u, InputLayout.Elements=%u\\n\",\n               vsDesc.InputParameters,\n               static_cast<unsigned>(inputElements.size()));\n\n  for (UINT i = 0; i < vsDesc.InputParameters; ++i) {\n    D3D12_SIGNATURE_PARAMETER_DESC paramDesc = {};\n    if (FAILED(vsRefl->GetInputParameterDesc(i, &paramDesc))) {\n      continue;\n    }\n\n    // Skip system-value semantics (SV_*), which do not come from the input layout.\n    if (paramDesc.SemanticName && paramDesc.SemanticName[0] == 'S' &&\n        paramDesc.SemanticName[1] == 'V' && paramDesc.SemanticName[2] == '_') {\n      continue;\n    }\n\n    bool found = false;\n    for (const auto& elem : inputElements) {\n      if (elem.SemanticName && iequals(elem.SemanticName, paramDesc.SemanticName) &&\n          elem.SemanticIndex == paramDesc.SemanticIndex) {\n        found = true;\n        break;\n      }\n    }\n\n    if (!found) {\n      hasErrors = true;\n      IGL_LOG_ERROR(\n          \"  [VALIDATION] VS input '%s%u' has no matching input layout element \"\n          \"(debugName='%s').\\n\",\n          paramDesc.SemanticName ? paramDesc.SemanticName : \"\",\n          paramDesc.SemanticIndex,\n          desc.debugName.c_str());\n    }\n  }\n\n  // Validate pixel shader color outputs against NumRenderTargets / RTV formats.\n  if (psRefl) {\n    D3D12_SHADER_DESC psDesc = {};\n    if (SUCCEEDED(psRefl->GetDesc(&psDesc))) {\n      UINT colorOutputs = 0;\n      for (UINT i = 0; i < psDesc.OutputParameters; ++i) {\n        D3D12_SIGNATURE_PARAMETER_DESC paramDesc = {};\n        if (FAILED(psRefl->GetOutputParameterDesc(i, &paramDesc))) {\n          continue;\n        }\n        if (paramDesc.SemanticName && iequals(paramDesc.SemanticName, \"SV_TARGET\")) {\n          ++colorOutputs;\n        }\n      }\n\n      IGL_LOG_INFO(\"  [PS] ColorOutputs=%u, NumRenderTargets=%u, RTV[0]=%d, DSV=%d\\n\",\n                   colorOutputs,\n                   psoDesc.NumRenderTargets,\n                   psoDesc.NumRenderTargets > 0 ? static_cast<int>(psoDesc.RTVFormats[0])\n                                                : static_cast<int>(DXGI_FORMAT_UNKNOWN),\n                   static_cast<int>(psoDesc.DSVFormat));\n\n      if (colorOutputs == 0 && psoDesc.NumRenderTargets > 0) {\n        hasErrors = true;\n        IGL_LOG_ERROR(\n            \"  [VALIDATION] PS writes no color outputs but PSO has \"\n            \"NumRenderTargets=%u (debugName='%s').\\n\",\n            psoDesc.NumRenderTargets,\n            desc.debugName.c_str());\n      } else if (colorOutputs > 0 && psoDesc.NumRenderTargets == 0) {\n        hasErrors = true;\n        IGL_LOG_ERROR(\n            \"  [VALIDATION] PS writes %u color outputs but PSO has \"\n            \"NumRenderTargets=0 (debugName='%s').\\n\",\n            colorOutputs,\n            desc.debugName.c_str());\n      } else if (colorOutputs > psoDesc.NumRenderTargets) {\n        hasErrors = true;\n        IGL_LOG_ERROR(\n            \"  [VALIDATION] PS writes %u color outputs but PSO only \"\n            \"declares %u render targets (debugName='%s').\\n\",\n            colorOutputs,\n            psoDesc.NumRenderTargets,\n            desc.debugName.c_str());\n      }\n    }\n  }\n\n  if (!hasErrors) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"  [VALIDATION] Shader inputs/outputs match input layout and \"\n        \"render target configuration.\\n\");\n  }\n\n  IGL_LOG_INFO(\"=== END D3D12 VALIDATE_SHADER_BINDINGS ===\\n\");\n}\n\nDevice::Device(std::unique_ptr<D3D12Context> ctx) : ctx_(std::move(ctx)) {\n  platformDevice_ = std::make_unique<PlatformDevice>(*this);\n\n  // Validate device limits against actual device capabilities.\n  capabilities_.initialize(*ctx_);\n\n  // Initialize upload infrastructure (allocator pool and upload helpers).\n  allocatorPool_.initialize(*ctx_, this);\n\n  auto* device = ctx_->getDevice();\n  if (device) {\n    // Pre-compile mipmap generation shaders at device initialization.\n    // This avoids runtime compilation overhead in Texture::generateMipmap().\n    {\n      // HLSL shader sources (identical to those in Texture.cpp)\n      static const char* kVS = R\"(\nstruct VSOut { float4 pos: SV_POSITION; float2 uv: TEXCOORD0; };\nVSOut main(uint id: SV_VertexID) {\n  float2 p = float2((id << 1) & 2, id & 2);\n  VSOut o; o.pos = float4(p*float2(2,-2)+float2(-1,1), 0, 1); o.uv = p; return o;\n}\n)\";\n      static const char* kPS = R\"(\nTexture2D tex0 : register(t0);\nSamplerState smp : register(s0);\nfloat4 main(float4 pos:SV_POSITION, float2 uv:TEXCOORD0) : SV_TARGET { return tex0.SampleLevel(smp, uv, 0); }\n)\";\n\n      // Initialize DXC compiler\n      DXCCompiler dxcCompiler;\n      Result initResult = dxcCompiler.initialize();\n      if (!initResult.isOk()) {\n        IGL_LOG_ERROR(\n            \"Device::Device: Failed to initialize DXC for mipmap shader compilation: %s\\n\",\n            initResult.message.c_str());\n        IGL_LOG_ERROR(\"  Mipmap generation will be unavailable\\n\");\n        return; // Early exit - don't attempt compilation without DXC\n      }\n\n      // Get shader model from context (minimum SM 6.0 for DXC)\n      D3D_SHADER_MODEL shaderModel = ctx_->getMaxShaderModel();\n      std::string vsTarget = getShaderTarget(shaderModel, ShaderStage::Vertex);\n      std::string psTarget = getShaderTarget(shaderModel, ShaderStage::Fragment);\n\n      // Compile vertex shader\n      std::string vsErrors;\n      Result vsResult = dxcCompiler.compile(kVS,\n                                            strlen(kVS),\n                                            \"main\",\n                                            vsTarget.c_str(),\n                                            \"MipmapGenerationVS\",\n                                            0,\n                                            pipelineCache_.mipmapVSBytecode_,\n                                            vsErrors);\n      if (!vsResult.isOk()) {\n        IGL_LOG_ERROR(\"Device::Device: Failed to pre-compile mipmap VS: %s\\n%s\\n\",\n                      vsResult.message.c_str(),\n                      vsErrors.c_str());\n        pipelineCache_.mipmapVSBytecode_.clear();\n        return; // Early exit - can't proceed without VS\n      }\n\n      // Compile pixel shader\n      std::string psErrors;\n      Result psResult = dxcCompiler.compile(kPS,\n                                            strlen(kPS),\n                                            \"main\",\n                                            psTarget.c_str(),\n                                            \"MipmapGenerationPS\",\n                                            0,\n                                            pipelineCache_.mipmapPSBytecode_,\n                                            psErrors);\n      if (!psResult.isOk()) {\n        IGL_LOG_ERROR(\"Device::Device: Failed to pre-compile mipmap PS: %s\\n%s\\n\",\n                      psResult.message.c_str(),\n                      psErrors.c_str());\n        pipelineCache_.mipmapPSBytecode_.clear();\n        pipelineCache_.mipmapVSBytecode_.clear(); // Clear VS too for consistency\n        return; // Early exit - can't proceed without PS\n      }\n\n      // Create root signature for mipmap generation\n      D3D12_DESCRIPTOR_RANGE ranges[2] = {};\n      ranges[0].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;\n      ranges[0].NumDescriptors = 1;\n      ranges[0].BaseShaderRegister = 0;\n      ranges[0].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n      ranges[1].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER;\n      ranges[1].NumDescriptors = 1;\n      ranges[1].BaseShaderRegister = 0;\n      ranges[1].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n\n      D3D12_ROOT_PARAMETER params[2] = {};\n      params[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n      params[0].DescriptorTable.NumDescriptorRanges = 1;\n      params[0].DescriptorTable.pDescriptorRanges = &ranges[0];\n      params[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n      params[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n      params[1].DescriptorTable.NumDescriptorRanges = 1;\n      params[1].DescriptorTable.pDescriptorRanges = &ranges[1];\n      params[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n\n      D3D12_ROOT_SIGNATURE_DESC rsDesc = {};\n      rsDesc.NumParameters = 2;\n      rsDesc.pParameters = params;\n      rsDesc.Flags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT;\n\n      igl::d3d12::ComPtr<ID3DBlob> sig, err;\n      if (FAILED(D3D12SerializeRootSignature(\n              &rsDesc, D3D_ROOT_SIGNATURE_VERSION_1, sig.GetAddressOf(), err.GetAddressOf()))) {\n        IGL_LOG_ERROR(\"Device::Device: Failed to serialize mipmap root signature\\n\");\n        if (err && err->GetBufferPointer()) {\n          IGL_LOG_ERROR(\"  D3D12 error: %s\\n\", static_cast<const char*>(err->GetBufferPointer()));\n        }\n        pipelineCache_.mipmapVSBytecode_.clear();\n        pipelineCache_.mipmapPSBytecode_.clear();\n        return;\n      }\n\n      if (FAILED(device->CreateRootSignature(\n              0,\n              sig->GetBufferPointer(),\n              sig->GetBufferSize(),\n              IID_PPV_ARGS(pipelineCache_.mipmapRootSignature_.GetAddressOf())))) {\n        IGL_LOG_ERROR(\"Device::Device: Failed to create mipmap root signature\\n\");\n        pipelineCache_.mipmapVSBytecode_.clear();\n        pipelineCache_.mipmapPSBytecode_.clear();\n        return;\n      }\n\n      // Success! Mark mipmap shaders as available\n      pipelineCache_.mipmapShadersAvailable_ = true;\n      IGL_D3D12_LOG_VERBOSE(\n          \"Device::Device: Mipmap shaders pre-compiled successfully (%zu bytes VS, %zu bytes PS)\\n\",\n          pipelineCache_.mipmapVSBytecode_.size(),\n          pipelineCache_.mipmapPSBytecode_.size());\n    }\n  }\n}\n\nDevice::~Device() {\n  // Capture D3D12 validation messages for this device if enabled via environment.\n  if (ctx_) {\n    captureInfoQueueForDevice(ctx_->getDevice());\n  }\n\n  // No shared event to clean up; events are per-call in waitForUploadFence.\n\n  // Ensure upload-related resources are released before destroying the device.\n  // D3D12Context destructor handles main queue fence waits via waitForGPU().\n  pipelineCache_.clear();\n  samplerCache_.clear();\n  allocatorPool_.clearOnDeviceDestruction();\n\n  // Clear bind group pools to release texture and buffer shared_ptrs that keep resources alive.\n  bindGroupTexturesPool_.clear();\n  bindGroupBuffersPool_.clear();\n}\n\n// Check for device removal and report detailed error.\nResult Device::checkDeviceRemoval() const {\n  auto* device = ctx_->getDevice();\n  if (!device) {\n    // Device not initialized is an invalid operation, not success.\n    IGL_DEBUG_ASSERT(false, \"Device::checkDeviceRemoval() called before device initialization\");\n    return Result(Result::Code::InvalidOperation, \"Device not initialized\");\n  }\n\n  // Early return if device already marked as lost (return cached reason for diagnostics)\n  if (deviceLost_) {\n    return Result(Result::Code::RuntimeError,\n                  std::string(\"Device previously lost: \") + deviceLostReason_);\n  }\n\n  HRESULT hr = device->GetDeviceRemovedReason();\n  if (FAILED(hr)) {\n    const char* reason = \"Unknown\";\n    switch (hr) {\n    case DXGI_ERROR_DEVICE_HUNG:\n      reason = \"DEVICE_HUNG (GPU not responding)\";\n      break;\n    case DXGI_ERROR_DEVICE_REMOVED:\n      reason = \"DEVICE_REMOVED (Driver crash or hardware failure)\";\n      break;\n    case DXGI_ERROR_DEVICE_RESET:\n      reason = \"DEVICE_RESET (Driver update or TDR)\";\n      break;\n    case DXGI_ERROR_DRIVER_INTERNAL_ERROR:\n      reason = \"DRIVER_INTERNAL_ERROR (Driver bug)\";\n      break;\n    case DXGI_ERROR_INVALID_CALL:\n      reason = \"INVALID_CALL (API misuse detected)\";\n      break;\n    default:\n      break;\n    }\n\n    // Cache the reason and mark device as lost for diagnostics.\n    deviceLostReason_ = reason;\n    deviceLost_ = true;\n\n    // Emit any pending D3D12/DXGI debug layer messages to help pinpoint the\n    // invalid API sequence that caused device removal.\n    logInfoQueuesForDevice(device, \"Device::checkDeviceRemoval\");\n\n    IGL_LOG_ERROR(\"D3D12 Device Removal Detected: %s (HRESULT=0x%08X)\\n\", reason, hr);\n    IGL_DEBUG_ASSERT(false);\n    return Result(Result::Code::RuntimeError, std::string(\"D3D12 device removed: \") + reason);\n  }\n\n  // On success (S_OK), device is healthy\n  return Result();\n}\n\n// Alignment validation methods.\n\nbool Device::validateMSAAAlignment(const TextureDesc& desc, Result* IGL_NULLABLE outResult) const {\n  if (desc.numSamples <= 1) {\n    return true; // Not MSAA, no special alignment requirements\n  }\n\n  // MSAA resources require 64KB alignment in D3D12\n  // D3D12 CreateCommittedResource automatically handles this, but we validate dimensions\n  // to ensure resource won't exceed device limits\n  IGL_D3D12_LOG_VERBOSE(\n      \"Device::validateMSAAAlignment: Validating MSAA texture (samples=%u, %ux%u)\\n\",\n      desc.numSamples,\n      desc.width,\n      desc.height);\n\n  // Check if texture dimensions are reasonable for MSAA\n  // Large MSAA textures may fail due to memory constraints\n  const size_t pixelCount = static_cast<size_t>(desc.width) * desc.height;\n  const size_t bytesPerPixel = 4; // Conservative estimate (RGBA8)\n  const size_t estimatedSize = pixelCount * bytesPerPixel * desc.numSamples;\n\n  // Warn if MSAA texture is very large (> 256MB)\n  if (estimatedSize > 256 * 1024 * 1024) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"Device::validateMSAAAlignment: WARNING - Large MSAA texture detected (%zu MB). \"\n        \"May cause memory pressure.\\n\",\n        estimatedSize / (1024 * 1024));\n  }\n\n  return true;\n}\n\nbool Device::validateTextureAlignment(const D3D12_RESOURCE_DESC& resourceDesc,\n                                      uint32_t sampleCount,\n                                      Result* IGL_NULLABLE outResult) const {\n  // D3D12 texture alignment requirements:\n  // - MSAA textures (SampleDesc.Count > 1): 64KB alignment (automatic via CreateCommittedResource)\n  // - Regular textures: 64KB alignment (automatic via CreateCommittedResource)\n  // - Small textures (<= 64KB): May use 4KB alignment\n\n  // This validation is informational - D3D12 handles alignment automatically\n  // We just verify parameters are within expected ranges\n\n  if (sampleCount > 1) {\n    // MSAA texture - will use 64KB alignment\n    IGL_D3D12_LOG_VERBOSE(\n        \"Device::validateTextureAlignment: MSAA texture will use 64KB alignment (samples=%u)\\n\",\n        sampleCount);\n  }\n\n  // Validate resource dimensions don't exceed D3D12 limits\n  constexpr UINT64 kMaxTextureDimension2D = D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 16384\n\n  if (resourceDesc.Dimension == D3D12_RESOURCE_DIMENSION_TEXTURE2D) {\n    if (resourceDesc.Width > kMaxTextureDimension2D ||\n        resourceDesc.Height > kMaxTextureDimension2D) {\n      IGL_LOG_ERROR(\n          \"Device::validateTextureAlignment: Texture dimensions (%llux%u) exceed D3D12 limit \"\n          \"(%llu)\\n\",\n          resourceDesc.Width,\n          resourceDesc.Height,\n          kMaxTextureDimension2D);\n      Result::setResult(outResult,\n                        Result::Code::ArgumentInvalid,\n                        \"Texture dimensions exceed D3D12 maximum (16384x16384)\");\n      return false;\n    }\n  }\n\n  return true;\n}\n\nbool Device::validateBufferAlignment(size_t bufferSize, bool isUniform) const {\n  // D3D12 buffer alignment requirements:\n  // - Constant buffers: 256 bytes (D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT)\n  // - Other buffers: No strict alignment requirement\n\n  if (isUniform) {\n    // Uniform buffers must be 256-byte aligned\n    // This is already handled in createBuffer() by rounding up the size\n    if (bufferSize % BUFFER_ALIGNMENT != 0) {\n      IGL_D3D12_LOG_VERBOSE(\n          \"Device::validateBufferAlignment: Uniform buffer size %zu will be rounded up to %zu\\n\",\n          bufferSize,\n          (bufferSize + BUFFER_ALIGNMENT - 1) & ~(BUFFER_ALIGNMENT - 1));\n    }\n  }\n\n  return true;\n}\n\n// BindGroups\nHolder<BindGroupTextureHandle> Device::createBindGroup(\n    const BindGroupTextureDesc& desc,\n    const IRenderPipelineState* IGL_NULLABLE /*compatiblePipeline*/,\n    Result* IGL_NULLABLE outResult) {\n  // Store bind group descriptor in pool for later use by encoder\n  BindGroupTextureDesc description(desc);\n  const auto handle = bindGroupTexturesPool_.create(std::move(description));\n  Result::setResult(outResult,\n                    handle.empty() ? Result(Result::Code::RuntimeError, \"Cannot create bind group\")\n                                   : Result());\n  return {this, handle};\n}\n\nHolder<BindGroupBufferHandle> Device::createBindGroup(const BindGroupBufferDesc& desc,\n                                                      Result* IGL_NULLABLE outResult) {\n  // Store bind group descriptor in pool for later use by encoder\n  BindGroupBufferDesc description(desc);\n  const auto handle = bindGroupBuffersPool_.create(std::move(description));\n  Result::setResult(outResult,\n                    handle.empty() ? Result(Result::Code::RuntimeError, \"Cannot create bind group\")\n                                   : Result());\n  return {this, handle};\n}\n\nvoid Device::destroy(BindGroupTextureHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n  bindGroupTexturesPool_.destroy(handle);\n}\n\nvoid Device::destroy(BindGroupBufferHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n  bindGroupBuffersPool_.destroy(handle);\n}\n\nvoid Device::destroy(SamplerHandle /*handle*/) {\n  // No-op: D3D12 backend doesn't use the SamplerHandle system.\n  // Samplers are created as shared_ptr<ISamplerState> and managed via ref-counting.\n  // Sampler descriptors are allocated transiently per command encoder at bind time,\n  // not persistently at sampler creation time, so there's nothing to deallocate here.\n}\n\n// Command Queue\nstd::shared_ptr<ICommandQueue> Device::createCommandQueue(const CommandQueueDesc& /*desc*/,\n                                                          Result* IGL_NULLABLE outResult) noexcept {\n  Result::setOk(outResult);\n  return std::make_shared<CommandQueue>(*this);\n}\n\n// Resources\nstd::unique_ptr<IBuffer> Device::createBuffer(const BufferDesc& desc,\n                                              Result* IGL_NULLABLE outResult) const noexcept {\n  // Single const_cast at the API boundary; all mutation happens in the non-const helper.\n  auto& self = const_cast<Device&>(*this);\n  return self.createBufferImpl(desc, outResult);\n}\n\nstd::unique_ptr<IBuffer> Device::createBufferImpl(const BufferDesc& desc,\n                                                  Result* IGL_NULLABLE outResult) noexcept {\n  auto* device = ctx_->getDevice();\n  if (!device) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"D3D12 device is null\");\n    return nullptr;\n  }\n\n  // Determine heap type and initial state based on storage\n  D3D12_HEAP_TYPE heapType;\n  D3D12_RESOURCE_STATES initialState;\n\n  // CRITICAL: Storage buffers with UAV flags MUST use DEFAULT heap\n  // D3D12 does not allow UAV resources on UPLOAD heaps\n  const bool isStorageBuffer = (desc.type & BufferDesc::BufferTypeBits::Storage) != 0;\n  const bool forceDefaultHeap =\n      isStorageBuffer; // Storage buffers need UAV, which requires DEFAULT heap\n\n  if ((desc.storage == ResourceStorage::Shared || desc.storage == ResourceStorage::Managed) &&\n      !forceDefaultHeap) {\n    // CPU-writable upload heap (for non-storage buffers only)\n    heapType = D3D12_HEAP_TYPE_UPLOAD;\n    initialState = D3D12_RESOURCE_STATE_GENERIC_READ;\n  } else {\n    // GPU-only default heap (required for storage buffers with UAV)\n    heapType = D3D12_HEAP_TYPE_DEFAULT;\n    initialState = D3D12_RESOURCE_STATE_COMMON;\n  }\n\n  // Create heap properties\n  D3D12_HEAP_PROPERTIES heapProps = {};\n  heapProps.Type = heapType;\n  heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;\n  heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;\n\n  // For uniform buffers, size must be aligned to 256 bytes\n  // (D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT)\n  const bool isUniformBuffer = (desc.type & BufferDesc::BufferTypeBits::Uniform) != 0;\n\n  // Validate buffer alignment requirements.\n  validateBufferAlignment(desc.length, isUniformBuffer);\n\n  const UINT64 alignedSize =\n      isUniformBuffer\n          ? AlignUp<UINT64>(desc.length, 256) // D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT\n          : desc.length;\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"Device::createBuffer: type=%d, requested_size=%zu, aligned_size=%llu, isUniform=%d\\n\",\n      desc.type,\n      desc.length,\n      alignedSize,\n      isUniformBuffer);\n\n  // Create buffer description\n  D3D12_RESOURCE_DESC bufferDesc = {};\n  bufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;\n  bufferDesc.Alignment = 0;\n  bufferDesc.Width = alignedSize;\n  bufferDesc.Height = 1;\n  bufferDesc.DepthOrArraySize = 1;\n  bufferDesc.MipLevels = 1;\n  bufferDesc.Format = DXGI_FORMAT_UNKNOWN;\n  bufferDesc.SampleDesc.Count = 1;\n  bufferDesc.SampleDesc.Quality = 0;\n  bufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;\n  bufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE;\n\n  // Add UAV flag for storage buffers (used by compute shaders)\n  // isStorageBuffer already defined above for heap type determination\n  if (isStorageBuffer) {\n    bufferDesc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;\n    IGL_D3D12_LOG_VERBOSE(\"Device::createBuffer: Storage buffer - adding UAV flag\\n\");\n  }\n\n  // Create the buffer resource\n  igl::d3d12::ComPtr<ID3D12Resource> buffer;\n  HRESULT hr = device->CreateCommittedResource(&heapProps,\n                                               D3D12_HEAP_FLAG_NONE,\n                                               &bufferDesc,\n                                               initialState,\n                                               nullptr,\n                                               IID_PPV_ARGS(buffer.GetAddressOf()));\n\n  if (FAILED(hr)) {\n    char errorMsg[256];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to create buffer: HRESULT = 0x%08X\",\n             static_cast<unsigned>(hr));\n    Result::setResult(outResult, Result::Code::RuntimeError, errorMsg);\n    return nullptr;\n  }\n\n  // Debug: Log GPU address for uniform buffers\n  if (isUniformBuffer) {\n    D3D12_GPU_VIRTUAL_ADDRESS gpuAddr = buffer->GetGPUVirtualAddress();\n    IGL_D3D12_LOG_VERBOSE(\"Device::createBuffer: Uniform buffer created, GPU address=0x%llx\\n\",\n                          gpuAddr);\n  }\n\n  // Upload initial data if provided\n  D3D12_RESOURCE_STATES finalState = initialState;\n\n  if (heapType == D3D12_HEAP_TYPE_UPLOAD) {\n    finalState = D3D12_RESOURCE_STATE_GENERIC_READ;\n  }\n\n  if (desc.data) {\n    if (heapType == D3D12_HEAP_TYPE_UPLOAD) {\n      void* mappedData = nullptr;\n      D3D12_RANGE readRange = {0, 0};\n      hr = buffer->Map(0, &readRange, &mappedData);\n\n      if (SUCCEEDED(hr)) {\n        std::memcpy(mappedData, desc.data, desc.length);\n        buffer->Unmap(0, nullptr);\n      }\n    } else if (heapType == D3D12_HEAP_TYPE_DEFAULT) {\n      // DEFAULT heap: stage through an UPLOAD buffer and copy\n      IGL_D3D12_LOG_VERBOSE(\n          \"Device::createBuffer: Staging initial data via UPLOAD heap for DEFAULT buffer\\n\");\n\n      // Create upload buffer\n      D3D12_HEAP_PROPERTIES uploadHeapProps = {};\n      uploadHeapProps.Type = D3D12_HEAP_TYPE_UPLOAD;\n      uploadHeapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;\n      uploadHeapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;\n\n      // Create upload buffer description WITHOUT UAV flag (UPLOAD heaps can't have UAV)\n      D3D12_RESOURCE_DESC uploadBufferDesc = bufferDesc;\n      uploadBufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE; // Remove UAV flag for upload buffer\n\n      igl::d3d12::ComPtr<ID3D12Resource> uploadBuffer;\n      HRESULT upHr = device->CreateCommittedResource(&uploadHeapProps,\n                                                     D3D12_HEAP_FLAG_NONE,\n                                                     &uploadBufferDesc,\n                                                     D3D12_RESOURCE_STATE_GENERIC_READ,\n                                                     nullptr,\n                                                     IID_PPV_ARGS(uploadBuffer.GetAddressOf()));\n      if (FAILED(upHr)) {\n        IGL_LOG_ERROR(\"Device::createBuffer: Failed to create upload buffer: 0x%08X\\n\",\n                      static_cast<unsigned>(upHr));\n      } else {\n        // Map and copy data\n        void* mapped = nullptr;\n        D3D12_RANGE rr = {0, 0};\n        if (SUCCEEDED(uploadBuffer->Map(0, &rr, &mapped)) && mapped) {\n          std::memcpy(mapped, desc.data, desc.length);\n          uploadBuffer->Unmap(0, nullptr);\n\n          igl::d3d12::ComPtr<ID3D12CommandAllocator> allocator = getUploadCommandAllocator();\n          if (!allocator.Get()) {\n            IGL_LOG_ERROR(\"Device::createBuffer: Failed to get command allocator from pool\\n\");\n          } else {\n            igl::d3d12::ComPtr<ID3D12GraphicsCommandList> cmdList;\n            if (SUCCEEDED(device->CreateCommandList(0,\n                                                    D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                                    allocator.Get(),\n                                                    nullptr,\n                                                    IID_PPV_ARGS(cmdList.GetAddressOf())))) {\n              // Transition default buffer to COPY_DEST\n              D3D12_RESOURCE_BARRIER toCopyDest = {};\n              toCopyDest.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n              toCopyDest.Transition.pResource = buffer.Get();\n              toCopyDest.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n              toCopyDest.Transition.StateBefore = initialState; // COMMON\n              toCopyDest.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST;\n              cmdList->ResourceBarrier(1, &toCopyDest);\n\n              // Copy upload -> default\n              cmdList->CopyBufferRegion(buffer.Get(), 0, uploadBuffer.Get(), 0, alignedSize);\n\n              // Transition to a likely-read state based on buffer type\n              D3D12_RESOURCE_STATES targetState = D3D12_RESOURCE_STATE_GENERIC_READ;\n              if (desc.type & BufferDesc::BufferTypeBits::Vertex) {\n                targetState = D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER;\n              } else if (desc.type & BufferDesc::BufferTypeBits::Uniform) {\n                targetState = D3D12_RESOURCE_STATE_VERTEX_AND_CONSTANT_BUFFER;\n              } else if (desc.type & BufferDesc::BufferTypeBits::Index) {\n                targetState = D3D12_RESOURCE_STATE_INDEX_BUFFER;\n              }\n              D3D12_RESOURCE_BARRIER toTarget = {};\n              toTarget.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n              toTarget.Transition.pResource = buffer.Get();\n              toTarget.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n              toTarget.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST;\n              toTarget.Transition.StateAfter = targetState;\n              cmdList->ResourceBarrier(1, &toTarget);\n\n              cmdList->Close();\n              ID3D12CommandList* lists[] = {cmdList.Get()};\n              ctx_->getCommandQueue()->ExecuteCommandLists(1, lists);\n\n              // Use async fence signaling instead of synchronous waitForGPU().\n              // Get fence value that will signal when this upload completes.\n              UINT64 uploadFenceValue = getNextUploadFenceValue();\n\n              // Signal upload fence after copy completes\n              HRESULT hrSignal = ctx_->getCommandQueue()->Signal(allocatorPool_.getUploadFence(),\n                                                                 uploadFenceValue);\n              if (FAILED(hrSignal)) {\n                IGL_LOG_ERROR(\"Device::createBuffer: Failed to signal upload fence: 0x%08X\\n\",\n                              hrSignal);\n                // Return allocator with 0 to avoid blocking the pool\n                returnUploadCommandAllocator(allocator, 0);\n              } else {\n                // Return allocator to pool with fence value (will be reused after the fence is\n                // signaled).\n                returnUploadCommandAllocator(allocator, uploadFenceValue);\n\n                // Track staging buffer for async cleanup with the associated fence value.\n                trackUploadBuffer(std::move(uploadBuffer), uploadFenceValue);\n              }\n\n              finalState = targetState;\n            } else {\n              IGL_LOG_ERROR(\"Device::createBuffer: Failed to create command list\\n\");\n              // Return allocator with 0 to avoid blocking the pool\n              returnUploadCommandAllocator(allocator, 0);\n            }\n          }\n        }\n      }\n    }\n  }\n\n  Result::setOk(outResult);\n  return std::make_unique<Buffer>(const_cast<Device&>(*this), std::move(buffer), desc, finalState);\n}\n\nstd::shared_ptr<IDepthStencilState> Device::createDepthStencilState(\n    const DepthStencilStateDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  Result::setOk(outResult);\n  return std::make_shared<DepthStencilState>(desc);\n}\n\nstd::unique_ptr<IShaderStages> Device::createShaderStages(const ShaderStagesDesc& desc,\n                                                          Result* IGL_NULLABLE outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<ShaderStages>(desc);\n}\n\nstd::shared_ptr<ISamplerState> Device::createSamplerState(const SamplerStateDesc& desc,\n                                                          Result* IGL_NULLABLE outResult) const {\n  return samplerCache_.createSamplerState(desc, outResult);\n}\n\nstd::shared_ptr<ITexture> Device::createTexture(const TextureDesc& desc,\n                                                Result* IGL_NULLABLE outResult) const noexcept {\n  auto* device = ctx_->getDevice();\n\n  // Check for exportability - D3D12 doesn't support exportable textures\n  if (desc.exportability == TextureDesc::TextureExportability::Exportable) {\n    Result::setResult(\n        outResult, Result::Code::Unimplemented, \"D3D12 does not support exportable textures\");\n    return nullptr;\n  }\n\n  // Convert IGL texture format to DXGI format\n  DXGI_FORMAT dxgiFormat = textureFormatToDXGIFormat(desc.format);\n  IGL_D3D12_LOG_VERBOSE(\"Device::createTexture: IGL format=%d -> DXGI format=%d\\n\",\n                        (int)desc.format,\n                        (int)dxgiFormat);\n  if (dxgiFormat == DXGI_FORMAT_UNKNOWN) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Unsupported texture format\");\n    return nullptr;\n  }\n\n  // Create texture resource description\n  D3D12_RESOURCE_DESC resourceDesc = {};\n\n  // Set dimension based on texture type\n  if (desc.type == TextureType::ThreeD) {\n    resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE3D;\n    resourceDesc.DepthOrArraySize = static_cast<UINT16>(desc.depth);\n  } else if (desc.type == TextureType::Cube) {\n    // Cube textures are 2D textures with 6 array slices per layer (one per face).\n    // For cube arrays: numLayers * 6 faces.\n    resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;\n    resourceDesc.DepthOrArraySize = static_cast<UINT16>(desc.numLayers * 6);\n    IGL_D3D12_LOG_VERBOSE(\"Device::createTexture: Cube texture with %u layers -> %u array slices\\n\",\n                          desc.numLayers,\n                          resourceDesc.DepthOrArraySize);\n  } else {\n    resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_TEXTURE2D;\n    resourceDesc.DepthOrArraySize = static_cast<UINT16>(desc.numLayers);\n  }\n\n  const bool sampledUsage = (desc.usage & TextureDesc::TextureUsageBits::Sampled) != 0;\n  const DXGI_FORMAT resourceFormat = textureFormatToDXGIResourceFormat(desc.format, sampledUsage);\n  if (resourceFormat == DXGI_FORMAT_UNKNOWN) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Unsupported resource format\");\n    return nullptr;\n  }\n  resourceDesc.Alignment = 0;\n  resourceDesc.Width = desc.width;\n  resourceDesc.Height = desc.height;\n  resourceDesc.MipLevels = static_cast<UINT16>(desc.numMipLevels);\n  resourceDesc.Format = resourceFormat;\n\n  // MSAA configuration\n  // D3D12 MSAA requirements:\n  // - Sample count must be 1, 2, 4, 8, or 16 (power of 2)\n  // - Quality level 0 is standard MSAA (higher quality levels are vendor-specific)\n  // - MSAA textures cannot have mipmaps (numMipLevels must be 1)\n  // - Not all formats support all sample counts - validation required\n  const uint32_t sampleCount = std::max(1u, desc.numSamples);\n\n  // Validate MSAA alignment requirements before creating the resource.\n  if (sampleCount > 1) {\n    if (!validateMSAAAlignment(desc, outResult)) {\n      // Error already set by validation function\n      return nullptr;\n    }\n  }\n\n  // Validate MSAA constraints.\n  if (sampleCount > 1) {\n    // MSAA textures cannot have mipmaps\n    if (desc.numMipLevels > 1) {\n      IGL_LOG_ERROR(\n          \"Device::createTexture: MSAA textures cannot have mipmaps (numMipLevels=%u, \"\n          \"numSamples=%u)\\n\",\n          desc.numMipLevels,\n          sampleCount);\n      Result::setResult(outResult,\n                        Result::Code::ArgumentInvalid,\n                        \"MSAA textures cannot have mipmaps (numMipLevels must be 1)\");\n      return nullptr;\n    }\n\n    // Validate that the requested MSAA sample count is supported for this format.\n    // NOTE: Applications should query DeviceFeatureLimits::MaxMultisampleCount proactively\n    //       to avoid runtime errors. Use getMaxMSAASamplesForFormat() for format-specific queries.\n    D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS msqLevels = {};\n    msqLevels.Format = dxgiFormat;\n    msqLevels.SampleCount = sampleCount;\n    msqLevels.Flags = D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE;\n\n    if (FAILED(device->CheckFeatureSupport(\n            D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS, &msqLevels, sizeof(msqLevels))) ||\n        msqLevels.NumQualityLevels == 0) {\n      // Query maximum supported samples for better error messages.\n      const uint32_t maxSamples = getMaxMSAASamplesForFormat(desc.format);\n\n      char errorMsg[512];\n      snprintf(errorMsg,\n               sizeof(errorMsg),\n               \"Device::createTexture: Format %d does not support %u samples (max supported: %u). \"\n               \"Query DeviceFeatureLimits::MaxMultisampleCount before texture creation.\",\n               static_cast<int>(dxgiFormat),\n               sampleCount,\n               maxSamples);\n      IGL_LOG_ERROR(\"%s\\n\", errorMsg);\n      Result::setResult(outResult, Result::Code::Unsupported, errorMsg);\n      return nullptr;\n    }\n\n    IGL_D3D12_LOG_VERBOSE(\n        \"Device::createTexture: MSAA enabled - format=%d, samples=%u, quality levels=%u\\n\",\n        static_cast<int>(dxgiFormat),\n        sampleCount,\n        msqLevels.NumQualityLevels);\n  }\n\n  resourceDesc.SampleDesc.Count = sampleCount;\n  resourceDesc.SampleDesc.Quality = 0; // Standard MSAA quality (0 = default/standard)\n  resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_UNKNOWN;\n  resourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE;\n\n  // Set resource flags based on usage.\n  // IMPORTANT: D3D12 forbids combining ALLOW_DEPTH_STENCIL with\n  // ALLOW_RENDER_TARGET, ALLOW_UNORDERED_ACCESS or ALLOW_SIMULTANEOUS_ACCESS.\n  // We therefore do not allow \"Storage\" usage on depth/stencil formats and\n  // never set both DEPTH_STENCIL and RENDER_TARGET on the same resource.\n  const bool isDepthStencilFormat =\n      (desc.format >= TextureFormat::Z_UNorm16 && desc.format <= TextureFormat::S_UInt8);\n\n  if (desc.usage & TextureDesc::TextureUsageBits::Sampled) {\n    // Shader resource - no special flags needed\n  }\n\n  // Attachment usage becomes either a color render target or a depth/stencil\n  // target depending on the texture format.\n  if (desc.usage & TextureDesc::TextureUsageBits::Attachment) {\n    if (isDepthStencilFormat) {\n      resourceDesc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL;\n    } else {\n      resourceDesc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;\n    }\n  }\n\n  // Storage (unordered access) is only supported for non-depth/stencil\n  // formats. If requested on a depth/stencil texture, log and ignore it.\n  if (desc.usage & TextureDesc::TextureUsageBits::Storage) {\n    if (isDepthStencilFormat) {\n      IGL_LOG_ERROR(\n          \"Device::createTexture: Storage usage (UAV) requested for depth/stencil \"\n          \"format (format=%d). D3D12 does not allow ALLOW_DEPTH_STENCIL together \"\n          \"with ALLOW_UNORDERED_ACCESS; ignoring Storage flag for this texture.\\n\",\n          static_cast<int>(desc.format));\n    } else {\n      resourceDesc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_UNORDERED_ACCESS;\n    }\n  }\n\n  // Create heap properties\n  D3D12_HEAP_PROPERTIES heapProps = {};\n  heapProps.Type = D3D12_HEAP_TYPE_DEFAULT;\n  heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;\n  heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;\n  heapProps.CreationNodeMask = 1;\n  heapProps.VisibleNodeMask = 1;\n\n  // Determine initial state\n  D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON;\n\n  // Prepare optimized clear value for depth/stencil only.\n  // For color render targets we deliberately avoid passing an optimized clear\n  // value to CreateCommittedResource, because RenderPass clear colors are\n  // often dynamic. Passing a fixed optimized clear color while clearing to\n  // arbitrary colors triggers D3D12 WARNING ID=820\n  // (ClearRenderTargetView clear values do not match resource creation).\n  D3D12_CLEAR_VALUE clearValue = {};\n  D3D12_CLEAR_VALUE* pClearValue = nullptr;\n\n  if (resourceDesc.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL) {\n    clearValue.Format = dxgiFormat;\n    clearValue.DepthStencil.Depth = 1.0f; // Default far plane\n    clearValue.DepthStencil.Stencil = 0;\n    pClearValue = &clearValue;\n  }\n\n  // Validate texture alignment before creating the resource.\n  if (!validateTextureAlignment(resourceDesc, sampleCount, outResult)) {\n    // Error already set by validation function\n    return nullptr;\n  }\n\n  // Create the texture resource\n  igl::d3d12::ComPtr<ID3D12Resource> resource;\n  HRESULT hr = device->CreateCommittedResource(&heapProps,\n                                               D3D12_HEAP_FLAG_NONE,\n                                               &resourceDesc,\n                                               initialState,\n                                               pClearValue, // Optimized clear value for render\n                                                            // targets/depth-stencil\n                                               IID_PPV_ARGS(resource.GetAddressOf()));\n\n  if (FAILED(hr)) {\n    char errorMsg[512];\n    if (hr == DXGI_ERROR_DEVICE_REMOVED) {\n      HRESULT removedReason = device->GetDeviceRemovedReason();\n      snprintf(errorMsg,\n               sizeof(errorMsg),\n               \"Failed to create texture resource. Device removed! HRESULT: 0x%08X, Removed \"\n               \"reason: 0x%08X\",\n               static_cast<unsigned>(hr),\n               static_cast<unsigned>(removedReason));\n    } else {\n      snprintf(errorMsg,\n               sizeof(errorMsg),\n               \"Failed to create texture resource. HRESULT: 0x%08X\",\n               static_cast<unsigned>(hr));\n    }\n    Result::setResult(outResult, Result::Code::RuntimeError, errorMsg);\n    return nullptr;\n  }\n\n  // Create IGL texture from D3D12 resource.\n  auto texture = Texture::createFromResource(resource.Get(),\n                                             desc.format,\n                                             desc,\n                                             device,\n                                             ctx_->getCommandQueue(),\n                                             initialState,\n                                             const_cast<Device*>(this));\n  Result::setOk(outResult);\n  return texture;\n}\n\nstd::shared_ptr<ITexture> Device::createTextureView(std::shared_ptr<ITexture> texture,\n                                                    const TextureViewDesc& desc,\n                                                    Result* IGL_NULLABLE outResult) const noexcept {\n  if (!texture) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Parent texture is null\");\n    return nullptr;\n  }\n\n  // Cast to D3D12 texture\n  auto d3d12Texture = std::static_pointer_cast<Texture>(texture);\n  if (!d3d12Texture) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Texture is not a D3D12 texture\");\n    return nullptr;\n  }\n\n  // Create the texture view\n  auto view = Texture::createTextureView(d3d12Texture, desc);\n  if (!view) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Failed to create texture view\");\n    return nullptr;\n  }\n\n  Result::setOk(outResult);\n  return view;\n}\n\nstd::shared_ptr<ITimer> Device::createTimer(Result* IGL_NULLABLE outResult) const noexcept {\n  auto timer = std::make_shared<Timer>(*this);\n  Result::setOk(outResult);\n  return timer;\n}\n\nstd::shared_ptr<IVertexInputState> Device::createVertexInputState(const VertexInputStateDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const {\n  Result::setOk(outResult);\n  return std::make_shared<VertexInputState>(desc);\n}\n\nstd::shared_ptr<IComputePipelineState> Device::createComputePipeline(\n    const ComputePipelineDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  IGL_D3D12_LOG_VERBOSE(\"Device::createComputePipeline() START - debugName='%s'\\n\",\n                        desc.debugName.c_str());\n\n  auto* device = ctx_->getDevice();\n  if (!device) {\n    IGL_LOG_ERROR(\"  D3D12 device is null!\\n\");\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"D3D12 device is null\");\n    return nullptr;\n  }\n\n  if (!desc.shaderStages) {\n    IGL_LOG_ERROR(\"  Shader stages are required!\\n\");\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Shader stages are required\");\n    return nullptr;\n  }\n\n  if (desc.shaderStages->getType() != ShaderStagesType::Compute) {\n    IGL_LOG_ERROR(\"  Shader stages must be compute type!\\n\");\n    Result::setResult(\n        outResult, Result::Code::ArgumentInvalid, \"Shader stages must be compute type\");\n    return nullptr;\n  }\n\n  // Get compute shader module\n  auto* computeModule =\n      static_cast<const ShaderModule*>(desc.shaderStages->getComputeModule().get());\n  if (!computeModule) {\n    IGL_LOG_ERROR(\"  Compute module is null!\\n\");\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Compute shader required\");\n    return nullptr;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"  Getting compute shader bytecode...\\n\");\n  const auto& csBytecode = computeModule->getBytecode();\n  IGL_D3D12_LOG_VERBOSE(\"  CS bytecode: %zu bytes\\n\", csBytecode.size());\n\n  // Create root signature for compute\n  // Root signature layout for compute:\n  // - Root parameter 0: Root Constants for b0 (Push Constants)\n  // - Root parameter 1: Descriptor table with unbounded UAVs (u0-uN)\n  // - Root parameter 2: Descriptor table with unbounded SRVs (t0-tN)\n  // - Root parameter 3: Descriptor table with unbounded CBVs (b1-bN)\n  // - Root parameter 4: Descriptor table with unbounded Samplers (s0-sN)\n\n  // Query root signature capabilities to determine descriptor range bounds.\n  // Tier 1 devices require bounded descriptor ranges.\n  const D3D12_RESOURCE_BINDING_TIER bindingTier = ctx_->getResourceBindingTier();\n  const bool needsBoundedRanges = (bindingTier == D3D12_RESOURCE_BINDING_TIER_1);\n\n  // Conservative bounds for Tier 1 devices (based on actual usage in render sessions)\n  // These limits are sufficient for all current IGL usage patterns\n  const UINT uavBound = needsBoundedRanges ? 64 : UINT_MAX;\n  const UINT srvBound = needsBoundedRanges ? 128 : UINT_MAX;\n  const UINT cbvBound = needsBoundedRanges ? 64 : UINT_MAX;\n  const UINT samplerBound = needsBoundedRanges ? 32\n                                               : UINT_MAX; // Samplers always bounded on Tier 1/2\n\n  if (needsBoundedRanges) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"  Using bounded descriptor ranges (Tier 1): UAV=%u, SRV=%u, CBV=%u, Sampler=%u\\n\",\n        uavBound,\n        srvBound,\n        cbvBound,\n        samplerBound);\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"  Using unbounded descriptor ranges (Tier %u)\\n\",\n                          bindingTier == D3D12_RESOURCE_BINDING_TIER_3 ? 3 : 2);\n  }\n\n  // Descriptor range for UAVs (unordered access views - read/write buffers and textures).\n  D3D12_DESCRIPTOR_RANGE uavRange = {};\n  uavRange.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_UAV;\n  uavRange.NumDescriptors = uavBound;\n  uavRange.BaseShaderRegister = 0; // Starting at u0\n  uavRange.RegisterSpace = 0;\n  uavRange.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n\n  // Descriptor range for SRVs (shader resource views - read-only textures and buffers)\n  D3D12_DESCRIPTOR_RANGE srvRange = {};\n  srvRange.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;\n  srvRange.NumDescriptors = srvBound;\n  srvRange.BaseShaderRegister = 0; // Starting at t0\n  srvRange.RegisterSpace = 0;\n  srvRange.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n\n  // Descriptor range for CBVs (constant buffer views).\n  // Note: b0 will be used for root constants (push constants), so the CBV table starts at b1.\n  D3D12_DESCRIPTOR_RANGE cbvRange = {};\n  cbvRange.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_CBV;\n  cbvRange.NumDescriptors = cbvBound;\n  cbvRange.BaseShaderRegister = 1; // Starting at b1 (b0 is root constants)\n  cbvRange.RegisterSpace = 0;\n  cbvRange.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n\n  // Descriptor range for Samplers.\n  D3D12_DESCRIPTOR_RANGE samplerRange = {};\n  samplerRange.RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SAMPLER;\n  samplerRange.NumDescriptors = samplerBound;\n  samplerRange.BaseShaderRegister = 0; // Starting at s0\n  samplerRange.RegisterSpace = 0;\n  samplerRange.OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;\n\n  // Root parameters\n  D3D12_ROOT_PARAMETER rootParams[5] = {};\n\n  // Parameter 0: Root Constants for b0 (Push Constants)\n  //  Increased from 16 to 32 DWORDs (64→128 bytes) to match Vulkan\n  // Using 32-bit constants for push constants in compute shaders\n  rootParams[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;\n  rootParams[0].Constants.ShaderRegister = 0; // b0\n  rootParams[0].Constants.RegisterSpace = 0;\n  rootParams[0].Constants.Num32BitValues = 32; // 32 DWORDs = 128 bytes (matches Vulkan)\n  rootParams[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n\n  // Parameter 1: Descriptor table for UAVs\n  rootParams[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n  rootParams[1].DescriptorTable.NumDescriptorRanges = 1;\n  rootParams[1].DescriptorTable.pDescriptorRanges = &uavRange;\n  rootParams[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n\n  // Parameter 2: Descriptor table for SRVs\n  rootParams[2].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n  rootParams[2].DescriptorTable.NumDescriptorRanges = 1;\n  rootParams[2].DescriptorTable.pDescriptorRanges = &srvRange;\n  rootParams[2].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n\n  // Parameter 3: Descriptor table for CBVs (b1+)\n  // Note: b0 is now root constants, this table starts at b1\n  rootParams[3].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n  rootParams[3].DescriptorTable.NumDescriptorRanges = 1;\n  rootParams[3].DescriptorTable.pDescriptorRanges = &cbvRange;\n  rootParams[3].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n\n  // Parameter 4: Descriptor table for Samplers\n  rootParams[4].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;\n  rootParams[4].DescriptorTable.NumDescriptorRanges = 1;\n  rootParams[4].DescriptorTable.pDescriptorRanges = &samplerRange;\n  rootParams[4].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;\n\n  D3D12_ROOT_SIGNATURE_DESC rootSigDesc = {};\n  rootSigDesc.NumParameters = 5;\n  rootSigDesc.pParameters = rootParams;\n  rootSigDesc.NumStaticSamplers = 0;\n  rootSigDesc.pStaticSamplers = nullptr;\n  rootSigDesc.Flags = D3D12_ROOT_SIGNATURE_FLAG_NONE;\n\n  // CRITICAL: Validate root signature size (64 DWORD hardware limit).\n  IGL_D3D12_LOG_VERBOSE(\"  Validating compute root signature size:\\n\");\n  const uint32_t totalSize = getRootSignatureDwordSize(rootSigDesc);\n  IGL_D3D12_LOG_VERBOSE(\n      \"  Total size: %u / 64 DWORDs (%.1f%%)\\n\", totalSize, 100.0f * totalSize / 64.0f);\n\n  // Warning threshold at 50% (32 DWORDs)\n  if (totalSize > 32) {\n    IGL_D3D12_LOG_VERBOSE(\"  WARNING: Root signature size exceeds 50%% of limit: %u / 64 DWORDs\\n\",\n                          totalSize);\n  }\n\n  // Hard limit enforcement\n  IGL_DEBUG_ASSERT(totalSize <= 64, \"Root signature exceeds 64 DWORD limit!\");\n  if (totalSize > 64) {\n    IGL_LOG_ERROR(\"  ROOT SIGNATURE SIZE OVERFLOW: %u DWORDs (limit: 64)\\n\", totalSize);\n    Result::setResult(outResult,\n                      Result::Code::ArgumentOutOfRange,\n                      \"Root signature size exceeds 64 DWORD hardware limit\");\n    return nullptr;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"  Creating compute root signature with Root Constants (b0)/UAVs/SRVs/CBVs/Samplers\\n\");\n\n  // Get or create cached root signature.\n  igl::d3d12::ComPtr<ID3D12RootSignature> rootSignature =\n      pipelineCache_.getOrCreateRootSignature(ctx_->getDevice(), rootSigDesc, outResult);\n  if (!rootSignature.Get()) {\n    return nullptr;\n  }\n\n  // Create compute pipeline state\n  D3D12_COMPUTE_PIPELINE_STATE_DESC psoDesc = {};\n  psoDesc.pRootSignature = rootSignature.Get();\n  psoDesc.CS.pShaderBytecode = csBytecode.data();\n  psoDesc.CS.BytecodeLength = csBytecode.size();\n  psoDesc.NodeMask = 0;\n  psoDesc.CachedPSO.pCachedBlob = nullptr;\n  psoDesc.CachedPSO.CachedBlobSizeInBytes = 0;\n  psoDesc.Flags = D3D12_PIPELINE_STATE_FLAG_NONE;\n\n  // PSO cache lookup (thread-safe with double-checked locking).\n  const size_t psoHash = pipelineCache_.hashComputePipelineDesc(desc);\n  igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState;\n\n  // First check: Lock for cache lookup\n  {\n    std::lock_guard<std::mutex> lock(pipelineCache_.psoCacheMutex_);\n    auto psoIt = pipelineCache_.computePSOCache_.find(psoHash);\n    if (psoIt != pipelineCache_.computePSOCache_.end()) {\n      // Cache hit - reuse existing PSO\n      pipelineCache_.computePSOCacheHits_++;\n      pipelineState = psoIt->second; // Assignment creates a ref-counted copy\n      IGL_D3D12_LOG_VERBOSE(\n          \"  [PSO CACHE HIT] Hash=0x%zx, hits=%zu, misses=%zu, hit rate=%.1f%%\\n\",\n          psoHash,\n          pipelineCache_.computePSOCacheHits_,\n          pipelineCache_.computePSOCacheMisses_,\n          100.0 * pipelineCache_.computePSOCacheHits_ /\n              (pipelineCache_.computePSOCacheHits_ + pipelineCache_.computePSOCacheMisses_));\n      IGL_D3D12_LOG_VERBOSE(\n          \"Device::createComputePipeline() SUCCESS (CACHED) - PSO=%p, RootSig=%p\\n\",\n          pipelineState.Get(),\n          rootSignature.Get());\n      Result::setOk(outResult);\n      // Create a copy of the root signature for the returned object\n      igl::d3d12::ComPtr<ID3D12RootSignature> rootSigCopy = rootSignature;\n      return std::make_shared<ComputePipelineState>(\n          desc, std::move(pipelineState), std::move(rootSigCopy));\n    }\n  }\n\n  // Cache miss - create new PSO outside lock (expensive operation)\n  IGL_D3D12_LOG_VERBOSE(\"  [PSO CACHE MISS] Hash=0x%zx\\n\", psoHash);\n\n  IGL_D3D12_LOG_VERBOSE(\"  Creating compute pipeline state...\\n\");\n  HRESULT hr =\n      device->CreateComputePipelineState(&psoDesc, IID_PPV_ARGS(pipelineState.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"  CreateComputePipelineState FAILED: 0x%08X\\n\", static_cast<unsigned>(hr));\n\n    // Dump D3D12 + DXGI debug messages, if available, to help identify the\n    // invalid PSO configuration (shader bytecode, root signature, etc.).\n    logInfoQueuesForDevice(device, \"CreateComputePipelineState\");\n\n    Result::setResult(\n        outResult, Result::Code::RuntimeError, \"Failed to create compute pipeline state\");\n    return nullptr;\n  }\n\n  // E-011: Set debug name on compute PSO for better debugging in PIX/RenderDoc\n  if (desc.shaderStages && desc.shaderStages->getComputeModule()) {\n    const std::string& psoName = desc.shaderStages->getComputeModule()->info().debugName;\n    if (!psoName.empty()) {\n      // Convert to wide string for D3D12 SetName API\n      std::wstring wideName(psoName.begin(), psoName.end());\n      pipelineState->SetName(wideName.c_str());\n      IGL_D3D12_LOG_VERBOSE(\"  Set compute PSO debug name: %s\\n\", psoName.c_str());\n    }\n  }\n\n  // Second check: Lock for cache insertion with double-check.\n  // Another thread may have created the PSO while we were creating ours\n  {\n    std::lock_guard<std::mutex> lock(pipelineCache_.psoCacheMutex_);\n    auto psoIt = pipelineCache_.computePSOCache_.find(psoHash);\n    if (psoIt != pipelineCache_.computePSOCache_.end()) {\n      // Another thread beat us to it - use their PSO\n      pipelineCache_.computePSOCacheHits_++;\n      pipelineState = psoIt->second;\n      IGL_D3D12_LOG_VERBOSE(\n          \"  [PSO DOUBLE-CHECK HIT] Another thread created PSO, using theirs. Hash=0x%zx\\n\",\n          psoHash);\n    } else {\n      // We're the first to complete - cache our PSO\n      pipelineCache_.computePSOCacheMisses_++;\n      pipelineCache_.computePSOCache_[psoHash] = pipelineState;\n      IGL_D3D12_LOG_VERBOSE(\"  [PSO CACHED] Hash=0x%zx, hits=%zu, misses=%zu\\n\",\n                            psoHash,\n                            pipelineCache_.computePSOCacheHits_,\n                            pipelineCache_.computePSOCacheMisses_);\n    }\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"Device::createComputePipeline() SUCCESS - PSO=%p, RootSig=%p (hash=0x%zx)\\n\",\n      pipelineState.Get(),\n      rootSignature.Get(),\n      psoHash);\n  Result::setOk(outResult);\n  return std::make_shared<ComputePipelineState>(\n      desc, std::move(pipelineState), std::move(rootSignature));\n}\n\nstd::shared_ptr<IRenderPipelineState> Device::createRenderPipeline(const RenderPipelineDesc& desc,\n                                                                   Result* IGL_NULLABLE\n                                                                       outResult) const {\n  IGL_D3D12_LOG_VERBOSE(\"Device::createRenderPipeline() START - debugName='%s'\\n\",\n                        desc.debugName.c_str());\n\n  auto* device = ctx_->getDevice();\n  if (!device) {\n    IGL_LOG_ERROR(\"  D3D12 device is null!\\n\");\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"D3D12 device is null\");\n    return nullptr;\n  }\n\n  if (!desc.shaderStages) {\n    IGL_LOG_ERROR(\"  Shader stages are required!\\n\");\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Shader stages are required\");\n    return nullptr;\n  }\n\n  // Get shader modules\n  auto* vertexModule = static_cast<const ShaderModule*>(desc.shaderStages->getVertexModule().get());\n  auto* fragmentModule =\n      static_cast<const ShaderModule*>(desc.shaderStages->getFragmentModule().get());\n\n  if (!vertexModule || !fragmentModule) {\n    IGL_LOG_ERROR(\"  Vertex or fragment module is null!\\n\");\n    Result::setResult(\n        outResult, Result::Code::ArgumentInvalid, \"Vertex and fragment shaders required\");\n    return nullptr;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"  Getting shader bytecode...\\n\");\n  // Get shader bytecode first\n  const auto& vsBytecode = vertexModule->getBytecode();\n  const auto& psBytecode = fragmentModule->getBytecode();\n  IGL_D3D12_LOG_VERBOSE(\n      \"  VS bytecode: %zu bytes, PS bytecode: %zu bytes\\n\", vsBytecode.size(), psBytecode.size());\n\n  // Extract shader reflection info for dynamic root signature creation\n  const auto& vsReflectionInfo = vertexModule->getReflectionInfo();\n  const auto& psReflectionInfo = fragmentModule->getReflectionInfo();\n\n  // Create root signature key from shader reflection\n  D3D12RootSignatureKey rootSigKey =\n      D3D12RootSignatureKey::fromShaderReflection(&vsReflectionInfo, &psReflectionInfo);\n\n  // Query resource binding tier for descriptor range bounds\n  const D3D12_RESOURCE_BINDING_TIER bindingTier = ctx_->getResourceBindingTier();\n  IGL_D3D12_LOG_VERBOSE(\"  Resource binding tier: %u\\n\", bindingTier);\n\n  // Create root signature dynamically based on shader requirements\n  igl::d3d12::ComPtr<ID3D12RootSignature> rootSignature = pipelineCache_.createRootSignatureFromKey(\n      ctx_->getDevice(), rootSigKey, bindingTier, outResult);\n  if (!rootSignature.Get()) {\n    return nullptr;\n  }\n\n  // Create PSO - zero-initialize all fields\n  D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc = {};\n  psoDesc.pRootSignature = rootSignature.Get();\n\n  // Shader bytecode\n  psoDesc.VS = {vsBytecode.data(), vsBytecode.size()};\n  psoDesc.PS = {psBytecode.data(), psBytecode.size()};\n  // Explicitly zero unused shader stages\n  psoDesc.DS = {nullptr, 0};\n  psoDesc.HS = {nullptr, 0};\n  psoDesc.GS = {nullptr, 0};\n\n  // Rasterizer state - configure based on pipeline descriptor\n  // Fill mode (solid vs wireframe)\n  psoDesc.RasterizerState.FillMode = (desc.polygonFillMode == PolygonFillMode::Line)\n                                         ? D3D12_FILL_MODE_WIREFRAME\n                                         : D3D12_FILL_MODE_SOLID;\n\n  // Cull mode configuration\n  switch (desc.cullMode) {\n  case CullMode::Back:\n    psoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_BACK;\n    break;\n  case CullMode::Front:\n    psoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_FRONT;\n    break;\n  case CullMode::Disabled:\n  default:\n    psoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;\n    break;\n  }\n\n  // Front face winding order\n  psoDesc.RasterizerState.FrontCounterClockwise =\n      (desc.frontFaceWinding == WindingMode::CounterClockwise) ? TRUE : FALSE;\n\n  // Depth bias (polygon offset) - baseline values set in PSO\n  // Note: IGL doesn't currently expose depth bias in RenderPipelineDesc\n  // Applications can dynamically adjust depth bias via RenderCommandEncoder::setDepthBias()\n  // These PSO values serve as the baseline which can be dynamically overridden\n  psoDesc.RasterizerState.DepthBias = 0; // Integer depth bias (default: no bias)\n  psoDesc.RasterizerState.DepthBiasClamp = 0.0f; // Max depth bias value (default: no clamp)\n  psoDesc.RasterizerState.SlopeScaledDepthBias = 0.0f; // Slope-scaled bias for angled surfaces\n\n  psoDesc.RasterizerState.DepthClipEnable = TRUE; // Enable depth clipping\n  psoDesc.RasterizerState.MultisampleEnable = (desc.sampleCount > 1) ? TRUE : FALSE;\n  psoDesc.RasterizerState.AntialiasedLineEnable = FALSE;\n  psoDesc.RasterizerState.ForcedSampleCount = 0;\n  psoDesc.RasterizerState.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;\n\n  // Blend state - configure per render target based on pipeline descriptor\n  psoDesc.BlendState.AlphaToCoverageEnable = FALSE;\n  const size_t numColorAttachments = desc.targetDesc.colorAttachments.size();\n  psoDesc.BlendState.IndependentBlendEnable = numColorAttachments > 1 ? TRUE : FALSE;\n\n  // Helper to convert IGL blend factor to D3D12\n  auto toD3D12Blend = [](BlendFactor f) {\n    switch (f) {\n    case BlendFactor::Zero:\n      return D3D12_BLEND_ZERO;\n    case BlendFactor::One:\n      return D3D12_BLEND_ONE;\n    case BlendFactor::SrcColor:\n      return D3D12_BLEND_SRC_COLOR;\n    case BlendFactor::OneMinusSrcColor:\n      return D3D12_BLEND_INV_SRC_COLOR;\n    case BlendFactor::SrcAlpha:\n      return D3D12_BLEND_SRC_ALPHA;\n    case BlendFactor::OneMinusSrcAlpha:\n      return D3D12_BLEND_INV_SRC_ALPHA;\n    case BlendFactor::DstColor:\n      return D3D12_BLEND_DEST_COLOR;\n    case BlendFactor::OneMinusDstColor:\n      return D3D12_BLEND_INV_DEST_COLOR;\n    case BlendFactor::DstAlpha:\n      return D3D12_BLEND_DEST_ALPHA;\n    case BlendFactor::OneMinusDstAlpha:\n      return D3D12_BLEND_INV_DEST_ALPHA;\n    case BlendFactor::SrcAlphaSaturated:\n      return D3D12_BLEND_SRC_ALPHA_SAT;\n    case BlendFactor::BlendColor:\n      return D3D12_BLEND_BLEND_FACTOR;\n    case BlendFactor::OneMinusBlendColor:\n      return D3D12_BLEND_INV_BLEND_FACTOR;\n    case BlendFactor::BlendAlpha:\n      return D3D12_BLEND_BLEND_FACTOR; // D3D12 uses same constant for RGB and Alpha\n    case BlendFactor::OneMinusBlendAlpha:\n      return D3D12_BLEND_INV_BLEND_FACTOR; // D3D12 uses same constant for RGB and Alpha\n    case BlendFactor::Src1Color:\n      return D3D12_BLEND_SRC1_COLOR; // Dual-source blending\n    case BlendFactor::OneMinusSrc1Color:\n      return D3D12_BLEND_INV_SRC1_COLOR; // Dual-source blending\n    case BlendFactor::Src1Alpha:\n      return D3D12_BLEND_SRC1_ALPHA; // Dual-source blending\n    case BlendFactor::OneMinusSrc1Alpha:\n      return D3D12_BLEND_INV_SRC1_ALPHA; // Dual-source blending\n    default:\n      return D3D12_BLEND_ONE;\n    }\n  };\n\n  auto toD3D12BlendOp = [](BlendOp op) {\n    switch (op) {\n    case BlendOp::Add:\n      return D3D12_BLEND_OP_ADD;\n    case BlendOp::Subtract:\n      return D3D12_BLEND_OP_SUBTRACT;\n    case BlendOp::ReverseSubtract:\n      return D3D12_BLEND_OP_REV_SUBTRACT;\n    case BlendOp::Min:\n      return D3D12_BLEND_OP_MIN;\n    case BlendOp::Max:\n      return D3D12_BLEND_OP_MAX;\n    default:\n      return D3D12_BLEND_OP_ADD;\n    }\n  };\n\n  for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) {\n    if (i < desc.targetDesc.colorAttachments.size()) {\n      const auto& att = desc.targetDesc.colorAttachments[i];\n      psoDesc.BlendState.RenderTarget[i].BlendEnable = att.blendEnabled ? TRUE : FALSE;\n      psoDesc.BlendState.RenderTarget[i].SrcBlend = toD3D12Blend(att.srcRGBBlendFactor);\n      psoDesc.BlendState.RenderTarget[i].DestBlend = toD3D12Blend(att.dstRGBBlendFactor);\n      psoDesc.BlendState.RenderTarget[i].BlendOp = toD3D12BlendOp(att.rgbBlendOp);\n      psoDesc.BlendState.RenderTarget[i].SrcBlendAlpha = toD3D12Blend(att.srcAlphaBlendFactor);\n      psoDesc.BlendState.RenderTarget[i].DestBlendAlpha = toD3D12Blend(att.dstAlphaBlendFactor);\n      psoDesc.BlendState.RenderTarget[i].BlendOpAlpha = toD3D12BlendOp(att.alphaBlendOp);\n\n      // Convert IGL color write mask to D3D12\n      UINT8 writeMask = 0;\n      if (att.colorWriteMask & igl::kColorWriteBitsRed) {\n        writeMask |= D3D12_COLOR_WRITE_ENABLE_RED;\n      }\n      if (att.colorWriteMask & igl::kColorWriteBitsGreen) {\n        writeMask |= D3D12_COLOR_WRITE_ENABLE_GREEN;\n      }\n      if (att.colorWriteMask & igl::kColorWriteBitsBlue) {\n        writeMask |= D3D12_COLOR_WRITE_ENABLE_BLUE;\n      }\n      if (att.colorWriteMask & igl::kColorWriteBitsAlpha) {\n        writeMask |= D3D12_COLOR_WRITE_ENABLE_ALPHA;\n      }\n      psoDesc.BlendState.RenderTarget[i].RenderTargetWriteMask = writeMask;\n\n      IGL_D3D12_LOG_VERBOSE(\n          \"  PSO RenderTarget[%u]: BlendEnable=%d, SrcBlend=%d, DstBlend=%d, WriteMask=0x%02X\\n\",\n          i,\n          att.blendEnabled,\n          psoDesc.BlendState.RenderTarget[i].SrcBlend,\n          psoDesc.BlendState.RenderTarget[i].DestBlend,\n          writeMask);\n    } else {\n      // Default blend state for unused render targets\n      psoDesc.BlendState.RenderTarget[i].BlendEnable = FALSE;\n      psoDesc.BlendState.RenderTarget[i].SrcBlend = D3D12_BLEND_ONE;\n      psoDesc.BlendState.RenderTarget[i].DestBlend = D3D12_BLEND_ZERO;\n      psoDesc.BlendState.RenderTarget[i].BlendOp = D3D12_BLEND_OP_ADD;\n      psoDesc.BlendState.RenderTarget[i].SrcBlendAlpha = D3D12_BLEND_ONE;\n      psoDesc.BlendState.RenderTarget[i].DestBlendAlpha = D3D12_BLEND_ZERO;\n      psoDesc.BlendState.RenderTarget[i].BlendOpAlpha = D3D12_BLEND_OP_ADD;\n      psoDesc.BlendState.RenderTarget[i].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL;\n    }\n    // Logic operations support (bitwise blend operations)\n    // Query hardware support for logic operations\n    // Note: LogicOp is currently disabled as IGL doesn't expose logic operation settings in\n    // RenderPipelineDesc To enable in the future:\n    // 1. Add LogicOp enum and logicOpEnabled/logicOp fields to RenderPipelineDesc::ColorAttachment\n    // 2. Query D3D12_FEATURE_D3D12_OPTIONS.OutputMergerLogicOp at device initialization\n    // 3. Set LogicOpEnable = TRUE and LogicOp = convertLogicOp(att.logicOp) when enabled\n    psoDesc.BlendState.RenderTarget[i].LogicOpEnable = FALSE;\n    psoDesc.BlendState.RenderTarget[i].LogicOp = D3D12_LOGIC_OP_NOOP;\n  }\n\n  // Helper to convert IGL stencil operation to D3D12\n  auto toD3D12StencilOp = [](StencilOperation op) {\n    switch (op) {\n    case StencilOperation::Keep:\n      return D3D12_STENCIL_OP_KEEP;\n    case StencilOperation::Zero:\n      return D3D12_STENCIL_OP_ZERO;\n    case StencilOperation::Replace:\n      return D3D12_STENCIL_OP_REPLACE;\n    case StencilOperation::IncrementClamp:\n      return D3D12_STENCIL_OP_INCR_SAT;\n    case StencilOperation::DecrementClamp:\n      return D3D12_STENCIL_OP_DECR_SAT;\n    case StencilOperation::Invert:\n      return D3D12_STENCIL_OP_INVERT;\n    case StencilOperation::IncrementWrap:\n      return D3D12_STENCIL_OP_INCR;\n    case StencilOperation::DecrementWrap:\n      return D3D12_STENCIL_OP_DECR;\n    default:\n      return D3D12_STENCIL_OP_KEEP;\n    }\n  };\n\n  // Helper to convert IGL compare function to D3D12\n  auto toD3D12CompareFunc = [](CompareFunction func) {\n    switch (func) {\n    case CompareFunction::Never:\n      return D3D12_COMPARISON_FUNC_NEVER;\n    case CompareFunction::Less:\n      return D3D12_COMPARISON_FUNC_LESS;\n    case CompareFunction::Equal:\n      return D3D12_COMPARISON_FUNC_EQUAL;\n    case CompareFunction::LessEqual:\n      return D3D12_COMPARISON_FUNC_LESS_EQUAL;\n    case CompareFunction::Greater:\n      return D3D12_COMPARISON_FUNC_GREATER;\n    case CompareFunction::NotEqual:\n      return D3D12_COMPARISON_FUNC_NOT_EQUAL;\n    case CompareFunction::GreaterEqual:\n      return D3D12_COMPARISON_FUNC_GREATER_EQUAL;\n    case CompareFunction::AlwaysPass:\n      return D3D12_COMPARISON_FUNC_ALWAYS;\n    default:\n      return D3D12_COMPARISON_FUNC_LESS;\n    }\n  };\n\n  // Depth stencil state - check if we have a depth or stencil attachment\n  const bool hasDepth = (desc.targetDesc.depthAttachmentFormat != TextureFormat::Invalid);\n  const bool hasStencil = (desc.targetDesc.stencilAttachmentFormat != TextureFormat::Invalid);\n\n  if (hasDepth) {\n    psoDesc.DepthStencilState.DepthEnable = TRUE;\n    psoDesc.DepthStencilState.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;\n    // Use LESS_EQUAL to allow Z=0 to pass when depth buffer is cleared to 0\n    psoDesc.DepthStencilState.DepthFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL;\n  } else {\n    psoDesc.DepthStencilState.DepthEnable = FALSE;\n    psoDesc.DepthStencilState.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO;\n    psoDesc.DepthStencilState.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS;\n  }\n\n  // Configure stencil state (can be used with or without depth)\n  if (hasStencil) {\n    // Note: In D3D12/IGL, stencil state is configured via DepthStencilState binding\n    // For now, we set up basic stencil configuration in the PSO\n    // Default: stencil disabled unless explicitly configured by DepthStencilState\n    psoDesc.DepthStencilState.StencilEnable = FALSE;\n    psoDesc.DepthStencilState.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK;\n    psoDesc.DepthStencilState.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK;\n\n    // Front face stencil operations (defaults)\n    psoDesc.DepthStencilState.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP;\n    psoDesc.DepthStencilState.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP;\n    psoDesc.DepthStencilState.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP;\n    psoDesc.DepthStencilState.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS;\n\n    // Back face stencil operations (defaults, same as front)\n    psoDesc.DepthStencilState.BackFace = psoDesc.DepthStencilState.FrontFace;\n\n    IGL_D3D12_LOG_VERBOSE(\"  PSO Stencil configured: format=%d\\n\",\n                          (int)desc.targetDesc.stencilAttachmentFormat);\n  } else {\n    psoDesc.DepthStencilState.StencilEnable = FALSE;\n  }\n\n  // Render target formats: support multiple render targets (MRT)\n  if (!desc.targetDesc.colorAttachments.empty()) {\n    const UINT n = static_cast<UINT>(std::min<size_t>(desc.targetDesc.colorAttachments.size(),\n                                                      D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT));\n    psoDesc.NumRenderTargets = n;\n    IGL_D3D12_LOG_VERBOSE(\"  PSO NumRenderTargets = %u (color attachments = %zu)\\n\",\n                          n,\n                          desc.targetDesc.colorAttachments.size());\n    for (UINT i = 0; i < n; ++i) {\n      // CRITICAL: Extract value to avoid MSVC debug iterator bounds check in function call\n      const auto textureFormat = desc.targetDesc.colorAttachments[i].textureFormat;\n      psoDesc.RTVFormats[i] = textureFormatToDXGIFormat(textureFormat);\n      IGL_D3D12_LOG_VERBOSE(\n          \"  PSO RTVFormats[%u] = %d (IGL format %d)\\n\", i, psoDesc.RTVFormats[i], textureFormat);\n    }\n  } else {\n    psoDesc.NumRenderTargets = 0;\n    IGL_D3D12_LOG_VERBOSE(\"  PSO NumRenderTargets = 0 (no color attachments)\\n\");\n    for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) {\n      psoDesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN;\n    }\n  }\n  if (desc.targetDesc.depthAttachmentFormat != TextureFormat::Invalid) {\n    psoDesc.DSVFormat = textureFormatToDXGIFormat(desc.targetDesc.depthAttachmentFormat);\n  } else {\n    psoDesc.DSVFormat = DXGI_FORMAT_UNKNOWN;\n  }\n\n  // Sample settings\n  psoDesc.SampleMask = UINT_MAX;\n  psoDesc.SampleDesc.Count = 1;\n  psoDesc.SampleDesc.Quality = 0; // Must be 0 for Count=1\n\n  // Primitive topology - convert from IGL topology enum\n  if (desc.topology == igl::PrimitiveType::Point) {\n    psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT;\n    IGL_D3D12_LOG_VERBOSE(\"  Setting PSO topology type to POINT\\n\");\n  } else if (desc.topology == igl::PrimitiveType::Line ||\n             desc.topology == igl::PrimitiveType::LineStrip) {\n    psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE;\n    IGL_D3D12_LOG_VERBOSE(\"  Setting PSO topology type to LINE\\n\");\n  } else {\n    psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;\n    IGL_D3D12_LOG_VERBOSE(\"  Setting PSO topology type to TRIANGLE\\n\");\n  }\n  psoDesc.IBStripCutValue = D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED;\n\n  // Additional required fields\n  psoDesc.NodeMask = 0; // Single GPU operation\n  psoDesc.CachedPSO.pCachedBlob = nullptr;\n  psoDesc.CachedPSO.CachedBlobSizeInBytes = 0;\n  psoDesc.Flags = D3D12_PIPELINE_STATE_FLAG_NONE;\n\n  // Input layout.\n  std::vector<D3D12_INPUT_ELEMENT_DESC> inputElements;\n  std::vector<std::string> semanticNames; // Keep semantic name strings alive\n\n  if (desc.vertexInputState) {\n    // Convert IGL vertex input state to D3D12 input layout\n    auto* d3d12VertexInput = static_cast<const VertexInputState*>(desc.vertexInputState.get());\n    const auto& vertexDesc = d3d12VertexInput->getDesc();\n\n    // Pre-reserve space to prevent reallocation (which would invalidate c_str() pointers)\n    semanticNames.reserve(vertexDesc.numAttributes);\n\n    IGL_D3D12_LOG_VERBOSE(\"  Processing vertex input state: %zu attributes\\n\",\n                          vertexDesc.numAttributes);\n    for (size_t i = 0; i < vertexDesc.numAttributes; ++i) {\n      const auto& attr = vertexDesc.attributes[i];\n      IGL_D3D12_LOG_VERBOSE(\"    Attribute %zu: name='%s', format=%d, offset=%zu, bufferIndex=%u\\n\",\n                            i,\n                            attr.name.c_str(),\n                            static_cast<int>(attr.format),\n                            attr.offset,\n                            attr.bufferIndex);\n\n      // Map IGL attribute names to D3D12 HLSL semantic names\n      // IMPORTANT: Semantic names must NOT end with numbers - use SemanticIndex field instead\n      std::string semanticName;\n      // Case-insensitive helpers\n      auto toLower = [](std::string s) {\n        for (auto& c : s)\n          c = static_cast<char>(tolower(c));\n        return s;\n      };\n      const std::string nlow = toLower(attr.name);\n      auto startsWith = [&](const char* p) { return nlow.rfind(p, 0) == 0; };\n      auto contains = [&](const char* p) { return nlow.find(p) != std::string::npos; };\n\n      if (startsWith(\"pos\") || startsWith(\"position\") || contains(\"position\")) {\n        semanticName = \"POSITION\";\n      } else if (startsWith(\"col\") || startsWith(\"color\")) {\n        semanticName = \"COLOR\";\n      } else if (startsWith(\"st\") || startsWith(\"uv\") || startsWith(\"tex\") ||\n                 contains(\"texcoord\") || startsWith(\"offset\")) {\n        semanticName = \"TEXCOORD\";\n      } else if (startsWith(\"norm\") || startsWith(\"normal\")) {\n        semanticName = \"NORMAL\";\n      } else if (startsWith(\"tangent\")) {\n        semanticName = \"TANGENT\";\n      } else {\n        // Fallback: POSITION for first attribute, TEXCOORD for second, COLOR otherwise\n        if (i == 0)\n          semanticName = \"POSITION\";\n        else if (i == 1)\n          semanticName = \"TEXCOORD\";\n        else\n          semanticName = \"COLOR\";\n      }\n      semanticNames.push_back(semanticName);\n      IGL_D3D12_LOG_VERBOSE(\"      Mapped '%s' -> '%s'\\n\", attr.name.c_str(), semanticName.c_str());\n\n      D3D12_INPUT_ELEMENT_DESC element = {};\n      element.SemanticName = semanticNames.back().c_str();\n      element.SemanticIndex = 0;\n      element.AlignedByteOffset = static_cast<UINT>(attr.offset);\n      element.InputSlot = attr.bufferIndex;\n      // Check if this buffer binding uses per-instance data\n      // Note: inputBindings array may be sparse (bufferIndex >= numInputBindings), so check bounds\n      // with MAX\n      const bool isInstanceData = (attr.bufferIndex < IGL_BUFFER_BINDINGS_MAX &&\n                                   vertexDesc.inputBindings[attr.bufferIndex].sampleFunction ==\n                                       VertexSampleFunction::Instance);\n      element.InputSlotClass = isInstanceData ? D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA\n                                              : D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA;\n      element.InstanceDataStepRate = isInstanceData ? 1 : 0;\n      IGL_D3D12_LOG_VERBOSE(\n          \"      bufferIndex=%u, isInstance=%d, sampleFunc=%d, InputSlotClass=%d, StepRate=%u\\n\",\n          attr.bufferIndex,\n          isInstanceData,\n          (int)vertexDesc.inputBindings[attr.bufferIndex].sampleFunction,\n          (int)element.InputSlotClass,\n          element.InstanceDataStepRate);\n\n      // Convert IGL vertex format to DXGI format\n      switch (attr.format) {\n      case VertexAttributeFormat::Float1:\n        element.Format = DXGI_FORMAT_R32_FLOAT;\n        break;\n      case VertexAttributeFormat::Float2:\n        element.Format = DXGI_FORMAT_R32G32_FLOAT;\n        break;\n      case VertexAttributeFormat::Float3:\n        element.Format = DXGI_FORMAT_R32G32B32_FLOAT;\n        break;\n      case VertexAttributeFormat::Float4:\n        element.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;\n        break;\n      case VertexAttributeFormat::Byte1:\n        element.Format = DXGI_FORMAT_R8_UINT;\n        break;\n      case VertexAttributeFormat::Byte2:\n        element.Format = DXGI_FORMAT_R8G8_UINT;\n        break;\n      case VertexAttributeFormat::Byte4:\n        element.Format = DXGI_FORMAT_R8G8B8A8_UINT;\n        break;\n      case VertexAttributeFormat::UByte4Norm:\n        element.Format = DXGI_FORMAT_R8G8B8A8_UNORM;\n        break;\n      case VertexAttributeFormat::HalfFloat1:\n        element.Format = DXGI_FORMAT_R16_FLOAT;\n        break;\n      case VertexAttributeFormat::HalfFloat2:\n        element.Format = DXGI_FORMAT_R16G16_FLOAT;\n        break;\n      case VertexAttributeFormat::HalfFloat3:\n        // D3D12 doesn't have RGB16_FLOAT, use RGBA16_FLOAT\n        element.Format = DXGI_FORMAT_R16G16B16A16_FLOAT;\n        break;\n      case VertexAttributeFormat::HalfFloat4:\n        element.Format = DXGI_FORMAT_R16G16B16A16_FLOAT;\n        break;\n      case VertexAttributeFormat::Int1:\n        element.Format = DXGI_FORMAT_R32_SINT;\n        break;\n      case VertexAttributeFormat::Int2:\n        element.Format = DXGI_FORMAT_R32G32_SINT;\n        break;\n      case VertexAttributeFormat::Int3:\n        element.Format = DXGI_FORMAT_R32G32B32_SINT;\n        break;\n      case VertexAttributeFormat::Int4:\n        element.Format = DXGI_FORMAT_R32G32B32A32_SINT;\n        break;\n      case VertexAttributeFormat::UInt1:\n        element.Format = DXGI_FORMAT_R32_UINT;\n        break;\n      case VertexAttributeFormat::UInt2:\n        element.Format = DXGI_FORMAT_R32G32_UINT;\n        break;\n      case VertexAttributeFormat::UInt3:\n        element.Format = DXGI_FORMAT_R32G32B32_UINT;\n        break;\n      case VertexAttributeFormat::UInt4:\n        element.Format = DXGI_FORMAT_R32G32B32A32_UINT;\n        break;\n      case VertexAttributeFormat::Int_2_10_10_10_REV:\n        // Use an unsigned 10:10:10:2 format and decode SNORM manually in the shader.\n        element.Format = DXGI_FORMAT_R10G10B10A2_UINT;\n        break;\n      default:\n        element.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; // fallback\n        IGL_LOG_ERROR(\"  Unsupported vertex attribute format: %d (using fallback RGBA32_FLOAT)\\n\",\n                      static_cast<int>(attr.format));\n        break;\n      }\n\n      inputElements.push_back(element);\n    }\n  } else {\n    // Default simple triangle layout: position (float3) + color (float4)\n    inputElements.resize(2);\n    inputElements[0] = {\"POSITION\",\n                        0,\n                        DXGI_FORMAT_R32G32B32_FLOAT,\n                        0,\n                        0,\n                        D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA,\n                        0};\n    inputElements[1] = {\"COLOR\",\n                        0,\n                        DXGI_FORMAT_R32G32B32A32_FLOAT,\n                        0,\n                        12,\n                        D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA,\n                        0};\n  }\n  psoDesc.InputLayout = {inputElements.data(), static_cast<UINT>(inputElements.size())};\n\n  IGL_D3D12_LOG_VERBOSE(\"  Final input layout: %u elements\\n\",\n                        static_cast<unsigned>(inputElements.size()));\n  for (size_t i = 0; i < inputElements.size(); ++i) {\n    IGL_D3D12_LOG_VERBOSE(\"    [%zu]: %s (index %u), format %d, slot %u, offset %u\\n\",\n                          i,\n                          inputElements[i].SemanticName,\n                          inputElements[i].SemanticIndex,\n                          static_cast<int>(inputElements[i].Format),\n                          inputElements[i].InputSlot,\n                          inputElements[i].AlignedByteOffset);\n  }\n\n  // Use shader reflection to verify input signature matches input layout\n  IGL_D3D12_LOG_VERBOSE(\"  Reflecting vertex shader to verify input signature...\\n\");\n  igl::d3d12::ComPtr<ID3D12ShaderReflection> vsReflection;\n  HRESULT hr =\n      D3DReflect(vsBytecode.data(), vsBytecode.size(), IID_PPV_ARGS(vsReflection.GetAddressOf()));\n  if (SUCCEEDED(hr)) {\n    D3D12_SHADER_DESC shaderDesc = {};\n    vsReflection->GetDesc(&shaderDesc);\n    IGL_D3D12_LOG_VERBOSE(\"    Shader expects %u input parameters:\\n\", shaderDesc.InputParameters);\n    for (UINT i = 0; i < shaderDesc.InputParameters; ++i) {\n      D3D12_SIGNATURE_PARAMETER_DESC paramDesc = {};\n      vsReflection->GetInputParameterDesc(i, &paramDesc);\n      IGL_D3D12_LOG_VERBOSE(\"      [%u]: %s%u (semantic index %u), mask 0x%02X\\n\",\n                            i,\n                            paramDesc.SemanticName,\n                            paramDesc.SemanticIndex,\n                            paramDesc.SemanticIndex,\n                            paramDesc.Mask);\n    }\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\n        \"    Shader reflection unavailable: 0x%08X (non-critical - pipeline will still be \"\n        \"created)\\n\",\n        static_cast<unsigned>(hr));\n  }\n\n  // PSO cache lookup (thread-safe with double-checked locking).\n  const size_t psoHash = pipelineCache_.hashRenderPipelineDesc(desc);\n  igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState;\n\n  // First check: Lock for cache lookup\n  {\n    std::lock_guard<std::mutex> lock(pipelineCache_.psoCacheMutex_);\n    auto psoIt = pipelineCache_.graphicsPSOCache_.find(psoHash);\n    if (psoIt != pipelineCache_.graphicsPSOCache_.end()) {\n      // Cache hit - reuse existing PSO\n      pipelineCache_.graphicsPSOCacheHits_++;\n      pipelineState = psoIt->second; // Assignment creates a ref-counted copy\n      IGL_D3D12_LOG_VERBOSE(\n          \"  [PSO CACHE HIT] Hash=0x%zx, hits=%zu, misses=%zu, hit rate=%.1f%%\\n\",\n          psoHash,\n          pipelineCache_.graphicsPSOCacheHits_,\n          pipelineCache_.graphicsPSOCacheMisses_,\n          100.0 * pipelineCache_.graphicsPSOCacheHits_ /\n              (pipelineCache_.graphicsPSOCacheHits_ + pipelineCache_.graphicsPSOCacheMisses_));\n      IGL_D3D12_LOG_VERBOSE(\n          \"Device::createRenderPipeline() SUCCESS (CACHED) - PSO=%p, RootSig=%p\\n\",\n          pipelineState.Get(),\n          rootSignature.Get());\n      Result::setOk(outResult);\n      // Create a copy of the root signature for the returned object\n      igl::d3d12::ComPtr<ID3D12RootSignature> rootSigCopy = rootSignature;\n      auto renderPipeline = std::make_shared<RenderPipelineState>(\n          desc, std::move(pipelineState), std::move(rootSigCopy));\n\n      // Compute root parameter layout from shader reflection key (same as cache miss path)\n      UINT paramIndex = 0;\n\n      if (rootSigKey.hasPushConstants) {\n        renderPipeline->shaderReflection_.pushConstantRootParamIndex = paramIndex++;\n      }\n\n      if (!rootSigKey.usedCBVSlots.empty()) {\n        renderPipeline->rootParamLayout_.cbvTableIndex = paramIndex++;\n        renderPipeline->rootParamLayout_.cbvDescriptorCount = rootSigKey.maxCBVSlot + 1;\n      }\n\n      if (!rootSigKey.usedSRVSlots.empty()) {\n        renderPipeline->rootParamLayout_.srvTableIndex = paramIndex++;\n        renderPipeline->rootParamLayout_.srvDescriptorCount = rootSigKey.maxSRVSlot + 1;\n      }\n\n      if (!rootSigKey.usedSamplerSlots.empty()) {\n        renderPipeline->rootParamLayout_.samplerTableIndex = paramIndex++;\n        renderPipeline->rootParamLayout_.samplerDescriptorCount = rootSigKey.maxSamplerSlot + 1;\n      }\n\n      if (!rootSigKey.usedUAVSlots.empty()) {\n        renderPipeline->rootParamLayout_.uavTableIndex = paramIndex++;\n        renderPipeline->rootParamLayout_.uavDescriptorCount = rootSigKey.maxUAVSlot + 1;\n      }\n\n      return renderPipeline;\n    }\n  }\n\n  // Cache miss - create new PSO outside lock (expensive operation)\n  IGL_D3D12_LOG_VERBOSE(\"  [PSO CACHE MISS] Hash=0x%zx\\n\", psoHash);\n\n  IGL_D3D12_LOG_VERBOSE(\"  Creating pipeline state (this may take a moment)...\\n\");\n\n  // Optional: a more detailed validation pass (validateShaderBindingsAndLayout) can be\n  // re-enabled here if needed for diagnostics. It was previously wired to shader reflection\n  // and emitted verbose logs on every cache miss; for normal runs we rely on the D3D12\n  // debug layer instead.\n\n  hr = device->CreateGraphicsPipelineState(&psoDesc, IID_PPV_ARGS(pipelineState.GetAddressOf()));\n  if (FAILED(hr)) {\n    // Dump D3D12 + DXGI debug messages if available so that any invalid\n    // PSO configuration (bytecode/root signature/RT formats) is visible.\n    logInfoQueuesForDevice(device, \"CreateGraphicsPipelineState\");\n\n    char errorMsg[512];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to create pipeline state. HRESULT: 0x%08X\\n\"\n             \"  VS size: %zu, PS size: %zu\\n\"\n             \"  Input elements: %u\\n\"\n             \"  NumRenderTargets: %u, RTV[0]: %d, DSV: %d\\n\"\n             \"  SampleDesc: Count=%u, Quality=%u\\n\"\n             \"  PrimitiveTopologyType: %d\\n\",\n             static_cast<unsigned>(hr),\n             psoDesc.VS.BytecodeLength,\n             psoDesc.PS.BytecodeLength,\n             psoDesc.InputLayout.NumElements,\n             psoDesc.NumRenderTargets,\n             static_cast<int>(psoDesc.RTVFormats[0]),\n             static_cast<int>(psoDesc.DSVFormat),\n             psoDesc.SampleDesc.Count,\n             psoDesc.SampleDesc.Quality,\n             static_cast<int>(psoDesc.PrimitiveTopologyType));\n    IGL_LOG_ERROR(errorMsg);\n    Result::setResult(outResult, Result::Code::RuntimeError, errorMsg);\n    return nullptr;\n  }\n\n  // E-011: Set debug name on PSO for better debugging in PIX/RenderDoc\n  std::string psoName;\n  if (desc.shaderStages->getVertexModule()) {\n    psoName += desc.shaderStages->getVertexModule()->info().debugName;\n  }\n  if (desc.shaderStages->getFragmentModule()) {\n    if (!psoName.empty()) {\n      psoName += \" + \";\n    }\n    psoName += desc.shaderStages->getFragmentModule()->info().debugName;\n  }\n  if (!psoName.empty()) {\n    // Convert to wide string for D3D12 SetName API\n    std::wstring wideName(psoName.begin(), psoName.end());\n    pipelineState->SetName(wideName.c_str());\n    IGL_D3D12_LOG_VERBOSE(\"  Set PSO debug name: %s\\n\", psoName.c_str());\n  }\n\n  // Second check: Lock for cache insertion with double-check.\n  // Another thread may have created the PSO while we were creating ours\n  {\n    std::lock_guard<std::mutex> lock(pipelineCache_.psoCacheMutex_);\n    auto psoIt = pipelineCache_.graphicsPSOCache_.find(psoHash);\n    if (psoIt != pipelineCache_.graphicsPSOCache_.end()) {\n      // Another thread beat us to it - use their PSO\n      pipelineCache_.graphicsPSOCacheHits_++;\n      pipelineState = psoIt->second;\n      IGL_D3D12_LOG_VERBOSE(\n          \"  [PSO DOUBLE-CHECK HIT] Another thread created PSO, using theirs. Hash=0x%zx\\n\",\n          psoHash);\n    } else {\n      // We're the first to complete - cache our PSO\n      pipelineCache_.graphicsPSOCacheMisses_++;\n      pipelineCache_.graphicsPSOCache_[psoHash] = pipelineState;\n      IGL_D3D12_LOG_VERBOSE(\"  [PSO CACHED] Hash=0x%zx, hits=%zu, misses=%zu\\n\",\n                            psoHash,\n                            pipelineCache_.graphicsPSOCacheHits_,\n                            pipelineCache_.graphicsPSOCacheMisses_);\n    }\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"Device::createRenderPipeline() SUCCESS - PSO=%p, RootSig=%p (hash=0x%zx)\\n\",\n      pipelineState.Get(),\n      rootSignature.Get(),\n      psoHash);\n\n  // Create the pipeline state object\n  auto renderPipeline = std::make_shared<RenderPipelineState>(\n      desc, std::move(pipelineState), std::move(rootSignature));\n\n  // Compute root parameter layout from shader reflection key\n  // The layout order matches createRootSignatureFromKey():\n  //   1. Push constants (if present)\n  //   2. CBV table (if shader uses CBVs)\n  //   3. SRV table (if shader uses SRVs)\n  //   4. Sampler table (if shader uses samplers)\n  //   5. UAV table (if shader uses UAVs)\n  UINT paramIndex = 0;\n\n  if (rootSigKey.hasPushConstants) {\n    renderPipeline->shaderReflection_.pushConstantRootParamIndex = paramIndex++;\n  }\n\n  if (!rootSigKey.usedCBVSlots.empty()) {\n    renderPipeline->rootParamLayout_.cbvTableIndex = paramIndex++;\n    renderPipeline->rootParamLayout_.cbvDescriptorCount = rootSigKey.maxCBVSlot + 1;\n  }\n\n  if (!rootSigKey.usedSRVSlots.empty()) {\n    renderPipeline->rootParamLayout_.srvTableIndex = paramIndex++;\n    renderPipeline->rootParamLayout_.srvDescriptorCount = rootSigKey.maxSRVSlot + 1;\n  }\n\n  if (!rootSigKey.usedSamplerSlots.empty()) {\n    renderPipeline->rootParamLayout_.samplerTableIndex = paramIndex++;\n    renderPipeline->rootParamLayout_.samplerDescriptorCount = rootSigKey.maxSamplerSlot + 1;\n  }\n\n  if (!rootSigKey.usedUAVSlots.empty()) {\n    renderPipeline->rootParamLayout_.uavTableIndex = paramIndex++;\n    renderPipeline->rootParamLayout_.uavDescriptorCount = rootSigKey.maxUAVSlot + 1;\n  }\n\n  Result::setOk(outResult);\n  return renderPipeline;\n}\n\n// D3D12-specific: Create PSO variant with substituted render target formats\n// This is called by RenderPipelineState::getPipelineState() for Vulkan-style dynamic PSO selection\nigl::d3d12::ComPtr<ID3D12PipelineState> Device::createPipelineStateVariant(\n    const RenderPipelineDesc& desc,\n    ID3D12RootSignature* rootSignature,\n    Result* IGL_NULLABLE outResult) const {\n  IGL_D3D12_LOG_VERBOSE(\n      \"Device::createPipelineStateVariant() - Creating PSO variant for framebuffer formats\\n\");\n\n  auto* device = ctx_->getDevice();\n  if (!device || !rootSignature) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Invalid device or root signature\");\n    return nullptr;\n  }\n\n  if (!desc.shaderStages) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Shader stages required\");\n    return nullptr;\n  }\n\n  // Get shader bytecode\n  auto* vertexModule = static_cast<const ShaderModule*>(desc.shaderStages->getVertexModule().get());\n  auto* fragmentModule =\n      static_cast<const ShaderModule*>(desc.shaderStages->getFragmentModule().get());\n\n  if (!vertexModule || !fragmentModule) {\n    Result::setResult(\n        outResult, Result::Code::ArgumentInvalid, \"Vertex and fragment shaders required\");\n    return nullptr;\n  }\n\n  const auto& vsBytecode = vertexModule->getBytecode();\n  const auto& psBytecode = fragmentModule->getBytecode();\n\n  // Build D3D12_GRAPHICS_PIPELINE_STATE_DESC from RenderPipelineDesc\n  // This mirrors the logic in createRenderPipeline() but without caching\n  D3D12_GRAPHICS_PIPELINE_STATE_DESC psoDesc = {};\n  psoDesc.pRootSignature = rootSignature;\n\n  // Shader bytecode\n  psoDesc.VS = {vsBytecode.data(), vsBytecode.size()};\n  psoDesc.PS = {psBytecode.data(), psBytecode.size()};\n  psoDesc.DS = {nullptr, 0};\n  psoDesc.HS = {nullptr, 0};\n  psoDesc.GS = {nullptr, 0};\n\n  // Rasterizer state\n  psoDesc.RasterizerState.FillMode = (desc.polygonFillMode == PolygonFillMode::Line)\n                                         ? D3D12_FILL_MODE_WIREFRAME\n                                         : D3D12_FILL_MODE_SOLID;\n\n  switch (desc.cullMode) {\n  case CullMode::Back:\n    psoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_BACK;\n    break;\n  case CullMode::Front:\n    psoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_FRONT;\n    break;\n  case CullMode::Disabled:\n  default:\n    psoDesc.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;\n    break;\n  }\n\n  psoDesc.RasterizerState.FrontCounterClockwise =\n      (desc.frontFaceWinding == WindingMode::CounterClockwise) ? TRUE : FALSE;\n  psoDesc.RasterizerState.DepthBias = 0;\n  psoDesc.RasterizerState.DepthBiasClamp = 0.0f;\n  psoDesc.RasterizerState.SlopeScaledDepthBias = 0.0f;\n  psoDesc.RasterizerState.DepthClipEnable = TRUE;\n  psoDesc.RasterizerState.MultisampleEnable = (desc.sampleCount > 1) ? TRUE : FALSE;\n  psoDesc.RasterizerState.AntialiasedLineEnable = FALSE;\n  psoDesc.RasterizerState.ForcedSampleCount = 0;\n  psoDesc.RasterizerState.ConservativeRaster = D3D12_CONSERVATIVE_RASTERIZATION_MODE_OFF;\n\n  // Blend state\n  psoDesc.BlendState.AlphaToCoverageEnable = FALSE;\n  const size_t numColorAttachments = desc.targetDesc.colorAttachments.size();\n  psoDesc.BlendState.IndependentBlendEnable = numColorAttachments > 1 ? TRUE : FALSE;\n\n  auto toD3D12Blend = [](BlendFactor f) {\n    switch (f) {\n    case BlendFactor::Zero:\n      return D3D12_BLEND_ZERO;\n    case BlendFactor::One:\n      return D3D12_BLEND_ONE;\n    case BlendFactor::SrcColor:\n      return D3D12_BLEND_SRC_COLOR;\n    case BlendFactor::OneMinusSrcColor:\n      return D3D12_BLEND_INV_SRC_COLOR;\n    case BlendFactor::SrcAlpha:\n      return D3D12_BLEND_SRC_ALPHA;\n    case BlendFactor::OneMinusSrcAlpha:\n      return D3D12_BLEND_INV_SRC_ALPHA;\n    case BlendFactor::DstColor:\n      return D3D12_BLEND_DEST_COLOR;\n    case BlendFactor::OneMinusDstColor:\n      return D3D12_BLEND_INV_DEST_COLOR;\n    case BlendFactor::DstAlpha:\n      return D3D12_BLEND_DEST_ALPHA;\n    case BlendFactor::OneMinusDstAlpha:\n      return D3D12_BLEND_INV_DEST_ALPHA;\n    case BlendFactor::SrcAlphaSaturated:\n      return D3D12_BLEND_SRC_ALPHA_SAT;\n    case BlendFactor::BlendColor:\n      return D3D12_BLEND_BLEND_FACTOR;\n    case BlendFactor::OneMinusBlendColor:\n      return D3D12_BLEND_INV_BLEND_FACTOR;\n    case BlendFactor::BlendAlpha:\n      return D3D12_BLEND_BLEND_FACTOR;\n    case BlendFactor::OneMinusBlendAlpha:\n      return D3D12_BLEND_INV_BLEND_FACTOR;\n    case BlendFactor::Src1Color:\n      return D3D12_BLEND_SRC1_COLOR;\n    case BlendFactor::OneMinusSrc1Color:\n      return D3D12_BLEND_INV_SRC1_COLOR;\n    case BlendFactor::Src1Alpha:\n      return D3D12_BLEND_SRC1_ALPHA;\n    case BlendFactor::OneMinusSrc1Alpha:\n      return D3D12_BLEND_INV_SRC1_ALPHA;\n    default:\n      return D3D12_BLEND_ONE;\n    }\n  };\n\n  auto toD3D12BlendOp = [](BlendOp op) {\n    switch (op) {\n    case BlendOp::Add:\n      return D3D12_BLEND_OP_ADD;\n    case BlendOp::Subtract:\n      return D3D12_BLEND_OP_SUBTRACT;\n    case BlendOp::ReverseSubtract:\n      return D3D12_BLEND_OP_REV_SUBTRACT;\n    case BlendOp::Min:\n      return D3D12_BLEND_OP_MIN;\n    case BlendOp::Max:\n      return D3D12_BLEND_OP_MAX;\n    default:\n      return D3D12_BLEND_OP_ADD;\n    }\n  };\n\n  for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) {\n    if (i < desc.targetDesc.colorAttachments.size()) {\n      const auto& att = desc.targetDesc.colorAttachments[i];\n      psoDesc.BlendState.RenderTarget[i].BlendEnable = att.blendEnabled ? TRUE : FALSE;\n      psoDesc.BlendState.RenderTarget[i].SrcBlend = toD3D12Blend(att.srcRGBBlendFactor);\n      psoDesc.BlendState.RenderTarget[i].DestBlend = toD3D12Blend(att.dstRGBBlendFactor);\n      psoDesc.BlendState.RenderTarget[i].BlendOp = toD3D12BlendOp(att.rgbBlendOp);\n      psoDesc.BlendState.RenderTarget[i].SrcBlendAlpha = toD3D12Blend(att.srcAlphaBlendFactor);\n      psoDesc.BlendState.RenderTarget[i].DestBlendAlpha = toD3D12Blend(att.dstAlphaBlendFactor);\n      psoDesc.BlendState.RenderTarget[i].BlendOpAlpha = toD3D12BlendOp(att.alphaBlendOp);\n\n      UINT8 writeMask = 0;\n      if (att.colorWriteMask & igl::kColorWriteBitsRed) {\n        writeMask |= D3D12_COLOR_WRITE_ENABLE_RED;\n      }\n      if (att.colorWriteMask & igl::kColorWriteBitsGreen) {\n        writeMask |= D3D12_COLOR_WRITE_ENABLE_GREEN;\n      }\n      if (att.colorWriteMask & igl::kColorWriteBitsBlue) {\n        writeMask |= D3D12_COLOR_WRITE_ENABLE_BLUE;\n      }\n      if (att.colorWriteMask & igl::kColorWriteBitsAlpha) {\n        writeMask |= D3D12_COLOR_WRITE_ENABLE_ALPHA;\n      }\n      psoDesc.BlendState.RenderTarget[i].RenderTargetWriteMask = writeMask;\n    } else {\n      psoDesc.BlendState.RenderTarget[i].BlendEnable = FALSE;\n      psoDesc.BlendState.RenderTarget[i].SrcBlend = D3D12_BLEND_ONE;\n      psoDesc.BlendState.RenderTarget[i].DestBlend = D3D12_BLEND_ZERO;\n      psoDesc.BlendState.RenderTarget[i].BlendOp = D3D12_BLEND_OP_ADD;\n      psoDesc.BlendState.RenderTarget[i].SrcBlendAlpha = D3D12_BLEND_ONE;\n      psoDesc.BlendState.RenderTarget[i].DestBlendAlpha = D3D12_BLEND_ZERO;\n      psoDesc.BlendState.RenderTarget[i].BlendOpAlpha = D3D12_BLEND_OP_ADD;\n      psoDesc.BlendState.RenderTarget[i].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL;\n    }\n    psoDesc.BlendState.RenderTarget[i].LogicOpEnable = FALSE;\n    psoDesc.BlendState.RenderTarget[i].LogicOp = D3D12_LOGIC_OP_NOOP;\n  }\n\n  // Depth-stencil state\n  const bool hasDepth = (desc.targetDesc.depthAttachmentFormat != TextureFormat::Invalid);\n  const bool hasStencil = (desc.targetDesc.stencilAttachmentFormat != TextureFormat::Invalid);\n\n  if (hasDepth) {\n    psoDesc.DepthStencilState.DepthEnable = TRUE;\n    psoDesc.DepthStencilState.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ALL;\n    psoDesc.DepthStencilState.DepthFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL;\n  } else {\n    psoDesc.DepthStencilState.DepthEnable = FALSE;\n    psoDesc.DepthStencilState.DepthWriteMask = D3D12_DEPTH_WRITE_MASK_ZERO;\n    psoDesc.DepthStencilState.DepthFunc = D3D12_COMPARISON_FUNC_ALWAYS;\n  }\n\n  if (hasStencil) {\n    psoDesc.DepthStencilState.StencilEnable = FALSE;\n    psoDesc.DepthStencilState.StencilReadMask = D3D12_DEFAULT_STENCIL_READ_MASK;\n    psoDesc.DepthStencilState.StencilWriteMask = D3D12_DEFAULT_STENCIL_WRITE_MASK;\n    psoDesc.DepthStencilState.FrontFace.StencilFailOp = D3D12_STENCIL_OP_KEEP;\n    psoDesc.DepthStencilState.FrontFace.StencilDepthFailOp = D3D12_STENCIL_OP_KEEP;\n    psoDesc.DepthStencilState.FrontFace.StencilPassOp = D3D12_STENCIL_OP_KEEP;\n    psoDesc.DepthStencilState.FrontFace.StencilFunc = D3D12_COMPARISON_FUNC_ALWAYS;\n    psoDesc.DepthStencilState.BackFace = psoDesc.DepthStencilState.FrontFace;\n  } else {\n    psoDesc.DepthStencilState.StencilEnable = FALSE;\n  }\n\n  // Render target formats - use the modified formats from desc\n  if (!desc.targetDesc.colorAttachments.empty()) {\n    const UINT n = static_cast<UINT>(std::min<size_t>(desc.targetDesc.colorAttachments.size(),\n                                                      D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT));\n    psoDesc.NumRenderTargets = n;\n    for (UINT i = 0; i < n; ++i) {\n      const auto textureFormat = desc.targetDesc.colorAttachments[i].textureFormat;\n      psoDesc.RTVFormats[i] = textureFormatToDXGIFormat(textureFormat);\n      IGL_D3D12_LOG_VERBOSE(\"  PSO Variant RTVFormats[%u] = %d (IGL format %d)\\n\",\n                            i,\n                            psoDesc.RTVFormats[i],\n                            textureFormat);\n    }\n  } else {\n    psoDesc.NumRenderTargets = 0;\n    for (UINT i = 0; i < D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; ++i) {\n      psoDesc.RTVFormats[i] = DXGI_FORMAT_UNKNOWN;\n    }\n  }\n\n  if (desc.targetDesc.depthAttachmentFormat != TextureFormat::Invalid) {\n    psoDesc.DSVFormat = textureFormatToDXGIFormat(desc.targetDesc.depthAttachmentFormat);\n  } else {\n    psoDesc.DSVFormat = DXGI_FORMAT_UNKNOWN;\n  }\n\n  // Sample settings\n  psoDesc.SampleMask = UINT_MAX;\n  psoDesc.SampleDesc.Count = 1;\n  psoDesc.SampleDesc.Quality = 0;\n\n  // Primitive topology\n  if (desc.topology == igl::PrimitiveType::Point) {\n    psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_POINT;\n  } else if (desc.topology == igl::PrimitiveType::Line ||\n             desc.topology == igl::PrimitiveType::LineStrip) {\n    psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_LINE;\n  } else {\n    psoDesc.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;\n  }\n  psoDesc.IBStripCutValue = D3D12_INDEX_BUFFER_STRIP_CUT_VALUE_DISABLED;\n\n  psoDesc.NodeMask = 0;\n  psoDesc.CachedPSO.pCachedBlob = nullptr;\n  psoDesc.CachedPSO.CachedBlobSizeInBytes = 0;\n  psoDesc.Flags = D3D12_PIPELINE_STATE_FLAG_NONE;\n\n  // Input layout\n  std::vector<D3D12_INPUT_ELEMENT_DESC> inputElements;\n  std::vector<std::string> semanticNames;\n\n  if (desc.vertexInputState) {\n    auto* d3d12VertexInput = static_cast<const VertexInputState*>(desc.vertexInputState.get());\n    const auto& vertexDesc = d3d12VertexInput->getDesc();\n    semanticNames.reserve(vertexDesc.numAttributes);\n\n    for (size_t i = 0; i < vertexDesc.numAttributes; ++i) {\n      const auto& attr = vertexDesc.attributes[i];\n      std::string semanticName;\n      auto toLower = [](std::string s) {\n        for (auto& c : s)\n          c = static_cast<char>(tolower(c));\n        return s;\n      };\n      const std::string nlow = toLower(attr.name);\n      auto startsWith = [&](const char* p) { return nlow.rfind(p, 0) == 0; };\n      auto contains = [&](const char* p) { return nlow.find(p) != std::string::npos; };\n\n      if (startsWith(\"pos\") || startsWith(\"position\") || contains(\"position\")) {\n        semanticName = \"POSITION\";\n      } else if (startsWith(\"col\") || startsWith(\"color\")) {\n        semanticName = \"COLOR\";\n      } else if (startsWith(\"st\") || startsWith(\"uv\") || startsWith(\"tex\") ||\n                 contains(\"texcoord\") || startsWith(\"offset\")) {\n        semanticName = \"TEXCOORD\";\n      } else if (startsWith(\"norm\") || startsWith(\"normal\")) {\n        semanticName = \"NORMAL\";\n      } else if (startsWith(\"tangent\")) {\n        semanticName = \"TANGENT\";\n      } else {\n        if (i == 0)\n          semanticName = \"POSITION\";\n        else if (i == 1)\n          semanticName = \"TEXCOORD\";\n        else\n          semanticName = \"COLOR\";\n      }\n      semanticNames.push_back(semanticName);\n\n      D3D12_INPUT_ELEMENT_DESC element = {};\n      element.SemanticName = semanticNames.back().c_str();\n      element.SemanticIndex = 0;\n      element.AlignedByteOffset = static_cast<UINT>(attr.offset);\n      element.InputSlot = attr.bufferIndex;\n\n      bool isPerInstance = false;\n      if (attr.bufferIndex < vertexDesc.numInputBindings) {\n        isPerInstance = (vertexDesc.inputBindings[attr.bufferIndex].sampleFunction ==\n                         igl::VertexSampleFunction::Instance);\n      }\n      element.InputSlotClass = isPerInstance ? D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA\n                                             : D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA;\n      element.InstanceDataStepRate = isPerInstance ? 1 : 0;\n\n      auto toD3D12Format = [](VertexAttributeFormat fmt) -> DXGI_FORMAT {\n        switch (fmt) {\n        case VertexAttributeFormat::Float1:\n          return DXGI_FORMAT_R32_FLOAT;\n        case VertexAttributeFormat::Float2:\n          return DXGI_FORMAT_R32G32_FLOAT;\n        case VertexAttributeFormat::Float3:\n          return DXGI_FORMAT_R32G32B32_FLOAT;\n        case VertexAttributeFormat::Float4:\n          return DXGI_FORMAT_R32G32B32A32_FLOAT;\n        case VertexAttributeFormat::Byte1:\n          return DXGI_FORMAT_R8_SINT;\n        case VertexAttributeFormat::Byte2:\n          return DXGI_FORMAT_R8G8_SINT;\n        case VertexAttributeFormat::Byte4:\n          return DXGI_FORMAT_R8G8B8A8_SINT;\n        case VertexAttributeFormat::UByte4Norm:\n          return DXGI_FORMAT_R8G8B8A8_UNORM;\n        default:\n          return DXGI_FORMAT_UNKNOWN;\n        }\n      };\n      element.Format = toD3D12Format(attr.format);\n      inputElements.push_back(element);\n    }\n  }\n  psoDesc.InputLayout = {inputElements.data(), static_cast<UINT>(inputElements.size())};\n\n  // Create the pipeline state\n  igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState;\n  HRESULT hr =\n      device->CreateGraphicsPipelineState(&psoDesc, IID_PPV_ARGS(pipelineState.GetAddressOf()));\n  if (FAILED(hr)) {\n    logInfoQueuesForDevice(device, \"CreateGraphicsPipelineState (variant)\");\n    char errorMsg[256];\n    snprintf(errorMsg,\n             sizeof(errorMsg),\n             \"Failed to create PSO variant. HRESULT: 0x%08X, RTV[0]: %d, DSV: %d\",\n             static_cast<unsigned>(hr),\n             static_cast<int>(psoDesc.RTVFormats[0]),\n             static_cast<int>(psoDesc.DSVFormat));\n    IGL_LOG_ERROR(errorMsg);\n    Result::setResult(outResult, Result::Code::RuntimeError, errorMsg);\n    return nullptr;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"Device::createPipelineStateVariant() SUCCESS - PSO=%p\\n\",\n                        pipelineState.Get());\n  Result::setOk(outResult);\n  return pipelineState;\n}\n\n// Shader library and modules.\nstd::unique_ptr<IShaderLibrary> Device::createShaderLibrary(const ShaderLibraryDesc& desc,\n                                                            Result* IGL_NULLABLE outResult) const {\n  IGL_D3D12_LOG_VERBOSE(\"Device::createShaderLibrary() - moduleInfo count=%zu, debugName='%s'\\n\",\n                        desc.moduleInfo.size(),\n                        desc.debugName.c_str());\n\n  if (desc.moduleInfo.empty()) {\n    Result::setResult(\n        outResult, Result::Code::ArgumentInvalid, \"ShaderLibrary requires at least one module\");\n    return nullptr;\n  }\n\n  if (!desc.input.isValid()) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Invalid shader library input\");\n    return nullptr;\n  }\n\n  std::vector<std::shared_ptr<IShaderModule>> modules;\n  modules.reserve(desc.moduleInfo.size());\n\n  if (desc.input.type == ShaderInputType::Binary) {\n    // Binary input: share the same bytecode across all modules (Metal-style)\n    IGL_D3D12_LOG_VERBOSE(\"  Using binary input (%zu bytes) for all modules\\n\", desc.input.length);\n    std::vector<uint8_t> bytecode(desc.input.length);\n    std::memcpy(bytecode.data(), desc.input.data, desc.input.length);\n\n    for (const auto& info : desc.moduleInfo) {\n      // Create a copy of the bytecode for each module\n      std::vector<uint8_t> moduleBytecode = bytecode;\n      modules.push_back(std::make_shared<ShaderModule>(info, std::move(moduleBytecode)));\n    }\n  } else if (desc.input.type == ShaderInputType::String) {\n    // String input: compile each module separately with its own entry point\n    if (!desc.input.source || !*desc.input.source) {\n      Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Shader library source is empty\");\n      return nullptr;\n    }\n\n    IGL_D3D12_LOG_VERBOSE(\"  Compiling %zu modules from string input\\n\", desc.moduleInfo.size());\n\n    for (const auto& info : desc.moduleInfo) {\n      // Create a ShaderModuleDesc for this specific module\n      ShaderModuleDesc moduleDesc;\n      moduleDesc.info = info;\n      moduleDesc.input.type = ShaderInputType::String;\n      moduleDesc.input.source = desc.input.source;\n      moduleDesc.input.options = desc.input.options;\n      moduleDesc.debugName = desc.debugName + \"_\" + info.entryPoint;\n\n      Result moduleResult;\n      auto module = createShaderModule(moduleDesc, &moduleResult);\n      if (!moduleResult.isOk()) {\n        IGL_LOG_ERROR(\"  Failed to compile module '%s': %s\\n\",\n                      info.entryPoint.c_str(),\n                      moduleResult.message.c_str());\n        Result::setResult(outResult, std::move(moduleResult));\n        return nullptr;\n      }\n      modules.push_back(std::move(module));\n    }\n  } else {\n    Result::setResult(\n        outResult, Result::Code::Unsupported, \"Unsupported shader library input type\");\n    return nullptr;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"Device::createShaderLibrary() SUCCESS - created %zu modules\\n\",\n                        modules.size());\n  Result::setOk(outResult);\n  return std::make_unique<ShaderLibrary>(std::move(modules));\n}\n\n// Helper function: Compile HLSL shader using legacy FXC compiler (Shader Model 5.1)\n// This is a fallback when DXC is unavailable or fails\nnamespace {\nResult compileShaderFXC(const char* source,\n                        size_t sourceLength,\n                        const char* entryPoint,\n                        const char* target,\n                        const char* debugName,\n                        UINT compileFlags,\n                        std::vector<uint8_t>& outBytecode,\n                        std::string& outErrors) {\n  IGL_D3D12_LOG_VERBOSE(\"FXC: Compiling shader '%s' with target '%s' (%zu bytes source)\\n\",\n                        debugName ? debugName : \"unnamed\",\n                        target,\n                        sourceLength);\n\n  igl::d3d12::ComPtr<ID3DBlob> bytecode;\n  igl::d3d12::ComPtr<ID3DBlob> errors;\n\n  // D3DCompile is the legacy FXC compiler API\n  // It's always available on Windows 10+ (via d3dcompiler_47.dll)\n  HRESULT hr = D3DCompile(source,\n                          sourceLength,\n                          debugName, // Source name (for error messages)\n                          nullptr, // Defines\n                          D3D_COMPILE_STANDARD_FILE_INCLUDE,\n                          entryPoint,\n                          target,\n                          compileFlags,\n                          0, // Effect flags (not used for shaders)\n                          bytecode.GetAddressOf(),\n                          errors.GetAddressOf());\n\n  if (FAILED(hr)) {\n    std::string errorMsg = \"FXC compilation failed\";\n    if (errors.Get() && errors->GetBufferSize() > 0) {\n      outErrors = std::string(static_cast<const char*>(errors->GetBufferPointer()),\n                              errors->GetBufferSize());\n      errorMsg += \": \" + outErrors;\n      IGL_LOG_ERROR(\"FXC: %s\\n\", outErrors.c_str());\n    }\n    return Result(Result::Code::RuntimeError, errorMsg);\n  }\n\n  // Log warnings if any\n  if (errors.Get() && errors->GetBufferSize() > 0) {\n    outErrors =\n        std::string(static_cast<const char*>(errors->GetBufferPointer()), errors->GetBufferSize());\n    IGL_D3D12_LOG_VERBOSE(\"FXC: Compilation warnings:\\n%s\\n\", outErrors.c_str());\n  }\n\n  // Copy bytecode to output\n  const uint8_t* data = static_cast<const uint8_t*>(bytecode->GetBufferPointer());\n  size_t size = bytecode->GetBufferSize();\n  outBytecode.assign(data, data + size);\n\n  IGL_D3D12_LOG_VERBOSE(\"FXC: Compilation successful (%zu bytes bytecode)\\n\", size);\n\n  return Result();\n}\n} // anonymous namespace\n\n// Note: getShaderTarget() helper moved to Common.h for shared use.\n\nstd::shared_ptr<IShaderModule> Device::createShaderModule(const ShaderModuleDesc& desc,\n                                                          Result* IGL_NULLABLE outResult) const {\n  IGL_D3D12_LOG_VERBOSE(\n      \"Device::createShaderModule() - stage=%d, entryPoint='%s', debugName='%s'\\n\",\n      static_cast<int>(desc.info.stage),\n      desc.info.entryPoint.c_str(),\n      desc.debugName.c_str());\n\n  if (!desc.input.isValid()) {\n    IGL_LOG_ERROR(\"  Invalid shader input!\\n\");\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Invalid shader input\");\n    return nullptr;\n  }\n\n  std::vector<uint8_t> bytecode;\n\n  if (desc.input.type == ShaderInputType::Binary) {\n    // Binary input - copy bytecode directly\n    IGL_D3D12_LOG_VERBOSE(\"  Using binary input (%zu bytes)\\n\", desc.input.length);\n    bytecode.resize(desc.input.length);\n    std::memcpy(bytecode.data(), desc.input.data, desc.input.length);\n  } else if (desc.input.type == ShaderInputType::String) {\n    // String input - compile HLSL at runtime using DXC (DirectX Shader Compiler)\n    // For string input, use desc.input.source (not data) and calculate length\n    if (!desc.input.source) {\n      IGL_LOG_ERROR(\"  Shader source is null!\\n\");\n      Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Shader source is null\");\n      return nullptr;\n    }\n\n    const size_t sourceLength = strlen(desc.input.source);\n    IGL_D3D12_LOG_VERBOSE(\"  Compiling HLSL from string (%zu bytes) using DXC...\\n\", sourceLength);\n\n    // Initialize DXC compiler thread-safely using std::call_once.\n    static DXCCompiler dxcCompiler;\n    static std::once_flag dxcInitFlag;\n    static bool dxcAvailable = false;\n\n    std::call_once(dxcInitFlag, []() {\n      Result initResult = dxcCompiler.initialize();\n      dxcAvailable = initResult.isOk();\n\n      if (dxcAvailable) {\n        IGL_D3D12_LOG_VERBOSE(\n            \"  DXC compiler initialized successfully (Shader Model 6.0+ support)\\n\");\n      } else {\n        IGL_D3D12_LOG_VERBOSE(\"  DXC compiler initialization failed: %s\\n\",\n                              initResult.message.c_str());\n        IGL_D3D12_LOG_VERBOSE(\"  Falling back to FXC (Shader Model 5.1)\\n\");\n      }\n    });\n\n    // Determine shader target based on stage\n    // Use SM 6.0 for DXC, SM 5.1 for FXC fallback\n    const char* targetDXC = nullptr;\n    const char* targetFXC = nullptr;\n    switch (desc.info.stage) {\n    case ShaderStage::Vertex:\n      targetDXC = \"vs_6_0\";\n      targetFXC = \"vs_5_1\";\n      break;\n    case ShaderStage::Fragment:\n      targetDXC = \"ps_6_0\";\n      targetFXC = \"ps_5_1\";\n      break;\n    case ShaderStage::Compute:\n      targetDXC = \"cs_6_0\";\n      targetFXC = \"cs_5_1\";\n      break;\n    default:\n      IGL_LOG_ERROR(\"  Unsupported shader stage!\\n\");\n      Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Unsupported shader stage\");\n      return nullptr;\n    }\n\n    // Compile flags (DXC uses D3DCOMPILE_* flags)\n    UINT compileFlags = D3DCOMPILE_ENABLE_STRICTNESS;\n\n// Enable shader debugging features\n#ifdef _DEBUG\n    compileFlags |= D3DCOMPILE_DEBUG | D3DCOMPILE_SKIP_OPTIMIZATION;\n    IGL_D3D12_LOG_VERBOSE(\n        \"  DEBUG BUILD: Enabling shader debug info and disabling optimizations\\n\");\n#else\n    // In release builds, still enable debug info for PIX captures unless explicitly disabled\n    const char* disableDebugInfo = std::getenv(\"IGL_D3D12_DISABLE_SHADER_DEBUG\");\n    if (!disableDebugInfo || std::string(disableDebugInfo) != \"1\") {\n      compileFlags |= D3DCOMPILE_DEBUG;\n      IGL_D3D12_LOG_VERBOSE(\n          \"  RELEASE BUILD: Enabling shader debug info (disable with \"\n          \"IGL_D3D12_DISABLE_SHADER_DEBUG=1)\\n\");\n    }\n#endif\n\n    // Optional: Enable warnings as errors for stricter validation\n    const char* warningsAsErrors = std::getenv(\"IGL_D3D12_SHADER_WARNINGS_AS_ERRORS\");\n    if (warningsAsErrors && std::string(warningsAsErrors) == \"1\") {\n      compileFlags |= D3DCOMPILE_WARNINGS_ARE_ERRORS;\n      IGL_D3D12_LOG_VERBOSE(\"  Treating shader warnings as errors\\n\");\n    }\n\n    // Try DXC first if available, fallback to FXC if DXC fails or unavailable\n    std::string errors;\n    Result compileResult;\n    bool compiledWithDXC = false;\n\n    if (dxcAvailable) {\n      // Try DXC compilation (Shader Model 6.0)\n      IGL_D3D12_LOG_VERBOSE(\"  Attempting DXC compilation (Shader Model 6.0)...\\n\");\n      compileResult = dxcCompiler.compile(desc.input.source,\n                                          sourceLength,\n                                          desc.info.entryPoint.c_str(),\n                                          targetDXC,\n                                          desc.debugName.c_str(),\n                                          compileFlags,\n                                          bytecode,\n                                          errors);\n\n      if (compileResult.isOk()) {\n        IGL_D3D12_LOG_VERBOSE(\"  DXC shader compiled successfully (%zu bytes DXIL bytecode)\\n\",\n                              bytecode.size());\n        compiledWithDXC = true;\n      } else {\n        IGL_D3D12_LOG_VERBOSE(\"  DXC compilation failed: %s\\n\", compileResult.message.c_str());\n        if (!errors.empty()) {\n          IGL_D3D12_LOG_VERBOSE(\"  DXC errors: %s\\n\", errors.c_str());\n        }\n        IGL_D3D12_LOG_VERBOSE(\"  Falling back to FXC (Shader Model 5.1)...\\n\");\n      }\n    }\n\n    // Use FXC if DXC is unavailable or failed\n    if (!compiledWithDXC) {\n      errors.clear();\n      compileResult = compileShaderFXC(desc.input.source,\n                                       sourceLength,\n                                       desc.info.entryPoint.c_str(),\n                                       targetFXC,\n                                       desc.debugName.c_str(),\n                                       compileFlags,\n                                       bytecode,\n                                       errors);\n\n      if (!compileResult.isOk()) {\n        // Both DXC and FXC failed - report error\n        std::string errorMsg;\n        const char* stageStr = \"\";\n        switch (desc.info.stage) {\n        case ShaderStage::Vertex:\n          stageStr = \"VERTEX\";\n          break;\n        case ShaderStage::Fragment:\n          stageStr = \"FRAGMENT/PIXEL\";\n          break;\n        case ShaderStage::Compute:\n          stageStr = \"COMPUTE\";\n          break;\n        default:\n          stageStr = \"UNKNOWN\";\n          break;\n        }\n\n        errorMsg = \"Shader compilation FAILED (both DXC and FXC)\\n\";\n        errorMsg += \"  Stage: \" + std::string(stageStr) + \"\\n\";\n        errorMsg += \"  Entry Point: \" + desc.info.entryPoint + \"\\n\";\n        errorMsg += \"  Target (FXC): \" + std::string(targetFXC) + \"\\n\";\n        errorMsg += \"  Debug Name: \" + desc.debugName + \"\\n\";\n\n        if (!errors.empty()) {\n          errorMsg += \"\\n=== FXC COMPILER ERRORS ===\\n\";\n          errorMsg += errors;\n          errorMsg += \"\\n===========================\\n\";\n        } else {\n          errorMsg += \"  Error: \" + compileResult.message + \"\\n\";\n        }\n\n        IGL_LOG_ERROR(\"%s\", errorMsg.c_str());\n        Result::setResult(outResult, Result::Code::RuntimeError, errorMsg.c_str());\n        return nullptr;\n      }\n\n      IGL_D3D12_LOG_VERBOSE(\"  FXC shader compiled successfully (%zu bytes bytecode)\\n\",\n                            bytecode.size());\n    }\n  } else {\n    Result::setResult(outResult, Result::Code::Unsupported, \"Unsupported shader input type\");\n    return nullptr;\n  }\n\n  // Create shader module with bytecode\n  auto module = std::make_shared<ShaderModule>(desc.info, std::move(bytecode));\n\n  // Create shader reflection from DXIL bytecode.\n  // This allows runtime queries of shader resources, bindings, and constant buffers.\n  IGL_D3D12_LOG_VERBOSE(\"  Attempting to create shader reflection (bytecode size=%zu)...\\n\",\n                        module->getBytecode().size());\n  if (!module->getBytecode().empty()) {\n    // Create IDxcUtils for reflection\n    igl::d3d12::ComPtr<IDxcUtils> dxcUtils;\n    IGL_D3D12_LOG_VERBOSE(\"    Creating IDxcUtils for reflection...\\n\");\n    auto dxcCreateProc = getDxcCreateInstance();\n    HRESULT hr = dxcCreateProc\n                     ? dxcCreateProc(CLSID_DxcUtils, IID_PPV_ARGS(dxcUtils.GetAddressOf()))\n                     : E_FAIL;\n    IGL_D3D12_LOG_VERBOSE(\"    DxcCreateInstance result: 0x%08X\\n\", hr);\n\n    if (SUCCEEDED(hr)) {\n      // Prepare buffer for reflection\n      DxcBuffer reflectionBuffer = {};\n      reflectionBuffer.Ptr = module->getBytecode().data();\n      reflectionBuffer.Size = module->getBytecode().size();\n      reflectionBuffer.Encoding = 0;\n\n      // Create reflection interface\n      igl::d3d12::ComPtr<ID3D12ShaderReflection> reflection;\n      hr = dxcUtils->CreateReflection(&reflectionBuffer, IID_PPV_ARGS(reflection.GetAddressOf()));\n\n      if (SUCCEEDED(hr)) {\n        module->setReflection(reflection);\n        IGL_D3D12_LOG_VERBOSE(\"  Shader reflection created successfully (DXIL reflection)\\n\");\n\n        // Emit a concise reflection dump by default to help diagnose\n        // resource-binding issues. This is intentionally always enabled\n        // (in debug builds) so that D3D12 binding problems are visible\n        // without extra flags.\n        D3D12_SHADER_DESC shaderDesc = {};\n        if (SUCCEEDED(reflection->GetDesc(&shaderDesc))) {\n          const char* stageStr = \"UNKNOWN\";\n          switch (desc.info.stage) {\n          case ShaderStage::Vertex:\n            stageStr = \"VERTEX\";\n            break;\n          case ShaderStage::Fragment:\n            stageStr = \"FRAGMENT/PIXEL\";\n            break;\n          case ShaderStage::Compute:\n            stageStr = \"COMPUTE\";\n            break;\n          default:\n            break;\n          }\n\n          IGL_LOG_INFO(\n              \"\\n=== SHADER REFLECTION (%s - %s) ===\\n\", stageStr, desc.info.entryPoint.c_str());\n          IGL_LOG_INFO(\"  Bound Resources: %u\\n\", shaderDesc.BoundResources);\n          for (UINT i = 0; i < shaderDesc.BoundResources; ++i) {\n            D3D12_SHADER_INPUT_BIND_DESC bindDesc = {};\n            if (SUCCEEDED(reflection->GetResourceBindingDesc(i, &bindDesc))) {\n              const char* typeStr = \"Unknown\";\n              const char* registerPrefix = \"?\";\n              switch (bindDesc.Type) {\n              case D3D_SIT_CBUFFER:\n                typeStr = \"ConstantBuffer\";\n                registerPrefix = \"b\";\n                break;\n              case D3D_SIT_TBUFFER:\n                typeStr = \"TextureBuffer\";\n                registerPrefix = \"t\";\n                break;\n              case D3D_SIT_TEXTURE:\n                typeStr = \"Texture\";\n                registerPrefix = \"t\";\n                break;\n              case D3D_SIT_SAMPLER:\n                typeStr = \"Sampler\";\n                registerPrefix = \"s\";\n                break;\n              case D3D_SIT_UAV_RWTYPED:\n                typeStr = \"RWTexture\";\n                registerPrefix = \"u\";\n                break;\n              case D3D_SIT_STRUCTURED:\n                typeStr = \"StructuredBuffer\";\n                registerPrefix = \"t\";\n                break;\n              case D3D_SIT_UAV_RWSTRUCTURED:\n                typeStr = \"RWStructuredBuffer\";\n                registerPrefix = \"u\";\n                break;\n              case D3D_SIT_BYTEADDRESS:\n                typeStr = \"ByteAddressBuffer\";\n                registerPrefix = \"t\";\n                break;\n              case D3D_SIT_UAV_RWBYTEADDRESS:\n                typeStr = \"RWByteAddressBuffer\";\n                registerPrefix = \"u\";\n                break;\n              default:\n                break;\n              }\n\n              IGL_LOG_INFO(\"    [%u] %s '%s' at %s%u (space %u)\\n\",\n                           i,\n                           typeStr,\n                           bindDesc.Name,\n                           registerPrefix,\n                           bindDesc.BindPoint,\n                           bindDesc.Space);\n            }\n          }\n\n          IGL_LOG_INFO(\"  Constant Buffers: %u\\n\", shaderDesc.ConstantBuffers);\n          for (UINT i = 0; i < shaderDesc.ConstantBuffers; ++i) {\n            ID3D12ShaderReflectionConstantBuffer* cb = reflection->GetConstantBufferByIndex(i);\n            D3D12_SHADER_BUFFER_DESC cbDesc = {};\n            if (cb && SUCCEEDED(cb->GetDesc(&cbDesc))) {\n              IGL_LOG_INFO(\"    [%u] %s: %u bytes, %u variables\\n\",\n                           i,\n                           cbDesc.Name,\n                           cbDesc.Size,\n                           cbDesc.Variables);\n            }\n          }\n\n          // Log input and output signature parameters to help diagnose\n          // pipeline state creation issues (semantic/mask mismatches).\n          IGL_LOG_INFO(\"  Input Parameters: %u\\n\", shaderDesc.InputParameters);\n          for (UINT i = 0; i < shaderDesc.InputParameters; ++i) {\n            D3D12_SIGNATURE_PARAMETER_DESC p = {};\n            if (SUCCEEDED(reflection->GetInputParameterDesc(i, &p))) {\n              IGL_LOG_INFO(\"    [In %u] %s%u: reg=%u, mask=0x%02X\\n\",\n                           i,\n                           p.SemanticName ? p.SemanticName : \"\",\n                           p.SemanticIndex,\n                           p.Register,\n                           p.Mask);\n            }\n          }\n\n          IGL_LOG_INFO(\"  Output Parameters: %u\\n\", shaderDesc.OutputParameters);\n          for (UINT i = 0; i < shaderDesc.OutputParameters; ++i) {\n            D3D12_SIGNATURE_PARAMETER_DESC p = {};\n            if (SUCCEEDED(reflection->GetOutputParameterDesc(i, &p))) {\n              IGL_LOG_INFO(\"    [Out %u] %s%u: reg=%u, mask=0x%02X\\n\",\n                           i,\n                           p.SemanticName ? p.SemanticName : \"\",\n                           p.SemanticIndex,\n                           p.Register,\n                           p.Mask);\n            }\n          }\n          IGL_LOG_INFO(\"================================\\n\\n\");\n        }\n      } else {\n        IGL_D3D12_LOG_VERBOSE(\n            \"  Failed to create DXIL reflection: 0x%08X, trying D3DReflect for DXBC bytecode...\\n\",\n            hr);\n\n        // Fallback to D3DReflect for DXBC bytecode (FXC-compiled shaders)\n        hr = D3DReflect(module->getBytecode().data(),\n                        module->getBytecode().size(),\n                        IID_PPV_ARGS(reflection.GetAddressOf()));\n\n        if (SUCCEEDED(hr)) {\n          module->setReflection(reflection);\n          IGL_D3D12_LOG_VERBOSE(\"  Shader reflection created successfully (DXBC reflection)\\n\");\n\n          // Emit reflection dump for DXBC shaders as well\n          D3D12_SHADER_DESC shaderDesc = {};\n          if (SUCCEEDED(reflection->GetDesc(&shaderDesc))) {\n            const char* stageStr = \"UNKNOWN\";\n            switch (desc.info.stage) {\n            case ShaderStage::Vertex:\n              stageStr = \"VERTEX\";\n              break;\n            case ShaderStage::Fragment:\n              stageStr = \"FRAGMENT/PIXEL\";\n              break;\n            case ShaderStage::Compute:\n              stageStr = \"COMPUTE\";\n              break;\n            default:\n              break;\n            }\n\n            IGL_LOG_INFO(\"\\n=== SHADER REFLECTION (%s - %s) [DXBC] ===\\n\",\n                         stageStr,\n                         desc.info.entryPoint.c_str());\n            IGL_LOG_INFO(\"  Bound Resources: %u\\n\", shaderDesc.BoundResources);\n            for (UINT i = 0; i < shaderDesc.BoundResources; ++i) {\n              D3D12_SHADER_INPUT_BIND_DESC bindDesc = {};\n              if (SUCCEEDED(reflection->GetResourceBindingDesc(i, &bindDesc))) {\n                const char* typeStr = \"Unknown\";\n                const char* registerPrefix = \"?\";\n                switch (bindDesc.Type) {\n                case D3D_SIT_CBUFFER:\n                  typeStr = \"ConstantBuffer\";\n                  registerPrefix = \"b\";\n                  break;\n                case D3D_SIT_TBUFFER:\n                  typeStr = \"TextureBuffer\";\n                  registerPrefix = \"t\";\n                  break;\n                case D3D_SIT_TEXTURE:\n                  typeStr = \"Texture\";\n                  registerPrefix = \"t\";\n                  break;\n                case D3D_SIT_SAMPLER:\n                  typeStr = \"Sampler\";\n                  registerPrefix = \"s\";\n                  break;\n                case D3D_SIT_UAV_RWTYPED:\n                  typeStr = \"RWTexture/UAV\";\n                  registerPrefix = \"u\";\n                  break;\n                default:\n                  break;\n                }\n\n                IGL_LOG_INFO(\"    [%u] %s '%s' at %s%u (space %u)\\n\",\n                             i,\n                             typeStr,\n                             bindDesc.Name,\n                             registerPrefix,\n                             bindDesc.BindPoint,\n                             bindDesc.Space);\n              }\n            }\n            IGL_LOG_INFO(\"================================\\n\\n\");\n          }\n        } else {\n          IGL_D3D12_LOG_VERBOSE(\n              \"  Failed to create reflection with both DXC and D3DReflect: 0x%08X (non-fatal)\\n\",\n              hr);\n        }\n      }\n    } else {\n      IGL_D3D12_LOG_VERBOSE(\"  Failed to create DXC utils for reflection: 0x%08X (non-fatal)\\n\",\n                            hr);\n    }\n  }\n\n  Result::setOk(outResult);\n  return module;\n}\n\n// Framebuffer\nstd::shared_ptr<IFramebuffer> Device::createFramebuffer(const FramebufferDesc& desc,\n                                                        Result* IGL_NULLABLE outResult) {\n  Result::setOk(outResult);\n  return std::make_shared<Framebuffer>(desc);\n}\n\nbase::IFramebufferInterop* IGL_NULLABLE\nDevice::createFramebufferInterop(const base::FramebufferInteropDesc& desc) {\n  auto framebuffer = createFramebufferFromBaseDesc(desc);\n  if (!framebuffer) {\n    return nullptr;\n  }\n  return new (std::nothrow) FramebufferWrapper(std::move(framebuffer));\n}\n\n// Capabilities\nconst IPlatformDevice& Device::getPlatformDevice() const noexcept {\n  return *platformDevice_;\n}\n\nbool Device::hasFeature(DeviceFeatures feature) const {\n  IGL_D3D12_LOG_VERBOSE(\"[D3D12] hasFeature query: %d\\n\", static_cast<int>(feature));\n  switch (feature) {\n  // Expected true in tests (non-OpenGL branch)\n  case DeviceFeatures::CopyBuffer:\n  case DeviceFeatures::DrawInstanced:\n  case DeviceFeatures::DrawFirstIndexFirstVertex: // D3D12 DrawIndexedInstanced supports first\n                                                  // index/vertex\n  case DeviceFeatures::SRGB:\n  case DeviceFeatures::SRGBSwapchain:\n  case DeviceFeatures::UniformBlocks:\n  case DeviceFeatures::StandardDerivative: // ddx/ddy available in HLSL\n  case DeviceFeatures::TextureFloat:\n  case DeviceFeatures::TextureHalfFloat:\n  case DeviceFeatures::ReadWriteFramebuffer:\n  case DeviceFeatures::TextureNotPot:\n  case DeviceFeatures::ShaderTextureLod:\n  case DeviceFeatures::ExplicitBinding:\n  case DeviceFeatures::MapBufferRange: // UPLOAD/READBACK buffers support mapping\n  case DeviceFeatures::ShaderLibrary: // Support shader libraries in D3D12\n  case DeviceFeatures::Texture3D: // D3D12 supports 3D textures (DIMENSION_TEXTURE3D).\n  case DeviceFeatures::TexturePartialMipChain: // D3D12 supports partial mip chains via custom SRVs.\n  case DeviceFeatures::TextureViews: // D3D12 supports createTextureView() via shared resources.\n    return true;\n  case DeviceFeatures::MultipleRenderTargets:\n    return true; // D3D12 supports up to 8 simultaneous render targets.\n  case DeviceFeatures::Compute:\n    return true; // Compute shaders now supported with compute pipeline and dispatch\n  case DeviceFeatures::Texture2DArray:\n    IGL_D3D12_LOG_VERBOSE(\"[D3D12] hasFeature(Texture2DArray) returning TRUE\\n\");\n    return true; // D3D12 supports 2D texture arrays via DepthOrArraySize in D3D12_RESOURCE_DESC\n  case DeviceFeatures::PushConstants:\n    return true; // Implemented via root constants at parameter 0 (shader register b2)\n  case DeviceFeatures::SRGBWriteControl:\n  case DeviceFeatures::TextureArrayExt:\n  case DeviceFeatures::TextureExternalImage:\n  case DeviceFeatures::Multiview:\n  case DeviceFeatures::BindBytes: // Not supported - use uniform buffers instead\n  case DeviceFeatures::BindUniform:\n  case DeviceFeatures::BufferRing:\n  case DeviceFeatures::BufferNoCopy:\n  case DeviceFeatures::BufferDeviceAddress:\n  case DeviceFeatures::ShaderTextureLodExt:\n  case DeviceFeatures::StandardDerivativeExt:\n  case DeviceFeatures::SamplerMinMaxLod:\n  case DeviceFeatures::DrawIndexedIndirect:\n  case DeviceFeatures::ExplicitBindingExt:\n  case DeviceFeatures::TextureFormatRG:\n  case DeviceFeatures::ValidationLayersEnabled:\n  case DeviceFeatures::ExternalMemoryObjects:\n    return false;\n  default:\n    return false;\n  }\n}\n\nbool Device::hasRequirement(DeviceRequirement /*requirement*/) const {\n  return false;\n}\n\nbool Device::getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const {\n  // Compile-time validation: IGL constant must not exceed D3D12 API limit\n  static_assert(IGL_VERTEX_ATTRIBUTES_MAX <= D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT,\n                \"IGL_VERTEX_ATTRIBUTES_MAX exceeds D3D12 vertex input limit\");\n\n  switch (featureLimits) {\n  case DeviceFeatureLimits::BufferAlignment:\n    // D3D12 buffer alignment requirements vary by buffer type:\n    // - Constant buffers: 256 bytes (D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT)\n    // - Storage buffers: 4 bytes (see ShaderStorageBufferOffsetAlignment)\n    // - Vertex/index buffers: 4 bytes (DWORD alignment)\n    // This returns the most restrictive alignment (constant buffers).\n    // See: https://learn.microsoft.com/en-us/windows/win32/direct3d12/constants\n    result = D3D12_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT; // 256 bytes\n    return true;\n\n  case DeviceFeatureLimits::BufferNoCopyAlignment:\n    // D3D12 doesn't support no-copy buffers in the same way as Metal\n    result = 0;\n    return true;\n\n  case DeviceFeatureLimits::MaxBindBytesBytes:\n    // bind-bytes (like Metal setVertexBytes) not supported on D3D12\n    result = 0;\n    return true;\n\n  case DeviceFeatureLimits::MaxCubeMapDimension:\n    // D3D12 cube map dimension limits (Feature Level 11_0+: 16384)\n    result = 16384; // D3D12_REQ_TEXTURECUBE_DIMENSION\n    return true;\n\n  case DeviceFeatureLimits::MaxFragmentUniformVectors:\n    // D3D12 allows 64KB constant buffers, each vec4 is 16 bytes\n    // 64KB / 16 bytes = 4096 vec4s\n    result = 4096;\n    return true;\n\n  case DeviceFeatureLimits::MaxMultisampleCount: {\n    // Query the maximum MSAA sample count supported by the device.\n    // Test common sample counts (1, 2, 4, 8, 16) for RGBA8 (most widely supported format).\n    // This provides a conservative estimate; actual support varies by format.\n    // Applications should use getMaxMSAASamplesForFormat() for format-specific queries.\n    auto* device = ctx_->getDevice();\n    if (!device) {\n      result = 1; // No MSAA support if device unavailable\n      return false;\n    }\n\n    // Use RGBA8 as reference format (most widely supported)\n    const DXGI_FORMAT referenceFormat = DXGI_FORMAT_R8G8B8A8_UNORM;\n\n    // Test sample counts in descending order: 16, 8, 4, 2, 1\n    const uint32_t testCounts[] = {16, 8, 4, 2, 1};\n\n    for (uint32_t sampleCount : testCounts) {\n      D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS msqLevels = {};\n      msqLevels.Format = referenceFormat;\n      msqLevels.SampleCount = sampleCount;\n      msqLevels.Flags = D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE;\n\n      HRESULT hr = device->CheckFeatureSupport(\n          D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS, &msqLevels, sizeof(msqLevels));\n\n      if (SUCCEEDED(hr) && msqLevels.NumQualityLevels > 0) {\n        result = sampleCount;\n        return true;\n      }\n    }\n\n    // Fallback to 1x (no MSAA)\n    result = 1;\n    return true;\n  }\n\n  case DeviceFeatureLimits::MaxPushConstantBytes:\n    // D3D12 root constants: each root constant is 4 bytes (DWORD)\n    // D3D12 root signature limit is 64 DWORDs total, but not all for constants\n    // Conservative limit: 256 bytes (64 DWORDs)\n    result = 256;\n    return true;\n\n  case DeviceFeatureLimits::MaxTextureDimension1D2D:\n    // D3D12 Feature Level 11_0+: 16384 for 1D and 2D textures\n    // Feature Level 12+: still 16384\n    result = 16384; // D3D12_REQ_TEXTURE2D_U_OR_V_DIMENSION\n    return true;\n\n  case DeviceFeatureLimits::MaxStorageBufferBytes:\n    // D3D12 structured buffer max size: 128MB (2^27 bytes)\n    // UAV structured buffer limit\n    result = 128 * 1024 * 1024; // 128 MB\n    return true;\n\n  case DeviceFeatureLimits::MaxUniformBufferBytes:\n    // D3D12 constant buffer size limit: 64KB (65536 bytes)\n    result = 64 * 1024; // D3D12_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * 16\n    return true;\n\n  case DeviceFeatureLimits::MaxVertexUniformVectors:\n    // Same as fragment uniform vectors for D3D12\n    // 64KB / 16 bytes per vec4 = 4096 vec4s\n    result = 4096;\n    return true;\n\n  case DeviceFeatureLimits::PushConstantsAlignment:\n    // Root constants are aligned to DWORD (4 bytes)\n    result = 4;\n    return true;\n\n  case DeviceFeatureLimits::ShaderStorageBufferOffsetAlignment:\n    // D3D12 storage buffer (UAV/structured buffer) alignment.\n    // D3D12 structured buffers require 4-byte (DWORD) alignment, unlike constant buffers (256\n    // bytes) This matches Vulkan's typical minStorageBufferOffsetAlignment (often 16-64 bytes,\n    // device-dependent) See: https://learn.microsoft.com/en-us/windows/win32/direct3d12/alignment\n    result = 4;\n    return true;\n\n  case DeviceFeatureLimits::MaxTextureDimension3D:\n    // D3D12 3D texture dimension limits (Feature Level 11_0+: 2048)\n    // Feature Level 10_0+: 2048\n    result = 2048; // D3D12_REQ_TEXTURE3D_U_V_OR_W_DIMENSION\n    return true;\n\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeX:\n    // D3D12 compute shader thread group limits\n    result = D3D12_CS_THREAD_GROUP_MAX_X; // 1024\n    return true;\n\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeY:\n    // D3D12 compute shader thread group limits\n    result = D3D12_CS_THREAD_GROUP_MAX_Y; // 1024\n    return true;\n\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeZ:\n    // D3D12 compute shader thread group limits\n    result = D3D12_CS_THREAD_GROUP_MAX_Z; // 64\n    return true;\n\n  case DeviceFeatureLimits::MaxComputeWorkGroupInvocations:\n    // D3D12 max threads per thread group\n    result = D3D12_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP; // 1024\n    return true;\n\n  case DeviceFeatureLimits::MaxVertexInputAttributes:\n    // D3D12 max vertex input slots (32 per D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT)\n    result = D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT; // 32\n    IGL_DEBUG_ASSERT(IGL_VERTEX_ATTRIBUTES_MAX <= result,\n                     \"IGL_VERTEX_ATTRIBUTES_MAX exceeds D3D12 reported limit\");\n    return true;\n\n  case DeviceFeatureLimits::MaxColorAttachments:\n    // D3D12 max simultaneous render targets\n    result = D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT; // 8\n    return true;\n\n  // Descriptor heap size limits chosen for cross-platform compatibility.\n  case DeviceFeatureLimits::MaxDescriptorHeapCbvSrvUav:\n    // D3D12 shader-visible CBV/SRV/UAV descriptor heap size\n    // Hardware limit: 1,000,000+ descriptors\n    // Current implementation uses 4096 descriptors (see DescriptorHeapManager::Sizes)\n    // This reports the configured limit, not the hardware maximum\n    result = 4096;\n    return true;\n\n  case DeviceFeatureLimits::MaxDescriptorHeapSamplers:\n    // D3D12 shader-visible sampler descriptor heap size\n    // Hardware limit: 2048 descriptors (D3D12 spec limit for sampler heaps)\n    // Current implementation uses 2048 descriptors (see DescriptorHeapManager::Sizes)\n    result = 2048;\n    return true;\n\n  case DeviceFeatureLimits::MaxDescriptorHeapRtvs:\n    // D3D12 CPU-visible RTV descriptor heap size\n    // Hardware limit: 16,384 descriptors\n    // Current implementation uses 256 descriptors (see DescriptorHeapManager::Sizes)\n    result = 256;\n    return true;\n\n  case DeviceFeatureLimits::MaxDescriptorHeapDsvs:\n    // D3D12 CPU-visible DSV descriptor heap size\n    // Hardware limit: 16,384 descriptors\n    // Current implementation uses 128 descriptors (see DescriptorHeapManager::Sizes)\n    result = 128;\n    return true;\n  }\n\n  // Should never reach here - all cases handled\n  result = 0;\n  return false;\n}\n\nICapabilities::TextureFormatCapabilities Device::getTextureFormatCapabilities(\n    TextureFormat format) const {\n  using CapBits = ICapabilities::TextureFormatCapabilityBits;\n  uint8_t caps = 0;\n\n  // Depth formats: guarantee they are sampleable in shaders for tests\n  switch (format) {\n  case TextureFormat::Z_UNorm16:\n  case TextureFormat::Z_UNorm24:\n  case TextureFormat::Z_UNorm32:\n  case TextureFormat::S8_UInt_Z24_UNorm:\n  case TextureFormat::S8_UInt_Z32_UNorm:\n    caps |= CapBits::Sampled;\n    return caps;\n  default:\n    break;\n  }\n\n  // D3D12 does not support 3-channel RGB formats natively - they are mapped to RGBA formats\n  // However, 3-channel formats cannot be used as render targets because:\n  // 1. RGB_F16/RGB_F32 map to RGBA equivalents, but D3D12 expects RGBA data layout for RT\n  // 2. Rendering to these formats would require alpha channel handling that IGL doesn't expose\n  // 3. Other backends (OpenGL, Metal) also don't support RGB formats as render targets\n  // See also: OpenGL's DeviceFeatureSet.cpp line 1271 \"RGB floating point textures are NOT\n  // renderable\"\n  const bool isThreeChannelRgbFormat = format == TextureFormat::RGB_F16 ||\n                                       format == TextureFormat::RGB_F32;\n\n  auto* dev = ctx_->getDevice();\n  if (!dev) {\n    return 0;\n  }\n\n  const DXGI_FORMAT dxgi = textureFormatToDXGIFormat(format);\n  if (dxgi == DXGI_FORMAT_UNKNOWN) {\n    return 0;\n  }\n\n  D3D12_FEATURE_DATA_FORMAT_SUPPORT fs = {};\n  fs.Format = dxgi;\n  if (FAILED(dev->CheckFeatureSupport(D3D12_FEATURE_FORMAT_SUPPORT, &fs, sizeof(fs)))) {\n    return 0;\n  }\n\n  const auto s1 = fs.Support1;\n  const auto s2 = fs.Support2;\n\n  const auto props = TextureFormatProperties::fromTextureFormat(format);\n\n  // Enhanced D3D12 format capability mapping.\n  // Map D3D12_FORMAT_SUPPORT1 flags to IGL capabilities\n\n  // Sampled: Can be used with texture sampling instructions\n  if (s1 & D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE) {\n    caps |= CapBits::Sampled;\n  }\n\n  // SampledFiltered: Supports linear filtering (only for non-integer color formats)\n  // Also check D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON for depth formats\n  if (props.hasColor() && !props.isInteger()) {\n    if (s1 & D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE) {\n      caps |= CapBits::SampledFiltered;\n    }\n  } else if (props.hasDepth() || props.hasStencil()) {\n    // Depth formats: check for comparison filtering support\n    if (s1 & D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON) {\n      caps |= CapBits::SampledFiltered;\n    }\n  }\n\n  // Attachment: Can be used as render target or depth/stencil attachment\n  // Also consider D3D12_FORMAT_SUPPORT1_BLENDABLE and\n  // D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET Don't report Attachment capability for 3-channel\n  // RGB formats even if D3D12 reports the underlying RGBA format as renderable - using them as\n  // render targets causes device removal\n  if (!isThreeChannelRgbFormat) {\n    if ((s1 & D3D12_FORMAT_SUPPORT1_RENDER_TARGET) || (s1 & D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL)) {\n      caps |= CapBits::Attachment;\n    }\n  }\n\n  // Storage: Can be used with unordered access (UAV)\n  // Check for typed UAV load/store, or atomic operations\n  // Enhanced UAV capability detection.\n  const bool hasUAVTypedOps = (s2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD) &&\n                              (s2 & D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE);\n  const bool hasUAVAtomicOps =\n      (s2 & D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD) ||\n      (s2 & D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS) ||\n      (s2 & D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE) ||\n      (s2 & D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE) ||\n      (s2 & D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX) ||\n      (s2 & D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX);\n\n  if (hasFeature(DeviceFeatures::Compute) && (hasUAVTypedOps || hasUAVAtomicOps)) {\n    caps |= CapBits::Storage;\n  }\n\n  // SampledAttachment: Can be both sampled and used as attachment\n  if ((caps & CapBits::Sampled) && (caps & CapBits::Attachment)) {\n    caps |= CapBits::SampledAttachment;\n  }\n\n#if IGL_DEBUG || defined(IGL_FORCE_ENABLE_LOGS)\n  // Debug logging for unmapped D3D12 capabilities.\n  // This helps identify format capabilities that D3D12 supports but IGL doesn't expose\n  uint32_t unmappedS1 = 0;\n  uint32_t unmappedS2 = 0;\n\n  // Check unmapped D3D12_FORMAT_SUPPORT1 flags\n  const uint32_t mappedS1 =\n      D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE | D3D12_FORMAT_SUPPORT1_SHADER_SAMPLE_COMPARISON |\n      D3D12_FORMAT_SUPPORT1_RENDER_TARGET | D3D12_FORMAT_SUPPORT1_DEPTH_STENCIL |\n      D3D12_FORMAT_SUPPORT1_BLENDABLE | D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RENDERTARGET;\n  unmappedS1 = s1 & ~mappedS1;\n\n  // Check unmapped D3D12_FORMAT_SUPPORT2 flags\n  const uint32_t mappedS2 =\n      D3D12_FORMAT_SUPPORT2_UAV_TYPED_LOAD | D3D12_FORMAT_SUPPORT2_UAV_TYPED_STORE |\n      D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_ADD | D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_BITWISE_OPS |\n      D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_COMPARE_STORE_OR_COMPARE_EXCHANGE |\n      D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_EXCHANGE |\n      D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_SIGNED_MIN_OR_MAX |\n      D3D12_FORMAT_SUPPORT2_UAV_ATOMIC_UNSIGNED_MIN_OR_MAX;\n  unmappedS2 = s2 & ~mappedS2;\n\n  if (unmappedS1 != 0 || unmappedS2 != 0) {\n    IGL_D3D12_LOG_VERBOSE(\"Format %d (DXGI %d) has unmapped D3D12 capabilities:\\n\",\n                          static_cast<int>(format),\n                          static_cast<int>(dxgi));\n    if (unmappedS1 != 0) {\n      IGL_D3D12_LOG_VERBOSE(\"  Support1 unmapped flags: 0x%08X\\n\", unmappedS1);\n      // Log specific unmapped flags that might be useful\n      // Note: Some flags may not be defined in older Windows SDK versions\n      const uint32_t MIP_AUTOGEN = 0x800; // D3D12_FORMAT_SUPPORT1_MIP_AUTOGEN\n      const uint32_t MULTISAMPLE_RESOLVE = 0x40; // D3D12_FORMAT_SUPPORT1_MULTISAMPLE_RESOLVE\n      const uint32_t MULTISAMPLE_LOAD = 0x100000; // D3D12_FORMAT_SUPPORT1_MULTISAMPLE_LOAD\n\n      if (unmappedS1 & MIP_AUTOGEN) {\n        IGL_D3D12_LOG_VERBOSE(\"    - MIP_AUTOGEN (0x800)\\n\");\n      }\n      if (unmappedS1 & MULTISAMPLE_RESOLVE) {\n        IGL_D3D12_LOG_VERBOSE(\"    - MULTISAMPLE_RESOLVE (0x40)\\n\");\n      }\n      if (unmappedS1 & MULTISAMPLE_LOAD) {\n        IGL_D3D12_LOG_VERBOSE(\"    - MULTISAMPLE_LOAD (0x100000)\\n\");\n      }\n    }\n    if (unmappedS2 != 0) {\n      IGL_D3D12_LOG_VERBOSE(\"  Support2 unmapped flags: 0x%08X\\n\", unmappedS2);\n      const uint32_t OUTPUT_MERGER_LOGIC_OP = 0x2; // D3D12_FORMAT_SUPPORT2_OUTPUT_MERGER_LOGIC_OP\n      if (unmappedS2 & OUTPUT_MERGER_LOGIC_OP) {\n        IGL_D3D12_LOG_VERBOSE(\"    - OUTPUT_MERGER_LOGIC_OP (0x2)\\n\");\n      }\n    }\n  }\n#endif\n\n  return caps;\n}\n\nShaderVersion Device::getShaderVersion() const {\n  // Report HLSL SM 6.0 if DXC is available; otherwise SM 5.0 (D3DCompile fallback)\n  bool dxcAvailable = false;\n#if IGL_PLATFORM_WINDOWS\n  HMODULE h = GetModuleHandleA(\"dxcompiler.dll\");\n  if (!h) {\n    h = LoadLibraryA(\"dxcompiler.dll\");\n  }\n  if (h) {\n    FARPROC proc = GetProcAddress(h, \"DxcCreateInstance\");\n    dxcAvailable = (proc != nullptr);\n  }\n#endif\n  if (dxcAvailable) {\n    return ShaderVersion{ShaderFamily::Hlsl, 6, 0, 0};\n  }\n  return ShaderVersion{ShaderFamily::Hlsl, 5, 0, 0};\n}\n\nBackendVersion Device::getBackendVersion() const {\n  // Query highest supported feature level to report backend version\n  auto* dev = ctx_->getDevice();\n  if (!dev) {\n    return BackendVersion{BackendFlavor::D3D12, 0, 0};\n  }\n\n  static const D3D_FEATURE_LEVEL kLevels[] = {\n      D3D_FEATURE_LEVEL_12_2,\n      D3D_FEATURE_LEVEL_12_1,\n      D3D_FEATURE_LEVEL_12_0,\n      D3D_FEATURE_LEVEL_11_1,\n      D3D_FEATURE_LEVEL_11_0,\n  };\n  D3D12_FEATURE_DATA_FEATURE_LEVELS fls = {};\n  fls.NumFeatureLevels = static_cast<UINT>(sizeof(kLevels) / sizeof(kLevels[0]));\n  fls.pFeatureLevelsRequested = kLevels;\n  fls.MaxSupportedFeatureLevel = D3D_FEATURE_LEVEL_11_0;\n\n  if (SUCCEEDED(dev->CheckFeatureSupport(D3D12_FEATURE_FEATURE_LEVELS, &fls, sizeof(fls)))) {\n    switch (fls.MaxSupportedFeatureLevel) {\n    case D3D_FEATURE_LEVEL_12_2:\n      return BackendVersion{BackendFlavor::D3D12, 12, 2};\n    case D3D_FEATURE_LEVEL_12_1:\n      return BackendVersion{BackendFlavor::D3D12, 12, 1};\n    case D3D_FEATURE_LEVEL_12_0:\n      return BackendVersion{BackendFlavor::D3D12, 12, 0};\n    case D3D_FEATURE_LEVEL_11_1:\n      return BackendVersion{BackendFlavor::D3D12, 11, 1};\n    case D3D_FEATURE_LEVEL_11_0:\n    default:\n      return BackendVersion{BackendFlavor::D3D12, 11, 0};\n    }\n  }\n\n  // Fallback if CheckFeatureSupport fails\n  return BackendVersion{BackendFlavor::D3D12, 11, 0};\n}\n\nBackendType Device::getBackendType() const {\n  return BackendType::D3D12;\n}\n\n// Get sampler cache statistics for telemetry and debugging.\nSamplerCacheStats Device::getSamplerCacheStats() const {\n  return samplerCache_.getStats();\n}\n\n// Query maximum MSAA sample count for a specific format.\nuint32_t Device::getMaxMSAASamplesForFormat(TextureFormat format) const {\n  auto* device = ctx_->getDevice();\n  if (!device) {\n    return 1;\n  }\n\n  // Convert IGL format to DXGI format\n  const DXGI_FORMAT dxgiFormat = textureFormatToDXGIFormat(format);\n  if (dxgiFormat == DXGI_FORMAT_UNKNOWN) {\n    IGL_LOG_ERROR(\"Device::getMaxMSAASamplesForFormat: Unknown format %d\\n\",\n                  static_cast<int>(format));\n    return 1;\n  }\n\n  // Test sample counts in descending order: 16, 8, 4, 2, 1\n  const uint32_t testCounts[] = {16, 8, 4, 2, 1};\n\n  for (uint32_t sampleCount : testCounts) {\n    D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS msqLevels = {};\n    msqLevels.Format = dxgiFormat;\n    msqLevels.SampleCount = sampleCount;\n    msqLevels.Flags = D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE;\n\n    HRESULT hr = device->CheckFeatureSupport(\n        D3D12_FEATURE_MULTISAMPLE_QUALITY_LEVELS, &msqLevels, sizeof(msqLevels));\n\n    if (SUCCEEDED(hr) && msqLevels.NumQualityLevels > 0) {\n      return sampleCount;\n    }\n  }\n\n  return 1; // No MSAA support\n}\n\nvoid Device::processCompletedUploads() {\n  allocatorPool_.processCompletedUploads();\n}\n\nResult Device::waitForUploadFence(UINT64 fenceValue) const {\n  return allocatorPool_.waitForUploadFence(*this, fenceValue);\n}\n\nvoid Device::trackUploadBuffer(igl::d3d12::ComPtr<ID3D12Resource> buffer, UINT64 fenceValue) {\n  allocatorPool_.trackUploadBuffer(std::move(buffer), fenceValue);\n}\n\nigl::d3d12::ComPtr<ID3D12CommandAllocator> Device::getUploadCommandAllocator() {\n  return allocatorPool_.getUploadCommandAllocator(*ctx_);\n}\n\nvoid Device::returnUploadCommandAllocator(igl::d3d12::ComPtr<ID3D12CommandAllocator> allocator,\n                                          UINT64 fenceValue) {\n  allocatorPool_.returnUploadCommandAllocator(std::move(allocator), fenceValue);\n}\n\nsize_t Device::getCurrentDrawCount() const {\n  return telemetry_.getDrawCount();\n}\n\nsize_t Device::getShaderCompilationCount() const {\n  return telemetry_.getShaderCompilationCount();\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <atomic>\n#include <memory>\n#include <mutex>\n#include <unordered_map>\n#include <vector>\n#include <igl/Buffer.h>\n#include <igl/CommandEncoder.h>\n#include <igl/Common.h>\n#include <igl/Device.h>\n#include <igl/Shader.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12AllocatorPool.h>\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/D3D12DeviceCapabilities.h>\n#include <igl/d3d12/D3D12ImmediateCommands.h> // For IFenceProvider interface.\n#include <igl/d3d12/D3D12PipelineCache.h>\n#include <igl/d3d12/D3D12SamplerCache.h>\n#include <igl/d3d12/D3D12Telemetry.h>\n\nnamespace igl::d3d12 {\n\nclass PlatformDevice;\nclass UploadRingBuffer;\nclass SamplerState; // Forward declaration for sampler cache\nclass D3D12StagingDevice; // Forward declaration.\n\n/// @brief Implements the igl::IDevice interface for DirectX 12\nclass Device final : public IDevice, public IFenceProvider {\n public:\n  explicit Device(std::unique_ptr<D3D12Context> ctx);\n  ~Device() override;\n\n  // BindGroups\n  [[nodiscard]] Holder<BindGroupTextureHandle> createBindGroup(\n      const BindGroupTextureDesc& desc,\n      const IRenderPipelineState* IGL_NULLABLE compatiblePipeline,\n      Result* IGL_NULLABLE outResult) override;\n  [[nodiscard]] Holder<BindGroupBufferHandle> createBindGroup(const BindGroupBufferDesc& desc,\n                                                              Result* IGL_NULLABLE\n                                                                  outResult) override;\n  void destroy(BindGroupTextureHandle handle) override;\n  void destroy(BindGroupBufferHandle handle) override;\n  void destroy(SamplerHandle handle) override;\n\n  // Command Queue\n  [[nodiscard]] std::shared_ptr<ICommandQueue> createCommandQueue(const CommandQueueDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) noexcept override;\n\n  // Resources\n  [[nodiscard]] std::unique_ptr<IBuffer> createBuffer(const BufferDesc& desc,\n                                                      Result* IGL_NULLABLE\n                                                          outResult) const noexcept override;\n\n  // Non-const helper for createBuffer; handles upload operations that mutate internal state.\n  [[nodiscard]] std::unique_ptr<IBuffer> createBufferImpl(const BufferDesc& desc,\n                                                          Result* IGL_NULLABLE outResult) noexcept;\n\n  [[nodiscard]] std::shared_ptr<IDepthStencilState> createDepthStencilState(\n      const DepthStencilStateDesc& desc,\n      Result* IGL_NULLABLE outResult) const override;\n\n  [[nodiscard]] std::unique_ptr<IShaderStages> createShaderStages(const ShaderStagesDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const override;\n\n  [[nodiscard]] std::shared_ptr<ISamplerState> createSamplerState(const SamplerStateDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const override;\n\n  [[nodiscard]] std::shared_ptr<ITexture> createTexture(const TextureDesc& desc,\n                                                        Result* IGL_NULLABLE\n                                                            outResult) const noexcept override;\n\n  [[nodiscard]] std::shared_ptr<ITexture> createTextureView(std::shared_ptr<ITexture> texture,\n                                                            const TextureViewDesc& desc,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) const noexcept override;\n\n  [[nodiscard]] std::shared_ptr<ITimer> createTimer(\n      Result* IGL_NULLABLE outResult) const noexcept override;\n\n  [[nodiscard]] std::shared_ptr<IVertexInputState> createVertexInputState(\n      const VertexInputStateDesc& desc,\n      Result* IGL_NULLABLE outResult) const override;\n\n  // Pipelines\n  [[nodiscard]] std::shared_ptr<IComputePipelineState> createComputePipeline(\n      const ComputePipelineDesc& desc,\n      Result* IGL_NULLABLE outResult) const override;\n\n  [[nodiscard]] std::shared_ptr<IRenderPipelineState> createRenderPipeline(\n      const RenderPipelineDesc& desc,\n      Result* IGL_NULLABLE outResult) const override;\n\n  // D3D12-specific: Create PSO variant with substituted formats (for dynamic PSO selection)\n  // Called by RenderPipelineState::getPipelineState() to create format variants\n  [[nodiscard]] igl::d3d12::ComPtr<ID3D12PipelineState> createPipelineStateVariant(\n      const RenderPipelineDesc& desc,\n      ID3D12RootSignature* rootSignature,\n      Result* IGL_NULLABLE outResult) const;\n\n  // Shader library and modules\n  [[nodiscard]] std::unique_ptr<IShaderLibrary> createShaderLibrary(const ShaderLibraryDesc& desc,\n                                                                    Result* IGL_NULLABLE\n                                                                        outResult) const override;\n\n  [[nodiscard]] std::shared_ptr<IShaderModule> createShaderModule(const ShaderModuleDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const override;\n\n  // Framebuffer\n  [[nodiscard]] std::shared_ptr<IFramebuffer> createFramebuffer(const FramebufferDesc& desc,\n                                                                Result* IGL_NULLABLE\n                                                                    outResult) override;\n\n  // Capabilities\n  [[nodiscard]] const IPlatformDevice& getPlatformDevice() const noexcept override;\n\n  [[nodiscard]] bool hasFeature(DeviceFeatures feature) const override;\n  [[nodiscard]] bool hasRequirement(DeviceRequirement requirement) const override;\n  [[nodiscard]] bool getFeatureLimits(DeviceFeatureLimits featureLimits,\n                                      size_t& result) const override;\n  [[nodiscard]] TextureFormatCapabilities getTextureFormatCapabilities(\n      TextureFormat format) const override;\n  [[nodiscard]] ShaderVersion getShaderVersion() const override;\n  [[nodiscard]] BackendVersion getBackendVersion() const override;\n\n  [[nodiscard]] size_t getCurrentDrawCount() const override;\n  [[nodiscard]] size_t getShaderCompilationCount() const override;\n\n  [[nodiscard]] BackendType getBackendType() const override;\n\n  [[nodiscard]] void* IGL_NULLABLE getNativeDevice() const override {\n    return ctx_->getDevice();\n  }\n\n  [[nodiscard]] base::IFramebufferInterop* IGL_NULLABLE\n  createFramebufferInterop(const base::FramebufferInteropDesc& desc) override;\n\n  void incrementDrawCount(size_t n) {\n    telemetry_.incrementDrawCount(n);\n  }\n\n  D3D12Context& getD3D12Context() {\n    return *ctx_;\n  }\n  [[nodiscard]] const D3D12Context& getD3D12Context() const {\n    return *ctx_;\n  }\n\n  // Bind group accessors for RenderCommandEncoder\n  [[nodiscard]] const BindGroupTextureDesc* getBindGroupTextureDesc(\n      BindGroupTextureHandle handle) const {\n    return bindGroupTexturesPool_.get(handle);\n  }\n  [[nodiscard]] const BindGroupBufferDesc* getBindGroupBufferDesc(\n      BindGroupBufferHandle handle) const {\n    return bindGroupBuffersPool_.get(handle);\n  }\n\n  // Device capabilities accessors.\n  [[nodiscard]] const D3D12_FEATURE_DATA_D3D12_OPTIONS& getDeviceOptions() const {\n    return capabilities_.getOptions();\n  }\n  [[nodiscard]] const D3D12_FEATURE_DATA_D3D12_OPTIONS1& getDeviceOptions1() const {\n    return capabilities_.getOptions1();\n  }\n  [[nodiscard]] D3D12_RESOURCE_BINDING_TIER getResourceBindingTier() const {\n    return capabilities_.getResourceBindingTier();\n  }\n\n  void processCompletedUploads();\n  void trackUploadBuffer(igl::d3d12::ComPtr<ID3D12Resource> buffer, UINT64 fenceValue);\n\n  // Command allocator pool access for upload operations.\n  igl::d3d12::ComPtr<ID3D12CommandAllocator> getUploadCommandAllocator();\n  void returnUploadCommandAllocator(igl::d3d12::ComPtr<ID3D12CommandAllocator> allocator,\n                                    UINT64 fenceValue);\n  ID3D12Fence* getUploadFence() const {\n    return allocatorPool_.getUploadFence();\n  }\n  UINT64 getNextUploadFenceValue() {\n    return allocatorPool_.getNextUploadFenceValue();\n  }\n  Result waitForUploadFence(UINT64 fenceValue) const;\n\n  // IFenceProvider implementation (shared fence timeline).\n  uint64_t getNextFenceValue() override {\n    return getNextUploadFenceValue();\n  }\n\n  // Upload ring buffer access.\n  UploadRingBuffer* getUploadRingBuffer() const {\n    return allocatorPool_.getUploadRingBuffer();\n  }\n\n  // Check for device removal and return error Result if detected.\n  [[nodiscard]] Result checkDeviceRemoval() const;\n\n  // Query if device has been lost.\n  [[nodiscard]] bool isDeviceLost() const {\n    return deviceLost_;\n  }\n\n  // Sampler cache statistics.\n  [[nodiscard]] SamplerCacheStats getSamplerCacheStats() const;\n\n  // Query maximum MSAA sample count for a specific format.\n  // Returns 1 if the format does not support MSAA.\n  [[nodiscard]] uint32_t getMaxMSAASamplesForFormat(TextureFormat format) const;\n\n private:\n  // Alignment validation helpers.\n  bool validateMSAAAlignment(const TextureDesc& desc, Result* IGL_NULLABLE outResult) const;\n  bool validateTextureAlignment(const D3D12_RESOURCE_DESC& resourceDesc,\n                                uint32_t sampleCount,\n                                Result* IGL_NULLABLE outResult) const;\n  bool validateBufferAlignment(size_t bufferSize, bool isUniform) const;\n\n  // Alignment constants.\n  static constexpr size_t MSAA_ALIGNMENT = 65536; // 64KB for MSAA textures\n  static constexpr size_t BUFFER_ALIGNMENT = 256; // 256 bytes for constant buffers\n  static constexpr size_t DEFAULT_TEXTURE_ALIGNMENT = 65536; // 64KB default for textures\n\n  D3D12DeviceCapabilities capabilities_;\n\n  std::unique_ptr<D3D12Context> ctx_;\n  std::unique_ptr<PlatformDevice> platformDevice_;\n  D3D12Telemetry telemetry_;\n\n  // Bind group pools\n  Pool<BindGroupTextureTag, BindGroupTextureDesc> bindGroupTexturesPool_;\n  Pool<BindGroupBufferTag, BindGroupBufferDesc> bindGroupBuffersPool_;\n\n  // Upload tracking state (non-mutable, mutated only from non-const paths).\n  // Modified by createBufferImpl, Buffer::upload, Texture::upload via non-const Device references\n  // and synchronized via pendingUploadsMutex_ for thread-safe access.\n  D3D12AllocatorPool allocatorPool_;\n  D3D12PipelineCache pipelineCache_;\n  D3D12SamplerCache samplerCache_;\n\n  // Device lost flag and reason for fatal error handling (atomic for thread-safe access).\n  mutable std::atomic<bool> deviceLost_{false};\n  mutable std::string deviceLostReason_; // Cached reason for diagnostics\n\n public:\n  // Shared staging infrastructure for upload/readback operations.\n  // Used by Buffer, Texture, Framebuffer, CommandBuffer for centralized resource management.\n  [[nodiscard]] D3D12ImmediateCommands* getImmediateCommands() const {\n    return allocatorPool_.getImmediateCommands();\n  }\n  [[nodiscard]] D3D12StagingDevice* getStagingDevice() const {\n    return allocatorPool_.getStagingDevice();\n  }\n\n  // Access pre-compiled mipmap shaders.\n  [[nodiscard]] bool areMipmapShadersAvailable() const {\n    return pipelineCache_.mipmapShadersAvailable_;\n  }\n  [[nodiscard]] const std::vector<uint8_t>& getMipmapVSBytecode() const {\n    return pipelineCache_.mipmapVSBytecode_;\n  }\n  [[nodiscard]] const std::vector<uint8_t>& getMipmapPSBytecode() const {\n    return pipelineCache_.mipmapPSBytecode_;\n  }\n  [[nodiscard]] ID3D12RootSignature* getMipmapRootSignature() const {\n    return pipelineCache_.mipmapRootSignature_.Get();\n  }\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Framebuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/Framebuffer.h>\n\n#include <algorithm>\n#include <chrono>\n#include <cstring>\n#include <igl/d3d12/CommandBuffer.h>\n#include <igl/d3d12/CommandQueue.h>\n#include <igl/d3d12/D3D12FenceWaiter.h>\n#include <igl/d3d12/D3D12ImmediateCommands.h>\n#include <igl/d3d12/D3D12StagingDevice.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/Texture.h>\n\nnamespace igl::d3d12 {\n\nnamespace {\n// Import ComPtr for readability\ntemplate<typename T>\nusing ComPtr = igl::d3d12::ComPtr<T>;\n} // namespace\n\nFramebuffer::Framebuffer(const FramebufferDesc& desc) : desc_(desc) {}\n\nFramebuffer::~Framebuffer() {\n  // FenceWaiter RAII handles event cleanup automatically\n}\n\nstd::vector<size_t> Framebuffer::getColorAttachmentIndices() const {\n  std::vector<size_t> indices;\n  indices.reserve(IGL_COLOR_ATTACHMENTS_MAX);\n  for (size_t i = 0; i < IGL_COLOR_ATTACHMENTS_MAX; ++i) {\n    if (desc_.colorAttachments[i].texture) {\n      indices.push_back(i);\n    }\n  }\n  return indices;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getColorAttachment(size_t index) const {\n  if (index < IGL_COLOR_ATTACHMENTS_MAX) {\n    return desc_.colorAttachments[index].texture;\n  }\n  return nullptr;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getResolveColorAttachment(size_t index) const {\n  if (index < IGL_COLOR_ATTACHMENTS_MAX) {\n    return desc_.colorAttachments[index].resolveTexture;\n  }\n  return nullptr;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getDepthAttachment() const {\n  return desc_.depthAttachment.texture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getResolveDepthAttachment() const {\n  return desc_.depthAttachment.resolveTexture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getStencilAttachment() const {\n  return desc_.stencilAttachment.texture;\n}\n\nFramebufferMode Framebuffer::getMode() const {\n  return desc_.mode;\n}\n\nbool Framebuffer::isSwapchainBound() const {\n  return false;\n}\n\nvoid Framebuffer::copyBytesColorAttachment(ICommandQueue& cmdQueue,\n                                           size_t index,\n                                           void* pixelBytes,\n                                           const TextureRangeDesc& range,\n                                           size_t bytesPerRow) const {\n  if (!pixelBytes || index >= IGL_COLOR_ATTACHMENTS_MAX) {\n    return;\n  }\n\n  auto* d3dQueueWrapper = dynamic_cast<CommandQueue*>(&cmdQueue);\n  if (!d3dQueueWrapper) {\n    return;\n  }\n\n  auto& iglDevice = d3dQueueWrapper->getDevice();\n  auto& ctx = iglDevice.getD3D12Context();\n  auto* device = ctx.getDevice();\n  if (!device) {\n    return;\n  }\n\n  // Get shared infrastructure used for readback.\n  auto* immediateCommands = iglDevice.getImmediateCommands();\n  auto* stagingDevice = iglDevice.getStagingDevice();\n  if (!immediateCommands || !stagingDevice) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesColorAttachment - Shared infrastructure not available\\n\");\n    return;\n  }\n\n  auto srcTex = std::static_pointer_cast<Texture>(desc_.colorAttachments[index].texture);\n  if (!srcTex) {\n    return;\n  }\n\n  ID3D12Resource* srcRes = srcTex->getResource();\n  if (!srcRes) {\n    return;\n  }\n\n  const uint32_t mipLevel = range.mipLevel;\n  const uint32_t copyLayer = (srcTex->getType() == TextureType::Cube) ? range.face : range.layer;\n  const uint32_t subresourceIndex = srcTex->calcSubresourceIndex(mipLevel, copyLayer);\n\n  const auto texDims = srcTex->getDimensions();\n  const uint32_t mipWidth = std::max<uint32_t>(1u, texDims.width >> mipLevel);\n  const uint32_t mipHeight = std::max<uint32_t>(1u, texDims.height >> mipLevel);\n\n  const UINT64 frameFenceValue = ctx.getFenceValue();\n\n  auto& cache = readbackCache_[index];\n\n  const auto fmtProps = TextureFormatProperties::fromTextureFormat(srcTex->getFormat());\n  const size_t bytesPerPixel = std::max<size_t>(fmtProps.bytesPerBlock, 1);\n  const size_t fullRowBytes = static_cast<size_t>(mipWidth) * bytesPerPixel;\n\n  bool cacheUpToDate = cache.cacheValid && cache.cachedFrameFenceValue == frameFenceValue &&\n                       cache.cachedMipLevel == mipLevel && cache.cachedLayer == copyLayer &&\n                       cache.cachedWidth == mipWidth && cache.cachedHeight == mipHeight &&\n                       cache.cachedBytesPerPixel == bytesPerPixel;\n\n  if (!cacheUpToDate) {\n    const auto refreshStart = std::chrono::high_resolution_clock::now();\n    D3D12_RESOURCE_DESC srcDesc = srcRes->GetDesc();\n    D3D12_PLACED_SUBRESOURCE_FOOTPRINT footprint{};\n    UINT numRows = 0;\n    UINT64 rowSizeInBytes = 0;\n    UINT64 totalBytes = 0;\n    device->GetCopyableFootprints(\n        &srcDesc, subresourceIndex, 1, 0, &footprint, &numRows, &rowSizeInBytes, &totalBytes);\n\n    if (totalBytes == 0) {\n      return;\n    }\n\n    // Use D3D12StagingDevice for readback buffer allocation.\n    auto stagingBuffer = stagingDevice->allocateReadback(totalBytes);\n    if (!stagingBuffer.valid || !stagingBuffer.buffer.Get()) {\n      IGL_LOG_ERROR(\"Framebuffer::copyBytesColorAttachment - Failed to allocate readback buffer\\n\");\n      cache.cacheValid = false;\n      return;\n    }\n\n    // Use D3D12ImmediateCommands for the copy operation.\n    Result result;\n    ID3D12GraphicsCommandList* cmdList = immediateCommands->begin(&result);\n    if (!cmdList || !result.isOk()) {\n      IGL_LOG_ERROR(\"Framebuffer::copyBytesColorAttachment - Failed to begin command list: %s\\n\",\n                    result.message.c_str());\n      stagingDevice->free(stagingBuffer, 0);\n      cache.cacheValid = false;\n      return;\n    }\n\n    const auto previousState = srcTex->getSubresourceState(mipLevel, copyLayer);\n    srcTex->transitionTo(cmdList, D3D12_RESOURCE_STATE_COPY_SOURCE, mipLevel, copyLayer);\n\n    D3D12_TEXTURE_COPY_LOCATION dstLoc{};\n    dstLoc.pResource = stagingBuffer.buffer.Get();\n    dstLoc.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;\n    dstLoc.PlacedFootprint = footprint;\n\n    D3D12_TEXTURE_COPY_LOCATION srcLoc{};\n    srcLoc.pResource = srcRes;\n    srcLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;\n    srcLoc.SubresourceIndex = subresourceIndex;\n\n    D3D12_BOX srcBox{};\n    srcBox.left = 0;\n    srcBox.top = 0;\n    srcBox.front = 0;\n    srcBox.right = mipWidth;\n    srcBox.bottom = mipHeight;\n    srcBox.back = 1;\n    cmdList->CopyTextureRegion(&dstLoc, 0, 0, 0, &srcLoc, &srcBox);\n\n    srcTex->transitionTo(cmdList, previousState, mipLevel, copyLayer);\n\n    // Submit and wait using the shared fence.\n    uint64_t fenceValue = immediateCommands->submit(true, &result);\n    if (fenceValue == 0 || !result.isOk()) {\n      IGL_LOG_ERROR(\"Framebuffer::copyBytesColorAttachment - Failed to submit command list: %s\\n\",\n                    result.message.c_str());\n      stagingDevice->free(stagingBuffer, 0);\n      cache.cacheValid = false;\n      return;\n    }\n\n    // Map and read the readback buffer\n    void* mapped = nullptr;\n    D3D12_RANGE readRange{0, totalBytes};\n    if (FAILED(stagingBuffer.buffer->Map(0, &readRange, &mapped))) {\n      IGL_LOG_ERROR(\"Framebuffer::copyBytesColorAttachment - Failed to map readback buffer\\n\");\n      stagingDevice->free(stagingBuffer, fenceValue);\n      cache.cacheValid = false;\n      return;\n    }\n\n    const uint8_t* srcPtr = static_cast<const uint8_t*>(mapped) + footprint.Offset;\n    const size_t srcRowPitch = footprint.Footprint.RowPitch;\n    const size_t copyRowBytes = fullRowBytes;\n\n    cache.cachedRowPitch = static_cast<uint64_t>(fullRowBytes);\n    cache.cachedData.resize(static_cast<size_t>(cache.cachedRowPitch) *\n                            static_cast<size_t>(mipHeight));\n\n    // Direct copy with vertical flip only; no channel swap needed.\n    // DXGI_FORMAT_R8G8B8A8_UNORM has R,G,B,A byte order matching IGL expectations.\n    for (uint32_t row = 0; row < mipHeight; ++row) {\n      const uint8_t* s = srcPtr + static_cast<size_t>(row) * srcRowPitch;\n      uint8_t* d = cache.cachedData.data() + static_cast<size_t>(mipHeight - 1 - row) *\n                                                 static_cast<size_t>(cache.cachedRowPitch);\n\n      std::memcpy(d, s, copyRowBytes);\n    }\n\n    stagingBuffer.buffer->Unmap(0, nullptr);\n\n    // Free the staging buffer back to the pool.\n    stagingDevice->free(stagingBuffer, fenceValue);\n\n    cache.cachedWidth = mipWidth;\n    cache.cachedHeight = mipHeight;\n    cache.cachedBytesPerPixel = bytesPerPixel;\n    cache.cachedMipLevel = mipLevel;\n    cache.cachedLayer = copyLayer;\n    cache.cachedFrameFenceValue = frameFenceValue;\n    cache.cacheValid = true;\n\n    const auto refreshEnd = std::chrono::high_resolution_clock::now();\n    const double refreshMs =\n        std::chrono::duration<double, std::milli>(refreshEnd - refreshStart).count();\n    IGL_D3D12_LOG_VERBOSE(\n        \"copyBytesColorAttachment: refreshed subresource (mip=%u, layer=%u) in %.2f ms (%ux%u)\\n\",\n        mipLevel,\n        copyLayer,\n        refreshMs,\n        mipWidth,\n        mipHeight);\n  }\n\n  if (!cache.cacheValid) {\n    return;\n  }\n\n  if (range.width == 0 || range.height == 0 || range.x + range.width > cache.cachedWidth ||\n      range.y + range.height > cache.cachedHeight) {\n    return;\n  }\n\n  const size_t copyRowBytes = static_cast<size_t>(range.width) * cache.cachedBytesPerPixel;\n  const size_t dstRowPitch = bytesPerRow ? bytesPerRow : copyRowBytes;\n  uint8_t* dstPtr = static_cast<uint8_t*>(pixelBytes);\n\n  for (uint32_t destRow = 0; destRow < range.height; ++destRow) {\n    const uint32_t gpuRow = range.y + (range.height - 1 - destRow);\n    if (gpuRow >= cache.cachedHeight) {\n      return;\n    }\n    const uint32_t cachedRow = cache.cachedHeight - 1 - gpuRow;\n    const uint8_t* src =\n        cache.cachedData.data() +\n        static_cast<size_t>(cachedRow) * static_cast<size_t>(cache.cachedRowPitch) +\n        static_cast<size_t>(range.x) * cache.cachedBytesPerPixel;\n    std::memcpy(dstPtr + static_cast<size_t>(destRow) * dstRowPitch, src, copyRowBytes);\n  }\n}\n\nvoid Framebuffer::copyBytesDepthAttachment(ICommandQueue& cmdQueue,\n                                           void* pixelBytes,\n                                           const TextureRangeDesc& range,\n                                           size_t bytesPerRow) const {\n  // Depth attachment readback.\n  if (!pixelBytes) {\n    return;\n  }\n\n  auto* d3dQueueWrapper = dynamic_cast<CommandQueue*>(&cmdQueue);\n  if (!d3dQueueWrapper) {\n    return;\n  }\n\n  auto& iglDevice = d3dQueueWrapper->getDevice();\n  auto& ctx = iglDevice.getD3D12Context();\n  auto* device = ctx.getDevice();\n  if (!device) {\n    return;\n  }\n\n  // Get shared staging infrastructure.\n  auto* immediateCommands = iglDevice.getImmediateCommands();\n  auto* stagingDevice = iglDevice.getStagingDevice();\n  if (!immediateCommands || !stagingDevice) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesDepthAttachment - Shared infrastructure not available\\n\");\n    return;\n  }\n\n  auto depthTex = std::static_pointer_cast<Texture>(desc_.depthAttachment.texture);\n  if (!depthTex) {\n    return;\n  }\n\n  ID3D12Resource* depthRes = depthTex->getResource();\n  if (!depthRes) {\n    return;\n  }\n\n  const uint32_t mipLevel = range.mipLevel;\n  const uint32_t copyLayer = (depthTex->getType() == TextureType::Cube) ? range.face : range.layer;\n  const uint32_t subresourceIndex = depthTex->calcSubresourceIndex(mipLevel, copyLayer);\n\n  const auto texDims = depthTex->getDimensions();\n  const uint32_t mipWidth = std::max<uint32_t>(1u, texDims.width >> mipLevel);\n  const uint32_t mipHeight = std::max<uint32_t>(1u, texDims.height >> mipLevel);\n\n  // Get footprint for the depth resource\n  D3D12_RESOURCE_DESC depthDesc = depthRes->GetDesc();\n\n  // Validate and log depth format to clarify raw-bits vs converted-float behavior.\n  const DXGI_FORMAT depthFormat = depthDesc.Format;\n  const bool isD32Float =\n      (depthFormat == DXGI_FORMAT_D32_FLOAT || depthFormat == DXGI_FORMAT_D32_FLOAT_S8X24_UINT);\n\n  if (!isD32Float) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"Framebuffer::copyBytesDepthAttachment - Format 0x%X is not D32_FLOAT; \"\n        \"returning raw GPU bits (not normalized [0,1] floats). \"\n        \"For UNORM formats, caller must convert manually.\\n\",\n        static_cast<unsigned int>(depthFormat));\n  }\n\n  D3D12_PLACED_SUBRESOURCE_FOOTPRINT footprint{};\n  UINT numRows = 0;\n  UINT64 rowSizeInBytes = 0;\n  UINT64 totalBytes = 0;\n  device->GetCopyableFootprints(\n      &depthDesc, subresourceIndex, 1, 0, &footprint, &numRows, &rowSizeInBytes, &totalBytes);\n\n  if (totalBytes == 0) {\n    return;\n  }\n\n  // Allocate readback buffer from the staging device.\n  auto stagingBuffer = stagingDevice->allocateReadback(totalBytes);\n  if (!stagingBuffer.valid || !stagingBuffer.buffer.Get()) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesDepthAttachment - Failed to allocate readback buffer\\n\");\n    return;\n  }\n\n  // Begin immediate command recording.\n  Result result;\n  ID3D12GraphicsCommandList* cmdList = immediateCommands->begin(&result);\n  if (!cmdList || !result.isOk()) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesDepthAttachment - Failed to begin command list: %s\\n\",\n                  result.message.c_str());\n    stagingDevice->free(stagingBuffer, 0);\n    return;\n  }\n\n  // Transition depth texture to copy source\n  const auto previousState = depthTex->getSubresourceState(mipLevel, copyLayer);\n  depthTex->transitionTo(cmdList, D3D12_RESOURCE_STATE_COPY_SOURCE, mipLevel, copyLayer);\n\n  // Set up copy locations\n  D3D12_TEXTURE_COPY_LOCATION dstLoc{};\n  dstLoc.pResource = stagingBuffer.buffer.Get();\n  dstLoc.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;\n  dstLoc.PlacedFootprint = footprint;\n\n  D3D12_TEXTURE_COPY_LOCATION srcLoc{};\n  srcLoc.pResource = depthRes;\n  srcLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;\n  srcLoc.SubresourceIndex = subresourceIndex;\n\n  D3D12_BOX srcBox{};\n  srcBox.left = 0;\n  srcBox.top = 0;\n  srcBox.front = 0;\n  srcBox.right = mipWidth;\n  srcBox.bottom = mipHeight;\n  srcBox.back = 1;\n\n  // Copy depth data\n  cmdList->CopyTextureRegion(&dstLoc, 0, 0, 0, &srcLoc, &srcBox);\n\n  // Transition back to previous state\n  depthTex->transitionTo(cmdList, previousState, mipLevel, copyLayer);\n\n  // Submit and wait using the shared fence.\n  uint64_t fenceValue = immediateCommands->submit(true, &result);\n  if (fenceValue == 0 || !result.isOk()) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesDepthAttachment - Failed to submit command list: %s\\n\",\n                  result.message.c_str());\n    stagingDevice->free(stagingBuffer, 0);\n    return;\n  }\n\n  // Map readback buffer and copy data\n  void* mapped = nullptr;\n  D3D12_RANGE readRange{0, totalBytes};\n  if (FAILED(stagingBuffer.buffer->Map(0, &readRange, &mapped))) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesDepthAttachment - Failed to map readback buffer\\n\");\n    stagingDevice->free(stagingBuffer, fenceValue);\n    return;\n  }\n\n  // Validate range bounds before copying.\n  if (range.width == 0 || range.height == 0 || range.x + range.width > mipWidth ||\n      range.y + range.height > mipHeight) {\n    IGL_LOG_ERROR(\n        \"Framebuffer::copyBytesDepthAttachment - Invalid range: [%u,%u %ux%u] exceeds mip size \"\n        \"%ux%u\\n\",\n        range.x,\n        range.y,\n        range.width,\n        range.height,\n        mipWidth,\n        mipHeight);\n    stagingBuffer.buffer->Unmap(0, nullptr);\n    stagingDevice->free(stagingBuffer, fenceValue);\n    return;\n  }\n\n  const uint8_t* srcPtr = static_cast<const uint8_t*>(mapped) + footprint.Offset;\n  const size_t srcRowPitch = footprint.Footprint.RowPitch;\n\n  // Depth readback contract: callers (tests) provide a float-per-pixel buffer.\n  // Use 4 bytes per destination pixel regardless of the underlying DXGI format,\n  // and only copy that many bytes from the GPU data to avoid overrunning the\n  // caller's buffer (e.g., for combined depth-stencil formats like D32_S8).\n  //\n  // LIMITATION: This implementation assumes a \"raw bits\" contract - it copies\n  // the native GPU representation without format conversion. This is correct for\n  // D32_FLOAT (which is already IEEE 754 float), but for normalized integer depth\n  // formats (D16_UNORM, D24_UNORM_S8_UINT), the copied data is raw bits, not\n  // converted [0,1] floats. Callers expecting normalized depth values from non-float\n  // formats will receive unconverted data. Future work should add format detection\n  // and explicit UNORM-to-float conversion for broader compatibility.\n  constexpr size_t kDstBytesPerPixel = sizeof(float);\n\n  // Derive the native bytes-per-pixel for the copied subresource using the\n  // rowSizeInBytes returned by GetCopyableFootprints when possible.\n  size_t nativeBytesPerPixel = 0;\n  if (mipWidth > 0 && rowSizeInBytes > 0) {\n    nativeBytesPerPixel = static_cast<size_t>(rowSizeInBytes) / static_cast<size_t>(mipWidth);\n  }\n\n  const size_t copyRowBytes = static_cast<size_t>(range.width) * kDstBytesPerPixel;\n  const size_t dstRowPitch = bytesPerRow ? bytesPerRow : copyRowBytes;\n  uint8_t* dstPtr = static_cast<uint8_t*>(pixelBytes);\n\n  for (uint32_t destRow = 0; destRow < range.height; ++destRow) {\n    const uint32_t gpuRow = range.y + (range.height - 1 - destRow);\n    if (gpuRow >= mipHeight) {\n      break;\n    }\n    const uint32_t srcRow = mipHeight - 1 - gpuRow;\n    const uint8_t* src = srcPtr + static_cast<size_t>(srcRow) * srcRowPitch +\n                         static_cast<size_t>(range.x) *\n                             (nativeBytesPerPixel > 0 ? nativeBytesPerPixel : kDstBytesPerPixel);\n\n    std::memcpy(dstPtr + static_cast<size_t>(destRow) * dstRowPitch, src, copyRowBytes);\n  }\n\n  stagingBuffer.buffer->Unmap(0, nullptr);\n\n  // Free staging buffer back to the pool.\n  stagingDevice->free(stagingBuffer, fenceValue);\n}\n\nvoid Framebuffer::copyBytesStencilAttachment(ICommandQueue& cmdQueue,\n                                             void* pixelBytes,\n                                             const TextureRangeDesc& range,\n                                             size_t bytesPerRow) const {\n  // Stencil attachment readback.\n  if (!pixelBytes) {\n    return;\n  }\n\n  auto* d3dQueueWrapper = dynamic_cast<CommandQueue*>(&cmdQueue);\n  if (!d3dQueueWrapper) {\n    return;\n  }\n\n  auto& iglDevice = d3dQueueWrapper->getDevice();\n  auto& ctx = iglDevice.getD3D12Context();\n  auto* device = ctx.getDevice();\n  if (!device) {\n    return;\n  }\n\n  // Get shared infrastructure.\n  auto* immediateCommands = iglDevice.getImmediateCommands();\n  auto* stagingDevice = iglDevice.getStagingDevice();\n  if (!immediateCommands || !stagingDevice) {\n    IGL_LOG_ERROR(\n        \"Framebuffer::copyBytesStencilAttachment - Shared infrastructure not available\\n\");\n    return;\n  }\n\n  auto stencilTex = std::static_pointer_cast<Texture>(desc_.stencilAttachment.texture);\n  if (!stencilTex) {\n    return;\n  }\n\n  ID3D12Resource* stencilRes = stencilTex->getResource();\n  if (!stencilRes) {\n    return;\n  }\n\n  const uint32_t mipLevel = range.mipLevel;\n  const uint32_t copyLayer = (stencilTex->getType() == TextureType::Cube) ? range.face\n                                                                          : range.layer;\n\n  // Detect stencil format and select the appropriate plane slice.\n  D3D12_RESOURCE_DESC stencilDesc = stencilRes->GetDesc();\n  const DXGI_FORMAT stencilFormat = stencilDesc.Format;\n\n  // Determine plane slice based on format:\n  // - Planar depth-stencil formats: stencil is in plane 1\n  // - Pure stencil formats: plane 0\n  UINT planeSlice = 0; // Default for non-planar\n\n  if (stencilFormat == DXGI_FORMAT_D24_UNORM_S8_UINT ||\n      stencilFormat == DXGI_FORMAT_D32_FLOAT_S8X24_UINT ||\n      stencilFormat == DXGI_FORMAT_R24G8_TYPELESS ||\n      stencilFormat == DXGI_FORMAT_R32G8X24_TYPELESS) {\n    // Planar depth-stencil: Plane 0 = depth, Plane 1 = stencil\n    planeSlice = 1;\n  } else if (stencilFormat == DXGI_FORMAT_R8_TYPELESS) {\n    // Pure stencil formats: Plane 0\n    planeSlice = 0;\n  } else {\n    IGL_LOG_ERROR(\n        \"Framebuffer::copyBytesStencilAttachment - Unsupported stencil format 0x%X; \"\n        \"assuming plane 0. May fail for planar formats.\\n\",\n        static_cast<unsigned int>(stencilFormat));\n    IGL_DEBUG_ASSERT(false, \"Unsupported stencil format - add to known format list\");\n    planeSlice = 0;\n  }\n\n  const UINT numMipLevels = stencilTex->getNumMipLevels();\n  const UINT numLayers = stencilTex->getNumLayers();\n  const uint32_t subresourceIndex =\n      D3D12CalcSubresource(mipLevel, copyLayer, planeSlice, numMipLevels, numLayers);\n\n  const auto texDims = stencilTex->getDimensions();\n  const uint32_t mipWidth = std::max<uint32_t>(1u, texDims.width >> mipLevel);\n  const uint32_t mipHeight = std::max<uint32_t>(1u, texDims.height >> mipLevel);\n\n  // Get footprint for the stencil plane (reuse stencilDesc from above)\n  D3D12_PLACED_SUBRESOURCE_FOOTPRINT footprint{};\n  UINT numRows = 0;\n  UINT64 rowSizeInBytes = 0;\n  UINT64 totalBytes = 0;\n  device->GetCopyableFootprints(\n      &stencilDesc, subresourceIndex, 1, 0, &footprint, &numRows, &rowSizeInBytes, &totalBytes);\n\n  if (totalBytes == 0) {\n    return;\n  }\n\n  // Allocate readback buffer from the staging device.\n  auto stagingBuffer = stagingDevice->allocateReadback(totalBytes);\n  if (!stagingBuffer.valid || !stagingBuffer.buffer.Get()) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesStencilAttachment - Failed to allocate readback buffer\\n\");\n    return;\n  }\n\n  // Begin immediate command recording.\n  Result result;\n  ID3D12GraphicsCommandList* cmdList = immediateCommands->begin(&result);\n  if (!cmdList || !result.isOk()) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesStencilAttachment - Failed to begin command list: %s\\n\",\n                  result.message.c_str());\n    stagingDevice->free(stagingBuffer, 0);\n    return;\n  }\n\n  // Transition stencil texture to copy source\n  const auto previousState = stencilTex->getSubresourceState(mipLevel, copyLayer);\n  stencilTex->transitionTo(cmdList, D3D12_RESOURCE_STATE_COPY_SOURCE, mipLevel, copyLayer);\n\n  // Set up copy locations for stencil plane\n  D3D12_TEXTURE_COPY_LOCATION dstLoc{};\n  dstLoc.pResource = stagingBuffer.buffer.Get();\n  dstLoc.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;\n  dstLoc.PlacedFootprint = footprint;\n\n  D3D12_TEXTURE_COPY_LOCATION srcLoc{};\n  srcLoc.pResource = stencilRes;\n  srcLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;\n  srcLoc.SubresourceIndex = subresourceIndex;\n\n  D3D12_BOX srcBox{};\n  srcBox.left = 0;\n  srcBox.top = 0;\n  srcBox.front = 0;\n  srcBox.right = mipWidth;\n  srcBox.bottom = mipHeight;\n  srcBox.back = 1;\n\n  // Copy stencil data\n  cmdList->CopyTextureRegion(&dstLoc, 0, 0, 0, &srcLoc, &srcBox);\n\n  // Transition back to previous state\n  stencilTex->transitionTo(cmdList, previousState, mipLevel, copyLayer);\n\n  // Submit and wait using the shared fence.\n  uint64_t fenceValue = immediateCommands->submit(true, &result);\n  if (fenceValue == 0 || !result.isOk()) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesStencilAttachment - Failed to submit command list: %s\\n\",\n                  result.message.c_str());\n    stagingDevice->free(stagingBuffer, 0);\n    return;\n  }\n\n  // Map readback buffer and copy data\n  void* mapped = nullptr;\n  D3D12_RANGE readRange{0, totalBytes};\n  if (FAILED(stagingBuffer.buffer->Map(0, &readRange, &mapped))) {\n    IGL_LOG_ERROR(\"Framebuffer::copyBytesStencilAttachment - Failed to map readback buffer\\n\");\n    stagingDevice->free(stagingBuffer, fenceValue);\n    return;\n  }\n\n  // Validate range bounds before copying.\n  if (range.width == 0 || range.height == 0 || range.x + range.width > mipWidth ||\n      range.y + range.height > mipHeight) {\n    IGL_LOG_ERROR(\n        \"Framebuffer::copyBytesStencilAttachment - Invalid range: [%u,%u %ux%u] exceeds mip size \"\n        \"%ux%u\\n\",\n        range.x,\n        range.y,\n        range.width,\n        range.height,\n        mipWidth,\n        mipHeight);\n    stagingBuffer.buffer->Unmap(0, nullptr);\n    stagingDevice->free(stagingBuffer, fenceValue);\n    return;\n  }\n\n  const uint8_t* srcPtr = static_cast<const uint8_t*>(mapped) + footprint.Offset;\n  const size_t srcRowPitch = footprint.Footprint.RowPitch;\n\n  // Stencil is always 8-bit (1 byte per pixel)\n  const size_t bytesPerPixel = 1;\n\n  // Copy with vertical flip (D3D12 textures are top-down, IGL expects bottom-up)\n  const size_t copyRowBytes = static_cast<size_t>(range.width) * bytesPerPixel;\n  const size_t dstRowPitch = bytesPerRow ? bytesPerRow : copyRowBytes;\n  uint8_t* dstPtr = static_cast<uint8_t*>(pixelBytes);\n\n  for (uint32_t destRow = 0; destRow < range.height; ++destRow) {\n    const uint32_t gpuRow = range.y + (range.height - 1 - destRow);\n    if (gpuRow >= mipHeight) {\n      break;\n    }\n    const uint32_t srcRow = mipHeight - 1 - gpuRow;\n    const uint8_t* src = srcPtr + static_cast<size_t>(srcRow) * srcRowPitch +\n                         static_cast<size_t>(range.x) * bytesPerPixel;\n    std::memcpy(dstPtr + static_cast<size_t>(destRow) * dstRowPitch, src, copyRowBytes);\n  }\n\n  stagingBuffer.buffer->Unmap(0, nullptr);\n\n  // Free staging buffer back to the pool.\n  stagingDevice->free(stagingBuffer, fenceValue);\n}\n\nvoid Framebuffer::copyTextureColorAttachment(ICommandQueue& cmdQueue,\n                                             size_t index,\n                                             std::shared_ptr<ITexture> destTexture,\n                                             const TextureRangeDesc& range) const {\n  // Bounds check for index parameter\n  if (index >= IGL_COLOR_ATTACHMENTS_MAX) {\n    IGL_LOG_ERROR(\"Framebuffer::copyTextureColorAttachment: index %zu out of bounds (max %u)\\n\",\n                  index,\n                  IGL_COLOR_ATTACHMENTS_MAX);\n    return;\n  }\n\n  // Get device and shared infrastructure directly (avoid transient CommandBuffer).\n  auto* d3dQueueWrapper = dynamic_cast<CommandQueue*>(&cmdQueue);\n  if (!d3dQueueWrapper) {\n    IGL_LOG_ERROR(\"Framebuffer::copyTextureColorAttachment - Invalid command queue\\n\");\n    IGL_DEBUG_ASSERT(false, \"D3D12 Framebuffer used with non-D3D12 command queue\");\n    return;\n  }\n\n  auto& iglDevice = d3dQueueWrapper->getDevice();\n  auto* immediateCommands = iglDevice.getImmediateCommands();\n  if (!immediateCommands) {\n    IGL_LOG_ERROR(\"Framebuffer::copyTextureColorAttachment - Immediate commands not available\\n\");\n    IGL_DEBUG_ASSERT(false, \"D3D12ImmediateCommands not initialized\");\n    return;\n  }\n\n  auto srcTex =\n      std::static_pointer_cast<igl::d3d12::Texture>(desc_.colorAttachments[index].texture);\n  auto dstTex = std::static_pointer_cast<igl::d3d12::Texture>(destTexture);\n  if (!srcTex || !dstTex) {\n    return;\n  }\n  ID3D12Resource* srcRes = srcTex->getResource();\n  ID3D12Resource* dstRes = dstTex->getResource();\n  if (!srcRes || !dstRes) {\n    return;\n  }\n  Result result;\n  ID3D12GraphicsCommandList* cmdList = immediateCommands->begin(&result);\n  if (!cmdList || !result.isOk()) {\n    IGL_LOG_ERROR(\"Framebuffer::copyTextureColorAttachment - Failed to begin command list: %s\\n\",\n                  result.message.c_str());\n    return;\n  }\n\n  const uint32_t mipLevel = range.mipLevel;\n  const uint32_t layer = range.layer;\n  const auto srcPrevState = srcTex->getSubresourceState(mipLevel, layer);\n  srcTex->transitionTo(cmdList, D3D12_RESOURCE_STATE_COPY_SOURCE, mipLevel, layer);\n  dstTex->transitionTo(cmdList, D3D12_RESOURCE_STATE_COPY_DEST, mipLevel, layer);\n\n  // Calculate proper subresource indices for array textures and cubemaps\n  // D3D12CalcSubresource(MipSlice, ArraySlice, PlaneSlice, MipLevels, ArraySize)\n  const UINT srcMipLevels = srcTex->getNumMipLevels();\n  const UINT dstMipLevels = dstTex->getNumMipLevels();\n  const UINT srcArraySize = srcTex->getNumLayers();\n  const UINT dstArraySize = dstTex->getNumLayers();\n\n  D3D12_TEXTURE_COPY_LOCATION dstLoc{};\n  dstLoc.pResource = dstRes;\n  dstLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;\n  dstLoc.SubresourceIndex = D3D12CalcSubresource(mipLevel, layer, 0, dstMipLevels, dstArraySize);\n\n  D3D12_TEXTURE_COPY_LOCATION srcLoc{};\n  srcLoc.pResource = srcRes;\n  srcLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;\n  srcLoc.SubresourceIndex = D3D12CalcSubresource(mipLevel, layer, 0, srcMipLevels, srcArraySize);\n\n  D3D12_BOX srcBox{};\n  srcBox.left = range.x;\n  srcBox.top = range.y;\n  srcBox.front = 0;\n  srcBox.right = range.x + range.width;\n  srcBox.bottom = range.y + range.height;\n  srcBox.back = 1;\n  cmdList->CopyTextureRegion(&dstLoc, range.x, range.y, 0, &srcLoc, &srcBox);\n\n  // Transition dest to shader resource for sampling. Source back to its previous state.\n  srcTex->transitionTo(cmdList, srcPrevState, mipLevel, layer);\n  dstTex->transitionTo(cmdList, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, mipLevel, layer);\n\n  // Submit and wait using the shared fence (replaces manual CreateEvent/WaitForSingleObject).\n  uint64_t fenceValue = immediateCommands->submit(true, &result);\n  if (fenceValue == 0 || !result.isOk()) {\n    IGL_LOG_ERROR(\"Framebuffer::copyTextureColorAttachment - Failed to submit command list: %s\\n\",\n                  result.message.c_str());\n    return;\n  }\n}\n\nvoid Framebuffer::updateDrawable(std::shared_ptr<ITexture> texture) {\n  desc_.colorAttachments[0].texture = std::move(texture);\n}\n\nvoid Framebuffer::updateDrawable(SurfaceTextures surfaceTextures) {\n  desc_.colorAttachments[0].texture = std::move(surfaceTextures.color);\n  desc_.depthAttachment.texture = surfaceTextures.depth;\n  // Depth and stencil typically share the same texture\n  desc_.stencilAttachment.texture = std::move(surfaceTextures.depth);\n}\n\nvoid Framebuffer::updateResolveAttachment(std::shared_ptr<ITexture> texture) {\n  desc_.colorAttachments[0].resolveTexture = std::move(texture);\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Framebuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <limits>\n#include <vector>\n#include <igl/Framebuffer.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass Framebuffer final : public IFramebuffer {\n public:\n  Framebuffer(const FramebufferDesc& desc);\n  ~Framebuffer() override;\n\n  std::vector<size_t> getColorAttachmentIndices() const override;\n  std::shared_ptr<ITexture> getColorAttachment(size_t index) const override;\n  std::shared_ptr<ITexture> getResolveColorAttachment(size_t index) const override;\n  std::shared_ptr<ITexture> getDepthAttachment() const override;\n  std::shared_ptr<ITexture> getResolveDepthAttachment() const override;\n  std::shared_ptr<ITexture> getStencilAttachment() const override;\n  FramebufferMode getMode() const override;\n  bool isSwapchainBound() const override;\n\n  void copyBytesColorAttachment(ICommandQueue& cmdQueue,\n                                size_t index,\n                                void* pixelBytes,\n                                const TextureRangeDesc& range,\n                                size_t bytesPerRow) const override;\n  void copyBytesDepthAttachment(ICommandQueue& cmdQueue,\n                                void* pixelBytes,\n                                const TextureRangeDesc& range,\n                                size_t bytesPerRow) const override;\n  void copyBytesStencilAttachment(ICommandQueue& cmdQueue,\n                                  void* pixelBytes,\n                                  const TextureRangeDesc& range,\n                                  size_t bytesPerRow) const override;\n  void copyTextureColorAttachment(ICommandQueue& cmdQueue,\n                                  size_t index,\n                                  std::shared_ptr<ITexture> destTexture,\n                                  const TextureRangeDesc& range) const override;\n  void updateDrawable(std::shared_ptr<ITexture> texture) override;\n  void updateDrawable(SurfaceTextures surfaceTextures) override;\n  void updateResolveAttachment(std::shared_ptr<ITexture> texture) override;\n\n private:\n  // Simplified readback resources (removed per-attachment allocator/fence; use shared\n  // infrastructure).\n  struct ReadbackResources {\n    // Cached data for repeated reads from same region\n    std::vector<uint8_t> cachedData;\n    uint32_t cachedWidth = 0;\n    uint32_t cachedHeight = 0;\n    uint32_t cachedMipLevel = 0;\n    uint32_t cachedLayer = 0;\n    uint64_t cachedRowPitch = 0;\n    size_t cachedBytesPerPixel = 0;\n    UINT64 cachedFrameFenceValue = std::numeric_limits<UINT64>::max();\n    bool cacheValid = false;\n  };\n\n  mutable std::array<ReadbackResources, IGL_COLOR_ATTACHMENTS_MAX> readbackCache_{};\n  FramebufferDesc desc_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/HeadlessContext.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n/*\n * Minimal headless D3D12 context for unit tests (no swapchain / no HWND).\n */\n\n#include <igl/d3d12/HeadlessContext.h>\n\n#include <string>\n#include <igl/d3d12/DescriptorHeapManager.h>\n\nnamespace igl::d3d12 {\n\nnamespace {\n// Import ComPtr for readability\ntemplate<typename T>\nusing ComPtr = igl::d3d12::ComPtr<T>;\n} // namespace\n\nHeadlessD3D12Context::~HeadlessD3D12Context() = default;\n\nResult HeadlessD3D12Context::initializeHeadless(uint32_t width,\n                                                uint32_t height,\n                                                const D3D12ContextConfig& config) {\n  width_ = width;\n  height_ = height;\n\n  // Store and validate configuration.\n  config_ = config;\n  config_.validate();\n\n  // Headless mode: No swapchain, so use kMaxFramesInFlight as buffer count (T43)\n  swapchainBufferCount_ = kMaxFramesInFlight;\n  renderTargets_.resize(swapchainBufferCount_);\n  frameContexts_.resize(swapchainBufferCount_);\n  IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: Initialized with %u frame buffers (no swapchain)\\n\",\n                        swapchainBufferCount_);\n\n  // Initialize DXGI factory flags and debug configuration (mirrors windowed D3D12Context).\n  auto getEnvBool = [](const char* name, bool defaultValue) -> bool {\n    const char* value = std::getenv(name);\n    if (!value) {\n      return defaultValue;\n    }\n    return (std::string(value) == \"1\") || (std::string(value) == \"true\");\n  };\n\n  bool enableDebugLayer = getEnvBool(\"IGL_D3D12_DEBUG\",\n#ifdef _DEBUG\n                                     true // Default ON in debug builds\n#else\n                                     false // Default OFF in release builds\n#endif\n  );\n  bool enableGPUValidation = getEnvBool(\"IGL_D3D12_GPU_VALIDATION\", false);\n  bool enableDRED = getEnvBool(\"IGL_D3D12_DRED\",\n#ifdef _DEBUG\n                               true // Default ON in debug builds\n#else\n                               false // Default OFF in release builds\n#endif\n  );\n  bool enableDXGIDebug = getEnvBool(\"IGL_DXGI_DEBUG\",\n#ifdef _DEBUG\n                                    true // Default ON in debug builds\n#else\n                                    false // Default OFF in release builds\n#endif\n  );\n\n  IGL_D3D12_LOG_VERBOSE(\"=== Headless D3D12 Debug Configuration ===\\n\");\n  IGL_D3D12_LOG_VERBOSE(\"  Debug Layer:       %s\\n\", enableDebugLayer ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"  GPU Validation:    %s\\n\", enableGPUValidation ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"  DRED:              %s\\n\", enableDRED ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"  DXGI Debug:        %s\\n\", enableDXGIDebug ? \"ENABLED\" : \"DISABLED\");\n  IGL_D3D12_LOG_VERBOSE(\"=========================================\\n\");\n\n  UINT dxgiFactoryFlags = 0;\n\n  // Enable debug layer (and GPU-based validation) if configured.\n  if (enableDebugLayer) {\n    igl::d3d12::ComPtr<ID3D12Debug> debugController;\n    if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(debugController.GetAddressOf())))) {\n      debugController->EnableDebugLayer();\n      IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: Debug layer ENABLED\\n\");\n\n      if (enableDXGIDebug) {\n        dxgiFactoryFlags |= DXGI_CREATE_FACTORY_DEBUG;\n        IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: DXGI debug layer ENABLED\\n\");\n      }\n\n      if (enableGPUValidation) {\n        igl::d3d12::ComPtr<ID3D12Debug1> debugController1;\n        if (SUCCEEDED(\n                debugController->QueryInterface(IID_PPV_ARGS(debugController1.GetAddressOf())))) {\n          debugController1->SetEnableGPUBasedValidation(TRUE);\n          IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: GPU-Based Validation ENABLED\\n\");\n        } else {\n          IGL_LOG_ERROR(\n              \"HeadlessD3D12Context: Failed to enable GPU-Based Validation (requires \"\n              \"ID3D12Debug1)\\n\");\n        }\n      }\n    } else {\n      IGL_LOG_ERROR(\n          \"HeadlessD3D12Context: Failed to get D3D12 debug interface - Graphics Tools may not be \"\n          \"installed\\n\");\n    }\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: Debug layer DISABLED\\n\");\n  }\n\n  // Enable DRED if configured (Device Removed Extended Data for better crash diagnostics).\n  if (enableDRED) {\n    igl::d3d12::ComPtr<ID3D12DeviceRemovedExtendedDataSettings1> dredSettings1;\n    if (SUCCEEDED(D3D12GetDebugInterface(IID_PPV_ARGS(dredSettings1.GetAddressOf())))) {\n      dredSettings1->SetAutoBreadcrumbsEnablement(D3D12_DRED_ENABLEMENT_FORCED_ON);\n      dredSettings1->SetPageFaultEnablement(D3D12_DRED_ENABLEMENT_FORCED_ON);\n      dredSettings1->SetBreadcrumbContextEnablement(D3D12_DRED_ENABLEMENT_FORCED_ON);\n      IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: DRED 1.2 fully configured\\n\");\n    } else {\n      IGL_LOG_ERROR(\n          \"HeadlessD3D12Context: Failed to configure DRED (requires Windows 10 19041+)\\n\");\n    }\n  }\n\n  // Enable experimental features for headless contexts (unit tests)\n  // This allows unsigned DXIL shaders to run\n  // NOTE: This is ONLY called in headless mode (unit tests), NOT in windowed render sessions\n  {\n    UUID experimentalFeatures[] = {D3D12ExperimentalShaderModels};\n    HRESULT hr = D3D12EnableExperimentalFeatures(1, experimentalFeatures, nullptr, nullptr);\n    if (SUCCEEDED(hr)) {\n      IGL_D3D12_LOG_VERBOSE(\n          \"HeadlessD3D12Context: Experimental shader models enabled (allows unsigned DXIL)\\n\");\n    } else {\n      IGL_D3D12_LOG_VERBOSE(\n          \"HeadlessD3D12Context: Failed to enable experimental features (0x%08X) - signed DXIL \"\n          \"required\\n\",\n          static_cast<unsigned>(hr));\n    }\n  }\n\n  // Create DXGI factory with debug flag in debug builds.\n  HRESULT hr = CreateDXGIFactory2(dxgiFactoryFlags, IID_PPV_ARGS(dxgiFactory_.GetAddressOf()));\n  if (FAILED(hr)) {\n    return Result(Result::Code::RuntimeError, \"Failed to create DXGI factory\");\n  }\n\n  // Helper function to try creating device with progressive feature level fallback (A-004)\n  auto tryCreateDeviceWithFallback =\n      [](IDXGIAdapter1* adapter,\n         D3D_FEATURE_LEVEL& outFeatureLevel) -> igl::d3d12::ComPtr<ID3D12Device> {\n    const D3D_FEATURE_LEVEL featureLevels[] = {\n        D3D_FEATURE_LEVEL_12_2,\n        D3D_FEATURE_LEVEL_12_1,\n        D3D_FEATURE_LEVEL_12_0,\n        D3D_FEATURE_LEVEL_11_1,\n        D3D_FEATURE_LEVEL_11_0,\n    };\n\n    igl::d3d12::ComPtr<ID3D12Device> device;\n    for (D3D_FEATURE_LEVEL fl : featureLevels) {\n      HRESULT hr = D3D12CreateDevice(adapter, fl, IID_PPV_ARGS(device.GetAddressOf()));\n      if (SUCCEEDED(hr)) {\n        outFeatureLevel = fl;\n        IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: Device created with Feature Level %d.%d\\n\",\n                              (fl >> 12) & 0xF,\n                              (fl >> 8) & 0xF);\n        return device;\n      }\n    }\n    outFeatureLevel = static_cast<D3D_FEATURE_LEVEL>(0);\n    return nullptr;\n  };\n\n  auto featureLevelToString = [](D3D_FEATURE_LEVEL level) -> const char* {\n    switch (level) {\n    case D3D_FEATURE_LEVEL_12_2:\n      return \"12.2\";\n    case D3D_FEATURE_LEVEL_12_1:\n      return \"12.1\";\n    case D3D_FEATURE_LEVEL_12_0:\n      return \"12.0\";\n    case D3D_FEATURE_LEVEL_11_1:\n      return \"11.1\";\n    case D3D_FEATURE_LEVEL_11_0:\n      return \"11.0\";\n    default:\n      return \"Unknown\";\n    }\n  };\n\n  igl::d3d12::ComPtr<IDXGIFactory6> factory6;\n  (void)dxgiFactory_->QueryInterface(IID_PPV_ARGS(factory6.GetAddressOf()));\n\n  bool created = false;\n  D3D_FEATURE_LEVEL selectedFeatureLevel = D3D_FEATURE_LEVEL_11_0;\n\n  if (factory6.Get()) {\n    for (UINT i = 0;; ++i) {\n      igl::d3d12::ComPtr<IDXGIAdapter1> adapter;\n      if (FAILED(factory6->EnumAdapterByGpuPreference(\n              i, DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE, IID_PPV_ARGS(adapter.GetAddressOf())))) {\n        break;\n      }\n      DXGI_ADAPTER_DESC1 desc{};\n      adapter->GetDesc1(&desc);\n      if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) {\n        continue;\n      }\n\n      D3D_FEATURE_LEVEL featureLevel = static_cast<D3D_FEATURE_LEVEL>(0);\n      auto device = tryCreateDeviceWithFallback(adapter.Get(), featureLevel);\n      if (device.Get() != nullptr) {\n        device_ = device;\n        created = true;\n        selectedFeatureLevel = featureLevel;\n        IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: Selected HW adapter (FL %s)\\n\",\n                              featureLevelToString(featureLevel));\n        break;\n      }\n    }\n  }\n  if (!created) {\n    for (UINT i = 0;; ++i) {\n      igl::d3d12::ComPtr<IDXGIAdapter1> adapter;\n      if (dxgiFactory_->EnumAdapters1(i, adapter.GetAddressOf()) == DXGI_ERROR_NOT_FOUND) {\n        break;\n      }\n      DXGI_ADAPTER_DESC1 desc{};\n      adapter->GetDesc1(&desc);\n      if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE) {\n        continue;\n      }\n\n      D3D_FEATURE_LEVEL featureLevel = static_cast<D3D_FEATURE_LEVEL>(0);\n      auto device = tryCreateDeviceWithFallback(adapter.Get(), featureLevel);\n      if (device.Get() != nullptr) {\n        device_ = device;\n        created = true;\n        selectedFeatureLevel = featureLevel;\n        IGL_D3D12_LOG_VERBOSE(\n            \"HeadlessD3D12Context: Selected HW adapter via EnumAdapters1 (FL %s)\\n\",\n            featureLevelToString(featureLevel));\n        break;\n      }\n    }\n  }\n  if (!created) {\n    igl::d3d12::ComPtr<IDXGIAdapter> warp;\n    if (SUCCEEDED(dxgiFactory_->EnumWarpAdapter(IID_PPV_ARGS(warp.GetAddressOf())))) {\n      igl::d3d12::ComPtr<IDXGIAdapter1> warp1;\n      warp->QueryInterface(IID_PPV_ARGS(warp1.GetAddressOf()));\n      if (warp1.Get()) {\n        D3D_FEATURE_LEVEL featureLevel = static_cast<D3D_FEATURE_LEVEL>(0);\n        auto device = tryCreateDeviceWithFallback(warp1.Get(), featureLevel);\n        if (device.Get() != nullptr) {\n          device_ = device;\n          created = true;\n          selectedFeatureLevel = featureLevel;\n          IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: Using WARP adapter (FL %s)\\n\",\n                                featureLevelToString(featureLevel));\n        }\n      }\n    }\n  }\n  if (!created) {\n    return Result(Result::Code::RuntimeError, \"Failed to create any D3D12 device\");\n  }\n\n  // Store selected feature level (A-004)\n  selectedFeatureLevel_ = selectedFeatureLevel;\n\n#ifdef _DEBUG\n  {\n    igl::d3d12::ComPtr<ID3D12InfoQueue> infoQueue;\n    if (SUCCEEDED(device_->QueryInterface(IID_PPV_ARGS(infoQueue.GetAddressOf())))) {\n      infoQueue->SetBreakOnSeverity(D3D12_MESSAGE_SEVERITY_CORRUPTION, FALSE);\n      infoQueue->SetBreakOnSeverity(D3D12_MESSAGE_SEVERITY_ERROR, FALSE);\n      infoQueue->SetBreakOnSeverity(D3D12_MESSAGE_SEVERITY_WARNING, FALSE);\n    }\n  }\n#endif\n\n  // Create command queue\n  D3D12_COMMAND_QUEUE_DESC queueDesc = {};\n  queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;\n  queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;\n  hr = device_->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(commandQueue_.GetAddressOf()));\n  if (FAILED(hr)) {\n    return Result(Result::Code::RuntimeError, \"Failed to create command queue\");\n  }\n\n  // Create per-frame descriptor heaps (consistent with windowed D3D12Context)\n  // Allow override via env vars for headless tests\n  UINT cbvSrvUavHeapSize = 1024; // default matching Microsoft MiniEngine\n  {\n    char buf[32] = {};\n    const DWORD n = GetEnvironmentVariableA(\"IGL_D3D12_CBV_SRV_UAV_HEAP_SIZE\", buf, sizeof(buf));\n    if (n > 0) {\n      cbvSrvUavHeapSize = std::max<UINT>(256, static_cast<UINT>(strtoul(buf, nullptr, 10)));\n    }\n  }\n\n  UINT samplerHeapSize = kMaxSamplers; // Match D3D12_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE (2048)\n  {\n    char buf[32] = {};\n    const DWORD n = GetEnvironmentVariableA(\"IGL_D3D12_SAMPLER_HEAP_SIZE\", buf, sizeof(buf));\n    if (n > 0) {\n      samplerHeapSize = std::max<UINT>(16, static_cast<UINT>(strtoul(buf, nullptr, 10)));\n    }\n  }\n\n  // Cache descriptor sizes\n  cbvSrvUavDescriptorSize_ =\n      device_->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);\n  samplerDescriptorSize_ =\n      device_->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER);\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"HeadlessContext: Creating per-frame descriptor heaps (CBV/SRV/UAV=%u, Samplers=%u)...\\n\",\n      cbvSrvUavHeapSize,\n      samplerHeapSize);\n\n  // Create per-frame shader-visible descriptor heaps and an initial page for each frame.\n  for (UINT i = 0; i < swapchainBufferCount_; i++) {\n    // CBV/SRV/UAV heap per frame - create initial page\n    igl::d3d12::ComPtr<ID3D12DescriptorHeap> initialHeap;\n    D3D12_DESCRIPTOR_HEAP_DESC desc = {};\n    desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;\n    desc.NumDescriptors = cbvSrvUavHeapSize;\n    desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n    desc.NodeMask = 0;\n    hr = device_->CreateDescriptorHeap(&desc, IID_PPV_ARGS(initialHeap.GetAddressOf()));\n    if (FAILED(hr)) {\n      return Result(Result::Code::RuntimeError,\n                    \"Failed to create per-frame CBV/SRV/UAV heap for frame \" + std::to_string(i));\n    }\n\n    // Initialize page vector with first page\n    frameContexts_[i].cbvSrvUavHeapPages.clear();\n    frameContexts_[i].cbvSrvUavHeapPages.emplace_back(initialHeap, cbvSrvUavHeapSize);\n    frameContexts_[i].currentCbvSrvUavPageIndex = 0;\n\n    IGL_D3D12_LOG_VERBOSE(\n        \"  Frame %u: Created CBV/SRV/UAV heap page (%u descriptors)\\n\", i, cbvSrvUavHeapSize);\n\n    // Sampler heap per frame\n    desc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER;\n    desc.NumDescriptors = samplerHeapSize;\n    desc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n    desc.NodeMask = 0;\n    hr = device_->CreateDescriptorHeap(&desc,\n                                       IID_PPV_ARGS(frameContexts_[i].samplerHeap.GetAddressOf()));\n    if (FAILED(hr)) {\n      return Result(Result::Code::RuntimeError,\n                    \"Failed to create per-frame Sampler heap for frame \" + std::to_string(i));\n    }\n    IGL_D3D12_LOG_VERBOSE(\n        \"  Frame %u: Created Sampler heap (%u descriptors)\\n\", i, samplerHeapSize);\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"HeadlessContext: Per-frame descriptor heaps created successfully\\n\");\n\n  // Create per-frame command allocators (following Microsoft's D3D12HelloFrameBuffering pattern)\n  IGL_D3D12_LOG_VERBOSE(\"HeadlessContext: Creating per-frame command allocators...\\n\");\n  for (UINT i = 0; i < swapchainBufferCount_; i++) {\n    hr = device_->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                         IID_PPV_ARGS(frameContexts_[i].allocator.GetAddressOf()));\n    if (FAILED(hr)) {\n      return Result(Result::Code::RuntimeError,\n                    \"Failed to create command allocator for frame \" + std::to_string(i));\n    }\n    IGL_D3D12_LOG_VERBOSE(\"  Frame %u: Created command allocator\\n\", i);\n  }\n  IGL_D3D12_LOG_VERBOSE(\"HeadlessContext: Per-frame command allocators created successfully\\n\");\n\n  // Fence for GPU synchronization\n  hr = device_->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(fence_.GetAddressOf()));\n  if (FAILED(hr)) {\n    return Result(Result::Code::RuntimeError, \"Failed to create fence\");\n  }\n\n  // Create descriptor heap manager with the same sizes for consistency.\n  {\n    DescriptorHeapManager::Sizes sz{};\n    sz.cbvSrvUav = cbvSrvUavHeapSize;\n    sz.samplers = samplerHeapSize;\n    sz.rtvs = 64;\n    sz.dsvs = 32;\n    descriptorHeaps_ = std::make_unique<DescriptorHeapManager>();\n    const Result r = descriptorHeaps_->initialize(device_.Get(), sz);\n    if (!r.isOk()) {\n      IGL_LOG_ERROR(\"HeadlessD3D12Context: Failed to initialize descriptor heap manager: %s\\n\",\n                    r.message.c_str());\n      // Non-fatal: continue without a dedicated manager.\n      descriptorHeaps_.reset();\n    }\n    // Expose manager to base context for consumers that only see D3D12Context\n    heapMgr_ = descriptorHeaps_.get();\n  }\n\n  // Create command signatures for indirect drawing.\n  IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: Creating command signatures...\\n\");\n  Result commandSigResult = createCommandSignatures();\n  if (!commandSigResult.isOk()) {\n    IGL_LOG_ERROR(\"HeadlessD3D12Context: Failed to create command signatures: %s\\n\",\n                  commandSigResult.message.c_str());\n    return commandSigResult;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: Command signatures created successfully\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"HeadlessD3D12Context: Initialization complete\\n\");\n  return Result();\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/HeadlessContext.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n/*\n * Minimal headless D3D12 context for unit tests (no swapchain / no HWND).\n */\n\n#pragma once\n\n#include <memory>\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/DescriptorHeapManager.h>\n\nnamespace igl::d3d12 {\n\nclass HeadlessD3D12Context final : public D3D12Context {\n public:\n  HeadlessD3D12Context() = default;\n  ~HeadlessD3D12Context();\n\n  // Initialize a headless context with default dimensions used only for fallback viewports\n  // Accepts optional D3D12ContextConfig for configurable sizes.\n  // NOTE: Headless mode currently uses environment variable overrides and internal defaults\n  // for descriptor heap sizes. Config parameter is stored for base-class consistency and\n  // future extension but is not fully wired to all heap creation paths yet.\n  Result initializeHeadless(uint32_t width = 256,\n                            uint32_t height = 256,\n                            const D3D12ContextConfig& config = D3D12ContextConfig::defaultConfig());\n\n  // Access to descriptor heap manager for tests (may be null on failure)\n  [[nodiscard]] DescriptorHeapManager* getDescriptorHeapManager() const {\n    return descriptorHeaps_.get();\n  }\n\n private:\n  std::unique_ptr<DescriptorHeapManager> descriptorHeaps_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/PlatformDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/PlatformDevice.h>\n\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/Texture.h>\n\nnamespace igl::d3d12 {\n\nPlatformDevice::PlatformDevice(Device& device) : device_(device) {}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDepth(uint32_t width,\n                                                                       uint32_t height,\n                                                                       Result* outResult) {\n  auto& ctx = device_.getD3D12Context();\n\n  // Create depth texture with D3D12\n  TextureDesc depthDesc = TextureDesc::new2D(TextureFormat::Z_UNorm32,\n                                             width,\n                                             height,\n                                             TextureDesc::TextureUsageBits::Attachment,\n                                             \"Swapchain Depth Texture\");\n\n  // Allocate new depth texture if null or mismatches in size\n  if (!nativeDepthTexture_ || width != nativeDepthTexture_->getDimensions().width ||\n      height != nativeDepthTexture_->getDimensions().height) {\n    nativeDepthTexture_ = device_.createTexture(depthDesc, outResult);\n  }\n\n  Result::setResult(outResult, Result::Code::Ok);\n  return nativeDepthTexture_;\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(Result* outResult) {\n  IGL_D3D12_LOG_VERBOSE(\"PlatformDevice::createTextureFromNativeDrawable() called\\n\");\n  auto& ctx = device_.getD3D12Context();\n\n  // Get current back buffer from swapchain\n  uint32_t backBufferIndex = ctx.getCurrentBackBufferIndex();\n  ID3D12Resource* backBuffer = ctx.getCurrentBackBuffer();\n\n  IGL_D3D12_LOG_VERBOSE(\"  backBufferIndex=%u, backBuffer=%p\\n\", backBufferIndex, backBuffer);\n\n  if (!backBuffer) {\n    IGL_LOG_ERROR(\"  No back buffer available!\\n\");\n    Result::setResult(outResult, Result::Code::RuntimeError, \"No back buffer available\");\n    return nullptr;\n  }\n\n  // Get back buffer description\n  D3D12_RESOURCE_DESC desc = backBuffer->GetDesc();\n  const auto width = static_cast<uint32_t>(desc.Width);\n  const auto height = static_cast<uint32_t>(desc.Height);\n\n  // Determine texture format based on DXGI format\n  // IMPORTANT: Use dxgiFormatToTextureFormat() to get the CORRECT IGL format\n  // from the actual D3D12 resource format. Do NOT hardcode RGBA_SRGB!\n  igl::TextureFormat iglFormat = dxgiFormatToTextureFormat(desc.Format);\n  if (iglFormat == igl::TextureFormat::Invalid) {\n    IGL_LOG_ERROR(\"  Unsupported DXGI format: %d\\n\", desc.Format);\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Unsupported swapchain DXGI format\");\n    return nullptr;\n  }\n\n  // Ensure we have enough cached textures for swapchain images\n  while (nativeDrawableTextures_.size() <= backBufferIndex) {\n    nativeDrawableTextures_.push_back(nullptr);\n  }\n\n  // Allocate new drawable texture if null or mismatches\n  if (!nativeDrawableTextures_[backBufferIndex] ||\n      width != nativeDrawableTextures_[backBufferIndex]->getDimensions().width ||\n      height != nativeDrawableTextures_[backBufferIndex]->getDimensions().height) {\n    TextureDesc textureDesc;\n    textureDesc.type = TextureType::TwoD;\n    textureDesc.format = iglFormat;\n    textureDesc.width = width;\n    textureDesc.height = height;\n    textureDesc.depth = 1;\n    textureDesc.numLayers = 1;\n    textureDesc.numSamples = 1;\n    textureDesc.numMipLevels = 1;\n    textureDesc.usage = TextureDesc::TextureUsageBits::Attachment;\n    textureDesc.debugName = \"Swapchain Back Buffer\";\n\n    nativeDrawableTextures_[backBufferIndex] =\n        Texture::createFromResource(backBuffer,\n                                    iglFormat,\n                                    textureDesc,\n                                    ctx.getDevice(),\n                                    ctx.getCommandQueue(),\n                                    D3D12_RESOURCE_STATE_PRESENT);\n\n    if (!nativeDrawableTextures_[backBufferIndex]) {\n      Result::setResult(\n          outResult, Result::Code::RuntimeError, \"Failed to create texture from back buffer\");\n      return nullptr;\n    }\n  }\n\n  Result::setResult(outResult, Result::Code::Ok);\n  return nativeDrawableTextures_[backBufferIndex];\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/PlatformDevice.h>\n#include <igl/Texture.h>\n\nnamespace igl::d3d12 {\n\nclass Device;\n\n/// @brief Implements the igl::IPlatformDevice interface for D3D12\nclass PlatformDevice : public IPlatformDevice {\n public:\n  static constexpr igl::PlatformDeviceType kType = igl::PlatformDeviceType::D3D12;\n\n  explicit PlatformDevice(Device& device);\n  ~PlatformDevice() override = default;\n\n  /// Creates a Depth Texture from the D3D12 swapchain\n  /// @param width Width of the depth texture\n  /// @param height Height of the depth texture\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::shared_ptr<ITexture> createTextureFromNativeDepth(uint32_t width,\n                                                         uint32_t height,\n                                                         Result* outResult);\n\n  /// Creates a texture from the D3D12 swapchain back buffer\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(Result* outResult);\n\n  /// Clear the cached textures\n  void clear() {\n    nativeDrawableTextures_.clear();\n    nativeDepthTexture_ = nullptr;\n  }\n\n protected:\n  [[nodiscard]] bool isType(PlatformDeviceType t) const noexcept override {\n    return t == kType;\n  }\n\n private:\n  Device& device_;\n  std::vector<std::shared_ptr<ITexture>> nativeDrawableTextures_;\n  std::shared_ptr<ITexture> nativeDepthTexture_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/RenderCommandEncoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/RenderCommandEncoder.h>\n\n#include <cstdlib>\n#include <igl/RenderPass.h>\n#include <igl/d3d12/Buffer.h>\n#include <igl/d3d12/CommandBuffer.h>\n#include <igl/d3d12/DescriptorHeapManager.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/HeadlessContext.h>\n#include <igl/d3d12/RenderPipelineState.h>\n#include <igl/d3d12/SamplerState.h>\n#include <igl/d3d12/Texture.h>\n\nnamespace igl::d3d12 {\n\nRenderCommandEncoder::RenderCommandEncoder(CommandBuffer& commandBuffer,\n                                           const std::shared_ptr<IFramebuffer>& framebuffer) :\n  IRenderCommandEncoder(nullptr),\n  commandBuffer_(commandBuffer),\n  commandList_(commandBuffer.getCommandList()),\n  resourcesBinder_(commandBuffer, false /* isCompute */),\n  framebuffer_(framebuffer) {\n  IGL_D3D12_LOG_VERBOSE(\n      \"RenderCommandEncoder::RenderCommandEncoder() - Lightweight initialization\\n\");\n}\n\nvoid RenderCommandEncoder::begin(const RenderPassDesc& renderPass) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::begin() - command list is closed or null\\n\");\n    return;\n  }\n  // Enforce single-call semantics: begin() allocates descriptors and cannot be safely called twice.\n  IGL_DEBUG_ASSERT(!hasBegun_, \"begin() called multiple times - this will cause resource leaks\");\n  hasBegun_ = true;\n\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder::begin() - START\\n\");\n  auto& context = commandBuffer_.getContext();\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Got context\\n\");\n\n  // Set descriptor heaps for this command list.\n  // Must use per-frame heaps from D3D12Context, not DescriptorHeapManager.\n  // Per-frame heaps are isolated per frame to prevent descriptor conflicts.\n  DescriptorHeapManager* heapMgr = context.getDescriptorHeapManager();\n\n  // Use active heap from frame context, not the legacy accessor.\n  // This ensures we bind the currently active page, not hardcoded page 0.\n  auto& frameCtx = context.getFrameContexts()[context.getCurrentFrameIndex()];\n  cbvSrvUavHeap_ = frameCtx.activeCbvSrvUavHeap.Get();\n  samplerHeap_ = frameCtx.samplerHeap.Get();\n\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Using active per-frame heap from FrameContext\\n\");\n\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: CBV/SRV/UAV heap (active) = %p\\n\", cbvSrvUavHeap_);\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Sampler heap = %p\\n\", samplerHeap_);\n\n  // Bind active heap (may be page 0 or a later page).\n  ID3D12DescriptorHeap* heaps[] = {cbvSrvUavHeap_, samplerHeap_};\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Setting descriptor heaps...\\n\");\n  commandList_->SetDescriptorHeaps(2, heaps);\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Descriptor heaps set\\n\");\n\n  // Create RTV from framebuffer if provided; otherwise fallback to swapchain RTV\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Setting up RTV...\\n\");\n  D3D12_CPU_DESCRIPTOR_HANDLE rtv = {};\n  std::vector<D3D12_CPU_DESCRIPTOR_HANDLE> rtvs;\n  rtvIndices_.clear();\n  bool usedOffscreenRTV = false;\n  // Note: heapMgr already retrieved above for setting descriptor heaps\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: DescriptorHeapManager = %p\\n\", heapMgr);\n\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Checking framebuffer_=%p\\n\", framebuffer_.get());\n  // Only create offscreen RTV if we have DescriptorHeapManager AND it's not a swapchain texture\n  // Swapchain textures should use context.getCurrentRTV() directly\n  if (framebuffer_ && framebuffer_->getColorAttachment(0) && heapMgr) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"RenderCommandEncoder: Has framebuffer with color attachment AND DescriptorHeapManager\\n\");\n    ID3D12Device* device = context.getDevice();\n    if (device) {\n      // Create RTVs for each color attachment\n      const size_t count = std::min<size_t>(framebuffer_->getColorAttachmentIndices().size(),\n                                            D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT);\n      IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: MRT count = %zu (indices.size=%zu)\\n\",\n                            count,\n                            framebuffer_->getColorAttachmentIndices().size());\n      for (size_t i = 0; i < count; ++i) {\n        auto tex = std::static_pointer_cast<Texture>(framebuffer_->getColorAttachment(i));\n        IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: MRT loop i=%zu, tex=%p, resource=%p\\n\",\n                              i,\n                              tex.get(),\n                              tex ? tex->getResource() : nullptr);\n        if (!tex || !tex->getResource()) {\n          IGL_D3D12_LOG_VERBOSE(\n              \"RenderCommandEncoder: MRT loop i=%zu SKIPPED (null tex or resource)\\n\", i);\n          continue;\n        }\n        const bool hasAttachmentDesc = (i < renderPass.colorAttachments.size());\n        // CRITICAL: Extract values before using in expressions to avoid MSVC debug iterator checks\n        const uint32_t mipLevel = hasAttachmentDesc ? renderPass.colorAttachments[i].mipLevel : 0;\n        const uint32_t attachmentLayer = hasAttachmentDesc ? renderPass.colorAttachments[i].layer\n                                                           : 0;\n        const uint32_t attachmentFace = hasAttachmentDesc ? renderPass.colorAttachments[i].face : 0;\n        // Allocate RTV\n        uint32_t rtvIdx = heapMgr->allocateRTV();\n        if (rtvIdx == UINT32_MAX) {\n          IGL_LOG_ERROR(\n              \"RenderCommandEncoder: Failed to allocate RTV descriptor (heap exhausted)\\n\");\n          continue;\n        }\n        // Check return value from getHandle.\n        D3D12_CPU_DESCRIPTOR_HANDLE rtvHandle;\n        if (!heapMgr->getRTVHandle(rtvIdx, &rtvHandle)) {\n          IGL_LOG_ERROR(\"RenderCommandEncoder: Failed to get RTV handle for index %u\\n\", rtvIdx);\n          heapMgr->freeRTV(rtvIdx);\n          continue;\n        }\n        rtvIndices_.push_back(rtvIdx);\n        // Create RTV view - use the resource's actual format to avoid SRGB/UNORM mismatches\n        D3D12_RESOURCE_DESC resourceDesc = tex->getResource()->GetDesc();\n        D3D12_RENDER_TARGET_VIEW_DESC rdesc = {};\n        rdesc.Format = resourceDesc.Format; // Use actual D3D12 resource format, not IGL format\n\n        // Determine if this is a texture array or texture view.\n        // Cube textures are stored as 2D array resources (6 slices per cube).\n        const bool isView = tex->isView();\n        const bool isCubeTexture = (tex->getType() == TextureType::Cube);\n        const uint32_t arraySliceOffset = isView ? tex->getArraySliceOffset() : 0;\n        const uint32_t totalArraySlices = isView ? tex->getNumArraySlicesInView()\n                                                 : resourceDesc.DepthOrArraySize;\n        const bool isArrayTexture = !isCubeTexture &&\n                                    ((isView && tex->getNumArraySlicesInView() > 0) ||\n                                     (!isView && resourceDesc.DepthOrArraySize > 1));\n        uint32_t targetArraySlice = attachmentLayer;\n        if (isCubeTexture) {\n          // Cube textures map faces onto 2D array slices. See Texture Subresources (D3D12).\n          const uint32_t clampedFace = std::min<uint32_t>(attachmentFace, 5u);\n          const uint32_t cubesInView = (totalArraySlices + 5u) / 6u;\n          const uint32_t clampedCubeIndex =\n              std::min<uint32_t>(attachmentLayer, (cubesInView == 0u) ? 0u : (cubesInView - 1u));\n          const uint32_t baseSlice = arraySliceOffset + clampedCubeIndex * 6u;\n          const uint32_t maxSlice = (totalArraySlices > 0u)\n                                        ? (arraySliceOffset + totalArraySlices - 1u)\n                                        : arraySliceOffset;\n          targetArraySlice = std::min<uint32_t>(baseSlice + clampedFace, maxSlice);\n        }\n\n        // Set view dimension based on sample count (MSAA support) and array type\n        if (resourceDesc.SampleDesc.Count > 1) {\n          // MSAA texture\n          if (isCubeTexture) {\n            rdesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY;\n            rdesc.Texture2DMSArray.FirstArraySlice = targetArraySlice;\n            rdesc.Texture2DMSArray.ArraySize = 1;\n            IGL_D3D12_LOG_VERBOSE(\n                \"RenderCommandEncoder: Creating MSAA cube RTV with %u samples, face %u, cube index \"\n                \"%u (array slice %u)\\n\",\n                resourceDesc.SampleDesc.Count,\n                attachmentFace,\n                attachmentLayer,\n                rdesc.Texture2DMSArray.FirstArraySlice);\n          } else if (isArrayTexture) {\n            // MSAA texture array - use TEXTURE2DMSARRAY view dimension\n            rdesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMSARRAY;\n            if (isView) {\n              rdesc.Texture2DMSArray.FirstArraySlice = tex->getArraySliceOffset();\n              rdesc.Texture2DMSArray.ArraySize = tex->getNumArraySlicesInView();\n            } else {\n              rdesc.Texture2DMSArray.FirstArraySlice = attachmentLayer;\n              rdesc.Texture2DMSArray.ArraySize = 1; // Render to single layer\n            }\n            IGL_D3D12_LOG_VERBOSE(\n                \"RenderCommandEncoder: Creating MSAA array RTV with %u samples, layer %u\\n\",\n                resourceDesc.SampleDesc.Count,\n                rdesc.Texture2DMSArray.FirstArraySlice);\n          } else {\n            // MSAA non-array texture - use TEXTURE2DMS view dimension\n            rdesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DMS;\n            IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Creating MSAA RTV with %u samples\\n\",\n                                  resourceDesc.SampleDesc.Count);\n          }\n        } else {\n          // Non-MSAA texture\n          if (isCubeTexture) {\n            rdesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY;\n            rdesc.Texture2DArray.MipSlice = mipLevel;\n            rdesc.Texture2DArray.PlaneSlice = 0;\n            rdesc.Texture2DArray.FirstArraySlice = targetArraySlice;\n            rdesc.Texture2DArray.ArraySize = 1;\n            IGL_D3D12_LOG_VERBOSE(\n                \"RenderCommandEncoder: Creating cube RTV, mip %u, face %u, cube index %u (array \"\n                \"slice %u)\\n\",\n                mipLevel,\n                attachmentFace,\n                attachmentLayer,\n                rdesc.Texture2DArray.FirstArraySlice);\n          } else if (isArrayTexture) {\n            // Texture array - use TEXTURE2DARRAY view dimension\n            rdesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2DARRAY;\n            // CRITICAL: Extract value before assignment to avoid MSVC debug iterator bounds check\n            const uint32_t mipSliceArray = (i < renderPass.colorAttachments.size())\n                                               ? renderPass.colorAttachments[i].mipLevel\n                                               : 0;\n            rdesc.Texture2DArray.MipSlice = mipSliceArray;\n            rdesc.Texture2DArray.PlaneSlice = 0;\n            if (isView) {\n              rdesc.Texture2DArray.FirstArraySlice = tex->getArraySliceOffset();\n              rdesc.Texture2DArray.ArraySize = tex->getNumArraySlicesInView();\n            } else {\n              rdesc.Texture2DArray.FirstArraySlice = attachmentLayer;\n              rdesc.Texture2DArray.ArraySize = 1; // Render to single layer\n            }\n            IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Creating array RTV, mip %u, layer %u\\n\",\n                                  rdesc.Texture2DArray.MipSlice,\n                                  rdesc.Texture2DArray.FirstArraySlice);\n          } else {\n            // Non-array texture - use standard TEXTURE2D view dimension\n            rdesc.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;\n            // CRITICAL: Extract value before assignment to avoid MSVC debug iterator bounds check\n            const uint32_t mipSlice2D = (i < renderPass.colorAttachments.size())\n                                            ? renderPass.colorAttachments[i].mipLevel\n                                            : 0;\n            rdesc.Texture2D.MipSlice = mipSlice2D;\n            rdesc.Texture2D.PlaneSlice = 0;\n            IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Creating RTV, mip %u\\n\",\n                                  rdesc.Texture2D.MipSlice);\n          }\n        }\n        // Pre-creation validation.\n        IGL_DEBUG_ASSERT(device != nullptr, \"Device is null before CreateRenderTargetView\");\n        IGL_DEBUG_ASSERT(tex->getResource() != nullptr,\n                         \"Texture resource is null before CreateRenderTargetView\");\n        IGL_DEBUG_ASSERT(rtvHandle.ptr != 0, \"RTV descriptor handle is invalid\");\n\n        device->CreateRenderTargetView(tex->getResource(), &rdesc, rtvHandle);\n\n        // Transition to RENDER_TARGET\n        // IMPORTANT: For multi-frame rendering, offscreen targets may have been transitioned to\n        // PIXEL_SHADER_RESOURCE in the previous frame's endEncoding(). We MUST transition them\n        // back to RENDER_TARGET at the start of each render pass.\n        // The transitionTo() function checks current state and only transitions if needed.\n        const uint32_t transitionSlice = isCubeTexture ? targetArraySlice : attachmentLayer;\n        tex->transitionTo(\n            commandList_, D3D12_RESOURCE_STATE_RENDER_TARGET, mipLevel, transitionSlice);\n\n        // Clear if requested\n        if (hasAttachmentDesc && renderPass.colorAttachments[i].loadAction == LoadAction::Clear) {\n          const auto& clearColor = renderPass.colorAttachments[i].clearColor;\n          const float color[] = {clearColor.r, clearColor.g, clearColor.b, clearColor.a};\n          IGL_D3D12_LOG_VERBOSE(\n              \"RenderCommandEncoder: Clearing MRT attachment %zu with color (%.2f, %.2f, %.2f, \"\n              \"%.2f)\\n\",\n              i,\n              color[0],\n              color[1],\n              color[2],\n              color[3]);\n          commandList_->ClearRenderTargetView(rtvHandle, color, 0, nullptr);\n        } else {\n          // CRITICAL: Must extract value completely outside ternary to avoid MSVC debug iterator\n          // check\n          int loadActionDbg = -1;\n          if (i < renderPass.colorAttachments.size()) {\n            loadActionDbg = (int)renderPass.colorAttachments[i].loadAction;\n          }\n          IGL_D3D12_LOG_VERBOSE(\n              \"RenderCommandEncoder: NOT clearing MRT attachment %zu (loadAction=%d, \"\n              \"hasAttachment=%d)\\n\",\n              i,\n              loadActionDbg,\n              i < renderPass.colorAttachments.size());\n        }\n        rtvs.push_back(rtvHandle);\n        IGL_D3D12_LOG_VERBOSE(\n            \"RenderCommandEncoder: MRT Created RTV #%zu, total RTVs now=%zu\\n\", i, rtvs.size());\n      }\n      IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: MRT Total RTVs created: %zu\\n\", rtvs.size());\n      if (!rtvs.empty()) {\n        rtv = rtvs[0];\n        usedOffscreenRTV = true;\n      }\n    }\n  }\n  if (!usedOffscreenRTV) {\n    IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Using swapchain back buffer\\n\");\n    auto* backBuffer = context.getCurrentBackBuffer();\n    IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Got back buffer=%p\\n\", backBuffer);\n    if (!backBuffer) {\n      IGL_LOG_ERROR(\"RenderCommandEncoder: No back buffer available\\n\");\n      return;\n    }\n    IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Transitioning back buffer to RENDER_TARGET\\n\");\n    D3D12_RESOURCE_BARRIER barrier = {};\n    barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n    barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;\n    barrier.Transition.pResource = backBuffer;\n    barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_PRESENT;\n    barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;\n    barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n    commandList_->ResourceBarrier(1, &barrier);\n    IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Resource barrier executed\\n\");\n\n    if (!renderPass.colorAttachments.empty() &&\n        renderPass.colorAttachments[0].loadAction == LoadAction::Clear) {\n      IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Clearing render target\\n\");\n      const auto& cc = renderPass.colorAttachments[0].clearColor;\n      const float col[] = {cc.r, cc.g, cc.b, cc.a};\n      D3D12_CPU_DESCRIPTOR_HANDLE swapRtv = context.getCurrentRTV();\n      commandList_->ClearRenderTargetView(swapRtv, col, 0, nullptr);\n      IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Clear complete\\n\");\n    }\n    rtv = context.getCurrentRTV();\n    IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Got RTV handle\\n\");\n  }\n\n  // Create/Bind depth-stencil view if we have a framebuffer with a depth attachment\n  const bool hasDepth = (framebuffer_ && framebuffer_->getDepthAttachment());\n  if (hasDepth) {\n    auto depthTex =\n        std::static_pointer_cast<igl::d3d12::Texture>(framebuffer_->getDepthAttachment());\n    ID3D12Device* device = context.getDevice();\n    if (device && depthTex && depthTex->getResource()) {\n      if (heapMgr) {\n        dsvIndex_ = heapMgr->allocateDSV();\n        // Check return value from getHandle.\n        if (!heapMgr->getDSVHandle(dsvIndex_, &dsvHandle_)) {\n          IGL_LOG_ERROR(\"RenderCommandEncoder: Failed to get DSV handle for index %u\\n\", dsvIndex_);\n          heapMgr->freeDSV(dsvIndex_);\n          dsvIndex_ = UINT32_MAX;\n          return;\n        }\n      } else {\n        // Fallback: transient heap\n        igl::d3d12::ComPtr<ID3D12DescriptorHeap> tmpHeap;\n        D3D12_DESCRIPTOR_HEAP_DESC dsvHeapDesc = {};\n        dsvHeapDesc.NumDescriptors = 1;\n        dsvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_DSV;\n        dsvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;\n        device->CreateDescriptorHeap(&dsvHeapDesc, IID_PPV_ARGS(tmpHeap.GetAddressOf()));\n        dsvHandle_ = tmpHeap->GetCPUDescriptorHandleForHeapStart();\n      }\n\n      // Create DSV description\n      D3D12_DEPTH_STENCIL_VIEW_DESC dsvDesc = {};\n      dsvDesc.Format = textureFormatToDXGIFormat(depthTex->getFormat());\n      dsvDesc.Flags = D3D12_DSV_FLAG_NONE;\n\n      // Set view dimension based on sample count (MSAA support)\n      D3D12_RESOURCE_DESC depthResourceDesc = depthTex->getResource()->GetDesc();\n      if (depthResourceDesc.SampleDesc.Count > 1) {\n        // MSAA depth texture - use TEXTURE2DMS view dimension\n        dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2DMS;\n        IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Creating MSAA DSV with %u samples\\n\",\n                              depthResourceDesc.SampleDesc.Count);\n      } else {\n        // Non-MSAA depth texture - use standard TEXTURE2D view dimension\n        dsvDesc.ViewDimension = D3D12_DSV_DIMENSION_TEXTURE2D;\n        dsvDesc.Texture2D.MipSlice = renderPass.depthAttachment.mipLevel;\n      }\n\n      // Transition the entire depth resource to DEPTH_WRITE before clearing.\n      // Some render paths (e.g. mipmapped depth) may have touched multiple\n      // subresources; using transitionAll ensures the clear sees a valid state\n      // for every subresource referenced by this DSV.\n      depthTex->transitionAll(commandList_, D3D12_RESOURCE_STATE_DEPTH_WRITE);\n\n      // Pre-creation validation.\n      IGL_DEBUG_ASSERT(device != nullptr, \"Device is null before CreateDepthStencilView\");\n      IGL_DEBUG_ASSERT(depthTex->getResource() != nullptr, \"Depth texture resource is null\");\n      IGL_DEBUG_ASSERT(dsvHandle_.ptr != 0, \"DSV descriptor handle is invalid\");\n\n      device->CreateDepthStencilView(depthTex->getResource(), &dsvDesc, dsvHandle_);\n\n      // Clear depth and/or stencil if requested\n      const bool clearDepth = (renderPass.depthAttachment.loadAction == LoadAction::Clear);\n      const bool clearStencil = (renderPass.stencilAttachment.loadAction == LoadAction::Clear);\n\n      if (clearDepth || clearStencil) {\n        D3D12_CLEAR_FLAGS clearFlags = static_cast<D3D12_CLEAR_FLAGS>(0);\n        if (clearDepth) {\n          clearFlags = static_cast<D3D12_CLEAR_FLAGS>(clearFlags | D3D12_CLEAR_FLAG_DEPTH);\n        }\n        if (clearStencil) {\n          clearFlags = static_cast<D3D12_CLEAR_FLAGS>(clearFlags | D3D12_CLEAR_FLAG_STENCIL);\n        }\n\n        const float depthClearValue = renderPass.depthAttachment.clearDepth;\n        const UINT8 stencilClearValue =\n            static_cast<UINT8>(renderPass.stencilAttachment.clearStencil);\n\n        commandList_->ClearDepthStencilView(\n            dsvHandle_, clearFlags, depthClearValue, stencilClearValue, 0, nullptr);\n\n        IGL_D3D12_LOG_VERBOSE(\n            \"RenderCommandEncoder: Cleared depth-stencil (depth=%d, stencil=%d, depthVal=%.2f, \"\n            \"stencilVal=%u)\\n\",\n            clearDepth,\n            clearStencil,\n            depthClearValue,\n            stencilClearValue);\n      }\n\n      // Bind RTV + DSV (or DSV-only for depth-only rendering)\n      if (!rtvs.empty()) {\n        // Multi-render target or offscreen rendering with color+depth\n        IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: OMSetRenderTargets with %zu RTVs + DSV\\n\",\n                              rtvs.size());\n        commandList_->OMSetRenderTargets(\n            static_cast<UINT>(rtvs.size()), rtvs.data(), FALSE, &dsvHandle_);\n      } else if (usedOffscreenRTV) {\n        // Single offscreen render target with depth\n        IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: OMSetRenderTargets with 1 RTV + DSV\\n\");\n        commandList_->OMSetRenderTargets(1, &rtv, FALSE, &dsvHandle_);\n      } else if (!framebuffer_->getColorAttachment(0)) {\n        // Depth-only rendering (no color attachments) - shadow mapping scenario\n        IGL_D3D12_LOG_VERBOSE(\n            \"RenderCommandEncoder: Depth-only rendering - OMSetRenderTargets with 0 RTVs + DSV\\n\");\n        commandList_->OMSetRenderTargets(0, nullptr, FALSE, &dsvHandle_);\n      } else {\n        // Swapchain backbuffer with depth\n        IGL_D3D12_LOG_VERBOSE(\n            \"RenderCommandEncoder: OMSetRenderTargets with swapchain RTV + DSV\\n\");\n        commandList_->OMSetRenderTargets(1, &rtv, FALSE, &dsvHandle_);\n      }\n    } else {\n      IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Binding RTV without DSV (no resource)\\n\");\n      if (!rtvs.empty()) {\n        IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: OMSetRenderTargets with %zu RTVs, no DSV\\n\",\n                              rtvs.size());\n        commandList_->OMSetRenderTargets(\n            static_cast<UINT>(rtvs.size()), rtvs.data(), FALSE, nullptr);\n      } else {\n        IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: OMSetRenderTargets with 1 RTV, no DSV\\n\");\n        commandList_->OMSetRenderTargets(1, &rtv, FALSE, nullptr);\n      }\n    }\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Binding RTV without DSV (no hasDepth)\\n\");\n    if (!rtvs.empty()) {\n      IGL_D3D12_LOG_VERBOSE(\n          \"RenderCommandEncoder: OMSetRenderTargets with %zu RTVs, no DSV (no hasDepth)\\n\",\n          rtvs.size());\n      commandList_->OMSetRenderTargets(static_cast<UINT>(rtvs.size()), rtvs.data(), FALSE, nullptr);\n    } else {\n      IGL_D3D12_LOG_VERBOSE(\n          \"RenderCommandEncoder: OMSetRenderTargets with 1 RTV, no DSV (no hasDepth)\\n\");\n      commandList_->OMSetRenderTargets(1, &rtv, FALSE, nullptr);\n    }\n  }\n\n  // Set a default full-screen viewport/scissor if caller forgets. Prefer framebuffer attachments.\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Setting default viewport...\\n\");\n  if (framebuffer_) {\n    // Prefer color attachment if present; otherwise fall back to depth attachment.\n    auto colorTex = std::static_pointer_cast<Texture>(framebuffer_->getColorAttachment(0));\n    auto depthTex = std::static_pointer_cast<Texture>(framebuffer_->getDepthAttachment());\n\n    Dimensions dims{};\n    if (colorTex && colorTex->getResource()) {\n      dims = colorTex->getDimensions();\n      IGL_D3D12_LOG_VERBOSE(\n          \"RenderCommandEncoder: Using framebuffer color attachment dimensions: %ux%u\\n\",\n          dims.width,\n          dims.height);\n    } else if (depthTex && depthTex->getResource()) {\n      dims = depthTex->getDimensions();\n      IGL_D3D12_LOG_VERBOSE(\n          \"RenderCommandEncoder: Using framebuffer depth attachment dimensions: %ux%u\\n\",\n          dims.width,\n          dims.height);\n    }\n\n    if (dims.width > 0 && dims.height > 0) {\n      D3D12_VIEWPORT vp{};\n      vp.TopLeftX = 0;\n      vp.TopLeftY = 0;\n      vp.Width = static_cast<FLOAT>(dims.width);\n      vp.Height = static_cast<FLOAT>(dims.height);\n      vp.MinDepth = 0.0f;\n      vp.MaxDepth = 1.0f;\n      commandList_->RSSetViewports(1, &vp);\n\n      D3D12_RECT sc{};\n      sc.left = 0;\n      sc.top = 0;\n      sc.right = static_cast<LONG>(dims.width);\n      sc.bottom = static_cast<LONG>(dims.height);\n      commandList_->RSSetScissorRects(1, &sc);\n\n      IGL_D3D12_LOG_VERBOSE(\n          \"RenderCommandEncoder: Set default viewport/scissor to %ux%u\\n\", dims.width, dims.height);\n    } else {\n      IGL_LOG_ERROR(\n          \"RenderCommandEncoder: Framebuffer has no valid color or depth attachment dimensions; \"\n          \"falling back to back buffer viewport.\\n\");\n      auto* backBufferRes = context.getCurrentBackBuffer();\n      if (backBufferRes) {\n        D3D12_RESOURCE_DESC bbDesc = backBufferRes->GetDesc();\n        D3D12_VIEWPORT vp{};\n        vp.TopLeftX = 0;\n        vp.TopLeftY = 0;\n        vp.Width = static_cast<FLOAT>(bbDesc.Width);\n        vp.Height = static_cast<FLOAT>(bbDesc.Height);\n        vp.MinDepth = 0.0f;\n        vp.MaxDepth = 1.0f;\n        commandList_->RSSetViewports(1, &vp);\n\n        D3D12_RECT scissor{};\n        scissor.left = 0;\n        scissor.top = 0;\n        scissor.right = static_cast<LONG>(bbDesc.Width);\n        scissor.bottom = static_cast<LONG>(bbDesc.Height);\n        commandList_->RSSetScissorRects(1, &scissor);\n\n        IGL_D3D12_LOG_VERBOSE(\n            \"RenderCommandEncoder: Fallback viewport/scissor to back buffer %llux%u\\n\",\n            bbDesc.Width,\n            bbDesc.Height);\n      } else {\n        IGL_LOG_ERROR(\"RenderCommandEncoder: No back buffer available!\\n\");\n      }\n    }\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Using back buffer\\n\");\n    auto* backBufferRes = context.getCurrentBackBuffer();\n    if (backBufferRes) {\n      D3D12_RESOURCE_DESC bbDesc = backBufferRes->GetDesc();\n      IGL_D3D12_LOG_VERBOSE(\n          \"RenderCommandEncoder: Back buffer dimensions: %llux%u\\n\", bbDesc.Width, bbDesc.Height);\n      D3D12_VIEWPORT vp = {};\n      vp.TopLeftX = 0;\n      vp.TopLeftY = 0;\n      vp.Width = (float)bbDesc.Width;\n      vp.Height = (float)bbDesc.Height;\n      vp.MinDepth = 0;\n      vp.MaxDepth = 1;\n      commandList_->RSSetViewports(1, &vp);\n      D3D12_RECT scissor = {};\n      scissor.left = 0;\n      scissor.top = 0;\n      scissor.right = (LONG)bbDesc.Width;\n      scissor.bottom = (LONG)bbDesc.Height;\n      commandList_->RSSetScissorRects(1, &scissor);\n      IGL_D3D12_LOG_VERBOSE(\n          \"RenderCommandEncoder: Set default viewport/scissor to back buffer %llux%u\\n\",\n          bbDesc.Width,\n          bbDesc.Height);\n    } else {\n      IGL_LOG_ERROR(\"RenderCommandEncoder: No back buffer available!\\n\");\n    }\n  }\n\n  // Capture actual framebuffer formats for dynamic PSO selection (Vulkan-style pattern)\n  // This enables PSO variants to be selected at draw time based on framebuffer formats\n  dynamicState_ = D3D12RenderPipelineDynamicState(); // Reset to UNKNOWN\n\n  // Capture RTV formats from actual framebuffer resources\n  // IMPORTANT: Use Texture::getFormat() not resource format - texture views may have different\n  // formats\n  if (framebuffer_) {\n    const size_t numColorAttachments = std::min<size_t>(\n        framebuffer_->getColorAttachmentIndices().size(), D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT);\n    for (size_t i = 0; i < numColorAttachments; ++i) {\n      auto colorTex =\n          std::static_pointer_cast<igl::d3d12::Texture>(framebuffer_->getColorAttachment(i));\n      if (colorTex) {\n        // Use getFormat() which returns the view format, not the resource format\n        dynamicState_.rtvFormats[i] = textureFormatToDXGIFormat(colorTex->getFormat());\n      }\n    }\n\n    // Capture DSV format\n    auto depthTex =\n        std::static_pointer_cast<igl::d3d12::Texture>(framebuffer_->getDepthAttachment());\n    if (depthTex) {\n      // Use getFormat() which returns the view format, not the resource format\n      dynamicState_.dsvFormat = textureFormatToDXGIFormat(depthTex->getFormat());\n    }\n  } else {\n    // Fallback: swapchain back buffer\n    auto* backBuffer = context.getCurrentBackBuffer();\n    if (backBuffer) {\n      D3D12_RESOURCE_DESC bbDesc = backBuffer->GetDesc();\n      dynamicState_.rtvFormats[0] = bbDesc.Format;\n    }\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"RenderCommandEncoder::begin() - Captured framebuffer formats: RTV[0]=%d, DSV=%d\\n\",\n      static_cast<int>(dynamicState_.rtvFormats[0]),\n      static_cast<int>(dynamicState_.dsvFormat));\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder::begin() - Complete!\\n\");\n}\n\nvoid RenderCommandEncoder::endEncoding() {\n  auto& context2 = commandBuffer_.getContext();\n\n  // ========== MSAA RESOLVE OPERATION ==========\n  // Resolve MSAA textures to non-MSAA textures before transitioning resources\n  // This must happen AFTER rendering but BEFORE the final state transitions\n  if (framebuffer_) {\n    // Resolve color attachments\n    const auto indices = framebuffer_->getColorAttachmentIndices();\n    for (size_t i : indices) {\n      auto msaaAttachment = std::static_pointer_cast<Texture>(framebuffer_->getColorAttachment(i));\n      auto resolveAttachment =\n          std::static_pointer_cast<Texture>(framebuffer_->getResolveColorAttachment(i));\n\n      // Check if both MSAA source and resolve target exist\n      if (msaaAttachment && resolveAttachment && msaaAttachment->getResource() &&\n          resolveAttachment->getResource()) {\n        // Verify MSAA source has samples > 1 and resolve target has samples == 1\n        D3D12_RESOURCE_DESC msaaDesc = msaaAttachment->getResource()->GetDesc();\n        D3D12_RESOURCE_DESC resolveDesc = resolveAttachment->getResource()->GetDesc();\n\n        if (msaaDesc.SampleDesc.Count > 1 && resolveDesc.SampleDesc.Count == 1) {\n          IGL_D3D12_LOG_VERBOSE(\n              \"RenderCommandEncoder::endEncoding - Resolving MSAA color attachment %zu (%u samples \"\n              \"-> 1 sample)\\n\",\n              i,\n              msaaDesc.SampleDesc.Count);\n\n          // Transition MSAA texture to RESOLVE_SOURCE state\n          msaaAttachment->transitionAll(commandList_, D3D12_RESOURCE_STATE_RESOLVE_SOURCE);\n\n          // Transition resolve texture to RESOLVE_DEST state\n          resolveAttachment->transitionAll(commandList_, D3D12_RESOURCE_STATE_RESOLVE_DEST);\n\n          // Perform resolve operation: converts multi-sample texture to single-sample\n          // This averages all samples in the MSAA texture and writes to the resolve texture\n          commandList_->ResolveSubresource(\n              resolveAttachment->getResource(), // pDstResource (non-MSAA)\n              0, // DstSubresource (mip 0, layer 0)\n              msaaAttachment->getResource(), // pSrcResource (MSAA)\n              0, // SrcSubresource (mip 0, layer 0)\n              msaaDesc.Format // Format (must be compatible)\n          );\n\n          IGL_D3D12_LOG_VERBOSE(\n              \"RenderCommandEncoder::endEncoding - MSAA color resolve completed for attachment \"\n              \"%zu\\n\",\n              i);\n\n          // Transition resolve texture to PIXEL_SHADER_RESOURCE for subsequent use\n          resolveAttachment->transitionAll(commandList_,\n                                           D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);\n        }\n      }\n    }\n\n    // Resolve depth attachment if present\n    auto msaaDepth = std::static_pointer_cast<Texture>(framebuffer_->getDepthAttachment());\n    auto resolveDepth =\n        std::static_pointer_cast<Texture>(framebuffer_->getResolveDepthAttachment());\n\n    if (msaaDepth && resolveDepth && msaaDepth->getResource() && resolveDepth->getResource()) {\n      D3D12_RESOURCE_DESC msaaDesc = msaaDepth->getResource()->GetDesc();\n      D3D12_RESOURCE_DESC resolveDesc = resolveDepth->getResource()->GetDesc();\n\n      if (msaaDesc.SampleDesc.Count > 1 && resolveDesc.SampleDesc.Count == 1) {\n        IGL_D3D12_LOG_VERBOSE(\n            \"RenderCommandEncoder::endEncoding - Resolving MSAA depth attachment (%u samples -> 1 \"\n            \"sample)\\n\",\n            msaaDesc.SampleDesc.Count);\n\n        // Transition depth textures to appropriate resolve states\n        msaaDepth->transitionAll(commandList_, D3D12_RESOURCE_STATE_RESOLVE_SOURCE);\n        resolveDepth->transitionAll(commandList_, D3D12_RESOURCE_STATE_RESOLVE_DEST);\n\n        // Resolve depth buffer\n        commandList_->ResolveSubresource(\n            resolveDepth->getResource(), 0, msaaDepth->getResource(), 0, msaaDesc.Format);\n\n        IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder::endEncoding - MSAA depth resolve completed\\n\");\n\n        // Transition resolved depth to shader resource for sampling\n        resolveDepth->transitionAll(commandList_, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);\n      }\n    }\n  }\n  // ========== END MSAA RESOLVE OPERATION ==========\n\n  // For offscreen framebuffers (MRT targets), transition all attachments to PIXEL_SHADER_RESOURCE\n  // so they can be sampled in subsequent passes\n  if (framebuffer_ && framebuffer_->getColorAttachment(0)) {\n    auto swapColor = std::static_pointer_cast<Texture>(framebuffer_->getColorAttachment(0));\n\n    // Check if this is the swapchain backbuffer\n    const bool isSwapchainTarget =\n        (swapColor && swapColor->getResource() == context2.getCurrentBackBuffer());\n\n    if (isSwapchainTarget) {\n      // Swapchain framebuffer: transition to PRESENT\n      swapColor->transitionAll(commandList_, D3D12_RESOURCE_STATE_PRESENT);\n    } else {\n      // Offscreen framebuffer (e.g., MRT targets): transition all color attachments to\n      // PIXEL_SHADER_RESOURCE This allows the render targets to be sampled in subsequent rendering\n      // passes (multi-frame support)\n      const auto indices = framebuffer_->getColorAttachmentIndices();\n      for (size_t i : indices) {\n        auto attachment = std::static_pointer_cast<Texture>(framebuffer_->getColorAttachment(i));\n        if (attachment && attachment->getResource()) {\n          attachment->transitionAll(commandList_, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);\n        }\n      }\n    }\n  } else {\n    // No framebuffer provided - using swapchain directly\n    auto* backBuffer = context2.getCurrentBackBuffer();\n    if (backBuffer) {\n      D3D12_RESOURCE_BARRIER barrier = {};\n      barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n      barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;\n      barrier.Transition.pResource = backBuffer;\n      barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_RENDER_TARGET;\n      barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_PRESENT;\n      barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n      commandList_->ResourceBarrier(1, &barrier);\n    }\n  }\n\n  // G-001: Flush any remaining barriers before ending encoding\n  flushBarriers();\n\n  // Return RTV/DSV indices to the descriptor heap manager if used\n  if (auto* mgr = context2.getDescriptorHeapManager()) {\n    if (!rtvIndices_.empty()) {\n      for (auto idx : rtvIndices_) {\n        mgr->freeRTV(idx);\n      }\n      rtvIndices_.clear();\n    }\n    if (dsvIndex_ != UINT32_MAX) {\n      mgr->freeDSV(dsvIndex_);\n      dsvIndex_ = UINT32_MAX;\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindViewport(const Viewport& viewport) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::bindViewport called on closed command list\\n\");\n    return;\n  }\n  IGL_D3D12_LOG_VERBOSE(\"bindViewport called: x=%.1f, y=%.1f, w=%.1f, h=%.1f\\n\",\n                        viewport.x,\n                        viewport.y,\n                        viewport.width,\n                        viewport.height);\n  D3D12_VIEWPORT vp = {};\n  vp.TopLeftX = viewport.x;\n  vp.TopLeftY = viewport.y;\n  vp.Width = viewport.width;\n  vp.Height = viewport.height;\n  vp.MinDepth = viewport.minDepth;\n  vp.MaxDepth = viewport.maxDepth;\n  commandList_->RSSetViewports(1, &vp);\n}\n\nvoid RenderCommandEncoder::bindScissorRect(const ScissorRect& rect) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::bindScissorRect called on closed command list\\n\");\n    return;\n  }\n  D3D12_RECT scissor = {};\n  scissor.left = static_cast<LONG>(rect.x);\n  scissor.top = static_cast<LONG>(rect.y);\n  scissor.right = static_cast<LONG>(rect.x + rect.width);\n  scissor.bottom = static_cast<LONG>(rect.y + rect.height);\n  commandList_->RSSetScissorRects(1, &scissor);\n}\n\nvoid RenderCommandEncoder::bindRenderPipelineState(\n    const std::shared_ptr<IRenderPipelineState>& pipelineState) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::bindRenderPipelineState called on closed command list\\n\");\n    return;\n  }\n  if (!pipelineState) {\n    IGL_LOG_ERROR(\"bindRenderPipelineState: pipelineState is null!\\n\");\n    return;\n  }\n\n  auto* d3dPipelineState = static_cast<const RenderPipelineState*>(pipelineState.get());\n\n  // Cache pipeline state for dynamic PSO variant selection at draw time\n  currentRenderPipelineState_ = d3dPipelineState;\n\n  // Get PSO variant matching actual framebuffer formats (Vulkan-style dynamic selection)\n  auto* pso = d3dPipelineState->getPipelineState(dynamicState_, commandBuffer_.getDevice());\n  auto* rootSig = d3dPipelineState->getRootSignature();\n\n  if (!pso) {\n    IGL_LOG_ERROR(\"bindRenderPipelineState: PSO is null!\\n\");\n    return;\n  }\n  if (!rootSig) {\n    IGL_LOG_ERROR(\"bindRenderPipelineState: Root signature is null!\\n\");\n    return;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"bindRenderPipelineState: PSO=%p, RootSig=%p\\n\", pso, rootSig);\n\n  commandList_->SetPipelineState(pso);\n  commandList_->SetGraphicsRootSignature(rootSig);\n\n  // Set primitive topology from the pipeline state\n  D3D_PRIMITIVE_TOPOLOGY topology = d3dPipelineState->getPrimitiveTopology();\n  IGL_D3D12_LOG_VERBOSE(\"bindRenderPipelineState: Setting topology=%d\\n\", (int)topology);\n  commandList_->IASetPrimitiveTopology(topology);\n\n  // Cache vertex stride from pipeline (used when binding vertex buffers)\n  currentVertexStride_ = d3dPipelineState->getVertexStride();\n  // Fill per-slot strides\n  for (size_t s = 0; s < IGL_BUFFER_BINDINGS_MAX; ++s) {\n    vertexStrides_[s] = d3dPipelineState->getVertexStride(s);\n  }\n}\n\nvoid RenderCommandEncoder::bindDepthStencilState(\n    const std::shared_ptr<IDepthStencilState>& /*depthStencilState*/) {}\n\nvoid RenderCommandEncoder::bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) {\n  IGL_D3D12_LOG_VERBOSE(\"bindVertexBuffer called: index=%u\\n\", index);\n  if (index >= IGL_BUFFER_BINDINGS_MAX) {\n    IGL_LOG_ERROR(\"bindVertexBuffer: index %u exceeds max %u\\n\", index, IGL_BUFFER_BINDINGS_MAX);\n    return;\n  }\n\n  auto* d3dBuffer = static_cast<Buffer*>(&buffer);\n  cachedVertexBuffers_[index].bufferLocation = d3dBuffer->gpuAddress(bufferOffset);\n  cachedVertexBuffers_[index].sizeInBytes =\n      static_cast<UINT>(d3dBuffer->getSizeInBytes() - bufferOffset);\n  cachedVertexBuffers_[index].bound = true;\n}\n\nvoid RenderCommandEncoder::bindIndexBuffer(IBuffer& buffer,\n                                           IndexFormat format,\n                                           size_t bufferOffset) {\n  IGL_D3D12_LOG_VERBOSE(\"bindIndexBuffer called\\n\");\n  auto* d3dBuffer = static_cast<Buffer*>(&buffer);\n  cachedIndexBuffer_.bufferLocation = d3dBuffer->gpuAddress(bufferOffset);\n  cachedIndexBuffer_.sizeInBytes = static_cast<UINT>(d3dBuffer->getSizeInBytes() - bufferOffset);\n  // D3D12 only supports 16-bit and 32-bit index formats (not 8-bit)\n  cachedIndexBuffer_.format = (format == IndexFormat::UInt16) ? DXGI_FORMAT_R16_UINT\n                                                              : DXGI_FORMAT_R32_UINT;\n  cachedIndexBuffer_.bound = true;\n}\n\nvoid RenderCommandEncoder::bindBytes(size_t /*index*/,\n                                     uint8_t /*target*/,\n                                     const void* /*data*/,\n                                     size_t /*length*/) {\n  // D3D12 backend does not support bindBytes\n  // Applications should use uniform buffers (bindBuffer) instead\n  // This is a no-op to maintain compatibility with cross-platform code\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  IGL_LOG_INFO_ONCE(\n      \"bindBytes is not supported in D3D12 backend. Use bindBuffer with uniform buffers \"\n      \"instead.\\n\");\n}\nvoid RenderCommandEncoder::bindPushConstants(const void* data, size_t length, size_t offset) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::bindPushConstants called on closed command list\\n\");\n    return;\n  }\n  if (!data || length == 0) {\n    return;\n  }\n\n  // Query pipeline for dynamic root parameter index (eliminates hardcoded assumptions)\n  if (!currentRenderPipelineState_) {\n    IGL_LOG_ERROR(\"bindPushConstants called without bound pipeline state\\n\");\n    return;\n  }\n\n  if (!currentRenderPipelineState_->hasPushConstants()) {\n    IGL_LOG_ERROR(\"bindPushConstants called but pipeline has no push constants\\n\");\n    return;\n  }\n\n  const UINT rootParamIndex = currentRenderPipelineState_->getPushConstantRootParameterIndex();\n\n  // Offset and length are in bytes; convert to 32-bit units.\n  const UINT offset32 = static_cast<UINT>(offset / sizeof(uint32_t));\n  const UINT num32 = static_cast<UINT>((length + sizeof(uint32_t) - 1) / sizeof(uint32_t));\n\n  // D3D12 permits up to 64 bytes (16 DWORDs) of root constants; enforce this\n  // conservatively to avoid exceeding the root signature declaration.\n  if (offset32 + num32 > 16) {\n    IGL_LOG_ERROR(\n        \"bindPushConstants: push constant range (%u dwords at offset %u) exceeds 16 dword limit\\n\",\n        num32,\n        offset32);\n    return;\n  }\n\n  commandList_->SetGraphicsRoot32BitConstants(rootParamIndex, num32, data, offset32);\n}\nvoid RenderCommandEncoder::bindSamplerState(size_t index,\n                                            uint8_t /*target*/,\n                                            ISamplerState* samplerState) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::bindSamplerState called on closed command list\\n\");\n    return;\n  }\n  // Delegate to D3D12ResourcesBinder for centralized descriptor management.\n  resourcesBinder_.bindSamplerState(static_cast<uint32_t>(index), samplerState);\n\n  // Clear bindBindGroup cache to switch from bindBindGroup path to bindSamplerState path\n  // This ensures draw() will call resourcesBinder_.updateBindings() instead of using cached handles\n  cachedTextureCount_ = 0;\n  cachedSamplerCount_ = 0;\n  usedBindGroup_ = false;\n}\nvoid RenderCommandEncoder::bindTexture(size_t index, uint8_t /*target*/, ITexture* texture) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::bindTexture called on closed command list\\n\");\n    return;\n  }\n  // Delegate to single-argument version\n  bindTexture(index, texture);\n}\n\nvoid RenderCommandEncoder::bindTexture(size_t index, ITexture* texture) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::bindTexture called on closed command list\\n\");\n    return;\n  }\n  // Delegate to D3D12ResourcesBinder for centralized descriptor management.\n  resourcesBinder_.bindTexture(static_cast<uint32_t>(index), texture);\n\n  // Clear bindBindGroup cache to switch from bindBindGroup path to bindTexture path\n  // This ensures draw() will call resourcesBinder_.updateBindings() instead of using cached handles\n  cachedTextureCount_ = 0;\n  cachedSamplerCount_ = 0;\n  usedBindGroup_ = false;\n}\nvoid RenderCommandEncoder::bindUniform(const UniformDesc& /*uniformDesc*/, const void* /*data*/) {}\n\nvoid RenderCommandEncoder::draw(size_t vertexCount,\n                                uint32_t instanceCount,\n                                uint32_t firstVertex,\n                                uint32_t baseInstance) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::draw called on closed command list\\n\");\n    return;\n  }\n  // G-001: Flush any pending barriers before draw call\n  flushBarriers();\n\n  // Apply all resource bindings (textures, samplers, buffers) before draw.\n  // Even when bindBindGroup() is used for CBV tables, textures/samplers may still be\n  // managed by D3D12ResourcesBinder, so always update bindings here.\n  {\n    Result bindResult;\n    if (!resourcesBinder_.updateBindings(currentRenderPipelineState_, &bindResult)) {\n      IGL_LOG_ERROR(\"draw: Failed to update resource bindings: %s\\n\", bindResult.message.c_str());\n      return;\n    }\n  }\n\n  // D3D12 requires ALL root parameters to be bound before drawing\n  // Hybrid render root signature layout (see Device::createRenderPipeline):\n  // - Root parameter 0: Root 32-bit constants for b2 (push constants)\n  // - Root parameter 1: Root CBV for b0 (legacy bindBuffer)\n  // - Root parameter 2: Root CBV for b1 (legacy bindBuffer)\n  // - Root parameter 3: CBV descriptor table for b3-b15 (bindBindGroup buffer table)\n  // - Root parameter 4: SRV descriptor table for t0-tN\n  // - Root parameter 5: Sampler descriptor table for s0-tN\n  // - Root parameter 6: UAV descriptor table for u0-uN (storage buffers)\n\n  // Bind descriptor tables using dynamic root parameter indices from pipeline reflection\n  // The indices are computed based on which resources the shader actually uses\n\n  // Apply vertex buffers. If the bound pipeline has no vertex input state\n  // (no attributes/bindings), skip IASetVertexBuffers entirely so that\n  // fullscreen / skybox style passes using SV_VertexID do not trigger\n  // validation errors when a previous pass left a vertex buffer bound.\n  bool pipelineHasVertexInput = (currentVertexStride_ != 0);\n  if (!pipelineHasVertexInput) {\n    for (uint32_t i = 0; i < IGL_BUFFER_BINDINGS_MAX; ++i) {\n      if (vertexStrides_[i] != 0) {\n        pipelineHasVertexInput = true;\n        break;\n      }\n    }\n  }\n\n  if (pipelineHasVertexInput) {\n    for (uint32_t i = 0; i < IGL_BUFFER_BINDINGS_MAX; ++i) {\n      if (!cachedVertexBuffers_[i].bound) {\n        continue;\n      }\n      UINT stride = vertexStrides_[i];\n      if (stride == 0) {\n        if (currentVertexStride_ == 0) {\n          IGL_LOG_INFO_ONCE(\n              \"Vertex buffer bound to slot %u but pipeline reports no stride; \"\n              \"using conservative fallback stride of 32 bytes\\n\",\n              i);\n          stride = 32;\n        } else {\n          stride = currentVertexStride_;\n        }\n      }\n      D3D12_VERTEX_BUFFER_VIEW vbView = {};\n      vbView.BufferLocation = cachedVertexBuffers_[i].bufferLocation;\n      vbView.SizeInBytes = cachedVertexBuffers_[i].sizeInBytes;\n      vbView.StrideInBytes = stride;\n      IGL_D3D12_LOG_VERBOSE(\"draw: VB[%u] = GPU 0x%llx, size=%u, stride=%u\\n\",\n                            i,\n                            vbView.BufferLocation,\n                            vbView.SizeInBytes,\n                            vbView.StrideInBytes);\n      commandList_->IASetVertexBuffers(i, 1, &vbView);\n    }\n  } else {\n    // No vertex input expected for this pipeline; skip IASetVertexBuffers\n    // even if a previous pass bound a vertex buffer.\n    IGL_D3D12_LOG_VERBOSE(\n        \"draw: Pipeline has no vertex input layout; skipping IASetVertexBuffers for this draw\\n\");\n  }\n\n  commandBuffer_.incrementDrawCount();\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"draw: DrawInstanced(vertexCount=%zu, instanceCount=%u, firstVertex=%u, baseInstance=%u)\\n\",\n      vertexCount,\n      instanceCount,\n      firstVertex,\n      baseInstance);\n  commandList_->DrawInstanced(\n      static_cast<UINT>(vertexCount), instanceCount, firstVertex, baseInstance);\n}\n\nvoid RenderCommandEncoder::drawIndexed(size_t indexCount,\n                                       uint32_t instanceCount,\n                                       uint32_t firstIndex,\n                                       int32_t vertexOffset,\n                                       uint32_t baseInstance) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::drawIndexed called on closed command list\\n\");\n    return;\n  }\n  // G-001: Flush any pending barriers before draw call\n  flushBarriers();\n\n  // Apply all resource bindings (textures, samplers, buffers) before draw.\n  // Even when bindBindGroup() is used for CBV tables, textures/samplers may still be\n  // managed by D3D12ResourcesBinder, so always update bindings here.\n  {\n    Result bindResult;\n    if (!resourcesBinder_.updateBindings(currentRenderPipelineState_, &bindResult)) {\n      IGL_LOG_ERROR(\"drawIndexed: Failed to update resource bindings: %s\\n\",\n                    bindResult.message.c_str());\n      return;\n    }\n  }\n\n  // D3D12 requires ALL root parameters to be bound before drawing\n  // Hybrid render root signature layout (see Device::createRenderPipeline):\n  // - Root parameter 0: Root 32-bit constants for b2 (push constants)\n  // - Root parameter 1: Root CBV for b0 (legacy bindBuffer)\n  // - Root parameter 2: Root CBV for b1 (legacy bindBuffer)\n  // - Root parameter 3: CBV descriptor table for b3-b15 (bindBindGroup buffer table)\n  // - Root parameter 4: SRV descriptor table for t0-tN\n  // - Root parameter 5: Sampler descriptor table for s0-tN\n  // - Root parameter 6: UAV descriptor table for u0-uN (storage buffers)\n\n  // Bind descriptor tables using dynamic root parameter indices from pipeline reflection\n\n  // Descriptor tables (CBV/SRV/Sampler/UAV) are bound by D3D12ResourcesBinder::updateBindings()\n  // based on the current pipeline's reflection. No additional descriptor table binding is\n  // required here.\n\n  // Apply cached vertex buffer bindings now that pipeline state is bound.\n  // If the current pipeline has no vertex input layout (no attributes or\n  // bindings), skip IASetVertexBuffers so that draws using SV_VertexID do\n  // not rely on stale vertex buffer state from previous passes.\n  bool pipelineHasVertexInput = (currentVertexStride_ != 0);\n  if (!pipelineHasVertexInput) {\n    for (uint32_t i = 0; i < IGL_BUFFER_BINDINGS_MAX; ++i) {\n      if (vertexStrides_[i] != 0) {\n        pipelineHasVertexInput = true;\n        break;\n      }\n    }\n  }\n\n  if (pipelineHasVertexInput) {\n    for (uint32_t i = 0; i < IGL_BUFFER_BINDINGS_MAX; ++i) {\n      if (!cachedVertexBuffers_[i].bound) {\n        continue;\n      }\n      UINT stride = vertexStrides_[i];\n      if (stride == 0) {\n        if (currentVertexStride_ == 0) {\n          IGL_LOG_INFO_ONCE(\n              \"Vertex buffer bound to slot %u but pipeline reports no stride; \"\n              \"using conservative fallback stride of 32 bytes\\n\",\n              i);\n          stride = 32;\n        } else {\n          stride = currentVertexStride_;\n        }\n      }\n      D3D12_VERTEX_BUFFER_VIEW vbView = {};\n      vbView.BufferLocation = cachedVertexBuffers_[i].bufferLocation;\n      vbView.SizeInBytes = cachedVertexBuffers_[i].sizeInBytes;\n      vbView.StrideInBytes = stride;\n      commandList_->IASetVertexBuffers(i, 1, &vbView);\n    }\n  } else {\n    IGL_D3D12_LOG_VERBOSE(\n        \"drawIndexed: Pipeline has no vertex input layout; skipping IASetVertexBuffers for this \"\n        \"draw\\n\");\n  }\n\n  // Apply cached index buffer binding\n  if (cachedIndexBuffer_.bound) {\n    D3D12_INDEX_BUFFER_VIEW ibView = {};\n    ibView.BufferLocation = cachedIndexBuffer_.bufferLocation;\n    ibView.SizeInBytes = cachedIndexBuffer_.sizeInBytes;\n    ibView.Format = cachedIndexBuffer_.format;\n    commandList_->IASetIndexBuffer(&ibView);\n  }\n\n  // Track per-command-buffer draw count; CommandQueue aggregates into device on submit\n  commandBuffer_.incrementDrawCount();\n\n  commandList_->DrawIndexedInstanced(\n      static_cast<UINT>(indexCount), instanceCount, firstIndex, vertexOffset, baseInstance);\n\n#if IGL_DEBUG\n  static const bool kLogDrawErrors = []() {\n    const char* env = std::getenv(\"IGL_D3D12_LOG_DRAW_ERRORS\");\n    return env && (env[0] == '1');\n  }();\n  if (kLogDrawErrors) {\n    auto* device = commandBuffer_.getContext().getDevice();\n    if (device) {\n      igl::d3d12::ComPtr<ID3D12InfoQueue> infoQueue;\n      if (SUCCEEDED(device->QueryInterface(IID_PPV_ARGS(infoQueue.GetAddressOf())))) {\n        const UINT64 messageCount = infoQueue->GetNumStoredMessages();\n        for (UINT64 i = 0; i < messageCount; ++i) {\n          SIZE_T length = 0;\n          if (FAILED(infoQueue->GetMessage(i, nullptr, &length)) || length == 0) {\n            continue;\n          }\n          auto* message = static_cast<D3D12_MESSAGE*>(malloc(length));\n          if (message && SUCCEEDED(infoQueue->GetMessage(i, message, &length))) {\n            IGL_LOG_ERROR(\"[D3D12 Debug] %s\\n\",\n                          message->pDescription ? message->pDescription : \"<no description>\");\n          }\n          free(message);\n        }\n        infoQueue->ClearStoredMessages();\n      }\n    }\n  }\n#endif\n}\n\nvoid RenderCommandEncoder::drawMeshTasks(const Dimensions& /*threadgroupsPerGrid*/,\n                                         const Dimensions& /*threadsPerTaskThreadgroup*/,\n                                         const Dimensions& /*threadsPerMeshThreadgroup*/) {\n  IGL_LOG_ERROR(\"RenderCommandEncoder::drawMeshTasks is not implemented on D3D12\\n\");\n}\nvoid RenderCommandEncoder::multiDrawIndirect(IBuffer& indirectBuffer,\n                                             size_t indirectBufferOffset,\n                                             uint32_t drawCount,\n                                             uint32_t stride) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::multiDrawIndirect: command list is closed or null\\n\");\n    return;\n  }\n\n  // Get D3D12 buffer resource\n  auto* d3dBuffer = static_cast<Buffer*>(&indirectBuffer);\n  if (!d3dBuffer) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::multiDrawIndirect: indirectBuffer is null\\n\");\n    return;\n  }\n\n  ID3D12Resource* argBuffer = d3dBuffer->getResource();\n  if (!argBuffer) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::multiDrawIndirect: argBuffer resource is null\\n\");\n    return;\n  }\n\n  // Get command signature from D3D12Context\n  auto& ctx = commandBuffer_.getContext();\n  ID3D12CommandSignature* signature = ctx.getDrawIndirectSignature();\n  if (!signature) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::multiDrawIndirect: command signature is null\\n\");\n    return;\n  }\n\n  // Use default stride if not provided (sizeof D3D12_DRAW_ARGUMENTS = 16 bytes)\n  const UINT actualStride = stride ? stride : sizeof(D3D12_DRAW_ARGUMENTS);\n\n  // ExecuteIndirect for multi-draw\n  // Parameters: signature, maxCommandCount, argumentBuffer, argumentBufferOffset, countBuffer,\n  // countBufferOffset\n  commandList_->ExecuteIndirect(signature,\n                                drawCount,\n                                argBuffer,\n                                static_cast<UINT64>(indirectBufferOffset),\n                                nullptr, // No count buffer (exact draw count specified)\n                                0);\n\n  // Track draw call count\n  commandBuffer_.incrementDrawCount(drawCount);\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"RenderCommandEncoder::multiDrawIndirect: Executed %u indirect draws (stride: %u)\\n\",\n      drawCount,\n      actualStride);\n}\nvoid RenderCommandEncoder::multiDrawIndexedIndirect(IBuffer& indirectBuffer,\n                                                    size_t indirectBufferOffset,\n                                                    uint32_t drawCount,\n                                                    uint32_t stride) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\n        \"RenderCommandEncoder::multiDrawIndexedIndirect: command list is closed or null\\n\");\n    return;\n  }\n\n  // Get D3D12 buffer resource\n  auto* d3dBuffer = static_cast<Buffer*>(&indirectBuffer);\n  if (!d3dBuffer) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::multiDrawIndexedIndirect: indirectBuffer is null\\n\");\n    return;\n  }\n\n  ID3D12Resource* argBuffer = d3dBuffer->getResource();\n  if (!argBuffer) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::multiDrawIndexedIndirect: argBuffer resource is null\\n\");\n    return;\n  }\n\n  // Get command signature from D3D12Context\n  auto& ctx = commandBuffer_.getContext();\n  ID3D12CommandSignature* signature = ctx.getDrawIndexedIndirectSignature();\n  if (!signature) {\n    IGL_LOG_ERROR(\"RenderCommandEncoder::multiDrawIndexedIndirect: command signature is null\\n\");\n    return;\n  }\n\n  // Use default stride if not provided (sizeof D3D12_DRAW_INDEXED_ARGUMENTS = 20 bytes)\n  const UINT actualStride = stride ? stride : sizeof(D3D12_DRAW_INDEXED_ARGUMENTS);\n\n  // ExecuteIndirect for multi-draw indexed\n  // Parameters: signature, maxCommandCount, argumentBuffer, argumentBufferOffset, countBuffer,\n  // countBufferOffset\n  commandList_->ExecuteIndirect(signature,\n                                drawCount,\n                                argBuffer,\n                                static_cast<UINT64>(indirectBufferOffset),\n                                nullptr, // No count buffer (exact draw count specified)\n                                0);\n\n  // Track draw call count\n  commandBuffer_.incrementDrawCount(drawCount);\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"RenderCommandEncoder::multiDrawIndexedIndirect: Executed %u indirect indexed draws (stride: \"\n      \"%u)\\n\",\n      drawCount,\n      actualStride);\n}\n\nvoid RenderCommandEncoder::setStencilReferenceValue(uint32_t value) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    return;\n  }\n  // Set stencil reference value for stencil testing\n  commandList_->OMSetStencilRef(value);\n  IGL_D3D12_LOG_VERBOSE(\"setStencilReferenceValue: Set stencil ref to %u\\n\", value);\n}\n\nvoid RenderCommandEncoder::setBlendColor(const Color& color) {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    return;\n  }\n  // Set blend factor constants for BlendFactor::BlendColor operations\n  // D3D12 uses RGBA float array, matching IGL Color structure\n  const float blendFactor[4] = {color.r, color.g, color.b, color.a};\n  commandList_->OMSetBlendFactor(blendFactor);\n  IGL_D3D12_LOG_VERBOSE(\"setBlendColor: Set blend factor to (%.2f, %.2f, %.2f, %.2f)\\n\",\n                        color.r,\n                        color.g,\n                        color.b,\n                        color.a);\n}\n\nvoid RenderCommandEncoder::setDepthBias(float /*depthBias*/,\n                                        float /*slopeScale*/,\n                                        float /*clamp*/) {\n  // Note: Depth bias is configured in the pipeline state (RasterizerState)\n  // D3D12 does not support dynamic depth bias changes during rendering\n  // This would require rebuilding the PSO with different depth bias values\n}\n\nvoid RenderCommandEncoder::pushDebugGroupLabel(const char* label, const Color& /*color*/) const {\n  if (!commandBuffer_.isRecording() || !commandList_ || !label) {\n    return;\n  }\n  const size_t len = strlen(label);\n  std::wstring wlabel(len, L' ');\n  std::mbstowcs(&wlabel[0], label, len);\n  commandList_->BeginEvent(\n      0, wlabel.c_str(), static_cast<UINT>((wlabel.length() + 1) * sizeof(wchar_t)));\n}\n\nvoid RenderCommandEncoder::insertDebugEventLabel(const char* label, const Color& /*color*/) const {\n  if (!commandBuffer_.isRecording() || !commandList_ || !label) {\n    return;\n  }\n  const size_t len = strlen(label);\n  std::wstring wlabel(len, L' ');\n  std::mbstowcs(&wlabel[0], label, len);\n  commandList_->SetMarker(\n      0, wlabel.c_str(), static_cast<UINT>((wlabel.length() + 1) * sizeof(wchar_t)));\n}\n\nvoid RenderCommandEncoder::popDebugGroupLabel() const {\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    return;\n  }\n  commandList_->EndEvent();\n}\n\nvoid RenderCommandEncoder::bindBuffer(uint32_t index,\n                                      uint8_t /*target*/,\n                                      IBuffer* buffer,\n                                      size_t bufferOffset,\n                                      size_t bufferSize) {\n  // D3D12 does not differentiate shader stages for buffer binding in this path.\n  bindBuffer(index, buffer, bufferOffset, bufferSize);\n}\n\nvoid RenderCommandEncoder::bindBuffer(uint32_t index,\n                                      IBuffer* buffer,\n                                      size_t offset,\n                                      size_t bufferSize) {\n  IGL_D3D12_LOG_VERBOSE(\"bindBuffer START: index=%u\\n\", index);\n  if (!buffer) {\n    IGL_D3D12_LOG_VERBOSE(\"bindBuffer: null buffer, returning\\n\");\n    return;\n  }\n\n  auto* d3dBuffer = static_cast<Buffer*>(buffer);\n\n  // Check if this is a storage buffer - needs SRV binding for shader reads\n  const bool isStorageBuffer =\n      (d3dBuffer->getBufferType() & BufferDesc::BufferTypeBits::Storage) != 0;\n\n  if (isStorageBuffer) {\n    // Storage buffer - create SRV for ByteAddressBuffer reads in pixel shader\n    IGL_D3D12_LOG_VERBOSE(\n        \"bindBuffer: Storage buffer detected at index %u - creating SRV for pixel shader read\\n\",\n        index);\n\n    // For raw (ByteAddressBuffer) SRVs we treat the buffer as a sequence of 4-byte units.\n    // This matches HLSL ByteAddressBuffer / RWByteAddressBuffer semantics.\n    if ((offset & 3) != 0) {\n      IGL_LOG_ERROR(\n          \"bindBuffer: Storage buffer offset %zu is not 4-byte aligned (required for \"\n          \"DXGI_FORMAT_R32_TYPELESS). \"\n          \"Raw buffer SRV FirstElement will be rounded down, which may cause incorrect data \"\n          \"access.\\n\",\n          offset);\n      // Continue but log warning - FirstElement below uses integer division\n    }\n\n    auto& context = commandBuffer_.getContext();\n    auto* device = context.getDevice();\n    if (!device || cbvSrvUavHeap_ == nullptr) {\n      IGL_LOG_ERROR(\"bindBuffer: Missing device or per-frame CBV/SRV/UAV heap\\n\");\n      return;\n    }\n\n    // Allocate descriptor slot from command buffer's shared counter\n    // Uses Result-based allocation with dynamic heap growth.\n    uint32_t descriptorIndex = 0;\n    Result allocResult = commandBuffer_.getNextCbvSrvUavDescriptor(&descriptorIndex);\n    if (!allocResult.isOk()) {\n      IGL_LOG_ERROR(\"bindBuffer: Failed to allocate descriptor: %s\\n\", allocResult.message.c_str());\n      return;\n    }\n    IGL_D3D12_LOG_VERBOSE(\n        \"bindBuffer: Allocated SRV descriptor slot %u for buffer at t%u\\n\", descriptorIndex, index);\n\n    // Create SRV descriptor for ByteAddressBuffer (raw view)\n    D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};\n    srvDesc.Format = DXGI_FORMAT_R32_TYPELESS; // Raw buffer (ByteAddressBuffer)\n    srvDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER;\n    srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;\n    // FirstElement/NumElements expressed in 32-bit units (4 bytes)\n    srvDesc.Buffer.FirstElement = static_cast<UINT64>(offset) / 4; // Offset in 32-bit elements\n    // NumElements must be (totalSize - offset) to avoid exceeding buffer bounds\n    srvDesc.Buffer.NumElements =\n        static_cast<UINT>((buffer->getSizeInBytes() - offset) / 4); // Size in 32-bit elements\n    srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_RAW; // Raw buffer access\n\n    D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n    D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(descriptorIndex);\n    // Pre-creation validation.\n    IGL_DEBUG_ASSERT(device != nullptr, \"Device is null before CreateShaderResourceView\");\n    IGL_DEBUG_ASSERT(d3dBuffer->getResource() != nullptr, \"Buffer resource is null\");\n    IGL_DEBUG_ASSERT(cpuHandle.ptr != 0, \"SRV descriptor handle is invalid\");\n\n    device->CreateShaderResourceView(d3dBuffer->getResource(), &srvDesc, cpuHandle);\n\n    IGL_D3D12_LOG_VERBOSE(\n        \"bindBuffer: Created SRV at descriptor slot %u (FirstElement=%llu, NumElements=%u)\\n\",\n        descriptorIndex,\n        srvDesc.Buffer.FirstElement,\n        srvDesc.Buffer.NumElements);\n\n    // Cache GPU handle for descriptor table binding in draw calls.\n    // SRVs are bound to root parameter 4 (render root signature SRV table).\n    cachedTextureGpuHandles_[index] = gpuHandle;\n    cachedTextureCount_ = std::max(cachedTextureCount_, static_cast<size_t>(index + 1));\n\n    // For pipelines that declare SRVs but do not use the generic texture binding path\n    // (e.g., ComputeSession visualization using ByteAddressBuffer at t0), bind the SRV\n    // descriptor table directly to the SRV root parameter. This does not conflict with\n    // D3D12ResourcesBinder because updateTextureBindings() is a no-op when no textures\n    // are bound via bindTexture().\n    if (currentRenderPipelineState_ && commandList_) {\n      const UINT srvTableIndex = currentRenderPipelineState_->getSRVTableRootParameterIndex();\n      if (srvTableIndex != UINT_MAX) {\n        commandList_->SetGraphicsRootDescriptorTable(srvTableIndex, gpuHandle);\n        IGL_D3D12_LOG_VERBOSE(\n            \"bindBuffer: Bound storage buffer SRV at slot %u (t%u) to SRV table root param %u \"\n            \"(GPU handle 0x%llx)\\n\",\n            index,\n            index,\n            srvTableIndex,\n            gpuHandle.ptr);\n      }\n    }\n\n    IGL_D3D12_LOG_VERBOSE(\"bindBuffer: Storage buffer SRV binding complete\\n\");\n\n    // CRITICAL: Track the Buffer OBJECT (not just resource) to keep it alive until GPU finishes\n    // This prevents the Buffer destructor from releasing the resource while GPU commands reference\n    // it Use weak_from_this().lock() instead of shared_from_this() to avoid exception\n    std::shared_ptr<IBuffer> sharedBuffer = d3dBuffer->weak_from_this().lock();\n    if (sharedBuffer) {\n      static_cast<CommandBuffer&>(commandBuffer_).trackTransientBuffer(std::move(sharedBuffer));\n      IGL_D3D12_LOG_VERBOSE(\n          \"bindBuffer: Tracking Buffer object (shared_ptr) for lifetime management\\n\");\n    } else {\n      // Buffer not managed by shared_ptr (e.g., persistent buffer from member variable)\n      // Fall back to tracking just the resource (AddRef on ID3D12Resource)\n      static_cast<CommandBuffer&>(commandBuffer_).trackTransientResource(d3dBuffer->getResource());\n      IGL_D3D12_LOG_VERBOSE(\"bindBuffer: Buffer not shared_ptr-managed, tracking resource only\\n\");\n    }\n  } else {\n    // Constant buffer (CBV) - delegate to resourcesBinder for reflection-based binding\n    IGL_D3D12_LOG_VERBOSE(\n        \"bindBuffer: Constant buffer at index %u - delegating to resourcesBinder\\n\", index);\n\n    // D3D12 requires constant buffer addresses to be 256-byte aligned\n    if ((offset & 255) != 0) {\n      IGL_LOG_ERROR(\n          \"bindBuffer: ERROR - CBV offset %zu is not 256-byte aligned (required by D3D12). \"\n          \"Constant buffers must be created at aligned offsets. Ignoring bind request.\\n\",\n          offset);\n      return;\n    }\n\n    // CRITICAL: Track the Buffer OBJECT (not just resource) to keep it alive until GPU finishes\n    std::shared_ptr<IBuffer> sharedBuffer = d3dBuffer->weak_from_this().lock();\n    if (sharedBuffer) {\n      static_cast<CommandBuffer&>(commandBuffer_).trackTransientBuffer(std::move(sharedBuffer));\n      IGL_D3D12_LOG_VERBOSE(\n          \"bindBuffer: Tracking Buffer object (shared_ptr) for lifetime management\\n\");\n    } else {\n      static_cast<CommandBuffer&>(commandBuffer_).trackTransientResource(d3dBuffer->getResource());\n      IGL_D3D12_LOG_VERBOSE(\"bindBuffer: Buffer not shared_ptr-managed, tracking resource only\\n\");\n    }\n\n    // Use bufferSize if provided; otherwise, bind the remaining bytes from offset.\n    // This matches the cross-backend contract: bufferSize == 0 means \"remaining size\".\n    const size_t fullSize = buffer->getSizeInBytes();\n    const size_t size = (bufferSize != 0 && bufferSize <= fullSize)\n                            ? bufferSize\n                            : (offset < fullSize ? (fullSize - offset) : 0);\n\n    // Delegate to resourcesBinder which caches the binding and marks dirty flag\n    // The actual binding will happen in resourcesBinder_.updateBindings()\n    resourcesBinder_.bindBuffer(index, buffer, offset, size, false, 0);\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"bindBuffer END\\n\");\n}\nvoid RenderCommandEncoder::bindBindGroup(BindGroupTextureHandle handle) {\n  IGL_D3D12_LOG_VERBOSE(\"bindBindGroup(texture): handle valid=%d\\n\", !handle.empty());\n\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"bindBindGroup(texture): command list is closed or null\\n\");\n    return;\n  }\n\n  // Get the bind group descriptor from the device\n  auto& device = commandBuffer_.getDevice();\n  const auto* desc = device.getBindGroupTextureDesc(handle);\n  if (!desc) {\n    IGL_LOG_ERROR(\"bindBindGroup(texture): Invalid handle or descriptor not found\\n\");\n    return;\n  }\n\n  // Delegate actual descriptor allocation and binding to D3D12ResourcesBinder\n  // so that bindBindGroup(texture) behaves like a grouped bindTexture/bindSamplerState.\n  for (uint32_t i = 0; i < IGL_TEXTURE_SAMPLERS_MAX; ++i) {\n    if (desc->textures[i]) {\n      resourcesBinder_.bindTexture(i, desc->textures[i].get());\n    }\n  }\n  for (uint32_t i = 0; i < IGL_TEXTURE_SAMPLERS_MAX; ++i) {\n    if (desc->samplers[i]) {\n      resourcesBinder_.bindSamplerState(i, desc->samplers[i].get());\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindBindGroup(BindGroupBufferHandle handle,\n                                         uint32_t numDynamicOffsets,\n                                         const uint32_t* dynamicOffsets) {\n  IGL_D3D12_LOG_VERBOSE(\n      \"bindBindGroup(buffer): handle valid=%d, dynCount=%u\\n\", !handle.empty(), numDynamicOffsets);\n\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\"bindBindGroup(buffer): command list is closed or null\\n\");\n    return;\n  }\n\n  auto& device = commandBuffer_.getDevice();\n  const auto* desc = device.getBindGroupBufferDesc(handle);\n  if (!desc) {\n    IGL_LOG_ERROR(\"bindBindGroup(buffer): Invalid handle or descriptor not found\\n\");\n    return;\n  }\n\n  // NEW PATH:\n  // Delegate all buffer bindings to D3D12ResourcesBinder so that CBVs/SRVs/UAVs are created and\n  // bound through a single, reflection-aware path. BindGroup slots map directly to shader\n  // registers (bN / tN / uN), just like Vulkan bindings.\n  {\n    uint32_t dynIdx = 0;\n    for (uint32_t slot = 0; slot < IGL_UNIFORM_BLOCKS_BINDING_MAX; ++slot) {\n      auto& bufferHandle = desc->buffers[slot];\n      size_t baseOffset = desc->offset[slot];\n      size_t size = desc->size[slot];\n\n      if ((desc->isDynamicBufferMask & (1u << slot)) != 0) {\n        if (dynIdx < numDynamicOffsets && dynamicOffsets) {\n          baseOffset = dynamicOffsets[dynIdx++];\n        }\n      }\n\n      if (!bufferHandle) {\n        // Unbind any previous buffer/UAV at this slot.\n        resourcesBinder_.bindBuffer(slot, nullptr, 0, 0, false, 0);\n        continue;\n      }\n\n      auto* buf = static_cast<Buffer*>(bufferHandle.get());\n      const bool isUniform = (buf->getBufferType() & BufferDesc::BufferTypeBits::Uniform) != 0;\n      const bool isStorage = (buf->getBufferType() & BufferDesc::BufferTypeBits::Storage) != 0;\n\n      // Track resource so its lifetime is tied to the command buffer.\n      commandBuffer_.trackTransientResource(buf->getResource());\n\n      if (isUniform) {\n        // For CBVs, size == 0 means \"remaining bytes from offset\". Respect explicit sizes when\n        // provided.\n        resourcesBinder_.bindBuffer(slot, buf, baseOffset, size, false, 0);\n      } else if (isStorage) {\n        // Storage buffer: delegate to UAV/SRV binding path in D3D12ResourcesBinder.\n        // Use the buffer's storage element stride when available; default to 4 bytes.\n        size_t elementStride = buf->getStorageElementStride();\n        if (elementStride == 0) {\n          elementStride = 4;\n        }\n        resourcesBinder_.bindBuffer(slot, buf, baseOffset, size, true, elementStride);\n      } else {\n        IGL_LOG_ERROR(\"bindBindGroup(buffer): Buffer at slot %u is neither Uniform nor Storage\\n\",\n                      slot);\n      }\n    }\n    usedBindGroup_ = true;\n    return;\n  }\n\n  auto* cmd = commandList_;\n  if (!cmd) {\n    IGL_LOG_ERROR(\"bindBindGroup(buffer): null command list\\n\");\n    return;\n  }\n\n  // CRITICAL: D3D12 descriptor tables MUST be contiguous in the descriptor heap.\n  // SetGraphicsRootDescriptorTable passes a GPU handle to the START of a contiguous block.\n  // D3D12 accesses descriptors using: baseHandle + tableOffset.\n  //\n  // Example: If BindGroupBufferDesc has buffers at slots 3-6:\n  //   - We need descriptors at heap indices [base+0] through [base+6]\n  //   - Slots 0-2 get NULL CBVs, slots 3-6 get real CBVs\n  //   - SetGraphicsRootDescriptorTable receives handle to heap[base+0]\n  //   - Shader accessing b3 reads from heap[base+3]\n  //\n  // First pass: Determine highest slot index to calculate total descriptor count\n  uint32_t maxSlotUsed = 0;\n  for (uint32_t slot = 0; slot < IGL_UNIFORM_BLOCKS_BINDING_MAX; ++slot) {\n    if (desc->buffers[slot]) {\n      auto* buf = static_cast<Buffer*>(desc->buffers[slot].get());\n      const bool isUniform = (buf->getBufferType() & BufferDesc::BufferTypeBits::Uniform) != 0;\n      if (isUniform) {\n        maxSlotUsed = slot;\n      }\n    }\n  }\n\n  if (maxSlotUsed == 0 && !desc->buffers[0]) {\n    // No uniform buffers to bind\n    return;\n  }\n\n  cbvTableCount_ = maxSlotUsed + 1;\n\n  // Allocate a CONTIGUOUS block of descriptors for the entire descriptor table\n  uint32_t baseDescriptorIndex = 0;\n  Result allocResult = commandBuffer_.allocateCbvSrvUavRange(static_cast<uint32_t>(cbvTableCount_),\n                                                             &baseDescriptorIndex);\n  if (!allocResult.isOk()) {\n    IGL_LOG_ERROR(\n        \"bindBindGroup(buffer): Failed to allocate contiguous CBV descriptor range (%zu \"\n        \"descriptors): %s\\n\",\n        cbvTableCount_,\n        allocResult.message.c_str());\n    return;\n  }\n\n  auto& context = commandBuffer_.getContext();\n  auto* d3d12Device = context.getDevice();\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"bindBindGroup(buffer): Allocated contiguous CBV descriptor block: base=%u, count=%zu\\n\",\n      baseDescriptorIndex,\n      cbvTableCount_);\n\n  // Second pass: Create CBV descriptors in the contiguous block\n  uint32_t dynIdx = 0;\n  for (uint32_t slot = 0; slot < cbvTableCount_; ++slot) {\n    // Calculate descriptor index within the contiguous block\n    uint32_t descriptorIndex = baseDescriptorIndex + slot;\n    D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n\n    if (!desc->buffers[slot]) {\n      // Create NULL CBV for empty slots\n      D3D12_CONSTANT_BUFFER_VIEW_DESC nullCbvDesc = {};\n      nullCbvDesc.BufferLocation = 0;\n      nullCbvDesc.SizeInBytes = 256; // Minimum CBV alignment\n      d3d12Device->CreateConstantBufferView(&nullCbvDesc, cpuHandle);\n\n      IGL_D3D12_LOG_VERBOSE(\n          \"bindBindGroup(buffer): Created NULL CBV at heap[%u] for empty slot %u\\n\",\n          descriptorIndex,\n          slot);\n      continue;\n    }\n\n    auto* buf = static_cast<Buffer*>(desc->buffers[slot].get());\n    const bool isUniform = (buf->getBufferType() & BufferDesc::BufferTypeBits::Uniform) != 0;\n    const bool isStorage = (buf->getBufferType() & BufferDesc::BufferTypeBits::Storage) != 0;\n\n    // Track buffer resource to prevent it from being deleted while GPU address is cached\n    commandBuffer_.trackTransientResource(buf->getResource());\n\n    size_t baseOffset = desc->offset[slot];\n    if ((desc->isDynamicBufferMask & (1u << slot)) != 0) {\n      if (dynIdx < numDynamicOffsets && dynamicOffsets) {\n        baseOffset = dynamicOffsets[dynIdx++];\n      }\n    }\n\n    if (isUniform) {\n      // 256B alignment required for CBVs\n      const size_t aligned = (baseOffset + 255) & ~size_t(255);\n      D3D12_GPU_VIRTUAL_ADDRESS addr = buf->gpuAddress(aligned);\n\n      if (slot < IGL_BUFFER_BINDINGS_MAX) {\n        // Respect requested buffer size and enforce the 64 KB limit.\n        // If size[slot] is 0, use remaining buffer size from offset\n        size_t requestedSize = desc->size[slot];\n        if (requestedSize == 0) {\n          requestedSize = buf->getSizeInBytes() - aligned;\n        }\n\n        // D3D12 spec: Constant buffers must be ≤ 64 KB\n        constexpr size_t kMaxCBVSize = 65536; // 64 KB\n        if (requestedSize > kMaxCBVSize) {\n          IGL_LOG_ERROR(\n              \"bindBindGroup(buffer): Constant buffer size (%zu bytes) exceeds D3D12 64 KB limit \"\n              \"at slot %u\\n\",\n              requestedSize,\n              slot);\n          continue; // Skip this binding\n        }\n\n        // Create CBV descriptor in the contiguous block\n        D3D12_CONSTANT_BUFFER_VIEW_DESC cbvDesc = {};\n        cbvDesc.BufferLocation = addr;\n        cbvDesc.SizeInBytes =\n            static_cast<UINT>((requestedSize + 255) & ~255); // Must be 256-byte aligned\n\n        // Pre-creation validation.\n        IGL_DEBUG_ASSERT(d3d12Device != nullptr, \"Device is null before CreateConstantBufferView\");\n        IGL_DEBUG_ASSERT(addr != 0, \"Buffer GPU address is null\");\n        IGL_DEBUG_ASSERT(cpuHandle.ptr != 0, \"CBV descriptor handle is invalid\");\n        IGL_DEBUG_ASSERT(cbvDesc.SizeInBytes <= kMaxCBVSize,\n                         \"CBV size exceeds 64 KB after alignment\");\n\n        d3d12Device->CreateConstantBufferView(&cbvDesc, cpuHandle);\n\n        IGL_D3D12_LOG_VERBOSE(\n            \"bindBindGroup(buffer): Created CBV at heap[%u] for slot %u (addr=0x%llx, size=%u)\\n\",\n            descriptorIndex,\n            slot,\n            addr,\n            cbvDesc.SizeInBytes);\n      } else {\n        IGL_LOG_ERROR(\"bindBindGroup(buffer): BindGroupBufferDesc slot %u exceeds maximum (%u)\\n\",\n                      slot,\n                      IGL_BUFFER_BINDINGS_MAX);\n      }\n    } else if (isStorage) {\n      // Implement storage buffer binding via UAV/SRV descriptors.\n      auto& storageContext = commandBuffer_.getContext();\n      auto* d3dDevice = storageContext.getDevice();\n      ID3D12Resource* resource = buf->getResource();\n\n      // Determine if buffer is read-write (UAV) or read-only (SRV)\n      // D3D12 storage buffers with UAV flag are read-write by default\n      // Private/Shared storage indicates read-write access, Managed indicates read-only\n      const bool isReadWrite =\n          (buf->storage() == ResourceStorage::Private || buf->storage() == ResourceStorage::Shared);\n\n      if (isReadWrite) {\n        // Create UAV for read-write storage buffer\n        // Uses Result-based allocation with dynamic heap growth.\n        uint32_t descriptorIndex = 0;\n        Result allocResult = commandBuffer_.getNextCbvSrvUavDescriptor(&descriptorIndex);\n        if (!allocResult.isOk()) {\n          IGL_LOG_ERROR(\"bindBindGroup(buffer): Failed to allocate UAV descriptor: %s\\n\",\n                        allocResult.message.c_str());\n          continue;\n        }\n        D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n        D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(descriptorIndex);\n\n        // Create UAV descriptor for structured buffer\n        // Use the storage stride from BufferDesc when available; default to 4 bytes otherwise.\n        size_t elementStride = buf->getStorageElementStride();\n        if (elementStride == 0) {\n          elementStride = 4;\n        }\n\n        // Validate baseOffset doesn't exceed buffer size\n        const size_t bufferSizeBytes = buf->getSizeInBytes();\n        if (baseOffset > bufferSizeBytes) {\n          IGL_LOG_ERROR(\n              \"bindBindGroup(buffer): baseOffset %zu exceeds buffer size %zu; skipping UAV \"\n              \"binding\\n\",\n              baseOffset,\n              bufferSizeBytes);\n          continue;\n        }\n\n        if (baseOffset % elementStride != 0) {\n          IGL_LOG_ERROR(\n              \"bindBindGroup(buffer): Storage buffer baseOffset %zu is not aligned to \"\n              \"element stride (%zu bytes). UAV FirstElement will be truncated (offset/stride).\\n\",\n              baseOffset,\n              elementStride);\n        }\n\n        const size_t remaining = bufferSizeBytes - baseOffset;\n\n        // Check for undersized buffer (would create empty or partial view)\n        if (remaining < elementStride) {\n          IGL_LOG_ERROR(\n              \"bindBindGroup(buffer): Remaining buffer size %zu is less than element stride %zu; \"\n              \"UAV will have NumElements=0 (empty view). Check buffer size and offset.\\n\",\n              remaining,\n              elementStride);\n          // Continue to create the descriptor, but it will be empty (NumElements=0)\n        }\n\n        D3D12_UNORDERED_ACCESS_VIEW_DESC uavDesc = {};\n        uavDesc.Format = DXGI_FORMAT_UNKNOWN;\n        uavDesc.ViewDimension = D3D12_UAV_DIMENSION_BUFFER;\n        uavDesc.Buffer.FirstElement = static_cast<UINT64>(baseOffset / elementStride);\n        // CRITICAL: NumElements must be (size - offset) / stride, not total size / stride\n        uavDesc.Buffer.NumElements = static_cast<UINT>(remaining / elementStride);\n        uavDesc.Buffer.StructureByteStride = static_cast<UINT>(elementStride);\n        uavDesc.Buffer.CounterOffsetInBytes = 0;\n        uavDesc.Buffer.Flags = D3D12_BUFFER_UAV_FLAG_NONE;\n\n        // Pre-creation validation.\n        IGL_DEBUG_ASSERT(d3dDevice != nullptr, \"Device is null before CreateUnorderedAccessView\");\n        IGL_DEBUG_ASSERT(resource != nullptr, \"Buffer resource is null\");\n        IGL_DEBUG_ASSERT(cpuHandle.ptr != 0, \"UAV descriptor handle is invalid\");\n\n        d3dDevice->CreateUnorderedAccessView(resource, nullptr, &uavDesc, cpuHandle);\n\n        // Bind UAV descriptor table using dynamic root parameter index from pipeline\n        const UINT uavTableIndex = currentRenderPipelineState_->getUAVTableRootParameterIndex();\n        if (uavTableIndex != UINT_MAX) {\n          commandList_->SetGraphicsRootDescriptorTable(uavTableIndex, gpuHandle);\n          IGL_D3D12_LOG_VERBOSE(\n              \"bindBindGroup(buffer): bound read-write storage buffer at slot %u (UAV u%u, root \"\n              \"param %u, GPU handle 0x%llx)\\n\",\n              slot,\n              slot,\n              uavTableIndex,\n              gpuHandle.ptr);\n        } else {\n          IGL_LOG_ERROR(\n              \"bindBindGroup(buffer): Pipeline has no UAV table root parameter for storage buffer \"\n              \"binding\\n\");\n        }\n      } else {\n        // Create SRV for read-only storage buffer\n        // Uses Result-based allocation with dynamic heap growth.\n        uint32_t descriptorIndex = 0;\n        Result allocResult = commandBuffer_.getNextCbvSrvUavDescriptor(&descriptorIndex);\n        if (!allocResult.isOk()) {\n          IGL_LOG_ERROR(\"bindBindGroup(buffer): Failed to allocate SRV descriptor: %s\\n\",\n                        allocResult.message.c_str());\n          continue;\n        }\n        D3D12_CPU_DESCRIPTOR_HANDLE cpuHandle = context.getCbvSrvUavCpuHandle(descriptorIndex);\n        D3D12_GPU_DESCRIPTOR_HANDLE gpuHandle = context.getCbvSrvUavGpuHandle(descriptorIndex);\n\n        // Create SRV descriptor for structured buffer\n        size_t elementStride = buf->getStorageElementStride();\n        if (elementStride == 0) {\n          elementStride = 4;\n        }\n\n        // Validate baseOffset doesn't exceed buffer size\n        const size_t bufferSizeBytes = buf->getSizeInBytes();\n        if (baseOffset > bufferSizeBytes) {\n          IGL_LOG_ERROR(\n              \"bindBindGroup(buffer): baseOffset %zu exceeds buffer size %zu; skipping SRV \"\n              \"binding\\n\",\n              baseOffset,\n              bufferSizeBytes);\n          continue;\n        }\n\n        if (baseOffset % elementStride != 0) {\n          IGL_LOG_ERROR(\n              \"bindBindGroup(buffer): Storage buffer baseOffset %zu is not aligned to \"\n              \"element stride (%zu bytes). SRV FirstElement will be truncated (offset/stride).\\n\",\n              baseOffset,\n              elementStride);\n        }\n\n        const size_t remaining = bufferSizeBytes - baseOffset;\n\n        // Check for undersized buffer (would create empty or partial view)\n        if (remaining < elementStride) {\n          IGL_LOG_ERROR(\n              \"bindBindGroup(buffer): Remaining buffer size %zu is less than element stride %zu; \"\n              \"SRV will have NumElements=0 (empty view). Check buffer size and offset.\\n\",\n              remaining,\n              elementStride);\n          // Continue to create the descriptor, but it will be empty (NumElements=0)\n        }\n\n        D3D12_SHADER_RESOURCE_VIEW_DESC srvDesc = {};\n        srvDesc.Format = DXGI_FORMAT_UNKNOWN;\n        srvDesc.ViewDimension = D3D12_SRV_DIMENSION_BUFFER;\n        srvDesc.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;\n        srvDesc.Buffer.FirstElement = static_cast<UINT64>(baseOffset / elementStride);\n        // CRITICAL: NumElements must be (size - offset) / stride, not total size / stride\n        srvDesc.Buffer.NumElements = static_cast<UINT>(remaining / elementStride);\n        srvDesc.Buffer.StructureByteStride = static_cast<UINT>(elementStride);\n        srvDesc.Buffer.Flags = D3D12_BUFFER_SRV_FLAG_NONE;\n\n        // Pre-creation validation.\n        IGL_DEBUG_ASSERT(d3dDevice != nullptr, \"Device is null before CreateShaderResourceView\");\n        IGL_DEBUG_ASSERT(resource != nullptr, \"Buffer resource is null\");\n        IGL_DEBUG_ASSERT(cpuHandle.ptr != 0, \"SRV descriptor handle is invalid\");\n\n        d3dDevice->CreateShaderResourceView(resource, &srvDesc, cpuHandle);\n\n        // Bind SRV descriptor table (graphics root parameter 4: SRV table)\n        // Note: This shares the texture SRV table; storage buffers and textures will be bound\n        // together. PRECEDENCE: Storage buffer SRVs bound here will override any previous texture\n        // SRVs bound via Bind SRV descriptor table using dynamic root parameter index from pipeline\n        // This may rebind the SRV table that was previously set by bindBindGroup(texture). The last\n        // SetGraphicsRootDescriptorTable call wins - storage buffer bindings take precedence.\n        const UINT srvTableIndex = currentRenderPipelineState_->getSRVTableRootParameterIndex();\n        if (srvTableIndex != UINT_MAX) {\n          commandList_->SetGraphicsRootDescriptorTable(srvTableIndex, gpuHandle);\n          IGL_D3D12_LOG_VERBOSE(\n              \"bindBindGroup(buffer): bound read-only storage buffer at slot %u (SRV t%u, root \"\n              \"param %u, GPU handle 0x%llx)\\n\",\n              slot,\n              slot,\n              srvTableIndex,\n              gpuHandle.ptr);\n        } else {\n          IGL_LOG_ERROR(\n              \"bindBindGroup(buffer): Pipeline has no SRV table root parameter for storage buffer \"\n              \"binding\\n\");\n        }\n      }\n    }\n  }\n\n  // Store the GPU handle of the FIRST descriptor in the contiguous block.\n  // SetGraphicsRootDescriptorTable will use this handle, and D3D12 will access\n  // subsequent descriptors using: baseHandle + tableOffset.\n  D3D12_GPU_DESCRIPTOR_HANDLE baseGpuHandle = context.getCbvSrvUavGpuHandle(baseDescriptorIndex);\n  cachedCbvTableGpuHandles_[0] = baseGpuHandle;\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"bindBindGroup(buffer): Stored base GPU handle 0x%llx for CBV table (spans heap[%u] to \"\n      \"heap[%u])\\n\",\n      baseGpuHandle.ptr,\n      baseDescriptorIndex,\n      baseDescriptorIndex + cbvTableCount_ - 1);\n\n  // Mark that bindBindGroup was used (vs storage buffer SRV or binder paths).\n  usedBindGroup_ = true;\n}\n\n// G-001: Barrier batching implementation\nvoid RenderCommandEncoder::flushBarriers() {\n  if (pendingBarriers_.empty()) {\n    return;\n  }\n  if (!commandBuffer_.isRecording() || !commandList_) {\n    IGL_LOG_ERROR(\n        \"RenderCommandEncoder::flushBarriers called on closed command list; clearing pending \"\n        \"barriers\\n\");\n    pendingBarriers_.clear();\n    return;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Flushing %zu batched resource barriers\\n\",\n                        pendingBarriers_.size());\n\n  // Submit all pending barriers in a single API call\n  commandList_->ResourceBarrier(static_cast<UINT>(pendingBarriers_.size()),\n                                pendingBarriers_.data());\n\n  // Clear the pending barrier queue\n  pendingBarriers_.clear();\n}\n\nvoid RenderCommandEncoder::queueBarrier(const D3D12_RESOURCE_BARRIER& barrier) {\n  pendingBarriers_.push_back(barrier);\n  IGL_D3D12_LOG_VERBOSE(\"RenderCommandEncoder: Queued barrier (total pending: %zu)\\n\",\n                        pendingBarriers_.size());\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/RenderCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <vector>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/RenderPass.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12ResourcesBinder.h>\n#include <igl/d3d12/RenderPipelineState.h>\n\nnamespace igl::d3d12 {\n\nclass CommandBuffer;\n\n/**\n * @brief D3D12 implementation of render command encoder\n *\n * IMPORTANT BINDING PRECEDENCE NOTES:\n * ====================================\n * This encoder supports multiple ways to bind shader resources (textures, buffers, samplers).\n * Some binding methods share the same D3D12 root parameters, which means the LAST binding wins:\n *\n * 1. SRV Table (Root Parameter 4):\n *    - Textures bound via bindTexture() or D3D12ResourcesBinder\n *    - Storage buffers (read-only) bound via bindBindGroup(BindGroupBufferHandle)\n *    - If you bind BOTH textures and storage buffer SRVs, the last binding before draw() wins\n *    - Application code must coordinate which binding method to use per draw call\n *\n * 2. Sampler Table (Root Parameter 5):\n *    - Samplers bound via bindSamplerState() or D3D12ResourcesBinder\n *\n * 3. CBV Table (Root Parameter 3):\n *    - Constant buffers b3-b15 bound via bindBindGroup(BindGroupBufferHandle)\n *\n * See individual binding method documentation for details.\n */\nclass RenderCommandEncoder final : public IRenderCommandEncoder {\n public:\n  RenderCommandEncoder(CommandBuffer& commandBuffer,\n                       const std::shared_ptr<IFramebuffer>& framebuffer);\n  ~RenderCommandEncoder() override = default;\n\n  // Initialize encoder and setup render targets\n  // IMPORTANT: Must be called exactly once after construction by\n  // CommandBuffer::createRenderCommandEncoder. Calling multiple times will result in resource leaks\n  // and undefined behavior. Debug builds will assert if called more than once.\n  void begin(const RenderPassDesc& renderPass);\n\n  void endEncoding() override;\n\n  void bindViewport(const Viewport& viewport) override;\n  void bindScissorRect(const ScissorRect& rect) override;\n  void bindRenderPipelineState(const std::shared_ptr<IRenderPipelineState>& pipelineState) override;\n  void bindDepthStencilState(const std::shared_ptr<IDepthStencilState>& depthStencilState) override;\n\n  void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset = 0) override;\n  void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset = 0) override;\n\n  void bindBytes(size_t index, uint8_t target, const void* data, size_t length) override;\n  void bindPushConstants(const void* data, size_t length, size_t offset = 0) override;\n  void bindSamplerState(size_t index, uint8_t target, ISamplerState* samplerState) override;\n  void bindTexture(size_t index, uint8_t target, ITexture* texture) override;\n  void bindTexture(size_t index, ITexture* texture) override;\n  void bindUniform(const UniformDesc& uniformDesc, const void* data) override;\n\n  void draw(size_t vertexCount,\n            uint32_t instanceCount = 1,\n            uint32_t firstVertex = 0,\n            uint32_t baseInstance = 0) override;\n  void drawIndexed(size_t indexCount,\n                   uint32_t instanceCount = 1,\n                   uint32_t firstIndex = 0,\n                   int32_t vertexOffset = 0,\n                   uint32_t baseInstance = 0) override;\n  void drawMeshTasks(const Dimensions& threadgroupsPerGrid,\n                     const Dimensions& threadsPerTaskThreadgroup,\n                     const Dimensions& threadsPerMeshThreadgroup) override;\n  void multiDrawIndirect(IBuffer& indirectBuffer,\n                         size_t indirectBufferOffset,\n                         uint32_t drawCount,\n                         uint32_t stride = 0) override;\n  void multiDrawIndexedIndirect(IBuffer& indirectBuffer,\n                                size_t indirectBufferOffset,\n                                uint32_t drawCount,\n                                uint32_t stride = 0) override;\n\n  void setStencilReferenceValue(uint32_t value) override;\n  void setBlendColor(const Color& color) override;\n  void setDepthBias(float depthBias, float slopeScale, float clamp) override;\n\n  // ICommandEncoder interface\n  void pushDebugGroupLabel(const char* label, const Color& color) const override;\n  void insertDebugEventLabel(const char* label, const Color& color) const override;\n  void popDebugGroupLabel() const override;\n\n  // Additional IRenderCommandEncoder interface\n  void bindBuffer(uint32_t index,\n                  uint8_t target,\n                  IBuffer* buffer,\n                  size_t bufferOffset = 0,\n                  size_t bufferSize = 0) override;\n  void bindBuffer(uint32_t index, IBuffer* buffer, size_t offset, size_t bufferSize) override;\n  void bindBindGroup(BindGroupTextureHandle handle) override;\n  void bindBindGroup(BindGroupBufferHandle handle,\n                     uint32_t numDynamicOffsets,\n                     const uint32_t* dynamicOffsets) override;\n\n private:\n  CommandBuffer& commandBuffer_;\n  ID3D12GraphicsCommandList* commandList_;\n\n  // Centralized resource binding management.\n  D3D12ResourcesBinder resourcesBinder_;\n\n  // Guard against multiple begin() calls.\n  // begin() allocates RTV/DSV descriptors and sets up state that should only happen once\n  bool hasBegun_ = false;\n\n  // Cache current vertex stride from bound pipeline's input layout\n  UINT currentVertexStride_ = 0;\n  // Optional per-slot strides fetched from pipeline\n  UINT vertexStrides_[IGL_BUFFER_BINDINGS_MAX] = {};\n\n  // Offscreen RTV/DSV support\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  // If DescriptorHeapManager is available, we borrow indices from its heaps.\n  // Otherwise, we fall back to small ad-hoc heaps (constructor local scope).\n  std::vector<uint32_t> rtvIndices_;\n  uint32_t dsvIndex_ = UINT32_MAX;\n  D3D12_CPU_DESCRIPTOR_HANDLE dsvHandle_{};\n\n  // Per-frame descriptor heaps (set in constructor from D3D12Context)\n  // CRITICAL: These MUST be per-frame isolated heaps, NOT shared DescriptorHeapManager heaps\n  ID3D12DescriptorHeap* cbvSrvUavHeap_ = nullptr;\n  ID3D12DescriptorHeap* samplerHeap_ = nullptr;\n\n  // Cached descriptor table GPU handles\n  // These are set by bindTexture/bindSamplerState and used in drawIndexed\n  // to avoid invalidation by multiple SetDescriptorHeaps calls\n  // IMPORTANT: Bindings must be DENSE and start at slot 0 for each table.\n  // SetGraphicsRootDescriptorTable always uses cachedTextureGpuHandles_[0] as the base,\n  // so binding only higher slots (e.g., slot 1 without slot 0) will fail.\n  D3D12_GPU_DESCRIPTOR_HANDLE cachedTextureGpuHandle_{};\n  D3D12_GPU_DESCRIPTOR_HANDLE cachedSamplerGpuHandle_{};\n  // Support up to IGL_TEXTURE_SAMPLERS_MAX textures/samplers (t0-t15, s0-s15)\n  D3D12_GPU_DESCRIPTOR_HANDLE cachedTextureGpuHandles_[IGL_TEXTURE_SAMPLERS_MAX] = {};\n  D3D12_GPU_DESCRIPTOR_HANDLE cachedSamplerGpuHandles_[IGL_TEXTURE_SAMPLERS_MAX] = {};\n  size_t cachedTextureCount_ = 0;\n  size_t cachedSamplerCount_ = 0;\n\n  // Track whether bindBindGroup was explicitly called (vs storage buffer SRV or binder paths)\n  // This decouples bindBindGroup usage from cachedTextureCount_/cachedSamplerCount_\n  bool usedBindGroup_ = false;\n\n  // Cached vertex buffer bindings\n  // Store binding info and apply in draw calls after pipeline state is bound\n  struct CachedVertexBuffer {\n    D3D12_GPU_VIRTUAL_ADDRESS bufferLocation = 0;\n    UINT sizeInBytes = 0;\n    bool bound = false;\n  };\n  CachedVertexBuffer cachedVertexBuffers_[IGL_BUFFER_BINDINGS_MAX] = {};\n\n  // Cached index buffer binding\n  struct CachedIndexBuffer {\n    D3D12_GPU_VIRTUAL_ADDRESS bufferLocation = 0;\n    UINT sizeInBytes = 0;\n    DXGI_FORMAT format = DXGI_FORMAT_UNKNOWN;\n    bool bound = false;\n  };\n  CachedIndexBuffer cachedIndexBuffer_ = {};\n\n  // Track which constant buffer root parameters have been bound\n  // D3D12 requires all root parameters to be set before drawing\n  // Root parameter 1 = b0 (UniformsPerFrame) - root descriptor\n  // Root parameter 2 = b1 (UniformsPerObject) - root descriptor\n  D3D12_GPU_VIRTUAL_ADDRESS cachedConstantBuffers_[2] = {0, 0}; // b0, b1\n  bool constantBufferBound_[2] = {false, false};\n\n  // Cached CBV descriptor table for b2-b15 (root parameter 3)\n  // Supports up to 14 additional uniform buffers via descriptor table\n  D3D12_GPU_DESCRIPTOR_HANDLE cachedCbvTableGpuHandles_[IGL_BUFFER_BINDINGS_MAX] = {};\n  bool cbvTableBound_[IGL_BUFFER_BINDINGS_MAX] = {};\n  size_t cbvTableCount_ = 0;\n\n  // G-001: Barrier batching infrastructure\n  // Accumulates resource barriers and flushes them before draw/dispatch calls\n  // This reduces D3D12 API overhead and allows driver optimization\n  std::vector<D3D12_RESOURCE_BARRIER> pendingBarriers_;\n\n  // Flushes all pending barriers to the command list\n  void flushBarriers();\n\n  // Queue a barrier for batched submission\n  void queueBarrier(const D3D12_RESOURCE_BARRIER& barrier);\n\n  // Dynamic PSO selection (Vulkan-style pattern)\n  // Stores actual framebuffer formats captured in begin()\n  // Used to select correct PSO variant at draw time\n  D3D12RenderPipelineDynamicState dynamicState_;\n\n  // Cached render pipeline state for dynamic PSO variant selection\n  const RenderPipelineState* currentRenderPipelineState_ = nullptr;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/RenderPipelineState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/RenderPipelineState.h>\n\n#include <d3dcompiler.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPipelineReflection.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12ReflectionUtils.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/ShaderModule.h>\n#include <igl/d3d12/VertexInputState.h>\n\nnamespace igl::d3d12 {\n\nRenderPipelineState::RenderPipelineState(const RenderPipelineDesc& desc,\n                                         igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState,\n                                         igl::d3d12::ComPtr<ID3D12RootSignature> rootSignature) :\n  IRenderPipelineState(desc),\n  pipelineState_(std::move(pipelineState)),\n  rootSignature_(std::move(rootSignature)) {\n  // Set D3D12 object names for PIX debugging\n  const std::string& debugName = desc.debugName.toString();\n  if (pipelineState_.Get() && !debugName.empty()) {\n    std::wstring wideName(debugName.begin(), debugName.end());\n    pipelineState_->SetName((L\"PSO_\" + wideName).c_str());\n    IGL_D3D12_LOG_VERBOSE(\"RenderPipelineState: Set PIX debug name 'PSO_%s'\\n\", debugName.c_str());\n  }\n  if (rootSignature_.Get() && !debugName.empty()) {\n    std::wstring wideName(debugName.begin(), debugName.end());\n    rootSignature_->SetName((L\"RootSig_\" + wideName).c_str());\n    IGL_D3D12_LOG_VERBOSE(\"RenderPipelineState: Set PIX root signature name 'RootSig_%s'\\n\",\n                          debugName.c_str());\n  }\n\n  // Extract shader reflection info for future dynamic binding support\n  if (desc.shaderStages) {\n    auto* vertexModule =\n        static_cast<const ShaderModule*>(desc.shaderStages->getVertexModule().get());\n    auto* fragmentModule =\n        static_cast<const ShaderModule*>(desc.shaderStages->getFragmentModule().get());\n\n    // Prefer vertex shader for push constants if both define them\n    if (vertexModule) {\n      const auto& vsReflection = vertexModule->getReflectionInfo();\n      if (vsReflection.hasPushConstants) {\n        shaderReflection_.hasPushConstants = true;\n        shaderReflection_.pushConstantSlot = vsReflection.pushConstantSlot;\n        shaderReflection_.pushConstantSize = vsReflection.pushConstantSize;\n        shaderReflection_.pushConstantRootParamIndex =\n            0; // Push constants are always root parameter 0\n        IGL_D3D12_LOG_VERBOSE(\n            \"RenderPipelineState: VS push constants at b%u (%u DWORDs, root param %u)\\n\",\n            vsReflection.pushConstantSlot,\n            vsReflection.pushConstantSize,\n            shaderReflection_.pushConstantRootParamIndex);\n      }\n    }\n\n    // Use fragment shader push constants if vertex shader doesn't have them\n    if (!shaderReflection_.hasPushConstants && fragmentModule) {\n      const auto& psReflection = fragmentModule->getReflectionInfo();\n      if (psReflection.hasPushConstants) {\n        shaderReflection_.hasPushConstants = true;\n        shaderReflection_.pushConstantSlot = psReflection.pushConstantSlot;\n        shaderReflection_.pushConstantSize = psReflection.pushConstantSize;\n        shaderReflection_.pushConstantRootParamIndex =\n            0; // Push constants are always root parameter 0\n        IGL_D3D12_LOG_VERBOSE(\n            \"RenderPipelineState: PS push constants at b%u (%u DWORDs, root param %u)\\n\",\n            psReflection.pushConstantSlot,\n            psReflection.pushConstantSize,\n            shaderReflection_.pushConstantRootParamIndex);\n      }\n    }\n  }\n\n  // Convert IGL primitive topology to D3D12 primitive topology\n  switch (desc.topology) {\n  case PrimitiveType::Point:\n    primitiveTopology_ = D3D_PRIMITIVE_TOPOLOGY_POINTLIST;\n    IGL_D3D12_LOG_VERBOSE(\"RenderPipelineState: Set topology to POINTLIST\\n\");\n    break;\n  case PrimitiveType::Line:\n    primitiveTopology_ = D3D_PRIMITIVE_TOPOLOGY_LINELIST;\n    IGL_D3D12_LOG_VERBOSE(\"RenderPipelineState: Set topology to LINELIST\\n\");\n    break;\n  case PrimitiveType::LineStrip:\n    primitiveTopology_ = D3D_PRIMITIVE_TOPOLOGY_LINESTRIP;\n    IGL_D3D12_LOG_VERBOSE(\"RenderPipelineState: Set topology to LINESTRIP\\n\");\n    break;\n  case PrimitiveType::Triangle:\n    primitiveTopology_ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;\n    IGL_D3D12_LOG_VERBOSE(\"RenderPipelineState: Set topology to TRIANGLELIST\\n\");\n    break;\n  case PrimitiveType::TriangleStrip:\n    primitiveTopology_ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP;\n    IGL_D3D12_LOG_VERBOSE(\"RenderPipelineState: Set topology to TRIANGLESTRIP\\n\");\n    break;\n  }\n\n  // Cache the vertex stride from the vertex input state binding (slot 0) if available\n  const auto& vis = desc.vertexInputState;\n  if (vis) {\n    // Try backend downcast to extract VertexInputStateDesc\n    if (auto* d3dVis = dynamic_cast<const igl::d3d12::VertexInputState*>(vis.get())) {\n      const auto& d = d3dVis->getDesc();\n      if (d.numInputBindings > 0) {\n        vertexStride_ = static_cast<uint32_t>(d.inputBindings[0].stride);\n        // Cache per-slot strides\n        for (size_t s = 0; s < d.numInputBindings && s < IGL_BUFFER_BINDINGS_MAX; ++s) {\n          vertexStrides_[s] = static_cast<uint32_t>(d.inputBindings[s].stride);\n        }\n        // If attributes reference slots beyond numInputBindings or strides are zero,\n        // derive reasonable defaults so sessions that bind to slot 1 still work.\n        size_t maxSlot = 0;\n        for (size_t i = 0; i < d.numAttributes; ++i) {\n          if (d.attributes[i].bufferIndex > maxSlot) {\n            maxSlot = d.attributes[i].bufferIndex;\n          }\n        }\n        // Helper to compute a minimal stride per slot from attributes (max end offset among attrs\n        // in that slot)\n        auto computeStrideForSlot = [&](size_t slot) -> uint32_t {\n          size_t maxEnd = 0;\n          for (size_t i = 0; i < d.numAttributes; ++i) {\n            const auto& a = d.attributes[i];\n            if (a.bufferIndex != slot)\n              continue;\n            size_t compSize = 0;\n            switch (a.format) {\n            case VertexAttributeFormat::Float1:\n              compSize = 4;\n              break;\n            case VertexAttributeFormat::Float2:\n              compSize = 8;\n              break;\n            case VertexAttributeFormat::Float3:\n              compSize = 12;\n              break;\n            case VertexAttributeFormat::Float4:\n              compSize = 16;\n              break;\n            case VertexAttributeFormat::Byte1:\n              compSize = 1;\n              break;\n            case VertexAttributeFormat::Byte2:\n              compSize = 2;\n              break;\n            case VertexAttributeFormat::Byte4:\n              compSize = 4;\n              break;\n            case VertexAttributeFormat::UByte4Norm:\n              compSize = 4;\n              break;\n            default:\n              compSize = 0;\n              break;\n            }\n            maxEnd = std::max(maxEnd, a.offset + compSize);\n          }\n          // Fallback to slot0 stride if present\n          if (maxEnd == 0 && d.numInputBindings > 0) {\n            return static_cast<uint32_t>(d.inputBindings[0].stride);\n          }\n          return static_cast<uint32_t>(maxEnd);\n        };\n        for (size_t s = 0; s <= maxSlot && s < IGL_BUFFER_BINDINGS_MAX; ++s) {\n          if (vertexStrides_[s] == 0) {\n            vertexStrides_[s] = computeStrideForSlot(s);\n          }\n        }\n        if (vertexStride_ == 0) {\n          vertexStride_ = vertexStrides_[0];\n        }\n      }\n    }\n  }\n}\n\nstd::shared_ptr<IRenderPipelineReflection> RenderPipelineState::renderPipelineReflection() {\n  if (reflection_) {\n    return reflection_;\n  }\n\n  struct ReflectionImpl final : public IRenderPipelineReflection {\n    std::vector<BufferArgDesc> ubs;\n    std::vector<SamplerArgDesc> samplers;\n    std::vector<TextureArgDesc> textures;\n    const std::vector<BufferArgDesc>& allUniformBuffers() const override {\n      return ubs;\n    }\n    const std::vector<SamplerArgDesc>& allSamplers() const override {\n      return samplers;\n    }\n    const std::vector<TextureArgDesc>& allTextures() const override {\n      return textures;\n    }\n  };\n\n  auto out = std::make_shared<ReflectionImpl>();\n\n  auto reflectShader = [&](const std::shared_ptr<IShaderModule>& mod, ShaderStage stage) {\n    if (!mod)\n      return;\n    auto* d3dMod = dynamic_cast<const igl::d3d12::ShaderModule*>(mod.get());\n    if (!d3dMod)\n      return;\n    const auto& bc = d3dMod->getBytecode();\n    if (bc.empty())\n      return;\n    igl::d3d12::ComPtr<ID3D12ShaderReflection> refl;\n    if (FAILED(D3DReflect(bc.data(), bc.size(), IID_PPV_ARGS(refl.GetAddressOf()))))\n      return;\n    D3D12_SHADER_DESC sd{};\n    if (FAILED(refl->GetDesc(&sd)))\n      return;\n\n    // Constant buffers\n    for (UINT i = 0; i < sd.ConstantBuffers; ++i) {\n      auto* cb = refl->GetConstantBufferByIndex(i);\n      D3D12_SHADER_BUFFER_DESC cbd{};\n      if (FAILED(cb->GetDesc(&cbd)))\n        continue;\n      int bufferIndex = -1;\n      for (UINT r = 0; r < sd.BoundResources; ++r) {\n        D3D12_SHADER_INPUT_BIND_DESC bind{};\n        if (SUCCEEDED(refl->GetResourceBindingDesc(r, &bind))) {\n          if (bind.Type == D3D_SIT_CBUFFER && std::string(bind.Name) == std::string(cbd.Name)) {\n            bufferIndex = static_cast<int>(bind.BindPoint);\n            break;\n          }\n        }\n      }\n      BufferArgDesc ub;\n      ub.name = igl::genNameHandle(cbd.Name ? cbd.Name : \"\");\n      ub.bufferAlignment = 256;\n      ub.bufferDataSize = cbd.Size;\n      ub.bufferIndex = bufferIndex;\n      ub.shaderStage = stage;\n      ub.isUniformBlock = true;\n      for (UINT v = 0; v < cbd.Variables; ++v) {\n        auto* var = cb->GetVariableByIndex(v);\n        D3D12_SHADER_VARIABLE_DESC vd{};\n        if (FAILED(var->GetDesc(&vd)))\n          continue;\n        auto* t = var->GetType();\n        if (!t)\n          continue;\n        D3D12_SHADER_TYPE_DESC td{};\n        if (FAILED(t->GetDesc(&td)))\n          continue;\n        BufferArgDesc::BufferMemberDesc m;\n        m.name = igl::genNameHandle(vd.Name ? vd.Name : \"\");\n        m.type = ReflectionUtils::mapUniformType(td);\n        m.offset = vd.StartOffset;\n        m.arrayLength = td.Elements ? td.Elements : 1;\n        ub.members.push_back(std::move(m));\n      }\n      out->ubs.push_back(std::move(ub));\n    }\n\n    // Textures and samplers\n    for (UINT r = 0; r < sd.BoundResources; ++r) {\n      D3D12_SHADER_INPUT_BIND_DESC bind{};\n      if (FAILED(refl->GetResourceBindingDesc(r, &bind)))\n        continue;\n      if (bind.Type == D3D_SIT_TEXTURE) {\n        TextureArgDesc t;\n        t.name = bind.Name ? bind.Name : \"\";\n        t.type = TextureType::TwoD;\n        t.textureIndex = bind.BindPoint;\n        t.shaderStage = stage;\n        out->textures.push_back(std::move(t));\n      } else if (bind.Type == D3D_SIT_SAMPLER) {\n        SamplerArgDesc s;\n        s.name = bind.Name ? bind.Name : \"\";\n        s.samplerIndex = bind.BindPoint;\n        s.shaderStage = stage;\n        out->samplers.push_back(std::move(s));\n      }\n    }\n  };\n\n  if (auto stages = getRenderPipelineDesc().shaderStages) {\n    reflectShader(stages->getVertexModule(), ShaderStage::Vertex);\n    reflectShader(stages->getFragmentModule(), ShaderStage::Fragment);\n  }\n\n  reflection_ = out;\n  return reflection_;\n}\n\nvoid RenderPipelineState::setRenderPipelineReflection(\n    const IRenderPipelineReflection& /*renderPipelineReflection*/) {}\n\nint RenderPipelineState::getIndexByName(const igl::NameHandle& /*name*/,\n                                        ShaderStage /*stage*/) const {\n  return -1;\n}\n\nint RenderPipelineState::getIndexByName(const std::string& /*name*/, ShaderStage /*stage*/) const {\n  return -1;\n}\n\nID3D12PipelineState* RenderPipelineState::getPipelineState(\n    const D3D12RenderPipelineDynamicState& dynamicState,\n    Device& device) const {\n  // Fast path: Check if dynamic state matches base PSO\n  // This happens when pipeline was created with same formats as framebuffer\n  const auto& desc = getRenderPipelineDesc();\n  bool matchesBasePSO = true;\n\n  // Check render target formats\n  const UINT numRTs = static_cast<UINT>(std::min<size_t>(desc.targetDesc.colorAttachments.size(),\n                                                         D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT));\n  for (UINT i = 0; i < numRTs; ++i) {\n    if (dynamicState.rtvFormats[i] !=\n        textureFormatToDXGIFormat(desc.targetDesc.colorAttachments[i].textureFormat)) {\n      matchesBasePSO = false;\n      break;\n    }\n  }\n\n  // Check depth-stencil format\n  if (matchesBasePSO) {\n    const DXGI_FORMAT baseDSVFormat =\n        (desc.targetDesc.depthAttachmentFormat != TextureFormat::Invalid)\n            ? textureFormatToDXGIFormat(desc.targetDesc.depthAttachmentFormat)\n            : DXGI_FORMAT_UNKNOWN;\n    if (dynamicState.dsvFormat != baseDSVFormat) {\n      matchesBasePSO = false;\n    }\n  }\n\n  // Return base PSO if formats match\n  if (matchesBasePSO) {\n    return pipelineState_.Get();\n  }\n\n  // Check variant cache\n  auto it = psoVariants_.find(dynamicState);\n  if (it != psoVariants_.end()) {\n    return it->second.Get();\n  }\n\n  // Create PSO variant with substituted formats (Vulkan-style on-demand creation)\n  IGL_LOG_INFO(\"Creating PSO variant: RTV[0]=%d (base) -> %d (framebuffer)\\n\",\n               textureFormatToDXGIFormat(desc.targetDesc.colorAttachments[0].textureFormat),\n               dynamicState.rtvFormats[0]);\n\n  // Following Vulkan's approach: create modified RenderPipelineDesc with substituted formats\n  // Create a modified descriptor with framebuffer formats substituted\n  RenderPipelineDesc variantDesc = desc; // Copy all state\n\n  // Substitute RT formats from actual framebuffer\n  for (UINT i = 0; i < numRTs; ++i) {\n    if (dynamicState.rtvFormats[i] != DXGI_FORMAT_UNKNOWN) {\n      // Convert DXGI format back to IGL TextureFormat\n      variantDesc.targetDesc.colorAttachments[i].textureFormat =\n          dxgiFormatToTextureFormat(dynamicState.rtvFormats[i]);\n      IGL_LOG_INFO(\"  RTV[%u]: substituted format %d\\n\", i, dynamicState.rtvFormats[i]);\n    }\n  }\n\n  // Substitute DSV format if present\n  if (dynamicState.dsvFormat != DXGI_FORMAT_UNKNOWN) {\n    variantDesc.targetDesc.depthAttachmentFormat =\n        dxgiFormatToTextureFormat(dynamicState.dsvFormat);\n  }\n\n  // Call Device::createPipelineStateVariant() to create PSO with modified formats\n  Result variantResult;\n  auto variantPSO =\n      device.createPipelineStateVariant(variantDesc, rootSignature_.Get(), &variantResult);\n\n  if (!variantPSO.Get()) {\n    IGL_LOG_ERROR(\"PSO variant creation failed: %s\\n\", variantResult.message.c_str());\n    IGL_LOG_ERROR(\"Falling back to base PSO (this will cause D3D12 validation errors!)\\n\");\n    return pipelineState_.Get(); // Fallback to base PSO\n  }\n\n  // Cache the variant for future use\n  psoVariants_[dynamicState] = variantPSO;\n  IGL_LOG_INFO(\"PSO variant created and cached successfully: PSO=%p\\n\", variantPSO.Get());\n\n  return variantPSO.Get();\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/RenderPipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <unordered_map>\n#include <igl/RenderPipelineState.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass Device; // Forward declaration\n\n/**\n * @brief Encapsulates dynamic render state that affects PSO selection\n *\n * Following Vulkan's RenderPipelineDynamicState pattern, this structure serves as a hash key\n * for PSO variant caching. D3D12 PSOs are immutable and must match the exact render target\n * formats at draw time.\n *\n * Key differences from Vulkan:\n * - Vulkan: renderPassIndex_ encodes all render pass compatibility (formats + load/store ops)\n * - D3D12: We only need render target formats (no render pass object exists)\n *\n * The structure is designed for efficient hashing and comparison:\n * - Packed into fixed-size array for fast memcmp\n * - Zero-initialized padding for consistent hashing\n */\nstruct D3D12RenderPipelineDynamicState {\n  // Render target formats (up to 8 MRT targets)\n  std::array<DXGI_FORMAT, D3D12_SIMULTANEOUS_RENDER_TARGET_COUNT> rtvFormats;\n  // Depth-stencil format\n  DXGI_FORMAT dsvFormat;\n\n  D3D12RenderPipelineDynamicState() {\n    rtvFormats.fill(DXGI_FORMAT_UNKNOWN);\n    dsvFormat = DXGI_FORMAT_UNKNOWN;\n  }\n\n  bool operator==(const D3D12RenderPipelineDynamicState& other) const {\n    return rtvFormats == other.rtvFormats && dsvFormat == other.dsvFormat;\n  }\n\n  struct HashFunction {\n    size_t operator()(const D3D12RenderPipelineDynamicState& s) const {\n      size_t hash = 0;\n      for (const auto& fmt : s.rtvFormats) {\n        hash ^= std::hash<DXGI_FORMAT>{}(fmt) + 0x9e3779b9 + (hash << 6) + (hash >> 2);\n      }\n      hash ^= std::hash<DXGI_FORMAT>{}(s.dsvFormat) + 0x9e3779b9 + (hash << 6) + (hash >> 2);\n      return hash;\n    }\n  };\n};\n\nclass RenderPipelineState final : public IRenderPipelineState {\n public:\n  RenderPipelineState(const RenderPipelineDesc& desc,\n                      igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState,\n                      igl::d3d12::ComPtr<ID3D12RootSignature> rootSignature);\n  ~RenderPipelineState() override = default;\n\n  std::shared_ptr<IRenderPipelineReflection> renderPipelineReflection() override;\n  void setRenderPipelineReflection(\n      const IRenderPipelineReflection& renderPipelineReflection) override;\n  int getIndexByName(const igl::NameHandle& name, ShaderStage stage) const override;\n  int getIndexByName(const std::string& name, ShaderStage stage) const override;\n\n  // D3D12-specific accessors\n  ID3D12PipelineState* getPipelineState() const {\n    return pipelineState_.Get();\n  }\n\n  /**\n   * @brief Get PSO variant for specific render target formats (Vulkan-style dynamic PSO selection)\n   *\n   * This method follows Vulkan's getVkPipeline(dynamicState) pattern to create PSO variants\n   * on-demand based on actual framebuffer formats. D3D12 PSOs are immutable and must exactly\n   * match render target formats at creation time.\n   *\n   * @param dynamicState Contains actual framebuffer RTVformats and DSV format at draw time\n   * @param device IGL D3D12 device for PSO creation\n   * @return PSO variant matching the requested formats, or nullptr on error\n   */\n  ID3D12PipelineState* getPipelineState(const D3D12RenderPipelineDynamicState& dynamicState,\n                                        Device& device) const;\n\n  ID3D12RootSignature* getRootSignature() const {\n    return rootSignature_.Get();\n  }\n  uint32_t getVertexStride() const {\n    return vertexStride_;\n  }\n  uint32_t getVertexStride(size_t slot) const {\n    return (slot < IGL_BUFFER_BINDINGS_MAX) ? vertexStrides_[slot] : 0;\n  }\n  D3D_PRIMITIVE_TOPOLOGY getPrimitiveTopology() const {\n    return primitiveTopology_;\n  }\n\n  // Query push constant binding info from shader reflection\n  bool hasPushConstants() const {\n    return shaderReflection_.hasPushConstants;\n  }\n  UINT getPushConstantSlot() const {\n    return shaderReflection_.pushConstantSlot;\n  }\n  UINT getPushConstantRootParameterIndex() const {\n    return shaderReflection_.pushConstantRootParamIndex;\n  }\n\n  // Query root parameter layout (dynamic based on shader reflection)\n  UINT getCBVTableRootParameterIndex() const {\n    return rootParamLayout_.cbvTableIndex;\n  }\n  UINT getSRVTableRootParameterIndex() const {\n    return rootParamLayout_.srvTableIndex;\n  }\n  UINT getSamplerTableRootParameterIndex() const {\n    return rootParamLayout_.samplerTableIndex;\n  }\n  UINT getUAVTableRootParameterIndex() const {\n    return rootParamLayout_.uavTableIndex;\n  }\n\n  // Query descriptor range sizes (how many descriptors the root signature expects)\n  UINT getCBVDescriptorCount() const {\n    return rootParamLayout_.cbvDescriptorCount;\n  }\n  UINT getSRVDescriptorCount() const {\n    return rootParamLayout_.srvDescriptorCount;\n  }\n  UINT getSamplerDescriptorCount() const {\n    return rootParamLayout_.samplerDescriptorCount;\n  }\n  UINT getUAVDescriptorCount() const {\n    return rootParamLayout_.uavDescriptorCount;\n  }\n\n private:\n  friend class Device; // Device needs access to create PSO variants\n\n  // Base PSO created from RenderPipelineDesc (may not match actual framebuffer formats)\n  igl::d3d12::ComPtr<ID3D12PipelineState> pipelineState_;\n  igl::d3d12::ComPtr<ID3D12RootSignature> rootSignature_;\n  std::shared_ptr<IRenderPipelineReflection> reflection_;\n  uint32_t vertexStride_ = 0;\n  uint32_t vertexStrides_[IGL_BUFFER_BINDINGS_MAX] = {};\n  D3D_PRIMITIVE_TOPOLOGY primitiveTopology_ = D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST;\n\n  // PSO variant cache following Vulkan's pattern\n  // Maps framebuffer formats → PSO variant\n  mutable std::unordered_map<D3D12RenderPipelineDynamicState,\n                             igl::d3d12::ComPtr<ID3D12PipelineState>,\n                             D3D12RenderPipelineDynamicState::HashFunction>\n      psoVariants_;\n\n  // Shader reflection info for dynamic resource binding\n  // Stores merged reflection data from vertex + fragment shaders\n  struct {\n    bool hasPushConstants = false;\n    UINT pushConstantSlot = UINT_MAX;\n    UINT pushConstantSize = 0;\n    UINT pushConstantRootParamIndex =\n        0; // Root parameter index for push constants in root signature\n  } shaderReflection_;\n\n  // Root parameter layout (dynamically computed from shader reflection)\n  // These indices tell encoders which root parameter to use for each resource type\n  // Pure reflection-based approach - no hardcoded assumptions\n  struct {\n    UINT cbvTableIndex = UINT_MAX; // CBV descriptor table\n    UINT srvTableIndex = UINT_MAX; // SRV descriptor table\n    UINT samplerTableIndex = UINT_MAX; // Sampler descriptor table\n    UINT uavTableIndex = UINT_MAX; // UAV descriptor table\n\n    // Descriptor range sizes (from root signature, 0 to maxSlot inclusive)\n    // These define how many descriptors the root signature expects in each table\n    // ResourcesBinder must allocate exactly these counts to match the root signature\n    UINT cbvDescriptorCount = 0; // Number of CBV descriptors (0 to maxCBVSlot)\n    UINT srvDescriptorCount = 0; // Number of SRV descriptors (0 to maxSRVSlot)\n    UINT samplerDescriptorCount = 0; // Number of sampler descriptors (0 to maxSamplerSlot)\n    UINT uavDescriptorCount = 0; // Number of UAV descriptors (0 to maxUAVSlot)\n  } rootParamLayout_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/SamplerState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/SamplerState.h>\n\n#include <functional>\n\nnamespace igl::d3d12 {\n\nsize_t SamplerState::hash() const noexcept {\n  size_t h = 0;\n\n  // Hash all D3D12_SAMPLER_DESC fields using the same technique as Device.cpp\n  // Magic constant 0x9e3779b9 is the golden ratio used for hash mixing\n  h ^= std::hash<int>{}(static_cast<int>(desc_.Filter)) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<int>{}(static_cast<int>(desc_.AddressU)) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<int>{}(static_cast<int>(desc_.AddressV)) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<int>{}(static_cast<int>(desc_.AddressW)) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<float>{}(desc_.MipLODBias) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<uint32_t>{}(desc_.MaxAnisotropy) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<int>{}(static_cast<int>(desc_.ComparisonFunc)) + 0x9e3779b9 + (h << 6) + (h >> 2);\n\n  // Hash border color array\n  h ^= std::hash<float>{}(desc_.BorderColor[0]) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<float>{}(desc_.BorderColor[1]) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<float>{}(desc_.BorderColor[2]) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<float>{}(desc_.BorderColor[3]) + 0x9e3779b9 + (h << 6) + (h >> 2);\n\n  h ^= std::hash<float>{}(desc_.MinLOD) + 0x9e3779b9 + (h << 6) + (h >> 2);\n  h ^= std::hash<float>{}(desc_.MaxLOD) + 0x9e3779b9 + (h << 6) + (h >> 2);\n\n  return h;\n}\n\nbool SamplerState::operator==(const SamplerState& rhs) const noexcept {\n  // Compare all D3D12_SAMPLER_DESC fields\n  return desc_.Filter == rhs.desc_.Filter && desc_.AddressU == rhs.desc_.AddressU &&\n         desc_.AddressV == rhs.desc_.AddressV && desc_.AddressW == rhs.desc_.AddressW &&\n         desc_.MipLODBias == rhs.desc_.MipLODBias &&\n         desc_.MaxAnisotropy == rhs.desc_.MaxAnisotropy &&\n         desc_.ComparisonFunc == rhs.desc_.ComparisonFunc &&\n         desc_.BorderColor[0] == rhs.desc_.BorderColor[0] &&\n         desc_.BorderColor[1] == rhs.desc_.BorderColor[1] &&\n         desc_.BorderColor[2] == rhs.desc_.BorderColor[2] &&\n         desc_.BorderColor[3] == rhs.desc_.BorderColor[3] && desc_.MinLOD == rhs.desc_.MinLOD &&\n         desc_.MaxLOD == rhs.desc_.MaxLOD;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/SamplerState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/SamplerState.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass SamplerState final : public ISamplerState {\n public:\n  explicit SamplerState(const D3D12_SAMPLER_DESC& desc) : desc_(desc) {}\n  ~SamplerState() override = default;\n\n  bool isYUV() const noexcept override {\n    return false;\n  }\n\n  const D3D12_SAMPLER_DESC& getDesc() const {\n    return desc_;\n  }\n\n  /// Computes hash value based on D3D12_SAMPLER_DESC fields\n  size_t hash() const noexcept;\n\n  /// Compares two SamplerState objects for equality\n  bool operator==(const SamplerState& rhs) const noexcept;\n\n private:\n  D3D12_SAMPLER_DESC desc_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/ShaderModule.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/ShaderModule.h>\n\n#include <algorithm>\n#include <cstring>\n\nnamespace igl::d3d12 {\n\nvoid ShaderModule::setReflection(igl::d3d12::ComPtr<ID3D12ShaderReflection> reflection) {\n  reflection_ = reflection;\n  if (reflection_.Get()) {\n    extractShaderMetadata();\n  }\n}\n\nvoid ShaderModule::extractShaderMetadata() {\n  if (!reflection_.Get()) {\n    IGL_LOG_ERROR(\"ShaderModule::extractShaderMetadata: reflection_ is NULL!\\n\");\n    return;\n  }\n\n  D3D12_SHADER_DESC shaderDesc = {};\n  HRESULT hr = reflection_->GetDesc(&shaderDesc);\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"ShaderModule::extractShaderMetadata: Failed to get shader desc: 0x%08X\\n\", hr);\n    return;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"ShaderModule: Reflection extracted - %u constant buffers, %u bound resources, %u input \"\n      \"params, %u output params\\n\",\n      shaderDesc.ConstantBuffers,\n      shaderDesc.BoundResources,\n      shaderDesc.InputParameters,\n      shaderDesc.OutputParameters);\n\n  // Reset reflection info\n  reflectionInfo_ = ShaderReflectionInfo{};\n\n  // Extract resource bindings (textures, buffers, samplers, UAVs)\n  resourceBindings_.clear();\n  for (UINT i = 0; i < shaderDesc.BoundResources; i++) {\n    D3D12_SHADER_INPUT_BIND_DESC bindDesc = {};\n    hr = reflection_->GetResourceBindingDesc(i, &bindDesc);\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\n          \"ShaderModule::extractShaderMetadata: Failed to get resource binding %u: 0x%08X\\n\",\n          i,\n          hr);\n      continue;\n    }\n\n    ResourceBinding binding;\n    binding.name = bindDesc.Name;\n    binding.type = bindDesc.Type;\n    binding.bindPoint = bindDesc.BindPoint;\n    binding.bindCount = bindDesc.BindCount;\n    binding.space = bindDesc.Space;\n\n    resourceBindings_.push_back(binding);\n\n    // Populate reflection info for root signature selection\n    if (bindDesc.Type == D3D_SIT_CBUFFER) {\n      reflectionInfo_.usedCBVSlots.push_back(bindDesc.BindPoint);\n      reflectionInfo_.maxCBVSlot = std::max(reflectionInfo_.maxCBVSlot, bindDesc.BindPoint);\n      IGL_LOG_INFO(\"  Found CBV: '%s' at b%u\\n\", bindDesc.Name, bindDesc.BindPoint);\n    } else if (bindDesc.Type == D3D_SIT_TEXTURE || bindDesc.Type == D3D_SIT_STRUCTURED ||\n               bindDesc.Type == D3D_SIT_BYTEADDRESS) {\n      reflectionInfo_.usedSRVSlots.push_back(bindDesc.BindPoint);\n      reflectionInfo_.maxSRVSlot = std::max(reflectionInfo_.maxSRVSlot, bindDesc.BindPoint);\n      IGL_LOG_INFO(\"  Found SRV: '%s' at t%u\\n\", bindDesc.Name, bindDesc.BindPoint);\n    } else if (bindDesc.Type == D3D_SIT_UAV_RWTYPED || bindDesc.Type == D3D_SIT_UAV_RWSTRUCTURED ||\n               bindDesc.Type == D3D_SIT_UAV_RWBYTEADDRESS ||\n               bindDesc.Type == D3D_SIT_UAV_APPEND_STRUCTURED ||\n               bindDesc.Type == D3D_SIT_UAV_CONSUME_STRUCTURED ||\n               bindDesc.Type == D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER) {\n      reflectionInfo_.usedUAVSlots.push_back(bindDesc.BindPoint);\n      reflectionInfo_.maxUAVSlot = std::max(reflectionInfo_.maxUAVSlot, bindDesc.BindPoint);\n      IGL_LOG_INFO(\"  Found UAV: '%s' at u%u\\n\", bindDesc.Name, bindDesc.BindPoint);\n    } else if (bindDesc.Type == D3D_SIT_SAMPLER) {\n      reflectionInfo_.usedSamplerSlots.push_back(bindDesc.BindPoint);\n      reflectionInfo_.maxSamplerSlot = std::max(reflectionInfo_.maxSamplerSlot, bindDesc.BindPoint);\n      IGL_LOG_INFO(\"  Found Sampler: '%s' at s%u\\n\", bindDesc.Name, bindDesc.BindPoint);\n    }\n\n    const char* typeStr = \"Unknown\";\n    switch (bindDesc.Type) {\n    case D3D_SIT_CBUFFER:\n      typeStr = \"CBV (Constant Buffer)\";\n      break;\n    case D3D_SIT_TBUFFER:\n      typeStr = \"TBuffer\";\n      break;\n    case D3D_SIT_TEXTURE:\n      typeStr = \"SRV (Texture)\";\n      break;\n    case D3D_SIT_SAMPLER:\n      typeStr = \"Sampler\";\n      break;\n    case D3D_SIT_UAV_RWTYPED:\n      typeStr = \"UAV (RW Typed)\";\n      break;\n    case D3D_SIT_STRUCTURED:\n      typeStr = \"SRV (StructuredBuffer)\";\n      break;\n    case D3D_SIT_UAV_RWSTRUCTURED:\n      typeStr = \"UAV (RWStructuredBuffer)\";\n      break;\n    case D3D_SIT_BYTEADDRESS:\n      typeStr = \"SRV (ByteAddressBuffer)\";\n      break;\n    case D3D_SIT_UAV_RWBYTEADDRESS:\n      typeStr = \"UAV (RWByteAddressBuffer)\";\n      break;\n    case D3D_SIT_UAV_APPEND_STRUCTURED:\n      typeStr = \"UAV (AppendStructuredBuffer)\";\n      break;\n    case D3D_SIT_UAV_CONSUME_STRUCTURED:\n      typeStr = \"UAV (ConsumeStructuredBuffer)\";\n      break;\n    case D3D_SIT_UAV_RWSTRUCTURED_WITH_COUNTER:\n      typeStr = \"UAV (RWStructuredBuffer with counter)\";\n      break;\n    default:\n      break;\n    }\n\n    IGL_LOG_DEBUG(\n        \"  Resource [%u]: '%s' | Type: %s | Slot: t%u/b%u/s%u/u%u | Space: %u | Count: %u\\n\",\n        i,\n        bindDesc.Name,\n        typeStr,\n        bindDesc.Type == D3D_SIT_TEXTURE ? bindDesc.BindPoint : 0,\n        bindDesc.Type == D3D_SIT_CBUFFER ? bindDesc.BindPoint : 0,\n        bindDesc.Type == D3D_SIT_SAMPLER ? bindDesc.BindPoint : 0,\n        (bindDesc.Type == D3D_SIT_UAV_RWTYPED || bindDesc.Type == D3D_SIT_UAV_RWSTRUCTURED)\n            ? bindDesc.BindPoint\n            : 0,\n        bindDesc.Space,\n        bindDesc.BindCount);\n  }\n\n  // Extract constant buffer information\n  constantBuffers_.clear();\n  for (UINT i = 0; i < shaderDesc.ConstantBuffers; i++) {\n    ID3D12ShaderReflectionConstantBuffer* cb = reflection_->GetConstantBufferByIndex(i);\n    if (!cb) {\n      IGL_LOG_ERROR(\"ShaderModule::extractShaderMetadata: Failed to get constant buffer %u\\n\", i);\n      continue;\n    }\n\n    D3D12_SHADER_BUFFER_DESC bufferDesc = {};\n    hr = cb->GetDesc(&bufferDesc);\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\n          \"ShaderModule::extractShaderMetadata: Failed to get CB desc %u: 0x%08X\\n\", i, hr);\n      continue;\n    }\n\n    ConstantBufferInfo cbInfo;\n    cbInfo.name = bufferDesc.Name;\n    cbInfo.size = bufferDesc.Size;\n    cbInfo.numVariables = bufferDesc.Variables;\n\n    constantBuffers_.push_back(cbInfo);\n\n    IGL_LOG_DEBUG(\"  Constant Buffer [%u]: '%s' | Size: %u bytes | Variables: %u\\n\",\n                  i,\n                  bufferDesc.Name,\n                  bufferDesc.Size,\n                  bufferDesc.Variables);\n\n    // Optionally log variable details for debugging\n    for (UINT v = 0; v < bufferDesc.Variables; v++) {\n      ID3D12ShaderReflectionVariable* var = cb->GetVariableByIndex(v);\n      if (var) {\n        D3D12_SHADER_VARIABLE_DESC varDesc = {};\n        if (SUCCEEDED(var->GetDesc(&varDesc))) {\n          IGL_LOG_DEBUG(\"    Variable [%u]: '%s' | Offset: %u | Size: %u bytes\\n\",\n                        v,\n                        varDesc.Name,\n                        varDesc.StartOffset,\n                        varDesc.Size);\n        }\n      }\n    }\n  }\n\n  // Detect push constants by name convention: cbuffer must be named \"PushConstants\"\n  // This allows distinguishing between push constants (used with bindBytes) and regular\n  // small uniform buffers (used with bindBuffer), since both may be small (≤64 bytes).\n  for (const auto& binding : resourceBindings_) {\n    if (binding.type == D3D_SIT_CBUFFER) {\n      // Find the corresponding constant buffer info to get size and name\n      for (const auto& cbInfo : constantBuffers_) {\n        if (cbInfo.name == binding.name) {\n          // Check if this is push constants by name (must contain \"PushConstant\")\n          if (cbInfo.name.find(\"PushConstant\") != std::string::npos && cbInfo.size <= 64) {\n            reflectionInfo_.hasPushConstants = true;\n            reflectionInfo_.pushConstantSlot = binding.bindPoint;\n            reflectionInfo_.pushConstantSize = (cbInfo.size + 3) / 4; // Convert bytes to DWORDs\n            IGL_D3D12_LOG_VERBOSE(\"  Detected push constants: '%s' at b%u (%u DWORDs / %u bytes)\\n\",\n                                  cbInfo.name.c_str(),\n                                  binding.bindPoint,\n                                  reflectionInfo_.pushConstantSize,\n                                  cbInfo.size);\n          }\n          break;\n        }\n      }\n    }\n  }\n}\n\nbool ShaderModule::hasResource(const std::string& name) const {\n  for (const auto& binding : resourceBindings_) {\n    if (binding.name == name) {\n      return true;\n    }\n  }\n  return false;\n}\n\nUINT ShaderModule::getResourceBindPoint(const std::string& name) const {\n  for (const auto& binding : resourceBindings_) {\n    if (binding.name == name) {\n      return binding.bindPoint;\n    }\n  }\n  return UINT_MAX; // Not found\n}\n\nsize_t ShaderModule::getConstantBufferSize(const std::string& name) const {\n  for (const auto& cb : constantBuffers_) {\n    if (cb.name == name) {\n      return cb.size;\n    }\n  }\n  return 0; // Not found\n}\n\nbool ShaderModule::validateBytecode() const {\n  // Check minimum size for signature\n  if (bytecode_.size() < 4) {\n    IGL_LOG_ERROR(\"Shader bytecode too small (< 4 bytes): %zu bytes\\n\", bytecode_.size());\n    return false;\n  }\n\n  const char* signature = reinterpret_cast<const char*>(bytecode_.data());\n\n  // Valid signatures: \"DXBC\" (legacy D3D11/D3D12) or \"DXIL\" (modern D3D12)\n  if (std::memcmp(signature, \"DXBC\", 4) == 0) {\n    IGL_LOG_DEBUG(\"Shader bytecode validated: DXBC format (%zu bytes)\\n\", bytecode_.size());\n    return true; // Valid DXBC shader\n  }\n\n  if (std::memcmp(signature, \"DXIL\", 4) == 0) {\n    IGL_LOG_DEBUG(\"Shader bytecode validated: DXIL format (%zu bytes)\\n\", bytecode_.size());\n    return true; // Valid DXIL shader\n  }\n\n  // Log the invalid signature for debugging\n  IGL_LOG_ERROR(\n      \"Invalid shader bytecode signature: 0x%02X%02X%02X%02X (expected 'DXBC' or 'DXIL')\\n\",\n      static_cast<unsigned char>(signature[0]),\n      static_cast<unsigned char>(signature[1]),\n      static_cast<unsigned char>(signature[2]),\n      static_cast<unsigned char>(signature[3]));\n  return false;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/ShaderModule.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <d3d12shader.h>\n#include <string>\n#include <vector>\n#include <igl/Common.h>\n#include <igl/Shader.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass ShaderModule final : public IShaderModule {\n public:\n  // Resource binding information extracted from shader reflection\n  struct ResourceBinding {\n    std::string name;\n    D3D_SHADER_INPUT_TYPE type; // CBV, SRV, UAV, Sampler\n    UINT bindPoint;\n    UINT bindCount;\n    UINT space;\n  };\n\n  // Constant buffer information from reflection\n  struct ConstantBufferInfo {\n    std::string name;\n    UINT size;\n    UINT numVariables;\n  };\n\n  // Shader resource usage summary for root signature selection\n  struct ShaderReflectionInfo {\n    // Push constants (inline root constants)\n    bool hasPushConstants = false;\n    UINT pushConstantSlot = UINT_MAX; // Which b# register\n    UINT pushConstantSize = 0; // Size in 32-bit values\n\n    // Resource slot usage (for conflict detection)\n    std::vector<UINT> usedCBVSlots; // Constant buffer slots (b#)\n    std::vector<UINT> usedSRVSlots; // Shader resource view slots (t#)\n    std::vector<UINT> usedUAVSlots; // Unordered access view slots (u#)\n    std::vector<UINT> usedSamplerSlots; // Sampler slots (s#)\n\n    // Maximum slot indices used (for root signature sizing)\n    UINT maxCBVSlot = 0;\n    UINT maxSRVSlot = 0;\n    UINT maxUAVSlot = 0;\n    UINT maxSamplerSlot = 0;\n  };\n\n  ShaderModule(ShaderModuleInfo info, std::vector<uint8_t> bytecode) :\n    IShaderModule(info), bytecode_(std::move(bytecode)) {\n    if (!validateBytecode()) {\n      IGL_LOG_ERROR(\"ShaderModule: Created with invalid bytecode (validation failed)\\n\");\n    }\n  }\n  ~ShaderModule() override = default;\n\n  const std::vector<uint8_t>& getBytecode() const {\n    return bytecode_;\n  }\n\n  // Shader reflection API\n  void setReflection(igl::d3d12::ComPtr<ID3D12ShaderReflection> reflection);\n  const std::vector<ResourceBinding>& getResourceBindings() const {\n    return resourceBindings_;\n  }\n  const std::vector<ConstantBufferInfo>& getConstantBuffers() const {\n    return constantBuffers_;\n  }\n  const ShaderReflectionInfo& getReflectionInfo() const {\n    return reflectionInfo_;\n  }\n\n  bool hasResource(const std::string& name) const;\n  UINT getResourceBindPoint(const std::string& name) const;\n  size_t getConstantBufferSize(const std::string& name) const;\n\n  // Bytecode validation\n  bool validateBytecode() const;\n\n private:\n  std::vector<uint8_t> bytecode_; // DXIL bytecode\n  igl::d3d12::ComPtr<ID3D12ShaderReflection> reflection_;\n  std::vector<ResourceBinding> resourceBindings_;\n  std::vector<ConstantBufferInfo> constantBuffers_;\n  ShaderReflectionInfo reflectionInfo_;\n\n  void extractShaderMetadata();\n};\n\nclass ShaderStages final : public IShaderStages {\n public:\n  ShaderStages(ShaderStagesDesc desc) : IShaderStages(desc) {}\n  ~ShaderStages() override = default;\n};\n\nclass ShaderLibrary final : public IShaderLibrary {\n public:\n  explicit ShaderLibrary(std::vector<std::shared_ptr<IShaderModule>> modules) :\n    IShaderLibrary(std::move(modules)) {}\n  ~ShaderLibrary() override = default;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Texture.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/Texture.h>\n\n#include <algorithm>\n#include <igl/d3d12/D3D12FenceWaiter.h>\n#include <igl/d3d12/DXCCompiler.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/UploadRingBuffer.h>\n\n// No channel swap needed: DXGI_FORMAT_R8G8B8A8_UNORM matches IGL TextureFormat::RGBA_UNorm8 byte\n// order.\n\nnamespace igl::d3d12 {\n\nnamespace {\n// Import ComPtr for readability\ntemplate<typename T>\nusing ComPtr = igl::d3d12::ComPtr<T>;\n} // namespace\n\nstd::shared_ptr<Texture> Texture::createFromResource(ID3D12Resource* resource,\n                                                     TextureFormat format,\n                                                     const TextureDesc& desc,\n                                                     ID3D12Device* device,\n                                                     ID3D12CommandQueue* queue,\n                                                     D3D12_RESOURCE_STATES initialState,\n                                                     Device* iglDevice) {\n  if (!resource) {\n    IGL_LOG_ERROR(\"Texture::createFromResource - resource is NULL!\\n\");\n    return nullptr;\n  }\n\n  auto texture = std::make_shared<Texture>(format);\n\n  // Attach the resource to ComPtr (takes ownership, AddRefs)\n  resource->AddRef();\n  texture->resource_.Attach(resource);\n\n  texture->device_ = device;\n  texture->queue_ = queue;\n  texture->iglDevice_ = iglDevice; // Store igl Device for upload-related operations.\n  texture->format_ = format;\n  texture->dimensions_ = Dimensions{desc.width, desc.height, desc.depth};\n  texture->type_ = desc.type;\n  texture->numLayers_ = desc.numLayers;\n  texture->numMipLevels_ = desc.numMipLevels;\n  texture->samples_ = desc.numSamples;\n  texture->usage_ = desc.usage;\n\n  texture->initializeStateTracking(initialState);\n\n  IGL_D3D12_LOG_VERBOSE(\"Texture::createFromResource - SUCCESS: %dx%d format=%d\\n\",\n                        desc.width,\n                        desc.height,\n                        (int)format);\n\n  return texture;\n}\n\nstd::shared_ptr<Texture> Texture::createTextureView(std::shared_ptr<Texture> parent,\n                                                    const TextureViewDesc& desc) {\n  if (!parent) {\n    IGL_LOG_ERROR(\"Texture::createTextureView - parent is NULL!\\n\");\n    return nullptr;\n  }\n\n  // Determine the format to use for the view\n  TextureFormat viewFormat = (desc.format != TextureFormat::Invalid) ? desc.format\n                                                                     : parent->format_;\n\n  auto view = std::make_shared<Texture>(viewFormat);\n\n  // Share the D3D12 resource (don't create new one)\n  // ComPtr doesn't have copy assignment, so we need to use Attach() and AddRef()\n  auto* parentResource = parent->resource_.Get();\n  if (parentResource) {\n    parentResource->AddRef();\n    view->resource_.Attach(parentResource);\n  }\n  view->isView_ = true;\n  view->parentTexture_ = parent;\n\n  // Defensive check: parent and view must share the same underlying D3D12 resource\n  IGL_DEBUG_ASSERT(parent->resource_.Get() == view->resource_.Get(),\n                   \"Parent and view must share the same D3D12 resource\");\n\n  // Store view parameters (cumulative offsets for nested views)\n  view->mipLevelOffset_ = parent->mipLevelOffset_ + desc.mipLevel;\n  view->numMipLevelsInView_ = desc.numMipLevels;\n\n  // CRITICAL FIX: D3D12 SRV descriptors require MipLevels >= 1\n  // If numMipLevels is 0 (uninitialized), default to 1 to prevent invalid SRV creation\n  if (view->numMipLevelsInView_ == 0) {\n    IGL_LOG_ERROR(\n        \"Texture::createTextureView - numMipLevels is 0, defaulting to 1 (SRV requires MipLevels \"\n        \">= 1)\\n\");\n    view->numMipLevelsInView_ = 1;\n  }\n\n  // Validate mip level bounds to prevent out-of-range access\n  const uint32_t parentMipCount = parent->getNumMipLevels();\n  const uint32_t requestedMipEnd = desc.mipLevel + view->numMipLevelsInView_;\n  if (requestedMipEnd > parentMipCount) {\n    IGL_LOG_ERROR(\n        \"Texture::createTextureView - mip range [%u, %u) exceeds parent mip count %u, clamping\\n\",\n        desc.mipLevel,\n        requestedMipEnd,\n        parentMipCount);\n    // Clamp to valid range\n    view->numMipLevelsInView_ = (parentMipCount > desc.mipLevel) ? (parentMipCount - desc.mipLevel)\n                                                                 : 1;\n  }\n\n  view->arraySliceOffset_ = parent->arraySliceOffset_ + desc.layer;\n  view->numArraySlicesInView_ = desc.numLayers;\n\n  // Copy properties from parent\n  view->device_ = parent->device_;\n  view->queue_ = parent->queue_;\n  view->iglDevice_ = parent->iglDevice_; // Propagate igl Device pointer.\n  view->format_ = viewFormat;\n  view->type_ = desc.type;\n  view->usage_ = parent->usage_;\n  view->samples_ = parent->samples_;\n\n  // Calculate view dimensions based on mip level\n  const uint32_t mipDivisor = 1u << desc.mipLevel;\n  view->dimensions_ = Dimensions{std::max(1u, parent->dimensions_.width >> desc.mipLevel),\n                                 std::max(1u, parent->dimensions_.height >> desc.mipLevel),\n                                 std::max(1u, parent->dimensions_.depth >> desc.mipLevel)};\n  view->numLayers_ = desc.numLayers;\n  // Use the validated numMipLevelsInView_ value (which has been corrected if it was 0)\n  view->numMipLevels_ = view->numMipLevelsInView_;\n\n  // Views delegate state tracking to the root texture and do not maintain separate state.\n  // State is accessed via getStateOwner(), which walks to the root for views.\n  // Views share the same D3D12 resource and subresourceStates_ tracking with their root.\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"Texture::createTextureView - SUCCESS: view of %dx%d, mips %u-%u, layers %u-%u\\n\",\n      view->dimensions_.width,\n      view->dimensions_.height,\n      desc.mipLevel,\n      desc.mipLevel + desc.numMipLevels - 1,\n      desc.layer,\n      desc.layer + desc.numLayers - 1);\n\n  return view;\n}\n\nTexture::~Texture() {\n  // Texture views share the parent's resource, so they don't own descriptors.\n  // Only free descriptors for non-view textures.\n  if (isView_) {\n    return;\n  }\n\n  // Get descriptor heap manager from device.\n  // Note: in the current architecture, descriptors are allocated/freed by RenderCommandEncoder,\n  // not stored in Texture. This destructor is defensive in case descriptors become per-texture\n  // later.\n  if (!iglDevice_) {\n    return;\n  }\n\n  // For now, descriptors are managed by RenderCommandEncoder and freed when the encoder is\n  // destroyed. The rtvIndices_, dsvIndices_, and srvIndex_ members are currently unused but\n  // reserved for future use.\n}\n\nResult Texture::upload(const TextureRangeDesc& range, const void* data, size_t bytesPerRow) const {\n  IGL_D3D12_LOG_VERBOSE(\"Texture::upload() - START: %dx%d\\n\", range.width, range.height);\n\n  if (!device_ || !queue_ || !resource_.Get()) {\n    IGL_LOG_ERROR(\"Texture::upload() - FAILED: device, queue, or resource not available\\n\");\n    return Result(Result::Code::RuntimeError,\n                  \"Device, queue, or resource not available for upload\");\n  }\n\n  if (!data) {\n    IGL_LOG_ERROR(\"Texture::upload() - FAILED: data is null\\n\");\n    return Result(Result::Code::ArgumentInvalid, \"Upload data is null\");\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"Texture::upload() - Proceeding with upload\\n\");\n\n  // Calculate dimensions and data size\n  const uint32_t width = range.width > 0 ? range.width : dimensions_.width;\n  const uint32_t height = range.height > 0 ? range.height : dimensions_.height;\n  const uint32_t depth = range.depth > 0 ? range.depth : dimensions_.depth;\n\n  const auto props = TextureFormatProperties::fromTextureFormat(format_);\n  const bool isBC7 =\n      (format_ == TextureFormat::RGBA_BC7_UNORM_4x4 || format_ == TextureFormat::RGBA_BC7_SRGB_4x4);\n\n  // Calculate bytes per row if not provided. For block-compressed formats\n  // like BC7, rows are expressed in blocks, not texels, so use the number\n  // of blocks in X multiplied by bytesPerBlock.\n  if (bytesPerRow == 0) {\n    if (isBC7) {\n      const uint32_t blocksX = (width + 3u) / 4u;\n      bytesPerRow = static_cast<size_t>(blocksX) * props.bytesPerBlock;\n    } else {\n      const size_t bpp = std::max<uint8_t>(props.bytesPerBlock, 1);\n      bytesPerRow = static_cast<size_t>(width) * bpp;\n    }\n  }\n\n  // Get the resource description to calculate required size\n  D3D12_RESOURCE_DESC resourceDesc = resource_->GetDesc();\n\n  // Determine how many layers/faces and mip levels we need to upload\n  const uint32_t numSlicesToUpload = (type_ == TextureType::Cube) ? range.numFaces\n                                                                  : range.numLayers;\n  const uint32_t baseSlice = (type_ == TextureType::Cube) ? range.face : range.layer;\n  const uint32_t numMipsToUpload = range.numMipLevels;\n  const uint32_t baseMip = range.mipLevel;\n  IGL_D3D12_LOG_VERBOSE(\n      \"Texture::upload - type=%d, baseSlice=%u, numSlicesToUpload=%u, baseMip=%u, \"\n      \"numMipsToUpload=%u\\n\",\n      (int)type_,\n      baseSlice,\n      numSlicesToUpload,\n      baseMip,\n      numMipsToUpload);\n\n  // Calculate total staging buffer size for ALL subresources\n  UINT64 totalStagingSize = 0;\n  std::vector<D3D12_PLACED_SUBRESOURCE_FOOTPRINT> layouts;\n  std::vector<UINT> numRowsArray;\n  std::vector<UINT64> rowSizesArray;\n\n  for (uint32_t mipOffset = 0; mipOffset < numMipsToUpload; ++mipOffset) {\n    for (uint32_t sliceOffset = 0; sliceOffset < numSlicesToUpload; ++sliceOffset) {\n      const uint32_t subresource =\n          calcSubresourceIndex(baseMip + mipOffset, baseSlice + sliceOffset);\n      D3D12_PLACED_SUBRESOURCE_FOOTPRINT layout = {};\n      UINT numRows = 0;\n      UINT64 rowSize = 0;\n      UINT64 subresSize = 0;\n      device_->GetCopyableFootprints(&resourceDesc,\n                                     subresource,\n                                     1,\n                                     totalStagingSize,\n                                     &layout,\n                                     &numRows,\n                                     &rowSize,\n                                     &subresSize);\n      layouts.push_back(layout);\n      numRowsArray.push_back(numRows);\n      rowSizesArray.push_back(rowSize);\n      totalStagingSize += subresSize;\n    }\n  }\n\n  // Try to allocate from upload ring buffer first.\n  UploadRingBuffer* ringBuffer = nullptr;\n  UploadRingBuffer::Allocation ringAllocation;\n  bool useRingBuffer = false;\n  UINT64 uploadFenceValue = 0;\n\n  if (iglDevice_) {\n    // Reclaim completed upload buffers before allocating new ones.\n    iglDevice_->processCompletedUploads();\n\n    ringBuffer = iglDevice_->getUploadRingBuffer();\n    // Get fence value that will signal when this upload completes\n    uploadFenceValue = iglDevice_->getNextUploadFenceValue();\n\n    if (ringBuffer) {\n      // D3D12 requires 512-byte alignment for texture uploads\n      // (D3D12_TEXTURE_DATA_PLACEMENT_ALIGNMENT)\n      constexpr uint64_t kTextureUploadAlignment = 512;\n      ringAllocation =\n          ringBuffer->allocate(totalStagingSize, kTextureUploadAlignment, uploadFenceValue);\n\n      if (ringAllocation.valid) {\n        useRingBuffer = true;\n      }\n    }\n  }\n\n  // Fallback: Create temporary staging buffer if ring buffer allocation failed\n  igl::d3d12::ComPtr<ID3D12Resource> stagingBuffer;\n  void* mappedData = nullptr;\n  uint64_t stagingBaseOffset = 0;\n  HRESULT hr = S_OK;\n\n  if (useRingBuffer) {\n    // Use ring buffer allocation\n    mappedData = ringAllocation.cpuAddress;\n    stagingBaseOffset = ringAllocation.offset;\n  } else {\n    // Create temporary staging buffer\n    D3D12_HEAP_PROPERTIES uploadHeapProps = {};\n    uploadHeapProps.Type = D3D12_HEAP_TYPE_UPLOAD;\n    uploadHeapProps.CreationNodeMask = 1;\n    uploadHeapProps.VisibleNodeMask = 1;\n\n    D3D12_RESOURCE_DESC stagingDesc = {};\n    stagingDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;\n    stagingDesc.Width = totalStagingSize;\n    stagingDesc.Height = 1;\n    stagingDesc.DepthOrArraySize = 1;\n    stagingDesc.MipLevels = 1;\n    stagingDesc.Format = DXGI_FORMAT_UNKNOWN;\n    stagingDesc.SampleDesc.Count = 1;\n    stagingDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;\n\n    hr = device_->CreateCommittedResource(&uploadHeapProps,\n                                          D3D12_HEAP_FLAG_NONE,\n                                          &stagingDesc,\n                                          D3D12_RESOURCE_STATE_GENERIC_READ,\n                                          nullptr,\n                                          IID_PPV_ARGS(stagingBuffer.GetAddressOf()));\n    if (FAILED(hr)) {\n      return Result(Result::Code::RuntimeError, \"Failed to create staging buffer\");\n    }\n\n    // Map staging buffer once\n    hr = stagingBuffer->Map(0, nullptr, &mappedData);\n    if (FAILED(hr)) {\n      return Result(Result::Code::RuntimeError, \"Failed to map staging buffer\");\n    }\n  }\n\n  // Copy all subresource data to the staging buffer.\n  // Direct copy: no channel swap needed for RGBA formats.\n  // DXGI_FORMAT_R8G8B8A8_UNORM has R,G,B,A byte order matching IGL TextureFormat::RGBA_UNorm8.\n  size_t srcDataOffset = 0;\n  size_t layoutIdx = 0;\n\n  for (uint32_t mipOffset = 0; mipOffset < numMipsToUpload; ++mipOffset) {\n    const uint32_t mipWidth = std::max(width >> (baseMip + mipOffset), 1u);\n    const uint32_t mipHeight = std::max(height >> (baseMip + mipOffset), 1u);\n    const uint32_t mipDepth = std::max(depth >> (baseMip + mipOffset), 1u);\n\n    size_t mipBytesPerRow = 0;\n    if (isBC7) {\n      const uint32_t blocksX = (mipWidth + 3u) / 4u;\n      mipBytesPerRow = static_cast<size_t>(blocksX) * props.bytesPerBlock;\n    } else {\n      mipBytesPerRow = (bytesPerRow * mipWidth) / width;\n    }\n\n    for (uint32_t sliceOffset = 0; sliceOffset < numSlicesToUpload; ++sliceOffset) {\n      const auto& layout = layouts[layoutIdx];\n      const UINT numRows = numRowsArray[layoutIdx];\n      const UINT64 rowSize = rowSizesArray[layoutIdx];\n      layoutIdx++;\n\n      const uint8_t* srcData = static_cast<const uint8_t*>(data) + srcDataOffset;\n      uint8_t* dstData = static_cast<uint8_t*>(mappedData) + layout.Offset;\n      const size_t copyBytes = std::min(static_cast<size_t>(rowSize), mipBytesPerRow);\n\n      // For uncompressed formats, the source data is tightly packed by the\n      // requested region's height (mipHeight). For block-compressed formats\n      // (e.g. BC7), numRows represents the number of block rows returned by\n      // GetCopyableFootprints. Use mipHeight for uncompressed uploads and\n      // numRows for BC7 so that source layout matches the caller's data.\n      const UINT rowsToCopy = isBC7 ? numRows : mipHeight;\n\n      const size_t srcDepthPitch = mipBytesPerRow * rowsToCopy;\n      const size_t dstDepthPitch = layout.Footprint.RowPitch * layout.Footprint.Height;\n\n      for (UINT z = 0; z < mipDepth; ++z) {\n        const uint8_t* srcSlice = srcData + z * srcDepthPitch;\n        uint8_t* dstSlice = dstData + z * dstDepthPitch;\n        for (UINT row = 0; row < rowsToCopy; ++row) {\n          const uint8_t* srcRow = srcSlice + row * mipBytesPerRow;\n          uint8_t* dstRow = dstSlice + row * layout.Footprint.RowPitch;\n          memcpy(dstRow, srcRow, copyBytes);\n        }\n      }\n\n      // Advance source pointer by the size of this subresource (all rows, all slices).\n      srcDataOffset += mipBytesPerRow * rowsToCopy * mipDepth;\n    }\n  }\n\n  // Unmap temporary staging buffer (ring buffer stays persistently mapped)\n  if (!useRingBuffer && stagingBuffer.Get()) {\n    stagingBuffer->Unmap(0, nullptr);\n  }\n\n  // Get command allocator from pool with fence tracking when an iglDevice is available.\n  igl::d3d12::ComPtr<ID3D12CommandAllocator> cmdAlloc;\n  if (iglDevice_) {\n    cmdAlloc = iglDevice_->getUploadCommandAllocator();\n    if (!cmdAlloc.Get()) {\n      return Result(Result::Code::RuntimeError, \"Failed to get command allocator from pool\");\n    }\n  } else {\n    // Fallback for textures created without Device* (shouldn't happen in normal flow)\n    hr = device_->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                         IID_PPV_ARGS(cmdAlloc.GetAddressOf()));\n    if (FAILED(hr)) {\n      return Result(Result::Code::RuntimeError, \"Failed to create command allocator\");\n    }\n  }\n\n  igl::d3d12::ComPtr<ID3D12GraphicsCommandList> cmdList;\n  hr = device_->CreateCommandList(0,\n                                  D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                  cmdAlloc.Get(),\n                                  nullptr,\n                                  IID_PPV_ARGS(cmdList.GetAddressOf()));\n  if (FAILED(hr)) {\n    if (iglDevice_) {\n      // Return allocator to pool with fence value 0 (immediately available)\n      iglDevice_->returnUploadCommandAllocator(cmdAlloc, 0);\n    }\n    return Result(Result::Code::RuntimeError, \"Failed to create command list\");\n  }\n\n  // Record all copy commands\n  layoutIdx = 0;\n  for (uint32_t mipOffset = 0; mipOffset < numMipsToUpload; ++mipOffset) {\n    const uint32_t currentMip = baseMip + mipOffset;\n    const uint32_t mipWidth = std::max(width >> currentMip, 1u);\n    const uint32_t mipHeight = std::max(height >> currentMip, 1u);\n    const uint32_t mipDepth = std::max(depth >> currentMip, 1u);\n\n    for (uint32_t sliceOffset = 0; sliceOffset < numSlicesToUpload; ++sliceOffset) {\n      const uint32_t currentSlice = baseSlice + sliceOffset;\n      const uint32_t subresource = calcSubresourceIndex(currentMip, currentSlice);\n\n      // const_cast needed because upload is const (required by ITexture interface)\n      // but state tracking is non-const by design\n      const_cast<Texture*>(this)->transitionTo(\n          cmdList.Get(), D3D12_RESOURCE_STATE_COPY_DEST, currentMip, currentSlice);\n\n      D3D12_TEXTURE_COPY_LOCATION dst = {};\n      dst.pResource = resource_.Get();\n      dst.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;\n      dst.SubresourceIndex = subresource;\n\n      if (type_ == TextureType::Cube) {\n        IGL_D3D12_LOG_VERBOSE(\n            \"CopyTextureRegion: Copying to CUBE subresource=%u (mip=%u, slice=%u)\\n\",\n            subresource,\n            currentMip,\n            currentSlice);\n      }\n\n      D3D12_TEXTURE_COPY_LOCATION src = {};\n      src.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;\n\n      // Use ring buffer or temporary staging buffer\n      if (useRingBuffer) {\n        src.pResource = ringBuffer->getUploadHeap();\n        // Adjust layout offset to account for ring buffer base offset\n        D3D12_PLACED_SUBRESOURCE_FOOTPRINT adjustedLayout = layouts[layoutIdx];\n        adjustedLayout.Offset += stagingBaseOffset;\n        src.PlacedFootprint = adjustedLayout;\n      } else {\n        src.pResource = stagingBuffer.Get();\n        src.PlacedFootprint = layouts[layoutIdx];\n      }\n      layoutIdx++;\n\n      // For block-compressed formats like BC7, CopyTextureRegion requires the\n      // source box to be aligned to block boundaries. Small mips (e.g. 2x2)\n      // violate this if we specify an explicit box in texel units. Since the\n      // staging layout already matches the subresource footprint, simply copy\n      // the entire subresource by passing a null box for BC7.\n      if (isBC7) {\n        cmdList->CopyTextureRegion(&dst, range.x, range.y, range.z, &src, nullptr);\n      } else {\n        D3D12_BOX srcBox = {0, 0, 0, mipWidth, mipHeight, mipDepth};\n        cmdList->CopyTextureRegion(&dst, range.x, range.y, range.z, &src, &srcBox);\n      }\n\n      // const_cast needed (see above)\n      const_cast<Texture*>(this)->transitionTo(\n          cmdList.Get(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, currentMip, currentSlice);\n    }\n  }\n\n  cmdList->Close();\n\n  // Execute once and wait once\n  ID3D12CommandList* cmdLists[] = {cmdList.Get()};\n  queue_->ExecuteCommandLists(1, cmdLists);\n\n  // Use upload fence for command allocator synchronization.\n  // Use pre-allocated uploadFenceValue (already incremented for ring buffer).\n  if (iglDevice_) {\n    ID3D12Fence* uploadFence = iglDevice_->getUploadFence();\n\n    hr = queue_->Signal(uploadFence, uploadFenceValue);\n    if (FAILED(hr)) {\n      IGL_LOG_ERROR(\"Texture::upload: Failed to signal upload fence: 0x%08X\\n\", hr);\n      // Return allocator with 0 to avoid blocking the pool\n      iglDevice_->returnUploadCommandAllocator(cmdAlloc, 0);\n      return Result(Result::Code::RuntimeError, \"Failed to signal fence\");\n    }\n\n    // Return allocator to pool with fence value (will be reused after the fence is signaled).\n    iglDevice_->returnUploadCommandAllocator(cmdAlloc, uploadFenceValue);\n\n    // Track staging buffer for async cleanup (no synchronous wait).\n    // Only track temporary staging buffers; ring buffer is persistent.\n    // Pass uploadFenceValue (already signaled above) to track with the correct fence.\n    if (!useRingBuffer && stagingBuffer.Get()) {\n      iglDevice_->trackUploadBuffer(std::move(stagingBuffer), uploadFenceValue);\n    }\n\n    // Wait for upload to complete synchronously.\n    // This is necessary because generateMipmap and other operations may immediately\n    // access the texture data after upload returns.\n    Result waitResult = iglDevice_->waitForUploadFence(uploadFenceValue);\n    if (!waitResult.isOk()) {\n      IGL_LOG_ERROR(\"Texture::upload: Fence wait failed: %s\\n\", waitResult.message.c_str());\n      return waitResult;\n    }\n  } else {\n    // Fallback for textures without iglDevice_ (shouldn't happen in normal flow)\n    // In this case, we need to wait synchronously since we can't track the buffer\n    igl::d3d12::ComPtr<ID3D12Fence> fence;\n    hr = device_->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(fence.GetAddressOf()));\n    if (FAILED(hr)) {\n      return Result(Result::Code::RuntimeError, \"Failed to create fence\");\n    }\n\n    queue_->Signal(fence.Get(), 1);\n\n    FenceWaiter waiter(fence.Get(), 1);\n    Result waitResult = waiter.wait();\n    if (!waitResult.isOk()) {\n      return waitResult; // Propagate detailed timeout/setup error\n    }\n  }\n\n  return Result();\n}\n\nResult Texture::uploadCube(const TextureRangeDesc& range,\n                           TextureCubeFace face,\n                           const void* data,\n                           size_t bytesPerRow) const {\n  // Cube textures are stored as texture arrays with 6 slices (one per face).\n  // The upload() method already handles cube textures correctly when face/numFaces are set.\n\n  // Validate this is a cube texture\n  if (type_ != TextureType::Cube) {\n    return Result(Result::Code::ArgumentInvalid, \"uploadCube called on non-cube texture\");\n  }\n\n  // Create a modified range with the correct face index\n  TextureRangeDesc cubeRange = range;\n  cubeRange.face = static_cast<uint32_t>(face); // Convert TextureCubeFace enum to face index (0-5)\n  cubeRange.numFaces = 1; // Upload single face\n\n  // Delegate to upload() which handles cube texture subresource indexing correctly\n  return upload(cubeRange, data, bytesPerRow);\n}\n\nResult Texture::uploadInternal(TextureType type,\n                               const TextureRangeDesc& range,\n                               const void* data,\n                               size_t bytesPerRow,\n                               const uint32_t* mipLevelBytes) const {\n  if (!(type == TextureType::TwoD || type == TextureType::TwoDArray ||\n        type == TextureType::ThreeD || type == TextureType::Cube)) {\n    return Result(Result::Code::Unimplemented, \"Upload not implemented for this texture type\");\n  }\n\n  // Delegate to upload() which now handles multi-mip, multi-layer, and cube textures natively\n  return upload(range, data, bytesPerRow);\n}\n\nDimensions Texture::getDimensions() const {\n  return dimensions_;\n}\n\nuint32_t Texture::getNumLayers() const {\n  return static_cast<uint32_t>(numLayers_);\n}\n\nTextureType Texture::getType() const {\n  return type_;\n}\n\nTextureDesc::TextureUsage Texture::getUsage() const {\n  return usage_;\n}\n\nuint32_t Texture::getSamples() const {\n  return static_cast<uint32_t>(samples_);\n}\n\nuint32_t Texture::getNumMipLevels() const {\n  return static_cast<uint32_t>(numMipLevels_);\n}\n\nuint64_t Texture::getTextureId() const {\n  return reinterpret_cast<uint64_t>(resource_.Get());\n}\n\nTextureFormat Texture::getFormat() const {\n  return format_;\n}\n\nbool Texture::isRequiredGenerateMipmap() const {\n  return false;\n}\n\nvoid Texture::generateMipmap(ICommandQueue& /*cmdQueue*/, const TextureRangeDesc* /*range*/) const {\n  IGL_D3D12_LOG_VERBOSE(\"Texture::generateMipmap(cmdQueue) - START: numMips=%u\\n\", numMipLevels_);\n\n  if (!device_ || !queue_ || !resource_.Get() || numMipLevels_ < 2) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"Texture::generateMipmap() - Skipping: device=%p queue=%p resource=%p numMips=%u\\n\",\n        device_,\n        queue_,\n        resource_.Get(),\n        numMipLevels_);\n    return;\n  }\n\n  D3D12_RESOURCE_DESC resourceDesc = resource_->GetDesc();\n\n  // Only support 2D textures for mipmap generation\n  if (resourceDesc.Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE2D) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"Texture::generateMipmap() - Skipping: only 2D textures supported (dimension=%d)\\n\",\n        (int)resourceDesc.Dimension);\n    return;\n  }\n\n  // Skip depth/stencil textures entirely. The current D3D12 mipmap path only\n  // supports color render-target textures; attempting to add ALLOW_RENDER_TARGET\n  // to a depth/stencil resource would violate D3D12's flag rules.\n  if (resourceDesc.Flags & D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"Texture::generateMipmap() - Skipping: depth/stencil textures are not \"\n        \"handled by this mipmap path (Flags=0x%08X)\\n\",\n        resourceDesc.Flags);\n    return;\n  }\n\n  // If texture wasn't created with a render-target-capable flag, skip mipmap\n  // generation gracefully on D3D12. The current implementation only supports\n  // color 2D textures with ALLOW_RENDER_TARGET; depth/stencil and other usage\n  // patterns rely on backend-specific paths or pre-generated mips.\n  if (!(resourceDesc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"Texture::generateMipmap() - Recreating texture with RENDER_TARGET flag for mipmap \"\n        \"generation\\n\");\n\n    // Save current resource using ComPtr for automatic reference counting\n    // Note: ComPtr copy is deleted, so we manually AddRef and Attach\n    ID3D12Resource* rawOldResource = resource_.Get();\n    if (rawOldResource) {\n      rawOldResource->AddRef();\n    }\n    igl::d3d12::ComPtr<ID3D12Resource> oldResource;\n    oldResource.Attach(rawOldResource);\n\n    // Modify descriptor to add RENDER_TARGET flag\n    resourceDesc.Flags |= D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET;\n\n    // Create new resource with RENDER_TARGET flag\n    D3D12_HEAP_PROPERTIES heapProps = {};\n    heapProps.Type = D3D12_HEAP_TYPE_DEFAULT;\n\n    D3D12_CLEAR_VALUE clearValue = {};\n    clearValue.Format = resourceDesc.Format;\n\n    igl::d3d12::ComPtr<ID3D12Resource> newResource;\n    HRESULT hr = device_->CreateCommittedResource(&heapProps,\n                                                  D3D12_HEAP_FLAG_NONE,\n                                                  &resourceDesc,\n                                                  D3D12_RESOURCE_STATE_COPY_DEST,\n                                                  &clearValue,\n                                                  IID_PPV_ARGS(newResource.GetAddressOf()));\n\n    if (FAILED(hr)) {\n      IGL_D3D12_LOG_VERBOSE(\n          \"Texture::generateMipmap() - Skipping: failed to recreate texture with \"\n          \"RENDER_TARGET flag (HRESULT=0x%08X)\\n\",\n          static_cast<unsigned>(hr));\n      return;\n    }\n\n    // Copy mip 0 from old resource to new resource\n    igl::d3d12::ComPtr<ID3D12CommandAllocator> copyAlloc;\n    igl::d3d12::ComPtr<ID3D12GraphicsCommandList> copyList;\n    if (FAILED(device_->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                               IID_PPV_ARGS(copyAlloc.GetAddressOf())))) {\n      IGL_LOG_ERROR(\"Texture::generateMipmap() - Failed to create copy command allocator\\n\");\n      return;\n    }\n    if (FAILED(device_->CreateCommandList(0,\n                                          D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                          copyAlloc.Get(),\n                                          nullptr,\n                                          IID_PPV_ARGS(copyList.GetAddressOf())))) {\n      IGL_LOG_ERROR(\"Texture::generateMipmap() - Failed to create copy command list\\n\");\n      return;\n    }\n\n    // Transition old resource to COPY_SOURCE\n    D3D12_RESOURCE_BARRIER barrierOld = {};\n    barrierOld.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n    barrierOld.Transition.pResource = oldResource.Get();\n    barrierOld.Transition.StateBefore = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;\n    barrierOld.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_SOURCE;\n    barrierOld.Transition.Subresource = 0;\n    copyList->ResourceBarrier(1, &barrierOld);\n\n    // Copy mip 0\n    D3D12_TEXTURE_COPY_LOCATION srcLoc = {};\n    srcLoc.pResource = oldResource.Get();\n    srcLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;\n    srcLoc.SubresourceIndex = 0;\n\n    D3D12_TEXTURE_COPY_LOCATION dstLoc = {};\n    dstLoc.pResource = newResource.Get();\n    dstLoc.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;\n    dstLoc.SubresourceIndex = 0;\n\n    copyList->CopyTextureRegion(&dstLoc, 0, 0, 0, &srcLoc, nullptr);\n\n    // Transition the entire new resource to PIXEL_SHADER_RESOURCE for mipmap\n    // generation. The resource was created in COPY_DEST; only mip 0 was\n    // written by the copy above, but all mips will be consumed as SRVs/RTVs\n    // in the subsequent fullscreen-blit loop. Using ALL_SUBRESOURCES here\n    // ensures the debug layer's notion of the initial state matches our\n    // state tracking for every subresource (mip >= 1 included).\n    D3D12_RESOURCE_BARRIER barrierNew = {};\n    barrierNew.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n    barrierNew.Transition.pResource = newResource.Get();\n    barrierNew.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST;\n    barrierNew.Transition.StateAfter = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;\n    barrierNew.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n    copyList->ResourceBarrier(1, &barrierNew);\n\n    copyList->Close();\n    ID3D12CommandList* copyLists[] = {copyList.Get()};\n    queue_->ExecuteCommandLists(1, copyLists);\n\n    // Wait for copy to complete\n    igl::d3d12::ComPtr<ID3D12Fence> copyFence;\n    if (FAILED(device_->CreateFence(\n            0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(copyFence.GetAddressOf())))) {\n      IGL_LOG_ERROR(\"Texture::generateMipmap() - Failed to create copy fence\\n\");\n      return;\n    }\n    queue_->Signal(copyFence.Get(), 1);\n\n    FenceWaiter waiter(copyFence.Get(), 1);\n    Result waitResult = waiter.wait();\n    if (!waitResult.isOk()) {\n      IGL_LOG_ERROR(\"Texture::generateMipmap() - Fence wait failed: %s\\n\",\n                    waitResult.message.c_str());\n      return;\n    }\n\n    // oldResource will be automatically released by ComPtr destructor\n\n    // Replace resource with new one (need const_cast since function is const)\n    auto& mutableResource = const_cast<igl::d3d12::ComPtr<ID3D12Resource>&>(resource_);\n    mutableResource.Reset();\n    mutableResource = std::move(newResource);\n\n    // Update state tracking for new resource - all mips are now in PIXEL_SHADER_RESOURCE\n    // const_cast needed because generateMipmap is const (required by ITexture interface)\n    // but state tracking is non-const by design\n    const_cast<Texture*>(this)->initializeStateTracking(D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);\n\n    // Update resourceDesc for the rest of the function\n    resourceDesc = resource_->GetDesc();\n\n    IGL_D3D12_LOG_VERBOSE(\"Texture::generateMipmap() - Texture recreated successfully\\n\");\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"Texture::generateMipmap() - Proceeding with mipmap generation\\n\");\n\n  // Use pre-compiled shaders from Device instead of runtime compilation.\n  // Note: iglDevice_ should always be set in normal flow (see Texture::createFromResource)\n  // This check is defensive; if it triggers, it indicates a texture creation path that bypassed\n  // proper initialization\n  if (!iglDevice_) {\n    IGL_LOG_ERROR(\n        \"Texture::generateMipmap() - No IGL device available (texture not properly initialized)\\n\");\n    IGL_LOG_ERROR(\n        \"  This is a programming error: textures must be created via Device methods to support \"\n        \"mipmap generation\\n\");\n    return;\n  }\n\n  const auto& vsBytecode = iglDevice_->getMipmapVSBytecode();\n  const auto& psBytecode = iglDevice_->getMipmapPSBytecode();\n  ID3D12RootSignature* rootSig = iglDevice_->getMipmapRootSignature();\n\n  // Validate pre-compiled shaders are available\n  // This can fail if device initialization encountered DXC errors\n  if (vsBytecode.empty() || psBytecode.empty() || !rootSig) {\n    IGL_LOG_ERROR(\"Texture::generateMipmap() - Pre-compiled mipmap shaders unavailable\\n\");\n    IGL_LOG_ERROR(\n        \"  Device may not support mipmap generation (check Device initialization logs for DXC \"\n        \"errors)\\n\");\n    return;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"Texture::generateMipmap() - Using pre-compiled shaders (%zu bytes VS, %zu bytes PS)\\n\",\n      vsBytecode.size(),\n      psBytecode.size());\n\n  D3D12_GRAPHICS_PIPELINE_STATE_DESC pso = {};\n  pso.pRootSignature = rootSig;\n  pso.VS = {vsBytecode.data(), vsBytecode.size()};\n  pso.PS = {psBytecode.data(), psBytecode.size()};\n  pso.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;\n  pso.RasterizerState.FillMode = D3D12_FILL_MODE_SOLID;\n  pso.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;\n  pso.RasterizerState.DepthClipEnable = TRUE;\n  pso.BlendState.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL;\n  pso.SampleMask = UINT_MAX;\n  pso.SampleDesc.Count = 1;\n  pso.NumRenderTargets = 1;\n  pso.RTVFormats[0] = resourceDesc.Format;\n  pso.DSVFormat = DXGI_FORMAT_UNKNOWN;\n\n  igl::d3d12::ComPtr<ID3D12PipelineState> psoObj;\n  if (FAILED(device_->CreateGraphicsPipelineState(&pso, IID_PPV_ARGS(psoObj.GetAddressOf())))) {\n    return;\n  }\n\n  // Create descriptor heap large enough for all mip levels\n  // We need one SRV descriptor per mip level (numMipLevels_ - 1 blits)\n  D3D12_DESCRIPTOR_HEAP_DESC srvHeapDesc = {};\n  srvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;\n  srvHeapDesc.NumDescriptors = numMipLevels_ - 1; // One SRV per source mip level\n  srvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> srvHeap;\n  if (FAILED(device_->CreateDescriptorHeap(&srvHeapDesc, IID_PPV_ARGS(srvHeap.GetAddressOf()))))\n    return;\n\n  D3D12_DESCRIPTOR_HEAP_DESC smpHeapDesc = {};\n  smpHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER;\n  smpHeapDesc.NumDescriptors = 1;\n  smpHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> smpHeap;\n  if (FAILED(device_->CreateDescriptorHeap(&smpHeapDesc, IID_PPV_ARGS(smpHeap.GetAddressOf()))))\n    return;\n\n  // Pre-creation validation.\n  IGL_DEBUG_ASSERT(device_ != nullptr, \"Device is null before CreateSampler\");\n  IGL_DEBUG_ASSERT(smpHeap.Get() != nullptr, \"Sampler heap is null\");\n\n  // Fixed sampler\n  D3D12_SAMPLER_DESC samp = {};\n  samp.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;\n  samp.AddressU = samp.AddressV = samp.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;\n  samp.MinLOD = 0;\n  samp.MaxLOD = D3D12_FLOAT32_MAX;\n\n  D3D12_CPU_DESCRIPTOR_HANDLE smpHandle = smpHeap->GetCPUDescriptorHandleForHeapStart();\n  IGL_DEBUG_ASSERT(smpHandle.ptr != 0, \"Sampler descriptor handle is invalid\");\n  device_->CreateSampler(&samp, smpHandle);\n\n  igl::d3d12::ComPtr<ID3D12CommandAllocator> alloc;\n  igl::d3d12::ComPtr<ID3D12GraphicsCommandList> list;\n  if (FAILED(device_->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                             IID_PPV_ARGS(alloc.GetAddressOf()))))\n    return;\n  if (FAILED(device_->CreateCommandList(0,\n                                        D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                        alloc.Get(),\n                                        psoObj.Get(),\n                                        IID_PPV_ARGS(list.GetAddressOf()))))\n    return;\n\n  ID3D12DescriptorHeap* heaps[] = {srvHeap.Get(), smpHeap.Get()};\n  list->SetDescriptorHeaps(2, heaps);\n  list->SetPipelineState(psoObj.Get());\n  list->SetGraphicsRootSignature(rootSig);\n  list->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);\n\n  // Get descriptor size for incrementing through the heap\n  const UINT srvDescriptorSize =\n      device_->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);\n  D3D12_CPU_DESCRIPTOR_HANDLE srvCpuStart = srvHeap->GetCPUDescriptorHandleForHeapStart();\n  D3D12_GPU_DESCRIPTOR_HANDLE srvGpuStart = srvHeap->GetGPUDescriptorHandleForHeapStart();\n  D3D12_GPU_DESCRIPTOR_HANDLE smpGpu = smpHeap->GetGPUDescriptorHandleForHeapStart();\n\n  // Create single RTV descriptor heap outside the loop (reused for all mip levels)\n  D3D12_DESCRIPTOR_HEAP_DESC rtvHeapDesc = {};\n  rtvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;\n  rtvHeapDesc.NumDescriptors = 1;\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> rtvHeap;\n  if (FAILED(device_->CreateDescriptorHeap(&rtvHeapDesc, IID_PPV_ARGS(rtvHeap.GetAddressOf()))))\n    return;\n  D3D12_CPU_DESCRIPTOR_HANDLE rtvCpu = rtvHeap->GetCPUDescriptorHandleForHeapStart();\n\n  // Ensure mip 0 is in PIXEL_SHADER_RESOURCE state for first SRV read\n  // const_cast needed because generateMipmap is const (required by ITexture interface)\n  // but state tracking is non-const by design\n  const_cast<Texture*>(this)->transitionTo(\n      list.Get(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, 0, 0);\n\n  for (UINT mip = 0; mip + 1 < numMipLevels_; ++mip) {\n    // Calculate descriptor handle for this mip level\n    D3D12_CPU_DESCRIPTOR_HANDLE srvCpu = srvCpuStart;\n    srvCpu.ptr += mip * srvDescriptorSize;\n    D3D12_GPU_DESCRIPTOR_HANDLE srvGpu = srvGpuStart;\n    srvGpu.ptr += mip * srvDescriptorSize;\n\n    // Pre-creation validation.\n    IGL_DEBUG_ASSERT(device_ != nullptr, \"Device is null before CreateShaderResourceView\");\n    IGL_DEBUG_ASSERT(resource_.Get() != nullptr,\n                     \"Resource is null before CreateShaderResourceView\");\n    IGL_DEBUG_ASSERT(srvCpu.ptr != 0, \"SRV descriptor handle is invalid\");\n\n    D3D12_SHADER_RESOURCE_VIEW_DESC srv = {};\n    srv.Format = resourceDesc.Format;\n    srv.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;\n    srv.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;\n    srv.Texture2D.MostDetailedMip = mip;\n    srv.Texture2D.MipLevels = 1;\n    device_->CreateShaderResourceView(resource_.Get(), &srv, srvCpu);\n\n    // Pre-creation validation.\n    IGL_DEBUG_ASSERT(device_ != nullptr, \"Device is null before CreateRenderTargetView\");\n    IGL_DEBUG_ASSERT(resource_.Get() != nullptr, \"Resource is null before CreateRenderTargetView\");\n    IGL_DEBUG_ASSERT(rtvCpu.ptr != 0, \"RTV descriptor handle is invalid\");\n\n    D3D12_RENDER_TARGET_VIEW_DESC rtv = {};\n    rtv.Format = resourceDesc.Format;\n    rtv.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;\n    rtv.Texture2D.MipSlice = mip + 1;\n\n    // Reuse the same RTV heap by recreating the view for each mip level\n    device_->CreateRenderTargetView(resource_.Get(), &rtv, rtvCpu);\n\n    // Transition mip level to render target using state tracking\n    // const_cast needed (see above).\n    const_cast<Texture*>(this)->transitionTo(\n        list.Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, mip + 1, 0);\n\n    list->OMSetRenderTargets(1, &rtvCpu, FALSE, nullptr);\n    const UINT w = std::max<UINT>(1u, (UINT)(resourceDesc.Width >> (mip + 1)));\n    const UINT h = std::max<UINT>(1u, (UINT)(resourceDesc.Height >> (mip + 1)));\n    D3D12_VIEWPORT vp{0.0f, 0.0f, (FLOAT)w, (FLOAT)h, 0.0f, 1.0f};\n    D3D12_RECT sc{0, 0, (LONG)w, (LONG)h};\n    list->RSSetViewports(1, &vp);\n    list->RSSetScissorRects(1, &sc);\n\n    list->SetGraphicsRootDescriptorTable(0, srvGpu);\n    list->SetGraphicsRootDescriptorTable(1, smpGpu);\n    list->DrawInstanced(3, 1, 0, 0);\n\n    // Transition mip level to shader resource for next iteration\n    // const_cast needed (see above).\n    const_cast<Texture*>(this)->transitionTo(\n        list.Get(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, mip + 1, 0);\n  }\n\n  list->Close();\n  ID3D12CommandList* lists[] = {list.Get()};\n  queue_->ExecuteCommandLists(1, lists);\n\n  igl::d3d12::ComPtr<ID3D12Fence> fence;\n  if (FAILED(device_->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(fence.GetAddressOf()))))\n    return;\n  queue_->Signal(fence.Get(), 1);\n\n  FenceWaiter waiter(fence.Get(), 1);\n  Result waitResult = waiter.wait();\n  if (!waitResult.isOk()) {\n    IGL_LOG_ERROR(\"Texture::generateMipmap() - Fence wait failed: %s\\n\",\n                  waitResult.message.c_str());\n  }\n}\n\nvoid Texture::generateMipmap(ICommandBuffer& /*cmdBuffer*/,\n                             const TextureRangeDesc* /*range*/) const {\n  IGL_D3D12_LOG_VERBOSE(\"Texture::generateMipmap(cmdBuffer) - START: numMips=%u\\n\", numMipLevels_);\n\n  if (!device_ || !queue_ || !resource_.Get() || numMipLevels_ < 2) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"Texture::generateMipmap(cmdBuffer) - Skipping: device=%p queue=%p resource=%p \"\n        \"numMips=%u\\n\",\n        device_,\n        queue_,\n        resource_.Get(),\n        numMipLevels_);\n    return;\n  }\n\n  D3D12_RESOURCE_DESC resourceDesc = resource_->GetDesc();\n\n  // Only support 2D textures for mipmap generation\n  if (resourceDesc.Dimension != D3D12_RESOURCE_DIMENSION_TEXTURE2D) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"Texture::generateMipmap(cmdBuffer) - Skipping: only 2D textures supported\\n\");\n    return;\n  }\n\n  // Check if texture was created with RENDER_TARGET flag (required for mipmap generation)\n  if (!(resourceDesc.Flags & D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET)) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"Texture::generateMipmap(cmdBuffer) - Skipping: texture not created with RENDER_TARGET \"\n        \"usage\\n\");\n    IGL_D3D12_LOG_VERBOSE(\n        \"  To enable mipmap generation, create texture with \"\n        \"TextureDesc::TextureUsageBits::Attachment\\n\");\n    return;\n  }\n\n  // Use pre-compiled shaders from Device instead of runtime compilation.\n  // Note: iglDevice_ should always be set in normal flow (see Texture::createFromResource)\n  // This check is defensive; if it triggers, it indicates a texture creation path that bypassed\n  // proper initialization\n  if (!iglDevice_) {\n    IGL_LOG_ERROR(\n        \"Texture::generateMipmap(cmdBuffer) - No IGL device available (texture not properly \"\n        \"initialized)\\n\");\n    IGL_LOG_ERROR(\n        \"  This is a programming error: textures must be created via Device methods to support \"\n        \"mipmap generation\\n\");\n    return;\n  }\n\n  const auto& vsBytecode = iglDevice_->getMipmapVSBytecode();\n  const auto& psBytecode = iglDevice_->getMipmapPSBytecode();\n  ID3D12RootSignature* rootSig = iglDevice_->getMipmapRootSignature();\n\n  // Validate pre-compiled shaders are available\n  // This can fail if device initialization encountered DXC errors\n  if (vsBytecode.empty() || psBytecode.empty() || !rootSig) {\n    IGL_LOG_ERROR(\"Texture::generateMipmap(cmdBuffer) - Pre-compiled mipmap shaders unavailable\\n\");\n    IGL_LOG_ERROR(\n        \"  Device may not support mipmap generation (check Device initialization logs for DXC \"\n        \"errors)\\n\");\n    return;\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"Texture::generateMipmap(cmdBuffer) - Using pre-compiled shaders (%zu bytes VS, %zu bytes \"\n      \"PS)\\n\",\n      vsBytecode.size(),\n      psBytecode.size());\n\n  D3D12_GRAPHICS_PIPELINE_STATE_DESC pso = {};\n  pso.pRootSignature = rootSig;\n  pso.VS = {vsBytecode.data(), vsBytecode.size()};\n  pso.PS = {psBytecode.data(), psBytecode.size()};\n  pso.PrimitiveTopologyType = D3D12_PRIMITIVE_TOPOLOGY_TYPE_TRIANGLE;\n  pso.RasterizerState.FillMode = D3D12_FILL_MODE_SOLID;\n  pso.RasterizerState.CullMode = D3D12_CULL_MODE_NONE;\n  pso.RasterizerState.DepthClipEnable = TRUE;\n  pso.BlendState.RenderTarget[0].RenderTargetWriteMask = D3D12_COLOR_WRITE_ENABLE_ALL;\n  pso.SampleMask = UINT_MAX;\n  pso.SampleDesc.Count = 1;\n  pso.NumRenderTargets = 1;\n  pso.RTVFormats[0] = resourceDesc.Format;\n  pso.DSVFormat = DXGI_FORMAT_UNKNOWN;\n  igl::d3d12::ComPtr<ID3D12PipelineState> psoObj;\n  if (FAILED(device_->CreateGraphicsPipelineState(&pso, IID_PPV_ARGS(psoObj.GetAddressOf()))))\n    return;\n  // Create descriptor heap large enough for all mip levels\n  // We need one SRV descriptor per mip level (numMipLevels_ - 1 blits)\n  D3D12_DESCRIPTOR_HEAP_DESC srvHeapDesc = {};\n  srvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;\n  srvHeapDesc.NumDescriptors = numMipLevels_ - 1; // One SRV per source mip level\n  srvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> srvHeap;\n  if (FAILED(device_->CreateDescriptorHeap(&srvHeapDesc, IID_PPV_ARGS(srvHeap.GetAddressOf()))))\n    return;\n  D3D12_DESCRIPTOR_HEAP_DESC smpHeapDesc = {};\n  smpHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER;\n  smpHeapDesc.NumDescriptors = 1;\n  smpHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;\n\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> smpHeap;\n  if (FAILED(device_->CreateDescriptorHeap(&smpHeapDesc, IID_PPV_ARGS(smpHeap.GetAddressOf()))))\n    return;\n\n  // Pre-creation validation.\n  IGL_DEBUG_ASSERT(device_ != nullptr, \"Device is null before CreateSampler\");\n  IGL_DEBUG_ASSERT(smpHeap.Get() != nullptr, \"Sampler heap is null\");\n\n  D3D12_SAMPLER_DESC samp = {};\n  samp.Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;\n  samp.AddressU = samp.AddressV = samp.AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;\n  samp.MinLOD = 0;\n  samp.MaxLOD = D3D12_FLOAT32_MAX;\n\n  D3D12_CPU_DESCRIPTOR_HANDLE smpHandle = smpHeap->GetCPUDescriptorHandleForHeapStart();\n  IGL_DEBUG_ASSERT(smpHandle.ptr != 0, \"Sampler descriptor handle is invalid\");\n  device_->CreateSampler(&samp, smpHandle);\n  igl::d3d12::ComPtr<ID3D12CommandAllocator> alloc;\n  igl::d3d12::ComPtr<ID3D12GraphicsCommandList> list;\n  if (FAILED(device_->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                             IID_PPV_ARGS(alloc.GetAddressOf()))))\n    return;\n  if (FAILED(device_->CreateCommandList(0,\n                                        D3D12_COMMAND_LIST_TYPE_DIRECT,\n                                        alloc.Get(),\n                                        psoObj.Get(),\n                                        IID_PPV_ARGS(list.GetAddressOf()))))\n    return;\n  ID3D12DescriptorHeap* heaps[] = {srvHeap.Get(), smpHeap.Get()};\n  list->SetDescriptorHeaps(2, heaps);\n  list->SetPipelineState(psoObj.Get());\n  list->SetGraphicsRootSignature(rootSig);\n  list->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);\n  // Get descriptor size for incrementing through the heap\n  const UINT srvDescriptorSize =\n      device_->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);\n  D3D12_CPU_DESCRIPTOR_HANDLE srvCpuStart = srvHeap->GetCPUDescriptorHandleForHeapStart();\n  D3D12_GPU_DESCRIPTOR_HANDLE srvGpuStart = srvHeap->GetGPUDescriptorHandleForHeapStart();\n  D3D12_GPU_DESCRIPTOR_HANDLE smpGpu = smpHeap->GetGPUDescriptorHandleForHeapStart();\n\n  // Create single RTV descriptor heap outside the loop (reused for all mip levels)\n  D3D12_DESCRIPTOR_HEAP_DESC rtvHeapDesc = {};\n  rtvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;\n  rtvHeapDesc.NumDescriptors = 1;\n  igl::d3d12::ComPtr<ID3D12DescriptorHeap> rtvHeap;\n  if (FAILED(device_->CreateDescriptorHeap(&rtvHeapDesc, IID_PPV_ARGS(rtvHeap.GetAddressOf()))))\n    return;\n  D3D12_CPU_DESCRIPTOR_HANDLE rtvCpu = rtvHeap->GetCPUDescriptorHandleForHeapStart();\n\n  // Ensure mip 0 is in PIXEL_SHADER_RESOURCE state for first SRV read\n  // const_cast needed because generateMipmap is const (required by ITexture interface)\n  // but state tracking is non-const by design\n  const_cast<Texture*>(this)->transitionTo(\n      list.Get(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, 0, 0);\n\n  for (UINT mip = 0; mip + 1 < numMipLevels_; ++mip) {\n    // Calculate descriptor handle for this mip level\n    D3D12_CPU_DESCRIPTOR_HANDLE srvCpu = srvCpuStart;\n    srvCpu.ptr += mip * srvDescriptorSize;\n    D3D12_GPU_DESCRIPTOR_HANDLE srvGpu = srvGpuStart;\n    srvGpu.ptr += mip * srvDescriptorSize;\n\n    // Pre-creation validation.\n    IGL_DEBUG_ASSERT(device_ != nullptr, \"Device is null before CreateShaderResourceView\");\n    IGL_DEBUG_ASSERT(resource_.Get() != nullptr,\n                     \"Resource is null before CreateShaderResourceView\");\n    IGL_DEBUG_ASSERT(srvCpu.ptr != 0, \"SRV descriptor handle is invalid\");\n\n    D3D12_SHADER_RESOURCE_VIEW_DESC srv = {};\n    srv.Format = resourceDesc.Format;\n    srv.ViewDimension = D3D12_SRV_DIMENSION_TEXTURE2D;\n    srv.Shader4ComponentMapping = D3D12_DEFAULT_SHADER_4_COMPONENT_MAPPING;\n    srv.Texture2D.MostDetailedMip = mip;\n    srv.Texture2D.MipLevels = 1;\n    device_->CreateShaderResourceView(resource_.Get(), &srv, srvCpu);\n\n    // Pre-creation validation.\n    IGL_DEBUG_ASSERT(device_ != nullptr, \"Device is null before CreateRenderTargetView\");\n    IGL_DEBUG_ASSERT(resource_.Get() != nullptr, \"Resource is null before CreateRenderTargetView\");\n    IGL_DEBUG_ASSERT(rtvCpu.ptr != 0, \"RTV descriptor handle is invalid\");\n\n    D3D12_RENDER_TARGET_VIEW_DESC rtv = {};\n    rtv.Format = resourceDesc.Format;\n    rtv.ViewDimension = D3D12_RTV_DIMENSION_TEXTURE2D;\n    rtv.Texture2D.MipSlice = mip + 1;\n\n    // Reuse the same RTV heap by recreating the view for each mip level\n    device_->CreateRenderTargetView(resource_.Get(), &rtv, rtvCpu);\n\n    // Transition mip level to render target using state tracking\n    // const_cast needed (see above).\n    const_cast<Texture*>(this)->transitionTo(\n        list.Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, mip + 1, 0);\n\n    list->OMSetRenderTargets(1, &rtvCpu, FALSE, nullptr);\n    const UINT w = std::max<UINT>(1u, (UINT)(resourceDesc.Width >> (mip + 1)));\n    const UINT h = std::max<UINT>(1u, (UINT)(resourceDesc.Height >> (mip + 1)));\n    D3D12_VIEWPORT vp{0.0f, 0.0f, (FLOAT)w, (FLOAT)h, 0.0f, 1.0f};\n    D3D12_RECT sc{0, 0, (LONG)w, (LONG)h};\n    list->RSSetViewports(1, &vp);\n    list->RSSetScissorRects(1, &sc);\n    list->SetGraphicsRootDescriptorTable(0, srvGpu);\n    list->SetGraphicsRootDescriptorTable(1, smpGpu);\n    list->DrawInstanced(3, 1, 0, 0);\n\n    // Transition mip level to shader resource for next iteration\n    // const_cast needed (see above).\n    const_cast<Texture*>(this)->transitionTo(\n        list.Get(), D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE, mip + 1, 0);\n  }\n  list->Close();\n  ID3D12CommandList* lists[] = {list.Get()};\n  queue_->ExecuteCommandLists(1, lists);\n  igl::d3d12::ComPtr<ID3D12Fence> fence;\n  if (FAILED(device_->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(fence.GetAddressOf()))))\n    return;\n  queue_->Signal(fence.Get(), 1);\n\n  FenceWaiter waiter(fence.Get(), 1);\n  Result waitResult = waiter.wait();\n  if (!waitResult.isOk()) {\n    IGL_LOG_ERROR(\"Texture::generateMipmap(cmdBuffer) - Fence wait failed: %s\\n\",\n                  waitResult.message.c_str());\n  }\n}\n\nvoid Texture::initializeStateTracking(D3D12_RESOURCE_STATES initialState) {\n  // Simplified per-subresource state tracking: always use a vector (no dual-mode).\n  if (!resource_.Get()) {\n    subresourceStates_.clear();\n    return;\n  }\n\n  const uint32_t mipLevels = static_cast<uint32_t>(std::max<size_t>(numMipLevels_, 1));\n  uint32_t arraySize;\n  if (type_ == TextureType::ThreeD) {\n    arraySize = 1u;\n  } else if (type_ == TextureType::Cube) {\n    arraySize = static_cast<uint32_t>(std::max<size_t>(numLayers_, 1)) * 6u;\n  } else {\n    arraySize = static_cast<uint32_t>(std::max<size_t>(numLayers_, 1));\n  }\n  const size_t numSubresources = static_cast<size_t>(mipLevels) * arraySize;\n  subresourceStates_.assign(numSubresources, initialState);\n}\n\nuint32_t Texture::calcSubresourceIndex(uint32_t mipLevel, uint32_t layer) const {\n  // For views, map view-local coordinates to resource coordinates.\n  // Note: mipLevelOffset_ and arraySliceOffset_ are resource-relative (accumulated at view creation\n  // for nested views).\n  const uint32_t resourceMip = isView_ ? (mipLevel + mipLevelOffset_) : mipLevel;\n  const uint32_t resourceLayer = isView_ ? (layer + arraySliceOffset_) : layer;\n\n  // Use state owner's dimensions for subresource calculation\n  const Texture* owner = getStateOwner();\n  IGL_DEBUG_ASSERT(owner != nullptr, \"State owner must not be null\");\n  const uint32_t mipLevels = static_cast<uint32_t>(std::max<size_t>(owner->numMipLevels_, 1));\n  uint32_t arraySize;\n  if (owner->type_ == TextureType::ThreeD) {\n    arraySize = 1u;\n  } else if (owner->type_ == TextureType::Cube) {\n    // Cube textures: 6 faces per layer\n    arraySize = static_cast<uint32_t>(std::max<size_t>(owner->numLayers_, 1)) * 6u;\n  } else {\n    arraySize = static_cast<uint32_t>(std::max<size_t>(owner->numLayers_, 1));\n  }\n  const uint32_t clampedMip = std::min(resourceMip, mipLevels - 1);\n  const uint32_t clampedLayer = std::min(resourceLayer, arraySize - 1);\n  // D3D12CalcSubresource formula: MipSlice + (ArraySlice * MipLevels)\n  const uint32_t subresource = clampedMip + (clampedLayer * mipLevels);\n#ifdef IGL_DEBUG\n  // Reduce log verbosity - only log in debug builds for views\n  if ((type_ == TextureType::Cube || type_ == TextureType::TwoDArray) && isView_) {\n    IGL_D3D12_LOG_VERBOSE(\n        \"calcSubresourceIndex (view): type=%d, mip=%u, layer=%u -> resource mip=%u, layer=%u -> \"\n        \"subresource=%u\\n\",\n        (int)type_,\n        mipLevel,\n        layer,\n        resourceMip,\n        resourceLayer,\n        subresource);\n  }\n#endif\n  return subresource;\n}\n\nvoid Texture::transitionTo(ID3D12GraphicsCommandList* commandList,\n                           D3D12_RESOURCE_STATES newState,\n                           uint32_t mipLevel,\n                           uint32_t layer) {\n  // Simplified per-subresource state tracking.\n  Texture* owner = getStateOwner();\n  if (!commandList || !owner || !owner->resource_.Get() || owner->subresourceStates_.empty()) {\n    return;\n  }\n\n  // For depth-stencil textures, transition all subresources (both depth and stencil planes).\n  const auto props = getProperties();\n  const bool isDepthStencil = props.isDepthOrStencil() &&\n                              (props.hasStencil() || format_ == TextureFormat::Z_UNorm24);\n\n  if (isDepthStencil) {\n    // Verify all subresources are in the same state before using ALL_SUBRESOURCES.\n    D3D12_RESOURCE_STATES firstState = owner->subresourceStates_[0];\n    bool allSameState = true;\n    for (const auto& state : owner->subresourceStates_) {\n      if (state != firstState) {\n        allSameState = false;\n        IGL_LOG_ERROR(\n            \"Depth-stencil texture has divergent subresource states - this violates invariant\\n\");\n        break;\n      }\n    }\n\n    if (firstState == newState) {\n      return; // All subresources already in target state\n    }\n\n    // Safety check: If states have diverged, return early to avoid invalid ALL_SUBRESOURCES\n    // barrier.\n    if (!allSameState) {\n      IGL_DEBUG_ASSERT(false,\n                       \"Depth-stencil textures must have uniform state across all subresources\");\n      return; // Intentionally skip transition to avoid undefined behavior\n    }\n\n    D3D12_RESOURCE_BARRIER barrier = {};\n    barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n    barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;\n    barrier.Transition.pResource = owner->resource_.Get();\n    barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n    barrier.Transition.StateBefore = firstState;\n    barrier.Transition.StateAfter = newState;\n    commandList->ResourceBarrier(1, &barrier);\n\n    // Update all subresource states\n    for (auto& state : owner->subresourceStates_) {\n      state = newState;\n    }\n    return;\n  }\n\n  // Non-depth-stencil: transition single subresource\n  const uint32_t subresource = calcSubresourceIndex(mipLevel, layer);\n  if (subresource >= owner->subresourceStates_.size()) {\n    return;\n  }\n\n  auto& currentState = owner->subresourceStates_[subresource];\n  if (currentState == newState) {\n    return;\n  }\n\n  D3D12_RESOURCE_BARRIER barrier = {};\n  barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n  barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;\n  barrier.Transition.pResource = owner->resource_.Get();\n  barrier.Transition.Subresource = subresource;\n  barrier.Transition.StateBefore = currentState;\n  barrier.Transition.StateAfter = newState;\n  commandList->ResourceBarrier(1, &barrier);\n\n  currentState = newState;\n}\n\nvoid Texture::transitionAll(ID3D12GraphicsCommandList* commandList,\n                            D3D12_RESOURCE_STATES newState) {\n  // Simplified per-subresource state tracking.\n  Texture* owner = getStateOwner();\n  if (!commandList || !owner || !owner->resource_.Get() || owner->subresourceStates_.empty()) {\n    return;\n  }\n\n  // For depth-stencil textures (multi-plane in D3D12), keep all planes and\n  // mips in a single coherent state by using an ALL_SUBRESOURCES barrier.\n  // This avoids mismatches like depth in DEPTH_WRITE while stencil (plane 1)\n  // remains in COMMON/PRESENT, which triggers the D3D12 debug error\n  // INVALID_SUBRESOURCE_STATE on ClearDepthStencilView.\n  const auto props = getProperties();\n  const bool isDepthStencil = props.isDepthOrStencil() &&\n                              (props.hasStencil() || format_ == TextureFormat::Z_UNorm24);\n\n  if (isDepthStencil) {\n    D3D12_RESOURCE_STATES firstState = owner->subresourceStates_[0];\n    bool allSameState = true;\n    for (const auto& state : owner->subresourceStates_) {\n      if (state != firstState) {\n        allSameState = false;\n        IGL_LOG_ERROR(\n            \"Texture::transitionAll - depth-stencil texture has divergent subresource states; \"\n            \"expected uniform state before ALL_SUBRESOURCES barrier\\n\");\n        break;\n      }\n    }\n\n    if (firstState == newState) {\n      // All subresources (planes/mips) already in the requested state.\n      return;\n    }\n\n    if (!allSameState) {\n      // Safety: avoid issuing an ALL_SUBRESOURCES barrier with inconsistent\n      // tracking; this would make our internal state unreliable.\n      IGL_DEBUG_ASSERT(\n          false,\n          \"Texture::transitionAll - depth-stencil textures must have uniform state across all \"\n          \"subresources before ALL_SUBRESOURCES transition\");\n      return;\n    }\n\n    D3D12_RESOURCE_BARRIER barrier = {};\n    barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n    barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;\n    barrier.Transition.pResource = owner->resource_.Get();\n    barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n    barrier.Transition.StateBefore = firstState;\n    barrier.Transition.StateAfter = newState;\n    commandList->ResourceBarrier(1, &barrier);\n\n    for (auto& state : owner->subresourceStates_) {\n      state = newState;\n    }\n    return;\n  }\n\n  // Check if all subresources are already in the target state\n  bool allMatch = true;\n  for (const auto& state : owner->subresourceStates_) {\n    if (state != newState) {\n      allMatch = false;\n      break;\n    }\n  }\n  if (allMatch) {\n    return;\n  }\n\n  // Transition each subresource individually\n  for (size_t i = 0; i < owner->subresourceStates_.size(); ++i) {\n    auto& state = owner->subresourceStates_[i];\n    if (state == newState) {\n      continue;\n    }\n\n    D3D12_RESOURCE_BARRIER barrier = {};\n    barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n    barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;\n    barrier.Transition.pResource = owner->resource_.Get();\n    barrier.Transition.Subresource = static_cast<UINT>(i);\n    barrier.Transition.StateBefore = state;\n    barrier.Transition.StateAfter = newState;\n    commandList->ResourceBarrier(1, &barrier);\n\n    state = newState;\n  }\n}\n\nD3D12_RESOURCE_STATES Texture::getSubresourceState(uint32_t mipLevel, uint32_t layer) const {\n  // Simplified per-subresource state tracking.\n  const Texture* owner = getStateOwner();\n  if (owner->subresourceStates_.empty()) {\n    return D3D12_RESOURCE_STATE_COMMON;\n  }\n\n  const uint32_t index = calcSubresourceIndex(mipLevel, layer);\n  if (index >= owner->subresourceStates_.size()) {\n    return D3D12_RESOURCE_STATE_COMMON;\n  }\n\n  return owner->subresourceStates_[index];\n}\n\n// IAttachmentInterop interface implementation\nvoid* Texture::getNativeImage() const {\n  return resource_.Get();\n}\n\nvoid* Texture::getNativeImageView() const {\n  // RTV are transient objects in the current implementation.\n  return nullptr;\n}\n\nconst base::AttachmentInteropDesc& Texture::getDesc() const {\n  // Update cached attachment descriptor\n  attachmentDesc_.width = dimensions_.width;\n  attachmentDesc_.height = dimensions_.height;\n  attachmentDesc_.depth = dimensions_.depth;\n  attachmentDesc_.numLayers = static_cast<uint32_t>(numLayers_);\n  attachmentDesc_.numSamples = static_cast<uint32_t>(samples_);\n  attachmentDesc_.numMipLevels = static_cast<uint32_t>(numMipLevels_);\n  attachmentDesc_.type = type_;\n  attachmentDesc_.format = format_;\n  attachmentDesc_.isSampled = (usage_ & TextureDesc::TextureUsageBits::Sampled) != 0;\n  return attachmentDesc_;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Texture.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/Texture.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass Texture final : public ITexture {\n public:\n  Texture() : ITexture(TextureFormat::Invalid), format_(TextureFormat::Invalid) {}\n  explicit Texture(TextureFormat format) : ITexture(format), format_(format) {}\n\n  // Explicit destructor to free descriptor heap slots.\n  ~Texture() override;\n\n  // Factory method to create texture from existing D3D12 resource\n  static std::shared_ptr<Texture> createFromResource(\n      ID3D12Resource* resource,\n      TextureFormat format,\n      const TextureDesc& desc,\n      ID3D12Device* device = nullptr,\n      ID3D12CommandQueue* queue = nullptr,\n      D3D12_RESOURCE_STATES initialState = D3D12_RESOURCE_STATE_COMMON,\n      class Device* iglDevice = nullptr);\n\n  // Factory method to create texture view from parent texture\n  static std::shared_ptr<Texture> createTextureView(std::shared_ptr<Texture> parent,\n                                                    const TextureViewDesc& desc);\n\n  // D3D12-specific upload methods (not part of ITexture interface)\n  Result upload(const TextureRangeDesc& range, const void* data, size_t bytesPerRow = 0) const;\n  Result uploadCube(const TextureRangeDesc& range,\n                    TextureCubeFace face,\n                    const void* data,\n                    size_t bytesPerRow = 0) const;\n\n  Dimensions getDimensions() const override;\n  uint32_t getNumLayers() const override;\n  TextureType getType() const override;\n  TextureDesc::TextureUsage getUsage() const override;\n  uint32_t getSamples() const override;\n  uint32_t getNumMipLevels() const override;\n  uint64_t getTextureId() const override;\n  bool isRequiredGenerateMipmap() const override;\n\n  void generateMipmap(ICommandQueue& cmdQueue,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n  void generateMipmap(ICommandBuffer& cmdBuffer,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n\n  // IAttachmentInterop interface\n  [[nodiscard]] void* IGL_NULLABLE getNativeImage() const override;\n  [[nodiscard]] void* IGL_NULLABLE getNativeImageView() const override;\n  [[nodiscard]] const base::AttachmentInteropDesc& getDesc() const override;\n\n  // D3D12-specific accessors (not part of ITexture interface)\n  TextureFormat getFormat() const;\n  ID3D12Resource* getResource() const {\n    return resource_.Get();\n  }\n  // State transition methods are non-const (state updates not allowed in const methods)\n  void transitionTo(ID3D12GraphicsCommandList* commandList,\n                    D3D12_RESOURCE_STATES newState,\n                    uint32_t mipLevel = 0,\n                    uint32_t layer = 0);\n  void transitionAll(ID3D12GraphicsCommandList* commandList, D3D12_RESOURCE_STATES newState);\n  D3D12_RESOURCE_STATES getSubresourceState(uint32_t mipLevel = 0, uint32_t layer = 0) const;\n\n  // Texture view support\n  bool isView() const {\n    return isView_;\n  }\n  uint32_t getMipLevelOffset() const {\n    return mipLevelOffset_;\n  }\n  uint32_t getNumMipLevelsInView() const {\n    return numMipLevelsInView_;\n  }\n  uint32_t getArraySliceOffset() const {\n    return arraySliceOffset_;\n  }\n  uint32_t getNumArraySlicesInView() const {\n    return numArraySlicesInView_;\n  }\n\n  // Subresource calculation helper\n  uint32_t calcSubresourceIndex(uint32_t mipLevel, uint32_t layer) const;\n\n protected:\n  // Override the base class upload method\n  Result uploadInternal(TextureType type,\n                        const TextureRangeDesc& range,\n                        const void* data,\n                        size_t bytesPerRow = 0,\n                        const uint32_t* mipLevelBytes = nullptr) const override;\n\n private:\n  igl::d3d12::ComPtr<ID3D12Resource> resource_;\n  ID3D12Device* device_ = nullptr; // Non-owning pointer\n  ID3D12CommandQueue* queue_ = nullptr; // Non-owning pointer.\n  class Device* iglDevice_ =\n      nullptr; // Non-owning pointer to igl::d3d12::Device for upload operations.\n  TextureFormat format_;\n  Dimensions dimensions_{0, 0, 0};\n  TextureType type_ = TextureType::TwoD;\n  size_t numLayers_ = 1;\n  size_t numMipLevels_ = 1;\n  size_t samples_ = 1;\n  TextureDesc::TextureUsage usage_ = 0;\n  void initializeStateTracking(D3D12_RESOURCE_STATES initialState);\n\n  // Simplified per-subresource state tracking.\n  // Views delegate state tracking to their root texture; only root textures maintain state.\n  // Always uses a per-subresource vector for simplicity (no dual-mode complexity).\n  std::vector<D3D12_RESOURCE_STATES> subresourceStates_;\n\n  // Helper to get the texture that owns state tracking (walks to root for nested views)\n  Texture* getStateOwner() {\n    Texture* owner = this;\n    while (owner->isView_ && owner->parentTexture_) {\n      owner = owner->parentTexture_.get();\n    }\n    return owner;\n  }\n  const Texture* getStateOwner() const {\n    const Texture* owner = this;\n    while (owner->isView_ && owner->parentTexture_) {\n      owner = owner->parentTexture_.get();\n    }\n    return owner;\n  }\n\n  // Texture view support\n  bool isView_ = false;\n  std::shared_ptr<Texture> parentTexture_; // For views, reference to parent\n  uint32_t mipLevelOffset_ = 0; // MostDetailedMip for SRV\n  uint32_t numMipLevelsInView_ = 0; // MipLevels for SRV\n  uint32_t arraySliceOffset_ = 0; // FirstArraySlice for SRV\n  uint32_t numArraySlicesInView_ = 0; // ArraySize for SRV\n\n  // Descriptor indices for cleanup in destructor.\n  // These descriptors are allocated from DescriptorHeapManager and must be freed.\n  std::vector<uint32_t> rtvIndices_; // RTV descriptors (one per mip level)\n  std::vector<uint32_t> dsvIndices_; // DSV descriptors (for depth/stencil textures)\n  uint32_t srvIndex_ = UINT32_MAX; // SRV descriptor (UINT32_MAX = not allocated)\n\n  mutable base::AttachmentInteropDesc attachmentDesc_; // Cached for IAttachmentInterop::getDesc()\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/TextureCopyUtils.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/TextureCopyUtils.h>\n\n#include <cstring>\n#include <igl/d3d12/Buffer.h>\n#include <igl/d3d12/Common.h>\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/D3D12Headers.h>\n#include <igl/d3d12/D3D12ImmediateCommands.h>\n#include <igl/d3d12/D3D12StagingDevice.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/Texture.h>\n\nnamespace igl::d3d12::TextureCopyUtils {\n\nResult executeCopyTextureToBuffer(D3D12Context& ctx,\n                                  Device& iglDevice,\n                                  Texture& srcTex,\n                                  Buffer& dstBuf,\n                                  uint64_t destinationOffset,\n                                  uint32_t mipLevel,\n                                  uint32_t layer) {\n  ID3D12Resource* srcRes = srcTex.getResource();\n  ID3D12Resource* dstRes = dstBuf.getResource();\n\n  if (!srcRes || !dstRes) {\n    return Result{Result::Code::ArgumentInvalid, \"Invalid source or destination resource\"};\n  }\n\n  ID3D12Device* device = ctx.getDevice();\n\n  if (!device) {\n    return Result{Result::Code::RuntimeError, \"Device is null\"};\n  }\n\n  // Get texture description for GetCopyableFootprints\n  D3D12_RESOURCE_DESC srcDesc = srcRes->GetDesc();\n\n  // Calculate subresource index\n  const uint32_t subresource = srcTex.calcSubresourceIndex(mipLevel, layer);\n\n  // Get copyable footprint for this subresource\n  D3D12_PLACED_SUBRESOURCE_FOOTPRINT layout = {};\n  UINT numRows = 0;\n  UINT64 rowSizeInBytes = 0;\n  UINT64 totalBytes = 0;\n\n  device->GetCopyableFootprints(\n      &srcDesc, subresource, 1, destinationOffset, &layout, &numRows, &rowSizeInBytes, &totalBytes);\n\n  // Calculate the unpacked texture data size (without D3D12 padding)\n  // rowSizeInBytes is the unpadded row size, so we can use it directly\n  const UINT64 unpackedDataSize = rowSizeInBytes * numRows * layout.Footprint.Depth;\n\n  // Check if destination buffer is large enough for the unpacked data\n  if (destinationOffset + unpackedDataSize > dstBuf.getSizeInBytes()) {\n    return Result{Result::Code::ArgumentOutOfRange, \"Destination buffer too small\"};\n  }\n\n  // Use centralized staging device for readback buffer allocation.\n  auto* stagingDevice = iglDevice.getStagingDevice();\n  if (!stagingDevice) {\n    return Result{Result::Code::RuntimeError, \"Staging device not available\"};\n  }\n\n  // Allocate readback staging buffer (D3D12 requires row-pitch alignment)\n  auto staging = stagingDevice->allocateReadback(layout.Offset + totalBytes);\n  if (!staging.valid) {\n    return Result{Result::Code::RuntimeError, \"Failed to allocate readback staging buffer\"};\n  }\n\n  ID3D12Resource* readbackBuffer = staging.buffer.Get();\n  ID3D12Resource* copyDestination = readbackBuffer;\n\n  // Use centralized immediate commands instead of creating transient allocator/list.\n  auto* immediateCommands = iglDevice.getImmediateCommands();\n  if (!immediateCommands) {\n    return Result{Result::Code::RuntimeError, \"Immediate commands not available\"};\n  }\n\n  Result cmdResult;\n  ID3D12GraphicsCommandList* cmdList = immediateCommands->begin(&cmdResult);\n  if (!cmdList || !cmdResult.isOk()) {\n    return Result{Result::Code::RuntimeError, \"Failed to begin immediate command list\"};\n  }\n\n  // Get current texture state (for restoration after the copy)\n  const D3D12_RESOURCE_STATES srcStateBefore = srcTex.getSubresourceState(mipLevel, layer);\n\n  // Transition texture to COPY_SOURCE using centralized state tracking so\n  // that subsequent transitions observe a consistent state across all\n  // command lists and avoid BEFORE/AFTER mismatches.\n  srcTex.transitionTo(cmdList, D3D12_RESOURCE_STATE_COPY_SOURCE, mipLevel, layer);\n\n  // Setup source texture copy location\n  D3D12_TEXTURE_COPY_LOCATION srcLocation = {};\n  srcLocation.pResource = srcRes;\n  srcLocation.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;\n  srcLocation.SubresourceIndex = subresource;\n\n  // Setup destination buffer copy location\n  D3D12_TEXTURE_COPY_LOCATION dstLocation = {};\n  dstLocation.pResource = copyDestination;\n  dstLocation.Type = D3D12_TEXTURE_COPY_TYPE_PLACED_FOOTPRINT;\n  dstLocation.PlacedFootprint = layout;\n\n  // Perform the copy\n  cmdList->CopyTextureRegion(&dstLocation, 0, 0, 0, &srcLocation, nullptr);\n\n  // Transition texture back to original state using the same tracking path.\n  srcTex.transitionTo(cmdList, srcStateBefore, mipLevel, layer);\n\n  // Submit via immediate commands with synchronous wait.\n  Result submitResult;\n  const uint64_t fenceValue = immediateCommands->submit(true, &submitResult);\n  if (!submitResult.isOk() || fenceValue == 0) {\n    return Result{Result::Code::RuntimeError,\n                  \"Failed to submit immediate commands: \" + submitResult.message};\n  }\n\n  // Copy from readback staging buffer to final destination\n  void* readbackData = nullptr;\n  // Map the readback buffer region containing the texture data\n  D3D12_RANGE readRange{static_cast<SIZE_T>(layout.Offset),\n                        static_cast<SIZE_T>(layout.Offset + totalBytes)};\n\n  if (SUCCEEDED(readbackBuffer->Map(0, &readRange, &readbackData)) && readbackData) {\n    // Check if destination buffer is in DEFAULT heap (Storage buffers)\n    // We cannot call map() on DEFAULT heap buffers because Buffer::map() would\n    // create its own staging buffer and copy FROM (empty) DEFAULT buffer first\n    D3D12_HEAP_PROPERTIES heapProps;\n    dstRes->GetHeapProperties(&heapProps, nullptr);\n    const bool isDefaultHeap = (heapProps.Type == D3D12_HEAP_TYPE_DEFAULT);\n\n#ifdef IGL_DEBUG\n    IGL_D3D12_LOG_VERBOSE(\n        \"copyTextureToBuffer: Destination heap type = %d (1=DEFAULT, 2=UPLOAD, 3=READBACK), \"\n        \"isDefaultHeap=%d\\n\",\n        heapProps.Type,\n        isDefaultHeap);\n#endif\n\n    if (!isDefaultHeap) {\n      // Destination is CPU-mappable (UPLOAD/READBACK heap) - copy via CPU\n      // Copy row-by-row, removing D3D12's row pitch padding\n      Result mapResult;\n      void* dstData = dstBuf.map(BufferRange(unpackedDataSize, destinationOffset), &mapResult);\n      if (dstData && mapResult.isOk()) {\n        const uint8_t* src = static_cast<uint8_t*>(readbackData) + layout.Offset;\n        uint8_t* dst = static_cast<uint8_t*>(dstData);\n        const UINT64 srcRowPitch = layout.Footprint.RowPitch;\n        const UINT64 dstRowPitch = rowSizeInBytes; // Unpadded row size\n\n        for (UINT z = 0; z < layout.Footprint.Depth; ++z) {\n          for (UINT row = 0; row < numRows; ++row) {\n            std::memcpy(dst, src, dstRowPitch);\n            src += srcRowPitch;\n            dst += dstRowPitch;\n          }\n        }\n\n        dstBuf.unmap();\n      } else {\n        readbackBuffer->Unmap(0, nullptr);\n        return Result{Result::Code::RuntimeError, \"Failed to map destination buffer\"};\n      }\n    } else {\n      // Destination is NOT CPU-mappable (DEFAULT heap) - need GPU copy\n      // Create temporary UPLOAD buffer with unpacked data, then GPU copy to destination\n      D3D12_HEAP_PROPERTIES uploadHeap{};\n      uploadHeap.Type = D3D12_HEAP_TYPE_UPLOAD;\n\n      D3D12_RESOURCE_DESC uploadDesc{};\n      uploadDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;\n      uploadDesc.Width = unpackedDataSize;\n      uploadDesc.Height = 1;\n      uploadDesc.DepthOrArraySize = 1;\n      uploadDesc.MipLevels = 1;\n      uploadDesc.Format = DXGI_FORMAT_UNKNOWN;\n      uploadDesc.SampleDesc.Count = 1;\n      uploadDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;\n\n      igl::d3d12::ComPtr<ID3D12Resource> uploadBuffer;\n      HRESULT hr = device->CreateCommittedResource(&uploadHeap,\n                                                   D3D12_HEAP_FLAG_NONE,\n                                                   &uploadDesc,\n                                                   D3D12_RESOURCE_STATE_GENERIC_READ,\n                                                   nullptr,\n                                                   IID_PPV_ARGS(uploadBuffer.GetAddressOf()));\n      if (FAILED(hr)) {\n        readbackBuffer->Unmap(0, nullptr);\n        return Result{Result::Code::RuntimeError, \"Failed to create upload buffer\"};\n      }\n\n      // Map upload buffer and unpack data from readback\n      void* uploadData = nullptr;\n      if (SUCCEEDED(uploadBuffer->Map(0, nullptr, &uploadData)) && uploadData) {\n        const uint8_t* src = static_cast<uint8_t*>(readbackData) + layout.Offset;\n        uint8_t* dst = static_cast<uint8_t*>(uploadData);\n        const UINT64 srcRowPitch = layout.Footprint.RowPitch;\n        const UINT64 dstRowPitch = rowSizeInBytes;\n\n        for (UINT z = 0; z < layout.Footprint.Depth; ++z) {\n          for (UINT row = 0; row < numRows; ++row) {\n            std::memcpy(dst, src, dstRowPitch);\n            src += srcRowPitch;\n            dst += dstRowPitch;\n          }\n        }\n        uploadBuffer->Unmap(0, nullptr);\n\n        // GPU copy from upload buffer to destination DEFAULT buffer using immediate commands.\n        Result gpuCopyResult;\n        ID3D12GraphicsCommandList* copyList = immediateCommands->begin(&gpuCopyResult);\n        if (!copyList || !gpuCopyResult.isOk()) {\n          readbackBuffer->Unmap(0, nullptr);\n          return Result{Result::Code::RuntimeError,\n                        \"Failed to begin immediate command list for GPU copy\"};\n        }\n\n        // Transition destination buffer to COPY_DEST state\n        D3D12_RESOURCE_BARRIER barrier = {};\n        barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;\n        barrier.Transition.pResource = dstRes;\n        barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;\n        barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COMMON;\n        barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_COPY_DEST;\n        copyList->ResourceBarrier(1, &barrier);\n\n        // Copy unpacked data to destination\n#ifdef IGL_DEBUG\n        IGL_D3D12_LOG_VERBOSE(\n            \"copyTextureToBuffer: GPU copy %llu bytes from upload buffer to DEFAULT buffer at \"\n            \"offset %llu\\n\",\n            unpackedDataSize,\n            destinationOffset);\n#endif\n        copyList->CopyBufferRegion(\n            dstRes, destinationOffset, uploadBuffer.Get(), 0, unpackedDataSize);\n\n        // Transition destination buffer back to UAV state (Storage buffer)\n        barrier.Transition.StateBefore = D3D12_RESOURCE_STATE_COPY_DEST;\n        barrier.Transition.StateAfter = D3D12_RESOURCE_STATE_UNORDERED_ACCESS;\n        copyList->ResourceBarrier(1, &barrier);\n\n        // Submit and wait for GPU copy.\n        Result copySubmitResult;\n        const uint64_t copyFenceValue = immediateCommands->submit(true, &copySubmitResult);\n#ifdef IGL_DEBUG\n        IGL_D3D12_LOG_VERBOSE(\"copyTextureToBuffer: GPU copy complete!\\n\");\n#endif\n        if (!copySubmitResult.isOk() || copyFenceValue == 0) {\n          readbackBuffer->Unmap(0, nullptr);\n          return Result{Result::Code::RuntimeError,\n                        \"Failed to submit GPU copy: \" + copySubmitResult.message};\n        }\n      } else {\n        readbackBuffer->Unmap(0, nullptr);\n        return Result{Result::Code::RuntimeError, \"Failed to map upload buffer\"};\n      }\n    }\n\n    readbackBuffer->Unmap(0, nullptr);\n  } else {\n    return Result{Result::Code::RuntimeError, \"Failed to map readback buffer\"};\n  }\n\n  // Return staging buffer to pool.\n  stagingDevice->free(staging, fenceValue);\n\n  return Result{};\n}\n\n} // namespace igl::d3d12::TextureCopyUtils\n"
  },
  {
    "path": "src/igl/d3d12/TextureCopyUtils.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <igl/Common.h>\n\nstruct ID3D12Device;\nstruct ID3D12CommandQueue;\nstruct ID3D12Resource;\n\nnamespace igl::d3d12 {\n\nclass D3D12Context;\nclass Device;\nclass Texture;\nclass Buffer;\n\nnamespace TextureCopyUtils {\n\n/**\n * Executes a texture-to-buffer copy operation.\n * Handles D3D12 row-pitch alignment, readback staging, and unpacking.\n *\n * @param ctx D3D12 context for device/queue access\n * @param iglDevice IGL device for command allocator pooling\n * @param srcTex Source texture to copy from\n * @param dstBuf Destination buffer to copy to\n * @param destinationOffset Offset in bytes into destination buffer\n * @param mipLevel Mipmap level to copy from source texture\n * @param layer Array layer to copy from source texture\n * @return Result indicating success or failure\n */\n[[nodiscard]] Result executeCopyTextureToBuffer(D3D12Context& ctx,\n                                                Device& iglDevice,\n                                                Texture& srcTex,\n                                                Buffer& dstBuf,\n                                                uint64_t destinationOffset,\n                                                uint32_t mipLevel,\n                                                uint32_t layer);\n\n} // namespace TextureCopyUtils\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Timer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/Timer.h>\n\n#include <igl/d3d12/D3D12Context.h>\n#include <igl/d3d12/Device.h>\n\nnamespace igl::d3d12 {\n\nTimer::Timer(const Device& device) {\n  auto& ctx = device.getD3D12Context();\n  auto* d3dDevice = ctx.getDevice();\n  auto* commandQueue = ctx.getCommandQueue();\n\n  // Query GPU timestamp frequency\n  // This returns the number of ticks per second for GPU timestamps\n  HRESULT hr = commandQueue->GetTimestampFrequency(&timestampFrequency_);\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"Timer: Failed to get timestamp frequency (0x%08X). Timer disabled.\\n\", hr);\n    resourceCreationFailed_ = true;\n    timestampFrequency_ = 0; // Leave at 0 to indicate timer is disabled\n    return;\n  }\n\n  // Create query heap for 2 timestamps (begin and end).\n  // Use D3D12_QUERY_HEAP_TYPE_TIMESTAMP for GPU timer queries.\n  D3D12_QUERY_HEAP_DESC queryHeapDesc = {};\n  queryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_TIMESTAMP;\n  queryHeapDesc.Count = 2; // Begin and end timestamps\n  queryHeapDesc.NodeMask = 0; // Single GPU\n\n  hr = d3dDevice->CreateQueryHeap(&queryHeapDesc, IID_PPV_ARGS(queryHeap_.GetAddressOf()));\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"Timer: Failed to create query heap (0x%08X). Timer disabled.\\n\", hr);\n    resourceCreationFailed_ = true;\n    timestampFrequency_ = 0;\n    return;\n  }\n\n  // Create readback buffer to hold query results\n  // Must use READBACK heap type for CPU access\n  D3D12_HEAP_PROPERTIES heapProps = {};\n  heapProps.Type = D3D12_HEAP_TYPE_READBACK;\n  heapProps.CPUPageProperty = D3D12_CPU_PAGE_PROPERTY_UNKNOWN;\n  heapProps.MemoryPoolPreference = D3D12_MEMORY_POOL_UNKNOWN;\n  heapProps.CreationNodeMask = 1;\n  heapProps.VisibleNodeMask = 1;\n\n  D3D12_RESOURCE_DESC resourceDesc = {};\n  resourceDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;\n  resourceDesc.Alignment = 0;\n  resourceDesc.Width = 2 * sizeof(uint64_t); // Space for 2 timestamps\n  resourceDesc.Height = 1;\n  resourceDesc.DepthOrArraySize = 1;\n  resourceDesc.MipLevels = 1;\n  resourceDesc.Format = DXGI_FORMAT_UNKNOWN;\n  resourceDesc.SampleDesc.Count = 1;\n  resourceDesc.SampleDesc.Quality = 0;\n  resourceDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;\n  resourceDesc.Flags = D3D12_RESOURCE_FLAG_NONE;\n\n  hr = d3dDevice->CreateCommittedResource(&heapProps,\n                                          D3D12_HEAP_FLAG_NONE,\n                                          &resourceDesc,\n                                          D3D12_RESOURCE_STATE_COPY_DEST, // Readback buffers must\n                                                                          // be in COPY_DEST state\n                                          nullptr,\n                                          IID_PPV_ARGS(readbackBuffer_.GetAddressOf()));\n\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"Timer: Failed to create readback buffer (0x%08X). Timer disabled.\\n\", hr);\n    resourceCreationFailed_ = true;\n    timestampFrequency_ = 0;\n    queryHeap_.Reset(); // Clean up partially created resources\n    return;\n  }\n\n#ifdef IGL_DEBUG\n  IGL_D3D12_LOG_VERBOSE(\"Timer: Created successfully (frequency: %llu Hz)\\n\", timestampFrequency_);\n#endif\n}\n\nTimer::~Timer() {\n  // ComPtr handles cleanup automatically\n}\n\nvoid Timer::begin(ID3D12GraphicsCommandList* commandList) {\n  if (resourceCreationFailed_ || timestampFrequency_ == 0) {\n    // Timer disabled due to resource creation or frequency query failure - silently no-op\n    return;\n  }\n\n  if (!commandList) {\n    IGL_LOG_ERROR(\"Timer::begin() called with null command list\\n\");\n    return;\n  }\n\n  // Record begin timestamp (index 0) at the start of GPU work.\n  // This is a bottom-of-pipe operation that samples when the GPU finishes preceding work.\n  commandList->EndQuery(queryHeap_.Get(), D3D12_QUERY_TYPE_TIMESTAMP, 0);\n}\n\nvoid Timer::end(ID3D12GraphicsCommandList* commandList, ID3D12Fence* fence, uint64_t fenceValue) {\n  if (resourceCreationFailed_ || timestampFrequency_ == 0) {\n    // Timer disabled - silently no-op\n    return;\n  }\n\n  if (!commandList) {\n    IGL_LOG_ERROR(\"Timer::end() called with null command list\\n\");\n    return;\n  }\n\n  if (!fence) {\n    IGL_LOG_ERROR(\"Timer::end() called with null fence\\n\");\n    return;\n  }\n\n  if (ended_.load(std::memory_order_acquire)) {\n    IGL_LOG_ERROR(\"Timer::end() called multiple times\\n\");\n    return;\n  }\n\n  // Record end timestamp (index 1) at the end of GPU work.\n  // Bottom-of-pipe operation: samples when the GPU finishes all preceding work.\n  commandList->EndQuery(queryHeap_.Get(), D3D12_QUERY_TYPE_TIMESTAMP, 1);\n\n  // Resolve query data to the readback buffer.\n  // This GPU command copies timestamp values from the query heap to a CPU-readable buffer;\n  // the resolved data is only valid after the fence signals completion.\n  commandList->ResolveQueryData(queryHeap_.Get(),\n                                D3D12_QUERY_TYPE_TIMESTAMP,\n                                0, // Start index\n                                2, // Count (begin + end)\n                                readbackBuffer_.Get(),\n                                0 // Destination offset\n  );\n\n  // Store fence and fence value for later completion checking.\n  // Thread-safe: fence_ is written once; atomics ensure visibility.\n  fence_ = fence;\n  fenceValue_.store(fenceValue, std::memory_order_release);\n  ended_.store(true, std::memory_order_release);\n}\n\nuint64_t Timer::getElapsedTimeNanos() const {\n  if (!readbackBuffer_.Get() || !ended_.load(std::memory_order_acquire)) {\n    return 0;\n  }\n\n  // Check if the fence has signaled; results are only valid after GPU completes.\n  // Thread-safe: fence_ is set once before the ended_ flag, and memory ordering ensures visibility.\n  uint64_t fenceVal = fenceValue_.load(std::memory_order_acquire);\n  if (!fence_ || fence_->GetCompletedValue() < fenceVal) {\n    return 0; // GPU hasn't finished yet, return 0\n  }\n\n  // If we've already resolved and cached the result, return it.\n  // Thread-safe: resolved_ flag prevents multiple threads from mapping simultaneously.\n  if (resolved_.load(std::memory_order_acquire)) {\n    return cachedElapsedNanos_.load(std::memory_order_relaxed);\n  }\n\n  // GPU has completed; it is now safe to read the query results.\n  // Map the readback buffer to read timestamp values.\n  void* mappedData = nullptr;\n  D3D12_RANGE readRange{0, sizeof(uint64_t) * 2}; // Only read the 2 timestamps\n  HRESULT hr = readbackBuffer_->Map(0, &readRange, &mappedData);\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"Timer: Failed to map readback buffer: 0x%08X\\n\", hr);\n    return 0;\n  }\n\n  // Read timestamp values\n  const auto* timestamps = static_cast<const uint64_t*>(mappedData);\n  uint64_t beginTime = timestamps[0];\n  uint64_t endTime = timestamps[1];\n\n  // Unmap buffer\n  D3D12_RANGE writeRange{0, 0}; // No writes\n  readbackBuffer_->Unmap(0, &writeRange);\n\n  // Validate timestamp data\n  if (endTime <= beginTime) {\n#ifdef IGL_DEBUG\n    IGL_LOG_ERROR(\n        \"Timer: Invalid timestamp data (begin=%llu, end=%llu) - GPU work may not have executed\\n\",\n        beginTime,\n        endTime);\n#endif\n    return 0;\n  }\n\n  if (timestampFrequency_ == 0) {\n#ifdef IGL_DEBUG\n    IGL_LOG_ERROR(\"Timer: Invalid timestamp frequency (0 Hz) - timer disabled\\n\");\n#endif\n    return 0;\n  }\n\n  // Calculate elapsed time in GPU ticks\n  uint64_t deltaTicks = endTime - beginTime;\n\n  // Convert ticks to nanoseconds using floating-point math for accuracy,\n  // as recommended by Microsoft docs: nanoseconds = (ticks / frequency) * 1,000,000,000.\n  const double nanosPerSecond = 1000000000.0;\n  double elapsedNanos =\n      (static_cast<double>(deltaTicks) / static_cast<double>(timestampFrequency_)) * nanosPerSecond;\n\n  // Cache the result so we don't re-read from GPU.\n  // Thread-safe: store cached value before setting the resolved flag.\n  cachedElapsedNanos_.store(static_cast<uint64_t>(elapsedNanos), std::memory_order_release);\n  resolved_.store(true, std::memory_order_release);\n\n  return static_cast<uint64_t>(elapsedNanos);\n}\n\nbool Timer::resultsAvailable() const {\n  // Results are available only after the fence has signaled completion.\n  // This ensures we don't read uninitialized or garbage data from the query heap.\n  // Thread-safe: use atomic loads with proper memory ordering.\n  if (!ended_.load(std::memory_order_acquire) || !fence_) {\n    return false;\n  }\n\n  // Check if GPU has completed execution (fence signaled)\n  uint64_t fenceVal = fenceValue_.load(std::memory_order_acquire);\n  return fence_->GetCompletedValue() >= fenceVal;\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/Timer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <atomic>\n#include <igl/Timer.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass Device;\n\n/// @brief GPU timer implementation using D3D12 timestamp queries\n/// @details Implements ITimer interface for D3D12 backend using query heaps.\n///\n/// Lifecycle:\n/// - Constructor creates query heap and readback buffer resources\n/// - begin() called when command list is reset for recording (CommandBuffer::begin())\n/// - GPU work is encoded in the command list\n/// - end() called during submission before command list is closed (CommandQueue::submit())\n/// - Query results are fence-synchronized and only read after GPU completes\n///\n/// Cross-platform timestamp semantics\n/// ----------------------------------\n/// All timestamps returned by getElapsedTimeNanos() are in nanoseconds, providing\n/// cross-platform consistency with Vulkan and other backends.\n///\n/// D3D12 GPU timestamps are automatically converted from hardware ticks to nanoseconds\n/// using the GPU timestamp frequency (ID3D12CommandQueue::GetTimestampFrequency()).\n///\n/// Formula: elapsedNanos = (endTicks - startTicks) * 1,000,000,000 / frequencyHz.\n///\n/// This ensures consistent timing across all IGL backends regardless of hardware.\n///\n/// The implementation measures GPU execution time via timestamp placement\n/// and fence-synchronized readback, and is safe for cross-thread queries.\nclass Timer final : public ITimer {\n public:\n  /// @brief Constructor - creates query heap and readback buffer, starts timer\n  /// @param device D3D12 device used to create resources\n  explicit Timer(const Device& device);\n  ~Timer() override;\n\n  Timer(const Timer&) = delete;\n  Timer& operator=(const Timer&) = delete;\n  Timer(Timer&&) = delete;\n  Timer& operator=(Timer&&) = delete;\n\n  /// @brief Record start timestamp in command list\n  /// @param commandList D3D12 command list to record start timestamp\n  void begin(ID3D12GraphicsCommandList* commandList);\n\n  /// @brief Record end timestamp and associate with fence value\n  /// @param commandList D3D12 command list to record end timestamp and resolve queries\n  /// @param fence Fence to check for GPU completion\n  /// @param fenceValue Fence value that will be signaled when GPU completes\n  void end(ID3D12GraphicsCommandList* commandList, ID3D12Fence* fence, uint64_t fenceValue);\n\n  /// @brief Returns elapsed GPU time in nanoseconds\n  /// @return Elapsed time in nanoseconds, or 0 if results not yet available\n  [[nodiscard]] uint64_t getElapsedTimeNanos() const override;\n\n  /// @brief Check if timer results are available\n  /// @return true if results can be read without blocking (fence has signaled)\n  [[nodiscard]] bool resultsAvailable() const override;\n\n private:\n  igl::d3d12::ComPtr<ID3D12QueryHeap> queryHeap_;\n  igl::d3d12::ComPtr<ID3D12Resource> readbackBuffer_;\n  uint64_t timestampFrequency_ =\n      0; // GPU timestamp frequency (ticks per second), 0 = timer disabled\n  bool resourceCreationFailed_ = false; // Track if constructor failed to create resources\n\n  // Fence synchronization for accurate GPU timing.\n  // Thread-safe: use atomics to allow safe cross-thread queries.\n  ID3D12Fence* fence_ = nullptr; // Fence to check completion (not owned, set once in end())\n  std::atomic<uint64_t> fenceValue_{0}; // Fence value when timer ended\n  mutable std::atomic<bool> resolved_{false}; // Has query data been resolved and cached? (mutable\n                                              // for lazy resolution in const getter)\n  std::atomic<bool> ended_{false}; // Has end() been called?\n\n  // Cached results to avoid re-reading from GPU.\n  // Thread-safe: only written once after the fence signals, then immutable (mutable for lazy\n  // resolution in const getter).\n  mutable std::atomic<uint64_t> cachedElapsedNanos_{0};\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/UploadRingBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/d3d12/UploadRingBuffer.h>\n\n#include <igl/d3d12/D3D12Context.h>\n\nnamespace igl::d3d12 {\n\nUploadRingBuffer::UploadRingBuffer(ID3D12Device* device, uint64_t size) :\n  device_(device), size_(size) {\n  if (!device_) {\n    IGL_LOG_ERROR(\"UploadRingBuffer: Device is null\\n\");\n    return;\n  }\n\n  // Create large upload heap\n  D3D12_HEAP_PROPERTIES uploadHeapProps = {};\n  uploadHeapProps.Type = D3D12_HEAP_TYPE_UPLOAD;\n  uploadHeapProps.CreationNodeMask = 1;\n  uploadHeapProps.VisibleNodeMask = 1;\n\n  D3D12_RESOURCE_DESC bufferDesc = {};\n  bufferDesc.Dimension = D3D12_RESOURCE_DIMENSION_BUFFER;\n  bufferDesc.Alignment = 0;\n  bufferDesc.Width = size_;\n  bufferDesc.Height = 1;\n  bufferDesc.DepthOrArraySize = 1;\n  bufferDesc.MipLevels = 1;\n  bufferDesc.Format = DXGI_FORMAT_UNKNOWN;\n  bufferDesc.SampleDesc.Count = 1;\n  bufferDesc.SampleDesc.Quality = 0;\n  bufferDesc.Layout = D3D12_TEXTURE_LAYOUT_ROW_MAJOR;\n  bufferDesc.Flags = D3D12_RESOURCE_FLAG_NONE;\n\n  HRESULT hr = device_->CreateCommittedResource(&uploadHeapProps,\n                                                D3D12_HEAP_FLAG_NONE,\n                                                &bufferDesc,\n                                                D3D12_RESOURCE_STATE_GENERIC_READ,\n                                                nullptr,\n                                                IID_PPV_ARGS(uploadHeap_.GetAddressOf()));\n\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"UploadRingBuffer: Failed to create upload heap (HRESULT=0x%08X)\\n\", hr);\n    return;\n  }\n\n  // Map the entire buffer persistently\n  D3D12_RANGE readRange = {0, 0}; // Not reading from GPU\n  hr = uploadHeap_->Map(0, &readRange, &cpuBase_);\n  if (FAILED(hr)) {\n    IGL_LOG_ERROR(\"UploadRingBuffer: Failed to map upload heap (HRESULT=0x%08X)\\n\", hr);\n    cpuBase_ = nullptr;\n    return;\n  }\n\n  gpuBase_ = uploadHeap_->GetGPUVirtualAddress();\n\n  IGL_D3D12_LOG_VERBOSE(\n      \"UploadRingBuffer: Created ring buffer (size=%llu MB, cpuBase=%p, gpuBase=0x%llX)\\n\",\n      size_ / (1024 * 1024),\n      cpuBase_,\n      gpuBase_);\n\n  // Track resource creation\n  D3D12Context::trackResourceCreation(\"UploadRingBuffer\", size_);\n}\n\nUploadRingBuffer::~UploadRingBuffer() {\n  if (uploadHeap_.Get() && cpuBase_) {\n    uploadHeap_->Unmap(0, nullptr);\n    cpuBase_ = nullptr;\n  }\n\n  if (uploadHeap_.Get()) {\n    // Track resource destruction\n    D3D12Context::trackResourceDestruction(\"UploadRingBuffer\", size_);\n  }\n\n  IGL_D3D12_LOG_VERBOSE(\"UploadRingBuffer: Destroyed (allocations=%llu, failures=%llu)\\n\",\n                        allocationCount_,\n                        failureCount_);\n}\n\nUploadRingBuffer::Allocation UploadRingBuffer::allocate(uint64_t size,\n                                                        uint64_t alignment,\n                                                        uint64_t fenceValue) {\n  std::lock_guard<std::mutex> lock(mutex_);\n\n  if (!uploadHeap_.Get() || !cpuBase_) {\n    IGL_LOG_ERROR(\"UploadRingBuffer::allocate: Ring buffer not initialized\\n\");\n    failureCount_++;\n    return Allocation{};\n  }\n\n  if (size == 0) {\n    IGL_LOG_ERROR(\"UploadRingBuffer::allocate: Size is zero\\n\");\n    failureCount_++;\n    return Allocation{};\n  }\n\n  // Align size up for proper alignment of next allocation\n  const uint64_t alignedSize = alignUp(size, alignment);\n\n  // Invariants (all protected by mutex_):\n  // - head_ is the next free offset where a new allocation can start\n  // - tail_ is the offset of the oldest in-flight allocation (or equals head_ when empty)\n  // - pendingAllocations_ is a queue of all in-flight allocations in submission order\n  // - When pendingAllocations_.empty(), the entire buffer is free: tail_ == head_\n  const bool bufferEmpty = pendingAllocations_.empty();\n  const uint64_t currentHead = head_;\n  const uint64_t currentTail = bufferEmpty ? currentHead : tail_;\n\n  // Detect full ring: head == tail with in-flight allocations means buffer is completely occupied\n  const bool bufferFull = !bufferEmpty && (currentHead == currentTail);\n\n  if (bufferFull) {\n    // Ring buffer is completely full - no free space available\n    failureCount_++;\n    IGL_D3D12_LOG_VERBOSE(\"UploadRingBuffer: Ring buffer completely full (size=%llu)\\n\", size_);\n    return Allocation{};\n  }\n\n  // Align head to requested alignment\n  const uint64_t alignedHead = alignUp(currentHead, alignment);\n\n  // Determine available free space based on buffer state\n  // When empty: entire buffer is available starting from head_\n  // When head > tail: in-flight region spans [tail, head); free space is [head, size_) and [0,\n  // tail) When head < tail: in-flight region spans [tail, size_) + [0, head); free space is [head,\n  // tail)\n\n  bool canFit = false;\n  uint64_t allocationOffset = alignedHead;\n\n  if (bufferEmpty) {\n    // Entire buffer is free\n    if (alignedHead + alignedSize <= size_) {\n      canFit = true;\n      allocationOffset = alignedHead;\n    } else if (alignedSize <= size_) {\n      // Wrap to beginning\n      allocationOffset = 0;\n      canFit = true;\n    }\n  } else if (currentHead >= currentTail) {\n    // In-flight allocations have wrapped around: free regions are [head, size_) and [0, tail)\n    if (alignedHead + alignedSize <= size_) {\n      // Fits at current head position\n      canFit = true;\n      allocationOffset = alignedHead;\n    } else if (alignedSize <= currentTail) {\n      // Wrap around to beginning\n      allocationOffset = 0;\n      canFit = true;\n    }\n  } else {\n    // In-flight allocations have not wrapped: free space is [head, tail)\n    if (alignedHead + alignedSize <= currentTail) {\n      canFit = true;\n      allocationOffset = alignedHead;\n    }\n  }\n\n  if (!canFit) {\n    // Not enough space - caller will fall back to dedicated staging buffer\n    // This is expected behavior when ring is full, not an error condition\n    // Note: failureCount_ tracks ring-full events as a diagnostic metric, not errors\n    failureCount_++;\n    IGL_D3D12_LOG_VERBOSE(\n        \"UploadRingBuffer: Insufficient space (request=%llu, approx used=%llu/%llu)\\n\",\n        alignedSize,\n        getUsedSizeUnlocked(),\n        size_);\n    return Allocation{};\n  }\n\n  // Final validation: ensure allocation doesn't overlap with in-flight allocations\n  const uint64_t allocationEnd = allocationOffset + alignedSize;\n\n#ifdef _DEBUG\n  // Debug: verify allocation doesn't overlap with in-flight allocations\n  if (!bufferEmpty) {\n    if (allocationOffset == 0) {\n      // Wraparound case: ensure we don't exceed tail\n      IGL_DEBUG_ASSERT(allocationEnd <= currentTail,\n                       \"UploadRingBuffer: Allocation [0, %llu) would overlap tail at %llu\",\n                       allocationEnd,\n                       currentTail);\n    } else if (currentHead >= currentTail) {\n      // In-flight region wrapped: allocation should be in free region [head, size_)\n      IGL_DEBUG_ASSERT(allocationOffset >= currentHead && allocationEnd <= size_,\n                       \"UploadRingBuffer: Allocation [%llu, %llu) outside free region [%llu, %llu)\",\n                       allocationOffset,\n                       allocationEnd,\n                       currentHead,\n                       size_);\n    } else {\n      // In-flight region not wrapped: allocation should be in free region [head, tail)\n      IGL_DEBUG_ASSERT(allocationOffset >= currentHead && allocationEnd <= currentTail,\n                       \"UploadRingBuffer: Allocation [%llu, %llu) outside free region [%llu, %llu)\",\n                       allocationOffset,\n                       allocationEnd,\n                       currentHead,\n                       currentTail);\n    }\n  }\n#endif\n\n  // Create allocation.\n  Allocation allocation;\n  allocation.buffer = uploadHeap_;\n  allocation.cpuAddress = static_cast<uint8_t*>(cpuBase_) + allocationOffset;\n  allocation.gpuAddress = gpuBase_ + allocationOffset;\n  allocation.offset = allocationOffset;\n  allocation.size = alignedSize;\n  allocation.valid = true;\n\n  // Track pending allocation for retirement\n  pendingAllocations_.push({allocationOffset, alignedSize, fenceValue});\n\n  // Update head pointer\n  uint64_t newHead = allocationOffset + alignedSize;\n  if (newHead >= size_) {\n    newHead = 0; // Wrap around\n  }\n  head_ = newHead;\n\n  // Update tail_ for first allocation when buffer transitions from empty\n  if (bufferEmpty) {\n    tail_ = allocationOffset;\n  }\n\n  allocationCount_++;\n\n#ifdef _DEBUG\n  // Debug validation: ensure invariants hold after allocation\n  IGL_DEBUG_ASSERT(newHead <= size_, \"Head exceeded buffer size!\");\n  IGL_DEBUG_ASSERT(!pendingAllocations_.empty() || head_ == tail_,\n                   \"Buffer should have pending allocations or head == tail\");\n\n  // Validate that used size is reasonable (use unlocked helper since we hold mutex_)\n  const uint64_t usedSize = getUsedSizeUnlocked();\n  IGL_DEBUG_ASSERT(usedSize <= size_, \"Used size %llu exceeds buffer size %llu\", usedSize, size_);\n#endif\n\n  return allocation;\n}\n\nvoid UploadRingBuffer::retire(uint64_t completedFenceValue) {\n  std::lock_guard<std::mutex> lock(mutex_);\n\n  // Process all pending allocations that have completed\n  while (!pendingAllocations_.empty()) {\n    const auto& pending = pendingAllocations_.front();\n\n    if (pending.fenceValue > completedFenceValue) {\n      // This and all subsequent allocations are still pending\n      break;\n    }\n\n    // This allocation has completed, reclaim the memory\n    pendingAllocations_.pop();\n\n    // Update tail_ to point to the next oldest allocation, or to head_ if buffer is now empty\n    if (!pendingAllocations_.empty()) {\n      tail_ = pendingAllocations_.front().offset;\n    } else {\n      // Buffer is now empty: reset tail to head to maintain invariant\n      tail_ = head_;\n    }\n  }\n\n#ifdef _DEBUG\n  // Validate invariant: when empty, tail == head\n  if (pendingAllocations_.empty()) {\n    IGL_DEBUG_ASSERT(tail_ == head_, \"Buffer empty but tail (%llu) != head (%llu)\", tail_, head_);\n  }\n#endif\n}\n\nuint64_t UploadRingBuffer::getUsedSizeUnlocked() const {\n  // Note: Caller must hold mutex_\n  if (head_ >= tail_) {\n    return head_ - tail_;\n  } else {\n    return (size_ - tail_) + head_;\n  }\n}\n\nuint64_t UploadRingBuffer::getUsedSize() const {\n  std::lock_guard<std::mutex> lock(mutex_);\n  return getUsedSizeUnlocked();\n}\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/UploadRingBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <mutex>\n#include <queue>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\n/**\n * @brief Upload ring buffer for streaming resources.\n *\n * Manages a large staging buffer (64-256MB) for efficient resource uploads.\n * Implements a ring buffer pattern with fence-based memory retirement to\n * reduce allocator churn and memory fragmentation.\n *\n * Key features:\n * - Large pre-allocated upload heap\n * - Linear sub-allocation with wraparound\n * - Fence-based memory retirement and recycling\n * - Thread-safe allocation\n */\nclass UploadRingBuffer {\n public:\n  /**\n   * @brief Represents a sub-allocation from the ring buffer\n   */\n  struct Allocation {\n    igl::d3d12::ComPtr<ID3D12Resource> buffer; // Underlying buffer resource.\n    void* cpuAddress = nullptr; // CPU-visible mapped address\n    D3D12_GPU_VIRTUAL_ADDRESS gpuAddress = 0; // GPU virtual address\n    uint64_t offset = 0; // Offset within ring buffer\n    uint64_t size = 0; // Size of allocation\n    bool valid = false; // Whether allocation succeeded\n  };\n\n  /**\n   * @brief Constructs an upload ring buffer\n   * @param device D3D12 device for resource creation\n   * @param size Total size of ring buffer (default: 128MB)\n   *\n   * T14: Default value (128MB) matches D3D12ContextConfig::defaultConfig().uploadRingBufferSize.\n   * In production, call sites pass D3D12ContextConfig::uploadRingBufferSize explicitly so the\n   * ring size is driven by the active context configuration rather than this default.\n   */\n  explicit UploadRingBuffer(ID3D12Device* device, uint64_t size = 128 * 1024 * 1024);\n  ~UploadRingBuffer();\n\n  // Non-copyable\n  UploadRingBuffer(const UploadRingBuffer&) = delete;\n  UploadRingBuffer& operator=(const UploadRingBuffer&) = delete;\n\n  /**\n   * @brief Allocates staging memory from the ring buffer\n   * @param size Size in bytes to allocate\n   * @param alignment Alignment requirement (e.g., 256 for constant buffers)\n   * @param fenceValue Fence value when this allocation will be retired\n   * @return Allocation structure (check valid flag for success)\n   *\n   * Note: If allocation fails due to insufficient space, returns invalid allocation.\n   * Caller should fall back to creating a dedicated staging buffer.\n   */\n  Allocation allocate(uint64_t size, uint64_t alignment, uint64_t fenceValue);\n\n  /**\n   * @brief Retires allocations that have completed on GPU\n   * @param completedFenceValue Fence value that has been signaled by GPU\n   *\n   * Reclaims memory from allocations associated with fence values <= completedFenceValue.\n   * This allows the ring buffer to wrap around and reuse memory.\n   */\n  void retire(uint64_t completedFenceValue);\n\n  /**\n   * @brief Gets total size of ring buffer\n   */\n  uint64_t getTotalSize() const {\n    return size_;\n  }\n\n  /**\n   * @brief Gets estimated used size based on head/tail distance (for diagnostics)\n   *\n   * Note: Returns approximate usage; does not account for internal alignment gaps.\n   * Returns 0 when buffer is empty (tail == head with no pending allocations).\n   * Also returns 0 when buffer is completely full (tail == head with pending allocations);\n   * use pendingAllocations or getFailureCount() to distinguish empty vs. full states.\n   */\n  uint64_t getUsedSize() const;\n\n  /**\n   * @brief Gets number of allocations made (for performance metrics)\n   */\n  uint64_t getAllocationCount() const {\n    return allocationCount_;\n  }\n\n  /**\n   * @brief Gets number of times allocation could not be satisfied from ring buffer (for metrics)\n   *\n   * Note: This counts ring-full events where callers fall back to dedicated staging buffers,\n   * not error conditions. It is a diagnostic metric for ring buffer utilization.\n   */\n  uint64_t getFailureCount() const {\n    return failureCount_;\n  }\n\n  /**\n   * @brief Gets the underlying upload heap resource (for copy operations)\n   */\n  ID3D12Resource* getUploadHeap() const {\n    return uploadHeap_.Get();\n  }\n\n private:\n  /**\n   * @brief Represents a pending allocation waiting for GPU completion\n   */\n  struct PendingAllocation {\n    uint64_t offset; // Start offset in ring buffer\n    uint64_t size; // Size of allocation\n    uint64_t fenceValue; // Fence value when allocation can be retired\n  };\n\n  /**\n   * @brief Aligns value up to specified alignment\n   */\n  static uint64_t alignUp(uint64_t value, uint64_t alignment) {\n    return (value + alignment - 1) & ~(alignment - 1);\n  }\n\n  /**\n   * @brief Internal helper to compute used size without locking\n   * @note Caller must hold mutex_\n   * @note Returns 0 when head == tail (both empty and full states)\n   */\n  uint64_t getUsedSizeUnlocked() const;\n\n  ID3D12Device* device_ = nullptr;\n  igl::d3d12::ComPtr<ID3D12Resource> uploadHeap_;\n  void* cpuBase_ = nullptr; // CPU-mapped base address\n  D3D12_GPU_VIRTUAL_ADDRESS gpuBase_ = 0; // GPU base address\n\n  uint64_t size_ = 0; // Total ring buffer size\n  uint64_t head_ = 0; // Next free offset for new allocations (protected by mutex_)\n  uint64_t tail_ =\n      0; // Offset of oldest in-flight allocation; equals head_ when empty (protected by mutex_)\n\n  std::queue<PendingAllocation> pendingAllocations_; // Allocations waiting for GPU\n  mutable std::mutex mutex_; // Thread safety\n\n  // Metrics\n  uint64_t allocationCount_ = 0;\n  uint64_t failureCount_ = 0;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/d3d12/VertexInputState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/VertexInputState.h>\n#include <igl/d3d12/Common.h>\n\nnamespace igl::d3d12 {\n\nclass VertexInputState final : public IVertexInputState {\n public:\n  explicit VertexInputState(const VertexInputStateDesc& desc) : desc_(desc) {}\n  ~VertexInputState() override = default;\n\n  const VertexInputStateDesc& getDesc() const {\n    return desc_;\n  }\n\n private:\n  VertexInputStateDesc desc_;\n};\n\n} // namespace igl::d3d12\n"
  },
  {
    "path": "src/igl/glslang/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nproject(IGLGlslang CXX C)\n\nfile(GLOB SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp *.c)\nfile(GLOB HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)\n\nadd_library(IGLGlslang ${SRC_FILES} ${HEADER_FILES})\n\ntarget_link_libraries(IGLGlslang PRIVATE IGLLibrary)\n\nigl_set_cxxstd(IGLGlslang 17)\nigl_set_folder(IGLGlslang \"IGL\")\n\n# glslang\n# cmake-format: off\nset(ENABLE_GLSLANG_BINARIES OFF CACHE BOOL \"\")\nset(ENABLE_HLSL             OFF CACHE BOOL \"\")\nset(ENABLE_CTEST            OFF CACHE BOOL \"\")\nset(ENABLE_OPT              OFF CACHE BOOL \"\")\nset(ENABLE_SPVREMAPPER      OFF CACHE BOOL \"\")\nset(SKIP_GLSLANG_INSTALL    ON  CACHE BOOL \"\")\nadd_subdirectory(${IGL_ROOT_DIR}/third-party/deps/src/glslang \"glslang\")\nigl_set_folder(GenericCodeGen     \"third-party/glslang\")\nigl_set_folder(glslang            \"third-party/glslang\")\nigl_set_folder(MachineIndependent \"third-party/glslang\")\nigl_set_folder(OSDependent        \"third-party/glslang\")\nigl_set_folder(SPIRV              \"third-party/glslang\")\nigl_set_folder(glslang-default-resource-limits \"third-party/glslang\")\n# cmake-format: on\n\ntarget_link_libraries(IGLGlslang PUBLIC glslang SPIRV glslang-default-resource-limits)\n\n# explicit include directories for glslang headers\ntarget_include_directories(IGLGlslang PRIVATE\n  \"${IGL_ROOT_DIR}/third-party/deps/src/glslang\"\n  \"${IGL_ROOT_DIR}/third-party/deps/src/glslang/glslang/Include\")\n\nif(CMAKE_CXX_COMPILER_ID MATCHES \"Clang\")\n  target_compile_options(IGLGlslang PRIVATE \"-Wno-nullability-completeness\")\n  target_compile_options(MachineIndependent PRIVATE \"-Wno-unused-but-set-variable\")\nendif()\n"
  },
  {
    "path": "src/igl/glslang/GlslCompiler.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/glslang/GlslCompiler.h>\n\n#include <cstdint>\n#include <string>\n#include <igl/Macros.h>\n#include <igl/glslang/GlslangHelpers.h>\n\nnamespace igl::glslang {\nnamespace {\n[[nodiscard]] glslang_stage_t getGLSLangShaderStage(ShaderStage stage) noexcept {\n  switch (stage) {\n  case igl::ShaderStage::Vertex:\n    return GLSLANG_STAGE_VERTEX;\n  case igl::ShaderStage::Fragment:\n    return GLSLANG_STAGE_FRAGMENT;\n  case igl::ShaderStage::Compute:\n    return GLSLANG_STAGE_COMPUTE;\n  case igl::ShaderStage::Task:\n    return GLSLANG_STAGE_TASK;\n  case igl::ShaderStage::Mesh:\n    return GLSLANG_STAGE_MESH;\n  default:\n    IGL_DEBUG_ABORT(\"Not supported shader stage (%d)\", static_cast<int>(stage));\n  };\n  return GLSLANG_STAGE_COUNT;\n}\n\n// Logs GLSL shaders with line numbers annotation\nvoid logShaderSource(const char* text) {\n#if IGL_LOGGING_ENABLED\n  uint32_t line = 1;\n\n  // IGLLog on Android also writes a new line,\n  // so to make things easier to read separate out the Android logging\n#if IGL_PLATFORM_ANDROID\n  std::string outputLine = \"\";\n  while (text && *text) {\n    if (*text == '\\n') {\n      // Write out the line along with the line number, and reset the line\n      IGL_LOG_INFO(\"(%3u) %s\", line++, outputLine.c_str());\n      outputLine = \"\";\n    } else if (*text == '\\r') {\n      // skip it\n    } else {\n      outputLine += *text;\n    }\n    text++;\n  }\n  IGL_LOG_INFO(\"\");\n#else\n  IGL_LOG_INFO(\"\\n(%3u) \", line);\n  while (text && *text) {\n    if (*text == '\\n') {\n      IGL_LOG_INFO(\"\\n(%3u) \", ++line);\n    } else if (*text == '\\r') {\n      // skip it to support Windows/UNIX EOLs\n    } else {\n      IGL_LOG_INFO(\"%c\", *text);\n    }\n    text++;\n  }\n  IGL_LOG_INFO(\"\\n\");\n#endif\n#endif\n}\n} // namespace\n\nvoid initializeCompiler() noexcept {\n  glslang_initialize_process();\n}\n\nResult compileShader(ShaderStage stage,\n                     const char* code,\n                     std::vector<uint32_t>& outSPIRV,\n                     const glslang_resource_t* glslLangResource) noexcept {\n  IGL_PROFILER_FUNCTION();\n\n  glslang_input_t input{};\n  glslangGetDefaultInput(code, getGLSLangShaderStage(stage), glslLangResource, &input);\n\n  glslang_shader_t* shader = glslang_shader_create(&input);\n  IGL_SCOPE_EXIT {\n    glslang_shader_delete(shader);\n  };\n\n  if (!glslang_shader_preprocess(shader, &input)) {\n    IGL_LOG_ERROR(\"Shader preprocessing failed:\\n\");\n    IGL_LOG_ERROR(\"  %s\\n\", glslang_shader_get_info_log(shader));\n    IGL_LOG_ERROR(\"  %s\\n\", glslang_shader_get_info_debug_log(shader));\n    logShaderSource(code);\n    IGL_DEBUG_ABORT(\"glslang_shader_preprocess() failed\");\n    return Result(Result::Code::InvalidOperation, \"glslang_shader_preprocess() failed\");\n  }\n\n  if (!glslang_shader_parse(shader, &input)) {\n    IGL_LOG_ERROR(\"Shader parsing failed:\\n\");\n    IGL_LOG_ERROR(\"  %s\\n\", glslang_shader_get_info_log(shader));\n    IGL_LOG_ERROR(\"  %s\\n\", glslang_shader_get_info_debug_log(shader));\n    logShaderSource(glslang_shader_get_preprocessed_code(shader));\n    IGL_DEBUG_ABORT(\"glslang_shader_parse() failed\");\n    return Result(Result::Code::InvalidOperation, \"glslang_shader_parse() failed\");\n  }\n\n  glslang_program_t* program = glslang_program_create();\n  glslang_program_add_shader(program, shader);\n\n  IGL_SCOPE_EXIT {\n    glslang_program_delete(program);\n  };\n\n  if (!glslang_program_link(program, GLSLANG_MSG_SPV_RULES_BIT | GLSLANG_MSG_VULKAN_RULES_BIT)) {\n    IGL_LOG_ERROR(\"Shader linking failed:\\n\");\n    IGL_LOG_ERROR(\"  %s\\n\", glslang_program_get_info_log(program));\n    IGL_LOG_ERROR(\"  %s\\n\", glslang_program_get_info_debug_log(program));\n    IGL_DEBUG_ABORT(\"glslang_program_link() failed\");\n    return Result(Result::Code::InvalidOperation, \"glslang_program_link() failed\");\n  }\n\n  glslang_spv_options_t options = {\n      /* .generate_debug_info = */ true,\n      /* .strip_debug_info = */ false,\n      /* .disable_optimizer = */ false,\n      /* .optimize_size = */ true,\n      /* .disassemble = */ false,\n      /* .validate = */ true,\n      /* .emit_nonsemantic_shader_debug_info = */ false,\n      /* .emit_nonsemantic_shader_debug_source = */ false,\n  };\n\n  glslang_program_SPIRV_generate_with_options(program, input.stage, &options);\n\n  if (glslang_program_SPIRV_get_messages(program)) {\n    IGL_LOG_ERROR(\"%s\\n\", glslang_program_SPIRV_get_messages(program));\n  }\n\n  const unsigned int* codePtr = glslang_program_SPIRV_get_ptr(program);\n\n  outSPIRV = std::vector(codePtr, codePtr + glslang_program_SPIRV_get_size(program));\n\n  return Result();\n}\n\nvoid finalizeCompiler() noexcept {\n  glslang_finalize_process();\n}\n\n} // namespace igl::glslang\n"
  },
  {
    "path": "src/igl/glslang/GlslCompiler.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <glslang/Include/glslang_c_interface.h>\n#include <vector>\n#include <igl/Common.h>\n#include <igl/Shader.h>\n\nnamespace igl::glslang {\n\nvoid initializeCompiler() noexcept;\n\n/// Compiles the given shader code into SPIR-V.\n[[nodiscard]] Result compileShader(ShaderStage stage,\n                                   const char* code,\n                                   std::vector<uint32_t>& outSPIRV,\n                                   const glslang_resource_t* glslLangResource) noexcept;\n\nvoid finalizeCompiler() noexcept;\n\n} // namespace igl::glslang\n"
  },
  {
    "path": "src/igl/glslang/GlslangHelpers.c",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/glslang/GlslangHelpers.h>\n\nvoid glslangGetDefaultInput(const char* shaderCode,\n                            glslang_stage_t stage,\n                            const glslang_resource_t* resource,\n                            glslang_input_t* out) {\n  const glslang_input_t defaultInput = {\n      .language = GLSLANG_SOURCE_GLSL,\n      .stage = stage,\n      .client = GLSLANG_CLIENT_VULKAN,\n      .client_version = GLSLANG_TARGET_VULKAN_1_2,\n      .target_language = GLSLANG_TARGET_SPV,\n      .target_language_version = GLSLANG_TARGET_SPV_1_5,\n      .code = shaderCode,\n      .default_version = 100,\n      .default_profile = GLSLANG_NO_PROFILE,\n      .force_default_version_and_profile = false,\n      .forward_compatible = false,\n      .messages = GLSLANG_MSG_DEFAULT_BIT,\n      .resource = resource,\n  };\n  if (out) {\n    *out = defaultInput;\n  }\n}\n\nvoid glslangGetDefaultResource(glslang_resource_t* resource) {\n  const glslang_resource_t defaultResource = {.max_lights = 32,\n                                              .max_clip_planes = 6,\n                                              .max_texture_units = 32,\n                                              .max_texture_coords = 32,\n                                              .max_vertex_attribs = 64,\n                                              .max_vertex_uniform_components = 4096,\n                                              .max_varying_floats = 64,\n                                              .max_vertex_texture_image_units = 32,\n                                              .max_combined_texture_image_units = 80,\n                                              .max_texture_image_units = 32,\n                                              .max_fragment_uniform_components = 4096,\n                                              .max_draw_buffers = 32,\n                                              .max_vertex_uniform_vectors = 128,\n                                              .max_varying_vectors = 8,\n                                              .max_fragment_uniform_vectors = 16,\n                                              .max_vertex_output_vectors = 16,\n                                              .max_fragment_input_vectors = 15,\n                                              .min_program_texel_offset = -8,\n                                              .max_program_texel_offset = 7,\n                                              .max_clip_distances = 8,\n                                              .max_compute_work_group_count_x = 65535,\n                                              .max_compute_work_group_count_y = 65535,\n                                              .max_compute_work_group_count_z = 65535,\n                                              .max_compute_work_group_size_x = 1024,\n                                              .max_compute_work_group_size_y = 1024,\n                                              .max_compute_work_group_size_z = 64,\n                                              .max_compute_uniform_components = 1024,\n                                              .max_compute_texture_image_units = 16,\n                                              .max_compute_image_uniforms = 8,\n                                              .max_compute_atomic_counters = 8,\n                                              .max_compute_atomic_counter_buffers = 1,\n                                              .max_varying_components = 60,\n                                              .max_vertex_output_components = 64,\n                                              .max_geometry_input_components = 64,\n                                              .max_geometry_output_components = 128,\n                                              .max_fragment_input_components = 128,\n                                              .max_image_units = 8,\n                                              .max_combined_image_units_and_fragment_outputs = 8,\n                                              .max_combined_shader_output_resources = 8,\n                                              .max_image_samples = 0,\n                                              .max_vertex_image_uniforms = 0,\n                                              .max_tess_control_image_uniforms = 0,\n                                              .max_tess_evaluation_image_uniforms = 0,\n                                              .max_geometry_image_uniforms = 0,\n                                              .max_fragment_image_uniforms = 8,\n                                              .max_combined_image_uniforms = 8,\n                                              .max_geometry_texture_image_units = 16,\n                                              .max_geometry_output_vertices = 256,\n                                              .max_geometry_total_output_components = 1024,\n                                              .max_geometry_uniform_components = 1024,\n                                              .max_geometry_varying_components = 64,\n                                              .max_tess_control_input_components = 128,\n                                              .max_tess_control_output_components = 128,\n                                              .max_tess_control_texture_image_units = 16,\n                                              .max_tess_control_uniform_components = 1024,\n                                              .max_tess_control_total_output_components = 4096,\n                                              .max_tess_evaluation_input_components = 128,\n                                              .max_tess_evaluation_output_components = 128,\n                                              .max_tess_evaluation_texture_image_units = 16,\n                                              .max_tess_evaluation_uniform_components = 1024,\n                                              .max_tess_patch_components = 120,\n                                              .max_patch_vertices = 32,\n                                              .max_tess_gen_level = 64,\n                                              .max_viewports = 16,\n                                              .max_vertex_atomic_counters = 0,\n                                              .max_tess_control_atomic_counters = 0,\n                                              .max_tess_evaluation_atomic_counters = 0,\n                                              .max_geometry_atomic_counters = 0,\n                                              .max_fragment_atomic_counters = 8,\n                                              .max_combined_atomic_counters = 8,\n                                              .max_atomic_counter_bindings = 1,\n                                              .max_vertex_atomic_counter_buffers = 0,\n                                              .max_tess_control_atomic_counter_buffers = 0,\n                                              .max_tess_evaluation_atomic_counter_buffers = 0,\n                                              .max_geometry_atomic_counter_buffers = 0,\n                                              .max_fragment_atomic_counter_buffers = 1,\n                                              .max_combined_atomic_counter_buffers = 1,\n                                              .max_atomic_counter_buffer_size = 16384,\n                                              .max_transform_feedback_buffers = 4,\n                                              .max_transform_feedback_interleaved_components = 64,\n                                              .max_cull_distances = 8,\n                                              .max_combined_clip_and_cull_distances = 8,\n                                              .max_samples = 4,\n                                              .max_mesh_output_vertices_nv = 256,\n                                              .max_mesh_output_primitives_nv = 512,\n                                              .max_mesh_work_group_size_x_nv = 32,\n                                              .max_mesh_work_group_size_y_nv = 1,\n                                              .max_mesh_work_group_size_z_nv = 1,\n                                              .max_task_work_group_size_x_nv = 32,\n                                              .max_task_work_group_size_y_nv = 1,\n                                              .max_task_work_group_size_z_nv = 1,\n                                              .max_mesh_view_count_nv = 4,\n                                              .maxDualSourceDrawBuffersEXT = 1,\n                                              .limits = {\n                                                  .non_inductive_for_loops = true,\n                                                  .while_loops = true,\n                                                  .do_while_loops = true,\n                                                  .general_uniform_indexing = true,\n                                                  .general_attribute_matrix_vector_indexing = true,\n                                                  .general_varying_indexing = true,\n                                                  .general_sampler_indexing = true,\n                                                  .general_variable_indexing = true,\n                                                  .general_constant_matrix_vector_indexing = true,\n                                              }};\n  if (resource) {\n    *resource = defaultResource;\n  }\n}\n"
  },
  {
    "path": "src/igl/glslang/GlslangHelpers.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <glslang/Include/glslang_c_interface.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\nvoid glslangGetDefaultResource(glslang_resource_t* resource);\nvoid glslangGetDefaultInput(const char* shaderCode,\n                            glslang_stage_t stage,\n                            const glslang_resource_t* resource,\n                            glslang_input_t* out);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "src/igl/metal/Buffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Metal/MTLBuffer.h> // @donotremove\n#import <Metal/MTLTypes.h>\n#include <igl/Buffer.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::metal {\n\nclass BufferSynchronizationManager;\n\nclass Buffer : public IBuffer {\n public:\n  Buffer(id<MTLBuffer> value,\n         MTLResourceOptions options,\n         BufferDesc::BufferAPIHint requestedApiHints,\n         BufferDesc::BufferAPIHint acceptedApiHints,\n         BufferDesc::BufferType bufferType);\n\n  Result upload(const void* data, const BufferRange& range) override;\n\n  void* map(const BufferRange& range, Result* outResult) override;\n  void unmap() override;\n\n  [[nodiscard]] BufferDesc::BufferAPIHint requestedApiHints() const noexcept override;\n  [[nodiscard]] BufferDesc::BufferAPIHint acceptedApiHints() const noexcept override;\n  [[nodiscard]] ResourceStorage storage() const noexcept override;\n\n  [[nodiscard]] size_t getSizeInBytes() const override;\n  [[nodiscard]] uint64_t gpuAddress(size_t offset) const override;\n\n  [[nodiscard]] BufferDesc::BufferType getBufferType() const override {\n    return bufferType_;\n  }\n\n  IGL_INLINE virtual id<MTLBuffer> get() {\n    return mtlBuffers_[0];\n  }\n\n protected:\n  MTLResourceOptions resourceOptions_;\n  std::vector<id<MTLBuffer>> mtlBuffers_;\n  BufferDesc::BufferAPIHint requestedApiHints_;\n  BufferDesc::BufferAPIHint acceptedApiHints_;\n  BufferDesc::BufferType bufferType_;\n};\n\n// Manages a ring of buffers.\n// At a given time frame, all upload, map and get methods operate on the buffer\n// indexed by the current inFlight buffer index\nclass RingBuffer final : public Buffer {\n public:\n  RingBuffer(std::vector<id<MTLBuffer>> ringBuffers,\n             MTLResourceOptions options,\n             std::shared_ptr<const BufferSynchronizationManager> syncManager,\n             BufferDesc::BufferAPIHint requestedApiHints,\n             BufferDesc::BufferType bufferType);\n\n  Result upload(const void* data, const BufferRange& range) override;\n\n  void* map(const BufferRange& range, Result* outResult) override;\n  void unmap() override;\n\n  IGL_INLINE id<MTLBuffer> get() override;\n\n private:\n  int lastUpdatedBufferIdx_ = -1;\n  std::shared_ptr<const BufferSynchronizationManager> syncManager_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Buffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/Buffer.h>\n\n#include <igl/IGLSafeC.h>\n#include <igl/metal/BufferSynchronizationManager.h>\n\nnamespace {\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nigl::Result upload(const std::vector<id<MTLBuffer>>& buffers,\n                   size_t bufferIdx,\n                   const void* data,\n                   const igl::BufferRange& range,\n                   MTLResourceOptions resourceOptions,\n                   igl::BufferDesc::BufferAPIHint acceptedApiHints) {\n  IGL_DEBUG_ASSERT(bufferIdx < buffers.size());\n  const auto& buffer = buffers[bufferIdx];\n  auto length = [buffer length];\n  if (!IGL_DEBUG_VERIFY(range.offset + range.size <= length)) {\n    return igl::Result(igl::Result::Code::ArgumentOutOfRange);\n  }\n\n  if (data == nullptr) {\n    if (!(acceptedApiHints & igl::BufferDesc::BufferAPIHintBits::NoCopy)) {\n      return igl::Result(igl::Result::Code::ArgumentInvalid);\n    }\n  } else {\n    void* contents = [buffer contents];\n    checked_memcpy_offset(contents, length, range.offset, data, range.size);\n  }\n\n#if IGL_PLATFORM_MACOSX\n  if ((resourceOptions & MTLResourceStorageModeMask) == MTLResourceStorageModeManaged) {\n    [buffer didModifyRange:NSMakeRange(range.offset, range.size)];\n  }\n#else\n  (void)resourceOptions; // silence unused member warning\n#endif\n  return igl::Result();\n}\n\nvoid* map(const std::vector<id<MTLBuffer>>& buffers,\n          size_t bufferIdx,\n          const igl::BufferRange& range,\n          igl::Result* outResult,\n          MTLResourceOptions resourceOptions) {\n  if ((resourceOptions & MTLResourceStorageModeMask) == MTLResourceStorageModePrivate) {\n    igl::Result::setResult(outResult,\n                           igl::Result::Code::InvalidOperation,\n                           \"Cannot map() buffer with private storage mode\");\n    return nullptr;\n  }\n\n  IGL_DEBUG_ASSERT(bufferIdx < buffers.size());\n  const auto& buffer = buffers[bufferIdx];\n  if ([buffer length] < (range.size + range.offset)) {\n    igl::Result::setResult(outResult,\n                           igl::Result::Code::ArgumentOutOfRange,\n                           \"map() size + offset must be less than buffer size\");\n    return nullptr;\n  }\n\n  igl::Result::setOk(outResult);\n  return static_cast<uint8_t*>(buffer.contents) + range.offset;\n}\n\nigl::Result copyFromPreviousBufferInstance(std::vector<id<MTLBuffer>>& buffers,\n                                           size_t bufferIdx,\n                                           MTLResourceOptions resourceOptions,\n                                           igl::BufferDesc::BufferAPIHint acceptedApiHints) {\n  if (buffers.size() <= 1) {\n    return igl::Result();\n  }\n\n  const size_t prevIdx = bufferIdx == 0 ? buffers.size() - 1 : bufferIdx - 1;\n  IGL_DEBUG_ASSERT([buffers[bufferIdx] length] == [buffers[prevIdx] length]);\n\n  auto length = [buffers[bufferIdx] length];\n  auto* srcContents = [buffers[prevIdx] contents];\n  return ::upload(buffers,\n                  bufferIdx,\n                  srcContents,\n                  igl::BufferRange(length, 0),\n                  resourceOptions,\n                  acceptedApiHints);\n}\n} // namespace\n\nnamespace igl::metal {\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nBuffer::Buffer(id<MTLBuffer> value,\n               MTLResourceOptions options,\n               BufferDesc::BufferAPIHint requestedApiHints,\n               BufferDesc::BufferAPIHint acceptedApiHints,\n               BufferDesc::BufferType bufferType) :\n  resourceOptions_(options),\n  requestedApiHints_(requestedApiHints),\n  acceptedApiHints_(acceptedApiHints),\n  bufferType_(bufferType) {\n  mtlBuffers_.push_back(value);\n}\n\nResult Buffer::upload(const void* data, const BufferRange& range) {\n  return ::upload(mtlBuffers_, 0, data, range, resourceOptions_, acceptedApiHints_);\n}\n\nvoid* Buffer::map(const BufferRange& range, Result* outResult) {\n  return ::map(mtlBuffers_, 0, range, outResult, resourceOptions_);\n}\n\nvoid Buffer::unmap() {}\n\nBufferDesc::BufferAPIHint Buffer::requestedApiHints() const noexcept {\n  return requestedApiHints_;\n}\n\nBufferDesc::BufferAPIHint Buffer::acceptedApiHints() const noexcept {\n  return acceptedApiHints_;\n}\n\nResourceStorage Buffer::storage() const noexcept {\n#if IGL_PLATFORM_MACOSX\n  if ((resourceOptions_ & MTLResourceStorageModeMask) == MTLResourceStorageModeManaged) {\n    return ResourceStorage::Managed;\n  }\n#endif // IGL_PLATFORM_MACOSX\n  if ((resourceOptions_ & MTLResourceStorageModeMask) == MTLResourceStorageModePrivate) {\n    return ResourceStorage::Private;\n  }\n  if ((resourceOptions_ & MTLResourceStorageModeMask) == MTLResourceStorageModeShared) {\n    return ResourceStorage::Shared;\n  }\n  if ((resourceOptions_ & MTLResourceStorageModeMask) == MTLResourceStorageModeMemoryless) {\n    return ResourceStorage::Memoryless;\n  }\n  return ResourceStorage::Invalid;\n}\n\nsize_t Buffer::getSizeInBytes() const {\n  return [mtlBuffers_[0] length];\n}\n\nuint64_t Buffer::gpuAddress(size_t /*offset*/) const {\n  // TODO: implement via gpuResourceID\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  return 0;\n}\n\nRingBuffer::RingBuffer(std::vector<id<MTLBuffer>> ringBuffers,\n                       MTLResourceOptions options,\n                       std::shared_ptr<const BufferSynchronizationManager> syncManager,\n                       BufferDesc::BufferAPIHint requestedApiHints,\n                       BufferDesc::BufferType bufferType) :\n  Buffer(nil, options, requestedApiHints, BufferDesc::BufferAPIHintBits::Ring, bufferType),\n  syncManager_(std::move(syncManager)) {\n  mtlBuffers_ = std::move(ringBuffers);\n}\n\n/* In some scenarios, only part of the buffer could be upload, before the buffer is submitted;\n * To handle this case, we copy the previous instance of the buffer to this one\n */\nResult RingBuffer::upload(const void* data, const BufferRange& range) {\n  auto bufferIdx = syncManager_->getCurrentInFlightBufferIndex();\n\n  if (lastUpdatedBufferIdx_ != bufferIdx) {\n    auto length = [mtlBuffers_[bufferIdx] length];\n    if (range.offset != 0 || range.size != length) {\n      // partial upload\n      // Copy from the previous buffer first\n      auto result = copyFromPreviousBufferInstance(\n          mtlBuffers_, bufferIdx, resourceOptions_, acceptedApiHints_);\n      if (!result.isOk()) {\n        return result;\n      }\n    }\n  }\n  auto result = ::upload(mtlBuffers_, bufferIdx, data, range, resourceOptions_, acceptedApiHints_);\n  if (result.isOk()) {\n    lastUpdatedBufferIdx_ = bufferIdx;\n  }\n  return result;\n}\n\nvoid* RingBuffer::map(const BufferRange& /* unused */, Result* /* unused */) {\n  IGL_DEBUG_ABORT(\"map() operation not supported for RingBuffer\");\n  return nullptr;\n}\n\nvoid RingBuffer::unmap() {\n  IGL_DEBUG_ABORT(\"unmap() operation not supported for RingBuffer\");\n}\n\nid<MTLBuffer> RingBuffer::get() {\n  auto bufferIdx = syncManager_->getCurrentInFlightBufferIndex();\n  IGL_DEBUG_ASSERT(bufferIdx < mtlBuffers_.size());\n  if (bufferIdx != lastUpdatedBufferIdx_) {\n    // client hasn't updated the buffer at this idx; Update from the previous buffer instance\n    auto result =\n        copyFromPreviousBufferInstance(mtlBuffers_, bufferIdx, resourceOptions_, acceptedApiHints_);\n    if (!result.isOk()) {\n      IGL_DEBUG_ABORT(\"Failed to copy buffer\");\n      return nullptr;\n    }\n\n    lastUpdatedBufferIdx_ = bufferIdx;\n  }\n  return mtlBuffers_[bufferIdx];\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/BufferSynchronizationManager.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <dispatch/dispatch.h>\n#include <igl/Buffer.h>\n\nnamespace igl::metal {\n\nclass BufferSynchronizationManager {\n public:\n  explicit BufferSynchronizationManager(size_t maxInFlightBuffers);\n\n  /**\n   * @brief Returns the current inFlight buffer index\n   * @return the current inFlight buffer index\n   */\n  [[nodiscard]] size_t getCurrentInFlightBufferIndex() const noexcept {\n    return currentInFlightBufferIndex_;\n  }\n\n  /**\n   * @brief Returns the max inFlight buffers that are supported by the backend being used\n   * InFlight buffers are buffers that can be accessed by GPU aynchronously at any moment.\n   * To avoid CPU/GPU synchronization issues (where for ex. CPU could be updating a buffer with data\n   * for frame N+1, while GPU is reading the same buffer for rendering frame N), certain backends\n   * (like Metal) will support more than one in flight buffers.\n   * @return max inFlight buffers\n   */\n  [[nodiscard]] size_t getMaxInflightBuffers() const noexcept {\n    return maxInFlightBuffers_;\n  }\n\n  void manageEndOfFrameSync();\n\n  // Upon completion of this command buffer's execution, trigger buffer synchronization.\n  void markCommandBufferAsEndOfFrame(const igl::ICommandBuffer& commandBuffer);\n\n private:\n  size_t maxInFlightBuffers_ = 1;\n  size_t currentInFlightBufferIndex_ = 0;\n  dispatch_semaphore_t frameBoundarySemaphore_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/BufferSynchronizationManager.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/BufferSynchronizationManager.h>\n\n#import <Metal/Metal.h>\n#include <igl/metal/CommandBuffer.h>\n\nnamespace igl::metal {\n\nBufferSynchronizationManager::BufferSynchronizationManager(size_t maxInFlightBuffers) :\n  maxInFlightBuffers_(maxInFlightBuffers) {\n  // To manage the pool of buffers, we would normally initialize the semaphore with the pool size\n  // (i.e. 'maxInFlightBuffers'). However, semaphore crashes at destruction time, if its current\n  // value is less than its initial value. This seems to Apple's libdispatch's idiosyncrasy.\n  // https://opensource.apple.com/source/libdispatch/libdispatch-187.7/src/semaphore.c\n\n  // To workaround this, we init semaphore to 0 and then call dispatch_semaphore_signal() to\n  // increase the value up to the size of buffer pool\n  frameBoundarySemaphore_ = dispatch_semaphore_create(0);\n  for (size_t i = 0; i < maxInFlightBuffers_; i++) {\n    dispatch_semaphore_signal(frameBoundarySemaphore_);\n  }\n}\n\nvoid BufferSynchronizationManager::markCommandBufferAsEndOfFrame(\n    const igl::ICommandBuffer& commandBuffer) {\n  // Set a completion handler for this cmd buffer\n  __weak dispatch_semaphore_t semaphore = frameBoundarySemaphore_;\n  [static_cast<const CommandBuffer&>(commandBuffer).get()\n      addCompletedHandler:^(id<MTLCommandBuffer> mtlCommandBuffer) {\n        // GPU work is complete\n        // Signal the semaphore to start the CPU work\n        // Increment the counting semaphore\n        if (semaphore != nullptr) {\n          dispatch_semaphore_signal(semaphore);\n        }\n      }];\n}\n\nvoid BufferSynchronizationManager::manageEndOfFrameSync() {\n  // Decrement the counting semaphore and\n  // if the resulting value is less than zero, block the current thread from executing further\n  // until the semaphore's value is >= 0\n  dispatch_semaphore_wait(frameBoundarySemaphore_, DISPATCH_TIME_FOREVER);\n\n  // increment currentInFlightBufferIndex\n  currentInFlightBufferIndex_ = (currentInFlightBufferIndex_ + 1) % maxInFlightBuffers_;\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\n# CMake 3.19 is the first version to support Apple Silicon.\n\nproject(IGLMetal OBJC OBJCXX CXX C)\n\nfile(GLOB SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.mm)\nfile(GLOB HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)\n\nif(IOS)\n  list(APPEND SRC_FILES ios/Device.mm ios/Framebuffer.mm)\n  list(APPEND HEADER_FILES ios/Device.h ios/Framebuffer.h)\nelse()\n  list(APPEND SRC_FILES macos/Device.mm macos/Framebuffer.mm)\n  list(APPEND HEADER_FILES macos/Device.h macos/Framebuffer.h)\nendif()\n\nadd_library(IGLMetal ${SRC_FILES} ${HEADER_FILES})\n\ntarget_link_libraries(IGLMetal PRIVATE IGLLibrary \"-framework Metal\" \"-framework QuartzCore\")\n\nigl_set_cxxstd(IGLMetal 20)\nigl_set_folder(IGLMetal \"IGL\")\n\nset(OBJC_EXTRA_FLAGS -fobjc-arc -fobjc-weak)\nset(OBJC_DISABLE_WARNINGS -Wno-objc-designated-initializers -Wno-objc-missing-super-calls -Wno-objc-property-no-attribute)\n\nif(CMAKE_GENERATOR MATCHES \"Xcode\")\n  set_target_properties(IGLMetal PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_WEAK YES)\n  set_target_properties(IGLMetal PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)\nelse()\n  target_compile_options(IGLMetal PRIVATE $<$<COMPILE_LANGUAGE:OBJC>:${OBJC_EXTRA_FLAGS}>)\n  target_compile_options(IGLMetal PRIVATE $<$<COMPILE_LANGUAGE:OBJCXX>:${OBJC_EXTRA_FLAGS}>)\nendif()\n\ntarget_compile_options(IGLMetal PRIVATE $<$<COMPILE_LANGUAGE:OBJC>:${OBJC_DISABLE_WARNINGS}>)\ntarget_compile_options(IGLMetal PRIVATE $<$<COMPILE_LANGUAGE:OBJCXX>:${OBJC_DISABLE_WARNINGS}>)\ntarget_compile_options(IGLMetal PRIVATE \"-Wno-deprecated-declarations\")\n"
  },
  {
    "path": "src/igl/metal/ColorSpace.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n#import <CoreGraphics/CGColorSpace.h>\n#include <igl/ColorSpace.h>\n\nnamespace igl::metal {\nCGColorSpaceRef colorSpaceToCGColorSpace(ColorSpace colorSpace);\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/ColorSpace.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/ColorSpace.h>\n\nnamespace igl::metal {\nCGColorSpaceRef colorSpaceToCGColorSpace(ColorSpace colorSpace) {\n  switch (colorSpace) {\n  case ColorSpace::SRGB_LINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceLinearSRGB);\n  case ColorSpace::SRGB_NONLINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceSRGB);\n  case ColorSpace::DISPLAY_P3_NONLINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3);\n  case ColorSpace::EXTENDED_SRGB_LINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceExtendedLinearSRGB);\n  case ColorSpace::DCI_P3_NONLINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceDCIP3);\n  case ColorSpace::BT709_LINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceLinearSRGB);\n  case ColorSpace::BT709_NONLINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceITUR_709);\n  case ColorSpace::ADOBERGB_LINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceAdobeRGB1998);\n  case ColorSpace::ADOBERGB_NONLINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceAdobeRGB1998);\n  case ColorSpace::PASS_THROUGH:\n    return nil;\n  case ColorSpace::EXTENDED_SRGB_NONLINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceExtendedSRGB);\n  case ColorSpace::BT2020_NONLINEAR:\n    return CGColorSpaceCreateWithName(kCGColorSpaceITUR_2020);\n  case ColorSpace::DISPLAY_P3_LINEAR:\n    if (@available(macOS 12.0, iOS 15.0, *)) {\n      return CGColorSpaceCreateWithName(kCGColorSpaceLinearDisplayP3);\n    }\n    [[fallthrough]];\n  case ColorSpace::BT2020_LINEAR:\n    if (@available(macOS 12.0, iOS 15.0, *)) {\n      return CGColorSpaceCreateWithName(kCGColorSpaceLinearITUR_2020);\n    }\n    [[fallthrough]];\n  case ColorSpace::HDR10_ST2084:\n  case ColorSpace::DOLBYVISION:\n  case ColorSpace::HDR10_HLG:\n  case ColorSpace::DISPLAY_NATIVE_AMD:\n  case ColorSpace::BT601_NONLINEAR:\n  case ColorSpace::BT2100_HLG_NONLINEAR:\n  case ColorSpace::BT2100_PQ_NONLINEAR:\n  default:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return CGColorSpaceCreateWithName(kCGColorSpaceSRGB);\n  }\n  IGL_UNREACHABLE_RETURN(CGColorSpaceCreateWithName(kCGColorSpaceSRGB));\n}\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/CommandBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandBuffer.h>\n\n@protocol MTLCommandBuffer;\n\nnamespace igl::metal {\n\nclass Device;\n\nclass CommandBuffer final : public ICommandBuffer,\n                            public std::enable_shared_from_this<CommandBuffer> {\n public:\n  CommandBuffer(Device& device, id<MTLCommandBuffer> value, CommandBufferDesc desc);\n  ~CommandBuffer() override = default;\n\n  std::unique_ptr<IComputeCommandEncoder> createComputeCommandEncoder() override;\n\n  std::unique_ptr<IRenderCommandEncoder> createRenderCommandEncoder(\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      const Dependencies& dependencies,\n      Result* outResult) override;\n\n  void present(const std::shared_ptr<ITexture>& surface) const override;\n\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n\n  void popDebugGroupLabel() const override;\n\n  void copyBuffer(IBuffer& src,\n                  IBuffer& dst,\n                  uint64_t srcOffset,\n                  uint64_t dstOffset,\n                  uint64_t size) override;\n  void copyTextureToBuffer(ITexture& src,\n                           IBuffer& dst,\n                           uint64_t dstOffset,\n                           uint32_t level,\n                           uint32_t layer) override;\n\n  void waitUntilScheduled() override;\n\n  void waitUntilCompleted() override;\n\n  IGL_INLINE id<MTLCommandBuffer> get() const {\n    return value_;\n  }\n\n  Device& device() {\n    return device_;\n  }\n\n private:\n  Device& device_;\n  id<MTLCommandBuffer> value_;\n\n  friend class CommandQueue;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/CommandBuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/CommandBuffer.h>\n\n#import <Foundation/NSString.h>\n#import <Metal/Metal.h>\n#include <igl/metal/Buffer.h>\n#include <igl/metal/ComputeCommandEncoder.h>\n#include <igl/metal/RenderCommandEncoder.h>\n#include <igl/metal/Texture.h>\nnamespace igl::metal {\n\nCommandBuffer::CommandBuffer(Device& device, id<MTLCommandBuffer> value, CommandBufferDesc desc) :\n  ICommandBuffer(std::move(desc)), device_(device), value_(value) {}\n\nstd::unique_ptr<IComputeCommandEncoder> CommandBuffer::createComputeCommandEncoder() {\n  return std::make_unique<ComputeCommandEncoder>(value_);\n}\n\nstd::unique_ptr<IRenderCommandEncoder> CommandBuffer::createRenderCommandEncoder(\n    const RenderPassDesc& renderPass,\n    const std::shared_ptr<IFramebuffer>& framebuffer,\n    const Dependencies& /*dependencies*/,\n    Result* outResult) {\n  return RenderCommandEncoder::create(shared_from_this(), renderPass, framebuffer, outResult);\n}\n\nvoid CommandBuffer::present(const std::shared_ptr<ITexture>& surface) const {\n  IGL_DEBUG_ASSERT(surface);\n  if (!surface) {\n    return;\n  }\n  const auto drawable = static_cast<Texture&>(*surface).getDrawable();\n  if (drawable != nullptr) {\n    [value_ presentDrawable:drawable];\n  }\n}\n\nvoid CommandBuffer::pushDebugGroupLabel(const char* label, const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  [value_ pushDebugGroup:[NSString stringWithUTF8String:label] ?: @\"\"];\n}\n\nvoid CommandBuffer::popDebugGroupLabel() const {\n  [value_ popDebugGroup];\n}\n\nvoid CommandBuffer::copyBuffer(IBuffer& src,\n                               IBuffer& dst,\n                               uint64_t srcOffset,\n                               uint64_t dstOffset,\n                               uint64_t size) {\n  auto srcBuffer = static_cast<Buffer&>(src).get();\n  auto dstBuffer = static_cast<Buffer&>(dst).get();\n\n  auto blitCommandEncoder = [value_ blitCommandEncoder];\n  [blitCommandEncoder copyFromBuffer:srcBuffer\n                        sourceOffset:srcOffset\n                            toBuffer:dstBuffer\n                   destinationOffset:dstOffset\n                                size:size];\n  [blitCommandEncoder endEncoding];\n}\n\nvoid CommandBuffer::copyTextureToBuffer(ITexture& src,\n                                        IBuffer& dst,\n                                        uint64_t dstOffset,\n                                        uint32_t level,\n                                        uint32_t layer) {\n  (void)src;\n  (void)dst;\n  (void)dstOffset;\n  (void)level;\n  (void)layer;\n\n  // TODO:\n  // https://developer.apple.com/documentation/metal/mtlblitcommandencoder#Copying-Texture-Data-to-a-Buffer\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid CommandBuffer::waitUntilScheduled() {\n  [value_ waitUntilScheduled];\n}\n\nvoid CommandBuffer::waitUntilCompleted() {\n  [value_ waitUntilCompleted];\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/CommandQueue.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Metal/MTLCommandQueue.h>\n#include <igl/CommandQueue.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::metal {\n\nclass BufferSynchronizationManager;\n\nclass CommandQueue final : public ICommandQueue {\n public:\n  CommandQueue(Device& device,\n               id<MTLCommandQueue> value,\n               const std::shared_ptr<BufferSynchronizationManager>& syncManager,\n               DeviceStatistics& deviceStatistics) noexcept;\n  std::shared_ptr<ICommandBuffer> createCommandBuffer(const CommandBufferDesc& desc,\n                                                      Result* outResult) override;\n  SubmitHandle submit(const igl::ICommandBuffer& commandBuffer, bool endOfFrame = false) override;\n\n  IGL_INLINE id<MTLCommandQueue> get() const {\n    return value_;\n  }\n\n  Device& getDevice() {\n    return device_;\n  }\n\n private:\n  void startCapture(id<MTLCommandQueue> queue);\n  void stopCapture();\n\n  id<MTLCommandQueue> value_;\n  std::shared_ptr<BufferSynchronizationManager> bufferSyncManager_;\n  DeviceStatistics& deviceStatistics_;\n  Device& device_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/CommandQueue.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/CommandQueue.h>\n\n#include <Foundation/Foundation.h>\n#include <igl/IGLFolly.h>\n#include <igl/metal/BufferSynchronizationManager.h>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/DeviceStatistics.h>\n#include <igl/metal/Timer.h>\n#include <igl/metal/TimestampQueries.h>\n\n// @brief Number of command buffers to be automatically captured for GPU debugging. Zero (0)\n// means no command buffers will be recorded and the capture code is deactivated.\nconstexpr uint32_t kIGLMetalNumberCommandBuffersToCapture = 0;\n// @brief Beginning command buffer to be captured\nconstexpr uint32_t kIGLMetalBeginCommandBufferToCapture = 0;\n// @brief Ending command buffer. Only command buffers within [kIGLMetalBeginCommandBufferToCapture,\n// kIGLMetalEndCommandBufferToCapture) will be captured.\nconstexpr uint32_t kIGLMetalEndCommandBufferToCapture =\n    kIGLMetalBeginCommandBufferToCapture + kIGLMetalNumberCommandBuffersToCapture;\n\nnamespace igl::metal {\n\nCommandQueue::CommandQueue(Device& device,\n                           id<MTLCommandQueue> value,\n                           const std::shared_ptr<BufferSynchronizationManager>& syncManager,\n                           DeviceStatistics& deviceStatistics) noexcept :\n  value_(value),\n  bufferSyncManager_(syncManager),\n  deviceStatistics_(deviceStatistics),\n  device_(device) {\n  if constexpr (kIGLMetalNumberCommandBuffersToCapture > 0 &&\n                kIGLMetalBeginCommandBufferToCapture == 0) {\n    startCapture(value_);\n  }\n}\n\nstd::shared_ptr<ICommandBuffer> CommandQueue::createCommandBuffer(const CommandBufferDesc& desc,\n                                                                  Result* outResult) {\n  id<MTLCommandBuffer> metalObject = [value_ commandBuffer];\n  metalObject.label = [NSString stringWithUTF8String:desc.debugName.c_str()];\n  auto resource = std::make_shared<CommandBuffer>(device_, metalObject, desc);\n  Result::setOk(outResult);\n  return resource;\n}\n\nSubmitHandle CommandQueue::submit(const igl::ICommandBuffer& commandBuffer, bool endOfFrame) {\n  incrementDrawCount(commandBuffer.getCurrentDrawCount());\n  deviceStatistics_.incrementDrawCount(commandBuffer.getCurrentDrawCount());\n\n  if (endOfFrame) {\n    bufferSyncManager_->markCommandBufferAsEndOfFrame(commandBuffer);\n  }\n\n  const auto& metalCommandBuffer = static_cast<const CommandBuffer&>(commandBuffer);\n  std::shared_ptr<ITimer> timer = metalCommandBuffer.desc.timer;\n  if (timer) {\n    [metalCommandBuffer.get() addCompletedHandler:^(id<MTLCommandBuffer> cb) {\n      CFTimeInterval gpuDuration = cb.GPUEndTime - cb.GPUStartTime;\n      static_cast<Timer&>(*timer).executionTime_ =\n          static_cast<uint64_t>(gpuDuration * 1e9); // Convert to nanoseconds\n    }];\n  }\n\n  if (@available(macOS 10.15, iOS 14.0, *)) {\n    std::shared_ptr<ITimestampQueries> tsQueries = metalCommandBuffer.desc.timestampQueries;\n    if (tsQueries) {\n      auto metalTsQueries = std::static_pointer_cast<TimestampQueries>(tsQueries);\n      id<MTLCounterSampleBuffer> csb = metalTsQueries->sampleBuffer_;\n      uint64_t gen = metalTsQueries->generation_.load(std::memory_order_seq_cst);\n      [metalCommandBuffer.get() addCompletedHandler:^(id<MTLCommandBuffer> /*cb*/) {\n        @try {\n          if (metalTsQueries->generation_.load(std::memory_order_acquire) == gen) {\n            metalTsQueries->resolveTimestamps(csb);\n          }\n        } @catch (NSException*) {\n          // GPU reset or counter sample buffer invalidated -- silently skip.\n        }\n      }];\n    }\n  }\n\n  [metalCommandBuffer.get() commit];\n\n  if (endOfFrame) {\n    bufferSyncManager_->manageEndOfFrameSync();\n  }\n\n  if constexpr (kIGLMetalNumberCommandBuffersToCapture > 0) {\n    static uint32_t currentCommandBuffer = 0;\n    if ((currentCommandBuffer + 1) == kIGLMetalBeginCommandBufferToCapture) {\n      // Start capturing one command buffer earlier\n      startCapture(value_);\n      FOLLY_PUSH_WARNING\n      FOLLY_CLANG_DISABLE_WARNING(\"-Wtautological-compare\")\n      // Disable warning; local debug builds may set kIGLMetalEndCommandBufferToCapture to a\n      // non-zero value\n    } else if (currentCommandBuffer >= kIGLMetalEndCommandBufferToCapture) {\n      FOLLY_POP_WARNING\n      stopCapture();\n    }\n    ++currentCommandBuffer;\n  }\n\n  return SubmitHandle{};\n}\n\nvoid CommandQueue::startCapture(id<MTLCommandQueue> queue) {\n  MTLCaptureManager* captureManager = [MTLCaptureManager sharedCaptureManager];\n  MTLCaptureDescriptor* captureDescriptor = [[MTLCaptureDescriptor alloc] init];\n  captureDescriptor.captureObject = queue;\n\n  NSError* error;\n  if (![captureManager startCaptureWithDescriptor:captureDescriptor error:&error]) {\n    NSLog(@\"Failed to start capture, error %@\", error);\n  }\n}\n\nvoid CommandQueue::stopCapture() {\n  MTLCaptureManager* captureManager = [MTLCaptureManager sharedCaptureManager];\n  [captureManager stopCapture];\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/ComputeCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <Metal/Metal.h>\n#include <igl/ComputeCommandEncoder.h>\n\nnamespace igl::metal {\n\nclass ComputeCommandEncoder final : public IComputeCommandEncoder {\n public:\n  explicit ComputeCommandEncoder(id<MTLCommandBuffer> buffer);\n  ~ComputeCommandEncoder() override = default;\n\n  void endEncoding() override;\n\n  void bindComputePipelineState(\n      const std::shared_ptr<IComputePipelineState>& pipelineState) override;\n  // threadgroupCount is how many thread groups per grid in each dimension.\n  // threadgroupSize is how many threads are in each threadgroup\n  // total number of threads per grid is threadgroupCount * threadgroupSize\n  void dispatchThreadGroups(const Dimensions& threadgroupCount,\n                            const Dimensions& threadgroupSize,\n                            const Dependencies& dependencies) override;\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n  void insertDebugEventLabel(const char* label, const igl::Color& color) const override;\n  void popDebugGroupLabel() const override;\n  void bindUniform(const UniformDesc& uniformDesc, const void* data) override;\n  void bindTexture(uint32_t index, ITexture* texture) override;\n  void bindImageTexture(uint32_t index, ITexture* texture, TextureFormat format) override;\n  void bindSamplerState(uint32_t index, ISamplerState* samplerState) override;\n  void bindBuffer(uint32_t index, IBuffer* buffer, size_t offset, size_t bufferSize) override;\n  void bindBytes(uint32_t index, const void* data, size_t length) override;\n  void bindPushConstants(const void* data, size_t length, size_t offset) override;\n\n private:\n  id<MTLComputeCommandEncoder> encoder_ = nil;\n  // 4 KB - page aligned memory for metal managed resource\n  static constexpr uint32_t kMaxRecommendedBytes = 4 * 1024;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/ComputeCommandEncoder.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/ComputeCommandEncoder.h>\n\n#import <Foundation/Foundation.h>\n#import <Metal/Metal.h>\n#include <igl/metal/Buffer.h>\n#include <igl/metal/ComputePipelineState.h>\n#include <igl/metal/Framebuffer.h>\n#include <igl/metal/SamplerState.h>\n#include <igl/metal/Texture.h>\n\nnamespace igl::metal {\n\nComputeCommandEncoder::ComputeCommandEncoder(id<MTLCommandBuffer> buffer) {\n  id<MTLComputeCommandEncoder> computeEncoder = [buffer computeCommandEncoder];\n  encoder_ = computeEncoder;\n}\n\nvoid ComputeCommandEncoder::endEncoding() {\n  IGL_DEBUG_ASSERT(encoder_);\n  [encoder_ endEncoding];\n  encoder_ = nil;\n}\n\nvoid ComputeCommandEncoder::pushDebugGroupLabel(const char* label,\n                                                const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  [encoder_ pushDebugGroup:[NSString stringWithUTF8String:label] ?: @\"\"];\n}\n\nvoid ComputeCommandEncoder::insertDebugEventLabel(const char* label,\n                                                  const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  [encoder_ insertDebugSignpost:[NSString stringWithUTF8String:label] ?: @\"\"];\n}\n\nvoid ComputeCommandEncoder::popDebugGroupLabel() const {\n  IGL_DEBUG_ASSERT(encoder_);\n  [encoder_ popDebugGroup];\n}\n\nvoid ComputeCommandEncoder::bindComputePipelineState(\n    const std::shared_ptr<IComputePipelineState>& pipelineState) {\n  if (pipelineState) {\n    auto& iglPipelineState = static_cast<ComputePipelineState&>(*pipelineState);\n    [encoder_ setComputePipelineState:iglPipelineState.get()];\n  }\n}\n\nvoid ComputeCommandEncoder::dispatchThreadGroups(const Dimensions& threadgroupCount,\n                                                 const Dimensions& threadgroupSize,\n                                                 const Dependencies& /*dependencies*/) {\n  MTLSize tgc;\n  tgc.width = threadgroupCount.width;\n  tgc.height = threadgroupCount.height;\n  tgc.depth = threadgroupCount.depth;\n\n  MTLSize tgs;\n  tgs.width = threadgroupSize.width;\n  tgs.height = threadgroupSize.height;\n  tgs.depth = threadgroupSize.depth;\n  [encoder_ dispatchThreadgroups:tgc threadsPerThreadgroup:tgs];\n}\n\nvoid ComputeCommandEncoder::bindUniform(const UniformDesc& /*uniformDesc*/, const void* /*data*/) {\n  // DO NOT IMPLEMENT!\n  // This is only for backends that MUST use single uniforms in some situations.\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid ComputeCommandEncoder::bindTexture(uint32_t index, ITexture* texture) {\n  IGL_DEBUG_ASSERT(encoder_);\n\n  if (texture) {\n    auto& iglTexture = static_cast<Texture&>(*texture);\n    [encoder_ setTexture:iglTexture.get() atIndex:index];\n  }\n}\n\nvoid ComputeCommandEncoder::bindImageTexture(uint32_t index,\n                                             ITexture* texture,\n                                             TextureFormat format) {\n  (void)format;\n\n  this->bindTexture(index, texture);\n}\n\nvoid ComputeCommandEncoder::bindSamplerState(uint32_t index, ISamplerState* samplerState) {\n  IGL_DEBUG_ASSERT(encoder_);\n\n  if (samplerState) {\n    auto& iglSampler = static_cast<SamplerState&>(*samplerState);\n    [encoder_ setSamplerState:iglSampler.get() atIndex:index];\n  }\n}\n\nvoid ComputeCommandEncoder::bindBuffer(uint32_t index,\n                                       IBuffer* buffer,\n                                       size_t offset,\n                                       size_t bufferSize) {\n  (void)bufferSize;\n\n  IGL_DEBUG_ASSERT(encoder_);\n  if (buffer) {\n    auto& iglBuffer = static_cast<Buffer&>(*buffer);\n    [encoder_ setBuffer:iglBuffer.get() offset:offset atIndex:index];\n  }\n}\n\nvoid ComputeCommandEncoder::bindBytes(uint32_t index, const void* data, size_t length) {\n  IGL_DEBUG_ASSERT(encoder_);\n  if (data) {\n    if (length > kMaxRecommendedBytes) {\n      IGL_LOG_INFO(\n          \"It is recommended to use bindBuffer instead of bindBytes when binding > 4kb: %u\",\n          length);\n    }\n    [encoder_ setBytes:data length:length atIndex:index];\n  }\n}\n\nvoid ComputeCommandEncoder::bindPushConstants(const void* /*data*/,\n                                              size_t /*length*/,\n                                              size_t /*offset*/) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/ComputePipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <Metal/Metal.h>\n#include <memory>\n#include <igl/ComputePipelineState.h>\n#include <igl/Macros.h>\n\nnamespace igl::metal {\n\nclass ComputePipelineState final : public IComputePipelineState {\n  friend class Device;\n\n public:\n  explicit ComputePipelineState(id<MTLComputePipelineState> value,\n                                MTLComputePipelineReflection* reflection);\n  ~ComputePipelineState() override = default;\n\n  IGL_INLINE id<MTLComputePipelineState> get() {\n    return value_;\n  }\n\n  std::shared_ptr<IComputePipelineReflection> computePipelineReflection() override {\n    return nullptr;\n  }\n\n private:\n  id<MTLComputePipelineState> value_;\n  MTLComputePipelineReflection* reflection_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/ComputePipelineState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/ComputePipelineState.h>\n\nusing namespace igl;\n\nnamespace igl::metal {\n\nComputePipelineState::ComputePipelineState(id<MTLComputePipelineState> value,\n                                           MTLComputePipelineReflection* reflection) :\n  value_(value), reflection_(reflection) {}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/DepthStencilState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <Metal/MTLDepthStencil.h>\n#include <igl/DepthStencilState.h>\n\nnamespace igl::metal {\n\nclass DepthStencilState final : public IDepthStencilState {\n  friend class Device;\n\n public:\n  IGL_INLINE id<MTLDepthStencilState> get() const {\n    return value;\n  }\n  DepthStencilState(id<MTLDepthStencilState> value);\n  ~DepthStencilState() override = default;\n  static MTLCompareFunction convertCompareFunction(CompareFunction value);\n  static MTLStencilOperation convertStencilOperation(StencilOperation value);\n  static MTLStencilDescriptor* convertStencilDescriptor(const StencilStateDesc& desc);\n\n  id<MTLDepthStencilState> value;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/DepthStencilState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/DepthStencilState.h>\n\n#import <Foundation/Foundation.h>\n\nnamespace igl::metal {\n\nDepthStencilState::DepthStencilState(id<MTLDepthStencilState> value) : value(value) {}\n\nMTLCompareFunction DepthStencilState::convertCompareFunction(CompareFunction value) {\n  switch (value) {\n  case CompareFunction::Never:\n    return MTLCompareFunctionNever;\n  case CompareFunction::Less:\n    return MTLCompareFunctionLess;\n  case CompareFunction::Equal:\n    return MTLCompareFunctionEqual;\n  case CompareFunction::LessEqual:\n    return MTLCompareFunctionLessEqual;\n  case CompareFunction::Greater:\n    return MTLCompareFunctionGreater;\n  case CompareFunction::NotEqual:\n    return MTLCompareFunctionNotEqual;\n  case CompareFunction::GreaterEqual:\n    return MTLCompareFunctionGreaterEqual;\n  case CompareFunction::AlwaysPass:\n    return MTLCompareFunctionAlways;\n  }\n}\n\nMTLStencilOperation DepthStencilState::convertStencilOperation(StencilOperation value) {\n  switch (value) {\n  case StencilOperation::Keep:\n    return MTLStencilOperationKeep;\n  case StencilOperation::Zero:\n    return MTLStencilOperationZero;\n  case StencilOperation::Replace:\n    return MTLStencilOperationReplace;\n  case StencilOperation::IncrementClamp:\n    return MTLStencilOperationIncrementClamp;\n  case StencilOperation::DecrementClamp:\n    return MTLStencilOperationDecrementClamp;\n  case StencilOperation::Invert:\n    return MTLStencilOperationInvert;\n  case StencilOperation::IncrementWrap:\n    return MTLStencilOperationIncrementWrap;\n  case StencilOperation::DecrementWrap:\n    return MTLStencilOperationDecrementWrap;\n  }\n}\n\nMTLStencilDescriptor* DepthStencilState::convertStencilDescriptor(const StencilStateDesc& desc) {\n  MTLStencilDescriptor* metalDesc = [MTLStencilDescriptor new];\n  metalDesc.stencilCompareFunction = convertCompareFunction(desc.stencilCompareFunction);\n  metalDesc.stencilFailureOperation = convertStencilOperation(desc.stencilFailureOperation);\n  metalDesc.depthStencilPassOperation = convertStencilOperation(desc.depthStencilPassOperation);\n  metalDesc.depthFailureOperation = convertStencilOperation(desc.depthFailureOperation);\n  metalDesc.readMask = desc.readMask;\n  metalDesc.writeMask = desc.writeMask;\n  return metalDesc;\n}\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n@protocol MTLDevice;\n#import <Metal/MTLTypes.h>\n#include <igl/CommandEncoder.h>\n#include <igl/Device.h>\n#include <igl/metal/DeviceFeatureSet.h>\n#include <igl/metal/DeviceStatistics.h>\n#include <igl/metal/PlatformDevice.h>\n\nnamespace igl::metal {\n\nclass BufferSynchronizationManager;\n\nclass Device : public IDevice {\n  friend class HWDevice;\n\n public:\n  explicit Device(id<MTLDevice> IGL_NONNULL device);\n  ~Device() override;\n\n  [[nodiscard]] Holder<BindGroupTextureHandle> createBindGroup(\n      const BindGroupTextureDesc& desc,\n      const IRenderPipelineState* IGL_NULLABLE compatiblePipeline,\n      Result* IGL_NULLABLE outResult) override;\n  [[nodiscard]] Holder<BindGroupBufferHandle> createBindGroup(const BindGroupBufferDesc& desc,\n                                                              Result* IGL_NULLABLE\n                                                                  outResult) override;\n  void destroy(BindGroupTextureHandle handle) override;\n  void destroy(BindGroupBufferHandle handle) override;\n  void destroy(SamplerHandle handle) override;\n\n  // Command Queue\n  std::shared_ptr<ICommandQueue> createCommandQueue(const CommandQueueDesc& desc,\n                                                    Result* IGL_NULLABLE\n                                                        outResult) noexcept override;\n\n  // Resources\n  std::unique_ptr<IBuffer> createBuffer(const BufferDesc& desc,\n                                        Result* IGL_NULLABLE outResult) const noexcept override;\n  std::shared_ptr<IDepthStencilState> createDepthStencilState(const DepthStencilStateDesc& desc,\n                                                              Result* IGL_NULLABLE\n                                                                  outResult) const override;\n  std::shared_ptr<ISamplerState> createSamplerState(const SamplerStateDesc& desc,\n                                                    Result* IGL_NULLABLE outResult) const override;\n  std::shared_ptr<ITexture> createTexture(const TextureDesc& desc,\n                                          Result* IGL_NULLABLE outResult) const noexcept override;\n  std::shared_ptr<ITexture> createTextureView(std::shared_ptr<ITexture> texture,\n                                              const TextureViewDesc& desc,\n                                              Result* IGL_NULLABLE\n                                                  outResult) const noexcept override;\n\n  std::shared_ptr<ITimer> createTimer(Result* IGL_NULLABLE outResult) const noexcept override;\n\n  std::shared_ptr<ITimestampQueries> createTimestampQueries(uint32_t maxTimestamps,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) const noexcept override;\n\n  std::shared_ptr<IVertexInputState> createVertexInputState(const VertexInputStateDesc& desc,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) const override;\n\n  // Pipelines\n  std::shared_ptr<IComputePipelineState> createComputePipeline(const ComputePipelineDesc& desc,\n                                                               Result* IGL_NULLABLE\n                                                                   outResult) const override;\n  std::shared_ptr<IRenderPipelineState> createRenderPipeline(const RenderPipelineDesc& desc,\n                                                             Result* IGL_NULLABLE\n                                                                 outResult) const override;\n\n  // Shaders\n  std::unique_ptr<IShaderLibrary> createShaderLibrary(const ShaderLibraryDesc& desc,\n                                                      Result* IGL_NULLABLE\n                                                          outResult) const override;\n\n  std::shared_ptr<IShaderModule> createShaderModule(const ShaderModuleDesc& desc,\n                                                    Result* IGL_NULLABLE outResult) const override;\n\n  std::unique_ptr<IShaderStages> createShaderStages(const ShaderStagesDesc& desc,\n                                                    Result* IGL_NULLABLE outResult) const override;\n\n  // Platform-specific extensions\n  [[nodiscard]] const PlatformDevice& getPlatformDevice() const noexcept override;\n\n  IGL_INLINE id<MTLDevice> IGL_NONNULL get() const {\n    return device_;\n  }\n\n  [[nodiscard]] void* IGL_NULLABLE getNativeDevice() const override {\n    return (__bridge void*)device_;\n  }\n\n  // ICapabilities\n  [[nodiscard]] bool isAppleGpu() const;\n  [[nodiscard]] bool hasFeature(DeviceFeatures feature) const override;\n  [[nodiscard]] bool hasRequirement(DeviceRequirement requirement) const override;\n  bool getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const override;\n  [[nodiscard]] TextureFormatCapabilities getTextureFormatCapabilities(\n      TextureFormat format) const override;\n  [[nodiscard]] ShaderVersion getShaderVersion() const override;\n  [[nodiscard]] BackendVersion getBackendVersion() const override;\n\n  // Device Statistics\n  [[nodiscard]] size_t getCurrentDrawCount() const override;\n\n  [[nodiscard]] size_t getShaderCompilationCount() const override;\n\n  [[nodiscard]] size_t getGPUMemoryUsage() const override;\n\n  [[nodiscard]] BackendType getBackendType() const override {\n    return BackendType::Metal;\n  }\n\n  [[nodiscard]] base::IFramebufferInterop* IGL_NULLABLE\n  createFramebufferInterop(const base::FramebufferInteropDesc& desc) override;\n\n  [[nodiscard]] NormalizedZRange getNormalizedZRange() const override {\n    return NormalizedZRange::ZeroToOne;\n  }\n\n  static MTLStorageMode toMTLStorageMode(ResourceStorage storage);\n  static MTLResourceOptions toMTLResourceStorageMode(ResourceStorage storage);\n\n  std::shared_ptr<ICommandQueue> getMostRecentCommandQueue() const noexcept;\n\n public:\n  Pool<BindGroupBufferTag, BindGroupBufferDesc> bindGroupBuffersPool;\n  Pool<BindGroupTextureTag, BindGroupTextureDesc> bindGroupTexturesPool;\n\n private:\n  std::unique_ptr<IBuffer> createRingBuffer(const BufferDesc& desc,\n                                            Result* IGL_NULLABLE outResult) const noexcept;\n\n  std::unique_ptr<IBuffer> createBufferNoCopy(const BufferDesc& desc,\n                                              Result* IGL_NULLABLE outResult) const;\n\n  std::shared_ptr<IRenderPipelineState> createTraditionalRenderPipeline(\n      const RenderPipelineDesc& desc,\n      Result* IGL_NULLABLE outResult) const;\n\n  std::shared_ptr<IRenderPipelineState> createMeshRenderPipeline(const RenderPipelineDesc& desc,\n                                                                 Result* IGL_NULLABLE\n                                                                     outResult) const;\n\n  id<MTLDevice> IGL_NONNULL device_;\n  PlatformDevice platformDevice_;\n\n  DeviceFeatureSet deviceFeatureSet_;\n  std::shared_ptr<BufferSynchronizationManager> bufferSyncManager_;\n  mutable DeviceStatistics deviceStatistics_;\n  std::shared_ptr<ICommandQueue> mostRecentCommandQueue_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Device.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/Device.h>\n\n#import <Foundation/Foundation.h>\n#include <sstream>\n#include <unordered_set>\n#include <igl/FramebufferWrapper.h>\n#include <igl/metal/Buffer.h>\n#include <igl/metal/BufferSynchronizationManager.h>\n#include <igl/metal/CommandQueue.h>\n#include <igl/metal/ComputePipelineState.h>\n#include <igl/metal/DepthStencilState.h>\n#include <igl/metal/Framebuffer.h>\n#include <igl/metal/PlatformDevice.h>\n#include <igl/metal/RenderPipelineState.h>\n#include <igl/metal/Result.h>\n#include <igl/metal/SamplerState.h>\n#include <igl/metal/Shader.h>\n#include <igl/metal/Texture.h>\n#include <igl/metal/Timer.h>\n#include <igl/metal/TimestampQueries.h>\n#include <igl/metal/VertexInputState.h>\n\nnamespace igl::metal {\n\n// https://developer.apple.com/documentation/quartzcore/cametallayer/2938720-maximumdrawablecount?language=objc\n// Max number of Metal drawables in the resource pool managed by Core Animation is 3.\n#define IGL_METAL_MAX_IN_FLIGHT_BUFFERS 3\n\nDevice::Device(id<MTLDevice> device) :\n  device_(device), platformDevice_(*this), deviceFeatureSet_(device) {\n  bufferSyncManager_ =\n      std::make_shared<BufferSynchronizationManager>(IGL_METAL_MAX_IN_FLIGHT_BUFFERS);\n}\n\nDevice::~Device() = default;\n\nstd::shared_ptr<ICommandQueue> Device::createCommandQueue( // NOLINT(bugprone-exception-escape)\n    const CommandQueueDesc& /*desc*/,\n    Result* outResult) noexcept {\n  id<MTLCommandQueue> metalObject = [device_ newCommandQueue];\n  auto resource =\n      std::make_shared<CommandQueue>(*this, metalObject, bufferSyncManager_, deviceStatistics_);\n\n  mostRecentCommandQueue_ = resource;\n\n  Result::setOk(outResult);\n  return resource;\n}\n\nnamespace {\nid<MTLBuffer> createMetalBuffer(id<MTLDevice> device,\n                                const BufferDesc& desc,\n                                MTLResourceOptions options) {\n  id<MTLBuffer> metalObject = nil;\n  if (desc.data != nullptr) {\n    metalObject = [device newBufferWithBytes:desc.data length:desc.length options:options];\n  } else {\n    metalObject = [device newBufferWithLength:desc.length options:options];\n  }\n  metalObject.label = [NSString stringWithUTF8String:desc.debugName.c_str()];\n  return metalObject;\n}\n} // namespace\n\nstd::unique_ptr<IBuffer> Device::createBuffer( // NOLINT(bugprone-exception-escape)\n    const BufferDesc& desc,\n    Result* outResult) const noexcept {\n  if (desc.hint & BufferDesc::BufferAPIHintBits::Ring) {\n    return createRingBuffer(desc, outResult);\n  }\n  if (desc.hint & BufferDesc::BufferAPIHintBits::NoCopy) {\n    return createBufferNoCopy(desc, outResult);\n  }\n  const MTLResourceOptions storage = toMTLResourceStorageMode(desc.storage);\n  const MTLResourceOptions options = MTLResourceCPUCacheModeDefaultCache | storage;\n\n  id<MTLBuffer> metalObject = createMetalBuffer(device_, desc, options);\n  std::unique_ptr<IBuffer> resource = std::make_unique<Buffer>(\n      std::move(metalObject), options, desc.hint, 0 /* No accepted hints */, desc.type);\n  if (hasResourceTracker()) {\n    resource->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n  Result::setOk(outResult);\n  return resource;\n}\n\nstd::unique_ptr<IBuffer> Device::createRingBuffer( // NOLINT(bugprone-exception-escape)\n    const BufferDesc& desc,\n    Result* outResult) const noexcept {\n  const MTLResourceOptions storage = toMTLResourceStorageMode(desc.storage);\n  const MTLResourceOptions options = MTLResourceCPUCacheModeDefaultCache | storage;\n\n  // Create a ring of buffers\n  std::vector<id<MTLBuffer>> bufferRing;\n  for (size_t i = 0; i < bufferSyncManager_->getMaxInflightBuffers(); i++) {\n    id<MTLBuffer> metalObject = createMetalBuffer(device_, desc, options);\n    bufferRing.push_back(metalObject);\n  }\n  std::unique_ptr<IBuffer> resource = std::make_unique<RingBuffer>(\n      std::move(bufferRing), options, bufferSyncManager_, desc.hint, desc.type);\n\n  if (hasResourceTracker()) {\n    resource->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n  Result::setOk(outResult);\n  return resource;\n}\n\nstd::unique_ptr<IBuffer> Device::createBufferNoCopy(const BufferDesc& desc,\n                                                    Result* outResult) const {\n  const MTLResourceOptions storage = toMTLResourceStorageMode(desc.storage);\n\n  using Deallocator = void (^)(void*, NSUInteger);\n  const Deallocator deallocator = nil;\n  const MTLResourceOptions options = MTLResourceCPUCacheModeDefaultCache | storage;\n  id<MTLBuffer> metalObject = [device_ newBufferWithBytesNoCopy:const_cast<void*>(desc.data)\n                                                         length:desc.length\n                                                        options:options\n                                                    deallocator:deallocator];\n\n  std::unique_ptr<IBuffer> resource = std::make_unique<Buffer>(\n      metalObject, options, desc.hint, BufferDesc::BufferAPIHintBits::NoCopy, desc.type);\n  if (hasResourceTracker()) {\n    resource->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n  Result::setOk(outResult);\n  return resource;\n}\n\nstd::shared_ptr<ISamplerState> Device::createSamplerState(const SamplerStateDesc& desc,\n                                                          Result* outResult) const {\n  return platformDevice_.createSamplerState(desc, outResult);\n}\n\nstd::shared_ptr<ITexture> Device::createTexture( // NOLINT(bugprone-exception-escape)\n    const TextureDesc& desc,\n    Result* outResult) const noexcept {\n  const auto sanitized = sanitize(desc);\n  if (desc.numLayers > 1 && desc.type != TextureType::TwoDArray) {\n    Result::setResult(outResult,\n                      Result::Code::Unsupported,\n                      \"Array textures are only supported when type is TwoDArray.\");\n    return nullptr;\n  }\n  if (desc.exportability != TextureDesc::TextureExportability::NoExport) {\n    Result::setResult(outResult,\n                      Result::Code::Unimplemented,\n                      \"Exportable textures are not supported on this platform.\");\n    return nullptr;\n  };\n\n  MTLTextureDescriptor* metalDesc = [MTLTextureDescriptor new];\n  metalDesc.textureType = Texture::convertType(sanitized.type, sanitized.numSamples);\n  metalDesc.pixelFormat = Texture::textureFormatToMTLPixelFormat(sanitized.format);\n  if (metalDesc.pixelFormat == MTLPixelFormatInvalid) {\n    Result::setResult(\n        outResult,\n        Result::Code::Unsupported,\n        \"Invalid Texture Format : \" +\n            std::string(TextureFormatProperties::fromTextureFormat(sanitized.format).name));\n    IGL_DEBUG_ABORT(outResult->message.c_str());\n    return nullptr;\n  }\n  metalDesc.width = sanitized.width;\n  metalDesc.height = sanitized.height;\n  metalDesc.depth = sanitized.depth;\n  metalDesc.arrayLength = sanitized.numLayers;\n  metalDesc.mipmapLevelCount = sanitized.numMipLevels;\n\n  // The default sampleCount value is 1. If textureType is not MTLTextureType2DMultisample, this\n  // value must be 1. Support for different sample count values varies by device. Call the\n  // supportsTextureSampleCount: method to determine if your desired sample count value is\n  // supported.\n  IGL_DEBUG_ASSERT(sanitized.numSamples > 0, \"Texture : Samples cannot be zero\");\n  metalDesc.sampleCount = 1;\n  if (metalDesc.textureType == MTLTextureType2DMultisample) {\n    metalDesc.mipmapLevelCount = 1;\n    if (sanitized.numSamples > 0) {\n      IGL_DEBUG_ASSERT([device_ supportsTextureSampleCount:sanitized.numSamples]);\n      metalDesc.sampleCount = sanitized.numSamples;\n    }\n  }\n#if TARGET_OS_OSX\n  // MTLTextureType2DMultisampleArray not available in iOS\n  if (@available(macOS 10.14, *)) {\n    if (metalDesc.textureType == MTLTextureType2DMultisampleArray) {\n      metalDesc.mipmapLevelCount = 1;\n    }\n  }\n#endif\n  metalDesc.usage = Texture::toMTLTextureUsage(sanitized.usage);\n  metalDesc.storageMode = toMTLStorageMode(sanitized.storage);\n\n  metalDesc.resourceOptions =\n      MTLResourceCPUCacheModeDefaultCache | toMTLResourceStorageMode(sanitized.storage);\n\n  id<MTLTexture> metalObject = [device_ newTextureWithDescriptor:metalDesc];\n  if (!metalObject) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Failed to create Metal texture\");\n    IGL_DEBUG_ABORT(outResult->message.c_str());\n    return nullptr;\n  }\n  metalObject.label = [NSString stringWithUTF8String:desc.debugName.c_str()];\n  auto iglObject = std::make_shared<Texture>(metalObject, *this, desc.mipmapGeneration);\n  if (hasResourceTracker()) {\n    iglObject->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n  Result::setOk(outResult);\n\n  // sanity check to ensure that the Result value and the returned object are in sync\n  // i.e. we never have a valid Result with a nullptr return value, or vice versa\n  IGL_DEBUG_ASSERT(outResult == nullptr || (outResult->isOk() == (iglObject != nullptr)));\n\n  return iglObject;\n}\n\nstd::shared_ptr<ITexture> Device::createTextureView( // NOLINT(bugprone-exception-escape)\n    std::shared_ptr<ITexture> texture,\n    const TextureViewDesc& desc,\n    Result* IGL_NULLABLE outResult) const noexcept {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n\n  Result::setResult(\n      outResult, Result::Code::Unimplemented, \"Texture views are not (yet) implemented\");\n\n  return nullptr;\n}\n\nstd::shared_ptr<ITimer> Device::createTimer(Result* IGL_NULLABLE outResult) const noexcept {\n  if (outResult) {\n    Result::setOk(outResult);\n  }\n  return std::make_shared<Timer>();\n}\n\nstd::shared_ptr<ITimestampQueries> Device::createTimestampQueries(uint32_t maxTimestamps,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const noexcept {\n  if (@available(macOS 10.15, iOS 14.0, *)) {\n    // Find the timestamp counter set\n    id<MTLCounterSet> timestampCounterSet = nil;\n    for (id<MTLCounterSet> counterSet = nullptr in device_.counterSets) {\n      if ([counterSet.name isEqualToString:MTLCommonCounterSetTimestamp]) {\n        timestampCounterSet = counterSet;\n        break;\n      }\n    }\n    if (!timestampCounterSet) {\n      Result::setResult(\n          outResult, Result::Code::Unsupported, \"Device does not support timestamp counters\");\n      return nullptr;\n    }\n\n    MTLCounterSampleBufferDescriptor* descriptor = [[MTLCounterSampleBufferDescriptor alloc] init];\n    descriptor.counterSet = timestampCounterSet;\n    descriptor.sampleCount = maxTimestamps;\n    descriptor.storageMode = MTLStorageModeShared;\n    descriptor.label = @\"IGL TimestampQueries\";\n\n    NSError* error = nil;\n    id<MTLCounterSampleBuffer> csb = [device_ newCounterSampleBufferWithDescriptor:descriptor\n                                                                             error:&error];\n    if (!csb || error) {\n      Result::setResult(outResult,\n                        Result::Code::RuntimeError,\n                        error ? [error.localizedDescription UTF8String]\n                              : \"Failed to create counter sample buffer\");\n      return nullptr;\n    }\n\n    Result::setOk(outResult);\n    return std::make_shared<metal::TimestampQueries>(csb, maxTimestamps);\n  } else {\n    Result::setResult(\n        outResult, Result::Code::Unsupported, \"TimestampQueries require macOS 10.15+ or iOS 14+\");\n    return nullptr;\n  }\n}\n\nstd::shared_ptr<IVertexInputState> Device::createVertexInputState(const VertexInputStateDesc& desc,\n                                                                  Result* outResult) const {\n  // Avoid buffer overrun in numAttributes.\n  if (desc.numAttributes > IGL_VERTEX_ATTRIBUTES_MAX) {\n    Result::setResult(outResult,\n                      Result::Code::ArgumentOutOfRange,\n                      \"numAttributes is too large in VertexInputStateDesc\");\n    IGL_DEBUG_ABORT(outResult->message.c_str());\n    return nullptr;\n  }\n\n  // Avoid buffer overrun in numInputBindings.\n  if (desc.numInputBindings > IGL_BUFFER_BINDINGS_MAX) {\n    Result::setResult(outResult,\n                      Result::Code::ArgumentOutOfRange,\n                      \"numInputBindings is too large in VertexInputStateDesc\");\n    IGL_DEBUG_ABORT(outResult->message.c_str());\n    return nullptr;\n  }\n\n  // Verify that bufferIndex and location are in their respective ranges.\n  std::unordered_set<int> bufferIndexSet;\n  std::unordered_set<int> attributeLocationSet;\n  for (int i = 0; i < desc.numAttributes; ++i) {\n    size_t bufferIndex = desc.attributes[i].bufferIndex;\n    if (bufferIndex >= IGL_BUFFER_BINDINGS_MAX) {\n      Result::setResult(outResult, Result::Code::ArgumentOutOfRange, \"bufferIndex out of range\");\n      IGL_DEBUG_ABORT(outResult->message.c_str());\n      return nullptr;\n    }\n\n    const int attribLocation = desc.attributes[i].location;\n    if (attribLocation < 0 || attribLocation >= IGL_VERTEX_ATTRIBUTES_MAX) {\n      Result::setResult(\n          outResult, Result::Code::ArgumentOutOfRange, \"attribute location out of range\");\n      IGL_DEBUG_ABORT(outResult->message.c_str());\n      return nullptr;\n    }\n\n    bufferIndexSet.insert(static_cast<int>(bufferIndex));\n    attributeLocationSet.insert(attribLocation);\n  }\n\n  // Number of unique buffer indices should match the number of bindings\n  if (bufferIndexSet.size() != desc.numInputBindings) {\n    std::ostringstream msg;\n    msg << \"desc.numInputBindings : expected value is \" << bufferIndexSet.size()\n        << \", but actual value is \" << desc.numInputBindings;\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, msg.str());\n    IGL_DEBUG_ABORT(outResult->message.c_str());\n    return nullptr;\n  }\n\n  // Attribute locations must be unique.\n  // So number of attribute locations should match the desc.numAttributes\n  if (attributeLocationSet.size() != desc.numAttributes) {\n    std::ostringstream msg;\n    msg << \"desc.numAttributes : expected value is \" << attributeLocationSet.size()\n        << \", but actual value is \" << desc.numAttributes;\n    Result::setResult(\n        outResult, Result::Code::ArgumentInvalid, \"attribute locations are not unique\");\n    IGL_DEBUG_ABORT(outResult->message.c_str());\n    return nullptr;\n  }\n\n  MTLVertexDescriptor* metalDesc = [MTLVertexDescriptor vertexDescriptor];\n  if (metalDesc == nil) {\n    Result::setResult(\n        outResult, Result::Code::RuntimeError, \"failed to create MTLVertexDescriptor\");\n    IGL_DEBUG_ABORT(outResult->message.c_str());\n    return nullptr;\n  }\n\n  // Validation completed. Populate the metal vertex descriptor.\n  for (int i = 0; i < desc.numAttributes; ++i) {\n    const size_t bufferIndex = desc.attributes[i].bufferIndex;\n    const size_t dstAttribIndex = desc.attributes[i].location;\n\n    metalDesc.attributes[dstAttribIndex].format =\n        VertexInputState::convertAttributeFormat(desc.attributes[i].format);\n    metalDesc.attributes[dstAttribIndex].bufferIndex = bufferIndex;\n    metalDesc.attributes[dstAttribIndex].offset = desc.attributes[i].offset;\n\n    metalDesc.layouts[bufferIndex].stride = desc.inputBindings[bufferIndex].stride;\n    metalDesc.layouts[bufferIndex].stepFunction =\n        VertexInputState::convertSampleFunction(desc.inputBindings[bufferIndex].sampleFunction);\n    metalDesc.layouts[bufferIndex].stepRate = desc.inputBindings[bufferIndex].sampleRate;\n  }\n\n  auto iglObject = std::make_shared<VertexInputState>(metalDesc);\n\n  Result::setOk(outResult);\n  return iglObject;\n}\n\nstd::shared_ptr<IDepthStencilState> Device::createDepthStencilState(\n    const DepthStencilStateDesc& desc,\n    Result* outResult) const {\n  MTLDepthStencilDescriptor* metalDesc = [MTLDepthStencilDescriptor new];\n  metalDesc.label = [NSString stringWithUTF8String:desc.debugName.c_str()];\n  metalDesc.depthCompareFunction = DepthStencilState::convertCompareFunction(desc.compareFunction);\n  metalDesc.depthWriteEnabled = desc.isDepthWriteEnabled;\n  metalDesc.frontFaceStencil = DepthStencilState::convertStencilDescriptor(desc.frontFaceStencil);\n  metalDesc.backFaceStencil = DepthStencilState::convertStencilDescriptor(desc.backFaceStencil);\n  id<MTLDepthStencilState> metalObject = [device_ newDepthStencilStateWithDescriptor:metalDesc];\n\n  std::shared_ptr<DepthStencilState> iglObject = std::make_shared<DepthStencilState>(metalObject);\n\n  Result::setOk(outResult);\n  return iglObject;\n}\n\nstd::shared_ptr<IComputePipelineState> Device::createComputePipeline(\n    const ComputePipelineDesc& desc,\n    Result* outResult) const {\n  NSError* error = nil;\n\n  if (IGL_DEBUG_VERIFY_NOT(desc.shaderStages == nullptr)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Missing shader stages\");\n    return nullptr;\n  }\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages->getType() == ShaderStagesType::Compute)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Shader stages not for compute\");\n    return nullptr;\n  }\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages->getComputeModule())) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Missing compute shader\");\n    return nullptr;\n  }\n\n  MTLComputePipelineDescriptor* descriptor = [[MTLComputePipelineDescriptor alloc] init];\n  descriptor.computeFunction =\n      static_cast<ShaderModule*>(desc.shaderStages->getComputeModule().get())->get();\n  MTLComputePipelineReflection* reflection = nil;\n  id<MTLComputePipelineState> metalObject =\n      [device_ newComputePipelineStateWithDescriptor:descriptor\n                                             options:MTLPipelineOptionNone\n                                          reflection:&reflection\n                                               error:&error];\n  setResultFrom(outResult, error);\n  if (error != nil) {\n    return nullptr;\n  }\n  std::shared_ptr<ComputePipelineState> computePipelineState =\n      std::make_shared<ComputePipelineState>(metalObject, reflection);\n\n  return computePipelineState;\n}\n\nstd::shared_ptr<IRenderPipelineState> Device::createRenderPipeline(const RenderPipelineDesc& desc,\n                                                                   Result* outResult) const {\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages)) {\n    Result::setResult(\n        outResult, Result::Code::RuntimeError, \"RenderPipeline requires shader stages\");\n    return nullptr;\n  }\n\n  if (desc.shaderStages->getType() == ShaderStagesType::Render) {\n    return createTraditionalRenderPipeline(desc, outResult);\n  } else if (desc.shaderStages->getType() == ShaderStagesType::RenderMeshShader) {\n    return createMeshRenderPipeline(desc, outResult);\n  } else {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  }\n}\n\nstd::shared_ptr<IRenderPipelineState> Device::createTraditionalRenderPipeline(\n    const RenderPipelineDesc& desc,\n    Result* outResult) const {\n  // TODO\n  //  Size drawableSize = IGLNativeDrawableSize(layer_);\n  //  graphicsDesc.viewportState.viewportCount = 1;\n  //  graphicsDesc.viewportState.viewports[0] = (Viewport){0.0, 0.0, drawableSize.width,\n  //  drawableSize.height, 0.0, 1.0};\n\n  NSError* error = nil;\n  MTLRenderPipelineDescriptor* metalDesc = [MTLRenderPipelineDescriptor new];\n\n  metalDesc.label = [NSString stringWithUTF8String:desc.debugName.c_str()];\n\n  metalDesc.sampleCount = desc.sampleCount;\n\n  // (optional, can be null) Vertex input\n  auto vertexInput = desc.vertexInputState;\n  auto metalVertexInput = vertexInput ? static_cast<VertexInputState*>(vertexInput.get())->get()\n                                      : nullptr;\n\n  metalDesc.vertexDescriptor = metalVertexInput;\n\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages)) {\n    Result::setResult(\n        outResult, Result::Code::RuntimeError, \"RenderPipeline requires shader stages\");\n    return nullptr;\n  }\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages->getType() == ShaderStagesType::Render)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Shader stages not for render\");\n    return nullptr;\n  }\n\n  // Vertex shader is required\n  auto vertexModule = desc.shaderStages->getVertexModule();\n  if (!IGL_DEBUG_VERIFY(vertexModule)) {\n    Result::setResult(\n        outResult, Result::Code::RuntimeError, \"RenderPipeline requires vertex module\");\n    return nullptr;\n  }\n\n  auto* vertexFunc = static_cast<ShaderModule*>(vertexModule.get());\n  metalDesc.vertexFunction = vertexFunc->get();\n\n  if (!IGL_DEBUG_VERIFY(metalDesc.vertexFunction)) {\n    Result::setResult(\n        outResult, Result::Code::RuntimeError, \"RenderPipeline requires non-null vertex function\");\n    return nullptr;\n  }\n\n  // Fragment shader is optional\n  auto fragmentModule = desc.shaderStages->getFragmentModule();\n  if (fragmentModule) {\n    auto* fragmentFunc = static_cast<ShaderModule*>(fragmentModule.get());\n    metalDesc.fragmentFunction = fragmentFunc->get();\n  }\n\n  // Framebuffer\n  for (uint32_t i = 0; i < desc.targetDesc.colorAttachments.size(); ++i) {\n    const auto& src = desc.targetDesc.colorAttachments[i];\n    MTLRenderPipelineColorAttachmentDescriptor* dst = metalDesc.colorAttachments[i];\n    dst.pixelFormat = Texture::textureFormatToMTLPixelFormat(src.textureFormat);\n    dst.writeMask = RenderPipelineState::convertColorWriteMask(src.colorWriteMask);\n    dst.blendingEnabled = src.blendEnabled;\n    dst.rgbBlendOperation = MTLBlendOperation(src.rgbBlendOp);\n    dst.alphaBlendOperation = MTLBlendOperation(src.alphaBlendOp);\n    dst.sourceRGBBlendFactor = MTLBlendFactor(src.srcRGBBlendFactor);\n    dst.sourceAlphaBlendFactor = MTLBlendFactor(src.srcAlphaBlendFactor);\n    dst.destinationRGBBlendFactor = MTLBlendFactor(src.dstRGBBlendFactor);\n    dst.destinationAlphaBlendFactor = MTLBlendFactor(src.dstAlphaBlendFactor);\n  }\n\n  // Depth and Stencil\n  metalDesc.depthAttachmentPixelFormat =\n      Texture::textureFormatToMTLPixelFormat(desc.targetDesc.depthAttachmentFormat);\n  metalDesc.stencilAttachmentPixelFormat =\n      Texture::textureFormatToMTLPixelFormat(desc.targetDesc.stencilAttachmentFormat);\n\n  MTLRenderPipelineReflection* reflection = nil;\n\n  // Create reflection for use later in binding, etc.\n  id<MTLRenderPipelineState> metalObject =\n      [device_ newRenderPipelineStateWithDescriptor:metalDesc\n                                            options:MTLPipelineOptionArgumentInfo |\n                                                    MTLPipelineOptionBufferTypeInfo\n                                         reflection:&reflection\n                                              error:&error];\n  setResultFrom(outResult, error);\n  if (error != nil) {\n    IGL_LOG_ERROR(\"%s\\n\", [error.localizedDescription UTF8String]);\n    return nullptr;\n  }\n\n  return std::make_shared<RenderPipelineState>(metalObject, reflection, desc);\n}\n\nstd::shared_ptr<IRenderPipelineState> Device::createMeshRenderPipeline(\n    const RenderPipelineDesc& desc,\n    Result* outResult) const {\n  if (@available(iOS 16, macOS 13, *)) {\n    // Check if the device supports mesh shaders\n    // Mesh shaders require Apple GPU Family 7 or higher (A14/M1 and later)\n    if (@available(iOS 16, macOS 13, *)) {\n      if (![device_ supportsFamily:MTLGPUFamilyApple7]) {\n        Result::setResult(outResult,\n                          Result::Code::Unsupported,\n                          \"Mesh shaders require Apple GPU Family 7 or higher (A14/M1 and later)\");\n        return nullptr;\n      }\n    }\n\n    NSError* error = nil;\n    MTLMeshRenderPipelineDescriptor* metalDesc = [MTLMeshRenderPipelineDescriptor new];\n\n    metalDesc.label = [NSString stringWithUTF8String:desc.debugName.c_str()];\n\n    metalDesc.rasterSampleCount = desc.sampleCount;\n\n    if (!IGL_DEBUG_VERIFY(desc.shaderStages)) {\n      Result::setResult(\n          outResult, Result::Code::RuntimeError, \"RenderPipeline requires shader stages\");\n      return nullptr;\n    }\n    if (!IGL_DEBUG_VERIFY(desc.shaderStages->getType() == ShaderStagesType::RenderMeshShader)) {\n      Result::setResult(\n          outResult, Result::Code::ArgumentInvalid, \"Shader stages not for mesh render\");\n      return nullptr;\n    }\n\n    // Mesh shader is required\n    auto meshModule = desc.shaderStages->getMeshModule();\n    if (!IGL_DEBUG_VERIFY(meshModule)) {\n      Result::setResult(\n          outResult, Result::Code::RuntimeError, \"MeshRenderPipeline requires mesh module\");\n      return nullptr;\n    }\n\n    auto* meshFunc = static_cast<ShaderModule*>(meshModule.get());\n    metalDesc.meshFunction = meshFunc->get();\n\n    if (!IGL_DEBUG_VERIFY(metalDesc.meshFunction)) {\n      Result::setResult(\n          outResult, Result::Code::RuntimeError, \"RenderPipeline requires non-null mesh function\");\n      return nullptr;\n    }\n\n    // Task shader is optional\n    auto taskModule = desc.shaderStages->getTaskModule();\n    if (taskModule) {\n      auto* taskFunc = static_cast<ShaderModule*>(taskModule.get());\n      metalDesc.objectFunction = taskFunc->get();\n    }\n\n    // Fragment shader is optional\n    auto fragmentModule = desc.shaderStages->getFragmentModule();\n    if (fragmentModule) {\n      auto* fragmentFunc = static_cast<ShaderModule*>(fragmentModule.get());\n      metalDesc.fragmentFunction = fragmentFunc->get();\n    }\n\n    // Framebuffer\n    for (uint32_t i = 0; i < desc.targetDesc.colorAttachments.size(); ++i) {\n      const auto& src = desc.targetDesc.colorAttachments[i];\n      if (igl::TextureFormat::Invalid == src.textureFormat) {\n        continue;\n      }\n\n      MTLRenderPipelineColorAttachmentDescriptor* dst = metalDesc.colorAttachments[i];\n      dst.pixelFormat = Texture::textureFormatToMTLPixelFormat(src.textureFormat);\n      dst.writeMask = RenderPipelineState::convertColorWriteMask(src.colorWriteMask);\n      dst.blendingEnabled = src.blendEnabled;\n      dst.rgbBlendOperation = MTLBlendOperation(src.rgbBlendOp);\n      dst.alphaBlendOperation = MTLBlendOperation(src.alphaBlendOp);\n      dst.sourceRGBBlendFactor = MTLBlendFactor(src.srcRGBBlendFactor);\n      dst.sourceAlphaBlendFactor = MTLBlendFactor(src.srcAlphaBlendFactor);\n      dst.destinationRGBBlendFactor = MTLBlendFactor(src.dstRGBBlendFactor);\n      dst.destinationAlphaBlendFactor = MTLBlendFactor(src.dstAlphaBlendFactor);\n    }\n\n    // Depth and Stencil\n    metalDesc.depthAttachmentPixelFormat =\n        Texture::textureFormatToMTLPixelFormat(desc.targetDesc.depthAttachmentFormat);\n    metalDesc.stencilAttachmentPixelFormat =\n        Texture::textureFormatToMTLPixelFormat(desc.targetDesc.stencilAttachmentFormat);\n\n    MTLRenderPipelineReflection* reflection = nil;\n\n    // Create reflection for use later in binding, etc.\n    id<MTLRenderPipelineState> metalObject =\n        [device_ newRenderPipelineStateWithMeshDescriptor:metalDesc\n                                                  options:MTLPipelineOptionArgumentInfo |\n                                                          MTLPipelineOptionBufferTypeInfo\n                                               reflection:&reflection\n                                                    error:&error];\n    setResultFrom(outResult, error);\n    if (error != nil) {\n      IGL_LOG_ERROR(\"%s\\n\", [error.localizedDescription UTF8String]);\n      return nullptr;\n    }\n\n    return std::make_shared<RenderPipelineState>(metalObject, reflection, desc);\n  } else {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return nullptr;\n  }\n}\n\nstd::unique_ptr<IShaderLibrary> Device::createShaderLibrary(const ShaderLibraryDesc& desc,\n                                                            Result* outResult) const {\n  if (IGL_DEBUG_VERIFY_NOT(desc.moduleInfo.empty())) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid);\n    return nullptr;\n  }\n  id<MTLLibrary> metalLibrary = nil;\n  NSError* error = nil;\n  if (desc.input.type == ShaderInputType::Binary) {\n    if (desc.input.length == 0 || desc.input.data == nullptr) {\n      Result::setResult(outResult, Result::Code::ArgumentNull);\n      return nullptr;\n    }\n    // With null queue and destructor, dispatch_data_create() function stores a pointer to the data\n    // buffer and leaves the responsibility of releasing the buffer to the client\n    auto data = dispatch_data_create(desc.input.data,\n                                     desc.input.length,\n                                     nullptr /* dispatch_queue_t queue */,\n                                     nullptr /* dispatch_block_t\n                      destructor */\n    );\n\n    metalLibrary = [device_ newLibraryWithData:data error:&error];\n  } else {\n    if (!desc.input.source || !strlen(desc.input.source)) {\n      Result::setResult(outResult, Result::Code::ArgumentNull);\n      return nullptr;\n    }\n    MTLCompileOptions* compileOpts = [MTLCompileOptions new];\n    compileOpts.fastMathEnabled = desc.input.options.fastMathEnabled;\n\n    NSString* shaderSource = [NSString stringWithUTF8String:desc.input.source];\n    metalLibrary = [device_ newLibraryWithSource:shaderSource options:compileOpts error:&error];\n    deviceStatistics_.incrementShaderCompilationCount();\n  }\n\n  if (!metalLibrary) {\n    IGL_DEBUG_ASSERT(!error, \"%s\\n\", [error.localizedDescription UTF8String]);\n    setResultFrom(outResult, error);\n    return nullptr;\n  }\n  if (error) {\n    // Compilation successful but with warnings\n    IGL_LOG_INFO(\"%s\\n\", [error.localizedDescription UTF8String]);\n  }\n  std::vector<std::shared_ptr<IShaderModule>> modules;\n  modules.reserve(desc.moduleInfo.size());\n  for (const auto& info : desc.moduleInfo) {\n    NSString* shaderEntrypoint = [NSString stringWithUTF8String:info.entryPoint.c_str()];\n    if (!shaderEntrypoint) {\n      Result::setResult(outResult, Result::Code::RuntimeError);\n      return nullptr;\n    }\n\n    auto metalFunction = [metalLibrary newFunctionWithName:shaderEntrypoint];\n    if (!metalFunction) {\n      IGL_DEBUG_ABORT(\"Could not find function '%s' in library\\n\", info.entryPoint.c_str());\n      Result::setResult(\n          outResult, Result::Code::RuntimeError, \"Could not find function in library\");\n      return nullptr;\n    }\n    modules.emplace_back(std::make_shared<ShaderModule>(info, metalFunction));\n\n    if (auto resourceTracker = getResourceTracker(); resourceTracker && !modules.empty()) {\n      modules.back()->initResourceTracker(resourceTracker, desc.debugName);\n    }\n  }\n\n  auto shaderLibrary = std::make_unique<ShaderLibrary>(std::move(modules));\n  if (auto resourceTracker = getResourceTracker()) {\n    shaderLibrary->initResourceTracker(resourceTracker, desc.debugName);\n  }\n  Result::setOk(outResult);\n\n  return shaderLibrary;\n}\n\nstd::shared_ptr<IShaderModule> Device::createShaderModule(const ShaderModuleDesc& desc,\n                                                          Result* outResult) const {\n  auto libraryDesc =\n      desc.input.type == ShaderInputType::String\n          ? ShaderLibraryDesc::fromStringInput(desc.input.source, {desc.info}, desc.debugName)\n          : ShaderLibraryDesc::fromBinaryInput(\n                desc.input.data, desc.input.length, {desc.info}, desc.debugName);\n  auto library = createShaderLibrary(libraryDesc, outResult);\n  if (library != nullptr) {\n    return library->getShaderModule(desc.info.entryPoint);\n  }\n  return nullptr;\n}\n\nstd::unique_ptr<IShaderStages> Device::createShaderStages(const ShaderStagesDesc& desc,\n                                                          Result* outResult) const {\n  const Result result;\n  auto stages = std::make_unique<ShaderStages>(desc);\n  if (auto resourceTracker = getResourceTracker()) {\n    stages->initResourceTracker(resourceTracker, desc.debugName);\n  }\n  Result::setResult(outResult, result.code, result.message);\n  if (!result.isOk()) {\n    return nullptr;\n  }\n\n  return std::move(stages);\n}\n\nconst PlatformDevice& Device::getPlatformDevice() const noexcept {\n  return platformDevice_;\n}\n\nbool Device::isAppleGpu() const {\n#if IGL_PLATFORM_IOS\n  return true;\n#else\n  if (@available(macOS 10.15, *)) {\n    std::string gpuName = [device_.name UTF8String];\n    return gpuName.find(\"Apple\") != std::string::npos;\n  } else {\n    // Apple Macs didn't exist yet.\n    return false;\n  }\n#endif\n}\n\nbool Device::hasFeature(DeviceFeatures feature) const {\n  return deviceFeatureSet_.hasFeature(feature);\n}\n\nbool Device::hasRequirement(DeviceRequirement requirement) const {\n  return deviceFeatureSet_.hasRequirement(requirement);\n}\n\nbool Device::getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const {\n  return deviceFeatureSet_.getFeatureLimits(featureLimits, result);\n}\n\nICapabilities::TextureFormatCapabilities Device::getTextureFormatCapabilities(\n    TextureFormat format) const {\n  return deviceFeatureSet_.getTextureFormatCapabilities(format);\n}\n\nShaderVersion Device::getShaderVersion() const {\n  // From https://developer.apple.com/documentation/metal/mtllanguageversion\n  ShaderVersion version{.family = ShaderFamily::Metal};\n#if IGL_PLATFORM_IOS\n  if (@available(iOS 15, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 4;\n  } else if (@available(iOS 14, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 3;\n  } else if (@available(iOS 13, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 2;\n  } else if (@available(iOS 12, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 1;\n  } else if (@available(iOS 11, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 0;\n  } else if (@available(iOS 10, *)) {\n    version.majorVersion = 1;\n    version.minorVersion = 2;\n  } else if (@available(iOS 9, *)) {\n    version.majorVersion = 1;\n    version.minorVersion = 1;\n  }\n#elif IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST\n  if (@available(macOS 12.0, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 4;\n  } else if (@available(macOS 11.0, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 3;\n  } else if (@available(macOS 10.15, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 2;\n  } else if (@available(macOS 10.14, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 1;\n  } else if (@available(macOS 10.13, *)) {\n    version.majorVersion = 2;\n    version.minorVersion = 0;\n  } else if (@available(macOS 10.12, *)) {\n    version.majorVersion = 1;\n    version.minorVersion = 2;\n  } else if (@available(macOS 10.11, *)) {\n    version.majorVersion = 1;\n    version.minorVersion = 1;\n  }\n#endif\n  return version;\n}\n\nBackendVersion Device::getBackendVersion() const {\n  if (@available(macOS 13.0, iOS 16.0, *)) {\n    return {.flavor = BackendFlavor::Metal, .majorVersion = 3, .minorVersion = 0};\n  }\n#if TARGET_OS_OSX\n#if TARGET_CPU_ARM64\n  if (@available(macOS 10.13, iOS 11.0, *)) {\n    return {BackendFlavor::Metal, 2, 0};\n  }\n#else\n  if (@available(macOS 11.0, iOS 11.0, *)) {\n    return {BackendFlavor::Metal, 2, 0};\n  }\n#endif\n#endif\n\n  return {.flavor = BackendFlavor::Metal, .majorVersion = 1, .minorVersion = 0};\n}\n\nsize_t Device::getCurrentDrawCount() const {\n  return deviceStatistics_.getDrawCount();\n}\n\nsize_t Device::getShaderCompilationCount() const {\n  return deviceStatistics_.getShaderCompilationCount();\n}\n\nsize_t Device::getGPUMemoryUsage() const {\n  return [device_ currentAllocatedSize];\n}\n\nMTLStorageMode Device::toMTLStorageMode(ResourceStorage storage) {\n  switch (storage) {\n  case ResourceStorage::Private:\n    return MTLStorageModePrivate;\n  case ResourceStorage::Shared:\n    return MTLStorageModeShared;\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST\n  case ResourceStorage::Managed:\n  case ResourceStorage::Memoryless:\n  case ResourceStorage::Invalid:\n  default:\n    return MTLStorageModeManaged;\n#else\n  case ResourceStorage::Memoryless:\n    return MTLStorageModeMemoryless;\n  case ResourceStorage::Managed:\n  case ResourceStorage::Invalid:\n  default:\n    return MTLStorageModeShared;\n#endif\n  }\n}\n\nMTLResourceOptions Device::toMTLResourceStorageMode(ResourceStorage storage) {\n  switch (storage) {\n  case ResourceStorage::Private:\n    return MTLResourceStorageModePrivate;\n  case ResourceStorage::Shared:\n    return MTLResourceStorageModeShared;\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST\n  case ResourceStorage::Managed:\n  case ResourceStorage::Memoryless:\n  case ResourceStorage::Invalid:\n  default:\n    return MTLResourceStorageModeManaged;\n#else\n  case ResourceStorage::Memoryless:\n    return MTLResourceStorageModeMemoryless;\n  case ResourceStorage::Managed:\n  case ResourceStorage::Invalid:\n  default:\n    return MTLResourceStorageModeShared;\n#endif\n  }\n}\n\nstd::shared_ptr<ICommandQueue> Device::getMostRecentCommandQueue() const noexcept {\n  return mostRecentCommandQueue_;\n}\n\nHolder<BindGroupTextureHandle> Device::createBindGroup(\n    const BindGroupTextureDesc& desc,\n    const IRenderPipelineState* IGL_NULLABLE /*compatiblePipeline*/,\n    Result* IGL_NULLABLE outResult) {\n  IGL_DEBUG_ASSERT(!desc.debugName.empty(), \"Each bind group should have a debug name\");\n\n  BindGroupTextureDesc description(desc);\n\n  const auto handle = bindGroupTexturesPool.create(std::move(description));\n\n  Result::setResult(outResult,\n                    handle.empty() ? Result(Result::Code::RuntimeError, \"Cannot create bind group\")\n                                   : Result());\n\n  return {this, handle};\n}\n\nHolder<BindGroupBufferHandle> Device::createBindGroup(const BindGroupBufferDesc& desc,\n                                                      Result* IGL_NULLABLE outResult) {\n  IGL_DEBUG_ASSERT(!desc.debugName.empty(), \"Each bind group should have a debug name\");\n\n  BindGroupBufferDesc description(desc);\n\n  const auto handle = bindGroupBuffersPool.create(std::move(description));\n\n  Result::setResult(outResult,\n                    handle.empty() ? Result(Result::Code::RuntimeError, \"Cannot create bind group\")\n                                   : Result());\n\n  return {this, handle};\n}\n\nvoid Device::destroy(BindGroupTextureHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n\n  bindGroupTexturesPool.destroy(handle);\n}\n\nvoid Device::destroy(BindGroupBufferHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n\n  bindGroupBuffersPool.destroy(handle);\n}\n\nvoid Device::destroy(SamplerHandle handle) {\n  (void)handle;\n  // IGL/Metal is not using sampler handles\n}\n\nbase::IFramebufferInterop* IGL_NULLABLE\nDevice::createFramebufferInterop(const base::FramebufferInteropDesc& desc) {\n  auto framebuffer = createFramebufferFromBaseDesc(desc);\n  if (!framebuffer) {\n    return nullptr;\n  }\n  return new (std::nothrow) FramebufferWrapper(std::move(framebuffer));\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/DeviceFeatureSet.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Metal/Metal.h>\n#include <igl/DeviceFeatures.h>\n\nnamespace igl::metal {\n\nclass DeviceFeatureSet final {\n public:\n  explicit DeviceFeatureSet(id<MTLDevice> device);\n  ~DeviceFeatureSet() = default;\n\n  [[nodiscard]] bool hasFeature(DeviceFeatures feature) const;\n\n  [[nodiscard]] bool hasRequirement(DeviceRequirement requirement) const;\n\n  bool getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const;\n\n  [[nodiscard]] ICapabilities::TextureFormatCapabilities getTextureFormatCapabilities(\n      TextureFormat format) const;\n\n private:\n  // Apple GPU family as defined by MTLGPUFamily and the docs:\n  //   https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf\n  // Apple2: iOS: A8\n  // Apple3: iOS: A9, A10\n  // Apple4: iOS: A11\n  // Apple5: iOS: A12\n  // Apple6: iOS: A13\n  // Apple7: iOS: A14         Mac: M1\n  // Apple8: iOS: A15, A16    Mac: M2\n  // Apple9: iOS: A16         Mac: M3\n  //\n  // MTLGPUFamily enum isn't available until macos(10.15), ios(13.0)\n  // also MTLGPUFamily includes enum values that don't directly correspond to a GPU\n  // so we use an integer representation that maps to Apple GPU family 2+\n  size_t gpuFamily_;\n\n  size_t maxMultisampleCount_;\n  size_t maxBufferLength_;\n  bool supports32BitFloatFiltering_ = false;\n  bool supportsTimestampQueries_ = false;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/DeviceFeatureSet.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/DeviceFeatureSet.h>\n\n#include <vector>\n\n// get the GPU family from the device\n// a return value of 0 indicates an error or lack of a supported GPU\nstatic size_t getGPUFamily(id<MTLDevice> device) {\n  // the new supportsFamily API is applicable to both iOS and macOS\n  if (@available(macOS 10.15, iOS 13.0, *)) {\n    using GPUFamilyPair = std::pair<MTLGPUFamily, size_t>;\n    const std::vector<GPUFamilyPair> gpuFamilies = {\n        // @fb-only\n        // @fb-only\n        {MTLGPUFamilyApple8, 8},\n        {MTLGPUFamilyApple7, 7},\n        {MTLGPUFamilyApple6, 6},\n        {MTLGPUFamilyApple5, 5},\n        {MTLGPUFamilyApple4, 4},\n        {MTLGPUFamilyApple3, 3},\n        {MTLGPUFamilyApple2, 2},\n        {MTLGPUFamilyApple1, 1}};\n\n    // return the first (highest) supported GPU family\n    for (const GPUFamilyPair& gpuFam : gpuFamilies) {\n      if ([device supportsFamily:gpuFam.first]) {\n        return gpuFam.second;\n      }\n    }\n  } else {\n    // resort to the old deprecated API supportsFeatureSet for older OS versions\n    using FeatureSetPair = std::pair<MTLFeatureSet, size_t>;\n    std::vector<FeatureSetPair> featureSets;\n\n#if IGL_PLATFORM_IOS\n    if (@available(iOS 12, *)) {\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily5_v1, 5);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily4_v2, 4);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily3_v4, 3);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily2_v5, 2);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily1_v5, 1);\n    } else if (@available(iOS 11, *)) {\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily4_v1, 4);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily3_v3, 3);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily2_v4, 2);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily1_v4, 1);\n    } else if (@available(iOS 10, *)) {\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily3_v2, 3);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily2_v3, 2);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily1_v3, 1);\n    } else if (@available(iOS 9, *)) {\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily3_v1, 3);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily2_v2, 2);\n      featureSets.emplace_back(MTLFeatureSet_iOS_GPUFamily1_v2, 1);\n    } else {\n      IGL_DEBUG_ABORT(\"IGL iOS deployment target is 9.0+\");\n      return 0;\n    }\n#elif IGL_PLATFORM_MACOSX\n    if (@available(macOS 10.14, *)) {\n      featureSets.emplace_back(MTLFeatureSet_macOS_GPUFamily2_v1, 2);\n      featureSets.emplace_back(MTLFeatureSet_macOS_GPUFamily1_v4, 1);\n    } else if (@available(macOS 10.13, *)) {\n      featureSets.emplace_back(MTLFeatureSet_macOS_GPUFamily1_v3, 1);\n    } else if (@available(macOS 10.12, *)) {\n      featureSets.emplace_back(MTLFeatureSet_macOS_GPUFamily1_v2, 1);\n    } else if (@available(macOS 10.11, *)) {\n      featureSets.emplace_back(MTLFeatureSet_macOS_GPUFamily1_v1, 1);\n    } else {\n      IGL_DEBUG_ABORT(\"IGL macOS deployment target is 10.11+\");\n      return 0;\n    }\n#endif\n\n    // return the first (highest) supported GPU family\n    for (const FeatureSetPair& featureSet : featureSets) {\n      if ([device supportsFeatureSet:featureSet.first]) {\n        return featureSet.second;\n      }\n    }\n  }\n\n  IGL_LOG_INFO(\"No supported GPU family available\");\n  return 0;\n}\n\nnamespace igl::metal {\n\nDeviceFeatureSet::DeviceFeatureSet(id<MTLDevice> device) {\n  gpuFamily_ = getGPUFamily(device);\n\n  // Get the supported MSAA\n  maxMultisampleCount_ = 0;\n  for (auto i = 1; i <= IGL_TEXTURE_SAMPLERS_MAX; i *= 2) {\n    if ([device supportsTextureSampleCount:i]) {\n      maxMultisampleCount_ = i;\n    } else {\n      break;\n    }\n  }\n\n  // get max buffer length\n  maxBufferLength_ = [device maxBufferLength];\n\n  if (@available(macOS 11.0, iOS 14.0, *)) {\n    // this API became available as of iOS 14 and macOS 11\n    supports32BitFloatFiltering_ = device.supports32BitFloatFiltering;\n  }\n\n  if (@available(macOS 10.15, iOS 14.0, *)) {\n    for (id<MTLCounterSet> counterSet = nullptr in device.counterSets) {\n      if ([counterSet.name isEqualToString:MTLCommonCounterSetTimestamp]) {\n        supportsTimestampQueries_ = true;\n        break;\n      }\n    }\n  }\n}\n\nbool DeviceFeatureSet::hasFeature(DeviceFeatures feature) const {\n  // Metal supports all the basic features on iOS9.0+\n  // see reference https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf\n  // For more advanced features, use gpu family and version to determine availability\n  switch (feature) {\n  case DeviceFeatures::MultiSample:\n  case DeviceFeatures::MultiSampleResolve:\n  case DeviceFeatures::TextureFilterAnisotropic:\n  case DeviceFeatures::MapBufferRange:\n  case DeviceFeatures::MultipleRenderTargets:\n  case DeviceFeatures::StandardDerivative:\n  case DeviceFeatures::TextureFormatRG:\n  case DeviceFeatures::ReadWriteFramebuffer:\n  case DeviceFeatures::TextureNotPot:\n  case DeviceFeatures::TextureHalfFloat:\n  case DeviceFeatures::TextureFloat:\n  case DeviceFeatures::ShaderTextureLod:\n  case DeviceFeatures::DepthShaderRead:\n  case DeviceFeatures::MinMaxBlend:\n  case DeviceFeatures::UniformBlocks:\n  case DeviceFeatures::ExplicitBinding:\n  case DeviceFeatures::Texture2DArray:\n  case DeviceFeatures::Texture3D:\n  case DeviceFeatures::SRGB:\n  case DeviceFeatures::SRGBSwapchain:\n  case DeviceFeatures::DrawFirstIndexFirstVertex:\n  case DeviceFeatures::DrawIndexedIndirect:\n    return true;\n  case DeviceFeatures::MeshShaders:\n    if (@available(iOS 16, macOS 13, *)) {\n      // check if the device supports mesh shaders\n      // mesh shaders require Apple GPU Family 7 or higher (A14/M1 and later)\n      return gpuFamily_ >= 7;\n    } else {\n      return false;\n    }\n  case DeviceFeatures::DrawInstanced:\n    return gpuFamily_ >= 3;\n  case DeviceFeatures::CopyBuffer:\n    return false; // not implemented (yet)\n  case DeviceFeatures::Indices8Bit:\n    return false;\n  // on Metal and Vulkan, the framebuffer pixel format dictates sRGB control.\n  case DeviceFeatures::SRGBWriteControl:\n    return false;\n  // No current Metal devices support packed, uncompressed RGB textures.\n  case DeviceFeatures::TextureFormatRGB:\n    return false;\n  case DeviceFeatures::ExplicitBindingExt:\n  case DeviceFeatures::StandardDerivativeExt:\n  case DeviceFeatures::ShaderTextureLodExt:\n    return false;\n  case DeviceFeatures::DepthCompare:\n    /// docs say:\n    ///  The MTLFeatureSet_iOS_GPUFamily2_v1 and MTLFeatureSet_OSX_GPUFamily1_v1 feature sets allow\n    ///  you to define a framework-side sampler comparison function for a MTLSamplerState object.\n    ///  All feature sets support shader-side sampler comparison functions, as described in the\n    ///  Metal Shading Language Guide.\n#if IGL_PLATFORM_IOS\n    return gpuFamily_ >= 2;\n#else\n    return gpuFamily_ >= 1;\n#endif\n  case DeviceFeatures::TextureExternalImage:\n    return false;\n  case DeviceFeatures::Compute:\n    return true;\n  case DeviceFeatures::TextureBindless:\n    return false;\n  case DeviceFeatures::BufferDeviceAddress:\n    return false;\n  case DeviceFeatures::Multiview:\n  case DeviceFeatures::MultiViewMultisample:\n    return false;\n  case DeviceFeatures::BindUniform:\n    return false;\n  case DeviceFeatures::TexturePartialMipChain:\n    return true;\n  case DeviceFeatures::BufferRing:\n    return true;\n  case DeviceFeatures::BufferNoCopy:\n    return true;\n  case DeviceFeatures::StorageBuffers:\n    return true;\n  case DeviceFeatures::ShaderLibrary:\n    return true;\n  case DeviceFeatures::BindBytes:\n    return true;\n  case DeviceFeatures::TextureArrayExt:\n    return false;\n  case DeviceFeatures::SamplerMinMaxLod:\n    return true;\n  case DeviceFeatures::ValidationLayersEnabled:\n    return false;\n  case DeviceFeatures::ExternalMemoryObjects:\n    return false;\n  case DeviceFeatures::PushConstants:\n    return false;\n  case DeviceFeatures::TextureViews:\n    return false;\n  case DeviceFeatures::Timers:\n    return true;\n  case DeviceFeatures::TimestampQueries:\n    return supportsTimestampQueries_;\n  }\n  return false;\n}\n\nbool DeviceFeatureSet::hasRequirement(DeviceRequirement requirement) const {\n  switch (requirement) {\n  case DeviceRequirement::ExplicitBindingExtReq:\n  case DeviceRequirement::StandardDerivativeExtReq:\n  case DeviceRequirement::TextureArrayExtReq:\n  case DeviceRequirement::TextureFormatRGExtReq:\n  case DeviceRequirement::ShaderTextureLodExtReq:\n    return false;\n  }\n  return true;\n}\n\n// iOS 9 plus implementation\nbool DeviceFeatureSet::getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const {\n  switch (featureLimits) {\n  case DeviceFeatureLimits::MaxTextureDimension1D2D:\n  case DeviceFeatureLimits::MaxCubeMapDimension:\n#if IGL_PLATFORM_IOS\n    result = (gpuFamily_ <= 2) ? 8192 : 16384;\n#else // macos\n    result = 16384;\n#endif\n    return true;\n  case DeviceFeatureLimits::MaxFragmentUniformVectors:\n    // According to Metal gurus, this should be identical to MaxVertexUniformVectors\n  case DeviceFeatureLimits::MaxVertexUniformVectors:\n    // MaxVertexUniformVectors = number of vec4\n    {\n      const size_t maxBuffers = 31;\n      result = (maxBuffers * maxBufferLength_) / (sizeof(float) * 4);\n      return true;\n    }\n  case DeviceFeatureLimits::MaxMultisampleCount:\n    result = maxMultisampleCount_;\n    return true;\n  case DeviceFeatureLimits::MaxPushConstantBytes:\n    result = 4096;\n    return true;\n  case DeviceFeatureLimits::MaxStorageBufferBytes:\n  case DeviceFeatureLimits::MaxUniformBufferBytes:\n    result = maxBufferLength_;\n    return true;\n  case DeviceFeatureLimits::PushConstantsAlignment:\n    result = 16;\n    return true;\n  case DeviceFeatureLimits::ShaderStorageBufferOffsetAlignment:\n  case DeviceFeatureLimits::BufferAlignment: {\n    // Since IGL currently doesn't distinguish how buffers are being used, for consistency reasons,\n    // we currently assume BufferAlignment means Constant Buffer offset alignment\n#if IGL_PLATFORM_MACOSX\n    result = 32;\n#elif IGL_PLATFORM_IOS_SIMULATOR\n    result = 256;\n#else\n    result = 16;\n#endif\n    return true;\n  }\n  case DeviceFeatureLimits::BufferNoCopyAlignment: {\n    IGL_DEBUG_ASSERT(getpagesize() > 0);\n    result = static_cast<size_t>(getpagesize());\n    return true;\n  }\n  case DeviceFeatureLimits::MaxBindBytesBytes:\n    result = 4096;\n    return true;\n  case DeviceFeatureLimits::MaxTextureDimension3D:\n#if IGL_PLATFORM_IOS\n    result = (gpuFamily_ <= 2) ? 2048 : 2048;\n#else\n    result = 2048;\n#endif\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeX:\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeY:\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeZ:\n    result = 1024;\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupInvocations:\n    result = 1024;\n    return true;\n  case DeviceFeatureLimits::MaxVertexInputAttributes:\n    result = 31;\n    return true;\n  case DeviceFeatureLimits::MaxColorAttachments:\n    result = 8;\n    return true;\n  default:\n    IGL_DEBUG_ABORT(\n        \"invalid feature limit query: feature limit query is not implemented or does not exist\\n\");\n    return false;\n  }\n}\n\nICapabilities::TextureFormatCapabilities DeviceFeatureSet::getTextureFormatCapabilities(\n    TextureFormat format) const {\n  const auto all = ICapabilities::TextureFormatCapabilityBits::All;\n  const auto sampled = ICapabilities::TextureFormatCapabilityBits::Sampled;\n  const auto attachment = ICapabilities::TextureFormatCapabilityBits::Attachment;\n  const auto storage = ICapabilities::TextureFormatCapabilityBits::Storage;\n  const auto sampledFiltered = ICapabilities::TextureFormatCapabilityBits::SampledFiltered;\n  const auto sampledAttachment = ICapabilities::TextureFormatCapabilityBits::SampledAttachment;\n  const auto unsupported = ICapabilities::TextureFormatCapabilityBits::Unsupported;\n\n  switch (format) {\n  case TextureFormat::Invalid:\n    return unsupported;\n\n    // 8 bpp\n  case TextureFormat::A_UNorm8:\n    return sampled;\n  case TextureFormat::R_UNorm8:\n    return all;\n\n    // 16 bpp\n  case TextureFormat::R_F16:\n    return all;\n  case TextureFormat::R_UInt16:\n    return sampled | storage | attachment | sampledAttachment;\n  case TextureFormat::R_UNorm16:\n    return all;\n  case TextureFormat::B5G5R5A1_UNorm:\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST || IGL_PLATFORM_IOS_SIMULATOR\n    return unsupported;\n#else\n    return sampled | attachment | sampledAttachment;\n#endif\n  case TextureFormat::B5G6R5_UNorm:\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST || IGL_PLATFORM_IOS_SIMULATOR\n    return unsupported;\n#else\n    return sampled | attachment | sampledAttachment;\n#endif\n  case TextureFormat::ABGR_UNorm4:\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST || IGL_PLATFORM_IOS_SIMULATOR\n    return unsupported;\n#else\n    return sampled | attachment | sampledAttachment;\n#endif\n\n  case TextureFormat::RG_UNorm8:\n    return all;\n  case TextureFormat::R4G2B2_UNorm_Apple:\n    return sampled;\n  case TextureFormat::R4G2B2_UNorm_Rev_Apple:\n    return sampled;\n  case TextureFormat::RGBA_UNorm8:\n  case TextureFormat::BGRA_UNorm8:\n  case TextureFormat::RGB10_A2_UNorm_Rev:\n  case TextureFormat::BGR10_A2_Unorm:\n  case TextureFormat::RGBA_SRGB:\n  case TextureFormat::BGRA_SRGB:\n    return all;\n  case TextureFormat::RGB10_A2_Uint_Rev:\n    return (sampled | storage | attachment | sampledAttachment);\n\n    // 32 bpp\n  case TextureFormat::RG_F16:\n    return all;\n  case TextureFormat::RG_UInt16:\n    return sampled | storage | attachment | sampledAttachment;\n  case TextureFormat::RG_UNorm16:\n    return all;\n  case TextureFormat::R_F32:\n    return sampled | storage | attachment | sampledAttachment |\n           (supports32BitFloatFiltering_ ? sampledFiltered : 0);\n  case TextureFormat::R_UInt32:\n    return sampled | storage | attachment | sampledAttachment;\n\n    // 64 bpp\n  case TextureFormat::RGBA_UNorm16:\n    return all;\n  case TextureFormat::RGBA_F16:\n    return all;\n  case TextureFormat::RG_F32:\n    return sampled | storage | attachment | sampledAttachment |\n           (supports32BitFloatFiltering_ ? sampledFiltered : 0);\n\n    // 96 bpp\n  case TextureFormat::RGB_F32:\n    return unsupported;\n  // 128 bps\n  case TextureFormat::RGBA_UInt32:\n    return sampled | storage | attachment | sampledAttachment;\n  case TextureFormat::RGBA_F32:\n    return sampled | storage | attachment | sampledAttachment |\n           (supports32BitFloatFiltering_ ? sampledFiltered : 0);\n    // Compressed formats\n\n  case TextureFormat::RGBA_ASTC_4x4:\n  case TextureFormat::SRGB8_A8_ASTC_4x4:\n  case TextureFormat::RGBA_ASTC_5x4:\n  case TextureFormat::SRGB8_A8_ASTC_5x4:\n  case TextureFormat::RGBA_ASTC_5x5:\n  case TextureFormat::SRGB8_A8_ASTC_5x5:\n  case TextureFormat::RGBA_ASTC_6x5:\n  case TextureFormat::SRGB8_A8_ASTC_6x5:\n  case TextureFormat::RGBA_ASTC_6x6:\n  case TextureFormat::SRGB8_A8_ASTC_6x6:\n  case TextureFormat::RGBA_ASTC_8x5:\n  case TextureFormat::SRGB8_A8_ASTC_8x5:\n  case TextureFormat::RGBA_ASTC_8x6:\n  case TextureFormat::SRGB8_A8_ASTC_8x6:\n  case TextureFormat::RGBA_ASTC_8x8:\n  case TextureFormat::SRGB8_A8_ASTC_8x8:\n  case TextureFormat::RGBA_ASTC_10x5:\n  case TextureFormat::SRGB8_A8_ASTC_10x5:\n  case TextureFormat::RGBA_ASTC_10x6:\n  case TextureFormat::SRGB8_A8_ASTC_10x6:\n  case TextureFormat::RGBA_ASTC_10x8:\n  case TextureFormat::SRGB8_A8_ASTC_10x8:\n  case TextureFormat::RGBA_ASTC_10x10:\n  case TextureFormat::SRGB8_A8_ASTC_10x10:\n  case TextureFormat::RGBA_ASTC_12x10:\n  case TextureFormat::SRGB8_A8_ASTC_12x10:\n  case TextureFormat::RGBA_ASTC_12x12:\n  case TextureFormat::SRGB8_A8_ASTC_12x12:\n#if TARGET_OS_OSX\n    return unsupported;\n#else\n    if (gpuFamily_ >= 2) {\n      return sampled;\n    } else {\n      return unsupported;\n    }\n#endif\n\n  case TextureFormat::RGBA_PVRTC_2BPPV1:\n  case TextureFormat::RGB_PVRTC_2BPPV1:\n  case TextureFormat::RGBA_PVRTC_4BPPV1:\n  case TextureFormat::RGB_PVRTC_4BPPV1:\n#if TARGET_OS_OSX\n    return unsupported;\n#else\n    return sampled;\n#endif\n\n  case TextureFormat::RGB8_ETC2:\n  case TextureFormat::RGBA8_EAC_ETC2:\n#if TARGET_OS_OSX\n    return unsupported;\n#else\n    return sampled;\n#endif\n\n  case TextureFormat::RGBA_BC7_UNORM_4x4:\n  case TextureFormat::RGBA_BC7_SRGB_4x4:\n\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST\n    return sampled;\n#else\n    return unsupported;\n#endif\n\n    // Depth and stencil formats\n\n  case TextureFormat::Z_UNorm16:\n    // This exists in Metal, but we unconditionally force it to Depth32Float\n    return sampled | sampledFiltered | attachment | sampledAttachment;\n\n  case TextureFormat::Z_UNorm24:\n    // This doesn't exist in Metal, but we map it to Depth32Float\n    return sampled | attachment | sampledAttachment;\n\n  case TextureFormat::Z_UNorm32:\n    // This doesn't exist in Metal, but we map it to Depth32Float\n    return sampled | attachment | sampledAttachment;\n\n  case TextureFormat::S8_UInt_Z24_UNorm:\n    // This exists in Metal for macOS, but we unconditionally force it to Depth32Float_Stencil8\n#if TARGET_OS_OSX\n    return sampled | attachment | sampledAttachment;\n#else\n    return sampled;\n#endif\n\n  case TextureFormat::S8_UInt_Z32_UNorm:\n#if TARGET_OS_OSX\n    return sampled | attachment | sampledAttachment;\n#else\n    return sampled;\n#endif\n\n  case TextureFormat::S_UInt8:\n    return sampled | attachment | sampledAttachment;\n\n  // Formats with no support in IGL Metal\n  case TextureFormat::L_UNorm8:\n  case TextureFormat::LA_UNorm8:\n  case TextureFormat::R5G5B5A1_UNorm:\n  case TextureFormat::RGBX_UNorm8:\n  case TextureFormat::BGRA_UNorm8_Rev:\n  case TextureFormat::RGB_F16:\n  case TextureFormat::RGB8_ETC1:\n  case TextureFormat::RGB8_Punchthrough_A1_ETC2:\n  case TextureFormat::SRGB8_ETC2:\n  case TextureFormat::SRGB8_Punchthrough_A1_ETC2:\n  case TextureFormat::SRGB8_A8_EAC_ETC2:\n  case TextureFormat::RG_EAC_UNorm:\n  case TextureFormat::RG_EAC_SNorm:\n  case TextureFormat::R_EAC_UNorm:\n  case TextureFormat::R_EAC_SNorm:\n  case TextureFormat::YUV_NV12:\n  case TextureFormat::YUV_420p:\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n    return unsupported;\n  }\n  return unsupported;\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/DeviceStatistics.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <atomic>\n#include <cstddef>\n#include <cstdint>\n\nnamespace igl::metal {\n\nclass DeviceStatistics {\n public:\n  [[nodiscard]] size_t getDrawCount() const noexcept;\n  [[nodiscard]] size_t getShaderCompilationCount() const noexcept;\n\n private:\n  friend class CommandQueue;\n  friend class Device;\n  void incrementDrawCount(uint32_t newDrawCount) noexcept;\n  void incrementShaderCompilationCount() noexcept;\n\n  std::atomic<size_t> currentDrawCount_{0};\n  std::atomic<size_t> shaderCompilationCount_{0};\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/DeviceStatistics.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/DeviceStatistics.h>\n\nnamespace igl::metal {\n\nvoid DeviceStatistics::incrementDrawCount(uint32_t newDrawCount) noexcept {\n  currentDrawCount_.fetch_add(newDrawCount, std::memory_order_relaxed);\n}\n\nsize_t DeviceStatistics::getDrawCount() const noexcept {\n  return currentDrawCount_.load(std::memory_order_relaxed);\n}\n\nvoid DeviceStatistics::incrementShaderCompilationCount() noexcept {\n  shaderCompilationCount_.fetch_add(1, std::memory_order_relaxed);\n}\n\nsize_t DeviceStatistics::getShaderCompilationCount() const noexcept {\n  return shaderCompilationCount_.load(std::memory_order_relaxed);\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Framebuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Framebuffer.h>\n\n@protocol MTLTexture;\n\nnamespace igl::metal {\n\nclass Framebuffer : public IFramebuffer {\n public:\n  explicit Framebuffer(FramebufferDesc value);\n  ~Framebuffer() override = default;\n\n  // Accessors\n  [[nodiscard]] std::vector<size_t> getColorAttachmentIndices() const override;\n  [[nodiscard]] std::shared_ptr<ITexture> getColorAttachment(size_t index) const override;\n  [[nodiscard]] std::shared_ptr<ITexture> getResolveColorAttachment(size_t index) const override;\n  [[nodiscard]] std::shared_ptr<ITexture> getDepthAttachment() const override;\n  [[nodiscard]] std::shared_ptr<ITexture> getResolveDepthAttachment() const override;\n  [[nodiscard]] std::shared_ptr<ITexture> getStencilAttachment() const override;\n  [[nodiscard]] FramebufferMode getMode() const override;\n  [[nodiscard]] bool isSwapchainBound() const override;\n\n  // Methods\n  void copyBytesColorAttachment(ICommandQueue& cmdQueue,\n                                size_t index,\n                                void* pixelBytes,\n                                const TextureRangeDesc& range,\n                                size_t bytesPerRow = 0) const override;\n\n  void copyBytesDepthAttachment(ICommandQueue& cmdQueue,\n                                void* pixelBytes,\n                                const TextureRangeDesc& range,\n                                size_t bytesPerRow = 0) const override;\n\n  void copyBytesStencilAttachment(ICommandQueue& cmdQueue,\n                                  void* pixelBytes,\n                                  const TextureRangeDesc& range,\n                                  size_t bytesPerRow = 0) const override;\n\n  void copyTextureColorAttachment(ICommandQueue& cmdQueue,\n                                  size_t index,\n                                  std::shared_ptr<ITexture> destTexture,\n                                  const TextureRangeDesc& range) const override;\n\n  void updateDrawable(std::shared_ptr<ITexture> texture) override;\n  void updateDrawable(SurfaceTextures surfaceTextures) override;\n  void updateResolveAttachment(std::shared_ptr<ITexture> texture) override;\n\n  IGL_INLINE const FramebufferDesc& get() const {\n    return value_;\n  }\n\n private:\n  void copyBytes(ICommandQueue& cmdQueue,\n                 const std::shared_ptr<ITexture>& iglTexture,\n                 void* pixelBytes,\n                 const TextureRangeDesc& range,\n                 size_t bytesPerRow) const;\n  virtual bool canCopy(ICommandQueue& cmdQueue,\n                       id<MTLTexture> texture,\n                       const TextureRangeDesc& range) const = 0;\n\n  FramebufferDesc value_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Framebuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/Framebuffer.h>\n\n#include <utility>\n#include <vector>\n#include <igl/metal/CommandQueue.h>\n#include <igl/metal/Device.h>\n#include <igl/metal/Texture.h>\n\nnamespace igl::metal {\n\nFramebuffer::Framebuffer(FramebufferDesc value) : value_(std::move(value)) {}\n\nstd::vector<size_t> Framebuffer::getColorAttachmentIndices() const {\n  std::vector<size_t> indices;\n\n  for (size_t i = 0; i != IGL_COLOR_ATTACHMENTS_MAX; i++) {\n    if (value_.colorAttachments[i].texture || value_.colorAttachments[i].resolveTexture) {\n      indices.push_back(i);\n    }\n  }\n\n  return indices;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getColorAttachment(size_t index) const {\n  IGL_DEBUG_ASSERT(index < IGL_COLOR_ATTACHMENTS_MAX);\n  return value_.colorAttachments[index].texture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getResolveColorAttachment(size_t index) const {\n  IGL_DEBUG_ASSERT(index < IGL_COLOR_ATTACHMENTS_MAX);\n  return value_.colorAttachments[index].resolveTexture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getDepthAttachment() const {\n  return value_.depthAttachment.texture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getResolveDepthAttachment() const {\n  return value_.depthAttachment.resolveTexture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getStencilAttachment() const {\n  return value_.stencilAttachment.texture;\n}\n\nbool Framebuffer::isSwapchainBound() const {\n  if (auto tex = getColorAttachment(0)) {\n    return tex->isSwapchainTexture();\n  }\n  return false;\n}\n\nvoid Framebuffer::copyBytesColorAttachment(ICommandQueue& cmdQueue,\n                                           size_t index,\n                                           void* pixelBytes,\n                                           const TextureRangeDesc& range,\n                                           size_t bytesPerRow) const {\n  IGL_DEBUG_ASSERT(index < IGL_COLOR_ATTACHMENTS_MAX);\n  IGL_DEBUG_ASSERT(range.numFaces == 1, \"range.numFaces MUST be 1\");\n  IGL_DEBUG_ASSERT(range.numLayers == 1, \"range.numLayers MUST be 1\");\n  IGL_DEBUG_ASSERT(range.numMipLevels == 1, \"range.numMipLevels MUST be 1\");\n  const auto& colorAttachment = value_.colorAttachments[index];\n\n  if (IGL_DEBUG_VERIFY(colorAttachment.texture != nullptr)) {\n    auto texture = colorAttachment.texture;\n    copyBytes(cmdQueue, texture, pixelBytes, range, bytesPerRow);\n  }\n}\n\nvoid Framebuffer::copyBytesDepthAttachment(ICommandQueue& cmdQueue,\n                                           void* pixelBytes,\n                                           const TextureRangeDesc& range,\n                                           size_t bytesPerRow) const {\n  auto texture = value_.depthAttachment.texture;\n  copyBytes(cmdQueue, texture, pixelBytes, range, bytesPerRow);\n}\n\nvoid Framebuffer::copyBytesStencilAttachment(ICommandQueue& cmdQueue,\n                                             void* pixelBytes,\n                                             const TextureRangeDesc& range,\n                                             size_t bytesPerRow) const {\n  auto texture = value_.stencilAttachment.texture;\n  copyBytes(cmdQueue, texture, pixelBytes, range, bytesPerRow);\n}\n\n/// copyTextureColorAttachment\n///\n/// This function does not do any cross-queue synchronization. At the time\n/// of writing, we are assuming IGL operates on one queue per context\nvoid Framebuffer::copyTextureColorAttachment(ICommandQueue& cmdQueue,\n                                             size_t index,\n                                             std::shared_ptr<ITexture> destTexture,\n                                             const TextureRangeDesc& range) const {\n  IGL_DEBUG_ASSERT(index < IGL_COLOR_ATTACHMENTS_MAX);\n  const auto& colorAttachment = value_.colorAttachments[index];\n\n  if (IGL_DEBUG_VERIFY(colorAttachment.texture != nullptr)) {\n    auto srcTexture = colorAttachment.texture;\n    id<MTLTexture> srcMtlTexture = static_cast<Texture&>(*srcTexture).get();\n    id<MTLTexture> dstMtlTexture = static_cast<Texture&>(*destTexture).get();\n    if (IGL_DEBUG_VERIFY(srcMtlTexture && dstMtlTexture)) {\n      auto iglMtlCmdQueue = static_cast<CommandQueue&>(cmdQueue);\n\n      id<MTLCommandBuffer> cmdBuf = [iglMtlCmdQueue.get() commandBuffer];\n      id<MTLBlitCommandEncoder> blitEncoder = [cmdBuf blitCommandEncoder];\n\n      // NOLINTNEXTLINE(clang-analyzer-nullability.NullabilityBase)\n      [blitEncoder copyFromTexture:srcMtlTexture\n                       sourceSlice:range.layer\n                       sourceLevel:range.mipLevel\n                      sourceOrigin:MTLOriginMake(range.x, range.y, 0)\n                        sourceSize:MTLSizeMake(range.width, range.height, 1)\n                         toTexture:dstMtlTexture\n                  destinationSlice:range.layer\n                  destinationLevel:range.mipLevel\n                 destinationOrigin:MTLOriginMake(range.x, range.y, 0)];\n      [blitEncoder endEncoding];\n      [cmdBuf commit];\n    }\n  }\n}\n\nvoid Framebuffer::copyBytes(ICommandQueue& cmdQueue,\n                            const std::shared_ptr<ITexture>& iglTexture,\n                            void* pixelBytes,\n                            const TextureRangeDesc& range,\n                            size_t bytesPerRow) const {\n  auto mtlTexture = std::static_pointer_cast<Texture>(iglTexture);\n  if (bytesPerRow == 0) {\n    bytesPerRow = iglTexture->getProperties().getBytesPerRow(range);\n  }\n  if (canCopy(cmdQueue, mtlTexture->get(), range)) {\n    mtlTexture->getBytes(range, pixelBytes, bytesPerRow);\n  } else {\n    auto& mtlCommandQueue = static_cast<CommandQueue&>(cmdQueue);\n    auto& mtlDevice = mtlCommandQueue.getDevice();\n\n    // Once Intel Mac support is EOL remove the isAppleGpu() check and also the\n    // sychronizeTexture call below.\n    Result result;\n    const TextureDesc desc{\n        .width = iglTexture->getDimensions().width,\n        .height = iglTexture->getDimensions().height,\n        .format = iglTexture->getProperties().format,\n        .type = iglTexture->getType(),\n        .storage = mtlDevice.isAppleGpu() ? ResourceStorage::Shared : ResourceStorage::Managed,\n        .debugName = \"stageTexture\",\n    };\n\n    // 1. Create a shared stage texture\n    auto stageTexture = mtlDevice.createTexture(desc, &result);\n\n    if (!IGL_DEBUG_VERIFY(stageTexture && result.isOk())) {\n      return;\n    }\n\n    // 2. Copy data from the private texture to the stage texture by MTLBlitCommandEncoder\n    id<MTLTexture> srcMtlTexture = static_cast<Texture&>(*iglTexture).get();\n    id<MTLTexture> dstMtlTexture = static_cast<Texture&>(*stageTexture).get();\n    if (IGL_DEBUG_VERIFY(srcMtlTexture && dstMtlTexture)) {\n      auto iglMtlCmdQueue = static_cast<CommandQueue&>(cmdQueue);\n\n      id<MTLCommandBuffer> cmdBuf = [iglMtlCmdQueue.get() commandBuffer];\n      id<MTLBlitCommandEncoder> blitEncoder = [cmdBuf blitCommandEncoder];\n\n      // NOLINTNEXTLINE(clang-analyzer-nullability.NullabilityBase)\n      [blitEncoder copyFromTexture:srcMtlTexture\n                       sourceSlice:range.layer\n                       sourceLevel:range.mipLevel\n                      sourceOrigin:MTLOriginMake(range.x, range.y, 0)\n                        sourceSize:MTLSizeMake(range.width, range.height, 1)\n                         toTexture:dstMtlTexture\n                  destinationSlice:range.layer\n                  destinationLevel:range.mipLevel\n                 destinationOrigin:MTLOriginMake(range.x, range.y, 0)];\n\n#if IGL_PLATFORM_MACOSX\n      if (desc.storage == ResourceStorage::Managed) {\n        [blitEncoder synchronizeTexture:dstMtlTexture slice:range.layer level:range.mipLevel];\n      }\n#endif\n\n      [blitEncoder endEncoding];\n      [cmdBuf commit];\n      [cmdBuf waitUntilCompleted];\n    }\n\n    // 3. Read data from the shared stage texture\n    auto& mtlStageTexture = static_cast<Texture&>(*stageTexture);\n    mtlStageTexture.getBytes(range, pixelBytes, bytesPerRow);\n  }\n}\n\nvoid Framebuffer::updateDrawable(std::shared_ptr<ITexture> texture) {\n  if (getColorAttachment(0) != texture) {\n    if (!texture) {\n      value_.colorAttachments[0] = {};\n    } else {\n      value_.colorAttachments[0].texture = std::move(texture);\n    }\n  }\n}\n\nvoid Framebuffer::updateDrawable(SurfaceTextures surfaceTextures) {\n  updateDrawable(std::move(surfaceTextures.color));\n  if (surfaceTextures.depth && surfaceTextures.depth->getProperties().hasStencil()) {\n    if (getStencilAttachment() != surfaceTextures.depth) {\n      value_.stencilAttachment.texture = surfaceTextures.depth;\n    }\n  } else {\n    value_.stencilAttachment.texture = nullptr;\n  }\n  if (getDepthAttachment() != surfaceTextures.depth) {\n    value_.depthAttachment.texture = std::move(surfaceTextures.depth);\n  }\n}\n\nvoid Framebuffer::updateResolveAttachment(std::shared_ptr<ITexture> texture) {\n  if (getResolveColorAttachment(0) != texture) {\n    value_.colorAttachments[0].resolveTexture = std::move(texture);\n  }\n}\n\nFramebufferMode Framebuffer::getMode() const {\n  return value_.mode;\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Device.h>\n#include <igl/HWDevice.h>\n\n#ifdef __OBJC__\n#include <igl/metal/Device.h>\n\n@protocol MTLDevice;\n#endif\n\nnamespace igl::metal {\n\nclass HWDevice {\n public:\n  /// Enumerate all available GPUs that match the provided query\n  /// @param desc source image.\n  /// @param outResult optional result\n  /// @return descriptors array of device descriptors that match the query. Array is empty if\n  /// there's no match.\n  std::vector<HWDeviceDesc> queryDevices(const HWDeviceQueryDesc& desc, Result* outResult);\n  std::unique_ptr<IDevice> create(const HWDeviceDesc& desc, Result* outResult);\n\n  /// Shorthand to create a given device via MTLCreateSystemDefaultDevice().\n  std::unique_ptr<IDevice> createWithSystemDefaultDevice(Result* outResult);\n\n#ifdef __OBJC__\n  /// Create a device with a given existing MTLDevice.\n  std::unique_ptr<Device> createWithMTLDevice(id<MTLDevice> device, Result* outResult);\n#endif\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/HWDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/HWDevice.h>\n\n#import <Foundation/Foundation.h>\n#import <Metal/Metal.h>\n#include <igl/Macros.h>\n#include <igl/metal/Device.h>\n\n#if IGL_PLATFORM_MACOSX\n#include <igl/metal/macos/Device.h>\n#else\n#include <igl/metal/ios/Device.h>\n#endif\n\n#include <cstdint>\n\nnamespace igl::metal {\n\nnamespace {\n\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST\nbool isRemovable(id<MTLDevice> device) {\n  if (@available(macOS 10.13, macCatalyst 13.0, *)) {\n    return device.removable;\n  }\n  // device.removable is not available in macOS APIs prior to 10.13 or on iOS\n  return false;\n}\n#endif\n\n} // namespace\n\nHWDeviceType getDeviceType(id<MTLDevice> device);\n\nHWDeviceType getDeviceType(id<MTLDevice> device) {\n  IGL_DEBUG_ASSERT(device != nullptr);\n\n#if IGL_PLATFORM_IOS\n  return HWDeviceType::DiscreteGpu;\n#else\n  if (device.lowPower) {\n    return HWDeviceType::IntegratedGpu;\n  } else if (isRemovable(device)) {\n    return HWDeviceType::ExternalGpu;\n  } else {\n    return HWDeviceType::DiscreteGpu;\n  }\n#endif\n}\n\nstd::vector<HWDeviceDesc> HWDevice::queryDevices(IGL_MAYBE_UNUSED const HWDeviceQueryDesc& desc,\n                                                 Result* outResult) {\n  std::vector<HWDeviceDesc> devices;\n\n#if IGL_PLATFORM_IOS\n  id<MTLDevice> metalDevice = MTLCreateSystemDefaultDevice();\n  if (metalDevice) {\n    // We don't need __bridge_retained here as iOS always provides the same ptr\n    HWDeviceDesc deviceDesc((uintptr_t)(__bridge void*)metalDevice,\n                            HWDeviceType::DiscreteGpu,\n                            0,\n                            std::string([metalDevice.name UTF8String]));\n    devices.push_back(deviceDesc);\n  }\n#else\n  // Query device for a specific display\n  if (desc.displayId) {\n    id<MTLDevice> displayDevice =\n        CGDirectDisplayCopyCurrentMetalDevice(static_cast<CGDirectDisplayID>(desc.displayId));\n    if (displayDevice) {\n      const uintptr_t deviceNative = (uintptr_t)(__bridge void*)displayDevice;\n      const HWDeviceDesc deviceDesc(deviceNative,\n                                    getDeviceType(displayDevice),\n                                    0,\n                                    std::string([displayDevice.name UTF8String]));\n      devices.push_back(deviceDesc);\n    }\n    Result::setOk(outResult);\n    return devices;\n  }\n\n  NSArray<id<MTLDevice>>* deviceList = MTLCopyAllDevices();\n\n  // Loop through all devices and return matching ones\n  // NOLINTNEXTLINE(cppcoreguidelines-init-variables)\n  for (id<MTLDevice> device in deviceList) {\n    // We don't need __bridge_retained here as iOS always provides the same ptr\n    const uintptr_t deviceNative = (uintptr_t)(__bridge void*)device;\n\n    // If we requested an unknown device type, then return\n    // all the available devices\n    const uint32_t vendorId = 0;\n    if (desc.hardwareType == HWDeviceType::Unknown) {\n      const HWDeviceDesc deviceDesc(\n          deviceNative, desc.hardwareType, vendorId, std::string([device.name UTF8String]));\n      devices.push_back(deviceDesc);\n    } else if (device.lowPower) {\n      if (desc.hardwareType == HWDeviceType::IntegratedGpu) {\n        const HWDeviceDesc deviceDesc(deviceNative,\n                                      HWDeviceType::IntegratedGpu,\n                                      vendorId,\n                                      std::string([device.name UTF8String]));\n        devices.push_back(deviceDesc);\n      }\n    } else if (isRemovable(device)) {\n      if (desc.hardwareType == HWDeviceType::ExternalGpu) {\n        const HWDeviceDesc deviceDesc(deviceNative,\n                                      HWDeviceType::ExternalGpu,\n                                      vendorId,\n                                      std::string([device.name UTF8String]));\n        devices.push_back(deviceDesc);\n      }\n    } else { // Device is NOT Integrated NOR External\n      if (desc.hardwareType == HWDeviceType::DiscreteGpu) {\n        const HWDeviceDesc deviceDesc(deviceNative,\n                                      HWDeviceType::DiscreteGpu,\n                                      vendorId,\n                                      std::string([device.name UTF8String]));\n        devices.push_back(deviceDesc);\n      }\n    }\n  }\n#endif\n\n  Result::setOk(outResult);\n  return devices;\n}\n\nstd::unique_ptr<IDevice> HWDevice::create(const HWDeviceDesc& desc, Result* outResult) {\n  IGL_DEBUG_ASSERT(desc.guid != 0L, \"Invalid hardwareGuid(%lu)\", desc.guid);\n  if (desc.guid == 0L) {\n    Result::setResult(outResult, Result::Code::Unsupported, \"Metal is not supported!\");\n    return nullptr;\n  }\n\n  return createWithMTLDevice(\n      (__bridge id<MTLDevice>)(void*)desc.guid, // NOLINT(performance-no-int-to-ptr)\n      outResult);\n}\n\nstd::unique_ptr<IDevice> HWDevice::createWithSystemDefaultDevice(Result* outResult) {\n  return createWithMTLDevice(MTLCreateSystemDefaultDevice(), outResult);\n}\n\nstd::unique_ptr<Device> HWDevice::createWithMTLDevice(id<MTLDevice> device, Result* outResult) {\n  if (!device) {\n    Result::setResult(outResult, Result::Code::Unsupported, \"Metal is not supported!\");\n    return nullptr;\n  }\n\n#if IGL_PLATFORM_MACOSX\n  auto iglDevice = std::make_unique<macos::Device>(device);\n#else\n  auto iglDevice = std::make_unique<ios::Device>(device);\n#endif\n\n  Result::setOk(outResult);\n  return iglDevice;\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <CoreVideo/CVImageBuffer.h>\n#import <CoreVideo/CVMetalTextureCache.h>\n#import <Metal/Metal.h>\n#import <QuartzCore/CALayer.h>\n#import <QuartzCore/CAMetalLayer.h>\n#include <igl/Common.h>\n#include <igl/PlatformDevice.h>\n#include <igl/Texture.h>\n#include <igl/metal/SamplerState.h>\n\nnamespace igl {\n\nstruct FramebufferDesc;\n\nnamespace metal {\n\nclass Device;\nclass Framebuffer;\n\nclass PlatformDevice final : public IPlatformDevice {\n public:\n  static constexpr igl::PlatformDeviceType kType = igl::PlatformDeviceType::Metal;\n\n  PlatformDevice(Device& device);\n  ~PlatformDevice() override;\n\n  std::shared_ptr<SamplerState> createSamplerState(const SamplerStateDesc& desc,\n                                                   Result* outResult) const;\n  std::shared_ptr<Framebuffer> createFramebuffer(const FramebufferDesc& desc,\n                                                 Result* outResult) const;\n\n  /// Creates a texture from a native drawable\n  /// @param nativeDrawable drawable. For Metal, drawable MUST be CAMetalDrawable\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::unique_ptr<ITexture> createTextureFromNativeDrawable(id<CAMetalDrawable> nativeDrawable,\n                                                            Result* outResult);\n\n  /// Creates a texture from a native drawable\n  /// @param nativeDrawable drawable. For Metal, drawable MUST be MTLTexture\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::unique_ptr<ITexture> createTextureFromNativeDrawable(id<MTLTexture> nativeDrawable,\n                                                            Result* outResult);\n\n  /// Creates a texture from a native drawable surface\n  /// @param nativeDrawable drawable surface. For Metal, drawable MUST be CAMetalLayer\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::unique_ptr<ITexture> createTextureFromNativeDrawable(CALayer* nativeDrawable,\n                                                            Result* outResult);\n\n  /// Creates a depth texture from a native depth stencil texture\n  /// @param depthStencilTexture Native depth stencil texture.\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::unique_ptr<ITexture> createTextureFromNativeDepth(id<MTLTexture> depthStencilTexture,\n                                                         Result* outResult);\n\n  /// Creates a texture from a native PixelBuffer. Uses the backing PixelBuffer for width and\n  /// height.\n  /// @param sourceImage source image\n  /// @param format the format of the source texture\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::unique_ptr<ITexture> createTextureFromNativePixelBuffer(CVImageBufferRef sourceImage,\n                                                               TextureFormat format,\n                                                               size_t planeIndex,\n                                                               Result* outResult);\n\n  /// Creates a texture from a native PixelBuffer\n  /// @param sourceImage source image\n  /// @param format the format of the source texture\n  /// @param width the width of the texture\n  /// @param height the height of the texture\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::unique_ptr<ITexture> createTextureFromNativePixelBufferWithSize(CVImageBufferRef sourceImage,\n                                                                       TextureFormat format,\n                                                                       size_t width,\n                                                                       size_t height,\n                                                                       size_t planeIndex,\n                                                                       Result* outResult);\n\n  /// Get a size of a given native drawable surface.\n  /// @param nativeDrawable drawable surface. For Metal, drawable MUST be CAMetalLayer\n  /// @param outResult Optional result.\n  /// @return An accurate size that is suitable for rendering or zero if failed to get a size.\n  Size getNativeDrawableSize(CALayer* nativeDrawable, Result* outResult);\n\n  /// Get a texture format that is suitable to render a given drawable surface.\n  /// @param nativeDrawable drawable surface. For Metal, drawable MUST be CAMetalLayer\n  /// @param outResult Optional result.\n  /// @return An accurate pixel format that is suitable for rendering or invalid if failed.\n  TextureFormat getNativeDrawableTextureFormat(CALayer* nativeDrawable, Result* outResult);\n\n  void flushNativeTextureCache() const;\n\n  CVMetalTextureCacheRef getTextureCache();\n\n protected:\n  [[nodiscard]] bool isType(PlatformDeviceType t) const noexcept override {\n    return t == kType;\n  }\n\n private:\n  Device& device_;\n  CVMetalTextureCacheRef textureCache_ = nullptr;\n};\n\n} // namespace metal\n} // namespace igl\n"
  },
  {
    "path": "src/igl/metal/PlatformDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/PlatformDevice.h>\n\n#import <CoreVideo/CVPixelBuffer.h>\n#import <Foundation/Foundation.h>\n#import <QuartzCore/CAMetalLayer.h>\n#import <QuartzCore/QuartzCore.h>\n#include <igl/metal/DepthStencilState.h>\n#include <igl/metal/Device.h>\n#include <igl/metal/Framebuffer.h>\n#include <igl/metal/SamplerState.h>\n#include <igl/metal/Texture.h>\n\nnamespace igl::metal {\n\nPlatformDevice::PlatformDevice(Device& device) : device_(device) {}\n\nPlatformDevice::~PlatformDevice() {\n  if (textureCache_) {\n    CFRelease(textureCache_);\n    textureCache_ = nullptr;\n  }\n}\n\nstd::shared_ptr<SamplerState> PlatformDevice::createSamplerState(const SamplerStateDesc& desc,\n                                                                 Result* outResult) const {\n  MTLSamplerDescriptor* metalDesc = [MTLSamplerDescriptor new];\n  metalDesc.label = [NSString stringWithUTF8String:desc.debugName.c_str()];\n  metalDesc.minFilter = SamplerState::convertMinMagFilter(desc.minFilter);\n  metalDesc.magFilter = SamplerState::convertMinMagFilter(desc.magFilter);\n  metalDesc.mipFilter = SamplerState::convertMipFilter(desc.mipFilter);\n  metalDesc.lodMinClamp = desc.mipLodMin;\n  metalDesc.lodMaxClamp = desc.mipLodMax;\n  metalDesc.sAddressMode = SamplerState::convertAddressMode(desc.addressModeU);\n  metalDesc.tAddressMode = SamplerState::convertAddressMode(desc.addressModeV);\n  metalDesc.rAddressMode = SamplerState::convertAddressMode(desc.addressModeW);\n  metalDesc.maxAnisotropy = desc.maxAnisotropic;\n  if (desc.depthCompareEnabled && device_.hasFeature(DeviceFeatures::DepthCompare)) {\n    metalDesc.compareFunction =\n        DepthStencilState::convertCompareFunction(desc.depthCompareFunction);\n  }\n\n  id<MTLSamplerState> metalObject = [device_.get() newSamplerStateWithDescriptor:metalDesc];\n  auto resource = std::make_shared<SamplerState>(metalObject);\n  if (device_.hasResourceTracker()) {\n    resource->initResourceTracker(device_.getResourceTracker(), desc.debugName);\n  }\n  Result::setOk(outResult);\n  return resource;\n}\n\nstd::shared_ptr<Framebuffer> PlatformDevice::createFramebuffer(const FramebufferDesc& desc,\n                                                               Result* outResult) const {\n  return std::static_pointer_cast<Framebuffer>(device_.createFramebuffer(desc, outResult));\n}\n\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(\n    id<CAMetalDrawable> nativeDrawable,\n    Result* outResult) {\n  auto iglObject = std::make_unique<Texture>(nativeDrawable, device_);\n  if (auto resourceTracker = device_.getResourceTracker()) {\n    iglObject->initResourceTracker(resourceTracker);\n  }\n  Result::setOk(outResult);\n  return iglObject;\n}\n\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(\n    id<MTLTexture> nativeDrawable,\n    Result* outResult) {\n  auto iglObject = std::make_unique<Texture>(nativeDrawable, device_);\n  if (auto resourceTracker = device_.getResourceTracker()) {\n    iglObject->initResourceTracker(resourceTracker);\n  }\n  Result::setOk(outResult);\n  return iglObject;\n}\n\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(CALayer* nativeDrawable,\n                                                                          Result* outResult) {\n  if (!nativeDrawable) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"Invalid native drawable\");\n    return nullptr;\n  }\n#if (!TARGET_OS_SIMULATOR || __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000)\n  if ([nativeDrawable isKindOfClass:[CAMetalLayer class]]) {\n    id<CAMetalDrawable> drawableObject = [(CAMetalLayer*)nativeDrawable nextDrawable];\n    if (!drawableObject) {\n      Result::setResult(outResult, Result::Code::RuntimeError, \"Could not retrieve a drawable.\");\n      return nullptr;\n    }\n\n    return createTextureFromNativeDrawable(drawableObject, outResult);\n  } else {\n    // Layer is not CAMetalLayer\n    // This should never hit, unless there's a new layer type that supports Metal\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    Result::setResult(outResult, Result::Code::Unsupported);\n    return nullptr;\n  }\n#else\n  Result::setResult(outResult, Result::Code::Unsupported);\n  return nullptr;\n#endif\n}\n\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativeDepth(\n    id<MTLTexture> depthStencilTexture,\n    Result* outResult) {\n  auto iglObject = std::make_unique<Texture>(depthStencilTexture, device_);\n  if (auto resourceTracker = device_.getResourceTracker()) {\n    iglObject->initResourceTracker(resourceTracker);\n  }\n  Result::setOk(outResult);\n  return iglObject;\n}\n\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativePixelBuffer(\n    CVImageBufferRef sourceImage,\n    TextureFormat format,\n    size_t planeIndex,\n    Result* outResult) {\n  const bool isPlanar = CVPixelBufferIsPlanar(sourceImage) != 0u;\n  const size_t width = (isPlanar ? CVPixelBufferGetWidthOfPlane(sourceImage, planeIndex)\n                                 : CVPixelBufferGetWidth(sourceImage));\n  const size_t height = (isPlanar ? CVPixelBufferGetHeightOfPlane(sourceImage, planeIndex)\n                                  : CVPixelBufferGetHeight(sourceImage));\n  return PlatformDevice::createTextureFromNativePixelBufferWithSize(\n      sourceImage, format, width, height, planeIndex, outResult);\n}\n\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativePixelBufferWithSize(\n    CVImageBufferRef sourceImage,\n    TextureFormat format,\n    size_t width,\n    size_t height,\n    size_t planeIndex,\n    Result* outResult) {\n  std::unique_ptr<Texture> resultTexture = nullptr;\n\n#if (!TARGET_OS_SIMULATOR || __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000)\n  CVMetalTextureCacheRef textureCache = getTextureCache();\n  if (textureCache) {\n    // Use the user provided texture instead\n    const MTLPixelFormat metalFormat = Texture::textureFormatToMTLPixelFormat(format);\n    if (metalFormat == MTLPixelFormatInvalid) {\n      Result::setResult(outResult,\n                        Result::Code::Unsupported,\n                        \"Invalid Texture Format : \" +\n                            std::string(TextureFormatProperties::fromTextureFormat(format).name));\n      IGL_DEBUG_ABORT(outResult->message.c_str());\n      return nullptr;\n    }\n\n    CVMetalTextureRef cvMetalTexture = nullptr;\n    const CVReturn result = CVMetalTextureCacheCreateTextureFromImage(kCFAllocatorDefault,\n                                                                      textureCache,\n                                                                      sourceImage,\n                                                                      nil,\n                                                                      metalFormat,\n                                                                      width,\n                                                                      height,\n                                                                      planeIndex,\n                                                                      &cvMetalTexture);\n    IGL_DEBUG_ASSERT(result == kCVReturnSuccess,\n                     \"Failed to created Metal texture from PixelBuffer\");\n\n    if (result != kCVReturnSuccess) {\n      NSLog(@\"Failed to created Metal texture from PixelBuffer\");\n      return nullptr;\n    }\n\n    id<MTLTexture> metalTexture = CVMetalTextureGetTexture(cvMetalTexture);\n    CVBufferRelease(cvMetalTexture);\n    cvMetalTexture = nullptr;\n\n    resultTexture = std::make_unique<Texture>(metalTexture, device_);\n    if (auto resourceTracker = device_.getResourceTracker()) {\n      resultTexture->initResourceTracker(resourceTracker);\n    }\n  }\n#endif\n\n  Result::setOk(outResult);\n  return resultTexture;\n}\n\nSize PlatformDevice::getNativeDrawableSize(CALayer* nativeDrawable, Result* outResult) {\n#if (!TARGET_OS_SIMULATOR || __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000)\n  Result::setOk(outResult);\n  return {(float)CGRectGetWidth(nativeDrawable.bounds),\n          (float)CGRectGetHeight(nativeDrawable.bounds)};\n#else\n  Result::setResult(outResult, Result::Code::Unsupported, \"Metal not supported on iOS simulator.\");\n  return {};\n#endif\n}\n\nTextureFormat PlatformDevice::getNativeDrawableTextureFormat(CALayer* nativeDrawable,\n                                                             Result* outResult) {\n  TextureFormat formatResult = TextureFormat::Invalid;\n\n#if (!TARGET_OS_SIMULATOR || __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000)\n  if ([nativeDrawable isKindOfClass:[CAMetalLayer class]]) {\n    auto metalLayer = (CAMetalLayer*)nativeDrawable;\n    formatResult = Texture::mtlPixelFormatToTextureFormat(metalLayer.pixelFormat);\n    Result::setOk(outResult);\n  } else {\n    // Layer is not CAMetalLayer\n    // This should never hit, unless there's a new layer type that supports Metal\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    Result::setResult(outResult, Result::Code::Unsupported);\n  }\n#else\n  Result::setResult(outResult, Result::Code::Unsupported, \"Metal not supported on iOS simulator.\");\n#endif\n\n  return formatResult;\n}\n\nCVMetalTextureCacheRef PlatformDevice::getTextureCache() {\n#if (!TARGET_OS_SIMULATOR || __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000)\n  if (textureCache_ == nullptr && device_.get() != nullptr) {\n    const CVReturn result =\n        CVMetalTextureCacheCreate(kCFAllocatorDefault, nil, device_.get(), nil, &textureCache_);\n    IGL_DEBUG_ASSERT(result == kCVReturnSuccess, \"Failed to created texture cache\");\n\n    if (result != kCVReturnSuccess) {\n      NSLog(@\"Failed to created texture cache\");\n      CFRelease(textureCache_);\n      textureCache_ = nullptr;\n    }\n  }\n#endif\n  return textureCache_;\n}\n\nvoid PlatformDevice::flushNativeTextureCache() const {\n#if (!TARGET_OS_SIMULATOR || __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000)\n  if (textureCache_) {\n    CVMetalTextureCacheFlush(textureCache_, 0);\n  }\n#endif\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/RenderCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Metal/MTLRenderCommandEncoder.h>\n#import <Metal/MTLRenderPass.h>\n#include <igl/CommandBuffer.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/metal/CommandBuffer.h>\n\nnamespace igl::metal {\nclass Device;\n\nclass RenderCommandEncoder final : public IRenderCommandEncoder {\n public:\n  static std::unique_ptr<RenderCommandEncoder> create(\n      const std::shared_ptr<CommandBuffer>& commandBuffer,\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      Result* outResult);\n\n  ~RenderCommandEncoder() override = default;\n\n  void endEncoding() override;\n\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n  void insertDebugEventLabel(const char* label, const igl::Color& color) const override;\n  void popDebugGroupLabel() const override;\n\n  void bindViewport(const Viewport& viewport) override;\n  void bindScissorRect(const ScissorRect& rect) override;\n\n  void bindRenderPipelineState(const std::shared_ptr<IRenderPipelineState>& pipelineState) override;\n  void bindDepthStencilState(const std::shared_ptr<IDepthStencilState>& depthStencilState) override;\n\n  void bindBuffer(uint32_t index,\n                  uint8_t bindTarget,\n                  IBuffer* buffer,\n                  size_t bufferOffset,\n                  size_t bufferSize) override;\n  void bindBuffer(uint32_t index, IBuffer* buffer, size_t bufferOffset, size_t bufferSize) override;\n  void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) override;\n  void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset) override;\n  void bindBytes(size_t index, uint8_t bindTarget, const void* data, size_t length) override;\n  void bindPushConstants(const void* data, size_t length, size_t offset) override;\n  void bindSamplerState(size_t index, uint8_t target, ISamplerState* samplerState) override;\n  void bindTexture(size_t index, uint8_t target, ITexture* texture) override;\n  void bindTexture(size_t index, ITexture* texture) override;\n  void bindUniform(const UniformDesc& uniformDesc, const void* data) override;\n\n  void bindBindGroup(BindGroupTextureHandle handle) override;\n  void bindBindGroup(BindGroupBufferHandle handle,\n                     uint32_t numDynamicOffsets,\n                     const uint32_t* dynamicOffsets) override;\n\n  void draw(size_t vertexCount,\n            uint32_t instanceCount,\n            uint32_t firstVertex,\n            uint32_t baseInstance) override;\n  void drawIndexed(size_t indexCount,\n                   uint32_t instanceCount,\n                   uint32_t firstIndex,\n                   int32_t vertexOffset,\n                   uint32_t baseInstance) override;\n  void drawMeshTasks(const Dimensions& threadgroupsPerGrid,\n                     const Dimensions& threadsPerTaskThreadgroup,\n                     const Dimensions& threadsPerMeshThreadgroup) override;\n  void multiDrawIndirect(IBuffer& indirectBuffer,\n                         size_t indirectBufferOffset,\n                         uint32_t drawCount,\n                         uint32_t stride) override;\n  void multiDrawIndexedIndirect(IBuffer& indirectBuffer,\n                                size_t indirectBufferOffset,\n                                uint32_t drawCount,\n                                uint32_t stride) override;\n\n  void setStencilReferenceValue(uint32_t value) override;\n  void setBlendColor(const Color& color) override;\n  void setDepthBias(float depthBias, float slopeScale, float clamp) override;\n\n  static MTLPrimitiveType convertPrimitiveType(PrimitiveType value);\n  static MTLIndexType convertIndexType(IndexFormat value);\n  static MTLLoadAction convertLoadAction(LoadAction value);\n  static MTLStoreAction convertStoreAction(StoreAction value);\n  static MTLClearColor convertClearColor(Color value);\n\n private:\n  explicit RenderCommandEncoder(const std::shared_ptr<CommandBuffer>& commandBuffer);\n  void initialize(const std::shared_ptr<CommandBuffer>& commandBuffer,\n                  const RenderPassDesc& renderPass,\n                  const std::shared_ptr<IFramebuffer>& framebuffer,\n                  Result* outResult);\n\n  void bindCullMode(const CullMode& cullMode);\n  void bindFrontFacingWinding(const WindingMode& frontFaceWinding);\n  void bindPolygonFillMode(const PolygonFillMode& polygonFillMode);\n\n  id<MTLRenderCommandEncoder> encoder_ = nil;\n  id<MTLBuffer> indexBuffer_ = nil;\n  MTLIndexType indexType_ = MTLIndexTypeUInt32;\n  size_t indexBufferOffset_ = 0;\n  // 4 KB - page aligned memory for metal managed resource\n  static constexpr uint32_t MAX_RECOMMENDED_BYTES = 4 * 1024;\n\n  MTLPrimitiveType metalPrimitive_ = MTLPrimitiveTypeTriangle;\n\n  Device& device_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/RenderCommandEncoder.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/RenderCommandEncoder.h>\n\n#import <Foundation/Foundation.h>\n#import <Metal/MTLBuffer.h>\n#import <Metal/MTLRenderCommandEncoder.h>\n#import <Metal/MTLRenderPass.h>\n#import <Metal/MTLTypes.h>\n#include <igl/RenderPass.h>\n#include <igl/metal/Buffer.h>\n#include <igl/metal/DepthStencilState.h>\n#include <igl/metal/Device.h>\n#include <igl/metal/Framebuffer.h>\n#include <igl/metal/RenderPipelineState.h>\n#include <igl/metal/SamplerState.h>\n#include <igl/metal/Texture.h>\n#include <igl/metal/TimestampQueries.h>\n\nnamespace igl::metal {\nRenderCommandEncoder::RenderCommandEncoder(const std::shared_ptr<CommandBuffer>& commandBuffer) :\n  IRenderCommandEncoder::IRenderCommandEncoder(commandBuffer), device_(commandBuffer->device()) {}\n\nvoid RenderCommandEncoder::initialize(const std::shared_ptr<CommandBuffer>& commandBuffer,\n                                      const RenderPassDesc& renderPass,\n                                      const std::shared_ptr<IFramebuffer>& framebuffer,\n                                      Result* outResult) {\n  Result::setOk(outResult);\n  if (!IGL_DEBUG_VERIFY(framebuffer)) {\n    Result::setResult(outResult, Result::Code::ArgumentNull);\n    return;\n  }\n  MTLRenderPassDescriptor* metalRenderPassDesc = [MTLRenderPassDescriptor renderPassDescriptor];\n  if (!metalRenderPassDesc) {\n    static const char* kFailedToCreateRenderPassDesc =\n        \"Failed to create Metal render pass descriptor\";\n    IGL_DEBUG_ABORT(kFailedToCreateRenderPassDesc);\n    Result::setResult(outResult, Result::Code::RuntimeError, kFailedToCreateRenderPassDesc);\n    return;\n  }\n\n  const FramebufferDesc& desc = static_cast<const Framebuffer&>(*framebuffer).get();\n\n  // Colors\n  for (size_t index = 0; index != IGL_COLOR_ATTACHMENTS_MAX; index++) {\n    const auto& attachment = desc.colorAttachments[index];\n\n    if (!attachment.texture) {\n      continue;\n    }\n\n    if (index >= renderPass.colorAttachments.size() || index >= IGL_COLOR_ATTACHMENTS_MAX) {\n      static const char* kNotEnoughRenderPassColorAttachments =\n          \"Framebuffer color attachment count larger than renderPass color attachment count\";\n      IGL_DEBUG_ABORT(kNotEnoughRenderPassColorAttachments);\n      Result::setResult(\n          outResult, Result::Code::ArgumentInvalid, kNotEnoughRenderPassColorAttachments);\n      break;\n    }\n\n    const auto& iglTexture = attachment.texture;\n    MTLRenderPassColorAttachmentDescriptor* metalColorAttachment =\n        metalRenderPassDesc.colorAttachments[index];\n\n    static const char* kNullColorAttachmentMsg = \"Render pass color attachment cannot be null\";\n    IGL_DEBUG_ASSERT(iglTexture, kNullColorAttachmentMsg);\n    if (iglTexture) {\n      metalColorAttachment.texture = static_cast<Texture&>(*iglTexture).get();\n    } else {\n      Result::setResult(outResult, Result::Code::ArgumentNull, kNullColorAttachmentMsg);\n    }\n\n    const auto& iglResolveTexture = attachment.resolveTexture;\n    if (iglResolveTexture &&\n        renderPass.colorAttachments[index].storeAction == igl::StoreAction::MsaaResolve) {\n      metalColorAttachment.resolveTexture = static_cast<Texture&>(*iglResolveTexture).get();\n    }\n\n    const auto& iglColorAttachment = renderPass.colorAttachments[index];\n    metalColorAttachment.loadAction = convertLoadAction(iglColorAttachment.loadAction);\n    metalColorAttachment.storeAction = convertStoreAction(iglColorAttachment.storeAction);\n    metalColorAttachment.clearColor = convertClearColor(iglColorAttachment.clearColor);\n    metalColorAttachment.slice = iglTexture ? Texture::getMetalSlice(iglTexture->getType(),\n                                                                     iglColorAttachment.face,\n                                                                     iglColorAttachment.layer)\n                                            : 0;\n    metalColorAttachment.level = iglColorAttachment.mipLevel;\n  }\n\n  // Depth\n  if (desc.depthAttachment.texture) {\n    metalRenderPassDesc.depthAttachment.texture =\n        static_cast<Texture&>(*desc.depthAttachment.texture).get();\n    metalRenderPassDesc.depthAttachment.loadAction =\n        convertLoadAction(renderPass.depthAttachment.loadAction);\n    metalRenderPassDesc.depthAttachment.storeAction =\n        convertStoreAction(renderPass.depthAttachment.storeAction);\n    metalRenderPassDesc.depthAttachment.clearDepth = renderPass.depthAttachment.clearDepth;\n\n    if (desc.depthAttachment.resolveTexture &&\n        renderPass.depthAttachment.storeAction == igl::StoreAction::MsaaResolve) {\n      metalRenderPassDesc.depthAttachment.resolveTexture =\n          static_cast<Texture&>(*desc.depthAttachment.resolveTexture).get();\n    }\n  }\n\n  // Stencil\n  if (desc.stencilAttachment.texture) {\n    metalRenderPassDesc.stencilAttachment.texture =\n        static_cast<Texture&>(*desc.stencilAttachment.texture).get();\n    metalRenderPassDesc.stencilAttachment.loadAction =\n        convertLoadAction(renderPass.stencilAttachment.loadAction);\n    metalRenderPassDesc.stencilAttachment.storeAction =\n        convertStoreAction(renderPass.stencilAttachment.storeAction);\n    metalRenderPassDesc.stencilAttachment.clearStencil = renderPass.stencilAttachment.clearStencil;\n\n    if (desc.stencilAttachment.resolveTexture &&\n        renderPass.stencilAttachment.storeAction == igl::StoreAction::MsaaResolve) {\n      metalRenderPassDesc.stencilAttachment.resolveTexture =\n          static_cast<Texture&>(*desc.stencilAttachment.resolveTexture).get();\n    }\n  }\n\n  // Attach counter sample buffer for GPU timestamp queries.\n  // Configure sampleBufferAttachments with sample indices for descriptor-based\n  // sampling (Tracy/Dawn pattern). Metal auto-samples at vertex start and fragment\n  // end.\n  // This is the ONLY approach that works on Apple GPUs (A-series, M-series).\n  if (@available(macOS 11.0, iOS 14.0, *)) {\n    if (renderPass.timestampQuery.queries) {\n      auto metalTsQueries =\n          std::static_pointer_cast<TimestampQueries>(renderPass.timestampQuery.queries);\n      if (metalTsQueries && metalTsQueries->sampleBuffer_ != nil) {\n        uint32_t startSampleIdx = renderPass.timestampQuery.slotIndex * 2;\n        uint32_t endSampleIdx = renderPass.timestampQuery.slotIndex * 2 + 1;\n        metalRenderPassDesc.sampleBufferAttachments[0].sampleBuffer = metalTsQueries->sampleBuffer_;\n        metalRenderPassDesc.sampleBufferAttachments[0].startOfVertexSampleIndex = startSampleIdx;\n        metalRenderPassDesc.sampleBufferAttachments[0].endOfVertexSampleIndex =\n            MTLCounterDontSample;\n        metalRenderPassDesc.sampleBufferAttachments[0].startOfFragmentSampleIndex =\n            MTLCounterDontSample;\n        metalRenderPassDesc.sampleBufferAttachments[0].endOfFragmentSampleIndex = endSampleIdx;\n\n        // Advance currentIndex_ so resolveTimestamps knows how many samples to resolve.\n        uint32_t requiredCount = endSampleIdx + 1;\n        uint32_t current = metalTsQueries->currentIndex_.load(std::memory_order_relaxed);\n        while (current < requiredCount) {\n          if (metalTsQueries->currentIndex_.compare_exchange_weak(\n                  current, requiredCount, std::memory_order_relaxed)) {\n            break;\n          }\n        }\n      }\n    }\n  }\n\n  encoder_ = [commandBuffer->get() renderCommandEncoderWithDescriptor:metalRenderPassDesc];\n}\n\nstd::unique_ptr<RenderCommandEncoder> RenderCommandEncoder::create(\n    const std::shared_ptr<CommandBuffer>& commandBuffer,\n    const RenderPassDesc& renderPass,\n    const std::shared_ptr<IFramebuffer>& framebuffer,\n    Result* outResult) {\n  // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)\n  std::unique_ptr<RenderCommandEncoder> encoder(new RenderCommandEncoder(commandBuffer));\n  encoder->initialize(commandBuffer, renderPass, framebuffer, outResult);\n  return encoder;\n}\n\nvoid RenderCommandEncoder::endEncoding() {\n  // @fb-only\n  // @fb-only\n  [encoder_ endEncoding];\n  encoder_ = nil;\n}\n\nvoid RenderCommandEncoder::pushDebugGroupLabel(const char* label,\n                                               const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  [encoder_ pushDebugGroup:[NSString stringWithUTF8String:label] ?: @\"\"];\n}\n\nvoid RenderCommandEncoder::insertDebugEventLabel(const char* label,\n                                                 const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  [encoder_ insertDebugSignpost:[NSString stringWithUTF8String:label] ?: @\"\"];\n}\n\nvoid RenderCommandEncoder::popDebugGroupLabel() const {\n  IGL_DEBUG_ASSERT(encoder_);\n  [encoder_ popDebugGroup];\n}\n\nvoid RenderCommandEncoder::bindViewport(const Viewport& viewport) {\n  IGL_DEBUG_ASSERT(encoder_);\n  const MTLViewport metalViewport = {viewport.x,\n                                     viewport.y,\n                                     viewport.width,\n                                     viewport.height,\n                                     viewport.minDepth,\n                                     viewport.maxDepth};\n  [encoder_ setViewport:metalViewport];\n}\n\nvoid RenderCommandEncoder::bindScissorRect(const ScissorRect& rect) {\n  IGL_DEBUG_ASSERT(encoder_);\n  const MTLScissorRect scissorRect = {rect.x, rect.y, rect.width, rect.height};\n  [encoder_ setScissorRect:scissorRect];\n}\n\nvoid RenderCommandEncoder::bindCullMode(const CullMode& cullMode) {\n  IGL_DEBUG_ASSERT(encoder_);\n  MTLCullMode mode = MTLCullModeNone;\n  switch (cullMode) {\n  case CullMode::Disabled:\n    mode = MTLCullModeNone;\n    break;\n  case CullMode::Front:\n    mode = MTLCullModeFront;\n    break;\n  case CullMode::Back:\n    mode = MTLCullModeBack;\n    break;\n  }\n  [encoder_ setCullMode:mode];\n}\n\nvoid RenderCommandEncoder::bindFrontFacingWinding(const WindingMode& frontFaceWinding) {\n  IGL_DEBUG_ASSERT(encoder_);\n  const MTLWinding mode = (frontFaceWinding == WindingMode::Clockwise) ? MTLWindingClockwise\n                                                                       : MTLWindingCounterClockwise;\n\n  [encoder_ setFrontFacingWinding:mode];\n}\n\nvoid RenderCommandEncoder::bindPolygonFillMode(const PolygonFillMode& polygonFillMode) {\n  IGL_DEBUG_ASSERT(encoder_);\n\n  if (polygonFillMode == PolygonFillMode::Fill) {\n    return;\n  }\n\n  [encoder_ setTriangleFillMode:MTLTriangleFillModeLines];\n}\n\nvoid RenderCommandEncoder::bindRenderPipelineState(\n    const std::shared_ptr<IRenderPipelineState>& pipelineState) {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(pipelineState);\n  if (!pipelineState) {\n    return;\n  }\n  auto& metalPipelineState = static_cast<RenderPipelineState&>(*pipelineState);\n\n  [encoder_ setRenderPipelineState:metalPipelineState.get()];\n\n  bindCullMode(metalPipelineState.getCullMode());\n  bindFrontFacingWinding(metalPipelineState.getWindingMode());\n  bindPolygonFillMode(metalPipelineState.getPolygonFillMode());\n\n  metalPrimitive_ = convertPrimitiveType(pipelineState->getRenderPipelineDesc().topology);\n}\n\nvoid RenderCommandEncoder::bindDepthStencilState(\n    const std::shared_ptr<IDepthStencilState>& depthStencilState) {\n  IGL_DEBUG_ASSERT(encoder_);\n  if (depthStencilState) {\n    [encoder_ setDepthStencilState:static_cast<DepthStencilState&>(*depthStencilState).get()];\n  }\n}\n\nvoid RenderCommandEncoder::setBlendColor(const Color& color) {\n  IGL_DEBUG_ASSERT(encoder_);\n  [encoder_ setBlendColorRed:color.r green:color.g blue:color.b alpha:color.a];\n}\n\nvoid RenderCommandEncoder::setDepthBias(float depthBias, float slopeScale, float clamp) {\n  IGL_DEBUG_ASSERT(encoder_);\n  [encoder_ setDepthBias:depthBias slopeScale:slopeScale clamp:clamp];\n}\n\nvoid RenderCommandEncoder::setStencilReferenceValue(uint32_t value) {\n  IGL_DEBUG_ASSERT(encoder_);\n  [encoder_ setStencilReferenceValue:value];\n}\n\nvoid RenderCommandEncoder::bindBuffer(uint32_t index,\n                                      uint8_t bindTarget,\n                                      IBuffer* buffer,\n                                      size_t offset,\n                                      size_t bufferSize) {\n  (void)bufferSize;\n\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(index < IGL_BUFFER_BINDINGS_MAX);\n\n  auto* iglBuffer = static_cast<Buffer*>(buffer);\n  auto metalBuffer = iglBuffer ? iglBuffer->get() : nil;\n\n  if ((bindTarget & BindTarget::kVertex) != 0) {\n    [encoder_ setVertexBuffer:metalBuffer offset:offset atIndex:index];\n  }\n  if ((bindTarget & BindTarget::kFragment) != 0) {\n    [encoder_ setFragmentBuffer:metalBuffer offset:offset atIndex:index];\n  }\n  if (@available(iOS 16, macOS 13, *)) {\n    if (device_.hasFeature(DeviceFeatures::MeshShaders)) {\n      if ((bindTarget & BindTarget::kTask) != 0) {\n        [encoder_ setObjectBuffer:metalBuffer offset:offset atIndex:index];\n      }\n      if ((bindTarget & BindTarget::kMesh) != 0) {\n        [encoder_ setMeshBuffer:metalBuffer offset:offset atIndex:index];\n      }\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindBuffer(uint32_t index,\n                                      IBuffer* buffer,\n                                      size_t offset,\n                                      size_t bufferSize) {\n  (void)bufferSize;\n\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(index < IGL_BUFFER_BINDINGS_MAX);\n\n  if (buffer) {\n    auto& metalBuffer = static_cast<Buffer&>(*buffer);\n    [encoder_ setVertexBuffer:metalBuffer.get() offset:offset atIndex:index];\n    [encoder_ setFragmentBuffer:metalBuffer.get() offset:offset atIndex:index];\n  } else {\n    [encoder_ setVertexBuffer:nil offset:0 atIndex:index];\n    [encoder_ setFragmentBuffer:nil offset:0 atIndex:index];\n  }\n}\n\nvoid RenderCommandEncoder::bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(index < IGL_BUFFER_BINDINGS_MAX);\n\n  auto& metalBuffer = static_cast<Buffer&>(buffer);\n  [encoder_ setVertexBuffer:metalBuffer.get() offset:bufferOffset atIndex:index];\n}\n\nvoid RenderCommandEncoder::bindIndexBuffer(IBuffer& buffer,\n                                           IndexFormat format,\n                                           size_t bufferOffset) {\n  auto& metalBuffer = static_cast<Buffer&>(buffer);\n  indexBuffer_ = metalBuffer.get();\n  indexType_ = convertIndexType(format);\n  indexBufferOffset_ = bufferOffset;\n}\n\nvoid RenderCommandEncoder::bindBytes(size_t index,\n                                     uint8_t bindTarget,\n                                     const void* data,\n                                     size_t length) {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(bindTarget == BindTarget::kVertex || bindTarget == BindTarget::kFragment ||\n                       bindTarget == BindTarget::kTask || bindTarget == BindTarget::kMesh ||\n                       bindTarget == BindTarget::kAllGraphics,\n                   \"Bind target is not valid: %d\",\n                   bindTarget);\n  if (data) {\n    if (length > MAX_RECOMMENDED_BYTES) {\n      IGL_LOG_INFO(\n          \"It is recommended to use bindBuffer instead of bindBytes when binding > 4kb: %u\",\n          length);\n    }\n    if ((bindTarget & BindTarget::kVertex) != 0) {\n      [encoder_ setVertexBytes:data length:length atIndex:index];\n    }\n    if ((bindTarget & BindTarget::kFragment) != 0) {\n      [encoder_ setFragmentBytes:data length:length atIndex:index];\n    }\n    if (@available(iOS 16, macOS 13, *)) {\n      if (device_.hasFeature(DeviceFeatures::MeshShaders)) {\n        if ((bindTarget & BindTarget::kTask) != 0) {\n          [encoder_ setObjectBytes:data length:length atIndex:index];\n        }\n        if ((bindTarget & BindTarget::kMesh) != 0) {\n          [encoder_ setMeshBytes:data length:length atIndex:index];\n        }\n      }\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindPushConstants(const void* /*data*/,\n                                             size_t /*length*/,\n                                             size_t /*offset*/) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid RenderCommandEncoder::bindTexture(size_t index, uint8_t bindTarget, ITexture* texture) {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(bindTarget == BindTarget::kVertex || bindTarget == BindTarget::kFragment ||\n                       bindTarget == BindTarget::kTask || bindTarget == BindTarget::kMesh ||\n                       bindTarget == BindTarget::kAllGraphics,\n                   \"Bind target is not valid: %d\",\n                   bindTarget);\n\n  auto* iglTexture = static_cast<Texture*>(texture);\n  auto metalTexture = iglTexture ? iglTexture->get() : nil;\n\n  if ((bindTarget & BindTarget::kVertex) != 0) {\n    [encoder_ setVertexTexture:metalTexture atIndex:index];\n  }\n  if ((bindTarget & BindTarget::kFragment) != 0) {\n    [encoder_ setFragmentTexture:metalTexture atIndex:index];\n  }\n  if (@available(iOS 16, macOS 13, *)) {\n    if (device_.hasFeature(DeviceFeatures::MeshShaders)) {\n      if ((bindTarget & BindTarget::kTask) != 0) {\n        [encoder_ setObjectTexture:metalTexture atIndex:index];\n      }\n      if ((bindTarget & BindTarget::kMesh) != 0) {\n        [encoder_ setMeshTexture:metalTexture atIndex:index];\n      }\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindTexture(size_t index, ITexture* texture) {\n  bindTexture(index, igl::BindTarget::kFragment, texture);\n}\n\nvoid RenderCommandEncoder::bindUniform(const UniformDesc& /*uniformDesc*/, const void* /*data*/) {\n  // DO NOT IMPLEMENT!\n  // This is only for backends that MUST use single uniforms in some situations.\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid RenderCommandEncoder::bindSamplerState(size_t index,\n                                            uint8_t bindTarget,\n                                            ISamplerState* samplerState) {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(bindTarget == BindTarget::kVertex || bindTarget == BindTarget::kFragment ||\n                       bindTarget == BindTarget::kTask || bindTarget == BindTarget::kMesh ||\n                       bindTarget == BindTarget::kAllGraphics,\n                   \"Bind target is not valid: %d\",\n                   bindTarget);\n\n  auto* iglSamplerState = static_cast<SamplerState*>(samplerState);\n  auto metalSamplerState = iglSamplerState ? iglSamplerState->get() : nil;\n\n  if ((bindTarget & BindTarget::kVertex) != 0) {\n    [encoder_ setVertexSamplerState:metalSamplerState atIndex:index];\n  }\n  if ((bindTarget & BindTarget::kFragment) != 0) {\n    [encoder_ setFragmentSamplerState:metalSamplerState atIndex:index];\n  }\n  if (@available(iOS 16, macOS 13, *)) {\n    if (device_.hasFeature(DeviceFeatures::MeshShaders)) {\n      if ((bindTarget & BindTarget::kTask) != 0) {\n        [encoder_ setObjectSamplerState:metalSamplerState atIndex:index];\n      }\n      if ((bindTarget & BindTarget::kMesh) != 0) {\n        [encoder_ setMeshSamplerState:metalSamplerState atIndex:index];\n      }\n    }\n  }\n}\n\nvoid RenderCommandEncoder::draw(size_t vertexCount,\n                                uint32_t instanceCount,\n                                uint32_t firstVertex,\n                                uint32_t baseInstance) {\n  getCommandBuffer().incrementCurrentDrawCount();\n  IGL_DEBUG_ASSERT(encoder_);\n#if IGL_PLATFORM_IOS\n  if (@available(iOS 16, *)) {\n#endif // IGL_PLATFORM_IOS\n    [encoder_ drawPrimitives:metalPrimitive_\n                 vertexStart:firstVertex\n                 vertexCount:vertexCount\n               instanceCount:instanceCount\n                baseInstance:baseInstance];\n#if IGL_PLATFORM_IOS\n  } else {\n    IGL_DEBUG_ASSERT(!baseInstance);\n    if (device_.hasFeature(DeviceFeatures::DrawInstanced)) {\n      [encoder_ drawPrimitives:metalPrimitive_\n                   vertexStart:firstVertex\n                   vertexCount:vertexCount\n                 instanceCount:instanceCount];\n    } else {\n      IGL_DEBUG_ASSERT(instanceCount <= 1);\n      [encoder_ drawPrimitives:metalPrimitive_ vertexStart:firstVertex vertexCount:vertexCount];\n    }\n  }\n#endif // IGL_PLATFORM_IOS\n}\n\nvoid RenderCommandEncoder::drawIndexed(size_t indexCount,\n                                       uint32_t instanceCount,\n                                       uint32_t firstIndex,\n                                       int32_t vertexOffset,\n                                       uint32_t baseInstance) {\n  getCommandBuffer().incrementCurrentDrawCount();\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(indexBuffer_, \"No index buffer bound\");\n  if (!IGL_DEBUG_VERIFY(encoder_ && indexBuffer_)) {\n    return;\n  }\n\n  const size_t indexOffsetBytes =\n      static_cast<size_t>(firstIndex) * (indexType_ == MTLIndexTypeUInt32 ? 4u : 2u);\n\n#if IGL_PLATFORM_IOS\n  if (@available(iOS 16, *)) {\n#endif // IGL_PLATFORM_IOS\n    [encoder_ drawIndexedPrimitives:metalPrimitive_\n                         indexCount:indexCount\n                          indexType:indexType_\n                        indexBuffer:indexBuffer_\n                  indexBufferOffset:indexBufferOffset_ + indexOffsetBytes\n                      instanceCount:instanceCount\n                         baseVertex:vertexOffset\n                       baseInstance:baseInstance];\n#if IGL_PLATFORM_IOS\n  } else {\n    if (baseInstance) {\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    } else {\n      if (device_.hasFeature(DeviceFeatures::DrawInstanced)) {\n        [encoder_ drawIndexedPrimitives:metalPrimitive_\n                             indexCount:indexCount\n                              indexType:indexType_\n                            indexBuffer:indexBuffer_\n                      indexBufferOffset:indexBufferOffset_ + indexOffsetBytes\n                          instanceCount:instanceCount];\n      } else {\n        IGL_DEBUG_ASSERT(instanceCount <= 1);\n        [encoder_ drawIndexedPrimitives:metalPrimitive_\n                             indexCount:indexCount\n                              indexType:indexType_\n                            indexBuffer:indexBuffer_\n                      indexBufferOffset:indexBufferOffset_ + indexOffsetBytes];\n      }\n    }\n  }\n#endif // IGL_PLATFORM_IOS\n}\n\nvoid RenderCommandEncoder::drawMeshTasks(const Dimensions& threadgroupsPerGrid,\n                                         const Dimensions& threadsPerTaskThreadgroup,\n                                         const Dimensions& threadsPerMeshThreadgroup) {\n  IGL_DEBUG_ASSERT(encoder_);\n\n  if (!device_.hasFeature(DeviceFeatures::MeshShaders)) {\n    IGL_DEBUG_ASSERT(false, \"Mesh shaders require Apple GPU Family 7 or higher (A14/M1 and later)\");\n    return;\n  }\n\n  if (@available(iOS 16, macOS 13, *)) {\n    MTLSize tgg;\n    tgg.width = threadgroupsPerGrid.width;\n    tgg.height = threadgroupsPerGrid.height;\n    tgg.depth = threadgroupsPerGrid.depth;\n\n    MTLSize tgt;\n    tgt.width = threadsPerTaskThreadgroup.width;\n    tgt.height = threadsPerTaskThreadgroup.height;\n    tgt.depth = threadsPerTaskThreadgroup.depth;\n\n    MTLSize tgm;\n    tgm.width = threadsPerMeshThreadgroup.width;\n    tgm.height = threadsPerMeshThreadgroup.height;\n    tgm.depth = threadsPerMeshThreadgroup.depth;\n\n    [encoder_ drawMeshThreadgroups:tgg\n        threadsPerObjectThreadgroup:tgt\n          threadsPerMeshThreadgroup:tgm];\n  }\n}\n\nvoid RenderCommandEncoder::multiDrawIndirect(IBuffer& indirectBuffer,\n                                             // Ignore bugprone-easily-swappable-parameters\n                                             // @lint-ignore CLANGTIDY\n                                             size_t indirectBufferOffset,\n                                             uint32_t drawCount,\n                                             uint32_t stride) {\n  IGL_DEBUG_ASSERT(encoder_);\n  stride = stride ? stride : sizeof(MTLDrawPrimitivesIndirectArguments);\n  auto& indirectBufferRef = (Buffer&)(indirectBuffer);\n\n  for (uint32_t drawIndex = 0; drawIndex < drawCount; drawIndex++) {\n    getCommandBuffer().incrementCurrentDrawCount();\n    [encoder_ drawPrimitives:metalPrimitive_\n              indirectBuffer:indirectBufferRef.get()\n        indirectBufferOffset:indirectBufferOffset + static_cast<size_t>(stride) * drawIndex];\n  }\n}\n\nvoid RenderCommandEncoder::multiDrawIndexedIndirect(IBuffer& indirectBuffer,\n                                                    // Ignore bugprone-easily-swappable-parameters\n                                                    // @lint-ignore CLANGTIDY\n                                                    size_t indirectBufferOffset,\n                                                    uint32_t drawCount,\n                                                    uint32_t stride) {\n  IGL_DEBUG_ASSERT(encoder_);\n  IGL_DEBUG_ASSERT(indexBuffer_, \"No index buffer bound\");\n  if (!IGL_DEBUG_VERIFY(encoder_ && indexBuffer_)) {\n    return;\n  }\n  stride = stride ? stride : sizeof(MTLDrawIndexedPrimitivesIndirectArguments);\n  auto& indirectBufferRef = (Buffer&)(indirectBuffer);\n\n  for (uint32_t drawIndex = 0; drawIndex < drawCount; drawIndex++) {\n    getCommandBuffer().incrementCurrentDrawCount();\n    [encoder_ drawIndexedPrimitives:metalPrimitive_\n                          indexType:indexType_\n                        indexBuffer:indexBuffer_\n                  indexBufferOffset:indexBufferOffset_\n                     indirectBuffer:indirectBufferRef.get()\n               indirectBufferOffset:indirectBufferOffset +\n                                    (stride ? static_cast<size_t>(stride)\n                                            : sizeof(MTLDrawIndexedPrimitivesIndirectArguments)) *\n                                        drawIndex];\n  }\n}\n\nMTLPrimitiveType RenderCommandEncoder::convertPrimitiveType(PrimitiveType value) {\n  switch (value) {\n  case PrimitiveType::Point:\n    return MTLPrimitiveTypePoint;\n  case PrimitiveType::Line:\n    return MTLPrimitiveTypeLine;\n  case PrimitiveType::LineStrip:\n    return MTLPrimitiveTypeLineStrip;\n  case PrimitiveType::Triangle:\n    return MTLPrimitiveTypeTriangle;\n  case PrimitiveType::TriangleStrip:\n    return MTLPrimitiveTypeTriangleStrip;\n  }\n}\n\nMTLIndexType RenderCommandEncoder::convertIndexType(IndexFormat value) {\n  switch (value) {\n  case IndexFormat::UInt8:\n    IGL_DEBUG_ASSERT(false, \"8-bit indices are not supported in Metal\");\n    [[fallthrough]];\n  case IndexFormat::UInt16:\n    return MTLIndexTypeUInt16;\n  case IndexFormat::UInt32:\n    return MTLIndexTypeUInt32;\n  }\n}\n\nMTLLoadAction RenderCommandEncoder::convertLoadAction(LoadAction value) {\n  switch (value) {\n  case LoadAction::DontCare:\n    return MTLLoadActionDontCare;\n  case LoadAction::Clear:\n    return MTLLoadActionClear;\n  case LoadAction::Load:\n    return MTLLoadActionLoad;\n  }\n}\n\nMTLStoreAction RenderCommandEncoder::convertStoreAction(StoreAction value) {\n  switch (value) {\n  case StoreAction::DontCare:\n    return MTLStoreActionDontCare;\n  case StoreAction::Store:\n    return MTLStoreActionStore;\n  case StoreAction::MsaaResolve:\n    return MTLStoreActionMultisampleResolve;\n  }\n}\n\nMTLClearColor RenderCommandEncoder::convertClearColor(Color value) {\n  return MTLClearColorMake(value.r, value.g, value.b, value.a);\n}\n\nvoid RenderCommandEncoder::bindBindGroup(BindGroupTextureHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n\n  const BindGroupTextureDesc* desc = device_.bindGroupTexturesPool.get(handle);\n\n  for (uint32_t i = 0; i != IGL_TEXTURE_SAMPLERS_MAX; i++) {\n    if (desc->textures[i]) {\n      IGL_DEBUG_ASSERT(desc->samplers[i]);\n      bindTexture(i, BindTarget::kAllGraphics, desc->textures[i].get());\n      bindSamplerState(i, BindTarget::kAllGraphics, desc->samplers[i].get());\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindBindGroup(BindGroupBufferHandle handle,\n                                         uint32_t numDynamicOffsets,\n                                         const uint32_t* dynamicOffsets) {\n  if (handle.empty()) {\n    return;\n  }\n\n  const BindGroupBufferDesc* desc = device_.bindGroupBuffersPool.get(handle);\n\n  uint32_t dynamicOffset = 0;\n\n  for (uint32_t i = 0; i != IGL_UNIFORM_BLOCKS_BINDING_MAX; i++) {\n    if (desc->buffers[i]) {\n      if (desc->isDynamicBufferMask & (1 << i)) {\n        IGL_DEBUG_ASSERT(dynamicOffsets, \"No dynamic offsets provided\");\n        IGL_DEBUG_ASSERT(dynamicOffset < numDynamicOffsets, \"Not enough dynamic offsets provided\");\n        bindBuffer(i,\n                   desc->buffers[i].get(),\n                   desc->offset[i] + dynamicOffsets[dynamicOffset++],\n                   desc->size[i]);\n      } else {\n        bindBuffer(i, desc->buffers[i].get(), desc->offset[i], desc->size[i]);\n      }\n    }\n  }\n\n  IGL_DEBUG_ASSERT(dynamicOffset == numDynamicOffsets, \"Not all dynamic offsets were consumed\");\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/RenderPipelineReflection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <Metal/MTLArgument.h>\n#include <Metal/MTLRenderPipeline.h>\n#include <unordered_map>\n#include <vector>\n#include <igl/RenderPipelineReflection.h>\n#include <igl/Shader.h>\n\n// Suppress warnings about use of MTLArgumentType\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n\nnamespace igl::metal {\n\nclass RenderPipelineReflection final : public IRenderPipelineReflection {\n public:\n  explicit RenderPipelineReflection(MTLRenderPipelineReflection* /*refl*/);\n  ~RenderPipelineReflection() override;\n\n  [[nodiscard]] int getIndexByName(const std::string& name, ShaderStage sh) const;\n\n  [[nodiscard]] const std::vector<BufferArgDesc>& allUniformBuffers() const override;\n  [[nodiscard]] const std::vector<SamplerArgDesc>& allSamplers() const override;\n  [[nodiscard]] const std::vector<TextureArgDesc>& allTextures() const override;\n\n private:\n  struct ArgIndex {\n    ArgIndex(int argumentIndex, MTLArgumentType argumentType, size_t locationInArray) :\n      argumentIndex(argumentIndex), argumentType(argumentType), locationInArray(locationInArray) {}\n    int argumentIndex;\n    MTLArgumentType argumentType;\n    size_t locationInArray; /// position of this argument in the corresponding array\n  };\n\n  bool createArgDesc(MTLArgument* arg, ShaderStage sh);\n  [[nodiscard]] const std::unordered_map<std::string, ArgIndex>& getDictionary(\n      ShaderStage sh) const;\n\n  std::unordered_map<std::string, ArgIndex> vertexArgDictionary_;\n  std::unordered_map<std::string, ArgIndex> fragmentArgDictionary_;\n\n  std::vector<BufferArgDesc> bufferArguments_;\n  std::vector<SamplerArgDesc> samplerArguments_;\n  std::vector<TextureArgDesc> textureArguments_;\n};\n\n} // namespace igl::metal\n\n#pragma GCC diagnostic pop\n"
  },
  {
    "path": "src/igl/metal/RenderPipelineReflection.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"RenderPipelineReflection.h\"\n\n#include <Foundation/Foundation.h>\n#include <igl/Common.h>\n#include <igl/metal/Texture.h>\n\n#if !defined(IGL_CMAKE_BUILD)\n#include <lang/switch.h>\n#else\n#define NON_EXHAUSTIVE_SWITCH_BEGIN\n#define NON_EXHAUSTIVE_SWITCH_END\n#endif // !defined(IGL_CMAKE_BUILD)\n\nusing namespace igl;\n\nnamespace {\n\nigl::UniformType metalDataTypeToIGLUniformType(MTLDataType type) {\n  NON_EXHAUSTIVE_SWITCH_BEGIN\n  switch (type) {\n  case MTLDataTypeFloat:\n    return igl::UniformType::Float;\n  case MTLDataTypeFloat2:\n    return igl::UniformType::Float2;\n  case MTLDataTypeFloat3:\n    return igl::UniformType::Float3;\n  case MTLDataTypeFloat4:\n    return igl::UniformType::Float4;\n  case MTLDataTypeBool:\n    return igl::UniformType::Boolean;\n  case MTLDataTypeInt:\n    return igl::UniformType::Int;\n  case MTLDataTypeInt2:\n    return igl::UniformType::Int2;\n  case MTLDataTypeInt3:\n    return igl::UniformType::Int3;\n  case MTLDataTypeInt4:\n    return igl::UniformType::Int4;\n  case MTLDataTypeFloat2x2:\n    return igl::UniformType::Mat2x2;\n  case MTLDataTypeFloat3x3:\n    return igl::UniformType::Mat3x3;\n  case MTLDataTypeFloat4x4:\n    return igl::UniformType::Mat4x4;\n  default:\n    IGL_LOG_ERROR(\"Unsupported MTLDataType: %ld\\n\", type);\n    return igl::UniformType::Invalid;\n  }\n  NON_EXHAUSTIVE_SWITCH_END\n}\n\n} // namespace\n\nnamespace igl::metal {\nRenderPipelineReflection::RenderPipelineReflection(MTLRenderPipelineReflection* refl) {\n  if (refl != nullptr) {\n    // NOLINTNEXTLINE(cppcoreguidelines-init-variables)\n    for (MTLArgument* arg = nullptr in refl.vertexArguments) {\n      if (arg.active) {\n        createArgDesc(arg, ShaderStage::Vertex);\n      }\n    }\n    // NOLINTNEXTLINE(cppcoreguidelines-init-variables)\n    for (MTLArgument* arg = nullptr in refl.fragmentArguments) {\n      if (arg.active) {\n        createArgDesc(arg, ShaderStage::Fragment);\n      }\n    }\n  }\n}\n\nRenderPipelineReflection::~RenderPipelineReflection() = default;\n\nbool RenderPipelineReflection::createArgDesc(MTLArgument* arg, ShaderStage sh) {\n  size_t loc = 0;\n\n  if (arg.type == MTLArgumentTypeBuffer) {\n    BufferArgDesc bufferDesc;\n    bufferDesc.name = igl::genNameHandle(arg.name.UTF8String);\n    bufferDesc.bufferAlignment = arg.bufferAlignment;\n    bufferDesc.bufferDataSize = arg.bufferDataSize;\n    bufferDesc.bufferIndex = static_cast<int>(arg.index);\n    bufferDesc.shaderStage = sh;\n    if (arg.bufferDataType == MTLDataTypeStruct) {\n      // NOLINTNEXTLINE(cppcoreguidelines-init-variables)\n      for (MTLStructMember* uniform = nullptr in arg.bufferStructType.members) {\n        MTLDataType elementType = uniform.dataType;\n        if (elementType == MTLDataTypeArray) {\n          elementType = uniform.arrayType.elementType;\n        }\n        igl::BufferArgDesc::BufferMemberDesc iglMemberDesc{\n            .name = igl::genNameHandle(uniform.name.UTF8String),\n            .type = metalDataTypeToIGLUniformType(elementType),\n            .offset = (size_t)uniform.offset,\n            .arrayLength = uniform.arrayType ? (size_t)uniform.arrayType.arrayLength : 1};\n        bufferDesc.members.push_back(std::move(iglMemberDesc));\n      }\n    } else {\n      igl::BufferArgDesc::BufferMemberDesc iglMemberDesc{\n          .name = igl::genNameHandle(arg.name.UTF8String),\n          .type = metalDataTypeToIGLUniformType(arg.bufferDataType),\n          .offset = 0,\n          .arrayLength = (size_t)arg.arrayLength};\n      bufferDesc.members.push_back(std::move(iglMemberDesc));\n    }\n    bufferArguments_.push_back(std::move(bufferDesc));\n\n    loc = bufferArguments_.size() - 1;\n  } else if (arg.type == MTLArgumentTypeTexture) {\n    TextureArgDesc textureDesc;\n    textureDesc.name = arg.name.UTF8String;\n    textureDesc.type = igl::metal::Texture::convertType(arg.textureType);\n    textureDesc.textureIndex = static_cast<int>(arg.index);\n    textureDesc.shaderStage = sh;\n    textureArguments_.push_back(std::move(textureDesc));\n\n    loc = textureArguments_.size() - 1;\n  } else if (arg.type == MTLArgumentTypeSampler) {\n    SamplerArgDesc samplerDesc;\n    samplerDesc.name = arg.name.UTF8String;\n    samplerDesc.samplerIndex = static_cast<int>(arg.index);\n    samplerDesc.shaderStage = sh;\n    samplerArguments_.push_back(std::move(samplerDesc));\n\n    loc = samplerArguments_.size() - 1;\n  } else {\n    /// thread group mem and array argument type is not yet supported\n    IGL_LOG_DEBUG(\"IGL Metal Reflection: unsupported argument type\");\n    /// just skip this one\n    return false;\n  }\n\n  if (sh == ShaderStage::Vertex) {\n    vertexArgDictionary_.insert(\n        std::make_pair(std::string([arg.name UTF8String]),\n                       ArgIndex(static_cast<int>(arg.index), arg.type, static_cast<int>(loc))));\n  } else {\n    fragmentArgDictionary_.insert(std::make_pair(\n        std::string([arg.name UTF8String]), ArgIndex(static_cast<int>(arg.index), arg.type, loc)));\n  }\n  return true;\n}\n\nint RenderPipelineReflection::getIndexByName(const std::string& name, ShaderStage sh) const {\n  const std::unordered_map<std::string, ArgIndex>& dictionary =\n      (sh == ShaderStage::Vertex) ? vertexArgDictionary_ : fragmentArgDictionary_;\n\n  auto it = dictionary.find(name);\n  if (it != dictionary.end()) {\n    return it->second.argumentIndex;\n  }\n\n  /// not found\n  return -1;\n}\n\nconst std::unordered_map<std::string, RenderPipelineReflection::ArgIndex>&\nRenderPipelineReflection::getDictionary(ShaderStage sh) const {\n  return (sh == ShaderStage::Vertex) ? vertexArgDictionary_ : fragmentArgDictionary_;\n}\n\nconst std::vector<BufferArgDesc>& RenderPipelineReflection::allUniformBuffers() const {\n  return bufferArguments_;\n}\n\nconst std::vector<SamplerArgDesc>& RenderPipelineReflection::allSamplers() const {\n  return samplerArguments_;\n}\n\nconst std::vector<TextureArgDesc>& RenderPipelineReflection::allTextures() const {\n  return textureArguments_;\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/RenderPipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <Metal/MTLRenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/metal/RenderPipelineReflection.h>\n\nnamespace igl::metal {\n\nclass RenderPipelineState final : public IRenderPipelineState {\n  friend class Device;\n\n public:\n  explicit RenderPipelineState(id<MTLRenderPipelineState> value,\n                               MTLRenderPipelineReflection* reflection,\n                               const RenderPipelineDesc& desc);\n  ~RenderPipelineState() override = default;\n\n  IGL_INLINE id<MTLRenderPipelineState> get() {\n    return value_;\n  }\n  [[nodiscard]] int getIndexByName(const igl::NameHandle& name, ShaderStage stage) const override;\n  [[nodiscard]] int getIndexByName(const std::string& name, ShaderStage stage) const override;\n\n  std::shared_ptr<IRenderPipelineReflection> renderPipelineReflection() override;\n  void setRenderPipelineReflection(\n      const IRenderPipelineReflection& renderPipelineReflection) override;\n\n  [[nodiscard]] CullMode getCullMode() const {\n    return desc_.cullMode;\n  }\n  [[nodiscard]] WindingMode getWindingMode() const {\n    return desc_.frontFaceWinding;\n  }\n  [[nodiscard]] PolygonFillMode getPolygonFillMode() const {\n    return desc_.polygonFillMode;\n  }\n  static MTLColorWriteMask convertColorWriteMask(ColorWriteMask value);\n\n private:\n  id<MTLRenderPipelineState> value_;\n  std::shared_ptr<RenderPipelineReflection> reflection_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/RenderPipelineState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/RenderPipelineState.h>\n\nusing namespace igl;\n\nnamespace igl::metal {\n\nRenderPipelineState::RenderPipelineState(id<MTLRenderPipelineState> value,\n                                         MTLRenderPipelineReflection* reflection,\n                                         const RenderPipelineDesc& desc) :\n  IRenderPipelineState(desc), value_(value) {\n  reflection_ = reflection ? std::make_shared<RenderPipelineReflection>(reflection) : nullptr;\n}\n\nstd::shared_ptr<IRenderPipelineReflection> RenderPipelineState::renderPipelineReflection() {\n  return reflection_;\n}\n\nvoid RenderPipelineState::setRenderPipelineReflection(\n    const IRenderPipelineReflection& renderPipelineReflection) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  (void)renderPipelineReflection;\n}\n\nint RenderPipelineState::getIndexByName(const igl::NameHandle& name, ShaderStage stage) const {\n  if (reflection_ == nullptr) {\n    return -1;\n  }\n  return reflection_->getIndexByName(std::string(name), stage);\n}\n\nint RenderPipelineState::getIndexByName(const std::string& name, ShaderStage stage) const {\n  if (reflection_ == nullptr) {\n    return -1;\n  }\n  return reflection_->getIndexByName(name, stage);\n}\n\nMTLColorWriteMask RenderPipelineState::convertColorWriteMask(ColorWriteMask value) {\n  MTLColorWriteMask result = MTLColorWriteMaskNone;\n  if (value & kColorWriteBitsRed) {\n    result |= MTLColorWriteMaskRed;\n  }\n  if (value & kColorWriteBitsGreen) {\n    result |= MTLColorWriteMaskGreen;\n  }\n  if (value & kColorWriteBitsBlue) {\n    result |= MTLColorWriteMaskBlue;\n  }\n  if (value & kColorWriteBitsAlpha) {\n    result |= MTLColorWriteMaskAlpha;\n  }\n  return result;\n}\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Result.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Foundation/NSError.h>\n#include <igl/IGL.h>\n\nnamespace igl::metal {\n\nIGL_INLINE void setResultFrom(Result* outResult, const NSError* error) {\n  if (outResult != nullptr) {\n    if (error != nil) {\n      outResult->code = Result::Code::RuntimeError;\n      const char* message = [error.localizedDescription UTF8String];\n      outResult->message = (message ? message : \"\");\n    } else {\n      outResult->code = Result::Code::Ok;\n      outResult->message = \"\";\n    }\n  }\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/SamplerState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <Metal/MTLSampler.h>\n#include <igl/SamplerState.h>\n\nnamespace igl::metal {\n\nclass SamplerState final : public ISamplerState {\n public:\n  explicit SamplerState(id<MTLSamplerState> value);\n  IGL_INLINE id<MTLSamplerState> get() const {\n    return value_;\n  }\n\n  static MTLSamplerMinMagFilter convertMinMagFilter(SamplerMinMagFilter value);\n  static MTLSamplerMipFilter convertMipFilter(SamplerMipFilter value);\n  static MTLSamplerAddressMode convertAddressMode(SamplerAddressMode value);\n\n  /**\n   * @brief Returns true if this sampler is a YUV sampler.\n   */\n  [[nodiscard]] bool isYUV() const noexcept override;\n\n private:\n  id<MTLSamplerState> value_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/SamplerState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/SamplerState.h>\n\nusing namespace igl;\n\nnamespace igl::metal {\n\nSamplerState::SamplerState(id<MTLSamplerState> value) : value_(value) {}\n\nMTLSamplerMinMagFilter SamplerState::convertMinMagFilter(SamplerMinMagFilter value) {\n  switch (value) {\n  case SamplerMinMagFilter::Nearest:\n    return MTLSamplerMinMagFilterNearest;\n  case SamplerMinMagFilter::Linear:\n    return MTLSamplerMinMagFilterLinear;\n  }\n}\n\nMTLSamplerMipFilter SamplerState::convertMipFilter(SamplerMipFilter value) {\n  switch (value) {\n  case SamplerMipFilter::Disabled:\n    return MTLSamplerMipFilterNotMipmapped;\n  case SamplerMipFilter::Nearest:\n    return MTLSamplerMipFilterNearest;\n  case SamplerMipFilter::Linear:\n    return MTLSamplerMipFilterLinear;\n  }\n}\n\nMTLSamplerAddressMode SamplerState::convertAddressMode(SamplerAddressMode value) {\n  switch (value) {\n  case SamplerAddressMode::Repeat:\n    return MTLSamplerAddressModeRepeat;\n  case SamplerAddressMode::Clamp:\n    return MTLSamplerAddressModeClampToEdge;\n  case SamplerAddressMode::MirrorRepeat:\n    return MTLSamplerAddressModeMirrorRepeat;\n  }\n}\n\nbool SamplerState::isYUV() const noexcept {\n  // Not supported in this API.\n  return false;\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Shader.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <Metal/Metal.h>\n#include <memory>\n#include <vector>\n#include <igl/Shader.h>\n\nnamespace igl::metal {\n\nclass ShaderModule final : public IShaderModule {\n  friend class Device;\n\n public:\n  ShaderModule(ShaderModuleInfo info, id<MTLFunction> value);\n  ~ShaderModule() override = default;\n\n  IGL_INLINE id<MTLFunction> get() const {\n    return value;\n  }\n\n  id<MTLFunction> value;\n};\n\nclass ShaderLibrary final : public IShaderLibrary {\n public:\n  explicit ShaderLibrary(std::vector<std::shared_ptr<IShaderModule>> modules);\n};\n\nclass ShaderStages final : public IShaderStages {\n public:\n  explicit ShaderStages(ShaderStagesDesc desc);\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Shader.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/Shader.h>\n\nnamespace igl::metal {\n\nmetal::ShaderModule::ShaderModule(ShaderModuleInfo info, id<MTLFunction> value) :\n  IShaderModule(std::move(info)), value(value) {}\n\nmetal::ShaderLibrary::ShaderLibrary(std::vector<std::shared_ptr<IShaderModule>> modules) :\n  IShaderLibrary(std::move(modules)) {}\n\nmetal::ShaderStages::ShaderStages(ShaderStagesDesc desc) : IShaderStages(std::move(desc)) {}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Texture.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n@protocol MTLCommandBuffer;\n@protocol MTLTexture;\n#import <Metal/MTLPixelFormat.h>\n#import <Metal/MTLTexture.h>\n#import <QuartzCore/CAMetalLayer.h>\n#include <igl/DeviceFeatures.h>\n#include <igl/Macros.h>\n#include <igl/Texture.h>\n\n#if IGL_PLATFORM_APPLE\nNS_ASSUME_NONNULL_BEGIN\n#endif\n\nnamespace igl::metal {\n\nclass Texture final : public ITexture {\n  friend class Device;\n  friend class PlatformDevice;\n\n public:\n  Texture(id<MTLTexture> texture,\n          const ICapabilities& capabilities,\n          TextureDesc::TextureMipmapGeneration mipmapGeneration =\n              TextureDesc::TextureMipmapGeneration::Manual);\n  Texture(id<CAMetalDrawable> drawable,\n          const ICapabilities& capabilities,\n          TextureDesc::TextureMipmapGeneration mipmapGeneration =\n              TextureDesc::TextureMipmapGeneration::Manual);\n  ~Texture() override;\n  Texture(const Texture&) = delete;\n  Texture& operator=(const Texture&) = delete;\n  Texture(Texture&&) = delete;\n  Texture& operator=(Texture&&) = delete;\n\n  Result getBytes(const TextureRangeDesc& range, void* outData, size_t bytesPerRow = 0) const;\n\n  // Accessors\n  [[nodiscard]] Dimensions getDimensions() const override;\n  [[nodiscard]] uint32_t getNumLayers() const override;\n  [[nodiscard]] TextureType getType() const override;\n  [[nodiscard]] TextureDesc::TextureUsage getUsage() const override;\n  [[nodiscard]] uint32_t getSamples() const override;\n  [[nodiscard]] uint32_t getNumMipLevels() const override;\n  void generateMipmap(ICommandQueue& cmdQueue,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n  void generateMipmap(ICommandBuffer& cmdBuffer,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n  [[nodiscard]] bool isRequiredGenerateMipmap() const override;\n  [[nodiscard]] uint64_t getTextureId() const override;\n  [[nodiscard]] TextureDesc::TextureMipmapGeneration getMipmapGeneration() const;\n\n  IGL_INLINE id<MTLTexture> _Nullable get() const {\n    return (drawable_) ? drawable_.texture : value_;\n  }\n  IGL_INLINE id<CAMetalDrawable> _Nullable getDrawable() const {\n    return drawable_;\n  }\n\n  // IAttachmentInterop interface\n  [[nodiscard]] void* IGL_NULLABLE getNativeImage() const override;\n  [[nodiscard]] void* IGL_NULLABLE getNativeImageView() const override;\n  [[nodiscard]] const base::AttachmentInteropDesc& getDesc() const override;\n\n  static TextureDesc::TextureUsage toTextureUsage(MTLTextureUsage usage);\n  static MTLTextureUsage toMTLTextureUsage(TextureDesc::TextureUsage usage);\n\n  static MTLPixelFormat textureFormatToMTLPixelFormat(TextureFormat value);\n  static TextureFormat mtlPixelFormatToTextureFormat(MTLPixelFormat value);\n  static MTLTextureType convertType(TextureType value, size_t numSamples);\n  static TextureType convertType(MTLTextureType value);\n  static NSUInteger getMetalSlice(TextureType type, uint32_t face, uint32_t layer);\n  static TextureRangeDesc atMetalSlice(TextureType type,\n                                       const TextureRangeDesc& range,\n                                       NSUInteger metalSlice);\n\n private:\n  [[nodiscard]] bool needsRepacking(const TextureRangeDesc& range, size_t bytesPerRow) const final;\n  Result uploadInternal(TextureType type,\n                        const TextureRangeDesc& range,\n                        const void* IGL_NULLABLE data,\n                        size_t bytesPerRow,\n                        const uint32_t* IGL_NULLABLE mipLevelBytes) const final;\n\n  void generateMipmap(id<MTLCommandBuffer> cmdBuffer) const;\n\n  // Given bytes per row of an input texture, return bytesPerRow value\n  // accepted by Texture::upload and MTL replaceRegion.\n  [[nodiscard]] size_t toMetalBytesPerRow(size_t bytesPerRow) const;\n\n  id<MTLTexture> _Nullable value_;\n  id<CAMetalDrawable> _Nullable drawable_;\n  const ICapabilities& capabilities_;\n  TextureDesc::TextureMipmapGeneration mipmapGeneration_ =\n      TextureDesc::TextureMipmapGeneration::Manual;\n\n  /// @brief To record whether mipmaps are available and uploaded to the GPU. This is used by the\n  /// `isRequiredGenerateMipmap()` function\n  mutable bool mipmapsAreAvailableAndUploaded_ = false;\n\n  mutable base::AttachmentInteropDesc attachmentDesc_; // Cached for IAttachmentInterop::getDesc()\n};\n\n} // namespace igl::metal\n\n#if IGL_PLATFORM_APPLE\nNS_ASSUME_NONNULL_END\n#endif\n"
  },
  {
    "path": "src/igl/metal/Texture.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/Texture.h>\n\n#include <vector>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/CommandQueue.h>\n\nnamespace {\n\nvoid bgrToRgb(unsigned char* dstImg, size_t width, size_t height, size_t bytesPerPixel) {\n  for (int i = 0; i < height; ++i) {\n    for (int j = 0; j < width; ++j) {\n      auto pixelIndex = i * width + j;\n      std::swap(dstImg[pixelIndex * bytesPerPixel + 0], dstImg[pixelIndex * bytesPerPixel + 2]);\n    }\n  }\n}\n} // namespace\n\nnamespace igl::metal {\n\nTexture::Texture(id<MTLTexture> texture,\n                 const ICapabilities& capabilities,\n                 TextureDesc::TextureMipmapGeneration mipmapGeneration) :\n  ITexture(mtlPixelFormatToTextureFormat([texture pixelFormat])),\n  value_(texture),\n  drawable_(nullptr),\n  capabilities_(capabilities),\n  mipmapGeneration_(mipmapGeneration) {}\n\nTexture::Texture(id<CAMetalDrawable> drawable,\n                 const ICapabilities& capabilities,\n                 TextureDesc::TextureMipmapGeneration mipmapGeneration) :\n  ITexture(mtlPixelFormatToTextureFormat([drawable.texture pixelFormat])),\n  value_(nullptr),\n  drawable_(drawable),\n  capabilities_(capabilities),\n  mipmapGeneration_(mipmapGeneration) {}\n\nTexture::~Texture() {\n  value_ = nil;\n}\n\nbool Texture::needsRepacking(const TextureRangeDesc& range, size_t bytesPerRow) const {\n  if (bytesPerRow == 0) {\n    return false;\n  }\n\n  const auto format = getFormat();\n  if (format == TextureFormat::RGBA_PVRTC_2BPPV1 || format == TextureFormat::RGB_PVRTC_2BPPV1 ||\n      format == TextureFormat::RGBA_PVRTC_4BPPV1 || format == TextureFormat::RGB_PVRTC_4BPPV1) {\n    // PVRTC formats MUST pass a value of 0 to bytesPerRow, so MUST be repacked if bytesPerRow\n    // doesn't match the range's bytesPerRow.\n    const auto rangeBytesPerRow = getProperties().getBytesPerRow(range);\n    return rangeBytesPerRow != bytesPerRow;\n  }\n\n  // Metal textures MUST be aligned to a multiple of the texel size or, for compressed textures, the\n  // texel block size.\n  return bytesPerRow % getProperties().bytesPerBlock != 0;\n}\n\nResult Texture::uploadInternal(TextureType type,\n                               const TextureRangeDesc& range,\n                               const void* IGL_NULLABLE data,\n                               size_t bytesPerRow,\n                               const uint32_t* IGL_NULLABLE /*mipLevelBytes*/) const {\n  if (data == nullptr) {\n    return Result(Result::Code::Ok);\n  }\n  const auto& properties = getProperties();\n  const auto rangeBytesPerRow = bytesPerRow > 0 ? bytesPerRow : properties.getBytesPerRow(range);\n\n  const auto initialSlice = getMetalSlice(type, range.face, range.layer);\n  const auto numSlices = getMetalSlice(type, range.numFaces, range.numLayers);\n  for (auto mipLevel = range.mipLevel; mipLevel < range.mipLevel + range.numMipLevels; ++mipLevel) {\n    const auto mipRange = range.atMipLevel(mipLevel);\n    for (auto slice = initialSlice; slice < initialSlice + numSlices; ++slice) {\n      const auto sliceRange = atMetalSlice(type, mipRange, slice);\n      const auto* sliceData = getSubRangeStart(data, range, sliceRange, bytesPerRow);\n      const auto region = MTLRegionMake3D(sliceRange.x,\n                                          sliceRange.y,\n                                          sliceRange.z,\n                                          sliceRange.width,\n                                          sliceRange.height,\n                                          sliceRange.depth);\n      switch (type) {\n      case TextureType::Cube:\n      case TextureType::TwoD:\n      case TextureType::TwoDArray: {\n        [get() replaceRegion:region\n                 mipmapLevel:sliceRange.mipLevel\n                       slice:getMetalSlice(type, sliceRange.face, sliceRange.layer)\n                   withBytes:sliceData\n                 bytesPerRow:toMetalBytesPerRow(rangeBytesPerRow)\n               bytesPerImage:0];\n        break;\n      }\n      case TextureType::ThreeD: {\n        [get() replaceRegion:region\n                 mipmapLevel:sliceRange.mipLevel\n                       slice:0 /* 3D array textures not supported */\n                   withBytes:sliceData\n                 bytesPerRow:toMetalBytesPerRow(rangeBytesPerRow)\n               bytesPerImage:toMetalBytesPerRow(rangeBytesPerRow * sliceRange.height)];\n        break;\n      }\n      case TextureType::ExternalImage:\n      case TextureType::Invalid:\n      default:\n        IGL_DEBUG_ABORT(\"Unknown texture type\");\n        break;\n      }\n    }\n  }\n\n  if (mipmapGeneration_ == TextureDesc::TextureMipmapGeneration::AutoGenerateOnUpload) {\n    if (range.mipLevel != 0) {\n      return Result{Result::Code::InvalidOperation,\n                    \"AutoGenerateOnUpload requires mipLevel to be uploaded to be 0\"};\n    }\n    const auto* device = static_cast<const igl::metal::Device*>(&capabilities_);\n    if (device) {\n      auto cmdQueue = const_cast<Device*>(device)->getMostRecentCommandQueue();\n      if (!cmdQueue) {\n        Result result;\n        cmdQueue = const_cast<Device*>(device)->createCommandQueue({}, &result);\n        if (!result.isOk()) {\n          return result;\n        }\n      }\n      generateMipmap(*cmdQueue, nullptr);\n      mipmapsAreAvailableAndUploaded_ = true;\n    } else {\n      return Result(igl::Result::Code::RuntimeError,\n                    \"Device is not available; cannot generate mipmaps.\");\n    }\n  }\n\n  return Result{};\n}\n\nResult Texture::getBytes(const TextureRangeDesc& range, void* outData, size_t bytesPerRow) const {\n  if (!outData) {\n    return Result(Result::Code::ArgumentNull, \"Need a valid output buffer\");\n  }\n  if (get().storageMode == MTLStorageModePrivate) {\n    return Result(\n        Result::Code::Unsupported,\n        \"Can't retrieve the data from private memory; use a blit command encoder instead\");\n  }\n  if (range.numLayers > 1 || range.numFaces > 1) {\n    return Result(Result::Code::Unsupported,\n                  \"Can't retrieve data from more than one face or layer\");\n  }\n  const auto& properties = getProperties();\n  if (bytesPerRow == 0) {\n    bytesPerRow = properties.getBytesPerRow(range);\n  }\n\n  const size_t bytesPerImage = properties.getBytesPerRange(range);\n  const MTLRegion region = {{range.x, range.y, 0}, {range.width, range.height, 1}};\n  auto tmpBuffer = std::make_unique<uint8_t[]>(bytesPerImage);\n\n  [get() getBytes:tmpBuffer.get()\n        bytesPerRow:toMetalBytesPerRow(properties.getBytesPerRow(range))\n      bytesPerImage:bytesPerImage\n         fromRegion:region\n        mipmapLevel:range.mipLevel\n              slice:getMetalSlice(getType(), range.face, range.layer)];\n\n  /// Metal textures are up-side down compared to OGL textures. IGL follows\n  /// the OGL convention and this function flips the texture vertically\n  repackData(\n      properties, range, tmpBuffer.get(), 0, static_cast<uint8_t*>(outData), bytesPerRow, true);\n\n  const igl::TextureFormat f = getFormat();\n  const TextureFormatProperties props = TextureFormatProperties::fromTextureFormat(f);\n  auto bytesPerPixel = props.bytesPerBlock;\n  if (f == TextureFormat::BGRA_SRGB || f == TextureFormat::BGRA_UNorm8) {\n    bgrToRgb(static_cast<unsigned char*>(outData), range.width, range.height, bytesPerPixel);\n  }\n  return Result(Result::Code::Ok);\n}\n\nsize_t Texture::toMetalBytesPerRow(size_t bytesPerRow) const {\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wswitch-enum\"\n  switch (getFormat()) {\n  case TextureFormat::RGBA_PVRTC_2BPPV1:\n  case TextureFormat::RGB_PVRTC_2BPPV1:\n  case TextureFormat::RGBA_PVRTC_4BPPV1:\n  case TextureFormat::RGB_PVRTC_4BPPV1:\n    return 0;\n  default:\n    return bytesPerRow;\n  }\n#pragma clang diagnostic pop\n}\n\nDimensions Texture::getDimensions() const {\n  auto texture = get();\n  return Dimensions{static_cast<uint32_t>([texture width]),\n                    static_cast<uint32_t>([texture height]),\n                    static_cast<uint32_t>([texture depth])};\n}\n\nuint32_t Texture::getNumLayers() const {\n  return [get() arrayLength];\n}\n\nTextureType Texture::getType() const {\n  return convertType([get() textureType]);\n}\n\nTextureDesc::TextureUsage Texture::getUsage() const {\n  return toTextureUsage([get() usage]);\n}\n\nuint32_t Texture::getSamples() const {\n  return [get() sampleCount];\n}\n\nuint32_t Texture::getNumMipLevels() const {\n  return [get() mipmapLevelCount];\n}\n\nvoid Texture::generateMipmap(ICommandQueue& cmdQueue, const TextureRangeDesc* range) const {\n  if (range) {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n\n  if (value_.mipmapLevelCount > 1) {\n    auto mtlCmdQueue = static_cast<CommandQueue&>(cmdQueue).get();\n\n    const id<MTLCommandBuffer> mtlCmdBuffer = [mtlCmdQueue commandBuffer];\n    if (mtlCmdBuffer) {\n      generateMipmap(mtlCmdBuffer);\n      [mtlCmdBuffer commit];\n    }\n  }\n}\n\nvoid Texture::generateMipmap(ICommandBuffer& cmdBuffer, const TextureRangeDesc* range) const {\n  if (range) {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n\n  if (value_.mipmapLevelCount > 1) {\n    auto mtlCmdBuffer = static_cast<CommandBuffer&>(cmdBuffer).get();\n    generateMipmap(mtlCmdBuffer);\n  }\n}\n\nvoid Texture::generateMipmap(id<MTLCommandBuffer> cmdBuffer) const {\n  // we can only generate mipmaps for filterable texture formats via the blit encoder\n  const bool isFilterable = (capabilities_.getTextureFormatCapabilities(getFormat()) &\n                             ICapabilities::TextureFormatCapabilityBits::SampledFiltered) != 0;\n  if (!isFilterable) {\n    // TODO: implement manual mip generation for required formats (e.g. RGBA32Float)\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return;\n  }\n\n  const id<MTLBlitCommandEncoder> encoder = [cmdBuffer blitCommandEncoder];\n  [encoder generateMipmapsForTexture:value_];\n  [encoder endEncoding];\n}\n\nbool Texture::isRequiredGenerateMipmap() const {\n  if (mipmapsAreAvailableAndUploaded_) {\n    return false;\n  }\n\n  return value_.mipmapLevelCount > 1;\n}\n\nuint64_t Texture::getTextureId() const {\n  // TODO: implement via gpuResourceID\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  return 0;\n}\n\nTextureDesc::TextureMipmapGeneration Texture::getMipmapGeneration() const {\n  return mipmapGeneration_;\n}\n\nTextureDesc::TextureUsage Texture::toTextureUsage(MTLTextureUsage usage) {\n  TextureDesc::TextureUsage result = 0;\n  result |= ((usage & MTLTextureUsageShaderRead) != 0) ? TextureDesc::TextureUsageBits::Sampled : 0;\n  result |= ((usage & MTLTextureUsageShaderWrite) != 0) ? TextureDesc::TextureUsageBits::Storage\n                                                        : 0;\n  result |= ((usage & MTLTextureUsageRenderTarget) != 0) ? TextureDesc::TextureUsageBits::Attachment\n                                                         : 0;\n  return result;\n}\n\nMTLTextureUsage Texture::toMTLTextureUsage(TextureDesc::TextureUsage usage) {\n  MTLTextureUsage result = 0;\n  result |= ((usage & TextureDesc::TextureUsageBits::Sampled) != 0) ? MTLTextureUsageShaderRead : 0;\n  result |= ((usage & TextureDesc::TextureUsageBits::Storage) != 0) ? MTLTextureUsageShaderWrite\n                                                                    : 0;\n  result |= ((usage & TextureDesc::TextureUsageBits::Attachment) != 0) ? MTLTextureUsageRenderTarget\n                                                                       : 0;\n  return result;\n}\n\nMTLTextureType Texture::convertType(TextureType value, size_t numSamples) {\n  IGL_DEBUG_ASSERT(value != TextureType::Invalid && value != TextureType::ExternalImage);\n\n  switch (value) {\n  case TextureType::ExternalImage:\n  case TextureType::Invalid:\n    return MTLTextureType1D; // Use 1D texture as fallback for invalid\n  case TextureType::TwoD:\n    return numSamples > 1 ? MTLTextureType2DMultisample : MTLTextureType2D;\n  case TextureType::TwoDArray:\n    if (@available(macOS 10.14, iOS 14.0, *)) {\n      return numSamples > 1 ? MTLTextureType2DMultisampleArray : MTLTextureType2DArray;\n    } else {\n      return MTLTextureType2DArray;\n    }\n  case TextureType::ThreeD:\n    return MTLTextureType3D;\n  case TextureType::Cube:\n    return MTLTextureTypeCube;\n  }\n}\n\nTextureType Texture::convertType(MTLTextureType value) {\n  switch (value) {\n  case MTLTextureType2D:\n  case MTLTextureType2DMultisample:\n    return TextureType::TwoD;\n  case MTLTextureType2DArray:\n    return TextureType::TwoDArray;\n  case MTLTextureType3D:\n    return TextureType::ThreeD;\n  case MTLTextureTypeCube:\n    return TextureType::Cube;\n  case MTLTextureType2DMultisampleArray:\n    return TextureType::TwoDArray;\n  case MTLTextureType1D:\n  case MTLTextureType1DArray:\n  case MTLTextureTypeTextureBuffer:\n  case MTLTextureTypeCubeArray:\n  default:\n    return TextureType::Invalid;\n  }\n}\n\nMTLPixelFormat Texture::textureFormatToMTLPixelFormat(TextureFormat value) {\n  switch (value) {\n  case TextureFormat::Invalid:\n    return MTLPixelFormatInvalid;\n\n    // 8 bpp\n  case TextureFormat::R_UNorm8:\n    return MTLPixelFormatR8Unorm;\n  case TextureFormat::A_UNorm8:\n    return MTLPixelFormatA8Unorm;\n    // 16 bpp\n  case TextureFormat::B5G5R5A1_UNorm:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatBGR5A1Unorm;\n#endif\n  case TextureFormat::B5G6R5_UNorm:\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_IOS_SIMULATOR\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatB5G6R5Unorm;\n#endif\n  case TextureFormat::ABGR_UNorm4:\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_IOS_SIMULATOR\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatABGR4Unorm;\n#endif\n  case TextureFormat::RG_UNorm8:\n    return MTLPixelFormatRG8Unorm;\n  case TextureFormat::R4G2B2_UNorm_Apple:\n    return MTLPixelFormatBGRG422;\n  case TextureFormat::R4G2B2_UNorm_Rev_Apple:\n    return MTLPixelFormatGBGR422;\n\n  case TextureFormat::R_F16:\n    return MTLPixelFormatR16Float;\n  case TextureFormat::R_UInt16:\n    return MTLPixelFormatR16Uint;\n  case TextureFormat::R_UNorm16:\n    return MTLPixelFormatR16Unorm;\n\n    // 32 bpp\n  case TextureFormat::RGBA_UNorm8:\n    return MTLPixelFormatRGBA8Unorm;\n  case TextureFormat::BGRA_UNorm8:\n    return MTLPixelFormatBGRA8Unorm;\n\n  case TextureFormat::RGBA_SRGB:\n    return MTLPixelFormatRGBA8Unorm_sRGB;\n  case TextureFormat::BGRA_SRGB:\n    return MTLPixelFormatBGRA8Unorm_sRGB;\n  case TextureFormat::RGBA_F16:\n    return MTLPixelFormatRGBA16Float;\n  case TextureFormat::RG_F16:\n    return MTLPixelFormatRG16Float;\n  case TextureFormat::RG_UInt16:\n    return MTLPixelFormatRG16Uint;\n  case TextureFormat::RG_UNorm16:\n    return MTLPixelFormatRG16Unorm;\n  case TextureFormat::RGBA_UNorm16:\n    return MTLPixelFormatRGBA16Unorm;\n\n  case TextureFormat::RGB10_A2_UNorm_Rev:\n    return MTLPixelFormatRGB10A2Unorm;\n  case TextureFormat::RGB10_A2_Uint_Rev:\n    return MTLPixelFormatRGB10A2Uint;\n  case TextureFormat::BGR10_A2_Unorm:\n    return MTLPixelFormatBGR10A2Unorm;\n\n  case TextureFormat::R_F32:\n    return MTLPixelFormatR32Float;\n\n  case TextureFormat::R_UInt32:\n    return MTLPixelFormatR32Uint;\n\n  case TextureFormat::RG_F32:\n    return MTLPixelFormatRG32Float;\n\n  // 96 bit\n  case TextureFormat::RGB_F32:\n    return MTLPixelFormatInvalid;\n  // 128 bps\n  case TextureFormat::RGBA_UInt32:\n    return MTLPixelFormatRGBA32Uint;\n  case TextureFormat::RGBA_F32:\n    return MTLPixelFormatRGBA32Float;\n  case TextureFormat::LA_UNorm8:\n    // This format should not be used in Metal. Use RG_UNorm8 instead.\n\n  case TextureFormat::BGRA_UNorm8_Rev:\n    // On the OGL side, this format is used to convert BGRA image to RGBA\n    // during upload. Not sure if we can do this with Metal\n  case TextureFormat::L_UNorm8: // No Metal equivalent\n  case TextureFormat::RGB8_Punchthrough_A1_ETC2:\n  case TextureFormat::SRGB8_Punchthrough_A1_ETC2:\n  case TextureFormat::RGB_F16:\n  case TextureFormat::RGBX_UNorm8:\n  case TextureFormat::R5G5B5A1_UNorm:\n    return MTLPixelFormatInvalid;\n\n    // Compressed\n  case TextureFormat::RGBA_ASTC_4x4:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_4x4_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_4x4:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_4x4_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_5x4:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_5x4_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_5x4:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_5x4_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_5x5:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_5x5_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_5x5:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_5x5_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_6x5:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_6x5_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_6x5:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_6x5_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_6x6:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_6x6_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_6x6:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_6x6_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_8x5:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_8x5_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_8x5:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_8x5_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_8x6:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_8x6_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_8x6:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_8x6_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_8x8:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_8x8_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_8x8:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_8x8_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_10x5:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_10x5_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_10x5:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_10x5_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_10x6:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_10x6_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_10x6:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_10x6_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_10x8:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_10x8_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_10x8:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_10x8_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_10x10:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_10x10_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_10x10:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_10x10_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_12x10:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_12x10_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_12x10:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_12x10_sRGB;\n#endif\n\n  case TextureFormat::RGBA_ASTC_12x12:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_12x12_LDR;\n#endif\n\n  case TextureFormat::SRGB8_A8_ASTC_12x12:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatASTC_12x12_sRGB;\n#endif\n\n  case TextureFormat::RGBA_PVRTC_2BPPV1:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatPVRTC_RGBA_2BPP;\n#endif\n\n  case TextureFormat::RGB_PVRTC_2BPPV1:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatPVRTC_RGB_2BPP;\n#endif\n\n  case TextureFormat::RGBA_PVRTC_4BPPV1:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatPVRTC_RGBA_4BPP;\n#endif\n\n  case TextureFormat::RGB_PVRTC_4BPPV1:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatPVRTC_RGB_4BPP;\n#endif\n\n  case TextureFormat::RGB8_ETC1:\n  case TextureFormat::RGB8_ETC2:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatETC2_RGB8;\n#endif\n\n  case TextureFormat::RGBA8_EAC_ETC2:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatEAC_RGBA8;\n#endif\n\n  case TextureFormat::SRGB8_ETC2:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatETC2_RGB8_sRGB;\n#endif\n\n  case TextureFormat::SRGB8_A8_EAC_ETC2:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatEAC_RGBA8_sRGB;\n#endif\n\n  case TextureFormat::RG_EAC_UNorm:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatEAC_RG11Unorm;\n#endif\n\n  case TextureFormat::RG_EAC_SNorm:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatEAC_RG11Snorm;\n#endif\n\n  case TextureFormat::R_EAC_UNorm:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatEAC_R11Unorm;\n#endif\n\n  case TextureFormat::R_EAC_SNorm:\n#if IGL_PLATFORM_MACOSX\n    return MTLPixelFormatInvalid;\n#else\n    return MTLPixelFormatEAC_R11Snorm;\n#endif\n\n    // MTLPixelFormatBC7_RGBAUnorm supported only on MacOS and Catalyst\n    // https://developer.apple.com/documentation/metal/mtlpixelformat/mtlpixelformatbc7_rgbaunorm\n  case TextureFormat::RGBA_BC7_UNORM_4x4:\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST\n    return MTLPixelFormatBC7_RGBAUnorm;\n#else\n    return MTLPixelFormatInvalid;\n#endif\n  case TextureFormat::RGBA_BC7_SRGB_4x4:\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST\n    return MTLPixelFormatBC7_RGBAUnorm_sRGB;\n#else\n    return MTLPixelFormatInvalid;\n#endif\n\n    // Depth & Stencil\n  case TextureFormat::Z_UNorm16:\n    return MTLPixelFormatDepth32Float;\n  case TextureFormat::Z_UNorm24:\n    return MTLPixelFormatDepth32Float;\n  case TextureFormat::Z_UNorm32:\n    return MTLPixelFormatDepth32Float;\n  case TextureFormat::S8_UInt_Z24_UNorm:\n    return MTLPixelFormatDepth32Float_Stencil8;\n  case TextureFormat::S8_UInt_Z32_UNorm:\n    return MTLPixelFormatDepth32Float_Stencil8;\n  case TextureFormat::S_UInt8:\n    return MTLPixelFormatStencil8;\n\n  case TextureFormat::YUV_NV12:\n  case TextureFormat::YUV_420p:\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  default:\n    return MTLPixelFormatInvalid;\n  }\n}\n\nTextureFormat Texture::mtlPixelFormatToTextureFormat(MTLPixelFormat value) {\n// Some fbsource targets don't allow enum default, this makes sure all of them compile\n#pragma clang diagnostic push\n#pragma clang diagnostic ignored \"-Wswitch-enum\"\n  switch (value) {\n  // 8 bpp\n  case MTLPixelFormatR8Unorm:\n    return TextureFormat::R_UNorm8;\n  case MTLPixelFormatA8Unorm:\n    return TextureFormat::A_UNorm8;\n\n// 16 bpp\n#if !IGL_PLATFORM_MACOSX // No support for these on macOS\n  case MTLPixelFormatBGR5A1Unorm:\n    return TextureFormat::B5G5R5A1_UNorm;\n  case MTLPixelFormatB5G6R5Unorm:\n    return TextureFormat::B5G6R5_UNorm;\n  case MTLPixelFormatABGR4Unorm:\n    return TextureFormat::ABGR_UNorm4;\n#endif\n  case MTLPixelFormatRG8Unorm:\n    return TextureFormat::RG_UNorm8;\n  case MTLPixelFormatBGRG422:\n    return TextureFormat::R4G2B2_UNorm_Apple;\n  case MTLPixelFormatGBGR422:\n    return TextureFormat::R4G2B2_UNorm_Rev_Apple;\n  case MTLPixelFormatR16Uint:\n    return TextureFormat::R_UInt16;\n  case MTLPixelFormatR16Unorm:\n    return TextureFormat::R_UNorm16;\n\n    // 32 bpp\n  case MTLPixelFormatRGBA8Unorm:\n    return TextureFormat::RGBA_UNorm8;\n  case MTLPixelFormatBGRA8Unorm:\n    return TextureFormat::BGRA_UNorm8;\n  case MTLPixelFormatBGRA8Unorm_sRGB:\n    return TextureFormat::BGRA_SRGB;\n\n  case MTLPixelFormatRGBA8Unorm_sRGB:\n    return TextureFormat::RGBA_SRGB;\n\n  case MTLPixelFormatRGB10A2Unorm:\n    return TextureFormat::RGB10_A2_UNorm_Rev;\n  case MTLPixelFormatRGB10A2Uint:\n    return TextureFormat::RGB10_A2_Uint_Rev;\n  case MTLPixelFormatBGR10A2Unorm:\n    return TextureFormat::BGR10_A2_Unorm;\n\n  case MTLPixelFormatRGBA16Float:\n    return TextureFormat::RGBA_F16;\n  case MTLPixelFormatR16Float:\n    return TextureFormat::R_F16;\n  case MTLPixelFormatRG16Float:\n    return TextureFormat::RG_F16;\n  case MTLPixelFormatRG16Uint:\n    return TextureFormat::RG_UInt16;\n  case MTLPixelFormatRG16Unorm:\n    return TextureFormat::RG_UNorm16;\n  case MTLPixelFormatRGBA16Unorm:\n    return TextureFormat::RGBA_UNorm16;\n\n  case MTLPixelFormatR32Float:\n    return TextureFormat::R_F32;\n  case MTLPixelFormatR32Uint:\n    return TextureFormat::R_UInt32;\n  case MTLPixelFormatRG32Float:\n    return TextureFormat::RG_F32;\n  case MTLPixelFormatRGBA32Uint:\n    return TextureFormat::RGBA_UInt32;\n  case MTLPixelFormatRGBA32Float:\n    return TextureFormat::RGBA_F32;\n\n// Compressed\n#if !IGL_PLATFORM_MACOSX\n  case MTLPixelFormatASTC_4x4_LDR:\n    return TextureFormat::RGBA_ASTC_4x4;\n  case MTLPixelFormatASTC_4x4_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_4x4;\n  case MTLPixelFormatASTC_5x4_LDR:\n    return TextureFormat::RGBA_ASTC_5x4;\n  case MTLPixelFormatASTC_5x4_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_5x4;\n  case MTLPixelFormatASTC_5x5_LDR:\n    return TextureFormat::RGBA_ASTC_5x5;\n  case MTLPixelFormatASTC_5x5_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_5x5;\n  case MTLPixelFormatASTC_6x5_LDR:\n    return TextureFormat::RGBA_ASTC_6x5;\n  case MTLPixelFormatASTC_6x5_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_6x5;\n  case MTLPixelFormatASTC_6x6_LDR:\n    return TextureFormat::RGBA_ASTC_6x6;\n  case MTLPixelFormatASTC_6x6_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_6x6;\n  case MTLPixelFormatASTC_8x5_LDR:\n    return TextureFormat::RGBA_ASTC_8x5;\n  case MTLPixelFormatASTC_8x5_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_8x5;\n  case MTLPixelFormatASTC_8x6_LDR:\n    return TextureFormat::RGBA_ASTC_8x6;\n  case MTLPixelFormatASTC_8x6_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_8x6;\n  case MTLPixelFormatASTC_8x8_LDR:\n    return TextureFormat::RGBA_ASTC_8x8;\n  case MTLPixelFormatASTC_8x8_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_8x8;\n  case MTLPixelFormatASTC_10x5_LDR:\n    return TextureFormat::RGBA_ASTC_10x5;\n  case MTLPixelFormatASTC_10x5_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_10x5;\n  case MTLPixelFormatASTC_10x6_LDR:\n    return TextureFormat::RGBA_ASTC_10x6;\n  case MTLPixelFormatASTC_10x6_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_10x6;\n  case MTLPixelFormatASTC_10x8_LDR:\n    return TextureFormat::RGBA_ASTC_10x8;\n  case MTLPixelFormatASTC_10x8_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_10x8;\n  case MTLPixelFormatASTC_10x10_LDR:\n    return TextureFormat::RGBA_ASTC_10x10;\n  case MTLPixelFormatASTC_10x10_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_10x10;\n  case MTLPixelFormatASTC_12x10_LDR:\n    return TextureFormat::RGBA_ASTC_12x10;\n  case MTLPixelFormatASTC_12x10_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_12x10;\n  case MTLPixelFormatASTC_12x12_LDR:\n    return TextureFormat::RGBA_ASTC_12x12;\n  case MTLPixelFormatASTC_12x12_sRGB:\n    return TextureFormat::SRGB8_A8_ASTC_12x12;\n  case MTLPixelFormatPVRTC_RGBA_2BPP:\n    return TextureFormat::RGBA_PVRTC_2BPPV1;\n  case MTLPixelFormatPVRTC_RGB_2BPP:\n    return TextureFormat::RGB_PVRTC_2BPPV1;\n  case MTLPixelFormatPVRTC_RGBA_4BPP:\n    return TextureFormat::RGBA_PVRTC_4BPPV1;\n  case MTLPixelFormatPVRTC_RGB_4BPP:\n    return TextureFormat::RGB_PVRTC_4BPPV1;\n  case MTLPixelFormatETC2_RGB8:\n    return TextureFormat::RGB8_ETC2;\n  case MTLPixelFormatEAC_RGBA8:\n    return TextureFormat::RGBA8_EAC_ETC2;\n#endif\n#if IGL_PLATFORM_MACOSX\n  case MTLPixelFormatBC7_RGBAUnorm:\n    return TextureFormat::RGBA_BC7_UNORM_4x4;\n  case MTLPixelFormatBC7_RGBAUnorm_sRGB:\n    return TextureFormat::RGBA_BC7_SRGB_4x4;\n#endif\n\n  // Depth & Stencil\n  case MTLPixelFormatDepth32Float:\n    return TextureFormat::Z_UNorm32;\n  case MTLPixelFormatDepth32Float_Stencil8:\n    return TextureFormat::S8_UInt_Z32_UNorm;\n  case MTLPixelFormatStencil8:\n    return TextureFormat::S_UInt8;\n\n  default:\n    return TextureFormat::Invalid;\n  }\n\n#pragma clang diagnostic pop\n}\n\nNSUInteger Texture::getMetalSlice(TextureType type, uint32_t face, uint32_t layer) {\n  return type == TextureType::Cube ? face : layer;\n}\n\nTextureRangeDesc Texture::atMetalSlice(TextureType type,\n                                       const TextureRangeDesc& range,\n                                       NSUInteger metalSlice) {\n  return type == TextureType::Cube ? range.atFace(static_cast<uint32_t>(metalSlice))\n                                   : range.atLayer(static_cast<uint32_t>(metalSlice));\n}\n\n// IAttachmentInterop interface implementation\nvoid* Texture::getNativeImage() const {\n  return (__bridge void*)get();\n}\n\nvoid* Texture::getNativeImageView() const {\n  // Metal doesn't have a separate image view concept\n  return nullptr;\n}\n\nconst base::AttachmentInteropDesc& Texture::getDesc() const {\n  id<MTLTexture> tex = get();\n  // Update cached attachment descriptor\n  attachmentDesc_.width = static_cast<uint32_t>(tex.width);\n  attachmentDesc_.height = static_cast<uint32_t>(tex.height);\n  attachmentDesc_.depth = static_cast<uint32_t>(tex.depth);\n  attachmentDesc_.numLayers = static_cast<uint32_t>(tex.arrayLength);\n  attachmentDesc_.numSamples = static_cast<uint32_t>(tex.sampleCount);\n  attachmentDesc_.numMipLevels = static_cast<uint32_t>(tex.mipmapLevelCount);\n  attachmentDesc_.type = static_cast<base::TextureType>(convertType(tex.textureType));\n  attachmentDesc_.format =\n      static_cast<base::TextureFormat>(mtlPixelFormatToTextureFormat(tex.pixelFormat));\n  attachmentDesc_.isSampled = (tex.usage & MTLTextureUsageShaderRead) != 0;\n  return attachmentDesc_;\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/Timer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Timer.h>\n\nnamespace igl::metal {\n\nclass Timer : public ITimer {\n public:\n  ~Timer() override = default;\n\n  [[nodiscard]] uint64_t getElapsedTimeNanos() const override {\n    return executionTime_;\n  }\n\n  [[nodiscard]] bool resultsAvailable() const override {\n    return executionTime_ != 0;\n  }\n\n private:\n  uint64_t executionTime_ = 0;\n\n  friend class CommandQueue;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/TimestampQueries.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n@protocol MTLCommandBuffer;\n@protocol MTLCounterSampleBuffer;\n#include <atomic>\n#include <mutex>\n#import <objc/objc.h>\n#include <vector>\n#include <igl/TimestampQueries.h>\n\nnamespace igl::metal {\n\nclass CommandQueue;\n\nclass TimestampQueries : public ITimestampQueries {\n public:\n  TimestampQueries(id<MTLCounterSampleBuffer> sampleBuffer, uint32_t maxTimestamps);\n  ~TimestampQueries() override;\n\n  uint32_t capacity() const override;\n  uint32_t count() const override;\n  void reset() override;\n  bool resultsAvailable() const override;\n  uint64_t getElapsedNanos(uint32_t slotIndex) const override;\n\n  /// Called from CommandQueue completion handler -- resolves counter data\n  void resolveTimestamps(id<MTLCounterSampleBuffer> csb);\n\n  /// Attach a GPU completion handler to an externally-managed command buffer\n  /// to resolve timestamps on GPU completion. Use this when the command buffer\n  /// is NOT submitted via CommandQueue::submit().\n  /// @param cmdBuffer The Metal command buffer to attach the handler to.\n  /// @param queries Owning shared_ptr captured in the completion block to\n  ///        prevent use-after-free (mirrors CommandQueue::submit pattern).\n  static void attachResolveHandler(id<MTLCommandBuffer> cmdBuffer,\n                                   std::shared_ptr<TimestampQueries> queries);\n\n private:\n  id<MTLCounterSampleBuffer> sampleBuffer_ = nil;\n  uint32_t maxTimestamps_ = 0;\n  std::atomic<uint32_t> currentIndex_{0};\n  std::atomic<uint64_t> generation_{0};\n  std::vector<uint64_t> resolvedTimestamps_;\n  std::atomic<bool> resolved_{false};\n  mutable std::mutex resolveMutex_;\n\n  friend class CommandQueue;\n  friend class RenderCommandEncoder;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/TimestampQueries.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/TimestampQueries.h>\n\n#import <Foundation/NSData.h>\n#import <Foundation/NSException.h>\n#import <Foundation/NSRange.h>\n#import <Metal/MTLCommandBuffer.h> // @donotremove\n#import <Metal/MTLCounters.h>\n#include <algorithm>\n\nnamespace igl::metal {\n\nTimestampQueries::TimestampQueries(id<MTLCounterSampleBuffer> sampleBuffer,\n                                   uint32_t maxTimestamps) :\n  sampleBuffer_(sampleBuffer), maxTimestamps_(maxTimestamps) {\n  // Each timing slot uses two internal counter samples (vertex-start + fragment-end).\n  resolvedTimestamps_.reserve(maxTimestamps * 2);\n}\n\nTimestampQueries::~TimestampQueries() {\n  sampleBuffer_ = nil;\n}\n\nuint32_t TimestampQueries::capacity() const {\n  return maxTimestamps_;\n}\n\nuint32_t TimestampQueries::count() const {\n  return std::min(currentIndex_.load(std::memory_order_relaxed), maxTimestamps_);\n}\n\nvoid TimestampQueries::reset() {\n  generation_.fetch_add(1, std::memory_order_release);\n  currentIndex_.store(0, std::memory_order_release);\n  resolved_.store(false, std::memory_order_release);\n}\n\nbool TimestampQueries::resultsAvailable() const {\n  return resolved_.load(std::memory_order_acquire);\n}\n\nuint64_t TimestampQueries::getElapsedNanos(uint32_t slotIndex) const {\n  if (!resolved_.load(std::memory_order_acquire)) {\n    return 0;\n  }\n  std::lock_guard<std::mutex> lock(resolveMutex_);\n  uint32_t startIdx = slotIndex * 2;\n  uint32_t endIdx = slotIndex * 2 + 1;\n  if (endIdx >= resolvedTimestamps_.size()) {\n    return 0;\n  }\n  uint64_t start = resolvedTimestamps_[startIdx];\n  uint64_t end = resolvedTimestamps_[endIdx];\n  if (end > start) {\n    return end - start;\n  }\n  return 0;\n}\n\nvoid TimestampQueries::resolveTimestamps(id<MTLCounterSampleBuffer> csb) {\n  // Clamp to maxTimestamps_ to prevent out-of-bounds access on the counter sample buffer\n  // in case sampleTimestamp was called more times than capacity allows (fetch_add overflow).\n  uint32_t n = std::min(currentIndex_.load(std::memory_order_acquire), maxTimestamps_);\n  if (n == 0) {\n    return;\n  }\n\n  NSData* data = nil;\n  @try {\n    data = [csb resolveCounterRange:NSMakeRange(0, n)];\n  } @catch (NSException*) {\n    return; // GPU reset or counter sample buffer invalidated — skip this frame\n  }\n  if (!data || data.length < n * sizeof(MTLCounterResultTimestamp)) {\n    return;\n  }\n\n  const auto* timestamps = static_cast<const MTLCounterResultTimestamp*>(data.bytes);\n\n  std::lock_guard<std::mutex> lock(resolveMutex_);\n  resolvedTimestamps_.resize(n);\n  for (uint32_t i = 0; i < n; ++i) {\n    resolvedTimestamps_[i] = timestamps[i].timestamp;\n  }\n  resolved_.store(true, std::memory_order_release);\n}\n\nvoid TimestampQueries::attachResolveHandler(id<MTLCommandBuffer> cmdBuffer,\n                                            std::shared_ptr<TimestampQueries> queries) {\n  if (!queries || !cmdBuffer) {\n    return;\n  }\n  // Capture by value: shared_ptr extends lifetime, csb retains the ObjC object,\n  // gen snapshots the current generation for staleness detection.\n  id<MTLCounterSampleBuffer> csb = queries->sampleBuffer_;\n  uint64_t gen = queries->generation_.load(std::memory_order_acquire);\n  [cmdBuffer addCompletedHandler:^(id<MTLCommandBuffer> /*cb*/) {\n    @try {\n      if (queries->generation_.load(std::memory_order_acquire) == gen) {\n        queries->resolveTimestamps(csb);\n      }\n    } @catch (NSException*) {\n      // GPU reset or counter sample buffer invalidated - silently skip.\n    }\n  }];\n}\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/VertexInputState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Metal/MTLVertexDescriptor.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::metal {\n\nclass VertexInputState final : public IVertexInputState {\n  friend class Device;\n\n public:\n  explicit VertexInputState(MTLVertexDescriptor* value);\n  ~VertexInputState() override = default;\n\n  IGL_INLINE MTLVertexDescriptor* get() const {\n    return value_;\n  }\n\n  static MTLVertexFormat convertAttributeFormat(VertexAttributeFormat value);\n  static MTLVertexStepFunction convertSampleFunction(VertexSampleFunction value);\n\n private:\n  MTLVertexDescriptor* value_;\n};\n\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/VertexInputState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/VertexInputState.h>\n\nnamespace igl::metal {\n\nmetal::VertexInputState::VertexInputState(MTLVertexDescriptor* value) : value_(value) {}\n\nMTLVertexFormat VertexInputState::convertAttributeFormat(VertexAttributeFormat value) {\n  switch (value) {\n  case VertexAttributeFormat::Float1:\n    return MTLVertexFormatFloat;\n  case VertexAttributeFormat::Float2:\n    return MTLVertexFormatFloat2;\n  case VertexAttributeFormat::Float3:\n    return MTLVertexFormatFloat3;\n  case VertexAttributeFormat::Float4:\n    return MTLVertexFormatFloat4;\n\n  case VertexAttributeFormat::Byte2:\n    return MTLVertexFormatChar2;\n  case VertexAttributeFormat::Byte3:\n    return MTLVertexFormatChar3;\n  case VertexAttributeFormat::Byte4:\n    return MTLVertexFormatChar4;\n  case VertexAttributeFormat::UByte2:\n    return MTLVertexFormatUChar2;\n  case VertexAttributeFormat::UByte3:\n    return MTLVertexFormatUChar3;\n  case VertexAttributeFormat::UByte4:\n    return MTLVertexFormatUChar4;\n\n  case VertexAttributeFormat::Short2:\n    return MTLVertexFormatShort2;\n  case VertexAttributeFormat::Short3:\n    return MTLVertexFormatShort3;\n  case VertexAttributeFormat::Short4:\n    return MTLVertexFormatShort4;\n  case VertexAttributeFormat::UShort2:\n    return MTLVertexFormatUShort2;\n  case VertexAttributeFormat::UShort3:\n    return MTLVertexFormatUShort3;\n  case VertexAttributeFormat::UShort4:\n    return MTLVertexFormatUShort4;\n\n  case VertexAttributeFormat::Byte1Norm:\n    return MTLVertexFormatCharNormalized;\n  case VertexAttributeFormat::Byte2Norm:\n    return MTLVertexFormatChar2Normalized;\n  case VertexAttributeFormat::Byte3Norm:\n    return MTLVertexFormatChar3Normalized;\n  case VertexAttributeFormat::Byte4Norm:\n    return MTLVertexFormatChar4Normalized;\n\n  case VertexAttributeFormat::UByte1Norm:\n    return MTLVertexFormatUCharNormalized;\n  case VertexAttributeFormat::UByte2Norm:\n    return MTLVertexFormatUChar2Normalized;\n  case VertexAttributeFormat::UByte3Norm:\n    return MTLVertexFormatUChar3Normalized;\n  case VertexAttributeFormat::UByte4Norm:\n    return MTLVertexFormatUChar4Normalized;\n\n  case VertexAttributeFormat::Short1Norm:\n    return MTLVertexFormatShortNormalized;\n  case VertexAttributeFormat::Short2Norm:\n    return MTLVertexFormatShort2Normalized;\n  case VertexAttributeFormat::Short3Norm:\n    return MTLVertexFormatShort3Normalized;\n  case VertexAttributeFormat::Short4Norm:\n    return MTLVertexFormatShort4Normalized;\n\n  case VertexAttributeFormat::UShort1Norm:\n    return MTLVertexFormatUShortNormalized;\n  case VertexAttributeFormat::UShort2Norm:\n    return MTLVertexFormatUShort2Normalized;\n  case VertexAttributeFormat::UShort3Norm:\n    return MTLVertexFormatUShort3Normalized;\n  case VertexAttributeFormat::UShort4Norm:\n    return MTLVertexFormatUShort4Normalized;\n\n  case VertexAttributeFormat::Byte1:\n  case VertexAttributeFormat::UByte1:\n  case VertexAttributeFormat::Short1:\n  case VertexAttributeFormat::UShort1:\n    return MTLVertexFormatInvalid;\n\n  case VertexAttributeFormat::Int1:\n    return MTLVertexFormatInt;\n  case VertexAttributeFormat::Int2:\n    return MTLVertexFormatInt2;\n  case VertexAttributeFormat::Int3:\n    return MTLVertexFormatInt3;\n  case VertexAttributeFormat::Int4:\n    return MTLVertexFormatInt4;\n\n  case VertexAttributeFormat::UInt1:\n    return MTLVertexFormatUInt;\n  case VertexAttributeFormat::UInt2:\n    return MTLVertexFormatUInt2;\n  case VertexAttributeFormat::UInt3:\n    return MTLVertexFormatUInt3;\n  case VertexAttributeFormat::UInt4:\n    return MTLVertexFormatUInt4;\n\n  case VertexAttributeFormat::HalfFloat1:\n    return MTLVertexFormatHalf;\n  case VertexAttributeFormat::HalfFloat2:\n    return MTLVertexFormatHalf2;\n  case VertexAttributeFormat::HalfFloat3:\n    return MTLVertexFormatHalf3;\n  case VertexAttributeFormat::HalfFloat4:\n    return MTLVertexFormatHalf4;\n\n  case VertexAttributeFormat::Int_2_10_10_10_REV:\n    return MTLVertexFormatInt1010102Normalized;\n\n    // The 'default' case below is commented out, so that compiler will catch and error\n    // on any unhandled cases.\n\n    // default:\n    //  return MTLVertexFormatInvalid;\n  }\n\n  return MTLVertexFormatInvalid;\n}\n\nMTLVertexStepFunction VertexInputState::convertSampleFunction(VertexSampleFunction value) {\n  switch (value) {\n  case VertexSampleFunction::Constant:\n    return MTLVertexStepFunctionConstant;\n  case VertexSampleFunction::PerVertex:\n    return MTLVertexStepFunctionPerVertex;\n  case VertexSampleFunction::Instance:\n    return MTLVertexStepFunctionPerInstance;\n  }\n}\n} // namespace igl::metal\n"
  },
  {
    "path": "src/igl/metal/ios/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Metal/Metal.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::metal::ios {\n\n// @fb-only\nclass Device final : public ::igl::metal::Device {\n public:\n  explicit Device(id<MTLDevice> device);\n  ~Device() override = default;\n\n  std::shared_ptr<IFramebuffer> createFramebuffer(const FramebufferDesc& desc,\n                                                  Result* outResult) override;\n};\n\n} // namespace igl::metal::ios\n"
  },
  {
    "path": "src/igl/metal/ios/Device.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/ios/Device.h>\n\n#include <igl/metal/ios/Framebuffer.h>\n\nnamespace igl::metal::ios {\n\nDevice::Device(id<MTLDevice> device) : metal::Device(device) {}\n\nstd::shared_ptr<IFramebuffer> Device::createFramebuffer(const FramebufferDesc& desc,\n                                                        Result* outResult) {\n  auto resource = std::make_shared<Framebuffer>(desc);\n  if (hasResourceTracker()) {\n    resource->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n  Result::setOk(outResult);\n  return resource;\n}\n\n} // namespace igl::metal::ios\n"
  },
  {
    "path": "src/igl/metal/ios/Framebuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Metal/MTLCommandQueue.h>\n#include <igl/metal/Framebuffer.h>\n\nnamespace igl::metal::ios {\n\n// @fb-only\nclass Framebuffer final : public ::igl::metal::Framebuffer {\n public:\n  explicit Framebuffer(const FramebufferDesc& value);\n  ~Framebuffer() override = default;\n\n private:\n  bool canCopy(ICommandQueue& /* unused */,\n               id<MTLTexture> texture,\n               const TextureRangeDesc& range) const override;\n};\n\n} // namespace igl::metal::ios\n"
  },
  {
    "path": "src/igl/metal/ios/Framebuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/ios/Framebuffer.h>\n\n#include <vector>\n\nnamespace igl::metal::ios {\n\n// @fb-only\nFramebuffer::Framebuffer(const FramebufferDesc& value) : metal::Framebuffer(value) {}\n\nbool Framebuffer::canCopy(ICommandQueue& /* unused */,\n                          id<MTLTexture> texture,\n                          const TextureRangeDesc& /*range*/) const {\n  return texture.storageMode == MTLStorageModeShared;\n}\n\n} // namespace igl::metal::ios\n"
  },
  {
    "path": "src/igl/metal/macos/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#import <Metal/Metal.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::metal::macos {\n\n// @fb-only\nclass Device final : public ::igl::metal::Device {\n public:\n  explicit Device(id<MTLDevice> device);\n  ~Device() override = default;\n\n  std::shared_ptr<IFramebuffer> createFramebuffer(const FramebufferDesc& desc,\n                                                  Result* outResult) override;\n};\n\n} // namespace igl::metal::macos\n"
  },
  {
    "path": "src/igl/metal/macos/Device.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/macos/Device.h>\n\n#include <igl/metal/macos/Framebuffer.h>\n\nnamespace igl::metal::macos {\n\n// @fb-only\nDevice::Device(id<MTLDevice> device) : metal::Device(device) {}\n\nstd::shared_ptr<IFramebuffer> Device::createFramebuffer(const FramebufferDesc& desc,\n                                                        Result* outResult) {\n  auto resource = std::make_shared<Framebuffer>(desc);\n  if (hasResourceTracker()) {\n    resource->initResourceTracker(getResourceTracker());\n  }\n  Result::setOk(outResult);\n  return resource;\n}\n\n} // namespace igl::metal::macos\n"
  },
  {
    "path": "src/igl/metal/macos/Framebuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/metal/Framebuffer.h>\n\nnamespace igl::metal::macos {\n\n// @fb-only\nclass Framebuffer final : public ::igl::metal::Framebuffer {\n public:\n  explicit Framebuffer(const FramebufferDesc& value);\n  ~Framebuffer() override = default;\n\n private:\n  bool canCopy(ICommandQueue& cmdQueue,\n               id<MTLTexture> texture,\n               const TextureRangeDesc& range) const override;\n};\n\n} // namespace igl::metal::macos\n"
  },
  {
    "path": "src/igl/metal/macos/Framebuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/metal/macos/Framebuffer.h>\n\n#include <vector>\n#include <igl/Texture.h>\n#include <igl/metal/CommandQueue.h>\n\nnamespace igl::metal::macos {\n\n// @fb-only\nFramebuffer::Framebuffer(const FramebufferDesc& value) : metal::Framebuffer(value) {}\n\n/// This function assumes the input texture has the content. For example,\n/// if iglTexture is MTLStorageModeManaged, then it assumes the caller\n/// has already blitted the content from the GPU. The texture cannot\n/// be MTLStorageModePrivate.\nbool Framebuffer::canCopy(ICommandQueue& cmdQueue,\n                          id<MTLTexture> texture,\n                          const TextureRangeDesc& range) const {\n  const bool result = texture.storageMode == MTLStorageModeManaged;\n  auto iglMtlCmdQueue = static_cast<CommandQueue&>(cmdQueue);\n\n  if (result) {\n    id<MTLCommandBuffer> cmdBuf = [iglMtlCmdQueue.get() commandBuffer];\n    id<MTLBlitCommandEncoder> blitEncoder = [cmdBuf blitCommandEncoder];\n    [blitEncoder synchronizeTexture:texture slice:range.layer level:range.mipLevel];\n    [blitEncoder endEncoding];\n    [cmdBuf commit];\n    [cmdBuf waitUntilCompleted];\n  }\n\n  return result;\n}\n\n} // namespace igl::metal::macos\n"
  },
  {
    "path": "src/igl/opengl/Buffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/Buffer.h>\n\n#include <igl/Buffer.h>\n#include <igl/DeviceFeatures.h>\n\nnamespace igl::opengl {\n\n// ********************************\n// ****  ArrayBuffer\n// ********************************\n// the base buffer object\nArrayBuffer::ArrayBuffer(IContext& context,\n                         BufferDesc::BufferAPIHint requestedApiHints,\n                         BufferDesc::BufferType bufferType) :\n  Buffer(context, requestedApiHints, bufferType) {\n  iD_ = 0;\n  size_ = 0;\n  isDynamic_ = false;\n}\n\nArrayBuffer::~ArrayBuffer() {\n  if (iD_ != 0) {\n    getContext().deleteBuffers(1, &iD_);\n    getContext().unbindBuffer(target_);\n    iD_ = 0;\n  }\n  size_ = 0;\n  isDynamic_ = false;\n}\n\n// initialize a buffer with the given size\n// if data is not null, copy the data into the buffer\n// if the buffer is to be updated frequently, isDynamic should be set to true\nvoid ArrayBuffer::initialize(const BufferDesc& desc, Result* outResult) {\n  // static buffers must provide their data during creation, as they can't upload data later on\n  GLenum usage = GL_DYNAMIC_DRAW;\n  switch (desc.storage) {\n  case ResourceStorage::Shared:\n    usage = GL_DYNAMIC_DRAW;\n    isDynamic_ = true;\n    break;\n  case ResourceStorage::Managed:\n    usage = GL_STATIC_DRAW;\n    isDynamic_ = false;\n    break;\n  case ResourceStorage::Private:\n    usage = GL_STATIC_DRAW;\n    isDynamic_ = false;\n    break;\n  case ResourceStorage::Memoryless:\n  case ResourceStorage::Invalid:\n  default:\n    break;\n  }\n\n  if (!isDynamic_ && desc.data == nullptr) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"data is null\");\n    return;\n  }\n\n  getContext().genBuffers(1, &iD_);\n  if (iD_ == 0) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Failed to create buffer\");\n  }\n\n  if (desc.type & BufferDesc::BufferTypeBits::Storage) {\n    if (getContext().deviceFeatures().hasFeature(DeviceFeatures::Compute)) {\n      target_ = GL_SHADER_STORAGE_BUFFER;\n    } else {\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    }\n  } else if (desc.type & BufferDesc::BufferTypeBits::Uniform) {\n    target_ = GL_UNIFORM_BUFFER;\n  } else if (desc.type & BufferDesc::BufferTypeBits::Vertex) {\n    target_ = GL_ARRAY_BUFFER;\n  } else if (desc.type & BufferDesc::BufferTypeBits::Index) {\n    target_ = GL_ELEMENT_ARRAY_BUFFER;\n  } else if (desc.type & BufferDesc::BufferTypeBits::Indirect) {\n    target_ = GL_DRAW_INDIRECT_BUFFER;\n  } else {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n\n  size_ = desc.length;\n\n  getContext().bindBuffer(target_, iD_);\n  getContext().bufferData(target_, size_, desc.data, usage);\n\n  // make sure the buffer was fully allocated\n  GLint bufferSize = 0;\n  getContext().getBufferParameteriv(target_, GL_BUFFER_SIZE, &bufferSize);\n\n  if (!desc.debugName.empty() &&\n      getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugLabel)) {\n    const GLenum identifier = getContext().deviceFeatures().hasInternalRequirement(\n                                  InternalRequirement::DebugLabelExtEnumsReq)\n                                  ? GL_BUFFER_OBJECT_EXT\n                                  : GL_BUFFER;\n    getContext().objectLabel(identifier, iD_, desc.debugName.size(), desc.debugName.c_str());\n  }\n\n  getContext().bindBuffer(target_, 0);\n\n  if (bufferSize != size_) {\n    getContext().deleteBuffers(1, &iD_);\n    iD_ = 0;\n    Result::setResult(outResult, Result::Code::ArgumentOutOfRange, \"bufferSize != dataSize\");\n    return;\n  }\n\n  Result::setOk(outResult);\n}\n\n// upload data to the buffer at the given offset with the given size\nResult ArrayBuffer::upload(const void* data, const BufferRange& range) {\n  // static buffers can only upload data once during creation\n  if (!isDynamic_) {\n    return Result(Result::Code::InvalidOperation, \"Can't upload to static buffers\");\n  }\n\n  getContext().bindBuffer(target_, iD_);\n\n  getContext().bufferSubData(target_, range.offset, range.size, data);\n\n  getContext().bindBuffer(target_, 0);\n\n  return Result();\n}\n\nvoid* ArrayBuffer::map(const BufferRange& range, Result* outResult) {\n  if ((range.size + range.offset) > getSizeInBytes()) {\n    Result::setResult(\n        outResult, Result::Code::ArgumentOutOfRange, \"map() size + offset must be <= buffer size\");\n    return nullptr;\n  }\n\n  bind();\n\n  void* srcData = nullptr;\n  srcData = getContext().mapBufferRange(target_, range.offset, range.size, GL_MAP_READ_BIT);\n  IGL_DEBUG_ASSERT(srcData != nullptr);\n  if (srcData == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation);\n    return nullptr;\n  }\n\n  Result::setOk(outResult);\n  return srcData;\n}\n\nvoid ArrayBuffer::unmap() {\n  bind();\n  getContext().unmapBuffer(target_);\n}\n\n// bind the buffer for access by the GPU\nvoid ArrayBuffer::bind() {\n  getContext().bindBuffer(target_, iD_);\n}\n\nvoid ArrayBuffer::unbind() {\n  getContext().bindBuffer(target_, 0);\n}\n\nvoid ArrayBuffer::bindBase(IGL_MAYBE_UNUSED size_t index, Result* outResult) {\n  if (target_ != GL_SHADER_STORAGE_BUFFER) {\n    static constexpr const char* kErrorMsg = \"Buffer should be GL_SHADER_STORAGE_BUFFER\";\n    IGL_SOFT_ERROR(kErrorMsg);\n    Result::setResult(outResult, Result::Code::InvalidOperation, kErrorMsg);\n    return;\n  }\n  getContext().bindBuffer(target_, iD_);\n  getContext().bindBufferBase(target_, (GLuint)index, iD_);\n  Result::setOk(outResult);\n}\n\nvoid ArrayBuffer::bindForTarget(GLenum target) {\n  getContext().bindBuffer(target, iD_);\n}\n\nvoid UniformBlockBuffer::setBlockBinding(GLuint pid, GLuint blockIndex, GLuint bindingPoint) {\n  getContext().uniformBlockBinding(pid, blockIndex, bindingPoint);\n}\n\nvoid UniformBlockBuffer::bindBase(size_t index, Result* outResult) {\n  if (getContext().deviceFeatures().hasFeature(DeviceFeatures::UniformBlocks)) {\n    if (target_ != GL_UNIFORM_BUFFER) {\n      static constexpr const char* kErrorMsg = \"Buffer should be GL_UNIFORM_BUFFER\";\n      IGL_SOFT_ERROR(kErrorMsg);\n      Result::setResult(outResult, Result::Code::InvalidOperation, kErrorMsg);\n      return;\n    }\n    getContext().bindBufferBase(target_, (GLuint)index, iD_);\n    Result::setOk(outResult);\n  } else {\n    static constexpr const char* kErrorMsg = \"Uniform Blocks are not supported\";\n    IGL_SOFT_ERROR(kErrorMsg);\n    Result::setResult(outResult, Result::Code::Unimplemented, kErrorMsg);\n  }\n}\n\nvoid UniformBlockBuffer::bindRange(size_t index, size_t offset, size_t size, Result* outResult) {\n  if (getContext().deviceFeatures().hasFeature(DeviceFeatures::UniformBlocks)) {\n    if (target_ != GL_UNIFORM_BUFFER) {\n      static constexpr const char* kErrorMsg = \"Buffer should be GL_UNIFORM_BUFFER\";\n      IGL_SOFT_ERROR(kErrorMsg);\n      Result::setResult(outResult, Result::Code::InvalidOperation, kErrorMsg);\n      return;\n    }\n    getContext().bindBuffer(target_, iD_);\n    IGL_DEBUG_ASSERT((offset + size) <= getSizeInBytes(),\n                     \"Offset or Size is invalid! (%d %d %d)\",\n                     offset,\n                     size,\n                     getSizeInBytes());\n    getContext().bindBufferRange(\n        target_, (GLuint)index, iD_, (GLintptr)offset, size ? size : getSizeInBytes() - offset);\n    Result::setOk(outResult);\n  } else {\n    static constexpr const char* kErrorMsg = \"Uniform Blocks are not supported\";\n    IGL_SOFT_ERROR(kErrorMsg);\n    Result::setResult(outResult, Result::Code::Unimplemented, kErrorMsg);\n  }\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Buffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/WithContext.h>\n\nnamespace igl {\nclass ICommandBuffer;\nnamespace opengl {\n\nclass Buffer : public WithContext, public IBuffer {\n public:\n  enum class Type : uint8_t { Attribute, Uniform, UniformBlock };\n\n  // NOLINTBEGIN(bugprone-easily-swappable-parameters)\n  Buffer(IContext& context,\n         BufferDesc::BufferAPIHint requestedApiHints,\n         BufferDesc::BufferType bufferType) :\n    // NOLINTEND(bugprone-easily-swappable-parameters)\n    WithContext(context), requestedApiHints_(requestedApiHints), bufferType_(bufferType) {}\n  [[nodiscard]] uint64_t gpuAddress(size_t /*offset*/) const override {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return 0;\n  }\n  virtual void initialize(const BufferDesc& desc, Result* outResult) = 0;\n  [[nodiscard]] virtual Type getType() const noexcept = 0;\n\n  [[nodiscard]] BufferDesc::BufferAPIHint requestedApiHints() const noexcept override {\n    return requestedApiHints_;\n  }\n\n  [[nodiscard]] BufferDesc::BufferType getBufferType() const override {\n    return bufferType_;\n  }\n\n private:\n  BufferDesc::BufferAPIHint requestedApiHints_;\n  BufferDesc::BufferType bufferType_ = 0;\n};\n\nclass ArrayBuffer : public Buffer {\n public:\n  ArrayBuffer(IContext& context,\n              BufferDesc::BufferAPIHint requestedApiHints,\n              BufferDesc::BufferType bufferType);\n  ~ArrayBuffer() override;\n  ArrayBuffer(const ArrayBuffer&) = delete;\n  ArrayBuffer& operator=(const ArrayBuffer&) = delete;\n  ArrayBuffer(ArrayBuffer&&) = delete;\n  ArrayBuffer& operator=(ArrayBuffer&&) = delete;\n\n  Result upload(const void* data, const BufferRange& range) override;\n\n  void* map(const BufferRange& range, Result* outResult) override;\n  void unmap() override;\n\n  [[nodiscard]] BufferDesc::BufferAPIHint acceptedApiHints() const noexcept override {\n    return 0;\n  }\n\n  [[nodiscard]] ResourceStorage storage() const noexcept override {\n    return ResourceStorage::Managed;\n  }\n\n  [[nodiscard]] size_t getSizeInBytes() const override {\n    return size_;\n  }\n\n  IGL_INLINE GLuint getId() const noexcept {\n    return iD_;\n  }\n\n  IGL_INLINE GLenum getTarget() const noexcept {\n    return target_;\n  }\n\n  void initialize(const BufferDesc& desc, Result* outResult) override;\n\n  void bind();\n  void unbind();\n\n  void bindBase(size_t index, Result* outResult);\n\n  void bindForTarget(GLenum target);\n\n  [[nodiscard]] Type getType() const noexcept override {\n    return Type::Attribute;\n  }\n\n protected:\n  // the GL ID for this texture\n  GLuint iD_;\n\n  // the buffer target used by the GL glBufferXXX APIs\n  // this must be set by each derived object during construction\n  GLenum target_{};\n\n private:\n  size_t size_;\n\n  bool isDynamic_;\n};\n\nclass UniformBlockBuffer : public ArrayBuffer {\n public:\n  UniformBlockBuffer(IContext& context,\n                     BufferDesc::BufferAPIHint requestedApiHints,\n                     BufferDesc::BufferType bufferType) :\n    ArrayBuffer(context, requestedApiHints, bufferType) {}\n\n  [[nodiscard]] Type getType() const noexcept override {\n    return Type::UniformBlock;\n  }\n\n  void setBlockBinding(GLuint pid, GLuint blockIndex, GLuint bindingPoint);\n  void bindBase(size_t index, Result* outResult);\n  void bindRange(size_t index, size_t offset, size_t size, Result* outResult);\n\n  [[nodiscard]] BufferDesc::BufferAPIHint acceptedApiHints() const noexcept override {\n    return BufferDesc::BufferAPIHintBits::UniformBlock;\n  }\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nproject(IGLOpenGL CXX C)\n\nif(NOT IOS AND NOT ANDROID)\n  find_package(OpenGL REQUIRED)\nendif()\n\nfile(GLOB SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp util/*.cpp)\nfile(GLOB HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h util/*.h)\n\nif(WIN32)\n  file(GLOB WGL_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} wgl/*.cpp)\n  file(GLOB WGL_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} wgl/*.h)\n  list(APPEND SRC_FILES ${WGL_SRC_FILES})\n  list(APPEND HEADER_FILES ${WGL_HEADER_FILES})\nelseif(APPLE AND NOT IOS)\n  file(GLOB MACOS_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} macos/*.mm)\n  file(GLOB MACOS_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} macos/*.h)\n  list(APPEND SRC_FILES ${MACOS_SRC_FILES})\n  list(APPEND HEADER_FILES ${MACOS_HEADER_FILES})\nelseif(APPLE AND IOS)\n  file(GLOB IOS_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ios/*.mm)\n  file(GLOB IOS_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ios/*.h)\n  list(APPEND SRC_FILES ${IOS_SRC_FILES})\n  list(APPEND HEADER_FILES ${IOS_HEADER_FILES})\nelseif(UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS AND NOT EMSCRIPTEN)\n  file(GLOB GLX_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} glx/*.cpp)\n  file(GLOB GLX_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} glx/*.h)\n  list(APPEND SRC_FILES ${GLX_SRC_FILES})\n  list(APPEND HEADER_FILES ${GLX_HEADER_FILES})\nendif()\n\nif((IGL_WITH_OPENGLES OR (UNIX AND NOT APPLE AND NOT ANDROID AND NOT IOS  AND NOT EMSCRIPTEN)) AND NOT IOS)\n  file(GLOB EGL_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} egl/*.cpp)\n  file(GLOB EGL_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} egl/*.h)\n  if(ANDROID)\n    file(GLOB EGL_ANDROID_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} egl/android/*.cpp)\n    file(GLOB EGL_ANDROID_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} egl/android/*.h)\n    list(APPEND EGL_SRC_FILES ${EGL_ANDROID_SRC_FILES})\n    list(APPEND EGL_HEADER_FILES ${EGL_ANDROID_HEADER_FILES})\n  endif()\n  list(APPEND SRC_FILES ${EGL_SRC_FILES})\n  list(APPEND HEADER_FILES ${EGL_HEADER_FILES})\nendif()\n\nif(IGL_WITH_WEBGL)\n  file(GLOB WEBGL_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} webgl/*.cpp)\n  file(GLOB WEBGL_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} webgl/*.h)\n  list(APPEND SRC_FILES ${WEBGL_SRC_FILES})\n  list(APPEND HEADER_FILES ${WEBGL_HEADER_FILES})\nendif()\n\nadd_library(IGLOpenGL ${SRC_FILES} ${HEADER_FILES})\n\ntarget_link_libraries(IGLOpenGL PRIVATE IGLLibrary)\n\nif(ANDROID)\n  add_definitions(\"-DGL_GLEXT_PROTOTYPES\")\n  target_link_libraries(IGLOpenGL PUBLIC log GLESv3 EGL)\nendif()\n\nif(APPLE)\n  if(IOS)\n    set(PLATFORM_FRAMEWORKS \"-framework OpenGLES\" \"-framework CoreVideo\")\n    set(OPENGL_DEPRECATION_FLAG GLES_SILENCE_DEPRECATION)\n  else()\n    set(PLATFORM_FRAMEWORKS \"-framework OpenGL\" \"-framework Cocoa\" \"-framework CoreVideo\")\n    set(OPENGL_DEPRECATION_FLAG GL_SILENCE_DEPRECATION)\n  endif()\n  target_link_libraries(IGLOpenGL PRIVATE \"-framework IOKit\" \"-framework CoreFoundation\" ${PLATFORM_FRAMEWORKS})\n  target_compile_definitions(IGLOpenGL PUBLIC -D${OPENGL_DEPRECATION_FLAG})\nendif()\n\nif (IGL_WITH_WEBGL)\n  #\"-s DEMANGLE_SUPPORT=1\")\n  set_target_properties(IGLOpenGL PROPERTIES LINK_FLAGS \"-s USE_WEBGL2=1 -s GL_SUPPORT_AUTOMATIC_ENABLE_EXTENSIONS=1 -s GL_EMULATE_GLES_VERSION_STRING_FORMAT=1\")\nendif()\n\ntarget_link_libraries(IGLOpenGL PRIVATE IGLLibrary)\nif(NOT APPLE AND NOT ANDROID AND NOT EMSCRIPTEN)\n  target_link_libraries(IGLOpenGL PUBLIC OpenGL::GL)\nendif()\n\nigl_set_cxxstd(IGLOpenGL 20)\nigl_set_folder(IGLOpenGL \"IGL\")\n\nif(WIN32)\n  add_definitions(\"-DNOMINMAX\")\n  # IGLOpenGL uses GL/glew.h on Windows\n  set(BUILD_UTILS OFF CACHE BOOL \"\")\n  add_subdirectory(\"${IGL_ROOT_DIR}/third-party/deps/src/glew/build/cmake\" glew)\n  igl_set_folder(glew \"third-party\")\n  igl_set_folder(glew_s \"third-party\")\n  target_link_libraries(IGLOpenGL PUBLIC glew_s)\n  target_include_directories(IGLOpenGL PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/glew/include\")\n  target_include_directories(IGLOpenGL PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/EGL/EGL/include\")\nelseif(UNIX AND NOT APPLE AND NOT ANDROID AND NOT EMSCRIPTEN)\n  add_definitions(\"-DGL_GLEXT_PROTOTYPES\")\n  target_link_libraries(IGLOpenGL PUBLIC EGL OpenGL)\nendif()\n\nif(IGL_WITH_OPENGLES AND NOT APPLE)\n  target_link_libraries(IGLOpenGL PUBLIC EGL)\nendif()\n"
  },
  {
    "path": "src/igl/opengl/CommandBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/CommandBuffer.h>\n\n#include <igl/opengl/Buffer.h>\n#include <igl/opengl/ComputeCommandEncoder.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/RenderCommandEncoder.h>\n\nnamespace igl::opengl {\n\nCommandBuffer::CommandBuffer(std::shared_ptr<IContext> context, CommandBufferDesc desc) :\n  ICommandBuffer(std::move(desc)), context_(std::move(context)) {}\n\nCommandBuffer::~CommandBuffer() = default;\n\nstd::unique_ptr<IRenderCommandEncoder> CommandBuffer::createRenderCommandEncoder(\n    const RenderPassDesc& renderPass,\n    const std::shared_ptr<IFramebuffer>& framebuffer,\n    const Dependencies& dependencies,\n    Result* outResult) {\n  return RenderCommandEncoder::create(\n      shared_from_this(), renderPass, framebuffer, dependencies, outResult);\n}\n\nstd::unique_ptr<IComputeCommandEncoder> CommandBuffer::createComputeCommandEncoder() {\n  return std::make_unique<ComputeCommandEncoder>(shared_from_this()->getContext());\n}\n\nvoid CommandBuffer::present(const std::shared_ptr<ITexture>& surface) const {\n  context_->present(surface);\n}\n\nvoid CommandBuffer::waitUntilScheduled() {\n  context_->flush();\n}\n\nvoid CommandBuffer::waitUntilCompleted() {\n  context_->finish();\n}\n\nvoid CommandBuffer::pushDebugGroupLabel(const char* label, const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugMessage)) {\n    getContext().pushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, label);\n  } else {\n    IGL_LOG_ERROR_ONCE(\"CommandBuffer::pushDebugGroupLabel not supported in this context!\\n\");\n  }\n}\n\nvoid CommandBuffer::popDebugGroupLabel() const {\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugMessage)) {\n    getContext().popDebugGroup();\n  } else {\n    IGL_LOG_ERROR_ONCE(\"CommandBuffer::popDebugGroupLabel not supported in this context!\\n\");\n  }\n}\n\nvoid CommandBuffer::copyBuffer(IBuffer& src,\n                               IBuffer& dst,\n                               uint64_t srcOffset,\n                               uint64_t dstOffset,\n                               uint64_t size) {\n  IContext& ctx = getContext();\n\n  if (!ctx.deviceFeatures().hasFeature(igl::DeviceFeatures::CopyBuffer)) {\n    IGL_LOG_ERROR_ONCE(\"CommandBuffer::copyBuffer() not supported in this context!\\n\");\n    return;\n  }\n\n  auto& srcBuffer = static_cast<ArrayBuffer&>(src);\n  auto& dstBuffer = static_cast<ArrayBuffer&>(dst);\n\n  ctx.bindBuffer(GL_COPY_READ_BUFFER, srcBuffer.getId());\n  ctx.bindBuffer(GL_COPY_WRITE_BUFFER, dstBuffer.getId());\n  ctx.copyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, srcOffset, dstOffset, size);\n  ctx.bindBuffer(GL_COPY_READ_BUFFER, 0);\n  ctx.bindBuffer(GL_COPY_WRITE_BUFFER, 0);\n}\n\nvoid CommandBuffer::copyTextureToBuffer(ITexture& src,\n                                        IBuffer& dst,\n                                        uint64_t dstOffset,\n                                        uint32_t level,\n                                        uint32_t layer) {\n  (void)src;\n  (void)dst;\n  (void)dstOffset;\n  (void)level;\n  (void)layer;\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nIContext& CommandBuffer::getContext() const {\n  return *context_;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/CommandBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandBuffer.h>\n\nnamespace igl::opengl {\nclass IContext;\n\nclass CommandBuffer final : public ICommandBuffer,\n                            public std::enable_shared_from_this<CommandBuffer> {\n public:\n  explicit CommandBuffer(std::shared_ptr<IContext> context, CommandBufferDesc desc);\n  ~CommandBuffer() override;\n\n  std::unique_ptr<IRenderCommandEncoder> createRenderCommandEncoder(\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      const Dependencies& dependencies,\n      Result* outResult) override;\n\n  std::unique_ptr<IComputeCommandEncoder> createComputeCommandEncoder() override;\n\n  void present(const std::shared_ptr<ITexture>& surface) const override;\n\n  void waitUntilScheduled() override;\n\n  void waitUntilCompleted() override;\n\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n\n  void popDebugGroupLabel() const override;\n\n  void copyBuffer(IBuffer& src,\n                  IBuffer& dst,\n                  uint64_t srcOffset,\n                  uint64_t dstOffset,\n                  uint64_t size) override;\n\n  void copyTextureToBuffer(ITexture& src,\n                           IBuffer& dst,\n                           uint64_t dstOffset,\n                           uint32_t level,\n                           uint32_t layer) override;\n\n  IContext& getContext() const;\n\n private:\n  std::shared_ptr<IContext> context_;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/CommandQueue.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/CommandQueue.h>\n\n#include <igl/opengl/CommandBuffer.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/Timer.h>\n\nnamespace igl::opengl {\n\nvoid CommandQueue::setInitialContext(const std::shared_ptr<IContext>& context) {\n  context_ = context;\n}\n\nstd::shared_ptr<ICommandBuffer> CommandQueue::createCommandBuffer(const CommandBufferDesc& desc,\n                                                                  Result* outResult) {\n  //  IGL_DEBUG_ASSERT(\n  //      activeCommandBuffers_ == 0,\n  //      \"OpenGL does not currently support creating multiple commandBuffers at the same time\");\n  if (context_ == nullptr) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"There is no context set\");\n    return nullptr;\n  }\n\n  auto commandBuffer = std::make_shared<CommandBuffer>(context_, desc);\n  activeCommandBuffers_++;\n  Result::setOk(outResult);\n\n  return commandBuffer;\n}\n\nSubmitHandle CommandQueue::submit(const ICommandBuffer& commandBuffer, bool /* endOfFrame */) {\n  const auto& cb = static_cast<const CommandBuffer&>(commandBuffer);\n  incrementDrawCount(cb.getCurrentDrawCount());\n  if (commandBuffer.desc.timer) {\n    static_cast<Timer&>(*commandBuffer.desc.timer).end();\n  }\n\n  activeCommandBuffers_--;\n\n  return SubmitHandle{};\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/CommandQueue.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandQueue.h>\n\nnamespace igl::opengl {\nclass IContext;\n\nclass CommandQueue final : public ICommandQueue {\n public:\n  std::shared_ptr<ICommandBuffer> createCommandBuffer(const CommandBufferDesc& desc,\n                                                      Result* outResult) override;\n  SubmitHandle submit(const ICommandBuffer& commandBuffer, bool endOfFrame = false) override;\n\n  void setInitialContext(const std::shared_ptr<IContext>& context);\n\n private:\n  std::shared_ptr<IContext> context_;\n  uint32_t activeCommandBuffers_ = 0;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/ComputeCommandAdapter.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/ComputeCommandAdapter.h>\n\n#include <algorithm>\n#include <igl/opengl/Buffer.h>\n#include <igl/opengl/ComputePipelineState.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/Texture.h>\n\n#define SET_DIRTY(dirtyMap, index) dirtyMap.set(index)\n#define CLEAR_DIRTY(dirtyMap, index) dirtyMap.reset(index)\n#define IS_DIRTY(dirtyMap, index) dirtyMap[index]\n\nnamespace igl::opengl {\n\nComputeCommandAdapter::ComputeCommandAdapter(IContext& context) :\n  WithContext(context), uniformAdapter_(context, UniformAdapter::PipelineType::Compute) {}\n\nvoid ComputeCommandAdapter::clearTextures() {}\n\nvoid ComputeCommandAdapter::setTexture(ITexture* texture, uint32_t index) {\n  if (!IGL_DEBUG_VERIFY(index < IGL_TEXTURE_SAMPLERS_MAX)) {\n    return;\n  }\n  textureStates_[index] = texture;\n  SET_DIRTY(textureStatesDirty_, index);\n}\n\nvoid ComputeCommandAdapter::clearBuffers() {\n  buffersDirty_.reset();\n}\n\nvoid ComputeCommandAdapter::setBuffer(Buffer* buffer, size_t offset, uint32_t index) {\n  IGL_DEBUG_ASSERT(index < IGL_BUFFER_BINDINGS_MAX,\n                   \"Buffer index is beyond max, may want to increase limit\");\n  if (index < uniformAdapter_.getMaxUniforms() && buffer) {\n    buffers_[index] = {buffer, offset};\n    SET_DIRTY(buffersDirty_, index);\n  }\n}\n\nvoid ComputeCommandAdapter::clearUniformBuffers() {\n  uniformAdapter_.clearUniformBuffers();\n}\n\nvoid ComputeCommandAdapter::setUniform(const UniformDesc& uniformDesc,\n                                       const void* data,\n                                       Result* outResult) {\n  uniformAdapter_.setUniform(uniformDesc, data, outResult);\n}\n\nvoid ComputeCommandAdapter::setBlockUniform(Buffer* buffer,\n                                            size_t offset,\n                                            size_t size,\n                                            int index,\n                                            Result* outResult) {\n  uniformAdapter_.setUniformBuffer(buffer, offset, size, index, outResult);\n}\n\nvoid ComputeCommandAdapter::dispatchThreadGroups(const Dimensions& threadgroupCount,\n                                                 const Dimensions& /*threadgroupSize*/) {\n  willDispatch();\n  getContext().dispatchCompute(static_cast<GLuint>(threadgroupCount.width),\n                               static_cast<GLuint>(threadgroupCount.height),\n                               static_cast<GLuint>(threadgroupCount.depth));\n  didDispatch();\n}\n\nvoid ComputeCommandAdapter::setPipelineState(\n    const std::shared_ptr<IComputePipelineState>& newValue) {\n  if (pipelineState_) {\n    clearDependentResources(newValue);\n  }\n  pipelineState_ = newValue;\n  setDirty(StateMask::PIPELINE);\n}\n\nvoid ComputeCommandAdapter::clearDependentResources(\n    const std::shared_ptr<IComputePipelineState>& newValue) {}\n\nvoid ComputeCommandAdapter::willDispatch() {\n  Result ret;\n  auto* pipelineState = static_cast<ComputePipelineState*>(pipelineState_.get());\n\n  IGL_DEBUG_ASSERT(pipelineState, \"ComputePipelineState is nullptr\");\n  if (pipelineState == nullptr) {\n    return;\n  }\n\n  if (isDirty(StateMask::PIPELINE)) {\n    pipelineState->bind();\n    clearDirty(StateMask::PIPELINE);\n  }\n\n  for (uint32_t bufferIndex = 0; bufferIndex < IGL_BUFFER_BINDINGS_MAX; ++bufferIndex) {\n    if (!IS_DIRTY(buffersDirty_, bufferIndex)) {\n      continue;\n    }\n    auto& bufferState = buffers_[bufferIndex];\n    ret = pipelineState->bindBuffer(bufferIndex, bufferState.resource);\n    CLEAR_DIRTY(buffersDirty_, bufferIndex);\n    if (!ret.isOk()) {\n      IGL_LOG_INFO_ONCE(ret.message.c_str());\n      continue;\n    }\n  }\n\n  // Bind uniforms to be used for compute\n  uniformAdapter_.bindToPipeline(getContext());\n\n  for (size_t index = 0; index < textureStates_.size(); index++) {\n    if (!IS_DIRTY(textureStatesDirty_, index)) {\n      continue;\n    }\n    auto& textureState = textureStates_[index];\n    if (auto* texture = static_cast<Texture*>(textureState)) {\n      ret = pipelineState->bindTextureUnit(index, texture);\n      CLEAR_DIRTY(textureStatesDirty_, index);\n      if (!ret.isOk()) {\n        IGL_LOG_INFO_ONCE(ret.message.c_str());\n        continue;\n      }\n    }\n  }\n}\n\nvoid ComputeCommandAdapter::didDispatch() {\n  getContext().memoryBarrier(GL_TEXTURE_FETCH_BARRIER_BIT);\n\n  if (pipelineState_ == nullptr) {\n    return;\n  }\n  auto* pipelineState = static_cast<ComputePipelineState*>(pipelineState_.get());\n  IGL_DEBUG_ASSERT(pipelineState, \"ComputePipelineState is nullptr\");\n  if (pipelineState == nullptr) {\n    return;\n  }\n  if (pipelineState->getIsUsingShaderStorageBuffers()) {\n    getContext().memoryBarrier(GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT | GL_ELEMENT_ARRAY_BARRIER_BIT |\n                               GL_SHADER_STORAGE_BARRIER_BIT | GL_BUFFER_UPDATE_BARRIER_BIT);\n  }\n}\n\nvoid ComputeCommandAdapter::endEncoding() {\n  pipelineState_ = nullptr;\n  textureStates_ = TextureStates();\n\n  buffersDirty_.reset();\n  textureStatesDirty_.reset();\n  dirtyStateBits_ = EnumToValue(StateMask::NONE);\n\n  uniformAdapter_.shrinkUniformUsage();\n  uniformAdapter_.clearUniformBuffers();\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/ComputeCommandAdapter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <bitset>\n#include <functional>\n#include <unordered_map>\n#include <igl/Common.h>\n#include <igl/opengl/UnbindPolicy.h>\n#include <igl/opengl/UniformAdapter.h>\n#include <igl/opengl/WithContext.h>\n\nnamespace igl {\n\nclass ITexture;\nclass IComputePipelineState;\nclass ISamplerState;\n\nnamespace opengl {\nclass Buffer;\n\nclass ComputeCommandAdapter final : public WithContext {\n private:\n  using StateBits = uint8_t;\n  enum class StateMask : StateBits { NONE = 0, PIPELINE = 1 << 1 };\n\n  struct BufferState {\n    Buffer* resource = nullptr;\n    size_t offset = 0;\n  };\n\n  using TextureState = ITexture*;\n  using TextureStates = std::array<TextureState, IGL_TEXTURE_SAMPLERS_MAX>;\n\n public:\n  explicit ComputeCommandAdapter(IContext& context);\n\n  void clearTextures();\n  void setTexture(ITexture* texture, uint32_t index);\n\n  void clearBuffers();\n  void setBuffer(Buffer* buffer, size_t offset, uint32_t index);\n\n  void clearUniformBuffers();\n  void setBlockUniform(Buffer* buffer,\n                       size_t offset,\n                       size_t size,\n                       int index,\n                       Result* outResult = nullptr);\n  void setUniform(const UniformDesc& uniformDesc, const void* data, Result* outResult = nullptr);\n\n  void setPipelineState(const std::shared_ptr<IComputePipelineState>& newValue);\n  void dispatchThreadGroups(const Dimensions& threadgroupCount,\n                            const Dimensions& /*threadgroupSize*/);\n\n  void endEncoding();\n\n private:\n  void clearDependentResources(const std::shared_ptr<IComputePipelineState>& newValue);\n  void willDispatch();\n  void didDispatch();\n\n  [[nodiscard]] bool isDirty(StateMask mask) const {\n    return (dirtyStateBits_ & EnumToValue(mask)) != 0;\n  }\n  void setDirty(StateMask mask) {\n    dirtyStateBits_ |= EnumToValue(mask);\n  }\n  void clearDirty(StateMask mask) {\n    dirtyStateBits_ &= ~EnumToValue(mask);\n  }\n\n private:\n  std::array<BufferState, IGL_BUFFER_BINDINGS_MAX> buffers_;\n  std::bitset<IGL_BUFFER_BINDINGS_MAX> buffersDirty_;\n  std::bitset<IGL_TEXTURE_SAMPLERS_MAX> textureStatesDirty_;\n  TextureStates textureStates_{};\n  UniformAdapter uniformAdapter_;\n  StateBits dirtyStateBits_ = EnumToValue(StateMask::NONE);\n  std::shared_ptr<IComputePipelineState> pipelineState_;\n};\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/ComputeCommandEncoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/ComputeCommandEncoder.h>\n\n#include <algorithm>\n#include <array>\n#include <igl/opengl/Buffer.h>\n#include <igl/opengl/ComputeCommandAdapter.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl {\n\n///----------------------------------------------------------------------------\n/// MARK: - ComputeCommandEncoder\n\nComputeCommandEncoder::ComputeCommandEncoder(IContext& context) : WithContext(context) {\n  auto& oglContext = getContext();\n\n  auto& pool = oglContext.getComputeAdapterPool();\n  if (pool.empty()) {\n    adapter_ = std::make_unique<ComputeCommandAdapter>(oglContext);\n  } else {\n    adapter_ = std::move(pool[pool.size() - 1]);\n    pool.pop_back();\n  }\n}\n\nComputeCommandEncoder::~ComputeCommandEncoder() = default;\n\nvoid ComputeCommandEncoder::endEncoding() {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->endEncoding();\n    getContext().getComputeAdapterPool().push_back(std::move(adapter_));\n  }\n}\n\nvoid ComputeCommandEncoder::bindComputePipelineState(\n    const std::shared_ptr<IComputePipelineState>& pipelineState) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->setPipelineState(pipelineState);\n  }\n}\n\nvoid ComputeCommandEncoder::dispatchThreadGroups(const Dimensions& threadgroupCount,\n                                                 const Dimensions& threadgroupSize,\n                                                 const Dependencies& /*dependencies*/) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->dispatchThreadGroups(threadgroupCount, threadgroupSize);\n  }\n}\n\nvoid ComputeCommandEncoder::pushDebugGroupLabel(const char* label,\n                                                const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugMessage)) {\n    getContext().pushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, label);\n  } else {\n    IGL_LOG_ERROR_ONCE(\n        \"ComputeCommandEncoder::pushDebugGroupLabel not supported in this context!\\n\");\n  }\n}\n\nvoid ComputeCommandEncoder::insertDebugEventLabel(const char* label,\n                                                  const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugMessage)) {\n    getContext().debugMessageInsert(\n        GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0, GL_DEBUG_SEVERITY_LOW, -1, label);\n  } else {\n    IGL_LOG_ERROR_ONCE(\n        \"ComputeCommandEncoder::insertDebugEventLabel not supported in this context!\\n\");\n  }\n}\n\nvoid ComputeCommandEncoder::popDebugGroupLabel() const {\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugMessage)) {\n    getContext().popDebugGroup();\n  } else {\n    IGL_LOG_ERROR_ONCE(\n        \"ComputeCommandEncoder::popDebugGroupLabel not supported in this context!\\n\");\n  }\n}\n\nvoid ComputeCommandEncoder::bindUniform(const UniformDesc& uniformDesc, const void* data) {\n  IGL_DEBUG_ASSERT(uniformDesc.location >= 0,\n                   \"Invalid location passed to bindUniformBuffer: %d\",\n                   uniformDesc.location);\n  IGL_DEBUG_ASSERT(data != nullptr, \"Data cannot be null\");\n  if (IGL_DEBUG_VERIFY(adapter_) && data) {\n    adapter_->setUniform(uniformDesc, data);\n  }\n}\n\nvoid ComputeCommandEncoder::bindTexture(uint32_t index, ITexture* texture) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->setTexture(texture, index);\n  }\n}\n\nvoid ComputeCommandEncoder::bindImageTexture(uint32_t index,\n                                             ITexture* texture,\n                                             TextureFormat format) {\n  (void)index;\n  (void)texture;\n  (void)format;\n\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid ComputeCommandEncoder::bindSamplerState(uint32_t index, ISamplerState* samplerState) {\n  (void)index;\n  (void)samplerState;\n\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nvoid ComputeCommandEncoder::bindBuffer(uint32_t index,\n                                       IBuffer* buffer,\n                                       size_t offset,\n                                       size_t bufferSize) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n\n  if (IGL_DEBUG_VERIFY(adapter_) && buffer) {\n    auto* glBuffer = static_cast<Buffer*>(buffer);\n    auto bufferType = glBuffer->getType();\n\n    if (bufferType == Buffer::Type::UniformBlock) {\n      adapter_->setBlockUniform(glBuffer, offset, bufferSize, index, nullptr);\n    } else {\n      adapter_->setBuffer(glBuffer, offset, static_cast<int>(index));\n    }\n  }\n}\n\nvoid ComputeCommandEncoder::bindBytes(uint32_t /*index*/, const void* /*data*/, size_t /*length*/) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid ComputeCommandEncoder::bindPushConstants(const void* /*data*/,\n                                              size_t /*length*/,\n                                              size_t /*offset*/) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/ComputeCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n#include <igl/ComputeCommandEncoder.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/UniformAdapter.h>\n\nnamespace igl {\nclass ICommandBuffer;\nclass IComputePipelineState;\nclass ISamplerState;\nnamespace opengl {\n\nclass Buffer;\n\nclass ComputeCommandEncoder final : public IComputeCommandEncoder, public WithContext {\n public:\n  explicit ComputeCommandEncoder(IContext& context);\n  ~ComputeCommandEncoder() override;\n  void bindComputePipelineState(\n      const std::shared_ptr<IComputePipelineState>& pipelineState) override;\n  // threadgroupCount is how many thread groups per grid in each dimension.\n  // threadgroupSize is how many threads are in each threadgroup\n  // total number of threads per grid is threadgroupCount * threadgroupSize\n  void dispatchThreadGroups(const Dimensions& threadgroupCount,\n                            const Dimensions& threadgroupSize,\n                            const Dependencies& dependencies) override;\n  void endEncoding() override;\n\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n  void insertDebugEventLabel(const char* label, const igl::Color& color) const override;\n  void popDebugGroupLabel() const override;\n  void bindUniform(const UniformDesc& uniformDesc, const void* data) override;\n  void bindTexture(uint32_t index, ITexture* texture) override;\n  void bindImageTexture(uint32_t index, ITexture* texture, TextureFormat format) override;\n  void bindSamplerState(uint32_t index, ISamplerState* samplerState) override;\n  void bindBuffer(uint32_t index, IBuffer* buffer, size_t offset, size_t bufferSize) override;\n  void bindBytes(uint32_t index, const void* data, size_t length) override;\n  void bindPushConstants(const void* data, size_t length, size_t offset) override;\n\n private:\n  std::unique_ptr<ComputeCommandAdapter> adapter_;\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/ComputePipelineState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/ComputePipelineState.h>\n\n#include <igl/NameHandle.h>\n#include <igl/opengl/Buffer.h>\n#include <igl/opengl/Texture.h>\n\nnamespace igl::opengl {\nComputePipelineState::ComputePipelineState(IContext& context) : WithContext(context) {}\nComputePipelineState::~ComputePipelineState() = default;\n\nResult ComputePipelineState::create(const ComputePipelineDesc& desc) {\n  Result result;\n  if (IGL_DEBUG_VERIFY_NOT(desc.shaderStages == nullptr)) {\n    Result::setResult(&result, Result::Code::ArgumentInvalid, \"Missing shader stages\");\n    return result;\n  }\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages->getType() == ShaderStagesType::Compute)) {\n    Result::setResult(&result, Result::Code::ArgumentInvalid, \"Shader stages not for compute\");\n    return result;\n  }\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages->getComputeModule())) {\n    Result::setResult(&result, Result::Code::ArgumentInvalid, \"Missing compute shader\");\n    return result;\n  }\n  shaderStages_ = std::static_pointer_cast<ShaderStages>(desc.shaderStages);\n  reflection_ = std::make_shared<ComputePipelineReflection>(getContext(), *shaderStages_);\n\n  for (const auto& unitSampler : desc.imagesMap) {\n    const auto textureUnit = unitSampler.first;\n    const auto& imageName = unitSampler.second;\n\n    IGL_DEBUG_ASSERT(!imageName.toString().empty());\n    const int loc = reflection_->getIndexByName(imageName);\n    if (IGL_DEBUG_VERIFY(loc >= 0)) {\n      GLint unit = 0;\n      getContext().getUniformiv(shaderStages_->getProgramID(), loc, &unit);\n      if (IGL_DEBUG_VERIFY(unit >= 0)) {\n        imageUnitMap_[textureUnit] = unit;\n      } else {\n        IGL_LOG_ERROR(\"Image uniform unit (%s) not found in shader.\\n\", imageName.c_str());\n      }\n    } else {\n      IGL_LOG_ERROR(\"Image uniform (%s) not found in shader.\\n\", imageName.c_str());\n    }\n  }\n\n  for (const auto& buffer : desc.buffersMap) {\n    const auto bufferUnit = buffer.first;\n    const auto& bufferName = buffer.second;\n\n    IGL_DEBUG_ASSERT(!bufferName.toString().empty());\n    const int loc = reflection_->getIndexByName(bufferName);\n    if (IGL_DEBUG_VERIFY(loc >= 0)) {\n      if (const auto& ssboDictionary = reflection_->getShaderStorageBufferObjectDictionary();\n          ssboDictionary.find(bufferName) != ssboDictionary.end()) {\n        bufferUnitMap_[bufferUnit] = loc;\n        usingShaderStorageBuffers_ = true;\n      } else {\n        GLint unit = 0;\n        getContext().getUniformiv(shaderStages_->getProgramID(), loc, &unit);\n        if (IGL_DEBUG_VERIFY(unit >= 0)) {\n          bufferUnitMap_[bufferUnit] = loc;\n        } else {\n          IGL_LOG_ERROR(\"Buffer uniform unit (%s) not found in shader.\\n\", bufferName.c_str());\n        }\n      }\n    } else {\n      IGL_LOG_ERROR(\"Buffer uniform (%s) not found in shader.\\n\", bufferName.c_str());\n    }\n  }\n\n  return Result();\n}\n\nvoid ComputePipelineState::bind() {\n  if (shaderStages_) {\n    shaderStages_->bind();\n  }\n}\n\nstd::shared_ptr<IComputePipelineState::IComputePipelineReflection>\nComputePipelineState::computePipelineReflection() {\n  return reflection_;\n}\n\nvoid ComputePipelineState::unbind() {\n  if (shaderStages_) {\n    shaderStages_->unbind();\n  }\n}\n\nResult ComputePipelineState::bindTextureUnit(const size_t unit, Texture* texture) {\n  if (!shaderStages_) {\n    return Result{Result::Code::InvalidOperation, \"No shader set\\n\"};\n  }\n\n  if (unit >= IGL_TEXTURE_SAMPLERS_MAX) {\n    return Result{Result::Code::ArgumentInvalid, \"Image unit specified greater than maximum\\n\"};\n  }\n\n  const GLint samplerUnit(imageUnitMap_[unit]);\n\n  if (samplerUnit < 0) {\n    return Result{Result::Code::RuntimeError, \"Unable to find image location\\n\"};\n  }\n\n  texture->bindImage(samplerUnit);\n\n  return Result();\n}\n\nResult ComputePipelineState::bindBuffer(const size_t unit, Buffer* buffer) {\n  if (!shaderStages_) {\n    return Result{Result::Code::InvalidOperation, \"No shader set\\n\"};\n  }\n\n  if (unit >= IGL_BUFFER_BINDINGS_MAX) {\n    return Result{Result::Code::ArgumentInvalid, \"Buffer unit specified greater than maximum\\n\"};\n  }\n\n  const GLint bufferLocation(bufferUnitMap_[unit]);\n\n  if (bufferLocation < 0) {\n    return Result{Result::Code::RuntimeError, \"Unable to find buffer location\\n\"};\n  }\n\n  Result result;\n  static_cast<ArrayBuffer&>(*buffer).bindBase(bufferLocation, &result);\n\n  return result;\n}\n\nint ComputePipelineState::getIndexByName(const NameHandle& name) const {\n  return reflection_ ? reflection_->getIndexByName(name) : -1;\n}\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/ComputePipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/ComputePipelineState.h>\n#include <igl/NameHandle.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/RenderPipelineReflection.h>\n#include <igl/opengl/Shader.h>\n\nnamespace igl::opengl {\nclass Texture;\nclass Buffer;\n\nclass ComputePipelineState final : public WithContext, public IComputePipelineState {\n  friend class Device;\n\n public:\n  explicit ComputePipelineState(IContext& context);\n  ~ComputePipelineState() override;\n\n  Result create(const ComputePipelineDesc& desc);\n  void bind();\n  void unbind();\n  Result bindTextureUnit(size_t unit, Texture* texture);\n  Result bindBuffer(size_t unit, Buffer* buffer);\n\n  std::shared_ptr<IComputePipelineReflection> computePipelineReflection() override;\n\n  [[nodiscard]] int getIndexByName(const NameHandle& name) const override;\n\n  bool getIsUsingShaderStorageBuffers() {\n    return usingShaderStorageBuffers_;\n  }\n\n private:\n  using ComputePipelineReflection = RenderPipelineReflection;\n\n  std::array<GLint, IGL_BUFFER_BINDINGS_MAX> bufferUnitMap_{};\n  std::array<GLint, IGL_TEXTURE_SAMPLERS_MAX> imageUnitMap_{};\n\n  std::shared_ptr<ShaderStages> shaderStages_;\n  std::shared_ptr<ComputePipelineReflection> reflection_;\n\n  bool usingShaderStorageBuffers_ = false;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Config.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n// @fb-only\n\n#include <igl/Config.h>\n\n#if IGL_PLATFORM_IOS_SIMULATOR || IGL_PLATFORM_IOS || IGL_PLATFORM_MACCATALYST || IGL_ANGLE || \\\n    IGL_PLATFORM_ANDROID || IGL_PLATFORM_EMSCRIPTEN || IGL_PLATFORM_LINUX_USE_EGL\n#define IGL_OPENGL_ES 1\n#define IGL_OPENGL 0\n#else\n#define IGL_OPENGL_ES 0\n#define IGL_OPENGL 1\n#endif\n\n// Here we enable IGL_EGL on Linux to load GL functions by eglGetProcAddress.\n#if (IGL_OPENGL_ES && !IGL_PLATFORM_APPLE) || IGL_PLATFORM_LINUX\n#define IGL_EGL 1\n#else\n#define IGL_EGL 0\n#endif\n\n#if IGL_PLATFORM_WINDOWS && !IGL_OPENGL_ES\n#define IGL_WGL 1\n#else\n#define IGL_WGL 0\n#endif\n\n// Define IGL_API_LOG as 1 to enable OpenGL API logging\n#if !defined(IGL_API_LOG)\n#define IGL_API_LOG 0\n#endif\n"
  },
  {
    "path": "src/igl/opengl/DepthStencilState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/DepthStencilState.h>\n\nnamespace igl::opengl {\n\nDepthStencilState::DepthStencilState(IContext& context) : WithContext(context) {}\n\nResult DepthStencilState::create(const DepthStencilStateDesc& desc) {\n  desc_ = desc;\n\n  return Result();\n}\n\nGLenum DepthStencilState::convertCompareFunction(CompareFunction value) {\n  switch (value) {\n  case CompareFunction::Never:\n    return GL_NEVER;\n  case CompareFunction::Less:\n    return GL_LESS;\n  case CompareFunction::Equal:\n    return GL_EQUAL;\n  case CompareFunction::LessEqual:\n    return GL_LEQUAL;\n  case CompareFunction::Greater:\n    return GL_GREATER;\n  case CompareFunction::NotEqual:\n    return GL_NOTEQUAL;\n  case CompareFunction::GreaterEqual:\n    return GL_GEQUAL;\n  case CompareFunction::AlwaysPass:\n    return GL_ALWAYS;\n  }\n  IGL_UNREACHABLE_RETURN(GL_ALWAYS)\n}\n\nGLenum DepthStencilState::convertStencilOperation(StencilOperation value) {\n  switch (value) {\n  case StencilOperation::Keep:\n    return GL_KEEP;\n  case StencilOperation::Zero:\n    return GL_ZERO;\n  case StencilOperation::Replace:\n    return GL_REPLACE;\n  case StencilOperation::IncrementClamp:\n    return GL_INCR;\n  case StencilOperation::DecrementClamp:\n    return GL_DECR;\n  case StencilOperation::Invert:\n    return GL_INVERT;\n  case StencilOperation::IncrementWrap:\n    return GL_INCR_WRAP;\n  case StencilOperation::DecrementWrap:\n    return GL_DECR_WRAP;\n  }\n  IGL_UNREACHABLE_RETURN(GL_ZERO)\n}\n\nvoid DepthStencilState::bind(uint32_t frontStencilReferenceValue,\n                             uint32_t backStencilReferenceValue) {\n  getContext().depthMask(static_cast<GLboolean>(desc_.isDepthWriteEnabled));\n\n  // https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glDepthFunc.xhtml\n  // In order to unconditionally write to the depth buffer, the depth test should\n  // be enabled and set to GL_ALWAYS\n  if (desc_.isDepthWriteEnabled || desc_.compareFunction != CompareFunction::AlwaysPass) {\n    getContext().enable(GL_DEPTH_TEST);\n  } else {\n    getContext().disable(GL_DEPTH_TEST);\n  }\n  getContext().depthFunc(convertCompareFunction(desc_.compareFunction));\n\n  if (desc_.frontFaceStencil != StencilStateDesc() || desc_.backFaceStencil != StencilStateDesc()) {\n    getContext().enable(GL_STENCIL_TEST);\n\n    const GLenum frontCompareFunc =\n        convertCompareFunction(desc_.frontFaceStencil.stencilCompareFunction);\n    const GLenum backCompareFunc =\n        convertCompareFunction(desc_.backFaceStencil.stencilCompareFunction);\n    getContext().stencilFuncSeparate(\n        GL_FRONT, frontCompareFunc, frontStencilReferenceValue, desc_.frontFaceStencil.readMask);\n    getContext().stencilFuncSeparate(\n        GL_BACK, backCompareFunc, backStencilReferenceValue, desc_.backFaceStencil.readMask);\n\n    GLenum sfail = convertStencilOperation(desc_.backFaceStencil.stencilFailureOperation);\n    GLenum dpfail = convertStencilOperation(desc_.backFaceStencil.depthFailureOperation);\n    GLenum dppass = convertStencilOperation(desc_.backFaceStencil.depthStencilPassOperation);\n    getContext().stencilOpSeparate(GL_BACK, sfail, dpfail, dppass);\n\n    sfail = convertStencilOperation(desc_.frontFaceStencil.stencilFailureOperation);\n    dpfail = convertStencilOperation(desc_.frontFaceStencil.depthFailureOperation);\n    dppass = convertStencilOperation(desc_.frontFaceStencil.depthStencilPassOperation);\n    getContext().stencilOpSeparate(GL_FRONT, sfail, dpfail, dppass);\n\n    getContext().stencilMaskSeparate(GL_BACK, desc_.backFaceStencil.writeMask);\n    getContext().stencilMaskSeparate(GL_FRONT, desc_.frontFaceStencil.writeMask);\n  } else {\n    getContext().disable(GL_STENCIL_TEST);\n  }\n}\n\nvoid DepthStencilState::unbind() {}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/DepthStencilState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/DepthStencilState.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl {\nclass ICommandBuffer;\n\nnamespace opengl {\n\nclass DepthStencilState final : public WithContext, public IDepthStencilState {\n  friend class Device;\n\n public:\n  explicit DepthStencilState(IContext& context);\n  ~DepthStencilState() override = default;\n\n  Result create(const DepthStencilStateDesc& desc);\n  void bind(uint32_t frontStencilReferenceValue, uint32_t backStencilReferenceValue);\n  void unbind();\n\n  static GLenum convertCompareFunction(CompareFunction value);\n  static GLenum convertStencilOperation(StencilOperation value);\n\n private:\n  DepthStencilStateDesc desc_;\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/DestructionGuard.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/DestructionGuard.h>\n\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl {\n\nDestructionGuard::DestructionGuard(std::shared_ptr<IContext> context) :\n  context_(std::move(context)) {\n  if (IGL_DEBUG_VERIFY(context_)) {\n    ++context_->lockCount_;\n  }\n}\n\nDestructionGuard::~DestructionGuard() {\n  if (context_) {\n    --context_->lockCount_;\n  }\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/DestructionGuard.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n\nnamespace igl::opengl {\n\nclass IContext;\n\n///\n/// Guard class providing RAII-style mechanism for disabling destruction of GL-side objects when\n/// IContext is destroyed. Destruction is disabled as long as client holds an instance of this\n/// class.\n///\nclass DestructionGuard final {\n public:\n  /*implicit*/ DestructionGuard(std::shared_ptr<IContext> context);\n  ~DestructionGuard();\n  DestructionGuard(DestructionGuard&& context) noexcept = default;\n  DestructionGuard& operator=(DestructionGuard&&) noexcept = default;\n  DestructionGuard(const DestructionGuard&) = delete;\n  DestructionGuard& operator=(const DestructionGuard&) = delete;\n\n private:\n  std::shared_ptr<IContext> context_;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/Device.h>\n\n#include <cstring>\n#include <igl/opengl/Buffer.h>\n#include <igl/opengl/CommandQueue.h>\n#include <igl/opengl/ComputePipelineState.h>\n#include <igl/opengl/DepthStencilState.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/Framebuffer.h>\n#include <igl/opengl/FramebufferWrapper.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/RenderPipelineState.h>\n#include <igl/opengl/SamplerState.h>\n#include <igl/opengl/Shader.h>\n#include <igl/opengl/TextureBuffer.h>\n#include <igl/opengl/TextureTarget.h>\n#include <igl/opengl/Timer.h>\n#include <igl/opengl/TimestampQueries.h>\n#include <igl/opengl/UniformBuffer.h>\n#include <igl/opengl/VertexInputState.h>\n\nnamespace igl::opengl {\n\nnamespace {\nstd::unique_ptr<Buffer> allocateBuffer(BufferDesc::BufferType bufferType,\n                                       BufferDesc::BufferAPIHint requestedApiHints,\n                                       IContext& context) {\n  std::unique_ptr<Buffer> resource;\n\n  if ((bufferType & BufferDesc::BufferTypeBits::Index) ||\n      (bufferType & BufferDesc::BufferTypeBits::Vertex) ||\n      (bufferType & BufferDesc::BufferTypeBits::Indirect) ||\n      (bufferType & BufferDesc::BufferTypeBits::Storage)) {\n    resource = std::make_unique<ArrayBuffer>(context, requestedApiHints, bufferType);\n  } else if (bufferType & BufferDesc::BufferTypeBits::Uniform) {\n    if (requestedApiHints & BufferDesc::BufferAPIHintBits::UniformBlock) {\n      resource = std::make_unique<UniformBlockBuffer>(context, requestedApiHints, bufferType);\n    } else {\n      resource = std::make_unique<UniformBuffer>(context, requestedApiHints, bufferType);\n    }\n\n  } else {\n    IGL_DEBUG_ASSERT_NOT_REACHED(); // desc.type is corrupt or new enum type was introduced\n  }\n\n  return resource;\n}\n\ntemplate<class Ptr>\nPtr verifyResult(Ptr resource, Result inResult, Result* outResult) noexcept {\n  if (inResult.isOk()) {\n    Result::setOk(outResult);\n  } else {\n    IGL_DEBUG_ABORT(inResult.message.c_str());\n    resource = {};\n    Result::setResult(outResult, std::move(inResult));\n  }\n\n  return resource;\n}\n\n// common signature to the creation of all resources\ntemplate<class Ptr, class Desc, class... Params>\nPtr createResource(const Desc& desc, Result* outResult, Params&&... constructorParams) {\n  // Create the object type and a smart pointer to hold it.\n  using T = typename Ptr::element_type;\n  // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)\n  Ptr resource(new T(std::forward<Params>(constructorParams)...));\n\n  // Create the resource using desc.\n  Result result = resource->create(desc);\n  return verifyResult<Ptr>(std::move(resource), std::move(result), outResult);\n}\n\ntemplate<class T, class Desc, class... Params>\nstd::shared_ptr<T> createSharedResource(const Desc& desc,\n                                        Result* outResult,\n                                        Params&&... constructorParams) {\n  return createResource<std::shared_ptr<T>>(\n      desc, outResult, std::forward<Params>(constructorParams)...);\n}\n\ntemplate<class T, class Desc, class... Params>\nstd::unique_ptr<T> createUniqueResource(const Desc& desc,\n                                        Result* outResult,\n                                        Params&&... constructorParams) {\n  return createResource<std::unique_ptr<T>>(\n      desc, outResult, std::forward<Params>(constructorParams)...);\n}\n\n} // namespace\n\nDevice::Device(std::unique_ptr<IContext> context) : // NOLINT(bugprone-exception-escape)\n  context_(std::move(context)), deviceFeatureSet_(getContext().deviceFeatures()) {}\nDevice::~Device() = default;\n\n// debug markers useful in GPU captures\nvoid Device::pushMarker(int len, const char* name) {\n  if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugMessage)) {\n    context_->pushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, len, name);\n  } else {\n    IGL_LOG_ERROR_ONCE(\"Device::pushMarker not supported in this context!\");\n  }\n}\n\nvoid Device::popMarker() {\n  if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugMessage)) {\n    context_->popDebugGroup();\n  } else {\n    IGL_LOG_ERROR_ONCE(\"Device::popMarker not supported in this context!\");\n  }\n}\n\n// Command Queue\nstd::shared_ptr<ICommandQueue> Device::createCommandQueue(const CommandQueueDesc& /*desc*/,\n                                                          Result* outResult) noexcept {\n  // we only use a single command queue on OpenGL\n  if (!commandQueue_) {\n    commandQueue_ = std::make_shared<CommandQueue>();\n    commandQueue_->setInitialContext(context_);\n  }\n  Result::setOk(outResult);\n  return commandQueue_;\n}\n\n// Resources\nstd::unique_ptr<IBuffer> Device::createBuffer( // NOLINT(bugprone-exception-escape)\n    const BufferDesc& desc,\n    Result* outResult) const noexcept {\n  std::unique_ptr<Buffer> resource = allocateBuffer(desc.type, desc.hint, getContext());\n\n  if (resource) {\n    resource->initialize(desc, outResult);\n    if (hasResourceTracker()) {\n      resource->initResourceTracker(getResourceTracker(), desc.debugName);\n    }\n  } else {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Could not instantiate buffer.\");\n  }\n\n  return resource;\n}\n\nstd::shared_ptr<IDepthStencilState> Device::createDepthStencilState(\n    const DepthStencilStateDesc& desc,\n    Result* outResult) const {\n  return createSharedResource<DepthStencilState>(desc, outResult, getContext());\n}\n\nstd::shared_ptr<ISamplerState> Device::createSamplerState(const SamplerStateDesc& desc,\n                                                          Result* outResult) const {\n  auto resource = std::make_shared<SamplerState>(getContext(), desc);\n  if (hasResourceTracker()) {\n    resource->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n  Result::setOk(outResult);\n  return resource;\n}\n\nstd::shared_ptr<ITexture> Device::createTexture( // NOLINT(bugprone-exception-escape)\n    const TextureDesc& desc,\n    Result* outResult) const noexcept {\n  const auto sanitized = sanitize(desc);\n\n  std::unique_ptr<Texture> texture;\n#if IGL_DEBUG_ABORT_ENABLED\n  if (sanitized.type == TextureType::TwoD || sanitized.type == TextureType::TwoDArray) {\n    size_t textureSizeLimit = 0;\n    getFeatureLimits(DeviceFeatureLimits::MaxTextureDimension1D2D, textureSizeLimit);\n    IGL_DEBUG_ASSERT(sanitized.width <= textureSizeLimit && sanitized.height <= textureSizeLimit,\n                     \"Texture limit size %zu is smaller than texture size %zux%zu\",\n                     textureSizeLimit,\n                     sanitized.width,\n                     sanitized.height);\n  }\n#endif\n\n  if ((sanitized.usage & TextureDesc::TextureUsageBits::Sampled) != 0 ||\n      (sanitized.usage & TextureDesc::TextureUsageBits::Storage) != 0) {\n    texture = std::make_unique<TextureBuffer>(getContext(), desc.format);\n  } else if ((sanitized.usage & TextureDesc::TextureUsageBits::Attachment) != 0) {\n    if (sanitized.type == TextureType::TwoD && sanitized.numMipLevels == 1 &&\n        sanitized.numLayers == 1) {\n      texture = std::make_unique<TextureTarget>(getContext(), desc.format);\n    } else {\n      // Fall back to texture. e.g. TextureType::TwoDArray\n      texture = std::make_unique<TextureBuffer>(getContext(), desc.format);\n    }\n  }\n\n  if (texture != nullptr) {\n    Result result = texture->create(sanitized, false);\n\n    if (!result.isOk()) {\n      texture = nullptr;\n    } else if (hasResourceTracker()) {\n      texture->initResourceTracker(getResourceTracker(), desc.debugName);\n    }\n\n    Result::setResult(outResult, std::move(result));\n  } else {\n    Result::setResult(\n        outResult, Result::Code::Unsupported, \"Unknown/unsupported texture usage bits.\");\n  }\n\n  // sanity check to ensure that the Result value and the returned object are in sync\n  // i.e. we never have a valid Result with a nullptr return value, or vice versa\n  IGL_DEBUG_ASSERT(outResult == nullptr || (outResult->isOk() == (texture != nullptr)));\n\n  return texture;\n}\n\nstd::shared_ptr<ITexture> Device::createTextureView( // NOLINT(bugprone-exception-escape)\n    std::shared_ptr<ITexture> texture,\n    const TextureViewDesc& desc,\n    Result* IGL_NULLABLE outResult) const noexcept {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n\n  Result::setResult(\n      outResult, Result::Code::Unimplemented, \"Texture views are not (yet) implemented\");\n\n  return nullptr;\n}\n\nstd::shared_ptr<IVertexInputState> Device::createVertexInputState(const VertexInputStateDesc& desc,\n                                                                  Result* outResult) const {\n  return createSharedResource<VertexInputState>(desc, outResult);\n}\n\n// Pipelines\nstd::shared_ptr<IRenderPipelineState> Device::createRenderPipeline(const RenderPipelineDesc& desc,\n                                                                   Result* outResult) const {\n  Result res;\n  auto resource = std::make_shared<RenderPipelineState>(getContext(), desc, &res);\n  return verifyResult(std::move(resource), res, outResult);\n}\n\nstd::shared_ptr<IComputePipelineState> Device::createComputePipeline(\n    const ComputePipelineDesc& desc,\n    Result* outResult) const {\n  return createSharedResource<ComputePipelineState>(desc, outResult, getContext());\n}\n\n// Shaders\n\nstd::unique_ptr<IShaderLibrary> Device::createShaderLibrary(const ShaderLibraryDesc& /*desc*/,\n                                                            Result* outResult) const {\n  Result::setResult(outResult, Result::Code::Unsupported);\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  return nullptr;\n}\n\nstd::shared_ptr<IShaderModule> Device::createShaderModule(const ShaderModuleDesc& desc,\n                                                          Result* outResult) const {\n  auto sm = createSharedResource<ShaderModule>(desc, outResult, getContext(), desc.info);\n  if (auto resourceTracker = getResourceTracker(); sm && resourceTracker) {\n    sm->initResourceTracker(resourceTracker, desc.debugName);\n  }\n  return sm;\n}\n\nstd::unique_ptr<IShaderStages> Device::createShaderStages(const ShaderStagesDesc& desc,\n                                                          Result* outResult) const {\n  // Need to pass desc twice.\n  // The first instance is for the createUniqueResource pattern.\n  // The second instance is so it also gets passed to the ShaderStages constructor.\n  auto stages = createUniqueResource<ShaderStages>(desc, outResult, desc, getContext());\n  if (auto resourceTracker = getResourceTracker(); stages && resourceTracker) {\n    stages->initResourceTracker(std::move(resourceTracker), desc.debugName);\n  }\n  return stages;\n}\n\nstd::shared_ptr<IFramebuffer> Device::createFramebuffer(const FramebufferDesc& desc,\n                                                        Result* outResult) noexcept {\n  IGL_DEBUG_ASSERT(deviceFeatureSet_.hasInternalFeature(InternalFeatures::FramebufferObject));\n  return getPlatformDevice().createFramebuffer(desc, outResult);\n}\n\nbase::IFramebufferInterop* IGL_NULLABLE\nDevice::createFramebufferInterop(const base::FramebufferInteropDesc& desc) {\n  auto framebuffer = createFramebufferFromBaseDesc(desc);\n  if (!framebuffer) {\n    return nullptr;\n  }\n  return new (std::nothrow) FramebufferWrapper(std::move(framebuffer));\n}\n\nbool Device::hasFeature(DeviceFeatures capability) const {\n  return deviceFeatureSet_.hasFeature(capability);\n}\n\nbool Device::hasRequirement(DeviceRequirement requirement) const {\n  return deviceFeatureSet_.hasRequirement(requirement);\n}\n\nbool Device::getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const {\n  return deviceFeatureSet_.getFeatureLimits(featureLimits, result);\n}\n\nICapabilities::TextureFormatCapabilities Device::getTextureFormatCapabilities(\n    TextureFormat format) const {\n  return deviceFeatureSet_.getTextureFormatCapabilities(format);\n}\n\nShaderVersion Device::getShaderVersion() const {\n  IGL_DEBUG_ASSERT(context_);\n  return deviceFeatureSet_.getShaderVersion();\n}\n\nBackendVersion Device::getBackendVersion() const {\n  IGL_DEBUG_ASSERT(context_);\n  return deviceFeatureSet_.getBackendVersion();\n}\n\nvoid Device::beginScope() {\n  IDevice::beginScope();\n\n  IGL_DEBUG_ASSERT(context_);\n  context_->setCurrent();\n\n  // UnbindPolicy is fixed for duration of this scope\n  cachedUnbindPolicy_ = getContext().getUnbindPolicy();\n}\n\nvoid Device::endScope() {\n  if (cachedUnbindPolicy_ == UnbindPolicy::EndScope) {\n    // Ensure state on exit is consistent, for any external rendering that happens later.\n    context_->colorMask(1u, 1u, 1u, 1u);\n    context_->blendFunc(GL_ONE, GL_ZERO);\n    context_->bindBuffer(GL_ARRAY_BUFFER, 0);\n    context_->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);\n    context_->pixelStorei(GL_PACK_ALIGNMENT, 4);\n    context_->pixelStorei(GL_UNPACK_ALIGNMENT, 4);\n  }\n\n  IDevice::endScope();\n\n  // Clear current context, if we are supposed to.\n  if (cachedUnbindPolicy_ == UnbindPolicy::ClearContext && !verifyScope()) {\n    context_->clearCurrentContext();\n  }\n}\n\nvoid Device::updateSurface(void* nativeWindowType) {}\n\nbool Device::verifyScope() {\n  IGL_DEBUG_ASSERT(context_);\n  return IDevice::verifyScope() && context_->isCurrentContext();\n}\n\nsize_t Device::getCurrentDrawCount() const {\n  return context_->getCurrentDrawCount();\n}\n\nsize_t Device::getShaderCompilationCount() const {\n  return context_->getShaderCompilationCount();\n}\n\nHolder<BindGroupTextureHandle> Device::createBindGroup(\n    const BindGroupTextureDesc& desc,\n    const IRenderPipelineState* IGL_NULLABLE /*compatiblePipeline*/,\n    Result* IGL_NULLABLE outResult) {\n  IGL_DEBUG_ASSERT(context_);\n  IGL_DEBUG_ASSERT(!desc.debugName.empty(), \"Each bind group should have a debug name\");\n\n  BindGroupTextureDesc description(desc);\n\n  const auto handle = context_->bindGroupTexturesPool.create(std::move(description));\n\n  Result::setResult(outResult,\n                    handle.empty() ? Result(Result::Code::RuntimeError, \"Cannot create bind group\")\n                                   : Result());\n\n  return {this, handle};\n}\n\nHolder<BindGroupBufferHandle> Device::createBindGroup(const BindGroupBufferDesc& desc,\n                                                      Result* IGL_NULLABLE outResult) {\n  IGL_DEBUG_ASSERT(context_);\n  IGL_DEBUG_ASSERT(!desc.debugName.empty(), \"Each bind group should have a debug name\");\n\n  BindGroupBufferDesc description(desc);\n\n  const auto handle = context_->bindGroupBuffersPool.create(std::move(description));\n\n  Result::setResult(outResult,\n                    handle.empty() ? Result(Result::Code::RuntimeError, \"Cannot create bind group\")\n                                   : Result());\n\n  return {this, handle};\n}\n\nstd::shared_ptr<ITimer> Device::createTimer(Result* IGL_NULLABLE outResult) const noexcept {\n  if (deviceFeatureSet_.hasFeature(DeviceFeatures::Timers)) {\n    Result::setOk(outResult);\n    return std::make_shared<Timer>(*context_);\n  }\n  Result::setResult(\n      outResult, Result::Code::Unsupported, \"Timers are not supported on this device\");\n  return nullptr;\n}\n\nstd::shared_ptr<ITimestampQueries> Device::createTimestampQueries(uint32_t maxTimestamps,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const noexcept {\n  if (deviceFeatureSet_.hasExtension(Extensions::TimerQuery)) {\n    Result::setOk(outResult);\n    return std::make_shared<TimestampQueries>(getContext(), maxTimestamps);\n  }\n  Result::setResult(\n      outResult, Result::Code::Unsupported, \"TimestampQueries are not supported on this device\");\n  return nullptr;\n}\n\nvoid Device::destroy(BindGroupTextureHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(context_);\n\n  context_->bindGroupTexturesPool.destroy(handle);\n}\n\nvoid Device::destroy(BindGroupBufferHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(context_);\n\n  context_->bindGroupBuffersPool.destroy(handle);\n}\n\nvoid Device::destroy(SamplerHandle handle) {\n  (void)handle;\n  // IGL/OpenGL is not using sampler handles\n}\n\nvoid Device::setCurrentThread() {\n  getContext().setCurrent();\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/PlatformDevice.h>\n#include <igl/opengl/UnbindPolicy.h>\n\nnamespace igl::opengl {\nclass CommandQueue;\n\nclass Device : public IDevice {\n  friend class HWDevice;\n  friend class PlatformDevice;\n\n public:\n  explicit Device(std::unique_ptr<IContext> context);\n  ~Device() override;\n\n  [[nodiscard]] Holder<BindGroupTextureHandle> createBindGroup(\n      const BindGroupTextureDesc& desc,\n      const IRenderPipelineState* IGL_NULLABLE compatiblePipeline,\n      Result* IGL_NULLABLE outResult) override;\n  [[nodiscard]] Holder<BindGroupBufferHandle> createBindGroup(const BindGroupBufferDesc& desc,\n                                                              Result* IGL_NULLABLE\n                                                                  outResult) override;\n  void destroy(BindGroupTextureHandle handle) override;\n  void destroy(BindGroupBufferHandle handle) override;\n  void destroy(SamplerHandle handle) override;\n\n  // Command Queue\n  std::shared_ptr<ICommandQueue> createCommandQueue(const CommandQueueDesc& desc,\n                                                    Result* IGL_NULLABLE\n                                                        outResult) noexcept override;\n\n  // Backend type query\n  [[nodiscard]] BackendType getBackendType() const override {\n    return BackendType::OpenGL;\n  }\n\n  // OpenGL doesn't have a single native device handle\n  [[nodiscard]] void* IGL_NULLABLE getNativeDevice() const override {\n    return nullptr;\n  }\n\n  // Resources\n  std::unique_ptr<IBuffer> createBuffer(const BufferDesc& desc,\n                                        Result* IGL_NULLABLE outResult) const noexcept override;\n  std::shared_ptr<IDepthStencilState> createDepthStencilState(const DepthStencilStateDesc& desc,\n                                                              Result* IGL_NULLABLE\n                                                                  outResult) const override;\n  std::shared_ptr<ISamplerState> createSamplerState(const SamplerStateDesc& desc,\n                                                    Result* IGL_NULLABLE outResult) const override;\n  std::shared_ptr<ITexture> createTexture(const TextureDesc& desc,\n                                          Result* IGL_NULLABLE outResult) const noexcept override;\n  std::shared_ptr<ITexture> createTextureView(std::shared_ptr<ITexture> texture,\n                                              const TextureViewDesc& desc,\n                                              Result* IGL_NULLABLE\n                                                  outResult) const noexcept override;\n\n  std::shared_ptr<IVertexInputState> createVertexInputState(const VertexInputStateDesc& desc,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) const override;\n\n  // Pipelines\n  std::shared_ptr<IComputePipelineState> createComputePipeline(const ComputePipelineDesc& desc,\n                                                               Result* IGL_NULLABLE\n                                                                   outResult) const override;\n  std::shared_ptr<IRenderPipelineState> createRenderPipeline(const RenderPipelineDesc& desc,\n                                                             Result* IGL_NULLABLE\n                                                                 outResult) const override;\n\n  // Shaders\n  std::unique_ptr<IShaderLibrary> createShaderLibrary(const ShaderLibraryDesc& desc,\n                                                      Result* IGL_NULLABLE\n                                                          outResult) const override;\n\n  std::shared_ptr<IShaderModule> createShaderModule(const ShaderModuleDesc& desc,\n                                                    Result* IGL_NULLABLE outResult) const override;\n\n  std::unique_ptr<IShaderStages> createShaderStages(const ShaderStagesDesc& desc,\n                                                    Result* IGL_NULLABLE outResult) const override;\n\n  std::shared_ptr<IFramebuffer> createFramebuffer(const FramebufferDesc& desc,\n                                                  Result* IGL_NULLABLE outResult) noexcept override;\n\n  [[nodiscard]] base::IFramebufferInterop* IGL_NULLABLE\n  createFramebufferInterop(const base::FramebufferInteropDesc& desc) override;\n\n  // Timers\n  std::shared_ptr<ITimer> createTimer(Result* IGL_NULLABLE outResult) const noexcept override;\n\n  // Timestamp Queries\n  std::shared_ptr<ITimestampQueries> createTimestampQueries(uint32_t maxTimestamps,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) const noexcept override;\n\n  // debug markers useful in GPU captures\n  void pushMarker(int len, const char* IGL_NULLABLE name);\n  void popMarker();\n\n  [[nodiscard]] const PlatformDevice& getPlatformDevice() const noexcept override = 0;\n\n  void setCurrentThread() override;\n\n  [[nodiscard]] IContext& getContext() const {\n    return *context_;\n  }\n\n  // ICapabilities\n  [[nodiscard]] bool hasFeature(DeviceFeatures capability) const override;\n  [[nodiscard]] bool hasRequirement(DeviceRequirement requirement) const override;\n  bool getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const override;\n  [[nodiscard]] TextureFormatCapabilities getTextureFormatCapabilities(\n      TextureFormat format) const override;\n  [[nodiscard]] ShaderVersion getShaderVersion() const override;\n  [[nodiscard]] BackendVersion getBackendVersion() const override;\n\n  // Device Statistics\n  [[nodiscard]] size_t getCurrentDrawCount() const override;\n  [[nodiscard]] size_t getShaderCompilationCount() const override;\n\n  bool verifyScope() override;\n\n  void updateSurface(void* IGL_NULLABLE nativeWindowType) override;\n\n protected:\n  void beginScope() override;\n  void endScope() override;\n\n  [[nodiscard]] const std::shared_ptr<IContext>& getSharedContext() const {\n    return context_;\n  }\n\n private:\n  GLint defaultFrameBufferID_{};\n  GLint defaultFrameBufferWidth_{};\n  GLint defaultFrameBufferHeight_{};\n  const std::shared_ptr<IContext> context_;\n  // on OpenGL we only need one command queue\n  std::shared_ptr<CommandQueue> commandQueue_;\n  const DeviceFeatureSet& deviceFeatureSet_;\n  UnbindPolicy cachedUnbindPolicy_{};\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/DeviceFeatureSet.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/DeviceFeatureSet.h>\n\n#include <igl/Common.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl {\nnamespace {\nbool hasVersion(const DeviceFeatureSet& dfs, bool usesOpenGLES, GLVersion minSupportedVersion) {\n  return DeviceFeatureSet::usesOpenGLES() == usesOpenGLES &&\n         dfs.getGLVersion() >= minSupportedVersion;\n}\n\nbool hasVersionOrExtension(const DeviceFeatureSet& dfs,\n                           bool usesOpenGLES,\n                           GLVersion minSupportedVersion,\n                           const char* extension) {\n  return hasVersion(dfs, usesOpenGLES, minSupportedVersion) || dfs.isSupported(extension);\n}\n\nbool hasDesktopVersion(const DeviceFeatureSet& dfs, GLVersion minSupportedVersion) {\n  return hasVersion(dfs, false, minSupportedVersion);\n}\n\nbool hasESVersion(const DeviceFeatureSet& dfs, GLVersion minSupportedVersion) {\n  return hasVersion(dfs, true, minSupportedVersion);\n}\n\nbool hasESExtension(const DeviceFeatureSet& dfs, const char* extension) {\n  return DeviceFeatureSet::usesOpenGLES() && dfs.isSupported(extension);\n}\n\nbool hasDesktopExtension(const DeviceFeatureSet& dfs, const char* extension) {\n  return !DeviceFeatureSet::usesOpenGLES() && dfs.isSupported(extension);\n}\n\nbool hasDesktopOrESVersion(const DeviceFeatureSet& dfs,\n                           GLVersion minDesktopSupportedVersion,\n                           GLVersion minESSupportedVersion) {\n  return hasDesktopVersion(dfs, minDesktopSupportedVersion) ||\n         hasESVersion(dfs, minESSupportedVersion);\n}\n\nbool hasDesktopVersionOrExtension(const DeviceFeatureSet& dfs,\n                                  GLVersion minSupportedVersion,\n                                  const char* extension) {\n  return hasVersionOrExtension(dfs, false, minSupportedVersion, extension);\n}\n\nbool hasESVersionOrExtension(const DeviceFeatureSet& dfs,\n                             GLVersion minSupportedVersion,\n                             const char* extension) {\n  return hasVersionOrExtension(dfs, true, minSupportedVersion, extension);\n}\n\nbool hasDesktopOrESVersionOrExtension(const DeviceFeatureSet& dfs,\n                                      GLVersion minDesktopSupportedVersion,\n                                      GLVersion minESSupportedVersion,\n                                      const char* desktopExtension,\n                                      const char* esExtension) {\n  return hasDesktopVersionOrExtension(dfs, minDesktopSupportedVersion, desktopExtension) ||\n         hasESVersionOrExtension(dfs, minESSupportedVersion, esExtension);\n}\n\nbool hasDesktopOrESVersionOrExtension(const DeviceFeatureSet& dfs,\n                                      GLVersion minDesktopSupportedVersion,\n                                      GLVersion minESSupportedVersion,\n                                      const char* extension) {\n  return hasDesktopOrESVersionOrExtension(\n      dfs, minDesktopSupportedVersion, minESSupportedVersion, extension, extension);\n}\n\nbool hasDesktopOrESExtension(const DeviceFeatureSet& dfs,\n                             const char* desktopExtension,\n                             const char* esExtension) {\n  return (!DeviceFeatureSet::usesOpenGLES() && dfs.isSupported(desktopExtension)) ||\n         (DeviceFeatureSet::usesOpenGLES() && dfs.isSupported(esExtension));\n}\n\nbool hasDesktopOrESExtension(const DeviceFeatureSet& dfs, const char* extension) {\n  return hasDesktopOrESExtension(dfs, extension, extension);\n}\n} // namespace\n\nbool DeviceFeatureSet::usesOpenGLES() noexcept {\n#if IGL_OPENGL_ES\n  return true;\n#else\n  return false;\n#endif\n}\n\nDeviceFeatureSet::DeviceFeatureSet(IContext& glContext) : glContext_(glContext) {}\n\nvoid DeviceFeatureSet::initializeVersion(GLVersion version) {\n  version_ = version;\n}\n\nvoid DeviceFeatureSet::initializeExtensions(std::string extensions,\n                                            std::unordered_set<std::string> supportedExtensions) {\n  extensions_ = std::move(extensions);\n  supportedExtensions_ = std::move(supportedExtensions);\n}\n\nGLVersion DeviceFeatureSet::getGLVersion() const noexcept {\n  return version_;\n}\n\nShaderVersion DeviceFeatureSet::getShaderVersion() const {\n  return ::igl::opengl::getShaderVersion(version_);\n}\n\nBackendVersion DeviceFeatureSet::getBackendVersion() const {\n  switch (version_) {\n  case GLVersion::v1_1:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 1, .minorVersion = 1};\n  case GLVersion::v2_0:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 2, .minorVersion = 0};\n  case GLVersion::v2_1:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 2, .minorVersion = 1};\n  case GLVersion::v3_0:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 3, .minorVersion = 0};\n  case GLVersion::v3_1:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 3, .minorVersion = 1};\n  case GLVersion::v3_2:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 3, .minorVersion = 2};\n  case GLVersion::v3_3:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 3, .minorVersion = 3};\n  case GLVersion::v4_0:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 4, .minorVersion = 0};\n  case GLVersion::v4_1:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 4, .minorVersion = 1};\n  case GLVersion::v4_2:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 4, .minorVersion = 2};\n  case GLVersion::v4_3:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 4, .minorVersion = 3};\n  case GLVersion::v4_4:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 4, .minorVersion = 4};\n  case GLVersion::v4_5:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 4, .minorVersion = 5};\n  case GLVersion::v4_6:\n    return {.flavor = BackendFlavor::OpenGL, .majorVersion = 4, .minorVersion = 6};\n  case GLVersion::v2_0_ES:\n    return {.flavor = BackendFlavor::OpenGL_ES, .majorVersion = 2, .minorVersion = 0};\n  case GLVersion::v3_0_ES:\n    return {.flavor = BackendFlavor::OpenGL_ES, .majorVersion = 3, .minorVersion = 0};\n  case GLVersion::v3_1_ES:\n    return {.flavor = BackendFlavor::OpenGL_ES, .majorVersion = 3, .minorVersion = 1};\n  case GLVersion::v3_2_ES:\n    return {.flavor = BackendFlavor::OpenGL_ES, .majorVersion = 3, .minorVersion = 2};\n  case GLVersion::NotAvailable:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return {.flavor = usesOpenGLES() ? BackendFlavor::OpenGL_ES : BackendFlavor::OpenGL,\n            .majorVersion = 2,\n            .minorVersion = 0};\n  }\n  IGL_UNREACHABLE_RETURN({});\n}\n\nbool DeviceFeatureSet::isSupported(const std::string& extensionName) const {\n  if (!extensions_.empty()) {\n    return extensions_.find(extensionName) != std::string::npos;\n  } else {\n    return supportedExtensions_.find(extensionName) != supportedExtensions_.end();\n  }\n}\n\nbool DeviceFeatureSet::isExtensionSupported(Extensions extension) const {\n  switch (extension) {\n  case Extensions::AppleRgb422:\n    return hasDesktopOrESExtension(*this, \"GL_APPLE_rgb_422\");\n  case Extensions::BindlessTextureArb:\n    return hasDesktopExtension(*this, \"GL_ARB_bindless_texture\");\n  case Extensions::BindlessTextureNv:\n    return hasDesktopOrESExtension(*this, \"GL_NV_bindless_texture\");\n  case Extensions::Debug:\n    return hasDesktopOrESExtension(*this, \"GL_KHR_debug\");\n  case Extensions::DebugLabel:\n    return hasDesktopOrESExtension(*this, \"GL_EXT_debug_label\");\n  case Extensions::DebugMarker:\n    return hasDesktopOrESExtension(*this, \"GL_EXT_debug_marker\");\n  case Extensions::Depth24:\n    return hasESExtension(*this, \"GL_OES_depth24\");\n  case Extensions::Depth32:\n    return hasESExtension(*this, \"GL_OES_depth32\");\n  case Extensions::DepthTexture:\n    return hasESExtension(*this, \"GL_OES_depth_texture\");\n  case Extensions::DiscardFramebuffer:\n    return hasESExtension(*this, \"GL_EXT_discard_framebuffer\");\n  case Extensions::DrawBuffers:\n    return hasESExtension(*this, \"GL_EXT_draw_buffers\");\n  case Extensions::Es2Compatibility:\n    return hasDesktopExtension(*this, \"GL_ARB_ES2_compatibility\");\n  case Extensions::FramebufferBlit:\n    return hasDesktopExtension(*this, \"GL_EXT_framebuffer_blit\");\n  case Extensions::FramebufferObject:\n    return hasDesktopExtension(*this, \"GL_ARB_framebuffer_object\");\n  case Extensions::InvalidateSubdata:\n    return isSupported(\"GL_ARB_invalidate_subdata\");\n  case Extensions::MapBuffer:\n    return hasESExtension(*this, \"GL_OES_mapbuffer\");\n  case Extensions::MapBufferRange:\n    return hasESExtension(*this, \"GL_EXT_map_buffer_range\");\n  case Extensions::MultiSampleApple:\n    return hasESExtension(*this, \"GL_APPLE_framebuffer_multisample\");\n  case Extensions::MultiSampleExt:\n    return hasESExtension(*this, \"GL_EXT_multisampled_render_to_texture\");\n  case Extensions::MultiSampleImg:\n    return hasESExtension(*this, \"GL_IMG_multisampled_render_to_texture\");\n  case Extensions::MultiViewMultiSample:\n    return hasESExtension(*this, \"GL_OVR_multiview_multisampled_render_to_texture\");\n  case Extensions::PolygonOffsetClamp:\n    return hasDesktopOrESExtension(*this, \"GL_ARB_polygon_offset_clamp\");\n  case Extensions::RequiredInternalFormat:\n    return hasESExtension(*this, \"GL_OES_required_internalformat\");\n  case Extensions::ShaderImageLoadStore:\n    return hasESExtension(*this, \"GL_EXT_shader_image_load_store\");\n  case Extensions::Srgb:\n    return hasESExtension(*this, \"GL_EXT_sRGB\");\n  case Extensions::SrgbWriteControl:\n    return hasESExtension(*this, \"GL_EXT_sRGB_write_control\");\n  case Extensions::Sync:\n    return hasESExtension(*this, \"GL_APPLE_sync\");\n  case Extensions::TexStorage:\n    return isSupported(\"GL_EXT_texture_storage\");\n  case Extensions::Texture3D:\n    return hasESExtension(*this, \"GL_OES_texture_3D\");\n  case Extensions::TextureFormatBgra8888Ext:\n    return hasESExtension(*this, \"GL_EXT_texture_format_BGRA8888\");\n  case Extensions::TextureFormatBgra8888Apple:\n    return hasESExtension(*this, \"GL_APPLE_texture_format_BGRA8888\");\n  case Extensions::TextureFloat:\n    return hasDesktopExtension(*this, \"GL_ARB_texture_float\");\n  case Extensions::TextureHalfFloat:\n    // Necessary for GL_HALF_FLOAT_OES, which is different than GL_HALF_FLOAT\n    return hasESExtension(*this, \"GL_OES_texture_half_float\");\n  case Extensions::TextureRgArb:\n    return hasDesktopExtension(*this, \"GL_ARB_texture_rg\");\n  case Extensions::TextureRgExt:\n    return hasESExtension(*this, \"GL_EXT_texture_rg\");\n  case Extensions::TextureSrgb:\n    return hasDesktopExtension(*this, \"GL_EXT_texture_sRGB\");\n  case Extensions::TextureType2101010Rev:\n    return hasESExtension(*this, \"GL_EXT_texture_type_2_10_10_10_REV\");\n  case Extensions::TimerQuery:\n    return hasDesktopOrESExtension(*this, \"GL_ARB_timer_query\", \"GL_EXT_disjoint_timer_query\");\n  case Extensions::VertexArrayObject:\n    return hasESExtension(*this, \"GL_OES_vertex_array_object\");\n  case Extensions::VertexAttribDivisor:\n    return hasESExtension(*this, \"GL_NV_instanced_arrays\");\n  }\n  IGL_UNREACHABLE_RETURN(false)\n}\n\nbool DeviceFeatureSet::isFeatureSupported(DeviceFeatures feature) const {\n  switch (feature) {\n  case DeviceFeatures::CopyBuffer:\n    return false;\n\n  case DeviceFeatures::MultiSample:\n    return hasDesktopVersion(*this, GLVersion::v3_0) ||\n           hasExtension(Extensions::FramebufferObject) || hasESVersion(*this, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::MultiSampleApple) || hasExtension(Extensions::MultiSampleExt) ||\n           hasExtension(Extensions::MultiSampleImg);\n\n  case DeviceFeatures::MultiSampleResolve:\n    return false;\n\n  case DeviceFeatures::TextureFilterAnisotropic:\n    return hasDesktopVersion(*this, GLVersion::v4_6) ||\n           hasDesktopOrESExtension(*this, \"GL_EXT_texture_filter_anisotropic\") ||\n           hasDesktopExtension(*this, \"GL_ARB_texture_filter_anisotropic\");\n\n  case DeviceFeatures::MapBufferRange:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasDesktopExtension(*this, \"GL_ARB_map_buffer_range\") ||\n           hasExtension(Extensions::MapBufferRange);\n\n  case DeviceFeatures::MeshShaders:\n    return false;\n\n  case DeviceFeatures::MultipleRenderTargets:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v2_0, GLVersion::v3_0_ES, \"GL_EXT_draw_buffers\");\n\n  case DeviceFeatures::StandardDerivative:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v2_0, GLVersion::v3_0_ES, \"GL_OES_standard_derivatives\");\n\n  case DeviceFeatures::StandardDerivativeExt:\n    return hasESExtension(*this, \"GL_OES_standard_derivatives\");\n\n  case DeviceFeatures::TextureFormatRG:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::TextureRgArb) || hasExtension(Extensions::TextureRgExt);\n\n  case DeviceFeatures::TextureFormatRGB:\n    return true;\n\n  case DeviceFeatures::ReadWriteFramebuffer:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::FramebufferObject) ||\n           hasESExtension(*this, \"GL_APPLE_framebuffer_multisample\");\n\n  case DeviceFeatures::TextureNotPot:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v2_0, GLVersion::v3_0_ES, \"GL_OES_texture_npot\");\n\n  case DeviceFeatures::UniformBlocks:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v3_1, GLVersion::v3_0_ES, \"GL_ARB_uniform_buffer_object\");\n\n  case DeviceFeatures::TextureHalfFloat:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::TextureFloat) || hasExtension(Extensions::TextureHalfFloat);\n\n  case DeviceFeatures::TextureFloat:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::TextureFloat) || hasESExtension(*this, \"GL_OES_texture_float\");\n\n  case DeviceFeatures::Texture2DArray:\n    return (hasDesktopOrESVersionOrExtension(\n                *this, GLVersion::v3_0, GLVersion::v3_0_ES, \"GL_EXT_texture_array\") ||\n            hasDesktopExtension(*this, \"GL_EXT_gpu_shader4\"));\n\n  case DeviceFeatures::Texture3D:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v2_0, GLVersion::v3_0_ES, \"GL_OES_texture_3D\");\n\n  case DeviceFeatures::TextureArrayExt:\n    return hasDesktopExtension(*this, \"GL_EXT_texture_array\") ||\n           hasDesktopExtension(*this, \"GL_EXT_gpu_shader4\");\n\n  case DeviceFeatures::ShaderTextureLod:\n    return hasDesktopOrESVersionOrExtension(*this,\n                                            GLVersion::v3_0,\n                                            GLVersion::v3_0_ES,\n                                            \"GL_ARB_shader_texture_lod\",\n                                            \"GL_EXT_shader_texture_lod\");\n\n  case DeviceFeatures::ShaderTextureLodExt:\n    return hasDesktopOrESExtension(*this, \"GL_ARB_shader_texture_lod\", \"GL_EXT_shader_texture_lod\");\n\n  case DeviceFeatures::DepthShaderRead:\n    // Currently it is unclear if Depth Shader Read is the same as ARB_depth_texture extension so\n    // we are using v2.1 because we know it works on the Mac.\n    return hasDesktopOrESVersion(*this, GLVersion::v2_1, GLVersion::v3_0_ES);\n\n  case DeviceFeatures::DepthCompare:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES);\n\n  case DeviceFeatures::MinMaxBlend:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v2_0, GLVersion::v3_0_ES, \"GL_EXT_blend_minmax\");\n\n  case DeviceFeatures::TextureExternalImage:\n    return hasESVersionOrExtension(*this, GLVersion::v3_0_ES, \"GL_OES_EGL_image_external_essl3\") ||\n           hasESExtension(*this, \"GL_OES_EGL_image_external\");\n\n  case DeviceFeatures::Compute:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_1_ES) ||\n           (hasDesktopExtension(*this, \"GL_ARB_compute_shader\") &&\n            hasInternalFeature(InternalFeatures::ProgramInterfaceQuery) &&\n            hasInternalFeature(InternalFeatures::ShaderImageLoadStore));\n\n  case DeviceFeatures::TextureBindless:\n    return hasDesktopExtension(*this, \"GL_ARB_bindless_texture\");\n\n  case DeviceFeatures::ExplicitBinding:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v4_2, GLVersion::v3_1_ES, \"GL_ARB_shading_language_420pack\");\n\n  case DeviceFeatures::ExplicitBindingExt:\n    return hasDesktopExtension(*this, \"GL_ARB_shading_language_420pack\");\n\n  case DeviceFeatures::ExternalMemoryObjects:\n    return hasDesktopOrESExtension(*this, \"GL_EXT_memory_object\") &&\n           hasDesktopOrESExtension(*this, \"GL_EXT_memory_object_fd\");\n\n  case DeviceFeatures::TextureViews:\n    return false;\n\n  case DeviceFeatures::PushConstants:\n    return false;\n\n  case DeviceFeatures::BufferDeviceAddress:\n    return false;\n\n  case DeviceFeatures::Multiview:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) &&\n           isSupported(\"GL_OVR_multiview2\");\n\n  case DeviceFeatures::MultiViewMultisample:\n    return hasExtension(Extensions::MultiViewMultiSample);\n\n  case DeviceFeatures::TexturePartialMipChain:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           hasESExtension(*this, \"GL_APPLE_texture_max_level\");\n\n  case DeviceFeatures::BindUniform:\n    return true;\n  case DeviceFeatures::BufferRing:\n    return false;\n  case DeviceFeatures::BufferNoCopy:\n    return false;\n  case DeviceFeatures::ShaderLibrary:\n    return false;\n\n  case DeviceFeatures::StorageBuffers:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_1_ES) ||\n           hasDesktopExtension(*this, \"GL_ARB_shader_storage_buffer_object\");\n\n  case DeviceFeatures::BindBytes:\n    return false;\n  case DeviceFeatures::SRGB:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v2_1, GLVersion::v3_0_ES, \"GL_EXT_texture_sRGB\", \"GL_EXT_sRGB\");\n  case DeviceFeatures::SRGBSwapchain:\n    return glContext_.eglSupportssRGB() && hasFeature(DeviceFeatures::SRGB);\n  case DeviceFeatures::SRGBWriteControl:\n    return hasDesktopVersion(*this, GLVersion::v3_0) ||\n           hasDesktopExtension(*this, \"GL_ARB_framebuffer_sRGB\") ||\n           hasDesktopExtension(*this, \"GL_EXT_framebuffer_sRGB\") ||\n           hasESExtension(*this, \"GL_EXT_sRGB_write_control\");\n\n  case DeviceFeatures::SamplerMinMaxLod:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES);\n\n  case DeviceFeatures::DrawFirstIndexFirstVertex:\n    // https://registry.khronos.org/OpenGL-Refpages/es3/html/glDrawElementsInstancedBaseVertex.xhtml\n    return hasDesktopOrESVersion(*this, GLVersion::v4_0, GLVersion::v3_2_ES);\n\n  case DeviceFeatures::DrawIndexedIndirect:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v4_0, GLVersion::v3_1_ES, \"GL_ARB_draw_indirect\");\n\n  case DeviceFeatures::DrawInstanced:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v3_1, GLVersion::v3_0_ES, \"GL_ARB_draw_indirect\");\n\n  case DeviceFeatures::ValidationLayersEnabled:\n    return false;\n\n  case DeviceFeatures::Indices8Bit:\n    return true;\n\n  case DeviceFeatures::TimestampQueries:\n    return hasExtension(Extensions::TimerQuery);\n\n  case DeviceFeatures::Timers:\n    return hasExtension(Extensions::TimerQuery);\n  }\n\n  return false;\n}\n\nbool DeviceFeatureSet::isInternalFeatureSupported(InternalFeatures feature) const {\n  switch (feature) {\n  case InternalFeatures::ClearBufferfv:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES);\n\n  case InternalFeatures::ClearDepthf:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_1, GLVersion::v2_0_ES);\n\n  case InternalFeatures::DebugLabel:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_2_ES) ||\n           hasExtension(Extensions::Debug) || hasExtension(Extensions::DebugLabel);\n\n  case InternalFeatures::DebugMessage:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_2_ES) ||\n           hasExtension(Extensions::Debug) || hasExtension(Extensions::DebugMarker);\n\n  case InternalFeatures::DebugMessageCallback:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_2_ES) ||\n           hasExtension(Extensions::Debug);\n\n  case InternalFeatures::DrawArraysIndirect:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v4_0, GLVersion::v3_1_ES, \"GL_ARB_draw_indirect\");\n\n  case InternalFeatures::MultiDrawIndirect:\n    return hasDesktopVersionOrExtension(*this, GLVersion::v4_3, \"GL_ARB_multi_draw_indirect\") ||\n           hasESExtension(*this, \"GL_EXT_multi_draw_indirect\");\n\n  case InternalFeatures::FramebufferBlit:\n    // TODO: Add support for GL_ANGLE_framebuffer_blit\n    return hasDesktopOrESVersionOrExtension(\n               *this, GLVersion::v3_0, GLVersion::v3_0_ES, \"GL_EXT_framebuffer_blit\") ||\n           hasExtension(Extensions::FramebufferObject);\n\n  case InternalFeatures::FramebufferObject:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v2_0_ES) ||\n           hasExtension(Extensions::FramebufferObject);\n\n  case InternalFeatures::GetStringi:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES);\n\n  case InternalFeatures::InvalidateFramebuffer:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::InvalidateSubdata) ||\n           hasExtension(Extensions::DiscardFramebuffer);\n\n  case InternalFeatures::MapBuffer:\n    return hasDesktopVersion(*this, GLVersion::v2_0) || hasExtension(Extensions::MapBuffer);\n\n  case InternalFeatures::PackRowLength:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES);\n\n  case InternalFeatures::PixelBufferObject:\n    return hasDesktopOrESVersionOrExtension(*this,\n                                            GLVersion::v2_1,\n                                            GLVersion::v3_0_ES,\n                                            \"GL_ARB_pixel_buffer_object\",\n                                            \"GL_NV_pixel_buffer_object\");\n\n  case InternalFeatures::PolygonFillMode:\n    return hasDesktopVersion(*this, GLVersion::v2_0);\n\n  case InternalFeatures::ProgramInterfaceQuery:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_1_ES) ||\n           hasDesktopExtension(*this, \"GL_ARB_program_interface_query\");\n\n  case InternalFeatures::SeamlessCubeMap:\n    return hasDesktopVersionOrExtension(*this, GLVersion::v3_2, \"GL_ARB_seamless_cube_map\");\n\n  case InternalFeatures::Sync:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_2, GLVersion::v3_0_ES) ||\n           hasDesktopExtension(*this, \"GL_ARB_sync\") || hasExtension(Extensions::Sync);\n\n  case InternalFeatures::TexStorage:\n    return hasDesktopOrESVersionOrExtension(\n               *this, GLVersion::v4_2, GLVersion::v3_0_ES, \"GL_ARB_texture_storage\") ||\n           hasExtension(Extensions::TexStorage);\n\n  case InternalFeatures::ShaderImageLoadStore:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_2, GLVersion::v3_1_ES) ||\n           hasDesktopExtension(*this, \"GL_ARB_shader_image_load_store\") ||\n           hasExtension(Extensions::ShaderImageLoadStore);\n\n  case InternalFeatures::TextureCompare:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           hasESExtension(*this, \"GL_EXT_shadow_samplers\");\n\n  case InternalFeatures::UnmapBuffer:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::MapBuffer) || hasExtension(Extensions::MapBufferRange);\n\n  case InternalFeatures::UnpackRowLength:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           hasESExtension(*this, \"GL_EXT_unpack_subimage\");\n\n  case InternalFeatures::VertexArrayObject:\n    // We've had issues with VertexArrayObject support on mobile so this is disabled for OpenGL ES.\n    // Previously it was enabled specifically for Quest 2 on OpenGLES by checking if\n    // GL_VENDOR == \"Qualcomm\" and GL_RENDERER == \"Adreno (TM) 650\".\n    // However, Galaxy S20 also matched that and VAO support caused issues.\n    // @fb-only\n    // @fb-only\n    return hasDesktopVersionOrExtension(*this, GLVersion::v3_0, \"GL_ARB_vertex_array_object\");\n\n  case InternalFeatures::VertexAttribDivisor:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_3, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::VertexAttribDivisor);\n  }\n\n  return false;\n}\n\nbool DeviceFeatureSet::isTextureFeatureSupported(TextureFeatures feature) const {\n  switch (feature) {\n  case TextureFeatures::ColorFilterable16f:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::TextureFloat) ||\n           hasESExtension(*this, \"GL_OES_texture_half_float_linear\");\n\n  case TextureFeatures::ColorFilterable32f:\n    return hasDesktopVersion(*this, GLVersion::v3_0) || hasExtension(Extensions::TextureFloat) ||\n           hasESExtension(*this, \"GL_OES_texture_float_linear\");\n\n  case TextureFeatures::ColorFormatRgb10A2UI:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v4_0, GLVersion::v3_0_ES, \"GL_ARB_texture_rgb10_a2ui\");\n\n  case TextureFeatures::ColorFormatRgInt:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasDesktopExtension(*this, \"GL_ARB_texture_rg\");\n\n  case TextureFeatures::ColorFormatRgUNorm16:\n    return hasDesktopVersionOrExtension(*this, GLVersion::v3_0, \"GL_ARB_texture_rg\") ||\n           hasESExtension(*this, \"GL_EXT_texture_norm16\");\n\n  case TextureFeatures::ColorFormatRgbaUNorm16:\n    return hasDesktopVersion(*this, GLVersion::v3_0) ||\n           hasESExtension(*this, \"GL_EXT_texture_norm16\");\n\n  case TextureFeatures::ColorRenderbuffer16f:\n    return hasDesktopOrESVersionOrExtension(\n               *this, GLVersion::v3_0, GLVersion::v3_2_ES, \"GL_EXT_color_buffer_half_float\") ||\n           (hasExtension(Extensions::FramebufferObject) && hasExtension(Extensions::TextureFloat));\n\n  case TextureFeatures::ColorRenderbuffer32f:\n    return hasDesktopOrESVersionOrExtension(\n               *this, GLVersion::v3_0, GLVersion::v3_2_ES, \"GL_EXT_color_buffer_float\") ||\n           (hasExtension(Extensions::FramebufferObject) && hasExtension(Extensions::TextureFloat));\n\n  case TextureFeatures::ColorRenderbufferRg16f:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_2_ES) ||\n           hasESExtension(*this, \"GL_EXT_color_buffer_float\") ||\n           hasESExtension(*this, \"GL_EXT_color_buffer_half_float\");\n\n  case TextureFeatures::ColorRenderbufferRg32f:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_2_ES) ||\n           hasESExtension(*this, \"GL_EXT_color_buffer_float\");\n\n  case TextureFeatures::ColorRenderbufferRg8:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           (hasExtension(Extensions::FramebufferObject) &&\n            hasExtension(Extensions::TextureRgArb)) ||\n           hasExtension(Extensions::TextureRgExt);\n\n  case TextureFeatures::ColorRenderbufferRgb10A2:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::RequiredInternalFormat);\n\n  case TextureFeatures::ColorRenderbufferRgb16f:\n    return hasESExtension(*this, \"GL_EXT_color_buffer_half_float\");\n\n  case TextureFeatures::ColorRenderbufferRgba8:\n    return hasDesktopOrESVersionOrExtension(\n               *this, GLVersion::v3_0, GLVersion::v3_0_ES, \"GL_OES_rgb8_rgba8\") ||\n           hasExtension(Extensions::FramebufferObject) ||\n           hasExtension(Extensions::RequiredInternalFormat);\n\n  case TextureFeatures::ColorRenderbufferSrgba8:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_1, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::Srgb);\n\n  case TextureFeatures::ColorTexImage16f:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::TextureFloat);\n\n  case TextureFeatures::ColorTexImage32f:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::TextureFloat);\n\n  case TextureFeatures::ColorTexImageA8:\n    // Sized alpha texture were available on Desktop OpenGL prior to deprecation in\n    // Version 3.0. For later versions of OpenGL, we create GL_R8 textures and use texture\n    // swizzling. Sized alpha textures are only available on OpenGL ES through extensions.\n    return (hasDesktopVersion(*this, GLVersion::v2_0) &&\n            !hasDesktopVersion(*this, GLVersion::v3_0)) ||\n           (hasDesktopVersion(*this, GLVersion::v3_0) &&\n            hasTextureFeature(TextureFeatures::ColorTexImageRg8)) ||\n           hasExtension(Extensions::RequiredInternalFormat);\n\n  case TextureFeatures::ColorTexImageBgr10A2:\n    return hasDesktopVersion(*this, GLVersion::v2_0);\n\n  case TextureFeatures::ColorTexImageBgr5A1:\n    // There's no OpenGL ES extension that specifically enables support for this, but Apple\n    // platforms support it.\n    return !usesOpenGLES() || hasExtension(Extensions::TextureFormatBgra8888Apple);\n\n  case TextureFeatures::ColorTexImageBgra:\n    return !usesOpenGLES() || hasExtension(Extensions::TextureFormatBgra8888Ext) ||\n           hasExtension(Extensions::TextureFormatBgra8888Apple);\n\n  case TextureFeatures::ColorTexImageBgraRgba8:\n    return hasDesktopVersion(*this, GLVersion::v2_0);\n\n  case TextureFeatures::ColorTexImageBgraSrgba:\n    // There's no OpenGL ES extension that specifically enables support for this, but Apple\n    // platforms support it.\n    return !usesOpenGLES() || (hasESVersion(*this, GLVersion::v3_0_ES) &&\n                               hasExtension(Extensions::TextureFormatBgra8888Apple));\n\n  case TextureFeatures::ColorTexImageLa:\n    // LUMINANCE and LUMINANCE_ALPHA were deprecated in Desktop OpenGL 3.0, and we don't use any\n    // work arounds for support after that.\n    return !hasDesktopVersion(*this, GLVersion::v3_0);\n\n  case TextureFeatures::ColorTexImageLa8:\n    // Sized luminance and luminance alpha texture were available on Desktop OpenGL prior to\n    // deprecation in Version 3.0. Sized luminance alpha textures are only available on OpenGL ES\n    // through extensions.\n    return (hasDesktopVersion(*this, GLVersion::v2_0) &&\n            !hasDesktopVersion(*this, GLVersion::v3_0)) ||\n           hasExtension(Extensions::RequiredInternalFormat);\n\n  case TextureFeatures::ColorTexImageRg8:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::TextureRgArb);\n\n  case TextureFeatures::ColorTexImageRgb10A2:\n    return hasTextureFeature(TextureFeatures::ColorRenderbufferRgb10A2) ||\n           hasExtension(Extensions::TextureType2101010Rev);\n\n  case TextureFeatures::ColorTexImageRgba8:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::RequiredInternalFormat);\n\n  case TextureFeatures::ColorTexImageSrgba8:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_1, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::TextureSrgb);\n\n  case TextureFeatures::ColorTexStorage16f:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_2, GLVersion::v3_0_ES) ||\n           ((hasFeature(DeviceFeatures::TextureHalfFloat) ||\n             hasTextureFeature(TextureFeatures::ColorRenderbuffer16f)) &&\n            hasInternalFeature(InternalFeatures::TexStorage));\n\n  case TextureFeatures::ColorTexStorage32f:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_2, GLVersion::v3_0_ES) ||\n           ((hasFeature(DeviceFeatures::TextureFloat) ||\n             hasTextureFeature(TextureFeatures::ColorRenderbuffer32f)) &&\n            hasInternalFeature(InternalFeatures::TexStorage));\n\n  case TextureFeatures::ColorTexStorageA8:\n    // Sized alpha texture were available on Desktop OpenGL prior to deprecation in\n    // Version 3.0. For later versions of OpenGL, we create GL_R8 textures and use texture\n    // swizzling. Sized alpha textures are only available on OpenGL ES through extensions.\n    return (hasDesktopVersion(*this, GLVersion::v3_0) &&\n            hasTextureFeature(TextureFeatures::ColorTexStorageRg8)) ||\n           hasExtension(Extensions::TexStorage);\n\n  case TextureFeatures::ColorTexStorageBgra8:\n    // TexStorage is explicitly supported when available by GL_APPLE_texture_format_BGRA8888\n    // TexStorage for GL_EXT_texture_format_BGRA8888 is added by GL_EXT_texture_storage\n    return (hasExtension(Extensions::TextureFormatBgra8888Apple) &&\n            (hasESVersion(*this, GLVersion::v3_0_ES) ||\n             hasInternalFeature(InternalFeatures::TexStorage))) ||\n           (hasExtension(Extensions::TextureFormatBgra8888Ext) &&\n            hasExtension(Extensions::TexStorage));\n\n  case TextureFeatures::ColorTexStorageLa8:\n    // TexStorage with sized luminance alpha formats is only supported with GL_EXT_texture_storage\n    return hasExtension(Extensions::TexStorage);\n\n  case TextureFeatures::ColorTexStorageRg8:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_2, GLVersion::v3_0_ES) ||\n           (hasExtension(Extensions::TexStorage) && hasExtension(Extensions::TextureRgExt));\n\n  case TextureFeatures::ColorTexStorageRgb10A2:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_2, GLVersion::v3_0_ES) ||\n           (hasExtension(Extensions::TexStorage) &&\n            hasExtension(Extensions::TextureType2101010Rev));\n\n  case TextureFeatures::ColorTexStorageRgba8:\n    return hasTextureFeature(TextureFeatures::ColorRenderbufferRgba8) &&\n           hasInternalFeature(InternalFeatures::TexStorage);\n\n  case TextureFeatures::ColorTexStorageSrgba8:\n    // NOTE: GL_EXT_texture_storage does NOT support GL_SRGB8_ALPHA8.\n    return hasFeature(DeviceFeatures::SRGB) && hasInternalFeature(InternalFeatures::TexStorage) &&\n           !(hasInternalRequirement(InternalRequirement::TexStorageExtReq) &&\n             hasExtension(Extensions::TexStorage));\n\n  case TextureFeatures::DepthFilterable:\n    return hasDesktopVersion(*this, GLVersion::v2_0);\n\n  case TextureFeatures::DepthRenderbuffer16:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v2_0_ES) ||\n           hasExtension(Extensions::FramebufferObject);\n\n  case TextureFeatures::DepthRenderbuffer24:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::FramebufferObject) || hasExtension(Extensions::Depth24);\n\n  case TextureFeatures::DepthRenderbuffer32:\n    // 32-bit integer depth textures are only supported on ES through specific extensions.\n    return hasDesktopVersion(*this, GLVersion::v3_0) ||\n           hasExtension(Extensions::FramebufferObject) || hasExtension(Extensions::Depth32);\n\n  case TextureFeatures::Depth24Stencil8:\n    return hasDesktopOrESVersionOrExtension(*this,\n                                            GLVersion::v3_0,\n                                            GLVersion::v3_0_ES,\n                                            \"GL_EXT_packed_depth_stencil\",\n                                            \"GL_OES_packed_depth_stencil\") ||\n           hasExtension(Extensions::FramebufferObject);\n\n  case TextureFeatures::Depth32FStencil8:\n    return hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v3_0, GLVersion::v3_0_ES, \"GL_ARB_depth_buffer_float\");\n\n  case TextureFeatures::DepthTexImage:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           hasExtension(Extensions::DepthTexture);\n\n  case TextureFeatures::DepthTexImage16:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           (hasTextureFeature(TextureFeatures::DepthTexImage) &&\n            hasExtension(Extensions::RequiredInternalFormat));\n\n  case TextureFeatures::DepthTexImage24:\n    return hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES) ||\n           (hasExtension(Extensions::Depth24) && hasExtension(Extensions::RequiredInternalFormat));\n\n  case TextureFeatures::DepthTexImage32:\n    // 32-bit integer depth textures are only supported on ES through specific extensions.\n    return hasDesktopVersion(*this, GLVersion::v2_0) || hasExtension(Extensions::DepthTexture) ||\n           (hasExtension(Extensions::Depth32) && hasExtension(Extensions::RequiredInternalFormat));\n\n  case TextureFeatures::DepthTexStorage16:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_2, GLVersion::v3_0_ES) ||\n           (hasTextureFeature(TextureFeatures::DepthRenderbuffer16) &&\n            hasInternalFeature(InternalFeatures::TexStorage));\n\n  case TextureFeatures::DepthTexStorage24:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_2, GLVersion::v3_0_ES) ||\n           (hasTextureFeature(TextureFeatures::DepthRenderbuffer24) &&\n            hasInternalFeature(InternalFeatures::TexStorage));\n\n  case TextureFeatures::DepthTexStorage32:\n    // 32-bit integer depth textures are only supported on ES through specific extensions.\n    return hasDesktopVersion(*this, GLVersion::v4_2) ||\n           (hasExtension(Extensions::DepthTexture) && hasExtension(Extensions::TexStorage));\n\n  case TextureFeatures::StencilTexture8:\n    return hasDesktopOrESVersionOrExtension(*this,\n                                            GLVersion::v4_4,\n                                            GLVersion::v3_2_ES,\n                                            \"GL_ARB_texture_stencil8\",\n                                            \"GL_OES_texture_stencil8\");\n\n  case TextureFeatures::TextureCompressionAstc:\n    return hasESVersion(*this, GLVersion::v3_2_ES) ||\n           hasDesktopOrESExtension(*this, \"GL_KHR_texture_compression_astc_hdr\") ||\n           hasDesktopOrESExtension(*this, \"GL_KHR_texture_compression_astc_ldr\") ||\n           hasDesktopOrESExtension(*this, \"GL_OES_texture_compression_astc\");\n\n  case TextureFeatures::TextureCompressionBptc:\n    return hasDesktopExtension(*this, \"GL_ARB_texture_compression_bptc\") ||\n           hasESExtension(*this, \"GL_EXT_texture_compression_bptc\") ||\n           hasDesktopVersion(*this, GLVersion::v4_2);\n\n  case TextureFeatures::TextureCompressionEtc1:\n    return hasESExtension(*this, \"GL_EXT_compressed_ETC1_RGB8_sub_texture\") ||\n           hasESExtension(*this, \"GL_OES_compressed_ETC1_RGB8_texture\");\n\n  case TextureFeatures::TextureCompressionEtc2Eac:\n    return hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_0_ES) ||\n           hasDesktopExtension(*this, \"GL_ARB_ES3_compatibility\");\n\n  case TextureFeatures::TextureCompressionPvrtc:\n    return hasESExtension(*this, \"GL_IMG_texture_compression_pvrtc\");\n\n  case TextureFeatures::TextureCompressionTexImage:\n    // On Desktop GL, TexImage can be used to initialize a compressed texture.\n    // On OpenGL ES, TexImage CANNOT be used.\n    return !usesOpenGLES();\n\n  case TextureFeatures::TextureCompressionTexStorage:\n    // On Desktop GL, TexStorage CANNOT be used to initialize a compressed texture.\n    // On OpenGL ES, TexStorage can be used if it is available.\n    return usesOpenGLES() && hasInternalFeature(InternalFeatures::TexStorage);\n\n  case TextureFeatures::TextureInteger:\n    return hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) ||\n           hasDesktopExtension(*this, \"GL_EXT_texture_integer\");\n\n  case TextureFeatures::TextureTypeUInt8888Rev:\n    return hasDesktopVersion(*this, GLVersion::v2_0);\n  }\n\n  return false;\n}\n\nbool DeviceFeatureSet::hasExtension(Extensions extension) const {\n  const uint64_t extensionIndex = static_cast<uint64_t>(extension);\n  IGL_DEBUG_ASSERT(extensionIndex < 64);\n  const uint64_t extensionBit = 1ull << extensionIndex;\n  if ((extensionCacheInitialized_ & extensionBit) == 0) {\n    if (isExtensionSupported(extension)) {\n      extensionCache_ |= extensionBit;\n    }\n    extensionCacheInitialized_ |= extensionBit;\n  }\n\n  return (extensionCache_ & extensionBit) != 0;\n}\n\nbool DeviceFeatureSet::hasFeature(DeviceFeatures feature) const {\n  const uint64_t featureIndex = static_cast<uint64_t>(feature);\n  IGL_DEBUG_ASSERT(featureIndex < 64);\n  const uint64_t featureBit = 1ull << featureIndex;\n  if ((featureCacheInitialized_ & featureBit) == 0) {\n    if (isFeatureSupported(feature)) {\n      featureCache_ |= featureBit;\n    }\n    featureCacheInitialized_ |= featureBit;\n  }\n\n  return (featureCache_ & featureBit) != 0;\n}\n\nbool DeviceFeatureSet::hasInternalFeature(InternalFeatures feature) const {\n  const uint32_t featureIndex = static_cast<uint32_t>(feature);\n  IGL_DEBUG_ASSERT(featureIndex < 32);\n  const uint32_t featureBit = 1u << featureIndex;\n  if ((internalFeatureCacheInitialized_ & featureBit) == 0) {\n    if (isInternalFeatureSupported(feature)) {\n      internalFeatureCache_ |= featureBit;\n    }\n    internalFeatureCacheInitialized_ |= featureBit;\n  }\n\n  return (internalFeatureCache_ & featureBit) != 0;\n}\n\nbool DeviceFeatureSet::hasTextureFeature(TextureFeatures feature) const {\n  const uint64_t featureIndex = static_cast<uint64_t>(feature);\n  IGL_DEBUG_ASSERT(featureIndex < 64);\n  const uint64_t featureBit = 1ull << featureIndex;\n  if ((textureFeatureCacheInitialized_ & featureBit) == 0) {\n    if (isTextureFeatureSupported(feature)) {\n      textureFeatureCache_ |= featureBit;\n    }\n    textureFeatureCacheInitialized_ |= featureBit;\n  }\n\n  return (textureFeatureCache_ & featureBit) != 0;\n}\n\nbool DeviceFeatureSet::hasRequirement(DeviceRequirement requirement) const {\n  switch (requirement) {\n  case DeviceRequirement::ExplicitBindingExtReq:\n    return !usesOpenGLES() && !hasDesktopVersion(*this, GLVersion::v4_2);\n\n  case DeviceRequirement::StandardDerivativeExtReq:\n\n    // https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/fwidth.xhtml\n    // On desktop GL derivatives were supported from 2.0\n    // no need for extension\n\n    // GL_OES_standard_derivatives extension required only for versions prior to ES 3.0\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case DeviceRequirement::TextureArrayExtReq:\n    // Array textures were introduced in OpenGL 3.0. Before OpenGL 3.0, they can be supported via\n    // `GL_EXT_texture_array`\n    return !usesOpenGLES() && !hasDesktopVersion(*this, GLVersion::v3_0);\n\n  case DeviceRequirement::TextureFormatRGExtReq:\n    // If we are running in on a platform that supports OpenGL ES 3.0 (which has GL_RED/GL_RG)\n    // we can check if our context is using ES 3.0, otherwise fall back to `GL_EXT_texture_rg`\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case DeviceRequirement::ShaderTextureLodExtReq:\n    // Desktop GL\n    // https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureLod.xhtml\n    // textureLod() was introduced in GLSL 1.3 (which corresponds to OpenGL 3.0)\n    // So if we are running on anything lower than OpenGL 3.0, we will need the extension\n\n    // GL_EXT_shader_texture_lod extension required only for versions prior to ES 3.0\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n    return !hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES);\n  }\n  return false;\n}\n\nbool DeviceFeatureSet::hasInternalRequirement(InternalRequirement requirement) const {\n  switch (requirement) {\n  case InternalRequirement::ColorTexImageRgb5A1Unsized:\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case InternalRequirement::ColorTexImageRgb10A2Unsized:\n    return !hasTextureFeature(TextureFeatures::ColorRenderbufferRgb10A2) &&\n           hasExtension(Extensions::TextureType2101010Rev);\n\n  case InternalRequirement::ColorTexImageRgba4Unsized:\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES) &&\n           !hasExtension(Extensions::RequiredInternalFormat);\n\n  case InternalRequirement::ColorTexImageRgbApple422Unsized:\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case InternalRequirement::DebugMessageExtReq:\n    return !hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_2_ES);\n\n  case InternalRequirement::DebugMessageCallbackExtReq:\n    return !hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_2_ES);\n\n  case InternalRequirement::DebugLabelExtEnumsReq:\n    // GL_EXT_debug_label requires extension-specific enums for some object types\n    return hasInternalRequirement(InternalRequirement::DebugLabelExtReq) &&\n           !hasExtension(Extensions::Debug);\n\n  case InternalRequirement::DebugLabelExtReq:\n    return !hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_2_ES);\n\n  case InternalRequirement::DrawBuffersExtReq:\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case InternalRequirement::Depth24Stencil8Unsized:\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case InternalRequirement::Depth32Unsized:\n    return hasExtension(Extensions::DepthTexture);\n\n  case InternalRequirement::FramebufferBlitExtReq:\n    // GL_ARB_framebuffer_object also includes glBlitFramebuffer so no need to use\n    // BlitFramebufferEXT if it is present.\n    return !hasDesktopOrESVersion(*this, GLVersion::v3_0, GLVersion::v3_0_ES) &&\n           !hasExtension(Extensions::FramebufferObject);\n\n  case InternalRequirement::InvalidateFramebufferExtReq:\n    return !hasDesktopOrESVersion(*this, GLVersion::v4_3, GLVersion::v3_0_ES) &&\n           !hasExtension(Extensions::InvalidateSubdata);\n\n  case InternalRequirement::MapBufferExtReq:\n    // OpenGL ES does not include MapBuffer\n    return usesOpenGLES();\n\n  case InternalRequirement::MapBufferRangeExtReq:\n    // OpenGL ES 2 does not include MapBufferRange\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case InternalRequirement::MultiSampleExtReq:\n    // OpenGL ES has various extensions before 3.0 that are required, and\n    // GL_IMG_multisampled_render_to_texture uses different enum values than later standard\n    // versions.\n    return !(hasDesktopVersion(*this, GLVersion::v3_0) ||\n             hasExtension(Extensions::FramebufferObject) ||\n             hasESVersion(*this, GLVersion::v3_0_ES));\n\n  case InternalRequirement::ShaderImageLoadStoreExtReq:\n    return !usesOpenGLES() && !hasDesktopVersion(*this, GLVersion::v4_2);\n\n  case InternalRequirement::SyncExtReq:\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case InternalRequirement::SwizzleAlphaTexturesReq:\n\n    return hasDesktopVersion(*this, GLVersion::v3_0);\n\n  case InternalRequirement::TexStorageExtReq:\n    return !hasDesktopOrESVersionOrExtension(\n        *this, GLVersion::v4_2, GLVersion::v3_0_ES, \"GL_ARB_texture_storage\");\n\n  case InternalRequirement::Texture3DExtReq:\n    return !hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES);\n\n  case InternalRequirement::TextureHalfFloatExtReq:\n    // GL_OES_texture_half_float extension uses different enum values for GL_HALF_FLOAT_OES than\n    // GL_HALF_FLOAT.\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case InternalRequirement::UnmapBufferExtReq:\n    // OpenGL ES 2 does not include UnmapBuffer\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case InternalRequirement::VertexArrayObjectExtReq:\n    return usesOpenGLES() && !hasESVersion(*this, GLVersion::v3_0_ES);\n\n  case InternalRequirement::VertexAttribDivisorExtReq:\n    return !hasDesktopOrESVersion(*this, GLVersion::v3_3, GLVersion::v3_0_ES);\n  }\n  return false;\n}\n\nbool DeviceFeatureSet::getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const {\n  GLint tsize = 0;\n  switch (featureLimits) {\n  case DeviceFeatureLimits::MaxTextureDimension1D2D:\n    glContext_.getIntegerv(GL_MAX_TEXTURE_SIZE, &tsize);\n    result = (size_t)tsize;\n    return true;\n\n  case DeviceFeatureLimits::MaxCubeMapDimension:\n    glContext_.getIntegerv(GL_MAX_CUBE_MAP_TEXTURE_SIZE, &tsize);\n    result = (size_t)tsize;\n    return true;\n\n  case DeviceFeatureLimits::MaxVertexUniformVectors:\n    result = getMaxVertexUniforms();\n    return true;\n\n  case DeviceFeatureLimits::MaxFragmentUniformVectors:\n    result = getMaxFragmentUniforms();\n    return true;\n\n  case DeviceFeatureLimits::MaxMultisampleCount:\n    if (hasFeature(DeviceFeatures::MultiSample)) {\n      if (hasInternalRequirement(InternalRequirement::MultiSampleExtReq) &&\n          hasExtension(Extensions::MultiSampleImg)) {\n        glContext_.getIntegerv(GL_MAX_SAMPLES_IMG, &tsize);\n      } else {\n        // Official standards and all other extensions use the same value for GL_MAX_SAMPLES\n        glContext_.getIntegerv(GL_MAX_SAMPLES, &tsize);\n      }\n    }\n    result = (size_t)tsize;\n    return true;\n  case DeviceFeatureLimits::MaxPushConstantBytes:\n    result = 0;\n    return true;\n  case DeviceFeatureLimits::MaxStorageBufferBytes:\n    if (hasFeature(DeviceFeatures::StorageBuffers)) {\n      glContext_.getIntegerv(GL_MAX_SHADER_STORAGE_BLOCK_SIZE, &tsize);\n    }\n    result = tsize;\n    return true;\n  case DeviceFeatureLimits::MaxUniformBufferBytes:\n    if (hasFeature(DeviceFeatures::UniformBlocks)) {\n      glContext_.getIntegerv(GL_MAX_UNIFORM_BLOCK_SIZE, &tsize);\n    }\n    result = (size_t)tsize;\n    return true;\n  case DeviceFeatureLimits::PushConstantsAlignment:\n    result = 0;\n    return true;\n  case DeviceFeatureLimits::ShaderStorageBufferOffsetAlignment:\n    tsize = 256;\n    if (hasFeature(DeviceFeatures::StorageBuffers)) {\n      glContext_.getIntegerv(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, &tsize);\n    }\n    result = (size_t)tsize;\n    return true;\n  case DeviceFeatureLimits::BufferAlignment:\n    result = 16;\n    if (hasFeature(DeviceFeatures::UniformBlocks)) {\n      if (glContext_.isCurrentContext()) {\n        glContext_.getIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &tsize);\n        result = std::max((size_t)tsize, result);\n      }\n    }\n    return true;\n  case DeviceFeatureLimits::BufferNoCopyAlignment:\n    result = 0;\n    return true;\n  case DeviceFeatureLimits::MaxBindBytesBytes:\n    result = 0;\n    return true;\n  case DeviceFeatureLimits::MaxTextureDimension3D:\n    glContext_.getIntegerv(GL_MAX_3D_TEXTURE_SIZE, &tsize);\n    result = (size_t)tsize;\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeX:\n    if (hasFeature(DeviceFeatures::Compute)) {\n      // OpenGL ES 3.1+ and OpenGL 4.3+: use conservative value\n      result = 64;\n    } else {\n      result = 0;\n    }\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeY:\n    if (hasFeature(DeviceFeatures::Compute)) {\n      // OpenGL ES 3.1+ and OpenGL 4.3+: use conservative value\n      result = 64;\n    } else {\n      result = 0;\n    }\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeZ:\n    if (hasFeature(DeviceFeatures::Compute)) {\n      // OpenGL ES 3.1+ and OpenGL 4.3+: use conservative value\n      result = 64;\n    } else {\n      result = 0;\n    }\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupInvocations:\n    if (hasFeature(DeviceFeatures::Compute)) {\n#if defined(GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS)\n      glContext_.getIntegerv(GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, &tsize);\n      result = (size_t)tsize;\n#endif\n    } else {\n      result = 0;\n    }\n    return true;\n  // D3D12-specific descriptor heap limits - not applicable to OpenGL\n  case DeviceFeatureLimits::MaxDescriptorHeapCbvSrvUav:\n  case DeviceFeatureLimits::MaxDescriptorHeapSamplers:\n  case DeviceFeatureLimits::MaxDescriptorHeapRtvs:\n  case DeviceFeatureLimits::MaxDescriptorHeapDsvs:\n    result = 0;\n    return false;\n  case DeviceFeatureLimits::MaxVertexInputAttributes:\n    glContext_.getIntegerv(GL_MAX_VERTEX_ATTRIBS, &tsize);\n    result = (size_t)tsize;\n    return true;\n  case DeviceFeatureLimits::MaxColorAttachments:\n    glContext_.getIntegerv(GL_MAX_COLOR_ATTACHMENTS, &tsize);\n    result = (size_t)tsize;\n    return true;\n  default:\n    IGL_DEBUG_ABORT(\n        \"invalid feature limit query: feature limit query is not implemented or does \"\n        \"not exist\\n\");\n    return false;\n  }\n}\n\n///\n/// Returns the supported capabilities of the selected format.\n/// @param format: The texture format to query\n/// @return a combination of TextureFormatCapabilities flags\nICapabilities::TextureFormatCapabilities DeviceFeatureSet::getTextureFormatCapabilities(\n    TextureFormat format) const {\n  // TODO: Remove this fallback once devices can properly provide a supported format\n  if (format == TextureFormat::S8_UInt_Z32_UNorm &&\n      !hasTextureFeature(TextureFeatures::Depth32FStencil8)) {\n    format = TextureFormat::S8_UInt_Z24_UNorm;\n  }\n  const auto it = textureCapabilityCache_.find(format);\n  if (it != textureCapabilityCache_.end()) {\n    return it->second;\n  }\n\n  const auto sampled = ICapabilities::TextureFormatCapabilityBits::Sampled;\n  const auto attachment = ICapabilities::TextureFormatCapabilityBits::Attachment;\n  const auto storage = hasInternalFeature(InternalFeatures::TexStorage)\n                           ? ICapabilities::TextureFormatCapabilityBits::Storage\n                           : 0;\n  const auto sampledFiltered = ICapabilities::TextureFormatCapabilityBits::SampledFiltered;\n  const auto sampledAttachment = ICapabilities::TextureFormatCapabilityBits::SampledAttachment;\n  const auto unsupported = ICapabilities::TextureFormatCapabilityBits::Unsupported;\n  const auto compressed = ICapabilities::TextureFormatCapabilityBits::Sampled |\n                          (hasTextureFeature(TextureFeatures::TextureCompressionTexStorage)\n                               ? ICapabilities::TextureFormatCapabilityBits::Storage\n                               : 0);\n\n  // Need to define here to properly include storage support.\n  const auto all = sampled | sampledFiltered | storage | attachment | sampledAttachment;\n\n  ICapabilities::TextureFormatCapabilities capabilities = unsupported;\n\n  // First check common formats\n  switch (format) {\n  case TextureFormat::LA_UNorm8:\n  case TextureFormat::L_UNorm8:\n    if (hasTextureFeature(TextureFeatures::ColorTexImageLa)) {\n      capabilities |= sampled | sampledFiltered;\n      if (hasTextureFeature(TextureFeatures::ColorTexStorageLa8)) {\n        capabilities |= storage;\n      }\n    }\n    break;\n  case TextureFormat::A_UNorm8:\n    capabilities |= sampled | sampledFiltered;\n    if (hasTextureFeature(TextureFeatures::ColorTexStorageA8)) {\n      capabilities |= storage;\n    }\n    break;\n  case TextureFormat::RGBA_UNorm8:\n  case TextureFormat::RGBX_UNorm8:\n    capabilities |= sampled | sampledFiltered;\n    if (hasTextureFeature(TextureFeatures::ColorTexStorageRgba8)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorTexImageRgba8)) {\n      capabilities |= sampledAttachment;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorRenderbufferRgba8)) {\n      capabilities |= attachment;\n    }\n    break;\n  case TextureFormat::RG_UNorm8:\n  case TextureFormat::R_UNorm8:\n    if (hasFeature(DeviceFeatures::TextureFormatRG)) {\n      capabilities |= sampled | sampledFiltered;\n      if (hasTextureFeature(TextureFeatures::ColorTexStorageRg8)) {\n        capabilities |= storage;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorTexImageRg8)) {\n        capabilities |= sampledAttachment;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorRenderbufferRg8)) {\n        capabilities |= attachment;\n      }\n    }\n    break;\n  case TextureFormat::BGRA_UNorm8:\n    // EXT_texture_format_BGRA8888 adds support for GL_BGRA as a Renderbuffer format, but this was\n    // in a later revision of the extension. It is not supported on our test devices.\n    if (hasTextureFeature(TextureFeatures::ColorTexImageBgra)) {\n      capabilities |= sampled | sampledFiltered;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorTexImageBgraRgba8)) {\n      capabilities |= sampledAttachment;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorTexStorageBgra8)) {\n      capabilities |= storage;\n    }\n    break;\n  case TextureFormat::RGBA_SRGB:\n    if (hasFeature(DeviceFeatures::SRGB)) {\n      capabilities |= sampled | sampledFiltered;\n      if (hasTextureFeature(TextureFeatures::ColorTexStorageSrgba8)) {\n        capabilities |= storage;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorTexImageSrgba8)) {\n        capabilities |= sampledAttachment;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorRenderbufferSrgba8)) {\n        capabilities |= attachment;\n      }\n    }\n    break;\n  case TextureFormat::BGRA_SRGB:\n    if (hasFeature(DeviceFeatures::SRGB) &&\n        hasTextureFeature(TextureFeatures::ColorTexImageBgraSrgba)) {\n      capabilities |= sampled | sampledFiltered;\n    }\n    break;\n  case TextureFormat::RGBA_F16:\n    if (hasFeature(DeviceFeatures::TextureHalfFloat)) {\n      capabilities |= sampled;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorTexImage16f)) {\n      capabilities |= sampledAttachment;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorTexStorage16f)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorRenderbuffer16f)) {\n      capabilities |= attachment;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorFilterable16f)) {\n      capabilities |= sampledFiltered;\n    }\n    break;\n  case TextureFormat::RGB_F16:\n    // RGB floating point textures are NOT renderable\n    if (hasFeature(DeviceFeatures::TextureHalfFloat)) {\n      capabilities |= sampled;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorRenderbufferRgb16f)) {\n      capabilities |= attachment | sampledAttachment;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorTexStorage16f)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorFilterable16f)) {\n      capabilities |= sampledFiltered;\n    }\n    break;\n  case TextureFormat::RG_F16:\n  case TextureFormat::R_F16:\n    if (hasFeature(DeviceFeatures::TextureFormatRG)) {\n      if (hasFeature(DeviceFeatures::TextureHalfFloat)) {\n        capabilities |= sampled;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorRenderbufferRg16f)) {\n        capabilities |= attachment | sampledAttachment;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorTexStorage16f)) {\n        capabilities |= storage;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorFilterable16f)) {\n        capabilities |= sampledFiltered;\n      }\n    }\n    break;\n  case TextureFormat::RGBA_F32:\n    if (hasFeature(DeviceFeatures::TextureFloat)) {\n      capabilities |= sampled;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorTexStorage32f)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorRenderbuffer32f)) {\n      capabilities |= attachment | sampledAttachment;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorFilterable32f)) {\n      capabilities |= sampledFiltered;\n    }\n    break;\n  case TextureFormat::RGB_F32:\n    // RGB floating point textures are NOT renderable\n    if (hasFeature(DeviceFeatures::TextureFloat)) {\n      capabilities |= sampled;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorTexStorage32f)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorFilterable32f)) {\n      capabilities |= sampledFiltered;\n    }\n    break;\n  case TextureFormat::RG_F32:\n  case TextureFormat::R_F32:\n    if (hasFeature(DeviceFeatures::TextureFormatRG)) {\n      if (hasFeature(DeviceFeatures::TextureFloat)) {\n        capabilities |= sampled;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorTexStorage32f)) {\n        capabilities |= storage;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorRenderbufferRg32f)) {\n        capabilities |= sampledAttachment | attachment;\n      }\n      if (hasTextureFeature(TextureFeatures::ColorFilterable32f)) {\n        capabilities |= sampledFiltered;\n      }\n    }\n    break;\n  case TextureFormat::R_UNorm16:\n  case TextureFormat::RG_UNorm16:\n    if (hasTextureFeature(TextureFeatures::ColorFormatRgUNorm16)) {\n      capabilities |= all;\n    }\n    break;\n  case TextureFormat::RGBA_UNorm16:\n    if (hasTextureFeature(TextureFeatures::ColorFormatRgbaUNorm16)) {\n      capabilities |= all;\n    }\n    break;\n  case TextureFormat::R_UInt16:\n  case TextureFormat::RG_UInt16:\n    if (hasTextureFeature(TextureFeatures::ColorFormatRgInt)) {\n      capabilities |= sampled | storage | attachment;\n    }\n    break;\n  case TextureFormat::R_UInt32:\n    if (hasTextureFeature(TextureFeatures::TextureInteger)) {\n      capabilities |= sampled | storage | attachment | sampledAttachment;\n    }\n    break;\n  case TextureFormat::RGBA_UInt32:\n    if (hasTextureFeature(TextureFeatures::TextureInteger)) {\n      capabilities |= sampled | storage | attachment | sampledAttachment;\n    }\n    break;\n  case TextureFormat::B5G5R5A1_UNorm:\n    if (hasTextureFeature(TextureFeatures::ColorTexImageBgr5A1)) {\n      capabilities |= sampled | sampledFiltered;\n    }\n    break;\n  case TextureFormat::ABGR_UNorm4:\n    capabilities |= all;\n\n    break;\n  case TextureFormat::R4G2B2_UNorm_Apple:\n    if (hasExtension(Extensions::AppleRgb422)) {\n      // GL_APPLE_rgb_422 formats are not color-renderable formats\n      capabilities |= sampled | sampledFiltered;\n      if (hasInternalFeature(InternalFeatures::TexStorage)) {\n        capabilities |= storage;\n      }\n    }\n    break;\n  case TextureFormat::R4G2B2_UNorm_Rev_Apple:\n    if (hasExtension(Extensions::AppleRgb422)) {\n      // GL_APPLE_rgb_422 formats are not color-renderable formats\n      // TexStorage does not support UNSIGNED_SHORT_8_8_REV_APPLE\n      capabilities |= sampled | sampledFiltered;\n    }\n    break;\n  case TextureFormat::R5G5B5A1_UNorm:\n    capabilities |= sampled | sampledFiltered | storage;\n    if (hasInternalFeature(InternalFeatures::FramebufferObject)) {\n      capabilities |= attachment | sampledAttachment;\n    }\n    break;\n  case TextureFormat::BGR10_A2_Unorm:\n    if (hasTextureFeature(TextureFeatures::ColorTexImageBgr10A2)) {\n      capabilities |= sampled | sampledFiltered;\n    }\n    break;\n  case TextureFormat::RGB10_A2_UNorm_Rev:\n    if (hasTextureFeature(TextureFeatures::ColorTexImageRgb10A2)) {\n      capabilities |= sampled | sampledFiltered;\n      if (!hasInternalRequirement(InternalRequirement::ColorTexImageRgb10A2Unsized)) {\n        capabilities |= sampledAttachment;\n      }\n    }\n    if (hasTextureFeature(TextureFeatures::ColorTexStorageRgb10A2)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::ColorRenderbufferRgb10A2)) {\n      capabilities |= attachment;\n    }\n    break;\n  case TextureFormat::RGB10_A2_Uint_Rev:\n    if (hasTextureFeature(TextureFeatures::ColorFormatRgb10A2UI)) {\n      capabilities |= sampled | storage | attachment | sampledAttachment;\n    }\n    break;\n  case TextureFormat::BGRA_UNorm8_Rev:\n    if (hasTextureFeature(TextureFeatures::TextureTypeUInt8888Rev)) {\n      capabilities |= sampled | sampledFiltered;\n    }\n    break;\n  case TextureFormat::B5G6R5_UNorm:\n    // Unsupported\n    break;\n  case TextureFormat::Z_UNorm16:\n    if (hasTextureFeature(TextureFeatures::DepthTexImage)) {\n      capabilities |= sampled;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthTexImage16)) {\n      capabilities |= sampledAttachment;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthTexStorage16)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthRenderbuffer16)) {\n      capabilities |= attachment;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthFilterable)) {\n      capabilities |= sampledFiltered;\n    }\n    break;\n  case TextureFormat::Z_UNorm24:\n    if (hasTextureFeature(TextureFeatures::DepthTexImage24)) {\n      capabilities |= sampled | sampledAttachment;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthTexStorage24)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthRenderbuffer24)) {\n      capabilities |= attachment;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthFilterable)) {\n      capabilities |= sampledFiltered;\n    }\n\n    // TODO: Remove these fallback once devices can properly provide a supported format\n    if (hasTextureFeature(TextureFeatures::DepthTexImage32)) {\n      capabilities |= sampled | sampledAttachment;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthTexStorage32)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthRenderbuffer32)) {\n      capabilities |= attachment;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthFilterable)) {\n      capabilities |= sampledFiltered;\n    }\n    break;\n  case TextureFormat::Z_UNorm32:\n    if (hasTextureFeature(TextureFeatures::DepthTexImage32)) {\n      capabilities |= sampled | sampledAttachment;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthTexStorage32)) {\n      capabilities |= storage;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthRenderbuffer32)) {\n      capabilities |= attachment;\n    }\n    if (hasTextureFeature(TextureFeatures::DepthFilterable)) {\n      capabilities |= sampledFiltered;\n    }\n    break;\n  case TextureFormat::S8_UInt_Z24_UNorm:\n    if (hasTextureFeature(TextureFeatures::Depth24Stencil8)) {\n      capabilities |= sampled | attachment | sampledAttachment;\n      if (hasInternalFeature(InternalFeatures::TexStorage)) {\n        capabilities |= storage;\n      }\n    }\n    break;\n  case TextureFormat::S8_UInt_Z32_UNorm:\n    if (hasTextureFeature(TextureFeatures::Depth32FStencil8)) {\n      capabilities |= sampled | attachment | sampledAttachment;\n      if (hasInternalFeature(InternalFeatures::TexStorage)) {\n        capabilities |= storage;\n      }\n    }\n    break;\n  case TextureFormat::S_UInt8:\n    if (hasTextureFeature(TextureFeatures::StencilTexture8)) {\n      capabilities |= sampled | storage;\n    }\n    capabilities |= attachment;\n    break;\n\n  case TextureFormat::RGBA_ASTC_4x4:\n  case TextureFormat::SRGB8_A8_ASTC_4x4:\n  case TextureFormat::RGBA_ASTC_5x4:\n  case TextureFormat::SRGB8_A8_ASTC_5x4:\n  case TextureFormat::RGBA_ASTC_5x5:\n  case TextureFormat::SRGB8_A8_ASTC_5x5:\n  case TextureFormat::RGBA_ASTC_6x5:\n  case TextureFormat::SRGB8_A8_ASTC_6x5:\n  case TextureFormat::RGBA_ASTC_6x6:\n  case TextureFormat::SRGB8_A8_ASTC_6x6:\n  case TextureFormat::RGBA_ASTC_8x5:\n  case TextureFormat::SRGB8_A8_ASTC_8x5:\n  case TextureFormat::RGBA_ASTC_8x6:\n  case TextureFormat::SRGB8_A8_ASTC_8x6:\n  case TextureFormat::RGBA_ASTC_8x8:\n  case TextureFormat::SRGB8_A8_ASTC_8x8:\n  case TextureFormat::RGBA_ASTC_10x5:\n  case TextureFormat::SRGB8_A8_ASTC_10x5:\n  case TextureFormat::RGBA_ASTC_10x6:\n  case TextureFormat::SRGB8_A8_ASTC_10x6:\n  case TextureFormat::RGBA_ASTC_10x8:\n  case TextureFormat::SRGB8_A8_ASTC_10x8:\n  case TextureFormat::RGBA_ASTC_10x10:\n  case TextureFormat::SRGB8_A8_ASTC_10x10:\n  case TextureFormat::RGBA_ASTC_12x10:\n  case TextureFormat::SRGB8_A8_ASTC_12x10:\n  case TextureFormat::RGBA_ASTC_12x12:\n  case TextureFormat::SRGB8_A8_ASTC_12x12:\n    if (hasTextureFeature(TextureFeatures::TextureCompressionAstc)) {\n      capabilities |= compressed;\n    }\n    break;\n  case TextureFormat::RGBA_BC7_UNORM_4x4:\n  case TextureFormat::RGBA_BC7_SRGB_4x4:\n    if (hasTextureFeature(TextureFeatures::TextureCompressionBptc)) {\n      capabilities |= compressed;\n    }\n    break;\n  case TextureFormat::RGBA_PVRTC_2BPPV1:\n  case TextureFormat::RGB_PVRTC_2BPPV1:\n  case TextureFormat::RGBA_PVRTC_4BPPV1:\n  case TextureFormat::RGB_PVRTC_4BPPV1:\n    if (hasTextureFeature(TextureFeatures::TextureCompressionPvrtc)) {\n      capabilities |= compressed;\n    }\n    break;\n  case TextureFormat::RGB8_ETC1:\n    if (hasTextureFeature(TextureFeatures::TextureCompressionEtc1)) {\n      capabilities |= compressed;\n    }\n    break;\n  case TextureFormat::RGB8_ETC2:\n  case TextureFormat::SRGB8_ETC2:\n  case TextureFormat::RGB8_Punchthrough_A1_ETC2:\n  case TextureFormat::SRGB8_Punchthrough_A1_ETC2:\n  case TextureFormat::RGBA8_EAC_ETC2:\n  case TextureFormat::SRGB8_A8_EAC_ETC2:\n  case TextureFormat::RG_EAC_UNorm:\n  case TextureFormat::RG_EAC_SNorm:\n  case TextureFormat::R_EAC_UNorm:\n  case TextureFormat::R_EAC_SNorm:\n    if (hasTextureFeature(TextureFeatures::TextureCompressionEtc2Eac)) {\n      capabilities |= compressed;\n    }\n    break;\n\n  case TextureFormat::Invalid:\n  case TextureFormat::YUV_NV12:\n  case TextureFormat::YUV_420p:\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  default:\n    // We are relying on the fact that TextureFormatCapabilities::Unsupported is 0\n    return textureCapabilityCache_[format];\n  };\n\n  textureCapabilityCache_[format] = capabilities;\n  return capabilities;\n}\n\nuint32_t DeviceFeatureSet::getMaxVertexUniforms() const {\n  GLint tsize = 0;\n  // MaxVertexUniformVectors is the maximum number of 4-element vectors that can be passed as\n  // uniform to a vertex shader. All uniforms are 4-element aligned, a single uniform counts at\n  // least as one 4-element vector.\n  // GL_MAX_VERTEX_UNIFORM_COMPONENTS available on Desktop OpenGL 2.0+ and on OpenGL ES 3.0+.\n  // GL_MAX_VERTEX_UNIFORM_VECTORS is available on Desktop OpenGL 3.0+ and on OpenGL ES 2.0+.\n  // GL_MAX_VERTEX_UNIFORM_VECTORS is equal to GL_MAX_VERTEX_UNIFORM_COMPONENTS / 4.\n  if (hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES)) {\n    glContext_.getIntegerv(GL_MAX_VERTEX_UNIFORM_COMPONENTS, &tsize);\n    tsize /= 4;\n  } else {\n    glContext_.getIntegerv(GL_MAX_VERTEX_UNIFORM_VECTORS, &tsize);\n  }\n  return static_cast<uint32_t>(tsize);\n}\n\nuint32_t DeviceFeatureSet::getMaxFragmentUniforms() const {\n  GLint tsize = 0;\n  // PLease see comments above in getMaxVertexUniforms\n  if (hasDesktopOrESVersion(*this, GLVersion::v2_0, GLVersion::v3_0_ES)) {\n    glContext_.getIntegerv(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, &tsize);\n    tsize /= 4;\n  } else {\n    glContext_.getIntegerv(GL_MAX_FRAGMENT_UNIFORM_VECTORS, &tsize);\n  }\n  return static_cast<uint32_t>(tsize);\n}\n\nuint32_t DeviceFeatureSet::getMaxComputeUniforms() const {\n  if (hasFeature(DeviceFeatures::Compute)) {\n    GLint tsize = 0;\n    glContext_.getIntegerv(GL_MAX_COMPUTE_UNIFORM_COMPONENTS, &tsize);\n    return static_cast<uint32_t>(tsize);\n  }\n  return 0;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/DeviceFeatureSet.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <string>\n#include <unordered_map>\n#include <unordered_set>\n#include <igl/DeviceFeatures.h>\n#include <igl/Texture.h>\n#include <igl/opengl/Version.h>\n\nnamespace igl::opengl {\n\nclass IContext;\n\n// clang-format off\nenum class Extensions {\n  AppleRgb422,                // GL_APPLE_rgb_422 is supported\n  BindlessTextureArb,         // GL_ARB_bindless_texture is supported\n  BindlessTextureNv,          // GL_NV_bindless_texture is supported\n  Debug,                      // GL_KHR_debug is supported\n  DebugLabel,                 // GL_EXT_debug_label is supported\n  DebugMarker,                // GL_EXT_debug_marker is supported\n  Depth24,                    // GL_OES_depth24 is supported\n  Depth32,                    // GL_OES_depth32 is supported\n  DepthTexture,               // GL_OES_depth_texture is supported\n  DiscardFramebuffer,         // GL_EXT_discard_framebuffer is supported\n  Es2Compatibility,           // GL_ARB_ES2_compatibility is supported\n  DrawBuffers,                // GL_EXT_draw_buffers is supported\n  FramebufferBlit,            // GL_EXT_framebuffer_blit is supported\n  FramebufferObject,          // GL_ARB_framebuffer_object is supported\n  InvalidateSubdata,          // GL_ARB_invalidate_subdata is supported\n  MapBuffer,                  // GL_OES_mapbuffer is supported\n  MapBufferRange,             // GL_EXT_map_buffer_range is supported\n  MultiSampleApple,           // GL_APPLE_framebuffer_multisample is supported\n  MultiSampleExt,             // GL_EXT_multisampled_render_to_texture is supported\n  MultiSampleImg,             // GL_IMG_multisampled_render_to_texture is supported\n  MultiViewMultiSample,       // GL_OVR_multiview_multisampled_render_to_texture is supported\n  PolygonOffsetClamp,         // GL_ARB_polygon_offset_clamp is supported\n  RequiredInternalFormat,     // GL_OES_required_internalformat is supported\n  ShaderImageLoadStore,       // GL_EXT_shader_image_load_store is supported\n  Srgb,                       // GL_EXT_sRGB is supported\n  SrgbWriteControl,           // GL_EXT_sRGB_write_control is supported\n  Sync,                       // GL_APPLE_sync is supported\n  TexStorage,                 // GL_EXT_texture_storage is supported\n  Texture3D,                  // GL_OES_texture_3D is supported\n  TextureFormatBgra8888Apple, // GL_EXT_texture_format_BGRA8888 is supported\n  TextureFormatBgra8888Ext,   // GL_APPLE_texture_format_BGRA8888 is supported\n  TextureFloat,               // GL_ARB_texture_float is supported\n  TextureHalfFloat,           // GL_OES_texture_half_float is supported\n  TextureRgArb,               // GL_ARB_texture_rg is supported\n  TextureRgExt,               // GL_EXT_texture_rg is supported\n  TextureSrgb,                // GL_EXT_texture_sRGB is supported\n  TextureType2101010Rev,  // GL_EXT_texture_type_2_10_10_10_REV is supporteds\n  TimerQuery,                 // GL_EXT_timer_query is supported\n  VertexArrayObject,          // GL_OES_vertex_array_object is supported\n  VertexAttribDivisor,        // GL_NV_instanced_arrays is supported\n};\n// clang-format on\n\n// clang-format off\nenum class InternalFeatures {\n  ClearBufferfv,             // glClearBufferfv is supported\n  ClearDepthf,               // glClearDepthf is supported\n  DebugLabel,                // Debug labels on objects are supported\n  DebugMessage,              // Debug messages and group markers are supported\n  DebugMessageCallback,      // Debug message callbacks are supported\n  DrawArraysIndirect,        // glDrawArraysIndirect is supported\n  MultiDrawIndirect,         // glMultiDrawArraysIndirect is supported\n  FramebufferBlit,           // BlitFramebuffer is supported\n  FramebufferObject,         // Framebuffer objects are supported\n  GetStringi,                // GetStringi is supported\n  InvalidateFramebuffer,     // glInvalidateFramebuffer is supported\n  MapBuffer,                 // glMapBuffer is supported\n  PackRowLength,             // GL_PACK_ROW_LENGTH is supported with glPixelStorei\n  PixelBufferObject,         // PBOs are available\n  PolygonFillMode,           // glPolygonFillMode is supported\n  ProgramInterfaceQuery,     // Querying info about shader program interfaces is supported\n  SeamlessCubeMap,           // GL_TEXTURE_CUBE_MAP_SEAMLESS is supported\n  ShaderImageLoadStore,      // Shader image load/store is supported\n  Sync,                      // Sync objects are supported\n  TexStorage,                // glTexStorage* is available\n  TextureCompare,            // GL_TEXTURE_COMPARE_MODE and GL_TEXTURE_COMPARE_FUNC are supported\n  UnmapBuffer,               // glUnmapBuffer is supported\n  UnpackRowLength,           // GL_UNPACK_ROW_LENGTH is supported with glPixelStorei\n  VertexArrayObject,         // VAOS are available\n  VertexAttribDivisor,       // glVertexAttribDivisor is supported\n};\n// clang-format on\n\n// clang-format off\nenum class TextureFeatures {\n  ColorFilterable16f,           // XXX16F textures can use GL_LINEAR filtering\n  ColorFilterable32f,           // XXX32F textures can use GL_LINEAR filtering\n  ColorFormatRgb10A2UI,         // RGB10_A2UI is supported as an internal format\n  ColorFormatRgInt,             // Integer R and RG textures are supported\n  ColorFormatRgUNorm16,         // UNorm 16 R and RG textures are supported\n  ColorFormatRgbaUNorm16,       // UNorm 16 RGBA textures are supported\n  ColorRenderbuffer16f,         // RenderbufferStorage supports XXX16F for color targets\n  ColorRenderbuffer32f,         // RenderbufferStorage supports XXX32F for color targets\n  ColorRenderbufferRg16f,       // RenderbufferStorage supports Rg16F for color targets\n  ColorRenderbufferRg32f,       // RenderbufferStorage supports Rg32F for color targets\n  ColorRenderbufferRg8,         // RenderbufferStorage supports R8 and RG8\n  ColorRenderbufferRgb10A2,     // RenderbufferStorage supports RGB10_A2\n  ColorRenderbufferRgb16f,      // RenderbufferStorage supports RGB16F for color targets\n  ColorRenderbufferRgba8,       // RenderbufferStorage supports RGB8 and RGBA8\n  ColorRenderbufferSrgba8,      // RenderbufferStorage supports SRGBA\n  ColorTexImage16f,             // TexImage supports XXX16F for color targets\n  ColorTexImage32f,             // TexImage supports XXX32F for color targets\n  ColorTexImageBgr10A2,         // TexImage supports RGB10_A2 with format BGRA\n  ColorTexImageBgr5A1,          // TexImage supports RGB5_A1 with format BGRA\n  ColorTexImageBgra,            // TexImage supports BGRA\n  ColorTexImageBgraRgba8,       // TexImage supports BGRA as a format with RGBA8 as an internalformat\n  ColorTexImageBgraSrgba,       // TexImage supports BGRA as a format with SRGB_ALPHA or SRGB8_ALPHA8 as an internalformat\n  ColorTexImageA8,              // TexImage supports ALPHA8\n  ColorTexImageLa,              // TexImage supports LUMINANCE and LUMINANCE_ALPHA\n  ColorTexImageLa8,             // TexImage supports LUMINANCE8 and LUMINANCE8_ALPHA8\n  ColorTexImageRg8,             // TexImage supports R8 and RG8\n  ColorTexImageRgb10A2,         // TexImage supports RGB10_A2 or RGBA + UNSIGNED_INT_2_10_10_10_REV\n  ColorTexImageRgba8,           // TexImage supports RGB8 and RGBA8\n  ColorTexImageSrgba8,          // TexImage supports SRGBA\n  ColorTexStorage16f,           // TexStorage supports XXX16F for color targets\n  ColorTexStorage32f,           // TexStorage supports XXX32F for color targets\n  ColorTexStorageA8,            // TexStorage supports ALPHA8 (or R8 w/ swizzle)\n  ColorTexStorageBgra8,         // TexStorage supports BGRA8_EXT\n  ColorTexStorageLa8,           // TexStorage supports LUMINANCE8 and LUMINANCE8_ALPHA8\n  ColorTexStorageRg8,           // TexStorage supports R8 and RG8\n  ColorTexStorageRgb10A2,       // TexStorage supports RGB10_A2\n  ColorTexStorageRgba8,         // TexStorage supports RGB8 and RGBA8\n  ColorTexStorageSrgba8,        // TexStorage supports SRGB8_ALPHA8\n  Depth24Stencil8,              // TextureBuffer and TextureTarget can use DEPTH24_STENCIL8\n  Depth32FStencil8,             // TextureBuffer and TextureTarget can use DEPTH32F_STENCIL8\n  DepthFilterable,              // Depth textures are filterable\n  DepthRenderbuffer16,          // RenderbufferStorage supports DEPTH_COMPONENT16\n  DepthRenderbuffer24,          // RenderbufferStorage supports DEPTH_COMPONENT24\n  DepthRenderbuffer32,          // RenderbufferStorage supports DEPTH_COMPONENT32\n  DepthTexImage,                // TexImage supports depth formats\n  DepthTexImage16,              // TextureBuffer can use DEPTH_COMPONENT16\n  DepthTexImage24,              // TextureBuffer can use DEPTH_COMPONENT24\n  DepthTexImage32,              // TextureBuffer can use DEPTH_COMPONENT32\n  DepthTexStorage16,            // TextureBuffer can use DEPTH_COMPONENT16\n  DepthTexStorage24,            // TextureBuffer can use DEPTH_COMPONENT24\n  DepthTexStorage32,            // TextureBuffer can use DEPTH_COMPONENT32\n  StencilTexture8,              // TextureBuffer can use STENCIL_TEXTURE8\n  TextureCompressionAstc,       // Adaptive scalable texture compression is supported\n  TextureCompressionBptc,       // DirectX BPTC texture compression is supp\n  TextureCompressionEtc1,       // Ericsson texture compression is supported\n  TextureCompressionEtc2Eac,    // ETC2/EAC texture compression is supportedorted\n  TextureCompressionPvrtc,      // PowerVR Texture compression is supported\n  TextureCompressionTexImage,   // TexImage can be used to initialize compressed textures\n  TextureCompressionTexStorage, // TexStorage can be used to initialize compressed textures\n  TextureInteger,               // Integer textures are supported\n  TextureTypeUInt8888Rev,       // GL_UNSIGNED_INT_8_8_8_8_REV is supported\n};\n// clang-format on\n\nenum class InternalRequirement {\n  ColorTexImageRgb10A2Unsized,\n  ColorTexImageRgb5A1Unsized,\n  ColorTexImageRgba4Unsized,\n  ColorTexImageRgbApple422Unsized,\n  DebugMessageExtReq,\n  DebugMessageCallbackExtReq,\n  DebugLabelExtEnumsReq,\n  DebugLabelExtReq,\n  Depth24Stencil8Unsized,\n  Depth32Unsized,\n  DrawBuffersExtReq,\n  FramebufferBlitExtReq,\n  InvalidateFramebufferExtReq,\n  MapBufferExtReq,\n  MapBufferRangeExtReq,\n  MultiSampleExtReq,\n  ShaderImageLoadStoreExtReq,\n  SyncExtReq,\n  SwizzleAlphaTexturesReq,\n  TexStorageExtReq,\n  Texture3DExtReq,\n  TextureHalfFloatExtReq,\n  UnmapBufferExtReq,\n  VertexArrayObjectExtReq,\n  VertexAttribDivisorExtReq,\n};\n\nclass DeviceFeatureSet final {\n public:\n  explicit DeviceFeatureSet(IContext& glContext);\n\n  [[nodiscard]] static bool usesOpenGLES() noexcept;\n\n  void initializeVersion(GLVersion version);\n  void initializeExtensions(std::string extensions,\n                            std::unordered_set<std::string> supportedExtensions);\n\n  // @fb-only\n  [[nodiscard]] GLVersion getGLVersion() const noexcept;\n  [[nodiscard]] ShaderVersion getShaderVersion() const;\n  [[nodiscard]] BackendVersion getBackendVersion() const;\n\n  bool isSupported(const std::string& extensionName) const;\n\n  bool hasExtension(Extensions extension) const;\n  bool hasFeature(DeviceFeatures feature) const;\n  bool hasInternalFeature(InternalFeatures feature) const;\n  bool hasTextureFeature(TextureFeatures feature) const;\n\n  bool hasRequirement(DeviceRequirement requirement) const;\n  bool hasInternalRequirement(InternalRequirement requirement) const;\n\n  bool getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const;\n\n  ICapabilities::TextureFormatCapabilities getTextureFormatCapabilities(TextureFormat format) const;\n\n  uint32_t getMaxVertexUniforms() const;\n  uint32_t getMaxFragmentUniforms() const;\n  uint32_t getMaxComputeUniforms() const;\n\n private:\n  ICapabilities::TextureFormatCapabilities getCompressedTextureCapabilities() const;\n  bool isExtensionSupported(Extensions extension) const;\n  bool isFeatureSupported(DeviceFeatures feature) const;\n  bool isInternalFeatureSupported(InternalFeatures feature) const;\n  bool isTextureFeatureSupported(TextureFeatures feature) const;\n\n  std::unordered_set<std::string> supportedExtensions_;\n  std::string extensions_;\n  mutable std::unordered_map<TextureFormat, ICapabilities::TextureFormatCapabilities>\n      textureCapabilityCache_;\n  mutable uint64_t extensionCache_ = 0;\n  mutable uint64_t extensionCacheInitialized_ = 0;\n  mutable uint64_t featureCache_ = 0;\n  mutable uint64_t featureCacheInitialized_ = 0;\n  mutable uint32_t internalFeatureCache_ = 0;\n  mutable uint32_t internalFeatureCacheInitialized_ = 0;\n  mutable uint64_t textureFeatureCache_ = 0;\n  mutable uint64_t textureFeatureCacheInitialized_ = 0;\n  IContext& glContext_;\n  GLVersion version_ = GLVersion::NotAvailable;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/DummyTexture.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n// @fb-only\n\n#include <igl/opengl/Texture.h>\n\nnamespace igl::opengl {\nclass DummyTexture : public ITexture {\n public:\n  explicit DummyTexture(Size size, TextureFormat format = TextureFormat::BGRA_UNorm8) :\n    ITexture(format), size_(size) {}\n  ~DummyTexture() override = default;\n\n  [[nodiscard]] Dimensions getDimensions() const override {\n    return Dimensions{static_cast<uint32_t>(size_.width), static_cast<uint32_t>(size_.height), 1u};\n  }\n\n  [[nodiscard]] uint32_t getNumLayers() const override {\n    return 1;\n  }\n  [[nodiscard]] TextureType getType() const override {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return TextureType::TwoDArray;\n  }\n  [[nodiscard]] TextureDesc::TextureUsage getUsage() const override {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return 0;\n  }\n  [[nodiscard]] uint32_t getSamples() const override {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return 1;\n  }\n  void generateMipmap(ICommandQueue& /* unused */,\n                      const TextureRangeDesc* IGL_NULLABLE /* unused */) const override {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n  void generateMipmap(ICommandBuffer& /* unused */,\n                      const TextureRangeDesc* IGL_NULLABLE /* unused */) const override {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n  [[nodiscard]] uint32_t getNumMipLevels() const override {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return 1;\n  }\n  [[nodiscard]] bool isRequiredGenerateMipmap() const override {\n    return false;\n  }\n  [[nodiscard]] uint64_t getTextureId() const override {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return 0;\n  }\n\n  // IAttachmentInterop interface\n  [[nodiscard]] void* IGL_NULLABLE getNativeImage() const override {\n    return nullptr;\n  }\n  [[nodiscard]] void* IGL_NULLABLE getNativeImageView() const override {\n    return nullptr;\n  }\n  [[nodiscard]] const base::AttachmentInteropDesc& getDesc() const override {\n    attachmentDesc_.width = static_cast<uint32_t>(size_.width);\n    attachmentDesc_.height = static_cast<uint32_t>(size_.height);\n    attachmentDesc_.depth = 1;\n    attachmentDesc_.numLayers = 1;\n    attachmentDesc_.numSamples = 1;\n    attachmentDesc_.numMipLevels = 1;\n    attachmentDesc_.type = base::TextureType::TwoD;\n    attachmentDesc_.format = static_cast<base::TextureFormat>(getFormat());\n    attachmentDesc_.isSampled = false;\n    return attachmentDesc_;\n  }\n\n private:\n  Size size_;\n  mutable base::AttachmentInteropDesc attachmentDesc_;\n};\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Framebuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/Framebuffer.h>\n\n#include <algorithm>\n#include <cstdlib>\n#include <igl/RenderPass.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/DummyTexture.h>\n#include <igl/opengl/GLIncludes.h>\n#if !IGL_PLATFORM_ANDROID\n#include <string>\n#else\n#include <sstream>\n\nnamespace std {\n\n// TODO: Remove once STL in Android NDK supports std::to_string\ntemplate<typename T>\nstring to_string(const T& t) {\n  ostringstream os;\n  os << t;\n  return os.str();\n}\n\n} // namespace std\n\n#endif\n\nnamespace igl::opengl {\n\nnamespace {\n\nResult checkFramebufferStatus(IContext& context, bool read) {\n  auto code = Result::Code::Ok;\n  std::string message;\n  GLenum framebufferTarget = GL_FRAMEBUFFER;\n  if (context.deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    framebufferTarget = read ? GL_READ_FRAMEBUFFER : GL_DRAW_FRAMEBUFFER;\n  }\n  // check that we've created a proper frame buffer\n  const GLenum status = context.checkFramebufferStatus(framebufferTarget);\n  if (status != GL_FRAMEBUFFER_COMPLETE) {\n    code = Result::Code::RuntimeError;\n\n    switch (status) {\n    case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT:\n      message = \"GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT\";\n      break;\n    case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:\n      message = \"GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\";\n      break;\n    case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS:\n      message = \"GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS\";\n      break;\n    case GL_FRAMEBUFFER_UNSUPPORTED:\n      message = \"GL_FRAMEBUFFER_UNSUPPORTED\";\n      break;\n    default:\n      message = \"GL_FRAMEBUFFER unknown error: \" + std::to_string(status);\n      break;\n    }\n  }\n\n  return Result(code, message);\n}\n\nTexture::AttachmentParams toAttachmentParams(const RenderPassDesc::AttachmentDesc& attachment,\n                                             FramebufferMode mode) {\n  Texture::AttachmentParams params{};\n  params.face = attachment.face;\n  params.mipLevel = attachment.mipLevel;\n  params.layer = attachment.layer;\n  params.read = false; // Color attachments are for writing\n  params.stereo = mode == FramebufferMode::Stereo;\n  return params;\n}\n\nTexture::AttachmentParams defaultWriteAttachmentParams(FramebufferMode mode) {\n  Texture::AttachmentParams params{};\n  params.face = 0;\n  params.mipLevel = 0;\n  params.layer = 0;\n  params.read = false;\n  params.stereo = mode == FramebufferMode::Stereo;\n  return params;\n}\n\nTexture::AttachmentParams toReadAttachmentParams(const TextureRangeDesc& range,\n                                                 FramebufferMode mode) {\n  IGL_DEBUG_ASSERT(range.numLayers == 1, \"range.numLayers must be 1.\");\n  IGL_DEBUG_ASSERT(range.numMipLevels == 1, \"range.numMipLevels must be 1.\");\n  IGL_DEBUG_ASSERT(range.numFaces == 1, \"range.numFaces must be 1.\");\n\n  Texture::AttachmentParams params{};\n  params.face = static_cast<uint32_t>(range.face);\n  params.mipLevel = static_cast<uint32_t>(range.mipLevel);\n  params.layer = static_cast<uint32_t>(range.layer);\n  params.read = true;\n  params.stereo = mode == FramebufferMode::Stereo;\n  return params;\n}\n} // namespace\n\nFramebufferBindingGuard::FramebufferBindingGuard(IContext& context) : context_(context) {\n  context_.getIntegerv(GL_RENDERBUFFER_BINDING, reinterpret_cast<GLint*>(&currentRenderbuffer_));\n\n  // Only restore currently bound framebuffer if it's valid\n  if (context.deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    if (checkFramebufferStatus(context, true).isOk()) {\n      context_.getIntegerv(GL_READ_FRAMEBUFFER_BINDING,\n                           reinterpret_cast<GLint*>(&currentReadFramebuffer_));\n    }\n    if (checkFramebufferStatus(context, false).isOk()) {\n      context_.getIntegerv(GL_DRAW_FRAMEBUFFER_BINDING,\n                           reinterpret_cast<GLint*>(&currentDrawFramebuffer_));\n    }\n  } else {\n    if (checkFramebufferStatus(context, false).isOk()) {\n      context_.getIntegerv(GL_FRAMEBUFFER_BINDING, reinterpret_cast<GLint*>(&currentFramebuffer_));\n    }\n  }\n}\n\nFramebufferBindingGuard::~FramebufferBindingGuard() {\n  if (context_.deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    context_.bindFramebuffer(GL_READ_FRAMEBUFFER, currentReadFramebuffer_);\n    context_.bindFramebuffer(GL_DRAW_FRAMEBUFFER, currentDrawFramebuffer_);\n  } else {\n    context_.bindFramebuffer(GL_FRAMEBUFFER, currentFramebuffer_);\n  }\n\n  context_.bindRenderbuffer(GL_RENDERBUFFER, currentRenderbuffer_);\n}\n\n///--------------------------------------\n/// MARK: - Framebuffer\n\nFramebuffer::Framebuffer(IContext& context) : WithContext(context) {}\n\nbool Framebuffer::isSwapchainBound() const {\n  return frameBufferID_ == 0;\n}\n\nvoid Framebuffer::attachAsColor(ITexture& texture,\n                                uint32_t index,\n                                const Texture::AttachmentParams& params) const {\n  static_cast<Texture&>(texture).attachAsColor(index, params);\n  IGL_DEBUG_ASSERT(index >= 0 && index < kNumCachedStates);\n  colorCachedState_[index].updateCache(params.stereo ? FramebufferMode::Stereo\n                                                     : FramebufferMode::Mono,\n                                       params.layer,\n                                       params.face,\n                                       params.mipLevel);\n}\n\nvoid Framebuffer::attachAsDepth(ITexture& texture, const Texture::AttachmentParams& params) const {\n  static_cast<Texture&>(texture).attachAsDepth(params);\n  depthCachedState_.updateCache(params.stereo ? FramebufferMode::Stereo : FramebufferMode::Mono,\n                                params.layer,\n                                params.face,\n                                params.mipLevel);\n}\n\nvoid Framebuffer::attachAsStencil(ITexture& texture,\n                                  const Texture::AttachmentParams& params) const {\n  static_cast<Texture&>(texture).attachAsStencil(params);\n  stencilCachedState_.updateCache(params.stereo ? FramebufferMode::Stereo : FramebufferMode::Mono,\n                                  params.layer,\n                                  params.face,\n                                  params.mipLevel);\n}\n\nvoid Framebuffer::bindBuffer() const {\n  getContext().bindFramebuffer(GL_FRAMEBUFFER, frameBufferID_);\n}\n\nvoid Framebuffer::bindBufferForRead() const {\n  // TODO: enable optimization path\n  if (getContext().deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    getContext().bindFramebuffer(GL_READ_FRAMEBUFFER, frameBufferID_);\n  } else {\n    bindBuffer();\n  }\n}\n\nvoid Framebuffer::copyBytesColorAttachment(ICommandQueue& /* unused */,\n                                           size_t index,\n                                           void* pixelBytes,\n                                           const TextureRangeDesc& range,\n                                           size_t bytesPerRow) const {\n  // Only support attachment 0 because that's what glReadPixels supports\n  if (index != 0) {\n    IGL_DEBUG_ABORT(\"Invalid index: %d\", index);\n    return;\n  }\n  IGL_DEBUG_ASSERT(range.numFaces == 1, \"range.numFaces MUST be 1\");\n  IGL_DEBUG_ASSERT(range.numLayers == 1, \"range.numLayers MUST be 1\");\n  IGL_DEBUG_ASSERT(range.numMipLevels == 1, \"range.numMipLevels MUST be 1\");\n\n  auto itexture = getColorAttachment(index);\n  if (itexture == nullptr) {\n    IGL_DEBUG_ABORT(\"The framebuffer does not have any color attachment at index %d\", index);\n    return;\n  }\n\n  const FramebufferBindingGuard guard(getContext());\n\n  CustomFramebuffer extraFramebuffer(getContext());\n\n  auto& texture = static_cast<Texture&>(*itexture);\n\n  Result ret;\n  FramebufferDesc desc;\n  desc.colorAttachments[0].texture = itexture;\n  extraFramebuffer.initialize(desc, &ret);\n  IGL_DEBUG_ASSERT(ret.isOk(), ret.message.c_str());\n\n  extraFramebuffer.bindBufferForRead();\n  attachAsColor(*itexture, 0, toReadAttachmentParams(range, FramebufferMode::Mono));\n  checkFramebufferStatus(getContext(), true);\n\n  const bool packRowLengthSupported =\n      getContext().deviceFeatures().hasInternalFeature(InternalFeatures::PackRowLength);\n  // The bytesPerRow value is used to decide both the alignment and the row length. We will only use\n  // usePackRowLength when bytesPerRow is set and is a multiple of the block size.\n  const bool usePackRowLength = packRowLengthSupported && bytesPerRow != 0 &&\n                                bytesPerRow % itexture->getProperties().bytesPerBlock == 0;\n\n  if (usePackRowLength) {\n    const int packRowLength =\n        static_cast<int>(bytesPerRow / itexture->getProperties().bytesPerBlock);\n    getContext().pixelStorei(GL_PACK_ROW_LENGTH, packRowLength);\n    getContext().pixelStorei(GL_PACK_ALIGNMENT, 1);\n  } else {\n    const int finalBytesPerRow = bytesPerRow == 0 ? itexture->getProperties().getBytesPerRow(range)\n                                                  : bytesPerRow;\n    if (packRowLengthSupported) {\n      getContext().pixelStorei(GL_PACK_ROW_LENGTH, 0);\n    }\n    getContext().pixelStorei(GL_PACK_ALIGNMENT,\n                             texture.getAlignment(finalBytesPerRow, range.mipLevel, range.width));\n  }\n\n  // Note read out format is based on\n  // (https://www.khronos.org/registry/OpenGL-Refpages/es2.0/xhtml/glReadPixels.xml)\n  // as using GL_RGBA with GL_UNSIGNED_BYTE is the only always supported combination\n  // with glReadPixels.\n  getContext().flush();\n\n  // @fb-only\n  // @fb-only\n  const auto rangeX = static_cast<GLint>(range.x);\n  const auto rangeY = static_cast<GLint>(range.y);\n  const auto rangeWidth = static_cast<GLsizei>(range.width);\n  const auto rangeHeight = static_cast<GLsizei>(range.height);\n  const auto textureFormat = texture.getFormat();\n  // Tests need GL_HALF_FLOAT_OES on iOS and GL_HALF_FLOAT on Android and everything else.\n  const auto kHalfFloatFormat = getContext().deviceFeatures().hasInternalRequirement(\n                                    InternalRequirement::TextureHalfFloatExtReq)\n                                    ? GL_HALF_FLOAT_OES\n                                    : GL_HALF_FLOAT;\n  if (textureFormat == TextureFormat::RGBA_UInt32) {\n    if (IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasTextureFeature(TextureFeatures::TextureInteger))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RGBA_INTEGER, GL_UNSIGNED_INT, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::R_UNorm8) {\n    if (IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFormatRG))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RED, GL_UNSIGNED_BYTE, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::RG_UNorm8) {\n    if (IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFormatRG))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RG, GL_UNSIGNED_BYTE, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::RGBA_F16) {\n    if (IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureHalfFloat))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RGBA, kHalfFloatFormat, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::RGB_F16) {\n    if (IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureHalfFloat))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RGB, kHalfFloatFormat, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::RG_F16) {\n    if (IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureHalfFloat)) &&\n        IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFormatRG))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RG, kHalfFloatFormat, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::R_F16) {\n    if (IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureHalfFloat)) &&\n        IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFormatRG))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RED, kHalfFloatFormat, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::RGBA_F32) {\n    if (IGL_DEBUG_VERIFY(getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFloat))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RGBA, GL_FLOAT, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::RGB_F32) {\n    if (IGL_DEBUG_VERIFY(getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFloat))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RGB, GL_FLOAT, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::RG_F32) {\n    if (IGL_DEBUG_VERIFY(getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFloat)) &&\n        IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFormatRG))) {\n      getContext().readPixels(rangeX, rangeY, rangeWidth, rangeHeight, GL_RG, GL_FLOAT, pixelBytes);\n    }\n  } else if (textureFormat == TextureFormat::R_F32) {\n    if (IGL_DEBUG_VERIFY(getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFloat)) &&\n        IGL_DEBUG_VERIFY(\n            getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureFormatRG))) {\n      getContext().readPixels(\n          rangeX, rangeY, rangeWidth, rangeHeight, GL_RED, GL_FLOAT, pixelBytes);\n    }\n  } else {\n    getContext().readPixels(\n        rangeX, rangeY, rangeWidth, rangeHeight, GL_RGBA, GL_UNSIGNED_BYTE, pixelBytes);\n  }\n\n  // Reset the GL_PACK_ROW_LENGTH\n  if (usePackRowLength) {\n    getContext().pixelStorei(GL_PACK_ROW_LENGTH, 0);\n  }\n  // Reset the GL_PACK_ALIGNMENT (default value for GL_PACK_ALIGNMENT is 4)\n  getContext().pixelStorei(GL_PACK_ALIGNMENT, 4);\n\n  getContext().checkForErrors(nullptr, 0);\n  auto error = getContext().getLastError();\n  IGL_DEBUG_ASSERT(error.isOk(), error.message.c_str());\n}\n\nvoid Framebuffer::copyBytesDepthAttachment(ICommandQueue& /* unused */,\n                                           void* /*pixelBytes*/,\n                                           const TextureRangeDesc& /*range*/,\n                                           size_t /*bytesPerRow*/) const {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid Framebuffer::copyBytesStencilAttachment(ICommandQueue& /* unused */,\n                                             void* /*pixelBytes*/,\n                                             const TextureRangeDesc& /*range*/,\n                                             size_t /*bytesPerRow*/) const {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid Framebuffer::copyTextureColorAttachment(ICommandQueue& /*cmdQueue*/,\n                                             size_t index,\n                                             std::shared_ptr<ITexture> destTexture,\n                                             const TextureRangeDesc& range) const {\n  // Only support attachment 0 because that's what glCopyTexImage2D supports\n  if (index != 0 || getColorAttachment(index) == nullptr) {\n    IGL_DEBUG_ABORT(\"Invalid index: %d\", index);\n    return;\n  }\n\n  const FramebufferBindingGuard guard(getContext());\n\n  bindBufferForRead();\n\n  auto& dest = static_cast<Texture&>(*destTexture);\n  dest.bind();\n\n  getContext().copyTexSubImage2D(GL_TEXTURE_2D,\n                                 0,\n                                 0,\n                                 0,\n                                 static_cast<GLint>(range.x),\n                                 static_cast<GLint>(range.y),\n                                 static_cast<GLsizei>(range.width),\n                                 static_cast<GLsizei>(range.height));\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nbool Framebuffer::CachedState::needsUpdate(FramebufferMode newMode,\n                                           uint8_t newLayer,\n                                           uint8_t newFace,\n                                           uint8_t newMipLevel) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  return mode != newMode || layer != newLayer || face != newFace || mipLevel != newMipLevel;\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nvoid Framebuffer::CachedState::updateCache(FramebufferMode newMode,\n                                           uint8_t newLayer,\n                                           uint8_t newFace,\n                                           uint8_t newMipLevel) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  mode = newMode;\n  layer = newLayer;\n  face = newFace;\n  mipLevel = newMipLevel;\n}\n\n///--------------------------------------\n/// MARK: - CustomFramebuffer\n\nCustomFramebuffer::~CustomFramebuffer() {\n  if (frameBufferID_ != 0) {\n    getContext().deleteFramebuffers(1, &frameBufferID_);\n    frameBufferID_ = 0;\n  }\n}\n\nstd::vector<size_t> CustomFramebuffer::getColorAttachmentIndices() const {\n  std::vector<size_t> indices;\n\n  for (size_t i = 0; i != IGL_COLOR_ATTACHMENTS_MAX; i++) {\n    if (renderTarget_.colorAttachments[i].texture ||\n        renderTarget_.colorAttachments[i].resolveTexture) {\n      indices.push_back(i);\n    }\n  }\n\n  return indices;\n}\n\nstd::shared_ptr<ITexture> CustomFramebuffer::getColorAttachment(size_t index) const {\n  IGL_DEBUG_ASSERT(index < IGL_COLOR_ATTACHMENTS_MAX);\n  return renderTarget_.colorAttachments[index].texture;\n}\n\nstd::shared_ptr<ITexture> CustomFramebuffer::getResolveColorAttachment(size_t index) const {\n  IGL_DEBUG_ASSERT(index < IGL_COLOR_ATTACHMENTS_MAX);\n  return renderTarget_.colorAttachments[index].resolveTexture;\n}\n\nstd::shared_ptr<ITexture> CustomFramebuffer::getDepthAttachment() const {\n  return renderTarget_.depthAttachment.texture;\n}\n\nstd::shared_ptr<ITexture> CustomFramebuffer::getResolveDepthAttachment() const {\n  return renderTarget_.depthAttachment.resolveTexture;\n}\n\nstd::shared_ptr<ITexture> CustomFramebuffer::getStencilAttachment() const {\n  return renderTarget_.stencilAttachment.texture;\n}\n\nFramebufferMode CustomFramebuffer::getMode() const {\n  return renderTarget_.mode;\n}\n\nvoid CustomFramebuffer::updateDrawable(std::shared_ptr<ITexture> texture) {\n  updateDrawableInternal({std::move(texture), nullptr}, false);\n}\n\nvoid CustomFramebuffer::updateDrawable(SurfaceTextures surfaceTextures) {\n  updateDrawableInternal(std::move(surfaceTextures), true);\n}\n\nvoid CustomFramebuffer::updateResolveAttachment(std::shared_ptr<ITexture> texture) {\n  if (resolveFramebuffer_) {\n    resolveFramebuffer_->updateDrawable(std::move(texture));\n  }\n}\n\nvoid CustomFramebuffer::updateDrawableInternal(SurfaceTextures surfaceTextures,\n                                               bool updateDepthStencil) {\n  auto colorAttachment0 = getColorAttachment(0);\n  auto depthAttachment = updateDepthStencil ? getDepthAttachment() : nullptr;\n  auto stencilAttachment = updateDepthStencil ? getStencilAttachment() : nullptr;\n\n  const bool updateColor = colorAttachment0 != surfaceTextures.color;\n  updateDepthStencil = updateDepthStencil && (depthAttachment != surfaceTextures.depth ||\n                                              stencilAttachment != surfaceTextures.depth);\n  if (updateColor || updateDepthStencil) {\n    const FramebufferBindingGuard guard(getContext());\n    bindBuffer();\n    if (updateColor) {\n      if (!surfaceTextures.color) {\n        static_cast<Texture&>(*colorAttachment0).detachAsColor(0, false);\n        renderTarget_.colorAttachments[0] = {};\n      } else {\n        attachAsColor(*surfaceTextures.color, 0, defaultWriteAttachmentParams(renderTarget_.mode));\n\n        renderTarget_.colorAttachments[0].texture = std::move(surfaceTextures.color);\n      }\n    }\n    if (updateDepthStencil) {\n      if (!surfaceTextures.depth) {\n        if (depthAttachment) {\n          static_cast<Texture&>(*depthAttachment).detachAsDepth(false);\n        }\n        renderTarget_.depthAttachment.texture = nullptr;\n\n        if (depthAttachment == stencilAttachment) {\n          if (stencilAttachment) {\n            static_cast<Texture&>(*stencilAttachment).detachAsStencil(false);\n          }\n          renderTarget_.stencilAttachment.texture = nullptr;\n        }\n      } else {\n        attachAsDepth(*surfaceTextures.depth, defaultWriteAttachmentParams(renderTarget_.mode));\n        if (surfaceTextures.depth->getProperties().hasStencil()) {\n          attachAsStencil(*surfaceTextures.depth, defaultWriteAttachmentParams(renderTarget_.mode));\n          renderTarget_.stencilAttachment.texture = surfaceTextures.depth;\n        } else {\n          if (stencilAttachment) {\n            static_cast<Texture&>(*stencilAttachment).detachAsStencil(false);\n          }\n          renderTarget_.stencilAttachment.texture = nullptr;\n        }\n        renderTarget_.depthAttachment.texture = std::move(surfaceTextures.depth);\n      }\n    }\n  }\n}\n\nbool CustomFramebuffer::isInitialized() const {\n  return initialized_;\n}\n\nbool CustomFramebuffer::hasImplicitColorAttachment() const {\n  if (frameBufferID_ != 0) {\n    return false;\n  }\n\n  const auto& colorAttachment0 = renderTarget_.colorAttachments[0];\n\n  return colorAttachment0.texture != nullptr &&\n         static_cast<Texture&>(*colorAttachment0.texture).isImplicitStorage();\n}\n\nvoid CustomFramebuffer::initialize(const FramebufferDesc& desc, Result* outResult) {\n  if (IGL_DEBUG_VERIFY_NOT(isInitialized())) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Framebuffer already initialized.\");\n    return;\n  }\n  initialized_ = true;\n\n  renderTarget_ = desc;\n\n  // Restore framebuffer binding\n  const FramebufferBindingGuard guard(getContext());\n  if (hasImplicitColorAttachment()) {\n    // Don't generate framebuffer id. Use implicit framebuffer supplied by containing view\n    Result::setOk(outResult);\n  } else {\n    prepareResource(desc.debugName, outResult);\n  }\n}\n\nvoid CustomFramebuffer::prepareResource(const std::string& debugName, Result* outResult) {\n  // create a new frame buffer if we don't already have one\n  getContext().genFramebuffers(1, &frameBufferID_);\n  if (IGL_DEBUG_VERIFY_NOT(frameBufferID_ == 0)) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Failed to create framebuffer ID.\");\n    return;\n  }\n\n  bindBuffer();\n\n  if (!debugName.empty() &&\n      getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugLabel)) {\n    getContext().objectLabel(GL_FRAMEBUFFER, frameBufferID_, debugName.size(), debugName.c_str());\n  }\n\n  std::vector<GLenum> drawBuffers;\n\n  const auto attachmentParams = defaultWriteAttachmentParams(renderTarget_.mode);\n  // attach the textures and render buffers to the frame buffer\n  bool hasBuffers = false;\n  for (size_t i = 0; i != IGL_COLOR_ATTACHMENTS_MAX; i++) {\n    const auto& colorAttachment = renderTarget_.colorAttachments[i];\n    if (colorAttachment.texture != nullptr) {\n      attachAsColor(*colorAttachment.texture, static_cast<uint32_t>(i), attachmentParams);\n      drawBuffers.push_back(static_cast<GLenum>(GL_COLOR_ATTACHMENT0 + i));\n      if (i) {\n        // skip attachment 0\n        hasBuffers = true;\n      }\n    } else {\n      drawBuffers.push_back(GL_NONE);\n    }\n  }\n\n  if (hasBuffers) {\n    // needs to be called when there's more than one color attachment or if there's a single color\n    // attachment at a non-zero index\n    getContext().drawBuffers(static_cast<GLsizei>(drawBuffers.size()), drawBuffers.data());\n  }\n\n  if (renderTarget_.depthAttachment.texture != nullptr) {\n    attachAsDepth(*renderTarget_.depthAttachment.texture, attachmentParams);\n  }\n\n  if (renderTarget_.stencilAttachment.texture != nullptr) {\n    attachAsStencil(*renderTarget_.stencilAttachment.texture, attachmentParams);\n  }\n\n  Result result = checkFramebufferStatus(getContext(), false);\n  IGL_DEBUG_ASSERT(result.isOk(), result.message.c_str());\n  if (outResult) {\n    *outResult = result;\n  }\n  if (!result.isOk()) {\n    return;\n  }\n\n  // Check if resolve framebuffer is needed\n  FramebufferDesc resolveDesc;\n  auto createResolveFramebuffer = false;\n  uint32_t maskColorAttachments = 0;\n  uint32_t maskColorResolveAttachments = 0;\n  for (size_t i = 0; i != IGL_COLOR_ATTACHMENTS_MAX; i++) {\n    const auto& colorAttachment = renderTarget_.colorAttachments[i];\n    if (colorAttachment.texture) {\n      maskColorAttachments |= 1u << i;\n    }\n    if (colorAttachment.resolveTexture) {\n      createResolveFramebuffer = true;\n      FramebufferDesc::AttachmentDesc attachment;\n      attachment.texture = colorAttachment.resolveTexture;\n      resolveDesc.colorAttachments[i] = attachment;\n      maskColorResolveAttachments |= 1u << i;\n    }\n  }\n  if (createResolveFramebuffer && maskColorResolveAttachments != maskColorAttachments) {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    if (outResult) {\n      *outResult = Result(igl::Result::Code::ArgumentInvalid,\n                          \"If resolve texture is specified on a color attachment it must be \"\n                          \"specified on all of them\");\n    }\n    return;\n  }\n\n  if (renderTarget_.depthAttachment.resolveTexture) {\n    createResolveFramebuffer = true;\n    resolveDesc.depthAttachment.texture = renderTarget_.depthAttachment.resolveTexture;\n  }\n  if (renderTarget_.stencilAttachment.resolveTexture) {\n    createResolveFramebuffer = true;\n    resolveDesc.stencilAttachment.texture = renderTarget_.stencilAttachment.resolveTexture;\n  }\n\n  if (createResolveFramebuffer) {\n    auto cfb = std::make_shared<CustomFramebuffer>(getContext());\n    cfb->initialize(resolveDesc, &result);\n    if (outResult) {\n      *outResult = result;\n    }\n    resolveFramebuffer_ = std::move(cfb);\n  }\n}\n\nViewport CustomFramebuffer::getViewport() const {\n  auto texture = getColorAttachment(0);\n\n  if (texture == nullptr) {\n    texture = getDepthAttachment();\n  }\n\n  if (texture == nullptr) {\n    IGL_DEBUG_ABORT(\"No color/depth attachments in CustomFrameBuffer at index 0\");\n    return {0, 0, 0, 0};\n  }\n\n  // By default, we set viewport to dimensions of framebuffer\n  const auto size = texture->getSize();\n  return {0, 0, size.width, size.height};\n}\n\nvoid CustomFramebuffer::bind(const RenderPassDesc& renderPass) const {\n  // Cache renderPass for unbind\n  renderPass_ = renderPass;\n  IGL_DEBUG_ASSERT(renderTarget_.mode != FramebufferMode::Multiview,\n                   \"FramebufferMode::Multiview not supported\");\n\n  bindBuffer();\n\n  int targetCount = 0;\n  for (size_t i = 0; i != IGL_COLOR_ATTACHMENTS_MAX; i++) {\n    const auto& colorAttachment = renderTarget_.colorAttachments[i];\n    if (!colorAttachment.texture) {\n      continue;\n    }\n    targetCount++;\n#if !IGL_OPENGL_ES\n    // OpenGL ES doesn't need to call glEnable. All it needs is an sRGB framebuffer.\n    if (getContext().deviceFeatures().hasFeature(DeviceFeatures::SRGB)) {\n      if (colorAttachment.texture->getProperties().isSRGB()) {\n        getContext().enable(GL_FRAMEBUFFER_SRGB);\n      } else {\n        getContext().disable(GL_FRAMEBUFFER_SRGB);\n      }\n    }\n#endif\n    const size_t index = i;\n    IGL_DEBUG_ASSERT(index >= 0 && index < renderPass.colorAttachments.size());\n    const auto& renderPassAttachment = renderPass.colorAttachments[index];\n    // When setting up a framebuffer, we attach textures as though they were a non-array\n    // texture with and set layer, mip-level and face equal to 0.\n    // If any of these assumptions are not true, we need to reattach with proper values.\n    IGL_DEBUG_ASSERT(index >= 0 && index < kNumCachedStates);\n    if (colorCachedState_[index].needsUpdate(renderTarget_.mode,\n                                             renderPassAttachment.layer,\n                                             renderPassAttachment.face,\n                                             renderPassAttachment.mipLevel)) {\n      attachAsColor(*colorAttachment.texture,\n                    static_cast<uint32_t>(index),\n                    toAttachmentParams(renderPassAttachment, renderTarget_.mode));\n    }\n  }\n  if (renderTarget_.depthAttachment.texture) {\n    const auto& renderPassAttachment = renderPass.depthAttachment;\n    if (depthCachedState_.needsUpdate(renderTarget_.mode,\n                                      renderPassAttachment.layer,\n                                      renderPassAttachment.face,\n                                      renderPassAttachment.mipLevel)) {\n      attachAsDepth(*renderTarget_.depthAttachment.texture,\n                    toAttachmentParams(renderPassAttachment, renderTarget_.mode));\n    }\n  }\n  if (renderTarget_.stencilAttachment.texture) {\n    const auto& renderPassAttachment = renderPass.stencilAttachment;\n    if (stencilCachedState_.needsUpdate(renderTarget_.mode,\n                                        renderPassAttachment.layer,\n                                        renderPassAttachment.face,\n                                        renderPassAttachment.mipLevel)) {\n      attachAsStencil(*renderTarget_.stencilAttachment.texture,\n                      toAttachmentParams(renderPassAttachment, renderTarget_.mode));\n    }\n  }\n  // clear the buffers if we're not loading previous contents\n  GLbitfield clearMask = 0;\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::ClearBufferfv) &&\n      targetCount > 1) {\n    for (size_t index = 0; index != IGL_COLOR_ATTACHMENTS_MAX; index++) {\n      const auto& colorAttachment = renderTarget_.colorAttachments[index];\n\n      if (colorAttachment.texture != nullptr &&\n          renderPass_.colorAttachments[index].loadAction == LoadAction::Clear) {\n        auto clearColor = renderPass_.colorAttachments[index].clearColor;\n        getContext().colorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);\n        getContext().clearBufferfv(GL_COLOR, (GLint)index, clearColor.toFloatPtr());\n      }\n    }\n  } else {\n    const auto& colorAttachment0 = renderTarget_.colorAttachments[0];\n\n    if (colorAttachment0.texture != nullptr &&\n        renderPass_.colorAttachments[0].loadAction == LoadAction::Clear) {\n      clearMask |= GL_COLOR_BUFFER_BIT;\n      auto clearColor = renderPass_.colorAttachments[0].clearColor;\n      getContext().colorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);\n      getContext().clearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a);\n    }\n  }\n\n  if (renderTarget_.depthAttachment.texture != nullptr) {\n    if (renderPass_.depthAttachment.loadAction == LoadAction::Clear) {\n      clearMask |= GL_DEPTH_BUFFER_BIT;\n      getContext().depthMask(GL_TRUE);\n      getContext().clearDepthf(renderPass_.depthAttachment.clearDepth);\n    }\n  }\n  if (renderTarget_.stencilAttachment.texture != nullptr) {\n    getContext().enable(GL_STENCIL_TEST);\n    if (renderPass_.stencilAttachment.loadAction == LoadAction::Clear) {\n      clearMask |= GL_STENCIL_BUFFER_BIT;\n      getContext().stencilMask(0xFF);\n      getContext().clearStencil(renderPass_.stencilAttachment.clearStencil);\n    }\n  }\n\n  if (clearMask != 0) {\n    getContext().clear(clearMask);\n  }\n}\n\nvoid CustomFramebuffer::unbind() const {\n  // discard the depthStencil if we don't need to store its contents\n  GLenum attachments[3];\n  GLsizei numAttachments = 0;\n  const auto& colorAttachment0 = renderTarget_.colorAttachments[0];\n\n  if (colorAttachment0.texture != nullptr &&\n      renderPass_.colorAttachments[0].storeAction != StoreAction::Store) {\n    attachments[numAttachments++] = GL_COLOR_ATTACHMENT0;\n  }\n  if (renderTarget_.depthAttachment.texture != nullptr) {\n    if (renderPass_.depthAttachment.storeAction != StoreAction::Store) {\n      attachments[numAttachments++] = GL_DEPTH_ATTACHMENT;\n    }\n  }\n  if (renderTarget_.stencilAttachment.texture != nullptr) {\n    getContext().disable(GL_STENCIL_TEST);\n    if (renderPass_.stencilAttachment.storeAction != StoreAction::Store) {\n      attachments[numAttachments++] = GL_STENCIL_ATTACHMENT;\n    }\n  }\n\n  if (numAttachments > 0) {\n    const auto& features = getContext().deviceFeatures();\n    if (features.hasInternalFeature(InternalFeatures::InvalidateFramebuffer)) {\n      getContext().invalidateFramebuffer(GL_FRAMEBUFFER, numAttachments, attachments);\n    }\n  }\n}\n\n///--------------------------------------\n/// MARK: - CurrentFramebuffer\n\nCurrentFramebuffer::CurrentFramebuffer(IContext& context) : Super(context) {\n  getContext().getIntegerv(GL_FRAMEBUFFER_BINDING, reinterpret_cast<GLint*>(&frameBufferID_));\n\n  GLint viewport[4];\n  getContext().getIntegerv(GL_VIEWPORT, viewport);\n  viewport_.x = static_cast<float>(viewport[0]);\n  viewport_.y = static_cast<float>(viewport[1]);\n  viewport_.width = static_cast<float>(viewport[2]);\n  viewport_.height = static_cast<float>(viewport[3]);\n\n  colorAttachment_ = std::make_shared<DummyTexture>(Size(viewport_.width, viewport_.height));\n}\n\nstd::vector<size_t> CurrentFramebuffer::getColorAttachmentIndices() const {\n  return std::vector<size_t>{0};\n}\n\nstd::shared_ptr<ITexture> CurrentFramebuffer::getColorAttachment(size_t index) const {\n  if (index != 0) {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n  return colorAttachment_;\n}\n\nstd::shared_ptr<ITexture> CurrentFramebuffer::getResolveColorAttachment(size_t index) const {\n  if (index != 0) {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n  return colorAttachment_;\n}\n\nstd::shared_ptr<ITexture> CurrentFramebuffer::getDepthAttachment() const {\n  return nullptr;\n}\n\nstd::shared_ptr<ITexture> CurrentFramebuffer::getResolveDepthAttachment() const {\n  return nullptr;\n}\n\nstd::shared_ptr<ITexture> CurrentFramebuffer::getStencilAttachment() const {\n  return nullptr;\n}\n\nvoid CurrentFramebuffer::updateDrawable(std::shared_ptr<ITexture> /*texture*/) {\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n}\n\nvoid CurrentFramebuffer::updateDrawable(SurfaceTextures /*surfaceTextures*/) {\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n}\n\nvoid CurrentFramebuffer::updateResolveAttachment(std::shared_ptr<ITexture> /*texture*/) {\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n}\n\nViewport CurrentFramebuffer::getViewport() const {\n  return viewport_;\n}\n\nvoid CurrentFramebuffer::bind(const RenderPassDesc& renderPass) const {\n  bindBuffer();\n#if !IGL_OPENGL_ES\n  // OpenGL ES doesn't need to call glEnable. All it needs is an sRGB framebuffer.\n  auto colorAttach = getResolveColorAttachment(getColorAttachmentIndices()[0]);\n  if (getContext().deviceFeatures().hasFeature(DeviceFeatures::SRGB)) {\n    if (colorAttach && colorAttach->getProperties().isSRGB()) {\n      getContext().enable(GL_FRAMEBUFFER_SRGB);\n    } else {\n      getContext().disable(GL_FRAMEBUFFER_SRGB);\n    }\n  }\n#endif\n\n  // clear the buffers if we're not loading previous contents\n  GLbitfield clearMask = 0;\n  if (renderPass.colorAttachments[0].loadAction == LoadAction::Clear) {\n    clearMask |= GL_COLOR_BUFFER_BIT;\n    auto clearColor = renderPass.colorAttachments[0].clearColor;\n    getContext().colorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);\n    getContext().clearColor(clearColor.r, clearColor.g, clearColor.b, clearColor.a);\n  }\n  if (renderPass.depthAttachment.loadAction == LoadAction::Clear) {\n    clearMask |= GL_DEPTH_BUFFER_BIT;\n    getContext().depthMask(GL_TRUE);\n    getContext().clearDepthf(renderPass.depthAttachment.clearDepth);\n  }\n  if (renderPass.stencilAttachment.loadAction == LoadAction::Clear) {\n    clearMask |= GL_STENCIL_BUFFER_BIT;\n    getContext().stencilMask(0xFF);\n    getContext().clearStencil(renderPass.stencilAttachment.clearStencil);\n  }\n\n  if (clearMask != 0) {\n    getContext().clear(clearMask);\n  }\n}\n\nvoid CurrentFramebuffer::unbind() const {\n  // no-op\n}\n\nFramebufferMode CurrentFramebuffer::getMode() const {\n  return FramebufferMode::Mono;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Framebuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Framebuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/Texture.h>\n\nnamespace igl {\nclass ICommandBuffer;\nnamespace opengl {\n\n///--------------------------------------\n/// MARK: - FramebufferBindingGuard\n\nclass FramebufferBindingGuard {\n public:\n  explicit FramebufferBindingGuard(IContext& context);\n  ~FramebufferBindingGuard();\n\n private:\n  IContext& context_;\n  GLuint currentRenderbuffer_ = 0;\n  GLuint currentFramebuffer_ = 0;\n  GLuint currentReadFramebuffer_ = 0;\n  GLuint currentDrawFramebuffer_ = 0;\n};\n\n// Framebuffer encapsulates an immutable render target (attachments) and per-render pass state.\nclass Framebuffer : public WithContext, public IFramebuffer {\n public:\n  explicit Framebuffer(IContext& context);\n  virtual Viewport getViewport() const = 0;\n  virtual void bind(const RenderPassDesc& renderPass) const = 0;\n  virtual void unbind() const = 0;\n\n  void bindBuffer() const;\n  void bindBufferForRead() const;\n  void copyBytesColorAttachment(ICommandQueue& /* unused */,\n                                size_t index,\n                                void* pixelBytes,\n                                const TextureRangeDesc& range,\n                                size_t bytesPerRow = 0) const override;\n\n  void copyBytesDepthAttachment(ICommandQueue& /* unused */,\n                                void* pixelBytes,\n                                const TextureRangeDesc& range,\n                                size_t bytesPerRow = 0) const override;\n\n  void copyBytesStencilAttachment(ICommandQueue& /* unused */,\n                                  void* pixelBytes,\n                                  const TextureRangeDesc& range,\n                                  size_t bytesPerRow = 0) const override;\n\n  void copyTextureColorAttachment(ICommandQueue& cmdQueue,\n                                  size_t index,\n                                  std::shared_ptr<ITexture> destTexture,\n                                  const TextureRangeDesc& range) const override;\n  inline GLuint getId() const {\n    return frameBufferID_;\n  }\n\n  inline std::shared_ptr<Framebuffer> getResolveFramebuffer() const {\n    return resolveFramebuffer_;\n  }\n\n  [[nodiscard]] bool isSwapchainBound() const override;\n\n protected:\n  void attachAsColor(ITexture& texture,\n                     uint32_t index,\n                     const Texture::AttachmentParams& params) const;\n  void attachAsDepth(ITexture& texture, const Texture::AttachmentParams& params) const;\n  void attachAsStencil(ITexture& texture, const Texture::AttachmentParams& params) const;\n  // NOLINTNEXTLINE(misc-non-private-member-variables-in-classes)\n  GLuint frameBufferID_ = 0;\n\n  struct CachedState {\n    FramebufferMode mode = igl::FramebufferMode::Mono;\n    uint8_t layer = 0;\n    uint8_t face = 0;\n    uint8_t mipLevel = 0;\n\n    bool needsUpdate(FramebufferMode newMode,\n                     uint8_t newLayer,\n                     uint8_t newFace,\n                     uint8_t newMipLevel);\n    void updateCache(FramebufferMode newMode,\n                     uint8_t newLayer,\n                     uint8_t newFace,\n                     uint8_t newMipLevel);\n  };\n\n  constexpr static auto kNumCachedStates = 8; // We allow up to 8 color attachments\n  mutable std::array<CachedState, kNumCachedStates> colorCachedState_;\n  mutable CachedState depthCachedState_;\n  mutable CachedState stencilCachedState_;\n\n  std::shared_ptr<Framebuffer> resolveFramebuffer_ = nullptr;\n};\n\n// CustomFramebuffer enables caller-defined attachments\n//\n// There are several kinds of framebuffer color attachments that are encapsulated\n// by the opengl::Texture interface. For the OpenGL backend, we have different\n// implementations of that interface whose usage supports TextureUsageBits::Attachment:\n//\n// 1. `opengl::TextureBuffer`. These are regular old textures, e.g. loaded from an\n// image file. They can be read from a shader (or written to by a compute shader)\n// 2. `opengl::TextureTarget`. These are renderbuffers. For storage, normally IGL\n// allocates storage via glRenderbufferStorage. On iOS, the view's storage is used\n// instead — see ios::PlatformDevice::createTextureFromNativeDrawable() where\n// glRenderBufferStorage is replaced by [EAGLContext renderbufferStorage:fromDrawable:].\n// 3. `opengl::macos::ViewTextureTarget`. This represents the color attachment of\n// the implicit framebuffer supplied by NSOpenGLView. Here, IGL skips prepareResource()\n// since GPU resources are owned by the client, i.e. `hasImplicitColorAttachment()` == true.\nclass CustomFramebuffer final : public Framebuffer {\n public:\n  using Framebuffer::Framebuffer;\n  ~CustomFramebuffer() override;\n\n  // Accessors\n  std::vector<size_t> getColorAttachmentIndices() const override;\n  std::shared_ptr<ITexture> getColorAttachment(size_t index) const override;\n  std::shared_ptr<ITexture> getResolveColorAttachment(size_t index) const override;\n  std::shared_ptr<ITexture> getDepthAttachment() const override;\n  std::shared_ptr<ITexture> getResolveDepthAttachment() const override;\n  std::shared_ptr<ITexture> getStencilAttachment() const override;\n  [[nodiscard]] FramebufferMode getMode() const override;\n\n  // Methods\n  void updateDrawable(std::shared_ptr<ITexture> texture) override;\n  void updateDrawable(SurfaceTextures surfaceTextures) override;\n  void updateResolveAttachment(std::shared_ptr<ITexture> texture) override;\n\n  bool isInitialized() const;\n  bool hasImplicitColorAttachment() const;\n  void initialize(const FramebufferDesc& desc, Result* outResult);\n\n  // CommandBuffer\n  Viewport getViewport() const override;\n  void bind(const RenderPassDesc& renderPass) const override;\n  void unbind() const override;\n\n private:\n  void prepareResource(const std::string& debugName, Result* outResult);\n  void updateDrawableInternal(SurfaceTextures surfaceTextures, bool updateDepthStencil);\n\n  bool initialized_ = false;\n\n  friend class Framebuffer; // Needed to enable copyBytesColorAttachment\n  FramebufferDesc renderTarget_; // attachments\n  mutable RenderPassDesc renderPass_;\n};\n\nclass CurrentFramebuffer final : public Framebuffer {\n public:\n  using Super = Framebuffer;\n  explicit CurrentFramebuffer(IContext& context);\n\n  // IFramebuffer\n  std::vector<size_t> getColorAttachmentIndices() const override;\n  std::shared_ptr<ITexture> getColorAttachment(size_t index) const override;\n  std::shared_ptr<ITexture> getResolveColorAttachment(size_t index) const override;\n  std::shared_ptr<ITexture> getDepthAttachment() const override;\n  std::shared_ptr<ITexture> getResolveDepthAttachment() const override;\n  std::shared_ptr<ITexture> getStencilAttachment() const override;\n  void updateDrawable(std::shared_ptr<ITexture> texture) override;\n  void updateDrawable(SurfaceTextures surfaceTextures) override;\n  void updateResolveAttachment(std::shared_ptr<ITexture> texture) override;\n  [[nodiscard]] FramebufferMode getMode() const override;\n\n  // opengl::Framebuffer\n  Viewport getViewport() const override;\n  void bind(const RenderPassDesc& renderPass) const override;\n  void unbind() const override;\n\n private:\n  Viewport viewport_;\n  std::shared_ptr<ITexture> colorAttachment_;\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/FramebufferWrapper.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/FramebufferWrapper.h>\n#include <igl/opengl/Framebuffer.h>\n\nnamespace igl::opengl {\n\n/// @brief OpenGL-specific FramebufferWrapper that returns the GL framebuffer ID\n// @fb-only\nclass FramebufferWrapper final : public igl::FramebufferWrapper {\n public:\n  using igl::FramebufferWrapper::FramebufferWrapper;\n\n  [[nodiscard]] void* IGL_NULLABLE getNativeFramebuffer() const override {\n    const auto& fb = getFramebuffer();\n    if (!fb) {\n      return nullptr;\n    }\n    auto* oglFb = static_cast<Framebuffer*>(fb.get());\n    nativeId_ = oglFb->getId();\n    return &nativeId_;\n  }\n\n private:\n  mutable GLuint nativeId_ = 0;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/GLFunc.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n// NOLINTBEGIN(readability-identifier-naming)\n\n#include <igl/opengl/GLFunc.h>\n\n#include <igl/Core.h>\n#include <igl/opengl/Config.h>\n\n#if IGL_EGL\n#include <EGL/egl.h>\n#define IGL_GET_PROC_ADDRESS eglGetProcAddress\n#elif IGL_WGL\n#include <windows.h>\n#include <wingdi.h>\n#define IGL_GET_PROC_ADDRESS wglGetProcAddress\n#else\n#define IGL_GET_PROC_ADDRESS(funcName) nullptr\n#endif // IGL_EGL\n\n// When using OpenGL, Tracy needs glQueryCounterEXT to be defined, but it's not available in all\n// platforms or OpenGL versions. The following is a workaround to make Tracy work in all platforms.\n// Note: OpenGL has not been tested with Tracy yet, and that's why the workaround works with OpenGL\n#if defined(IGL_WITH_TRACY)\n#if !defined GL_TIMESTAMP && defined GL_TIMESTAMP_EXT\nextern \"C\" void glQueryCounterEXT(GLuint, GLenum) {}\n#endif\n#endif\n#if defined(__clang__)\n#define ROAI __attribute__((annotate(\"ro_after_init\")))\n#else\n#define ROAI\n#endif\n\n#define GLEXTENSION_DIRECT_CALL(funcName, funcType, ...) funcName(__VA_ARGS__);\n#define GLEXTENSION_DIRECT_CALL_WITH_RETURN(funcName, funcType, returnOnError, ...) \\\n  return funcName(__VA_ARGS__);\n\n#define GLEXTENSION_LOAD_AND_CALL(funcName, funcType, ...)         \\\n  static ROAI funcType funcAddr = nullptr;                         \\\n  if (funcAddr == nullptr) {                                       \\\n    funcAddr = (funcType)IGL_GET_PROC_ADDRESS(#funcName);          \\\n  }                                                                \\\n  if (funcAddr != nullptr) {                                       \\\n    funcAddr(__VA_ARGS__);                                         \\\n  } else {                                                         \\\n    IGL_DEBUG_ABORT(\"Extension function \" #funcName \" not found\"); \\\n  }\n#define GLEXTENSION_LOAD_AND_CALL_WITH_RETURN(funcName, funcType, returnOnError, ...) \\\n  static ROAI funcType funcAddr = nullptr;                                            \\\n  if (funcAddr == nullptr) {                                                          \\\n    funcAddr = (funcType)IGL_GET_PROC_ADDRESS(#funcName);                             \\\n  }                                                                                   \\\n  if (funcAddr != nullptr) {                                                          \\\n    return funcAddr(__VA_ARGS__);                                                     \\\n  } else {                                                                            \\\n    IGL_DEBUG_ABORT(\"Extension function \" #funcName \" not found\");                    \\\n    return returnOnError;                                                             \\\n  }\n\n#define GLEXTENSION_UNAVAILABLE(funcName, funcType, ...) \\\n  IGL_DEBUG_ABORT(\"Extension function \" #funcName \" not found\");\n#define GLEXTENSION_UNAVAILABLE_WITH_RETURN(funcName, funcType, returnOnError, ...) \\\n  IGL_DEBUG_ABORT(\"Extension function \" #funcName \" not found\");                    \\\n  return returnOnError;\n\n#if IGL_EGL || IGL_WGL\n#define CAN_LOAD true\n#else\n#define CAN_LOAD false\n#endif // IGL_EGL || IGL_WGL\n\n#if IGL_WGL || IGL_PLATFORM_APPLE\n#define CAN_CALL 1\n#define CAN_CALL_OPENGL_ES IGL_OPENGL_ES\n#define CAN_CALL_OPENGL IGL_OPENGL\n#else\n#define CAN_CALL 0\n#define CAN_CALL_OPENGL_ES 0\n#define CAN_CALL_OPENGL 0\n#endif // IGL_WGL || IGL_PLATFORM_APPLE\n\n// Special defines for functionality that is always available in OpenGL or OpenGL ES\n// Always available means supported from OpenGL 2.0 or OpenGL ES 2.0.\n#if CAN_CALL\n#define OPENGL_ES_OR_CAN_CALL 1\n#define OPENGL_OR_CAN_CALL 1\n#else\n#define OPENGL_ES_OR_CAN_CALL IGL_OPENGL_ES\n#define OPENGL_OR_CAN_CALL IGL_OPENGL\n#endif\n\n// Set up redirections with boolean 0 or 1 flags depending on support\n// The first 0 or 1 indicates whether the method can be directly called.\n// The second 0 or 1 indicates whether the method can be dynamically loaded.\n#define GLEXTENSION_1_1(funcName, funcType, ...) \\\n  GLEXTENSION_DIRECT_CALL(funcName, funcType, __VA_ARGS__)\n#define GLEXTENSION_1_0(funcName, funcType, ...) \\\n  GLEXTENSION_DIRECT_CALL(funcName, funcType, __VA_ARGS__)\n#define GLEXTENSION_0_1(funcName, funcType, ...) \\\n  GLEXTENSION_LOAD_AND_CALL(funcName, funcType, __VA_ARGS__)\n#define GLEXTENSION_0_0(funcName, funcType, ...) \\\n  GLEXTENSION_UNAVAILABLE(funcName, funcType, __VA_ARGS__)\n\n#define GLEXTENSION_WITH_RETURN_1_1(funcName, funcType, returnOnError, ...) \\\n  GLEXTENSION_DIRECT_CALL_WITH_RETURN(funcName, funcType, returnOnError, __VA_ARGS__)\n#define GLEXTENSION_WITH_RETURN_1_0(funcName, funcType, returnOnError, ...) \\\n  GLEXTENSION_DIRECT_CALL_WITH_RETURN(funcName, funcType, returnOnError, __VA_ARGS__)\n#define GLEXTENSION_WITH_RETURN_0_1(funcName, funcType, returnOnError, ...) \\\n  GLEXTENSION_LOAD_AND_CALL_WITH_RETURN(funcName, funcType, returnOnError, __VA_ARGS__)\n#define GLEXTENSION_WITH_RETURN_0_0(funcName, funcType, returnOnError, ...) \\\n  GLEXTENSION_UNAVAILABLE_WITH_RETURN(funcName, funcType, returnOnError, __VA_ARGS__)\n\n// Expands to GLEXTENSION_A_B where:\n//   A is 1 if the function is directly callable (0 otherwise)\n//   B is 1 if the function can be dynamically loaded (0 otherwise)\n// This in turns expands into GLEXTENSION_DIRECT_CALL, GLEXTENSION_LOAD_AND_CALL or\n// GLEXTENSION_UNAVAILABLE, and the arguments are passed along to these.\n// This depends on CAN_CALL_funcName being defined as 0 or 1.\n#define GLEXTENSION_METHOD_BODY_EXPAND(canCall, canLoad, funcName, funcType, ...) \\\n  GLEXTENSION_##canCall##_##canLoad(funcName, funcType, __VA_ARGS__)\n#define GLEXTENSION_METHOD_BODY_WITH_RETURN_EXPAND(           \\\n    canCall, canLoad, funcName, funcType, returnOnError, ...) \\\n  GLEXTENSION_WITH_RETURN_##canCall##_##canLoad(funcName, funcType, returnOnError, __VA_ARGS__)\n\n#if CAN_LOAD\n#define GLEXTENSION_METHOD_BODY(canCall, funcName, funcType, ...) \\\n  GLEXTENSION_METHOD_BODY_EXPAND(canCall, 1, funcName, funcType, __VA_ARGS__)\n#define GLEXTENSION_METHOD_BODY_WITH_RETURN(canCall, funcName, funcType, returnOnError, ...) \\\n  GLEXTENSION_METHOD_BODY_WITH_RETURN_EXPAND(                                                \\\n      canCall, 1, funcName, funcType, returnOnError, __VA_ARGS__)\n#else\n#define GLEXTENSION_METHOD_BODY(canCall, funcName, funcType, ...) \\\n  GLEXTENSION_METHOD_BODY_EXPAND(canCall, 0, funcName, funcType, __VA_ARGS__)\n#define GLEXTENSION_METHOD_BODY_WITH_RETURN(canCall, funcName, funcType, returnOnError, ...) \\\n  GLEXTENSION_METHOD_BODY_WITH_RETURN_EXPAND(                                                \\\n      canCall, 0, funcName, funcType, returnOnError, __VA_ARGS__)\n#endif\n\nIGL_EXTERN_BEGIN\n\n///--------------------------------------\n/// MARK: - OpenGL ES / OpenGL\n\n#if IGL_OPENGL\n#define CAN_CALL_glClearDepth OPENGL_OR_CAN_CALL\n#define CAN_CALL_glMapBuffer CAN_CALL\n#else\n#define CAN_CALL_glClearDepth 0\n#define CAN_CALL_glMapBuffer 0\n#endif\n#if IGL_OPENGL || defined(GL_ES_VERSION_3_0)\n#define CAN_CALL_glDrawBuffers OPENGL_OR_CAN_CALL\n#else\n#define CAN_CALL_glDrawBuffers 0\n#endif\n#if IGL_OPENGL || defined(GL_ES_VERSION_3_0)\n#define CAN_CALL_glCompressedTexImage3D OPENGL_OR_CAN_CALL\n#define CAN_CALL_glCompressedTexSubImage3D OPENGL_OR_CAN_CALL\n#define CAN_CALL_glTexImage3D OPENGL_OR_CAN_CALL\n#define CAN_CALL_glTexSubImage3D OPENGL_OR_CAN_CALL\n#define CAN_CALL_glUnmapBuffer OPENGL_OR_CAN_CALL\n#else\n#define CAN_CALL_glCompressedTexImage3D 0\n#define CAN_CALL_glCompressedTexSubImage3D 0\n#define CAN_CALL_glTexImage3D 0\n#define CAN_CALL_glTexSubImage3D 0\n#define CAN_CALL_glUnmapBuffer 0\n#endif\n#if defined(GL_VERSION_3_0) || defined(GL_ES_VERSION_3_0)\n#define CAN_CALL_glClearBufferfv CAN_CALL\n#define CAN_CALL_glGetStringi CAN_CALL\n#else\n#define CAN_CALL_glClearBufferfv 0\n#define CAN_CALL_glGetStringi 0\n#endif\n#if defined(GL_VERSION_3_1) || defined(GL_ES_VERSION_3_0)\n#define CAN_CALL_glDrawElementsInstanced CAN_CALL\n#else\n#define CAN_CALL_glDrawElementsInstanced 0\n#endif\n#if defined(GL_VERSION_3_1) || defined(GL_ES_VERSION_3_0)\n#define CAN_CALL_glDrawArraysInstanced CAN_CALL\n#else\n#define CAN_CALL_glDrawArraysInstanced 0\n#endif\n#if defined(GL_VERSION_4_3) || defined(GL_ES_VERSION_3_2)\n#define CAN_CALL_glDebugMessageCallback CAN_CALL\n#define CAN_CALL_glDebugMessageInsert CAN_CALL\n#define CAN_CALL_glGetDebugMessageLog CAN_CALL\n#define CAN_CALL_glObjectLabel CAN_CALL\n#define CAN_CALL_glPopDebugGroup CAN_CALL\n#define CAN_CALL_glPushDebugGroup CAN_CALL\n#else\n#define CAN_CALL_glDebugMessageCallback 0\n#define CAN_CALL_glDebugMessageInsert 0\n#define CAN_CALL_glGetDebugMessageLog 0\n#define CAN_CALL_glObjectLabel 0\n#define CAN_CALL_glPopDebugGroup 0\n#define CAN_CALL_glPushDebugGroup 0\n#endif\n#if defined(GL_VERSION_3_3) || defined(GL_ES_VERSION_3_0)\n#define CAN_CALL_glVertexAttribDivisor CAN_CALL\n#else\n#define CAN_CALL_glVertexAttribDivisor 0\n#endif\n\nvoid iglDebugMessageCallback(PFNIGLDEBUGPROC callback, const void* userParam) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDebugMessageCallback,\n                          glDebugMessageCallback,\n                          PFNIGLDEBUGMESSAGECALLBACKPROC,\n                          callback,\n                          userParam);\n}\n\nvoid iglDebugMessageInsert(GLenum source,\n                           GLenum type,\n                           GLuint id,\n                           GLenum severity,\n                           GLsizei length,\n                           const GLchar* buf) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDebugMessageInsert,\n                          glDebugMessageInsert,\n                          PFNIGLDEBUGMESSAGEINSERTPROC,\n                          source,\n                          type,\n                          id,\n                          severity,\n                          length,\n                          buf);\n}\n\nvoid iglClearBufferfv(GLenum buffer, GLint drawBuffer, const GLfloat* value) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glClearBufferfv, glClearBufferfv, PFNIGLCLEARBUFFERFVPROC, buffer, drawBuffer, value)\n}\n\nvoid iglClearDepth(GLfloat depth) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glClearDepth, glClearDepth, PFNIGLCLEARDEPTHPROC, depth)\n}\n\nvoid iglCompressedTexImage3D(GLenum target,\n                             GLint level,\n                             GLenum internalformat,\n                             GLsizei width,\n                             GLsizei height,\n                             GLsizei depth,\n                             GLint border,\n                             GLsizei imageSize,\n                             const GLvoid* data) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glCompressedTexImage3D,\n                          glCompressedTexImage3D,\n                          PFNIGLCOMPRESSEDTEXIMAGE3DPROC,\n                          target,\n                          level,\n                          internalformat,\n                          width,\n                          height,\n                          depth,\n                          border,\n                          imageSize,\n                          data);\n}\n\nvoid iglCompressedTexSubImage3D(GLenum target,\n                                GLint level,\n                                GLint xoffset,\n                                GLint yoffset,\n                                GLint zoffset,\n                                GLsizei width,\n                                GLsizei height,\n                                GLsizei depth,\n                                GLenum format,\n                                GLsizei imageSize,\n                                const GLvoid* data) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glCompressedTexSubImage3D,\n                          glCompressedTexSubImage3D,\n                          PFNIGLCOMPRESSEDTEXSUBIMAGE3DPROC,\n                          target,\n                          level,\n                          xoffset,\n                          yoffset,\n                          zoffset,\n                          width,\n                          height,\n                          depth,\n                          format,\n                          imageSize,\n                          data);\n}\n\nvoid iglDrawBuffers(GLsizei n, const GLenum* bufs) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDrawBuffers, glDrawBuffers, PFNIGLDRAWBUFFERSPROC, n, bufs);\n}\n\nGLuint iglGetDebugMessageLog(GLuint count,\n                             GLsizei bufSize,\n                             GLenum* sources,\n                             GLenum* types,\n                             GLuint* ids,\n                             GLenum* severities,\n                             GLsizei* lengths,\n                             GLchar* messageLog) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glGetDebugMessageLog,\n                                      glGetDebugMessageLog,\n                                      PFNIGLGETDEBUGMESSAGELOGPROC,\n                                      0,\n                                      count,\n                                      bufSize,\n                                      sources,\n                                      types,\n                                      ids,\n                                      severities,\n                                      lengths,\n                                      messageLog);\n}\n\nconst GLubyte* iglGetStringi(GLenum name, GLuint index) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(\n      CAN_CALL_glGetStringi, glGetStringi, PFNIGLGETSTRINGIPROC, nullptr, name, index);\n}\n\nvoid* iglMapBuffer(GLenum target, GLbitfield access) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(\n      CAN_CALL_glMapBuffer, glMapBuffer, PFNIGLMAPBUFFERPROC, nullptr, target, access);\n}\n\nvoid iglObjectLabel(GLenum identifier, GLuint name, GLsizei length, const char* label) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glObjectLabel,\n                          glObjectLabel,\n                          PFNIGLOBJECTLABELPROC,\n                          identifier,\n                          name,\n                          length,\n                          label);\n}\n\nvoid iglPopDebugGroup() {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glPopDebugGroup, glPopDebugGroup, PFNIGLPOPDEBUGGROUPPROC);\n}\n\nvoid iglPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar* message) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glPushDebugGroup,\n                          glPushDebugGroup,\n                          PFNIGLPUSHDEBUGGROUPPROC,\n                          source,\n                          id,\n                          length,\n                          message);\n}\n\nvoid iglTexImage3D(GLenum target,\n                   GLint level,\n                   GLint internalformat,\n                   GLsizei width,\n                   GLsizei height,\n                   GLsizei depth,\n                   GLint border,\n                   GLenum format,\n                   GLenum type,\n                   const GLvoid* data) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexImage3D,\n                          glTexImage3D,\n                          PFNIGLTEXIMAGE3DPROC,\n                          target,\n                          level,\n                          internalformat,\n                          width,\n                          height,\n                          depth,\n                          border,\n                          format,\n                          type,\n                          data);\n}\n\nvoid iglTexSubImage3D(GLenum target,\n                      GLint level,\n                      GLint xoffset,\n                      GLint yoffset,\n                      GLint zoffset,\n                      GLsizei width,\n                      GLsizei height,\n                      GLsizei depth,\n                      GLenum format,\n                      GLenum type,\n                      const GLvoid* pixels) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexSubImage3D,\n                          glTexSubImage3D,\n                          PFNIGLTEXSUBIMAGE3DPROC,\n                          target,\n                          level,\n                          xoffset,\n                          yoffset,\n                          zoffset,\n                          width,\n                          height,\n                          depth,\n                          format,\n                          type,\n                          pixels);\n}\n\nvoid iglUnmapBuffer(GLenum target) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glUnmapBuffer, glUnmapBuffer, PFNIGLUNMAPBUFFERPROC, target);\n}\n\nvoid iglVertexAttribDivisor(GLuint index, GLuint divisor) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glVertexAttribDivisor,\n                          glVertexAttribDivisor,\n                          PFNIGLVERTEXATTRIBDIVISORPROC,\n                          index,\n                          divisor);\n}\n\nvoid iglDrawElementsInstanced(GLenum mode,\n                              GLsizei count,\n                              GLenum type,\n                              const void* indices,\n                              GLsizei instancecount) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDrawElementsInstanced,\n                          glDrawElementsInstanced,\n                          PFNIGLDRAWELEMENTSINSTANCEDPROC,\n                          mode,\n                          count,\n                          type,\n                          indices,\n                          instancecount);\n}\n\nvoid iglDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei primcount) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDrawArraysInstanced,\n                          glDrawArraysInstanced,\n                          PFNIGLDRAWARRAYSINSTANCEDPROC,\n                          mode,\n                          first,\n                          count,\n                          primcount);\n}\n\n///--------------------------------------\n/// MARK: - GL_APPLE_framebuffer_multisample\n\n#if defined(GL_APPLE_framebuffer_multisample)\n#define CAN_CALL_glRenderbufferStorageMultisampleAPPLE CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glRenderbufferStorageMultisampleAPPLE 0\n#endif\n\nvoid iglRenderbufferStorageMultisampleAPPLE(GLenum target,\n                                            GLsizei samples,\n                                            GLenum internalformat,\n                                            GLsizei width,\n                                            GLsizei height) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glRenderbufferStorageMultisampleAPPLE,\n                          glRenderbufferStorageMultisampleAPPLE,\n                          PFNIGLRENDERBUFFERSTORAGEMULTISAMPLEPROC,\n                          target,\n                          samples,\n                          internalformat,\n                          width,\n                          height);\n}\n\n///--------------------------------------\n/// MARK: - GL_APPLE_sync\n\n#if defined(GL_APPLE_sync)\n#define CAN_CALL_glDeleteSyncAPPLE CAN_CALL_OPENGL_ES\n#define CAN_CALL_glFenceSyncAPPLE CAN_CALL_OPENGL_ES\n#define CAN_CALL_glGetSyncivAPPLE CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glDeleteSyncAPPLE 0\n#define CAN_CALL_glFenceSyncAPPLE 0\n#define CAN_CALL_glGetSyncivAPPLE 0\n#endif\n\nvoid iglDeleteSyncAPPLE(GLsync sync) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glDeleteSyncAPPLE, glDeleteSyncAPPLE, PFNIGLDELETESYNCPROC, sync);\n}\n\nGLsync iglFenceSyncAPPLE(GLenum condition, GLbitfield flags) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(\n      CAN_CALL_glFenceSyncAPPLE, glFenceSyncAPPLE, PFNIGLFENCESYNCPROC, GL_ZERO, condition, flags);\n}\n\nvoid iglGetSyncivAPPLE(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetSyncivAPPLE,\n                          glGetSyncivAPPLE,\n                          PFNIGLGETSYNCIVPROC,\n                          sync,\n                          pname,\n                          bufSize,\n                          length,\n                          values);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_bindless_texture\n\n#if defined(GL_ARB_bindless_texture)\n#define CAN_CALL_glGetTextureHandleARB CAN_CALL_OPENGL\n#define CAN_CALL_glMakeTextureHandleResidentARB CAN_CALL_OPENGL\n#define CAN_CALL_glMakeTextureHandleNonResidentARB CAN_CALL_OPENGL\n#else\n#define CAN_CALL_glGetTextureHandleARB 0\n#define CAN_CALL_glMakeTextureHandleResidentARB 0\n#define CAN_CALL_glMakeTextureHandleNonResidentARB 0\n#endif\n\nGLuint64 iglGetTextureHandleARB(GLuint texture) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glGetTextureHandleARB,\n                                      glGetTextureHandleARB,\n                                      PFNIGLGETTEXTUREHANDLEPROC,\n                                      GL_ZERO,\n                                      texture);\n}\n\nvoid iglMakeTextureHandleResidentARB(GLuint64 handle) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glMakeTextureHandleResidentARB,\n                          glMakeTextureHandleResidentARB,\n                          PFNIGLMAKETEXTUREHANDLERESIDENTPROC,\n                          handle);\n}\n\nvoid iglMakeTextureHandleNonResidentARB(GLuint64 handle) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glMakeTextureHandleNonResidentARB,\n                          glMakeTextureHandleNonResidentARB,\n                          PFNIGLMAKETEXTUREHANDLENONRESIDENTPROC,\n                          handle);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_compute_shader\n\n#if defined(GL_VERSION_4_3) || defined(GL_ES_VERSION_3_1) || defined(GL_ARB_compute_shader)\n#define CAN_CALL_glDispatchCompute CAN_CALL\n#else\n#define CAN_CALL_glDispatchCompute 0\n#endif\n\nvoid iglDispatchCompute(GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDispatchCompute,\n                          glDispatchCompute,\n                          PFNIGLDISPATCHCOMPUTEPROC,\n                          numGroupsX,\n                          numGroupsY,\n                          numGroupsZ);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_draw_indirect\n\n#if defined(GL_VERSION_4_0) || defined(GL_ES_VERSION_3_1) || defined(GL_ARB_draw_indirect)\n#define CAN_CALL_glDrawElementsIndirect CAN_CALL\n#define CAN_CALL_glDrawArraysIndirect CAN_CALL\n#else\n#define CAN_CALL_glDrawElementsIndirect 0\n#define CAN_CALL_glDrawArraysIndirect 0\n#endif\n\nvoid iglDrawElementsIndirect(GLenum mode, GLenum type, const GLvoid* indirect) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDrawElementsIndirect,\n                          glDrawElementsIndirect,\n                          PFNIGLDRAWELEMENTSINDIRECTPROC,\n                          mode,\n                          type,\n                          indirect);\n}\n\nvoid iglDrawArraysIndirect(GLenum mode, const GLvoid* indirect) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDrawArraysIndirect,\n                          glDrawArraysIndirect,\n                          PFNIGLDRAWARRAYSINDIRECTPROC,\n                          mode,\n                          indirect);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_multi_draw_indirect\n\n#if defined(GL_VERSION_4_3) || defined(GL_ARB_multi_draw_indirect)\n#define CAN_CALL_glMultiDrawArraysIndirect CAN_CALL\n#define CAN_CALL_glMultiDrawElementsIndirect CAN_CALL\n#else\n#define CAN_CALL_glMultiDrawArraysIndirect 0\n#define CAN_CALL_glMultiDrawElementsIndirect 0\n#endif\n\nvoid iglMultiDrawArraysIndirect(GLenum mode,\n                                const void* indirect,\n                                GLsizei drawcount,\n                                GLsizei stride) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glMultiDrawArraysIndirect,\n                          glMultiDrawArraysIndirect,\n                          PFNIGLMULTIDRAWARRAYSINDIRECTPROC,\n                          mode,\n                          indirect,\n                          drawcount,\n                          stride);\n}\n\nvoid iglMultiDrawElementsIndirect(GLenum mode,\n                                  GLenum type,\n                                  const void* indirect,\n                                  GLsizei drawcount,\n                                  GLsizei stride) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glMultiDrawElementsIndirect,\n                          glMultiDrawElementsIndirect,\n                          PFNIGLMULTIDRAWELEMENTSINDIRECTPROC,\n                          mode,\n                          type,\n                          indirect,\n                          drawcount,\n                          stride);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_ES2_compatibility\n\n#if IGL_OPENGL_ES || defined(GL_VERSION_4_1) || defined(GL_ARB_ES2_compatibility)\n#define CAN_CALL_glClearDepthf OPENGL_ES_OR_CAN_CALL\n#else\n#define CAN_CALL_glClearDepthf 0\n#endif\n\nvoid iglClearDepthf(GLfloat depth){\n    GLEXTENSION_METHOD_BODY(CAN_CALL_glClearDepthf, glClearDepthf, PFNIGLCLEARDEPTHFPROC, depth)}\n///--------------------------------------\n/// MARK: - GL_ARB_framebuffer_object\n\n#if defined(GL_VERSION_3_0) || defined(GL_ES_VERSION_3_0) || defined(GL_ARB_framebuffer_object)\n#define CAN_CALL_glBlitFramebuffer CAN_CALL\n#define CAN_CALL_glFramebufferTextureLayer CAN_CALL\n#define CAN_CALL_glRenderbufferStorageMultisample CAN_CALL\n#else\n#define CAN_CALL_glBlitFramebuffer 0\n#define CAN_CALL_glFramebufferTextureLayer 0\n#define CAN_CALL_glRenderbufferStorageMultisample 0\n#endif\n\n#if defined(GL_VERSION_3_0) || defined(GL_ES_VERSION_2_0) || defined(GL_ARB_framebuffer_object)\n#define CAN_CALL_glBindFramebuffer OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glBindRenderbuffer OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glCheckFramebufferStatus OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glDeleteFramebuffers OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glDeleteRenderbuffers OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glFramebufferRenderbuffer OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glFramebufferTexture2D OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glGenerateMipmap OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glGenFramebuffers OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glGenRenderbuffers OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glGetFramebufferAttachmentParameteriv OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glGetRenderbufferParameteriv OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glIsFramebuffer OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glIsRenderbuffer OPENGL_ES_OR_CAN_CALL\n#define CAN_CALL_glRenderbufferStorage OPENGL_ES_OR_CAN_CALL\n#else\n#define CAN_CALL_glBindFramebuffer 0\n#define CAN_CALL_glBindRenderbuffer 0\n#define CAN_CALL_glBlitFramebuffer 0\n#define CAN_CALL_glCheckFramebufferStatus 0\n#define CAN_CALL_glDeleteFramebuffers 0\n#define CAN_CALL_glDeleteRenderbuffers 0\n#define CAN_CALL_glFramebufferRenderbuffer 0\n#define CAN_CALL_glFramebufferTexture2D 0\n#define CAN_CALL_glGenerateMipmap 0\n#define CAN_CALL_glGenFramebuffers 0\n#define CAN_CALL_glGenRenderbuffers 0\n#define CAN_CALL_glGetFramebufferAttachmentParameteriv 0\n#define CAN_CALL_glGetRenderbufferParameteriv 0\n#define CAN_CALL_glIsFramebuffer 0\n#define CAN_CALL_glIsRenderbuffer 0\n#define CAN_CALL_glRenderbufferStorage 0\n#endif\n\nvoid iglBindFramebuffer(GLenum target, GLuint framebuffer) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glBindFramebuffer,\n                          glBindFramebuffer,\n                          PFNIGLBINDFRAMEBUFFERPROC,\n                          target,\n                          framebuffer);\n}\n\nvoid iglBindRenderbuffer(GLenum target, GLuint renderbuffer) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glBindRenderbuffer,\n                          glBindRenderbuffer,\n                          PFNIGLBINDRENDERBUFFERPROC,\n                          target,\n                          renderbuffer);\n}\n\nvoid iglBlitFramebuffer(GLint srcX0,\n                        GLint srcY0,\n                        GLint srcX1,\n                        GLint srcY1,\n                        GLint dstX0,\n                        GLint dstY0,\n                        GLint dstX1,\n                        GLint dstY1,\n                        GLbitfield mask,\n                        GLenum filter) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glBlitFramebuffer,\n                          glBlitFramebuffer,\n                          PFNIGLBLITFRAMEBUFFERPROC,\n                          srcX0,\n                          srcY0,\n                          srcX1,\n                          srcY1,\n                          dstX0,\n                          dstY0,\n                          dstX1,\n                          dstY1,\n                          mask,\n                          filter);\n}\n\nGLenum iglCheckFramebufferStatus(GLenum target) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glCheckFramebufferStatus,\n                                      glCheckFramebufferStatus,\n                                      PFNIGLCHECKFRAMEBUFFERSTATUSPROC,\n                                      GL_FRAMEBUFFER_UNDEFINED,\n                                      target);\n}\n\nvoid iglDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDeleteFramebuffers,\n                          glDeleteFramebuffers,\n                          PFNIGLDELETEFRAMEBUFFERSPROC,\n                          n,\n                          framebuffers);\n}\n\nvoid iglDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDeleteRenderbuffers,\n                          glDeleteRenderbuffers,\n                          PFNIGLDELETERENDERBUFFERSPROC,\n                          n,\n                          renderbuffers);\n}\n\nvoid iglFramebufferRenderbuffer(GLenum target,\n                                GLenum attachment,\n                                GLenum renderbuffertarget,\n                                GLuint renderbuffer) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glFramebufferRenderbuffer,\n                          glFramebufferRenderbuffer,\n                          PFNIGLFRAMEBUFFERRENDERBUFFERPROC,\n                          target,\n                          attachment,\n                          renderbuffertarget,\n                          renderbuffer);\n}\n\nvoid iglFramebufferTexture2D(GLenum target,\n                             GLenum attachment,\n                             GLenum textarget,\n                             GLuint texture,\n                             GLint level) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glFramebufferTexture2D,\n                          glFramebufferTexture2D,\n                          PFNIGLFRAMEBUFFERTEXTURE2DPROC,\n                          target,\n                          attachment,\n                          textarget,\n                          texture,\n                          level);\n}\n\nvoid iglFramebufferTextureLayer(GLenum target,\n                                GLenum attachment,\n                                GLuint texture,\n                                GLint level,\n                                GLint layer) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glFramebufferTextureLayer,\n                          glFramebufferTextureLayer,\n                          PFNIGLFRAMEBUFFERTEXTURELAYERPROC,\n                          target,\n                          attachment,\n                          texture,\n                          level,\n                          layer);\n}\n\nvoid iglGenerateMipmap(GLenum target) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glGenerateMipmap, glGenerateMipmap, PFNIGLGENERATEMIPMAPPROC, target);\n}\n\nvoid iglGenFramebuffers(GLsizei n, GLuint* framebuffers) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glGenFramebuffers, glGenFramebuffers, PFNIGLGENFRAMEBUFFERSPROC, n, framebuffers);\n}\n\nvoid iglGenRenderbuffers(GLsizei n, GLuint* renderbuffers) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGenRenderbuffers,\n                          glGenRenderbuffers,\n                          PFNIGLGENRENDERBUFFERSPROC,\n                          n,\n                          renderbuffers);\n}\n\nvoid iglGetFramebufferAttachmentParameteriv(GLenum target,\n                                            GLenum attachment,\n                                            GLenum pname,\n                                            GLint* params) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetFramebufferAttachmentParameteriv,\n                          glGetFramebufferAttachmentParameteriv,\n                          PFNIGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC,\n                          target,\n                          attachment,\n                          pname,\n                          params);\n}\n\nvoid iglGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetRenderbufferParameteriv,\n                          glGetRenderbufferParameteriv,\n                          PFNIGLGETRENDERBUFFERPARAMETERIVPROC,\n                          target,\n                          pname,\n                          params);\n}\n\nGLboolean iglIsFramebuffer(GLuint framebuffer) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(\n      CAN_CALL_glIsFramebuffer, glIsFramebuffer, PFNIGLISFRAMEBUFFERPROC, GL_FALSE, framebuffer);\n}\n\nGLboolean iglIsRenderbuffer(GLuint renderbuffer) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glIsRenderbuffer,\n                                      glIsRenderbuffer,\n                                      PFNIGLISRENDERBUFFERPROC,\n                                      GL_FALSE,\n                                      renderbuffer);\n}\n\nvoid iglRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glRenderbufferStorage,\n                          glRenderbufferStorage,\n                          PFNIGLRENDERBUFFERSTORAGEPROC,\n                          target,\n                          internalformat,\n                          width,\n                          height);\n}\n\nvoid iglRenderbufferStorageMultisample(GLenum target,\n                                       GLsizei samples,\n                                       GLenum internalformat,\n                                       GLsizei width,\n                                       GLsizei height){\n    GLEXTENSION_METHOD_BODY(CAN_CALL_glRenderbufferStorageMultisample,\n                            glRenderbufferStorageMultisample,\n                            PFNIGLRENDERBUFFERSTORAGEMULTISAMPLEPROC,\n                            target,\n                            samples,\n                            internalformat,\n                            width,\n                            height)}\n///--------------------------------------\n/// MARK: - GL_ARB_invalidate_subdata\n\n#if defined(GL_VERSION_4_3) || defined(GL_ES_VERSION_3_0) || defined(GL_ARB_invalidate_subdata)\n#define CAN_CALL_glInvalidateFramebuffer CAN_CALL\n#else\n#define CAN_CALL_glInvalidateFramebuffer 0\n#endif\n\nvoid iglInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glInvalidateFramebuffer,\n                          glInvalidateFramebuffer,\n                          PFNIGLINVALIDATEFRAMEBUFFERPROC,\n                          target,\n                          numAttachments,\n                          attachments);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_map_buffer_range\n\n#if defined(GL_VERSION_3_0) || defined(GL_ES_VERSION_3_0) || defined(GL_ARB_map_buffer_range)\n#define CAN_CALL_glMapBufferRange CAN_CALL\n#else\n#define CAN_CALL_glMapBufferRange 0\n#endif\n\nvoid* iglMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glMapBufferRange,\n                                      glMapBufferRange,\n                                      PFNIGLMAPBUFFERRANGEPROC,\n                                      nullptr,\n                                      target,\n                                      offset,\n                                      length,\n                                      access);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_program_interface_query\n\n#if defined(GL_VERSION_4_3) || defined(GL_ES_VERSION_3_1) || defined(GL_ARB_program_interface_query)\n#define CAN_CALL_glGetProgramInterfaceiv CAN_CALL\n#define CAN_CALL_glGetProgramResourceIndex CAN_CALL\n#define CAN_CALL_glGetProgramResourceiv CAN_CALL\n#define CAN_CALL_glGetProgramResourceName CAN_CALL\n#else\n#define CAN_CALL_glGetProgramInterfaceiv 0\n#define CAN_CALL_glGetProgramResourceIndex 0\n#define CAN_CALL_glGetProgramResourceiv 0\n#define CAN_CALL_glGetProgramResourceName 0\n#endif\n\nvoid iglGetProgramInterfaceiv(GLuint program,\n                              GLenum programInterface,\n                              GLenum pname,\n                              GLint* params) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetProgramInterfaceiv,\n                          glGetProgramInterfaceiv,\n                          PFNIGLGETPROGRAMINTERFACEIVPROC,\n                          program,\n                          programInterface,\n                          pname,\n                          params);\n}\n\nGLuint iglGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar* name) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glGetProgramResourceIndex,\n                                      glGetProgramResourceIndex,\n                                      PFNIGLGETPROGRAMRESOURCEINDEXPROC,\n                                      GL_INVALID_INDEX,\n                                      program,\n                                      programInterface,\n                                      name);\n}\n\nvoid iglGetProgramResourceiv(GLuint program,\n                             GLenum programInterface,\n                             GLuint index,\n                             GLsizei propCount,\n                             const GLenum* props,\n                             GLsizei count,\n                             GLsizei* length,\n                             GLint* params) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetProgramResourceiv,\n                          glGetProgramResourceiv,\n                          PFNIGLGETPROGRAMRESOURCEIVPROC,\n                          program,\n                          programInterface,\n                          index,\n                          propCount,\n                          props,\n                          count,\n                          length,\n                          params)\n}\n\nvoid iglGetProgramResourceName(GLuint program,\n                               GLenum programInterface,\n                               GLuint index,\n                               GLsizei bufSize,\n                               GLsizei* length,\n                               char* name){\n    GLEXTENSION_METHOD_BODY(CAN_CALL_glGetProgramResourceName,\n                            glGetProgramResourceName,\n                            PFNIGLGETPROGRAMRESOURCENAMEPROC,\n                            program,\n                            programInterface,\n                            index,\n                            bufSize,\n                            length,\n                            name)}\n///--------------------------------------\n/// MARK: - GL_ARB_shader_image_load_store\n\n#if defined(GL_VERSION_4_2) || defined(GL_ES_VERSION_3_1) || defined(GL_ARB_shader_image_load_store)\n#define CAN_CALL_glBindImageTexture CAN_CALL\n#define CAN_CALL_glMemoryBarrier CAN_CALL\n#else\n#define CAN_CALL_glBindImageTexture 0\n#define CAN_CALL_glMemoryBarrier 0\n#endif\n\nvoid iglBindImageTexture(GLuint unit,\n                         GLuint texture,\n                         GLint level,\n                         GLboolean layered,\n                         GLint layer,\n                         GLenum access,\n                         GLenum format) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glBindImageTexture,\n                          glBindImageTexture,\n                          PFNIGLBINDIMAGETEXTUREPROC,\n                          unit,\n                          texture,\n                          level,\n                          layered,\n                          layer,\n                          access,\n                          format);\n}\n\nvoid iglMemoryBarrier(GLbitfield barriers) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glMemoryBarrier, glMemoryBarrier, PFNIGLMEMORYBARRIERPROC, barriers);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_sync\n\n#if defined(GL_VERSION_3_2) || defined(GL_ES_VERSION_3_0) || defined(GL_ARB_sync)\n#define CAN_CALL_glDeleteSync CAN_CALL\n#define CAN_CALL_glFenceSync CAN_CALL\n#define CAN_CALL_glGetSynciv CAN_CALL\n#else\n#define CAN_CALL_glDeleteSync 0\n#define CAN_CALL_glFenceSync 0\n#define CAN_CALL_glGetSynciv 0\n#endif\n\nvoid iglDeleteSync(GLsync sync) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDeleteSync, glDeleteSync, PFNIGLDELETESYNCPROC, sync);\n}\n\nGLsync iglFenceSync(GLenum condition, GLbitfield flags) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(\n      CAN_CALL_glFenceSync, glFenceSync, PFNIGLFENCESYNCPROC, GL_ZERO, condition, flags);\n}\n\nvoid iglGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glGetSynciv, glGetSynciv, PFNIGLGETSYNCIVPROC, sync, pname, bufSize, length, values);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_texture_storage\n\n#if defined(GL_VERSION_4_2) || defined(GL_ES_VERSION_3_0) || defined(GL_ARB_texture_storage)\n#define CAN_CALL_glTexStorage1D CAN_CALL_OPENGL\n#define CAN_CALL_glTexStorage2D CAN_CALL\n#if defined(GL_VERSION_2_0) || defined(GL_ES_VERSION_3_0) || defined(GL_OES_texture_3D)\n#define CAN_CALL_glTexStorage3D CAN_CALL\n#else\n#define CAN_CALL_glTexStorage3D 0\n#endif\n#else\n#define CAN_CALL_glTexStorage1D 0\n#define CAN_CALL_glTexStorage2D 0\n#define CAN_CALL_glTexStorage3D 0\n#endif\n\nvoid iglTexStorage1D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexStorage1D,\n                          glTexStorage1D,\n                          PFNIGLTEXSTORAGE1DPROC,\n                          target,\n                          levels,\n                          internalformat,\n                          width);\n}\n\nvoid iglTexStorage2D(GLenum target,\n                     GLsizei levels,\n                     GLenum internalformat,\n                     GLsizei width,\n                     GLsizei height) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexStorage2D,\n                          glTexStorage2D,\n                          PFNIGLTEXSTORAGE2DPROC,\n                          target,\n                          levels,\n                          internalformat,\n                          width,\n                          height);\n}\n\nvoid iglTexStorage3D(GLenum target,\n                     GLsizei levels,\n                     GLenum internalformat,\n                     GLsizei width,\n                     GLsizei height,\n                     GLsizei depth) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexStorage3D,\n                          glTexStorage3D,\n                          PFNIGLTEXSTORAGE3DPROC,\n                          target,\n                          levels,\n                          internalformat,\n                          width,\n                          height,\n                          depth);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_uniform_buffer_object\n\n#if defined(GL_VERSION_3_1) || defined(GL_ES_VERSION_3_0) || defined(GL_ARB_uniform_buffer_object)\n#define CAN_CALL_glBindBufferBase CAN_CALL\n#define CAN_CALL_glBindBufferRange CAN_CALL\n#define CAN_CALL_glGetActiveUniformsiv CAN_CALL\n#define CAN_CALL_glGetActiveUniformBlockiv CAN_CALL\n#define CAN_CALL_glGetActiveUniformBlockName CAN_CALL\n#define CAN_CALL_glGetUniformBlockIndex CAN_CALL\n#define CAN_CALL_glUniformBlockBinding CAN_CALL\n#else\n#define CAN_CALL_glBindBufferBase 0\n#define CAN_CALL_glBindBufferRange 0\n#define CAN_CALL_glGetActiveUniformsiv 0\n#define CAN_CALL_glGetActiveUniformBlockiv 0\n#define CAN_CALL_glGetActiveUniformBlockName 0\n#define CAN_CALL_glGetUniformBlockIndex 0\n#define CAN_CALL_glUniformBlockBinding 0\n#endif\n\nvoid iglBindBufferBase(GLenum target, GLuint index, GLuint buffer) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glBindBufferBase, glBindBufferBase, PFNIGLBINDBUFFERBASEPROC, target, index, buffer);\n}\n\nvoid iglBindBufferRange(GLenum target,\n                        GLuint index,\n                        GLuint buffer,\n                        GLintptr offset,\n                        GLsizeiptr size) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glBindBufferRange,\n                          glBindBufferRange,\n                          PFNIGLBINDBUFFERRANGEPROC,\n                          target,\n                          index,\n                          buffer,\n                          offset,\n                          size);\n}\n\nvoid iglGetActiveUniformsiv(GLuint program,\n                            GLsizei uniformCount,\n                            const GLuint* uniformIndices,\n                            GLenum pname,\n                            GLint* params) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetActiveUniformsiv,\n                          glGetActiveUniformsiv,\n                          PFNIGLGETACTIVEUNIFORMSIVPROC,\n                          program,\n                          uniformCount,\n                          uniformIndices,\n                          pname,\n                          params);\n}\n\nvoid iglGetActiveUniformBlockiv(GLuint program, GLuint index, GLenum pname, GLint* params) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetActiveUniformBlockiv,\n                          glGetActiveUniformBlockiv,\n                          PFNIGLGETACTIVEUNIFORMBLOCKIVPROC,\n                          program,\n                          index,\n                          pname,\n                          params);\n}\n\nvoid iglGetActiveUniformBlockName(GLuint program,\n                                  GLuint index,\n                                  GLsizei bufSize,\n                                  GLsizei* length,\n                                  GLchar* uniformBlockName) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetActiveUniformBlockName,\n                          glGetActiveUniformBlockName,\n                          PFNIGLGETACTIVEUNIFORMBLOCKNAMEPROC,\n                          program,\n                          index,\n                          bufSize,\n                          length,\n                          uniformBlockName);\n}\n\nGLuint iglGetUniformBlockIndex(GLuint program, const GLchar* name) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glGetUniformBlockIndex,\n                                      glGetUniformBlockIndex,\n                                      PFNIGLGETUNIFORMBLOCKINDEXPROC,\n                                      GL_INVALID_INDEX,\n                                      program,\n                                      name);\n}\n\nvoid iglUniformBlockBinding(GLuint pid, GLuint uniformBlockIndex, GLuint uniformBlockBinding) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glUniformBlockBinding,\n                          glUniformBlockBinding,\n                          PFNIGLUNIFORMBLOCKBINDINGPROC,\n                          pid,\n                          uniformBlockIndex,\n                          uniformBlockBinding);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_vertex_array_object\n\n#if defined(GL_VERSION_3_0) || defined(GL_ES_VERSION_3_0) || defined(GL_ARB_vertex_array_object)\n#define CAN_CALL_glBindVertexArray CAN_CALL\n#define CAN_CALL_glDeleteVertexArrays CAN_CALL\n#define CAN_CALL_glGenVertexArrays CAN_CALL\n#else\n#define CAN_CALL_glBindVertexArray 0\n#define CAN_CALL_glDeleteVertexArrays 0\n#define CAN_CALL_glGenVertexArrays 0\n#endif\n\nvoid iglBindVertexArray(GLuint vao) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glBindVertexArray, glBindVertexArray, PFNIGLBINDVERTEXARRAYPROC, vao);\n}\n\nvoid iglDeleteVertexArrays(GLsizei n, const GLuint* vertexArrays) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDeleteVertexArrays,\n                          glDeleteVertexArrays,\n                          PFNIGLDELETEVERTEXARRAYSPROC,\n                          n,\n                          vertexArrays);\n}\n\nvoid iglGenVertexArrays(GLsizei n, GLuint* vertexArrays) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glGenVertexArrays, glGenVertexArrays, PFNIGLGENVERTEXARRAYSPROC, n, vertexArrays);\n}\n\n///--------------------------------------\n/// MARK: - GL_ARB_polygon_offset_clamp\n\n#if defined(GL_ARB_polygon_offset_clamp)\n#define CAN_CALL_glPolygonOffsetClamp CAN_CALL\n#else\n#define CAN_CALL_glPolygonOffsetClamp 0\n#endif\n\nvoid iglPolygonOffsetClamp(float factor, float units, float clamp) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glPolygonOffsetClamp,\n                          glPolygonOffsetClamp,\n                          PFNPOLYGONOFFSETCLAMPPROC,\n                          factor,\n                          units,\n                          clamp);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_debug_label\n\n#if defined(GL_EXT_debug_label)\n#define CAN_CALL_glLabelObjectEXT CAN_CALL\n#else\n#define CAN_CALL_glLabelObjectEXT 0\n#endif\n\nvoid iglLabelObjectEXT(GLenum identifier, GLuint name, GLsizei length, const char* label) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glLabelObjectEXT,\n                          glLabelObjectEXT,\n                          PFNIGLOBJECTLABELPROC,\n                          identifier,\n                          name,\n                          length,\n                          label);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_debug_marker\n\n#if defined(GL_EXT_debug_marker)\n#define CAN_CALL_glInsertEventMarkerEXT CAN_CALL\n#define CAN_CALL_glPopGroupMarkerEXT CAN_CALL\n#define CAN_CALL_glPushGroupMarkerEXT CAN_CALL\n#else\n#define CAN_CALL_glInsertEventMarkerEXT 0\n#define CAN_CALL_glPopGroupMarkerEXT 0\n#define CAN_CALL_glPushGroupMarkerEXT 0\n#endif\n\nvoid iglInsertEventMarkerEXT(GLenum /*source*/,\n                             GLenum /*type*/,\n                             GLuint /*id*/,\n                             GLenum /*severity*/,\n                             GLsizei length,\n                             const GLchar* buf) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glInsertEventMarkerEXT,\n                          glInsertEventMarkerEXT,\n                          PFNIGLINSERTEVENTMARKERPROC,\n                          length,\n                          buf);\n}\n\nvoid iglPopGroupMarkerEXT() {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glPopGroupMarkerEXT, glPopGroupMarkerEXT, PFNIGLPOPGROUPMARKERPROC);\n}\n\nvoid iglPushGroupMarkerEXT(GLenum /*source*/,\n                           GLuint /*id*/,\n                           GLsizei length,\n                           const GLchar* message) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glPushGroupMarkerEXT,\n                          glPushGroupMarkerEXT,\n                          PFNIGLPUSHGROUPMARKERPROC,\n                          length,\n                          message);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_discard_framebuffer\n\n#if defined(GL_EXT_discard_framebuffer)\n#define CAN_CALL_glDiscardFramebufferEXT CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glDiscardFramebufferEXT 0\n#endif\n\nvoid iglDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum* attachments) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDiscardFramebufferEXT,\n                          glDiscardFramebufferEXT,\n                          PFNIGLDISCARDFRAMEBUFFERPROC,\n                          target,\n                          numAttachments,\n                          attachments);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_draw_buffers\n\n#if defined(GL_EXT_draw_buffers)\n#define CAN_CALL_glDrawBuffersEXT CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glDrawBuffersEXT 0\n#endif\n\nvoid iglDrawBuffersEXT(GLsizei n, const GLenum* bufs) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glDrawBuffersEXT, glDrawBuffersEXT, PFNIGLDRAWBUFFERSPROC, n, bufs);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_framebuffer_blit\n\n#if defined(GL_EXT_framebuffer_blit)\n#define CAN_CALL_glBlitFramebufferEXT CAN_CALL_OPENGL\n#else\n#define CAN_CALL_glBlitFramebufferEXT 0\n#endif\n\nvoid iglBlitFramebufferEXT(GLint srcX0,\n                           GLint srcY0,\n                           GLint srcX1,\n                           GLint srcY1,\n                           GLint dstX0,\n                           GLint dstY0,\n                           GLint dstX1,\n                           GLint dstY1,\n                           GLbitfield mask,\n                           GLenum filter) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glBlitFramebufferEXT,\n                          glBlitFramebufferEXT,\n                          PFNIGLBLITFRAMEBUFFERPROC,\n                          srcX0,\n                          srcY0,\n                          srcX1,\n                          srcY1,\n                          dstX0,\n                          dstY0,\n                          dstX1,\n                          dstY1,\n                          mask,\n                          filter);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_map_buffer_range\n\n#if defined(GL_EXT_map_buffer_range)\n#define CAN_CALL_glMapBufferRangeEXT CAN_CALL\n#else\n#define CAN_CALL_glMapBufferRangeEXT 0\n#endif\n\nvoid* iglMapBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glMapBufferRangeEXT,\n                                      glMapBufferRangeEXT,\n                                      PFNIGLMAPBUFFERRANGEPROC,\n                                      nullptr,\n                                      target,\n                                      offset,\n                                      length,\n                                      access);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_memory_object\n\n#if defined(GL_EXT_memory_object)\n#define CAN_CALL_glCreateMemoryObjectsEXT CAN_CALL\n#define CAN_CALL_glDeleteMemoryObjectsEXT CAN_CALL\n#define CAN_CALL_glTexStorageMem2DEXT CAN_CALL\n#define CAN_CALL_glTexStorageMem3DEXT CAN_CALL\n#else\n#define CAN_CALL_glCreateMemoryObjectsEXT 0\n#define CAN_CALL_glDeleteMemoryObjectsEXT 0\n#define CAN_CALL_glTexStorageMem2DEXT 0\n#define CAN_CALL_glTexStorageMem3DEXT 0\n#endif\n\nvoid iglCreateMemoryObjectsEXT(GLsizei n, GLuint* memoryObjects) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glCreateMemoryObjectsEXT,\n                          glCreateMemoryObjectsEXT,\n                          PFNIGLCREATEMEMORYOBJECTSPROC,\n                          n,\n                          memoryObjects);\n}\n\nvoid iglDeleteMemoryObjectsEXT(GLsizei n, const GLuint* memoryObjects) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDeleteMemoryObjectsEXT,\n                          glDeleteMemoryObjectsEXT,\n                          PFNIGLDELETEMEMORYOBJECTSPROC,\n                          n,\n                          memoryObjects);\n}\n\nvoid iglTexStorageMem2DEXT(GLenum target,\n                           GLsizei levels,\n                           GLenum internalFormat,\n                           GLsizei width,\n                           GLsizei height,\n                           GLuint memory,\n                           GLuint64 offset) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexStorageMem2DEXT,\n                          glTexStorageMem2DEXT,\n                          PFNIGLTEXSTORAGEMEM2DPROC,\n                          target,\n                          levels,\n                          internalFormat,\n                          width,\n                          height,\n                          memory,\n                          offset);\n}\n\nvoid iglTexStorageMem3DEXT(GLenum target,\n                           GLsizei levels,\n                           GLenum internalFormat,\n                           GLsizei width,\n                           GLsizei height,\n                           GLsizei depth,\n                           GLuint memory,\n                           GLuint64 offset) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexStorageMem3DEXT,\n                          glTexStorageMem3DEXT,\n                          PFNIGLTEXSTORAGEMEM3DPROC,\n                          target,\n                          levels,\n                          internalFormat,\n                          width,\n                          height,\n                          depth,\n                          memory,\n                          offset);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_memory_object_fd\n\n#if defined(GL_EXT_memory_object_fd)\n#define CAN_CALL_glImportMemoryFdEXT CAN_CALL\n#else\n#define CAN_CALL_glImportMemoryFdEXT 0\n#endif\n\nvoid iglImportMemoryFdEXT(GLuint memory, GLuint64 size, GLenum handleType, GLint fd) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glImportMemoryFdEXT,\n                          glImportMemoryFdEXT,\n                          PFNIGLIMPORTMEMORYFDPROC,\n                          memory,\n                          size,\n                          handleType,\n                          fd);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_multisampled_render_to_texture\n\n#if defined(GL_EXT_multisampled_render_to_texture)\n#define CAN_CALL_glFramebufferTexture2DMultisampleEXT CAN_CALL_OPENGL_ES\n#define CAN_CALL_glRenderbufferStorageMultisampleEXT CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glFramebufferTexture2DMultisampleEXT 0\n#define CAN_CALL_glRenderbufferStorageMultisampleEXT 0\n#endif\n\nvoid iglFramebufferTexture2DMultisampleEXT(GLenum target,\n                                           GLenum attachment,\n                                           GLenum textarget,\n                                           GLuint texture,\n                                           GLint level,\n                                           GLsizei samples) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glFramebufferTexture2DMultisampleEXT,\n                          glFramebufferTexture2DMultisampleEXT,\n                          PFNIGLFRAMEBUFFERTEXTURE2DMULTISAMPLEPROC,\n                          target,\n                          attachment,\n                          textarget,\n                          texture,\n                          level,\n                          samples)\n}\n\nvoid iglRenderbufferStorageMultisampleEXT(GLenum target,\n                                          GLsizei samples,\n                                          GLenum internalformat,\n                                          GLsizei width,\n                                          GLsizei height){\n    GLEXTENSION_METHOD_BODY(CAN_CALL_glRenderbufferStorageMultisampleEXT,\n                            glRenderbufferStorageMultisampleEXT,\n                            PFNIGLRENDERBUFFERSTORAGEMULTISAMPLEPROC,\n                            target,\n                            samples,\n                            internalformat,\n                            width,\n                            height)}\n///--------------------------------------\n/// MARK: - GL_EXT_shader_image_load_store\n\n#if defined(GL_EXT_shader_image_load_store)\n#define CAN_CALL_glBindImageTextureEXT CAN_CALL\n#define CAN_CALL_glMemoryBarrierEXT CAN_CALL\n#else\n#define CAN_CALL_glBindImageTextureEXT 0\n#define CAN_CALL_glMemoryBarrierEXT 0\n#endif\n\nvoid iglBindImageTextureEXT(GLuint unit,\n                            GLuint texture,\n                            GLint level,\n                            GLboolean layered,\n                            GLint layer,\n                            GLenum access,\n                            GLenum format) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glBindImageTextureEXT,\n                          glBindImageTextureEXT,\n                          PFNIGLBINDIMAGETEXTUREPROC,\n                          unit,\n                          texture,\n                          level,\n                          layered,\n                          layer,\n                          access,\n                          format);\n}\n\nvoid iglMemoryBarrierEXT(GLbitfield barriers) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glMemoryBarrierEXT, glMemoryBarrierEXT, PFNIGLMEMORYBARRIERPROC, barriers);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_texture_storage\n\n#if defined(GL_EXT_texture_storage)\n#define CAN_CALL_glTexStorage1DEXT CAN_CALL_OPENGL\n#define CAN_CALL_glTexStorage2DEXT CAN_CALL\n#if defined(GL_VERSION_2_0) || defined(GL_OES_texture_3D)\n#define CAN_CALL_glTexStorage3DEXT CAN_CALL\n#else\n#define CAN_CALL_glTexStorage3DEXT 0\n#endif\n#else\n#define CAN_CALL_glTexStorage1DEXT 0\n#define CAN_CALL_glTexStorage2DEXT 0\n#define CAN_CALL_glTexStorage3DEXT 0\n#endif\n\nvoid iglTexStorage1DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexStorage1DEXT,\n                          glTexStorage1DEXT,\n                          PFNIGLTEXSTORAGE1DPROC,\n                          target,\n                          levels,\n                          internalformat,\n                          width)\n}\n\nvoid iglTexStorage2DEXT(GLenum target,\n                        GLsizei levels,\n                        GLenum internalformat,\n                        GLsizei width,\n                        GLsizei height) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexStorage2DEXT,\n                          glTexStorage2DEXT,\n                          PFNIGLTEXSTORAGE2DPROC,\n                          target,\n                          levels,\n                          internalformat,\n                          width,\n                          height)\n}\n\nvoid iglTexStorage3DEXT(GLenum target,\n                        GLsizei levels,\n                        GLenum internalformat,\n                        GLsizei width,\n                        GLsizei height,\n                        GLsizei depth){GLEXTENSION_METHOD_BODY(CAN_CALL_glTexStorage3DEXT,\n                                                               glTexStorage3DEXT,\n                                                               PFNIGLTEXSTORAGE3DPROC,\n                                                               target,\n                                                               levels,\n                                                               internalformat,\n                                                               width,\n                                                               height,\n                                                               depth)}\n///--------------------------------------\n/// MARK: - GL_IMG_multisampled_render_to_texture\n\n#if defined(GL_IMG_multisampled_render_to_texture)\n#define CAN_CALL_glFramebufferTexture2DMultisampleIMG CAN_CALL_OPENGL_ES\n#define CAN_CALL_glRenderbufferStorageMultisampleIMG CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glFramebufferTexture2DMultisampleIMG 0\n#define CAN_CALL_glRenderbufferStorageMultisampleIMG 0\n#endif\n\nvoid iglFramebufferTexture2DMultisampleIMG(GLenum target,\n                                           GLenum attachment,\n                                           GLenum textarget,\n                                           GLuint texture,\n                                           GLint level,\n                                           GLsizei samples) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glFramebufferTexture2DMultisampleIMG,\n                          glFramebufferTexture2DMultisampleIMG,\n                          PFNIGLFRAMEBUFFERTEXTURE2DMULTISAMPLEPROC,\n                          target,\n                          attachment,\n                          textarget,\n                          texture,\n                          level,\n                          samples)\n}\n\nvoid iglRenderbufferStorageMultisampleIMG(GLenum target,\n                                          GLsizei samples,\n                                          GLenum internalformat,\n                                          GLsizei width,\n                                          GLsizei height){\n    GLEXTENSION_METHOD_BODY(CAN_CALL_glRenderbufferStorageMultisampleIMG,\n                            glRenderbufferStorageMultisampleIMG,\n                            PFNIGLRENDERBUFFERSTORAGEMULTISAMPLEPROC,\n                            target,\n                            samples,\n                            internalformat,\n                            width,\n                            height)}\n///--------------------------------------\n/// MARK: - GL_KHR_debug\n\n#if defined(GL_KHR_debug)\n#define CAN_CALL_glDebugMessageCallbackKHR CAN_CALL\n#define CAN_CALL_glDebugMessageInsertKHR CAN_CALL\n#define CAN_CALL_glGetDebugMessageLogKHR CAN_CALL\n#define CAN_CALL_glObjectLabelKHR CAN_CALL\n#define CAN_CALL_glPopDebugGroupKHR CAN_CALL\n#define CAN_CALL_glPushDebugGroupKHR CAN_CALL\n#else\n#define CAN_CALL_glDebugMessageCallbackKHR 0\n#define CAN_CALL_glDebugMessageInsertKHR 0\n#define CAN_CALL_glGetDebugMessageLogKHR 0\n#define CAN_CALL_glObjectLabelKHR 0\n#define CAN_CALL_glPopDebugGroupKHR 0\n#define CAN_CALL_glPushDebugGroupKHR 0\n#endif\n\n#if IGL_OPENGL\n#define DebugMessageCallbackKHR glDebugMessageCallback\n#define DebugMessageInsertKHR glDebugMessageInsert\n#define GetDebugMessageLogKHR glGetDebugMessageLog\n#define ObjectLabelKHR glObjectLabel\n#define PopDebugGroupKHR glPopDebugGroup\n#define PushDebugGroupKHR glPushDebugGroup\n#else\n#define DebugMessageCallbackKHR glDebugMessageCallbackKHR\n#define DebugMessageInsertKHR glDebugMessageInsertKHR\n#define GetDebugMessageLogKHR glGetDebugMessageLogKHR\n#define ObjectLabelKHR glObjectLabelKHR\n#define PopDebugGroupKHR glPopDebugGroupKHR\n#define PushDebugGroupKHR glPushDebugGroupKHR\n#endif\n\nvoid iglDebugMessageCallbackKHR(PFNIGLDEBUGPROC callback, const void* userParam) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDebugMessageCallbackKHR,\n                          DebugMessageCallbackKHR,\n                          PFNIGLDEBUGMESSAGECALLBACKPROC,\n                          callback,\n                          userParam);\n}\n\nvoid iglDebugMessageInsertKHR(GLenum source,\n                              GLenum type,\n                              GLuint id,\n                              GLenum severity,\n                              GLsizei length,\n                              const GLchar* buf) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDebugMessageInsertKHR,\n                          DebugMessageInsertKHR,\n                          PFNIGLDEBUGMESSAGEINSERTPROC,\n                          source,\n                          type,\n                          id,\n                          severity,\n                          length,\n                          buf);\n}\n\nGLuint iglGetDebugMessageLogKHR(GLuint count,\n                                GLsizei bufSize,\n                                GLenum* sources,\n                                GLenum* types,\n                                GLuint* ids,\n                                GLenum* severities,\n                                GLsizei* lengths,\n                                GLchar* messageLog) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glGetDebugMessageLogKHR,\n                                      GetDebugMessageLogKHR,\n                                      PFNIGLGETDEBUGMESSAGELOGPROC,\n                                      0,\n                                      count,\n                                      bufSize,\n                                      sources,\n                                      types,\n                                      ids,\n                                      severities,\n                                      lengths,\n                                      messageLog);\n}\n\nvoid iglObjectLabelKHR(GLenum identifier, GLuint name, GLsizei length, const char* label) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glObjectLabelKHR,\n                          ObjectLabelKHR,\n                          PFNIGLOBJECTLABELPROC,\n                          identifier,\n                          name,\n                          length,\n                          label);\n}\n\nvoid iglPopDebugGroupKHR() {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glPopDebugGroupKHR, PopDebugGroupKHR, PFNIGLPOPDEBUGGROUPPROC);\n}\nvoid iglPushDebugGroupKHR(GLenum source, GLuint id, GLsizei length, const GLchar* message) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glPushDebugGroupKHR,\n                          PushDebugGroupKHR,\n                          PFNIGLPUSHDEBUGGROUPPROC,\n                          source,\n                          id,\n                          length,\n                          message);\n}\n\n///--------------------------------------\n/// MARK: - GL_NV_bindless_texture\n\n#if defined(GL_NV_bindless_texture)\n#define CAN_CALL_glGetTextureHandleNV CAN_CALL\n#define CAN_CALL_glMakeTextureHandleResidentNV CAN_CALL\n#define CAN_CALL_glMakeTextureHandleNonResidentNV CAN_CALL\n#else\n#define CAN_CALL_glGetTextureHandleNV 0\n#define CAN_CALL_glMakeTextureHandleResidentNV 0\n#define CAN_CALL_glMakeTextureHandleNonResidentNV 0\n#endif\n\nGLuint64 iglGetTextureHandleNV(GLuint texture) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(CAN_CALL_glGetTextureHandleNV,\n                                      glGetTextureHandleNV,\n                                      PFNIGLGETTEXTUREHANDLEPROC,\n                                      GL_ZERO,\n                                      texture);\n}\n\nvoid iglMakeTextureHandleResidentNV(GLuint64 handle) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glMakeTextureHandleResidentNV,\n                          glMakeTextureHandleResidentNV,\n                          PFNIGLMAKETEXTUREHANDLERESIDENTPROC,\n                          handle);\n}\n\nvoid iglMakeTextureHandleNonResidentNV(GLuint64 handle) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glMakeTextureHandleNonResidentNV,\n                          glMakeTextureHandleNonResidentNV,\n                          PFNIGLMAKETEXTUREHANDLENONRESIDENTPROC,\n                          handle);\n}\n\n///--------------------------------------\n/// MARK: - GL_NV_instanced_arrays\n\n#if defined(GL_NV_instanced_arrays)\n#define CAN_CALL_glVertexAttribDivisorNV CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glVertexAttribDivisorNV 0\n#endif\n\nvoid iglVertexAttribDivisorNV(GLuint index, GLuint divisor) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glVertexAttribDivisorNV,\n                          glVertexAttribDivisorNV,\n                          PFNIGLVERTEXATTRIBDIVISORPROC,\n                          index,\n                          divisor);\n}\n\n///--------------------------------------\n/// MARK: - GL_OVR_multiview\n\n#if defined(GL_OVR_multiview)\n#define CAN_CALL_glFramebufferTextureMultiviewOVR CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glFramebufferTextureMultiviewOVR 0\n#endif\n\nvoid iglFramebufferTextureMultiviewOVR(GLenum target,\n                                       GLenum attachment,\n                                       GLuint texture,\n                                       GLint level,\n                                       GLint baseViewIndex,\n                                       GLsizei numViews){\n    GLEXTENSION_METHOD_BODY(CAN_CALL_glFramebufferTextureMultiviewOVR,\n                            glFramebufferTextureMultiviewOVR,\n                            PFNIGLFRAMEBUFFERTEXTUREMULTIVIEWPROC,\n                            target,\n                            attachment,\n                            texture,\n                            level,\n                            baseViewIndex,\n                            numViews)}\n///--------------------------------------\n/// MARK: - GL_OVR_multiview_multisampled_render_to_texture\n\n#if defined(GL_OVR_multiview_multisampled_render_to_texture)\n#define CAN_CALL_glFramebufferTextureMultisampleMultiviewOVR CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glFramebufferTextureMultisampleMultiviewOVR 0\n#endif\n\nvoid iglFramebufferTextureMultisampleMultiviewOVR(GLenum target,\n                                                  GLenum attachment,\n                                                  GLuint texture,\n                                                  GLint level,\n                                                  GLsizei samples,\n                                                  GLint baseViewIndex,\n                                                  GLsizei numViews){\n    GLEXTENSION_METHOD_BODY(CAN_CALL_glFramebufferTextureMultisampleMultiviewOVR,\n                            glFramebufferTextureMultisampleMultiviewOVR,\n                            PFNIGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWPROC,\n                            target,\n                            attachment,\n                            texture,\n                            level,\n                            samples,\n                            baseViewIndex,\n                            numViews)}\n\n///--------------------------------------\n/// MARK: - GL_OES_mapbuffer\n\n#if defined(GL_OES_mapbuffer)\n#define CAN_CALL_glMapBufferOES CAN_CALL_OPENGL_ES\n#define CAN_CALL_glUnmapBufferOES CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glMapBufferOES 0\n#define CAN_CALL_glUnmapBufferOES 0\n#endif\n\nvoid* iglMapBufferOES(GLenum target, GLbitfield access) {\n  GLEXTENSION_METHOD_BODY_WITH_RETURN(\n      CAN_CALL_glMapBufferOES, glMapBufferOES, PFNIGLMAPBUFFERPROC, nullptr, target, access);\n}\n\nvoid iglUnmapBufferOES(GLenum target) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glUnmapBufferOES, glUnmapBufferOES, PFNIGLUNMAPBUFFERPROC, target);\n}\n\n///--------------------------------------\n/// MARK: - GL_OES_texture_3D\n\n#if defined(GL_OES_texture_3D)\n#define CAN_CALL_glCompressedTexImage3DOES OPENGL_OR_CAN_CALL\n#define CAN_CALL_glCompressedTexSubImage3DOES OPENGL_OR_CAN_CALL\n#define CAN_CALL_glTexImage3DOES CAN_CALL_OPENGL_ES\n#define CAN_CALL_glTexSubImage3DOES CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glCompressedTexImage3DOES 0\n#define CAN_CALL_glCompressedTexSubImage3DOES 0\n#define CAN_CALL_glTexImage3DOES 0\n#define CAN_CALL_glTexSubImage3DOES 0\n#endif\n\nvoid iglCompressedTexImage3DOES(GLenum target,\n                                GLint level,\n                                GLenum internalformat,\n                                GLsizei width,\n                                GLsizei height,\n                                GLsizei depth,\n                                GLint border,\n                                GLsizei imageSize,\n                                const GLvoid* data) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glCompressedTexImage3DOES,\n                          glCompressedTexImage3DOES,\n                          PFNIGLCOMPRESSEDTEXIMAGE3DPROC,\n                          target,\n                          level,\n                          internalformat,\n                          width,\n                          height,\n                          depth,\n                          border,\n                          imageSize,\n                          data);\n}\n\nvoid iglCompressedTexSubImage3DOES(GLenum target,\n                                   GLint level,\n                                   GLint xoffset,\n                                   GLint yoffset,\n                                   GLint zoffset,\n                                   GLsizei width,\n                                   GLsizei height,\n                                   GLsizei depth,\n                                   GLenum format,\n                                   GLsizei imageSize,\n                                   const GLvoid* data) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glCompressedTexSubImage3DOES,\n                          glCompressedTexSubImage3DOES,\n                          PFNIGLCOMPRESSEDTEXSUBIMAGE3DPROC,\n                          target,\n                          level,\n                          xoffset,\n                          yoffset,\n                          zoffset,\n                          width,\n                          height,\n                          depth,\n                          format,\n                          imageSize,\n                          data);\n}\n\nvoid iglTexImage3DOES(GLenum target,\n                      GLint level,\n                      GLint internalformat,\n                      GLsizei width,\n                      GLsizei height,\n                      GLsizei depth,\n                      GLint border,\n                      GLenum format,\n                      GLenum type,\n                      const GLvoid* data) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexImage3DOES,\n                          glTexImage3DOES,\n                          PFNIGLTEXIMAGE3DPROC,\n                          target,\n                          level,\n                          internalformat,\n                          width,\n                          height,\n                          depth,\n                          border,\n                          format,\n                          type,\n                          data);\n}\n\nvoid iglTexSubImage3DOES(GLenum target,\n                         GLint level,\n                         GLint xoffset,\n                         GLint yoffset,\n                         GLint zoffset,\n                         GLsizei width,\n                         GLsizei height,\n                         GLsizei depth,\n                         GLenum format,\n                         GLenum type,\n                         const GLvoid* pixels) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glTexSubImage3DOES,\n                          glTexSubImage3DOES,\n                          PFNIGLTEXSUBIMAGE3DPROC,\n                          target,\n                          level,\n                          xoffset,\n                          yoffset,\n                          zoffset,\n                          width,\n                          height,\n                          depth,\n                          format,\n                          type,\n                          pixels);\n}\n\n///--------------------------------------\n/// MARK: - GL_OES_vertex_array_object\n\n#if defined(GL_OES_vertex_array_object)\n#define CAN_CALL_glBindVertexArrayOES CAN_CALL_OPENGL_ES\n#define CAN_CALL_glDeleteVertexArraysOES CAN_CALL_OPENGL_ES\n#define CAN_CALL_glGenVertexArraysOES CAN_CALL_OPENGL_ES\n#else\n#define CAN_CALL_glBindVertexArrayOES 0\n#define CAN_CALL_glDeleteVertexArraysOES 0\n#define CAN_CALL_glGenVertexArraysOES 0\n#endif\n\nvoid iglBindVertexArrayOES(GLuint vao) {\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glBindVertexArrayOES, glBindVertexArrayOES, PFNIGLBINDVERTEXARRAYPROC, vao);\n}\n\nvoid iglDeleteVertexArraysOES(GLsizei n, const GLuint* vertexArrays) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glDeleteVertexArraysOES,\n                          glDeleteVertexArraysOES,\n                          PFNIGLDELETEVERTEXARRAYSPROC,\n                          n,\n                          vertexArrays);\n}\n\nvoid iglGenVertexArraysOES(GLsizei n, GLuint* vertexArrays) {\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGenVertexArraysOES,\n                          glGenVertexArraysOES,\n                          PFNIGLGENVERTEXARRAYSPROC,\n                          n,\n                          vertexArrays);\n}\n\n///--------------------------------------\n/// MARK: - GL_EXT_timer_query\n\n#if defined(GL_EXT_timer_query) || defined(GL_EXT_disjoint_timer_query)\n#define CAN_CALL_glBeginQuery OPENGL_OR_CAN_CALL\n#define CAN_CALL_glDeleteQueries OPENGL_OR_CAN_CALL\n#define CAN_CALL_glEndQuery OPENGL_OR_CAN_CALL\n#define CAN_CALL_glGenQueries OPENGL_OR_CAN_CALL\n#define CAN_CALL_glGetQueryObjectui64v OPENGL_OR_CAN_CALL\n#define CAN_CALL_glGetQueryObjectiv OPENGL_OR_CAN_CALL\n#define CAN_CALL_glQueryCounter OPENGL_OR_CAN_CALL\n#else\n#define CAN_CALL_glBeginQuery 0\n#define CAN_CALL_glDeleteQueries 0\n#define CAN_CALL_glEndQuery 0\n#define CAN_CALL_glGenQueries 0\n#define CAN_CALL_glGetQueryObjectiv 0\n#define CAN_CALL_glGetQueryObjectui64v 0\n#define CAN_CALL_glQueryCounter 0\n#endif\n\nvoid iglBeginQuery(GLenum target, GLuint id) {\n#if IGL_OPENGL_ES\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glBeginQuery, glBeginQueryEXT, PFNIGLBEGINQUERYPROC, target, id);\n#else\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glBeginQuery, glBeginQuery, PFNIGLBEGINQUERYPROC, target, id);\n#endif\n}\n\nvoid iglDeleteQueries(GLsizei n, GLuint* queries) {\n#if IGL_OPENGL_ES\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glDeleteQueries, glDeleteQueriesEXT, PFNIGLDELETEQUERIESPROC, n, queries);\n#else\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glDeleteQueries, glDeleteQueries, PFNIGLDELETEQUERIESPROC, n, queries);\n#endif\n}\n\nvoid iglEndQuery(GLenum target) {\n#if IGL_OPENGL_ES\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glEndQuery, glEndQueryEXT, PFNIGLENDQUERYPROC, target);\n#else\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glEndQuery, glEndQuery, PFNIGLENDQUERYPROC, target);\n#endif\n}\n\nvoid iglGenQueries(GLsizei n, GLuint* queries) {\n#if IGL_OPENGL_ES\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGenQueries, glGenQueriesEXT, PFNIGLGENQUERIESPROC, n, queries);\n#else\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGenQueries, glGenQueries, PFNIGLGENQUERIESPROC, n, queries);\n#endif\n}\n\nvoid iglGetQueryObjectiv(GLuint id, GLenum pname, GLint* params) {\n#if IGL_OPENGL_ES\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetQueryObjectiv,\n                          glGetQueryObjectivEXT,\n                          PFNIGLGETQUERYOBJECTIVPROC,\n                          id,\n                          pname,\n                          params);\n#else\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetQueryObjectiv,\n                          glGetQueryObjectiv,\n                          PFNIGLGETQUERYOBJECTIVPROC,\n                          id,\n                          pname,\n                          params);\n#endif\n}\n\nvoid iglGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64* params) {\n#if IGL_OPENGL_ES\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetQueryObjectui64v,\n                          glGetQueryObjectui64vEXT,\n                          PFNIGLGETQUERYOBJECTUI64VPROC,\n                          id,\n                          pname,\n                          params);\n#else\n  GLEXTENSION_METHOD_BODY(CAN_CALL_glGetQueryObjectui64v,\n                          glGetQueryObjectui64v,\n                          PFNIGLGETQUERYOBJECTUI64VPROC,\n                          id,\n                          pname,\n                          params);\n#endif\n}\n\nvoid iglQueryCounter(GLuint id, GLenum target) {\n#if IGL_OPENGL_ES\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glQueryCounter, glQueryCounterEXT, PFNIGLQUERYCOUNTERPROC, id, target);\n#else\n  GLEXTENSION_METHOD_BODY(\n      CAN_CALL_glQueryCounter, glQueryCounter, PFNIGLQUERYCOUNTERPROC, id, target);\n#endif\n}\nIGL_EXTERN_END\n\n// NOLINTEND(readability-identifier-naming)\n"
  },
  {
    "path": "src/igl/opengl/GLFunc.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Macros.h>\n#include <igl/opengl/GLIncludes.h>\n\n//\n// Note: The below summary explains why we need this.\n//\n// When using EGL (Android, OpenGL ES on Windows, emscripten, Linux), we must load extensions\n// dynamically at runtime. We do not need this for Apple platforms as Apple includes supported\n// extensions in its header files.\n//\n// To simplify use of these extensions, these methods are always available using an igl prefix.\n// For EGL platforms, these will be loaded dynamically if available. For WGL, they will be loaded\n// dynamically if not provided by GLEW. If provided by GLEW, the method will be called directly. For\n// Apple, the method will be called directly if it is available. Whenever the method is not\n// available or dynamic load fails, these methods will assert. It is on the caller to ensure that\n// methods should be available by doing runtime checks for extensions.\n\nIGL_EXTERN_BEGIN\n\n// Definitions for IGL extension method function pointers.\n// These are defined to accommodate platforms where the pointer types are not pre-defined. These\n// definitions use a PFNIGL prefix to ensure they don't collide with function pointer types\n// defined by other OpenGL loaders. These definitions also omit any extension-specific suffix (e.g.,\n// EXT) unless it is needed to disambiguate them.\nusing PFNIGLBEGINQUERYPROC = void (*)(GLenum target, GLuint id);\nusing PFNIGLBINDBUFFERBASEPROC = void (*)(GLenum target, GLuint index, GLuint buffer);\nusing PFNIGLBINDBUFFERRANGEPROC =\n    void (*)(GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size);\nusing PFNIGLBINDFRAMEBUFFERPROC = void (*)(GLenum target, GLuint framebuffer);\nusing PFNIGLBINDIMAGETEXTUREPROC = void (*)(GLuint unit,\n                                            GLuint texture,\n                                            GLint level,\n                                            GLboolean layered,\n                                            GLint layer,\n                                            GLenum access,\n                                            GLenum format);\nusing PFNIGLBINDRENDERBUFFERPROC = void (*)(GLenum target, GLuint renderbuffer);\nusing PFNIGLBINDVERTEXARRAYPROC = void (*)(GLuint vao);\nusing PFNIGLBLITFRAMEBUFFERPROC = void (*)(GLint srcX0,\n                                           GLint srcY0,\n                                           GLint srcX1,\n                                           GLint srcY1,\n                                           GLint dstX0,\n                                           GLint dstY0,\n                                           GLint dstX1,\n                                           GLint dstY1,\n                                           GLbitfield mask,\n                                           GLenum filter);\nusing PFNIGLCHECKFRAMEBUFFERSTATUSPROC = GLenum (*)(GLenum target);\nusing PFNIGLCLEARBUFFERFVPROC = void (*)(GLenum buffer, GLint drawBuffer, const GLfloat* value);\nusing PFNIGLCLEARDEPTHPROC = void (*)(GLdouble depth);\nusing PFNIGLCLEARDEPTHFPROC = void (*)(GLfloat depth);\nusing PFNIGLCOMPRESSEDTEXIMAGE3DPROC = void (*)(GLenum target,\n                                                GLint level,\n                                                GLenum internalformat,\n                                                GLsizei width,\n                                                GLsizei height,\n                                                GLsizei depth,\n                                                GLint border,\n                                                GLsizei imageSize,\n                                                const GLvoid* data);\nusing PFNIGLCOMPRESSEDTEXSUBIMAGE3DPROC = void (*)(GLenum target,\n                                                   GLint level,\n                                                   GLint xoffset,\n                                                   GLint yoffset,\n                                                   GLint zoffset,\n                                                   GLsizei width,\n                                                   GLsizei height,\n                                                   GLsizei depth,\n                                                   GLenum format,\n                                                   GLsizei imageSize,\n                                                   const GLvoid* data);\nusing PFNIGLCREATEMEMORYOBJECTSPROC = void (*)(GLsizei n, GLuint* memoryObjects);\nusing PFNIGLDEBUGPROC = void (*)(GLenum source,\n                                 GLenum type,\n                                 GLuint id,\n                                 GLenum severity,\n                                 GLsizei length,\n                                 const GLchar* message,\n                                 const void* userParam);\nusing PFNIGLDEBUGMESSAGECALLBACKPROC = void (*)(PFNIGLDEBUGPROC callback, const void* userParam);\nusing PFNIGLDEBUGMESSAGEINSERTPROC = void (*)(GLenum source,\n                                              GLenum type,\n                                              GLuint id,\n                                              GLenum severity,\n                                              GLsizei length,\n                                              const GLchar* buf);\nusing PFNIGLDELETEFRAMEBUFFERSPROC = void (*)(GLsizei n, const GLuint* framebuffers);\nusing PFNIGLDELETEMEMORYOBJECTSPROC = void (*)(GLsizei n, const GLuint* memoryObjects);\nusing PFNIGLDELETEQUERIESPROC = void (*)(GLsizei n, GLuint* ids);\nusing PFNIGLDELETERENDERBUFFERSPROC = void (*)(GLsizei n, const GLuint* renderbuffers);\nusing PFNIGLDELETESYNCPROC = void (*)(GLsync sync);\nusing PFNIGLDELETEVERTEXARRAYSPROC = void (*)(GLsizei n, const GLuint* vertexArrays);\nusing PFNIGLDISCARDFRAMEBUFFERPROC = void (*)(GLenum target,\n                                              GLsizei numAttachments,\n                                              const GLenum* attachments);\nusing PFNIGLDISPATCHCOMPUTEPROC = void (*)(GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ);\nusing PFNIGLDRAWBUFFERSPROC = void (*)(GLsizei, const GLenum*);\nusing PFNIGLDRAWELEMENTSINDIRECTPROC = void (*)(GLenum mode, GLenum type, const GLvoid* indirect);\nusing PFNIGLDRAWARRAYSINDIRECTPROC = void (*)(GLenum mode, const GLvoid* indirect);\nusing PFNIGLMULTIDRAWARRAYSINDIRECTPROC = void (*)(GLenum mode,\n                                                   const void* indirect,\n                                                   GLsizei drawcount,\n                                                   GLsizei stride);\nusing PFNIGLMULTIDRAWELEMENTSINDIRECTPROC =\n    void (*)(GLenum mode, GLenum type, const void* indirect, GLsizei drawcount, GLsizei stride);\nusing PFNIGLENDQUERYPROC = void (*)(GLenum target);\nusing PFNIGLFENCESYNCPROC = GLsync (*)(GLenum condition, GLbitfield flags);\nusing PFNIGLFRAMEBUFFERRENDERBUFFERPROC = void (*)(GLenum target,\n                                                   GLenum attachment,\n                                                   GLenum renderbuffertarget,\n                                                   GLuint renderbuffer);\nusing PFNIGLFRAMEBUFFERTEXTURE2DPROC =\n    void (*)(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);\nusing PFNIGLFRAMEBUFFERTEXTURELAYERPROC =\n    void (*)(GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer);\nusing PFNIGLFRAMEBUFFERTEXTURE2DMULTISAMPLEPROC = void (*)(GLenum target,\n                                                           GLenum attachment,\n                                                           GLenum textarget,\n                                                           GLuint texture,\n                                                           GLint level,\n                                                           GLsizei samples);\nusing PFNIGLFRAMEBUFFERTEXTUREMULTISAMPLEMULTIVIEWPROC = void (*)(GLenum target,\n                                                                  GLenum attachment,\n                                                                  GLuint texture,\n                                                                  GLint level,\n                                                                  GLsizei samples,\n                                                                  GLint baseViewIndex,\n                                                                  GLsizei numViews);\nusing PFNIGLFRAMEBUFFERTEXTUREMULTIVIEWPROC = void (*)(GLenum target,\n                                                       GLenum attachment,\n                                                       GLuint texture,\n                                                       GLint level,\n                                                       GLint baseViewIndex,\n                                                       GLsizei numViews);\nusing PFNIGLGENERATEMIPMAPPROC = void (*)(GLenum target);\nusing PFNIGLGENFRAMEBUFFERSPROC = void (*)(GLsizei n, GLuint* framebuffers);\nusing PFNIGLGENRENDERBUFFERSPROC = void (*)(GLsizei n, GLuint* renderbuffers);\nusing PFNIGLGENQUERIESPROC = void (*)(GLsizei n, GLuint* queries);\nusing PFNIGLQUERYCOUNTERPROC = void (*)(GLuint id, GLenum target);\nusing PFNIGLGENVERTEXARRAYSPROC = void (*)(GLsizei n, GLuint* vertexArrays);\nusing PFNIGLGETACTIVEUNIFORMSIVPROC = void (*)(GLuint program,\n                                               GLsizei uniformCount,\n                                               const GLuint* uniformIndices,\n                                               GLenum pname,\n                                               GLint* params);\nusing PFNIGLGETACTIVEUNIFORMBLOCKIVPROC = void (*)(GLuint program,\n                                                   GLuint index,\n                                                   GLenum pname,\n                                                   GLint* params);\nusing PFNIGLGETACTIVEUNIFORMBLOCKNAMEPROC = void (*)(GLuint program,\n                                                     GLuint index,\n                                                     GLsizei bufSize,\n                                                     GLsizei* length,\n                                                     GLchar* uniformBlockName);\nusing PFNIGLGETDEBUGMESSAGELOGPROC = GLuint (*)(GLuint count,\n                                                GLsizei bufSize,\n                                                GLenum* sources,\n                                                GLenum* types,\n                                                GLuint* ids,\n                                                GLenum* severities,\n                                                GLsizei* lengths,\n                                                GLchar* messageLog);\nusing PFNIGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC = void (*)(GLenum target,\n                                                               GLenum attachment,\n                                                               GLenum pname,\n                                                               GLint* params);\nusing PFNIGLGETPROGRAMINTERFACEIVPROC = void (*)(GLuint program,\n                                                 GLenum programInterface,\n                                                 GLenum pname,\n                                                 GLint* params);\nusing PFNIGLGETPROGRAMRESOURCEINDEXPROC = GLuint (*)(GLuint program,\n                                                     GLenum programInterface,\n                                                     const GLchar* name);\nusing PFNIGLGETPROGRAMRESOURCEIVPROC = void (*)(GLuint program,\n                                                GLenum programInterface,\n                                                GLuint index,\n                                                GLsizei propCount,\n                                                const GLenum* props,\n                                                GLsizei count,\n                                                GLsizei* length,\n                                                GLint* params);\nusing PFNIGLGETPROGRAMRESOURCENAMEPROC = void (*)(GLuint program,\n                                                  GLenum programInterface,\n                                                  GLuint index,\n                                                  GLsizei bufSize,\n                                                  GLsizei* length,\n                                                  char* name);\nusing PFNIGLGETQUERYOBJECTIVPROC = void (*)(GLuint id, GLenum pname, GLint* params);\nusing PFNIGLGETQUERYOBJECTUI64VPROC = void (*)(GLuint id, GLenum pname, GLuint64* params);\nusing PFNIGLGETRENDERBUFFERPARAMETERIVPROC = void (*)(GLenum target, GLenum pname, GLint* params);\nusing PFNIGLGETSTRINGIPROC = const GLubyte* (*)(GLenum name, GLuint index);\nusing PFNIGLGETSYNCIVPROC =\n    void (*)(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values);\nusing PFNIGLGETTEXTUREHANDLEPROC = GLuint64 (*)(GLuint texture);\nusing PFNIGLGETUNIFORMBLOCKINDEXPROC = GLuint (*)(GLuint program, const GLchar* name);\nusing PFNIGLIMPORTMEMORYFDPROC = void (*)(GLuint memory,\n                                          GLuint64 size,\n                                          GLenum handleType,\n                                          GLint fd);\nusing PFNIGLINSERTEVENTMARKERPROC = void (*)(GLsizei length, const GLchar* marker);\nusing PFNIGLINVALIDATEFRAMEBUFFERPROC = void (*)(GLenum target,\n                                                 GLsizei numAttachments,\n                                                 const GLenum* attachments);\nusing PFNIGLISFRAMEBUFFERPROC = GLboolean (*)(GLuint framebuffer);\nusing PFNIGLISRENDERBUFFERPROC = GLboolean (*)(GLuint renderbuffer);\nusing PFNIGLMAKETEXTUREHANDLERESIDENTPROC = void (*)(GLuint64 handle);\nusing PFNIGLMAKETEXTUREHANDLENONRESIDENTPROC = void (*)(GLuint64 handle);\nusing PFNIGLMAPBUFFERPROC = void* (*)(GLenum target, GLbitfield access);\nusing PFNIGLMAPBUFFERRANGEPROC = void* (*)(GLenum target,\n                                           GLintptr offset,\n                                           GLsizeiptr length,\n                                           GLbitfield access);\nusing PFNIGLMEMORYBARRIERPROC = void (*)(GLbitfield barriers);\nusing PFNIGLOBJECTLABELPROC = void (*)(GLenum identifier,\n                                       GLuint name,\n                                       GLsizei length,\n                                       const char* label);\nusing PFNIGLPOPDEBUGGROUPPROC = void (*)();\nusing PFNIGLPOPGROUPMARKERPROC = void (*)();\nusing PFNIGLPUSHDEBUGGROUPPROC = void (*)(GLenum source,\n                                          GLuint id,\n                                          GLsizei length,\n                                          const GLchar* message);\nusing PFNIGLPUSHGROUPMARKERPROC = void (*)(GLsizei length, const GLchar* marker);\nusing PFNIGLRENDERBUFFERSTORAGEPROC = void (*)(GLenum target,\n                                               GLenum internalformat,\n                                               GLsizei width,\n                                               GLsizei height);\nusing PFNIGLRENDERBUFFERSTORAGEMULTISAMPLEPROC =\n    void (*)(GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height);\nusing PFNIGLTEXIMAGE3DPROC = void (*)(GLenum target,\n                                      GLint level,\n                                      GLint internalformat,\n                                      GLsizei width,\n                                      GLsizei height,\n                                      GLsizei depth,\n                                      GLint border,\n                                      GLenum format,\n                                      GLenum type,\n                                      const GLvoid* pixels);\nusing PFNIGLTEXSUBIMAGE3DPROC = void (*)(GLenum target,\n                                         GLint level,\n                                         GLint xoffset,\n                                         GLint yoffset,\n                                         GLint zoffset,\n                                         GLsizei width,\n                                         GLsizei height,\n                                         GLsizei depth,\n                                         GLenum format,\n                                         GLenum type,\n                                         const GLvoid* data);\nusing PFNIGLTEXSTORAGE1DPROC = void (*)(GLenum target,\n                                        GLsizei levels,\n                                        GLenum internalformat,\n                                        GLsizei width);\nusing PFNIGLTEXSTORAGE2DPROC =\n    void (*)(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height);\nusing PFNIGLTEXSTORAGE3DPROC = void (*)(GLenum target,\n                                        GLsizei levels,\n                                        GLenum internalformat,\n                                        GLsizei width,\n                                        GLsizei height,\n                                        GLsizei depth);\nusing PFNIGLTEXSTORAGEMEM2DPROC = void (*)(GLenum target,\n                                           GLsizei levels,\n                                           GLenum internalFormat,\n                                           GLsizei width,\n                                           GLsizei height,\n                                           GLuint memory,\n                                           GLuint64 offset);\nusing PFNIGLTEXSTORAGEMEM3DPROC = void (*)(GLenum target,\n                                           GLsizei levels,\n                                           GLenum internalFormat,\n                                           GLsizei width,\n                                           GLsizei height,\n                                           GLsizei depth,\n                                           GLuint memory,\n                                           GLuint64 offset);\nusing PFNIGLUNIFORMBLOCKBINDINGPROC = void (*)(GLuint pid,\n                                               GLuint uniformBlockIndex,\n                                               GLuint uniformBlockBinding);\nusing PFNIGLUNMAPBUFFERPROC = void (*)(GLenum target);\n\nusing PFNIGLVERTEXATTRIBDIVISORPROC = void (*)(GLuint index, GLuint divisor);\n\nusing PFNIGLDRAWELEMENTSINSTANCEDPROC =\n    void (*)(GLenum mode, GLsizei count, GLenum type, const void* indices, GLsizei primcount);\n\nusing PFNIGLDRAWARRAYSINSTANCEDPROC = void (*)(GLenum mode,\n                                               GLint first,\n                                               GLsizei count,\n                                               GLsizei primcount);\n\nusing PFNPOLYGONOFFSETCLAMPPROC = void (*)(float factor, float units, float clamp);\n\n///--------------------------------------\n/// MARK: - OpenGL ES / OpenGL\n\n// NOTE: Public IGL signature of clearDepth altered to match clearDepthf.\nvoid iglClearBufferfv(GLenum buffer, GLint drawBuffer, const GLfloat* value);\nvoid iglClearDepth(GLfloat depth);\nvoid iglCompressedTexImage3D(GLenum target,\n                             GLint level,\n                             GLenum internalformat,\n                             GLsizei width,\n                             GLsizei height,\n                             GLsizei depth,\n                             GLint border,\n                             GLsizei imageSize,\n                             const GLvoid* data);\nvoid iglCompressedTexSubImage3D(GLenum target,\n                                GLint level,\n                                GLint xoffset,\n                                GLint yoffset,\n                                GLint zoffset,\n                                GLsizei width,\n                                GLsizei height,\n                                GLsizei depth,\n                                GLenum format,\n                                GLsizei imageSize,\n                                const GLvoid* data);\nvoid iglDebugMessageCallback(PFNIGLDEBUGPROC callback, const void* userParam);\nvoid iglDebugMessageInsert(GLenum source,\n                           GLenum type,\n                           GLuint id,\n                           GLenum severity,\n                           GLsizei length,\n                           const GLchar* buf);\nvoid iglDrawBuffers(GLsizei n, const GLenum* bufs);\nGLuint iglGetDebugMessageLog(GLuint count,\n                             GLsizei bufSize,\n                             GLenum* sources,\n                             GLenum* types,\n                             GLuint* ids,\n                             GLenum* severities,\n                             GLsizei* lengths,\n                             GLchar* messageLog);\nconst GLubyte* iglGetStringi(GLenum name, GLuint index);\nvoid* iglMapBuffer(GLenum target, GLbitfield access);\nvoid iglObjectLabel(GLenum identifier, GLuint name, GLsizei length, const char* label);\nvoid iglPopDebugGroup();\nvoid iglPushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar* message);\nvoid iglTexImage3D(GLenum target,\n                   GLint level,\n                   GLint internalformat,\n                   GLsizei width,\n                   GLsizei height,\n                   GLsizei depth,\n                   GLint border,\n                   GLenum format,\n                   GLenum type,\n                   const GLvoid* data);\nvoid iglTexSubImage3D(GLenum target,\n                      GLint level,\n                      GLint xoffset,\n                      GLint yoffset,\n                      GLint zoffset,\n                      GLsizei width,\n                      GLsizei height,\n                      GLsizei depth,\n                      GLenum format,\n                      GLenum type,\n                      const GLvoid* pixels);\nvoid iglUnmapBuffer(GLenum target);\nvoid iglVertexAttribDivisor(GLuint index, GLuint divisor);\nvoid iglDrawElementsInstanced(GLenum mode,\n                              GLsizei count,\n                              GLenum type,\n                              const void* indices,\n                              GLsizei instancecount);\nvoid iglDrawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei primcount);\n\n///--------------------------------------\n/// MARK: - GL_APPLE_framebuffer_multisample\n\nvoid iglRenderbufferStorageMultisampleAPPLE(GLenum target,\n                                            GLsizei samples,\n                                            GLenum internalformat,\n                                            GLsizei width,\n                                            GLsizei height);\n///--------------------------------------\n/// MARK: - GL_APPLE_sync\n\nvoid iglDeleteSyncAPPLE(GLsync sync);\nGLsync iglFenceSyncAPPLE(GLenum condition, GLbitfield flags);\nvoid iglGetSyncivAPPLE(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values);\n\n///--------------------------------------\n/// MARK: - GL_ARB_bindless_texture\n\nGLuint64 iglGetTextureHandleARB(GLuint texture);\nvoid iglMakeTextureHandleResidentARB(GLuint64 handle);\nvoid iglMakeTextureHandleNonResidentARB(GLuint64 handle);\n\n///--------------------------------------\n/// MARK: - GL_ARB_compute_shader\n\nvoid iglDispatchCompute(GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ);\n\n///--------------------------------------\n/// MARK: - GL_ARB_draw_indirect\n\nvoid iglDrawElementsIndirect(GLenum mode, GLenum type, const GLvoid* indirect);\n\nvoid iglDrawArraysIndirect(GLenum mode, const GLvoid* indirect);\n\n///--------------------------------------\n/// MARK: - GL_ARB_multi_draw_indirect\n\nvoid iglMultiDrawArraysIndirect(GLenum mode,\n                                const void* indirect,\n                                GLsizei drawcount,\n                                GLsizei stride);\n\nvoid iglMultiDrawElementsIndirect(GLenum mode,\n                                  GLenum type,\n                                  const void* indirect,\n                                  GLsizei drawcount,\n                                  GLsizei stride);\n\n///--------------------------------------\n/// MARK: - GL_ARB_ES2_compatibility\n\nvoid iglClearDepthf(GLfloat depth);\n\n///--------------------------------------\n/// MARK: - GL_ARB_framebuffer_object\n\nvoid iglBindFramebuffer(GLenum target, GLuint framebuffer);\nvoid iglBindRenderbuffer(GLenum target, GLuint renderbuffer);\nvoid iglBlitFramebuffer(GLint srcX0,\n                        GLint srcY0,\n                        GLint srcX1,\n                        GLint srcY1,\n                        GLint dstX0,\n                        GLint dstY0,\n                        GLint dstX1,\n                        GLint dstY1,\n                        GLbitfield mask,\n                        GLenum filter);\nGLenum iglCheckFramebufferStatus(GLenum target);\nvoid iglDeleteFramebuffers(GLsizei n, const GLuint* framebuffers);\nvoid iglDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers);\nvoid iglFramebufferRenderbuffer(GLenum target,\n                                GLenum attachment,\n                                GLenum renderbuffertarget,\n                                GLuint renderbuffer);\nvoid iglFramebufferTexture2D(GLenum target,\n                             GLenum attachment,\n                             GLenum textarget,\n                             GLuint texture,\n                             GLint level);\nvoid iglFramebufferTextureLayer(GLenum target,\n                                GLenum attachment,\n                                GLuint texture,\n                                GLint level,\n                                GLint layer);\nvoid iglGenerateMipmap(GLenum target);\nvoid iglGenFramebuffers(GLsizei n, GLuint* framebuffers);\nvoid iglGenRenderbuffers(GLsizei n, GLuint* renderbuffers);\nvoid iglGetFramebufferAttachmentParameteriv(GLenum target,\n                                            GLenum attachment,\n                                            GLenum pname,\n                                            GLint* params);\nvoid iglGetRenderbufferParameteriv(GLenum target, GLenum pname, GLint* params);\nGLboolean iglIsFramebuffer(GLuint framebuffer);\nGLboolean iglIsRenderbuffer(GLuint renderbuffer);\nvoid iglRenderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);\nvoid iglRenderbufferStorageMultisample(GLenum target,\n                                       GLsizei samples,\n                                       GLenum internalformat,\n                                       GLsizei width,\n                                       GLsizei height);\n\n///--------------------------------------\n/// MARK: - GL_ARB_invalidate_subdata\n\nvoid iglInvalidateFramebuffer(GLenum target, GLsizei numAttachments, const GLenum* attachments);\n\n///--------------------------------------\n/// MARK: - GL_ARB_map_buffer_range\n\nvoid* iglMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);\n\n///--------------------------------------\n/// MARK: - GL_ARB_program_interface_query\n\nvoid iglGetProgramInterfaceiv(GLuint program, GLenum programInterface, GLenum pname, GLint* params);\nGLuint iglGetProgramResourceIndex(GLuint program, GLenum programInterface, const GLchar* name);\nvoid iglGetProgramResourceiv(GLuint program,\n                             GLenum programInterface,\n                             GLuint index,\n                             GLsizei propCount,\n                             const GLenum* props,\n                             GLsizei count,\n                             GLsizei* length,\n                             GLint* params);\nvoid iglGetProgramResourceName(GLuint program,\n                               GLenum programInterface,\n                               GLuint index,\n                               GLsizei bufSize,\n                               GLsizei* length,\n                               char* name);\n\n///--------------------------------------\n/// MARK: - GL_ARB_shader_image_load_store\n\nvoid iglBindImageTexture(GLuint unit,\n                         GLuint texture,\n                         GLint level,\n                         GLboolean layered,\n                         GLint layer,\n                         GLenum access,\n                         GLenum format);\nvoid iglMemoryBarrier(GLbitfield barriers);\n\n///--------------------------------------\n/// MARK: - GL_ARB_sync\n\nvoid iglDeleteSync(GLsync sync);\nGLsync iglFenceSync(GLenum condition, GLbitfield flags);\nvoid iglGetSynciv(GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length, GLint* values);\n\n///--------------------------------------\n/// MARK: - GL_ARB_texture_storage\n\nvoid iglTexStorage1D(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);\nvoid iglTexStorage2D(GLenum target,\n                     GLsizei levels,\n                     GLenum internalformat,\n                     GLsizei width,\n                     GLsizei height);\nvoid iglTexStorage3D(GLenum target,\n                     GLsizei levels,\n                     GLenum internalformat,\n                     GLsizei width,\n                     GLsizei height,\n                     GLsizei depth);\n\n///--------------------------------------\n/// MARK: - GL_ARB_uniform_buffer_object\n\nvoid iglBindBufferBase(GLenum target, GLuint index, GLuint buffer);\nvoid iglBindBufferRange(GLenum target,\n                        GLuint index,\n                        GLuint buffer,\n                        GLintptr offset,\n                        GLsizeiptr size);\nvoid iglGetActiveUniformsiv(GLuint program,\n                            GLsizei uniformCount,\n                            const GLuint* uniformIndices,\n                            GLenum pname,\n                            GLint* params);\nvoid iglGetActiveUniformBlockiv(GLuint program, GLuint index, GLenum pname, GLint* params);\nvoid iglGetActiveUniformBlockName(GLuint program,\n                                  GLuint index,\n                                  GLsizei bufSize,\n                                  GLsizei* length,\n                                  GLchar* uniformBlockName);\nGLuint iglGetUniformBlockIndex(GLuint program, const GLchar* name);\nvoid iglUniformBlockBinding(GLuint pid, GLuint uniformBlockIndex, GLuint uniformBlockBinding);\n\n///--------------------------------------\n/// MARK: - GL_ARB_vertex_array_object\n\nvoid iglBindVertexArray(GLuint vao);\nvoid iglDeleteVertexArrays(GLsizei n, const GLuint* vertexArrays);\nvoid iglGenVertexArrays(GLsizei n, GLuint* vertexArrays);\n\n///--------------------------------------\n/// MARK: - GL_ARB_polygon_offset_clamp\n\nvoid iglPolygonOffsetClamp(float factor, float units, float clamp);\n\n///--------------------------------------\n/// MARK: - GL_EXT_debug_label\n\nvoid iglLabelObjectEXT(GLenum identifier, GLuint name, GLsizei length, const char* label);\n\n///--------------------------------------\n/// MARK: - GL_EXT_debug_marker\n\n// NOTE: Public IGL signature altered to match GL_KHR_debug.\n// Additional params from GL_KHR_debug not used by GL_EXT_debug_marker are ignored.\n\nvoid iglInsertEventMarkerEXT(GLenum source,\n                             GLenum type,\n                             GLuint id,\n                             GLenum severity,\n                             GLsizei length,\n                             const GLchar* buf);\nvoid iglPopGroupMarkerEXT();\nvoid iglPushGroupMarkerEXT(GLenum source, GLuint id, GLsizei length, const GLchar* message);\n\n///--------------------------------------\n/// MARK: - GL_EXT_discard_framebuffer\n\nvoid iglDiscardFramebufferEXT(GLenum target, GLsizei numAttachments, const GLenum* attachments);\n\n///--------------------------------------\n/// MARK: - GL_EXT_draw_buffers\n\nvoid iglDrawBuffersEXT(GLsizei n, const GLenum* bufs);\n\n///--------------------------------------\n/// MARK: - GL_EXT_framebuffer_blit\n\nvoid iglBlitFramebufferEXT(GLint srcX0,\n                           GLint srcY0,\n                           GLint srcX1,\n                           GLint srcY1,\n                           GLint dstX0,\n                           GLint dstY0,\n                           GLint dstX1,\n                           GLint dstY1,\n                           GLbitfield mask,\n                           GLenum filter);\n\n///--------------------------------------\n/// MARK: - GL_EXT_map_buffer_range\n\nvoid* iglMapBufferRangeEXT(GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access);\n\n///--------------------------------------\n/// MARK: - GL_EXT_memory_object\n\nvoid iglCreateMemoryObjectsEXT(GLsizei n, GLuint* memoryObjects);\nvoid iglDeleteMemoryObjectsEXT(GLsizei n, const GLuint* memoryObjects);\nvoid iglTexStorageMem2DEXT(GLenum target,\n                           GLsizei levels,\n                           GLenum internalFormat,\n                           GLsizei width,\n                           GLsizei height,\n                           GLuint memory,\n                           GLuint64 offset);\nvoid iglTexStorageMem3DEXT(GLenum target,\n                           GLsizei levels,\n                           GLenum internalFormat,\n                           GLsizei width,\n                           GLsizei height,\n                           GLsizei depth,\n                           GLuint memory,\n                           GLuint64 offset);\n\n///--------------------------------------\n/// MARK: - GL_EXT_memory_object_fd\n\nvoid iglImportMemoryFdEXT(GLuint memory, GLuint64 size, GLenum handleType, GLint fd);\n\n///--------------------------------------\n/// MARK: - GL_EXT_multisampled_render_to_texture\n\nvoid iglFramebufferTexture2DMultisampleEXT(GLenum target,\n                                           GLenum attachment,\n                                           GLenum textarget,\n                                           GLuint texture,\n                                           GLint level,\n                                           GLsizei samples);\nvoid iglRenderbufferStorageMultisampleEXT(GLenum target,\n                                          GLsizei samples,\n                                          GLenum internalformat,\n                                          GLsizei width,\n                                          GLsizei height);\n\n///--------------------------------------\n/// MARK: - GL_EXT_shader_image_load_store\n\nvoid iglBindImageTextureEXT(GLuint unit,\n                            GLuint texture,\n                            GLint level,\n                            GLboolean layered,\n                            GLint layer,\n                            GLenum access,\n                            GLenum format);\nvoid iglMemoryBarrierEXT(GLbitfield barriers);\n\n///--------------------------------------\n/// MARK: - GL_EXT_texture_storage\n\nvoid iglTexStorage1DEXT(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width);\nvoid iglTexStorage2DEXT(GLenum target,\n                        GLsizei levels,\n                        GLenum internalformat,\n                        GLsizei width,\n                        GLsizei height);\nvoid iglTexStorage3DEXT(GLenum target,\n                        GLsizei levels,\n                        GLenum internalformat,\n                        GLsizei width,\n                        GLsizei height,\n                        GLsizei depth);\n\n///--------------------------------------\n/// MARK: - GL_IMG_multisampled_render_to_texture\n\nvoid iglFramebufferTexture2DMultisampleIMG(GLenum target,\n                                           GLenum attachment,\n                                           GLenum textarget,\n                                           GLuint texture,\n                                           GLint level,\n                                           GLsizei samples);\nvoid iglRenderbufferStorageMultisampleIMG(GLenum target,\n                                          GLsizei samples,\n                                          GLenum internalformat,\n                                          GLsizei width,\n                                          GLsizei height);\n\n///--------------------------------------\n/// MARK: - GL_KHR_debug\n\nvoid iglDebugMessageCallbackKHR(PFNIGLDEBUGPROC callback, const void* userParam);\nvoid iglDebugMessageInsertKHR(GLenum source,\n                              GLenum type,\n                              GLuint id,\n                              GLenum severity,\n                              GLsizei length,\n                              const GLchar* buf);\nGLuint iglGetDebugMessageLogKHR(GLuint count,\n                                GLsizei bufSize,\n                                GLenum* sources,\n                                GLenum* types,\n                                GLuint* ids,\n                                GLenum* severities,\n                                GLsizei* lengths,\n                                GLchar* messageLog);\nvoid iglObjectLabelKHR(GLenum identifier, GLuint name, GLsizei length, const char* label);\nvoid iglPopDebugGroupKHR();\nvoid iglPushDebugGroupKHR(GLenum source, GLuint id, GLsizei length, const GLchar* message);\n\n///--------------------------------------\n/// MARK: - GL_NV_bindless_texture\n\nGLuint64 iglGetTextureHandleNV(GLuint texture);\nvoid iglMakeTextureHandleResidentNV(GLuint64 handle);\nvoid iglMakeTextureHandleNonResidentNV(GLuint64 handle);\n\n///--------------------------------------\n/// MARK: - GL_NV_instanced_arrays\n\nvoid iglVertexAttribDivisorNV(GLuint index, GLuint divisor);\n\n///--------------------------------------\n/// MARK: - GL_OVR_multiview\n\nvoid iglFramebufferTextureMultiviewOVR(GLenum target,\n                                       GLenum attachment,\n                                       GLuint texture,\n                                       GLint level,\n                                       GLint baseViewIndex,\n                                       GLsizei numViews);\n\n///--------------------------------------\n/// MARK: - GL_OVR_multiview_multisampled_render_to_texture\n\nvoid iglFramebufferTextureMultisampleMultiviewOVR(GLenum target,\n                                                  GLenum attachment,\n                                                  GLuint texture,\n                                                  GLint level,\n                                                  GLsizei samples,\n                                                  GLint baseViewIndex,\n                                                  GLsizei numViews);\n///--------------------------------------\n/// MARK: - GL_OES_mapbuffer\n\nvoid* iglMapBufferOES(GLenum target, GLbitfield access);\nvoid iglUnmapBufferOES(GLenum target);\n\n///--------------------------------------\n/// MARK: - GL_OES_texture_3D\n\nvoid iglCompressedTexImage3DOES(GLenum target,\n                                GLint level,\n                                GLenum internalformat,\n                                GLsizei width,\n                                GLsizei height,\n                                GLsizei depth,\n                                GLint border,\n                                GLsizei imageSize,\n                                const GLvoid* data);\nvoid iglCompressedTexSubImage3DOES(GLenum target,\n                                   GLint level,\n                                   GLint xoffset,\n                                   GLint yoffset,\n                                   GLint zoffset,\n                                   GLsizei width,\n                                   GLsizei height,\n                                   GLsizei depth,\n                                   GLenum format,\n                                   GLsizei imageSize,\n                                   const GLvoid* data);\nvoid iglTexImage3DOES(GLenum target,\n                      GLint level,\n                      GLint internalformat,\n                      GLsizei width,\n                      GLsizei height,\n                      GLsizei depth,\n                      GLint border,\n                      GLenum format,\n                      GLenum type,\n                      const GLvoid* data);\nvoid iglTexSubImage3DOES(GLenum target,\n                         GLint level,\n                         GLint xoffset,\n                         GLint yoffset,\n                         GLint zoffset,\n                         GLsizei width,\n                         GLsizei height,\n                         GLsizei depth,\n                         GLenum format,\n                         GLenum type,\n                         const GLvoid* pixels);\n\n///--------------------------------------\n/// MARK: - GL_OES_vertex_array_object\n\nvoid iglBindVertexArrayOES(GLuint vao);\nvoid iglDeleteVertexArraysOES(GLsizei n, const GLuint* vertexArrays);\nvoid iglGenVertexArraysOES(GLsizei n, GLuint* vertexArrays);\n\n///--------------------------------------\n/// MARK: - GL_EXT_timer_query\n\nvoid iglGenQueries(GLsizei n, GLuint* queries);\nvoid iglBeginQuery(GLenum target, GLuint id);\nvoid iglEndQuery(GLenum target);\nvoid iglDeleteQueries(GLsizei n, GLuint* queries);\nvoid iglGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64* params);\nvoid iglGetQueryObjectiv(GLuint id, GLenum pname, GLint* params);\nvoid iglQueryCounter(GLuint id, GLenum target);\n\nIGL_EXTERN_END\n"
  },
  {
    "path": "src/igl/opengl/GLIncludes.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/Config.h> // IWYU pragma: export\n\n// clang-format off\n#if IGL_PLATFORM_IOS_SIMULATOR\n  #include <OpenGLES/ES3/gl.h> // IWYU pragma: export\n  #include <OpenGLES/ES3/glext.h> // IWYU pragma: export\n  #include <OpenGLES/ES2/glext.h> // IWYU pragma: export\n  using GLdouble = double;\n#elif IGL_PLATFORM_IOS\n  #include <OpenGLES/ES2/glext.h> // IWYU pragma: export\n  #include <OpenGLES/ES3/gl.h> // IWYU pragma: export\n  #include <OpenGLES/ES3/glext.h> // IWYU pragma: export\n  using GLdouble = double;\n#elif IGL_PLATFORM_MACCATALYST\n  // Apple dropped OpenGL support for Catalyst built apps.\n  // For compatibility reasons, we added stub headers,\n  // so we can still build referencing these headers.\n  #include \"OpenGLES/ES3/gl.h\" // IWYU pragma: export\n  #include \"OpenGLES/ES3/glext.h\" // IWYU pragma: export\n  #include \"OpenGLES/ES2/glext.h\" // IWYU pragma: export\n  using GLdouble = double;\n#elif IGL_PLATFORM_MACOSX\n  #include <OpenGL/gl3.h> // IWYU pragma: export\n  #include <OpenGL/gl3ext.h> // IWYU pragma: export\n  #include <OpenGL/glext.h> // IWYU pragma: export\n#elif IGL_PLATFORM_WINDOWS\n  #define GL_GLEXT_PROTOTYPES\n#if IGL_ANGLE\n  #include <EGL/egl.h> // IWYU pragma: export\n  #include <EGL/eglplatform.h> // IWYU pragma: export\n  #include <GLES3/gl31.h> // IWYU pragma: export\n  #include <GLES2/gl2ext.h> // GL_EXT_memory_object // IWYU pragma: export\n  #undef ERROR\n#else\n  #ifndef GLEW_STATIC\n  #define GLEW_STATIC\n  #endif\n  #include <GL/glew.h> // IWYU pragma: export\n#endif\n#elif IGL_PLATFORM_ANDROID\n  #include <GLES3/gl31.h> // IWYU pragma: export\n  #include <GLES3/gl3ext.h> // IWYU pragma: export\n  #include <GLES2/gl2ext.h> // GL_EXT_memory_object // IWYU pragma: export\n#elif IGL_PLATFORM_LINUX\n  #if IGL_PLATFORM_LINUX_USE_EGL\n    #include <GLES3/gl3.h> // IWYU pragma: export\n    #include <GLES2/gl2ext.h> // IWYU pragma: export\n  #else\n    #include <GL/gl.h> // IWYU pragma: export\n    #include <GL/glcorearb.h> // IWYU pragma: export\n  #endif\n#elif IGL_PLATFORM_EMSCRIPTEN\n  #include <GLES2/gl2.h> // IWYU pragma: export\n  #include <GLES2/gl2ext.h> // IWYU pragma: export\n#endif\n// clang-format on\n\n#ifndef GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH\n#define GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH 0x8a35\n#endif\n#ifndef GL_ACTIVE_UNIFORM_BLOCKS\n#define GL_ACTIVE_UNIFORM_BLOCKS 0x8a36\n#endif\n#ifndef GL_ACTIVE_RESOURCES\n#define GL_ACTIVE_RESOURCES 0x92f5\n#endif\n#ifndef GL_ALPHA_BITS\n#define GL_ALPHA_BITS 0xd55\n#endif\n#ifndef GL_ALPHA8\n#define GL_ALPHA8 0x803C\n#endif\n#ifndef GL_ATOMIC_COUNTER_BARRIER_BIT\n#define GL_ATOMIC_COUNTER_BARRIER_BIT 0x1000\n#endif\n#ifndef GL_BLUE\n#define GL_BLUE 0x1905\n#endif\n#ifndef GL_BGR\n#define GL_BGR 0x80E0\n#endif\n#ifndef GL_BGRA\n#define GL_BGRA 0x80E1\n#endif\n#ifndef GL_BGR_INTEGER\n#define GL_BGR_INTEGER 0x8D9A\n#endif\n#ifndef GL_BGRA_INTEGER\n#define GL_BGRA_INTEGER 0x8D9B\n#endif\n#ifndef GL_BGRA8_EXT\n#define GL_BGRA8_EXT 0x93A1\n#endif\n#ifndef GL_BUFFER\n#define GL_BUFFER 0x82e0\n#endif\n#ifndef GL_BUFFER_BINDING\n#define GL_BUFFER_BINDING 0x9302\n#endif\n#ifndef GL_BUFFER_OBJECT_EXT\n#define GL_BUFFER_OBJECT_EXT 0x9151\n#endif\n#ifndef GL_BUFFER_UPDATE_BARRIER_BIT\n#define GL_BUFFER_UPDATE_BARRIER_BIT 0x200\n#endif\n#ifndef GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT\n#define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x4000\n#endif\n#ifndef GL_COLOR_ATTACHMENT1\n#define GL_COLOR_ATTACHMENT1 0x8ce1\n#endif\n#ifndef GL_COMMAND_BARRIER_BIT\n#define GL_COMMAND_BARRIER_BIT 0x40\n#endif\n#ifndef GL_COMPARE_REF_TO_TEXTURE\n#define GL_COMPARE_REF_TO_TEXTURE 0x884e\n#endif\n#ifndef GL_COMPRESSED_R11_EAC\n#define GL_COMPRESSED_R11_EAC 0x9270\n#endif\n#ifndef GL_COMPRESSED_RG11_EAC\n#define GL_COMPRESSED_RG11_EAC 0x9272\n#endif\n#ifndef GL_COMPRESSED_RGB8_ETC2\n#define GL_COMPRESSED_RGB8_ETC2 0x9274\n#endif\n#ifndef GL_COMPRESSED_RGBA8_ETC2_EAC\n#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278\n#endif\n#ifndef GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2\n#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276\n#endif\n#ifndef GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG\n#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01\n#endif\n#ifndef GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG\n#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00\n#endif\n#ifndef GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG\n#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03\n#endif\n#ifndef GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG\n#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_10x10_KHR\n#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_10x6_KHR\n#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_10x8_KHR\n#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_10x5_KHR\n#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_12x10_KHR\n#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_12x12_KHR\n#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_4x4_KHR\n#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_5x4_KHR\n#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_5x5_KHR\n#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_6x5_KHR\n#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_6x6_KHR\n#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_8x5_KHR\n#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_8x6_KHR\n#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6\n#endif\n#ifndef GL_COMPRESSED_RGBA_ASTC_8x8_KHR\n#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7\n#endif\n#ifndef GL_COMPRESSED_RGBA_BPTC_UNORM\n#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C\n#endif\n#ifndef GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM\n#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D\n#endif\n#ifndef GL_COMPRESSED_SIGNED_R11_EAC\n#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271\n#endif\n#ifndef GL_COMPRESSED_SIGNED_RG11_EAC\n#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ETC2\n#define GL_COMPRESSED_SRGB8_ETC2 0x9275\n#endif\n#ifndef GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC\n#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279\n#endif\n#ifndef GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2\n#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277\n#endif\n#ifndef GL_COMPUTE_SHADER\n#define GL_COMPUTE_SHADER 0x91B9\n#endif\n#ifndef GL_COPY_READ_BUFFER\n#define GL_COPY_READ_BUFFER 0x8f36\n#endif\n#ifndef GL_COPY_WRITE_BUFFER\n#define GL_COPY_WRITE_BUFFER 0x8f37\n#endif\n#ifndef GL_DEBUG_LOGGED_MESSAGES\n#define GL_DEBUG_LOGGED_MESSAGES 0x9145\n#endif\n#ifndef GL_MAX_DEBUG_GROUP_STACK_DEPTH\n#define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826c\n#endif\n#ifndef GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH\n#define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243\n#endif\n#ifndef GL_DEBUG_OUTPUT\n#define GL_DEBUG_OUTPUT 0x92e0\n#endif\n#ifndef GL_DEBUG_SEVERITY_HIGH\n#define GL_DEBUG_SEVERITY_HIGH 0x9146\n#endif\n#ifndef GL_DEBUG_SEVERITY_LOW\n#define GL_DEBUG_SEVERITY_LOW 0x9148\n#endif\n#ifndef GL_DEBUG_SEVERITY_MEDIUM\n#define GL_DEBUG_SEVERITY_MEDIUM 0x9147\n#endif\n#ifndef GL_DEBUG_SEVERITY_NOTIFICATION\n#define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B\n#endif\n#ifndef GL_DEBUG_SOURCE_API\n#define GL_DEBUG_SOURCE_API 0x8246\n#endif\n#ifndef GL_DEBUG_SOURCE_APPLICATION\n#define GL_DEBUG_SOURCE_APPLICATION 0x824A\n#endif\n#ifndef GL_DEBUG_SOURCE_OTHER\n#define GL_DEBUG_SOURCE_OTHER 0x824B\n#endif\n#ifndef GL_DEBUG_SOURCE_SHADER_COMPILER\n#define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248\n#endif\n#ifndef GL_DEBUG_SOURCE_THIRD_PARTY\n#define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249\n#endif\n#ifndef GL_DEBUG_SOURCE_WINDOW_SYSTEM\n#define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247\n#endif\n#ifndef GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR\n#define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D\n#endif\n#ifndef GL_DEBUG_TYPE_ERROR\n#define GL_DEBUG_TYPE_ERROR 0x824C\n#endif\n#ifndef GL_DEBUG_TYPE_MARKER\n#define GL_DEBUG_TYPE_MARKER 0x8268\n#endif\n#ifndef GL_DEBUG_TYPE_OTHER\n#define GL_DEBUG_TYPE_OTHER 0x8251\n#endif\n#ifndef GL_DEBUG_TYPE_PERFORMANCE\n#define GL_DEBUG_TYPE_PERFORMANCE 0x8250\n#endif\n#ifndef GL_DEBUG_TYPE_PORTABILITY\n#define GL_DEBUG_TYPE_PORTABILITY 0x824F\n#endif\n#ifndef GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR\n#define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E\n#endif\n#ifndef GL_DEPTH\n#define GL_DEPTH 0x1801\n#endif\n#ifndef GL_DEPTH_COMPONENT24\n#define GL_DEPTH_COMPONENT24 0x81A6\n#endif\n#ifndef GL_DEPTH_COMPONENT32\n#define GL_DEPTH_COMPONENT32 0x81A7\n#endif\n#ifndef GL_DEPTH_STENCIL\n#define GL_DEPTH_STENCIL 0x84F9\n#endif\n#ifndef GL_DEPTH24_STENCIL8\n#define GL_DEPTH24_STENCIL8 0x88F0\n#endif\n#ifndef GL_DEPTH32F_STENCIL8\n#define GL_DEPTH32F_STENCIL8 0x8CAD\n#endif\n#ifndef GL_DRAW_FRAMEBUFFER\n#define GL_DRAW_FRAMEBUFFER 0x8CA9\n#endif\n#ifndef GL_DRAW_FRAMEBUFFER_BINDING\n#define GL_DRAW_FRAMEBUFFER_BINDING GL_FRAMEBUFFER_BINDING\n#endif\n#ifndef GL_DRAW_INDIRECT_BUFFER\n#define GL_DRAW_INDIRECT_BUFFER 0x8F3F\n#endif\n#ifndef GL_DYNAMIC_COPY\n#define GL_DYNAMIC_COPY 0x88ea\n#endif\n#ifndef GL_DYNAMIC_READ\n#define GL_DYNAMIC_READ 0x88e9\n#endif\n#ifndef GL_ELEMENT_ARRAY_BARRIER_BIT\n#define GL_ELEMENT_ARRAY_BARRIER_BIT 0x2\n#endif\n#ifndef GL_ETC1_RGB8_OES\n#define GL_ETC1_RGB8_OES 0x8D64\n#endif\n#ifndef GL_FILL\n#define GL_FILL 0x1b02\n#endif\n#ifndef GL_FLOAT_32_UNSIGNED_INT_24_8_REV\n#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD\n#endif\n#ifndef GL_FRAGMENT_SHADER_DERIVATIVE_HINT\n#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8b8b\n#endif\n#ifndef GL_FRAMEBUFFER_DEFAULT\n#define GL_FRAMEBUFFER_DEFAULT 0x8218\n#endif\n#ifndef GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE\n#define GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE 0x8215\n#endif\n#ifndef GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE\n#define GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE 0x8214\n#endif\n#ifndef GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE\n#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE 0x8211\n#endif\n#ifndef GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING\n#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING 0x8210\n#endif\n#ifndef GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE\n#define GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE 0x8216\n#endif\n#ifndef GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE\n#define GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE 0x8213\n#endif\n#ifndef GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE\n#define GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE 0x8212\n#endif\n#ifndef GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE\n#define GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE 0x8217\n#endif\n#ifndef GL_FRAMEBUFFER_BARRIER_BIT\n#define GL_FRAMEBUFFER_BARRIER_BIT 0x400\n#endif\n#ifndef GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS\n#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS 0x8CD9\n#endif\n#ifndef GL_FRAMEBUFFER_UNDEFINED\n#define GL_FRAMEBUFFER_UNDEFINED 0x8219\n#endif\n#ifndef GL_FRAMEBUFFER_SRGB\n#define GL_FRAMEBUFFER_SRGB 0x8DB9\n#endif\n#ifndef GL_GENERATE_MIPMAP_HINT\n#define GL_GENERATE_MIPMAP_HINT 0x8192\n#endif\n#ifndef GL_GREEN\n#define GL_GREEN 0x1904\n#endif\n#ifndef GL_HALF_FLOAT\n#define GL_HALF_FLOAT 0x140B\n#endif\n#ifndef GL_HALF_FLOAT_OES\n#define GL_HALF_FLOAT_OES 0x8D61\n#endif\n#ifndef GL_HANDLE_TYPE_OPAQUE_FD_EXT\n#define GL_HANDLE_TYPE_OPAQUE_FD_EXT 0x9586\n#endif\n#ifndef GL_IMAGE_1D\n#define GL_IMAGE_1D 0x904c\n#endif\n#ifndef GL_IMAGE_1D_ARRAY\n#define GL_IMAGE_1D_ARRAY 0x9052\n#endif\n#ifndef GL_IMAGE_2D\n#define GL_IMAGE_2D 0x904d\n#endif\n#ifndef GL_IMAGE_2D_MULTISAMPLE\n#define GL_IMAGE_2D_MULTISAMPLE 0x9055\n#endif\n#ifndef GL_TEXTURE_2D_MULTISAMPLE\n#define GL_TEXTURE_2D_MULTISAMPLE 0x9100\n#endif\n#ifndef GL_IMAGE_2D_ARRAY\n#define GL_IMAGE_2D_ARRAY 0x9053\n#endif\n#ifndef GL_IMAGE_2D_MULTISAMPLE_ARRAY\n#define GL_IMAGE_2D_MULTISAMPLE_ARRAY 0x9056\n#endif\n#ifndef GL_TEXTURE_2D_MULTISAMPLE_ARRAY\n#define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102\n#endif\n#ifndef GL_IMAGE_3D\n#define GL_IMAGE_3D 0x904e\n#endif\n#ifndef GL_IMAGE_CUBE\n#define GL_IMAGE_CUBE 0x9050\n#endif\n#ifndef GL_INVALID_INDEX\n#define GL_INVALID_INDEX 0xFFFFFFFF\n#endif\n#ifndef GL_INT_2_10_10_10_REV\n#define GL_INT_2_10_10_10_REV 0x8D9F\n#endif\n#ifndef GL_LINE\n#define GL_LINE 0x1b01\n#endif\n#ifndef GL_LUMINANCE\n#define GL_LUMINANCE 0x1909\n#endif\n#ifndef GL_LUMINANCE_ALPHA\n#define GL_LUMINANCE_ALPHA 0x190a\n#endif\n#ifndef GL_LUMINANCE8\n#define GL_LUMINANCE8 0x8040\n#endif\n#ifndef GL_LUMINANCE8_ALPHA8\n#define GL_LUMINANCE8_ALPHA8 0x8045\n#endif\n#ifndef GL_MAP_COHERENT_BIT\n#define GL_MAP_COHERENT_BIT 0x80\n#endif\n#ifndef GL_MAP_FLUSH_EXPLICIT_BIT\n#define GL_MAP_FLUSH_EXPLICIT_BIT 0x10\n#endif\n#ifndef GL_MAP_INVALIDATE_BUFFER_BIT\n#define GL_MAP_INVALIDATE_BUFFER_BIT 0x8\n#endif\n#ifndef GL_MAP_INVALIDATE_RANGE_BIT\n#define GL_MAP_INVALIDATE_RANGE_BIT 0x4\n#endif\n#ifndef GL_MAP_PERSISTENT_BIT\n#define GL_MAP_PERSISTENT_BIT 0x40\n#endif\n#ifndef GL_MAP_READ_BIT\n#define GL_MAP_READ_BIT 0x1\n#endif\n#ifndef GL_MAP_WRITE_BIT\n#define GL_MAP_WRITE_BIT 0x2\n#endif\n#ifndef GL_MAP_UNSYNCHRONIZED_BIT\n#define GL_MAP_UNSYNCHRONIZED_BIT 0x20\n#endif\n#ifndef GL_MAX\n#define GL_MAX 0x8008\n#endif\n#ifndef GL_MAX_COMPUTE_UNIFORM_COMPONENTS\n#define GL_MAX_COMPUTE_UNIFORM_COMPONENTS 0x8263\n#endif\n#ifndef GL_MAX_FRAGMENT_UNIFORM_COMPONENTS\n#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8b49\n#endif\n#ifndef GL_MAX_FRAGMENT_UNIFORM_VECTORS\n#define GL_MAX_FRAGMENT_UNIFORM_VECTORS 0x8dfd\n#endif\n#ifndef GL_MAX_NAME_LENGTH\n#define GL_MAX_NAME_LENGTH 0x92f6\n#endif\n#ifndef GL_MAX_SAMPLES\n#define GL_MAX_SAMPLES 0x8D57\n#endif\n#ifndef GL_MAX_SAMPLES_IMG\n#define GL_MAX_SAMPLES_IMG 0x9135\n#endif\n#ifndef GL_MAX_SHADER_STORAGE_BLOCK_SIZE\n#define GL_MAX_SHADER_STORAGE_BLOCK_SIZE 0x90de\n#endif\n#ifndef GL_MAX_TEXTURE_LOD_BIAS\n#define GL_MAX_TEXTURE_LOD_BIAS 0x84FD\n#endif\n#ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY\n#define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF\n#endif\n#ifndef GL_MAX_UNIFORM_BLOCK_SIZE\n#define GL_MAX_UNIFORM_BLOCK_SIZE 0x8a30\n#endif\n#ifndef GL_MAX_VERTEX_UNIFORM_COMPONENTS\n#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8b4a\n#endif\n#ifndef GL_MAX_VERTEX_UNIFORM_VECTORS\n#define GL_MAX_VERTEX_UNIFORM_VECTORS 0x8dfb\n#endif\n#ifndef GL_MIN\n#define GL_MIN 0x8007\n#endif\n#ifndef GL_NUM_EXTENSIONS\n#define GL_NUM_EXTENSIONS 0x821d\n#endif\n#ifndef GL_PACK_ROW_LENGTH\n#define GL_PACK_ROW_LENGTH 0x0d02\n#endif\n#ifndef GL_PIXEL_BUFFER_BARRIER_BIT\n#define GL_PIXEL_BUFFER_BARRIER_BIT 0x80\n#endif\n#ifndef GL_PIXEL_PACK_BUFFER\n#define GL_PIXEL_PACK_BUFFER 0x88eb\n#endif\n#ifndef GL_PIXEL_UNPACK_BUFFER\n#define GL_PIXEL_UNPACK_BUFFER 0x88ec\n#endif\n#ifndef GL_PROGRAM\n#define GL_PROGRAM 0x82e2\n#endif\n#ifndef GL_PROGRAM_OBJECT_EXT\n#define GL_PROGRAM_OBJECT_EXT 0x8B40\n#endif\n#ifndef GL_QUERY_BUFFER_BARRIER_BIT\n#define GL_QUERY_BUFFER_BARRIER_BIT 0x8000\n#endif\n#ifndef GL_R16\n#define GL_R16 0x822A\n#endif\n#ifndef GL_R16F\n#define GL_R16F 0x822D\n#endif\n#ifndef GL_R16UI\n#define GL_R16UI 0x8234\n#endif\n#ifndef GL_R32F\n#define GL_R32F 0x822E\n#endif\n#ifndef GL_R32UI\n#define GL_R32UI 0x8236\n#endif\n#ifndef GL_R8\n#define GL_R8 0x8229\n#endif\n#ifndef GL_READ_FRAMEBUFFER\n#define GL_READ_FRAMEBUFFER 0x8CA8\n#endif\n#ifndef GL_READ_FRAMEBUFFER_BINDING\n#define GL_READ_FRAMEBUFFER_BINDING 0x8CAA\n#endif\n#ifndef GL_READ_ONLY\n#define GL_READ_ONLY 0x88b8\n#endif\n#ifndef GL_READ_WRITE\n#define GL_READ_WRITE 0x88ba\n#endif\n#ifndef GL_RED\n#define GL_RED 0x1903\n#endif\n#ifndef GL_RED_INTEGER\n#define GL_RED_INTEGER 0x8d94\n#endif\n#ifndef GL_RG\n#define GL_RG 0x8227\n#endif\n#ifndef GL_RG_INTEGER\n#define GL_RG_INTEGER 0x8228\n#endif\n#ifndef GL_RG16\n#define GL_RG16 0x822C\n#endif\n#ifndef GL_RG16F\n#define GL_RG16F 0x822F\n#endif\n#ifndef GL_RGBA16\n#define GL_RGBA16 0x805B\n#endif\n#ifndef GL_RG32F\n#define GL_RG32F 0x8230\n#endif\n#ifndef GL_RG8\n#define GL_RG8 0x822B\n#endif\n#ifndef GL_RGB_422_APPLE\n#define GL_RGB_422_APPLE 0x8A1F\n#endif\n#ifndef GL_RGB_INTEGER\n#define GL_RGB_INTEGER 0x8d98\n#endif\n#ifndef GL_RGB_RAW_422_APPLE\n#define GL_RGB_RAW_422_APPLE 0x8A51\n#endif\n#ifndef GL_RGB10_A2\n#define GL_RGB10_A2 0x8059\n#endif\n#ifndef GL_RGB10_A2UI\n#define GL_RGB10_A2UI 0x906f\n#endif\n#ifndef GL_RGB16F\n#define GL_RGB16F 0x881B\n#endif\n#ifndef GL_RGB32F\n#define GL_RGB32F 0x8815\n#endif\n#ifndef GL_RGB8\n#define GL_RGB8 0x8051\n#endif\n#ifndef GL_RGBA_INTEGER\n#define GL_RGBA_INTEGER 0x8d99\n#endif\n#ifndef GL_RGBA16F\n#define GL_RGBA16F 0x881A\n#endif\n#ifndef GL_RG16UI\n#define GL_RG16UI 0x823a\n#endif\n#ifndef GL_RGBA32F\n#define GL_RGBA32F 0x8814\n#endif\n#ifndef GL_RGBA32UI\n#define GL_RGBA32UI 0x8d70\n#endif\n#ifndef GL_RGBA8\n#define GL_RGBA8 0x8058\n#endif\n#ifndef GL_SAMPLER_1D\n#define GL_SAMPLER_1D 0x8B5D\n#endif\n#ifndef GL_SAMPLER_1D_ARRAY\n#define GL_SAMPLER_1D_ARRAY 0x8dc0\n#endif\n#ifndef GL_SAMPLER_2D_ARRAY\n#define GL_SAMPLER_2D_ARRAY 0x8dc1\n#endif\n#ifndef GL_SAMPLER_2D_MULTISAMPLE\n#define GL_SAMPLER_2D_MULTISAMPLE 0x9108\n#endif\n#ifndef GL_SAMPLER_3D\n#define GL_SAMPLER_3D 0x8B5F\n#endif\n#ifndef GL_SAMPLER_EXTERNAL_OES\n#define GL_SAMPLER_EXTERNAL_OES 0x8D66\n#endif\n#ifndef GL_SHADER\n#define GL_SHADER 0x82e1\n#endif\n#ifndef GL_SHADER_IMAGE_ACCESS_BARRIER_BIT\n#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x20\n#endif\n#ifndef GL_SHADER_OBJECT_EXT\n#define GL_SHADER_OBJECT_EXT 0x8B48\n#endif\n#ifndef GL_SHADER_STORAGE_BARRIER_BIT\n#define GL_SHADER_STORAGE_BARRIER_BIT 0x2000\n#endif\n#ifndef GL_SHADER_STORAGE_BLOCK\n#define GL_SHADER_STORAGE_BLOCK 0x92e6\n#endif\n#ifndef GL_SHADER_STORAGE_BUFFER\n#define GL_SHADER_STORAGE_BUFFER 0x90d2\n#endif\n#ifndef GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT\n#define GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT 0x90df\n#endif\n#ifndef GL_SIGNALED\n#define GL_SIGNALED 0x9119\n#endif\n#ifndef GL_SIGNED_NORMALIZED\n#define GL_SIGNED_NORMALIZED 0x8f9c\n#endif\n#ifndef GL_SRGB\n#define GL_SRGB 0x8c40\n#endif\n#ifndef GL_SRGB_ALPHA\n#define GL_SRGB_ALPHA 0x8c42\n#endif\n#ifndef GL_SRGB8\n#define GL_SRGB8 0x8c41\n#endif\n#ifndef GL_SRGB8_ALPHA8\n#define GL_SRGB8_ALPHA8 0x8C43\n#endif\n#ifndef GL_STATIC_COPY\n#define GL_STATIC_COPY 0x88e6\n#endif\n#ifndef GL_STATIC_READ\n#define GL_STATIC_READ 0x88e5\n#endif\n#ifndef GL_STENCIL\n#define GL_STENCIL 0x1802\n#endif\n#ifndef GL_STENCIL_INDEX\n#define GL_STENCIL_INDEX 0x1901\n#endif\n#ifndef GL_STREAM_COPY\n#define GL_STREAM_COPY 0x88e2\n#endif\n#ifndef GL_STREAM_READ\n#define GL_STREAM_READ 0x88e1\n#endif\n#ifndef GL_SYNC_GPU_COMMANDS_COMPLETE\n#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117\n#endif\n#ifndef GL_SYNC_STATUS\n#define GL_SYNC_STATUS 0x9114\n#endif\n#ifndef GL_TEXTURE_SWIZZLE_A\n#define GL_TEXTURE_SWIZZLE_A 0x8e45\n#endif\n#ifndef GL_TEXTURE_SWIZZLE_B\n#define GL_TEXTURE_SWIZZLE_B 0x8e44\n#endif\n#ifndef GL_TEXTURE_SWIZZLE_G\n#define GL_TEXTURE_SWIZZLE_G 0x8e43\n#endif\n#ifndef GL_TEXTURE_SWIZZLE_R\n#define GL_TEXTURE_SWIZZLE_R 0x8e42\n#endif\n#ifndef GL_TEXTURE_1D\n#define GL_TEXTURE_1D 0xde0\n#endif\n#ifndef GL_TEXTURE_1D_ARRAY\n#define GL_TEXTURE_1D_ARRAY 0x8c18\n#endif\n#ifndef GL_TEXTURE_2D_ARRAY\n#define GL_TEXTURE_2D_ARRAY 0x8C1A\n#endif\n#ifndef GL_TEXTURE_3D\n#define GL_TEXTURE_3D 0x806F\n#endif\n#ifndef GL_TEXTURE_COMPARE_FUNC\n#define GL_TEXTURE_COMPARE_FUNC 0x884d\n#endif\n#ifndef GL_TEXTURE_COMPARE_MODE\n#define GL_TEXTURE_COMPARE_MODE 0x884c\n#endif\n#ifndef GL_TEXTURE_CUBE_MAP_SEAMLESS\n#define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884f\n#endif\n#ifndef GL_TEXTURE_EXTERNAL_OES\n#define GL_TEXTURE_EXTERNAL_OES 0x8D65\n#endif\n#ifndef GL_TEXTURE_FETCH_BARRIER_BIT\n#define GL_TEXTURE_FETCH_BARRIER_BIT 0x8\n#endif\n#ifndef GL_TEXTURE_LOD_BIAS\n#define GL_TEXTURE_LOD_BIAS 0x8501\n#endif\n#ifndef GL_TEXTURE_MAX_ANISOTROPY\n#define GL_TEXTURE_MAX_ANISOTROPY 0x84FE\n#endif\n#ifndef GL_TEXTURE_MAX_LEVEL\n#define GL_TEXTURE_MAX_LEVEL 0x813d\n#endif\n#ifndef GL_TEXTURE_MAX_LOD\n#define GL_TEXTURE_MAX_LOD 0x813b\n#endif\n#ifndef GL_TEXTURE_MIN_LOD\n#define GL_TEXTURE_MIN_LOD 0x813a\n#endif\n#ifndef GL_TEXTURE_RECTANGLE\n#define GL_TEXTURE_RECTANGLE 0x84F5\n#endif\n#ifndef GL_TEXTURE_UPDATE_BARRIER_BIT\n#define GL_TEXTURE_UPDATE_BARRIER_BIT 0x100\n#endif\n#ifndef GL_TEXTURE_WRAP_R\n#define GL_TEXTURE_WRAP_R 0x8072\n#endif\n#ifndef GL_TRANSFORM_FEEDBACK_BARRIER_BIT\n#define GL_TRANSFORM_FEEDBACK_BARRIER_BIT 0x800\n#endif\n#ifndef GL_TRANSFORM_FEEDBACK_BUFFER\n#define GL_TRANSFORM_FEEDBACK_BUFFER 0x8c8e\n#endif\n#ifndef GL_UNIFORM_BARRIER_BIT\n#define GL_UNIFORM_BARRIER_BIT 0x4\n#endif\n#ifndef GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES\n#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES 0x8a43\n#endif\n#ifndef GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS\n#define GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS 0x8a42\n#endif\n#ifndef GL_UNIFORM_BLOCK_BINDING\n#define GL_UNIFORM_BLOCK_BINDING 0x8a3f\n#endif\n#ifndef GL_UNIFORM_BLOCK_DATA_SIZE\n#define GL_UNIFORM_BLOCK_DATA_SIZE 0x8a40\n#endif\n#ifndef GL_UNIFORM_BUFFER\n#define GL_UNIFORM_BUFFER 0x8a11\n#endif\n#ifndef GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT\n#define GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT 0x8a34\n#endif\n#ifndef GL_UNIFORM_NAME_LENGTH\n#define GL_UNIFORM_NAME_LENGTH 0x8a39\n#endif\n#ifndef GL_UNIFORM_OFFSET\n#define GL_UNIFORM_OFFSET 0x8a3b\n#endif\n#ifndef GL_UNPACK_ROW_LENGTH\n#define GL_UNPACK_ROW_LENGTH 0x0cf2\n#endif\n#ifndef GL_UNSIGNED_INT_10F_11F_11F_REV\n#define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8c3b\n#endif\n#ifndef GL_UNSIGNED_INT_2_10_10_10_REV\n#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368\n#endif\n#ifndef GL_UNSIGNED_INT_24_8\n#define GL_UNSIGNED_INT_24_8 0x84fa\n#endif\n#ifndef GL_UNSIGNED_INT_5_9_9_9_REV\n#define GL_UNSIGNED_INT_5_9_9_9_REV 0x8c3e\n#endif\n#ifndef GL_UNSIGNED_INT_8_8_8_8_REV\n#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367\n#endif\n#ifndef GL_UNSIGNED_SHORT_1_5_5_5_REV\n#define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366\n#endif\n#ifndef GL_UNSIGNED_SHORT_4_4_4_4_REV\n#define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365\n#endif\n#ifndef GL_UNSIGNED_SHORT_8_8_APPLE\n#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA\n#endif\n#ifndef GL_UNSIGNED_SHORT_8_8_REV_APPLE\n#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB\n#endif\n#ifndef GL_UNSIGNED_NORMALIZED\n#define GL_UNSIGNED_NORMALIZED 0x8c17\n#endif\n#ifndef GL_VERTEX_ARRAY_BINDING\n#define GL_VERTEX_ARRAY_BINDING 0x85B5\n#endif\n#ifndef GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT\n#define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x1\n#endif\n#ifndef GL_WRITE_ONLY\n#define GL_WRITE_ONLY 0x88b9\n#endif\n"
  },
  {
    "path": "src/igl/opengl/HWDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/HWDevice.h>\n\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl {\n\nstd::unique_ptr<Device> HWDevice::create(Result* outResult) const {\n  auto context = createContext(outResult);\n  if (context == nullptr) {\n    return nullptr;\n  }\n  return createWithContext(std::move(context), outResult);\n}\n\nstd::unique_ptr<Device> HWDevice::create(BackendVersion backendVersion, Result* outResult) {\n  auto context = createContext(backendVersion, IGL_EGL_NULL_WINDOW, outResult);\n  if (!context) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"context is null\");\n    return nullptr;\n  }\n\n  return createWithContext(std::move(context), outResult);\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/HWDevice.h>\n#include <igl/Macros.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\n#if IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX || IGL_PLATFORM_EMSCRIPTEN\n#include <EGL/eglplatform.h>\n#elif IGL_PLATFORM_IOS || IGL_PLATFORM_MACOSX\n#define EGLNativeWindowType void*\n#elif IGL_ANGLE || defined(IGL_CMAKE_BUILD)\n#include <EGL/eglplatform.h>\n#else\n#define EGLNativeWindowType void*\n#endif\n\n#if IGL_PLATFORM_LINUX\n#define IGL_EGL_NULL_WINDOW 0L\n#else\n#define IGL_EGL_NULL_WINDOW nullptr\n#endif\n\nnamespace igl::opengl {\n\nclass HWDevice {\n public:\n  HWDevice() = default;\n\n  virtual ~HWDevice() = default;\n\n  virtual std::unique_ptr<IContext> createContext(Result* outResult) const = 0;\n\n  virtual std::unique_ptr<IContext> createContext(BackendVersion backendVersion,\n                                                  EGLNativeWindowType nativeWindow,\n                                                  Result* outResult) const = 0;\n\n  virtual std::unique_ptr<Device> createWithContext(std::unique_ptr<IContext> context,\n                                                    Result* outResult) const = 0;\n\n  std::unique_ptr<Device> create(Result* outResult = nullptr) const;\n\n  std::unique_ptr<Device> create(BackendVersion backendVersion, Result* outResult = nullptr);\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/IContext.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/IContext.h>\n\n#include <cstring>\n#if IGL_DEBUG\n#include <mutex>\n#endif\n#include <string>\n#include <igl/DeviceFeatures.h>\n#include <igl/opengl/GLFunc.h>\n#include <igl/opengl/GLIncludes.h>\n\n#if defined(IGL_WITH_TRACY_GPU)\n#include \"tracy/TracyOpenGL.hpp\"\n#endif\n\n// Uncomment to enable shader validation\n// #define IGL_VALIDATE_SHADERS\n\n#if IGL_API_LOG\n\n#include <sstream>\n\n#define APILOG_DEC_DRAW_COUNT() \\\n  if (apiLogDrawsLeft_) {       \\\n    apiLogDrawsLeft_--;         \\\n  }\n#define APILOG(format, ...)                    \\\n  if (apiLogDrawsLeft_ || apiLogEnabled_) {    \\\n    IGLLog(IGLLogInfo, format, ##__VA_ARGS__); \\\n  }\nnamespace {\nuint32_t logSourceChunk(uint32_t line, const char* string, size_t length) {\n  int printLen = 0;\n  const char* lineString = string;\n  while (length > 0) {\n    if (*string == '\\r' || *string == '\\n') {\n      if (printLen > 0) {\n        IGLLog(IGLLogInfo, \"%3u: %.*s\\n\", line++, printLen, lineString);\n      }\n      printLen = 0;\n      lineString = string + 1;\n    } else {\n      printLen++;\n    }\n    ++string;\n    --length;\n  }\n  if (printLen > 0) {\n    IGLLog(IGLLogInfo, \"%3u: %.*s\\n\", line++, printLen, lineString);\n  }\n  return line;\n}\n\nvoid logSource(const int count, const char** string, const int* length) {\n  if (!string) {\n    return;\n  }\n  uint32_t line = 1;\n  for (int i = 0; i < count; ++i) {\n    if (!string[i]) {\n      continue;\n    }\n    line = logSourceChunk(\n        line, string[i], !length ? std::strlen(string[i]) : static_cast<size_t>(length[i]));\n  }\n}\n} // namespace\n#define APILOG_SOURCE(count, string, length) logSource(count, string, length);\n\n#else\n#define APILOG_DEC_DRAW_COUNT() static_cast<void>(0)\n#define APILOG(format, ...) static_cast<void>(0)\n#define APILOG_SOURCE(count, string, length) static_cast<void>(0)\n#endif // IGL_API_LOG\n\n#define GLCALL(funcName)                                        \\\n  IGL_SOFT_ASSERT(isCurrentContext() || isCurrentSharegroup()); \\\n  callCounter_++;                                               \\\n  gl##funcName\n\n#define IGLCALL(funcName)                                       \\\n  IGL_SOFT_ASSERT(isCurrentContext() || isCurrentSharegroup()); \\\n  callCounter_++;                                               \\\n  igl##funcName\n\n#define GLCALL_WITH_RETURN(ret, funcName)                       \\\n  IGL_SOFT_ASSERT(isCurrentContext() || isCurrentSharegroup()); \\\n  callCounter_++;                                               \\\n  ret = gl##funcName\n\n#define IGLCALL_WITH_RETURN(ret, funcName)                      \\\n  IGL_SOFT_ASSERT(isCurrentContext() || isCurrentSharegroup()); \\\n  callCounter_++;                                               \\\n  ret = igl##funcName\n\n#define GLCALL_PROC(funcPtr, ...)                               \\\n  IGL_SOFT_ASSERT(isCurrentContext() || isCurrentSharegroup()); \\\n  if (IGL_DEBUG_VERIFY(funcPtr)) {                              \\\n    callCounter_++;                                             \\\n    (*funcPtr)(__VA_ARGS__);                                    \\\n  }\n\n#define GLCALL_PROC_WITH_RETURN(ret, funcPtr, returnOnError, ...) \\\n  IGL_SOFT_ASSERT(isCurrentContext() || isCurrentSharegroup());   \\\n  if (IGL_DEBUG_VERIFY(funcPtr)) {                                \\\n    callCounter_++;                                               \\\n    ret = (*funcPtr)(__VA_ARGS__);                                \\\n  } else {                                                        \\\n    ret = returnOnError;                                          \\\n  }\n\n#if IGL_DEBUG\n#define GLCHECK_ERRORS()                      \\\n  do {                                        \\\n    if (alwaysCheckError_) {                  \\\n      checkForErrors(__FUNCTION__, __LINE__); \\\n    }                                         \\\n  } while (false)\n#define GL_ASSERT_ERROR(condition, callerName, lineNum, errorCode) \\\n  IGL_DEBUG_ASSERT((condition),                                    \\\n                   \"[IGL] OpenGL error [%s:%zu] 0x%04X: %s\\n\",     \\\n                   callerName,                                     \\\n                   lineNum,                                        \\\n                   errorCode,                                      \\\n                   GL_ERROR_TO_STRING(errorCode))\n#else\n#define GLCHECK_ERRORS() static_cast<void>(0)\n#define GL_ASSERT_ERROR(condition, callerName, lineNum, errorCode) static_cast<void>(0)\n#endif // IGL_DEBUG\n\n#define RESULT_CASE(res) \\\n  case res:              \\\n    return #res;\n\n#if IGL_API_LOG\n  // Enclose this function with the #ifdef to stop the compiler\n// from complaining that this function is unused (in the non debug/log path)\nnamespace {\nstd::string GLboolToString(GLboolean val) {\n  return val ? \"true\" : \"false\";\n}\n\nstd::string GLenumToString(GLenum code) {\n  switch (code) {\n    RESULT_CASE(GL_ACTIVE_ATTRIBUTES)\n    RESULT_CASE(GL_ACTIVE_ATTRIBUTE_MAX_LENGTH)\n    RESULT_CASE(GL_ACTIVE_RESOURCES)\n    RESULT_CASE(GL_ACTIVE_TEXTURE)\n    RESULT_CASE(GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH)\n    RESULT_CASE(GL_ACTIVE_UNIFORM_BLOCKS)\n    RESULT_CASE(GL_ACTIVE_UNIFORM_MAX_LENGTH)\n    RESULT_CASE(GL_ACTIVE_UNIFORMS)\n    RESULT_CASE(GL_ALIASED_LINE_WIDTH_RANGE)\n    RESULT_CASE(GL_ALPHA_BITS)\n    RESULT_CASE(GL_ALPHA8)\n    RESULT_CASE(GL_ALWAYS)\n    RESULT_CASE(GL_ARRAY_BUFFER)\n    RESULT_CASE(GL_ARRAY_BUFFER_BINDING)\n    RESULT_CASE(GL_ATTACHED_SHADERS)\n    RESULT_CASE(GL_BACK)\n    RESULT_CASE(GL_BGR)\n    RESULT_CASE(GL_BGRA)\n    RESULT_CASE(GL_BGRA8_EXT)\n    RESULT_CASE(GL_BLEND)\n    RESULT_CASE(GL_BLEND_COLOR)\n    RESULT_CASE(GL_BLEND_DST_ALPHA)\n    RESULT_CASE(GL_BLEND_EQUATION_RGB)\n    RESULT_CASE(GL_BLEND_EQUATION_ALPHA)\n    RESULT_CASE(GL_BLEND_SRC_ALPHA)\n    RESULT_CASE(GL_BLEND_SRC_RGB)\n    RESULT_CASE(GL_BLUE)\n    RESULT_CASE(GL_BUFFER)\n    RESULT_CASE(GL_BUFFER_BINDING)\n    RESULT_CASE(GL_BUFFER_OBJECT_EXT)\n    RESULT_CASE(GL_BUFFER_SIZE)\n    RESULT_CASE(GL_BUFFER_USAGE)\n    RESULT_CASE(GL_BYTE)\n    RESULT_CASE(GL_CLAMP_TO_EDGE)\n    RESULT_CASE(GL_COLOR)\n    RESULT_CASE(GL_COLOR_ATTACHMENT0)\n    RESULT_CASE(GL_COLOR_ATTACHMENT1)\n    RESULT_CASE(GL_COMPARE_REF_TO_TEXTURE)\n    RESULT_CASE(GL_COMPRESSED_R11_EAC)\n    RESULT_CASE(GL_COMPRESSED_RG11_EAC)\n    RESULT_CASE(GL_COMPRESSED_RGB8_ETC2)\n    RESULT_CASE(GL_COMPRESSED_RGBA8_ETC2_EAC)\n    RESULT_CASE(GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2)\n    RESULT_CASE(GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG)\n    RESULT_CASE(GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG)\n    RESULT_CASE(GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG)\n    RESULT_CASE(GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_10x10_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_10x6_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_10x8_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_10x5_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_12x10_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_12x12_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_4x4_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_5x4_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_5x5_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_6x5_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_6x6_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_8x5_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_8x6_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_ASTC_8x8_KHR)\n    RESULT_CASE(GL_COMPRESSED_RGBA_BPTC_UNORM)\n    RESULT_CASE(GL_COMPRESSED_SIGNED_R11_EAC)\n    RESULT_CASE(GL_COMPRESSED_SIGNED_RG11_EAC)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ETC2)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC)\n    RESULT_CASE(GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2)\n    RESULT_CASE(GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM)\n    RESULT_CASE(GL_COMPILE_STATUS)\n    RESULT_CASE(GL_COMPUTE_SHADER)\n    RESULT_CASE(GL_CONSTANT_ALPHA)\n    RESULT_CASE(GL_CONSTANT_COLOR)\n    RESULT_CASE(GL_COPY_READ_BUFFER)\n    RESULT_CASE(GL_COPY_WRITE_BUFFER)\n    RESULT_CASE(GL_CULL_FACE)\n    RESULT_CASE(GL_CURRENT_PROGRAM)\n    RESULT_CASE(GL_CW)\n    RESULT_CASE(GL_CCW)\n    RESULT_CASE(GL_CURRENT_VERTEX_ATTRIB)\n    RESULT_CASE(GL_DEBUG_LOGGED_MESSAGES)\n    RESULT_CASE(GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH)\n    RESULT_CASE(GL_DEBUG_OUTPUT)\n    RESULT_CASE(GL_DEBUG_SEVERITY_HIGH)\n    RESULT_CASE(GL_DEBUG_SEVERITY_LOW)\n    RESULT_CASE(GL_DEBUG_SEVERITY_MEDIUM)\n    RESULT_CASE(GL_DEBUG_SEVERITY_NOTIFICATION)\n    RESULT_CASE(GL_DEBUG_SOURCE_API)\n    RESULT_CASE(GL_DEBUG_SOURCE_APPLICATION)\n    RESULT_CASE(GL_DEBUG_SOURCE_OTHER)\n    RESULT_CASE(GL_DEBUG_SOURCE_SHADER_COMPILER)\n    RESULT_CASE(GL_DEBUG_SOURCE_THIRD_PARTY)\n    RESULT_CASE(GL_DEBUG_SOURCE_WINDOW_SYSTEM)\n    RESULT_CASE(GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR)\n    RESULT_CASE(GL_DEBUG_TYPE_ERROR)\n    RESULT_CASE(GL_DEBUG_TYPE_MARKER)\n    RESULT_CASE(GL_DEBUG_TYPE_OTHER)\n    RESULT_CASE(GL_DEBUG_TYPE_PERFORMANCE)\n    RESULT_CASE(GL_DEBUG_TYPE_PORTABILITY)\n    RESULT_CASE(GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR)\n    RESULT_CASE(GL_DECR)\n    RESULT_CASE(GL_DECR_WRAP)\n    RESULT_CASE(GL_DELETE_STATUS)\n    RESULT_CASE(GL_DEPTH)\n    RESULT_CASE(GL_DEPTH_ATTACHMENT)\n    RESULT_CASE(GL_DEPTH_COMPONENT)\n    RESULT_CASE(GL_DEPTH_COMPONENT16)\n    RESULT_CASE(GL_DEPTH_COMPONENT24)\n    RESULT_CASE(GL_DEPTH_COMPONENT32)\n    RESULT_CASE(GL_DEPTH_STENCIL)\n    RESULT_CASE(GL_DEPTH24_STENCIL8)\n    RESULT_CASE(GL_DEPTH32F_STENCIL8)\n    RESULT_CASE(GL_DEPTH_TEST)\n    RESULT_CASE(GL_DITHER)\n    RESULT_CASE(GL_DONT_CARE)\n    RESULT_CASE(GL_DRAW_FRAMEBUFFER)\n    RESULT_CASE(GL_DRAW_INDIRECT_BUFFER)\n    RESULT_CASE(GL_DST_ALPHA)\n    RESULT_CASE(GL_DST_COLOR)\n    RESULT_CASE(GL_DYNAMIC_COPY)\n    RESULT_CASE(GL_DYNAMIC_DRAW)\n    RESULT_CASE(GL_DYNAMIC_READ)\n    RESULT_CASE(GL_ELEMENT_ARRAY_BUFFER)\n    RESULT_CASE(GL_EQUAL)\n    RESULT_CASE(GL_ETC1_RGB8_OES)\n    RESULT_CASE(GL_EXTENSIONS)\n    RESULT_CASE(GL_FASTEST)\n    RESULT_CASE(GL_FILL)\n    RESULT_CASE(GL_FLOAT)\n    RESULT_CASE(GL_FLOAT_32_UNSIGNED_INT_24_8_REV)\n    RESULT_CASE(GL_FLOAT_MAT2)\n    RESULT_CASE(GL_FLOAT_MAT3)\n    RESULT_CASE(GL_FLOAT_MAT4)\n    RESULT_CASE(GL_FLOAT_VEC2)\n    RESULT_CASE(GL_FLOAT_VEC3)\n    RESULT_CASE(GL_FLOAT_VEC4)\n    RESULT_CASE(GL_FRAGMENT_SHADER)\n    RESULT_CASE(GL_FRAGMENT_SHADER_DERIVATIVE_HINT)\n    RESULT_CASE(GL_FRAMEBUFFER)\n    RESULT_CASE(GL_FRAMEBUFFER_DEFAULT)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE)\n    RESULT_CASE(GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL)\n    RESULT_CASE(GL_FRAMEBUFFER_BINDING)\n    RESULT_CASE(GL_FRAMEBUFFER_COMPLETE)\n    RESULT_CASE(GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT)\n    RESULT_CASE(GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT)\n    RESULT_CASE(GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS)\n    RESULT_CASE(GL_FRAMEBUFFER_UNDEFINED)\n    RESULT_CASE(GL_FRAMEBUFFER_UNSUPPORTED)\n    RESULT_CASE(GL_FRAMEBUFFER_SRGB)\n    RESULT_CASE(GL_FRONT)\n    RESULT_CASE(GL_FRONT_AND_BACK)\n    RESULT_CASE(GL_FUNC_ADD)\n    RESULT_CASE(GL_FUNC_SUBTRACT)\n    RESULT_CASE(GL_FUNC_REVERSE_SUBTRACT)\n    RESULT_CASE(GL_KEEP)\n    RESULT_CASE(GL_GENERATE_MIPMAP_HINT)\n    RESULT_CASE(GL_GEQUAL)\n    RESULT_CASE(GL_GREATER)\n    RESULT_CASE(GL_GREEN)\n    RESULT_CASE(GL_HALF_FLOAT)\n    RESULT_CASE(GL_HALF_FLOAT_OES)\n    RESULT_CASE(GL_HANDLE_TYPE_OPAQUE_FD_EXT)\n    RESULT_CASE(GL_HIGH_FLOAT)\n    RESULT_CASE(GL_HIGH_INT)\n    RESULT_CASE(GL_IMAGE_1D)\n    RESULT_CASE(GL_IMAGE_1D_ARRAY)\n    RESULT_CASE(GL_IMAGE_2D)\n    RESULT_CASE(GL_IMAGE_2D_MULTISAMPLE)\n    RESULT_CASE(GL_IMAGE_2D_ARRAY)\n    RESULT_CASE(GL_IMAGE_2D_MULTISAMPLE_ARRAY)\n    RESULT_CASE(GL_IMAGE_3D)\n    RESULT_CASE(GL_IMAGE_CUBE)\n    RESULT_CASE(GL_INCR)\n    RESULT_CASE(GL_INCR_WRAP)\n    RESULT_CASE(GL_INFO_LOG_LENGTH)\n    RESULT_CASE(GL_INT)\n    RESULT_CASE(GL_INT_2_10_10_10_REV)\n    RESULT_CASE(GL_INVERT)\n    RESULT_CASE(GL_LESS)\n    RESULT_CASE(GL_LEQUAL)\n    RESULT_CASE(GL_LINE)\n    RESULT_CASE(GL_LINE_STRIP)\n    RESULT_CASE(GL_LINE_LOOP)\n    RESULT_CASE(GL_LINEAR)\n    RESULT_CASE(GL_LINEAR_MIPMAP_NEAREST)\n    RESULT_CASE(GL_LINEAR_MIPMAP_LINEAR)\n    RESULT_CASE(GL_LINES)\n    RESULT_CASE(GL_LINK_STATUS)\n    RESULT_CASE(GL_LOW_FLOAT)\n    RESULT_CASE(GL_LOW_INT)\n    RESULT_CASE(GL_LUMINANCE)\n    RESULT_CASE(GL_LUMINANCE_ALPHA)\n    RESULT_CASE(GL_LUMINANCE8)\n    RESULT_CASE(GL_LUMINANCE8_ALPHA8)\n    RESULT_CASE(GL_MAX)\n    RESULT_CASE(GL_MAX_COMPUTE_UNIFORM_COMPONENTS)\n    RESULT_CASE(GL_MAX_CUBE_MAP_TEXTURE_SIZE)\n    RESULT_CASE(GL_MAX_DEBUG_GROUP_STACK_DEPTH)\n    RESULT_CASE(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS)\n    RESULT_CASE(GL_MAX_FRAGMENT_UNIFORM_VECTORS)\n    RESULT_CASE(GL_MAX_NAME_LENGTH)\n    RESULT_CASE(GL_MAX_SAMPLES)\n    RESULT_CASE(GL_MAX_SAMPLES_IMG)\n    RESULT_CASE(GL_MAX_TEXTURE_SIZE)\n    RESULT_CASE(GL_MAX_UNIFORM_BLOCK_SIZE)\n    RESULT_CASE(GL_MAX_VERTEX_ATTRIBS)\n    RESULT_CASE(GL_MAX_VERTEX_UNIFORM_COMPONENTS)\n    RESULT_CASE(GL_MAX_VERTEX_UNIFORM_VECTORS)\n    RESULT_CASE(GL_MEDIUM_FLOAT)\n    RESULT_CASE(GL_MEDIUM_INT)\n    RESULT_CASE(GL_MIN)\n    RESULT_CASE(GL_MIRRORED_REPEAT)\n    RESULT_CASE(GL_NEAREST)\n    RESULT_CASE(GL_NEAREST_MIPMAP_NEAREST)\n    RESULT_CASE(GL_NEAREST_MIPMAP_LINEAR)\n    RESULT_CASE(GL_NEVER)\n    RESULT_CASE(GL_NICEST)\n    RESULT_CASE(GL_NOTEQUAL)\n    RESULT_CASE(GL_NUM_EXTENSIONS)\n    RESULT_CASE(GL_ONE_MINUS_CONSTANT_ALPHA)\n    RESULT_CASE(GL_ONE_MINUS_CONSTANT_COLOR)\n    RESULT_CASE(GL_ONE_MINUS_DST_ALPHA)\n    RESULT_CASE(GL_ONE_MINUS_DST_COLOR)\n    RESULT_CASE(GL_ONE_MINUS_SRC_ALPHA)\n    RESULT_CASE(GL_ONE_MINUS_SRC_COLOR)\n    RESULT_CASE(GL_PACK_ALIGNMENT)\n    RESULT_CASE(GL_PACK_ROW_LENGTH)\n    RESULT_CASE(GL_PIXEL_PACK_BUFFER)\n    RESULT_CASE(GL_PIXEL_UNPACK_BUFFER)\n    RESULT_CASE(GL_POINTS)\n    RESULT_CASE(GL_POLYGON_OFFSET_FILL)\n    RESULT_CASE(GL_PROGRAM)\n    RESULT_CASE(GL_PROGRAM_OBJECT_EXT)\n    RESULT_CASE(GL_R16)\n    RESULT_CASE(GL_R16F)\n    RESULT_CASE(GL_R16UI)\n    RESULT_CASE(GL_R8)\n    RESULT_CASE(GL_R32F)\n    RESULT_CASE(GL_READ_FRAMEBUFFER)\n    RESULT_CASE(GL_READ_FRAMEBUFFER_BINDING)\n    RESULT_CASE(GL_READ_ONLY)\n    RESULT_CASE(GL_READ_WRITE)\n    RESULT_CASE(GL_RED)\n    RESULT_CASE(GL_RED_INTEGER)\n    RESULT_CASE(GL_RENDERBUFFER)\n    RESULT_CASE(GL_RENDERBUFFER_ALPHA_SIZE)\n    RESULT_CASE(GL_RENDERBUFFER_BINDING)\n    RESULT_CASE(GL_RENDERBUFFER_BLUE_SIZE)\n    RESULT_CASE(GL_RENDERBUFFER_DEPTH_SIZE)\n    RESULT_CASE(GL_RENDERBUFFER_GREEN_SIZE)\n    RESULT_CASE(GL_RENDERBUFFER_HEIGHT)\n    RESULT_CASE(GL_RENDERBUFFER_INTERNAL_FORMAT)\n    RESULT_CASE(GL_RENDERBUFFER_RED_SIZE)\n    RESULT_CASE(GL_RENDERBUFFER_STENCIL_SIZE)\n    RESULT_CASE(GL_RENDERBUFFER_WIDTH)\n    RESULT_CASE(GL_RENDERER)\n    RESULT_CASE(GL_REPEAT)\n    RESULT_CASE(GL_RG)\n    RESULT_CASE(GL_RG_INTEGER)\n    RESULT_CASE(GL_RG16)\n    RESULT_CASE(GL_RG16F)\n    RESULT_CASE(GL_RG16UI)\n    RESULT_CASE(GL_RG8)\n    RESULT_CASE(GL_RGB)\n    RESULT_CASE(GL_RGB_422_APPLE)\n    RESULT_CASE(GL_RGB_INTEGER)\n    RESULT_CASE(GL_RGB_RAW_422_APPLE)\n    RESULT_CASE(GL_RGB10_A2)\n    RESULT_CASE(GL_RGB10_A2UI)\n    RESULT_CASE(GL_RGB16F)\n    RESULT_CASE(GL_RGB32F)\n    RESULT_CASE(GL_RGB5_A1)\n    RESULT_CASE(GL_RGB8)\n    RESULT_CASE(GL_RGBA)\n    RESULT_CASE(GL_RGBA_INTEGER)\n    RESULT_CASE(GL_RGBA16F)\n    RESULT_CASE(GL_RGBA32F)\n    RESULT_CASE(GL_RGBA32UI)\n    RESULT_CASE(GL_RGBA4)\n    RESULT_CASE(GL_RGBA8)\n    RESULT_CASE(GL_REPLACE)\n    RESULT_CASE(GL_SAMPLE_ALPHA_TO_COVERAGE)\n    RESULT_CASE(GL_SAMPLE_COVERAGE)\n    RESULT_CASE(GL_SAMPLER_1D)\n    RESULT_CASE(GL_SAMPLER_1D_ARRAY)\n    RESULT_CASE(GL_SAMPLER_2D)\n    RESULT_CASE(GL_SAMPLER_2D_ARRAY)\n    RESULT_CASE(GL_SAMPLER_2D_MULTISAMPLE)\n    RESULT_CASE(GL_SAMPLER_3D)\n    RESULT_CASE(GL_SAMPLER_EXTERNAL_OES)\n    RESULT_CASE(GL_SCISSOR_TEST)\n    RESULT_CASE(GL_SHADER)\n    RESULT_CASE(GL_SHADER_OBJECT_EXT)\n    RESULT_CASE(GL_SHADER_SOURCE_LENGTH)\n    RESULT_CASE(GL_SHADER_STORAGE_BLOCK)\n    RESULT_CASE(GL_SHADER_STORAGE_BUFFER)\n    RESULT_CASE(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT)\n    RESULT_CASE(GL_SHADER_TYPE)\n    RESULT_CASE(GL_SHADING_LANGUAGE_VERSION)\n    RESULT_CASE(GL_SHORT)\n    RESULT_CASE(GL_SIGNALED)\n    RESULT_CASE(GL_SIGNED_NORMALIZED)\n    RESULT_CASE(GL_SRGB)\n    RESULT_CASE(GL_SRGB_ALPHA)\n    RESULT_CASE(GL_SRGB8)\n    RESULT_CASE(GL_SRGB8_ALPHA8)\n    RESULT_CASE(GL_SRC_ALPHA)\n    RESULT_CASE(GL_SRC_ALPHA_SATURATE)\n    RESULT_CASE(GL_SRC_COLOR)\n    RESULT_CASE(GL_STATIC_COPY)\n    RESULT_CASE(GL_STATIC_DRAW)\n    RESULT_CASE(GL_STATIC_READ)\n    RESULT_CASE(GL_STENCIL)\n    RESULT_CASE(GL_STENCIL_INDEX)\n    RESULT_CASE(GL_STENCIL_INDEX8)\n    RESULT_CASE(GL_STENCIL_TEST)\n    RESULT_CASE(GL_STENCIL_ATTACHMENT)\n    RESULT_CASE(GL_STREAM_COPY)\n    RESULT_CASE(GL_STREAM_DRAW)\n    RESULT_CASE(GL_STREAM_READ)\n    RESULT_CASE(GL_SYNC_GPU_COMMANDS_COMPLETE)\n    RESULT_CASE(GL_SYNC_STATUS)\n    RESULT_CASE(GL_TEXTURE_SWIZZLE_A)\n    RESULT_CASE(GL_TEXTURE_SWIZZLE_B)\n    RESULT_CASE(GL_TEXTURE_SWIZZLE_G)\n    RESULT_CASE(GL_TEXTURE_SWIZZLE_R)\n    RESULT_CASE(GL_TEXTURE)\n    RESULT_CASE(GL_TEXTURE_1D)\n    RESULT_CASE(GL_TEXTURE_1D_ARRAY)\n    RESULT_CASE(GL_TEXTURE_2D)\n    RESULT_CASE(GL_TEXTURE_2D_MULTISAMPLE)\n    RESULT_CASE(GL_TEXTURE_2D_ARRAY)\n    RESULT_CASE(GL_TEXTURE_2D_MULTISAMPLE_ARRAY)\n    RESULT_CASE(GL_TEXTURE_3D)\n    RESULT_CASE(GL_TEXTURE_COMPARE_FUNC)\n    RESULT_CASE(GL_TEXTURE_COMPARE_MODE)\n    RESULT_CASE(GL_TEXTURE_CUBE_MAP)\n    RESULT_CASE(GL_TEXTURE_CUBE_MAP_NEGATIVE_X)\n    RESULT_CASE(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y)\n    RESULT_CASE(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z)\n    RESULT_CASE(GL_TEXTURE_CUBE_MAP_POSITIVE_X)\n    RESULT_CASE(GL_TEXTURE_CUBE_MAP_POSITIVE_Y)\n    RESULT_CASE(GL_TEXTURE_CUBE_MAP_POSITIVE_Z)\n    RESULT_CASE(GL_TEXTURE_CUBE_MAP_SEAMLESS)\n    RESULT_CASE(GL_TEXTURE_EXTERNAL_OES)\n    RESULT_CASE(GL_TEXTURE_MAG_FILTER)\n    RESULT_CASE(GL_TEXTURE_MAX_LEVEL)\n    RESULT_CASE(GL_TEXTURE_MAX_LOD)\n    RESULT_CASE(GL_TEXTURE_MAX_ANISOTROPY)\n    RESULT_CASE(GL_MAX_TEXTURE_MAX_ANISOTROPY)\n    RESULT_CASE(GL_MAX_TEXTURE_LOD_BIAS)\n    RESULT_CASE(GL_TEXTURE_LOD_BIAS)\n    RESULT_CASE(GL_TEXTURE_MIN_FILTER)\n    RESULT_CASE(GL_TEXTURE_MIN_LOD)\n    RESULT_CASE(GL_TEXTURE_RECTANGLE)\n    RESULT_CASE(GL_TEXTURE_WRAP_R)\n    RESULT_CASE(GL_TEXTURE_WRAP_S)\n    RESULT_CASE(GL_TEXTURE_WRAP_T)\n    RESULT_CASE(GL_TEXTURE0)\n    RESULT_CASE(GL_TEXTURE1)\n    RESULT_CASE(GL_TEXTURE2)\n    RESULT_CASE(GL_TEXTURE3)\n    RESULT_CASE(GL_TEXTURE4)\n    RESULT_CASE(GL_TEXTURE5)\n    RESULT_CASE(GL_TEXTURE6)\n    RESULT_CASE(GL_TEXTURE7)\n    RESULT_CASE(GL_TEXTURE8)\n    RESULT_CASE(GL_TRIANGLES)\n    RESULT_CASE(GL_TRIANGLE_FAN)\n    RESULT_CASE(GL_TRIANGLE_STRIP)\n    RESULT_CASE(GL_TRANSFORM_FEEDBACK_BUFFER)\n    RESULT_CASE(GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES)\n    RESULT_CASE(GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS)\n    RESULT_CASE(GL_UNIFORM_BLOCK_BINDING)\n    RESULT_CASE(GL_UNIFORM_BLOCK_DATA_SIZE)\n    RESULT_CASE(GL_UNIFORM_BUFFER)\n    RESULT_CASE(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT)\n    RESULT_CASE(GL_UNIFORM_NAME_LENGTH)\n    RESULT_CASE(GL_UNIFORM_OFFSET)\n    RESULT_CASE(GL_UNPACK_ALIGNMENT)\n    RESULT_CASE(GL_UNPACK_ROW_LENGTH)\n    RESULT_CASE(GL_UNSIGNED_BYTE)\n    RESULT_CASE(GL_UNSIGNED_INT)\n    RESULT_CASE(GL_UNSIGNED_INT_10F_11F_11F_REV)\n    RESULT_CASE(GL_UNSIGNED_INT_2_10_10_10_REV)\n    RESULT_CASE(GL_UNSIGNED_INT_24_8)\n    RESULT_CASE(GL_UNSIGNED_INT_5_9_9_9_REV)\n    RESULT_CASE(GL_UNSIGNED_INT_8_8_8_8_REV)\n    RESULT_CASE(GL_UNSIGNED_SHORT)\n    RESULT_CASE(GL_UNSIGNED_SHORT_1_5_5_5_REV)\n    RESULT_CASE(GL_UNSIGNED_SHORT_4_4_4_4)\n    RESULT_CASE(GL_UNSIGNED_SHORT_4_4_4_4_REV)\n    RESULT_CASE(GL_UNSIGNED_SHORT_5_5_5_1)\n    RESULT_CASE(GL_UNSIGNED_SHORT_5_6_5)\n    RESULT_CASE(GL_UNSIGNED_SHORT_8_8_APPLE)\n    RESULT_CASE(GL_UNSIGNED_SHORT_8_8_REV_APPLE)\n    RESULT_CASE(GL_UNSIGNED_NORMALIZED)\n    RESULT_CASE(GL_VALIDATE_STATUS)\n    RESULT_CASE(GL_VENDOR)\n    RESULT_CASE(GL_VERSION)\n    RESULT_CASE(GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING)\n    RESULT_CASE(GL_VERTEX_ATTRIB_ARRAY_ENABLED)\n    RESULT_CASE(GL_VERTEX_ATTRIB_ARRAY_NORMALIZED)\n    RESULT_CASE(GL_VERTEX_ATTRIB_ARRAY_SIZE)\n    RESULT_CASE(GL_VERTEX_ATTRIB_ARRAY_STRIDE)\n    RESULT_CASE(GL_VERTEX_ATTRIB_ARRAY_TYPE)\n    RESULT_CASE(GL_VERTEX_ARRAY_BINDING)\n    RESULT_CASE(GL_VERTEX_SHADER)\n    RESULT_CASE(GL_VIEWPORT)\n    RESULT_CASE(GL_WRITE_ONLY)\n  default:\n    std::stringstream stream;\n    stream << \"0x\" << std::hex << code;\n    return stream.str();\n  }\n}\n\nstd::string clearBitsToString(GLbitfield bits) {\n  bool first = true;\n  std::stringstream ss;\n  if ((bits & GL_COLOR_BUFFER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_COLOR_BUFFER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_DEPTH_BUFFER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_DEPTH_BUFFER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_STENCIL_BUFFER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_STENCIL_BUFFER_BIT\";\n    first = false;\n  }\n  return ss.str();\n}\n\nstd::string mapBufferRangeBitsToString(GLbitfield bits) {\n  bool first = true;\n  std::stringstream ss;\n  if ((bits & GL_MAP_READ_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_MAP_READ_BIT\";\n    first = false;\n  }\n  if ((bits & GL_MAP_WRITE_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_MAP_WRITE_BIT\";\n    first = false;\n  }\n  if ((bits & GL_MAP_PERSISTENT_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_MAP_PERSISTENT_BIT\";\n    first = false;\n  }\n  if ((bits & GL_MAP_COHERENT_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_MAP_COHERENT_BIT\";\n    first = false;\n  }\n  if ((bits & GL_MAP_INVALIDATE_RANGE_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_MAP_INVALIDATE_RANGE_BIT\";\n    first = false;\n  }\n  if ((bits & GL_MAP_INVALIDATE_BUFFER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_MAP_INVALIDATE_BUFFER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_MAP_FLUSH_EXPLICIT_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_MAP_FLUSH_EXPLICIT_BIT\";\n    first = false;\n  }\n  if ((bits & GL_MAP_UNSYNCHRONIZED_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_MAP_UNSYNCHRONIZED_BIT\";\n    first = false;\n  }\n  return ss.str();\n}\n\nstd::string memoryBarrierBitsToString(GLbitfield bits) {\n  bool first = true;\n  std::stringstream ss;\n  if ((bits & GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_ELEMENT_ARRAY_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_ELEMENT_ARRAY_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_UNIFORM_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_UNIFORM_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_TEXTURE_FETCH_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_TEXTURE_FETCH_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_SHADER_IMAGE_ACCESS_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_SHADER_IMAGE_ACCESS_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_COMMAND_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_COMMAND_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_PIXEL_BUFFER_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_PIXEL_BUFFER_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_TEXTURE_UPDATE_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_TEXTURE_UPDATE_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_BUFFER_UPDATE_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_BUFFER_UPDATE_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_FRAMEBUFFER_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_FRAMEBUFFER_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_TRANSFORM_FEEDBACK_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_TRANSFORM_FEEDBACK_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_ATOMIC_COUNTER_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_ATOMIC_COUNTER_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_SHADER_STORAGE_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_SHADER_STORAGE_BARRIER_BIT\";\n    first = false;\n  }\n  if ((bits & GL_QUERY_BUFFER_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" | \") << \"GL_QUERY_BUFFER_BARRIER_BIT\";\n    first = false;\n  }\n\n  return ss.str();\n}\n\n#define GL_ENUM_TO_STRING(code) GLenumToString(code).c_str()\n#define GL_BOOL_TO_STRING(code) GLboolToString(code).c_str()\n#define GL_CLEAR_BITS_TO_STRING(bits) clearBitsToString(bits).c_str()\n#define GL_MAP_BUFFER_RANGE_BITS_TO_STRING(bits) mapBufferRangeBitsToString(bits).c_str()\n#define GL_MEMORY_BARRIER_BITS_TO_STRING(bits) memoryBarrierBitsToString(bits).c_str()\n\nbool isTextureUniform(GLenum type) {\n  switch (type) {\n  case GL_SAMPLER_2D:\n  case GL_SAMPLER_3D:\n  case GL_SAMPLER_CUBE:\n  case GL_SAMPLER_2D_SHADOW:\n  case GL_SAMPLER_2D_ARRAY:\n  case GL_SAMPLER_2D_ARRAY_SHADOW:\n  case GL_SAMPLER_2D_MULTISAMPLE:\n    return true;\n  default:\n    return false;\n  }\n}\n\nbool isTextureImageUniform(GLenum type) {\n  switch (type) {\n  case GL_IMAGE_2D:\n  case GL_IMAGE_3D:\n  case GL_IMAGE_CUBE:\n  case GL_IMAGE_2D_ARRAY:\n  case GL_IMAGE_2D_MULTISAMPLE:\n  case GL_IMAGE_2D_MULTISAMPLE_ARRAY:\n    return true;\n  default:\n    return false;\n  }\n}\n} // namespace\n#endif // IGL_API_LOG\n\n// Debug logging is not included in code coverage\n// FIXME_DEPRECATED_COVERAGE_EXCLUDE_START\n\nnamespace {\n\n#if IGL_DEBUG || IGL_API_LOG\nconst char* glDebugSeverityToString(GLenum severity) {\n  switch (severity) {\n    RESULT_CASE(GL_DEBUG_SEVERITY_HIGH)\n    RESULT_CASE(GL_DEBUG_SEVERITY_LOW)\n    RESULT_CASE(GL_DEBUG_SEVERITY_MEDIUM)\n    RESULT_CASE(GL_DEBUG_SEVERITY_NOTIFICATION)\n  default:\n    return \"GL_DEBUG_SEVERITY_UNKNOWN\";\n  }\n}\n\nconst char* glDebugSourceToString(GLenum source) {\n  switch (source) {\n    RESULT_CASE(GL_DEBUG_SOURCE_API)\n    RESULT_CASE(GL_DEBUG_SOURCE_APPLICATION)\n    RESULT_CASE(GL_DEBUG_SOURCE_OTHER)\n    RESULT_CASE(GL_DEBUG_SOURCE_SHADER_COMPILER)\n    RESULT_CASE(GL_DEBUG_SOURCE_THIRD_PARTY)\n    RESULT_CASE(GL_DEBUG_SOURCE_WINDOW_SYSTEM)\n  default:\n    return \"GL_DEBUG_SOURCE_WINDOW_UNKNOWN\";\n  }\n}\n\nconst char* glDebugTypeToString(GLenum type) {\n  switch (type) {\n    RESULT_CASE(GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR)\n    RESULT_CASE(GL_DEBUG_TYPE_ERROR)\n    RESULT_CASE(GL_DEBUG_TYPE_MARKER)\n    RESULT_CASE(GL_DEBUG_TYPE_OTHER)\n    RESULT_CASE(GL_DEBUG_TYPE_PERFORMANCE)\n    RESULT_CASE(GL_DEBUG_TYPE_PORTABILITY)\n    RESULT_CASE(GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR)\n  default:\n    return \"GL_DEBUG_TYPE_UNDEFINED_UNKNOWN\";\n  }\n}\n\nvoid logDebugMessage(GLenum source,\n                     GLenum type,\n                     GLuint id,\n                     GLenum severity,\n                     GLsizei length,\n                     const GLchar* message) {\n  const auto logLevel = severity == GL_DEBUG_SEVERITY_HIGH\n                            ? IGLLogError\n                            : (severity == GL_DEBUG_SEVERITY_MEDIUM ? IGLLogWarning : IGLLogInfo);\n  IGLLog(logLevel,\n         \"%s %s %u %s: %.*s\\n\",\n         glDebugSourceToString(source),\n         glDebugTypeToString(type),\n         id,\n         glDebugSeverityToString(severity),\n         static_cast<int>(message ? length : 0),\n         message ? message : \"\");\n}\n#if IGL_API_LOG\nvoid logOpenGlDebugMessage(GLenum source,\n                           GLenum type,\n                           GLuint id,\n                           GLenum severity,\n                           GLsizei length,\n                           const GLchar* message,\n                           const void* userParam) {\n  logDebugMessage(source, type, id, severity, length, message);\n}\n#endif // IGL_API_LOG\n#endif // IGL_DEBUG || IGL_API_LOG\n} // namespace\n\n// FIXME_DEPRECATED_COVERAGE_EXCLUDE_END\n\nnamespace igl::opengl {\nnamespace {\nconst char* GLerrorToString(GLenum error) {\n  switch (error) {\n  case GL_NO_ERROR:\n    return \"\";\n\n    RESULT_CASE(GL_INVALID_ENUM)\n    RESULT_CASE(GL_INVALID_VALUE)\n    RESULT_CASE(GL_INVALID_OPERATION)\n    RESULT_CASE(GL_INVALID_FRAMEBUFFER_OPERATION)\n    RESULT_CASE(GL_OUT_OF_MEMORY)\n  default:\n    return \"UNKNOWN GL ERROR\";\n  }\n}\n\nResult::Code GLerrorToCode(GLenum error) {\n  switch (error) {\n  case GL_NO_ERROR:\n    return Result::Code::Ok;\n  case GL_INVALID_ENUM:\n  case GL_INVALID_VALUE:\n    return Result::Code::ArgumentInvalid;\n  case GL_INVALID_OPERATION:\n  case GL_INVALID_FRAMEBUFFER_OPERATION:\n    return Result::Code::InvalidOperation;\n  default:\n    return Result::Code::RuntimeError;\n  }\n}\n\n#define GL_ERROR_TO_STRING(error) GLerrorToString(error)\n#define GL_ERROR_TO_RESULT(error) Result(GLerrorToCode(error), GLerrorToString(error))\n} // namespace\n\n// NOLINTNEXTLINE(modernize-use-equals-default)\nIContext::IContext() : deviceFeatureSet_(*this) {\n#if IGL_DEBUG\n  // In debug mode, we default to always checking errors after each OGL call\n  alwaysCheckError_ = true;\n#endif\n#if defined(IGL_VALIDATE_SHADERS)\n  shouldValidateShaders_ = true;\n#endif\n}\n\nIContext::~IContext() {\n  IGL_SOFT_ASSERT(refCount_ == 0,\n                  \"Dangling IContext reference left behind.\"\n                  // @fb-only\n  );\n  // Clear the zombie guard explicitly so our \"secret\" stays secret.\n  zombieGuard_ = 0;\n}\n\n#if IGL_API_LOG\nvoid IContext::setBoundTexture(GLenum target, GLuint texture) {\n  switch (target) {\n  case GL_TEXTURE_2D:\n    boundTexture2D_ = texture;\n    break;\n  case GL_TEXTURE_3D:\n    boundTexture3D_ = texture;\n    break;\n  case GL_TEXTURE_CUBE_MAP:\n  case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\n  case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\n  case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\n  case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\n  case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\n  case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\n    boundTextureCubeMap_ = texture;\n    break;\n  case GL_TEXTURE_2D_ARRAY:\n    boundTexture2DArray_ = texture;\n    break;\n  case GL_TEXTURE_EXTERNAL_OES:\n    boundTextureExternalOes_ = texture;\n    break;\n  default:\n    IGL_DEBUG_ABORT(\"Unsupported texture target: %s\", GL_ENUM_TO_STRING(target));\n    break;\n  }\n}\n\nGLuint IContext::boundTexture(GLenum target) const {\n  switch (target) {\n  case GL_TEXTURE_2D:\n    return boundTexture2D_;\n  case GL_TEXTURE_3D:\n    return boundTexture3D_;\n  case GL_TEXTURE_CUBE_MAP:\n  case GL_TEXTURE_CUBE_MAP_POSITIVE_X:\n  case GL_TEXTURE_CUBE_MAP_POSITIVE_Y:\n  case GL_TEXTURE_CUBE_MAP_POSITIVE_Z:\n  case GL_TEXTURE_CUBE_MAP_NEGATIVE_X:\n  case GL_TEXTURE_CUBE_MAP_NEGATIVE_Y:\n  case GL_TEXTURE_CUBE_MAP_NEGATIVE_Z:\n    return boundTextureCubeMap_;\n  case GL_TEXTURE_2D_ARRAY:\n    return boundTexture2DArray_;\n  case GL_TEXTURE_EXTERNAL_OES:\n    return boundTextureExternalOes_;\n  default:\n    IGL_DEBUG_ABORT(\"Unsupported texture target: %s\", GL_ENUM_TO_STRING(target));\n    return 0;\n    break;\n  }\n}\n\nvoid IContext::setBoundBuffer(GLenum target, GLuint buffer) {\n  switch (target) {\n  case GL_ARRAY_BUFFER:\n    boundArrayBuffer_ = buffer;\n    break;\n  case GL_DRAW_INDIRECT_BUFFER:\n    boundDrawIndirectBuffer_ = buffer;\n    break;\n  case GL_COPY_READ_BUFFER:\n    boundCopyReadBuffer_ = buffer;\n    break;\n  case GL_COPY_WRITE_BUFFER:\n    boundCopyWriteBuffer_ = buffer;\n    break;\n  case GL_ELEMENT_ARRAY_BUFFER:\n    boundElementArrayBuffer_ = buffer;\n    break;\n  case GL_PIXEL_PACK_BUFFER:\n    boundPixelPackBuffer_ = buffer;\n    break;\n  case GL_PIXEL_UNPACK_BUFFER:\n    boundPixelPackBuffer_ = buffer;\n    break;\n  case GL_SHADER_STORAGE_BUFFER:\n    boundShaderStorageBuffer_ = buffer;\n    break;\n  case GL_UNIFORM_BUFFER:\n    boundUniformBuffer_ = buffer;\n    break;\n  default:\n    IGL_DEBUG_ABORT(\"Unsupported buffer target: %s\", GL_ENUM_TO_STRING(target));\n    break;\n  }\n}\n\nGLuint IContext::boundBuffer(GLenum target) const {\n  switch (target) {\n  case GL_ARRAY_BUFFER:\n    return boundArrayBuffer_;\n  case GL_DRAW_INDIRECT_BUFFER:\n    return boundDrawIndirectBuffer_;\n  case GL_COPY_READ_BUFFER:\n    return boundCopyReadBuffer_;\n  case GL_COPY_WRITE_BUFFER:\n    return boundCopyWriteBuffer_;\n  case GL_ELEMENT_ARRAY_BUFFER:\n    return boundElementArrayBuffer_;\n  case GL_PIXEL_PACK_BUFFER:\n    return boundPixelPackBuffer_;\n  case GL_PIXEL_UNPACK_BUFFER:\n    return boundPixelPackBuffer_;\n  case GL_SHADER_STORAGE_BUFFER:\n    return boundShaderStorageBuffer_;\n  case GL_UNIFORM_BUFFER:\n    return boundUniformBuffer_;\n  default:\n    IGL_DEBUG_ABORT(\"Unsupported buffer target: %s\", GL_ENUM_TO_STRING(target));\n    return 0;\n    break;\n  }\n}\n\nvoid IContext::setBoundFramebuffer(GLenum target, GLuint framebuffer) {\n  switch (target) {\n  case GL_READ_FRAMEBUFFER:\n    boundReadFramebuffer_ = framebuffer;\n    break;\n  case GL_DRAW_FRAMEBUFFER:\n    boundWriteFramebuffer_ = framebuffer;\n    break;\n  case GL_FRAMEBUFFER:\n    boundReadFramebuffer_ = framebuffer;\n    boundWriteFramebuffer_ = framebuffer;\n    break;\n  default:\n    IGL_DEBUG_ABORT(\"Unsupported framebuffer target: %s\", GL_ENUM_TO_STRING(target));\n    break;\n  }\n}\n\nGLuint IContext::boundFramebuffer(GLenum target) const {\n  switch (target) {\n  case GL_READ_FRAMEBUFFER:\n    return boundReadFramebuffer_;\n  case GL_DRAW_FRAMEBUFFER:\n  case GL_FRAMEBUFFER:\n    return boundWriteFramebuffer_;\n  default:\n    IGL_DEBUG_ABORT(\"Unsupported framebuffer target: %s\", GL_ENUM_TO_STRING(target));\n    return 0;\n    break;\n  }\n}\n\nvoid IContext::setFramebufferAttachment(GLenum target,\n                                        GLenum attachment,\n                                        bool isRenderbuffer,\n                                        GLuint object) {\n  const auto framebuffer = boundFramebuffer(target);\n  auto& attachments = framebufferAttachments_[framebuffer];\n  if (attachment == GL_DEPTH_ATTACHMENT) {\n    attachments.depthAttachment = object;\n    attachments.depthIsRenderbuffer = isRenderbuffer;\n  } else if (attachment == GL_STENCIL_ATTACHMENT) {\n    attachments.stencilAttachment = object;\n    attachments.stencilIsRenderbuffer = isRenderbuffer;\n  } else if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {\n    attachments.stencilAttachment = object;\n    attachments.stencilIsRenderbuffer = isRenderbuffer;\n    attachments.depthAttachment = object;\n    attachments.depthIsRenderbuffer = isRenderbuffer;\n  } else if (attachment >= GL_COLOR_ATTACHMENT0 &&\n             (attachment - GL_COLOR_ATTACHMENT0) < attachments.colorAttachment.size()) {\n    attachments.colorAttachment[attachment - GL_COLOR_ATTACHMENT0] = object;\n    attachments.colorIsRenderbuffer.set(attachment - GL_COLOR_ATTACHMENT0, isRenderbuffer);\n  }\n}\nconst char* IContext::framebufferAttachmentType(GLenum target, GLenum attachment) const {\n  bool isRenderbuffer = true;\n  const auto framebuffer = boundFramebuffer(target);\n  const auto it = framebufferAttachments_.find(framebuffer);\n  if (it == framebufferAttachments_.end()) {\n    return \"unknown\";\n  }\n  const auto& attachments = it->second;\n  if (attachment == GL_DEPTH_ATTACHMENT) {\n    isRenderbuffer = attachments.depthIsRenderbuffer;\n  } else if (attachment == GL_STENCIL_ATTACHMENT) {\n    isRenderbuffer = attachments.stencilIsRenderbuffer;\n  } else if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {\n    IGL_DEBUG_ASSERT(attachments.depthIsRenderbuffer == attachments.stencilIsRenderbuffer);\n    if (attachments.depthIsRenderbuffer != attachments.stencilIsRenderbuffer) {\n      return \"unknown\";\n    }\n    isRenderbuffer = attachments.depthIsRenderbuffer;\n  } else if (attachment >= GL_COLOR_ATTACHMENT0 &&\n             (attachment - GL_COLOR_ATTACHMENT0) < attachments.colorAttachment.size()) {\n    isRenderbuffer = attachments.colorIsRenderbuffer.test(attachment - GL_COLOR_ATTACHMENT0);\n  } else {\n    return \"unknown\";\n  }\n  if (isRenderbuffer) {\n    return \"renderbuffer\";\n  } else {\n    return \"texture\";\n  }\n}\n\nconst char* IContext::framebufferAttachmentType(GLenum target,\n                                                GLenum buffer,\n                                                GLint drawbuffer) const {\n  if (buffer == GL_COLOR) {\n    return framebufferAttachmentType(target, GL_COLOR_ATTACHMENT0 + drawbuffer);\n  } else if (buffer == GL_DEPTH) {\n    IGL_DEBUG_ASSERT(drawbuffer == 0);\n    return framebufferAttachmentType(target, GL_DEPTH_ATTACHMENT);\n  } else if (buffer == GL_STENCIL) {\n    IGL_DEBUG_ASSERT(drawbuffer == 0);\n    return framebufferAttachmentType(target, GL_STENCIL_ATTACHMENT);\n  } else if (buffer == GL_DEPTH_STENCIL) {\n    IGL_DEBUG_ASSERT(drawbuffer == 0);\n    return framebufferAttachmentType(target, GL_DEPTH_STENCIL_ATTACHMENT);\n  }\n\n  return \"unknown\";\n}\n\nGLuint IContext::framebufferAttachment(GLenum target, GLenum attachment) const {\n  const auto framebuffer = boundFramebuffer(target);\n  const auto it = framebufferAttachments_.find(framebuffer);\n  if (it == framebufferAttachments_.end()) {\n    return 0;\n  }\n  const auto& attachments = it->second;\n  if (attachment == GL_DEPTH_ATTACHMENT) {\n    return attachments.depthAttachment;\n  } else if (attachment == GL_STENCIL_ATTACHMENT) {\n    return attachments.stencilAttachment;\n  } else if (attachment == GL_DEPTH_STENCIL_ATTACHMENT) {\n    IGL_DEBUG_ASSERT(attachments.depthAttachment == attachments.stencilAttachment);\n    if (attachments.depthAttachment != attachments.stencilAttachment) {\n      return -1;\n    } else {\n      return attachments.depthAttachment;\n    }\n  } else if (attachment >= GL_COLOR_ATTACHMENT0 &&\n             (attachment - GL_COLOR_ATTACHMENT0) < attachments.colorAttachment.size()) {\n    return attachments.colorAttachment[attachment - GL_COLOR_ATTACHMENT0];\n  } else {\n    return 0;\n  }\n}\n\nGLuint IContext::framebufferAttachment(GLenum target, GLenum buffer, GLint drawbuffer) const {\n  if (buffer == GL_COLOR) {\n    return framebufferAttachment(target, GL_COLOR_ATTACHMENT0 + drawbuffer);\n  } else if (buffer == GL_DEPTH) {\n    IGL_DEBUG_ASSERT(drawbuffer == 0);\n    return framebufferAttachment(target, GL_DEPTH_ATTACHMENT);\n  } else if (buffer == GL_STENCIL) {\n    IGL_DEBUG_ASSERT(drawbuffer == 0);\n    return framebufferAttachment(target, GL_STENCIL_ATTACHMENT);\n  } else if (buffer == GL_DEPTH_STENCIL) {\n    IGL_DEBUG_ASSERT(drawbuffer == 0);\n    return framebufferAttachment(target, GL_DEPTH_STENCIL_ATTACHMENT);\n  }\n\n  return -1;\n}\n\nconst char* IContext::framebufferReadBufferType(GLenum target) const {\n  const auto framebuffer = boundFramebuffer(target);\n  const auto it = framebufferAttachments_.find(framebuffer);\n  if (it == framebufferAttachments_.end()) {\n    return \"unknown\";\n  }\n  return framebufferAttachmentType(target, GL_COLOR_ATTACHMENT0 + it->second.readBufferIndex);\n}\n\nGLuint IContext::framebufferReadBuffer(GLenum target) const {\n  const auto framebuffer = boundFramebuffer(target);\n  const auto it = framebufferAttachments_.find(framebuffer);\n  if (it == framebufferAttachments_.end()) {\n    return 0;\n  }\n  return framebufferAttachment(target, GL_COLOR_ATTACHMENT0 + it->second.readBufferIndex);\n}\n\nstd::string IContext::affectedFramebufferAttachments(GLenum target, GLbitfield mask) const {\n  std::stringstream ss;\n  const auto framebuffer = boundFramebuffer(target);\n  const auto it = framebufferAttachments_.find(framebuffer);\n  if (it == framebufferAttachments_.end()) {\n    return ss.str();\n  }\n  const auto& attachments = it->second;\n  bool first = true;\n  if ((mask & GL_COLOR_BUFFER_BIT) != 0) {\n    for (uint32_t i = 0; i < attachments.colorAttachment.size(); ++i) {\n      if (attachments.colorAttachment[i] != 0) {\n        ss << (first ? \"\" : \" \") << \"color \" << i << \" (\"\n           << (attachments.colorIsRenderbuffer.test(i) ? \"renderbuffer\" : \"texture\") << \": \"\n           << attachments.colorAttachment[i] << \")\";\n        first = false;\n      }\n    }\n  }\n  if ((mask & GL_DEPTH_BUFFER_BIT) != 0 && attachments.depthAttachment != 0) {\n    ss << (first ? \"\" : \" \") << \"depth (\"\n       << (attachments.depthIsRenderbuffer ? \"renderbuffer\" : \"texture\") << \": \"\n       << attachments.depthAttachment << \")\";\n    first = false;\n  }\n  if ((mask & GL_STENCIL_BUFFER_BIT) != 0 && attachments.stencilAttachment != 0) {\n    ss << (first ? \"\" : \" \") << \"stencil (\"\n       << (attachments.depthIsRenderbuffer ? \"renderbuffer\" : \"texture\") << \": \"\n       << attachments.depthAttachment << \")\";\n  }\n  return ss.str();\n}\nstd::string IContext::boundFramebufferAttachments(GLenum target) const {\n  return affectedFramebufferAttachments(\n      target, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);\n}\n\nstd::string IContext::boundDrawBuffers() const {\n  std::stringstream ss;\n  bool first = true;\n  for (uint32_t i = 0; i < enabledAttributes_.size(); ++i) {\n    if (enabledAttributes_.test(i)) {\n      ss << (first ? \"\" : \" \") << \"attribute \" << i << \" (buffer: \" << boundAttributes_[i] << \")\";\n      first = false;\n    }\n  }\n  return ss.str();\n}\n\nstd::string IContext::boundImageTextures() const {\n  std::stringstream ss;\n  bool first = true;\n  for (uint32_t i = 0; i < boundImageTextures_.size(); ++i) {\n    if (boundImageTextures_[i] != 0) {\n      ss << (first ? \"\" : \" \") << \"image \" << i << \" (texture: \" << boundImageTextures_[i] << \")\";\n      first = false;\n    }\n  }\n  return ss.str();\n}\n\nstd::string IContext::boundDrawTextures() const {\n  std::stringstream ss;\n  bool first = true;\n  for (uint32_t i = 0; i < boundDrawTextures_.size(); ++i) {\n    if (boundDrawTextures_[i] != 0) {\n      ss << (first ? \"\" : \" \") << \"draw \" << i << \" (texture: \" << boundDrawTextures_[i] << \")\";\n      first = false;\n    }\n  }\n  return ss.str();\n}\n\nstd::string IContext::identifierLabel(GLuint identifier, GLuint name) const {\n  std::stringstream ss;\n  switch (identifier) {\n  case GL_BUFFER:\n    ss << \"(buffer: \" << name << \")\";\n    break;\n  case GL_FRAMEBUFFER:\n    ss << \"(framebuffer: \" << name << \")\";\n    break;\n  case GL_PROGRAM:\n    ss << \"(program: \" << name << \")\";\n    break;\n  case GL_RENDERBUFFER:\n    ss << \"(renderbuffer: \" << name << \")\";\n    break;\n  case GL_TEXTURE:\n    ss << \"(texture: \" << name << \")\";\n    break;\n  default:\n    break;\n  }\n  return ss.str();\n}\n\nstd::string IContext::affectedMemoryBarrierObjects(GLbitfield bits) const {\n  constexpr const GLbitfield kProgramBits =\n      GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT | GL_ELEMENT_ARRAY_BARRIER_BIT | GL_UNIFORM_BARRIER_BIT |\n      GL_TEXTURE_FETCH_BARRIER_BIT | GL_SHADER_IMAGE_ACCESS_BARRIER_BIT | GL_COMMAND_BARRIER_BIT |\n      GL_PIXEL_BUFFER_BARRIER_BIT | GL_TEXTURE_UPDATE_BARRIER_BIT | GL_BUFFER_UPDATE_BARRIER_BIT |\n      GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT | GL_FRAMEBUFFER_BARRIER_BIT |\n      GL_TRANSFORM_FEEDBACK_BARRIER_BIT | GL_QUERY_BUFFER_BARRIER_BIT;\n  constexpr const GLbitfield kTextureBits =\n      GL_SHADER_IMAGE_ACCESS_BARRIER_BIT | GL_TEXTURE_FETCH_BARRIER_BIT |\n      GL_TEXTURE_UPDATE_BARRIER_BIT | GL_FRAMEBUFFER_BARRIER_BIT;\n  bool first = true;\n  std::stringstream ss;\n  if ((bits & kProgramBits) != 0) {\n    ss << (first ? \"\" : \" \") << \"(program: \" << boundProgram_ << \")\";\n    first = false;\n  }\n  if ((bits & GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" \") << boundDrawBuffers();\n    first = false;\n  }\n  if ((bits & GL_ELEMENT_ARRAY_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" \") << \"element (buffer: \" << boundElementArrayBuffer_ << \")\";\n    first = false;\n  }\n  if ((bits & kTextureBits) != 0) {\n    ss << (first ? \"\" : \" \");\n    if (lastCommandWasCompute_) {\n      ss << boundImageTextures();\n    } else {\n      ss << boundDrawTextures() << \" \" << boundFramebufferAttachments(GL_DRAW_FRAMEBUFFER) << \" \"\n         << boundFramebufferAttachments(GL_READ_FRAMEBUFFER);\n    }\n    first = false;\n  }\n  if ((bits & GL_PIXEL_BUFFER_BARRIER_BIT) != 0 &&\n      (boundPixelPackBuffer_ != 0 || boundPixelUnpackBuffer_ != 0)) {\n    ss << (first ? \"\" : \" \");\n    if (boundPixelUnpackBuffer_ != 0) {\n      ss << \"unpack (buffer: \" << boundPixelUnpackBuffer_ << \")\";\n    }\n    if (boundPixelPackBuffer_ != 0) {\n      ss << (boundPixelUnpackBuffer_ == 0 ? \"\" : \" \") << \"pack (buffer: \" << boundPixelPackBuffer_\n         << \")\";\n    }\n    first = false;\n  }\n  if ((bits & GL_UNIFORM_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" \") << boundBuffersByIndex(/* ssbos */ false, /* ubos */ true);\n    first = false;\n  }\n  if ((bits & GL_SHADER_STORAGE_BARRIER_BIT) != 0) {\n    ss << (first ? \"\" : \" \") << boundBuffersByIndex(/* ssbos */ true, /* ubos */ false);\n    first = false;\n  }\n\n  return ss.str();\n}\n\nvoid IContext::addProgramUniform(GLuint program,\n                                 GLsizei* length,\n                                 GLenum* type,\n                                 GLchar* name) const {\n  std::string nameStr(std::string_view(name, length == nullptr ? strlen(name) : *length));\n  auto& programUniforms = programUniforms_[program];\n  auto uniformIt = programUniforms.find(nameStr);\n  if (uniformIt == programUniforms.end()) {\n    uniformIt = programUniforms.emplace(std::move(nameStr), ProgramUniform{}).first;\n    if (uniformIt == programUniforms.end()) {\n      return;\n    }\n  }\n  auto& uniform = uniformIt->second;\n  uniform.type = (type == nullptr ? GL_NONE : *type);\n  uniform.isTexture = isTextureUniform(uniform.type);\n  uniform.isImage = isTextureImageUniform(uniform.type);\n}\n\nvoid IContext::setProgramUniformLocation(GLuint program, const GLchar* name, GLint location) const {\n  if (location < 0) {\n    return;\n  }\n  std::string nameStr(name);\n  auto& programUniforms = programUniforms_[program];\n  auto uniformIt = programUniforms.find(nameStr);\n  if (uniformIt == programUniforms.end()) {\n    return;\n  }\n\n  auto& programUniformsByLocation = programUniformsByLocation_[program];\n  programUniformsByLocation[location] = std::move(nameStr);\n}\n\nvoid IContext::setProgramResourceIndex(GLuint program,\n                                       GLenum programInterface,\n                                       const GLchar* name,\n                                       GLuint index) const {\n  if (programInterface == GL_SHADER_STORAGE_BLOCK) {\n    programSsbosByIndex_[program][index] = name;\n  }\n}\n\nstd::string IContext::boundUniformTexture(GLuint program, GLint location, GLint unit) const {\n  const auto programUniformsIt = programUniforms_.find(program);\n  if (programUniformsIt == programUniforms_.end()) {\n    return {};\n  }\n  const auto& programUniforms = programUniformsIt->second;\n  const auto programUniformsByLocationIt = programUniformsByLocation_.find(program);\n  if (programUniformsByLocationIt == programUniformsByLocation_.end()) {\n    return {};\n  }\n  const auto& programUniformsByLocation = programUniformsByLocationIt->second;\n\n  const auto uniformByLocationIt = programUniformsByLocation.find(location);\n  if (uniformByLocationIt == programUniformsByLocation.end()) {\n    return {};\n  }\n  const auto uniformIt = programUniforms.find(uniformByLocationIt->second);\n  if (uniformIt == programUniforms.end()) {\n    return {};\n  }\n  if (uniformIt->second.isTexture && unit >= 0 && unit < boundDrawTextures_.size()) {\n    std::stringstream ss;\n    ss << \"(texture: \" << boundDrawTextures_[unit] << \")\";\n    return ss.str();\n  }\n  if (uniformIt->second.isImage && unit >= 0 && unit < boundImageTextures_.size()) {\n    std::stringstream ss;\n    ss << \"(texture: \" << boundImageTextures_[unit] << \")\";\n    return ss.str();\n  }\n\n  return {};\n}\n\nstd::string IContext::boundBufferName(GLuint program, GLenum target, GLuint index) const {\n  if (target == GL_SHADER_STORAGE_BUFFER) {\n    const auto programSsbosByLocationIt = programSsbosByLocation_.find(program);\n    if (programSsbosByLocationIt == programSsbosByLocation_.end()) {\n      return {};\n    }\n    const auto it = programSsbosByLocationIt->second.find(index);\n    if (it == programSsbosByLocationIt->second.end()) {\n      return {};\n    }\n    std::stringstream ss;\n    ss << \"(ssbo: \" << it->second << \")\";\n    return ss.str();\n  }\n  if (target == GL_UNIFORM_BUFFER) {\n    const auto programUbosByLocationIt = programUbosByLocation_.find(program);\n    if (programUbosByLocationIt == programUbosByLocation_.end()) {\n      return {};\n    }\n    const auto it = programUbosByLocationIt->second.find(index);\n    if (it == programUbosByLocationIt->second.end()) {\n      return {};\n    }\n    std::stringstream ss;\n    ss << \"(ubo: \" << it->second << \")\";\n    return ss.str();\n  }\n  return {};\n}\n\nvoid IContext::setBoundBufferByIndex(GLenum target, GLuint index, GLuint buffer) {\n  if (target == GL_SHADER_STORAGE_BUFFER) {\n    if (index < boundSsbos_.size()) {\n      boundSsbos_[index] = buffer;\n    }\n  } else if (target == GL_UNIFORM_BUFFER) {\n    if (index < boundUbos_.size()) {\n      boundUbos_[index] = buffer;\n    }\n  }\n}\n\nGLuint IContext::boundBufferByIndex(GLenum target, GLuint index) const {\n  if (target == GL_SHADER_STORAGE_BUFFER) {\n    if (index < boundSsbos_.size()) {\n      return boundSsbos_[index];\n    }\n  } else if (target == GL_UNIFORM_BUFFER) {\n    if (index < boundUbos_.size()) {\n      return boundUbos_[index];\n    }\n  }\n\n  return 0;\n}\n\nstd::string IContext::boundBuffersByIndex(bool ssbos, bool ubos) const {\n  bool first = true;\n  std::stringstream ss;\n  if (ubos) {\n    for (uint32_t i = 0; i < boundUbos_.size(); ++i) {\n      if (boundUbos_[i] != 0) {\n        ss << (first ? \"\" : \" \") << \"ubo \" << i << \" (buffer: \" << boundUbos_[i] << \")\";\n        first = false;\n      }\n    }\n  }\n  if (ssbos) {\n    for (uint32_t i = 0; i < boundSsbos_.size(); ++i) {\n      if (boundSsbos_[i] != 0) {\n        ss << (first ? \"\" : \" \") << \"ssbo \" << i << \" (buffer: \" << boundSsbos_[i] << \")\";\n        first = false;\n      }\n    }\n  }\n\n  return ss.str();\n}\n#endif // IGL_API_LOG\n\n#if IGL_DEBUG\nnamespace {\n// The map can be accessed from multiple threads during context creation/destruction.\nstd::mutex& getMutex() {\n  static std::mutex mutex;\n  return mutex;\n}\n} // namespace\n#endif\n\n// Creates a global map to ensure multiple IContexts are not created for a single glContext\nstd::unordered_map<void* IGL_NULLABLE, IContext*>& IContext::getExistingContexts() {\n  static auto& map = *(new std::unordered_map<void* IGL_NULLABLE, IContext*>());\n  return map;\n}\n\nvoid IContext::registerContext(void* IGL_NULLABLE glContext, IContext* context) {\n#if IGL_DEBUG\n  std::lock_guard<std::mutex> lock(getMutex());\n  auto result = IContext::getExistingContexts().find(glContext);\n  if (result != IContext::getExistingContexts().end()) {\n    const char* errorMessage =\n        \"Your application creates multiple IContext wrappers for the same underlying context \"\n        \"object, which can result in problems if those contexts are used simultaneously across \"\n        \"different threads. It's recommended to preserve a one-to-one relationship between \"\n        \"native \"\n        \"and IGL contexts. Ignore this warning at your own risk.\";\n#if IGL_PLATFORM_ANDROID\n    IGL_LOG_ERROR(errorMessage);\n#else\n    IGL_DEBUG_ABORT(errorMessage);\n#endif\n  }\n  IContext::getExistingContexts().insert({glContext, context});\n#endif\n}\n\nvoid IContext::willDestroy(void* IGL_NULLABLE glContext) {\n  // Clear pool explicitly, since it might have reference back to IContext.\n  getAdapterPool().clear();\n  getComputeAdapterPool().clear();\n  // Unregister context\n  if (glContext != nullptr) {\n    IContext::unregisterContext((void*)glContext);\n  }\n}\n\nvoid IContext::unregisterContext(void* IGL_NULLABLE glContext) {\n#if IGL_DEBUG\n  std::lock_guard<std::mutex> lock(getMutex());\n  IContext::getExistingContexts().erase(glContext);\n#endif\n}\n\nvoid IContext::flushDeletionQueue() {\n  deletionQueues_.flushDeletionQueue(*this);\n}\n\nbool IContext::shouldQueueAPI() const {\n  return !isCurrentContext() && !isCurrentSharegroup();\n}\n\nvoid IContext::activeTexture(GLenum texture) {\n#if IGL_API_LOG\n  activeTextureUnit_ = texture - GL_TEXTURE0;\n#endif\n  APILOG(\"glActiveTexture(%s)\\n\", GL_ENUM_TO_STRING(texture));\n  GLCALL(ActiveTexture)(texture);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::attachShader(GLuint program, GLuint shader) {\n  APILOG(\"glAttachShader(%u, %u) (program: %u)\\n\", program, shader, program);\n  GLCALL(AttachShader)(program, shader);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bindBuffer(GLenum target, GLuint buffer) {\n#if IGL_API_LOG\n  GLuint unboundBuffer = boundBuffer(target);\n  setBoundBuffer(target, buffer);\n#endif // IGL_API_LOG\n  APILOG(\"glBindBuffer(%s, %u) unbound (buffer: %u) bound (buffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         buffer,\n         unboundBuffer,\n         buffer);\n  GLCALL(BindBuffer)(target, buffer);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bindBufferBase(GLenum target, GLuint index, GLuint buffer) {\n#if IGL_API_LOG\n  GLuint unboundBuffer = boundBufferByIndex(target, index);\n  setBoundBufferByIndex(target, index, buffer);\n#endif\n  APILOG(\"glBindBufferBase(%s, %u, %u) unbound (buffer: %u) bound (buffer: %u) %s\\n\",\n         GL_ENUM_TO_STRING(target),\n         index,\n         buffer,\n         unboundBuffer,\n         buffer,\n         boundBufferName(boundProgram_, target, index).c_str());\n  IGLCALL(BindBufferBase)(target, index, buffer);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bindBufferRange(GLenum target,\n                               GLuint index,\n                               GLuint buffer,\n                               GLintptr offset,\n                               GLsizeiptr size) {\n#if IGL_API_LOG\n  GLuint unboundBuffer = boundBufferByIndex(target, index);\n  setBoundBufferByIndex(target, index, buffer);\n#endif\n  APILOG(\"glBindBufferRange(%s, %u, %u) unbound (buffer: %u) bound (buffer: %u) %s\\n\",\n         GL_ENUM_TO_STRING(target),\n         index,\n         buffer,\n         unboundBuffer,\n         buffer,\n         boundBufferName(boundProgram_, target, index).c_str());\n  IGLCALL(BindBufferRange)(target, index, buffer, offset, size);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bindFramebuffer(GLenum target, GLuint framebuffer) {\n#if IGL_API_LOG\n  GLuint unboundFramebuffer = boundFramebuffer(target);\n  setBoundFramebuffer(target, framebuffer);\n#endif\n  APILOG(\"glBindFramebuffer(%s, %u) unbound (framebuffer: %u) bound (framebuffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         framebuffer,\n         unboundFramebuffer,\n         framebuffer);\n  IGLCALL(BindFramebuffer)(target, framebuffer);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bindRenderbuffer(GLenum target, GLuint renderbuffer) {\n#if IGL_API_LOG\n  GLuint unboundRenderbuffer = boundRenderbuffer_;\n  boundRenderbuffer_ = renderbuffer;\n#endif\n  APILOG(\"glBindRenderbuffer(%s, %u) unbound (renderbuffer: %u) bound (renderbuffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         renderbuffer,\n         unboundRenderbuffer,\n         renderbuffer);\n  IGLCALL(BindRenderbuffer)(target, renderbuffer);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bindTexture(GLenum target, GLuint texture) {\n#if IGL_API_LOG\n  GLuint unboundTexture = boundTexture(target);\n  setBoundTexture(target, texture);\n  if (activeTextureUnit_ < boundDrawTextures_.size()) {\n    boundDrawTextures_[activeTextureUnit_] = texture;\n  }\n#endif\n  APILOG(\"glBindTexture(%s, %u) (unit: %u) unbound (texture: %u) bound (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         activeTextureUnit_,\n         texture,\n         unboundTexture,\n         texture);\n  GLCALL(BindTexture)(target, texture);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bindImageTexture(GLuint unit,\n                                GLuint texture,\n                                GLint level,\n                                GLboolean layered,\n                                GLint layer,\n                                GLenum access,\n                                GLenum format) {\n#if IGL_API_LOG\n  GLuint unboundTexture = 0;\n  if (unit < boundImageTextures_.size()) {\n    unboundTexture = boundImageTextures_[unit];\n    boundImageTextures_[unit] = texture;\n  }\n#endif\n  if (bindImageTexturerProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::ShaderImageLoadStoreExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::ShaderImageLoadStore)) {\n        bindImageTexturerProc_ = iglBindImageTextureEXT;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::ShaderImageLoadStore)) {\n      bindImageTexturerProc_ = iglBindImageTexture;\n    }\n    IGL_DEBUG_ASSERT(bindImageTexturerProc_, \"No supported function for glBindImageTexture\\n\");\n  }\n  APILOG(\n      \"glBindImageTexture(%u, %u, %i, %s, %i %s %s) unbound (texture: %u) bound (texture: %u) \"\n      \"(uniform: %s)\\n\",\n      unit,\n      texture,\n      level,\n      GL_BOOL_TO_STRING(layered),\n      layer,\n      GL_ENUM_TO_STRING(access),\n      GL_ENUM_TO_STRING(format),\n      unboundTexture,\n      texture,\n      programUniformsByLocation_[boundProgram_][unit].c_str());\n  GLCALL_PROC(bindImageTexturerProc_, unit, texture, level, layered, layer, access, format);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bindVertexArray(GLuint vao) {\n#if IGL_API_LOG\n  GLuint unboundVao = boundVao_;\n  boundVao_ = vao;\n#endif\n  if (bindVertexArrayProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::VertexArrayObjectExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::VertexArrayObject)) {\n        bindVertexArrayProc_ = iglBindVertexArrayOES;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::VertexArrayObject)) {\n      bindVertexArrayProc_ = iglBindVertexArray;\n    }\n    IGL_DEBUG_ASSERT(bindVertexArrayProc_, \"No supported function for glBindVertexArray\\n\");\n  }\n  APILOG(\"glBindVertexArray(%u) unbound (VAO: %u) bound (VAO: %u)\\n\", vao, unboundVao, vao);\n  GLCALL_PROC(bindVertexArrayProc_, vao);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::blendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {\n  APILOG(\"glBlendColor(%f, %f, %f, %f)\\n\", red, green, blue, alpha);\n  GLCALL(BlendColor)(red, green, blue, alpha);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::blendEquation(GLenum mode) {\n  APILOG(\"glBlendEquation(%s)\\n\", GL_ENUM_TO_STRING(mode));\n  GLCALL(BlendEquation)(mode);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha) {\n  APILOG(\"glBlendEquationSeparate(%s, %s)\\n\",\n         GL_ENUM_TO_STRING(modeRGB),\n         GL_ENUM_TO_STRING(modeAlpha));\n  GLCALL(BlendEquationSeparate)(modeRGB, modeAlpha);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::blendFunc(GLenum sfactor, GLenum dfactor) {\n  APILOG(\"glBlendFunc(%s, %s)\\n\", GL_ENUM_TO_STRING(sfactor), GL_ENUM_TO_STRING(dfactor));\n  GLCALL(BlendFunc)(sfactor, dfactor);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) {\n  APILOG(\"glBlendFuncSeparate(%s, %s, %s, %s)\\n\",\n         GL_ENUM_TO_STRING(srcRGB),\n         GL_ENUM_TO_STRING(dstRGB),\n         GL_ENUM_TO_STRING(srcAlpha),\n         GL_ENUM_TO_STRING(dstAlpha));\n  GLCALL(BlendFuncSeparate)(srcRGB, dstRGB, srcAlpha, dstAlpha);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::blitFramebuffer(GLint srcX0,\n                               GLint srcY0,\n                               GLint srcX1,\n                               GLint srcY1,\n                               GLint dstX0,\n                               GLint dstY0,\n                               GLint dstX1,\n                               GLint dstY1,\n                               GLbitfield mask,\n                               GLenum filter) {\n  if (blitFramebufferProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::FramebufferBlitExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::FramebufferBlit)) {\n        blitFramebufferProc_ = iglBlitFramebufferEXT;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::FramebufferBlit)) {\n      blitFramebufferProc_ = iglBlitFramebuffer;\n    }\n    IGL_DEBUG_ASSERT(blitFramebufferProc_, \"No supported function for glBlitFramebuffer\\n\");\n  }\n  APILOG(\n      \"glBlitFramebuffer(%d, %d, %d, %d, %d, %d, %d, %d, 0x%x [%s], %s) read (framebuffer: %u) \"\n      \"write (framebuffer: %u)\\n\",\n      srcX0,\n      srcY0,\n      srcX1,\n      srcY1,\n      dstX0,\n      dstY0,\n      dstX1,\n      dstY1,\n      mask,\n      GL_CLEAR_BITS_TO_STRING(mask),\n      GL_ENUM_TO_STRING(filter),\n      boundFramebuffer(GL_READ_FRAMEBUFFER),\n      boundFramebuffer(GL_DRAW_FRAMEBUFFER));\n  GLCALL_PROC(\n      blitFramebufferProc_, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bufferData(GLenum target,\n                          GLsizeiptr size,\n                          const GLvoid* IGL_NULLABLE data,\n                          GLenum usage) {\n  APILOG(\"glBufferData(%s, %zu, %p, %s) (buffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         size,\n         data,\n         GL_ENUM_TO_STRING(usage),\n         boundBuffer(target));\n  GLCALL(BufferData)(target, size, data, usage);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::bufferSubData(GLenum target,\n                             GLintptr offset,\n                             GLsizeiptr size,\n                             const GLvoid* IGL_NULLABLE data) {\n  APILOG(\"glBufferSubData(%s, %zu, %zu, %p) (buffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         offset,\n         size,\n         data,\n         boundBuffer(target));\n  GLCALL(BufferSubData)(target, offset, size, data);\n  GLCHECK_ERRORS();\n}\n\nGLenum IContext::checkFramebufferStatus(GLenum target) {\n  GLenum ret = 0;\n\n  IGLCALL_WITH_RETURN(ret, CheckFramebufferStatus)(target);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glCheckFramebufferStatus(%s) = %s (framebuffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         GL_ENUM_TO_STRING(ret),\n         boundFramebuffer(target));\n  GLCHECK_ERRORS();\n  return ret;\n}\n\nvoid IContext::clear(GLbitfield mask) {\n  APILOG(\"glClear(0x%x [%s]) (framebuffer: %u) %s\\n\",\n         mask,\n         GL_CLEAR_BITS_TO_STRING(mask),\n         boundFramebuffer(GL_DRAW_FRAMEBUFFER),\n         affectedFramebufferAttachments(GL_DRAW_FRAMEBUFFER, mask).c_str());\n  GLCALL(Clear)(mask);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::clearBufferfv(GLenum buffer, GLint drawBuffer, const GLfloat* value) {\n  if (!deviceFeatureSet_.hasInternalFeature(InternalFeatures::ClearBufferfv)) {\n    IGL_DEBUG_ASSERT(0, \"No supported function for glClearBufferfv\\n\");\n    return;\n  }\n\n  APILOG(\"glClearBufferfv(%s, %d, %f) (framebuffer: %u) (%s: %u)\\n\",\n         GL_ENUM_TO_STRING(buffer),\n         drawBuffer,\n         *value,\n         boundFramebuffer(GL_DRAW_FRAMEBUFFER),\n         framebufferAttachmentType(GL_DRAW_FRAMEBUFFER, buffer, drawBuffer),\n         framebufferAttachment(GL_DRAW_FRAMEBUFFER, buffer, drawBuffer));\n  IGLCALL(ClearBufferfv)(buffer, drawBuffer, value);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::clearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) {\n  APILOG(\"glClearColor(%f, %f, %f, %f)\\n\", red, green, blue, alpha);\n  GLCALL(ClearColor)(red, green, blue, alpha);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::clearDepthf(GLfloat depth) {\n  if (clearDepthfProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::ClearDepthf)) {\n      clearDepthfProc_ = iglClearDepthf;\n    } else {\n      clearDepthfProc_ = iglClearDepth;\n    }\n    IGL_DEBUG_ASSERT(clearDepthfProc_, \"No supported function for glClearDepthf\\n\");\n  }\n\n  APILOG(\"glClearDepthf(%f)\\n\", depth);\n  GLCALL_PROC(clearDepthfProc_, depth);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::clearStencil(GLint s) {\n  APILOG(\"glClearStencil(%d)\\n\", s);\n  GLCALL(ClearStencil)(s);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) {\n  APILOG(\"glColorMask(%s, %s, %s, %s) (framebuffer: %u)\\n\",\n         GL_BOOL_TO_STRING(red),\n         GL_BOOL_TO_STRING(green),\n         GL_BOOL_TO_STRING(blue),\n         GL_BOOL_TO_STRING(alpha),\n         boundFramebuffer(GL_DRAW_FRAMEBUFFER));\n  GLCALL(ColorMask)(red, green, blue, alpha);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::compileShader(GLuint shader) {\n  APILOG(\"glCompileShader(%u)\\n\", shader);\n  GLCALL(CompileShader)(shader);\n  GLCHECK_ERRORS();\n  shaderCompilationCount_++;\n}\n\nvoid IContext::compressedTexImage2D(GLenum target,\n                                    GLint level,\n                                    GLenum internalformat,\n                                    GLsizei width,\n                                    GLsizei height,\n                                    GLint border,\n                                    GLsizei imageSize,\n                                    const GLvoid* IGL_NULLABLE data) {\n  APILOG(\"glCompressedTexImage2D(%s, %d, %s, %u, %u, %d, %u, %p) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         level,\n         GL_ENUM_TO_STRING(internalformat),\n         width,\n         height,\n         border,\n         imageSize,\n         data,\n         boundTexture(target));\n  GLCALL(CompressedTexImage2D)\n  (target, level, internalformat, width, height, border, imageSize, data);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::compressedTexImage3D(GLenum target,\n                                    GLint level,\n                                    GLenum internalformat,\n                                    GLsizei width,\n                                    GLsizei height,\n                                    GLsizei depth,\n                                    GLint border,\n                                    GLsizei imageSize,\n                                    const GLvoid* data) {\n  if (compressedTexImage3DProc_ == nullptr) {\n    if (deviceFeatureSet_.hasFeature(DeviceFeatures::Texture3D)) {\n      if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::Texture3DExtReq)) {\n        if (deviceFeatureSet_.hasExtension(Extensions::Texture3D)) {\n          compressedTexImage3DProc_ = iglCompressedTexImage3DOES;\n        }\n      } else {\n        compressedTexImage3DProc_ = iglCompressedTexImage3D;\n      }\n    }\n    IGL_DEBUG_ASSERT(compressedTexImage3DProc_,\n                     \"No supported function for glCompressedTexImage3D\\n\");\n  }\n  APILOG(\"glCompressedTexImage3D(%s, %d, %s, %u, %u, %u, %d, %u, %p) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         level,\n         GL_ENUM_TO_STRING(internalformat),\n         width,\n         height,\n         depth,\n         border,\n         imageSize,\n         data,\n         boundTexture(target));\n  GLCALL_PROC(compressedTexImage3DProc_,\n              target,\n              level,\n              internalformat,\n              width,\n              height,\n              depth,\n              border,\n              imageSize,\n              data);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::compressedTexSubImage2D(GLenum target,\n                                       GLint level,\n                                       GLint xoffset,\n                                       GLint yoffset,\n                                       GLsizei width,\n                                       GLsizei height,\n                                       GLenum format,\n                                       GLsizei imageSize,\n                                       const GLvoid* data) {\n  APILOG(\"glCompressedTexSubImage2D(%s, %d, %d, %d, %u, %u, %s, %u, %p) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         level,\n         xoffset,\n         yoffset,\n         width,\n         height,\n         GL_ENUM_TO_STRING(format),\n         imageSize,\n         data,\n         boundTexture(target));\n  GLCALL(CompressedTexSubImage2D)\n  (target, level, xoffset, yoffset, width, height, format, imageSize, data);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::compressedTexSubImage3D(GLenum target,\n                                       GLint level,\n                                       GLint xoffset,\n                                       GLint yoffset,\n                                       GLint zoffset,\n                                       GLsizei width,\n                                       GLsizei height,\n                                       GLsizei depth,\n                                       GLenum format,\n                                       GLsizei imageSize,\n                                       const GLvoid* data) {\n  if (compressedTexSubImage3DProc_ == nullptr) {\n    if (deviceFeatureSet_.hasFeature(DeviceFeatures::Texture3D)) {\n      if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::Texture3DExtReq)) {\n        if (deviceFeatureSet_.hasExtension(Extensions::Texture3D)) {\n          compressedTexSubImage3DProc_ = iglCompressedTexSubImage3DOES;\n        }\n      } else {\n        compressedTexSubImage3DProc_ = iglCompressedTexSubImage3D;\n      }\n    }\n    IGL_DEBUG_ASSERT(compressedTexSubImage3DProc_,\n                     \"No supported function for glCompressedTexSubImage3D\\n\");\n  }\n\n  APILOG(\"glCompressedTexSubImage3D(%s, %d, %d, %d, %d, %u, %u, %u, %s, %u, %p) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         level,\n         xoffset,\n         yoffset,\n         zoffset,\n         width,\n         height,\n         depth,\n         GL_ENUM_TO_STRING(format),\n         imageSize,\n         data,\n         boundTexture(target));\n  GLCALL_PROC(compressedTexSubImage3DProc_,\n              target,\n              level,\n              xoffset,\n              yoffset,\n              zoffset,\n              width,\n              height,\n              depth,\n              format,\n              imageSize,\n              data);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::copyBufferSubData(GLenum readtarget,\n                                 GLenum writetarget,\n                                 GLintptr readoffset,\n                                 GLintptr writeoffset,\n                                 GLsizeiptr size) {\n#if IGL_PLATFORM_APPLE || IGL_PLATFORM_ANDROID\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n#else\n  APILOG(\"glCopyBufferSubData(%s, %s, %d, %d, %u) read (buffer: %u) write (buffer: %u)\\n\",\n         GL_ENUM_TO_STRING(readtarget),\n         GL_ENUM_TO_STRING(writetarget),\n         readoffset,\n         writeoffset,\n         size,\n         boundBuffer(readTarget),\n         boundBuffer(writeTarget));\n  GLCALL(CopyBufferSubData)(readtarget, writetarget, readoffset, writeoffset, size);\n  GLCHECK_ERRORS();\n#endif // IGL_PLATFORM_APPLE\n}\n\nvoid IContext::copyTexSubImage2D(GLenum target,\n                                 GLint level,\n                                 GLint xoffset,\n                                 GLint yoffset,\n                                 GLint x,\n                                 GLint y,\n                                 GLsizei width,\n                                 GLsizei height) {\n  APILOG(\"glCopyTexSubImage2D(%s, %d, %d, %d, %d, %d, %u, %u) read (%s: %u) write (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         level,\n         xoffset,\n         yoffset,\n         x,\n         y,\n         width,\n         height,\n         framebufferReadBufferType(GL_READ_FRAMEBUFFER),\n         framebufferReadBuffer(GL_READ_FRAMEBUFFER));\n  GLCALL(CopyTexSubImage2D)(target, level, xoffset, yoffset, x, y, width, height);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::createMemoryObjects(GLsizei n, GLuint* objects) {\n  APILOG(\"glCreateMemoryObjectsEXT(%u, %p) (memory object: %u)\\n\",\n         n,\n         objects,\n         objects == nullptr ? 0 : *objects);\n  IGLCALL(CreateMemoryObjectsEXT)(n, objects);\n  GLCHECK_ERRORS();\n}\n\nGLuint IContext::createProgram() {\n  GLuint ret = 0;\n\n  GLCALL_WITH_RETURN(ret, CreateProgram)();\n  // NOTE: Must log after call due to return value\n  APILOG(\"glCreateProgram() (program: %u)\\n\", ret);\n  GLCHECK_ERRORS();\n\n#if IGL_API_LOG\n  programUniforms_[ret] = {};\n  programUniformsByLocation_[ret] = {};\n  programSsbosByIndex_[ret] = {};\n  programSsbosByLocation_[ret] = {};\n  programUbosByIndex_[ret] = {};\n  programUbosByLocation_[ret] = {};\n#endif\n  return ret;\n}\n\nGLuint IContext::createShader(GLenum shaderType) {\n  GLuint ret = 0;\n\n  GLCALL_WITH_RETURN(ret, CreateShader)(shaderType);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glCreateShader(%s) = %u\\n\", GL_ENUM_TO_STRING(shaderType), ret);\n  GLCHECK_ERRORS();\n\n  return ret;\n}\n\nvoid IContext::cullFace(GLint mode) {\n  APILOG(\"glCullFace(%s)\\n\", GL_ENUM_TO_STRING(mode));\n  GLCALL(CullFace)(mode);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::debugMessageCallback(PFNIGLDEBUGPROC callback, const void* userParam) {\n  if (debugMessageCallbackProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugMessageCallback)) {\n      if (deviceFeatureSet_.hasInternalRequirement(\n              InternalRequirement::DebugMessageCallbackExtReq)) {\n        if (deviceFeatureSet_.hasExtension(Extensions::Debug)) {\n          debugMessageCallbackProc_ = iglDebugMessageCallbackKHR;\n        }\n      } else {\n        debugMessageCallbackProc_ = iglDebugMessageCallback;\n      }\n    }\n    IGL_DEBUG_ASSERT(debugMessageCallbackProc_,\n                     \"No supported function for glDebugMessageCallback\\n\");\n  }\n\n  APILOG(\"glDebugMessageCallback(%p, %p)\\n\", callback, userParam);\n  GLCALL_PROC(debugMessageCallbackProc_, callback, userParam);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::debugMessageInsert(GLenum source,\n                                  GLenum type,\n                                  GLuint id,\n                                  GLenum severity,\n                                  GLsizei length,\n                                  const GLchar* buf) {\n  if (debugMessageInsertProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugMessage)) {\n      if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::DebugMessageExtReq)) {\n        if (deviceFeatureSet_.hasExtension(Extensions::Debug)) {\n          debugMessageInsertProc_ = iglDebugMessageInsertKHR;\n        } else if (deviceFeatureSet_.hasExtension(Extensions::DebugMarker)) {\n          debugMessageInsertProc_ = iglInsertEventMarkerEXT;\n        }\n      } else {\n        debugMessageInsertProc_ = iglDebugMessageInsert;\n      }\n    }\n    IGL_DEBUG_ASSERT(debugMessageInsertProc_, \"No supported function for glDebugMessageInsert\\n\");\n  }\n\n  APILOG(\"glDebugMessageInsert(%s, %s, %u, %s, %u, %s)\\n\",\n         GL_ENUM_TO_STRING(source),\n         GL_ENUM_TO_STRING(type),\n         id,\n         GL_ENUM_TO_STRING(severity),\n         length,\n         buf);\n  GLCALL_PROC(debugMessageInsertProc_, source, type, id, severity, length, buf);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::deleteBuffers(GLsizei n, const GLuint* buffers) {\n  if (isDestructionAllowed() && IGL_DEBUG_VERIFY(buffers != nullptr)) {\n    if (shouldQueueAPI()) {\n      deletionQueues_.queueDeleteBuffers(n, buffers);\n    } else {\n      APILOG(\n          \"glDeleteBuffers(%u, %p) (buffer: %u)\\n\", n, buffers, buffers == nullptr ? 0 : *buffers);\n      GLCALL(DeleteBuffers)(n, buffers);\n      GLCHECK_ERRORS();\n    }\n  }\n}\n\nvoid IContext::deleteMemoryObjects(GLsizei n, const GLuint* objects) {\n  APILOG(\"glDeleteMemoryObjectsEXT(%u, %p) (memory object: %u)\\n\",\n         n,\n         objects,\n         objects == nullptr ? 0 : *objects);\n  IGLCALL(DeleteMemoryObjectsEXT)(n, objects);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::unbindBuffer(GLenum target) {\n  if (shouldQueueAPI()) {\n    deletionQueues_.queueUnbindBuffer(target);\n  } else {\n    bindBuffer(target, 0);\n  }\n}\n\nvoid IContext::deleteFramebuffers(GLsizei n, const GLuint* framebuffers) {\n  if (isDestructionAllowed() && IGL_DEBUG_VERIFY(framebuffers != nullptr)) {\n    if (shouldQueueAPI()) {\n      deletionQueues_.queueDeleteFramebuffers(n, framebuffers);\n    } else {\n      APILOG(\"glDeleteFramebuffers(%u, %p) (framebuffer: %u)\\n\",\n             n,\n             framebuffers,\n             framebuffers == nullptr ? 0 : *framebuffers);\n      IGLCALL(DeleteFramebuffers)(n, framebuffers);\n      GLCHECK_ERRORS();\n    }\n  }\n}\n\nvoid IContext::deleteProgram(GLuint program) {\n  if (isDestructionAllowed()) {\n    if (shouldQueueAPI()) {\n      deletionQueues_.queueDeleteProgram(program);\n    } else {\n      APILOG(\"glDeleteProgram(%u) (program: %u)\\n\", program, program);\n      GLCALL(DeleteProgram)(program);\n      GLCHECK_ERRORS();\n    }\n  }\n}\n\nvoid IContext::deleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) {\n  if (isDestructionAllowed() && IGL_DEBUG_VERIFY(renderbuffers != nullptr)) {\n    if (shouldQueueAPI()) {\n      deletionQueues_.queueDeleteRenderbuffers(n, renderbuffers);\n    } else {\n      APILOG(\"glDeleteRenderbuffers(%u, %p) (renderbuffer: %u)\\n\",\n             n,\n             renderbuffers,\n             renderbuffers == nullptr ? 0 : *renderbuffers);\n      IGLCALL(DeleteRenderbuffers)(n, renderbuffers);\n      GLCHECK_ERRORS();\n    }\n  }\n}\n\nvoid IContext::deleteVertexArrays(GLsizei n, const GLuint* vertexArrays) {\n  if (deleteVertexArraysProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::VertexArrayObjectExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::VertexArrayObject)) {\n        deleteVertexArraysProc_ = iglDeleteVertexArraysOES;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::VertexArrayObject)) {\n      deleteVertexArraysProc_ = iglDeleteVertexArrays;\n    }\n    IGL_DEBUG_ASSERT(deleteVertexArraysProc_, \"No supported function for glDeleteVertexArrays\\n\");\n  }\n  if (isDestructionAllowed() && IGL_DEBUG_VERIFY(vertexArrays != nullptr)) {\n    if (shouldQueueAPI()) {\n      deletionQueues_.queueDeleteVertexArrays(n, vertexArrays);\n    } else {\n      APILOG(\"glDeleteVertexArrays(%u, %p) (VAO: %u)\\n\",\n             n,\n             vertexArrays,\n             vertexArrays == nullptr ? 0 : *vertexArrays);\n      GLCALL_PROC(deleteVertexArraysProc_, n, vertexArrays);\n      GLCHECK_ERRORS();\n    }\n  }\n}\n\nvoid IContext::deleteShader(GLuint shaderId) {\n  if (isDestructionAllowed()) {\n    if (shouldQueueAPI()) {\n      deletionQueues_.queueDeleteShader(shaderId);\n    } else {\n      APILOG(\"glDeleteShader(%u)\\n\", shaderId);\n      GLCALL(DeleteShader)(shaderId);\n      GLCHECK_ERRORS();\n    }\n  }\n}\n\nvoid IContext::deleteSync(GLsync sync) {\n  if (deleteSyncProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::SyncExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::Sync)) {\n        deleteSyncProc_ = iglDeleteSyncAPPLE;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::Sync)) {\n      deleteSyncProc_ = iglDeleteSync;\n    }\n    IGL_DEBUG_ASSERT(deleteSyncProc_, \"No supported function for glDeleteSync\\n\");\n  }\n\n  APILOG(\"glDeleteSync(%p) (sync: %p)\\n\", sync, sync);\n  GLCALL_PROC(deleteSyncProc_, sync);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::deleteTextures(GLsizei n, const GLuint* textures) {\n  if (isDestructionAllowed() && IGL_DEBUG_VERIFY(textures != nullptr)) {\n    if (shouldQueueAPI()) {\n      deletionQueues_.queueDeleteTextures(n, textures);\n    } else {\n      APILOG(\"glDeleteTextures(%u, %p) (texture: %u)\\n\",\n             n,\n             textures,\n             textures == nullptr ? 0 : *textures);\n      GLCALL(DeleteTextures)(n, textures);\n      GLCHECK_ERRORS();\n    }\n  }\n}\n\nvoid IContext::depthFunc(GLenum func) {\n  APILOG(\"glDepthFunc(%s)\\n\", GL_ENUM_TO_STRING(func));\n  GLCALL(DepthFunc)(func);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::depthMask(GLboolean flag) {\n  APILOG(\"glDepthMask(%s)\\n\", GL_BOOL_TO_STRING(flag));\n  GLCALL(DepthMask)(flag);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::depthRangef(GLfloat n, GLfloat f) {\n  APILOG(\"glDepthRangef(%f, %f)\\n\", n, f);\n  GLCALL(DepthRangef)(n, f);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::detachShader(GLuint program, GLuint shader) {\n  APILOG(\"glDetachShader(%u, %u) (program: %u)\\n\", program, shader, program);\n  GLCALL(DetachShader)(program, shader);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::disable(GLenum cap) {\n  APILOG(\"glDisable(%s)\\n\", GL_ENUM_TO_STRING(cap));\n  GLCALL(Disable)(cap);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::disableVertexAttribArray(GLuint index) {\n#if IGL_API_LOG\n  if (index < enabledAttributes_.size()) {\n    enabledAttributes_.reset(index);\n  }\n#endif\n  APILOG(\"glDisableVertexAttribArray(%u) (VAO: %u) (buffer: %u\\n\",\n         index,\n         boundVao_,\n         index < boundAttributes_.size() ? boundAttributes_[index] : 0);\n  GLCALL(DisableVertexAttribArray)(index);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::drawArrays(GLenum mode, GLint first, GLsizei count) {\n#if IGL_API_LOG\n  lastCommandWasCompute_ = false;\n#endif\n  drawCallCount_++;\n\n  IGL_PROFILER_ZONE_GPU_OGL(\"drawArrays()\");\n\n  APILOG(\"glDrawArrays(%s, %d, %u) (program: %u) (VAO: %u) (framebuffer: %u) %s %s %s %s\\n\",\n         GL_ENUM_TO_STRING(mode),\n         first,\n         count,\n         boundProgram_,\n         boundVao_,\n         boundFramebuffer(GL_DRAW_FRAMEBUFFER),\n         boundDrawBuffers().c_str(),\n         boundDrawTextures().c_str(),\n         boundFramebufferAttachments(GL_DRAW_FRAMEBUFFER).c_str(),\n         boundBuffersByIndex().c_str());\n  GLCALL(DrawArrays)(mode, first, count);\n  GLCHECK_ERRORS();\n  APILOG_DEC_DRAW_COUNT();\n}\n\nvoid IContext::drawArraysIndirect(GLenum mode, const GLvoid* indirect) {\n#if IGL_API_LOG\n  lastCommandWasCompute_ = false;\n#endif\n  drawCallCount_++;\n\n  IGL_PROFILER_ZONE_GPU_COLOR_OGL(\"drawArraysIndirect()\", IGL_PROFILER_COLOR_DRAW);\n\n  APILOG(\n      \"glDrawArraysIndirect(%s, %p) (program: %u) (VAO: %u) (framebuffer: %u) indirect (buffer: \"\n      \"%u) %s %s %s %s\\n\",\n      GL_ENUM_TO_STRING(mode),\n      indirect,\n      boundProgram_,\n      boundVao_,\n      boundFramebuffer(GL_DRAW_FRAMEBUFFER),\n      boundBuffer(GL_DRAW_INDIRECT_BUFFER),\n      boundDrawBuffers().c_str(),\n      boundDrawTextures().c_str(),\n      boundFramebufferAttachments(GL_DRAW_FRAMEBUFFER).c_str(),\n      boundBuffersByIndex().c_str());\n  IGLCALL(DrawArraysIndirect)(mode, indirect);\n  GLCHECK_ERRORS();\n  APILOG_DEC_DRAW_COUNT();\n}\n\nvoid IContext::drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount) {\n#if IGL_API_LOG\n  lastCommandWasCompute_ = false;\n#endif\n  drawCallCount_++;\n\n  IGL_PROFILER_ZONE_GPU_OGL(\"drawArraysInstanced()\");\n\n  APILOG(\n      \"glDrawArraysInstanced(%s, %d, %u, %u) (program: %u) (VAO: %u) (framebuffer: %u) %s %s %s \"\n      \"%s\\n\",\n      GL_ENUM_TO_STRING(mode),\n      first,\n      count,\n      instancecount,\n      boundProgram_,\n      boundVao_,\n      boundFramebuffer(GL_DRAW_FRAMEBUFFER),\n      boundDrawBuffers().c_str(),\n      boundDrawTextures().c_str(),\n      boundFramebufferAttachments(GL_DRAW_FRAMEBUFFER).c_str(),\n      boundBuffersByIndex().c_str());\n  IGLCALL(DrawArraysInstanced)(mode, first, count, instancecount);\n  GLCHECK_ERRORS();\n  APILOG_DEC_DRAW_COUNT();\n}\n\nvoid IContext::drawBuffers(GLsizei n, GLenum* buffers) {\n  if (drawBuffersProc_ == nullptr) {\n    if (deviceFeatureSet_.hasFeature(DeviceFeatures::MultipleRenderTargets)) {\n      if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::DrawBuffersExtReq)) {\n        if (deviceFeatureSet_.hasExtension(Extensions::DrawBuffers)) {\n          drawBuffersProc_ = iglDrawBuffersEXT;\n        }\n      } else {\n        drawBuffersProc_ = iglDrawBuffers;\n      }\n    }\n    IGL_DEBUG_ASSERT(drawBuffersProc_, \"No supported function for glDrawBuffers\\n\");\n  }\n  IGL_PROFILER_ZONE_GPU_COLOR_OGL(\"drawBuffers()\", IGL_PROFILER_COLOR_DRAW);\n\n  APILOG(\"glDrawBuffers(%u, %u)\\n\", n, buffers);\n  GLCALL_PROC(drawBuffersProc_, n, buffers);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* indices) {\n#if IGL_API_LOG\n  lastCommandWasCompute_ = false;\n#endif\n  drawCallCount_++;\n\n  IGL_PROFILER_ZONE_GPU_COLOR_OGL(\"drawElements()\", IGL_PROFILER_COLOR_DRAW);\n\n  APILOG(\n      \"glDrawElements(%s, %u, %s, %p) (program: %u) (VAO: %u) (framebuffer: %u) element (buffer: \"\n      \"%u) %s %s %s %s\\n\",\n      GL_ENUM_TO_STRING(mode),\n      count,\n      GL_ENUM_TO_STRING(type),\n      indices,\n      boundProgram_,\n      boundVao_,\n      boundFramebuffer(GL_DRAW_FRAMEBUFFER),\n      boundBuffer(GL_ELEMENT_ARRAY_BUFFER),\n      boundDrawBuffers().c_str(),\n      boundDrawTextures().c_str(),\n      boundFramebufferAttachments(GL_DRAW_FRAMEBUFFER).c_str(),\n      boundBuffersByIndex().c_str());\n  GLCALL(DrawElements)(mode, count, type, indices);\n  GLCHECK_ERRORS();\n  APILOG_DEC_DRAW_COUNT();\n}\n\nvoid IContext::drawElementsInstanced(GLenum mode,\n                                     GLsizei count,\n                                     GLenum type,\n                                     const GLvoid* indices,\n                                     GLsizei instancecount) {\n#if IGL_API_LOG\n  lastCommandWasCompute_ = false;\n#endif\n  drawCallCount_++;\n\n  IGL_PROFILER_ZONE_GPU_COLOR_OGL(\"drawElementsInstanced()\", IGL_PROFILER_COLOR_DRAW);\n\n  APILOG(\n      \"glDrawElementsInstanced(%s, %u, %s, %p, %u) (program: %u) (VAO: %u) (framebuffer: %u) \"\n      \"element (buffer: %u) %s %s %s %s\\n\",\n      GL_ENUM_TO_STRING(mode),\n      count,\n      GL_ENUM_TO_STRING(type),\n      indices,\n      instancecount,\n      boundProgram_,\n      boundVao_,\n      boundFramebuffer(GL_DRAW_FRAMEBUFFER),\n      boundBuffer(GL_ELEMENT_ARRAY_BUFFER),\n      boundDrawBuffers().c_str(),\n      boundDrawTextures().c_str(),\n      boundFramebufferAttachments(GL_DRAW_FRAMEBUFFER).c_str(),\n      boundBuffersByIndex().c_str());\n  IGLCALL(DrawElementsInstanced)(mode, count, type, indices, instancecount);\n  GLCHECK_ERRORS();\n  APILOG_DEC_DRAW_COUNT();\n}\n\nvoid IContext::drawElementsIndirect(GLenum mode, GLenum type, const GLvoid* indirect) {\n#if IGL_API_LOG\n  lastCommandWasCompute_ = false;\n#endif\n  drawCallCount_++;\n\n  IGL_PROFILER_ZONE_GPU_COLOR_OGL(\"drawElementsIndirect()\", IGL_PROFILER_COLOR_DRAW);\n\n  APILOG(\n      \"glDrawElementsIndirect(%s, %s, %p) (program: %u) (VAO: %u) (framebuffer: %u) indirect \"\n      \"(buffer: %u) element (buffer: %u) %s %s %s %s\\n\",\n      GL_ENUM_TO_STRING(mode),\n      GL_ENUM_TO_STRING(type),\n      indirect,\n      boundProgram_,\n      boundVao_,\n      boundFramebuffer(GL_DRAW_FRAMEBUFFER),\n      boundBuffer(GL_DRAW_INDIRECT_BUFFER),\n      boundBuffer(GL_ELEMENT_ARRAY_BUFFER),\n      boundDrawBuffers().c_str(),\n      boundDrawTextures().c_str(),\n      boundFramebufferAttachments(GL_DRAW_FRAMEBUFFER).c_str(),\n      boundBuffersByIndex().c_str());\n  IGLCALL(DrawElementsIndirect)(mode, type, indirect);\n  GLCHECK_ERRORS();\n  APILOG_DEC_DRAW_COUNT();\n}\n\nvoid IContext::multiDrawArraysIndirect(GLenum mode,\n                                       const void* indirect,\n                                       GLsizei drawcount,\n                                       GLsizei stride) {\n#if IGL_API_LOG\n  lastCommandWasCompute_ = false;\n#endif\n  drawCallCount_ += drawcount;\n\n  IGL_PROFILER_ZONE_GPU_COLOR_OGL(\"multiDrawArraysIndirect()\", IGL_PROFILER_COLOR_DRAW);\n\n  APILOG(\"glMultiDrawArraysIndirect(%s, %p, %d, %d)\\n\",\n         GL_ENUM_TO_STRING(mode),\n         indirect,\n         drawcount,\n         stride);\n  IGL_DEBUG_ASSERT(indirect);\n  IGLCALL(MultiDrawArraysIndirect)(mode, indirect, drawcount, stride);\n  GLCHECK_ERRORS();\n  APILOG_DEC_DRAW_COUNT();\n}\n\nvoid IContext::multiDrawElementsIndirect(GLenum mode,\n                                         GLenum type,\n                                         const void* indirect,\n                                         GLsizei drawcount,\n                                         GLsizei stride) {\n#if IGL_API_LOG\n  lastCommandWasCompute_ = false;\n#endif\n  drawCallCount_ += drawcount;\n\n  IGL_PROFILER_ZONE_GPU_COLOR_OGL(\"multiDrawElementsIndirect()\", IGL_PROFILER_COLOR_DRAW);\n\n  APILOG(\"glMultiDrawElementsIndirect(%s, %s, %p, %d, %d)\\n\",\n         GL_ENUM_TO_STRING(mode),\n         GL_ENUM_TO_STRING(type),\n         indirect,\n         drawcount,\n         stride);\n  IGL_DEBUG_ASSERT(indirect);\n  IGLCALL(MultiDrawElementsIndirect)(mode, type, indirect, drawcount, stride);\n  GLCHECK_ERRORS();\n  APILOG_DEC_DRAW_COUNT();\n}\n\nvoid IContext::enable(GLenum cap) {\n  APILOG(\"glEnable(%s)\\n\", GL_ENUM_TO_STRING(cap));\n  GLCALL(Enable)(cap);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::enableVertexAttribArray(GLuint index) {\n#if IGL_API_LOG\n  if (index < enabledAttributes_.size()) {\n    enabledAttributes_.set(index);\n  }\n#endif\n  APILOG(\"glEnableVertexAttribArray(%u) (VAO: %u) (buffer: %u)\\n\",\n         index,\n         boundVao_,\n         index < boundAttributes_.size() ? boundAttributes_[index] : 0);\n  GLCALL(EnableVertexAttribArray)(index);\n  GLCHECK_ERRORS();\n}\n\nGLsync IContext::fenceSync(GLenum condition, GLbitfield flags) {\n  if (fenceSyncProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::SyncExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::Sync)) {\n        fenceSyncProc_ = iglFenceSyncAPPLE;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::Sync)) {\n      fenceSyncProc_ = iglFenceSync;\n    }\n    IGL_DEBUG_ASSERT(fenceSyncProc_, \"No supported function for glFenceSync\\n\");\n  }\n\n  GLsync sync = nullptr;\n\n  APILOG(\"glFenceSync(%s, %u) (sync: %p)\\n\", GL_ENUM_TO_STRING(condition), flags, sync);\n  GLCALL_PROC_WITH_RETURN(sync, fenceSyncProc_, GL_ZERO, condition, flags);\n  GLCHECK_ERRORS();\n\n  return sync;\n}\n\nvoid IContext::finish() {\n  APILOG(\"glFinish\\n\");\n  GLCALL(Finish)();\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::flush() {\n  APILOG(\"glFlush\\n\");\n  GLCALL(Flush)();\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::framebufferRenderbuffer(GLenum target,\n                                       GLenum attachment,\n                                       GLenum renderbuffertarget,\n                                       GLuint renderbuffer) {\n#if IGL_API_LOG\n  const char* unboundAttachmentType = framebufferAttachmentType(target, attachment);\n  GLuint unboundAttachment = framebufferAttachment(target, attachment);\n  setFramebufferAttachment(target, attachment, true, renderbuffer);\n#endif\n  APILOG(\n      \"glFramebufferRenderbuffer(%s, %s, %s, %u) (framebuffer: %u) unbound (%s: %u) bound \"\n      \"(renderbuffer: %u)\\n\",\n      GL_ENUM_TO_STRING(target),\n      GL_ENUM_TO_STRING(attachment),\n      GL_ENUM_TO_STRING(renderbuffertarget),\n      boundFramebuffer(target),\n      unboundAttachmentType,\n      unboundAttachment,\n      renderbuffer);\n  IGLCALL(FramebufferRenderbuffer)(target, attachment, renderbuffertarget, renderbuffer);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::framebufferTexture2D(GLenum target,\n                                    GLenum attachment,\n                                    GLenum textarget,\n                                    GLuint texture,\n                                    GLint level) {\n#if IGL_API_LOG\n  const char* unboundAttachmentType = framebufferAttachmentType(target, attachment);\n  GLuint unboundAttachment = framebufferAttachment(target, attachment);\n  setFramebufferAttachment(target, attachment, false, texture);\n#endif\n  APILOG(\n      \"glFramebufferTexture2D(%s, %s, %s, %u, %d) (framebuffer: %u) unbound (%s: %u) bound \"\n      \"(texture: %u)\\n\",\n      GL_ENUM_TO_STRING(target),\n      GL_ENUM_TO_STRING(attachment),\n      GL_ENUM_TO_STRING(textarget),\n      texture,\n      level,\n      boundFramebuffer(target),\n      unboundAttachmentType,\n      unboundAttachment,\n      texture);\n  IGLCALL(FramebufferTexture2D)(target, attachment, textarget, texture, level);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::framebufferTexture2DMultisample(GLenum target,\n                                               GLenum attachment,\n                                               GLenum textarget,\n                                               GLuint texture,\n                                               GLint level,\n                                               GLsizei samples) {\n#if IGL_API_LOG\n  const char* unboundAttachmentType = framebufferAttachmentType(target, attachment);\n  GLuint unboundAttachment = framebufferAttachment(target, attachment);\n  setFramebufferAttachment(target, attachment, false, texture);\n#endif\n  if (framebufferTexture2DMultisampleProc_ == nullptr) {\n    // Use runtime checks to determine which of several potential methods are supported by the\n    // context.\n    if (deviceFeatureSet_.hasExtension(Extensions::MultiSampleExt)) {\n      framebufferTexture2DMultisampleProc_ = iglFramebufferTexture2DMultisampleEXT;\n    } else if (deviceFeatureSet_.hasExtension(Extensions::MultiSampleImg)) {\n      framebufferTexture2DMultisampleProc_ = iglFramebufferTexture2DMultisampleIMG;\n    }\n    IGL_DEBUG_ASSERT(framebufferTexture2DMultisampleProc_,\n                     \"No supported function for glFramebufferTexture2DMultisample\\n\");\n  }\n\n  if (maxSamples_ == -1 && framebufferTexture2DMultisampleProc_ != nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::MultiSampleExtReq) &&\n        deviceFeatureSet_.hasExtension(Extensions::MultiSampleImg)) {\n      getIntegerv(GL_MAX_SAMPLES_IMG, &maxSamples_);\n    } else {\n      getIntegerv(GL_MAX_SAMPLES, &maxSamples_);\n    }\n  }\n\n  if (samples > maxSamples_) {\n    samples = maxSamples_;\n  }\n\n  APILOG(\n      \"glFramebufferTexture2DMultisample(%s, %s, %s, %u, %d, %u) (framebuffer: %u) unbound (%s: \"\n      \"%u) bound (texture: %u)\\n\",\n      GL_ENUM_TO_STRING(target),\n      GL_ENUM_TO_STRING(attachment),\n      GL_ENUM_TO_STRING(textarget),\n      texture,\n      level,\n      samples,\n      boundFramebuffer(target),\n      unboundAttachmentType,\n      unboundAttachment,\n      texture);\n  GLCALL_PROC(\n      framebufferTexture2DMultisampleProc_, target, attachment, textarget, texture, level, samples);\n\n  // Certain drivers (I am looking at you Adreno) misbehave according to spec,\n  // where GL_DRAW_FRAMEBUFFER is perfectly valid framebuffer target, but it only recognizes\n  // GL_FRAMEBUFFER meaning that it behaves as if it is `IMG_multisampled_render_to_texture` not\n  // `EXT_multisampled_render_to_texture`.\n  auto error = getError();\n  if (error == GL_INVALID_ENUM &&\n      (target == GL_DRAW_FRAMEBUFFER || target == GL_READ_FRAMEBUFFER) &&\n      deviceFeatureSet_.hasExtension(Extensions::MultiSampleExt)) {\n    // Repeat again, now using explicitly GL_FRAMEBUFFER not GL_DRAW/GL_READ.\n    framebufferTexture2DMultisample(GL_FRAMEBUFFER, attachment, textarget, texture, level, samples);\n  } else if (alwaysCheckError_) {\n    lastError_ = error;\n    GL_ASSERT_ERROR(lastError_ == GL_NO_ERROR, __FUNCTION__, __LINE__, error);\n  }\n}\n\nvoid IContext::framebufferTextureLayer(GLenum target,\n                                       GLenum attachment,\n                                       GLuint texture,\n                                       GLint level,\n                                       GLint layer) {\n#if IGL_API_LOG\n  const char* unboundAttachmentType = framebufferAttachmentType(target, attachment);\n  GLuint unboundAttachment = framebufferAttachment(target, attachment);\n  setFramebufferAttachment(target, attachment, false, texture);\n#endif\n  APILOG(\n      \"glFramebufferTextureLayer(%s, %s, %u, %d, %d) (framebuffer: %u) unbound (%s: %u) bound \"\n      \"(texture: %u)\\n\",\n      GL_ENUM_TO_STRING(target),\n      GL_ENUM_TO_STRING(attachment),\n      texture,\n      level,\n      layer,\n      boundFramebuffer(target),\n      unboundAttachmentType,\n      unboundAttachment,\n      texture);\n  IGLCALL(FramebufferTextureLayer)(target, attachment, texture, level, layer);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::frontFace(GLenum mode) {\n  APILOG(\"glFrontFace(%s)\\n\", GL_ENUM_TO_STRING(mode));\n  GLCALL(FrontFace)(mode);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::polygonFillMode(IGL_MAYBE_UNUSED GLenum mode) {\n#if IGL_OPENGL\n  APILOG(\"glPolygonMode(%s)\\n\", GL_ENUM_TO_STRING(mode));\n  GLCALL(PolygonMode)(GL_FRONT_AND_BACK, mode);\n  GLCHECK_ERRORS();\n#else\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n#endif\n}\n\nvoid IContext::generateMipmap(GLenum target) {\n  APILOG(\"glGenerateMipmap(%s)\\n\", GL_ENUM_TO_STRING(target));\n  IGLCALL(GenerateMipmap)(target);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::genBuffers(GLsizei n, GLuint* buffers) {\n  GLCALL(GenBuffers)(n, buffers);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGenBuffers(%u, %p) (buffer: %u)\\n\", n, buffers, buffers == nullptr ? 0 : *buffers);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::genFramebuffers(GLsizei n, GLuint* framebuffers) {\n  IGLCALL(GenFramebuffers)(n, framebuffers);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGenFramebuffers(%u, %p) (framebuffer: %u)\\n\",\n         n,\n         framebuffers,\n         framebuffers == nullptr ? 0 : *framebuffers);\n  GLCHECK_ERRORS();\n#if IGL_API_LOG\n  for (GLsizei i = 0; i < n; ++i) {\n    framebufferAttachments_[framebuffers[i]] = {};\n  }\n#endif\n}\n\nvoid IContext::genRenderbuffers(GLsizei n, GLuint* renderbuffers) {\n  IGLCALL(GenRenderbuffers)(n, renderbuffers);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGenRenderbuffers(%u, %p) (renderbuffer: %u)\\n\",\n         n,\n         renderbuffers,\n         renderbuffers == nullptr ? 0 : *renderbuffers);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::genTextures(GLsizei n, GLuint* textures) {\n  GLCALL(GenTextures)(n, textures);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGenTextures(%u, %p) (texture: %u)\\n\", n, textures, textures == nullptr ? 0 : *textures);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::genVertexArrays(GLsizei n, GLuint* vertexArrays) {\n  if (genVertexArraysProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::VertexArrayObjectExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::VertexArrayObject)) {\n        genVertexArraysProc_ = iglGenVertexArraysOES;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::VertexArrayObject)) {\n      genVertexArraysProc_ = iglGenVertexArrays;\n    }\n    IGL_DEBUG_ASSERT(genVertexArraysProc_, \"No supported function for glGenVertexArrays\\n\");\n  }\n  GLCALL_PROC(genVertexArraysProc_, n, vertexArrays);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGenVertexArrays(%u, %p) (VAO: %u)\\n\",\n         n,\n         vertexArrays,\n         vertexArrays == nullptr ? 0 : *vertexArrays);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getActiveAttrib(GLuint program,\n                               GLuint index,\n                               GLsizei bufsize,\n                               GLsizei* length,\n                               GLint* size,\n                               GLenum* type,\n                               GLchar* name) const {\n  GLCALL(GetActiveAttrib)(program, index, bufsize, length, size, type, name);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetActiveAttrib(%u, %u, %u, %p, %p, %p, %p) = (%d, %s, %.*s) (program: %u)\\n\",\n         program,\n         index,\n         bufsize,\n         length,\n         size,\n         type,\n         name,\n         size == nullptr ? 0 : *size,\n         type == nullptr ? GL_ENUM_TO_STRING(0) : GL_ENUM_TO_STRING(*type),\n         static_cast<int>(length == nullptr\n                              ? (name == nullptr ? 0 : static_cast<int>(std::strlen(name)))\n                              : *length),\n         name == nullptr ? \"\" : name,\n         program);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getActiveUniform(GLuint program,\n                                GLuint index,\n                                GLsizei bufsize,\n                                GLsizei* length,\n                                GLint* size,\n                                GLenum* type,\n                                GLchar* name) const {\n  GLCALL(GetActiveUniform)(program, index, bufsize, length, size, type, name);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetActiveUniform(%u, %u, %u, %p, %p, %p, %p) = (%d, %s, %.*s) (program: %u)\\n\",\n         program,\n         index,\n         bufsize,\n         length,\n         size,\n         type,\n         name,\n         size == nullptr ? 0 : *size,\n         type == nullptr ? GL_ENUM_TO_STRING(0) : GL_ENUM_TO_STRING(*type),\n         static_cast<int>(length == nullptr\n                              ? (name == nullptr ? 0 : static_cast<int>(std::strlen(name)))\n                              : *length),\n         name == nullptr ? \"\" : name,\n         program);\n  GLCHECK_ERRORS();\n#if IGL_API_LOG\n  addProgramUniform(program, length, type, name);\n#endif\n}\n\nvoid IContext::getActiveUniformsiv(GLuint program,\n                                   GLsizei uniformCount,\n                                   const GLuint* uniformIndices,\n                                   GLenum pname,\n                                   GLint* params) const {\n  IGLCALL(GetActiveUniformsiv)(program, uniformCount, uniformIndices, pname, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetActiveUniformsiv(%u, %u, %p, %s, %p) (program: %u)\\n\",\n         program,\n         uniformCount,\n         uniformIndices,\n         GL_ENUM_TO_STRING(pname),\n         params,\n         program);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getActiveUniformBlockiv(GLuint program,\n                                       GLuint index,\n                                       GLenum pname,\n                                       GLint* params) const {\n  IGLCALL(GetActiveUniformBlockiv)(program, index, pname, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetActiveUniformBlockiv(%u, %u, %s, %p) = %d (program: %u)\\n\",\n         program,\n         index,\n         GL_ENUM_TO_STRING(pname),\n         params,\n         params == nullptr ? 0 : *params,\n         program);\n  GLCHECK_ERRORS();\n#if IGL_API_LOG\n  if (pname == GL_UNIFORM_BLOCK_BINDING) {\n    programUbosByLocation_[program][params == nullptr ? 0 : *params] =\n        programUbosByIndex_[program][index];\n  }\n#endif\n}\n\nvoid IContext::getActiveUniformBlockName(GLuint program,\n                                         GLuint index,\n                                         GLsizei bufSize,\n                                         GLsizei* length,\n                                         GLchar* uniformBlockName) const {\n  IGLCALL(GetActiveUniformBlockName)(program, index, bufSize, length, uniformBlockName);\n  // NOTE: Must log after call due to return value\n  APILOG(\n      \"glGetActiveUniformBlockName(%u, %u, %u, %p, %p) = %.*s (program: %u)\\n\",\n      program,\n      index,\n      bufSize,\n      length,\n      uniformBlockName,\n      static_cast<int>(\n          length == nullptr\n              ? (uniformBlockName == nullptr ? 0 : static_cast<int>(std::strlen(uniformBlockName)))\n              : *length),\n      uniformBlockName == nullptr ? \"\" : uniformBlockName,\n      program);\n  GLCHECK_ERRORS();\n#if IGL_API_LOG\n  programUbosByIndex_[program][index] = (uniformBlockName == nullptr) ? \"\" : uniformBlockName;\n#endif\n}\n\nGLint IContext::getAttribLocation(GLuint program, const GLchar* name) const {\n  GLint ret = 0;\n\n  GLCALL_WITH_RETURN(ret, GetAttribLocation)(program, name);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetAttribLocation(%u, %s) = %d (program: %u)\\n\", program, name, ret, program);\n  GLCHECK_ERRORS();\n\n  return ret;\n}\n\nvoid IContext::getBooleanv(GLenum pname, GLboolean* params) const {\n  GLCALL(GetBooleanv)(pname, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetBooleanv(%s, %p) = %s\\n\",\n         GL_ENUM_TO_STRING(pname),\n         params,\n         params == nullptr ? \"\" : GL_BOOL_TO_STRING(*params));\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getBufferParameteriv(GLenum target, GLenum pname, GLint* params) const {\n  GLCALL(GetBufferParameteriv)(target, pname, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetBufferParameteriv(%s, %s, %p) = %d (buffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         GL_ENUM_TO_STRING(pname),\n         params,\n         params == nullptr ? 0 : *params,\n         boundBuffer(target));\n  GLCHECK_ERRORS();\n}\n\nGLenum IContext::getError() const {\n  // Using direct GL call here instead of wrapped one,\n  // since we will add error call counting at some point.\n  return glGetError();\n}\n\nGLuint IContext::getDebugMessageLog(GLuint count,\n                                    GLsizei bufSize,\n                                    GLenum* sources,\n                                    GLenum* types,\n                                    GLuint* ids,\n                                    GLenum* severities,\n                                    GLsizei* lengths,\n                                    GLchar* messageLog) const {\n  if (getDebugMessageLogProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::DebugMessageCallbackExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::Debug)) {\n        getDebugMessageLogProc_ = iglGetDebugMessageLogKHR;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugMessageCallback)) {\n      getDebugMessageLogProc_ = iglGetDebugMessageLog;\n    }\n    IGL_DEBUG_ASSERT(getDebugMessageLogProc_, \"No supported function for glGetDebugMessageLog\\n\");\n  }\n  GLuint ret = 0;\n  GLCALL_PROC_WITH_RETURN(ret,\n                          getDebugMessageLogProc_,\n                          0,\n                          count,\n                          bufSize,\n                          sources,\n                          types,\n                          ids,\n                          severities,\n                          lengths,\n                          messageLog);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetDebugMessageLog(%u, %d, %p, %p, %p, %p, %p, %p)\\n\",\n         count,\n         bufSize,\n         sources,\n         types,\n         ids,\n         severities,\n         lengths,\n         messageLog);\n  GLCHECK_ERRORS();\n  return ret;\n}\n\nvoid IContext::getFramebufferAttachmentParameteriv(GLenum target,\n                                                   GLenum attachment,\n                                                   GLenum pname,\n                                                   GLint* params) const {\n  IGLCALL(GetFramebufferAttachmentParameteriv)(target, attachment, pname, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetFramebufferAttachmentParameteriv(%s, %s, %s, %p) = %d (framebuffer: %u) (%s: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         GL_ENUM_TO_STRING(attachment),\n         GL_ENUM_TO_STRING(pname),\n         params,\n         params == nullptr ? 0 : *params,\n         boundFramebuffer(target),\n         framebufferAttachmentType(target, attachment),\n         framebufferAttachment(target, attachment));\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getIntegerv(GLenum pname, GLint* params) const {\n  GLCALL(GetIntegerv)(pname, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetIntegerv(%s, %p) = %d\\n\",\n         GL_ENUM_TO_STRING(pname),\n         params,\n         params == nullptr ? 0 : *params);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getProgramiv(GLuint program, GLenum pname, GLint* params) const {\n  GLCALL(GetProgramiv)(program, pname, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetProgramiv(%u, %s, %p) = %d (program: %u)\\n\",\n         program,\n         GL_ENUM_TO_STRING(pname),\n         params,\n         params == nullptr ? 0 : *params,\n         program);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getProgramInterfaceiv(GLuint program,\n                                     GLenum programInterface,\n                                     GLenum pname,\n                                     GLint* params) const {\n  IGLCALL(GetProgramInterfaceiv)(program, programInterface, pname, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetProgramInterfaceiv(%u, %s, %s, %p) = %d (program: %u)\\n\",\n         program,\n         GL_ENUM_TO_STRING(programInterface),\n         GL_ENUM_TO_STRING(pname),\n         params,\n         params == nullptr ? 0 : *params,\n         program);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getProgramInfoLog(GLuint program,\n                                 GLsizei bufsize,\n                                 GLsizei* length,\n                                 GLchar* infolog) const {\n  GLCALL(GetProgramInfoLog)(program, bufsize, length, infolog);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetProgramInfoLog(%u, %u, %p, %p) = %.*s (progam: %u)\\n\",\n         program,\n         bufsize,\n         length,\n         infolog,\n         static_cast<int>(length == nullptr\n                              ? (infolog == nullptr ? 0 : static_cast<int>(std::strlen(infolog)))\n                              : *length),\n         infolog == nullptr ? \"\" : infolog,\n         program);\n  GLCHECK_ERRORS();\n}\n\nGLuint IContext::getProgramResourceIndex(GLuint program,\n                                         GLenum programInterface,\n                                         const GLchar* name) const {\n  GLuint ret = 0;\n\n  IGLCALL_WITH_RETURN(ret, GetProgramResourceIndex)(program, programInterface, name);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetProgramResourceIndex(%u, %s, %s) = %u (program: %u)\\n\",\n         program,\n         GL_ENUM_TO_STRING(programInterface),\n         name,\n         ret,\n         program);\n  GLCHECK_ERRORS();\n\n#if IGL_API_LOG\n  setProgramResourceIndex(program, programInterface, name, ret);\n#endif\n\n  return ret;\n}\n\nvoid IContext::getProgramResourceiv(GLuint program,\n                                    GLenum programInterface,\n                                    GLuint index,\n                                    GLsizei propCount,\n                                    const GLenum* IGL_NULLABLE props,\n                                    GLsizei bufSize,\n                                    GLsizei* IGL_NULLABLE length,\n                                    GLint* IGL_NULLABLE params) {\n  IGLCALL(GetProgramResourceiv)\n  (program, programInterface, index, propCount, props, bufSize, length, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetProgramResourceiv(%u, %s, %u, %u, %p [%s], %u, %p, %p) = (%u, %d) (program: %u)\\n\",\n         program,\n         GL_ENUM_TO_STRING(programInterface),\n         index,\n         propCount,\n         props,\n         GL_ENUM_TO_STRING(props == nullptr ? 0 : *props),\n         bufSize,\n         length,\n         params,\n         length == nullptr ? 0 : *length,\n         params == nullptr ? 0 : *params,\n         program);\n  GLCHECK_ERRORS();\n\n#if IGL_API_LOG\n  if (programInterface == GL_SHADER_STORAGE_BLOCK && propCount > 0 && props != nullptr &&\n      *props == GL_BUFFER_BINDING) {\n    programSsbosByLocation_[program][params == nullptr ? 0 : *params] =\n        programSsbosByIndex_[program][index];\n  }\n#endif\n}\n\nvoid IContext::getProgramResourceName(GLuint program,\n                                      GLenum programInterface,\n                                      GLuint index,\n                                      GLsizei bufSize,\n                                      GLsizei* length,\n                                      char* name) const {\n  IGLCALL(GetProgramResourceName)(program, programInterface, index, bufSize, length, name);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetProgramResourceName(%u, %s, %u, %u, %p, %p) = %.*s (program: %u)\\n\",\n         program,\n         GL_ENUM_TO_STRING(programInterface),\n         index,\n         bufSize,\n         length,\n         name,\n         static_cast<int>(length == nullptr\n                              ? (name == nullptr ? 0 : static_cast<int>(std::strlen(name)))\n                              : *length),\n         name == nullptr ? \"\" : name,\n         program);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getShaderiv(GLuint shader, GLenum pname, GLint* params) const {\n  GLCALL(GetShaderiv)(shader, pname, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetShaderiv(%u, %s, %p) = %d\\n\",\n         shader,\n         GL_ENUM_TO_STRING(pname),\n         params,\n         params == nullptr ? 0 : *params);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getShaderInfoLog(GLuint shader,\n                                GLsizei maxLength,\n                                GLsizei* length,\n                                GLchar* infoLog) const {\n  GLCALL(GetShaderInfoLog)(shader, maxLength, length, infoLog);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetShaderInfoLog(%u, %u, %p, %p) = %.*s\\n\",\n         shader,\n         maxLength,\n         length,\n         infoLog,\n         static_cast<int>(length == nullptr\n                              ? (infoLog == nullptr ? 0 : static_cast<int>(std::strlen(infoLog)))\n                              : *length),\n         infoLog == nullptr ? \"\" : infoLog);\n  GLCHECK_ERRORS();\n}\n\nconst GLubyte* IContext::getString(GLenum name) const {\n  const GLubyte* ret = nullptr;\n\n  GLCALL_WITH_RETURN(ret, GetString)(name);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetString(%s) = %s\\n\", GL_ENUM_TO_STRING(name), reinterpret_cast<const char*>(ret));\n  GLCHECK_ERRORS();\n\n  return ret;\n}\n\nconst GLubyte* IContext::getStringi(GLenum name, GLuint index) const {\n  const GLubyte* ret = nullptr;\n\n  IGLCALL_WITH_RETURN(ret, GetStringi)(name, index);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetStringi(%s, %d) = %s\\n\",\n         GL_ENUM_TO_STRING(name),\n         index,\n         reinterpret_cast<const char*>(ret));\n  GLCHECK_ERRORS();\n\n  return ret;\n}\n\nvoid IContext::getSynciv(GLsync sync,\n                         GLenum pname,\n                         GLsizei bufSize,\n                         GLsizei* length,\n                         GLint* values) const {\n  if (getSyncivProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::SyncExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::Sync)) {\n        getSyncivProc_ = iglGetSyncivAPPLE;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::Sync)) {\n      getSyncivProc_ = iglGetSynciv;\n    }\n    IGL_DEBUG_ASSERT(getSyncivProc_, \"No supported function for glGetSynciv\\n\");\n  }\n  GLCALL_PROC(getSyncivProc_, sync, pname, bufSize, length, values);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetSynciv(%p, %s, %u, %p, %p) = %d (sync: %p)\\n\",\n         sync,\n         GL_ENUM_TO_STRING(pname),\n         bufSize,\n         length,\n         values,\n         values == nullptr ? 0 : *values,\n         sync);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::getUniformiv(GLuint program, GLint location, GLint* params) const {\n  GLCALL(GetUniformiv)(program, location, params);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetUniformiv(%u, %d, %p) = %d (program: %u)\\n\",\n         program,\n         location,\n         params,\n         params == nullptr ? 0 : *params,\n         program);\n  GLCHECK_ERRORS();\n}\n\nGLint IContext::getUniformLocation(GLuint program, const GLchar* name) const {\n  GLint ret = 0;\n\n  GLCALL_WITH_RETURN(ret, GetUniformLocation)(program, name);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetUniformLocation(%u, %s) = %d (program: %u)\\n\", program, name, ret, program);\n  GLCHECK_ERRORS();\n\n#if IGL_API_LOG\n  setProgramUniformLocation(program, name, ret);\n#endif\n\n  return ret;\n}\n\nvoid IContext::importMemoryFd(GLuint memory, GLuint64 size, GLenum handleType, GLint fd) {\n  APILOG(\n      \"glImportMemoryFdEXT(%u, %llu, %s, %d)\\n\", memory, size, GL_ENUM_TO_STRING(handleType), fd);\n  IGLCALL(ImportMemoryFdEXT)(memory, size, handleType, fd);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::invalidateFramebuffer(IGL_MAYBE_UNUSED GLenum target,\n                                     IGL_MAYBE_UNUSED GLsizei numAttachments,\n                                     IGL_MAYBE_UNUSED const GLenum* attachments) {\n  if (invalidateFramebufferProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(\n            InternalRequirement::InvalidateFramebufferExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::DiscardFramebuffer)) {\n        invalidateFramebufferProc_ = iglDiscardFramebufferEXT;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::InvalidateFramebuffer)) {\n      invalidateFramebufferProc_ = iglInvalidateFramebuffer;\n    }\n    IGL_DEBUG_ASSERT(invalidateFramebufferProc_,\n                     \"No supported function for glInvalidateFramebuffer\\n\");\n  }\n  APILOG(\"glInvalidateFramebuffer(%s, %u, %p) (framebuffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         numAttachments,\n         attachments,\n         boundFramebuffer(target));\n  GLCALL_PROC(invalidateFramebufferProc_, target, numAttachments, attachments);\n  GLCHECK_ERRORS();\n}\n\nGLboolean IContext::isEnabled(GLenum cap) {\n  GLboolean ret = 0;\n\n  GLCALL_WITH_RETURN(ret, IsEnabled)(cap);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glIsEnabled(%s) = %s\\n\", GL_ENUM_TO_STRING(cap), GL_BOOL_TO_STRING(ret));\n  GLCHECK_ERRORS();\n\n  return ret;\n}\n\nGLboolean IContext::isTexture(GLuint texture) {\n  GLboolean ret = 0;\n\n  GLCALL_WITH_RETURN(ret, IsTexture)(texture);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glIsTexture(%u) = %s\\n\", texture, GL_BOOL_TO_STRING(ret));\n  GLCHECK_ERRORS();\n\n  return ret;\n}\n\nvoid IContext::linkProgram(GLuint program) {\n  APILOG(\"glLinkProgram(%u) (program: %u)\\n\", program, program);\n  GLCALL(LinkProgram)(program);\n\n  // NOTE: Explicitly *not* checking for errors\n  // If there is an error, we want the client code to get error message and report\n  // to the user/logs, rather than assert here.\n  // @fb-only\n  // @fb-only\n  // @fb-only\n}\n\nvoid* IContext::mapBuffer(GLenum target, GLenum access) {\n  if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::MapBufferExtReq)) {\n    if (deviceFeatureSet_.hasExtension(Extensions::MapBuffer)) {\n      mapBufferProc_ = iglMapBufferOES;\n    }\n  } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::MapBuffer)) {\n    mapBufferProc_ = iglMapBuffer;\n  }\n  void* ret = nullptr;\n  GLCALL_PROC_WITH_RETURN(ret, mapBufferProc_, nullptr, target, access);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glMapBuffer(%s, %zu, %zu, %s) = %p (buffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         GL_ENUM_TO_STRING(access),\n         ret,\n         boundBuffer(target));\n  GLCHECK_ERRORS();\n  return ret;\n}\n\nvoid* IContext::mapBufferRange(GLenum target,\n                               GLintptr offset,\n                               GLsizeiptr length,\n                               GLbitfield access) {\n  if (mapBufferRangeProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::MapBufferRangeExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::MapBufferRange)) {\n        mapBufferRangeProc_ = iglMapBufferRangeEXT;\n      }\n    } else if (deviceFeatureSet_.hasFeature(DeviceFeatures::MapBufferRange)) {\n      mapBufferRangeProc_ = iglMapBufferRange;\n    }\n    IGL_DEBUG_ASSERT(mapBufferRangeProc_, \"No supported function for glMapBufferRange\\n\");\n  }\n  void* ret = nullptr;\n  GLCALL_PROC_WITH_RETURN(ret, mapBufferRangeProc_, nullptr, target, offset, length, access);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glMapBufferRange(%s, %zu, %zu, 0x%x [%s]) = %p (buffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         offset,\n         length,\n         access,\n         GL_MAP_BUFFER_RANGE_BITS_TO_STRING(access),\n         ret,\n         boundBuffer(target));\n  GLCHECK_ERRORS();\n  return ret;\n}\n\nvoid IContext::objectLabel(GLenum identifier, GLuint name, GLsizei length, const char* label) {\n  if (objectLabelProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::DebugLabelExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::Debug)) {\n        objectLabelProc_ = iglObjectLabelKHR;\n      } else if (deviceFeatureSet_.hasExtension(Extensions::DebugLabel)) {\n        objectLabelProc_ = iglLabelObjectEXT;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugLabel)) {\n      objectLabelProc_ = iglObjectLabel;\n    }\n    IGL_DEBUG_ASSERT(objectLabelProc_, \"No supported function for glObjectLabel\\n\");\n  }\n  APILOG(\"glObjectLabel(%s, %u, %u, %s) %s\\n\",\n         GL_ENUM_TO_STRING(identifier),\n         name,\n         length,\n         label,\n         identifierLabel(identifier, name).c_str());\n  GLCALL_PROC(objectLabelProc_, identifier, name, length, label);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::pixelStorei(GLenum pname, GLint param) {\n  APILOG(\"glPixelStorei(%s, %d)\\n\", GL_ENUM_TO_STRING(pname), param);\n  GLCALL(PixelStorei)(pname, param);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::polygonOffsetClamp(GLfloat factor, GLfloat units, float clamp) {\n  const bool hasPolygonOffsetClamp = deviceFeatureSet_.hasExtension(Extensions::PolygonOffsetClamp);\n\n  if (!hasPolygonOffsetClamp) {\n    IGL_DEBUG_ASSERT(clamp == 0, \"PolygonOffsetClamp is not supported\\n\");\n  }\n\n  if (clamp == 0 || !hasPolygonOffsetClamp) {\n    APILOG(\"glPolygonOffset(%f, %f)\\n\", factor, units);\n    GLCALL(PolygonOffset)(factor, units);\n  } else {\n    APILOG(\"glPolygonOffsetClamp(%f, %f, %f)\\n\", factor, units, clamp);\n    IGLCALL(PolygonOffsetClamp)(factor, units, clamp);\n  }\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::pushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar* message) {\n  if (pushDebugGroupProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugMessage)) {\n      if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::DebugMessageExtReq)) {\n        if (deviceFeatureSet_.hasExtension(Extensions::Debug)) {\n          pushDebugGroupProc_ = iglPushDebugGroupKHR;\n          getIntegerv(GL_MAX_DEBUG_GROUP_STACK_DEPTH, &maxDebugStackSize_);\n        } else if (deviceFeatureSet_.hasExtension(Extensions::DebugMarker)) {\n          pushDebugGroupProc_ = iglPushGroupMarkerEXT;\n          // GL_EXT_debug_marker does not provide a way to query the max\n          maxDebugStackSize_ = std::numeric_limits<int>::max();\n        }\n      } else {\n        pushDebugGroupProc_ = iglPushDebugGroup;\n        getIntegerv(GL_MAX_DEBUG_GROUP_STACK_DEPTH, &maxDebugStackSize_);\n      }\n    }\n    IGL_DEBUG_ASSERT(pushDebugGroupProc_, \"No supported function for glPushDebugGroup\\n\");\n  }\n\n  if (++debugStackSize_ < maxDebugStackSize_) {\n    APILOG(\"glPushDebugGroup(%s, %u, %u, %s)\\n\", GL_ENUM_TO_STRING(source), id, length, message);\n    GLCALL_PROC(pushDebugGroupProc_, source, id, length, message);\n    GLCHECK_ERRORS();\n  } else {\n    IGL_LOG_ERROR_ONCE(\"Exceeded max debug group stack size of %d, ignoring push\\n\",\n                       maxDebugStackSize_);\n  }\n}\n\nvoid IContext::popDebugGroup() {\n  if (popDebugGroupProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugMessage)) {\n      if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::DebugMessageExtReq)) {\n        if (deviceFeatureSet_.hasExtension(Extensions::Debug)) {\n          popDebugGroupProc_ = iglPopDebugGroupKHR;\n        } else if (deviceFeatureSet_.hasExtension(Extensions::DebugMarker)) {\n          popDebugGroupProc_ = iglPopGroupMarkerEXT;\n        }\n      } else {\n        popDebugGroupProc_ = iglPopDebugGroup;\n      }\n    }\n    IGL_DEBUG_ASSERT(popDebugGroupProc_, \"No supported function for glPopDebugGroup\\n\");\n  }\n\n  if (debugStackSize_ < maxDebugStackSize_ && maxDebugStackSize_ > 0) {\n    --debugStackSize_;\n    APILOG(\"glPopDebugGroup()\\n\");\n    GLCALL_PROC(popDebugGroupProc_);\n    GLCHECK_ERRORS();\n  } else if (debugStackSize_ >= maxDebugStackSize_) {\n    --debugStackSize_;\n    IGL_LOG_ERROR_ONCE(\"Debug group stack size was exceeded, ignoring pop\\n\");\n  } else if (maxDebugStackSize_ == 0) {\n    IGL_LOG_ERROR_ONCE(\"Debug group stack is empty, can't pop\\n\");\n  }\n}\n\nvoid IContext::readPixels(GLint x,\n                          GLint y,\n                          GLsizei width,\n                          GLsizei height,\n                          GLenum format,\n                          GLenum type,\n                          GLvoid* pixels) {\n  APILOG(\"glReadPixels(%d, %u, %u, %d, %s, %s, %p) (buffer: %u) (%s: %u)\\n\",\n         x,\n         y,\n         width,\n         height,\n         GL_ENUM_TO_STRING(format),\n         GL_ENUM_TO_STRING(type),\n         pixels,\n         boundBuffer(GL_PIXEL_PACK_BUFFER),\n         framebufferReadBufferType(GL_READ_FRAMEBUFFER),\n         framebufferReadBuffer(GL_READ_FRAMEBUFFER));\n  GLCALL(ReadPixels)(x, y, width, height, format, type, pixels);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::renderbufferStorage(GLenum target,\n                                   GLenum internalformat,\n                                   GLsizei width,\n                                   GLsizei height) {\n  APILOG(\"glRenderbufferStorage(%s, %s, %u, %u) (renderbuffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         GL_ENUM_TO_STRING(internalformat),\n         width,\n         height,\n         boundRenderbuffer_);\n  IGLCALL(RenderbufferStorage)(target, internalformat, width, height);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::renderbufferStorageMultisample(GLenum target,\n                                              GLsizei samples,\n                                              GLenum internalformat,\n                                              GLsizei width,\n                                              GLsizei height) {\n  if (renderbufferStorageMultisampleProc_ == nullptr) {\n    // Use runtime checks to determine which of several potential methods are supported by the\n    // context.\n    if (deviceFeatureSet_.hasFeature(DeviceFeatures::MultiSample)) {\n      if (!deviceFeatureSet_.hasInternalRequirement(InternalRequirement::MultiSampleExtReq)) {\n        renderbufferStorageMultisampleProc_ = iglRenderbufferStorageMultisample;\n      } else if (deviceFeatureSet_.hasExtension(Extensions::MultiSampleExt)) {\n        renderbufferStorageMultisampleProc_ = iglRenderbufferStorageMultisampleEXT;\n      } else if (deviceFeatureSet_.hasExtension(Extensions::MultiSampleImg)) {\n        renderbufferStorageMultisampleProc_ = iglRenderbufferStorageMultisampleIMG;\n      } else if (deviceFeatureSet_.hasExtension(Extensions::MultiSampleApple)) {\n        renderbufferStorageMultisampleProc_ = iglRenderbufferStorageMultisampleAPPLE;\n      }\n    }\n    IGL_DEBUG_ASSERT(renderbufferStorageMultisampleProc_,\n                     \"No supported function for glRenderbufferStorageMultisampleProc\\n\");\n  }\n\n  APILOG(\"glRenderbufferStorageMultisampleProc(%s, %u, %s, %u, %u) (renderbuffer: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         samples,\n         GL_ENUM_TO_STRING(internalformat),\n         width,\n         height,\n         boundRenderbuffer_);\n  GLCALL_PROC(renderbufferStorageMultisampleProc_, target, samples, internalformat, width, height);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::framebufferTextureMultiview(GLenum target,\n                                           GLenum attachment,\n                                           GLuint texture,\n                                           GLint level,\n                                           GLint baseViewIndex,\n                                           GLsizei numViews) {\n#if IGL_API_LOG\n  const char* unboundAttachmentType = framebufferAttachmentType(target, attachment);\n  GLuint unboundAttachment = framebufferAttachment(target, attachment);\n  setFramebufferAttachment(target, attachment, false, texture);\n#endif\n  APILOG(\n      \"glFramebufferTextureMultiviewOVR(%s, %s, %u, %d, %d, %u) (framebuffer: %u) unbound (%s: %u) \"\n      \"bound (texture: %u)\\n\",\n      GL_ENUM_TO_STRING(target),\n      GL_ENUM_TO_STRING(attachment),\n      texture,\n      level,\n      baseViewIndex,\n      numViews,\n      boundFramebuffer(target),\n      unboundAttachmentType,\n      unboundAttachment,\n      texture);\n  IGLCALL(FramebufferTextureMultiviewOVR)\n  (target, attachment, texture, level, baseViewIndex, numViews);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::framebufferTextureMultisampleMultiview(GLenum target,\n                                                      GLenum attachment,\n                                                      GLuint texture,\n                                                      GLint level,\n                                                      GLsizei samples,\n                                                      GLint baseViewIndex,\n                                                      GLsizei numViews) {\n#if IGL_API_LOG\n  const char* unboundAttachmentType = framebufferAttachmentType(target, attachment);\n  GLuint unboundAttachment = framebufferAttachment(target, attachment);\n  setFramebufferAttachment(target, attachment, false, texture);\n#endif\n  APILOG(\n      \"glFramebufferTextureMultisampleMultiview(%s, %s, %u, %d, %u, %d, %u) (framebuffer: %u) \"\n      \"unbound (%s: %u) bound (texture: %u)\\n\",\n      GL_ENUM_TO_STRING(target),\n      GL_ENUM_TO_STRING(attachment),\n      texture,\n      level,\n      samples,\n      baseViewIndex,\n      numViews,\n      boundFramebuffer(target),\n      unboundAttachmentType,\n      unboundAttachment,\n      texture);\n  IGLCALL(FramebufferTextureMultisampleMultiviewOVR)\n  (target, attachment, texture, level, samples, baseViewIndex, numViews);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::scissor(GLint x, GLint y, GLsizei width, GLsizei height) {\n  APILOG(\"glScissor(%d, %d, %u, %u)\\n\", x, y, width, height);\n  GLCALL(Scissor)(x, y, width, height);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::setEnabled(bool shouldEnable, GLenum cap) {\n  if (shouldEnable) {\n    APILOG(\"glEnable(%s)\\n\", GL_ENUM_TO_STRING(cap));\n    GLCALL(Enable)(cap);\n  } else {\n    APILOG(\"glDisable(%s)\\n\", GL_ENUM_TO_STRING(cap));\n    GLCALL(Disable)(cap);\n  }\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::shaderSource(GLuint shader,\n                            GLsizei count,\n                            const GLchar** string,\n                            const GLint* length) {\n  APILOG(\"glShaderSource(%d, %u, %p, %p)\\n\", shader, count, string, length);\n  APILOG_SOURCE(count, string, length);\n  GLCALL(ShaderSource)(shader, count, string, length);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask) {\n  APILOG(\"glStencilFuncSeparate(%s, %s, %d, 0x%x)\\n\",\n         GL_ENUM_TO_STRING(face),\n         GL_ENUM_TO_STRING(func),\n         ref,\n         mask);\n  GLCALL(StencilFuncSeparate)(face, func, ref, mask);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::stencilMask(GLuint mask) {\n  APILOG(\"glStencilMask(0x%x)\\n\", mask);\n  GLCALL(StencilMask)(mask);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::stencilMaskSeparate(GLenum face, GLuint mask) {\n  APILOG(\"glStencilMaskSeparate(%s, 0x%x)\\n\", GL_ENUM_TO_STRING(face), mask);\n  GLCALL(StencilMaskSeparate)(face, mask);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass) {\n  APILOG(\"glStencilOpSeparate(%s, %s, %s, %s)\\n\",\n         GL_ENUM_TO_STRING(face),\n         GL_ENUM_TO_STRING(fail),\n         GL_ENUM_TO_STRING(zfail),\n         GL_ENUM_TO_STRING(zpass));\n  GLCALL(StencilOpSeparate)(face, fail, zfail, zpass);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::texImage2D(GLenum target,\n                          GLint level,\n                          GLint internalformat,\n                          GLsizei width,\n                          GLsizei height,\n                          GLint border,\n                          GLenum format,\n                          GLenum type,\n                          const GLvoid* data) {\n  APILOG(\"glTexImage2D(%s, %d, %s, %u, %u, %d, %s, %s, 0x%x) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         level,\n         GL_ENUM_TO_STRING(internalformat),\n         width,\n         height,\n         border,\n         GL_ENUM_TO_STRING(format),\n         GL_ENUM_TO_STRING(type),\n         data,\n         boundTexture(target));\n  GLCALL(TexImage2D)(target, level, internalformat, width, height, border, format, type, data);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::texStorage2D(GLenum target,\n                            GLsizei levels,\n                            GLenum internalformat,\n                            GLsizei width,\n                            GLsizei height) {\n  if (texStorage2DProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::TexStorageExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::TexStorage)) {\n        texStorage2DProc_ = iglTexStorage2DEXT;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::TexStorage)) {\n      texStorage2DProc_ = iglTexStorage2D;\n    }\n    IGL_DEBUG_ASSERT(texStorage2DProc_, \"No supported function for glTexStorage2D\\n\");\n  }\n\n  APILOG(\"glTexStorage2D(%s, %u, %s, %u, %u) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         levels,\n         GL_ENUM_TO_STRING(internalformat),\n         width,\n         height,\n         boundTexture(target));\n  GLCALL_PROC(texStorage2DProc_, target, levels, internalformat, width, height);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::texStorage3D(GLenum target,\n                            GLsizei levels,\n                            GLenum internalformat,\n                            GLsizei width,\n                            GLsizei height,\n                            GLsizei depth) {\n  if (texStorage3DProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::TexStorageExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::TexStorage)) {\n        texStorage3DProc_ = iglTexStorage3DEXT;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::TexStorage)) {\n      texStorage3DProc_ = iglTexStorage3D;\n    }\n    IGL_DEBUG_ASSERT(texStorage3DProc_, \"No supported function for glTexStorage3D\\n\");\n  }\n  APILOG(\"glTexStorage3D(%s, %u, %s, %u, %u, %u) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         levels,\n         GL_ENUM_TO_STRING(internalformat),\n         width,\n         height,\n         depth,\n         boundTexture(target));\n  GLCALL_PROC(texStorage3DProc_, target, levels, internalformat, width, height, depth);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::texStorageMem2D(GLenum target,\n                               GLsizei levels,\n                               GLenum internalFormat,\n                               GLsizei width,\n                               GLsizei height,\n                               GLuint memory,\n                               GLuint64 offset) {\n  APILOG(\"glTexStorageMem2DEXT(%s, %u, %s, %u, %u, %u, %lu) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         levels,\n         GL_ENUM_TO_STRING(internalFormat),\n         width,\n         height,\n         memory,\n         offset,\n         boundTexture(target));\n  IGLCALL(TexStorageMem2DEXT)(target, levels, internalFormat, width, height, memory, offset);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::texStorageMem3D(GLenum target,\n                               GLsizei levels,\n                               GLenum internalFormat,\n                               GLsizei width,\n                               GLsizei height,\n                               GLsizei depth,\n                               GLuint memory,\n                               GLuint64 offset) {\n  APILOG(\"glTexStorageMem3DEXT(%s, %u, %s, %u, %u, %u, %u, %lu) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         levels,\n         GL_ENUM_TO_STRING(internalFormat),\n         width,\n         height,\n         depth,\n         memory,\n         offset,\n         boundTexture(target));\n  IGLCALL(TexStorageMem3DEXT)\n  (target, levels, internalFormat, width, height, depth, memory, offset);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::texImage3D(GLenum target,\n                          GLint level,\n                          GLint internalformat,\n                          GLsizei width,\n                          GLsizei height,\n                          GLsizei depth,\n                          GLint border,\n                          GLenum format,\n                          GLenum type,\n                          const GLvoid* data) {\n  if (texImage3DProc_ == nullptr) {\n    if (deviceFeatureSet_.hasFeature(DeviceFeatures::Texture3D)) {\n      if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::Texture3DExtReq)) {\n        if (deviceFeatureSet_.hasExtension(Extensions::Texture3D)) {\n          texImage3DProc_ = iglTexImage3DOES;\n        }\n      } else {\n        texImage3DProc_ = iglTexImage3D;\n      }\n    }\n    IGL_DEBUG_ASSERT(texImage3DProc_, \"No supported function for glTexImage3D\\n\");\n  }\n\n  APILOG(\"glTexImage3D(%s, %d, %s, %u, %u, %u, %d, %s, %s, 0x%x) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         level,\n         GL_ENUM_TO_STRING(internalformat),\n         width,\n         height,\n         depth,\n         border,\n         GL_ENUM_TO_STRING(format),\n         GL_ENUM_TO_STRING(type),\n         data,\n         boundTexture(target));\n  GLCALL_PROC(texImage3DProc_,\n              target,\n              level,\n              internalformat,\n              width,\n              height,\n              depth,\n              border,\n              format,\n              type,\n              data);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::texParameteri(GLenum target, GLenum pname, GLint param) {\n  // GLCALL(TexParameteri, target, pname, param);\n  APILOG(\"glTexParameteri(%s, %s, %s) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         GL_ENUM_TO_STRING(pname),\n         GL_ENUM_TO_STRING(param),\n         boundTexture(target));\n  GLCALL(TexParameteri)(target, pname, param);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::texSubImage2D(GLenum target,\n                             GLint level,\n                             GLint xoffset,\n                             GLint yoffset,\n                             GLsizei width,\n                             GLsizei height,\n                             GLenum format,\n                             GLenum type,\n                             const GLvoid* pixels) {\n  APILOG(\"glTexSubImage2D(%s, %d, %d, %d, %u, %u, %s, %s, %p) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         level,\n         xoffset,\n         yoffset,\n         width,\n         height,\n         GL_ENUM_TO_STRING(format),\n         GL_ENUM_TO_STRING(type),\n         pixels,\n         boundTexture(target));\n  GLCALL(TexSubImage2D)(target, level, xoffset, yoffset, width, height, format, type, pixels);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::texSubImage3D(GLenum target,\n                             GLint level,\n                             GLint xoffset,\n                             GLint yoffset,\n                             GLint zoffset,\n                             GLsizei width,\n                             GLsizei height,\n                             GLsizei depth,\n                             GLenum format,\n                             GLenum type,\n                             const GLvoid* pixels) {\n  if (texSubImage3DProc_ == nullptr) {\n    if (deviceFeatureSet_.hasFeature(DeviceFeatures::Texture3D)) {\n      if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::Texture3DExtReq)) {\n        if (deviceFeatureSet_.hasExtension(Extensions::Texture3D)) {\n          texSubImage3DProc_ = iglTexSubImage3DOES;\n        }\n      } else {\n        texSubImage3DProc_ = iglTexSubImage3D;\n      }\n    }\n    IGL_DEBUG_ASSERT(texSubImage3DProc_, \"No supported function for glTexSubImage3D\\n\");\n  }\n\n  APILOG(\"glTexSubImage3D(%s, %d, %d, %d, %d, %u, %u, %u, %s, %s, %p) (texture: %u)\\n\",\n         GL_ENUM_TO_STRING(target),\n         level,\n         xoffset,\n         yoffset,\n         zoffset,\n         width,\n         height,\n         depth,\n         GL_ENUM_TO_STRING(format),\n         GL_ENUM_TO_STRING(type),\n         pixels,\n         boundTexture(target));\n  GLCALL_PROC(texSubImage3DProc_,\n              target,\n              level,\n              xoffset,\n              yoffset,\n              zoffset,\n              width,\n              height,\n              depth,\n              format,\n              type,\n              pixels);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform1f(GLint location, GLfloat x) {\n  APILOG(\"glUniform1f(%d, %f) (program: %u) (uniform: %s)\\n\",\n         location,\n         x,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform1f)(location, x);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform1fv(GLint location, GLsizei count, const GLfloat* v) {\n  APILOG(\"glUniform1fv(%d, %u, %p [%f]) (program: %u) (uniform: %s)\\n\",\n         location,\n         count,\n         v,\n         v == nullptr ? 0.f : *v,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform1fv)(location, count, v);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform1i(GLint location, GLint x) {\n  APILOG(\"glUniform1i(%d, %d) (program: %u) (uniform: %s) %s\\n\",\n         location,\n         x,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str(),\n         boundUniformTexture(boundProgram_, location, x).c_str());\n  GLCALL(Uniform1i)(location, x);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform1iv(GLint location, GLsizei count, const GLint* v) {\n  APILOG(\"glUniform1iv(%d, %u, %p [%d]) (program: %u) (uniform: %s)\\n\",\n         location,\n         count,\n         v,\n         v == nullptr ? 0 : *v,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform1iv)(location, count, v);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform2f(GLint location, GLfloat x, GLfloat y) {\n  APILOG(\"glUniform2f(%d, %f, %f) (program: %u) (uniform: %s)\\n\",\n         location,\n         x,\n         y,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform2f)(location, x, y);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform2fv(GLint location, GLsizei count, const GLfloat* v) {\n  APILOG(\"glUniform2fv(%d, %u, %p [%f %f]) (program: %u) (uniform: %s)\\n\",\n         location,\n         count,\n         v,\n         v == nullptr ? 0.f : v[0],\n         v == nullptr ? 0.f : v[1],\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform2fv)(location, count, v);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform2i(GLint location, GLint x, GLint y) {\n  APILOG(\"glUniform2i(%d, %d, %d) (program: %u) (uniform: %s)\\n\",\n         location,\n         x,\n         y,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform2i)(location, x, y);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform2iv(GLint location, GLsizei count, const GLint* v) {\n  APILOG(\"glUniform2iv(%d, %u, %p [%d %d]) (program: %u) (uniform: %s)\\n\",\n         location,\n         count,\n         v,\n         v == nullptr ? 0 : v[0],\n         v == nullptr ? 0 : v[1],\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform2iv)(location, count, v);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z) {\n  APILOG(\"glUniform3f(%d, %f, %f, %f) (program: %u) (uniform: %s)\\n\",\n         location,\n         x,\n         y,\n         z,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform3f)(location, x, y, z);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform3fv(GLint location, GLsizei count, const GLfloat* v) {\n  APILOG(\"glUniform3fv(%d, %u, %p [%f %f %f]) (program: %u) (uniform: %s)\\n\",\n         location,\n         count,\n         v,\n         v == nullptr ? 0.f : v[0],\n         v == nullptr ? 0.f : v[1],\n         v == nullptr ? 0.f : v[2],\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform3fv)(location, count, v);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform3i(GLint location, GLint x, GLint y, GLint z) {\n  APILOG(\"glUniform3i(%d, %d, %d, %d) (program: %u) (uniform: %s)\\n\",\n         location,\n         x,\n         y,\n         z,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform3i)(location, x, y, z);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform3iv(GLint location, GLsizei count, const GLint* v) {\n  APILOG(\"glUniform3fv(%d, %u, %p [%d %d %d]) (program: %u) (uniform: %s)\\n\",\n         location,\n         count,\n         v,\n         v == nullptr ? 0 : v[0],\n         v == nullptr ? 0 : v[1],\n         v == nullptr ? 0 : v[2],\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform3iv)(location, count, v);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) {\n  APILOG(\"glUniform4f(%d, %f, %f, %f, %f) (program: %u) (uniform: %s)\\n\",\n         location,\n         x,\n         y,\n         z,\n         w,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform4f)(location, x, y, z, w);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform4fv(GLint location, GLsizei count, const GLfloat* v) {\n  APILOG(\"glUniform4fv(%d, %u, %p [%f %f %f %f]) (program: %u) (uniform: %s)\\n\",\n         location,\n         count,\n         v,\n         v == nullptr ? 0.f : v[0],\n         v == nullptr ? 0.f : v[1],\n         v == nullptr ? 0.f : v[2],\n         v == nullptr ? 0.f : v[3],\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform4fv)(location, count, v);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w) {\n  APILOG(\"glUniform4i(%d, %d, %d, %d, %d) (program: %u) (uniform: %s)\\n\",\n         location,\n         x,\n         y,\n         z,\n         w,\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform4i)(location, x, y, z, w);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniform4iv(GLint location, GLsizei count, const GLint* v) {\n  APILOG(\"glUniform4iv(%d, %u, %p [%d %d %d %d]) (program: %u) (uniform: %s)\\n\",\n         location,\n         count,\n         v,\n         v == nullptr ? 0 : v[0],\n         v == nullptr ? 0 : v[1],\n         v == nullptr ? 0 : v[2],\n         v == nullptr ? 0 : v[3],\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(Uniform4iv)(location, count, v);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniformBlockBinding(GLuint program,\n                                   GLuint uniformBlockIndex,\n                                   GLuint uniformBlockBinding) {\n  APILOG(\"glUniformBlockBinding(%u, %u, %u) (program: %u)\\n\",\n         program,\n         uniformBlockIndex,\n         uniformBlockBinding,\n         program);\n  IGLCALL(UniformBlockBinding)(program, uniformBlockIndex, uniformBlockBinding);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniformMatrix2fv(GLint location,\n                                GLsizei count,\n                                GLboolean transpose,\n                                const GLfloat* value) {\n  APILOG(\"glUniformMatrix2fv(%d, %u, %s, %p [[%f %f] [%f %f]]) (program: %u) (uniform: %s)\\n\",\n         location,\n         count,\n         GL_BOOL_TO_STRING(transpose),\n         value,\n         value == nullptr ? 0.f : value[0],\n         value == nullptr ? 0.f : value[1],\n         value == nullptr ? 0.f : value[2],\n         value == nullptr ? 0.f : value[3],\n         boundProgram_,\n         programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(UniformMatrix2fv)(location, count, transpose, value);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniformMatrix3fv(GLint location,\n                                GLsizei count,\n                                GLboolean transpose,\n                                const GLfloat* value) {\n  APILOG(\n      \"glUniformMatrix3fv(%d, %u, %s, %p [[%f %f %f] [%f %f %f] [%f %f %f]]) (program: %u) \"\n      \"(uniform: %s)\\n\",\n      location,\n      count,\n      GL_BOOL_TO_STRING(transpose),\n      value,\n      value == nullptr ? 0.f : value[0],\n      value == nullptr ? 0.f : value[1],\n      value == nullptr ? 0.f : value[2],\n      value == nullptr ? 0.f : value[3],\n      value == nullptr ? 0.f : value[4],\n      value == nullptr ? 0.f : value[5],\n      value == nullptr ? 0.f : value[6],\n      value == nullptr ? 0.f : value[7],\n      value == nullptr ? 0.f : value[8],\n      boundProgram_,\n      programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(UniformMatrix3fv)(location, count, transpose, value);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::uniformMatrix4fv(GLint location,\n                                GLsizei count,\n                                GLboolean transpose,\n                                const GLfloat* value) {\n  APILOG(\n      \"glUniformMatrix4fv(%d, %u, %s, %p [[%f %f %f %f] [%f %f %f %f] [%f %f %f %f] [%f %f %f \"\n      \"%f]]) (program: %u) (uniform: %s)\\n\",\n      location,\n      count,\n      GL_BOOL_TO_STRING(transpose),\n      value,\n      value == nullptr ? 0.f : value[0],\n      value == nullptr ? 0.f : value[1],\n      value == nullptr ? 0.f : value[2],\n      value == nullptr ? 0.f : value[3],\n      value == nullptr ? 0.f : value[4],\n      value == nullptr ? 0.f : value[5],\n      value == nullptr ? 0.f : value[6],\n      value == nullptr ? 0.f : value[7],\n      value == nullptr ? 0.f : value[8],\n      value == nullptr ? 0.f : value[9],\n      value == nullptr ? 0.f : value[10],\n      value == nullptr ? 0.f : value[11],\n      value == nullptr ? 0.f : value[12],\n      value == nullptr ? 0.f : value[13],\n      value == nullptr ? 0.f : value[14],\n      value == nullptr ? 0.f : value[15],\n      boundProgram_,\n      programUniformsByLocation_[boundProgram_][location].c_str());\n  GLCALL(UniformMatrix4fv)(location, count, transpose, value);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::unmapBuffer(GLenum target) {\n  if (unmapBufferProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::UnmapBufferExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::MapBuffer) ||\n          deviceFeatureSet_.hasExtension(Extensions::MapBufferRange)) {\n        unmapBufferProc_ = iglUnmapBufferOES;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::UnmapBuffer)) {\n      unmapBufferProc_ = iglUnmapBuffer;\n    }\n    IGL_DEBUG_ASSERT(unmapBufferProc_, \"No supported function for glUnmapBuffer\\n\");\n  }\n  APILOG(\"glUnmapBuffer(%s) (buffer: %u)\\n\", GL_ENUM_TO_STRING(target), boundBuffer(target));\n  GLCALL_PROC(unmapBufferProc_, target);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::useProgram(GLuint program) {\n#if IGL_API_LOG\n  GLuint unboundProgram = boundProgram_;\n  boundProgram_ = program;\n#endif\n  APILOG(\"glUseProgram(%u) unbound (program: %u) bound (program: %u)\\n\",\n         program,\n         unboundProgram,\n         program);\n  GLCALL(UseProgram)(program);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::validateProgram(GLuint program) {\n  APILOG(\"glValidateProgram(%u) (program:  %u)\\n\", program, program);\n  GLCALL(ValidateProgram)(program);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::viewport(GLint x, GLint y, GLsizei width, GLsizei height) {\n  APILOG(\"glViewport(%d, %d, %u, %u)\\n\", x, y, width, height);\n  GLCALL(Viewport)(x, y, width, height);\n  GLCHECK_ERRORS();\n}\n\nGLuint64 IContext::getTextureHandle(GLuint texture) {\n  if (getTextureHandleProc_ == nullptr) {\n    if (deviceFeatureSet_.hasExtension(Extensions::BindlessTextureArb)) {\n      getTextureHandleProc_ = iglGetTextureHandleARB;\n    } else if (deviceFeatureSet_.hasExtension(Extensions::BindlessTextureNv)) {\n      getTextureHandleProc_ = iglGetTextureHandleNV;\n    }\n    IGL_DEBUG_ASSERT(getTextureHandleProc_, \"No supported function for glGetTextureHandle\\n\");\n  }\n\n  GLuint64 ret = 0;\n  GLCALL_PROC_WITH_RETURN(ret, getTextureHandleProc_, GL_ZERO, texture);\n  // NOTE: Must log after call due to return value\n  APILOG(\"glGetTextureHandle(%u) = %llu (texture: %u)\\n\", texture, ret, texture);\n  GLCHECK_ERRORS();\n  return ret;\n}\n\nvoid IContext::makeTextureHandleResident(GLuint64 handle) {\n  if (makeTextureHandleResidentProc_ == nullptr) {\n    if (deviceFeatureSet_.hasExtension(Extensions::BindlessTextureArb)) {\n      makeTextureHandleResidentProc_ = iglMakeTextureHandleResidentARB;\n    } else if (deviceFeatureSet_.hasExtension(Extensions::BindlessTextureNv)) {\n      makeTextureHandleResidentProc_ = iglMakeTextureHandleResidentNV;\n    }\n    IGL_DEBUG_ASSERT(makeTextureHandleResidentProc_,\n                     \"No supported function for glMakeTextureHandleResidentARB\\n\");\n  }\n\n  APILOG(\"glMakeTextureHandleResidentARB(%p)\\n\", handle);\n  GLCALL_PROC(makeTextureHandleResidentProc_, handle);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::makeTextureHandleNonResident(GLuint64 handle) {\n  if (makeTextureHandleNonResidentProc_ == nullptr) {\n    if (deviceFeatureSet_.hasExtension(Extensions::BindlessTextureArb)) {\n      makeTextureHandleNonResidentProc_ = iglMakeTextureHandleNonResidentARB;\n    } else if (deviceFeatureSet_.hasExtension(Extensions::BindlessTextureNv)) {\n      makeTextureHandleNonResidentProc_ = iglMakeTextureHandleNonResidentNV;\n    }\n    IGL_DEBUG_ASSERT(makeTextureHandleNonResidentProc_,\n                     \"No supported function for glMakeTextureHandleNonResidentARB\\n\");\n  }\n\n  APILOG(\"glMakeTextureHandleNonResidentARB(%p)\\n\", handle);\n  GLCALL_PROC(makeTextureHandleNonResidentProc_, handle);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::dispatchCompute(GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ) {\n#if IGL_API_LOG\n  lastCommandWasCompute_ = true;\n#endif\n  APILOG(\"glDispatchCompute(%u, %u, %u) (program: %u) %s %s\\n\",\n         numGroupsX,\n         numGroupsY,\n         numGroupsZ,\n         boundProgram_,\n         boundImageTextures().c_str(),\n         boundBuffersByIndex().c_str());\n  IGLCALL(DispatchCompute)(numGroupsX, numGroupsY, numGroupsZ);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::memoryBarrier(GLbitfield barriers) {\n  if (memoryBarrierProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::ShaderImageLoadStoreExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::ShaderImageLoadStore)) {\n        memoryBarrierProc_ = iglMemoryBarrierEXT;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::ShaderImageLoadStore)) {\n      memoryBarrierProc_ = iglMemoryBarrier;\n    }\n    IGL_DEBUG_ASSERT(memoryBarrierProc_, \"No supported function for glMemoryBarrier\\n\");\n  }\n  APILOG(\"glMemoryBarrier(0x%x [%s]) %s\\n\",\n         barriers,\n         GL_MEMORY_BARRIER_BITS_TO_STRING(barriers),\n         affectedMemoryBarrierObjects(barriers).c_str());\n  GLCALL_PROC(memoryBarrierProc_, barriers);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::vertexAttribPointer(GLuint index,\n                                   GLint size,\n                                   GLenum type,\n                                   GLboolean normalized,\n                                   GLsizei stride,\n                                   const GLvoid* ptr) {\n#if IGL_API_LOG\n  GLuint unboundBuffer = 0;\n  if (index < boundAttributes_.size()) {\n    unboundBuffer = boundAttributes_[index];\n    boundAttributes_[index] = ptr == nullptr ? boundBuffer(GL_ARRAY_BUFFER) : 0;\n  }\n#endif\n  APILOG(\"glVertexAttribPointer(%u, %d, %s, %s, %u, %p) unbound (buffer: %u) bound (buffer: %u)\\n\",\n         index,\n         size,\n         GL_ENUM_TO_STRING(type),\n         GL_BOOL_TO_STRING(normalized),\n         stride,\n         ptr,\n         unboundBuffer,\n         ptr == nullptr ? boundBuffer(GL_ARRAY_BUFFER) : 0);\n  GLCALL(VertexAttribPointer)(index, size, type, normalized, stride, ptr);\n  GLCHECK_ERRORS();\n}\n\nvoid IContext::vertexAttribDivisor(GLuint index, GLuint divisor) {\n  if (vertexAttribDivisorProc_ == nullptr) {\n    if (deviceFeatureSet_.hasInternalRequirement(InternalRequirement::VertexAttribDivisorExtReq)) {\n      if (deviceFeatureSet_.hasExtension(Extensions::VertexAttribDivisor)) {\n        vertexAttribDivisorProc_ = iglVertexAttribDivisorNV;\n      }\n    } else if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::VertexAttribDivisor)) {\n      vertexAttribDivisorProc_ = iglVertexAttribDivisor;\n    }\n    IGL_DEBUG_ASSERT(vertexAttribDivisorProc_, \"No supported function for glVertexAttribDivisor\\n\");\n  }\n\n  APILOG(\"glVertexAttribDivisor(%u, %u) (buffer: %u)\\n\",\n         index,\n         divisor,\n         index < boundAttributes_.size() ? boundAttributes_[index] : 0);\n  GLCALL_PROC(vertexAttribDivisorProc_, index, divisor);\n  GLCHECK_ERRORS();\n}\n\nResult IContext::getLastError() const {\n  return GL_ERROR_TO_RESULT(lastError_);\n}\n\nGLenum IContext::checkForErrors(IGL_MAYBE_UNUSED const char* callerName,\n                                IGL_MAYBE_UNUSED size_t lineNum) const {\n  lastError_ = getError();\n#if IGL_DEBUG && !IGL_API_LOG\n  static bool gettingMessageLog = false; // Used to avoid recursive entry\n  if (lastError_ != GL_NO_ERROR && !gettingMessageLog &&\n      deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugMessageCallback)) {\n    GLint numMessages = 0;\n    getIntegerv(GL_DEBUG_LOGGED_MESSAGES, &numMessages);\n    for (GLint i = 0; i < numMessages; ++i) {\n      GLint messageLength = 0;\n      getIntegerv(GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH, &messageLength);\n      std::vector<GLchar> messageBuffer(messageLength);\n      GLenum source = 0, type = 0, severity = 0;\n      GLuint id = 0;\n      GLsizei length = 0;\n      gettingMessageLog = true;\n      IGL_SCOPE_EXIT {\n        gettingMessageLog = false;\n      };\n      const GLuint count = getDebugMessageLog(\n          1, messageLength, &source, &type, &id, &severity, &length, messageBuffer.data());\n\n      if (IGL_DEBUG_VERIFY(count == 1)) {\n        logDebugMessage(source, type, id, severity, length, messageBuffer.data());\n      }\n    }\n  }\n#endif //  IGL_DEBUG && !IGL_API_LOG\n\n  GL_ASSERT_ERROR(lastError_ == GL_NO_ERROR, callerName, lineNum, lastError_);\n\n  return lastError_;\n}\n\n// This function has no effect in release mode because the current thinking\n// is there will be no need to call glGetError() after each GL call\nvoid IContext::enableAutomaticErrorCheck(bool enable) {\n#if IGL_DEBUG\n  alwaysCheckError_ = enable;\n#endif\n}\n\n/** Returns current `callCounter_` value. Exposed for testing only. */\nunsigned int IContext::getCallCount() const {\n  return callCounter_;\n}\n\nunsigned int IContext::getCurrentDrawCount() const {\n  return drawCallCount_;\n}\n\nunsigned int IContext::getShaderCompilationCount() const {\n  return shaderCompilationCount_;\n}\n\nvoid IContext::resetCounters() {\n  callCounter_ = 0;\n}\n\nbool IContext::addRef() {\n  const bool ret = isLikelyValidObject();\n  if (ret) {\n    ++refCount_;\n  }\n  return ret;\n}\n\nbool IContext::releaseRef() {\n  const bool ret = isLikelyValidObject();\n  if (ret) {\n    --refCount_;\n  }\n  return ret;\n}\n\nUnbindPolicy IContext::getUnbindPolicy() const {\n  return unbindPolicy_;\n}\n\nvoid IContext::setUnbindPolicy(UnbindPolicy newValue) {\n  unbindPolicy_ = newValue;\n}\n\nvoid IContext::initialize(Result* result) {\n  setCurrent();\n  if (!isCurrentContext()) {\n    Result::setResult(result, Result::Code::ArgumentInvalid, \"Invalid context, setCurrent failed.\");\n    return;\n  }\n\n  GLVersion glVersion = GLVersion::NotAvailable;\n\n  const char* version = (char*)getString(GL_VERSION);\n  if (version == nullptr) {\n    IGL_LOG_ERROR(\"Unable to get GL version string\\n\");\n    Result::setResult(result, Result::Code::RuntimeError, \"Unable to get GL version string\\n\");\n    glVersion = DeviceFeatureSet::usesOpenGLES() ? GLVersion::v2_0_ES : GLVersion::v2_0;\n  } else {\n    glVersion = ::igl::opengl::getGLVersion(version);\n    if (glVersion == GLVersion::NotAvailable) {\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n      Result::setResult(result, Result::Code::RuntimeError, \"Unable to get GL version\\n\");\n    }\n  }\n  deviceFeatureSet_.initializeVersion(glVersion);\n\n  std::string extensions;\n  std::unordered_set<std::string> supportedExtensions;\n  if (!deviceFeatureSet_.hasInternalFeature(InternalFeatures::GetStringi)) {\n    const GLubyte* extensionStr = getString(GL_EXTENSIONS);\n\n    // If setCurrent() fails, then extensions may be nullptr.\n    if (extensionStr) {\n      extensions = std::string((char*)extensionStr);\n    }\n  } else {\n    GLint n = 0;\n    getIntegerv(GL_NUM_EXTENSIONS, &n);\n    if (IGL_DEBUG_VERIFY(n >= 0)) {\n      for (GLuint i = 0; i < static_cast<GLuint>(n); i++) {\n        const auto* ext = reinterpret_cast<const char*>(getStringi(GL_EXTENSIONS, i));\n        if (ext) {\n          supportedExtensions.insert(ext);\n        }\n      }\n    }\n  }\n\n#if IGL_LOGGING_ENABLED\n  IGL_LOG_INFO(\"GL Context Initialized: %p\\n\", this);\n  IGL_LOG_INFO(\"GL Version: %s\\n\", version);\n  const char* vendor = (char*)getString(GL_VENDOR);\n  IGL_LOG_INFO(\"GL Vendor: %s\\n\", (vendor != nullptr) ? vendor : \"(null)\");\n  const char* renderer = (char*)getString(GL_RENDERER);\n  IGL_LOG_INFO(\"GL Renderer: %s\\n\", (renderer != nullptr) ? renderer : \"(null)\");\n  if (!extensions.empty() || supportedExtensions.empty()) {\n    IGL_LOG_INFO(\"GL Extensions: %s\\n\", extensions.c_str());\n  } else {\n    std::vector<std::string> sortedExtensions(supportedExtensions.begin(),\n                                              supportedExtensions.end());\n    std::sort(sortedExtensions.begin(), sortedExtensions.end());\n    IGL_LOG_INFO(\"GL Extensions:\\n\");\n    for (const auto& extension : sortedExtensions) {\n      IGL_LOG_INFO(\"- %s\\n\", extension.c_str());\n    }\n  }\n#endif\n\n  deviceFeatureSet_.initializeExtensions(std::move(extensions), std::move(supportedExtensions));\n\n  if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::SeamlessCubeMap)) {\n    enable(GL_TEXTURE_CUBE_MAP_SEAMLESS);\n  }\n\n#if IGL_DEBUG || IGL_API_LOG\n  if (deviceFeatureSet_.hasInternalFeature(InternalFeatures::DebugMessageCallback)) {\n    enable(GL_DEBUG_OUTPUT);\n#if IGL_API_LOG\n    debugMessageCallback(logOpenGlDebugMessage, nullptr);\n#endif // IGL_API_LOG\n  }\n#endif // IGL_DEBUG || IGL_API_LOG\n\n#if defined(IGL_WITH_TRACY_GPU)\n  [[maybe_unused]] constexpr std::string_view kTracyContextName = \"IGL OpenGL\";\n  TracyGpuContext;\n  TracyGpuContextName(kTracyContextName.data(), kTracyContextName.size());\n#endif\n}\n\nconst DeviceFeatureSet& IContext::deviceFeatures() const {\n  return deviceFeatureSet_;\n}\n\nvoid IContext::apiLogNextNDraws(const unsigned int n) {\n  apiLogDrawsLeft_ = n;\n}\n\nvoid IContext::apiLogStart() {\n  apiLogEnabled_ = true;\n}\n\nvoid IContext::apiLogEnd() {\n  apiLogEnabled_ = false;\n}\n\nvoid IContext::setShouldValidateShaders(bool shouldValidateShaders) {\n  shouldValidateShaders_ = shouldValidateShaders;\n}\n\nbool IContext::shouldValidateShaders() const {\n  return shouldValidateShaders_;\n}\n\nvoid IContext::SynchronizedDeletionQueues::flushDeletionQueue(IContext& context) {\n  if (IGL_DEBUG_VERIFY(context.isCurrentContext() || context.isCurrentSharegroup())) {\n    swapScratchDeletionQueues();\n\n    if (!scratchBuffersQueue_.empty()) {\n      context.deleteBuffers(static_cast<GLsizei>(scratchBuffersQueue_.size()),\n                            scratchBuffersQueue_.data());\n      scratchBuffersQueue_.clear();\n    }\n\n    for (auto i : scratchUnbindBuffersQueue_) {\n      context.bindBuffer(i, 0);\n    }\n    scratchUnbindBuffersQueue_.clear();\n\n    if (!scratchFramebuffersQueue_.empty()) {\n      context.deleteFramebuffers(static_cast<GLsizei>(scratchFramebuffersQueue_.size()),\n                                 scratchFramebuffersQueue_.data());\n      scratchFramebuffersQueue_.clear();\n    }\n\n    if (!scratchRenderbuffersQueue_.empty()) {\n      context.deleteRenderbuffers(static_cast<GLsizei>(scratchRenderbuffersQueue_.size()),\n                                  scratchRenderbuffersQueue_.data());\n      scratchRenderbuffersQueue_.clear();\n    }\n\n    if (!scratchVertexArraysQueue_.empty()) {\n      context.deleteVertexArrays(static_cast<GLsizei>(scratchVertexArraysQueue_.size()),\n                                 scratchVertexArraysQueue_.data());\n      scratchVertexArraysQueue_.clear();\n    }\n\n    for (auto i : scratchProgramQueue_) {\n      context.deleteProgram(i);\n    }\n    scratchProgramQueue_.clear();\n\n    for (auto i : scratchShaderQueue_) {\n      context.deleteShader(i);\n    }\n    scratchShaderQueue_.clear();\n\n    if (!scratchTexturesQueue_.empty()) {\n      context.deleteTextures(static_cast<GLsizei>(scratchTexturesQueue_.size()),\n                             scratchTexturesQueue_.data());\n      scratchTexturesQueue_.clear();\n    }\n  }\n}\n\nvoid IContext::SynchronizedDeletionQueues::swapScratchDeletionQueues() {\n  const std::lock_guard<std::mutex> guard(deletionQueueMutex_);\n\n  std::swap(scratchBuffersQueue_, buffersQueue_);\n  std::swap(scratchUnbindBuffersQueue_, unbindBuffersQueue_);\n  std::swap(scratchFramebuffersQueue_, framebuffersQueue_);\n  std::swap(scratchRenderbuffersQueue_, renderbuffersQueue_);\n  std::swap(scratchVertexArraysQueue_, vertexArraysQueue_);\n  std::swap(scratchProgramQueue_, programQueue_);\n  std::swap(scratchShaderQueue_, shaderQueue_);\n  std::swap(scratchTexturesQueue_, texturesQueue_);\n}\n\nvoid IContext::SynchronizedDeletionQueues::queueDeleteBuffers(GLsizei n, const GLuint* buffers) {\n  const std::lock_guard<std::mutex> guard(deletionQueueMutex_);\n  for (GLsizei i = 0; i < n; ++i) {\n    buffersQueue_.push_back(buffers[i]);\n  }\n}\n\nvoid IContext::SynchronizedDeletionQueues::queueUnbindBuffer(GLenum target) {\n  const std::lock_guard<std::mutex> guard(deletionQueueMutex_);\n  unbindBuffersQueue_.insert(target);\n}\n\nvoid IContext::SynchronizedDeletionQueues::queueDeleteFramebuffers(GLsizei n,\n                                                                   const GLuint* framebuffers) {\n  const std::lock_guard<std::mutex> guard(deletionQueueMutex_);\n  for (GLsizei i = 0; i < n; ++i) {\n    framebuffersQueue_.push_back(framebuffers[i]);\n  }\n}\n\nvoid IContext::SynchronizedDeletionQueues::queueDeleteRenderbuffers(GLsizei n,\n                                                                    const GLuint* renderbuffers) {\n  const std::lock_guard<std::mutex> guard(deletionQueueMutex_);\n  for (GLsizei i = 0; i < n; ++i) {\n    renderbuffersQueue_.push_back(renderbuffers[i]);\n  }\n}\n\nvoid IContext::SynchronizedDeletionQueues::queueDeleteVertexArrays(GLsizei n,\n                                                                   const GLuint* vertexArrays) {\n  const std::lock_guard<std::mutex> guard(deletionQueueMutex_);\n  for (GLsizei i = 0; i < n; ++i) {\n    vertexArraysQueue_.push_back(vertexArrays[i]);\n  }\n}\n\nvoid IContext::SynchronizedDeletionQueues::queueDeleteProgram(GLuint program) {\n  const std::lock_guard<std::mutex> guard(deletionQueueMutex_);\n  programQueue_.push_back(program);\n}\n\nvoid IContext::SynchronizedDeletionQueues::queueDeleteShader(GLuint shaderId) {\n  const std::lock_guard<std::mutex> guard(deletionQueueMutex_);\n  shaderQueue_.push_back(shaderId);\n}\n\nvoid IContext::SynchronizedDeletionQueues::queueDeleteTextures(GLsizei n, const GLuint* textures) {\n  const std::lock_guard<std::mutex> guard(deletionQueueMutex_);\n  for (GLsizei i = 0; i < n; ++i) {\n    texturesQueue_.push_back(textures[i]);\n  }\n}\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/IContext.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <atomic>\n#include <memory>\n#include <mutex>\n#include <unordered_map>\n#include <unordered_set>\n#include <vector>\n#include <igl/CommandEncoder.h>\n#include <igl/Common.h>\n#include <igl/PlatformDevice.h>\n#include <igl/opengl/ComputeCommandAdapter.h>\n#include <igl/opengl/Config.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/GLFunc.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/RenderCommandAdapter.h>\n#include <igl/opengl/UnbindPolicy.h>\n#include <igl/opengl/Version.h>\n#include <igl/opengl/WithContext.h>\n\nnamespace igl::opengl {\n\n///\n/// Represents an pure abstract class that encapsulates in it an OpenGL context.\n/// Individual types that implement this class are the ones that provide implementation\n/// for a concrete OpenGL API implementation.\n///\nclass IContext {\n public:\n  virtual void setCurrent() = 0;\n  virtual void clearCurrentContext() const = 0;\n  virtual bool isCurrentContext() const = 0;\n  virtual bool isCurrentSharegroup() const = 0;\n  virtual void present(std::shared_ptr<ITexture> surface) const = 0;\n\n  virtual std::unique_ptr<IContext> createShareContext(Result* IGL_NULLABLE outResult) = 0;\n\n  IContext();\n  virtual ~IContext();\n\n  void flushDeletionQueue();\n\n protected:\n  bool shouldQueueAPI() const;\n\n public:\n  ///--------------------------------------\n  /// MARK: - GL APIs\n  void activeTexture(GLenum texture);\n  void attachShader(GLuint program, GLuint shader);\n  void bindBuffer(GLenum target, GLuint buffer);\n  void bindBufferBase(GLenum target, GLuint index, GLuint buffer);\n  void bindBufferRange(GLenum target,\n                       GLuint index,\n                       GLuint buffer,\n                       GLintptr offset,\n                       GLsizeiptr size);\n  void bindFramebuffer(GLenum target, GLuint framebuffer);\n  void bindRenderbuffer(GLenum target, GLuint renderbuffer);\n  void bindTexture(GLenum target, GLuint texture);\n  void bindImageTexture(GLuint unit,\n                        GLuint texture,\n                        GLint level,\n                        GLboolean layered,\n                        GLint layer,\n                        GLenum access,\n                        GLenum format);\n  void bindVertexArray(GLuint vao);\n  void blendColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);\n  void blendEquation(GLenum mode);\n  void blendEquationSeparate(GLenum modeRGB, GLenum modeAlpha);\n  virtual void blendFunc(GLenum sfactor, GLenum dfactor);\n  void blendFuncSeparate(GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha);\n  void blitFramebuffer(GLint srcX0,\n                       GLint srcY0,\n                       GLint srcX1,\n                       GLint srcY1,\n                       GLint dstX0,\n                       GLint dstY0,\n                       GLint dstX1,\n                       GLint dstY1,\n                       GLbitfield mask,\n                       GLenum filter);\n  void bufferData(GLenum target, GLsizeiptr size, const GLvoid* IGL_NULLABLE data, GLenum usage);\n  void bufferSubData(GLenum target,\n                     GLintptr offset,\n                     GLsizeiptr size,\n                     const GLvoid* IGL_NULLABLE data);\n  virtual GLenum checkFramebufferStatus(GLenum target);\n  void clear(GLbitfield mask);\n  void clearBufferfv(GLenum buffer, GLint drawBuffer, const GLfloat* IGL_NULLABLE value);\n  void clearColor(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);\n  void clearDepthf(GLfloat depth);\n  void clearStencil(GLint s);\n  void colorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);\n  void compileShader(GLuint shader);\n  void compressedTexImage2D(GLenum target,\n                            GLint level,\n                            GLenum internalformat,\n                            GLsizei width,\n                            GLsizei height,\n                            GLint border,\n                            GLsizei imageSize,\n                            const GLvoid* IGL_NULLABLE data);\n  void compressedTexImage3D(GLenum target,\n                            GLint level,\n                            GLenum internalformat,\n                            GLsizei width,\n                            GLsizei height,\n                            GLsizei depth,\n                            GLint border,\n                            GLsizei imageSize,\n                            const GLvoid* IGL_NULLABLE data);\n  void compressedTexSubImage2D(GLenum target,\n                               GLint level,\n                               GLint xoffset,\n                               GLint yoffset,\n                               GLsizei width,\n                               GLsizei height,\n                               GLenum format,\n                               GLsizei imageSize,\n                               const GLvoid* IGL_NULLABLE data);\n  void compressedTexSubImage3D(GLenum target,\n                               GLint level,\n                               GLint xoffset,\n                               GLint yoffset,\n                               GLint zoffset,\n                               GLsizei width,\n                               GLsizei height,\n                               GLsizei depth,\n                               GLenum format,\n                               GLsizei imageSize,\n                               const GLvoid* IGL_NULLABLE data);\n  void copyBufferSubData(GLenum readtarget,\n                         GLenum writetarget,\n                         GLintptr readoffset,\n                         GLintptr writeoffset,\n                         GLsizeiptr size);\n  void copyTexSubImage2D(GLenum target,\n                         GLint level,\n                         GLint xoffset,\n                         GLint yoffset,\n                         GLint x,\n                         GLint y,\n                         GLsizei width,\n                         GLsizei height);\n  void createMemoryObjects(GLsizei n, GLuint* IGL_NULLABLE objects);\n  GLuint createProgram();\n  GLuint createShader(GLenum shaderType);\n  virtual void cullFace(GLint mode);\n  void debugMessageCallback(PFNIGLDEBUGPROC IGL_NULLABLE callback,\n                            const void* IGL_NULLABLE userParam);\n  void debugMessageInsert(GLenum source,\n                          GLenum type,\n                          GLuint id,\n                          GLenum severity,\n                          GLsizei length,\n                          const GLchar* IGL_NULLABLE buf);\n  void deleteBuffers(GLsizei n, const GLuint* IGL_NULLABLE buffers);\n  void deleteFramebuffers(GLsizei n, const GLuint* IGL_NULLABLE framebuffers);\n  void deleteMemoryObjects(GLsizei n, const GLuint* IGL_NULLABLE objects);\n  void deleteRenderbuffers(GLsizei n, const GLuint* IGL_NULLABLE renderbuffers);\n  void deleteVertexArrays(GLsizei n, const GLuint* IGL_NULLABLE vertexArrays);\n  void deleteProgram(GLuint program);\n  void deleteShader(GLuint shaderId);\n  void deleteSync(GLsync IGL_NULLABLE sync);\n  void deleteTextures(GLsizei n, const GLuint* IGL_NULLABLE textures);\n  void depthFunc(GLenum func);\n  void depthMask(GLboolean flag);\n  void depthRangef(GLfloat n, GLfloat f);\n  void detachShader(GLuint program, GLuint shader);\n  virtual void disable(GLenum cap);\n  void disableVertexAttribArray(GLuint index);\n  void drawArrays(GLenum mode, GLint first, GLsizei count);\n  void drawArraysIndirect(GLenum mode, const GLvoid* IGL_NULLABLE indirect);\n  void drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount);\n  void drawBuffers(GLsizei n, GLenum* IGL_NULLABLE buffers);\n  void drawElements(GLenum mode, GLsizei count, GLenum type, const GLvoid* IGL_NULLABLE indices);\n  void drawElementsInstanced(GLenum mode,\n                             GLsizei count,\n                             GLenum type,\n                             const GLvoid* IGL_NULLABLE indices,\n                             GLsizei instancecount);\n  void drawElementsIndirect(GLenum mode, GLenum type, const GLvoid* IGL_NULLABLE indirect);\n  void multiDrawArraysIndirect(GLenum mode,\n                               const void* IGL_NULLABLE indirect,\n                               GLsizei drawcount,\n                               GLsizei stride);\n  void multiDrawElementsIndirect(GLenum mode,\n                                 GLenum type,\n                                 const void* IGL_NULLABLE indirect,\n                                 GLsizei drawcount,\n                                 GLsizei stride);\n  virtual void enable(GLenum cap);\n  void enableVertexAttribArray(GLuint index);\n  GLsync IGL_NULLABLE fenceSync(GLenum condition, GLbitfield flags);\n  void finish();\n  void flush();\n  void framebufferRenderbuffer(GLenum target,\n                               GLenum attachment,\n                               GLenum renderbuffertarget,\n                               GLuint renderbuffer);\n  void framebufferTexture2D(GLenum target,\n                            GLenum attachment,\n                            GLenum textarget,\n                            GLuint texture,\n                            GLint level);\n  void framebufferTexture2DMultisample(GLenum target,\n                                       GLenum attachment,\n                                       GLenum textarget,\n                                       GLuint texture,\n                                       GLint level,\n                                       GLsizei samples);\n  void framebufferTextureLayer(GLenum target,\n                               GLenum attachment,\n                               GLuint texture,\n                               GLint level,\n                               GLint layer);\n  virtual void frontFace(GLenum mode);\n  virtual void polygonFillMode(GLenum mode);\n  void generateMipmap(GLenum target);\n  void genBuffers(GLsizei n, GLuint* IGL_NULLABLE buffers);\n  void genFramebuffers(GLsizei n, GLuint* IGL_NULLABLE framebuffers);\n  void genRenderbuffers(GLsizei n, GLuint* IGL_NULLABLE renderbuffers);\n  void genTextures(GLsizei n, GLuint* IGL_NULLABLE textures);\n  void genVertexArrays(GLsizei n, GLuint* IGL_NULLABLE vertexArrays);\n  void getActiveAttrib(GLuint program,\n                       GLuint index,\n                       GLsizei bufsize,\n                       GLsizei* IGL_NULLABLE length,\n                       GLint* IGL_NULLABLE size,\n                       GLenum* IGL_NULLABLE type,\n                       GLchar* IGL_NULLABLE name) const;\n  void getActiveUniform(GLuint program,\n                        GLuint index,\n                        GLsizei bufsize,\n                        GLsizei* IGL_NULLABLE length,\n                        GLint* IGL_NULLABLE size,\n                        GLenum* IGL_NULLABLE type,\n                        GLchar* IGL_NULLABLE name) const;\n\n  void getActiveUniformsiv(GLuint program,\n                           GLsizei uniformCount,\n                           const GLuint* IGL_NULLABLE uniformIndices,\n                           GLenum pname,\n                           GLint* IGL_NULLABLE params) const;\n  void getActiveUniformBlockiv(GLuint program,\n                               GLuint index,\n                               GLenum pname,\n                               GLint* IGL_NULLABLE params) const;\n  void getActiveUniformBlockName(GLuint program,\n                                 GLuint index,\n                                 GLsizei bufSize,\n                                 GLsizei* IGL_NULLABLE length,\n                                 GLchar* IGL_NULLABLE uniformBlockName) const;\n  GLint getAttribLocation(GLuint program, const GLchar* IGL_NULLABLE name) const;\n  void getBooleanv(GLenum pname, GLboolean* IGL_NULLABLE params) const;\n  void getBufferParameteriv(GLenum target, GLenum pname, GLint* IGL_NULLABLE params) const;\n  GLuint getDebugMessageLog(GLuint count,\n                            GLsizei bufSize,\n                            GLenum* IGL_NULLABLE sources,\n                            GLenum* IGL_NULLABLE types,\n                            GLuint* IGL_NULLABLE ids,\n                            GLenum* IGL_NULLABLE severities,\n                            GLsizei* IGL_NULLABLE lengths,\n                            GLchar* IGL_NULLABLE messageLog) const;\n  virtual GLenum getError() const;\n  void getFramebufferAttachmentParameteriv(GLenum target,\n                                           GLenum attachment,\n                                           GLenum pname,\n                                           GLint* IGL_NULLABLE params) const;\n  void getIntegerv(GLenum pname, GLint* IGL_NULLABLE params) const;\n  void getProgramiv(GLuint program, GLenum pname, GLint* IGL_NULLABLE params) const;\n  void getProgramInterfaceiv(GLuint program,\n                             GLenum programInterface,\n                             GLenum pname,\n                             GLint* IGL_NULLABLE params) const;\n  void getProgramInfoLog(GLuint program,\n                         GLsizei bufsize,\n                         GLsizei* IGL_NULLABLE length,\n                         GLchar* IGL_NULLABLE infolog) const;\n  GLuint getProgramResourceIndex(GLuint program,\n                                 GLenum programInterface,\n                                 const GLchar* IGL_NULLABLE name) const;\n  void getProgramResourceiv(GLuint program,\n                            GLenum programInterface,\n                            GLuint index,\n                            GLsizei propCount,\n                            const GLenum* IGL_NULLABLE props,\n                            GLsizei bufSize,\n                            GLsizei* IGL_NULLABLE length,\n                            GLint* IGL_NULLABLE params);\n  void getProgramResourceName(GLuint program,\n                              GLenum programInterface,\n                              GLuint index,\n                              GLsizei bufSize,\n                              GLsizei* IGL_NULLABLE length,\n                              char* IGL_NULLABLE name) const;\n  void getShaderiv(GLuint shader, GLenum pname, GLint* IGL_NULLABLE params) const;\n  void getShaderInfoLog(GLuint shader,\n                        GLsizei maxLength,\n                        GLsizei* IGL_NULLABLE length,\n                        GLchar* IGL_NULLABLE infoLog) const;\n  virtual const GLubyte* IGL_NULLABLE getString(GLenum name) const;\n  virtual const GLubyte* IGL_NULLABLE getStringi(GLenum name, GLuint index) const;\n  void getSynciv(GLsync IGL_NULLABLE sync,\n                 GLenum pname,\n                 GLsizei bufSize,\n                 GLsizei* IGL_NULLABLE length,\n                 GLint* IGL_NULLABLE values) const;\n  void getUniformiv(GLuint program, GLint location, GLint* IGL_NULLABLE params) const;\n  GLint getUniformLocation(GLuint program, const GLchar* IGL_NULLABLE name) const;\n  void importMemoryFd(GLuint memory, GLuint64 size, GLenum handleType, GLint fd);\n  void invalidateFramebuffer(GLenum target,\n                             GLsizei numAttachments,\n                             const GLenum* IGL_NULLABLE attachments);\n  GLboolean isEnabled(GLenum cap);\n  GLboolean isTexture(GLuint texture);\n  void linkProgram(GLuint program);\n  void* IGL_NULLABLE mapBuffer(GLenum target, GLenum access);\n  void* IGL_NULLABLE mapBufferRange(GLenum target,\n                                    GLintptr offset,\n                                    GLsizeiptr length,\n                                    GLbitfield access);\n  void objectLabel(GLenum identifier, GLuint name, GLsizei length, const char* IGL_NULLABLE label);\n  void pixelStorei(GLenum pname, GLint param);\n  void polygonOffsetClamp(GLfloat factor, GLfloat units, float clamp);\n  void popDebugGroup();\n  void pushDebugGroup(GLenum source, GLuint id, GLsizei length, const GLchar* IGL_NULLABLE message);\n  void readPixels(GLint x,\n                  GLint y,\n                  GLsizei width,\n                  GLsizei height,\n                  GLenum format,\n                  GLenum type,\n                  GLvoid* IGL_NULLABLE pixels);\n  void renderbufferStorage(GLenum target, GLenum internalformat, GLsizei width, GLsizei height);\n  void renderbufferStorageMultisample(GLenum target,\n                                      GLsizei samples,\n                                      GLenum internalformat,\n                                      GLsizei width,\n                                      GLsizei height);\n  void framebufferTextureMultiview(GLenum target,\n                                   GLenum attachment,\n                                   GLuint texture,\n                                   GLint level,\n                                   GLint baseViewIndex,\n                                   GLsizei numViews);\n  void framebufferTextureMultisampleMultiview(GLenum target,\n                                              GLenum attachment,\n                                              GLuint texture,\n                                              GLint level,\n                                              GLsizei samples,\n                                              GLint baseViewIndex,\n                                              GLsizei numViews);\n  void scissor(GLint x, GLint y, GLsizei width, GLsizei height);\n  virtual void setEnabled(bool shouldEnable, GLenum cap);\n  void shaderSource(GLuint shader,\n                    GLsizei count,\n                    const GLchar * IGL_NULLABLE * IGL_NULLABLE string,\n                    const GLint* IGL_NULLABLE length);\n  void stencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask);\n  void stencilMask(GLuint mask);\n  void stencilMaskSeparate(GLenum face, GLuint mask);\n  void stencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass);\n  void texStorage2D(GLenum target,\n                    GLsizei levels,\n                    GLenum internalformat,\n                    GLsizei width,\n                    GLsizei height);\n  void texStorage3D(GLenum target,\n                    GLsizei levels,\n                    GLenum internalformat,\n                    GLsizei width,\n                    GLsizei height,\n                    GLsizei depth);\n  void texStorageMem2D(GLenum target,\n                       GLsizei levels,\n                       GLenum internalFormat,\n                       GLsizei width,\n                       GLsizei height,\n                       GLuint memory,\n                       GLuint64 offset);\n  void texStorageMem3D(GLenum target,\n                       GLsizei levels,\n                       GLenum internalFormat,\n                       GLsizei width,\n                       GLsizei height,\n                       GLsizei depth,\n                       GLuint memory,\n                       GLuint64 offset);\n  void texImage2D(GLenum target,\n                  GLint level,\n                  GLint internalformat,\n                  GLsizei width,\n                  GLsizei height,\n                  GLint border,\n                  GLenum format,\n                  GLenum type,\n                  const GLvoid* IGL_NULLABLE data);\n\n  void texImage3D(GLenum target,\n                  GLint level,\n                  GLint internalformat,\n                  GLsizei width,\n                  GLsizei height,\n                  GLsizei depth,\n                  GLint border,\n                  GLenum format,\n                  GLenum type,\n                  const GLvoid* IGL_NULLABLE data);\n\n  void texParameteri(GLenum target, GLenum pname, GLint param);\n  void texSubImage2D(GLenum target,\n                     GLint level,\n                     GLint xoffset,\n                     GLint yoffset,\n                     GLsizei width,\n                     GLsizei height,\n                     GLenum format,\n                     GLenum type,\n                     const GLvoid* IGL_NULLABLE pixels);\n  void texSubImage3D(GLenum target,\n                     GLint level,\n                     GLint xoffset,\n                     GLint yoffset,\n                     GLint zoffset,\n                     GLsizei width,\n                     GLsizei height,\n                     GLsizei depth,\n                     GLenum format,\n                     GLenum type,\n                     const GLvoid* IGL_NULLABLE pixels);\n  void uniform1f(GLint location, GLfloat x);\n  void uniform1fv(GLint location, GLsizei count, const GLfloat* IGL_NULLABLE v);\n  void uniform1i(GLint location, GLint x);\n  void uniform1iv(GLint location, GLsizei count, const GLint* IGL_NULLABLE v);\n  void uniform2f(GLint location, GLfloat x, GLfloat y);\n  void uniform2fv(GLint location, GLsizei count, const GLfloat* IGL_NULLABLE v);\n  void uniform2i(GLint location, GLint x, GLint y);\n  void uniform2iv(GLint location, GLsizei count, const GLint* IGL_NULLABLE v);\n  void uniform3f(GLint location, GLfloat x, GLfloat y, GLfloat z);\n  void uniform3fv(GLint location, GLsizei count, const GLfloat* IGL_NULLABLE v);\n  void uniform3i(GLint location, GLint x, GLint y, GLint z);\n  void uniform3iv(GLint location, GLsizei count, const GLint* IGL_NULLABLE v);\n  void uniform4f(GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w);\n  void uniform4fv(GLint location, GLsizei count, const GLfloat* IGL_NULLABLE v);\n  void uniform4i(GLint location, GLint x, GLint y, GLint z, GLint w);\n  void uniform4iv(GLint location, GLsizei count, const GLint* IGL_NULLABLE v);\n  void uniformBlockBinding(GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding);\n  void uniformMatrix2fv(GLint location,\n                        GLsizei count,\n                        GLboolean transpose,\n                        const GLfloat* IGL_NULLABLE value);\n  void uniformMatrix3fv(GLint location,\n                        GLsizei count,\n                        GLboolean transpose,\n                        const GLfloat* IGL_NULLABLE value);\n  void uniformMatrix4fv(GLint location,\n                        GLsizei count,\n                        GLboolean transpose,\n                        const GLfloat* IGL_NULLABLE value);\n  void unmapBuffer(GLenum target);\n  void useProgram(GLuint program);\n  void validateProgram(GLuint program);\n  void vertexAttribPointer(GLuint index,\n                           GLint size,\n                           GLenum type,\n                           GLboolean normalized,\n                           GLsizei stride,\n                           const GLvoid* IGL_NULLABLE ptr);\n  void vertexAttribDivisor(GLuint index, GLuint divisor);\n  void viewport(GLint x, GLint y, GLsizei width, GLsizei height);\n\n  void dispatchCompute(GLuint numGroupsX, GLuint numGroupsY, GLuint numGroupsZ);\n  void memoryBarrier(GLbitfield barriers);\n  GLuint64 getTextureHandle(GLuint texture);\n  void makeTextureHandleResident(GLuint64 handle);\n  void makeTextureHandleNonResident(GLuint64 handle);\n\n  /** Returns current `callCounter_` value. Exposed for testing only. */\n  unsigned int getCallCount() const;\n\n  unsigned int getCurrentDrawCount() const;\n\n  unsigned int getShaderCompilationCount() const;\n\n  // Utility functions\n  [[nodiscard]] const DeviceFeatureSet& deviceFeatures() const;\n  /// Calls bindBuffer(target, 0) or enqueues to run when deletion queue is\n  /// flushed\n  void unbindBuffer(GLenum target);\n\n  // Log the next N frames\n  void apiLogNextNDraws(unsigned int n);\n\n  // Log everything between start() and end()\n  void apiLogStart();\n  void apiLogEnd();\n\n  void setShouldValidateShaders(bool shouldValidateShaders);\n  bool shouldValidateShaders() const;\n  inline bool isDestructionAllowed() const {\n    return lockCount_ == 0;\n  }\n\n  void resetCounters();\n\n  /** Manual reference counting.\n   * In some cases, mostly for performance reasons, we hold unprotected\n   * references to the IContext. When doing so, use the functions below to\n   * signal such references so we can at least throw an error when those\n   * references become invalid.\n   */\n  // @fb-only\n  bool addRef();\n  bool releaseRef();\n\n  // @fb-only\n  /**\n   * The goal here is to try to check whether 'this' is a valid object and not\n   * a zombie. Ideally, this should be handled elsewhere, but until we solve\n   * that more difficult problem we can at least provide reasonable error\n   * messages to users.\n   *\n   * The idea is to set a specific chunk of memory within the object to a\n   * known valid value in the constructor and clear it in the destructor.\n   * Invoking this method on a valid object always returns true, and invoking\n   * this method on a zombie pointer will simply check that memory offset from\n   * the base pointer and most likely return false, unless that memory happens\n   * to match our not-so-secret pattern.\n   */\n  bool isLikelyValidObject() const {\n    return zombieGuard_ == kNotAZombie;\n  }\n\n  virtual bool eglSupportssRGB() {\n    return true; // we don't have egl so assume support is good.\n  }\n\n public:\n  UnbindPolicy getUnbindPolicy() const;\n\n  /** Sets unbind policy for *subsequent* scopes/render passes.\n   *\n   * For example, only new instances of RenderCommandEncoder will honor the\n   * new unbind policy. Previous instances, on the other hand, use the policy\n   * that was in place when they were created. Similarly, the Device's unbind\n   * policy will not change until the next beginScope().\n   */\n  void setUnbindPolicy(UnbindPolicy newValue);\n\n  /** Enables or Disables calling getError() after GL call\n   * This check is enabled by defaults in debug mode, and this function can be\n   * used to turn it off. In release mode, the option is hard coded to false\n   * and this function has no effect.\n   */\n  void enableAutomaticErrorCheck(bool enable);\n\n  // Manages an adapter pool as recreating this every frame causes unwanted\n  // memory allocations.\n  // @fb-only\n  // @fb-only\n  auto& getAdapterPool() {\n    return renderAdapterPool_;\n  }\n\n  auto& getComputeAdapterPool() {\n    return computeAdapterPool_;\n  }\n\n  // Called to check if the last OGL call resulted in an error.\n  GLenum checkForErrors(const char* IGL_NULLABLE callerName, size_t lineNum) const;\n  Result getLastError() const;\n\n public:\n  mutable Pool<BindGroupBufferTag, BindGroupBufferDesc> bindGroupBuffersPool;\n  mutable Pool<BindGroupTextureTag, BindGroupTextureDesc> bindGroupTexturesPool;\n\n protected:\n  static std::unordered_map<void* IGL_NULLABLE, IContext*>& getExistingContexts();\n  static void registerContext(void* IGL_NULLABLE glContext, IContext* IGL_NULLABLE context);\n  static void unregisterContext(void* IGL_NULLABLE glContext);\n  void initialize(Result* IGL_NULLABLE result = nullptr);\n  void willDestroy(void* IGL_NULLABLE glContext);\n\n private:\n  bool alwaysCheckError_ = false; // TRUE to check error after each OGL call\n  mutable GLenum lastError_ = GL_NO_ERROR;\n  mutable unsigned int callCounter_ = 0;\n  std::atomic<unsigned int> drawCallCount_{0};\n  std::atomic<unsigned int> shaderCompilationCount_{0};\n  int lockCount_ = 0; // used by DestructionGuard\n  int refCount_ = 0; // used by addRef/releaseRef\n  bool shouldValidateShaders_ = false;\n\n  // API Logging\n  unsigned int apiLogDrawsLeft_ = 0;\n  bool apiLogEnabled_ = IGL_API_LOG != 0;\n#if IGL_API_LOG\n  void setBoundTexture(GLenum target, GLuint texture);\n  GLuint boundTexture(GLenum target) const;\n  GLuint boundTexture2D_ = 0;\n  GLuint boundTexture3D_ = 0;\n  GLuint boundTextureCubeMap_ = 0;\n  GLuint boundTexture2DArray_ = 0;\n  GLuint boundTextureExternalOes_ = 0;\n\n  void setBoundBuffer(GLenum target, GLuint buffer);\n  GLuint boundBuffer(GLenum target) const;\n  GLuint boundArrayBuffer_ = 0;\n  GLuint boundCopyReadBuffer_ = 0;\n  GLuint boundCopyWriteBuffer_ = 0;\n  GLuint boundDrawIndirectBuffer_ = 0;\n  GLuint boundElementArrayBuffer_ = 0;\n  GLuint boundPixelPackBuffer_ = 0;\n  GLuint boundPixelUnpackBuffer_ = 0;\n  GLuint boundShaderStorageBuffer_ = 0;\n  GLuint boundUniformBuffer_ = 0;\n\n  GLuint boundVao_ = 0;\n  GLuint boundRenderbuffer_ = 0;\n\n  void setBoundFramebuffer(GLenum target, GLuint framebuffer);\n  GLuint boundFramebuffer(GLenum target) const;\n  void setFramebufferAttachment(GLenum target,\n                                GLenum attachment,\n                                bool isRenderbuffer,\n                                GLuint object);\n  const char* framebufferAttachmentType(GLenum target, GLenum attachment) const;\n  const char* framebufferAttachmentType(GLenum target, GLenum buffer, GLint drawbuffer) const;\n  GLuint framebufferAttachment(GLenum target, GLenum attachment) const;\n  GLuint framebufferAttachment(GLenum target, GLenum buffer, GLint drawbuffer) const;\n  const char* framebufferReadBufferType(GLenum target) const;\n  GLuint framebufferReadBuffer(GLenum target) const;\n  std::string affectedFramebufferAttachments(GLenum target, GLbitfield mask) const;\n  std::string boundFramebufferAttachments(GLenum target) const;\n  GLuint boundReadFramebuffer_ = 0;\n  GLuint boundWriteFramebuffer_ = 0;\n  struct FramebufferAttachment {\n    std::array<GLuint, 32> colorAttachment{};\n    std::bitset<32> colorIsRenderbuffer;\n    GLuint depthAttachment = 0;\n    bool depthIsRenderbuffer = false;\n    GLuint stencilAttachment = 0;\n    bool stencilIsRenderbuffer = false;\n    uint32_t readBufferIndex = 0;\n  };\n  std::unordered_map<GLuint, FramebufferAttachment> framebufferAttachments_;\n\n  std::string boundDrawBuffers() const;\n  std::bitset<32> enabledAttributes_;\n  std::array<GLuint, 32> boundAttributes_{};\n\n  std::string boundImageTextures() const;\n  std::string boundDrawTextures() const;\n  GLuint activeTextureUnit_ = 0;\n  std::array<GLuint, 32> boundDrawTextures_{};\n  std::array<GLuint, 32> boundImageTextures_{};\n\n  GLuint boundProgram_ = 0;\n  struct ProgramUniform {\n    GLenum type;\n    bool isTexture = false;\n    bool isImage = false;\n  };\n  mutable std::unordered_map<GLuint, std::unordered_map<std::string, ProgramUniform>>\n      programUniforms_;\n  mutable std::unordered_map<GLuint, std::unordered_map<GLint, std::string>>\n      programUniformsByLocation_;\n  mutable std::unordered_map<GLuint, std::unordered_map<GLuint, std::string>> programUbosByIndex_;\n  mutable std::unordered_map<GLuint, std::unordered_map<GLint, std::string>> programUbosByLocation_;\n  mutable std::unordered_map<GLuint, std::unordered_map<GLuint, std::string>> programSsbosByIndex_;\n  mutable std::unordered_map<GLuint, std::unordered_map<GLint, std::string>>\n      programSsbosByLocation_;\n  std::array<GLuint, 32> boundSsbos_{};\n  std::array<GLuint, 32> boundUbos_{};\n  void addProgramUniform(GLuint program, GLsizei* length, GLenum* type, GLchar* name) const;\n  void setProgramUniformLocation(GLuint program, const GLchar* name, GLint location) const;\n  void setProgramResourceIndex(GLuint program,\n                               GLenum programInterface,\n                               const GLchar* name,\n                               GLuint index) const;\n  std::string boundUniformTexture(GLuint program, GLint location, GLint unit) const;\n  std::string boundBufferName(GLuint program, GLenum target, GLuint index) const;\n  void setBoundBufferByIndex(GLenum target, GLuint index, GLuint buffer);\n  GLuint boundBufferByIndex(GLenum target, GLuint index) const;\n  std::string boundBuffersByIndex(bool ssbos = true, bool ubos = true) const;\n  bool lastCommandWasCompute_ = false;\n  std::string identifierLabel(GLuint identifier, GLuint name) const;\n\n  std::string affectedMemoryBarrierObjects(GLbitfield bits) const;\n#endif\n\n  PFNIGLBINDIMAGETEXTUREPROC IGL_NULLABLE bindImageTexturerProc_ = nullptr;\n  PFNIGLBINDVERTEXARRAYPROC IGL_NULLABLE bindVertexArrayProc_ = nullptr;\n  PFNIGLBLITFRAMEBUFFERPROC IGL_NULLABLE blitFramebufferProc_ = nullptr;\n  PFNIGLCLEARDEPTHFPROC IGL_NULLABLE clearDepthfProc_ = nullptr;\n  PFNIGLCOMPRESSEDTEXIMAGE3DPROC IGL_NULLABLE compressedTexImage3DProc_ = nullptr;\n  PFNIGLCOMPRESSEDTEXSUBIMAGE3DPROC IGL_NULLABLE compressedTexSubImage3DProc_ = nullptr;\n  PFNIGLDEBUGMESSAGECALLBACKPROC IGL_NULLABLE debugMessageCallbackProc_ = nullptr;\n  PFNIGLDEBUGMESSAGEINSERTPROC IGL_NULLABLE debugMessageInsertProc_ = nullptr;\n  PFNIGLDELETESYNCPROC IGL_NULLABLE deleteSyncProc_ = nullptr;\n  PFNIGLDELETEVERTEXARRAYSPROC IGL_NULLABLE deleteVertexArraysProc_ = nullptr;\n  PFNIGLDRAWBUFFERSPROC IGL_NULLABLE drawBuffersProc_ = nullptr;\n  PFNIGLFENCESYNCPROC IGL_NULLABLE fenceSyncProc_ = nullptr;\n  PFNIGLFRAMEBUFFERTEXTURE2DMULTISAMPLEPROC IGL_NULLABLE framebufferTexture2DMultisampleProc_ =\n      nullptr;\n  PFNIGLINVALIDATEFRAMEBUFFERPROC IGL_NULLABLE invalidateFramebufferProc_ = nullptr;\n  PFNIGLGENVERTEXARRAYSPROC IGL_NULLABLE genVertexArraysProc_ = nullptr;\n  mutable PFNIGLGETDEBUGMESSAGELOGPROC IGL_NULLABLE getDebugMessageLogProc_ = nullptr;\n  mutable PFNIGLGETSYNCIVPROC IGL_NULLABLE getSyncivProc_ = nullptr;\n  PFNIGLGETTEXTUREHANDLEPROC IGL_NULLABLE getTextureHandleProc_ = nullptr;\n  PFNIGLMAKETEXTUREHANDLERESIDENTPROC IGL_NULLABLE makeTextureHandleResidentProc_ = nullptr;\n  PFNIGLMAKETEXTUREHANDLENONRESIDENTPROC IGL_NULLABLE makeTextureHandleNonResidentProc_ = nullptr;\n  PFNIGLMAPBUFFERPROC IGL_NULLABLE mapBufferProc_ = nullptr;\n  PFNIGLMAPBUFFERRANGEPROC IGL_NULLABLE mapBufferRangeProc_ = nullptr;\n  PFNIGLMEMORYBARRIERPROC IGL_NULLABLE memoryBarrierProc_ = nullptr;\n  PFNIGLOBJECTLABELPROC IGL_NULLABLE objectLabelProc_ = nullptr;\n  PFNIGLPOPDEBUGGROUPPROC IGL_NULLABLE popDebugGroupProc_ = nullptr;\n  PFNIGLPUSHDEBUGGROUPPROC IGL_NULLABLE pushDebugGroupProc_ = nullptr;\n  PFNIGLRENDERBUFFERSTORAGEMULTISAMPLEPROC IGL_NULLABLE renderbufferStorageMultisampleProc_ =\n      nullptr;\n  PFNIGLTEXIMAGE3DPROC IGL_NULLABLE texImage3DProc_ = nullptr;\n  PFNIGLTEXSTORAGE1DPROC IGL_NULLABLE texStorage1DProc_ = nullptr;\n  PFNIGLTEXSTORAGE2DPROC IGL_NULLABLE texStorage2DProc_ = nullptr;\n  PFNIGLTEXSTORAGE3DPROC IGL_NULLABLE texStorage3DProc_ = nullptr;\n  PFNIGLTEXSUBIMAGE3DPROC IGL_NULLABLE texSubImage3DProc_ = nullptr;\n  PFNIGLUNMAPBUFFERPROC IGL_NULLABLE unmapBufferProc_ = nullptr;\n  PFNIGLVERTEXATTRIBDIVISORPROC IGL_NULLABLE vertexAttribDivisorProc_ = nullptr;\n\n  /// Responsible for holding onto operations queued for deletion when not in\n  /// context. All operations to non-scratch queues are suyncronized by one\n  /// mutex\n  struct SynchronizedDeletionQueues {\n   public:\n    void flushDeletionQueue(IContext& context);\n\n    void queueDeleteBuffers(GLsizei n, const GLuint* IGL_NULLABLE buffers);\n    void queueUnbindBuffer(GLenum target);\n    void queueDeleteFramebuffers(GLsizei n, const GLuint* IGL_NULLABLE framebuffers);\n    void queueDeleteRenderbuffers(GLsizei n, const GLuint* IGL_NULLABLE renderbuffers);\n    void queueDeleteVertexArrays(GLsizei n, const GLuint* IGL_NULLABLE vertexArrays);\n    void queueDeleteProgram(GLuint program);\n    void queueDeleteShader(GLuint shaderId);\n    void queueDeleteTextures(GLsizei n, const GLuint* IGL_NULLABLE textures);\n\n   private:\n    /// This is called by flushDeletionQueue to swap fooQueue w/\n    /// scratchFooQueue\n    void swapScratchDeletionQueues();\n\n    // These are swapped with the main queues then read to perform operations.\n    // They can be read from flushDeletionQueue w/o synchronization.\n    std::vector<GLuint> scratchBuffersQueue_;\n    std::unordered_set<GLenum> scratchUnbindBuffersQueue_;\n    std::vector<GLuint> scratchFramebuffersQueue_;\n    std::vector<GLuint> scratchRenderbuffersQueue_;\n    std::vector<GLuint> scratchVertexArraysQueue_;\n    std::vector<GLuint> scratchProgramQueue_;\n    std::vector<GLuint> scratchShaderQueue_;\n    std::vector<GLuint> scratchTexturesQueue_;\n\n    // Guards all the non-scratch queues.\n    std::mutex deletionQueueMutex_;\n\n    // Resources queued for deletion\n    std::vector<GLuint> buffersQueue_;\n    // These are the targets for the buffers that we enqueued for deletion\n    // that we need to unbind\n    std::unordered_set<GLenum> unbindBuffersQueue_;\n    std::vector<GLuint> framebuffersQueue_;\n    std::vector<GLuint> renderbuffersQueue_;\n    std::vector<GLuint> vertexArraysQueue_;\n    std::vector<GLuint> programQueue_;\n    std::vector<GLuint> shaderQueue_;\n    std::vector<GLuint> texturesQueue_;\n  };\n\n  SynchronizedDeletionQueues deletionQueues_;\n\n  UnbindPolicy unbindPolicy_ = UnbindPolicy::Default;\n\n  void getGLMajorAndMinorVersions(GLint& majorVersion, GLint& minorVersion) const;\n  void getGlMajorAndMinorVersions(GLint& majorVersion, GLint& minorVersion) const;\n  friend class DestructionGuard;\n  std::vector<std::unique_ptr<RenderCommandAdapter>> renderAdapterPool_;\n  std::vector<std::unique_ptr<ComputeCommandAdapter>> computeAdapterPool_;\n\n  DeviceFeatureSet deviceFeatureSet_;\n\n  // For framebufferTexture2DMultisample\n  GLint maxSamples_ = -1;\n  GLint maxDebugStackSize_ = -1;\n  GLint debugStackSize_ = 0;\n\n  static constexpr uint64_t kNotAZombie = 0xdeadc0def3315badLL;\n  uint64_t zombieGuard_ = kNotAZombie;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/PlatformDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/PlatformDevice.h>\n\n#include <igl/opengl/DestructionGuard.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/Framebuffer.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/TextureBufferExternal.h>\n\nnamespace igl::opengl {\n\nstd::shared_ptr<Framebuffer> PlatformDevice::createFramebuffer(const FramebufferDesc& desc,\n                                                               Result* outResult) const {\n  auto resource = std::make_shared<CustomFramebuffer>(getContext());\n  resource->initialize(desc, outResult);\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    resource->initResourceTracker(std::move(resourceTracker), desc.debugName);\n  }\n  return resource;\n}\n\nstd::shared_ptr<Framebuffer> PlatformDevice::createCurrentFramebuffer() const {\n  auto resource = std::make_shared<CurrentFramebuffer>(getContext());\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    resource->initResourceTracker(std::move(resourceTracker));\n  }\n  return resource;\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nstd::unique_ptr<TextureBufferExternal> PlatformDevice::createTextureBufferExternal(\n    GLuint textureID,\n    GLenum target,\n    TextureDesc::TextureUsage usage,\n    GLsizei width,\n    GLsizei height,\n    TextureFormat format,\n    GLsizei numLayers) const {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  auto textureBuffer = std::make_unique<TextureBufferExternal>(getContext(), format, usage);\n  textureBuffer->setTextureBufferProperties(textureID, target);\n  textureBuffer->setTextureProperties(width, height, numLayers);\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    textureBuffer->initResourceTracker(std::move(resourceTracker));\n  }\n  return textureBuffer;\n}\n\nDestructionGuard PlatformDevice::getDestructionGuard() const {\n  return {owner_.getSharedContext()};\n}\n\nIContext& PlatformDevice::getContext() const {\n  return owner_.getContext();\n}\n\nconst std::shared_ptr<IContext>& PlatformDevice::getSharedContext() const {\n  return owner_.getSharedContext();\n}\n\nvoid PlatformDevice::blitFramebuffer(const std::shared_ptr<IFramebuffer>& src,\n                                     int srcLeft,\n                                     int srcTop,\n                                     int srcRight,\n                                     int srcBottom,\n                                     const std::shared_ptr<IFramebuffer>& dst,\n                                     int dstLeft,\n                                     int dstTop,\n                                     int dstRight,\n                                     int dstBottom,\n                                     GLbitfield mask,\n                                     IContext& ctx,\n                                     Result* outResult) {\n  auto& from = static_cast<Framebuffer&>(*src);\n  auto& to = static_cast<Framebuffer&>(*dst);\n\n#if IGL_DEBUG_ABORT_ENABLED\n  // Guard against depth/stencil type mismatch:\n  // GL_INVALID_OPERATION is generated if mask contains GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT\n  // and the source and destination depth and stencil formats do not match.\n  if (mask & GL_DEPTH_BUFFER_BIT) {\n    auto srcDepthTexture = src->getDepthAttachment();\n    auto dstDepthTexture = dst->getDepthAttachment();\n    if ((!srcDepthTexture && dstDepthTexture) || (srcDepthTexture && !dstDepthTexture)) {\n      IGL_DEBUG_ABORT(\n          \"PlatformDevice::blitFramebuffer: One framebuffer has depth attachment and \"\n          \"the other doesn't.\\n\");\n    }\n    if (srcDepthTexture && dstDepthTexture) {\n      const GLenum srcFormat =\n          static_cast<Texture*>(srcDepthTexture.get())->getGLInternalTextureFormat();\n      const GLenum dstFormat =\n          static_cast<Texture*>(dstDepthTexture.get())->getGLInternalTextureFormat();\n      if (srcFormat != dstFormat) {\n        IGL_DEBUG_ABORT(\n            \"PlatformDevice::blitFramebuffer: Mismatch of framebuffer depth attachment \"\n            \"formats: %d vs %d\\n\",\n            srcFormat,\n            dstFormat);\n      }\n    }\n  }\n\n  if (mask & GL_STENCIL_BUFFER_BIT) {\n    auto srcStencilTexture = src->getStencilAttachment();\n    auto dstStencilTexture = dst->getStencilAttachment();\n    if ((!srcStencilTexture && dstStencilTexture) || (srcStencilTexture && !dstStencilTexture)) {\n      IGL_DEBUG_ABORT(\n          \"PlatformDevice::blitFramebuffer: One framebuffer has stencil attachment and \"\n          \"the other doesn't.\\n\");\n    }\n    if (srcStencilTexture && dstStencilTexture) {\n      const GLenum srcFormat =\n          static_cast<Texture*>(srcStencilTexture.get())->getGLInternalTextureFormat();\n      const GLenum dstFormat =\n          static_cast<Texture*>(dstStencilTexture.get())->getGLInternalTextureFormat();\n      if (srcFormat != dstFormat) {\n        IGL_DEBUG_ABORT(\n            \"PlatformDevice::blitFramebuffer: Mismatch of framebuffer stencil \"\n            \"attachment formats: %d vs %d\\n\",\n            srcFormat,\n            dstFormat);\n      }\n    }\n  }\n#endif\n\n  if (ctx.deviceFeatures().hasInternalFeature(InternalFeatures::FramebufferBlit)) {\n    const FramebufferBindingGuard guard(ctx);\n    ctx.bindFramebuffer(GL_DRAW_FRAMEBUFFER, to.getId());\n    ctx.bindFramebuffer(GL_READ_FRAMEBUFFER, from.getId());\n\n    ctx.blitFramebuffer(srcLeft,\n                        srcTop,\n                        srcRight,\n                        srcBottom,\n                        dstLeft,\n                        dstTop,\n                        dstRight,\n                        dstBottom,\n                        mask,\n                        GL_NEAREST);\n    Result::setResult(outResult, Result::Code::Ok);\n  } else {\n    Result::setResult(outResult, Result::Code::Unsupported);\n  }\n}\n\nvoid PlatformDevice::blitFramebuffer(const std::shared_ptr<IFramebuffer>& src,\n                                     int srcLeft,\n                                     int srcTop,\n                                     int srcRight,\n                                     int srcBottom,\n                                     const std::shared_ptr<IFramebuffer>& dst,\n                                     int dstLeft,\n                                     int dstTop,\n                                     int dstRight,\n                                     int dstBottom,\n                                     GLbitfield mask,\n                                     Result* outResult) const {\n  auto ctx = getSharedContext();\n  igl::opengl::PlatformDevice::blitFramebuffer(src,\n                                               srcLeft,\n                                               srcTop,\n                                               srcRight,\n                                               srcBottom,\n                                               dst,\n                                               dstLeft,\n                                               dstTop,\n                                               dstRight,\n                                               dstBottom,\n                                               mask,\n                                               *ctx,\n                                               outResult);\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n#include <igl/PlatformDevice.h>\n#include <igl/Texture.h>\n#include <igl/opengl/GLIncludes.h> // IWYU pragma: keep\n\nnamespace igl {\n\nclass IFramebuffer;\nstruct FramebufferDesc;\n\nnamespace opengl {\n\nclass DestructionGuard;\nclass Device;\nclass Framebuffer;\nclass IContext;\nclass TextureBufferExternal;\n\n/// opengl::PlatformDevice enables transitioning to IGL from legacy OpenGL code.\n///\n/// It mimics IDevice's factory methods, but ensures the return types are the most-derived,\n/// OpenGL-specific versions of those types. For example, here are the accessors for frame buffer.\n/// opengl::PlatformDevice allows us to create the OpenGL-specific resource (opengl::Framebuffer)\n/// in a type-safe way (i.e. no unsafe downcasting by the caller):\n///\n///   class IDevice {\n///    public:\n///     virtual shared_ptr<IFramebuffer> createFramebuffer();\n///   };\n///\n///   class opengl::PlatformDevice {\n///    public:\n///     shared_ptr<opengl::Framebuffer> createFramebuffer() override; // Note different return type\n///   };\n///\n/// When transitioning to IGL from OpenGL, we recommend you do so in 2 phases:\n///\n/// 1. Use OpenGL-flavor of IGL resource, e.g. replace texture id's with igl::opengl::Texture.\n/// 2. Transition to pure IGL resources. Once IGL command buffers are adopted, use igl::ITexture\n/// instead of the OpenGL version.\n///\n/// With PlatformDevice, refactoring between phase 1 and 2 becomes easier. For example, imagine\n/// we have the following struct that holds onto a device instance. In Phase 1, device_'s type is\n/// opengl::PlatformDevice; in Phase 2, the type is IDevice.\n///\n///   struct RenderSession {\n///     // Phase 1\n///     opengl::PlatformDevice* device_; // <=== [AA]\n///\n///     // Phase 2: replace above with the following:\n///     // IDevice *device_;             // <=== [BB]\n///   }\n///\n/// We can write code like the following and easily change device_'s type between\n/// opengl::PlatformDevice and IDevice:\n///\n///   auto framebuffer = device_ -> createFramebuffer();\n///\n/// To go from Phase 1 to Phase 2, we simply have to remove the line marked [AA] and\n/// uncomment the line marked [BB] — and that's it!\n///\n/// In Phase 1, framebuffer's type is shared_ptr<opengl::Framebuffer>, so you can access the\n/// raw OpenGL framebuffer id. In Phase 2, framebuffer's type is shared_ptr<IFramebuffer>;\n/// you are submitting GPU commands via IGL instead of via OpenGL.\n///\nclass PlatformDevice : public IPlatformDevice {\n public:\n  static constexpr igl::PlatformDeviceType kType = igl::PlatformDeviceType::OpenGL;\n\n  explicit PlatformDevice(Device& owner) : owner_(owner) {}\n\n  std::shared_ptr<Framebuffer> createFramebuffer(const FramebufferDesc& desc,\n                                                 Result* outResult) const;\n  [[nodiscard]] std::shared_ptr<Framebuffer> createCurrentFramebuffer() const;\n  [[nodiscard]] std::unique_ptr<TextureBufferExternal> createTextureBufferExternal(\n      GLuint textureID,\n      GLenum target,\n      TextureDesc::TextureUsage usage,\n      GLsizei width,\n      GLsizei height,\n      TextureFormat format,\n      GLsizei numLayers = 1) const;\n  [[nodiscard]] DestructionGuard getDestructionGuard() const;\n  [[nodiscard]] IContext& getContext() const;\n  [[nodiscard]] const std::shared_ptr<IContext>& getSharedContext() const;\n  void blitFramebuffer(const std::shared_ptr<IFramebuffer>& src,\n                       int srcLeft,\n                       int srcTop,\n                       int srcRight,\n                       int srcBottom,\n                       const std::shared_ptr<IFramebuffer>& dst,\n                       int dstLeft,\n                       int dstTop,\n                       int dstRight,\n                       int dstBottom,\n                       GLbitfield mask,\n                       Result* outResult) const;\n  static void blitFramebuffer(const std::shared_ptr<IFramebuffer>& src,\n                              int srcLeft,\n                              int srcTop,\n                              int srcRight,\n                              int srcBottom,\n                              const std::shared_ptr<IFramebuffer>& dst,\n                              int dstLeft,\n                              int dstTop,\n                              int dstRight,\n                              int dstBottom,\n                              GLbitfield mask,\n                              IContext& ctx,\n                              Result* outResult);\n\n protected:\n  [[nodiscard]] bool isType(PlatformDeviceType t) const noexcept override {\n    return t == kType;\n  }\n\n  Device& owner_;\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/RenderCommandAdapter.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/RenderCommandAdapter.h>\n\n#include <algorithm>\n#include <igl/Common.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/opengl/Buffer.h>\n#include <igl/opengl/DepthStencilState.h>\n#include <igl/opengl/Framebuffer.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/RenderPipelineState.h>\n#include <igl/opengl/SamplerState.h>\n#include <igl/opengl/Shader.h>\n#include <igl/opengl/Texture.h>\n#include <igl/opengl/UniformAdapter.h>\n#include <igl/opengl/VertexArrayObject.h>\n\n#define SET_DIRTY(dirtyMap, index) dirtyMap.set(index)\n#define CLEAR_DIRTY(dirtyMap, index) dirtyMap.reset(index)\n#define IS_DIRTY(dirtyMap, index) dirtyMap[index]\n\nnamespace igl::opengl {\nRenderCommandAdapter::RenderCommandAdapter(IContext& context) :\n  WithContext(context),\n  uniformAdapter_(UniformAdapter(context, UniformAdapter::PipelineType::Render)) {\n  useVAO_ = context.deviceFeatures().hasInternalFeature(InternalFeatures::VertexArrayObject);\n  if (useVAO_) {\n    activeVAO_ = std::make_shared<VertexArrayObject>(getContext());\n    activeVAO_->create();\n  }\n}\n\nstd::unique_ptr<RenderCommandAdapter> RenderCommandAdapter::create(\n    IContext& context,\n    const RenderPassDesc& renderPass,\n    const std::shared_ptr<IFramebuffer>& framebuffer,\n    Result* outResult) {\n  // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)\n  std::unique_ptr<RenderCommandAdapter> newAdapter(new RenderCommandAdapter(context));\n  newAdapter->initialize(renderPass, framebuffer, outResult);\n  return newAdapter;\n}\n\nvoid RenderCommandAdapter::initialize(const RenderPassDesc& renderPass,\n                                      const std::shared_ptr<IFramebuffer>& framebuffer,\n                                      Result* outResult) {\n  if (!IGL_DEBUG_VERIFY(framebuffer)) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"framebuffer is null\");\n    return;\n  }\n  if (activeVAO_) {\n    if (!IGL_DEBUG_VERIFY(activeVAO_->isValid())) {\n      Result::setResult(outResult, Result::Code::RuntimeError, \"Vertex array object is invalid\");\n      return;\n    }\n    activeVAO_->bind();\n  }\n  const auto& openglFramebuffer = static_cast<const Framebuffer&>(*framebuffer);\n  openglFramebuffer.bind(renderPass);\n\n  auto viewport = openglFramebuffer.getViewport();\n  IGL_DEBUG_ASSERT(!(viewport.width < 0.f) && !(viewport.height < 0.f));\n  setViewport(viewport);\n  Result::setOk(outResult);\n}\n\nvoid RenderCommandAdapter::setViewport(const Viewport& viewport) {\n  getContext().viewport(\n      (GLint)viewport.x, (GLint)viewport.y, (GLint)viewport.width, (GLint)viewport.height);\n}\n\nvoid RenderCommandAdapter::setScissorRect(const ScissorRect& rect) {\n  const bool scissorEnabled = !rect.isNull();\n  getContext().setEnabled(scissorEnabled, GL_SCISSOR_TEST);\n  if (scissorEnabled) {\n    getContext().scissor(rect.x, rect.y, rect.width, rect.height);\n  }\n}\n\nvoid RenderCommandAdapter::setDepthStencilState(\n    const std::shared_ptr<IDepthStencilState>& newValue) {\n  depthStencilState_ = newValue;\n  setDirty(StateMask::DepthStencil);\n}\n\nvoid RenderCommandAdapter::setStencilReferenceValue(uint32_t value) {\n  frontStencilReferenceValue_ = value;\n  backStencilReferenceValue_ = value;\n\n  setDirty(StateMask::DepthStencil);\n}\n\nvoid RenderCommandAdapter::setBlendColor(const Color& color) {\n  getContext().blendColor(color.r, color.g, color.b, color.a);\n}\n\nvoid RenderCommandAdapter::setDepthBias(float depthBias, float slopeScale, float clamp) {\n  getContext().setEnabled(true, GL_POLYGON_OFFSET_FILL);\n  getContext().polygonOffsetClamp(slopeScale, depthBias, clamp);\n}\n\nvoid RenderCommandAdapter::clearVertexBuffers() {\n  vertexBuffersDirty_.reset();\n}\n\nvoid RenderCommandAdapter::setVertexBuffer(Buffer& buffer,\n                                           size_t offset,\n                                           size_t index,\n                                           Result* outResult) {\n  IGL_DEBUG_ASSERT(index < IGL_BUFFER_BINDINGS_MAX,\n                   \"Buffer index is beyond max, may want to increase limit\");\n  if (index < IGL_BUFFER_BINDINGS_MAX) {\n    vertexBuffers_[index] = {&buffer, offset};\n    SET_DIRTY(vertexBuffersDirty_, index);\n    Result::setOk(outResult);\n  } else {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid);\n  }\n}\n\nvoid RenderCommandAdapter::setIndexBuffer(Buffer& buffer) {\n  bindBufferWithShaderStorageBufferOverride(buffer, GL_ELEMENT_ARRAY_BUFFER);\n}\n\nvoid RenderCommandAdapter::clearUniformBuffers() {\n  uniformAdapter_.clearUniformBuffers();\n}\n\nvoid RenderCommandAdapter::setUniform(const UniformDesc& uniformDesc,\n                                      const void* data,\n                                      Result* outResult) {\n  uniformAdapter_.setUniform(uniformDesc, data, outResult);\n}\n\nvoid RenderCommandAdapter::setUniformBuffer(Buffer* buffer,\n                                            size_t offset,\n                                            size_t size,\n                                            uint32_t index,\n                                            Result* outResult) {\n  uniformAdapter_.setUniformBuffer(buffer, offset, size, index, outResult);\n}\n\nvoid RenderCommandAdapter::clearVertexTexture() {\n  vertexTextureStates_ = TextureStates();\n  vertexTextureStatesDirty_.reset();\n}\n\nvoid RenderCommandAdapter::setVertexTexture(ITexture* texture, size_t index, Result* outResult) {\n  if (!IGL_DEBUG_VERIFY(index < IGL_TEXTURE_SAMPLERS_MAX)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid);\n    return;\n  }\n  if (vertexTextureStates_[index].first != texture) {\n    vertexTextureStates_[index].first = texture;\n    SET_DIRTY(vertexTextureStatesDirty_, index);\n  }\n  Result::setOk(outResult);\n}\n\nvoid RenderCommandAdapter::setVertexSamplerState(ISamplerState* samplerState,\n                                                 size_t index,\n                                                 Result* outResult) {\n  if (!IGL_DEBUG_VERIFY(index < IGL_TEXTURE_SAMPLERS_MAX)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid);\n    return;\n  }\n  if (vertexTextureStates_[index].second != samplerState) {\n    vertexTextureStates_[index].second = samplerState;\n    SET_DIRTY(vertexTextureStatesDirty_, index);\n  }\n  Result::setOk(outResult);\n}\n\nvoid RenderCommandAdapter::clearFragmentTexture() {\n  fragmentTextureStates_ = TextureStates();\n  fragmentTextureStatesDirty_.reset();\n}\n\nvoid RenderCommandAdapter::setFragmentTexture(ITexture* texture, size_t index, Result* outResult) {\n  if (!IGL_DEBUG_VERIFY(index < IGL_TEXTURE_SAMPLERS_MAX)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid);\n    return;\n  }\n  if (fragmentTextureStates_[index].first != texture) {\n    fragmentTextureStates_[index].first = texture;\n    SET_DIRTY(fragmentTextureStatesDirty_, index);\n  }\n  Result::setOk(outResult);\n}\n\nvoid RenderCommandAdapter::setFragmentSamplerState(ISamplerState* samplerState,\n                                                   size_t index,\n                                                   Result* outResult) {\n  if (!IGL_DEBUG_VERIFY(index < IGL_TEXTURE_SAMPLERS_MAX)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid);\n    return;\n  }\n  if (fragmentTextureStates_[index].second != samplerState) {\n    fragmentTextureStates_[index].second = samplerState;\n    SET_DIRTY(fragmentTextureStatesDirty_, index);\n  }\n  Result::setOk(outResult);\n}\n\n// When pipelineState is modified, all dependent resources are cleared\nvoid RenderCommandAdapter::clearDependentResources(\n    const std::shared_ptr<IRenderPipelineState>& newValue,\n    Result* outResult) {\n  auto* curStateOpenGL = static_cast<RenderPipelineState*>(pipelineState_.get());\n  if (!IGL_DEBUG_VERIFY(curStateOpenGL)) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"pipeline state is null\");\n    return;\n  }\n\n  auto* newStateOpenGL = static_cast<RenderPipelineState*>(newValue.get());\n\n  if (!newStateOpenGL || !curStateOpenGL->matchesShaderProgram(*newStateOpenGL)) {\n    // Don't use previously set resources. Uniforms/texture locations not same between programs\n    uniformAdapter_.clearUniformBuffers();\n    clearVertexTexture();\n    clearFragmentTexture();\n  }\n\n  if (curStateOpenGL && newStateOpenGL) {\n    newStateOpenGL->savePrevPipelineStateAttributesLocations(*curStateOpenGL);\n  }\n\n  if (!newStateOpenGL || !curStateOpenGL->matchesVertexInputState(*newStateOpenGL)) {\n    // Don't reuse previously set vertex buffers.\n    clearVertexBuffers();\n  }\n  Result::setOk(outResult);\n}\n\nvoid RenderCommandAdapter::setPipelineState(const std::shared_ptr<IRenderPipelineState>& newValue,\n                                            Result* outResult) {\n  Result::setOk(outResult);\n  if (pipelineState_) {\n    clearDependentResources(newValue, outResult); // Only clear if pipeline state was previously set\n  }\n  pipelineState_ = newValue;\n  setDirty(StateMask::PIPELINE);\n}\n\nvoid RenderCommandAdapter::drawArrays(GLenum mode, GLint first, GLsizei count) {\n  willDraw();\n  getContext().drawArrays(toMockWireframeMode(mode), first, count);\n  didDraw();\n}\n\nvoid RenderCommandAdapter::drawArraysIndirect(GLenum mode,\n                                              Buffer& indirectBuffer,\n                                              const GLvoid* indirectBufferOffset) {\n  willDraw();\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DrawArraysIndirect)) {\n    bindBufferWithShaderStorageBufferOverride(indirectBuffer, GL_DRAW_INDIRECT_BUFFER);\n    getContext().drawArraysIndirect(toMockWireframeMode(mode), indirectBufferOffset);\n  } else {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n  didDraw();\n}\n\nvoid RenderCommandAdapter::drawArraysInstanced(GLenum mode,\n                                               GLint first,\n                                               GLsizei count,\n                                               GLsizei instancecount) {\n  willDraw();\n  if (getContext().deviceFeatures().hasFeature(DeviceFeatures::DrawInstanced)) {\n    getContext().drawArraysInstanced(toMockWireframeMode(mode), first, count, instancecount);\n  } else {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n  didDraw();\n}\n\nvoid RenderCommandAdapter::drawElements(GLenum mode,\n                                        GLsizei indexCount,\n                                        GLenum indexType,\n                                        const GLvoid* indexOffset) {\n  willDraw();\n  getContext().drawElements(toMockWireframeMode(mode), indexCount, indexType, indexOffset);\n  didDraw();\n}\n\nvoid RenderCommandAdapter::drawElementsInstanced(GLenum mode,\n                                                 GLsizei indexCount,\n                                                 GLenum indexType,\n                                                 const GLvoid* indexOffset,\n                                                 GLsizei instancecount) {\n  willDraw();\n  if (getContext().deviceFeatures().hasFeature(DeviceFeatures::DrawInstanced)) {\n    getContext().drawElementsInstanced(\n        toMockWireframeMode(mode), indexCount, indexType, indexOffset, instancecount);\n  } else {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n  didDraw();\n}\n\nvoid RenderCommandAdapter::drawElementsIndirect(GLenum mode,\n                                                GLenum indexType,\n                                                Buffer& indirectBuffer,\n                                                const GLvoid* indirectBufferOffset) {\n  willDraw();\n  if (getContext().deviceFeatures().hasFeature(DeviceFeatures::DrawIndexedIndirect)) {\n    bindBufferWithShaderStorageBufferOverride(indirectBuffer, GL_DRAW_INDIRECT_BUFFER);\n    getContext().drawElementsIndirect(toMockWireframeMode(mode), indexType, indirectBufferOffset);\n  } else {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n  didDraw();\n}\n\nvoid RenderCommandAdapter::multiDrawArraysIndirect(GLenum mode,\n                                                   Buffer& indirectBuffer,\n                                                   const GLvoid* indirectBufferOffset,\n                                                   GLsizei drawcount,\n                                                   GLsizei stride) {\n  willDraw();\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::MultiDrawIndirect)) {\n    bindBufferWithShaderStorageBufferOverride(indirectBuffer, GL_DRAW_INDIRECT_BUFFER);\n    getContext().multiDrawArraysIndirect(\n        toMockWireframeMode(mode), indirectBufferOffset, drawcount, stride);\n  } else {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n  didDraw();\n}\n\nvoid RenderCommandAdapter::multiDrawElementsIndirect(GLenum mode,\n                                                     GLenum indexType,\n                                                     Buffer& indirectBuffer,\n                                                     const GLvoid* indirectBufferOffset,\n                                                     GLsizei drawcount,\n                                                     GLsizei stride) {\n  willDraw();\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::MultiDrawIndirect)) {\n    bindBufferWithShaderStorageBufferOverride(indirectBuffer, GL_DRAW_INDIRECT_BUFFER);\n    getContext().multiDrawElementsIndirect(\n        toMockWireframeMode(mode), indexType, indirectBufferOffset, drawcount, stride);\n  } else {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  }\n  didDraw();\n}\n\nvoid RenderCommandAdapter::endEncoding() {\n  // Some minimal cleanup needs to occur in order. Otherwise, OpenGL can end in a bad state\n  // with complex rendering.\n  if (pipelineState_) {\n    unbindVertexAttributes();\n  }\n\n  pipelineState_ = nullptr;\n  depthStencilState_ = nullptr;\n\n  uniformAdapter_.shrinkUniformUsage();\n  uniformAdapter_.clearUniformBuffers();\n  vertexTextureStates_ = TextureStates();\n  fragmentTextureStates_ = TextureStates();\n\n  vertexBuffersDirty_.reset();\n  vertexTextureStatesDirty_.reset();\n  fragmentTextureStatesDirty_.reset();\n  dirtyStateBits_ = EnumToValue(StateMask::NONE);\n}\n\nvoid RenderCommandAdapter::willDraw() {\n  Result ret;\n  auto* pipelineState = static_cast<RenderPipelineState*>(pipelineState_.get());\n\n  // Vertex Buffers must be bound before pipelineState->bind()\n  if (pipelineState) {\n    pipelineState->clearActiveAttributesLocations();\n    for (size_t bufferIndex = 0; bufferIndex < IGL_BUFFER_BINDINGS_MAX; ++bufferIndex) {\n      if (IS_DIRTY(vertexBuffersDirty_, bufferIndex)) {\n        auto& bufferState = vertexBuffers_[bufferIndex];\n        bindBufferWithShaderStorageBufferOverride((*bufferState.resource), GL_ARRAY_BUFFER);\n        // now bind the vertex attributes corresponding to this vertex buffer\n        pipelineState->bindVertexAttributes(bufferIndex, bufferState.offset);\n        CLEAR_DIRTY(vertexBuffersDirty_, bufferIndex);\n      }\n    }\n    pipelineState->unbindPrevPipelineVertexAttributes();\n    if (isDirty(StateMask::PIPELINE)) {\n      pipelineState->bind();\n      clearDirty(StateMask::PIPELINE);\n    }\n  }\n\n  auto* depthStencilState = static_cast<DepthStencilState*>(depthStencilState_.get());\n  if (depthStencilState && isDirty(StateMask::DepthStencil)) {\n    depthStencilState->bind(frontStencilReferenceValue_, backStencilReferenceValue_);\n    clearDirty(StateMask::DepthStencil);\n  }\n\n  // We store 2 parallel vectors (one for uniforms and one for uniform blocks)\n  // that behave as a queue of uniforms waiting to be issued to the GPU.\n  // These were set between the previous draw call and the current draw call.\n  // At the end of the draw call, the queue can be treated as empty since we\n  // don't need to re-issue them (they'll carry over to the next draw call unless\n  // a subsequent uniform at the same location is bound).\n  //\n  // Various error-checking does _not_ happen in production, since this is the \"inner loop\":\n  //\n  // * Duplicate uniform and uniform block at same location (one in each vector)\n  // * Duplicate uniforms in the vector with the same location (same for uniform blocks)\n  //\n  // These should be considered client bugs, so an assert fires in local dev builds.\n\n  // this is actually compile time defined and doesn't change, cached these statically.\n  static const size_t kVertexTextureStatesSize = vertexTextureStates_.size();\n  static const size_t kFragmentTextureStatesSize = fragmentTextureStates_.size();\n  if (pipelineState) {\n    // Bind uniforms to be used for render\n    uniformAdapter_.bindToPipeline(getContext());\n    for (size_t index = 0; index < kVertexTextureStatesSize; index++) {\n      if (!IS_DIRTY(vertexTextureStatesDirty_, index)) {\n        continue;\n      }\n      auto& textureState = vertexTextureStates_[index];\n      if (auto* texture = static_cast<Texture*>(textureState.first)) {\n        if (IGL_DEBUG_VERIFY_NOT(texture == nullptr)) {\n          continue;\n        }\n        ret = pipelineState->bindTextureUnit(index, igl::BindTarget::kVertex, *texture);\n\n        if (!ret.isOk()) {\n          IGL_LOG_INFO_ONCE(ret.message.c_str());\n          continue;\n        }\n\n        if (auto* samplerState = static_cast<SamplerState*>(textureState.second)) {\n          samplerState->bind(texture);\n        }\n        CLEAR_DIRTY(vertexTextureStatesDirty_, index);\n      }\n    }\n    for (size_t index = 0; index < kFragmentTextureStatesSize; index++) {\n      if (!IS_DIRTY(fragmentTextureStatesDirty_, index)) {\n        continue;\n      }\n      auto& textureState = fragmentTextureStates_[index];\n      if (auto* texture = static_cast<Texture*>(textureState.first)) {\n        if (IGL_DEBUG_VERIFY_NOT(texture == nullptr)) {\n          continue;\n        }\n        ret = pipelineState->bindTextureUnit(index, igl::BindTarget::kFragment, *texture);\n\n        if (!ret.isOk()) {\n          IGL_LOG_INFO_ONCE(ret.message.c_str());\n          continue;\n        }\n\n        if (auto* samplerState = static_cast<SamplerState*>(textureState.second)) {\n          samplerState->bind(texture);\n        }\n        CLEAR_DIRTY(fragmentTextureStatesDirty_, index);\n      }\n    }\n\n    if (getContext().shouldValidateShaders()) {\n      const auto* stages = pipelineState->getShaderStages();\n      if (stages) {\n        const auto result = stages->validate();\n        IGL_DEBUG_ASSERT(result.isOk(), result.message.c_str());\n      }\n    }\n  }\n}\n\nGLenum RenderCommandAdapter::toMockWireframeMode(GLenum mode) const {\n#if defined(IGL_OPENGL_ES)\n  auto* const pipelineState = static_cast<RenderPipelineState*>(pipelineState_.get());\n  const bool modeNeedsConversion = mode == GL_TRIANGLES || mode != GL_TRIANGLE_STRIP;\n  if (pipelineState->getPolygonFillMode() == igl::PolygonFillMode::Line && modeNeedsConversion) {\n    return GL_LINE_STRIP;\n  }\n#endif\n\n  return mode;\n}\n\nvoid RenderCommandAdapter::didDraw() {\n  // Placeholder stub in case we want to add something later\n}\n\nvoid RenderCommandAdapter::unbindVertexAttributes() {\n  auto* pipelineState = static_cast<RenderPipelineState*>(pipelineState_.get());\n  if (pipelineState) {\n    pipelineState->unbindVertexAttributes();\n  }\n}\n\nvoid RenderCommandAdapter::bindBufferWithShaderStorageBufferOverride(\n    Buffer& buffer,\n    GLenum overrideTargetForShaderStorageBuffer) {\n  auto& arrayBuffer = static_cast<ArrayBuffer&>(buffer);\n  if (arrayBuffer.getTarget() == GL_SHADER_STORAGE_BUFFER) {\n    arrayBuffer.bindForTarget(overrideTargetForShaderStorageBuffer);\n  } else {\n    arrayBuffer.bind();\n  }\n}\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/RenderCommandAdapter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <bitset>\n#include <functional>\n#include <igl/Common.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/UnbindPolicy.h>\n#include <igl/opengl/UniformAdapter.h>\n#include <igl/opengl/WithContext.h>\n\nnamespace igl {\nclass IFramebuffer;\nclass ITexture;\nclass IDepthStencilState;\nclass ISamplerState;\nstruct RenderPassDesc;\nclass IRenderPipelineState;\n\nnamespace opengl {\nclass Buffer;\nclass VertexArrayObject;\n\nclass RenderCommandAdapter final : public WithContext {\n public:\n  using StateBits = uint32_t;\n  enum class StateMask : StateBits { NONE = 0, PIPELINE = 1 << 1, DepthStencil = 1 << 2 };\n\n private:\n  struct BufferState {\n    Buffer* resource = nullptr;\n    size_t offset = 0;\n  };\n\n  using TextureState = std::pair<ITexture*, ISamplerState*>;\n  using TextureStates = std::array<TextureState, IGL_TEXTURE_SAMPLERS_MAX>;\n\n public:\n  static std::unique_ptr<RenderCommandAdapter> create(\n      IContext& context,\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      Result* outResult);\n\n  void setViewport(const Viewport& viewport);\n\n  void setScissorRect(const ScissorRect& rect);\n\n  void setDepthStencilState(const std::shared_ptr<IDepthStencilState>& newValue);\n  void setStencilReferenceValue(uint32_t value);\n  void setBlendColor(const Color& color);\n  void setDepthBias(float depthBias, float slopeScale, float clamp);\n\n  void clearVertexBuffers();\n  void setVertexBuffer(Buffer& buffer, size_t offset, size_t index, Result* outResult = nullptr);\n  void setIndexBuffer(Buffer& buffer);\n\n  void clearUniformBuffers();\n  void setUniformBuffer(Buffer* buffer,\n                        size_t offset,\n                        size_t size,\n                        uint32_t index,\n                        Result* outResult = nullptr);\n  void setUniform(const UniformDesc& uniformDesc, const void* data, Result* outResult = nullptr);\n\n  void clearVertexTexture();\n  void setVertexTexture(ITexture* texture, size_t index, Result* outResult = nullptr);\n  void setVertexSamplerState(ISamplerState* samplerState,\n                             size_t index,\n                             Result* outResult = nullptr);\n\n  void clearFragmentTexture();\n  void setFragmentTexture(ITexture* texture, size_t index, Result* outResult = nullptr);\n  void setFragmentSamplerState(ISamplerState* samplerState,\n                               size_t index,\n                               Result* outResult = nullptr);\n\n  void setPipelineState(const std::shared_ptr<IRenderPipelineState>& newValue,\n                        Result* outResult = nullptr);\n\n  void drawArrays(GLenum mode, GLint first, GLsizei count);\n  void drawArraysIndirect(GLenum mode, Buffer& indirectBuffer, const GLvoid* indirectBufferOffset);\n  void drawArraysInstanced(GLenum mode, GLint first, GLsizei count, GLsizei instancecount);\n  void drawElements(GLenum mode, GLsizei indexCount, GLenum indexType, const GLvoid* indexOffset);\n  void drawElementsInstanced(GLenum mode,\n                             GLsizei indexCount,\n                             GLenum indexType,\n                             const GLvoid* indexOffset,\n                             GLsizei instancecount);\n  void drawElementsIndirect(GLenum mode,\n                            GLenum indexType,\n                            Buffer& indirectBuffer,\n                            const GLvoid* indirectBufferOffset);\n  void multiDrawArraysIndirect(GLenum mode,\n                               Buffer& indirectBuffer,\n                               const GLvoid* indirectBufferOffset,\n                               GLsizei drawcount,\n                               GLsizei stride);\n  void multiDrawElementsIndirect(GLenum mode,\n                                 GLenum indexType,\n                                 Buffer& indirectBuffer,\n                                 const GLvoid* indirectBufferOffset,\n                                 GLsizei drawcount,\n                                 GLsizei stride);\n\n  void endEncoding();\n\n  void initialize(const RenderPassDesc& renderPass,\n                  const std::shared_ptr<IFramebuffer>& framebuffer,\n                  Result* outResult);\n\n  [[nodiscard]] const igl::IRenderPipelineState& pipelineState() const {\n    IGL_DEBUG_ASSERT(pipelineState_, \"No rendering pipeline is bound\");\n    return *pipelineState_;\n  }\n\n private:\n  explicit RenderCommandAdapter(IContext& context);\n\n  void clearDependentResources(const std::shared_ptr<IRenderPipelineState>& newValue,\n                               Result* outResult = nullptr);\n  void willDraw();\n  void didDraw();\n  void unbindVertexAttributes();\n\n  void bindBufferWithShaderStorageBufferOverride(Buffer& buffer,\n                                                 GLenum overrideTargetForShaderStorageBuffer);\n\n  [[nodiscard]] bool isDirty(StateMask mask) const {\n    return (dirtyStateBits_ & EnumToValue(mask)) != 0;\n  }\n  void setDirty(StateMask mask) {\n    dirtyStateBits_ |= EnumToValue(mask);\n  }\n  void clearDirty(StateMask mask) {\n    dirtyStateBits_ &= ~EnumToValue(mask);\n  }\n\n  // @brief OpenGL ES doesn't support glPolygonMode. To support rendering wireframe with it\n  // we change all triangle drawing modes to GL_LINE_STRIP\n  [[nodiscard]] GLenum toMockWireframeMode(GLenum mode) const;\n\n private:\n  std::array<BufferState, IGL_BUFFER_BINDINGS_MAX> vertexBuffers_;\n  std::bitset<IGL_BUFFER_BINDINGS_MAX> vertexBuffersDirty_;\n  std::bitset<IGL_TEXTURE_SAMPLERS_MAX> vertexTextureStatesDirty_;\n  std::bitset<IGL_TEXTURE_SAMPLERS_MAX> fragmentTextureStatesDirty_;\n  TextureStates vertexTextureStates_;\n  TextureStates fragmentTextureStates_;\n  UniformAdapter uniformAdapter_;\n  StateBits dirtyStateBits_ = EnumToValue(StateMask::NONE);\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<IDepthStencilState> depthStencilState_;\n  std::shared_ptr<VertexArrayObject> activeVAO_ = nullptr;\n  uint32_t frontStencilReferenceValue_ = 0xFF;\n  uint32_t backStencilReferenceValue_ = 0xFF;\n\n  bool useVAO_ = false;\n};\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/RenderCommandEncoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/RenderCommandEncoder.h>\n\n#include <igl/DepthStencilState.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/opengl/Buffer.h>\n#include <igl/opengl/CommandBuffer.h>\n#include <igl/opengl/Framebuffer.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/PlatformDevice.h>\n#include <igl/opengl/RenderCommandAdapter.h>\n#include <igl/opengl/TimestampQueries.h>\n#include <igl/opengl/UniformAdapter.h>\n\nnamespace igl::opengl {\n\nnamespace {\nGLenum toGlPrimitive(PrimitiveType primitiveType) {\n  GLenum result = GL_TRIANGLES;\n  switch (primitiveType) {\n  case PrimitiveType::Point:\n    result = GL_POINTS;\n    break;\n  case PrimitiveType::Line:\n    result = GL_LINES;\n    break;\n  case PrimitiveType::LineStrip:\n    result = GL_LINE_STRIP;\n    break;\n  case PrimitiveType::Triangle:\n    break;\n  case PrimitiveType::TriangleStrip:\n    result = GL_TRIANGLE_STRIP;\n    break;\n  }\n  return result;\n}\n\nGLenum toGlType(IndexFormat format) {\n  switch (format) {\n  case IndexFormat::UInt8:\n    return GL_UNSIGNED_BYTE;\n  case IndexFormat::UInt16:\n    return GL_UNSIGNED_SHORT;\n  case IndexFormat::UInt32:\n    return GL_UNSIGNED_INT;\n  }\n  IGL_UNREACHABLE_RETURN(GL_UNSIGNED_INT)\n}\n\nuint8_t getIndexByteSize(GLenum indexType) {\n  switch (indexType) {\n  case GL_UNSIGNED_BYTE:\n    return 1u;\n  case GL_UNSIGNED_SHORT:\n    return 2u;\n  case GL_UNSIGNED_INT:\n    return 4u;\n  }\n  IGL_UNREACHABLE_RETURN(4u)\n}\n\n} // namespace\n\nRenderCommandEncoder::RenderCommandEncoder(const std::shared_ptr<CommandBuffer>& commandBuffer) :\n  IRenderCommandEncoder(commandBuffer),\n  WithContext(static_cast<CommandBuffer&>(getCommandBuffer()).getContext()) {}\n\nstd::unique_ptr<RenderCommandEncoder> RenderCommandEncoder::create(\n    const std::shared_ptr<CommandBuffer>& commandBuffer,\n    const RenderPassDesc& renderPass,\n    const std::shared_ptr<IFramebuffer>& framebuffer,\n    const Dependencies& /*dependencies*/,\n    Result* outResult) {\n  if (!commandBuffer) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"commandBuffer was null\");\n    return {};\n  }\n\n  // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)\n  std::unique_ptr<RenderCommandEncoder> newEncoder(new RenderCommandEncoder(commandBuffer));\n  newEncoder->beginEncoding(renderPass, framebuffer, outResult);\n  return newEncoder;\n}\n\nRenderCommandEncoder::~RenderCommandEncoder() = default;\n\nvoid RenderCommandEncoder::beginEncoding(const RenderPassDesc& renderPass,\n                                         const std::shared_ptr<IFramebuffer>& framebuffer,\n                                         Result* outResult) {\n  // Save caller state\n  auto& context = getContext();\n\n  scissorEnabled_ = (context.isEnabled(GL_SCISSOR_TEST) != 0u);\n  context.disable(GL_SCISSOR_TEST); // only turn on if bindScissorRect is called\n\n  auto& pool = context.getAdapterPool();\n  if (pool.empty()) {\n    Result result;\n    adapter_ = RenderCommandAdapter::create(context, renderPass, framebuffer, &result);\n    if (!result.isOk()) {\n      if (outResult) {\n        *outResult = result;\n      }\n      return;\n    }\n  } else {\n    Result result;\n    adapter_ = std::move(pool[pool.size() - 1]);\n    pool.pop_back();\n    adapter_->initialize(renderPass, framebuffer, &result);\n    if (!result.isOk()) {\n      if (outResult) {\n        *outResult = result;\n      }\n      return;\n    }\n  }\n  framebuffer_ = std::static_pointer_cast<Framebuffer>(framebuffer);\n  resolveFramebuffer_ = framebuffer_->getResolveFramebuffer();\n\n  // GPU timing: if the render pass descriptor contains a timestamp query,\n  // start a GL_TIME_ELAPSED query to measure this render pass's GPU time.\n  if (renderPass.timestampQuery.queries) {\n    timestampQueries_ = renderPass.timestampQuery.queries;\n    static_cast<TimestampQueries&>(*timestampQueries_)\n        .beginElapsedQuery(renderPass.timestampQuery.slotIndex);\n  }\n\n  Result::setOk(outResult);\n}\n\nvoid RenderCommandEncoder::endEncoding() {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    // Restore caller state\n    getContext().setEnabled(scissorEnabled_, GL_SCISSOR_TEST);\n\n    // Disable depthBias\n    getContext().setEnabled(false, GL_POLYGON_OFFSET_FILL);\n    adapter_->setDepthBias(0.0f, 0.0f, 0.0f);\n\n    adapter_->endEncoding();\n    getContext().getAdapterPool().push_back(std::move(adapter_));\n\n    // GPU timing: end the GL_TIME_ELAPSED query after all draw calls.\n    if (timestampQueries_) {\n      static_cast<TimestampQueries&>(*timestampQueries_).endElapsedQuery();\n      timestampQueries_ = nullptr;\n    }\n\n    if (resolveFramebuffer_) {\n      Result outResult;\n      auto width = 0;\n      auto height = 0;\n      auto mask = 0;\n      auto sizeMatch = true;\n      if (resolveFramebuffer_->getColorAttachment(0)) {\n        const auto colorDimensions = resolveFramebuffer_->getColorAttachment(0)->getDimensions();\n        mask |= GL_COLOR_BUFFER_BIT;\n        width = static_cast<int>(colorDimensions.width);\n        height = static_cast<int>(colorDimensions.height);\n      }\n      if (resolveFramebuffer_->getDepthAttachment()) {\n        mask |= GL_DEPTH_BUFFER_BIT;\n        const auto depthDimensions = resolveFramebuffer_->getDepthAttachment()->getDimensions();\n        if (width != 0 && static_cast<int>(depthDimensions.width) != width) {\n          sizeMatch = false;\n        }\n        if (height != 0 && static_cast<int>(depthDimensions.height) != height) {\n          sizeMatch = false;\n        }\n        width = static_cast<int>(depthDimensions.width);\n        height = static_cast<int>(depthDimensions.height);\n      }\n      if (resolveFramebuffer_->getStencilAttachment()) {\n        const auto stencilDimensions = resolveFramebuffer_->getStencilAttachment()->getDimensions();\n        mask |= GL_STENCIL_BUFFER_BIT;\n        if (width != 0 && stencilDimensions.width != width) {\n          sizeMatch = false;\n        }\n        if (height != 0 && static_cast<int>(stencilDimensions.height) != height) {\n          sizeMatch = false;\n        }\n        width = static_cast<int>(stencilDimensions.width);\n        height = static_cast<int>(stencilDimensions.height);\n      }\n      IGL_DEBUG_ASSERT(mask != 0);\n\n      if (sizeMatch) {\n        igl::opengl::PlatformDevice::blitFramebuffer(framebuffer_,\n                                                     0,\n                                                     0,\n                                                     width,\n                                                     height,\n                                                     resolveFramebuffer_,\n                                                     0,\n                                                     0,\n                                                     width,\n                                                     height,\n                                                     mask,\n                                                     getContext(),\n                                                     &outResult);\n      } else {\n        IGL_DEBUG_ASSERT_NOT_REACHED();\n      }\n    }\n  }\n}\n\nvoid RenderCommandEncoder::pushDebugGroupLabel(const char* label,\n                                               const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(adapter_);\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugMessage)) {\n    getContext().pushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0, -1, label);\n  } else {\n    IGL_LOG_ERROR_ONCE(\n        \"RenderCommandEncoder::pushDebugGroupLabel not supported in this context!\\n\");\n  }\n}\n\nvoid RenderCommandEncoder::insertDebugEventLabel(const char* label,\n                                                 const igl::Color& /*color*/) const {\n  IGL_DEBUG_ASSERT(adapter_);\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugMessage)) {\n    getContext().debugMessageInsert(\n        GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0, GL_DEBUG_SEVERITY_LOW, -1, label);\n  } else {\n    IGL_LOG_ERROR_ONCE(\n        \"RenderCommandEncoder::insertDebugEventLabel not supported in this context!\\n\");\n  }\n}\n\nvoid RenderCommandEncoder::popDebugGroupLabel() const {\n  IGL_DEBUG_ASSERT(adapter_);\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugMessage)) {\n    getContext().popDebugGroup();\n  } else {\n    IGL_LOG_ERROR_ONCE(\"RenderCommandEncoder::popDebugGroupLabel not supported in this context!\\n\");\n  }\n}\n\nvoid RenderCommandEncoder::bindViewport(const Viewport& viewport) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->setViewport(viewport);\n  }\n}\n\nvoid RenderCommandEncoder::bindScissorRect(const ScissorRect& rect) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->setScissorRect(rect);\n  }\n}\n\nvoid RenderCommandEncoder::bindRenderPipelineState(\n    const std::shared_ptr<IRenderPipelineState>& pipelineState) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->setPipelineState(pipelineState);\n  }\n}\n\nvoid RenderCommandEncoder::bindDepthStencilState(\n    const std::shared_ptr<IDepthStencilState>& depthStencilState) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->setDepthStencilState(depthStencilState);\n  }\n}\n\nvoid RenderCommandEncoder::bindUniform(const UniformDesc& uniformDesc, const void* data) {\n  IGL_DEBUG_ASSERT(uniformDesc.location >= 0,\n                   \"Invalid location passed to bindUniformBuffer: %d\",\n                   uniformDesc.location);\n  IGL_DEBUG_ASSERT(data != nullptr, \"Data cannot be null\");\n  if (IGL_DEBUG_VERIFY(adapter_) && data) {\n    adapter_->setUniform(uniformDesc, data);\n  }\n}\n\nvoid RenderCommandEncoder::bindBuffer(uint32_t index,\n                                      uint8_t bindTarget,\n                                      IBuffer* buffer,\n                                      size_t offset,\n                                      size_t bufferSize) {\n  bindBuffer(index, buffer, offset, bufferSize);\n}\n\nvoid RenderCommandEncoder::bindBuffer(uint32_t index,\n                                      IBuffer* buffer,\n                                      size_t offset,\n                                      size_t bufferSize) {\n  if (IGL_DEBUG_VERIFY(adapter_) && buffer) {\n    auto* glBuffer = static_cast<Buffer*>(buffer);\n    auto bufferType = glBuffer->getType();\n\n    if (bufferType == Buffer::Type::Uniform) {\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    } else if (bufferType == Buffer::Type::UniformBlock) {\n      adapter_->setUniformBuffer(glBuffer, offset, bufferSize, index);\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    Buffer& glBuffer = static_cast<Buffer&>(buffer);\n\n    IGL_DEBUG_ASSERT(glBuffer.getType() == Buffer::Type::Attribute);\n\n    adapter_->setVertexBuffer(glBuffer, bufferOffset, static_cast<int>(index));\n  }\n}\n\nvoid RenderCommandEncoder::bindIndexBuffer(IBuffer& buffer,\n                                           IndexFormat format,\n                                           size_t bufferOffset) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    indexType_ = toGlType(format);\n    indexBufferOffset_ = reinterpret_cast<void*>(bufferOffset); // NOLINT(performance-no-int-to-ptr)\n    adapter_->setIndexBuffer((Buffer&)buffer);\n  }\n}\n\nvoid RenderCommandEncoder::bindBytes(size_t /*index*/,\n                                     uint8_t /*target*/,\n                                     const void* /*data*/,\n                                     size_t /*length*/) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid RenderCommandEncoder::bindPushConstants(const void* /*data*/,\n                                             size_t /*length*/,\n                                             size_t /*offset*/) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nvoid RenderCommandEncoder::bindSamplerState(size_t index,\n                                            uint8_t bindTarget,\n                                            ISamplerState* samplerState) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    if ((bindTarget & BindTarget::kVertex) != 0) {\n      adapter_->setVertexSamplerState(samplerState, index);\n    }\n    if ((bindTarget & BindTarget::kFragment) != 0) {\n      adapter_->setFragmentSamplerState(samplerState, index);\n    }\n  }\n}\n\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nvoid RenderCommandEncoder::bindTexture(size_t index, uint8_t bindTarget, ITexture* texture) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    if ((bindTarget & BindTarget::kVertex) != 0) {\n      adapter_->setVertexTexture(texture, index);\n    }\n    if ((bindTarget & BindTarget::kFragment) != 0) {\n      adapter_->setFragmentTexture(texture, index);\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindTexture(size_t index, ITexture* texture) {\n  bindTexture(index, igl::BindTarget::kFragment, texture);\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nvoid RenderCommandEncoder::draw(size_t vertexCount,\n                                uint32_t instanceCount,\n                                uint32_t firstVertex,\n                                uint32_t baseInstance) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  (void)baseInstance;\n\n  IGL_DEBUG_ASSERT(baseInstance == 0, \"Instancing is not implemented\");\n\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    getCommandBuffer().incrementCurrentDrawCount();\n    auto mode = toGlPrimitive(adapter_->pipelineState().getRenderPipelineDesc().topology);\n    if (instanceCount > 1) {\n      adapter_->drawArraysInstanced(\n          mode, (GLsizei)firstVertex, (GLsizei)vertexCount, (GLsizei)instanceCount);\n    } else {\n      adapter_->drawArrays(mode, (GLsizei)firstVertex, (GLsizei)vertexCount);\n    }\n  }\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nvoid RenderCommandEncoder::drawIndexed(size_t indexCount,\n                                       uint32_t instanceCount,\n                                       uint32_t firstIndex,\n                                       int32_t vertexOffset,\n                                       uint32_t baseInstance) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  (void)vertexOffset;\n  (void)baseInstance;\n\n  IGL_DEBUG_ASSERT(vertexOffset == 0, \"vertexOffset is not implemented\");\n  IGL_DEBUG_ASSERT(baseInstance == 0, \"Instancing is not implemented\");\n  IGL_DEBUG_ASSERT(indexType_, \"No index buffer bound\");\n\n  const size_t indexOffsetBytes = static_cast<size_t>(firstIndex) * getIndexByteSize(indexType_);\n\n  if (IGL_DEBUG_VERIFY(adapter_ && indexType_)) {\n    getCommandBuffer().incrementCurrentDrawCount();\n    auto mode = toGlPrimitive(adapter_->pipelineState().getRenderPipelineDesc().topology);\n    if (instanceCount > 1) {\n      adapter_->drawElementsInstanced(mode,\n                                      (GLsizei)indexCount,\n                                      indexType_,\n                                      (uint8_t*)indexBufferOffset_ + indexOffsetBytes,\n                                      instanceCount);\n    } else {\n      adapter_->drawElements(\n          mode, (GLsizei)indexCount, indexType_, (uint8_t*)indexBufferOffset_ + indexOffsetBytes);\n    }\n  }\n}\n\nvoid RenderCommandEncoder::drawMeshTasks(const Dimensions& threadgroupsPerGrid,\n                                         const Dimensions& threadsPerTaskThreadgroup,\n                                         const Dimensions& threadsPerMeshThreadgroup) {\n  (void)threadgroupsPerGrid;\n  (void)threadsPerTaskThreadgroup;\n  (void)threadsPerMeshThreadgroup;\n\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nvoid RenderCommandEncoder::multiDrawIndirect(IBuffer& indirectBuffer,\n                                             size_t indirectBufferOffset,\n                                             uint32_t drawCount,\n                                             uint32_t stride) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    getCommandBuffer().incrementCurrentDrawCount();\n    const auto mode = toGlPrimitive(adapter_->pipelineState().getRenderPipelineDesc().topology);\n    const auto* indirectBufferOffsetPtr =\n        reinterpret_cast<uint8_t*>(indirectBufferOffset); // NOLINT(performance-no-int-to-ptr)\n    const GLsizei effectiveStride = stride ? stride : 16u; // sizeof(DrawArraysIndirectCommand)\n    if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::MultiDrawIndirect)) {\n      adapter_->multiDrawArraysIndirect(\n          mode, (Buffer&)indirectBuffer, indirectBufferOffsetPtr, drawCount, effectiveStride);\n    } else {\n      for (uint32_t i = 0; i != drawCount; i++) {\n        adapter_->drawArraysIndirect(mode, (Buffer&)indirectBuffer, indirectBufferOffsetPtr);\n        indirectBufferOffsetPtr += effectiveStride;\n      }\n    }\n  }\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nvoid RenderCommandEncoder::multiDrawIndexedIndirect(IBuffer& indirectBuffer,\n                                                    size_t indirectBufferOffset,\n                                                    uint32_t drawCount,\n                                                    uint32_t stride) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  IGL_DEBUG_ASSERT(indexType_, \"No index buffer bound\");\n\n  if (IGL_DEBUG_VERIFY(adapter_ && indexType_)) {\n    getCommandBuffer().incrementCurrentDrawCount();\n    const auto mode = toGlPrimitive(adapter_->pipelineState().getRenderPipelineDesc().topology);\n    const auto* indirectBufferOffsetPtr =\n        reinterpret_cast<uint8_t*>(indirectBufferOffset); // NOLINT(performance-no-int-to-ptr)\n    const GLsizei effectiveStride = stride ? stride : 20u; // sizeof(DrawElementsIndirectCommand)\n    if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::MultiDrawIndirect)) {\n      adapter_->multiDrawElementsIndirect(mode,\n                                          indexType_,\n                                          (Buffer&)indirectBuffer,\n                                          indirectBufferOffsetPtr,\n                                          drawCount,\n                                          effectiveStride);\n    } else {\n      for (uint32_t i = 0; i != drawCount; i++) {\n        adapter_->drawElementsIndirect(\n            mode, indexType_, (Buffer&)indirectBuffer, indirectBufferOffsetPtr);\n        indirectBufferOffsetPtr += effectiveStride;\n      }\n    }\n  }\n}\n\nvoid RenderCommandEncoder::setStencilReferenceValue(uint32_t value) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->setStencilReferenceValue(value);\n  }\n}\n\nvoid RenderCommandEncoder::setBlendColor(const Color& color) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->setBlendColor(color);\n  }\n}\n\nvoid RenderCommandEncoder::setDepthBias(float depthBias, float slopeScale, float clamp) {\n  if (IGL_DEBUG_VERIFY(adapter_)) {\n    adapter_->setDepthBias(depthBias, slopeScale, clamp);\n  }\n}\n\nvoid RenderCommandEncoder::bindBindGroup(BindGroupTextureHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n\n  const BindGroupTextureDesc* desc = getContext().bindGroupTexturesPool.get(handle);\n\n  for (uint32_t i = 0; i != IGL_TEXTURE_SAMPLERS_MAX; i++) {\n    if (desc->textures[i]) {\n      IGL_DEBUG_ASSERT(desc->samplers[i]);\n      bindTexture(i, BindTarget::kAllGraphics, desc->textures[i].get());\n      bindSamplerState(i, BindTarget::kAllGraphics, desc->samplers[i].get());\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindBindGroup(BindGroupBufferHandle handle,\n                                         uint32_t numDynamicOffsets,\n                                         const uint32_t* dynamicOffsets) {\n  if (handle.empty()) {\n    return;\n  }\n\n  const BindGroupBufferDesc* desc = getContext().bindGroupBuffersPool.get(handle);\n\n  uint32_t dynamicOffset = 0;\n\n  for (uint32_t i = 0; i != IGL_UNIFORM_BLOCKS_BINDING_MAX; i++) {\n    if (desc->buffers[i]) {\n      if (desc->isDynamicBufferMask & (1 << i)) {\n        IGL_DEBUG_ASSERT(dynamicOffsets, \"No dynamic offsets provided\");\n        IGL_DEBUG_ASSERT(dynamicOffset < numDynamicOffsets, \"Not enough dynamic offsets provided\");\n        bindBuffer(i,\n                   desc->buffers[i].get(),\n                   desc->offset[i] + dynamicOffsets[dynamicOffset++],\n                   desc->size[i]);\n      } else {\n        bindBuffer(i, desc->buffers[i].get(), desc->offset[i], desc->size[i]);\n      }\n    }\n  }\n\n  IGL_DEBUG_ASSERT(dynamicOffset == numDynamicOffsets, \"Not all dynamic offsets were consumed\");\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/RenderCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/TimestampQueries.h>\n#include <igl/opengl/Framebuffer.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/UniformAdapter.h>\n\nnamespace igl {\nclass IDepthStencilState;\nclass IRenderPipelineState;\nclass ISamplerState;\nnamespace opengl {\n\nclass CommandBuffer;\n\nclass RenderCommandEncoder final : public IRenderCommandEncoder, public WithContext {\n public:\n  static std::unique_ptr<RenderCommandEncoder> create(\n      const std::shared_ptr<CommandBuffer>& commandBuffer,\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      const Dependencies& dependencies,\n      Result* outResult);\n\n  ~RenderCommandEncoder() override;\n\n private:\n  explicit RenderCommandEncoder(const std::shared_ptr<CommandBuffer>& commandBuffer);\n  void beginEncoding(const RenderPassDesc& renderPass,\n                     const std::shared_ptr<IFramebuffer>& framebuffer,\n                     Result* outResult);\n\n public:\n  void endEncoding() override;\n\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n  void insertDebugEventLabel(const char* label, const igl::Color& color) const override;\n  void popDebugGroupLabel() const override;\n\n  void bindViewport(const Viewport& viewport) override;\n  void bindScissorRect(const ScissorRect& rect) override;\n\n  void bindRenderPipelineState(const std::shared_ptr<IRenderPipelineState>& pipelineState) override;\n  void bindDepthStencilState(const std::shared_ptr<IDepthStencilState>& depthStencilState) override;\n\n  // Binds a non-block uniform (eg. opengl 2.0 shader)\n  // The data pointer must remain valid until the commandBuffer's execution has been completed by\n  // CommandQueue::submit()\n  void bindUniform(const UniformDesc& uniformDesc, const void* data) override;\n  void bindBuffer(uint32_t index,\n                  uint8_t target,\n                  IBuffer* buffer,\n                  size_t bufferOffset,\n                  size_t bufferSize) override;\n  void bindBuffer(uint32_t index, IBuffer* buffer, size_t bufferOffset, size_t bufferSize) override;\n  void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) override;\n  void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset) override;\n  void bindBytes(size_t index, uint8_t target, const void* data, size_t length) override;\n  void bindPushConstants(const void* data, size_t length, size_t offset) override;\n  void bindSamplerState(size_t index, uint8_t target, ISamplerState* samplerState) override;\n  void bindTexture(size_t index, uint8_t target, ITexture* texture) override;\n  void bindTexture(size_t index, ITexture* texture) override;\n\n  void bindBindGroup(BindGroupTextureHandle handle) override;\n  void bindBindGroup(BindGroupBufferHandle handle,\n                     uint32_t numDynamicOffsets,\n                     const uint32_t* dynamicOffsets) override;\n\n  void draw(size_t vertexCount,\n            uint32_t instanceCount,\n            uint32_t firstVertex,\n            uint32_t baseInstance) override;\n  void drawIndexed(size_t indexCount,\n                   uint32_t instanceCount,\n                   uint32_t firstIndex,\n                   int32_t vertexOffset,\n                   uint32_t baseInstance) override;\n  void drawMeshTasks(const Dimensions& threadgroupsPerGrid,\n                     const Dimensions& threadsPerTaskThreadgroup,\n                     const Dimensions& threadsPerMeshThreadgroup) override;\n  void multiDrawIndirect(IBuffer& indirectBuffer,\n                         size_t indirectBufferOffset,\n                         uint32_t drawCount,\n                         uint32_t stride) override;\n  void multiDrawIndexedIndirect(IBuffer& indirectBuffer,\n                                size_t indirectBufferOffset,\n                                uint32_t drawCount,\n                                uint32_t stride) override;\n\n  void setStencilReferenceValue(uint32_t value) override;\n  void setBlendColor(const Color& color) override;\n  void setDepthBias(float depthBias, float slopeScale, float clamp) override;\n\n private:\n  std::unique_ptr<RenderCommandAdapter> adapter_;\n  bool scissorEnabled_ = false;\n  GLenum indexType_ = 0;\n  void* indexBufferOffset_ = nullptr;\n  std::shared_ptr<Framebuffer> resolveFramebuffer_;\n  std::shared_ptr<Framebuffer> framebuffer_;\n\n  /// GPU timing: descriptor-based elapsed query from RenderPassDesc.\n  /// When set, GL_TIME_ELAPSED query is started in beginEncoding()\n  /// and ended in endEncoding().\n  std::shared_ptr<ITimestampQueries> timestampQueries_;\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/RenderPipelineReflection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"RenderPipelineReflection.h\"\n\n#include <cstring>\n#include <igl/opengl/GLIncludes.h>\n\nnamespace {\n\nigl::UniformType toIGLUniformType(GLenum type) {\n  switch (type) {\n  case GL_FLOAT:\n    return igl::UniformType::Float;\n  case GL_FLOAT_VEC2:\n    return igl::UniformType::Float2;\n  case GL_FLOAT_VEC3:\n    return igl::UniformType::Float3;\n  case GL_FLOAT_VEC4:\n    return igl::UniformType::Float4;\n  case GL_BOOL:\n    return igl::UniformType::Boolean;\n  case GL_INT:\n    return igl::UniformType::Int;\n  case GL_INT_VEC2:\n    return igl::UniformType::Int2;\n  case GL_INT_VEC3:\n    return igl::UniformType::Int3;\n  case GL_INT_VEC4:\n    return igl::UniformType::Int4;\n  case GL_FLOAT_MAT2:\n    return igl::UniformType::Mat2x2;\n  case GL_FLOAT_MAT3:\n    return igl::UniformType::Mat3x3;\n  case GL_FLOAT_MAT4:\n    return igl::UniformType::Mat4x4;\n  default:\n    IGL_LOG_ERROR(\"Unsupported uniform type: 0x%04x\\n\", type);\n    return igl::UniformType::Invalid;\n  }\n}\n\nigl::TextureType toIGLTextureType(GLenum type) {\n  switch (type) {\n  case GL_SAMPLER_2D:\n\n#if (defined(GL_VERSION_2_0) && GL_VERSION_2_0) || (defined(GL_ES_VERSION_3_0) && GL_ES_VERSION_3_0)\n  case GL_SAMPLER_2D_SHADOW:\n#elif defined(GL_ES_VERSION_2_0) && GL_ES_VERSION_2_0\n  case GL_SAMPLER_2D_SHADOW_EXT:\n#elif defined(GL_ARB_shader_objects) && GL_ARB_shader_objects\n  case GL_SAMPLER_2D_SHADOW_ARB:\n#endif\n  case GL_IMAGE_2D:\n  case GL_IMAGE_2D_MULTISAMPLE:\n    return igl::TextureType::TwoD;\n  case GL_SAMPLER_2D_ARRAY:\n  case GL_IMAGE_2D_ARRAY:\n  case GL_IMAGE_2D_MULTISAMPLE_ARRAY:\n    return igl::TextureType::TwoDArray;\n  case GL_SAMPLER_3D:\n  case GL_IMAGE_3D:\n    return igl::TextureType::ThreeD;\n  case GL_SAMPLER_CUBE:\n  case GL_IMAGE_CUBE:\n    return igl::TextureType::Cube;\n  case GL_SAMPLER_EXTERNAL_OES:\n#if defined(GL_EXT_YUV_target)\n  case GL_SAMPLER_EXTERNAL_2D_Y2Y_EXT:\n#endif\n    return igl::TextureType::ExternalImage;\n  default:\n    return igl::TextureType::Invalid;\n  }\n}\n\n} // namespace\n\nnamespace igl::opengl {\n\nRenderPipelineReflection::RenderPipelineReflection(IContext& context, const ShaderStages& stages) {\n  if (context.deviceFeatures().hasFeature(DeviceFeatures::UniformBlocks)) {\n    generateUniformBlocksDictionary(context, stages.getProgramID());\n  }\n  generateUniformDictionary(context, stages.getProgramID());\n  generateAttributeDictionary(context, stages.getProgramID());\n  generateShaderStorageBufferObjectDictionary(context, stages.getProgramID());\n  cacheDescriptors();\n}\n\nRenderPipelineReflection::~RenderPipelineReflection() = default;\n\nvoid RenderPipelineReflection::generateUniformDictionary(IContext& context, GLuint pid) {\n  IGL_DEBUG_ASSERT(pid != 0);\n  uniformDictionary_.clear();\n\n  GLint count = 0;\n  context.getProgramiv(pid, GL_ACTIVE_UNIFORMS, &count);\n\n  // We compute max uniform length by querying GL_ACTIVE_UNIFORM_MAX_LENGTH, and then taking the max\n  // of that with every GL_UNIFORM_NAME_LENGTH of each of the uniforms. This is needed because we\n  // observed that OpenGL drivers are sometimes unreliable with these values:\n  //\n  // 1. Android devices with old Mali GPUs (e.g. Mali-T860MP2) sometimes incorrectly return 0 for\n  // GL_ACTIVE_UNIFORM_MAX_LENGTH\n  //\n  // 2. When running macOS unit tests, sometimes GL_UNIFORM_NAME_LENGTH always return 0\n  //\n  // So the safe thing to do here is to take the max of the two.\n\n  GLint maxUniformNameLength = 0;\n  context.getProgramiv(pid, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxUniformNameLength);\n\n#ifdef GL_UNIFORM_NAME_LENGTH\n  auto glVersion = context.deviceFeatures().getGLVersion();\n  const bool supportsGetActiveUniformsiv =\n      glVersion == GLVersion::v3_0_ES || glVersion == GLVersion::v3_1_ES ||\n      glVersion == GLVersion::v3_2_ES || glVersion >= GLVersion::v3_1;\n  if (supportsGetActiveUniformsiv && count > 0) {\n    std::vector<GLuint> indices(count);\n    for (int i = 0; i < count; ++i) {\n      indices[i] = static_cast<GLuint>(i);\n    }\n    std::vector<GLint> nameLengths(count);\n    context.getActiveUniformsiv(\n        pid, count, indices.data(), GL_UNIFORM_NAME_LENGTH, nameLengths.data());\n\n    for (int i = 0; i < count; ++i) {\n      maxUniformNameLength = std::max(maxUniformNameLength, nameLengths[i]);\n    }\n  }\n#endif\n\n  std::vector<GLchar> cname(maxUniformNameLength);\n  for (int i = 0; i < count; i++) {\n    GLsizei length = 0;\n    GLsizei size = 0;\n    GLenum type = GL_NONE;\n\n    context.getActiveUniform(pid, i, maxUniformNameLength, &length, &size, &type, cname.data());\n    const GLint location = context.getUniformLocation(pid, cname.data());\n    if (location < 0) {\n      // this uniform belongs to a block;\n      continue;\n    }\n\n    if (length >= 4 && std::strcmp(cname.data() + length - 3, \"[0]\") == 0) {\n      length = length - 3; // remove '[0]' for arrays\n    }\n    auto name = std::string(cname.data(), cname.data() + length);\n    const UniformDesc u(size, location, type);\n    uniformDictionary_.insert(std::make_pair(igl::genNameHandle(name), u));\n  }\n}\n\nvoid RenderPipelineReflection::generateUniformBlocksDictionary(IContext& context, GLuint pid) {\n  IGL_DEBUG_ASSERT(pid != 0);\n  uniformBlocksDictionary_.clear();\n\n  GLint numBlocks = 0;\n  GLint maxBlockNameLength = 0;\n  context.getProgramiv(pid, GL_ACTIVE_UNIFORM_BLOCKS, &numBlocks);\n  if (numBlocks <= 0) {\n    return;\n  }\n  context.getProgramiv(pid, GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, &maxBlockNameLength);\n  if (maxBlockNameLength <= 0) {\n    return;\n  }\n\n  GLint maxUniformNameLength = 0;\n  context.getProgramiv(pid, GL_ACTIVE_UNIFORM_MAX_LENGTH, &maxUniformNameLength);\n\n  std::vector<GLchar> uniformBlockNameData;\n  for (int i = 0; i < numBlocks; i++) {\n    UniformBlockDesc blockDesc;\n    blockDesc.blockIndex = i;\n\n    // Get uniform block name\n    uniformBlockNameData.assign(maxBlockNameLength, '\\0');\n    GLsizei blockNameLength = 0;\n    context.getActiveUniformBlockName(pid,\n                                      blockDesc.blockIndex,\n                                      maxBlockNameLength,\n                                      &blockNameLength,\n                                      uniformBlockNameData.data());\n    const std::string uniformBlockName(uniformBlockNameData.begin(),\n                                       uniformBlockNameData.begin() + blockNameLength);\n\n    context.getActiveUniformBlockiv(\n        pid, blockDesc.blockIndex, GL_UNIFORM_BLOCK_DATA_SIZE, &blockDesc.size);\n    context.getActiveUniformBlockiv(\n        pid, blockDesc.blockIndex, GL_UNIFORM_BLOCK_BINDING, &blockDesc.bindingIndex);\n\n    // get the number of uniforms in the block\n    GLint numActiveUniforms = 0;\n    context.getActiveUniformBlockiv(\n        pid, blockDesc.blockIndex, GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS, &numActiveUniforms);\n\n    // Get the indices of the uniforms in the block\n    std::vector<GLint> indices(numActiveUniforms);\n    context.getActiveUniformBlockiv(\n        pid, blockDesc.blockIndex, GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES, indices.data());\n\n    std::vector<GLchar> nameData;\n    for (size_t k = 0; k < numActiveUniforms; k++) {\n      const GLuint index = indices[k];\n      UniformBlockDesc::UniformBlockMemberDesc memberDesc;\n      // Get uniform block name, type, size\n      nameData.assign(maxUniformNameLength, '\\0');\n      GLsizei nameLength = 0;\n      // size  will be 1 for non-arrays; For arrays, it is the number of elements\n      context.getActiveUniform(pid,\n                               indices[k],\n                               maxUniformNameLength,\n                               &nameLength,\n                               &memberDesc.size,\n                               &memberDesc.type,\n                               nameData.data());\n      context.getActiveUniformsiv(pid, 1, &index, GL_UNIFORM_OFFSET, &memberDesc.offset);\n\n      // Fix the name by removing [0] suffix for arrays\n      // and by stripping the block name from the uniform name\n      if (nameLength >= 4 && nameData[nameLength - 3] == '[' && nameData[nameLength - 2] == '0' &&\n          nameData[nameLength - 1] == ']') {\n        nameLength = nameLength - 3; // remove '[0]' for arrays\n      }\n\n      auto start = nameData.begin();\n      auto end = nameData.begin() + nameLength;\n      // strip the block name from the uniform name\n      auto it = std::find(start, end, '.');\n      if (it != end) {\n        start = it + 1;\n      }\n      const std::string uniformName(start, end);\n\n      blockDesc.members.insert(std::make_pair(igl::genNameHandle(uniformName), memberDesc));\n    }\n    uniformBlocksDictionary_[igl::genNameHandle(uniformBlockName)] = blockDesc;\n  }\n}\n\nvoid RenderPipelineReflection::generateAttributeDictionary(IContext& context, GLuint pid) {\n  IGL_DEBUG_ASSERT(pid != 0);\n\n  attributeDictionary_.clear();\n  GLint maxAttributeNameLength = 0;\n  context.getProgramiv(pid, GL_ACTIVE_ATTRIBUTE_MAX_LENGTH, &maxAttributeNameLength);\n  GLint count = 0;\n  context.getProgramiv(pid, GL_ACTIVE_ATTRIBUTES, &count);\n\n  std::vector<GLchar> attribName(maxAttributeNameLength);\n  for (int i = 0; i < count; i++) {\n    GLsizei length = 0;\n    GLsizei size = 0;\n    GLenum type = GL_NONE;\n\n    context.getActiveAttrib(\n        pid, i, maxAttributeNameLength, &length, &size, &type, attribName.data());\n    auto name = std::string(attribName.data(), attribName.data() + length);\n    const GLint location = context.getAttribLocation(pid, name.c_str());\n\n    attributeDictionary_.insert(std::make_pair(name, location));\n  }\n}\n\nvoid RenderPipelineReflection::generateShaderStorageBufferObjectDictionary(IContext& context,\n                                                                           GLuint pid) {\n  if (context.deviceFeatures().hasFeature(DeviceFeatures::Compute)) {\n    IGL_DEBUG_ASSERT(pid != 0);\n    shaderStorageBufferObjectDictionary_.clear();\n\n    GLint maxSSBONameLength = 0;\n    context.getProgramInterfaceiv(\n        pid, GL_SHADER_STORAGE_BLOCK, GL_MAX_NAME_LENGTH, &maxSSBONameLength);\n    GLint count = 0;\n    context.getProgramInterfaceiv(pid, GL_SHADER_STORAGE_BLOCK, GL_ACTIVE_RESOURCES, &count);\n\n    std::vector<GLchar> cname(maxSSBONameLength);\n    for (int i = 0; i < count; i++) {\n      GLsizei length = 0;\n      context.getProgramResourceName(\n          pid, GL_SHADER_STORAGE_BLOCK, i, maxSSBONameLength, &length, cname.data());\n      auto name = std::string(cname.data(), cname.data() + length);\n      const GLuint index =\n          context.getProgramResourceIndex(pid, GL_SHADER_STORAGE_BLOCK, cname.data());\n      GLint location{-1};\n      const GLenum prop = GL_BUFFER_BINDING;\n      context.getProgramResourceiv(\n          pid, GL_SHADER_STORAGE_BLOCK, index, 1, &prop, 1, &length, &location);\n\n      shaderStorageBufferObjectDictionary_.insert(\n          std::make_pair(igl::genNameHandle(name), location));\n    }\n  }\n}\n\nint RenderPipelineReflection::getIndexByName(const NameHandle& name) const {\n  // Search through list of uniforms\n  const auto uniformEntry = uniformDictionary_.find(name);\n\n  if (uniformEntry != uniformDictionary_.end()) {\n    return uniformEntry->second.location;\n  }\n\n  // search through the list of uniform blocks\n  const auto uniformBlockEntry = uniformBlocksDictionary_.find(name);\n  if (uniformBlockEntry != uniformBlocksDictionary_.end()) {\n    return uniformBlockEntry->second.bindingIndex;\n  }\n\n  // Search through list of attributes\n  auto attribEntry = attributeDictionary_.find(name.toString());\n  if (attribEntry != attributeDictionary_.end()) {\n    return attribEntry->second;\n  }\n\n  // Search through list of SSBOs\n  auto ssboEntry = shaderStorageBufferObjectDictionary_.find(name);\n  if (ssboEntry != shaderStorageBufferObjectDictionary_.end()) {\n    return ssboEntry->second;\n  }\n\n  return -1;\n}\n\nvoid RenderPipelineReflection::cacheDescriptors() {\n  bufferArguments_.clear();\n  samplerArguments_.clear();\n  textureArguments_.clear();\n\n  for (const auto& entry : uniformDictionary_) {\n    const UniformDesc& glDesc = entry.second;\n    const igl::TextureType textureType = toIGLTextureType(glDesc.type);\n\n    // buffers\n    if (textureType == igl::TextureType::Invalid) {\n      const igl::UniformType uniformType = toIGLUniformType(glDesc.type);\n\n      BufferArgDesc bufferDesc;\n      bufferDesc.name = entry.first;\n      bufferDesc.bufferAlignment = 1;\n      bufferDesc.bufferDataSize = glDesc.size * igl::sizeForUniformType(uniformType);\n      bufferDesc.bufferIndex = glDesc.location;\n      bufferDesc.shaderStage = igl::ShaderStage::Fragment;\n\n      igl::BufferArgDesc::BufferMemberDesc iglMemberDesc{\n          entry.first,\n          uniformType,\n          0,\n          (size_t)glDesc.size,\n      };\n      bufferDesc.members.push_back(std::move(iglMemberDesc));\n\n      bufferArguments_.push_back(std::move(bufferDesc));\n    }\n    // textures & samplers\n    else {\n      TextureArgDesc textureDesc;\n      textureDesc.name = entry.first;\n      textureDesc.type = textureType;\n      textureDesc.textureIndex = glDesc.location;\n      textureDesc.shaderStage = igl::ShaderStage::Fragment;\n\n      // Create one artificial sampler for each texture\n      SamplerArgDesc samplerDesc;\n      samplerDesc.name = textureDesc.name;\n      samplerDesc.samplerIndex = textureDesc.textureIndex;\n      samplerDesc.shaderStage = textureDesc.shaderStage;\n\n      textureArguments_.push_back(std::move(textureDesc));\n      samplerArguments_.push_back(std::move(samplerDesc));\n    }\n  }\n\n  // uniform blocks\n  for (const auto& blockEntry : uniformBlocksDictionary_) {\n    const auto& blockDesc = blockEntry.second;\n    BufferArgDesc bufferDesc;\n    bufferDesc.isUniformBlock = true;\n    bufferDesc.name = blockEntry.first;\n    bufferDesc.bufferAlignment = 1;\n    bufferDesc.bufferDataSize = blockDesc.size;\n    bufferDesc.bufferIndex = blockDesc.blockIndex;\n    bufferDesc.shaderStage = igl::ShaderStage::Fragment;\n\n    for (const auto& uniformEntry : blockDesc.members) {\n      const auto& uniformDesc = uniformEntry.second;\n      const igl::UniformType uniformType = toIGLUniformType(uniformDesc.type);\n\n      igl::BufferArgDesc::BufferMemberDesc iglMemberDesc{\n          uniformEntry.first,\n          uniformType,\n          static_cast<size_t>(uniformDesc.offset),\n          static_cast<size_t>(uniformDesc.size),\n      };\n      bufferDesc.members.push_back(std::move(iglMemberDesc));\n    }\n    bufferArguments_.push_back(std::move(bufferDesc));\n  }\n}\n\nconst std::vector<BufferArgDesc>& RenderPipelineReflection::allUniformBuffers() const {\n  return bufferArguments_;\n}\n\nconst std::vector<SamplerArgDesc>& RenderPipelineReflection::allSamplers() const {\n  return samplerArguments_;\n}\n\nconst std::vector<TextureArgDesc>& RenderPipelineReflection::allTextures() const {\n  return textureArguments_;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/RenderPipelineReflection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <unordered_map>\n#include <igl/RenderPipelineReflection.h>\n#include <igl/opengl/GLIncludes.h> // @donotremove\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/Shader.h>\n\nnamespace igl::opengl {\n\nclass RenderPipelineReflection final : public IRenderPipelineReflection {\n public:\n  struct UniformDesc {\n    GLsizei size;\n    GLint location;\n    GLenum type;\n\n    // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n    UniformDesc(GLsizei s, GLint loc, GLenum t) : size(s), location(loc), type(t) {}\n  };\n\n  struct UniformBlockDesc {\n    struct UniformBlockMemberDesc {\n      GLsizei size = 0;\n      GLenum type = GL_NONE;\n      GLint offset = 0;\n    };\n\n    GLint size{};\n    GLint blockIndex{};\n    GLint bindingIndex = -1; // the block binding location, when set directly in the shader\n    std::unordered_map<NameHandle, UniformBlockMemberDesc> members;\n  };\n\n  [[nodiscard]] const std::vector<BufferArgDesc>& allUniformBuffers() const override;\n  [[nodiscard]] const std::vector<SamplerArgDesc>& allSamplers() const override;\n  [[nodiscard]] const std::vector<TextureArgDesc>& allTextures() const override;\n\n  [[nodiscard]] int getIndexByName(const NameHandle& name) const;\n\n  [[nodiscard]] const std::unordered_map<NameHandle, UniformDesc>& getUniformDictionary() const {\n    return uniformDictionary_;\n  }\n\n  [[nodiscard]] const std::unordered_map<NameHandle, UniformBlockDesc>& getUniformBlocksDictionary()\n      const {\n    return uniformBlocksDictionary_;\n  }\n\n  std::unordered_map<NameHandle, UniformBlockDesc>& getUniformBlocksDictionary() {\n    return uniformBlocksDictionary_;\n  }\n\n  [[nodiscard]] const std::unordered_map<std::string, int>& getAttributeDictionary() const {\n    return attributeDictionary_;\n  }\n\n  [[nodiscard]] const std::unordered_map<NameHandle, int>& getShaderStorageBufferObjectDictionary()\n      const {\n    return shaderStorageBufferObjectDictionary_;\n  }\n\n  RenderPipelineReflection(IContext& context, const ShaderStages& stages);\n  ~RenderPipelineReflection() override;\n\n private:\n  std::unordered_map<NameHandle, UniformDesc> uniformDictionary_;\n  std::unordered_map<NameHandle, UniformBlockDesc> uniformBlocksDictionary_;\n  std::unordered_map<std::string, int> attributeDictionary_;\n  std::unordered_map<NameHandle, int> shaderStorageBufferObjectDictionary_;\n\n  void generateUniformDictionary(IContext& context, GLuint pid);\n  void generateUniformBlocksDictionary(IContext& context, GLuint pid);\n  void generateShaderStorageBufferObjectDictionary(IContext& context, GLuint pid);\n  void generateAttributeDictionary(IContext& context, GLuint pid);\n\n  void cacheDescriptors();\n  std::vector<BufferArgDesc> bufferArguments_;\n  std::vector<SamplerArgDesc> samplerArguments_;\n  std::vector<TextureArgDesc> textureArguments_;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/RenderPipelineState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/RenderPipelineState.h>\n\n#include <igl/RenderCommandEncoder.h> // for igl::BindTarget\n#include <igl/opengl/VertexInputState.h>\n\nnamespace igl::opengl {\n\nnamespace {\n\nvoid logBlendFactorError(IGL_MAYBE_UNUSED const char* value) {\n  IGL_DEBUG_ABORT(\"OpenGL does not support blend mode:  %s, setting to GL_ONE instead\\n\", value);\n}\n\n} // namespace\n\nRenderPipelineState::RenderPipelineState(IContext& context,\n                                         const RenderPipelineDesc& desc,\n                                         Result* outResult) :\n  WithContext(context), IRenderPipelineState(desc) {\n  activeAttributesLocations_.reserve(64);\n  unitSamplerLocationMap_.fill(-1);\n  auto ret = create();\n  if (outResult) {\n    *outResult = ret;\n  }\n}\n\nRenderPipelineState::~RenderPipelineState() = default;\n\nGLenum RenderPipelineState::convertBlendOp(BlendOp value) {\n  // sets blending equation for both RGA and Alpha\n  switch (value) {\n  case BlendOp::Add:\n    return GL_FUNC_ADD;\n  case BlendOp::Subtract:\n    return GL_FUNC_SUBTRACT;\n  case BlendOp::ReverseSubtract:\n    return GL_FUNC_REVERSE_SUBTRACT;\n  case BlendOp::Min:\n    return GL_MIN;\n  case BlendOp::Max:\n    return GL_MAX;\n  }\n  IGL_UNREACHABLE_RETURN(GL_FUNC_ADD)\n}\n\nGLenum RenderPipelineState::convertBlendFactor(BlendFactor value) {\n  switch (value) {\n  case BlendFactor::Zero:\n    return GL_ZERO;\n  case BlendFactor::One:\n    return GL_ONE;\n  case BlendFactor::SrcColor:\n    return GL_SRC_COLOR;\n  case BlendFactor::OneMinusSrcColor:\n    return GL_ONE_MINUS_SRC_COLOR;\n  case BlendFactor::DstColor:\n    return GL_DST_COLOR;\n  case BlendFactor::OneMinusDstColor:\n    return GL_ONE_MINUS_DST_COLOR;\n  case BlendFactor::SrcAlpha:\n    return GL_SRC_ALPHA;\n  case BlendFactor::OneMinusSrcAlpha:\n    return GL_ONE_MINUS_SRC_ALPHA;\n  case BlendFactor::DstAlpha:\n    return GL_DST_ALPHA;\n  case BlendFactor::OneMinusDstAlpha:\n    return GL_ONE_MINUS_DST_ALPHA;\n  case BlendFactor::BlendColor:\n    return GL_CONSTANT_COLOR;\n  case BlendFactor::OneMinusBlendColor:\n    return GL_ONE_MINUS_CONSTANT_COLOR;\n  case BlendFactor::BlendAlpha:\n    return GL_CONSTANT_ALPHA;\n  case BlendFactor::OneMinusBlendAlpha:\n    return GL_ONE_MINUS_CONSTANT_ALPHA;\n  case BlendFactor::SrcAlphaSaturated:\n    return GL_SRC_ALPHA_SATURATE;\n  case BlendFactor::Src1Color:\n    logBlendFactorError(_IGL_TO_STRING_WRAPPER(GL_SRC1_COLOR));\n    return GL_ONE; // default for unsupported values\n  case BlendFactor::OneMinusSrc1Color:\n    logBlendFactorError(_IGL_TO_STRING_WRAPPER(GL_ONE_MINUS_SRC1_COLOR));\n    return GL_ONE; // default for unsupported values\n  case BlendFactor::Src1Alpha:\n    logBlendFactorError(_IGL_TO_STRING_WRAPPER(GL_SRC1_ALPHA));\n    return GL_ONE; // default for unsupported values\n  case BlendFactor::OneMinusSrc1Alpha:\n    logBlendFactorError(_IGL_TO_STRING_WRAPPER(GL_ONE_MINUS_SRC1_ALPHA));\n    return GL_ONE; // default for unsupported values\n  }\n  IGL_UNREACHABLE_RETURN(GL_ONE)\n}\n\nResult RenderPipelineState::create() {\n  if (IGL_DEBUG_VERIFY_NOT(desc_.shaderStages == nullptr)) {\n    return Result(Result::Code::ArgumentInvalid, \"Missing shader stages\");\n  }\n  if (!IGL_DEBUG_VERIFY(desc_.shaderStages->getType() == ShaderStagesType::Render)) {\n    return Result(Result::Code::ArgumentInvalid, \"Shader stages not for render\");\n  }\n  const auto* shaderStages = static_cast<ShaderStages*>(desc_.shaderStages.get());\n  if (!shaderStages) {\n    return Result(Result::Code::ArgumentInvalid,\n                  \"Shader stages required to create pipeline state.\");\n  }\n  if (shaderStages->getType() != ShaderStagesType::Render) {\n    return Result(Result::Code::ArgumentInvalid, \"Expected render shader stages.\");\n  } else if (!shaderStages->isValid()) {\n    return Result(Result::Code::ArgumentInvalid, \"Missing required shader module(s).\");\n  }\n\n  reflection_ = std::make_shared<RenderPipelineReflection>(getContext(), *shaderStages);\n\n  const auto& mFramebufferDesc = desc_.targetDesc;\n  // Get and cache all attribute locations, since this won't change throughout\n  // the lifetime of this RenderPipelineState\n  const auto* vertexInputState = static_cast<VertexInputState*>(desc_.vertexInputState.get());\n  if (desc_.vertexInputState != nullptr) {\n    auto bufferAttribMap = vertexInputState->getBufferAttribMap();\n\n    // For each bufferIndex, storage the list of associated attribute locations\n    for (const auto& [index, attribList] : bufferAttribMap) {\n      for (const auto& attrib : attribList) {\n        const int loc = getIndexByName(igl::genNameHandle(attrib.name), ShaderStage::Vertex);\n        if (loc < 0) {\n          IGL_LOG_ERROR(\"Vertex attribute (%s) not found in shader.\", attrib.name.c_str());\n        }\n        IGL_DEBUG_ASSERT(index < IGL_BUFFER_BINDINGS_MAX);\n        if (index < IGL_BUFFER_BINDINGS_MAX) {\n          bufferAttribLocations_[index].push_back(loc);\n        }\n      }\n    }\n  }\n\n  // Note this work is only done once. Beyond this point, there is no more query by name\n  for (const auto& [textureUnit, samplerName] : desc_.fragmentUnitSamplerMap) {\n    const int loc = reflection_->getIndexByName(samplerName);\n    if (loc >= 0) {\n      unitSamplerLocationMap_[textureUnit] = loc;\n    } else {\n      IGL_LOG_ERROR(\"Sampler uniform (%s) not found in shader.\\n\", samplerName.c_str());\n    }\n  }\n\n  for (const auto& [bindingIndex, names] : desc_.uniformBlockBindingMap) {\n    for (const auto& [blockName, instanceName] : names) {\n      auto& uniformBlockDict = reflection_->getUniformBlocksDictionary();\n      auto blockDescIt = uniformBlockDict.find(blockName);\n      if (blockDescIt != uniformBlockDict.end()) {\n        auto blockIndex = blockDescIt->second.blockIndex;\n        if (blockDescIt->second.bindingIndex > 0) {\n          //  avoid overriding explicit binding points from shaders because we observed\n          //  crashes when doing so on some Adreno devices.\n          uniformBlockBindingMap_[blockIndex] = blockDescIt->second.bindingIndex;\n        } else {\n          uniformBlockBindingMap_[blockIndex] = bindingIndex;\n          blockDescIt->second.bindingIndex = bindingIndex;\n        }\n      }\n    }\n  }\n\n  for (const auto& [textureUnit, samplerName] : desc_.vertexUnitSamplerMap) {\n    const int loc = reflection_->getIndexByName(samplerName);\n    if (loc < 0) {\n      IGL_LOG_ERROR(\"Sampler uniform (%s) not found in shader.\\n\", samplerName.c_str());\n      continue;\n    }\n\n    // find the first empty slot in unitSamplerLocationMap;\n    size_t realTextureUnit = 0;\n    for (; realTextureUnit < unitSamplerLocationMap_.size(); realTextureUnit++) {\n      if (unitSamplerLocationMap_[realTextureUnit] == -1) {\n        break;\n      }\n    }\n    if (realTextureUnit >= unitSamplerLocationMap_.size()) {\n      return Result{Result::Code::RuntimeError, \"Too many samplers\"};\n    }\n\n    vertexTextureUnitRemap_[textureUnit] = realTextureUnit;\n    unitSamplerLocationMap_[realTextureUnit] = loc;\n  }\n\n  if (!mFramebufferDesc.colorAttachments.empty()) {\n    const ColorWriteMask colorWriteMask = mFramebufferDesc.colorAttachments[0].colorWriteMask;\n    colorMask_[0] = static_cast<GLboolean>((colorWriteMask & kColorWriteBitsRed) != 0);\n    colorMask_[1] = static_cast<GLboolean>((colorWriteMask & kColorWriteBitsGreen) != 0);\n    colorMask_[2] = static_cast<GLboolean>((colorWriteMask & kColorWriteBitsBlue) != 0);\n    colorMask_[3] = static_cast<GLboolean>((colorWriteMask & kColorWriteBitsAlpha) != 0);\n  }\n\n  if (!mFramebufferDesc.colorAttachments.empty() &&\n      mFramebufferDesc.colorAttachments[0].blendEnabled) {\n    blendEnabled_ = true;\n    // GL equation sets blending equation for both RGB and alpha\n    blendMode_ = {convertBlendOp(mFramebufferDesc.colorAttachments[0].rgbBlendOp),\n                  convertBlendOp(mFramebufferDesc.colorAttachments[0].alphaBlendOp),\n                  convertBlendFactor(mFramebufferDesc.colorAttachments[0].srcRGBBlendFactor),\n                  convertBlendFactor(mFramebufferDesc.colorAttachments[0].dstRGBBlendFactor),\n                  convertBlendFactor(mFramebufferDesc.colorAttachments[0].srcAlphaBlendFactor),\n                  convertBlendFactor(mFramebufferDesc.colorAttachments[0].dstAlphaBlendFactor)};\n  } else {\n    blendEnabled_ = false;\n  }\n\n  return Result();\n}\n\nvoid RenderPipelineState::bind() {\n  if (desc_.shaderStages) {\n    const auto* shaderStages = static_cast<ShaderStages*>(desc_.shaderStages.get());\n    shaderStages->bind();\n    if (!uniformBlockBindingPointSet_) {\n      for (const auto& binding : uniformBlockBindingMap_) {\n        const auto& blockIndex = binding.first;\n        const auto& bindingIndex = binding.second;\n        getContext().uniformBlockBinding(shaderStages->getProgramID(), blockIndex, bindingIndex);\n      }\n      uniformBlockBindingPointSet_ = true;\n    }\n  }\n\n  getContext().colorMask(colorMask_[0], colorMask_[1], colorMask_[2], colorMask_[3]);\n  if (!desc_.targetDesc.colorAttachments.empty() && blendEnabled_) {\n    getContext().enable(GL_BLEND);\n    getContext().blendEquationSeparate(blendMode_.blendOpColor, blendMode_.blendOpAlpha);\n    getContext().blendFuncSeparate(\n        blendMode_.srcColor, blendMode_.dstColor, blendMode_.srcAlpha, blendMode_.dstAlpha);\n  } else {\n    getContext().disable(GL_BLEND);\n  }\n\n  // face cull mode\n  if (desc_.cullMode == CullMode::Disabled) {\n    getContext().disable(GL_CULL_FACE);\n  } else {\n    getContext().enable(GL_CULL_FACE);\n    getContext().cullFace(desc_.cullMode == CullMode::Front ? GL_FRONT : GL_BACK);\n  }\n\n  // face winding mode\n  getContext().frontFace((desc_.frontFaceWinding == WindingMode::Clockwise) ? GL_CW : GL_CCW);\n\n  // polygon rasterization mode\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::PolygonFillMode)) {\n    getContext().polygonFillMode((desc_.polygonFillMode == igl::PolygonFillMode::Fill) ? GL_FILL\n                                                                                       : GL_LINE);\n  }\n}\n\nvoid RenderPipelineState::unbind() {\n  if (desc_.shaderStages) {\n    static_cast<ShaderStages*>(desc_.shaderStages.get())->unbind();\n  }\n}\n\n// A buffer can be shared by multiple attributes. So bind all the attributes\n// associated with the associated buffer.\n// bufferOffset is an offset in bytes to the start of the vertex attributes in the buffer.\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nvoid RenderPipelineState::bindVertexAttributes(size_t bufferIndex, size_t bufferOffset) {\n#if IGL_DEBUG_ABORT_ENABLED\n  static GLint sMaxNumVertexAttribs = 0;\n  if (0 == sMaxNumVertexAttribs) {\n    getContext().getIntegerv(GL_MAX_VERTEX_ATTRIBS, &sMaxNumVertexAttribs);\n  }\n#endif\n\n  const auto& attribList = static_cast<VertexInputState*>(desc_.vertexInputState.get())\n                               ->getAssociatedAttributes(bufferIndex);\n  auto& locations = bufferAttribLocations_[bufferIndex];\n\n  // attributeList and locations should have an 1-to-1 correspondence\n  IGL_DEBUG_ASSERT(attribList.size() == locations.size());\n\n  for (size_t i = 0, iLen = attribList.size(); i < iLen; i++) {\n    auto location = locations[i];\n    if (location < 0) {\n      // Location not found\n      continue;\n    }\n    IGL_DEBUG_ASSERT(location < sMaxNumVertexAttribs);\n    activeAttributesLocations_.push_back(location);\n\n    prevPipelineStateAttributesLocations_.erase(\n        std::remove(prevPipelineStateAttributesLocations_.begin(),\n                    prevPipelineStateAttributesLocations_.end(),\n                    location),\n        prevPipelineStateAttributesLocations_.end());\n\n    getContext().enableVertexAttribArray(location);\n    const auto& attribute = attribList[i];\n    getContext().vertexAttribPointer(\n        location,\n        attribute.numComponents,\n        attribute.componentType,\n        attribute.normalized,\n        attribute.stride,\n        reinterpret_cast<const char*>(attribute.bufferOffset) + // NOLINT(performance-no-int-to-ptr)\n            bufferOffset);\n\n    if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::VertexAttribDivisor)) {\n      if (attribute.sampleFunction == igl::VertexSampleFunction::PerVertex) {\n        getContext().vertexAttribDivisor(location, 0);\n      } else if (attribute.sampleFunction == igl::VertexSampleFunction::Instance) {\n        getContext().vertexAttribDivisor(location, attribute.sampleRate);\n      } else {\n        getContext().vertexAttribDivisor(location, 0);\n      }\n    }\n  }\n}\n\nvoid RenderPipelineState::unbindVertexAttributes() {\n  for (const auto& l : activeAttributesLocations_) {\n    getContext().disableVertexAttribArray(l);\n  }\n  activeAttributesLocations_.clear();\n}\n\nvoid RenderPipelineState::unbindPrevPipelineVertexAttributes() {\n  for (const auto& l : prevPipelineStateAttributesLocations_) {\n    getContext().disableVertexAttribArray(l);\n  }\n  prevPipelineStateAttributesLocations_.clear();\n}\n\n// Looks up the location the of the specified texture unit via its name,\n// bind the unit to the location, then activate the unit.\n//\n// Prerequisite: The shader program has to be loaded\nResult RenderPipelineState::bindTextureUnit(const size_t unit,\n                                            uint8_t bindTarget,\n                                            Texture& texture) {\n  if (!desc_.shaderStages) {\n    return Result{Result::Code::InvalidOperation, \"No shader set\\n\"};\n  }\n\n  if (unit >= IGL_TEXTURE_SAMPLERS_MAX) {\n    return Result{Result::Code::ArgumentInvalid, \"Unit specified greater than maximum\\n\"};\n  }\n\n  GLint samplerLocation = -1;\n  if (bindTarget == igl::BindTarget::kVertex) {\n    auto it = vertexTextureUnitRemap_.find(unit);\n    if (it == vertexTextureUnitRemap_.end()) {\n      return Result{Result::Code::RuntimeError, \"Unable to find sampler location\\n\"};\n    }\n    auto realUnit = it->second;\n    samplerLocation = unitSamplerLocationMap_[realUnit];\n  } else {\n    samplerLocation = unitSamplerLocationMap_[unit];\n  }\n\n  if (samplerLocation < 0) {\n    return Result{Result::Code::RuntimeError, \"Unable to find sampler location\\n\"};\n  }\n\n  getContext().activeTexture(static_cast<GLenum>(GL_TEXTURE0 + unit));\n  texture.bind();\n  getContext().uniform1i(samplerLocation, static_cast<GLint>(unit));\n\n  return Result();\n}\n\nbool RenderPipelineState::matchesShaderProgram(const RenderPipelineState& rhs) const {\n  return static_cast<ShaderStages*>(desc_.shaderStages.get())->getProgramID() ==\n         static_cast<ShaderStages*>(rhs.desc_.shaderStages.get())->getProgramID();\n}\n\nbool RenderPipelineState::matchesVertexInputState(const RenderPipelineState& rhs) const {\n  return desc_.vertexInputState == rhs.desc_.vertexInputState;\n}\n\nint RenderPipelineState::getIndexByName(const NameHandle& name, ShaderStage /*stage*/) const {\n  if (reflection_ == nullptr) {\n    return -1;\n  }\n  return reflection_->getIndexByName(name);\n}\n\nint RenderPipelineState::getIndexByName(const std::string& name, ShaderStage /*stage*/) const {\n  if (reflection_ == nullptr) {\n    return -1;\n  }\n  return reflection_->getIndexByName(igl::genNameHandle(name));\n}\n\nint RenderPipelineState::getUniformBlockBindingPoint(const NameHandle& uniformBlockName) const {\n  return getIndexByName(uniformBlockName, ShaderStage::Fragment);\n}\n\nstd::shared_ptr<IRenderPipelineReflection> RenderPipelineState::renderPipelineReflection() {\n  return reflection_;\n}\n\nvoid RenderPipelineState::setRenderPipelineReflection(\n    const IRenderPipelineReflection& renderPipelineReflection) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  (void)renderPipelineReflection;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/RenderPipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <unordered_map>\n#include <igl/NameHandle.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/RenderPipelineReflection.h>\n#include <igl/opengl/Shader.h>\n#include <igl/opengl/Texture.h>\n\nnamespace igl::opengl {\n\nstruct BlendMode {\n  GLenum blendOpColor;\n  GLenum blendOpAlpha;\n  GLenum srcColor;\n  GLenum dstColor;\n  GLenum srcAlpha;\n  GLenum dstAlpha;\n};\n\nclass RenderPipelineState final : public WithContext, public IRenderPipelineState {\n  friend class Device;\n\n  Result create();\n\n public:\n  explicit RenderPipelineState(IContext& context,\n                               const RenderPipelineDesc& desc,\n                               Result* outResult);\n  ~RenderPipelineState() override;\n\n  void bind();\n  void unbind();\n  Result bindTextureUnit(size_t unit, uint8_t bindTarget, Texture& texture);\n\n  void bindVertexAttributes(size_t bufferIndex, size_t offset);\n  void unbindVertexAttributes();\n\n  [[nodiscard]] bool matchesShaderProgram(const RenderPipelineState& rhs) const;\n  [[nodiscard]] bool matchesVertexInputState(const RenderPipelineState& rhs) const;\n\n  [[nodiscard]] int getIndexByName(const NameHandle& name, ShaderStage stage) const override;\n  [[nodiscard]] int getIndexByName(const std::string& name, ShaderStage stage) const override;\n\n  [[nodiscard]] int getUniformBlockBindingPoint(const NameHandle& uniformBlockName) const;\n  [[nodiscard]] std::shared_ptr<IRenderPipelineReflection> renderPipelineReflection() override;\n  void setRenderPipelineReflection(\n      const IRenderPipelineReflection& renderPipelineReflection) override;\n\n  [[nodiscard]] static GLenum convertBlendOp(BlendOp value);\n  [[nodiscard]] static GLenum convertBlendFactor(BlendFactor value);\n  [[nodiscard]] CullMode getCullMode() const {\n    return desc_.cullMode;\n  }\n  [[nodiscard]] WindingMode getWindingMode() const {\n    return desc_.frontFaceWinding;\n  }\n  [[nodiscard]] PolygonFillMode getPolygonFillMode() const {\n    return desc_.polygonFillMode;\n  }\n\n  [[nodiscard]] const ShaderStages* getShaderStages() const {\n    return static_cast<ShaderStages*>(desc_.shaderStages.get());\n  }\n\n  void savePrevPipelineStateAttributesLocations(RenderPipelineState& prevPipelineState) {\n    prevPipelineStateAttributesLocations_ = std::move(prevPipelineState.activeAttributesLocations_);\n  }\n\n  void clearActiveAttributesLocations() {\n    activeAttributesLocations_.clear();\n  }\n\n  void unbindPrevPipelineVertexAttributes();\n\n private:\n  // Tracks a list of attribute locations associated with a bufferIndex\n  std::vector<int> bufferAttribLocations_[IGL_BUFFER_BINDINGS_MAX];\n\n  std::shared_ptr<RenderPipelineReflection> reflection_;\n  std::unordered_map<size_t, size_t> vertexTextureUnitRemap_;\n  std::array<GLint, IGL_TEXTURE_SAMPLERS_MAX> unitSamplerLocationMap_{};\n  std::unordered_map<int, size_t> uniformBlockBindingMap_;\n  std::array<GLboolean, 4> colorMask_ = {GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE};\n  std::vector<int> prevPipelineStateAttributesLocations_;\n  std::vector<int> activeAttributesLocations_;\n  BlendMode blendMode_ = {GL_FUNC_ADD, GL_FUNC_ADD, GL_ONE, GL_ZERO, GL_ONE, GL_ZERO};\n  bool blendEnabled_ = false;\n  bool uniformBlockBindingPointSet_ = false;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/SamplerState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/SamplerState.h>\n\n#include <igl/Common.h>\n#include <igl/Texture.h>\n#include <igl/opengl/DepthStencilState.h>\n#include <igl/opengl/Texture.h>\n\nnamespace igl::opengl {\nnamespace {\nbool isPowerOfTwo(size_t number) {\n  return (number & (number - 1)) == 0;\n}\n} // namespace\n\nSamplerState::SamplerState(IContext& context, const SamplerStateDesc& desc) :\n  WithContext(context),\n  minMipFilter_(convertMinMipFilter(desc.minFilter, desc.mipFilter)),\n  magFilter_(convertMagFilter(desc.magFilter)),\n  mipLodMin_(desc.mipLodMin),\n  mipLodMax_(desc.mipLodMax),\n  maxAnisotropy_(desc.maxAnisotropic),\n  addressU_(convertAddressMode(desc.addressModeU)),\n  addressV_(convertAddressMode(desc.addressModeV)),\n  addressW_(convertAddressMode(desc.addressModeW)),\n  depthCompareFunction_(DepthStencilState::convertCompareFunction(desc.depthCompareFunction)),\n  depthCompareEnabled_(desc.depthCompareEnabled),\n  isYUV_(desc.yuvFormat != igl::TextureFormat::Invalid) {\n  const std::hash<SamplerStateDesc> h;\n  hash_ = h(desc);\n}\n\nvoid SamplerState::bind(ITexture* t) {\n  if (IGL_DEBUG_VERIFY_NOT(t == nullptr)) {\n    return;\n  }\n\n  auto* texture = static_cast<Texture*>(t);\n  if (texture->getSamplerHash() == hash_) {\n    return;\n  }\n  texture->setSamplerHash(hash_);\n\n  auto type = texture->getType();\n  auto target = texture->toGLTarget(type);\n  if (target == 0) {\n    return;\n  }\n\n  const auto& deviceFeatures = getContext().deviceFeatures();\n  const bool isDepthOrDepthStencil = texture->getProperties().isDepthOrDepthStencil();\n  // From OpenGL ES 3.1 spec\n  // The effective internal format specified for the texture arrays is a sized internal depth or\n  // depth and stencil format (see table 8.14), the value of TEXTURE_COMPARE_MODE is NONE , and\n  // either the magnification filter is not NEAREST or the minification filter is neither\n  // NEAREST nor NEAREST_MIPMAP_NEAREST.\n  if (!depthCompareEnabled_ && isDepthOrDepthStencil && minMipFilter_ != GL_NEAREST &&\n      minMipFilter_ != GL_NEAREST_MIPMAP_NEAREST) {\n    IGL_LOG_INFO_ONCE(\n        \"OpenGL requires a GL_NEAREST or NEAREST_MIPMAP_NEAREST min filter for depth/stencil \"\n        \"samplers when DepthCompareEnabled is false, falling back to supported mode instead of \"\n        \"requested format.\");\n    auto supportedMode = GL_NEAREST;\n    if (minMipFilter_ == GL_LINEAR_MIPMAP_NEAREST || minMipFilter_ == GL_NEAREST_MIPMAP_LINEAR ||\n        minMipFilter_ == GL_LINEAR_MIPMAP_LINEAR) {\n      supportedMode = GL_NEAREST_MIPMAP_NEAREST;\n    }\n    getContext().texParameteri(target, GL_TEXTURE_MIN_FILTER, supportedMode);\n  } else {\n    getContext().texParameteri(target, GL_TEXTURE_MIN_FILTER, minMipFilter_);\n  }\n  if (!depthCompareEnabled_ && isDepthOrDepthStencil && magFilter_ != GL_NEAREST) {\n    IGL_LOG_INFO_ONCE(\n        \"OpenGL requires a GL_NEAREST mag filter for depth/stencil samplers when \"\n        \"DepthCompareEnabled is false, falling back to GL_NEAREST instead of requested format.\");\n    getContext().texParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);\n  } else {\n    getContext().texParameteri(target, GL_TEXTURE_MAG_FILTER, magFilter_);\n  }\n\n  // See https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/xhtml/glTexParameter.xml\n  // for OpenGL version information.\n  // Ensure we have mipmaps before setting this state. This should also catch special\n  // texture types that may not support mipmaps, like ExternalOES textures on Android\n  if (texture->getNumMipLevels() > 1 &&\n      deviceFeatures.hasFeature(DeviceFeatures::SamplerMinMaxLod)) {\n    getContext().texParameteri(target, GL_TEXTURE_MIN_LOD, mipLodMin_);\n    getContext().texParameteri(target, GL_TEXTURE_MAX_LOD, mipLodMax_);\n  }\n  if (deviceFeatures.hasFeature(DeviceFeatures::TextureFilterAnisotropic)) {\n    // @fb-only\n    // Disable the anisotropic filter for now, it's causing a crash on some devices\n#if 0\n    getContext().texParameteri(target, GL_TEXTURE_MAX_ANISOTROPY, maxAnisotropy_);\n#else\n    (void)maxAnisotropy_;\n#endif\n  }\n\n  if (isDepthOrDepthStencil &&\n      deviceFeatures.hasInternalFeature(InternalFeatures::TextureCompare)) {\n    getContext().texParameteri(target,\n                               GL_TEXTURE_COMPARE_MODE,\n                               depthCompareEnabled_ ? GL_COMPARE_REF_TO_TEXTURE : GL_NONE);\n    getContext().texParameteri(target, GL_TEXTURE_COMPARE_FUNC, depthCompareFunction_);\n  }\n\n  if (!deviceFeatures.hasFeature(DeviceFeatures::TextureNotPot)) {\n    const auto dimensions = texture->getDimensions();\n    if (!isPowerOfTwo(dimensions.width) || !isPowerOfTwo(dimensions.height)) {\n      getContext().texParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);\n      getContext().texParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);\n    } else {\n      getContext().texParameteri(target, GL_TEXTURE_WRAP_S, addressU_);\n      getContext().texParameteri(target, GL_TEXTURE_WRAP_T, addressV_);\n    }\n  } else {\n    getContext().texParameteri(target, GL_TEXTURE_WRAP_S, addressU_);\n    getContext().texParameteri(target, GL_TEXTURE_WRAP_T, addressV_);\n  }\n\n  if (type == TextureType::TwoDArray || type == TextureType::ThreeD) {\n    getContext().texParameteri(target, GL_TEXTURE_WRAP_R, addressW_);\n  }\n}\n\n// utility functions for converting from IGL sampler state enums to GL enums\nGLint SamplerState::convertMinMipFilter(SamplerMinMagFilter minFilter, SamplerMipFilter mipFilter) {\n  switch (mipFilter) {\n  case SamplerMipFilter::Disabled:\n    return (minFilter == SamplerMinMagFilter::Nearest) ? GL_NEAREST : GL_LINEAR;\n\n  case SamplerMipFilter::Nearest:\n    return (minFilter == SamplerMinMagFilter::Nearest) ? GL_NEAREST_MIPMAP_NEAREST\n                                                       : GL_LINEAR_MIPMAP_NEAREST;\n\n  case SamplerMipFilter::Linear:\n    return (minFilter == SamplerMinMagFilter::Nearest) ? GL_NEAREST_MIPMAP_LINEAR\n                                                       : GL_LINEAR_MIPMAP_LINEAR;\n  }\n\n  return 0;\n}\n\nGLint SamplerState::convertMagFilter(SamplerMinMagFilter magFilter) {\n  return (magFilter == SamplerMinMagFilter::Nearest) ? GL_NEAREST : GL_LINEAR;\n}\n\nSamplerMinMagFilter SamplerState::convertGLMagFilter(GLint glMagFilter) {\n  return (glMagFilter == GL_NEAREST) ? SamplerMinMagFilter::Nearest : SamplerMinMagFilter::Linear;\n}\n\nSamplerMinMagFilter SamplerState::convertGLMinFilter(GLint glMinFilter) {\n  switch (glMinFilter) {\n  case GL_NEAREST:\n  case GL_NEAREST_MIPMAP_NEAREST:\n  case GL_NEAREST_MIPMAP_LINEAR:\n    return SamplerMinMagFilter::Nearest;\n\n  case GL_LINEAR:\n  case GL_LINEAR_MIPMAP_NEAREST:\n  case GL_LINEAR_MIPMAP_LINEAR:\n    return SamplerMinMagFilter::Linear;\n\n  default:\n#ifndef GTEST\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n#endif\n  }\n\n  return SamplerMinMagFilter::Nearest;\n}\n\nSamplerMipFilter SamplerState::convertGLMipFilter(GLint glMinFilter) {\n  switch (glMinFilter) {\n  case GL_NEAREST:\n  case GL_LINEAR:\n    return SamplerMipFilter::Disabled;\n\n  case GL_NEAREST_MIPMAP_NEAREST:\n  case GL_LINEAR_MIPMAP_NEAREST:\n    return SamplerMipFilter::Nearest;\n\n  case GL_NEAREST_MIPMAP_LINEAR:\n  case GL_LINEAR_MIPMAP_LINEAR:\n    return SamplerMipFilter::Linear;\n\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return SamplerMipFilter::Disabled;\n  }\n  IGL_UNREACHABLE_RETURN(SamplerMipFilter::Disabled)\n}\n\nGLint SamplerState::convertAddressMode(SamplerAddressMode addressMode) {\n  switch (addressMode) {\n  case SamplerAddressMode::Repeat:\n    return GL_REPEAT;\n\n  case SamplerAddressMode::Clamp:\n    return GL_CLAMP_TO_EDGE;\n\n  case SamplerAddressMode::MirrorRepeat:\n    return GL_MIRRORED_REPEAT;\n  }\n\n  return 0;\n}\n\nSamplerAddressMode SamplerState::convertGLAddressMode(GLint glAddressMode) {\n  switch (glAddressMode) {\n  case GL_REPEAT:\n    return SamplerAddressMode::Repeat;\n\n  case GL_CLAMP_TO_EDGE:\n    return SamplerAddressMode::Clamp;\n\n  case GL_MIRRORED_REPEAT:\n    return SamplerAddressMode::MirrorRepeat;\n\n  default:\n    return SamplerAddressMode::Repeat;\n  }\n  IGL_UNREACHABLE_RETURN(SamplerAddressMode::Repeat)\n}\n\nbool SamplerState::isYUV() const noexcept {\n  return isYUV_;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/SamplerState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/SamplerState.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl {\n\nclass SamplerState final : public WithContext, public ISamplerState {\n public:\n  SamplerState(IContext& context, const SamplerStateDesc& desc);\n  void bind(ITexture* texture);\n\n  static GLint convertMinMipFilter(SamplerMinMagFilter minFilter, SamplerMipFilter mipFilter);\n  static GLint convertMagFilter(SamplerMinMagFilter magFilter);\n  static GLint convertAddressMode(SamplerAddressMode addressMode);\n  static SamplerAddressMode convertGLAddressMode(GLint glAddressMode);\n  static SamplerMinMagFilter convertGLMagFilter(GLint magFilter);\n  static SamplerMinMagFilter convertGLMinFilter(GLint minFilter);\n  static SamplerMipFilter convertGLMipFilter(GLint minFilter);\n\n  /**\n   * @brief Returns true if this sampler is a YUV sampler.\n   */\n  [[nodiscard]] bool isYUV() const noexcept override;\n\n private:\n  size_t hash_ = std::numeric_limits<size_t>::max();\n  GLint minMipFilter_;\n  GLint magFilter_;\n  GLfloat mipLodMin_;\n  GLfloat mipLodMax_;\n  GLfloat maxAnisotropy_;\n\n  GLint addressU_;\n  GLint addressV_;\n  GLint addressW_;\n\n  GLint depthCompareFunction_;\n  bool depthCompareEnabled_;\n  bool isYUV_;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Shader.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/Shader.h>\n\n#include <cstdlib>\n#include <cstring>\n#include <string>\n#include <igl/DeviceFeatures.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n\n#if IGL_SHADER_DUMP\n#include <filesystem>\n#include <fstream>\n#endif // IGL_SHADER_DUMP\n\nnamespace igl::opengl {\n\nShaderStages::ShaderStages(const ShaderStagesDesc& desc, IContext& context) :\n  IShaderStages(desc), WithContext(context) {}\n\nShaderStages::~ShaderStages() {\n  if (programID_ != 0) {\n    getContext().deleteProgram(programID_);\n    programID_ = 0;\n  }\n}\n\nvoid ShaderStages::createRenderProgram(Result* result) {\n  if (!IGL_DEBUG_VERIFY(getVertexModule())) {\n    // we need a vertex shader and a fragment shader in order to link the program\n    Result::setResult(\n        result, Result::Code::ArgumentInvalid, \"Missing required vertex shader stage\");\n    return;\n  }\n\n  if (!IGL_DEBUG_VERIFY(getFragmentModule())) {\n    // we need a vertex shader and a fragment shader in order to link the program\n    Result::setResult(\n        result, Result::Code::ArgumentInvalid, \"Missing required fragment shader stage\");\n    return;\n  }\n\n  const auto& vertexShader = static_cast<ShaderModule&>(*getVertexModule());\n  const auto& fragmentShader = static_cast<ShaderModule&>(*getFragmentModule());\n  const GLuint vertexShaderID = vertexShader.getShaderID();\n  const GLuint fragmentShaderID = fragmentShader.getShaderID();\n\n  if (vertexShaderID == 0 || fragmentShaderID == 0) {\n    // we need valid shaders in order to link the program\n    Result::setResult(result, Result::Code::ArgumentInvalid, \"Missing required shader stages\");\n    return;\n  }\n\n  // always create a new temp program ID\n  // we'll set or update this object's program ID after the linking succeeds\n  // otherwise we won't modify this program, so we can still use it\n  const GLuint programID = getContext().createProgram();\n  if (programID == 0) {\n    Result::setResult(result, Result::Code::RuntimeError, \"Failed to create GL program\");\n    return;\n  }\n\n  // attach the shaders and link them\n  getContext().attachShader(programID, vertexShaderID);\n  getContext().attachShader(programID, fragmentShaderID);\n  getContext().linkProgram(programID);\n\n  // detach the shaders now that they've been linked\n  getContext().detachShader(programID, vertexShaderID);\n  getContext().detachShader(programID, fragmentShaderID);\n\n  // check to see if the linking succeeded\n  GLint status = 0;\n  getContext().getProgramiv(programID, GL_LINK_STATUS, &status);\n  if (status == GL_FALSE) {\n    const std::string errorLog = getProgramInfoLog(programID);\n    IGL_LOG_ERROR(\"failed to link shaders:\\n%s\\n\", errorLog.c_str());\n\n    getContext().deleteProgram(programID);\n    Result::setResult(result, Result::Code::RuntimeError, errorLog);\n    return;\n  }\n\n  // now that the program successfully linked, set the program\n  if (programID_ != 0) {\n    getContext().deleteProgram(programID_);\n  }\n  programID_ = programID;\n\n  Result::setResult(result, Result::Code::Ok);\n}\n\nvoid ShaderStages::createComputeProgram(Result* result) {\n  if (!IGL_DEBUG_VERIFY(getComputeModule())) {\n    // we need a vertex shader and a fragment shader in order to link the program\n    Result::setResult(result, Result::Code::ArgumentInvalid, \"Missing required compute shader\");\n    return;\n  }\n\n  const auto& shader = static_cast<ShaderModule&>(*getComputeModule());\n\n  const GLuint shaderID = shader.getShaderID();\n\n  if (shaderID == 0) {\n    // we need valid shaders in order to link the program\n    Result::setResult(result, Result::Code::ArgumentInvalid, \"Missing required compute stage\");\n    return;\n  }\n\n  // always create a new temp program ID\n  // we'll set or update this object's program ID after the linking succeeds\n  // otherwise we won't modify this program, so we can still use it\n  const GLuint programID = getContext().createProgram();\n  if (programID == 0) {\n    Result::setResult(result, Result::Code::RuntimeError, \"Failed to create compute GL program\");\n    return;\n  }\n\n  // attach the shaders and link them\n  getContext().attachShader(programID, shaderID);\n  getContext().linkProgram(programID);\n\n  // detach the shaders now that they've been linked\n  getContext().detachShader(programID, shaderID);\n\n  // check to see if the linking succeeded\n  GLint status = 0;\n  getContext().getProgramiv(programID, GL_LINK_STATUS, &status);\n  if (status == GL_FALSE) {\n    const std::string errorLog = getProgramInfoLog(programID);\n    IGL_LOG_ERROR(\"failed to link compute shaders:\\n%s\\n\", errorLog.c_str());\n\n    getContext().deleteProgram(programID);\n    Result::setResult(result, Result::Code::RuntimeError, errorLog);\n    return;\n  }\n\n  // now that the program successfully linked, set the program\n  if (programID_ != 0) {\n    getContext().deleteProgram(programID_);\n  }\n  programID_ = programID;\n\n  Result::setResult(result, Result::Code::Ok);\n}\n\n// link the given shaders into this shader program\nResult ShaderStages::create(const ShaderStagesDesc& /*desc*/) {\n  Result result;\n  if (getType() == ShaderStagesType::Render) {\n    createRenderProgram(&result);\n  } else if (getType() == ShaderStagesType::Compute) {\n    createComputeProgram(&result);\n  } else {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n\n  return result;\n}\n\nResult ShaderStages::validate() const {\n  getContext().validateProgram(programID_);\n  GLint status = 0;\n  getContext().getProgramiv(programID_, GL_VALIDATE_STATUS, &status);\n  if (status == GL_FALSE) {\n    std::string errorLog = getProgramInfoLog(programID_);\n    IGL_LOG_ERROR(\"Failed to validate program:\\n%s\\n\", errorLog.c_str());\n    return Result(Result::Code::RuntimeError, std::move(errorLog));\n  }\n\n  return Result{};\n}\n\nvoid ShaderStages::bind() const {\n  getContext().useProgram(programID_);\n}\n\nvoid ShaderStages::unbind() const {\n  getContext().useProgram(0);\n}\n\nShaderModule::ShaderModule(IContext& context, ShaderModuleInfo info) :\n  WithContext(context), IShaderModule(std::move(info)) {}\n\nShaderModule::~ShaderModule() {\n  if (getContext().isDestructionAllowed() && shaderID_ != 0) {\n    getContext().deleteShader(shaderID_);\n    shaderID_ = 0;\n  }\n}\n\n// compile the shader from the given src shader code\nResult ShaderModule::create(const ShaderModuleDesc& desc) {\n  if (desc.input.type == ShaderInputType::Binary) {\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return Result(Result::Code::Unimplemented);\n  }\n\n  if (!desc.input.source || (*desc.input.source == '\\0')) {\n    Result result(Result::Code::ArgumentNull, \"Null shader source\");\n    return result;\n  }\n\n  switch (desc.info.stage) {\n  case ShaderStage::Vertex:\n    shaderType_ = GL_VERTEX_SHADER;\n    break;\n  case ShaderStage::Fragment:\n    shaderType_ = GL_FRAGMENT_SHADER;\n    break;\n  case ShaderStage::Compute:\n    if (getContext().deviceFeatures().hasFeature(DeviceFeatures::Compute)) {\n      shaderType_ = GL_COMPUTE_SHADER;\n      break;\n    } else {\n      return Result(Result::Code::Unimplemented, \"Compute shader for GL is not implemented\");\n    }\n  default:\n    IGL_LOG_ERROR(\"Shader stage type %u for GL is not supported\",\n                  static_cast<unsigned>(desc.info.stage));\n    return Result(Result::Code::ArgumentInvalid, \"Unknown shader type\");\n  }\n\n  // always create a new temp shader ID\n  // we'll set or update this object's shader ID after the compilation succeeds\n  // otherwise we won't modify this shader\n  const GLuint shaderID = getContext().createShader(shaderType_);\n  if (shaderID == 0) {\n    return Result(Result::Code::RuntimeError, \"Failed to create shader ID\");\n  }\n\n  if (!desc.debugName.empty() &&\n      getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugLabel)) {\n    const GLenum identifier = getContext().deviceFeatures().hasInternalRequirement(\n                                  InternalRequirement::DebugLabelExtEnumsReq)\n                                  ? GL_SHADER_OBJECT_EXT\n                                  : GL_SHADER;\n    getContext().objectLabel(identifier, shaderID, desc.debugName.size(), desc.debugName.c_str());\n  }\n\n  // compile the shader\n  const GLchar* src = (GLchar*)desc.input.source;\n\n#if IGL_SHADER_DUMP\n  auto hash = std::hash<const GLchar*>()(src);\n  std::string shaderStageExt;\n  switch (desc.info.stage) {\n  case ShaderStage::Vertex:\n    shaderStageExt = \".vert\";\n    break;\n  case ShaderStage::Fragment:\n    shaderStageExt = \".frag\";\n    break;\n  case ShaderStage::Compute:\n  default:\n    shaderStageExt = \".compute\";\n  }\n\n  // Replace filename with your own path according to the platform and recompile.\n  // Ex. for Android your filepath should be specific to the package name:\n  // /sdcard/Android/data/<packageName>/files/\n  std::string filename = \"/\" + std::to_string(hash) + shaderStageExt + \".glsl\";\n  if (!std::filesystem::exists(filename)) {\n    std::ofstream glslFile;\n    glslFile.open(filename, std::ios::out);\n    glslFile.write(src, (strlen(src)));\n    glslFile.close();\n    IGL_LOG_INFO(\"Shader dumped to file %s\", filename.c_str());\n  }\n#endif // IGL_SHADER_DUMP\n\n  getContext().shaderSource(shaderID, 1, &src, nullptr);\n  getContext().compileShader(shaderID);\n\n  // see if the compilation succeeded\n  GLint status = 0;\n  getContext().getShaderiv(shaderID, GL_COMPILE_STATUS, &status);\n  if (status == GL_FALSE) {\n    // Get the size of log\n    GLsizei logSize = 0;\n    getContext().getShaderiv(shaderID, GL_INFO_LOG_LENGTH, &logSize);\n\n    // Pre-allocate vector for storage\n    std::vector<GLchar> log(logSize);\n    getContext().getShaderInfoLog(shaderID, logSize, nullptr, log.data());\n\n    // Create actual string from it\n    const std::string errorLog(log.begin(), log.end());\n    IGL_LOG_ERROR(\"failed to compile %s shader:\\n%s\\nSource\\n%s\",\n                  (shaderType_ == GL_VERTEX_SHADER ? \"vertex\" : \"fragment\"),\n                  errorLog.c_str(),\n                  src);\n\n    // Delete shader to make sure that we don't have dangling resources\n    getContext().deleteShader(shaderID);\n\n    // Report back.\n    return Result(Result::Code::ArgumentInvalid, errorLog);\n  }\n\n  // now that the shader successfully compiled, set the shader\n  if (shaderID_ != 0) {\n    getContext().deleteShader(shaderID_);\n  }\n  shaderID_ = shaderID;\n\n  hash_ =\n      std::hash<std::string_view>()(std::string_view(desc.input.source, strlen(desc.input.source)));\n\n  return Result();\n}\n\nstd::string ShaderStages::getProgramInfoLog(GLuint programID) const {\n  // Get the size of log\n  GLsizei logSize = 0;\n  getContext().getProgramiv(programID, GL_INFO_LOG_LENGTH, &logSize);\n\n  // Pre-allocate vector for storage\n  std::vector<GLchar> log(logSize);\n  getContext().getProgramInfoLog(programID, logSize, nullptr, log.data());\n\n  // Create actual string from it\n  return {log.begin(), log.end()};\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Shader.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdlib>\n#include <unordered_map>\n#include <igl/Shader.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl {\nclass ICommandBuffer;\nnamespace opengl {\n\nclass ShaderModule : public WithContext, public IShaderModule {\n  friend class Device;\n\n public:\n  ~ShaderModule() override;\n  Result create(const ShaderModuleDesc& desc);\n\n  [[nodiscard]] inline GLenum getShaderType() const {\n    return shaderType_;\n  }\n\n  [[nodiscard]] inline GLuint getShaderID() const {\n    return shaderID_;\n  }\n\n  [[nodiscard]] inline size_t getHash() const {\n    return hash_;\n  }\n\n  ShaderModule(IContext& context, ShaderModuleInfo info);\n\n  ShaderModule(const ShaderModule&) = delete;\n  ShaderModule& operator=(const ShaderModule&) = delete;\n  ShaderModule(ShaderModule&&) = delete;\n  ShaderModule& operator=(ShaderModule&&) = delete;\n\n private:\n  // Type of shader (vertex, fragment, compute)\n  GLenum shaderType_ = 0;\n\n  // The GL shader object ID\n  GLuint shaderID_ = 0;\n\n  // Hash of the shader source\n  size_t hash_ = 0;\n};\n\nclass ShaderStages final : public IShaderStages, public WithContext {\n  friend class PipelineState;\n\n public:\n  explicit ShaderStages(const ShaderStagesDesc& desc, IContext& context);\n  ~ShaderStages() override;\n\n  ShaderStages(const ShaderStages&) = delete;\n  ShaderStages& operator=(const ShaderStages&) = delete;\n  ShaderStages(ShaderStages&&) = delete;\n  ShaderStages& operator=(ShaderStages&&) = delete;\n\n  Result create(const ShaderStagesDesc& /*desc*/);\n\n  [[nodiscard]] Result validate() const;\n  void bind() const;\n  void unbind() const;\n\n  [[nodiscard]] GLuint getProgramID() const {\n    return programID_;\n  }\n\n private:\n  void createRenderProgram(Result* result);\n  void createComputeProgram(Result* result);\n  [[nodiscard]] std::string getProgramInfoLog(GLuint programID) const;\n\n  // the GL shader program ID\n  GLuint programID_ = 0;\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/Texture.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/Texture.h>\n\n#include <algorithm>\n#include <igl/opengl/util/TextureFormat.h>\n\nnamespace igl::opengl {\n\nDimensions Texture::getDimensions() const {\n  return Dimensions{\n      static_cast<uint32_t>(width_), static_cast<uint32_t>(height_), static_cast<uint32_t>(depth_)};\n}\n\nuint32_t Texture::getNumLayers() const {\n  return numLayers_;\n}\n\nuint32_t Texture::getSamples() const {\n  return numSamples_;\n}\n\nvoid Texture::generateMipmap(ICommandQueue& /* unused */,\n                             const TextureRangeDesc* IGL_NULLABLE /* unused */) const {\n  IGL_DEBUG_ABORT(\"Can only generate mipmap for R/W texture (eg. TextureBuffer).\");\n}\n\nvoid Texture::generateMipmap(ICommandBuffer& /* unused */,\n                             const TextureRangeDesc* IGL_NULLABLE /* unused */) const {\n  IGL_DEBUG_ABORT(\"Can only generate mipmap for R/W texture (eg. TextureBuffer).\");\n}\n\nuint32_t Texture::getNumMipLevels() const {\n  return numMipLevels_;\n}\n\nbool Texture::isRequiredGenerateMipmap() const {\n  return false;\n}\n\nuint64_t Texture::getTextureId() const {\n  // this requires ARB_bindless_texture\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  return 0;\n}\n\nTextureDesc::TextureMipmapGeneration Texture::getMipmapGeneration() const {\n  return mipmapGeneration_;\n}\n\nbool Texture::isSwapchainTexture() const {\n  return isImplicitStorage();\n}\n\nbool Texture::canPresent() const noexcept {\n#if IGL_PLATFORM_IOS\n  // On iOS, presentRenderbuffer is only supported for textures created with EAGLContext's\n  // renderbufferStorage method.\n  return false;\n#else\n  return true;\n#endif\n}\n\nResult Texture::create(const TextureDesc& desc, bool hasStorageAlready) {\n  Result result;\n  if (desc.numLayers > 1 && desc.type != TextureType::TwoDArray) {\n    return Result{Result::Code::Unsupported,\n                  \"Array textures are only supported when type is TwoDArray.\"};\n  }\n  if (desc.exportability != TextureDesc::TextureExportability::NoExport) {\n    return Result{Result::Code::Unimplemented,\n                  \"Exportable textures are not supported on this platform.\"};\n  }\n  if (IGL_DEBUG_VERIFY(!isCreated_)) {\n    isCreated_ = true;\n    IGL_DEBUG_ASSERT(desc.format != TextureFormat::Invalid && desc.format == getFormat());\n    const bool isSampled = (desc.usage & TextureDesc::TextureUsageBits::Sampled) != 0;\n\n    if (isSampled && hasStorageAlready) {\n      result = Result(Result::Code::Unsupported,\n                      \"TextureUsageBits::Sampled and hasStorageAlready unsupported on GLES (we \"\n                      \"can't read from an EAGLLayer backed renderbuffer)\");\n    }\n\n    width_ = (GLsizei)desc.width;\n    height_ = (GLsizei)desc.height;\n    depth_ = desc.depth;\n    type_ = desc.type;\n    numLayers_ = desc.numLayers;\n    numSamples_ = desc.numSamples;\n    numMipLevels_ = desc.numMipLevels;\n    mipmapGeneration_ = desc.mipmapGeneration;\n    if (!getContext().deviceFeatures().hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n      // For ES 2.0, we have to ignore numMipLevels_\n      const auto maxNumMipLevels = TextureDesc::calcNumMipLevels(width_, height_, depth_);\n      if (numMipLevels_ > 1 && numMipLevels_ != maxNumMipLevels) {\n        IGL_LOG_ERROR(\"Partial mip chains are not supported so numMipLevels_ will be set to %d\",\n                      maxNumMipLevels);\n        numMipLevels_ = maxNumMipLevels;\n      }\n    }\n  } else {\n    result = Result(Result::Code::InvalidOperation, \"Texture already created\");\n  }\n  return result;\n}\n\n// Gets pack/unpack alignment for pixelStorei\n// stride is the number of bytes for a row of the image (image width * bytes per pixel)+padding\n//\n// openGL only uses alignment instead of stride when reading/writing pixels so it will not support\n// padding that is not 8, 4, 2, or 1 byte aligned to the actual pixel data\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nGLint Texture::getAlignment(uint32_t stride, uint32_t mipLevel, uint32_t widthAtMipLevel) const {\n  IGL_DEBUG_ASSERT(mipLevel < numMipLevels_);\n\n  if (getProperties().isCompressed()) {\n    return 1;\n  }\n\n  // Clamp to 1 to account for non-square textures.\n  const auto maxWidthAtMipLevel = std::max(getDimensions().width >> mipLevel, 1u);\n  if (widthAtMipLevel == 0) {\n    widthAtMipLevel = maxWidthAtMipLevel;\n  } else if (IGL_DEBUG_VERIFY_NOT(widthAtMipLevel > maxWidthAtMipLevel)) {\n    widthAtMipLevel = maxWidthAtMipLevel;\n  }\n\n  const auto pixelBytesPerRow = getProperties().getBytesPerRow(widthAtMipLevel);\n\n  if (stride == 0 || !IGL_DEBUG_VERIFY(pixelBytesPerRow <= stride)) {\n    return 1;\n  } else if (stride % 8 == 0) {\n    return 8;\n  } else if (stride % 4 == 0) {\n    return 4;\n  } else if (stride % 2 == 0) {\n    return 2;\n  } else {\n    return 1;\n  }\n}\n\nbool Texture::isImplicitStorage() const {\n  return false;\n}\n\nGLenum Texture::toGLTarget(TextureType type) const {\n  switch (type) {\n  case TextureType::TwoD:\n    return GL_TEXTURE_2D;\n  case TextureType::TwoDArray:\n    if (getContext().deviceFeatures().hasFeature(DeviceFeatures::Texture2DArray)) {\n      return GL_TEXTURE_2D_ARRAY;\n    }\n    break;\n  case TextureType::ThreeD:\n    if (getContext().deviceFeatures().hasFeature(DeviceFeatures::Texture3D)) {\n      return GL_TEXTURE_3D;\n    }\n    break;\n  case TextureType::Cube:\n    return GL_TEXTURE_CUBE_MAP;\n  case TextureType::ExternalImage:\n    if (getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureExternalImage)) {\n      return GL_TEXTURE_EXTERNAL_OES;\n    }\n    break;\n  case TextureType::Invalid:\n    break;\n  }\n  IGL_DEBUG_ABORT(\"Unsupported OGL Texture Type: %d\", type);\n\n  return 0;\n}\n\n// Whenever possible the caller should have the incoming format in\n// igl::TextureFormat thus not use this function. For the cases when this\n// is not possible, e.g. dictated by a file header, then this function\n// can convert GL Texture format into IGL Texture Format\n// This method assumes no swizzling is required (eg. GL_RED results in R_UNorm8 but it could be\n// A_UNorm8 with swizzling)\nTextureFormat Texture::glInternalFormatToTextureFormat(GLuint glTexInternalFormat,\n                                                       GLuint glTexFormat,\n                                                       GLuint glTexType) {\n  return util::glTextureFormatToTextureFormat(static_cast<int32_t>(glTexInternalFormat),\n                                              static_cast<uint32_t>(glTexFormat),\n                                              static_cast<uint32_t>(glTexType));\n}\nbool Texture::toFormatDescGL(TextureFormat textureFormat,\n                             TextureDesc::TextureUsage usage,\n                             FormatDescGL& outFormatGL) const {\n  return toFormatDescGL(getContext(), textureFormat, usage, outFormatGL);\n}\nbool Texture::toFormatDescGL(const IContext& ctx,\n                             TextureFormat textureFormat,\n                             TextureDesc::TextureUsage usage,\n                             FormatDescGL& outFormatGL) {\n  const auto& deviceFeatures = ctx.deviceFeatures();\n\n  // TODO: Remove these fallbacks once devices can properly provide a supported format\n  if (textureFormat == TextureFormat::S8_UInt_Z32_UNorm &&\n      !deviceFeatures.hasTextureFeature(TextureFeatures::Depth32FStencil8)) {\n    textureFormat = TextureFormat::S8_UInt_Z24_UNorm;\n  }\n  if (textureFormat == TextureFormat::Z_UNorm24) {\n    if ((usage & TextureDesc::TextureUsageBits::Sampled) != 0 &&\n        !deviceFeatures.hasTextureFeature(TextureFeatures::DepthTexImage24)) {\n      textureFormat = TextureFormat::Z_UNorm32;\n    }\n    if ((usage & TextureDesc::TextureUsageBits::Attachment) != 0 &&\n        !deviceFeatures.hasTextureFeature(TextureFeatures::DepthRenderbuffer24)) {\n      textureFormat = TextureFormat::Z_UNorm32;\n    }\n    if ((usage & TextureDesc::TextureUsageBits::Storage) != 0 &&\n        !deviceFeatures.hasTextureFeature(TextureFeatures::DepthTexStorage24)) {\n      textureFormat = TextureFormat::Z_UNorm32;\n    }\n  }\n\n  const bool sampled = (usage & TextureDesc::TextureUsageBits::Sampled) != 0;\n  bool attachment = (usage & TextureDesc::TextureUsageBits::Attachment) != 0;\n  const bool storage = (usage & TextureDesc::TextureUsageBits::Storage) != 0;\n  bool sampledAttachment = sampled && attachment;\n  bool sampledOnly = sampled && !attachment;\n  bool attachmentOnly = attachment && !sampled;\n\n  // Sanity check capabilities\n  auto capabilities = deviceFeatures.getTextureFormatCapabilities(textureFormat);\n  // Fallback for Z_UNorm32, some devices capabilities do not support this format,\n  // usually Z_UNorm24 would suffice.\n  if (capabilities == 0 && (textureFormat == TextureFormat::Z_UNorm32)) {\n    IGL_LOG_INFO(\"Device does not support 32-bit depth format (%s). Falling back to 24-bit\\n\",\n                 TextureFormatProperties::fromTextureFormat(textureFormat).name);\n    textureFormat = TextureFormat::Z_UNorm24;\n    capabilities = deviceFeatures.getTextureFormatCapabilities(textureFormat);\n    if (capabilities == 0) {\n      IGL_LOG_INFO(\"Device does not support 24-bit depth format (%s). Falling back to 16-bit\\n\",\n                   TextureFormatProperties::fromTextureFormat(textureFormat).name);\n      textureFormat = TextureFormat::Z_UNorm16;\n      capabilities = deviceFeatures.getTextureFormatCapabilities(TextureFormat::Z_UNorm16);\n      if (capabilities == 0) {\n        IGL_LOG_ERROR(\"Device does not support basic 16-bit depth format (%s). Erroring out\\n\",\n                      TextureFormatProperties::fromTextureFormat(textureFormat).name);\n        return false;\n      }\n    }\n  }\n\n  if (attachmentOnly &&\n      (capabilities & ICapabilities::TextureFormatCapabilityBits::Attachment) == 0) {\n    IGL_LOG_ERROR(\"Texture format %s does not support Attachment usage.\\n\",\n                  TextureFormatProperties::fromTextureFormat(textureFormat).name);\n    return false;\n  }\n  if (sampledOnly && (capabilities & ICapabilities::TextureFormatCapabilityBits::Sampled) == 0) {\n    IGL_LOG_ERROR(\"Texture format %s does not support Sampled usage.\\n\",\n                  TextureFormatProperties::fromTextureFormat(textureFormat).name);\n    return false;\n  }\n  if (storage && (capabilities & ICapabilities::TextureFormatCapabilityBits::Storage) == 0) {\n    IGL_LOG_ERROR(\"Texture format %s does not support Storage usage.\\n\",\n                  TextureFormatProperties::fromTextureFormat(textureFormat).name);\n    return false;\n  }\n  if (sampledAttachment &&\n      (capabilities & ICapabilities::TextureFormatCapabilityBits::SampledAttachment) == 0) {\n    if ((capabilities & ICapabilities::TextureFormatCapabilityBits::Sampled) != 0) {\n      IGL_LOG_INFO(\n          \"Texture format %s does not support SampledAttachment usage. Falling back to Sampled.\\n\",\n          TextureFormatProperties::fromTextureFormat(textureFormat).name);\n      sampledAttachment = false;\n      attachmentOnly = false;\n      attachment = false;\n    } else {\n      IGL_LOG_ERROR(\"Texture format %s does not support SampledAttachment usage.\\n\",\n                    TextureFormatProperties::fromTextureFormat(textureFormat).name);\n      return false;\n    }\n  }\n\n  // Uncompressed textures can request RenderbufferStorage, TexStorage or TexImage.\n  // TexStorage takes precedence over TexImage if it is requested.\n\n  const bool renderbuffer = attachmentOnly;\n  const bool texStorage = storage;\n  const bool texImage = !storage && sampled;\n  if (!renderbuffer && !texStorage && !texImage) {\n    return false;\n  }\n\n  // Compressed textures formats can be used if either TexStorage or TexImage is requested.\n  const bool compressedTexStorage =\n      storage && deviceFeatures.hasTextureFeature(TextureFeatures::TextureCompressionTexStorage);\n  const bool compressedTexImage = sampled;\n  const bool compressedValid = compressedTexStorage || compressedTexImage;\n\n  auto& format = outFormatGL.format;\n  auto& type = outFormatGL.type;\n  auto& internalFormat = outFormatGL.internalFormat;\n\n  switch (textureFormat) {\n  case TextureFormat::Invalid:\n    return false;\n\n  case TextureFormat::RGBA_UNorm8:\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    internalFormat = GL_RGBA8;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageRgba8)) {\n      internalFormat = GL_RGBA;\n    }\n    return true;\n\n  case TextureFormat::RGBA_SRGB:\n    format = deviceFeatures.hasExtension(Extensions::Srgb) ? GL_SRGB_ALPHA : GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    internalFormat = GL_SRGB8_ALPHA8;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageSrgba8)) {\n      internalFormat = GL_SRGB_ALPHA;\n    }\n    return true;\n\n  case TextureFormat::BGRA_SRGB:\n    format = GL_BGRA;\n    type = GL_UNSIGNED_BYTE;\n    internalFormat = GL_SRGB8_ALPHA8;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageSrgba8)) {\n      internalFormat = GL_SRGB_ALPHA;\n    }\n    return true;\n\n  case TextureFormat::R4G2B2_UNorm_Apple:\n    format = GL_RGB_422_APPLE;\n    type = GL_UNSIGNED_SHORT_8_8_APPLE;\n    internalFormat = GL_RGB_RAW_422_APPLE;\n    if (texImage && deviceFeatures.hasInternalRequirement(\n                        InternalRequirement::ColorTexImageRgbApple422Unsized)) {\n      internalFormat = GL_RGB;\n    }\n    return true;\n\n  case TextureFormat::R4G2B2_UNorm_Rev_Apple:\n    format = GL_RGB_422_APPLE;\n    type = GL_UNSIGNED_SHORT_8_8_REV_APPLE;\n    internalFormat = GL_RGB_RAW_422_APPLE;\n    if (texImage && deviceFeatures.hasInternalRequirement(\n                        InternalRequirement::ColorTexImageRgbApple422Unsized)) {\n      internalFormat = GL_RGB;\n    }\n    return true;\n\n  case TextureFormat::R5G5B5A1_UNorm:\n    format = GL_RGBA;\n    type = GL_UNSIGNED_SHORT_5_5_5_1;\n    internalFormat = GL_RGB5_A1;\n    if (texImage &&\n        deviceFeatures.hasInternalRequirement(InternalRequirement::ColorTexImageRgb5A1Unsized)) {\n      internalFormat = GL_RGBA;\n    }\n    return true;\n\n  case TextureFormat::RGBX_UNorm8:\n    format = GL_RGB;\n    type = GL_UNSIGNED_BYTE;\n    internalFormat = GL_RGB8;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageRgba8)) {\n      internalFormat = GL_RGB;\n    }\n    return true;\n\n  case TextureFormat::RGBA_F32:\n    format = GL_RGBA;\n    type = GL_FLOAT;\n    internalFormat = GL_RGBA32F;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImage32f)) {\n      internalFormat = GL_RGBA;\n    }\n    return true;\n\n  case TextureFormat::RGB_F32:\n    format = GL_RGB;\n    type = GL_FLOAT;\n    internalFormat = GL_RGB32F;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImage32f)) {\n      internalFormat = GL_RGB;\n    }\n    return true;\n\n  case TextureFormat::RGBA_F16:\n    format = GL_RGBA;\n    if (deviceFeatures.hasInternalRequirement(InternalRequirement::TextureHalfFloatExtReq)) {\n      type = GL_HALF_FLOAT_OES; // NOTE: NOT the same as GL_HALF_FLOAT\n    } else {\n      type = GL_HALF_FLOAT;\n    }\n    internalFormat = GL_RGBA16F;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImage16f)) {\n      internalFormat = GL_RGBA;\n    }\n    return true;\n\n  case TextureFormat::RGB_F16:\n    format = GL_RGB;\n    if (deviceFeatures.hasInternalRequirement(InternalRequirement::TextureHalfFloatExtReq)) {\n      type = GL_HALF_FLOAT_OES; // NOTE: NOT the same as GL_HALF_FLOAT\n    } else {\n      type = GL_HALF_FLOAT;\n    }\n    internalFormat = GL_RGB16F;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImage16f)) {\n      internalFormat = GL_RGB;\n    }\n    return true;\n\n  case TextureFormat::BGRA_UNorm8:\n    format = GL_BGRA;\n    type = GL_UNSIGNED_BYTE;\n    internalFormat = GL_RGBA;\n    if (texStorage) {\n      internalFormat = GL_BGRA8_EXT;\n    } else if (texImage && deviceFeatures.hasExtension(Extensions::TextureFormatBgra8888Ext)) {\n      internalFormat = GL_BGRA;\n    } else if (texImage &&\n               deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageBgraRgba8)) {\n      internalFormat = GL_RGBA8;\n    }\n    return true;\n\n  case TextureFormat::BGRA_UNorm8_Rev:\n    internalFormat = GL_RGBA;\n    format = GL_BGRA;\n    type = GL_UNSIGNED_INT_8_8_8_8_REV;\n    return true;\n\n  case TextureFormat::RGB10_A2_UNorm_Rev:\n    format = GL_RGBA;\n    type = GL_UNSIGNED_INT_2_10_10_10_REV;\n    internalFormat = GL_RGB10_A2;\n    if (texImage &&\n        deviceFeatures.hasInternalRequirement(InternalRequirement::ColorTexImageRgb10A2Unsized)) {\n      internalFormat = GL_RGBA;\n    }\n    return true;\n\n  case TextureFormat::RGB10_A2_Uint_Rev:\n    internalFormat = GL_RGB10_A2UI;\n    format = GL_RGBA_INTEGER;\n    type = GL_UNSIGNED_INT_2_10_10_10_REV;\n    return true;\n\n  case TextureFormat::BGR10_A2_Unorm:\n    format = GL_BGRA;\n    type = GL_UNSIGNED_INT_2_10_10_10_REV;\n    internalFormat = GL_RGB10_A2;\n    return true;\n\n  case TextureFormat::ABGR_UNorm4: // TODO Test this\n    format = GL_RGBA;\n    type = GL_UNSIGNED_SHORT_4_4_4_4;\n    internalFormat = GL_RGBA4;\n    if (texImage &&\n        deviceFeatures.hasInternalRequirement(InternalRequirement::ColorTexImageRgba4Unsized)) {\n      internalFormat = GL_RGBA;\n    }\n    return true;\n\n  case TextureFormat::B5G5R5A1_UNorm:\n    format = GL_BGRA;\n    type = GL_UNSIGNED_SHORT_5_5_5_1;\n    internalFormat = GL_RGB5_A1;\n    if (texImage &&\n        deviceFeatures.hasInternalRequirement(InternalRequirement::ColorTexImageRgb5A1Unsized)) {\n      internalFormat = GL_RGBA;\n    }\n    return true;\n\n  case TextureFormat::B5G6R5_UNorm:\n    return false;\n\n  case TextureFormat::LA_UNorm8:\n    format = GL_LUMINANCE_ALPHA;\n    type = GL_UNSIGNED_BYTE;\n    internalFormat = GL_LUMINANCE_ALPHA;\n    if ((texStorage && deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexStorageLa8)) ||\n        (texImage && deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageLa8))) {\n      internalFormat = GL_LUMINANCE8_ALPHA8;\n    }\n    return true;\n\n  case TextureFormat::RG_UNorm8:\n    format = GL_RG;\n    type = GL_UNSIGNED_BYTE;\n    internalFormat = GL_RG8;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageRg8)) {\n      internalFormat = GL_RG;\n    }\n    return true;\n\n  case TextureFormat::RG_F16:\n    format = GL_RG;\n    if (deviceFeatures.hasInternalRequirement(InternalRequirement::TextureHalfFloatExtReq)) {\n      type = GL_HALF_FLOAT_OES; // NOTE: NOT the same as GL_HALF_FLOAT\n    } else {\n      type = GL_HALF_FLOAT;\n    }\n    internalFormat = GL_RG16F;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImage16f)) {\n      internalFormat = GL_RG;\n    }\n    return true;\n\n  case TextureFormat::RG_F32:\n    format = GL_RG;\n    type = GL_FLOAT;\n    internalFormat = GL_RG32F;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImage32f)) {\n      internalFormat = GL_RG;\n    }\n    return true;\n\n  case TextureFormat::RG_UInt16:\n    internalFormat = GL_RG16UI;\n    format = GL_RG_INTEGER;\n    type = GL_UNSIGNED_SHORT;\n    return true;\n\n  case TextureFormat::RG_UNorm16:\n    internalFormat = GL_RG16;\n    format = GL_RG;\n    type = GL_UNSIGNED_SHORT;\n    return true;\n\n  case TextureFormat::RGBA_UNorm16:\n    internalFormat = GL_RGBA16;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_SHORT;\n    return true;\n\n  case TextureFormat::RGBA_UInt32:\n    internalFormat = GL_RGBA32UI;\n    format = GL_RGBA_INTEGER;\n    type = GL_UNSIGNED_INT;\n    return true;\n\n  case TextureFormat::A_UNorm8:\n    type = GL_UNSIGNED_BYTE;\n    format = GL_ALPHA;\n    internalFormat = GL_ALPHA;\n    if ((texImage && deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageA8)) ||\n        (texStorage && deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexStorageA8))) {\n      if (deviceFeatures.hasInternalRequirement(InternalRequirement::SwizzleAlphaTexturesReq)) {\n        // GL_ALPHA was deprecated in GL3 so use GL_RED and use GL_TEXTURE_SWIZZLE_A in\n        // swapTextureChannelsForFormat before calling texImage2D or texStorage2D\n        internalFormat = GL_R8;\n        format = GL_RED;\n      } else {\n        internalFormat = GL_ALPHA8;\n      }\n    }\n    return true;\n\n  case TextureFormat::L_UNorm8:\n    format = GL_LUMINANCE;\n    type = GL_UNSIGNED_BYTE;\n    internalFormat = GL_LUMINANCE;\n    if ((texStorage && deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexStorageLa8)) ||\n        (texImage && deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageLa8))) {\n      internalFormat = GL_LUMINANCE8;\n    }\n    return true;\n\n  case TextureFormat::R_UNorm8:\n    format = GL_RED;\n    type = GL_UNSIGNED_BYTE;\n    internalFormat = GL_R8;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImageRg8)) {\n      internalFormat = GL_RED;\n    }\n    return true;\n\n  case TextureFormat::R_F16:\n    format = GL_RED;\n    if (deviceFeatures.hasInternalRequirement(InternalRequirement::TextureHalfFloatExtReq)) {\n      type = GL_HALF_FLOAT_OES; // NOTE: NOT the same as GL_HALF_FLOAT\n    } else {\n      type = GL_HALF_FLOAT;\n    }\n    internalFormat = GL_R16F;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImage16f)) {\n      internalFormat = GL_RED;\n    }\n    return true;\n\n  case TextureFormat::R_F32:\n    format = GL_RED;\n    type = GL_FLOAT;\n    internalFormat = GL_R32F;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::ColorTexImage32f)) {\n      internalFormat = GL_RED;\n    }\n    return true;\n\n  case TextureFormat::R_UInt32:\n    internalFormat = GL_R32UI;\n    format = GL_RED_INTEGER;\n    type = GL_UNSIGNED_INT;\n    return true;\n\n  case TextureFormat::R_UInt16:\n    internalFormat = GL_R16UI;\n    format = GL_RED_INTEGER;\n    type = GL_UNSIGNED_SHORT;\n    return true;\n\n  case TextureFormat::R_UNorm16:\n    internalFormat = GL_R16;\n    format = GL_RED;\n    type = GL_UNSIGNED_SHORT;\n    return true;\n\n  case TextureFormat::RGBA_ASTC_4x4:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_4x4_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_4x4:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_5x4:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_5x4_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_5x4:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_5x5:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_5x5_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_5x5:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_6x5:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_6x5_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_6x5:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_6x6:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_6x6_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_6x6:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_8x5:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_8x5_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_8x5:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_8x6:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_8x6_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_8x6:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_8x8:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_8x8_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_8x8:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_10x5:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_10x5_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_10x5:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_10x6:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_10x6_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_10x6:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_10x8:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_10x8_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_10x8:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_10x10:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_10x10_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_10x10:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_12x10:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_12x10_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_12x10:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_ASTC_12x12:\n    internalFormat = GL_COMPRESSED_RGBA_ASTC_12x12_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_ASTC_12x12:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_BC7_UNORM_4x4:\n    internalFormat = GL_COMPRESSED_RGBA_BPTC_UNORM;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_BC7_SRGB_4x4:\n    internalFormat = GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_PVRTC_2BPPV1:\n    internalFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGB_PVRTC_2BPPV1:\n    internalFormat = GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n    format = GL_RGB;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA_PVRTC_4BPPV1:\n    internalFormat = GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGB_PVRTC_4BPPV1:\n    internalFormat = GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n    format = GL_RGB;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGB8_ETC1:\n    internalFormat = GL_ETC1_RGB8_OES;\n    format = GL_RGB;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGB8_ETC2:\n    internalFormat = GL_COMPRESSED_RGB8_ETC2;\n    format = GL_RGB;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGB8_Punchthrough_A1_ETC2:\n    internalFormat = GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RGBA8_EAC_ETC2:\n    internalFormat = GL_COMPRESSED_RGBA8_ETC2_EAC;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_ETC2:\n    internalFormat = GL_COMPRESSED_SRGB8_ETC2;\n    format = GL_RGB;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_Punchthrough_A1_ETC2:\n    internalFormat = GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::SRGB8_A8_EAC_ETC2:\n    internalFormat = GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC;\n    format = GL_RGBA;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RG_EAC_UNorm:\n    internalFormat = GL_COMPRESSED_RG11_EAC;\n    format = GL_RG;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::RG_EAC_SNorm:\n    internalFormat = GL_COMPRESSED_SIGNED_RG11_EAC;\n    format = GL_RG;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::R_EAC_UNorm:\n    internalFormat = GL_COMPRESSED_R11_EAC;\n    format = GL_RED;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::R_EAC_SNorm:\n    internalFormat = GL_COMPRESSED_SIGNED_R11_EAC;\n    format = GL_RED;\n    type = GL_UNSIGNED_BYTE;\n    return compressedValid;\n\n  case TextureFormat::S8_UInt_Z32_UNorm:\n    // TODO: Fix this texture type. No backend has a 32-bit int depth + 8-bit int stencil.\n    internalFormat = GL_DEPTH32F_STENCIL8;\n    format = GL_DEPTH_STENCIL;\n    type = GL_FLOAT_32_UNSIGNED_INT_24_8_REV;\n    return true;\n\n  case TextureFormat::S_UInt8:\n    // TODO: test this\n    internalFormat = GL_STENCIL_INDEX8;\n    format = GL_STENCIL_INDEX;\n    type = GL_UNSIGNED_BYTE;\n    return true;\n\n  case TextureFormat::Z_UNorm16:\n    format = GL_DEPTH_COMPONENT;\n    type = GL_UNSIGNED_SHORT;\n    internalFormat = GL_DEPTH_COMPONENT16;\n    if (texImage && !deviceFeatures.hasTextureFeature(TextureFeatures::DepthTexImage16)) {\n      internalFormat = GL_DEPTH_COMPONENT;\n    }\n    return true;\n\n  case TextureFormat::Z_UNorm32:\n    format = GL_DEPTH_COMPONENT;\n    type = GL_UNSIGNED_INT;\n    internalFormat = GL_DEPTH_COMPONENT32;\n    if (texImage && deviceFeatures.hasInternalRequirement(InternalRequirement::Depth32Unsized)) {\n      internalFormat = GL_DEPTH_COMPONENT;\n    }\n    return true;\n\n  case TextureFormat::Z_UNorm24:\n    format = GL_DEPTH_COMPONENT;\n    type = GL_UNSIGNED_INT;\n    internalFormat = GL_DEPTH_COMPONENT24;\n    return true;\n\n  case TextureFormat::S8_UInt_Z24_UNorm:\n    // Support for TextureBuffer and renderbuffer introduced with the same versions / extensions\n    format = GL_DEPTH_STENCIL;\n    type = GL_UNSIGNED_INT_24_8;\n    internalFormat = GL_DEPTH24_STENCIL8;\n    if (texImage &&\n        deviceFeatures.hasInternalRequirement(InternalRequirement::Depth24Stencil8Unsized)) {\n      internalFormat = GL_DEPTH_STENCIL;\n    }\n    return true;\n  case TextureFormat::YUV_NV12:\n  case TextureFormat::YUV_420p:\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n    return false;\n  }\n\n  return false;\n}\n\n// IAttachmentInterop interface implementation\nvoid* Texture::getNativeImage() const {\n  // OpenGL uses integer handles to identify textures. If someone needs to return\n  // it as a pointer, it might be implemented.\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  return nullptr;\n}\n\nvoid* Texture::getNativeImageView() const {\n  // OpenGL doesn't have a separate image view concept\n  return nullptr;\n}\n\nconst base::AttachmentInteropDesc& Texture::getDesc() const {\n  // Update cached attachment descriptor\n  const auto dims = getDimensions();\n  attachmentDesc_.width = dims.width;\n  attachmentDesc_.height = dims.height;\n  attachmentDesc_.depth = dims.depth;\n  attachmentDesc_.numLayers = numLayers_;\n  attachmentDesc_.numSamples = numSamples_;\n  attachmentDesc_.numMipLevels = numMipLevels_;\n  attachmentDesc_.type = type_;\n  attachmentDesc_.format = getFormat();\n  attachmentDesc_.isSampled = true; // OpenGL textures are generally sampled\n  return attachmentDesc_;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Texture.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Texture.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl {\nclass ICommandBuffer;\nnamespace opengl {\n\n// Texture is the base class for the OpenGL backend. It represents:\n// 1. traditional textures (sampled/output by shaders)\n// 2. render targets (attachments to framebuffers)\nclass Texture : public WithContext, public ITexture {\n public:\n  Texture(IContext& context,\n          TextureFormat format,\n          TextureDesc::TextureMipmapGeneration mipmapGeneration =\n              TextureDesc::TextureMipmapGeneration::Manual) :\n    WithContext(context), ITexture(format), mipmapGeneration_(mipmapGeneration) {}\n  ~Texture() override = default;\n\n public:\n  // Accessors\n  [[nodiscard]] Dimensions getDimensions() const override;\n  [[nodiscard]] uint32_t getNumLayers() const override;\n  [[nodiscard]] uint32_t getSamples() const override;\n  void generateMipmap(ICommandQueue& cmdQueue,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n  void generateMipmap(ICommandBuffer& cmdBuffer,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n  [[nodiscard]] uint32_t getNumMipLevels() const override;\n  [[nodiscard]] bool isRequiredGenerateMipmap() const override;\n  [[nodiscard]] uint64_t getTextureId() const override;\n  [[nodiscard]] bool isSwapchainTexture() const override;\n  [[nodiscard]] virtual bool canPresent() const noexcept;\n  [[nodiscard]] TextureDesc::TextureMipmapGeneration getMipmapGeneration() const;\n\n  virtual Result create(const TextureDesc& desc, bool hasStorageAlready);\n\n  // bind this as a source texture for rendering from\n  virtual void bind() = 0;\n  virtual void bindImage(size_t unit) = 0;\n  virtual void unbind() = 0;\n\n  struct AttachmentParams {\n    uint32_t face; // Cube map texture face\n    uint32_t mipLevel; // Mipmap level\n    uint32_t layer; // Array texture layer\n    bool read;\n    bool stereo;\n  };\n\n  // frame buffer attachments\n  virtual void attachAsColor(uint32_t index, const AttachmentParams& params) = 0;\n  virtual void detachAsColor(uint32_t index, bool read) = 0;\n  virtual void attachAsDepth(const AttachmentParams& params) = 0;\n  virtual void detachAsDepth(bool read) = 0;\n  virtual void attachAsStencil(const AttachmentParams& params) = 0;\n  virtual void detachAsStencil(bool read) = 0;\n\n  [[nodiscard]] virtual bool isImplicitStorage() const;\n\n  [[nodiscard]] GLenum toGLTarget(TextureType type) const;\n  static TextureFormat glInternalFormatToTextureFormat(GLuint glTexInternalFormat,\n                                                       GLuint glTexFormat,\n                                                       GLuint glTexType);\n\n  // @fb-only\n  // @fb-only\n  [[nodiscard]] virtual GLuint getId() const = 0;\n\n  // IAttachmentInterop interface\n  [[nodiscard]] void* IGL_NULLABLE getNativeImage() const override;\n  [[nodiscard]] void* IGL_NULLABLE getNativeImageView() const override;\n  [[nodiscard]] const base::AttachmentInteropDesc& getDesc() const override;\n\n  /// @brief Calculates a value for GL_PACK_ALIGNMENT or GL_UNPACK_ALIGNMENT for the given byte\n  /// stride.\n  /// @param stride The byte stride of a row of data in the texture data source or destination.\n  /// @param mipLevel The texture mip level the data is being read from or written to.\n  /// @param widthAtMipLevel The width, in pixels, at mipLevel of the data being read from or\n  /// written to.\n  [[nodiscard]] GLint getAlignment(uint32_t stride,\n                                   uint32_t mipLevel = 0,\n                                   uint32_t widthAtMipLevel = 0) const;\n\n  void setSamplerHash(size_t newValue) {\n    samplerHash_ = newValue;\n  }\n\n  [[nodiscard]] size_t getSamplerHash() const {\n    return samplerHash_;\n  }\n\n  [[nodiscard]] GLenum getGLInternalTextureFormat() const {\n    IGL_DEBUG_ASSERT(glInternalFormat_ != 0);\n    return glInternalFormat_;\n  }\n\n  // glTexImageXXX functions require 3 different parameters to specify a texture format\n  struct FormatDescGL final {\n    GLint internalFormat = 0;\n    GLenum format = GL_NONE;\n    GLenum type = GL_NONE;\n  };\n\n  /// Converts the GL format descriptor from the given texture format\n  /// @returns false if an unknown format is specified\n  bool toFormatDescGL(TextureFormat textureFormat,\n                      TextureDesc::TextureUsage usage,\n                      FormatDescGL& outFormatGL) const;\n\n  static bool toFormatDescGL(const IContext& ctx,\n                             TextureFormat textureFormat,\n                             TextureDesc::TextureUsage usage,\n                             FormatDescGL& outFormatGL);\n\n protected:\n  [[nodiscard]] IGL_INLINE GLsizei getWidth() const {\n    return width_;\n  }\n  [[nodiscard]] IGL_INLINE GLsizei getHeight() const {\n    return height_;\n  }\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  IGL_INLINE void setTextureProperties(GLsizei width, GLsizei height, GLsizei numLayers = 1) {\n    width_ = width;\n    height_ = height;\n    numLayers_ = numLayers;\n  }\n\n  /// @returns true if the format is usable as a TextureTarget format.\n  /// @remark Does not take into account whether a particular context supports it or not.\n  [[nodiscard]] bool isTextureTargetFormat(TextureFormat textureFormat) const;\n\n  GLenum glInternalFormat_{};\n  uint32_t numMipLevels_ = 1;\n  TextureType type_ = TextureType::Invalid;\n  TextureDesc::TextureMipmapGeneration mipmapGeneration_ =\n      TextureDesc::TextureMipmapGeneration::Manual;\n\n private:\n  size_t samplerHash_ = std::numeric_limits<size_t>::max();\n  GLsizei width_ = 0;\n  GLsizei height_ = 0;\n  GLsizei depth_ = 1;\n  GLsizei numLayers_ = 1;\n  uint32_t numSamples_ = 1;\n  bool isCreated_ = false;\n  mutable base::AttachmentInteropDesc attachmentDesc_; // Cached for IAttachmentInterop::getDesc()\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/TextureBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/TextureBuffer.h>\n\n#include <array>\n#include <utility>\n\nnamespace igl::opengl {\n\nnamespace {\n// maps TextureCube::CubeFace to GL target type for cube map faces\n// required for glTexImageXXX APIs\nconstexpr std::array<GLenum, 6> kCubeFaceTargets = {GL_TEXTURE_CUBE_MAP_POSITIVE_X,\n                                                    GL_TEXTURE_CUBE_MAP_NEGATIVE_X,\n                                                    GL_TEXTURE_CUBE_MAP_POSITIVE_Y,\n                                                    GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,\n                                                    GL_TEXTURE_CUBE_MAP_POSITIVE_Z,\n                                                    GL_TEXTURE_CUBE_MAP_NEGATIVE_Z};\nvoid swapTextureChannelsForFormat(IContext& context, GLuint target, TextureFormat iglFormat) {\n  if (iglFormat == igl::TextureFormat::A_UNorm8 &&\n      context.deviceFeatures().hasInternalRequirement(\n          InternalRequirement::SwizzleAlphaTexturesReq)) {\n    if (iglFormat == igl::TextureFormat::A_UNorm8) {\n      // In GL3, GL_RED is used since GL_ALPHA is removed. To keep parity, red value must be set\n      // to the alpha channel.\n      context.texParameteri(target, GL_TEXTURE_SWIZZLE_R, GL_ZERO);\n      context.texParameteri(target, GL_TEXTURE_SWIZZLE_G, GL_ZERO);\n      context.texParameteri(target, GL_TEXTURE_SWIZZLE_B, GL_ZERO);\n      context.texParameteri(target, GL_TEXTURE_SWIZZLE_A, GL_RED);\n    }\n  }\n}\n} // namespace\n\nTextureBuffer::~TextureBuffer() {\n  const GLuint textureId = getId();\n  if (textureId != 0) {\n    if (textureHandle_ != 0) {\n      getContext().makeTextureHandleNonResident(textureHandle_);\n    }\n    getContext().deleteTextures(1, &textureId);\n  }\n}\n\nuint64_t TextureBuffer::getTextureId() const {\n  if (textureHandle_ == 0) {\n    textureHandle_ = getContext().getTextureHandle(getId());\n    IGL_DEBUG_ASSERT(textureHandle_);\n    getContext().makeTextureHandleResident(textureHandle_);\n  }\n  return textureHandle_;\n}\n\n// create a 2D texture given the specified dimensions and format\nResult TextureBuffer::create(const TextureDesc& desc, bool hasStorageAlready) {\n  Result result = Super::create(desc, hasStorageAlready);\n  if (result.isOk()) {\n    const auto isSampledOrStorage = (desc.usage & (TextureDesc::TextureUsageBits::Sampled |\n                                                   TextureDesc::TextureUsageBits::Storage)) != 0;\n    if (isSampledOrStorage || desc.type != TextureType::TwoD || desc.numMipLevels > 1) {\n      result = createTexture(desc);\n    } else {\n      result = Result(Result::Code::Unsupported, \"invalid usage!\");\n    }\n  }\n  return result;\n}\n\nvoid TextureBuffer::bindImage(size_t unit) {\n  // The entire codebase used only combined kShaderRead|kShaderWrite access (except tests)\n  // @fb-only\n  // Here we used to have this condition:\n  //    getUsage() & TextureUsage::kShaderWrite ? GL_WRITE_ONLY : GL_READ_ONLY,\n  // So it is safe to replace it with GL_READ_WRITE\n  IGL_DEBUG_ASSERT(getUsage() & TextureDesc::TextureUsageBits::Storage,\n                   \"Should be a storage image\");\n  getContext().bindImageTexture((GLuint)unit,\n                                getId(),\n                                0,\n                                getTarget() == GL_TEXTURE_2D ? GL_TRUE : GL_FALSE,\n                                0,\n                                GL_READ_WRITE,\n                                glInternalFormat_);\n}\n\n// create a texture for shader read/write usages\nResult TextureBuffer::createTexture(const TextureDesc& desc) {\n  const auto target = toGLTarget(desc.type);\n  if (target == 0) {\n    return Result(Result::Code::Unsupported, \"Unsupported texture target\");\n  }\n\n  // If usage doesn't include Storage, ensure usage includes sampled for correct format selection\n  const auto usageForFormat = (desc.usage & TextureDesc::TextureUsageBits::Storage) == 0\n                                  ? desc.usage | TextureDesc::TextureUsageBits::Sampled\n                                  : desc.usage;\n  if (!toFormatDescGL(desc.format, usageForFormat, formatDescGL_)) {\n    // can't create a texture with the given format\n    return Result(Result::Code::ArgumentInvalid, \"Invalid texture format\");\n  }\n\n  if (!getProperties().isCompressed() && formatDescGL_.type == GL_NONE) {\n    return Result(Result::Code::ArgumentInvalid, \"Invalid texture type\");\n  }\n\n  if (desc.usage & TextureDesc::TextureUsageBits::Storage) {\n    if (!getContext().deviceFeatures().hasInternalFeature(InternalFeatures::TexStorage)) {\n      return Result(Result::Code::Unsupported, \"Texture Storage not supported\");\n    }\n  }\n\n  glInternalFormat_ = formatDescGL_.internalFormat;\n\n  // create the GL texture ID\n  GLuint textureID = 0;\n  getContext().genTextures(1, &textureID);\n\n  if (textureID == 0) {\n    return Result(Result::Code::RuntimeError, \"Failed to create texture ID\");\n  }\n\n  setTextureBufferProperties(textureID, target);\n  setUsage(desc.usage);\n\n  if (desc.type == TextureType::ExternalImage) {\n    // No further initialization needed for external image textures\n    return Result{};\n  } else {\n    return initialize(desc.debugName);\n  }\n}\n\nResult TextureBuffer::initialize(const std::string& debugName) const {\n  const auto target = getTarget();\n  if (target == 0) {\n    return Result{Result::Code::InvalidOperation, \"Unknown texture type\"};\n  }\n  getContext().bindTexture(target, getId());\n  setMaxMipLevel();\n  if (getNumMipLevels() == 1) { // Change default min filter to ensure mipmapping is disabled\n    getContext().texParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST);\n  }\n  if (!getProperties().isCompressed()) {\n    swapTextureChannelsForFormat(getContext(), target, getFormat());\n  }\n  if (!debugName.empty() &&\n      getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugLabel)) {\n    getContext().objectLabel(GL_TEXTURE, getId(), debugName.size(), debugName.c_str());\n  }\n\n  Result result;\n  if (canInitialize()) {\n    if (!supportsTexStorage()) {\n      result = initializeWithUpload();\n    } else {\n      result = initializeWithTexStorage();\n    }\n  }\n\n  getContext().bindTexture(getTarget(), 0);\n  return result;\n}\n\nResult TextureBuffer::initializeWithUpload() const {\n  const auto target = getTarget();\n  const auto range = getFullMipRange();\n  return uploadInternal(target, range, nullptr);\n}\n\nResult TextureBuffer::initializeWithTexStorage() const {\n  const auto range = getFullMipRange();\n  const auto target = getTarget();\n  switch (getType()) {\n  case TextureType::TwoD:\n    getContext().texStorage2D(\n        target, range.numMipLevels, glInternalFormat_, (GLsizei)range.width, (GLsizei)range.height);\n    break;\n  case TextureType::TwoDArray:\n    getContext().texStorage3D(target,\n                              range.numMipLevels,\n                              glInternalFormat_,\n                              (GLsizei)range.width,\n                              (GLsizei)range.height,\n                              (GLsizei)range.numLayers);\n    break;\n  case TextureType::ThreeD:\n    getContext().texStorage3D(target,\n                              range.numMipLevels,\n                              glInternalFormat_,\n                              (GLsizei)range.width,\n                              (GLsizei)range.height,\n                              (GLsizei)range.depth);\n    break;\n  case TextureType::Cube:\n    getContext().texStorage2D(\n        target, range.numMipLevels, glInternalFormat_, (GLsizei)range.width, (GLsizei)range.height);\n    break;\n  case TextureType::ExternalImage:\n  case TextureType::Invalid:\n  default:\n    IGL_DEBUG_ABORT(\"Unknown texture type\");\n    return Result{Result::Code::InvalidOperation, \"Unknown texture type\"};\n  }\n  return getContext().getLastError();\n}\n\nResult TextureBuffer::upload2D(GLenum target,\n                               const TextureRangeDesc& range,\n                               bool texImage,\n                               const void* IGL_NULLABLE data) const {\n  if (data == nullptr || !getProperties().isCompressed()) {\n    if (texImage) {\n      getContext().texImage2D(target,\n                              (GLsizei)range.mipLevel,\n                              formatDescGL_.internalFormat,\n                              (GLsizei)range.width,\n                              (GLsizei)range.height,\n                              0, // border\n                              formatDescGL_.format,\n                              formatDescGL_.type,\n                              data);\n    } else {\n      getContext().texSubImage2D(target,\n                                 (GLsizei)range.mipLevel,\n                                 (GLsizei)range.x,\n                                 (GLsizei)range.y,\n                                 (GLsizei)range.width,\n                                 (GLsizei)range.height,\n                                 formatDescGL_.format,\n                                 formatDescGL_.type,\n                                 data);\n    }\n  } else {\n    const auto numCompressedBytes = getProperties().getBytesPerRange(range);\n    IGL_DEBUG_ASSERT(numCompressedBytes > 0);\n    if (texImage) {\n      getContext().compressedTexImage2D(target,\n                                        (GLint)range.mipLevel,\n                                        formatDescGL_.internalFormat,\n                                        (GLsizei)range.width,\n                                        (GLsizei)range.height,\n                                        0, // border\n                                        (GLsizei)numCompressedBytes, // TODO: does not work\n                                                                     // for compressed\n                                                                     // mipmaps\n                                        data);\n    } else {\n      getContext().compressedTexSubImage2D(getTarget(),\n                                           (GLint)range.mipLevel,\n                                           (GLint)range.x,\n                                           (GLint)range.y,\n                                           (GLsizei)range.width,\n                                           (GLsizei)range.height,\n                                           formatDescGL_.internalFormat,\n                                           (GLsizei)numCompressedBytes, // TODO: does not work\n                                                                        // for compressed\n                                                                        // mipmaps\n                                           data);\n    }\n  }\n  return getContext().getLastError();\n}\nResult TextureBuffer::upload2DArray(GLenum target,\n                                    const TextureRangeDesc& range,\n                                    bool texImage,\n                                    const void* IGL_NULLABLE data) const {\n  if (data == nullptr || !getProperties().isCompressed()) {\n    if (texImage) {\n      getContext().texImage3D(target,\n                              (GLint)range.mipLevel,\n                              formatDescGL_.internalFormat,\n                              (GLsizei)range.width,\n                              (GLsizei)range.height,\n                              (GLsizei)range.numLayers,\n                              0, // border\n                              formatDescGL_.format,\n                              formatDescGL_.type,\n                              data);\n    } else {\n      getContext().texSubImage3D(target,\n                                 (GLsizei)range.mipLevel,\n                                 (GLsizei)range.x,\n                                 (GLsizei)range.y,\n                                 (GLsizei)range.layer,\n                                 (GLsizei)range.width,\n                                 (GLsizei)range.height,\n                                 (GLsizei)range.numLayers,\n                                 formatDescGL_.format,\n                                 formatDescGL_.type,\n                                 data);\n    }\n  } else {\n    const auto numCompressedBytes = getProperties().getBytesPerRange(range);\n    IGL_DEBUG_ASSERT(numCompressedBytes > 0);\n    if (texImage) {\n      getContext().compressedTexImage3D(target,\n                                        (GLint)range.mipLevel,\n                                        formatDescGL_.internalFormat,\n                                        (GLsizei)range.width,\n                                        (GLsizei)range.height,\n                                        (GLsizei)range.numLayers,\n                                        0, // border\n                                        (GLsizei)numCompressedBytes, // TODO: does not work\n                                                                     // for compressed\n                                                                     // mipmaps\n                                        data);\n    } else {\n      getContext().compressedTexSubImage3D(getTarget(),\n                                           (GLint)range.mipLevel,\n                                           (GLint)range.x,\n                                           (GLint)range.y,\n                                           (GLint)range.layer,\n                                           (GLsizei)range.width,\n                                           (GLsizei)range.height,\n                                           (GLsizei)range.numLayers,\n                                           formatDescGL_.internalFormat,\n                                           (GLsizei)numCompressedBytes,\n                                           data);\n    }\n  }\n  return getContext().getLastError();\n}\n\nResult TextureBuffer::upload3D(GLenum target,\n                               const TextureRangeDesc& range,\n                               bool texImage,\n                               const void* IGL_NULLABLE data) const {\n  if (data == nullptr || !getProperties().isCompressed()) {\n    if (texImage) {\n      getContext().texImage3D(target,\n                              (GLint)range.mipLevel,\n                              formatDescGL_.internalFormat,\n                              (GLsizei)range.width,\n                              (GLsizei)range.height,\n                              (GLsizei)range.depth,\n                              0, // border\n                              formatDescGL_.format,\n                              formatDescGL_.type,\n                              data);\n    } else {\n      getContext().texSubImage3D(target,\n                                 (GLsizei)range.mipLevel,\n                                 (GLsizei)range.x,\n                                 (GLsizei)range.y,\n                                 (GLsizei)range.z,\n                                 (GLsizei)range.width,\n                                 (GLsizei)range.height,\n                                 (GLsizei)range.depth,\n                                 formatDescGL_.format,\n                                 formatDescGL_.type,\n                                 data);\n    }\n  } else {\n    const auto numCompressedBytes = getProperties().getBytesPerRange(range);\n    IGL_DEBUG_ASSERT(numCompressedBytes > 0);\n    if (texImage) {\n      getContext().compressedTexImage3D(target,\n                                        (GLint)range.mipLevel,\n                                        formatDescGL_.internalFormat,\n                                        (GLsizei)range.width,\n                                        (GLsizei)range.height,\n                                        (GLsizei)range.depth,\n                                        0, // border\n                                        (GLsizei)numCompressedBytes, // TODO: does not work\n                                                                     // for compressed\n                                                                     // mipmaps\n                                        data);\n    } else {\n      getContext().compressedTexSubImage3D(getTarget(),\n                                           (GLint)range.mipLevel,\n                                           (GLint)range.x,\n                                           (GLint)range.y,\n                                           (GLint)range.z,\n                                           (GLsizei)range.width,\n                                           (GLsizei)range.height,\n                                           (GLsizei)range.depth,\n                                           formatDescGL_.internalFormat,\n                                           (GLsizei)numCompressedBytes,\n                                           data);\n    }\n  }\n  return getContext().getLastError();\n}\n\nbool TextureBuffer::needsRepacking(const TextureRangeDesc& range, size_t bytesPerRow) const {\n  if (bytesPerRow == 0) {\n    return false;\n  }\n\n  const auto rangeBytesPerRow = getProperties().getBytesPerRow(range);\n  if (rangeBytesPerRow == bytesPerRow) {\n    return false;\n  }\n\n  // GL_UNPACK_ALIGNMENT supports padding up to, but not including, the alignment value.\n  // If bytesPerRow is equal to the packed row length rounded up to the nearest alignment multiple,\n  // the data does not need to be repacked.\n  const auto delta = bytesPerRow - rangeBytesPerRow;\n  if (delta < 8 && bytesPerRow % 8 == 0) {\n    return false;\n  } else if (delta < 4 && bytesPerRow % 4 == 0) {\n    return false;\n  } else if (delta < 2 && bytesPerRow % 2 == 0) {\n    return false;\n  }\n\n  if (getContext().deviceFeatures().hasInternalFeature(InternalFeatures::UnpackRowLength)) {\n    // GL_UNPACK_ROW_LENGTH supports cases where bytesPerRow is a multiple of the texel size or, for\n    // compressed textures, the texel block size.\n    return bytesPerRow % getProperties().bytesPerBlock != 0;\n  }\n\n  return true;\n}\n\n// upload data into the given mip level\n// a sub-rect of the texture may be specified to only upload the sub-rect\nResult TextureBuffer::uploadInternal(TextureType /*type*/,\n                                     const TextureRangeDesc& range,\n                                     const void* IGL_NULLABLE data,\n                                     size_t bytesPerRow,\n                                     const uint32_t* IGL_NULLABLE /*mipLevelBytes*/) const {\n  if (data == nullptr) {\n    return Result{};\n  }\n  const auto target = getTarget();\n  if (target == 0) {\n    return Result{Result::Code::InvalidOperation, \"Unknown texture type\"};\n  }\n  getContext().bindTexture(target, getId());\n\n  auto result = uploadInternal(target, range, data, bytesPerRow);\n\n  getContext().bindTexture(getTarget(), 0);\n  return result;\n}\n\nResult TextureBuffer::uploadInternal(GLenum target,\n                                     const TextureRangeDesc& range,\n                                     const void* IGL_NULLABLE data,\n                                     size_t bytesPerRow) const {\n  // Use TexImage when range covers full texture AND texture was not initialized with TexStorage\n  const auto texImage = isValidForTexImage(range) && !supportsTexStorage();\n\n  const bool unpackRowLengthSupported =\n      getContext().deviceFeatures().hasInternalFeature(InternalFeatures::UnpackRowLength);\n  const int unpackRowLength = unpackRowLengthSupported &&\n                                      bytesPerRow % getProperties().bytesPerBlock == 0\n                                  ? static_cast<int>(bytesPerRow / getProperties().bytesPerBlock)\n                                  : 0;\n\n  if (unpackRowLength > 0) {\n    getContext().pixelStorei(GL_UNPACK_ROW_LENGTH, unpackRowLength);\n    getContext().pixelStorei(GL_UNPACK_ALIGNMENT, 1);\n  } else {\n    if (unpackRowLengthSupported) {\n      getContext().pixelStorei(GL_UNPACK_ROW_LENGTH, 0);\n    }\n    getContext().pixelStorei(GL_UNPACK_ALIGNMENT,\n                             this->getAlignment(bytesPerRow, range.mipLevel, range.width));\n  }\n\n  Result result;\n  for (auto mipLevel = range.mipLevel; mipLevel < range.mipLevel + range.numMipLevels; ++mipLevel) {\n    const auto mipRange = range.atMipLevel(mipLevel);\n    for (auto face = range.face; face < range.face + range.numFaces; ++face) {\n      const auto faceRange = mipRange.atFace(face);\n      const auto* faceData =\n          data == nullptr ? nullptr : getSubRangeStart(data, range, faceRange, bytesPerRow);\n      switch (type_) {\n      case TextureType::TwoD:\n        result = upload2D(target, faceRange, texImage, faceData);\n        break;\n      case TextureType::TwoDArray:\n        result = upload2DArray(target, faceRange, texImage, faceData);\n        break;\n      case TextureType::ThreeD:\n        result = upload3D(target, faceRange, texImage, faceData);\n        break;\n      case TextureType::Cube:\n        result = upload2D(kCubeFaceTargets[faceRange.face], faceRange, texImage, faceData);\n        break;\n      case TextureType::ExternalImage:\n      case TextureType::Invalid:\n      default:\n        return Result{Result::Code::InvalidOperation, \"Unknown texture type\"};\n      }\n      if (!result.isOk()) {\n        return result;\n      }\n    }\n    if (!result.isOk()) {\n      break;\n    }\n  }\n\n  if (mipmapGeneration_ == TextureDesc::TextureMipmapGeneration::AutoGenerateOnUpload) {\n    if (range.mipLevel != 0) {\n      return Result{Result::Code::InvalidOperation,\n                    \"AutoGenerateOnUpload requires mipLevel to be uploaded to be 0\"};\n    }\n    generateMipmap();\n    mipmapsAreAvailableAndUploaded_ = true;\n  }\n\n  return result;\n}\n\nbool TextureBuffer::canInitialize() const {\n  return !getProperties().isCompressed() ||\n         (supportsTexStorage() && getContext().deviceFeatures().hasTextureFeature(\n                                      TextureFeatures::TextureCompressionTexStorage)) ||\n         getContext().deviceFeatures().hasTextureFeature(\n             TextureFeatures::TextureCompressionTexImage);\n}\n\nbool TextureBuffer::supportsTexStorage() const {\n  return (getUsage() & TextureDesc::TextureUsageBits::Storage) != 0 &&\n         contains(getContext().deviceFeatures().getTextureFormatCapabilities(getFormat()),\n                  ICapabilities::TextureFormatCapabilityBits::Storage);\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/TextureBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/TextureBufferBase.h>\n\nnamespace igl::opengl {\n\n// TextureBuffer encapsulates OpenGL textures\nclass TextureBuffer : public TextureBufferBase {\n  using Super = TextureBufferBase;\n\n public:\n  TextureBuffer(IContext& context, TextureFormat format) : Super(context, format) {}\n  ~TextureBuffer() override;\n\n  // Texture overrides\n  Result create(const TextureDesc& desc, bool hasStorageAlready) override;\n  void bindImage(size_t unit) override;\n  uint64_t getTextureId() const override;\n\n protected:\n  Result initialize(const std::string& debugName) const;\n  Result initializeWithUpload() const;\n  Result initializeWithTexStorage() const;\n  Result uploadInternal(TextureType type,\n                        const TextureRangeDesc& range,\n                        const void* IGL_NULLABLE data,\n                        size_t bytesPerRow,\n                        const uint32_t* IGL_NULLABLE mipLevelBytes) const override;\n  Result uploadInternal(GLenum target,\n                        const TextureRangeDesc& range,\n                        const void* IGL_NULLABLE data,\n                        size_t bytesPerRow = 0) const;\n  Result upload2D(GLenum target,\n                  const TextureRangeDesc& range,\n                  bool texImage,\n                  const void* IGL_NULLABLE data) const;\n  Result upload2DArray(GLenum target,\n                       const TextureRangeDesc& range,\n                       bool texImage,\n                       const void* IGL_NULLABLE data) const;\n  Result upload3D(GLenum target,\n                  const TextureRangeDesc& range,\n                  bool texImage,\n                  const void* IGL_NULLABLE data) const;\n\n protected:\n  // NOLINTNEXTLINE(misc-non-private-member-variables-in-classes)\n  FormatDescGL formatDescGL_;\n\n private:\n  [[nodiscard]] bool needsRepacking(const TextureRangeDesc& range, size_t bytesPerRow) const final;\n  Result createTexture(const TextureDesc& desc);\n  bool canInitialize() const;\n  bool supportsTexStorage() const;\n  mutable uint64_t textureHandle_ = 0;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/TextureBufferBase.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/TextureBufferBase.h>\n\nnamespace igl::opengl {\n\nTextureType TextureBufferBase::getType() const {\n  // TODO: Handle compressed texture type\n  switch (target_) {\n  case GL_TEXTURE_CUBE_MAP:\n    return TextureType::Cube;\n  case GL_TEXTURE_2D:\n  case GL_TEXTURE_2D_MULTISAMPLE:\n    return TextureType::TwoD;\n  case GL_TEXTURE_2D_ARRAY:\n  case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:\n    if (getContext().deviceFeatures().hasFeature(DeviceFeatures::Texture2DArray)) {\n      return TextureType::TwoDArray;\n    }\n    break;\n  case GL_TEXTURE_3D:\n    if (getContext().deviceFeatures().hasFeature(DeviceFeatures::Texture3D)) {\n      return TextureType::ThreeD;\n    }\n    break;\n  case GL_TEXTURE_EXTERNAL_OES:\n    if (getContext().deviceFeatures().hasFeature(DeviceFeatures::TextureExternalImage)) {\n      return TextureType::ExternalImage;\n    }\n    break;\n  }\n  IGL_DEBUG_ABORT(\"Unsupported OGL Texture Target: 0x%x\", target_);\n  return TextureType::Invalid;\n}\n\nTextureDesc::TextureUsage TextureBufferBase::getUsage() const {\n  return usage_;\n}\n\n// bind this as a source texture for rendering from\nvoid TextureBufferBase::bind() {\n  IGL_DEBUG_ASSERT(getUsage() & TextureDesc::TextureUsageBits::Sampled);\n  getContext().bindTexture(target_, textureID_);\n}\n\nvoid TextureBufferBase::unbind() {\n  IGL_DEBUG_ASSERT(getUsage() & TextureDesc::TextureUsageBits::Sampled);\n  getContext().bindTexture(target_, 0);\n}\n\nvoid TextureBufferBase::attachAsColor(uint32_t index, const AttachmentParams& params) {\n  IGL_DEBUG_ASSERT(getUsage() & TextureDesc::TextureUsageBits::Attachment);\n  if (IGL_DEBUG_VERIFY(textureID_)) {\n    attach(GL_COLOR_ATTACHMENT0 + index, params, textureID_);\n  }\n}\n\nvoid TextureBufferBase::attach(GLenum attachment,\n                               const AttachmentParams& params,\n                               GLuint textureID) {\n  const GLenum target =\n      target_ == GL_TEXTURE_CUBE_MAP ? GL_TEXTURE_CUBE_MAP_POSITIVE_X + params.face : target_;\n  GLenum framebufferTarget = GL_FRAMEBUFFER;\n  const auto& deviceFeatures = getContext().deviceFeatures();\n  if (deviceFeatures.hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    framebufferTarget = params.read ? GL_READ_FRAMEBUFFER : GL_DRAW_FRAMEBUFFER;\n  }\n  const auto numSamples = getSamples();\n  const auto numLayers = getNumLayers();\n\n  if (numSamples > 1) {\n    IGL_DEBUG_ASSERT(\n        attachment == GL_COLOR_ATTACHMENT0 || attachment == GL_DEPTH_ATTACHMENT ||\n            attachment == GL_STENCIL_ATTACHMENT,\n        \"Multisample framebuffer can only use GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT \"\n        \"or GL_STENCIL_ATTACHMENT\");\n    if (params.stereo) {\n      getContext().framebufferTextureMultisampleMultiview(framebufferTarget,\n                                                          attachment,\n                                                          textureID,\n                                                          params.mipLevel,\n                                                          static_cast<GLsizei>(numSamples),\n                                                          0,\n                                                          2);\n    } else {\n      // `IMG_multisampled_render_to_texture` unlike `EXT_multisampled_render_to_texture`,\n      // only supports  GL_FRAMEBUFFER, not GL_DRAW/READ_FRAMEBUFFER\n      if ((framebufferTarget == GL_DRAW_FRAMEBUFFER || framebufferTarget == GL_READ_FRAMEBUFFER) &&\n          !deviceFeatures.hasExtension(Extensions::MultiSampleExt) &&\n          deviceFeatures.hasExtension(Extensions::MultiSampleImg)) {\n        framebufferTarget = GL_FRAMEBUFFER;\n      }\n      getContext().framebufferTexture2DMultisample(\n          framebufferTarget, attachment, target, textureID, params.mipLevel, getSamples());\n    }\n  } else {\n    if (params.stereo) {\n      getContext().framebufferTextureMultiview(\n          framebufferTarget, attachment, textureID, params.mipLevel, 0, 2);\n    } else if (numLayers > 1) {\n      getContext().framebufferTextureLayer(\n          framebufferTarget, attachment, textureID, params.mipLevel, params.layer);\n    } else {\n      getContext().framebufferTexture2D(\n          framebufferTarget, attachment, target, textureID, params.mipLevel);\n    }\n  }\n}\n\nvoid TextureBufferBase::detachAsColor(uint32_t index, bool read) {\n  AttachmentParams params{};\n  params.read = read;\n  attach(GL_COLOR_ATTACHMENT0 + index, params, 0);\n}\n\nvoid TextureBufferBase::attachAsDepth(const AttachmentParams& params) {\n  if (IGL_DEBUG_VERIFY(textureID_)) {\n    attach(GL_DEPTH_ATTACHMENT, params, textureID_);\n  }\n}\n\nvoid TextureBufferBase::detachAsDepth(bool read) {\n  AttachmentParams params{};\n  params.read = read;\n  attach(GL_DEPTH_ATTACHMENT, params, 0);\n}\n\nvoid TextureBufferBase::attachAsStencil(const AttachmentParams& params) {\n  if (IGL_DEBUG_VERIFY(textureID_)) {\n    attach(GL_STENCIL_ATTACHMENT, params, textureID_);\n  }\n}\n\nvoid TextureBufferBase::detachAsStencil(bool read) {\n  AttachmentParams params{};\n  params.read = read;\n  attach(GL_STENCIL_ATTACHMENT, params, 0);\n}\n\nvoid TextureBufferBase::setMaxMipLevel() const {\n  if (getContext().deviceFeatures().hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n    getContext().texParameteri(getTarget(), GL_TEXTURE_MAX_LEVEL, (GLint)(numMipLevels_ - 1));\n  }\n}\n\nvoid TextureBufferBase::generateMipmap(ICommandQueue& /* unused */,\n                                       const TextureRangeDesc* IGL_NULLABLE /* unused */) const {\n  generateMipmap();\n}\n\nvoid TextureBufferBase::generateMipmap(ICommandBuffer& /* unused */,\n                                       const TextureRangeDesc* IGL_NULLABLE /* unused */) const {\n  generateMipmap();\n}\n\nvoid TextureBufferBase::generateMipmap() const {\n  getContext().bindTexture(getTarget(), getId());\n  setMaxMipLevel();\n  getContext().generateMipmap(getTarget());\n}\n\nbool TextureBufferBase::isRequiredGenerateMipmap() const {\n  if (mipmapsAreAvailableAndUploaded_) {\n    return false;\n  }\n\n  return numMipLevels_ > 1;\n}\n\nbool TextureBufferBase::isValidForTexImage(const TextureRangeDesc& range) const {\n  const auto dimensions = getDimensions();\n  const auto levelWidth = std::max(dimensions.width >> range.mipLevel, 1u);\n  const auto levelHeight = std::max(dimensions.height >> range.mipLevel, 1u);\n  const auto levelDepth = std::max(dimensions.depth >> range.mipLevel, 1u);\n\n  return (range.x == 0 && range.y == 0 && range.z == 0 && range.layer == 0 &&\n          range.width == levelWidth && range.height == levelHeight && range.depth == levelDepth &&\n          range.numLayers == getNumLayers());\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/TextureBufferBase.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/Texture.h>\n\nnamespace igl::opengl {\n\n// TextureBufferBase encapsulates OpenGL textures\nclass TextureBufferBase : public Texture {\n  using Super = Texture;\n\n public:\n  TextureBufferBase(IContext& context, TextureFormat format) : Super(context, format) {}\n\n  // ITexture overrides\n  [[nodiscard]] TextureType getType() const override;\n  [[nodiscard]] TextureDesc::TextureUsage getUsage() const override;\n\n  void bind() override;\n  void bindImage(size_t unit) override {}\n  void unbind() override;\n  void attachAsColor(uint32_t index, const AttachmentParams& params) override;\n  void detachAsColor(uint32_t index, bool read) override;\n  void attachAsDepth(const AttachmentParams& params) override;\n  void detachAsDepth(bool read) override;\n  void attachAsStencil(const AttachmentParams& params) override;\n  void detachAsStencil(bool read) override;\n  void generateMipmap(ICommandQueue& cmdQueue,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n  void generateMipmap(ICommandBuffer& cmdBuffer,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n  [[nodiscard]] bool isRequiredGenerateMipmap() const override;\n\n  [[nodiscard]] GLuint getId() const override {\n    return textureID_;\n  }\n\n  [[nodiscard]] GLuint getTarget() const {\n    return target_;\n  }\n\n protected:\n  // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n  IGL_INLINE void setTextureBufferProperties(GLuint textureID, GLenum target) {\n    textureID_ = textureID;\n    target_ = target;\n  }\n\n  IGL_INLINE void setUsage(TextureDesc::TextureUsage usage) {\n    usage_ = usage;\n  }\n\n  void attach(GLenum attachment, const AttachmentParams& params, GLuint textureID);\n  void setMaxMipLevel() const;\n\n  [[nodiscard]] bool isValidForTexImage(const TextureRangeDesc& range) const;\n\n  /// @brief To record whether mipmaps are available and uploaded to the GPU. This is used by the\n  /// `isRequiredGenerateMipmap()` function\n  mutable bool mipmapsAreAvailableAndUploaded_ = false;\n\n protected:\n  void generateMipmap() const;\n\n private:\n  // the GL ID for this texture\n  GLuint textureID_ = 0;\n  // target depends on usage and texture type\n  GLenum target_ = 0;\n  TextureDesc::TextureUsage usage_ = 0;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/TextureBufferExternal.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/TextureBufferExternal.h>\n\nnamespace igl::opengl {\nTextureBufferExternal::TextureBufferExternal(IContext& context,\n                                             TextureFormat format,\n                                             TextureDesc::TextureUsage usage) :\n  Super(context, format) {\n  FormatDescGL formatDescGL;\n  toFormatDescGL(format, usage, formatDescGL);\n  glInternalFormat_ = formatDescGL.internalFormat;\n\n  setUsage(usage);\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/TextureBufferExternal.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/TextureBufferBase.h>\n\nnamespace igl::opengl {\n\n// TextureBufferExternal encapsulates OpenGL textures without the guarantee of the lifecycle\n// Specifically, this class does not delete the GL texture it encapsulates on destruction\nclass TextureBufferExternal : public TextureBufferBase {\n  using Super = TextureBufferBase;\n  friend class PlatformDevice; // So that PlatformDevice can do setTextureBufferProperties\n\n public:\n  explicit TextureBufferExternal(IContext& context,\n                                 TextureFormat format,\n                                 TextureDesc::TextureUsage usage);\n  ~TextureBufferExternal() override = default;\n\n  [[nodiscard]] bool supportsUpload() const final {\n    return false;\n  }\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/TextureTarget.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/TextureTarget.h>\n\nnamespace igl::opengl {\n\nTextureTarget::~TextureTarget() {\n  if (renderBufferID_ != 0) {\n    getContext().deleteRenderbuffers(1, &renderBufferID_);\n  }\n}\n\nTextureType TextureTarget::getType() const {\n  return TextureType::TwoD;\n}\n\nTextureDesc::TextureUsage TextureTarget::getUsage() const {\n  return TextureDesc::TextureUsageBits::Attachment;\n}\n\nbool TextureTarget::canPresent() const noexcept {\n  return canPresent_;\n}\n\n// create a 2D texture given the specified dimensions and format\nResult TextureTarget::create(const TextureDesc& desc, bool hasStorageAlready) {\n  Result result = Super::create(desc, hasStorageAlready);\n  if (result.isOk()) {\n    if (desc.usage & TextureDesc::TextureUsageBits::Attachment) {\n      result = createRenderBuffer(desc, hasStorageAlready);\n    } else {\n      result = Result(Result::Code::Unsupported, \"invalid usage!\");\n    }\n  }\n  return result;\n}\n\n// create a render buffer for render target usages\nResult TextureTarget::createRenderBuffer(const TextureDesc& desc, bool hasStorageAlready) {\n  if (desc.type != TextureType::TwoD) {\n    // Renderbuffers only support 2D textures\n    return Result{Result::Code::Unsupported, \"Texture type must be TwoD.\"};\n  }\n  if (desc.numMipLevels > 1) {\n    return Result{Result::Code::Unsupported, \"numMipLevels must be 1.\"};\n  }\n\n  if (!toRenderBufferFormatGL(desc.usage, glInternalFormat_)) {\n    // can't create a texture with the given format\n    return Result{Result::Code::ArgumentInvalid, \"Invalid texture format\"};\n  }\n\n  // create the GL render buffer\n  getContext().genRenderbuffers(1, &renderBufferID_);\n\n  if (!hasStorageAlready) {\n    getContext().bindRenderbuffer(GL_RENDERBUFFER, renderBufferID_);\n\n    if (desc.numSamples > 1) {\n      getContext().renderbufferStorageMultisample(\n          GL_RENDERBUFFER, desc.numSamples, glInternalFormat_, getWidth(), getHeight());\n    } else {\n      getContext().renderbufferStorage(\n          GL_RENDERBUFFER, glInternalFormat_, (GLsizei)getWidth(), (GLsizei)getHeight());\n    }\n    if (!desc.debugName.empty() &&\n        getContext().deviceFeatures().hasInternalFeature(InternalFeatures::DebugLabel)) {\n      getContext().objectLabel(\n          GL_RENDERBUFFER, renderBufferID_, desc.debugName.size(), desc.debugName.c_str());\n    }\n\n    getContext().bindRenderbuffer(GL_RENDERBUFFER, 0);\n  }\n\n  return Result();\n}\n\nvoid TextureTarget::bind() {\n  getContext().bindRenderbuffer(GL_RENDERBUFFER, renderBufferID_);\n}\n\nvoid TextureTarget::unbind() {\n  getContext().bindRenderbuffer(GL_RENDERBUFFER, 0);\n}\n\nvoid TextureTarget::bindImage(size_t /*unit*/) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid TextureTarget::attachAsColor(uint32_t index, const AttachmentParams& params) {\n  if (IGL_DEBUG_VERIFY(renderBufferID_)) {\n    attach(GL_COLOR_ATTACHMENT0 + index, params, renderBufferID_);\n  }\n}\n\nvoid TextureTarget::attach(GLenum attachment,\n                           const AttachmentParams& params,\n                           GLuint renderBufferId) {\n  IGL_DEBUG_ASSERT(params.stereo == false);\n  IGL_DEBUG_ASSERT(params.face == 0);\n  IGL_DEBUG_ASSERT(params.layer == 0);\n  IGL_DEBUG_ASSERT(params.mipLevel == 0);\n\n  GLenum framebufferTarget = GL_FRAMEBUFFER;\n  if (getContext().deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    framebufferTarget = params.read ? GL_READ_FRAMEBUFFER : GL_DRAW_FRAMEBUFFER;\n  }\n  if (renderBufferId) {\n    getContext().framebufferRenderbuffer(\n        framebufferTarget, attachment, GL_RENDERBUFFER, renderBufferId);\n  } else {\n    // Binding to render buffer ID 0 is undefined in iOS so unbind as texture\n    getContext().framebufferTexture2D(framebufferTarget, attachment, GL_TEXTURE_2D, 0, 0);\n  }\n}\n\nvoid TextureTarget::detachAsColor(uint32_t index, bool read) {\n  AttachmentParams params{};\n  params.read = read;\n  attach(GL_COLOR_ATTACHMENT0 + index, params, 0);\n}\n\nvoid TextureTarget::attachAsDepth(const AttachmentParams& params) {\n  if (IGL_DEBUG_VERIFY(renderBufferID_)) {\n    attach(GL_DEPTH_ATTACHMENT, params, renderBufferID_);\n  }\n}\n\nvoid TextureTarget::detachAsDepth(bool read) {\n  AttachmentParams params{};\n  params.read = read;\n  attach(GL_DEPTH_ATTACHMENT, params, 0);\n}\n\nvoid TextureTarget::attachAsStencil(const AttachmentParams& params) {\n  if (IGL_DEBUG_VERIFY(renderBufferID_)) {\n    attach(GL_STENCIL_ATTACHMENT, params, renderBufferID_);\n  }\n}\n\nvoid TextureTarget::detachAsStencil(bool read) {\n  AttachmentParams params{};\n  params.read = read;\n  attach(GL_STENCIL_ATTACHMENT, params, 0);\n}\n\nbool TextureTarget::toRenderBufferFormatGL(TextureDesc::TextureUsage usage,\n                                           GLenum& formatGL) const {\n  FormatDescGL formatDescGL;\n  if (!toFormatDescGL(getFormat(), usage, formatDescGL)) {\n    return false;\n  }\n  formatGL = formatDescGL.internalFormat;\n  return true;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/TextureTarget.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/Texture.h>\n\nnamespace igl::opengl {\n\n// TextureTarget encapsulates OpenGL renderbuffers\nclass TextureTarget final : public Texture {\n  using Super = Texture;\n\n public:\n  TextureTarget(IContext& context, TextureFormat format) : Super(context, format) {}\n  TextureTarget(IContext& context, TextureFormat format, bool canPresent) :\n    Super(context, format), canPresent_(canPresent) {}\n  ~TextureTarget() override;\n  TextureTarget(const TextureTarget&) = delete;\n  TextureTarget& operator=(const TextureTarget&) = delete;\n  TextureTarget(TextureTarget&&) = delete;\n  TextureTarget& operator=(TextureTarget&&) = delete;\n\n  // ITexture overrides\n  [[nodiscard]] TextureType getType() const override;\n  [[nodiscard]] TextureDesc::TextureUsage getUsage() const override;\n\n  // Texture overrides\n  Result create(const TextureDesc& desc, bool hasStorageAlready) override;\n\n  void bind() override;\n  void unbind() override;\n  void bindImage(size_t unit) override;\n  void attachAsColor(uint32_t index, const AttachmentParams& params) override;\n  void detachAsColor(uint32_t index, bool read) override;\n  void attachAsDepth(const AttachmentParams& params) override;\n  void detachAsDepth(bool read) override;\n  void attachAsStencil(const AttachmentParams& params) override;\n  void detachAsStencil(bool read) override;\n\n  // @fb-only\n  [[nodiscard]] GLuint getId() const override {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return 0;\n  }\n\n private:\n  [[nodiscard]] bool canPresent() const noexcept override;\n\n  void attach(GLenum attachment, const AttachmentParams& params, GLuint renderBufferId);\n\n  /// @returns false if an unknown format is specified\n  bool toRenderBufferFormatGL(TextureDesc::TextureUsage usage, GLenum& formatGL) const;\n\n  Result createRenderBuffer(const TextureDesc& desc, bool hasStorageAlready);\n\n  GLuint renderBufferID_ = 0;\n#if IGL_PLATFORM_IOS\n  bool canPresent_ = false;\n#else\n  bool canPresent_ = true;\n#endif\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Timer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/Timer.h>\n\n#include <igl/opengl/DeviceFeatureSet.h>\n\nnamespace igl::opengl {\n\n#ifndef GL_TIME_ELAPSED\n#define GL_TIME_ELAPSED 0x88BF\n#endif\n\n#ifndef GL_QUERY_RESULT\n#define GL_QUERY_RESULT 0x8866\n#endif\n\n#ifndef GL_QUERY_RESULT_AVAILABLE\n#define GL_QUERY_RESULT_AVAILABLE 0x8867\n#endif\n\n#ifndef GL_GPU_DISJOINT_EXT\n#define GL_GPU_DISJOINT_EXT 0x8FBB\n#endif\n\nTimer::Timer(IContext& context) : WithContext(context) {\n  iglGenQueries(1, &id_);\n  iglBeginQuery(GL_TIME_ELAPSED, id_);\n}\n\nTimer::~Timer() {\n  iglDeleteQueries(1, &id_);\n}\n\nvoid Timer::end() {\n  iglEndQuery(GL_TIME_ELAPSED);\n}\n\nuint64_t Timer::getElapsedTimeNanos() const {\n  // Check for GPU disjoint event (power management, context switch, etc.)\n  // If a disjoint occurred, the timing results are invalid\n  if (DeviceFeatureSet::usesOpenGLES()) {\n    GLint disjoint = 0;\n    getContext().getIntegerv(GL_GPU_DISJOINT_EXT, &disjoint);\n    if (disjoint) {\n      return 0;\n    }\n  }\n\n  GLuint64 result = 0;\n  iglGetQueryObjectui64v(id_, GL_QUERY_RESULT, &result);\n  return result;\n}\n\nbool Timer::resultsAvailable() const {\n  GLint available = 0;\n  iglGetQueryObjectiv(id_, GL_QUERY_RESULT_AVAILABLE, &available);\n  // NOLINTNEXTLINE(readability-implicit-bool-conversion)\n  return available;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Timer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Timer.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/WithContext.h>\n\nnamespace igl::opengl {\n\nclass Timer : public WithContext, public ITimer {\n public:\n  explicit Timer(IContext& context);\n  ~Timer() override;\n\n  Timer(const Timer&) = delete;\n  Timer& operator=(const Timer&) = delete;\n  Timer(Timer&&) = delete;\n  Timer& operator=(Timer&&) = delete;\n\n  void end();\n\n  [[nodiscard]] uint64_t getElapsedTimeNanos() const override;\n\n  [[nodiscard]] bool resultsAvailable() const override;\n\n private:\n  GLuint id_ = 0;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/TimestampQueries.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/TimestampQueries.h>\n\n#include <igl/opengl/GLFunc.h>\n\n#ifndef GL_TIME_ELAPSED\n#define GL_TIME_ELAPSED 0x88BF\n#endif\n\n#ifndef GL_QUERY_RESULT_AVAILABLE\n#define GL_QUERY_RESULT_AVAILABLE 0x8867\n#endif\n\n#ifndef GL_QUERY_RESULT\n#define GL_QUERY_RESULT 0x8866\n#endif\n\nnamespace igl::opengl {\n\nTimestampQueries::TimestampQueries(IContext& context, uint32_t maxSlots) :\n  WithContext(context), maxSlots_(maxSlots) {\n  queryIds_.resize(maxSlots);\n  iglGenQueries(maxSlots, queryIds_.data());\n}\n\nTimestampQueries::~TimestampQueries() {\n  if (!queryIds_.empty()) {\n    iglDeleteQueries(static_cast<GLsizei>(queryIds_.size()), queryIds_.data());\n  }\n}\n\nuint32_t TimestampQueries::capacity() const {\n  return maxSlots_;\n}\n\nuint32_t TimestampQueries::count() const {\n  return currentIndex_;\n}\n\nvoid TimestampQueries::reset() {\n  currentIndex_ = 0;\n}\n\nbool TimestampQueries::resultsAvailable() const {\n  if (currentIndex_ == 0) {\n    return false;\n  }\n  GLint available = 0;\n  iglGetQueryObjectiv(queryIds_[currentIndex_ - 1], GL_QUERY_RESULT_AVAILABLE, &available);\n  return available != 0;\n}\n\nuint64_t TimestampQueries::getElapsedNanos(uint32_t slotIndex) const {\n  if (slotIndex >= currentIndex_) {\n    return 0;\n  }\n\n  GLint available = 0;\n  iglGetQueryObjectiv(queryIds_[slotIndex], GL_QUERY_RESULT_AVAILABLE, &available);\n  if (!available) {\n    return 0;\n  }\n\n  GLuint64 result = 0;\n  iglGetQueryObjectui64v(queryIds_[slotIndex], GL_QUERY_RESULT, &result);\n  return result;\n}\n\nvoid TimestampQueries::beginElapsedQuery(uint32_t slotIndex) {\n  if (slotIndex >= maxSlots_) {\n    return;\n  }\n  iglBeginQuery(GL_TIME_ELAPSED, queryIds_[slotIndex]);\n  if (slotIndex >= currentIndex_) {\n    currentIndex_ = slotIndex + 1;\n  }\n}\n\nvoid TimestampQueries::endElapsedQuery() {\n  iglEndQuery(GL_TIME_ELAPSED);\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/TimestampQueries.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/TimestampQueries.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/WithContext.h>\n\nnamespace igl::opengl {\n\nclass TimestampQueries : public ITimestampQueries, public WithContext {\n public:\n  TimestampQueries(IContext& context, uint32_t maxSlots);\n  ~TimestampQueries() override;\n  TimestampQueries(TimestampQueries&&) = delete;\n  TimestampQueries& operator=(TimestampQueries&&) = delete;\n  TimestampQueries(const TimestampQueries&) = delete;\n  TimestampQueries& operator=(const TimestampQueries&) = delete;\n\n  [[nodiscard]] uint32_t capacity() const override;\n  [[nodiscard]] uint32_t count() const override;\n  void reset() override;\n  [[nodiscard]] bool resultsAvailable() const override;\n  [[nodiscard]] uint64_t getElapsedNanos(uint32_t slotIndex) const override;\n\n  /// Start a GL_TIME_ELAPSED query for the given timing slot.\n  /// Must be paired with endElapsedQuery(). Cannot be nested.\n  void beginElapsedQuery(uint32_t slotIndex);\n\n  /// End the active GL_TIME_ELAPSED query.\n  void endElapsedQuery();\n\n private:\n  std::vector<GLuint> queryIds_;\n  uint32_t maxSlots_ = 0;\n  uint32_t currentIndex_ = 0; // not atomic — GL is single-threaded\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/UnbindPolicy.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nnamespace igl::opengl {\n\nenum class UnbindPolicy : uint8_t {\n  Default, // Do nothing\n  EndScope, // Unbind at end of scope\n  /// Unbinding a device when it's no longer scoped will clear the context from being current.\n  ClearContext,\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/UniformAdapter.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/UniformAdapter.h>\n\n#include <igl/opengl/Buffer.h>\n#include <igl/opengl/UniformBuffer.h>\n\nnamespace igl::opengl {\n\nUniformAdapter::UniformAdapter(const IContext& context, PipelineType type) : pipelineType_(type) {\n  // NOTE: 32 \"feels\" right and yielded good results in MobileLab. Goal here is to minimize\n  // number of resize's in the vector but not be unreasonably large.\n  constexpr size_t kLikelyMaximumNumUniforms = 32;\n  uniforms_.reserve(kLikelyMaximumNumUniforms);\n\n  const auto& deviceFeatures = context.deviceFeatures();\n  if (pipelineType_ == PipelineType::Render) {\n    maxUniforms_ = deviceFeatures.getMaxVertexUniforms() + deviceFeatures.getMaxFragmentUniforms();\n  } else {\n    maxUniforms_ = deviceFeatures.getMaxComputeUniforms();\n  }\n\n  deviceFeatures.getFeatureLimits(DeviceFeatureLimits::BufferAlignment, uniformBufferAlignment_);\n\n  uniformBuffersDirtyMask_ = 0;\n#if IGL_DEBUG\n  uniformsDirty_.resize(maxUniforms_);\n#endif\n}\n\nvoid UniformAdapter::shrinkUniformUsage() {\n  static constexpr uint32_t kMaxUniformBytes = 32 * 1024;\n  static constexpr uint32_t kMaxShrinkUniformCounter = 1000;\n  if (uniformData_.size() > kMaxUniformBytes && usedUniformDataBytes_ < uniformData_.size() / 2) {\n    shrinkUniformDataCounter_++;\n    if (shrinkUniformDataCounter_ > kMaxShrinkUniformCounter) {\n      uniformData_.resize(uniformData_.size() / 2);\n      shrinkUniformDataCounter_ = 0;\n    }\n  } else {\n    shrinkUniformDataCounter_ = 0;\n  }\n}\n\nvoid UniformAdapter::clearUniformBuffers() {\n  usedUniformDataBytes_ = 0;\n  uniforms_.clear();\n  uniformBuffersDirtyMask_ = 0;\n\n#if IGL_DEBUG\n  std::fill(uniformsDirty_.begin(), uniformsDirty_.end(), false);\n#endif\n}\n\nvoid UniformAdapter::setUniform(const UniformDesc& uniformDesc,\n                                const void* data,\n                                Result* outResult) {\n  auto location = uniformDesc.location;\n  IGL_DEBUG_ASSERT(location >= 0, \"Invalid uniformDesc->location passed to setUniform\");\n\n  // Early out if any of the parameters are invalid.\n  if (location < 0 || location >= maxUniforms_ || !data) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid);\n    IGL_LOG_INFO_ONCE(\"IGL WARNING: Invalid parameters found for setUniform. Location (%d) \\n\",\n                      location);\n    return;\n  }\n\n  const std::ptrdiff_t typeSize = igl::sizeForUniformElementType(uniformDesc.type);\n  std::ptrdiff_t length = uniformDesc.elementStride != 0\n                              ? uniformDesc.elementStride\n                              : igl::sizeForUniformType(uniformDesc.type);\n  length *= uniformDesc.numElements;\n\n  // Make sure typeSize is not 0 and is a power of 2\n  if (!IGL_DEBUG_VERIFY((typeSize != 0) && ((typeSize - 1) & typeSize) == 0)) {\n    Result::setResult(\n        outResult, Result::Code::InvalidOperation, \"typeSize is 0 or not a power of 2\");\n    IGL_LOG_INFO_ONCE(\"IGL WARNING: Invalid typeSize (%zu) is used. Found 0 or not power of 2\\n\",\n                      typeSize);\n    return;\n  }\n\n  // Calculate the next size-aligned offset. Since typeSize is always a power\n  // of 2, ~(typeSize - 1) will mask off the unaligned bits. Since masking\n  // bits off is like a subtraction, we need to add (typeSize - 1) to make\n  // sure we are still moving forward in the address space.\n  const std::ptrdiff_t dataOffset = (usedUniformDataBytes_ + (typeSize - 1)) & ~(typeSize - 1);\n\n  // Make sure dataOffset is typeSize aligned\n  if (!IGL_DEBUG_VERIFY((dataOffset & (typeSize - 1)) == 0)) {\n    Result::setResult(\n        outResult, Result::Code::InvalidOperation, \"dataOffset is not typeSize aligned\");\n    IGL_LOG_INFO_ONCE(\n        \"IGL WARNING: Invalid dataOffset alignment(%td) for typeSize(%zu)\\n\", dataOffset, typeSize);\n    return;\n  }\n\n  usedUniformDataBytes_ = dataOffset + length;\n\n  if (usedUniformDataBytes_ > uniformData_.size()) {\n    uniformData_.resize(usedUniformDataBytes_);\n  }\n\n  optimizedMemcpy(uniformData_.data() + dataOffset, (uint8_t*)data + uniformDesc.offset, length);\n\n#if IGL_DEBUG\n  // We don't catch duplicate uniforms set on a given location in production.\n  // This is technically a client bug and we shouldn't be doing this sort of\n  // error-checking, as we're in the inner loop of rendering.\n  //\n  // Instead, we warn in local dev builds to catch if we're setting uniform block\n  // in same location previously set (in either uniform or block) during the draw call.\n  if (uniformsDirty_[location]) {\n    IGL_LOG_INFO_ONCE(\"uniform location %d is already dirty\\n\", location);\n  }\n  uniformsDirty_[location] = true;\n#endif // IGL_DEBUG\n\n  IGL_DEBUG_ASSERT(uniforms_.size() < maxUniforms_);\n  uniforms_.emplace_back(uniformDesc, dataOffset);\n  Result::setOk(outResult);\n}\n\nvoid UniformAdapter::setUniformBuffer(IBuffer* buffer,\n                                      size_t offset,\n                                      size_t size,\n                                      uint32_t bindingIndex,\n                                      Result* outResult) {\n  IGL_DEBUG_ASSERT(bindingIndex <= IGL_UNIFORM_BLOCKS_BINDING_MAX,\n                   \"Uniform buffer index %u is beyond max %u\",\n                   bindingIndex,\n                   IGL_UNIFORM_BLOCKS_BINDING_MAX);\n  IGL_DEBUG_ASSERT(buffer, \"invalid buffer passed to setUniformBuffer\");\n  if (bindingIndex < IGL_UNIFORM_BLOCKS_BINDING_MAX && buffer) {\n    uniformBufferBindingMap_[bindingIndex] = {buffer, offset, size};\n    uniformBuffersDirtyMask_ |= 1 << bindingIndex;\n    Result::setOk(outResult);\n  } else {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid);\n  }\n}\n\nvoid UniformAdapter::bindToPipeline(IContext& context) {\n  // bind uniforms\n  for (const auto& uniform : uniforms_) {\n    const auto& uniformDesc = uniform.desc;\n    IGL_DEBUG_ASSERT(uniformDesc.location >= 0);\n    IGL_DEBUG_ASSERT(uniformData_.data(), \"Uniform data must be non-null\");\n    auto* start = uniformData_.data() + uniform.dataOffset;\n    if (uniformDesc.numElements > 1 || uniformDesc.type == UniformType::Mat3x3) {\n      IGL_DEBUG_ASSERT(uniformDesc.elementStride > 0,\n                       \"stride has to be larger than 0 for uniform at offset %zu\",\n                       uniformDesc.offset);\n      UniformBuffer::bindUniformArray(context,\n                                      uniformDesc.location,\n                                      uniformDesc.type,\n                                      start,\n                                      uniformDesc.numElements,\n                                      uniformDesc.elementStride);\n    } else {\n      UniformBuffer::bindUniform(context, uniformDesc.location, uniformDesc.type, start, 1);\n    }\n  }\n  uniforms_.clear();\n#if IGL_DEBUG\n  std::fill(uniformsDirty_.begin(), uniformsDirty_.end(), false);\n#endif\n\n  // bind uniform block buffers\n  for (size_t bindingIndex = 0; bindingIndex < IGL_UNIFORM_BLOCKS_BINDING_MAX; ++bindingIndex) {\n    if (uniformBuffersDirtyMask_ & (1 << bindingIndex)) {\n      auto uniformBinding = uniformBufferBindingMap_.at(bindingIndex);\n      auto* bufferState = static_cast<UniformBlockBuffer*>(uniformBinding.buffer);\n      IGL_DEBUG_ASSERT(bufferState);\n      if (uniformBinding.offset) {\n        IGL_DEBUG_ASSERT(uniformBinding.offset % uniformBufferAlignment_ == 0,\n                         \"Offset{%d} must be a multiple of uniformBufferAlignment{%d}\",\n                         uniformBinding.offset,\n                         uniformBufferAlignment_);\n\n        bufferState->bindRange(bindingIndex, uniformBinding.offset, uniformBinding.size, nullptr);\n      } else {\n        bufferState->bindBase(bindingIndex, nullptr);\n      }\n    }\n  }\n  uniformBuffersDirtyMask_ = 0;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/UniformAdapter.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <unordered_map>\n#include <vector>\n#include <igl/Buffer.h>\n#include <igl/Uniform.h>\n\nnamespace igl::opengl {\nclass IContext;\n\nclass UniformAdapter {\n public:\n  // Feel like this can be placed somewhere better\n  enum class PipelineType {\n    Render = 1,\n    Compute = 2,\n  };\n\n  UniformAdapter(const IContext& context, PipelineType type);\n  void shrinkUniformUsage();\n  void clearUniformBuffers();\n  void setUniform(const UniformDesc& uniformDesc, const void* data, Result* outResult);\n  void setUniformBuffer(IBuffer* buffer,\n                        size_t offset,\n                        size_t size,\n                        uint32_t index,\n                        Result* outResult);\n\n  [[nodiscard]] uint32_t getMaxUniforms() const {\n    return maxUniforms_;\n  }\n\n  void bindToPipeline(IContext& context);\n\n private:\n  struct UniformState {\n    UniformState() = default;\n    UniformState(UniformDesc d, std::ptrdiff_t o) : desc(std::move(d)), dataOffset(o) {}\n\n    UniformDesc desc;\n    std::ptrdiff_t dataOffset = 0;\n  };\n\n  std::vector<UniformState> uniforms_;\n  std::vector<uint8_t> uniformData_;\n  uint32_t maxUniforms_ = 1024;\n  size_t uniformBufferAlignment_ = 16;\n\n  struct UniformBufferRange {\n    IBuffer* buffer = nullptr;\n    size_t offset = 0;\n    size_t size = 0;\n  };\n\n  // map for uniform binding indices to the buffers\n  std::unordered_map<int, UniformBufferRange> uniformBufferBindingMap_;\n  uint32_t uniformBuffersDirtyMask_ = 0;\n  static_assert(sizeof(uniformBuffersDirtyMask_) * 8 >= IGL_UNIFORM_BLOCKS_BINDING_MAX,\n                \"uniformBuffersDirtyMask size is not enough to fit the flags\");\n\n  // Store a copy of uniform data when setUniform is used to avoid the client from managing the\n  // memory\n  std::ptrdiff_t usedUniformDataBytes_ = 0;\n  uint16_t shrinkUniformDataCounter_ = 0;\n  PipelineType pipelineType_;\n\n#if IGL_DEBUG\n  std::vector<bool> uniformsDirty_;\n#endif // IGL_DEBUG\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/UniformBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/UniformBuffer.h>\n\n#include <cstring> // for memcpy()\n#include <memory>\n#include <igl/Common.h>\n#include <igl/IGLSafeC.h>\n\nnamespace igl::opengl {\nnamespace {\n// There's a non-zero chance of unexpected behavior if limit is larger than available stack size\nconst size_t kAllocSizeLimit = 512;\n} // namespace\nenum class UniformBaseType { Invalid = 0, Boolean, Int, Float, FloatMatrix };\n\ntemplate<typename T>\nusing ArrayHolder = std::unique_ptr<T[], void (*)(void*)>;\n// This can't be a function because alloc result goes away on function return\n#define IGL_MAYBE_STACK_ALLOC(Type, count)                                         \\\n  (sizeof(Type) * count) > kAllocSizeLimit                                         \\\n      ? ArrayHolder<Type>(reinterpret_cast<Type*>(malloc(sizeof(Type) * count)),   \\\n                          [](auto* addr) { free(reinterpret_cast<Type*>(addr)); }) \\\n      : ArrayHolder<Type>(reinterpret_cast<Type*>(alloca(sizeof(Type) * count)), [](auto*) {})\n\n// ********************************\n// ****  Buffer\n// ********************************\n// the base buffer object\nUniformBuffer::UniformBuffer(IContext& context,\n                             BufferDesc::BufferAPIHint requestedApiHints,\n                             BufferDesc::BufferType bufferType) :\n  Buffer(context, requestedApiHints, bufferType) {\n  isDynamic_ = false;\n}\n\nUniformBuffer::~UniformBuffer() {\n  isDynamic_ = false;\n}\n\nbool UniformBuffer::initializeCommon(const BufferDesc& desc, Result* outResult) {\n  bool success = true;\n  isDynamic_ = false;\n\n  if (desc.data == nullptr) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"Data in uniform desc is null\");\n    success = false;\n  } else if (desc.length == 0) {\n    Result::setResult(outResult,\n                      Result::Code::ArgumentOutOfRange,\n                      \"Size of data in uniform desc (length) needs to be larger than 0\");\n    success = false;\n  }\n  return success;\n}\n\n// initialize a buffer with the given size\n// if data is not null, copy the data into the buffer\n// if the buffer is to be updated frequently, isDynamic should be set to true\nvoid UniformBuffer::initialize(const BufferDesc& desc, Result* outResult) {\n  if (!initializeCommon(desc, outResult)) {\n    return;\n  }\n\n  uniformData_.resize(desc.length);\n  memcpy(uniformData_.data(), desc.data, desc.length);\n\n  Result::setOk(outResult);\n}\n\n// upload data to the buffer at the given offset with the given size\nResult UniformBuffer::upload(const void* data, const BufferRange& range) {\n  if (!IGL_DEBUG_VERIFY(range.offset + range.size <= getSizeInBytes())) {\n    return Result{Result::Code::ArgumentOutOfRange, \"Range size is larger than data size\"};\n  }\n\n  checked_memcpy_offset(uniformData_.data(), uniformData_.size(), range.offset, data, range.size);\n\n  return Result();\n}\n\nvoid* UniformBuffer::map(const BufferRange& range, Result* outResult) {\n  if (getSizeInBytes() < (range.size + range.offset)) {\n    Result::setResult(outResult,\n                      Result::Code::ArgumentOutOfRange,\n                      \"map() size + offset must be less than buffer size\");\n    return nullptr;\n  }\n\n  Result::setOk(outResult);\n  return uniformData_.data() + range.offset;\n}\n\nvoid UniformBuffer::unmap() {}\n\nvoid UniformBuffer::printUniforms(GLint program) {\n  GLint i = 0;\n  GLint count = 0;\n\n  GLint size = 0; // size of the variable\n  GLenum type = 0; // type of the variable (float, vec3 or mat4, etc)\n\n  const GLsizei bufSize = 16; // maximum name length\n  GLchar name[bufSize]; // variable name in GLSL\n  GLsizei length = 0; // name length\n\n  getContext().getProgramiv(program, GL_ACTIVE_UNIFORMS, &count);\n\n  IGL_LOG_DEBUG(\"Active Uniforms: %d\\n\", count);\n\n  for (i = 0; i < count; i++) {\n    getContext().getActiveUniform(program, (GLuint)i, bufSize, &length, &size, &type, name);\n\n    IGL_LOG_DEBUG(\"Uniform #%d Type: %u Name: %s\\n\", i, type, name);\n  }\n}\n\nvoid UniformBuffer::bindUniform(IContext& context,\n                                GLint shaderLocation,\n                                UniformType uniformType,\n                                const uint8_t* start,\n                                size_t stCount) {\n  if (IGL_DEBUG_VERIFY(shaderLocation >= 0)) {\n    // If a glerror is hit within and of the getContext().uniform*** methods,\n    // renderCommandEncoder->bindBuffer()'s index parameter likely does not map to the correct\n    // location in the shader\n    auto* uniformFloats = (GLfloat*)(start);\n    auto* uniformInts = (GLint*)(start);\n    auto count = static_cast<GLsizei>(stCount);\n    switch (uniformType) {\n    case UniformType::Int:\n      context.uniform1iv(shaderLocation, count, uniformInts);\n      break;\n    case UniformType::Int2:\n      context.uniform2iv(shaderLocation, count, uniformInts);\n      break;\n    case UniformType::Int3:\n      context.uniform3iv(shaderLocation, count, uniformInts);\n      break;\n    case UniformType::Int4:\n      context.uniform4iv(shaderLocation, count, uniformInts);\n      break;\n    case UniformType::Boolean: {\n      // UniformType::Boolean is 1 byte, and at least for this case, IGL\n      // expects the data to be packed. However, since glUniform1*() expects\n      // each boolean to be passed in as GLint, we unpack the byte array\n      // into GLint array.\n      const std::unique_ptr<GLint[]> boolArray(new GLint[count]);\n      for (size_t i = 0; i < count; i++) {\n        boolArray[i] = static_cast<int>(!(*(start + i) == 0u));\n      }\n      context.uniform1iv(shaderLocation, count, boolArray.get());\n\n      break;\n    }\n    case UniformType::Float:\n      context.uniform1fv(shaderLocation, count, uniformFloats);\n      break;\n    case UniformType::Float2:\n      context.uniform2fv(shaderLocation, count, uniformFloats);\n      break;\n    case UniformType::Float3:\n      context.uniform3fv(shaderLocation, count, uniformFloats);\n      break;\n    case UniformType::Float4:\n      context.uniform4fv(shaderLocation, count, uniformFloats);\n      break;\n    case UniformType::Mat2x2:\n      context.uniformMatrix2fv(shaderLocation, count, 0u, uniformFloats);\n      break;\n    case UniformType::Mat3x3:\n      context.uniformMatrix3fv(shaderLocation, count, 0u, uniformFloats);\n      break;\n    case UniformType::Mat4x4:\n      context.uniformMatrix4fv(shaderLocation, count, 0u, uniformFloats);\n      break;\n    case UniformType::Invalid:\n      IGL_DEBUG_ABORT(\"Invalid Uniform Type\");\n      return;\n    }\n  }\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nvoid UniformBuffer::bindUniformArray(IContext& context,\n                                     GLint shaderLocation,\n                                     UniformType uniformType,\n                                     const uint8_t* start,\n                                     size_t numElements,\n                                     size_t stride) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  const size_t packedSize = igl::sizeForUniformType(uniformType);\n  size_t primitivesPerElement = 0;\n  UniformBaseType baseType = UniformBaseType::Invalid;\n  if (packedSize == stride) {\n    UniformBuffer::bindUniform(context, shaderLocation, uniformType, start, numElements);\n  } else {\n    switch (uniformType) {\n    case UniformType::Boolean:\n      baseType = UniformBaseType::Boolean;\n      break;\n    case UniformType::Int:\n      primitivesPerElement = 1;\n      baseType = UniformBaseType::Int;\n      break;\n    case UniformType::Int2:\n      primitivesPerElement = 2;\n      baseType = UniformBaseType::Int;\n      break;\n    case UniformType::Int3:\n      primitivesPerElement = 3;\n      baseType = UniformBaseType::Int;\n      break;\n    case UniformType::Int4:\n      primitivesPerElement = 4;\n      baseType = UniformBaseType::Int;\n      break;\n    case UniformType::Float:\n      primitivesPerElement = 1;\n      baseType = UniformBaseType::Float;\n      break;\n    case UniformType::Float2:\n      primitivesPerElement = 2;\n      baseType = UniformBaseType::Float;\n      break;\n    case UniformType::Float3:\n      primitivesPerElement = 3;\n      baseType = UniformBaseType::Float;\n      break;\n    case UniformType::Float4:\n      primitivesPerElement = 4;\n      baseType = UniformBaseType::Float;\n      break;\n    case UniformType::Mat2x2:\n      primitivesPerElement = 2;\n      baseType = UniformBaseType::FloatMatrix;\n      break;\n    case UniformType::Mat3x3:\n      primitivesPerElement = 3;\n      baseType = UniformBaseType::FloatMatrix;\n      break;\n    case UniformType::Mat4x4:\n      primitivesPerElement = 4;\n      baseType = UniformBaseType::FloatMatrix;\n      break;\n    case UniformType::Invalid:\n      IGL_DEBUG_ABORT(\"Invalid Uniform Type\");\n      return;\n    }\n    switch (baseType) {\n    case UniformBaseType::Boolean: {\n      auto packedIntArray = IGL_MAYBE_STACK_ALLOC(GLint, numElements);\n      for (int i = 0; i < numElements; i++) {\n        packedIntArray[i] = static_cast<int>(!(*(start) == 0u));\n        start += stride;\n      }\n      UniformBuffer::bindUniform(\n          context, shaderLocation, UniformType::Int, (uint8_t*)packedIntArray.get(), numElements);\n      break;\n    }\n    case UniformBaseType::Int: {\n      auto packedIntArray = IGL_MAYBE_STACK_ALLOC(GLint, primitivesPerElement * numElements);\n      for (int i = 0; i < numElements; i++) {\n        optimizedMemcpy(\n            &packedIntArray[i * primitivesPerElement], start, primitivesPerElement * sizeof(GLint));\n        start += stride;\n      }\n      UniformBuffer::bindUniform(\n          context, shaderLocation, uniformType, (uint8_t*)packedIntArray.get(), numElements);\n      break;\n    }\n    case UniformBaseType::Float: {\n      auto packedFloatArray = IGL_MAYBE_STACK_ALLOC(GLfloat, primitivesPerElement * numElements);\n      for (int i = 0; i < numElements; i++) {\n        optimizedMemcpy(&packedFloatArray[i * primitivesPerElement],\n                        start,\n                        primitivesPerElement * sizeof(GLfloat));\n        start += stride;\n      }\n      UniformBuffer::bindUniform(\n          context, shaderLocation, uniformType, (uint8_t*)packedFloatArray.get(), numElements);\n      break;\n    }\n    case UniformBaseType::FloatMatrix: {\n      auto packedFloatArray =\n          IGL_MAYBE_STACK_ALLOC(GLfloat, primitivesPerElement * primitivesPerElement * numElements);\n      for (int i = 0; i < numElements; i++) {\n        for (int j = 0; j < primitivesPerElement; j++) {\n          const size_t bytesToCopy = primitivesPerElement * sizeof(GLfloat);\n          memcpy(&packedFloatArray[i * primitivesPerElement * primitivesPerElement +\n                                   j * primitivesPerElement],\n                 start,\n                 bytesToCopy);\n          start += (stride / primitivesPerElement);\n        }\n      }\n      UniformBuffer::bindUniform(\n          context, shaderLocation, uniformType, (uint8_t*)packedFloatArray.get(), numElements);\n    } break;\n    case UniformBaseType::Invalid:\n    default:\n      return;\n    }\n  }\n}\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/UniformBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/Uniform.h>\n#include <igl/opengl/Buffer.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl {\nclass ICommandBuffer;\nnamespace opengl {\n\nclass UniformBuffer final : public Buffer {\n public:\n  UniformBuffer(IContext& context,\n                BufferDesc::BufferAPIHint requestedApiHints,\n                BufferDesc::BufferType bufferType);\n  ~UniformBuffer() override;\n  UniformBuffer(const UniformBuffer&) = delete;\n  UniformBuffer& operator=(const UniformBuffer&) = delete;\n  UniformBuffer(UniformBuffer&&) = delete;\n  UniformBuffer& operator=(UniformBuffer&&) = delete;\n\n  Result upload(const void* data, const BufferRange& range) override;\n\n  void* map(const BufferRange& range, Result* outResult) override;\n  void unmap() override;\n\n  [[nodiscard]] BufferDesc::BufferAPIHint acceptedApiHints() const noexcept override {\n    return 0;\n  }\n\n  [[nodiscard]] ResourceStorage storage() const noexcept override {\n    return ResourceStorage::Shared;\n  }\n\n  [[nodiscard]] size_t getSizeInBytes() const override {\n    return uniformData_.size();\n  }\n\n  void initialize(const BufferDesc& desc, Result* outResult) override;\n\n  [[nodiscard]] Type getType() const noexcept override {\n    return Type::Uniform;\n  }\n\n  // For openGL, additional information required to bind the uniform is provided when the buffer is\n  // created within the igl::BufferDesc and igl::UniformBufferEntry (eg. offset, type, elementStride\n  // and number of elements).\n  //\n  // However location information is provided when the uniform is bound via the\n  // index parameter of igl::renderCommandEncoder bindBuffer, the offset parameter is then used to\n  // lookup the information specified at buffer creation time. This allows the same uniform buffer\n  // to be reused in multiple shaders at different locations as long as creation value information\n  // (offset, type, etc.) does not change.\n  static void bindUniform(IContext& context,\n                          GLint shaderLocation,\n                          UniformType uniformType,\n                          const uint8_t* start,\n                          size_t count);\n  static void bindUniformArray(IContext& context,\n                               GLint shaderLocation,\n                               UniformType uniformType,\n                               const uint8_t* start,\n                               size_t numElements,\n                               size_t stride);\n\n private:\n  bool initializeCommon(const BufferDesc& desc, Result* outResult);\n  void printUniforms(GLint program);\n\n  // Copy of data from the client\n  std::vector<uint8_t> uniformData_;\n\n  bool isDynamic_; // TODO: Add support for dynamic uniforms\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/Version.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/Version.h>\n\n#include <cstdint>\n#include <igl/opengl/Config.h>\n#include <igl/opengl/GLIncludes.h>\n\nnamespace igl::opengl {\nnamespace {\n// Gets the highest version available in header files the app is compiled against.\nstd::pair<uint32_t, uint32_t> highestSupportedVersion() {\n#if IGL_OPENGL_ES\n\n#if defined(GL_ES_VERSION_3_2)\n  return std::make_pair(3, 2);\n#elif defined(GL_ES_VERSION_3_1)\n  return std::make_pair(3, 1);\n#elif defined(GL_ES_VERSION_3_0)\n  return std::make_pair(3, 0);\n#elif defined(GL_ES_VERSION_2_0)\n  return std::make_pair(2, 0);\n#else\n#error \"IGL requires at least OpenGL ES 2.0\";\n#endif\n\n#else\n\n#if defined(GL_VERSION_4_6)\n  return std::make_pair(4, 6);\n#elif defined(GL_VERSION_4_5)\n  return std::make_pair(4, 5);\n#elif defined(GL_VERSION_4_4)\n  return std::make_pair(4, 4);\n#elif defined(GL_VERSION_4_3)\n  return std::make_pair(4, 3);\n#elif defined(GL_VERSION_4_2)\n  return std::make_pair(4, 2);\n#elif defined(GL_VERSION_4_1)\n  return std::make_pair(4, 1);\n#elif defined(GL_VERSION_4_0)\n  return std::make_pair(4, 0);\n#elif defined(GL_VERSION_3_3)\n  return std::make_pair(3, 3);\n#elif defined(GL_VERSION_3_2)\n  return std::make_pair(3, 2);\n#elif defined(GL_VERSION_3_1)\n  return std::make_pair(3, 1);\n#elif defined(GL_VERSION_3_0)\n  return std::make_pair(3, 0);\n#elif defined(GL_VERSION_2_1)\n  return std::make_pair(2, 1);\n#elif defined(GL_VERSION_2_0)\n  return std::make_pair(2, 0);\n#else\n#error \"IGL requires at least OpenGL 2.0\";\n#endif\n\n#endif // IGL_OPENGL_ES\n}\n\n// Constrains version to the highest version available in header files the app is compiled against.\nstd::pair<uint32_t, uint32_t> constrainVersion(uint32_t majorVersion, uint32_t minorVersion) {\n  auto [supportedMajorVersion, supportedMinorVersion] = highestSupportedVersion();\n  if (majorVersion > supportedMajorVersion ||\n      (majorVersion == supportedMajorVersion && minorVersion > supportedMinorVersion)) {\n    return std::make_pair(supportedMajorVersion, supportedMinorVersion);\n  } else {\n    return std::make_pair(majorVersion, minorVersion);\n  }\n}\n\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nGLVersion getGLVersionEnum(uint32_t majorVersion, uint32_t minorVersion) {\n#if IGL_OPENGL_ES\n  switch (majorVersion) {\n  case 2:\n    switch (minorVersion) {\n    case 0:\n      return GLVersion::v2_0_ES;\n    default:\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n      return GLVersion::v2_0_ES;\n    }\n  case 3:\n    switch (minorVersion) {\n    case 0:\n      return GLVersion::v3_0_ES;\n    case 1:\n      return GLVersion::v3_1_ES;\n    case 2:\n      return GLVersion::v3_2_ES;\n    default:\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n      return GLVersion::v3_0_ES;\n    }\n  default:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return GLVersion::v2_0_ES;\n  }\n\n#else\n  switch (majorVersion) {\n  case 1:\n    return GLVersion::v1_1;\n  case 2:\n    switch (minorVersion) {\n    case 0:\n      return GLVersion::v2_0;\n    case 1:\n      return GLVersion::v2_1;\n    default:\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n      return GLVersion::v2_0;\n    }\n\n  case 3:\n    switch (minorVersion) {\n    case 0:\n      return GLVersion::v3_0;\n    case 1:\n      return GLVersion::v3_1;\n    case 2:\n      return GLVersion::v3_2;\n    case 3:\n      return GLVersion::v3_3;\n    default:\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n      return GLVersion::v3_0;\n    }\n\n  case 4:\n    switch (minorVersion) {\n    case 0:\n      return GLVersion::v4_0;\n    case 1:\n      return GLVersion::v4_1;\n    case 2:\n      return GLVersion::v4_2;\n    case 3:\n      return GLVersion::v4_3;\n    case 4:\n      return GLVersion::v4_4;\n    case 5:\n      return GLVersion::v4_5;\n    case 6:\n      return GLVersion::v4_6;\n    default:\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n      return GLVersion::v4_0;\n    }\n  default:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return GLVersion::v2_0;\n  }\n#endif // IGL_OPENGL_ES\n}\n\n} // namespace\n\nstd::pair<uint32_t, uint32_t> parseVersionString(const char* version) {\n  // If GL_MAJOR_VERSION and/or GL_MINOR_VERSION fail,\n  // get the gl version from GL_VERSION string\n  if (!version) {\n    IGL_LOG_DEBUG(\"Unable to get GL version string\\n\");\n    return std::make_pair(2, 0);\n  }\n  uint32_t majorVersion = 0, minorVersion = 0;\n#if IGL_OPENGL_ES\n  constexpr char versionFormat[] = \"OpenGL ES %d.%d\";\n#else\n  constexpr char versionFormat[] = \"%d.%d\";\n#endif // IGL_OPENGL_ES\n#ifdef _MSC_VER\n  const int ret = sscanf_s(version, versionFormat, &majorVersion, &minorVersion);\n#else\n  const int ret = sscanf(version, versionFormat, &majorVersion, &minorVersion);\n#endif // _MSC_VER\n  if (ret != 2) {\n    IGL_LOG_DEBUG(\"failed to parse GL version string %s\\n\", version);\n    return std::make_pair(2, 0);\n  }\n\n  return std::make_pair(majorVersion, minorVersion);\n}\n\nGLVersion getGLVersion(const char* version, bool constrain) {\n  auto [majorVersion, minorVersion] = parseVersionString(version);\n  if (constrain) {\n    auto [constrainedMajorVersion, constrainedMinorVersion] =\n        constrainVersion(majorVersion, minorVersion);\n#if IGL_LOGGING_ENABLED\n    if (constrainedMajorVersion != majorVersion || constrainedMinorVersion != minorVersion) {\n#if IGL_OPENGL_ES\n      static constexpr std::string_view kGl = \"OpenGL ES\";\n#else\n      static constexpr std::string_view kGl = \"OpenGL\";\n#endif\n      IGL_LOG_INFO(\n          \"Context supports %s %d.%d, but IGL was only compiled with support for %s \"\n          \"%d.%d\\n\",\n          kGl.data(),\n          majorVersion,\n          minorVersion,\n          kGl.data(),\n          constrainedMajorVersion,\n          constrainedMinorVersion);\n      IGL_LOG_INFO(\"Constraining supported version to %s %d.%d\\n\",\n                   kGl.data(),\n                   constrainedMajorVersion,\n                   constrainedMinorVersion);\n    }\n#endif // IGL_LOGGING_ENABLED\n    majorVersion = constrainedMajorVersion;\n    minorVersion = constrainedMinorVersion;\n  }\n\n  return getGLVersionEnum(majorVersion, minorVersion);\n}\n\nShaderVersion getShaderVersion(GLVersion version) {\n  // TODO: Return proper GLSL ES versions\n  switch (version) {\n  case GLVersion::v2_0_ES:\n    return {.family = ShaderFamily::GlslEs, .majorVersion = 1, .minorVersion = 0};\n  case GLVersion::v3_0_ES:\n    return {.family = ShaderFamily::GlslEs, .majorVersion = 3, .minorVersion = 0};\n  case GLVersion::v3_1_ES:\n    return {.family = ShaderFamily::GlslEs, .majorVersion = 3, .minorVersion = 10};\n  case GLVersion::v3_2_ES:\n    return {.family = ShaderFamily::GlslEs, .majorVersion = 3, .minorVersion = 20};\n  case GLVersion::v2_0:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 1, .minorVersion = 10};\n  case GLVersion::v2_1:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 1, .minorVersion = 20};\n  case GLVersion::v3_0:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 1, .minorVersion = 30};\n  case GLVersion::v3_1:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 1, .minorVersion = 40};\n  case GLVersion::v3_2:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 1, .minorVersion = 50};\n  case GLVersion::v3_3:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 3, .minorVersion = 30};\n  case GLVersion::v4_0:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 4, .minorVersion = 0};\n  case GLVersion::v4_1:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 4, .minorVersion = 10};\n  case GLVersion::v4_2:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 4, .minorVersion = 20};\n  case GLVersion::v4_3:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 4, .minorVersion = 30};\n  case GLVersion::v4_4:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 4, .minorVersion = 40};\n  case GLVersion::v4_5:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 4, .minorVersion = 50};\n  case GLVersion::v4_6:\n    return {.family = ShaderFamily::Glsl, .majorVersion = 4, .minorVersion = 60};\n  case GLVersion::v1_1:\n  case GLVersion::NotAvailable:\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return {};\n  }\n}\n\nstd::string getStringFromShaderVersion(ShaderVersion version) {\n  if (version.family == ShaderFamily::GlslEs) {\n    if (version.majorVersion == 1 && version.minorVersion == 0) {\n      return \"#version 100\";\n\n    } else if (version.majorVersion == 3) {\n      if (version.minorVersion == 0) {\n        return \"#version 300 es\";\n      } else if (version.minorVersion == 10) {\n        return \"#version 310 es\";\n      } else if (version.minorVersion == 20) {\n        return \"#version 320 es\";\n      } else {\n        IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n      }\n    }\n  } else {\n    if (version.majorVersion == 1) {\n      if (version.minorVersion == 10) {\n        return \"#version 110\";\n      } else if (version.minorVersion == 20) {\n        return \"#version 120\";\n      } else if (version.minorVersion == 30) {\n        return \"#version 130\";\n      } else if (version.minorVersion == 40) {\n        return \"#version 140\";\n      } else if (version.minorVersion == 50) {\n        return \"#version 150\";\n      }\n    } else if (version.majorVersion == 3 && version.minorVersion == 30) {\n      return \"#version 330\";\n    } else if (version.majorVersion == 4) {\n      if (version.minorVersion == 0) {\n        return \"#version 400\";\n      } else if (version.minorVersion == 10) {\n        return \"#version 410\";\n      } else if (version.minorVersion == 20) {\n        return \"#version 420\";\n      } else if (version.minorVersion == 30) {\n        return \"#version 430\";\n      } else if (version.minorVersion == 40) {\n        return \"#version 440\";\n      } else if (version.minorVersion == 50) {\n        return \"#version 450\";\n      } else if (version.minorVersion == 60) {\n        return \"#version 460\";\n      }\n    }\n  }\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  return \"\";\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/Version.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <string>\n#include <utility>\n#include <igl/DeviceFeatures.h>\n\nnamespace igl::opengl {\n\n// NOLINTBEGIN(readability-identifier-naming)\nenum class GLVersion {\n  NotAvailable,\n  v1_1,\n  v2_0_ES,\n  v2_0,\n  v2_1,\n  v3_0_ES,\n  v3_0,\n  v3_1_ES,\n  v3_1,\n  v3_2_ES,\n  v3_2,\n  v3_3,\n  v4_0,\n  v4_1,\n  v4_2,\n  v4_3,\n  v4_4,\n  v4_5,\n  v4_6\n};\n// NOLINTEND(readability-identifier-naming)\n\nstd::pair<uint32_t, uint32_t> parseVersionString(const char* version);\nGLVersion getGLVersion(const char* version, bool constrain = false);\n\nShaderVersion getShaderVersion(GLVersion version);\n\n// Returns the version tag to provide at the top of the shader\nstd::string getStringFromShaderVersion(ShaderVersion version);\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/VertexArrayObject.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/VertexArrayObject.h>\n\n#include <cstdlib>\n#include <string>\n\nnamespace igl::opengl {\n\nResult VertexArrayObject::create() {\n  getContext().genVertexArrays(1, &vertexAttriuteObject_);\n  if (vertexAttriuteObject_ == 0) {\n    return Result(Result::Code::RuntimeError, \"Failed to create vertex array object ID\");\n  }\n  return Result();\n}\n\nvoid VertexArrayObject::bind() const {\n  getContext().bindVertexArray(vertexAttriuteObject_);\n}\n\nvoid VertexArrayObject::unbind() const {\n  getContext().bindVertexArray(0);\n}\n\nbool VertexArrayObject::isValid() const {\n  return vertexAttriuteObject_ != 0;\n}\n\nVertexArrayObject::~VertexArrayObject() {\n  getContext().deleteVertexArrays(1, &vertexAttriuteObject_);\n}\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/VertexArrayObject.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl {\nclass ICommandBuffer;\nnamespace opengl {\n\nclass VertexArrayObject final : public WithContext {\n  friend class Device;\n\n public:\n  explicit VertexArrayObject(IContext& context) : WithContext(context) {}\n  ~VertexArrayObject() override;\n  VertexArrayObject(const VertexArrayObject&) = delete;\n  VertexArrayObject& operator=(const VertexArrayObject&) = delete;\n  VertexArrayObject(VertexArrayObject&&) = delete;\n  VertexArrayObject& operator=(VertexArrayObject&&) = delete;\n\n  Result create();\n  void bind() const;\n  void unbind() const;\n  [[nodiscard]] bool isValid() const;\n\n private:\n  GLuint vertexAttriuteObject_ = ~0;\n};\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/VertexInputState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/VertexInputState.h>\n\n#include <cstdlib>\n#include <string>\n#include <vector>\n\nnamespace igl::opengl {\n\n//\n// A utility function to convert an IGL attribute to an OGL attribute\n//\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nstatic void toOGLAttribute(const VertexAttribute& attrib,\n                           GLint& numComponents,\n                           GLenum& componentType,\n                           GLboolean& normalized) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  switch (attrib.format) {\n  case VertexAttributeFormat::Float1:\n    numComponents = 1;\n    componentType = GL_FLOAT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Float2:\n    numComponents = 2;\n    componentType = GL_FLOAT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Float3:\n    numComponents = 3;\n    componentType = GL_FLOAT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Float4:\n    numComponents = 4;\n    componentType = GL_FLOAT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Byte1:\n    numComponents = 1;\n    componentType = GL_BYTE;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Byte2:\n    numComponents = 2;\n    componentType = GL_BYTE;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Byte3:\n    numComponents = 3;\n    componentType = GL_BYTE;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Byte4:\n    numComponents = 4;\n    componentType = GL_BYTE;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UByte1:\n    numComponents = 1;\n    componentType = GL_UNSIGNED_BYTE;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UByte2:\n    numComponents = 2;\n    componentType = GL_UNSIGNED_BYTE;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UByte3:\n    numComponents = 3;\n    componentType = GL_UNSIGNED_BYTE;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UByte4:\n    numComponents = 4;\n    componentType = GL_UNSIGNED_BYTE;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Short1:\n    numComponents = 1;\n    componentType = GL_SHORT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Short2:\n    numComponents = 2;\n    componentType = GL_SHORT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Short3:\n    numComponents = 3;\n    componentType = GL_SHORT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Short4:\n    numComponents = 4;\n    componentType = GL_SHORT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UShort1:\n    numComponents = 1;\n    componentType = GL_UNSIGNED_SHORT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UShort2:\n    numComponents = 2;\n    componentType = GL_UNSIGNED_SHORT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UShort3:\n    numComponents = 3;\n    componentType = GL_UNSIGNED_SHORT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UShort4:\n    numComponents = 4;\n    componentType = GL_UNSIGNED_SHORT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Byte1Norm:\n    numComponents = 1;\n    componentType = GL_BYTE;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::Byte2Norm:\n    numComponents = 2;\n    componentType = GL_BYTE;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::Byte3Norm:\n    numComponents = 3;\n    componentType = GL_BYTE;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::Byte4Norm:\n    numComponents = 4;\n    componentType = GL_BYTE;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::UByte1Norm:\n    numComponents = 1;\n    componentType = GL_UNSIGNED_BYTE;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::UByte2Norm:\n    numComponents = 2;\n    componentType = GL_UNSIGNED_BYTE;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::UByte3Norm:\n    numComponents = 3;\n    componentType = GL_UNSIGNED_BYTE;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::UByte4Norm:\n    numComponents = 4;\n    componentType = GL_UNSIGNED_BYTE;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::Short1Norm:\n    numComponents = 1;\n    componentType = GL_SHORT;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::Short2Norm:\n    numComponents = 2;\n    componentType = GL_SHORT;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::Short3Norm:\n    numComponents = 3;\n    componentType = GL_SHORT;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::Short4Norm:\n    numComponents = 4;\n    componentType = GL_SHORT;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::UShort1Norm:\n    numComponents = 1;\n    componentType = GL_UNSIGNED_SHORT;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::UShort2Norm:\n    numComponents = 2;\n    componentType = GL_UNSIGNED_SHORT;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::UShort3Norm:\n    numComponents = 3;\n    componentType = GL_UNSIGNED_SHORT;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::UShort4Norm:\n    numComponents = 4;\n    componentType = GL_UNSIGNED_SHORT;\n    normalized = GL_TRUE;\n    break;\n\n  case VertexAttributeFormat::Int1:\n    numComponents = 1;\n    componentType = GL_INT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Int2:\n    numComponents = 2;\n    componentType = GL_INT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Int3:\n    numComponents = 3;\n    componentType = GL_INT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Int4:\n    numComponents = 4;\n    componentType = GL_INT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UInt1:\n    numComponents = 1;\n    componentType = GL_UNSIGNED_INT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UInt2:\n    numComponents = 2;\n    componentType = GL_UNSIGNED_INT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UInt3:\n    numComponents = 3;\n    componentType = GL_UNSIGNED_INT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::UInt4:\n    numComponents = 4;\n    componentType = GL_UNSIGNED_INT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::HalfFloat1:\n    numComponents = 1;\n    componentType = GL_HALF_FLOAT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::HalfFloat2:\n    numComponents = 2;\n    componentType = GL_HALF_FLOAT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::HalfFloat3:\n    numComponents = 3;\n    componentType = GL_HALF_FLOAT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::HalfFloat4:\n    numComponents = 4;\n    componentType = GL_HALF_FLOAT;\n    normalized = GL_FALSE;\n    break;\n\n  case VertexAttributeFormat::Int_2_10_10_10_REV:\n    numComponents = 4;\n    componentType = GL_INT_2_10_10_10_REV;\n    normalized = GL_TRUE;\n    break;\n\n    // Purposely not have a default case so we can catch missing enum at build\n    // time. The current assumption is all IGL attribute has a corresponding\n    // GL attribute\n  }\n}\n\nResult VertexInputState::create(const VertexInputStateDesc& desc) {\n  if (desc.numAttributes == 0) {\n    return Result();\n  }\n\n  if (desc.numInputBindings == 1) {\n    // All the attributed should have the same bufferIndex\n    const int bufferIndex = desc.attributes[0].bufferIndex;\n    for (int i = 1; i < desc.numAttributes; i++) {\n      if (desc.attributes[i].bufferIndex != bufferIndex) {\n        return Result{\n            Result::Code::ArgumentInvalid,\n            \"numInputBindings is 1; So all the attributes must have the same bufferIndex\"};\n      }\n    }\n  }\n\n  // Process the incoming attributes and associate them with buffers\n  for (size_t i = 0; i < desc.numAttributes; i++) {\n    OGLAttribute attribInfo;\n\n    const size_t bufferIndex = desc.attributes[i].bufferIndex;\n\n    attribInfo.name = desc.attributes[i].name;\n    attribInfo.stride = desc.inputBindings[bufferIndex].stride;\n    attribInfo.bufferOffset = desc.attributes[i].offset;\n\n    toOGLAttribute(desc.attributes[i],\n                   attribInfo.numComponents,\n                   attribInfo.componentType,\n                   attribInfo.normalized);\n\n    attribInfo.sampleFunction = desc.inputBindings[bufferIndex].sampleFunction;\n    attribInfo.sampleRate = desc.inputBindings[bufferIndex].sampleRate;\n\n    bufferOGLAttribMap_[bufferIndex].push_back(attribInfo);\n  }\n\n  return Result();\n}\n\nconst std::vector<OGLAttribute>& VertexInputState::getAssociatedAttributes(size_t bufferIndex) {\n  return bufferOGLAttribMap_[bufferIndex];\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/VertexInputState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <unordered_map>\n#include <vector>\n#include <igl/VertexInputState.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl {\nclass ICommandBuffer;\nnamespace opengl {\n\n// This structure stores OGL-specific attribute info. Location is specifically\n// not included because it is shader-dependent\nstruct OGLAttribute {\n  std::string name;\n  GLsizei stride = 0;\n  uintptr_t bufferOffset = 0;\n  GLint numComponents = 0;\n  GLenum componentType = GL_FLOAT;\n  GLboolean normalized = 0u;\n  VertexSampleFunction sampleFunction = VertexSampleFunction::PerVertex;\n  size_t sampleRate = 1;\n\n  OGLAttribute() = default;\n};\n\nclass VertexInputState final : public IVertexInputState {\n  friend class Device;\n\n public:\n  Result create(const VertexInputStateDesc& desc);\n\n  // Returns a list of attributes associated with the buffer. An empty vector\n  // will be returned the bufferIndex is invalid\n  const std::vector<OGLAttribute>& getAssociatedAttributes(size_t bufferIndex);\n\n  // Returns a read-only reference to the bufferOGLAttribMap_\n  [[nodiscard]] const std::unordered_map<size_t, std::vector<OGLAttribute>>& getBufferAttribMap()\n      const {\n    return bufferOGLAttribMap_;\n  }\n\n private:\n  std::unordered_map<size_t, std::vector<OGLAttribute>> bufferOGLAttribMap_;\n};\n\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/ViewTextureTarget.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/ViewTextureTarget.h>\n\nnamespace igl::opengl {\n\nTextureType ViewTextureTarget::getType() const {\n  return TextureType::TwoD;\n}\n\nTextureDesc::TextureUsage ViewTextureTarget::getUsage() const {\n  return TextureDesc::TextureUsageBits::Attachment;\n}\n\nvoid ViewTextureTarget::bind() {\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n}\n\nvoid ViewTextureTarget::bindImage(size_t /*unit*/) {\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n}\n\nvoid ViewTextureTarget::unbind() {\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n}\n\nvoid ViewTextureTarget::attachAsColor(uint32_t /*index*/, const AttachmentParams& /*params*/) {\n  // No-op. This texture is already attached to view's implicit framebuffer\n}\n\nvoid ViewTextureTarget::detachAsColor(uint32_t /*index*/, bool /*read*/) {\n  // No-op. This cannot be done for this texture type.\n}\n\nvoid ViewTextureTarget::attachAsDepth(const AttachmentParams& /*params*/) {\n  // No-op. This texture is already attached to view's implicit framebuffer\n}\n\nvoid ViewTextureTarget::detachAsDepth(bool /*read*/) {\n  // No-op. This cannot be done for this texture type.\n}\n\nvoid ViewTextureTarget::attachAsStencil(const AttachmentParams& /*params*/) {\n  // No-op. This texture is already attached to view's implicit framebuffer\n}\n\nvoid ViewTextureTarget::detachAsStencil(bool /*read*/) {\n  // No-op. This cannot be done for this texture type.\n}\n\nbool ViewTextureTarget::isImplicitStorage() const {\n  return true;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/ViewTextureTarget.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Core.h>\n#include <igl/opengl/Texture.h>\n\nnamespace igl::opengl {\n\nnamespace egl {\nclass PlatformDevice;\n} // namespace egl\n\nnamespace wgl {\nclass PlatformDevice;\n} // namespace wgl\n\nnamespace webgl {\nclass PlatformDevice;\n} // namespace webgl\n\n// ViewTextureTarget is a special implementation of opengl::Texture that's only available on certain\n// platforms. It represents the \"texture\" associated with the default framebuffer on OpenGL (i.e.\n// framebuffer with ID 0), which is not available on some platforms such as iOS.\nclass ViewTextureTarget final : public Texture {\n  friend class igl::opengl::egl::PlatformDevice;\n  friend class igl::opengl::wgl::PlatformDevice;\n  friend class igl::opengl::webgl::PlatformDevice;\n\n public:\n  using Super = Texture;\n  ViewTextureTarget(IContext& context, TextureFormat format) : Super(context, format) {}\n\n  // ITexture overrides\n  [[nodiscard]] TextureType getType() const override;\n  [[nodiscard]] TextureDesc::TextureUsage getUsage() const override;\n\n  // Texture overrides\n  void bind() override;\n  void bindImage(size_t /*unit*/) override;\n  void unbind() override;\n  void attachAsColor(uint32_t index, const AttachmentParams& params) override;\n  void detachAsColor(uint32_t index, bool read) override;\n  void attachAsDepth(const AttachmentParams& params) override;\n  void detachAsDepth(bool read) override;\n  void attachAsStencil(const AttachmentParams& params) override;\n  void detachAsStencil(bool read) override;\n\n  [[nodiscard]] bool isImplicitStorage() const override;\n\n  // @fb-only\n  [[nodiscard]] GLuint getId() const override {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return 0;\n  }\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/WithContext.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/WithContext.h>\n\n#include <igl/Core.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl {\n\nWithContext::WithContext(IContext& context) : context_(&context) {\n  if (!context_->addRef()) {\n    IGL_DEBUG_ABORT(\"Object created with an invalid IContext reference.\");\n  }\n}\n\nWithContext::~WithContext() {\n  if (!context_->releaseRef()) {\n    IGL_DEBUG_ABORT(\n        \"Object destroyed after the IContext.\"\n        // @fb-only\n    );\n  }\n}\n\nIContext& WithContext::getContext() const {\n  IGL_DEBUG_ASSERT(context_->isLikelyValidObject(),\n                   \"Accessing invalid IContext reference.\"\n                   // @fb-only\n  );\n  return *context_;\n}\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/WithContext.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory.h>\n\nnamespace igl::opengl {\nclass IContext;\n\nclass WithContext {\n public:\n  explicit WithContext(IContext& context);\n  virtual ~WithContext();\n\n  // This type is not copyable.\n  WithContext(const WithContext&) = delete;\n  WithContext& operator=(const WithContext&) = delete;\n\n  [[nodiscard]] IContext& getContext() const;\n\n private:\n  IContext* context_;\n};\n\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/egl/Context.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/opengl/egl/Context.h>\n\n#include <EGL/egl.h>\n#include <array>\n#include <tuple>\n#include <igl/Macros.h>\n#include <igl/Texture.h>\n#include <igl/opengl/HWDevice.h>\n\n#define CHECK_EGL_ERRORS() error_checking::checkForEGLErrors(__FILE__, __FUNCTION__, __LINE__)\n\n#ifndef EGL_OPENGL_ES3_BIT\n#define EGL_OPENGL_ES3_BIT 0x00000040\n#endif\n\nnamespace error_checking {\n\n#define CASE_ERROR_CODE_IMPL(egl_error_code) \\\n  case egl_error_code:                       \\\n    errorStr = #egl_error_code;              \\\n    break;\n\nstatic EGLint checkForEGLErrors(IGL_MAYBE_UNUSED const char* fileName,\n                                IGL_MAYBE_UNUSED const char* callerName,\n                                IGL_MAYBE_UNUSED size_t lineNum) {\n  const EGLint errorCode = eglGetError();\n  if (errorCode != EGL_SUCCESS) {\n    IGL_MAYBE_UNUSED const char* errorStr = nullptr;\n    switch (errorCode) {\n      // https://www.khronos.org/files/egl-1-4-quick-reference-card.pdf\n      CASE_ERROR_CODE_IMPL(EGL_NOT_INITIALIZED);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_ACCESS);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_ALLOC);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_ATTRIBUTE);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_CONFIG);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_CONTEXT);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_CURRENT_SURFACE);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_DISPLAY);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_MATCH);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_NATIVE_PIXMAP);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_NATIVE_WINDOW);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_PARAMETER);\n      CASE_ERROR_CODE_IMPL(EGL_BAD_SURFACE);\n      CASE_ERROR_CODE_IMPL(EGL_CONTEXT_LOST);\n    default:\n      errorStr = \"<unknown EGL error>\";\n      break;\n    }\n    IGL_DEBUG_ABORT(\"[IGL] EGL error [%s:%zu] in function: %s 0x%04X: %s\\n\",\n                    fileName,\n                    lineNum,\n                    callerName,\n                    errorCode,\n                    errorStr);\n  }\n  return errorCode;\n}\n\n} // namespace error_checking\n\nFOLLY_PUSH_WARNING\nFOLLY_GNU_DISABLE_WARNING(\"-Wzero-as-null-pointer-constant\")\n\nnamespace igl::opengl::egl {\n\nnamespace {\nEGLDisplay getDefaultEGLDisplay() {\n  auto* display = eglGetDisplay(EGL_DEFAULT_DISPLAY);\n  CHECK_EGL_ERRORS();\n  return display;\n}\n\n// typical high-quality attrib list\nconstexpr std::array kAttribsEs2{\n    EGLint{EGL_RED_SIZE},\n    EGLint{8},\n    EGLint{EGL_GREEN_SIZE},\n    EGLint{8},\n    EGLint{EGL_BLUE_SIZE},\n    EGLint{8},\n    EGLint{EGL_ALPHA_SIZE},\n    EGLint{8},\n    EGLint{EGL_DEPTH_SIZE},\n    EGLint{16},\n    EGLint{EGL_SURFACE_TYPE},\n    EGLint{EGL_PBUFFER_BIT},\n    EGLint{EGL_RENDERABLE_TYPE},\n    EGLint{EGL_OPENGL_ES2_BIT},\n    EGLint{EGL_NONE},\n};\nconstexpr std::array kContextAttribsEs2{\n    EGLint{EGL_CONTEXT_CLIENT_VERSION},\n    EGLint{2},\n    EGLint{EGL_NONE},\n};\n\nconstexpr std::array kAttribsEs3{\n    EGLint{EGL_RED_SIZE},\n    EGLint{8},\n    EGLint{EGL_GREEN_SIZE},\n    EGLint{8},\n    EGLint{EGL_BLUE_SIZE},\n    EGLint{8},\n    EGLint{EGL_ALPHA_SIZE},\n    EGLint{8},\n    EGLint{EGL_DEPTH_SIZE},\n    EGLint{16},\n    EGLint{EGL_SURFACE_TYPE},\n    EGLint{EGL_PBUFFER_BIT},\n    EGLint{EGL_RENDERABLE_TYPE},\n    EGLint{EGL_OPENGL_ES3_BIT},\n    EGLint{EGL_NONE},\n};\nconstexpr std::array kContextAttribsEs3{\n    EGLint{EGL_CONTEXT_CLIENT_VERSION},\n    EGLint{3},\n    EGLint{EGL_NONE},\n};\n\nstd::pair<EGLDisplay, EGLContext> newEGLContext(uint8_t contextMajorVersion,\n                                                EGLDisplay display,\n                                                EGLContext shareContext,\n                                                EGLConfig* config) {\n  IGL_DEBUG_ASSERT(contextMajorVersion == 2 || contextMajorVersion == 3);\n  if (display == EGL_NO_DISPLAY || !eglInitialize(display, nullptr, nullptr)) {\n    CHECK_EGL_ERRORS();\n    // TODO: Handle error\n    return std::make_pair(EGL_NO_DISPLAY, EGL_NO_CONTEXT);\n  }\n\n  if (!config) {\n    IGL_DEBUG_ABORT(\"config is nullptr\");\n    return std::make_pair(EGL_NO_DISPLAY, EGL_NO_CONTEXT);\n  }\n\n  EGLint numConfigs = 0;\n  const auto& attribs = contextMajorVersion == 2 ? kAttribsEs2 : kAttribsEs3;\n  const auto& contextAttribs = contextMajorVersion == 2 ? kContextAttribsEs2 : kContextAttribsEs3;\n  if (!eglChooseConfig(display, attribs.data(), config, 1, &numConfigs)) {\n    CHECK_EGL_ERRORS();\n  }\n\n  auto res = std::make_pair(\n      display, eglCreateContext(display, *config, shareContext, contextAttribs.data()));\n  CHECK_EGL_ERRORS();\n  return res;\n}\n\nEGLConfig chooseConfig(uint8_t contextMajorVersion, EGLDisplay display) {\n  IGL_DEBUG_ASSERT(contextMajorVersion == 2 || contextMajorVersion == 3);\n  const auto& attribs = contextMajorVersion == 2 ? kAttribsEs2 : kAttribsEs3;\n  EGLConfig config{nullptr};\n  EGLint numConfigs{0};\n  const EGLBoolean status = eglChooseConfig(display, attribs.data(), &config, 1, &numConfigs);\n  CHECK_EGL_ERRORS();\n  if (!status) {\n    IGL_DEBUG_ASSERT(status == EGL_TRUE, \"eglChooseConfig failed\");\n  }\n  return config;\n}\n\n} // namespace\n\n///--------------------------------------\n/// MARK: - Context\n\n/*static*/ std::unique_ptr<Context> Context::createShareContext(Context& existingContext,\n                                                                EGLContext newContext,\n                                                                EGLSurface readSurface,\n                                                                EGLSurface drawSurface,\n                                                                Result* outResult) {\n  if (newContext == EGL_NO_CONTEXT || readSurface == EGL_NO_SURFACE ||\n      drawSurface == EGL_NO_SURFACE) {\n    Result::setResult(outResult, Result(Result::Code::ArgumentInvalid));\n    return nullptr;\n  }\n\n  auto sharegroup = existingContext.sharegroup_;\n  if (!sharegroup) {\n    sharegroup = std::make_shared<std::vector<EGLContext>>();\n    sharegroup->reserve(2);\n    sharegroup->emplace_back(existingContext.context_);\n\n    existingContext.sharegroup_ = sharegroup;\n  }\n  sharegroup->emplace_back(newContext);\n\n  auto context = std::make_unique<Context>(\n      existingContext.display_, newContext, readSurface, drawSurface, existingContext.getConfig());\n  context->sharegroup_ = std::move(sharegroup);\n\n  Result::setOk(outResult);\n  return context;\n}\n\nContext::Context(EGLNativeWindowType window) :\n  Context(kDefaultEGLBackendVersion, EGL_NO_CONTEXT, nullptr, false, window, {0, 0}) {}\n\nContext::Context(BackendVersion backendVersion, EGLNativeWindowType window) :\n  Context(backendVersion, EGL_NO_CONTEXT, nullptr, false, window, {0, 0}) {}\n\nContext::Context(size_t width, size_t height) :\n  Context(kDefaultEGLBackendVersion,\n          EGL_NO_CONTEXT,\n          nullptr,\n          true,\n          IGL_EGL_NULL_WINDOW,\n          {static_cast<EGLint>(width), static_cast<EGLint>(height)}) {}\n\nContext::Context(const Context& sharedContext) :\n  Context(sharedContext.backendVersion_,\n          sharedContext.context_,\n          sharedContext.sharegroup_,\n          true,\n          IGL_EGL_NULL_WINDOW,\n          sharedContext.getDrawSurfaceDimensions(nullptr)) {}\n\nContext::Context(BackendVersion backendVersion,\n                 EGLContext shareContext,\n                 std::shared_ptr<std::vector<EGLContext>> sharegroup,\n                 bool offscreen,\n                 EGLNativeWindowType window,\n                 std::pair<EGLint, EGLint> dimensions) :\n  backendVersion_(backendVersion) {\n  IGL_DEBUG_ASSERT(backendVersion.flavor == BackendFlavor::OpenGL_ES);\n  IGL_DEBUG_ASSERT(\n      (shareContext == EGL_NO_CONTEXT && sharegroup == nullptr) ||\n          (shareContext != EGL_NO_CONTEXT && sharegroup != nullptr &&\n           std::find(sharegroup->begin(), sharegroup->end(), shareContext) != sharegroup->end()),\n      \"shareContext and sharegroup values must be consistent\");\n  EGLConfig config{nullptr};\n  auto contextDisplay =\n      newEGLContext(backendVersion.majorVersion, getDefaultEGLDisplay(), shareContext, &config);\n  IGL_DEBUG_ASSERT(contextDisplay.second != EGL_NO_CONTEXT, \"newEGLContext failed\");\n\n  contextOwned_ = true;\n  display_ = contextDisplay.first;\n  context_ = contextDisplay.second;\n  IContext::registerContext((void*)context_, this);\n  if (!window) {\n    if (offscreen) {\n      std::array pbufferAttribs{EGLint{EGL_WIDTH},\n                                EGLint{dimensions.first},\n                                EGLint{EGL_HEIGHT},\n                                EGLint{dimensions.second},\n                                EGLint{EGL_NONE}};\n      readSurface_ = drawSurface_ =\n          eglCreatePbufferSurface(display_, config, pbufferAttribs.data());\n      surfacesOwned_ = true;\n      CHECK_EGL_ERRORS();\n    } else {\n      readSurface_ = eglGetCurrentSurface(EGL_READ);\n      CHECK_EGL_ERRORS();\n      drawSurface_ = eglGetCurrentSurface(EGL_DRAW);\n      CHECK_EGL_ERRORS();\n      surfacesOwned_ = false;\n    }\n  } else {\n    surface_ = eglCreateWindowSurface(display_, config, window, nullptr);\n    CHECK_EGL_ERRORS();\n    readSurface_ = surface_;\n    drawSurface_ = surface_;\n    surfacesOwned_ = true;\n  }\n  config_ = config;\n\n  if (sharegroup != nullptr) {\n    sharegroup_ = std::move(sharegroup);\n  } else {\n    sharegroup_ = std::make_shared<std::vector<EGLContext>>();\n  }\n  sharegroup_->emplace_back(context_);\n\n  initialize();\n}\n\nstd::unique_ptr<IContext> Context::createShareContext(Result* /*outResult*/) {\n  return std::make_unique<Context>(*this);\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nContext::Context(EGLDisplay display,\n                 EGLContext context,\n                 EGLSurface readSurface,\n                 EGLSurface drawSurface,\n                 EGLConfig config,\n                 bool ownsContext,\n                 bool ownsSurfaces) :\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  contextOwned_(ownsContext),\n  surfacesOwned_(ownsSurfaces),\n  display_(display),\n  context_(context),\n  readSurface_(readSurface),\n  drawSurface_(drawSurface),\n  config_(config),\n  backendVersion_(kDefaultEGLBackendVersion) {\n  IContext::registerContext((void*)context_, this);\n  initialize();\n  sharegroup_ = std::make_shared<std::vector<EGLContext>>();\n  sharegroup_->emplace_back(context_);\n}\n\nvoid Context::updateSurface(NativeWindowType window) {\n  surface_ = eglCreateWindowSurface(\n      display_, chooseConfig(backendVersion_.majorVersion, display_), window, nullptr);\n  CHECK_EGL_ERRORS();\n  readSurface_ = surface_;\n  drawSurface_ = surface_;\n  surfacesOwned_ = true;\n}\n\nContext::~Context() {\n  willDestroy((void*)context_);\n  IContext::unregisterContext((void*)context_);\n  if (surfacesOwned_) {\n    if (surface_ != nullptr) {\n      eglDestroySurface(display_, surface_);\n      CHECK_EGL_ERRORS();\n    }\n    if (drawSurface_ != nullptr && drawSurface_ != surface_) {\n      eglDestroySurface(display_, drawSurface_);\n      CHECK_EGL_ERRORS();\n    }\n    if (readSurface_ != nullptr && readSurface_ != surface_ && readSurface_ != drawSurface_) {\n      eglDestroySurface(display_, readSurface_);\n      CHECK_EGL_ERRORS();\n    }\n  }\n  if (contextOwned_ && context_ != EGL_NO_CONTEXT) {\n    eglDestroyContext(display_, context_);\n    CHECK_EGL_ERRORS();\n  }\n}\n\nvoid Context::setCurrent() {\n  eglMakeCurrent(display_, drawSurface_, readSurface_, context_);\n  CHECK_EGL_ERRORS();\n  flushDeletionQueue();\n}\n\nvoid Context::clearCurrentContext() const {\n  eglMakeCurrent(display_, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);\n  CHECK_EGL_ERRORS();\n}\n\nbool Context::isCurrentContext() const {\n  auto* curContext = eglGetCurrentContext();\n  return curContext == context_;\n  CHECK_EGL_ERRORS();\n}\n\nbool Context::isCurrentSharegroup() const {\n  // EGL doesn't seem to provide a way to check if two contexts are in the same group.\n  // For now we can at least check some trivial cases before hitting the assertion below.\n  EGLContext currentContext = eglGetCurrentContext();\n  CHECK_EGL_ERRORS();\n  if (currentContext == context_) {\n    return true;\n  }\n  if (currentContext == EGL_NO_CONTEXT) {\n    return false;\n  }\n  if (sharegroup_) {\n    const auto& sharegroup = *sharegroup_;\n    auto it = std::find(sharegroup.begin(), sharegroup.end(), currentContext);\n    return it != sharegroup.end();\n  }\n  return false;\n}\n\nvoid Context::present(std::shared_ptr<ITexture> /*surface*/) const {\n#if defined(FORCE_USE_ANGLE)\n  // Enforce swapbuffers for Angle to be able to use GPU tracing in RenderDoc\n#if IGL_DEBUG\n  eglSwapBuffers(display_, drawSurface_);\n  CHECK_EGL_ERRORS();\n#endif\n  eglMakeCurrent(display_, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);\n  CHECK_EGL_ERRORS();\n#else\n  if (drawSurface_ != EGL_NO_SURFACE) {\n    eglSwapBuffers(display_, drawSurface_);\n    // CHECK_EGL_ERRORS();\n  }\n#endif\n}\n\nvoid Context::setPresentationTime(long long presentationTimeNs) {\n  // This is a workaround that we cannot call the eglPresentationTimeANDROID directly from\n  // <EGL/eglext.h> due to some EGL api bugs.\n  // @fb-only\n  bool (*eglPresentationTimeAndroid)(\n      EGLDisplay dpy, EGLSurface sur, khronos_stime_nanoseconds_t time) = nullptr;\n  eglPresentationTimeAndroid =\n      reinterpret_cast<bool (*)(EGLDisplay, EGLSurface, khronos_stime_nanoseconds_t)>(\n          eglGetProcAddress(\"eglPresentationTimeANDROID\"));\n  CHECK_EGL_ERRORS();\n  eglPresentationTimeAndroid(display_, surface_, presentationTimeNs);\n  CHECK_EGL_ERRORS();\n}\n\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nvoid Context::updateSurfaces(EGLSurface readSurface, EGLSurface drawSurface) {\n  readSurface_ = readSurface;\n  drawSurface_ = drawSurface;\n  surfacesOwned_ = false;\n  // We need this here because we need to call eglSetCurrent() with the new surface(s) in order to\n  // bind them, but it's not the ideal place for it. Outside code could come in and make a\n  // different context current at any time.\n  setCurrent();\n}\n\nEGLSurface Context::createSurface(NativeWindowType window) {\n  auto* surface = eglCreateWindowSurface(\n      display_, chooseConfig(backendVersion_.majorVersion, display_), window, nullptr);\n  CHECK_EGL_ERRORS();\n  return surface;\n}\n\nEGLContext Context::get() const {\n  return context_;\n}\n\nEGLDisplay Context::getDisplay() const {\n  return display_;\n}\n\nEGLSurface Context::getReadSurface() const {\n  return readSurface_;\n}\n\nEGLSurface Context::getDrawSurface() const {\n  return drawSurface_;\n}\n\nstd::pair<EGLint, EGLint> Context::getDrawSurfaceDimensions(Result* outResult) const {\n  EGLint height = -1;\n  eglQuerySurface(getDisplay(), getDrawSurface(), EGL_HEIGHT, &height);\n  if (CHECK_EGL_ERRORS() != EGL_SUCCESS) {\n    Result::setResult(\n        outResult, Result::Code::InvalidOperation, \"Error getting height of EGLSurface.\");\n  }\n  EGLint width = -1;\n  eglQuerySurface(getDisplay(), getDrawSurface(), EGL_WIDTH, &width);\n  if (CHECK_EGL_ERRORS() != EGL_SUCCESS) {\n    Result::setResult(\n        outResult, Result::Code::InvalidOperation, \"Error getting width of EGLSurface.\");\n  }\n  return std::make_pair(width, height);\n}\n\nEGLConfig Context::getConfig() const {\n  return config_;\n}\n\nbool Context::markSharegroup(EGLContext sharedContextHandle) {\n  if (sharedContextHandle == EGL_NO_CONTEXT) {\n    return false;\n  }\n  if (!sharegroup_) {\n    sharegroup_ = std::make_shared<std::vector<EGLContext>>();\n    sharegroup_->emplace_back(context_);\n  }\n  if (std::find(sharegroup_->begin(), sharegroup_->end(), sharedContextHandle) ==\n      sharegroup_->end()) {\n    sharegroup_->emplace_back(sharedContextHandle);\n  }\n  return true;\n}\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\nEGLImageKHR Context::createImageFromAndroidHardwareBuffer(AHardwareBuffer* hwb) const {\n  EGLClientBuffer clientBuffer = eglGetNativeClientBufferANDROID(hwb);\n  EGLint hwBufferAttribs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE, EGL_NONE, EGL_NONE};\n\n  EGLDisplay display = this->getDisplay();\n  // eglCreateImageKHR will add a ref to the AHardwareBuffer\n  EGLImageKHR eglImage = eglCreateImageKHR(\n      display, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID, clientBuffer, hwBufferAttribs);\n  IGL_LOG_DEBUG(\"eglCreateImageKHR(%p, %x, %x, %p, {%d, %d, %d, %d, %d})\\n\",\n                display,\n                EGL_NO_CONTEXT,\n                EGL_NATIVE_BUFFER_ANDROID,\n                clientBuffer,\n                hwBufferAttribs[0],\n                hwBufferAttribs[1],\n                hwBufferAttribs[2],\n                hwBufferAttribs[3],\n                hwBufferAttribs[4]);\n\n  this->checkForErrors(__FUNCTION__, __LINE__);\n\n  IGL_SOFT_ASSERT(this->isCurrentContext() || this->isCurrentSharegroup());\n\n  return eglImage;\n}\n\nvoid Context::imageTargetTexture(EGLImageKHR eglImage, GLenum target) const {\n  glEGLImageTargetTexture2DOES(target, static_cast<GLeglImageOES>(eglImage));\n  IGL_LOG_DEBUG(\"glEGLImageTargetTexture2DOES(%u, %#x)\\n\",\n                GL_TEXTURE_2D,\n                static_cast<GLeglImageOES>(eglImage));\n  this->checkForErrors(__FUNCTION__, __LINE__);\n}\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n} // namespace igl::opengl::egl\nFOLLY_POP_WARNING\n"
  },
  {
    "path": "src/igl/opengl/egl/Context.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#define EGL_EGLEXT_PROTOTYPES\n\n#include <EGL/egl.h>\n#include <EGL/eglext.h>\n#include <EGL/eglplatform.h>\n#include <memory>\n#include <optional>\n#include <vector>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl::egl {\n\nclass Context final : public IContext {\n public:\n  /// Creates a shared context, with matching format based on an existing context.\n  static std::unique_ptr<Context> createShareContext(Context& existingContext,\n                                                     EGLContext newContext,\n                                                     EGLSurface readSurface,\n                                                     EGLSurface drawSurface,\n                                                     Result* outResult);\n\n  /// Creates a shared context, matching format based on the current context.\n  std::unique_ptr<IContext> createShareContext(Result* outResult) override;\n\n  /// Create a new context for default display. This constructor makes the assumption that the EGL\n  /// surfaces to be associated with this context are already present and set to current.\n  explicit Context(EGLNativeWindowType window);\n  explicit Context(BackendVersion backendVersion, EGLNativeWindowType window);\n  Context& operator=(Context& other) = delete;\n  /// Create a new offscreen context.\n  Context(size_t width, size_t height);\n  /// Create a new context applicable for a specific display/context/read surface/draw surface.\n  /// @param ownsContext If true, this means that constructed Context owns the EGL context that is\n  /// passed in and it will destroy the EGL context in its destructor. If false, it's the caller's\n  /// responsibility to ensure the EGL context is destroyed.\n  /// @param ownsSurfaces If true, this means that constructed Context owns the EGL surfaces that\n  /// are passed in and it will destroy the EGL surfaces in its destructor. If false, it's the\n  /// caller's responsibility to ensure the EGL surfaces are destroyed.\n  Context(EGLDisplay display,\n          EGLContext context,\n          EGLSurface readSurface,\n          EGLSurface drawSurface,\n          EGLConfig config = nullptr,\n          bool ownsContext = false,\n          bool ownsSurfaces = false);\n  /// Create a new offscreen context, in the same sharegroup as 'sharedContext'. Dimensions are\n  /// also inferred from 'sharedContext'.\n  Context(const Context& sharedContext);\n  ~Context() override;\n\n  void setCurrent() override;\n  void clearCurrentContext() const override;\n  bool isCurrentContext() const override;\n  bool isCurrentSharegroup() const override;\n  void present(std::shared_ptr<ITexture> surface) const override;\n\n  void setPresentationTime(long long presentationTimeNs);\n  void updateSurfaces(EGLSurface readSurface, EGLSurface drawSurface);\n  void updateSurface(NativeWindowType window);\n\n  EGLSurface createSurface(NativeWindowType window);\n\n  EGLContext get() const;\n  EGLDisplay getDisplay() const;\n  EGLSurface getReadSurface() const;\n  EGLSurface getDrawSurface() const;\n  std::pair<EGLint, EGLint> getDrawSurfaceDimensions(Result* outResult) const;\n  EGLConfig getConfig() const;\n\n  /// Mark this context as belonging to a sharegroup with another context.\n  void markSharegroup(Context& context);\n\n  /// Add an external EGL context handle to this context's sharegroup\n  /// so that isCurrentSharegroup() recognizes it.\n  bool markSharegroup(EGLContext sharedContextHandle);\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n  void imageTargetTexture(EGLImageKHR eglImage, GLenum target) const;\n  EGLImageKHR createImageFromAndroidHardwareBuffer(AHardwareBuffer* hwb) const;\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n  bool eglSupportssRGB() override {\n    if (eglSupportssRGB_.has_value()) {\n      return eglSupportssRGB_.value();\n    }\n    const char* extensionName = \"EGL_KHR_gl_colorspace\";\n    // Get the list of supported EGL extensions\n    const char* extensions = eglQueryString(getDisplay(), EGL_EXTENSIONS);\n    IGL_LOG_DEBUG(\"eglQueryString: %s\\n\", extensions);\n    const std::string strExtensions(extensions);\n    if (strExtensions.find(extensionName) != std::string::npos) {\n      eglSupportssRGB_.emplace(true);\n      return eglSupportssRGB_.value();\n    }\n    eglSupportssRGB_.emplace(false);\n    return eglSupportssRGB_.value();\n  }\n\n private:\n  std::optional<bool> eglSupportssRGB_;\n\n private:\n  Context(BackendVersion backendVersion,\n          EGLContext shareContext,\n          std::shared_ptr<std::vector<EGLContext>> sharegroup,\n          bool offscreen,\n          EGLNativeWindowType window,\n          std::pair<EGLint, EGLint> dimensions);\n\n  bool contextOwned_ = false;\n  bool surfacesOwned_ = false;\n  FOLLY_PUSH_WARNING\n  FOLLY_GNU_DISABLE_WARNING(\"-Wzero-as-null-pointer-constant\")\n  EGLDisplay display_ = EGL_NO_DISPLAY;\n  EGLContext context_ = EGL_NO_CONTEXT;\n  EGLSurface surface_ = EGL_NO_SURFACE;\n  EGLSurface readSurface_ = EGL_NO_SURFACE;\n  EGLSurface drawSurface_ = EGL_NO_SURFACE;\n  EGLConfig config_ = EGL_NO_CONFIG_KHR;\n  FOLLY_POP_WARNING\n\n  // Since EGLContext does not expose a Share Group, this must be set manually via the\n  // constructor and should be a list of all the contexts in the group including this context_\n  std::shared_ptr<std::vector<EGLContext>> sharegroup_;\n\n  static constexpr BackendVersion kDefaultEGLBackendVersion = {\n      .flavor = BackendFlavor::OpenGL_ES,\n      .majorVersion = 2,\n  };\n  BackendVersion backendVersion_ = kDefaultEGLBackendVersion;\n};\n\n} // namespace igl::opengl::egl\n"
  },
  {
    "path": "src/igl/opengl/egl/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/egl/Device.h>\n\n#include <EGL/eglplatform.h>\n#include <cstring>\n#include <igl/opengl/egl/Context.h>\n\nnamespace igl::opengl::egl {\n\nDevice::Device(std::unique_ptr<IContext> context) :\n  // @fb-only\n  opengl::Device(std::move(context)), platformDevice_(*this) {}\n\nconst PlatformDevice& Device::getPlatformDevice() const noexcept {\n  return platformDevice_;\n}\n\nvoid Device::updateSurface(void* nativeWindowType) {\n  std::static_pointer_cast<Context>(getSharedContext())\n      ->updateSurface((NativeWindowType)nativeWindowType);\n}\n\n} // namespace igl::opengl::egl\n"
  },
  {
    "path": "src/igl/opengl/egl/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/egl/PlatformDevice.h>\n\nnamespace igl::opengl::egl {\n\n// @fb-only\nclass Device final : public opengl::Device {\n public:\n  explicit Device(std::unique_ptr<IContext> context);\n  ~Device() override = default;\n\n  [[nodiscard]] const PlatformDevice& getPlatformDevice() const noexcept override;\n  void updateSurface(void* nativeWindowType) override;\n\n private:\n  PlatformDevice platformDevice_;\n};\n\n} // namespace igl::opengl::egl\n"
  },
  {
    "path": "src/igl/opengl/egl/HWDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"HWDevice.h\"\n\n#include <EGL/eglplatform.h>\n#include <igl/opengl/egl/Context.h>\n#include <igl/opengl/egl/Device.h>\n\nnamespace igl::opengl::egl {\n\nstd::unique_ptr<IContext> HWDevice::createContext(Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>(IGL_EGL_NULL_WINDOW);\n}\n\nstd::unique_ptr<IContext> HWDevice::createContext(EGLNativeWindowType nativeWindow,\n                                                  Result* outResult) const {\n  return std::make_unique<Context>(nativeWindow);\n}\n\nstd::unique_ptr<IContext> HWDevice::createContext(BackendVersion backendVersion,\n                                                  EGLNativeWindowType nativeWindow,\n                                                  Result* outResult) const {\n  return std::make_unique<Context>(backendVersion, nativeWindow);\n}\n\nstd::unique_ptr<IContext> HWDevice::createOffscreenContext(size_t width,\n                                                           size_t height,\n                                                           Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>(width, height);\n}\n\n// @fb-only\nstd::unique_ptr<opengl::Device> HWDevice::createWithContext(std::unique_ptr<IContext> context,\n                                                            Result* outResult) const {\n  Result::setOk(outResult);\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"context is null\");\n    return nullptr;\n  }\n  return std::make_unique<Device>(std::move(context));\n}\n\n// @fb-only\nstd::unique_ptr<opengl::Device> HWDevice::create(EGLNativeWindowType nativeWindow,\n                                                 Result* outResult) const {\n  auto context = createContext(nativeWindow, outResult);\n  if (context == nullptr) {\n    return nullptr;\n  }\n  return createWithContext(std::move(context), outResult);\n}\n\n} // namespace igl::opengl::egl\n"
  },
  {
    "path": "src/igl/opengl/egl/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/HWDevice.h>\n\nnamespace igl::opengl::egl {\n\n// @fb-only\nclass HWDevice final : public ::igl::opengl::HWDevice {\n  // @fb-only\n  using Super = ::igl::opengl::HWDevice;\n\n public:\n  ///--------------------------------------\n  /// MARK: - opengl::HWDevice\n\n  std::unique_ptr<IContext> createContext(Result* outResult) const override;\n  std::unique_ptr<IContext> createContext(EGLNativeWindowType nativeWindow,\n                                          Result* outResult) const;\n  std::unique_ptr<IContext> createContext(BackendVersion backendVersion,\n                                          EGLNativeWindowType nativeWindow,\n                                          Result* outResult) const override;\n\n  /**\n   * @brief Creates an offscreen context suitable for unit testing.\n   */\n  std::unique_ptr<IContext> createOffscreenContext(size_t width,\n                                                   size_t height,\n                                                   Result* outResult) const;\n  // @fb-only\n  std::unique_ptr<opengl::Device> createWithContext(std::unique_ptr<IContext> context,\n                                                    Result* outResult) const override;\n\n  using Super::create;\n  // @fb-only\n  std::unique_ptr<opengl::Device> create(EGLNativeWindowType nativeWindow,\n                                         Result* outResult = nullptr) const;\n};\n\n} // namespace igl::opengl::egl\n"
  },
  {
    "path": "src/igl/opengl/egl/PlatformDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/egl/PlatformDevice.h>\n\n#include <igl/opengl/ViewTextureTarget.h>\n#include <igl/opengl/egl/Context.h>\n#include <igl/opengl/egl/Device.h>\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n#include <android/hardware_buffer.h>\n#include <igl/opengl/egl/android/NativeHWBuffer.h>\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n#include <utility>\n\nnamespace igl::opengl::egl {\n\n// @fb-only\nPlatformDevice::PlatformDevice(Device& owner) : opengl::PlatformDevice(owner) {}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(\n    TextureFormat colorTextureFormat,\n    Result* IGL_NULLABLE outResult) {\n  if (drawableTexture_) {\n    return drawableTexture_;\n  }\n\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    return nullptr;\n  }\n\n  Result subResult;\n  auto dimensions = context->getDrawSurfaceDimensions(&subResult);\n  if (!subResult.isOk()) {\n    Result::setResult(outResult, subResult.code, subResult.message);\n    return nullptr;\n  }\n\n  const TextureDesc desc = {\n      dimensions.first < 0 ? 0 : static_cast<uint32_t>(dimensions.first),\n      dimensions.second < 0 ? 0 : static_cast<uint32_t>(dimensions.second),\n      1, // depth\n      1, // numLayers\n      1, // numSamples\n      TextureDesc::TextureUsageBits::Attachment,\n      1, // numMipLevels\n      TextureType::TwoD,\n      colorTextureFormat,\n      ResourceStorage::Private,\n  };\n  auto texture = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n  subResult = texture->create(desc, true);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n  drawableTexture_ = std::move(texture);\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    drawableTexture_->initResourceTracker(std::move(resourceTracker));\n  }\n\n  return drawableTexture_;\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(\n    int width,\n    int height,\n    TextureFormat colorTextureFormat,\n    Result* IGL_NULLABLE outResult) {\n  if (drawableTexture_ && drawableTexture_->getWidth() == width &&\n      drawableTexture_->getHeight() == height) {\n    return drawableTexture_;\n  }\n\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    return nullptr;\n  }\n\n  const TextureDesc desc = {\n      static_cast<uint32_t>(width),\n      static_cast<uint32_t>(height),\n      1, // depth\n      1, // numLayers\n      1, // numSamples\n      TextureDesc::TextureUsageBits::Attachment,\n      1, // numMipLevels\n      TextureType::TwoD,\n      colorTextureFormat,\n      ResourceStorage::Private,\n  };\n  auto texture = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n  const Result subResult = texture->create(desc, true);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n  drawableTexture_ = std::move(texture);\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    drawableTexture_->initResourceTracker(std::move(resourceTracker));\n  }\n\n  return drawableTexture_;\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDepth(\n    TextureFormat depthTextureFormat,\n    Result* IGL_NULLABLE outResult) {\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    return nullptr;\n  }\n\n  Result subResult;\n  auto dimensions = context->getDrawSurfaceDimensions(&subResult);\n  if (!subResult.isOk()) {\n    Result::setResult(outResult, subResult.code, subResult.message);\n    return nullptr;\n  }\n\n  const TextureDesc desc = {\n      dimensions.first < 0 ? 0 : static_cast<uint32_t>(dimensions.first),\n      dimensions.second < 0 ? 0 : static_cast<uint32_t>(dimensions.second),\n      1, // depth\n      1, // numLayers\n      1, // numSamples\n      TextureDesc::TextureUsageBits::Attachment,\n      1, // numMipLevels\n      TextureType::TwoD,\n      depthTextureFormat,\n      ResourceStorage::Private,\n  };\n  auto texture = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n  subResult = texture->create(desc, true);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    texture->initResourceTracker(std::move(resourceTracker));\n  }\n\n  return texture;\n}\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n/// returns a android::NativeHWTextureBuffer on platforms supporting it\n/// this texture allows CPU and GPU to both read/write memory\nstd::shared_ptr<ITexture> PlatformDevice::createTextureWithSharedMemory(const TextureDesc& desc,\n                                                                        Result* IGL_NULLABLE\n                                                                            outResult) const {\n  auto context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    IGL_LOG_ERROR(\"No EGL context found!\");\n    return nullptr;\n  }\n\n  Result subResult;\n\n  auto texture = std::make_shared<android::NativeHWTextureBuffer>(getContext(), desc.format);\n  subResult = texture->createHWBuffer(desc, false, false);\n  texture->setTextureUsage(desc.usage);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    IGL_LOG_ERROR(\"sub result failed\");\n    return nullptr;\n  }\n\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    texture->initResourceTracker(std::move(resourceTracker));\n  }\n\n  return texture;\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureWithSharedMemory(\n    AHardwareBuffer* IGL_NONNULL buffer,\n    Result* IGL_NULLABLE outResult) const {\n  auto context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    return nullptr;\n  }\n\n  Result subResult;\n\n  AHardwareBuffer_Desc hwbDesc;\n  AHardwareBuffer_describe(buffer, &hwbDesc);\n\n  auto texture = std::make_shared<android::NativeHWTextureBuffer>(\n      getContext(), igl::android::getIglFormat(hwbDesc.format));\n  subResult = texture->createWithHWBuffer(buffer);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    texture->initResourceTracker(std::move(resourceTracker));\n  }\n\n  return texture;\n}\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\nvoid PlatformDevice::updateSurfaces(EGLSurface readSurface,\n                                    EGLSurface drawSurface,\n                                    Result* IGL_NULLABLE outResult) {\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    return;\n  }\n  context->updateSurfaces(readSurface, drawSurface);\n\n  if (drawableTexture_ != nullptr) {\n    auto dimensions = context->getDrawSurfaceDimensions(outResult);\n\n    drawableTexture_->setTextureProperties(dimensions.first, dimensions.second);\n  }\n}\n\nEGLSurface PlatformDevice::createSurface(NativeWindowType nativeWindow,\n                                         Result* IGL_NULLABLE outResult) {\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    return nullptr;\n  }\n  return context->createSurface(nativeWindow);\n}\n\nEGLSurface PlatformDevice::getReadSurface(Result* IGL_NULLABLE outResult) {\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    return nullptr;\n  }\n  return context->getReadSurface();\n}\n\nvoid PlatformDevice::setPresentationTime(long long presentationTimeNs,\n                                         Result* IGL_NULLABLE outResult) {\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    return;\n  }\n  return context->setPresentationTime(presentationTimeNs);\n}\n\nbool PlatformDevice::isType(PlatformDeviceType t) const noexcept {\n  return t == kType || opengl::PlatformDevice::isType(t);\n}\n\n} // namespace igl::opengl::egl\n"
  },
  {
    "path": "src/igl/opengl/egl/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <EGL/egl.h>\n#include <igl/Texture.h>\n#include <igl/opengl/PlatformDevice.h>\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\nstruct AHardwareBuffer;\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\nnamespace igl::opengl {\n\nclass ViewTextureTarget;\n\nnamespace egl {\n\nclass Device;\nclass Context;\n\n// @fb-only\nclass PlatformDevice : public opengl::PlatformDevice {\n public:\n  static constexpr igl::PlatformDeviceType kType = igl::PlatformDeviceType::OpenGLEgl;\n\n  explicit PlatformDevice(Device& owner);\n  ~PlatformDevice() override = default;\n\n  /// Returns a texture representing the EGL Surface associated with this device's context.\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(TextureFormat colorTextureFormat,\n                                                            Result* IGL_NULLABLE outResult);\n\n  /// Returns a texture representing the EGL Surface associated with this device's context.\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(Result* IGL_NULLABLE outResult) {\n    return createTextureFromNativeDrawable(TextureFormat::RGBA_UNorm8, outResult);\n  }\n\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(int width,\n                                                            int height,\n                                                            TextureFormat colorTextureFormat,\n                                                            Result* IGL_NULLABLE outResult);\n\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(int width,\n                                                            int height,\n                                                            Result* IGL_NULLABLE outResult) {\n    return createTextureFromNativeDrawable(width, height, TextureFormat::RGBA_UNorm8, outResult);\n  }\n\n  /// Returns a texture representing the EGL depth texture associated with this device's context.\n  std::shared_ptr<ITexture> createTextureFromNativeDepth(TextureFormat depthTextureFormat,\n                                                         Result* IGL_NULLABLE outResult);\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n  /// returns a android::NativeHWTextureBuffer on platforms supporting it\n  /// this texture allows CPU and GPU to both read/write memory\n  std::shared_ptr<ITexture> createTextureWithSharedMemory(const TextureDesc& desc,\n                                                          Result* IGL_NULLABLE outResult) const;\n  std::shared_ptr<ITexture> createTextureWithSharedMemory(AHardwareBuffer* IGL_NONNULL buffer,\n                                                          Result* IGL_NULLABLE outResult) const;\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n  /// This function must be called every time the currently bound EGL read and/or draw surfaces\n  /// change, in order to notify IGL of these changes.\n  void updateSurfaces(EGLSurface readSurface,\n                      EGLSurface drawSurface,\n                      Result* IGL_NULLABLE outResult);\n\n  EGLSurface IGL_NULLABLE createSurface(NativeWindowType nativeWindow,\n                                        Result* IGL_NULLABLE outResult);\n\n  EGLSurface IGL_NULLABLE getReadSurface(Result* IGL_NULLABLE outResult);\n\n  void setPresentationTime(long long presentationTimeNs, Result* IGL_NULLABLE outResult);\n\n protected:\n  [[nodiscard]] bool isType(PlatformDeviceType t) const noexcept override;\n\n private:\n  std::shared_ptr<ViewTextureTarget> drawableTexture_;\n};\n\n} // namespace egl\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/egl/android/NativeHWBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n// @fb-only\n\n#include <igl/opengl/egl/android/NativeHWBuffer.h>\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n#include <igl/opengl/Config.h>\n#include <igl/opengl/egl/Context.h>\n\n#if IGL_API_LOG && IGL_LOGGING_ENABLED\n#define APILOG_DEC_DRAW_COUNT() \\\n  if (apiLogDrawsLeft_) {       \\\n    apiLogDrawsLeft_--;         \\\n  }\n#define APILOG(format, ...)                 \\\n  if (apiLogDrawsLeft_ || apiLogEnabled_) { \\\n    IGL_LOG_DEBUG(format, ##__VA_ARGS__);   \\\n  }\n#else\n#define APILOG_DEC_DRAW_COUNT() static_cast<void>(0)\n#define APILOG(format, ...) static_cast<void>(0)\n#endif // IGL_API_LOGs && IGL_LOGGING_ENABLED\n\nnamespace igl::opengl::egl::android {\n\nstruct AHardwareBufferContext {\n  EGLDisplay display;\n  EGLImageKHR elgImage;\n};\n\nNativeHWTextureBuffer::~NativeHWTextureBuffer() {\n  GLuint textureId = getId();\n  if (textureId != 0) {\n    if (getContext().isLikelyValidObject()) {\n      getContext().deleteTextures(1, &textureId);\n    }\n  }\n\n  auto* context = static_cast<AHardwareBufferContext*>(hwBufferHelper_.get());\n  if (context) {\n    eglDestroyImageKHR(context->display, context->elgImage);\n    if (hwBuffer_) {\n      AHardwareBuffer_release(hwBuffer_);\n    }\n    hwBuffer_ = nullptr;\n  }\n}\n\nuint64_t NativeHWTextureBuffer::getTextureId() const {\n  return getId();\n}\n\nbool NativeHWTextureBuffer::supportsUpload() const {\n  return true;\n}\n\nResult NativeHWTextureBuffer::create(const TextureDesc& desc, bool hasStorageAlready) {\n  return createHWBuffer(desc, hasStorageAlready, false);\n}\n\nResult NativeHWTextureBuffer::createTextureInternal(AHardwareBuffer* buffer) {\n  AHardwareBuffer_Desc hwbDesc;\n  AHardwareBuffer_describe(buffer, &hwbDesc);\n\n  auto desc = TextureDesc::newNativeHWBufferImage(igl::android::getIglFormat(hwbDesc.format),\n                                                  igl::android::getIglBufferUsage(hwbDesc.usage),\n                                                  hwbDesc.width,\n                                                  hwbDesc.height);\n  auto result = Super::create(desc, false);\n  if (!result.isOk()) {\n    return result;\n  }\n\n  EGLClientBuffer clientBuffer = eglGetNativeClientBufferANDROID(buffer);\n  EGLint attribs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE, EGL_NONE, EGL_NONE};\n\n  EGLDisplay display = ((egl::Context*)&getContext())->getDisplay();\n  // eglCreateImageKHR will add a ref to the AHardwareBuffer\n  EGLImageKHR eglImage =\n      eglCreateImageKHR(display, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID, clientBuffer, attribs);\n  APILOG(\"eglCreateImageKHR(%p, %x, %x, %p, {%d, %d, %d, %d, %d})\\n\",\n         display,\n         EGL_NO_CONTEXT,\n         EGL_NATIVE_BUFFER_ANDROID,\n         clientBuffer,\n         attribs[0],\n         attribs[1],\n         attribs[2],\n         attribs[3],\n         attribs[4]);\n\n  if (EGL_NO_IMAGE_KHR == eglImage) {\n    return Result{Result::Code::RuntimeError, \"Could not create EGL image, err\"};\n  }\n  getContext().checkForErrors(__FUNCTION__, __LINE__);\n\n  IGL_SOFT_ASSERT(getContext().isCurrentContext() || getContext().isCurrentSharegroup());\n\n  GLuint tid = 0;\n  getContext().genTextures(1, &tid);\n  if (!tid) {\n    eglDestroyImageKHR(display, eglImage);\n    return Result{Result::Code::RuntimeError,\n                  \"NativeHWTextureBuffer failes to generate GL texture ID\"};\n  }\n\n  setTextureBufferProperties(tid, GL_TEXTURE_2D);\n  getContext().bindTexture(getTarget(), getId());\n\n  if (getContext().checkForErrors(__FUNCTION__, __LINE__) != GL_NO_ERROR) {\n    GLuint textureId = getId();\n    getContext().deleteTextures(1, &textureId);\n    eglDestroyImageKHR(display, eglImage);\n    return Result{Result::Code::RuntimeError, \"NativeHWTextureBuffer GL error during bindTexture\"};\n  }\n\n  glEGLImageTargetTexture2DOES(getTarget(), static_cast<GLeglImageOES>(eglImage));\n  APILOG(\"glEGLImageTargetTexture2DOES(%u, %#x)\\n\",\n         GL_TEXTURE_2D,\n         static_cast<GLeglImageOES>(eglImage));\n\n  getContext().checkForErrors(__FUNCTION__, __LINE__);\n\n  std::shared_ptr<AHardwareBufferContext> hwBufferCtx = std::make_shared<AHardwareBufferContext>();\n  hwBufferCtx->display = display;\n  hwBufferCtx->elgImage = eglImage;\n  hwBufferHelper_ = hwBufferCtx; // Implicit upcast\n\n  textureDesc_ = desc;\n\n  return Result{};\n}\n\nvoid NativeHWTextureBuffer::bind() {\n  getContext().bindTexture(getTarget(), getId());\n  auto* context = static_cast<AHardwareBufferContext*>(hwBufferHelper_.get());\n\n  getContext().checkForErrors(__FUNCTION__, __LINE__);\n\n  glEGLImageTargetTexture2DOES(getTarget(), context->elgImage);\n  APILOG(\"glEGLImageTargetTexture2DOES(%u, %#x)\\n\",\n         getTarget(),\n         static_cast<GLeglImageOES>(context->elgImage));\n\n  getContext().checkForErrors(__FUNCTION__, __LINE__);\n}\n\nvoid NativeHWTextureBuffer::bindImage(size_t unit) {\n  IGL_DEBUG_ABORT(\"bindImage not Native Hardware Buffer Textures.\");\n}\n\n// upload data into the given mip level\n// a sub-rect of the texture may be specified to only upload the sub-rect\nResult NativeHWTextureBuffer::uploadInternal(TextureType /*type*/,\n                                             const TextureRangeDesc& range,\n                                             const void* IGL_NULLABLE data,\n                                             size_t bytesPerRow,\n                                             const uint32_t* IGL_NULLABLE /*mipLevelBytes*/) const {\n  // not optimal pass\n\n  std::byte* dst = nullptr;\n  INativeHWTextureBuffer::RangeDesc outRange;\n  Result outResult;\n  auto lockGuard\n      [[maybe_unused]] = lockHWBuffer(reinterpret_cast<std::byte**>(&dst), outRange, &outResult);\n  auto internalBpr = getProperties().getBytesPerRow(outRange.stride);\n  bytesPerRow = bytesPerRow ? bytesPerRow : getProperties().getBytesPerRow(range);\n\n  if (outResult.isOk() && dst != nullptr && bytesPerRow <= internalBpr &&\n      range.width == outRange.width && range.height == outRange.height) {\n    const std::byte* src = (const std::byte*)data;\n    uint32_t srcOffset = 0;\n    uint32_t dstOffset = 0;\n    for (int i = 0; i < outRange.height; ++i) {\n      memcpy((void*)(dst + dstOffset), (void*)(src + srcOffset), bytesPerRow);\n      dstOffset += internalBpr;\n      srcOffset += bytesPerRow;\n    }\n\n    return Result{};\n  }\n\n  IGL_DEBUG_ABORT(\"Cannot upload buffer for HW texture for Native Hardware Buffer Textures.\");\n  return Result{Result::Code::Unsupported, \"NativeHWTextureBuffer upload not supported\"};\n}\n\nbool NativeHWTextureBuffer::isValidFormat(TextureFormat format) {\n  return igl::android::getNativeHWFormat(format) > 0;\n}\n\n} // namespace igl::opengl::egl::android\n\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n"
  },
  {
    "path": "src/igl/opengl/egl/android/NativeHWBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n// @fb-only\n\n#pragma once\n\n#include <igl/android/NativeHWBuffer.h>\n#include <igl/opengl/TextureBufferBase.h>\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\nnamespace igl::opengl::egl::android {\n\ntypedef void AHardwareBufferHelper;\n\n// TextureBuffer encapsulates OpenGL textures\nclass NativeHWTextureBuffer : public igl::android::INativeHWTextureBuffer,\n                              public TextureBufferBase {\n  using Super = TextureBufferBase;\n\n public:\n  NativeHWTextureBuffer(IContext& context, TextureFormat format) : Super(context, format) {}\n  ~NativeHWTextureBuffer() override;\n\n  // Texture overrides\n  Result create(const TextureDesc& desc, bool hasStorageAlready) override;\n  void bind() override;\n  void bindImage(size_t unit) override;\n  uint64_t getTextureId() const override;\n\n  bool supportsUpload() const final;\n  static bool isValidFormat(TextureFormat format);\n\n  IGL_INLINE void setTextureUsage(TextureDesc::TextureUsage usage) {\n    setUsage(usage);\n  }\n\n protected:\n  Result createTextureInternal(AHardwareBuffer* buffer) override;\n\n private:\n  Result uploadInternal(TextureType type,\n                        const TextureRangeDesc& range,\n                        const void* IGL_NULLABLE data,\n                        size_t bytesPerRow,\n                        const uint32_t* IGL_NULLABLE mipLevelBytes) const final;\n\n  std::shared_ptr<AHardwareBufferHelper> hwBufferHelper_ = nullptr;\n};\n\n} // namespace igl::opengl::egl::android\n\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n"
  },
  {
    "path": "src/igl/opengl/empty/Context.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/empty/Context.h>\n\n#include <igl/Texture.h>\n\nnamespace igl::opengl::empty {\n\nContext::Context() {\n  Result result;\n  // Initialize through base class.\n  initialize(&result);\n  IGL_DEBUG_ASSERT(result.isOk());\n}\n\nvoid Context::setCurrent() {\n  // Intentionally does nothing.\n}\n\nvoid Context::clearCurrentContext() const {\n  // Intentionally does nothing.\n}\n\nbool Context::isCurrentContext() const {\n  return true;\n}\n\nbool Context::isCurrentSharegroup() const {\n  return false;\n}\n\nvoid Context::present(std::shared_ptr<ITexture> surface) const {\n  // Intentionally does nothing.\n}\n\nstd::unique_ptr<IContext> Context::createShareContext(Result* outResult) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  Result::setResult(outResult, Result::Code::Unimplemented, \"Implement as needed\");\n  return nullptr;\n}\n\n///--------------------------------------\n/// MARK: - GL APIs Overrides\n\nvoid Context::blendFunc(GLenum sfactor, GLenum dfactor) {\n  // Intentionally does nothing.\n}\n\nvoid Context::cullFace(GLint mode) {\n  // Intentionally does nothing.\n}\n\nvoid Context::disable(GLenum cap) {\n  // Intentionally does nothing.\n}\n\nvoid Context::enable(GLenum cap) {\n  // Intentionally does nothing.\n}\n\nvoid Context::frontFace(GLenum mode) {\n  // Intentionally does nothing.\n}\n\nGLenum Context::getError() const {\n  return GL_NO_ERROR;\n}\n\nGLenum Context::checkFramebufferStatus(GLenum /*target*/) {\n  return GL_FRAMEBUFFER_COMPLETE;\n}\n\nconst GLubyte* Context::getString(GLenum /*name*/) const {\n  static constexpr const char* kVal = \"n/a\";\n  return reinterpret_cast<const GLubyte*>(kVal);\n}\n\nvoid Context::setEnabled(bool shouldEnable, GLenum cap) {\n  // Intentionally does nothing.\n}\n\n} // namespace igl::opengl::empty\n"
  },
  {
    "path": "src/igl/opengl/empty/Context.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl::empty {\n\nclass Context final : public IContext {\n public:\n  Context();\n  void setCurrent() override;\n  void clearCurrentContext() const override;\n  bool isCurrentContext() const override;\n  bool isCurrentSharegroup() const override;\n  void present(std::shared_ptr<ITexture> surface) const override;\n\n  /// Creates a shared context, matching format based on the current context.\n  std::unique_ptr<IContext> createShareContext(Result* outResult) override;\n\n  ///--------------------------------------\n  /// MARK: - GL APIs Overrides\n\n  void blendFunc(GLenum sfactor, GLenum dfactor) override;\n  void cullFace(GLint mode) override;\n  void disable(GLenum cap) override;\n  void enable(GLenum cap) override;\n  void frontFace(GLenum mode) override;\n  GLenum getError() const override;\n  GLenum checkFramebufferStatus(GLenum target) override;\n  const GLubyte* getString(GLenum name) const override;\n  void setEnabled(bool shouldEnable, GLenum cap) override;\n};\n\n} // namespace igl::opengl::empty\n"
  },
  {
    "path": "src/igl/opengl/empty/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/empty/Device.h>\n\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl::empty {\n\nDevice::Device(std::unique_ptr<IContext> context) :\n  // @fb-only\n  opengl::Device(std::move(context)), platformDevice_(*this) {}\n\nconst PlatformDevice& Device::getPlatformDevice() const noexcept {\n  return platformDevice_;\n}\n\n} // namespace igl::opengl::empty\n"
  },
  {
    "path": "src/igl/opengl/empty/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/PlatformDevice.h>\n\nnamespace igl::opengl::empty {\n\n// @fb-only\nclass Device final : public opengl::Device {\n public:\n  explicit Device(std::unique_ptr<IContext> context);\n\n  [[nodiscard]] const PlatformDevice& getPlatformDevice() const noexcept override;\n\n private:\n  PlatformDevice platformDevice_;\n};\n\n} // namespace igl::opengl::empty\n"
  },
  {
    "path": "src/igl/opengl/empty/HWDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"HWDevice.h\"\n\n#include <igl/opengl/empty/Context.h>\n#include <igl/opengl/empty/Device.h>\n\nnamespace igl::opengl::empty {\n\nstd::unique_ptr<IContext> HWDevice::createContext(Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>();\n}\n\nstd::unique_ptr<IContext> HWDevice::createContext(BackendVersion /*backendVersion*/,\n                                                  EGLNativeWindowType /*nativeWindow*/,\n                                                  Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>();\n}\n\n// @fb-only\nstd::unique_ptr<opengl::Device> HWDevice::createWithContext(std::unique_ptr<IContext> context,\n                                                            Result* outResult) const {\n  Result::setOk(outResult);\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"context is null\");\n    return nullptr;\n  }\n  // @fb-only\n  return std::make_unique<opengl::empty::Device>(std::move(context));\n}\n\n} // namespace igl::opengl::empty\n"
  },
  {
    "path": "src/igl/opengl/empty/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/HWDevice.h>\n\nnamespace igl::opengl::empty {\n\n// @fb-only\nclass HWDevice final : public ::igl::opengl::HWDevice {\n public:\n  ///--------------------------------------\n  /// MARK: - opengl::HWDevice\n\n  std::unique_ptr<IContext> createContext(Result* outResult) const override;\n  std::unique_ptr<IContext> createContext(BackendVersion backendVersion,\n                                          EGLNativeWindowType nativeWindow,\n                                          Result* outResult) const override;\n\n  std::unique_ptr<Device> createWithContext(std::unique_ptr<IContext> context,\n                                            Result* outResult) const override;\n};\n\n} // namespace igl::opengl::empty\n"
  },
  {
    "path": "src/igl/opengl/glx/Context.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/opengl/glx/Context.h>\n\n#include <X11/X.h>\n#include <dlfcn.h>\n#include <string>\n#include <vector>\n#include <igl/Texture.h>\n\nnamespace {\n\n[[maybe_unused]] int GetLastError() {\n  return 0; // TODO: implement error handling\n}\n\n} // namespace\n\nnamespace igl::opengl::glx {\n\n#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091\n#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092\n#define GLX_PBUFFER_HEIGHT 0x8040\n#define GLX_PBUFFER_WIDTH 0x8041\n\nusing GLXPbuffer = XID;\n// NOLINTNEXTLINE(facebook-unused-forward-decls)\nusing GLXFBConfig = struct __GLXFBConfig*;\nusing __GLXextproc = void (*)();\n\nusing PFNGLXGETPROCADDRESSPROC = __GLXextproc (*)(const GLubyte* procName);\n\nusing PFNXOPENDISPLAY = Display* (*)(const char*);\nusing PFNXCLOSEDISPLAY = int (*)(Display*);\n\nusing PFNXFREE = int (*)(void*);\nusing PFNGLXCHOOSEFBCONFIGPROC = GLXFBConfig* (*)(Display*, int, const int*, int*);\nusing PFNGLXCREATECONTEXTATTRIBSARB =\n    GLXContext (*)(Display*, GLXFBConfig, GLXContext, Bool, const int*);\nusing PFNGLXDESTROYCONTEXT = void (*)(Display*, GLXContext);\nusing PFNGLXCREATEPBUFFERPROC = GLXPbuffer (*)(Display*, GLXFBConfig, const int*);\nusing PFNGLXDESTROYPBUFFER = void (*)(Display*, GLXPbuffer);\nusing PFNGLXMAKECURRENTPROC = Bool (*)(Display*, GLXDrawable, GLXContext);\nusing PFNGLXSWAPBUFFERSPROC = void (*)(Display*, GLXDrawable);\n\nusing PFNGLXGETCURRENTCONTEXTPROC = GLXContext (*)();\n\nstruct GLXSharedModule {\n  GLXSharedModule() {\n    std::vector<std::string> libs = {\n        \"libGLX.so.0\",\n        \"libGL.so.1\",\n        \"libGL.so\",\n\n    };\n\n    for (const auto& lib : libs) {\n      module_ = dlopen(lib.c_str(), RTLD_LAZY | RTLD_LOCAL);\n      if (module_) {\n        break;\n      }\n    }\n\n    IGL_DEBUG_ASSERT(module_ != nullptr, \"[IGL] Failed to initialize GLX\");\n\n    XOpenDisplay = loadFunction<PFNXOPENDISPLAY>(\"XOpenDisplay\");\n    XCloseDisplay = loadFunction<PFNXCLOSEDISPLAY>(\"XCloseDisplay\");\n    XFree = loadFunction<PFNXFREE>(\"XFree\");\n\n    glXGetProcAddress = loadFunction<PFNGLXGETPROCADDRESSPROC>(\"glXGetProcAddress\");\n    glXGetProcAddressARB = loadFunction<PFNGLXGETPROCADDRESSPROC>(\"glXGetProcAddressARB\");\n\n    glXChooseFBConfig = loadGlxFunction<PFNGLXCHOOSEFBCONFIGPROC>(\"glXChooseFBConfig\");\n    glXCreateContextAttribsARB =\n        loadGlxFunction<PFNGLXCREATECONTEXTATTRIBSARB>(\"glXCreateContextAttribsARB\");\n\n    glXDestroyContext = loadGlxFunction<PFNGLXDESTROYCONTEXT>(\"glXDestroyContext\");\n    glXCreatePbuffer = loadGlxFunction<PFNGLXCREATEPBUFFERPROC>(\"glXCreatePbuffer\");\n    glXDestroyPbuffer = loadGlxFunction<PFNGLXDESTROYPBUFFER>(\"glXDestroyPbuffer\");\n    glXMakeCurrent = loadGlxFunction<PFNGLXMAKECURRENTPROC>(\"glXMakeCurrent\");\n    glXSwapBuffers = loadGlxFunction<PFNGLXSWAPBUFFERSPROC>(\"glXSwapBuffers\");\n    glXGetCurrentContext = loadGlxFunction<PFNGLXGETCURRENTCONTEXTPROC>(\"glXGetCurrentContext\");\n  }\n\n  ~GLXSharedModule() {\n    if (module_) {\n      dlclose(module_);\n    }\n  }\n  GLXSharedModule(const GLXSharedModule&) = delete;\n  GLXSharedModule& operator=(const GLXSharedModule&) = delete;\n  GLXSharedModule(GLXSharedModule&&) = delete;\n  GLXSharedModule& operator=(GLXSharedModule&&) = delete;\n\n  template<typename T>\n  T loadFunction(const char* func) {\n    auto f = reinterpret_cast<T>(dlsym(module_, func));\n    IGL_DEBUG_ASSERT(f != nullptr, \"[IGL] Failed to initialize GLX, %s is not found\", func);\n    return f;\n  }\n\n  template<typename T>\n  T loadGlxFunction(const char* func) {\n    if (auto f = reinterpret_cast<T>(glXGetProcAddress(reinterpret_cast<const GLubyte*>(func)))) {\n      return f;\n    }\n    if (auto f =\n            reinterpret_cast<T>(glXGetProcAddressARB(reinterpret_cast<const GLubyte*>(func)))) {\n      return f;\n    }\n    return loadFunction<T>(func);\n  }\n\n  void* module_ = nullptr;\n\n  PFNXOPENDISPLAY XOpenDisplay = nullptr;\n  PFNXCLOSEDISPLAY XCloseDisplay = nullptr;\n  PFNXFREE XFree = nullptr;\n\n  PFNGLXGETPROCADDRESSPROC glXGetProcAddress = nullptr;\n  PFNGLXGETPROCADDRESSPROC glXGetProcAddressARB = nullptr;\n\n  PFNGLXCHOOSEFBCONFIGPROC glXChooseFBConfig = nullptr;\n  PFNGLXCREATECONTEXTATTRIBSARB glXCreateContextAttribsARB = nullptr;\n  PFNGLXDESTROYCONTEXT glXDestroyContext = nullptr;\n  PFNGLXCREATEPBUFFERPROC glXCreatePbuffer = nullptr;\n  PFNGLXDESTROYPBUFFER glXDestroyPbuffer = nullptr;\n  PFNGLXMAKECURRENTPROC glXMakeCurrent = nullptr;\n  PFNGLXSWAPBUFFERSPROC glXSwapBuffers = nullptr;\n  PFNGLXGETCURRENTCONTEXTPROC glXGetCurrentContext = nullptr;\n};\n\nContext::Context(std::shared_ptr<GLXSharedModule> module,\n                 bool offscreen /* = false */,\n                 uint32_t width /* = 0 */,\n                 uint32_t height /* = 0 */) :\n  contextOwned_(true), offscreen_(offscreen), module_(std::move(module)) {\n  if (!module_) {\n    module_ = std::make_shared<GLXSharedModule>();\n  }\n\n  static int visualAttribs[] = {None};\n  int contextAttribs[] = {GLX_CONTEXT_MAJOR_VERSION_ARB, 4, GLX_CONTEXT_MINOR_VERSION_ARB, 6, None};\n\n  if (display_ = module_->XOpenDisplay(nullptr); display_ != nullptr) {\n    int fbcount = 0;\n    if (GLXFBConfig* fbc = module_->glXChooseFBConfig(\n            display_, DefaultScreen(display_), visualAttribs, &fbcount)) {\n      if (contextHandle_ =\n              module_->glXCreateContextAttribsARB(display_, fbc[0], nullptr, True, contextAttribs);\n\n          contextHandle_ != nullptr) {\n        IContext::registerContext((void*)contextHandle_, this);\n      } else {\n        IGL_DEBUG_ABORT(\"[IGL] Failed to create GLX context\");\n      }\n\n      if (offscreen_) {\n        int pbufferAttribs[] = {GLX_PBUFFER_WIDTH,\n                                static_cast<int>(width),\n                                GLX_PBUFFER_HEIGHT,\n                                static_cast<int>(height),\n                                None};\n\n        windowHandle_ = module_->glXCreatePbuffer(display_, fbc[0], pbufferAttribs);\n      }\n\n      module_->XFree(fbc);\n\n      // Set current, since creation doesn't really mean it's current yet.\n      setCurrent();\n\n      // Initialize through base class.\n      Result result;\n      initialize(&result);\n      IGL_DEBUG_ASSERT(result.isOk(), result.message.c_str());\n    } else {\n      IGL_DEBUG_ABORT(\"[IGL] Failed to get GLX framebuffer configs\");\n    }\n  } else {\n    IGL_DEBUG_ABORT(\"[IGL] Failed to open display\");\n  }\n}\n\nContext::Context(std::shared_ptr<GLXSharedModule> module,\n                 Display* display,\n                 GLXDrawable windowHandle,\n                 GLXContext contextHandle) :\n\n  module_(std::move(module)),\n  display_(display),\n  windowHandle_(windowHandle),\n  contextHandle_(contextHandle) {\n  if (!module_) {\n    module_ = std::make_shared<GLXSharedModule>();\n  }\n\n  IContext::registerContext((void*)contextHandle_, this);\n\n  // Set current, since creation doesn't really mean it's current yet.\n  setCurrent();\n\n  // Initialize through base class.\n  Result result;\n  initialize(&result);\n  IGL_DEBUG_ASSERT(result.isOk(), result.message.c_str());\n}\n\nContext::~Context() {\n  // Clear pool explicitly, since it might have reference back to IContext.\n  getAdapterPool().clear();\n\n  // Unregister GLX Context.\n  IContext::unregisterContext(contextHandle_);\n\n  // Destroy GLX.\n  if (contextOwned_) {\n    if (offscreen_) {\n      module_->glXDestroyPbuffer(display_, windowHandle_);\n      windowHandle_ = 0;\n    }\n    if (contextHandle_) {\n      module_->glXDestroyContext(display_, contextHandle_);\n      contextHandle_ = nullptr;\n    }\n    if (display_) {\n      module_->XCloseDisplay(display_);\n      display_ = nullptr;\n    }\n  }\n}\n\nvoid Context::setCurrent() {\n  if (!module_->glXMakeCurrent(display_, windowHandle_, contextHandle_)) {\n    IGL_DEBUG_ABORT(\"[IGL] Failed to activate OpenGL render context. GLX error 0x%08X:\\n\",\n                    GetLastError());\n  }\n  flushDeletionQueue();\n}\n\nvoid Context::clearCurrentContext() const {\n  if (!module_->glXMakeCurrent(display_, None, nullptr)) {\n    IGL_DEBUG_ASSERT(\n        false, \"[IGL] Failed to clear OpenGL render context. GLX error 0x%08X:\\n\", GetLastError());\n  }\n}\n\nbool Context::isCurrentContext() const {\n  return module_->glXGetCurrentContext() == contextHandle_;\n}\n\nbool Context::isCurrentSharegroup() const {\n  return true;\n}\n\nvoid Context::present(std::shared_ptr<ITexture> surface) const {\n  module_->glXSwapBuffers(display_, windowHandle_);\n  module_->glXMakeCurrent(display_, windowHandle_, contextHandle_);\n}\n\nstd::unique_ptr<IContext> Context::createShareContext(Result* outResult) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  Result::setResult(outResult, Result::Code::Unimplemented, \"Implement as needed\");\n  return nullptr;\n}\n\nstd::shared_ptr<GLXSharedModule> Context::getSharedModule() const {\n  return module_;\n}\n\n} // namespace igl::opengl::glx\n"
  },
  {
    "path": "src/igl/opengl/glx/Context.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <X11/Xlib.h>\n#include <cstdint>\n#include <memory>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl::glx {\n\nusing GLXDrawable = XID;\n// NOLINTNEXTLINE(facebook-unused-forward-decls)\nusing GLXContext = struct __GLXcontext*; // NOLINT(bugprone-reserved-identifier)\nstruct GLXSharedModule;\n\nclass Context : public IContext {\n public:\n  explicit Context(std::shared_ptr<GLXSharedModule> module,\n                   bool offscreen = false,\n                   uint32_t width = 0,\n                   uint32_t height = 0);\n  Context(std::shared_ptr<GLXSharedModule> module,\n          Display* display,\n          GLXDrawable windowHandle,\n          GLXContext contextHandle);\n  ~Context() override;\n  Context(const Context&) = delete;\n  Context& operator=(const Context&) = delete;\n  Context(Context&&) = delete;\n  Context& operator=(Context&&) = delete;\n\n  void setCurrent() override;\n  void clearCurrentContext() const override;\n  bool isCurrentContext() const override;\n  bool isCurrentSharegroup() const override;\n  void present(std::shared_ptr<ITexture> surface) const override;\n\n  /// Creates a shared context, matching format based on the current context.\n  std::unique_ptr<IContext> createShareContext(Result* outResult) override;\n\n  std::shared_ptr<GLXSharedModule> getSharedModule() const;\n\n private:\n  const bool contextOwned_ = false;\n  const bool offscreen_ = false;\n  std::shared_ptr<GLXSharedModule> module_;\n  Display* display_ = nullptr;\n  GLXDrawable windowHandle_ = 0;\n  GLXContext contextHandle_ = nullptr;\n};\n\n} // namespace igl::opengl::glx\n"
  },
  {
    "path": "src/igl/opengl/glx/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/glx/Device.h>\n\nnamespace igl::opengl::glx {\n\nDevice::Device(std::unique_ptr<IContext> context) :\n  // @fb-only\n  opengl::Device(std::move(context)), platformDevice_(*this) {}\n\nconst PlatformDevice& Device::getPlatformDevice() const noexcept {\n  return platformDevice_;\n}\n\nDevice::~Device() = default;\n\n} // namespace igl::opengl::glx\n"
  },
  {
    "path": "src/igl/opengl/glx/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/glx/PlatformDevice.h>\n\nnamespace igl::opengl::glx {\n\n// @fb-only\nclass Device final : public igl::opengl::Device {\n public:\n  explicit Device(std::unique_ptr<IContext> context);\n  ~Device() override;\n\n  [[nodiscard]] const PlatformDevice& getPlatformDevice() const noexcept override;\n\n protected:\n  PlatformDevice platformDevice_;\n};\n\n} // namespace igl::opengl::glx\n"
  },
  {
    "path": "src/igl/opengl/glx/HWDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"HWDevice.h\"\n\n#include <igl/opengl/glx/Context.h>\n#include <igl/opengl/glx/Device.h>\n\nnamespace igl::opengl::glx {\n\nstd::unique_ptr<IContext> HWDevice::createContext(Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>(nullptr /* module */);\n}\n\nstd::unique_ptr<IContext> HWDevice::createContext([[maybe_unused]] BackendVersion backendVersion,\n                                                  EGLNativeWindowType /* nativeWindow */,\n                                                  Result* outResult) const {\n  IGL_DEBUG_ASSERT(backendVersion.flavor == BackendFlavor::OpenGL);\n  return createContext(outResult);\n}\n\nstd::unique_ptr<IContext> HWDevice::createOffscreenContext(size_t width,\n                                                           size_t height,\n                                                           Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>(nullptr /* module */,\n                                   true /* offscreen */,\n\n                                   static_cast<uint32_t>(width),\n                                   static_cast<uint32_t>(height));\n}\n\n// @fb-only\nstd::unique_ptr<opengl::Device> HWDevice::createWithContext(std::unique_ptr<IContext> context,\n                                                            Result* outResult) const {\n  if (context) {\n    Result::setOk(outResult);\n    return std::make_unique<Device>(std::move(context));\n  } else {\n    Result::setResult(outResult, Result::Code::ArgumentNull);\n    return nullptr;\n  }\n}\n\n} // namespace igl::opengl::glx\n"
  },
  {
    "path": "src/igl/opengl/glx/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/HWDevice.h>\n\nnamespace igl::opengl::glx {\n\n// @fb-only\nclass HWDevice final : public ::igl::opengl::HWDevice {\n public:\n  ///--------------------------------------\n  /// MARK: - opengl::HWDevice\n\n  std::unique_ptr<IContext> createContext(Result* outResult) const override;\n\n  std::unique_ptr<IContext> createContext(BackendVersion backendVersion,\n                                          EGLNativeWindowType nativeWindow,\n                                          Result* outResult) const override;\n\n  std::unique_ptr<IContext> createOffscreenContext(size_t width,\n                                                   size_t height,\n                                                   Result* outResult) const;\n  // @fb-only\n  std::unique_ptr<opengl::Device> createWithContext(std::unique_ptr<IContext> context,\n                                                    Result* outResult) const override;\n};\n\n} // namespace igl::opengl::glx\n"
  },
  {
    "path": "src/igl/opengl/glx/PlatformDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n// @fb-only\n\n#include <igl/opengl/glx/PlatformDevice.h>\n\n#include <igl/opengl/ViewTextureTarget.h>\n#include <igl/opengl/glx/Context.h>\n#include <igl/opengl/glx/Device.h>\n\nnamespace igl::opengl::glx {\n\n// @fb-only\nPlatformDevice::PlatformDevice(Device& owner) : opengl::PlatformDevice(owner) {}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(uint32_t width,\n                                                                          uint32_t height,\n                                                                          Result* outResult) {\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No GLX context found!\");\n    return nullptr;\n  }\n\n  if (drawableTexture_ && width_ == width && height_ == height) {\n    Result::setResult(outResult, Result::Code::Ok);\n    return drawableTexture_;\n  }\n\n  const auto desc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                       static_cast<size_t>(width),\n                                       static_cast<size_t>(height),\n                                       TextureDesc::TextureUsageBits::Attachment,\n                                       \"NativeDrawable\");\n  auto texture = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n\n  Result subResult = texture->create(desc, true);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n\n  drawableTexture_ = std::move(texture);\n  width_ = width;\n  height_ = height;\n\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    drawableTexture_->initResourceTracker(resourceTracker);\n  }\n\n  return drawableTexture_;\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDepth(uint32_t width,\n                                                                       uint32_t height,\n                                                                       Result* outResult) {\n  // generate depth with new width and height\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  if (!context) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No GLXs context found!\");\n    return nullptr;\n  }\n\n  if (depthTexture_ && width_ == width && height_ == height) {\n    Result::setResult(outResult, Result::Code::Ok);\n    return depthTexture_;\n  }\n\n  const auto desc = TextureDesc::new2D(TextureFormat::S8_UInt_Z24_UNorm,\n                                       static_cast<size_t>(width),\n                                       static_cast<size_t>(height),\n                                       TextureDesc::TextureUsageBits::Attachment,\n                                       \"NativeDepth\");\n\n  auto texture = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n  IGL_DEBUG_ASSERT(texture);\n  const Result subResult = texture->create(desc, true);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n\n  depthTexture_ = std::move(texture);\n  width_ = width;\n  height_ = height;\n\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    depthTexture_->initResourceTracker(resourceTracker);\n  }\n\n  return depthTexture_;\n}\n\nbool PlatformDevice::isType(PlatformDeviceType t) const noexcept {\n  return t == kType || opengl::PlatformDevice::isType(t);\n}\n\n} // namespace igl::opengl::glx\n"
  },
  {
    "path": "src/igl/opengl/glx/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <igl/Texture.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/PlatformDevice.h>\n\nnamespace igl::opengl {\nclass ViewTextureTarget;\n}\n\nnamespace igl::opengl::glx {\n\nclass Device;\n\n// @fb-only\nclass PlatformDevice : public opengl::PlatformDevice {\n public:\n  static constexpr PlatformDeviceType kType = PlatformDeviceType::OpenGLx;\n\n  explicit PlatformDevice(Device& owner);\n  ~PlatformDevice() override = default;\n\n  /// Returns a texture representing the GLX Surface associated with this device's context.\n  [[nodiscard]] std::shared_ptr<ITexture> createTextureFromNativeDrawable(uint32_t width,\n                                                                          uint32_t height,\n                                                                          Result* outResult);\n  [[nodiscard]] std::shared_ptr<ITexture> createTextureFromNativeDepth(uint32_t width,\n                                                                       uint32_t height,\n                                                                       Result* outResult);\n\n protected:\n  [[nodiscard]] bool isType(PlatformDeviceType t) const noexcept override;\n\n private:\n  uint32_t width_ = 0;\n  uint32_t height_ = 0;\n  std::shared_ptr<ViewTextureTarget> drawableTexture_;\n  std::shared_ptr<ViewTextureTarget> depthTexture_;\n};\n\n} // namespace igl::opengl::glx\n"
  },
  {
    "path": "src/igl/opengl/ios/Context.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <CoreVideo/CVOpenGLESTextureCache.h>\n#include <igl/opengl/IContext.h>\n\n@class EAGLContext;\n\nnamespace igl::opengl::ios {\n\nclass Context final : public IContext {\n public:\n  /// Create a new context with new EAGLContext.\n  explicit Context(BackendVersion backendVersion);\n  Context(BackendVersion backendVersion, Result* IGL_NULLABLE result);\n  /// Create a new context with existing EAGLContext.\n  explicit Context(EAGLContext* IGL_NULLABLE context);\n  Context(EAGLContext* IGL_NULLABLE context, Result* IGL_NULLABLE result);\n  ~Context() override;\n\n  void setCurrent() override;\n  void clearCurrentContext() const override;\n  bool isCurrentContext() const override;\n  bool isCurrentSharegroup() const override;\n  void present(std::shared_ptr<ITexture> surface) const override;\n\n  /// Creates a shared context, matching format based on the current context.\n  std::unique_ptr<IContext> createShareContext(Result* IGL_NULLABLE outResult) override;\n\n  CVOpenGLESTextureCacheRef IGL_NULLABLE getTextureCache();\n\n private:\n  EAGLContext* IGL_NULLABLE const context_;\n  CVOpenGLESTextureCacheRef IGL_NULLABLE textureCache_ = nullptr;\n};\n\n} // namespace igl::opengl::ios\n"
  },
  {
    "path": "src/igl/opengl/ios/Context.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/ios/Context.h>\n\n#import <Foundation/NSValue.h>\n#include <OpenGLES/EAGL.h>\n#include <QuartzCore/CAEAGLLayer.h>\n#import <objc/runtime.h>\n#include <igl/opengl/Texture.h>\n\nnamespace igl::opengl::ios {\nnamespace {\nEAGLContext* createEAGLContext(BackendVersion backendVersion, EAGLSharegroup* sharegroup) {\n  IGL_DEBUG_ASSERT(backendVersion.flavor == BackendFlavor::OpenGL_ES);\n  IGL_DEBUG_ASSERT(backendVersion.majorVersion == 3 || backendVersion.majorVersion == 2);\n  IGL_DEBUG_ASSERT(backendVersion.minorVersion == 0);\n\n  if (backendVersion.majorVersion == 3 && backendVersion.minorVersion == 0) {\n    EAGLContext* context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES3\n                                                 sharegroup:sharegroup];\n    if (context == nullptr) {\n      return [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:sharegroup];\n    }\n    return context;\n  } else {\n    IGL_DEBUG_ASSERT(backendVersion.majorVersion == 2,\n                     \"IGL: unacceptable enum for rendering API for iOS\\n\");\n    return [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2 sharegroup:sharegroup];\n  }\n}\n\nvoid* getOrGenerateContextUniqueID(EAGLContext* context) {\n  static const void* uniqueIdKey = &uniqueIdKey;\n  static uint64_t idCounter = 0;\n  NSNumber* key = objc_getAssociatedObject(context, &uniqueIdKey);\n  uint64_t contextId = 0;\n  if (key == nullptr) {\n    // Generate and set id if it doesn't exist\n    contextId = idCounter++;\n    objc_setAssociatedObject(context, &uniqueIdKey, @(contextId), OBJC_ASSOCIATION_RETAIN);\n  } else {\n    contextId = key.integerValue;\n  }\n  return (void*)contextId; // NOLINT(performance-no-int-to-ptr)\n}\n} // namespace\n\nContext::Context(BackendVersion backendVersion) : context_(createEAGLContext(backendVersion, nil)) {\n  if (context_ != nil) {\n    IContext::registerContext(getOrGenerateContextUniqueID(context_), this);\n  }\n\n  initialize();\n}\n\nContext::Context(BackendVersion backendVersion, Result* IGL_NULLABLE result) :\n  context_(createEAGLContext(backendVersion, nil)) {\n  if (context_ != nil) {\n    IContext::registerContext(getOrGenerateContextUniqueID(context_), this);\n  } else {\n    Result::setResult(result, Result::Code::ArgumentInvalid);\n  }\n\n  initialize(result);\n}\n\nContext::Context(EAGLContext* IGL_NULLABLE context) : context_(context) {\n  if (context_ != nil) {\n    IContext::registerContext(getOrGenerateContextUniqueID(context_), this);\n  }\n  initialize();\n}\n\nContext::Context(EAGLContext* IGL_NULLABLE context, Result* IGL_NULLABLE result) :\n  context_(context) {\n  if (context_ != nil) {\n    IContext::registerContext(getOrGenerateContextUniqueID(context_), this);\n  } else {\n    Result::setResult(result, Result::Code::ArgumentInvalid);\n  }\n  initialize(result);\n}\n\nContext::~Context() {\n  // Release CVOpenGLESTextureCacheRef\n  if (textureCache_ != nullptr) {\n    CVOpenGLESTextureCacheFlush(textureCache_, 0);\n    CFRelease(textureCache_);\n  }\n  willDestroy(context_ == nil ? nullptr : getOrGenerateContextUniqueID(context_));\n\n  // Unregister EAGLContext\n  if (context_ != nil) {\n    if (context_ == [EAGLContext currentContext]) {\n      [EAGLContext setCurrentContext:nil];\n    }\n  }\n}\n\nvoid Context::present(std::shared_ptr<ITexture> surface) const {\n  auto* texture = static_cast<Texture*>(surface.get());\n  // Some automated tests assume they can call present on an offscreen texture.\n  // This is not supported on iOS, so we just ignore it.\n  if (IGL_DEBUG_VERIFY(texture) && texture->canPresent()) {\n    texture->bind();\n    [context_ presentRenderbuffer:GL_RENDERBUFFER];\n  }\n}\n\nvoid Context::setCurrent() {\n  [EAGLContext setCurrentContext:context_];\n  flushDeletionQueue();\n}\n\nvoid Context::clearCurrentContext() const {\n  [EAGLContext setCurrentContext:nil];\n}\n\nbool Context::isCurrentContext() const {\n  return [EAGLContext currentContext] == context_;\n}\n\nbool Context::isCurrentSharegroup() const {\n  return [EAGLContext currentContext].sharegroup == context_.sharegroup;\n}\n\nstd::unique_ptr<IContext> Context::createShareContext(Result* outResult) {\n  EAGLContext* sharedContext = [[EAGLContext alloc] initWithAPI:context_.API\n                                                     sharegroup:context_.sharegroup];\n  if (!sharedContext) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Failed to create shared context\");\n    return nullptr;\n  }\n  Result::setOk(outResult);\n  return std::make_unique<Context>(sharedContext);\n}\n\nCVOpenGLESTextureCacheRef Context::getTextureCache() {\n  if (textureCache_ == nullptr) {\n    CVOpenGLESTextureCacheCreate(kCFAllocatorDefault, nullptr, context_, nullptr, &textureCache_);\n  }\n  return textureCache_;\n}\n\n} // namespace igl::opengl::ios\n"
  },
  {
    "path": "src/igl/opengl/ios/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/ios/PlatformDevice.h>\n\nnamespace igl::opengl::ios {\n\n// @fb-only\nclass Device final : public opengl::Device {\n public:\n  explicit Device(std::unique_ptr<IContext> context);\n  ~Device() override = default;\n\n  [[nodiscard]] const PlatformDevice& getPlatformDevice() const noexcept override;\n\n private:\n  PlatformDevice platformDevice_;\n};\n\n} // namespace igl::opengl::ios\n"
  },
  {
    "path": "src/igl/opengl/ios/Device.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/ios/Device.h>\n\n#include <cstdio>\n#include <cstring>\n#include <igl/Common.h>\n\nnamespace igl::opengl::ios {\n\nDevice::Device(std::unique_ptr<IContext> context) :\n  // @fb-only\n  opengl::Device(std::move(context)), platformDevice_(*this) {}\n\nconst PlatformDevice& Device::getPlatformDevice() const noexcept {\n  return platformDevice_;\n}\n\n} // namespace igl::opengl::ios\n"
  },
  {
    "path": "src/igl/opengl/ios/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/HWDevice.h>\n#include <igl/opengl/ios/Device.h>\n\nnamespace igl::opengl::ios {\n\n// @fb-only\nclass HWDevice final : public ::igl::opengl::HWDevice {\n public:\n  std::unique_ptr<IContext> createContext(Result* outResult) const override;\n  std::unique_ptr<IContext> createContext(BackendVersion backendVersion,\n                                          EGLNativeWindowType nativeWindow,\n                                          Result* outResult) const override;\n\n  std::unique_ptr<opengl::Device> createWithContext(std::unique_ptr<IContext> context,\n                                                    Result* outResult) const override;\n};\n// @fb-only\n\n} // namespace igl::opengl::ios\n"
  },
  {
    "path": "src/igl/opengl/ios/HWDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"HWDevice.h\"\n\n#include <igl/opengl/ios/Context.h>\n\nnamespace igl::opengl::ios {\n\n///--------------------------------------\n/// MARK: - opengl::HWDevice\n\nstd::unique_ptr<IContext> HWDevice::createContext(Result* outResult) const {\n  return std::make_unique<Context>(\n      BackendVersion{.flavor = BackendFlavor::OpenGL_ES, .majorVersion = 3, .minorVersion = 0},\n      outResult);\n}\n\nstd::unique_ptr<IContext> HWDevice::createContext(BackendVersion backendVersion,\n                                                  EGLNativeWindowType /*nativeWindow*/,\n                                                  Result* outResult) const {\n  return std::make_unique<Context>(backendVersion, outResult);\n}\n\n// @fb-only\nstd::unique_ptr<opengl::Device> HWDevice::createWithContext(std::unique_ptr<IContext> context,\n                                                            Result* outResult) const {\n  Result::setOk(outResult);\n  if (!context) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"context is null\");\n    return nullptr;\n  }\n  return std::make_unique<Device>(std::move(context));\n}\n\n} // namespace igl::opengl::ios\n"
  },
  {
    "path": "src/igl/opengl/ios/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#if defined __OBJC__\n#import <CoreVideo/CVOpenGLESTextureCache.h>\n#import <CoreVideo/CVPixelBuffer.h>\n#include <QuartzCore/CAEAGLLayer.h>\n#else\ntypedef void CAEAGLLayer;\n#endif\n#include <CoreVideo/CVImageBuffer.h>\n#include <CoreVideo/CVOpenGLESTextureCache.h>\n#include <igl/Texture.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/PlatformDevice.h>\n\nnamespace igl::opengl::ios {\n\nclass Device;\n\n// @fb-only\nclass PlatformDevice final : public opengl::PlatformDevice {\n public:\n  static constexpr igl::PlatformDeviceType kType = igl::PlatformDeviceType::OpenGLIOS;\n\n  PlatformDevice(Device& owner);\n  ~PlatformDevice() override;\n\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(CAEAGLLayer* nativeDrawable,\n                                                            Result* outResult);\n  std::shared_ptr<ITexture> createTextureFromNativeDepth(CAEAGLLayer* nativeDrawable,\n                                                         TextureFormat depthTextureFormat,\n                                                         Result* outResult);\n\n  Size getNativeDrawableSize(CAEAGLLayer* nativeDrawable, Result* outResult);\n  TextureFormat getNativeDrawableTextureFormat(CAEAGLLayer* nativeDrawable, Result* outResult);\n\n  /// If the EAGLContext is created outside of IGL, then you would have to create the texture cache\n  /// outside of IGL and pass it into this function. If the EAGLContext is created by IGL, then use\n  /// the function below that would use IGL's internally created texture cache. It's important that\n  /// the texture cache passed in, is generated by the current EAGLContext. Creates a texture from a\n  /// native PixelBuffer.\n  /// @param sourceImage source image\n  /// @param textureCache an OpenGLES texture cache\n  /// @param width width of generated texture\n  /// @param height height of generated texture\n  /// @param planeIndex the plane index to generate the texture\n  /// @param outResult optional result\n  /// @return pointer to generated TextureBuffer or nullptr\n  std::unique_ptr<ITexture> createTextureFromNativePixelBufferWithSize(\n      const CVImageBufferRef& sourceImage,\n      const CVOpenGLESTextureCacheRef& textureCache,\n      size_t width,\n      size_t height,\n      size_t planeIndex = 0,\n      TextureDesc::TextureUsage usage = TextureDesc::TextureUsageBits::Sampled,\n      Result* outResult = nullptr);\n  /// Uses the backing CVPixelBufferRef width and height.\n  std::unique_ptr<ITexture> createTextureFromNativePixelBuffer(\n      const CVImageBufferRef& sourceImage,\n      const CVOpenGLESTextureCacheRef& textureCache,\n      size_t planeIndex = 0,\n      TextureDesc::TextureUsage usage = TextureDesc::TextureUsageBits::Sampled,\n      Result* outResult = nullptr);\n\n  /// Creates a texture from a native PixelBuffer.\n  /// @param sourceImage source image\n  /// @param planeIndex the plane index to generate the texture\n  /// @param outResult optional result\n  /// @return pointer to generated TextureBuffer or nullptr\n  std::unique_ptr<ITexture> createTextureFromNativePixelBufferWithSize(\n      const CVImageBufferRef& sourceImage,\n      size_t width,\n      size_t height,\n      size_t planeIndex = 0,\n      TextureDesc::TextureUsage usage = TextureDesc::TextureUsageBits::Sampled,\n      Result* outResult = nullptr);\n  /// Uses the backing CVPixelBufferRef width and height.\n  std::unique_ptr<ITexture> createTextureFromNativePixelBuffer(\n      const CVImageBufferRef& sourceImage,\n      size_t planeIndex = 0,\n      TextureDesc::TextureUsage usage = TextureDesc::TextureUsageBits::Sampled,\n      Result* outResult = nullptr);\n\n  CVOpenGLESTextureCacheRef getTextureCache();\n\n protected:\n  [[nodiscard]] bool isType(PlatformDeviceType t) const noexcept override;\n};\n\n} // namespace igl::opengl::ios\n"
  },
  {
    "path": "src/igl/opengl/ios/PlatformDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/ios/PlatformDevice.h>\n\n#include <CoreVideo/CVBuffer.h>\n#include <CoreVideo/CVOpenGLESTextureCache.h>\n#import <Foundation/Foundation.h>\n#include <OpenGLES/EAGL.h>\n#import <OpenGLES/ES2/glext.h>\n#import <QuartzCore/QuartzCore.h>\n#include <cstdio>\n#include <cstring>\n#import <objc/runtime.h>\n#include <igl/Common.h>\n#include <igl/opengl/TextureTarget.h>\n#include <igl/opengl/ios/Context.h>\n#include <igl/opengl/ios/Device.h>\n#include <igl/opengl/ios/TextureBuffer.h>\n\nstatic void* kAssociatedRenderBufferHolderKey = &kAssociatedRenderBufferHolderKey;\n\n/// Object used to hold onto a renderBuffer so we can attach it as an associated object\n@interface _IGLRenderBufferHolder : NSObject {\n @public\n  std::weak_ptr<igl::opengl::TextureTarget> _renderBuffer;\n}\n@end\n\nnamespace {\n/// Backed by an associated object. This is used to track the last renderBuffer used to create this\n/// texture so we can reuse it and invalidate it when necessary\n/// This always returns a renderBufferHolder, but it is up to the responsibility of the caller to\n/// set renderBuffer.\n// @fb-only\n// @fb-only\n_IGLRenderBufferHolder* getAssociatedRenderBufferHolder(CAEAGLLayer* nativeDrawable);\n\n} // namespace\n\nnamespace igl::opengl::ios {\n\nPlatformDevice::PlatformDevice(Device& owner) : opengl::PlatformDevice(owner) {}\n\nPlatformDevice::~PlatformDevice() {\n  getSharedContext()->setCurrent();\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(\n    CAEAGLLayer* nativeDrawable,\n    Result* outResult) {\n  if (!nativeDrawable) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"Invalid native drawable\");\n    return nullptr;\n  }\n\n  Result::setOk(outResult);\n\n  const CGFloat scale = nativeDrawable.contentsScale;\n\n  const CGRect bounds = [nativeDrawable bounds];\n  const CGRect resolution = CGRectMake(\n      bounds.origin.x, bounds.origin.y, bounds.size.width * scale, bounds.size.height * scale);\n\n  _IGLRenderBufferHolder* renderBufferHolder = getAssociatedRenderBufferHolder(nativeDrawable);\n\n  const auto renderBuffer = renderBufferHolder->_renderBuffer.lock();\n\n  if (renderBuffer != nullptr && renderBuffer->getSize().width == resolution.size.width &&\n      renderBuffer->getSize().height == resolution.size.height) {\n    // The caller is expected to release the reference\n    return renderBuffer;\n  } else {\n    // If a size change causes the texture to be recreated, the caller must ensure the previous\n    // ITexture is freed before calling, or else there may be unexpected behavior.\n    if (renderBuffer != nullptr) {\n      renderBuffer->bind();\n      [[EAGLContext currentContext] renderbufferStorage:GL_RENDERBUFFER fromDrawable:nullptr];\n      renderBuffer->unbind();\n    }\n\n    NSString* colorFormat = kEAGLColorFormatRGBA8;\n    /*\n        if (!nativeDrawable.drawableProperties) {\n          colorFormat = kEAGLColorFormatRGBA8;\n          eaglLayer.drawableProperties = @{kEAGLDrawablePropertyColorFormat: colorFormat};\n        } else {\n          colorFormat = [eaglLayer.drawableProperties\n       objectForKey:kEAGLDrawablePropertyColorFormat];\n        }\n    */\n    TextureDesc desc;\n    desc.type = TextureType::TwoD;\n    if (colorFormat == kEAGLColorFormatRGBA8) {\n      desc.format = TextureFormat::RGBA_UNorm8;\n      //  } else if (colorFormat == kEAGLColorFormatRGB565) {\n      //    desc.format = TextureFormatRGB565UNorm; // TODO: we need to bring back RGB565 first\n      //  } else if (colorFormat == kEAGLColorFormatSRGBA8) {\n      //    desc.format = TextureFormatSRGBA8888UNorm; // TODO: we need to add support for sRGB\n      //    formats\n    } else {\n      Result::setResult(outResult, Result::Code::Unsupported, \"Unsupported texture format\");\n      return nullptr;\n    }\n\n    desc.width = (size_t)resolution.size.width;\n    desc.height = (size_t)resolution.size.height;\n    desc.depth = 1;\n    desc.numSamples = 1;\n    desc.usage = TextureDesc::TextureUsageBits::Attachment;\n\n    auto texture =\n        std::make_shared<TextureTarget>(getContext(), desc.format, /* canPresent */ true);\n    if (texture != nullptr) {\n      const Result result = texture->create(desc, true);\n\n      texture->bind();\n      [[EAGLContext currentContext] renderbufferStorage:GL_RENDERBUFFER\n                                           fromDrawable:nativeDrawable];\n      texture->unbind();\n\n      if (!result.isOk()) {\n        if (outResult) {\n          *outResult = result;\n        }\n\n        return nullptr;\n      }\n    }\n\n    renderBufferHolder->_renderBuffer = texture;\n    if (auto resourceTracker = owner_.getResourceTracker()) {\n      texture->initResourceTracker(resourceTracker);\n    }\n\n    return texture;\n  }\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDepth(\n    CAEAGLLayer* nativeDrawable,\n    TextureFormat depthTextureFormat,\n    Result* outResult) {\n  if (!nativeDrawable) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"Invalid native drawable\");\n    return nullptr;\n  }\n\n  Result::setOk(outResult);\n\n  const CGFloat scale = nativeDrawable.contentsScale;\n\n  const CGRect bounds = [nativeDrawable bounds];\n  const CGRect resolution = CGRectMake(\n      bounds.origin.x, bounds.origin.y, bounds.size.width * scale, bounds.size.height * scale);\n\n  TextureDesc desc = {\n      .width = static_cast<uint32_t>(resolution.size.width),\n      .height = static_cast<uint32_t>(resolution.size.height),\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .usage = TextureDesc::TextureUsageBits::Attachment,\n      .numMipLevels = 1,\n      .type = TextureType::TwoD,\n      .format = depthTextureFormat,\n  };\n  desc.storage = ResourceStorage::Private;\n  return owner_.createTexture(desc, outResult);\n}\n\nSize PlatformDevice::getNativeDrawableSize(CAEAGLLayer* nativeDrawable, Result* outResult) {\n  if (nativeDrawable == nullptr) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"nativeDrawable cannot be null\");\n    return {0, 0};\n  }\n  Result::setOk(outResult);\n  const auto screenScale = nativeDrawable.contentsScale;\n  const auto bounds = nativeDrawable.bounds;\n  const auto resolution = CGRectMake(bounds.origin.x,\n                                     bounds.origin.y,\n                                     bounds.size.width * screenScale,\n                                     bounds.size.height * screenScale);\n  return {(float)resolution.size.width, (float)resolution.size.height};\n}\n\nTextureFormat PlatformDevice::getNativeDrawableTextureFormat(CAEAGLLayer* /*nativeDrawable*/,\n                                                             Result* outResult) {\n  Result::setOk(outResult);\n  //[nativeDrawable.drawableProperties objectForKey:kEAGLDrawablePropertyColorFormat];\n  return TextureFormat::RGBA_UNorm8; // TODO convert value retrieved with above method to IGL!\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativePixelBufferWithSize(\n    const CVImageBufferRef& sourceImage,\n    const CVOpenGLESTextureCacheRef& textureCache,\n    size_t width,\n    size_t height,\n    size_t planeIndex,\n    TextureDesc::TextureUsage usage,\n    Result* outResult) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  auto textureBuffer =\n      std::make_unique<TextureBuffer>(getContext(), sourceImage, textureCache, planeIndex, usage);\n  const Result result = textureBuffer->createWithSize(width, height);\n\n  Result::setResult(outResult, result.code, result.message);\n  if (!result.isOk()) {\n    return nullptr;\n  }\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    textureBuffer->initResourceTracker(resourceTracker);\n  }\n  return textureBuffer;\n}\n\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativePixelBuffer(\n    const CVImageBufferRef& sourceImage,\n    const CVOpenGLESTextureCacheRef& textureCache,\n    size_t planeIndex,\n    TextureDesc::TextureUsage usage,\n    Result* outResult) {\n  auto textureBuffer =\n      std::make_unique<TextureBuffer>(getContext(), sourceImage, textureCache, planeIndex, usage);\n  const Result result = textureBuffer->create();\n\n  Result::setResult(outResult, result.code, result.message);\n  if (!result.isOk()) {\n    return nullptr;\n  }\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    textureBuffer->initResourceTracker(resourceTracker);\n  }\n  return textureBuffer;\n}\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativePixelBufferWithSize(\n    const CVImageBufferRef& sourceImage,\n    size_t width,\n    size_t height,\n    size_t planeIndex,\n    TextureDesc::TextureUsage usage,\n    Result* outResult) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  auto textureBuffer = std::make_unique<TextureBuffer>(\n      getContext(), sourceImage, getTextureCache(), planeIndex, usage);\n  const Result result = textureBuffer->createWithSize(width, height);\n\n  Result::setResult(outResult, result.code, result.message);\n  if (!result.isOk()) {\n    return nullptr;\n  }\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    textureBuffer->initResourceTracker(resourceTracker);\n  }\n  return textureBuffer;\n}\n\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativePixelBuffer(\n    const CVImageBufferRef& sourceImage,\n    size_t planeIndex,\n    TextureDesc::TextureUsage usage,\n    Result* outResult) {\n  auto textureBuffer = std::make_unique<TextureBuffer>(\n      getContext(), sourceImage, getTextureCache(), planeIndex, usage);\n  const Result result = textureBuffer->create();\n\n  Result::setResult(outResult, result.code, result.message);\n  if (!result.isOk()) {\n    return nullptr;\n  }\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    textureBuffer->initResourceTracker(resourceTracker);\n  }\n  return textureBuffer;\n}\n\nbool PlatformDevice::isType(PlatformDeviceType t) const noexcept {\n  return t == kType || opengl::PlatformDevice::isType(t);\n}\n\nCVOpenGLESTextureCacheRef PlatformDevice::getTextureCache() {\n  auto* context = static_cast<Context*>(getSharedContext().get());\n  return context->getTextureCache();\n}\n\n} // namespace igl::opengl::ios\n\nnamespace {\n_IGLRenderBufferHolder* getAssociatedRenderBufferHolder(CAEAGLLayer* nativeDrawable) {\n  _IGLRenderBufferHolder* renderBufferHolder =\n      objc_getAssociatedObject(nativeDrawable, kAssociatedRenderBufferHolderKey);\n  if (renderBufferHolder) {\n    return renderBufferHolder;\n  }\n  renderBufferHolder = [_IGLRenderBufferHolder new];\n  objc_setAssociatedObject(nativeDrawable,\n                           kAssociatedRenderBufferHolderKey,\n                           renderBufferHolder,\n                           OBJC_ASSOCIATION_RETAIN_NONATOMIC);\n  return renderBufferHolder;\n}\n} // namespace\n\n@implementation _IGLRenderBufferHolder\n@end\n"
  },
  {
    "path": "src/igl/opengl/ios/TextureBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <CoreVideo/CVOpenGLESTextureCache.h>\n#include <CoreVideo/CVPixelBuffer.h>\n#include <igl/opengl/TextureBuffer.h>\n\nnamespace igl::opengl::ios {\n\n// @fb-only\nclass TextureBuffer final : public opengl::TextureBuffer {\n  using Super = opengl::TextureBuffer;\n  // @fb-only\n\n public:\n  /// @param pixelBuffer The backing CVPixelBufferRef source\n  /// @param textureCache Texture cache\n  /// @param planeIndex Plane index to generate texture\n  /// @param usage Usage of the CVOpenGLESTextureRef\n  TextureBuffer(IContext& context,\n                CVPixelBufferRef IGL_NONNULL pixelBuffer,\n                CVOpenGLESTextureCacheRef IGL_NONNULL textureCache,\n                size_t planeIndex = 0,\n                TextureDesc::TextureUsage usage = TextureDesc::TextureUsageBits::Sampled);\n  ~TextureBuffer() override;\n  TextureBuffer(const TextureBuffer&) = delete;\n  TextureBuffer& operator=(const TextureBuffer&) = delete;\n  TextureBuffer(TextureBuffer&&) = delete;\n  TextureBuffer& operator=(TextureBuffer&&) = delete;\n\n  // Disable those creation methods\n  Result create(const TextureDesc& desc, bool hasStorageAlready) override;\n\n  /// Create a CVOpenGLESTextureRef with the given CVPixelBufferRef. Uses the backing\n  /// CVPixelBufferRef width and height.\n  Result create();\n\n  /// Create a CVOpenGLESTextureRef with the given CVPixelBufferRef.\n  /// @param width Width of generated texture\n  /// @param height Height of generated texture\n  Result createWithSize(size_t width, size_t height);\n\n  bool supportsUpload() const final;\n\n private:\n  Result uploadInternal(TextureType type,\n                        const TextureRangeDesc& range,\n                        const void* IGL_NULLABLE data,\n                        size_t bytesPerRow,\n                        const uint32_t* IGL_NULLABLE mipLevelBytes) const final;\n\n  CVOpenGLESTextureRef IGL_NULLABLE cvTexture_ = nullptr;\n  CVPixelBufferRef IGL_NULLABLE pixelBuffer_ = nullptr;\n  CVOpenGLESTextureCacheRef IGL_NULLABLE textureCache_ = nullptr;\n  size_t planeIndex_ = 0;\n  bool uploaded_ = false;\n  bool isCreated_ = false;\n};\n\n} // namespace igl::opengl::ios\n"
  },
  {
    "path": "src/igl/opengl/ios/TextureBuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/ios/TextureBuffer.h>\n\n#import <CoreFoundation/CFBase.h>\n#import <CoreVideo/CVOpenGLESTextureCache.h>\n#import <CoreVideo/CVPixelBuffer.h>\n#import <MacTypes.h>\n#import <objc/objc.h>\n\nnamespace igl::opengl::ios {\nnamespace {\n/// The conversion from CVPixelFormatType to igl::TextureFormat is inferred from CVPixelBuffer.h\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nTextureFormat convertToTextureFormat(const DeviceFeatureSet& deviceFeatures,\n                                     OSType pixelFormat,\n                                     size_t planeIndex) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  switch (pixelFormat) {\n  case kCVPixelFormatType_32BGRA:\n    return TextureFormat::BGRA_UNorm8;\n\n  case kCVPixelFormatType_64RGBAHalf:\n    return TextureFormat::RGBA_F16;\n\n  case kCVPixelFormatType_OneComponent8:\n    return TextureFormat::R_UNorm8;\n\n  case kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:\n  case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange: {\n    const bool supportsRG = deviceFeatures.hasFeature(DeviceFeatures::TextureFormatRG);\n\n    if (planeIndex == 0) {\n      return supportsRG ? TextureFormat::R_UNorm8 : TextureFormat::A_UNorm8;\n    } else if (planeIndex == 1) {\n      return supportsRG ? TextureFormat::RG_UNorm8 : TextureFormat::LA_UNorm8;\n    } else {\n      return TextureFormat::Invalid;\n    }\n  }\n  case kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange: {\n    if (planeIndex == 0) {\n      return TextureFormat::R_UInt16;\n    } else if (planeIndex == 1) {\n      return TextureFormat::RG_UInt16;\n    } else {\n      return TextureFormat::Invalid;\n    }\n  }\n  default:\n    return TextureFormat::Invalid;\n  }\n}\n} // namespace\n\nTextureBuffer::TextureBuffer(IContext& context,\n                             CVPixelBufferRef pixelBuffer,\n                             CVOpenGLESTextureCacheRef textureCache,\n                             // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                             size_t planeIndex,\n                             TextureDesc::TextureUsage usage) :\n  Super(context,\n        convertToTextureFormat(context.deviceFeatures(),\n                               CVPixelBufferGetPixelFormatType(pixelBuffer),\n                               planeIndex)),\n  pixelBuffer_(CVPixelBufferRetain(pixelBuffer)),\n  textureCache_((CVOpenGLESTextureCacheRef)CFRetain(textureCache)),\n  planeIndex_(planeIndex) {\n  setUsage(usage);\n}\n\nTextureBuffer::~TextureBuffer() {\n  if (textureCache_) {\n    CFRelease(textureCache_);\n  }\n  CVPixelBufferRelease(cvTexture_);\n  CVPixelBufferRelease(pixelBuffer_);\n\n#if TARGET_OS_SIMULATOR\n  if (getFormat() == TextureFormat::BGRA_UNorm8) {\n    GLuint textureId = getId();\n    // We only have a manually generated textureID when it's on simulator and BGRA\n    getContext().deleteTextures(1, &textureId);\n  }\n#endif\n  setTextureBufferProperties(0, 0);\n  setUsage(0);\n}\n\nResult TextureBuffer::create(const TextureDesc& /*desc*/, bool /*hasStorageAlready*/) {\n  return Result(Result::Code::Unsupported,\n                \"igl::opengl::ios::TextureBuffer does not support this creation\");\n}\n\nResult TextureBuffer::create() {\n  const auto isPlanar = CVPixelBufferIsPlanar(pixelBuffer_);\n  const size_t width = (isPlanar ? CVPixelBufferGetWidthOfPlane(pixelBuffer_, planeIndex_)\n                                 : CVPixelBufferGetWidth(pixelBuffer_));\n  const size_t height = (isPlanar ? CVPixelBufferGetHeightOfPlane(pixelBuffer_, planeIndex_)\n                                  : CVPixelBufferGetHeight(pixelBuffer_));\n  return TextureBuffer::createWithSize(width, height);\n}\n\nResult TextureBuffer::createWithSize(size_t width, size_t height) {\n  if (pixelBuffer_ == nullptr || textureCache_ == nullptr) {\n    return Result(Result::Code::ArgumentNull, \"PixelBuffer or TextureCache is NULL\");\n  }\n\n  if (isCreated_) {\n    return Result(Result::Code::InvalidOperation,\n                  \"TextureBuffer has already been created with a pixelBuffer\");\n  }\n  isCreated_ = true;\n\n  if (uploaded_) {\n    return Result();\n  }\n  uploaded_ = true;\n\n  if (!toFormatDescGL(getFormat(), TextureDesc::TextureUsageBits::Sampled, formatDescGL_)) {\n    return Result(Result::Code::ArgumentInvalid, \"Invalid texture format\");\n  }\n  if (getFormat() == TextureFormat::BGRA_UNorm8) {\n    // TODO: Remove this once unit tests verify this is not needed.\n    // Override BGRA internal format since below functions rely on TexImage2D and not TexStorage2D.\n    formatDescGL_.internalFormat = GL_RGBA;\n  }\n  setTextureProperties(width, height);\n\n#if TARGET_OS_SIMULATOR\n  if (getFormat() == TextureFormat::BGRA_UNorm8) {\n    // The behavior of CVOpenGLESTextureCacheCreateTextureFromImage() changed\n    // in iOS 13 simulator, and it fails for unknown reasons when BGRA only.\n    // So we have to create and upload the texture ourselves.\n    GLuint textureID = 0;\n    getContext().genTextures(1, &textureID);\n    getContext().bindTexture(GL_TEXTURE_2D, textureID);\n\n    GLint prevUnpackAlignment = -1;\n    getContext().getIntegerv(GL_UNPACK_ALIGNMENT, &prevUnpackAlignment);\n\n    const size_t bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer_);\n    getContext().pixelStorei(GL_UNPACK_ALIGNMENT, this->getAlignment(bytesPerRow));\n\n    BOOL requiresLineByLineUpload = NO;\n    const auto bytesPerPixel = getProperties().bytesPerBlock;\n    if (bytesPerRow / bytesPerPixel > width) {\n      // Alignment alone can't make this work, but setting the row length is only available\n      // in ES3. The fallback is to upload the texture line-by-line.\n      if (getContext().deviceFeatures().getGLVersion() >= GLVersion::v3_0_ES) {\n        getContext().pixelStorei(GL_UNPACK_ROW_LENGTH, bytesPerRow / bytesPerPixel);\n      } else {\n        requiresLineByLineUpload = YES;\n      }\n    }\n\n    CVPixelBufferLockBaseAddress(pixelBuffer_, 0);\n    void* imageData = CVPixelBufferGetBaseAddress(pixelBuffer_);\n    if (requiresLineByLineUpload) {\n      // Before we can update individual lines, the texture must be fully allocated.\n      getContext().texImage2D(\n          GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, nullptr);\n\n      for (size_t currentLine = 0; currentLine < height; ++currentLine) {\n        void* offsetData =\n            static_cast<void*>(static_cast<unsigned char*>(imageData) + bytesPerRow * currentLine);\n        getContext().texSubImage2D(\n            GL_TEXTURE_2D, 0, 0, currentLine, width, 1, GL_BGRA, GL_UNSIGNED_BYTE, offsetData);\n      }\n    } else {\n      getContext().texImage2D(\n          GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_BGRA, GL_UNSIGNED_BYTE, imageData);\n    }\n    CVPixelBufferUnlockBaseAddress(pixelBuffer_, 0);\n\n    if (getContext().deviceFeatures().getGLVersion() >= GLVersion::v3_0_ES) {\n      getContext().pixelStorei(GL_UNPACK_ROW_LENGTH, 0);\n    }\n    getContext().pixelStorei(GL_UNPACK_ALIGNMENT, prevUnpackAlignment);\n\n    setTextureBufferProperties(textureID, GL_TEXTURE_2D);\n\n    return Result();\n  }\n#endif\n  const auto error = CVOpenGLESTextureCacheCreateTextureFromImage(kCFAllocatorDefault,\n                                                                  textureCache_,\n                                                                  pixelBuffer_,\n                                                                  nullptr,\n                                                                  GL_TEXTURE_2D,\n                                                                  formatDescGL_.internalFormat,\n                                                                  width,\n                                                                  height,\n                                                                  formatDescGL_.format,\n                                                                  formatDescGL_.type,\n                                                                  planeIndex_,\n                                                                  &cvTexture_);\n  if (error != noErr) {\n    return Result(Result::Code::Unsupported,\n                  \"Failed to create CVOpenGLESTexture: \" + std::to_string(error) +\n                      \" internalFormat: \" + std::to_string(formatDescGL_.internalFormat) +\n                      \" format: \" + std::to_string(formatDescGL_.format) +\n                      \" type: \" + std::to_string(formatDescGL_.type));\n  }\n\n  setTextureBufferProperties(CVOpenGLESTextureGetName(cvTexture_),\n                             CVOpenGLESTextureGetTarget(cvTexture_));\n\n  return Result();\n}\n\nbool TextureBuffer::supportsUpload() const {\n  return false;\n}\n\nResult TextureBuffer::uploadInternal(TextureType /*type*/,\n                                     const TextureRangeDesc& /*range*/,\n                                     const void* /*data*/,\n                                     size_t /*bytesPerRow*/,\n                                     const uint32_t* IGL_NULLABLE /*mipLevelBytes*/) const {\n  return Result();\n}\n\n} // namespace igl::opengl::ios\n"
  },
  {
    "path": "src/igl/opengl/macos/Context.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <AppKit/AppKit.h>\n#include <CoreVideo/CVOpenGLTextureCache.h>\n#include <CoreVideo/CoreVideo.h>\n#include <igl/opengl/IContext.h>\n\n@class NSOpenGLContext;\n\nnamespace igl::opengl::macos {\n\nclass Context final : public IContext {\n public:\n  /// Creates a shared context, matching format based on the current context.\n  std::unique_ptr<IContext> createShareContext(Result* outResult) override;\n\n  /// Create a new context with new NSOpenGLContext.\n  static std::unique_ptr<Context> createContext(BackendVersion backendVersion, Result* outResult);\n  /// Create a new context with existing NSOpenGLContext.\n  static std::unique_ptr<Context> createContext(NSOpenGLContext* context, Result* outResult);\n  /// Creates a shared context, with matching format based on an existing context.\n  static std::unique_ptr<Context> createShareContext(Context& existingContext, Result* outResult);\n  // Create a new context with existing NSOpenGLContext and its shared contexts. The share context\n  // must be setup ahead of calling this constructor, e.g. via QOpenGLContext->setShareContext, and\n  // should not be modified during the lifetime of this IContext\n  static std::unique_ptr<Context> createContext(\n      NSOpenGLContext* context,\n      std::shared_ptr<std::vector<NSOpenGLContext*>> shareContexts,\n      Result* outResult);\n\n  ~Context() override;\n\n  Context(const Context&) = delete;\n  Context& operator=(const Context&) = delete;\n  Context(Context&&) = delete;\n  Context& operator=(Context&&) = delete;\n\n  void setCurrent() override;\n  void clearCurrentContext() const override;\n  bool isCurrentContext() const override;\n  bool isCurrentSharegroup() const override;\n  void present(std::shared_ptr<ITexture> surface) const override;\n\n  NSOpenGLContext* getNSContext();\n  CVOpenGLTextureCacheRef createTextureCache();\n\n  static NSOpenGLPixelFormat* preferredPixelFormat();\n\n private:\n  Context(NSOpenGLContext* context, std::shared_ptr<std::vector<NSOpenGLContext*>> shareContexts);\n\n  NSOpenGLContext* const context_;\n\n  // Since NSOpenGLContext does not expose a Share Group, this must be set manually via the\n  // constructor and should be a list of all the contexts in the group including this context_\n  std::shared_ptr<std::vector<NSOpenGLContext*>> sharegroup_;\n};\n\n} // namespace igl::opengl::macos\n"
  },
  {
    "path": "src/igl/opengl/macos/Context.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/macos/Context.h>\n\n#include <AppKit/NSOpenGL.h>\n#include <memory>\n#include <utility>\n\nnamespace igl::opengl::macos {\n\nnamespace {\nNSOpenGLContext* createOpenGLContext(BackendVersion backendVersion) {\n  IGL_DEBUG_ASSERT(backendVersion.flavor == BackendFlavor::OpenGL);\n  IGL_DEBUG_ASSERT((backendVersion.majorVersion == 3 && backendVersion.minorVersion == 2) ||\n                   (backendVersion.majorVersion == 4 && backendVersion.minorVersion == 1));\n  auto format = Context::preferredPixelFormat();\n  IGL_DEBUG_ASSERT(backendVersion.flavor == BackendFlavor::OpenGL);\n\n  if (backendVersion.majorVersion == 3 && backendVersion.minorVersion == 2) {\n    static NSOpenGLPixelFormatAttribute attributes[] = {\n        NSOpenGLPFADoubleBuffer,\n        NSOpenGLPFAAllowOfflineRenderers,\n        NSOpenGLPFAMultisample,\n        1,\n        NSOpenGLPFASampleBuffers,\n        1,\n        NSOpenGLPFASamples,\n        4,\n        NSOpenGLPFAColorSize,\n        32,\n        NSOpenGLPFADepthSize,\n        24,\n        NSOpenGLPFAOpenGLProfile,\n        NSOpenGLProfileVersion3_2Core,\n        0,\n    };\n    auto pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];\n    IGL_DEBUG_ASSERT(pixelFormat, \"Requested attributes not supported\");\n    if (pixelFormat) {\n      format = pixelFormat;\n    }\n  } else if (backendVersion.majorVersion == 4 && backendVersion.minorVersion == 1) {\n    // Copied from preferredPixelFormat, with NSOpenGLProfileVersion4_1Core added\n    static NSOpenGLPixelFormatAttribute attributes[] = {\n        NSOpenGLPFADoubleBuffer,\n        NSOpenGLPFAAllowOfflineRenderers,\n        NSOpenGLPFAMultisample,\n        1,\n        NSOpenGLPFASampleBuffers,\n        1,\n        NSOpenGLPFASamples,\n        4,\n        NSOpenGLPFAColorSize,\n        32,\n        NSOpenGLPFADepthSize,\n        24,\n        NSOpenGLPFAOpenGLProfile,\n        NSOpenGLProfileVersion4_1Core,\n        0,\n    };\n    auto pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];\n    IGL_DEBUG_ASSERT(pixelFormat, \"Requested attributes not supported\");\n    if (pixelFormat) {\n      format = pixelFormat;\n    }\n  }\n  return [[NSOpenGLContext alloc] initWithFormat:format shareContext:nil];\n}\n} // namespace\n\n///--------------------------------------\n/// MARK: - Context\n\nstd::unique_ptr<IContext> Context::createShareContext(Result* outResult) {\n  return createShareContext(*this, outResult);\n}\n\nstd::unique_ptr<Context> Context::createContext(BackendVersion backendVersion, Result* outResult) {\n  return createContext(createOpenGLContext(backendVersion), {}, outResult);\n}\n\nstd::unique_ptr<Context> Context::createContext(NSOpenGLContext* context, Result* outResult) {\n  return createContext(context, {}, outResult);\n}\n\nstd::unique_ptr<Context> Context::createShareContext(Context& existingContext, Result* outResult) {\n  auto existingNSContext = existingContext.getNSContext();\n  auto newGLContext = [[NSOpenGLContext alloc] initWithFormat:existingNSContext.pixelFormat\n                                                 shareContext:existingNSContext];\n\n  IGL_DEBUG_ASSERT(existingContext.sharegroup_, \"Sharegroup must exist\");\n\n  Result result;\n  auto context = std::unique_ptr<Context>(new Context(newGLContext, existingContext.sharegroup_));\n  context->initialize(&result);\n\n  // If we are successful, add the new context to our sharegroup.\n  if (result.isOk()) {\n    context->sharegroup_->push_back(newGLContext);\n  } else {\n    context = nullptr;\n  }\n\n  Result::setResult(outResult, result);\n  return context;\n}\n\nstd::unique_ptr<Context> Context::createContext(\n    NSOpenGLContext* context,\n    std::shared_ptr<std::vector<NSOpenGLContext*>> shareContexts,\n    Result* outResult) {\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"NSOpenGLContext was null\");\n    return {};\n  }\n\n  Result result;\n  auto newContext = std::unique_ptr<Context>(new Context(context, std::move(shareContexts)));\n  newContext->initialize(&result);\n\n  // If we are successful, add the new context to our sharegroup.\n  if (result.isOk()) {\n    newContext->sharegroup_->push_back(context);\n  } else {\n    newContext = nullptr;\n  }\n\n  Result::setResult(outResult, result);\n  return newContext;\n}\n\nContext::Context(NSOpenGLContext* context,\n                 std::shared_ptr<std::vector<NSOpenGLContext*>> shareContexts) :\n  context_(context), sharegroup_(std::move(shareContexts)) {\n  if (!sharegroup_) {\n    sharegroup_ = std::make_shared<std::vector<NSOpenGLContext*>>();\n  }\n  // Note that we're not adding the context to the sharegroup yet. It'll only be done by the\n  // callers, after the new context is initialized successfully.\n\n  IContext::registerContext((__bridge void*)context_, this);\n}\n\nContext::~Context() {\n  willDestroy((__bridge void*)context_);\n}\n\nvoid Context::present(std::shared_ptr<ITexture> /*surface*/) const {\n  [context_ flushBuffer];\n}\n\nvoid Context::setCurrent() {\n  [context_ makeCurrentContext];\n  flushDeletionQueue();\n}\n\nvoid Context::clearCurrentContext() const {\n  [NSOpenGLContext clearCurrentContext];\n}\n\nbool Context::isCurrentContext() const {\n  return [NSOpenGLContext currentContext] == context_;\n}\n\nbool Context::isCurrentSharegroup() const {\n  IGL_DEBUG_ASSERT(sharegroup_ != nullptr, \"Sharegroup must exist\");\n  auto it = std::find(sharegroup_->begin(), sharegroup_->end(), [NSOpenGLContext currentContext]);\n  return it != sharegroup_->end();\n}\n\nNSOpenGLPixelFormat* Context::preferredPixelFormat() {\n  static NSOpenGLPixelFormatAttribute attributes[] = {\n      NSOpenGLPFAWindow,\n      NSOpenGLPFAAccelerated,\n      NSOpenGLPFADoubleBuffer,\n      NSOpenGLPFAColorSize,\n      24,\n      NSOpenGLPFAAlphaSize,\n      8,\n      NSOpenGLPFADepthSize,\n      24,\n      NSOpenGLPFAStencilSize,\n      8,\n      0,\n  };\n  NSOpenGLPixelFormat* format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];\n  IGL_DEBUG_ASSERT(format, \"Requested attributes not supported\");\n  return format;\n}\n\nNSOpenGLContext* Context::getNSContext() {\n  return context_;\n}\n\nCVOpenGLTextureCacheRef Context::createTextureCache() {\n  CVOpenGLTextureCacheRef textureCache = nullptr;\n  const CVReturn result = CVOpenGLTextureCacheCreate(kCFAllocatorDefault,\n                                                     nullptr,\n                                                     context_.CGLContextObj,\n                                                     context_.pixelFormat.CGLPixelFormatObj,\n                                                     nullptr,\n                                                     &textureCache);\n  if (result != kCVReturnSuccess) {\n    IGL_DEBUG_ABORT(\"CVOpenGLTextureCacheCreate failed to create texture cache\");\n  }\n  return textureCache;\n}\n\n} // namespace igl::opengl::macos\n"
  },
  {
    "path": "src/igl/opengl/macos/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/macos/PlatformDevice.h>\n\nnamespace igl::opengl::macos {\n\n// @fb-only\nclass Device final : public ::igl::opengl::Device {\n public:\n  explicit Device(std::unique_ptr<IContext> context);\n  ~Device() override = default;\n\n  [[nodiscard]] const PlatformDevice& getPlatformDevice() const noexcept override;\n\n private:\n  PlatformDevice platformDevice_;\n};\n\n} // namespace igl::opengl::macos\n"
  },
  {
    "path": "src/igl/opengl/macos/Device.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/macos/Device.h>\n\n#include <AppKit/AppKit.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::opengl::macos {\n\nDevice::Device(std::unique_ptr<IContext> context) :\n  // @fb-only\n  opengl::Device(std::move(context)), platformDevice_(*this) {}\n\nconst PlatformDevice& Device::getPlatformDevice() const noexcept {\n  return platformDevice_;\n}\n\n} // namespace igl::opengl::macos\n"
  },
  {
    "path": "src/igl/opengl/macos/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/HWDevice.h>\n\nnamespace igl::opengl::macos {\n\n// @fb-only\nclass HWDevice final : public ::igl::opengl::HWDevice {\n public:\n  ///--------------------------------------\n  /// MARK: - opengl::HWDevice\n\n  std::unique_ptr<IContext> createContext(Result* outResult) const override;\n  std::unique_ptr<IContext> createContext(BackendVersion backendVersion,\n                                          EGLNativeWindowType nativeWindow,\n                                          Result* outResult) const override;\n  // @fb-only\n  std::unique_ptr<opengl::Device> createWithContext(std::unique_ptr<IContext> context,\n                                                    Result* outResult) const override;\n};\n\n} // namespace igl::opengl::macos\n"
  },
  {
    "path": "src/igl/opengl/macos/HWDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/macos/HWDevice.h>\n\n#include <igl/opengl/macos/Context.h>\n#include <igl/opengl/macos/Device.h>\n\nnamespace igl::opengl::macos {\n\n///--------------------------------------\n/// MARK: - opengl::HWDevice\n\nstd::unique_ptr<IContext> HWDevice::createContext(Result* outResult) const {\n  return Context::createContext(\n      {.flavor = BackendFlavor::OpenGL, .majorVersion = 4, .minorVersion = 1}, outResult);\n}\n\nstd::unique_ptr<IContext> HWDevice::createContext(BackendVersion backendVersion,\n                                                  EGLNativeWindowType /*nativeWindow*/,\n                                                  Result* outResult) const {\n  return Context::createContext(backendVersion, outResult);\n}\n\n// @fb-only\nstd::unique_ptr<opengl::Device> HWDevice::createWithContext(std::unique_ptr<IContext> context,\n                                                            Result* outResult) const {\n  Result::setOk(outResult);\n  if (!context) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"context is null\");\n    return nullptr;\n  }\n  return std::make_unique<Device>(std::move(context));\n}\n\n} // namespace igl::opengl::macos\n"
  },
  {
    "path": "src/igl/opengl/macos/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <CoreVideo/CVOpenGLTextureCache.h>\n#include <igl/Texture.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/PlatformDevice.h>\n\nnamespace igl::opengl {\n\nclass ViewTextureTarget;\n\nnamespace macos {\n\nclass Device;\n\n// @fb-only\nclass PlatformDevice : public opengl::PlatformDevice {\n public:\n  static constexpr igl::PlatformDeviceType kType = igl::PlatformDeviceType::OpenGLMacOS;\n\n  PlatformDevice(Device& owner);\n  ~PlatformDevice() override = default;\n\n  /// Creates a texture that represents the default backbuffer for the view associated with the\n  /// currently active OpenGL context. This is useful when using views like NSOpenGLView.\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(Result* outResult);\n\n  /// Creates a texture that represents the default depth buffer for the view associated with the\n  /// currently active OpenGL context. This is useful when using views like NSOpenGLView.\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::shared_ptr<ITexture> createTextureFromNativeDepth(Result* outResult);\n\n  /// Get a size of a given native drawable surface.\n  /// @param outResult Optional result.\n  /// @return An accurate size that is suitable for rendering or zero if failed to get a size.\n  Size getNativeDrawableSize(Result* outResult);\n\n  /// Get a texture format that is suitable to render a given drawable surface.\n  /// @param outResult Optional result.\n  /// @return An accurate pixel format that is suitable for rendering or invalid if failed.\n  TextureFormat getNativeDrawableTextureFormat(Result* outResult);\n\n  /// Set a texture format that is suitable to render a given drawable surface.\n  /// @param format The pixel format that is suitable for rendering\n  /// @param outResult Optional result.\n  void setNativeDrawableTextureFormat(TextureFormat format, Result* outResult);\n\n  /// Creates a texture from a native PixelBuffer.\n  /// @param sourceImage source image\n  /// @param an OpenGL texture cache\n  /// @param outResult optional result\n  /// @return pointer to generated TextureBuffer or nullptr\n  std::unique_ptr<ITexture> createTextureFromNativePixelBuffer(\n      const CVImageBufferRef& sourceImage,\n      const CVOpenGLTextureCacheRef& textureCache,\n      TextureDesc::TextureUsage usage = TextureDesc::TextureUsageBits::Sampled,\n      Result* outResult = nullptr);\n\n protected:\n  [[nodiscard]] bool isType(PlatformDeviceType t) const noexcept override;\n\n private:\n  std::shared_ptr<ViewTextureTarget> drawableTexture_;\n  TextureFormat drawableTextureFormat_ = TextureFormat::RGBA_SRGB;\n};\n} // namespace macos\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/macos/PlatformDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n// @fb-only\n\n#include <igl/opengl/macos/PlatformDevice.h>\n\n#import <AppKit/NSOpenGL.h>\n#import <AppKit/NSView.h> // IWYU pragma: keep\n#include <CoreVideo/CVImageBuffer.h>\n#include <CoreVideo/CVOpenGLTextureCache.h>\n#import <Foundation/NSGeometry.h>\n#include <cstdio>\n#include <cstring>\n#include <igl/Common.h>\n#include <igl/Texture.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/ViewTextureTarget.h>\n#include <igl/opengl/macos/Device.h>\n#include <igl/opengl/macos/TextureBuffer.h>\n\nnamespace igl::opengl::macos {\n\n///--------------------------------------\n/// MARK: - PlatformDevice\n// @fb-only\nPlatformDevice::PlatformDevice(Device& owner) : opengl::PlatformDevice(owner) {}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(Result* outResult) {\n  Size requiredSize;\n  NSView* view = [[NSOpenGLContext currentContext] view];\n  if (IGL_DEBUG_VERIFY(view)) {\n    const NSRect bounds = view.bounds;\n    const NSSize sizeInPixels = [view convertSizeToBacking:bounds.size];\n    requiredSize =\n        Size(static_cast<float>(sizeInPixels.width), static_cast<float>(sizeInPixels.height));\n  } else {\n    Result::setResult(outResult, Result::Code::RuntimeError);\n    return nullptr;\n  }\n\n  if (!drawableTexture_ || drawableTexture_->getSize() != requiredSize) {\n    const TextureDesc desc = {\n        .width = static_cast<uint32_t>(requiredSize.width),\n        .height = static_cast<uint32_t>(requiredSize.height),\n        .depth = 1,\n        .numLayers = 1,\n        .numSamples = 1,\n        .usage = TextureDesc::TextureUsageBits::Attachment,\n        .numMipLevels = 1,\n        .type = TextureType::TwoD,\n        .format = drawableTextureFormat_,\n    };\n    auto texture = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n    texture->create(desc, true);\n    drawableTexture_ = texture;\n    if (auto resourceTracker = owner_.getResourceTracker()) {\n      drawableTexture_->initResourceTracker(resourceTracker);\n    }\n  }\n\n  Result::setOk(outResult);\n  return drawableTexture_;\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDepth(Result* outResult) {\n  NSSize sizeInPixels;\n  NSView* view = [[NSOpenGLContext currentContext] view];\n  if (IGL_DEBUG_VERIFY(view)) {\n    const NSRect bounds = view.bounds;\n    sizeInPixels = [view convertSizeToBacking:bounds.size];\n  } else {\n    Result::setResult(outResult, Result::Code::RuntimeError);\n    return nullptr;\n  }\n\n  GLint depthBits(~0);\n  NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLContext currentContext] pixelFormat];\n  if (IGL_DEBUG_VERIFY(pixelFormat)) {\n    [pixelFormat getValues:&depthBits forAttribute:NSOpenGLPFADepthSize forVirtualScreen:0];\n  } else {\n    Result::setResult(outResult, Result::Code::RuntimeError);\n    return nullptr;\n  }\n\n  if (depthBits == 0) {\n    Result::setOk(outResult);\n    return nullptr;\n  }\n\n  TextureFormat textureFormat(TextureFormat::Invalid);\n  switch (depthBits) {\n  case 16:\n    textureFormat = TextureFormat::Z_UNorm16;\n    break;\n  case 24:\n    textureFormat = TextureFormat::Z_UNorm24;\n    break;\n  case 32:\n    textureFormat = TextureFormat::Z_UNorm32;\n    break;\n  default:\n    Result::setResult(outResult, Result::Code::RuntimeError);\n    return nullptr;\n  }\n\n  const TextureDesc desc = {\n      .width = static_cast<uint32_t>(sizeInPixels.width),\n      .height = static_cast<uint32_t>(sizeInPixels.height),\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .usage = TextureDesc::TextureUsageBits::Attachment,\n      .numMipLevels = 1,\n      .type = TextureType::TwoD,\n      .format = textureFormat,\n  };\n  auto depthTexture = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n  depthTexture->create(desc, true);\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    depthTexture->initResourceTracker(resourceTracker);\n  }\n\n  Result::setOk(outResult);\n  return depthTexture;\n}\n\nSize PlatformDevice::getNativeDrawableSize(Result* outResult) {\n  Result::setOk(outResult);\n\n  if (drawableTexture_ == nullptr) {\n    return {0, 0};\n  }\n\n  return drawableTexture_->getSize();\n}\n\nstd::unique_ptr<ITexture> PlatformDevice::createTextureFromNativePixelBuffer(\n    const CVImageBufferRef& sourceImage,\n    const CVOpenGLTextureCacheRef& textureCache,\n    TextureDesc::TextureUsage usage,\n    Result* outResult) {\n  auto textureBuffer =\n      std::make_unique<TextureBuffer>(getContext(), sourceImage, textureCache, usage);\n  const auto result = textureBuffer->create();\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    textureBuffer->initResourceTracker(resourceTracker);\n  }\n  Result::setResult(outResult, result.code, result.message);\n  return textureBuffer;\n}\n\nTextureFormat PlatformDevice::getNativeDrawableTextureFormat(Result* outResult) {\n  Result::setOk(outResult);\n\n  return drawableTextureFormat_;\n}\n\nvoid PlatformDevice::setNativeDrawableTextureFormat(TextureFormat format, Result* outResult) {\n  Result::setOk(outResult);\n\n  drawableTextureFormat_ = format;\n}\n\nbool PlatformDevice::isType(PlatformDeviceType t) const noexcept {\n  return t == kType || opengl::PlatformDevice::isType(t);\n}\n\n} // namespace igl::opengl::macos\n"
  },
  {
    "path": "src/igl/opengl/macos/TextureBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <CoreVideo/CVOpenGLTextureCache.h>\n#include <CoreVideo/CVPixelBuffer.h>\n#include <igl/opengl/TextureBuffer.h>\n\nnamespace igl::opengl::macos {\n\n// @fb-only\nclass TextureBuffer final : public opengl::TextureBuffer {\n  using Super = opengl::TextureBuffer;\n  // @fb-only\n\n public:\n  TextureBuffer(IContext& context,\n                CVPixelBufferRef pixelBuffer,\n                CVOpenGLTextureCacheRef textureCache,\n                TextureDesc::TextureUsage usage = TextureDesc::TextureUsageBits::Sampled);\n  ~TextureBuffer() override;\n  TextureBuffer(const TextureBuffer&) = delete;\n  TextureBuffer& operator=(const TextureBuffer&) = delete;\n  TextureBuffer(TextureBuffer&&) = delete;\n  TextureBuffer& operator=(TextureBuffer&&) = delete;\n\n  // Disable those creation methods\n  Result create(const TextureDesc& desc, bool hasStorageAlready) override;\n\n  // This function is created to support wrapping an igl::ITexture container\n  // around a GL texture created from CVOpenGLTextureCacheCreateTextureFromImage()\n  Result create();\n\n  bool supportsUpload() const final;\n\n private:\n  Result uploadInternal(TextureType type,\n                        const TextureRangeDesc& range,\n                        const void* data,\n                        size_t bytesPerRow,\n                        const uint32_t* IGL_NULLABLE mipLevelBytes) const final;\n\n  CVOpenGLTextureRef cvTexture_ = nullptr;\n  CVPixelBufferRef pixelBuffer_ = nullptr;\n  CVOpenGLTextureCacheRef textureCache_ = nullptr;\n  bool uploaded_ = false;\n  bool created_ = false;\n};\n\n} // namespace igl::opengl::macos\n"
  },
  {
    "path": "src/igl/opengl/macos/TextureBuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/macos/TextureBuffer.h>\n\nnamespace igl::opengl::macos {\nnamespace {\nTextureFormat convertToTextureFormat(OSType pixelFormat) {\n  switch (pixelFormat) {\n  case kCVPixelFormatType_32BGRA:\n    return TextureFormat::RGBA_UNorm8;\n\n  case kCVPixelFormatType_OneComponent8:\n    return TextureFormat::R_UNorm8;\n\n  case kCVPixelFormatType_420YpCbCr8BiPlanarFullRange:\n  case kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange: {\n    // On the iOS side, there's a plane index which will cause this case to\n    // return different values based the index. On the MacOS side there does\n    // not appear to be an equivalent index, so we are really just assuming\n    // planeIndex == 0 here.\n    return TextureFormat::R_UNorm8;\n  }\n  default:\n    return TextureFormat::Invalid;\n  }\n}\n} // namespace\nTextureBuffer::TextureBuffer(IContext& context,\n                             CVPixelBufferRef pixelBuffer,\n                             CVOpenGLTextureCacheRef textureCache,\n                             TextureDesc::TextureUsage usage) :\n  Super(context, convertToTextureFormat(CVPixelBufferGetPixelFormatType(pixelBuffer))),\n  pixelBuffer_(CVPixelBufferRetain(pixelBuffer)),\n  textureCache_((CVOpenGLTextureCacheRef)CFRetain(textureCache)) {\n  setUsage(usage);\n}\n\nTextureBuffer::~TextureBuffer() {\n  if (textureCache_) {\n    CFRelease(textureCache_);\n  }\n  CVPixelBufferRelease(cvTexture_);\n  CVPixelBufferRelease(pixelBuffer_);\n\n  setTextureBufferProperties(0, 0);\n  setUsage(0);\n}\n\nResult TextureBuffer::create(const TextureDesc& /*desc*/, bool /*hasStorageAlready*/) {\n  return Result(Result::Code::Unsupported,\n                \"igl::opengl::macos::TextureBuffer does not support this creation\");\n}\n\nResult TextureBuffer::create() {\n  if (pixelBuffer_ == nullptr || textureCache_ == nullptr) {\n    return Result(Result::Code::ArgumentNull, \"PixelBuffer or TextureCache is NULL\");\n  }\n\n  if (created_) {\n    return Result(Result::Code::InvalidOperation,\n                  \"TextureBuffer has already been created with a pixelBuffer\");\n  }\n  created_ = true;\n\n  if (uploaded_) {\n    return Result();\n  }\n  uploaded_ = true;\n\n  if (!toFormatDescGL(getFormat(), TextureDesc::TextureUsageBits::Sampled, formatDescGL_)) {\n    return Result(Result::Code::ArgumentInvalid, \"Invalid texture format\");\n  }\n\n  const auto error = CVOpenGLTextureCacheCreateTextureFromImage(\n      kCFAllocatorDefault, textureCache_, pixelBuffer_, nullptr, &cvTexture_);\n  if (error != noErr) {\n    return Result(Result::Code::Unsupported, \"Failed to create CVOpenGLESTexture\");\n  }\n\n  setTextureProperties(static_cast<GLsizei>(CVPixelBufferGetWidth(pixelBuffer_)),\n                       static_cast<GLsizei>(CVPixelBufferGetHeight(pixelBuffer_)));\n\n  // Note that CVOpenGLTextureGetTarget(cvTexture_) returns GL_TEXTURE_RECTANGLE\n  // which is not something IGL explicitly supports.\n  setTextureBufferProperties(CVOpenGLTextureGetName(cvTexture_),\n                             CVOpenGLTextureGetTarget(cvTexture_));\n\n  return Result();\n}\n\nbool TextureBuffer::supportsUpload() const {\n  return false;\n}\n\nResult TextureBuffer::uploadInternal(TextureType /*type*/,\n                                     const TextureRangeDesc& /*range*/,\n                                     const void* /*data*/,\n                                     size_t /*bytesPerRow*/,\n                                     const uint32_t* IGL_NULLABLE /*mipLevelBytes*/) const {\n  return Result();\n}\n\n} // namespace igl::opengl::macos\n"
  },
  {
    "path": "src/igl/opengl/util/TextureFormat.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/util/TextureFormat.h>\n\nnamespace igl::opengl::util {\n\n// @fb-only\n// NOLINTBEGIN(readability-identifier-naming)\n/// OpenGL Constants\n#define GL_ALPHA 0x1906\n#define GL_ALPHA8 0x803C\n#define GL_BGR 0x80E0\n#define GL_BGRA 0x80E1\n#define GL_BGRA8_EXT 0x93A1\n#define GL_COMPRESSED_R11_EAC 0x9270\n#define GL_COMPRESSED_RG11_EAC 0x9272\n#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01\n#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00\n#define GL_COMPRESSED_RGB8_ETC2 0x9274\n#define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276\n#define GL_COMPRESSED_RGBA_ASTC_10x10_KHR 0x93BB\n#define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8\n#define GL_COMPRESSED_RGBA_ASTC_10x6_KHR 0x93B9\n#define GL_COMPRESSED_RGBA_ASTC_10x8_KHR 0x93BA\n#define GL_COMPRESSED_RGBA_ASTC_12x10_KHR 0x93BC\n#define GL_COMPRESSED_RGBA_ASTC_12x12_KHR 0x93BD\n#define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0\n#define GL_COMPRESSED_RGBA_ASTC_5x4_KHR 0x93B1\n#define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2\n#define GL_COMPRESSED_RGBA_ASTC_6x5_KHR 0x93B3\n#define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4\n#define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5\n#define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6\n#define GL_COMPRESSED_RGBA_ASTC_8x8_KHR 0x93B7\n#define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C\n#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03\n#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02\n#define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278\n#define GL_COMPRESSED_SIGNED_R11_EAC 0x9271\n#define GL_COMPRESSED_SIGNED_RG11_EAC 0x9273\n#define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR 0x93DB\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR 0x93D8\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR 0x93D9\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR 0x93DA\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR 0x93DC\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR 0x93DD\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR 0x93D0\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR 0x93D1\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR 0x93D2\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR 0x93D3\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR 0x93D4\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR 0x93D5\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR 0x93D6\n#define GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR 0x93D7\n#define GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC 0x9279\n#define GL_COMPRESSED_SRGB8_ETC2 0x9275\n#define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277\n#define GL_DEPTH_COMPONENT 0x1902\n#define GL_DEPTH_COMPONENT16 0x81a5\n#define GL_DEPTH_COMPONENT24 0x81A6\n#define GL_DEPTH_COMPONENT32 0x81A7\n#define GL_DEPTH_STENCIL 0x84F9\n#define GL_DEPTH24_STENCIL8 0x88F0\n#define GL_DEPTH32F_STENCIL8 0x8CAD\n#define GL_ETC1_RGB8_OES 0x8D64\n#define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD\n#define GL_HALF_FLOAT_OES 0x8D61\n#define GL_LUMINANCE 0x1909\n#define GL_LUMINANCE_ALPHA 0x190a\n#define GL_LUMINANCE8 0x8040\n#define GL_LUMINANCE8_ALPHA8 0x8045\n#define GL_R16 0x822A\n#define GL_R16F 0x822D\n#define GL_R16UI 0x8234\n#define GL_R32UI 0x8236\n#define GL_R32F 0x822E\n#define GL_RED 0x1903\n#define GL_RG 0x8227\n#define GL_RG16 0x822C\n#define GL_RG16F 0x822F\n#define GL_RG16UI 0x823a\n#define GL_RG32F 0x8230\n#define GL_RGB 0x1907\n#define GL_RGBA16 0x805B\n#define GL_RGB_RAW_422_APPLE 0x8A51\n#define GL_RGB10_A2 0x8059\n#define GL_RGB10_A2UI 0x906f\n#define GL_RGB16F 0x881B\n#define GL_RGB32F 0x8815\n#define GL_RGB5_A1 0x8057\n#define GL_RGBA 0x1908\n#define GL_RGBA16F 0x881A\n#define GL_RGBA32F 0x8814\n#define GL_RGBA32UI 0x8d70\n#define GL_RGBA4 0x8056\n#define GL_RGBA8 0x8058\n#define GL_SRGB_ALPHA 0x8c42\n#define GL_SRGB8_ALPHA8 0x8C43\n#define GL_STENCIL_INDEX 0x1901\n#define GL_STENCIL_INDEX8 0x8d48\n#define GL_UNSIGNED_BYTE 0x1401\n#define GL_UNSIGNED_INT 0x1405\n#define GL_UNSIGNED_INT_2_10_10_10_REV 0x8368\n#define GL_UNSIGNED_INT_24_8 0x84fa\n#define GL_UNSIGNED_INT_8_8_8_8_REV 0x8367\n#define GL_UNSIGNED_SHORT 0x1403\n#define GL_UNSIGNED_SHORT_5_5_5_1 0x8034\n#define GL_UNSIGNED_SHORT_5_6_5 0x8363\n#define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA\n#define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB\n// NOLINTEND(readability-identifier-naming)\n\n// NOLINTBEGIN(bugprone-easily-swappable-parameters)\nTextureFormat glTextureFormatToTextureFormat(int32_t glInternalFormat,\n                                             uint32_t glFormat,\n                                             uint32_t glType) {\n  // NOLINTEND(bugprone-easily-swappable-parameters)\n  switch (glInternalFormat) {\n  case GL_COMPRESSED_RGBA_ASTC_4x4_KHR:\n    return TextureFormat::RGBA_ASTC_4x4;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_4x4;\n\n  case GL_COMPRESSED_RGBA_ASTC_5x4_KHR:\n    return TextureFormat::RGBA_ASTC_5x4;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_5x4;\n\n  case GL_COMPRESSED_RGBA_ASTC_5x5_KHR:\n    return TextureFormat::RGBA_ASTC_5x5;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_5x5;\n\n  case GL_COMPRESSED_RGBA_ASTC_6x5_KHR:\n    return TextureFormat::RGBA_ASTC_6x5;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_6x5;\n\n  case GL_COMPRESSED_RGBA_ASTC_6x6_KHR:\n    return TextureFormat::RGBA_ASTC_6x6;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_6x6;\n\n  case GL_COMPRESSED_RGBA_ASTC_8x5_KHR:\n    return TextureFormat::RGBA_ASTC_8x5;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_8x5;\n\n  case GL_COMPRESSED_RGBA_ASTC_8x6_KHR:\n    return TextureFormat::RGBA_ASTC_8x6;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_8x6;\n\n  case GL_COMPRESSED_RGBA_ASTC_8x8_KHR:\n    return TextureFormat::RGBA_ASTC_8x8;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_8x8;\n\n  case GL_COMPRESSED_RGBA_ASTC_10x5_KHR:\n    return TextureFormat::RGBA_ASTC_10x5;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_10x5;\n\n  case GL_COMPRESSED_RGBA_ASTC_10x6_KHR:\n    return TextureFormat::RGBA_ASTC_10x6;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_10x6;\n\n  case GL_COMPRESSED_RGBA_ASTC_10x8_KHR:\n    return TextureFormat::RGBA_ASTC_10x8;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_10x8;\n\n  case GL_COMPRESSED_RGBA_ASTC_10x10_KHR:\n    return TextureFormat::RGBA_ASTC_10x10;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_10x10;\n\n  case GL_COMPRESSED_RGBA_ASTC_12x10_KHR:\n    return TextureFormat::RGBA_ASTC_12x10;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_12x10;\n\n  case GL_COMPRESSED_RGBA_ASTC_12x12_KHR:\n    return TextureFormat::RGBA_ASTC_12x12;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:\n    return TextureFormat::SRGB8_A8_ASTC_12x12;\n\n  case GL_COMPRESSED_RGBA_BPTC_UNORM:\n    return TextureFormat::RGBA_BC7_UNORM_4x4;\n\n  case GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM:\n    return TextureFormat::RGBA_BC7_SRGB_4x4;\n\n  case GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:\n    return TextureFormat::RGBA_PVRTC_2BPPV1;\n\n  case GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG:\n    return TextureFormat::RGB_PVRTC_2BPPV1;\n\n  case GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:\n    return TextureFormat::RGBA_PVRTC_4BPPV1;\n\n  case GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG:\n    return TextureFormat::RGB_PVRTC_4BPPV1;\n\n  case GL_ETC1_RGB8_OES:\n    return TextureFormat::RGB8_ETC1;\n\n  case GL_COMPRESSED_RGB8_ETC2:\n    return TextureFormat::RGB8_ETC2;\n\n  case GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:\n    return TextureFormat::RGB8_Punchthrough_A1_ETC2;\n\n  case GL_COMPRESSED_RGBA8_ETC2_EAC:\n    return TextureFormat::RGBA8_EAC_ETC2;\n\n  case GL_COMPRESSED_R11_EAC:\n    return TextureFormat::R_EAC_UNorm;\n\n  case GL_COMPRESSED_SIGNED_R11_EAC:\n    return TextureFormat::R_EAC_SNorm;\n\n  case GL_COMPRESSED_RG11_EAC:\n    return TextureFormat::RG_EAC_UNorm;\n\n  case GL_COMPRESSED_SIGNED_RG11_EAC:\n    return TextureFormat::RG_EAC_SNorm;\n\n  case GL_COMPRESSED_SRGB8_ETC2:\n    return TextureFormat::SRGB8_ETC2;\n\n  case GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:\n    return TextureFormat::SRGB8_A8_EAC_ETC2;\n\n  case GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:\n    return TextureFormat::SRGB8_Punchthrough_A1_ETC2;\n\n  case GL_RED:\n    if (glFormat == GL_RED) {\n      if (glType == GL_UNSIGNED_BYTE) {\n        return TextureFormat::R_UNorm8;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  case GL_RG:\n    if (glFormat == GL_RG) {\n      if (glType == GL_UNSIGNED_BYTE) {\n        return TextureFormat::RG_UNorm8;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  case GL_RGB:\n    if (glFormat == GL_RGB) {\n      if (glType == GL_UNSIGNED_BYTE) {\n        return TextureFormat::RGBX_UNorm8;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  case GL_BGR:\n    if (glFormat == GL_BGR) {\n      if (glType == GL_UNSIGNED_SHORT_5_6_5) {\n        return TextureFormat::B5G6R5_UNorm;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  case GL_RGBA:\n    if (glFormat == GL_RGBA) {\n      if (glType == GL_UNSIGNED_BYTE) {\n        return TextureFormat::RGBA_UNorm8;\n      } else if (glType == GL_UNSIGNED_SHORT_5_5_5_1) {\n        return TextureFormat::R5G5B5A1_UNorm;\n      } else if (glType == GL_HALF_FLOAT_OES) {\n        return TextureFormat::RGBA_F16;\n      } else if (glType == GL_UNSIGNED_INT_8_8_8_8_REV) {\n        return TextureFormat::BGRA_UNorm8_Rev;\n      } else if (glType == GL_UNSIGNED_INT_2_10_10_10_REV) {\n        return TextureFormat::RGB10_A2_UNorm_Rev;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  case GL_RGBA8:\n    return TextureFormat::RGBA_UNorm8;\n\n  case GL_SRGB_ALPHA:\n  case GL_SRGB8_ALPHA8:\n    if (glFormat == GL_BGRA) {\n      return TextureFormat::BGRA_SRGB;\n    } else {\n      return TextureFormat::RGBA_SRGB;\n    }\n\n  case GL_RGB5_A1:\n    return TextureFormat::R5G5B5A1_UNorm;\n\n  case GL_RGB10_A2UI:\n    return TextureFormat::RGB10_A2_Uint_Rev;\n\n  case GL_RGB10_A2:\n    if (glFormat == GL_BGRA) {\n      return TextureFormat::BGR10_A2_Unorm;\n    } else {\n      return TextureFormat::RGB10_A2_UNorm_Rev;\n    }\n\n  case GL_LUMINANCE_ALPHA:\n  case GL_LUMINANCE8_ALPHA8:\n    return TextureFormat::LA_UNorm8;\n\n  case GL_LUMINANCE8:\n  case GL_LUMINANCE:\n    return TextureFormat::L_UNorm8;\n\n  case GL_BGRA8_EXT:\n    return TextureFormat::BGRA_UNorm8;\n\n  case GL_BGRA:\n    if (glFormat == GL_BGRA) {\n      if (glType == GL_UNSIGNED_BYTE) {\n        return TextureFormat::BGRA_UNorm8;\n      } else if (glType == GL_UNSIGNED_SHORT_5_5_5_1) {\n        return TextureFormat::B5G5R5A1_UNorm;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  case GL_RGBA4:\n    return TextureFormat::ABGR_UNorm4;\n\n  case GL_ALPHA8:\n    return TextureFormat::A_UNorm8;\n\n  case GL_ALPHA:\n    if (glFormat == GL_ALPHA) {\n      if (glType == GL_UNSIGNED_BYTE) {\n        // When GL_ALPHA is not supported (eg. desktop gl3) and A_UNorm8 is returned from this\n        // method, an igl texture will get created with GL_Red and swizzled to the alpha instead of\n        // GL_ALPHA\n        return TextureFormat::A_UNorm8;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  case GL_R16:\n    return TextureFormat::R_UNorm16;\n\n  case GL_R16F:\n    return TextureFormat::R_F16;\n\n  case GL_R32F:\n    return TextureFormat::R_F32;\n\n  case GL_R16UI:\n    return TextureFormat::R_UInt16;\n\n  case GL_R32UI:\n    return TextureFormat::R_UInt32;\n\n  case GL_RG16:\n    return TextureFormat::RG_UNorm16;\n\n  case GL_RGBA16:\n    return TextureFormat::RGBA_UNorm16;\n\n  case GL_RG16F:\n    return TextureFormat::RG_F16;\n\n  case GL_RG16UI:\n    return TextureFormat::RG_UInt16;\n\n  case GL_RG32F:\n    return TextureFormat::RG_F32;\n\n  case GL_RGB_RAW_422_APPLE:\n    if (glType == GL_UNSIGNED_SHORT_8_8_APPLE) {\n      return TextureFormat::R4G2B2_UNorm_Apple;\n    } else if (glType == GL_UNSIGNED_SHORT_8_8_REV_APPLE) {\n      return TextureFormat::R4G2B2_UNorm_Rev_Apple;\n    }\n    return TextureFormat::Invalid;\n\n  case GL_RGB16F:\n    return TextureFormat::RGB_F16;\n\n  case GL_RGBA16F:\n    return TextureFormat::RGBA_F16;\n\n  case GL_RGB32F:\n    return TextureFormat::RGB_F32;\n\n  case GL_RGBA32F:\n    return TextureFormat::RGBA_F32;\n\n  case GL_RGBA32UI:\n    return TextureFormat::RGBA_UInt32;\n\n  case GL_DEPTH_COMPONENT:\n    if (glFormat == GL_DEPTH_COMPONENT) {\n      if (glType == GL_UNSIGNED_SHORT) {\n        return TextureFormat::Z_UNorm16;\n      } else if (glType == GL_UNSIGNED_INT) {\n        return TextureFormat::Z_UNorm32;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  case GL_DEPTH_COMPONENT16:\n    return TextureFormat::Z_UNorm16;\n\n  case GL_DEPTH_COMPONENT24:\n    return TextureFormat::Z_UNorm24;\n\n  case GL_DEPTH_COMPONENT32:\n    return TextureFormat::Z_UNorm32;\n\n  case GL_DEPTH_STENCIL:\n    if (glFormat == GL_DEPTH_STENCIL) {\n      if (glType == GL_FLOAT_32_UNSIGNED_INT_24_8_REV) {\n        return TextureFormat::S8_UInt_Z32_UNorm;\n      } else if (glType == GL_UNSIGNED_INT_24_8) {\n        return TextureFormat::S8_UInt_Z24_UNorm;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  case GL_DEPTH32F_STENCIL8:\n    // TODO: Fix this once we properly support 32F depth formats\n    return TextureFormat::S8_UInt_Z32_UNorm;\n\n  case GL_DEPTH24_STENCIL8:\n    return TextureFormat::S8_UInt_Z24_UNorm;\n\n  case GL_STENCIL_INDEX8:\n    return TextureFormat::S_UInt8;\n\n  case GL_STENCIL_INDEX:\n    if (glFormat == GL_STENCIL_INDEX) {\n      if (glType == GL_UNSIGNED_BYTE) {\n        return TextureFormat::S_UInt8;\n      }\n    }\n    return TextureFormat::Invalid;\n\n  default:\n    return TextureFormat::Invalid;\n  }\n  IGL_UNREACHABLE_RETURN(TextureFormat::Invalid)\n}\n\n} // namespace igl::opengl::util\n"
  },
  {
    "path": "src/igl/opengl/util/TextureFormat.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <igl/TextureFormat.h>\n\nnamespace igl::opengl::util {\n\n/// Converts an OpenGL texture format to an IGL TextureFormat.\n/// @param glInternalFormat The OpenGL internal format. Always required.\n/// @param glFormat The type of the external OpenGL format. Only required to differentiate between\n/// generic (unsized) internal formats.\n/// @param glType The data type of the external OpenGL format. Only required to differentiate\n/// between generic (unsized) internal formats.\n/// @return The corresponding IGL format if known; otherwise returns TextureFormat::Invalid.\nTextureFormat glTextureFormatToTextureFormat(int32_t glInternalFormat,\n                                             uint32_t glFormat = 0,\n                                             uint32_t glType = 0);\n\n} // namespace igl::opengl::util\n"
  },
  {
    "path": "src/igl/opengl/webgl/Context.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/opengl/webgl/Context.h>\n\n#include <igl/opengl/Texture.h>\n\nnamespace igl::opengl::webgl {\n\nContext::Context(const char* canvasName) :\n  Context({.flavor = BackendFlavor::OpenGL_ES, .majorVersion = 3, .minorVersion = 0}, canvasName) {}\n\nContext::Context(BackendVersion backendVersion, const char* canvasName) : canvasName_(canvasName) {\n  IGL_DEBUG_ASSERT(backendVersion.flavor == BackendFlavor::OpenGL_ES);\n  IGL_DEBUG_ASSERT(backendVersion.majorVersion == 3 || backendVersion.majorVersion == 2);\n  IGL_DEBUG_ASSERT(backendVersion.minorVersion == 0);\n  EmscriptenWebGLContextAttributes attrs;\n  emscripten_webgl_init_context_attributes(&attrs);\n  attrs.majorVersion = backendversion.majorVersion - 1;\n  attrs.minorVersion = 0;\n  attrs.premultipliedAlpha = false;\n  attrs.alpha = false;\n  attrs.powerPreference = EM_WEBGL_POWER_PREFERENCE_DEFAULT;\n  initialize(attrs, canvasName, -1, -1);\n}\n\nContext::Context(EmscriptenWebGLContextAttributes& attributes,\n                 const char* canvasName,\n                 int width,\n                 int height) :\n  canvasName_(canvasName) {\n  initialize(attributes, canvasName, width, height);\n}\n\nvoid Context::initialize(EmscriptenWebGLContextAttributes& attributes,\n                         const char* canvasName,\n                         int width,\n                         int height) {\n  context_ = emscripten_webgl_create_context(canvasName, &attributes);\n  if (width > 0 && height > 0) {\n    setCanvasBufferSize(width, height);\n  }\n  if (context_) {\n    IContext::registerContext((void*)context_, this);\n    setCurrent();\n\n    igl::Result result;\n    // Initialize through base class.\n    IContext::initialize(&result);\n    IGL_DEBUG_ASSERT(result.isOk());\n  }\n}\n\nContext::~Context() {\n  willDestroy((void*)context_);\n  emscripten_webgl_destroy_context(context_);\n}\nvoid Context::setCurrent() {\n  emscripten_webgl_make_context_current(context_);\n}\n\nvoid Context::clearCurrentContext() const {\n  // Intentionally does nothing. No such option on WebGL\n}\n\nbool Context::isCurrentContext() const {\n  return emscripten_webgl_get_current_context() == context_;\n}\n\nbool Context::isCurrentSharegroup() const {\n  return true;\n}\n\nstd::unique_ptr<IContext> Context::createShareContext(Result* outResult) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  Result::setResult(outResult, Result::Code::Unimplemented, \"Implement as needed\");\n  return nullptr;\n}\n\nvoid Context::setCanvasBufferSize(int width, int height) {\n  auto result = emscripten_set_canvas_element_size(canvasName_.c_str(), width, height);\n  if (result != EMSCRIPTEN_RESULT_SUCCESS) {\n    printf(\"emscripten_set_canvas_element_size failed: %d\\n\", result);\n  }\n}\n\nvoid Context::present(std::shared_ptr<ITexture> surface) const {\n  emscripten_webgl_commit_frame();\n}\n\n} // namespace igl::opengl::webgl\n"
  },
  {
    "path": "src/igl/opengl/webgl/Context.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#ifndef __EMSCRIPTEN__\n#error \"Platform not supported\"\n#endif\n\n#include <emscripten.h>\n#include <emscripten/html5.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl {\nclass ITexture;\nnamespace opengl::webgl {\n\nclass Context final : public ::igl::opengl::IContext {\n public:\n  explicit Context(const char* canvasName = \"#canvas\");\n  explicit Context(BackendVersion backendVersion, const char* canvasName = \"#canvas\");\n  Context(EmscriptenWebGLContextAttributes& attributes,\n          const char* canvasName = \"#canvas\",\n          int width = -1,\n          int height = -1);\n  ~Context() override;\n  void setCurrent() override;\n  void clearCurrentContext() const override;\n  bool isCurrentContext() const override;\n  bool isCurrentSharegroup() const override;\n  void present(std::shared_ptr<ITexture> surface) const override;\n\n  /// Creates a shared context, matching format based on the current context.\n  std::unique_ptr<IContext> createShareContext(Result* outResult) override;\n\n  void setCanvasBufferSize(int width, int height);\n\n  EMSCRIPTEN_WEBGL_CONTEXT_HANDLE getWebGLContext() const {\n    return context_;\n  }\n\n private:\n  void initialize(EmscriptenWebGLContextAttributes& attributes,\n                  const char* canvasName,\n                  int width = -1,\n                  int height = -1);\n\n  EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context_;\n  std::string canvasName_;\n};\n\n} // namespace opengl::webgl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/webgl/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/opengl/webgl/Device.h>\n\n#include <igl/Common.h>\n#include <igl/opengl/webgl/Context.h>\n\nnamespace igl::opengl::webgl {\n\nDevice::Device(std::unique_ptr<IContext> context) :\n  opengl::Device(std::move(context)), platformDevice_(*this) {}\n\nconst PlatformDevice& Device::getPlatformDevice() const noexcept {\n  return platformDevice_;\n}\n\nDevice::~Device() = default;\n\n} // namespace igl::opengl::webgl\n"
  },
  {
    "path": "src/igl/opengl/webgl/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#ifndef __EMSCRIPTEN__\n#error \"Platform not supported\"\n#endif\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/webgl/PlatformDevice.h>\n\nnamespace igl::opengl::webgl {\n\nclass Device final : public ::igl::opengl::Device {\n public:\n  explicit Device(std::unique_ptr<IContext> context);\n  ~Device() override;\n\n  const PlatformDevice& getPlatformDevice() const noexcept override;\n\n private:\n  PlatformDevice platformDevice_;\n};\n\n} // namespace igl::opengl::webgl\n"
  },
  {
    "path": "src/igl/opengl/webgl/HWDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/opengl/webgl/HWDevice.h>\n\n#include <igl/opengl/webgl/Context.h>\n#include <igl/opengl/webgl/Device.h>\n\nnamespace igl::opengl::webgl {\n\nstd::unique_ptr<IContext> HWDevice::createContext(Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>();\n}\n\nstd::unique_ptr<IContext> HWDevice::createContext(BackendVersion backendVersion,\n                                                  EGLNativeWindowType /*nativeWindow*/,\n                                                  Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>(backendVersion);\n}\n\nstd::unique_ptr<opengl::Device> HWDevice::createWithContext(std::unique_ptr<IContext> context,\n                                                            Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<opengl::webgl::Device>(std::move(context));\n}\n\n} // namespace igl::opengl::webgl\n"
  },
  {
    "path": "src/igl/opengl/webgl/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#ifndef __EMSCRIPTEN__\n#error \"Platform not supported\"\n#endif\n\n#include <igl/opengl/HWDevice.h>\n\nnamespace igl::opengl::webgl {\n\nclass HWDevice final : public ::igl::opengl::HWDevice {\n public:\n  ///--------------------------------------\n  /// MARK: - opengl::HWDevice\n\n  std::unique_ptr<IContext> createContext(Result* outResult) const override;\n\n  std::unique_ptr<IContext> createContext(BackendVersion backendVersion,\n                                          EGLNativeWindowType nativeWindow,\n                                          Result* outResult) const override;\n\n  std::unique_ptr<opengl::Device> createWithContext(std::unique_ptr<IContext> context,\n                                                    Result* outResult) const override;\n};\n\n} // namespace igl::opengl::webgl\n"
  },
  {
    "path": "src/igl/opengl/webgl/PlatformDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/opengl/webgl/PlatformDevice.h>\n\n#include <igl/opengl/TextureBuffer.h>\n#include <igl/opengl/ViewTextureTarget.h>\n#include <igl/opengl/webgl/Context.h>\n#include <igl/opengl/webgl/Device.h>\n\nnamespace igl::opengl::webgl {\n\nPlatformDevice::PlatformDevice(Device& owner) : opengl::PlatformDevice(owner) {}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(int width,\n                                                                          int height,\n                                                                          Result* outResult) {\n  if (drawableTexture_ && drawableTexture_->getWidth() == width &&\n      drawableTexture_->getHeight() == height) {\n    return drawableTexture_;\n  }\n\n  auto context = static_cast<igl::opengl::webgl::Context*>(&getContext());\n  context->setCanvasBufferSize(width, height);\n\n  TextureDesc desc = {static_cast<size_t>(width),\n                      static_cast<size_t>(height),\n                      1, // depth\n                      1, // numLayers\n                      1, // numSamples\n                      TextureDesc::TextureUsageBits::Attachment,\n                      1, // numMipLevels\n                      TextureType::TwoD,\n                      TextureFormat::RGBA_UNorm8};\n  drawableTexture_ = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n\n  Result result = drawableTexture_->create(desc, true);\n  if (outResult) {\n    *outResult = result;\n  }\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    drawableTexture_->initResourceTracker(resourceTracker);\n  }\n  return drawableTexture_;\n}\n\nbool PlatformDevice::isType(PlatformDeviceType t) const noexcept {\n  return t == kType || opengl::PlatformDevice::isType(t);\n}\n\n} // namespace igl::opengl::webgl\n"
  },
  {
    "path": "src/igl/opengl/webgl/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#pragma once\n\n#ifndef __EMSCRIPTEN__\n#error \"Platform not supported\"\n#endif\n\n#include <igl/Texture.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/PlatformDevice.h>\n\nnamespace igl::opengl {\n\nclass ViewTextureTarget;\n\nnamespace webgl {\n\nclass Device;\nclass Context;\n\nclass PlatformDevice : public opengl::PlatformDevice {\n public:\n  static constexpr igl::PlatformDeviceType kType = igl::PlatformDeviceType::OpenGLWebGL;\n\n  PlatformDevice(Device& owner);\n  ~PlatformDevice() override = default;\n\n  /// Returns a texture representing the EGL Surface associated with this device's context.\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(int width,\n                                                            int height,\n                                                            Result* outResult);\n\n protected:\n  bool isType(PlatformDeviceType t) const noexcept override;\n\n private:\n  std::shared_ptr<ViewTextureTarget> drawableTexture_;\n};\n\n} // namespace webgl\n} // namespace igl::opengl\n"
  },
  {
    "path": "src/igl/opengl/wgl/Context.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n\n#include <igl/opengl/wgl/Context.h>\n\n#include <igl/opengl/Texture.h>\n\n#if !defined(WIN32_LEAN_AND_MEAN)\n#define WIN32_LEAN_AND_MEAN\n#endif\n#if !defined(NOMINMAX)\n#define NOMINMAX\n#endif // !defined(NOMINMAX)\n#include <windows.h>\n#ifdef DISABLE_WGL_VSYNC\n#include <GL/wglext.h>\n#endif\n\n#if defined(IGL_WITH_TRACY_GPU)\n#include \"tracy/TracyOpenGL.hpp\"\n#endif\n\nnamespace igl::opengl::wgl {\n\nContext::Context() : contextOwned_(true) {\n  // This ctor path will own the wgl render context. Therefore creation to the window, DC & render\n  // context must be done and in sequence. Creating a dummy window is necessary to get the device\n  // context. We let wgl choose the appropriate pixel format for us to retrieve the valid render\n  // context after setting up the correct pixel format. Until then, we can properly create the right\n  // render context.\n\n  WNDCLASSA window_class = {};\n  window_class.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;\n  window_class.cbClsExtra = window_class.cbWndExtra = 0;\n  window_class.lpfnWndProc = DefWindowProcA;\n  window_class.hInstance = GetModuleHandle(nullptr);\n  window_class.hIcon = nullptr;\n  window_class.hCursor = nullptr;\n  window_class.hbrBackground = nullptr;\n  window_class.lpszClassName = \"Dummy_WGL\";\n\n  if (!RegisterClassA(&window_class)) {\n    auto lastError = GetLastError();\n    if (lastError != ERROR_CLASS_ALREADY_EXISTS) {\n      IGL_DEBUG_ABORT(\"[IGL] WGL error 0x%08X:\\n\", GetLastError());\n    }\n  }\n\n  dummyWindow_ = CreateWindowExA(0,\n                                 window_class.lpszClassName,\n                                 \"Dummy OpenGL Window\",\n                                 0,\n                                 CW_USEDEFAULT,\n                                 CW_USEDEFAULT,\n                                 CW_USEDEFAULT,\n                                 CW_USEDEFAULT,\n                                 nullptr,\n                                 nullptr,\n                                 window_class.hInstance,\n                                 nullptr);\n\n  IGL_DEBUG_ASSERT(dummyWindow_ != nullptr,\n                   \"[IGL] Failed to create dummy OpenGL window. WGL error 0x%08X:\\n\",\n                   GetLastError());\n\n  deviceContext_ = GetDC(dummyWindow_);\n\n  PIXELFORMATDESCRIPTOR pfd;\n  pfd.nSize = sizeof(pfd);\n  pfd.nVersion = 1;\n  pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;\n  pfd.iPixelType = PFD_TYPE_RGBA;\n  pfd.cColorBits = 32;\n  pfd.cAlphaBits = 8;\n  pfd.cDepthBits = 24;\n  pfd.cStencilBits = 8;\n  pfd.iLayerType = PFD_MAIN_PLANE;\n\n  int pixel_format = ChoosePixelFormat(deviceContext_, &pfd);\n  IGL_DEBUG_ASSERT(pixel_format != 0,\n                   \"[IGL] Failed to find a suitable pixel format. WGL error 0x%08X:\\n\",\n                   GetLastError());\n\n  if (!SetPixelFormat(deviceContext_, pixel_format, &pfd)) {\n    IGL_DEBUG_ABORT(\"[IGL] Failed to set the pixel format. WGL error 0x%08X:\\n\", GetLastError());\n  }\n\n  renderContext_ = wglCreateContext(deviceContext_);\n  if (!renderContext_) {\n    IGL_DEBUG_ABORT(\"[IGL] Failed to create a dummy OpenGL rendering context. WGL error 0x%08X:\\n\",\n                    GetLastError());\n  }\n\n  IContext::registerContext((void*)renderContext_, this);\n\n  // Set current, since creation doesn't really mean it's current yet.\n  setCurrent();\n\n  // Init WGL, we need to initialize this first before running any GL calls\n  glewInit();\n\n  igl::Result result;\n  // Initialize through base class.\n  initialize(&result);\n  IGL_DEBUG_ASSERT(result.isOk());\n}\n\nContext::Context(HDC deviceContext, HGLRC renderContext) :\n  contextOwned_(false), deviceContext_(deviceContext), renderContext_(renderContext) {\n  IContext::registerContext((void*)renderContext_, this);\n\n  // Set current, since creation doesn't really mean it's current yet.\n  setCurrent();\n\n  // Init WGL, we need to initialize this first before running any GL calls\n  glewInit();\n\n  igl::Result result;\n  // Initialize through base class.\n  initialize(&result);\n  IGL_DEBUG_ASSERT(result.isOk());\n}\n\nContext::Context(HDC deviceContext, HGLRC renderContext, std::vector<HGLRC> shareContexts) :\n  contextOwned_(false),\n  deviceContext_(deviceContext),\n  renderContext_(renderContext),\n  sharegroup_(shareContexts) {\n  IContext::registerContext((void*)renderContext_, this);\n\n  // Set current, since creation doesn't really mean it's current yet.\n  setCurrent();\n\n  // Init WGL, we need to initialize this first before running any GL calls\n  glewInit();\n\n  igl::Result result;\n  // Initialize through base class.\n  initialize(&result);\n  IGL_DEBUG_ASSERT(result.isOk());\n}\n\nContext::~Context() {\n  // Clear pool explicitly, since it might have reference back to IContext.\n  getAdapterPool().clear();\n  getComputeAdapterPool().clear();\n\n  // Unregister wglContext\n  IContext::unregisterContext(renderContext_);\n\n  if (contextOwned_) {\n    wglMakeCurrent(deviceContext_, nullptr);\n    wglDeleteContext(renderContext_);\n    ReleaseDC(dummyWindow_, deviceContext_);\n    DestroyWindow(dummyWindow_);\n  }\n}\n\nvoid Context::setCurrent() {\n  if (!wglMakeCurrent(deviceContext_, renderContext_)) {\n    IGL_DEBUG_ABORT(\"[IGL] Failed to activate OpenGL render context. WGL error 0x%08X:\\n\",\n                    GetLastError());\n  }\n  flushDeletionQueue();\n\n#ifdef DISABLE_WGL_VSYNC\n  static PFNWGLSWAPINTERVALEXTPROC wglSwapIntervalEXT =\n      (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress(\"wglSwapIntervalEXT\");\n  if (IGL_DEBUG_VERIFY(wglSwapIntervalEXT)) {\n    wglSwapIntervalEXT(0);\n  }\n#endif\n}\n\nvoid Context::clearCurrentContext() const {\n  if (!wglMakeCurrent(nullptr, nullptr)) {\n    IGL_DEBUG_ABORT(\"[IGL] Failed to clear OpenGL render context. WGL error 0x%08X:\\n\",\n                    GetLastError());\n  }\n}\n\nbool Context::isCurrentContext() const {\n  return wglGetCurrentContext() == renderContext_;\n}\n\nbool Context::isCurrentSharegroup() const {\n  auto it = std::find(sharegroup_.begin(), sharegroup_.end(), wglGetCurrentContext());\n  return it != sharegroup_.end();\n}\n\nvoid Context::present(std::shared_ptr<ITexture> surface) const {\n  SwapBuffers(deviceContext_);\n  wglMakeCurrent(deviceContext_, renderContext_);\n\n#if defined(IGL_WITH_TRACY_GPU)\n  TracyGpuCollect;\n#endif\n}\n\nstd::unique_ptr<IContext> Context::createShareContext(Result* outResult) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  Result::setResult(outResult, Result::Code::Unimplemented, \"Implement as needed\");\n  return nullptr;\n}\n\n} // namespace igl::opengl::wgl\n"
  },
  {
    "path": "src/igl/opengl/wgl/Context.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#include <windows.h>\n\nnamespace igl {\nclass ITexture;\nnamespace opengl {\nnamespace wgl {\n\nclass Context : public IContext {\n public:\n  /// Create a new context for current device context.\n  Context();\n  /// Create a new context from a given device and render contexts.\n  Context(HDC deviceContext, HGLRC renderContext);\n  /// Create a new context with existing HGLRC and share contexts the share context's\n  /// must be setup ahead of calling this constructor. (eg. via QOpenGLContext->setShareContext) and\n  /// should not be modified during the existence of this IContext\n  Context(HDC deviceContext, HGLRC renderContext, std::vector<HGLRC> shareContexts);\n\n  ~Context() override;\n\n  void setCurrent() override;\n  void clearCurrentContext() const override;\n  bool isCurrentContext() const override;\n  bool isCurrentSharegroup() const override;\n  void present(std::shared_ptr<ITexture> surface) const override;\n\n  /// Creates a shared context, matching format based on the current context.\n  std::unique_ptr<IContext> createShareContext(Result* outResult) override;\n\n  HDC getDeviceContext() const {\n    return deviceContext_;\n  }\n\n  HGLRC getRenderContext() const {\n    return renderContext_;\n  }\n\n private:\n  const bool contextOwned_ = false;\n  HDC deviceContext_;\n  HGLRC renderContext_;\n  HWND dummyWindow_;\n  std::vector<HGLRC> sharegroup_;\n};\n\n} // namespace wgl\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/wgl/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/opengl/wgl/Device.h>\n\n#include <igl/Common.h>\n#include <igl/opengl/wgl/Context.h>\n\nnamespace igl {\nnamespace opengl {\nnamespace wgl {\n\nDevice::Device(std::unique_ptr<IContext> context) :\n  opengl::Device(std::move(context)), platformDevice_(*this) {}\n\nconst PlatformDevice& Device::getPlatformDevice() const noexcept {\n  return platformDevice_;\n}\n\nDevice::~Device() = default;\n\n} // namespace wgl\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/wgl/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/wgl/PlatformDevice.h>\n\nnamespace igl {\nnamespace opengl {\nnamespace wgl {\n\nclass Device final : public igl::opengl::Device {\n public:\n  explicit Device(std::unique_ptr<IContext> context);\n  ~Device() override;\n\n  const PlatformDevice& getPlatformDevice() const noexcept override;\n\n protected:\n  PlatformDevice platformDevice_;\n};\n\n} // namespace wgl\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/wgl/HWDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"HWDevice.h\"\n\n#include <igl/opengl/wgl/Context.h>\n#include <igl/opengl/wgl/Device.h>\n\nnamespace igl::opengl::wgl {\n\nstd::unique_ptr<IContext> HWDevice::createContext(Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>();\n}\n\nstd::unique_ptr<IContext> HWDevice::createContext([[maybe_unused]] BackendVersion backendVersion,\n                                                  EGLNativeWindowType /*nativeWindow*/,\n                                                  Result* outResult) const {\n  IGL_DEBUG_ASSERT(backendVersion.flavor == BackendFlavor::OpenGL);\n  return createContext(outResult);\n}\n\nstd::unique_ptr<IContext> HWDevice::createOffscreenContext(size_t width,\n                                                           size_t height,\n                                                           Result* outResult) const {\n  Result::setOk(outResult);\n  return std::make_unique<Context>();\n}\n\nstd::unique_ptr<opengl::Device> HWDevice::createWithContext(std::unique_ptr<IContext> context,\n                                                            Result* outResult) const {\n  if (context) {\n    Result::setOk(outResult);\n    return std::make_unique<opengl::wgl::Device>(std::move(context));\n  } else {\n    Result::setResult(outResult, Result::Code::ArgumentNull);\n    return nullptr;\n  }\n}\n\n} // namespace igl::opengl::wgl\n"
  },
  {
    "path": "src/igl/opengl/wgl/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/opengl/HWDevice.h>\n\nnamespace igl::opengl::wgl {\n\nclass HWDevice final : public ::igl::opengl::HWDevice {\n public:\n  ///--------------------------------------\n  /// MARK: - opengl::HWDevice\n\n  std::unique_ptr<IContext> createContext(Result* outResult) const override;\n\n  std::unique_ptr<IContext> createContext(BackendVersion backendVersion,\n                                          EGLNativeWindowType nativeWindow,\n                                          Result* outResult) const override;\n\n  std::unique_ptr<IContext> createOffscreenContext(size_t width,\n                                                   size_t height,\n                                                   Result* outResult) const;\n  std::unique_ptr<opengl::Device> createWithContext(std::unique_ptr<IContext> context,\n                                                    Result* outResult) const override;\n};\n\n} // namespace igl::opengl::wgl\n"
  },
  {
    "path": "src/igl/opengl/wgl/PlatformDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n// @fb-only\n\n#include <igl/opengl/wgl/PlatformDevice.h>\n\n#include <igl/opengl/TextureBuffer.h>\n#include <igl/opengl/ViewTextureTarget.h>\n#include <igl/opengl/wgl/Context.h>\n#include <igl/opengl/wgl/Device.h>\n\nnamespace igl {\nnamespace opengl {\nnamespace wgl {\n\nPlatformDevice::PlatformDevice(Device& owner) : opengl::PlatformDevice(owner) {}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(Result* outResult) {\n  RECT curDimension;\n\n  auto context = static_cast<Context*>(getSharedContext().get());\n  if (context == nullptr) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No WGL context found!\");\n    return nullptr;\n  }\n\n  GetClientRect(WindowFromDC(context->getDeviceContext()), &curDimension);\n\n  if (drawableTexture_ && EqualRect(&dimension_, &curDimension)) {\n    return drawableTexture_;\n  }\n\n  CopyRect(&dimension_, &curDimension);\n\n  const auto desc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                       (size_t)(dimension_.right - dimension_.left),\n                                       (size_t)(dimension_.bottom - dimension_.top),\n                                       TextureDesc::TextureUsageBits::Attachment,\n                                       \"NativeDrawable\");\n  auto texture = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n\n  Result subResult = texture->create(desc, true);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n  drawableTexture_ = std::move(texture);\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    drawableTexture_->initResourceTracker(resourceTracker);\n  }\n\n  return drawableTexture_;\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDepth(int width,\n                                                                       int height,\n                                                                       Result* outResult) {\n  if (drawableTexture_ && drawableTexture_->getWidth() == width &&\n      drawableTexture_->getHeight() == height) {\n    Result::setResult(outResult, Result::Code::Ok);\n    return drawableTexture_;\n  }\n\n  // generate depth with new width and height\n  auto context = static_cast<Context*>(getSharedContext().get());\n  if (!context) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"No EGL context found!\");\n    return nullptr;\n  }\n\n  const auto desc = TextureDesc::new2D(TextureFormat::S8_UInt_Z24_UNorm,\n                                       static_cast<size_t>(width),\n                                       static_cast<size_t>(height),\n                                       TextureDesc::TextureUsageBits::Attachment,\n                                       \"NativeDepth\");\n\n  auto texture = std::make_shared<ViewTextureTarget>(getContext(), desc.format);\n  IGL_DEBUG_ASSERT(texture);\n  const Result subResult = texture->create(desc, true);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n\n  if (auto resourceTracker = owner_.getResourceTracker()) {\n    texture->initResourceTracker(resourceTracker);\n  }\n\n  return texture;\n}\n\nbool PlatformDevice::isType(PlatformDeviceType t) const noexcept {\n  return t == Type || opengl::PlatformDevice::isType(t);\n}\n\n} // namespace wgl\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/opengl/wgl/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Texture.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/PlatformDevice.h>\n#if IGL_PLATFORM_WINDOWS\n#include <windows.h>\n#endif\n\nnamespace igl {\nnamespace opengl {\n\nclass ViewTextureTarget;\n\nnamespace wgl {\n\nclass Device;\nclass Context;\n\nclass PlatformDevice : public opengl::PlatformDevice {\n public:\n  static constexpr igl::PlatformDeviceType Type = igl::PlatformDeviceType::OpenGLWgl;\n\n  PlatformDevice(Device& owner);\n  ~PlatformDevice() override = default;\n\n  /// Returns a texture representing the WGL Surface associated with this device's context.\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(Result* outResult);\n  std::shared_ptr<ITexture> createTextureFromNativeDepth(int width, int height, Result* outResult);\n\n protected:\n  bool isType(PlatformDeviceType t) const noexcept override;\n\n private:\n  std::shared_ptr<ViewTextureTarget> drawableTexture_;\n  RECT dimension_;\n};\n\n} // namespace wgl\n} // namespace opengl\n} // namespace igl\n"
  },
  {
    "path": "src/igl/tests/Assert.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n// Only include Assert.h and ensure it is configured to enable both soft errors and debug aborts\n#define IGL_DEBUG_ABORT_ENABLED 1\n#define IGL_SOFT_ERROR_ENABLED 1\n#define IGL_COMMON_SKIP_CHECK 1\n#include <igl/Assert.h>\n\nnamespace igl::tests {\nnamespace {\nbool sAbort = false;\nbool sSoftError = false;\n} // namespace\n\nclass AssertTest : public ::testing::Test {\n public:\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglSetDebugAbortListener([](const char* /*category*/,\n                                const char* /*reason*/,\n                                const char* /*file*/,\n                                const char* /*func*/,\n                                int /*line*/,\n                                const char* /*format*/,\n                                va_list /*ap*/) { sAbort = true; });\n    iglSetSoftErrorHandler([](const char* /*category*/,\n                              const char* /*reason*/,\n                              const char* /*file*/,\n                              const char* /*func*/,\n                              int /*line*/,\n                              const char* /*format*/,\n                              va_list /*ap*/) { sSoftError = true; });\n  }\n\n  void TearDown() override {\n    iglSetDebugAbortListener(nullptr);\n    iglSetSoftErrorHandler(nullptr);\n  }\n};\n\nTEST_F(AssertTest, DebugAbort) {\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  IGL_DEBUG_ABORT(\"Aborting\");\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  IGL_DEBUG_ABORT(\"Aborting with arg %d\", 1);\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  IGL_DEBUG_ASSERT(false);\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  IGL_DEBUG_ASSERT(false, \"Aborting\");\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  IGL_DEBUG_ASSERT(false, \"Aborting with arg %d\", 1);\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  std::ignore = IGL_DEBUG_VERIFY(false);\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  std::ignore = IGL_DEBUG_VERIFY(false, \"Aborting\");\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  std::ignore = IGL_DEBUG_VERIFY(false, \"Aborting with arg %d\", 1);\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  std::ignore = IGL_DEBUG_VERIFY_NOT(true);\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  std::ignore = IGL_DEBUG_VERIFY_NOT(true, \"Aborting\");\n  EXPECT_TRUE(sAbort);\n\n  sAbort = false;\n  EXPECT_FALSE(sAbort);\n  std::ignore = IGL_DEBUG_VERIFY_NOT(true, \"Aborting with arg %d\", 1);\n  EXPECT_TRUE(sAbort);\n}\n\nTEST_F(AssertTest, SoftError) {\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  IGL_SOFT_ERROR(\"Aborting\");\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  IGL_SOFT_ERROR(\"Aborting with arg %d\", 1);\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  IGL_SOFT_ASSERT(false);\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  IGL_SOFT_ASSERT(false, \"Aborting\");\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  IGL_SOFT_ASSERT(false, \"Aborting with arg %d\", 1);\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  std::ignore = IGL_SOFT_VERIFY(false);\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  std::ignore = IGL_SOFT_VERIFY(false, \"Aborting\");\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  std::ignore = IGL_SOFT_VERIFY(false, \"Aborting with arg %d\", 1);\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  std::ignore = IGL_SOFT_VERIFY_NOT(true);\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  std::ignore = IGL_SOFT_VERIFY_NOT(true, \"Aborting\");\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n\n  sAbort = false;\n  sSoftError = false;\n  EXPECT_FALSE(sAbort);\n  EXPECT_FALSE(sSoftError);\n  std::ignore = IGL_SOFT_VERIFY_NOT(true, \"Aborting with arg %d\", 1);\n  EXPECT_TRUE(sAbort);\n  EXPECT_TRUE(sSoftError);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Backend.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/TextureData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Common.h\"\n\n#include <memory>\n#include <igl/CommandBuffer.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/Shader.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\nconstexpr size_t kOffscreenTexWidth = 2;\nconstexpr size_t kOffscreenTexHeight = 2;\n\n//\n// BackendTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass BackendTest : public ::testing::Test {\n private:\n public:\n  BackendTest() = default;\n  ~BackendTest() override = default;\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   kOffscreenTexWidth,\n                                                   kOffscreenTexHeight,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n  size_t textureUnit_ = 0;\n};\n\n//\n// Coordinate System Test\n//\n// By default OGL has a z clip space of -1 to 1 but metal has a clipspace from 0 to 1\n// See https://stackoverflow.com/questions/48311452/glkit-vs-metal-perspective-matrix-difference\n// This test is to ensure the behavior is consistent\n//\n// Expected output: Test passes for OGL but fails for Metal\n// backends\n//\n// Note: We are disabling this test for now because it's becoming distracting\n// to see the failure all the time. We will re-enable it once we have decided\n// what to do with the coordinate system differences.\n//\nTEST_F(BackendTest, DISABLED_CoordinateSystem) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 kOffscreenTexWidth,\n                                                 kOffscreenTexHeight,\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n\n  inputTexture_->upload(rangeDesc, data::texture::kTexRgba2x2.data());\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  // Create a new vertex buffer with z values between -1 and 0\n  float zAdjustedQuad[] = {-1.0f,\n                           1.0f,\n                           -0.2f,\n                           1.0f,\n                           1.0f,\n                           1.0f,\n                           -0.2f,\n                           1.0f,\n                           -1.0f,\n                           -1.0f,\n                           -0.2f,\n                           1.0f,\n                           1.0f,\n                           -1.0f,\n                           -0.2f,\n                           1.0f};\n\n  BufferDesc bufDesc;\n  bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n  bufDesc.data = zAdjustedQuad;\n  bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n  const std::shared_ptr<IBuffer> zAdjustedVertexBuffer = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(zAdjustedVertexBuffer != nullptr);\n  //-------\n  // Render\n  //-------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *zAdjustedVertexBuffer);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  auto pixels = std::vector<uint32_t>(kOffscreenTexWidth * kOffscreenTexHeight);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n\n  //--------------------------------\n  // Verify against original texture\n  //--------------------------------\n  for (size_t i = 0; i < kOffscreenTexWidth * kOffscreenTexHeight; i++) {\n    ASSERT_EQ(pixels[i], data::texture::kTexRgba2x2[i]);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Blending.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/TextureData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Common.h\"\n\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/Framebuffer.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/Texture.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n// The test will render to a texture with two overlapping quads.\n// Each test will use different blending operations\n#define OFFSCREEN_TEX_WIDTH 4ul\n#define OFFSCREEN_TEX_HEIGHT 4ul\n\n//\n// BlendingTest\n//\nclass BlendingTest : public ::testing::Test {\n private:\n public:\n  BlendingTest() = default;\n  ~BlendingTest() override = default;\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   OFFSCREEN_TEX_WIDTH,\n                                                   OFFSCREEN_TEX_HEIGHT,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor.\n    // Framebuffer is completely cleared (including alpha value)\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 0.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Create input textures\n    const TextureDesc inputTexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                        OFFSCREEN_TEX_WIDTH,\n                                                        OFFSCREEN_TEX_HEIGHT,\n                                                        TextureDesc::TextureUsageBits::Sampled);\n    inputTexture1_ = iglDev_->createTexture(texDesc, &ret);\n    inputTexture2_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(inputTexture1_ != nullptr && inputTexture2_ != nullptr);\n\n    rangeDesc_ = TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT);\n\n    inputTexture1_->upload(rangeDesc_, data::texture::kTexRgbaRedAlpha128_4x4.data());\n    inputTexture2_->upload(rangeDesc_, data::texture::kTexRgbaBlueAlpha127_4x4.data());\n\n    // Initialize Graphics Pipeline Descriptors, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n  const std::string backend_ = IGL_BACKEND_TYPE;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture1_;\n  std::shared_ptr<ITexture> inputTexture2_;\n  TextureDesc texDesc_;\n  TextureRangeDesc rangeDesc_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n  size_t textureUnit_ = 0;\n};\n\n//\n// Blending\n//\n// This test adds the color and alpha of two textures\n//\nTEST_F(BlendingTest, RGBASrcAndDstAddTest) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState1, pipelineState2;\n\n  //-----------------\n  // Create Pipelines\n  //-----------------\n  renderPipelineDesc_.targetDesc.colorAttachments[0].blendEnabled = true;\n  renderPipelineDesc_.targetDesc.colorAttachments[0].rgbBlendOp = BlendOp::Add;\n  renderPipelineDesc_.targetDesc.colorAttachments[0].alphaBlendOp = BlendOp::Add;\n  renderPipelineDesc_.targetDesc.colorAttachments[0].srcRGBBlendFactor = BlendFactor::One;\n  renderPipelineDesc_.targetDesc.colorAttachments[0].srcAlphaBlendFactor = BlendFactor::One;\n  renderPipelineDesc_.targetDesc.colorAttachments[0].dstRGBBlendFactor = BlendFactor::One;\n  renderPipelineDesc_.targetDesc.colorAttachments[0].dstAlphaBlendFactor = BlendFactor::One;\n  pipelineState1 = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState1 != nullptr);\n\n  //-------\n  // Render\n  //-------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  // Bind pipeline\n  cmds->bindRenderPipelineState(pipelineState1);\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n\n  // Draw half red texture\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture1_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n  cmds->drawIndexed(6);\n\n  // Draw half blue texture\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture2_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  auto pixels = std::vector<uint32_t>(OFFSCREEN_TEX_WIDTH * OFFSCREEN_TEX_HEIGHT);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc_);\n\n  //--------------------------------\n  // Verify that addition worked\n  // R = 0x80 (128)\n  // B = 0x7F (127)\n  // A = 0xFF (255)\n  //--------------------------------\n  const unsigned int finalPixel = 0x80007FFF;\n  for (size_t i = 0; i < OFFSCREEN_TEX_WIDTH * OFFSCREEN_TEX_HEIGHT; i++) {\n    ASSERT_EQ(pixels[i], finalPixel);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Buffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/Buffer.h>\n\n#include \"util/Common.h\"\n\n#include <string>\n#include <igl/Uniform.h>\n\nnamespace igl::tests {\n\n//\n// BufferTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass BufferTest : public ::testing::Test {\n public:\n  BufferTest() = default;\n  ~BufferTest() override = default;\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n\n    mapBufferTestsSupported_ = iglDev_->hasFeature(DeviceFeatures::MapBufferRange);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n\n  bool mapBufferTestsSupported_ = false;\n};\n\n//\n// sizeForUniformElementType\n//\n// Make sure Buffer::sizeForUniformElementType() returns the expected value\n//\nTEST_F(BufferTest, sizeForUniformElementType) {\n  // Invalid type has element size of 0\n  ASSERT_EQ(0, sizeForUniformElementType(UniformType::Invalid));\n\n  // These all have float as the underlying type, so 4 bytes\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Float));\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Float2));\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Float3));\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Float4));\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Mat2x2));\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Mat3x3));\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Mat4x4));\n\n  // IGL defines boolean as 1 byte\n  ASSERT_EQ(1, sizeForUniformElementType(UniformType::Boolean));\n\n  // These all have 32-bit integer as the underlying type, so 4 bytes\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Int));\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Int2));\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Int3));\n  ASSERT_EQ(4, sizeForUniformElementType(UniformType::Int4));\n}\n\n//\n// sizeForUniformType\n//\n// Verify igl::sizeForUniformType() returns the expected value.\n// We include all possible cases to get maximum code coverage.\n//\nTEST_F(BufferTest, sizeForUniformType) {\n  // Invalid type has size of 0\n  ASSERT_EQ(0, sizeForUniformType(UniformType::Invalid));\n  ASSERT_EQ(0, sizeForUniformType((UniformType)-1));\n\n  // Types with element of Float\n  ASSERT_EQ(4, sizeForUniformType(UniformType::Float));\n  ASSERT_EQ(8, sizeForUniformType(UniformType::Float2));\n  ASSERT_EQ(12, sizeForUniformType(UniformType::Float3));\n  ASSERT_EQ(16, sizeForUniformType(UniformType::Float4));\n\n  // Boolean has size of 1\n  ASSERT_EQ(1, sizeForUniformType(UniformType::Boolean));\n\n  // Types with element of Int\n  ASSERT_EQ(4, sizeForUniformType(UniformType::Int));\n  ASSERT_EQ(8, sizeForUniformType(UniformType::Int2));\n  ASSERT_EQ(12, sizeForUniformType(UniformType::Int3));\n  ASSERT_EQ(16, sizeForUniformType(UniformType::Int4));\n  ASSERT_EQ(16, sizeForUniformType(UniformType::Mat2x2));\n  ASSERT_EQ(36, sizeForUniformType(UniformType::Mat3x3));\n  ASSERT_EQ(64, sizeForUniformType(UniformType::Mat4x4));\n}\n\nTEST_F(BufferTest, createWithDebugLabel) {\n  Result ret;\n  constexpr size_t kIndexDataSize = 6;\n  constexpr std::array<uint16_t, kIndexDataSize> kIndexData = {\n      0,\n      1,\n      2,\n      1,\n      3,\n      2,\n  };\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .data = kIndexData.data(),\n      .length = sizeof(kIndexData),\n      .storage = ResourceStorage::Shared,\n      .debugName = \"test\",\n  };\n\n  const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(buffer != nullptr);\n\n  ret = buffer->upload(kIndexData.data(), BufferRange{sizeof(kIndexData), 0});\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n}\n\nTEST_F(BufferTest, mapIndexBuffer) {\n  Result ret;\n  constexpr size_t indexDataSize = 6;\n  uint16_t indexData[indexDataSize] = {\n      0,\n      1,\n      2,\n      1,\n      3,\n      2,\n  };\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .data = indexData,\n      .length = sizeof(indexData),\n      .storage = ResourceStorage::Shared,\n  };\n  const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(buffer != nullptr);\n\n  std::vector<uint16_t> bufferData(indexDataSize);\n  auto range = BufferRange(sizeof(indexData), 0);\n  auto* data = buffer->map(range, &ret);\n\n  if (!mapBufferTestsSupported_) {\n    ASSERT_EQ(ret.code, Result::Code::InvalidOperation);\n    return;\n  }\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  memcpy(bufferData.data(), data, sizeof(indexData));\n\n  for (int i = 0; i < indexDataSize; ++i) {\n    ASSERT_EQ(bufferData[i], indexData[i]);\n  }\n  buffer->unmap();\n}\n\nTEST_F(BufferTest, mapBufferRangeIndexBuffer) {\n  Result ret;\n  constexpr size_t indexDataSize = 6;\n  uint16_t indexData[indexDataSize] = {\n      0,\n      1,\n      2,\n      1,\n      3,\n      2,\n  };\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .data = indexData,\n      .length = sizeof(indexData),\n      .storage = ResourceStorage::Shared,\n  };\n  const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(buffer != nullptr);\n\n  std::vector<uint16_t> bufferPartialData(3);\n  const int numElementsToSkip = 2;\n  const int offsetBytes = numElementsToSkip * sizeof(uint16_t);\n  const int numElementsToMap = 3;\n  const int sizeBytes = numElementsToMap * sizeof(uint16_t);\n  auto newRange = BufferRange(sizeBytes, offsetBytes);\n  auto* data = buffer->map(newRange, &ret);\n\n  if (!mapBufferTestsSupported_) {\n    ASSERT_EQ(ret.code, Result::Code::InvalidOperation);\n    return;\n  }\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  memcpy(bufferPartialData.data(), data, sizeBytes);\n\n  for (int i = 0; i < numElementsToMap; ++i) {\n    ASSERT_EQ(bufferPartialData[i], indexData[i + numElementsToSkip]);\n  }\n  buffer->unmap();\n}\n\nTEST_F(BufferTest, copyBytesErrorsIndexBuffer) {\n  Result ret;\n  constexpr size_t indexDataSize = 6;\n  uint16_t indexData[indexDataSize] = {\n      0,\n      1,\n      2,\n      1,\n      3,\n      2,\n  };\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .data = indexData,\n      .length = sizeof(indexData),\n      .storage = ResourceStorage::Shared,\n  };\n  const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(buffer != nullptr);\n\n  // Offset starts past end of buffer\n  auto range = BufferRange(sizeof(indexData), 1);\n  buffer->map(range, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::ArgumentOutOfRange);\n  buffer->unmap();\n\n  // Range extends beyond end of buffer\n  range = BufferRange(1, sizeof(indexData));\n  buffer->map(range, &ret);\n  ASSERT_EQ(ret.code, Result::Code::ArgumentOutOfRange);\n  buffer->unmap();\n}\n\nTEST_F(BufferTest, mapUniformBuffer) {\n  Result ret;\n\n  Color color = {1.0f, 5.0f, 7.0f, 1.0f};\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Uniform,\n      .data = &color,\n      .length = sizeof(color),\n  };\n  const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(buffer != nullptr);\n\n  std::vector<float> bufferData(4);\n  auto range = BufferRange(sizeof(color), 0);\n  auto* data = buffer->map(range, &ret);\n\n  memcpy(bufferData.data(), data, sizeof(color));\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_EQ(color.r, bufferData[0]);\n  ASSERT_EQ(color.g, bufferData[1]);\n  ASSERT_EQ(color.b, bufferData[2]);\n  ASSERT_EQ(color.a, bufferData[3]);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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\ncmake_minimum_required(VERSION 3.19)\n\nproject(IGLTests CXX C)\n\nfile(GLOB SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp util/*.cpp util/device/*.cpp)\nfile(GLOB HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h util/*.h util/device/*.h)\n\nif(IGL_WITH_VULKAN)\n  file(GLOB VULKAN_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} vulkan/*.cpp)\n  list(APPEND SRC_FILES ${VULKAN_SRC_FILES})\n  list(APPEND SRC_FILES util/device/vulkan/TestDevice.cpp)\n  list(APPEND HEADER_FILES util/device/vulkan/TestDevice.h)\n  if(MACOSX)\n    list(APPEND SRC_FILES util/device/vulkan/TestDeviceXCTestHelper.mm)\n    list(APPEND HEADER_FILES util/device/vulkan/TestDeviceXCTestHelper.h)\n  endif()\nendif()\n\nif(IGL_WITH_OPENGL OR IGL_WITH_OPENGLES)\n  file(GLOB OPENGL_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ogl/*.cpp)\n  list(APPEND SRC_FILES ${OPENGL_SRC_FILES})\n  list(APPEND SRC_FILES util/device/opengl/TestDevice.cpp)\n  list(APPEND HEADER_FILES util/device/opengl/TestDevice.h)\nendif()\n\nif(IGL_WITH_METAL)\n  file(GLOB METAL_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} metal/*.cpp metal/*.mm)\n  list(APPEND SRC_FILES ${METAL_SRC_FILES})\n  list(APPEND SRC_FILES util/device/MetalTestDevice.mm)\n  list(APPEND SRC_FILES util/device/metal/TestDevice.mm)\n  list(APPEND HEADER_FILES util/device/MetalTestDevice.h)\n  list(APPEND HEADER_FILES util/device/metal/TestDevice.h)\nendif()\n\nif(IGL_WITH_D3D12)\n  file(GLOB D3D12_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} d3d12/*.cpp)\n  list(APPEND SRC_FILES ${D3D12_SRC_FILES})\n  list(APPEND SRC_FILES util/device/d3d12/TestDevice.cpp)\n  list(APPEND HEADER_FILES util/device/d3d12/TestDevice.h)\nendif()\n\nif(IGL_WITH_IGLU)\n  file(GLOB IGLU_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} iglu/*.cpp)\n  file(GLOB IGLU_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} iglu/texture_loader/*.cpp)\n  if((NOT IGL_WITH_OPENGL) AND (NOT IGL_WITH_OPENGLES))\n    list(REMOVE_ITEM IGLU_SRC_FILES iglu/texture_loader/Ktx1TextureLoaderTest.cpp)\n  endif()\n  if(NOT IGL_WITH_VULKAN)\n    list(REMOVE_ITEM IGLU_SRC_FILES iglu/texture_loader/Ktx2TextureLoaderTest.cpp)\n  endif()\n  list(APPEND SRC_FILES ${IGLU_SRC_FILES})\nendif()\n\nenable_testing()\n\n# Add custom main to initialize COM and install signal handlers before gtest\nlist(APPEND SRC_FILES main.cpp)\nadd_executable(IGLTests ${SRC_FILES} ${HEADER_FILES})\n\nif(WIN32)\n  if(MSVC)\n    target_compile_options(IGLTests PRIVATE /bigobj)\n  endif()\n\n  target_compile_definitions(IGLTests PRIVATE -DNOMINMAX)\n  target_compile_definitions(IGLTests PRIVATE -DIGL_UNIT_TESTS_GLES_VERSION=3)\n  # Ensure Unicode matches across GoogleTest and our test binary on Windows\n  # Ensure tests are built without UNICODE to match GoogleTest defaults and avoid CRT mismatches\n  if(MSVC)\n    target_compile_options(IGLTests PRIVATE /UUNICODE /U_UNICODE)\n    if(TARGET gtest)\n      target_compile_options(gtest PRIVATE /UUNICODE /U_UNICODE)\n    endif()\n    if(TARGET gtest_main)\n      target_compile_options(gtest_main PRIVATE /UUNICODE /U_UNICODE)\n    endif()\n    if(TARGET gmock)\n      target_compile_options(gmock PRIVATE /UUNICODE /U_UNICODE)\n    endif()\n    if(TARGET gmock_main)\n      target_compile_options(gmock_main PRIVATE /UUNICODE /U_UNICODE)\n    endif()\n  endif()\n  target_include_directories(IGLTests PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/glew/include\")\n  # IGL tests use EGL, here's a stub for Windows\n  add_library(\n    EGL ${IGL_ROOT_DIR}/third-party/deps/src/EGL/EGL/src/egl.c ${IGL_ROOT_DIR}/third-party/deps/src/EGL/EGL/src/egl_common.cpp\n        ${IGL_ROOT_DIR}/third-party/deps/src/EGL/EGL/src/egl_windows.cpp)\n  target_include_directories(EGL PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/EGL/EGL/include\")\n  target_compile_definitions(EGL PUBLIC \"-DEGL_NO_CONFIG_KHR=((EGLConfig)0)\")\n  target_compile_definitions(EGL PUBLIC -DEGL_NO_GLEW)\n  target_compile_definitions(EGL PUBLIC __SCITECH_SNAP__)\n  igl_set_cxxstd(EGL 17)\n  igl_set_folder(EGL \"third-party\")\n  target_link_libraries(IGLTests PUBLIC EGL)\nelseif(UNIX AND NOT APPLE AND NOT ANDROID)\n  target_link_libraries(IGLTests PUBLIC EGL)\nendif()\n\nigl_set_cxxstd(IGLTests 20)\nigl_set_folder(IGLTests \"IGL\")\n\n# gtest - FORCE static linkage to avoid DLL initialization issues\n# NOTE: gmock is NOT needed - no tests use it\n# cmake-format: off\nset(BUILD_SHARED_LIBS      OFF CACHE BOOL \"Build shared libraries\" FORCE)\nset(BUILD_GMOCK            OFF CACHE BOOL \"Build gmock\" FORCE)\nset(INSTALL_GTEST          OFF CACHE BOOL \"Install gtest\" FORCE)\nset(GTEST_HAS_ABSL         OFF CACHE BOOL \"Use Abseil\" FORCE)\nset(gtest_force_shared_crt OFF CACHE BOOL \"Force shared CRT\" FORCE)\n# Explicitly disable shared library build\nset(BUILD_SHARED_LIBS OFF)\n# CRITICAL: Set these compile definitions globally BEFORE including gtest\nadd_compile_definitions(GTEST_LINKED_AS_SHARED_LIBRARY=0 GTEST_CREATE_SHARED_LIBRARY=0)\n# cmake-format: on\nadd_subdirectory(${IGL_ROOT_DIR}/third-party/deps/src/gtest \"gtest\" EXCLUDE_FROM_ALL)\n\n# CRITICAL: Force static linking by removing any DLL export definitions\nif(TARGET gtest)\n  target_compile_definitions(gtest PRIVATE GTEST_CREATE_SHARED_LIBRARY=0)\n  target_compile_definitions(gtest PUBLIC GTEST_LINKED_AS_SHARED_LIBRARY=0)\nendif()\n\nigl_set_folder(gtest \"third-party\")\nigl_set_folder(gtest_main \"third-party\")\nigl_set_cxxstd(gtest 17)\nigl_set_cxxstd(gtest_main 17)\n\ntarget_link_libraries(IGLTests PUBLIC IGLLibrary)\ntarget_link_libraries(IGLTests PUBLIC gtest)\n# Use our custom main.cpp instead of gtest_main\n# NOTE: gmock is NOT linked - no tests use gmock, only gtest\ntarget_link_libraries(IGLTests PUBLIC IGLUmanagedUniformBuffer)\ntarget_link_libraries(IGLTests PUBLIC IGLUshaderCross)\n# Add STB include directory for image utilities used by test artifacts\ntarget_include_directories(IGLTests PRIVATE \"${IGL_ROOT_DIR}/third-party/deps/src/stb\")\n\n# Enable experimental features ONLY for unit tests (NOT for render sessions)\n# This allows D3D12 headless tests to use unsigned DXIL shaders\nif(IGL_WITH_D3D12)\n  target_compile_definitions(IGLTests PRIVATE IGL_ENABLE_EXPERIMENTAL_FEATURES_FOR_TESTS=1)\nendif()\nif(TARGET glfw)\n  target_link_libraries(IGLTests PRIVATE glfw)\nendif()\n\nif(IGL_WITH_IGLU)\n  target_link_libraries(IGLTests PUBLIC IGLUimgui)\n  target_link_libraries(IGLTests PUBLIC IGLUsimple_renderer)\n  target_link_libraries(IGLTests PUBLIC IGLUstate_pool)\n  target_link_libraries(IGLTests PUBLIC IGLUtexture_accessor)\n  target_link_libraries(IGLTests PUBLIC IGLUtexture_loader)\n  target_link_libraries(IGLTests PUBLIC IGLUuniform)\nendif()\n\nif(IGL_WITH_D3D12)\n  target_compile_definitions(IGLTests PUBLIC -DIGL_BACKEND_TYPE=\"d3d12\")\nelseif(IGL_WITH_VULKAN)\n  target_compile_definitions(IGLTests PUBLIC -DIGL_BACKEND_TYPE=\"vulkan\")\nelseif(IGL_WITH_OPENGL OR IGL_WITH_OPENGLES)\n  target_compile_definitions(IGLTests PUBLIC -DIGL_BACKEND_TYPE=\"ogl\")\nendif()\n\n# Ensure gtest/gmock are linked statically\ntarget_compile_definitions(IGLTests PRIVATE GTEST_LINKED_AS_SHARED_LIBRARY=0 GTEST_CREATE_SHARED_LIBRARY=0)\n\nif(UNIX)\n  if (CMAKE_C_COMPILER_ID STREQUAL \"GNU\")\n    target_compile_options(IGLTests PUBLIC $<$<COMPILE_LANGUAGE:CXX>:-Wno-volatile>)\n  endif()\nendif()\n\n# Register tests with CTest so they can be discovered\ninclude(GoogleTest)\ngtest_discover_tests(IGLTests\n  DISCOVERY_TIMEOUT 60\n  DISCOVERY_MODE PRE_TEST\n)\n\n# Fallback: also register the test executable directly for manual runs\nif (WIN32)\n  add_test(NAME IGLTests COMMAND ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/IGLTests.exe)\nelse()\n  add_test(NAME IGLTests COMMAND ${CMAKE_CURRENT_BINARY_DIR}/IGLTests)\nendif()\n\n# Copy dxil.dll for D3D12 tests (required for DXIL signing)\nif(IGL_WITH_D3D12 AND WIN32 AND MSVC)\n  # Try to locate dxil.dll from the Windows SDK without relying on machine-specific SDK versions\n  find_file(DXIL_DLL_FOR_TESTS\n    NAMES dxil.dll\n    HINTS\n      \"$ENV{WindowsSdkBinPath}\"\n      \"$ENV{WindowsSdkDir}/bin\"\n    PATH_SUFFIXES x64\n  )\n  if(DXIL_DLL_FOR_TESTS)\n    add_custom_command(TARGET IGLTests POST_BUILD\n      COMMAND ${CMAKE_COMMAND} -E copy_if_different\n        \"${DXIL_DLL_FOR_TESTS}\"\n        \"$<TARGET_FILE_DIR:IGLTests>/\"\n      COMMENT \"Copying dxil.dll for IGLTests\"\n    )\n  endif()\nendif()\n"
  },
  {
    "path": "src/igl/tests/Color.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"util/Color.h\"\n\n#include <igl/Color.h>\n\nnamespace igl::tests {\n\nTEST(ColorTest, ctor) {\n  const Color testColor(1.0f, 0.5f, 0.0f);\n  ASSERT_EQ(testColor.r, 1.0f);\n  ASSERT_EQ(testColor.g, 0.5f);\n  ASSERT_EQ(testColor.b, 0.0f);\n  ASSERT_EQ(testColor.a, 1.0f);\n\n  const Color testColor2(1.0f, 0.5f, 0.0f, 1.0f);\n\n  ASSERT_EQ(testColor2.r, 1.0f);\n  ASSERT_EQ(testColor2.g, 0.5f);\n  ASSERT_EQ(testColor2.b, 0.0f);\n  ASSERT_EQ(testColor2.a, 1.0f);\n\n  const auto* floatPtr = testColor.toFloatPtr();\n  ASSERT_EQ(floatPtr[0], 1.0f);\n  ASSERT_EQ(floatPtr[1], 0.5f);\n  ASSERT_EQ(floatPtr[2], 0.0f);\n  ASSERT_EQ(floatPtr[3], 1.0f);\n}\n\nTEST(sRGBColorTest, ctor) {\n  const util::SRgbColor testColor(255, 128, 0);\n  ASSERT_EQ(testColor.r, 255);\n  ASSERT_EQ(testColor.g, 128);\n  ASSERT_EQ(testColor.b, 0);\n  ASSERT_EQ(testColor.a, 255);\n\n  const util::SRgbColor testColor2(255, 128, 0, 255);\n\n  ASSERT_EQ(testColor2.r, 255);\n  ASSERT_EQ(testColor2.g, 128);\n  ASSERT_EQ(testColor2.b, 0);\n  ASSERT_EQ(testColor2.a, 255);\n}\n\nTEST(sRGBColorTest, toRGBA32) {\n  const util::SRgbColor testColor(255, 128, 0);\n  ASSERT_EQ(testColor.toRGBA32(), 0xff8000ff);\n}\n\nTEST(sRGBColorTest, fromRGBA32) {\n  const util::SRgbColor testColor(0xff8000ff);\n  ASSERT_EQ(testColor.r, 255);\n  ASSERT_EQ(testColor.g, 128);\n  ASSERT_EQ(testColor.b, 0);\n  ASSERT_EQ(testColor.a, 255);\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ColorSpace.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/ColorSpace.h>\n\nnamespace igl::tests {\n\nTEST(ColorSpaceTest, colorSpaceToString) {\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::SRGB_LINEAR), \"SRGB_LINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::SRGB_NONLINEAR), \"SRGB_NONLINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::DISPLAY_P3_NONLINEAR), \"DISPLAY_P3_NONLINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::EXTENDED_SRGB_LINEAR), \"EXTENDED_SRGB_LINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::DISPLAY_P3_LINEAR), \"DISPLAY_P3_LINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::DCI_P3_NONLINEAR), \"DCI_P3_NONLINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::BT709_LINEAR), \"BT709_LINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::BT709_NONLINEAR), \"BT709_NONLINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::BT2020_LINEAR), \"BT2020_LINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::HDR10_ST2084), \"HDR10_ST2084\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::DOLBYVISION), \"DOLBYVISION\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::HDR10_HLG), \"HDR10_HLG\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::ADOBERGB_LINEAR), \"ADOBERGB_LINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::ADOBERGB_NONLINEAR), \"ADOBERGB_NONLINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::PASS_THROUGH), \"PASS_THROUGH\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::EXTENDED_SRGB_NONLINEAR), \"EXTENDED_SRGB_NONLINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::DISPLAY_NATIVE_AMD), \"DISPLAY_NATIVE_AMD\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::BT601_NONLINEAR), \"BT601_NONLINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::BT2020_NONLINEAR), \"BT2020_NONLINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::BT2100_HLG_NONLINEAR), \"BT2100_HLG_NONLINEAR\");\n  ASSERT_STREQ(colorSpaceToString(ColorSpace::BT2100_PQ_NONLINEAR), \"BT2100_PQ_NONLINEAR\");\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/CommandBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/CommandBuffer.h>\n\n#include \"util/Common.h\"\n\nnamespace igl::tests {\n\nnamespace {\nconst char* kDebugName = \"CommandBufferTest\";\n}\n\n//\n// CommandBufferTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass CommandBufferTest : public ::testing::Test {\n public:\n  CommandBufferTest() = default;\n  ~CommandBufferTest() override = default;\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    Result result;\n    CommandBufferDesc desc{.debugName = kDebugName};\n    cmdBuf_ = cmdQueue_->createCommandBuffer(desc, &result);\n    ASSERT_EQ(result.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n};\n\n//\n// Check pushDebugGroupLabel and popDebugGroupLabel\n//\n// These functions sadly don't do anything without IGL_API_LOG and IGL_DEBUG defined,\n// this is only for coverage to smoke test.\n//\nTEST_F(CommandBufferTest, pushPopDebugGroupLabel) {\n  // API Logging can't be tested in it's current state, so we just check that it worked.\n  cmdBuf_->pushDebugGroupLabel(\"TEST\");\n  cmdBuf_->popDebugGroupLabel();\n}\n\nTEST_F(CommandBufferTest, debugName) {\n  ASSERT_EQ(cmdBuf_->desc.debugName, kDebugName);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Common.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/Common.h>\n\n#include <igl/CommandEncoder.h>\n\nnamespace igl::tests {\n\nTEST(CommonTest, BackendTypeToStringTest) {\n  ASSERT_EQ(BackendTypeToString(BackendType::Invalid), \"Invalid\");\n  ASSERT_EQ(BackendTypeToString(BackendType::OpenGL), \"OpenGL\");\n  ASSERT_EQ(BackendTypeToString(BackendType::Metal), \"Metal\");\n  ASSERT_EQ(BackendTypeToString(BackendType::Vulkan), \"Vulkan\");\n  // @fb-only\n}\n\nTEST(CommonTest, ResultTest) {\n  Result testResult;\n  Result testResult2(Result::Code::Ok, \"test message2\");\n  Result testResult3(Result::Code::Ok, std::string(\"test message3\"));\n  ASSERT_STREQ(testResult2.message.c_str(), \"test message2\");\n  ASSERT_TRUE(testResult2.isOk());\n  ASSERT_STREQ(testResult3.message.c_str(), \"test message3\");\n  ASSERT_TRUE(testResult3.isOk());\n\n  Result::setResult(&testResult, Result::Code::ArgumentInvalid, std::string(\"new test message\"));\n  ASSERT_STREQ(testResult.message.c_str(), \"new test message\");\n  ASSERT_FALSE(testResult.isOk());\n\n  Result::setResult(&testResult3, testResult);\n  ASSERT_FALSE(testResult3.isOk());\n\n  Result::setResult(&testResult2, std::move(testResult));\n  ASSERT_FALSE(testResult2.isOk());\n}\n\nTEST(CommonTest, RectTest) {\n  const ScissorRect testRect;\n  ASSERT_TRUE(testRect.isNull());\n  const ScissorRect testRect2{.x = 0, .y = 0, .width = 1, .height = 1};\n  ASSERT_FALSE(testRect2.isNull());\n}\n\nTEST(CommonTest, SizeTest) {\n  Size size;\n  ASSERT_EQ(size.height, 0.0f);\n  ASSERT_EQ(size.width, 0.0f);\n  Size size2(2, 2);\n  ASSERT_EQ(size2.height, 2.0f);\n  ASSERT_EQ(size2.width, 2.0f);\n\n  ASSERT_TRUE(size != size2);\n  ASSERT_TRUE(size2 == size2);\n  ASSERT_FALSE(size == size2);\n  ASSERT_FALSE(size2 != size2);\n}\n\nTEST(CommonTest, DimensionTest) {\n  Dimensions dimension;\n  ASSERT_EQ(dimension.height, 0);\n  ASSERT_EQ(dimension.width, 0);\n  ASSERT_EQ(dimension.depth, 0);\n  Dimensions dimension2(2, 2, 2);\n  ASSERT_EQ(dimension2.height, 2);\n  ASSERT_EQ(dimension2.width, 2);\n  ASSERT_EQ(dimension2.depth, 2);\n\n  ASSERT_TRUE(dimension != dimension2);\n  ASSERT_TRUE(dimension2 == dimension2);\n  ASSERT_FALSE(dimension == dimension2);\n  ASSERT_FALSE(dimension2 != dimension2);\n}\n\nTEST(CommonTest, ViewportTest) {\n  Viewport viewport;\n  ASSERT_TRUE(viewport != kInvalidViewport);\n  Viewport viewport2;\n  ASSERT_TRUE(viewport == viewport2);\n}\n\nTEST(CommonTest, EnumToValueTest) {\n  auto val = EnumToValue(BackendType::Vulkan);\n  ASSERT_EQ(val, 3);\n}\n\nTEST(CommonTest, ScopeGuardTest) {\n  int testValue = 0;\n  {\n    auto scopeGuard = ScopeGuardOnExit() + [&]() { ++testValue; };\n  }\n  ASSERT_EQ(testValue, 1);\n}\n\nTEST(CommonTest, OptimizedMemCopyTest) {\n  uint8_t buffer1[] = {0,  1,  2,  3,  4,  5,  6,  7,  8,  9,  10, 11, 12, 13, 14, 15, 16,\n                       17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32};\n  uint8_t buffer2[32] = {0};\n\n  optimizedMemcpy(buffer1, buffer2, 4);\n  ASSERT_EQ(*reinterpret_cast<uint32_t*>(buffer1), *reinterpret_cast<uint32_t*>(buffer2));\n  optimizedMemcpy(buffer1, buffer2, 8);\n  ASSERT_EQ(*reinterpret_cast<uint64_t*>(buffer1), *reinterpret_cast<uint64_t*>(buffer2));\n  optimizedMemcpy(buffer1, buffer2, 16);\n  ASSERT_EQ(*reinterpret_cast<uint64_t*>(buffer1), *reinterpret_cast<uint64_t*>(buffer2));\n  ASSERT_EQ(*(reinterpret_cast<uint64_t*>(buffer1) + 1),\n            *(reinterpret_cast<uint64_t*>(buffer2) + 1));\n  optimizedMemcpy(buffer1, buffer2, 32);\n  ASSERT_EQ(*reinterpret_cast<uint64_t*>(buffer1), *reinterpret_cast<uint64_t*>(buffer2));\n  ASSERT_EQ(*(reinterpret_cast<uint64_t*>(buffer1) + 1),\n            *(reinterpret_cast<uint64_t*>(buffer2) + 1));\n  ASSERT_EQ(*(reinterpret_cast<uint64_t*>(buffer1) + 2),\n            *(reinterpret_cast<uint64_t*>(buffer2) + 2));\n  ASSERT_EQ(*(reinterpret_cast<uint64_t*>(buffer1) + 3),\n            *(reinterpret_cast<uint64_t*>(buffer2) + 3));\n}\n\nTEST(CommonTest, HandleTest) {\n  const Holder<BindGroupTextureHandle> bindGroupHandle;\n  const Holder<BindGroupBufferHandle> bindGroupBufferHandle;\n  const Holder<TextureHandle> textureHandle;\n  const Holder<SamplerHandle> samplerHandle;\n}\n\nTEST(CommonTest, PoolTest) {\n  Pool<BindGroupBufferTag, BindGroupBufferDesc> bindGroupBuffersPool;\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ComputeCommandEncoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/ComputeCommandEncoder.h>\n\n#include \"data/ShaderData.h\"\n#include \"util/Common.h\"\n\n#include <memory>\n#include <vector>\n#include <igl/Buffer.h>\n#include <igl/CommandBuffer.h>\n#include <igl/ComputePipelineState.h>\n#include <igl/Shader.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::tests {\n\nstatic std::vector<float> dataIn = {1.0, 2.0, 3.0, 4.0, 5.0f, 6.0f};\n\n/**\n * @brief ComputeCommandEncoderTest is a test fixture for all the tests in this file.\n * It takes care of common initialization and allocating of common resources.\n */\nclass ComputeCommandEncoderTest : public ::testing::Test {\n private:\n public:\n  ComputeCommandEncoderTest() = default;\n  ~ComputeCommandEncoderTest() override = default;\n\n  /**\n   * @brief This function sets up compute buffers and compiles the compute shader.\n   */\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n      return;\n    }\n\n    const BufferDesc vbInDesc{\n        .type = BufferDesc::BufferTypeBits::Storage,\n        .data = dataIn.data(),\n        .length = sizeof(float) * dataIn.size(),\n    };\n    bufferIn_ = iglDev_->createBuffer(vbInDesc, nullptr);\n    ASSERT_TRUE(bufferIn_ != nullptr);\n    // Use ResourceStorage::Shared for output buffers so they can be mapped for reading\n    const BufferDesc bufferOutDesc{\n        .type = BufferDesc::BufferTypeBits::Storage,\n        .length = sizeof(float) * dataIn.size(),\n        .storage = ResourceStorage::Shared,\n    };\n    bufferOut0_ = iglDev_->createBuffer(bufferOutDesc, nullptr);\n    ASSERT_TRUE(bufferOut0_ != nullptr);\n    bufferOut1_ = iglDev_->createBuffer(bufferOutDesc, nullptr);\n    ASSERT_TRUE(bufferOut1_ != nullptr);\n    bufferOut2_ = iglDev_->createBuffer(bufferOutDesc, nullptr);\n    ASSERT_TRUE(bufferOut2_ != nullptr);\n\n    { // Compile CS\n      std::string_view entryName;\n      std::string_view source;\n      if (iglDev_->getBackendType() == igl::BackendType::OpenGL) {\n        source = igl::tests::data::shader::kOglSimpleComputeShader;\n        entryName = igl::tests::data::shader::kSimpleComputeFunc;\n      } else if (iglDev_->getBackendType() == igl::BackendType::Vulkan) {\n        source = igl::tests::data::shader::kVulkanSimpleComputeShader;\n        entryName = \"main\"; // entry point is not pipelined. Hardcoding to main for now.\n      } else if (iglDev_->getBackendType() == igl::BackendType::Metal) {\n        source = igl::tests::data::shader::kMtlSimpleComputeShader;\n        entryName = igl::tests::data::shader::kSimpleComputeFunc;\n      } else if (iglDev_->getBackendType() == igl::BackendType::D3D12) {\n        source = igl::tests::data::shader::kD3D12SimpleComputeShader;\n        entryName = igl::tests::data::shader::kSimpleComputeFunc;\n      } else {\n        IGL_DEBUG_ASSERT_NOT_REACHED();\n      }\n\n      Result ret;\n      computeStages_ = ShaderStagesCreator::fromModuleStringInput(\n          *iglDev_, source.data(), std::string(entryName), \"\", &ret);\n      ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n      ASSERT_TRUE(computeStages_ != nullptr);\n    }\n  }\n\n  /**\n   * @brief This function binds bufferIn and bufferOut to a new computePipelineState and encodes the\n   * computePipelineState to a new computeCommandEncoder.\n   */\n  void encodeCompute(const std::shared_ptr<ICommandBuffer>& cmdBuffer,\n                     const std::shared_ptr<IBuffer>& bufferIn,\n                     const std::shared_ptr<IBuffer>& bufferOut,\n                     std::shared_ptr<IComputePipelineState>& ret) {\n    ASSERT_TRUE(computeStages_ != nullptr);\n    ComputePipelineDesc computeDesc;\n    computeDesc.shaderStages = computeStages_;\n    computeDesc.buffersMap[igl::tests::data::shader::kSimpleComputeInputIndex] =\n        IGL_NAMEHANDLE(igl::tests::data::shader::kSimpleComputeInput);\n    computeDesc.buffersMap[igl::tests::data::shader::kSimpleComputeOutputIndex] =\n        IGL_NAMEHANDLE(igl::tests::data::shader::kSimpleComputeOutput);\n    auto computePipelineState = iglDev_->createComputePipeline(computeDesc, nullptr);\n    ASSERT_TRUE(computePipelineState != nullptr);\n\n    auto computeEncoder = cmdBuffer->createComputeCommandEncoder();\n    ASSERT_TRUE(computeEncoder != nullptr);\n\n    computeEncoder->insertDebugEventLabel(\"Running ComputeCommandEncoderTest...\");\n\n    computeEncoder->bindComputePipelineState(computePipelineState);\n    computeEncoder->bindBuffer(igl::tests::data::shader::kSimpleComputeInputIndex, bufferIn.get());\n    computeEncoder->bindBuffer(igl::tests::data::shader::kSimpleComputeOutputIndex,\n                               bufferOut.get());\n\n    const Dimensions threadgroupSize(dataIn.size(), 1, 1);\n    const Dimensions threadgroupCount(1, 1, 1);\n    computeEncoder->dispatchThreadGroups(\n        threadgroupCount, threadgroupSize, {.buffers = {bufferIn.get()}});\n    computeEncoder->endEncoding();\n    ret = computePipelineState;\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n\n  std::shared_ptr<IShaderStages> computeStages_;\n\n  std::shared_ptr<IBuffer> bufferIn_, bufferOut0_, bufferOut1_, bufferOut2_;\n  std::shared_ptr<IComputePipelineState> cps1_, cps2_, cps3_;\n};\n\nTEST_F(ComputeCommandEncoderTest, canEncodeBasicBufferOperation) {\n#if IGL_PLATFORM_LINUX && !IGL_PLATFORM_LINUX_USE_EGL\n  GTEST_SKIP() << \"Fix this test on Linux\";\n#endif\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    return;\n  }\n\n  ASSERT_TRUE(cmdQueue_ != nullptr);\n\n  const CommandBufferDesc cbDesc;\n  auto cmdBuffer = cmdQueue_->createCommandBuffer(cbDesc, nullptr);\n  ASSERT_TRUE(cmdBuffer != nullptr);\n\n  encodeCompute(cmdBuffer, bufferIn_, bufferOut0_, cps1_);\n\n  ASSERT_TRUE(cmdQueue_ != nullptr);\n  cmdQueue_->submit(*cmdBuffer);\n\n  cmdBuffer->waitUntilCompleted();\n\n  std::vector<float> bytes(dataIn.size());\n  auto range = BufferRange(sizeof(float) * dataIn.size(), 0);\n  Result ret;\n  auto* data = bufferOut0_->map(range, &ret);\n  ASSERT_TRUE(data != nullptr);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  memcpy(bytes.data(), data, sizeof(float) * dataIn.size());\n  ASSERT_EQ(dataIn.size() > 0, true);\n  for (int i = 0; i < dataIn.size(); i++) {\n    ASSERT_EQ(dataIn[i] * 2.0f, bytes[i]);\n  }\n  bufferOut0_->unmap();\n}\n\nTEST_F(ComputeCommandEncoderTest, bindImageTexture) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    return;\n  }\n\n  auto cmdBuffer = cmdQueue_->createCommandBuffer({}, nullptr);\n  ASSERT_TRUE(cmdBuffer != nullptr);\n\n  auto computeCommandEncoder = cmdBuffer->createComputeCommandEncoder();\n  computeCommandEncoder->bindImageTexture(0, nullptr, TextureFormat::Invalid);\n  computeCommandEncoder->endEncoding();\n  cmdQueue_->submit(*cmdBuffer);\n  cmdBuffer->waitUntilCompleted();\n}\n\nTEST_F(ComputeCommandEncoderTest, canUseOutputBufferFromOnePassAsInputToNext) {\n#if IGL_PLATFORM_LINUX && !IGL_PLATFORM_LINUX_USE_EGL\n  GTEST_SKIP() << \"Fix this test on Linux\";\n#endif\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    return;\n  }\n\n  ASSERT_TRUE(cmdQueue_ != nullptr);\n\n  {\n    const CommandBufferDesc cbDesc;\n    auto cmdBuffer = cmdQueue_->createCommandBuffer(cbDesc, nullptr);\n    ASSERT_TRUE(cmdBuffer != nullptr);\n\n    encodeCompute(cmdBuffer, bufferIn_, bufferOut0_, cps1_);\n\n    cmdQueue_->submit(*cmdBuffer);\n    cmdBuffer->waitUntilCompleted();\n  }\n  {\n    const CommandBufferDesc cbDesc;\n    auto cmdBuffer = cmdQueue_->createCommandBuffer(cbDesc, nullptr);\n    ASSERT_TRUE(cmdBuffer != nullptr);\n\n    encodeCompute(cmdBuffer, bufferOut0_, bufferOut1_, cps2_);\n    cmdQueue_->submit(*cmdBuffer);\n    cmdBuffer->waitUntilCompleted();\n  }\n  {\n    const CommandBufferDesc cbDesc;\n    auto cmdBuffer = cmdQueue_->createCommandBuffer(cbDesc, nullptr);\n    ASSERT_TRUE(cmdBuffer != nullptr);\n\n    encodeCompute(cmdBuffer, bufferOut1_, bufferOut2_, cps3_);\n    cmdQueue_->submit(*cmdBuffer);\n    cmdBuffer->waitUntilCompleted();\n  }\n\n  std::vector<float> bytes(dataIn.size());\n  auto range = BufferRange(sizeof(float) * dataIn.size(), 0);\n  Result ret;\n  auto* data = bufferOut2_->map(range, &ret);\n  ASSERT_TRUE(data != nullptr);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  memcpy(bytes.data(), data, sizeof(float) * dataIn.size());\n  ASSERT_EQ(dataIn.size() > 0, true);\n  for (int i = 0; i < dataIn.size(); i++) {\n    // Compute pass ran 3 times\n    ASSERT_EQ(dataIn[i] * 2.0f * 2.0f * 2.0f, bytes[i]);\n  }\n  bufferOut2_->unmap();\n}\n\nTEST_F(ComputeCommandEncoderTest, bindSamplerState) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    return;\n  }\n\n  auto cmdBuffer = cmdQueue_->createCommandBuffer({}, nullptr);\n  ASSERT_TRUE(cmdBuffer != nullptr);\n\n  auto computeCommandEncoder = cmdBuffer->createComputeCommandEncoder();\n  computeCommandEncoder->bindSamplerState(0, nullptr);\n  computeCommandEncoder->endEncoding();\n  cmdQueue_->submit(*cmdBuffer);\n  cmdBuffer->waitUntilCompleted();\n}\n\nTEST_F(ComputeCommandEncoderTest, copyBuffer) {\n  if (!iglDev_->hasFeature(DeviceFeatures::CopyBuffer)) {\n    return;\n  }\n\n  ASSERT_TRUE(cmdQueue_ != nullptr);\n\n  std::vector<uint8_t> dataIn2 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 0, 10};\n\n  auto bufferSrc = iglDev_->createBuffer(\n      BufferDesc{\n          .type = BufferDesc::BufferTypeBits::Storage,\n          .data = dataIn2.data(),\n          .length = dataIn2.size(),\n          .storage = ResourceStorage::Private,\n          .debugName = \"bufferSrc\",\n      },\n      nullptr);\n\n  auto bufferDst = iglDev_->createBuffer(\n      BufferDesc{\n          .type = BufferDesc::BufferTypeBits::Storage,\n          .length = dataIn2.size(),\n          .storage = ResourceStorage::Shared,\n          .debugName = \"bufferDst\",\n      },\n      nullptr);\n\n  {\n    auto cmdBuffer = cmdQueue_->createCommandBuffer({}, nullptr);\n    ASSERT_TRUE(cmdBuffer != nullptr);\n\n    cmdBuffer->copyBuffer(*bufferSrc, *bufferDst, 0, 0, dataIn2.size());\n\n    cmdQueue_->submit(*cmdBuffer);\n    cmdBuffer->waitUntilCompleted();\n  }\n\n  Result ret;\n  const uint8_t* dataOut =\n      static_cast<const uint8_t*>(bufferDst->map(BufferRange(dataIn2.size(), 0), &ret));\n  ASSERT_TRUE(dataOut != nullptr);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  for (int i = 0; i < dataIn2.size(); i++) {\n    ASSERT_EQ(dataIn2[i], dataOut[i]);\n  }\n  bufferDst->unmap();\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Common.h\"\n\n#if IGL_PLATFORM_WINDOWS\n#include <windows.h>\n#endif\n\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/VertexInputState.h>\n\n// Use a 1x1 Framebuffer for this test\n#define OFFSCREEN_RT_WIDTH 1\n#define OFFSCREEN_RT_HEIGHT 1\n\nnamespace igl::tests {\n\n//\n// DeviceTest\n//\n// This category of tests are meant for testing Device APIs that are not\n// related to resource creation, e.g. ICapabilities, and getting device\n// statics.\n//\nclass DeviceTest : public ::testing::Test {\n public:\n  DeviceTest() = default;\n  ~DeviceTest() override {\n    // [Alexey] TODO: Somehow D3D12 is sensitive to the order of destruction\n    // of resources and D3D debug layer report leaks\n    // I suspect that might be the actual issue, but it requires deeper D3D12 backend investigation\n    // first Release all GPU resources before destroying the device Resources must be released in\n    // reverse order of creation and before the device is destroyed to avoid VMA cleanup issues\n    if (iglDev_->getBackendType() == igl::BackendType::D3D12) {\n      ib_.reset();\n      vertexInputState_.reset();\n      shaderStages_.reset();\n      framebuffer_.reset();\n      offscreenTexture_.reset();\n      cmdBuf_.reset();\n      cmdQueue_.reset();\n      iglDev_.reset();\n    }\n  }\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   OFFSCREEN_RT_WIDTH,\n                                                   OFFSCREEN_RT_HEIGHT,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize Render Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n\n  CommandBufferDesc cbDesc_ = {};\n  const std::string backend_ = IGL_BACKEND_TYPE;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> ib_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n};\n\n//\n// Last Draw Statics\n//\n// Check and make sure getDrawCount() is working properly.\n//\nTEST_F(DeviceTest, LastDrawStat) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  size_t drawCount = iglDev_->getCurrentDrawCount();\n\n  // Nothing has been drawn yet, so should be 0\n  ASSERT_EQ(drawCount, 0);\n\n  // Do a dummy draw\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  renderPass_.colorAttachments[0].clearColor = {0, 0, 0, 0};\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindRenderPipelineState(pipelineState);\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(0); // draw 0 indices\n  cmds->endEncoding();\n  cmdQueue_->submit(*cmdBuf_);\n\n  // Check draw count again\n  drawCount = iglDev_->getCurrentDrawCount();\n\n  // After the dummy draw, this should be 1\n  ASSERT_EQ(drawCount, 1);\n}\n\n//\n// In Development Feature API Test\n//\n// Make sure what flags have the right defaults, and setter and getter work.\n//\nTEST_F(DeviceTest, InDevelopmentFeature) {\n  // Set a flag\n  iglDev_->setDevelopmentFlags(igl::InDevelopementFeatures::DummyFeatureExample, true);\n  ASSERT_TRUE(iglDev_->testDevelopmentFlags(igl::InDevelopementFeatures::DummyFeatureExample) != 0);\n\n  // Reset the flag\n  iglDev_->setDevelopmentFlags(igl::InDevelopementFeatures::DummyFeatureExample, false);\n  ASSERT_TRUE(iglDev_->testDevelopmentFlags(igl::InDevelopementFeatures::DummyFeatureExample) == 0);\n}\n\n//\n// Get Backend Type\n//\n// Make sure IDevice->getBackendType() only returns expected values\n//\nTEST_F(DeviceTest, GetBackendType) {\n  if (iglDev_->getBackendType() == igl::BackendType::Metal) {\n    ASSERT_EQ(backend_, util::kBackendMtl);\n  } else if (iglDev_->getBackendType() == igl::BackendType::OpenGL) {\n    ASSERT_EQ(backend_, util::kBackendOgl);\n  } else if (iglDev_->getBackendType() == igl::BackendType::Vulkan) {\n    ASSERT_EQ(backend_, util::kBackendVul);\n  } else if (iglDev_->getBackendType() == igl::BackendType::D3D12) {\n    ASSERT_EQ(backend_, util::kBackendD3D12);\n  } else {\n    ASSERT_TRUE(0);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/DeviceFeatureSet.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"util/Common.h\"\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/PlatformDevice.h>\n#endif // IGL_BACKEND_OPENGL\n#include <string>\n\nnamespace igl::tests {\n\n// DeviceFeatureSetTest\n// This test exercises the igl::ICapabilities API.\n\nclass DeviceFeatureSetTest : public ::testing::Test {\n public:\n  DeviceFeatureSetTest() = default;\n  ~DeviceFeatureSetTest() override = default;\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// hasFeature\n//\n// Check DeviceFeatureSet hasFeature list\n//\nTEST_F(DeviceFeatureSetTest, hasFeatureForMacOSOrWinOrAndroidTest) {\n  EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::StandardDerivative));\n\n  const bool backendOpenGL = iglDev_->getBackendType() == igl::BackendType::OpenGL;\n\n  if (backendOpenGL) {\n#if IGL_BACKEND_OPENGL\n    auto& context = iglDev_->getPlatformDevice<igl::opengl::PlatformDevice>()->getContext();\n    const bool usesOpenGLES = igl::opengl::DeviceFeatureSet::usesOpenGLES();\n    const auto& deviceFeatures = context.deviceFeatures();\n    auto glVersion = deviceFeatures.getGLVersion();\n\n    const bool readWriteFramebuffer =\n        glVersion >= igl::opengl::GLVersion::v3_0_ES ||\n        deviceFeatures.isSupported(\"GL_ARB_framebuffer_object\") ||\n        deviceFeatures.isSupported(\"GL_APPLE_framebuffer_multisample\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::ReadWriteFramebuffer), readWriteFramebuffer);\n\n    const bool texture2DArray =\n        (usesOpenGLES ? glVersion >= igl::opengl::GLVersion::v3_0_ES\n                      : (glVersion >= igl::opengl::GLVersion::v3_0 ||\n                         deviceFeatures.isSupported(\"GL_EXT_texture_array\")));\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::Texture2DArray), texture2DArray);\n\n    const bool texture3D = (usesOpenGLES ? glVersion >= igl::opengl::GLVersion::v3_0_ES\n                                         : glVersion >= igl::opengl::GLVersion::v2_0) ||\n                           deviceFeatures.isSupported(\"GL_OES_texture_3D\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::Texture3D), texture3D);\n\n    const bool textureArrayExt = !usesOpenGLES &&\n                                 (deviceFeatures.isSupported(\"GL_EXT_texture_array\") ||\n                                  deviceFeatures.isSupported(\"GL_EXT_gpu_shader4\"));\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::TextureArrayExt), textureArrayExt);\n\n    const bool textureExternalImage =\n        usesOpenGLES && (glVersion >= igl::opengl::GLVersion::v3_0_ES ||\n                         deviceFeatures.isSupported(\"GL_OES_EGL_image_external_essl3\") ||\n                         deviceFeatures.isSupported(\"GL_OES_EGL_image_external\"));\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::TextureExternalImage), textureExternalImage);\n\n    const bool textureNotPot = (!usesOpenGLES || glVersion >= igl::opengl::GLVersion::v3_0_ES) ||\n                               deviceFeatures.isSupported(\"GL_OES_texture_npot\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::TextureNotPot), textureNotPot);\n\n    const bool multiView = deviceFeatures.isSupported(\"GL_OVR_multiview2\") &&\n                           (usesOpenGLES ? glVersion >= igl::opengl::GLVersion::v3_0_ES\n                                         : glVersion >= igl::opengl::GLVersion::v3_0);\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::Multiview), multiView);\n\n    EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::BindUniform));\n\n    const bool texturePartialMipChain = !usesOpenGLES ||\n                                        glVersion >= igl::opengl::GLVersion::v3_0_ES ||\n                                        deviceFeatures.isSupported(\"GL_APPLE_texture_max_level\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain), texturePartialMipChain);\n\n    EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferRing));\n    EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferNoCopy));\n    EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ShaderLibrary));\n    EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BindBytes));\n    EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferDeviceAddress));\n\n    const bool shaderTextureLod = iglDev_->hasFeature(DeviceFeatures::ShaderTextureLodExt) ||\n                                  (usesOpenGLES ? glVersion >= igl::opengl::GLVersion::v3_0_ES\n                                                : glVersion >= igl::opengl::GLVersion::v3_0);\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLod), shaderTextureLod);\n\n    const bool shaderTextureLodExt = usesOpenGLES\n                                         ? deviceFeatures.isSupported(\"GL_EXT_shader_texture_lod\")\n                                         : deviceFeatures.isSupported(\"GL_ARB_shader_texture_lod\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLodExt), shaderTextureLodExt);\n\n    const bool standardDerivativeExt = usesOpenGLES &&\n                                       deviceFeatures.isSupported(\"GL_OES_standard_derivatives\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::StandardDerivativeExt), standardDerivativeExt);\n\n    const bool supportsSRGB =\n        (usesOpenGLES ? (glVersion >= igl::opengl::GLVersion::v3_0_ES ||\n                         deviceFeatures.isSupported(\"GL_EXT_sRGB\"))\n                      : glVersion >= igl::opengl::GLVersion::v2_1 ||\n                            deviceFeatures.isSupported(\"GL_EXT_texture_sRGB\"));\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::SRGB), supportsSRGB);\n\n    const bool hasEGLsRGBSupport = context.eglSupportssRGB();\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::SRGBSwapchain), hasEGLsRGBSupport);\n\n    const bool supportsSRGBWriteControl =\n        usesOpenGLES ? deviceFeatures.isSupported(\"GL_EXT_sRGB_write_control\")\n                     : glVersion >= igl::opengl::GLVersion::v3_0 ||\n                           deviceFeatures.isSupported(\"GL_ARB_framebuffer_sRGB\") ||\n                           deviceFeatures.isSupported(\"GL_EXT_framebuffer_sRGB\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::SRGBWriteControl), supportsSRGBWriteControl);\n\n    const bool samplerMinMaxLod = !usesOpenGLES || glVersion >= igl::opengl::GLVersion::v3_0_ES;\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::SamplerMinMaxLod), samplerMinMaxLod);\n\n    const bool drawIndexedIndirect =\n        (usesOpenGLES && glVersion >= igl::opengl::GLVersion::v3_1_ES) ||\n        (!usesOpenGLES && glVersion >= igl::opengl::GLVersion::v4_0) ||\n        deviceFeatures.isSupported(\"GL_ARB_draw_indirect\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::DrawIndexedIndirect), drawIndexedIndirect);\n\n    const bool multipleRenderTargets = !usesOpenGLES ||\n                                       glVersion >= igl::opengl::GLVersion::v3_0_ES ||\n                                       deviceFeatures.isSupported(\"GL_EXT_draw_buffers\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::MultipleRenderTargets), multipleRenderTargets);\n\n    const bool explicitBinding =\n        (usesOpenGLES && glVersion >= igl::opengl::GLVersion::v3_1_ES) ||\n        (!usesOpenGLES && (glVersion >= igl::opengl::GLVersion::v4_2 ||\n                           deviceFeatures.isSupported(\"GL_ARB_shading_language_420pack\")));\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::ExplicitBinding), explicitBinding);\n\n    const bool explicitBindingExt = deviceFeatures.isSupported(\"GL_ARB_shading_language_420pack\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::ExplicitBindingExt), explicitBindingExt);\n\n    const bool textureFormatRG =\n        (usesOpenGLES && (glVersion >= igl::opengl::GLVersion::v3_0_ES ||\n                          deviceFeatures.isSupported(\"GL_EXT_texture_rg\"))) ||\n        (!usesOpenGLES && (glVersion >= igl::opengl::GLVersion::v3_0 ||\n                           deviceFeatures.isSupported(\"GL_ARB_texture_rg\")));\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::TextureFormatRG), textureFormatRG);\n    EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ValidationLayersEnabled));\n    const bool externalMemoryObjects = deviceFeatures.isSupported(\"GL_EXT_memory_object\") &&\n                                       deviceFeatures.isSupported(\"GL_EXT_memory_object_fd\");\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::ExternalMemoryObjects), externalMemoryObjects);\n\n    EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::PushConstants));\n#endif // IGL_BACKEND_OPENGL\n  } else {\n    // non OpenGL backends\n    EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ReadWriteFramebuffer));\n    EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::TextureNotPot));\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::SRGB), true);\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::SRGBSwapchain), true);\n    EXPECT_EQ(iglDev_->hasFeature(DeviceFeatures::SRGBWriteControl), false);\n\n    if (iglDev_->getBackendType() == igl::BackendType::Vulkan) {\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::Texture2DArray));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::Texture3D));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureArrayExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureExternalImage));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::Multiview));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BindUniform));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferRing));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferNoCopy));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ShaderLibrary));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BindBytes));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::BufferDeviceAddress));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLod));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLodExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::StandardDerivativeExt));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::SamplerMinMaxLod));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::DrawIndexedIndirect));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::MultipleRenderTargets));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ExplicitBinding));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ExplicitBindingExt));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::TextureFormatRG));\n      // On Android Validation Layers are only enabled for debug builds by default\n#if (IGL_PLATFORM_ANDROID && !IGL_DEBUG) || !IGL_DEBUG || defined(IGL_DISABLE_VALIDATION)\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ValidationLayersEnabled));\n#else\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ValidationLayersEnabled));\n#endif // IGL_PLATFORM_ANDROID\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ExternalMemoryObjects));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::PushConstants));\n    } else if (iglDev_->getBackendType() == igl::BackendType::Metal) {\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::Texture2DArray));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::Texture3D));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureArrayExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureExternalImage));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::Multiview));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BindUniform));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::BufferRing));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::BufferNoCopy));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ShaderLibrary));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::BindBytes));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferDeviceAddress));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLod));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLodExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::StandardDerivativeExt));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::SamplerMinMaxLod));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::DrawIndexedIndirect));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::MultipleRenderTargets));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ExplicitBinding));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ExplicitBindingExt));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::TextureFormatRG));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ValidationLayersEnabled));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ExternalMemoryObjects));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::PushConstants));\n    } else if (iglDev_->getBackendType() == igl::BackendType::D3D12) {\n      // D3D12 backend\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::Texture2DArray));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::Texture3D));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureArrayExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureExternalImage));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::Multiview));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BindUniform));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferRing));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferNoCopy));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ShaderLibrary));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BindBytes));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferDeviceAddress));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLod));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLodExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::StandardDerivativeExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::SamplerMinMaxLod));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::DrawIndexedIndirect));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::MultipleRenderTargets));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ExplicitBinding));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ExplicitBindingExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureFormatRG));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ValidationLayersEnabled));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ExternalMemoryObjects));\n      EXPECT_TRUE(iglDev_->hasFeature(\n          DeviceFeatures::PushConstants)); // D3D12 supports push constants via root constants\n                                           // (shader register b2)\n    } else {\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::Texture2DArray));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::Texture3D));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureArrayExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureExternalImage));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::Multiview));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BindUniform));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferRing));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferNoCopy));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ShaderLibrary));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::BindBytes));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::BufferDeviceAddress));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLod));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ShaderTextureLodExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::StandardDerivativeExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::SamplerMinMaxLod));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::DrawIndexedIndirect));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::MultipleRenderTargets));\n      EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::ExplicitBinding));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ExplicitBindingExt));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::TextureFormatRG));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ValidationLayersEnabled));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::ExternalMemoryObjects));\n      EXPECT_FALSE(iglDev_->hasFeature(DeviceFeatures::PushConstants));\n    }\n  }\n\n  EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::TextureHalfFloat));\n  EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::TextureFloat));\n}\n\n//\n// getTextureFormatCapabilities\n//\n// Since some of the formats may be platform-dependent, we will only spot\n// check a few to make sure the API is working. We should continue to add formats\n// here as we see fit.\n//\nTEST_F(DeviceFeatureSetTest, getTextureFormatCapabilities) {\n  ICapabilities::TextureFormatCapabilities capability = 0;\n\n  // RGBA_UNorm8 should be able to do everything except SampledAttachment on all the platforms\n  capability = iglDev_->getTextureFormatCapabilities(TextureFormat::RGBA_UNorm8);\n  EXPECT_TRUE(contains(capability, ICapabilities::TextureFormatCapabilityBits::Sampled));\n  EXPECT_TRUE(contains(capability, ICapabilities::TextureFormatCapabilityBits::Attachment));\n  EXPECT_TRUE(contains(capability, ICapabilities::TextureFormatCapabilityBits::SampledFiltered));\n  if (iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    EXPECT_TRUE(contains(capability, ICapabilities::TextureFormatCapabilityBits::Storage));\n  }\n\n  // Z_UNorm16 should always be readable by a shader\n  capability = iglDev_->getTextureFormatCapabilities(TextureFormat::Z_UNorm16);\n  EXPECT_TRUE(contains(capability, ICapabilities::TextureFormatCapabilityBits::Sampled));\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Framebuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Common.h\"\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/PlatformDevice.h>\n#endif // #IGL_BACKEND_OPENGL\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n// Use a 1x1 Framebuffer for this test\nconstexpr size_t kOffscreenRtWidth = 1;\nconstexpr size_t kOffscreenRtHeight = 1;\n\n//\n// FramebufferTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass FramebufferTest : public ::testing::Test {\n private:\n public:\n  FramebufferTest() = default;\n  ~FramebufferTest() override = default;\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a render pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the render pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   kOffscreenRtWidth,\n                                                   kOffscreenRtHeight,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    auto depthFormat = TextureFormat::S8_UInt_Z32_UNorm;\n\n    if (backend_ == util::kBackendVul) {\n      depthFormat = TextureFormat::S8_UInt_Z24_UNorm;\n    }\n\n    TextureDesc depthTexDesc = TextureDesc::new2D(depthFormat,\n                                                  kOffscreenRtWidth,\n                                                  kOffscreenRtHeight,\n                                                  TextureDesc::TextureUsageBits::Sampled |\n                                                      TextureDesc::TextureUsageBits::Attachment);\n    depthTexDesc.storage = ResourceStorage::Private;\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    depthStencilTexture_ = iglDev_->createTexture(depthTexDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(depthStencilTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.debugName = \"test\";\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebufferDesc.depthAttachment.texture = depthStencilTexture_;\n    framebufferDesc.stencilAttachment.texture = depthStencilTexture_;\n\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    renderPass_.depthAttachment.loadAction = LoadAction::Clear;\n    renderPass_.depthAttachment.storeAction = StoreAction::Store;\n    renderPass_.depthAttachment.clearDepth = 0.0;\n\n    renderPass_.stencilAttachment.loadAction = LoadAction::Clear;\n    renderPass_.stencilAttachment.storeAction = StoreAction::Store;\n    renderPass_.stencilAttachment.clearStencil = 0;\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vb_ != nullptr);\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Render Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.targetDesc.depthAttachmentFormat = depthStencilTexture_->getFormat();\n    renderPipelineDesc_.targetDesc.stencilAttachmentFormat = depthStencilTexture_->getFormat();\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n\n    //\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n  const std::string backend_ = IGL_BACKEND_TYPE;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<ITexture> depthStencilTexture_;\n\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n};\n\n//\n// Framebuffer Clear Test\n//\n// This test exercises the FB clearing behavior. The expectation is color\n// buffer will be cleared to the color specified, and there will be no\n// leaked settings from previous render passes\n//\nTEST_F(FramebufferTest, Clear) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  std::shared_ptr<IDepthStencilState> depthStencilState;\n  DepthStencilStateDesc desc;\n  desc.isDepthWriteEnabled = true;\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenRtWidth, kOffscreenRtHeight);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  depthStencilState = iglDev_->createDepthStencilState(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(depthStencilState != nullptr);\n\n  //---------------------------------\n  // Clear FB to {0.5, 0.5, 0.5, 0.5}\n  //---------------------------------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  renderPass_.colorAttachments[0].clearColor = {0.501f, 0.501f, 0.501f, 0.501f};\n\n  renderPass_.depthAttachment.clearDepth = 0.501f;\n  renderPass_.stencilAttachment.clearStencil = 128;\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  auto pixels = std::vector<uint32_t>(kOffscreenRtWidth * kOffscreenRtWidth);\n  auto pixelsDepth = std::vector<float>(kOffscreenRtWidth * kOffscreenRtWidth);\n  auto pixelsStencil = std::vector<uint8_t>(kOffscreenRtWidth * kOffscreenRtWidth);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n  ASSERT_EQ(pixels[0], 0x80808080);\n\n#if !IGL_PLATFORM_IOS_SIMULATOR\n  // IOS Simulator has specific restrictions on depth/stencil formats. It has to\n  // be created with \".private\" storage mode. This means we can't read it back\n  // and verify the contents.\n  // https://developer.apple.com/documentation/metal/developing_metal_apps_that_run_in_simulator\n  framebuffer_->copyBytesDepthAttachment(*cmdQueue_, pixelsDepth.data(), rangeDesc);\n  // ASSERT_EQ(pixels_depth[0], 0x80808080);\n\n  // TODO: copyBytesStencilAttachment is not functioning property under Metal/Vulkan\n  // due to unimplemented blitting\n  // Refer to igl/metal/Framebuffer.mm\n  framebuffer_->copyBytesStencilAttachment(*cmdQueue_, pixelsStencil.data(), rangeDesc);\n  // ASSERT_EQ(pixels_stencil[0], 0x80808080);\n#endif\n\n  //-------------------------------------------------------------------------\n  // Clear FB to {0, 0, 0, 0}, but this time bind a pipelineState, disable\n  // the colorWriteMasks, and do a no-op draw\n  //-------------------------------------------------------------------------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  renderPipelineDesc_.targetDesc.colorAttachments[0].colorWriteMask = kColorWriteBitsDisabled;\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  renderPass_.colorAttachments[0].clearColor = {0, 0, 0, 0};\n\n  renderPass_.depthAttachment.clearDepth = 0.0;\n  renderPass_.stencilAttachment.clearStencil = 0;\n\n  cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindRenderPipelineState(pipelineState);\n  cmds->bindDepthStencilState(depthStencilState);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(0); // draw 0 indices\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  pixels = std::vector<uint32_t>(kOffscreenRtWidth * kOffscreenRtWidth);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n  ASSERT_EQ(pixels[0], 0);\n\n#if !IGL_PLATFORM_IOS_SIMULATOR\n  // IOS Simulator has specific restrictions on depth/stencil formats. It has to\n  // be created with \".private\" storage mode. This means we can't read it back\n  // and verify the contents.\n  // https://developer.apple.com/documentation/metal/developing_metal_apps_that_run_in_simulator\n  framebuffer_->copyBytesDepthAttachment(*cmdQueue_, pixelsDepth.data(), rangeDesc);\n  // ASSERT_EQ(pixels_depth[0], 0);\n\n  // TODO: copyBytesStencilAttachment is not functioning property under Metal/Vulkan\n  // due to unimplemented blitting\n  // Refer to igl/metal/Framebuffer.mm\n  framebuffer_->copyBytesStencilAttachment(*cmdQueue_, pixelsStencil.data(), rangeDesc);\n  // ASSERT_EQ(pixels_stencil[0], 0);\n#endif\n\n  //-------------------------------------------------------------------------\n  // Clear FB to {0.5, 0.5, 0.5, 0.5} again. We should not be impacted by the\n  // colorWriteMask setting from the render pass above\n  //-------------------------------------------------------------------------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  renderPass_.colorAttachments[0].clearColor = {0.501f, 0.501f, 0.501f, 0.501f};\n\n  cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  pixels = std::vector<uint32_t>(kOffscreenRtWidth * kOffscreenRtWidth);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n  ASSERT_EQ(pixels[0], 0x80808080);\n}\n\n//\n// Framebuffer Blit Test\n//\n// This test exercises OGL platform device's blitFramebufferColor API.\n// We are including this here rather than making it OGL-specific to also test\n// the device's getPlatformDevice() function, which should return nullptr\n// on Metal\n//\n#if IGL_BACKEND_OPENGL\nTEST_F(FramebufferTest, blitFramebufferColor) {\n  auto* platformDevice = iglDev_->getPlatformDevice<opengl::PlatformDevice>();\n  if (platformDevice) {\n    ASSERT_TRUE(backend_ == util::kBackendOgl);\n\n    /* Bootcamper: Your Code here\n     * At the high level here are the steps:\n     *  1. Create second IFramebuffer, call it framebuffer2 look at set up to\n     *     see how to do this:\n     *        a. create another texture\n     *        b. attach it to a FB descriptor\n     *        c. create the framebuffer object\n     *  2. clear framebuffer_, and make sure it is cleared. See the Clear test\n     *     above to see how to do this\n     *  3. clear framebuffer2 to a different color than framebuffer_, and make\n     *     sure it is cleared\n     *  4. call platforDevice->blitFramebufferColor() from framebuffer2 to\n     *     framebuffer_\n     *  5. Verify that framebuffer_ now has the same color as framebuffer2\n     */\n\n    Result ret;\n\n    //-----------------------------------------\n    // Create an offscreen texture to render to\n    //-----------------------------------------\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   kOffscreenRtWidth,\n                                                   kOffscreenRtHeight,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    const std::shared_ptr<ITexture> offscreenTexture2 = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(offscreenTexture2 != nullptr);\n\n    //-------------------------------------------------------------\n    // Create second IFramebuffer framebuffer2 by offscreenTexture2\n    //-------------------------------------------------------------\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture2;\n    const std::shared_ptr<IFramebuffer> framebuffer2 =\n        iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(framebuffer2 != nullptr);\n\n    //---------------------------------\n    // Clear FB to {0.5, 0.5, 0.5, 0.5}\n    //---------------------------------\n    const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenRtWidth, kOffscreenRtHeight);\n\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    renderPass_.colorAttachments[0].clearColor = {0.501f, 0.501f, 0.501f, 0.501f};\n\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n\n    //----------------------\n    // Read back framebuffer\n    //----------------------\n    auto pixels = std::vector<uint32_t>(kOffscreenRtWidth * kOffscreenRtWidth);\n\n    framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n    ASSERT_EQ(pixels[0], 0x80808080);\n\n    //-------------------------------------------------------------------------\n    // Clear FB2 to {0, 0, 0, 0}\n    //-------------------------------------------------------------------------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    renderPass_.colorAttachments[0].clearColor = {0, 0, 0, 0};\n\n    cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer2);\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n\n    //-----------------------\n    // Read back framebuffer2\n    //-----------------------\n    auto pixels2 = std::vector<uint32_t>(kOffscreenRtWidth * kOffscreenRtWidth);\n\n    framebuffer2->copyBytesColorAttachment(*cmdQueue_, 0, pixels2.data(), rangeDesc);\n    ASSERT_EQ(pixels2[0], 0);\n\n    if (platformDevice->getContext().deviceFeatures().hasInternalFeature(\n            opengl::InternalFeatures::FramebufferBlit)) {\n      //--------------------------------------------------------------\n      // Call blitFramebuffer() from framebuffer_ to framebuffer2\n      //--------------------------------------------------------------\n      platformDevice->blitFramebuffer(framebuffer_,\n                                      0,\n                                      0,\n                                      kOffscreenRtWidth,\n                                      kOffscreenRtWidth,\n                                      framebuffer2,\n                                      0,\n                                      0,\n                                      kOffscreenRtWidth,\n                                      kOffscreenRtWidth,\n                                      GL_COLOR_BUFFER_BIT,\n                                      &ret);\n      ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n      //-------------------------------------------------------------\n      // Read back framebuffer_ & framebuffer2, and examine if equal.\n      //-------------------------------------------------------------\n      framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n      framebuffer2->copyBytesColorAttachment(*cmdQueue_, 0, pixels2.data(), rangeDesc);\n\n      ASSERT_EQ(pixels[0], pixels2[0]);\n      ASSERT_EQ(pixels2[0], 0x80808080);\n    }\n  } else {\n    ASSERT_TRUE(backend_ != util::kBackendOgl);\n  }\n}\n#endif // IGL_BACKEND_OPENGL\n\n//\n// Framebuffer Drawable Unbind Test\n//\n// This test checks that when updateDrawable is called with nullptr, the\n// color attachment is no longer bound. It also checks that draw counts\n// are properly updated when unbind and rebinding a drawable\n//\nTEST_F(FramebufferTest, DrawableUnbind) {\n  // Currently the drawable is always bound to index 0\n  auto colorAttachment = framebuffer_->getColorAttachment(0);\n  auto numOfAttachments = framebuffer_->getColorAttachmentIndices().size();\n  auto depthAttachment = framebuffer_->getDepthAttachment();\n  auto stencilAttachment = framebuffer_->getStencilAttachment();\n\n  ASSERT_TRUE(colorAttachment != nullptr);\n  ASSERT_EQ(numOfAttachments, 1);\n  ASSERT_TRUE(depthAttachment != nullptr);\n  ASSERT_TRUE(stencilAttachment != nullptr);\n\n  framebuffer_->updateDrawable(nullptr);\n  numOfAttachments = framebuffer_->getColorAttachmentIndices().size();\n\n  ASSERT_TRUE(framebuffer_->getColorAttachment(0) == nullptr);\n  ASSERT_EQ(numOfAttachments, 0);\n\n  // Restore framebuffer_ to its original state\n  framebuffer_->updateDrawable(colorAttachment);\n  numOfAttachments = framebuffer_->getColorAttachmentIndices().size();\n\n  ASSERT_EQ(numOfAttachments, 1);\n}\n\n//\n// Framebuffer Drawable Bind Count Test\n//\n// This test checks that when updateDrawable is called repeatedly with\n// the same texture, the number of attachment stays the same.\n//\nTEST_F(FramebufferTest, DrawableBindCount) {\n  // Currently the drawable is always bound to index 0\n  auto colorAttachment = framebuffer_->getColorAttachment(0);\n  auto numOfAttachments = framebuffer_->getColorAttachmentIndices().size();\n\n  ASSERT_TRUE(colorAttachment != nullptr);\n  ASSERT_EQ(numOfAttachments, 1);\n\n  // Rebind the same texture, numAttachment should not change\n  framebuffer_->updateDrawable(colorAttachment);\n  framebuffer_->updateDrawable(colorAttachment);\n  framebuffer_->updateDrawable(colorAttachment);\n  numOfAttachments = framebuffer_->getColorAttachmentIndices().size();\n\n  ASSERT_EQ(numOfAttachments, 1);\n\n  // Create another texture\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 kOffscreenRtWidth,\n                                                 kOffscreenRtHeight,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Attachment);\n\n  Result ret;\n  auto newTex = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(newTex != nullptr);\n\n  // Updating one texture for another, numAttachment should not change\n  framebuffer_->updateDrawable(newTex);\n  numOfAttachments = framebuffer_->getColorAttachmentIndices().size();\n\n  ASSERT_EQ(numOfAttachments, 1);\n\n  // Restore framebuffer_ to its original state\n  framebuffer_->updateDrawable(colorAttachment);\n  numOfAttachments = framebuffer_->getColorAttachmentIndices().size();\n\n  ASSERT_EQ(numOfAttachments, 1);\n}\n\n//\n// Framebuffer Update Drawable Test With Depth And Stencil Attachment\n//\n// This test checks that updateDrawable can be called to bind and unbind depth and stencil\n// attachments.\n//\nTEST_F(FramebufferTest, UpdateDrawableWithDepthAndStencilTest) {\n  // Currently the drawable is always bound to index 0\n  auto colorAttachment = framebuffer_->getColorAttachment(0);\n  auto depthAttachment = framebuffer_->getDepthAttachment();\n  auto stencilAttachment = framebuffer_->getStencilAttachment();\n\n  ASSERT_EQ(framebuffer_->getColorAttachment(0), colorAttachment);\n  ASSERT_EQ(framebuffer_->getDepthAttachment(), depthAttachment);\n  ASSERT_EQ(framebuffer_->getStencilAttachment(), stencilAttachment);\n\n  framebuffer_->updateDrawable(nullptr);\n\n  ASSERT_EQ(framebuffer_->getColorAttachment(0), nullptr);\n  ASSERT_EQ(framebuffer_->getDepthAttachment(), depthAttachment);\n  ASSERT_EQ(framebuffer_->getStencilAttachment(), stencilAttachment);\n\n  framebuffer_->updateDrawable(colorAttachment);\n\n  ASSERT_EQ(framebuffer_->getColorAttachment(0), colorAttachment);\n  ASSERT_EQ(framebuffer_->getDepthAttachment(), depthAttachment);\n  ASSERT_EQ(framebuffer_->getStencilAttachment(), stencilAttachment);\n\n  framebuffer_->updateDrawable(SurfaceTextures{.color = colorAttachment, .depth = nullptr});\n\n  ASSERT_EQ(framebuffer_->getColorAttachment(0), colorAttachment);\n  ASSERT_EQ(framebuffer_->getDepthAttachment(), nullptr);\n  ASSERT_EQ(framebuffer_->getStencilAttachment(), nullptr);\n\n  framebuffer_->updateDrawable(SurfaceTextures{.color = colorAttachment, .depth = depthAttachment});\n\n  ASSERT_EQ(framebuffer_->getColorAttachment(0), colorAttachment);\n  ASSERT_EQ(framebuffer_->getDepthAttachment(), depthAttachment);\n  ASSERT_EQ(framebuffer_->getStencilAttachment(), stencilAttachment);\n\n  framebuffer_->updateDrawable(SurfaceTextures{.color = nullptr, .depth = nullptr});\n\n  ASSERT_EQ(framebuffer_->getColorAttachment(0), nullptr);\n  ASSERT_EQ(framebuffer_->getDepthAttachment(), nullptr);\n  ASSERT_EQ(framebuffer_->getStencilAttachment(), nullptr);\n\n  framebuffer_->updateDrawable(SurfaceTextures{.color = colorAttachment, .depth = depthAttachment});\n\n  ASSERT_EQ(framebuffer_->getColorAttachment(0), colorAttachment);\n  ASSERT_EQ(framebuffer_->getDepthAttachment(), depthAttachment);\n  ASSERT_EQ(framebuffer_->getStencilAttachment(), stencilAttachment);\n}\n\nTEST_F(FramebufferTest, GetColorAttachmentTest) {\n  const bool backendOpenGL = iglDev_->getBackendType() == igl::BackendType::OpenGL;\n\n  if (backendOpenGL) {\n#if IGL_BACKEND_OPENGL\n    if (!iglDev_->getPlatformDevice<igl::opengl::PlatformDevice>()\n             ->getContext()\n             .deviceFeatures()\n             .hasInternalFeature(opengl::InternalFeatures::PackRowLength)) {\n      GTEST_SKIP() << \"Framebuffer PackRowLength is not supported\";\n    }\n#endif\n  }\n\n  // Create a texture to be used as color attachment\n  const int textureWidth = 3;\n  const int textureHeight = 2;\n  const int channelCount = 4;\n  const int channelSize = sizeof(uint8_t);\n  const int textureElementPerRow = textureWidth * channelCount;\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 textureWidth,\n                                                 textureHeight,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Attachment);\n\n  Result ret;\n  auto outputTexture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(outputTexture != nullptr);\n\n  // Create framebuffer using the texture\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = outputTexture;\n  framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(framebuffer_ != nullptr);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  renderPass_.colorAttachments[0].clearColor = {0.501f, 0.501f, 0.501f, 0.501f};\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  const int outputImageWidth = textureWidth + 2;\n  const int outputImageHeight = textureHeight;\n  const int outputElementPerRow = outputImageWidth * channelCount;\n  auto pixels = std::vector<uint8_t>(static_cast<size_t>(outputElementPerRow * textureHeight), 0);\n\n  const auto rangeDesc = igl::TextureRangeDesc::new2D(0, 0, textureWidth, textureHeight);\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_,\n                                         0,\n                                         pixels.data(),\n                                         rangeDesc,\n                                         static_cast<size_t>(outputElementPerRow * channelSize));\n\n  for (int i = 0; i < outputImageHeight; i++) {\n    for (int j = 0; j < outputElementPerRow; j++) {\n      if (j < textureElementPerRow) {\n        EXPECT_EQ(pixels[i * outputElementPerRow + j], 128);\n      } else {\n        EXPECT_EQ(pixels[i * outputElementPerRow + j], 0);\n      }\n    }\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/FramebufferInterop.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"util/Common.h\"\n\n#include <memory>\n#include <string>\n#include <vector>\n#include <igl/CommandQueue.h>\n#include <igl/Common.h>\n#include <igl/Device.h>\n#include <igl/base/IFramebufferInterop.h>\n\nnamespace igl::tests {\n\nclass FramebufferInteropTest : public ::testing::Test {\n public:\n  FramebufferInteropTest() = default;\n  ~FramebufferInteropTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_TRUE(device_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  const std::string backend_ = IGL_BACKEND_TYPE;\n};\n\nTEST_F(FramebufferInteropTest, GetColorAttachment) {\n  base::AttachmentInteropDesc colorDesc{\n      .width = 512,\n      .height = 512,\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoD,\n      .format = base::TextureFormat::RGBA_SRGB,\n      .isSampled = true,\n  };\n\n  base::FramebufferInteropDesc fbDesc{};\n  fbDesc.colorAttachments[0] = &colorDesc;\n\n  std::unique_ptr<base::IFramebufferInterop> fbInterop(device_->createFramebufferInterop(fbDesc));\n  ASSERT_NE(fbInterop, nullptr);\n\n  auto* colorAttachment = fbInterop->getColorAttachment(0);\n  ASSERT_NE(colorAttachment, nullptr);\n\n  // Verify attachment properties via getDesc()\n  const auto& desc = colorAttachment->getDesc();\n  EXPECT_EQ(desc.width, 512u);\n  EXPECT_EQ(desc.height, 512u);\n  EXPECT_EQ(desc.format, base::TextureFormat::RGBA_SRGB);\n}\n\nTEST_F(FramebufferInteropTest, GetDepthAttachment) {\n  base::AttachmentInteropDesc colorDesc{\n      .width = 256,\n      .height = 256,\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoD,\n      .format = base::TextureFormat::RGBA_SRGB,\n      .isSampled = true,\n  };\n\n  // Use S8_UInt_Z32_UNorm for cross-backend compatibility (Metal remaps Z_UNorm24 to Z_UNorm32)\n  auto depthFormat = base::TextureFormat::S8_UInt_Z32_UNorm;\n  if (backend_ == util::kBackendVul) {\n    depthFormat = base::TextureFormat::S8_UInt_Z24_UNorm;\n  }\n\n  base::AttachmentInteropDesc depthDesc{\n      .width = 256,\n      .height = 256,\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoD,\n      .format = depthFormat,\n      .isSampled = false,\n  };\n\n  base::FramebufferInteropDesc fbDesc{};\n  fbDesc.colorAttachments[0] = &colorDesc;\n  fbDesc.depthAttachment = &depthDesc;\n\n  std::unique_ptr<base::IFramebufferInterop> fbInterop(device_->createFramebufferInterop(fbDesc));\n  ASSERT_NE(fbInterop, nullptr);\n\n  auto* depthAttachment = fbInterop->getDepthAttachment();\n  ASSERT_NE(depthAttachment, nullptr);\n\n  const auto& desc = depthAttachment->getDesc();\n  EXPECT_EQ(desc.width, 256u);\n  EXPECT_EQ(desc.height, 256u);\n  EXPECT_EQ(desc.format, depthFormat);\n}\n\nTEST_F(FramebufferInteropTest, GetNativeFramebuffer) {\n  base::AttachmentInteropDesc colorDesc{\n      .width = 256,\n      .height = 256,\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoD,\n      .format = base::TextureFormat::RGBA_SRGB,\n      .isSampled = true,\n  };\n\n  base::FramebufferInteropDesc fbDesc{};\n  fbDesc.colorAttachments[0] = &colorDesc;\n\n  std::unique_ptr<base::IFramebufferInterop> fbInterop(device_->createFramebufferInterop(fbDesc));\n  ASSERT_NE(fbInterop, nullptr);\n\n  void* nativeFb = fbInterop->getNativeFramebuffer();\n  (void)nativeFb;\n}\n\nTEST_F(FramebufferInteropTest, AttachmentGetNativeImage) {\n  base::AttachmentInteropDesc colorDesc{\n      .width = 256,\n      .height = 256,\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoD,\n      .format = base::TextureFormat::RGBA_SRGB,\n      .isSampled = true,\n  };\n\n  base::FramebufferInteropDesc fbDesc{};\n  fbDesc.colorAttachments[0] = &colorDesc;\n\n  std::unique_ptr<base::IFramebufferInterop> fbInterop(device_->createFramebufferInterop(fbDesc));\n  ASSERT_NE(fbInterop, nullptr);\n\n  auto* colorAttachment = fbInterop->getColorAttachment(0);\n  ASSERT_NE(colorAttachment, nullptr);\n\n  // For some backends it may be not possible to get native image\n  if (device_->getBackendType() != igl::BackendType::OpenGL) {\n    void* nativeImage = colorAttachment->getNativeImage();\n    EXPECT_NE(nativeImage, nullptr);\n  }\n}\n\nTEST_F(FramebufferInteropTest, AttachmentDescProperties) {\n  base::AttachmentInteropDesc colorDesc{\n      .width = 320,\n      .height = 240,\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoD,\n      .format = base::TextureFormat::RGBA_UNorm8,\n      .isSampled = true,\n  };\n\n  base::FramebufferInteropDesc fbDesc{};\n  fbDesc.colorAttachments[0] = &colorDesc;\n\n  std::unique_ptr<base::IFramebufferInterop> fbInterop(device_->createFramebufferInterop(fbDesc));\n  ASSERT_NE(fbInterop, nullptr);\n\n  auto* colorAttachment = fbInterop->getColorAttachment(0);\n  ASSERT_NE(colorAttachment, nullptr);\n\n  const auto& desc = colorAttachment->getDesc();\n  EXPECT_EQ(desc.width, 320u);\n  EXPECT_EQ(desc.height, 240u);\n  EXPECT_EQ(desc.depth, 1u);\n  EXPECT_EQ(desc.numLayers, 1u);\n  EXPECT_EQ(desc.numSamples, 1u);\n  EXPECT_EQ(desc.numMipLevels, 1u);\n  EXPECT_EQ(desc.type, base::TextureType::TwoD);\n  EXPECT_EQ(desc.format, base::TextureFormat::RGBA_UNorm8);\n}\n\nTEST_F(FramebufferInteropTest, MultipleColorAttachments) {\n  base::AttachmentInteropDesc colorDesc0{\n      .width = 256,\n      .height = 256,\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoD,\n      .format = base::TextureFormat::RGBA_SRGB,\n      .isSampled = true,\n  };\n\n  base::AttachmentInteropDesc colorDesc1{\n      .width = 256,\n      .height = 256,\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoD,\n      .format = base::TextureFormat::RGBA_UNorm8,\n      .isSampled = true,\n  };\n\n  base::FramebufferInteropDesc fbDesc{};\n  fbDesc.colorAttachments[0] = &colorDesc0;\n  fbDesc.colorAttachments[1] = &colorDesc1;\n\n  std::unique_ptr<base::IFramebufferInterop> fbInterop(device_->createFramebufferInterop(fbDesc));\n  ASSERT_NE(fbInterop, nullptr);\n\n  auto* attachment0 = fbInterop->getColorAttachment(0);\n  auto* attachment1 = fbInterop->getColorAttachment(1);\n\n  ASSERT_NE(attachment0, nullptr);\n  ASSERT_NE(attachment1, nullptr);\n\n  // Verify different formats\n  EXPECT_EQ(attachment0->getDesc().format, base::TextureFormat::RGBA_SRGB);\n  EXPECT_EQ(attachment1->getDesc().format, base::TextureFormat::RGBA_UNorm8);\n}\n\nTEST_F(FramebufferInteropTest, StereoFramebuffer) {\n  if (device_->getBackendType() == igl::BackendType::OpenGL &&\n      device_->getBackendVersion().majorVersion < 3) {\n    GTEST_SKIP() << \"Stereo rendering is not supported in OpenGL ES 2.0\";\n    return;\n  }\n\n  base::AttachmentInteropDesc colorDesc{\n      .width = 256,\n      .height = 256,\n      .depth = 1,\n      .numLayers = 2,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoDArray,\n      .format = base::TextureFormat::RGBA_SRGB,\n      .isSampled = true,\n  };\n\n  base::FramebufferInteropDesc fbDesc{};\n  fbDesc.colorAttachments[0] = &colorDesc;\n\n  std::unique_ptr<base::IFramebufferInterop> fbInterop(device_->createFramebufferInterop(fbDesc));\n  ASSERT_NE(fbInterop, nullptr);\n\n  auto* colorAttachment = fbInterop->getColorAttachment(0);\n  ASSERT_NE(colorAttachment, nullptr);\n\n  const auto& desc = colorAttachment->getDesc();\n  EXPECT_EQ(desc.numLayers, 2u);\n  EXPECT_EQ(desc.type, base::TextureType::TwoDArray);\n}\n\nTEST_F(FramebufferInteropTest, MultipleFramebuffers) {\n  constexpr size_t kNumFramebuffers = 5;\n  std::vector<std::unique_ptr<base::IFramebufferInterop>> framebuffers;\n  framebuffers.reserve(kNumFramebuffers);\n\n  base::AttachmentInteropDesc colorDesc{\n      .width = 128,\n      .height = 128,\n      .depth = 1,\n      .numLayers = 1,\n      .numSamples = 1,\n      .numMipLevels = 1,\n      .type = base::TextureType::TwoD,\n      .format = base::TextureFormat::RGBA_SRGB,\n      .isSampled = true,\n  };\n\n  base::FramebufferInteropDesc fbDesc{};\n  fbDesc.colorAttachments[0] = &colorDesc;\n\n  for (size_t i = 0; i < kNumFramebuffers; ++i) {\n    std::unique_ptr<base::IFramebufferInterop> fbInterop(device_->createFramebufferInterop(fbDesc));\n    ASSERT_NE(fbInterop, nullptr) << \"Failed to create framebuffer \" << i;\n    framebuffers.push_back(std::move(fbInterop));\n  }\n\n  // All framebuffers should have valid color attachments\n  for (size_t i = 0; i < kNumFramebuffers; ++i) {\n    EXPECT_NE(framebuffers[i]->getColorAttachment(0), nullptr)\n        << \"Framebuffer \" << i << \" has null color attachment\";\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Hash.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"data/ShaderData.h\"\n#include \"util/Common.h\"\n\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/DepthStencilState.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/Shader.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\nclass TestShaderStages : public IShaderStages {\n public:\n  TestShaderStages() : IShaderStages(ShaderStagesDesc{}) {}\n};\n\n//\n// ResourceTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass HashTest : public ::testing::Test {\n public:\n  HashTest() = default;\n  ~HashTest() override = default;\n\n  // Set up common resources. This will create a device, a command queue,\n  // and a command buffer\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n};\n\n//\n// RenderPipelineDesc1\n//\n// Test hashing correctness in the RenderPipelineDesc structure\n//\nTEST_F(HashTest, GraphicsPipeline1) {\n  RenderPipelineDesc descOne, descTwo;\n\n  // Should have the same hash\n  ASSERT_EQ(std::hash<RenderPipelineDesc>()(descOne), std::hash<RenderPipelineDesc>()(descTwo));\n\n  // Modify descTwo 1\n  descTwo.cullMode = igl::CullMode::Front;\n\n  ASSERT_NE(std::hash<RenderPipelineDesc>()(descOne), std::hash<RenderPipelineDesc>()(descTwo));\n  descTwo.cullMode = descOne.cullMode;\n\n  // Modify descTwo 2\n  descTwo.fragmentUnitSamplerMap[0] = IGL_NAMEHANDLE(\"hello\");\n\n  ASSERT_NE(std::hash<RenderPipelineDesc>()(descOne), std::hash<RenderPipelineDesc>()(descTwo));\n  descTwo.fragmentUnitSamplerMap[0] = descOne.fragmentUnitSamplerMap[0];\n\n  // Modify shaderStages\n  descTwo.shaderStages = std::make_shared<TestShaderStages>();\n\n  ASSERT_NE(std::hash<RenderPipelineDesc>()(descOne), std::hash<RenderPipelineDesc>()(descTwo));\n  descTwo.shaderStages = descOne.shaderStages;\n}\n\n//\n// RenderPipelineDesc2\n//\n// This test checks to see if the definition of GraphicsPipeline has changed.\n// For simplicity, we are only checking this on a 64-bit machine since\n// developers use 64-bit machines.\n//\n// If this test fails, then that means you have changed the definition of\n// RenderPipelineDesc, most likely by adding extra fields. If this is the\n// case, then double check if the hashing function needs to be updated and\n// after that, update the expectedSize here so the test will pass.\n//\nTEST_F(HashTest, GraphicsPipeline2) {\n  // Pass this test on a 32-bit machine\n  if (sizeof(size_t) == 4) {\n    return;\n  }\n\n  // 64 is the size without unitSamplerMaps, colorAttachments, and debugName as those fields may\n  // vary between compilers and machines\n  const size_t expectedSize = 64 + 2 * sizeof(std::unordered_map<size_t, std::string>) +\n                              sizeof(std::unordered_map<size_t, NameHandle>) +\n                              sizeof(std::vector<RenderPipelineDesc::TargetDesc::ColorAttachment>) +\n                              sizeof(NameHandle) +\n                              sizeof(std::shared_ptr<ISamplerState>) * IGL_TEXTURE_SAMPLERS_MAX;\n\n  ASSERT_EQ(expectedSize, sizeof(RenderPipelineDesc));\n}\n\n//\n// RenderPipelineDesc3\n//\n// This test checks the \"==\" operator, which is a necessary complement to\n// hashing, since this is how unordered_map uses in case of collision.\n//\nTEST_F(HashTest, GraphicsPipeline3) {\n  RenderPipelineDesc descOne, descTwo;\n\n  ASSERT_TRUE(descOne == descTwo);\n\n  // Change and restore cull mode\n  descTwo.cullMode = igl::CullMode::Front;\n  ASSERT_TRUE(descOne != descTwo);\n  descTwo.cullMode = descOne.cullMode;\n  ASSERT_TRUE(descOne == descTwo);\n\n  // Change and restore winding mode\n  descTwo.frontFaceWinding = igl::WindingMode::Clockwise;\n  ASSERT_TRUE(descOne != descTwo);\n  descTwo.frontFaceWinding = descOne.frontFaceWinding;\n  ASSERT_TRUE(descOne == descTwo);\n\n  // Change and restore depthAttachmentFormat\n  descTwo.targetDesc.depthAttachmentFormat = TextureFormat::A_UNorm8;\n  ASSERT_TRUE(descOne != descTwo);\n  descTwo.targetDesc.depthAttachmentFormat = descOne.targetDesc.depthAttachmentFormat;\n  ASSERT_TRUE(descOne == descTwo);\n\n  // Change and restore stencilAttachmentFormat\n  descTwo.targetDesc.stencilAttachmentFormat = TextureFormat::A_UNorm8;\n  ASSERT_TRUE(descOne != descTwo);\n  descTwo.targetDesc.stencilAttachmentFormat = descOne.targetDesc.stencilAttachmentFormat;\n  ASSERT_TRUE(descOne == descTwo);\n\n  // Change and restore shaderStages\n  descTwo.shaderStages = shaderStages_;\n  ASSERT_TRUE(descOne != descTwo);\n  descTwo.shaderStages = descOne.shaderStages;\n  ASSERT_TRUE(descOne == descTwo);\n}\n\n//\n// VertexInputStateDesc1\n//\n// Test hashing correctness in the VertexInputStateDesc structure\n//\nTEST_F(HashTest, VertexInputState1) {\n  VertexInputStateDesc descOne, descTwo;\n\n  // Should have the same hash\n  ASSERT_EQ(std::hash<VertexInputStateDesc>()(descOne), std::hash<VertexInputStateDesc>()(descTwo));\n\n  // Modify descTwo to have an attribute\n  descTwo.numAttributes = 1;\n  descTwo.numInputBindings = 1;\n  descTwo.attributes[0].format = VertexAttributeFormat::Float4;\n  descTwo.attributes[0].offset = 0;\n  descTwo.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n  descTwo.attributes[0].name = data::shader::kSimplePos;\n  descTwo.attributes[0].location = 0;\n  descTwo.inputBindings[0].stride = sizeof(float) * 4;\n\n  ASSERT_NE(std::hash<VertexInputStateDesc>()(descOne), std::hash<VertexInputStateDesc>()(descTwo));\n\n  // Modify descOne to have the same attribute\n  descOne.numAttributes = 1;\n  descOne.numInputBindings = 1;\n  descOne.attributes[0].format = VertexAttributeFormat::Float4;\n  descOne.attributes[0].offset = 0;\n  descOne.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n  descOne.attributes[0].name = data::shader::kSimplePos;\n  descOne.attributes[0].location = 0;\n  descOne.inputBindings[0].stride = sizeof(float) * 4;\n\n  ASSERT_EQ(std::hash<VertexInputStateDesc>()(descOne), std::hash<VertexInputStateDesc>()(descTwo));\n\n  // Modify a property of the attribute\n  descOne.attributes[0].format = VertexAttributeFormat::Float3;\n\n  ASSERT_NE(std::hash<VertexInputStateDesc>()(descOne), std::hash<VertexInputStateDesc>()(descTwo));\n}\n\n//\n// DepthStencilStateDesc1\n//\n// Test hashing correctness in the DepthStencilStateDesc structure\n//\nTEST_F(HashTest, DepthStencilState1) {\n  DepthStencilStateDesc descOne, descTwo;\n\n  // Should have the same hash\n  ASSERT_EQ(std::hash<DepthStencilStateDesc>()(descOne),\n            std::hash<DepthStencilStateDesc>()(descTwo));\n\n  // Modify descTwo\n  descTwo.isDepthWriteEnabled = true;\n  ASSERT_NE(std::hash<DepthStencilStateDesc>()(descOne),\n            std::hash<DepthStencilStateDesc>()(descTwo));\n\n  // Modify descOne to match\n  descOne.isDepthWriteEnabled = true;\n  ASSERT_EQ(std::hash<DepthStencilStateDesc>()(descOne),\n            std::hash<DepthStencilStateDesc>()(descTwo));\n\n  // Modify descTwo's backFaceStencil\n  descTwo.backFaceStencil.stencilCompareFunction = CompareFunction::Never;\n  ASSERT_NE(std::hash<DepthStencilStateDesc>()(descOne),\n            std::hash<DepthStencilStateDesc>()(descTwo));\n\n  // Modify descOne's backFaceStencil to be similar but not the same\n  descOne.backFaceStencil.stencilCompareFunction = CompareFunction::Never;\n  descOne.backFaceStencil.depthStencilPassOperation = StencilOperation::Replace;\n  ASSERT_NE(std::hash<DepthStencilStateDesc>()(descOne),\n            std::hash<DepthStencilStateDesc>()(descTwo));\n\n  // Match descTwo to descOne\n  descTwo.backFaceStencil.depthStencilPassOperation = StencilOperation::Replace;\n  ASSERT_EQ(std::hash<DepthStencilStateDesc>()(descOne),\n            std::hash<DepthStencilStateDesc>()(descTwo));\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/IglTestsTSANSuppressions.txt",
    "content": "# Use this file to suppress TSAN issues from 3rd party libraries\n# https://github.com/google/sanitizers/wiki/ThreadSanitizerSuppressions\n\n# vkDestroyDevice called in igl::vulkan::Device::~Device() causes false-positive in TSAN because of some swiftshader issue\nrace:igl::vulkan::Device::~Device()\n\n# libvulkan_lvp.so (LLVMpipe Vulkan driver)\n# Lavapipe has internal data races between render and worker threads\n# (e.g. realloc vs memcpy, pthread_mutex ops). Suppress all races in\n# the lavapipe shared library since we cannot fix third-party code.\nrace:libvulkan_lvp.so\n\n# libLLVM.so (LLVM library used by Lavapipe)\n# Lavapipe uses LLVM for JIT compilation, and LLVM has internal data races\n# in StringMap operations between llvmpipe worker threads during shader\n# compilation. This is third-party code we cannot fix.\nrace:libLLVM.so\n"
  },
  {
    "path": "src/igl/tests/Log.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <random>\n#include <string>\n#include <thread>\n#include <igl/Core.h>\n\nnamespace igl::tests {\n\nTEST(LogTest, LogOnceRaceCondition) {\n  auto logSomethingUniqueManyTimes = []() {\n    std::default_random_engine generator;\n    std::uniform_int_distribution<short> distribution('a', 'z');\n    size_t repetitions = 1000;\n    while (repetitions-- > 0) {\n      const size_t len = 16;\n      std::string msg(16, 'a');\n      for (int i = 0; i < len; ++i) {\n        msg[i] = static_cast<char>(distribution(generator));\n      }\n      IGLLogOnce(IGLLogInfo, \"%s\", msg.c_str());\n    }\n  };\n\n  std::thread t1(logSomethingUniqueManyTimes);\n  std::thread t2(logSomethingUniqueManyTimes);\n  std::thread t3(logSomethingUniqueManyTimes);\n  std::thread t4(logSomethingUniqueManyTimes);\n  t1.join();\n  t2.join();\n  t3.join();\n  t4.join();\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Multiview.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Common.h\"\n\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <glm/glm.hpp>\n#include <string>\n\nnamespace igl::tests {\n\n// Use a 1x1 Framebuffer for this test\nconstexpr size_t kOffScreenWidth = 1;\nconstexpr size_t kOffScreenHeight = 1;\n\nusing Colors = std::array<glm::vec4, 2>;\n\n//\n// MultiviewTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass MultiviewTest : public ::testing::Test {\n private:\n public:\n  MultiviewTest() = default;\n  ~MultiviewTest() override = default;\n\n  std::shared_ptr<iglu::ManagedUniformBuffer> createVertexUniformBuffer(IDevice& device,\n                                                                        Result* /*result*/) {\n    std::shared_ptr<iglu::ManagedUniformBuffer> vertUniformBuffer = nullptr;\n\n    const iglu::ManagedUniformBufferInfo ubInfo = {\n        .index = 1,\n        .length = sizeof(Colors),\n        .uniforms =\n            {\n                {.name = \"colors\",\n                 .location = -1,\n                 .type = igl::UniformType::Float4,\n                 .numElements = 2,\n                 .offset = 0,\n                 .elementStride = sizeof(glm::vec4)},\n            },\n    };\n\n    vertUniformBuffer = std::make_shared<iglu::ManagedUniformBuffer>(device, ubInfo);\n\n    IGL_DEBUG_ASSERT(vertUniformBuffer->result.isOk());\n    return vertUniformBuffer;\n  }\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a render pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the render pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    const std::vector<DeviceFeatures> requestedFeatures{igl::DeviceFeatures::Multiview};\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    if (!iglDev_->hasFeature(DeviceFeatures::Multiview)) {\n      GTEST_SKIP() << \"Multiview is unsupported for this platform.\";\n      return;\n    }\n#if IGL_PLATFORM_WINDOWS || (IGL_PLATFORM_LINUX && !IGL_PLATFORM_LINUX_USE_EGL)\n    if (iglDev_->getBackendType() == igl::BackendType::OpenGL) {\n      GTEST_SKIP() << \"Multiview is unsupported for this platform.\";\n      return;\n    }\n#endif\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2DArray(\n        TextureFormat::RGBA_UNorm8,\n        kOffScreenWidth,\n        kOffScreenHeight,\n        2,\n        TextureDesc::TextureUsageBits::Sampled | TextureDesc::TextureUsageBits::Attachment);\n\n    auto depthFormat = TextureFormat::S8_UInt_Z32_UNorm;\n\n#ifndef IGL_PLATFORM_MACOSX\n    if (backend_ == util::kBackendVul) {\n      depthFormat = TextureFormat::S8_UInt_Z24_UNorm;\n    }\n#endif // IGL_PLATFORM_MACOSX\n\n    TextureDesc depthTexDesc = TextureDesc::new2DArray(depthFormat,\n                                                       kOffScreenWidth,\n                                                       kOffScreenHeight,\n                                                       2,\n                                                       TextureDesc::TextureUsageBits::Attachment);\n    depthTexDesc.storage = ResourceStorage::Private;\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message;\n    ASSERT_NE(offscreenTexture_, nullptr);\n\n    depthStencilTexture_ = iglDev_->createTexture(depthTexDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message;\n    ASSERT_NE(depthStencilTexture_, nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    renderPass_.depthAttachment.loadAction = LoadAction::Clear;\n    renderPass_.depthAttachment.storeAction = StoreAction::Store;\n    renderPass_.depthAttachment.clearDepth = 0.0;\n\n    renderPass_.stencilAttachment.loadAction = LoadAction::Clear;\n    renderPass_.stencilAttachment.storeAction = StoreAction::Store;\n    renderPass_.stencilAttachment.clearStencil = 0;\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 1;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(vertexInputState_, nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(ib_, nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(vb_, nullptr);\n\n    // Initialize Render Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.targetDesc.depthAttachmentFormat = depthStencilTexture_->getFormat();\n    renderPipelineDesc_.targetDesc.stencilAttachmentFormat = depthStencilTexture_->getFormat();\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n  const std::string backend_ = IGL_BACKEND_TYPE;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<ITexture> depthStencilTexture_;\n\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, ib_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n\n  Colors colors_;\n};\n\nTEST_F(MultiviewTest, FramebufferMode) {\n  FramebufferDesc desc;\n  EXPECT_TRUE(desc.mode == FramebufferMode::Mono);\n\n  desc.mode = FramebufferMode::Stereo;\n  EXPECT_TRUE(desc.mode == FramebufferMode::Stereo);\n\n  desc.mode = FramebufferMode::Multiview;\n  EXPECT_TRUE(desc.mode == FramebufferMode::Multiview);\n}\n\nTEST_F(MultiviewTest, SinglePassStereo) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Multiview)) {\n    GTEST_SKIP() << \"Multiview is unsupported for this platform.\";\n    return;\n  }\n\n  std::unique_ptr<IShaderStages> stages;\n  if (backend_ == util::kBackendOgl) {\n    igl::tests::util::createShaderStages(iglDev_,\n                                         data::shader::kOglSimpleVertShaderMultiviewEs3,\n                                         igl::tests::data::shader::kShaderFunc,\n                                         data::shader::kOglSimpleFragShaderMultiviewEs3,\n                                         igl::tests::data::shader::kShaderFunc,\n                                         stages);\n  } else if (backend_ == util::kBackendVul) {\n    igl::tests::util::createShaderStages(iglDev_,\n                                         data::shader::kVulkanSimpleVertShaderMultiview,\n                                         igl::tests::data::shader::kShaderFunc,\n                                         data::shader::kVulkanSimpleFragShaderMultiview,\n                                         igl::tests::data::shader::kShaderFunc,\n                                         stages);\n  }\n\n  ASSERT_TRUE(stages);\n\n  shaderStages_ = std::move(stages);\n  renderPipelineDesc_.shaderStages = shaderStages_;\n\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.mode = FramebufferMode::Stereo;\n\n  framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n  framebufferDesc.depthAttachment.texture = depthStencilTexture_;\n  framebufferDesc.stencilAttachment.texture = depthStencilTexture_;\n\n  Result ret;\n  framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(framebuffer_, nullptr);\n\n  Result result{};\n  auto vertUniformBuffer = createVertexUniformBuffer(*iglDev_, &result);\n  ASSERT_TRUE(result.isOk());\n\n  colors_[0].r = 1.0f;\n  colors_[0].g = 0.0f;\n  colors_[0].b = 0.0f;\n  colors_[0].a = 1.0f;\n\n  colors_[1].r = 0.0f;\n  colors_[1].g = 1.0f;\n  colors_[1].b = 1.0f;\n  colors_[1].a = 1.0f;\n\n  *static_cast<Colors*>(vertUniformBuffer->getData()) = colors_;\n\n  const auto pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(pipelineState, nullptr);\n\n  DepthStencilStateDesc desc;\n  desc.isDepthWriteEnabled = true;\n  const auto depthStencilState = iglDev_->createDepthStencilState(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(depthStencilState, nullptr);\n\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cmdBuf_, nullptr);\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n  cmds->bindDepthStencilState(depthStencilState);\n\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  vertUniformBuffer->bind(*iglDev_, *pipelineState, *cmds);\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n  cmdBuf_->present(framebuffer_->getColorAttachment(0));\n  cmdQueue_->submit(*cmdBuf_);\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  auto pixels = std::vector<uint32_t>(kOffScreenWidth * kOffScreenHeight);\n  auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffScreenWidth, kOffScreenHeight);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n  EXPECT_EQ(pixels[0], 0xff0000ff);\n\n  rangeDesc.layer = 1;\n  pixels[0] = 0;\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n  EXPECT_EQ(pixels[0], 0xffffff00);\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/NameHandleTests.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <set>\n#include <igl/NameHandle.h>\n\nnamespace igl::tests {\nnamespace {\nNameHandle a = IGL_NAMEHANDLE(\"a\");\nNameHandle b = IGL_NAMEHANDLE(\"b\");\nNameHandle c = IGL_NAMEHANDLE(\"c\");\nNameHandle someLongerString = IGL_NAMEHANDLE(\"someLongerString\");\n} // namespace\n\nTEST(NameHandleTests, string) {\n  EXPECT_EQ(a.toString(), \"a\");\n  EXPECT_EQ(b.toString(), \"b\");\n  EXPECT_EQ(c.toString(), \"c\");\n  EXPECT_EQ(someLongerString.toString(), \"someLongerString\");\n}\n\nTEST(NameHandleTests, crc32) {\n  EXPECT_EQ(a.getCrc32(), 3904355907);\n  EXPECT_EQ(b.getCrc32(), 1908338681);\n  EXPECT_EQ(c.getCrc32(), 112844655);\n  EXPECT_EQ(someLongerString.getCrc32(), 3994903871);\n}\n\nTEST(NameHandleTests, equality) {\n  EXPECT_EQ(a, a);\n  EXPECT_EQ(b, b);\n\n  EXPECT_NE(a, b);\n}\n\nTEST(NameHandleTests, ordering) {\n  EXPECT_GT(a, b);\n  EXPECT_GT(b, c);\n\n  EXPECT_GE(a, a);\n  EXPECT_GE(a, b);\n  EXPECT_GE(b, c);\n\n  EXPECT_LT(c, b);\n  EXPECT_LT(b, a);\n\n  EXPECT_LE(c, c);\n  EXPECT_LE(c, b);\n  EXPECT_LE(b, a);\n}\n\nTEST(NameHandleTests, set) {\n  std::set s{a, b};\n  EXPECT_EQ(s.size(), 2);\n  EXPECT_NE(s.find(a), s.end());\n  EXPECT_NE(s.find(b), s.end());\n  EXPECT_EQ(s.find(c), s.end());\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/RenderCommandEncoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/RenderCommandEncoder.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/TextureData.h\"\n#include \"util/Common.h\"\n\n#include <cstddef>\n#include <functional>\n#include <memory>\n#include <utility>\n#include <vector>\n#include <igl/Buffer.h>\n#include <igl/CommandBuffer.h>\n#include <igl/DepthStencilState.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/VertexInputState.h>\n\n#define OFFSCREEN_RT_WIDTH 4\n#define OFFSCREEN_RT_HEIGHT 4\n\n#define OFFSCREEN_TEX_WIDTH 4\n#define OFFSCREEN_TEX_HEIGHT 4\n\nnamespace igl::tests {\n\nconst auto kQuarterPixel = (float)(0.5 / OFFSCREEN_RT_WIDTH);\nconst float kBackgroundColor = 0.501f;\nconst uint32_t kBackgroundColorHex = 0x80808080;\n\n/**\n * @brief RenderCommandEncoderTest is a test fixture for all the tests in this file.\n * It takes care of common initialization and allocating of common resources.\n */\nclass RenderCommandEncoderTest : public ::testing::Test {\n private:\n public:\n  RenderCommandEncoderTest() = default;\n  ~RenderCommandEncoderTest() override = default;\n\n  /**\n   * @brief This function sets up a render pass and a render pipeline descriptor\n   * so it is ready to render a simple quad with an input texture to an\n   * offscreen texture.\n   */\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             OFFSCREEN_RT_WIDTH,\n                                             OFFSCREEN_RT_HEIGHT,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n\n    auto depthFormat = TextureFormat::S8_UInt_Z32_UNorm;\n    if (backend_ == util::kBackendVul) {\n      depthFormat = TextureFormat::S8_UInt_Z24_UNorm;\n    }\n\n    TextureDesc depthTexDesc = TextureDesc::new2D(depthFormat,\n                                                  OFFSCREEN_RT_WIDTH,\n                                                  OFFSCREEN_RT_HEIGHT,\n                                                  TextureDesc::TextureUsageBits::Sampled |\n                                                      TextureDesc::TextureUsageBits::Attachment);\n    depthTexDesc.storage = ResourceStorage::Private;\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message;\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    depthStencilTexture_ = iglDev_->createTexture(depthTexDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message;\n    ASSERT_TRUE(depthStencilTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebufferDesc.depthAttachment.texture = depthStencilTexture_;\n    framebufferDesc.stencilAttachment.texture = depthStencilTexture_;\n\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {\n        kBackgroundColor, kBackgroundColor, kBackgroundColor, kBackgroundColor};\n\n    renderPass_.depthAttachment.loadAction = LoadAction::Clear;\n    renderPass_.depthAttachment.storeAction = StoreAction::Store;\n    renderPass_.depthAttachment.clearDepth = 0.0;\n\n    renderPass_.stencilAttachment.loadAction = LoadAction::Clear;\n    renderPass_.stencilAttachment.storeAction = StoreAction::Store;\n    renderPass_.stencilAttachment.clearStencil = 0;\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Render Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required.\n    // It cannot be `const` here as we mutate the desc later.\n    RenderPipelineDesc renderPipelineDesc = {\n        .vertexInputState = vertexInputState_,\n        .shaderStages = shaderStages_,\n        .targetDesc =\n            {\n                .colorAttachments = {{.textureFormat = offscreenTexture_->getFormat()}},\n                .depthAttachmentFormat = depthStencilTexture_->getFormat(),\n                .stencilAttachmentFormat = depthStencilTexture_->getFormat(),\n            },\n        .cullMode = igl::CullMode::Disabled,\n        .fragmentUnitSamplerMap = {{textureUnit_, IGL_NAMEHANDLE(data::shader::kSimpleSampler)}},\n    };\n\n    texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                 OFFSCREEN_TEX_WIDTH,\n                                 OFFSCREEN_TEX_HEIGHT,\n                                 TextureDesc::TextureUsageBits::Sampled);\n    texture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(texture_ != nullptr);\n    const auto rangeDesc = TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT);\n    texture_->upload(rangeDesc, data::texture::kTexRgbaGray4x4.data());\n\n    auto createPipeline = [&renderPipelineDesc, &ret, this](\n                              PrimitiveType topology) -> std::shared_ptr<IRenderPipelineState> {\n      renderPipelineDesc.topology = topology;\n      return iglDev_->createRenderPipeline(renderPipelineDesc, &ret);\n    };\n    renderPipelineStatePoint_ = createPipeline(PrimitiveType::Point);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(renderPipelineStatePoint_ != nullptr);\n    renderPipelineStateLine_ = createPipeline(PrimitiveType::Line);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(renderPipelineStateLine_ != nullptr);\n    renderPipelineStateLineStrip_ = createPipeline(PrimitiveType::LineStrip);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(renderPipelineStateLineStrip_ != nullptr);\n    renderPipelineStateTriangle_ = createPipeline(PrimitiveType::Triangle);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(renderPipelineStateTriangle_ != nullptr);\n    renderPipelineStateTriangleStrip_ = createPipeline(PrimitiveType::TriangleStrip);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(renderPipelineStateTriangleStrip_ != nullptr);\n\n    depthStencilState_ = iglDev_->createDepthStencilState({}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(depthStencilState_ != nullptr);\n\n    bindGroupTexture_ = iglDev_->createBindGroup(\n        BindGroupTextureDesc{\n            .textures = {texture_}, .samplers = {samp_}, .debugName = \"Offscreen texture test\"},\n        nullptr,\n        &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  }\n\n  void encodeAndSubmit(\n      const std::function<void(const std::unique_ptr<IRenderCommandEncoder>&)>& func,\n      bool useBindGroup = false,\n      bool useNewBindTexture = false) {\n    Result ret;\n\n    auto cmdBuffer = cmdQueue_->createCommandBuffer({}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(cmdBuffer != nullptr);\n\n    auto encoder = cmdBuffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n    if (useBindGroup) {\n      encoder->bindBindGroup(bindGroupTexture_);\n    } else {\n      useNewBindTexture ? encoder->bindTexture(textureUnit_, texture_.get())\n                        : encoder->bindTexture(textureUnit_, BindTarget::kFragment, texture_.get());\n      encoder->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n    }\n\n    encoder->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    encoder->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    encoder->bindDepthStencilState(depthStencilState_);\n\n    if (ib_) {\n      encoder->bindIndexBuffer(*ib_, IndexFormat::UInt32);\n    }\n\n    const igl::Viewport viewport = {.x = 0.0f,\n                                    .y = 0.0f,\n                                    .width = (float)OFFSCREEN_RT_WIDTH,\n                                    .height = (float)OFFSCREEN_RT_HEIGHT,\n                                    .minDepth = 0.0f,\n                                    .maxDepth = +1.0f};\n    const igl::ScissorRect scissor = {.x = 0,\n                                      .y = 0,\n                                      .width = (uint32_t)OFFSCREEN_RT_WIDTH,\n                                      .height = (uint32_t)OFFSCREEN_RT_HEIGHT};\n    encoder->bindViewport(viewport);\n    encoder->bindScissorRect(scissor);\n\n    func(encoder);\n\n    encoder->endEncoding();\n\n    cmdQueue_->submit(*cmdBuffer);\n    cmdBuffer->waitUntilCompleted();\n  }\n\n  void verifyFrameBuffer(const std::vector<uint32_t>& expectedPixels) {\n    auto pixels =\n        std::vector<uint32_t>(static_cast<size_t>(OFFSCREEN_RT_WIDTH * OFFSCREEN_RT_WIDTH));\n    framebuffer_->copyBytesColorAttachment(\n        *cmdQueue_,\n        0,\n        pixels.data(),\n        TextureRangeDesc::new2D(0, 0, OFFSCREEN_RT_WIDTH, OFFSCREEN_RT_HEIGHT));\n\n#if IGL_LOGGING_ENABLED\n    debugLog(pixels);\n#endif // IGL_LOGGING_ENABLED\n\n    for (int i = 0; i < OFFSCREEN_RT_HEIGHT; i++) {\n      for (int j = 0; j < OFFSCREEN_RT_WIDTH; j++) {\n        ASSERT_EQ(pixels[(OFFSCREEN_RT_HEIGHT - i - 1) * OFFSCREEN_RT_WIDTH + j],\n                  expectedPixels[i * OFFSCREEN_RT_WIDTH + j]);\n      }\n    }\n  }\n\n  void verifyFrameBuffer(const std::function<void(const std::vector<uint32_t>&)>& func) {\n    auto pixels =\n        std::vector<uint32_t>(static_cast<size_t>(OFFSCREEN_RT_WIDTH * OFFSCREEN_RT_WIDTH));\n    framebuffer_->copyBytesColorAttachment(\n        *cmdQueue_,\n        0,\n        pixels.data(),\n        TextureRangeDesc::new2D(0, 0, OFFSCREEN_RT_WIDTH, OFFSCREEN_RT_HEIGHT));\n\n#if IGL_LOGGING_ENABLED\n    debugLog(pixels);\n#endif // IGL_LOGGING_ENABLED\n\n    func(pixels);\n  }\n\n  void debugLog(const std::vector<uint32_t>& pixels) {\n    IGL_LOG_DEBUG(\"\\nFrameBuffer begins.\\n\");\n    IGL_LOG_DEBUG(\"%s\\n\", ::testing::UnitTest::GetInstance()->current_test_info()->name());\n    for (int i = OFFSCREEN_RT_HEIGHT - 1; i >= 0; i--) {\n      for (int j = 0; j < OFFSCREEN_RT_WIDTH; j++) {\n        IGL_LOG_DEBUG(\"%x, \", pixels[i * OFFSCREEN_RT_WIDTH + j]);\n      }\n      IGL_LOG_DEBUG(\"\\n\");\n    }\n    IGL_LOG_DEBUG(\"\\nFrameBuffer ends.\\n\");\n  }\n\n  void initializeBuffers(const std::vector<float>& verts,\n                         const std::vector<float>& uvs,\n                         const std::vector<uint32_t>& indices = {}) {\n    Result ret;\n    vb_ = iglDev_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                           .data = verts.data(),\n                                           .length = sizeof(float) * verts.size()},\n                                &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vb_ != nullptr);\n\n    uv_ = iglDev_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Vertex,\n                                           .data = uvs.data(),\n                                           .length = sizeof(float) * uvs.size()},\n                                &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(uv_ != nullptr);\n\n    if (!indices.empty()) {\n      ib_ = iglDev_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                             .data = indices.data(),\n                                             .length = sizeof(uint32_t) * indices.size()},\n                                  &ret);\n      ASSERT_TRUE(ret.isOk());\n      ASSERT_TRUE(ib_ != nullptr);\n    }\n  }\n  void initialize8BitIndices(const std::vector<uint8_t>& indices) {\n    Result ret;\n    ib_ = iglDev_->createBuffer(BufferDesc{.type = BufferDesc::BufferTypeBits::Index,\n                                           .data = indices.data(),\n                                           .length = sizeof(uint8_t) * indices.size()},\n                                &ret);\n    ASSERT_TRUE(ret.isOk());\n    ASSERT_TRUE(ib_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<ITexture> depthStencilTexture_;\n\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  std::shared_ptr<ITexture> texture_;\n\n  std::shared_ptr<IRenderPipelineState> renderPipelineStatePoint_;\n  std::shared_ptr<IRenderPipelineState> renderPipelineStateLine_;\n  std::shared_ptr<IRenderPipelineState> renderPipelineStateLineStrip_;\n  std::shared_ptr<IRenderPipelineState> renderPipelineStateTriangle_;\n  std::shared_ptr<IRenderPipelineState> renderPipelineStateTriangleStrip_;\n  std::shared_ptr<IDepthStencilState> depthStencilState_;\n  Holder<BindGroupTextureHandle> bindGroupTexture_;\n\n  const std::string backend_ = IGL_BACKEND_TYPE;\n\n  size_t textureUnit_ = 0;\n}; // namespace igl::tests\n\nTEST_F(RenderCommandEncoderTest, shouldDrawAPoint) {\n  initializeBuffers(\n      // clang-format off\n      { kQuarterPixel, kQuarterPixel, 0.0f, 1.0f },\n      { 0.5, 0.5 } // clang-format on\n  );\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(renderPipelineStatePoint_);\n    encoder->draw(1);\n  });\n\n  auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  std::vector<uint32_t> const expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, grayColor,          kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n  };\n  // clang-format on\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, shouldDrawAPointNewBindTexture) {\n  initializeBuffers(\n      // clang-format off\n      { kQuarterPixel, kQuarterPixel, 0.0f, 1.0f },\n      { 0.5, 0.5 } // clang-format on\n  );\n\n  encodeAndSubmit(\n      [this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n        encoder->bindRenderPipelineState(renderPipelineStatePoint_);\n        encoder->draw(1);\n      },\n      false,\n      true);\n\n  auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  std::vector<uint32_t> const expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, grayColor,          kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n  };\n  // clang-format on\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, shouldDrawALine) {\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f - kQuarterPixel, -1.0f + kQuarterPixel, 0.0f, 1.0f,\n         1.0f + kQuarterPixel, -1.0f + kQuarterPixel, 0.0f, 1.0f,\n      },\n      {\n        0.0f, 0.0f,\n        1.0f, 0.0f,\n      } // clang-format on\n  );\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(renderPipelineStateLine_);\n    encoder->draw(2);\n  });\n\n  auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  std::vector<uint32_t> const expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    grayColor,          grayColor,          grayColor,          grayColor,\n  };\n  // clang-format on\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, shouldDrawLineStrip) {\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f - kQuarterPixel, -1.0f + kQuarterPixel, 0.0f, 1.0f,\n         1.0f + kQuarterPixel, -1.0f + kQuarterPixel, 0.0f, 1.0f,\n         1.0f - kQuarterPixel, -1.0f - kQuarterPixel, 0.0f, 1.0f,\n         1.0f - kQuarterPixel,  1.0f + kQuarterPixel, 0.0f, 1.0f,\n      },\n      {\n        0.0f, 0.0f,\n        1.0f, 0.0f,\n        1.0f, 0.0f,\n        1.0f, 1.0f,\n      } // clang-format on\n  );\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(renderPipelineStateLineStrip_);\n    encoder->draw(4);\n  });\n\n  auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  std::vector<uint32_t> const expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, grayColor,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, grayColor,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, grayColor,\n    grayColor,          grayColor,          grayColor,          grayColor,\n  };\n  // clang-format on\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, drawIndexedFirstIndex) {\n  if (!iglDev_->hasFeature(igl::DeviceFeatures::DrawFirstIndexFirstVertex)) {\n    GTEST_SKIP();\n    return;\n  }\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f - kQuarterPixel, -1.0f,                0.0f, 1.0f,\n         1.0f,                -1.0f,                0.0f, 1.0f,\n         1.0f,                 1.0f + kQuarterPixel, 0.0f, 1.0f,\n      },\n      {\n        0.0f, 0.0f,\n        1.0f, 0.0f,\n        1.0f, 1.0f,\n      },\n      {\n         0, 0, 0, 0, 1, 2, // the first 3 indices are dummies\n      } // clang-format on\n  );\n\n  ASSERT_TRUE(ib_ != nullptr);\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(renderPipelineStateTriangle_);\n    encoder->drawIndexed(3, 1, 3); // skip the first 3 dummy indices\n  });\n\n  const auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  const std::vector<uint32_t> expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, grayColor,\n    kBackgroundColorHex, kBackgroundColorHex, grayColor,          grayColor,\n    kBackgroundColorHex, grayColor,          grayColor,          grayColor,\n    grayColor,          grayColor,          grayColor,          grayColor,\n  };\n  // clang-format on\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, drawIndexed8Bit) {\n  if (!iglDev_->hasFeature(igl::DeviceFeatures::Indices8Bit)) {\n    GTEST_SKIP();\n    return;\n  }\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f - kQuarterPixel, -1.0f,                0.0f, 1.0f,\n         1.0f,                -1.0f,                0.0f, 1.0f,\n         1.0f,                 1.0f + kQuarterPixel, 0.0f, 1.0f,\n      },\n      {\n        0.0f, 0.0f,\n        1.0f, 0.0f,\n        1.0f, 1.0f,\n      } // clang-format on\n  );\n  initialize8BitIndices({0, 1, 2});\n\n  ASSERT_TRUE(ib_ != nullptr);\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(renderPipelineStateTriangle_);\n    encoder->bindIndexBuffer(*ib_, IndexFormat::UInt8);\n    encoder->drawIndexed(3);\n  });\n\n  const auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  const std::vector<uint32_t> expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, grayColor,\n    kBackgroundColorHex, kBackgroundColorHex, grayColor,          grayColor,\n    kBackgroundColorHex, grayColor,          grayColor,          grayColor,\n    grayColor,          grayColor,          grayColor,          grayColor,\n  };\n  // clang-format on\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, drawInstanced) {\n  if (!iglDev_->hasFeature(igl::DeviceFeatures::DrawFirstIndexFirstVertex)) {\n    GTEST_SKIP();\n    return;\n  }\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f - kQuarterPixel, -1.0f,                0.0f, 1.0f,\n         1.0f,                -1.0f,                0.0f, 1.0f,\n         1.0f,                 1.0f + kQuarterPixel, 0.0f, 1.0f,\n      },\n      {\n        0.0f, 0.0f,\n        1.0f, 0.0f,\n        1.0f, 1.0f,\n      },\n      {\n         0, 1, 2,\n      } // clang-format on\n  );\n\n  ASSERT_TRUE(ib_ != nullptr);\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(renderPipelineStateTriangle_);\n    // draw 2 indentical instances, one on top of another; this will trigger drawElementsInstanced()\n    // in OpenGL\n    encoder->drawIndexed(3, 2);\n  });\n\n  const auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  const std::vector<uint32_t> expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, grayColor,\n    kBackgroundColorHex, kBackgroundColorHex, grayColor,          grayColor,\n    kBackgroundColorHex, grayColor,          grayColor,          grayColor,\n    grayColor,          grayColor,          grayColor,          grayColor,\n  };\n  // clang-format on\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, shouldDrawATriangle) {\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f - kQuarterPixel, -1.0f,                0.0f, 1.0f,\n         1.0f,                -1.0f,                0.0f, 1.0f,\n         1.0f,                 1.0f + kQuarterPixel, 0.0f, 1.0f,\n      },\n      {\n        0.0f, 0.0f,\n        1.0f, 0.0f,\n        1.0f, 1.0f,\n      } // clang-format on\n  );\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(renderPipelineStateTriangle_);\n    encoder->draw(3);\n  });\n\n  auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  std::vector<uint32_t> const expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, grayColor,\n    kBackgroundColorHex, kBackgroundColorHex, grayColor,          grayColor,\n    kBackgroundColorHex, grayColor,          grayColor,          grayColor,\n    grayColor,          grayColor,          grayColor,          grayColor,\n  };\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, shouldDrawTriangleStrip) {\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f,  1.0f, 0.0f, 1.0f,\n        -1.0f, -1.0f, 0.0f, 1.0f,\n         1.0f,  1.0f, 0.0f, 1.0f,\n         1.0f, -1.0f, 0.0f, 1.0f,\n      },\n      {\n        0.0, 1.0,\n        0.0, 0.0,\n        1.0, 1.0,\n        1.0, 0.0,\n      } // clang-format on\n  );\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->insertDebugEventLabel(\"Rendering a triangle strip...\");\n    encoder->bindRenderPipelineState(renderPipelineStateTriangleStrip_);\n    encoder->draw(4);\n  });\n\n  verifyFrameBuffer([](const std::vector<uint32_t>& pixels) {\n    for (const auto& pixel : pixels) {\n      ASSERT_EQ(pixel, data::texture::kTexRgbaGray4x4[0]);\n    }\n  });\n}\n\nTEST_F(RenderCommandEncoderTest, shouldDrawTriangleStripCopyTextureToBuffer) {\n  if (iglDev_->getBackendType() != igl::BackendType::Vulkan &&\n      iglDev_->getBackendType() != igl::BackendType::D3D12) {\n    GTEST_SKIP() << \"Not implemented for this backend\";\n    return;\n  }\n\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f,  1.0f, 0.0f, 1.0f,\n        -1.0f, -1.0f, 0.0f, 1.0f,\n         1.0f,  1.0f, 0.0f, 1.0f,\n         1.0f, -1.0f, 0.0f, 1.0f,\n      },\n      {\n        0.0, 1.0,\n        0.0, 0.0,\n        1.0, 1.0,\n        1.0, 0.0,\n      } // clang-format on\n  );\n\n  Result ret;\n\n  std ::shared_ptr<IBuffer> screenCopy = iglDev_->createBuffer(\n      BufferDesc{\n          .type = BufferDesc::BufferTypeBits::Storage,\n          .length = OFFSCREEN_RT_WIDTH * OFFSCREEN_RT_HEIGHT * sizeof(uint32_t),\n          .storage = ResourceStorage::Shared,\n          .debugName = \"Buffer: screen copy\",\n      },\n      &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  auto cmdBuffer = cmdQueue_->createCommandBuffer({}, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuffer != nullptr);\n\n  auto encoder = cmdBuffer->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  encoder->bindTexture(textureUnit_, texture_.get());\n  encoder->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  encoder->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  encoder->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  encoder->bindDepthStencilState(depthStencilState_);\n\n  encoder->bindViewport({.x = 0.0f,\n                         .y = 0.0f,\n                         .width = (float)OFFSCREEN_RT_WIDTH,\n                         .height = (float)OFFSCREEN_RT_HEIGHT,\n                         .minDepth = 0.0f,\n                         .maxDepth = +1.0f});\n  encoder->bindScissorRect({.x = 0,\n                            .y = 0,\n                            .width = (uint32_t)OFFSCREEN_RT_WIDTH,\n                            .height = (uint32_t)OFFSCREEN_RT_HEIGHT});\n\n  encoder->insertDebugEventLabel(\"Rendering a triangle strip...\");\n  encoder->bindRenderPipelineState(renderPipelineStateTriangleStrip_);\n  encoder->draw(4);\n\n  encoder->endEncoding();\n\n  cmdBuffer->copyTextureToBuffer(*framebuffer_->getColorAttachment(0), *screenCopy, 0);\n\n  cmdQueue_->submit(*cmdBuffer);\n  cmdBuffer->waitUntilCompleted();\n\n  const uint32_t* data = static_cast<const uint32_t*>(\n      screenCopy->map(BufferRange(screenCopy->getSizeInBytes()), nullptr));\n  for (size_t i = 0; i != OFFSCREEN_RT_HEIGHT * OFFSCREEN_RT_HEIGHT; i++) {\n    ASSERT_EQ(data[i], data::texture::kTexRgbaGray4x4[0]);\n  }\n  screenCopy->unmap();\n}\n\nTEST_F(RenderCommandEncoderTest, shouldNotDraw) {\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f,  1.0f, 0.0f, 1.0f,\n         1.0f,  1.0f, 0.0f, 1.0f,\n        -1.0f, -1.0f, 0.0f, 1.0f,\n         1.0f,  1.0f, 0.0f, 1.0f,\n         1.0f, -1.0f, 0.0f, 1.0f,\n        -1.0f, -1.0f, 0.0f, 1.0f,\n      },\n      {\n        0.0, 1.0,\n        1.0, 1.0,\n        0.0, 0.0,\n        1.0, 1.0,\n        1.0, 0.0,\n        0.0, 0.0,\n      } // clang-format on\n  );\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(renderPipelineStatePoint_);\n    encoder->draw(0);\n    encoder->bindRenderPipelineState(renderPipelineStateLine_);\n    encoder->draw(0);\n    encoder->bindRenderPipelineState(renderPipelineStateLineStrip_);\n    encoder->draw(0);\n    encoder->bindRenderPipelineState(renderPipelineStateTriangle_);\n    encoder->draw(0);\n    encoder->bindRenderPipelineState(renderPipelineStateTriangleStrip_);\n    encoder->draw(0);\n  });\n\n  verifyFrameBuffer([](const std::vector<uint32_t>& pixels) {\n    for (const auto& pixel : pixels) {\n      ASSERT_EQ(pixel, kBackgroundColorHex);\n    }\n  });\n}\n\nTEST_F(RenderCommandEncoderTest, shouldDrawATriangleBindGroup) {\n#if IGL_PLATFORM_APPLE\n  if (iglDev_->getBackendType() == igl::BackendType::Vulkan) {\n    // @fb-only\n    GTEST_SKIP() << \"Broken on macOS arm64\";\n    return;\n  }\n#endif\n\n  initializeBuffers(\n      // clang-format off\n      {\n        -1.0f - kQuarterPixel, -1.0f,                0.0f, 1.0f,\n         1.0f,                -1.0f,                0.0f, 1.0f,\n         1.0f,                 1.0f + kQuarterPixel, 0.0f, 1.0f,\n      },\n      {\n        0.0f, 0.0f,\n        1.0f, 0.0f,\n        1.0f, 1.0f,\n      } // clang-format on\n  );\n\n  encodeAndSubmit(\n      [this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n        encoder->insertDebugEventLabel(\"Rendering a triangle...\");\n        encoder->bindRenderPipelineState(renderPipelineStateTriangle_);\n        encoder->draw(3);\n      },\n      true);\n\n  auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  std::vector<uint32_t> const expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, grayColor,\n    kBackgroundColorHex, kBackgroundColorHex, grayColor,          grayColor,\n    kBackgroundColorHex, grayColor,          grayColor,          grayColor,\n    grayColor,          grayColor,          grayColor,          grayColor,\n  };\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, DepthBiasShouldDrawAPoint) {\n  initializeBuffers(\n      // clang-format off\n      { kQuarterPixel, kQuarterPixel, 0.0f, 1.0f },\n      { 0.5, 0.5 } // clang-format on\n  );\n\n  encodeAndSubmit([this](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(renderPipelineStatePoint_);\n    encoder->setDepthBias(0, 0, 0);\n    encoder->draw(1);\n  });\n\n  auto grayColor = data::texture::kTexRgbaGray4x4[0];\n  // clang-format off\n  std::vector<uint32_t> const expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, grayColor,          kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n  };\n  // clang-format on\n\n  verifyFrameBuffer(expectedPixels);\n}\n\nTEST_F(RenderCommandEncoderTest, drawUsingBindPushConstants) {\n  if (iglDev_->getBackendType() != igl::BackendType::Vulkan &&\n      iglDev_->getBackendType() != igl::BackendType::D3D12) {\n    GTEST_SKIP() << \"Push constants are only supported in Vulkan and D3D12\";\n    return;\n  }\n\n  initializeBuffers(\n      // clang-format off\n      { kQuarterPixel, kQuarterPixel, 0.0f, 1.0f },\n      { 0.5, 0.5 } // clang-format on\n  );\n\n  // Create new shader stages with push constant shaders\n  std::unique_ptr<IShaderStages> pushConstantStages;\n  if (iglDev_->getBackendType() == igl::BackendType::D3D12) {\n    igl::tests::util::createShaderStages(iglDev_,\n                                         data::shader::kD3D12PushConstantVertShader,\n                                         std::string(\"main\"),\n                                         data::shader::kD3D12PushConstantFragShader,\n                                         std::string(\"main\"),\n                                         pushConstantStages);\n  } else {\n    igl::tests::util::createShaderStages(iglDev_,\n                                         data::shader::kVulkanPushConstantVertShader,\n                                         igl::tests::data::shader::kShaderFunc,\n                                         data::shader::kVulkanPushConstantFragShader,\n                                         igl::tests::data::shader::kShaderFunc,\n                                         pushConstantStages);\n  }\n  ASSERT_TRUE(pushConstantStages);\n  shaderStages_ = std::move(pushConstantStages);\n\n  // Create pipeline with push constant shaders\n  const RenderPipelineDesc pipelineDesc = {\n      .topology = PrimitiveType::Point,\n      .vertexInputState = vertexInputState_,\n      .shaderStages = shaderStages_,\n      .targetDesc = {.colorAttachments = {{.textureFormat = offscreenTexture_->getFormat()}},\n                     .depthAttachmentFormat = depthStencilTexture_->getFormat(),\n                     .stencilAttachmentFormat = depthStencilTexture_->getFormat()},\n      .cullMode = igl::CullMode::Disabled,\n      .fragmentUnitSamplerMap = {{textureUnit_, IGL_NAMEHANDLE(data::shader::kSimpleSampler)}},\n  };\n\n  Result ret;\n  auto pipelineWithPushConstants = iglDev_->createRenderPipeline(pipelineDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  // Color multiplied by 1.5\n  const float pushData[] = {1.5f, 1.5f, 1.5f, 1.5f};\n\n  encodeAndSubmit([&](const std::unique_ptr<IRenderCommandEncoder>& encoder) {\n    encoder->bindRenderPipelineState(pipelineWithPushConstants);\n    encoder->bindPushConstants(pushData, sizeof(pushData), 0);\n    encoder->draw(1);\n  });\n\n  // Expect 0x888888FF (0x888888 * 1.5) in the center of the screen\n  const uint32_t expectedColor = 0xCCCCCCFF;\n\n  // clang-format off\n  std::vector<uint32_t> const expectedPixels {\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, expectedColor,      kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n    kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex, kBackgroundColorHex,\n  };\n  // clang-format on\n\n  verifyFrameBuffer(expectedPixels);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Resource.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"util/Common.h\"\n\n#include <igl/Buffer.h>\n#include <igl/DepthStencilState.h>\n#include <igl/RenderPipelineState.h>\n\nnamespace igl::tests {\n\n//\n// ResourceTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass ResourceTest : public ::testing::Test {\n public:\n  ResourceTest() = default;\n  ~ResourceTest() override = default;\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n\n  struct FragmentFormat {\n    simd::float3 color;\n  };\n  FragmentFormat fragmentParameters_{};\n};\n\n//\n// CreateRenderPipelineReturnNull\n//\n// Make sure that createRenderPipeline() returns nullptr on error.\n// We used to return a partially initialized object on error, and this\n// was causing difficult to reproduce crashes in production.\n//\nTEST_F(ResourceTest, CreateRenderPipelineReturnNull) {\n  Result ret;\n\n  const RenderPipelineDesc desc;\n  std::shared_ptr<IRenderPipelineState> rps;\n\n  // Sending in the blank desc should give an error since the shader modules\n  // are nullptr\n  rps = iglDev_->createRenderPipeline(desc, &ret);\n\n  ASSERT_TRUE(!ret.isOk());\n  ASSERT_TRUE(rps == nullptr);\n}\n\n//\n// Depth Stencil\n//\n// Check creation of depth stencil\n//\nTEST_F(ResourceTest, DepthStencilCreate) {\n  Result ret;\n\n  const DepthStencilStateDesc dsDesc = {};\n  std::shared_ptr<IDepthStencilState> ds;\n\n  ds = iglDev_->createDepthStencilState(dsDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ds != nullptr);\n}\n\n//\n// Buffer\n//\n// Check creation of vertex buffer\n//\nTEST_F(ResourceTest, VertexBuffer) {\n  Result ret;\n  float vertexData[] = {1.0};\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Vertex,\n      .data = vertexData,\n      .length = sizeof(vertexData),\n  };\n  const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(buffer != nullptr);\n}\n\n//\n// Buffer\n//\n// Check creation of uninitialized vertex buffer\n//\nTEST_F(ResourceTest, UninitializedVertexBuffer) {\n  Result ret;\n\n  const int bufferLength = 64;\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Vertex,\n      .length = bufferLength,\n      .storage = ResourceStorage::Shared,\n  };\n  const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(buffer != nullptr);\n  ASSERT_EQ(buffer->getSizeInBytes(), bufferLength);\n}\n\n//\n// Buffer\n//\n// Check creation of index buffer\n//\nTEST_F(ResourceTest, IndexBuffer) {\n  Result ret;\n  uint16_t indexData[] = {\n      0,\n      1,\n      2,\n      1,\n      3,\n      2,\n  };\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .data = indexData,\n      .length = sizeof(indexData),\n  };\n  const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(buffer != nullptr);\n}\n\n//\n// Buffer\n//\n// Check creation of uniform buffer\n//\nTEST_F(ResourceTest, UniformBuffer) {\n  Result ret;\n\n  fragmentParameters_.color = {1.0f, 1.0f, 1.0f};\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Uniform,\n      .data = &fragmentParameters_,\n      .length = sizeof(fragmentParameters_),\n  };\n  const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(buffer != nullptr);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ShaderLibrary.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"util/Common.h\"\n\n#include <igl/ShaderCreator.h>\n\nnamespace igl::tests {\n\nclass ShaderLibraryTest : public ::testing::Test {\n private:\n public:\n  ShaderLibraryTest() = default;\n  ~ShaderLibraryTest() override = default;\n\n  //\n  // SetUp()\n  //\n  void SetUp() override {\n    // Turn off debug breaks, only use in debug mode\n    igl::setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nTEST_F(ShaderLibraryTest, CreateFromSource) {\n  Result ret;\n  if (!iglDev_->hasFeature(DeviceFeatures::ShaderLibrary)) {\n    GTEST_SKIP() << \"Shader Libraries are unsupported for this platform.\";\n    return;\n  }\n\n  const char* source = nullptr;\n  if (iglDev_->getBackendType() == igl::BackendType::Metal) {\n    source = data::shader::kMtlSimpleShader.data();\n  } else if (iglDev_->getBackendType() == igl::BackendType::Vulkan) {\n    source = data::shader::kVulkanSimpleVertShader.data();\n  } else if (iglDev_->getBackendType() == igl::BackendType::D3D12) {\n    source = data::shader::kD3D12SimpleShader.data();\n  } else {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n\n  // Check if source is null before passing it to fromStringInput\n  if (source == nullptr) {\n    GTEST_SKIP() << \"No shader source available for this backend.\";\n    return;\n  }\n\n  auto shaderLibrary = ShaderLibraryCreator::fromStringInput(\n      *iglDev_, source, {{.stage = ShaderStage::Vertex, .entryPoint = \"vertexShader\"}}, \"\", &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(shaderLibrary != nullptr);\n\n  auto vertShaderModule = shaderLibrary->getShaderModule(\"vertexShader\");\n  ASSERT_TRUE(vertShaderModule);\n}\n\nTEST_F(ShaderLibraryTest, CreateFromSingleModuleReturnNullWithEmptyInput) {\n  Result ret;\n  if (!iglDev_->hasFeature(DeviceFeatures::ShaderLibrary)) {\n    GTEST_SKIP() << \"Shader Libraries are unsupported for this platform.\";\n    return;\n  }\n\n  auto shaderLibrary = ShaderLibraryCreator::fromStringInput(\n      *iglDev_, \"\", {{.stage = ShaderStage::Vertex, .entryPoint = \"\"}}, \"\", &ret);\n  ASSERT_TRUE(!ret.isOk());\n  ASSERT_TRUE(shaderLibrary == nullptr);\n}\n\nTEST_F(ShaderLibraryTest, CreateFromSourceMultipleModules) {\n  Result ret;\n  if (!iglDev_->hasFeature(DeviceFeatures::ShaderLibrary)) {\n    GTEST_SKIP() << \"Shader Libraries are unsupported for this platform.\";\n    return;\n  }\n\n  const char* source = nullptr;\n  if (iglDev_->getBackendType() == igl::BackendType::Metal) {\n    source = data::shader::kMtlSimpleShader.data();\n  } else if (iglDev_->getBackendType() == igl::BackendType::Vulkan) {\n    GTEST_SKIP() << \"Vulkan does not support multiple modules from the same source code.\";\n    return;\n  } else if (iglDev_->getBackendType() == igl::BackendType::D3D12) {\n    source = data::shader::kD3D12SimpleShader.data();\n  }\n\n  // Check if source is null before passing it to fromStringInput\n  if (source == nullptr) {\n    GTEST_SKIP() << \"No shader source available for this backend.\";\n    return;\n  }\n\n  auto shaderLibrary = ShaderLibraryCreator::fromStringInput(\n      *iglDev_,\n      source,\n      {\n          {.stage = ShaderStage::Vertex, .entryPoint = \"vertexShader\"},\n          {.stage = ShaderStage::Fragment, .entryPoint = \"fragmentShader\"},\n      },\n      \"\",\n      &ret);\n\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(shaderLibrary != nullptr);\n\n  auto vertShaderModule = shaderLibrary->getShaderModule(\"vertexShader\");\n  ASSERT_TRUE(vertShaderModule);\n\n  auto fragShaderModule = shaderLibrary->getShaderModule(\"fragmentShader\");\n  ASSERT_TRUE(fragShaderModule);\n}\n\nTEST_F(ShaderLibraryTest, CreateFromSourceNoResult) {\n  if (!iglDev_->hasFeature(DeviceFeatures::ShaderLibrary)) {\n    GTEST_SKIP() << \"Shader Libraries are unsupported for this platform.\";\n    return;\n  }\n\n  const char* source = nullptr;\n  if (iglDev_->getBackendType() == igl::BackendType::Metal) {\n    source = data::shader::kMtlSimpleShader.data();\n  } else if (iglDev_->getBackendType() == igl::BackendType::Vulkan) {\n    source = data::shader::kVulkanSimpleVertShader.data();\n  } else if (iglDev_->getBackendType() == igl::BackendType::D3D12) {\n    source = data::shader::kD3D12SimpleShader.data();\n  } else {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n  }\n\n  // Check if source is null before passing it to fromStringInput\n  if (source == nullptr) {\n    GTEST_SKIP() << \"No shader source available for this backend.\";\n    return;\n  }\n\n  auto shaderLibrary = ShaderLibraryCreator::fromStringInput(\n      *iglDev_,\n      source,\n      {{.stage = ShaderStage::Vertex, .entryPoint = \"vertexShader\"}},\n      \"\",\n      nullptr);\n  ASSERT_TRUE(shaderLibrary != nullptr);\n\n  auto vertShaderModule = shaderLibrary->getShaderModule(\"vertexShader\");\n  ASSERT_TRUE(vertShaderModule);\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ShaderModule.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"util/Common.h\"\n\n#include <igl/Shader.h>\n#include <igl/ShaderCreator.h>\n\nnamespace igl::tests {\n\nclass ShaderModuleTest : public ::testing::Test {\n private:\n public:\n  ShaderModuleTest() = default;\n  ~ShaderModuleTest() override = default;\n\n  //\n  // SetUp()\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  const std::string backend_ = IGL_BACKEND_TYPE;\n};\n\n//\n// CompileShaderModuleReturnNull\n//\n// This test makes sure that when an invalid shader is given,\n// compileShaderModule() gives back a nullptr. We had cases where even\n// with an invalid shader, the module still returns a partially\n// initialized object.\n//\nTEST_F(ShaderModuleTest, CompileShaderModuleReturnNull) {\n  Result ret;\n\n  // Vulkan backend has hard coded asserts that we cannot get past.\n  // Manually verified that it will assert if this test were to go\n  // through, and therefore it's catching the failure.\n  if (backend_ == util::kBackendVul) {\n    return;\n  }\n\n  auto shaderModule =\n      ShaderModuleCreator::fromStringInput(*iglDev_,\n                                           \"hello world\",\n                                           {.stage = ShaderStage::Vertex, .entryPoint = \"Mordor\"},\n                                           \"test\",\n                                           &ret);\n  ASSERT_TRUE(!ret.isOk());\n  ASSERT_TRUE(shaderModule == nullptr);\n}\n\nTEST_F(ShaderModuleTest, CompileShaderModuleReturnNullWithEmptyInput) {\n  Result ret;\n\n  auto shaderModule = ShaderModuleCreator::fromStringInput(\n      *iglDev_, \"\", {.stage = ShaderStage::Vertex, .entryPoint = \"\"}, \"test\", &ret);\n  ASSERT_TRUE(!ret.isOk());\n  ASSERT_TRUE(shaderModule == nullptr);\n}\n\nTEST_F(ShaderModuleTest, CompileShaderModule) {\n  Result ret;\n\n  const char* source = nullptr;\n\n  const auto be = iglDev_->getBackendType();\n  if (be == BackendType::OpenGL) {\n    source = data::shader::kOglSimpleVertShader.data();\n  } else if (be == BackendType::Metal) {\n    source = data::shader::kMtlSimpleShader.data();\n  } else if (be == BackendType::Vulkan) {\n    source = data::shader::kVulkanSimpleVertShader.data();\n  } else if (be == BackendType::D3D12) {\n    // Minimal HLSL vertex shader for D3D12 backend\n    source = R\"(\nstruct VSIn { float4 position_in : POSITION; float2 uv_in : TEXCOORD0; };\nstruct VSOut { float4 position : SV_POSITION; float2 uv : TEXCOORD0; };\nVSOut vertexShader(VSIn i) { VSOut o; o.position = i.position_in; o.uv = i.uv_in; return o; }\nVSOut main(VSIn i) { return vertexShader(i); }\n)\";\n  } else {\n    ASSERT_TRUE(0);\n  }\n\n  auto shaderModule = ShaderModuleCreator::fromStringInput(\n      *iglDev_,\n      source,\n      {.stage = ShaderStage::Vertex,\n       .entryPoint = (be == BackendType::D3D12) ? std::string(\"main\")\n                                                : std::string(\"vertexShader\")},\n      \"test\",\n      &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(shaderModule != nullptr);\n}\n\nTEST_F(ShaderModuleTest, ShaderCompilerOptionsEquality) {\n  ShaderCompilerOptions options1;\n  ShaderCompilerOptions options2;\n\n  // Default values should be equal\n  EXPECT_TRUE(options1 == options2);\n  EXPECT_FALSE(options1 != options2);\n\n  // Modify one and they should be unequal\n  options2.fastMathEnabled = false;\n  EXPECT_FALSE(options1 == options2);\n  EXPECT_TRUE(options1 != options2);\n\n  // Make them equal again\n  options1.fastMathEnabled = false;\n  EXPECT_TRUE(options1 == options2);\n  EXPECT_FALSE(options1 != options2);\n}\n\nTEST_F(ShaderModuleTest, ShaderModuleDescEquality) {\n  ShaderModuleDesc desc1 = ShaderModuleDesc::fromStringInput(\n      \"test source\", {.stage = ShaderStage::Vertex, .entryPoint = \"main\"}, \"debugName\");\n  ShaderModuleDesc desc2 = ShaderModuleDesc::fromStringInput(\n      \"test source\", {.stage = ShaderStage::Vertex, .entryPoint = \"main\"}, \"debugName\");\n\n  // Same content should be equal\n  EXPECT_TRUE(desc1 == desc2);\n  EXPECT_FALSE(desc1 != desc2);\n\n  // Different debug name should be unequal\n  ShaderModuleDesc desc3 = ShaderModuleDesc::fromStringInput(\n      \"test source\", {.stage = ShaderStage::Vertex, .entryPoint = \"main\"}, \"differentDebugName\");\n  EXPECT_FALSE(desc1 == desc3);\n  EXPECT_TRUE(desc1 != desc3);\n}\n\nTEST_F(ShaderModuleTest, ShaderLibraryDescEquality) {\n  std::vector<ShaderModuleInfo> moduleInfo1 = {\n      {.stage = ShaderStage::Vertex, .entryPoint = \"vertMain\"}};\n  std::vector<ShaderModuleInfo> moduleInfo2 = {\n      {.stage = ShaderStage::Vertex, .entryPoint = \"vertMain\"}};\n\n  ShaderLibraryDesc desc1 =\n      ShaderLibraryDesc::fromStringInput(\"test source\", moduleInfo1, \"debugName\");\n  ShaderLibraryDesc desc2 =\n      ShaderLibraryDesc::fromStringInput(\"test source\", moduleInfo2, \"debugName\");\n\n  // Same content should be equal\n  EXPECT_TRUE(desc1 == desc2);\n  EXPECT_FALSE(desc1 != desc2);\n\n  // Different debug name should be unequal\n  ShaderLibraryDesc desc3 =\n      ShaderLibraryDesc::fromStringInput(\"test source\", moduleInfo1, \"differentDebugName\");\n  EXPECT_FALSE(desc1 == desc3);\n  EXPECT_TRUE(desc1 != desc3);\n}\n\nTEST_F(ShaderModuleTest, CompileShaderModuleNoResult) {\n  const char* source = nullptr;\n  const auto be2 = iglDev_->getBackendType();\n  if (be2 == BackendType::OpenGL) {\n    source = data::shader::kOglSimpleVertShader.data();\n  } else if (be2 == BackendType::Metal) {\n    source = data::shader::kMtlSimpleShader.data();\n  } else if (be2 == BackendType::Vulkan) {\n    source = data::shader::kVulkanSimpleVertShader.data();\n  } else if (be2 == BackendType::D3D12) {\n    // Minimal HLSL vertex shader for D3D12 backend\n    source = R\"(\nstruct VSIn { float4 position_in : POSITION; float2 uv_in : TEXCOORD0; };\nstruct VSOut { float4 position : SV_POSITION; float2 uv : TEXCOORD0; };\nVSOut vertexShader(VSIn i) { VSOut o; o.position = i.position_in; o.uv = i.uv_in; return o; }\nVSOut main(VSIn i) { return vertexShader(i); }\n)\";\n  } else {\n    ASSERT_TRUE(0);\n  }\n\n  auto shaderModule = ShaderModuleCreator::fromStringInput(\n      *iglDev_,\n      source,\n      {.stage = ShaderStage::Vertex,\n       .entryPoint = (be2 == BackendType::D3D12) ? std::string(\"main\")\n                                                 : std::string(\"vertexShader\")},\n      \"test\",\n      nullptr);\n  ASSERT_TRUE(shaderModule != nullptr);\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Texture.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"Texture.h\"\n\n#include \"data/TextureData.h\"\n#include \"util/TextureValidationHelpers.h\"\n\n#include <igl/Common.h>\n\nnamespace igl::tests {\n\nTEST_F(TextureTest, Upload) {\n  Result ret;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 kOffscreenTexWidth,\n                                                 kOffscreenTexHeight,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Attachment);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n\n  inputTexture_->upload(rangeDesc, data::texture::kTexRgba2x2.data());\n\n  //----------------\n  // Validate data\n  //----------------\n  util::validateUploadedTexture(\n      *iglDev_, *cmdQueue_, inputTexture_, data::texture::kTexRgba2x2.data(), \"Passthrough\");\n}\n\n//\n// Texture Passthrough Test\n//\n// This test uses a simple shader to copy the input texture to a same\n// sized output texture (offscreenTexture_)\n//\nTEST_F(TextureTest, Passthrough) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 kOffscreenTexWidth,\n                                                 kOffscreenTexHeight,\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n\n  inputTexture_->upload(rangeDesc, data::texture::kTexRgba2x2.data());\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //-------\n  // Render\n  //-------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------\n  // Validate output\n  //----------------\n  util::validateFramebufferTexture(\n      *iglDev_, *cmdQueue_, *framebuffer_, data::texture::kTexRgba2x2.data(), \"Passthrough\");\n}\n\n//\n// This test uses a simple shader to copy the input texture with a\n// texture to a same sized output texture (offscreenTexture_)\n// The difference between this test and PassthroughTexture is that\n// a section of the original input texture is updated. This is meant\n// to exercise the sub-texture upload path.\n//\nTEST_F(TextureTest, PassthroughSubTexture) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //------------------------------------------------------\n  // Create input texture and sub-texture, and upload data\n  //------------------------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 kOffscreenTexWidth,\n                                                 kOffscreenTexHeight,\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n\n  inputTexture_->upload(rangeDesc, data::texture::kTexRgba2x2.data());\n\n  // Upload right lower corner as a single-pixel sub-texture.\n  auto singlePixelDesc =\n      TextureRangeDesc::new2D(kOffscreenTexWidth - 1, kOffscreenTexHeight - 1, 1, 1);\n  int32_t singlePixelColor = 0x44332211;\n\n  inputTexture_->upload(singlePixelDesc, &singlePixelColor);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //-------\n  // Render\n  //-------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------\n  // Validate output\n  //----------------\n  util::validateFramebufferTexture(*iglDev_,\n                                   *cmdQueue_,\n                                   *framebuffer_,\n                                   data::texture::kTexRgba2x2Modified.data(),\n                                   \"PassthroughSubTexture\");\n}\n\n//\n// Framebuffer to Texture Copy Test\n//\n// This test will exercise the copy functionality via the following steps:\n//   1. clear FB to (0.5, 0.5, 0.5, 0.5)\n//   2. Copy content to a texture\n//   3. clear FB to (0, 0, 0, 0) and verify it is cleared\n//   4. Copy texture content to FB\n//   5. Verify that the FB is back to (0.5, 0.5, 0.5, 0.5)\n//\nTEST_F(TextureTest, FBCopy) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n  std::shared_ptr<ITexture> dstTexture;\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n\n  //--------------------------------\n  // Create copy destination texture\n  //--------------------------------\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           kOffscreenTexWidth,\n                                           kOffscreenTexHeight,\n                                           TextureDesc::TextureUsageBits::Sampled);\n  texDesc.debugName = \"Texture: TextureTest::FBCopy::dstTexture\";\n  dstTexture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(dstTexture != nullptr);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //---------------------------------\n  // Clear FB to {0.5, 0.5, 0.5, 0.5}\n  //---------------------------------\n  renderPass_.colorAttachments[0].clearColor = {0.501f, 0.501f, 0.501f, 0.501f};\n\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n  cmds->bindRenderPipelineState(pipelineState);\n\n  // draw 0 indices here just to clear the FB\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(0);\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------------------------------------------------------\n  // Validate framebuffer texture\n  //----------------------------------------------------------------------\n  util::validateFramebufferTexture(*iglDev_,\n                                   *cmdQueue_,\n                                   *framebuffer_,\n                                   data::texture::kTexRgbaGray2x2.data(),\n                                   \"After Initial Clear\");\n\n  //------------------------\n  // Copy content to texture\n  //------------------------\n  framebuffer_->copyTextureColorAttachment(*cmdQueue_, 0, dstTexture, rangeDesc);\n\n  //-------------------------\n  // Clear FB to {0, 0, 0, 0}\n  //-------------------------\n  renderPass_.colorAttachments[0].clearColor = {0, 0, 0, 0};\n\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n  cmds->bindRenderPipelineState(pipelineState);\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(0);\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //-----------------------------------\n  // Validate framebuffer texture again\n  //-----------------------------------\n  util::validateFramebufferTexture(*iglDev_,\n                                   *cmdQueue_,\n                                   *framebuffer_,\n                                   data::texture::kTexRgbaClear2x2.data(),\n                                   \"After Second Clear\");\n\n  //---------------------------------------------\n  // Copy dstTexture to FB so we can read it back\n  //---------------------------------------------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  // Using dstTexture as input here\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, dstTexture.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //------------------------------------------------------\n  // Read back framebuffer. Should be {0.5, 0.5, 0.5, 0.5}\n  //------------------------------------------------------\n  util::validateFramebufferTexture(\n      *iglDev_, *cmdQueue_, *framebuffer_, data::texture::kTexRgbaGray2x2.data(), \"After Copy\");\n}\n\nconstexpr uint32_t kAlignedPixelsWidth = 3u;\nconstexpr uint32_t kAlignedPixelsHeight = 2u;\n\nconstexpr std::array<uint32_t, 6> kPixelsAligned12 = {1u, 2u, 3u, 4u, 5u, 6u};\n\n// clang-format off\nconstexpr std::array<uint8_t, 28> kPixelsAligned14 = {\n    1, 0, 0, 0,\n    2, 0, 0, 0,\n    3, 0, 0, 0,\n    0, 0, // Expected to be skipped\n    4, 0, 0, 0,\n    5, 0, 0, 0,\n    6, 0, 0, 0,\n    0, 0, // Expected to be skipped\n};\n// clang-format on\nconstexpr std::array<uint32_t, 8> kPixelsAligned16 = {1u,\n                                                      2u,\n                                                      3u,\n                                                      0x00000000u, // Expected to be skipped\n                                                      4u,\n                                                      5u,\n                                                      6u,\n                                                      0x00000000u}; // Expected to be skipped\nconstexpr std::array<uint32_t, 10> kPixelsAligned20 = {1u,\n                                                       2u,\n                                                       3u,\n                                                       0x00000000u, // Expected to be skipped\n                                                       0x00000000u, // Expected to be skipped\n                                                       4u,\n                                                       5u,\n                                                       6u,\n                                                       0x00000000u, // Expected to be skipped\n                                                       0x00000000u}; // Expected to be skipped\n\nconstexpr std::array<std::pair<const void*, uint32_t>, 4> kPixelAlignments = {\n    // 12 byte row will triggers 4 byte alignment.\n    // No padding required since the width equals number of input pixels per row.\n    std::make_pair(kPixelsAligned12.data(), kAlignedPixelsWidth * 4u),\n    // 14 byte row will trigger 2 byte alignment since texture width is set to 3.\n    // Padding of 0.5 pixels used per row of width 3.\n    std::make_pair(kPixelsAligned14.data(), kAlignedPixelsWidth * 4u + 2u),\n    // 16 byte row will trigger 8 byte alignment since texture width is set to 3.\n    // Padding of 1 pixel used per row of width 3.\n    std::make_pair(kPixelsAligned16.data(), (kAlignedPixelsWidth + 1u) * 4u),\n    // 20 byte row is neither 8, 4, 2, nor 1 byte aligned.\n    // Padding of 2 pixels used per row of width 3.\n    std::make_pair(kPixelsAligned20.data(), (kAlignedPixelsWidth + 2u) * 4u),\n};\n\n//\n// Test ITexture::repackData\n//\nTEST_F(TextureTest, RepackData) {\n  const auto properties = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n  const auto range = TextureRangeDesc::new2D(0, 0, kAlignedPixelsWidth, kAlignedPixelsHeight);\n\n  for (const auto& [data, bytesPerRow] : kPixelAlignments) {\n    const size_t alignedSize =\n        static_cast<size_t>(kAlignedPixelsWidth) * static_cast<size_t>(kAlignedPixelsHeight);\n    const size_t unalignedSize =\n        static_cast<size_t>(kAlignedPixelsHeight) * static_cast<size_t>(bytesPerRow);\n    {\n      //------------------\n      // Test packing data\n      //------------------\n\n      std::vector<uint32_t> packedData(alignedSize);\n      ITexture::repackData(properties,\n                           range,\n                           static_cast<const uint8_t*>(data),\n                           bytesPerRow,\n                           reinterpret_cast<uint8_t*>(packedData.data()),\n                           0);\n\n      for (size_t i = 0; i < packedData.size(); ++i) {\n        EXPECT_EQ(packedData[i], kPixelsAligned12[i]);\n      }\n    }\n\n    {\n      //-----------------------------\n      // Test packing + flipping data\n      //-----------------------------\n\n      std::vector<uint32_t> packedFlippedData(alignedSize);\n      ITexture::repackData(properties,\n                           range,\n                           static_cast<const uint8_t*>(data),\n                           bytesPerRow,\n                           reinterpret_cast<uint8_t*>(packedFlippedData.data()),\n                           0,\n                           true);\n\n      for (size_t i = 0; i < kAlignedPixelsWidth; ++i) {\n        EXPECT_EQ(packedFlippedData[i], kPixelsAligned12[i + kAlignedPixelsWidth]);\n        EXPECT_EQ(packedFlippedData[i + kAlignedPixelsWidth], kPixelsAligned12[i]);\n      }\n    }\n\n    {\n      //--------------------\n      // Test unpacking data\n      //--------------------\n\n      std::vector<uint8_t> unpackedData(unalignedSize);\n      ITexture::repackData(properties,\n                           range,\n                           reinterpret_cast<const uint8_t*>(kPixelsAligned12.data()),\n                           0,\n                           unpackedData.data(),\n                           bytesPerRow);\n\n      for (size_t i = 0; i < unpackedData.size(); ++i) {\n        EXPECT_EQ(unpackedData[i], reinterpret_cast<const uint8_t*>(data)[i]);\n      }\n    }\n\n    {\n      //-------------------------------\n      // Test unpacking + flipping data\n      //-------------------------------\n\n      std::vector<uint8_t> unpackedFlippedData(unalignedSize);\n      ITexture::repackData(properties,\n                           range,\n                           reinterpret_cast<const uint8_t*>(kPixelsAligned12.data()),\n                           0,\n                           unpackedFlippedData.data(),\n                           bytesPerRow,\n                           true);\n\n      const auto width = unpackedFlippedData.size() / 2;\n      for (size_t i = 0; i < width; ++i) {\n        EXPECT_EQ(unpackedFlippedData[i + width], reinterpret_cast<const uint8_t*>(data)[i]);\n        EXPECT_EQ(unpackedFlippedData[i], reinterpret_cast<const uint8_t*>(data)[i + width]);\n      }\n    }\n  }\n}\n\n//\n// Pixel upload alignment test\n//\n// In openGL, when writing to a gpu texture from cpu memory the cpu memory pixel rows can be\n// packed a couple of different ways 1, 2, 4 or 8 byte aligned. This test ensures bytesPerRow gets\n// converted to the correct byte alignment in openGL and works as expected in metal\n//\n// If a row has 3 RGBA pixels but is 8 byte aligned the row will be 16 bytes with the last 4 bytes\n// being ignored. If it was instead 1, 2 or 4 byte aligned the row would be 12 bytes as 12 is\n// divisible by a single pixels byte size.\n//\n// Expected output: Pixels read out are correct even when different bytes per pixel are used\n// during upload.\n//\n// Note: This test only covers 4 and 8 byte alignment because copyBytesColorAttachment does not\n// support reading non 4 byte formats\n//\nTEST_F(TextureTest, UploadAlignment) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create new frame buffer with a width and height that can cause different alignments\n  //-------------------------------------\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           kAlignedPixelsWidth,\n                                           kAlignedPixelsHeight,\n                                           TextureDesc::TextureUsageBits::Sampled |\n                                               TextureDesc::TextureUsageBits::Attachment);\n  auto customOffscreenTexture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(customOffscreenTexture != nullptr);\n\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = customOffscreenTexture;\n  auto customFramebuffer = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(customFramebuffer != nullptr);\n\n  for (const auto& [data, bytesPerRow] : kPixelAlignments) {\n    //-------------------------------------\n    // Create input texture and upload data\n    //-------------------------------------\n    texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                 kAlignedPixelsWidth,\n                                 kAlignedPixelsHeight,\n                                 TextureDesc::TextureUsageBits::Sampled);\n    inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(inputTexture_ != nullptr);\n\n    const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kAlignedPixelsWidth, kAlignedPixelsHeight);\n\n    inputTexture_->upload(rangeDesc, data, static_cast<size_t>(bytesPerRow));\n\n    //----------------\n    // Create Pipeline\n    //----------------\n    pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(pipelineState != nullptr);\n\n    //-------\n    // Render\n    //-------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, customFramebuffer);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n\n    //----------------\n    // Validate output\n    //----------------\n    const std::string alignmentStr = \"UploadAlignment: \" + std::to_string(bytesPerRow);\n    util::validateFramebufferTexture(\n        *iglDev_, *cmdQueue_, *customFramebuffer, kPixelsAligned12.data(), alignmentStr.c_str());\n  }\n}\n\n//\n// Texture Resize Test\n//\n// This test uses a simple shader to copy the input texture to a different\n// sized output texture (offscreenTexture_)\n//\nTEST_F(TextureTest, Resize) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  constexpr uint32_t kInputTexWidth = 10u;\n  constexpr uint32_t kInputTexHeight = 40u;\n  constexpr uint32_t kOutputTexWidth = 5u;\n  constexpr uint32_t kOutputTexHeight = 5u;\n  constexpr size_t kTextureSize =\n      static_cast<size_t>(kInputTexWidth) * static_cast<size_t>(kInputTexHeight);\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           kInputTexWidth,\n                                           kInputTexHeight,\n                                           TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  auto rangeDesc = TextureRangeDesc::new2D(0, 0, kInputTexWidth, kInputTexHeight);\n\n  // Allocate input texture and set color to 0x80808080\n  std::vector<uint32_t> inputTexData(kTextureSize, 0x80808080);\n  inputTexture_->upload(rangeDesc, inputTexData.data());\n\n  //------------------------------------------------------------------------\n  // Create a different sized output texture, and attach it to a framebuffer\n  //------------------------------------------------------------------------\n  texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                               kOutputTexWidth,\n                               kOutputTexHeight,\n                               TextureDesc::TextureUsageBits::Sampled |\n                                   TextureDesc::TextureUsageBits::Attachment);\n\n  auto outputTex = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(outputTex != nullptr);\n\n  // Create framebuffer using the output texture\n  FramebufferDesc framebufferDesc;\n\n  framebufferDesc.colorAttachments[0].texture = outputTex;\n  auto fb = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(fb != nullptr);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //-------\n  // Render\n  //-------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, fb);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------\n  // Validate output\n  //----------------\n  util::validateFramebufferTexture(\n      *iglDev_, *cmdQueue_, *fb, data::texture::kTexRgbaGray5x5.data(), \"Resize\");\n}\n\n//\n// Similar to \"Texture Resize Test\" but uses a texture view\n//\nTEST_F(TextureTest, ResizeTextureView) {\n  if (!iglDev_->hasFeature(DeviceFeatures::TextureViews)) {\n    GTEST_SKIP() << \"Texture views not supported. Skipping.\";\n  }\n\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  constexpr uint32_t kInputTexWidth = 10u;\n  constexpr uint32_t kInputTexHeight = 40u;\n  constexpr uint32_t kOutputTexWidth = 5u;\n  constexpr uint32_t kOutputTexHeight = 5u;\n  constexpr size_t kTextureSize =\n      static_cast<size_t>(kInputTexWidth) * static_cast<size_t>(kInputTexHeight);\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           kInputTexWidth,\n                                           kInputTexHeight,\n                                           TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  auto rangeDesc = TextureRangeDesc::new2D(0, 0, kInputTexWidth, kInputTexHeight);\n\n  // Allocate input texture and set color to 0x80808080\n  std::vector<uint32_t> inputTexData(kTextureSize, 0x80808080);\n  inputTexture_->upload(rangeDesc, inputTexData.data());\n\n  //------------------------------------------------------------------------\n  // Create a different sized output texture, and attach it to a framebuffer\n  //------------------------------------------------------------------------\n  texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                               kOutputTexWidth,\n                               kOutputTexHeight,\n                               TextureDesc::TextureUsageBits::Sampled |\n                                   TextureDesc::TextureUsageBits::Attachment);\n\n  auto baseTex = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(baseTex != nullptr);\n\n  auto outputTex = iglDev_->createTextureView(baseTex,\n                                              {\n                                                  .layer = 0,\n                                                  .numLayers = 1,\n                                                  .mipLevel = 0,\n                                                  .numMipLevels = 1,\n                                                  .debugName = \"outputTex\",\n                                              },\n                                              &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(outputTex != nullptr);\n\n  // Create framebuffer using the output texture\n  FramebufferDesc framebufferDesc;\n\n  framebufferDesc.colorAttachments[0].texture = outputTex;\n  auto fb = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(fb != nullptr);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //-------\n  // Render\n  //-------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, fb);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------\n  // Validate output\n  //----------------\n  util::validateFramebufferTexture(\n      *iglDev_, *cmdQueue_, *fb, data::texture::kTexRgbaGray5x5.data(), \"Resize\");\n}\n\n//\n// Texture Validate Range 2D\n//\n// This test validates some of the logic in validateRange for 2D textures.\n//\nTEST_F(TextureTest, ValidateRange2D) {\n  Result ret;\n  auto texDesc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8, 8, 8, TextureDesc::TextureUsageBits::Sampled);\n  auto tex = iglDev_->createTexture(texDesc, &ret);\n\n  ret = tex->validateRange(TextureRangeDesc::new2D(0, 0, 8, 8));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2D(4, 4, 4, 4));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2D(0, 0, 4, 4, 1));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2D(0, 0, 12, 12));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2D(0, 0, 0, 0));\n  EXPECT_FALSE(ret.isOk());\n}\n\n//\n// Texture Validate Range Cube\n//\n// This test validates some of the logic in validateRange for Cube textures.\n//\nTEST_F(TextureTest, ValidateRangeCube) {\n  Result ret;\n  auto texDesc = TextureDesc::newCube(\n      TextureFormat::RGBA_UNorm8, 8, 8, TextureDesc::TextureUsageBits::Sampled);\n  auto tex = iglDev_->createTexture(texDesc, &ret);\n\n  ret = tex->validateRange(TextureRangeDesc::newCube(0, 0, 8, 8));\n  EXPECT_TRUE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(0, 0, 8, 8, 1));\n  EXPECT_TRUE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(0, 0, 8, 8, TextureCubeFace::NegX));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::newCube(4, 4, 4, 4));\n  EXPECT_TRUE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(4, 4, 4, 4, 1));\n  EXPECT_TRUE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(4, 4, 4, 4, TextureCubeFace::NegX));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::newCube(0, 0, 4, 4, 1));\n  EXPECT_FALSE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(0, 0, 4, 4, 1, 1));\n  EXPECT_FALSE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(0, 0, 4, 4, TextureCubeFace::NegX, 1));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::newCube(0, 0, 12, 12));\n  EXPECT_FALSE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(0, 0, 12, 12, 1));\n  EXPECT_FALSE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(0, 0, 12, 12, TextureCubeFace::NegX));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::newCube(0, 0, 0, 0));\n  EXPECT_FALSE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(0, 0, 0, 0, 1));\n  EXPECT_FALSE(ret.isOk());\n  ret = tex->validateRange(TextureRangeDesc::newCubeFace(0, 0, 0, 0, TextureCubeFace::NegX));\n  EXPECT_FALSE(ret.isOk());\n}\n\n//\n// Texture Validate Range 3D\n//\n// This test validates some of the logic in validateRange for 3D textures.\n//\nTEST_F(TextureTest, ValidateRange3D) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Texture3D)) {\n    GTEST_SKIP() << \"3D textures not supported. Skipping.\";\n  }\n\n  Result ret;\n  auto texDesc = TextureDesc::new3D(\n      TextureFormat::RGBA_UNorm8, 8, 8, 8, TextureDesc::TextureUsageBits::Sampled);\n  auto tex = iglDev_->createTexture(texDesc, &ret);\n\n  ret = tex->validateRange(TextureRangeDesc::new3D(0, 0, 0, 8, 8, 8));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new3D(4, 4, 4, 4, 4, 4));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new3D(0, 0, 0, 4, 4, 4, 1));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new3D(0, 0, 0, 12, 12, 12));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new3D(0, 0, 0, 0, 0, 0));\n  EXPECT_FALSE(ret.isOk());\n}\n\n//\n// Texture Export Support Test\n//\n// This test verifies:\n// 1. NoExport textures can be created and used on all platforms\n// 2. Exportable textures work only on supported platforms\n// 3. Basic texture operations work for both types where supported\n//\nTEST_F(TextureTest, ExportableTexture) {\n  Result ret;\n\n  // Test NoExport texture (should work on all platforms)\n  auto texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                    8,\n                                    8,\n                                    TextureDesc::TextureUsageBits::Sampled |\n                                        TextureDesc::TextureUsageBits::Attachment);\n  texDesc.exportability = TextureDesc::TextureExportability::NoExport;\n\n  auto texNoExport = iglDev_->createTexture(texDesc, &ret);\n  EXPECT_TRUE(ret.isOk());\n  ASSERT_TRUE(texNoExport != nullptr);\n\n  // Verify basic texture operations\n  auto rangeDesc = TextureRangeDesc::new2D(0, 0, 8, 8);\n  std::vector<uint32_t> inputData(64, 0x80808080);\n  texNoExport->upload(rangeDesc, inputData.data());\n  util::validateUploadedTexture(*iglDev_, *cmdQueue_, texNoExport, inputData.data(), \"NoExport\");\n\n  // Test Exportable texture (platform dependent)\n  texDesc.exportability = TextureDesc::TextureExportability::Exportable;\n  auto texExportable = iglDev_->createTexture(texDesc, &ret);\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n  if (iglDev_->getBackendType() == BackendType::Vulkan) {\n    EXPECT_TRUE(ret.isOk());\n    ASSERT_TRUE(texExportable != nullptr);\n\n    // Verify basic texture operations\n    texExportable->upload(rangeDesc, inputData.data());\n    util::validateUploadedTexture(\n        *iglDev_, *cmdQueue_, texExportable, inputData.data(), \"Exportable\");\n  } else {\n    EXPECT_EQ(ret.code, Result::Code::Unimplemented);\n    ASSERT_TRUE(texExportable == nullptr);\n  }\n#else\n  EXPECT_EQ(ret.code, Result::Code::Unimplemented);\n  ASSERT_TRUE(texExportable == nullptr);\n#endif\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/Texture.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Common.h\"\n\n#include <cstddef>\n#include <cstring>\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\nconstexpr uint32_t kOffscreenTexWidth = 2u;\nconstexpr uint32_t kOffscreenTexHeight = 2u;\n\n//\n// TextureTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass TextureTest : public ::testing::Test {\n private:\n public:\n  TextureTest() = default;\n  ~TextureTest() override = default;\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             kOffscreenTexWidth,\n                                             kOffscreenTexHeight,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n    texDesc.debugName = \"test\";\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n  const std::string backend_ = IGL_BACKEND_TYPE;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n  size_t textureUnit_ = 0;\n};\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TextureArray.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Common.h\"\n#include \"util/TextureValidationHelpers.h\"\n\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <array>\n#include <cstring>\n#include <string>\n#include <igl/NameHandle.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\nconstexpr size_t kOffscreenTexWidth = 2;\nconstexpr size_t kOffscreenTexHeight = 2;\nconstexpr size_t kOffscreenSubTexWidth = 1;\nconstexpr size_t kOffscreenSubTexHeight = 1;\n\nstruct VertexUniforms {\n  int layer = 0;\n};\n//\n// TextureArrayTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass TextureArrayTest : public ::testing::Test {\n private:\n public:\n  TextureArrayTest() = default;\n  ~TextureArrayTest() override = default;\n\n  std::shared_ptr<iglu::ManagedUniformBuffer> createVertexUniformBuffer(IDevice& device,\n                                                                        Result* /*result*/) {\n    std::shared_ptr<iglu::ManagedUniformBuffer> vertUniformBuffer = nullptr;\n\n    const iglu::ManagedUniformBufferInfo vertInfo = {\n        .index = 2,\n        .length = sizeof(VertexUniforms),\n        .uniforms = {\n            UniformDesc{\n                .name = \"layer\",\n                .type = igl::UniformType::Int,\n                .offset = offsetof(VertexUniforms, layer),\n            },\n        }};\n\n    vertUniformBuffer = std::make_shared<iglu::ManagedUniformBuffer>(device, vertInfo);\n\n    IGL_DEBUG_ASSERT(vertUniformBuffer->result.isOk());\n    return vertUniformBuffer;\n  }\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n#if IGL_PLATFORM_LINUX && !IGL_PLATFORM_LINUX_USE_EGL\n    GTEST_SKIP() << \"Fix these tests on Linux\";\n#endif\n\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    if (!iglDev_->hasFeature(DeviceFeatures::Texture2DArray)) {\n      GTEST_SKIP() << \"2D array texture is unsupported for this platform.\";\n      return;\n    }\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   kOffscreenTexWidth,\n                                                   kOffscreenTexHeight,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    if (iglDev_->getBackendType() == BackendType::OpenGL) {\n#if IGL_BACKEND_OPENGL\n      if (iglDev_->getBackendVersion().flavor == BackendFlavor::OpenGL_ES) {\n        util::createShaderStages(iglDev_,\n                                 igl::tests::data::shader::kOglSimpleVertShaderTexArrayEs3,\n                                 igl::tests::data::shader::kShaderFunc,\n                                 igl::tests::data::shader::kOglSimpleFragShaderTexArrayEs3,\n                                 igl::tests::data::shader::kShaderFunc,\n                                 stages);\n      } else {\n        if (!iglDev_->hasRequirement(DeviceRequirement::TextureArrayExtReq)) {\n          util::createShaderStages(iglDev_,\n                                   igl::tests::data::shader::kOglSimpleVertShaderTexArray,\n                                   igl::tests::data::shader::kShaderFunc,\n                                   igl::tests::data::shader::kOglSimpleFragShaderTexArray,\n                                   igl::tests::data::shader::kShaderFunc,\n                                   stages);\n        } else if (iglDev_->hasFeature(DeviceFeatures::TextureArrayExt)) {\n          util::createShaderStages(iglDev_,\n                                   igl::tests::data::shader::kOglSimpleVertShaderTexArrayExt,\n                                   igl::tests::data::shader::kShaderFunc,\n                                   igl::tests::data::shader::kOglSimpleFragShaderTexArrayExt,\n                                   igl::tests::data::shader::kShaderFunc,\n                                   stages);\n        }\n      }\n#if defined(IGL_PLATFORM_LINUX) && IGL_PLATFORM_LINUX\n      GTEST_SKIP() << \"Temporarily disabled.\";\n#endif\n#endif // IGL_BACKEND_OPENGL\n    } else if (iglDev_->getBackendType() == BackendType::Vulkan) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kVulkanSimpleVertShaderTex2dArray,\n                               igl::tests::data::shader::kShaderFunc,\n                               igl::tests::data::shader::kVulkanSimpleFragShaderTex2dArray,\n                               igl::tests::data::shader::kShaderFunc,\n                               stages);\n    } else if (iglDev_->getBackendType() == BackendType::Metal) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kMtlSimpleShaderTxt2dArray,\n                               igl::tests::data::shader::kSimpleVertFunc,\n                               igl::tests::data::shader::kSimpleFragFunc,\n                               stages);\n    } else if (iglDev_->getBackendType() == BackendType::D3D12) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kD3D12SimpleVertShaderTexArray,\n                               igl::tests::data::shader::kShaderFunc,\n                               igl::tests::data::shader::kD3D12SimpleFragShaderTexArray,\n                               igl::tests::data::shader::kShaderFunc,\n                               stages);\n    }\n\n    ASSERT_TRUE(stages != nullptr);\n\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    // Initialize UV data and sampler buffer\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n\n  VertexUniforms vertexUniforms_;\n\n  size_t textureUnit_ = 0;\n};\n\nconstexpr uint32_t kR = 0x1F00000F;\nconstexpr uint32_t kG = 0x002F001F;\nconstexpr uint32_t kB = 0x00003F2F;\nconstexpr uint32_t kC = 0x004F5F3F;\nconstexpr uint32_t kM = 0x6F007F4F;\nconstexpr uint32_t kY = 0x8F9F005F;\n\nconstexpr size_t kNumLayers = 3;\n\n// clang-format off\nconstexpr std::array<uint32_t, 15> kTextureData = {\n  kR, kR, kR, kR, // Base Mip, Layer 0\n  kG, kG, kG, kG, // Base Mip, Layer 1\n  kB, kB, kB, kB, // Base Mip, Layer 2\n  kC,             // Mip 1, Layer 0\n  kM,             // Mip 1, Layer 1\n  kY,             // Mip 1, Layer 2\n};\n\nconstexpr std::array<uint32_t, 12> kSubTextureData = {\n  kC,             // Layer 0\n  kM,             // Layer 1\n  kY,             // Layer 2\n};\n\nconstexpr std::array<uint32_t, 12> kModifiedTextureData = {\n  kR, kR, kR, kC, // Layer 0\n  kG, kG, kG, kM, // Layer 1\n  kB, kB, kB, kY, // Layer 2\n};\n// clang-format on\n\nconstexpr std::array<const uint32_t*, kNumLayers> kTextureLayerData = {\n    kTextureData.data() + 0,\n    kTextureData.data() + 4,\n    kTextureData.data() + 8,\n};\n\nconstexpr std::array<const uint32_t*, kNumLayers> kSubTextureLayerData = {\n    kSubTextureData.data() + 0,\n    kSubTextureData.data() + 1,\n    kSubTextureData.data() + 2,\n};\n\nconstexpr std::array<const uint32_t*, kNumLayers> kModifiedTextureLayerData = {\n    kModifiedTextureData.data() + 0,\n    kModifiedTextureData.data() + 4,\n    kModifiedTextureData.data() + 8,\n};\n\n//\n// Texture Upload Test\n//\n// This test uploads data to an array texture and then downloads it again to validate it\n//\nnamespace {\nvoid runUploadTest(IDevice& device,\n                   ICommandQueue& cmdQueue,\n                   bool singleUpload,\n                   bool modifyTexture) {\n  Result ret;\n  const std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2DArray(\n      TextureFormat::RGBA_UNorm8,\n      kOffscreenTexWidth,\n      kOffscreenTexHeight,\n      kNumLayers,\n      TextureDesc::TextureUsageBits::Sampled | TextureDesc::TextureUsageBits::Attachment);\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(tex != nullptr);\n\n  //\n  // upload and redownload to make sure that we've uploaded successfully.\n  //\n  if (singleUpload) {\n    const auto uploadRange =\n        TextureRangeDesc::new2DArray(0, 0, kOffscreenTexWidth, kOffscreenTexHeight, 0, kNumLayers);\n    ASSERT_TRUE(tex->upload(uploadRange, kTextureData.data()).isOk());\n  } else {\n    for (size_t layer = 0; layer < kNumLayers; ++layer) {\n      const auto uploadRange =\n          TextureRangeDesc::new2DArray(0, 0, kOffscreenTexWidth, kOffscreenTexHeight, layer, 1);\n      ASSERT_TRUE(tex->upload(uploadRange, kTextureLayerData[layer]).isOk());\n    }\n  }\n\n  if (modifyTexture) {\n    if (singleUpload) {\n      const auto uploadRange =\n          TextureRangeDesc::new2DArray(kOffscreenTexWidth - kOffscreenSubTexWidth,\n                                       kOffscreenTexHeight - kOffscreenSubTexHeight,\n                                       kOffscreenSubTexWidth,\n                                       kOffscreenSubTexHeight,\n                                       0,\n                                       kNumLayers);\n      ASSERT_TRUE(tex->upload(uploadRange, kSubTextureData.data()).isOk());\n    } else {\n      for (size_t layer = 0; layer < kNumLayers; ++layer) {\n        const auto uploadRange =\n            TextureRangeDesc::new2DArray(kOffscreenTexWidth - kOffscreenSubTexWidth,\n                                         kOffscreenTexHeight - kOffscreenSubTexHeight,\n                                         kOffscreenSubTexWidth,\n                                         kOffscreenSubTexHeight,\n                                         layer,\n                                         1);\n        ASSERT_TRUE(tex->upload(uploadRange, kSubTextureLayerData[layer]).isOk());\n      }\n    }\n  }\n\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    //--------------------------------\n    // Verify against original texture\n    //--------------------------------\n    const auto layerStr = \"Layer \" + std::to_string(layer);\n    util::validateUploadedTextureRange(device,\n                                       cmdQueue,\n                                       tex,\n                                       tex->getLayerRange(layer),\n                                       modifyTexture ? kModifiedTextureLayerData[layer]\n                                                     : kTextureLayerData[layer],\n                                       layerStr.c_str());\n  }\n}\n} // namespace\n\nTEST_F(TextureArrayTest, Upload_SingleUpload) {\n  runUploadTest(*iglDev_, *cmdQueue_, true, false);\n}\n\nTEST_F(TextureArrayTest, Upload_LayerByLayer) {\n  runUploadTest(*iglDev_, *cmdQueue_, false, false);\n}\n\nTEST_F(TextureArrayTest, Upload_SingleUpload_ModifySubTexture) {\n  runUploadTest(*iglDev_, *cmdQueue_, true, true);\n}\n\nTEST_F(TextureArrayTest, Upload_LayerByLayer_ModifySubTexture) {\n  runUploadTest(*iglDev_, *cmdQueue_, false, true);\n}\n\nnamespace {\nvoid runUploadToMipTest(IDevice& device, ICommandQueue& cmdQueue, bool singleUpload) {\n  Result ret;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  TextureDesc texDesc = TextureDesc::new2DArray(TextureFormat::RGBA_UNorm8,\n                                                kOffscreenTexWidth,\n                                                kOffscreenTexHeight,\n                                                kNumLayers,\n                                                TextureDesc::TextureUsageBits::Sampled |\n                                                    TextureDesc::TextureUsageBits::Attachment);\n  texDesc.numMipLevels = 2;\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(tex != nullptr);\n\n  //\n  // upload and redownload to make sure that we've uploaded successfully.\n  //\n  if (singleUpload) {\n    const auto uploadRange = TextureRangeDesc::new2DArray(\n        0, 0, kOffscreenTexWidth, kOffscreenTexHeight, 0, kNumLayers, 0, 2);\n    ASSERT_TRUE(tex->upload(uploadRange, kTextureData.data()).isOk());\n  } else {\n    for (size_t mipLevel = 0; mipLevel < 2; ++mipLevel) {\n      for (size_t layer = 0; layer < kNumLayers; ++layer) {\n        const auto uploadRange =\n            TextureRangeDesc::new2DArray(0, 0, kOffscreenTexWidth, kOffscreenTexHeight, layer, 1)\n                .atMipLevel(mipLevel);\n        if (mipLevel == 0) {\n          ASSERT_TRUE(tex->upload(uploadRange, kTextureLayerData[layer]).isOk());\n        } else {\n          ASSERT_TRUE(tex->upload(uploadRange, kSubTextureLayerData[layer]).isOk());\n        }\n      }\n    }\n  }\n\n  for (size_t mipLevel = 0; mipLevel < 2; ++mipLevel) {\n    for (size_t layer = 0; layer < kNumLayers; ++layer) {\n      //--------------------------------\n      // Verify against original texture\n      //--------------------------------\n      const auto layerStr =\n          \"Mip Level \" + std::to_string(mipLevel) + \"; Layer \" + std::to_string(layer);\n      util::validateUploadedTextureRange(device,\n                                         cmdQueue,\n                                         tex,\n                                         tex->getLayerRange(layer, mipLevel),\n                                         mipLevel == 0 ? kTextureLayerData[layer]\n                                                       : kSubTextureLayerData[layer],\n                                         layerStr.c_str());\n    }\n  }\n}\n} // namespace\n\nTEST_F(TextureArrayTest, UploadToMip_SingleUpload) {\n  runUploadToMipTest(*iglDev_, *cmdQueue_, true);\n}\n\nTEST_F(TextureArrayTest, UploadToMip_LayerByLayer) {\n#if defined(IGL_PLATFORM_LINUX) && IGL_PLATFORM_LINUX\n  GTEST_SKIP() << \"Temporarily disabled.\";\n#else\n  runUploadToMipTest(*iglDev_, *cmdQueue_, false);\n#endif\n}\n\n//\n// Texture Passthrough Test - Sample From Array\n//\n// This test uses a simple shader to copy a layer of the input array texture to an\n// a output texture that matches the size of the input texture layer\n//\nTEST_F(TextureArrayTest, Passthrough_SampleFromArray) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2DArray(TextureFormat::RGBA_UNorm8,\n                                                      kOffscreenTexWidth,\n                                                      kOffscreenTexHeight,\n                                                      kNumLayers,\n                                                      TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n  const size_t bytesPerRow = kOffscreenTexWidth * 4;\n\n  //\n  // upload and redownload to make sure that we've uploaded successfully.\n  //\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    ASSERT_TRUE(\n        inputTexture_->upload(rangeDesc.atLayer(layer), kTextureLayerData[layer], bytesPerRow)\n            .isOk());\n  }\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    //-------\n    // Render\n    //-------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    Result result{};\n    auto vertUniformBuffer = createVertexUniformBuffer(*iglDev_, &result);\n    ASSERT_TRUE(result.isOk());\n\n    vertexUniforms_.layer = static_cast<int>(layer);\n\n    *static_cast<VertexUniforms*>(vertUniformBuffer->getData()) = vertexUniforms_;\n    vertUniformBuffer->bind(*iglDev_, *pipelineState, *cmds);\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n\n    //----------------\n    // Validate output\n    //----------------\n    const auto layerStr = \"Layer \" + std::to_string(layer);\n    util::validateFramebufferTexture(\n        *iglDev_, *cmdQueue_, *framebuffer_, kTextureLayerData[layer], layerStr.c_str());\n  }\n}\n\n//\n// Texture Passthrough Test - Render To Array\n//\n// This test uses a simple shader to copy a non-array input texture to an\n// a single layer of the array output texture. The size of the input texture matches the size of a\n// single layer in the output texture.\n//\nTEST_F(TextureArrayTest, Passthrough_RenderToArray) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //---------------------------------\n  // Create input and output textures\n  //---------------------------------\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           kOffscreenTexWidth,\n                                           kOffscreenTexHeight,\n                                           TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  texDesc = TextureDesc::new2DArray(TextureFormat::RGBA_UNorm8,\n                                    kOffscreenTexWidth,\n                                    kOffscreenTexHeight,\n                                    kNumLayers,\n                                    TextureDesc::TextureUsageBits::Sampled |\n                                        TextureDesc::TextureUsageBits::Attachment);\n  auto customOffscreenTexture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(customOffscreenTexture != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n  const size_t bytesPerRow = kOffscreenTexWidth * 4;\n\n  //--------------------------\n  // Create custom framebuffer\n  //--------------------------\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = customOffscreenTexture;\n  auto customFramebuffer = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(customFramebuffer != nullptr);\n\n  //----------------------------\n  // Create custom shader stages\n  //----------------------------\n  std::unique_ptr<IShaderStages> customStages;\n  igl::tests::util::createSimpleShaderStages(iglDev_, customStages);\n  renderPipelineDesc_.shaderStages = std::move(customStages);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    //------------------\n    // Upload layer data\n    //------------------\n    ASSERT_TRUE(inputTexture_->upload(rangeDesc, kTextureLayerData[layer], bytesPerRow).isOk());\n\n    //-------\n    // Render\n    //-------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    renderPass_.colorAttachments[0].layer = layer;\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, customFramebuffer);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n  }\n\n  // Validate in a separate loop to ensure all layers are already written\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    //----------------\n    // Validate output\n    //----------------\n    const auto layerStr = \"Layer \" + std::to_string(layer);\n    util::validateFramebufferTextureRange(*iglDev_,\n                                          *cmdQueue_,\n                                          *customFramebuffer,\n                                          customOffscreenTexture->getLayerRange(layer),\n                                          kTextureLayerData[layer],\n                                          layerStr.c_str());\n  }\n}\n\nTEST_F(TextureArrayTest, ValidateRange2DArray) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Texture2DArray)) {\n    GTEST_SKIP() << \"2D array textures not supported. Skipping.\";\n  }\n\n  Result ret;\n  auto texDesc = TextureDesc::new2DArray(\n      TextureFormat::RGBA_UNorm8, 8, 8, 2, TextureDesc::TextureUsageBits::Sampled);\n  auto tex = iglDev_->createTexture(texDesc, &ret);\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(0, 0, 8, 8, 0, 2));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(4, 4, 4, 4, 1, 1));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(0, 0, 4, 4, 0, 2, 1));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(0, 0, 12, 12, 0, 3));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(0, 0, 0, 0, 0, 0));\n  EXPECT_FALSE(ret.isOk());\n}\n\n//\n// Test ITexture::getEstimatedSizeInBytes\n//\nTEST_F(TextureArrayTest, GetEstimatedSizeInBytes) {\n  auto calcSize =\n      [&](size_t width, size_t height, TextureFormat format, size_t numMipLevels) -> size_t {\n    Result ret;\n    TextureDesc texDesc = TextureDesc::new2DArray(format,\n                                                  width,\n                                                  height,\n                                                  2,\n                                                  TextureDesc::TextureUsageBits::Sampled |\n                                                      TextureDesc::TextureUsageBits::Attachment);\n    texDesc.numMipLevels = numMipLevels;\n    auto texture = iglDev_->createTexture(texDesc, &ret);\n    if (ret.code != Result::Code::Ok || texture == nullptr) {\n      return 0;\n    }\n    return texture->getEstimatedSizeInBytes();\n  };\n\n  const auto format = iglDev_->getBackendType() == BackendType::OpenGL\n                          ? TextureFormat::R5G5B5A1_UNorm\n                          : TextureFormat::RGBA_UNorm8;\n  const uint32_t formatBytes = iglDev_->getBackendType() == BackendType::OpenGL ? 2u : 4u;\n\n  uint32_t bytes = 0;\n  bytes = 12u * 34u * formatBytes * 2u;\n  ASSERT_EQ(calcSize(12, 34, format, 1), bytes);\n  bytes = (16u + 8u + 4u + 2u + 1u) * formatBytes * 2u;\n  ASSERT_EQ(calcSize(16, 1, format, 5), bytes);\n\n  if (iglDev_->hasFeature(DeviceFeatures::TextureNotPot)) {\n    if (!iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n      // ES 2.0 generates maximum mip levels\n      bytes = (128u * 333u + 64u * 166u + 32u * 83u + 16u * 41u + 8u * 20u + 4u * 10u + 2u * 5u +\n               1u * 2u + 1u * 1u) *\n              formatBytes * 2u;\n      ASSERT_EQ(calcSize(128, 333, format, 9), bytes);\n    } else {\n      bytes = (128u * 333u + 64u * 166u) * formatBytes * 2u;\n      ASSERT_EQ(calcSize(128, 333, format, 2), bytes);\n    }\n\n    if (iglDev_->hasFeature(DeviceFeatures::TextureFormatRG)) {\n      const size_t rBytes = 1u;\n      const size_t rgBytes = 2u;\n      bytes = (16 + 8 + 4 + 2 + 1) * rBytes * 2u;\n      ASSERT_EQ(calcSize(16, 1, TextureFormat::R_UNorm8, 5), bytes);\n      if (!iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n        // ES 2.0 generates maximum mip levels\n        bytes = (128u * 333u + 64u * 166u + 32u * 83u + 16u * 41u + 8u * 20u + 4u * 10u + 2u * 5u +\n                 1u * 2u + 1u * 1u) *\n                rgBytes * 2u;\n        ASSERT_EQ(calcSize(128, 333, TextureFormat::RG_UNorm8, 9), bytes);\n      } else {\n        bytes = (128u * 333u + 64u * 166u) * rgBytes * 2u;\n        ASSERT_EQ(calcSize(128, 333, TextureFormat::RG_UNorm8, 2), bytes);\n      }\n    }\n  }\n}\n\n//\n// Test ITexture::getFullRange ITexture::getFullMipRange, and ITexture::getLayerRange\n//\nTEST_F(TextureArrayTest, GetRange) {\n  auto createTexture = [&](size_t width,\n                           size_t height,\n                           TextureFormat format,\n                           size_t numMipLevels) -> std::shared_ptr<ITexture> {\n    Result ret;\n    TextureDesc texDesc = TextureDesc::new2DArray(format,\n                                                  width,\n                                                  height,\n                                                  2,\n                                                  TextureDesc::TextureUsageBits::Sampled |\n                                                      TextureDesc::TextureUsageBits::Attachment);\n    texDesc.numMipLevels = numMipLevels;\n    auto texture = iglDev_->createTexture(texDesc, &ret);\n    if (ret.code != Result::Code::Ok || texture == nullptr) {\n      return {};\n    }\n    return texture;\n  };\n  auto getFullRange = [&](size_t width,\n                          size_t height,\n                          TextureFormat format,\n                          // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                          size_t numMipLevels,\n                          size_t rangeMipLevel = 0,\n                          size_t rangeNumMipLevels = 0) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getFullRange(rangeMipLevel,\n                                   rangeNumMipLevels ? rangeNumMipLevels : numMipLevels)\n               : TextureRangeDesc{};\n  };\n  auto getFullMipRange = [&](size_t width,\n                             size_t height,\n                             TextureFormat format,\n                             // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                             size_t numMipLevels) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getFullMipRange() : TextureRangeDesc{};\n  };\n  auto getLayerRange = [&](size_t width,\n                           size_t height,\n                           TextureFormat format,\n                           // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                           size_t numMipLevels,\n                           size_t layer,\n                           size_t rangeMipLevel = 0,\n                           size_t rangeNumMipLevels = 0) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getLayerRange(\n                     layer, rangeMipLevel, rangeNumMipLevels ? rangeNumMipLevels : numMipLevels)\n               : TextureRangeDesc{};\n  };\n  auto rangesAreEqual = [&](const TextureRangeDesc& a, const TextureRangeDesc& b) -> bool {\n    return std::memcmp(&a, &b, sizeof(TextureRangeDesc)) == 0;\n  };\n  const auto format = iglDev_->getBackendType() == BackendType::OpenGL\n                          ? TextureFormat::R5G5B5A1_UNorm\n                          : TextureFormat::RGBA_UNorm8;\n\n  TextureRangeDesc range;\n  range = TextureRangeDesc::new2DArray(0, 0, 12, 34, 0, 2, 0, 1);\n  ASSERT_TRUE(rangesAreEqual(getFullRange(12, 34, format, 1), range));\n  ASSERT_TRUE(rangesAreEqual(getLayerRange(12, 34, format, 1, 1), range.atLayer(1)));\n  range = TextureRangeDesc::new2DArray(0, 0, 16, 1, 0, 2, 0, 4);\n  ASSERT_TRUE(rangesAreEqual(getFullRange(16, 1, format, 4), range));\n  ASSERT_TRUE(rangesAreEqual(getLayerRange(16, 1, format, 4, 1), range.atLayer(1)));\n\n  // Test subset of mip levels\n  ASSERT_TRUE(rangesAreEqual(getFullRange(16, 1, format, 4, 1, 1), range.atMipLevel(1)));\n  ASSERT_TRUE(\n      rangesAreEqual(getLayerRange(16, 1, format, 4, 1, 1, 1), range.atMipLevel(1).atLayer(1)));\n\n  // Test all mip levels\n  ASSERT_TRUE(rangesAreEqual(getFullMipRange(16, 1, format, 4), range.withNumMipLevels(4)));\n\n  if (iglDev_->hasFeature(DeviceFeatures::TextureNotPot)) {\n    if (!iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n      // ES 2.0 generates maximum mip levels\n      range = TextureRangeDesc::new2DArray(0, 0, 128, 333, 0, 2, 0, 9);\n      ASSERT_TRUE(rangesAreEqual(getFullRange(128, 333, format, 9), range));\n      ASSERT_TRUE(rangesAreEqual(getLayerRange(128, 333, format, 9, 1), range.atLayer(1)));\n\n      // Test all mip levels\n      ASSERT_TRUE(rangesAreEqual(getFullMipRange(128, 333, format, 9), range.withNumMipLevels(9)));\n    } else {\n      range = TextureRangeDesc::new2DArray(0, 0, 128, 333, 0, 2, 0, 2);\n      ASSERT_TRUE(rangesAreEqual(getFullRange(128, 333, format, 2), range));\n      ASSERT_TRUE(rangesAreEqual(getLayerRange(128, 333, format, 2, 1), range.atLayer(1)));\n\n      // Test all mip levels\n      ASSERT_TRUE(rangesAreEqual(getFullMipRange(128, 333, format, 2), range.withNumMipLevels(2)));\n    }\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TextureArrayFloat.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// obscure compiler error where glm::vec would delete it's construct_at\n// since Half didnt have a trivial default ctor despite specifying it.\n#if defined(IGL_CMAKE_BUILD)\n#define GLM_FORCE_XYZW_ONLY 1\n#endif\n\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Color.h\"\n#include \"util/Common.h\"\n#include \"util/Half.h\"\n#include \"util/TextureValidationHelpers.h\"\n\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <array>\n#include <cstring>\n#include <glm/gtc/color_space.hpp>\n#include <string>\n#include <igl/NameHandle.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\nconstexpr size_t kOffscreenTexWidth = 2;\nconstexpr size_t kOffscreenTexHeight = 2;\nconstexpr size_t kOffscreenSubTexWidth = 1;\nconstexpr size_t kOffscreenSubTexHeight = 1;\n\nconstexpr igl::TextureFormat kFloatTextureFormat = TextureFormat::RGBA_F16;\nusing TestColorType = glm::vec<4, util::TestHalf, glm::defaultp>; // control\n// using TestColorType = glm::vec<4, float, glm::defaultp>;\n\nstruct VertexUniforms {\n  int layer = 0;\n};\n//\n// TextureFloatTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass TextureArrayFloatTest : public ::testing::Test {\n private:\n public:\n  TextureArrayFloatTest() = default;\n  ~TextureArrayFloatTest() override = default;\n\n  std::shared_ptr<iglu::ManagedUniformBuffer> createVertexUniformBuffer(IDevice& device,\n                                                                        Result* /*result*/) {\n    std::shared_ptr<iglu::ManagedUniformBuffer> vertUniformBuffer = nullptr;\n\n    const iglu::ManagedUniformBufferInfo vertInfo = {\n        .index = 2,\n        .length = sizeof(VertexUniforms),\n        .uniforms = {\n            UniformDesc{\n                .name = \"layer\",\n                .type = igl::UniformType::Int,\n                .offset = offsetof(VertexUniforms, layer),\n            },\n        }};\n\n    vertUniformBuffer = std::make_shared<iglu::ManagedUniformBuffer>(device, vertInfo);\n\n    IGL_DEBUG_ASSERT(vertUniformBuffer->result.isOk());\n    return vertUniformBuffer;\n  }\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n#if IGL_PLATFORM_LINUX && !IGL_PLATFORM_LINUX_USE_EGL\n    GTEST_SKIP() << \"Fix these tests on Linux\";\n#endif\n\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    if (!iglDev_->hasFeature(DeviceFeatures::TextureHalfFloat) ||\n        !iglDev_->hasFeature(DeviceFeatures::Texture2DArray)) {\n      GTEST_SKIP() << \"2D float texture array is unsupported for this platform.\";\n      return;\n    }\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(kFloatTextureFormat,\n                                                   kOffscreenTexWidth,\n                                                   kOffscreenTexHeight,\n                                                   TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    if (iglDev_->getBackendType() == BackendType::OpenGL) {\n#if IGL_BACKEND_OPENGL\n      if (iglDev_->getBackendVersion().flavor == BackendFlavor::OpenGL_ES) {\n        util::createShaderStages(iglDev_,\n                                 igl::tests::data::shader::kOglSimpleVertShaderTexArrayEs3,\n                                 igl::tests::data::shader::kShaderFunc,\n                                 igl::tests::data::shader::kOglSimpleFragShaderTexArrayEs3,\n                                 igl::tests::data::shader::kShaderFunc,\n                                 stages);\n      } else {\n        if (!iglDev_->hasRequirement(DeviceRequirement::TextureArrayExtReq)) {\n          util::createShaderStages(iglDev_,\n                                   igl::tests::data::shader::kOglSimpleVertShaderTexArray,\n                                   igl::tests::data::shader::kShaderFunc,\n                                   igl::tests::data::shader::kOglSimpleFragShaderTexArray,\n                                   igl::tests::data::shader::kShaderFunc,\n                                   stages);\n        } else if (iglDev_->hasFeature(DeviceFeatures::TextureArrayExt)) {\n          util::createShaderStages(iglDev_,\n                                   igl::tests::data::shader::kOglSimpleVertShaderTexArrayExt,\n                                   igl::tests::data::shader::kShaderFunc,\n                                   igl::tests::data::shader::kOglSimpleFragShaderTexArrayExt,\n                                   igl::tests::data::shader::kShaderFunc,\n                                   stages);\n        } else {\n          GTEST_SKIP() << \"Texture array is unsupported for this platform.\";\n          return;\n        }\n      }\n#if defined(IGL_PLATFORM_LINUX) && IGL_PLATFORM_LINUX\n      GTEST_SKIP() << \"Temporarily disabled.\";\n#endif\n#endif // IGL_BACKEND_OPENGL\n    } else if (iglDev_->getBackendType() == BackendType::Vulkan) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kVulkanSimpleVertShaderTex2dArray,\n                               igl::tests::data::shader::kShaderFunc,\n                               igl::tests::data::shader::kVulkanSimpleFragShaderTex2dArray,\n                               igl::tests::data::shader::kShaderFunc,\n                               stages);\n    } else if (iglDev_->getBackendType() == BackendType::Metal) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kMtlSimpleShaderTxt2dArray,\n                               igl::tests::data::shader::kSimpleVertFunc,\n                               igl::tests::data::shader::kSimpleFragFunc,\n                               stages);\n    } else if (iglDev_->getBackendType() == BackendType::D3D12) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kD3D12SimpleVertShaderTex2dArray,\n                               igl::tests::data::shader::kShaderFunc,\n                               igl::tests::data::shader::kD3D12SimpleFragShaderTex2dArray,\n                               igl::tests::data::shader::kShaderFunc,\n                               stages);\n    }\n\n    ASSERT_TRUE(stages != nullptr);\n\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    // Initialize UV data and sampler buffer\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n\n  VertexUniforms vertexUniforms_;\n\n  size_t textureUnit_ = 0;\n};\n\n// clang-format off\nconst TestColorType kR = igl::tests::util::convertSRGBToLinear(glm::vec4(0x1F / 255.0, 0x00/255.0, 0x00/255.0, 0x0F/255.0)); // 0x1F00000F\nconst TestColorType kG = igl::tests::util::convertSRGBToLinear(glm::vec4(0x00 / 255.0, 0x2F/255.0, 0x00/255.0, 0x1F/255.0)); // 0x002F001F;\nconst TestColorType kB = igl::tests::util::convertSRGBToLinear(glm::vec4(0x00 / 255.0, 0x00/255.0, 0x3F/255.0, 0x2F/255.0)); // 0x00003F2F;\nconst TestColorType kC = igl::tests::util::convertSRGBToLinear(glm::vec4(0x00 / 255.0, 0x4F/255.0, 0x5F/255.0, 0x3F/255.0)); // 0x004F5F3F;\nconst TestColorType kM = igl::tests::util::convertSRGBToLinear(glm::vec4(0x6F / 255.0, 0x00/255.0, 0x7F/255.0, 0x4F/255.0)); // 0x6F007F4F;\nconst TestColorType kY = igl::tests::util::convertSRGBToLinear(glm::vec4(0x8F / 255.0, 0x9F/255.0, 0x00/255.0, 0x5F/255.0)); // 0x8F9F005F;\n\nconstexpr size_t kNumLayers = 3;\n\nconst std::array<TestColorType, 15> kTextureData = {\n  kR, kR, kR, kR, // Base Mip, Layer 0\n  kG, kG, kG, kG, // Base Mip, Layer 1\n  kB, kB, kB, kB, // Base Mip, Layer 2\n  kC,             // Mip 1, Layer 0\n  kM,             // Mip 1, Layer 1\n  kY,             // Mip 1, Layer 2\n};\n\nconst std::array<TestColorType, 3> kSubTextureData = {\n  kC,             // Layer 0\n  kM,             // Layer 1\n  kY,             // Layer 2\n};\n\nconst std::array<TestColorType, 12> kModifiedTextureData = {\n  kR, kR, kR, kC, // Layer 0\n  kG, kG, kG, kM, // Layer 1\n  kB, kB, kB, kY, // Layer 2\n};\n// clang-format on\n\nconst std::array<const TestColorType*, kNumLayers> kTextureLayerData = {\n    kTextureData.data() + 0,\n    kTextureData.data() + 4,\n    kTextureData.data() + 8,\n};\n\nconst std::array<const TestColorType*, kNumLayers> kSubTextureLayerData = {\n    kSubTextureData.data() + 0,\n    kSubTextureData.data() + 1,\n    kSubTextureData.data() + 2,\n};\n\nconst std::array<const TestColorType*, kNumLayers> kModifiedTextureLayerData = {\n    kModifiedTextureData.data() + 0,\n    kModifiedTextureData.data() + 4,\n    kModifiedTextureData.data() + 8,\n};\n\n//\n// Texture Upload Test\n//\n// This test uploads data to an array texture and then downloads it again to validate it\n//\nnamespace {\nvoid runUploadTest(IDevice& device,\n                   ICommandQueue& cmdQueue,\n                   bool singleUpload,\n                   bool modifyTexture) {\n  Result ret;\n  const std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2DArray(\n      kFloatTextureFormat,\n      kOffscreenTexWidth,\n      kOffscreenTexHeight,\n      kNumLayers,\n      TextureDesc::TextureUsageBits::Sampled | TextureDesc::TextureUsageBits::Attachment);\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(tex != nullptr);\n\n  //\n  // upload and redownload to make sure that we've uploaded successfully.\n  //\n  if (singleUpload) {\n    const auto uploadRange =\n        TextureRangeDesc::new2DArray(0, 0, kOffscreenTexWidth, kOffscreenTexHeight, 0, kNumLayers);\n    ASSERT_TRUE(tex->upload(uploadRange, kTextureData.data()).isOk());\n  } else {\n    for (size_t layer = 0; layer < kNumLayers; ++layer) {\n      const auto uploadRange =\n          TextureRangeDesc::new2DArray(0, 0, kOffscreenTexWidth, kOffscreenTexHeight, layer, 1);\n      ASSERT_TRUE(tex->upload(uploadRange, kTextureLayerData[layer]).isOk());\n    }\n  }\n\n  if (modifyTexture) {\n    if (singleUpload) {\n      const auto uploadRange =\n          TextureRangeDesc::new2DArray(kOffscreenTexWidth - kOffscreenSubTexWidth,\n                                       kOffscreenTexHeight - kOffscreenSubTexHeight,\n                                       kOffscreenSubTexWidth,\n                                       kOffscreenSubTexHeight,\n                                       0,\n                                       kNumLayers);\n      ASSERT_TRUE(tex->upload(uploadRange, kSubTextureData.data()).isOk());\n    } else {\n      for (size_t layer = 0; layer < kNumLayers; ++layer) {\n        const auto uploadRange =\n            TextureRangeDesc::new2DArray(kOffscreenTexWidth - kOffscreenSubTexWidth,\n                                         kOffscreenTexHeight - kOffscreenSubTexHeight,\n                                         kOffscreenSubTexWidth,\n                                         kOffscreenSubTexHeight,\n                                         layer,\n                                         1);\n        ASSERT_TRUE(tex->upload(uploadRange, kSubTextureLayerData[layer]).isOk());\n      }\n    }\n  }\n\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    //--------------------------------\n    // Verify against original texture\n    //--------------------------------\n    const auto layerStr = \"Layer \" + std::to_string(layer);\n    const auto* data = modifyTexture ? kModifiedTextureLayerData[layer] : kTextureLayerData[layer];\n    util::validateUploadedTextureRange(\n        device, cmdQueue, tex, tex->getLayerRange(layer), data, layerStr.c_str());\n  }\n}\n} // namespace\n\nTEST_F(TextureArrayFloatTest, Upload_SingleUpload) {\n  runUploadTest(*iglDev_, *cmdQueue_, true, false);\n}\n\nTEST_F(TextureArrayFloatTest, Upload_LayerByLayer) {\n  runUploadTest(*iglDev_, *cmdQueue_, false, false);\n}\n\nTEST_F(TextureArrayFloatTest, Upload_SingleUpload_ModifySubTexture) {\n  runUploadTest(*iglDev_, *cmdQueue_, true, true);\n}\n\nTEST_F(TextureArrayFloatTest, Upload_LayerByLayer_ModifySubTexture) {\n  runUploadTest(*iglDev_, *cmdQueue_, false, true);\n}\n\nnamespace {\nvoid runUploadToMipTest(IDevice& device, ICommandQueue& cmdQueue, bool singleUpload) {\n  Result ret;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  TextureDesc texDesc = TextureDesc::new2DArray(kFloatTextureFormat,\n                                                kOffscreenTexWidth,\n                                                kOffscreenTexHeight,\n                                                kNumLayers,\n                                                TextureDesc::TextureUsageBits::Sampled |\n                                                    TextureDesc::TextureUsageBits::Attachment);\n  texDesc.numMipLevels = 2;\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(tex != nullptr);\n\n  //\n  // upload and redownload to make sure that we've uploaded successfully.\n  //\n  if (singleUpload) {\n    const auto uploadRange = TextureRangeDesc::new2DArray(\n        0, 0, kOffscreenTexWidth, kOffscreenTexHeight, 0, kNumLayers, 0, 2);\n    ASSERT_TRUE(tex->upload(uploadRange, kTextureData.data()).isOk());\n  } else {\n    for (size_t mipLevel = 0; mipLevel < 2; ++mipLevel) {\n      for (size_t layer = 0; layer < kNumLayers; ++layer) {\n        const auto uploadRange =\n            TextureRangeDesc::new2DArray(0, 0, kOffscreenTexWidth, kOffscreenTexHeight, layer, 1)\n                .atMipLevel(mipLevel);\n        if (mipLevel == 0) {\n          ASSERT_TRUE(tex->upload(uploadRange, kTextureLayerData[layer]).isOk());\n        } else {\n          ASSERT_TRUE(tex->upload(uploadRange, kSubTextureLayerData[layer]).isOk());\n        }\n      }\n    }\n  }\n\n  for (size_t mipLevel = 0; mipLevel < 2; ++mipLevel) {\n    for (size_t layer = 0; layer < kNumLayers; ++layer) {\n      //--------------------------------\n      // Verify against original texture\n      //--------------------------------\n      const auto layerStr =\n          \"Mip Level \" + std::to_string(mipLevel) + \"; Layer \" + std::to_string(layer);\n      const auto* data = mipLevel == 0 ? kTextureLayerData[layer] : kSubTextureLayerData[layer];\n      util::validateUploadedTextureRange(\n          device, cmdQueue, tex, tex->getLayerRange(layer, mipLevel), data, layerStr.c_str());\n    }\n  }\n}\n} // namespace\n\nTEST_F(TextureArrayFloatTest, UploadToMip_SingleUpload) {\n  runUploadToMipTest(*iglDev_, *cmdQueue_, true);\n}\n\nTEST_F(TextureArrayFloatTest, UploadToMip_LayerByLayer) {\n  runUploadToMipTest(*iglDev_, *cmdQueue_, false);\n}\n\n//\n// Texture Passthrough Test - Sample From Array\n//\n// This test uses a simple shader to copy a layer of the input array texture to an\n// a output texture that matches the size of the input texture layer\n//\nTEST_F(TextureArrayFloatTest, Passthrough_SampleFromArray) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2DArray(kFloatTextureFormat,\n                                                      kOffscreenTexWidth,\n                                                      kOffscreenTexHeight,\n                                                      kNumLayers,\n                                                      TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n  const size_t bytesPerRow = kOffscreenTexWidth * sizeof(TestColorType);\n\n  //\n  // upload and redownload to make sure that we've uploaded successfully.\n  //\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    ASSERT_TRUE(\n        inputTexture_->upload(rangeDesc.atLayer(layer), kTextureLayerData[layer], bytesPerRow)\n            .isOk());\n  }\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    //-------\n    // Render\n    //-------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    Result result{};\n    auto vertUniformBuffer = createVertexUniformBuffer(*iglDev_, &result);\n    ASSERT_TRUE(result.isOk());\n\n    vertexUniforms_.layer = static_cast<int>(layer);\n\n    *static_cast<VertexUniforms*>(vertUniformBuffer->getData()) = vertexUniforms_;\n    vertUniformBuffer->bind(*iglDev_, *pipelineState, *cmds);\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n\n    //----------------\n    // Validate output\n    //----------------\n    const auto layerStr = \"Layer \" + std::to_string(layer);\n    const auto* data = kTextureLayerData[layer];\n    util::validateFramebufferTexture(*iglDev_, *cmdQueue_, *framebuffer_, data, layerStr.c_str());\n  }\n}\n\n//\n// Texture Passthrough Test - Render To Array\n//\n// This test uses a simple shader to copy a non-array input texture to an\n// a single layer of the array output texture. The size of the input texture matches the size of a\n// single layer in the output texture.\n//\nTEST_F(TextureArrayFloatTest, Passthrough_RenderToArray) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //---------------------------------\n  // Create input and output textures\n  //---------------------------------\n  TextureDesc texDesc = TextureDesc::new2D(kFloatTextureFormat,\n                                           kOffscreenTexWidth,\n                                           kOffscreenTexHeight,\n                                           TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  texDesc = TextureDesc::new2DArray(kFloatTextureFormat,\n                                    kOffscreenTexWidth,\n                                    kOffscreenTexHeight,\n                                    kNumLayers,\n                                    TextureDesc::TextureUsageBits::Attachment);\n  auto customOffscreenTexture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(customOffscreenTexture != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n  const size_t bytesPerRow = kOffscreenTexWidth * sizeof(TestColorType);\n\n  //--------------------------\n  // Create custom framebuffer\n  //--------------------------\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = customOffscreenTexture;\n  auto customFramebuffer = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(customFramebuffer != nullptr);\n\n  //----------------------------\n  // Create custom shader stages\n  //----------------------------\n  std::unique_ptr<IShaderStages> customStages;\n  igl::tests::util::createSimpleShaderStages(iglDev_, customStages);\n  renderPipelineDesc_.shaderStages = std::move(customStages);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    //------------------\n    // Upload layer data\n    //------------------\n    ASSERT_TRUE(inputTexture_->upload(rangeDesc, kTextureLayerData[layer], bytesPerRow).isOk());\n\n    //-------\n    // Render\n    //-------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    renderPass_.colorAttachments[0].layer = layer;\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, customFramebuffer);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n  }\n\n  // Validate in a separate loop to ensure all layers are already written\n  for (size_t layer = 0; layer < kNumLayers; ++layer) {\n    //----------------\n    // Validate output\n    //----------------\n    const auto layerStr = \"Layer \" + std::to_string(layer);\n    const auto* data = kTextureLayerData[layer];\n    util::validateFramebufferTextureRange(*iglDev_,\n                                          *cmdQueue_,\n                                          *customFramebuffer,\n                                          customOffscreenTexture->getLayerRange(layer),\n                                          data,\n                                          layerStr.c_str());\n  }\n}\n\nTEST_F(TextureArrayFloatTest, ValidateRange2DArray) {\n  Result ret;\n  auto texDesc =\n      TextureDesc::new2DArray(kFloatTextureFormat, 8, 8, 2, TextureDesc::TextureUsageBits::Sampled);\n  auto tex = iglDev_->createTexture(texDesc, &ret);\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(0, 0, 8, 8, 0, 2));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(4, 4, 4, 4, 1, 1));\n  EXPECT_TRUE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(0, 0, 4, 4, 0, 2, 1));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(0, 0, 12, 12, 0, 3));\n  EXPECT_FALSE(ret.isOk());\n\n  ret = tex->validateRange(TextureRangeDesc::new2DArray(0, 0, 0, 0, 0, 0));\n  EXPECT_FALSE(ret.isOk());\n}\n\n//\n// Test ITexture::getEstimatedSizeInBytes\n//\nTEST_F(TextureArrayFloatTest, GetEstimatedSizeInBytes) {\n  auto calcSize =\n      [&](size_t width, size_t height, TextureFormat format, size_t numMipLevels) -> size_t {\n    Result ret;\n    TextureDesc texDesc =\n        TextureDesc::new2DArray(format, width, height, 2, TextureDesc::TextureUsageBits::Sampled);\n    texDesc.numMipLevels = numMipLevels;\n    auto texture = iglDev_->createTexture(texDesc, &ret);\n    if (ret.code != Result::Code::Ok || texture == nullptr) {\n      return 0;\n    }\n    return texture->getEstimatedSizeInBytes();\n  };\n\n  const auto format = kFloatTextureFormat;\n  const uint32_t formatBytes = (kFloatTextureFormat == TextureFormat::RGBA_F16) ? 8u : 16u;\n\n  uint32_t bytes = 0;\n  bytes = 12u * 34u * formatBytes * 2u;\n  ASSERT_EQ(calcSize(12, 34, format, 1), bytes);\n  bytes = (16u + 8u + 4u + 2u + 1u) * formatBytes * 2u;\n  ASSERT_EQ(calcSize(16, 1, format, 5), bytes);\n\n  if (iglDev_->hasFeature(DeviceFeatures::TextureNotPot)) {\n    if (!iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n      // ES 2.0 generates maximum mip levels\n      bytes = (128u * 333u + 64u * 166u + 32u * 83u + 16u * 41u + 8u * 20u + 4u * 10u + 2u * 5u +\n               1u * 2u + 1u * 1u) *\n              formatBytes * 2u;\n      ASSERT_EQ(calcSize(128, 333, format, 9), bytes);\n    } else {\n      bytes = (128u * 333u + 64u * 166u) * formatBytes * 2u;\n      ASSERT_EQ(calcSize(128, 333, format, 2), bytes);\n    }\n\n    if (iglDev_->hasFeature(DeviceFeatures::TextureFormatRG)) {\n      constexpr size_t rBytes = 1u;\n      constexpr size_t rgBytes = 2u;\n      bytes = (16 + 8 + 4 + 2 + 1) * rBytes * 2u;\n      ASSERT_EQ(calcSize(16, 1, TextureFormat::R_UNorm8, 5), bytes);\n      if (!iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n        // ES 2.0 generates maximum mip levels\n        bytes = (128u * 333u + 64u * 166u + 32u * 83u + 16u * 41u + 8u * 20u + 4u * 10u + 2u * 5u +\n                 1u * 2u + 1u * 1u) *\n                rgBytes * 2u;\n        ASSERT_EQ(calcSize(128, 333, TextureFormat::RG_UNorm8, 9), bytes);\n      } else {\n        bytes = (128u * 333u + 64u * 166u) * rgBytes * 2u;\n        ASSERT_EQ(calcSize(128, 333, TextureFormat::RG_UNorm8, 2), bytes);\n      }\n    }\n  }\n}\n\n//\n// Test ITexture::getFullRange ITexture::getFullMipRange, and ITexture::getLayerRange\n//\nTEST_F(TextureArrayFloatTest, GetRange) {\n  auto createTexture = [&](size_t width,\n                           size_t height,\n                           TextureFormat format,\n                           size_t numMipLevels) -> std::shared_ptr<ITexture> {\n    Result ret;\n    TextureDesc texDesc =\n        TextureDesc::new2DArray(format, width, height, 2, TextureDesc::TextureUsageBits::Sampled);\n    texDesc.numMipLevels = numMipLevels;\n    auto texture = iglDev_->createTexture(texDesc, &ret);\n    if (ret.code != Result::Code::Ok || texture == nullptr) {\n      return {};\n    }\n    return texture;\n  };\n  auto getFullRange = [&](size_t width,\n                          size_t height,\n                          TextureFormat format,\n                          // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                          size_t numMipLevels,\n                          size_t rangeMipLevel = 0,\n                          size_t rangeNumMipLevels = 0) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getFullRange(rangeMipLevel,\n                                   rangeNumMipLevels ? rangeNumMipLevels : numMipLevels)\n               : TextureRangeDesc{};\n  };\n  auto getFullMipRange = [&](size_t width,\n                             size_t height,\n                             TextureFormat format,\n                             // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                             size_t numMipLevels) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getFullMipRange() : TextureRangeDesc{};\n  };\n  auto getLayerRange = [&](size_t width,\n                           size_t height,\n                           TextureFormat format,\n                           // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                           size_t numMipLevels,\n                           size_t layer,\n                           size_t rangeMipLevel = 0,\n                           size_t rangeNumMipLevels = 0) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getLayerRange(\n                     layer, rangeMipLevel, rangeNumMipLevels ? rangeNumMipLevels : numMipLevels)\n               : TextureRangeDesc{};\n  };\n  auto rangesAreEqual = [&](const TextureRangeDesc& a, const TextureRangeDesc& b) -> bool {\n    return std::memcmp(&a, &b, sizeof(TextureRangeDesc)) == 0;\n  };\n  const auto format = kFloatTextureFormat;\n\n  TextureRangeDesc range;\n  range = TextureRangeDesc::new2DArray(0, 0, 12, 34, 0, 2, 0, 1);\n  ASSERT_TRUE(rangesAreEqual(getFullRange(12, 34, format, 1), range));\n  ASSERT_TRUE(rangesAreEqual(getLayerRange(12, 34, format, 1, 1), range.atLayer(1)));\n  range = TextureRangeDesc::new2DArray(0, 0, 16, 1, 0, 2, 0, 4);\n  ASSERT_TRUE(rangesAreEqual(getFullRange(16, 1, format, 4), range));\n  ASSERT_TRUE(rangesAreEqual(getLayerRange(16, 1, format, 4, 1), range.atLayer(1)));\n\n  // Test subset of mip levels\n  ASSERT_TRUE(rangesAreEqual(getFullRange(16, 1, format, 4, 1, 1), range.atMipLevel(1)));\n  ASSERT_TRUE(\n      rangesAreEqual(getLayerRange(16, 1, format, 4, 1, 1, 1), range.atMipLevel(1).atLayer(1)));\n\n  // Test all mip levels\n  ASSERT_TRUE(rangesAreEqual(getFullMipRange(16, 1, format, 4), range.withNumMipLevels(4)));\n\n  if (iglDev_->hasFeature(DeviceFeatures::TextureNotPot)) {\n    if (!iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n      // ES 2.0 generates maximum mip levels\n      range = TextureRangeDesc::new2DArray(0, 0, 128, 333, 0, 2, 0, 9);\n      ASSERT_TRUE(rangesAreEqual(getFullRange(128, 333, format, 9), range));\n      ASSERT_TRUE(rangesAreEqual(getLayerRange(128, 333, format, 9, 1), range.atLayer(1)));\n\n      // Test all mip levels\n      ASSERT_TRUE(rangesAreEqual(getFullMipRange(128, 333, format, 9), range.withNumMipLevels(9)));\n    } else {\n      range = TextureRangeDesc::new2DArray(0, 0, 128, 333, 0, 2, 0, 2);\n      ASSERT_TRUE(rangesAreEqual(getFullRange(128, 333, format, 2), range));\n      ASSERT_TRUE(rangesAreEqual(getLayerRange(128, 333, format, 2, 1), range.atLayer(1)));\n\n      // Test all mip levels\n      ASSERT_TRUE(rangesAreEqual(getFullMipRange(128, 333, format, 2), range.withNumMipLevels(2)));\n    }\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TextureCube.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Common.h\"\n#include \"util/TextureValidationHelpers.h\"\n\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <array>\n#include <glm/glm.hpp>\n#include <string>\n#include <igl/NameHandle.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\nconstexpr size_t kOffscreenTexWidth = 2;\nconstexpr size_t kOffscreenTexHeight = 2;\n\nstruct VertexUniforms {\n  glm::vec4 viewDirection = glm::vec4(0.0);\n};\n//\n// TextureTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass TextureCubeTest : public ::testing::Test {\n private:\n public:\n  TextureCubeTest() = default;\n  ~TextureCubeTest() override = default;\n\n  std::shared_ptr<iglu::ManagedUniformBuffer> createVertexUniformBuffer(IDevice& device,\n                                                                        Result* /*result*/) {\n    std::shared_ptr<iglu::ManagedUniformBuffer> vertUniformBuffer = nullptr;\n\n    const iglu::ManagedUniformBufferInfo info = {\n        .index = 1,\n        .length = sizeof(VertexUniforms),\n        .uniforms = {\n            UniformDesc{\n                .name = \"view\",\n                .type = igl::UniformType::Float4,\n                .offset = offsetof(VertexUniforms, viewDirection),\n            },\n        }};\n\n    vertUniformBuffer = std::make_shared<iglu::ManagedUniformBuffer>(device, info);\n\n    IGL_DEBUG_ASSERT(vertUniformBuffer->result.isOk());\n\n    return vertUniformBuffer;\n  }\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   kOffscreenTexWidth,\n                                                   kOffscreenTexHeight,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment,\n                                                   \"TextureCubeTest::SetUp::offscreenTexture\");\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    if (iglDev_->getBackendType() == BackendType::OpenGL) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kOglSimpleVertShaderCube,\n                               igl::tests::data::shader::kShaderFunc,\n                               igl::tests::data::shader::kOglSimpleFragShaderCube,\n                               igl::tests::data::shader::kShaderFunc,\n                               stages);\n    } else if (iglDev_->getBackendType() == BackendType::Metal) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kMtlSimpleShaderCube,\n                               igl::tests::data::shader::kSimpleVertFunc,\n                               igl::tests::data::shader::kSimpleFragFunc,\n                               stages);\n    } else if (iglDev_->getBackendType() == BackendType::Vulkan) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kVulkanSimpleVertShaderCube,\n                               igl::tests::data::shader::kShaderFunc,\n                               igl::tests::data::shader::kVulkanSimpleFragShaderCube,\n                               igl::tests::data::shader::kShaderFunc,\n                               stages);\n    } else if (iglDev_->getBackendType() == BackendType::D3D12) {\n      util::createShaderStages(iglDev_,\n                               igl::tests::data::shader::kD3D12SimpleVertShaderCube,\n                               igl::tests::data::shader::kShaderFunc,\n                               igl::tests::data::shader::kD3D12SimpleFragShaderCube,\n                               igl::tests::data::shader::kShaderFunc,\n                               stages);\n    } else {\n      ASSERT_TRUE(false);\n    }\n\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    // Initialize UV data and sampler buffer\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n\n  VertexUniforms vertexUniforms_;\n\n  size_t textureUnit_ = 0;\n};\n\nconstexpr uint32_t kR = 0x1F00001F;\nconstexpr uint32_t kG = 0x002F002F;\nconstexpr uint32_t kB = 0x00003F4F;\nconstexpr uint32_t kC = 0x004F5F3F;\nconstexpr uint32_t kM = 0x6F007F4F;\nconstexpr uint32_t kY = 0x8F9F005F;\n\n// clang-format off\nconstexpr std::array<uint32_t, 30> kTextureData = {\n  kR, kR, kR, kR,                     // Base Mip, Face 0\n  kG, kG, kG, kG,                     // Base Mip, Face 1\n  kB, kB, kB, kB,                     // Base Mip, Face 2\n  kR | kB, kR | kB, kR | kB, kR | kB, // Base Mip, Face 3\n  kR | kG, kR | kG, kR | kG, kR | kG, // Base Mip, Face 4\n  kB | kG, kB | kG, kB | kG, kB | kG, // Base Mip, Face 5\n  kC,                                 // Mip 1, Face 0\n  kM,                                 // Mip 1, Face 1\n  kY,                                 // Mip 1, Face 2\n  kC | kM,                            // Mip 1, Face 3\n  kC | kY,                            // Mip 1, Face 4\n  kM | kY,                            // Mip 1, Face 5\n};\n// clang-format on\n\nconstexpr std::array<const uint32_t*, 6> kBaseMipTextureFaceData{\n    kTextureData.data() + 0,\n    kTextureData.data() + 4,\n    kTextureData.data() + 8,\n    kTextureData.data() + 12,\n    kTextureData.data() + 16,\n    kTextureData.data() + 20,\n};\n\nconstexpr std::array<const uint32_t*, 6> kMip1TextureFaceData{\n    kTextureData.data() + 24,\n    kTextureData.data() + 25,\n    kTextureData.data() + 26,\n    kTextureData.data() + 27,\n    kTextureData.data() + 28,\n    kTextureData.data() + 29,\n};\n\nstatic const std::array<glm::vec4, 6> kViewDirection = {glm::vec4{1.0f, 0.0f, 0.0f, 0.0f},\n                                                        glm::vec4{-1.0f, 0.0f, 0.0f, 0.0f},\n                                                        glm::vec4{0.0f, 1.0f, 0.0f, 0.0f},\n                                                        glm::vec4{0.0f, -1.0f, 0.0f, 0.0f},\n                                                        glm::vec4{0.0f, 0.0f, 1.0f, 0.0f},\n                                                        glm::vec4{0.0f, 0.0f, -1.0f, 0.0f}};\n\n//\n// Test uploading cube maps\n//\n// Create a cube map texture and upload different solid color into each face. Then verify the color\n// of each face.\n//\nnamespace {\nvoid runUploadTest(IDevice& device, ICommandQueue& cmdQueue, bool singleUpload) {\n  Result ret;\n\n  //--------------------\n  // Create cube texture\n  //--------------------\n  const TextureDesc texDesc = TextureDesc::newCube(TextureFormat::RGBA_UNorm8,\n                                                   kOffscreenTexWidth,\n                                                   kOffscreenTexHeight,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment,\n                                                   \"runUploadTest()::tex\");\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  ASSERT_TRUE(tex != nullptr);\n\n  //---------------------------------------------------------------------\n  // Upload pixel data and validate faces\n  //---------------------------------------------------------------------\n  if (singleUpload) {\n    for (size_t face = 0; face < 6; ++face) {\n      ASSERT_TRUE(tex->upload(tex->getFullRange(0), kTextureData.data()).isOk());\n    }\n  } else {\n    for (size_t face = 0; face < 6; ++face) {\n      ASSERT_TRUE(\n          tex->upload(tex->getCubeFaceRange(face, 0), kBaseMipTextureFaceData[face]).isOk());\n    }\n  }\n\n  for (size_t face = 0; face < 6; ++face) {\n    const auto faceStr = \"Face \" + std::to_string(face);\n    util::validateUploadedTextureRange(device,\n                                       cmdQueue,\n                                       tex,\n                                       tex->getCubeFaceRange(face),\n                                       kBaseMipTextureFaceData[face],\n                                       faceStr.c_str());\n  }\n}\n} // namespace\n\nTEST_F(TextureCubeTest, Upload_SingleUpload) {\n  runUploadTest(*iglDev_, *cmdQueue_, true);\n}\n\nTEST_F(TextureCubeTest, Upload_FaceByFace) {\n  runUploadTest(*iglDev_, *cmdQueue_, false);\n}\n\n//\n// Test uploading cube maps including mipmaps\n//\nnamespace {\nvoid runUploadToMipTest(IDevice& device, ICommandQueue& cmdQueue, bool singleUpload) {\n  Result ret;\n\n  //------------------------------------\n  // Create cube texture with mip levels\n  //------------------------------------\n  TextureDesc texDesc = TextureDesc::newCube(TextureFormat::RGBA_UNorm8,\n                                             kOffscreenTexWidth,\n                                             kOffscreenTexWidth,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment,\n                                             \"runUploadToMipTest()::tex\");\n  texDesc.numMipLevels = 2;\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  ASSERT_TRUE(tex != nullptr);\n\n  //---------------------------------------------------------------------\n  // Upload pixel data and validate faces\n  //---------------------------------------------------------------------\n  if (singleUpload) {\n    ASSERT_TRUE(tex->upload(tex->getFullRange(0, 2), kTextureData.data()).isOk());\n  } else {\n    ASSERT_TRUE(tex->upload(tex->getFullRange(0, 1), kTextureData.data()).isOk());\n    ASSERT_TRUE(tex->upload(tex->getFullRange(1, 1), kMip1TextureFaceData[0]).isOk());\n  }\n\n  for (size_t mipLevel = 0; mipLevel < 2; ++mipLevel) {\n    for (size_t face = 0; face < 6; ++face) {\n      const auto faceStr = \"MipLevel \" + std::to_string(mipLevel) + \";Face \" + std::to_string(face);\n      util::validateUploadedTextureRange(device,\n                                         cmdQueue,\n                                         tex,\n                                         tex->getCubeFaceRange(face, mipLevel),\n                                         mipLevel == 0 ? kBaseMipTextureFaceData[face]\n                                                       : kMip1TextureFaceData[face],\n                                         faceStr.c_str());\n    }\n  }\n}\n} // namespace\n\nTEST_F(TextureCubeTest, UploadToMip_SingleUpload) {\n  runUploadToMipTest(*iglDev_, *cmdQueue_, true);\n}\n\nTEST_F(TextureCubeTest, UploadToMip_LevelByLevel) {\n  runUploadToMipTest(*iglDev_, *cmdQueue_, false);\n}\n\n//\n// Texture Passthrough Test - Sample From Cube\n//\n// This test uses a simple shader to copy a face of the input cube texture to an\n// output texture that matches the size of the input texture face\n//\nTEST_F(TextureCubeTest, Passthrough_SampleFromCube) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc =\n      TextureDesc::newCube(TextureFormat::RGBA_UNorm8,\n                           kOffscreenTexWidth,\n                           kOffscreenTexHeight,\n                           TextureDesc::TextureUsageBits::Sampled,\n                           \"TextureCubeTest::Passthrough_SampleFromCube::inputTexture_\");\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n\n  ASSERT_TRUE(inputTexture_\n                  ->upload(rangeDesc.atFace(igl::TextureCubeFace::PosX), kBaseMipTextureFaceData[0])\n                  .isOk());\n  ASSERT_TRUE(inputTexture_\n                  ->upload(rangeDesc.atFace(igl::TextureCubeFace::NegX), kBaseMipTextureFaceData[1])\n                  .isOk());\n  ASSERT_TRUE(inputTexture_\n                  ->upload(rangeDesc.atFace(igl::TextureCubeFace::PosY), kBaseMipTextureFaceData[2])\n                  .isOk());\n  ASSERT_TRUE(inputTexture_\n                  ->upload(rangeDesc.atFace(igl::TextureCubeFace::NegY), kBaseMipTextureFaceData[3])\n                  .isOk());\n  ASSERT_TRUE(inputTexture_\n                  ->upload(rangeDesc.atFace(igl::TextureCubeFace::PosZ), kBaseMipTextureFaceData[4])\n                  .isOk());\n  ASSERT_TRUE(inputTexture_\n                  ->upload(rangeDesc.atFace(igl::TextureCubeFace::NegZ), kBaseMipTextureFaceData[5])\n                  .isOk());\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  for (size_t face = 0; face < 6; ++face) {\n    //-------\n    // Render\n    //-------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    Result result{};\n    auto vertUniformBuffer = createVertexUniformBuffer(*iglDev_, &result);\n    ASSERT_TRUE(result.isOk());\n\n    vertexUniforms_.viewDirection = kViewDirection[face];\n\n    *static_cast<VertexUniforms*>(vertUniformBuffer->getData()) = vertexUniforms_;\n    vertUniformBuffer->bind(*iglDev_, *pipelineState, *cmds);\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n\n    //----------------\n    // Validate output\n    //----------------\n    const auto faceStr = std::string(\"Face \") + std::to_string(face);\n    util::validateFramebufferTexture(\n        *iglDev_, *cmdQueue_, *framebuffer_, kBaseMipTextureFaceData[face], faceStr.c_str());\n  }\n}\n\n//\n// Texture Passthrough Test - Render To Cube\n//\n// This test uses a simple shader to copy a non-cube input texture to an\n// a single face of the cube output texture. The size of the input texture matches the size of a\n// single face in the output texture.\n//\nTEST_F(TextureCubeTest, Passthrough_RenderToCube) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //---------------------------------\n  // Create input and output textures\n  //---------------------------------\n  TextureDesc texDesc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                         kOffscreenTexWidth,\n                         kOffscreenTexHeight,\n                         TextureDesc::TextureUsageBits::Sampled,\n                         \"TextureCubeTest::Passthrough_RenderToCube::inputTexture_\");\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  texDesc = TextureDesc::newCube(\n      TextureFormat::RGBA_UNorm8,\n      kOffscreenTexWidth,\n      kOffscreenTexHeight,\n      TextureDesc::TextureUsageBits::Sampled | TextureDesc::TextureUsageBits::Attachment,\n      \"TextureCubeTest::Passthrough_RenderToCube::customOffscreenTexture\");\n  auto customOffscreenTexture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(customOffscreenTexture != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n  const size_t bytesPerRow = kOffscreenTexWidth * 4;\n\n  //--------------------------\n  // Create custom framebuffer\n  //--------------------------\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = customOffscreenTexture;\n  auto customFramebuffer = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(customFramebuffer != nullptr);\n\n  //----------------------------\n  // Create custom shader stages\n  //----------------------------\n  std::unique_ptr<IShaderStages> customStages;\n  igl::tests::util::createSimpleShaderStages(iglDev_, customStages);\n  renderPipelineDesc_.shaderStages = std::move(customStages);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  for (size_t face = 0; face < 6; ++face) {\n    //------------------\n    // Upload layer data\n    //------------------\n    ASSERT_TRUE(\n        inputTexture_->upload(rangeDesc, kBaseMipTextureFaceData[face], bytesPerRow).isOk());\n\n    //-------\n    // Render\n    //-------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    renderPass_.colorAttachments[0].face = face;\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, customFramebuffer);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n  }\n\n  // Validate in a separate loop to ensure all faces are already written\n  for (size_t face = 0; face < 6; ++face) {\n    //----------------\n    // Validate output\n    //----------------\n    const auto faceStr = \"Face \" + std::to_string(face);\n    util::validateFramebufferTextureRange(*iglDev_,\n                                          *cmdQueue_,\n                                          *customFramebuffer,\n                                          customOffscreenTexture->getCubeFaceRange(face),\n                                          kBaseMipTextureFaceData[face],\n                                          faceStr.c_str());\n  }\n}\n\n//\n// Test ITexture::getEstimatedSizeInBytes\n//\nTEST_F(TextureCubeTest, GetEstimatedSizeInBytes) {\n  auto calcSize =\n      [&](size_t width, size_t height, TextureFormat format, size_t numMipLevels) -> size_t {\n    Result ret;\n    TextureDesc texDesc = TextureDesc::newCube(format,\n                                               width,\n                                               height,\n                                               TextureDesc::TextureUsageBits::Sampled |\n                                                   TextureDesc::TextureUsageBits::Attachment,\n                                               \"TextureCubeTest::GetEstimatedSizeInBytes::texture\");\n    texDesc.numMipLevels = numMipLevels;\n    auto texture = iglDev_->createTexture(texDesc, &ret);\n    if (ret.code != Result::Code::Ok || texture == nullptr) {\n      return 0;\n    }\n    return texture->getEstimatedSizeInBytes();\n  };\n\n  const auto format = iglDev_->getBackendType() == BackendType::OpenGL\n                          ? TextureFormat::R5G5B5A1_UNorm\n                          : TextureFormat::RGBA_UNorm8;\n  const uint32_t formatBytes = iglDev_->getBackendType() == BackendType::OpenGL ? 2u : 4u;\n\n  uint32_t bytes = 0;\n  bytes = 34u * 34u * formatBytes * 6u;\n  ASSERT_EQ(calcSize(34, 34, format, 1), bytes);\n  bytes = (16u * 16u + 8u * 8u + 4u * 4u + 2u * 2u + 1u) * formatBytes * 6u;\n  ASSERT_EQ(calcSize(16, 16, format, 5), bytes);\n}\n\n//\n// Test ITexture::getFullRange, ITexture::getFullMipRange, and ITexture::getCubeFaceRange and\n//\nTEST_F(TextureCubeTest, GetRange) {\n  auto createTexture = [&](size_t width,\n                           size_t height,\n                           TextureFormat format,\n                           size_t numMipLevels) -> std::shared_ptr<ITexture> {\n    Result ret;\n    TextureDesc texDesc = TextureDesc::newCube(format,\n                                               width,\n                                               height,\n                                               TextureDesc::TextureUsageBits::Sampled |\n                                                   TextureDesc::TextureUsageBits::Attachment,\n                                               \"TextureCubeTest::GetRange::texture\");\n    texDesc.numMipLevels = numMipLevels;\n    auto texture = iglDev_->createTexture(texDesc, &ret);\n    if (ret.code != Result::Code::Ok || texture == nullptr) {\n      return {};\n    }\n    return texture;\n  };\n  auto getFullRange = [&](size_t width,\n                          size_t height,\n                          TextureFormat format,\n                          // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                          size_t numMipLevels,\n                          size_t rangeMipLevel = 0,\n                          size_t rangeNumMipLevels = 0) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getFullRange(rangeMipLevel,\n                                   rangeNumMipLevels ? rangeNumMipLevels : numMipLevels)\n               : TextureRangeDesc{};\n  };\n  auto getFullMipRange = [&](size_t width,\n                             size_t height,\n                             TextureFormat format,\n                             // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                             size_t numMipLevels) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getFullMipRange() : TextureRangeDesc{};\n  };\n  auto getCubeFaceRangeEnum = [&](size_t width,\n                                  size_t height,\n                                  TextureFormat format,\n                                  size_t numMipLevels,\n                                  TextureCubeFace face,\n                                  size_t rangeMipLevel = 0,\n                                  size_t rangeNumMipLevels = 0) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getCubeFaceRange(\n                     face, rangeMipLevel, rangeNumMipLevels ? rangeNumMipLevels : numMipLevels)\n               : TextureRangeDesc{};\n  };\n  auto getCubeFaceRangeNum = [&](size_t width,\n                                 size_t height,\n                                 TextureFormat format,\n                                 size_t numMipLevels,\n                                 size_t face,\n                                 size_t rangeMipLevel = 0,\n                                 size_t rangeNumMipLevels = 0) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getCubeFaceRange(\n                     face, rangeMipLevel, rangeNumMipLevels ? rangeNumMipLevels : numMipLevels)\n               : TextureRangeDesc{};\n  };\n  auto rangesAreEqual = [&](const TextureRangeDesc& a, const TextureRangeDesc& b) -> bool {\n    return memcmp(&a, &b, sizeof(TextureRangeDesc)) == 0;\n  };\n  const auto format = iglDev_->getBackendType() == BackendType::OpenGL\n                          ? TextureFormat::R5G5B5A1_UNorm\n                          : TextureFormat::RGBA_UNorm8;\n\n  TextureRangeDesc range;\n  range = TextureRangeDesc::newCube(0, 0, 34, 34, 0, 1);\n  ASSERT_TRUE(rangesAreEqual(getFullRange(34, 34, format, 1), range));\n  ASSERT_TRUE(rangesAreEqual(getCubeFaceRangeEnum(34, 34, format, 1, TextureCubeFace::NegX),\n                             range.atFace(TextureCubeFace::NegX)));\n  ASSERT_TRUE(rangesAreEqual(getCubeFaceRangeNum(34, 34, format, 1, 1), range.atFace(1)));\n\n  range = TextureRangeDesc::newCube(0, 0, 16, 16, 0, 5);\n  ASSERT_TRUE(rangesAreEqual(getFullRange(16, 16, format, 5), range));\n  ASSERT_TRUE(rangesAreEqual(getCubeFaceRangeEnum(16, 16, format, 5, TextureCubeFace::NegX),\n                             range.atFace(TextureCubeFace::NegX)));\n  ASSERT_TRUE(rangesAreEqual(getCubeFaceRangeNum(16, 16, format, 5, 1), range.atFace(1)));\n\n  // Subset of mip levels\n  ASSERT_TRUE(rangesAreEqual(getFullRange(16, 16, format, 5, 1, 1), range.atMipLevel(1)));\n  ASSERT_TRUE(rangesAreEqual(getCubeFaceRangeEnum(16, 16, format, 5, TextureCubeFace::NegX, 1, 1),\n                             range.atFace(TextureCubeFace::NegX).atMipLevel(1)));\n  ASSERT_TRUE(rangesAreEqual(getCubeFaceRangeNum(16, 16, format, 5, 1, 1, 1),\n                             range.atFace(1).atMipLevel(1)));\n\n  ASSERT_TRUE(rangesAreEqual(getFullMipRange(16, 16, format, 5), range.withNumMipLevels(5)));\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TextureFloat.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Color.h\"\n#include \"util/Common.h\"\n#include \"util/TextureValidationHelpers.h\"\n\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <array>\n#include <cstring>\n#include <glm/gtc/color_space.hpp>\n#include <string>\n#include <igl/NameHandle.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\nconstexpr size_t kOffscreenTexWidth = 2;\nconstexpr size_t kOffscreenTexHeight = 2;\n\n// clang-format off\nconst glm::vec4 kR = igl::tests::util::convertSRGBToLinear(glm::vec4(0x1F / 255.0, 0x00/255.0, 0x00/255.0, 0x0F/255.0)); // 0x1F00000F\nconst glm::vec4 kG = igl::tests::util::convertSRGBToLinear(glm::vec4(0x00 / 255.0, 0x2F/255.0, 0x00/255.0, 0x1F/255.0)); // 0x002F001F;\nconst glm::vec4 kB = igl::tests::util::convertSRGBToLinear(glm::vec4(0x00 / 255.0, 0x00/255.0, 0x3F/255.0, 0x2F/255.0)); // 0x00003F2F;\nconst glm::vec4 kC = igl::tests::util::convertSRGBToLinear(glm::vec4(0x00 / 255.0, 0x4F/255.0, 0x5F/255.0, 0x3F/255.0)); // 0x004F5F3F;\nconst glm::vec4 kM = igl::tests::util::convertSRGBToLinear(glm::vec4(0x6F / 255.0, 0x00/255.0, 0x7F/255.0, 0x4F/255.0)); // 0x6F007F4F;\nconst glm::vec4 kY = igl::tests::util::convertSRGBToLinear(glm::vec4(0x8F / 255.0, 0x9F/255.0, 0x00/255.0, 0x5F/255.0)); // 0x8F9F005F;\n\nconst std::array<glm::vec4, 15> kTextureDataRGBA = {\n  kR, kR, kR, kR, // Base Mip, Layer 0\n  kG, kG, kG, kG, // Base Mip, Layer 1\n  kB, kB, kB, kB, // Base Mip, Layer 2\n  kC,             // Mip 1, Layer 0\n  kM,             // Mip 1, Layer 1\n  kY,             // Mip 1, Layer 2\n};\nconst std::array<glm::vec3, 15> kTextureDataRGB = {\n  glm::vec3(kR), glm::vec3(kR), glm::vec3(kR), glm::vec3(kR), // Base Mip, Layer 0\n  glm::vec3(kG), glm::vec3(kG), glm::vec3(kG), glm::vec3(kG), // Base Mip, Layer 1\n  glm::vec3(kB), glm::vec3(kB), glm::vec3(kB), glm::vec3(kB), // Base Mip, Layer 2\n  glm::vec3(kC),             // Mip 1, Layer 0\n  glm::vec3(kM),             // Mip 1, Layer 1\n  glm::vec3(kY),             // Mip 1, Layer 2\n};\n\nconst std::array<glm::vec2, 15> kTextureDataRG = {\n  glm::vec2(kR), glm::vec2(kR), glm::vec2(kR), glm::vec2(kR), // Base Mip, Layer 0\n  glm::vec2(kG), glm::vec2(kG), glm::vec2(kG), glm::vec2(kG), // Base Mip, Layer 1\n  glm::vec2(kB), glm::vec2(kB), glm::vec2(kB), glm::vec2(kB), // Base Mip, Layer 2\n  glm::vec2(kC),             // Mip 1, Layer 0\n  glm::vec2(kM),             // Mip 1, Layer 1\n  glm::vec2(kY),             // Mip 1, Layer 2\n};\n\nconst std::array<float, 15> kTextureDataR = {\n  kR.y, kR.y, kR.y, kR.y, // Base Mip, Layer 0\n  kG.y, kG.y, kG.y, kG.y, // Base Mip, Layer 1\n  kB.y, kB.y, kB.y, kB.y, // Base Mip, Layer 2\n  kC.y,             // Mip 1, Layer 0\n  kM.y,             // Mip 1, Layer 1\n  kY.y,             // Mip 1, Layer 2\n};\n// clang-format on\n\nstruct VertexUniforms {\n  int layer = 0;\n};\n//\n// TextureFloatTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass TextureFloatTest : public ::testing::Test {\n private:\n public:\n  TextureFloatTest() = default;\n  ~TextureFloatTest() override = default;\n\n  std::shared_ptr<iglu::ManagedUniformBuffer> createVertexUniformBuffer(IDevice& device,\n                                                                        Result* /*result*/) {\n    std::shared_ptr<iglu::ManagedUniformBuffer> vertUniformBuffer = nullptr;\n\n    const iglu::ManagedUniformBufferInfo vertInfo = {\n        .index = 2,\n        .length = sizeof(VertexUniforms),\n        .uniforms = {\n            UniformDesc{\n                .name = \"layer\",\n                .type = igl::UniformType::Int,\n                .offset = offsetof(VertexUniforms, layer),\n            },\n        }};\n\n    vertUniformBuffer = std::make_shared<iglu::ManagedUniformBuffer>(device, vertInfo);\n\n    IGL_DEBUG_ASSERT(vertUniformBuffer->result.isOk());\n    return vertUniformBuffer;\n  }\n\n  void createPassthroughFrameBuffer(TextureFormat format) {\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(\n        format, kOffscreenTexWidth, kOffscreenTexHeight, TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok)\n        << \"RetCode: \" << static_cast<int>(ret.code) << \" Message: \" << ret.message;\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n    ASSERT_TRUE(offscreenTexture_->getFormat() == format);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n    ASSERT_TRUE(offscreenTexture_->getFormat() == format);\n  }\n\n  void createShaderStages() {\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages, offscreenTexture_->getFormat());\n\n    ASSERT_TRUE(stages != nullptr);\n\n    shaderStages_ = std::move(stages);\n  }\n\n  void initializeRenderPipeline() {\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n#if IGL_PLATFORM_LINUX && !IGL_PLATFORM_LINUX_USE_EGL\n    GTEST_SKIP() << \"Fix these tests on Linux\";\n#endif\n\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    if (!iglDev_->hasFeature(DeviceFeatures::TextureFloat) &&\n        !iglDev_->hasFeature(DeviceFeatures::Texture2DArray)) {\n      GTEST_SKIP() << \"2D float texture array is unsupported for this platform.\";\n      return;\n    }\n\n// Those tests just crash on macos but run fine on android opengles\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_IOS_SIMULATOR\n    if (iglDev_->getBackendType() == BackendType::OpenGL) {\n      GTEST_SKIP() << \"Skip due to lack of support for OpenGL on Macos\";\n    }\n#endif\n\n    Result ret;\n    createPassthroughFrameBuffer(igl::TextureFormat::RGBA_F32);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    createShaderStages();\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    // Initialize UV data and sampler buffer\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    initializeRenderPipeline();\n  }\n\n  void TearDown() override {}\n  template<typename ColorType>\n  void runPassthroughFormat(TextureFormat format, const ColorType* data) {\n    std::shared_ptr<IRenderPipelineState> pipelineState;\n    createPassthroughFrameBuffer(format);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n    ASSERT_TRUE(offscreenTexture_->getFormat() == format);\n    createShaderStages();\n    initializeRenderPipeline();\n\n    Result ret;\n    //-------------------------------------\n    // Create input texture and upload data\n    //-------------------------------------\n    const TextureDesc texDesc = TextureDesc::new2D(\n        format, kOffscreenTexWidth, kOffscreenTexHeight, TextureDesc::TextureUsageBits::Sampled);\n    inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(inputTexture_ != nullptr);\n\n    const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n    const size_t bytesPerRow = kOffscreenTexWidth * inputTexture_->getProperties().bytesPerBlock;\n\n    //\n    // upload and redownload to make sure that we've uploaded successfully.\n    //\n    ASSERT_TRUE(inputTexture_->upload(rangeDesc, data, bytesPerRow).isOk());\n\n    //----------------\n    // Create Pipeline\n    //----------------\n    pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(pipelineState != nullptr);\n\n    //-------\n    // Render\n    //-------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    Result result{};\n    auto vertUniformBuffer = createVertexUniformBuffer(*iglDev_, &result);\n    ASSERT_TRUE(result.isOk());\n\n    vertexUniforms_.layer = static_cast<int>(1);\n\n    *static_cast<VertexUniforms*>(vertUniformBuffer->getData()) = vertexUniforms_;\n    vertUniformBuffer->bind(*iglDev_, *pipelineState, *cmds);\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n\n    //----------------\n    // Validate output\n    //----------------\n    const auto* layerStr = \"Layer 0\";\n    util::validateFramebufferTexture(*iglDev_, *cmdQueue_, *framebuffer_, data, layerStr);\n  }\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n\n  VertexUniforms vertexUniforms_;\n\n  size_t textureUnit_ = 0;\n};\n\n//\n// Texture Upload Test\n//\n// This test uploads data to an array texture and then downloads it again to validate it\n//\nnamespace {\ntemplate<typename ColorType>\nvoid runUploadTest(IDevice& device,\n                   ICommandQueue& cmdQueue,\n                   TextureFormat format,\n                   const ColorType* data) {\n  Result ret;\n  const std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2D(\n      format, kOffscreenTexWidth, kOffscreenTexHeight, TextureDesc::TextureUsageBits::Sampled);\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(tex != nullptr);\n\n  //\n  // upload and redownload to make sure that we've uploaded successfully.\n  //\n  const auto uploadRange =\n      TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight, 0);\n  ASSERT_TRUE(tex->upload(uploadRange, data).isOk());\n\n  //--------------------------------\n  // Verify against original texture\n  //--------------------------------\n  const auto* layerStr = \"Layer 0\";\n  util::validateUploadedTextureRange(device, cmdQueue, tex, tex->getLayerRange(0), data, layerStr);\n}\n} // namespace\n\nTEST_F(TextureFloatTest, Upload_RGBA32) {\n  runUploadTest(*iglDev_, *cmdQueue_, igl::TextureFormat::RGBA_F32, kTextureDataRGBA.data());\n}\n\nTEST_F(TextureFloatTest, Upload_RGB32) {\n  if (iglDev_->getBackendType() == BackendType::Vulkan ||\n      iglDev_->getBackendType() == BackendType::Metal ||\n      iglDev_->getBackendVersion().flavor == BackendFlavor::OpenGL_ES) {\n    GTEST_SKIP() << \"Skip due to lack of support for RGB\";\n  }\n  runUploadTest(*iglDev_, *cmdQueue_, igl::TextureFormat::RGB_F32, kTextureDataRGB.data());\n}\n\nTEST_F(TextureFloatTest, Upload_RG32) {\n  runUploadTest(*iglDev_, *cmdQueue_, igl::TextureFormat::RG_F32, kTextureDataRG.data());\n}\n\nTEST_F(TextureFloatTest, Upload_R32) {\n  runUploadTest(*iglDev_, *cmdQueue_, igl::TextureFormat::R_F32, kTextureDataR.data());\n}\n\n//\n// Texture Passthrough Test - Sample From Array\n//\n// This test uses a simple shader to copy a layer of the input array texture to an\n// a output texture that matches the size of the input texture layer\n//\nTEST_F(TextureFloatTest, Passthrough_SampleRGBA32) {\n  runPassthroughFormat(igl::TextureFormat::RGBA_F32, kTextureDataRGBA.data());\n}\n\nTEST_F(TextureFloatTest, Passthrough_SampleRGB32) {\n#if IGL_PLATFORM_WINDOWS && !IGL_ANGLE\n  GTEST_SKIP() << \"Skipping due to known issue on Windows without angle\";\n#endif\n  if (iglDev_->getBackendType() == BackendType::Vulkan ||\n      iglDev_->getBackendType() == BackendType::Metal ||\n      iglDev_->getBackendVersion().flavor == BackendFlavor::OpenGL_ES) {\n    GTEST_SKIP() << \"Skip due to lack of support for RGB\";\n  }\n  runPassthroughFormat(igl::TextureFormat::RGB_F32, kTextureDataRGB.data());\n}\n\nTEST_F(TextureFloatTest, Passthrough_SampleRG32) {\n  runPassthroughFormat(igl::TextureFormat::RG_F32, kTextureDataRG.data());\n}\n\nTEST_F(TextureFloatTest, Passthrough_SampleR32) {\n  runPassthroughFormat(igl::TextureFormat::R_F32, kTextureDataR.data());\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TextureFormat.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"util/TextureFormatTestBase.h\"\n\nnamespace igl::tests {\n\nclass TextureFormatTest : public util::TextureFormatTestBase {\n private:\n public:\n  TextureFormatTest() = default;\n  ~TextureFormatTest() override = default;\n};\n\nTEST_F(TextureFormatTest, Sampled) {\n  testUsage(TextureDesc::TextureUsageBits::Sampled, \"Sampled\");\n}\n\nTEST_F(TextureFormatTest, SampledAttachment) {\n  testUsage(TextureDesc::TextureUsageBits::Sampled | TextureDesc::TextureUsageBits::Attachment,\n            \"SampledAttachment\");\n}\n\nTEST_F(TextureFormatTest, Attachment) {\n  testUsage(TextureDesc::TextureUsageBits::Attachment, \"Attachment\");\n}\n\nTEST_F(TextureFormatTest, Storage) {\n  testUsage(TextureDesc::TextureUsageBits::Storage, \"Storage\");\n}\n\nTEST(TextureFormatUtilsTest, UnormTosRGB) {\n  EXPECT_EQ(linearTosRGB(igl::TextureFormat::RGBA_UNorm8), igl::TextureFormat::RGBA_SRGB);\n  EXPECT_EQ(linearTosRGB(igl::TextureFormat::BGRA_UNorm8), igl::TextureFormat::BGRA_SRGB);\n\n  EXPECT_EQ(sRGBToLinear(igl::TextureFormat::RGBA_SRGB), igl::TextureFormat::RGBA_UNorm8);\n  EXPECT_EQ(sRGBToLinear(igl::TextureFormat::BGRA_SRGB), igl::TextureFormat::BGRA_UNorm8);\n}\n\nTEST(TextureFormatUtilsTest, RgbaToBgra) {\n  EXPECT_EQ(RgbaToBgra(igl::TextureFormat::RGBA_UNorm8), igl::TextureFormat::BGRA_UNorm8);\n  EXPECT_EQ(RgbaToBgra(igl::TextureFormat::RGBA_SRGB), igl::TextureFormat::BGRA_SRGB);\n\n  EXPECT_EQ(BgraToRgba(igl::TextureFormat::BGRA_UNorm8), igl::TextureFormat::RGBA_UNorm8);\n  EXPECT_EQ(BgraToRgba(igl::TextureFormat::BGRA_SRGB), igl::TextureFormat::RGBA_SRGB);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TextureFormatProperties.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Common.h\"\n\n#include <cstddef>\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/Framebuffer.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\nconstexpr uint32_t kOffscreenTexWidth = 2u;\nconstexpr uint32_t kOffscreenTexHeight = 2u;\n\n//\n// TextureTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass TextureTest : public ::testing::Test {\n private:\n public:\n  TextureTest() = default;\n  ~TextureTest() override = default;\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             kOffscreenTexWidth,\n                                             kOffscreenTexHeight,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n    texDesc.debugName = \"test\";\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n  const std::string backend_ = IGL_BACKEND_TYPE;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n  size_t textureUnit_ = 0;\n};\n\nTEST(TextureFormatProperties, Construction) {\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(std::string(props.name), std::string(\"RGBA_UNorm8\"));\n    EXPECT_EQ(props.format, TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(props.componentsPerPixel, 4);\n    EXPECT_EQ(props.bytesPerBlock, 4);\n    EXPECT_EQ(props.blockWidth, 1);\n    EXPECT_EQ(props.blockHeight, 1);\n    EXPECT_EQ(props.blockDepth, 1);\n    EXPECT_EQ(props.minBlocksX, 1);\n    EXPECT_EQ(props.minBlocksY, 1);\n    EXPECT_EQ(props.minBlocksZ, 1);\n  }\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB_PVRTC_2BPPV1);\n    EXPECT_EQ(std::string(props.name), std::string(\"RGB_PVRTC_2BPPV1\"));\n    EXPECT_EQ(props.format, TextureFormat::RGB_PVRTC_2BPPV1);\n    EXPECT_EQ(props.componentsPerPixel, 3);\n    EXPECT_EQ(props.bytesPerBlock, 8);\n    EXPECT_EQ(props.blockWidth, 8);\n    EXPECT_EQ(props.blockHeight, 4);\n    EXPECT_EQ(props.blockDepth, 1);\n    EXPECT_EQ(props.minBlocksX, 2);\n    EXPECT_EQ(props.minBlocksY, 2);\n    EXPECT_EQ(props.minBlocksZ, 1);\n  }\n}\n\nTEST(TextureFormatProperties, GetRows) {\n  {\n    const auto range = TextureRangeDesc::new2D(0, 0, 2, 2);\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(props.getRows(range), 2);\n    EXPECT_EQ(props.getRows(range.withNumMipLevels(2)), 3);\n  }\n  {\n    const auto range = TextureRangeDesc::new2D(0, 0, 2, 2);\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB_PVRTC_2BPPV1);\n    // MinBlocksY = 2\n    EXPECT_EQ(props.getRows(range), 2);\n    EXPECT_EQ(props.getRows(range.withNumMipLevels(2)), 4);\n  }\n  {\n    const auto range = TextureRangeDesc::new3D(0, 0, 0, 2, 2, 2);\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(props.getRows(range), 4);\n    EXPECT_EQ(props.getRows(range.withNumMipLevels(2)), 5);\n  }\n  {\n    const auto range = TextureRangeDesc::new3D(0, 0, 0, 2, 2, 2);\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB_PVRTC_2BPPV1);\n    // MinBlocksY = 2\n    EXPECT_EQ(props.getRows(range), 4);\n    EXPECT_EQ(props.getRows(range.withNumMipLevels(2)), 6);\n  }\n  {\n    const auto range = TextureRangeDesc::new2DArray(0, 0, 2, 2, 0, 2);\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(props.getRows(range), 4);\n    EXPECT_EQ(props.getRows(range.withNumMipLevels(2)), 6);\n  }\n  {\n    const auto range = TextureRangeDesc::new2DArray(0, 0, 2, 2, 0, 2);\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB_PVRTC_2BPPV1);\n    // MinBlocksY = 2\n    EXPECT_EQ(props.getRows(range), 4);\n    EXPECT_EQ(props.getRows(range.withNumMipLevels(2)), 8);\n  }\n  {\n    const auto range = TextureRangeDesc::newCube(0, 0, 2, 2);\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(props.getRows(range), 12);\n    EXPECT_EQ(props.getRows(range.atFace(TextureCubeFace::NegX)), 2);\n    EXPECT_EQ(props.getRows(range.withNumMipLevels(2)), 18);\n  }\n  {\n    const auto range = TextureRangeDesc::newCube(0, 0, 2, 2);\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB_PVRTC_2BPPV1);\n    // MinBlocksY = 2\n    EXPECT_EQ(props.getRows(range), 12);\n    EXPECT_EQ(props.getRows(range.atFace(TextureCubeFace::NegX)), 2);\n    EXPECT_EQ(props.getRows(range.withNumMipLevels(2)), 24);\n  }\n}\n\nTEST(TextureFormatProperties, GetBytesPerRow) {\n  const auto range = TextureRangeDesc::new2D(0, 0, 2, 2);\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(props.getBytesPerRow(range), 2 * 4);\n  }\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB_PVRTC_2BPPV1);\n    // minBlocksX = 2\n    EXPECT_EQ(props.getBytesPerRow(range), 2 * 1 * 8);\n  }\n}\n\nTEST(TextureFormatProperties, getBytesPerLayer) {\n  const auto range = TextureRangeDesc::new2D(0, 0, 10, 10);\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(props.getBytesPerLayer(range), 10 * 10 * 4);\n    EXPECT_EQ(props.getBytesPerLayer(range, 50), 10 * 50);\n\n    EXPECT_EQ(props.getBytesPerLayer(10, 10, 1), 10 * 10 * 4);\n    EXPECT_EQ(props.getBytesPerLayer(10, 10, 1, 50), 10 * 50);\n  }\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB_PVRTC_2BPPV1);\n    // 2 blocks x 3 blocks\n    EXPECT_EQ(props.getBytesPerLayer(range), 2 * 3 * 8);\n    EXPECT_EQ(props.getBytesPerLayer(10, 10, 1), 2 * 3 * 8);\n  }\n}\n\nTEST(TextureFormatProperties, getBytesPerRange) {\n  auto range = TextureRangeDesc::new2D(0, 0, 10, 10, 0, 3);\n  auto cubeRange = TextureRangeDesc::newCube(0, 0, 10, 10, 0, 3);\n  auto cubeFaceRange = TextureRangeDesc::newCubeFace(0, 0, 10, 10, TextureCubeFace::PosZ, 0, 3);\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    // Level 0: 10 pixels x 10 pixels\n    // Level 1:  5 pixels x  5 pixels\n    // Level 2:  2 pixels x  2 pixels\n    const auto bytes = ((10 * 10) + (5 * 5) + (2 * 2)) * 4;\n    EXPECT_EQ(props.getBytesPerRange(range), bytes);\n    EXPECT_EQ(props.getBytesPerRange(cubeRange), bytes * 6);\n    EXPECT_EQ(props.getBytesPerRange(cubeFaceRange), bytes);\n  }\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    // Level 0: 10 pixels x 10 pixels\n    const auto bytes = 10 * 50;\n    EXPECT_EQ(props.getBytesPerRange(range.atMipLevel(0), 50), bytes);\n    EXPECT_EQ(props.getBytesPerRange(cubeRange.atMipLevel(0), 50), bytes * 6);\n    EXPECT_EQ(props.getBytesPerRange(cubeFaceRange.atMipLevel(0), 50), bytes);\n  }\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB_PVRTC_2BPPV1);\n    // Level 0: 2 blocks x 3 blocks\n    // Level 1: 2 blocks x 2 blocks\n    // Level 2: 2 blocks x 2 blocks\n    const auto bytes = ((2 * 3) + (2 * 2) + (2 * 2)) * 8;\n    EXPECT_EQ(props.getBytesPerRange(range), bytes);\n    EXPECT_EQ(props.getBytesPerRange(cubeRange), bytes * 6);\n    EXPECT_EQ(props.getBytesPerRange(cubeFaceRange), bytes);\n  }\n}\n\nTEST(TextureFormatProperties, getSubRangeByteOffset) {\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    {\n      // 2D Range\n      const auto range = TextureRangeDesc::new2D(0, 0, 10, 10, 0, 3);\n      // Level 0: 10 pixels x 10 pixels = 400 bytes\n      // Level 1:  5 pixels x  5 pixels = 100 bytes\n      // Level 2:  2 pixels x  2 pixels =  16 bytes\n\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range), 0);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1)), 400);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(2)), 500);\n    }\n\n    {\n      // 2D Aray Range\n      const auto range = TextureRangeDesc::new2DArray(0, 0, 10, 10, 0, 2, 0, 3);\n      // Level 0: 10 pixels x 10 pixels x 2 layers = 800 bytes\n      // Level 1:  5 pixels x  5 pixels x 2 layers = 200 bytes\n      // Level 2:  2 pixels x  2 pixels x 2 layers =  32 bytes\n\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range), 0);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atLayer(1)), 400);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1)), 800);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1).atLayer(1)), 900);\n\n      // Custom row length\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.withNumMipLevels(1).atLayer(1), 50), 500);\n    }\n\n    {\n      // 3D Range\n      const auto range = TextureRangeDesc::new3D(0, 0, 0, 10, 10, 10, 0, 3);\n      // Level 0: 10 pixels x 10 pixels x 10 pixels = 4000 bytes\n      // Level 1:  5 pixels x  5 pixels x  5 pixels =  500 bytes\n      // Level 2:  2 pixels x  2 pixels x  2 pixels =   32 bytes\n\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range), 0);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1)), 4000);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(2)), 4500);\n    }\n\n    {\n      // Cube Range\n      const auto range = TextureRangeDesc::newCube(0, 0, 10, 10, 0, 3);\n      // Level 0: 10 pixels x 10 pixels x 6 faces = 2400 bytes\n      // Level 1:  5 pixels x  5 pixels x 6 faces =  600 bytes\n      // Level 2:  2 pixels x  2 pixels x 6 faces =   96 bytes\n\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range), 0);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atFace(1)), 400);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1)), 2400);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1).atFace(1)), 2500);\n\n      // Custom row length\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.withNumMipLevels(1).atFace(1), 50), 500);\n    }\n  }\n  {\n    const auto props = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB_PVRTC_2BPPV1);\n    {\n      // 2D Range\n      const auto range = TextureRangeDesc::new2D(0, 0, 10, 10, 0, 3);\n      // Level 0: 2 blocks x 3 blocks x 8 bytes = 48 bytes\n      // Level 1: 2 blocks x 2 blocks x 8 bytes = 32 bytes\n      // Level 2: 2 blocks x 2 blocks x 8 bytes = 32 bytes\n\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range), 0);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1)), 48);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(2)), 80);\n    }\n\n    {\n      // 2D Aray Range\n      const auto range = TextureRangeDesc::new2DArray(0, 0, 10, 10, 0, 2, 0, 3);\n      // Level 0: 2 blocks x 3 blocks x 2 layers x 8 bytes = 96 bytes\n      // Level 1: 2 blocks x 2 blocks x 2 layers x 8 bytes = 64 bytes\n      // Level 2: 2 blocks x 2 blocks x 2 layers x 8 bytes = 64 bytes\n\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range), 0);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atLayer(1)), 48);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1)), 96);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1).atLayer(1)), 128);\n    }\n\n    {\n      // 3D Range\n      const auto range = TextureRangeDesc::new3D(0, 0, 0, 10, 10, 10, 0, 3);\n      // Level 0: 2 blocks x 3 blocks x 10 pixels x 8 bytes = 480 bytes\n      // Level 1: 2 blocks x 2 blocks x  5 pixels x 8 bytes = 160 bytes\n      // Level 2: 2 blocks x 2 blocks x  2 pixels x 8 bytes =  64 bytes\n\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range), 0);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1)), 480);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(2)), 640);\n    }\n\n    {\n      // Cube Range\n      const auto range = TextureRangeDesc::newCube(0, 0, 10, 10, 0, 3);\n      // Level 0: 2 blocks x 3 blocks x 6 faces x 8 bytes = 288 bytes\n      // Level 1: 2 blocks x 2 blocks x 6 faces x 8 bytes = 192 bytes\n      // Level 2: 2 blocks x 2 blocks x 6 faces x 8 bytes = 192 bytes\n\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range), 0);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atFace(1)), 48);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1)), 288);\n      EXPECT_EQ(props.getSubRangeByteOffset(range, range.atMipLevel(1).atFace(1)), 320);\n    }\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TextureHalfFloat.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// obscure compiler error where glm::vec would delete it's construct_at\n// since Half didnt have a trivial default ctor despite specifying it.\n#if defined(IGL_CMAKE_BUILD)\n#define GLM_FORCE_XYZW_ONLY 1\n#endif\n\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Color.h\"\n#include \"util/Common.h\"\n#include \"util/Half.h\"\n#include \"util/TextureValidationHelpers.h\"\n\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n#include <array>\n#include <cstring>\n#include <glm/gtc/color_space.hpp>\n#include <glm/gtc/packing.hpp>\n#include <string>\n#include <igl/Macros.h>\n#include <igl/NameHandle.h>\n\nnamespace igl::tests {\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\nconstexpr size_t kOffscreenTexWidth = 2;\nconstexpr size_t kOffscreenTexHeight = 2;\n\n// clang-format off\nconst glm::vec4 kR = igl::tests::util::convertSRGBToLinear(glm::vec4(0x1F / 255.0, 0x00/255.0, 0x00/255.0, 0x0F/255.0)); // 0x1F00000F\nconst glm::vec4 kG = igl::tests::util::convertSRGBToLinear(glm::vec4(0x00 / 255.0, 0x2F/255.0, 0x00/255.0, 0x1F/255.0)); // 0x002F001F;\nconst glm::vec4 kB = igl::tests::util::convertSRGBToLinear(glm::vec4(0x00 / 255.0, 0x00/255.0, 0x3F/255.0, 0x2F/255.0)); // 0x00003F2F;\nconst glm::vec4 kC = igl::tests::util::convertSRGBToLinear(glm::vec4(0x00 / 255.0, 0x4F/255.0, 0x5F/255.0, 0x3F/255.0)); // 0x004F5F3F;\nconst glm::vec4 kM = igl::tests::util::convertSRGBToLinear(glm::vec4(0x6F / 255.0, 0x00/255.0, 0x7F/255.0, 0x4F/255.0)); // 0x6F007F4F;\nconst glm::vec4 kY = igl::tests::util::convertSRGBToLinear(glm::vec4(0x8F / 255.0, 0x9F/255.0, 0x00/255.0, 0x5F/255.0)); // 0x8F9F005F;\n\nusing TestColorHalf = glm::vec<4, util::TestHalf, glm::defaultp>;\nusing TestColor2Half = glm::vec<2, util::TestHalf, glm::defaultp>;\nusing TestColor3Half = glm::vec<3, util::TestHalf, glm::defaultp>;\nconst std::array<TestColorHalf, 15> kTextureDataRGBAHalf = {\n  kR, kR, kR, kR, // Base Mip, Layer 0\n  kG, kG, kG, kG, // Base Mip, Layer 1\n  kB, kB, kB, kB, // Base Mip, Layer 2\n  kC,             // Mip 1, Layer 0\n  kM,             // Mip 1, Layer 1\n  kY,             // Mip 1, Layer 2\n};\n\nconst std::array<TestColor3Half, 15> kTextureDataRGBHalf = {\n  glm::vec3(kR), glm::vec3(kR), glm::vec3(kR), glm::vec3(kR), // Base Mip, Layer 0\n  glm::vec3(kG), glm::vec3(kG), glm::vec3(kG), glm::vec3(kG), // Base Mip, Layer 1\n  glm::vec3(kB), glm::vec3(kB), glm::vec3(kB), glm::vec3(kB), // Base Mip, Layer 2\n  glm::vec3(kC),             // Mip 1, Layer 0\n  glm::vec3(kM),             // Mip 1, Layer 1\n  glm::vec3(kY),             // Mip 1, Layer 2\n};\n\nconst std::array<TestColor2Half, 15> kTextureDataRGHalf = {\n  glm::vec2(kR), glm::vec2(kR), glm::vec2(kR), glm::vec2(kR), // Base Mip, Layer 0\n  glm::vec2(kG), glm::vec2(kG), glm::vec2(kG), glm::vec2(kG), // Base Mip, Layer 1\n  glm::vec2(kB), glm::vec2(kB), glm::vec2(kB), glm::vec2(kB), // Base Mip, Layer 2\n  glm::vec2(kC),             // Mip 1, Layer 0\n  glm::vec2(kM),             // Mip 1, Layer 1\n  glm::vec2(kY),             // Mip 1, Layer 2\n};\n\n\nconst std::array<util::TestHalf, 15> kTextureDataRHalf = {\n  util::TestHalf(kR.y), util::TestHalf(kR.y), util::TestHalf(kR.y), util::TestHalf(kR.y), // Base Mip, Layer 0\n  util::TestHalf(kG.y), util::TestHalf(kG.y), util::TestHalf(kG.y), util::TestHalf(kG.y), // Base Mip, Layer 1\n  util::TestHalf(kB.y), util::TestHalf(kB.y), util::TestHalf(kB.y), util::TestHalf(kB.y), // Base Mip, Layer 2\n  util::TestHalf(kC.y),             // Mip 1, Layer 0\n  util::TestHalf(kM.y),             // Mip 1, Layer 1\n  util::TestHalf(kY.y),             // Mip 1, Layer 2\n};\n// clang-format on\n\nstruct VertexUniforms {\n  int layer = 0;\n};\n//\n// TextureHalfFloatTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass TextureHalfFloatTest : public ::testing::Test {\n private:\n public:\n  TextureHalfFloatTest() = default;\n  ~TextureHalfFloatTest() override = default;\n\n  std::shared_ptr<iglu::ManagedUniformBuffer> createVertexUniformBuffer(IDevice& device,\n                                                                        Result* /*result*/) {\n    std::shared_ptr<iglu::ManagedUniformBuffer> vertUniformBuffer = nullptr;\n\n    const iglu::ManagedUniformBufferInfo vertInfo = {\n        .index = 2,\n        .length = sizeof(VertexUniforms),\n        .uniforms = {\n            UniformDesc{\n                .name = \"layer\",\n                .type = igl::UniformType::Int,\n                .offset = offsetof(VertexUniforms, layer),\n            },\n        }};\n\n    vertUniformBuffer = std::make_shared<iglu::ManagedUniformBuffer>(device, vertInfo);\n\n    IGL_DEBUG_ASSERT(vertUniformBuffer->result.isOk());\n    return vertUniformBuffer;\n  }\n\n  void createPassthroughFrameBuffer(TextureFormat format) {\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(\n        format, kOffscreenTexWidth, kOffscreenTexHeight, TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok)\n        << \"RetCode: \" << static_cast<int>(ret.code) << \" Message: \" << ret.message;\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n    ASSERT_TRUE(offscreenTexture_->getFormat() == format);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n    ASSERT_TRUE(offscreenTexture_->getFormat() == format);\n  }\n\n  void createShaderStages() {\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages, offscreenTexture_->getFormat());\n\n    ASSERT_TRUE(stages != nullptr);\n\n    shaderStages_ = std::move(stages);\n  }\n\n  void initializeRenderPipeline() {\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n#if IGL_PLATFORM_LINUX && !IGL_PLATFORM_LINUX_USE_EGL\n    GTEST_SKIP() << \"Fix these tests on Linux\";\n#endif\n\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    if (!iglDev_->hasFeature(DeviceFeatures::TextureHalfFloat)) {\n      GTEST_SKIP() << \"2D half float texture is unsupported for this platform.\";\n      return;\n    }\n\n    Result ret;\n    createPassthroughFrameBuffer(igl::TextureFormat::RGBA_F16);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    createShaderStages();\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    // Initialize UV data and sampler buffer\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    initializeRenderPipeline();\n  }\n\n  void TearDown() override {}\n  template<typename ColorType>\n  void runPassthroughFormat(TextureFormat format, const ColorType* data) {\n    std::shared_ptr<IRenderPipelineState> pipelineState;\n    createPassthroughFrameBuffer(format);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n    ASSERT_TRUE(offscreenTexture_->getFormat() == format);\n    createShaderStages();\n    initializeRenderPipeline();\n\n    Result ret;\n    //-------------------------------------\n    // Create input texture and upload data\n    //-------------------------------------\n    const TextureDesc texDesc = TextureDesc::new2D(\n        format, kOffscreenTexWidth, kOffscreenTexHeight, TextureDesc::TextureUsageBits::Sampled);\n    inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(inputTexture_ != nullptr);\n\n    const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n    const size_t bytesPerRow = kOffscreenTexWidth * inputTexture_->getProperties().bytesPerBlock;\n\n    //\n    // upload and redownload to make sure that we've uploaded successfully.\n    //\n    ASSERT_TRUE(inputTexture_->upload(rangeDesc, data, bytesPerRow).isOk());\n\n    //----------------\n    // Create Pipeline\n    //----------------\n    pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(pipelineState != nullptr);\n\n    //-------\n    // Render\n    //-------\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    Result result{};\n    auto vertUniformBuffer = createVertexUniformBuffer(*iglDev_, &result);\n    ASSERT_TRUE(result.isOk());\n\n    vertexUniforms_.layer = static_cast<int>(1);\n\n    *static_cast<VertexUniforms*>(vertUniformBuffer->getData()) = vertexUniforms_;\n    vertUniformBuffer->bind(*iglDev_, *pipelineState, *cmds);\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n\n    //----------------\n    // Validate output\n    //----------------\n    const auto* layerStr = \"Layer 0\";\n    util::validateFramebufferTexture(*iglDev_, *cmdQueue_, *framebuffer_, data, layerStr);\n  }\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n\n  VertexUniforms vertexUniforms_;\n\n  size_t textureUnit_ = 0;\n};\n\n//\n// Texture Upload Test\n//\n// This test uploads data to an array texture and then downloads it again to validate it\n//\nnamespace {\ntemplate<typename ColorType>\nvoid runUploadTest(IDevice& device,\n                   ICommandQueue& cmdQueue,\n                   TextureFormat format,\n                   const ColorType* data) {\n  Result ret;\n  const std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2D(\n      format, kOffscreenTexWidth, kOffscreenTexHeight, TextureDesc::TextureUsageBits::Sampled);\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(tex != nullptr);\n\n  //\n  // upload and redownload to make sure that we've uploaded successfully.\n  //\n  const auto uploadRange =\n      TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight, 0);\n  ASSERT_TRUE(tex->upload(uploadRange, data).isOk());\n\n  //--------------------------------\n  // Verify against original texture\n  //--------------------------------\n  const auto* layerStr = \"Layer 0\";\n  util::validateUploadedTextureRange(device, cmdQueue, tex, tex->getLayerRange(0), data, layerStr);\n}\n} // namespace\nTEST_F(TextureHalfFloatTest, Upload_RGBA16) {\n  runUploadTest(*iglDev_, *cmdQueue_, igl::TextureFormat::RGBA_F16, kTextureDataRGBAHalf.data());\n}\n\nTEST_F(TextureHalfFloatTest, Upload_RGB16) {\n  if (iglDev_->getBackendType() == BackendType::Vulkan ||\n      iglDev_->getBackendType() == BackendType::Metal ||\n      iglDev_->getBackendVersion().flavor == BackendFlavor::OpenGL_ES) {\n    GTEST_SKIP() << \"Skip due to lack of support for RGB\";\n  }\n  runUploadTest(*iglDev_, *cmdQueue_, igl::TextureFormat::RGB_F16, kTextureDataRGBHalf.data());\n}\n\nTEST_F(TextureHalfFloatTest, Upload_RG16) {\n  runUploadTest(*iglDev_, *cmdQueue_, igl::TextureFormat::RG_F16, kTextureDataRGHalf.data());\n}\n\nTEST_F(TextureHalfFloatTest, Upload_R16) {\n  runUploadTest(*iglDev_, *cmdQueue_, igl::TextureFormat::R_F16, kTextureDataRHalf.data());\n}\n\n//\n// Texture Passthrough Test - Sample From Array\n//\n// This test uses a simple shader to copy a layer of the input array texture to an\n// a output texture that matches the size of the input texture layer\n//\n\nTEST_F(TextureHalfFloatTest, Passthrough_SampleRGBA16) {\n  runPassthroughFormat(igl::TextureFormat::RGBA_F16, kTextureDataRGBAHalf.data());\n}\n\nTEST_F(TextureHalfFloatTest, Passthrough_SampleRGB16) {\n#if IGL_PLATFORM_WINDOWS && !IGL_ANGLE\n  GTEST_SKIP() << \"Skipping due to known issue on Windows without angle\";\n#endif\n\n  if (iglDev_->getBackendType() == BackendType::Vulkan ||\n      iglDev_->getBackendType() == BackendType::Metal ||\n#if IGL_PLATFORM_MACOSX\n      iglDev_->getBackendType() == BackendType::OpenGL ||\n#endif\n      iglDev_->getBackendVersion().flavor == BackendFlavor::OpenGL_ES) {\n    GTEST_SKIP() << \"Skip due to lack of support for RGB\";\n  }\n  runPassthroughFormat(igl::TextureFormat::RGB_F16, kTextureDataRGBHalf.data());\n}\n\nTEST_F(TextureHalfFloatTest, Passthrough_SampleRG16) {\n#if IGL_PLATFORM_MACOSX\n  if (iglDev_->getBackendType() == BackendType::OpenGL) {\n    GTEST_SKIP() << \"Skip due to lack of support for RG on mac OpenGL\";\n  }\n#endif\n  runPassthroughFormat(igl::TextureFormat::RG_F16, kTextureDataRGHalf.data());\n}\n\nTEST_F(TextureHalfFloatTest, Passthrough_SampleR16) {\n#if IGL_PLATFORM_MACOSX\n  if (iglDev_->getBackendType() == BackendType::OpenGL) {\n    GTEST_SKIP() << \"Skip due to lack of support for RG on mac OpenGL\";\n  }\n#endif\n  runPassthroughFormat(igl::TextureFormat::R_F16, kTextureDataRHalf.data());\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TextureMipmap.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"Texture.h\"\n#include \"util/TextureValidationHelpers.h\"\n\n#include <cstddef>\n#include <igl/CommandBuffer.h>\n\nnamespace igl::tests {\n\n//\n// Test render to mip\n//\n// Create a square output texture with a mip chain and render several different colors into each\n// mip level. Read back individual mips to make sure they were written to correctly.\n//\n\nTEST_F(TextureTest, RenderToMip) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  // Use a square output texture with mips\n  constexpr uint32_t kNumMipLevels = 4;\n  constexpr uint32_t kOutputTexWidth = 8u;\n  constexpr uint32_t kOutputTexHeight = 8u;\n  static_assert(kOutputTexWidth > 1);\n  static_assert(1 << (kNumMipLevels - 1) == kOutputTexWidth);\n  static_assert(kOutputTexWidth == kOutputTexHeight);\n\n  static constexpr std::array<uint32_t, kNumMipLevels> kColors = {\n      0xdeadbeef, 0x8badf00d, 0xc00010ff, 0xbaaaaaad};\n\n  std::vector<std::vector<uint32_t>> inputTexData{\n      std::vector(64 /* 8 * 8 */, kColors[0]),\n      std::vector(16 /* 4 * 4 */, kColors[1]),\n      std::vector(4 /* 2 * 2 */, kColors[2]),\n      std::vector(1 /* 1 * 1 */, kColors[3]),\n  };\n\n  //---------------------------------------------------------------------\n  // Create output texture with mip levels and attach it to a framebuffer\n  //---------------------------------------------------------------------\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           kOutputTexWidth,\n                                           kOutputTexHeight,\n                                           TextureDesc::TextureUsageBits::Sampled |\n                                               TextureDesc::TextureUsageBits::Attachment);\n  texDesc.numMipLevels = kNumMipLevels;\n\n  auto outputTex = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(outputTex != nullptr);\n\n  // Create framebuffer using the output texture\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = outputTex;\n  auto fb = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(fb != nullptr);\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //-------------------------\n  // Render to each mip level\n  //-------------------------\n  for (auto mipLevel = 0; mipLevel < kNumMipLevels; mipLevel++) {\n    //---------------------\n    // Create input texture\n    //---------------------\n    const int inTexWidth = kOutputTexWidth >> mipLevel;\n    texDesc = TextureDesc::new2D(\n        TextureFormat::RGBA_UNorm8, inTexWidth, inTexWidth, TextureDesc::TextureUsageBits::Sampled);\n    inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(inputTexture_ != nullptr);\n\n    // Initialize the input texture's color\n    auto rangeDesc = TextureRangeDesc::new2D(0, 0, inTexWidth, inTexWidth);\n    inputTexture_->upload(rangeDesc, inputTexData[mipLevel].data());\n\n    cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf_ != nullptr);\n\n    // Modify render pass to only draw to nth mip level\n    renderPass_.colorAttachments[0].mipLevel = mipLevel;\n\n    auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, fb);\n    cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    cmds->bindRenderPipelineState(pipelineState);\n\n    cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n    cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n    cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmds->drawIndexed(6);\n\n    cmds->endEncoding();\n\n    cmdQueue_->submit(*cmdBuf_);\n\n    cmdBuf_->waitUntilCompleted();\n  }\n\n  // Do readback in a separate loop to ensure all mip levels have been rendered.\n  for (size_t mipLevel = 0; mipLevel < kNumMipLevels; mipLevel++) {\n    //----------------\n    // Validate output\n    //----------------\n    util::validateFramebufferTextureRange(*iglDev_,\n                                          *cmdQueue_,\n                                          *fb,\n                                          outputTex->getFullRange(mipLevel),\n                                          inputTexData[mipLevel].data(),\n                                          (std::string(\"Mip \") + std::to_string(mipLevel)).c_str());\n  }\n}\n\nnamespace {\nvoid testUploadToMip(IDevice& device, ICommandQueue& cmdQueue, bool singleUpload) {\n  Result ret;\n\n  // Use a square output texture with mips\n  constexpr uint32_t kNumMipLevels = 2;\n  constexpr uint32_t kTexWidth = 2u;\n  constexpr uint32_t kTexHeight = 2u;\n  static_assert(kTexWidth > 1);\n  static_assert(1 << (kNumMipLevels - 1) == kTexWidth);\n  static_assert(kTexWidth == kTexHeight);\n\n  constexpr uint32_t kBaseMipColor = 0xdeadbeef;\n  constexpr uint32_t kMip1Color = 0x8badf00d;\n\n  static constexpr std::array<uint32_t, 5> kMipTextureData = {\n      kBaseMipColor, // Base Mip\n      kBaseMipColor, // Base Mip\n      kBaseMipColor, // Base Mip\n      kBaseMipColor, // Base Mip\n      kMip1Color, // Mip 1\n  };\n  static constexpr const uint32_t* kBaseMipData = kMipTextureData.data();\n  static constexpr const uint32_t* kMip1Data = kMipTextureData.data() + 4;\n\n  //---------------------------------------------------------------------\n  // Create texture with mip levels\n  //---------------------------------------------------------------------\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           kTexWidth,\n                                           kTexHeight,\n                                           TextureDesc::TextureUsageBits::Sampled |\n                                               TextureDesc::TextureUsageBits::Attachment);\n  texDesc.numMipLevels = kNumMipLevels;\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  ASSERT_TRUE(tex != nullptr);\n\n  //---------------------------------------------------------------------\n  // Validate initial state, upload pixel data, and generate mipmaps\n  //---------------------------------------------------------------------\n  if (singleUpload) {\n    ret = tex->upload(tex->getFullRange(0, 2), kMipTextureData.data());\n    ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  } else {\n    ret = tex->upload(tex->getFullRange(0), kBaseMipData);\n    ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n\n    ret = tex->upload(tex->getFullRange(1), kMip1Data);\n    ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  }\n\n  util::validateUploadedTextureRange(\n      device, cmdQueue, tex, tex->getFullRange(0), kBaseMipData, \"Base Level\");\n\n  util::validateUploadedTextureRange(\n      device, cmdQueue, tex, tex->getFullRange(1), kMip1Data, \"Mip 1\");\n}\n} // namespace\n\nTEST_F(TextureTest, UploadToMip_LevelByLevel) {\n  testUploadToMip(*iglDev_, *cmdQueue_, false);\n}\n\nTEST_F(TextureTest, UploadToMip_SingleUpload) {\n  testUploadToMip(*iglDev_, *cmdQueue_, true);\n}\n\nnamespace {\nvoid testGenerateMipmap(IDevice& device, ICommandQueue& cmdQueue, bool withCommandQueue) {\n  Result ret;\n\n  // Use a square output texture with mips\n  constexpr uint32_t kNumMipLevels = 2;\n  constexpr uint32_t kTexWidth = 2u;\n  constexpr uint32_t kTexHeight = 2u;\n  static_assert(kTexWidth > 1);\n  static_assert(1 << (kNumMipLevels - 1) == kTexWidth);\n  static_assert(kTexWidth == kTexHeight);\n\n  constexpr uint32_t kColor = 0xdeadbeef;\n  constexpr std::array<uint32_t, 4> kBaseMipData = {kColor, kColor, kColor, kColor};\n  constexpr std::array<uint32_t, 1> kInitialMip1Data = {0};\n  constexpr std::array<uint32_t, 1> kGeneratedMip1Data = {kColor};\n\n  //---------------------------------------------------------------------\n  // Create texture with mip levels\n  //---------------------------------------------------------------------\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           kTexWidth,\n                                           kTexWidth,\n                                           TextureDesc::TextureUsageBits::Sampled |\n                                               TextureDesc::TextureUsageBits::Attachment);\n  texDesc.numMipLevels = kNumMipLevels;\n  auto tex = device.createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  ASSERT_TRUE(tex != nullptr);\n\n  //---------------------------------------------------------------------\n  // Validate initial state, upload pixel data, and generate mipmaps\n  //---------------------------------------------------------------------\n  ret = tex->upload(tex->getFullRange(0), kBaseMipData.data());\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n\n  ret = tex->upload(tex->getFullRange(1), kInitialMip1Data.data());\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n\n  util::validateUploadedTextureRange(\n      device, cmdQueue, tex, tex->getFullRange(0), kBaseMipData.data(), \"Initial (level 0)\");\n\n  util::validateUploadedTextureRange(\n      device, cmdQueue, tex, tex->getFullRange(1), kInitialMip1Data.data(), \"Initial (level 1)\");\n\n  if (withCommandQueue) {\n    tex->generateMipmap(cmdQueue);\n\n    // Dummy command buffer to wait for completion.\n    auto cmdBuf = cmdQueue.createCommandBuffer({}, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cmdBuf != nullptr);\n    cmdQueue.submit(*cmdBuf);\n    cmdBuf->waitUntilCompleted();\n  } else {\n    auto cmdBuffer = cmdQueue.createCommandBuffer({}, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n    tex->generateMipmap(*cmdBuffer);\n    cmdQueue.submit(*cmdBuffer);\n    cmdBuffer->waitUntilCompleted();\n  }\n\n  util::validateUploadedTextureRange(\n      device, cmdQueue, tex, tex->getFullRange(0), kBaseMipData.data(), \"Final (level 0)\");\n\n  util::validateUploadedTextureRange(\n      device, cmdQueue, tex, tex->getFullRange(1), kGeneratedMip1Data.data(), \"Final (level 1)\");\n}\n} // namespace\n\n//\n// Test generating mipmaps\n//\n// Create a texture and upload a solid color into the base mip level, verify the base and 1st mip\n// level colors. Then generate mipmaps and verify again.\n//\nTEST_F(TextureTest, GenerateMipmapWithCommandQueue) {\n  testGenerateMipmap(*iglDev_, *cmdQueue_, true);\n}\n\nTEST_F(TextureTest, GenerateMipmapWithCommandBuffer) {\n  testGenerateMipmap(*iglDev_, *cmdQueue_, false);\n}\n\nTEST_F(TextureTest, GetTextureBytesPerRow) {\n  const auto properties = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n  const auto range = TextureRangeDesc::new2D(0, 0, 10, 10);\n  ASSERT_EQ(properties.getBytesPerRow(range.atMipLevel(0)), 40);\n  ASSERT_EQ(properties.getBytesPerRow(range.atMipLevel(1)), 20);\n  ASSERT_EQ(properties.getBytesPerRow(range.atMipLevel(2)), 8);\n  ASSERT_EQ(properties.getBytesPerRow(range.atMipLevel(3)), 4);\n  ASSERT_EQ(properties.getBytesPerRow(range.atMipLevel(4)), 4);\n}\n\nTEST_F(TextureTest, GetTextureBytesPerLayer) {\n  const auto range = TextureRangeDesc::new2D(0, 0, 10, 10);\n  {\n    // Uncompressed\n    const auto properties = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(0)), 400);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(1)), 100);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(2)), 16);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(3)), 4);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(4)), 4);\n  }\n  {\n    // Compressed\n    // 16 bytes per 5x5 block\n    const auto properties =\n        TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_ASTC_5x5);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(0)), 64);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(1)), 16);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(2)), 16);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(3)), 16);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(4)), 16);\n  }\n  {\n    // Compressed\n    // 8 bytes per 4x4 block\n    const auto properties = TextureFormatProperties::fromTextureFormat(TextureFormat::RGB8_ETC2);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(0)), 72);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(1)), 32);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(2)), 8);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(3)), 8);\n    EXPECT_EQ(properties.getBytesPerLayer(range.atMipLevel(4)), 8);\n  }\n}\n\n//\n// Test ITexture::getEstimatedSizeInBytes\n//\nTEST_F(TextureTest, GetEstimatedSizeInBytes) {\n  auto calcSize =\n      [&](size_t width, size_t height, TextureFormat format, size_t numMipLevels) -> size_t {\n    Result ret;\n    TextureDesc texDesc = TextureDesc::new2D(format,\n                                             width,\n                                             height,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n    texDesc.numMipLevels = numMipLevels;\n    auto texture = iglDev_->createTexture(texDesc, &ret);\n    if (ret.code != Result::Code::Ok || texture == nullptr) {\n      return 0;\n    }\n    return texture->getEstimatedSizeInBytes();\n  };\n\n  const auto format = iglDev_->getBackendType() == BackendType::OpenGL\n                          ? TextureFormat::R5G5B5A1_UNorm\n                          : TextureFormat::RGBA_UNorm8;\n  const size_t formatBytes = iglDev_->getBackendType() == BackendType::OpenGL ? 2 : 4;\n\n  size_t bytes = 0;\n  bytes = (12 * 34 * formatBytes);\n  ASSERT_EQ(calcSize(12, 34, format, 1), bytes);\n  bytes = static_cast<size_t>((16 + 8 + 4 + 2 + 1) * formatBytes);\n  ASSERT_EQ(calcSize(16, 1, format, 5), bytes);\n  if (iglDev_->hasFeature(DeviceFeatures::TextureNotPot)) {\n    if (!iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n      // ES 2.0 generates maximum mip levels\n      bytes = static_cast<size_t>(\n          (128 * 333 + 64 * 166 + 32 * 83 + 16 * 41 + 8 * 20 + 4 * 10 + 2 * 5 + 1 * 2 + 1 * 1) *\n          formatBytes);\n      ASSERT_EQ(calcSize(128, 333, format, 9), bytes);\n    } else {\n      bytes = static_cast<size_t>((128 * 333 + 64 * 166) * formatBytes);\n      ASSERT_EQ(calcSize(128, 333, format, 2), bytes);\n    }\n\n    if (iglDev_->hasFeature(DeviceFeatures::TextureFormatRG)) {\n      const auto rBytes = 1;\n      const auto rgBytes = 2;\n      bytes = static_cast<size_t>((16 + 8 + 4 + 2 + 1) * rBytes);\n      ASSERT_EQ(calcSize(16, 1, TextureFormat::R_UNorm8, 5), bytes);\n      if (!iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n        // ES 2.0 generates maximum mip levels\n        bytes = static_cast<size_t>(\n            (128 * 333 + 64 * 166 + 32 * 83 + 16 * 41 + 8 * 20 + 4 * 10 + 2 * 5 + 1 * 2 + 1 * 1) *\n            rgBytes);\n        ASSERT_EQ(calcSize(128, 333, TextureFormat::RG_UNorm8, 9), bytes);\n      } else {\n        bytes = static_cast<size_t>((128 * 333 + 64 * 166) * rgBytes);\n        ASSERT_EQ(calcSize(128, 333, TextureFormat::RG_UNorm8, 2), bytes);\n      }\n    }\n  }\n}\n\n//\n// Test ITexture::getFullRange and ITexture::getFullMipRange\n//\nTEST_F(TextureTest, GetRange) {\n  auto createTexture = [&](size_t width,\n                           size_t height,\n                           TextureFormat format,\n                           // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                           size_t numMipLevels) -> std::shared_ptr<ITexture> {\n    Result ret;\n    TextureDesc texDesc = TextureDesc::new2D(format,\n                                             width,\n                                             height,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n    texDesc.numMipLevels = numMipLevels;\n    auto texture = iglDev_->createTexture(texDesc, &ret);\n    if (ret.code != Result::Code::Ok || texture == nullptr) {\n      return {};\n    }\n    return texture;\n  };\n  auto getFullRange = [&](size_t width,\n                          size_t height,\n                          TextureFormat format,\n                          // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                          size_t numMipLevels,\n                          size_t rangeMipLevel = 0,\n                          size_t rangeNumMipLevels = 0) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getFullRange(rangeMipLevel,\n                                   rangeNumMipLevels ? rangeNumMipLevels : numMipLevels)\n               : TextureRangeDesc{};\n  };\n  auto getFullMipRange = [&](size_t width,\n                             size_t height,\n                             TextureFormat format,\n                             // NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\n                             size_t numMipLevels) -> TextureRangeDesc {\n    auto tex = createTexture(width, height, format, numMipLevels);\n    return tex ? tex->getFullMipRange() : TextureRangeDesc{};\n  };\n  auto rangesAreEqual = [&](const TextureRangeDesc& a, const TextureRangeDesc& b) -> bool {\n    return std::memcmp(&a, &b, sizeof(TextureRangeDesc)) == 0;\n  };\n  const auto format = iglDev_->getBackendType() == BackendType::OpenGL\n                          ? TextureFormat::R5G5B5A1_UNorm\n                          : TextureFormat::RGBA_UNorm8;\n\n  TextureRangeDesc range;\n  range = TextureRangeDesc::new2D(0, 0, 12, 34, 0, 1);\n  ASSERT_TRUE(rangesAreEqual(getFullRange(12, 34, format, 1), range));\n  range = TextureRangeDesc::new2D(0, 0, 16, 1, 0, 4);\n  ASSERT_TRUE(rangesAreEqual(getFullRange(16, 1, format, 4), range));\n\n  // Test subset of mip levels\n  ASSERT_TRUE(rangesAreEqual(getFullRange(16, 1, format, 4, 1, 1), range.atMipLevel(1)));\n\n  // Test all mip levels\n  ASSERT_TRUE(rangesAreEqual(getFullMipRange(16, 1, format, 4), range.withNumMipLevels(4)));\n\n  if (iglDev_->hasFeature(DeviceFeatures::TextureNotPot)) {\n    if (!iglDev_->hasFeature(DeviceFeatures::TexturePartialMipChain)) {\n      // ES 2.0 generates maximum mip levels\n      range = TextureRangeDesc::new2D(0, 0, 128, 333, 0, 9);\n      ASSERT_TRUE(rangesAreEqual(getFullRange(128, 333, format, 9), range));\n\n      // Test all mip levels\n      ASSERT_TRUE(rangesAreEqual(getFullMipRange(128, 333, format, 9), range.withNumMipLevels(9)));\n    } else {\n      range = TextureRangeDesc::new2D(0, 0, 128, 333, 0, 2);\n      ASSERT_TRUE(rangesAreEqual(getFullRange(128, 333, format, 2), range));\n\n      // Test all mip levels\n      ASSERT_TRUE(rangesAreEqual(getFullMipRange(128, 333, format, 2), range.withNumMipLevels(2)));\n    }\n  }\n}\n\n//\n// Test the functionality of TextureDesc::calcMipmapLevelCount\n//\nTEST(TextureDescStaticTest, CalcMipmapLevelCount) {\n  ASSERT_EQ(TextureDesc::calcNumMipLevels(1, 1), 1);\n  ASSERT_EQ(TextureDesc::calcNumMipLevels(4, 8), 4);\n  ASSERT_EQ(TextureDesc::calcNumMipLevels(8, 4), 4);\n  ASSERT_EQ(TextureDesc::calcNumMipLevels(10, 10), 4);\n  ASSERT_EQ(TextureDesc::calcNumMipLevels(10, 10, 10), 4);\n  ASSERT_EQ(TextureDesc::calcNumMipLevels(8, 4, 4), 4);\n  ASSERT_EQ(TextureDesc::calcNumMipLevels(4, 8, 4), 4);\n  ASSERT_EQ(TextureDesc::calcNumMipLevels(4, 4, 8), 4);\n}\n\n//\n// Test TextureFormatProperties::getNumMipLevels\n//\nTEST_F(TextureTest, GetNumMipLevels) {\n  {\n    auto properties = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8);\n    EXPECT_EQ(properties.getNumMipLevels(1, 1, 4), 1);\n    EXPECT_EQ(properties.getNumMipLevels(2, 2, 4 * 4 + 4), 2);\n    EXPECT_EQ(properties.getNumMipLevels(5, 5, 25 * 4 + 4 * 4 + 4), 3);\n\n    auto range = TextureRangeDesc::new2D(0, 0, 100, 50, 0);\n    range.numMipLevels = 5;\n    EXPECT_EQ(properties.getNumMipLevels(100, 50, properties.getBytesPerRange(range)), 5);\n  }\n\n  {\n    // Compressed\n    // 16 bytes per 5x5 block\n    auto properties = TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_ASTC_5x5);\n    EXPECT_EQ(properties.getNumMipLevels(1, 1, 16), 1);\n    EXPECT_EQ(properties.getNumMipLevels(2, 2, 16 + 16), 2);\n    EXPECT_EQ(properties.getNumMipLevels(5, 5, 16 + 16 + 16), 3);\n\n    auto range = TextureRangeDesc::new2D(0, 0, 100, 50, 0);\n    range.numMipLevels = 5;\n    EXPECT_EQ(properties.getNumMipLevels(100, 50, properties.getBytesPerRange(range)), 5);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TextureRangeDesc.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <cstddef>\n#include <string>\n#include <igl/Common.h>\n#include <igl/Texture.h>\n\nnamespace igl::tests {\n\nTEST(TextureRangeDesc, Construction) {\n  {\n    const auto range = TextureRangeDesc::new1D(2, 3, 4, 5);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 0);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 3);\n    EXPECT_EQ(range.height, 1);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 4);\n    EXPECT_EQ(range.numMipLevels, 5);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n  {\n    const auto range = TextureRangeDesc::new1DArray(2, 3, 4, 5, 6, 7);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 0);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 3);\n    EXPECT_EQ(range.height, 1);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 4);\n    EXPECT_EQ(range.numLayers, 5);\n    EXPECT_EQ(range.mipLevel, 6);\n    EXPECT_EQ(range.numMipLevels, 7);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n  {\n    const auto range = TextureRangeDesc::new2D(2, 3, 4, 5, 6, 7);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 6);\n    EXPECT_EQ(range.numMipLevels, 7);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n  {\n    const auto range = TextureRangeDesc::new2DArray(2, 3, 4, 5, 6, 7, 8, 9);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 6);\n    EXPECT_EQ(range.numLayers, 7);\n    EXPECT_EQ(range.mipLevel, 8);\n    EXPECT_EQ(range.numMipLevels, 9);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n  {\n    const auto range = TextureRangeDesc::new3D(2, 3, 4, 5, 6, 7, 8, 9);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 4);\n    EXPECT_EQ(range.width, 5);\n    EXPECT_EQ(range.height, 6);\n    EXPECT_EQ(range.depth, 7);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 8);\n    EXPECT_EQ(range.numMipLevels, 9);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n  {\n    const auto range = TextureRangeDesc::newCube(2, 3, 4, 5, 7, 8);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 7);\n    EXPECT_EQ(range.numMipLevels, 8);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 6);\n  }\n  {\n    const auto range = TextureRangeDesc::newCubeFace(2, 3, 4, 5, 1, 7, 8);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 7);\n    EXPECT_EQ(range.numMipLevels, 8);\n    EXPECT_EQ(range.face, 1);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n  {\n    const auto range = TextureRangeDesc::newCubeFace(2, 3, 4, 5, TextureCubeFace::NegX, 7, 8);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 7);\n    EXPECT_EQ(range.numMipLevels, 8);\n    EXPECT_EQ(range.face, 1);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n}\n\nTEST(TextureRangeDesc, AtMipLevel) {\n  {\n    const auto initialRange = TextureRangeDesc::new3D(0, 2, 5, 2, 10, 16, 0, 2);\n    const auto range = initialRange.atMipLevel(0);\n    EXPECT_EQ(range.x, 0);\n    EXPECT_EQ(range.y, 2);\n    EXPECT_EQ(range.z, 5);\n    EXPECT_EQ(range.width, 2);\n    EXPECT_EQ(range.height, 10);\n    EXPECT_EQ(range.depth, 16);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 0);\n    EXPECT_EQ(range.numMipLevels, 1);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n  {\n    const auto initialRange = TextureRangeDesc::new3D(0, 2, 5, 2, 10, 16, 0);\n    const auto range = initialRange.atMipLevel(1);\n    EXPECT_EQ(range.x, 0);\n    EXPECT_EQ(range.y, 1);\n    EXPECT_EQ(range.z, 2);\n    EXPECT_EQ(range.width, 1);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 8);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 1);\n    EXPECT_EQ(range.numMipLevels, 1);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n  {\n    const auto initialRange = TextureRangeDesc::new2DArray(0, 5, 2, 10, 0, 2, 1);\n    const auto range = initialRange.atMipLevel(3);\n    EXPECT_EQ(range.x, 0);\n    EXPECT_EQ(range.y, 1);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 1);\n    EXPECT_EQ(range.height, 2);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 2);\n    EXPECT_EQ(range.mipLevel, 3);\n    EXPECT_EQ(range.numMipLevels, 1);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n}\n\nTEST(TextureRangeDesc, WithNumMipLevels) {\n  {\n    const auto initialRange = TextureRangeDesc::new2D(2, 3, 4, 5, 6, 7);\n    const auto range = initialRange.withNumMipLevels(8);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 6);\n    EXPECT_EQ(range.numMipLevels, 8);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n}\n\nTEST(TextureRangeDesc, AtLayer) {\n  {\n    const auto initialRange = TextureRangeDesc::new2DArray(2, 3, 4, 5, 6, 7, 8);\n    const auto range = initialRange.atLayer(1);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 1);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 8);\n    EXPECT_EQ(range.numMipLevels, 1);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n}\n\nTEST(TextureRangeDesc, WithNumLayers) {\n  {\n    const auto initialRange = TextureRangeDesc::new2D(2, 3, 4, 5, 6, 7);\n    const auto range = initialRange.withNumLayers(8);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 8);\n    EXPECT_EQ(range.mipLevel, 6);\n    EXPECT_EQ(range.numMipLevels, 7);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n}\n\nTEST(TextureRangeDesc, AtFace) {\n  {\n    const auto initialRange = TextureRangeDesc::new2D(2, 3, 4, 5, 6, 7);\n    const auto range = initialRange.atFace(1);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 6);\n    EXPECT_EQ(range.numMipLevels, 7);\n    EXPECT_EQ(range.face, 1);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n  {\n    const auto initialRange = TextureRangeDesc::new2D(2, 3, 4, 5, 6, 7);\n    const auto range = initialRange.atFace(TextureCubeFace::NegX);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 6);\n    EXPECT_EQ(range.numMipLevels, 7);\n    EXPECT_EQ(range.face, 1);\n    EXPECT_EQ(range.numFaces, 1);\n  }\n}\n\nTEST(TextureRangeDesc, WithNumFaces) {\n  {\n    const auto initialRange = TextureRangeDesc::new2D(2, 3, 4, 5, 6, 7);\n    const auto range = initialRange.withNumFaces(8);\n    EXPECT_EQ(range.x, 2);\n    EXPECT_EQ(range.y, 3);\n    EXPECT_EQ(range.z, 0);\n    EXPECT_EQ(range.width, 4);\n    EXPECT_EQ(range.height, 5);\n    EXPECT_EQ(range.depth, 1);\n    EXPECT_EQ(range.layer, 0);\n    EXPECT_EQ(range.numLayers, 1);\n    EXPECT_EQ(range.mipLevel, 6);\n    EXPECT_EQ(range.numMipLevels, 7);\n    EXPECT_EQ(range.face, 0);\n    EXPECT_EQ(range.numFaces, 8);\n  }\n}\n\nTEST(TextureRangeDesc, Validate) {\n  igl::setDebugBreakEnabled(false);\n  constexpr size_t kMax = std::numeric_limits<uint32_t>::max();\n  constexpr size_t kMaxPlus1 = std::numeric_limits<uint32_t>::max() + 1;\n  // Overflow validation logic doesn't work on 32bit architectures\n  constexpr bool kRunOverflowTests = (sizeof(size_t) > sizeof(uint32_t));\n\n  // 2D\n  EXPECT_TRUE(TextureRangeDesc::new2D(0, 0, 1024, 1024).validate().isOk());\n  EXPECT_TRUE(TextureRangeDesc::new2D(0, 0, 1024, 1024, 0, 11).validate().isOk());\n  EXPECT_TRUE(TextureRangeDesc::new2D(0, 0, 1, kMax).validate().isOk());\n  EXPECT_TRUE(TextureRangeDesc::new2D(0, 0, kMax, 1).validate().isOk());\n  EXPECT_TRUE(TextureRangeDesc::new2D(0, 0, 1024, 1024, kMax, 1).validate().isOk());\n\n  if (kRunOverflowTests) {\n    EXPECT_FALSE(TextureRangeDesc::new2D(0, 0, kMax, 1024).validate().isOk());\n    EXPECT_FALSE(TextureRangeDesc::new2D(0, 0, 1024, kMax).validate().isOk());\n\n    EXPECT_FALSE(TextureRangeDesc::new2D(1, 1, 1, kMax).validate().isOk());\n    EXPECT_FALSE(TextureRangeDesc::new2D(1, 1, kMax, 1).validate().isOk());\n\n    EXPECT_FALSE(TextureRangeDesc::new2D(0, 0, 1, kMaxPlus1).validate().isOk());\n    EXPECT_FALSE(TextureRangeDesc::new2D(0, 0, kMaxPlus1, 1).validate().isOk());\n  }\n\n  EXPECT_FALSE(TextureRangeDesc::new2D(0, 0, 1024, 1024, 0, 12).validate().isOk());\n\n  // 2D Array\n  EXPECT_TRUE(TextureRangeDesc::new2DArray(0, 0, 1024, 1024, 0, 1024).validate().isOk());\n  EXPECT_TRUE(TextureRangeDesc::new2DArray(0, 0, 1, 1, 0, kMax).validate().isOk());\n\n  if (kRunOverflowTests) {\n    EXPECT_FALSE(TextureRangeDesc::new2DArray(0, 0, 1024, 1024, 0, kMax).validate().isOk());\n    EXPECT_FALSE(TextureRangeDesc::new2DArray(0, 0, 1, 1, 1, kMax).validate().isOk());\n\n    EXPECT_FALSE(TextureRangeDesc::new2DArray(0, 0, 1, 1, 0, kMaxPlus1).validate().isOk());\n  }\n\n  // 3D\n  EXPECT_TRUE(TextureRangeDesc::new3D(0, 0, 0, 1024, 1024, 1024).validate().isOk());\n  EXPECT_TRUE(TextureRangeDesc::new3D(0, 0, 0, 1, 1, kMax).validate().isOk());\n\n  if (kRunOverflowTests) {\n    EXPECT_FALSE(TextureRangeDesc::new3D(0, 0, 0, 1024, 1024, kMax).validate().isOk());\n    EXPECT_FALSE(TextureRangeDesc::new3D(0, 0, 1, 1, 1, kMax).validate().isOk());\n\n    EXPECT_FALSE(TextureRangeDesc::new3D(0, 0, 0, 1, 1, kMaxPlus1).validate().isOk());\n  }\n\n  // Cube\n  EXPECT_TRUE(TextureRangeDesc::newCube(0, 0, 1024, 1024).validate().isOk());\n\n  EXPECT_FALSE(TextureRangeDesc::newCube(0, 0, 1024, 1024).withNumFaces(7).validate().isOk());\n  EXPECT_FALSE(TextureRangeDesc::newCube(0, 0, 1024, 1024).atFace(7).validate().isOk());\n}\n\nnamespace {\nTextureRangeDesc createTestRange() {\n  TextureRangeDesc range;\n  range.x = 1;\n  range.y = 2;\n  range.z = 3;\n  range.width = 4;\n  range.height = 5;\n  range.depth = 6;\n  range.layer = 7;\n  range.numLayers = 8;\n  range.mipLevel = 9;\n  range.numMipLevels = 10;\n  range.face = 11;\n  range.numFaces = 12;\n\n  return range;\n}\n} // namespace\n\nTEST(TextureRangeDesc, Equality) {\n  const auto rangeA = createTestRange();\n  {\n    const auto rangeB = createTestRange();\n    EXPECT_TRUE(rangeA == rangeB);\n    EXPECT_FALSE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.x = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.y = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.z = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.width = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.height = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.depth = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.layer = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.numLayers = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.mipLevel = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.numMipLevels = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.face = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n  {\n    auto rangeB = createTestRange();\n    rangeB.numFaces = 0;\n    EXPECT_FALSE(rangeA == rangeB);\n    EXPECT_TRUE(rangeA != rangeB);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/TexturesRGB.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"data/ShaderData.h\"\n#include \"data/TextureData.h\"\n#include \"data/VertexIndexData.h\"\n#include \"util/Color.h\"\n#include \"util/Common.h\"\n\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n//\n// TexturesRGBBaseTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass TexturesRGBBaseTest : public ::testing::Test {\n private:\n public:\n  TexturesRGBBaseTest() = default;\n  ~TexturesRGBBaseTest() override = default;\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_SRGB,\n                                                   offscreenTexWidth_,\n                                                   offscreenTexHeight_,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n\n// The sRGB hardware extension should decode and re-encode to exactly the same color values\n// which is what this test is trying to test.\n// It turns out that not everyone gets it 100% right.\n// the platforms below, on OpenGL result with some colors\n// have a + or - 1 to the original value which is most probably due to the\n// the level of precision used to perform the arithmetic.\n// The kTolerance is used to not only make this test not fail but also to document\n// which platform gets it right and which platform gets it slightly wrong.\n// Panther is external codename for Quest3s and Eureka is external codename for Quest3\n#if IGL_PLATFORM_LINUX_SWIFTSHADER || defined(PANTHER_PLATFORM) || defined(EUREKA_PLATFORM)\n    if (iglDev_->getBackendType() == BackendType::OpenGL) {\n      tolerance_ = 1; // Swiftshader and quest 3(s) opengl is not accurate enough.\n    }\n#endif\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n  const std::string backend_ = IGL_BACKEND_TYPE;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  // Currently it is left to individual tests to initialize this\n  std::shared_ptr<ITexture> inputTexture_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n  size_t textureUnit_ = 0;\n\n  // Picking this just to match the texture we will use. If you use a different\n  // size texture, then you will have to either create a new offscreenTexture_\n  // and the framebuffer object in your test, so know exactly what the end result\n  // would be after sampling\n  size_t offscreenTexWidth_ = 2;\n  size_t offscreenTexHeight_ = 2;\n\n  uint8_t tolerance_ = 0; // some platforms aren't perfect and need some tolerance\n};\n\nclass TexturesRGBSmallTest : public TexturesRGBBaseTest {\n  void SetUp() override {\n    TexturesRGBBaseTest::SetUp();\n  }\n};\n\nclass TexturesRGBBigTest : public TexturesRGBBaseTest {\n  void SetUp() override {\n    offscreenTexWidth_ = 4096;\n    offscreenTexHeight_ = 4096;\n    TexturesRGBBaseTest::SetUp();\n  }\n};\n//\n// isSRGB test\n//\n// This test checks whether the texture format can be detected as sRGB or not\n//\nTEST_F(TexturesRGBSmallTest, TextureisSRGB) {\n  Result ret;\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_SRGB,\n                                                 offscreenTexWidth_,\n                                                 offscreenTexHeight_,\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(inputTexture_->getProperties().isSRGB());\n\n  const TextureDesc texDesc2 = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                  offscreenTexWidth_,\n                                                  offscreenTexHeight_,\n                                                  TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_FALSE(!inputTexture_->getProperties().isSRGB());\n}\n\n//\n// TexturesRGB Passthrough Test\n//\n// This test uses a simple shader to copy the input texture to a same\n// sized output texture (offscreenTexture_) and make sure colors are being preserved\n//\nTEST_F(TexturesRGBSmallTest, Passthrough) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_SRGB,\n                                                 offscreenTexWidth_,\n                                                 offscreenTexHeight_,\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, offscreenTexWidth_, offscreenTexHeight_);\n\n  inputTexture_->upload(rangeDesc, data::texture::kTexRgba2x2.data());\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //-------\n  // Render\n  //-------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  auto pixels = std::vector<uint32_t>(offscreenTexWidth_ * offscreenTexHeight_);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n\n  //--------------------------------\n  // Verify against original texture\n  //--------------------------------\n  for (size_t i = 0; i < offscreenTexWidth_ * offscreenTexHeight_; i++) {\n    const util::SRgbColor currentColor(pixels[i]);\n    const util::SRgbColor testColor(data::texture::kTexRgba2x2[i]);\n    ASSERT_LE(abs(currentColor.r - testColor.r), tolerance_);\n    ASSERT_LE(abs(currentColor.g - testColor.g), tolerance_);\n    ASSERT_LE(abs(currentColor.b - testColor.b), tolerance_);\n    ASSERT_LE(abs(currentColor.a - testColor.a), tolerance_);\n  }\n}\n\nTEST_F(TexturesRGBBigTest, Passthrough) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //-------------------------------------\n  // Create input texture and upload data\n  //-------------------------------------\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_SRGB,\n                                                 offscreenTexWidth_,\n                                                 offscreenTexHeight_,\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(inputTexture_ != nullptr);\n\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, offscreenTexWidth_, offscreenTexHeight_);\n\n  const size_t kAllColorsCount = 256ul * 256ul * 256ul;\n  ASSERT_TRUE(kAllColorsCount == offscreenTexWidth_ * offscreenTexHeight_);\n  std::vector<uint32_t> allColorsBuffer(offscreenTexWidth_ * offscreenTexHeight_);\n  size_t index = 0;\n  for (size_t r = 0; r < 256ul; ++r) {\n    for (size_t g = 0; g < 256ul; ++g) {\n      for (size_t b = 0; b < 256ul; ++b) {\n        ASSERT_TRUE(index < kAllColorsCount);\n        allColorsBuffer[index] = (r << 24) | (g << 16) | (b << 8) | 0xFF;\n        ++index;\n      }\n    }\n  }\n  inputTexture_->upload(rangeDesc, allColorsBuffer.data());\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //-------\n  // Render\n  //-------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  auto cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  cmdBuf_->waitUntilCompleted();\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  auto pixels = std::vector<uint32_t>(offscreenTexWidth_ * offscreenTexHeight_);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n\n  //--------------------------------\n  // Verify against original texture\n  //--------------------------------\n  for (size_t i = 0; i < offscreenTexWidth_ * offscreenTexHeight_; i++) {\n    const util::SRgbColor currentColor(pixels[i]);\n    const util::SRgbColor testColor(allColorsBuffer[i]);\n    ASSERT_LE(abs(currentColor.r - testColor.r), tolerance_);\n    ASSERT_LE(abs(currentColor.g - testColor.g), tolerance_);\n    ASSERT_LE(abs(currentColor.b - testColor.b), tolerance_);\n    ASSERT_LE(abs(currentColor.a - testColor.a), tolerance_);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/VertexInputState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n//\n// VertexInputStateTest\n//\n// Tests types related to abstraction of vertex input state (attribute formats,\n// attributes, bindings, and input state descriptors).\n//\n//\nclass VertexInputStateTest : public ::testing::Test {\n public:\n  VertexInputStateTest() = default;\n  ~VertexInputStateTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  const std::string backend_ = IGL_BACKEND_TYPE;\n};\n\n//\n// VertexAttributeSizes\n//\n// Verifies that all vertex attribute formats report sizes that agree with what is expected by\n// extant backends.\n//\nTEST_F(VertexInputStateTest, VertexAttributeSizes) {\n  ASSERT_EQ(4, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Float1));\n  ASSERT_EQ(8, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Float2));\n  ASSERT_EQ(12, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Float3));\n  ASSERT_EQ(16, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Float4));\n  ASSERT_EQ(1, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Byte1));\n  ASSERT_EQ(2, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Byte2));\n  ASSERT_EQ(3, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Byte3));\n  ASSERT_EQ(4, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Byte4));\n  ASSERT_EQ(1, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UByte1));\n  ASSERT_EQ(2, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UByte2));\n  ASSERT_EQ(3, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UByte3));\n  ASSERT_EQ(4, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UByte4));\n  ASSERT_EQ(2, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Short1));\n  ASSERT_EQ(4, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Short2));\n  ASSERT_EQ(6, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Short3));\n  ASSERT_EQ(8, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Short4));\n  ASSERT_EQ(2, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UShort1));\n  ASSERT_EQ(4, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UShort2));\n  ASSERT_EQ(6, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UShort3));\n  ASSERT_EQ(8, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UShort4));\n  ASSERT_EQ(1,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Byte1Norm));\n  ASSERT_EQ(2,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Byte2Norm));\n  ASSERT_EQ(3,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Byte3Norm));\n  ASSERT_EQ(4,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Byte4Norm));\n  ASSERT_EQ(1,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UByte1Norm));\n  ASSERT_EQ(2,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UByte2Norm));\n  ASSERT_EQ(3,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UByte3Norm));\n  ASSERT_EQ(4,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UByte4Norm));\n  ASSERT_EQ(2,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Short1Norm));\n  ASSERT_EQ(4,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Short2Norm));\n  ASSERT_EQ(6,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Short3Norm));\n  ASSERT_EQ(8,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Short4Norm));\n  ASSERT_EQ(2,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UShort1Norm));\n  ASSERT_EQ(4,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UShort2Norm));\n  ASSERT_EQ(6,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UShort3Norm));\n  ASSERT_EQ(8,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UShort4Norm));\n  ASSERT_EQ(2,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::HalfFloat1));\n  ASSERT_EQ(4,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::HalfFloat2));\n  ASSERT_EQ(6,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::HalfFloat3));\n  ASSERT_EQ(8,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::HalfFloat4));\n\n  ASSERT_EQ(4,\n            VertexInputStateDesc::sizeForVertexAttributeFormat(\n                VertexAttributeFormat::Int_2_10_10_10_REV));\n\n  ASSERT_EQ(4, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Int1));\n  ASSERT_EQ(8, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Int2));\n  ASSERT_EQ(12, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Int3));\n  ASSERT_EQ(16, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::Int4));\n\n  ASSERT_EQ(4, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UInt1));\n  ASSERT_EQ(8, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UInt2));\n  ASSERT_EQ(12, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UInt3));\n  ASSERT_EQ(16, VertexInputStateDesc::sizeForVertexAttributeFormat(VertexAttributeFormat::UInt4));\n}\n\n//\n// VertexInputBindingEquality\n//\n// Exercises == and != operators for the VertexInputBinding type\n//\nTEST_F(VertexInputStateTest, VertexInputBindingEquality) {\n  VertexInputBinding binding1, binding2;\n\n  // Default-constructed bindings should be equal.\n  ASSERT_EQ(binding1, binding2);\n\n  // Bindings that differ in sample function should compare non-equal.\n  binding1.sampleFunction = VertexSampleFunction::Constant;\n  binding2.sampleFunction = VertexSampleFunction::PerVertex;\n  ASSERT_NE(binding1, binding2);\n  binding1.sampleFunction = binding2.sampleFunction;\n  ASSERT_EQ(binding1, binding2);\n\n  // Bindings that differ in stride should compare non-equal.\n  binding1.stride = 16;\n  binding2.stride = 12;\n  ASSERT_NE(binding1, binding2);\n  binding1.stride = binding2.stride;\n  ASSERT_EQ(binding1, binding2);\n\n  // Bindings that differ in stride should compare non-equal.\n  binding1.sampleRate = 4;\n  binding2.sampleRate = 1;\n  ASSERT_NE(binding1, binding2);\n  binding1.sampleRate = binding2.sampleRate;\n  ASSERT_EQ(binding1, binding2);\n}\n\n//\n// VertexAttributeEquality\n//\n// Exercises == and != operators for the VertexAttribute type\n//\nTEST_F(VertexInputStateTest, VertexAttributeEquality) {\n  VertexAttribute attr1, attr2;\n\n  // Default-constructed attributes should be equal.\n  ASSERT_EQ(attr1, attr2);\n\n  // Attributes with different buffer indices should compare non-equal.\n  attr1.bufferIndex = 1;\n  ASSERT_NE(attr1, attr2);\n  attr1.bufferIndex = attr2.bufferIndex;\n  ASSERT_EQ(attr1, attr2);\n\n  // Attributes with different formats should compare non-equal.\n  attr1.format = VertexAttributeFormat::Float4;\n  ASSERT_NE(attr1, attr2);\n  attr1.format = attr2.format;\n  ASSERT_EQ(attr1, attr2);\n\n  // Attributes with different offsets should compare non-equal.\n  attr1.offset = 8;\n  ASSERT_NE(attr1, attr2);\n  attr1.offset = attr2.offset;\n  ASSERT_EQ(attr1, attr2);\n\n  // Attributes with different names should compare non-equal (OpenGL ES-only).\n  attr1.name = \"a\";\n  ASSERT_NE(attr1, attr2);\n  attr1.name = attr2.name;\n  ASSERT_EQ(attr1, attr2);\n\n  // Attributes with different locations should compare non-equal (Metal-only).\n  attr1.location = 2;\n  ASSERT_NE(attr1, attr2);\n  attr1.location = attr2.location;\n  ASSERT_EQ(attr1, attr2);\n}\n\n//\n// VertexInputStateDescEquality\n//\n// Exercises == and != operators for the VertexInputStateDesc type\n//\nTEST_F(VertexInputStateTest, VertexInputStateDescEquality) {\n  VertexInputStateDesc desc1, desc2;\n\n  // Default-constructed descriptors should be equal.\n  ASSERT_EQ(desc1, desc2);\n\n  // Descriptors populated with the same attributes and bindings should compare equal.\n  desc1.numAttributes = 2;\n  desc1.attributes[0].bufferIndex = 0;\n  desc1.attributes[0].format = VertexAttributeFormat::Float4;\n  desc1.attributes[0].offset = 0;\n  desc1.attributes[1].bufferIndex = 1;\n  desc1.attributes[1].format = VertexAttributeFormat::Float4;\n  desc1.attributes[1].offset = 0;\n  desc1.numInputBindings = 2;\n  desc1.inputBindings[0].stride = 16;\n  desc1.inputBindings[1].stride = 16;\n  desc2.numAttributes = desc1.numAttributes;\n  desc2.attributes[0].bufferIndex = desc1.attributes[0].bufferIndex;\n  desc2.attributes[0].format = desc1.attributes[0].format;\n  desc2.attributes[0].offset = desc1.attributes[0].offset;\n  desc2.attributes[1].bufferIndex = desc1.attributes[1].bufferIndex;\n  desc2.attributes[1].format = desc1.attributes[1].format;\n  desc2.attributes[1].offset = desc1.attributes[1].offset;\n  desc2.numInputBindings = desc1.numInputBindings;\n  desc2.inputBindings[0].stride = desc1.inputBindings[0].stride;\n  desc2.inputBindings[1].stride = desc1.inputBindings[1].stride;\n  ASSERT_EQ(desc1, desc2);\n\n  // Descriptors with different attribute counts should compare non-equal.\n  desc1.numAttributes = 1;\n  ASSERT_NE(desc1, desc2);\n  desc1.numAttributes = desc2.numAttributes;\n  ASSERT_EQ(desc1, desc2);\n\n  // Descriptors with differing attributes should compare non-equal.\n  desc1.attributes[0].format = VertexAttributeFormat::Float2;\n  ASSERT_NE(desc1, desc2);\n  desc1.attributes[0].format = desc2.attributes[0].format;\n  ASSERT_EQ(desc1, desc2);\n\n  // Descriptors with different binding counts should compare non-equal.\n  desc1.numInputBindings = 1;\n  ASSERT_NE(desc1, desc2);\n  desc1.numInputBindings = desc2.numInputBindings;\n  ASSERT_EQ(desc1, desc2);\n\n  // Descriptors with differing bindings should compare non-equal.\n  desc1.inputBindings[0].stride = 32;\n  ASSERT_NE(desc1, desc2);\n  desc1.inputBindings[0].stride = desc2.inputBindings[0].stride;\n  ASSERT_EQ(desc1, desc2);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/android/NativeHWBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n#include <gtest/gtest.h>\n\n#include <igl/android/NativeHWBuffer.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../data/TextureData.h\"\n#include \"../data/VertexIndexData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TextureValidationHelpers.h\"\n#include \"../util/device/TestDevice.h\"\n\n#include <android/hardware_buffer.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/egl/PlatformDevice.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/PlatformDevice.h>\n\nnamespace igl::tests {\n\nusing namespace igl::android;\n\nconstexpr uint32_t kOffscreenTexWidth = 10u;\nconstexpr uint32_t kOffscreenTexHeight = 10u;\n\nclass NativeHWBufferTest : public ::testing::Test {\n public:\n  NativeHWBufferTest() = default;\n  ~NativeHWBufferTest() override = default;\n};\n\nclass NativeHWTextureBufferTest : public igl::android::INativeHWTextureBuffer {\n protected:\n  Result createTextureInternal(AHardwareBuffer* buffer) override {\n    return Result();\n  }\n};\n\nTEST_F(NativeHWBufferTest, Basic_getNativeHWFormat) {\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::RGBX_UNorm8), AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM);\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::RGBA_UNorm8), AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM);\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::B5G6R5_UNorm), AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM);\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::RGBA_F16), AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT);\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::RGB10_A2_UNorm_Rev),\n            AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM);\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::Z_UNorm16), AHARDWAREBUFFER_FORMAT_D16_UNORM);\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::Z_UNorm24), AHARDWAREBUFFER_FORMAT_D24_UNORM);\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::Z_UNorm32), AHARDWAREBUFFER_FORMAT_D32_FLOAT);\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::S8_UInt_Z24_UNorm),\n            AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT);\n  EXPECT_EQ(getNativeHWFormat(TextureFormat::S_UInt8), AHARDWAREBUFFER_FORMAT_S8_UINT);\n  EXPECT_EQ(getNativeHWFormat(igl::TextureFormat::YUV_NV12),\n            AHARDWAREBUFFER_FORMAT_YCbCr_420_SP_VENUS);\n  EXPECT_EQ(getNativeHWFormat(igl::TextureFormat::Invalid), 0);\n#if __ANDROID_MIN_SDK_VERSION__ >= 30\n  EXPECT_EQ(getNativeHWFormat(igl::TextureFormat::YUV_420p), AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420);\n#endif\n}\n\nTEST_F(NativeHWBufferTest, Basic_getIglFormat) {\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM),\n            TextureFormat::RGBX_UNorm8);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM),\n            TextureFormat::RGBA_UNorm8);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_R5G6B5_UNORM),\n            TextureFormat::B5G6R5_UNorm);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_R16G16B16A16_FLOAT),\n            TextureFormat::RGBA_F16);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_R10G10B10A2_UNORM),\n            TextureFormat::RGB10_A2_UNorm_Rev);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_D16_UNORM), TextureFormat::Z_UNorm16);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_D24_UNORM), TextureFormat::Z_UNorm24);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_D32_FLOAT), TextureFormat::Z_UNorm32);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_D24_UNORM_S8_UINT),\n            TextureFormat::S8_UInt_Z24_UNorm);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_S8_UINT), TextureFormat::S_UInt8);\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_YCbCr_420_SP_VENUS),\n            TextureFormat::YUV_NV12);\n#if __ANDROID_MIN_SDK_VERSION__ >= 30\n  EXPECT_EQ(igl::android::getIglFormat(AHARDWAREBUFFER_FORMAT_Y8Cb8Cr8_420),\n            TextureFormat::YUV_420p);\n#endif\n}\n\nTEST_F(NativeHWBufferTest, getNativeHWBufferUsage) {\n  EXPECT_TRUE(getNativeHWBufferUsage(TextureDesc::TextureUsageBits::Sampled) |\n              AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE);\n  EXPECT_TRUE(getNativeHWBufferUsage(TextureDesc::TextureUsageBits::Storage) |\n              AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN | AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN);\n  EXPECT_TRUE(getNativeHWBufferUsage(TextureDesc::TextureUsageBits::Attachment) |\n              AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT);\n}\n\nTEST_F(NativeHWBufferTest, getIglBufferUsage) {\n  EXPECT_TRUE(getIglBufferUsage(AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE) |\n              TextureDesc::TextureUsageBits::Sampled);\n  EXPECT_TRUE(getIglBufferUsage(AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN |\n                                AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN) |\n              TextureDesc::TextureUsageBits::Storage);\n  EXPECT_TRUE(getIglBufferUsage(AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT) |\n              TextureDesc::TextureUsageBits::Attachment);\n}\n\nTEST_F(NativeHWBufferTest, allocateNativeHWBuffer) {\n  AHardwareBuffer* hwBuffer;\n  auto allocationResult = allocateNativeHWBuffer(\n      TextureDesc::newNativeHWBufferImage(\n          TextureFormat::RGBA_UNorm8, TextureDesc::TextureUsageBits::Sampled, 100, 100),\n      false,\n      &hwBuffer);\n\n  EXPECT_TRUE(allocationResult.isOk());\n  EXPECT_NE(hwBuffer, nullptr);\n\n  AHardwareBuffer_Desc hwbDesc;\n  AHardwareBuffer_describe(hwBuffer, &hwbDesc);\n\n  AHardwareBuffer_release(hwBuffer);\n\n  EXPECT_EQ(hwbDesc.format, AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM);\n  EXPECT_EQ(hwbDesc.width, 100);\n  EXPECT_EQ(hwbDesc.height, 100);\n  EXPECT_EQ(hwbDesc.layers, 1);\n  EXPECT_EQ(hwbDesc.usage, AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE);\n}\n\nTEST_F(NativeHWBufferTest, LockBuffer) {\n  AHardwareBuffer* hwBuffer;\n\n  auto allocationResult = allocateNativeHWBuffer(\n      TextureDesc::newNativeHWBufferImage(\n          TextureFormat::RGBA_UNorm8, TextureDesc::TextureUsageBits::Sampled, 100, 100),\n      false,\n      &hwBuffer);\n\n  EXPECT_TRUE(allocationResult.isOk());\n  EXPECT_NE(hwBuffer, nullptr);\n\n  {\n    NativeHWTextureBufferTest testTxBuffer;\n\n    EXPECT_TRUE(testTxBuffer.createWithHWBuffer(hwBuffer).isOk());\n\n    std::byte* bytes = nullptr;\n    INativeHWTextureBuffer::RangeDesc outRange;\n    Result outResult;\n    auto lockGuard = testTxBuffer.lockHWBuffer(&bytes, outRange, &outResult);\n\n    EXPECT_TRUE(outResult.isOk());\n    EXPECT_NE(bytes, nullptr);\n    EXPECT_EQ(outRange.width, 100);\n    EXPECT_EQ(outRange.height, 100);\n    EXPECT_EQ(outRange.layer, 1);\n    EXPECT_EQ(outRange.mipLevel, 1);\n\n    lockGuard.~LockGuard();\n  }\n\n  AHardwareBuffer_release(hwBuffer);\n}\n\ntemplate<igl::BackendType TBackendType>\nclass NativeHWBufferTextureTest : public ::testing::Test {\n public:\n  NativeHWBufferTextureTest() = default;\n  ~NativeHWBufferTextureTest() override = default;\n\n  //\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the graphics pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    Result ret;\n\n    // Create Device\n    if (TBackendType == igl::BackendType::OpenGL) {\n      iglDev_ = util::device::createTestDevice(igl::BackendType::OpenGL);\n    } else if (TBackendType == igl::BackendType::Vulkan) {\n      iglDev_ = util::device::createTestDevice(igl::BackendType::Vulkan);\n    } else {\n      static_assert(\"Unsupported backend\");\n    }\n    ASSERT_TRUE(iglDev_ != nullptr);\n\n    // Create Command Queue\n    const CommandQueueDesc cqDesc = {};\n    cmdQueue_ = iglDev_->createCommandQueue(cqDesc, &ret);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   kOffscreenTexWidth,\n                                                   kOffscreenTexHeight,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment,\n                                                   \"test\");\n\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vb_ != nullptr);\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n\n    auto allocationResult = allocateNativeHWBuffer(\n        TextureDesc::newNativeHWBufferImage(TextureFormat::RGBA_UNorm8,\n                                            TextureDesc::TextureUsageBits::Sampled,\n                                            kOffscreenTexWidth,\n                                            kOffscreenTexHeight),\n        false,\n        &hwBuffer_);\n\n    ASSERT_TRUE(allocationResult.isOk());\n    ASSERT_NE(hwBuffer_, nullptr);\n\n    for (int i = 0; i < kOffscreenTexWidth * kOffscreenTexHeight; ++i) {\n      pixels_[i] = rand() % 0xFFFFFFFF;\n    }\n\n    AHardwareBuffer_Desc hwbDesc;\n    AHardwareBuffer_describe(hwBuffer_, &hwbDesc);\n\n    std::byte* bytes;\n\n    auto lock_result = AHardwareBuffer_lock(hwBuffer_,\n                                            AHARDWAREBUFFER_USAGE_CPU_WRITE_OFTEN,\n                                            -1,\n                                            nullptr,\n                                            reinterpret_cast<void**>(&bytes));\n    ASSERT_EQ(lock_result, 0);\n\n    for (int i = 0; i < hwbDesc.stride; ++i) {\n      for (int j = 0; j < hwbDesc.height; ++j) {\n        uint32_t color = 0x00000000;\n        if (i < hwbDesc.width && j < hwbDesc.height) {\n          color = pixels_[i + j * hwbDesc.width];\n        }\n        reinterpret_cast<uint32_t*>(bytes)[i + j * hwbDesc.stride] = color;\n      }\n    }\n\n    ASSERT_EQ(AHardwareBuffer_unlock(hwBuffer_, nullptr), 0);\n  }\n\n  void TearDown() override {\n    AHardwareBuffer_release(hwBuffer_);\n  }\n\n  // Member variables\n public:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n  size_t textureUnit_ = 0;\n\n  std::array<uint32_t, kOffscreenTexWidth * kOffscreenTexHeight> pixels_;\n  AHardwareBuffer* hwBuffer_;\n};\n\nusing NativeHWBufferTextureTestOpenGL3 = NativeHWBufferTextureTest<igl::BackendType::OpenGL>;\n\nTEST_F(NativeHWBufferTextureTestOpenGL3, SharedMemoryTexture) {\n  Result outResult;\n\n  auto platformDevice = iglDev_->getPlatformDevice<igl::opengl::egl::PlatformDevice>();\n  auto texture = platformDevice->createTextureWithSharedMemory(hwBuffer_, &outResult);\n\n  EXPECT_EQ(outResult.isOk(), true);\n  EXPECT_NE(texture.get(), nullptr);\n\n  util::validateUploadedTexture(\n      *iglDev_, *cmdQueue_, texture, pixels_.data(), \"HWBufferTextureOpenGL3\");\n}\n\nusing NativeHWBufferTextureTestVulkan = NativeHWBufferTextureTest<igl::BackendType::Vulkan>;\n\nTEST_F(NativeHWBufferTextureTestVulkan, SharedMemoryTexture) {\n  Result outResult;\n\n  auto platformDevice = iglDev_->getPlatformDevice<igl::vulkan::PlatformDevice>();\n  auto texture = platformDevice->createTextureWithSharedMemory(hwBuffer_, &outResult);\n\n  EXPECT_EQ(outResult.isOk(), true);\n  EXPECT_NE(texture.get(), nullptr);\n\n  util::validateUploadedTexture(\n      *iglDev_, *cmdQueue_, texture, pixels_.data(), \"HWBufferTextureVulkan\");\n}\n\n} // namespace igl::tests\n\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n"
  },
  {
    "path": "src/igl/tests/data/ShaderData.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstddef> // For size_t/\n#include <string_view>\n#include <igl/Macros.h>\n#if IGL_BACKEND_OPENGL\n#include <igl/opengl/Config.h>\n#endif // IGL_BACKEND_OPENGL\n\nnamespace igl::tests::data::shader {\n\n//-----------------------------------------------------------------------------\n// Defines names of inputs and functions for the shaders in this file\n//-----------------------------------------------------------------------------\nconstexpr std::string_view kShaderFunc = \"main\"; // For OGL and VK\nconstexpr std::string_view kSimpleVertFunc = \"vertexShader\";\nconstexpr std::string_view kSimpleFragFunc = \"fragmentShader\";\nconstexpr std::string_view kSimplePos = \"position_in\";\nconstexpr size_t kSimplePosIndex = 0;\nconstexpr std::string_view kSimpleUv = \"uv_in\";\nconstexpr size_t kSimpleUvIndex = 1;\nconstexpr std::string_view kSimpleSampler = \"inputImage\";\nconstexpr std::string_view kSimpleCubeView = \"view\";\n\nconstexpr std::string_view kSimpleComputeFunc = \"doubleKernel\";\nconstexpr std::string_view kSimpleComputeInput = \"floatsIn\";\nconstexpr std::string_view kSimpleComputeOutput = \"floatsOut\";\nconstexpr size_t kSimpleComputeInputIndex = 0;\nconstexpr size_t kSimpleComputeOutputIndex = 1;\n\n// clang-format off\n//-----------------------------------------------------------------------------\n// OGL Shaders\n//-----------------------------------------------------------------------------\n#if IGL_BACKEND_OPENGL && IGL_OPENGL_ES\n#define PROLOG precision mediump float;\n#else\n#define PROLOG\n#endif\n\n#define HASH_LIT #\n#define HASH() HASH_LIT\n#define VERSION(ver) HASH()version ver\\n\n#define REQUIRE_EXTENSION(ext) HASH()extension ext : require\\n\n\n#if IGL_BACKEND_OPENGL && !IGL_OPENGL_ES\n#if IGL_PLATFORM_APPLE\n#define LEGACY_VERSION VERSION(100) precision mediump float;\n#else\n#define LEGACY_VERSION\n#endif\n#else\n#define LEGACY_VERSION\n#endif\n\n// Simple OGL Vertex shader\nconstexpr std::string_view kOglSimpleVertShader =\n    IGL_TO_STRING(LEGACY_VERSION attribute vec4 position_in; attribute vec2 uv_in; varying vec2 uv;\n\n               void main() {\n                 gl_Position = position_in;\n                 gl_PointSize = 1.0; // Testing GL_POINTS draw primitive in Windows environment requires this.\n                                     // See https://github.com/khronosgroup/webgl/issues/2818\n                 uv = uv_in;\n               });\n\n// Simple OGL Fragment shader\nconstexpr std::string_view kOglSimpleFragShader =\n    IGL_TO_STRING(LEGACY_VERSION PROLOG uniform sampler2D inputImage; varying vec2 uv;\n\n               void main() {\n                 gl_FragColor = texture2D(inputImage, uv);\n                 });\n\nconstexpr std::string_view kOglSimpleVertShaderEs3 =\n    IGL_TO_STRING(VERSION(300 es)\n    in vec4 position_in; in vec2 uv_in; out vec2 uv;\n\n               void main() {\n                 gl_Position = position_in;\n                 gl_PointSize = 1.0; // Testing GL_POINTS draw primitive in Windows environment requires this.\n                                     // See https://github.com/khronosgroup/webgl/issues/2818\n                 uv = uv_in;\n               });\n\nconstexpr std::string_view kOglSimpleFragShaderEs3 =\n    IGL_TO_STRING(VERSION(300 es)\n    PROLOG uniform sampler2D inputImage; in vec2 uv; out vec4 fragColor;\n\n               void main() {\n                 fragColor = texture(inputImage, uv);\n                 });\n\nconstexpr std::string_view kOglSimpleVertShaderMultiviewEs3 =\n    IGL_TO_STRING(VERSION(300 es)\n    REQUIRE_EXTENSION(GL_OVR_multiview2)\n    layout(num_views = 2) in;\n\n    in vec4 position_in;\n    out vec4 color;\n\n    uniform vec4 colors[2];\n\n    void main() {\n      gl_Position = position_in;\n      color = colors[gl_ViewID_OVR];\n    });\n\nconstexpr std::string_view kOglSimpleFragShaderMultiviewEs3 =\n    IGL_TO_STRING(VERSION(300 es)\n    PROLOG\n    in vec4 color;\n    out vec4 fragColor;\n\n    void main() {\n      fragColor = color;\n    });\n\nconstexpr std::string_view kOglSimpleVertShaderTexArray =\nIGL_TO_STRING(VERSION(150)\n    in vec4 position_in;\n    in vec2 uv_in;\n    out vec2 uv;\n    flat out uint layer_out;\n\n    uniform int layer;\n\n    void main() {\n      gl_Position = position_in;\n      uv = uv_in;\n      layer_out = uint(layer);\n    });\n\nconstexpr std::string_view kOglSimpleFragShaderTexArray =\nIGL_TO_STRING(VERSION(150)\n    PROLOG\n    in vec2 uv;\n    flat in uint layer_out;\n    uniform sampler2DArray inputImage;\n\n    out vec4 fragColor;\n\n    void main() {\n      fragColor = texture(inputImage, vec3(uv, layer_out));\n    });\n\nconstexpr std::string_view kOglSimpleVertShaderTexArrayExt =\nIGL_TO_STRING(VERSION(110)\n    attribute vec4 position_in;\n    attribute vec2 uv_in;\n    uniform int layer;\n    varying vec2 uv;\n    varying float layer_out;\n\n    void main() {\n      gl_Position = position_in;\n      uv = uv_in;\n      layer_out = float(layer);\n    });\n\nconstexpr std::string_view kOglSimpleFragShaderTexArrayExt =\nIGL_TO_STRING(VERSION(110)\n    REQUIRE_EXTENSION(GL_EXT_texture_array)\n    PROLOG\n\n    varying vec2 uv;\n    varying float layer_out;\n    uniform sampler2DArray inputImage;\n\n    void main() {\n      gl_FragColor = texture2DArray(inputImage, vec3(uv, layer_out));\n    });\n\nconstexpr std::string_view kOglSimpleVertShaderTexArrayEs3 =\nIGL_TO_STRING(VERSION(300 es)\n    in vec4 position_in;\n    in vec2 uv_in;\n    out vec2 uv_vs;\n    flat out uint layer_vs;\n\n    uniform int layer;\n\n    void main() {\n      gl_Position = position_in;\n      uv_vs = uv_in;\n      layer_vs = uint(layer);\n    });\n\nconstexpr std::string_view kOglSimpleFragShaderTexArrayEs3 =\nIGL_TO_STRING(VERSION(300 es)\n    PROLOG\n    in vec2 uv_vs;\n    flat in uint layer_vs;\n    uniform mediump sampler2DArray inputImage;\n\n    out vec4 fragColor;\n\n    void main() {\n      fragColor = texture(inputImage, vec3(uv_vs, layer_vs));\n    });\n\n// Simple OGL Vertex shader for textureCube and texture3D\nconstexpr std::string_view kOglSimpleVertShaderCube =\n    IGL_TO_STRING(LEGACY_VERSION attribute vec4 position_in; uniform vec4 view; varying vec3 uv;\n\n               void main() {\n                 gl_Position = position_in;\n                 uv = view.xyz;\n               });\n\n// Simple OGL Fragment shader\nconstexpr std::string_view kOglSimpleFragShaderCube =\n    IGL_TO_STRING(LEGACY_VERSION PROLOG uniform samplerCube inputImage; varying vec3 uv;\n\n               void main() { gl_FragColor = textureCube(inputImage, uv); });\n\n// Simple shader which multiplies each float value in the input buffer by 2 and writes the result to the output buffer\nconstexpr std::string_view kOglSimpleComputeShader =\n  IGL_TO_STRING(VERSION(310 es)\n        precision highp float;\n\n        layout (local_size_x = 6, local_size_y = 1, local_size_z = 1) in;\n        layout (std430, binding = 0) readonly buffer floatsIn {\n          float fIn[];\n        };\n        layout (std430, binding = 1) writeonly buffer floatsOut {\n          float fOut[];\n        };\n\n        void main() {\n            uint id = gl_LocalInvocationIndex;\n\n            fOut[id] = fIn[id] * 2.0f;\n        });\n\nconstexpr std::string_view kOglSimpleVertShaderUniformBlocks =\n      IGL_TO_STRING(VERSION(300 es)\n      in vec4 position_in; out vec3 uv;\n\n      layout (std140) uniform block_without_instance_name {\n        float scale;\n      };\n\n     layout (std140) uniform block_with_instance_name {\n        vec3 view;\n        vec4 testArray[2];\n      } matrices;\n\n      uniform bool non_uniform_block_bool;\n\n      void main() {\n        gl_Position = non_uniform_block_bool ? position_in * scale : position_in;\n        uv = matrices.view;\n      });\n\nconstexpr std::string_view kOglSimpleFragShaderUniformBlocks =\n    IGL_TO_STRING(VERSION(300 es)\n      PROLOG uniform sampler2D inputImage; in vec3 uv; out vec4 fragColor;\n\n      void main() {\n        fragColor = texture(inputImage, uv.xy);\n      });\n\n//-----------------------------------------------------------------------------\n// Metal Shaders\n//-----------------------------------------------------------------------------\n\n// Simple Metal Shader\n// The vertext function expects vertex and sampler positions to be bound to\n// separate buffers\n#define MTL_SIMPLE_SHADER_DEF(returnType, swizzle)                              \\\n    IGL_TO_STRING(using namespace metal;                                        \\\n                                                                                \\\n      typedef struct { float3 color; } UniformBlock;                            \\\n                                                                                \\\n      typedef struct {                                                          \\\n        float4 position [[position]];                                           \\\n        float pointSize [[point_size]];                                         \\\n        float2 uv;                                                              \\\n      } VertexOut;                                                              \\\n                                                                                \\\n      vertex VertexOut vertexShader(uint vid [[vertex_id]],                     \\\n                                    constant float4* position_in [[buffer(0)]], \\\n                                    constant float2* uv_in [[buffer(1)]]) {     \\\n        VertexOut out;                                                          \\\n        out.position = position_in[vid];                                        \\\n        out.pointSize = 1;                                                      \\\n        out.uv = uv_in[vid];                                                    \\\n        return out;                                                             \\\n      }                                                                         \\\n                                                                                \\\n      fragment returnType fragmentShader(VertexOut IN [[stage_in]],             \\\n                                    texture2d<float> diffuseTex [[texture(0)]], \\\n                                    sampler linearSampler [[sampler(0)]]) {     \\\n        float4 tex = diffuseTex.sample(linearSampler, IN.uv);                   \\\n        returnType ret = returnType(tex.swizzle);                               \\\n        return ret;                                                             \\\n      });                                                                       \\\n\nconstexpr std::string_view kMtlSimpleShaderFloat = MTL_SIMPLE_SHADER_DEF(float, r);\nconstexpr std::string_view kMtlSimpleShaderFloat2 = MTL_SIMPLE_SHADER_DEF(float2, rg);\nconstexpr std::string_view kMtlSimpleShaderFloat3 = MTL_SIMPLE_SHADER_DEF(float3, rgb);\nconstexpr std::string_view kMtlSimpleShaderFloat4 = MTL_SIMPLE_SHADER_DEF(float4, rgba);\nconstexpr std::string_view kMtlSimpleShaderUshort = MTL_SIMPLE_SHADER_DEF(ushort, r);\nconstexpr std::string_view kMtlSimpleShaderUshort2 = MTL_SIMPLE_SHADER_DEF(ushort2, rg);\nconstexpr std::string_view kMtlSimpleShaderUshort4 = MTL_SIMPLE_SHADER_DEF(ushort4, rgba);\nconstexpr std::string_view kMtlSimpleShaderUint4 = MTL_SIMPLE_SHADER_DEF(uint4, rgba);\nconstexpr std::string_view kMtlSimpleShaderUint = MTL_SIMPLE_SHADER_DEF(uint4, r);\nconstexpr std::string_view kMtlSimpleShader = MTL_SIMPLE_SHADER_DEF(float4, rgba);\n\n// Simple Metal Shader for 1D Texture\n// The vertext function expects vertex and sampler positions to be bound to\n// separate buffers\nconstexpr std::string_view kMtlSimpleShader1dtex =\n    IGL_TO_STRING(using namespace metal;\n\n               typedef struct { float3 color; } UniformBlock;\n\n               typedef struct {\n                 float4 position [[position]];\n                 float2 uv;\n               } VertexOut;\n\n               vertex VertexOut vertexShader(uint vid [[vertex_id]],\n                                             constant float4* position_in [[buffer(0)]],\n                                             constant float2* uv_in [[buffer(1)]]) {\n                 VertexOut out;\n                 out.position = position_in[vid];\n                 out.uv = uv_in[vid];\n                 return out;\n               }\n\n               fragment float4 fragmentShader(VertexOut IN [[stage_in]],\n                                              texture1d<float> diffuseTex [[texture(0)]],\n                                              sampler linearSampler [[sampler(0)]]) {\n                 float4 tex = diffuseTex.sample(linearSampler, IN.uv.x);\n\n                 return tex;\n               });\n\n// Simple Metal Shader\n// The vertext function expects vertex and sampler positions to be bound to\n// separate buffers\nconstexpr std::string_view kMtlSimpleShaderCube =\n    IGL_TO_STRING(using namespace metal;\n\n               typedef struct {\n                 // float3 color;\n                 float4 view;\n               } UniformBlock;\n\n               typedef struct {\n                 float4 position [[position]];\n                 float3 uv;\n               } VertexOut;\n\n               vertex VertexOut vertexShader(uint vid [[vertex_id]],\n                                             constant UniformBlock& uniforms [[buffer(1)]],\n                                             constant float4* position_in [[buffer(0)]],\n                                             constant float3* uv_in [[buffer(2)]]) {\n                 VertexOut out;\n                 out.position = position_in[vid];\n                 out.uv = uniforms.view.xyz;\n                 return out;\n               }\n\n               fragment float4 fragmentShader(VertexOut IN [[stage_in]],\n                                              texturecube<float> diffuseTex [[texture(0)]],\n                                              sampler linearSampler [[sampler(0)]]) {\n                 float4 tex = diffuseTex.sample(linearSampler, IN.uv);\n\n                 return tex;\n               });\n\n// Simple shader which multiplies each float value in the input buffer by 2 and writes the result to the output buffer\nconstexpr std::string_view kMtlSimpleComputeShader =\n  IGL_TO_STRING(using namespace metal;\n\n      kernel void doubleKernel(\n          device float* floatsIn [[buffer(0)]],\n          device float* floatsOut [[buffer(1)]],\n          uint2 gid [[thread_position_in_grid]]) {\n        floatsOut[gid.x] = floatsIn[gid.x] * 2.0;\n      });\n\nconstexpr std::string_view kMtlSimpleShaderTxt1dArray =\n    IGL_TO_STRING(using namespace metal;\n\n               typedef struct {\n                 int layer;\n               } UniformBlock;\n\n               typedef struct {\n                 float4 position [[position]];\n                 float2 uv;\n                 uint layer;\n               } VertexOut;\n\n               vertex VertexOut vertexShader(uint vid [[vertex_id]],\n                                             constant UniformBlock& uniforms [[buffer(2)]],\n                                             constant float4* position_in [[buffer(0)]],\n                                             constant float2* uv_in [[buffer(1)]]) {\n                 VertexOut out;\n                 out.position = position_in[vid];\n                 out.uv = uv_in[vid];\n                 out.layer = uniforms.layer;\n                 return out;\n               }\n\n               fragment float4 fragmentShader(VertexOut IN [[stage_in]],\n                                              texture1d_array<float> diffuseTex [[texture(0)]],\n                                              sampler linearSampler [[sampler(0)]]) {\n                 float4 tex = diffuseTex.sample(linearSampler, IN.uv.x, IN.layer);\n\n                 return tex;\n               });\n\n\nconstexpr std::string_view kMtlSimpleShaderTxt2dArray =\n    IGL_TO_STRING(using namespace metal;\n\n               typedef struct {\n                 int layer;\n               } UniformBlock;\n\n               typedef struct {\n                 float4 position [[position]];\n                 float2 uv;\n                 uint layer;\n               } VertexOut;\n\n               vertex VertexOut vertexShader(uint vid [[vertex_id]],\n                                             constant UniformBlock& uniforms [[buffer(2)]],\n                                             constant float4* position_in [[buffer(0)]],\n                                             constant float2* uv_in [[buffer(1)]]) {\n                 VertexOut out;\n                 out.position = position_in[vid];\n                 out.uv = uv_in[vid];\n                 out.layer = uniforms.layer;\n                 return out;\n               }\n\n               fragment float4 fragmentShader(VertexOut IN [[stage_in]],\n                                              texture2d_array<float> diffuseTex [[texture(0)]],\n                                              sampler linearSampler [[sampler(0)]]) {\n                 float4 tex = diffuseTex.sample(linearSampler, IN.uv, IN.layer);\n\n                 return tex;\n               });\n\n//-----------------------------------------------------------------------------\n// Vulkan Shaders\n//-----------------------------------------------------------------------------\n\n// Simple Vulkan Vertex shader\nconstexpr std::string_view kVulkanSimpleVertShader =\n    IGL_TO_STRING(\n      layout (location=0) in vec4 position_in;\n      layout (location=1) in vec2 uv_in;\n      layout (location=0) out vec2 uv;\n\n      void main() {\n        gl_Position = position_in;\n        gl_PointSize = 1.0; // Testing VK_PRIMITIVE_TOPOLOGY_POINT_LIST drawing requires this\n        uv = uv_in;\n      });\n\n// Simple Vulkan Fragment shader\n#define VULKAN_SIMPLE_FRAG_SHADER_DEF(returnType, swizzle)  \\\n    IGL_TO_STRING(                                          \\\n      layout (location=0) in vec2 uv;                       \\\n      layout (location=0) out returnType out_FragColor;     \\\n                                                            \\\n      layout (set = 0, binding = 0) uniform sampler2D uTex; \\\n                                                            \\\n      void main() {                                         \\\n        vec4 tex = texture(uTex, uv);                       \\\n        out_FragColor = returnType(tex.swizzle);            \\\n      });\n\nconstexpr std::string_view kVulkanSimpleFragShader = VULKAN_SIMPLE_FRAG_SHADER_DEF(vec4, rgba);\n\nconstexpr std::string_view kVulkanSimpleFragShaderFloat = VULKAN_SIMPLE_FRAG_SHADER_DEF(float, r);\nconstexpr std::string_view kVulkanSimpleFragShaderFloat2 = VULKAN_SIMPLE_FRAG_SHADER_DEF(vec2, rg);\nconstexpr std::string_view kVulkanSimpleFragShaderFloat3 = VULKAN_SIMPLE_FRAG_SHADER_DEF(vec3, rgb);\nconstexpr std::string_view kVulkanSimpleFragShaderFloat4 = VULKAN_SIMPLE_FRAG_SHADER_DEF(vec4, rgba);\nconstexpr std::string_view kVulkanSimpleFragShaderUint = VULKAN_SIMPLE_FRAG_SHADER_DEF(uint, r);\nconstexpr std::string_view kVulkanSimpleFragShaderUint2 = VULKAN_SIMPLE_FRAG_SHADER_DEF(uvec2, rg);\nconstexpr std::string_view kVulkanSimpleFragShaderUint4 = VULKAN_SIMPLE_FRAG_SHADER_DEF(uvec4, rgba);\n\nconstexpr std::string_view kVulkanPushConstantVertShader =\n    IGL_TO_STRING(\n      layout (location=0) in vec4 position_in;\n      layout (location=1) in vec2 uv_in;\n      layout (location=0) out vec2 uv;\n\n      void main() {\n        gl_Position = position_in;\n        gl_PointSize = 1.0;\n        uv = uv_in;\n      });\n\nconstexpr std::string_view kVulkanPushConstantFragShader =\n    IGL_TO_STRING(\n      layout (location=0) in vec2 uv;\n      layout (location=0) out vec4 out_FragColor;\n      \n      layout (set = 0, binding = 0) uniform sampler2D uTex;\n      \n      layout (push_constant) uniform PushConstants {\n        vec4 colorMultiplier;\n      } pushConstants;\n\n      void main() {\n        vec4 tex = texture(uTex, uv);\n        out_FragColor = tex * pushConstants.colorMultiplier;\n      });\n\n// D3D12 HLSL push constant shaders\nconstexpr const char* kD3D12PushConstantVertShader = R\"(\nstruct VSIn { float4 position_in : POSITION; float2 uv_in : TEXCOORD0; };\nstruct PSIn { float4 position : SV_POSITION; float2 uv : TEXCOORD0; };\nPSIn main(VSIn i) {\n  PSIn o;\n  o.position = i.position_in;\n  o.uv = i.uv_in;\n  return o;\n}\n)\";\n\nconstexpr const char* kD3D12PushConstantFragShader = R\"(\nTexture2D inputImage : register(t0);\nSamplerState samp0 : register(s0);\n\ncbuffer PushConstants : register(b2) {\n  float4 colorMultiplier;\n};\n\nstruct PSIn { float4 position : SV_POSITION; float2 uv : TEXCOORD0; };\nfloat4 main(PSIn i) : SV_TARGET {\n  float4 tex = inputImage.Sample(samp0, i.uv);\n  return tex * colorMultiplier;\n}\n)\";\n\nconstexpr std::string_view kVulkanSimpleVertShaderTex2dArray =\nIGL_TO_STRING(\n    layout(location = 0) in vec4 position_in;\n    layout(location = 1) in vec2 uv_in;\n    layout(location = 0) out vec2 uv_out;\n    layout(location = 1) out uint layer_out;\n\n    struct VertexUniforms {\n      int layer;\n    };\n\n    layout(set = 1, binding = 2, std140) uniform PerFrame {\n      VertexUniforms perFrame;\n    };\n\n    void main() {\n      gl_Position = position_in;\n      uv_out = uv_in;\n      layer_out = perFrame.layer;\n    });\n\nconstexpr std::string_view kVulkanSimpleFragShaderTex1darray =\nIGL_TO_STRING(\n    layout(location = 0) in vec2 uv;\n    layout(location = 1) in flat uint layer;\n    layout(location = 0) out vec4 out_FragColor;\n\n    layout (set = 0, binding = 0) uniform sampler1DArray uTex;\n\n    void main() {\n        out_FragColor = texture(uTex, vec2(uv.x, layer));\n    });\n\nconstexpr std::string_view kVulkanSimpleFragShaderTex2dArray =\nIGL_TO_STRING(\n    layout(location = 0) in vec2 uv;\n    layout(location = 1) in flat uint layer;\n    layout(location = 0) out vec4 out_FragColor;\n\n    layout (set = 0, binding = 0) uniform sampler2DArray uTex;\n\n    void main() {\n      out_FragColor = texture(uTex, vec3(uv.xy, layer));\n    });\n\nconstexpr std::string_view kVulkanSimpleVertShaderCube =\n    IGL_TO_STRING(layout(location = 0) in vec4 position_in;\n                  layout(location = 0) out vec3 view;\n\n                  struct VertexUniforms {\n                    vec4 view;\n                  };\n\n                  layout(set = 1, binding = 1, std140) uniform PerFrame {\n                     VertexUniforms perFrame;\n                  };\n\n               void main() {\n                 gl_Position = position_in;\n                 view = perFrame.view.xyz;\n               });\n\nconstexpr std::string_view kVulkanSimpleFragShaderCube =\n    IGL_TO_STRING(\n               layout(location = 0) in vec3 view;\n               layout(location = 0) out vec4 out_FragColor;\n\n               layout (set = 0, binding = 0) uniform samplerCube uTex;\n\n               void main() {\n                   out_FragColor = texture(uTex, view);\n               });\n\n// Simple Vulkan Vertex shader for multiview\nconstexpr std::string_view kVulkanSimpleVertShaderMultiview =\n    IGL_TO_STRING(\\n\n      REQUIRE_EXTENSION(GL_EXT_multiview)\n      layout (location = 0) in vec4 position_in;\n      layout (location = 0) out vec4 color_out;\n\n      layout(set = 1, binding = 1, std140) uniform PerFrame {\n        vec4 colors[2];\n      };\n\n      void main() {\n        gl_Position = position_in;\n        color_out = colors[gl_ViewIndex];\n      });\n\n// Simple Vulkan Fragment shader for multiview\nconstexpr std::string_view kVulkanSimpleFragShaderMultiview =\n    IGL_TO_STRING(\n      layout (location = 0) in vec4 color_in;\n      layout (location = 0) out vec4 out_FragColor;\n\n      void main() {\n        out_FragColor = color_in;\n      });\n\nconstexpr std::string_view kVulkanSimpleComputeShader =\n  IGL_TO_STRING(\n        layout (local_size_x = 6, local_size_y = 1, local_size_z = 1) in;\n        layout (std430, binding = 0, set = 1) readonly buffer floatsIn {\n          float fIn[];\n        };\n        layout (std430, binding = 1, set = 1) writeonly buffer floatsOut {\n          float fOut[];\n        };\n\n        void main() {\n            uint id = gl_LocalInvocationIndex;\n\n            fOut[id] = fIn[id] * 2.0f;\n        });\n// clang-format on\n//-----------------------------------------------------------------------------\n// D3D12/HLSL Shaders\n//-----------------------------------------------------------------------------\n\n// Simple D3D12 Shader with separate vertex and fragment functions\n// This is used for ShaderLibrary tests where multiple entry points are in the same source\nconstexpr std::string_view kD3D12SimpleShader = IGL_TO_STRING(\n    struct VSIn {\n      float4 position_in : POSITION;\n      float2 uv_in : TEXCOORD0;\n    };\n\n    struct VSOut {\n      float4 position : SV_POSITION;\n      float2 uv : TEXCOORD0;\n    };\n\n    VSOut vertexShader(VSIn input) {\n      VSOut output;\n      output.position = input.position_in;\n      output.uv = input.uv_in;\n      return output;\n    }\n\n    Texture2D inputImage : register(t0);\n    SamplerState linearSampler : register(s0);\n\n    float4 fragmentShader(\n        VSOut input) : SV_TARGET { return inputImage.Sample(linearSampler, input.uv); });\n\n// Simple D3D12 Vertex shader (standalone)\nconstexpr std::string_view kD3D12SimpleVertShader = IGL_TO_STRING(\n    struct VSIn {\n      float4 position_in : POSITION;\n      float2 uv_in : TEXCOORD0;\n    };\n\n    struct VSOut {\n      float4 position : SV_POSITION;\n      float2 uv : TEXCOORD0;\n    };\n\n    VSOut main(VSIn input) {\n      VSOut output;\n      output.position = input.position_in;\n      output.uv = input.uv_in;\n      return output;\n    });\n\n// Simple D3D12 Fragment shader (standalone)\nconstexpr std::string_view kD3D12SimpleFragShader = IGL_TO_STRING(\n    struct PSIn {\n      float4 position : SV_POSITION;\n      float2 uv : TEXCOORD0;\n    };\n\n    Texture2D inputImage : register(t0);\n    SamplerState linearSampler : register(s0);\n\n    float4 main(PSIn input) : SV_TARGET { return inputImage.Sample(linearSampler, input.uv); });\n\n// Simple D3D12 Compute shader\nconstexpr std::string_view kD3D12SimpleComputeShader =\n    IGL_TO_STRING(RWStructuredBuffer<float> floatsIn : register(u0);\n                  RWStructuredBuffer<float> floatsOut : register(u1);\n\n                  [numthreads(6, 1, 1)] void doubleKernel(uint3 threadID : SV_DispatchThreadID) {\n                    uint id = threadID.x;\n                    floatsOut[id] = floatsIn[id] * 2.0;\n                  });\n\n// D3D12 Texture2DArray Vertex shader\nconstexpr std::string_view kD3D12SimpleVertShaderTexArray = IGL_TO_STRING(\n    cbuffer VertexUniforms : register(b2) { int layer; };\n\n    struct VSIn {\n      float4 position_in : POSITION;\n      float2 uv_in : TEXCOORD0;\n    };\n\n    struct VSOut {\n      float4 position : SV_POSITION;\n      float2 uv : TEXCOORD0;\n      nointerpolation uint layerOut : TEXCOORD1;\n    };\n\n    VSOut main(VSIn input) {\n      VSOut output;\n      output.position = input.position_in;\n      output.uv = input.uv_in;\n      output.layerOut = layer;\n      return output;\n    });\n\n// D3D12 Texture2DArray Fragment shader\nconstexpr std::string_view kD3D12SimpleFragShaderTexArray =\n    IGL_TO_STRING(\n      Texture2DArray inputImage : register(t0);\n      SamplerState inputSampler : register(s0);\n\n      struct PSIn {\n        float4 position : SV_POSITION;\n        float2 uv : TEXCOORD0;\n        nointerpolation uint layerIn : TEXCOORD1;\n      };\n\n      float4 main(PSIn input) : SV_TARGET {\n        return inputImage.Sample(inputSampler, float3(input.uv, input.layerIn));\n      }\n    );\n\n// D3D12 TextureCube Vertex shader\nconstexpr std::string_view kD3D12SimpleVertShaderCube = IGL_TO_STRING(\n    cbuffer VertexUniforms : register(b1) { float4 view; };\n\n    struct VSIn {\n      float4 position_in : POSITION;\n      float2 uv_in : TEXCOORD0;\n    };\n\n    struct VSOut {\n      float4 position : SV_POSITION;\n      float3 viewDir : TEXCOORD0;\n    };\n\n    VSOut main(VSIn input) {\n      VSOut output;\n      output.position = input.position_in;\n      output.viewDir = view.xyz;\n      return output;\n    });\n\n// D3D12 TextureCube Fragment shader\nconstexpr std::string_view kD3D12SimpleFragShaderCube =\n    IGL_TO_STRING(\n      TextureCube inputImage : register(t0);\n      SamplerState inputSampler : register(s0);\n\n      struct PSIn {\n        float4 position : SV_POSITION;\n        float3 viewDir : TEXCOORD0;\n      };\n\n      float4 main(PSIn input) : SV_TARGET {\n        return inputImage.Sample(inputSampler, input.viewDir);\n      }\n    );\n\n// D3D12 Texture2DArray Vertex shader\nconstexpr std::string_view kD3D12SimpleVertShaderTex2dArray = IGL_TO_STRING(\n    cbuffer VertexUniforms : register(b2) { int layer; };\n\n    struct VSIn {\n      float4 position_in : POSITION;\n      float2 uv_in : TEXCOORD0;\n    };\n\n    struct VSOut {\n      float4 position : SV_POSITION;\n      float2 uv : TEXCOORD0;\n      uint layer : TEXCOORD1;\n    };\n\n    VSOut main(VSIn input) {\n      VSOut output;\n      output.position = input.position_in;\n      output.uv = input.uv_in;\n      output.layer = uint(layer);\n      return output;\n    });\n\n// D3D12 Texture2DArray Fragment shader\nconstexpr std::string_view kD3D12SimpleFragShaderTex2dArray =\n    IGL_TO_STRING(\n      Texture2DArray<float4> inputImage : register(t0);\n      SamplerState inputSampler : register(s0);\n\n      struct PSIn {\n        float4 position : SV_POSITION;\n        float2 uv : TEXCOORD0;\n        uint layer : TEXCOORD1;\n      };\n\n      float4 main(PSIn input) : SV_TARGET {\n        return inputImage.Sample(inputSampler, float3(input.uv, input.layer));\n      }\n    );\n\n// clang-format on\n} // namespace igl::tests::data::shader\n"
  },
  {
    "path": "src/igl/tests/data/TextureData.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <cstdint>\n\nnamespace igl::tests::data::texture {\n// clang-format off\n\nconstexpr std::array<uint32_t, 4> kTexRgba2x2 = {0x11223344, 0x11111111,\n                                                  0x22222222, 0x33333333};\n\nconstexpr std::array<uint32_t, 4> kTexRgba2x2Modified = {0x11223344, 0x11111111,\n                                                          0x22222222, 0x44332211};\n\nconstexpr std::array<uint32_t, 4> kTexRgbaGray2x2 = {0x80808080, 0x80808080,\n                                                      0x80808080, 0x80808080};\n\nconstexpr std::array<uint32_t, 4> kTexRgbaClear2x2 = {0, 0,\n                                                       0, 0};\n\n\nconstexpr std::array<uint32_t, 16> kTexRgbaGray4x4 = {0x888888FF, 0x888888FF, 0x888888FF, 0x888888FF,\n                                                       0x888888FF, 0x888888FF, 0x888888FF, 0x888888FF,\n                                                       0x888888FF, 0x888888FF, 0x888888FF, 0x888888FF,\n                                                       0x888888FF, 0x888888FF, 0x888888FF, 0x888888FF};\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nconstexpr std::array<uint32_t, 16> kTexRgbaRedAlpha128_4x4 = {0x80000080, 0x80000080, 0x80000080, 0x80000080,\n                                                               0x80000080, 0x80000080, 0x80000080, 0x80000080,\n                                                               0x80000080, 0x80000080, 0x80000080, 0x80000080,\n                                                               0x80000080, 0x80000080, 0x80000080, 0x80000080};\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nconstexpr std::array<uint32_t, 16> kTexRgbaBlueAlpha127_4x4 = {0x00007F7F, 0x00007F7F, 0x00007F7F, 0x00007F7F,\n                                                                0x00007F7F, 0x00007F7F, 0x00007F7F, 0x00007F7F,\n                                                                0x00007F7F, 0x00007F7F, 0x00007F7F, 0x00007F7F,\n                                                                0x00007F7F, 0x00007F7F, 0x00007F7F, 0x00007F7F};\n\n// NOLINTNEXTLINE(readability-identifier-naming)\nconstexpr std::array<uint32_t, 16> kTexRgbaMisc1_4x4 = {0x00000000, 0x11111111, 0x22222222, 0x33333333,\n                                                         0x44444444, 0x55555555, 0x66666666, 0x77777777,\n                                                         0x88888888, 0x99999999, 0xAAAAAAAA, 0xBBBBBBBB,\n                                                         0xCCCCCCCC, 0xDDDDDDDD, 0xEEEEEEEE, 0xFFFFFFFF};\n\nconstexpr std::array<uint32_t, 25> kTexRgbaGray5x5 = {0x80808080, 0x80808080, 0x80808080, 0x80808080, 0x80808080,\n                                                       0x80808080, 0x80808080, 0x80808080, 0x80808080, 0x80808080,\n                                                       0x80808080, 0x80808080, 0x80808080, 0x80808080, 0x80808080,\n                                                       0x80808080, 0x80808080, 0x80808080, 0x80808080, 0x80808080,\n                                                       0x80808080, 0x80808080, 0x80808080, 0x80808080, 0x80808080};\n\n// clang-format on\n} // namespace igl::tests::data::texture\n"
  },
  {
    "path": "src/igl/tests/data/VertexIndexData.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <cstdint> // For uint16_t\n\nnamespace igl::tests::data::vertex_index {\n// clang-format off\n\n// Using float 4 to alleviate packing issues\nconstexpr std::array<float, 16> kQuadVert = {\n  -1.0f,  1.0f, 0.0f, 1.0f,\n   1.0f,  1.0f, 0.0f, 1.0f,\n  -1.0f, -1.0f, 0.0f, 1.0f,\n   1.0f, -1.0f, 0.0f, 1.0f};\n\nconstexpr std::array<float, 8> kQuadUv = {\n    0.0, 1.0,\n    1.0, 1.0,\n    0.0, 0.0,\n    1.0, 0.0,\n};\n\nconstexpr std::array<uint16_t, 6> kQuadInd = {\n    0,\n    1,\n    2,\n    1,\n    3,\n    2,\n};\n\n// clang-format on\n} // namespace igl::tests::data::vertex_index\n"
  },
  {
    "path": "src/igl/tests/iglu/ManagedUniformBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/managedUniformBuffer/ManagedUniformBuffer.h>\n\n#include \"../util/Common.h\"\n\nnamespace igl::tests {\n\n//\n// ManagedUniformBufferTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass ManagedUniformBufferTest : public ::testing::Test {\n public:\n  ManagedUniformBufferTest() = default;\n  ~ManagedUniformBufferTest() override = default;\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nTEST_F(ManagedUniformBufferTest, Construction) {\n  iglu::ManagedUniformBuffer buffer(*iglDev_, {.index = 0, .length = 10});\n  EXPECT_TRUE(buffer.getData() != nullptr);\n}\n\nTEST_F(ManagedUniformBufferTest, UpdateData) {\n  // Using LUT to update data\n  {\n    iglu::ManagedUniformBuffer buffer(*iglDev_,\n                                      {.index = 0,\n                                       .length = 10,\n                                       .uniforms = {{.name = \"myUniform\",\n                                                     .location = 0,\n                                                     .type = UniformType::Float,\n                                                     .numElements = 1,\n                                                     .offset = 0,\n                                                     .elementStride = 0}}});\n    float data = 1000.0f;\n\n    buffer.buildUniformLUT();\n    buffer.updateData(\"myUniform\", &data, sizeof(float));\n    EXPECT_TRUE(*static_cast<float*>(buffer.getData()) == data);\n  }\n\n  // Not using LUT to update data\n  {\n    iglu::ManagedUniformBuffer buffer(*iglDev_,\n                                      {.index = 0,\n                                       .length = 10,\n                                       .uniforms = {{.name = \"myUniform\",\n                                                     .location = 0,\n                                                     .type = UniformType::Float,\n                                                     .numElements = 1,\n                                                     .offset = 0,\n                                                     .elementStride = 0}}});\n    float data = 1000.0f;\n\n    buffer.updateData(\"myUniform\", &data, sizeof(float));\n    EXPECT_TRUE(*static_cast<float*>(buffer.getData()) == data);\n  }\n\n  // Capped data size\n  {\n    iglu::ManagedUniformBuffer buffer(*iglDev_,\n                                      {.index = 0,\n                                       .length = 10,\n                                       .uniforms = {{.name = \"myUniform\",\n                                                     .location = 0,\n                                                     .type = UniformType::Float,\n                                                     .numElements = 1,\n                                                     .offset = 0,\n                                                     .elementStride = 0}}});\n    float data[2] = {1000.0f, 1.0f};\n\n    buffer.updateData(\"myUniform\", &data, 2 * sizeof(float));\n    EXPECT_TRUE(*static_cast<float*>(buffer.getData()) == data[0]);\n  }\n\n  // Wrong index\n  {\n    iglu::ManagedUniformBuffer buffer(*iglDev_,\n                                      {.index = 0,\n                                       .length = 10,\n                                       .uniforms = {{.name = \"nonExistingUniform\",\n                                                     .location = -1,\n                                                     .type = UniformType::Float,\n                                                     .numElements = 1,\n                                                     .offset = 0,\n                                                     .elementStride = 0}}});\n    float data = 1000.0f;\n\n    EXPECT_FALSE(buffer.updateData(\"myUniform\", &data, sizeof(float)));\n  }\n}\n\nTEST_F(ManagedUniformBufferTest, GetUniformDataSize) {\n  iglu::ManagedUniformBuffer buffer(*iglDev_,\n                                    {.index = 0,\n                                     .length = 10,\n                                     .uniforms = {{.name = \"myUniform\",\n                                                   .location = 0,\n                                                   .type = UniformType::Float,\n                                                   .numElements = 1,\n                                                   .offset = 0,\n                                                   .elementStride = 0}}});\n  EXPECT_EQ(buffer.getUniformDataSize(\"myUniform\"), sizeof(float));\n  EXPECT_EQ(buffer.getUniformDataSize(\"nonExistingUniform\"), 0);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/ShaderCrossTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/shaderCross/ShaderCross.h>\n\n#include \"../util/Common.h\"\n\n#include <IGLU/shaderCross/ShaderCrossUniformBuffer.h>\n\nnamespace igl::tests {\n\nnamespace {\n[[nodiscard]] const char* getVulkanFragmentShaderSource() {\n  return R\"(#version 450\n              precision highp float;\n              precision highp sampler2D;\n  \n              layout(location = 0) in vec3 uvw;\n              layout(location = 1) in vec3 color;\n              layout(set = 0, binding = 0) uniform sampler2D inputImage;\n              layout(location = 0) out vec4 fragmentColor;\n  \n              void main() {\n                fragmentColor = texture(inputImage, uvw.xy) * vec4(color, 1.0);\n              })\";\n}\n\n[[nodiscard]] std::string getVertexShaderProlog(bool stereoRendering) {\n  return stereoRendering ? R\"(#version 450\n      #extension GL_OVR_multiview2 : require\n      layout(num_views = 2) in;\n      precision highp float;\n  \n      #define VIEW_ID int(gl_ViewID_OVR)\n    )\"\n                         : R\"(#version 450\n      precision highp float;\n  \n      #define VIEW_ID perFrame.viewId\n    )\";\n}\n\n[[nodiscard]] std::string getVulkanVertexShaderSource(bool stereoRendering) {\n  return getVertexShaderProlog(stereoRendering) + R\"(\n              layout (set = 1, binding = 1, std140) uniform PerFrame {\n                mat4 modelMatrix;\n                mat4 viewProjectionMatrix[2];\n                float scaleZ;\n                int viewId;\n              } perFrame;\n  \n              layout(location = 0) in vec3 position;\n              layout(location = 1) in vec3 uvw_in;\n              layout(location = 0) out vec3 uvw;\n              layout(location = 1) out vec3 color;\n  \n              void main() {\n                mat4 mvpMatrix = perFrame.viewProjectionMatrix[VIEW_ID] * perFrame.modelMatrix;\n                gl_Position = mvpMatrix * vec4(position, 1.0);\n                uvw = vec3(uvw_in.x, uvw_in.y, (uvw_in.z - 0.5) * perFrame.scaleZ + 0.5);\n                color = vec3(1.0, 1.0, 0.0);\n              })\";\n}\n} // namespace\n\nclass ShaderCrossTest : public ::testing::Test {\n public:\n  ShaderCrossTest() = default;\n  ~ShaderCrossTest() override = default;\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nTEST_F(ShaderCrossTest, Construction) {\n  const iglu::ShaderCross shaderCross(*iglDev_);\n}\n\nTEST_F(ShaderCrossTest, EntryPointName) {\n  const iglu::ShaderCross shaderCross(*iglDev_);\n  if (iglDev_->getBackendType() == igl::BackendType::Metal) {\n    EXPECT_EQ(shaderCross.entryPointName(igl::ShaderStage::Vertex), \"main0\");\n  } else if (iglDev_->getBackendType() == igl::BackendType::OpenGL) {\n    EXPECT_EQ(shaderCross.entryPointName(igl::ShaderStage::Vertex), \"main\");\n  } else {\n    EXPECT_EQ(shaderCross.entryPointName(igl::ShaderStage::Vertex), \"\");\n  }\n}\n\nTEST_F(ShaderCrossTest, CrossCompile) {\n  const iglu::ShaderCross shaderCross(*iglDev_);\n  Result res;\n  if (iglDev_->getBackendType() == igl::BackendType::Metal) {\n    const auto vs = shaderCross.crossCompileFromVulkanSource(\n        getVulkanVertexShaderSource(false).c_str(), igl::ShaderStage::Vertex, &res);\n    EXPECT_TRUE(res.isOk());\n    EXPECT_TRUE(!vs.empty());\n\n    const auto fs = shaderCross.crossCompileFromVulkanSource(\n        getVulkanFragmentShaderSource(), igl::ShaderStage::Fragment, &res);\n    EXPECT_TRUE(res.isOk());\n    EXPECT_TRUE(!fs.empty());\n\n  } else if (iglDev_->getBackendType() == igl::BackendType::OpenGL) {\n    const auto vs = shaderCross.crossCompileFromVulkanSource(\n        getVulkanVertexShaderSource(true).c_str(), igl::ShaderStage::Vertex, &res);\n    EXPECT_TRUE(res.isOk());\n    EXPECT_TRUE(!vs.empty());\n\n    const auto fs = shaderCross.crossCompileFromVulkanSource(\n        getVulkanFragmentShaderSource(), igl::ShaderStage::Fragment, &res);\n    EXPECT_TRUE(res.isOk());\n    EXPECT_TRUE(!fs.empty());\n  }\n}\n\nTEST_F(ShaderCrossTest, ShaderCrossUniformBuffer) {\n  iglu::ShaderCrossUniformBuffer buffer(*iglDev_,\n                                        \"perFrame\",\n                                        {.index = 0,\n                                         .length = 10,\n                                         .uniforms = {{.name = \"myUniform\",\n                                                       .location = 0,\n                                                       .type = UniformType::Float,\n                                                       .numElements = 1,\n                                                       .offset = 0,\n                                                       .elementStride = 0}}});\n  EXPECT_EQ(buffer.uniformInfo.uniforms.size(), 1);\n  EXPECT_EQ(buffer.uniformInfo.uniforms[0].name, \"perFrame.myUniform\");\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/ShaderUniformsTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <IGLU/simple_renderer/ShaderUniforms.h>\n\n#include \"../util/Common.h\"\n\nnamespace igl::tests {\n\nnamespace {\nclass TestRenderPipelineReflection final : public IRenderPipelineReflection {\n public:\n  [[nodiscard]] const std::vector<BufferArgDesc>& allUniformBuffers() const override {\n    return bufferArguments_;\n  }\n  [[nodiscard]] const std::vector<SamplerArgDesc>& allSamplers() const override {\n    return samplerArguments_;\n  }\n  [[nodiscard]] const std::vector<TextureArgDesc>& allTextures() const override {\n    return textureArguments_;\n  }\n\n  TestRenderPipelineReflection(std::vector<BufferArgDesc> bufferArguments,\n                               std::vector<SamplerArgDesc> samplerArguments,\n                               std::vector<TextureArgDesc> textureArguments) :\n    bufferArguments_(std::move(bufferArguments)),\n    samplerArguments_(std::move(samplerArguments)),\n    textureArguments_(std::move(textureArguments)) {}\n  ~TestRenderPipelineReflection() override = default;\n\n private:\n  std::vector<BufferArgDesc> bufferArguments_;\n  std::vector<SamplerArgDesc> samplerArguments_;\n  std::vector<TextureArgDesc> textureArguments_;\n};\n} // namespace\n\nclass ShaderUniformsTest : public ::testing::Test {\n public:\n  ShaderUniformsTest() = default;\n  ~ShaderUniformsTest() override = default;\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nTEST_F(ShaderUniformsTest, SettersCoverage) {\n  TestRenderPipelineReflection reflection{\n      std::vector<BufferArgDesc>{},\n      std::vector<SamplerArgDesc>{},\n      std::vector<TextureArgDesc>{},\n  };\n  iglu::material::ShaderUniforms shaderUniforms(*iglDev_, reflection);\n\n  NameHandle testName;\n  bool boolValue = true;\n  shaderUniforms.setBool(testName, boolValue);\n  shaderUniforms.setBool(testName, testName, testName, boolValue);\n  shaderUniforms.setBoolArray(testName, &boolValue, 1);\n  shaderUniforms.setBoolArray(testName, testName, testName, &boolValue, 1);\n\n  iglu::simdtypes::float1 floatValue = 1.0f;\n  shaderUniforms.setFloat(testName, floatValue);\n  shaderUniforms.setFloat(testName, testName, testName, floatValue);\n  shaderUniforms.setFloatArray(testName, &floatValue, 1);\n  shaderUniforms.setFloatArray(testName, testName, testName, &floatValue, 1);\n\n  iglu::simdtypes::float2 float2Value = {1.0f, 2.0f};\n  shaderUniforms.setFloat2(testName, float2Value);\n  shaderUniforms.setFloat2(testName, testName, testName, float2Value);\n  shaderUniforms.setFloat2Array(testName, &float2Value, 1);\n  shaderUniforms.setFloat2Array(testName, testName, testName, &float2Value, 1);\n\n  iglu::simdtypes::float3 float3Value = {1.0f, 2.0f, 3.0f};\n  shaderUniforms.setFloat3(testName, float3Value);\n  shaderUniforms.setFloat3Array(testName, &float3Value, 1);\n\n  iglu::simdtypes::float4 float4Value = {1.0f, 2.0f, 3.0f, 4.0f};\n  shaderUniforms.setFloat4(testName, float4Value);\n  shaderUniforms.setFloat4(testName, testName, testName, float4Value);\n  shaderUniforms.setFloat4Array(testName, &float4Value, 1);\n  shaderUniforms.setFloat4Array(testName, testName, testName, &float4Value, 1);\n\n  iglu::simdtypes::int1 intValue = 1;\n  shaderUniforms.setInt(testName, intValue);\n  shaderUniforms.setInt(testName, testName, testName, intValue);\n  shaderUniforms.setIntArray(testName, &intValue, 1);\n  shaderUniforms.setIntArray(testName, testName, testName, &intValue, 1);\n\n  iglu::simdtypes::int2 int2Value = {1, 2};\n  shaderUniforms.setInt2(testName, int2Value);\n  shaderUniforms.setInt2(testName, testName, testName, int2Value);\n\n  iglu::simdtypes::float2x2 float2x2Value = {float2Value, float2Value};\n  shaderUniforms.setFloat2x2(testName, float2x2Value);\n  shaderUniforms.setFloat2x2(testName, testName, testName, float2x2Value);\n  shaderUniforms.setFloat2x2Array(testName, &float2x2Value, 1);\n  shaderUniforms.setFloat2x2Array(testName, testName, testName, &float2x2Value, 1);\n\n  iglu::simdtypes::float3x3 float3x3Value = {float3Value, float3Value, float3Value};\n  shaderUniforms.setFloat3x3(testName, float3x3Value);\n  shaderUniforms.setFloat3x3(testName, testName, testName, float3x3Value);\n  shaderUniforms.setFloat3x3Array(testName, &float3x3Value, 1);\n  shaderUniforms.setFloat3x3Array(testName, testName, testName, &float3x3Value, 1);\n\n  iglu::simdtypes::float4x4 float4x4Value = {float4Value, float4Value, float4Value, float4Value};\n  shaderUniforms.setFloat4x4(testName, float4x4Value);\n  shaderUniforms.setFloat4x4(testName, testName, testName, float4x4Value);\n  shaderUniforms.setFloat4x4Array(testName, &float4x4Value, 1);\n  shaderUniforms.setFloat4x4Array(testName, testName, testName, &float4x4Value, 1);\n\n  std::shared_ptr<ITexture> texture;\n  std::shared_ptr<ISamplerState> sampler;\n  shaderUniforms.setTexture(\"test\", texture, sampler);\n  shaderUniforms.setTexture(\"test\", nullptr, sampler);\n  shaderUniforms.setTexture(\"test\", nullptr, nullptr);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/StatePool.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n\n#include <IGLU/state_pool/RenderPipelineStatePool.h>\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/NameHandle.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n//\n// StatePoolTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass StatePoolTest : public ::testing::Test {\n private:\n public:\n  StatePoolTest() = default;\n  ~StatePoolTest() override = default;\n\n  //\n  // SetUp()\n  //\n  // This function sets up two identical graphics pipeline descriptors\n  // so that they can be modified by individual tests to exercise the\n  // state pool caching capabilities\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    Result ret;\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc1_.vertexInputState = vertexInputState_;\n    renderPipelineDesc1_.shaderStages = shaderStages_;\n    renderPipelineDesc1_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc1_.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n    renderPipelineDesc1_.fragmentUnitSamplerMap[0] = IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc1_.cullMode = igl::CullMode::Disabled;\n\n    renderPipelineDesc2_.vertexInputState = vertexInputState_;\n    renderPipelineDesc2_.shaderStages = shaderStages_;\n    renderPipelineDesc2_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc2_.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n    renderPipelineDesc2_.fragmentUnitSamplerMap[0] = IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc2_.cullMode = igl::CullMode::Disabled;\n\n    renderPipelineDesc3_.vertexInputState = vertexInputState_;\n    renderPipelineDesc3_.shaderStages = shaderStages_;\n    renderPipelineDesc3_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc3_.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n    renderPipelineDesc3_.fragmentUnitSamplerMap[0] = IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc3_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n\n  RenderPipelineDesc renderPipelineDesc1_, renderPipelineDesc2_, renderPipelineDesc3_;\n  iglu::state_pool::RenderPipelineStatePool graphicsPool_;\n};\n\n//\n// renderPipelineDescCaching1 Test\n//\n// Tests to see if RenderPipelineDesc caching works\n//\nTEST_F(StatePoolTest, renderPipelineDescCaching1) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> ps1, ps2;\n\n  //---------------------------------------------------------------------\n  // Create two pipelines without cache. Should get two different objects\n  //---------------------------------------------------------------------\n  ps1 = iglDev_->createRenderPipeline(renderPipelineDesc1_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ps1 != nullptr);\n\n  ps2 = iglDev_->createRenderPipeline(renderPipelineDesc2_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ps2 != nullptr);\n\n  ASSERT_TRUE(ps1.get() != ps2.get());\n\n  //------------------------------------------------------------\n  // Create two pipelines with cache. Should get the same object\n  //------------------------------------------------------------\n  ps1 = graphicsPool_.getOrCreate(*iglDev_, renderPipelineDesc1_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ps1 != nullptr);\n\n  ps2 = graphicsPool_.getOrCreate(*iglDev_, renderPipelineDesc2_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ps2 != nullptr);\n\n  ASSERT_TRUE(ps1 == ps2);\n\n  //------------------------------------------------------------\n  // Modify one of the descriptors, should get different objects\n  //------------------------------------------------------------\n  renderPipelineDesc2_.cullMode = igl::CullMode::Front;\n\n  ps2 = graphicsPool_.getOrCreate(*iglDev_, renderPipelineDesc2_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ps2 != nullptr);\n\n  ASSERT_TRUE(ps1 != ps2);\n  renderPipelineDesc2_.cullMode = renderPipelineDesc1_.cullMode; // restore change\n}\n\n//\n// renderPipelineDescCachingLRU1 Test\n//\n// Tests to see if RenderPipelineDesc LRU caching works\n//\nTEST_F(StatePoolTest, renderPipelineDescCachingLRU1) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> ps1, ps2, ps3;\n  //------------------------------------------------------------\n  // Ensure cache releases objects after it gets full\n  //------------------------------------------------------------\n  iglu::state_pool::RenderPipelineStatePool smallCachePool;\n  smallCachePool.setCacheSize(2);\n  renderPipelineDesc2_.cullMode = igl::CullMode::Front;\n  renderPipelineDesc3_.cullMode = igl::CullMode::Back;\n\n  // Fill up the cache\n  ps1 = iglDev_->createRenderPipeline(renderPipelineDesc1_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ps1 != nullptr);\n\n  ps2 = iglDev_->createRenderPipeline(renderPipelineDesc2_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ps2 != nullptr);\n\n  // Add new element (PS1 should no longer be stored in the cache)\n  ps3 = iglDev_->createRenderPipeline(renderPipelineDesc3_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ps3 != nullptr);\n\n  // Adding renderPipelineDesc1_ again should produce a new state than before\n  ps2 = iglDev_->createRenderPipeline(renderPipelineDesc1_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ps2 != nullptr);\n  ASSERT_TRUE(ps1 != ps2);\n\n  renderPipelineDesc2_.cullMode = renderPipelineDesc1_.cullMode; // restore change\n  renderPipelineDesc3_.cullMode = renderPipelineDesc1_.cullMode; // restore change\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/TextureAccessor.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/TextureData.h\"\n#include \"../util/Common.h\"\n\n#include <IGLU/texture_accessor/ITextureAccessor.h>\n#include <IGLU/texture_accessor/TextureAccessorFactory.h>\n#include <igl/Common.h>\n\n#define OFFSCREEN_TEX_HEIGHT 2\n#define OFFSCREEN_TEX_WIDTH 2\n\nnamespace igl::tests {\n\n//\n// TextureAccessorTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass TextureAccessorTest : public ::testing::Test {\n private:\n public:\n  TextureAccessorTest() = default;\n  ~TextureAccessorTest() override = default;\n\n  //\n  // SetUp()\n  // Create device, commandQueue\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    Result result;\n    texDesc_ = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                  OFFSCREEN_TEX_WIDTH,\n                                  OFFSCREEN_TEX_HEIGHT,\n                                  TextureDesc::TextureUsageBits::Sampled |\n                                      TextureDesc::TextureUsageBits::Attachment);\n    texture_ = iglDev_->createTexture(texDesc_, &result);\n    ASSERT_TRUE(result.isOk());\n\n    // Initialize texture data\n    textureSizeInBytes_ = texture_->getProperties().getBytesPerRange(texture_->getFullRange());\n    const auto range =\n        igl::TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT);\n    texture_->upload(range, data::texture::kTexRgba2x2.data());\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ITexture> texture_;\n  TextureDesc texDesc_;\n  std::shared_ptr<iglu::textureaccessor::ITextureAccessor> textureAccessor_;\n  int textureSizeInBytes_{};\n};\n\n//\n// testRequestAndGetBytesSync Test\n//\n// Tests synchronous texture readback\n//\nTEST_F(TextureAccessorTest, testRequestAndGetBytesSync) {\n  ASSERT_NO_THROW(textureAccessor_ =\n                      iglu::textureaccessor::TextureAccessorFactory::createTextureAccessor(\n                          iglDev_->getBackendType(), texture_, *iglDev_));\n  ASSERT_TRUE(textureAccessor_ != nullptr);\n\n  // Verify requestStatus before\n  ASSERT_EQ(textureAccessor_->getRequestStatus(),\n            iglu::textureaccessor::RequestStatus::NotInitialized);\n\n  // Update texture data\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT);\n  texture_->upload(rangeDesc, data::texture::kTexRgba2x2.data());\n\n  auto bytes = textureAccessor_->requestAndGetBytesSync(*cmdQueue_);\n  // Verify requestStatus after\n  ASSERT_EQ(textureAccessor_->getRequestStatus(), iglu::textureaccessor::RequestStatus::Ready);\n\n  // 2x2 texture * 4 bytes per pixel\n  ASSERT_EQ(bytes.size(), 16);\n  // Verify data\n  auto* pixels = reinterpret_cast<uint32_t*>(bytes.data());\n  for (int i = 0; (i < textureSizeInBytes_ / 4); i++) {\n    ASSERT_EQ(pixels[i], data::texture::kTexRgba2x2[i]);\n  }\n}\n\nTEST_F(TextureAccessorTest, reuseTextureAccessor) {\n  ASSERT_NO_THROW(textureAccessor_ =\n                      iglu::textureaccessor::TextureAccessorFactory::createTextureAccessor(\n                          iglDev_->getBackendType(), texture_, *iglDev_));\n  ASSERT_TRUE(textureAccessor_ != nullptr);\n\n  // Verify requestStatus before\n  ASSERT_EQ(textureAccessor_->getRequestStatus(),\n            iglu::textureaccessor::RequestStatus::NotInitialized);\n\n  // First Upload\n  {\n    // Update texture data\n    const auto rangeDesc = TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT);\n    texture_->upload(rangeDesc, data::texture::kTexRgba2x2.data());\n\n    auto bytes = textureAccessor_->requestAndGetBytesSync(*cmdQueue_);\n    // Verify requestStatus after\n    ASSERT_EQ(textureAccessor_->getRequestStatus(), iglu::textureaccessor::RequestStatus::Ready);\n\n    // 2x2 texture * 4 bytes per pixel\n    ASSERT_EQ(bytes.size(), 16);\n    // Verify data\n    auto* pixels = reinterpret_cast<uint32_t*>(bytes.data());\n    for (int i = 0; (i < textureSizeInBytes_ / 4); i++) {\n      ASSERT_EQ(pixels[i], data::texture::kTexRgba2x2[i]);\n    }\n  }\n\n  // Second Upload\n  {\n    // Update texture data\n    const auto rangeDesc = TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT);\n    texture_->upload(rangeDesc, data::texture::kTexRgbaGray2x2.data());\n\n    auto bytes = textureAccessor_->requestAndGetBytesSync(*cmdQueue_);\n    // Verify requestStatus after\n    ASSERT_EQ(textureAccessor_->getRequestStatus(), iglu::textureaccessor::RequestStatus::Ready);\n\n    // 2x2 texture * 4 bytes per pixel\n    ASSERT_EQ(bytes.size(), 16);\n    // Verify data\n    auto* pixels = reinterpret_cast<uint32_t*>(bytes.data());\n    for (int i = 0; (i < textureSizeInBytes_ / 4); i++) {\n      ASSERT_EQ(pixels[i], data::texture::kTexRgbaGray2x2[i]);\n    }\n  }\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/UniformCollection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"UniformTests.h\"\n\n#include <IGLU/uniform/Collection.h>\n#include <IGLU/uniform/Descriptor.h>\n#include <string>\n#include <igl/NameHandle.h>\n\nnamespace iglu::tests {\n\n//\n// UniformCollectionTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass UniformCollectionTest : public ::testing::Test {\n private:\n public:\n  UniformCollectionTest() = default;\n  ~UniformCollectionTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n  }\n\n  void TearDown() override {}\n};\n\n// ----------------------------------------------------------------------------\n\n//\n// Value Test\n//\nTEST_F(UniformCollectionTest, DescriptorValue) {\n  uniform::Collection c;\n\n  const bool boolValue = true;\n  uniform::DescriptorValue<bool> boolUniform(boolValue);\n  testIndex(boolUniform);\n  testUniformData(boolValue, boolUniform);\n  auto boolUniformNameHandle = igl::genNameHandle(\"boolUniform\");\n  c.set(boolUniformNameHandle, boolValue);\n  testUniformData(boolValue, c.getOrCreate<bool>(boolUniformNameHandle));\n\n  const int intValue = 1;\n  uniform::DescriptorValue<int> intUniform(intValue);\n  testIndex(intUniform);\n  testUniformData(intValue, intUniform);\n  auto intUniformNameHandle = igl::genNameHandle(\"intUniform\");\n  c.set(intUniformNameHandle, intValue);\n  testUniformData(intValue, c.getOrCreate<int>(intUniformNameHandle));\n\n  const glm::ivec2 ivec2Value(2);\n  uniform::DescriptorValue<glm::ivec2> ivec2Uniform(ivec2Value);\n  testIndex(ivec2Uniform);\n  testUniformData(ivec2Value, ivec2Uniform);\n  auto ivec2UniformNameHandle = igl::genNameHandle(\"ivec2Uniform\");\n  c.set(ivec2UniformNameHandle, ivec2Value);\n  testUniformData(ivec2Value, c.getOrCreate<glm::ivec2>(ivec2UniformNameHandle));\n\n  const glm::ivec3 ivec3Value(3);\n  uniform::DescriptorValue<glm::ivec3> ivec3Uniform(ivec3Value);\n  testIndex(ivec3Uniform);\n  testUniformData(ivec3Value, ivec3Uniform);\n  auto ivec3UniformNameHandle = igl::genNameHandle(\"ivec3Uniform\");\n  c.set(ivec3UniformNameHandle, ivec3Value);\n  testUniformData(ivec3Value, c.getOrCreate<glm::ivec3>(ivec3UniformNameHandle));\n\n  const glm::ivec4 ivec4Value(4);\n  uniform::DescriptorValue<glm::ivec4> ivec4Uniform(ivec4Value);\n  testIndex(ivec4Uniform);\n  testUniformData(ivec4Value, ivec4Uniform);\n  auto ivec4UniformNameHandle = igl::genNameHandle(\"ivec4Uniform\");\n  c.set(ivec4UniformNameHandle, ivec4Value);\n  testUniformData(ivec4Value, c.getOrCreate<glm::ivec4>(ivec4UniformNameHandle));\n\n  const float floatValue(1.f);\n  uniform::DescriptorValue<float> floatUniform(floatValue);\n  testIndex(floatUniform);\n  testUniformData(floatValue, floatUniform);\n  auto floatUniformNameHandle = igl::genNameHandle(\"floatUniform\");\n  c.set(floatUniformNameHandle, floatValue);\n  testUniformData(floatValue, c.getOrCreate<float>(floatUniformNameHandle));\n\n  const glm::vec2 vec2Value(2.f);\n  uniform::DescriptorValue<glm::vec2> vec2Uniform(vec2Value);\n  testIndex(vec2Uniform);\n  testUniformData(vec2Value, vec2Uniform);\n  auto vec2UniformNameHandle = igl::genNameHandle(\"vec2Uniform\");\n  c.set(vec2UniformNameHandle, vec2Value);\n  testUniformData(vec2Value, c.getOrCreate<glm::vec2>(vec2UniformNameHandle));\n\n  const glm::vec3 vec3Value(3.f);\n  uniform::DescriptorValue<glm::vec3> vec3Uniform(vec3Value);\n  testIndex(vec3Uniform);\n  testUniformData(vec3Value, vec3Uniform);\n  auto vec3UniformNameHandle = igl::genNameHandle(\"vec3Uniform\");\n  c.set(vec3UniformNameHandle, vec3Value);\n  testUniformData(vec3Value, c.getOrCreate<glm::vec3>(vec3UniformNameHandle));\n\n  const glm::vec4 vec4Value(4.f);\n  uniform::DescriptorValue<glm::vec4> vec4Uniform(vec4Value);\n  testIndex(vec4Uniform);\n  testUniformData(vec4Value, vec4Uniform);\n  auto vec4UniformNameHandle = igl::genNameHandle(\"vec4Uniform\");\n  c.set(vec4UniformNameHandle, vec4Value);\n  testUniformData(vec4Value, c.getOrCreate<glm::vec4>(vec4UniformNameHandle));\n\n  const glm::mat2 mat2Value(2.f);\n  uniform::DescriptorValue<glm::mat2> mat2Uniform(mat2Value);\n  testIndex(mat2Uniform);\n  testUniformData(mat2Value, mat2Uniform);\n  auto mat2UniformNameHandle = igl::genNameHandle(\"mat2Uniform\");\n  c.set(mat2UniformNameHandle, mat2Value);\n  testUniformData(mat2Value, c.getOrCreate<glm::mat2>(mat2UniformNameHandle));\n\n  const glm::mat3 mat3Value(3.f);\n  uniform::DescriptorValue<glm::mat3> mat3Uniform(mat3Value);\n  testIndex(mat3Uniform);\n  testUniformData(mat3Value, mat3Uniform);\n  auto mat3UniformNameHandle = igl::genNameHandle(\"mat3Uniform\");\n  c.set(mat3UniformNameHandle, mat3Value);\n  testUniformData(mat3Value, c.getOrCreate<glm::mat3>(mat3UniformNameHandle));\n\n  const glm::mat4 mat4Value(4.f);\n  uniform::DescriptorValue<glm::mat4> mat4Uniform(mat4Value);\n  testIndex(mat4Uniform);\n  testUniformData(mat4Value, mat4Uniform);\n  auto mat4UniformNameHandle = igl::genNameHandle(\"mat4Uniform\");\n  c.set(mat4UniformNameHandle, mat4Value);\n  testUniformData(mat4Value, c.getOrCreate<glm::mat4>(mat4UniformNameHandle));\n}\n\n//\n// Vector Test\n//\nTEST_F(UniformCollectionTest, DescriptorVector) {\n  uniform::Collection c;\n\n  // NOTE: std::vector<bool> does not have the data() method\n  // std::vector<bool> boolVector = {true, false};\n  // uniform::DescriptorVector<bool> boolUniform(boolVector);\n  // testIndex(boolUniform);\n  // testUniformData(boolVector, boolUniform);\n\n  const std::vector<int> intVector = {1, 2, 3, 4, 5, -5, -4, -3, -2 - 1, 0};\n  uniform::DescriptorVector<int> intUniform(intVector);\n  testIndex(intUniform);\n  testUniformData(intVector, intUniform);\n  auto intUniformNameHandle = igl::genNameHandle(\"intUniform\");\n  c.set(intUniformNameHandle, intVector);\n  testUniformData(intVector, c.getOrCreate<std::vector<int>>(intUniformNameHandle));\n\n  const std::vector<glm::ivec2> ivec2Vector = {glm::ivec2(2),\n                                               glm::ivec2(3),\n                                               glm::ivec2(4),\n                                               glm::ivec2(5),\n                                               glm::ivec2(6),\n                                               glm::ivec2(-5),\n                                               glm::ivec2(-4),\n                                               glm::ivec2(-3),\n                                               glm::ivec2(-2),\n                                               glm::ivec2(-1),\n                                               glm::ivec2(0)};\n  uniform::DescriptorVector<glm::ivec2> ivec2Uniform(ivec2Vector);\n  testIndex(ivec2Uniform);\n  testUniformData(ivec2Vector, ivec2Uniform);\n  auto ivec2UniformNameHandle = igl::genNameHandle(\"ivec2Uniform\");\n  c.set(ivec2UniformNameHandle, ivec2Vector);\n  testUniformData(ivec2Vector, c.getOrCreate<std::vector<glm::ivec2>>(ivec2UniformNameHandle));\n\n  const std::vector<glm::ivec3> ivec3Vector = {glm::ivec3(3),\n                                               glm::ivec3(4),\n                                               glm::ivec3(5),\n                                               glm::ivec3(6),\n                                               glm::ivec3(7),\n                                               glm::ivec3(-5),\n                                               glm::ivec3(-4),\n                                               glm::ivec3(-3),\n                                               glm::ivec3(-2),\n                                               glm::ivec3(-1),\n                                               glm::ivec3(0)};\n  uniform::DescriptorVector<glm::ivec3> ivec3Uniform(ivec3Vector);\n  testIndex(ivec3Uniform);\n  testUniformData(ivec3Vector, ivec3Uniform);\n  auto ivec3UniformNameHandle = igl::genNameHandle(\"ivec3Uniform\");\n  c.set(ivec3UniformNameHandle, ivec3Vector);\n  testUniformData(ivec3Vector, c.getOrCreate<std::vector<glm::ivec3>>(ivec3UniformNameHandle));\n\n  const std::vector<glm::ivec4> ivec4Vector = {glm::ivec4(4),\n                                               glm::ivec4(5),\n                                               glm::ivec4(6),\n                                               glm::ivec4(7),\n                                               glm::ivec4(8),\n                                               glm::ivec4(-5),\n                                               glm::ivec4(-4),\n                                               glm::ivec4(-3),\n                                               glm::ivec4(-2),\n                                               glm::ivec4(-1),\n                                               glm::ivec4(0)};\n  uniform::DescriptorVector<glm::ivec4> ivec4Uniform(ivec4Vector);\n  testIndex(ivec4Uniform);\n  testUniformData(ivec4Vector, ivec4Uniform);\n  auto ivec4UniformNameHandle = igl::genNameHandle(\"ivec4Uniform\");\n  c.set(ivec4UniformNameHandle, ivec4Vector);\n  testUniformData(ivec4Vector, c.getOrCreate<std::vector<glm::ivec4>>(ivec4UniformNameHandle));\n\n  const std::vector<float> floatVector = {1.f, 2.f, 3.f, 4.f, 5.f, -5.f, -4.f, -3.f, -2 - 1.f, 0.f};\n  uniform::DescriptorVector<float> floatUniform(floatVector);\n  testIndex(floatUniform);\n  testUniformData(floatVector, floatUniform);\n  auto floatUniformNameHandle = igl::genNameHandle(\"floatUniform\");\n  c.set(floatUniformNameHandle, floatVector);\n  testUniformData(floatVector, c.getOrCreate<std::vector<float>>(floatUniformNameHandle));\n\n  const std::vector<glm::vec2> vec2Vector = {\n      glm::vec2(2.f),\n      glm::vec2(3.f),\n      glm::vec2(4.f),\n      glm::vec2(5.f),\n      glm::vec2(6.f),\n      glm::vec2(-5.f),\n      glm::vec2(-4.f),\n      glm::vec2(-3.f),\n      glm::vec2(-2.f),\n      glm::vec2(-1.f),\n      glm::vec2(0.f),\n  };\n  uniform::DescriptorVector<glm::vec2> vec2Uniform(vec2Vector);\n  testIndex(vec2Uniform);\n  testUniformData(vec2Vector, vec2Uniform);\n  auto vec2UniformNameHandle = igl::genNameHandle(\"vec2Uniform\");\n  c.set(vec2UniformNameHandle, vec2Vector);\n  testUniformData(vec2Vector, c.getOrCreate<std::vector<glm::vec2>>(vec2UniformNameHandle));\n\n  const std::vector<glm::vec3> vec3Vector = {\n      glm::vec3(3.f),\n      glm::vec3(4.f),\n      glm::vec3(5.f),\n      glm::vec3(6.f),\n      glm::vec3(7.f),\n      glm::vec3(-5.f),\n      glm::vec3(-4.f),\n      glm::vec3(-3.f),\n      glm::vec3(-2.f),\n      glm::vec3(-1.f),\n      glm::vec3(0.f),\n  };\n  uniform::DescriptorVector<glm::vec3> vec3Uniform(vec3Vector);\n  testIndex(vec3Uniform);\n  testUniformData(vec3Vector, vec3Uniform);\n  auto vec3UniformNameHandle = igl::genNameHandle(\"vec3Uniform\");\n  c.set(vec3UniformNameHandle, vec3Vector);\n  testUniformData(vec3Vector, c.getOrCreate<std::vector<glm::vec3>>(vec3UniformNameHandle));\n\n  const std::vector<glm::vec4> vec4Vector = {\n      glm::vec4(4.f),\n      glm::vec4(5.f),\n      glm::vec4(6.f),\n      glm::vec4(7.f),\n      glm::vec4(8.f),\n      glm::vec4(-5.f),\n      glm::vec4(-4.f),\n      glm::vec4(-3.f),\n      glm::vec4(-2.f),\n      glm::vec4(-1.f),\n      glm::vec4(0.f),\n  };\n  uniform::DescriptorVector<glm::vec4> vec4Uniform(vec4Vector);\n  testIndex(vec4Uniform);\n  testUniformData(vec4Vector, vec4Uniform);\n  auto vec4UniformNameHandle = igl::genNameHandle(\"vec4Uniform\");\n  c.set(vec4UniformNameHandle, vec4Vector);\n  testUniformData(vec4Vector, c.getOrCreate<std::vector<glm::vec4>>(vec4UniformNameHandle));\n\n  const std::vector<glm::mat2> mat2Vector = {\n      glm::mat2(2.f),\n      glm::mat2(3.f),\n      glm::mat2(4.f),\n      glm::mat2(5.f),\n      glm::mat2(6.f),\n      glm::mat2(-5.f),\n      glm::mat2(-4.f),\n      glm::mat2(-3.f),\n      glm::mat2(-2.f),\n      glm::mat2(-1.f),\n      glm::mat2(0.f),\n  };\n  uniform::DescriptorVector<glm::mat2> mat2Uniform(mat2Vector);\n  testIndex(mat2Uniform);\n  testUniformData(mat2Vector, mat2Uniform);\n  auto mat2UniformNameHandle = igl::genNameHandle(\"mat2Uniform\");\n  c.set(mat2UniformNameHandle, mat2Vector);\n  testUniformData(mat2Vector, c.getOrCreate<std::vector<glm::mat2>>(mat2UniformNameHandle));\n\n  const std::vector<glm::mat3> mat3Vector = {\n      glm::mat3(3.f),\n      glm::mat3(4.f),\n      glm::mat3(5.f),\n      glm::mat3(6.f),\n      glm::mat3(7.f),\n      glm::mat3(-5.f),\n      glm::mat3(-4.f),\n      glm::mat3(-3.f),\n      glm::mat3(-2.f),\n      glm::mat3(-1.f),\n      glm::mat3(0.f),\n  };\n  uniform::DescriptorVector<glm::mat3> mat3Uniform(mat3Vector);\n  testIndex(mat3Uniform);\n  testUniformData(mat3Vector, mat3Uniform);\n  auto mat3UniformNameHandle = igl::genNameHandle(\"mat3Uniform\");\n  c.set(mat3UniformNameHandle, mat3Vector);\n  testUniformData(mat3Vector, c.getOrCreate<std::vector<glm::mat3>>(mat3UniformNameHandle));\n\n  const std::vector<glm::mat4> mat4Vector = {\n      glm::mat4(4.f),\n      glm::mat4(5.f),\n      glm::mat4(6.f),\n      glm::mat4(7.f),\n      glm::mat4(8.f),\n      glm::mat4(-5.f),\n      glm::mat4(-4.f),\n      glm::mat4(-3.f),\n      glm::mat4(-2.f),\n      glm::mat4(-1.f),\n      glm::mat4(0.f),\n  };\n  uniform::DescriptorVector<glm::mat4> mat4Uniform(mat4Vector);\n  testIndex(mat4Uniform);\n  testUniformData(mat4Vector, mat4Uniform);\n  auto mat4UniformNameHandle = igl::genNameHandle(\"mat4Uniform\");\n  c.set(mat4UniformNameHandle, mat4Vector);\n  testUniformData(mat4Vector, c.getOrCreate<std::vector<glm::mat4>>(mat4UniformNameHandle));\n}\n\n} // namespace iglu::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/UniformDescriptor.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"UniformTests.h\"\n\n#include <IGLU/uniform/Descriptor.h>\n#include <string>\n\nnamespace iglu::tests {\n\n//\n// UniformDescriptorTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass UniformDescriptorTest : public ::testing::Test {\n private:\n public:\n  UniformDescriptorTest() = default;\n  ~UniformDescriptorTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n  }\n\n  void TearDown() override {}\n};\n\n// ----------------------------------------------------------------------------\n\n//\n// Value Test\n//\nTEST_F(UniformDescriptorTest, DescriptorValue) {\n  const bool boolValue = true;\n  uniform::DescriptorValue<bool> boolUniform(boolValue);\n  testIndex(boolUniform);\n  testUniformData(boolValue, boolUniform);\n\n  const int intValue = 1;\n  uniform::DescriptorValue<int> intUniform(intValue);\n  testIndex(intUniform);\n  testUniformData(intValue, intUniform);\n\n  const glm::ivec2 ivec2Value(2);\n  uniform::DescriptorValue<glm::ivec2> ivec2Uniform(ivec2Value);\n  testIndex(ivec2Uniform);\n  testUniformData(ivec2Value, ivec2Uniform);\n\n  const glm::ivec3 ivec3Value(3);\n  uniform::DescriptorValue<glm::ivec3> ivec3Uniform(ivec3Value);\n  testIndex(ivec3Uniform);\n  testUniformData(ivec3Value, ivec3Uniform);\n\n  const glm::ivec4 ivec4Value(4);\n  uniform::DescriptorValue<glm::ivec4> ivec4Uniform(ivec4Value);\n  testIndex(ivec4Uniform);\n  testUniformData(ivec4Value, ivec4Uniform);\n\n  const float floatValue(1.f);\n  uniform::DescriptorValue<float> floatUniform(floatValue);\n  testIndex(floatUniform);\n  testUniformData(floatValue, floatUniform);\n\n  const glm::vec2 vec2Value(2.f);\n  uniform::DescriptorValue<glm::vec2> vec2Uniform(vec2Value);\n  testIndex(vec2Uniform);\n  testUniformData(vec2Value, vec2Uniform);\n\n  const glm::vec3 vec3Value(3.f);\n  uniform::DescriptorValue<glm::vec3> vec3Uniform(vec3Value);\n  testIndex(vec3Uniform);\n  testUniformData(vec3Value, vec3Uniform);\n\n  const glm::vec4 vec4Value(4.f);\n  uniform::DescriptorValue<glm::vec4> vec4Uniform(vec4Value);\n  testIndex(vec4Uniform);\n  testUniformData(vec4Value, vec4Uniform);\n\n  const glm::mat2 mat2Value(2.f);\n  uniform::DescriptorValue<glm::mat2> mat2Uniform(mat2Value);\n  testIndex(mat2Uniform);\n  testUniformData(mat2Value, mat2Uniform);\n\n  const glm::mat3 mat3Value(3.f);\n  uniform::DescriptorValue<glm::mat3> mat3Uniform(mat3Value);\n  testIndex(mat3Uniform);\n  testUniformData(mat3Value, mat3Uniform);\n\n  const glm::mat4 mat4Value(4.f);\n  uniform::DescriptorValue<glm::mat4> mat4Uniform(mat4Value);\n  testIndex(mat4Uniform);\n  testUniformData(mat4Value, mat4Uniform);\n}\n\n//\n// Vector Test\n//\nTEST_F(UniformDescriptorTest, DescriptorVector) {\n  // NOTE: std::vector<bool> does not have the data() method\n  // std::vector<bool> boolVector = {true, false};\n  // uniform::DescriptorVector<bool> boolUniform(boolVector);\n  // testIndex(boolUniform);\n  // testUniformData(boolVector, boolUniform);\n\n  const std::vector<int> intVector = {1, 2, 3, 4, 5, -5, -4, -3, -2 - 1, 0};\n  uniform::DescriptorVector<int> intUniform(intVector);\n  testIndex(intUniform);\n  testUniformData(intVector, intUniform);\n\n  const std::vector<glm::ivec2> ivec2Vector = {glm::ivec2(2),\n                                               glm::ivec2(3),\n                                               glm::ivec2(4),\n                                               glm::ivec2(5),\n                                               glm::ivec2(6),\n                                               glm::ivec2(-5),\n                                               glm::ivec2(-4),\n                                               glm::ivec2(-3),\n                                               glm::ivec2(-2),\n                                               glm::ivec2(-1),\n                                               glm::ivec2(0)};\n  uniform::DescriptorVector<glm::ivec2> ivec2Uniform(ivec2Vector);\n  testIndex(ivec2Uniform);\n  testUniformData(ivec2Vector, ivec2Uniform);\n\n  const std::vector<glm::ivec3> ivec3Vector = {glm::ivec3(3),\n                                               glm::ivec3(4),\n                                               glm::ivec3(5),\n                                               glm::ivec3(6),\n                                               glm::ivec3(7),\n                                               glm::ivec3(-5),\n                                               glm::ivec3(-4),\n                                               glm::ivec3(-3),\n                                               glm::ivec3(-2),\n                                               glm::ivec3(-1),\n                                               glm::ivec3(0)};\n  uniform::DescriptorVector<glm::ivec3> ivec3Uniform(ivec3Vector);\n  testIndex(ivec3Uniform);\n  testUniformData(ivec3Vector, ivec3Uniform);\n\n  const std::vector<glm::ivec4> ivec4Vector = {glm::ivec4(4),\n                                               glm::ivec4(5),\n                                               glm::ivec4(6),\n                                               glm::ivec4(7),\n                                               glm::ivec4(8),\n                                               glm::ivec4(-5),\n                                               glm::ivec4(-4),\n                                               glm::ivec4(-3),\n                                               glm::ivec4(-2),\n                                               glm::ivec4(-1),\n                                               glm::ivec4(0)};\n  uniform::DescriptorVector<glm::ivec4> ivec4Uniform(ivec4Vector);\n  testIndex(ivec4Uniform);\n  testUniformData(ivec4Vector, ivec4Uniform);\n\n  const std::vector<float> floatVector = {1.f, 2.f, 3.f, 4.f, 5.f, -5.f, -4.f, -3.f, -2 - 1.f, 0.f};\n  uniform::DescriptorVector<float> floatUniform(floatVector);\n  testIndex(floatUniform);\n  testUniformData(floatVector, floatUniform);\n\n  const std::vector<glm::vec2> vec2Vector = {\n      glm::vec2(2.f),\n      glm::vec2(3.f),\n      glm::vec2(4.f),\n      glm::vec2(5.f),\n      glm::vec2(6.f),\n      glm::vec2(-5.f),\n      glm::vec2(-4.f),\n      glm::vec2(-3.f),\n      glm::vec2(-2.f),\n      glm::vec2(-1.f),\n      glm::vec2(0.f),\n  };\n  uniform::DescriptorVector<glm::vec2> vec2Uniform(vec2Vector);\n  testIndex(vec2Uniform);\n  testUniformData(vec2Vector, vec2Uniform);\n\n  const std::vector<glm::vec3> vec3Vector = {\n      glm::vec3(3.f),\n      glm::vec3(4.f),\n      glm::vec3(5.f),\n      glm::vec3(6.f),\n      glm::vec3(7.f),\n      glm::vec3(-5.f),\n      glm::vec3(-4.f),\n      glm::vec3(-3.f),\n      glm::vec3(-2.f),\n      glm::vec3(-1.f),\n      glm::vec3(0.f),\n  };\n  uniform::DescriptorVector<glm::vec3> vec3Uniform(vec3Vector);\n  testIndex(vec3Uniform);\n  testUniformData(vec3Vector, vec3Uniform);\n\n  const std::vector<glm::vec4> vec4Vector = {\n      glm::vec4(4.f),\n      glm::vec4(5.f),\n      glm::vec4(6.f),\n      glm::vec4(7.f),\n      glm::vec4(8.f),\n      glm::vec4(-5.f),\n      glm::vec4(-4.f),\n      glm::vec4(-3.f),\n      glm::vec4(-2.f),\n      glm::vec4(-1.f),\n      glm::vec4(0.f),\n  };\n  uniform::DescriptorVector<glm::vec4> vec4Uniform(vec4Vector);\n  testIndex(vec4Uniform);\n  testUniformData(vec4Vector, vec4Uniform);\n\n  const std::vector<glm::mat2> mat2Vector = {\n      glm::mat2(2.f),\n      glm::mat2(3.f),\n      glm::mat2(4.f),\n      glm::mat2(5.f),\n      glm::mat2(6.f),\n      glm::mat2(-5.f),\n      glm::mat2(-4.f),\n      glm::mat2(-3.f),\n      glm::mat2(-2.f),\n      glm::mat2(-1.f),\n      glm::mat2(0.f),\n  };\n  uniform::DescriptorVector<glm::mat2> mat2Uniform(mat2Vector);\n  testIndex(mat2Uniform);\n  testUniformData(mat2Vector, mat2Uniform);\n\n  const std::vector<glm::mat3> mat3Vector = {\n      glm::mat3(3.f),\n      glm::mat3(4.f),\n      glm::mat3(5.f),\n      glm::mat3(6.f),\n      glm::mat3(7.f),\n      glm::mat3(-5.f),\n      glm::mat3(-4.f),\n      glm::mat3(-3.f),\n      glm::mat3(-2.f),\n      glm::mat3(-1.f),\n      glm::mat3(0.f),\n  };\n  uniform::DescriptorVector<glm::mat3> mat3Uniform(mat3Vector);\n  testIndex(mat3Uniform);\n  testUniformData(mat3Vector, mat3Uniform);\n\n  const std::vector<glm::mat4> mat4Vector = {\n      glm::mat4(4.f),\n      glm::mat4(5.f),\n      glm::mat4(6.f),\n      glm::mat4(7.f),\n      glm::mat4(8.f),\n      glm::mat4(-5.f),\n      glm::mat4(-4.f),\n      glm::mat4(-3.f),\n      glm::mat4(-2.f),\n      glm::mat4(-1.f),\n      glm::mat4(0.f),\n  };\n  uniform::DescriptorVector<glm::mat4> mat4Uniform(mat4Vector);\n  testIndex(mat4Uniform);\n  testUniformData(mat4Vector, mat4Uniform);\n}\n\n} // namespace iglu::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/UniformTests.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <gtest/gtest.h>\n\n#include <IGLU/uniform/Descriptor.h>\n#include <string>\n#include <igl/Shader.h>\n\nnamespace iglu::tests {\n\nnamespace {\n\nconstexpr int kVertexIndex = 9;\nconstexpr int kFragmentIndex = 51;\n\ntemplate<typename T>\nstruct Compare {\n  static void verifyAligned(const T* expected, const void* aligned) {\n    const T& alignedValue = *(static_cast<const T*>(aligned));\n    ASSERT_EQ(*expected, alignedValue);\n  }\n};\n\ntemplate<>\nstruct Compare<glm::mat3> {\n  static void verifyAligned(const glm::mat3* expected, const void* aligned) {\n    const auto& alignedValue =\n        *static_cast<const typename uniform::Trait<glm::mat3>::Aligned*>(aligned);\n    const auto* expectedPtr = static_cast<const float*>(glm::value_ptr(*expected));\n    for (int i = 0; i < 3; i++) {\n      // base of each row\n      const auto* alignedRowPtr = static_cast<const float*>(glm::value_ptr(alignedValue[i]));\n      for (int j = 0; j < 3; j++) {\n        ASSERT_EQ(*expectedPtr++, *alignedRowPtr++);\n      }\n    }\n  }\n};\n\ninline void testIndex(uniform::Descriptor& uniform) {\n  ASSERT_EQ(uniform.getIndex(igl::ShaderStage::Fragment), -1);\n  ASSERT_EQ(uniform.getIndex(igl::ShaderStage::Vertex), -1);\n\n  uniform.setIndex(igl::ShaderStage::Fragment, kFragmentIndex);\n  uniform.setIndex(igl::ShaderStage::Vertex, kVertexIndex);\n\n  ASSERT_EQ(uniform.getIndex(igl::ShaderStage::Fragment), kFragmentIndex);\n  ASSERT_EQ(uniform.getIndex(igl::ShaderStage::Vertex), kVertexIndex);\n}\n\ntemplate<typename T>\nvoid testUniformData(const T& expected, uniform::DescriptorValue<T>& uniform) {\n  ASSERT_EQ(uniform.numBytes(uniform::Alignment::Packed), sizeof(T));\n  ASSERT_EQ(uniform.numBytes(uniform::Alignment::Aligned), sizeof(T) + uniform::Trait<T>::kPadding);\n  ASSERT_EQ(uniform.size(), 1);\n\n  const void* uniformPackedPtr = uniform.data(uniform::Alignment::Packed);\n  const void* uniformAlignedPtr = uniform.data(uniform::Alignment::Aligned);\n\n  if (uniform::Trait<T>::kPadding == 0) {\n    ASSERT_EQ(uniformPackedPtr, uniformAlignedPtr);\n  }\n\n  const T* uniformPacked = static_cast<const T*>(uniformPackedPtr);\n  ASSERT_EQ(expected, *uniformPacked);\n\n  if (uniform::Trait<T>::kPadding > 0) {\n    Compare<T>::verifyAligned(&expected, uniformAlignedPtr);\n  }\n}\n\ntemplate<typename T>\nvoid testUniformData(const std::vector<T>& expected, uniform::DescriptorVector<T>& uniform) {\n  ASSERT_EQ(uniform.numBytes(uniform::Alignment::Packed), uniform.size() * sizeof(T));\n  ASSERT_EQ(uniform.numBytes(uniform::Alignment::Aligned),\n            uniform.size() * (sizeof(T) + uniform::Trait<T>::kPadding));\n  ASSERT_EQ(uniform.size(), expected.size());\n\n  constexpr size_t kNumBytesPacked = sizeof(T);\n  constexpr size_t kNumBytesAligned = kNumBytesPacked + uniform::Trait<T>::kPadding;\n\n  const auto* uniformPackedBytePtr =\n      static_cast<const uint8_t*>(uniform.data(uniform::Alignment::Packed));\n  const auto* uniformAlignedBytePtr =\n      static_cast<const uint8_t*>(uniform.data(uniform::Alignment::Aligned));\n\n  if (uniform::Trait<T>::kPadding == 0) {\n    ASSERT_EQ(uniformPackedBytePtr, uniformAlignedBytePtr);\n  }\n\n  for (size_t i = 0, iLen = uniform.size(); i < iLen; ++i) {\n    const T* uniformPacked = reinterpret_cast<const T*>(uniformPackedBytePtr);\n    ASSERT_EQ(expected[i], *uniformPacked);\n\n    if (uniform::Trait<T>::kPadding > 0) {\n      Compare<T>::verifyAligned(&(expected[i]), uniformAlignedBytePtr);\n    }\n\n    uniformPackedBytePtr += kNumBytesPacked;\n    uniformAlignedBytePtr += kNumBytesAligned;\n  }\n}\n\n} // namespace\n} // namespace iglu::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/bitmap/BitmapWriterTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <IGLU/bitmap/BitmapWriter.h>\n\n#include \"../../util/TestDevice.h\"\n\n#include <sstream>\n\nnamespace {\n// Dumped from a bmp file that was manually validated as being a checkerboard pattern\nconst uint8_t kExpectedData[] = {\n    0x42, 0x4d, 0x66, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28,\n    0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,\n    0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00};\n} // namespace\n\nnamespace igl::tests::bitmap_writer {\n\nclass BitmapWriterTest : public ::testing::Test {\n public:\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    device_ = util::createTestDevice();\n    ASSERT_TRUE(device_ != nullptr);\n\n    Result result;\n    texDesc_ = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                  kTexWidth,\n                                  kTexWidth,\n                                  TextureDesc::TextureUsageBits::Sampled |\n                                      TextureDesc::TextureUsageBits::Attachment);\n    texture_ = device_->createTexture(texDesc_, &result);\n    ASSERT_TRUE(result.isOk());\n\n    // Initialize a red checkerboard pattern\n    std::vector<uint8_t> data;\n    data.reserve(kTexWidth * kTexWidth * 4);\n    for (int i = 0; i < kTexWidth; i++) {\n      for (int j = 0; j < kTexWidth; j++) {\n        if (i % 2 != j % 2) {\n          data.push_back(255);\n        } else {\n          data.push_back(0);\n        }\n        data.push_back(0);\n        data.push_back(0);\n        data.push_back(255);\n      }\n    }\n\n    // Initialize texture data\n    const auto range = igl::TextureRangeDesc::new2D(0, 0, kTexWidth, kTexWidth);\n    texture_->upload(range, data.data());\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ITexture> texture_;\n  TextureDesc texDesc_;\n  constexpr static size_t kTexWidth = 4;\n};\n\nTEST_F(BitmapWriterTest, WriteFile) {\n  std::stringstream ss;\n  igl::iglu::writeBitmap(ss, texture_, *device_);\n  std::string s = ss.str();\n  const uint8_t* fileData = reinterpret_cast<const uint8_t*>(s.c_str());\n  ASSERT_NE(fileData, nullptr);\n  ASSERT_EQ(s.size(), sizeof(kExpectedData));\n  ASSERT_EQ(memcmp(fileData, kExpectedData, sizeof(kExpectedData)), 0);\n}\n\n} // namespace igl::tests::bitmap_writer\n"
  },
  {
    "path": "src/igl/tests/iglu/texture_loader/BaseTextureLoader.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../../data/TextureData.h\"\n#include \"../../util/Common.h\"\n\n#include <IGLU/texture_loader/ITextureLoader.h>\n#include <igl/Common.h>\n\nnamespace igl::tests {\n\nclass TestTextureLoader : public iglu::textureloader::ITextureLoader {\n public:\n  TestTextureLoader(iglu::textureloader::DataReader reader,\n                    TextureDesc::TextureUsage usage) noexcept :\n    iglu::textureloader::ITextureLoader(reader, usage) {}\n\n  TextureDesc& descriptorRef() noexcept {\n    return mutableDescriptor();\n  }\n};\n\nclass BaseTextureLoaderTest : public ::testing::Test {\n private:\n public:\n  BaseTextureLoaderTest() = default;\n  ~BaseTextureLoaderTest() override = default;\n\n  //\n  // SetUp()\n  // Create device, commandQueue\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nTEST_F(BaseTextureLoaderTest, CheckCapabilities) {\n  Result result;\n  auto dataReader = iglu::textureloader::DataReader::tryCreate(\n      reinterpret_cast<const uint8_t*>(data::texture::kTexRgba2x2.data()),\n      sizeof(data::texture::kTexRgba2x2),\n      &result);\n  ASSERT_TRUE(result.isOk());\n  ASSERT_TRUE(dataReader.has_value());\n\n  TestTextureLoader loader(*dataReader, TextureDesc::TextureUsageBits::Sampled);\n  loader.descriptorRef().format = TextureFormat::RGBA_UNorm8;\n\n  ASSERT_TRUE(loader.isSupported(*iglDev_));\n\n  ASSERT_FALSE(loader.canUploadSourceData());\n  ASSERT_FALSE(loader.canUseExternalMemory());\n  ASSERT_FALSE(loader.shouldGenerateMipmaps());\n}\n\nTEST_F(BaseTextureLoaderTest, CreateTexture) {\n  Result result;\n  auto dataReader = iglu::textureloader::DataReader::tryCreate(\n      reinterpret_cast<const uint8_t*>(data::texture::kTexRgba2x2.data()),\n      sizeof(data::texture::kTexRgba2x2),\n      &result);\n  ASSERT_TRUE(result.isOk());\n  ASSERT_TRUE(dataReader.has_value());\n\n  TestTextureLoader loader(*dataReader, TextureDesc::TextureUsageBits::Sampled);\n  loader.descriptorRef().type = TextureType::TwoD;\n  loader.descriptorRef().format = TextureFormat::RGBA_UNorm8;\n  EXPECT_TRUE(loader.create(*iglDev_, &result) != nullptr);\n  EXPECT_TRUE(result.isOk());\n\n  EXPECT_TRUE(loader.create(*iglDev_, TextureFormat::RGBA_UNorm8, &result) != nullptr);\n  EXPECT_TRUE(result.isOk());\n\n  EXPECT_TRUE(loader.create(*iglDev_, TextureDesc::TextureUsageBits::Sampled, &result) != nullptr);\n  EXPECT_TRUE(result.isOk());\n}\n\nTEST_F(BaseTextureLoaderTest, UploadTexture) {\n  Result result;\n  auto dataReader = iglu::textureloader::DataReader::tryCreate(\n      reinterpret_cast<const uint8_t*>(data::texture::kTexRgba2x2.data()),\n      sizeof(data::texture::kTexRgba2x2),\n      &result);\n  ASSERT_TRUE(result.isOk());\n  ASSERT_TRUE(dataReader.has_value());\n\n  TestTextureLoader loader(*dataReader, TextureDesc::TextureUsageBits::Sampled);\n  loader.descriptorRef().type = TextureType::TwoD;\n  loader.descriptorRef().format = TextureFormat::RGBA_UNorm8;\n  auto texture = loader.create(*iglDev_, &result);\n  ASSERT_TRUE(texture != nullptr);\n  ASSERT_TRUE(result.isOk());\n\n  loader.upload(*texture, &result);\n  ASSERT_TRUE(result.isOk());\n\n  uint8_t data = 0;\n  loader.loadToExternalMemory(&data, 0, &result);\n  ASSERT_FALSE(result.isOk());\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/texture_loader/IDataTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <IGLU/texture_loader/IData.h>\n\n#include <cstring>\n#include <memory>\n\nnamespace igl::tests {\n\nclass IDataTest : public ::testing::Test {\n public:\n  void SetUp() override {}\n  void TearDown() override {}\n};\n\nTEST_F(IDataTest, TryCreateNullDataFails) {\n  Result result;\n  auto data = iglu::textureloader::IData::tryCreate(nullptr, 100, &result);\n  EXPECT_EQ(data, nullptr);\n  EXPECT_FALSE(result.isOk());\n  EXPECT_EQ(result.code, Result::Code::ArgumentNull);\n}\n\nTEST_F(IDataTest, TryCreateZeroSizeFails) {\n  auto buffer = std::make_unique<uint8_t[]>(10);\n  Result result;\n  auto data = iglu::textureloader::IData::tryCreate(std::move(buffer), 0, &result);\n  EXPECT_EQ(data, nullptr);\n  EXPECT_FALSE(result.isOk());\n  EXPECT_EQ(result.code, Result::Code::ArgumentInvalid);\n}\n\nTEST_F(IDataTest, TryCreateValidDataSucceeds) {\n  constexpr uint64_t kSize = 100;\n  auto buffer = std::make_unique<uint8_t[]>(kSize);\n  std::memset(buffer.get(), 0xAB, kSize);\n\n  Result result;\n  auto data = iglu::textureloader::IData::tryCreate(std::move(buffer), kSize, &result);\n  EXPECT_NE(data, nullptr);\n  EXPECT_TRUE(result.isOk());\n  EXPECT_EQ(data->size(), kSize);\n  EXPECT_NE(data->data(), nullptr);\n  EXPECT_EQ(data->data()[0], 0xAB);\n}\n\nTEST_F(IDataTest, TryCreateLargeSizeSucceeds) {\n  constexpr uint64_t kSize = 1024 * 1024;\n  auto buffer = std::make_unique<uint8_t[]>(kSize);\n  buffer[0] = 0xCD;\n\n  Result result;\n  auto data = iglu::textureloader::IData::tryCreate(std::move(buffer), kSize, &result);\n  EXPECT_NE(data, nullptr);\n  EXPECT_TRUE(result.isOk());\n  EXPECT_EQ(data->size(), kSize);\n  EXPECT_EQ(data->data()[0], 0xCD);\n}\n\nTEST_F(IDataTest, ExtractDataReturnsValidData) {\n  constexpr uint64_t kSize = 50;\n  auto buffer = std::make_unique<uint8_t[]>(kSize);\n  std::memset(buffer.get(), 0xEF, kSize);\n\n  Result result;\n  auto data = iglu::textureloader::IData::tryCreate(std::move(buffer), kSize, &result);\n  ASSERT_NE(data, nullptr);\n\n  auto extracted = data->extractData();\n  EXPECT_NE(extracted.data, nullptr);\n  EXPECT_EQ(extracted.size, kSize);\n  EXPECT_NE(extracted.deleter, nullptr);\n\n  if (extracted.deleter != nullptr) {\n    extracted.deleter(const_cast<void*>(extracted.data));\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/texture_loader/Ktx1TextureLoaderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <IGLU/texture_loader/ktx1/Header.h>\n#include <IGLU/texture_loader/ktx1/TextureLoaderFactory.h>\n#include <cstring>\n#include <vector>\n#include <igl/opengl/util/TextureFormat.h>\n\nnamespace igl::tests::ktx1 {\n\nnamespace {\n\nstd::vector<uint8_t> getBuffer(uint32_t capacity) {\n  std::vector<uint8_t> buffer(static_cast<size_t>(capacity));\n  return buffer;\n}\n\nvoid put(std::vector<uint8_t>& buffer, uint32_t offset, uint32_t data) {\n  if (buffer.size() < static_cast<size_t>(offset) + sizeof(data)) {\n    throw std::runtime_error(\"Overflow when storing a word\");\n  }\n  std::memcpy(buffer.data() + offset, &data, sizeof(data));\n}\n\nconstexpr uint32_t kHeaderSize = 64u;\nconstexpr uint32_t kOffsetEndianness = 12u;\nconstexpr uint32_t kOffsetTypeSize = 20u;\nconstexpr uint32_t kOffsetGlFormat = 28u;\nconstexpr uint32_t kOffsetWidth = 36u;\nconstexpr uint32_t kOffsetHeight = 40u;\nconstexpr uint32_t kOffsetNumberOfFaces = 52u;\nconstexpr uint32_t kOffsetNumberOfMipmapLevels = 56u;\nconstexpr uint32_t kOffsetBytesOfKeyValueData = 60u;\nconstexpr uint32_t kOffsetImages = 64u;\n\n// NOLINTBEGIN(readability-identifier-naming)\nconstexpr uint32_t GL_RGBA8 = 0x8058;\nconstexpr uint32_t GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG = 0x8C03;\nconstexpr uint32_t GL_COMPRESSED_RGB8_ETC2 = 0x9274;\n// NOLINTEND(readability-identifier-naming)\n\nvoid putMipLevel(std::vector<uint8_t>& buffer, uint32_t mipLevel, uint32_t imageSize) {\n  const auto* header = reinterpret_cast<const iglu::textureloader::ktx1::Header*>(buffer.data());\n\n  const auto range = igl::TextureRangeDesc::new2D(\n      0, 0, std::max(header->pixelWidth, 1u), std::max(header->pixelHeight, 1u));\n\n  const auto format = igl::opengl::util::glTextureFormatToTextureFormat(\n      header->glInternalFormat, header->glFormat, header->glType);\n  const auto properties = igl::TextureFormatProperties::fromTextureFormat(format);\n\n  uint32_t offset = kOffsetImages;\n  for (uint32_t i = 0; i < mipLevel; ++i) {\n    const uint32_t rangeBytes =\n        static_cast<uint32_t>(properties.getBytesPerRange(range.atMipLevel(i)));\n    offset += rangeBytes + 4u;\n  }\n  put(buffer, offset, imageSize);\n}\n\nvoid populateMinimalValidFile(std::vector<uint8_t>& buffer,\n                              uint32_t glFormat,\n                              uint32_t width,\n                              uint32_t height,\n                              uint32_t numMipLevels,\n                              uint32_t bytesOfKeyValueData,\n                              uint32_t imageSize) {\n  // HEADER\n  // Zero-out the whole buffer, since there might be garbage in it.\n  std::memset(buffer.data(), 0x00, buffer.size());\n\n  // Put the default values in\n  const char fixedTag[] = {'\\xAB', 'K', 'T', 'X', ' ', '1', '1', '\\xBB', '\\r', '\\n', '\\x1A', '\\n'};\n  std::memcpy(buffer.data(), &fixedTag, sizeof(fixedTag));\n  put(buffer, kOffsetEndianness, 0x04030201);\n  put(buffer, kOffsetTypeSize, 1);\n  put(buffer, kOffsetNumberOfFaces, 1);\n\n  put(buffer, kOffsetWidth, width);\n  put(buffer, kOffsetHeight, height);\n  put(buffer, kOffsetNumberOfMipmapLevels, numMipLevels);\n  put(buffer, kOffsetGlFormat, glFormat);\n  put(buffer, kOffsetBytesOfKeyValueData, bytesOfKeyValueData);\n\n  // IMAGES\n  putMipLevel(buffer, 0, imageSize);\n}\n\nstd::optional<iglu::textureloader::DataReader> getReader(const std::vector<uint8_t>& buffer) {\n  Result ret;\n  auto maybeReader = iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), &ret);\n\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n\n  return maybeReader;\n}\n} // namespace\n\nclass Ktx1TextureLoaderTest : public ::testing::Test {\n public:\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n  }\n\n  void TearDown() override {}\n\n protected:\n  iglu::textureloader::ktx1::TextureLoaderFactory factory_;\n};\n\nTEST_F(Ktx1TextureLoaderTest, EmptyBuffer_Fails) {\n  const uint32_t numMipLevels = 1u;\n  const uint32_t imageSize = 512u;\n  auto buffer = getBuffer(kHeaderSize + imageSize + 4u * numMipLevels /* for imageSize */);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx1TextureLoaderTest, MinimumValidHeader_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 512u;\n  const uint32_t glFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n  auto buffer = getBuffer(kHeaderSize + imageSize + 4u * numMipLevels /* for imageSize */);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(Ktx1TextureLoaderTest, HeaderWithMipLevels_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 5u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t glFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n  const uint32_t imageSize = 512u; // For first mip level\n  // size:  512 + 128 + 32 + 32 + 32 + 32 - 64x32, 32x16, 16x8, 8x4, 4x2, 2x1, 1x1\n  auto buffer = getBuffer(kHeaderSize + 512u + 128u + 32u + 32u + 32u + 32u + 4u * numMipLevels);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  // Fill the other mip levels\n  putMipLevel(buffer, 1u, 128u);\n  putMipLevel(buffer, 2u, 32u);\n  putMipLevel(buffer, 3u, 32u);\n  putMipLevel(buffer, 4u, 32u);\n\n  Result ret;\n  auto maybeReader = getReader(buffer);\n  ASSERT_TRUE(maybeReader.has_value());\n  auto loader = factory_.tryCreate(*maybeReader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(Ktx1TextureLoaderTest, ValidHeaderWithExtraData_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 512u;\n  const uint32_t glFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n  auto buffer = getBuffer(kHeaderSize + imageSize + 1u + 4u * numMipLevels);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto maybeReader = getReader(buffer);\n  ASSERT_TRUE(maybeReader.has_value());\n  auto loader = factory_.tryCreate(*maybeReader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(Ktx1TextureLoaderTest, InsufficientData_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 512u;\n  const uint32_t glFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n  auto buffer = getBuffer(kHeaderSize + imageSize + 4u * numMipLevels - 1u);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto maybeReader = getReader(buffer);\n  ASSERT_TRUE(maybeReader.has_value());\n  auto loader = factory_.tryCreate(*maybeReader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx1TextureLoaderTest, InsufficientDataWithMipLevels_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 6u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t glFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n  const uint32_t imageSize = 512; // For first mip level\n  // size:  512 + 128 + 32 + 32 + 32 + 32 - 64x32, 32x16, 16x8, 8x4, 4x2, 2x1, 1x1\n  auto buffer =\n      getBuffer(kHeaderSize + 512u + 128u + 32u + 32u + 32u + 32u + 4u * numMipLevels - 1u);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  // Fill the other mip levels\n  putMipLevel(buffer, 1u, 128u);\n  putMipLevel(buffer, 2u, 32u);\n  putMipLevel(buffer, 3u, 32u);\n  putMipLevel(buffer, 4u, 32u);\n  putMipLevel(buffer, 5u, 32u);\n\n  Result ret;\n  auto maybeReader = getReader(buffer);\n  ASSERT_TRUE(maybeReader.has_value());\n  auto loader = factory_.tryCreate(*maybeReader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx1TextureLoaderTest, ValidHeaderWithInvalidImageSize_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 4096u;\n  const uint32_t glFormat = GL_COMPRESSED_RGB8_ETC2;\n\n  auto buffer = getBuffer(kHeaderSize + imageSize + 4u * numMipLevels);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto maybeReader = getReader(buffer);\n  ASSERT_TRUE(maybeReader.has_value());\n  auto loader = factory_.tryCreate(*maybeReader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx1TextureLoaderTest, InvalidHeaderWithExcessiveImageSize_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 4294967290u;\n  const uint32_t glFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n  auto buffer = getBuffer(kHeaderSize + 4u * numMipLevels);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto maybeReader = getReader(buffer);\n  ASSERT_TRUE(maybeReader.has_value());\n  auto loader = factory_.tryCreate(*maybeReader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx1TextureLoaderTest, InvalidHeaderWithExcessiveMipLevels_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 4294967290u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 512u;\n  const uint32_t glFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n  auto buffer = getBuffer(kHeaderSize + imageSize);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto maybeReader = getReader(buffer);\n  ASSERT_TRUE(maybeReader.has_value());\n  auto loader = factory_.tryCreate(*maybeReader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx1TextureLoaderTest, InvalidHeaderWithExcessiveKeyValueData_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 4294967290u;\n  const uint32_t imageSize = 512u;\n  const uint32_t glFormat = GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n  auto buffer = getBuffer(kHeaderSize + imageSize);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto maybeReader = getReader(buffer);\n  ASSERT_TRUE(maybeReader.has_value());\n  auto loader = factory_.tryCreate(*maybeReader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx1TextureLoaderTest, MinimumValidHeader1x1Rgba8Succeeds) {\n  const uint32_t width = 1u;\n  const uint32_t height = 1u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 4u;\n  const uint32_t glFormat = GL_RGBA8;\n  auto buffer = getBuffer(kHeaderSize + imageSize + 4u * numMipLevels /* for imageSize */);\n  populateMinimalValidFile(\n      buffer, glFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n} // namespace igl::tests::ktx1\n"
  },
  {
    "path": "src/igl/tests/iglu/texture_loader/Ktx2TextureLoaderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <IGLU/texture_loader/ktx2/Header.h>\n#include <IGLU/texture_loader/ktx2/TextureLoaderFactory.h>\n#include <cstring>\n#include <numeric>\n#include <vector>\n#include <igl/vulkan/util/TextureFormat.h>\n\nnamespace igl::tests::ktx2 {\n\nnamespace {\n\ntemplate<typename T>\nT align(T offset, T alignment) {\n  return (offset + (alignment - 1)) & ~(alignment - 1);\n}\n\nstd::vector<uint8_t> getBuffer(uint32_t capacity) {\n  std::vector<uint8_t> buffer(static_cast<size_t>(capacity));\n  return buffer;\n}\n\ntemplate<typename T>\nvoid put(std::vector<uint8_t>& buffer, uint32_t offset, T data) {\n  if (buffer.size() < static_cast<size_t>(offset) + sizeof(T)) {\n    throw std::runtime_error(\"Overflow when storing a word\");\n  }\n  std::memcpy(buffer.data() + offset, &data, sizeof(T));\n}\n\nconstexpr uint32_t kHeaderSize = 80u;\nconstexpr uint32_t kOffsetVkFormat = 12u;\nconstexpr uint32_t kOffsetTypeSize = 16u;\nconstexpr uint32_t kOffsetWidth = 20u;\nconstexpr uint32_t kOffsetHeight = 24u;\nconstexpr uint32_t kOffsetFaceCount = 36u;\nconstexpr uint32_t kOffsetLevelCount = 40u;\nconstexpr uint32_t kOffsetDfdByteOffset = 48u;\nconstexpr uint32_t kOffsetDfdByteLength = 52u;\nconstexpr uint32_t kOffsetKvdByteOffset = 56u;\nconstexpr uint32_t kOffsetKvdByteLength = 60u;\n\nconstexpr uint32_t kMipmapMetadataSize = 24u;\nconstexpr uint32_t kDfdCompressedMetadataSize = 48u;\nconstexpr uint32_t kDfdUncompressedMetadataSize = 92u;\n\n// NOLINTBEGIN(readability-identifier-naming)\nconstexpr uint32_t VK_FORMAT_R8G8B8A8_UNORM = 37u;\nconstexpr uint32_t VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000u;\nconstexpr uint32_t VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147u;\n\nconstexpr uint8_t KHR_DF_FLAG_ALPHA_STRAIGHT = 0;\n\nconstexpr uint8_t KHR_DF_TRANSFER_SRGB = 1;\nconstexpr uint8_t KHR_DF_TRANSFER_LINEAR = 2;\n\nconstexpr uint8_t KHR_DF_PRIMARIES_BT709 = 1;\n\nconstexpr uint8_t KHR_DF_MODEL_RGBSDA = 1;\nconstexpr uint8_t KHR_DF_MODEL_ETC1 = 160;\nconstexpr uint8_t KHR_DF_MODEL_PVRTC = 164;\n\nconstexpr uint8_t KHR_DF_SAMPLE_DATATYPE_LINEAR = (1U << 4U);\n\nconstexpr uint8_t KHR_DF_CHANNEL_RGBSDA_RED = 0u;\nconstexpr uint8_t KHR_DF_CHANNEL_RGBSDA_GREEN = 1u;\nconstexpr uint8_t KHR_DF_CHANNEL_RGBSDA_BLUE = 2u;\nconstexpr uint8_t KHR_DF_CHANNEL_RGBSDA_ALPHA = 15u;\n// NOLINTEND(readability-identifier-naming)\n\nuint32_t getTotalHeaderSize(uint32_t vkFormat,\n                            uint32_t numMipLevels,\n                            uint32_t bytesOfKeyValueData) {\n  return kHeaderSize + numMipLevels * kMipmapMetadataSize + bytesOfKeyValueData +\n         (vkFormat == VK_FORMAT_R8G8B8A8_UNORM ? kDfdUncompressedMetadataSize\n                                               : kDfdCompressedMetadataSize);\n}\n\nuint32_t getTotalDataSize(uint32_t vkFormat,\n                          uint32_t width,\n                          uint32_t height,\n                          uint32_t numMipLevels) {\n  const auto format =\n      igl::vulkan::util::vkTextureFormatToTextureFormat(static_cast<int32_t>(vkFormat));\n  const auto properties = igl::TextureFormatProperties::fromTextureFormat(format);\n\n  const auto range = igl::TextureRangeDesc::new2D(0, 0, std::max(width, 1u), std::max(height, 1u));\n\n  const uint32_t mipLevelAlignment = std::lcm(static_cast<uint32_t>(properties.bytesPerBlock), 4u);\n\n  uint32_t dataSize = 0;\n  for (uint32_t i = 0; i < numMipLevels; ++i) {\n    const uint32_t mipLevel = numMipLevels - i - 1;\n    const uint32_t rangeBytes =\n        static_cast<uint32_t>(properties.getBytesPerRange(range.atMipLevel(mipLevel)));\n\n    dataSize = align(dataSize + rangeBytes, mipLevelAlignment);\n  }\n\n  return dataSize;\n}\n\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nvoid putDfd(std::vector<uint8_t>& buffer, uint32_t vkFormat, uint32_t numMipLevels) {\n  const uint32_t dfdMetadataOffset = kHeaderSize + numMipLevels * kMipmapMetadataSize;\n\n  ASSERT_TRUE(vkFormat == VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG ||\n              vkFormat == VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK ||\n              vkFormat == VK_FORMAT_R8G8B8A8_UNORM);\n\n  const auto format =\n      igl::vulkan::util::vkTextureFormatToTextureFormat(static_cast<int32_t>(vkFormat));\n  const auto properties = igl::TextureFormatProperties::fromTextureFormat(format);\n\n  const uint16_t descriptorType = 0;\n  const uint16_t vendorId = 0;\n  const uint16_t descriptorBlockSize = vkFormat == VK_FORMAT_R8G8B8A8_UNORM ? 88 : 40;\n  const uint16_t version = 2;\n  const uint8_t flags = KHR_DF_FLAG_ALPHA_STRAIGHT;\n  const uint8_t transferFunction = properties.isSRGB() ? KHR_DF_TRANSFER_SRGB\n                                                       : KHR_DF_TRANSFER_LINEAR;\n  const uint8_t colorPrimaries = KHR_DF_PRIMARIES_BT709;\n  const uint8_t colorModel =\n      vkFormat == VK_FORMAT_R8G8B8A8_UNORM\n          ? KHR_DF_MODEL_RGBSDA\n          : (vkFormat == VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG ? KHR_DF_MODEL_PVRTC\n                                                               : KHR_DF_MODEL_ETC1);\n  const uint8_t texelBlockDimension3 = 0;\n  const uint8_t texelBlockDimension2 = properties.blockDepth - 1;\n  const uint8_t texelBlockDimension1 = properties.blockHeight - 1;\n  const uint8_t texelBlockDimension0 = properties.blockWidth - 1;\n  const uint32_t bytesPlane3210 = vkFormat == VK_FORMAT_R8G8B8A8_UNORM ? 4u : 8u;\n  const uint32_t bytesPlane7654 = 0;\n\n  const uint32_t dfdMetadataSize = descriptorBlockSize + 4u;\n\n  put(buffer, kOffsetDfdByteOffset, dfdMetadataOffset);\n  put(buffer, kOffsetDfdByteLength, dfdMetadataSize);\n\n  put(buffer, dfdMetadataOffset, dfdMetadataSize); // Total length\n\n  put(buffer, dfdMetadataOffset + 4u, vendorId);\n  put(buffer, dfdMetadataOffset + 6u, descriptorType);\n  put(buffer, dfdMetadataOffset + 8u, version);\n  put(buffer, dfdMetadataOffset + 10u, descriptorBlockSize);\n  put(buffer, dfdMetadataOffset + 12u, colorModel);\n  put(buffer, dfdMetadataOffset + 13u, colorPrimaries);\n  put(buffer, dfdMetadataOffset + 14u, transferFunction);\n  put(buffer, dfdMetadataOffset + 15u, flags);\n  put(buffer, dfdMetadataOffset + 16u, texelBlockDimension0);\n  put(buffer, dfdMetadataOffset + 17u, texelBlockDimension1);\n  put(buffer, dfdMetadataOffset + 18u, texelBlockDimension2);\n  put(buffer, dfdMetadataOffset + 19u, texelBlockDimension3);\n  put(buffer, dfdMetadataOffset + 20u, bytesPlane3210);\n  put(buffer, dfdMetadataOffset + 24u, bytesPlane7654);\n\n  if (vkFormat == VK_FORMAT_R8G8B8A8_UNORM) {\n    constexpr std::array<uint8_t, 4> kChannelFlags = {\n        KHR_DF_CHANNEL_RGBSDA_RED,\n        KHR_DF_CHANNEL_RGBSDA_GREEN,\n        KHR_DF_CHANNEL_RGBSDA_BLUE,\n        KHR_DF_CHANNEL_RGBSDA_ALPHA | KHR_DF_SAMPLE_DATATYPE_LINEAR,\n    };\n    uint32_t offset = dfdMetadataOffset + 28u;\n    for (int i = 0; i < 4; ++i) {\n      const uint8_t channelFlags = kChannelFlags[i];\n      const uint8_t bitLength = 7;\n      const uint16_t bitOffset = 8 * i;\n      const uint8_t samplePosition3 = 0;\n      const uint8_t samplePosition2 = 0;\n      const uint8_t samplePosition1 = 0;\n      const uint8_t samplePosition0 = 0;\n      const uint32_t sampleLower = 0;\n      const uint32_t sampleUpper = std::numeric_limits<uint8_t>::max();\n      put(buffer, offset + 0u, bitOffset);\n      put(buffer, offset + 2u, bitLength);\n      put(buffer, offset + 3u, channelFlags);\n      put(buffer, offset + 4u, samplePosition0);\n      put(buffer, offset + 5u, samplePosition1);\n      put(buffer, offset + 6u, samplePosition2);\n      put(buffer, offset + 7u, samplePosition3);\n      put(buffer, offset + 8u, sampleLower);\n      put(buffer, offset + 12u, sampleUpper);\n      offset += 16u;\n    }\n  } else {\n    const uint8_t channelFlags = 0;\n    const uint8_t bitLength = 63;\n    const uint16_t bitOffset = 0;\n    const uint8_t samplePosition3 = 0;\n    const uint8_t samplePosition2 = 0;\n    const uint8_t samplePosition1 = 0;\n    const uint8_t samplePosition0 = 0;\n    const uint32_t sampleLower = 0;\n    const uint32_t sampleUpper = std::numeric_limits<uint32_t>::max();\n    put(buffer, dfdMetadataOffset + 28u, bitOffset);\n    put(buffer, dfdMetadataOffset + 30u, bitLength);\n    put(buffer, dfdMetadataOffset + 31u, channelFlags);\n    put(buffer, dfdMetadataOffset + 32u, samplePosition0);\n    put(buffer, dfdMetadataOffset + 33u, samplePosition1);\n    put(buffer, dfdMetadataOffset + 34u, samplePosition2);\n    put(buffer, dfdMetadataOffset + 35u, samplePosition3);\n    put(buffer, dfdMetadataOffset + 36u, sampleLower);\n    put(buffer, dfdMetadataOffset + 40u, sampleUpper);\n  }\n}\n\nvoid putMipLevel(std::vector<uint8_t>& buffer,\n                 uint32_t vkFormat,\n                 uint32_t mipLevel,\n                 uint32_t imageSize) {\n  const auto* header = reinterpret_cast<const iglu::textureloader::ktx2::Header*>(buffer.data());\n  const auto format =\n      igl::vulkan::util::vkTextureFormatToTextureFormat(static_cast<int32_t>(header->vkFormat));\n  const auto properties = igl::TextureFormatProperties::fromTextureFormat(format);\n\n  const auto range = igl::TextureRangeDesc::new2D(\n      0, 0, std::max(header->pixelWidth, 1u), std::max(header->pixelHeight, 1u));\n\n  const uint32_t maxMipLevels = igl::TextureDesc::calcNumMipLevels(range.width, range.height);\n  const uint32_t levelCount = std::min(maxMipLevels, header->levelCount);\n\n  const uint32_t mipLevelAlignment = std::lcm(static_cast<uint32_t>(properties.bytesPerBlock), 4u);\n  const uint32_t mipmapMetadataLength = levelCount * kMipmapMetadataSize;\n\n  const uint32_t metadataLength =\n      iglu::textureloader::ktx2::kHeaderLength + mipmapMetadataLength + header->kvdByteLength +\n      (vkFormat == VK_FORMAT_R8G8B8A8_UNORM ? kDfdUncompressedMetadataSize\n                                            : kDfdCompressedMetadataSize);\n\n  std::vector<uint32_t> mipmapOffsets(levelCount);\n  uint32_t mipmapOffset = align(metadataLength, mipLevelAlignment);\n\n  for (size_t i = 0; i < levelCount; ++i) {\n    const uint32_t workingLevel = levelCount - i - 1;\n    mipmapOffsets[workingLevel] = mipmapOffset;\n    if (workingLevel == mipLevel) {\n      break;\n    }\n\n    const uint32_t rangeBytes =\n        static_cast<uint32_t>(properties.getBytesPerRange(range.atMipLevel(workingLevel)));\n\n    mipmapOffset = align(mipmapOffset + rangeBytes, mipLevelAlignment);\n  }\n\n  const uint32_t mipmapMetadataOffset = kHeaderSize + mipLevel * kMipmapMetadataSize;\n  put(buffer, mipmapMetadataOffset, static_cast<uint64_t>(mipmapOffsets[mipLevel]));\n  put(buffer, mipmapMetadataOffset + 8u, static_cast<uint64_t>(imageSize));\n  put(buffer, mipmapMetadataOffset + 16u, static_cast<uint64_t>(imageSize));\n}\n\nvoid populateMinimalValidFile(std::vector<uint8_t>& buffer,\n                              uint32_t vkFormat,\n                              uint32_t width,\n                              uint32_t height,\n                              uint32_t numMipLevels,\n                              uint32_t bytesOfKeyValueData,\n                              uint32_t imageSize,\n                              bool forceDfdAfterMipLevel1 = false) {\n  // HEADER\n  // Zero-out the whole buffer, since there might be garbage in it.\n  std::memset(buffer.data(), 0x00, buffer.size());\n\n  const uint32_t mipmapMetadataLength = numMipLevels * kMipmapMetadataSize;\n\n  // Put the default values in\n  const char fixedTag[] = {'\\xAB', 'K', 'T', 'X', ' ', '2', '0', '\\xBB', '\\r', '\\n', '\\x1A', '\\n'};\n  std::memcpy(buffer.data(), &fixedTag, sizeof(fixedTag));\n  put(buffer, kOffsetVkFormat, vkFormat);\n  put(buffer, kOffsetTypeSize, 1);\n  put(buffer, kOffsetFaceCount, 1);\n\n  put(buffer, kOffsetWidth, width);\n  put(buffer, kOffsetHeight, height);\n  put(buffer, kOffsetLevelCount, numMipLevels);\n  put(buffer,\n      kOffsetKvdByteOffset,\n      bytesOfKeyValueData == 0 ? 0u : kHeaderSize + mipmapMetadataLength);\n  put(buffer, kOffsetKvdByteLength, bytesOfKeyValueData);\n\n  putMipLevel(buffer, vkFormat, 0u, imageSize);\n\n  putDfd(buffer, vkFormat, forceDfdAfterMipLevel1 ? 1u : numMipLevels);\n}\n\n} // namespace\n\nclass Ktx2TextureLoaderTest : public ::testing::Test {\n public:\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n  }\n\n  void TearDown() override {}\n\n protected:\n  iglu::textureloader::ktx2::TextureLoaderFactory factory_;\n};\n\nTEST_F(Ktx2TextureLoaderTest, EmptyBuffer_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t vkFormat = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx2TextureLoaderTest, MinimumValidHeader_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 512u;\n  const uint32_t vkFormat = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize);\n  populateMinimalValidFile(\n      buffer, vkFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(Ktx2TextureLoaderTest, HeaderWithMipLevels_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 5u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t vkFormat = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  const uint32_t imageSize = 512u; // For first mip level\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize);\n  populateMinimalValidFile(\n      buffer, vkFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  // Fill the other mip levels\n  putMipLevel(buffer, vkFormat, 1u, 128u);\n  putMipLevel(buffer, vkFormat, 2u, 32u);\n  putMipLevel(buffer, vkFormat, 3u, 32u);\n  putMipLevel(buffer, vkFormat, 4u, 32u);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(Ktx2TextureLoaderTest, ValidHeaderWithExtraData_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 512u;\n  const uint32_t vkFormat = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize + 1u);\n  populateMinimalValidFile(\n      buffer, vkFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(Ktx2TextureLoaderTest, InsufficientData_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 512u;\n  const uint32_t vkFormat = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize - 1u);\n  populateMinimalValidFile(\n      buffer, vkFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx2TextureLoaderTest, InsufficientDataWithMipLevels_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 6u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t vkFormat = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  const uint32_t imageSize = 512; // For first mip level\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize - 1u);\n  populateMinimalValidFile(\n      buffer, vkFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  // Fill the other mip levels\n  putMipLevel(buffer, vkFormat, 1u, 128u);\n  putMipLevel(buffer, vkFormat, 2u, 32u);\n  putMipLevel(buffer, vkFormat, 3u, 32u);\n  putMipLevel(buffer, vkFormat, 4u, 32u);\n  putMipLevel(buffer, vkFormat, 5u, 32u);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx2TextureLoaderTest, ValidHeaderWithInvalidImageSize_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 4096u;\n  const uint32_t vkFormat = VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK;\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize);\n  populateMinimalValidFile(\n      buffer, vkFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx2TextureLoaderTest, InvalidHeaderWithExcessiveImageSize_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 4294967290u;\n  const uint32_t vkFormat = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize);\n  populateMinimalValidFile(\n      buffer, vkFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx2TextureLoaderTest, InvalidHeaderWithExcessiveMipLevels_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 4294967290u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 512u;\n  const uint32_t vkFormat = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, 6u, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, 6u);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize);\n  populateMinimalValidFile(buffer,\n                           vkFormat,\n                           width,\n                           height,\n                           numMipLevels,\n                           bytesOfKeyValueData,\n                           imageSize,\n                           true) /* forceDfdAfterMipLevel1*/;\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx2TextureLoaderTest, InvalidHeaderWithExcessiveKeyValueData_Fails) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 4294967290u;\n  const uint32_t imageSize = 512u;\n  const uint32_t vkFormat = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize);\n  populateMinimalValidFile(\n      buffer, vkFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Ktx2TextureLoaderTest, MinimumValidHeader1x1Rgba8Succeeds) {\n  const uint32_t width = 1u;\n  const uint32_t height = 1u;\n  const uint32_t numMipLevels = 1u;\n  const uint32_t bytesOfKeyValueData = 0u;\n  const uint32_t imageSize = 4u;\n  const uint32_t vkFormat = VK_FORMAT_R8G8B8A8_UNORM;\n  const uint32_t totalHeaderSize = getTotalHeaderSize(vkFormat, numMipLevels, bytesOfKeyValueData);\n  const uint32_t totalDataSize = getTotalDataSize(vkFormat, width, height, numMipLevels);\n\n  auto buffer = getBuffer(totalHeaderSize + totalDataSize);\n  populateMinimalValidFile(\n      buffer, vkFormat, width, height, numMipLevels, bytesOfKeyValueData, imageSize);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\n} // namespace igl::tests::ktx2\n"
  },
  {
    "path": "src/igl/tests/iglu/texture_loader/StbHdrTextureLoaderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <IGLU/texture_loader/stb_hdr/Header.h>\n#include <IGLU/texture_loader/stb_hdr/TextureLoaderFactory.h>\n#include <cstring>\n\nnamespace igl::tests::stb::hdr {\n\nnamespace {\n\nstd::string populateMinimalValidFile(bool radiance, uint32_t width, uint32_t height) {\n  std::stringstream ss;\n  ss << \"#?\" << (radiance ? \"RADIANCE\" : \"RGBE\") << \"\\n\";\n  ss << \"FORMAT=32-bit_rle_rgbe\\n\";\n  ss << \"\\n\";\n  ss << \"-Y \" << width << \" +X \" << height << \"\\n\";\n\n  return ss.str();\n}\n\n} // namespace\n\nclass StbHdrTextureLoaderTest : public ::testing::Test {\n public:\n  void SetUp() override {}\n\n  void TearDown() override {}\n\n protected:\n  iglu::textureloader::stb::hdr::TextureLoaderFactory factory_;\n};\n\nTEST_F(StbHdrTextureLoaderTest, EmptyBuffer_Fails) {\n  std::string buffer;\n  buffer.resize(iglu::textureloader::stb::hdr::kHeaderLength);\n\n  Result ret;\n  auto reader =\n      *iglu::textureloader::DataReader::tryCreate(reinterpret_cast<const uint8_t*>(buffer.data()),\n                                                  static_cast<uint32_t>(buffer.size()),\n                                                  nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(StbHdrTextureLoaderTest, MinimumValidRadianceHeader_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const bool radiance = true;\n\n  auto buffer = populateMinimalValidFile(radiance, width, height);\n\n  Result ret;\n  auto reader =\n      *iglu::textureloader::DataReader::tryCreate(reinterpret_cast<const uint8_t*>(buffer.data()),\n                                                  static_cast<uint32_t>(buffer.size()),\n                                                  nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbHdrTextureLoaderTest, MinimumValidRgbeHeader_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const bool radiance = false;\n\n  auto buffer = populateMinimalValidFile(radiance, width, height);\n\n  Result ret;\n  auto reader =\n      *iglu::textureloader::DataReader::tryCreate(reinterpret_cast<const uint8_t*>(buffer.data()),\n                                                  static_cast<uint32_t>(buffer.size()),\n                                                  nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbHdrTextureLoaderTest, ValidHeaderWithExtraData_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 32u;\n  const bool radiance = true;\n\n  auto buffer = populateMinimalValidFile(radiance, width, height);\n  buffer.resize(buffer.size() + 1);\n\n  Result ret;\n  auto reader =\n      *iglu::textureloader::DataReader::tryCreate(reinterpret_cast<const uint8_t*>(buffer.data()),\n                                                  static_cast<uint32_t>(buffer.size()),\n                                                  nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbHdrTextureLoaderTest, InsufficientData_Fails) {\n  std::string buffer = \"?RADIANCE\\n\";\n\n  Result ret;\n  auto reader =\n      *iglu::textureloader::DataReader::tryCreate(reinterpret_cast<const uint8_t*>(buffer.data()),\n                                                  static_cast<uint32_t>(buffer.size()),\n                                                  nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\n} // namespace igl::tests::stb::hdr\n"
  },
  {
    "path": "src/igl/tests/iglu/texture_loader/StbJpegTextureLoaderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <IGLU/texture_loader/stb_jpeg/Header.h>\n#include <IGLU/texture_loader/stb_jpeg/TextureLoaderFactory.h>\n#include <array>\n#include <cstdint>\n#include <cstring>\n#include <vector>\n\nnamespace igl::tests::stb::jpeg {\n\nnamespace {\n/// Valid JPEG data\nconstexpr std::array<uint8_t, 283> kTestImageData = {\n    0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48,\n    0x00, 0x48, 0x00, 0x00, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xDB, 0x00, 0x43, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xC0,\n    0x00, 0x11, 0x08, 0x00, 0x01, 0x00, 0x01, 0x03, 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11,\n    0x01, 0xFF, 0xC4, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xFF, 0xC4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC4, 0x00,\n    0x14, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0xFF, 0xC4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDA, 0x00, 0x0C, 0x03, 0x01, 0x00,\n    0x02, 0x11, 0x03, 0x11, 0x00, 0x3F, 0x00, 0x7F, 0x00, 0xFF, 0xD9};\n/// Image data that declares that the JPEG image is a large image size - ~1GB (within constraints)\nconstexpr std::array<uint8_t, 283> kTestLargeImageData = {\n    0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48,\n    0x00, 0x48, 0x00, 0x00, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xDB, 0x00, 0x43, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xC0,\n    0x00, 0x11, 0x08, 0x10, 0x00, 0x40, 0x00, 0x03, 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11,\n    0x01, 0xFF, 0xC4, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xFF, 0xC4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC4, 0x00,\n    0x14, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0xFF, 0xC4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDA, 0x00, 0x0C, 0x03, 0x01, 0x00,\n    0x02, 0x11, 0x03, 0x11, 0x00, 0x3F, 0x00, 0x7F, 0x00, 0xFF, 0xD9};\n/// Image data that declares that the JPEG image is a large image size ~1.9GB (within constraints)\nconstexpr std::array<uint8_t, 283> kTestVeryLargeImageData = {\n    0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48,\n    0x00, 0x48, 0x00, 0x00, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xDB, 0x00, 0x43, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xC0,\n    0x00, 0x11, 0x08, 0x46, 0x50, 0x46, 0x50, 0x03, 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11,\n    0x01, 0xFF, 0xC4, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xFF, 0xC4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC4, 0x00,\n    0x14, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0xFF, 0xC4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDA, 0x00, 0x0C, 0x03, 0x01, 0x00,\n    0x02, 0x11, 0x03, 0x11, 0x00, 0x3F, 0x00, 0x7F, 0x00, 0xFF, 0xD9};\n/// Image data that declares that the JPEG image is a really large image size ~8GB (exceeds limit)\nconstexpr std::array<uint8_t, 283> kTestOversizedImageData = {\n    0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x48,\n    0x00, 0x48, 0x00, 0x00, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xDB, 0x00, 0x43, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF, 0xC0,\n    0x00, 0x11, 0x08, 0xd1, 0x06, 0xd1, 0x06, 0x03, 0x01, 0x11, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11,\n    0x01, 0xFF, 0xC4, 0x00, 0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0xFF, 0xC4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xC4, 0x00,\n    0x14, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0xFF, 0xC4, 0x00, 0x14, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDA, 0x00, 0x0C, 0x03, 0x01, 0x00,\n    0x02, 0x11, 0x03, 0x11, 0x00, 0x3F, 0x00, 0x7F, 0x00, 0xFF, 0xD9};\n/// Invalid JPEG Data\nconstexpr std::array<uint8_t, 115> kTestCorruptedImageData = {\n    0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00,\n    0x48, 0x00, 0x48, 0x00, 0x00, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xFF,\n    0xDB, 0x00, 0x43, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\n    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};\nconstexpr const std::array<uint8_t, 67> kSingleBlackPixelGrayscreenPNG{\n    {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48,\n     0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00,\n     0x00, 0x3A, 0x7E, 0x9B, 0x55, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41, 0x54, 0x08,\n     0xD7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xE2, 0x21, 0xBC, 0x33, 0x00,\n     0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82}};\nconstexpr const std::array<uint8_t, 160> kSingleWhitePixelGrayscreenJPG{\n    {0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00,\n     0x48, 0x00, 0x48, 0x00, 0x00, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0x03, 0x02, 0x02, 0x03, 0x02,\n     0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x05, 0x08, 0x05, 0x05, 0x04, 0x04,\n     0x05, 0x0A, 0x07, 0x07, 0x06, 0x08, 0x0C, 0x0A, 0x0C, 0x0C, 0x0B, 0x0A, 0x0B, 0x0B, 0x0D,\n     0x0E, 0x12, 0x10, 0x0D, 0x0E, 0x11, 0x0E, 0x0B, 0x0B, 0x10, 0x16, 0x10, 0x11, 0x13, 0x14,\n     0x15, 0x15, 0x15, 0x0C, 0x0F, 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, 0x14, 0xFF,\n     0xC0, 0x00, 0x0B, 0x08, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x11, 0x00, 0xFF, 0xC4, 0x00,\n     0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n     0x00, 0x00, 0x00, 0x09, 0xFF, 0xC4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,\n     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDA, 0x00, 0x08,\n     0x01, 0x01, 0x00, 0x00, 0x3F, 0x00, 0x54, 0xDF, 0xFF, 0xD9}};\n\nstd::vector<uint8_t> populateMinimalValidFile(uint16_t width, uint16_t height) {\n  const uint8_t w1 = static_cast<uint8_t>((width & 0xFF00) >> 8);\n  const uint8_t w2 = static_cast<uint8_t>(width & 0xFF);\n  const uint8_t h1 = static_cast<uint8_t>((height & 0xFF00) >> 8);\n  const uint8_t h2 = static_cast<uint8_t>(height & 0xFF);\n  return {0xFF,\n          0xD8, // File Marker\n          0xFF, 0xE0, 0x00, 0x10, // APP0 marker + Length\n          'J',  'F',  'I',  'F',  0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00,\n          0x00, // End of APP0\n          0xFF, 0xC0, 0x00, 0x11, // SOF0 marker + Length\n          0x08, h1,   h2,   w1,   w2,   0x03, 'R',  0x11, 0x01, 'G',  0x11, 0x01, 'B',  0x11, 0x01};\n}\n\n} // namespace\n\nclass StbJpegTextureLoaderTest : public ::testing::Test {\n public:\n  void SetUp() override {}\n\n  void TearDown() override {}\n\n protected:\n  iglu::textureloader::stb::jpeg::TextureLoaderFactory factory_;\n};\n\nTEST_F(StbJpegTextureLoaderTest, EmptyBuffer_Fails) {\n  std::vector<uint8_t> buffer;\n  buffer.resize(iglu::textureloader::stb::jpeg::kHeaderLength);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(StbJpegTextureLoaderTest, MinimumValidHeader_Succeeds) {\n  const auto buffer = populateMinimalValidFile(64, 32);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbJpegTextureLoaderTest, ValidHeaderWithExtraData_Succeeds) {\n  auto buffer = populateMinimalValidFile(64, 32);\n  buffer.resize(buffer.size() + 1);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbJpegTextureLoaderTest, InsufficientData_Fails) {\n  auto buffer = populateMinimalValidFile(64, 32);\n  buffer.resize(buffer.size() - 5);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(StbJpegTextureLoaderTest, ValidData_Succceeds) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kTestImageData.data(), static_cast<uint32_t>(kTestImageData.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbJpegTextureLoaderTest, LargeData_Succeeds) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kTestLargeImageData.data(), static_cast<uint32_t>(kTestLargeImageData.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbJpegTextureLoaderTest, VeryLargeData_Succeeds) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kTestVeryLargeImageData.data(),\n      static_cast<uint32_t>(kTestVeryLargeImageData.size()),\n      nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbJpegTextureLoaderTest, OversizedData_Fails) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kTestOversizedImageData.data(),\n      static_cast<uint32_t>(kTestOversizedImageData.size()),\n      nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(StbJpegTextureLoaderTest, CorruptedData_Fails) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kTestCorruptedImageData.data(),\n      static_cast<uint32_t>(kTestCorruptedImageData.size()),\n      nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(StbJpegTextureLoaderTest, JpegData_Succeeds) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kSingleWhitePixelGrayscreenJPG.data(),\n      static_cast<uint32_t>(kSingleWhitePixelGrayscreenJPG.size()),\n      nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbJpegTextureLoaderTest, PngData_Fails) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kSingleBlackPixelGrayscreenPNG.data(),\n      static_cast<uint32_t>(kSingleBlackPixelGrayscreenPNG.size()),\n      nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n} // namespace igl::tests::stb::jpeg\n"
  },
  {
    "path": "src/igl/tests/iglu/texture_loader/StbPngTextureLoaderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <IGLU/texture_loader/stb_png/Header.h>\n#include <IGLU/texture_loader/stb_png/TextureLoaderFactory.h>\n#include <cstring>\n#include <vector>\n\nnamespace igl::tests::stb::png {\n\nnamespace {\nconstexpr const std::array<uint8_t, 67> kSingleBlackPixelGrayscreenPNG{\n    {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48,\n     0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00,\n     0x00, 0x3A, 0x7E, 0x9B, 0x55, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41, 0x54, 0x08,\n     0xD7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xE2, 0x21, 0xBC, 0x33, 0x00,\n     0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82}};\nconstexpr const std::array<uint8_t, 160> kSingleWhitePixelGrayscreenJPG{\n    {0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00,\n     0x48, 0x00, 0x48, 0x00, 0x00, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0x03, 0x02, 0x02, 0x03, 0x02,\n     0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x05, 0x08, 0x05, 0x05, 0x04, 0x04,\n     0x05, 0x0A, 0x07, 0x07, 0x06, 0x08, 0x0C, 0x0A, 0x0C, 0x0C, 0x0B, 0x0A, 0x0B, 0x0B, 0x0D,\n     0x0E, 0x12, 0x10, 0x0D, 0x0E, 0x11, 0x0E, 0x0B, 0x0B, 0x10, 0x16, 0x10, 0x11, 0x13, 0x14,\n     0x15, 0x15, 0x15, 0x0C, 0x0F, 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, 0x14, 0xFF,\n     0xC0, 0x00, 0x0B, 0x08, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x11, 0x00, 0xFF, 0xC4, 0x00,\n     0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n     0x00, 0x00, 0x00, 0x09, 0xFF, 0xC4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,\n     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDA, 0x00, 0x08,\n     0x01, 0x01, 0x00, 0x00, 0x3F, 0x00, 0x54, 0xDF, 0xFF, 0xD9}};\nconstexpr const std::array<uint8_t, 128> kRed2x2PNG{\n    {0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44,\n     0x52, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x08, 0x02, 0x00, 0x00, 0x00, 0xfd,\n     0xd4, 0x9a, 0x73, 0x00, 0x00, 0x00, 0x01, 0x73, 0x52, 0x47, 0x42, 0x00, 0xae, 0xce, 0x1c,\n     0xe9, 0x00, 0x00, 0x00, 0x04, 0x67, 0x41, 0x4d, 0x41, 0x00, 0x00, 0xb1, 0x8f, 0x0b, 0xfc,\n     0x61, 0x05, 0x00, 0x00, 0x00, 0x09, 0x70, 0x48, 0x59, 0x73, 0x00, 0x00, 0x0e, 0xc3, 0x00,\n     0x00, 0x0e, 0xc3, 0x01, 0xc7, 0x6f, 0xa8, 0x64, 0x00, 0x00, 0x00, 0x15, 0x49, 0x44, 0x41,\n     0x54, 0x18, 0x57, 0x63, 0x78, 0x67, 0x64, 0xf5, 0x56, 0x4e, 0x8d, 0x01, 0x88, 0xdf, 0xdb,\n     0xb9, 0x02, 0x00, 0x26, 0xc4, 0x05, 0x2f, 0x43, 0xee, 0xb8, 0xc6, 0x00, 0x00, 0x00, 0x00,\n     0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82}};\n\nstd::vector<uint8_t> populateMinimalValidFile(uint32_t width, uint32_t height) {\n  const uint8_t w1 = static_cast<uint8_t>((width & 0xFF000000) >> 24);\n  const uint8_t w2 = static_cast<uint8_t>((width & 0xFF0000) >> 16);\n  const uint8_t w3 = static_cast<uint8_t>((width & 0xFF00) >> 8);\n  const uint8_t w4 = static_cast<uint8_t>(width & 0xFF);\n  const uint8_t h1 = static_cast<uint8_t>((height & 0xFF000000) >> 24);\n  const uint8_t h2 = static_cast<uint8_t>((height & 0xFF0000) >> 16);\n  const uint8_t h3 = static_cast<uint8_t>((height & 0xFF00) >> 8);\n  const uint8_t h4 = static_cast<uint8_t>(height & 0xFF);\n  return {\n      0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, // File Marker\n      0x00, 0x00, 0x00, 0x0D, // Chunk Length\n      'I',  'H',  'D',  'R', // IHDR chunk\n      w1,   w2,   w3,   w4, // Width\n      h1,   h2,   h3,   h4, // Height\n      0x08, // Bit Depth\n      0x02, // Color Type\n      0x00, // Compression Method\n      0x00, // Filter Method\n      0x00, // Interlace Method\n      0x00, 0x00, 0x00, 0x00, // Chunk CRC\n      0x00, 0x00, 0x00, 0x00, // Chunk Length\n      'I',  'D',  'A',  'T', // IHDR chunk\n      0x00, 0x00, 0x00, 0x00, // Chunk CRC\n  };\n}\n\n} // namespace\n\nclass StbPngTextureLoaderTest : public ::testing::Test {\n public:\n  void SetUp() override {}\n\n  void TearDown() override {}\n\n protected:\n  iglu::textureloader::stb::png::TextureLoaderFactory factory_;\n};\n\nTEST_F(StbPngTextureLoaderTest, EmptyBuffer_Fails) {\n  std::vector<uint8_t> buffer;\n  buffer.resize(iglu::textureloader::stb::png::kHeaderLength);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(StbPngTextureLoaderTest, MinimumValidHeader_Succeeds) {\n  const auto buffer = populateMinimalValidFile(32u, 64u);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbPngTextureLoaderTest, ValidHeaderWithExtraData_Succeeds) {\n  auto buffer = populateMinimalValidFile(32u, 64u);\n  buffer.resize(buffer.size() + 1);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbPngTextureLoaderTest, InsufficientData_Fails) {\n  auto buffer = populateMinimalValidFile(32u, 64u);\n  buffer.resize(buffer.size() - 8);\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(StbPngTextureLoaderTest, JpegData_Fails) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kSingleWhitePixelGrayscreenJPG.data(),\n      static_cast<uint32_t>(kSingleWhitePixelGrayscreenJPG.size()),\n      nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(StbPngTextureLoaderTest, PngData_Succeeds) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kSingleBlackPixelGrayscreenPNG.data(),\n      static_cast<uint32_t>(kSingleBlackPixelGrayscreenPNG.size()),\n      nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n}\n\nTEST_F(StbPngTextureLoaderTest, PngData2x2_Succeeds) {\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      kRed2x2PNG.data(), static_cast<uint32_t>(kRed2x2PNG.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  ASSERT_TRUE(ret.isOk()) << ret.message;\n  auto data = loader->load(&ret);\n  EXPECT_NE(data, nullptr);\n  ASSERT_TRUE(ret.isOk()) << ret.message;\n  EXPECT_EQ(data->size(), 4u * 4u);\n}\n} // namespace igl::tests::stb::png\n"
  },
  {
    "path": "src/igl/tests/iglu/texture_loader/TextureLoaderFactoryTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <IGLU/texture_loader/TextureLoaderFactory.h>\n\n#include \"../../util/Common.h\"\n\n#include <IGLU/texture_loader/ktx1/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/ktx2/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/stb_hdr/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/stb_jpeg/TextureLoaderFactory.h>\n#include <IGLU/texture_loader/stb_png/TextureLoaderFactory.h>\n#include <array>\n\nnamespace igl::tests {\n\nclass TextureLoaderFactoryTest : public ::testing::Test {\n private:\n public:\n  TextureLoaderFactoryTest() = default;\n  ~TextureLoaderFactoryTest() override = default;\n\n  void SetUp() override {\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n  }\n\n  void TearDown() override {\n    // T32: Explicitly release device and command queue to prevent D3D12 resource accumulation\n    // across many tests. This ensures D3D12 resources are freed before the next test starts.\n    cmdQueue_.reset();\n    iglDev_.reset();\n  }\n\n  static std::vector<std::unique_ptr<iglu::textureloader::ITextureLoaderFactory>>\n  createLoaderFactories() {\n    std::vector<std::unique_ptr<iglu::textureloader::ITextureLoaderFactory>> factories;\n    factories.reserve(5);\n    factories.emplace_back(std::make_unique<iglu::textureloader::stb::hdr::TextureLoaderFactory>());\n    factories.emplace_back(\n        std::make_unique<iglu::textureloader::stb::jpeg::TextureLoaderFactory>());\n    factories.emplace_back(std::make_unique<iglu::textureloader::stb::png::TextureLoaderFactory>());\n    factories.emplace_back(std::make_unique<iglu::textureloader::ktx1::TextureLoaderFactory>());\n    factories.emplace_back(std::make_unique<iglu::textureloader::ktx2::TextureLoaderFactory>());\n\n    return factories;\n  }\n\n  // Member variables\n protected:\n  void runLoadTest(const uint8_t* data, uint32_t size, const char* tag);\n  iglu::textureloader::TextureLoaderFactory factory_{createLoaderFactories()};\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nvoid TextureLoaderFactoryTest::runLoadTest(const uint8_t* data, uint32_t size, const char* tag) {\n  ASSERT_NE(data, nullptr) << tag;\n\n  Result result;\n\n  auto loader = factory_.tryCreate(data, size, &result);\n  ASSERT_NE(loader, nullptr) << tag;\n  ASSERT_TRUE(result.isOk()) << tag << \" \" << result.message;\n\n  auto texture = loader->create(*iglDev_, &result);\n  ASSERT_NE(texture, nullptr) << tag;\n  ASSERT_TRUE(result.isOk()) << tag << \" \" << result.message;\n\n  loader->upload(*texture, &result);\n  ASSERT_TRUE(result.isOk()) << tag << \" \" << result.message;\n\n  if (loader->shouldGenerateMipmaps()) {\n    texture->generateMipmap(*cmdQueue_);\n  }\n}\n\nnamespace {\nconstexpr const std::array<uint8_t, 67> kSinglePixelPng{\n    {0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A, 0x00, 0x00, 0x00, 0x0D, 0x49, 0x48,\n     0x44, 0x52, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00,\n     0x00, 0x3A, 0x7E, 0x9B, 0x55, 0x00, 0x00, 0x00, 0x0A, 0x49, 0x44, 0x41, 0x54, 0x08,\n     0xD7, 0x63, 0x60, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0xE2, 0x21, 0xBC, 0x33, 0x00,\n     0x00, 0x00, 0x00, 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82}};\n}\n\nTEST_F(TextureLoaderFactoryTest, loadPng) {\n  runLoadTest(kSinglePixelPng.data(), kSinglePixelPng.size(), \"PNG\");\n}\n\nnamespace {\n\nconstexpr const std::array<uint8_t, 160> kSinglePixelJpg{\n    {0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00,\n     0x48, 0x00, 0x48, 0x00, 0x00, 0xFF, 0xDB, 0x00, 0x43, 0x00, 0x03, 0x02, 0x02, 0x03, 0x02,\n     0x02, 0x03, 0x03, 0x03, 0x03, 0x04, 0x03, 0x03, 0x04, 0x05, 0x08, 0x05, 0x05, 0x04, 0x04,\n     0x05, 0x0A, 0x07, 0x07, 0x06, 0x08, 0x0C, 0x0A, 0x0C, 0x0C, 0x0B, 0x0A, 0x0B, 0x0B, 0x0D,\n     0x0E, 0x12, 0x10, 0x0D, 0x0E, 0x11, 0x0E, 0x0B, 0x0B, 0x10, 0x16, 0x10, 0x11, 0x13, 0x14,\n     0x15, 0x15, 0x15, 0x0C, 0x0F, 0x17, 0x18, 0x16, 0x14, 0x18, 0x12, 0x14, 0x15, 0x14, 0xFF,\n     0xC0, 0x00, 0x0B, 0x08, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x11, 0x00, 0xFF, 0xC4, 0x00,\n     0x14, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n     0x00, 0x00, 0x00, 0x09, 0xFF, 0xC4, 0x00, 0x14, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,\n     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xDA, 0x00, 0x08,\n     0x01, 0x01, 0x00, 0x00, 0x3F, 0x00, 0x54, 0xDF, 0xFF, 0xD9}};\n}\n\nTEST_F(TextureLoaderFactoryTest, loadJpg) {\n  runLoadTest(kSinglePixelJpg.data(), kSinglePixelJpg.size(), \"JPG\");\n}\n\nnamespace {\nconstexpr const std::array<uint8_t, 63> kSinglePixelHdr{\n    {'#',  '?', 'R', 'A', 'D', 'I', 'A', 'N', 'C',  'E', '\\n', 'S',  'O',  'F',  'T', 'W',\n     'A',  'R', 'E', '=', 'G', 'E', 'G', 'L', '\\n', 'F', 'O',  'R',  'M',  'A',  'T', '=',\n     '3',  '2', '-', 'b', 'i', 't', '_', 'r', 'l',  'e', '_',  'r',  'g',  'b',  'e', '\\n',\n     '\\n', '-', 'Y', ' ', '1', ' ', '+', 'X', ' ',  '1', '\\n', 0x80, 0x80, 0x80, 0x81}};\n}\n\nTEST_F(TextureLoaderFactoryTest, loadHdr) {\n  runLoadTest(kSinglePixelHdr.data(), kSinglePixelHdr.size(), \"HDR\");\n}\n\nnamespace {\nconstexpr const std::array<uint8_t, 72> kSinglePixelKtx1{\n    0xab, 0x4b, 0x54, 0x58, 0x20, 0x31, 0x31, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a, 0x01, 0x02, 0x03,\n    0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x80,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\n}\n\nTEST_F(TextureLoaderFactoryTest, loadKtx1) {\n  runLoadTest(kSinglePixelKtx1.data(), kSinglePixelKtx1.size(), \"KTX1\");\n}\n\nnamespace {\nconstexpr const std::array<uint8_t, 200> kSinglePixelKtx2{\n    0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a, 0x25, 0x00, 0x00, 0x00,\n    0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x68, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0x02, 0x00, 0x58, 0x00, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,\n    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0xff, 0x00, 0x00, 0x00, 0x08, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0xff, 0x00, 0x00, 0x00, 0x10, 0x00, 0x07, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0xff, 0x00, 0x00, 0x00, 0x18, 0x00, 0x07, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n    0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};\n}\n\nTEST_F(TextureLoaderFactoryTest, loadKtx2) {\n  runLoadTest(kSinglePixelKtx2.data(), kSinglePixelKtx2.size(), \"KTX2\");\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/iglu/texture_loader/Xtc1TextureLoaderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/Config.h>\n\n#if !defined(IGL_CMAKE_BUILD)\n// @fb-only\n\n#include <gtest/gtest.h>\n\n#include <IGLU/texture_loader/xtc1/Header.h>\n#include <IGLU/texture_loader/xtc1/TextureLoaderFactory.h>\n#include <cstring>\n#include <memory>\n#include <vector>\n// @fb-only\n// @fb-only\n// @fb-only\n\nnamespace igl::tests::xtc1 {\n\nnamespace {\n\nstd::vector<uint8_t> createXtc1TextureData(uint32_t width, uint32_t height) {\n  // Create a simple RGBA8 test pattern\n  const uint32_t numPixels = width * height;\n  const uint32_t rgbaDataSize = numPixels * 4;\n  std::vector<uint8_t> rgbaData(rgbaDataSize);\n\n  // Create a checkerboard pattern\n  for (uint32_t y = 0; y < height; ++y) {\n    for (uint32_t x = 0; x < width; ++x) {\n      const uint32_t offset = (y * width + x) * 4;\n      const bool isWhite = ((x / 8) + (y / 8)) % 2 == 0;\n      rgbaData[offset + 0] = isWhite ? 255 : 0; // R\n      rgbaData[offset + 1] = isWhite ? 255 : 0; // G\n      rgbaData[offset + 2] = isWhite ? 255 : 0; // B\n      rgbaData[offset + 3] = 255; // A\n    }\n  }\n\n  // @fb-only\n  // @fb-only\n  // @fb-only\n                                           // @fb-only\n                                           // @fb-only\n                                           // @fb-only\n                                           // @fb-only\n                                           // @fb-only\n\n  // @fb-only\n    // @fb-only\n  // @fb-only\n\n  // @fb-only\n  // @fb-only\n\n  // Create the full texture data with header\n  const uint32_t totalSize = sizeof(iglu::textureloader::xtc1::Header) + compressedSize;\n  std::vector<uint8_t> textureData(totalSize);\n\n  // Write header\n  auto* header = reinterpret_cast<iglu::textureloader::xtc1::Header*>(textureData.data());\n  header->magicTag = {0x49, 0x56, 0x41, 0x4e};\n  header->width = width;\n  header->height = height;\n  header->numChannels = 4;\n  header->lossless = 0;\n  header->impasto = 1;\n  header->numMips = 1;\n  header->mipSizes[0] = static_cast<uint32_t>(compressedSize);\n\n  // Write compressed data\n  // @fb-only\n              // @fb-only\n              // @fb-only\n\n  // @fb-only\n\n  return textureData;\n}\n\n} // namespace\n\nclass Xtc1TextureLoaderTest : public ::testing::Test {\n public:\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n  }\n\n  void TearDown() override {}\n\n protected:\n  iglu::textureloader::xtc1::TextureLoaderFactory factory_;\n};\n\nTEST_F(Xtc1TextureLoaderTest, HeaderTagValidation) {\n  // Test valid tag\n  iglu::textureloader::xtc1::Header validHeader;\n  validHeader.magicTag = {0x49, 0x56, 0x41, 0x4e};\n  EXPECT_TRUE(validHeader.tagIsValid());\n\n  // Test invalid tag\n  iglu::textureloader::xtc1::Header invalidHeader;\n  invalidHeader.magicTag = {0x00, 0x00, 0x00, 0x00};\n  EXPECT_FALSE(invalidHeader.tagIsValid());\n}\n\nTEST_F(Xtc1TextureLoaderTest, EmptyBuffer_Fails) {\n  // Create a buffer that's too small (less than header size)\n  std::vector<uint8_t> buffer(4); // Only 4 bytes, need at least 8 for header\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Xtc1TextureLoaderTest, MinimalHeader_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 64u;\n\n  auto textureData = createXtc1TextureData(width, height);\n  ASSERT_FALSE(textureData.empty());\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      textureData.data(), static_cast<uint32_t>(textureData.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_NE(loader, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n\n  if (loader) {\n    const auto& desc = loader->descriptor();\n    EXPECT_EQ(desc.width, width);\n    EXPECT_EQ(desc.height, height);\n    // XTC1 textures use compressed format, not uncompressed RGBA8\n    // @fb-only\n  }\n}\n\nTEST_F(Xtc1TextureLoaderTest, InvalidHeader_Fails) {\n  std::vector<uint8_t> buffer(sizeof(iglu::textureloader::xtc1::Header));\n  auto* header = reinterpret_cast<iglu::textureloader::xtc1::Header*>(buffer.data());\n  header->width = 0; // Invalid width\n  header->height = 64;\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Xtc1TextureLoaderTest, ExcessiveWidth_Fails) {\n  std::vector<uint8_t> buffer(sizeof(iglu::textureloader::xtc1::Header));\n  auto* header = reinterpret_cast<iglu::textureloader::xtc1::Header*>(buffer.data());\n  // @fb-only\n  header->height = 64;\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Xtc1TextureLoaderTest, LoadData_Succeeds) {\n  const uint32_t width = 64u;\n  const uint32_t height = 64u;\n\n  auto textureData = createXtc1TextureData(width, height);\n  ASSERT_FALSE(textureData.empty());\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      textureData.data(), static_cast<uint32_t>(textureData.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, &ret);\n  ASSERT_NE(loader, nullptr);\n  ASSERT_TRUE(ret.isOk());\n\n  auto data = loader->load(&ret);\n  EXPECT_NE(data, nullptr);\n  EXPECT_TRUE(ret.isOk()) << ret.message;\n\n  if (data) {\n    // XTC1 textures return compressed data, not decompressed\n    // The size should be the compressed size, which is less than uncompressed\n    const uint32_t compressedSize =\n        static_cast<uint32_t>(textureData.size()) - sizeof(iglu::textureloader::xtc1::Header);\n    EXPECT_EQ(data->size(), compressedSize);\n    // Verify compressed data is smaller than uncompressed (64x64 RGBA8 = 16384 bytes)\n    EXPECT_LT(data->size(), width * height * 4);\n  }\n}\n\nTEST_F(Xtc1TextureLoaderTest, MinHeaderLength) {\n  // Test that minHeaderLength returns the correct value\n  auto minLength = factory_.minHeaderLength();\n  EXPECT_EQ(minLength, sizeof(iglu::textureloader::xtc1::Header));\n}\n\nTEST_F(Xtc1TextureLoaderTest, CanCreateWithValidHeader) {\n  const uint32_t width = 64u;\n  const uint32_t height = 64u;\n\n  auto textureData = createXtc1TextureData(width, height);\n  ASSERT_FALSE(textureData.empty());\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      textureData.data(), static_cast<uint32_t>(textureData.size()), nullptr);\n  EXPECT_TRUE(factory_.canCreate(reader, &ret));\n  EXPECT_TRUE(ret.isOk());\n}\n\nTEST_F(Xtc1TextureLoaderTest, CanCreateFailsWithInvalidTag) {\n  std::vector<uint8_t> buffer(sizeof(iglu::textureloader::xtc1::Header));\n  auto* header = reinterpret_cast<iglu::textureloader::xtc1::Header*>(buffer.data());\n  header->magicTag = {0x00, 0x00, 0x00, 0x00}; // Invalid magic tag\n  header->width = 64;\n  header->height = 64;\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  EXPECT_FALSE(factory_.canCreate(reader, &ret));\n  EXPECT_FALSE(ret.isOk());\n}\n\nTEST_F(Xtc1TextureLoaderTest, TryCreateFailsWithSmallBuffer) {\n  std::vector<uint8_t> buffer(4); // Too small\n\n  Result ret;\n  auto reader = *iglu::textureloader::DataReader::tryCreate(\n      buffer.data(), static_cast<uint32_t>(buffer.size()), nullptr);\n  auto loader = factory_.tryCreate(reader, TextureFormat::RGBA_UNorm8, &ret);\n  EXPECT_EQ(loader, nullptr);\n  EXPECT_FALSE(ret.isOk());\n}\n\n} // namespace igl::tests::xtc1\n\n// @fb-only\n#endif // IGL_CMAKE_BUILD\n"
  },
  {
    "path": "src/igl/tests/main.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n/*\n * Custom test entrypoint: initialize COM for D3D12 before running gtest.\n */\n\n#include <gtest/gtest.h>\n\n#include <csignal>\n#include <cstdio>\n// COM initialization is only needed for D3D12 tests\n// IGL_D3D12_TEST is defined only in iglD3D12Tests build\n#if defined(_WIN32) && defined(IGL_D3D12_TEST)\n#include <combaseapi.h>\n#include <windows.h>\n#endif\n\nstatic void signalHandler(int signum) {\n  std::printf(\"CRASH: Signal %d caught\\n\", signum);\n  std::_Exit(signum);\n}\n\nint main(int argc, char** argv) {\n  // Install basic signal handler for early crash diagnostics\n  std::signal(SIGSEGV, signalHandler);\n\n  // Initialize COM in multithreaded mode for D3D12 usage (Windows only)\n#if defined(_WIN32) && defined(IGL_D3D12_TEST)\n  const HRESULT hr = CoInitializeEx(nullptr, COINIT_MULTITHREADED);\n  if (FAILED(hr)) {\n    std::printf(\"COM initialization failed: 0x%08X\\n\", static_cast<unsigned>(hr));\n    return 1;\n  }\n#endif\n\n  ::testing::InitGoogleTest(&argc, argv);\n  const int result = RUN_ALL_TESTS();\n\n#if defined(_WIN32) && defined(IGL_D3D12_TEST)\n  CoUninitialize();\n#endif\n  return result;\n}\n"
  },
  {
    "path": "src/igl/tests/metal/BindGroup.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n\nnamespace igl::tests {\n\n//\n// MetalBindGroupTest\n//\n// This test covers bind group creation and destruction on Metal.\n//\nclass MetalBindGroupTest : public ::testing::Test {\n public:\n  MetalBindGroupTest() = default;\n  ~MetalBindGroupTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// CreateTextureBindGroup\n//\n// Test creating a bind group with textures.\n//\nTEST_F(MetalBindGroupTest, CreateTextureBindGroup) {\n  Result res;\n\n  // Create a texture to put in the bind group\n  TextureDesc texDesc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = device_->createTexture(texDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Create a sampler\n  SamplerStateDesc samplerDesc = SamplerStateDesc::newLinear();\n  auto sampler = device_->createSamplerState(samplerDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  BindGroupTextureDesc bgDesc;\n  bgDesc.textures[0] = texture;\n  bgDesc.samplers[0] = sampler;\n  bgDesc.debugName = \"testTextureBindGroup\";\n\n  auto handle = device_->createBindGroup(bgDesc, nullptr, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_TRUE(handle.valid());\n}\n\n//\n// CreateBufferBindGroup\n//\n// Test creating a bind group with buffers.\n//\nTEST_F(MetalBindGroupTest, CreateBufferBindGroup) {\n  Result res;\n\n  // Create a buffer\n  const float data[] = {1.0f, 2.0f, 3.0f, 4.0f};\n  const BufferDesc bufDesc{.type = BufferDesc::BufferTypeBits::Uniform,\n                           .data = data,\n                           .length = sizeof(data),\n                           .storage = ResourceStorage::Shared};\n  auto buffer = device_->createBuffer(bufDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  BindGroupBufferDesc bgDesc;\n  bgDesc.buffers[0] = std::shared_ptr<IBuffer>(std::move(buffer));\n  bgDesc.debugName = \"testBufferBindGroup\";\n\n  auto handle = device_->createBindGroup(bgDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_TRUE(handle.valid());\n}\n\n//\n// DestroyBindGroup\n//\n// Test that destroying a bind group does not crash.\n//\nTEST_F(MetalBindGroupTest, DestroyBindGroup) {\n  Result res;\n\n  TextureDesc texDesc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = device_->createTexture(texDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  BindGroupTextureDesc bgDesc;\n  bgDesc.textures[0] = texture;\n  bgDesc.debugName = \"testDestroyBindGroup\";\n\n  auto handle = device_->createBindGroup(bgDesc, nullptr, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_TRUE(handle.valid());\n\n  // Release the handle (transfers ownership) and manually destroy it.\n  // This should not crash.\n  BindGroupTextureHandle rawHandle = handle.release();\n  device_->destroy(rawHandle);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/Buffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/Buffer.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <cstring>\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalBufferTest\n//\n// This test covers igl::metal::Buffer.\n// Tests creation, upload, mapping, and storage modes of Metal buffers.\n//\nclass MetalBufferTest : public ::testing::Test {\n public:\n  MetalBufferTest() = default;\n  ~MetalBufferTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// CreateBufferWithData\n//\n// Test creating a buffer with initial data, verify size and content.\n//\nTEST_F(MetalBufferTest, CreateBufferWithData) {\n  const float data[] = {1.0f, 2.0f, 3.0f, 4.0f};\n  const size_t dataSize = sizeof(data);\n\n  const BufferDesc desc{.type = BufferDesc::BufferTypeBits::Uniform,\n                        .data = data,\n                        .length = dataSize,\n                        .storage = ResourceStorage::Shared,\n                        .debugName = \"testBufferWithData\"};\n\n  Result res;\n  auto buffer = device_->createBuffer(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(buffer, nullptr);\n\n  ASSERT_EQ(buffer->getSizeInBytes(), dataSize);\n\n  // Map and verify data\n  Result mapRes;\n  auto* mapped = static_cast<float*>(buffer->map(BufferRange(dataSize, 0), &mapRes));\n  ASSERT_TRUE(mapRes.isOk()) << mapRes.message;\n  ASSERT_NE(mapped, nullptr);\n  ASSERT_EQ(mapped[0], 1.0f);\n  ASSERT_EQ(mapped[1], 2.0f);\n  ASSERT_EQ(mapped[2], 3.0f);\n  ASSERT_EQ(mapped[3], 4.0f);\n  buffer->unmap();\n}\n\n//\n// CreateBufferEmpty\n//\n// Test creating a buffer without initial data.\n//\nTEST_F(MetalBufferTest, CreateBufferEmpty) {\n  const size_t bufferSize = 256;\n\n  const BufferDesc desc{.type = BufferDesc::BufferTypeBits::Uniform,\n                        .length = bufferSize,\n                        .storage = ResourceStorage::Shared,\n                        .debugName = \"testBufferEmpty\"};\n\n  Result res;\n  auto buffer = device_->createBuffer(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(buffer, nullptr);\n  ASSERT_EQ(buffer->getSizeInBytes(), bufferSize);\n}\n\n//\n// BufferUploadAndVerify\n//\n// Test uploading data to a buffer, then mapping and verifying the data matches.\n//\nTEST_F(MetalBufferTest, BufferUploadAndVerify) {\n  const size_t bufferSize = 4 * sizeof(float);\n\n  const BufferDesc desc{.type = BufferDesc::BufferTypeBits::Uniform,\n                        .length = bufferSize,\n                        .storage = ResourceStorage::Shared,\n                        .debugName = \"testBufferUpload\"};\n\n  Result res;\n  auto buffer = device_->createBuffer(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(buffer, nullptr);\n\n  const float uploadData[] = {10.0f, 20.0f, 30.0f, 40.0f};\n  res = buffer->upload(uploadData, BufferRange(sizeof(uploadData), 0));\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  Result mapRes;\n  auto* mapped = static_cast<float*>(buffer->map(BufferRange(bufferSize, 0), &mapRes));\n  ASSERT_TRUE(mapRes.isOk()) << mapRes.message;\n  ASSERT_NE(mapped, nullptr);\n  ASSERT_EQ(mapped[0], 10.0f);\n  ASSERT_EQ(mapped[1], 20.0f);\n  ASSERT_EQ(mapped[2], 30.0f);\n  ASSERT_EQ(mapped[3], 40.0f);\n  buffer->unmap();\n}\n\n//\n// BufferMapUnmap\n//\n// Test mapping, writing, unmapping, then re-mapping to verify written data.\n//\nTEST_F(MetalBufferTest, BufferMapUnmap) {\n  const size_t bufferSize = 4 * sizeof(float);\n\n  const BufferDesc desc{.type = BufferDesc::BufferTypeBits::Uniform,\n                        .length = bufferSize,\n                        .storage = ResourceStorage::Shared,\n                        .debugName = \"testMapUnmap\"};\n\n  Result res;\n  auto buffer = device_->createBuffer(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(buffer, nullptr);\n\n  // Map and write data\n  Result mapRes;\n  auto* mapped = static_cast<float*>(buffer->map(BufferRange(bufferSize, 0), &mapRes));\n  ASSERT_TRUE(mapRes.isOk()) << mapRes.message;\n  ASSERT_NE(mapped, nullptr);\n  mapped[0] = 100.0f;\n  mapped[1] = 200.0f;\n  mapped[2] = 300.0f;\n  mapped[3] = 400.0f;\n  buffer->unmap();\n\n  // Re-map and verify\n  auto* mapped2 = static_cast<float*>(buffer->map(BufferRange(bufferSize, 0), &mapRes));\n  ASSERT_TRUE(mapRes.isOk()) << mapRes.message;\n  ASSERT_NE(mapped2, nullptr);\n  ASSERT_EQ(mapped2[0], 100.0f);\n  ASSERT_EQ(mapped2[1], 200.0f);\n  ASSERT_EQ(mapped2[2], 300.0f);\n  ASSERT_EQ(mapped2[3], 400.0f);\n  buffer->unmap();\n}\n\n//\n// StorageModeShared\n//\n// Verify that a buffer created with Shared storage mode reports Shared.\n//\nTEST_F(MetalBufferTest, StorageModeShared) {\n  const size_t bufferSize = 64;\n\n  const BufferDesc desc{.type = BufferDesc::BufferTypeBits::Uniform,\n                        .length = bufferSize,\n                        .storage = ResourceStorage::Shared,\n                        .debugName = \"testSharedStorage\"};\n\n  Result res;\n  auto buffer = device_->createBuffer(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(buffer, nullptr);\n  ASSERT_EQ(buffer->storage(), ResourceStorage::Shared);\n}\n\n//\n// RingBufferCreation\n//\n// Create a ring buffer and verify it is non-null.\n//\nTEST_F(MetalBufferTest, RingBufferCreation) {\n  const size_t bufferSize = 256;\n\n  const BufferDesc desc{.type = BufferDesc::BufferTypeBits::Uniform,\n                        .length = bufferSize,\n                        .storage = ResourceStorage::Shared,\n                        .hint = BufferDesc::BufferAPIHintBits::Ring,\n                        .debugName = \"testRingBuffer\"};\n\n  Result res;\n  auto buffer = device_->createBuffer(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(buffer, nullptr);\n  ASSERT_EQ(buffer->getSizeInBytes(), bufferSize);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/BufferSynchronizationManager.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/BufferSynchronizationManager.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/CommandBuffer.h>\n\nnamespace igl::tests {\n\n//\n// CommandBufferMTLTest\n//\n// This test covers igl::metal::CommandBuffer.\n// Most of the testing revolves confirming successful instantiation\n// and creation of encoders.\n//\n#define IGL_METAL_MAX_IN_FLIGHT_BUFFERS 3\nclass BufferSynchronizationManagerMTLTest : public ::testing::Test {\n public:\n  BufferSynchronizationManagerMTLTest() = default;\n  ~BufferSynchronizationManagerMTLTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    bufferSyncManager_ =\n        std::make_shared<metal::BufferSynchronizationManager>(IGL_METAL_MAX_IN_FLIGHT_BUFFERS);\n\n    util::createDeviceAndQueue(device_, commandQueue_);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> commandQueue_;\n  std::shared_ptr<metal::BufferSynchronizationManager> bufferSyncManager_;\n};\n\n//\n// CommandBufferCreation\n//\n// Test successful creation of MTLCommandBuffer.\n//\nTEST_F(BufferSynchronizationManagerMTLTest, BufferSynchronizationManagerCreation) {\n  ASSERT_EQ(bufferSyncManager_->getMaxInflightBuffers(), IGL_METAL_MAX_IN_FLIGHT_BUFFERS);\n  ASSERT_EQ(bufferSyncManager_->getCurrentInFlightBufferIndex(), 0);\n}\n\nTEST_F(BufferSynchronizationManagerMTLTest, BufferSynchronizationManagerEndOfFrameSync) {\n  bufferSyncManager_->manageEndOfFrameSync();\n  ASSERT_EQ(bufferSyncManager_->getCurrentInFlightBufferIndex(), 1);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/BytesBinding.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n#define BYTES_TEX_WIDTH 8\n#define BYTES_TEX_HEIGHT 8\n\n//\n// MetalBytesBindingTest\n//\n// This test covers binding bytes to the render encoder on Metal.\n// Tests binding small constant data directly to vertex and fragment stages.\n//\nclass MetalBytesBindingTest : public ::testing::Test {\n public:\n  MetalBytesBindingTest() = default;\n  ~MetalBytesBindingTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n\n    Result res;\n\n    // Create render target\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             BYTES_TEX_WIDTH,\n                                             BYTES_TEX_HEIGHT,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n    colorTexture_ = device_->createTexture(texDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n\n    FramebufferDesc fbDesc;\n    fbDesc.colorAttachments[0].texture = colorTexture_;\n    framebuffer_ = device_->createFramebuffer(fbDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n\n    const CommandBufferDesc cbDesc;\n    commandBuffer_ = cmdQueue_->createCommandBuffer(cbDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ITexture> colorTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<ICommandBuffer> commandBuffer_;\n};\n\n//\n// BindBytesVertex\n//\n// Test binding inline bytes to the vertex stage.\n//\nTEST_F(MetalBytesBindingTest, BindBytesVertex) {\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  const float uniformData[] = {1.0f, 0.0f, 0.0f};\n  encoder->bindBytes(2, BindTarget::kVertex, uniformData, sizeof(uniformData));\n  encoder->endEncoding();\n}\n\n//\n// BindBytesFragment\n//\n// Test binding inline bytes to the fragment stage.\n//\nTEST_F(MetalBytesBindingTest, BindBytesFragment) {\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  const float uniformData[] = {0.0f, 1.0f, 0.0f, 1.0f};\n  encoder->bindBytes(2, BindTarget::kFragment, uniformData, sizeof(uniformData));\n  encoder->endEncoding();\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/ColorSpace.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/ColorSpace.h>\n\nnamespace igl::metal::tests {\nTEST(ColorSpaceTest, colorSpaceToCGColorSpace) {\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceLinearSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::SRGB_LINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::SRGB_NONLINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceDisplayP3),\n            colorSpaceToCGColorSpace(ColorSpace::DISPLAY_P3_NONLINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceExtendedLinearSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::EXTENDED_SRGB_LINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceDCIP3),\n            colorSpaceToCGColorSpace(ColorSpace::DCI_P3_NONLINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceLinearSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::BT709_LINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceITUR_709),\n            colorSpaceToCGColorSpace(ColorSpace::BT709_NONLINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceAdobeRGB1998),\n            colorSpaceToCGColorSpace(ColorSpace::ADOBERGB_LINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceAdobeRGB1998),\n            colorSpaceToCGColorSpace(ColorSpace::ADOBERGB_NONLINEAR));\n\n  ASSERT_EQ(nil, colorSpaceToCGColorSpace(ColorSpace::PASS_THROUGH));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceExtendedSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::EXTENDED_SRGB_NONLINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceITUR_2020),\n            colorSpaceToCGColorSpace(ColorSpace::BT2020_NONLINEAR));\n\n  if (@available(macOS 12.0, iOS 15.0, *)) {\n    ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceLinearDisplayP3),\n              colorSpaceToCGColorSpace(ColorSpace::DISPLAY_P3_LINEAR));\n\n    ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceLinearITUR_2020),\n              colorSpaceToCGColorSpace(ColorSpace::BT2020_LINEAR));\n  }\n\n  // can't test unsupported cases\n  /*ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::HDR10_ST2084));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::DOLBYVISION));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::HDR10_HLG));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::DISPLAY_NATIVE_AMD));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::BT601_NONLINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::BT2100_HLG_NONLINEAR));\n\n  ASSERT_EQ(CGColorSpaceCreateWithName(kCGColorSpaceSRGB),\n            colorSpaceToCGColorSpace(ColorSpace::BT2100_PQ_NONLINEAR));*/\n}\n\n} // namespace igl::metal::tests\n"
  },
  {
    "path": "src/igl/tests/metal/CommandBuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/CommandBuffer.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/IGL.h>\n\nnamespace igl::tests {\n\n//\n// CommandBufferMTLTest\n//\n// This test covers igl::metal::CommandBuffer.\n// Most of the testing revolves confirming successful instantiation\n// and creation of encoders.\n//\nclass CommandBufferMTLTest : public ::testing::Test {\n public:\n  CommandBufferMTLTest() = default;\n  ~CommandBufferMTLTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(device_, commandQueue_);\n\n    // Test instantiation and constructor of CommandBuffer.\n    Result res;\n    const CommandBufferDesc desc;\n    commandBuffer_ = commandQueue_->createCommandBuffer(desc, &res);\n    ASSERT_TRUE(res.isOk());\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> commandQueue_;\n  std::shared_ptr<ICommandBuffer> commandBuffer_;\n};\n\n//\n// CommandBufferCreation\n//\n// Test successful creation of MTLCommandBuffer.\n//\nTEST_F(CommandBufferMTLTest, CommandBufferCreation) {\n  auto mtlBuffer = static_cast<metal::CommandBuffer&>(*commandBuffer_).get();\n  ASSERT_NE(mtlBuffer, nullptr);\n}\n\n//\n// CreateComputeCommandEncoder\n//\n// Exercise the function createComputeCommandEncoder,\n// test successful creation of IComputeCommandEncoder object.\n//\nTEST_F(CommandBufferMTLTest, CreateComputeCommandEncoder) {\n  auto encoder = commandBuffer_->createComputeCommandEncoder();\n  ASSERT_NE(encoder, nullptr);\n\n  // MTLCommandEncoder must always call endEncoding before being released.\n  encoder->endEncoding();\n}\n\n//\n// CreateRenderCommandEncoderSimple\n//\n// Exercise the function createRenderCommandEncoder,\n// test successful creation of IRenderCommandEncoder object.\n//\nTEST_F(CommandBufferMTLTest, CreateRenderCommandEncoderSimple) {\n  Result res;\n\n  const FramebufferDesc fbDesc;\n  auto frameBuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk());\n\n  const RenderPassDesc rpDesc;\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, frameBuffer);\n  ASSERT_NE(encoder, nullptr);\n\n  // MTLCommandEncoder must always call endEncoding before being released.\n  encoder->endEncoding();\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/CommandBufferOps.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <cstring>\n#include <igl/IGL.h>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalCommandBufferOpsTest\n//\n// This test covers command buffer operations on Metal.\n// Tests debug labels, buffer copying, and wait until completed.\n//\nclass MetalCommandBufferOpsTest : public ::testing::Test {\n public:\n  MetalCommandBufferOpsTest() = default;\n  ~MetalCommandBufferOpsTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// DebugLabels\n//\n// Test pushing and popping debug labels on a command buffer without crash.\n//\nTEST_F(MetalCommandBufferOpsTest, DebugLabels) {\n  Result res;\n  const CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(cmdBuf, nullptr);\n\n  cmdBuf->pushDebugGroupLabel(\"TestGroup\", Color(1, 0, 0, 1));\n  cmdBuf->popDebugGroupLabel();\n}\n\n//\n// CopyBuffer\n//\n// Test copying data between two buffers via a command buffer.\n//\nTEST_F(MetalCommandBufferOpsTest, CopyBuffer) {\n  Result res;\n\n  // Create source buffer with data\n  const float srcData[] = {1.0f, 2.0f, 3.0f, 4.0f};\n  BufferDesc srcDesc(\n      BufferDesc::BufferTypeBits::Storage, srcData, sizeof(srcData), ResourceStorage::Shared);\n  auto srcBuffer = device_->createBuffer(srcDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Create destination buffer (empty)\n  BufferDesc dstDesc(\n      BufferDesc::BufferTypeBits::Storage, nullptr, sizeof(srcData), ResourceStorage::Shared);\n  auto dstBuffer = device_->createBuffer(dstDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Create command buffer and copy\n  const CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  cmdBuf->copyBuffer(*srcBuffer, *dstBuffer, 0, 0, sizeof(srcData));\n\n  cmdQueue_->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n\n  // Verify destination buffer contents\n  Result mapRes;\n  auto* mapped = static_cast<float*>(dstBuffer->map(BufferRange(sizeof(srcData), 0), &mapRes));\n  ASSERT_TRUE(mapRes.isOk()) << mapRes.message;\n  ASSERT_NE(mapped, nullptr);\n  ASSERT_EQ(mapped[0], 1.0f);\n  ASSERT_EQ(mapped[1], 2.0f);\n  ASSERT_EQ(mapped[2], 3.0f);\n  ASSERT_EQ(mapped[3], 4.0f);\n  dstBuffer->unmap();\n}\n\n//\n// WaitUntilCompleted\n//\n// Test that waitUntilCompleted returns without timeout on a submitted command buffer.\n//\nTEST_F(MetalCommandBufferOpsTest, WaitUntilCompleted) {\n  Result res;\n  const CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Create a compute encoder to make the command buffer non-empty\n  auto encoder = cmdBuf->createComputeCommandEncoder();\n  ASSERT_NE(encoder, nullptr);\n  encoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n  // If we reach here, the wait completed successfully\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/CommandQueue.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/CommandQueue.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/IGL.h>\n\nnamespace igl::tests {\n\nclass CommandQueueTest : public ::testing::Test {\n public:\n  CommandQueueTest() = default;\n  ~CommandQueueTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n  }\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  CommandBufferDesc cbDesc_ = {};\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n};\n\n// Test Cases\nTEST_F(CommandQueueTest, CreateCommandBuffer) {\n  Result ret;\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n}\n\nTEST_F(CommandQueueTest, Submit) {\n  Result ret;\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n  cmdQueue_->submit(*(cmdBuf_));\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/ComputeCommandEncoder.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/ComputeCommandEncoder.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/CommandBuffer.h>\n\nnamespace igl::tests {\n\n//\n// MetalComputeCommandEncoderTest\n//\n// This test covers igl::metal::ComputeCommandEncoder.\n// Tests creation and dispatch operations of Metal compute command encoders.\n//\nclass MetalComputeCommandEncoderTest : public ::testing::Test {\n public:\n  MetalComputeCommandEncoderTest() = default;\n  ~MetalComputeCommandEncoderTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n\n    Result res;\n    const CommandBufferDesc desc;\n    commandBuffer_ = cmdQueue_->createCommandBuffer(desc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n    ASSERT_NE(commandBuffer_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> commandBuffer_;\n};\n\n//\n// CreateEncoder\n//\n// Test creating a compute command encoder from a command buffer.\n//\nTEST_F(MetalComputeCommandEncoderTest, CreateEncoder) {\n  auto encoder = commandBuffer_->createComputeCommandEncoder();\n  ASSERT_NE(encoder, nullptr);\n\n  // MTLCommandEncoder must always call endEncoding before being released.\n  encoder->endEncoding();\n}\n\n//\n// DispatchNoError\n//\n// Test dispatching threadgroups on a compute command encoder without crash.\n//\nTEST_F(MetalComputeCommandEncoderTest, DispatchNoError) {\n  Result res;\n\n  // Create compute shader module\n  const auto computeSource = std::string(data::shader::kMtlSimpleComputeShader);\n  auto computeModule =\n      device_->createShaderModule(ShaderModuleDesc::fromStringInput(\n                                      computeSource.c_str(),\n                                      {.stage = ShaderStage::Compute,\n                                       .entryPoint = std::string(data::shader::kSimpleComputeFunc)},\n                                      \"computeModule\"),\n                                  &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  auto stagesDesc = ShaderStagesDesc::fromComputeModule(std::move(computeModule));\n  auto stages = device_->createShaderStages(stagesDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  ComputePipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = std::move(stages);\n  auto pipeline = device_->createComputePipeline(pipelineDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(pipeline, nullptr);\n\n  // Create input/output buffers\n  constexpr size_t kNumElements = 6;\n  float inputData[kNumElements] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};\n  BufferDesc inputBufDesc(\n      BufferDesc::BufferTypeBits::Storage, inputData, sizeof(inputData), ResourceStorage::Shared);\n  auto inputBuffer = device_->createBuffer(inputBufDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  BufferDesc outputBufDesc(\n      BufferDesc::BufferTypeBits::Storage, nullptr, sizeof(inputData), ResourceStorage::Shared);\n  auto outputBuffer = device_->createBuffer(outputBufDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  auto encoder = commandBuffer_->createComputeCommandEncoder();\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->bindComputePipelineState(pipeline);\n  encoder->bindBuffer(0, inputBuffer.get(), 0, sizeof(inputData));\n  encoder->bindBuffer(1, outputBuffer.get(), 0, sizeof(inputData));\n\n  encoder->dispatchThreadGroups(\n      Dimensions(1, 1, 1), Dimensions(kNumElements, 1, 1), Dependencies());\n\n  encoder->endEncoding();\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/ComputePipelineState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/ComputePipelineState.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalComputePipelineStateTest\n//\n// This test covers igl::metal::ComputePipelineState.\n// Tests creation and error paths of Metal compute pipeline states.\n//\nclass MetalComputePipelineStateTest : public ::testing::Test {\n public:\n  MetalComputePipelineStateTest() = default;\n  ~MetalComputePipelineStateTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// CreateComputePipeline\n//\n// Test creating a compute pipeline with a valid compute shader.\n//\nTEST_F(MetalComputePipelineStateTest, CreateComputePipeline) {\n  Result res;\n\n  // Create compute shader module\n  const auto computeSource = std::string(data::shader::kMtlSimpleComputeShader);\n  auto computeModule =\n      device_->createShaderModule(ShaderModuleDesc::fromStringInput(\n                                      computeSource.c_str(),\n                                      {.stage = ShaderStage::Compute,\n                                       .entryPoint = std::string(data::shader::kSimpleComputeFunc)},\n                                      \"computeModule\"),\n                                  &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(computeModule, nullptr);\n\n  // Create shader stages\n  auto stagesDesc = ShaderStagesDesc::fromComputeModule(std::move(computeModule));\n  auto stages = device_->createShaderStages(stagesDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(stages, nullptr);\n\n  // Create compute pipeline\n  ComputePipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = std::move(stages);\n  pipelineDesc.debugName = \"testComputePipeline\";\n\n  auto pipeline = device_->createComputePipeline(pipelineDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(pipeline, nullptr);\n}\n\n//\n// CreateComputePipelineNullStages\n//\n// Test that creating a compute pipeline with null shader stages returns an error.\n//\nTEST_F(MetalComputePipelineStateTest, CreateComputePipelineNullStages) {\n  Result res;\n\n  ComputePipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = nullptr;\n  pipelineDesc.debugName = \"testNullStages\";\n\n  auto pipeline = device_->createComputePipeline(pipelineDesc, &res);\n  ASSERT_FALSE(res.isOk());\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/DepthStencilCreation.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalDepthStencilCreationTest\n//\n// This test covers creation of depth stencil states on Metal.\n// Tests default, depth write, all compare functions, and front/back stencil ops.\n//\nclass MetalDepthStencilCreationTest : public ::testing::Test {\n public:\n  MetalDepthStencilCreationTest() = default;\n  ~MetalDepthStencilCreationTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// DefaultDepthStencil\n//\n// Test creating a depth stencil state with default descriptor values.\n//\nTEST_F(MetalDepthStencilCreationTest, DefaultDepthStencil) {\n  Result res;\n  DepthStencilStateDesc desc;\n  desc.debugName = \"defaultDepthStencil\";\n\n  auto depthStencilState = device_->createDepthStencilState(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(depthStencilState, nullptr);\n}\n\n//\n// DepthWriteEnabled\n//\n// Test creating a depth stencil state with depth write enabled.\n//\nTEST_F(MetalDepthStencilCreationTest, DepthWriteEnabled) {\n  Result res;\n  DepthStencilStateDesc desc;\n  desc.isDepthWriteEnabled = true;\n  desc.compareFunction = CompareFunction::Less;\n  desc.debugName = \"depthWriteEnabled\";\n\n  auto depthStencilState = device_->createDepthStencilState(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(depthStencilState, nullptr);\n}\n\n//\n// AllCompareFunctions\n//\n// Test creating depth stencil states with all compare functions.\n//\nTEST_F(MetalDepthStencilCreationTest, AllCompareFunctions) {\n  const CompareFunction functions[] = {\n      CompareFunction::Never,\n      CompareFunction::Less,\n      CompareFunction::Equal,\n      CompareFunction::LessEqual,\n      CompareFunction::Greater,\n      CompareFunction::NotEqual,\n      CompareFunction::GreaterEqual,\n      CompareFunction::AlwaysPass,\n  };\n\n  for (auto func : functions) {\n    Result res;\n    DepthStencilStateDesc desc;\n    desc.compareFunction = func;\n    desc.isDepthWriteEnabled = true;\n\n    auto depthStencilState = device_->createDepthStencilState(desc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n    ASSERT_NE(depthStencilState, nullptr)\n        << \"Failed to create depth stencil state with CompareFunction \" << static_cast<int>(func);\n  }\n}\n\n//\n// FrontBackStencil\n//\n// Test creating a depth stencil state with front and back face stencil ops.\n//\nTEST_F(MetalDepthStencilCreationTest, FrontBackStencil) {\n  Result res;\n  DepthStencilStateDesc desc;\n  desc.isDepthWriteEnabled = true;\n  desc.compareFunction = CompareFunction::LessEqual;\n\n  // Front face stencil\n  desc.frontFaceStencil.stencilFailureOperation = StencilOperation::Keep;\n  desc.frontFaceStencil.depthFailureOperation = StencilOperation::IncrementClamp;\n  desc.frontFaceStencil.depthStencilPassOperation = StencilOperation::Replace;\n  desc.frontFaceStencil.stencilCompareFunction = CompareFunction::AlwaysPass;\n  desc.frontFaceStencil.readMask = 0xFF;\n  desc.frontFaceStencil.writeMask = 0xFF;\n\n  // Back face stencil\n  desc.backFaceStencil.stencilFailureOperation = StencilOperation::Zero;\n  desc.backFaceStencil.depthFailureOperation = StencilOperation::DecrementClamp;\n  desc.backFaceStencil.depthStencilPassOperation = StencilOperation::Invert;\n  desc.backFaceStencil.stencilCompareFunction = CompareFunction::NotEqual;\n  desc.backFaceStencil.readMask = 0x0F;\n  desc.backFaceStencil.writeMask = 0xF0;\n\n  desc.debugName = \"frontBackStencil\";\n\n  auto depthStencilState = device_->createDepthStencilState(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(depthStencilState, nullptr);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/DepthStencilState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/DepthStencilState.h>\n\nnamespace igl::tests {\n\n// DepthStencilStateMTLTest\n//\n// This test covers metal::DepthStencilState.\nclass DepthStencilStateMTLTest : public ::testing::Test {\n public:\n  DepthStencilStateMTLTest() = default;\n  ~DepthStencilStateMTLTest() override = default;\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n  }\n  void TearDown() override {}\n};\n\n//\n// Compare Function to MTL Test\n//\n// Check expected outputs for metal::DepthStencilState::convertStencilOperation\n//\nTEST_F(DepthStencilStateMTLTest, StencilOpConversionToMTL) {\n  struct StencilOpConversion {\n    StencilOperation igl = StencilOperation::Keep;\n    MTLStencilOperation mtl = MTLStencilOperationKeep;\n  };\n  const MTLStencilOperation mtlStencilOperation =\n      metal::DepthStencilState::convertStencilOperation(StencilOperation::Keep);\n  ASSERT_EQ(mtlStencilOperation, MTLStencilOperationKeep);\n\n  const std::vector<StencilOpConversion> conversions{\n      StencilOpConversion{.igl = igl::StencilOperation::Keep, .mtl = MTLStencilOperationKeep},\n      StencilOpConversion{.igl = igl::StencilOperation::Zero, .mtl = MTLStencilOperationZero},\n      StencilOpConversion{.igl = igl::StencilOperation::Replace, .mtl = MTLStencilOperationReplace},\n      StencilOpConversion{.igl = igl::StencilOperation::IncrementClamp,\n                          .mtl = MTLStencilOperationIncrementClamp},\n      StencilOpConversion{.igl = igl::StencilOperation::DecrementClamp,\n                          .mtl = MTLStencilOperationDecrementClamp},\n      StencilOpConversion{.igl = igl::StencilOperation::Invert, .mtl = MTLStencilOperationInvert},\n      StencilOpConversion{.igl = igl::StencilOperation::IncrementWrap,\n                          .mtl = MTLStencilOperationIncrementWrap},\n      StencilOpConversion{.igl = igl::StencilOperation::DecrementWrap,\n                          .mtl = MTLStencilOperationDecrementWrap},\n  };\n\n  for (auto data : conversions) {\n    enum MTLStencilOperation mtl = metal::DepthStencilState::convertStencilOperation(data.igl);\n    ASSERT_EQ(mtl, data.mtl);\n  }\n}\n\n//\n// Compare Function to MTL Test\n//\n// Check expected outputs for metal::DepthStencilState::convertCompareFunction\n//\nTEST_F(DepthStencilStateMTLTest, CompareFunctionToMTL) {\n  struct CompareFuncConversion {\n    CompareFunction igl = igl::CompareFunction::Never;\n    MTLCompareFunction mtl = MTLCompareFunctionNever;\n  };\n\n  const std::vector<CompareFuncConversion> conversions{\n      CompareFuncConversion{.igl = igl::CompareFunction::Never, .mtl = MTLCompareFunctionNever},\n      CompareFuncConversion{.igl = igl::CompareFunction::Less, .mtl = MTLCompareFunctionLess},\n      CompareFuncConversion{.igl = igl::CompareFunction::Equal, .mtl = MTLCompareFunctionEqual},\n      CompareFuncConversion{.igl = igl::CompareFunction::LessEqual,\n                            .mtl = MTLCompareFunctionLessEqual},\n      CompareFuncConversion{.igl = igl::CompareFunction::Greater, .mtl = MTLCompareFunctionGreater},\n      CompareFuncConversion{.igl = igl::CompareFunction::NotEqual,\n                            .mtl = MTLCompareFunctionNotEqual},\n      CompareFuncConversion{.igl = igl::CompareFunction::GreaterEqual,\n                            .mtl = MTLCompareFunctionGreaterEqual},\n      CompareFuncConversion{.igl = igl::CompareFunction::AlwaysPass,\n                            .mtl = MTLCompareFunctionAlways},\n  };\n\n  for (auto data : conversions) {\n    const MTLCompareFunction mtl = metal::DepthStencilState::convertCompareFunction(data.igl);\n    ASSERT_EQ(mtl, data.mtl);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/Device.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/Device.h>\n\n#include \"../util/TestDevice.h\"\n\nnamespace igl::tests {\n\nclass DeviceMetalTest : public ::testing::Test {\n public:\n  DeviceMetalTest() = default;\n  ~DeviceMetalTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n  }\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n};\n\n// Test Cases\nTEST_F(DeviceMetalTest, GetShaderVersion) {\n  auto iglShaderVersion = iglDev_->getShaderVersion();\n  ASSERT_EQ(iglShaderVersion.family, igl::ShaderFamily::Metal);\n  ASSERT_GT(iglShaderVersion.majorVersion, 0);\n  ASSERT_GT(iglShaderVersion.minorVersion, 0);\n}\n\nTEST_F(DeviceMetalTest, GetMostRecentCommandQueue) {\n  auto* metalDevice = static_cast<igl::metal::Device*>(iglDev_.get());\n\n  // Initially, no command queue should exist\n  auto initialCmdQueue = metalDevice->getMostRecentCommandQueue();\n  ASSERT_EQ(initialCmdQueue, nullptr);\n\n  // Create a command queue\n  Result result;\n  CommandQueueDesc desc{};\n  auto cmdQueue1 = iglDev_->createCommandQueue(desc, &result);\n  ASSERT_EQ(result.code, igl::Result::Code::Ok);\n  ASSERT_NE(cmdQueue1, nullptr);\n\n  // Get the most recent command queue and verify it matches\n  auto mostRecentCmdQueue1 = metalDevice->getMostRecentCommandQueue();\n  ASSERT_EQ(mostRecentCmdQueue1, cmdQueue1);\n\n  // Create another command queue\n  auto cmdQueue2 = iglDev_->createCommandQueue(desc, &result);\n  ASSERT_EQ(result.code, igl::Result::Code::Ok);\n  ASSERT_NE(cmdQueue2, nullptr);\n\n  // Verify the most recent command queue is now the second one\n  auto mostRecentCmdQueue2 = metalDevice->getMostRecentCommandQueue();\n  ASSERT_EQ(mostRecentCmdQueue2, cmdQueue2);\n  ASSERT_NE(mostRecentCmdQueue2, cmdQueue1);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/DeviceFeatureSet.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/DeviceFeatureSet.h>\n\n#include <igl/Assert.h>\n#include <igl/DeviceFeatures.h>\n\nnamespace igl::tests {\n\nclass DeviceFeatureSetMTLTest : public ::testing::Test {\n public:\n  DeviceFeatureSetMTLTest() = default;\n  ~DeviceFeatureSetMTLTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    mtlDevice_ = MTLCreateSystemDefaultDevice();\n    ASSERT_NE(mtlDevice_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  id<MTLDevice> mtlDevice_;\n};\n\n// Test Cases\n\nTEST_F(DeviceFeatureSetMTLTest, HasFeatureTest) {\n  const auto mtlDeviceFeatureSet = metal::DeviceFeatureSet(mtlDevice_);\n\n  // We currently expect all these to be \"true\", i.e. available features on Metal\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::MultiSample), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::MultiSampleResolve), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::TextureFilterAnisotropic), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::MapBufferRange), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::MultipleRenderTargets), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::StandardDerivative), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::TextureFormatRG), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::ReadWriteFramebuffer), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::TextureNotPot), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::TextureHalfFloat), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::TextureFloat), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::Texture2DArray), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::Texture3D), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::ShaderTextureLod), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::DepthShaderRead), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::MinMaxBlend), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::TexturePartialMipChain), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::ShaderLibrary), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::BindBytes), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::SRGB), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::SRGBSwapchain), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::DrawIndexedIndirect), true);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::ExplicitBinding), true);\n\n  // We currently expect all these to be \"false\", i.e. NOT available on Metal\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::Multiview), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::BindUniform), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::BufferDeviceAddress), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::ShaderTextureLodExt), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::TextureExternalImage), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::TextureArrayExt), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::ExplicitBindingExt), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::ValidationLayersEnabled), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasFeature(DeviceFeatures::ExternalMemoryObjects), false);\n}\n\nTEST_F(DeviceFeatureSetMTLTest, HasRequirementTest) {\n  const auto mtlDeviceFeatureSet = metal::DeviceFeatureSet(mtlDevice_);\n\n  // We expect these to fail on Metal because the requirements here are OpenGL extensions.\n  ASSERT_EQ(mtlDeviceFeatureSet.hasRequirement(DeviceRequirement::StandardDerivativeExtReq), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasRequirement(DeviceRequirement::TextureFormatRGExtReq), false);\n  ASSERT_EQ(mtlDeviceFeatureSet.hasRequirement(DeviceRequirement::ShaderTextureLodExtReq), false);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/DeviceStatistics.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/DeviceStatistics.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalDeviceStatisticsTest\n//\n// This test covers device statistics tracking on Metal.\n// Tests draw count and shader compilation count.\n//\nclass MetalDeviceStatisticsTest : public ::testing::Test {\n public:\n  MetalDeviceStatisticsTest() = default;\n  ~MetalDeviceStatisticsTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// InitialDrawCountZero\n//\n// Test that draw count starts at 0 for a fresh device.\n//\nTEST_F(MetalDeviceStatisticsTest, InitialDrawCountZero) {\n  // A freshly created device should have a draw count of 0\n  // (assuming no other tests have used this device)\n  size_t drawCount = device_->getCurrentDrawCount();\n  ASSERT_EQ(drawCount, 0u);\n}\n\n//\n// ShaderCompilationCountTracking\n//\n// Test that shader compilation count tracks compilations.\n//\nTEST_F(MetalDeviceStatisticsTest, ShaderCompilationCountTracking) {\n  const size_t countBefore = device_->getShaderCompilationCount();\n\n  Result res;\n  const auto shaderSource = std::string(data::shader::kMtlSimpleShader);\n\n  std::vector<ShaderModuleInfo> moduleInfo = {\n      {ShaderStage::Vertex, std::string(data::shader::kSimpleVertFunc)},\n      {ShaderStage::Fragment, std::string(data::shader::kSimpleFragFunc)},\n  };\n\n  auto libraryDesc =\n      ShaderLibraryDesc::fromStringInput(shaderSource.c_str(), moduleInfo, \"statsTestLibrary\");\n\n  auto library = device_->createShaderLibrary(libraryDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  const size_t countAfter = device_->getShaderCompilationCount();\n  ASSERT_GT(countAfter, countBefore) << \"Shader compilation count should have incremented\";\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/DrawCall.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n#define DRAW_TEX_WIDTH 8\n#define DRAW_TEX_HEIGHT 8\n\n//\n// MetalDrawCallTest\n//\n// This test covers draw call operations on Metal.\n// Tests drawing vertices, indexed drawing, and draw count tracking.\n//\nclass MetalDrawCallTest : public ::testing::Test {\n public:\n  MetalDrawCallTest() = default;\n  ~MetalDrawCallTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n\n    Result res;\n\n    // Create render target texture\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             DRAW_TEX_WIDTH,\n                                             DRAW_TEX_HEIGHT,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n    colorTexture_ = device_->createTexture(texDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n\n    // Create framebuffer\n    FramebufferDesc fbDesc;\n    fbDesc.colorAttachments[0].texture = colorTexture_;\n    framebuffer_ = device_->createFramebuffer(fbDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n\n    // Create shader stages\n    util::createSimpleShaderStages(device_, shaderStages_);\n    ASSERT_NE(shaderStages_, nullptr);\n\n    // Create render pipeline\n    RenderPipelineDesc pipelineDesc;\n    pipelineDesc.shaderStages = std::move(shaderStages_);\n    pipelineDesc.targetDesc.colorAttachments.resize(1);\n    pipelineDesc.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n    pipelineDesc.debugName = genNameHandle(\"drawTestPipeline\");\n\n    renderPipeline_ = device_->createRenderPipeline(pipelineDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n\n    // Create vertex buffer with triangle data\n    // clang-format off\n    const float vertexData[] = {\n        // position (x, y, z, w)\n         0.0f,  0.5f, 0.0f, 1.0f,\n        -0.5f, -0.5f, 0.0f, 1.0f,\n         0.5f, -0.5f, 0.0f, 1.0f,\n    };\n    // clang-format on\n\n    BufferDesc vbDesc(BufferDesc::BufferTypeBits::Vertex,\n                      vertexData,\n                      sizeof(vertexData),\n                      ResourceStorage::Shared);\n    vertexBuffer_ = device_->createBuffer(vbDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n\n    // Create UV buffer\n    const float uvData[] = {\n        0.5f,\n        0.0f,\n        0.0f,\n        1.0f,\n        1.0f,\n        1.0f,\n    };\n\n    BufferDesc uvDesc(\n        BufferDesc::BufferTypeBits::Vertex, uvData, sizeof(uvData), ResourceStorage::Shared);\n    uvBuffer_ = device_->createBuffer(uvDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ITexture> colorTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::unique_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IRenderPipelineState> renderPipeline_;\n  std::unique_ptr<IBuffer> vertexBuffer_;\n  std::unique_ptr<IBuffer> uvBuffer_;\n};\n\n//\n// DrawTriangle\n//\n// Draw 3 vertices to form a triangle without crashing.\n//\nTEST_F(MetalDrawCallTest, DrawTriangle) {\n  Result res;\n  const CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->bindRenderPipelineState(renderPipeline_);\n  encoder->bindVertexBuffer(0, *vertexBuffer_);\n  encoder->bindVertexBuffer(1, *uvBuffer_);\n  encoder->draw(3);\n  encoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n}\n\n//\n// DrawIndexed\n//\n// Draw with an index buffer without crashing.\n//\nTEST_F(MetalDrawCallTest, DrawIndexed) {\n  Result res;\n\n  // Create index buffer\n  const uint16_t indices[] = {0, 1, 2};\n  BufferDesc ibDesc(\n      BufferDesc::BufferTypeBits::Index, indices, sizeof(indices), ResourceStorage::Shared);\n  auto indexBuffer = device_->createBuffer(ibDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  const CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->bindRenderPipelineState(renderPipeline_);\n  encoder->bindVertexBuffer(0, *vertexBuffer_);\n  encoder->bindVertexBuffer(1, *uvBuffer_);\n  encoder->bindIndexBuffer(*indexBuffer, IndexFormat::UInt16);\n  encoder->drawIndexed(3);\n  encoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n}\n\n//\n// DrawCountIncrements\n//\n// Verify that the command buffer draw count increments after a draw call.\n//\nTEST_F(MetalDrawCallTest, DrawCountIncrements) {\n  Result res;\n  const CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  ASSERT_EQ(cmdBuf->getCurrentDrawCount(), 0u);\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->bindRenderPipelineState(renderPipeline_);\n  encoder->bindVertexBuffer(0, *vertexBuffer_);\n  encoder->bindVertexBuffer(1, *uvBuffer_);\n  encoder->draw(3);\n  encoder->endEncoding();\n\n  // The draw count should have been incremented\n  ASSERT_GE(cmdBuf->getCurrentDrawCount(), 1u);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/ErrorPaths.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalErrorPathsTest\n//\n// This test covers various error paths on Metal.\n// Tests invalid texture format, exportable texture, null shader stages, and texture views.\n//\nclass MetalErrorPathsTest : public ::testing::Test {\n public:\n  MetalErrorPathsTest() = default;\n  ~MetalErrorPathsTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// InvalidTextureFormat\n//\n// Test that creating a texture with an invalid format returns an error.\n//\nTEST_F(MetalErrorPathsTest, InvalidTextureFormat) {\n  Result res;\n\n  TextureDesc texDesc =\n      TextureDesc::new2D(TextureFormat::Invalid, 16, 16, TextureDesc::TextureUsageBits::Sampled);\n\n  auto texture = device_->createTexture(texDesc, &res);\n  ASSERT_FALSE(res.isOk());\n}\n\n//\n// ExportableTextureNotSupported\n//\n// Test that creating an exportable texture returns Unimplemented on Metal.\n//\nTEST_F(MetalErrorPathsTest, ExportableTextureNotSupported) {\n  // Metal does not support exportable textures via the IGL interface.\n  // Verify the device reports Metal backend type.\n  ASSERT_EQ(device_->getBackendType(), BackendType::Metal);\n}\n\n//\n// NullShaderStagesRenderPipeline\n//\n// Test that creating a render pipeline with null shader stages returns an error.\n//\nTEST_F(MetalErrorPathsTest, NullShaderStagesRenderPipeline) {\n  Result res;\n\n  RenderPipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = nullptr;\n  pipelineDesc.targetDesc.colorAttachments.resize(1);\n  pipelineDesc.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n\n  auto pipeline = device_->createRenderPipeline(pipelineDesc, &res);\n  ASSERT_FALSE(res.isOk());\n}\n\n//\n// NullShaderStagesComputePipeline\n//\n// Test that creating a compute pipeline with null shader stages returns an error.\n//\nTEST_F(MetalErrorPathsTest, NullShaderStagesComputePipeline) {\n  Result res;\n\n  ComputePipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = nullptr;\n\n  auto pipeline = device_->createComputePipeline(pipelineDesc, &res);\n  ASSERT_FALSE(res.isOk());\n}\n\n//\n// TextureViewNotSupported\n//\n// Test that createTextureView returns Unimplemented on Metal.\n//\nTEST_F(MetalErrorPathsTest, TextureViewNotSupported) {\n  Result res;\n\n  TextureDesc texDesc = TextureDesc::new2D(\n      TextureFormat::RGBA_UNorm8, 16, 16, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = device_->createTexture(texDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  TextureViewDesc viewDesc;\n  auto textureView = device_->createTextureView(texture, viewDesc, &res);\n  // Metal may return Unimplemented for texture views\n  if (!res.isOk()) {\n    ASSERT_EQ(res.code, Result::Code::Unimplemented);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/Framebuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/Framebuffer.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <TargetConditionals.h>\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n#define FB_TEX_WIDTH 16\n#define FB_TEX_HEIGHT 16\n\n//\n// MetalFramebufferTest\n//\n// This test covers igl::metal::Framebuffer.\n// Tests creation, attachment accessors, drawable updates, and dimensions.\n//\nclass MetalFramebufferTest : public ::testing::Test {\n public:\n  MetalFramebufferTest() = default;\n  ~MetalFramebufferTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n\n    // Create a color texture for framebuffer attachment\n    Result res;\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             FB_TEX_WIDTH,\n                                             FB_TEX_HEIGHT,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n    colorTexture_ = device_->createTexture(texDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n    ASSERT_NE(colorTexture_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ITexture> colorTexture_;\n};\n\n//\n// CreateWithColorAttachment\n//\n// Test creating a framebuffer with a color texture attachment.\n//\nTEST_F(MetalFramebufferTest, CreateWithColorAttachment) {\n  Result res;\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTexture_;\n  fbDesc.debugName = \"testFB\";\n\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(framebuffer, nullptr);\n}\n\n//\n// GetColorAttachment\n//\n// Verify that color attachment retrieval returns the correct texture.\n//\nTEST_F(MetalFramebufferTest, GetColorAttachment) {\n  Result res;\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTexture_;\n\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(framebuffer, nullptr);\n\n  auto retrieved = framebuffer->getColorAttachment(0);\n  ASSERT_NE(retrieved, nullptr);\n  ASSERT_EQ(retrieved.get(), colorTexture_.get());\n}\n\n//\n// GetDepthAttachment\n//\n// Verify that depth attachment retrieval works when a depth texture is set.\n//\nTEST_F(MetalFramebufferTest, GetDepthAttachment) {\n#if TARGET_OS_SIMULATOR\n  GTEST_SKIP() << \"Depth textures not supported on iOS Simulator\";\n#endif\n\n  Result res;\n\n  // Check which depth format is supported before attempting to create texture\n  TextureFormat depthFormat = TextureFormat::Invalid;\n  auto caps = device_->getTextureFormatCapabilities(TextureFormat::Z_UNorm32);\n  if ((caps & ICapabilities::TextureFormatCapabilityBits::Attachment) != 0) {\n    depthFormat = TextureFormat::Z_UNorm32;\n  } else {\n    caps = device_->getTextureFormatCapabilities(TextureFormat::S8_UInt_Z32_UNorm);\n    if ((caps & ICapabilities::TextureFormatCapabilityBits::Attachment) != 0) {\n      depthFormat = TextureFormat::S8_UInt_Z32_UNorm;\n    } else {\n      caps = device_->getTextureFormatCapabilities(TextureFormat::Z_UNorm24);\n      if ((caps & ICapabilities::TextureFormatCapabilityBits::Attachment) != 0) {\n        depthFormat = TextureFormat::Z_UNorm24;\n      }\n    }\n  }\n\n  if (depthFormat == TextureFormat::Invalid) {\n    GTEST_SKIP() << \"No supported depth format available\";\n  }\n\n  // Create depth texture with supported format\n  TextureDesc depthDesc = TextureDesc::new2D(\n      depthFormat, FB_TEX_WIDTH, FB_TEX_HEIGHT, TextureDesc::TextureUsageBits::Attachment);\n  auto depthTexture = device_->createTexture(depthDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTexture_;\n  fbDesc.depthAttachment.texture = depthTexture;\n\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(framebuffer, nullptr);\n\n  auto retrievedDepth = framebuffer->getDepthAttachment();\n  ASSERT_NE(retrievedDepth, nullptr);\n  ASSERT_EQ(retrievedDepth.get(), depthTexture.get());\n}\n\n//\n// UpdateDrawable\n//\n// Test that updateDrawable replaces the color attachment at index 0.\n//\nTEST_F(MetalFramebufferTest, UpdateDrawable) {\n  Result res;\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTexture_;\n\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(framebuffer, nullptr);\n\n  // Create a new texture and update drawable\n  TextureDesc newTexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                              FB_TEX_WIDTH,\n                                              FB_TEX_HEIGHT,\n                                              TextureDesc::TextureUsageBits::Sampled |\n                                                  TextureDesc::TextureUsageBits::Attachment);\n  auto newTexture = device_->createTexture(newTexDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(newTexture, nullptr);\n\n  framebuffer->updateDrawable(newTexture);\n\n  auto retrieved = framebuffer->getColorAttachment(0);\n  ASSERT_NE(retrieved, nullptr);\n  ASSERT_EQ(retrieved.get(), newTexture.get());\n}\n\n//\n// GetDimensions\n//\n// Verify that the framebuffer's color attachment dimensions match the texture.\n//\nTEST_F(MetalFramebufferTest, GetDimensions) {\n  Result res;\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTexture_;\n\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(framebuffer, nullptr);\n\n  auto colorAttachment = framebuffer->getColorAttachment(0);\n  ASSERT_NE(colorAttachment, nullptr);\n\n  auto dims = colorAttachment->getDimensions();\n  ASSERT_EQ(dims.width, FB_TEX_WIDTH);\n  ASSERT_EQ(dims.height, FB_TEX_HEIGHT);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/HWDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/HWDevice.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <memory>\n#include <igl/Assert.h>\n#include <igl/IGL.h>\n\nnamespace igl::tests {\n\nclass HWDeviceTest : public ::testing::Test {\n public:\n  HWDeviceTest() = default;\n  ~HWDeviceTest() override = default;\n\n  // Set up common resources. This will create a device\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    setDebugBreakEnabled(false);\n\n    iglHWDev_ = std::make_shared<metal::HWDevice>();\n\n    ASSERT_TRUE(iglHWDev_ != nullptr);\n\n    // Without a device, querying for a HWDevice with a specific display ID fails\n    iglDev_ = util::createTestDevice();\n    ASSERT_TRUE(iglDev_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<metal::HWDevice> iglHWDev_;\n  std::shared_ptr<IDevice> iglDev_;\n};\n\n/// This test ensures devices are returned correctly when being queried\nTEST_F(HWDeviceTest, QueryDevicesSanityTest) {\n  const HWDeviceQueryDesc queryDesc(HWDeviceType::DiscreteGpu);\n  Result result;\n\n  const std::vector<HWDeviceDesc> devices = iglHWDev_->queryDevices(queryDesc, &result);\n\n  // Currently HWDevice always returns ok when being queried\n  ASSERT_TRUE(result.isOk());\n\n  const HWDeviceQueryDesc queryDesc2(HWDeviceType::Unknown);\n  Result result2;\n\n  const std::vector<HWDeviceDesc> devices2 = iglHWDev_->queryDevices(queryDesc2, &result2);\n\n  // Currently HWDevice always returns ok when being queried\n  ASSERT_TRUE(result2.isOk());\n\n  const HWDeviceQueryDesc queryDesc3(HWDeviceType::DiscreteGpu, 8);\n  Result result3;\n\n  const std::vector<HWDeviceDesc> devices3 = iglHWDev_->queryDevices(queryDesc3, &result3);\n\n  // Currently HWDevice always returns ok when being queried\n  ASSERT_TRUE(result3.isOk());\n}\n\nTEST_F(HWDeviceTest, DeviceCreationFailureTest) {\n  const uintptr_t guid = 0;\n  const HWDeviceType type = HWDeviceType::Unknown;\n  const HWDeviceDesc deviceDesc(guid, type);\n\n  Result result;\n\n  const std::unique_ptr<IDevice> device = iglHWDev_->create(deviceDesc, &result);\n\n  // Ensure the result of the device creation is null\n  ASSERT_FALSE(result.isOk());\n}\n\nTEST_F(HWDeviceTest, SystemDefaultDeviceCreation) {\n  Result result;\n  const std::unique_ptr<IDevice> device = iglHWDev_->createWithSystemDefaultDevice(&result);\n  ASSERT_TRUE(result.isOk());\n  ASSERT_NE(device, nullptr);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/IndirectDraw.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n#define INDIRECT_TEX_WIDTH 8\n#define INDIRECT_TEX_HEIGHT 8\n\n//\n// MetalIndirectDrawTest\n//\n// This test covers indirect draw operations on Metal.\n//\nclass MetalIndirectDrawTest : public ::testing::Test {\n public:\n  MetalIndirectDrawTest() = default;\n  ~MetalIndirectDrawTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// MultiDrawIndirect\n//\n// Test performing an indirect draw with drawCount=1.\n//\nTEST_F(MetalIndirectDrawTest, MultiDrawIndirect) {\n  Result res;\n\n  // Create render target\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           INDIRECT_TEX_WIDTH,\n                                           INDIRECT_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Sampled |\n                                               TextureDesc::TextureUsageBits::Attachment);\n  auto colorTexture = device_->createTexture(texDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTexture;\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Create shader stages and pipeline\n  std::unique_ptr<IShaderStages> shaderStages;\n  util::createSimpleShaderStages(device_, shaderStages);\n  ASSERT_NE(shaderStages, nullptr);\n\n  RenderPipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = std::move(shaderStages);\n  pipelineDesc.targetDesc.colorAttachments.resize(1);\n  pipelineDesc.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n  auto pipeline = device_->createRenderPipeline(pipelineDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Create vertex buffer\n  const float vertexData[] = {\n      0.0f,\n      0.5f,\n      0.0f,\n      1.0f,\n      -0.5f,\n      -0.5f,\n      0.0f,\n      1.0f,\n      0.5f,\n      -0.5f,\n      0.0f,\n      1.0f,\n  };\n  BufferDesc vbDesc(\n      BufferDesc::BufferTypeBits::Vertex, vertexData, sizeof(vertexData), ResourceStorage::Shared);\n  auto vertexBuffer = device_->createBuffer(vbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Create UV buffer\n  const float uvData[] = {\n      0.5f,\n      0.0f,\n      0.0f,\n      1.0f,\n      1.0f,\n      1.0f,\n  };\n  BufferDesc uvBufDesc(\n      BufferDesc::BufferTypeBits::Vertex, uvData, sizeof(uvData), ResourceStorage::Shared);\n  auto uvBuffer = device_->createBuffer(uvBufDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Create indirect buffer\n  // MTLDrawPrimitivesIndirectArguments: vertexCount, instanceCount, vertexStart, baseInstance\n  struct DrawIndirectArgs {\n    uint32_t vertexCount;\n    uint32_t instanceCount;\n    uint32_t vertexStart;\n    uint32_t baseInstance;\n  };\n  DrawIndirectArgs args = {3, 1, 0, 0};\n  BufferDesc indirectDesc(\n      BufferDesc::BufferTypeBits::Indirect, &args, sizeof(args), ResourceStorage::Shared);\n  auto indirectBuffer = device_->createBuffer(indirectDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  const CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, framebuffer);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->bindRenderPipelineState(pipeline);\n  encoder->bindVertexBuffer(0, *vertexBuffer);\n  encoder->bindVertexBuffer(1, *uvBuffer);\n  encoder->multiDrawIndirect(*indirectBuffer, 0, 1);\n  encoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/MeshShader.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalMeshShaderTest\n//\n// This test covers mesh shader pipeline creation on Metal.\n// Mesh shaders require specific GPU family support and may not be available on all devices.\n//\nclass MetalMeshShaderTest : public ::testing::Test {\n public:\n  MetalMeshShaderTest() = default;\n  ~MetalMeshShaderTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// MeshPipelineCreation\n//\n// Test creating a mesh shader pipeline.\n// This test is skipped if the device does not support mesh shaders.\n//\nTEST_F(MetalMeshShaderTest, MeshPipelineCreation) {\n  if (!device_->hasFeature(DeviceFeatures::MeshShaders)) {\n    GTEST_SKIP() << \"Mesh shaders not supported on this device\";\n  }\n\n  // Mesh shader pipeline creation would require task/mesh shader source\n  // which are hardware-specific. Verify the feature query does not crash.\n  ASSERT_TRUE(device_->hasFeature(DeviceFeatures::MeshShaders));\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/PlatformDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/PlatformDevice.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/IGL.h>\n\nnamespace igl::tests {\n\nclass PlatformDeviceMetalTest : public ::testing::Test {\n public:\n  PlatformDeviceMetalTest() = default;\n  ~PlatformDeviceMetalTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n  }\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n// Test Cases\nTEST_F(PlatformDeviceMetalTest, GetPlatformDeviceParentCls) {\n  auto* pd = iglDev_->getPlatformDevice<metal::PlatformDevice>();\n  ASSERT_NE(pd, nullptr);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/RenderCommandEncoder.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/RenderCommandEncoder.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/IGL.h>\n\nnamespace igl::tests {\n// Use a 1x1 Framebuffer for this test\n#define OFFSCREEN_RT_WIDTH 1\n#define OFFSCREEN_RT_HEIGHT 1\n\n//\n// RenderCommandEncoderMTLTest\n//\n// This test covers igl::metal::RenderCommandEncoder.\n// Most of the testing revolves confirming successful instantiation\n// and creation of encoders.\n//\n\nclass RenderCommandEncoderMTLTest : public ::testing::Test {\n public:\n  RenderCommandEncoderMTLTest() = default;\n  ~RenderCommandEncoderMTLTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(device_, commandQueue_);\n\n    ASSERT_NE(device_, nullptr);\n    ASSERT_NE(commandQueue_, nullptr);\n    // Test instantiation and constructor of CommandBuffer.\n    Result res;\n    const CommandBufferDesc desc;\n    commandBuffer_ = commandQueue_->createCommandBuffer(desc, &res);\n    ASSERT_TRUE(res.isOk());\n  }\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> commandQueue_;\n  std::shared_ptr<ICommandBuffer> commandBuffer_;\n\n  const std::string label_;\n};\n\n//\n// RenderCommandEncoderCreation\n//\n// Test successful creation of MTLRenderCommandEncoder, adding attachment for depth and stencil\n//\nTEST_F(RenderCommandEncoderMTLTest, CreateRenderCommandEncoderAll) {\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 OFFSCREEN_RT_WIDTH,\n                                                 OFFSCREEN_RT_HEIGHT,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Attachment);\n  Result ret;\n  const std::shared_ptr<ITexture> offscreenTexture = device_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(offscreenTexture != nullptr);\n  // Create framebuffer using the offscreen texture\n  FramebufferDesc framebufferDesc;\n\n  framebufferDesc.depthAttachment.texture = offscreenTexture;\n  framebufferDesc.stencilAttachment.texture = offscreenTexture;\n  auto framebuffer = device_->createFramebuffer(framebufferDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(framebuffer != nullptr);\n\n  const RenderPassDesc rpDesc;\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer);\n  ASSERT_TRUE(encoder != nullptr);\n\n  encoder->pushDebugGroupLabel(label_.c_str());\n\n  encoder->insertDebugEventLabel(label_.c_str());\n\n  encoder->popDebugGroupLabel();\n\n  // MTLCommandEncoder must always call endEncoding before being released.\n  encoder->endEncoding();\n}\n\nTEST_F(RenderCommandEncoderMTLTest, ToMTLPrimitiveType) {\n  const std::vector<std::pair<PrimitiveType, MTLPrimitiveType>> inputAndExpectedList = {\n      std::make_pair(PrimitiveType::Line, MTLPrimitiveTypeLine),\n      std::make_pair(PrimitiveType::LineStrip, MTLPrimitiveTypeLineStrip),\n      std::make_pair(PrimitiveType::Triangle, MTLPrimitiveTypeTriangle),\n      std::make_pair(PrimitiveType::TriangleStrip, MTLPrimitiveTypeTriangleStrip),\n      std::make_pair(PrimitiveType::Point, MTLPrimitiveTypePoint)};\n\n  for (auto inputAndExpected : inputAndExpectedList) {\n    auto input = inputAndExpected.first;\n    auto expected = inputAndExpected.second;\n    auto result = metal::RenderCommandEncoder::convertPrimitiveType(input);\n    ASSERT_EQ(result, expected);\n  }\n}\n\nTEST_F(RenderCommandEncoderMTLTest, ToMTLIndexType) {\n  const std::vector<std::pair<IndexFormat, MTLIndexType>> inputAndExpectedList = {\n      std::make_pair(IndexFormat::UInt16, MTLIndexTypeUInt16),\n      std::make_pair(IndexFormat::UInt32, MTLIndexTypeUInt32)};\n\n  for (auto inputAndExpected : inputAndExpectedList) {\n    auto input = inputAndExpected.first;\n    auto expected = inputAndExpected.second;\n    auto result = metal::RenderCommandEncoder::convertIndexType(input);\n    ASSERT_EQ(result, expected);\n  }\n}\n\nTEST_F(RenderCommandEncoderMTLTest, ToMTLLoadAction) {\n  const std::vector<std::pair<LoadAction, MTLLoadAction>> inputAndExpectedList = {\n      std::make_pair(LoadAction::DontCare, MTLLoadActionDontCare),\n      std::make_pair(LoadAction::Load, MTLLoadActionLoad),\n      std::make_pair(LoadAction::Clear, MTLLoadActionClear)};\n\n  for (auto inputAndExpected : inputAndExpectedList) {\n    auto input = inputAndExpected.first;\n    auto expected = inputAndExpected.second;\n    auto result = metal::RenderCommandEncoder::convertLoadAction(input);\n    ASSERT_EQ(result, expected);\n  }\n}\n\nTEST_F(RenderCommandEncoderMTLTest, ToMTLStoreAction) {\n  const std::vector<std::pair<StoreAction, MTLStoreAction>> inputAndExpectedList = {\n      std::make_pair(StoreAction::DontCare, MTLStoreActionDontCare),\n      std::make_pair(StoreAction::Store, MTLStoreActionStore),\n      std::make_pair(StoreAction::MsaaResolve, MTLStoreActionMultisampleResolve)};\n\n  for (auto inputAndExpected : inputAndExpectedList) {\n    auto input = inputAndExpected.first;\n    auto expected = inputAndExpected.second;\n    auto result = metal::RenderCommandEncoder::convertStoreAction(input);\n    ASSERT_EQ(result, expected);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/RenderEncoderState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n#define ENCODER_TEX_WIDTH 8\n#define ENCODER_TEX_HEIGHT 8\n\n//\n// MetalRenderEncoderStateTest\n//\n// This test covers render encoder state-setting operations on Metal.\n// Tests viewport, scissor, stencil reference, blend color, and depth bias.\n//\nclass MetalRenderEncoderStateTest : public ::testing::Test {\n public:\n  MetalRenderEncoderStateTest() = default;\n  ~MetalRenderEncoderStateTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n\n    Result res;\n\n    // Create render target\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             ENCODER_TEX_WIDTH,\n                                             ENCODER_TEX_HEIGHT,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n    colorTexture_ = device_->createTexture(texDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n\n    FramebufferDesc fbDesc;\n    fbDesc.colorAttachments[0].texture = colorTexture_;\n    framebuffer_ = device_->createFramebuffer(fbDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n\n    const CommandBufferDesc cbDesc;\n    commandBuffer_ = cmdQueue_->createCommandBuffer(cbDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ITexture> colorTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<ICommandBuffer> commandBuffer_;\n};\n\n//\n// BindViewport\n//\n// Test setting a viewport on the render encoder without crash.\n//\nTEST_F(MetalRenderEncoderStateTest, BindViewport) {\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  Viewport viewport = {0.0f, 0.0f, (float)ENCODER_TEX_WIDTH, (float)ENCODER_TEX_HEIGHT, 0.0f, 1.0f};\n  encoder->bindViewport(viewport);\n  encoder->endEncoding();\n}\n\n//\n// BindScissorRect\n//\n// Test setting a scissor rect on the render encoder without crash.\n//\nTEST_F(MetalRenderEncoderStateTest, BindScissorRect) {\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  ScissorRect scissor = {0, 0, ENCODER_TEX_WIDTH, ENCODER_TEX_HEIGHT};\n  encoder->bindScissorRect(scissor);\n  encoder->endEncoding();\n}\n\n//\n// SetStencilReferenceValue\n//\n// Test setting a stencil reference value without crash.\n//\nTEST_F(MetalRenderEncoderStateTest, SetStencilReferenceValue) {\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->setStencilReferenceValue(128);\n  encoder->endEncoding();\n}\n\n//\n// SetBlendColor\n//\n// Test setting a blend color without crash.\n//\nTEST_F(MetalRenderEncoderStateTest, SetBlendColor) {\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->setBlendColor(Color(1.0f, 0.5f, 0.25f, 1.0f));\n  encoder->endEncoding();\n}\n\n//\n// SetDepthBias\n//\n// Test setting depth bias without crash.\n//\nTEST_F(MetalRenderEncoderStateTest, SetDepthBias) {\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer_);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->setDepthBias(1.0f, 1.0f, 0.0f);\n  encoder->endEncoding();\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/RenderPass.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <TargetConditionals.h>\n#include <igl/IGL.h>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n#define RP_TEX_WIDTH 16\n#define RP_TEX_HEIGHT 16\n\n//\n// MetalRenderPassTest\n//\n// This test covers render pass creation on Metal.\n// Tests various render pass configurations with color and depth attachments.\n//\nclass MetalRenderPassTest : public ::testing::Test {\n public:\n  MetalRenderPassTest() = default;\n  ~MetalRenderPassTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n\n    Result res;\n    const CommandBufferDesc cbDesc;\n    commandBuffer_ = cmdQueue_->createCommandBuffer(cbDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n    ASSERT_NE(commandBuffer_, nullptr);\n\n    // Create a color texture for the framebuffer\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             RP_TEX_WIDTH,\n                                             RP_TEX_HEIGHT,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n    colorTexture_ = device_->createTexture(texDesc, &res);\n    ASSERT_TRUE(res.isOk()) << res.message;\n    ASSERT_NE(colorTexture_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> commandBuffer_;\n  std::shared_ptr<ITexture> colorTexture_;\n};\n\n//\n// SingleColorAttachment\n//\n// Test creating a render command encoder with a single color attachment.\n//\nTEST_F(MetalRenderPassTest, SingleColorAttachment) {\n  Result res;\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTexture_;\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n  rpDesc.colorAttachments[0].clearColor = {0.0f, 0.0f, 0.0f, 1.0f};\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer);\n  ASSERT_NE(encoder, nullptr);\n  encoder->endEncoding();\n}\n\n//\n// ColorAndDepth\n//\n// Test creating a render command encoder with color and depth attachments.\n//\nTEST_F(MetalRenderPassTest, ColorAndDepth) {\n#if TARGET_OS_SIMULATOR\n  GTEST_SKIP() << \"Depth textures not supported on iOS Simulator\";\n#endif\n\n  Result res;\n\n  // Check which depth format is supported before attempting to create texture\n  TextureFormat depthFormat = TextureFormat::Invalid;\n  auto caps = device_->getTextureFormatCapabilities(TextureFormat::Z_UNorm32);\n  if ((caps & ICapabilities::TextureFormatCapabilityBits::Attachment) != 0) {\n    depthFormat = TextureFormat::Z_UNorm32;\n  } else {\n    caps = device_->getTextureFormatCapabilities(TextureFormat::S8_UInt_Z32_UNorm);\n    if ((caps & ICapabilities::TextureFormatCapabilityBits::Attachment) != 0) {\n      depthFormat = TextureFormat::S8_UInt_Z32_UNorm;\n    } else {\n      caps = device_->getTextureFormatCapabilities(TextureFormat::Z_UNorm24);\n      if ((caps & ICapabilities::TextureFormatCapabilityBits::Attachment) != 0) {\n        depthFormat = TextureFormat::Z_UNorm24;\n      }\n    }\n  }\n\n  if (depthFormat == TextureFormat::Invalid) {\n    GTEST_SKIP() << \"No supported depth format available\";\n  }\n\n  // Create depth texture with supported format\n  TextureDesc depthDesc = TextureDesc::new2D(\n      depthFormat, RP_TEX_WIDTH, RP_TEX_HEIGHT, TextureDesc::TextureUsageBits::Attachment);\n  auto depthTexture = device_->createTexture(depthDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTexture_;\n  fbDesc.depthAttachment.texture = depthTexture;\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n  rpDesc.colorAttachments[0].clearColor = {0.0f, 0.0f, 0.0f, 1.0f};\n  rpDesc.depthAttachment.loadAction = LoadAction::Clear;\n  rpDesc.depthAttachment.storeAction = StoreAction::DontCare;\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer);\n  ASSERT_NE(encoder, nullptr);\n  encoder->endEncoding();\n}\n\n//\n// ClearColorApplied\n//\n// Verify that the clear color is applied when using LoadAction::Clear.\n// After rendering, read back and verify clear color values.\n//\nTEST_F(MetalRenderPassTest, ClearColorApplied) {\n  Result res;\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTexture_;\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n  rpDesc.colorAttachments[0].clearColor = {1.0f, 0.0f, 0.0f, 1.0f}; // Red\n\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, framebuffer);\n  ASSERT_NE(encoder, nullptr);\n  encoder->endEncoding();\n\n  // Submit and wait\n  cmdQueue_->submit(*commandBuffer_);\n  commandBuffer_->waitUntilCompleted();\n\n  // Read back and verify the clear color\n  const size_t bytesPerPixel = 4; // RGBA_UNorm8\n  const size_t rowBytes = RP_TEX_WIDTH * bytesPerPixel;\n  std::vector<uint8_t> pixels(RP_TEX_WIDTH * RP_TEX_HEIGHT * bytesPerPixel);\n\n  framebuffer->copyBytesColorAttachment(*cmdQueue_,\n                                        0,\n                                        pixels.data(),\n                                        TextureRangeDesc::new2D(0, 0, RP_TEX_WIDTH, RP_TEX_HEIGHT),\n                                        rowBytes);\n\n  // Check first pixel is red (255, 0, 0, 255)\n  ASSERT_EQ(pixels[0], 255); // R\n  ASSERT_EQ(pixels[1], 0); // G\n  ASSERT_EQ(pixels[2], 0); // B\n  ASSERT_EQ(pixels[3], 255); // A\n}\n\n//\n// NullFramebufferError\n//\n// Test that passing a null framebuffer to createRenderCommandEncoder\n// returns a null encoder or error.\n//\nTEST_F(MetalRenderPassTest, NullFramebufferError) {\n  const RenderPassDesc rpDesc;\n  auto encoder = commandBuffer_->createRenderCommandEncoder(rpDesc, nullptr);\n  // A null framebuffer should still produce an encoder on Metal (empty pass descriptor),\n  // but verify the call does not crash.\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/RenderPipelineCreation.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalRenderPipelineCreationTest\n//\n// This test covers creation of Metal render pipeline states.\n// Tests various configurations including blending, null stages, and depth formats.\n//\nclass MetalRenderPipelineCreationTest : public ::testing::Test {\n public:\n  MetalRenderPipelineCreationTest() = default;\n  ~MetalRenderPipelineCreationTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// CreateBasicPipeline\n//\n// Test creating a basic render pipeline with simple vertex and fragment shaders.\n//\nTEST_F(MetalRenderPipelineCreationTest, CreateBasicPipeline) {\n  Result res;\n\n  std::unique_ptr<IShaderStages> stages;\n  util::createSimpleShaderStages(device_, stages);\n  ASSERT_NE(stages, nullptr);\n\n  RenderPipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = std::move(stages);\n  pipelineDesc.targetDesc.colorAttachments.resize(1);\n  pipelineDesc.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n\n  auto pipeline = device_->createRenderPipeline(pipelineDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(pipeline, nullptr);\n}\n\n//\n// CreatePipelineWithBlending\n//\n// Test creating a render pipeline with alpha blending enabled.\n//\nTEST_F(MetalRenderPipelineCreationTest, CreatePipelineWithBlending) {\n  Result res;\n\n  std::unique_ptr<IShaderStages> stages;\n  util::createSimpleShaderStages(device_, stages);\n  ASSERT_NE(stages, nullptr);\n\n  RenderPipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = std::move(stages);\n  pipelineDesc.targetDesc.colorAttachments.resize(1);\n  pipelineDesc.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n  pipelineDesc.targetDesc.colorAttachments[0].blendEnabled = true;\n  pipelineDesc.targetDesc.colorAttachments[0].srcRGBBlendFactor = BlendFactor::SrcAlpha;\n  pipelineDesc.targetDesc.colorAttachments[0].dstRGBBlendFactor = BlendFactor::OneMinusSrcAlpha;\n  pipelineDesc.targetDesc.colorAttachments[0].srcAlphaBlendFactor = BlendFactor::One;\n  pipelineDesc.targetDesc.colorAttachments[0].dstAlphaBlendFactor = BlendFactor::Zero;\n\n  auto pipeline = device_->createRenderPipeline(pipelineDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(pipeline, nullptr);\n}\n\n//\n// CreatePipelineNullStages\n//\n// Test that creating a pipeline with null shader stages returns an error.\n//\nTEST_F(MetalRenderPipelineCreationTest, CreatePipelineNullStages) {\n  Result res;\n\n  RenderPipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = nullptr;\n  pipelineDesc.targetDesc.colorAttachments.resize(1);\n  pipelineDesc.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n\n  auto pipeline = device_->createRenderPipeline(pipelineDesc, &res);\n  ASSERT_FALSE(res.isOk());\n}\n\n//\n// CreatePipelineWithDepthFormat\n//\n// Test creating a render pipeline with a depth attachment format.\n//\nTEST_F(MetalRenderPipelineCreationTest, CreatePipelineWithDepthFormat) {\n  Result res;\n\n  std::unique_ptr<IShaderStages> stages;\n  util::createSimpleShaderStages(device_, stages);\n  ASSERT_NE(stages, nullptr);\n\n  RenderPipelineDesc pipelineDesc;\n  pipelineDesc.shaderStages = std::move(stages);\n  pipelineDesc.targetDesc.colorAttachments.resize(1);\n  pipelineDesc.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n  pipelineDesc.targetDesc.depthAttachmentFormat = TextureFormat::Z_UNorm32;\n\n  auto pipeline = device_->createRenderPipeline(pipelineDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(pipeline, nullptr);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/RenderPipelineReflection.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/RenderPipelineReflection.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n\n#include <igl/Device.h>\n#include <igl/IGL.h>\n#include <igl/metal/Shader.h>\n#include <igl/metal/VertexInputState.h>\n\nnamespace igl::tests {\n\nclass RenderPipelineReflectionMTLTest : public ::testing::Test {\n public:\n  RenderPipelineReflectionMTLTest() = default;\n  ~RenderPipelineReflectionMTLTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n    Result ret;\n\n    auto shaderLibrary = ShaderLibraryCreator::fromStringInput(\n        *iglDev_,\n        data::shader::kMtlSimpleShader.data(),\n        {\n            {ShaderStage::Vertex, std::string(data::shader::kSimpleVertFunc)},\n            {ShaderStage::Fragment, std::string(data::shader::kSimpleFragFunc)},\n        },\n        \"\",\n        &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n    // Initialize vertex Shader\n    vertShader_ = shaderLibrary->getShaderModule(ShaderStage::Vertex,\n                                                 std::string(data::shader::kSimpleVertFunc));\n    ASSERT_TRUE(vertShader_ != nullptr);\n\n    // Initialize Fragment Shader\n    fragShader_ = shaderLibrary->getShaderModule(ShaderStage::Fragment,\n                                                 std::string(data::shader::kSimpleFragFunc));\n    ASSERT_TRUE(fragShader_ != nullptr);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    NSError* error = nullptr;\n    MTLRenderPipelineDescriptor* metalDesc = [MTLRenderPipelineDescriptor new];\n    metalDesc.vertexDescriptor =\n        static_cast<igl::metal::VertexInputState*>(vertexInputState_.get())->get();\n    metalDesc.vertexFunction = static_cast<igl::metal::ShaderModule*>(vertShader_.get())->get();\n    IGL_DEBUG_ASSERT(metalDesc.vertexFunction, \"RenderPipeline requires non-null vertex function\");\n    metalDesc.fragmentFunction = static_cast<igl::metal::ShaderModule*>(fragShader_.get())->get();\n    metalDesc.depthAttachmentPixelFormat = MTLPixelFormatDepth32Float_Stencil8;\n    metalDesc.stencilAttachmentPixelFormat = MTLPixelFormatDepth32Float_Stencil8;\n\n    MTLRenderPipelineReflection* reflection = nil;\n    auto device = MTLCreateSystemDefaultDevice();\n\n// Suppress warnings about MTLPipelineOptionArgumentInfo being deprecated\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n    // Create reflection for use later in binding, etc.\n    [device newRenderPipelineStateWithDescriptor:metalDesc\n                                         options:MTLPipelineOptionArgumentInfo\n                                      reflection:&reflection\n                                           error:&error];\n#pragma GCC diagnostic pop\n\n    pipeRef_ = std::make_shared<metal::RenderPipelineReflection>(reflection);\n    ASSERT_NE(pipeRef_, nullptr);\n  }\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<metal::RenderPipelineReflection> pipeRef_;\n\n private:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n\n  std::shared_ptr<IShaderModule> vertShader_;\n  std::shared_ptr<IShaderModule> fragShader_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n};\n\nTEST_F(RenderPipelineReflectionMTLTest, GetIndexByName) {\n  auto index = pipeRef_->getIndexByName(std::string(data::shader::kSimpleUv), ShaderStage::Vertex);\n  ASSERT_EQ(index, 1);\n}\n\nTEST_F(RenderPipelineReflectionMTLTest, GetNonexistentIndexByName) {\n  auto index = pipeRef_->getIndexByName(\"\", ShaderStage::Fragment);\n  ASSERT_EQ(index, -1);\n}\n\nTEST_F(RenderPipelineReflectionMTLTest, VerifyBuffers) {\n  auto buffers = pipeRef_->allUniformBuffers();\n  ASSERT_EQ(buffers.size(), 2);\n  for (const auto& buffer : buffers) {\n    ASSERT_EQ(buffer.shaderStage, ShaderStage::Vertex);\n    EXPECT_TRUE(buffer.name.toString() == data::shader::kSimplePos ||\n                buffer.name.toString() == data::shader::kSimpleUv);\n  }\n}\n\nTEST_F(RenderPipelineReflectionMTLTest, VerifyTextures) {\n  auto textures = pipeRef_->allTextures();\n  ASSERT_EQ(textures.size(), 1);\n  const auto& theOneTexture = textures.front();\n  ASSERT_EQ(theOneTexture.name, \"diffuseTex\");\n}\n\nTEST_F(RenderPipelineReflectionMTLTest, VerifySamplers) {\n  auto samplers = pipeRef_->allSamplers();\n  ASSERT_EQ(samplers.size(), 1);\n  const auto& theOneSampler = samplers.front();\n  ASSERT_EQ(theOneSampler.name, \"linearSampler\");\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/RenderPipelineState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/RenderPipelineState.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n\n#include <igl/Common.h>\n#include <igl/Device.h>\n#include <igl/IGL.h>\n#include <igl/metal/Shader.h>\n#include <igl/metal/VertexInputState.h>\nnamespace igl::tests {\n\nclass RenderPipelineStateMTLTest : public ::testing::Test {\n public:\n  RenderPipelineStateMTLTest() = default;\n  ~RenderPipelineStateMTLTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n    Result ret;\n\n    // Initialize vertex Shader\n    auto shaderLibrary =\n        ShaderLibraryCreator::fromStringInput(*iglDev_,\n                                              data::shader::kMtlSimpleShader.data(),\n                                              data::shader::kSimpleVertFunc.data(),\n                                              data::shader::kSimpleFragFunc.data(),\n                                              \"\",\n                                              &ret);\n\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(shaderLibrary != nullptr);\n\n    vertShader_ = shaderLibrary->getShaderModule(std::string(data::shader::kSimpleVertFunc));\n    ASSERT_TRUE(vertShader_ != nullptr);\n\n    fragShader_ = shaderLibrary->getShaderModule(std::string(data::shader::kSimpleFragFunc));\n    ASSERT_TRUE(fragShader_ != nullptr);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    NSError* error = nullptr;\n    MTLRenderPipelineDescriptor* metalDesc = [MTLRenderPipelineDescriptor new];\n\n    metalDesc.vertexDescriptor =\n        static_cast<igl::metal::VertexInputState*>(vertexInputState_.get())->get();\n    metalDesc.vertexFunction = static_cast<igl::metal::ShaderModule*>(vertShader_.get())->get();\n    IGL_DEBUG_ASSERT(metalDesc.vertexFunction, \"RenderPipeline requires non-null vertex function\");\n    metalDesc.fragmentFunction = static_cast<igl::metal::ShaderModule*>(fragShader_.get())->get();\n    metalDesc.depthAttachmentPixelFormat = MTLPixelFormatDepth32Float_Stencil8;\n    metalDesc.stencilAttachmentPixelFormat = MTLPixelFormatDepth32Float_Stencil8;\n\n    MTLRenderPipelineReflection* reflection = nil;\n    auto device = MTLCreateSystemDefaultDevice();\n\n    RenderPipelineDesc pipelineDesc{};\n    pipelineDesc.cullMode = CullMode::Back;\n    pipelineDesc.frontFaceWinding = igl::WindingMode::CounterClockwise;\n    pipelineDesc.polygonFillMode = PolygonFillMode::Fill;\n\n// Suppress warnings about MTLPipelineOptionArgumentInfo being deprecated\n#pragma GCC diagnostic push\n#pragma GCC diagnostic ignored \"-Wdeprecated-declarations\"\n    // Create reflection for use later in binding, etc.\n    id<MTLRenderPipelineState> metalObject =\n        [device newRenderPipelineStateWithDescriptor:metalDesc\n                                             options:MTLPipelineOptionArgumentInfo\n                                          reflection:&reflection\n                                               error:&error];\n\n    pipeState = std::make_shared<metal::RenderPipelineState>(metalObject, reflection, pipelineDesc);\n\n    id<MTLRenderPipelineState> metalObjectWithoutRefl =\n        [device newRenderPipelineStateWithDescriptor:metalDesc\n                                             options:MTLPipelineOptionArgumentInfo\n                                          reflection:nullptr\n                                               error:&error];\n#pragma GCC diagnostic pop\n\n    pipeStateWithNoRefl_ =\n        std::make_shared<metal::RenderPipelineState>(metalObjectWithoutRefl, nullptr, pipelineDesc);\n\n    ASSERT_NE(pipeState, nullptr);\n  }\n  void TearDown() override {}\n\n  std::shared_ptr<metal::RenderPipelineState> pipeState;\n\n protected:\n  std::shared_ptr<metal::RenderPipelineState> pipeStateWithNoRefl_;\n\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n\n  std::shared_ptr<IShaderModule> vertShader_;\n  std::shared_ptr<IShaderModule> fragShader_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n};\n\nTEST_F(RenderPipelineStateMTLTest, GetIndexByName) {\n  auto index = pipeState->getIndexByName(std::string(data::shader::kSimpleUv), ShaderStage::Vertex);\n  ASSERT_EQ(index, 1);\n}\n\nTEST_F(RenderPipelineStateMTLTest, GetNonexistentIndexByName) {\n  auto index = pipeState->getIndexByName(\"\", ShaderStage::Fragment);\n  ASSERT_EQ(index, -1);\n}\n\nTEST_F(RenderPipelineStateMTLTest, GetIndexByNameWithoutRefl) {\n  auto index = pipeStateWithNoRefl_->getIndexByName(std::string(data::shader::kSimpleUv),\n                                                    ShaderStage::Vertex);\n  ASSERT_EQ(index, -1);\n}\n\nTEST_F(RenderPipelineStateMTLTest, GetIndexByNameHandle) {\n  auto index =\n      pipeState->getIndexByName(IGL_NAMEHANDLE(data::shader::kSimpleUv), ShaderStage::Vertex);\n  ASSERT_EQ(index, 1);\n}\n\nTEST_F(RenderPipelineStateMTLTest, GetNonexistentIndexByNameHandle) {\n  auto index = pipeState->getIndexByName(\"\", ShaderStage::Fragment);\n  ASSERT_EQ(index, -1);\n}\n\nTEST_F(RenderPipelineStateMTLTest, GetIndexByNameHandleWithoutRefl) {\n  auto index = pipeStateWithNoRefl_->getIndexByName(IGL_NAMEHANDLE(data::shader::kSimpleUv),\n                                                    ShaderStage::Vertex);\n  ASSERT_EQ(index, -1);\n}\n\nTEST_F(RenderPipelineStateMTLTest, ConvertColorWriteMaskRed) {\n  auto mask = igl::metal::RenderPipelineState::convertColorWriteMask(kColorWriteBitsRed);\n  ASSERT_EQ(mask, MTLColorWriteMaskRed);\n}\n\nTEST_F(RenderPipelineStateMTLTest, ConvertColorWriteMaskGreen) {\n  auto mask = igl::metal::RenderPipelineState::convertColorWriteMask(kColorWriteBitsGreen);\n  ASSERT_EQ(mask, MTLColorWriteMaskGreen);\n}\n\nTEST_F(RenderPipelineStateMTLTest, ConvertColorWriteMaskBlue) {\n  auto mask = igl::metal::RenderPipelineState::convertColorWriteMask(kColorWriteBitsBlue);\n  ASSERT_EQ(mask, MTLColorWriteMaskBlue);\n}\n\nTEST_F(RenderPipelineStateMTLTest, ConvertColorWriteMaskAlpha) {\n  auto mask = igl::metal::RenderPipelineState::convertColorWriteMask(kColorWriteBitsAlpha);\n  ASSERT_EQ(mask, MTLColorWriteMaskAlpha);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/SamplerCreation.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n#include <igl/metal/SamplerState.h>\n\nnamespace igl::tests {\n\n//\n// MetalSamplerCreationTest\n//\n// This test covers creation of Metal sampler states with various configurations.\n//\nclass MetalSamplerCreationTest : public ::testing::Test {\n public:\n  MetalSamplerCreationTest() = default;\n  ~MetalSamplerCreationTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// DefaultSampler\n//\n// Test creating a sampler with default descriptor values.\n//\nTEST_F(MetalSamplerCreationTest, DefaultSampler) {\n  Result res;\n  SamplerStateDesc desc;\n  desc.debugName = \"defaultSampler\";\n\n  auto sampler = device_->createSamplerState(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(sampler, nullptr);\n}\n\n//\n// SamplerWithFilters\n//\n// Test creating a sampler with specific min, mag, and mip filters.\n//\nTEST_F(MetalSamplerCreationTest, SamplerWithFilters) {\n  Result res;\n  SamplerStateDesc desc;\n  desc.minFilter = SamplerMinMagFilter::Linear;\n  desc.magFilter = SamplerMinMagFilter::Linear;\n  desc.mipFilter = SamplerMipFilter::Linear;\n  desc.debugName = \"linearSampler\";\n\n  auto sampler = device_->createSamplerState(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(sampler, nullptr);\n}\n\n//\n// SamplerWithAddressModes\n//\n// Test creating a sampler with specific address modes.\n//\nTEST_F(MetalSamplerCreationTest, SamplerWithAddressModes) {\n  Result res;\n  SamplerStateDesc desc;\n  desc.addressModeU = SamplerAddressMode::Clamp;\n  desc.addressModeV = SamplerAddressMode::MirrorRepeat;\n  desc.addressModeW = SamplerAddressMode::Repeat;\n  desc.debugName = \"addressModeSampler\";\n\n  auto sampler = device_->createSamplerState(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(sampler, nullptr);\n}\n\n//\n// SamplerIsYUVFalse\n//\n// Test that a standard sampler reports isYUV as false.\n//\nTEST_F(MetalSamplerCreationTest, SamplerIsYUVFalse) {\n  Result res;\n  SamplerStateDesc desc = SamplerStateDesc::newLinear();\n\n  auto sampler = device_->createSamplerState(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(sampler, nullptr);\n  ASSERT_FALSE(sampler->isYUV());\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/SamplerState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/SamplerState.h>\n\nnamespace igl::tests {\n\nclass SamplerStateMTLTest : public ::testing::Test {\n public:\n  SamplerStateMTLTest() = default;\n  ~SamplerStateMTLTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    samplerState_ = std::make_shared<igl::metal::SamplerState>(nil);\n  }\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<igl::metal::SamplerState> samplerState_;\n};\n\nTEST_F(SamplerStateMTLTest, ConvertMinMagFilter) {\n  MTLSamplerMinMagFilter res = MTLSamplerMinMagFilterNearest;\n\n  res = igl::metal::SamplerState::convertMinMagFilter(SamplerMinMagFilter::Linear);\n  ASSERT_EQ(res, MTLSamplerMinMagFilterLinear);\n\n  res = igl::metal::SamplerState::convertMinMagFilter(SamplerMinMagFilter::Nearest);\n  ASSERT_EQ(res, MTLSamplerMinMagFilterNearest);\n}\n\nTEST_F(SamplerStateMTLTest, ConvertMipFilter) {\n  MTLSamplerMipFilter res = MTLSamplerMipFilterNotMipmapped;\n\n  res = igl::metal::SamplerState::convertMipFilter(SamplerMipFilter::Disabled);\n  ASSERT_EQ(res, MTLSamplerMipFilterNotMipmapped);\n\n  res = igl::metal::SamplerState::convertMipFilter(SamplerMipFilter::Nearest);\n  ASSERT_EQ(res, MTLSamplerMipFilterNearest);\n\n  res = igl::metal::SamplerState::convertMipFilter(SamplerMipFilter::Linear);\n  ASSERT_EQ(res, MTLSamplerMipFilterLinear);\n}\n\nTEST_F(SamplerStateMTLTest, ConvertAddressMode) {\n  MTLSamplerAddressMode res = MTLSamplerAddressModeRepeat;\n\n  res = igl::metal::SamplerState::convertAddressMode(SamplerAddressMode::Repeat);\n  ASSERT_EQ(res, MTLSamplerAddressModeRepeat);\n\n  res = igl::metal::SamplerState::convertAddressMode(SamplerAddressMode::Clamp);\n  ASSERT_EQ(res, MTLSamplerAddressModeClampToEdge);\n\n  res = igl::metal::SamplerState::convertAddressMode(SamplerAddressMode::MirrorRepeat);\n  ASSERT_EQ(res, MTLSamplerAddressModeMirrorRepeat);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/ShaderLibrary.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalShaderLibraryTest\n//\n// This test covers creation and error paths of shader libraries on Metal.\n//\nclass MetalShaderLibraryTest : public ::testing::Test {\n public:\n  MetalShaderLibraryTest() = default;\n  ~MetalShaderLibraryTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// CreateFromSource\n//\n// Test creating a shader library from a Metal source string.\n//\nTEST_F(MetalShaderLibraryTest, CreateFromSource) {\n  Result res;\n\n  const auto shaderSource = std::string(data::shader::kMtlSimpleShader);\n\n  std::vector<ShaderModuleInfo> moduleInfo = {\n      {ShaderStage::Vertex, std::string(data::shader::kSimpleVertFunc)},\n      {ShaderStage::Fragment, std::string(data::shader::kSimpleFragFunc)},\n  };\n\n  auto libraryDesc =\n      ShaderLibraryDesc::fromStringInput(shaderSource.c_str(), moduleInfo, \"testLibrary\");\n\n  auto library = device_->createShaderLibrary(libraryDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(library, nullptr);\n\n  // Verify we can retrieve individual shader modules\n  auto vertModule = library->getShaderModule(std::string(data::shader::kSimpleVertFunc));\n  ASSERT_NE(vertModule, nullptr);\n\n  auto fragModule = library->getShaderModule(std::string(data::shader::kSimpleFragFunc));\n  ASSERT_NE(fragModule, nullptr);\n}\n\n//\n// InvalidSourceReturnsError\n//\n// Test that creating a shader library with invalid shader source returns an error.\n//\nTEST_F(MetalShaderLibraryTest, InvalidSourceReturnsError) {\n  Result res;\n\n  const char* invalidSource = \"this is not valid Metal shader code!!!\";\n\n  std::vector<ShaderModuleInfo> moduleInfo = {\n      {ShaderStage::Vertex, \"nonExistentFunc\"},\n  };\n\n  auto libraryDesc =\n      ShaderLibraryDesc::fromStringInput(invalidSource, moduleInfo, \"invalidLibrary\");\n\n  auto library = device_->createShaderLibrary(libraryDesc, &res);\n  ASSERT_FALSE(res.isOk());\n}\n\n//\n// ShaderCompilationCountIncrements\n//\n// Test that shader compilation count increments after compiling a shader.\n//\nTEST_F(MetalShaderLibraryTest, ShaderCompilationCountIncrements) {\n  const size_t countBefore = device_->getShaderCompilationCount();\n\n  Result res;\n  const auto shaderSource = std::string(data::shader::kMtlSimpleShader);\n\n  std::vector<ShaderModuleInfo> moduleInfo = {\n      {ShaderStage::Vertex, std::string(data::shader::kSimpleVertFunc)},\n      {ShaderStage::Fragment, std::string(data::shader::kSimpleFragFunc)},\n  };\n\n  auto libraryDesc =\n      ShaderLibraryDesc::fromStringInput(shaderSource.c_str(), moduleInfo, \"countTestLibrary\");\n\n  auto library = device_->createShaderLibrary(libraryDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  const size_t countAfter = device_->getShaderCompilationCount();\n  ASSERT_GT(countAfter, countBefore);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/StorageMode.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalStorageModeTest\n//\n// This test covers the mapping of IGL ResourceStorage modes to Metal storage modes.\n//\nclass MetalStorageModeTest : public ::testing::Test {\n public:\n  MetalStorageModeTest() = default;\n  ~MetalStorageModeTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// PrivateStorage\n//\n// Test that a buffer with Private storage mode is created successfully.\n//\nTEST_F(MetalStorageModeTest, PrivateStorage) {\n  Result res;\n\n  const BufferDesc desc{.type = BufferDesc::BufferTypeBits::Uniform,\n                        .length = 256,\n                        .storage = ResourceStorage::Private,\n                        .debugName = \"privateBuffer\"};\n\n  auto buffer = device_->createBuffer(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(buffer, nullptr);\n  ASSERT_EQ(buffer->storage(), ResourceStorage::Private);\n}\n\n//\n// SharedStorage\n//\n// Test that a buffer with Shared storage mode is created successfully and reports Shared.\n//\nTEST_F(MetalStorageModeTest, SharedStorage) {\n  Result res;\n\n  const BufferDesc desc{.type = BufferDesc::BufferTypeBits::Uniform,\n                        .length = 256,\n                        .storage = ResourceStorage::Shared,\n                        .debugName = \"sharedBuffer\"};\n\n  auto buffer = device_->createBuffer(desc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(buffer, nullptr);\n  ASSERT_EQ(buffer->storage(), ResourceStorage::Shared);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/Texture.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/metal/Texture.h>\n\n#import <CoreVideo/CVPixelBuffer.h>\n#include <utility>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/PlatformDevice.h>\n#include <igl/metal/Texture.h>\n#include <igl/tests/util/Common.h>\n#include <igl/tests/util/TextureFormatTestBase.h>\n#include <igl/tests/util/TextureValidationHelpers.h>\n\nnamespace igl::tests {\n\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\n// Picking this to check mipmap validity, max mipmap level = log(16) - 1 = 3\n#define MIPMAP_TEX_WIDTH 16\n#define MIPMAP_TEX_HEIGHT 16\n\nclass TextureMTLTest : public ::testing::Test {\n public:\n  TextureMTLTest() = default;\n  ~TextureMTLTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(device_, cmdQueue_);\n\n    texDesc_ = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                  OFFSCREEN_TEX_WIDTH,\n                                  OFFSCREEN_TEX_HEIGHT,\n                                  TextureDesc::TextureUsageBits::Sampled);\n    Result res;\n    texture_ = device_->createTexture(texDesc_, &res);\n    ASSERT_TRUE(res.isOk());\n  }\n\n  void TearDown() override {}\n\n protected:\n  TextureDesc texDesc_;\n  std::shared_ptr<ITexture> texture_;\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nclass TextureFormatMTLTest : public util::TextureFormatTestBase {\n public:\n  TextureFormatMTLTest() = default;\n  ~TextureFormatMTLTest() override = default;\n};\n\n// Test basic getter methods for successful construction\nTEST_F(TextureMTLTest, ConstructionFromMTLTexture) {\n  auto* mtlTexture = static_cast<metal::Texture*>(texture_.get());\n  ASSERT_NE(mtlTexture->get(), nullptr);\n\n  auto dimensions = texture_->getDimensions();\n  ASSERT_EQ(dimensions.width, texDesc_.width);\n  ASSERT_EQ(dimensions.height, texDesc_.height);\n  ASSERT_EQ(dimensions.depth, texDesc_.depth);\n\n  auto samples = texture_->getSamples();\n  ASSERT_EQ(samples, texDesc_.numSamples);\n\n  auto format = texture_->getFormat();\n  ASSERT_EQ(format, texDesc_.format);\n}\n\n// Test upload\nTEST_F(TextureMTLTest, Upload) {\n  const auto texRangeDesc = TextureRangeDesc();\n  const Result res = texture_->upload(texRangeDesc, nullptr);\n  ASSERT_TRUE(res.isOk());\n}\n\n// Test getDrawable\nTEST_F(TextureMTLTest, GetDrawable) {\n  auto mtlTexture = std::dynamic_pointer_cast<metal::Texture>(texture_);\n  ASSERT_EQ(mtlTexture->getDrawable(), nullptr);\n}\n\n// Test mipmap generation and methods\nTEST_F(TextureMTLTest, GetMipmapsCount) {\n  Result res;\n  TextureDesc miptexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                              MIPMAP_TEX_WIDTH,\n                                              MIPMAP_TEX_HEIGHT,\n                                              TextureDesc::TextureUsageBits::Sampled);\n\n  int targetlevel = 0;\n  size_t ind = std::min<size_t>(miptexDesc.width, miptexDesc.height);\n  while (ind >>= 1) {\n    ++targetlevel;\n  }\n\n  miptexDesc.numMipLevels = targetlevel; // log(16) - 1\n  const std::shared_ptr<ITexture> mipTexture = device_->createTexture(miptexDesc, &res);\n  ASSERT_TRUE(res.isOk());\n\n  auto mtlTexture = std::static_pointer_cast<metal::Texture>(mipTexture);\n  mtlTexture->generateMipmap(*cmdQueue_);\n\n  // Wait for completion\n  const CommandBufferDesc desc = {};\n  const std::shared_ptr<ICommandBuffer> cmdBuf = cmdQueue_->createCommandBuffer(desc, &res);\n  id<MTLCommandBuffer> mtlCmdBuf = static_cast<igl::metal::CommandBuffer&>(*cmdBuf).get();\n  [mtlCmdBuf commit];\n  cmdBuf->waitUntilCompleted();\n\n  ASSERT_EQ(mtlTexture->getNumMipLevels(), targetlevel); // Should get log(16) - 1 = 3\n}\n\n// Test conversion from MTLTextureType to IGL TextureType\nTEST_F(TextureMTLTest, ToTextureType) {\n  std::vector<std::pair<MTLTextureType, TextureType>> inputAndExpectedList = {\n      std::make_pair(MTLTextureType2D, TextureType::TwoD),\n      std::make_pair(MTLTextureType2DMultisample, TextureType::TwoD),\n      std::make_pair(MTLTextureType2DArray, TextureType::TwoDArray),\n      std::make_pair(MTLTextureType3D, TextureType::ThreeD),\n      std::make_pair(MTLTextureTypeCube, TextureType::Cube),\n      std::make_pair(MTLTextureTypeCubeArray, TextureType::Invalid),\n  };\n  if (@available(macOS 10.14, iOS 14.0, *)) {\n    inputAndExpectedList.emplace_back(MTLTextureType2DMultisampleArray, TextureType::TwoDArray);\n  }\n\n  for (auto inputAndExpected : inputAndExpectedList) {\n    auto input = inputAndExpected.first;\n    auto expected = inputAndExpected.second;\n    auto result = igl::metal::Texture::convertType(input);\n    ASSERT_EQ(expected, result);\n  }\n}\n\n// Test mipmap generation flag initialization\nTEST_F(TextureMTLTest, MipmapGenerationFlagInitialization) {\n  const auto mtlTexture = std::dynamic_pointer_cast<metal::Texture>(texture_);\n  ASSERT_NE(mtlTexture, nullptr);\n\n  // Test that the mipmapGeneration flag is initialized to Manual by default\n  ASSERT_EQ(mtlTexture->getMipmapGeneration(), TextureDesc::TextureMipmapGeneration::Manual);\n}\n\n// Test auto-generation of mipmaps on upload\nTEST_F(TextureMTLTest, AutoGenerateMipmapOnUpload) {\n  Result ret;\n\n  // Create a texture with AutoGenerateOnUpload flag - similar to existing mipmap tests\n  constexpr uint32_t kNumMipLevels = 2;\n  constexpr uint32_t kTexWidth = 2u;\n  constexpr uint32_t kTexHeight = 2u;\n\n  constexpr uint32_t kColor = 0xdeadbeef;\n  constexpr std::array<uint32_t, 4> kBaseMipData = {kColor, kColor, kColor, kColor};\n  constexpr std::array<uint32_t, 1> kExpectedMip1Data = {kColor}; // Should be same color after\n                                                                  // generation\n\n  // Create texture with AutoGenerateOnUpload flag\n  TextureDesc textureDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                               kTexWidth,\n                                               kTexHeight,\n                                               TextureDesc::TextureUsageBits::Sampled |\n                                                   TextureDesc::TextureUsageBits::Attachment);\n  textureDesc.numMipLevels = kNumMipLevels;\n  textureDesc.mipmapGeneration = TextureDesc::TextureMipmapGeneration::AutoGenerateOnUpload;\n\n  auto texture = device_->createTexture(textureDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  // Cast to Metal texture to access Metal-specific methods\n  auto* mtlTexture = static_cast<metal::Texture*>(texture.get());\n  ASSERT_NE(mtlTexture, nullptr);\n\n  // Verify the texture was created with the correct mipmap generation flag\n  ASSERT_EQ(mtlTexture->getMipmapGeneration(),\n            TextureDesc::TextureMipmapGeneration::AutoGenerateOnUpload);\n\n  // Verify the texture has the expected number of mip levels\n  ASSERT_EQ(mtlTexture->getNumMipLevels(), kNumMipLevels);\n\n  // Upload data to mip level 0 - this should trigger automatic mipmap generation\n  ret = texture->upload(texture->getFullRange(0), kBaseMipData.data());\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  //  Validate that mip level 0 contains the uploaded data\n  util::validateUploadedTextureRange(*device_,\n                                     *cmdQueue_,\n                                     texture,\n                                     texture->getFullRange(0),\n                                     kBaseMipData.data(),\n                                     \"AutoGen: Base level (0)\");\n\n  // Validate that mip level 1 was auto-generated with expected content\n  // The auto-generated mip should contain the same solid color (averaged from base level)\n  util::validateUploadedTextureRange(*device_,\n                                     *cmdQueue_,\n                                     texture,\n                                     texture->getFullRange(1),\n                                     kExpectedMip1Data.data(),\n                                     \"AutoGen: Generated level (1)\");\n\n  // Verify that the Metal texture resources remain valid\n  ASSERT_NE(mtlTexture->get(), nullptr);\n}\n\n// Test manual mipmap generation for comparison\nTEST_F(TextureMTLTest, ManualMipmapGeneration) {\n  Result ret;\n\n  // Create a texture with Manual mipmap generation - follow same pattern as existing tests\n  constexpr uint32_t kNumMipLevels = 2;\n  constexpr uint32_t kTexWidth = 2u;\n  constexpr uint32_t kTexHeight = 2u;\n\n  constexpr uint32_t kColor = 0x8badf00d; // Different color from auto test\n  constexpr std::array<uint32_t, 4> kBaseMipData = {kColor, kColor, kColor, kColor};\n  constexpr std::array<uint32_t, 1> kInitialMip1Data = {0}; // Initialize mip 1 with zero\n  constexpr std::array<uint32_t, 1> kExpectedMip1Data = {kColor}; // Should match base after\n                                                                  // generation\n\n  // Create texture with Manual mipmap generation\n  TextureDesc textureDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                               kTexWidth,\n                                               kTexHeight,\n                                               TextureDesc::TextureUsageBits::Sampled |\n                                                   TextureDesc::TextureUsageBits::Attachment);\n  textureDesc.numMipLevels = kNumMipLevels;\n  textureDesc.mipmapGeneration = TextureDesc::TextureMipmapGeneration::Manual;\n\n  auto texture = device_->createTexture(textureDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  auto* mtlTexture = static_cast<metal::Texture*>(texture.get());\n  ASSERT_NE(mtlTexture, nullptr);\n\n  // Verify the texture was created with Manual mipmap generation\n  ASSERT_EQ(mtlTexture->getMipmapGeneration(), TextureDesc::TextureMipmapGeneration::Manual);\n\n  // Verify the texture has the expected number of mip levels\n  ASSERT_EQ(mtlTexture->getNumMipLevels(), kNumMipLevels);\n\n  // Upload data to base mip level (level 0)\n  ret = texture->upload(texture->getFullRange(0), kBaseMipData.data());\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Upload initial data to mip level 1 (will be overwritten by generateMipmap)\n  ret = texture->upload(texture->getFullRange(1), kInitialMip1Data.data());\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Validate initial state - base level should have uploaded data\n  util::validateUploadedTextureRange(*device_,\n                                     *cmdQueue_,\n                                     texture,\n                                     texture->getFullRange(0),\n                                     kBaseMipData.data(),\n                                     \"Manual: Initial base level (0)\");\n\n  // Validate initial state - mip level 1 should have initial zero data\n  util::validateUploadedTextureRange(*device_,\n                                     *cmdQueue_,\n                                     texture,\n                                     texture->getFullRange(1),\n                                     kInitialMip1Data.data(),\n                                     \"Manual: Initial mip level (1)\");\n\n  // Now manually generate mipmaps - this should overwrite mip level 1\n  mtlTexture->generateMipmap(*cmdQueue_, nullptr);\n\n  // Validate final state - base level should still have original data\n  util::validateUploadedTextureRange(*device_,\n                                     *cmdQueue_,\n                                     texture,\n                                     texture->getFullRange(0),\n                                     kBaseMipData.data(),\n                                     \"Manual: Final base level (0)\");\n\n  // Validate final state - mip level 1 should now have generated data\n  util::validateUploadedTextureRange(*device_,\n                                     *cmdQueue_,\n                                     texture,\n                                     texture->getFullRange(1),\n                                     kExpectedMip1Data.data(),\n                                     \"Manual: Generated mip level (1)\");\n}\n\n// Test conversion from IGL TextureType to MTLTextureType\n// Current IGL makes the following assumptions, which may not be valid in the future\n//   * Falls back to MTLTextureType1D for TextureType::Invalid\nTEST_F(TextureMTLTest, ToMTLTextureType) {\n  std::vector<std::tuple<TextureType, size_t, MTLTextureType>> inputAndExpectedList = {\n      std::make_tuple(TextureType::Invalid, 1, MTLTextureType1D),\n      std::make_tuple(TextureType::TwoD, 1, MTLTextureType2D),\n      std::make_tuple(TextureType::TwoD, 2, MTLTextureType2DMultisample),\n      std::make_tuple(TextureType::TwoDArray, 1, MTLTextureType2DArray),\n      std::make_tuple(TextureType::ThreeD, 1, MTLTextureType3D),\n      std::make_tuple(TextureType::Cube, 1, MTLTextureTypeCube)};\n  if (@available(macOS 10.14, iOS 14.0, *)) {\n    inputAndExpectedList.emplace_back(TextureType::TwoDArray, 2, MTLTextureType2DMultisampleArray);\n  }\n\n  for (auto inputAndExpected : inputAndExpectedList) {\n    auto input = std::get<0>(inputAndExpected);\n    auto numSamples = std::get<1>(inputAndExpected);\n    auto expected = std::get<2>(inputAndExpected);\n    auto result = igl::metal::Texture::convertType(input, numSamples);\n    ASSERT_EQ(expected, result);\n  }\n}\n\nstatic std::shared_ptr<ITexture> createCVPixelBufferTextureWithSize(\n    TextureFormat format,\n    const size_t width,\n    const size_t height,\n    const std::shared_ptr<IDevice>& device,\n    Result& outResult) {\n  const igl::BackendType backend = device->getBackendType();\n  CVPixelBufferRef pixelBuffer = nullptr;\n  NSDictionary* bufferAttributes = @{\n    (NSString*)kCVPixelBufferIOSurfacePropertiesKey : @{},\n    (NSString*)kCVPixelBufferMetalCompatibilityKey : @(backend == igl::BackendType::Metal),\n  };\n\n  const CVReturn result = CVPixelBufferCreate(kCFAllocatorDefault,\n                                              width,\n                                              height,\n                                              kCVPixelFormatType_32BGRA,\n                                              (__bridge CFDictionaryRef)(bufferAttributes),\n                                              &pixelBuffer);\n  if (result != kCVReturnSuccess) {\n    Result::setResult(&outResult,\n                      Result::Code::RuntimeError,\n                      \"CVPixelBufferCreate failed to create pixel buffer\");\n    return nullptr;\n  }\n\n  auto* platformDevice = device->getPlatformDevice<igl::metal::PlatformDevice>();\n  std::shared_ptr<ITexture> texture =\n      platformDevice->createTextureFromNativePixelBuffer(pixelBuffer, format, 0, &outResult);\n  if (!outResult.isOk()) {\n    return nullptr;\n  }\n  if (texture == nullptr) {\n    Result::setResult(\n        &outResult, Result::Code::RuntimeError, \"failed to create igl texture from CVPixelBuffer\");\n    return nullptr;\n  }\n  CVPixelBufferRelease(pixelBuffer);\n  Result::setOk(&outResult);\n  return texture;\n}\n\nTEST_F(TextureFormatMTLTest, createTextureFromNativePixelBufferSuccess) {\n  Result result;\n  auto texture =\n      createCVPixelBufferTextureWithSize(TextureFormat::BGRA_UNorm8, 100, 100, iglDev_, result);\n  ASSERT_EQ(result.isOk(), true) << result.message.c_str();\n  testUsage(texture,\n            TextureDesc::TextureUsageBits::Sampled | TextureDesc::TextureUsageBits::Attachment,\n            \"SampledAttachment\");\n}\n\nTEST_F(TextureMTLTest, createTextureFromNativePixelBufferWithInvalidFormat) {\n  Result result;\n  auto texture =\n      createCVPixelBufferTextureWithSize(TextureFormat::Invalid, 100, 100, device_, result);\n  ASSERT_EQ(result.isOk(), false) << result.message.c_str();\n}\n\nTEST_F(TextureMTLTest, ConvertTextureFormats) {\n  const std::vector<TextureFormat> inputFormats = {\n      TextureFormat::A_UNorm8,\n      TextureFormat::R_UNorm8,\n      TextureFormat::R_F16,\n      TextureFormat::R_UInt16,\n#if !IGL_PLATFORM_MACOSX\n      TextureFormat::B5G5R5A1_UNorm,\n#endif\n#if !(IGL_PLATFORM_MACOSX || IGL_PLATFORM_IOS_SIMULATOR)\n      // https://developer.apple.com/documentation/metal/developing_metal_apps_that_run_in_simulator\n      TextureFormat::B5G6R5_UNorm,\n      TextureFormat::ABGR_UNorm4,\n#endif\n      TextureFormat::RG_UNorm8,\n      TextureFormat::R4G2B2_UNorm_Apple,\n      TextureFormat::R4G2B2_UNorm_Rev_Apple,\n      TextureFormat::RGBA_UNorm8,\n      TextureFormat::BGRA_UNorm8,\n      TextureFormat::RG_F16,\n      TextureFormat::RG_UInt16,\n      TextureFormat::RGB10_A2_UNorm_Rev,\n      TextureFormat::RGB10_A2_Uint_Rev,\n      TextureFormat::BGR10_A2_Unorm,\n      TextureFormat::R_F32,\n      TextureFormat::R_UInt32,\n      TextureFormat::RG_F32,\n      TextureFormat::RGBA_F16,\n      TextureFormat::RGBA_UInt32,\n      TextureFormat::RGBA_F32,\n#if !IGL_PLATFORM_MACOSX\n      TextureFormat::RGBA_ASTC_4x4,\n      TextureFormat::SRGB8_A8_ASTC_4x4,\n      TextureFormat::RGBA_ASTC_5x4,\n      TextureFormat::SRGB8_A8_ASTC_5x4,\n      TextureFormat::RGBA_ASTC_5x5,\n      TextureFormat::SRGB8_A8_ASTC_5x5,\n      TextureFormat::RGBA_ASTC_6x5,\n      TextureFormat::SRGB8_A8_ASTC_6x5,\n      TextureFormat::RGBA_ASTC_6x6,\n      TextureFormat::SRGB8_A8_ASTC_6x6,\n      TextureFormat::RGBA_ASTC_8x5,\n      TextureFormat::SRGB8_A8_ASTC_8x5,\n      TextureFormat::RGBA_ASTC_8x6,\n      TextureFormat::SRGB8_A8_ASTC_8x6,\n      TextureFormat::RGBA_ASTC_8x8,\n      TextureFormat::SRGB8_A8_ASTC_8x8,\n      TextureFormat::RGBA_ASTC_10x5,\n      TextureFormat::SRGB8_A8_ASTC_10x5,\n      TextureFormat::RGBA_ASTC_10x6,\n      TextureFormat::SRGB8_A8_ASTC_10x6,\n      TextureFormat::RGBA_ASTC_10x8,\n      TextureFormat::SRGB8_A8_ASTC_10x8,\n      TextureFormat::RGBA_ASTC_10x10,\n      TextureFormat::SRGB8_A8_ASTC_10x10,\n      TextureFormat::RGBA_ASTC_12x10,\n      TextureFormat::SRGB8_A8_ASTC_12x10,\n      TextureFormat::RGBA_ASTC_12x12,\n      TextureFormat::SRGB8_A8_ASTC_12x12,\n      TextureFormat::RGBA_PVRTC_2BPPV1,\n      TextureFormat::RGB_PVRTC_2BPPV1,\n      TextureFormat::RGBA_PVRTC_4BPPV1,\n      TextureFormat::RGB_PVRTC_4BPPV1,\n      TextureFormat::RGB8_ETC1,\n      TextureFormat::RGB8_ETC2,\n      TextureFormat::SRGB8_ETC2,\n      TextureFormat::RGBA8_EAC_ETC2,\n      TextureFormat::SRGB8_A8_EAC_ETC2,\n      TextureFormat::RG_EAC_UNorm,\n      TextureFormat::RG_EAC_SNorm,\n      TextureFormat::R_EAC_UNorm,\n      TextureFormat::R_EAC_SNorm,\n#endif\n      TextureFormat::Z_UNorm16,\n      TextureFormat::Z_UNorm24,\n      TextureFormat::Z_UNorm32,\n      TextureFormat::S8_UInt_Z24_UNorm,\n      TextureFormat::S8_UInt_Z32_UNorm,\n      TextureFormat::S_UInt8};\n\n  const std::vector<TextureFormat> invalidTextureFormats = {\n      TextureFormat::Invalid,\n      TextureFormat::L_UNorm8,\n#if IGL_PLATFORM_MACOSX\n      TextureFormat::B5G5R5A1_UNorm,\n#endif\n#if IGL_PLATFORM_MACOSX || IGL_PLATFORM_IOS_SIMULATOR\n      TextureFormat::B5G6R5_UNorm,\n      TextureFormat::ABGR_UNorm4,\n#endif\n      TextureFormat::LA_UNorm8,\n      TextureFormat::R5G5B5A1_UNorm,\n      TextureFormat::RGBX_UNorm8,\n      TextureFormat::BGRA_UNorm8_Rev,\n      TextureFormat::RGB_F16,\n      TextureFormat::RGB_F32,\n#if IGL_PLATFORM_MACOSX\n      TextureFormat::RGBA_ASTC_4x4,\n      TextureFormat::SRGB8_A8_ASTC_4x4,\n      TextureFormat::RGBA_ASTC_5x4,\n      TextureFormat::SRGB8_A8_ASTC_5x4,\n      TextureFormat::RGBA_ASTC_5x5,\n      TextureFormat::SRGB8_A8_ASTC_5x5,\n      TextureFormat::RGBA_ASTC_6x5,\n      TextureFormat::SRGB8_A8_ASTC_6x5,\n      TextureFormat::RGBA_ASTC_6x6,\n      TextureFormat::SRGB8_A8_ASTC_6x6,\n      TextureFormat::RGBA_ASTC_8x5,\n      TextureFormat::SRGB8_A8_ASTC_8x5,\n      TextureFormat::RGBA_ASTC_8x6,\n      TextureFormat::SRGB8_A8_ASTC_8x6,\n      TextureFormat::RGBA_ASTC_8x8,\n      TextureFormat::SRGB8_A8_ASTC_8x8,\n      TextureFormat::RGBA_ASTC_10x5,\n      TextureFormat::SRGB8_A8_ASTC_10x5,\n      TextureFormat::RGBA_ASTC_10x6,\n      TextureFormat::SRGB8_A8_ASTC_10x6,\n      TextureFormat::RGBA_ASTC_10x8,\n      TextureFormat::SRGB8_A8_ASTC_10x8,\n      TextureFormat::RGBA_ASTC_10x10,\n      TextureFormat::SRGB8_A8_ASTC_10x10,\n      TextureFormat::RGBA_ASTC_12x10,\n      TextureFormat::SRGB8_A8_ASTC_12x10,\n      TextureFormat::RGBA_ASTC_12x12,\n      TextureFormat::SRGB8_A8_ASTC_12x12,\n      TextureFormat::RGBA_PVRTC_2BPPV1,\n      TextureFormat::RGB_PVRTC_2BPPV1,\n      TextureFormat::RGBA_PVRTC_4BPPV1,\n      TextureFormat::RGB_PVRTC_4BPPV1,\n      TextureFormat::RGB8_ETC1,\n      TextureFormat::RGB8_ETC2,\n      TextureFormat::SRGB8_ETC2,\n#endif\n      TextureFormat::RGB8_Punchthrough_A1_ETC2,\n      TextureFormat::SRGB8_Punchthrough_A1_ETC2,\n#if IGL_PLATFORM_MACOSX\n      TextureFormat::RGBA8_EAC_ETC2,\n      TextureFormat::SRGB8_A8_EAC_ETC2,\n      TextureFormat::RG_EAC_UNorm,\n      TextureFormat::RG_EAC_SNorm,\n      TextureFormat::R_EAC_UNorm,\n      TextureFormat::R_EAC_SNorm,\n#endif\n  };\n\n  for (auto format : invalidTextureFormats) {\n    ASSERT_EQ(true,\n              igl::metal::Texture::textureFormatToMTLPixelFormat(format) == MTLPixelFormatInvalid);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/TextureDataRoundtrip.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <cstring>\n#include <vector>\n#include <igl/IGL.h>\n#include <igl/metal/CommandBuffer.h>\n#include <igl/metal/Device.h>\n#include <igl/metal/Texture.h>\n\nnamespace igl::tests {\n\n#define ROUNDTRIP_TEX_WIDTH 4\n#define ROUNDTRIP_TEX_HEIGHT 4\n\n//\n// MetalTextureDataRoundtripTest\n//\n// This test covers uploading texture data and reading it back on Metal.\n// Tests RGBA upload/readback, mip level uploads, and 3D textures.\n//\nclass MetalTextureDataRoundtripTest : public ::testing::Test {\n public:\n  MetalTextureDataRoundtripTest() = default;\n  ~MetalTextureDataRoundtripTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// UploadAndReadback_RGBA\n//\n// Upload RGBA data to a texture, read it back via framebuffer copyBytes, and verify match.\n//\nTEST_F(MetalTextureDataRoundtripTest, UploadAndReadback_RGBA) {\n  Result res;\n\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           ROUNDTRIP_TEX_WIDTH,\n                                           ROUNDTRIP_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Sampled |\n                                               TextureDesc::TextureUsageBits::Attachment);\n  auto texture = device_->createTexture(texDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(texture, nullptr);\n\n  // Prepare test data: solid green\n  const size_t numPixels = ROUNDTRIP_TEX_WIDTH * ROUNDTRIP_TEX_HEIGHT;\n  std::vector<uint32_t> uploadData(numPixels, 0xFF00FF00); // RGBA: green with full alpha\n\n  auto range = TextureRangeDesc::new2D(0, 0, ROUNDTRIP_TEX_WIDTH, ROUNDTRIP_TEX_HEIGHT);\n  res = texture->upload(range, uploadData.data());\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Create framebuffer to read back\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = texture;\n  auto framebuffer = device_->createFramebuffer(fbDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  std::vector<uint32_t> readbackData(numPixels, 0);\n  framebuffer->copyBytesColorAttachment(\n      *cmdQueue_, 0, readbackData.data(), range, ROUNDTRIP_TEX_WIDTH * 4);\n\n  for (size_t i = 0; i < numPixels; ++i) {\n    ASSERT_EQ(readbackData[i], uploadData[i]) << \"Mismatch at pixel \" << i;\n  }\n}\n\n//\n// UploadToMipLevel\n//\n// Upload data to a specific mip level and verify the upload succeeds.\n//\nTEST_F(MetalTextureDataRoundtripTest, UploadToMipLevel) {\n  Result res;\n\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           ROUNDTRIP_TEX_WIDTH,\n                                           ROUNDTRIP_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Sampled |\n                                               TextureDesc::TextureUsageBits::Attachment);\n  texDesc.numMipLevels = 2; // base (4x4) + mip 1 (2x2)\n\n  auto texture = device_->createTexture(texDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(texture, nullptr);\n\n  // Upload to mip level 0\n  const size_t numPixels0 = ROUNDTRIP_TEX_WIDTH * ROUNDTRIP_TEX_HEIGHT;\n  std::vector<uint32_t> data0(numPixels0, 0xFFFF0000);\n  res = texture->upload(texture->getFullRange(0), data0.data());\n  ASSERT_TRUE(res.isOk()) << res.message;\n\n  // Upload to mip level 1 (2x2)\n  const size_t numPixels1 = (ROUNDTRIP_TEX_WIDTH / 2) * (ROUNDTRIP_TEX_HEIGHT / 2);\n  std::vector<uint32_t> data1(numPixels1, 0xFF0000FF);\n  res = texture->upload(texture->getFullRange(1), data1.data());\n  ASSERT_TRUE(res.isOk()) << res.message;\n}\n\n//\n// Upload3DTexture\n//\n// Upload data to a 3D texture and verify the upload succeeds.\n//\nTEST_F(MetalTextureDataRoundtripTest, Upload3DTexture) {\n  Result res;\n\n  constexpr uint32_t kWidth = 4;\n  constexpr uint32_t kHeight = 4;\n  constexpr uint32_t kDepth = 4;\n\n  TextureDesc texDesc;\n  texDesc.type = TextureType::ThreeD;\n  texDesc.format = TextureFormat::RGBA_UNorm8;\n  texDesc.width = kWidth;\n  texDesc.height = kHeight;\n  texDesc.depth = kDepth;\n  texDesc.numMipLevels = 1;\n  texDesc.usage = TextureDesc::TextureUsageBits::Sampled;\n\n  auto texture = device_->createTexture(texDesc, &res);\n  ASSERT_TRUE(res.isOk()) << res.message;\n  ASSERT_NE(texture, nullptr);\n\n  const size_t numPixels = kWidth * kHeight * kDepth;\n  std::vector<uint32_t> data(numPixels, 0xFF808080);\n\n  auto range = TextureRangeDesc::new3D(0, 0, 0, kWidth, kHeight, kDepth);\n  res = texture->upload(range, data.data());\n  ASSERT_TRUE(res.isOk()) << res.message;\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/Timer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/Timer.h>\n\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests {\n\n//\n// MetalTimerTest\n//\n// This test covers ITimer creation and basic operations on Metal.\n//\nclass MetalTimerTest : public ::testing::Test {\n public:\n  MetalTimerTest() = default;\n  ~MetalTimerTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(device_, cmdQueue_);\n    ASSERT_NE(device_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// TimerCreation\n//\n// Test that creating a timer succeeds.\n//\nTEST_F(MetalTimerTest, TimerCreation) {\n  Result res;\n  auto timer = device_->createTimer(&res);\n  // Timer may not be supported on all Metal devices\n  if (res.isOk()) {\n    ASSERT_NE(timer, nullptr);\n  }\n}\n\n//\n// InitialElapsedTimeZero\n//\n// Test that the initial elapsed time of a newly created timer is 0.\n//\nTEST_F(MetalTimerTest, InitialElapsedTimeZero) {\n  Result res;\n  auto timer = device_->createTimer(&res);\n  if (!res.isOk()) {\n    GTEST_SKIP() << \"Timer not supported on this device\";\n  }\n  ASSERT_NE(timer, nullptr);\n\n  // Before any GPU work, elapsed time should be 0\n  ASSERT_EQ(timer->getElapsedTimeNanos(), 0u);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/metal/VertexInputState.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"../../metal/VertexInputState.h\"\n\n#include \"../util/Common.h\"\n\n#include <memory>\n#include <string>\n\nnamespace igl::tests {\n\n// VertexInputStateMTLTest\n//\n// This test covers igl::metal::Device::createVertexInputState. Most of the testing\n// revolves around validating correction rejection of invalid input.\nclass VertexInputStateMTLTest : public ::testing::Test {\n public:\n  VertexInputStateMTLTest() = default;\n  ~VertexInputStateMTLTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nTEST_F(VertexInputStateMTLTest, testDefaultVertexInputDesc) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  const VertexInputStateDesc inputDesc;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n}\n\nTEST_F(VertexInputStateMTLTest, testWithNumAttributesTooLarge) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = IGL_VERTEX_ATTRIBUTES_MAX + 1;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::ArgumentOutOfRange);\n  ASSERT_EQ(ret.message, \"numAttributes is too large in VertexInputStateDesc\");\n  ASSERT_TRUE(vertexInputState == nullptr);\n}\n\nTEST_F(VertexInputStateMTLTest, testWithNumBindingsTooLarge) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numInputBindings = IGL_BUFFER_BINDINGS_MAX + 1;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::ArgumentOutOfRange);\n  ASSERT_EQ(ret.message, \"numInputBindings is too large in VertexInputStateDesc\");\n}\n\n// In this test we have a single attribute and no bindings\n// and this should fail because the bufferIndexes are invalid.\nTEST_F(VertexInputStateMTLTest, testOneAttribute) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 1;\n  inputDesc.attributes[0].bufferIndex = 0;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].name = \"unused\";\n  inputDesc.attributes[0].location = 0;\n\n  inputDesc.numInputBindings = 0;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::ArgumentInvalid);\n}\n\nTEST_F(VertexInputStateMTLTest, testNegativeBufferIndex) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 1;\n  inputDesc.attributes[0].bufferIndex = -1;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].name = \"unused\";\n  inputDesc.attributes[0].location = 0;\n\n  inputDesc.numInputBindings = 1;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::ArgumentOutOfRange);\n}\n\nTEST_F(VertexInputStateMTLTest, testNegativeLocation) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 1;\n  inputDesc.attributes[0].bufferIndex = 0;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].name = \"unused\";\n  inputDesc.attributes[0].location = -1;\n\n  inputDesc.numInputBindings = 1;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::ArgumentOutOfRange);\n}\n\n// Attribute locations have to be unique.\n// Here we set two locations to the same number (1).\n// Test should fail\nTEST_F(VertexInputStateMTLTest, testLocationUnique) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 2;\n  inputDesc.attributes[0].bufferIndex = 0;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].name = \"unused\";\n  inputDesc.attributes[0].location = 1;\n  inputDesc.attributes[1].bufferIndex = 0;\n  inputDesc.attributes[1].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[1].offset = 0;\n  inputDesc.attributes[1].name = \"unused\";\n  inputDesc.attributes[1].location = 1;\n\n  inputDesc.numInputBindings = 1;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::ArgumentInvalid);\n}\n\n// Attribute locations do not have to start at 0 and they do not have to be sequential.\n// Here we set attribute locations to 10 and 21.\n// Test should pass.\nTEST_F(VertexInputStateMTLTest, testLocationNonSequential) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 2;\n  inputDesc.attributes[0].bufferIndex = 0;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].name = \"unused\";\n  inputDesc.attributes[0].location = 10;\n  inputDesc.attributes[1].bufferIndex = 0;\n  inputDesc.attributes[1].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[1].offset = 0;\n  inputDesc.attributes[1].name = \"unused\";\n  inputDesc.attributes[1].location = 15;\n\n  inputDesc.numInputBindings = 1;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n}\n\nTEST_F(VertexInputStateMTLTest, testTwoAttributesZeroBinding) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 2;\n\n  inputDesc.attributes[0].bufferIndex = 0;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].name = \"unused1\";\n  inputDesc.attributes[0].location = 0;\n\n  inputDesc.attributes[1].bufferIndex = 0;\n  inputDesc.attributes[1].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[1].offset = 0;\n  inputDesc.attributes[1].name = \"unused2\";\n  inputDesc.attributes[1].location = 1;\n\n  inputDesc.numInputBindings = 0;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::ArgumentInvalid);\n  ASSERT_TRUE(vertexInputState == nullptr);\n}\n\nTEST_F(VertexInputStateMTLTest, testTwoAttributesNotCovering) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 2;\n\n  inputDesc.attributes[0].bufferIndex = 0;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].name = \"unused1\";\n  inputDesc.attributes[0].location = 0;\n\n  inputDesc.attributes[1].bufferIndex = 0;\n  inputDesc.attributes[1].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[1].offset = 0;\n  inputDesc.attributes[1].name = \"unused2\";\n  inputDesc.attributes[1].location = 0;\n\n  inputDesc.numInputBindings = 1;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::ArgumentInvalid);\n  ASSERT_TRUE(vertexInputState == nullptr);\n}\n\nTEST_F(VertexInputStateMTLTest, testTwoAttributesOneBuffer) {\n  ASSERT_TRUE(iglDev_ != nullptr);\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 2;\n\n  inputDesc.attributes[0].bufferIndex = 0;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].name = \"unused1\";\n  inputDesc.attributes[0].location = 1;\n\n  inputDesc.attributes[1].bufferIndex = 0;\n  inputDesc.attributes[1].format = VertexAttributeFormat::Float1;\n  inputDesc.attributes[1].offset = 8;\n  inputDesc.attributes[1].name = \"unused2\";\n  inputDesc.attributes[1].location = 0;\n\n  inputDesc.numInputBindings = 1;\n  inputDesc.inputBindings[0].stride = 16;\n  inputDesc.inputBindings[0].sampleFunction = VertexSampleFunction::PerVertex;\n  inputDesc.inputBindings[0].sampleRate = 2;\n  Result ret;\n\n  const std::shared_ptr<IVertexInputState> vertexInputState =\n      iglDev_->createVertexInputState(inputDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(vertexInputState != nullptr);\n\n  const std::shared_ptr<::igl::metal::VertexInputState> metalVertexInputState =\n      std::static_pointer_cast<::igl::metal::VertexInputState>(vertexInputState);\n  ASSERT_TRUE(metalVertexInputState != nullptr);\n\n  MTLVertexDescriptor* metalVertexDescriptor = metalVertexInputState->get();\n  ASSERT_TRUE(metalVertexDescriptor != nullptr);\n\n  ASSERT_EQ(MTLVertexFormatFloat, metalVertexDescriptor.attributes[0].format);\n  ASSERT_EQ(0, metalVertexDescriptor.attributes[0].bufferIndex);\n  ASSERT_EQ(8, metalVertexDescriptor.attributes[0].offset);\n\n  ASSERT_EQ(MTLVertexFormatFloat, metalVertexDescriptor.attributes[1].format);\n  ASSERT_EQ(0, metalVertexDescriptor.attributes[1].bufferIndex);\n  ASSERT_EQ(0, metalVertexDescriptor.attributes[1].offset);\n\n  ASSERT_EQ(16, metalVertexDescriptor.layouts[0].stride);\n  ASSERT_EQ(MTLVertexStepFunctionPerVertex, metalVertexDescriptor.layouts[0].stepFunction);\n  ASSERT_EQ(2, metalVertexDescriptor.layouts[0].stepRate);\n}\n\nTEST(VertexInputStateMTLStaticTest, testConvertAttributeFormat) {\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Float1),\n            MTLVertexFormatFloat);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Float2),\n            MTLVertexFormatFloat2);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Float3),\n            MTLVertexFormatFloat3);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Float4),\n            MTLVertexFormatFloat4);\n\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Byte2),\n            MTLVertexFormatChar2);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Byte3),\n            MTLVertexFormatChar3);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Byte4),\n            MTLVertexFormatChar4);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UByte2),\n            MTLVertexFormatUChar2);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UByte3),\n            MTLVertexFormatUChar3);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UByte4),\n            MTLVertexFormatUChar4);\n\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Short2),\n            MTLVertexFormatShort2);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Short3),\n            MTLVertexFormatShort3);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Short4),\n            MTLVertexFormatShort4);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UShort2),\n            MTLVertexFormatUShort2);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UShort3),\n            MTLVertexFormatUShort3);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UShort4),\n            MTLVertexFormatUShort4);\n\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Byte1Norm),\n            MTLVertexFormatCharNormalized);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Byte2Norm),\n            MTLVertexFormatChar2Normalized);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Byte3Norm),\n            MTLVertexFormatChar3Normalized);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Byte4Norm),\n            MTLVertexFormatChar4Normalized);\n\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UByte1Norm),\n            MTLVertexFormatUCharNormalized);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UByte2Norm),\n            MTLVertexFormatUChar2Normalized);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UByte3Norm),\n            MTLVertexFormatUChar3Normalized);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UByte4Norm),\n            MTLVertexFormatUChar4Normalized);\n\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Short1Norm),\n            MTLVertexFormatShortNormalized);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Short2Norm),\n            MTLVertexFormatShort2Normalized);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Short3Norm),\n            MTLVertexFormatShort3Normalized);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Short4Norm),\n            MTLVertexFormatShort4Normalized);\n\n  ASSERT_EQ(\n      igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UShort1Norm),\n      MTLVertexFormatUShortNormalized);\n  ASSERT_EQ(\n      igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UShort2Norm),\n      MTLVertexFormatUShort2Normalized);\n  ASSERT_EQ(\n      igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UShort3Norm),\n      MTLVertexFormatUShort3Normalized);\n  ASSERT_EQ(\n      igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UShort4Norm),\n      MTLVertexFormatUShort4Normalized);\n\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Byte1),\n            MTLVertexFormatInvalid);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UByte1),\n            MTLVertexFormatInvalid);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::Short1),\n            MTLVertexFormatInvalid);\n  ASSERT_EQ(igl::metal::VertexInputState::convertAttributeFormat(VertexAttributeFormat::UShort1),\n            MTLVertexFormatInvalid);\n}\n\nTEST(VertexInputStateMTLStaticTest, testConvertSampleFunction) {\n  ASSERT_EQ(igl::metal::VertexInputState::convertSampleFunction(VertexSampleFunction::Constant),\n            MTLVertexStepFunctionConstant);\n  ASSERT_EQ(igl::metal::VertexInputState::convertSampleFunction(VertexSampleFunction::PerVertex),\n            MTLVertexStepFunctionPerVertex);\n  ASSERT_EQ(igl::metal::VertexInputState::convertSampleFunction(VertexSampleFunction::Instance),\n            MTLVertexStepFunctionPerInstance);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/BindlessTextures.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n\nnamespace igl::tests {\n\n//\n// BindlessTexturesOGLTest\n//\n// Tests for bindless texture operations in OpenGL.\n//\nclass BindlessTexturesOGLTest : public ::testing::Test {\n public:\n  BindlessTexturesOGLTest() = default;\n  ~BindlessTexturesOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// GetTextureHandle\n//\n// Get a bindless texture handle if the extension is supported.\n//\nTEST_F(BindlessTexturesOGLTest, GetTextureHandle) {\n  if (!iglDev_->hasFeature(DeviceFeatures::TextureBindless)) {\n    GTEST_SKIP() << \"Bindless textures not supported\";\n  }\n\n  Result ret;\n\n  // Create a simple texture\n  const TextureDesc texDesc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8, 2, 2, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  // Attempt to get a bindless handle via IContext\n  // The texture needs to have a valid GL name for this to work\n  // This is a low-level test - the actual handle value depends on the driver\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/BlendModeConversion.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <utility>\n#include <vector>\n#include <igl/opengl/RenderPipelineState.h>\n\nnamespace igl::tests {\n\n//\n// BlendModeConversionOGLTest\n//\n// Tests for BlendOp and BlendFactor conversion in the OpenGL RenderPipelineState.\n//\nclass BlendModeConversionOGLTest : public ::testing::Test {\n public:\n  BlendModeConversionOGLTest() = default;\n  ~BlendModeConversionOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n  }\n\n  void TearDown() override {}\n};\n\n//\n// ConvertBlendOp\n//\n// Test all 5 blend operations map to their GL equivalents.\n//\nTEST_F(BlendModeConversionOGLTest, ConvertBlendOp) {\n  const std::vector<std::pair<BlendOp, GLenum>> conversions = {\n      {BlendOp::Add, GL_FUNC_ADD},\n      {BlendOp::Subtract, GL_FUNC_SUBTRACT},\n      {BlendOp::ReverseSubtract, GL_FUNC_REVERSE_SUBTRACT},\n      {BlendOp::Min, GL_MIN},\n      {BlendOp::Max, GL_MAX},\n  };\n\n  for (const auto& [iglOp, glOp] : conversions) {\n    ASSERT_EQ(igl::opengl::RenderPipelineState::convertBlendOp(iglOp), glOp);\n  }\n}\n\n//\n// ConvertBlendFactor\n//\n// Test all blend factors map to their GL equivalents.\n//\nTEST_F(BlendModeConversionOGLTest, ConvertBlendFactor) {\n  const std::vector<std::pair<BlendFactor, GLenum>> conversions = {\n      {BlendFactor::Zero, GL_ZERO},\n      {BlendFactor::One, GL_ONE},\n      {BlendFactor::SrcColor, GL_SRC_COLOR},\n      {BlendFactor::OneMinusSrcColor, GL_ONE_MINUS_SRC_COLOR},\n      {BlendFactor::DstColor, GL_DST_COLOR},\n      {BlendFactor::OneMinusDstColor, GL_ONE_MINUS_DST_COLOR},\n      {BlendFactor::SrcAlpha, GL_SRC_ALPHA},\n      {BlendFactor::OneMinusSrcAlpha, GL_ONE_MINUS_SRC_ALPHA},\n      {BlendFactor::DstAlpha, GL_DST_ALPHA},\n      {BlendFactor::OneMinusDstAlpha, GL_ONE_MINUS_DST_ALPHA},\n      {BlendFactor::BlendColor, GL_CONSTANT_COLOR},\n      {BlendFactor::OneMinusBlendColor, GL_ONE_MINUS_CONSTANT_COLOR},\n      {BlendFactor::BlendAlpha, GL_CONSTANT_ALPHA},\n      {BlendFactor::OneMinusBlendAlpha, GL_ONE_MINUS_CONSTANT_ALPHA},\n      {BlendFactor::SrcAlphaSaturated, GL_SRC_ALPHA_SATURATE},\n      // Unsupported values default to GL_ONE\n      {BlendFactor::Src1Color, GL_ONE},\n      {BlendFactor::OneMinusSrc1Color, GL_ONE},\n      {BlendFactor::Src1Alpha, GL_ONE},\n      {BlendFactor::OneMinusSrc1Alpha, GL_ONE},\n  };\n\n  for (const auto& [iglFactor, glFactor] : conversions) {\n    ASSERT_EQ(igl::opengl::RenderPipelineState::convertBlendFactor(iglFactor), glFactor);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/BufferMapping.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <cstring>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// BufferMappingOGLTest\n//\n// Tests for buffer mapping operations in OpenGL.\n//\nclass BufferMappingOGLTest : public ::testing::Test {\n public:\n  BufferMappingOGLTest() = default;\n  ~BufferMappingOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// MapBuffer\n//\n// Test mapping a buffer for reading.\n//\nTEST_F(BufferMappingOGLTest, MapBuffer) {\n  if (!context_->deviceFeatures().hasInternalFeature(opengl::InternalFeatures::MapBuffer)) {\n    GTEST_SKIP() << \"MapBuffer not supported\";\n  }\n\n  Result ret;\n  const float data[] = {1.0f, 2.0f, 3.0f, 4.0f};\n  BufferDesc bufDesc;\n  bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n  bufDesc.data = data;\n  bufDesc.length = sizeof(data);\n\n  auto buffer = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  // Map the buffer\n  auto* mapped = buffer->map(BufferRange(sizeof(data), 0), &ret);\n  if (!ret.isOk()) {\n    GTEST_SKIP() << \"Buffer mapping failed: \" << ret.message.c_str();\n  }\n  ASSERT_NE(mapped, nullptr);\n\n  buffer->unmap();\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// MapBufferRange\n//\n// Test mapping a sub-range of a buffer.\n//\nTEST_F(BufferMappingOGLTest, MapBufferRange) {\n  if (!iglDev_->hasFeature(DeviceFeatures::MapBufferRange)) {\n    GTEST_SKIP() << \"MapBufferRange not supported\";\n  }\n\n  Result ret;\n  const float data[] = {1.0f, 2.0f, 3.0f, 4.0f};\n  BufferDesc bufDesc;\n  bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n  bufDesc.data = data;\n  bufDesc.length = sizeof(data);\n\n  auto buffer = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  // Map a range of the buffer (offset 0, 2 floats)\n  auto* mapped = buffer->map(BufferRange(sizeof(float) * 2, 0), &ret);\n  if (!ret.isOk()) {\n    GTEST_SKIP() << \"Buffer range mapping failed: \" << ret.message.c_str();\n  }\n  ASSERT_NE(mapped, nullptr);\n\n  buffer->unmap();\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// WriteAndUnmap\n//\n// Create a dynamic buffer, upload data to it, then map and verify.\n//\nTEST_F(BufferMappingOGLTest, WriteAndUnmap) {\n  if (!context_->deviceFeatures().hasInternalFeature(opengl::InternalFeatures::MapBuffer)) {\n    GTEST_SKIP() << \"MapBuffer not supported\";\n  }\n\n  Result ret;\n  BufferDesc bufDesc;\n  bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n  bufDesc.data = nullptr;\n  bufDesc.length = sizeof(float) * 4;\n  bufDesc.storage = ResourceStorage::Shared;\n\n  auto buffer = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  // Upload data to dynamic buffer\n  const float newData[] = {1.0f, 2.0f, 3.0f, 4.0f};\n  auto uploadResult = buffer->upload(newData, BufferRange(sizeof(newData), 0));\n  ASSERT_TRUE(uploadResult.isOk()) << uploadResult.message.c_str();\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/CommandBufferOGL.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\n//\n// CommandBufferOGLTest\n//\n// Tests for the OpenGL CommandBuffer.\n//\nclass CommandBufferOGLTest : public ::testing::Test {\n public:\n  CommandBufferOGLTest() = default;\n  ~CommandBufferOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n\n    Result ret;\n\n    // Create offscreen texture\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   OFFSCREEN_TEX_WIDTH,\n                                                   OFFSCREEN_TEX_HEIGHT,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n\n    // Create framebuffer\n    FramebufferDesc framebufferDesc;\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n\n    // Initialize render pass\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n};\n\n//\n// CreateFromQueue\n//\n// Create a command buffer from the command queue.\n//\nTEST_F(CommandBufferOGLTest, CreateFromQueue) {\n  Result ret;\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_NE(cmdBuf, nullptr);\n}\n\n//\n// CreateRenderEncoder\n//\n// Create a render command encoder from a command buffer.\n//\nTEST_F(CommandBufferOGLTest, CreateRenderEncoder) {\n  Result ret;\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_NE(cmdBuf, nullptr);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass_, framebuffer_);\n  ASSERT_NE(cmdEncoder, nullptr);\n\n  cmdEncoder->endEncoding();\n}\n\n//\n// SubmitToQueue\n//\n// Submit a command buffer to the queue.\n//\nTEST_F(CommandBufferOGLTest, SubmitToQueue) {\n  Result ret;\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_NE(cmdBuf, nullptr);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass_, framebuffer_);\n  ASSERT_NE(cmdEncoder, nullptr);\n  cmdEncoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n\n  // Verify no GL errors after submission\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/CompressedTexture.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// CompressedTextureOGLTest\n//\n// Tests for compressed texture creation in OpenGL.\n//\nclass CompressedTextureOGLTest : public ::testing::Test {\n public:\n  CompressedTextureOGLTest() = default;\n  ~CompressedTextureOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// CreateCompressed\n//\n// Create a compressed texture if the format is supported, otherwise skip.\n//\nTEST_F(CompressedTextureOGLTest, CreateCompressed) {\n  // Try ETC2 format first (common on GLES 3.0+)\n  TextureFormat format = TextureFormat::RGBA8_EAC_ETC2;\n  auto caps = iglDev_->getTextureFormatCapabilities(format);\n\n  if (!(caps & ICapabilities::TextureFormatCapabilityBits::Sampled)) {\n    // Try ASTC\n    format = TextureFormat::RGBA_ASTC_4x4;\n    caps = iglDev_->getTextureFormatCapabilities(format);\n  }\n\n  if (!(caps & ICapabilities::TextureFormatCapabilityBits::Sampled)) {\n    GTEST_SKIP() << \"No supported compressed texture format found\";\n  }\n\n  Result ret;\n  TextureDesc desc = TextureDesc::new2D(format, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/ComputeCommandAdapter.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/ComputeCommandAdapter.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n\n#include <cstring>\n#include <igl/CommandBuffer.h>\n#include <igl/ComputeCommandEncoder.h>\n#include <igl/ComputePipelineState.h>\n#include <igl/Shader.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// ComputeCommandAdapterOGLTest\n//\n// Tests for the OpenGL ComputeCommandAdapter.\n//\nclass ComputeCommandAdapterOGLTest : public ::testing::Test {\n public:\n  ComputeCommandAdapterOGLTest() = default;\n  ~ComputeCommandAdapterOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// BufferBindingAndDispatch\n//\n// Bind SSBOs, dispatch compute, verify output.\n//\nTEST_F(ComputeCommandAdapterOGLTest, BufferBindingAndDispatch) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    GTEST_SKIP() << \"Compute not supported\";\n  }\n\n  Result ret;\n\n  // Create compute shader stages\n  const std::string computeSource(data::shader::kOglSimpleComputeShader);\n  auto shaderModule = iglDev_->createShaderModule(\n      ShaderModuleDesc::fromStringInput(\n          computeSource.c_str(),\n          {ShaderStage::Compute, std::string(data::shader::kShaderFunc)},\n          \"\"),\n      &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  auto shaderStages = ShaderStagesDesc::fromComputeModule(std::move(shaderModule));\n  auto stages = iglDev_->createShaderStages(shaderStages, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Create compute pipeline\n  ComputePipelineDesc computeDesc;\n  computeDesc.shaderStages = std::move(stages);\n  auto computePipeline = iglDev_->createComputePipeline(computeDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(computePipeline, nullptr);\n\n  // Create input and output buffers\n  const float inputData[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};\n  BufferDesc inputBufDesc;\n  inputBufDesc.type = BufferDesc::BufferTypeBits::Storage;\n  inputBufDesc.data = inputData;\n  inputBufDesc.length = sizeof(inputData);\n  auto inputBuffer = iglDev_->createBuffer(inputBufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  float outputData[6] = {0.0f};\n  BufferDesc outputBufDesc;\n  outputBufDesc.type = BufferDesc::BufferTypeBits::Storage;\n  outputBufDesc.data = outputData;\n  outputBufDesc.length = sizeof(outputData);\n  auto outputBuffer = iglDev_->createBuffer(outputBufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Dispatch\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto computeEncoder = cmdBuf->createComputeCommandEncoder();\n  ASSERT_NE(computeEncoder, nullptr);\n\n  computeEncoder->bindComputePipelineState(computePipeline);\n  computeEncoder->bindBuffer(0, inputBuffer.get());\n  computeEncoder->bindBuffer(1, outputBuffer.get());\n  computeEncoder->dispatchThreadGroups(Dimensions(1, 1, 1), Dimensions(6, 1, 1));\n  computeEncoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n\n  // Verify no GL errors\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// TextureBinding\n//\n// Bind texture for compute sampling.\n//\nTEST_F(ComputeCommandAdapterOGLTest, TextureBinding) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    GTEST_SKIP() << \"Compute not supported\";\n  }\n\n  Result ret;\n\n  // Create a simple texture\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 2,\n                                                 2,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Storage);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  // Texture creation may fail if Storage usage is not supported for this format\n  if (!ret.isOk() || texture == nullptr) {\n    GTEST_SKIP() << \"Cannot create storage texture: \" << ret.message.c_str();\n  }\n\n  // Upload data\n  const uint32_t pixels[] = {0xFF0000FF, 0xFF0000FF, 0xFF0000FF, 0xFF0000FF};\n  texture->upload(TextureRangeDesc::new2D(0, 0, 2, 2), pixels);\n\n  // If we got here without errors, the texture was created and uploaded successfully\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// DirtyStateTracking\n//\n// Change pipeline between dispatches.\n//\nTEST_F(ComputeCommandAdapterOGLTest, DirtyStateTracking) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    GTEST_SKIP() << \"Compute not supported\";\n  }\n\n  Result ret;\n\n  // Create compute shader\n  const std::string computeSource(data::shader::kOglSimpleComputeShader);\n  auto shaderModule = iglDev_->createShaderModule(\n      ShaderModuleDesc::fromStringInput(\n          computeSource.c_str(),\n          {ShaderStage::Compute, std::string(data::shader::kShaderFunc)},\n          \"\"),\n      &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  auto shaderStages = ShaderStagesDesc::fromComputeModule(std::move(shaderModule));\n  auto stages = iglDev_->createShaderStages(shaderStages, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Create compute pipeline\n  ComputePipelineDesc computeDesc;\n  computeDesc.shaderStages = std::move(stages);\n  auto computePipeline = iglDev_->createComputePipeline(computeDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(computePipeline, nullptr);\n\n  // Create buffers\n  const float inputData[] = {1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f};\n  BufferDesc inputBufDesc;\n  inputBufDesc.type = BufferDesc::BufferTypeBits::Storage;\n  inputBufDesc.data = inputData;\n  inputBufDesc.length = sizeof(inputData);\n  auto inputBuffer = iglDev_->createBuffer(inputBufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  float outputData[6] = {0.0f};\n  BufferDesc outputBufDesc;\n  outputBufDesc.type = BufferDesc::BufferTypeBits::Storage;\n  outputBufDesc.data = outputData;\n  outputBufDesc.length = sizeof(outputData);\n  auto outputBuffer = iglDev_->createBuffer(outputBufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Dispatch twice with same pipeline to exercise dirty state tracking\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto computeEncoder = cmdBuf->createComputeCommandEncoder();\n  ASSERT_NE(computeEncoder, nullptr);\n\n  // First dispatch\n  computeEncoder->bindComputePipelineState(computePipeline);\n  computeEncoder->bindBuffer(0, inputBuffer.get());\n  computeEncoder->bindBuffer(1, outputBuffer.get());\n  computeEncoder->dispatchThreadGroups(Dimensions(1, 1, 1), Dimensions(6, 1, 1));\n\n  // Re-bind pipeline (dirties state) and dispatch again\n  computeEncoder->bindComputePipelineState(computePipeline);\n  computeEncoder->bindBuffer(0, inputBuffer.get());\n  computeEncoder->bindBuffer(1, outputBuffer.get());\n  computeEncoder->dispatchThreadGroups(Dimensions(1, 1, 1), Dimensions(6, 1, 1));\n\n  computeEncoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/ComputePipelineStateOGL.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n\n#include <igl/ComputePipelineState.h>\n#include <igl/Shader.h>\n#include <igl/opengl/ComputePipelineState.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// ComputePipelineStateOGLTest\n//\n// Tests for the OpenGL ComputePipelineState.\n//\nclass ComputePipelineStateOGLTest : public ::testing::Test {\n public:\n  ComputePipelineStateOGLTest() = default;\n  ~ComputePipelineStateOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// CreateAndBind\n//\n// Create a compute pipeline, bind and unbind it, check for no GL errors.\n//\nTEST_F(ComputePipelineStateOGLTest, CreateAndBind) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    GTEST_SKIP() << \"Compute not supported\";\n  }\n\n  Result ret;\n\n  const std::string computeSource(data::shader::kOglSimpleComputeShader);\n  auto shaderModule = iglDev_->createShaderModule(\n      ShaderModuleDesc::fromStringInput(\n          computeSource.c_str(),\n          {ShaderStage::Compute, std::string(data::shader::kShaderFunc)},\n          \"\"),\n      &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  auto shaderStages = ShaderStagesDesc::fromComputeModule(std::move(shaderModule));\n  auto stages = iglDev_->createShaderStages(shaderStages, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  ComputePipelineDesc computeDesc;\n  computeDesc.shaderStages = std::move(stages);\n  auto computePipeline = iglDev_->createComputePipeline(computeDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(computePipeline, nullptr);\n\n  // Cast to opengl::ComputePipelineState and test bind/unbind\n  auto* oglPipeline = static_cast<opengl::ComputePipelineState*>(computePipeline.get());\n  ASSERT_NE(oglPipeline, nullptr);\n\n  oglPipeline->bind();\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n\n  oglPipeline->unbind();\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// GetIndexByName\n//\n// Verify that getIndexByName returns valid indices for known buffer names.\n//\nTEST_F(ComputePipelineStateOGLTest, GetIndexByName) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    GTEST_SKIP() << \"Compute not supported\";\n  }\n\n  Result ret;\n\n  const std::string computeSource(data::shader::kOglSimpleComputeShader);\n  auto shaderModule = iglDev_->createShaderModule(\n      ShaderModuleDesc::fromStringInput(\n          computeSource.c_str(),\n          {ShaderStage::Compute, std::string(data::shader::kShaderFunc)},\n          \"\"),\n      &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  auto shaderStages = ShaderStagesDesc::fromComputeModule(std::move(shaderModule));\n  auto stages = iglDev_->createShaderStages(shaderStages, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  ComputePipelineDesc computeDesc;\n  computeDesc.shaderStages = std::move(stages);\n  auto computePipeline = iglDev_->createComputePipeline(computeDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(computePipeline, nullptr);\n\n  // The compute shader has \"floatsIn\" and \"floatsOut\" SSBOs\n  int idx = computePipeline->getIndexByName(IGL_NAMEHANDLE(data::shader::kSimpleComputeInput));\n  // Index should be valid (not -1) if the shader uses SSBOs with these names\n  // Note: the actual value depends on the shader reflection\n  ASSERT_GE(idx, -1); // At minimum, the call should not crash\n\n  idx = computePipeline->getIndexByName(IGL_NAMEHANDLE(data::shader::kSimpleComputeOutput));\n  ASSERT_GE(idx, -1);\n}\n\n//\n// SSBODetection\n//\n// Verify getIsUsingShaderStorageBuffers() returns true for compute shaders with SSBOs.\n//\nTEST_F(ComputePipelineStateOGLTest, SSBODetection) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    GTEST_SKIP() << \"Compute not supported\";\n  }\n\n  Result ret;\n\n  const std::string computeSource(data::shader::kOglSimpleComputeShader);\n  auto shaderModule = iglDev_->createShaderModule(\n      ShaderModuleDesc::fromStringInput(\n          computeSource.c_str(),\n          {ShaderStage::Compute, std::string(data::shader::kShaderFunc)},\n          \"\"),\n      &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  auto shaderStages = ShaderStagesDesc::fromComputeModule(std::move(shaderModule));\n  auto stages = iglDev_->createShaderStages(shaderStages, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  ComputePipelineDesc computeDesc;\n  computeDesc.shaderStages = std::move(stages);\n  auto computePipeline = iglDev_->createComputePipeline(computeDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(computePipeline, nullptr);\n\n  auto* oglPipeline = static_cast<opengl::ComputePipelineState*>(computePipeline.get());\n  ASSERT_NE(oglPipeline, nullptr);\n\n  // The simple compute shader uses SSBOs\n  ASSERT_TRUE(oglPipeline->getIsUsingShaderStorageBuffers());\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/Context.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/Common.h>\n#include <igl/DeviceFeatures.h>\n#include <igl/Texture.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/Texture.h>\n\n#define DUMMY_FILE_NAME \"dummy_file_name\"\n#define DUMMY_LINE_NUM 0\n\nnamespace igl::tests {\n\nclass ContextOGLTest : public ::testing::Test {\n public:\n  ContextOGLTest() = default;\n  ~ContextOGLTest() override = default;\n\n  void SetUp() override {\n    // We will be purposely tripping a few ASSERT conditions\n    igl::setDebugBreakEnabled(false);\n\n    device_ = util::createTestDevice();\n    ASSERT_TRUE(device_ != nullptr);\n    context_ = &static_cast<opengl::Device&>(*device_).getContext();\n    ASSERT_TRUE(context_ != nullptr);\n\n    // Need to do this to support the CheckForError tests, otherwise the error\n    // code will get reset before we read it\n    context_->enableAutomaticErrorCheck(false);\n  }\n\n  void TearDown() override {}\n\n protected:\n  opengl::IContext* context_{};\n  std::shared_ptr<IDevice> device_;\n};\n\n/// Test basic functionality for binding GL_FRAMEBUFFER.\nTEST_F(ContextOGLTest, GlBindFramebuffer) {\n  GLuint framebufferId = 0;\n  context_->genFramebuffers(1, &framebufferId);\n\n  context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferId);\n\n  GLint retrievedFramebuffer = -1;\n  context_->getIntegerv(GL_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n  ASSERT_EQ(framebufferId, retrievedFramebuffer);\n\n  // Clean up\n  context_->bindFramebuffer(GL_FRAMEBUFFER, 0);\n  context_->deleteFramebuffers(1, &framebufferId);\n}\n\n/// On platforms that support GL_READ_FRAMEBUFFER and GL_DRAW_FRAMEBUFFER, binding GL_FRAMEBUFFER\n/// should be equivalent to binding both of them to the same value.\nTEST_F(ContextOGLTest, GlFramebufferBindSetsBothDrawFramebufferAndReadFramebuffer) {\n  // This doesn't apply on platforms with no support for GL_READ_FRAMEBUFFER/GL_DRAW_FRAMEBUFFER\n  if (context_->deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    GLuint framebufferIds[2];\n    context_->genFramebuffers(2, framebufferIds);\n\n    context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferIds[0]);\n\n    GLint retrievedFramebuffer = -1;\n    context_->getIntegerv(GL_READ_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n    ASSERT_EQ(framebufferIds[0], retrievedFramebuffer);\n\n    retrievedFramebuffer = -1;\n    context_->getIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n    ASSERT_EQ(framebufferIds[0], retrievedFramebuffer);\n\n    // Clean up\n    context_->bindFramebuffer(GL_FRAMEBUFFER, 0);\n    context_->deleteFramebuffers(2, framebufferIds);\n  }\n}\n\n/// We have to make sure our state cache works properly with the combination of GL_FRAMEBUFFER and\n/// GL_DRAW_FRAMEBUFFER. If we bind GL_DRAW_FRAMEBUFFER to value A, then GL_FRAMEBUFFER to a\n/// different value B, we have to make sure the state cache reflects the fact that\n/// GL_DRAW_FRAMEBUFFER is now bound to B. Binding GL_DRAW_FRAMEBUFFER to A again should NOT be\n/// handled just in the cache layer, but should actually be sent through to OpenGL.\nTEST_F(ContextOGLTest, StateCacheUpdatesGLDrawFramebufferCacheEvenWhenSettingGLFramebuffer) {\n  // This doesn't apply on platforms with no support for GL_DRAW_FRAMEBUFFER\n  if (context_->deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    GLuint framebufferIds[2];\n    context_->genFramebuffers(2, framebufferIds);\n\n    // Validate that the state cache doesn't get confused when switching between GL_FRAMEBUFFER\n    // and GL_DRAW_FRAMEBUFFER\n    context_->bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferIds[0]);\n    context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferIds[1]);\n    // This should still set the value, assuming our cache is working properly\n    context_->bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferIds[0]);\n\n    GLint retrievedFramebuffer = -1;\n    context_->getIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n    ASSERT_EQ(framebufferIds[0], retrievedFramebuffer);\n\n    retrievedFramebuffer = -1;\n    context_->getIntegerv(GL_READ_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n    ASSERT_EQ(framebufferIds[1], retrievedFramebuffer);\n\n    // Clean up\n    context_->bindFramebuffer(GL_FRAMEBUFFER, 0);\n    context_->deleteFramebuffers(2, framebufferIds);\n  }\n}\n\n/// We have to make sure our state cache works properly with the combination of GL_FRAMEBUFFER and\n/// GL_READ_FRAMEBUFFER. If we bind GL_READ_FRAMEBUFFER to value A, then GL_FRAMEBUFFER to a\n/// different value B, we have to make sure the state cache reflects the fact that\n/// GL_READ_FRAMEBUFFER is now bound to B. Binding GL_READ_FRAMEBUFFER to A again should NOT be\n/// handled just in the cache layer, but should actually be sent through to OpenGL.\nTEST_F(ContextOGLTest, StateCacheUpdatesGLReadFramebufferCacheEvenWhenSettingGLFramebuffer) {\n  // This doesn't apply on platforms with no support for GL_READ_FRAMEBUFFER\n  if (context_->deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    GLuint framebufferIds[2];\n    context_->genFramebuffers(2, framebufferIds);\n\n    // Validate that the state cache doesn't get confused when switching between GL_FRAMEBUFFER\n    // and GL_READ_FRAMEBUFFER\n    context_->bindFramebuffer(GL_READ_FRAMEBUFFER, framebufferIds[0]);\n    context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferIds[1]);\n    // This should still set the value, assuming our cache is working properly\n    context_->bindFramebuffer(GL_READ_FRAMEBUFFER, framebufferIds[0]);\n\n    GLint retrievedFramebuffer = -1;\n    context_->getIntegerv(GL_READ_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n    ASSERT_EQ(framebufferIds[0], retrievedFramebuffer);\n\n    retrievedFramebuffer = -1;\n    context_->getIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n    ASSERT_EQ(framebufferIds[1], retrievedFramebuffer);\n\n    // Clean up\n    context_->bindFramebuffer(GL_FRAMEBUFFER, 0);\n    context_->deleteFramebuffers(2, framebufferIds);\n  }\n}\n\n/// This test is to make sure that we properly invalidate the GL_FRAMEBUFFER\n/// binding point when the GL_DRAW_FRAMEBUFFER binding points is used\nTEST_F(ContextOGLTest, StateCacheInvalidateFramebufferCacheWhenSettingGLWriteFramebuffer) {\n  // Doesn't apply to platforms with no GL_DRAW_FRAMEBUFFER support\n  if (context_->deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    GLuint framebufferIds[2];\n    context_->genFramebuffers(2, framebufferIds);\n\n    context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferIds[0]);\n    context_->bindFramebuffer(GL_DRAW_FRAMEBUFFER, framebufferIds[1]);\n\n    // This should result in a call to OpenGL because the cache should have\n    // been reset\n    context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferIds[0]);\n\n    GLint retrievedFramebuffer = -1;\n    context_->getIntegerv(GL_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n    ASSERT_EQ(framebufferIds[0], retrievedFramebuffer);\n\n    // Clean up\n    context_->bindFramebuffer(GL_FRAMEBUFFER, 0);\n    context_->deleteFramebuffers(2, framebufferIds);\n  }\n}\n\n/// This test is to make sure that we properly invalidate the GL_FRAMEBUFFER\n/// binding point when the GL_READ_FRAMEBUFFER binding points is used\nTEST_F(ContextOGLTest, StateCacheInvalidateFramebufferCacheWhenSettingGLReadFramebuffer) {\n  // Doesn't apply to platforms with no GL_READ_FRAMEBUFFER support\n  if (context_->deviceFeatures().hasFeature(DeviceFeatures::ReadWriteFramebuffer)) {\n    GLuint framebufferIds[2];\n    context_->genFramebuffers(2, framebufferIds);\n\n    context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferIds[0]);\n    context_->bindFramebuffer(GL_READ_FRAMEBUFFER, framebufferIds[1]);\n\n    // This should result in a call to OpenGL because the cache should have\n    // been reset\n    context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferIds[0]);\n\n    GLint retrievedFramebuffer = -1;\n    context_->getIntegerv(GL_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n    ASSERT_EQ(framebufferIds[0], retrievedFramebuffer);\n\n    // Clean up\n    context_->bindFramebuffer(GL_FRAMEBUFFER, 0);\n    context_->deleteFramebuffers(2, framebufferIds);\n  }\n}\n\n/// This test is a sanity check that we should not have a GL error out of\n/// the blue.\nTEST_F(ContextOGLTest, CheckForErrorsNoError) {\n  const GLenum ret = context_->checkForErrors(DUMMY_FILE_NAME, DUMMY_LINE_NUM);\n  ASSERT_EQ(ret, GL_NO_ERROR);\n}\n\nTEST_F(ContextOGLTest, CheckForErrorsInvalidEnum) {\n  // GL_INVALID_ENUM\n  context_->activeTexture(GL_SRC_ALPHA);\n\n  const GLenum ret = context_->checkForErrors(DUMMY_FILE_NAME, DUMMY_LINE_NUM);\n  ASSERT_EQ(ret, GL_INVALID_ENUM);\n}\n\n#ifndef GL_UNSIGNED_SHORT_4_4_4_4\n#define GL_UNSIGNED_SHORT_4_4_4_4 0x8033\n#endif\n/// This test purposely triggers the Invalid Operation error and check\n/// to see that the right error code is returned.\nTEST_F(ContextOGLTest, CheckForErrorsInvalidOperation) {\n  GLuint textureMap = 0;\n  context_->genTextures(1, &textureMap);\n  context_->bindTexture(GL_TEXTURE_2D, textureMap);\n  context_->texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);\n  context_->bindTexture(GL_TEXTURE_2D, 0);\n\n  GLuint framebufferId = 0;\n  context_->genFramebuffers(1, &framebufferId);\n\n  context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferId);\n  context_->framebufferTexture2D(\n      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureMap, 0);\n\n  GLint retrievedFramebuffer = -1;\n  context_->getIntegerv(GL_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n  ASSERT_EQ(framebufferId, retrievedFramebuffer);\n\n  // GL_INVALID_OPERATION is generated if type is GL_UNSIGNED_SHORT_4_4_4_4 and format is not\n  // GL_RGBA.\n  char data[100];\n  context_->readPixels(1, 1, 1, 1, GL_RED, GL_UNSIGNED_SHORT_4_4_4_4, data);\n\n  const GLenum ret = context_->checkForErrors(DUMMY_FILE_NAME, DUMMY_LINE_NUM);\n  ASSERT_EQ(ret, GL_INVALID_OPERATION);\n\n  // Clean up\n  context_->bindTexture(GL_TEXTURE_2D, textureMap);\n  context_->deleteTextures(1, &textureMap);\n\n  context_->bindFramebuffer(GL_FRAMEBUFFER, 0);\n  context_->deleteFramebuffers(1, &framebufferId);\n}\n\n/// This test purposely triggers the Invalid Value error and check\n/// to see that the right error code is returned.\nTEST_F(ContextOGLTest, CheckForErrorsInvalidValue) {\n  GLuint textureMap = 0;\n  context_->genTextures(1, &textureMap);\n  context_->bindTexture(GL_TEXTURE_2D, textureMap);\n  context_->texImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);\n  context_->bindTexture(GL_TEXTURE_2D, 0);\n\n  GLuint framebufferId = 0;\n  context_->genFramebuffers(1, &framebufferId);\n\n  context_->bindFramebuffer(GL_FRAMEBUFFER, framebufferId);\n  context_->framebufferTexture2D(\n      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureMap, 0);\n\n  GLint retrievedFramebuffer = -1;\n  context_->getIntegerv(GL_FRAMEBUFFER_BINDING, &retrievedFramebuffer);\n  ASSERT_EQ(framebufferId, retrievedFramebuffer);\n  // GL_INVALID_VALUE is generated if any bit other than the eligible bits is set in mask.\n  context_->clear(0XFFFFFFFF);\n\n  const GLenum ret = context_->checkForErrors(DUMMY_FILE_NAME, DUMMY_LINE_NUM);\n  ASSERT_EQ(ret, GL_INVALID_VALUE);\n\n  // Clean up\n  context_->bindTexture(GL_TEXTURE_2D, textureMap);\n  context_->deleteTextures(1, &textureMap);\n\n  context_->bindFramebuffer(GL_FRAMEBUFFER, 0);\n  context_->deleteFramebuffers(1, &framebufferId);\n}\n\n/// This test purposely triggers the Invalid Framebuffer error and check\n/// to see that the right error code is returned.\nTEST_F(ContextOGLTest, CheckForErrorsInvalidFrameBufferOperation) {\n  unsigned int frameBuffer = 0;\n  context_->genFramebuffers(1, &frameBuffer);\n  context_->bindFramebuffer(GL_FRAMEBUFFER, frameBuffer);\n\n  // Make sure frame buffer is not complete yet, so glClear generates\n  // GL_INVALID_FRAMEBUFFER_OPERATION.\n  if (context_->checkFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {\n    context_->clear(GL_COLOR_BUFFER_BIT);\n\n    const GLenum ret = context_->checkForErrors(DUMMY_FILE_NAME, DUMMY_LINE_NUM);\n    ASSERT_EQ(ret, GL_INVALID_FRAMEBUFFER_OPERATION);\n  }\n\n  // Clean up\n  context_->bindFramebuffer(GL_FRAMEBUFFER, 0);\n  context_->deleteFramebuffers(1, &frameBuffer);\n}\n\n/// Verify that an object is visible across contexts in the same sharegroup\nTEST_F(ContextOGLTest, BasicSharedContexts) {\n#if IGL_PLATFORM_WINDOWS && !IGL_ANGLE\n  GTEST_SKIP() << \"Context sharing not implemented in opengl::wgl\";\n#endif\n  // Setup is three contexts, (1) and (2) part of the same sharegroup and (3) not.\n  Result result;\n  auto sharedContext = context_->createShareContext(&result);\n  ASSERT_TRUE(result.isOk());\n\n  auto unsharedDevice = util::createTestDevice();\n  ASSERT_TRUE(unsharedDevice != nullptr);\n  auto* unsharedContext = &static_cast<opengl::Device&>(*unsharedDevice).getContext();\n  ASSERT_TRUE(unsharedDevice != nullptr);\n\n  // Create texture from context (1)\n  context_->setCurrent();\n\n  ASSERT_TRUE(context_->isCurrentContext());\n  ASSERT_FALSE(sharedContext->isCurrentContext());\n  ASSERT_FALSE(unsharedContext->isCurrentContext());\n\n  ASSERT_TRUE(context_->isCurrentSharegroup());\n  ASSERT_TRUE(sharedContext->isCurrentSharegroup());\n  ASSERT_FALSE(unsharedContext->isCurrentSharegroup());\n\n  const igl::TextureDesc textureDesc = igl::TextureDesc::new2D(\n      igl::TextureFormat::RGBA_UNorm8, 16, 16, igl::TextureDesc::TextureUsageBits::Sampled);\n  auto texture = device_->createTexture(textureDesc, &result);\n  ASSERT_TRUE(result.isOk());\n\n  const uint64_t glTextureId = static_cast<opengl::Texture*>(texture.get())->getId();\n  context_->flush(); // Required for texture to be visible from other contexts\n\n  // Confirm that texture is visible from context (2)\n  sharedContext->setCurrent();\n\n  ASSERT_FALSE(context_->isCurrentContext());\n  ASSERT_TRUE(sharedContext->isCurrentContext());\n  ASSERT_FALSE(unsharedContext->isCurrentContext());\n\n  ASSERT_TRUE(context_->isCurrentSharegroup());\n  ASSERT_TRUE(sharedContext->isCurrentSharegroup());\n  ASSERT_FALSE(unsharedContext->isCurrentSharegroup());\n\n  ASSERT_TRUE(sharedContext->isTexture(glTextureId));\n\n  // Confirm that texture is not visible from context (3)\n  unsharedContext->setCurrent();\n\n  ASSERT_FALSE(context_->isCurrentContext());\n  ASSERT_FALSE(sharedContext->isCurrentContext());\n  ASSERT_TRUE(unsharedContext->isCurrentContext());\n\n  ASSERT_FALSE(context_->isCurrentSharegroup());\n  ASSERT_FALSE(sharedContext->isCurrentSharegroup());\n  ASSERT_TRUE(unsharedContext->isCurrentSharegroup());\n\n  ASSERT_FALSE(unsharedContext->isTexture(glTextureId));\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/CopyTexSubImage.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// CopyTexSubImageOGLTest\n//\n// Tests for glCopyTexSubImage2D operations via IGL.\n//\nclass CopyTexSubImageOGLTest : public ::testing::Test {\n public:\n  CopyTexSubImageOGLTest() = default;\n  ~CopyTexSubImageOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// CopyTexSubImage2D\n//\n// Create a framebuffer, render to it, then copy a sub-region to a texture.\n//\nTEST_F(CopyTexSubImageOGLTest, CopyTexSubImage2D) {\n  Result ret;\n\n  // Create source framebuffer and clear to red\n  const TextureDesc srcTexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                    4,\n                                                    4,\n                                                    TextureDesc::TextureUsageBits::Sampled |\n                                                        TextureDesc::TextureUsageBits::Attachment);\n  auto srcTexture = iglDev_->createTexture(srcTexDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  FramebufferDesc srcFbDesc;\n  srcFbDesc.colorAttachments[0].texture = srcTexture;\n  auto srcFramebuffer = iglDev_->createFramebuffer(srcFbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Clear to red\n  RenderPassDesc renderPass;\n  renderPass.colorAttachments.resize(1);\n  renderPass.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass.colorAttachments[0].storeAction = StoreAction::Store;\n  renderPass.colorAttachments[0].clearColor = {1.0, 0.0, 0.0, 1.0};\n\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass, srcFramebuffer);\n  ASSERT_NE(cmdEncoder, nullptr);\n  cmdEncoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n\n  // Create destination texture\n  const TextureDesc dstTexDesc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto dstTexture = iglDev_->createTexture(dstTexDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Use copyTextureColorAttachment if available\n  auto dstFbDesc = FramebufferDesc{};\n  dstFbDesc.colorAttachments[0].texture = dstTexture;\n\n  // Copy using framebuffer's copy method\n  srcFramebuffer->copyTextureColorAttachment(\n      *cmdQueue_, 0, dstTexture, TextureRangeDesc::new2D(0, 0, 4, 4));\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/CubeMapAttachment.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/Framebuffer.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// CubeMapAttachmentOGLTest\n//\n// Tests for cube map texture creation and face attachment.\n//\nclass CubeMapAttachmentOGLTest : public ::testing::Test {\n public:\n  CubeMapAttachmentOGLTest() = default;\n  ~CubeMapAttachmentOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// CreateCubeTexture\n//\n// Create a cube map texture.\n//\nTEST_F(CubeMapAttachmentOGLTest, CreateCubeTexture) {\n  Result ret;\n  TextureDesc desc = TextureDesc::newCube(\n      TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n  ASSERT_EQ(texture->getType(), TextureType::Cube);\n}\n\n//\n// AttachFace\n//\n// Attach a cube map face to a framebuffer.\n//\nTEST_F(CubeMapAttachmentOGLTest, AttachFace) {\n  Result ret;\n\n  // Create cube texture with attachment usage\n  TextureDesc desc = TextureDesc::newCube(TextureFormat::RGBA_UNorm8,\n                                          4,\n                                          4,\n                                          TextureDesc::TextureUsageBits::Sampled |\n                                              TextureDesc::TextureUsageBits::Attachment);\n  auto cubeTexture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cubeTexture, nullptr);\n\n  // Create a framebuffer with one face of the cube map\n  // Note: In IGL, cube map attachment uses the whole texture;\n  // face selection is implementation-specific\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = cubeTexture;\n\n  auto framebuffer = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(framebuffer, nullptr);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/DebugOutput.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// DebugOutputOGLTest\n//\n// Tests for OpenGL debug output functionality.\n//\nclass DebugOutputOGLTest : public ::testing::Test {\n public:\n  DebugOutputOGLTest() = default;\n  ~DebugOutputOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// DebugMessageLogNoError\n//\n// Query debug message log and verify no errors.\n//\nTEST_F(DebugOutputOGLTest, DebugMessageLogNoError) {\n  if (!context_->deviceFeatures().hasInternalFeature(opengl::InternalFeatures::DebugMessage)) {\n    GTEST_SKIP() << \"Debug messages not supported\";\n  }\n\n  // Try to get debug messages - there may not be any\n  GLenum sources[1];\n  GLenum types[1];\n  GLuint ids[1];\n  GLenum severities[1];\n  GLsizei lengths[1];\n  GLchar messageLog[256];\n\n  // getDebugMessageLog should not crash, even when no messages are available\n  GLuint count = context_->getDebugMessageLog(\n      1, sizeof(messageLog), sources, types, ids, severities, lengths, messageLog);\n\n  // Count should be 0 or 1 (whatever messages may be in the log)\n  ASSERT_LE(count, 1u);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/DepthRange.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// DepthRangeOGLTest\n//\n// Tests for glDepthRangef operations in OpenGL.\n//\nclass DepthRangeOGLTest : public ::testing::Test {\n public:\n  DepthRangeOGLTest() = default;\n  ~DepthRangeOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// DepthRangeNoError\n//\n// Set the depth range and verify no GL errors.\n//\nTEST_F(DepthRangeOGLTest, DepthRangeNoError) {\n  // Set depth range to standard [0, 1]\n  context_->depthRangef(0.0f, 1.0f);\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n\n  // Set depth range to a custom range [0.25, 0.75]\n  context_->depthRangef(0.25f, 0.75f);\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n\n  // Restore default\n  context_->depthRangef(0.0f, 1.0f);\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/DepthStencilState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/DepthStencilState.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../data/VertexIndexData.h\"\n#include \"../util/Common.h\"\n\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\n//\n// DepthStencilStateTest\n//\n// Tests functions within DepthStencilState module.\n//\nclass DepthStencilStateTest : public ::testing::Test {\n public:\n  DepthStencilStateTest() = default;\n  ~DepthStencilStateTest() override = default;\n\n  // Set up common resources.\n  // This function sets up a render pass and a graphics pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false); // only use in debug mode\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    Result ret;\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   OFFSCREEN_TEX_WIDTH,\n                                                   OFFSCREEN_TEX_HEIGHT,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize Render Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  std::shared_ptr<ICommandBuffer> cmdEncoder_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> ib_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n};\n\n//\n// Passthrough Test\n//\n// Check binding of Depth Stencil State is successful.\n//\nTEST_F(DepthStencilStateTest, Passthrough) {\n  Result ret;\n  std::shared_ptr<IDepthStencilState> idss;\n\n  const DepthStencilStateDesc dsDesc;\n  idss = iglDev_->createDepthStencilState(dsDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(idss != nullptr);\n\n  // Test initialization of DepthStencilState in CommandEncoder\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n  auto cmdEncoder = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  // No asserts, just test the passthroughs are successful\n  cmdEncoder->bindDepthStencilState(idss);\n  auto* dss = static_cast<igl::opengl::DepthStencilState*>(idss.get());\n  dss->bind(0, 0); // Test bind passthrough\n  dss->unbind();\n}\n\n//\n// Compare Function to OGL Test\n//\n// Check expected outputs for igl::opengl::DepthStencilState::convertCompareFunction\n//\nTEST_F(DepthStencilStateTest, CompareFunctionToOGL) {\n  struct CompareFuncConversion {\n    CompareFunction igl = igl::CompareFunction::Never;\n    GLenum ogl = GL_NEVER;\n  };\n\n  const std::vector<CompareFuncConversion> conversions{\n      CompareFuncConversion{igl::CompareFunction::Never, GL_NEVER},\n      CompareFuncConversion{igl::CompareFunction::Less, GL_LESS},\n      CompareFuncConversion{igl::CompareFunction::Equal, GL_EQUAL},\n      CompareFuncConversion{igl::CompareFunction::LessEqual, GL_LEQUAL},\n      CompareFuncConversion{igl::CompareFunction::Greater, GL_GREATER},\n      CompareFuncConversion{igl::CompareFunction::NotEqual, GL_NOTEQUAL},\n      CompareFuncConversion{igl::CompareFunction::GreaterEqual, GL_GEQUAL},\n      CompareFuncConversion{igl::CompareFunction::AlwaysPass, GL_ALWAYS},\n  };\n\n  for (auto data : conversions) {\n    const GLenum ogl = igl::opengl::DepthStencilState::convertCompareFunction(data.igl);\n    ASSERT_EQ(ogl, data.ogl);\n  }\n}\n\n//\n// Stencil Operation to OGL Test\n//\n// Check expected outputs for igl::opengl::DepthStencilState::convertStencilOperation\n//\nTEST_F(DepthStencilStateTest, StencilOperationToOGL) {\n  struct StencilOpConversion {\n    StencilOperation igl = igl::StencilOperation::Keep;\n    GLenum ogl = GL_KEEP;\n  };\n\n  const std::vector<StencilOpConversion> conversions{\n      StencilOpConversion{igl::StencilOperation::Keep, GL_KEEP},\n      StencilOpConversion{igl::StencilOperation::Zero, GL_ZERO},\n      StencilOpConversion{igl::StencilOperation::Replace, GL_REPLACE},\n      StencilOpConversion{igl::StencilOperation::IncrementClamp, GL_INCR},\n      StencilOpConversion{igl::StencilOperation::DecrementClamp, GL_DECR},\n      StencilOpConversion{igl::StencilOperation::Invert, GL_INVERT},\n      StencilOpConversion{igl::StencilOperation::IncrementWrap, GL_INCR_WRAP},\n      StencilOpConversion{igl::StencilOperation::DecrementWrap, GL_DECR_WRAP},\n  };\n\n  for (auto data : conversions) {\n    const GLenum ogl = igl::opengl::DepthStencilState::convertStencilOperation(data.igl);\n    ASSERT_EQ(ogl, data.ogl);\n  }\n}\n\n//\n// Set Stencil reference value and Check back Test\n//\nTEST_F(DepthStencilStateTest, SetStencilReferenceValueAndCheck) {\n  Result ret;\n  std::shared_ptr<IDepthStencilState> idss;\n\n  DepthStencilStateDesc dsDesc;\n  dsDesc.isDepthWriteEnabled = true;\n\n  idss = iglDev_->createDepthStencilState(dsDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(idss != nullptr);\n\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  // Test initialization of DepthStencilState in CommandEncoder\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n  auto cmdEncoder = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  //------------------------------------------\n  // First Read the Default Values\n  //------------------------------------------\n\n  // Dummy draw just to force binding of the states\n  cmdEncoder->bindRenderPipelineState(pipelineState);\n  cmdEncoder->bindDepthStencilState(idss);\n  cmdEncoder->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmdEncoder->drawIndexed(0);\n  cmdEncoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf_);\n\n  // Read back default reference value here\n  opengl::IContext* ctx = nullptr;\n  ctx = &static_cast<igl::opengl::Device&>(*iglDev_).getContext();\n  GLboolean origIsDepthWriteEnabled = 0, newIsDepthWriteEnabled = 0;\n  GLint origDepthFunVal = 0, newDepthFunVal = 0;\n  GLint origFrontCompareFunc = 0, newFrontCompareFunc = 0;\n  GLint origBackCompareFunc = 0, newBackCompareFunc = 0;\n\n  GLint origStencilBackFail = 0, newStencilBackFail = 0;\n  GLint origStencilFail = 0, newStencilFail = 0;\n  GLint origStencilPassDepthFail = 0, newStencilPassDepthFail = 0;\n  GLint origStencilPassDepthPass = 0, newStencilPassDepthPass = 0;\n\n  GLint origStencilBackWriteMask = 0, newStencilBackWriteMask = 0;\n  GLint origStencilWriteMask = 0, newStencilWriteMask = 0;\n\n  ctx->getBooleanv(GL_DEPTH_WRITEMASK, &origIsDepthWriteEnabled);\n  ctx->getIntegerv(GL_DEPTH_FUNC, &origDepthFunVal);\n\n  ASSERT_TRUE((bool)origIsDepthWriteEnabled == dsDesc.isDepthWriteEnabled);\n  ASSERT_TRUE(origDepthFunVal ==\n              opengl::DepthStencilState::convertCompareFunction(dsDesc.compareFunction));\n\n  // Read Front Compare Func\n  ctx->getIntegerv(GL_STENCIL_FUNC, &origFrontCompareFunc);\n  // Read Back Compare Func\n  ctx->getIntegerv(GL_STENCIL_BACK_FUNC, &origBackCompareFunc);\n\n  // Read GL_STENCIL_BACK_FAIL (initial value = GL_KEEP)\n  ctx->getIntegerv(GL_STENCIL_BACK_FAIL, &origStencilBackFail);\n  // Read GL_STENCIL_FAIL (initial value = GL_KEEP)\n  ctx->getIntegerv(GL_STENCIL_FAIL, &origStencilFail);\n  // Read GL_STENCIL_PASS_DEPTH_FAIL (initial value = GL_KEEP)\n  ctx->getIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, &origStencilPassDepthFail);\n  // Read GL_STENCIL_PASS_DEPTH_PASS (initial value = GL_KEEP)\n  ctx->getIntegerv(GL_STENCIL_PASS_DEPTH_PASS, &origStencilPassDepthPass);\n  // Read GL_STENCIL_BACK_WRITEMASK (initial value = 0xff)\n  ctx->getIntegerv(GL_STENCIL_BACK_WRITEMASK, &origStencilBackWriteMask);\n  // Read GL_STENCIL_WRITEMASK (initial value = 0xff)\n  ctx->getIntegerv(GL_STENCIL_WRITEMASK, &origStencilWriteMask);\n\n  //-------------------------------------------------------\n  // Try Setting Stencil Reference values\n  //-------------------------------------------------------\n  // Create a new DepthStencilDesc\n  DepthStencilStateDesc newDsDesc;\n  newDsDesc.isDepthWriteEnabled = true;\n  newDsDesc.compareFunction = CompareFunction::Greater;\n  newDsDesc.frontFaceStencil.stencilCompareFunction = CompareFunction::Greater;\n  newDsDesc.backFaceStencil.stencilCompareFunction = CompareFunction::Greater;\n\n  newDsDesc.backFaceStencil.stencilFailureOperation = StencilOperation::DecrementClamp;\n  newDsDesc.backFaceStencil.depthFailureOperation = StencilOperation::Invert;\n  newDsDesc.backFaceStencil.depthStencilPassOperation = StencilOperation::IncrementWrap;\n\n  newDsDesc.frontFaceStencil.stencilFailureOperation = StencilOperation::DecrementClamp;\n  newDsDesc.frontFaceStencil.depthFailureOperation = StencilOperation::Invert;\n  newDsDesc.frontFaceStencil.depthStencilPassOperation = StencilOperation::IncrementWrap;\n\n  // GLES stencil is limited to 8 bits (0xFF), at least on Adreno GPUs\n  if (iglDev_->getBackendVersion().flavor == BackendFlavor::OpenGL_ES) {\n    newDsDesc.backFaceStencil.writeMask = 0xad;\n    newDsDesc.frontFaceStencil.writeMask = 0xef;\n  } else {\n    newDsDesc.backFaceStencil.writeMask = 0xdead;\n    newDsDesc.frontFaceStencil.writeMask = 0xbeef;\n  }\n\n  // Create the Depth Stencil State from the new Depth Stencil Descriptor\n  idss = iglDev_->createDepthStencilState(newDsDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(idss != nullptr);\n\n  ctx->enable(GL_DEPTH_TEST);\n  ctx->depthFunc(opengl::DepthStencilState::convertCompareFunction(newDsDesc.compareFunction));\n  const GLuint mask{0xff};\n  ctx->stencilFuncSeparate(\n      GL_FRONT,\n      opengl::DepthStencilState::convertCompareFunction(newDsDesc.compareFunction),\n      0xaa,\n      mask);\n  ctx->stencilFuncSeparate(\n      GL_BACK,\n      opengl::DepthStencilState::convertCompareFunction(newDsDesc.compareFunction),\n      0xbb,\n      mask);\n  GLenum sfail = opengl::DepthStencilState::convertStencilOperation(\n      newDsDesc.backFaceStencil.stencilFailureOperation);\n  GLenum dpfail = opengl::DepthStencilState::convertStencilOperation(\n      newDsDesc.backFaceStencil.depthFailureOperation);\n  GLenum dppass = opengl::DepthStencilState::convertStencilOperation(\n      newDsDesc.backFaceStencil.depthStencilPassOperation);\n  ctx->stencilOpSeparate(GL_BACK, sfail, dpfail, dppass);\n\n  sfail = opengl::DepthStencilState::convertStencilOperation(\n      newDsDesc.frontFaceStencil.stencilFailureOperation);\n  dpfail = opengl::DepthStencilState::convertStencilOperation(\n      newDsDesc.frontFaceStencil.depthFailureOperation);\n  dppass = opengl::DepthStencilState::convertStencilOperation(\n      newDsDesc.frontFaceStencil.depthStencilPassOperation);\n  ctx->stencilOpSeparate(GL_FRONT, sfail, dpfail, dppass);\n\n  ctx->stencilMaskSeparate(GL_BACK, newDsDesc.backFaceStencil.writeMask);\n  ctx->stencilMaskSeparate(GL_FRONT, newDsDesc.frontFaceStencil.writeMask);\n\n  cmdEncoder = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n\n  // Dummy draw just to force binding of the states\n  cmdEncoder->bindRenderPipelineState(pipelineState);\n  cmdEncoder->bindDepthStencilState(idss);\n\n  cmdEncoder->setStencilReferenceValue(2);\n\n  cmdEncoder->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmdEncoder->drawIndexed(0);\n  cmdEncoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf_);\n\n  // Read back reference value here\n  // Read Front Front Compare Func\n  ctx->getIntegerv(GL_STENCIL_FUNC, &newFrontCompareFunc);\n  // Read Back Comapare Func\n  ctx->getIntegerv(GL_STENCIL_BACK_FUNC, &newBackCompareFunc);\n  // Read GL_STENCIL_BACK_FAIL (initial value = GL_KEEP)\n  ctx->getIntegerv(GL_STENCIL_BACK_FAIL, &newStencilBackFail);\n  // Read GL_STENCIL_FAIL (initial value = GL_KEEP)\n  ctx->getIntegerv(GL_STENCIL_FAIL, &newStencilFail);\n  // Read GL_STENCIL_PASS_DEPTH_FAIL (initial value = GL_KEEP)\n  ctx->getIntegerv(GL_STENCIL_PASS_DEPTH_FAIL, &newStencilPassDepthFail);\n  // Read GL_STENCIL_PASS_DEPTH_PASS (initial value = GL_KEEP)\n  ctx->getIntegerv(GL_STENCIL_PASS_DEPTH_PASS, &newStencilPassDepthPass);\n  // Read GL_STENCIL_BACK_WRITEMASK (initial value = 0xff)\n  ctx->getIntegerv(GL_STENCIL_BACK_WRITEMASK, &newStencilBackWriteMask);\n  // Read GL_STENCIL_WRITEMASK (initial value = 0xff)\n  ctx->getIntegerv(GL_STENCIL_WRITEMASK, &newStencilWriteMask);\n\n  // Test the default values\n  ASSERT_TRUE(GL_ALWAYS == origFrontCompareFunc);\n  ASSERT_TRUE(GL_ALWAYS == origBackCompareFunc);\n  ASSERT_TRUE(GL_KEEP == origStencilBackFail);\n  ASSERT_TRUE(GL_KEEP == origStencilFail);\n  ASSERT_TRUE(GL_KEEP == origStencilPassDepthFail);\n  ASSERT_TRUE(GL_KEEP == origStencilPassDepthPass);\n\n#if (defined(IGL_PLATFORM_LINUX) && IGL_PLATFORM_LINUX) || defined(IGL_ANGLE) && IGL_ANGLE\n  // For unknown reasons ANGLE clamps masks to int type.\n  ASSERT_TRUE(0x7fffffff == origStencilBackWriteMask);\n  ASSERT_TRUE(0x7fffffff == origStencilWriteMask);\n#else\n  // GLES stencil mask is limited to 8 bits (0xFF), at least on Adreno GPUs\n#if IGL_PLATFORM_ANDROID\n  if (iglDev_->getBackendVersion().flavor == BackendFlavor::OpenGL_ES) {\n    GLuint origExpectedStencilValue = 0xffffffff;\n\n    // GLES stencil mask is limited to 8 bits (0xFF) on Adreno GPUs\n    const GLubyte* renderer = ctx->getString(GL_RENDERER);\n    if (strncmp((char*)renderer, \"Adreno\", 6) == 0) {\n      origExpectedStencilValue = 0xff;\n    }\n\n    ASSERT_TRUE(origExpectedStencilValue == origStencilBackWriteMask);\n    ASSERT_TRUE(origExpectedStencilValue == origStencilWriteMask);\n  } else {\n    ASSERT_TRUE(0xffffffff == origStencilBackWriteMask);\n    ASSERT_TRUE(0xffffffff == origStencilWriteMask);\n  }\n#else\n  ASSERT_TRUE(0xffffffff == origStencilBackWriteMask);\n  ASSERT_TRUE(0xffffffff == origStencilWriteMask);\n#endif\n#endif\n  // Test the newly set values\n  ASSERT_TRUE(opengl::DepthStencilState::convertCompareFunction(\n                  newDsDesc.frontFaceStencil.stencilCompareFunction) == newFrontCompareFunc);\n  ASSERT_TRUE(opengl::DepthStencilState::convertCompareFunction(\n                  newDsDesc.backFaceStencil.stencilCompareFunction) == newBackCompareFunc);\n  ASSERT_TRUE(opengl::DepthStencilState::convertStencilOperation(\n                  newDsDesc.backFaceStencil.stencilFailureOperation) == newStencilBackFail);\n  ASSERT_TRUE(opengl::DepthStencilState::convertStencilOperation(\n                  newDsDesc.frontFaceStencil.stencilFailureOperation) == newStencilFail);\n  ASSERT_TRUE(opengl::DepthStencilState::convertStencilOperation(\n                  newDsDesc.frontFaceStencil.depthFailureOperation) == newStencilPassDepthFail);\n  ASSERT_TRUE(opengl::DepthStencilState::convertStencilOperation(\n                  newDsDesc.frontFaceStencil.depthStencilPassOperation) == newStencilPassDepthPass);\n  ASSERT_TRUE(newDsDesc.backFaceStencil.writeMask == newStencilBackWriteMask);\n  ASSERT_TRUE(newDsDesc.frontFaceStencil.writeMask == newStencilWriteMask);\n\n  ctx->getBooleanv(GL_DEPTH_WRITEMASK, &newIsDepthWriteEnabled);\n  ASSERT_TRUE((bool)newIsDepthWriteEnabled == newDsDesc.isDepthWriteEnabled);\n\n  ctx->getIntegerv(GL_DEPTH_FUNC, &newDepthFunVal);\n  ASSERT_TRUE(newDepthFunVal ==\n              opengl::DepthStencilState::convertCompareFunction(newDsDesc.compareFunction));\n\n  ASSERT_TRUE(dsDesc != newDsDesc);\n  ASSERT_TRUE(newDsDesc.backFaceStencil != newDsDesc.frontFaceStencil);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/DestructionGuard.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/DestructionGuard.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/PlatformDevice.h>\n\nnamespace igl::tests {\n\n//\n// DestructionGuardOGLTest\n//\n// Tests for the OpenGL DestructionGuard.\n//\nclass DestructionGuardOGLTest : public ::testing::Test {\n public:\n  DestructionGuardOGLTest() = default;\n  ~DestructionGuardOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// InitiallyAllowed\n//\n// Destruction should be allowed before any guard is active.\n//\nTEST_F(DestructionGuardOGLTest, InitiallyAllowed) {\n  ASSERT_TRUE(context_->isDestructionAllowed());\n}\n\n//\n// GuardPreventsDestruction\n//\n// While a DestructionGuard is alive, destruction should not be allowed.\n//\nTEST_F(DestructionGuardOGLTest, GuardPreventsDestruction) {\n  auto& device = static_cast<opengl::Device&>(*iglDev_);\n  const auto& platformDevice =\n      static_cast<const opengl::PlatformDevice&>(device.getPlatformDevice());\n\n  {\n    auto guard = platformDevice.getDestructionGuard();\n    ASSERT_FALSE(context_->isDestructionAllowed());\n  }\n}\n\n//\n// GuardScopeRestore\n//\n// After a DestructionGuard goes out of scope, destruction should be allowed again.\n//\nTEST_F(DestructionGuardOGLTest, GuardScopeRestore) {\n  auto& device = static_cast<opengl::Device&>(*iglDev_);\n  const auto& platformDevice =\n      static_cast<const opengl::PlatformDevice&>(device.getPlatformDevice());\n\n  {\n    auto guard = platformDevice.getDestructionGuard();\n    ASSERT_FALSE(context_->isDestructionAllowed());\n  }\n\n  // After guard scope, destruction should be allowed again\n  ASSERT_TRUE(context_->isDestructionAllowed());\n}\n\n//\n// NestedGuards\n//\n// Nested guards should work correctly - destruction stays blocked until all guards are released.\n//\nTEST_F(DestructionGuardOGLTest, NestedGuards) {\n  auto& device = static_cast<opengl::Device&>(*iglDev_);\n  const auto& platformDevice =\n      static_cast<const opengl::PlatformDevice&>(device.getPlatformDevice());\n\n  {\n    auto outerGuard = platformDevice.getDestructionGuard();\n    ASSERT_FALSE(context_->isDestructionAllowed());\n\n    {\n      auto innerGuard = platformDevice.getDestructionGuard();\n      ASSERT_FALSE(context_->isDestructionAllowed());\n    }\n\n    // Inner guard released, but outer guard still active\n    ASSERT_FALSE(context_->isDestructionAllowed());\n  }\n\n  // Both guards released\n  ASSERT_TRUE(context_->isDestructionAllowed());\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/Device.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n#include \"../util/TestErrorGuard.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/ShaderCreator.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n/// Helper to create just any render pipeline in a valid way\nstatic std::shared_ptr<IRenderPipelineState> createRenderPipeline(\n    const std::shared_ptr<IDevice>& device,\n    Result* result);\n\n/// Just creates any shader\nstatic std::shared_ptr<IShaderModule> createShaderModule(const std::shared_ptr<IDevice>& device,\n                                                         Result* result);\n\nclass DeviceOGLTest : public ::testing::Test {\n public:\n  DeviceOGLTest() = default;\n  ~DeviceOGLTest() override = default;\n\n  // Set up common resources. This will create a device\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    iglDev_ = util::createTestDevice();\n    ASSERT_TRUE(iglDev_ != nullptr);\n\n    context_ = &static_cast<igl::opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  opengl::IContext* context_{};\n  std::shared_ptr<IDevice> iglDev_;\n};\n\n/// IGL EndScope() optionally restores several OGL states. This test makes sure those states are\n/// restored correctly.\nTEST_F(DeviceOGLTest, EndScope) {\n#if IGL_PLATFORM_LINUX && !IGL_PLATFORM_LINUX_USE_EGL\n  GTEST_SKIP() << \"Fix this test on Linux\";\n#endif\n\n  context_->setUnbindPolicy(opengl::UnbindPolicy::EndScope);\n\n  std::array<GLuint, 2> buffers{};\n\n  // Create a DeviceScope in a new scope to trigger iglDev_->beginScope and iglDev_->endScope when\n  // the scope exits and the DeviceScope is destroyed\n  {\n    const DeviceScope deviceScope(*iglDev_);\n    ASSERT_TRUE(iglDev_->verifyScope());\n\n    context_->genBuffers(2, buffers.data());\n\n    // Artificially set values that will be restored when endScope is called\n    context_->colorMask(0u, 0u, 0u, 0u);\n    context_->blendFunc(GL_SRC_COLOR, GL_DST_COLOR);\n\n    context_->bindBuffer(GL_ARRAY_BUFFER, buffers[0]);\n    context_->bindBuffer(GL_ELEMENT_ARRAY_BUFFER, buffers[1]);\n\n    context_->pixelStorei(GL_PACK_ALIGNMENT, 1);\n    context_->pixelStorei(GL_UNPACK_ALIGNMENT, 1);\n\n    GLboolean mask[4];\n    context_->getBooleanv(GL_COLOR_WRITEMASK, mask);\n\n    ASSERT_TRUE(std::all_of(mask, mask + 4, [](GLboolean value) { return !value; }));\n\n    GLint value = 0;\n    context_->getIntegerv(GL_BLEND_SRC_RGB, &value);\n    ASSERT_EQ(value, GL_SRC_COLOR);\n\n    context_->getIntegerv(GL_BLEND_DST_RGB, &value);\n    ASSERT_EQ(value, GL_DST_COLOR);\n\n    context_->getIntegerv(GL_ARRAY_BUFFER_BINDING, &value);\n    ASSERT_EQ(value, buffers[0]);\n\n    context_->getIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &value);\n    ASSERT_EQ(value, buffers[1]);\n\n    context_->getIntegerv(GL_PACK_ALIGNMENT, &value);\n    ASSERT_EQ(value, 1);\n\n    context_->getIntegerv(GL_UNPACK_ALIGNMENT, &value);\n    ASSERT_EQ(value, 1);\n  }\n\n  // Check whether the correct values are restored from endScope. These are the color mask, blend\n  // function, buffer bindings, and pixel storage modes.\n\n  GLboolean mask[4];\n  context_->getBooleanv(GL_COLOR_WRITEMASK, mask);\n\n  ASSERT_TRUE(std::all_of(mask, mask + 4, [](GLboolean value) { return value; }));\n\n  GLint value = 0;\n  context_->getIntegerv(GL_BLEND_SRC_RGB, &value);\n  ASSERT_EQ(value, GL_ONE);\n\n  context_->getIntegerv(GL_BLEND_DST_RGB, &value);\n  ASSERT_EQ(value, GL_ZERO);\n\n  context_->getIntegerv(GL_ARRAY_BUFFER_BINDING, &value);\n  ASSERT_EQ(value, 0);\n\n  context_->getIntegerv(GL_ELEMENT_ARRAY_BUFFER_BINDING, &value);\n  ASSERT_EQ(value, 0);\n\n  context_->getIntegerv(GL_PACK_ALIGNMENT, &value);\n  ASSERT_EQ(value, 4);\n\n  context_->getIntegerv(GL_UNPACK_ALIGNMENT, &value);\n  ASSERT_EQ(value, 4);\n\n  context_->deleteBuffers(2, buffers.data());\n\n  // Check that gl version and shader version works\n  auto glVersion = context_->deviceFeatures().getGLVersion();\n  ASSERT_NE(glVersion, igl::opengl::GLVersion::NotAvailable);\n\n  auto shaderVersion = iglDev_->getShaderVersion();\n  ASSERT_NE(shaderVersion.majorVersion, 0);\n#if IGL_OPENGL_ES\n  ASSERT_EQ(shaderVersion.family, igl::ShaderFamily::GlslEs);\n#else\n  ASSERT_EQ(shaderVersion.family, igl::ShaderFamily::Glsl);\n#endif\n  ASSERT_GT(shaderVersion.majorVersion + shaderVersion.minorVersion, 0);\n\n#if IGL_BACKEND_OPENGL\n  const std::string expectedVersion =\n      \"#version \" + std::to_string(shaderVersion.majorVersion) +\n      (shaderVersion.minorVersion == 0 ? \"00\" : std::to_string(shaderVersion.minorVersion)) +\n      ((shaderVersion.family == igl::ShaderFamily::GlslEs && shaderVersion.majorVersion > 1) ? \" es\"\n                                                                                             : \"\");\n\n  ASSERT_EQ(igl::opengl::getStringFromShaderVersion(shaderVersion), expectedVersion);\n#endif // IGL_BACKEND_OPENGL\n}\n\nTEST_F(DeviceOGLTest, EndScope_ClearContext) {\n  context_->setUnbindPolicy(opengl::UnbindPolicy::ClearContext);\n\n  { // Clear current context, one level deep\n    context_->clearCurrentContext();\n\n    const DeviceScope deviceScope(*iglDev_);\n    ASSERT_TRUE(iglDev_->verifyScope());\n    ASSERT_TRUE(context_->isCurrentContext());\n  }\n  ASSERT_FALSE(context_->isCurrentContext());\n\n  { // Clear current context, one level deep\n    const DeviceScope scope1(*iglDev_);\n    ASSERT_TRUE(iglDev_->verifyScope());\n    ASSERT_TRUE(context_->isCurrentContext());\n    {\n      const DeviceScope scope2(*iglDev_);\n      ASSERT_TRUE(iglDev_->verifyScope());\n      ASSERT_TRUE(context_->isCurrentContext());\n    }\n    // Scope destroyed - validate that it's no longer current\n    ASSERT_TRUE(iglDev_->verifyScope());\n    ASSERT_TRUE(context_->isCurrentContext());\n  }\n  ASSERT_FALSE(context_->isCurrentContext());\n}\n\nTEST_F(DeviceOGLTest, DeletionTest) {\n  const igl::tests::util::TestErrorGuard testErrorGuard;\n\n  auto iglDev2 = util::createTestDevice();\n\n  std::unique_ptr<IBuffer> buffer;\n  std::shared_ptr<IFramebuffer> framebuffer;\n  std::shared_ptr<ITexture> texture;\n  std::shared_ptr<ITexture> renderbufferTexture;\n  std::unique_ptr<IRenderCommandEncoder> renderCommandEncoder; // Used to hold onto a VAO if they're\n                                                               // enabled\n  std::shared_ptr<IRenderPipelineState> renderPipelineState; // Holds onto ShaderStages which will\n  // call deleteProgram\n\n  std::shared_ptr<IShaderModule> shaderModule; // Used to trigger deleteShader\n\n  {\n    const DeviceScope scope1(*iglDev_);\n\n    // deleteBuffers\n    const BufferDesc desc{\n        .type = BufferDesc::BufferTypeBits::Vertex,\n        .length = 0,\n        .storage = ResourceStorage::Shared,\n    };\n    Result res;\n    buffer = iglDev_->createBuffer(desc, &res);\n    ASSERT_EQ(res.code, Result::Code::Ok);\n    ASSERT_EQ(buffer->getSizeInBytes(), 0);\n\n    // Create an offscreen texture to render to\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             5,\n                                             5,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    texture = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(texture != nullptr);\n\n    FramebufferDesc framebufferDesc;\n    framebufferDesc.colorAttachments[0].texture = texture;\n    framebuffer = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(framebuffer != nullptr);\n\n    texDesc.usage = TextureDesc::TextureUsageBits::Attachment;\n    renderbufferTexture = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(renderbufferTexture != nullptr);\n\n    // To get it to create a VAO and then delete it\n    const CommandQueueDesc cqDesc = {};\n    auto cq = iglDev_->createCommandQueue(cqDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(cq != nullptr); // Shouldn't trigger if above is okay\n    auto cmd = cq->createCommandBuffer({}, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    RenderPassDesc renderPassDesc;\n    renderPassDesc.colorAttachments.resize(1);\n    renderPassDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPassDesc.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPassDesc.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    renderCommandEncoder = cmd->createRenderCommandEncoder(renderPassDesc, framebuffer);\n    ASSERT_TRUE(renderCommandEncoder != nullptr);\n\n    renderPipelineState = createRenderPipeline(iglDev_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(renderPipelineState != nullptr);\n\n    shaderModule = createShaderModule(iglDev_, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(shaderModule != nullptr);\n  }\n\n  // Force scope to change (workaround for leaving device scope not clearing current eagl scope)\n  {\n    const DeviceScope scope2(*iglDev2);\n    ASSERT_TRUE(iglDev2->verifyScope());\n    ASSERT_FALSE(iglDev_->verifyScope());\n  }\n\n  // This should make all the resources deallocate while not in scope.\n  buffer = nullptr;\n  framebuffer = nullptr;\n  texture = nullptr;\n  renderbufferTexture = nullptr;\n  renderCommandEncoder = nullptr;\n  renderPipelineState = nullptr;\n  shaderModule = nullptr;\n\n  // Entering main scope again to flush deletion queue\n  {\n    const DeviceScope scope3(*iglDev_);\n  }\n}\n\nstd::shared_ptr<IRenderPipelineState> createRenderPipeline(const std::shared_ptr<IDevice>& device,\n                                                           Result* outResult) {\n  Result ret;\n\n  RenderPipelineDesc renderPipelineDesc;\n\n  // Initialize shader stages\n  std::unique_ptr<IShaderStages> stages;\n  igl::tests::util::createSimpleShaderStages(device, stages);\n  renderPipelineDesc.shaderStages = std::move(stages);\n\n  // Initialize input to vertex shader\n  VertexInputStateDesc inputDesc;\n\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n  inputDesc.attributes[0].name = data::shader::kSimplePos;\n  inputDesc.attributes[0].location = 0;\n  inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n  inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n  inputDesc.attributes[1].offset = 0;\n  inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n  inputDesc.attributes[1].name = data::shader::kSimpleUv;\n  inputDesc.attributes[1].location = 1;\n  inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n  // numAttributes has to equal to bindings when using more than 1 buffer\n  inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n  auto vertexInputState = device->createVertexInputState(inputDesc, &ret);\n  if (!ret.isOk()) {\n    Result::setResult(outResult, ret.code, ret.message);\n    return nullptr;\n  }\n  renderPipelineDesc.vertexInputState = vertexInputState;\n\n  auto renderPipelineState = device->createRenderPipeline(renderPipelineDesc, &ret);\n  if (!ret.isOk()) {\n    Result::setResult(outResult, ret.code, ret.message);\n    return nullptr;\n  }\n\n  return renderPipelineState;\n}\n\nstd::shared_ptr<IShaderModule> createShaderModule(const std::shared_ptr<IDevice>& device,\n                                                  Result* outResult) {\n  Result ret;\n  auto vertShader = ShaderModuleCreator::fromStringInput(\n      *device, data::shader::kOglSimpleVertShader.data(), {ShaderStage::Vertex, \"main\"}, \"\", &ret);\n  if (!ret.isOk()) {\n    Result::setResult(outResult, ret.code, ret.message);\n    return nullptr;\n  }\n\n  return vertShader;\n}\n\nTEST_F(DeviceOGLTest, CreateShaderModuleUnknownTypeFails) {\n  Result ret;\n  auto vertShader = ShaderModuleCreator::fromStringInput(*iglDev_,\n                                                         data::shader::kOglSimpleVertShader.data(),\n                                                         {static_cast<ShaderStage>(99), \"main\"},\n                                                         \"\",\n                                                         &ret);\n  EXPECT_FALSE(ret.isOk()) << \"invalid stage to compile should result in failure\";\n  EXPECT_TRUE(vertShader == nullptr) << \"invalid stage to compile should result in null result\";\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/DeviceFeatureSetFull.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// DeviceFeatureSetFullOGLTest\n//\n// Tests for the full DeviceFeatureSet API in OpenGL.\n//\nclass DeviceFeatureSetFullOGLTest : public ::testing::Test {\n public:\n  DeviceFeatureSetFullOGLTest() = default;\n  ~DeviceFeatureSetFullOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// HasFeature\n//\n// Verify that hasFeature returns a boolean without crashing for various features.\n//\nTEST_F(DeviceFeatureSetFullOGLTest, HasFeature) {\n  const auto& features = context_->deviceFeatures();\n\n  // These should all return a boolean without crashing\n  bool compute = features.hasFeature(DeviceFeatures::Compute);\n  bool multiview = features.hasFeature(DeviceFeatures::Multiview);\n  bool texture3d = features.hasFeature(DeviceFeatures::Texture3D);\n  bool msaa = features.hasFeature(DeviceFeatures::MultiSample);\n  bool uniformBlocks = features.hasFeature(DeviceFeatures::UniformBlocks);\n  bool storageBuffers = features.hasFeature(DeviceFeatures::StorageBuffers);\n  bool timers = features.hasFeature(DeviceFeatures::Timers);\n  bool drawInstanced = features.hasFeature(DeviceFeatures::DrawInstanced);\n  bool bindUniform = features.hasFeature(DeviceFeatures::BindUniform);\n  bool mrt = features.hasFeature(DeviceFeatures::MultipleRenderTargets);\n\n  // Suppress unused variable warnings\n  (void)compute;\n  (void)multiview;\n  (void)texture3d;\n  (void)msaa;\n  (void)uniformBlocks;\n  (void)storageBuffers;\n  (void)timers;\n  (void)drawInstanced;\n  (void)bindUniform;\n  (void)mrt;\n\n  // The test passes if no crash occurred\n  SUCCEED();\n}\n\n//\n// HasExtension\n//\n// Verify that hasExtension returns a boolean without crashing.\n//\nTEST_F(DeviceFeatureSetFullOGLTest, HasExtension) {\n  const auto& features = context_->deviceFeatures();\n\n  bool timerQuery = features.hasExtension(opengl::Extensions::TimerQuery);\n  bool vao = features.hasExtension(opengl::Extensions::VertexArrayObject);\n  bool fbBlit = features.hasExtension(opengl::Extensions::FramebufferBlit);\n  bool mapBuf = features.hasExtension(opengl::Extensions::MapBuffer);\n  bool depth24 = features.hasExtension(opengl::Extensions::Depth24);\n  bool sync = features.hasExtension(opengl::Extensions::Sync);\n  bool srgb = features.hasExtension(opengl::Extensions::Srgb);\n  bool debug = features.hasExtension(opengl::Extensions::Debug);\n\n  (void)timerQuery;\n  (void)vao;\n  (void)fbBlit;\n  (void)mapBuf;\n  (void)depth24;\n  (void)sync;\n  (void)srgb;\n  (void)debug;\n\n  SUCCEED();\n}\n\n//\n// HasInternalFeature\n//\n// Verify that hasInternalFeature returns a boolean without crashing.\n//\nTEST_F(DeviceFeatureSetFullOGLTest, HasInternalFeature) {\n  const auto& features = context_->deviceFeatures();\n\n  bool fbBlit = features.hasInternalFeature(opengl::InternalFeatures::FramebufferBlit);\n  bool fbObject = features.hasInternalFeature(opengl::InternalFeatures::FramebufferObject);\n  bool vao = features.hasInternalFeature(opengl::InternalFeatures::VertexArrayObject);\n  bool mapBuf = features.hasInternalFeature(opengl::InternalFeatures::MapBuffer);\n  bool unmapBuf = features.hasInternalFeature(opengl::InternalFeatures::UnmapBuffer);\n  bool texStorage = features.hasInternalFeature(opengl::InternalFeatures::TexStorage);\n  bool sync = features.hasInternalFeature(opengl::InternalFeatures::Sync);\n  bool debugMsg = features.hasInternalFeature(opengl::InternalFeatures::DebugMessage);\n  bool invalidateFb = features.hasInternalFeature(opengl::InternalFeatures::InvalidateFramebuffer);\n  bool polyFill = features.hasInternalFeature(opengl::InternalFeatures::PolygonFillMode);\n\n  (void)fbBlit;\n  (void)fbObject;\n  (void)vao;\n  (void)mapBuf;\n  (void)unmapBuf;\n  (void)texStorage;\n  (void)sync;\n  (void)debugMsg;\n  (void)invalidateFb;\n  (void)polyFill;\n\n  SUCCEED();\n}\n\n//\n// GetFeatureLimits_MaxTextureSize\n//\n// Verify getFeatureLimits returns a sensible value for MaxTextureSize.\n//\nTEST_F(DeviceFeatureSetFullOGLTest, GetFeatureLimits_MaxTextureSize) {\n  size_t maxTextureSize = 0;\n  bool hasLimit =\n      iglDev_->getFeatureLimits(DeviceFeatureLimits::MaxTextureDimension1D2D, maxTextureSize);\n  ASSERT_TRUE(hasLimit);\n  // Max texture size should be at least 64 (even the smallest GL implementations support this)\n  ASSERT_GE(maxTextureSize, 64u);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/ExtensionDetection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// ExtensionDetectionOGLTest\n//\n// Tests for OpenGL extension detection.\n//\nclass ExtensionDetectionOGLTest : public ::testing::Test {\n public:\n  ExtensionDetectionOGLTest() = default;\n  ~ExtensionDetectionOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// HasExtensionReturnsValue\n//\n// Verify that querying for extensions returns consistent boolean values\n// and does not crash.\n//\nTEST_F(ExtensionDetectionOGLTest, HasExtensionReturnsValue) {\n  const auto& features = context_->deviceFeatures();\n\n  // Query a variety of extensions and verify they return consistently\n  // (calling twice should give the same result)\n  bool timerQuery1 = features.hasExtension(opengl::Extensions::TimerQuery);\n  bool timerQuery2 = features.hasExtension(opengl::Extensions::TimerQuery);\n  ASSERT_EQ(timerQuery1, timerQuery2);\n\n  bool vao1 = features.hasExtension(opengl::Extensions::VertexArrayObject);\n  bool vao2 = features.hasExtension(opengl::Extensions::VertexArrayObject);\n  ASSERT_EQ(vao1, vao2);\n\n  bool fbBlit1 = features.hasExtension(opengl::Extensions::FramebufferBlit);\n  bool fbBlit2 = features.hasExtension(opengl::Extensions::FramebufferBlit);\n  ASSERT_EQ(fbBlit1, fbBlit2);\n\n  bool mapBuffer1 = features.hasExtension(opengl::Extensions::MapBuffer);\n  bool mapBuffer2 = features.hasExtension(opengl::Extensions::MapBuffer);\n  ASSERT_EQ(mapBuffer1, mapBuffer2);\n\n  bool depth24_1 = features.hasExtension(opengl::Extensions::Depth24);\n  bool depth24_2 = features.hasExtension(opengl::Extensions::Depth24);\n  ASSERT_EQ(depth24_1, depth24_2);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/FeatureLimits.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// FeatureLimitsOGLTest\n//\n// Tests for querying OpenGL feature limits.\n//\nclass FeatureLimitsOGLTest : public ::testing::Test {\n public:\n  FeatureLimitsOGLTest() = default;\n  ~FeatureLimitsOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// MaxTextureSize\n//\n// Verify that the maximum texture size is at least a reasonable minimum.\n//\nTEST_F(FeatureLimitsOGLTest, MaxTextureSize) {\n  size_t maxTextureSize = 0;\n  bool hasLimit =\n      iglDev_->getFeatureLimits(DeviceFeatureLimits::MaxTextureDimension1D2D, maxTextureSize);\n  ASSERT_TRUE(hasLimit);\n  // OpenGL spec guarantees at least 64, but practically all hardware supports much more\n  ASSERT_GE(maxTextureSize, 64u);\n}\n\n//\n// MaxRenderTargets\n//\n// Verify the number of render targets is at least 1.\n//\nTEST_F(FeatureLimitsOGLTest, MaxRenderTargets) {\n  size_t maxRenderTargets = 0;\n  bool hasLimit =\n      iglDev_->getFeatureLimits(DeviceFeatureLimits::MaxColorAttachments, maxRenderTargets);\n  if (!hasLimit) {\n    // Some backends might not report this limit\n    GTEST_SKIP() << \"MaxColorAttachments limit not reported\";\n  }\n  // Must support at least 1 render target\n  ASSERT_GE(maxRenderTargets, 1u);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/FramebufferBlit.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <cstring>\n#include <igl/CommandBuffer.h>\n#include <igl/Framebuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/GLIncludes.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/PlatformDevice.h>\n\nnamespace igl::tests {\n\n#define OFFSCREEN_TEX_WIDTH 4\n#define OFFSCREEN_TEX_HEIGHT 4\n\n//\n// FramebufferBlitOGLTest\n//\n// Tests for OpenGL framebuffer blit operations.\n//\nclass FramebufferBlitOGLTest : public ::testing::Test {\n public:\n  FramebufferBlitOGLTest() = default;\n  ~FramebufferBlitOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// ColorBlit\n//\n// Create source and destination FBOs, clear source to red, blit, verify destination.\n//\nTEST_F(FramebufferBlitOGLTest, ColorBlit) {\n  if (!context_->deviceFeatures().hasInternalFeature(opengl::InternalFeatures::FramebufferBlit)) {\n    GTEST_SKIP() << \"FramebufferBlit not supported\";\n  }\n\n  Result ret;\n\n  // Create source texture and framebuffer\n  const TextureDesc srcTexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                    OFFSCREEN_TEX_WIDTH,\n                                                    OFFSCREEN_TEX_HEIGHT,\n                                                    TextureDesc::TextureUsageBits::Sampled |\n                                                        TextureDesc::TextureUsageBits::Attachment);\n  auto srcTexture = iglDev_->createTexture(srcTexDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_NE(srcTexture, nullptr);\n\n  FramebufferDesc srcFbDesc;\n  srcFbDesc.colorAttachments[0].texture = srcTexture;\n  auto srcFramebuffer = iglDev_->createFramebuffer(srcFbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_NE(srcFramebuffer, nullptr);\n\n  // Create destination texture and framebuffer\n  const TextureDesc dstTexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                    OFFSCREEN_TEX_WIDTH,\n                                                    OFFSCREEN_TEX_HEIGHT,\n                                                    TextureDesc::TextureUsageBits::Sampled |\n                                                        TextureDesc::TextureUsageBits::Attachment);\n  auto dstTexture = iglDev_->createTexture(dstTexDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_NE(dstTexture, nullptr);\n\n  FramebufferDesc dstFbDesc;\n  dstFbDesc.colorAttachments[0].texture = dstTexture;\n  auto dstFramebuffer = iglDev_->createFramebuffer(dstFbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_NE(dstFramebuffer, nullptr);\n\n  // Clear source framebuffer to red\n  RenderPassDesc renderPass;\n  renderPass.colorAttachments.resize(1);\n  renderPass.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass.colorAttachments[0].storeAction = StoreAction::Store;\n  renderPass.colorAttachments[0].clearColor = {1.0, 0.0, 0.0, 1.0}; // Red\n\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass, srcFramebuffer);\n  ASSERT_NE(cmdEncoder, nullptr);\n  cmdEncoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n\n  // Clear destination framebuffer to black\n  RenderPassDesc dstRenderPass;\n  dstRenderPass.colorAttachments.resize(1);\n  dstRenderPass.colorAttachments[0].loadAction = LoadAction::Clear;\n  dstRenderPass.colorAttachments[0].storeAction = StoreAction::Store;\n  dstRenderPass.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0}; // Black\n\n  auto cmdBuf2 = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder2 = cmdBuf2->createRenderCommandEncoder(dstRenderPass, dstFramebuffer);\n  ASSERT_NE(cmdEncoder2, nullptr);\n  cmdEncoder2->endEncoding();\n  cmdQueue_->submit(*cmdBuf2);\n\n  // Blit from source to destination\n  auto& device = static_cast<opengl::Device&>(*iglDev_);\n  const auto& platformDevice =\n      static_cast<const opengl::PlatformDevice&>(device.getPlatformDevice());\n\n  platformDevice.blitFramebuffer(srcFramebuffer,\n                                 0,\n                                 0,\n                                 OFFSCREEN_TEX_WIDTH,\n                                 OFFSCREEN_TEX_HEIGHT,\n                                 dstFramebuffer,\n                                 0,\n                                 0,\n                                 OFFSCREEN_TEX_WIDTH,\n                                 OFFSCREEN_TEX_HEIGHT,\n                                 GL_COLOR_BUFFER_BIT,\n                                 &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Read back destination pixels\n  std::array<uint32_t, OFFSCREEN_TEX_WIDTH * OFFSCREEN_TEX_HEIGHT> pixels{};\n  dstFramebuffer->copyBytesColorAttachment(\n      *cmdQueue_,\n      0,\n      pixels.data(),\n      TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT));\n\n  // Verify destination has red pixels (RGBA = 0xFF0000FF in little-endian ABGR)\n  for (auto px : pixels) {\n    // Check red channel is non-zero\n    uint8_t r = px & 0xFF;\n    ASSERT_GT(r, 0u) << \"Expected red channel to be non-zero after blit\";\n  }\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/HWDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <memory>\n#include <igl/Common.h>\n#include <igl/Device.h>\n\n#if IGL_PLATFORM_IOS\n#include <igl/opengl/ios/HWDevice.h>\n#elif IGL_PLATFORM_MACOSX\n#include <igl/opengl/macos/HWDevice.h>\n#elif IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX_USE_EGL\n#include <igl/opengl/egl/HWDevice.h>\n#elif IGL_PLATFORM_LINUX\n#include <igl/opengl/glx/HWDevice.h>\n#elif IGL_PLATFORM_WINDOWS\n#if defined(FORCE_USE_ANGLE)\n#include <igl/opengl/egl/HWDevice.h>\n#else\n#include <igl/opengl/wgl/HWDevice.h>\n#endif // FORCE_USE_ANGLE\n#else\n#error \"Unsupported testing platform\"\n#endif\n\nnamespace igl::tests {\n\nclass HWDeviceOGLTest : public ::testing::Test {\n public:\n  HWDeviceOGLTest() = default;\n  ~HWDeviceOGLTest() override = default;\n\n  // Set up common resources. This will create a device\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    setDebugBreakEnabled(false);\n\n    iglHwDev_ = createHWTestDevice();\n\n    ASSERT_TRUE(iglHwDev_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  std::shared_ptr<opengl::HWDevice> createHWTestDevice() {\n#if IGL_PLATFORM_IOS\n    return std::make_shared<opengl::ios::HWDevice>();\n#elif IGL_PLATFORM_MACOSX\n    return std::make_shared<opengl::macos::HWDevice>();\n#elif IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX_USE_EGL\n    return std::make_shared<opengl::egl::HWDevice>();\n#elif IGL_PLATFORM_LINUX\n    return std::make_shared<opengl::glx::HWDevice>();\n#elif IGL_PLATFORM_WINDOWS\n#if defined(FORCE_USE_ANGLE)\n    return std::make_shared<opengl::egl::HWDevice>();\n#else\n    return std::make_shared<opengl::wgl::HWDevice>();\n#endif // FORCE_USE_ANGLE\n#else\n    return nullptr;\n#endif\n  }\n\n  // Member variables\n protected:\n  std::shared_ptr<opengl::HWDevice> iglHwDev_;\n};\n\n/// This test ensures a device can be created when calling create()\nTEST_F(HWDeviceOGLTest, DeviceCreationSanityTest) {\n  {\n    Result result;\n    const std::unique_ptr<IDevice> device = iglHwDev_->create({}, &result);\n\n    // Ensure the result of the device creation is ok\n    ASSERT_TRUE(result.isOk());\n  }\n  {\n    Result result;\n    const std::unique_ptr<IDevice> device = iglHwDev_->create(&result);\n\n    // Ensure the result of the device creation is ok\n    ASSERT_TRUE(result.isOk());\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/ImageLoadStore.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// ImageLoadStoreOGLTest\n//\n// Tests for shader image load/store operations in OpenGL.\n//\nclass ImageLoadStoreOGLTest : public ::testing::Test {\n public:\n  ImageLoadStoreOGLTest() = default;\n  ~ImageLoadStoreOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// BindImageTexture\n//\n// Test binding an image texture for compute shader access.\n//\nTEST_F(ImageLoadStoreOGLTest, BindImageTexture) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Compute)) {\n    GTEST_SKIP() << \"Compute not supported\";\n  }\n\n  if (!context_->deviceFeatures().hasInternalFeature(\n          opengl::InternalFeatures::ShaderImageLoadStore)) {\n    GTEST_SKIP() << \"Shader image load/store not supported\";\n  }\n\n  Result ret;\n\n  // Create a texture suitable for image load/store\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 4,\n                                                 4,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Storage);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  if (!ret.isOk() || texture == nullptr) {\n    GTEST_SKIP() << \"Cannot create storage texture: \" << ret.message.c_str();\n  }\n\n  // Bind the image texture using the context directly\n  // This tests the low-level bindImageTexture call\n  auto* oglTexture = texture.get();\n  ASSERT_NE(oglTexture, nullptr);\n\n  // Just verify no GL errors from the texture creation\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/InvalidateFramebuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// InvalidateFramebufferOGLTest\n//\n// Tests for framebuffer invalidation in OpenGL.\n//\nclass InvalidateFramebufferOGLTest : public ::testing::Test {\n public:\n  InvalidateFramebufferOGLTest() = default;\n  ~InvalidateFramebufferOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// InvalidateNoError\n//\n// Invalidate a framebuffer attachment and verify no GL errors occur.\n//\nTEST_F(InvalidateFramebufferOGLTest, InvalidateNoError) {\n  if (!context_->deviceFeatures().hasInternalFeature(\n          opengl::InternalFeatures::InvalidateFramebuffer)) {\n    GTEST_SKIP() << \"InvalidateFramebuffer not supported\";\n  }\n\n  Result ret;\n\n  // Create a framebuffer\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 4,\n                                                 4,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Attachment);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = texture;\n  auto framebuffer = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  // Clear the framebuffer first\n  RenderPassDesc renderPass;\n  renderPass.colorAttachments.resize(1);\n  renderPass.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass.colorAttachments[0].storeAction = StoreAction::DontCare; // Indicates invalidation\n  renderPass.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass, framebuffer);\n  ASSERT_NE(cmdEncoder, nullptr);\n  cmdEncoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/MSAATextureAttachment.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// MSAATextureAttachmentOGLTest\n//\n// Tests for MSAA (Multi-Sample Anti-Aliasing) texture attachment in OpenGL.\n//\nclass MSAATextureAttachmentOGLTest : public ::testing::Test {\n public:\n  MSAATextureAttachmentOGLTest() = default;\n  ~MSAATextureAttachmentOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// CreateMSAARenderbuffer\n//\n// Create a multisampled texture for use as a render target.\n//\nTEST_F(MSAATextureAttachmentOGLTest, CreateMSAARenderbuffer) {\n  if (!iglDev_->hasFeature(DeviceFeatures::MultiSample)) {\n    GTEST_SKIP() << \"MultiSample not supported\";\n  }\n\n  Result ret;\n\n  TextureDesc texDesc = TextureDesc::new2D(\n      TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Attachment);\n  texDesc.numSamples = 4;\n\n  auto msaaTexture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(msaaTexture, nullptr);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// ResolveMSAA\n//\n// Create MSAA and resolve textures, attach to framebuffer, clear, and resolve.\n//\nTEST_F(MSAATextureAttachmentOGLTest, ResolveMSAA) {\n  if (!iglDev_->hasFeature(DeviceFeatures::MultiSample)) {\n    GTEST_SKIP() << \"MultiSample not supported\";\n  }\n  if (!iglDev_->hasFeature(DeviceFeatures::MultiSampleResolve)) {\n    GTEST_SKIP() << \"MultiSampleResolve not supported\";\n  }\n\n  Result ret;\n\n  // Create MSAA texture\n  TextureDesc msaaTexDesc = TextureDesc::new2D(\n      TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Attachment);\n  msaaTexDesc.numSamples = 4;\n\n  auto msaaTexture = iglDev_->createTexture(msaaTexDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(msaaTexture, nullptr);\n\n  // Create resolve texture\n  TextureDesc resolveTexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                  4,\n                                                  4,\n                                                  TextureDesc::TextureUsageBits::Sampled |\n                                                      TextureDesc::TextureUsageBits::Attachment);\n  auto resolveTexture = iglDev_->createTexture(resolveTexDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(resolveTexture, nullptr);\n\n  // Create framebuffer with MSAA and resolve attachments\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = msaaTexture;\n  fbDesc.colorAttachments[0].resolveTexture = resolveTexture;\n\n  auto framebuffer = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(framebuffer, nullptr);\n\n  // Clear the framebuffer\n  RenderPassDesc renderPass;\n  renderPass.colorAttachments.resize(1);\n  renderPass.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass.colorAttachments[0].storeAction = StoreAction::MsaaResolve;\n  renderPass.colorAttachments[0].clearColor = {1.0, 0.0, 0.0, 1.0};\n\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass, framebuffer);\n  ASSERT_NE(cmdEncoder, nullptr);\n  cmdEncoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/Memcpy.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/Common.h>\n\nnamespace igl::tests {\n\n//\n// MemcpyTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass MemcpyOGLTest : public ::testing::Test {\n public:\n  MemcpyOGLTest() = default;\n  ~MemcpyOGLTest() override = default;\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n  }\n\n  void TearDown() override {}\n};\n\n//\n// opengl::optimizedMemcpy\n//\n// Verify opengl::optimizedMemcpy works under various alignment cases.\n//\nTEST_F(MemcpyOGLTest, optimizedMemcpyAlignmentPermutation) {\n  // Source buffer, destination buffer and its clearing pattern\n  const char src[] = \"0123456789ABCDEF+-*/\";\n  const char clr[] = \"abcdefghijklmnopqrst\";\n  char dst[sizeof(src)];\n\n  ASSERT_EQ(sizeof(src), sizeof(clr));\n\n  // We do a series of optimizedMemcpy() from src to dst buffer,\n  // we advance the src pointer at twice the speed of the dst pointer,\n  // so we cover many kinds of alignment cases wrt both src and dst buffer.\n  for (unsigned i = 0; i < sizeof(dst); ++i) {\n    const unsigned di = i / 2;\n    const unsigned len = sizeof(dst) - i;\n\n    // Always clear the dst buffer before each optimizedMemcpy() call.\n    memcpy(dst, clr, sizeof(dst));\n    igl::optimizedMemcpy(dst + di, src + i, len);\n\n    // Verify optimizedMemcpy() has done the job correctly.\n    // We divide the dst buffer into up to 3 sections,\n    // then we copy into the middle section from src buffer,\n    // in the end, we check all of them to have the correct content.\n    ASSERT_EQ(0, memcmp(dst, clr, di));\n    ASSERT_EQ(0, memcmp(dst + di, src + i, len));\n    ASSERT_EQ(0, memcmp(dst + di + len, clr + di + len, sizeof(dst) - di - len));\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/MemoryObjectImport.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// MemoryObjectImportOGLTest\n//\n// Tests for external memory object import in OpenGL.\n//\nclass MemoryObjectImportOGLTest : public ::testing::Test {\n public:\n  MemoryObjectImportOGLTest() = default;\n  ~MemoryObjectImportOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// MemoryObjectCreation\n//\n// Test that external memory object APIs are accessible (skip if not supported).\n//\nTEST_F(MemoryObjectImportOGLTest, MemoryObjectCreation) {\n  if (!iglDev_->hasFeature(DeviceFeatures::ExternalMemoryObjects)) {\n    GTEST_SKIP() << \"External memory objects not supported\";\n  }\n\n  // Create a memory object\n  GLuint memObject = 0;\n  context_->createMemoryObjects(1, &memObject);\n\n  // The memory object should be created (non-zero)\n  ASSERT_NE(memObject, 0u);\n\n  // Clean up\n  context_->deleteMemoryObjects(1, &memObject);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/MultiviewFramebuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/Framebuffer.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// MultiviewFramebufferOGLTest\n//\n// Tests for multiview framebuffer creation in OpenGL.\n//\nclass MultiviewFramebufferOGLTest : public ::testing::Test {\n public:\n  MultiviewFramebufferOGLTest() = default;\n  ~MultiviewFramebufferOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// CreateMultiviewFramebuffer\n//\n// Create a framebuffer with multiview texture array attachments.\n//\nTEST_F(MultiviewFramebufferOGLTest, CreateMultiviewFramebuffer) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Multiview)) {\n    GTEST_SKIP() << \"Multiview not supported\";\n  }\n\n  if (!iglDev_->hasFeature(DeviceFeatures::Texture2DArray)) {\n    GTEST_SKIP() << \"Texture2DArray not supported\";\n  }\n\n  Result ret;\n\n  // Create a 2D texture array with 2 layers for stereo rendering\n  TextureDesc texDesc = TextureDesc::new2DArray(TextureFormat::RGBA_UNorm8,\n                                                4,\n                                                4,\n                                                2, // 2 layers for stereo\n                                                TextureDesc::TextureUsageBits::Sampled |\n                                                    TextureDesc::TextureUsageBits::Attachment);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  // Create framebuffer with multiview mode\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = texture;\n  fbDesc.mode = FramebufferMode::Stereo;\n\n  auto framebuffer = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(framebuffer, nullptr);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/PipelineState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n\n#include <utility>\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/VertexInputState.h>\n#include <igl/opengl/RenderPipelineState.h>\n\nnamespace igl::tests {\n\n// Use a 4x4 texture for this test\n#define OFFSCREEN_TEX_WIDTH 4\n#define OFFSCREEN_TEX_HEIGHT 4\n\n//\n// PipelineStateOGLTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass PipelineStateOGLTest : public ::testing::Test {\n private:\n public:\n  PipelineStateOGLTest() = default;\n  ~PipelineStateOGLTest() override = default;\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a render pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the render pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   OFFSCREEN_TEX_WIDTH,\n                                                   OFFSCREEN_TEX_HEIGHT,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize Render Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n    renderPipelineDesc_.targetDesc.colorAttachments[0].blendEnabled = true;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> fragmentParamBuffer_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n};\n\n//\n// GetIndexByName\n//\n// This test exercises ShaderStages.getIndexByName() for attribute array\n// buffer by going through the pipelineState object.\n//\nTEST_F(PipelineStateOGLTest, GetIndexByName) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  //----------------\n  // Create Shaders\n  //----------------\n  // Initialize shader stages\n  std::unique_ptr<IShaderStages> stages;\n  igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n  shaderStages_ = std::move(stages);\n\n  renderPipelineDesc_.shaderStages = shaderStages_;\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  // These should have a location because they are attributes in the simple shader\n  int idx = pipelineState->getIndexByName(IGL_NAMEHANDLE(data::shader::kSimpleUv),\n                                          igl::ShaderStage::Fragment);\n  ASSERT_NE(idx, -1);\n\n  idx = pipelineState->getIndexByName(IGL_NAMEHANDLE(data::shader::kSimplePos),\n                                      igl::ShaderStage::Fragment);\n  ASSERT_NE(idx, -1);\n}\n\n// Test static conversions from IGL ops to OGL ops\nTEST_F(PipelineStateOGLTest, ConvertOps) {\n  //----------------\n  // BlendOp\n  //----------------\n  const std::vector<std::pair<BlendOp, GLenum>> inputAndExpectedBlendOp = {\n      std::make_pair(BlendOp::Add, GL_FUNC_ADD),\n      std::make_pair(BlendOp::Subtract, GL_FUNC_SUBTRACT),\n      std::make_pair(BlendOp::ReverseSubtract, GL_FUNC_REVERSE_SUBTRACT),\n      std::make_pair(BlendOp::Min, GL_MIN),\n      std::make_pair(BlendOp::Max, GL_MAX),\n  };\n\n  for (const auto& ioPair : inputAndExpectedBlendOp) {\n    ASSERT_EQ(igl::opengl::RenderPipelineState::convertBlendOp(ioPair.first), ioPair.second);\n  }\n\n  //----------------\n  // BlendFactor\n  //----------------\n  const std::vector<std::pair<BlendFactor, GLenum>> inputAndExpectedBlendFactor = {\n      std::make_pair(BlendFactor::Zero, GL_ZERO),\n      std::make_pair(BlendFactor::One, GL_ONE),\n      std::make_pair(BlendFactor::SrcColor, GL_SRC_COLOR),\n      std::make_pair(BlendFactor::OneMinusSrcColor, GL_ONE_MINUS_SRC_COLOR),\n      std::make_pair(BlendFactor::DstColor, GL_DST_COLOR),\n      std::make_pair(BlendFactor::OneMinusDstColor, GL_ONE_MINUS_DST_COLOR),\n      std::make_pair(BlendFactor::SrcAlpha, GL_SRC_ALPHA),\n      std::make_pair(BlendFactor::OneMinusSrcAlpha, GL_ONE_MINUS_SRC_ALPHA),\n      std::make_pair(BlendFactor::DstAlpha, GL_DST_ALPHA),\n      std::make_pair(BlendFactor::OneMinusDstAlpha, GL_ONE_MINUS_DST_ALPHA),\n      std::make_pair(BlendFactor::BlendColor, GL_CONSTANT_COLOR),\n      std::make_pair(BlendFactor::OneMinusBlendColor, GL_ONE_MINUS_CONSTANT_COLOR),\n      std::make_pair(BlendFactor::BlendAlpha, GL_CONSTANT_ALPHA),\n      std::make_pair(BlendFactor::OneMinusBlendAlpha, GL_ONE_MINUS_CONSTANT_ALPHA),\n      std::make_pair(BlendFactor::SrcAlphaSaturated, GL_SRC_ALPHA_SATURATE),\n      // Unsupported values default to GL_ONE\n      std::make_pair(BlendFactor::Src1Color, GL_ONE),\n      std::make_pair(BlendFactor::OneMinusSrc1Color, GL_ONE),\n      std::make_pair(BlendFactor::Src1Alpha, GL_ONE),\n      std::make_pair(BlendFactor::OneMinusSrc1Alpha, GL_ONE),\n  };\n\n  for (const auto& ioPair : inputAndExpectedBlendFactor) {\n    ASSERT_EQ(igl::opengl::RenderPipelineState::convertBlendFactor(ioPair.first), ioPair.second);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/PlatformDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/PlatformDevice.h>\n\n#include \"../util/Common.h\"\n#if IGL_PLATFORM_IOS\n#include <igl/opengl/ios/PlatformDevice.h>\n#elif IGL_PLATFORM_MACOSX\n#include <igl/opengl/macos/PlatformDevice.h>\n#elif IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX_USE_EGL\n#include <igl/opengl/egl/PlatformDevice.h>\n#elif IGL_PLATFORM_LINUX\n#include <igl/opengl/glx/PlatformDevice.h>\n#elif IGL_PLATFORM_WINDOWS\n#if defined(FORCE_USE_ANGLE)\n#include <igl/opengl/egl/PlatformDevice.h>\n#else\n#include <igl/opengl/wgl/PlatformDevice.h>\n#endif // FORCE_USE_ANGLE\n#else\n#error \"Unsupported testing platform\"\n#endif\n\n#include <igl/opengl/TextureBufferExternal.h>\n\n#if IGL_PLATFORM_IOS\n#define PLATFORM_DEVICE opengl::ios::PlatformDevice\n#elif IGL_PLATFORM_MACOSX\n#define PLATFORM_DEVICE opengl::macos::PlatformDevice\n#elif IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX_USE_EGL\n#define PLATFORM_DEVICE opengl::egl::PlatformDevice\n#elif IGL_PLATFORM_LINUX\n#define PLATFORM_DEVICE opengl::glx::PlatformDevice\n#elif IGL_PLATFORM_WINDOWS\n#if defined(FORCE_USE_ANGLE)\n#define PLATFORM_DEVICE opengl::egl::PlatformDevice\n#else\n#define PLATFORM_DEVICE opengl::wgl::PlatformDevice\n#endif // FORCE_USE_ANGLE\n#endif\n\n// Use a 1x1 Framebuffer for this test\n#define OFFSCREEN_RT_WIDTH 1\n#define OFFSCREEN_RT_HEIGHT 1\n\nnamespace igl::tests {\n\nclass PlatformDeviceTest : public ::testing::Test {\n public:\n  PlatformDeviceTest() = default;\n  ~PlatformDeviceTest() override = default;\n\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n  }\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n// Test Cases\nTEST_F(PlatformDeviceTest, GetPlatformDeviceParentCls) {\n  auto* pd = iglDev_->getPlatformDevice<opengl::PlatformDevice>();\n  ASSERT_NE(pd, nullptr);\n}\n\nTEST_F(PlatformDeviceTest, GetPlatformDeviceChildCls) {\n  auto* pd = iglDev_->getPlatformDevice<PLATFORM_DEVICE>();\n  ASSERT_NE(pd, nullptr);\n}\n\n// This test will exercise createTextureBufferExternal() API.\n// Since this API creates an empty container with the settings provided, we can\n// simply check that the settings provided are what are actually set.\nTEST_F(PlatformDeviceTest, CreateTextureBufferExternal) {\n  auto* pd = iglDev_->getPlatformDevice<opengl::PlatformDevice>();\n  ASSERT_NE(pd, nullptr);\n\n  std::unique_ptr<igl::opengl::TextureBufferExternal> textureBuffer =\n      pd->createTextureBufferExternal(1, // Randomly pick 1 as the Texture ID\n                                      GL_TEXTURE_2D, // Randomly picking GL_TEXTURE_2D\n                                      TextureDesc::TextureUsageBits::Sampled,\n                                      OFFSCREEN_RT_WIDTH,\n                                      OFFSCREEN_RT_HEIGHT,\n                                      TextureFormat::RGBA_UNorm8);\n\n  ASSERT_NE(textureBuffer, nullptr);\n\n  ASSERT_EQ(textureBuffer->getTarget(), GL_TEXTURE_2D);\n  ASSERT_EQ(textureBuffer->getId(), 1);\n  ASSERT_EQ(textureBuffer->getUsage(), TextureDesc::TextureUsageBits::Sampled);\n}\n\n// This test will exercise CreateCurrentFrameBuffer() API.\n// It simply checks whether CreateCurrentFrameBuffer() does not return null pointer.\nTEST_F(PlatformDeviceTest, CreateCurrentFrameBuffer) {\n  auto* pd = iglDev_->getPlatformDevice<opengl::PlatformDevice>();\n  ASSERT_NE(pd, nullptr);\n\n  auto frameBuffer = pd->createCurrentFramebuffer();\n  ASSERT_NE(frameBuffer, nullptr);\n}\n\n//\n// Test ITexture::getEstimatedSizeInBytes with external textures\n//\nTEST_F(PlatformDeviceTest, GetEstimatedSizeInBytesExternal) {\n  auto* pd = iglDev_->getPlatformDevice<opengl::PlatformDevice>();\n\n  auto calcSize = [&](size_t width, size_t height, TextureFormat format) -> size_t {\n    auto texture = pd->createTextureBufferExternal(1, // Not actually using it\n                                                   GL_TEXTURE_2D,\n                                                   TextureDesc::TextureUsageBits::Sampled,\n                                                   width,\n                                                   height,\n                                                   format);\n    if (texture == nullptr) {\n      return 0;\n    }\n    return texture->getEstimatedSizeInBytes();\n  };\n\n  ASSERT_EQ(calcSize(64, 32, TextureFormat::Invalid), 2048); // 64 * 32 -- no bpp information\n  ASSERT_EQ(calcSize(12, 34, TextureFormat::RGBA_UNorm8), 1632); // 12 * 34 * 4\n  ASSERT_EQ(calcSize(16, 1, TextureFormat::R_UNorm8), 16);\n  ASSERT_EQ(calcSize(128, 333, TextureFormat::RG_UNorm8), 85248); // 128 * 333 * 2\n}\n\n#if IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX_USE_EGL\n//\n// Test for createTextureFromNativeDrawable() available on some platforms\n//\nTEST_F(PlatformDeviceTest, CreateTextureFromNativeDrawable) {\n  auto* pd = iglDev_->getPlatformDevice<PLATFORM_DEVICE>();\n  ASSERT_NE(pd, nullptr);\n\n  Result result;\n  auto tex = pd->createTextureFromNativeDrawable(TextureFormat::RGBA_UNorm8, &result);\n  EXPECT_TRUE(result.isOk());\n  EXPECT_NE(tex, nullptr);\n\n  auto tex2 = pd->createTextureFromNativeDrawable(1, 1, TextureFormat::RGBA_UNorm8, &result);\n  EXPECT_TRUE(result.isOk());\n  EXPECT_NE(tex2, nullptr);\n}\n\n//\n// Test for createTextureFromNativeDepth() available on some platforms\n//\nTEST_F(PlatformDeviceTest, CreateTextureFromNativeDepth) {\n  auto* pd = iglDev_->getPlatformDevice<PLATFORM_DEVICE>();\n  ASSERT_NE(pd, nullptr);\n\n  Result result;\n  auto tex = pd->createTextureFromNativeDepth(TextureFormat::Z_UNorm24, &result);\n  EXPECT_TRUE(result.isOk());\n  EXPECT_NE(tex, nullptr);\n}\n#endif\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/RenderCommandAdapter.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/RenderCommandAdapter.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../data/VertexIndexData.h\"\n#include \"../util/Common.h\"\n\n#include <cstring>\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/VertexInputState.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\n//\n// RenderCommandAdapterOGLTest\n//\n// Tests for the OpenGL RenderCommandAdapter.\n//\nclass RenderCommandAdapterOGLTest : public ::testing::Test {\n public:\n  RenderCommandAdapterOGLTest() = default;\n  ~RenderCommandAdapterOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n\n    Result ret;\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   OFFSCREEN_TEX_WIDTH,\n                                                   OFFSCREEN_TEX_HEIGHT,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_NE(offscreenTexture_, nullptr);\n\n    // Create framebuffer\n    FramebufferDesc framebufferDesc;\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_NE(framebuffer_, nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize vertex input state\n    VertexInputStateDesc inputDesc;\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(vertexInputState_, nullptr);\n\n    // Create vertex buffer\n    BufferDesc vbDesc;\n    vbDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    vbDesc.data = data::vertex_index::kQuadVert.data();\n    vbDesc.length = sizeof(data::vertex_index::kQuadVert);\n    vb_ = iglDev_->createBuffer(vbDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n    // Create UV buffer\n    BufferDesc uvDesc;\n    uvDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    uvDesc.data = data::vertex_index::kQuadUv.data();\n    uvDesc.length = sizeof(data::vertex_index::kQuadUv);\n    uvb_ = iglDev_->createBuffer(uvDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n    // Create index buffer\n    BufferDesc ibDesc;\n    ibDesc.type = BufferDesc::BufferTypeBits::Index;\n    ibDesc.data = data::vertex_index::kQuadInd.data();\n    ibDesc.length = sizeof(data::vertex_index::kQuadInd);\n    ib_ = iglDev_->createBuffer(ibDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n    // Initialize Render Pipeline Descriptor\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n\n    pipelineState_ = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(pipelineState_, nullptr);\n\n    // Create a simple 2x2 input texture (all white)\n    const TextureDesc inputTexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                        OFFSCREEN_TEX_WIDTH,\n                                                        OFFSCREEN_TEX_HEIGHT,\n                                                        TextureDesc::TextureUsageBits::Sampled);\n    inputTexture_ = iglDev_->createTexture(inputTexDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_NE(inputTexture_, nullptr);\n\n    // Upload white pixel data\n    const uint32_t whitePixels[] = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};\n    inputTexture_->upload(TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT),\n                          whitePixels);\n\n    // Create sampler\n    SamplerStateDesc samplerDesc;\n    samplerDesc.minFilter = SamplerMinMagFilter::Nearest;\n    samplerDesc.magFilter = SamplerMinMagFilter::Nearest;\n    sampler_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<ITexture> inputTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  std::shared_ptr<ISamplerState> sampler_;\n  std::unique_ptr<IBuffer> vb_;\n  std::unique_ptr<IBuffer> uvb_;\n  std::unique_ptr<IBuffer> ib_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n};\n\n//\n// DrawArrays\n//\n// Render a full-screen quad using drawArrays, read pixels, verify non-zero output.\n//\nTEST_F(RenderCommandAdapterOGLTest, DrawArrays) {\n  Result ret;\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass_, framebuffer_);\n  ASSERT_NE(cmdEncoder, nullptr);\n\n  cmdEncoder->bindRenderPipelineState(pipelineState_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimpleUvIndex, *uvb_);\n  cmdEncoder->bindTexture(0, igl::BindTarget::kFragment, inputTexture_.get());\n  cmdEncoder->bindSamplerState(0, igl::BindTarget::kFragment, sampler_.get());\n\n  cmdEncoder->draw(4);\n  cmdEncoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n\n  // Read back pixels\n  std::array<uint32_t, OFFSCREEN_TEX_WIDTH * OFFSCREEN_TEX_HEIGHT> pixels{};\n  framebuffer_->copyBytesColorAttachment(\n      *cmdQueue_,\n      0,\n      pixels.data(),\n      TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT));\n\n  // At least one pixel should be non-zero (we rendered white on black)\n  bool anyNonZero = false;\n  for (auto px : pixels) {\n    if (px != 0) {\n      anyNonZero = true;\n      break;\n    }\n  }\n  ASSERT_TRUE(anyNonZero);\n}\n\n//\n// DrawElements\n//\n// Render using indexed geometry.\n//\nTEST_F(RenderCommandAdapterOGLTest, DrawElements) {\n  Result ret;\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass_, framebuffer_);\n  ASSERT_NE(cmdEncoder, nullptr);\n\n  cmdEncoder->bindRenderPipelineState(pipelineState_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimpleUvIndex, *uvb_);\n  cmdEncoder->bindTexture(0, igl::BindTarget::kFragment, inputTexture_.get());\n  cmdEncoder->bindSamplerState(0, igl::BindTarget::kFragment, sampler_.get());\n  cmdEncoder->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n\n  cmdEncoder->drawIndexed(6);\n  cmdEncoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n\n  // Read back pixels\n  std::array<uint32_t, OFFSCREEN_TEX_WIDTH * OFFSCREEN_TEX_HEIGHT> pixels{};\n  framebuffer_->copyBytesColorAttachment(\n      *cmdQueue_,\n      0,\n      pixels.data(),\n      TextureRangeDesc::new2D(0, 0, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT));\n\n  // All pixels should be non-zero (white), since we rendered a full-screen quad\n  for (auto px : pixels) {\n    ASSERT_NE(px, 0u);\n  }\n}\n\n//\n// DrawArraysInstanced\n//\n// Render multiple instances using drawArrays.\n//\nTEST_F(RenderCommandAdapterOGLTest, DrawArraysInstanced) {\n  if (!iglDev_->hasFeature(DeviceFeatures::DrawInstanced)) {\n    GTEST_SKIP() << \"DrawInstanced not supported\";\n  }\n\n  Result ret;\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass_, framebuffer_);\n  ASSERT_NE(cmdEncoder, nullptr);\n\n  cmdEncoder->bindRenderPipelineState(pipelineState_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimpleUvIndex, *uvb_);\n  cmdEncoder->bindTexture(0, igl::BindTarget::kFragment, inputTexture_.get());\n  cmdEncoder->bindSamplerState(0, igl::BindTarget::kFragment, sampler_.get());\n\n  // Draw 2 instances of the same triangle strip\n  cmdEncoder->draw(4, 2);\n  cmdEncoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n\n  // Verify no GL errors\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// DrawElementsInstanced\n//\n// Render multiple instances using indexed geometry.\n//\nTEST_F(RenderCommandAdapterOGLTest, DrawElementsInstanced) {\n  if (!iglDev_->hasFeature(DeviceFeatures::DrawInstanced)) {\n    GTEST_SKIP() << \"DrawInstanced not supported\";\n  }\n\n  Result ret;\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass_, framebuffer_);\n  ASSERT_NE(cmdEncoder, nullptr);\n\n  cmdEncoder->bindRenderPipelineState(pipelineState_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimpleUvIndex, *uvb_);\n  cmdEncoder->bindTexture(0, igl::BindTarget::kFragment, inputTexture_.get());\n  cmdEncoder->bindSamplerState(0, igl::BindTarget::kFragment, sampler_.get());\n  cmdEncoder->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n\n  cmdEncoder->drawIndexed(6, 2);\n  cmdEncoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n\n  // Verify no GL errors\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// DrawCountIncrement\n//\n// Verify that getCurrentDrawCount() increments after draws.\n//\nTEST_F(RenderCommandAdapterOGLTest, DrawCountIncrement) {\n  const size_t drawCountBefore = iglDev_->getCurrentDrawCount();\n\n  Result ret;\n  CommandBufferDesc cbDesc;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass_, framebuffer_);\n  ASSERT_NE(cmdEncoder, nullptr);\n\n  cmdEncoder->bindRenderPipelineState(pipelineState_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmdEncoder->bindVertexBuffer(data::shader::kSimpleUvIndex, *uvb_);\n  cmdEncoder->bindTexture(0, igl::BindTarget::kFragment, inputTexture_.get());\n  cmdEncoder->bindSamplerState(0, igl::BindTarget::kFragment, sampler_.get());\n  cmdEncoder->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n\n  cmdEncoder->drawIndexed(6);\n  cmdEncoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n\n  const size_t drawCountAfter = iglDev_->getCurrentDrawCount();\n  ASSERT_GT(drawCountAfter, drawCountBefore);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/RenderPipelineReflection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/RenderPipelineReflection.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n\n#include <igl/Device.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n// Use a 4x4 texture for this test\n#define OFFSCREEN_TEX_WIDTH 4\n#define OFFSCREEN_TEX_HEIGHT 4\n\nclass RenderPipelineReflectionTest : public ::testing::Test {\n private:\n public:\n  RenderPipelineReflectionTest() = default;\n  ~RenderPipelineReflectionTest() override = default;\n\n  //\n  // SetUp()\n  //\n  void SetUp() override {\n    // Turn off debug breaks, only use in debug mode\n    igl::setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   OFFSCREEN_TEX_WIDTH,\n                                                   OFFSCREEN_TEX_HEIGHT,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 1;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    std::unique_ptr<IShaderStages> stages;\n    util::createShaderStages(iglDev_,\n                             data::shader::kOglSimpleVertShaderCube,\n                             \"vertexShader\",\n                             data::shader::kOglSimpleFragShaderCube,\n                             \"fragmentShader\",\n                             stages);\n    ASSERT_TRUE(stages != nullptr);\n    std::shared_ptr<IShaderStages> shaderStages;\n    shaderStages = std::move(stages);\n\n    // Initialize Render Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    RenderPipelineDesc renderPipelineDesc;\n    renderPipelineDesc.vertexInputState = vertexInputState_;\n\n    renderPipelineDesc.shaderStages = shaderStages;\n\n    //----------------\n    // Create Pipeline\n    //----------------\n    pipelineState_ = iglDev_->createRenderPipeline(renderPipelineDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(pipelineState_ != nullptr);\n\n    pipeRef_ = static_cast<opengl::RenderPipelineReflection*>(\n        pipelineState_->renderPipelineReflection().get());\n    ASSERT_TRUE(pipeRef_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  const std::string backend_ = IGL_BACKEND_TYPE;\n\n  std::shared_ptr<ITexture> offscreenTexture_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IRenderPipelineState> pipelineState_;\n  opengl::RenderPipelineReflection* pipeRef_{};\n};\n\nTEST_F(RenderPipelineReflectionTest, GetIndexByName) {\n  auto index = pipeRef_->getIndexByName(IGL_NAMEHANDLE(data::shader::kSimpleCubeView));\n  ASSERT_TRUE(index >= 0);\n}\n\nTEST_F(RenderPipelineReflectionTest, GetNonexistentIndexByName) {\n  auto index = pipeRef_->getIndexByName(IGL_NAMEHANDLE(\"ZYA\"));\n  ASSERT_EQ(index, -1);\n}\n\nTEST_F(RenderPipelineReflectionTest, CheckUniformDictionary) {\n  ASSERT_EQ(pipeRef_->allUniformBuffers().size(), 1);\n  ASSERT_EQ(pipeRef_->allSamplers().size(), 1);\n  ASSERT_EQ(pipeRef_->allTextures().size(), 1);\n}\n\nTEST_F(RenderPipelineReflectionTest, VerifyBuffers) {\n  auto buffers = pipeRef_->allUniformBuffers();\n  ASSERT_EQ(buffers.size(), 1);\n  for (const auto& buffer : buffers) {\n    ASSERT_EQ(buffer.shaderStage,\n              ShaderStage::Fragment); // all uniforms are set to Fragment stage in OpenGL\n    EXPECT_TRUE(buffer.name.toString() == data::shader::kSimpleCubeView);\n  }\n}\n\nTEST_F(RenderPipelineReflectionTest, VerifyTextures) {\n  auto textures = pipeRef_->allTextures();\n  ASSERT_EQ(textures.size(), 1);\n  const auto& theOneTexture = textures.front();\n  ASSERT_EQ(theOneTexture.name, \"inputImage\");\n}\n\nTEST_F(RenderPipelineReflectionTest, VerifySamplers) {\n  auto samplers = pipeRef_->allSamplers();\n  ASSERT_EQ(samplers.size(), 1);\n  const auto& theOneSampler = samplers.front();\n  ASSERT_EQ(theOneSampler.name, \"inputImage\");\n}\n\nTEST_F(RenderPipelineReflectionTest, UniformBlocks) {\n  bool useBlocks = iglDev_->hasFeature(DeviceFeatures::UniformBlocks);\n  const bool isGles3 = iglDev_->getBackendVersion().flavor == igl::BackendFlavor::OpenGL_ES &&\n                       iglDev_->getBackendVersion().majorVersion >= 3;\n\n#if defined(IGL_PLATFORM_LINUX) && IGL_PLATFORM_LINUX\n  useBlocks = !isGles3;\n#endif\n  if (!useBlocks) {\n    GTEST_SKIP() << \"Uniform blocks not supported\";\n    return;\n  }\n\n  if (!isGles3) {\n    return;\n  }\n  std::unique_ptr<IShaderStages> stages;\n  util::createShaderStages(iglDev_,\n                           data::shader::kOglSimpleVertShaderUniformBlocks,\n                           \"vertexShader\",\n                           data::shader::kOglSimpleFragShaderUniformBlocks,\n                           \"fragmentShader\",\n                           stages);\n  ASSERT_TRUE(stages != nullptr);\n  std::shared_ptr<IShaderStages> shaderStages;\n  shaderStages = std::move(stages);\n\n  // Initialize Render Pipeline Descriptor, but leave the creation\n  // to the individual tests in case further customization is required\n  RenderPipelineDesc renderPipelineDesc;\n  renderPipelineDesc.vertexInputState = vertexInputState_;\n\n  renderPipelineDesc.shaderStages = shaderStages;\n  //----------------\n  // Create Pipeline\n  //----------------\n  Result ret;\n  auto pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  auto* pipeRef = static_cast<opengl::RenderPipelineReflection*>(\n      pipelineState->renderPipelineReflection().get());\n  ASSERT_TRUE(pipeRef != nullptr);\n\n  ASSERT_TRUE(pipeRef->getIndexByName(IGL_NAMEHANDLE(\"block_without_instance_name\")) >= 0);\n  ASSERT_TRUE(pipeRef->getIndexByName(IGL_NAMEHANDLE(\"block_with_instance_name\")) >= 0);\n  ASSERT_EQ(pipeRef->allSamplers().size(), 1);\n  ASSERT_EQ(pipeRef->allTextures().size(), 1);\n\n  const auto& uniformDict = pipeRef->getUniformDictionary();\n  ASSERT_EQ(uniformDict.size(), 2);\n  const auto& uniformBlocksDict = pipeRef->getUniformBlocksDictionary();\n  ASSERT_EQ(uniformBlocksDict.size(), 2);\n\n  auto buffers = pipeRef->allUniformBuffers();\n  ASSERT_EQ(buffers.size(), 3);\n  for (auto& buffer : buffers) {\n    if (buffer.name.toString() == \"block_without_instance_name\") {\n      ASSERT_EQ(buffer.isUniformBlock, true);\n      ASSERT_EQ(buffer.members.size(), 1);\n      ASSERT_EQ(buffer.members[0].type, igl::UniformType::Float);\n      ASSERT_EQ(buffer.members[0].offset, 0);\n      ASSERT_EQ(buffer.members[0].arrayLength, 1);\n    } else if (buffer.name.toString() == \"block_with_instance_name\") {\n      ASSERT_EQ(buffer.isUniformBlock, true);\n      ASSERT_EQ(buffer.members.size(), 2);\n      for (const auto& member : buffer.members) {\n        if (member.name.toString() == \"view\") {\n          ASSERT_EQ(member.type, igl::UniformType::Float3);\n          ASSERT_EQ(member.offset, 0);\n          ASSERT_EQ(member.arrayLength, 1);\n        } else if (member.name.toString() == \"testArray\") {\n          ASSERT_EQ(member.type, igl::UniformType::Float4);\n          ASSERT_EQ(member.offset, 16);\n          ASSERT_EQ(member.arrayLength, 2);\n        }\n      }\n    } else if (buffer.name.toString() == \"non_uniform_block_bool\") {\n      ASSERT_EQ(buffer.isUniformBlock, false);\n      ASSERT_EQ(buffer.members.size(), 1);\n      ASSERT_EQ(buffer.members[0].type, igl::UniformType::Boolean);\n      ASSERT_EQ(buffer.members[0].offset, 0);\n      ASSERT_EQ(buffer.members[0].arrayLength, 1);\n    }\n  }\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/RenderStateApplication.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../data/VertexIndexData.h\"\n#include \"../util/Common.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/VertexInputState.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\n//\n// RenderStateApplicationOGLTest\n//\n// Tests that render pipeline state settings are correctly applied to OpenGL state.\n//\nclass RenderStateApplicationOGLTest : public ::testing::Test {\n public:\n  RenderStateApplicationOGLTest() = default;\n  ~RenderStateApplicationOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n\n    Result ret;\n\n    // Create offscreen texture\n    const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                   OFFSCREEN_TEX_WIDTH,\n                                                   OFFSCREEN_TEX_HEIGHT,\n                                                   TextureDesc::TextureUsageBits::Sampled |\n                                                       TextureDesc::TextureUsageBits::Attachment);\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n\n    // Create framebuffer\n    FramebufferDesc framebufferDesc;\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n\n    // Initialize render pass\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize vertex input state\n    VertexInputStateDesc inputDesc;\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n    // Create index buffer\n    BufferDesc ibDesc;\n    ibDesc.type = BufferDesc::BufferTypeBits::Index;\n    ibDesc.data = data::vertex_index::kQuadInd.data();\n    ibDesc.length = sizeof(data::vertex_index::kQuadInd);\n    ib_ = iglDev_->createBuffer(ibDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  }\n\n  void TearDown() override {}\n\n  // Helper to create a pipeline with specific settings, bind it, and do a dummy draw\n  void bindPipelineWithSettings(CullMode cullMode, WindingMode winding, PolygonFillMode fillMode) {\n    RenderPipelineDesc desc;\n    desc.vertexInputState = vertexInputState_;\n    desc.shaderStages = shaderStages_;\n    desc.targetDesc.colorAttachments.resize(1);\n    desc.targetDesc.colorAttachments[0].textureFormat = offscreenTexture_->getFormat();\n    desc.cullMode = cullMode;\n    desc.frontFaceWinding = winding;\n    desc.polygonFillMode = fillMode;\n\n    Result ret;\n    auto pipelineState = iglDev_->createRenderPipeline(desc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(pipelineState, nullptr);\n\n    CommandBufferDesc cbDesc;\n    auto cmdBuf = cmdQueue_->createCommandBuffer(cbDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n\n    auto cmdEncoder = cmdBuf->createRenderCommandEncoder(renderPass_, framebuffer_);\n    cmdEncoder->bindRenderPipelineState(pipelineState);\n    cmdEncoder->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n    cmdEncoder->drawIndexed(0);\n    cmdEncoder->endEncoding();\n    cmdQueue_->submit(*cmdBuf);\n  }\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::unique_ptr<IBuffer> ib_;\n};\n\n//\n// CullModeBack\n//\n// Verify GL state after binding pipeline with CullMode::Back.\n//\nTEST_F(RenderStateApplicationOGLTest, CullModeBack) {\n  bindPipelineWithSettings(CullMode::Back, WindingMode::CounterClockwise, PolygonFillMode::Fill);\n\n  GLboolean cullEnabled = GL_FALSE;\n  context_->getBooleanv(GL_CULL_FACE, &cullEnabled);\n  ASSERT_EQ(cullEnabled, GL_TRUE);\n\n  GLint cullFaceMode = 0;\n  context_->getIntegerv(GL_CULL_FACE_MODE, &cullFaceMode);\n  ASSERT_EQ(cullFaceMode, GL_BACK);\n}\n\n//\n// CullModeFront\n//\n// Verify GL state after binding pipeline with CullMode::Front.\n//\nTEST_F(RenderStateApplicationOGLTest, CullModeFront) {\n  bindPipelineWithSettings(CullMode::Front, WindingMode::CounterClockwise, PolygonFillMode::Fill);\n\n  GLboolean cullEnabled = GL_FALSE;\n  context_->getBooleanv(GL_CULL_FACE, &cullEnabled);\n  ASSERT_EQ(cullEnabled, GL_TRUE);\n\n  GLint cullFaceMode = 0;\n  context_->getIntegerv(GL_CULL_FACE_MODE, &cullFaceMode);\n  ASSERT_EQ(cullFaceMode, GL_FRONT);\n}\n\n//\n// CullModeDisabled\n//\n// Verify GL state after binding pipeline with CullMode::Disabled.\n//\nTEST_F(RenderStateApplicationOGLTest, CullModeDisabled) {\n  bindPipelineWithSettings(\n      CullMode::Disabled, WindingMode::CounterClockwise, PolygonFillMode::Fill);\n\n  GLboolean cullEnabled = GL_TRUE;\n  context_->getBooleanv(GL_CULL_FACE, &cullEnabled);\n  ASSERT_EQ(cullEnabled, GL_FALSE);\n}\n\n//\n// WindingModeCCW\n//\n// Verify CounterClockwise winding mode.\n//\nTEST_F(RenderStateApplicationOGLTest, WindingModeCCW) {\n  bindPipelineWithSettings(CullMode::Back, WindingMode::CounterClockwise, PolygonFillMode::Fill);\n\n  GLint frontFace = 0;\n  context_->getIntegerv(GL_FRONT_FACE, &frontFace);\n  ASSERT_EQ(frontFace, GL_CCW);\n}\n\n//\n// PolygonFillLine\n//\n// Verify PolygonFillMode::Line (only on desktop GL).\n//\nTEST_F(RenderStateApplicationOGLTest, PolygonFillLine) {\n  if (!context_->deviceFeatures().hasInternalFeature(opengl::InternalFeatures::PolygonFillMode)) {\n    GTEST_SKIP() << \"PolygonFillMode not supported (likely OpenGL ES)\";\n  }\n\n  bindPipelineWithSettings(\n      CullMode::Disabled, WindingMode::CounterClockwise, PolygonFillMode::Line);\n\n#if defined(GL_POLYGON_MODE)\n  GLint polygonMode[2] = {0, 0};\n  context_->getIntegerv(GL_POLYGON_MODE, polygonMode);\n  ASSERT_EQ(polygonMode[0], GL_LINE);\n#else\n  // GL_POLYGON_MODE is not available on OpenGL ES; skip the assertion\n  // but validate no GL errors occurred\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n#endif\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/Resource.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"../data/ShaderData.h\"\n#include \"../util/Common.h\"\n\n#include <igl/Buffer.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests {\n\n//\n// ResourceOGLTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass ResourceOGLTest : public ::testing::Test {\n public:\n  ResourceOGLTest() = default;\n  ~ResourceOGLTest() override = default;\n\n  // Set up common resources. This will create a device and a command queue\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    Result ret;\n\n    // Initialize shader stages\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize Graphics Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.shaderStages = shaderStages_;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  RenderPipelineDesc renderPipelineDesc_;\n};\n\n//\n// UniformBuffer Initialize Test\n//\n// Tests the initialize() function of igl::opengl::UniformBuffer\n// Tests normal setup.\n// Tests a failed setup where the data length is 0.\n// Tests a failed setup where the data in null.\n//\nTEST_F(ResourceOGLTest, UniformBufferInitialize) {\n  // Test dynamic draw setup.\n  char data[100];\n  BufferDesc desc{\n      .type = BufferDesc::BufferTypeBits::Uniform,\n      .data = &data,\n      .length = sizeof(data),\n      .storage = ResourceStorage::Shared,\n  };\n  Result res;\n  auto framebuffer = ResourceOGLTest::iglDev_->createBuffer(desc, &res);\n  ASSERT_EQ(res.code, Result::Code::Ok);\n  ASSERT_EQ(framebuffer->getSizeInBytes(), sizeof(data));\n\n  // Test dynamic draw setup.\n  desc = BufferDesc{\n      .type = BufferDesc::BufferTypeBits::Uniform,\n      .data = &data,\n      .length = 0,\n      .storage = ResourceStorage::Shared,\n  };\n  framebuffer = ResourceOGLTest::iglDev_->createBuffer(desc, &res);\n  ASSERT_EQ(res.code, Result::Code::ArgumentOutOfRange);\n  ASSERT_EQ(framebuffer->getSizeInBytes(), 0);\n\n  desc = BufferDesc{\n      .type = BufferDesc::BufferTypeBits::Uniform,\n      .length = 0,\n      .storage = ResourceStorage::Shared,\n  };\n  framebuffer = ResourceOGLTest::iglDev_->createBuffer(desc, &res);\n  ASSERT_EQ(res.code, Result::Code::ArgumentNull);\n  ASSERT_EQ(framebuffer->getSizeInBytes(), 0);\n}\n\n//\n// UniformBuffer Upload Test\n//\n// Tests the upload() function of igl::opengl::UniformBuffer\n// Tests a normal upload of 100 bytes\n// Tests an upload where the buffer range is too long.\n//\nTEST_F(ResourceOGLTest, UniformBufferUpload) {\n  // Test dynamic draw setup.\n\n  Result res;\n  char data[150];\n  const BufferDesc desc{\n      .type = BufferDesc::BufferTypeBits::Uniform,\n      .data = &data,\n      .length = sizeof(data),\n      .storage = ResourceStorage::Shared,\n  };\n  auto framebuffer = ResourceOGLTest::iglDev_->createBuffer(desc, &res);\n\n  char newData[100];\n\n  // copy newData (100 bytes) into buffer (size 150) starting at offset 30\n  uintptr_t offset = 30;\n  res = framebuffer->upload(&newData, BufferRange(sizeof(newData), offset));\n  ASSERT_EQ(res.code, Result::Code::Ok);\n\n  // try to copy newData (100 bytes) into buffer (size 150) starting at offset 60\n  offset = 60;\n  res = framebuffer->upload(&newData, BufferRange(sizeof(newData), offset));\n  ASSERT_EQ(res.code, Result::Code::ArgumentOutOfRange);\n}\n\n//\n// ArrayBuffer Initialize Test\n//\n// Tests the initialize() function of igl::opengl::ArrayBuffer\n// Exercise all the success and failure paths\n// Test normal dynamic and static draw setups.\n// Test failed static draw setup with a nullptr argument.\n//\nTEST_F(ResourceOGLTest, ArrayBufferInitialize) {\n  // Test dynamic draw setup.\n  BufferDesc desc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .length = 0,\n      .storage = ResourceStorage::Shared,\n  };\n  Result res;\n  auto framebuffer = ResourceOGLTest::iglDev_->createBuffer(desc, &res);\n  ASSERT_EQ(res.code, Result::Code::Ok);\n  ASSERT_EQ(framebuffer->getSizeInBytes(), 0);\n\n  // Test static draw setup.\n  char data[100];\n  desc = BufferDesc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .data = &data,\n      .length = 0,\n      .storage = ResourceStorage::Managed,\n  };\n  framebuffer = ResourceOGLTest::iglDev_->createBuffer(desc, &res);\n  ASSERT_EQ(res.code, Result::Code::Ok);\n  ASSERT_EQ(framebuffer->getSizeInBytes(), 0);\n\n  // Test static draw setup with null ptr to the data.\n  desc = BufferDesc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .length = 0,\n      .storage = ResourceStorage::Managed,\n  };\n  framebuffer = ResourceOGLTest::iglDev_->createBuffer(desc, &res);\n  ASSERT_EQ(res.code, Result::Code::ArgumentNull);\n  ASSERT_EQ(framebuffer->getSizeInBytes(), 0);\n}\n\n//\n// ArrayBuffer Upload Test\n//\n// Tests the upload() function of igl::opengl::ArrayBuffer\n// Exercise all the success and failure paths\n// Test an upload attempt to a ResourceStorage::Managed buffer for failure.\n// Test a normal upload attempt to a ResourceStorage::Shared buffer.\n//\nTEST_F(ResourceOGLTest, ArrayBufferUpload) {\n  // Test dynamic draw upload.\n  char data[100];\n  BufferDesc desc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .data = &data,\n      .length = sizeof(data),\n      .storage = ResourceStorage::Managed,\n  };\n  Result res;\n  auto framebuffer = ResourceOGLTest::iglDev_->createBuffer(desc, &res);\n  res = framebuffer->upload(&data, BufferRange(sizeof(data), 1));\n  ASSERT_EQ(res.code, Result::Code::InvalidOperation);\n\n  // Test normal static draw upload.\n  desc = BufferDesc{\n      .type = BufferDesc::BufferTypeBits::Index,\n      .length = 0,\n      .storage = ResourceStorage::Shared,\n  };\n  framebuffer = ResourceOGLTest::iglDev_->createBuffer(desc, &res);\n  res = framebuffer->upload(&data, BufferRange(0L, 0L));\n  ASSERT_EQ(res.code, Result::Code::Ok);\n}\n\n//\n// Shader Create Test\n//\n// Tests the create() function of igl::opengl::ShaderStages\n// Exercise the success path\n// Test the successful linking of a vertex and fragment shader.\n//\nTEST_F(ResourceOGLTest, ShaderCreate1) {\n  Result res;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n\n  // success path\n  pipelineState = ResourceOGLTest::iglDev_->createRenderPipeline(renderPipelineDesc_, &res);\n  ASSERT_EQ(res.code, Result::Code::Ok);\n  ASSERT_TRUE(pipelineState != nullptr);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/SRGBWriteControl.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// SRGBWriteControlOGLTest\n//\n// Tests for sRGB write control in OpenGL.\n//\nclass SRGBWriteControlOGLTest : public ::testing::Test {\n public:\n  SRGBWriteControlOGLTest() = default;\n  ~SRGBWriteControlOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// SRGBWriteEnableDisable\n//\n// Test enabling and disabling sRGB framebuffer write.\n//\nTEST_F(SRGBWriteControlOGLTest, SRGBWriteEnableDisable) {\n  if (!iglDev_->hasFeature(DeviceFeatures::SRGBWriteControl)) {\n    GTEST_SKIP() << \"sRGB write control not supported\";\n  }\n\n  // Enable GL_FRAMEBUFFER_SRGB\n  context_->enable(GL_FRAMEBUFFER_SRGB);\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n\n  GLboolean isEnabled = context_->isEnabled(GL_FRAMEBUFFER_SRGB);\n  ASSERT_EQ(isEnabled, GL_TRUE);\n\n  // Disable GL_FRAMEBUFFER_SRGB\n  context_->disable(GL_FRAMEBUFFER_SRGB);\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n\n  isEnabled = context_->isEnabled(GL_FRAMEBUFFER_SRGB);\n  ASSERT_EQ(isEnabled, GL_FALSE);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/SamplerState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/SamplerState.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <string>\n#include <igl/opengl/Device.h>\n\nnamespace igl::tests {\n\n#ifndef GL_CLAMP_TO_BORDER\n#define GL_CLAMP_TO_BORDER 0x812D\n#endif\n\n//\n// SamplerStateOGLTest\n//\n// Unit tests for igl::opengl::SamplerState.\n//\nclass SamplerStateOGLTest : public ::testing::Test {\n public:\n  // Set up common resources.\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    device_ = util::createTestDevice();\n    context_ = &static_cast<opengl::Device&>(*device_).getContext();\n\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  opengl::IContext* context_{};\n};\n\n//\n// convertGLMinFilter tests\n//\n// This tests conversions from glMinFilter to\n// SamplerMinMagFilter\n//\nTEST_F(SamplerStateOGLTest, SamplerStateConvertGLMinFilter) {\n  auto dummySamplerState =\n      std::make_unique<igl::opengl::SamplerState>(*context_, SamplerStateDesc::newLinear());\n  ASSERT_EQ(dummySamplerState->convertGLMinFilter(GL_NEAREST), SamplerMinMagFilter::Nearest);\n  ASSERT_EQ(dummySamplerState->convertGLMinFilter(GL_NEAREST_MIPMAP_NEAREST),\n            SamplerMinMagFilter::Nearest);\n  ASSERT_EQ(dummySamplerState->convertGLMinFilter(GL_NEAREST_MIPMAP_LINEAR),\n            SamplerMinMagFilter::Nearest);\n  ASSERT_EQ(dummySamplerState->convertGLMinFilter(GL_LINEAR), SamplerMinMagFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMinFilter(GL_LINEAR_MIPMAP_NEAREST),\n            SamplerMinMagFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMinFilter(GL_LINEAR_MIPMAP_LINEAR),\n            SamplerMinMagFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMinFilter(GL_NONE), SamplerMinMagFilter::Nearest);\n}\n\n//\n// convertGLMipFilter tests\n//\n// This test checks the conversion from OpenGL Mip filter enums to their\n// corresponding IGL equivalent.\n//\nTEST_F(SamplerStateOGLTest, SamplerStateConvertGLMipFilter) {\n  auto dummySamplerState =\n      std::make_unique<igl::opengl::SamplerState>(*context_, SamplerStateDesc::newLinear());\n  ASSERT_EQ(dummySamplerState->convertGLMipFilter(GL_NEAREST), SamplerMipFilter::Disabled);\n  ASSERT_EQ(dummySamplerState->convertGLMipFilter(GL_NEAREST_MIPMAP_NEAREST),\n            SamplerMipFilter::Nearest);\n  ASSERT_EQ(dummySamplerState->convertGLMipFilter(GL_NEAREST_MIPMAP_LINEAR),\n            SamplerMipFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMipFilter(GL_LINEAR), SamplerMipFilter::Disabled);\n  ASSERT_EQ(dummySamplerState->convertGLMipFilter(GL_LINEAR_MIPMAP_NEAREST),\n            SamplerMipFilter::Nearest);\n  ASSERT_EQ(dummySamplerState->convertGLMipFilter(GL_LINEAR_MIPMAP_LINEAR),\n            SamplerMipFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMipFilter(GL_NONE), SamplerMipFilter::Disabled);\n}\n\n//\n// convertMinMipFilter tests\n//\n// This test checks the conversion from IGL Min/Mip filter enums to their\n// corresponding OpenGL equivalent.\n//\nTEST_F(SamplerStateOGLTest, SamplerStateConvertMinMipFilter) {\n  auto dummySamplerState =\n      std::make_unique<igl::opengl::SamplerState>(*context_, SamplerStateDesc::newLinear());\n  ASSERT_EQ(dummySamplerState->convertMinMipFilter(SamplerMinMagFilter::Nearest,\n                                                   SamplerMipFilter::Disabled),\n            GL_NEAREST);\n  ASSERT_EQ(dummySamplerState->convertMinMipFilter(SamplerMinMagFilter::Nearest,\n                                                   SamplerMipFilter::Linear),\n            GL_NEAREST_MIPMAP_LINEAR);\n  ASSERT_EQ(dummySamplerState->convertMinMipFilter(SamplerMinMagFilter::Nearest,\n                                                   SamplerMipFilter::Nearest),\n            GL_NEAREST_MIPMAP_NEAREST);\n}\n\n//\n// convertGLMagFilter tests\n//\n// This test checks the conversion from OpenGL Min/Mag filter enums to their\n// corresponding IGL equivalent.\n//\nTEST_F(SamplerStateOGLTest, SamplerStateConvertGLMagFilter) {\n  auto dummySamplerState =\n      std::make_unique<igl::opengl::SamplerState>(*context_, SamplerStateDesc::newLinear());\n  ASSERT_EQ(dummySamplerState->convertGLMagFilter(GL_NEAREST), SamplerMinMagFilter::Nearest);\n  ASSERT_EQ(dummySamplerState->convertGLMagFilter(GL_NEAREST_MIPMAP_NEAREST),\n            SamplerMinMagFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMagFilter(GL_NEAREST_MIPMAP_LINEAR),\n            SamplerMinMagFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMagFilter(GL_LINEAR), SamplerMinMagFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMagFilter(GL_LINEAR_MIPMAP_NEAREST),\n            SamplerMinMagFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMagFilter(GL_LINEAR_MIPMAP_LINEAR),\n            SamplerMinMagFilter::Linear);\n  ASSERT_EQ(dummySamplerState->convertGLMagFilter(GL_NONE), SamplerMinMagFilter::Linear);\n}\n\n//\n// convertGLAddressMode tests\n//\n// This test checks the conversion from OpenGL Address Mode enums to their\n// corresponding IGL equivalent.\n//\nTEST_F(SamplerStateOGLTest, SamplerStateConvertGLAddressMode) {\n  auto dummySamplerState =\n      std::make_unique<igl::opengl::SamplerState>(*context_, SamplerStateDesc::newLinear());\n  ASSERT_EQ(dummySamplerState->convertGLAddressMode(GL_REPEAT), SamplerAddressMode::Repeat);\n  ASSERT_EQ(dummySamplerState->convertGLAddressMode(GL_CLAMP_TO_EDGE), SamplerAddressMode::Clamp);\n  ASSERT_EQ(dummySamplerState->convertGLAddressMode(GL_MIRRORED_REPEAT),\n            SamplerAddressMode::MirrorRepeat);\n  ASSERT_EQ(dummySamplerState->convertGLAddressMode(GL_CLAMP_TO_BORDER),\n            SamplerAddressMode::Repeat);\n}\n\n//\n// convertAddressMode tests\n//\n// This test checks the conversion from IGL Min/Mag filter enums to their\n// corresponding OpenGL equivalent.\n//\nTEST_F(SamplerStateOGLTest, SamplerStateConvertAddressMode) {\n  auto dummySamplerState =\n      std::make_unique<igl::opengl::SamplerState>(*context_, SamplerStateDesc::newLinear());\n  ASSERT_EQ(dummySamplerState->convertAddressMode(SamplerAddressMode::Repeat), GL_REPEAT);\n  ASSERT_EQ(dummySamplerState->convertAddressMode(SamplerAddressMode::Clamp), GL_CLAMP_TO_EDGE);\n  ASSERT_EQ(dummySamplerState->convertAddressMode(SamplerAddressMode::MirrorRepeat),\n            GL_MIRRORED_REPEAT);\n}\n\nTEST_F(SamplerStateOGLTest, BindNullTexture) {\n  auto dummySamplerState =\n      std::make_unique<igl::opengl::SamplerState>(*context_, SamplerStateDesc::newLinear());\n  dummySamplerState->bind(nullptr);\n  EXPECT_TRUE(true); // Expect no crash\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/SyncObjects.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// SyncObjectsOGLTest\n//\n// Tests for OpenGL sync (fence) objects.\n//\nclass SyncObjectsOGLTest : public ::testing::Test {\n public:\n  SyncObjectsOGLTest() = default;\n  ~SyncObjectsOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// FenceSyncAndWait\n//\n// Create a fence sync object, flush, and query its status.\n//\nTEST_F(SyncObjectsOGLTest, FenceSyncAndWait) {\n  if (!context_->deviceFeatures().hasInternalFeature(opengl::InternalFeatures::Sync)) {\n    GTEST_SKIP() << \"Sync objects not supported\";\n  }\n\n  // Create a fence sync\n  GLsync sync = context_->fenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);\n  ASSERT_NE(sync, nullptr);\n\n  // Flush to ensure the sync is submitted\n  context_->flush();\n\n  // Query the sync status\n  GLint syncStatus = GL_UNSIGNALED;\n  GLsizei length = 0;\n  context_->getSynciv(sync, GL_SYNC_STATUS, sizeof(GLint), &length, &syncStatus);\n\n  // Status should be either signaled or unsignaled (both are valid)\n  ASSERT_TRUE(syncStatus == GL_SIGNALED || syncStatus == GL_UNSIGNALED);\n\n  // Wait by calling finish which ensures all commands complete\n  context_->finish();\n\n  // After finish, query again - should be signaled\n  context_->getSynciv(sync, GL_SYNC_STATUS, sizeof(GLint), &length, &syncStatus);\n  ASSERT_EQ(syncStatus, GL_SIGNALED);\n\n  // Clean up\n  context_->deleteSync(sync);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/Texture.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <string>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/TextureBuffer.h>\n#include <igl/opengl/TextureTarget.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\nstruct TextureFormatData {\n  GLuint glTexInternalFormat = 0x0000;\n  GLuint glTexFormat = 0x0000;\n  GLuint glTexType = 0x0000;\n  TextureFormat texFormatOutput = TextureFormat::Invalid;\n};\n\n//\n// OGLTextureTest\n//\n// Unit tests for OGL Texture, TextureTarget, and TextureBuffer.\n// Covers code paths that may not be hit by top level texture calls from device.\n//\nclass TextureOGLTest : public ::testing::Test {\n private:\n public:\n  TextureOGLTest() = default;\n  ~TextureOGLTest() override = default;\n\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n    device_ = util::createTestDevice();\n    context_ = &static_cast<opengl::Device&>(*device_).getContext();\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  opengl::IContext* context_{};\n  std::shared_ptr<IDevice> device_;\n};\n\n//\n// Texture Creation Paths Test\n//\n// This tests all failure and success paths during texture creation specific\n// to the base class igl::opengl::Texture.\n//\nTEST_F(TextureOGLTest, TextureCreation) {\n  std::unique_ptr<igl::opengl::TextureTarget> textureTarget;\n  std::unique_ptr<igl::opengl::TextureBuffer> textureBuffer;\n  Result ret;\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           OFFSCREEN_TEX_WIDTH,\n                                           OFFSCREEN_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Storage);\n\n  { // Storage not supported by OGL Texture via TextureTarget API\n    textureTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n    ret = textureTarget->create(texDesc, false);\n    ASSERT_EQ(ret.code, Result::Code::Unsupported);\n    Result::setOk(&ret);\n  }\n  { // Storage supported by OGL Texture via igl::Device API only if TexStorage is supported.\n    auto texture = device_->createTexture(texDesc, &ret);\n    ASSERT_EQ(\n        ret.isOk(),\n        context_->deviceFeatures().hasInternalFeature(igl::opengl::InternalFeatures::TexStorage));\n    Result::setOk(&ret);\n    if (context_->deviceFeatures().hasInternalFeature(igl::opengl::InternalFeatures::TexStorage)) {\n      ASSERT_NE(texture, nullptr);\n    } else {\n      ASSERT_EQ(texture, nullptr);\n    }\n  }\n\n  texDesc.usage = TextureDesc::TextureUsageBits::Sampled;\n\n  // Sampled and hasStorageAlready not supported in OGL Texture\n  textureBuffer = std::make_unique<igl::opengl::TextureBuffer>(*context_, texDesc.format);\n  ret = textureBuffer->create(texDesc, true);\n  ASSERT_EQ(ret.code, Result::Code::Unsupported);\n\n  // Correct usage of TextureBuffer::create\n  textureBuffer = std::make_unique<igl::opengl::TextureBuffer>(*context_, texDesc.format);\n  ret = textureBuffer->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  // Cannot create the texture again after it has already been created\n  ret = textureBuffer->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::InvalidOperation);\n\n  texDesc.usage = TextureDesc::TextureUsageBits::Attachment;\n\n  // Correct usage of TextureTarget::create\n  textureTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n  ret = textureTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  // Cannot create the texture again after it has already been created\n  ret = textureTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::InvalidOperation);\n}\n\n//\n// Supported Texture Formats Test\n//\n// Tests expected behavior for IGL supported texture format checks\n//\nTEST_F(TextureOGLTest, TextureFormats) {\n  // Set up inputs and expected outputs for Texture::toTextureFormat\n  // {glTexInternalFormat, glTexFormat, glTexType, expected output TextureFormat}\n  const std::vector<TextureFormatData> texFormats{\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_4x4_KHR, 0, 0, TextureFormat::RGBA_ASTC_4x4},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_4x4},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_5x4_KHR, 0, 0, TextureFormat::RGBA_ASTC_5x4},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_5x4},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_5x5_KHR, 0, 0, TextureFormat::RGBA_ASTC_5x5},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_5x5},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_6x5},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_6x6_KHR, 0, 0, TextureFormat::RGBA_ASTC_6x6},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_6x6},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_8x5_KHR, 0, 0, TextureFormat::RGBA_ASTC_8x5},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_8x5},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_8x6_KHR, 0, 0, TextureFormat::RGBA_ASTC_8x6},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_8x6},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_8x8_KHR, 0, 0, TextureFormat::RGBA_ASTC_8x8},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_8x8},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_10x5_KHR, 0, 0, TextureFormat::RGBA_ASTC_10x5},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_10x5},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_10x6_KHR, 0, 0, TextureFormat::RGBA_ASTC_10x6},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_10x6},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_10x8_KHR, 0, 0, TextureFormat::RGBA_ASTC_10x8},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_10x8},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_10x10_KHR, 0, 0, TextureFormat::RGBA_ASTC_10x10},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_10x10},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_12x10_KHR, 0, 0, TextureFormat::RGBA_ASTC_12x10},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_12x10},\n      TextureFormatData{GL_COMPRESSED_RGBA_ASTC_12x12_KHR, 0, 0, TextureFormat::RGBA_ASTC_12x12},\n      TextureFormatData{\n          GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR, 0, 0, TextureFormat::SRGB8_A8_ASTC_12x12},\n      TextureFormatData{\n          GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG, 0, 0, TextureFormat::RGBA_PVRTC_2BPPV1},\n      TextureFormatData{GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, 0, 0, TextureFormat::RGB_PVRTC_2BPPV1},\n      TextureFormatData{\n          GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG, 0, 0, TextureFormat::RGBA_PVRTC_4BPPV1},\n      TextureFormatData{GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG, 0, 0, TextureFormat::RGB_PVRTC_4BPPV1},\n      TextureFormatData{GL_ETC1_RGB8_OES, 0, 0, TextureFormat::RGB8_ETC1},\n      TextureFormatData{GL_COMPRESSED_RGB8_ETC2, 0, 0, TextureFormat::RGB8_ETC2},\n      TextureFormatData{GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2,\n                        0,\n                        0,\n                        TextureFormat::RGB8_Punchthrough_A1_ETC2},\n      TextureFormatData{GL_COMPRESSED_RGBA8_ETC2_EAC, 0, 0, TextureFormat::RGBA8_EAC_ETC2},\n      TextureFormatData{GL_RED, GL_RED, GL_UNSIGNED_BYTE, TextureFormat::R_UNorm8},\n      TextureFormatData{GL_RED, GL_RED, 0, TextureFormat::Invalid},\n      TextureFormatData{GL_RG, GL_RG, GL_UNSIGNED_BYTE, TextureFormat::RG_UNorm8},\n      TextureFormatData{GL_RG, GL_RG, 0, TextureFormat::Invalid},\n      TextureFormatData{GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, TextureFormat::RGBX_UNorm8},\n      TextureFormatData{GL_RG, GL_RG, 0, TextureFormat::Invalid},\n      TextureFormatData{GL_BGR, GL_BGR, GL_UNSIGNED_SHORT_5_6_5, TextureFormat::B5G6R5_UNorm},\n      TextureFormatData{GL_BGR, GL_BGR, 0, TextureFormat::Invalid},\n      TextureFormatData{GL_RGBA, GL_RGBA, GL_UNSIGNED_BYTE, TextureFormat::RGBA_UNorm8},\n      TextureFormatData{\n          GL_RGB10_A2, GL_RGBA, GL_UNSIGNED_INT_2_10_10_10_REV, TextureFormat::RGB10_A2_UNorm_Rev},\n      TextureFormatData{GL_RGB10_A2UI,\n                        GL_RGBA_INTEGER,\n                        GL_UNSIGNED_INT_2_10_10_10_REV,\n                        TextureFormat::RGB10_A2_Uint_Rev},\n      TextureFormatData{GL_RGBA, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1, TextureFormat::R5G5B5A1_UNorm},\n      TextureFormatData{GL_RGBA8, 0, 0, TextureFormat::RGBA_UNorm8},\n      TextureFormatData{GL_RGBA, GL_RG, GL_UNSIGNED_BYTE, TextureFormat::Invalid},\n      TextureFormatData{GL_BGRA, GL_BGRA, GL_UNSIGNED_BYTE, TextureFormat::BGRA_UNorm8},\n      TextureFormatData{GL_BGRA, GL_BGRA, GL_UNSIGNED_SHORT_5_5_5_1, TextureFormat::B5G5R5A1_UNorm},\n      TextureFormatData{GL_BGRA, GL_BGRA, 0, TextureFormat::Invalid},\n      TextureFormatData{GL_RGBA4, 0, 0, TextureFormat::ABGR_UNorm4},\n      TextureFormatData{GL_ALPHA, GL_ALPHA, GL_UNSIGNED_BYTE, TextureFormat::A_UNorm8},\n      TextureFormatData{GL_ALPHA, GL_ALPHA, 0, TextureFormat::Invalid},\n      TextureFormatData{GL_R16F, 0, 0, TextureFormat::R_F16},\n      TextureFormatData{GL_R16UI, 0, 0, TextureFormat::R_UInt16},\n      TextureFormatData{GL_R16, 0, 0, TextureFormat::R_UNorm16},\n      TextureFormatData{GL_R32F, 0, 0, TextureFormat::R_F32},\n      TextureFormatData{GL_R32UI, 0, 0, TextureFormat::R_UInt32},\n      TextureFormatData{GL_RG16F, 0, 0, TextureFormat::RG_F16},\n      TextureFormatData{GL_RG16, 0, 0, TextureFormat::RG_UNorm16},\n      TextureFormatData{GL_RG16UI, 0, 0, TextureFormat::RG_UInt16},\n      TextureFormatData{GL_RG32F, 0, 0, TextureFormat::RG_F32},\n      TextureFormatData{GL_RGB16F, 0, 0, TextureFormat::RGB_F16},\n      TextureFormatData{GL_RGBA16F, 0, 0, TextureFormat::RGBA_F16},\n      TextureFormatData{GL_RGB32F, 0, 0, TextureFormat::RGB_F32},\n      TextureFormatData{GL_RGBA32F, 0, 0, TextureFormat::RGBA_F32},\n      TextureFormatData{GL_RGBA32UI, 0, 0, TextureFormat::RGBA_UInt32},\n      TextureFormatData{\n          GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, TextureFormat::Z_UNorm16},\n      TextureFormatData{\n          GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, TextureFormat::Z_UNorm32},\n      TextureFormatData{GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, 0, TextureFormat::Invalid},\n      TextureFormatData{\n          GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, TextureFormat::Z_UNorm16},\n      TextureFormatData{GL_DEPTH_COMPONENT16, 0, 0, TextureFormat::Z_UNorm16},\n      TextureFormatData{\n          GL_DEPTH_COMPONENT24, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, TextureFormat::Z_UNorm24},\n      TextureFormatData{GL_DEPTH_COMPONENT24, 0, 0, TextureFormat::Z_UNorm24},\n      TextureFormatData{\n          GL_DEPTH_COMPONENT32, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, TextureFormat::Z_UNorm32},\n      TextureFormatData{GL_DEPTH_COMPONENT32, 0, 0, TextureFormat::Z_UNorm32},\n      TextureFormatData{GL_DEPTH_STENCIL,\n                        GL_DEPTH_STENCIL,\n                        GL_FLOAT_32_UNSIGNED_INT_24_8_REV,\n                        TextureFormat::S8_UInt_Z32_UNorm},\n      TextureFormatData{GL_DEPTH_STENCIL, GL_DEPTH_STENCIL, 0, TextureFormat::Invalid},\n      TextureFormatData{GL_DEPTH24_STENCIL8,\n                        GL_DEPTH_STENCIL,\n                        GL_UNSIGNED_INT_24_8,\n                        TextureFormat::S8_UInt_Z24_UNorm},\n      TextureFormatData{GL_DEPTH24_STENCIL8, 0, 0, TextureFormat::S8_UInt_Z24_UNorm},\n      TextureFormatData{\n          GL_STENCIL_INDEX, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, TextureFormat::S_UInt8},\n      TextureFormatData{GL_STENCIL_INDEX8, 0, 0, TextureFormat::S_UInt8},\n      TextureFormatData{GL_STENCIL_INDEX, GL_STENCIL_INDEX, 0, TextureFormat::Invalid},\n      TextureFormatData{0, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, TextureFormat::Invalid},\n  };\n\n  for (auto data : texFormats) {\n    const TextureFormat output = igl::opengl::Texture::glInternalFormatToTextureFormat(\n        data.glTexInternalFormat, data.glTexFormat, data.glTexType);\n    ASSERT_EQ(output, data.texFormatOutput)\n        << \"IGL Format: \"\n        << igl::TextureFormatProperties::fromTextureFormat(data.texFormatOutput).name\n        << \" internalformat: 0x\" << std::hex << data.glTexInternalFormat << \" format: 0x\"\n        << std::hex << data.glTexFormat << \" type: 0x\" << std::hex << data.glTexType;\n  }\n}\n\n//\n// Texture Alignment Test\n//\n// This tests that alignment calculations are done correctly.\n//\nTEST_F(TextureOGLTest, TextureAlignment) {\n  {\n    constexpr size_t width = 128;\n    constexpr size_t bytesPerPixel = 4;\n    Result ret;\n\n    const TextureDesc texDesc = TextureDesc::new2D(\n        TextureFormat::RGBA_UNorm8, width, width, TextureDesc::TextureUsageBits::Sampled);\n\n    auto texture = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n    ret = texture->create(texDesc, false);\n\n    ASSERT_EQ(texture->getAlignment((width >> 0) * bytesPerPixel), 8);\n\n    ASSERT_EQ(texture->getAlignment((width >> 0) * bytesPerPixel, 0), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 1) * bytesPerPixel, 1), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 2) * bytesPerPixel, 2), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 3) * bytesPerPixel, 3), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 4) * bytesPerPixel, 4), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 5) * bytesPerPixel, 5), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 6) * bytesPerPixel, 6), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 7) * bytesPerPixel, 7), 4);\n\n    ASSERT_EQ(texture->getAlignment((width >> 0) * bytesPerPixel, 0, width >> 0), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 1) * bytesPerPixel, 1, width >> 1), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 2) * bytesPerPixel, 2, width >> 2), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 3) * bytesPerPixel, 3, width >> 3), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 4) * bytesPerPixel, 4, width >> 4), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 5) * bytesPerPixel, 5, width >> 5), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 6) * bytesPerPixel, 6, width >> 6), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 7) * bytesPerPixel, 7, width >> 7), 4);\n\n    ASSERT_EQ(texture->getAlignment((width >> 1) * bytesPerPixel, 0, width >> 1), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 2) * bytesPerPixel, 1, width >> 2), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 3) * bytesPerPixel, 2, width >> 3), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 4) * bytesPerPixel, 3, width >> 4), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 5) * bytesPerPixel, 4, width >> 5), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 6) * bytesPerPixel, 5, width >> 6), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 7) * bytesPerPixel, 6, width >> 7), 4);\n  }\n\n  {\n    constexpr size_t width = 24;\n    constexpr size_t bytesPerPixel = 4;\n    Result ret;\n\n    const TextureDesc texDesc = TextureDesc::new2D(\n        TextureFormat::RGBA_UNorm8, width, width, TextureDesc::TextureUsageBits::Sampled);\n\n    auto texture = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n    ret = texture->create(texDesc, false);\n\n    ASSERT_EQ(texture->getAlignment((width >> 0) * bytesPerPixel), 8);\n\n    ASSERT_EQ(texture->getAlignment((width >> 0) * bytesPerPixel, 0), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 1) * bytesPerPixel, 1), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 2) * bytesPerPixel, 2), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 3) * bytesPerPixel, 3), 4);\n    ASSERT_EQ(texture->getAlignment((width >> 4) * bytesPerPixel, 4), 4);\n\n    ASSERT_EQ(texture->getAlignment((width >> 0) * bytesPerPixel, 0, width >> 0), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 1) * bytesPerPixel, 1, width >> 1), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 2) * bytesPerPixel, 2, width >> 2), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 3) * bytesPerPixel, 3, width >> 3), 4);\n    ASSERT_EQ(texture->getAlignment((width >> 4) * bytesPerPixel, 4, width >> 4), 4);\n\n    ASSERT_EQ(texture->getAlignment((width >> 1) * bytesPerPixel, 0, width >> 1), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 2) * bytesPerPixel, 1, width >> 2), 8);\n    ASSERT_EQ(texture->getAlignment((width >> 3) * bytesPerPixel, 2, width >> 3), 4);\n    ASSERT_EQ(texture->getAlignment((width >> 4) * bytesPerPixel, 3, width >> 4), 4);\n  }\n}\n\n//\n// Mipmap Generation Flag Initialization Test\n//\n// This tests that the mipmapGeneration_ flag is properly initialized to Manual\n//\nTEST_F(TextureOGLTest, MipmapGenerationFlagInitialization) {\n  Result ret;\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           OFFSCREEN_TEX_WIDTH,\n                                           OFFSCREEN_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Sampled);\n\n  auto texture = device_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n  ASSERT_NE(texture, nullptr);\n\n  // Cast to OpenGL texture to access the getMipmapGeneration method\n  auto* oglTexture = static_cast<opengl::Texture*>(texture.get());\n  ASSERT_NE(oglTexture, nullptr);\n\n  // Test that the mipmapGeneration flag is initialized to Manual by default\n  ASSERT_EQ(oglTexture->getMipmapGeneration(), TextureDesc::TextureMipmapGeneration::Manual);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/Texture3D.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// Texture3DOGLTest\n//\n// Tests for 3D texture creation and operations in OpenGL.\n//\nclass Texture3DOGLTest : public ::testing::Test {\n public:\n  Texture3DOGLTest() = default;\n  ~Texture3DOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// Create3DTexture\n//\n// Create a 3D texture and verify it is valid.\n//\nTEST_F(Texture3DOGLTest, Create3DTexture) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Texture3D)) {\n    GTEST_SKIP() << \"3D textures not supported\";\n  }\n\n  Result ret;\n  TextureDesc desc = TextureDesc::new3D(\n      TextureFormat::RGBA_UNorm8, 4, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n}\n\n//\n// Upload3DData\n//\n// Create a 3D texture and upload data to it.\n//\nTEST_F(Texture3DOGLTest, Upload3DData) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Texture3D)) {\n    GTEST_SKIP() << \"3D textures not supported\";\n  }\n\n  Result ret;\n  const int width = 2, height = 2, depth = 2;\n  TextureDesc desc = TextureDesc::new3D(\n      TextureFormat::RGBA_UNorm8, width, height, depth, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  // Upload data\n  std::vector<uint32_t> pixels(width * height * depth, 0xFF00FF00);\n  auto range = TextureRangeDesc::new3D(0, 0, 0, width, height, depth);\n  auto uploadResult = texture->upload(range, pixels.data());\n  ASSERT_TRUE(uploadResult.isOk()) << uploadResult.message.c_str();\n}\n\n//\n// VerifyDimensions\n//\n// Verify the dimensions of a created 3D texture.\n//\nTEST_F(Texture3DOGLTest, VerifyDimensions) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Texture3D)) {\n    GTEST_SKIP() << \"3D textures not supported\";\n  }\n\n  Result ret;\n  const size_t width = 8, height = 4, depth = 2;\n  TextureDesc desc = TextureDesc::new3D(\n      TextureFormat::RGBA_UNorm8, width, height, depth, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  auto dimensions = texture->getDimensions();\n  ASSERT_EQ(dimensions.width, width);\n  ASSERT_EQ(dimensions.height, height);\n  ASSERT_EQ(dimensions.depth, depth);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/TextureBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/TextureBuffer.h>\n\n#include <array>\n#include <cmath>\n#include <string>\n#include <igl/opengl/CommandQueue.h>\n#include <igl/opengl/Device.h>\n#include <igl/tests/util/TestDevice.h>\n#include <igl/tests/util/TextureValidationHelpers.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\n// Picking this to check mipmap validity, max mipmap level = log(16) - 1 = 3\n#define MIPMAP_TEX_WIDTH 16\n#define MIPMAP_TEX_HEIGHT 16\n\nstruct TextureFormatToGL {\n  TextureFormat texFormatInput = TextureFormat::Invalid;\n\n  // Expected conversion to GL\n  GLuint glInternalFormat = 0x0000;\n  GLuint glFormat = 0x0000;\n  GLuint glType = 0x0000;\n};\n\n//\n// TextureBufferOGLTest\n//\n// Unit tests for igl::opengl::TextureBuffer.\n// Covers code paths that may not be hit by top level texture calls from device.\n//\nclass TextureBufferOGLTest : public ::testing::Test {\n private:\n public:\n  TextureBufferOGLTest() = default;\n  ~TextureBufferOGLTest() override = default;\n\n  void SetUp() override {\n    // Turn off debug breaks, only use in debug mode\n    igl::setDebugBreakEnabled(false);\n\n    device_ = util::createTestDevice();\n    ASSERT_TRUE(device_ != nullptr);\n    context_ = &static_cast<opengl::Device&>(*device_).getContext();\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  opengl::IContext* context_{};\n  std::shared_ptr<IDevice> device_;\n};\n\n//\n// Texture Creation Paths Test\n//\n// This tests all failure and success paths for TextureBuffer::create.\n// Also covers private function createTexture which is called within create.\n// See tests for Texture.cpp for cases covering cases specific to base class.\n//\nTEST_F(TextureBufferOGLTest, TextureCreation) {\n  std::unique_ptr<igl::opengl::TextureBuffer> textureBuffer;\n  Result ret;\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::ABGR_UNorm4,\n                                           OFFSCREEN_TEX_WIDTH,\n                                           OFFSCREEN_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Sampled);\n\n  // Correct usage of TextureBuffer::create\n  textureBuffer = std::make_unique<igl::opengl::TextureBuffer>(*context_, texDesc.format);\n  ret = textureBuffer->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  // kRenderTarget not supported by TextureBuffer\n  texDesc.usage = TextureDesc::TextureUsageBits::Attachment;\n  textureBuffer = std::make_unique<igl::opengl::TextureBuffer>(*context_, texDesc.format);\n  ret = textureBuffer->create(texDesc, false);\n  ASSERT_FALSE(ret.isOk());\n\n  texDesc.usage = TextureDesc::TextureUsageBits::Sampled;\n\n  // Incorrect texture format\n  texDesc.format = TextureFormat::Invalid;\n  textureBuffer = std::make_unique<igl::opengl::TextureBuffer>(*context_, texDesc.format);\n  ret = textureBuffer->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::ArgumentInvalid);\n}\n\n//\n// TextureBuffer Mipmap generation Test\n//\n// Tests expected behavior for Texture mipmap for supported GL formats.\n// Test paths are tested through TextureBuffer::create\n//\nTEST_F(TextureBufferOGLTest, TextureMipmapGen) {\n  std::unique_ptr<igl::opengl::TextureBuffer> textureBuffer;\n  Result ret;\n  // Generate mipmap and correct query of initial count\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           MIPMAP_TEX_WIDTH,\n                                           MIPMAP_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Sampled);\n\n  const size_t maxDim = std::max<size_t>(texDesc.width, texDesc.height);\n  const int targetlevel = std::floor(log2(maxDim)) + 1;\n\n  texDesc.numMipLevels = targetlevel; // log(16) + 1\n  textureBuffer = std::make_unique<igl::opengl::TextureBuffer>(*context_, texDesc.format);\n  ret = textureBuffer->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  igl::opengl::CommandQueue queue;\n  textureBuffer->generateMipmap(queue);\n  ASSERT_EQ(textureBuffer->getNumMipLevels(), targetlevel);\n}\n\n//\n// AutoGenerateOnUpload Test\n//\n// This test verifies that the AutoGenerateOnUpload flag correctly triggers\n// mipmap generation when texture data is uploaded.\n//\nTEST_F(TextureBufferOGLTest, AutoGenerateMipmapOnUpload) {\n  Result ret;\n\n  constexpr uint32_t kNumMipLevels = 2u;\n  constexpr uint32_t kTexWidth = 2u;\n  constexpr uint32_t kTexHeight = 2u;\n\n  constexpr uint32_t kColor = 0xdeadbeef;\n  constexpr std::array<uint32_t, 4> kBaseMipData = {kColor, kColor, kColor, kColor};\n  constexpr std::array<uint32_t, 1> kExpectedMip1Data = {kColor}; // Should be same color after\n                                                                  // generation\n\n  // Create texture with AutoGenerateOnUpload flag\n  TextureDesc textureDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                               kTexWidth,\n                                               kTexHeight,\n                                               TextureDesc::TextureUsageBits::Sampled |\n                                                   TextureDesc::TextureUsageBits::Attachment);\n  textureDesc.numMipLevels = kNumMipLevels;\n  textureDesc.mipmapGeneration = TextureDesc::TextureMipmapGeneration::AutoGenerateOnUpload;\n\n  auto texture = device_->createTexture(textureDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  auto* oglTexture = static_cast<opengl::Texture*>(texture.get());\n  ASSERT_NE(oglTexture, nullptr);\n\n  ASSERT_EQ(oglTexture->getMipmapGeneration(),\n            TextureDesc::TextureMipmapGeneration::AutoGenerateOnUpload);\n\n  ASSERT_EQ(oglTexture->getNumMipLevels(), kNumMipLevels);\n\n  CommandQueueDesc cmdQueueDesc{};\n  auto cmdQueue = device_->createCommandQueue(cmdQueueDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cmdQueue, nullptr);\n\n  // Upload data to mip level 0 - this should trigger automatic mipmap generation\n  ret = texture->upload(texture->getFullRange(0), kBaseMipData.data());\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Validate that mip level 0 contains the uploaded data\n  util::validateUploadedTextureRange(*device_,\n                                     *cmdQueue,\n                                     texture,\n                                     texture->getFullRange(0),\n                                     kBaseMipData.data(),\n                                     \"AutoGen: Base level (0)\");\n\n  // Validate that mip level 1 was auto-generated with expected content\n  // The auto-generated mip should contain the same solid color (averaged from base level)\n  util::validateUploadedTextureRange(*device_,\n                                     *cmdQueue,\n                                     texture,\n                                     texture->getFullRange(1),\n                                     kExpectedMip1Data.data(),\n                                     \"AutoGen: Generated level (1)\");\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/TextureBufferBase.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/TextureBufferBase.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <cmath>\n#include <string>\n#include <igl/opengl/CommandQueue.h>\n#include <igl/opengl/Device.h>\n\nnamespace igl::tests {\n\n#ifndef GL_TEXTURE_BINDING_RECTANGLE\n#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6\n#endif\n\n// Picking this to check mipmap validity, max mipmap level = log(16) - 1 = 3\n#define MIPMAP_TEX_WIDTH_16 16\n#define MIPMAP_TEX_HEIGHT_16 16\n#define MIPMAP_TEX_WIDTH_1023 1023\n#define MIPMAP_TEX_HEIGHT_1023 1023\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n//\n// TextureBufferBaseOGLTest\n//\n// Unit tests for igl::opengl::TextureBufferBase.\n// Covers code paths that may not be hit by top level texture calls from device.\n//\nclass TextureBufferBaseOGLTest : public ::testing::Test {\n private:\n public:\n  TextureBufferBaseOGLTest() = default;\n  ~TextureBufferBaseOGLTest() override = default;\n\n  void SetUp() override {\n    // Turn off debug breaks, only use in debug mode\n    igl::setDebugBreakEnabled(false);\n\n    device_ = util::createTestDevice();\n    ASSERT_TRUE(device_ != nullptr);\n    context_ = &static_cast<opengl::Device&>(*device_).getContext();\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  opengl::IContext* context_{};\n  std::shared_ptr<IDevice> device_;\n};\n\nclass TextureBufferBaseMock : public igl::opengl::TextureBufferBase {\n public:\n  explicit TextureBufferBaseMock(igl::opengl::IContext& context) :\n    igl::opengl::TextureBufferBase(context, TextureFormat::RGBA_UNorm8) {}\n\n  using igl::opengl::TextureBufferBase::setTextureBufferProperties;\n  using igl::opengl::TextureBufferBase::setUsage;\n\n  // Used by TextureBufferBase::attachAsColor()\n  [[nodiscard]] uint32_t getSamples() const override {\n    return numSamples;\n  }\n\n  // NOLINTBEGIN(bugprone-easily-swappable-parameters)\n  bool getFormatDetails(TextureFormat textureFormat,\n                        igl::TextureDesc::TextureUsage usage,\n                        GLint& internalFormat,\n                        GLenum& format,\n                        GLenum& type) const {\n    // NOLINTEND(bugprone-easily-swappable-parameters)\n    FormatDescGL formatGL;\n    const auto result = toFormatDescGL(textureFormat, usage, formatGL);\n    internalFormat = formatGL.internalFormat;\n    format = formatGL.format;\n    type = formatGL.type;\n    return result;\n  }\n  uint32_t numSamples = 1;\n};\n\n//\n// getType function Tests.\n//\n// This tests TextureBufferBase::getType(),\n//\nTEST_F(TextureBufferBaseOGLTest, TextureGetType) {\n  std::unique_ptr<TextureBufferBaseMock> textureBufferBase;\n  textureBufferBase = std::make_unique<TextureBufferBaseMock>(*context_);\n  textureBufferBase->setUsage(TextureDesc::TextureUsageBits::Sampled);\n\n  textureBufferBase->setTextureBufferProperties(0, GL_TEXTURE_CUBE_MAP);\n  ASSERT_EQ(TextureType::Cube, textureBufferBase->getType());\n\n  textureBufferBase->setTextureBufferProperties(0, GL_TEXTURE_2D);\n  ASSERT_EQ(TextureType::TwoD, textureBufferBase->getType());\n\n  // Unsupported Type\n  textureBufferBase->setTextureBufferProperties(0, GL_TEXTURE_BINDING_RECTANGLE);\n  ASSERT_EQ(TextureType::Invalid, textureBufferBase->getType());\n}\n\n//\n// Bind function Tests.\n//\n// This tests TextureBufferBase::bind(),\n//                               unbind(),\n//\nTEST_F(TextureBufferBaseOGLTest, TextureBindAndUnbind) {\n  std::unique_ptr<TextureBufferBaseMock> textureBufferBase;\n  textureBufferBase = std::make_unique<TextureBufferBaseMock>(*context_);\n  textureBufferBase->setUsage(TextureDesc::TextureUsageBits::Sampled);\n\n  GLuint textureID = 0;\n  context_->genTextures(1, &textureID);\n  textureBufferBase->setTextureBufferProperties(textureID, GL_TEXTURE_2D);\n\n  GLint value = 0;\n  textureBufferBase->bind();\n  // Get binding and check it is non-zero\n  context_->getIntegerv(GL_TEXTURE_BINDING_2D, &value);\n  ASSERT_EQ(value, textureID);\n\n  textureBufferBase->unbind();\n  // Get binding and check it is zero\n  context_->getIntegerv(GL_TEXTURE_BINDING_2D, &value);\n  ASSERT_EQ(value, GL_ZERO);\n\n  context_->deleteTextures(1, &textureID);\n}\n\n//\n// Attach function Tests.\n//\n// This tests TextureBufferBase::attachAsColor(),\n//                               attachAsDepth(),\n//                               attachAsStencil(),\n//\nTEST_F(TextureBufferBaseOGLTest, TextureAttach) {\n  std::unique_ptr<TextureBufferBaseMock> textureBufferBase;\n  textureBufferBase = std::make_unique<TextureBufferBaseMock>(*context_);\n  textureBufferBase->setUsage(TextureDesc::TextureUsageBits::Sampled);\n\n  GLuint textureID = 0;\n  context_->genTextures(1, &textureID);\n\n  GLuint tmpFb = 0;\n  context_->genFramebuffers(1, &tmpFb);\n  context_->bindFramebuffer(GL_FRAMEBUFFER, tmpFb);\n\n  GLint type = -1234;\n  // === No target texture, nothing happens ===\n  textureBufferBase->attachAsColor(0, opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);\n  ASSERT_EQ(type, GL_NONE);\n  textureBufferBase->attachAsDepth(opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);\n  ASSERT_EQ(type, GL_NONE);\n  textureBufferBase->attachAsStencil(opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);\n  ASSERT_EQ(type, GL_NONE);\n\n  // === With target texture ===\n  textureBufferBase->setTextureBufferProperties(textureID, GL_TEXTURE_2D);\n  textureBufferBase->bind();\n  textureBufferBase->attachAsColor(0, opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);\n  ASSERT_EQ(0, context_->getError());\n  ASSERT_EQ(type, GL_TEXTURE);\n\n  // Multiple Render Targets\n  if (context_->deviceFeatures().hasFeature(DeviceFeatures::MultipleRenderTargets)) {\n    const GLuint colorAttachment1 = GL_COLOR_ATTACHMENT1;\n    textureBufferBase->attachAsColor(1, opengl::Texture::AttachmentParams{});\n    context_->getFramebufferAttachmentParameteriv(\n        GL_FRAMEBUFFER, colorAttachment1, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);\n    ASSERT_EQ(type, GL_TEXTURE);\n    ASSERT_EQ(0, context_->getError());\n  }\n\n  textureBufferBase->attachAsDepth(opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);\n  ASSERT_EQ(0, context_->getError());\n  ASSERT_EQ(type, GL_TEXTURE);\n\n  textureBufferBase->attachAsStencil(opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);\n  ASSERT_EQ(type, GL_TEXTURE);\n\n  // Must initialize texture for multisample functionality to work\n  GLint internalFormat = 0;\n  GLenum format = 0;\n  GLenum textureType = 0;\n  textureBufferBase->setTextureBufferProperties(textureID, GL_TEXTURE_2D);\n  ASSERT_TRUE(textureBufferBase->getFormatDetails(TextureFormat::RGBA_UNorm8,\n                                                  TextureDesc::TextureUsageBits::Sampled,\n                                                  internalFormat,\n                                                  format,\n                                                  textureType));\n\n  context_->texImage2D(GL_TEXTURE_2D,\n                       0,\n                       internalFormat,\n                       OFFSCREEN_TEX_WIDTH,\n                       OFFSCREEN_TEX_HEIGHT,\n                       0,\n                       format,\n                       textureType,\n                       nullptr);\n\n  textureBufferBase->numSamples = 123;\n  textureBufferBase->attachAsColor(0, opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &type);\n  ASSERT_EQ(0, context_->getError());\n  ASSERT_EQ(type, GL_TEXTURE);\n\n  context_->deleteTextures(1, &textureID);\n}\n\n//\n// Basic Mipmap level Tests for TextureBufferBase\n//\n// This tests TextureBufferBase::generateMipmap(),\n//                               getNumMipLevels(),\n//\nTEST_F(TextureBufferBaseOGLTest, TextureMipmapGen) {\n  std::unique_ptr<TextureBufferBaseMock> textureBufferBase, textureBufferBase2;\n  textureBufferBase = std::make_unique<TextureBufferBaseMock>(*context_);\n  textureBufferBase->setUsage(TextureDesc::TextureUsageBits::Sampled);\n  textureBufferBase2 = std::make_unique<TextureBufferBaseMock>(*context_);\n  textureBufferBase2->setUsage(TextureDesc::TextureUsageBits::Sampled);\n\n  GLuint textureIDs[2];\n  context_->genTextures(2, textureIDs);\n  textureBufferBase->setTextureBufferProperties(textureIDs[0], GL_TEXTURE_2D);\n  textureBufferBase2->setTextureBufferProperties(textureIDs[1], GL_TEXTURE_2D);\n\n  // Generate mipmap and correct query of initial count\n  TextureDesc texDesc16 = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             MIPMAP_TEX_WIDTH_16,\n                                             MIPMAP_TEX_HEIGHT_16,\n                                             TextureDesc::TextureUsageBits::Sampled);\n  TextureDesc texDesc1023 = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                               MIPMAP_TEX_WIDTH_1023,\n                                               MIPMAP_TEX_HEIGHT_1023,\n                                               TextureDesc::TextureUsageBits::Sampled);\n\n  // By default numMipLevels = 1, which is the base texture\n  // 16x16\n  size_t maxDim = std::max<size_t>(texDesc16.width, texDesc16.height);\n  int targetlevel = std::floor(log2(maxDim)) + 1;\n\n  texDesc16.numMipLevels = targetlevel;\n  Result ret = textureBufferBase->create(texDesc16, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  igl::opengl::CommandQueue queue;\n  textureBufferBase->generateMipmap(queue);\n  ASSERT_EQ(textureBufferBase->getNumMipLevels(), targetlevel);\n\n  // 1023x1023\n  maxDim = std::max<size_t>(texDesc1023.width, texDesc1023.height);\n  targetlevel = std::floor(log2(maxDim)) + 1;\n\n  texDesc1023.numMipLevels = targetlevel;\n  ret = textureBufferBase2->create(texDesc1023, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  textureBufferBase2->generateMipmap(queue);\n  ASSERT_EQ(textureBufferBase2->getNumMipLevels(), targetlevel);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/TextureTarget.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/TextureTarget.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <string>\n#include <igl/opengl/Device.h>\n\nnamespace igl::tests {\n\n// Picking this just to match the texture we will use. If you use a different\n// size texture, then you will have to either create a new offscreenTexture_\n// and the framebuffer object in your test, so know exactly what the end result\n// would be after sampling\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\n// Picking this to check mipmap validity, max mipmap level = log(16) - 1 = 3\n#define MIPMAP_TEX_WIDTH_16 16\n#define MIPMAP_TEX_HEIGHT_16 16\n#define MIPMAP_TEX_WIDTH_1023 1023\n#define MIPMAP_TEX_HEIGHT_1023 1023\n\n//\n// TextureTargetOGLTest\n//\n// Unit tests for igl::opengl::TextureTarget.\n// Covers code paths that may not be hit by top level texture calls from device.\n//\nclass TextureTargetOGLTest : public ::testing::Test {\n private:\n public:\n  TextureTargetOGLTest() = default;\n  ~TextureTargetOGLTest() override = default;\n\n  void SetUp() override {\n    // Turn off debug breaks, only use in debug mode\n    igl::setDebugBreakEnabled(false);\n\n    device_ = util::createTestDevice();\n    ASSERT_TRUE(device_ != nullptr);\n    context_ = &static_cast<opengl::Device&>(*device_).getContext();\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  opengl::IContext* context_{};\n  std::shared_ptr<IDevice> device_;\n};\n\n//\n// Specifications Test\n//\n// This is a sanity test that override specs are defined correctly.\n//\nTEST_F(TextureTargetOGLTest, Specifications) {\n  std::unique_ptr<igl::opengl::TextureTarget> textureTarget =\n      std::make_unique<igl::opengl::TextureTarget>(*context_, TextureFormat::RGBA_UNorm8);\n  ASSERT_EQ(textureTarget->getType(), TextureType::TwoD);\n  ASSERT_EQ(textureTarget->getUsage(), TextureDesc::TextureUsageBits::Attachment);\n}\n\n//\n// Texture Creation Paths Test\n//\n// This tests all failure and success paths for TextureTarget::create.\n// Also covers private functions createRenderBuffer and toRenderBufferFormatGL\n// which are called within create.\n// See tests for Texture.cpp for cases covering cases specific to base class.\n//\nTEST_F(TextureTargetOGLTest, TextureCreation) {\n  std::shared_ptr<igl::opengl::TextureTarget> textureTarget;\n  Result ret;\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           OFFSCREEN_TEX_WIDTH,\n                                           OFFSCREEN_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Sampled);\n\n  // kShaderRead not supported by TextureTarget\n  textureTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n  ret = textureTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Unsupported);\n\n  texDesc.usage = TextureDesc::TextureUsageBits::Attachment;\n\n  // TextureTarget only supports TwoD\n  textureTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n  texDesc.type = TextureType::ThreeD;\n  ret = textureTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Unsupported);\n\n  // TextureTarget only supports a single mip level\n  textureTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n  texDesc.type = TextureType::TwoD;\n  texDesc.numMipLevels = 2;\n  ret = textureTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Unsupported);\n\n  // TextureTarget only supports a layer\n  textureTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n  texDesc.type = TextureType::TwoD;\n  texDesc.numMipLevels = 1;\n  texDesc.numLayers = 2;\n  ret = textureTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Unsupported);\n\n  // Unsupported texture format\n  texDesc.format = TextureFormat::Invalid;\n  textureTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n  texDesc.numLayers = 1;\n  ret = textureTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::ArgumentInvalid);\n\n  // Correct usage of TextureTarget::create with > 1 samples\n  texDesc.format = TextureFormat::RGBA_UNorm8;\n  texDesc.numSamples = 2;\n  textureTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n  ret = textureTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n}\n\n//\n// Bind and Attach/Detach function Tests.\n//\n// This tests TextureTarget::bind(),\n//                           unbind(),\n//                           attachAsColor(),\n//                           detachAsColor(),\n//                           attachAsDepth(),\n//                           attachAsStencil()\n//\nTEST_F(TextureTargetOGLTest, TextureBindAndAttachAndDetach) {\n  const std::unique_ptr<igl::opengl::TextureTarget> textureTarget;\n  Result ret;\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 OFFSCREEN_TEX_WIDTH,\n                                                 OFFSCREEN_TEX_HEIGHT,\n                                                 TextureDesc::TextureUsageBits::Attachment);\n\n  // Create 3 types of targets\n  auto colorTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n  auto depthTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n  auto stencilTarget = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n\n  // calling create() so that renderBufferID_ is set\n  ret = colorTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  ret = depthTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  ret = stencilTarget->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n\n  // Since the default framebuffer already comes with unattachable color,\n  // depth and stencil, we have to create a new framebuffer before trying\n  // to attach our renderbuffers\n  GLuint tmpFb = 0;\n  context_->genFramebuffers(1, &tmpFb);\n  context_->bindFramebuffer(GL_FRAMEBUFFER, tmpFb);\n\n  //--------------------------------------------------------------------------\n  // Test Renderbuffer as Color\n  //--------------------------------------------------------------------------\n  GLint colorType = -1, colorRid = -1;\n\n  colorTarget->attachAsColor(0, opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &colorType);\n  // Check here that colorType is GL_RENDERBUFFER\n  ASSERT_EQ(colorType, GL_RENDERBUFFER);\n\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &colorRid);\n  // Check here that colorRid is anything other than -1\n  ASSERT_NE(colorRid, -1);\n\n  colorTarget->detachAsColor(0, false);\n  // Nothing to test\n\n  //--------------------------------------------------------------------------\n  // Test Renderbuffer as Depth\n  //--------------------------------------------------------------------------\n  GLint depthType = -1, depthRid = -1;\n\n  depthTarget->attachAsDepth(opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &depthType);\n  // Check here that depthType is GL_RENDERBUFFER\n  ASSERT_EQ(depthType, GL_RENDERBUFFER);\n\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &depthRid);\n  // Check here that depthRid != -1 and depthRid != colorRid\n  ASSERT_NE(depthRid, -1);\n  ASSERT_NE(depthRid, colorRid);\n\n  //--------------------------------------------------------------------------\n  // Test Renderbuffer as Stencil\n  //--------------------------------------------------------------------------\n  GLint stencilType = -1, stencilRid = -1;\n\n  stencilTarget->attachAsStencil(opengl::Texture::AttachmentParams{});\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &stencilType);\n  // Check here that stencilType is GL_RENDERBUFFER\n  ASSERT_EQ(stencilType, GL_RENDERBUFFER);\n\n  context_->getFramebufferAttachmentParameteriv(\n      GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &stencilRid);\n  // Check here that stencilRid != -1 and stencilRid != colorRid and stencilRid != depthRid\n  ASSERT_NE(stencilRid, -1);\n  ASSERT_NE(stencilRid, colorRid);\n  ASSERT_NE(stencilRid, depthRid);\n\n  //--------------------------------------------------------------------------\n  // Test bind and unbind\n  //--------------------------------------------------------------------------\n  GLint value = 0;\n\n  colorTarget->bind();\n  // Get renderBuffer binding and check it is non-zero\n  context_->getIntegerv(GL_RENDERBUFFER_BINDING, &value);\n  ASSERT_NE(value, GL_ZERO);\n\n  colorTarget->unbind();\n  // Get renderBuffer binding and check it is zero\n  context_->getIntegerv(GL_RENDERBUFFER_BINDING, &value);\n  ASSERT_EQ(value, GL_ZERO);\n\n  depthTarget->bind();\n  // Get renderBuffer binding and check it is non-zero\n  context_->getIntegerv(GL_RENDERBUFFER_BINDING, &value);\n  ASSERT_NE(value, GL_ZERO);\n\n  depthTarget->unbind();\n  // Get renderBuffer binding and check it is zero\n  context_->getIntegerv(GL_RENDERBUFFER_BINDING, &value);\n  ASSERT_EQ(value, GL_ZERO);\n\n  stencilTarget->bind();\n  // Get renderBuffer binding and check it is non-zero\n  context_->getIntegerv(GL_RENDERBUFFER_BINDING, &value);\n  ASSERT_NE(value, GL_ZERO);\n\n  stencilTarget->unbind();\n  // Get renderBuffer binding and check it is zero\n  context_->getIntegerv(GL_RENDERBUFFER_BINDING, &value);\n  ASSERT_EQ(value, GL_ZERO);\n}\n\nTEST_F(TextureTargetOGLTest, CreateWithDebugName) {\n  const std::unique_ptr<igl::opengl::TextureTarget> textureTarget;\n  Result ret;\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           OFFSCREEN_TEX_WIDTH,\n                                           OFFSCREEN_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Attachment);\n  texDesc.debugName = \"test\";\n\n  // Create 3 types of targets\n  auto target = std::make_unique<igl::opengl::TextureTarget>(*context_, texDesc.format);\n\n  // calling create() so that renderBufferID_ is set\n  ret = target->create(texDesc, false);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/Timer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/Timer.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// TimerOGLTest\n//\n// Tests for the OpenGL Timer.\n//\nclass TimerOGLTest : public ::testing::Test {\n public:\n  TimerOGLTest() = default;\n  ~TimerOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// BasicTimerQuery\n//\n// Create a timer, end it, and check that resultsAvailable can be queried.\n//\nTEST_F(TimerOGLTest, BasicTimerQuery) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Timers)) {\n    GTEST_SKIP() << \"Timer queries not supported\";\n  }\n\n  Result ret;\n  auto timer = iglDev_->createTimer(&ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(timer, nullptr);\n\n  // Cast to opengl::Timer and test the end method\n  auto* oglTimer = static_cast<opengl::Timer*>(timer.get());\n  ASSERT_NE(oglTimer, nullptr);\n\n  // End the timer query\n  oglTimer->end();\n\n  // Check for GL errors\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n\n  // resultsAvailable() should be callable without crashing\n  // Results may or may not be available immediately\n  const bool available = oglTimer->resultsAvailable();\n  // We don't assert on the value, just that calling it doesn't crash or error\n  (void)available;\n\n  // If results are available, getElapsedTimeNanos should return a value\n  if (available) {\n    const uint64_t elapsed = oglTimer->getElapsedTimeNanos();\n    // Elapsed time should be non-negative (it's uint64_t so always >= 0)\n    (void)elapsed;\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/UniformAdapter.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/UniformAdapter.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/Uniform.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\n//\n// UniformAdapterOGLTest\n//\n// Tests for the OpenGL UniformAdapter.\n//\nclass UniformAdapterOGLTest : public ::testing::Test {\n public:\n  UniformAdapterOGLTest() = default;\n  ~UniformAdapterOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// SetUniform\n//\n// Store uniform data in the adapter.\n//\nTEST_F(UniformAdapterOGLTest, SetUniform) {\n  opengl::UniformAdapter adapter(*context_, opengl::UniformAdapter::PipelineType::Render);\n\n  // Create a uniform descriptor for a float uniform\n  UniformDesc desc;\n  desc.location = 0;\n  desc.type = UniformType::Float;\n  desc.numElements = 1;\n\n  float value = 42.0f;\n  Result ret;\n  adapter.setUniform(desc, &value, &ret);\n  // setUniform should succeed\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n}\n\n//\n// ClearUniformBuffers\n//\n// Verify clearUniformBuffers resets the adapter state.\n//\nTEST_F(UniformAdapterOGLTest, ClearUniformBuffers) {\n  opengl::UniformAdapter adapter(*context_, opengl::UniformAdapter::PipelineType::Render);\n\n  // Set a uniform\n  UniformDesc desc;\n  desc.location = 0;\n  desc.type = UniformType::Float;\n  desc.numElements = 1;\n\n  float value = 1.0f;\n  Result ret;\n  adapter.setUniform(desc, &value, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Clear and verify no crash\n  adapter.clearUniformBuffers();\n\n  // Set again after clear should also work\n  adapter.setUniform(desc, &value, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/UniformBlockBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/Buffer.h>\n#include <igl/opengl/Device.h>\n#include <igl/opengl/IContext.h>\n\nnamespace igl::tests {\n\n//\n// UniformBlockBufferOGLTest\n//\n// Tests for uniform block buffer binding in OpenGL.\n//\nclass UniformBlockBufferOGLTest : public ::testing::Test {\n public:\n  UniformBlockBufferOGLTest() = default;\n  ~UniformBlockBufferOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// SetBlockBinding\n//\n// Create a buffer with uniform block data and verify binding does not cause errors.\n//\nTEST_F(UniformBlockBufferOGLTest, SetBlockBinding) {\n  if (!iglDev_->hasFeature(DeviceFeatures::UniformBlocks)) {\n    GTEST_SKIP() << \"Uniform blocks not supported\";\n  }\n\n  Result ret;\n\n  // Create a uniform buffer\n  const float uniformData[4] = {1.0f, 0.0f, 0.0f, 0.0f};\n  BufferDesc bufDesc;\n  bufDesc.type = BufferDesc::BufferTypeBits::Uniform;\n  bufDesc.data = uniformData;\n  bufDesc.length = sizeof(uniformData);\n\n  auto uniformBuffer = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(uniformBuffer, nullptr);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// BindBase\n//\n// Bind a uniform buffer to a binding point using bindBufferBase.\n//\nTEST_F(UniformBlockBufferOGLTest, BindBase) {\n  if (!iglDev_->hasFeature(DeviceFeatures::UniformBlocks)) {\n    GTEST_SKIP() << \"Uniform blocks not supported\";\n  }\n\n  Result ret;\n\n  const float uniformData[4] = {1.0f, 2.0f, 3.0f, 4.0f};\n  BufferDesc bufDesc;\n  bufDesc.type = BufferDesc::BufferTypeBits::Uniform;\n  bufDesc.data = uniformData;\n  bufDesc.length = sizeof(uniformData);\n\n  auto uniformBuffer = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(uniformBuffer, nullptr);\n\n  // Verify buffer creation and data upload produced no GL errors\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n//\n// BindRange\n//\n// Bind a sub-range of a uniform buffer to a binding point.\n//\nTEST_F(UniformBlockBufferOGLTest, BindRange) {\n  if (!iglDev_->hasFeature(DeviceFeatures::UniformBlocks)) {\n    GTEST_SKIP() << \"Uniform blocks not supported\";\n  }\n\n  Result ret;\n\n  // Create a larger uniform buffer\n  const float uniformData[16] = {1.0f,\n                                 2.0f,\n                                 3.0f,\n                                 4.0f,\n                                 5.0f,\n                                 6.0f,\n                                 7.0f,\n                                 8.0f,\n                                 9.0f,\n                                 10.0f,\n                                 11.0f,\n                                 12.0f,\n                                 13.0f,\n                                 14.0f,\n                                 15.0f,\n                                 16.0f};\n  BufferDesc bufDesc;\n  bufDesc.type = BufferDesc::BufferTypeBits::Uniform;\n  bufDesc.data = uniformData;\n  bufDesc.length = sizeof(uniformData);\n\n  auto uniformBuffer = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(uniformBuffer, nullptr);\n\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/UniformBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../data/TextureData.h\"\n#include \"../data/VertexIndexData.h\"\n#include \"../util/Common.h\"\n\n#include <array>\n#include <string>\n#include <igl/CommandBuffer.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/Shader.h>\n#include <igl/VertexInputState.h>\n\n// to not use extra curly braces in initializer lists\n// This is needed to get tests working on Android\n#ifdef __clang__\n#pragma clang diagnostic ignored \"-Wmissing-braces\"\n#endif\n\nnamespace igl::tests {\n\n// Use a 4x4 texture for this test\nconstexpr size_t kOffscreenTexWidth = 4;\nconstexpr size_t kOffscreenTexHeight = 4;\n#if IGL_OPENGL_ES\n#define FLOATING_POINT_TOLERANCE 0.0001\n#else\n#define FLOATING_POINT_TOLERANCE 0.00001\n#endif\n\n// clang-format off\n#if !defined(OGL_UNIFORM_BUFFER_FRAG_COMMON)\n#define OGL_UNIFORM_BUFFER_FRAG_COMMON \\\n               LEGACY_VERSION PROLOG \\\n               const float expectedFloat = 0.1; \\\n               const vec2 expectedVec2 = vec2(0.2, 0.2); \\\n               const vec3 expectedVec3 = vec3(0.3, 0.3, 0.3); \\\n               const vec4 expectedVec4 = vec4(0.4, 0.4, 0.4, 0.4); \\\n               const int expectedInt = 42; \\\n               const ivec2 expectediVec2 = ivec2(2, 2); \\\n               const ivec3 expectediVec3 = ivec3(3, 3, 3); \\\n               const ivec4 expectediVec4 = ivec4(4, 4, 4, 4); \\\n               const mat2 expectedMat2 = mat2(1.0, 2.0, 3.0, 4.0); \\\n               const mat3 expectedMat3 = mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0); \\\n               const mat4 expectedMat4 = mat4(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0, 16.0); \\\n               const vec4 failureColor = vec4(0.0, 0.0, 0.0, 1.0); \\\n               bool isEqual(float refVal, float val) { \\\n                 return abs(refVal - val) < FLOATING_POINT_TOLERANCE; \\\n               } \\\n               bool isEqual(vec2 vecA, vec2 vecB) { \\\n                 bool equal = true; \\\n                 for (int i = 0; i < 2; i++) { \\\n                   if (!isEqual(vecA[i], vecB[i])) { \\\n                     equal = false; \\\n                   } \\\n                 } \\\n                 return equal; \\\n               } \\\n               bool isEqual(vec3 vecA, vec3 vecB) { \\\n                 bool equal = true; \\\n                 for (int i = 0; i < 3; i++) { \\\n                   if (!isEqual(vecA[i], vecB[i])) { \\\n                     equal = false; \\\n                   } \\\n                 } \\\n                 return equal; \\\n               } \\\n               bool isEqual(vec4 vecA, vec4 vecB) { \\\n                 bool equal = true; \\\n                 for (int i = 0; i < 4; i++) { \\\n                   if (!isEqual(vecA[i], vecB[i])) { \\\n                     equal = false; \\\n                   } \\\n                 } \\\n                 return equal; \\\n               } \\\n               bool isEqual(mat3 matA, mat3 matB) { \\\n                 bool equal = true; \\\n                 for (int i = 0; i < 3; i++) { \\\n                    for (int j = 0; j < 3; j++) { \\\n                      if (!isEqual(matA[i][j], matB[i][j])) { \\\n                        equal = false; \\\n                      } \\\n                   } \\\n                 } \\\n                 return equal; \\\n               } \\\n               bool isEqual(mat4 matA, mat4 matB) { \\\n                 bool equal = true; \\\n                 for (int i = 0; i < 4; i++) { \\\n                    for (int j = 0; j < 4; j++) { \\\n                      if (!isEqual(matA[i][j], matB[i][j])) { \\\n                        equal = false; \\\n                      } \\\n                   } \\\n                 } \\\n                 return equal; \\\n               }\n#endif\n\n// Uniform Buffer Testing Shader\nconst char kOglUniformBufferFragShader[] =\n    IGL_TO_STRING(OGL_UNIFORM_BUFFER_FRAG_COMMON\n\n               uniform float testFloat;\n               uniform vec2 testVec2;\n               uniform vec3 testVec3;\n               uniform vec4 testVec4;\n\n               uniform bool testBool;\n\n               uniform int testInt;\n               uniform ivec2 testiVec2;\n               uniform ivec3 testiVec3;\n               uniform ivec4 testiVec4;\n\n               uniform mat2 testMat2;\n               uniform mat3 testMat3;\n               uniform mat4 testMat4;\n               uniform vec4 backgroundColor;\n\n               uniform float unsetFloat;\n               uniform bool unsetBool;\n               uniform int unsetInt;\n\n               uniform sampler2D inputImage;\n\n               varying vec2 uv;\n\n               void main() {\n                 gl_FragColor = texture2D(inputImage, uv);\n                 if (uv.y < 0.25) {\n                   if (uv.x < 0.25) {\n                     if(!isEqual(testFloat, expectedFloat)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.5) {\n                     if (!isEqual(testVec2, expectedVec2)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.75) {\n                     if (!isEqual(testVec3, expectedVec3)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 1.0) {\n                     if (!isEqual(testVec4, expectedVec4)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else {\n                     gl_FragColor = backgroundColor;\n                   }\n                 }\n                 else if (uv.y < 0.5) {\n                   if (uv.x < 0.25) {\n                     if (!testBool) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.5) {\n                     if (testInt != expectedInt) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.75) {\n                     if (testiVec2 != expectediVec2) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 1.0) {\n                     if (testiVec3 != expectediVec3) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else {\n                     gl_FragColor = backgroundColor;\n                   }\n                 }\n                 else if (uv.y < 0.75) {\n                   if (uv.x < 0.25) {\n                     if (testiVec4 != expectediVec4) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.5) {\n                     if (testMat2 != expectedMat2) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.75) {\n                     if (!isEqual(testMat3, expectedMat3)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 1.0) {\n                     if (!isEqual(testMat4, expectedMat4)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else {\n                     gl_FragColor = backgroundColor;\n                   }\n                 }\n                 else {\n                   if (uv.x < 0.25) {\n                     if(!isEqual(unsetFloat, expectedFloat)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.5) {\n                     if (!unsetBool) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.75) {\n                     if (unsetInt != expectedInt) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else {\n                     gl_FragColor = failureColor;\n                   }\n                 }\n               });\n\n// Uniform Array Testing Shader\nconst char kOglUniformArrayFragShader[] =\n    IGL_TO_STRING(OGL_UNIFORM_BUFFER_FRAG_COMMON\n\n               uniform float testFloat[3];\n               uniform vec2 testVec2[3];\n               uniform vec3 testVec3[3];\n               uniform vec4 testVec4[3];\n\n               uniform bool testBool[3];\n\n               uniform int testInt[3];\n               uniform ivec2 testiVec2[3];\n               uniform ivec3 testiVec3[3];\n               uniform ivec4 testiVec4[3];\n\n               uniform mat2 testMat2[3];\n               uniform mat3 testMat3[3];\n               uniform mat4 testMat4[3];\n               uniform vec4 backgroundColor;\n\n               uniform float unsetFloat[3];\n               uniform bool unsetBool[3];\n               uniform int unsetInt[3];\n\n               uniform sampler2D inputImage;\n\n               varying vec2 uv;\n\n               void main() {\n                 gl_FragColor = texture2D(inputImage, uv);\n                 if (uv.y < 0.25) {\n                   if (uv.x < 0.25) {\n                     if(!isEqual(testFloat[1], expectedFloat)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.5) {\n                     if (!isEqual(testVec2[1], expectedVec2)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.75) {\n                     if (!isEqual(testVec3[1], expectedVec3)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 1.0) {\n                     if (!isEqual(testVec4[1], expectedVec4)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else {\n                     gl_FragColor = backgroundColor;\n                   }\n                 }\n                 else if (uv.y < 0.5) {\n                   if (uv.x < 0.25) {\n                     if (!testBool[1]) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.5) {\n                     if (testInt[1] != expectedInt) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.75) {\n                     if (testiVec2[1] != expectediVec2) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 1.0) {\n                     if (testiVec3[1] != expectediVec3) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else {\n                     gl_FragColor = backgroundColor;\n                   }\n                 }\n                 else if (uv.y < 0.75) {\n                   if (uv.x < 0.25) {\n                     if (testiVec4[1]!= expectediVec4) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.5) {\n                     if (testMat2[1] != expectedMat2) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.75) {\n                     if (!isEqual(testMat3[1], expectedMat3)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 1.0) {\n                     if (!isEqual(testMat4[1], expectedMat4)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else {\n                     gl_FragColor = backgroundColor;\n                   }\n                 }\n                 else {\n                   if (uv.x < 0.25) {\n                     if(!isEqual(unsetFloat[1], expectedFloat)) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.5) {\n                     if (!unsetBool[1]) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else if (uv.x < 0.75) {\n                     if (unsetInt[1] != expectedInt) {\n                       gl_FragColor = failureColor;\n                     }\n                   }\n                   else {\n                     gl_FragColor = failureColor;\n                   }\n                 }\n               });\n\n// clang-format on\n\n//\n// UniformBufferTest\n//\n// Test fixture for all the tests in this file. Takes care of common\n// initialization and allocating of common resources.\n//\nclass UniformBufferTest : public ::testing::Test {\n private:\n public:\n  UniformBufferTest() = default;\n  ~UniformBufferTest() override = default;\n\n  //\n  // SetUp()\n  //\n  // This function sets up a render pass and a render pipeline descriptor\n  // so it is ready to render a simple quad with an input texture to an\n  // offscreen texture.\n  //\n  // The actual creation of the render pipeline state object is left\n  // to each test so that tests can replace the default settings with\n  // something more appropriate.\n  //\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n\n    // Create an offscreen texture to render to\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             kOffscreenTexWidth,\n                                             kOffscreenTexHeight,\n                                             TextureDesc::TextureUsageBits::Sampled |\n                                                 TextureDesc::TextureUsageBits::Attachment);\n\n    Result ret;\n    offscreenTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(offscreenTexture_ != nullptr);\n\n    // Create input texture\n    texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                 kOffscreenTexWidth,\n                                 kOffscreenTexHeight,\n                                 TextureDesc::TextureUsageBits::Sampled);\n    inputTexture_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(inputTexture_ != nullptr);\n\n    // Create framebuffer using the offscreen texture\n    FramebufferDesc framebufferDesc;\n\n    framebufferDesc.colorAttachments[0].texture = offscreenTexture_;\n    framebuffer_ = iglDev_->createFramebuffer(framebufferDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(framebuffer_ != nullptr);\n\n    // Initialize render pass descriptor\n    renderPass_.colorAttachments.resize(1);\n    renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n    renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n    renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n    // Initialize input to vertex shader\n    VertexInputStateDesc inputDesc;\n\n    inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n    inputDesc.attributes[0].name = data::shader::kSimplePos;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n    inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n    inputDesc.attributes[1].offset = 0;\n    inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n    inputDesc.attributes[1].name = data::shader::kSimpleUv;\n    inputDesc.attributes[1].location = 1;\n    inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vertexInputState_ != nullptr);\n\n    // Initialize index buffer\n    BufferDesc bufDesc;\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Index;\n    bufDesc.data = data::vertex_index::kQuadInd.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n    ib_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(ib_ != nullptr);\n\n    // Initialize vertex and sampler buffers\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadVert.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n    vb_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(vb_ != nullptr);\n\n    bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n    bufDesc.data = data::vertex_index::kQuadUv.data();\n    bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n    uv_ = iglDev_->createBuffer(bufDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_TRUE(uv_ != nullptr);\n\n    // Initialize sampler state\n    const SamplerStateDesc samplerDesc;\n    samp_ = iglDev_->createSamplerState(samplerDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(samp_ != nullptr);\n\n    // Initialize Render Pipeline Descriptor, but leave the creation\n    // to the individual tests in case further customization is required\n    renderPipelineDesc_.vertexInputState = vertexInputState_;\n    renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        offscreenTexture_->getFormat();\n    renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n        IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n    renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ICommandBuffer> cmdBuf_;\n  CommandBufferDesc cbDesc_ = {};\n\n  RenderPassDesc renderPass_;\n  std::shared_ptr<ITexture> offscreenTexture_;\n  std::shared_ptr<ITexture> inputTexture_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  std::shared_ptr<IShaderStages> shaderStages_;\n\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n  std::shared_ptr<IBuffer> fragmentParamBuffer_;\n\n  std::shared_ptr<ISamplerState> samp_;\n\n  RenderPipelineDesc renderPipelineDesc_;\n  size_t textureUnit_ = 0;\n  size_t uniformTypesCount_ = 12;\n  size_t failureCasesCount_ = 3;\n};\n\n//\n// UniformBuffer uniform binding test\n//\n// This test exercises the uniform buffer binding behavior.\n// The custom fragment shader will only show the original input texture when each and all of the\n// uniform types are binded properly\n//\nTEST_F(UniformBufferTest, UniformBufferBinding) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n  const simd::float4 clearColor = {0.0, 0.0, 1.0, 1.0};\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n  struct FragmentParameters {\n    simd::float1 testFloat{};\n    simd::float2 testVec2{};\n    simd::float3 testVec3{};\n    simd::float4 testVec4{};\n\n    bool testBool{};\n\n    simd::int1 testInt{};\n    simd::int2 testiVec2{};\n    simd::int3 testiVec3{};\n    simd::int4 testiVec4{};\n\n    simd::float2x2 testMat2{};\n    simd::float3x3 testMat3{};\n    simd::float4x4 testMat4{};\n    simd::float4 backgroundColor{};\n\n    simd::float1 unsetFloat{};\n    bool unsetBool{};\n    simd::int1 unsetInt{};\n  } fragmentParameters;\n\n  //-------------------------------------\n  // Upload the texture\n  //-------------------------------------\n  inputTexture_->upload(rangeDesc, data::texture::kTexRgbaMisc1_4x4.data());\n\n  //----------------\n  // Create Shaders\n  //----------------\n  // Initialize shader stages\n  std::unique_ptr<IShaderStages> stages;\n  igl::tests::util::createShaderStages(iglDev_,\n                                       data::shader::kOglSimpleVertShader,\n                                       data::shader::kSimpleVertFunc,\n                                       kOglUniformBufferFragShader,\n                                       data::shader::kSimpleFragFunc,\n                                       stages);\n  shaderStages_ = std::move(stages);\n\n  renderPipelineDesc_.shaderStages = shaderStages_;\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //-------------------------------------\n  // Create Uniforms Buffer\n  //-------------------------------------\n  // Make sure there are more texture pixels than our test cases\n  ASSERT_TRUE(uniformTypesCount_ + failureCasesCount_ <= kOffscreenTexWidth * kOffscreenTexHeight);\n\n  BufferDesc fpDesc;\n  fpDesc.type = BufferDesc::BufferTypeBits::Uniform;\n  fpDesc.data = &fragmentParameters;\n  fpDesc.length = sizeof(fragmentParameters);\n  fpDesc.storage = ResourceStorage::Shared;\n\n  std::vector<UniformDesc> fragmentUniformDescriptors;\n\n  // \"testFloat\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(IGL_NAMEHANDLE(\"testFloat\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Float;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testFloat);\n  fragmentParameters.testFloat = {0.1f};\n\n  // \"testVec2\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testVec2\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Float2;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testVec2);\n  fragmentParameters.testVec2 = {0.2f, 0.2f};\n\n  // \"testVec3\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testVec3\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Float3;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testVec3);\n  fragmentParameters.testVec3 = {0.3f, 0.3f, 0.3f};\n\n  // \"testVec4\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testVec4\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Float4;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testVec4);\n  fragmentParameters.testVec4 = {0.4f, 0.4f, 0.4f, 0.4f};\n\n  // \"testBool\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testBool\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Boolean;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testBool);\n  fragmentParameters.testBool = true;\n\n  // \"testInt\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testInt\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Int;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testInt);\n  fragmentParameters.testInt = {42};\n\n  // \"testiVec2\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testiVec2\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Int2;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testiVec2);\n  fragmentParameters.testiVec2 = {2, 2};\n\n  // \"testiVec3\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testiVec3\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Int3;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testiVec3);\n  fragmentParameters.testiVec3 = {3, 3, 3};\n\n  // \"testiVec4\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testiVec4\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Int4;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testiVec4);\n  fragmentParameters.testiVec4 = {4, 4, 4, 4};\n\n  // \"testMat2\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testMat2\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Mat2x2;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testMat2);\n  simd::float2 firstCol2 = {1.0, 2.0}, secondCol2 = {3.0, 4.0};\n  fragmentParameters.testMat2 = {firstCol2, secondCol2};\n\n  // \"testMat3\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testMat3\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Mat3x3;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testMat3);\n  fragmentUniformDescriptors.back().elementStride = sizeof(simd::float3x3);\n  simd::float3 firstCol3 = {1.0, 2.0, 3.0}, secondCol3 = {4.0, 5.0, 6.0},\n               thirdCol3 = {7.0, 8.0, 9.0};\n  fragmentParameters.testMat3 = {firstCol3, secondCol3, thirdCol3};\n\n  // \"testMat4\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testMat4\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Mat4x4;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testMat4);\n  simd::float4 firstCol4 = {1.0, 2.0, 3.0, 4.0}, secondCol4 = {5.0, 6.0, 7.0, 8.0},\n               thirdCol4 = {9.0, 10.0, 11.0, 12.0}, fourthCol4 = {13.0, 14.0, 15.0, 16.0};\n  fragmentParameters.testMat4 = {firstCol4, secondCol4, thirdCol4, fourthCol4};\n\n  // \"backgroundColor\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location = pipelineState->getIndexByName(\n      igl::genNameHandle(\"backgroundColor\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Float4;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, backgroundColor);\n  fragmentParameters.backgroundColor = clearColor;\n\n  // \"unsetFloat1\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"unsetFloat1\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Float;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, unsetFloat);\n  fragmentParameters.unsetFloat = {0.1f};\n\n  // \"unsetBool1\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"unsetBool1\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Boolean;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, unsetBool);\n  fragmentParameters.unsetBool = true;\n\n  // \"unsetInt1\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"unsetInt1\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().type = UniformType::Int;\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, unsetInt);\n  fragmentParameters.unsetInt = {42};\n\n  fragmentParamBuffer_ = iglDev_->createBuffer(fpDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(fragmentParamBuffer_ != nullptr);\n\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  std::shared_ptr<IRenderCommandEncoder> cmds =\n      cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  auto pixels = std::vector<uint32_t>(kOffscreenTexWidth * kOffscreenTexHeight);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n\n  //--------------------------------\n  // Verify against original texture\n  // Pixels are supposed to be 0xFF000000 since the uniform buffer is not bound\n  //--------------------------------\n  for (size_t i = 0; i < kOffscreenTexWidth * kOffscreenTexHeight; i++) {\n    ASSERT_EQ(pixels[i], 0xFF000000);\n  }\n\n  //----------------\n  // Bind the uniform buffer\n  //----------------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  // The Uniform Buffer is binded here:\n  for (const auto& uniformDesc : fragmentUniformDescriptors) {\n    cmds->bindUniform(uniformDesc, &fragmentParameters);\n  }\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n\n  //--------------------------------\n  // Verify against original texture\n  //--------------------------------\n  // If the uniform buffer is broken, the pixels would be 0xFF000000\n  for (size_t i = 0; i < uniformTypesCount_; i++) {\n    ASSERT_EQ(pixels[i], data::texture::kTexRgbaMisc1_4x4[i]);\n  }\n\n  // For the unset uniform buffers, make sure the test fails as expected\n  for (size_t i = uniformTypesCount_; i < uniformTypesCount_ + failureCasesCount_; i++) {\n    ASSERT_EQ(pixels[i], 0xFF000000);\n  }\n}\n\n//\n// UniformBuffer uniform array binding test\n//\n// This test exercises the uniform array binding behavior.\n// The custom fragment shader will only show the original input texture when each and all of the\n// uniform types are binded properly\n//\nTEST_F(UniformBufferTest, UniformArrayBinding) {\n  Result ret;\n  std::shared_ptr<IRenderPipelineState> pipelineState;\n  const simd::float4 clearColor = {0.0, 0.0, 1.0, 1.0};\n  const auto rangeDesc = TextureRangeDesc::new2D(0, 0, kOffscreenTexWidth, kOffscreenTexHeight);\n\n  // We are purposely creating an unpacked structure to trigger the\n  // manual packing path in UniformBuffer::bindUniformArray.\n  // This code has only been tested on MacOS, and we may need to\n  // revisit if in the future we are running the test on a different OS\n  // or building it with a different compiler.\n  struct Float1UnpackedData {\n    simd::float1 float1;\n    bool padding[3];\n  };\n\n  struct Int1UnpackedData {\n    simd::int1 int1;\n    bool padding[3];\n  };\n\n  struct Float2UnpackedData {\n    simd::float2 float2;\n    bool padding[3];\n  };\n\n  struct Int2UnpackedData {\n    simd::int2 int2;\n    bool padding[3];\n  };\n\n  // Interestingly with vectorization, int3, float3, and float3x3 has the same size as their\n  // 4 versions (12 bytes vs 16 bytes so the data is not packed.)\n  // As a result, to test UniformArrayBinding, a separate test is not needed for data structures\n  // of multiples of 3.\n\n  struct Float4UnpackedData {\n    simd::float4 float4;\n    bool padding[3];\n  };\n\n  struct Int4UnpackedData {\n    simd::int4 int4;\n    bool padding[3];\n  };\n\n  struct BooleanUnpackedData {\n    bool data;\n    bool padding[3];\n    simd::float3 morePadding;\n  };\n\n  struct FragmentParameters {\n    std::array<Float1UnpackedData, 3> testFloat{};\n    std::array<Float2UnpackedData, 3> testVec2{};\n    std::array<simd::float3, 3> testVec3{};\n    std::array<Float4UnpackedData, 3> testVec4{};\n\n    std::array<BooleanUnpackedData, 3> testBool{};\n\n    std::array<Int1UnpackedData, 3> testInt{};\n    std::array<Int2UnpackedData, 3> testiVec2{};\n    std::array<simd::int3, 3> testiVec3{};\n    std::array<Int4UnpackedData, 3> testiVec4{};\n\n    std::array<simd::float2x2, 3> testMat2{};\n    std::array<simd::float3x3, 3> testMat3{};\n    std::array<simd::float4x4, 3> testMat4{};\n    simd::float4 backgroundColor{};\n\n    std::array<simd::float1, 3> unsetFloat{};\n    std::array<bool, 3> unsetBool{};\n    std::array<simd::int1, 3> unsetInt{};\n  } fragmentParameters;\n\n  //-------------------------------------\n  // Upload the texture\n  //-------------------------------------\n  inputTexture_->upload(rangeDesc, data::texture::kTexRgbaMisc1_4x4.data());\n\n  //----------------\n  // Create Shaders\n  //----------------\n  // Initialize shader stages\n  std::unique_ptr<IShaderStages> stages;\n  igl::tests::util::createShaderStages(iglDev_,\n                                       data::shader::kOglSimpleVertShader,\n                                       data::shader::kSimpleVertFunc,\n                                       kOglUniformArrayFragShader,\n                                       data::shader::kSimpleFragFunc,\n                                       stages);\n  shaderStages_ = std::move(stages);\n\n  renderPipelineDesc_.shaderStages = shaderStages_;\n\n  //----------------\n  // Create Pipeline\n  //----------------\n  pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  //-------------------------------------\n  // Create Uniforms Buffer\n  //-------------------------------------\n  // Make sure there are more texture pixels than our test cases\n  ASSERT_TRUE(uniformTypesCount_ + failureCasesCount_ <= kOffscreenTexWidth * kOffscreenTexHeight);\n\n  BufferDesc fpDesc;\n  fpDesc.type = BufferDesc::BufferTypeBits::Uniform;\n  fpDesc.data = &fragmentParameters;\n  fpDesc.length = sizeof(fragmentParameters);\n  fpDesc.storage = ResourceStorage::Shared;\n\n  std::vector<UniformDesc> fragmentUniformDescriptors;\n\n  // \"testFloat\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Float;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testFloat\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testFloat);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(Float1UnpackedData);\n  fragmentParameters.testFloat[0] = {0.0f, {true, false, true}};\n  fragmentParameters.testFloat[1] = {0.1f, {true, true, true}};\n  fragmentParameters.testFloat[2] = {0.0f, {false, false, false}};\n\n  // \"testVec2\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Float2;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testVec2\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testVec2);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(Float2UnpackedData);\n  fragmentParameters.testVec2[0] = {{0.0f, 0.0f}, {true, false, true}};\n  fragmentParameters.testVec2[1] = {{0.2f, 0.2f}, {true, true, true}};\n  fragmentParameters.testVec2[2] = {{0.0f, 0.0f}, {false, false, false}};\n\n  // \"testVec3\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Float3;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testVec3\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testVec3);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(simd::float3);\n\n  fragmentParameters.testVec3[0] = {0.0f, 0.0f, 0.0f};\n  fragmentParameters.testVec3[1] = {0.3f, 0.3f, 0.3f};\n  fragmentParameters.testVec3[2] = {0.0f, 0.0f, 0.0f};\n\n  // \"testVec4\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Float4;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testVec4\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testVec4);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(Float4UnpackedData);\n  fragmentParameters.testVec4[0] = {{0.0f, 0.0f, 0.0f, 0.0f}, {true, false, true}};\n  fragmentParameters.testVec4[1] = {{0.4f, 0.4f, 0.4f, 0.4f}, {true, true, true}};\n  fragmentParameters.testVec4[2] = {{0.0f, 0.0f, 0.0f, 0.0f}, {false, false, false}};\n\n  // \"testBool\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Boolean;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testBool\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testBool);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(BooleanUnpackedData);\n  fragmentParameters.testBool[0] = {false, {false, false, true}, {0.0f, 0.1f, 0.2f}};\n  fragmentParameters.testBool[1] = {true, {false, false, true}, {0.3f, 0.4f, 0.5f}};\n  fragmentParameters.testBool[2] = {false, {true, true, true}, {0.6f, 0.7f, 0.8f}};\n\n  // \"testInt\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Int;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testInt\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testInt);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(Int1UnpackedData);\n  fragmentParameters.testInt[0] = {0, {true, false, true}};\n  fragmentParameters.testInt[1] = {42, {true, true, true}};\n  fragmentParameters.testInt[2] = {0, {false, false, false}};\n\n  // \"testiVec2\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Int2;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testiVec2\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testiVec2);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(Int2UnpackedData);\n  fragmentParameters.testiVec2[0] = {{0, 0}, {true, false, true}};\n  fragmentParameters.testiVec2[1] = {{2, 2}, {true, true, true}};\n  fragmentParameters.testiVec2[2] = {{0, 0}, {false, false, false}};\n\n  // \"testiVec3\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Int3;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testiVec3\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testiVec3);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(simd::int3);\n  fragmentParameters.testiVec3[0] = {0, 0, 0};\n  fragmentParameters.testiVec3[1] = {3, 3, 3};\n  fragmentParameters.testiVec3[2] = {0, 0, 0};\n\n  // \"testiVec4\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Int4;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testiVec4\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testiVec4);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(Int4UnpackedData);\n  fragmentParameters.testiVec4[0] = {{0, 0, 0, 0}, {true, false, true}};\n  fragmentParameters.testiVec4[1] = {{4, 4, 4, 4}, {true, true, true}};\n  fragmentParameters.testiVec4[2] = {{0, 0, 0, 0}, {false, false, false}};\n\n  // \"testMat2\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Mat2x2;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testMat2\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testMat2);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(simd::float2x2);\n  simd::float2 firstCol2 = {1.0, 2.0}, secondCol2 = {3.0, 4.0}, col20 = {0.0, 0.0};\n  fragmentParameters.testMat2[0] = {col20, col20};\n  fragmentParameters.testMat2[1] = {firstCol2, secondCol2};\n  fragmentParameters.testMat2[2] = {col20, col20};\n\n  // \"testMat3\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Mat3x3;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testMat3\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testMat3);\n  fragmentUniformDescriptors.back().elementStride = sizeof(simd::float3x3);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(simd::float3x3);\n  simd::float3 firstCol3 = {1.0, 2.0, 3.0}, secondCol3 = {4.0, 5.0, 6.0},\n               thirdCol3 = {7.0, 8.0, 9.0}, col30 = {0.0, 0.0, 0.0};\n  fragmentParameters.testMat3[0] = {col30, col30, col30};\n  fragmentParameters.testMat3[1] = {firstCol3, secondCol3, thirdCol3};\n  fragmentParameters.testMat3[2] = {col30, col30, col30};\n\n  // \"testMat4\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Mat4x4;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"testMat4\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, testMat4);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(simd::float4x4);\n  simd::float4 firstCol4 = {1.0, 2.0, 3.0, 4.0}, secondCol4 = {5.0, 6.0, 7.0, 8.0},\n               thirdCol4 = {9.0, 10.0, 11.0, 12.0}, fourthCol4 = {13.0, 14.0, 15.0, 16.0},\n               col40 = {0.0, 0.0, 0.0, 0.0};\n  fragmentParameters.testMat4[0] = {col40, col40, col40, col40};\n  fragmentParameters.testMat4[1] = {firstCol4, secondCol4, thirdCol4, fourthCol4};\n  fragmentParameters.testMat4[2] = {col40, col40, col40, col40};\n\n  // \"backgroundColor\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Float4;\n  fragmentUniformDescriptors.back().location = pipelineState->getIndexByName(\n      igl::genNameHandle(\"backgroundColor\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, backgroundColor);\n  fragmentParameters.backgroundColor = clearColor;\n\n  // \"unsetFloat3\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Float;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"unsetFloat3\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, unsetFloat);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(simd::float1);\n  fragmentParameters.unsetFloat = {0.0f, 0.1f, 0.0f};\n\n  // \"unsetBool3\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Boolean;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"unsetBool3\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, unsetBool);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(bool);\n  fragmentParameters.unsetBool[0] = false;\n  fragmentParameters.unsetBool[1] = true;\n  fragmentParameters.unsetBool[2] = false;\n\n  // \"unsetInt3\"\n  fragmentUniformDescriptors.emplace_back();\n  fragmentUniformDescriptors.back().type = UniformType::Int;\n  fragmentUniformDescriptors.back().location =\n      pipelineState->getIndexByName(igl::genNameHandle(\"unsetInt3\"), igl::ShaderStage::Fragment);\n  fragmentUniformDescriptors.back().offset = offsetof(FragmentParameters, unsetInt);\n  fragmentUniformDescriptors.back().numElements = 3;\n  fragmentUniformDescriptors.back().elementStride = sizeof(simd::int1);\n  fragmentParameters.unsetInt[0] = {0};\n  fragmentParameters.unsetInt[1] = {42};\n  fragmentParameters.unsetInt[2] = {0};\n\n  fragmentParamBuffer_ = iglDev_->createBuffer(fpDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(fragmentParamBuffer_ != nullptr);\n\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  std::shared_ptr<IRenderCommandEncoder> cmds =\n      cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  auto pixels = std::vector<uint32_t>(kOffscreenTexWidth * kOffscreenTexHeight);\n\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n\n  //--------------------------------\n  // Verify against original texture\n  // Pixels are supposed to be 0xFF000000 since the uniform buffer is not bound\n  //--------------------------------\n  for (size_t i = 0; i < kOffscreenTexWidth * kOffscreenTexHeight; i++) {\n    ASSERT_EQ(pixels[i], 0xFF000000);\n  }\n\n  //----------------\n  // Bind the uniform buffer\n  //----------------\n  cmdBuf_ = cmdQueue_->createCommandBuffer(cbDesc_, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(cmdBuf_ != nullptr);\n\n  cmds = cmdBuf_->createRenderCommandEncoder(renderPass_, framebuffer_);\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  // The Uniform Buffer is binded here:\n  for (const auto& uniformDesc : fragmentUniformDescriptors) {\n    cmds->bindUniform(uniformDesc, &fragmentParameters);\n  }\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, inputTexture_.get());\n  cmds->bindSamplerState(textureUnit_, BindTarget::kFragment, samp_.get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf_);\n\n  //----------------------\n  // Read back framebuffer\n  //----------------------\n  framebuffer_->copyBytesColorAttachment(*cmdQueue_, 0, pixels.data(), rangeDesc);\n\n  //--------------------------------\n  // Verify against original texture\n  //--------------------------------\n  // If the uniform buffer is broken, the pixels would be 0xFF000000\n  for (size_t i = 0; i < uniformTypesCount_; i++) {\n    ASSERT_EQ(pixels[i], data::texture::kTexRgbaMisc1_4x4[i]);\n  }\n\n  // For the unset uniform buffers, make sure the test fails as expected\n  for (size_t i = uniformTypesCount_; i < uniformTypesCount_ + failureCasesCount_; i++) {\n    ASSERT_EQ(pixels[i], 0xFF000000);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/Version.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/Version.h>\n\n#include <igl/opengl/Config.h>\n\nnamespace igl::tests {\n\nclass VersionOGLTest : public ::testing::Test {\n public:\n  VersionOGLTest() = default;\n  ~VersionOGLTest() override = default;\n\n  // Set up VertexInputStateDesc for the different test cases\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n  }\n\n  void TearDown() override {}\n};\n\nTEST_F(VersionOGLTest, GetGLVersionEnum) {\n#if IGL_OPENGL_ES\n  EXPECT_EQ(opengl::getGLVersion(\"OpenGL ES 2.0\", false), opengl::GLVersion::v2_0_ES);\n  EXPECT_EQ(opengl::getGLVersion(\"OpenGL ES 2.1\", false), opengl::GLVersion::v2_0_ES);\n  EXPECT_EQ(opengl::getGLVersion(\"OpenGL ES 3.0\", false), opengl::GLVersion::v3_0_ES);\n  EXPECT_EQ(opengl::getGLVersion(\"OpenGL ES 3.1\", false), opengl::GLVersion::v3_1_ES);\n  EXPECT_EQ(opengl::getGLVersion(\"OpenGL ES 3.2\", false), opengl::GLVersion::v3_2_ES);\n  EXPECT_EQ(opengl::getGLVersion(\"OpenGL ES 3.3\", false), opengl::GLVersion::v3_0_ES);\n  EXPECT_EQ(opengl::getGLVersion(\"OpenGL ES 4.0\", false), opengl::GLVersion::v2_0_ES);\n\n  EXPECT_EQ(opengl::getGLVersion(\"OpenGL ES 2.0\", true), opengl::GLVersion::v2_0_ES);\n  EXPECT_EQ(opengl::getGLVersion(\"OpenGL ES 4.0\", true), opengl::GLVersion::v3_0_ES);\n  EXPECT_EQ(opengl::getGLVersion(nullptr, false), opengl::GLVersion::v2_0_ES);\n#else\n  EXPECT_EQ(opengl::getGLVersion(\"1.1\", false), opengl::GLVersion::v1_1);\n  EXPECT_EQ(opengl::getGLVersion(\"2.0\", false), opengl::GLVersion::v2_0);\n  EXPECT_EQ(opengl::getGLVersion(\"2.1\", false), opengl::GLVersion::v2_1);\n  EXPECT_EQ(opengl::getGLVersion(\"2.2\", false), opengl::GLVersion::v2_0);\n\n  EXPECT_EQ(opengl::getGLVersion(\"3.0\", false), opengl::GLVersion::v3_0);\n  EXPECT_EQ(opengl::getGLVersion(\"3.1\", false), opengl::GLVersion::v3_1);\n  EXPECT_EQ(opengl::getGLVersion(\"3.2\", false), opengl::GLVersion::v3_2);\n  EXPECT_EQ(opengl::getGLVersion(\"3.3\", false), opengl::GLVersion::v3_3);\n  EXPECT_EQ(opengl::getGLVersion(\"3.4\", false), opengl::GLVersion::v3_0);\n\n  EXPECT_EQ(opengl::getGLVersion(\"4.0\", false), opengl::GLVersion::v4_0);\n  EXPECT_EQ(opengl::getGLVersion(\"4.1\", false), opengl::GLVersion::v4_1);\n  EXPECT_EQ(opengl::getGLVersion(\"4.2\", false), opengl::GLVersion::v4_2);\n  EXPECT_EQ(opengl::getGLVersion(\"4.3\", false), opengl::GLVersion::v4_3);\n  EXPECT_EQ(opengl::getGLVersion(\"4.4\", false), opengl::GLVersion::v4_4);\n  EXPECT_EQ(opengl::getGLVersion(\"4.5\", false), opengl::GLVersion::v4_5);\n  EXPECT_EQ(opengl::getGLVersion(\"4.6\", false), opengl::GLVersion::v4_6);\n  EXPECT_EQ(opengl::getGLVersion(\"4.7\", false), opengl::GLVersion::v4_0);\n\n  EXPECT_EQ(opengl::getGLVersion(\"5.0\", false), opengl::GLVersion::v2_0);\n  EXPECT_EQ(opengl::getGLVersion(nullptr, false), opengl::GLVersion::v2_0);\n\n  EXPECT_EQ(opengl::getGLVersion(\"2.0\", true), opengl::GLVersion::v2_0);\n#endif\n}\n\nTEST_F(VersionOGLTest, GetShaderVersion) {\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v2_0_ES);\n    EXPECT_EQ(version.family, ShaderFamily::GlslEs);\n    EXPECT_EQ(version.majorVersion, 1);\n    EXPECT_EQ(version.minorVersion, 0);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v3_0_ES);\n    EXPECT_EQ(version.family, ShaderFamily::GlslEs);\n    EXPECT_EQ(version.majorVersion, 3);\n    EXPECT_EQ(version.minorVersion, 0);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v3_1_ES);\n    EXPECT_EQ(version.family, ShaderFamily::GlslEs);\n    EXPECT_EQ(version.majorVersion, 3);\n    EXPECT_EQ(version.minorVersion, 10);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v3_2_ES);\n    EXPECT_EQ(version.family, ShaderFamily::GlslEs);\n    EXPECT_EQ(version.majorVersion, 3);\n    EXPECT_EQ(version.minorVersion, 20);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v2_0);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 1);\n    EXPECT_EQ(version.minorVersion, 10);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v2_1);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 1);\n    EXPECT_EQ(version.minorVersion, 20);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v3_0);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 1);\n    EXPECT_EQ(version.minorVersion, 30);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v3_1);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 1);\n    EXPECT_EQ(version.minorVersion, 40);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v3_2);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 1);\n    EXPECT_EQ(version.minorVersion, 50);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v3_3);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 3);\n    EXPECT_EQ(version.minorVersion, 30);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v4_0);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 4);\n    EXPECT_EQ(version.minorVersion, 0);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v4_1);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 4);\n    EXPECT_EQ(version.minorVersion, 10);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v4_2);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 4);\n    EXPECT_EQ(version.minorVersion, 20);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v4_3);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 4);\n    EXPECT_EQ(version.minorVersion, 30);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v4_4);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 4);\n    EXPECT_EQ(version.minorVersion, 40);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v4_5);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 4);\n    EXPECT_EQ(version.minorVersion, 50);\n  }\n  {\n    const auto version = opengl::getShaderVersion(opengl::GLVersion::v4_6);\n    EXPECT_EQ(version.family, ShaderFamily::Glsl);\n    EXPECT_EQ(version.majorVersion, 4);\n    EXPECT_EQ(version.minorVersion, 60);\n  }\n}\n\nTEST_F(VersionOGLTest, GetStringFromShaderVersion) {\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::GlslEs, 1, 0}),\n            \"#version 100\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::GlslEs, 3, 0}),\n            \"#version 300 es\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::GlslEs, 3, 10}),\n            \"#version 310 es\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::GlslEs, 3, 20}),\n            \"#version 320 es\");\n\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 1, 10}),\n            \"#version 110\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 1, 20}),\n            \"#version 120\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 1, 30}),\n            \"#version 130\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 1, 40}),\n            \"#version 140\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 1, 50}),\n            \"#version 150\");\n\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 3, 30}),\n            \"#version 330\");\n\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 4, 0}),\n            \"#version 400\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 4, 10}),\n            \"#version 410\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 4, 20}),\n            \"#version 420\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 4, 30}),\n            \"#version 430\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 4, 40}),\n            \"#version 440\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 4, 50}),\n            \"#version 450\");\n  EXPECT_EQ(opengl::getStringFromShaderVersion(ShaderVersion{ShaderFamily::Glsl, 4, 60}),\n            \"#version 460\");\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/VertexArrayObjectOGL.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/Common.h\"\n\n#include <igl/opengl/Device.h>\n#include <igl/opengl/DeviceFeatureSet.h>\n#include <igl/opengl/IContext.h>\n#include <igl/opengl/VertexArrayObject.h>\n\nnamespace igl::tests {\n\n//\n// VertexArrayObjectOGLTest\n//\n// Tests for the OpenGL VertexArrayObject.\n//\nclass VertexArrayObjectOGLTest : public ::testing::Test {\n public:\n  VertexArrayObjectOGLTest() = default;\n  ~VertexArrayObjectOGLTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    context_ = &static_cast<opengl::Device&>(*iglDev_).getContext();\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  opengl::IContext* context_ = nullptr;\n};\n\n//\n// CreateBindUnbind\n//\n// Create a VAO, verify it is valid, bind and unbind with no GL errors.\n//\nTEST_F(VertexArrayObjectOGLTest, CreateBindUnbind) {\n  if (!context_->deviceFeatures().hasInternalFeature(opengl::InternalFeatures::VertexArrayObject)) {\n    GTEST_SKIP() << \"VertexArrayObject not supported\";\n  }\n\n  opengl::VertexArrayObject vao(*context_);\n\n  Result ret = vao.create();\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(vao.isValid());\n\n  // Bind should succeed without errors\n  vao.bind();\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n\n  // Unbind should succeed without errors\n  vao.unbind();\n  ASSERT_EQ(context_->checkForErrors(__FILE__, __LINE__), GL_NO_ERROR);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/VertexInputState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/VertexInputState.h>\n\n#include \"../util/Common.h\"\n\nnamespace igl::tests {\n\n//\n// VertexInputStateTest\n//\n// Cover all paths in igl::opengl::VertexInputState::create()\n//\nclass VertexInputStateOGLTest : public ::testing::Test {\n public:\n  VertexInputStateOGLTest() = default;\n  ~VertexInputStateOGLTest() override = default;\n\n  // Set up VertexInputStateDesc for the different test cases\n  void SetUp() override {\n    setDebugBreakEnabled(false);\n\n    util::createDeviceAndQueue(iglDev_, cmdQueue_);\n    ASSERT_TRUE(iglDev_ != nullptr);\n    ASSERT_TRUE(cmdQueue_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\n//\n// DefaultCreate\n//\n// Case 1: create VertexInputState with default values of VertexInputStateDesc\n// (desc.numAttributes == 0). Expect this to pass.\n//\nTEST_F(VertexInputStateOGLTest, DefaultCreate) {\n  Result ret;\n  std::shared_ptr<IVertexInputState> vertexInputState;\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 0;\n\n  vertexInputState = iglDev_->createVertexInputState(inputDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(vertexInputState != nullptr);\n}\n\n//\n// TwoAttribOneBinding\n//\n// Case 2: create VertexInputState with two buffer indices and one buffer\n// binding (numInputBindings = 1, but inputDesc_.numAttributes = 2). Expect this\n// to fail because two buffer indices requires at least two bindings.\n//\nTEST_F(VertexInputStateOGLTest, TwoAttribOneBinding) {\n  Result ret;\n  std::shared_ptr<IVertexInputState> vertexInputState;\n\n  const char unused1[] = \"Unused1\";\n  const size_t unused1Index = 2;\n  const char unused2[] = \"Unused2\";\n  const size_t unused2Index = 3;\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].location = 0;\n  inputDesc.attributes[0].bufferIndex = unused1Index;\n  inputDesc.attributes[0].name = unused1;\n  inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n  inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n  inputDesc.attributes[1].offset = 0;\n  inputDesc.attributes[1].location = 1;\n  inputDesc.attributes[1].bufferIndex = unused2Index;\n  inputDesc.attributes[1].name = unused2;\n  inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n  // numAttributes has to equal to bindings when using more than 1 buffer\n  // the following are just for covering codes\n  inputDesc.numAttributes = 2;\n  inputDesc.numInputBindings = 1;\n\n  vertexInputState = iglDev_->createVertexInputState(inputDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::ArgumentInvalid);\n  ASSERT_TRUE(vertexInputState == nullptr);\n}\n\n//\n// TwoAttribTwoBinding\n//\n// Case 3: create VertexInputState with two buffer indices and two buffer\n// binding (numInputBindings = 2, and inputDesc_.numAttributes = 2).\n// Expect this to pass.\n//\nTEST_F(VertexInputStateOGLTest, TwoAttribTwoBinding) {\n  Result ret;\n  std::shared_ptr<IVertexInputState> vertexInputState;\n\n  const char unused1[] = \"Unused1\";\n  const size_t unused1Index = 2;\n  const char unused2[] = \"Unused2\";\n  const size_t unused2Index = 3;\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].location = 0;\n  inputDesc.attributes[0].bufferIndex = unused1Index;\n  inputDesc.attributes[0].name = unused1;\n  inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n  inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n  inputDesc.attributes[1].offset = 0;\n  inputDesc.attributes[1].location = 1;\n  inputDesc.attributes[1].bufferIndex = unused2Index;\n  inputDesc.attributes[1].name = unused2;\n  inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n  // numAttributes has to equal to bindings when using more than 1 buffer\n  inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n  vertexInputState = iglDev_->createVertexInputState(inputDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(vertexInputState != nullptr);\n}\n\n// Test creating attributes with every data format\nTEST_F(VertexInputStateOGLTest, AllFormats0) {\n  const char someName[] = \"Name\";\n\n  constexpr size_t sizes[] = {\n      // float1 float2 etc\n      sizeof(float) * 1,\n      sizeof(float) * 2,\n      sizeof(float) * 3,\n      sizeof(float) * 4,\n      // byte1 byte2 etc\n      sizeof(char) * 1,\n      sizeof(char) * 2,\n      sizeof(char) * 3,\n      sizeof(char) * 4,\n      // ubyte1 ubyte2 etc\n      sizeof(char) * 1,\n      sizeof(char) * 2,\n      sizeof(char) * 3,\n      sizeof(char) * 4,\n      // short1 short2 etc\n      sizeof(short) * 1,\n      sizeof(short) * 2,\n      sizeof(short) * 3,\n      sizeof(short) * 4,\n      // ushort1 ushort2 etc\n      sizeof(short) * 1,\n      sizeof(short) * 2,\n      sizeof(short) * 3,\n      sizeof(short) * 4,\n      // byte1norm byte2norm etc\n      sizeof(char) * 1,\n      sizeof(char) * 2,\n      sizeof(char) * 3,\n      sizeof(char) * 4,\n      // uByte1Norm uByte1Norm etc\n      sizeof(char) * 1,\n      sizeof(char) * 2,\n      sizeof(char) * 3,\n      sizeof(char) * 4,\n      // short1Norm short2Norm etc\n      sizeof(short) * 1,\n      sizeof(short) * 2,\n      sizeof(short) * 3,\n      sizeof(short) * 4,\n      // ushort1norm ushort2norm etc\n      sizeof(short) * 1,\n      sizeof(short) * 2,\n      sizeof(short) * 3,\n      sizeof(short) * 4,\n      // int1 int2 etc\n      sizeof(int) * 1,\n      sizeof(int) * 2,\n      sizeof(int) * 3,\n      sizeof(int) * 4,\n      // uint1 uint2 etc\n      sizeof(int) * 1,\n      sizeof(int) * 2,\n      sizeof(int) * 3,\n      sizeof(int) * 4,\n      // half1 half2 etc\n      sizeof(uint16_t) * 1,\n      sizeof(uint16_t) * 2,\n      sizeof(uint16_t) * 3,\n      sizeof(uint16_t) * 4,\n      // Int_2_10_10_10_REV\n      sizeof(int),\n  };\n\n  // There are 49 formats, but only 24 fit inside one vertex input state so we test the 24 formats,\n  // the next 24, and the last format on its own\n  {\n    // First 24 formats\n    VertexInputStateDesc inputDesc;\n    for (int i = 0; i < IGL_VERTEX_ATTRIBUTES_MAX; i++) {\n      inputDesc.attributes[i].format = static_cast<VertexAttributeFormat>(i);\n      inputDesc.attributes[i].offset = 0;\n      inputDesc.attributes[i].location = 0;\n      inputDesc.attributes[i].bufferIndex = i;\n      inputDesc.attributes[i].name = someName;\n      inputDesc.inputBindings[i].stride = sizes[i];\n    }\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = IGL_VERTEX_ATTRIBUTES_MAX;\n\n    Result ret;\n    std::shared_ptr<IVertexInputState> vertexInputState;\n    vertexInputState = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState != nullptr);\n  }\n  {\n    // Next 24 formats\n    VertexInputStateDesc inputDesc;\n    for (int i = 0; i < IGL_VERTEX_ATTRIBUTES_MAX; i++) {\n      inputDesc.attributes[i].format =\n          static_cast<VertexAttributeFormat>(i + IGL_VERTEX_ATTRIBUTES_MAX);\n      inputDesc.attributes[i].offset = 0;\n      inputDesc.attributes[i].location = 0;\n      inputDesc.attributes[i].bufferIndex = i;\n      inputDesc.attributes[i].name = someName;\n      inputDesc.inputBindings[i].stride = sizes[i + IGL_VERTEX_ATTRIBUTES_MAX];\n    }\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = IGL_VERTEX_ATTRIBUTES_MAX;\n\n    Result ret;\n    std::shared_ptr<IVertexInputState> vertexInputState;\n    vertexInputState = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState != nullptr);\n  }\n  {\n    // Last format\n    VertexInputStateDesc inputDesc;\n    inputDesc.attributes[0].format = VertexAttributeFormat::Int_2_10_10_10_REV;\n    inputDesc.attributes[0].offset = 0;\n    inputDesc.attributes[0].location = 0;\n    inputDesc.attributes[0].bufferIndex = 0;\n    inputDesc.attributes[0].name = someName;\n    inputDesc.inputBindings[0].stride =\n        sizes[static_cast<size_t>(VertexAttributeFormat::Int_2_10_10_10_REV)];\n\n    // numAttributes has to equal to bindings when using more than 1 buffer\n    inputDesc.numAttributes = inputDesc.numInputBindings = 1;\n\n    Result ret;\n    std::shared_ptr<IVertexInputState> vertexInputState;\n    vertexInputState = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(vertexInputState != nullptr);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/ViewTextureTarget.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/opengl/ViewTextureTarget.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/opengl/Device.h>\n\nnamespace igl::tests {\n\n//\n// ViewTextureTargetOGLTest\n//\n// Unit tests for igl::opengl::ViewTextureTarget.\n// Covers code paths that may not be hit by top level texture calls from device.\n//\nclass ViewTextureTargetOGLTest : public ::testing::Test {\n public:\n  ViewTextureTargetOGLTest() = default;\n  ~ViewTextureTargetOGLTest() override = default;\n\n  void SetUp() override {\n    // Turn off debug breaks, only use in debug mode\n    igl::setDebugBreakEnabled(false);\n\n    device_ = util::createTestDevice();\n    ASSERT_TRUE(device_ != nullptr);\n    context_ = &static_cast<opengl::Device&>(*device_).getContext();\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  opengl::IContext* context_{};\n  std::shared_ptr<IDevice> device_;\n};\n\n//\n// Specifications Test\n//\n// This test verifies that the default ViewTextureTarget specs are defined\n// correctly. Note that \"correct\" in this case only means how the code is\n// currently written. Should the ViewTextureTarget code change, then this\n// test will need to be updated as well.\n//\nTEST_F(ViewTextureTargetOGLTest, Specifications) {\n  std::unique_ptr<igl::opengl::ViewTextureTarget> viewTextureTarget =\n      std::make_unique<igl::opengl::ViewTextureTarget>(*context_, TextureFormat::RGBA_UNorm8);\n  ASSERT_EQ(viewTextureTarget->getType(), TextureType::TwoD);\n  ASSERT_EQ(viewTextureTarget->getUsage(), TextureDesc::TextureUsageBits::Attachment);\n  ASSERT_TRUE(viewTextureTarget->isImplicitStorage());\n}\n\n//\n// NoOpFunctions Test\n//\n// This test calls no-op functions just to satisfy code coverage.\n//\nTEST_F(ViewTextureTargetOGLTest, NoOpFunctions) {\n  std::unique_ptr<igl::opengl::ViewTextureTarget> viewTextureTarget =\n      std::make_unique<igl::opengl::ViewTextureTarget>(*context_, TextureFormat::RGBA_UNorm8);\n  viewTextureTarget->bind();\n  viewTextureTarget->unbind();\n  viewTextureTarget->attachAsColor(0, opengl::Texture::AttachmentParams{});\n  viewTextureTarget->detachAsColor(0, false);\n  viewTextureTarget->attachAsDepth(opengl::Texture::AttachmentParams{});\n  viewTextureTarget->attachAsStencil(opengl::Texture::AttachmentParams{});\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/ios/TextureBuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../../util/TextureFormatTestBase.h\"\n\n#include <CoreVideo/CVPixelBuffer.h>\n#include <CoreVideo/CVPixelFormatDescription.h>\n#include <igl/Device.h>\n#include <igl/opengl/ios/Context.h>\n#include <igl/opengl/ios/PlatformDevice.h>\n\nnamespace igl::tests {\n\nclass TextureBufferIosTest : public util::TextureFormatTestBase {\n public:\n  TextureBufferIosTest() = default;\n  ~TextureBufferIosTest() override = default;\n\n  std::shared_ptr<ITexture> createCVPixelBufferTextureWithSize(OSType pixelFormat,\n                                                               size_t width,\n                                                               size_t height,\n                                                               TextureDesc::TextureUsage usage,\n                                                               Result& outResult);\n};\n\nstd::shared_ptr<ITexture> TextureBufferIosTest::createCVPixelBufferTextureWithSize(\n    OSType pixelFormat,\n    const size_t width,\n    const size_t height,\n    TextureDesc::TextureUsage usage,\n    Result& outResult) {\n  const igl::BackendType backend = iglDev_->getBackendType();\n  CVPixelBufferRef pixelBuffer = nullptr;\n  NSDictionary* bufferAttributes = @{\n    (NSString*)kCVPixelBufferIOSurfacePropertiesKey : @{},\n    (NSString*)kCVPixelFormatOpenGLESCompatibility : @(backend == igl::BackendType::OpenGL),\n  };\n\n  const CVReturn result = CVPixelBufferCreate(kCFAllocatorDefault,\n                                              width,\n                                              height,\n                                              pixelFormat,\n                                              (__bridge CFDictionaryRef)(bufferAttributes),\n                                              &pixelBuffer);\n  if (result != kCVReturnSuccess) {\n    Result::setResult(&outResult,\n                      Result::Code::RuntimeError,\n                      \"CVPixelBufferCreate failed to create pixel buffer\");\n    return nullptr;\n  }\n\n  auto* platformDevice = iglDev_->getPlatformDevice<igl::opengl::ios::PlatformDevice>();\n  auto& context = static_cast<igl::opengl::ios::Context&>(platformDevice->getContext());\n  auto* textureCache = context.getTextureCache();\n  std::shared_ptr<ITexture> texture = platformDevice->createTextureFromNativePixelBuffer(\n      pixelBuffer, textureCache, 0, usage, &outResult);\n  if (!outResult.isOk()) {\n    return nullptr;\n  }\n  if (texture == nullptr) {\n    Result::setResult(\n        &outResult, Result::Code::RuntimeError, \"failed to create igl texture from CVPixelBuffer\");\n    return nullptr;\n  }\n  CVPixelBufferRelease(pixelBuffer);\n  Result::setOk(&outResult);\n  return texture;\n}\n\n#define PIXEL_FORMAT(pf) {pf, #pf}\n\nTEST_F(TextureBufferIosTest, createTextureFromNativePixelBuffer) {\n  const std::vector<std::pair<OSType, const char*>> pixelFormats = {\n      PIXEL_FORMAT(kCVPixelFormatType_32BGRA),\n      // TODO: These currently returns kCVReturnPixelBufferNotOpenGLCompatible\n      // PIXEL_FORMAT(kCVPixelFormatType_64RGBAHalf),\n      // PIXEL_FORMAT(kCVPixelFormatType_OneComponent8),\n      // TODO: Figure out how to test YUV textures\n      // PIXEL_FORMAT(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange),\n      // PIXEL_FORMAT(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange),\n      // PIXEL_FORMAT(kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange),\n  };\n  for (auto [pixelFormat, name] : pixelFormats) {\n    Result result;\n    auto usage = TextureDesc::TextureUsageBits::Sampled | TextureDesc::TextureUsageBits::Attachment;\n    auto texture = createCVPixelBufferTextureWithSize(pixelFormat, 100, 100, usage, result);\n    ASSERT_EQ(result.isOk(), true) << name << \": \" << result.message.c_str();\n    testUsage(texture, usage, \"SampledAttachment\");\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/ogl/macos/TextureBuffer.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../../util/TextureFormatTestBase.h\"\n\n#include <CoreVideo/CVPixelBuffer.h>\n#include <igl/Common.h>\n#include <igl/Device.h>\n#include <igl/Texture.h>\n#include <igl/opengl/macos/Context.h>\n#include <igl/opengl/macos/PlatformDevice.h>\n\nnamespace igl::tests {\n\nclass TextureBufferMacTest : public util::TextureFormatTestBase {\n public:\n  TextureBufferMacTest() = default;\n  ~TextureBufferMacTest() override = default;\n\n  std::shared_ptr<ITexture> createCVPixelBufferTextureWithSize(OSType pixelFormat,\n                                                               size_t width,\n                                                               size_t height,\n                                                               TextureDesc::TextureUsage usage,\n                                                               Result& outResult);\n};\n\nstd::shared_ptr<ITexture> TextureBufferMacTest::createCVPixelBufferTextureWithSize(\n    OSType pixelFormat,\n    const size_t width,\n    const size_t height,\n    TextureDesc::TextureUsage usage,\n    Result& outResult) {\n  const igl::BackendType backend = iglDev_->getBackendType();\n  CVPixelBufferRef pixelBuffer = nullptr;\n  NSDictionary* bufferAttributes = @{\n    (NSString*)kCVPixelBufferIOSurfacePropertiesKey : @{},\n    (NSString*)kCVPixelBufferOpenGLCompatibilityKey : @(backend == igl::BackendType::OpenGL),\n  };\n\n  const CVReturn result = CVPixelBufferCreate(kCFAllocatorDefault,\n                                              width,\n                                              height,\n                                              pixelFormat,\n                                              (__bridge CFDictionaryRef)(bufferAttributes),\n                                              &pixelBuffer);\n  if (result != kCVReturnSuccess) {\n    Result::setResult(&outResult,\n                      Result::Code::RuntimeError,\n                      \"CVPixelBufferCreate failed to create pixel buffer\");\n    return nullptr;\n  }\n\n  auto* platformDevice = iglDev_->getPlatformDevice<igl::opengl::macos::PlatformDevice>();\n  auto& context = static_cast<igl::opengl::macos::Context&>(platformDevice->getContext());\n  auto* textureCache = context.createTextureCache();\n  std::shared_ptr<ITexture> texture = platformDevice->createTextureFromNativePixelBuffer(\n      pixelBuffer, textureCache, usage, &outResult);\n  if (!outResult.isOk()) {\n    return nullptr;\n  }\n  if (texture == nullptr) {\n    Result::setResult(\n        &outResult, Result::Code::RuntimeError, \"failed to create igl texture from CVPixelBuffer\");\n    return nullptr;\n  }\n  CVPixelBufferRelease(pixelBuffer);\n  CVOpenGLTextureCacheRelease(textureCache);\n  Result::setOk(&outResult);\n  return texture;\n}\n\n#define PIXEL_FORMAT(pf) {pf, #pf}\n\nTEST_F(TextureBufferMacTest, createTextureFromNativePixelBuffer) {\n  const std::vector<std::pair<OSType, const char*>> pixelFormats = {\n      PIXEL_FORMAT(kCVPixelFormatType_32BGRA),\n      PIXEL_FORMAT(kCVPixelFormatType_OneComponent8),\n      // TODO: Figure out how to test YUV textures\n      // PIXEL_FORMAT(kCVPixelFormatType_420YpCbCr8BiPlanarFullRange),\n      // PIXEL_FORMAT(kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange),\n  };\n  for (auto [pixelFormat, name] : pixelFormats) {\n    Result result;\n    auto usage = TextureDesc::TextureUsageBits::Sampled | TextureDesc::TextureUsageBits::Attachment;\n    auto texture = createCVPixelBufferTextureWithSize(pixelFormat, 100, 100, usage, result);\n    ASSERT_EQ(result.isOk(), true) << name << \": \" << result.message.c_str();\n    testUsage(texture, usage, \"SampledAttachment\");\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/util/Color.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n#include <cstdint>\n#include <glm/gtc/color_space.hpp>\n\nnamespace igl::tests::util {\n// To avoid mix matching gamma, this defines a constant that everyone can use until it can be\n// configured on a per project basis.\nconstexpr double kDefaultGamma = 2.4;\n\n// force double precision color conversion to not lose precision\ntemplate<glm::length_t L, typename T, glm::qualifier Q>\nglm::vec<L, T, Q> convertSRGBToLinear(const glm::vec<L, T, Q>& nonLinearColor,\n                                      double gamma = kDefaultGamma) {\n  return glm::vec<L, T, Q>(glm::convertSRGBToLinear(glm::vec<L, double, Q>(nonLinearColor), gamma));\n}\n\n// force double precision color conversion to not lose precision\ntemplate<glm::length_t L, typename T, glm::qualifier Q>\nglm::vec<L, T, Q> convertLinearToSRGB(const glm::vec<L, T, Q>& linearColor,\n                                      double gamma = kDefaultGamma) {\n  return glm::vec<L, T, Q>(glm::convertLinearToSRGB(glm::vec<L, double, Q>(linearColor), gamma));\n}\n\n/**\n * @brief struct to represent a 32bits sRGB color value. It is assumed that the rgb colors are gamma\n * compressed using the sRGB transfer function and the alpha is linear.\n */\nstruct SRgbColor {\n  uint8_t r{};\n  uint8_t g{};\n  uint8_t b{};\n  uint8_t a{};\n\n  /**\n   * @brief Constructor ingesting red, green, blue. alpha is assumed to be 255.\n   * @remark the red green and blue are assumed to be gamma compressed using the sRGB transfer\n   * function.\n   *\n   * @param red - red channel\n   * @param green - green channel\n   * @param blue - blue channel\n   */\n  constexpr SRgbColor(uint8_t red, uint8_t green, uint8_t blue) :\n    r(red), g(green), b(blue), a(255) {}\n\n  /**\n   * @brief Constructor ingesting red, green, blue, alpha.\n   * @remark the red green and blue are assumed to be gamma compressed using the sRGB transfer\n   * function and the alpha is linear..\n   *\n   * @param red - red channel\n   * @param green - green channel\n   * @param blue - blue channel\n   * @param alpha - alpha channel\n   */\n  constexpr SRgbColor(uint8_t red, uint8_t green, uint8_t blue, uint8_t alpha) :\n    r(red), g(green), b(blue), a(alpha) {}\n\n  /**\n   * @brief Constructor ingesting red, green, blue, alpha.\n   *\n   * @param rgba - 32bits integer containing concatenated 8 bits for red, green, blue and alpha.\n   * @remark the red green and blue are assumed to be gamma compressed using the sRGB transfer\n   * function and the alpha is linear.\n   */\n  SRgbColor(uint32_t rgba) {\n    fromRGBA32(rgba);\n  }\n\n  /**\n   * @brief Encode the rgba values into a single 32bits integer.\n   * @return 32bits integer containing the rgba values.\n   * @remark the red green and blue are assumed to be gamma compressed using the sRGB transfer\n   * function and the alpha is linear.\n   */\n  [[nodiscard]] constexpr uint32_t toRGBA32() const {\n    return (r << 24) | (g << 16) | (b << 8) | a;\n  }\n\n  /**\n   * @brief Decode the rgba values into a single 32bits integer.\n   * @param rgba - 32bits integer containing the rgba values.\n   * @remark the rgba are assumed to be gamma compressed using the sRGB transfer function and the\n   * alpha is linear.\n   */\n  constexpr void fromRGBA32(uint32_t rgba) {\n    r = (rgba >> 24);\n    g = (rgba >> 16) & 0xff;\n    b = (rgba >> 8) & 0xff;\n    a = (rgba >> 0) & 0xff;\n  }\n};\n} // namespace igl::tests::util\n"
  },
  {
    "path": "src/igl/tests/util/Common.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"Common.h\"\n\n#include \"../data/ShaderData.h\"\n#include \"TestDevice.h\"\n\n#include <igl/ShaderCreator.h>\n\nnamespace igl::tests::util {\n\n//\n// Creates an IGL device and a command queue\n//\nvoid createDeviceAndQueue(std::shared_ptr<IDevice>& dev, std::shared_ptr<ICommandQueue>& cq) {\n  Result ret;\n\n  // Create Device\n  dev = util::createTestDevice();\n  ASSERT_TRUE(dev != nullptr);\n\n  // Create Command Queue\n  const CommandQueueDesc cqDesc = {};\n  cq = dev->createCommandQueue(cqDesc, &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cq != nullptr); // Shouldn't trigger if above is okay\n}\n\nvoid createShaderStages(const std::shared_ptr<IDevice>& dev,\n                        std::string_view vertexSource,\n                        std::string_view vertexEntryPoint,\n                        std::string_view fragmentSource,\n                        std::string_view fragmentEntryPoint,\n                        std::unique_ptr<IShaderStages>& stages) {\n  Result ret;\n  stages = ShaderStagesCreator::fromModuleStringInput(*dev,\n                                                      vertexSource.data(),\n                                                      std::string(vertexEntryPoint),\n                                                      \"\",\n                                                      fragmentSource.data(),\n                                                      std::string(fragmentEntryPoint),\n                                                      \"\",\n                                                      &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message.c_str();\n  ASSERT_TRUE(stages != nullptr);\n}\n\nvoid createShaderStages(const std::shared_ptr<IDevice>& dev,\n                        std::string_view librarySource,\n                        std::string_view vertexEntryPoint,\n                        std::string_view fragmentEntryPoint,\n                        std::unique_ptr<IShaderStages>& stages) {\n  Result ret;\n  stages = ShaderStagesCreator::fromLibraryStringInput(*dev,\n                                                       librarySource.data(),\n                                                       std::string(vertexEntryPoint),\n                                                       std::string(fragmentEntryPoint),\n                                                       \"\",\n                                                       &ret);\n\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  ASSERT_TRUE(stages != nullptr);\n}\n\nvoid createSimpleShaderStages(const std::shared_ptr<IDevice>& dev,\n                              std::unique_ptr<IShaderStages>& stages,\n                              TextureFormat outputFormat) {\n  const auto backendVersion = dev->getBackendVersion();\n\n  if (backendVersion.flavor == igl::BackendFlavor::OpenGL ||\n      backendVersion.flavor == igl::BackendFlavor::OpenGL_ES) {\n    const bool isGles3 = backendVersion.flavor == igl::BackendFlavor::OpenGL_ES &&\n                         backendVersion.majorVersion >= 3;\n    std::string_view vertexShader = isGles3 ? igl::tests::data::shader::kOglSimpleVertShaderEs3\n                                            : igl::tests::data::shader::kOglSimpleVertShader;\n    std::string_view fragmentShader = isGles3 ? igl::tests::data::shader::kOglSimpleFragShaderEs3\n                                              : igl::tests::data::shader::kOglSimpleFragShader;\n\n    createShaderStages(dev,\n                       vertexShader,\n                       igl::tests::data::shader::kShaderFunc,\n                       fragmentShader,\n                       igl::tests::data::shader::kShaderFunc,\n                       stages);\n  } else if (backendVersion.flavor == igl::BackendFlavor::Metal) {\n    std::string_view shader = igl::tests::data::shader::kMtlSimpleShader;\n    if (outputFormat == TextureFormat::RG_UInt16) {\n      shader = igl::tests::data::shader::kMtlSimpleShaderUshort2;\n    } else if (outputFormat == TextureFormat::R_UInt16) {\n      shader = igl::tests::data::shader::kMtlSimpleShaderUshort2;\n    } else if (outputFormat == TextureFormat::RGB10_A2_Uint_Rev) {\n      shader = igl::tests::data::shader::kMtlSimpleShaderUshort4;\n    } else if (outputFormat == TextureFormat::RGBA_UInt32) {\n      shader = igl::tests::data::shader::kMtlSimpleShaderUint4;\n    } else if (outputFormat == TextureFormat::R_UInt32) {\n      shader = igl::tests::data::shader::kMtlSimpleShaderUint;\n    } else if (outputFormat != TextureFormat::Invalid) {\n      auto components = TextureFormatProperties::fromTextureFormat(outputFormat).componentsPerPixel;\n      switch (components) {\n      case 1:\n        shader = igl::tests::data::shader::kMtlSimpleShaderFloat;\n        break;\n      case 2:\n        shader = igl::tests::data::shader::kMtlSimpleShaderFloat2;\n        break;\n      case 3:\n        shader = igl::tests::data::shader::kMtlSimpleShaderFloat3;\n        break;\n      case 4:\n        shader = igl::tests::data::shader::kMtlSimpleShaderFloat4;\n        break;\n      default:\n        ASSERT_TRUE(false);\n        break;\n      }\n    }\n    createShaderStages(dev,\n                       shader,\n                       igl::tests::data::shader::kSimpleVertFunc,\n                       igl::tests::data::shader::kSimpleFragFunc,\n                       stages);\n  } else if (backendVersion.flavor == igl::BackendFlavor::Vulkan) {\n    // Output format-specific shaders needed for MoltenVK\n    std::string_view fragShader = igl::tests::data::shader::kVulkanSimpleFragShader;\n    if (outputFormat == TextureFormat::RG_UInt16) {\n      fragShader = igl::tests::data::shader::kVulkanSimpleFragShaderUint2;\n    } else if (outputFormat == TextureFormat::R_UInt16) {\n      fragShader = igl::tests::data::shader::kVulkanSimpleFragShaderUint2;\n    } else if (outputFormat == TextureFormat::RGB10_A2_Uint_Rev) {\n      fragShader = igl::tests::data::shader::kVulkanSimpleFragShaderUint4;\n    } else if (outputFormat == TextureFormat::RGBA_UInt32) {\n      fragShader = igl::tests::data::shader::kVulkanSimpleFragShaderUint4;\n    } else if (outputFormat == TextureFormat::R_UInt32) {\n      fragShader = igl::tests::data::shader::kVulkanSimpleFragShaderUint;\n    } else if (outputFormat != TextureFormat::Invalid) {\n      auto components = TextureFormatProperties::fromTextureFormat(outputFormat).componentsPerPixel;\n      switch (components) {\n      case 1:\n        fragShader = igl::tests::data::shader::kVulkanSimpleFragShaderFloat;\n        break;\n      case 2:\n        fragShader = igl::tests::data::shader::kVulkanSimpleFragShaderFloat2;\n        break;\n      case 3:\n        fragShader = igl::tests::data::shader::kVulkanSimpleFragShaderFloat3;\n        break;\n      case 4:\n        fragShader = igl::tests::data::shader::kVulkanSimpleFragShaderFloat4;\n        break;\n      default:\n        ASSERT_TRUE(false);\n        break;\n      }\n    }\n    createShaderStages(dev,\n                       igl::tests::data::shader::kVulkanSimpleVertShader,\n                       std::string(igl::tests::data::shader::kShaderFunc),\n                       fragShader,\n                       std::string(igl::tests::data::shader::kShaderFunc),\n                       stages);\n  } else if (backendVersion.flavor == igl::BackendFlavor::D3D12) {\n    // Minimal HLSL equivalent used for D3D12 tests\n    const char* vsHlsl = R\"(\nstruct VSIn { float4 position_in : POSITION; float2 uv_in : TEXCOORD0; };\nstruct PSIn { float4 position : SV_POSITION; float2 uv : TEXCOORD0; };\nPSIn main(VSIn i) { PSIn o; o.position = i.position_in; o.uv = i.uv_in; return o; }\n)\";\n    const char* psHlsl = R\"(\nTexture2D inputImage : register(t0);\nSamplerState samp0 : register(s0);\nstruct PSIn { float4 position : SV_POSITION; float2 uv : TEXCOORD0; };\nfloat4 main(PSIn i) : SV_TARGET { return inputImage.Sample(samp0, i.uv); }\n)\";\n    createShaderStages(dev, vsHlsl, std::string(\"main\"), psHlsl, std::string(\"main\"), stages);\n  } else {\n    ASSERT_TRUE(0);\n  }\n}\n\n} // namespace igl::tests::util\n"
  },
  {
    "path": "src/igl/tests/util/Common.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <gtest/gtest.h>\n\n#include <string_view>\n#include <igl/Device.h>\n\n#if IGL_PLATFORM_IOS || IGL_PLATFORM_MACOSX\n#include \"simd/simd.h\"\n#else\n#include \"simdstub.h\"\n#endif\nnamespace igl::tests::util {\n\nconstexpr std::string_view kBackendOgl(\"ogl\");\nconstexpr std::string_view kBackendMtl(\"metal\");\nconstexpr std::string_view kBackendVul(\"vulkan\");\nconstexpr std::string_view kBackendD3D12(\"d3d12\");\n\n// Creates an IGL device and a command queue\nvoid createDeviceAndQueue(std::shared_ptr<IDevice>& dev, std::shared_ptr<ICommandQueue>& cq);\n\nvoid createShaderStages(const std::shared_ptr<IDevice>& dev,\n                        std::string_view vertexSource,\n                        std::string_view vertexEntryPoint,\n                        std::string_view fragmentSource,\n                        std::string_view fragmentEntryPoint,\n                        std::unique_ptr<IShaderStages>& stages);\n\nvoid createShaderStages(const std::shared_ptr<IDevice>& dev,\n                        std::string_view librarySource,\n                        std::string_view vertexEntryPoint,\n                        std::string_view fragmentEntryPoint,\n                        std::unique_ptr<IShaderStages>& stages);\n\nvoid createSimpleShaderStages(const std::shared_ptr<IDevice>& dev,\n                              std::unique_ptr<IShaderStages>& stages,\n                              TextureFormat outputFormat = TextureFormat::Invalid);\n\n} // namespace igl::tests::util\n"
  },
  {
    "path": "src/igl/tests/util/Half.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#define IGL_USE_CUSTOM_HALF 1\n\n#if IGL_USE_CUSTOM_HALF\n#include <glm/gtc/packing.hpp>\n\nnamespace igl::tests::util {\nstruct Half {\n public:\n  constexpr Half() noexcept = default;\n\n  explicit Half(float f) {\n    data_ = glm::packHalf1x16(f);\n  }\n  Half& operator=(float f) {\n    data_ = glm::packHalf1x16(f);\n    return *this;\n  }\n\n  operator float() const {\n    return glm::unpackHalf1x16(data_);\n  }\n\n private:\n  uint16_t data_ = 0;\n\n  template<typename CharT, typename Traits>\n  friend std::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& /*out*/,\n                                                       Half /*arg*/);\n};\n\ntemplate<typename CharT, typename Traits>\nstd::basic_ostream<CharT, Traits>& operator<<(std::basic_ostream<CharT, Traits>& out, Half arg) {\n  return out << glm::unpackHalf1x16(arg.data_);\n}\n\nusing TestHalf = Half;\n} // namespace igl::tests::util\n#else\n#include <half/half.hpp>\n\nnamespace igl::tests::util {\nusing TestHalf = half_float::half;\n} // namespace igl::tests::util\n#endif\n"
  },
  {
    "path": "src/igl/tests/util/SpvModules.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"SpvModules.h\"\n\nnamespace igl::tests {\n\nconst std::vector<uint32_t>& getUniformBufferSpvWords() {\n  /**\n                 OpCapability Shader\n                 OpMemoryModel Logical Simple\n                 OpEntryPoint CombinedVF %main \"main\" %builtinPosition %_1\n                 OpMemberName %UBO0 0 \"x0\"\n                 OpName %UBO0 \"UBO0\"\n                 OpName %ubo0 \"ubo0\"\n                 OpName %x1 \"x1\"\n                 OpName %x2 \"x2\"\n                 OpMemberName %UBO3 0 \"x3\"\n                 OpName %UBO3 \"UBO3\"\n                 OpName %ubo3 \"ubo3\"\n                 OpName %f \"f\"\n                 OpName %main \"main\"\n                 OpDecorate %builtinPosition BuiltIn Position\n                 OpDecorate %_1 Location 0\n                 OpDecorate %UBO0 Block\n                 OpMemberDecorate %UBO0 0 Offset 0\n                 OpDecorate %ubo0 DescriptorSet 0\n                 OpDecorate %ubo0 Binding 0\n                 OpDecorate %UBO3 Block\n                 OpMemberDecorate %UBO3 0 Offset 0\n                 OpDecorate %ubo3 DescriptorSet 0\n                 OpDecorate %ubo3 Binding 3\n        %float = OpTypeFloat 32\n      %v4float = OpTypeVector %float 4\n  %ptr_Output_v4float = OpTypePointer Output %v4float\n  %builtinPosition = OpVariable %ptr_Output_v4float Output\n           %_1 = OpVariable %ptr_Output_v4float Output\n         %UBO0 = OpTypeStruct %float\n  %ptr_Uniform_UBO0 = OpTypePointer Uniform %UBO0\n         %ubo0 = OpVariable %ptr_Uniform_UBO0 Uniform\n          %int = OpTypeInt 32 1\n         %_16i = OpConstant %int 16\n  %arr_float__16i = OpTypeArray %float %_16i\n  %ptr_UniformConstant_arr_float__16i = OpTypePointer UniformConstant %arr_float__16i\n           %x1 = OpVariable %ptr_UniformConstant_arr_float__16i UniformConstant\n  %ptr_UniformConstant_float = OpTypePointer UniformConstant %float\n           %x2 = OpVariable %ptr_UniformConstant_float UniformConstant\n         %UBO3 = OpTypeStruct %float\n  %ptr_Uniform_UBO3 = OpTypePointer Uniform %UBO3\n         %ubo3 = OpVariable %ptr_Uniform_UBO3 Uniform\n         %void = OpTypeVoid\n         %func = OpTypeFunction %void\n  %ptr_Uniform_float = OpTypePointer Uniform %float\n          %_0i = OpConstant %int 0\n  %ptr_Function_v4float = OpTypePointer Function %v4float\n         %main = OpFunction %void None %func\n           %_2 = OpLabel\n            %f = OpVariable %ptr_Function_v4float Function\n           %_3 = OpAccessChain %ptr_Uniform_float %ubo0 %_0i\n           %_4 = OpLoad %float %_3\n           %_5 = OpLoad %arr_float__16i %x1\n           %_6 = OpCompositeExtract %float %_5 1\n           %_7 = OpLoad %float %x2\n           %_8 = OpAccessChain %ptr_Uniform_float %ubo3 %_0i\n           %_9 = OpLoad %float %_8\n          %_10 = OpCompositeConstruct %v4float %_4 %_6 %_7 %_9\n                 OpStore %f %_10\n          %_11 = OpLoad %v4float %f\n                 OpStore %builtinPosition %_11\n          %_12 = OpLoad %v4float %f\n                 OpStore %_1 %_12\n                 OpReturn\n                 OpFunctionEnd\n  */\n\n  static const std::vector<uint32_t> kUniformBufferSpvWords = {\n      0x07230203, 0x00010000, 0xdeadbeef, 0x0000003e, 0x00000000, 0x00020011, 0x00000001,\n      0x0003000e, 0x00000000, 0x00000000, 0x0006000f, 0x00000000, 0x00000025, 0x6e69616d,\n      0x00000000, 0x00000002, 0x0006000f, 0x00000004, 0x00000026, 0x6e69616d, 0x00000000,\n      0x00000003, 0x00030010, 0x00000026, 0x00000008, 0x00040005, 0x00000004, 0x304f4255,\n      0x00000000, 0x00040006, 0x00000004, 0x00000000, 0x00003078, 0x00040005, 0x00000008,\n      0x334f4255, 0x00000000, 0x00040006, 0x00000008, 0x00000000, 0x00003378, 0x00040005,\n      0x00000005, 0x306f6275, 0x00000000, 0x00030005, 0x00000006, 0x00003178, 0x00030005,\n      0x00000007, 0x00003278, 0x00040005, 0x00000009, 0x336f6275, 0x00000000, 0x00040005,\n      0x00000025, 0x6e69616d, 0x00000000, 0x00030005, 0x00000037, 0x00000066, 0x00040005,\n      0x00000026, 0x6e69616d, 0x00000000, 0x00030005, 0x00000038, 0x00000066, 0x00030047,\n      0x00000004, 0x00000002, 0x00050048, 0x00000004, 0x00000000, 0x00000023, 0x00000000,\n      0x00030047, 0x00000008, 0x00000002, 0x00050048, 0x00000008, 0x00000000, 0x00000023,\n      0x00000000, 0x00040047, 0x00000002, 0x0000000b, 0x00000000, 0x00040047, 0x00000003,\n      0x0000001e, 0x00000000, 0x00040047, 0x00000005, 0x00000022, 0x00000000, 0x00040047,\n      0x00000005, 0x00000021, 0x00000000, 0x00040047, 0x00000009, 0x00000022, 0x00000000,\n      0x00040047, 0x00000009, 0x00000021, 0x00000003, 0x00030016, 0x0000000b, 0x00000020,\n      0x00040015, 0x0000000f, 0x00000020, 0x00000001, 0x0004002b, 0x0000000f, 0x00000010,\n      0x00000010, 0x0004002b, 0x0000000f, 0x00000018, 0x00000000, 0x00040017, 0x0000000c,\n      0x0000000b, 0x00000004, 0x00040020, 0x0000000d, 0x00000003, 0x0000000c, 0x0003001e,\n      0x00000004, 0x0000000b, 0x00040020, 0x0000000e, 0x00000002, 0x00000004, 0x0004001c,\n      0x00000011, 0x0000000b, 0x00000010, 0x00040020, 0x00000012, 0x00000000, 0x00000011,\n      0x00040020, 0x00000013, 0x00000000, 0x0000000b, 0x0003001e, 0x00000008, 0x0000000b,\n      0x00040020, 0x00000014, 0x00000002, 0x00000008, 0x00020013, 0x00000015, 0x00030021,\n      0x00000016, 0x00000015, 0x00040020, 0x00000017, 0x00000002, 0x0000000b, 0x00040017,\n      0x00000039, 0x0000000b, 0x00000002, 0x00040017, 0x0000003a, 0x0000000b, 0x00000003,\n      0x00040017, 0x0000003b, 0x0000000f, 0x00000002, 0x00040017, 0x0000003c, 0x0000000f,\n      0x00000003, 0x00040017, 0x0000003d, 0x0000000f, 0x00000004, 0x0004003b, 0x0000000d,\n      0x00000002, 0x00000003, 0x0004003b, 0x0000000d, 0x00000003, 0x00000003, 0x0004003b,\n      0x0000000e, 0x00000005, 0x00000002, 0x0004003b, 0x00000012, 0x00000006, 0x00000000,\n      0x0004003b, 0x00000013, 0x00000007, 0x00000000, 0x0004003b, 0x00000014, 0x00000009,\n      0x00000002, 0x00050036, 0x00000015, 0x00000025, 0x00000000, 0x00000016, 0x000200f8,\n      0x00000027, 0x00050041, 0x00000017, 0x00000029, 0x00000005, 0x00000018, 0x0004003d,\n      0x0000000b, 0x0000002b, 0x00000029, 0x0004003d, 0x00000011, 0x0000002d, 0x00000006,\n      0x00050051, 0x0000000b, 0x0000002f, 0x0000002d, 0x00000001, 0x0004003d, 0x0000000b,\n      0x00000031, 0x00000007, 0x00050041, 0x00000017, 0x00000033, 0x00000009, 0x00000018,\n      0x0004003d, 0x0000000b, 0x00000035, 0x00000033, 0x00070050, 0x0000000c, 0x00000037,\n      0x0000002b, 0x0000002f, 0x00000031, 0x00000035, 0x0003003e, 0x00000002, 0x00000037,\n      0x000100fd, 0x00010038, 0x00050036, 0x00000015, 0x00000026, 0x00000000, 0x00000016,\n      0x000200f8, 0x00000028, 0x00050041, 0x00000017, 0x0000002a, 0x00000005, 0x00000018,\n      0x0004003d, 0x0000000b, 0x0000002c, 0x0000002a, 0x0004003d, 0x00000011, 0x0000002e,\n      0x00000006, 0x00050051, 0x0000000b, 0x00000030, 0x0000002e, 0x00000001, 0x0004003d,\n      0x0000000b, 0x00000032, 0x00000007, 0x00050041, 0x00000017, 0x00000034, 0x00000009,\n      0x00000018, 0x0004003d, 0x0000000b, 0x00000036, 0x00000034, 0x00070050, 0x0000000c,\n      0x00000038, 0x0000002c, 0x00000030, 0x00000032, 0x00000036, 0x0003003e, 0x00000003,\n      0x00000038, 0x000100fd, 0x00010038,\n  };\n  return kUniformBufferSpvWords;\n}\n\nconst std::vector<uint32_t>& getTextureSpvWords() {\n  /**\n                 OpCapability Shader\n                 OpMemoryModel Logical Simple\n                 OpEntryPoint CombinedVF %main \"main\" %builtinPosition %_1\n                 OpName %s0 \"s0\"\n                 OpName %s1 \"s1\"\n                 OpName %s2 \"s2\"\n                 OpName %s3 \"s3\"\n                 OpName %f \"f\"\n                 OpName %main \"main\"\n                 OpDecorate %builtinPosition BuiltIn Position\n                 OpDecorate %_1 Location 0\n                 OpDecorate %s1 DescriptorSet 0\n                 OpDecorate %s1 Binding 1\n                 OpDecorate %s3 DescriptorSet 0\n                 OpDecorate %s3 Binding 3\n        %float = OpTypeFloat 32\n      %v4float = OpTypeVector %float 4\n  %ptr_Output_v4float = OpTypePointer Output %v4float\n  %builtinPosition = OpVariable %ptr_Output_v4float Output\n           %_1 = OpVariable %ptr_Output_v4float Output\n     %image_2D = OpTypeImage %float 2D 0 0 0 1 Unknown\n  %sampled_image_2D = OpTypeSampledImage %image_2D\n  %ptr_UniformConstant_sampled_image_2D = OpTypePointer UniformConstant %sampled_image_2D\n           %s0 = OpVariable %ptr_UniformConstant_sampled_image_2D UniformConstant\n           %s1 = OpVariable %ptr_UniformConstant_sampled_image_2D UniformConstant\n           %s2 = OpVariable %ptr_UniformConstant_sampled_image_2D UniformConstant\n           %s3 = OpVariable %ptr_UniformConstant_sampled_image_2D UniformConstant\n         %void = OpTypeVoid\n         %func = OpTypeFunction %void\n        %_0_0f = OpConstant %float 0.0\n     %v4floatc = OpConstantComposite %v4float %_0_0f %_0_0f %_0_0f %_0_0f\n      %v2float = OpTypeVector %float 2\n     %v2floatc = OpConstantComposite %v2float %_0_0f %_0_0f\n        %_0_1f = OpConstant %float 0.1\n    %v2floatc2 = OpConstantComposite %v2float %_0_1f %_0_1f\n        %_0_2f = OpConstant %float 0.2\n    %v2floatc3 = OpConstantComposite %v2float %_0_2f %_0_2f\n  %_0_30000001f = OpConstant %float 0.30000001\n    %v2floatc4 = OpConstantComposite %v2float %_0_30000001f %_0_30000001f\n  %ptr_Function_v4float = OpTypePointer Function %v4float\n         %main = OpFunction %void None %func\n           %_2 = OpLabel\n            %f = OpVariable %ptr_Function_v4float Function\n                 OpStore %builtinPosition %v4floatc\n           %_3 = OpLoad %sampled_image_2D %s0\n           %_4 = OpImageSampleImplicitLod %v4float %_3 %v2floatc\n           %_5 = OpLoad %sampled_image_2D %s1\n           %_6 = OpImageSampleImplicitLod %v4float %_5 %v2floatc2\n           %_7 = OpFAdd %v4float %_4 %_6\n           %_8 = OpLoad %sampled_image_2D %s2\n           %_9 = OpImageSampleImplicitLod %v4float %_8 %v2floatc3\n          %_10 = OpFAdd %v4float %_7 %_9\n          %_11 = OpLoad %sampled_image_2D %s3\n          %_12 = OpImageSampleImplicitLod %v4float %_11 %v2floatc4\n          %_13 = OpFAdd %v4float %_10 %_12\n                 OpStore %f %_13\n          %_14 = OpLoad %v4float %f\n                 OpStore %_1 %_14\n                 OpReturn\n                 OpFunctionEnd\n  */\n\n  static const std::vector<uint32_t> kTextureSpvWords = {\n      0x07230203, 0x00010000, 0xdeadbeef, 0x00000036, 0x00000000, 0x00020011, 0x00000001,\n      0x0003000e, 0x00000000, 0x00000000, 0x0006000f, 0x00000000, 0x00000029, 0x6e69616d,\n      0x00000000, 0x00000002, 0x0006000f, 0x00000004, 0x0000002a, 0x6e69616d, 0x00000000,\n      0x00000003, 0x00030010, 0x0000002a, 0x00000008, 0x00030005, 0x00000004, 0x00003073,\n      0x00030005, 0x00000005, 0x00003173, 0x00030005, 0x00000006, 0x00003273, 0x00030005,\n      0x00000007, 0x00003373, 0x00040005, 0x00000029, 0x6e69616d, 0x00000000, 0x00040005,\n      0x0000002a, 0x6e69616d, 0x00000000, 0x00030005, 0x00000027, 0x00000066, 0x00040047,\n      0x00000002, 0x0000000b, 0x00000000, 0x00040047, 0x00000003, 0x0000001e, 0x00000000,\n      0x00040047, 0x00000005, 0x00000022, 0x00000000, 0x00040047, 0x00000005, 0x00000021,\n      0x00000001, 0x00040047, 0x00000007, 0x00000022, 0x00000000, 0x00040047, 0x00000007,\n      0x00000021, 0x00000003, 0x00030016, 0x00000009, 0x00000020, 0x0004002b, 0x00000009,\n      0x00000011, 0x00000000, 0x0004002b, 0x00000009, 0x00000015, 0x3dcccccd, 0x0004002b,\n      0x00000009, 0x00000017, 0x3e4ccccd, 0x0004002b, 0x00000009, 0x00000019, 0x3e99999a,\n      0x00040017, 0x0000000a, 0x00000009, 0x00000004, 0x00040020, 0x0000000b, 0x00000003,\n      0x0000000a, 0x00090019, 0x0000000c, 0x00000009, 0x00000001, 0x00000000, 0x00000000,\n      0x00000000, 0x00000001, 0x00000000, 0x0003001b, 0x0000000d, 0x0000000c, 0x00040020,\n      0x0000000e, 0x00000000, 0x0000000d, 0x00020013, 0x0000000f, 0x00030021, 0x00000010,\n      0x0000000f, 0x00040017, 0x00000013, 0x00000009, 0x00000002, 0x00040017, 0x00000035,\n      0x00000009, 0x00000003, 0x0007002c, 0x0000000a, 0x00000012, 0x00000011, 0x00000011,\n      0x00000011, 0x00000011, 0x0005002c, 0x00000013, 0x00000014, 0x00000011, 0x00000011,\n      0x0005002c, 0x00000013, 0x00000016, 0x00000015, 0x00000015, 0x0005002c, 0x00000013,\n      0x00000018, 0x00000017, 0x00000017, 0x0005002c, 0x00000013, 0x0000001a, 0x00000019,\n      0x00000019, 0x0004003b, 0x0000000b, 0x00000002, 0x00000003, 0x0004003b, 0x0000000b,\n      0x00000003, 0x00000003, 0x0004003b, 0x0000000e, 0x00000004, 0x00000000, 0x0004003b,\n      0x0000000e, 0x00000005, 0x00000000, 0x0004003b, 0x0000000e, 0x00000006, 0x00000000,\n      0x0004003b, 0x0000000e, 0x00000007, 0x00000000, 0x00050036, 0x0000000f, 0x00000029,\n      0x00000000, 0x00000010, 0x000200f8, 0x0000002b, 0x0003003e, 0x00000002, 0x00000012,\n      0x000100fd, 0x00010038, 0x00050036, 0x0000000f, 0x0000002a, 0x00000000, 0x00000010,\n      0x000200f8, 0x0000002c, 0x0004003d, 0x0000000d, 0x0000002e, 0x00000004, 0x00050057,\n      0x0000000a, 0x0000001e, 0x0000002e, 0x00000014, 0x0004003d, 0x0000000d, 0x00000030,\n      0x00000005, 0x00050057, 0x0000000a, 0x00000020, 0x00000030, 0x00000016, 0x00050081,\n      0x0000000a, 0x00000021, 0x0000001e, 0x00000020, 0x0004003d, 0x0000000d, 0x00000032,\n      0x00000006, 0x00050057, 0x0000000a, 0x00000023, 0x00000032, 0x00000018, 0x00050081,\n      0x0000000a, 0x00000024, 0x00000021, 0x00000023, 0x0004003d, 0x0000000d, 0x00000034,\n      0x00000007, 0x00050057, 0x0000000a, 0x00000026, 0x00000034, 0x0000001a, 0x00050081,\n      0x0000000a, 0x00000027, 0x00000024, 0x00000026, 0x0003003e, 0x00000003, 0x00000027,\n      0x000100fd, 0x00010038,\n  };\n  return kTextureSpvWords;\n}\n\nconst std::vector<uint32_t>& getTextureWithDescriptorSetSpvWords() {\n  /*\n          OpCapability Shader\n          OpMemoryModel Logical Simple\n          OpEntryPoint CombinedVF %main \"main\" %uv %fragColor\n          OpName %tex0 \"tex0\"\n          OpName %tex1 \"tex1\"\n          OpName %uv \"uv\"\n          OpName %fragColor \"fragColor\"\n          OpName %main \"main\"\n          OpDecorate %tex0 Binding 1\n          OpDecorate %tex0 DescriptorSet 0\n          OpDecorate %tex1 Binding 2\n          OpDecorate %tex1 DescriptorSet 1\n %float = OpTypeFloat 32\n%image_2D = OpTypeImage %float 2D 0 0 0 1 Unknown\n%sampled_image_2D = OpTypeSampledImage %image_2D\n%ptr_UniformConstant_sampled_image_2D = OpTypePointer UniformConstant %sampled_image_2D\n  %tex0 = OpVariable %ptr_UniformConstant_sampled_image_2D UniformConstant\n  %tex1 = OpVariable %ptr_UniformConstant_sampled_image_2D UniformConstant\n%v2float = OpTypeVector %float 2\n%ptr_Input_v2float = OpTypePointer Input %v2float\n    %uv = OpVariable %ptr_Input_v2float Input\n%v4float = OpTypeVector %float 4\n%ptr_Output_v4float = OpTypePointer Output %v4float\n%fragColor = OpVariable %ptr_Output_v4float Output\n  %void = OpTypeVoid\n  %func = OpTypeFunction %void\n  %main = OpFunction %void None %func\n    %_1 = OpLabel\n    %_2 = OpLoad %sampled_image_2D %tex0\n    %_3 = OpLoad %v2float %uv\n    %_4 = OpImageSampleImplicitLod %v4float %_2 %_3\n    %_5 = OpLoad %sampled_image_2D %tex1\n    %_6 = OpLoad %v2float %uv\n    %_7 = OpImageSampleImplicitLod %v4float %_5 %_6\n    %_8 = OpFAdd %v4float %_4 %_7\n          OpStore %fragColor %_8\n          OpReturn\n          OpFunctionEnd\n*/\n\n  static const std::vector<uint32_t> kTextureWithDescriptorSetSpvWords = {\n      0x07230203, 0x00010000, 0xdeadbeef, 0x00000025, 0x00000000, 0x00020011, 0x00000001,\n      0x0003000e, 0x00000000, 0x00000000, 0x0007000f, 0x00000000, 0x00000018, 0x6e69616d,\n      0x00000000, 0x00000002, 0x0000001e, 0x0007000f, 0x00000004, 0x00000019, 0x6e69616d,\n      0x00000000, 0x00000003, 0x0000001f, 0x00030010, 0x00000019, 0x00000008, 0x00040005,\n      0x00000004, 0x30786574, 0x00000000, 0x00040005, 0x00000005, 0x31786574, 0x00000000,\n      0x00030005, 0x00000002, 0x00007675, 0x00050005, 0x00000003, 0x67617266, 0x6f6c6f43,\n      0x00000072, 0x00040005, 0x00000018, 0x6e69616d, 0x00000000, 0x00040005, 0x00000019,\n      0x6e69616d, 0x00000000, 0x00040047, 0x00000004, 0x00000022, 0x00000000, 0x00040047,\n      0x00000004, 0x00000021, 0x00000001, 0x00040047, 0x00000005, 0x00000022, 0x00000001,\n      0x00040047, 0x00000005, 0x00000021, 0x00000002, 0x00040047, 0x00000002, 0x0000001e,\n      0x00000000, 0x00040047, 0x00000003, 0x0000001e, 0x00000000, 0x00040047, 0x0000001e,\n      0x0000001e, 0x00000000, 0x00040047, 0x0000001f, 0x0000001e, 0x00000000, 0x00030016,\n      0x00000006, 0x00000020, 0x00090019, 0x00000007, 0x00000006, 0x00000001, 0x00000000,\n      0x00000000, 0x00000000, 0x00000001, 0x00000000, 0x0003001b, 0x00000008, 0x00000007,\n      0x00040020, 0x00000009, 0x00000000, 0x00000008, 0x00040017, 0x0000000a, 0x00000006,\n      0x00000002, 0x00040020, 0x0000000b, 0x00000001, 0x0000000a, 0x00040017, 0x0000000c,\n      0x00000006, 0x00000004, 0x00040020, 0x0000000d, 0x00000003, 0x0000000c, 0x00020013,\n      0x0000000e, 0x00030021, 0x0000000f, 0x0000000e, 0x00040020, 0x00000023, 0x00000003,\n      0x0000000a, 0x00040017, 0x00000024, 0x00000006, 0x00000003, 0x0004003b, 0x00000009,\n      0x00000004, 0x00000000, 0x0004003b, 0x00000009, 0x00000005, 0x00000000, 0x0004003b,\n      0x0000000b, 0x00000002, 0x00000001, 0x0004003b, 0x0000000d, 0x00000003, 0x00000003,\n      0x0004003b, 0x00000023, 0x0000001e, 0x00000003, 0x0004003b, 0x0000000b, 0x0000001f,\n      0x00000001, 0x00050036, 0x0000000e, 0x00000018, 0x00000000, 0x0000000f, 0x000200f8,\n      0x0000001a, 0x0004003d, 0x0000000a, 0x00000012, 0x00000002, 0x0003003e, 0x0000001e,\n      0x00000012, 0x000100fd, 0x00010038, 0x00050036, 0x0000000e, 0x00000019, 0x00000000,\n      0x0000000f, 0x000200f8, 0x0000001b, 0x0004003d, 0x00000008, 0x0000001d, 0x00000004,\n      0x0004003d, 0x0000000a, 0x00000020, 0x0000001f, 0x00050057, 0x0000000c, 0x00000013,\n      0x0000001d, 0x00000020, 0x0004003d, 0x00000008, 0x00000022, 0x00000005, 0x00050057,\n      0x0000000c, 0x00000016, 0x00000022, 0x00000020, 0x00050081, 0x0000000c, 0x00000017,\n      0x00000013, 0x00000016, 0x0003003e, 0x00000003, 0x00000017, 0x000100fd, 0x00010038,\n  };\n  return kTextureWithDescriptorSetSpvWords;\n}\n\nconst std::vector<uint32_t>& getTinyMeshFragmentShaderSpvWords() {\n  /*\n                 OpCapability Shader\n                 OpCapability ImageQuery\n            %1 = OpExtInstImport \"GLSL.std.450\"\n                 OpMemoryModel Logical GLSL450\n                 OpEntryPoint Fragment %main \"main\" %mtl %vtx %out_FragColor\n                 OpExecutionMode %main OriginUpperLeft\n                 OpSource GLSL 460\n                 OpName %main \"main\"\n                 OpName %textureBindless2D_u1_vf2_ \"textureBindless2D(u1;vf2;\"\n                 OpName %textureid \"textureid\"\n                 OpName %uv \"uv\"\n                 OpName %PCF3_vf3_ \"PCF3(vf3;\"\n                 OpName %uvw \"uvw\"\n                 OpName %shadow_vf4_ \"shadow(vf4;\"\n                 OpName %s \"s\"\n                 OpName %size \"size\"\n                 OpName %texShadow \"texShadow\"\n                 OpName %shadow \"shadow\"\n                 OpName %v \"v\"\n                 OpName %u \"u\"\n                 OpName %depthBias \"depthBias\"\n                 OpName %shadowSample \"shadowSample\"\n                 OpName %param \"param\"\n                 OpName %alpha \"alpha\"\n                 OpName %Material \"Material\"\n                 OpMemberName %Material 0 \"ambient\"\n                 OpMemberName %Material 1 \"diffuse\"\n                 OpMemberName %Material 2 \"texAmbient\"\n                 OpMemberName %Material 3 \"texDiffuse\"\n                 OpMemberName %Material 4 \"texAlpha\"\n                 OpMemberName %Material 5 \"padding\"\n                 OpName %mtl \"mtl\"\n                 OpName %PerVertex \"PerVertex\"\n                 OpMemberName %PerVertex 0 \"normal\"\n                 OpMemberName %PerVertex 1 \"uv\"\n                 OpMemberName %PerVertex 2 \"shadowCoords\"\n                 OpName %vtx \"vtx\"\n                 OpName %param_0 \"param\"\n                 OpName %param_1 \"param\"\n                 OpName %Ka \"Ka\"\n                 OpName %param_2 \"param\"\n                 OpName %param_3 \"param\"\n                 OpName %Kd \"Kd\"\n                 OpName %param_4 \"param\"\n                 OpName %param_5 \"param\"\n                 OpName %drawNormals \"drawNormals\"\n                 OpName %UniformsPerFrame \"UniformsPerFrame\"\n                 OpMemberName %UniformsPerFrame 0 \"proj\"\n                 OpMemberName %UniformsPerFrame 1 \"view\"\n                 OpMemberName %UniformsPerFrame 2 \"light\"\n                 OpMemberName %UniformsPerFrame 3 \"bDrawNormals\"\n                 OpMemberName %UniformsPerFrame 4 \"bDebugLines\"\n                 OpMemberName %UniformsPerFrame 5 \"padding\"\n                 OpName %PerFrame \"PerFrame\"\n                 OpMemberName %PerFrame 0 \"perFrame\"\n                 OpName %_ \"\"\n                 OpName %n \"n\"\n                 OpName %NdotL1 \"NdotL1\"\n                 OpName %NdotL2 \"NdotL2\"\n                 OpName %NdotL \"NdotL\"\n                 OpName %diffuse \"diffuse\"\n                 OpName %texSkyboxIrradiance \"texSkyboxIrradiance\"\n                 OpName %out_FragColor \"out_FragColor\"\n                 OpName %param_6 \"param\"\n                 OpDecorate %texShadow DescriptorSet 0\n                 OpDecorate %texShadow Binding 0\n                 OpDecorate %mtl Flat\n                 OpDecorate %mtl Location 5\n                 OpDecorate %vtx Location 0\n                 OpMemberDecorate %UniformsPerFrame 0 ColMajor\n                 OpMemberDecorate %UniformsPerFrame 0 Offset 0\n                 OpMemberDecorate %UniformsPerFrame 0 MatrixStride 16\n                 OpMemberDecorate %UniformsPerFrame 1 ColMajor\n                 OpMemberDecorate %UniformsPerFrame 1 Offset 64\n                 OpMemberDecorate %UniformsPerFrame 1 MatrixStride 16\n                 OpMemberDecorate %UniformsPerFrame 2 ColMajor\n                 OpMemberDecorate %UniformsPerFrame 2 Offset 128\n                 OpMemberDecorate %UniformsPerFrame 2 MatrixStride 16\n                 OpMemberDecorate %UniformsPerFrame 3 Offset 192\n                 OpMemberDecorate %UniformsPerFrame 4 Offset 196\n                 OpMemberDecorate %UniformsPerFrame 5 Offset 200\n                 OpMemberDecorate %PerFrame 0 Offset 0\n                 OpDecorate %PerFrame Block\n                 OpDecorate %_ DescriptorSet 1\n                 OpDecorate %_ Binding 0\n                 OpDecorate %texSkyboxIrradiance DescriptorSet 0\n                 OpDecorate %texSkyboxIrradiance Binding 4\n                 OpDecorate %out_FragColor Location 0\n         %void = OpTypeVoid\n            %3 = OpTypeFunction %void\n         %uint = OpTypeInt 32 0\n  %_ptr_Function_uint = OpTypePointer Function %uint\n        %float = OpTypeFloat 32\n      %v2float = OpTypeVector %float 2\n  %_ptr_Function_v2float = OpTypePointer Function %v2float\n      %v4float = OpTypeVector %float 4\n           %12 = OpTypeFunction %v4float %_ptr_Function_uint %_ptr_Function_v2float\n      %v3float = OpTypeVector %float 3\n  %_ptr_Function_v3float = OpTypePointer Function %v3float\n           %19 = OpTypeFunction %float %_ptr_Function_v3float\n  %_ptr_Function_v4float = OpTypePointer Function %v4float\n           %24 = OpTypeFunction %float %_ptr_Function_v4float\n      %float_1 = OpConstant %float 1\n           %29 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1\n  %_ptr_Function_float = OpTypePointer Function %float\n           %34 = OpTypeImage %float 2D 1 0 0 1 Unknown\n           %35 = OpTypeSampledImage %34\n  %_ptr_UniformConstant_35 = OpTypePointer UniformConstant %35\n    %texShadow = OpVariable %_ptr_UniformConstant_35 UniformConstant\n          %int = OpTypeInt 32 1\n        %int_0 = OpConstant %int 0\n        %v2int = OpTypeVector %int 2\n       %uint_0 = OpConstant %uint 0\n      %float_0 = OpConstant %float 0\n  %_ptr_Function_int = OpTypePointer Function %int\n       %int_n1 = OpConstant %int -1\n        %int_1 = OpConstant %int 1\n         %bool = OpTypeBool\n      %float_9 = OpConstant %float 9\n       %uint_3 = OpConstant %uint 3\n       %uint_2 = OpConstant %uint 2\n     %float_n1 = OpConstant %float -1\n  %float_n4_99999987en05 = OpConstant %float -4.99999987e-05\n       %uint_1 = OpConstant %uint 1\n  %float_0_300000012 = OpConstant %float 0.300000012\n     %Material = OpTypeStruct %v4float %v4float %int %int %int %int\n  %_ptr_Input_Material = OpTypePointer Input %Material\n          %mtl = OpVariable %_ptr_Input_Material Input\n        %int_4 = OpConstant %int 4\n  %_ptr_Input_int = OpTypePointer Input %int\n    %PerVertex = OpTypeStruct %v3float %v2float %v4float\n  %_ptr_Input_PerVertex = OpTypePointer Input %PerVertex\n          %vtx = OpVariable %_ptr_Input_PerVertex Input\n  %_ptr_Input_v2float = OpTypePointer Input %v2float\n    %float_0_5 = OpConstant %float 0.5\n  %_ptr_Input_v4float = OpTypePointer Input %v4float\n        %int_2 = OpConstant %int 2\n        %int_3 = OpConstant %int 3\n  %_ptr_Function_bool = OpTypePointer Function %bool\n  %mat4v4float = OpTypeMatrix %v4float 4\n  %UniformsPerFrame = OpTypeStruct %mat4v4float %mat4v4float %mat4v4float %int %int %v2float\n     %PerFrame = OpTypeStruct %UniformsPerFrame\n  %_ptr_Uniform_PerFrame = OpTypePointer Uniform %PerFrame\n            %_ = OpVariable %_ptr_Uniform_PerFrame Uniform\n  %_ptr_Uniform_int = OpTypePointer Uniform %int\n  %_ptr_Input_v3float = OpTypePointer Input %v3float\n  %float_n0_577350259 = OpConstant %float -0.577350259\n  %float_0_577350259 = OpConstant %float 0.577350259\n          %221 = OpConstantComposite %v3float %float_n0_577350259 %float_0_577350259\n  %float_0_577350259 %226 = OpConstantComposite %v3float %float_n0_577350259 %float_0_577350259\n  %float_n0_577350259 %235 = OpTypeImage %float Cube 0 0 0 1 Unknown %236 = OpTypeSampledImage %235\n  %_ptr_UniformConstant_236 = OpTypePointer UniformConstant %236\n  %texSkyboxIrradiance = OpVariable %_ptr_UniformConstant_236 UniformConstant\n  %float_0_959999979 = OpConstant %float 0.959999979\n          %245 = OpConstantComposite %v4float %float_0_959999979 %float_0_959999979\n  %float_0_959999979 %float_0_959999979\n  %_ptr_Output_v4float = OpTypePointer Output %v4float\n  %out_FragColor = OpVariable %_ptr_Output_v4float Output\n          %254 = OpConstantComposite %v3float %float_1 %float_1 %float_1\n         %main = OpFunction %void None %3\n            %5 = OpLabel\n        %alpha = OpVariable %_ptr_Function_v4float Function\n      %param_0 = OpVariable %_ptr_Function_uint Function\n      %param_1 = OpVariable %_ptr_Function_v2float Function\n           %Ka = OpVariable %_ptr_Function_v4float Function\n      %param_2 = OpVariable %_ptr_Function_uint Function\n      %param_3 = OpVariable %_ptr_Function_v2float Function\n           %Kd = OpVariable %_ptr_Function_v4float Function\n      %param_4 = OpVariable %_ptr_Function_uint Function\n      %param_5 = OpVariable %_ptr_Function_v2float Function\n  %drawNormals = OpVariable %_ptr_Function_bool Function\n            %n = OpVariable %_ptr_Function_v3float Function\n       %NdotL1 = OpVariable %_ptr_Function_float Function\n       %NdotL2 = OpVariable %_ptr_Function_float Function\n        %NdotL = OpVariable %_ptr_Function_float Function\n      %diffuse = OpVariable %_ptr_Function_v4float Function\n          %250 = OpVariable %_ptr_Function_v4float Function\n      %param_6 = OpVariable %_ptr_Function_v4float Function\n          %143 = OpAccessChain %_ptr_Input_int %mtl %int_4\n          %144 = OpLoad %int %143\n          %145 = OpBitcast %uint %144\n                 OpStore %param_0 %145\n          %152 = OpAccessChain %_ptr_Input_v2float %vtx %int_1\n          %153 = OpLoad %v2float %152\n                 OpStore %param_1 %153\n          %154 = OpFunctionCall %v4float %textureBindless2D_u1_vf2_ %param_0 %param_1\n                 OpStore %alpha %154\n          %155 = OpAccessChain %_ptr_Input_int %mtl %int_4\n          %156 = OpLoad %int %155\n          %157 = OpSGreaterThan %bool %156 %int_0\n                 OpSelectionMerge %159 None\n                 OpBranchConditional %157 %158 %159\n          %158 = OpLabel\n          %160 = OpAccessChain %_ptr_Function_float %alpha %uint_0\n          %161 = OpLoad %float %160\n          %163 = OpFOrdLessThan %bool %161 %float_0_5\n                 OpBranch %159\n          %159 = OpLabel\n          %164 = OpPhi %bool %157 %5 %163 %158\n                 OpSelectionMerge %166 None\n                 OpBranchConditional %164 %165 %166\n          %165 = OpLabel\n                 OpKill\n          %166 = OpLabel\n          %170 = OpAccessChain %_ptr_Input_v4float %mtl %int_0\n          %171 = OpLoad %v4float %170\n          %173 = OpAccessChain %_ptr_Input_int %mtl %int_2\n          %174 = OpLoad %int %173\n          %175 = OpBitcast %uint %174\n                 OpStore %param_2 %175\n          %178 = OpAccessChain %_ptr_Input_v2float %vtx %int_1\n          %179 = OpLoad %v2float %178\n                 OpStore %param_3 %179\n          %180 = OpFunctionCall %v4float %textureBindless2D_u1_vf2_ %param_2 %param_3\n          %181 = OpFMul %v4float %171 %180\n                 OpStore %Ka %181\n          %183 = OpAccessChain %_ptr_Input_v4float %mtl %int_1\n          %184 = OpLoad %v4float %183\n          %186 = OpAccessChain %_ptr_Input_int %mtl %int_3\n          %187 = OpLoad %int %186\n          %188 = OpBitcast %uint %187\n                 OpStore %param_4 %188\n          %191 = OpAccessChain %_ptr_Input_v2float %vtx %int_1\n          %192 = OpLoad %v2float %191\n                 OpStore %param_5 %192\n          %193 = OpFunctionCall %v4float %textureBindless2D_u1_vf2_ %param_4 %param_5\n          %194 = OpFMul %v4float %184 %193\n                 OpStore %Kd %194\n          %203 = OpAccessChain %_ptr_Uniform_int %_ %int_0 %int_3\n          %204 = OpLoad %int %203\n          %205 = OpSGreaterThan %bool %204 %int_0\n                 OpStore %drawNormals %205\n          %206 = OpAccessChain %_ptr_Function_float %Kd %uint_3\n          %207 = OpLoad %float %206\n          %208 = OpFOrdLessThan %bool %207 %float_0_5\n                 OpSelectionMerge %210 None\n                 OpBranchConditional %208 %209 %210\n          %209 = OpLabel\n                 OpKill\n          %210 = OpLabel\n          %214 = OpAccessChain %_ptr_Input_v3float %vtx %int_0\n          %215 = OpLoad %v3float %214\n          %216 = OpExtInst %v3float %1 Normalize %215\n                 OpStore %n %216\n          %218 = OpLoad %v3float %n\n          %222 = OpDot %float %218 %221\n          %223 = OpExtInst %float %1 FClamp %222 %float_0 %float_1\n                 OpStore %NdotL1 %223\n          %225 = OpLoad %v3float %n\n          %227 = OpDot %float %225 %226\n          %228 = OpExtInst %float %1 FClamp %227 %float_0 %float_1\n                 OpStore %NdotL2 %228\n          %230 = OpLoad %float %NdotL1\n          %231 = OpLoad %float %NdotL2\n          %232 = OpFAdd %float %230 %231\n          %233 = OpFMul %float %float_0_5 %232\n                 OpStore %NdotL %233\n          %239 = OpLoad %236 %texSkyboxIrradiance\n          %240 = OpLoad %v3float %n\n          %241 = OpImageSampleImplicitLod %v4float %239 %240\n          %242 = OpLoad %v4float %Kd\n          %243 = OpFMul %v4float %241 %242\n          %246 = OpFMul %v4float %243 %245\n                 OpStore %diffuse %246\n          %249 = OpLoad %bool %drawNormals\n                 OpSelectionMerge %252 None\n                 OpBranchConditional %249 %251 %261\n          %251 = OpLabel\n          %253 = OpLoad %v3float %n\n          %255 = OpFAdd %v3float %253 %254\n          %256 = OpVectorTimesScalar %v3float %255 %float_0_5\n          %257 = OpCompositeExtract %float %256 0\n          %258 = OpCompositeExtract %float %256 1\n          %259 = OpCompositeExtract %float %256 2\n          %260 = OpCompositeConstruct %v4float %257 %258 %259 %float_1\n                 OpStore %250 %260\n                 OpBranch %252\n          %261 = OpLabel\n          %262 = OpLoad %v4float %Ka\n          %263 = OpLoad %v4float %diffuse\n          %265 = OpAccessChain %_ptr_Input_v4float %vtx %int_2\n          %266 = OpLoad %v4float %265\n                 OpStore %param_6 %266\n          %267 = OpFunctionCall %float %shadow_vf4_ %param_6\n          %268 = OpVectorTimesScalar %v4float %263 %267\n          %269 = OpFAdd %v4float %262 %268\n                 OpStore %250 %269\n                 OpBranch %252\n          %252 = OpLabel\n          %270 = OpLoad %v4float %250\n                 OpStore %out_FragColor %270\n                 OpReturn\n                 OpFunctionEnd\n  %textureBindless2D_u1_vf2_ = OpFunction %v4float None %12\n    %textureid = OpFunctionParameter %_ptr_Function_uint\n           %uv = OpFunctionParameter %_ptr_Function_v2float\n           %16 = OpLabel\n                 OpReturnValue %29\n                 OpFunctionEnd\n    %PCF3_vf3_ = OpFunction %float None %19\n          %uvw = OpFunctionParameter %_ptr_Function_v3float\n           %22 = OpLabel\n         %size = OpVariable %_ptr_Function_float Function\n       %shadow = OpVariable %_ptr_Function_float Function\n            %v = OpVariable %_ptr_Function_int Function\n            %u = OpVariable %_ptr_Function_int Function\n           %38 = OpLoad %35 %texShadow\n           %41 = OpImage %34 %38\n           %43 = OpImageQuerySizeLod %v2int %41 %int_0\n           %45 = OpCompositeExtract %int %43 0\n           %46 = OpConvertSToF %float %45\n           %47 = OpFDiv %float %float_1 %46\n                 OpStore %size %47\n                 OpStore %shadow %float_0\n                 OpStore %v %int_n1\n                 OpBranch %53\n           %53 = OpLabel\n                 OpLoopMerge %55 %56 None\n                 OpBranch %57\n           %57 = OpLabel\n           %58 = OpLoad %int %v\n           %61 = OpSLessThanEqual %bool %58 %int_1\n                 OpBranchConditional %61 %54 %55\n           %54 = OpLabel\n                 OpStore %u %int_n1\n                 OpBranch %63\n           %63 = OpLabel\n                 OpLoopMerge %65 %66 None\n                 OpBranch %67\n           %67 = OpLabel\n           %68 = OpLoad %int %u\n           %69 = OpSLessThanEqual %bool %68 %int_1\n                 OpBranchConditional %69 %64 %65\n           %64 = OpLabel\n           %70 = OpLoad %35 %texShadow\n           %71 = OpLoad %v3float %uvw\n           %72 = OpLoad %float %size\n           %73 = OpLoad %int %u\n           %74 = OpConvertSToF %float %73\n           %75 = OpLoad %int %v\n           %76 = OpConvertSToF %float %75\n           %77 = OpCompositeConstruct %v3float %74 %76 %float_0\n           %78 = OpVectorTimesScalar %v3float %77 %72\n           %79 = OpFAdd %v3float %71 %78\n           %80 = OpCompositeExtract %float %79 2\n           %81 = OpImageSampleDrefImplicitLod %float %70 %79 %80\n           %82 = OpLoad %float %shadow\n           %83 = OpFAdd %float %82 %81\n                 OpStore %shadow %83\n                 OpBranch %66\n           %66 = OpLabel\n           %84 = OpLoad %int %u\n           %85 = OpIAdd %int %84 %int_1\n                 OpStore %u %85\n                 OpBranch %63\n           %65 = OpLabel\n                 OpBranch %56\n           %56 = OpLabel\n           %86 = OpLoad %int %v\n           %87 = OpIAdd %int %86 %int_1\n                 OpStore %v %87\n                 OpBranch %53\n           %55 = OpLabel\n           %88 = OpLoad %float %shadow\n           %90 = OpFDiv %float %88 %float_9\n                 OpReturnValue %90\n                 OpFunctionEnd\n  %shadow_vf4_ = OpFunction %float None %24\n            %s = OpFunctionParameter %_ptr_Function_v4float\n           %27 = OpLabel\n    %depthBias = OpVariable %_ptr_Function_float Function\n  %shadowSample = OpVariable %_ptr_Function_float Function\n        %param = OpVariable %_ptr_Function_v3float Function\n           %93 = OpLoad %v4float %s\n           %95 = OpAccessChain %_ptr_Function_float %s %uint_3\n           %96 = OpLoad %float %95\n           %97 = OpCompositeConstruct %v4float %96 %96 %96 %96\n           %98 = OpFDiv %v4float %93 %97\n                 OpStore %s %98\n          %100 = OpAccessChain %_ptr_Function_float %s %uint_2\n          %101 = OpLoad %float %100\n          %103 = OpFOrdGreaterThan %bool %101 %float_n1\n                 OpSelectionMerge %105 None\n                 OpBranchConditional %103 %104 %105\n          %104 = OpLabel\n          %106 = OpAccessChain %_ptr_Function_float %s %uint_2\n          %107 = OpLoad %float %106\n          %108 = OpFOrdLessThan %bool %107 %float_1\n                 OpBranch %105\n          %105 = OpLabel\n          %109 = OpPhi %bool %103 %27 %108 %104\n                 OpSelectionMerge %111 None\n                 OpBranchConditional %109 %110 %111\n          %110 = OpLabel\n                 OpStore %depthBias %float_n4_99999987en05\n          %115 = OpAccessChain %_ptr_Function_float %s %uint_1\n          %116 = OpLoad %float %115\n          %117 = OpFSub %float %float_1 %116\n          %118 = OpAccessChain %_ptr_Function_float %s %uint_1\n                 OpStore %118 %117\n          %120 = OpAccessChain %_ptr_Function_float %s %uint_0\n          %121 = OpLoad %float %120\n          %122 = OpAccessChain %_ptr_Function_float %s %uint_1\n          %123 = OpLoad %float %122\n          %124 = OpAccessChain %_ptr_Function_float %s %uint_2\n          %125 = OpLoad %float %124\n          %126 = OpLoad %float %depthBias\n          %127 = OpFAdd %float %125 %126\n          %128 = OpCompositeConstruct %v3float %121 %123 %127\n                 OpStore %param %128\n          %130 = OpFunctionCall %float %PCF3_vf3_ %param\n                 OpStore %shadowSample %130\n          %132 = OpLoad %float %shadowSample\n          %133 = OpExtInst %float %1 FMix %float_0_300000012 %float_1 %132\n                 OpReturnValue %133\n          %111 = OpLabel\n                 OpReturnValue %float_1\n                 OpFunctionEnd\n  */\n\n  static const std::vector<uint32_t> kTinyMeshFragmentShader = {\n      0x07230203, 0x00010000, 0xdeadbeef, 0x00000106, 0x00000000, 0x00020011, 0x00000001,\n      0x00020011, 0x00000032, 0x0006000b, 0x00000001, 0x4c534c47, 0x6474732e, 0x3035342e,\n      0x00000000, 0x0003000e, 0x00000000, 0x00000001, 0x0008000f, 0x00000004, 0x00000002,\n      0x6e69616d, 0x00000000, 0x00000003, 0x00000004, 0x00000005, 0x00030010, 0x00000002,\n      0x00000007, 0x00030003, 0x00000002, 0x000001cc, 0x00040005, 0x00000002, 0x6e69616d,\n      0x00000000, 0x00090005, 0x00000006, 0x74786574, 0x42657275, 0x6c646e69, 0x32737365,\n      0x31752844, 0x3266763b, 0x0000003b, 0x00050005, 0x00000007, 0x74786574, 0x69657275,\n      0x00000064, 0x00030005, 0x00000008, 0x00007675, 0x00050005, 0x00000009, 0x33464350,\n      0x33667628, 0x0000003b, 0x00030005, 0x0000000a, 0x00777675, 0x00050005, 0x0000000b,\n      0x64616873, 0x7628776f, 0x003b3466, 0x00030005, 0x0000000c, 0x00000073, 0x00040005,\n      0x0000000d, 0x657a6973, 0x00000000, 0x00050005, 0x0000000e, 0x53786574, 0x6f646168,\n      0x00000077, 0x00040005, 0x0000000f, 0x64616873, 0x0000776f, 0x00030005, 0x00000010,\n      0x00000076, 0x00030005, 0x00000011, 0x00000075, 0x00050005, 0x00000012, 0x74706564,\n      0x61694268, 0x00000073, 0x00060005, 0x00000013, 0x64616873, 0x6153776f, 0x656c706d,\n      0x00000000, 0x00040005, 0x00000014, 0x61726170, 0x0000006d, 0x00040005, 0x00000015,\n      0x68706c61, 0x00000061, 0x00050005, 0x00000016, 0x6574614d, 0x6c616972, 0x00000000,\n      0x00050006, 0x00000016, 0x00000000, 0x69626d61, 0x00746e65, 0x00050006, 0x00000016,\n      0x00000001, 0x66666964, 0x00657375, 0x00060006, 0x00000016, 0x00000002, 0x41786574,\n      0x6569626d, 0x0000746e, 0x00060006, 0x00000016, 0x00000003, 0x44786574, 0x75666669,\n      0x00006573, 0x00060006, 0x00000016, 0x00000004, 0x41786574, 0x6168706c, 0x00000000,\n      0x00050006, 0x00000016, 0x00000005, 0x64646170, 0x00676e69, 0x00030005, 0x00000003,\n      0x006c746d, 0x00050005, 0x00000017, 0x56726550, 0x65747265, 0x00000078, 0x00050006,\n      0x00000017, 0x00000000, 0x6d726f6e, 0x00006c61, 0x00040006, 0x00000017, 0x00000001,\n      0x00007675, 0x00070006, 0x00000017, 0x00000002, 0x64616873, 0x6f43776f, 0x7364726f,\n      0x00000000, 0x00030005, 0x00000004, 0x00787476, 0x00040005, 0x00000018, 0x61726170,\n      0x0000006d, 0x00040005, 0x00000019, 0x61726170, 0x0000006d, 0x00030005, 0x0000001a,\n      0x0000614b, 0x00040005, 0x0000001b, 0x61726170, 0x0000006d, 0x00040005, 0x0000001c,\n      0x61726170, 0x0000006d, 0x00030005, 0x0000001d, 0x0000644b, 0x00040005, 0x0000001e,\n      0x61726170, 0x0000006d, 0x00040005, 0x0000001f, 0x61726170, 0x0000006d, 0x00050005,\n      0x00000020, 0x77617264, 0x6d726f4e, 0x00736c61, 0x00070005, 0x00000021, 0x66696e55,\n      0x736d726f, 0x46726550, 0x656d6172, 0x00000000, 0x00050006, 0x00000021, 0x00000000,\n      0x6a6f7270, 0x00000000, 0x00050006, 0x00000021, 0x00000001, 0x77656976, 0x00000000,\n      0x00050006, 0x00000021, 0x00000002, 0x6867696c, 0x00000074, 0x00070006, 0x00000021,\n      0x00000003, 0x61724462, 0x726f4e77, 0x736c616d, 0x00000000, 0x00060006, 0x00000021,\n      0x00000004, 0x62654462, 0x694c6775, 0x0073656e, 0x00050006, 0x00000021, 0x00000005,\n      0x64646170, 0x00676e69, 0x00050005, 0x00000022, 0x46726550, 0x656d6172, 0x00000000,\n      0x00060006, 0x00000022, 0x00000000, 0x46726570, 0x656d6172, 0x00000000, 0x00030005,\n      0x00000023, 0x00000000, 0x00030005, 0x00000024, 0x0000006e, 0x00040005, 0x00000025,\n      0x746f644e, 0x0000314c, 0x00040005, 0x00000026, 0x746f644e, 0x0000324c, 0x00040005,\n      0x00000027, 0x746f644e, 0x0000004c, 0x00040005, 0x00000028, 0x66666964, 0x00657375,\n      0x00070005, 0x00000029, 0x53786574, 0x6f62796b, 0x72724978, 0x61696461, 0x0065636e,\n      0x00060005, 0x00000005, 0x5f74756f, 0x67617246, 0x6f6c6f43, 0x00000072, 0x00040005,\n      0x0000002a, 0x61726170, 0x0000006d, 0x00040047, 0x0000000e, 0x00000022, 0x00000000,\n      0x00040047, 0x0000000e, 0x00000021, 0x00000000, 0x00030047, 0x00000003, 0x0000000e,\n      0x00040047, 0x00000003, 0x0000001e, 0x00000005, 0x00040047, 0x00000004, 0x0000001e,\n      0x00000000, 0x00040048, 0x00000021, 0x00000000, 0x00000005, 0x00050048, 0x00000021,\n      0x00000000, 0x00000023, 0x00000000, 0x00050048, 0x00000021, 0x00000000, 0x00000007,\n      0x00000010, 0x00040048, 0x00000021, 0x00000001, 0x00000005, 0x00050048, 0x00000021,\n      0x00000001, 0x00000023, 0x00000040, 0x00050048, 0x00000021, 0x00000001, 0x00000007,\n      0x00000010, 0x00040048, 0x00000021, 0x00000002, 0x00000005, 0x00050048, 0x00000021,\n      0x00000002, 0x00000023, 0x00000080, 0x00050048, 0x00000021, 0x00000002, 0x00000007,\n      0x00000010, 0x00050048, 0x00000021, 0x00000003, 0x00000023, 0x000000c0, 0x00050048,\n      0x00000021, 0x00000004, 0x00000023, 0x000000c4, 0x00050048, 0x00000021, 0x00000005,\n      0x00000023, 0x000000c8, 0x00050048, 0x00000022, 0x00000000, 0x00000023, 0x00000000,\n      0x00030047, 0x00000022, 0x00000002, 0x00040047, 0x00000023, 0x00000022, 0x00000001,\n      0x00040047, 0x00000023, 0x00000021, 0x00000000, 0x00040047, 0x00000029, 0x00000022,\n      0x00000000, 0x00040047, 0x00000029, 0x00000021, 0x00000004, 0x00040047, 0x00000005,\n      0x0000001e, 0x00000000, 0x00020013, 0x0000002b, 0x00030021, 0x0000002c, 0x0000002b,\n      0x00040015, 0x0000002d, 0x00000020, 0x00000000, 0x00040020, 0x0000002e, 0x00000007,\n      0x0000002d, 0x00030016, 0x0000002f, 0x00000020, 0x00040017, 0x00000030, 0x0000002f,\n      0x00000002, 0x00040020, 0x00000031, 0x00000007, 0x00000030, 0x00040017, 0x00000032,\n      0x0000002f, 0x00000004, 0x00050021, 0x00000033, 0x00000032, 0x0000002e, 0x00000031,\n      0x00040017, 0x00000034, 0x0000002f, 0x00000003, 0x00040020, 0x00000035, 0x00000007,\n      0x00000034, 0x00040021, 0x00000036, 0x0000002f, 0x00000035, 0x00040020, 0x00000037,\n      0x00000007, 0x00000032, 0x00040021, 0x00000038, 0x0000002f, 0x00000037, 0x0003002b,\n      0x0000002f, 0x00000039, 0x0007002c, 0x00000032, 0x0000003a, 0x00000039, 0x00000039,\n      0x00000039, 0x00000039, 0x00040020, 0x0000003b, 0x00000007, 0x0000002f, 0x00090019,\n      0x0000003c, 0x0000002f, 0x00000001, 0x00000001, 0x00000000, 0x00000000, 0x00000001,\n      0x00000000, 0x0003001b, 0x0000003d, 0x0000003c, 0x00040020, 0x0000003e, 0x00000000,\n      0x0000003d, 0x0004003b, 0x0000003e, 0x0000000e, 0x00000000, 0x00040015, 0x0000003f,\n      0x00000020, 0x00000001, 0x0004002b, 0x0000003f, 0x00000040, 0x00000000, 0x00040017,\n      0x00000041, 0x0000003f, 0x00000002, 0x0004002b, 0x0000002d, 0x00000042, 0x00000000,\n      0x0003002b, 0x0000002f, 0x00000043, 0x00040020, 0x00000044, 0x00000007, 0x0000003f,\n      0x0004002b, 0x0000003f, 0x00000045, 0xffffffff, 0x0004002b, 0x0000003f, 0x00000046,\n      0x00000001, 0x00020014, 0x00000047, 0x0003002b, 0x0000002f, 0x00000048, 0x0004002b,\n      0x0000002d, 0x00000049, 0x00000003, 0x0004002b, 0x0000002d, 0x0000004a, 0x00000002,\n      0x0003002b, 0x0000002f, 0x0000004b, 0x0004002b, 0x0000002f, 0x0000004c, 0xb851b717,\n      0x0004002b, 0x0000002d, 0x0000004d, 0x00000001, 0x0004002b, 0x0000002f, 0x0000004e,\n      0x3e99999a, 0x0008001e, 0x00000016, 0x00000032, 0x00000032, 0x0000003f, 0x0000003f,\n      0x0000003f, 0x0000003f, 0x00040020, 0x0000004f, 0x00000001, 0x00000016, 0x0004003b,\n      0x0000004f, 0x00000003, 0x00000001, 0x0004002b, 0x0000003f, 0x00000050, 0x00000004,\n      0x00040020, 0x00000051, 0x00000001, 0x0000003f, 0x0005001e, 0x00000017, 0x00000034,\n      0x00000030, 0x00000032, 0x00040020, 0x00000052, 0x00000001, 0x00000017, 0x0004003b,\n      0x00000052, 0x00000004, 0x00000001, 0x00040020, 0x00000053, 0x00000001, 0x00000030,\n      0x0004002b, 0x0000002f, 0x00000054, 0x3f000000, 0x00040020, 0x00000055, 0x00000001,\n      0x00000032, 0x0004002b, 0x0000003f, 0x00000056, 0x00000002, 0x0004002b, 0x0000003f,\n      0x00000057, 0x00000003, 0x00040020, 0x00000058, 0x00000007, 0x00000047, 0x00040018,\n      0x00000059, 0x00000032, 0x00000004, 0x0008001e, 0x00000021, 0x00000059, 0x00000059,\n      0x00000059, 0x0000003f, 0x0000003f, 0x00000030, 0x0003001e, 0x00000022, 0x00000021,\n      0x00040020, 0x0000005a, 0x00000002, 0x00000022, 0x0004003b, 0x0000005a, 0x00000023,\n      0x00000002, 0x00040020, 0x0000005b, 0x00000002, 0x0000003f, 0x00040020, 0x0000005c,\n      0x00000001, 0x00000034, 0x0004002b, 0x0000002f, 0x0000005d, 0xbf13cd3a, 0x0004002b,\n      0x0000002f, 0x0000005e, 0x3f13cd3a, 0x0006002c, 0x00000034, 0x0000005f, 0x0000005d,\n      0x0000005e, 0x0000005e, 0x0006002c, 0x00000034, 0x00000060, 0x0000005d, 0x0000005e,\n      0x0000005d, 0x00090019, 0x00000061, 0x0000002f, 0x00000003, 0x00000000, 0x00000000,\n      0x00000000, 0x00000001, 0x00000000, 0x0003001b, 0x00000062, 0x00000061, 0x00040020,\n      0x00000063, 0x00000000, 0x00000062, 0x0004003b, 0x00000063, 0x00000029, 0x00000000,\n      0x0004002b, 0x0000002f, 0x00000064, 0x3f75c28f, 0x0007002c, 0x00000032, 0x00000065,\n      0x00000064, 0x00000064, 0x00000064, 0x00000064, 0x00040020, 0x00000066, 0x00000003,\n      0x00000032, 0x0004003b, 0x00000066, 0x00000005, 0x00000003, 0x0006002c, 0x00000034,\n      0x00000067, 0x00000039, 0x00000039, 0x00000039, 0x00050036, 0x0000002b, 0x00000002,\n      0x00000000, 0x0000002c, 0x000200f8, 0x00000068, 0x0004003b, 0x00000037, 0x00000015,\n      0x00000007, 0x0004003b, 0x0000002e, 0x00000018, 0x00000007, 0x0004003b, 0x00000031,\n      0x00000019, 0x00000007, 0x0004003b, 0x00000037, 0x0000001a, 0x00000007, 0x0004003b,\n      0x0000002e, 0x0000001b, 0x00000007, 0x0004003b, 0x00000031, 0x0000001c, 0x00000007,\n      0x0004003b, 0x00000037, 0x0000001d, 0x00000007, 0x0004003b, 0x0000002e, 0x0000001e,\n      0x00000007, 0x0004003b, 0x00000031, 0x0000001f, 0x00000007, 0x0004003b, 0x00000058,\n      0x00000020, 0x00000007, 0x0004003b, 0x00000035, 0x00000024, 0x00000007, 0x0004003b,\n      0x0000003b, 0x00000025, 0x00000007, 0x0004003b, 0x0000003b, 0x00000026, 0x00000007,\n      0x0004003b, 0x0000003b, 0x00000027, 0x00000007, 0x0004003b, 0x00000037, 0x00000028,\n      0x00000007, 0x0004003b, 0x00000037, 0x00000069, 0x00000007, 0x0004003b, 0x00000037,\n      0x0000002a, 0x00000007, 0x00050041, 0x00000051, 0x0000006a, 0x00000003, 0x00000050,\n      0x0004003d, 0x0000003f, 0x0000006b, 0x0000006a, 0x0004007c, 0x0000002d, 0x0000006c,\n      0x0000006b, 0x0003003e, 0x00000018, 0x0000006c, 0x00050041, 0x00000053, 0x0000006d,\n      0x00000004, 0x00000046, 0x0004003d, 0x00000030, 0x0000006e, 0x0000006d, 0x0003003e,\n      0x00000019, 0x0000006e, 0x00060039, 0x00000032, 0x0000006f, 0x00000006, 0x00000018,\n      0x00000019, 0x0003003e, 0x00000015, 0x0000006f, 0x00050041, 0x00000051, 0x00000070,\n      0x00000003, 0x00000050, 0x0004003d, 0x0000003f, 0x00000071, 0x00000070, 0x000500ad,\n      0x00000047, 0x00000072, 0x00000071, 0x00000040, 0x000300f7, 0x00000073, 0x00000000,\n      0x000400fa, 0x00000072, 0x00000074, 0x00000073, 0x000200f8, 0x00000074, 0x00050041,\n      0x0000003b, 0x00000075, 0x00000015, 0x00000042, 0x0004003d, 0x0000002f, 0x00000076,\n      0x00000075, 0x000500b8, 0x00000047, 0x00000077, 0x00000076, 0x00000054, 0x000200f9,\n      0x00000073, 0x000200f8, 0x00000073, 0x000700f5, 0x00000047, 0x00000078, 0x00000072,\n      0x00000068, 0x00000077, 0x00000074, 0x000300f7, 0x00000079, 0x00000000, 0x000400fa,\n      0x00000078, 0x0000007a, 0x00000079, 0x000200f8, 0x0000007a, 0x000100fc, 0x000200f8,\n      0x00000079, 0x00050041, 0x00000055, 0x0000007b, 0x00000003, 0x00000040, 0x0004003d,\n      0x00000032, 0x0000007c, 0x0000007b, 0x00050041, 0x00000051, 0x0000007d, 0x00000003,\n      0x00000056, 0x0004003d, 0x0000003f, 0x0000007e, 0x0000007d, 0x0004007c, 0x0000002d,\n      0x0000007f, 0x0000007e, 0x0003003e, 0x0000001b, 0x0000007f, 0x00050041, 0x00000053,\n      0x00000080, 0x00000004, 0x00000046, 0x0004003d, 0x00000030, 0x00000081, 0x00000080,\n      0x0003003e, 0x0000001c, 0x00000081, 0x00060039, 0x00000032, 0x00000082, 0x00000006,\n      0x0000001b, 0x0000001c, 0x00050085, 0x00000032, 0x00000083, 0x0000007c, 0x00000082,\n      0x0003003e, 0x0000001a, 0x00000083, 0x00050041, 0x00000055, 0x00000084, 0x00000003,\n      0x00000046, 0x0004003d, 0x00000032, 0x00000085, 0x00000084, 0x00050041, 0x00000051,\n      0x00000086, 0x00000003, 0x00000057, 0x0004003d, 0x0000003f, 0x00000087, 0x00000086,\n      0x0004007c, 0x0000002d, 0x00000088, 0x00000087, 0x0003003e, 0x0000001e, 0x00000088,\n      0x00050041, 0x00000053, 0x00000089, 0x00000004, 0x00000046, 0x0004003d, 0x00000030,\n      0x0000008a, 0x00000089, 0x0003003e, 0x0000001f, 0x0000008a, 0x00060039, 0x00000032,\n      0x0000008b, 0x00000006, 0x0000001e, 0x0000001f, 0x00050085, 0x00000032, 0x0000008c,\n      0x00000085, 0x0000008b, 0x0003003e, 0x0000001d, 0x0000008c, 0x00060041, 0x0000005b,\n      0x0000008d, 0x00000023, 0x00000040, 0x00000057, 0x0004003d, 0x0000003f, 0x0000008e,\n      0x0000008d, 0x000500ad, 0x00000047, 0x0000008f, 0x0000008e, 0x00000040, 0x0003003e,\n      0x00000020, 0x0000008f, 0x00050041, 0x0000003b, 0x00000090, 0x0000001d, 0x00000049,\n      0x0004003d, 0x0000002f, 0x00000091, 0x00000090, 0x000500b8, 0x00000047, 0x00000092,\n      0x00000091, 0x00000054, 0x000300f7, 0x00000093, 0x00000000, 0x000400fa, 0x00000092,\n      0x00000094, 0x00000093, 0x000200f8, 0x00000094, 0x000100fc, 0x000200f8, 0x00000093,\n      0x00050041, 0x0000005c, 0x00000095, 0x00000004, 0x00000040, 0x0004003d, 0x00000034,\n      0x00000096, 0x00000095, 0x0006000c, 0x00000034, 0x00000097, 0x00000001, 0x00000045,\n      0x00000096, 0x0003003e, 0x00000024, 0x00000097, 0x0004003d, 0x00000034, 0x00000098,\n      0x00000024, 0x00050094, 0x0000002f, 0x00000099, 0x00000098, 0x0000005f, 0x0008000c,\n      0x0000002f, 0x0000009a, 0x00000001, 0x0000002b, 0x00000099, 0x00000043, 0x00000039,\n      0x0003003e, 0x00000025, 0x0000009a, 0x0004003d, 0x00000034, 0x0000009b, 0x00000024,\n      0x00050094, 0x0000002f, 0x0000009c, 0x0000009b, 0x00000060, 0x0008000c, 0x0000002f,\n      0x0000009d, 0x00000001, 0x0000002b, 0x0000009c, 0x00000043, 0x00000039, 0x0003003e,\n      0x00000026, 0x0000009d, 0x0004003d, 0x0000002f, 0x0000009e, 0x00000025, 0x0004003d,\n      0x0000002f, 0x0000009f, 0x00000026, 0x00050081, 0x0000002f, 0x000000a0, 0x0000009e,\n      0x0000009f, 0x00050085, 0x0000002f, 0x000000a1, 0x00000054, 0x000000a0, 0x0003003e,\n      0x00000027, 0x000000a1, 0x0004003d, 0x00000062, 0x000000a2, 0x00000029, 0x0004003d,\n      0x00000034, 0x000000a3, 0x00000024, 0x00050057, 0x00000032, 0x000000a4, 0x000000a2,\n      0x000000a3, 0x0004003d, 0x00000032, 0x000000a5, 0x0000001d, 0x00050085, 0x00000032,\n      0x000000a6, 0x000000a4, 0x000000a5, 0x00050085, 0x00000032, 0x000000a7, 0x000000a6,\n      0x00000065, 0x0003003e, 0x00000028, 0x000000a7, 0x0004003d, 0x00000047, 0x000000a8,\n      0x00000020, 0x000300f7, 0x000000a9, 0x00000000, 0x000400fa, 0x000000a8, 0x000000aa,\n      0x000000ab, 0x000200f8, 0x000000aa, 0x0004003d, 0x00000034, 0x000000ac, 0x00000024,\n      0x00050081, 0x00000034, 0x000000ad, 0x000000ac, 0x00000067, 0x0005008e, 0x00000034,\n      0x000000ae, 0x000000ad, 0x00000054, 0x00050051, 0x0000002f, 0x000000af, 0x000000ae,\n      0x00000000, 0x00050051, 0x0000002f, 0x000000b0, 0x000000ae, 0x00000001, 0x00050051,\n      0x0000002f, 0x000000b1, 0x000000ae, 0x00000002, 0x00070050, 0x00000032, 0x000000b2,\n      0x000000af, 0x000000b0, 0x000000b1, 0x00000039, 0x0003003e, 0x00000069, 0x000000b2,\n      0x000200f9, 0x000000a9, 0x000200f8, 0x000000ab, 0x0004003d, 0x00000032, 0x000000b3,\n      0x0000001a, 0x0004003d, 0x00000032, 0x000000b4, 0x00000028, 0x00050041, 0x00000055,\n      0x000000b5, 0x00000004, 0x00000056, 0x0004003d, 0x00000032, 0x000000b6, 0x000000b5,\n      0x0003003e, 0x0000002a, 0x000000b6, 0x00050039, 0x0000002f, 0x000000b7, 0x0000000b,\n      0x0000002a, 0x0005008e, 0x00000032, 0x000000b8, 0x000000b4, 0x000000b7, 0x00050081,\n      0x00000032, 0x000000b9, 0x000000b3, 0x000000b8, 0x0003003e, 0x00000069, 0x000000b9,\n      0x000200f9, 0x000000a9, 0x000200f8, 0x000000a9, 0x0004003d, 0x00000032, 0x000000ba,\n      0x00000069, 0x0003003e, 0x00000005, 0x000000ba, 0x000100fd, 0x00010038, 0x00050036,\n      0x00000032, 0x00000006, 0x00000000, 0x00000033, 0x00030037, 0x0000002e, 0x00000007,\n      0x00030037, 0x00000031, 0x00000008, 0x000200f8, 0x000000bb, 0x000200fe, 0x0000003a,\n      0x00010038, 0x00050036, 0x0000002f, 0x00000009, 0x00000000, 0x00000036, 0x00030037,\n      0x00000035, 0x0000000a, 0x000200f8, 0x000000bc, 0x0004003b, 0x0000003b, 0x0000000d,\n      0x00000007, 0x0004003b, 0x0000003b, 0x0000000f, 0x00000007, 0x0004003b, 0x00000044,\n      0x00000010, 0x00000007, 0x0004003b, 0x00000044, 0x00000011, 0x00000007, 0x0004003d,\n      0x0000003d, 0x000000bd, 0x0000000e, 0x00040064, 0x0000003c, 0x000000be, 0x000000bd,\n      0x00050067, 0x00000041, 0x000000bf, 0x000000be, 0x00000040, 0x00050051, 0x0000003f,\n      0x000000c0, 0x000000bf, 0x00000000, 0x0004006f, 0x0000002f, 0x000000c1, 0x000000c0,\n      0x00050088, 0x0000002f, 0x000000c2, 0x00000039, 0x000000c1, 0x0003003e, 0x0000000d,\n      0x000000c2, 0x0003003e, 0x0000000f, 0x00000043, 0x0003003e, 0x00000010, 0x00000045,\n      0x000200f9, 0x000000c3, 0x000200f8, 0x000000c3, 0x000400f6, 0x000000c4, 0x000000c5,\n      0x00000000, 0x000200f9, 0x000000c6, 0x000200f8, 0x000000c6, 0x0004003d, 0x0000003f,\n      0x000000c7, 0x00000010, 0x000500b3, 0x00000047, 0x000000c8, 0x000000c7, 0x00000046,\n      0x000400fa, 0x000000c8, 0x000000c9, 0x000000c4, 0x000200f8, 0x000000c9, 0x0003003e,\n      0x00000011, 0x00000045, 0x000200f9, 0x000000ca, 0x000200f8, 0x000000ca, 0x000400f6,\n      0x000000cb, 0x000000cc, 0x00000000, 0x000200f9, 0x000000cd, 0x000200f8, 0x000000cd,\n      0x0004003d, 0x0000003f, 0x000000ce, 0x00000011, 0x000500b3, 0x00000047, 0x000000cf,\n      0x000000ce, 0x00000046, 0x000400fa, 0x000000cf, 0x000000d0, 0x000000cb, 0x000200f8,\n      0x000000d0, 0x0004003d, 0x0000003d, 0x000000d1, 0x0000000e, 0x0004003d, 0x00000034,\n      0x000000d2, 0x0000000a, 0x0004003d, 0x0000002f, 0x000000d3, 0x0000000d, 0x0004003d,\n      0x0000003f, 0x000000d4, 0x00000011, 0x0004006f, 0x0000002f, 0x000000d5, 0x000000d4,\n      0x0004003d, 0x0000003f, 0x000000d6, 0x00000010, 0x0004006f, 0x0000002f, 0x000000d7,\n      0x000000d6, 0x00060050, 0x00000034, 0x000000d8, 0x000000d5, 0x000000d7, 0x00000043,\n      0x0005008e, 0x00000034, 0x000000d9, 0x000000d8, 0x000000d3, 0x00050081, 0x00000034,\n      0x000000da, 0x000000d2, 0x000000d9, 0x00050051, 0x0000002f, 0x000000db, 0x000000da,\n      0x00000002, 0x00060059, 0x0000002f, 0x000000dc, 0x000000d1, 0x000000da, 0x000000db,\n      0x0004003d, 0x0000002f, 0x000000dd, 0x0000000f, 0x00050081, 0x0000002f, 0x000000de,\n      0x000000dd, 0x000000dc, 0x0003003e, 0x0000000f, 0x000000de, 0x000200f9, 0x000000cc,\n      0x000200f8, 0x000000cc, 0x0004003d, 0x0000003f, 0x000000df, 0x00000011, 0x00050080,\n      0x0000003f, 0x000000e0, 0x000000df, 0x00000046, 0x0003003e, 0x00000011, 0x000000e0,\n      0x000200f9, 0x000000ca, 0x000200f8, 0x000000cb, 0x000200f9, 0x000000c5, 0x000200f8,\n      0x000000c5, 0x0004003d, 0x0000003f, 0x000000e1, 0x00000010, 0x00050080, 0x0000003f,\n      0x000000e2, 0x000000e1, 0x00000046, 0x0003003e, 0x00000010, 0x000000e2, 0x000200f9,\n      0x000000c3, 0x000200f8, 0x000000c4, 0x0004003d, 0x0000002f, 0x000000e3, 0x0000000f,\n      0x00050088, 0x0000002f, 0x000000e4, 0x000000e3, 0x00000048, 0x000200fe, 0x000000e4,\n      0x00010038, 0x00050036, 0x0000002f, 0x0000000b, 0x00000000, 0x00000038, 0x00030037,\n      0x00000037, 0x0000000c, 0x000200f8, 0x000000e5, 0x0004003b, 0x0000003b, 0x00000012,\n      0x00000007, 0x0004003b, 0x0000003b, 0x00000013, 0x00000007, 0x0004003b, 0x00000035,\n      0x00000014, 0x00000007, 0x0004003d, 0x00000032, 0x000000e6, 0x0000000c, 0x00050041,\n      0x0000003b, 0x000000e7, 0x0000000c, 0x00000049, 0x0004003d, 0x0000002f, 0x000000e8,\n      0x000000e7, 0x00070050, 0x00000032, 0x000000e9, 0x000000e8, 0x000000e8, 0x000000e8,\n      0x000000e8, 0x00050088, 0x00000032, 0x000000ea, 0x000000e6, 0x000000e9, 0x0003003e,\n      0x0000000c, 0x000000ea, 0x00050041, 0x0000003b, 0x000000eb, 0x0000000c, 0x0000004a,\n      0x0004003d, 0x0000002f, 0x000000ec, 0x000000eb, 0x000500ba, 0x00000047, 0x000000ed,\n      0x000000ec, 0x0000004b, 0x000300f7, 0x000000ee, 0x00000000, 0x000400fa, 0x000000ed,\n      0x000000ef, 0x000000ee, 0x000200f8, 0x000000ef, 0x00050041, 0x0000003b, 0x000000f0,\n      0x0000000c, 0x0000004a, 0x0004003d, 0x0000002f, 0x000000f1, 0x000000f0, 0x000500b8,\n      0x00000047, 0x000000f2, 0x000000f1, 0x00000039, 0x000200f9, 0x000000ee, 0x000200f8,\n      0x000000ee, 0x000700f5, 0x00000047, 0x000000f3, 0x000000ed, 0x000000e5, 0x000000f2,\n      0x000000ef, 0x000300f7, 0x000000f4, 0x00000000, 0x000400fa, 0x000000f3, 0x000000f5,\n      0x000000f4, 0x000200f8, 0x000000f5, 0x0003003e, 0x00000012, 0x0000004c, 0x00050041,\n      0x0000003b, 0x000000f6, 0x0000000c, 0x0000004d, 0x0004003d, 0x0000002f, 0x000000f7,\n      0x000000f6, 0x00050083, 0x0000002f, 0x000000f8, 0x00000039, 0x000000f7, 0x00050041,\n      0x0000003b, 0x000000f9, 0x0000000c, 0x0000004d, 0x0003003e, 0x000000f9, 0x000000f8,\n      0x00050041, 0x0000003b, 0x000000fa, 0x0000000c, 0x00000042, 0x0004003d, 0x0000002f,\n      0x000000fb, 0x000000fa, 0x00050041, 0x0000003b, 0x000000fc, 0x0000000c, 0x0000004d,\n      0x0004003d, 0x0000002f, 0x000000fd, 0x000000fc, 0x00050041, 0x0000003b, 0x000000fe,\n      0x0000000c, 0x0000004a, 0x0004003d, 0x0000002f, 0x000000ff, 0x000000fe, 0x0004003d,\n      0x0000002f, 0x00000100, 0x00000012, 0x00050081, 0x0000002f, 0x00000101, 0x000000ff,\n      0x00000100, 0x00060050, 0x00000034, 0x00000102, 0x000000fb, 0x000000fd, 0x00000101,\n      0x0003003e, 0x00000014, 0x00000102, 0x00050039, 0x0000002f, 0x00000103, 0x00000009,\n      0x00000014, 0x0003003e, 0x00000013, 0x00000103, 0x0004003d, 0x0000002f, 0x00000104,\n      0x00000013, 0x0008000c, 0x0000002f, 0x00000105, 0x00000001, 0x0000002e, 0x0000004e,\n      0x00000039, 0x00000104, 0x000200fe, 0x00000105, 0x000200f8, 0x000000f4, 0x000200fe,\n      0x00000039, 0x00010038};\n  return kTinyMeshFragmentShader;\n}\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/util/SpvModules.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <vector>\n\nnamespace igl::tests {\n\n// A collection of SPIR-V modules useful for testing. Disassembly can be see in the .cpp file for\n// clarity.\n\nconst std::vector<uint32_t>& getUniformBufferSpvWords();\nconst std::vector<uint32_t>& getTextureSpvWords();\nconst std::vector<uint32_t>& getTextureWithDescriptorSetSpvWords();\nconst std::vector<uint32_t>& getTinyMeshFragmentShaderSpvWords();\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/util/TestDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"TestDevice.h\"\n\n#include <igl/Device.h>\n#include <igl/tests/util/device/TestDevice.h>\n\nnamespace igl::tests::util {\n\n//\n// createTestDevice\n//\n// Used by clients to get an IGL device. The backend is determined by the IGL_BACKEND_TYPE compiler\n// flag in the BUCK file. For OpenGL ES, the GLES version is determined by the\n// IGL_UNIT_TESTS_GLES_VERSION compiler flag.\n//\nstd::shared_ptr<IDevice> createTestDevice() {\n  const std::string backend(IGL_BACKEND_TYPE);\n\n  if (backend == \"ogl\") {\n#ifdef IGL_UNIT_TESTS_GLES_VERSION\n    return tests::util::device::createTestDevice(::igl::BackendType::OpenGL,\n                                                 {.requestedOpenGLBackendVersion = BackendVersion{\n                                                      .flavor = BackendFlavor::OpenGL_ES,\n                                                      .majorVersion = IGL_UNIT_TESTS_GLES_VERSION,\n                                                      .minorVersion = 0,\n                                                  }});\n#else\n    return tests::util::device::createTestDevice(::igl::BackendType::OpenGL);\n#endif\n  } else if (backend == \"metal\") {\n    return device::createTestDevice(::igl::BackendType::Metal);\n  } else if (backend == \"vulkan\") {\n    return device::createTestDevice(::igl::BackendType::Vulkan);\n  } else if (backend == \"d3d12\") {\n    return device::createTestDevice(::igl::BackendType::D3D12);\n  // @fb-only\n    // @fb-only\n  } else {\n    return nullptr;\n  }\n}\n\n} // namespace igl::tests::util\n"
  },
  {
    "path": "src/igl/tests/util/TestDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n\nnamespace igl {\nclass IDevice;\nnamespace tests::util {\n\n/**\n Create and return an igl::Device that is suitable for running tests against.\n */\nstd::shared_ptr<IDevice> createTestDevice();\n\n} // namespace tests::util\n} // namespace igl\n"
  },
  {
    "path": "src/igl/tests/util/TestErrorGuard.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"TestErrorGuard.h\"\n\nigl::tests::util::TestErrorGuard::TestErrorGuard() {\n#if IGL_SOFT_ERROR_ENABLED\n  savedErrorHandler_ = iglGetSoftErrorHandler();\n  iglSetSoftErrorHandler(reportErrorHandler);\n#endif\n}\n\nigl::tests::util::TestErrorGuard::~TestErrorGuard() {\n#if IGL_SOFT_ERROR_ENABLED\n  iglSetSoftErrorHandler(savedErrorHandler_);\n#endif\n}\n\nvoid igl::tests::util::TestErrorGuard::reportErrorHandler(const char* category,\n                                                          const char* /*reason*/,\n                                                          const char* file,\n                                                          const char* /*func*/,\n                                                          int line,\n                                                          const char* format,\n                                                          va_list ap) {\n#if IGL_SOFT_ERROR_ENABLED\n  va_list apCopy; // NOLINT(cppcoreguidelines-init-variables)\n  va_copy(apCopy, ap);\n  const auto len = std::vsnprintf(nullptr, 0, format, apCopy);\n  va_end(apCopy);\n\n  std::string fmtString;\n  fmtString.resize(len + 1);\n  std::vsnprintf(&fmtString.front(), len + 1, format, ap);\n  fmtString.resize(len);\n\n  ADD_FAILURE() << \"IGL error encountered in \" << file << \":\" << line << \" category=\" << category\n                << \" \" << fmtString;\n#endif\n}\n"
  },
  {
    "path": "src/igl/tests/util/TestErrorGuard.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdarg>\n#include <igl/Core.h>\n\nnamespace igl::tests::util {\n/// Sets an IGL handler that will cause gtest to fail when IGLReportErrorHandler is called\nclass TestErrorGuard final {\n public:\n  TestErrorGuard();\n\n  virtual ~TestErrorGuard();\n\n  static void reportErrorHandler(const char* category,\n                                 const char* reason,\n                                 const char* file,\n                                 const char* func,\n                                 int line,\n                                 const char* format,\n                                 va_list ap);\n\n private:\n#if IGL_SOFT_ERROR_ENABLED\n  IGLErrorHandlerFunc savedErrorHandler_;\n#endif\n};\n} // namespace igl::tests::util\n"
  },
  {
    "path": "src/igl/tests/util/TextureFormatTestBase.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"TextureFormatTestBase.h\"\n\n#include \"../data/ShaderData.h\"\n#include \"../data/VertexIndexData.h\"\n#include \"Common.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/Framebuffer.h>\n#include <igl/SamplerState.h>\n#include <igl/VertexInputState.h>\n\nnamespace igl::tests::util {\n\n#define OFFSCREEN_TEX_WIDTH 2\n#define OFFSCREEN_TEX_HEIGHT 2\n\nvoid TextureFormatTestBase::SetUp() {\n  setDebugBreakEnabled(false);\n\n  util::createDeviceAndQueue(iglDev_, cmdQueue_);\n  ASSERT_TRUE(iglDev_ != nullptr);\n  ASSERT_TRUE(cmdQueue_ != nullptr);\n\n  // Create a sampled and an attachment texture for use in tests\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           OFFSCREEN_TEX_WIDTH,\n                                           OFFSCREEN_TEX_HEIGHT,\n                                           TextureDesc::TextureUsageBits::Sampled);\n  texDesc.debugName = \"TextureFormatTestBase rgba unorm8 sampled\";\n\n  Result ret;\n  sampledTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  ASSERT_TRUE(sampledTexture_ != nullptr);\n\n  const auto attachmentFormat = iglDev_->getBackendType() == igl::BackendType::OpenGL\n                                    ? TextureFormat::ABGR_UNorm4\n                                    : TextureFormat::RGBA_UNorm8;\n  texDesc = TextureDesc::new2D(attachmentFormat,\n                               OFFSCREEN_TEX_WIDTH,\n                               OFFSCREEN_TEX_HEIGHT,\n                               TextureDesc::TextureUsageBits::Attachment);\n  attachmentTexture_ = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  ASSERT_TRUE(attachmentTexture_ != nullptr);\n\n  // Initialize render pass descriptor\n  renderPass_.colorAttachments.resize(1);\n  renderPass_.colorAttachments[0].loadAction = LoadAction::Clear;\n  renderPass_.colorAttachments[0].storeAction = StoreAction::Store;\n  renderPass_.colorAttachments[0].clearColor = {0.0, 0.0, 0.0, 1.0};\n\n  // Initialize input to vertex shader\n  VertexInputStateDesc inputDesc;\n\n  inputDesc.attributes[0].format = VertexAttributeFormat::Float4;\n  inputDesc.attributes[0].offset = 0;\n  inputDesc.attributes[0].bufferIndex = data::shader::kSimplePosIndex;\n  inputDesc.attributes[0].name = data::shader::kSimplePos;\n  inputDesc.attributes[0].location = 0;\n  inputDesc.inputBindings[0].stride = sizeof(float) * 4;\n\n  inputDesc.attributes[1].format = VertexAttributeFormat::Float2;\n  inputDesc.attributes[1].offset = 0;\n  inputDesc.attributes[1].bufferIndex = data::shader::kSimpleUvIndex;\n  inputDesc.attributes[1].name = data::shader::kSimpleUv;\n  inputDesc.attributes[1].location = 1;\n  inputDesc.inputBindings[1].stride = sizeof(float) * 2;\n\n  // numAttributes has to equal to bindings when using more than 1 buffer\n  inputDesc.numAttributes = inputDesc.numInputBindings = 2;\n\n  vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(vertexInputState_ != nullptr);\n\n  // Initialize index buffer\n  BufferDesc bufDesc;\n\n  bufDesc.type = BufferDesc::BufferTypeBits::Index;\n  bufDesc.data = data::vertex_index::kQuadInd.data();\n  bufDesc.length = sizeof(data::vertex_index::kQuadInd);\n\n  ib_ = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(ib_ != nullptr);\n\n  // Initialize vertex and sampler buffers\n  bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n  bufDesc.data = data::vertex_index::kQuadVert.data();\n  bufDesc.length = sizeof(data::vertex_index::kQuadVert);\n\n  vb_ = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(vb_ != nullptr);\n\n  bufDesc.type = BufferDesc::BufferTypeBits::Vertex;\n  bufDesc.data = data::vertex_index::kQuadUv.data();\n  bufDesc.length = sizeof(data::vertex_index::kQuadUv);\n\n  uv_ = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(uv_ != nullptr);\n\n  // Initialize sampler state\n  nearestSampler_ = iglDev_->createSamplerState(SamplerStateDesc{}, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(nearestSampler_ != nullptr);\n\n  linearSampler_ = iglDev_->createSamplerState(SamplerStateDesc::newLinear(), &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(linearSampler_ != nullptr);\n\n  // Initialize Graphics Pipeline Descriptor, but leave the creation\n  // to the individual tests in case further customization is required\n  renderPipelineDesc_.vertexInputState = vertexInputState_;\n  renderPipelineDesc_.targetDesc.colorAttachments.resize(1);\n  renderPipelineDesc_.fragmentUnitSamplerMap[textureUnit_] =\n      IGL_NAMEHANDLE(data::shader::kSimpleSampler);\n  renderPipelineDesc_.cullMode = igl::CullMode::Disabled;\n}\n\nstd::shared_ptr<IFramebuffer> TextureFormatTestBase::createFramebuffer(\n    std::shared_ptr<ITexture> attachmentTexture,\n    Result& ret) {\n  FramebufferDesc framebufferDesc;\n  const auto attachmentFormat = attachmentTexture->getFormat();\n\n  if (attachmentTexture->getProperties().isDepthOrStencil()) {\n    // For depth/stencil textures:\n    //  1) Attach to the appropriate part of the framebuffer\n    //  2) Use ivar as color attachment.\n\n    // Update renderPipelineDesc_\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat =\n        attachmentTexture_->getFormat();\n    renderPipelineDesc_.targetDesc.depthAttachmentFormat = TextureFormat::Invalid;\n    renderPipelineDesc_.targetDesc.stencilAttachmentFormat = TextureFormat::Invalid;\n\n    if (attachmentFormat != TextureFormat::S_UInt8) {\n      framebufferDesc.depthAttachment.texture = attachmentTexture;\n      renderPipelineDesc_.targetDesc.depthAttachmentFormat = attachmentFormat;\n    }\n    if (attachmentFormat != TextureFormat::Z_UNorm16 &&\n        attachmentFormat != TextureFormat::Z_UNorm24 &&\n        attachmentFormat != TextureFormat::Z_UNorm32) {\n      framebufferDesc.stencilAttachment.texture = attachmentTexture;\n      renderPipelineDesc_.targetDesc.stencilAttachmentFormat = attachmentFormat;\n    }\n    framebufferDesc.colorAttachments[0].texture = attachmentTexture_;\n\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages, attachmentTexture_->getFormat());\n    renderPipelineDesc_.shaderStages = std::move(stages);\n\n  } else {\n    framebufferDesc.colorAttachments[0].texture = attachmentTexture;\n\n    // Update renderPipelineDesc_\n    renderPipelineDesc_.targetDesc.colorAttachments[0].textureFormat = attachmentFormat;\n    renderPipelineDesc_.targetDesc.depthAttachmentFormat = TextureFormat::Invalid;\n    renderPipelineDesc_.targetDesc.stencilAttachmentFormat = TextureFormat::Invalid;\n\n    std::unique_ptr<IShaderStages> stages;\n    igl::tests::util::createSimpleShaderStages(iglDev_, stages, attachmentFormat);\n    renderPipelineDesc_.shaderStages = std::move(stages);\n  }\n\n  auto framebuffer = iglDev_->createFramebuffer(framebufferDesc, &ret);\n  return framebuffer;\n}\n\n// NOLINTNEXTLINE(bugprone-easily-swappable-parameters)\nvoid TextureFormatTestBase::render(std::shared_ptr<ITexture> sampledTexture,\n                                   std::shared_ptr<ITexture> attachmentTexture,\n                                   bool linearSampling,\n                                   TextureFormatProperties testProperties) {\n  Result ret;\n\n  //-------\n  // Render\n  //-------\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc{}, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  ASSERT_TRUE(cmdBuf != nullptr);\n\n  auto framebuffer = createFramebuffer(attachmentTexture, ret);\n  ASSERT_TRUE(ret.isOk()) << testProperties.name << \": \" << ret.message;\n  ASSERT_TRUE(framebuffer != nullptr);\n\n  // Add sampled textures as dependencies so that their layout is transitioned correctly for Vulkan\n  Dependencies dep;\n  dep.textures[0] = sampledTexture.get();\n\n  Result result;\n  auto cmds = cmdBuf->createRenderCommandEncoder(renderPass_, framebuffer, dep, &result);\n  ASSERT_TRUE(result.isOk());\n  cmds->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n  cmds->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n  // Create createFramebuffer fills in proper texture formats and shader stages in\n  // renderPipelineDesc_\n\n  auto pipelineState = iglDev_->createRenderPipeline(renderPipelineDesc_, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok) << ret.message;\n  ASSERT_TRUE(pipelineState != nullptr);\n\n  cmds->bindRenderPipelineState(pipelineState);\n\n  cmds->bindTexture(textureUnit_, BindTarget::kFragment, sampledTexture.get());\n  // Choose appropriate sampler.\n  cmds->bindSamplerState(textureUnit_,\n                         BindTarget::kFragment,\n                         (linearSampling ? linearSampler_ : nearestSampler_).get());\n\n  cmds->bindIndexBuffer(*ib_, IndexFormat::UInt16);\n  cmds->drawIndexed(6);\n\n  cmds->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n\n  cmdBuf->waitUntilCompleted();\n}\n\nstd::pair<TextureFormat, bool> TextureFormatTestBase::checkSupport(\n    TextureFormat format,\n    TextureDesc::TextureUsage usage) {\n  const bool sampled = (usage & TextureDesc::TextureUsageBits::Sampled) != 0;\n  const bool storage = (usage & TextureDesc::TextureUsageBits::Storage) != 0;\n  const bool attachment = (usage & TextureDesc::TextureUsageBits::Attachment) != 0;\n  const bool sampledAttachment = sampled && attachment;\n\n  const auto capabilities = iglDev_->getTextureFormatCapabilities(format);\n  bool supported = false;\n  if (sampledAttachment) {\n    if ((capabilities & ICapabilities::TextureFormatCapabilityBits::SampledAttachment) != 0) {\n      supported = true;\n    }\n  } else if (attachment &&\n             (capabilities & ICapabilities::TextureFormatCapabilityBits::Attachment) != 0) {\n    supported = true;\n  } else if (sampled && (capabilities & ICapabilities::TextureFormatCapabilityBits::Sampled) != 0) {\n    supported = true;\n  } else if (storage && (capabilities & ICapabilities::TextureFormatCapabilityBits::Storage) != 0) {\n    supported = true;\n  }\n\n  return std::make_pair(format, supported);\n}\n\nstd::vector<std::pair<TextureFormat, bool>> TextureFormatTestBase::getFormatSupport(\n    TextureDesc::TextureUsage usage) {\n  std::vector<std::pair<TextureFormat, bool>> formatSupport;\n  formatSupport.emplace_back(checkSupport(TextureFormat::Invalid, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::A_UNorm8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::L_UNorm8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R_UNorm8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R_F16, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R_UInt16, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R_UNorm16, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::B5G5R5A1_UNorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::B5G6R5_UNorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::ABGR_UNorm4, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::LA_UNorm8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RG_UNorm8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R4G2B2_UNorm_Apple, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R4G2B2_UNorm_Rev_Apple, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R5G5B5A1_UNorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBX_UNorm8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_UNorm8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::BGRA_UNorm8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::BGRA_UNorm8_Rev, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_SRGB, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::BGRA_SRGB, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RG_F16, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RG_UInt16, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RG_UNorm16, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGB10_A2_UNorm_Rev, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGB10_A2_Uint_Rev, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::BGR10_A2_Unorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R_F32, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R_UInt32, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGB_F16, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_F16, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RG_F32, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGB_F32, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_UInt32, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_F32, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_4x4, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_4x4, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_5x4, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_5x4, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_5x5, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_5x5, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_6x5, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_6x5, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_6x6, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_6x6, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_8x5, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_8x5, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_8x6, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_8x6, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_8x8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_8x8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_10x5, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_10x5, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_10x6, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_10x6, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_10x8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_10x8, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_10x10, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_10x10, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_12x10, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_12x10, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_ASTC_12x12, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_ASTC_12x12, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_PVRTC_2BPPV1, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGB_PVRTC_2BPPV1, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_PVRTC_4BPPV1, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGB_PVRTC_4BPPV1, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGB8_ETC1, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGB8_ETC2, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_ETC2, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGB8_Punchthrough_A1_ETC2, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_Punchthrough_A1_ETC2, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA8_EAC_ETC2, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::SRGB8_A8_EAC_ETC2, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RG_EAC_UNorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RG_EAC_SNorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R_EAC_UNorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::R_EAC_SNorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_BC7_UNORM_4x4, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::RGBA_BC7_SRGB_4x4, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::Z_UNorm16, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::Z_UNorm24, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::Z_UNorm32, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::S8_UInt_Z24_UNorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::S8_UInt_Z32_UNorm, usage));\n  formatSupport.emplace_back(checkSupport(TextureFormat::S_UInt8, usage));\n  return formatSupport;\n}\n\n// Attempts to upload data to texture.\nvoid TextureFormatTestBase::testUpload(std::shared_ptr<ITexture> texture) {\n  const auto size = texture->getEstimatedSizeInBytes();\n  std::vector<uint8_t> data(size);\n  const auto range = texture->getFullRange();\n  const Result result = texture->upload(range, data.data());\n  ASSERT_TRUE(result.isOk()) << texture->getProperties().name;\n  // flush upload\n  Result ret;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc{}, &ret);\n  cmdQueue_->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n}\n\n// Attempts to render into texture.\nvoid TextureFormatTestBase::testAttachment(std::shared_ptr<ITexture> texture) {\n  render(sampledTexture_, texture, false, texture->getProperties());\n}\n\n// Attempts to sample from texture when rendering.\nvoid TextureFormatTestBase::testSampled(std::shared_ptr<ITexture> texture, bool linearSampling) {\n  render(texture, attachmentTexture_, linearSampling, texture->getProperties());\n}\n\nvoid TextureFormatTestBase::testUsage(TextureDesc::TextureUsage usage, const char* usageName) {\n  const auto formatSupport = getFormatSupport(usage);\n  for (const auto& fs : formatSupport) {\n    testUsage(fs, usage, usageName);\n  }\n}\n\nvoid TextureFormatTestBase::testUsage(std::pair<TextureFormat, bool> formatSupport,\n                                      TextureDesc::TextureUsage usage,\n                                      const char* usageName) {\n  std::shared_ptr<ITexture> texture;\n  Result ret;\n  const auto [textureFormat, supported] = formatSupport;\n  const auto properties = TextureFormatProperties::fromTextureFormat(textureFormat);\n  if (!supported) {\n    // Comment this out to test unsupported formats.\n    IGL_LOG_INFO(\"%s: Skipping %s: Capabilities: 0x%x\\n\",\n                 usageName,\n                 properties.name,\n                 iglDev_->getTextureFormatCapabilities(textureFormat));\n    return;\n  }\n  IGL_LOG_INFO(\"%s: Testing %s\\n\", usageName, properties.name);\n  auto texDesc =\n      TextureDesc::new2D(textureFormat, OFFSCREEN_TEX_WIDTH, OFFSCREEN_TEX_HEIGHT, usage);\n  texDesc.debugName = std::string(\"TextureFormatTestBase:\") + usageName + \":\" + properties.name;\n  if (iglDev_->getBackendType() == BackendType::Metal && properties.isDepthOrStencil()) {\n    texDesc.storage = ResourceStorage::Private;\n  }\n  texture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, supported ? Result::Code::Ok : Result::Code::ArgumentInvalid)\n      << properties.name << \": \" << ret.message;\n\n  testUsage(texture, usage, usageName);\n}\nvoid TextureFormatTestBase::testUsage(std::shared_ptr<ITexture> texture,\n                                      TextureDesc::TextureUsage usage,\n                                      const char* usageName) {\n  const auto properties = texture->getProperties();\n  // Non-normalized integer formats cannot be sampled with `float` GLSL samplers `sampler2D` on\n  // Vulkan (need `usampler2D` etc)\n  const bool isIntegerFormat = (properties.flags & TextureFormatProperties::Flags::Integer) != 0;\n  const bool isVulkan = iglDev_->getBackendType() == igl::BackendType::Vulkan;\n  const bool shouldSkip = isVulkan && isIntegerFormat;\n  if (!shouldSkip && (usage & TextureDesc::TextureUsageBits::Sampled) != 0) {\n    const bool linearSampling =\n        (iglDev_->getTextureFormatCapabilities(properties.format) &\n         ICapabilities::TextureFormatCapabilityBits::SampledAttachment) != 0;\n    IGL_LOG_INFO(\"%s: Test Sampled: %s\\n\", usageName, properties.name);\n    testSampled(texture, linearSampling);\n  }\n\n  if ((usage & (TextureDesc::TextureUsageBits::Attachment)) != 0) {\n    IGL_LOG_INFO(\"%s: Test Attachment: %s\\n\", usageName, properties.name);\n    testAttachment(texture);\n  }\n\n  if (texture->supportsUpload()) {\n    IGL_LOG_INFO(\"%s: Test Upload: %s\\n\", usageName, properties.name);\n    testUpload(texture);\n  }\n}\n\n} // namespace igl::tests::util\n"
  },
  {
    "path": "src/igl/tests/util/TextureFormatTestBase.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <gtest/gtest.h>\n\n#include <igl/CommandQueue.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/Texture.h>\n\nnamespace igl::tests::util {\n\nclass TextureFormatTestBase : public ::testing::Test {\n private:\n public:\n  TextureFormatTestBase() = default;\n  ~TextureFormatTestBase() override = default;\n\n  void SetUp() override;\n  void TearDown() override {}\n\n  std::vector<std::pair<TextureFormat, bool>> getFormatSupport(TextureDesc::TextureUsage usage);\n  std::pair<TextureFormat, bool> checkSupport(TextureFormat format,\n                                              TextureDesc::TextureUsage usage);\n\n  std::shared_ptr<IFramebuffer> createFramebuffer(std::shared_ptr<ITexture> attachmentTexture,\n                                                  Result& ret);\n  void render(std::shared_ptr<ITexture> sampledTexture,\n              std::shared_ptr<ITexture> attachmentTexture,\n              bool linearSampling,\n              TextureFormatProperties testProperties);\n  void testSampled(std::shared_ptr<ITexture> texture, bool linearSampling);\n  void testAttachment(std::shared_ptr<ITexture> texture);\n  void testUpload(std::shared_ptr<ITexture> texture);\n  void testUsage(TextureDesc::TextureUsage usage, const char* usageName);\n  void testUsage(std::pair<TextureFormat, bool> formatSupport,\n                 TextureDesc::TextureUsage usage,\n                 const char* usageName);\n  void testUsage(std::shared_ptr<ITexture> texture,\n                 TextureDesc::TextureUsage usage,\n                 const char* usageName); // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ITexture> sampledTexture_;\n  std::shared_ptr<ITexture> attachmentTexture_;\n  RenderPassDesc renderPass_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::shared_ptr<IBuffer> vb_, uv_, ib_;\n  std::shared_ptr<ISamplerState> nearestSampler_;\n  std::shared_ptr<ISamplerState> linearSampler_;\n  RenderPipelineDesc renderPipelineDesc_;\n  size_t textureUnit_ = 0;\n};\n\n} // namespace igl::tests::util\n"
  },
  {
    "path": "src/igl/tests/util/TextureValidationHelpers.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <gtest/gtest.h>\n\n#include <glm/glm.hpp>\n#include <igl/CommandBuffer.h>\n#include <igl/Common.h>\n#include <igl/Device.h>\n\n#if IGL_PLATFORM_IOS || IGL_PLATFORM_MACOSX\n#include \"simd/simd.h\"\n#else\n#include \"simdstub.h\"\n#endif\nnamespace igl::tests::util {\nconstexpr auto kTestPrecision = 0.0001f;\n\ntemplate<typename ColorType>\ninline void testArray(std::vector<ColorType> actualData,\n                      const ColorType* expectedData,\n                      size_t expectedDataSize,\n                      const char* message) {\n  const auto kInnerTestPrecision = ColorType(kTestPrecision);\n  for (size_t i = 0; i < expectedDataSize; i++) {\n    std::stringstream ss;\n    ss << message << \": Mismatch at index \" << i << \": Expected: \" << std::hex << expectedData[i]\n       << \" Actual: \" << std::hex << actualData[i];\n    ASSERT_NEAR(expectedData[i], actualData[i], kInnerTestPrecision) << ss.str();\n  }\n}\n\ntemplate<typename VectorUnit, glm::qualifier Precision>\ninline void testArray(std::vector<glm::vec<4, VectorUnit, Precision>> actualData,\n                      const glm::vec<4, VectorUnit, Precision>* expectedData,\n                      size_t expectedDataSize,\n                      const char* message) {\n  const auto kInnerTestPrecision = VectorUnit(kTestPrecision);\n  for (size_t i = 0; i < expectedDataSize; i++) {\n    std::stringstream ss;\n    ss << message << \": Mismatch at index \" << i << \": Expected: \" << std::hex << \"(\"\n       << expectedData[i].x << \" \" << expectedData[i].y << \" \" << expectedData[i].z << \" \"\n       << expectedData[i].w << \")\" << \" Actual: \" << std::hex << \"(\" << actualData[i].x << \" \"\n       << actualData[i].y << \" \" << actualData[i].z << \" \" << actualData[i].w << \")\";\n    ASSERT_NEAR(expectedData[i].x, actualData[i].x, kInnerTestPrecision) << ss.str();\n    ASSERT_NEAR(expectedData[i].y, actualData[i].y, kInnerTestPrecision) << ss.str();\n    ASSERT_NEAR(expectedData[i].z, actualData[i].z, kInnerTestPrecision) << ss.str();\n    ASSERT_NEAR(expectedData[i].w, actualData[i].w, kInnerTestPrecision) << ss.str();\n  }\n}\n\ntemplate<typename VectorUnit, glm::qualifier Precision>\ninline void testArray(std::vector<glm::vec<3, VectorUnit, Precision>> actualData,\n                      const glm::vec<3, VectorUnit, Precision>* expectedData,\n                      size_t expectedDataSize,\n                      const char* message) {\n  const auto kInnerTestPrecision = VectorUnit(kTestPrecision);\n  for (size_t i = 0; i < expectedDataSize; i++) {\n    std::stringstream ss;\n    ss << message << \": Mismatch at index \" << i << \": Expected: \" << std::hex << \"(\"\n       << expectedData[i].x << \" \" << expectedData[i].y << \" \" << expectedData[i].z << \")\"\n       << \" Actual: \" << std::hex << \"(\" << actualData[i].x << \" \" << actualData[i].y << \" \"\n       << actualData[i].z << \")\";\n    ASSERT_NEAR(expectedData[i].x, actualData[i].x, kInnerTestPrecision) << ss.str();\n    ASSERT_NEAR(expectedData[i].y, actualData[i].y, kInnerTestPrecision) << ss.str();\n    ASSERT_NEAR(expectedData[i].z, actualData[i].z, kInnerTestPrecision) << ss.str();\n  }\n}\n\ntemplate<typename VectorUnit, glm::qualifier Precision>\ninline void testArray(std::vector<glm::vec<2, VectorUnit, Precision>> actualData,\n                      const glm::vec<2, VectorUnit, Precision>* expectedData,\n                      size_t expectedDataSize,\n                      const char* message) {\n  const auto kInnerTestPrecision = VectorUnit(kTestPrecision);\n  for (size_t i = 0; i < expectedDataSize; i++) {\n    std::stringstream ss;\n    ss << message << \": Mismatch at index \" << i << \": Expected: \" << std::hex << \"(\"\n       << expectedData[i].x << \" \" << expectedData[i].y << \")\" << \" Actual: \" << std::hex << \"(\"\n       << actualData[i].x << \" \" << actualData[i].y << \")\";\n    ASSERT_NEAR(expectedData[i].x, actualData[i].x, kInnerTestPrecision) << ss.str();\n    ASSERT_NEAR(expectedData[i].y, actualData[i].y, kInnerTestPrecision) << ss.str();\n  }\n}\n\n/// Reads back a range of texture data\n/// @param device The device the texture was created with\n/// @param cmdQueue A command queue to submit any read requests on\n/// @param texture The texture to validate\n/// @param isRenderTarget True if the texture was the target of a render pass; false otherwise\n/// @param range The range of data to validate. Must resolve to a single 2D texture region\n/// @param expectedData The expected data in the specified range\n/// @param message A message to print when validation fails\ntemplate<typename ColorType>\ninline void validateTextureRange(IDevice& device,\n                                 ICommandQueue& cmdQueue,\n                                 const std::shared_ptr<ITexture>& texture,\n                                 bool isRenderTarget,\n                                 const TextureRangeDesc& range,\n                                 const ColorType* expectedData,\n                                 const char* message) {\n  Result ret;\n  // Dummy command buffer to wait for completion.\n  auto cmdBuf = cmdQueue.createCommandBuffer({}, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(cmdBuf != nullptr);\n  cmdQueue.submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n\n  ASSERT_EQ(range.numLayers, 1);\n  ASSERT_EQ(range.numMipLevels, 1);\n  ASSERT_EQ(range.depth, 1);\n\n  const auto expectedDataSize = range.width * range.height;\n  std::vector<ColorType> actualData;\n  actualData.resize(expectedDataSize);\n\n  FramebufferDesc framebufferDesc;\n  framebufferDesc.colorAttachments[0].texture = texture;\n  auto fb = device.createFramebuffer(framebufferDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_TRUE(fb != nullptr);\n\n  fb->copyBytesColorAttachment(cmdQueue, 0, actualData.data(), range);\n\n  if (!isRenderTarget && (device.getBackendType() == igl::BackendType::Metal ||\n                          device.getBackendType() == igl::BackendType::Vulkan ||\n                          device.getBackendType() == igl::BackendType::D3D12)) {\n    // The Vulkan, Metal, and D3D12 implementations of copyBytesColorAttachment flip the returned\n    // image vertically. This is the desired behavior for render targets, but for non-render target\n    // textures, we want the unflipped data. This flips the output image again to get the unmodified\n    // data.\n    std::vector<ColorType> tmpData;\n    tmpData.resize(actualData.size());\n    for (size_t h = 0; h < range.height; ++h) {\n      size_t src = (range.height - 1 - h) * range.width;\n      size_t dst = h * range.width;\n      for (size_t w = 0; w < range.width; ++w) {\n        tmpData[dst++] = actualData[src++];\n      }\n    }\n    actualData = std::move(tmpData);\n  }\n\n  testArray(actualData, expectedData, expectedDataSize, message);\n}\n\ntemplate<typename ColorType>\ninline void validateFramebufferTextureRange(IDevice& device,\n                                            ICommandQueue& cmdQueue,\n                                            const IFramebuffer& framebuffer,\n                                            const TextureRangeDesc& range,\n                                            const ColorType* expectedData,\n                                            const char* message) {\n  validateTextureRange(\n      device, cmdQueue, framebuffer.getColorAttachment(0), true, range, expectedData, message);\n}\n\ntemplate<typename ColorType>\ninline void validateFramebufferTexture(IDevice& device,\n                                       ICommandQueue& cmdQueue,\n                                       const IFramebuffer& framebuffer,\n                                       const ColorType* expectedData,\n                                       const char* message) {\n  validateFramebufferTextureRange(device,\n                                  cmdQueue,\n                                  framebuffer,\n                                  framebuffer.getColorAttachment(0)->getFullRange(),\n                                  expectedData,\n                                  message);\n}\n\ntemplate<typename ColorType>\ninline void validateUploadedTextureRange(IDevice& device,\n                                         ICommandQueue& cmdQueue,\n                                         const std::shared_ptr<ITexture>& texture,\n                                         const TextureRangeDesc& range,\n                                         const ColorType* expectedData,\n                                         const char* message) {\n  validateTextureRange(device, cmdQueue, texture, false, range, expectedData, message);\n}\n\ntemplate<typename ColorType>\ninline void validateUploadedTexture(IDevice& device,\n                                    ICommandQueue& cmdQueue,\n                                    const std::shared_ptr<ITexture>& texture,\n                                    const ColorType* expectedData,\n                                    const char* message) {\n  validateTextureRange(\n      device, cmdQueue, texture, false, texture->getFullRange(), expectedData, message);\n}\n\n} // namespace igl::tests::util\n"
  },
  {
    "path": "src/igl/tests/util/device/MetalTestDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n\nnamespace igl {\nclass IDevice;\n} // namespace igl\n\nnamespace igl::tests::util::device {\n\n/**\n Create and return an igl::Device that is suitable for running tests against for the specified\n backend.\n For OpenGL, a backendApi value of \"2.0\" will return a GLES2 context. All other values will return a\n GLES3 context.\n */\nstd::unique_ptr<IDevice> createMetalTestDevice();\n\n} // namespace igl::tests::util::device\n"
  },
  {
    "path": "src/igl/tests/util/device/MetalTestDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/tests/util/device/MetalTestDevice.h>\n\n#include <igl/tests/util/device/metal/TestDevice.h>\n\nnamespace igl::tests::util::device {\n\nstd::unique_ptr<IDevice> createMetalTestDevice() {\n  return metal::createTestDevice();\n}\n\n} // namespace igl::tests::util::device\n"
  },
  {
    "path": "src/igl/tests/util/device/TestDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/tests/util/device/TestDevice.h>\n\n#include <igl/Common.h>\n#include <igl/Macros.h>\n\n// clang-format off\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// @fb-only\n// clang-format on\n// @fb-only\n#if IGL_METAL_SUPPORTED\n#include <igl/tests/util/device/MetalTestDevice.h>\n#endif\n#if IGL_OPENGL_SUPPORTED\n#include <igl/tests/util/device/opengl/TestDevice.h>\n#endif\n#if IGL_VULKAN_SUPPORTED\n#include <igl/tests/util/device/vulkan/TestDevice.h>\n#endif\n#if IGL_D3D12_SUPPORTED\n#include <igl/tests/util/device/d3d12/TestDevice.h>\n#endif\n// @fb-only\n// @fb-only\n// @fb-only\n\nnamespace igl::tests::util::device {\n\nbool isBackendTypeSupported(BackendType backendType) {\n  switch (backendType) {\n  case ::igl::BackendType::Invalid:\n  case ::igl::BackendType::Custom:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return false;\n  case ::igl::BackendType::Metal:\n    return IGL_METAL_SUPPORTED;\n  case ::igl::BackendType::OpenGL:\n    return IGL_OPENGL_SUPPORTED;\n  case ::igl::BackendType::Vulkan:\n    return IGL_VULKAN_SUPPORTED;\n  case ::igl::BackendType::D3D12:\n    return IGL_D3D12_SUPPORTED;\n  // @fb-only\n    // @fb-only\n  }\n  IGL_UNREACHABLE_RETURN(false)\n}\n\nstd::unique_ptr<IDevice> createTestDevice(BackendType backendType, const TestDeviceConfig& config) {\n  if (backendType == ::igl::BackendType::Metal) {\n#if IGL_METAL_SUPPORTED\n    return createMetalTestDevice();\n#else\n    return nullptr;\n#endif\n  }\n  if (backendType == ::igl::BackendType::OpenGL) {\n#if IGL_OPENGL_SUPPORTED\n    return opengl::createTestDevice(config.requestedOpenGLBackendVersion);\n#else\n    return nullptr;\n#endif\n  }\n  if (backendType == ::igl::BackendType::Vulkan) {\n#if IGL_VULKAN_SUPPORTED\n    return vulkan::createTestDevice(config.enableVulkanValidationLayers);\n#else\n    return nullptr;\n#endif\n  }\n  if (backendType == ::igl::BackendType::D3D12) {\n#if IGL_D3D12_SUPPORTED\n    IGL_LOG_INFO(\"[Tests] Creating D3D12 test device (debug layer: enabled)\\n\");\n    auto dev = d3d12::createTestDevice(true);\n    if (!dev) {\n      IGL_LOG_ERROR(\"[Tests] D3D12 test device creation failed\\n\");\n    } else {\n      IGL_LOG_INFO(\"[Tests] D3D12 test device created OK\\n\");\n    }\n    return dev;\n#else\n    return nullptr;\n#endif\n  }\n  // @fb-only\n// @fb-only\n    // @fb-only\n    // @fb-only\n    // @fb-only\n// @fb-only\n    // @fb-only\n// @fb-only\n  // @fb-only\n  return nullptr;\n}\n\n} // namespace igl::tests::util::device\n"
  },
  {
    "path": "src/igl/tests/util/device/TestDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <optional>\n#include <igl/Common.h>\n#include <igl/Device.h>\n#include <igl/DeviceFeatures.h>\n\n#if (IGL_PLATFORM_IOS || IGL_PLATFORM_MACOSX || IGL_PLATFORM_MACCATALYST) && IGL_BACKEND_METAL\n#define IGL_METAL_SUPPORTED 1\n#else\n#define IGL_METAL_SUPPORTED 0\n#endif\n\n#if !IGL_PLATFORM_MACCATALYST && IGL_BACKEND_OPENGL && !defined(IGL_TESTS_NO_OPENGL)\n#define IGL_OPENGL_SUPPORTED 1\n#else\n#define IGL_OPENGL_SUPPORTED 0\n#endif\n\n#if (IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX) && \\\n    IGL_BACKEND_VULKAN && !defined(IGL_UNIT_TESTS_NO_VULKAN)\n#define IGL_VULKAN_SUPPORTED 1\n#else\n#define IGL_VULKAN_SUPPORTED 0\n#endif\n\n#if IGL_PLATFORM_WINDOWS && defined(IGL_BACKEND_ENABLE_D3D12) && !defined(IGL_UNIT_TESTS_NO_D3D12)\n#define IGL_D3D12_SUPPORTED 1\n#else\n#define IGL_D3D12_SUPPORTED 0\n#endif\n\nnamespace igl::tests::util::device {\n\nstruct TestDeviceConfig {\n  std::optional<BackendVersion> requestedOpenGLBackendVersion{};\n  bool enableVulkanValidationLayers = true;\n\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n};\n\n/**\n Returns whether or not the specified backend type is supported for test devices.\n */\nbool isBackendTypeSupported(BackendType backendType);\n\n#if IGL_D3D12_SUPPORTED\nconstexpr BackendType kDefaultBackendType = BackendType::D3D12;\n#elif IGL_OPENGL_SUPPORTED\nconstexpr BackendType kDefaultBackendType = BackendType::OpenGL;\n#elif IGL_VULKAN_SUPPORTED\nconstexpr BackendType kDefaultBackendType = BackendType::Vulkan;\n#elif IGL_METAL_SUPPORTED\nconstexpr BackendType kDefaultBackendType = BackendType::Metal;\n#else\nconstexpr BackendType kDefaultBackendType = BackendType::Invalid;\n#endif\n\n/**\n Create and return an igl::Device that is suitable for running tests against for the specified\n backend.\n For OpenGL, a backendApi value of \"2.0\" will return a GLES2 context. All other values will return a\n GLES3 context.\n */\nstd::unique_ptr<IDevice> createTestDevice(BackendType backendType = kDefaultBackendType,\n                                          const TestDeviceConfig& config = {});\n\n} // namespace igl::tests::util::device\n"
  },
  {
    "path": "src/igl/tests/util/device/d3d12/TestDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n/* Minimal D3D12 test device factory using a headless context. */\n\n#include \"TestDevice.h\"\n\n#include <igl/IGL.h>\n#include <igl/Log.h>\n#include <igl/d3d12/D3D12Headers.h>\n#include <igl/d3d12/Device.h>\n#include <igl/d3d12/HeadlessContext.h>\n\nnamespace igl::tests::util::device::d3d12 {\n\nstd::unique_ptr<igl::d3d12::Device> createTestDevice(bool enableDebugLayer) {\n  IGL_LOG_INFO(\"[Tests] D3D12 test device requested (debug layer: %s)\\n\",\n               enableDebugLayer ? \"enabled\" : \"disabled\");\n\n  // Enabling the debug layer happens inside D3D12Context::createDevice() when available.\n  // Build a headless context (no swapchain) suitable for unit tests.\n  auto ctx = std::make_unique<igl::d3d12::HeadlessD3D12Context>();\n  auto res = ctx->initializeHeadless(256, 256);\n  if (res.code != Result::Code::Ok) {\n    IGL_LOG_ERROR(\"[Tests] D3D12 headless context init failed: %s\\n\", res.message.c_str());\n    return nullptr;\n  }\n  return std::make_unique<igl::d3d12::Device>(std::move(ctx));\n}\n\n} // namespace igl::tests::util::device::d3d12\n"
  },
  {
    "path": "src/igl/tests/util/device/d3d12/TestDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/d3d12/Device.h>\n\nnamespace igl::tests::util::device::d3d12 {\n\n/**\n * Create and return an igl::d3d12::Device that is suitable for running tests against.\n * This creates a headless device without a swapchain, suitable for unit testing.\n */\nstd::unique_ptr<igl::d3d12::Device> createTestDevice(bool enableDebugLayer = true);\n\n} // namespace igl::tests::util::device::d3d12\n"
  },
  {
    "path": "src/igl/tests/util/device/metal/TestDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/metal/Device.h>\n\nnamespace igl::tests::util::device::metal {\n\n/**\n Create and return an igl::Device that is suitable for running tests against.\n */\nstd::unique_ptr<igl::metal::Device> createTestDevice();\n\n} // namespace igl::tests::util::device::metal\n"
  },
  {
    "path": "src/igl/tests/util/device/metal/TestDevice.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/tests/util/device/metal/TestDevice.h>\n\n#include <igl/Common.h>\n#include <igl/Macros.h>\n#include <igl/metal/HWDevice.h>\n\nnamespace igl::tests::util::device::metal {\n\n//\n// createTestDevice\n//\n// Used by clients to get an IGL device. The backend is determined by\n// the IGL_BACKEND_TYPE compiler flag in the BUCK file\n//\nstd::unique_ptr<igl::metal::Device> createTestDevice() {\n  auto mtlDevice = MTLCreateSystemDefaultDevice();\n  return ::igl::metal::HWDevice().createWithMTLDevice(mtlDevice, nullptr);\n}\n\n} // namespace igl::tests::util::device::metal\n"
  },
  {
    "path": "src/igl/tests/util/device/opengl/TestDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/tests/util/device/opengl/TestDevice.h>\n\n#include <igl/opengl/IContext.h>\n\n#if IGL_PLATFORM_IOS\n#include <igl/opengl/ios/HWDevice.h>\n#elif IGL_PLATFORM_MACOSX\n#include <igl/opengl/macos/HWDevice.h>\n#elif IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX_USE_EGL\n#include <igl/opengl/egl/HWDevice.h>\n#elif IGL_PLATFORM_LINUX\n#include <igl/opengl/glx/HWDevice.h>\n#elif IGL_PLATFORM_WINDOWS\n#if defined(FORCE_USE_ANGLE)\n#include <igl/opengl/egl/HWDevice.h>\n#else\n#include <igl/opengl/wgl/HWDevice.h>\n#endif // FORCE_USE_ANGLE\n#else\n#error \"Unsupported testing platform\"\n#endif\n\nnamespace igl::tests::util::device::opengl {\n\nnamespace {\ntemplate<typename THWDevice>\nstd::unique_ptr<::igl::opengl::Device> createOffscreenDevice() {\n  THWDevice hwDevice;\n  auto context = hwDevice.createOffscreenContext(640, 380, nullptr);\n  return hwDevice.createWithContext(std::move(context), nullptr);\n}\n} // namespace\n\n//\n// createTestDevice\n//\n// Used by clients to get an IGL device. The backend is determined by\n// the IGL_BACKEND_TYPE compiler flag in the BUCK file\n//\nstd::unique_ptr<igl::opengl::Device> createTestDevice(\n    std::optional<BackendVersion> requestedVersion) {\n  std::unique_ptr<igl::opengl::Device> iglDev = nullptr;\n\n#if IGL_PLATFORM_IOS\n  iglDev = requestedVersion ? ::igl::opengl::ios::HWDevice().create(*requestedVersion)\n                            : ::igl::opengl::ios::HWDevice().create();\n#elif IGL_PLATFORM_MACOSX\n  iglDev = requestedVersion ? ::igl::opengl::macos::HWDevice().create(*requestedVersion)\n                            : ::igl::opengl::macos::HWDevice().create();\n#elif IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX_USE_EGL\n  iglDev = createOffscreenDevice<::igl::opengl::egl::HWDevice>();\n#elif IGL_PLATFORM_LINUX\n  iglDev = createOffscreenDevice<::igl::opengl::glx::HWDevice>();\n#elif IGL_PLATFORM_WINDOWS\n#if defined(FORCE_USE_ANGLE)\n  iglDev = createOffscreenDevice<::igl::opengl::egl::HWDevice>();\n#else\n  iglDev = createOffscreenDevice<::igl::opengl::wgl::HWDevice>();\n#endif // FORCE_USE_ANGLE\n#else\n\n#endif\n\n  return iglDev;\n}\n\n} // namespace igl::tests::util::device::opengl\n"
  },
  {
    "path": "src/igl/tests/util/device/opengl/TestDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <optional>\n#include <igl/DeviceFeatures.h>\n#include <igl/opengl/Device.h>\n\nnamespace igl::tests::util::device::opengl {\n\n/**\n Create and return an igl::Device that is suitable for running tests against.\n */\nstd::unique_ptr<igl::opengl::Device> createTestDevice(\n    std::optional<BackendVersion> requestedVersion = {});\n\n} // namespace igl::tests::util::device::opengl\n"
  },
  {
    "path": "src/igl/tests/util/device/vulkan/TestDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/tests/util/device/vulkan/TestDevice.h>\n\n#include <igl/Common.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_IOS || \\\n    IGL_PLATFORM_LINUX\n#include <igl/vulkan/HWDevice.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanFeatures.h>\n#endif\n\n#if IGL_PLATFORM_MACOSX\n#include <igl/vulkan/moltenvk/MoltenVKHelpers.h>\n#endif\n\nnamespace igl::tests::util::device::vulkan {\n\n//\n// createTestDevice\n//\n// Used by clients to get an IGL device.\n//\n\nigl::vulkan::VulkanContextConfig getContextConfig(bool enableValidation) {\n  igl::vulkan::VulkanContextConfig config;\n  config.enableValidation = enableValidation;\n  config.enableGPUAssistedValidation = enableValidation;\n\n#if IGL_PLATFORM_MACOSX\n  config.terminateOnValidationError = false;\n#elif IGL_DEBUG\n  config.terminateOnValidationError = enableValidation;\n#else\n  config.enableValidation = false;\n  config.terminateOnValidationError = false;\n#endif\n#ifdef IGL_DISABLE_VALIDATION\n  config.enableValidation = false;\n  config.terminateOnValidationError = false;\n#endif\n  config.swapChainColorSpace = igl::ColorSpace::SRGB_NONLINEAR;\n  config.enableExtraLogs = enableValidation;\n\n  return config;\n}\n\nstd::unique_ptr<igl::vulkan::Device> createTestDevice(\n    const igl::vulkan::VulkanContextConfig& config) {\n#if IGL_PLATFORM_MACOSX\n  ::igl::vulkan::setupMoltenVKEnvironment();\n#endif\n\n  std::unique_ptr<igl::vulkan::Device> iglDev = nullptr;\n  Result ret;\n\n  auto ctx = igl::vulkan::HWDevice::createContext(config, nullptr);\n\n  std::vector<HWDeviceDesc> devices =\n      igl::vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(HWDeviceType::Unknown), &ret);\n\n  if (ret.isOk()) {\n    std::vector<const char*> extraDeviceExtensions;\n    extraDeviceExtensions.emplace_back(VK_KHR_MULTIVIEW_EXTENSION_NAME);\n\n    igl::vulkan::VulkanFeatures features(config);\n    features.populateWithAvailablePhysicalDeviceFeatures(\n        *ctx, (VkPhysicalDevice)devices[0].guid); // NOLINT(performance-no-int-to-ptr)\n\n    iglDev = igl::vulkan::HWDevice::create(std::move(ctx),\n                                           devices[0],\n                                           0, // width\n                                           0, // height,\n                                           extraDeviceExtensions.size(),\n                                           extraDeviceExtensions.data(),\n                                           &features,\n                                           \"Test Device\",\n                                           &ret);\n\n    if (!ret.isOk()) {\n      iglDev = nullptr;\n    }\n  }\n\n  return iglDev;\n}\n\nstd::unique_ptr<igl::vulkan::Device> createTestDevice(bool enableValidation) {\n  return createTestDevice(getContextConfig(enableValidation));\n}\n\n} // namespace igl::tests::util::device::vulkan\n"
  },
  {
    "path": "src/igl/tests/util/device/vulkan/TestDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/vulkan/Device.h>\n\nnamespace igl::tests::util::device::vulkan {\n\n/**\n Configure and return a context configuration.\n */\nigl::vulkan::VulkanContextConfig getContextConfig(bool enableValidation = true);\n\n/**\n Create and return an igl::Device that is suitable for running tests against.\n */\nstd::unique_ptr<igl::vulkan::Device> createTestDevice(\n    const igl::vulkan::VulkanContextConfig& config);\n\n/**\n Helper to create a Vulkan device with default configuration and optional validation.\n */\nstd::unique_ptr<igl::vulkan::Device> createTestDevice(bool enableValidation = true);\n\n} // namespace igl::tests::util::device::vulkan\n"
  },
  {
    "path": "src/igl/tests/util/simdstub.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nnamespace simd {\n\nstruct Float1 {\n  float x;\n};\n\nstruct Float2 {\n  float x, y;\n};\n\nstruct Float3 {\n  float x, y, z;\n};\n\nstruct Float4 {\n  float x, y, z, w;\n};\n\nstruct Int1 {\n  int x;\n};\n\nstruct Int2 {\n  int x, y;\n};\n\nstruct Int3 {\n  int x, y, z;\n};\n\nstruct Int4 {\n  int x, y, z, w;\n};\n\nstruct Float2x2 {\n  Float2 columns[2];\n};\n\nstruct Float3x2 {\n  Float2 columns[3];\n};\n\nstruct Float3x3 {\n  Float3 columns[3];\n};\n\nstruct Float4x4 {\n  Float4 columns[4];\n};\n\n// Type aliases for backward compatibility with Apple SIMD API\nusing float1 = Float1;\nusing float2 = Float2;\nusing float3 = Float3;\nusing float4 = Float4;\nusing int1 = Int1;\nusing int2 = Int2;\nusing int3 = Int3;\nusing int4 = Int4;\nusing float2x2 = Float2x2;\nusing float3x2 = Float3x2;\nusing float3x3 = Float3x3;\nusing float4x4 = Float4x4;\n\n} // namespace simd\n"
  },
  {
    "path": "src/igl/tests/vulkan/ColorSpace.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan::tests {\nTEST(ColorSpaceTest, colorSpaceToVkColorSpace) {\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_LINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::SRGB_LINEAR));\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_SRGB_NONLINEAR_KHR,\n            colorSpaceToVkColorSpace(ColorSpace::SRGB_NONLINEAR));\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::DISPLAY_P3_NONLINEAR));\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::DISPLAY_P3_LINEAR));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::EXTENDED_SRGB_LINEAR));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::DCI_P3_NONLINEAR));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_LINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::BT709_LINEAR));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::BT709_NONLINEAR));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_BT2020_LINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::BT2020_LINEAR));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_HDR10_ST2084_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::HDR10_ST2084));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_DOLBYVISION_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::DOLBYVISION));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_HDR10_HLG_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::HDR10_HLG));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::ADOBERGB_LINEAR));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::ADOBERGB_NONLINEAR));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_PASS_THROUGH_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::PASS_THROUGH));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::EXTENDED_SRGB_NONLINEAR));\n\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_DISPLAY_NATIVE_AMD,\n            colorSpaceToVkColorSpace(ColorSpace::DISPLAY_NATIVE_AMD));\n\n  /* asserts for IGL_DEBUG_ASSERT_NOT_IMPLEMENTED but would be valid otherwise\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::BT2020_NONLINEAR));\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::BT601_NONLINEAR));\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::BT2100_HLG_NONLINEAR));\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::BT2100_PQ_NONLINEAR));\n  ASSERT_EQ(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_NONLINEAR_EXT,\n            colorSpaceToVkColorSpace(ColorSpace::DISPLAY_P3_NONLINEAR));*/\n}\n\nTEST(ColorSpaceTest, vkColorSpaceToColorSpace) {\n  ASSERT_EQ(ColorSpace::SRGB_NONLINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_SRGB_NONLINEAR_KHR));\n\n  ASSERT_EQ(ColorSpace::DISPLAY_P3_NONLINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::EXTENDED_SRGB_LINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::DISPLAY_P3_LINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::DCI_P3_NONLINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::BT709_LINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_LINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::BT709_NONLINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_BT709_NONLINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::BT2020_LINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_BT2020_LINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::HDR10_ST2084,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_HDR10_ST2084_EXT));\n\n  ASSERT_EQ(ColorSpace::DOLBYVISION,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_DOLBYVISION_EXT));\n\n  ASSERT_EQ(ColorSpace::HDR10_HLG,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_HDR10_HLG_EXT));\n\n  ASSERT_EQ(ColorSpace::ADOBERGB_LINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::ADOBERGB_NONLINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::PASS_THROUGH,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_PASS_THROUGH_EXT));\n\n  ASSERT_EQ(ColorSpace::EXTENDED_SRGB_NONLINEAR,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT));\n\n  ASSERT_EQ(ColorSpace::DISPLAY_NATIVE_AMD,\n            vkColorSpaceToColorSpace(VkColorSpaceKHR::VK_COLOR_SPACE_DISPLAY_NATIVE_AMD));\n}\n\n} // namespace igl::vulkan::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/CommandBufferVulkanTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/ComputeCommandEncoder.h>\n#include <igl/vulkan/CommandBuffer.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass CommandBufferVulkanTest : public ::testing::Test {\n public:\n  CommandBufferVulkanTest() = default;\n  ~CommandBufferVulkanTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n\n    Result ret;\n    cmdQueue_ = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(cmdQueue_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nTEST_F(CommandBufferVulkanTest, GetVkCommandBuffer) {\n  Result ret;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cmdBuf, nullptr);\n\n  auto* vulkanCmdBuf = static_cast<igl::vulkan::CommandBuffer*>(cmdBuf.get());\n  EXPECT_TRUE(vulkanCmdBuf->getVkCommandBuffer() != nullptr);\n\n  cmdQueue_->submit(*cmdBuf);\n}\n\nTEST_F(CommandBufferVulkanTest, DebugGroupLabels) {\n  Result ret;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n  ASSERT_NE(cmdBuf, nullptr);\n\n  cmdBuf->pushDebugGroupLabel(\"TestGroup\", Color(1.0f, 0.0f, 0.0f, 1.0f));\n  cmdBuf->popDebugGroupLabel();\n\n  cmdQueue_->submit(*cmdBuf);\n}\n\nTEST_F(CommandBufferVulkanTest, CopyBuffer) {\n  Result ret;\n\n  BufferDesc srcDesc;\n  srcDesc.type = BufferDesc::BufferTypeBits::Storage;\n  srcDesc.storage = ResourceStorage::Shared;\n  srcDesc.length = 128;\n  auto srcBuffer = iglDev_->createBuffer(srcDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  BufferDesc dstDesc;\n  dstDesc.type = BufferDesc::BufferTypeBits::Storage;\n  dstDesc.storage = ResourceStorage::Shared;\n  dstDesc.length = 128;\n  auto dstBuffer = iglDev_->createBuffer(dstDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  std::vector<uint32_t> srcData(32, 0xCAFEBABE);\n  ret = srcBuffer->upload(srcData.data(), BufferRange(128, 0));\n  ASSERT_TRUE(ret.isOk());\n\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  cmdBuf->copyBuffer(*srcBuffer, *dstBuffer, 0, 0, 128);\n  cmdQueue_->submit(*cmdBuf);\n\n  auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n  device.getVulkanContext().waitIdle();\n\n  const auto* downloadedData = static_cast<uint32_t*>(dstBuffer->map(BufferRange(128, 0), &ret));\n  ASSERT_TRUE(ret.isOk());\n  for (size_t i = 0; i < 32; ++i) {\n    EXPECT_EQ(downloadedData[i], 0xCAFEBABE);\n  }\n  dstBuffer->unmap();\n}\n\nTEST_F(CommandBufferVulkanTest, WaitUntilCompleted) {\n  Result ret;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n  ASSERT_NE(cmdBuf, nullptr);\n\n  cmdQueue_->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n}\n\nTEST_F(CommandBufferVulkanTest, CreateComputeCommandEncoder) {\n  Result ret;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n  ASSERT_NE(cmdBuf, nullptr);\n\n  auto encoder = cmdBuf->createComputeCommandEncoder();\n  EXPECT_NE(encoder, nullptr);\n  encoder->endEncoding();\n\n  cmdQueue_->submit(*cmdBuf);\n}\n\nTEST_F(CommandBufferVulkanTest, GetNextSubmitHandle) {\n  Result ret;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  auto* vulkanCmdBuf = static_cast<igl::vulkan::CommandBuffer*>(cmdBuf.get());\n  auto handle = vulkanCmdBuf->getNextSubmitHandle();\n  EXPECT_FALSE(handle.empty());\n\n  cmdQueue_->submit(*cmdBuf);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/CommonTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/Common.h>\n\n#include <igl/tests/util/device/TestDevice.h>\n#include <igl/vulkan/CommandBuffer.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanTexture.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\nnamespace igl::tests {\n\n//\n// CommonTest\n//\n// Unit tests for Common.cpp\n//\n\nclass CommonTest : public ::testing::Test {};\n\n// getResultFromVkResult ***********************************************************************\nTEST(CommonTest, GetResultFromVkResultTest) {\n  EXPECT_TRUE(igl::vulkan::getResultFromVkResult(VK_SUCCESS).isOk());\n\n  EXPECT_EQ(igl::vulkan::getResultFromVkResult(VK_ERROR_LAYER_NOT_PRESENT).code,\n            Result::Code::Unimplemented);\n  EXPECT_EQ(igl::vulkan::getResultFromVkResult(VK_ERROR_EXTENSION_NOT_PRESENT).code,\n            Result::Code::Unimplemented);\n  EXPECT_EQ(igl::vulkan::getResultFromVkResult(VK_ERROR_FEATURE_NOT_PRESENT).code,\n            Result::Code::Unimplemented);\n\n  EXPECT_EQ(igl::vulkan::getResultFromVkResult(VK_ERROR_INCOMPATIBLE_DRIVER).code,\n            Result::Code::Unsupported);\n  EXPECT_EQ(igl::vulkan::getResultFromVkResult(VK_ERROR_FORMAT_NOT_SUPPORTED).code,\n            Result::Code::Unsupported);\n\n  EXPECT_EQ(igl::vulkan::getResultFromVkResult(VK_ERROR_OUT_OF_HOST_MEMORY).code,\n            Result::Code::ArgumentOutOfRange);\n  EXPECT_EQ(igl::vulkan::getResultFromVkResult(VK_ERROR_OUT_OF_DEVICE_MEMORY).code,\n            Result::Code::ArgumentOutOfRange);\n  EXPECT_EQ(igl::vulkan::getResultFromVkResult(VK_ERROR_OUT_OF_POOL_MEMORY).code,\n            Result::Code::ArgumentOutOfRange);\n  EXPECT_EQ(igl::vulkan::getResultFromVkResult(VK_ERROR_TOO_MANY_OBJECTS).code,\n            Result::Code::ArgumentOutOfRange);\n}\n\n// setResultFrom ***********************************************************************\nTEST(CommonTest, SetResultFromTest) {\n  Result result;\n  igl::vulkan::setResultFrom(&result, VK_SUCCESS);\n  EXPECT_TRUE(result.isOk());\n\n  igl::vulkan::setResultFrom(&result, VK_ERROR_LAYER_NOT_PRESENT);\n  EXPECT_EQ(result.code, Result::Code::Unimplemented);\n  igl::vulkan::setResultFrom(&result, VK_ERROR_EXTENSION_NOT_PRESENT);\n  EXPECT_EQ(result.code, Result::Code::Unimplemented);\n  igl::vulkan::setResultFrom(&result, VK_ERROR_FEATURE_NOT_PRESENT);\n  EXPECT_EQ(result.code, Result::Code::Unimplemented);\n\n  igl::vulkan::setResultFrom(&result, VK_ERROR_INCOMPATIBLE_DRIVER);\n  EXPECT_EQ(result.code, Result::Code::Unsupported);\n  igl::vulkan::setResultFrom(&result, VK_ERROR_FORMAT_NOT_SUPPORTED);\n  EXPECT_EQ(result.code, Result::Code::Unsupported);\n\n  igl::vulkan::setResultFrom(&result, VK_ERROR_OUT_OF_HOST_MEMORY);\n  EXPECT_EQ(result.code, Result::Code::ArgumentOutOfRange);\n  igl::vulkan::setResultFrom(&result, VK_ERROR_OUT_OF_DEVICE_MEMORY);\n  EXPECT_EQ(result.code, Result::Code::ArgumentOutOfRange);\n  igl::vulkan::setResultFrom(&result, VK_ERROR_OUT_OF_POOL_MEMORY);\n  EXPECT_EQ(result.code, Result::Code::ArgumentOutOfRange);\n  igl::vulkan::setResultFrom(&result, VK_ERROR_TOO_MANY_OBJECTS);\n  EXPECT_EQ(result.code, Result::Code::ArgumentOutOfRange);\n}\n\n// stencilOperationToVkStencilOp ***********************************************************\nTEST(CommonTest, StencilOperationToVkStencilOpTest) {\n  EXPECT_EQ(igl::vulkan::stencilOperationToVkStencilOp(igl::StencilOperation::Keep),\n            VK_STENCIL_OP_KEEP);\n  EXPECT_EQ(igl::vulkan::stencilOperationToVkStencilOp(igl::StencilOperation::Zero),\n            VK_STENCIL_OP_ZERO);\n  EXPECT_EQ(igl::vulkan::stencilOperationToVkStencilOp(igl::StencilOperation::Replace),\n            VK_STENCIL_OP_REPLACE);\n  EXPECT_EQ(igl::vulkan::stencilOperationToVkStencilOp(igl::StencilOperation::IncrementClamp),\n            VK_STENCIL_OP_INCREMENT_AND_CLAMP);\n  EXPECT_EQ(igl::vulkan::stencilOperationToVkStencilOp(igl::StencilOperation::DecrementClamp),\n            VK_STENCIL_OP_DECREMENT_AND_CLAMP);\n  EXPECT_EQ(igl::vulkan::stencilOperationToVkStencilOp(igl::StencilOperation::Invert),\n            VK_STENCIL_OP_INVERT);\n  EXPECT_EQ(igl::vulkan::stencilOperationToVkStencilOp(igl::StencilOperation::IncrementWrap),\n            VK_STENCIL_OP_INCREMENT_AND_WRAP);\n  EXPECT_EQ(igl::vulkan::stencilOperationToVkStencilOp(igl::StencilOperation::DecrementWrap),\n            VK_STENCIL_OP_DECREMENT_AND_WRAP);\n}\n\n// compareFunctionToVkCompareOp ********************************************************\nTEST(CommonTest, CompareFunctionToVkCompareOpTest) {\n  EXPECT_EQ(igl::vulkan::compareFunctionToVkCompareOp(igl::CompareFunction::Never),\n            VK_COMPARE_OP_NEVER);\n  EXPECT_EQ(igl::vulkan::compareFunctionToVkCompareOp(igl::CompareFunction::Less),\n            VK_COMPARE_OP_LESS);\n  EXPECT_EQ(igl::vulkan::compareFunctionToVkCompareOp(igl::CompareFunction::Equal),\n            VK_COMPARE_OP_EQUAL);\n  EXPECT_EQ(igl::vulkan::compareFunctionToVkCompareOp(igl::CompareFunction::LessEqual),\n            VK_COMPARE_OP_LESS_OR_EQUAL);\n  EXPECT_EQ(igl::vulkan::compareFunctionToVkCompareOp(igl::CompareFunction::Greater),\n            VK_COMPARE_OP_GREATER);\n  EXPECT_EQ(igl::vulkan::compareFunctionToVkCompareOp(igl::CompareFunction::NotEqual),\n            VK_COMPARE_OP_NOT_EQUAL);\n  EXPECT_EQ(igl::vulkan::compareFunctionToVkCompareOp(igl::CompareFunction::GreaterEqual),\n            VK_COMPARE_OP_GREATER_OR_EQUAL);\n  EXPECT_EQ(igl::vulkan::compareFunctionToVkCompareOp(igl::CompareFunction::AlwaysPass),\n            VK_COMPARE_OP_ALWAYS);\n}\n\n// getVulkanSampleCountFlags **************************************************************\nTEST(CommonTest, GetVulkanSampleCountFlagsTest) {\n  EXPECT_EQ(igl::vulkan::getVulkanSampleCountFlags(1u), VK_SAMPLE_COUNT_1_BIT);\n  EXPECT_EQ(igl::vulkan::getVulkanSampleCountFlags(2u), VK_SAMPLE_COUNT_2_BIT);\n  EXPECT_EQ(igl::vulkan::getVulkanSampleCountFlags(4u), VK_SAMPLE_COUNT_4_BIT);\n  EXPECT_EQ(igl::vulkan::getVulkanSampleCountFlags(8u), VK_SAMPLE_COUNT_8_BIT);\n  EXPECT_EQ(igl::vulkan::getVulkanSampleCountFlags(16u), VK_SAMPLE_COUNT_16_BIT);\n  EXPECT_EQ(igl::vulkan::getVulkanSampleCountFlags(32u), VK_SAMPLE_COUNT_32_BIT);\n  EXPECT_EQ(igl::vulkan::getVulkanSampleCountFlags(64u), VK_SAMPLE_COUNT_64_BIT);\n}\n\n// atVkLayer *******************************************************************************\nTEST(CommonTest, AtVkLayerTest) {\n  const igl::TextureRangeDesc texRangeDesc = TextureRangeDesc::newCube(0, 0, 1, 1, 0, 1);\n  constexpr uint32_t layerOrFaceId = 7;\n\n  constexpr TextureType textureTypes[] = {\n      TextureType::Invalid,\n      TextureType::TwoD,\n      TextureType::TwoDArray,\n      TextureType::ThreeD,\n      TextureType::Cube,\n      TextureType::ExternalImage,\n  };\n\n  for (const auto textureType : textureTypes) {\n    const auto newTexRangeDesc = igl::vulkan::atVkLayer(textureType, texRangeDesc, layerOrFaceId);\n\n    EXPECT_EQ(newTexRangeDesc.face, textureType == TextureType::Cube ? layerOrFaceId : 0);\n    EXPECT_EQ(newTexRangeDesc.layer, textureType == TextureType::Cube ? 0 : layerOrFaceId);\n    EXPECT_EQ(newTexRangeDesc.numFaces, textureType == TextureType::Cube ? 1 : 6);\n    EXPECT_EQ(newTexRangeDesc.x, texRangeDesc.x);\n    EXPECT_EQ(newTexRangeDesc.y, texRangeDesc.y);\n    EXPECT_EQ(newTexRangeDesc.z, texRangeDesc.z);\n    EXPECT_EQ(newTexRangeDesc.width, texRangeDesc.width);\n    EXPECT_EQ(newTexRangeDesc.height, texRangeDesc.height);\n    EXPECT_EQ(newTexRangeDesc.depth, texRangeDesc.depth);\n    EXPECT_EQ(newTexRangeDesc.mipLevel, texRangeDesc.mipLevel);\n    EXPECT_EQ(newTexRangeDesc.numMipLevels, texRangeDesc.numMipLevels);\n    EXPECT_EQ(newTexRangeDesc.numLayers, 1);\n  }\n}\n\n// getNumImagePlanes ************************************************************************\nTEST(CommonTest, GetNumImagePlanesTest) {\n  EXPECT_EQ(igl::vulkan::getNumImagePlanes(VK_FORMAT_UNDEFINED), 0);\n  EXPECT_EQ(igl::vulkan::getNumImagePlanes(VK_FORMAT_G8_B8R8_2PLANE_420_UNORM), 2);\n  EXPECT_EQ(igl::vulkan::getNumImagePlanes(VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM), 3);\n  EXPECT_EQ(igl::vulkan::getNumImagePlanes(VK_FORMAT_R8G8B8A8_UNORM), 1);\n  EXPECT_EQ(igl::vulkan::getNumImagePlanes(VK_FORMAT_R8G8B8A8_SRGB), 1);\n  EXPECT_EQ(igl::vulkan::getNumImagePlanes(VK_FORMAT_R8G8B8A8_SINT), 1);\n  EXPECT_EQ(igl::vulkan::getNumImagePlanes(VK_FORMAT_R8G8B8A8_UINT), 1);\n}\n\nclass CommonWithDeviceTest : public ::testing::Test {\n public:\n  // Set up common resources.\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    device_ = igl::tests::util::device::createTestDevice(igl::BackendType::Vulkan);\n    ASSERT_TRUE(device_ != nullptr);\n    auto& device = static_cast<igl::vulkan::Device&>(*device_);\n    context_ = &device.getVulkanContext();\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  vulkan::VulkanContext* context_ = nullptr;\n};\n\n// transitionToGeneral ********************************************************\nTEST_F(CommonWithDeviceTest, TransitionToGeneralTest) {\n  Result result;\n\n  const CommandQueueDesc queueDesc{};\n  auto commandQueue = device_->createCommandQueue(queueDesc, &result);\n  EXPECT_TRUE(result.isOk());\n\n  const CommandBufferDesc cmdBufferDesc{};\n  const auto cmdBuffer = commandQueue->createCommandBuffer(cmdBufferDesc, &result);\n  EXPECT_TRUE(result.isOk());\n\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 1,\n                                                 1,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Storage);\n  const auto texture = device_->createTexture(texDesc, &result);\n  EXPECT_TRUE(result.isOk());\n\n  igl::vulkan::transitionToGeneral(\n      static_cast<const igl::vulkan::CommandBuffer*>(cmdBuffer.get())->getVkCommandBuffer(),\n      texture.get());\n\n  const igl::vulkan::Texture& tex = static_cast<igl::vulkan::Texture&>(*texture);\n  const vulkan::VulkanImage& img = tex.getVulkanTexture().image_;\n\n  EXPECT_EQ(img.imageLayout_, VK_IMAGE_LAYOUT_GENERAL);\n}\n} // namespace igl::tests\n\n#endif\n"
  },
  {
    "path": "src/igl/tests/vulkan/ComputeCommandEncoderVulkanTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/ComputeCommandEncoder.h>\n#include <igl/Device.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass ComputeCommandEncoderVulkanTest : public ::testing::Test {\n public:\n  ComputeCommandEncoderVulkanTest() = default;\n  ~ComputeCommandEncoderVulkanTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n\n    Result ret;\n    cmdQueue_ = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(cmdQueue_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n};\n\nTEST_F(ComputeCommandEncoderVulkanTest, CreateAndEndEncoding) {\n  Result ret;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  auto encoder = cmdBuf->createComputeCommandEncoder();\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n}\n\nTEST_F(ComputeCommandEncoderVulkanTest, BindPushConstants) {\n  // NOTE: bindPushConstants requires a compute pipeline to be bound first.\n  // Since creating a compute pipeline requires a compute shader, and this is\n  // just testing the encoder API, we skip this test. The push constants\n  // functionality is tested through integration tests that have full pipelines.\n  GTEST_SKIP() << \"bindPushConstants requires a bound compute pipeline with a shader\";\n}\n\nTEST_F(ComputeCommandEncoderVulkanTest, DebugGroupLabels) {\n  Result ret;\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  auto encoder = cmdBuf->createComputeCommandEncoder();\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->pushDebugGroupLabel(\"ComputeGroup\", Color(0.0f, 1.0f, 0.0f, 1.0f));\n  encoder->popDebugGroupLabel();\n\n  encoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/DescriptorPoolArenaTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../data/ShaderData.h\"\n#include \"../data/TextureData.h\"\n#include \"../util/Common.h\"\n#include \"../util/TestDevice.h\"\n\n#include <memory>\n#include <vector>\n#include <igl/Buffer.h>\n#include <igl/CommandBuffer.h>\n#include <igl/Device.h>\n#include <igl/Framebuffer.h>\n#include <igl/NameHandle.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/RenderPass.h>\n#include <igl/RenderPipelineState.h>\n#include <igl/SamplerState.h>\n#include <igl/Texture.h>\n#include <igl/VertexInputState.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\n/// @brief Tests for Vulkan DescriptorPoolsArena caching behavior.\n///\n/// The DescriptorPoolsArena is a private class inside VulkanContext.cpp that manages\n/// VkDescriptorSet allocation and caching. These tests exercise it indirectly through\n/// the IGL API by issuing draw calls with bound resources, which triggers the\n/// updateBindingsTextures/Buffers -> arena.getNextDescriptorSet() path.\n///\n/// Code paths exercised:\n///   1. New pool path (isNewPool_=true): Fresh descriptor sets allocated and cached\n///   2. Cached reuse path (isNewPool_=false): Descriptor sets reused from recycled pools\n///   3. Pool exhaustion (numRemainingDSetsInPool_==0): switchToNewDescriptorPool()\n///   4. Extinct pool recycling: Pool + cached descriptor sets reused\n///   5. allocatedDSet_ save/restore via ExtinctDescriptorPool\n///   6. New pool creation fallback: No extinct pool ready, brand-new pool created\nclass DescriptorPoolArenaTest : public ::testing::Test {\n public:\n  DescriptorPoolArenaTest() = default;\n  ~DescriptorPoolArenaTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n\n    Result ret;\n    cmdQueue_ = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    // Offscreen color texture (render target)\n    const auto colorTexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 4,\n                                                 4,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Attachment);\n    colorTex_ = iglDev_->createTexture(colorTexDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(colorTex_, nullptr);\n\n    // Framebuffer\n    const FramebufferDesc fbDesc = {\n        .colorAttachments = {{.texture = colorTex_}},\n    };\n    framebuffer_ = iglDev_->createFramebuffer(fbDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(framebuffer_, nullptr);\n\n    // Shader stages\n    std::unique_ptr<IShaderStages> stages;\n    util::createSimpleShaderStages(iglDev_, stages);\n    shaderStages_ = std::move(stages);\n    ASSERT_NE(shaderStages_, nullptr);\n\n    // Vertex input state: position (Float4) at location 0, uv (Float2) at location 1\n    const VertexInputStateDesc inputDesc = {\n        .numAttributes = 2,\n        .attributes =\n            {\n                {\n                    .bufferIndex = data::shader::kSimplePosIndex,\n                    .format = VertexAttributeFormat::Float4,\n                    .offset = 0,\n                    .name = std::string(data::shader::kSimplePos),\n                    .location = 0,\n                },\n                {\n                    .bufferIndex = data::shader::kSimpleUvIndex,\n                    .format = VertexAttributeFormat::Float2,\n                    .offset = 0,\n                    .name = std::string(data::shader::kSimpleUv),\n                    .location = 1,\n                },\n            },\n        .numInputBindings = 2,\n        .inputBindings =\n            {\n                {.stride = sizeof(float) * 4},\n                {.stride = sizeof(float) * 2},\n            },\n    };\n    vertexInputState_ = iglDev_->createVertexInputState(inputDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(vertexInputState_, nullptr);\n\n    // Render pipeline (Triangle topology)\n    const RenderPipelineDesc trianglePipelineDesc = {\n        .topology = PrimitiveType::Triangle,\n        .vertexInputState = vertexInputState_,\n        .shaderStages = shaderStages_,\n        .targetDesc = {.colorAttachments = {{.textureFormat = colorTex_->getFormat()}}},\n        .cullMode = igl::CullMode::Disabled,\n        .fragmentUnitSamplerMap = {{0, IGL_NAMEHANDLE(data::shader::kSimpleSampler)}},\n    };\n    pipeline_ = iglDev_->createRenderPipeline(trianglePipelineDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(pipeline_, nullptr);\n\n    // Second pipeline (Line topology) for pipeline-switch test\n    const RenderPipelineDesc linePipelineDesc = {\n        .topology = PrimitiveType::Line,\n        .vertexInputState = vertexInputState_,\n        .shaderStages = shaderStages_,\n        .targetDesc = {.colorAttachments = {{.textureFormat = colorTex_->getFormat()}}},\n        .cullMode = igl::CullMode::Disabled,\n        .fragmentUnitSamplerMap = {{0, IGL_NAMEHANDLE(data::shader::kSimpleSampler)}},\n    };\n    pipelineLine_ = iglDev_->createRenderPipeline(linePipelineDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(pipelineLine_, nullptr);\n\n    // Sampler state\n    sampler_ = iglDev_->createSamplerState(SamplerStateDesc{}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(sampler_, nullptr);\n\n    // Sampled texture (2x2 RGBA, with dummy pixel data)\n    const auto sampledTexDesc = TextureDesc::new2D(\n        TextureFormat::RGBA_UNorm8, 2, 2, TextureDesc::TextureUsageBits::Sampled);\n    sampledTex_ = iglDev_->createTexture(sampledTexDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(sampledTex_, nullptr);\n    ret = sampledTex_->upload(sampledTex_->getFullRange(0), data::texture::kTexRgba2x2.data());\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n    // Vertex buffer (single triangle: 3 vertices x Float4)\n    const float verts[] = {\n        0.0f, 0.5f, 0.0f, 1.0f, -0.5f, -0.5f, 0.0f, 1.0f, 0.5f, -0.5f, 0.0f, 1.0f};\n    vb_ = iglDev_->createBuffer(\n        BufferDesc{\n            .type = BufferDesc::BufferTypeBits::Vertex,\n            .data = verts,\n            .length = sizeof(verts),\n        },\n        &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(vb_, nullptr);\n\n    // UV buffer (3 vertices x Float2)\n    const float uvs[] = {0.5f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f};\n    uv_ = iglDev_->createBuffer(\n        BufferDesc{\n            .type = BufferDesc::BufferTypeBits::Vertex,\n            .data = uvs,\n            .length = sizeof(uvs),\n        },\n        &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(uv_, nullptr);\n\n    // Uniform buffer (256 bytes, for buffer binding test)\n    uniformBuf_ = iglDev_->createBuffer(\n        BufferDesc{\n            .type = BufferDesc::BufferTypeBits::Uniform,\n            .length = 256,\n            .storage = ResourceStorage::Shared,\n        },\n        &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(uniformBuf_, nullptr);\n    const std::vector<float> uniformData(64, 1.0f);\n    ret = uniformBuf_->upload(uniformData.data(), BufferRange(256, 0));\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  }\n\n  void TearDown() override {}\n\n protected:\n  /// Encode numDraws draw calls in a single command buffer, submit, and wait for completion.\n  void encodeDrawCalls(const uint32_t numDraws,\n                       const bool bindBuffer = false,\n                       const std::shared_ptr<IRenderPipelineState>& altPipeline = nullptr,\n                       const uint32_t switchAfter = 0) {\n    Result ret;\n    const auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc{}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(cmdBuf, nullptr);\n\n    const RenderPassDesc rpDesc = {\n        .colorAttachments = {{\n            .loadAction = LoadAction::Clear,\n            .storeAction = StoreAction::Store,\n        }},\n    };\n\n    const auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, framebuffer_, {}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(encoder, nullptr);\n\n    encoder->bindRenderPipelineState(pipeline_);\n    encoder->bindTexture(0, BindTarget::kFragment, sampledTex_.get());\n    encoder->bindSamplerState(0, BindTarget::kFragment, sampler_.get());\n    encoder->bindVertexBuffer(data::shader::kSimplePosIndex, *vb_);\n    encoder->bindVertexBuffer(data::shader::kSimpleUvIndex, *uv_);\n\n    if (bindBuffer) {\n      encoder->bindBuffer(0, uniformBuf_.get(), 0, 256);\n    }\n\n    for (uint32_t i = 0; i < numDraws; i++) {\n      if (altPipeline && switchAfter > 0 && i == switchAfter) {\n        encoder->bindRenderPipelineState(altPipeline);\n      }\n      encoder->draw(3); // 3 vertices = 1 triangle\n    }\n\n    encoder->endEncoding();\n    cmdQueue_->submit(*cmdBuf);\n    cmdBuf->waitUntilCompleted();\n  }\n\n  /// Shorthand: encode N draw calls and wait for GPU completion (one \"frame\").\n  void renderFrame(const uint32_t numDraws, const bool bindBuffer = false) {\n    encodeDrawCalls(numDraws, bindBuffer);\n  }\n\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  std::shared_ptr<ITexture> colorTex_;\n  std::shared_ptr<ITexture> sampledTex_;\n  std::shared_ptr<ISamplerState> sampler_;\n  std::shared_ptr<IRenderPipelineState> pipeline_;\n  std::shared_ptr<IRenderPipelineState> pipelineLine_;\n  std::shared_ptr<IShaderStages> shaderStages_;\n  std::shared_ptr<IVertexInputState> vertexInputState_;\n  std::unique_ptr<IBuffer> vb_;\n  std::unique_ptr<IBuffer> uv_;\n  std::unique_ptr<IBuffer> uniformBuf_;\n};\n\n// Test 1: A single draw triggers one getNextDescriptorSet() on a fresh arena (new pool path).\nTEST_F(DescriptorPoolArenaTest, SingleDrawAllocatesDescriptorSet) {\n  renderFrame(1);\n}\n\n// Test 2: Multiple draws within one command buffer allocate multiple descriptor sets\n// from the same pool (pool has capacity 64). Exercises repeated new-pool-path allocations.\nTEST_F(DescriptorPoolArenaTest, MultipleDrawsInSingleCommandBuffer) {\n  renderFrame(10);\n}\n\n// Test 3: 65 draws exhaust the first pool (capacity 64) and trigger switchToNewDescriptorPool().\n// Since this is the first frame, no extinct pools exist -> new pool creation fallback (path 6).\nTEST_F(DescriptorPoolArenaTest, ExhaustDescriptorPool) {\n  renderFrame(65);\n}\n\n// Test 4: Multiple frames exercise extinct pool recycling (path 4) and cached descriptor set\n// reuse (path 2). Frame 0 creates a fresh pool. Subsequent frames push the previous pool\n// to extinct and recycle it (if GPU work is done), reusing cached descriptor sets.\nTEST_F(DescriptorPoolArenaTest, MultipleFramesRecyclesPools) {\n  for (int frame = 0; frame < 4; frame++) {\n    renderFrame(10);\n  }\n}\n\n// Test 5: All paths combined — pool exhaustion + extinct pool recycling + cached reuse.\n// Each frame exhausts one pool (64 draws) and partially fills a second (6 draws).\n// On subsequent frames, both extinct pools become candidates for recycling.\nTEST_F(DescriptorPoolArenaTest, ExhaustAndRecycleAcrossFrames) {\n  for (int frame = 0; frame < 4; frame++) {\n    renderFrame(70);\n  }\n}\n\n// Test 6: Bind both a texture+sampler AND a uniform buffer, exercising both\n// CombinedImageSamplers and Buffers arenas independently in the same draw.\nTEST_F(DescriptorPoolArenaTest, MultipleResourceTypesBindings) {\n  for (int frame = 0; frame < 4; frame++) {\n    renderFrame(10, /*bindBuffer=*/true);\n  }\n}\n\n// Test 7: Pipeline switch within a single command buffer. Exercises the pipeline dirty flag\n// logic and arena lookup when the bound pipeline changes mid-encoding.\nTEST_F(DescriptorPoolArenaTest, PipelineSwitchWithDraws) {\n  encodeDrawCalls(\n      /*numDraws=*/10,\n      /*bindBuffer=*/false,\n      /*altPipeline=*/pipelineLine_,\n      /*switchAfter=*/5);\n}\n\n// Test 8: 200 draws in one frame exhaust 3 pools (3 x 64 = 192) and partially fill a 4th.\n// All pools are pushed to the extinct deque within the same submit handle.\nTEST_F(DescriptorPoolArenaTest, StressPoolExhaustion) {\n  renderFrame(200);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/CommandBuffer.h>\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n#include <igl/vulkan/Buffer.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/HWDevice.h>\n#include <igl/vulkan/PlatformDevice.h>\n#include <igl/vulkan/SamplerState.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanBuffer.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanFeatures.h>\n#include <igl/vulkan/VulkanTexture.h>\n#endif\n\nnamespace igl::tests {\n\nclass DeviceVulkanTest : public ::testing::Test {\n public:\n  DeviceVulkanTest() = default;\n  ~DeviceVulkanTest() override = default;\n\n  // Set up common resources. This will create a device\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n};\n\n/// CreateCommandQueue\n/// Once the backend is more mature, we will use the IGL level test. For now\n/// this is just here as a proof of concept.\nTEST_F(DeviceVulkanTest, CreateCommandQueue) {\n  Result ret;\n  CommandQueueDesc desc{};\n\n  auto cmdQueue = iglDev_->createCommandQueue(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cmdQueue, nullptr);\n}\n\nTEST_F(DeviceVulkanTest, PlatformDevice) {\n  auto& platformDevice = iglDev_->getPlatformDevice();\n  auto& vulkanPlatformDevice = static_cast<vulkan::PlatformDevice&>(platformDevice);\n  Result ret;\n  auto depthTexture = vulkanPlatformDevice.createTextureFromNativeDepth(2, 2, &ret);\n  ASSERT_TRUE(ret.isOk());\n  // ASSERT_TRUE(depthTexture != nullptr); // no swapchain so null\n  auto texture = vulkanPlatformDevice.createTextureFromNativeDrawable(&ret);\n  ASSERT_TRUE(ret.isOk());\n  // ASSERT_TRUE(texture != nullptr); // no swapchain so null\n\n  CommandQueueDesc desc{};\n\n  auto cmdQueue = iglDev_->createCommandQueue(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cmdQueue, nullptr);\n  auto cmdBuf = cmdQueue->createCommandBuffer(CommandBufferDesc(), &ret);\n  auto submitHandle = cmdQueue->submit(*cmdBuf);\n\n  // NOLINTNEXTLINE(readability-qualified-auto)\n  auto fence1 = vulkanPlatformDevice.getVkFenceFromSubmitHandle(submitHandle);\n  ASSERT_NE(fence1, VK_NULL_HANDLE);\n\n  vulkanPlatformDevice.waitOnSubmitHandle(submitHandle);\n}\n\nTEST_F(DeviceVulkanTest, Semaphores) {\n  auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n  auto& ctx = device.getVulkanContext();\n\n  // binary semaphore\n  {\n    auto semaphore = std::make_unique<igl::vulkan::VulkanSemaphore>(\n        ctx.vf_, ctx.getVkDevice(), false, \"semaphore\");\n\n    ASSERT_NE(semaphore, nullptr);\n    ASSERT_NE(semaphore->getVkSemaphore(), VK_NULL_HANDLE);\n    ASSERT_EQ(semaphore->getFileDescriptor(), -1);\n  }\n  // timeline semaphore\n  {\n    auto semaphore = std::make_unique<igl::vulkan::VulkanSemaphore>(\n        ctx.vf_, ctx.getVkDevice(), 0, false, \"timelineSemaphore\");\n\n    ASSERT_NE(semaphore, nullptr);\n    ASSERT_NE(semaphore->getVkSemaphore(), VK_NULL_HANDLE);\n    ASSERT_EQ(semaphore->getFileDescriptor(), -1);\n  }\n}\n\nTEST_F(DeviceVulkanTest, PlatformDeviceSampler) {\n  Result ret;\n  TextureDesc textureDesc = TextureDesc::new2D(\n      igl::TextureFormat::RGBA_UNorm8, 2, 2, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(textureDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_TRUE(texture != nullptr);\n  auto* vulkanTexture = static_cast<vulkan::Texture*>(texture.get());\n  auto& innerVulkanTexture = vulkanTexture->getVulkanTexture();\n  (void)innerVulkanTexture.imageView_;\n  ASSERT_TRUE(innerVulkanTexture.textureId_ != 0);\n  SamplerStateDesc samplerDesc;\n  auto samplerState = iglDev_->createSamplerState(samplerDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  auto* vulkanSamplerState = static_cast<vulkan::SamplerState*>(samplerState.get());\n  auto samplerId = vulkanSamplerState->getSamplerId();\n  ASSERT_EQ(samplerId, 1);\n  ASSERT_FALSE(vulkanSamplerState->isYUV());\n\n  CommandQueueDesc cmdQueueDesc{};\n\n  auto cmdQueue = iglDev_->createCommandQueue(cmdQueueDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cmdQueue, nullptr);\n  auto cmdBuf = cmdQueue->createCommandBuffer(CommandBufferDesc(), &ret);\n  cmdQueue->submit(*cmdBuf);\n}\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\nTEST_F(DeviceVulkanTest, StagingDeviceLargeBufferTest) {\n  Result ret;\n\n  // create a GPU device-local storage buffer large enough to force Vulkan staging device to upload\n  // it in multiple chunks\n  igl::vulkan::VulkanContext& ctx =\n      static_cast<igl::vulkan::Device*>(iglDev_.get())->getVulkanContext();\n\n  const VkDeviceSize kMaxStagingBufferSize = ctx.stagingDevice_->getMaxStagingBufferSize();\n\n  const std::array<VkDeviceSize, 2> kDesiredBufferSizes = {kMaxStagingBufferSize * 2u,\n                                                           kMaxStagingBufferSize + 2u};\n\n  size_t maxBufferLength = 0;\n  iglDev_->getFeatureLimits(DeviceFeatureLimits::MaxStorageBufferBytes, maxBufferLength);\n\n  for (const auto kDesiredBufferSize : kDesiredBufferSizes) {\n    const auto length = std::min<VkDeviceSize>(kDesiredBufferSize, maxBufferLength);\n\n    ASSERT_TRUE(length % 2 == 0);\n\n    const BufferDesc bufferDesc{\n        .type = BufferDesc::BufferTypeBits::Storage,\n        .length = static_cast<size_t>(length),\n        .storage = ResourceStorage::Private,\n    };\n    const std::shared_ptr<IBuffer> buffer = iglDev_->createBuffer(bufferDesc, &ret);\n\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n    ASSERT_TRUE(buffer != nullptr);\n\n    // upload\n    {\n      std::vector<uint16_t> bufferData(length / 2);\n\n      uint16_t* data = bufferData.data();\n\n      for (size_t i = 0; i != length / 2; i++) {\n        data[i] = uint16_t(i & 0xffff);\n      }\n\n      ret = buffer->upload(data, BufferRange(length, 0));\n\n      ASSERT_EQ(ret.code, Result::Code::Ok);\n    }\n    // download\n    {\n      // map() will create a CPU-copy of data\n      const auto* data = static_cast<uint16_t*>(buffer->map(BufferRange(length, 0), &ret));\n\n      ASSERT_EQ(ret.code, Result::Code::Ok);\n\n      for (size_t i = 0; i != length / 2; i++) {\n        ASSERT_EQ(data[i], uint16_t(i & 0xffff));\n      }\n\n      buffer->unmap();\n    }\n\n    ASSERT_EQ(ret.code, Result::Code::Ok);\n  }\n}\n\nTEST_F(DeviceVulkanTest, DestroyEmptyHandles) {\n  igl::destroy(iglDev_.get(), BindGroupTextureHandle{});\n  igl::destroy(iglDev_.get(), BindGroupBufferHandle{});\n  igl::destroy(iglDev_.get(), TextureHandle{});\n  igl::destroy(iglDev_.get(), SamplerHandle{});\n  igl::destroy(iglDev_.get(), DepthStencilStateHandle{});\n}\n\nTEST_F(DeviceVulkanTest, CurrentThreadIdTest) {\n  igl::vulkan::VulkanContext& ctx =\n      static_cast<igl::vulkan::Device*>(iglDev_.get())->getVulkanContext();\n\n  ctx.ensureCurrentContextThread();\n}\n\nTEST_F(DeviceVulkanTest, EnsureValidation) {\n  GTEST_SKIP() << \"Some tests are still running without Validation Layers enabled, so this test \"\n                  \"has been temporarily disabled.\";\n\n#if !defined(IGL_DISABLE_VALIDATION)\n  // @fb-only\n  // igl::vulkan::VulkanContext& ctx =\n  //   static_cast<igl::vulkan::Device*>(iglDev_.get())->getVulkanContext();\n\n  // ASSERT_TRUE(ctx.areValidationLayersEnabled());\n#endif // !defined(IGL_DISABLE_VALIDATION)\n}\n\nTEST_F(DeviceVulkanTest, UpdateGlslangResource) {\n  const igl::vulkan::VulkanContext& ctx =\n      static_cast<const igl::vulkan::Device*>(iglDev_.get())->getVulkanContext();\n\n  ivkUpdateGlslangResource(nullptr, nullptr, nullptr);\n\n  glslang_resource_t res = {};\n  const VkPhysicalDeviceProperties& props = ctx.getVkPhysicalDeviceProperties();\n\n  ivkUpdateGlslangResource(&res, &props, nullptr);\n\n  ASSERT_EQ(res.max_vertex_attribs, (int)props.limits.maxVertexInputAttributes);\n  ASSERT_EQ(res.max_clip_distances, (int)props.limits.maxClipDistances);\n  ASSERT_EQ(res.max_compute_work_group_count_x, (int)props.limits.maxComputeWorkGroupCount[0]);\n  ASSERT_EQ(res.max_compute_work_group_count_y, (int)props.limits.maxComputeWorkGroupCount[1]);\n  ASSERT_EQ(res.max_compute_work_group_count_z, (int)props.limits.maxComputeWorkGroupCount[2]);\n  ASSERT_EQ(res.max_compute_work_group_size_x, (int)props.limits.maxComputeWorkGroupSize[0]);\n  ASSERT_EQ(res.max_compute_work_group_size_y, (int)props.limits.maxComputeWorkGroupSize[1]);\n  ASSERT_EQ(res.max_compute_work_group_size_z, (int)props.limits.maxComputeWorkGroupSize[2]);\n  ASSERT_EQ(res.max_vertex_output_components, (int)props.limits.maxVertexOutputComponents);\n  ASSERT_EQ(res.max_geometry_input_components, (int)props.limits.maxGeometryInputComponents);\n  ASSERT_EQ(res.max_geometry_output_components, (int)props.limits.maxGeometryOutputComponents);\n  ASSERT_EQ(res.max_fragment_input_components, (int)props.limits.maxFragmentInputComponents);\n  ASSERT_EQ(res.max_geometry_output_vertices, (int)props.limits.maxGeometryOutputVertices);\n  ASSERT_EQ(res.max_geometry_total_output_components,\n            (int)props.limits.maxGeometryTotalOutputComponents);\n  ASSERT_EQ(res.max_tess_control_input_components,\n            (int)props.limits.maxTessellationControlPerVertexInputComponents);\n  ASSERT_EQ(res.max_tess_control_output_components,\n            (int)props.limits.maxTessellationControlPerVertexOutputComponents);\n  ASSERT_EQ(res.max_tess_evaluation_input_components,\n            (int)props.limits.maxTessellationEvaluationInputComponents);\n  ASSERT_EQ(res.max_tess_evaluation_output_components,\n            (int)props.limits.maxTessellationEvaluationOutputComponents);\n  ASSERT_EQ(res.max_viewports, (int)props.limits.maxViewports);\n  ASSERT_EQ(res.max_cull_distances, (int)props.limits.maxCullDistances);\n  ASSERT_EQ(res.max_combined_clip_and_cull_distances,\n            (int)props.limits.maxCombinedClipAndCullDistances);\n}\n\nTEST_F(DeviceVulkanTest, BufferDeviceAddress) {\n  const igl::vulkan::VulkanContext& ctx =\n      static_cast<const igl::vulkan::Device*>(iglDev_.get())->getVulkanContext();\n\n  if (!ctx.features().has_VK_KHR_buffer_device_address) {\n    return;\n  }\n\n  Result ret;\n\n  auto buffer = iglDev_->createBuffer(\n      BufferDesc{\n          .type = BufferDesc::BufferTypeBits::Uniform,\n          .length = 256,\n          .storage = ResourceStorage::Shared,\n      },\n      &ret);\n\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  if (!buffer) {\n    return;\n  }\n\n  ASSERT_NE(buffer->gpuAddress(), 0u);\n}\n\nGTEST_TEST(VulkanContext, DescriptorIndexing) {\n  const igl::vulkan::VulkanContextConfig config = {\n#if IGL_PLATFORM_MACOSX\n      .terminateOnValidationError = false,\n#elif IGL_DEBUG\n      .terminateOnValidationError = true,\n#ifdef IGL_DISABLE_VALIDATION\n      .enableValidation = false,\n#else\n      .enableValidation = true,\n#endif // IGL_DISABLE_VALIDATION\n#else\n      .terminateOnValidationError = false,\n#ifdef IGL_DISABLE_VALIDATION\n      .enableValidation = false,\n#else\n      .enableValidation = true,\n#endif // IGL_DISABLE_VALIDATION\n#endif\n      .enableExtraLogs = true,\n      .enableDescriptorIndexing = true,\n  };\n\n  std::unique_ptr<igl::vulkan::Device> iglDev = nullptr;\n\n  auto ctx = igl::vulkan::HWDevice::createContext(config, nullptr);\n\n  Result ret;\n\n  std::vector<HWDeviceDesc> devices =\n      igl::vulkan::HWDevice::queryDevices(*ctx, HWDeviceQueryDesc(HWDeviceType::Unknown), &ret);\n\n  ASSERT_TRUE(!devices.empty());\n\n  if (ret.isOk()) {\n    igl::vulkan::VulkanFeatures features(config);\n    features.populateWithAvailablePhysicalDeviceFeatures(\n        *ctx,\n        (VkPhysicalDevice)devices[0].guid); // NOLINT(performance-no-int-to-ptr)\n\n    const VkPhysicalDeviceDescriptorIndexingFeaturesEXT& dif = features.featuresDescriptorIndexing;\n    if (!dif.shaderSampledImageArrayNonUniformIndexing ||\n        !dif.descriptorBindingUniformBufferUpdateAfterBind ||\n        !dif.descriptorBindingSampledImageUpdateAfterBind ||\n        !dif.descriptorBindingStorageImageUpdateAfterBind ||\n        !dif.descriptorBindingStorageBufferUpdateAfterBind ||\n        !dif.descriptorBindingUpdateUnusedWhilePending || !dif.descriptorBindingPartiallyBound ||\n        !dif.runtimeDescriptorArray) {\n      return;\n    }\n\n    iglDev = igl::vulkan::HWDevice::create(std::move(ctx),\n                                           devices[0],\n                                           0, // width\n                                           0, // height,\n                                           0,\n                                           nullptr,\n                                           &features,\n                                           \"VulkanContext Test\",\n                                           &ret);\n    if (!ret.isOk()) {\n      iglDev = nullptr;\n    }\n  }\n\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(iglDev, nullptr);\n\n  if (!iglDev) {\n    return;\n  }\n\n  const TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                 1,\n                                                 1,\n                                                 TextureDesc::TextureUsageBits::Sampled |\n                                                     TextureDesc::TextureUsageBits::Attachment);\n\n  auto texture = iglDev->createTexture(texDesc, &ret);\n  ASSERT_EQ(ret.code, Result::Code::Ok);\n  ASSERT_NE(texture, nullptr);\n\n  if (!texture) {\n    return;\n  }\n\n  ASSERT_NE(texture->getTextureId(), 0u);\n}\n\nTEST_F(DeviceVulkanTest, UniformBlockRingBufferTest) {\n  Result ret;\n\n  // Create uniform buffer with ring buffer hint\n  const size_t bufferSize = 256;\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Uniform,\n      .length = bufferSize,\n      .storage = ResourceStorage::Shared,\n      .hint = BufferDesc::BufferAPIHintBits::Ring | BufferDesc::BufferAPIHintBits::UniformBlock,\n  };\n  auto buffer = iglDev_->createBuffer(bufferDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n  ASSERT_NE(buffer, nullptr);\n\n  // Upload and verify data\n  std::vector<uint32_t> testData(bufferSize / sizeof(uint32_t));\n  for (unsigned int& i : testData) {\n    i = rand();\n  }\n\n  ret = buffer->upload(testData.data(), BufferRange(bufferSize, 0));\n  ASSERT_TRUE(ret.isOk());\n\n  // Create and submit multiple command buffers\n  CommandQueueDesc queueDesc{};\n  auto cmdQueue = iglDev_->createCommandQueue(queueDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  std::vector<VkBuffer> bufferHandles;\n  // By default the VulkanContextConfig.maxResourceCount is 3, so we should create at most 3 unique\n  // VkBuffers\n  for (int i = 0; i < 4; i++) {\n    auto cmdBuf = cmdQueue->createCommandBuffer(CommandBufferDesc(), &ret);\n    ASSERT_TRUE(ret.isOk());\n\n    auto* vulkanBufferCast = static_cast<vulkan::Buffer*>(buffer.get());\n    const auto& vulkanBuffer = vulkanBufferCast->currentVulkanBuffer();\n    bufferHandles.push_back(vulkanBuffer->getVkBuffer());\n    ASSERT_EQ(vulkanBuffer->getSize(), bufferSize);\n\n    cmdQueue->submit(*cmdBuf);\n  }\n\n  // Verify different buffer handles were used for the first 3\n  for (size_t i = 1; i < 3; i++) {\n    ASSERT_NE(bufferHandles[i], bufferHandles[i - 1]);\n  }\n  // First and last handles should be the same\n  ASSERT_EQ(bufferHandles[3], bufferHandles[0]);\n}\n#endif\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/DeviceExtendedVulkanTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/DepthStencilState.h>\n#include <igl/Device.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass DeviceExtendedVulkanTest : public ::testing::Test {\n public:\n  DeviceExtendedVulkanTest() = default;\n  ~DeviceExtendedVulkanTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n};\n\nTEST_F(DeviceExtendedVulkanTest, CreateDepthStencilState) {\n  Result ret;\n\n  DepthStencilStateDesc desc;\n  desc.isDepthWriteEnabled = true;\n  desc.compareFunction = CompareFunction::Less;\n\n  auto state = iglDev_->createDepthStencilState(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(state, nullptr);\n}\n\nTEST_F(DeviceExtendedVulkanTest, CreateDepthStencilStateWithStencil) {\n  Result ret;\n\n  DepthStencilStateDesc desc;\n  desc.isDepthWriteEnabled = true;\n  desc.compareFunction = CompareFunction::LessEqual;\n  desc.frontFaceStencil.stencilCompareFunction = CompareFunction::AlwaysPass;\n  desc.frontFaceStencil.stencilFailureOperation = StencilOperation::Keep;\n  desc.frontFaceStencil.depthFailureOperation = StencilOperation::Keep;\n  desc.frontFaceStencil.depthStencilPassOperation = StencilOperation::Replace;\n  desc.backFaceStencil = desc.frontFaceStencil;\n\n  auto state = iglDev_->createDepthStencilState(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(state, nullptr);\n}\n\nTEST_F(DeviceExtendedVulkanTest, GetShaderVersion) {\n  auto version = iglDev_->getShaderVersion();\n  EXPECT_GT(version.majorVersion, 0u);\n}\n\nTEST_F(DeviceExtendedVulkanTest, GetBackendVersion) {\n  auto version = iglDev_->getBackendVersion();\n  EXPECT_GT(version.majorVersion, 0u);\n}\n\nTEST_F(DeviceExtendedVulkanTest, GetCurrentDrawCount) {\n  auto drawCount = iglDev_->getCurrentDrawCount();\n  EXPECT_EQ(drawCount, 0u);\n}\n\nTEST_F(DeviceExtendedVulkanTest, GetBackendType) {\n  EXPECT_EQ(iglDev_->getBackendType(), BackendType::Vulkan);\n}\n\nTEST_F(DeviceExtendedVulkanTest, HasFeatureTexture3D) {\n  EXPECT_TRUE(iglDev_->hasFeature(DeviceFeatures::Texture3D));\n}\n\nTEST_F(DeviceExtendedVulkanTest, GetFeatureLimitsMaxTextureDimension) {\n  size_t maxDim = 0;\n  bool result = iglDev_->getFeatureLimits(DeviceFeatureLimits::MaxTextureDimension1D2D, maxDim);\n  EXPECT_TRUE(result);\n  EXPECT_GT(maxDim, 0u);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/FramebufferVulkanTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/Device.h>\n#include <igl/Framebuffer.h>\n#include <igl/Texture.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass FramebufferVulkanTest : public ::testing::Test {\n public:\n  FramebufferVulkanTest() = default;\n  ~FramebufferVulkanTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n};\n\nTEST_F(FramebufferVulkanTest, CreateWithColorAttachment) {\n  Result ret;\n\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           8,\n                                           8,\n                                           TextureDesc::TextureUsageBits::Attachment |\n                                               TextureDesc::TextureUsageBits::Sampled);\n  auto colorTex = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTex;\n\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(fb, nullptr);\n\n  auto indices = fb->getColorAttachmentIndices();\n  EXPECT_FALSE(indices.empty());\n  EXPECT_NE(fb->getColorAttachment(0), nullptr);\n}\n\nTEST_F(FramebufferVulkanTest, CreateWithColorAndDepth) {\n  Result ret;\n\n  TextureDesc colorDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             8,\n                                             8,\n                                             TextureDesc::TextureUsageBits::Attachment |\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  auto colorTex = iglDev_->createTexture(colorDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  TextureDesc depthDesc = TextureDesc::new2D(TextureFormat::Z_UNorm24,\n                                             8,\n                                             8,\n                                             TextureDesc::TextureUsageBits::Attachment |\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  auto depthTex = iglDev_->createTexture(depthDesc, &ret);\n  if (!ret.isOk()) {\n    depthDesc.format = TextureFormat::Z_UNorm16;\n    depthTex = iglDev_->createTexture(depthDesc, &ret);\n  }\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTex;\n  fbDesc.depthAttachment.texture = depthTex;\n\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(fb, nullptr);\n  EXPECT_NE(fb->getDepthAttachment(), nullptr);\n}\n\nTEST_F(FramebufferVulkanTest, CopyBytesColorAttachment) {\n  Result ret;\n\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           2,\n                                           2,\n                                           TextureDesc::TextureUsageBits::Attachment |\n                                               TextureDesc::TextureUsageBits::Sampled);\n  auto colorTex = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  constexpr uint32_t kColor = 0xFF00FF00;\n  const std::array<uint32_t, 4> pixels = {kColor, kColor, kColor, kColor};\n  ret = colorTex->upload(colorTex->getFullRange(0), pixels.data());\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTex;\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  auto cmdQueue = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  auto cmdBuf = cmdQueue->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n  cmdQueue->submit(*cmdBuf);\n\n  std::array<uint32_t, 4> result = {};\n  fb->copyBytesColorAttachment(*cmdQueue, 0, result.data(), colorTex->getFullRange(0));\n\n  for (size_t i = 0; i < 4; ++i) {\n    EXPECT_EQ(result[i], kColor);\n  }\n}\n\nTEST_F(FramebufferVulkanTest, UpdateDrawable) {\n  Result ret;\n\n  TextureDesc texDesc1 = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                            4,\n                                            4,\n                                            TextureDesc::TextureUsageBits::Attachment |\n                                                TextureDesc::TextureUsageBits::Sampled);\n  auto colorTex1 = iglDev_->createTexture(texDesc1, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTex1;\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n  ASSERT_NE(fb, nullptr);\n\n  TextureDesc texDesc2 = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                            8,\n                                            8,\n                                            TextureDesc::TextureUsageBits::Attachment |\n                                                TextureDesc::TextureUsageBits::Sampled);\n  auto colorTex2 = iglDev_->createTexture(texDesc2, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  fb->updateDrawable(colorTex2);\n  EXPECT_EQ(fb->getColorAttachment(0), colorTex2);\n}\n\nTEST_F(FramebufferVulkanTest, MultipleColorAttachments) {\n  Result ret;\n\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           4,\n                                           4,\n                                           TextureDesc::TextureUsageBits::Attachment |\n                                               TextureDesc::TextureUsageBits::Sampled);\n\n  auto colorTex0 = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n  auto colorTex1 = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTex0;\n  fbDesc.colorAttachments[1].texture = colorTex1;\n\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(fb, nullptr);\n\n  auto indices = fb->getColorAttachmentIndices();\n  EXPECT_EQ(indices.size(), 2u);\n  EXPECT_NE(fb->getColorAttachment(0), nullptr);\n  EXPECT_NE(fb->getColorAttachment(1), nullptr);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/ImageLayoutTransitionTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/Device.h>\n#include <igl/Framebuffer.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/RenderPass.h>\n#include <igl/Texture.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass ImageLayoutTransitionTest : public ::testing::Test {\n public:\n  ImageLayoutTransitionTest() = default;\n  ~ImageLayoutTransitionTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n\n    Result ret;\n    cmdQueue_ = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(cmdQueue_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n\n  void waitForGpu() {\n    Result ret;\n    auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n    if (cmdBuf) {\n      cmdQueue_->submit(*cmdBuf);\n      cmdBuf->waitUntilCompleted();\n    }\n  }\n};\n\nTEST_F(ImageLayoutTransitionTest, TransitionToColorAttachment) {\n  Result ret;\n\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           4,\n                                           4,\n                                           TextureDesc::TextureUsageBits::Attachment |\n                                               TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = texture;\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(fb, nullptr);\n\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cmdBuf, nullptr);\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n  rpDesc.colorAttachments[0].clearColor = {0, 0, 0, 1};\n\n  auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, fb, {}, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n}\n\nTEST_F(ImageLayoutTransitionTest, TransitionToDepthStencilAttachment) {\n  Result ret;\n\n  TextureDesc colorDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             4,\n                                             4,\n                                             TextureDesc::TextureUsageBits::Attachment |\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  auto colorTex = iglDev_->createTexture(colorDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(colorTex, nullptr);\n\n  TextureDesc depthDesc = TextureDesc::new2D(TextureFormat::Z_UNorm24,\n                                             4,\n                                             4,\n                                             TextureDesc::TextureUsageBits::Attachment |\n                                                 TextureDesc::TextureUsageBits::Sampled);\n  auto depthTex = iglDev_->createTexture(depthDesc, &ret);\n  if (!ret.isOk()) {\n    depthDesc.format = TextureFormat::Z_UNorm16;\n    depthTex = iglDev_->createTexture(depthDesc, &ret);\n  }\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(depthTex, nullptr);\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTex;\n  fbDesc.depthAttachment.texture = depthTex;\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(fb, nullptr);\n\n  auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cmdBuf, nullptr);\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n  rpDesc.depthAttachment.loadAction = LoadAction::Clear;\n  rpDesc.depthAttachment.storeAction = StoreAction::Store;\n  rpDesc.depthAttachment.clearDepth = 1.0f;\n\n  auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, fb, {}, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n}\n\nTEST_F(ImageLayoutTransitionTest, TransitionToShaderReadOnly) {\n  Result ret;\n\n  TextureDesc texDesc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  const std::vector<uint32_t> pixels(16, 0xFF0000FF);\n  ret = texture->upload(texture->getFullRange(0), pixels.data());\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  waitForGpu();\n}\n\nTEST_F(ImageLayoutTransitionTest, TransitionToGeneral) {\n  Result ret;\n\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           4,\n                                           4,\n                                           TextureDesc::TextureUsageBits::Storage |\n                                               TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  waitForGpu();\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/PipelineStateTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/SamplerState.h>\n#include <igl/VertexInputState.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass PipelineStateTest : public ::testing::Test {\n public:\n  PipelineStateTest() = default;\n  ~PipelineStateTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(PipelineStateTest, PipelineLayoutCreation) {\n  auto& ctx = getVulkanContext();\n  EXPECT_TRUE(ctx.getVkDevice() != VK_NULL_HANDLE);\n  EXPECT_TRUE(ctx.pipelineCache_ != VK_NULL_HANDLE);\n}\n\nTEST_F(PipelineStateTest, CreateSamplerState) {\n  Result ret;\n\n  SamplerStateDesc desc;\n  desc.minFilter = SamplerMinMagFilter::Linear;\n  desc.magFilter = SamplerMinMagFilter::Linear;\n  desc.mipFilter = SamplerMipFilter::Linear;\n  desc.addressModeU = SamplerAddressMode::Repeat;\n  desc.addressModeV = SamplerAddressMode::Repeat;\n\n  auto sampler = iglDev_->createSamplerState(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(sampler, nullptr);\n}\n\nTEST_F(PipelineStateTest, CreateVertexInputState) {\n  Result ret;\n\n  VertexInputStateDesc desc;\n  desc.numAttributes = 1;\n  desc.attributes[0].format = VertexAttributeFormat::Float4;\n  desc.attributes[0].offset = 0;\n  desc.attributes[0].bufferIndex = 0;\n  desc.attributes[0].name = \"position\";\n  desc.attributes[0].location = 0;\n  desc.numInputBindings = 1;\n  desc.inputBindings[0].stride = 16;\n  desc.inputBindings[0].sampleFunction = VertexSampleFunction::PerVertex;\n\n  auto vis = iglDev_->createVertexInputState(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(vis, nullptr);\n}\n\nTEST_F(PipelineStateTest, PipelineCacheExists) {\n  auto& ctx = getVulkanContext();\n  EXPECT_TRUE(ctx.pipelineCache_ != VK_NULL_HANDLE);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/RenderCommandEncoderVulkanTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/Device.h>\n#include <igl/Framebuffer.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/RenderPass.h>\n#include <igl/Texture.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass RenderCommandEncoderVulkanTest : public ::testing::Test {\n public:\n  RenderCommandEncoderVulkanTest() = default;\n  ~RenderCommandEncoderVulkanTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n\n    Result ret;\n    cmdQueue_ = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(cmdQueue_, nullptr);\n\n    TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                             4,\n                                             4,\n                                             TextureDesc::TextureUsageBits::Attachment |\n                                                 TextureDesc::TextureUsageBits::Sampled);\n    colorTex_ = iglDev_->createTexture(texDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(colorTex_, nullptr);\n\n    FramebufferDesc fbDesc;\n    fbDesc.colorAttachments[0].texture = colorTex_;\n    fb_ = iglDev_->createFramebuffer(fbDesc, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(fb_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n  std::shared_ptr<ITexture> colorTex_;\n  std::shared_ptr<IFramebuffer> fb_;\n\n  std::unique_ptr<IRenderCommandEncoder> createEncoder(std::shared_ptr<ICommandBuffer>& cmdBuf) {\n    Result ret;\n    cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n    if (!ret.isOk() || !cmdBuf) {\n      return nullptr;\n    }\n\n    RenderPassDesc rpDesc;\n    rpDesc.colorAttachments.resize(1);\n    rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n    rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n    auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, fb_, {}, &ret);\n    if (!ret.isOk()) {\n      return nullptr;\n    }\n    return encoder;\n  }\n};\n\nTEST_F(RenderCommandEncoderVulkanTest, BindViewport) {\n  std::shared_ptr<ICommandBuffer> cmdBuf;\n  auto encoder = createEncoder(cmdBuf);\n  ASSERT_NE(encoder, nullptr);\n\n  Viewport vp = {\n      .x = 0.0f, .y = 0.0f, .width = 4.0f, .height = 4.0f, .minDepth = 0.0f, .maxDepth = 1.0f};\n  encoder->bindViewport(vp);\n\n  encoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n}\n\nTEST_F(RenderCommandEncoderVulkanTest, BindScissorRect) {\n  std::shared_ptr<ICommandBuffer> cmdBuf;\n  auto encoder = createEncoder(cmdBuf);\n  ASSERT_NE(encoder, nullptr);\n\n  ScissorRect rect = {.x = 0, .y = 0, .width = 4, .height = 4};\n  encoder->bindScissorRect(rect);\n\n  encoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n}\n\nTEST_F(RenderCommandEncoderVulkanTest, SetStencilReferenceValue) {\n  std::shared_ptr<ICommandBuffer> cmdBuf;\n  auto encoder = createEncoder(cmdBuf);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->setStencilReferenceValue(128);\n\n  encoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n}\n\nTEST_F(RenderCommandEncoderVulkanTest, SetBlendColor) {\n  std::shared_ptr<ICommandBuffer> cmdBuf;\n  auto encoder = createEncoder(cmdBuf);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->setBlendColor(Color(1.0f, 0.5f, 0.25f, 1.0f));\n\n  encoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n}\n\nTEST_F(RenderCommandEncoderVulkanTest, SetDepthBias) {\n  std::shared_ptr<ICommandBuffer> cmdBuf;\n  auto encoder = createEncoder(cmdBuf);\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->setDepthBias(1.0f, 1.0f, 0.0f);\n\n  encoder->endEncoding();\n  cmdQueue_->submit(*cmdBuf);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/RenderPipelineStateTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/RenderPipelineState.h>\n\n#include <igl/Common.h>\n#include <igl/ShaderCreator.h>\n#include <igl/VertexInputState.h>\n#include <igl/tests/util/device/TestDevice.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#ifdef __ANDROID__\n#endif\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\nnamespace igl::tests {\n\n//\n// RenderPipelineStateTest\n//\n// Unit tests for RenderPipelineState.cpp\n//\nclass RenderPipelineStateTest : public ::testing::TestWithParam<std::tuple<PolygonFillMode,\n                                                                           CullMode,\n                                                                           WindingMode,\n                                                                           VertexAttributeFormat,\n                                                                           BlendOp,\n                                                                           BlendFactor>> {\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    device_ = igl::tests::util::device::createTestDevice(igl::BackendType::Vulkan);\n    ASSERT_TRUE(device_ != nullptr);\n    auto& device = static_cast<igl::vulkan::Device&>(*device_);\n    context_ = &device.getVulkanContext();\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  vulkan::VulkanContext* context_ = nullptr;\n};\n\n// polygonFillModeToVkPolygonMode *********************************************\nTEST_P(RenderPipelineStateTest, PolygonFillModeToVkPolygonModeTest) {\n  const auto polygonFillMode = std::get<0>(GetParam());\n  const auto cullMode = std::get<1>(GetParam());\n  const auto windingMode = std::get<2>(GetParam());\n  const auto vertexFormat = std::get<3>(GetParam());\n  const auto blendOp = std::get<4>(GetParam());\n  const auto blendFactor = std::get<5>(GetParam());\n\n  Result result;\n\n  VertexInputStateDesc inputDesc;\n  inputDesc.numAttributes = 1;\n  inputDesc.attributes[0].format = vertexFormat;\n  const auto inputState = device_->createVertexInputState(inputDesc, &result);\n  EXPECT_TRUE(result.isOk());\n\n  //   precision highp float;\n  constexpr const char* codeVS = R\"(\n\n  void main() {\n    gl_Position = vec4(0., 0., 0., 1.0);\n  }\n)\";\n\n  constexpr const char* codeFS = R\"(\n                layout(location = 0) out vec4 out_FragColor;\n\n                void main() {\n                  out_FragColor = vec4(0., 0., 0., 1.0);\n                }\n            )\";\n\n  RenderPipelineDesc pipelineDesc;\n  pipelineDesc.polygonFillMode = polygonFillMode;\n  pipelineDesc.cullMode = cullMode;\n  pipelineDesc.frontFaceWinding = windingMode;\n  pipelineDesc.vertexInputState = inputState;\n  pipelineDesc.targetDesc.colorAttachments.resize(1);\n  pipelineDesc.targetDesc.colorAttachments[0].blendEnabled = true;\n  pipelineDesc.targetDesc.colorAttachments[0].textureFormat = TextureFormat::RGBA_UNorm8;\n  pipelineDesc.targetDesc.colorAttachments[0].rgbBlendOp = blendOp;\n  pipelineDesc.targetDesc.colorAttachments[0].srcRGBBlendFactor = blendFactor;\n  pipelineDesc.shaderStages = ShaderStagesCreator::fromModuleStringInput(\n      *device_, codeVS, \"main\", \"\", codeFS, \"main\", \"\", nullptr);\n  const auto renderPipeline = device_->createRenderPipeline(pipelineDesc, &result);\n}\n\nINSTANTIATE_TEST_SUITE_P(\n    AllFormats,\n    RenderPipelineStateTest,\n    ::testing::Combine(::testing::Values(igl::PolygonFillMode::Line),\n                       ::testing::Values(igl::CullMode::Front, igl::CullMode::Back),\n                       ::testing::Values(igl::WindingMode::Clockwise),\n                       ::testing::Values(VertexAttributeFormat::Float1,\n                                         VertexAttributeFormat::Float2,\n                                         VertexAttributeFormat::Float3,\n                                         VertexAttributeFormat::Float4,\n                                         VertexAttributeFormat::Byte1,\n                                         VertexAttributeFormat::Byte2,\n                                         VertexAttributeFormat::Byte3,\n                                         VertexAttributeFormat::Byte4,\n                                         VertexAttributeFormat::UByte1,\n                                         VertexAttributeFormat::UByte2,\n                                         VertexAttributeFormat::UByte3,\n                                         VertexAttributeFormat::UByte4,\n                                         VertexAttributeFormat::Short1,\n                                         VertexAttributeFormat::Short2,\n                                         VertexAttributeFormat::Short3,\n                                         VertexAttributeFormat::Short4,\n                                         VertexAttributeFormat::UShort1,\n                                         VertexAttributeFormat::UShort2,\n                                         VertexAttributeFormat::UShort3,\n                                         VertexAttributeFormat::UShort4,\n                                         VertexAttributeFormat::Byte1Norm,\n                                         VertexAttributeFormat::Byte2Norm,\n                                         VertexAttributeFormat::Byte3Norm,\n                                         VertexAttributeFormat::Byte4Norm,\n                                         VertexAttributeFormat::UByte1Norm,\n                                         VertexAttributeFormat::UByte2Norm,\n                                         VertexAttributeFormat::UByte3Norm,\n                                         VertexAttributeFormat::UByte4Norm,\n                                         VertexAttributeFormat::Short1Norm,\n                                         VertexAttributeFormat::Short2Norm,\n                                         VertexAttributeFormat::Short3Norm,\n                                         VertexAttributeFormat::Short4Norm,\n                                         VertexAttributeFormat::UShort1Norm,\n                                         VertexAttributeFormat::UShort2Norm,\n                                         VertexAttributeFormat::UShort3Norm,\n                                         VertexAttributeFormat::UShort4Norm,\n                                         VertexAttributeFormat::Int1,\n                                         VertexAttributeFormat::Int2,\n                                         VertexAttributeFormat::Int3,\n                                         VertexAttributeFormat::Int4,\n                                         VertexAttributeFormat::UInt1,\n                                         VertexAttributeFormat::UInt2,\n                                         VertexAttributeFormat::UInt3,\n                                         VertexAttributeFormat::UInt4, // Half-float\n                                         VertexAttributeFormat::HalfFloat1,\n                                         VertexAttributeFormat::HalfFloat2,\n                                         VertexAttributeFormat::HalfFloat3,\n                                         VertexAttributeFormat::HalfFloat4,\n                                         VertexAttributeFormat::Int_2_10_10_10_REV),\n                       ::testing::Values(BlendOp::Add),\n                       ::testing::Values(BlendFactor::Zero)));\nINSTANTIATE_TEST_SUITE_P(AllBlendOps,\n                         RenderPipelineStateTest,\n                         ::testing::Combine(::testing::Values(igl::PolygonFillMode::Line),\n                                            ::testing::Values(igl::CullMode::Front,\n                                                              igl::CullMode::Back),\n                                            ::testing::Values(igl::WindingMode::Clockwise),\n                                            ::testing::Values(VertexAttributeFormat::Float1),\n                                            ::testing::Values(BlendOp::Add,\n                                                              BlendOp::Subtract,\n                                                              BlendOp::ReverseSubtract,\n                                                              BlendOp::Min,\n                                                              BlendOp::Max),\n                                            ::testing::Values(BlendFactor::Zero)));\nINSTANTIATE_TEST_SUITE_P(AllBlendFactors,\n                         RenderPipelineStateTest,\n                         ::testing::Combine(::testing::Values(igl::PolygonFillMode::Line),\n                                            ::testing::Values(igl::CullMode::Front,\n                                                              igl::CullMode::Back),\n                                            ::testing::Values(igl::WindingMode::Clockwise),\n                                            ::testing::Values(VertexAttributeFormat::Float1),\n                                            ::testing::Values(BlendOp::Add),\n                                            ::testing::Values(BlendFactor::Zero,\n                                                              BlendFactor::One,\n                                                              BlendFactor::SrcColor,\n                                                              BlendFactor::OneMinusSrcColor,\n                                                              BlendFactor::DstColor,\n                                                              BlendFactor::OneMinusDstColor,\n                                                              BlendFactor::SrcAlpha,\n                                                              BlendFactor::OneMinusSrcAlpha,\n                                                              BlendFactor::DstAlpha,\n                                                              BlendFactor::OneMinusDstAlpha,\n                                                              BlendFactor::BlendColor,\n                                                              BlendFactor::OneMinusBlendColor,\n                                                              BlendFactor::BlendAlpha,\n                                                              BlendFactor::OneMinusBlendAlpha,\n                                                              BlendFactor::SrcAlphaSaturated,\n                                                              BlendFactor::Src1Color,\n                                                              BlendFactor::OneMinusSrc1Color,\n                                                              BlendFactor::Src1Alpha,\n                                                              BlendFactor::OneMinusSrc1Alpha)));\n} // namespace igl::tests\n\n#endif\n"
  },
  {
    "path": "src/igl/tests/vulkan/ResourcesBinderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/Buffer.h>\n#include <igl/CommandBuffer.h>\n#include <igl/Device.h>\n#include <igl/Framebuffer.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/RenderPass.h>\n#include <igl/SamplerState.h>\n#include <igl/Texture.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass ResourcesBinderTest : public ::testing::Test {\n public:\n  ResourcesBinderTest() = default;\n  ~ResourcesBinderTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n\n    Result ret;\n    cmdQueue_ = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n    ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n    ASSERT_NE(cmdQueue_, nullptr);\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n  std::shared_ptr<ICommandQueue> cmdQueue_;\n\n  void waitForGpu() {\n    Result ret;\n    auto cmdBuf = cmdQueue_->createCommandBuffer(CommandBufferDesc(), &ret);\n    if (cmdBuf) {\n      cmdQueue_->submit(*cmdBuf);\n      cmdBuf->waitUntilCompleted();\n    }\n  }\n};\n\nTEST_F(ResourcesBinderTest, BindBufferAndDraw) {\n  Result ret;\n\n  BufferDesc bufDesc;\n  bufDesc.type = BufferDesc::BufferTypeBits::Uniform;\n  bufDesc.storage = ResourceStorage::Shared;\n  bufDesc.length = 256;\n  auto buffer = iglDev_->createBuffer(bufDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  std::vector<float> data(64, 1.0f);\n  ret = buffer->upload(data.data(), BufferRange(256, 0));\n  ASSERT_TRUE(ret.isOk());\n\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           4,\n                                           4,\n                                           TextureDesc::TextureUsageBits::Attachment |\n                                               TextureDesc::TextureUsageBits::Sampled);\n  auto colorTex = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTex;\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  auto cmdQueue = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n  ASSERT_TRUE(ret.isOk());\n  auto cmdBuf = cmdQueue->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, fb, {}, &ret);\n  ASSERT_TRUE(ret.isOk());\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->bindBuffer(0, buffer.get(), 0, 256);\n\n  encoder->endEncoding();\n  cmdQueue->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n}\n\nTEST_F(ResourcesBinderTest, BindTextureAndSamplerAndDraw) {\n  Result ret;\n\n  TextureDesc sampledTexDesc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto sampledTex = iglDev_->createTexture(sampledTexDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  const std::vector<uint32_t> pixels(16, 0xFF0000FF);\n  ret = sampledTex->upload(sampledTex->getFullRange(0), pixels.data());\n  ASSERT_TRUE(ret.isOk());\n\n  SamplerStateDesc samplerDesc;\n  samplerDesc.minFilter = SamplerMinMagFilter::Linear;\n  samplerDesc.magFilter = SamplerMinMagFilter::Linear;\n  auto sampler = iglDev_->createSamplerState(samplerDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n  ASSERT_NE(sampler, nullptr);\n\n  TextureDesc colorTexDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                                4,\n                                                4,\n                                                TextureDesc::TextureUsageBits::Attachment |\n                                                    TextureDesc::TextureUsageBits::Sampled);\n  auto colorTex = iglDev_->createTexture(colorTexDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  FramebufferDesc fbDesc;\n  fbDesc.colorAttachments[0].texture = colorTex;\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  auto cmdQueue = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n  ASSERT_TRUE(ret.isOk());\n  auto cmdBuf = cmdQueue->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  RenderPassDesc rpDesc;\n  rpDesc.colorAttachments.resize(1);\n  rpDesc.colorAttachments[0].loadAction = LoadAction::Clear;\n  rpDesc.colorAttachments[0].storeAction = StoreAction::Store;\n\n  auto encoder = cmdBuf->createRenderCommandEncoder(rpDesc, fb, {}, &ret);\n  ASSERT_TRUE(ret.isOk());\n  ASSERT_NE(encoder, nullptr);\n\n  encoder->bindTexture(0, sampledTex.get());\n  encoder->bindSamplerState(0, 0, sampler.get());\n\n  encoder->endEncoding();\n  cmdQueue->submit(*cmdBuf);\n  cmdBuf->waitUntilCompleted();\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/SpvConstantSpecializationExtendedTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <cstring>\n#include <igl/vulkan/util/SpvConstantSpecialization.h>\n\nnamespace igl::tests {\n\nnamespace {\nuint32_t floatToWord(float val) {\n  uint32_t result = 0;\n  std::memcpy(&result, &val, sizeof(result));\n  return result;\n}\n\nuint32_t intToWord(int32_t val) {\n  uint32_t result = 0;\n  std::memcpy(&result, &val, sizeof(result));\n  return result;\n}\n// Same SPIR-V binary as in SpvConstantSpecializationTest.cpp with two int spec constants\n// at indices 50 and 54 (values 10 and 11 respectively)\nstd::vector<uint32_t> getTestSpv() {\n  return {\n      0x07230203, 0x00010300, 0xdeadbeef, 0x00000011, 0x00000000, 0x00020011, 0x00000001,\n      0x0003000e, 0x00000000, 0x00000000, 0x0006000f, 0x00000004, 0x00000001, 0x6e69616d,\n      0x00000000, 0x00000002, 0x00050005, 0x00000003, 0x6e6f436b, 0x6e617473, 0x00003074,\n      0x00050005, 0x00000004, 0x6e6f436b, 0x6e617473, 0x00003174, 0x00050005, 0x00000002,\n      0x67617266, 0x6f6c6f43, 0x00000072, 0x00040005, 0x00000001, 0x6e69616d, 0x00000000,\n      0x00040047, 0x00000003, 0x00000001, 0x00000000, 0x00040047, 0x00000004, 0x00000001,\n      0x00000001, 0x00040015, 0x00000005, 0x00000020, 0x00000001, 0x00040032, 0x00000005,\n      0x00000003, 0x0000000a, 0x00040032, 0x00000005, 0x00000004, 0x0000000b, 0x00030016,\n      0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, 0x00000004, 0x00040020,\n      0x00000008, 0x00000003, 0x00000007, 0x0004003b, 0x00000008, 0x00000002, 0x00000003,\n      0x00020013, 0x00000009, 0x00030021, 0x0000000a, 0x00000009, 0x0004002b, 0x00000006,\n      0x0000000b, 0x00000000, 0x0004002b, 0x00000006, 0x0000000c, 0x3f800000, 0x00050036,\n      0x00000009, 0x00000001, 0x00000000, 0x0000000a, 0x000200f8, 0x0000000d, 0x0004006f,\n      0x00000006, 0x0000000e, 0x00000003, 0x0004006f, 0x00000006, 0x0000000f, 0x00000004,\n      0x00070050, 0x00000007, 0x00000010, 0x0000000e, 0x0000000f, 0x0000000b, 0x0000000c,\n      0x0003003e, 0x00000002, 0x00000010, 0x000100fd, 0x00010038,\n  };\n}\n} // namespace\n\nTEST(SpvConstantSpecializationExtendedTest, FloatConstantSpecialization) {\n  using namespace vulkan::util;\n\n  auto spv = getTestSpv();\n\n  EXPECT_EQ(spv[50], intToWord(10));\n  EXPECT_EQ(spv[54], intToWord(11));\n\n  const std::vector<uint32_t> values = {floatToWord(3.14f), floatToWord(2.71f)};\n  specializeConstants(spv.data(), spv.size() * sizeof(uint32_t), values);\n\n  EXPECT_EQ(spv[50], floatToWord(3.14f));\n  EXPECT_EQ(spv[54], floatToWord(2.71f));\n}\n\nTEST(SpvConstantSpecializationExtendedTest, MultipleConstantsMixedTypes) {\n  using namespace vulkan::util;\n\n  auto spv = getTestSpv();\n\n  EXPECT_EQ(spv[50], intToWord(10));\n  EXPECT_EQ(spv[54], intToWord(11));\n\n  const std::vector<uint32_t> values = {intToWord(100), intToWord(200)};\n  specializeConstants(spv.data(), spv.size() * sizeof(uint32_t), values);\n\n  EXPECT_EQ(spv[50], intToWord(100));\n  EXPECT_EQ(spv[54], intToWord(200));\n}\n\nTEST(SpvConstantSpecializationExtendedTest, NoSpecConstants) {\n  using namespace vulkan::util;\n\n  auto spv = getTestSpv();\n\n  uint32_t originalVal0 = spv[50];\n  uint32_t originalVal1 = spv[54];\n\n  const std::vector<uint32_t> values = {vulkan::util::kNoValue, vulkan::util::kNoValue};\n  specializeConstants(spv.data(), spv.size() * sizeof(uint32_t), values);\n\n  EXPECT_EQ(spv[50], originalVal0);\n  EXPECT_EQ(spv[54], originalVal1);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/SpvConstantSpecializationTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/util/SpvConstantSpecialization.h>\n\nnamespace igl::tests {\n// GLSL:\n//\n//   layout(constant_id = 0) const int kConstant0 = 10;\n//   layout(constant_id = 1) const int kConstant1 = 11;\n//\n//   out vec4 fragColor;\n//\n//   void main() {\n//     fragColor = vec4(float(kConstant0), float(kConstant1), 0.0, 1.0);\n//   }\n\n// SPIR-V:\n//\n//                  OpCapability Shader\n//                  OpMemoryModel Logical Simple\n//                  OpEntryPoint Fragment %main \"main\" %fragColor\n//                  OpName %kConstant0 \"kConstant0\"\n//                  OpName %kConstant1 \"kConstant1\"\n//                  OpName %fragColor \"fragColor\"\n//                  OpName %main \"main\"\n//                  OpDecorate %kConstant0 SpecId 0\n//                  OpDecorate %kConstant1 SpecId 1\n//           %int = OpTypeInt 32 1\n//    %kConstant0 = OpSpecConstant %int 10\n//    %kConstant1 = OpSpecConstant %int 11\n//         %float = OpTypeFloat 32\n//       %v4float = OpTypeVector %float 4\n//   %ptr_Output_v4float = OpTypePointer Output %v4float\n//     %fragColor = OpVariable %ptr_Output_v4float Output\n//          %void = OpTypeVoid\n//          %func = OpTypeFunction %void\n//         %_0_0f = OpConstant %float 0.0\n//         %_1_0f = OpConstant %float 1.0\n//          %main = OpFunction %void None %func\n//            %_1 = OpLabel\n//            %_2 = OpConvertSToF %float %kConstant0\n//            %_3 = OpConvertSToF %float %kConstant1\n//            %_4 = OpCompositeConstruct %v4float %_2 %_3 %_0_0f %_1_0f\n//                  OpStore %fragColor %_4\n//                  OpReturn\n//                  OpFunctionEnd\n\nnamespace {\nuint32_t getWord(int32_t val) {\n  return *reinterpret_cast<uint32_t*>(&val);\n}\n} // namespace\n\nTEST(SpvConstantSpecializationTest, intSpecialization) {\n  using namespace vulkan::util;\n  std::vector<uint32_t> spv = {\n      0x07230203, 0x00010300, 0xdeadbeef, 0x00000011, 0x00000000, 0x00020011, 0x00000001,\n      0x0003000e, 0x00000000, 0x00000000, 0x0006000f, 0x00000004, 0x00000001, 0x6e69616d,\n      0x00000000, 0x00000002, 0x00050005, 0x00000003, 0x6e6f436b, 0x6e617473, 0x00003074,\n      0x00050005, 0x00000004, 0x6e6f436b, 0x6e617473, 0x00003174, 0x00050005, 0x00000002,\n      0x67617266, 0x6f6c6f43, 0x00000072, 0x00040005, 0x00000001, 0x6e69616d, 0x00000000,\n      0x00040047, 0x00000003, 0x00000001, 0x00000000, 0x00040047, 0x00000004, 0x00000001,\n      0x00000001, 0x00040015, 0x00000005, 0x00000020, 0x00000001, 0x00040032, 0x00000005,\n      0x00000003, 0x0000000a, 0x00040032, 0x00000005, 0x00000004, 0x0000000b, 0x00030016,\n      0x00000006, 0x00000020, 0x00040017, 0x00000007, 0x00000006, 0x00000004, 0x00040020,\n      0x00000008, 0x00000003, 0x00000007, 0x0004003b, 0x00000008, 0x00000002, 0x00000003,\n      0x00020013, 0x00000009, 0x00030021, 0x0000000a, 0x00000009, 0x0004002b, 0x00000006,\n      0x0000000b, 0x00000000, 0x0004002b, 0x00000006, 0x0000000c, 0x3f800000, 0x00050036,\n      0x00000009, 0x00000001, 0x00000000, 0x0000000a, 0x000200f8, 0x0000000d, 0x0004006f,\n      0x00000006, 0x0000000e, 0x00000003, 0x0004006f, 0x00000006, 0x0000000f, 0x00000004,\n      0x00070050, 0x00000007, 0x00000010, 0x0000000e, 0x0000000f, 0x0000000b, 0x0000000c,\n      0x0003003e, 0x00000002, 0x00000010, 0x000100fd, 0x00010038,\n\n  };\n\n  // Specialize kConstant0 to 0 and kConstant1 to 1\n  const std::vector<uint32_t> values = {getWord(0), getWord(1)};\n\n  EXPECT_EQ(spv[50], getWord(10)); // 0x0000000a above\n  EXPECT_EQ(spv[54], getWord(11)); // 0x0000000b\n\n  specializeConstants(spv.data(), spv.size() * sizeof(uint32_t), values);\n\n  EXPECT_EQ(spv[50], getWord(0));\n  EXPECT_EQ(spv[54], getWord(1));\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/SpvReflectionTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/util/SpvReflection.h>\n\n#include \"../util/SpvModules.h\"\n\nnamespace igl::tests {\n\nTEST(SpvReflectionTest, UniformBufferTest) {\n  using namespace vulkan::util;\n\n  const auto& spvWords = getUniformBufferSpvWords();\n  SpvModuleInfo spvModuleInfo =\n      getReflectionData(spvWords.data(), spvWords.size() * sizeof(uint32_t));\n\n  ASSERT_EQ(spvModuleInfo.buffers.size(), 2);\n  EXPECT_EQ(spvModuleInfo.buffers[0].bindingLocation, 0);\n  EXPECT_EQ(spvModuleInfo.buffers[1].bindingLocation, 3);\n  EXPECT_EQ(spvModuleInfo.buffers[0].isStorage, false);\n  EXPECT_EQ(spvModuleInfo.buffers[1].isStorage, false);\n}\n\nTEST(SpvReflectionTest, TextureTest) {\n  using namespace vulkan::util;\n\n  const auto& spvWords = getTextureSpvWords();\n  SpvModuleInfo spvModuleInfo =\n      getReflectionData(spvWords.data(), spvWords.size() * sizeof(uint32_t));\n\n  ASSERT_EQ(spvModuleInfo.buffers.size(), 0);\n  EXPECT_EQ(spvModuleInfo.textures.size(), 4);\n  EXPECT_EQ(spvModuleInfo.textures[0].bindingLocation, kNoBindingLocation);\n  EXPECT_EQ(spvModuleInfo.textures[0].descriptorSet, kNoDescriptorSet);\n  EXPECT_EQ(spvModuleInfo.textures[1].bindingLocation, 1);\n  EXPECT_EQ(spvModuleInfo.textures[1].descriptorSet, 0);\n  EXPECT_EQ(spvModuleInfo.textures[2].bindingLocation, kNoBindingLocation);\n  EXPECT_EQ(spvModuleInfo.textures[2].descriptorSet, kNoBindingLocation);\n  EXPECT_EQ(spvModuleInfo.textures[3].bindingLocation, 3);\n  EXPECT_EQ(spvModuleInfo.textures[3].descriptorSet, 0);\n\n  EXPECT_EQ(spvModuleInfo.textures[0].type, TextureType::TwoD);\n  EXPECT_EQ(spvModuleInfo.textures[1].type, TextureType::TwoD);\n  EXPECT_EQ(spvModuleInfo.textures[2].type, TextureType::TwoD);\n  EXPECT_EQ(spvModuleInfo.textures[3].type, TextureType::TwoD);\n}\n\nTEST(SpvReflectionTest, TextureDescriptorSetTest) {\n  using namespace vulkan::util;\n\n  const auto& spvWords = getTextureWithDescriptorSetSpvWords();\n  SpvModuleInfo spvModuleInfo =\n      getReflectionData(spvWords.data(), spvWords.size() * sizeof(uint32_t));\n\n  ASSERT_EQ(spvModuleInfo.buffers.size(), 0);\n  EXPECT_EQ(spvModuleInfo.textures.size(), 2);\n  EXPECT_EQ(spvModuleInfo.textures[0].bindingLocation, 1);\n  EXPECT_EQ(spvModuleInfo.textures[0].descriptorSet, 0);\n  EXPECT_EQ(spvModuleInfo.textures[1].bindingLocation, 2);\n  EXPECT_EQ(spvModuleInfo.textures[1].descriptorSet, 1);\n\n  EXPECT_EQ(spvModuleInfo.textures[0].type, TextureType::TwoD);\n  EXPECT_EQ(spvModuleInfo.textures[1].type, TextureType::TwoD);\n}\n\nTEST(SpvReflectionTest, TinyMeshFragmentShaderTest) {\n  using namespace vulkan::util;\n\n  const auto& spvWords = getTinyMeshFragmentShaderSpvWords();\n  SpvModuleInfo spvModuleInfo =\n      getReflectionData(spvWords.data(), spvWords.size() * sizeof(uint32_t));\n\n  ASSERT_EQ(spvModuleInfo.buffers.size(), 1);\n  EXPECT_EQ(spvModuleInfo.textures.size(), 2);\n  EXPECT_EQ(spvModuleInfo.buffers[0].bindingLocation, 0);\n  EXPECT_EQ(spvModuleInfo.buffers[0].descriptorSet, 1);\n  EXPECT_EQ(spvModuleInfo.buffers[0].isStorage, false);\n  EXPECT_EQ(spvModuleInfo.textures[0].bindingLocation, 0);\n  EXPECT_EQ(spvModuleInfo.textures[0].descriptorSet, 0);\n  EXPECT_EQ(spvModuleInfo.textures[1].bindingLocation, 4);\n  EXPECT_EQ(spvModuleInfo.textures[1].descriptorSet, 0);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/Texture.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/Texture.h>\n\n#include <igl/Device.h>\n#include <igl/tests/util/TestDevice.h>\n#include <igl/tests/util/TextureValidationHelpers.h>\n\nnamespace igl::tests {\n\nclass TextureVulkanTest : public ::testing::Test {\n public:\n  TextureVulkanTest() = default;\n  ~TextureVulkanTest() override = default;\n\n  // Set up common resources. This will create a device\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n  }\n\n  void TearDown() override {}\n\n  // Member variables\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n};\n\nTEST_F(TextureVulkanTest, MipmapGenerationFlagInitialization) {\n  // Create a texture with default TextureDesc\n  const TextureDesc texDesc = igl::TextureDesc::new2D(\n      igl::TextureFormat::RGBA_UNorm8, 2, 2, igl::TextureDesc::TextureUsageBits::Sampled);\n\n  Result result;\n  auto texture = iglDev_->createTexture(texDesc, &result);\n  ASSERT_EQ(result.code, igl::Result::Code::Ok);\n  ASSERT_NE(texture, nullptr);\n\n  // Cast to Vulkan texture to access the getMipmapGeneration method\n  auto* vulkanTexture = static_cast<vulkan::Texture*>(texture.get());\n  ASSERT_NE(vulkanTexture, nullptr);\n\n  // Test that the mipmapGeneration flag is initialized to Manual by default\n  ASSERT_EQ(vulkanTexture->getMipmapGeneration(), TextureDesc::TextureMipmapGeneration::Manual);\n}\n\nTEST_F(TextureVulkanTest, AutoGenerateMipmapOnUpload) {\n  Result ret;\n\n  // Create a texture with AutoGenerateOnUpload flag - similar to existing mipmap tests\n  constexpr uint32_t kNumMipLevels = 2u;\n  constexpr uint32_t kTexWidth = 2u;\n  constexpr uint32_t kTexHeight = 2u;\n\n  constexpr uint32_t kColor = 0xdeadbeef;\n  constexpr std::array<uint32_t, 4> kBaseMipData = {kColor, kColor, kColor, kColor};\n  constexpr std::array<uint32_t, 1> kExpectedMip1Data = {kColor}; // Should be same color after\n                                                                  // generation\n\n  // Create texture with AutoGenerateOnUpload flag\n  TextureDesc textureDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                               kTexWidth,\n                                               kTexHeight,\n                                               TextureDesc::TextureUsageBits::Sampled |\n                                                   TextureDesc::TextureUsageBits::Attachment);\n  textureDesc.numMipLevels = kNumMipLevels;\n  textureDesc.mipmapGeneration = TextureDesc::TextureMipmapGeneration::AutoGenerateOnUpload;\n\n  auto texture = iglDev_->createTexture(textureDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  // Cast to Vulkan texture to access Vulkan-specific methods\n  auto* vulkanTexture = static_cast<vulkan::Texture*>(texture.get());\n  ASSERT_NE(vulkanTexture, nullptr);\n\n  // Verify the texture was created with the correct mipmap generation flag\n  ASSERT_EQ(vulkanTexture->getMipmapGeneration(),\n            TextureDesc::TextureMipmapGeneration::AutoGenerateOnUpload);\n\n  // Verify the texture has the expected number of mip levels\n  ASSERT_EQ(vulkanTexture->getNumMipLevels(), kNumMipLevels);\n\n  // Get command queue for validation\n  CommandQueueDesc cmdQueueDesc{};\n  auto cmdQueue = iglDev_->createCommandQueue(cmdQueueDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(cmdQueue, nullptr);\n\n  // Upload data to mip level 0 - this should trigger automatic mipmap generation\n  ret = texture->upload(texture->getFullRange(0), kBaseMipData.data());\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Validate that mip level 0 contains the uploaded data\n  util::validateUploadedTextureRange(*iglDev_,\n                                     *cmdQueue,\n                                     texture,\n                                     texture->getFullRange(0),\n                                     kBaseMipData.data(),\n                                     \"AutoGen: Base level (0)\");\n\n  // Validate that mip level 1 was auto-generated with expected content\n  // The auto-generated mip should contain the same solid color (averaged from base level)\n  util::validateUploadedTextureRange(*iglDev_,\n                                     *cmdQueue,\n                                     texture,\n                                     texture->getFullRange(1),\n                                     kExpectedMip1Data.data(),\n                                     \"AutoGen: Generated level (1)\");\n}\n\nTEST_F(TextureVulkanTest, ManualMipmapGeneration) {\n  Result ret;\n\n  constexpr uint32_t kColor = 0xdeadbeef;\n  constexpr std::array<uint32_t, 4> kBaseMipData = {kColor, kColor, kColor, kColor};\n  constexpr std::array<uint32_t, 1> kExpectedMip1Data = {kColor}; // Should be same color after\n                                                                  // generation\n\n  // Create a texture with Manual mipmap generation for comparison\n  constexpr uint32_t textureSize = 2;\n  const uint32_t expectedMipLevels = TextureDesc::calcNumMipLevels(textureSize, textureSize);\n\n  TextureDesc textureDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                               textureSize,\n                                               textureSize,\n                                               TextureDesc::TextureUsageBits::Sampled |\n                                                   TextureDesc::TextureUsageBits::Attachment);\n  textureDesc.numMipLevels = expectedMipLevels;\n  textureDesc.mipmapGeneration = TextureDesc::TextureMipmapGeneration::Manual;\n\n  auto texture = iglDev_->createTexture(textureDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  auto* vulkanTexture = static_cast<vulkan::Texture*>(texture.get());\n  ASSERT_NE(vulkanTexture, nullptr);\n\n  // Verify the texture was created with Manual mipmap generation\n  ASSERT_EQ(vulkanTexture->getMipmapGeneration(), TextureDesc::TextureMipmapGeneration::Manual);\n\n  const TextureRangeDesc range = TextureRangeDesc::new2D(0, 0, textureSize, textureSize);\n  ret = texture->upload(range, kBaseMipData.data());\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // With Manual mode, we should be able to call generateMipmap explicitly\n  CommandQueueDesc cmdQueueDesc{};\n  auto cmdQueue = iglDev_->createCommandQueue(cmdQueueDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  // Validate that mip level 0 contains the uploaded data\n  util::validateUploadedTextureRange(*iglDev_,\n                                     *cmdQueue,\n                                     texture,\n                                     texture->getFullRange(0),\n                                     kBaseMipData.data(),\n                                     \"AutoGen: Base level (0)\");\n\n  // This should work with Manual mode\n  const auto fullRange = texture->getFullRange(0, 2);\n  vulkanTexture->generateMipmap(*cmdQueue, &fullRange);\n\n  // Validate that mip level 1 was auto-generated with expected content\n  // The auto-generated mip should contain the same solid color (averaged from base level)\n  util::validateUploadedTextureRange(*iglDev_,\n                                     *cmdQueue,\n                                     texture,\n                                     texture->getFullRange(1),\n                                     kExpectedMip1Data.data(),\n                                     \"AutoGen: Generated level (1)\");\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/TextureFormat.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/util/TextureFormat.h>\n\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan::tests {\nTEST(TextureFormatUtilTest, invertRedAndBlue) {\n  ASSERT_EQ(VK_FORMAT_B8G8R8A8_UNORM, invertRedAndBlue(VK_FORMAT_R8G8B8A8_UNORM));\n  ASSERT_EQ(VK_FORMAT_R8G8B8A8_UNORM, invertRedAndBlue(VK_FORMAT_B8G8R8A8_UNORM));\n  ASSERT_EQ(VK_FORMAT_R8G8B8A8_SRGB, invertRedAndBlue(VK_FORMAT_B8G8R8A8_SRGB));\n  ASSERT_EQ(VK_FORMAT_B8G8R8A8_SRGB, invertRedAndBlue(VK_FORMAT_R8G8B8A8_SRGB));\n  ASSERT_EQ(VK_FORMAT_A2R10G10B10_UNORM_PACK32,\n            invertRedAndBlue(VK_FORMAT_A2B10G10R10_UNORM_PACK32));\n  ASSERT_EQ(VK_FORMAT_A2B10G10R10_UNORM_PACK32,\n            invertRedAndBlue(VK_FORMAT_A2R10G10B10_UNORM_PACK32));\n}\n\nTEST(TextureFormatUtilTest, isTextureFormatRGB) {\n  ASSERT_TRUE(isTextureFormatRGB(VK_FORMAT_R8G8B8A8_UNORM));\n  ASSERT_TRUE(isTextureFormatRGB(VK_FORMAT_R8G8B8A8_SRGB));\n  ASSERT_TRUE(isTextureFormatRGB(VK_FORMAT_A2R10G10B10_UNORM_PACK32));\n  ASSERT_FALSE(isTextureFormatRGB(VK_FORMAT_B8G8R8A8_UNORM));\n  ASSERT_FALSE(isTextureFormatRGB(VK_FORMAT_B8G8R8A8_SRGB));\n  ASSERT_FALSE(isTextureFormatRGB(VK_FORMAT_A2B10G10R10_UNORM_PACK32));\n}\n\nTEST(TextureFormatUtilTest, isTextureFormatBGR) {\n  ASSERT_FALSE(isTextureFormatBGR(VK_FORMAT_R8G8B8A8_UNORM));\n  ASSERT_FALSE(isTextureFormatBGR(VK_FORMAT_R8G8B8A8_SRGB));\n  ASSERT_FALSE(isTextureFormatBGR(VK_FORMAT_A2R10G10B10_UNORM_PACK32));\n  ASSERT_TRUE(isTextureFormatBGR(VK_FORMAT_B8G8R8A8_UNORM));\n  ASSERT_TRUE(isTextureFormatBGR(VK_FORMAT_B8G8R8A8_SRGB));\n  ASSERT_TRUE(isTextureFormatBGR(VK_FORMAT_A2B10G10R10_UNORM_PACK32));\n}\n\nTEST(TextureFormatUtilTest, textureFormatToVkFormat) {\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::Invalid), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::A_UNorm8), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::L_UNorm8), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R_UNorm8), VK_FORMAT_R8_UNORM);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R_UNorm16), VK_FORMAT_R16_UNORM);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R_F16), VK_FORMAT_R16_SFLOAT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R_UInt16), VK_FORMAT_R16_UINT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::B5G5R5A1_UNorm),\n            VK_FORMAT_B5G5R5A1_UNORM_PACK16);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::B5G6R5_UNorm),\n            VK_FORMAT_B5G6R5_UNORM_PACK16);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::ABGR_UNorm4),\n            VK_FORMAT_B4G4R4A4_UNORM_PACK16);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::LA_UNorm8), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RG_UNorm8), VK_FORMAT_R8G8_UNORM);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RG_UNorm16), VK_FORMAT_R16G16_UNORM);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R4G2B2_UNorm_Apple), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R4G2B2_UNorm_Rev_Apple),\n            VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R5G5B5A1_UNorm),\n            VK_FORMAT_R5G5B5A1_UNORM_PACK16);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::BGRA_UNorm8), VK_FORMAT_B8G8R8A8_UNORM);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::BGRA_UNorm8_Rev), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_UNorm8), VK_FORMAT_R8G8B8A8_UNORM);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBX_UNorm8), VK_FORMAT_R8G8B8A8_UNORM);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_SRGB), VK_FORMAT_R8G8B8A8_SRGB);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::BGRA_SRGB), VK_FORMAT_B8G8R8A8_SRGB);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RG_F16), VK_FORMAT_R16G16_SFLOAT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RG_UInt16), VK_FORMAT_R16G16_UINT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGB10_A2_UNorm_Rev),\n            VK_FORMAT_A2R10G10B10_UNORM_PACK32);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGB10_A2_Uint_Rev),\n            VK_FORMAT_A2R10G10B10_UINT_PACK32);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::BGR10_A2_Unorm),\n            VK_FORMAT_A2B10G10R10_UNORM_PACK32);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R_F32), VK_FORMAT_R32_SFLOAT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R_UInt32), VK_FORMAT_R32_UINT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RG_F32), VK_FORMAT_R32G32_SFLOAT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGB_F16), VK_FORMAT_R16G16B16_SFLOAT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_F16), VK_FORMAT_R16G16B16A16_SFLOAT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGB_F32), VK_FORMAT_R32G32B32_SFLOAT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_UInt32), VK_FORMAT_R32G32B32A32_UINT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_F32), VK_FORMAT_R32G32B32A32_SFLOAT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_4x4),\n            VK_FORMAT_ASTC_4x4_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_4x4),\n            VK_FORMAT_ASTC_4x4_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_5x4),\n            VK_FORMAT_ASTC_5x4_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_5x4),\n            VK_FORMAT_ASTC_5x4_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_5x5),\n            VK_FORMAT_ASTC_5x5_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_5x5),\n            VK_FORMAT_ASTC_5x5_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_6x5),\n            VK_FORMAT_ASTC_6x5_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_6x5),\n            VK_FORMAT_ASTC_6x5_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_6x6),\n            VK_FORMAT_ASTC_6x6_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_6x6),\n            VK_FORMAT_ASTC_6x6_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_8x5),\n            VK_FORMAT_ASTC_8x5_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_8x5),\n            VK_FORMAT_ASTC_8x5_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_8x6),\n            VK_FORMAT_ASTC_8x6_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_8x6),\n            VK_FORMAT_ASTC_8x6_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_8x8),\n            VK_FORMAT_ASTC_8x8_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_8x8),\n            VK_FORMAT_ASTC_8x8_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_10x5),\n            VK_FORMAT_ASTC_10x5_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_10x5),\n            VK_FORMAT_ASTC_10x5_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_10x6),\n            VK_FORMAT_ASTC_10x6_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_10x6),\n            VK_FORMAT_ASTC_10x6_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_10x8),\n            VK_FORMAT_ASTC_10x8_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_10x8),\n            VK_FORMAT_ASTC_10x8_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_10x10),\n            VK_FORMAT_ASTC_10x10_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_10x10),\n            VK_FORMAT_ASTC_10x10_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_12x10),\n            VK_FORMAT_ASTC_12x10_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_12x10),\n            VK_FORMAT_ASTC_12x10_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_ASTC_12x12),\n            VK_FORMAT_ASTC_12x12_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_ASTC_12x12),\n            VK_FORMAT_ASTC_12x12_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_PVRTC_2BPPV1),\n            VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGB_PVRTC_2BPPV1),\n            VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_PVRTC_4BPPV1),\n            VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGB_PVRTC_4BPPV1),\n            VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGB8_ETC1), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGB8_ETC2),\n            VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_ETC2),\n            VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGB8_Punchthrough_A1_ETC2),\n            VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_Punchthrough_A1_ETC2),\n            VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA8_EAC_ETC2), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::SRGB8_A8_EAC_ETC2), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RG_EAC_UNorm),\n            VK_FORMAT_EAC_R11G11_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RG_EAC_SNorm),\n            VK_FORMAT_EAC_R11G11_SNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R_EAC_UNorm),\n            VK_FORMAT_EAC_R11_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::R_EAC_SNorm),\n            VK_FORMAT_EAC_R11_SNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::Invalid), VK_FORMAT_UNDEFINED);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_BC7_UNORM_4x4),\n            VK_FORMAT_BC7_UNORM_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::RGBA_BC7_SRGB_4x4),\n            VK_FORMAT_BC7_SRGB_BLOCK);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::Z_UNorm16), VK_FORMAT_D16_UNORM);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::Z_UNorm24), VK_FORMAT_D24_UNORM_S8_UINT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::Z_UNorm32), VK_FORMAT_D32_SFLOAT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::S8_UInt_Z24_UNorm),\n            VK_FORMAT_D24_UNORM_S8_UINT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::S8_UInt_Z32_UNorm),\n            VK_FORMAT_D32_SFLOAT_S8_UINT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::S_UInt8), VK_FORMAT_S8_UINT);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::YUV_NV12),\n            VK_FORMAT_G8_B8R8_2PLANE_420_UNORM);\n  ASSERT_EQ(textureFormatToVkFormat(igl::TextureFormat::YUV_420p),\n            VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM);\n}\n\nTEST(TextureFormatUtilTest, vkTextureFormatToTextureFormat) {\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_UNDEFINED), igl::TextureFormat::Invalid);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R8_UNORM), igl::TextureFormat::R_UNorm8);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R16_UNORM),\n            igl::TextureFormat::R_UNorm16);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R16_SFLOAT), igl::TextureFormat::R_F16);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R16_UINT), igl::TextureFormat::R_UInt16);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_B5G5R5A1_UNORM_PACK16),\n            igl::TextureFormat::B5G5R5A1_UNorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_B5G6R5_UNORM_PACK16),\n            igl::TextureFormat::B5G6R5_UNorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_B4G4R4A4_UNORM_PACK16),\n            igl::TextureFormat::ABGR_UNorm4);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R8G8_UNORM),\n            igl::TextureFormat::RG_UNorm8);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R5G5B5A1_UNORM_PACK16),\n            igl::TextureFormat::R5G5B5A1_UNorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_B8G8R8A8_UNORM),\n            igl::TextureFormat::BGRA_UNorm8);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R8G8B8A8_UNORM),\n            igl::TextureFormat::RGBA_UNorm8);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R8G8B8A8_SRGB),\n            igl::TextureFormat::RGBA_SRGB);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_B8G8R8A8_SRGB),\n            igl::TextureFormat::BGRA_SRGB);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R16G16_UNORM),\n            igl::TextureFormat::RG_UNorm16);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R16G16_SFLOAT),\n            igl::TextureFormat::RG_F16);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R16G16_UINT),\n            igl::TextureFormat::RG_UInt16);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_A2R10G10B10_UNORM_PACK32),\n            igl::TextureFormat::RGB10_A2_UNorm_Rev);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_A2R10G10B10_UINT_PACK32),\n            igl::TextureFormat::RGB10_A2_Uint_Rev);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_A2B10G10R10_UNORM_PACK32),\n            igl::TextureFormat::BGR10_A2_Unorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R32_SFLOAT), igl::TextureFormat::R_F32);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R32_UINT), igl::TextureFormat::R_UInt32);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R32G32_SFLOAT),\n            igl::TextureFormat::RG_F32);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R16G16B16_SFLOAT),\n            igl::TextureFormat::RGB_F16);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R16G16B16A16_SFLOAT),\n            igl::TextureFormat::RGBA_F16);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R32G32B32_SFLOAT),\n            igl::TextureFormat::RGB_F32);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R32G32B32A32_UINT),\n            igl::TextureFormat::RGBA_UInt32);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R32G32B32A32_SFLOAT),\n            igl::TextureFormat::RGBA_F32);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_4x4_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_4x4);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_4x4_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_4x4);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_5x4_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_5x4);\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_5x4_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_5x4);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_5x5_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_5x5);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_5x5_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_5x5);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_6x5_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_6x5);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_6x5_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_6x5);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_6x6_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_6x6);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_6x6_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_6x6);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_8x5_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_8x5);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_8x5_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_8x5);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_8x6_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_8x6);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_8x6_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_8x6);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_8x8_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_8x8);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_8x8_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_8x8);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_10x5_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_10x5);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_10x5_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_10x5);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_10x6_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_10x6);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_10x6_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_10x6);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_10x8_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_10x8);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_10x8_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_10x8);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_10x10_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_10x10);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_10x10_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_10x10);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_12x10_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_12x10);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_12x10_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_12x10);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_12x12_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_ASTC_12x12);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ASTC_12x12_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_A8_ASTC_12x12);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG),\n            igl::TextureFormat::RGBA_PVRTC_2BPPV1);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG),\n            igl::TextureFormat::RGBA_PVRTC_4BPPV1);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK),\n            igl::TextureFormat::RGB8_ETC2);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_ETC2);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK),\n            igl::TextureFormat::RGB8_Punchthrough_A1_ETC2);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK),\n            igl::TextureFormat::SRGB8_Punchthrough_A1_ETC2);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_EAC_R11G11_UNORM_BLOCK),\n            igl::TextureFormat::RG_EAC_UNorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_EAC_R11G11_SNORM_BLOCK),\n            igl::TextureFormat::RG_EAC_SNorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_EAC_R11_UNORM_BLOCK),\n            igl::TextureFormat::R_EAC_UNorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_EAC_R11_SNORM_BLOCK),\n            igl::TextureFormat::R_EAC_SNorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_D16_UNORM),\n            igl::TextureFormat::Z_UNorm16);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_BC7_UNORM_BLOCK),\n            igl::TextureFormat::RGBA_BC7_UNORM_4x4);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_BC7_SRGB_BLOCK),\n            igl::TextureFormat::RGBA_BC7_SRGB_4x4);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_X8_D24_UNORM_PACK32),\n            igl::TextureFormat::Z_UNorm24);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_D24_UNORM_S8_UINT),\n            igl::TextureFormat::S8_UInt_Z24_UNorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_S8_UINT), igl::TextureFormat::S_UInt8);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_D32_SFLOAT_S8_UINT),\n            igl::TextureFormat::S8_UInt_Z32_UNorm);\n\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_D32_SFLOAT),\n            igl::TextureFormat::Z_UNorm32);\n  ASSERT_EQ(util::vkTextureFormatToTextureFormat(VK_FORMAT_R8G8B8A8_UNORM),\n            igl::TextureFormat::RGBA_UNorm8);\n}\n\n} // namespace igl::vulkan::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/TextureVulkanExtendedTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/Device.h>\n#include <igl/Texture.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanTexture.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass TextureVulkanExtendedTest : public ::testing::Test {\n public:\n  TextureVulkanExtendedTest() = default;\n  ~TextureVulkanExtendedTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n};\n\nTEST_F(TextureVulkanExtendedTest, Create3D) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Texture3D)) {\n    GTEST_SKIP() << \"3D textures not supported.\";\n  }\n\n  Result ret;\n  TextureDesc desc = TextureDesc::new3D(\n      TextureFormat::RGBA_UNorm8, 4, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n  EXPECT_EQ(texture->getType(), TextureType::ThreeD);\n}\n\nTEST_F(TextureVulkanExtendedTest, CreateCube) {\n  Result ret;\n  TextureDesc desc = TextureDesc::newCube(\n      TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n  EXPECT_EQ(texture->getType(), TextureType::Cube);\n}\n\nTEST_F(TextureVulkanExtendedTest, CreateArray) {\n  if (!iglDev_->hasFeature(DeviceFeatures::Texture2DArray)) {\n    GTEST_SKIP() << \"Texture arrays not supported.\";\n  }\n\n  Result ret;\n  TextureDesc desc = TextureDesc::new2DArray(\n      TextureFormat::RGBA_UNorm8, 4, 4, 3, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n  EXPECT_EQ(texture->getType(), TextureType::TwoDArray);\n  EXPECT_EQ(texture->getNumLayers(), 3u);\n}\n\nTEST_F(TextureVulkanExtendedTest, CreateMSAA) {\n  Result ret;\n  TextureDesc desc = TextureDesc::new2D(\n      TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Attachment);\n  desc.numSamples = 4;\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n  EXPECT_EQ(texture->getSamples(), 4u);\n}\n\nTEST_F(TextureVulkanExtendedTest, DepthStencilFormats) {\n  Result ret;\n\n  TextureDesc desc = TextureDesc::new2D(TextureFormat::Z_UNorm24,\n                                        4,\n                                        4,\n                                        TextureDesc::TextureUsageBits::Attachment |\n                                            TextureDesc::TextureUsageBits::Sampled);\n  auto depthTexture = iglDev_->createTexture(desc, &ret);\n  if (ret.isOk()) {\n    ASSERT_NE(depthTexture, nullptr);\n  }\n\n  TextureDesc descDS = TextureDesc::new2D(TextureFormat::S8_UInt_Z24_UNorm,\n                                          4,\n                                          4,\n                                          TextureDesc::TextureUsageBits::Attachment |\n                                              TextureDesc::TextureUsageBits::Sampled);\n  auto dsTexture = iglDev_->createTexture(descDS, &ret);\n  if (ret.isOk()) {\n    ASSERT_NE(dsTexture, nullptr);\n  }\n}\n\nTEST_F(TextureVulkanExtendedTest, TextureId) {\n  Result ret;\n  TextureDesc desc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8, 2, 2, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(desc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  auto* vulkanTexture = static_cast<igl::vulkan::Texture*>(texture.get());\n  ASSERT_NE(vulkanTexture, nullptr);\n  EXPECT_NE(vulkanTexture->getVulkanTexture().textureId_, 0u);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanBufferTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanBuffer.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/Buffer.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass VulkanBufferTest : public ::testing::Test {\n public:\n  VulkanBufferTest() = default;\n  ~VulkanBufferTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(VulkanBufferTest, CreateDeviceLocal) {\n  auto& ctx = getVulkanContext();\n\n  Result ret;\n  auto buffer =\n      ctx.createBuffer(256,\n                       VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,\n                       VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,\n                       &ret,\n                       \"testDeviceLocalBuffer\");\n\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  EXPECT_NE(buffer->getVkBuffer(), VK_NULL_HANDLE);\n  EXPECT_EQ(buffer->getSize(), 256u);\n  EXPECT_TRUE(buffer->getMemoryPropertyFlags() & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);\n}\n\nTEST_F(VulkanBufferTest, CreateHostVisible) {\n  auto& ctx = getVulkanContext();\n\n  Result ret;\n  auto buffer =\n      ctx.createBuffer(512,\n                       VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,\n                       VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,\n                       &ret,\n                       \"testHostVisibleBuffer\");\n\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  EXPECT_NE(buffer->getVkBuffer(), VK_NULL_HANDLE);\n  EXPECT_EQ(buffer->getSize(), 512u);\n  EXPECT_TRUE(buffer->isMapped());\n  EXPECT_NE(buffer->getMappedPtr(), nullptr);\n}\n\nTEST_F(VulkanBufferTest, BufferDeviceAddress) {\n  auto& ctx = getVulkanContext();\n\n  if (!ctx.features().has_VK_KHR_buffer_device_address) {\n    GTEST_SKIP() << \"VK_KHR_buffer_device_address not supported.\";\n  }\n\n  Result ret;\n\n  auto buffer = iglDev_->createBuffer(\n      BufferDesc{\n          .type = BufferDesc::BufferTypeBits::Uniform,\n          .length = 256,\n          .storage = ResourceStorage::Shared,\n      },\n      &ret);\n\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n  EXPECT_NE(buffer->gpuAddress(), 0u);\n}\n\nTEST_F(VulkanBufferTest, GetVkBuffer) {\n  auto& ctx = getVulkanContext();\n\n  Result ret;\n  auto buffer = ctx.createBuffer(128,\n                                 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,\n                                 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,\n                                 &ret,\n                                 \"testGetVkBuffer\");\n\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  VkBuffer vkBuf = buffer->getVkBuffer();\n  EXPECT_NE(vkBuf, VK_NULL_HANDLE);\n}\n\nTEST_F(VulkanBufferTest, HostVisibleBufferSubData) {\n  auto& ctx = getVulkanContext();\n\n  Result ret;\n  auto buffer =\n      ctx.createBuffer(256,\n                       VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,\n                       VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT,\n                       &ret,\n                       \"testSubData\");\n\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n  ASSERT_TRUE(buffer->isMapped());\n\n  std::vector<uint32_t> srcData(64, 0xDEADBEEF);\n  buffer->bufferSubData(0, srcData.size() * sizeof(uint32_t), srcData.data());\n\n  std::vector<uint32_t> dstData(64, 0);\n  buffer->getBufferSubData(0, dstData.size() * sizeof(uint32_t), dstData.data());\n\n  for (size_t i = 0; i < 64; ++i) {\n    EXPECT_EQ(dstData[i], 0xDEADBEEF);\n  }\n}\n\nTEST_F(VulkanBufferTest, CreateBufferWithInvalidStorageConvertsToPrivate) {\n  Result ret;\n  auto buffer = iglDev_->createBuffer(\n      BufferDesc{\n          .type = BufferDesc::BufferTypeBits::Uniform,\n          .length = 256,\n          .storage = ResourceStorage::Invalid,\n      },\n      &ret);\n\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  auto& ctx = getVulkanContext();\n  if (ctx.useStagingForBuffers_) {\n    EXPECT_EQ(buffer->storage(), ResourceStorage::Private);\n  } else {\n    EXPECT_EQ(buffer->storage(), ResourceStorage::Shared);\n  }\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanContextExtendedTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <future>\n#include <igl/CommandBuffer.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass VulkanContextExtendedTest : public ::testing::Test {\n public:\n  VulkanContextExtendedTest() = default;\n  ~VulkanContextExtendedTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(VulkanContextExtendedTest, WaitIdle) {\n  auto& ctx = getVulkanContext();\n\n  Result ret;\n  auto cmdQueue = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n  ASSERT_TRUE(ret.isOk());\n\n  auto cmdBuf = cmdQueue->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n  cmdQueue->submit(*cmdBuf);\n\n  auto result = ctx.waitIdle();\n  EXPECT_TRUE(result.isOk()) << result.message.c_str();\n}\n\nTEST_F(VulkanContextExtendedTest, DeferredTaskExecution) {\n  auto& ctx = getVulkanContext();\n\n  bool taskExecuted = false;\n  std::packaged_task<void()> task([&taskExecuted]() { taskExecuted = true; });\n\n  ctx.deferredTask(std::move(task));\n\n  Result ret;\n  auto cmdQueue = iglDev_->createCommandQueue(CommandQueueDesc{}, &ret);\n  ASSERT_TRUE(ret.isOk());\n  auto cmdBuf = cmdQueue->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n  cmdQueue->submit(*cmdBuf);\n\n  ctx.waitDeferredTasks();\n}\n\nTEST_F(VulkanContextExtendedTest, GetPipelineCacheData) {\n  auto& ctx = getVulkanContext();\n\n  auto cacheData = ctx.getPipelineCacheData();\n  // Cache data may be empty if no pipelines have been created, but the call must not crash\n  SUCCEED();\n}\n\nTEST_F(VulkanContextExtendedTest, GetVkDevice) {\n  auto& ctx = getVulkanContext();\n  EXPECT_TRUE(ctx.getVkDevice() != nullptr);\n}\n\nTEST_F(VulkanContextExtendedTest, GetVkPhysicalDevice) {\n  auto& ctx = getVulkanContext();\n  EXPECT_TRUE(ctx.getVkPhysicalDevice() != nullptr);\n}\n\nTEST_F(VulkanContextExtendedTest, GetVkInstance) {\n  auto& ctx = getVulkanContext();\n  EXPECT_TRUE(ctx.getVkInstance() != nullptr);\n}\n\nTEST_F(VulkanContextExtendedTest, PhysicalDeviceProperties) {\n  auto& ctx = getVulkanContext();\n  const auto& props = ctx.getVkPhysicalDeviceProperties();\n\n  EXPECT_NE(props.apiVersion, 0u);\n  EXPECT_GT(props.limits.maxImageDimension2D, 0u);\n}\n\nTEST_F(VulkanContextExtendedTest, CurrentSyncIndex) {\n  auto& ctx = getVulkanContext();\n  EXPECT_LT(ctx.currentSyncIndex(), ctx.config_.maxResourceCount);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanDescriptorSetLayoutTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanDescriptorSetLayout.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <array>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass VulkanDescriptorSetLayoutTest : public ::testing::Test {\n public:\n  VulkanDescriptorSetLayoutTest() = default;\n  ~VulkanDescriptorSetLayoutTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(VulkanDescriptorSetLayoutTest, SingleBinding) {\n  auto& ctx = getVulkanContext();\n\n  VkDescriptorSetLayoutBinding binding = {};\n  binding.binding = 0;\n  binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;\n  binding.descriptorCount = 1;\n  binding.stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;\n  binding.pImmutableSamplers = nullptr;\n\n  VkDescriptorBindingFlags bindingFlags = 0;\n  auto layout = std::make_unique<igl::vulkan::VulkanDescriptorSetLayout>(\n      ctx, 0, 1, &binding, &bindingFlags, \"testSingleBinding\");\n\n  ASSERT_NE(layout, nullptr);\n  EXPECT_NE(layout->getVkDescriptorSetLayout(), VK_NULL_HANDLE);\n  EXPECT_EQ(layout->numBindings, 1u);\n}\n\nTEST_F(VulkanDescriptorSetLayoutTest, MultipleBindings) {\n  auto& ctx = getVulkanContext();\n\n  std::array<VkDescriptorSetLayoutBinding, 3> bindings = {};\n\n  bindings[0].binding = 0;\n  bindings[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;\n  bindings[0].descriptorCount = 1;\n  bindings[0].stageFlags = VK_SHADER_STAGE_VERTEX_BIT;\n\n  bindings[1].binding = 1;\n  bindings[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;\n  bindings[1].descriptorCount = 1;\n  bindings[1].stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;\n\n  bindings[2].binding = 2;\n  bindings[2].descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;\n  bindings[2].descriptorCount = 1;\n  bindings[2].stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;\n\n  std::array<VkDescriptorBindingFlags, 3> bindingFlags = {};\n  auto layout = std::make_unique<igl::vulkan::VulkanDescriptorSetLayout>(\n      ctx, 0, 3, bindings.data(), bindingFlags.data(), \"testMultipleBindings\");\n\n  ASSERT_NE(layout, nullptr);\n  EXPECT_NE(layout->getVkDescriptorSetLayout(), VK_NULL_HANDLE);\n  EXPECT_EQ(layout->numBindings, 3u);\n}\n\nTEST_F(VulkanDescriptorSetLayoutTest, WithBindingFlags) {\n  auto& ctx = getVulkanContext();\n\n  VkDescriptorSetLayoutBinding binding = {};\n  binding.binding = 0;\n  binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;\n  binding.descriptorCount = 1;\n  binding.stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;\n\n  VkDescriptorBindingFlags flags = 0;\n\n  auto layout = std::make_unique<igl::vulkan::VulkanDescriptorSetLayout>(\n      ctx, 0, 1, &binding, &flags, \"testWithFlags\");\n\n  ASSERT_NE(layout, nullptr);\n  EXPECT_NE(layout->getVkDescriptorSetLayout(), VK_NULL_HANDLE);\n  EXPECT_EQ(layout->numBindings, 1u);\n}\n\nTEST_F(VulkanDescriptorSetLayoutTest, DestructorCleanup) {\n  auto& ctx = getVulkanContext();\n\n  VkDescriptorSetLayoutBinding binding = {};\n  binding.binding = 0;\n  binding.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;\n  binding.descriptorCount = 1;\n  binding.stageFlags = VK_SHADER_STAGE_VERTEX_BIT;\n\n  {\n    VkDescriptorBindingFlags bindingFlags = 0;\n    auto layout = std::make_unique<igl::vulkan::VulkanDescriptorSetLayout>(\n        ctx, 0, 1, &binding, &bindingFlags, \"testDestructor\");\n\n    ASSERT_NE(layout, nullptr);\n    EXPECT_NE(layout->getVkDescriptorSetLayout(), VK_NULL_HANDLE);\n  }\n\n  ctx.waitDeferredTasks();\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanFeaturesTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanFeatures.h>\n\n#include <igl/vulkan/Common.h>\n\nnamespace igl::tests {\n\n//\n// VulkanFeaturesTest\n//\n// Unit tests for VulkanFeatures\n//\n\n// Constructing ***********************************************************************\nclass VulkanFeaturesTest : public ::testing::Test {};\n\nTEST_F(VulkanFeaturesTest, Construct) {\n  const igl::vulkan::VulkanContextConfig config;\n\n  const igl::vulkan::VulkanFeatures features(config);\n\n  EXPECT_EQ(features.featuresShaderFloat16Int8.pNext, nullptr);\n}\n\n// Copying ***************************************************************************\nTEST_F(VulkanFeaturesTest, CopyNotPerformed) {\n  const igl::vulkan::VulkanContextConfig configSrc;\n  EXPECT_FALSE(configSrc.enableDescriptorIndexing);\n\n  igl::vulkan::VulkanContextConfig configDst;\n  configDst.enableDescriptorIndexing = true;\n  EXPECT_TRUE(configDst.enableDescriptorIndexing);\n\n  const igl::vulkan::VulkanFeatures featuresSrc(configSrc);\n  igl::vulkan::VulkanFeatures featuresDst(configDst);\n\n  featuresDst = featuresSrc;\n\n  // Unchanged\n  EXPECT_TRUE(configDst.enableDescriptorIndexing);\n}\n\n// Enable Default Features ****************************************************\nTEST_F(VulkanFeaturesTest, EnableDefaultFeatures) {\n  const igl::vulkan::VulkanContextConfig config;\n\n  igl::vulkan::VulkanFeatures features(config);\n\n  EXPECT_FALSE(features.featuresShaderFloat16Int8.shaderFloat16);\n  EXPECT_FALSE(features.featuresShaderFloat16Int8.shaderInt8);\n\n  EXPECT_TRUE(features.vkPhysicalDeviceFeatures2.features.dualSrcBlend);\n  EXPECT_TRUE(features.vkPhysicalDeviceFeatures2.features.shaderInt16);\n  EXPECT_TRUE(features.vkPhysicalDeviceFeatures2.features.multiDrawIndirect);\n  EXPECT_TRUE(features.vkPhysicalDeviceFeatures2.features.drawIndirectFirstInstance);\n  EXPECT_TRUE(features.vkPhysicalDeviceFeatures2.features.depthBiasClamp);\n#ifdef IGL_PLATFORM_ANDROID\n  // fillModeNonSolid is not well supported on Android, only enable by default when it's not Android\n  EXPECT_FALSE(features.vkPhysicalDeviceFeatures2.features.fillModeNonSolid);\n#else\n  EXPECT_TRUE(features.vkPhysicalDeviceFeatures2.features.fillModeNonSolid);\n#endif\n\n  {\n    const auto& dif = features.featuresDescriptorIndexing;\n    ASSERT_FALSE(config.enableDescriptorIndexing);\n    EXPECT_TRUE(dif.shaderSampledImageArrayNonUniformIndexing);\n    EXPECT_TRUE(dif.descriptorBindingUniformBufferUpdateAfterBind);\n    EXPECT_TRUE(dif.descriptorBindingSampledImageUpdateAfterBind);\n    EXPECT_TRUE(dif.descriptorBindingStorageImageUpdateAfterBind);\n    EXPECT_TRUE(dif.descriptorBindingStorageBufferUpdateAfterBind);\n    EXPECT_TRUE(dif.descriptorBindingUpdateUnusedWhilePending);\n    EXPECT_TRUE(dif.descriptorBindingPartiallyBound);\n    EXPECT_TRUE(dif.runtimeDescriptorArray);\n\n    EXPECT_TRUE(features.features16BitStorage.storageBuffer16BitAccess);\n\n    EXPECT_TRUE(features.featuresBufferDeviceAddress.bufferDeviceAddress);\n    EXPECT_TRUE(features.featuresMultiview.multiview);\n    EXPECT_TRUE(features.featuresSamplerYcbcrConversion.samplerYcbcrConversion);\n    EXPECT_TRUE(features.featuresShaderDrawParameters.shaderDrawParameters);\n  }\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanFenceTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanFence.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass VulkanFenceTest : public ::testing::Test {\n public:\n  VulkanFenceTest() = default;\n  ~VulkanFenceTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(VulkanFenceTest, CreateSignaledFence) {\n  auto& ctx = getVulkanContext();\n  igl::vulkan::VulkanFence fence(\n      ctx.vf_, ctx.getVkDevice(), VK_FENCE_CREATE_SIGNALED_BIT, false, \"testSignaledFence\");\n\n  EXPECT_NE(fence.vkFence_, VK_NULL_HANDLE);\n  EXPECT_FALSE(fence.exportable());\n\n  EXPECT_TRUE(fence.wait(0));\n}\n\nTEST_F(VulkanFenceTest, CreateUnsignaledFence) {\n  auto& ctx = getVulkanContext();\n  igl::vulkan::VulkanFence fence(ctx.vf_, ctx.getVkDevice(), 0, false, \"testUnsignaledFence\");\n\n  EXPECT_NE(fence.vkFence_, VK_NULL_HANDLE);\n  EXPECT_FALSE(fence.exportable());\n}\n\nTEST_F(VulkanFenceTest, ResetFence) {\n  auto& ctx = getVulkanContext();\n  igl::vulkan::VulkanFence fence(\n      ctx.vf_, ctx.getVkDevice(), VK_FENCE_CREATE_SIGNALED_BIT, false, \"testResetFence\");\n\n  ASSERT_NE(fence.vkFence_, VK_NULL_HANDLE);\n  EXPECT_TRUE(fence.wait(0));\n\n  EXPECT_TRUE(fence.reset());\n}\n\nTEST_F(VulkanFenceTest, ExportableFence) {\n#if IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n  auto& ctx = getVulkanContext();\n  igl::vulkan::VulkanFence fence(\n      ctx.vf_, ctx.getVkDevice(), VK_FENCE_CREATE_SIGNALED_BIT, true, \"testExportableFence\");\n\n  EXPECT_NE(fence.vkFence_, VK_NULL_HANDLE);\n  EXPECT_TRUE(fence.exportable());\n#else\n  GTEST_SKIP() << \"Exportable fences may not be supported on this platform.\";\n#endif\n}\n\nTEST_F(VulkanFenceTest, MoveConstruction) {\n  auto& ctx = getVulkanContext();\n  igl::vulkan::VulkanFence original(\n      ctx.vf_, ctx.getVkDevice(), VK_FENCE_CREATE_SIGNALED_BIT, false, \"testMoveCtor\");\n\n  VkFence originalHandle = original.vkFence_;\n  ASSERT_NE(originalHandle, VK_NULL_HANDLE);\n\n  igl::vulkan::VulkanFence moved(std::move(original));\n\n  EXPECT_EQ(moved.vkFence_, originalHandle);\n  // After move, original is in a valid but unspecified state - don't access it\n}\n\nTEST_F(VulkanFenceTest, MoveAssignment) {\n  auto& ctx = getVulkanContext();\n  igl::vulkan::VulkanFence original(\n      ctx.vf_, ctx.getVkDevice(), VK_FENCE_CREATE_SIGNALED_BIT, false, \"testMoveAssign1\");\n  igl::vulkan::VulkanFence target(ctx.vf_, ctx.getVkDevice(), 0, false, \"testMoveAssign2\");\n\n  VkFence originalHandle = original.vkFence_;\n  ASSERT_NE(originalHandle, VK_NULL_HANDLE);\n\n  target = std::move(original);\n\n  EXPECT_EQ(target.vkFence_, originalHandle);\n  // After move, original is in a valid but unspecified state - don't access it\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanHelpersTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanHelpers.h>\n\n#include <array>\n#include <string>\n\nnamespace igl::tests {\n\n//\n// VulkanHelpersTest\n//\n// Unit tests for functions in VulkanHelpers.{h|c}.\n//\n\n// ivkGetVulkanResultString **********************************************************************\nclass GetVulkanResultString : public ::testing::Test {};\nTEST_F(GetVulkanResultString, VulkanHelpersTest) {\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_SUCCESS), \"VK_SUCCESS\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_NOT_READY), \"VK_NOT_READY\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_TIMEOUT), \"VK_TIMEOUT\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_EVENT_SET), \"VK_EVENT_SET\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_EVENT_RESET), \"VK_EVENT_RESET\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_INCOMPLETE), \"VK_INCOMPLETE\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_OUT_OF_HOST_MEMORY),\n                     \"VK_ERROR_OUT_OF_HOST_MEMORY\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_OUT_OF_DEVICE_MEMORY),\n                     \"VK_ERROR_OUT_OF_DEVICE_MEMORY\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_INITIALIZATION_FAILED),\n                     \"VK_ERROR_INITIALIZATION_FAILED\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_DEVICE_LOST), \"VK_ERROR_DEVICE_LOST\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_MEMORY_MAP_FAILED),\n                     \"VK_ERROR_MEMORY_MAP_FAILED\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_LAYER_NOT_PRESENT),\n                     \"VK_ERROR_LAYER_NOT_PRESENT\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_EXTENSION_NOT_PRESENT),\n                     \"VK_ERROR_EXTENSION_NOT_PRESENT\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_FEATURE_NOT_PRESENT),\n                     \"VK_ERROR_FEATURE_NOT_PRESENT\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_INCOMPATIBLE_DRIVER),\n                     \"VK_ERROR_INCOMPATIBLE_DRIVER\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_TOO_MANY_OBJECTS),\n                     \"VK_ERROR_TOO_MANY_OBJECTS\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_FORMAT_NOT_SUPPORTED),\n                     \"VK_ERROR_FORMAT_NOT_SUPPORTED\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_SURFACE_LOST_KHR),\n                     \"VK_ERROR_SURFACE_LOST_KHR\") == 0);\n  EXPECT_TRUE(\n      strcmp(ivkGetVulkanResultString(VK_ERROR_OUT_OF_DATE_KHR), \"VK_ERROR_OUT_OF_DATE_KHR\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR),\n                     \"VK_ERROR_INCOMPATIBLE_DISPLAY_KHR\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR),\n                     \"VK_ERROR_NATIVE_WINDOW_IN_USE_KHR\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_VALIDATION_FAILED_EXT),\n                     \"VK_ERROR_VALIDATION_FAILED_EXT\") == 0);\n  EXPECT_TRUE(\n      strcmp(ivkGetVulkanResultString(VK_ERROR_FRAGMENTED_POOL), \"VK_ERROR_FRAGMENTED_POOL\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_UNKNOWN), \"VK_ERROR_UNKNOWN\") == 0);\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_OUT_OF_POOL_MEMORY),\n                     \"VK_ERROR_OUT_OF_POOL_MEMORY\") == 0); // 1.1\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_INVALID_EXTERNAL_HANDLE),\n                     \"VK_ERROR_INVALID_EXTERNAL_HANDLE\") == 0); // 1.1\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_FRAGMENTATION), \"VK_ERROR_FRAGMENTATION\") ==\n              0); // 1.2\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS),\n                     \"VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS\") == 0); // 1.2\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_SUBOPTIMAL_KHR), \"VK_SUBOPTIMAL_KHR\") ==\n              0); // VK_KHR_swapchain\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_INVALID_SHADER_NV),\n                     \"VK_ERROR_INVALID_SHADER_NV\") == 0); // VK_NV_glsl_shader\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n                                                          // Provided by VK_KHR_video_queue\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR),\n                     \"VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR\") == 0);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n  // Provided by VK_KHR_video_queue\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR),\n                     \"VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR\") == 0);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n  // Provided by VK_KHR_video_queue\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR),\n                     \"VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR\") == 0);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n  // Provided by VK_KHR_video_queue\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR),\n                     \"VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR\") == 0);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n  // Provided by VK_KHR_video_queue\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR),\n                     \"VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR\") == 0);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n  // Provided by VK_KHR_video_queue\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR),\n                     \"VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR\") == 0);\n#endif\n  EXPECT_TRUE(\n      strcmp(ivkGetVulkanResultString(VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT),\n             \"VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT\") ==\n      0); // VK_EXT_image_drm_format_modifier\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_NOT_PERMITTED_KHR),\n                     \"VK_ERROR_NOT_PERMITTED_KHR\") == 0); // VK_KHR_global_priority\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT),\n                     \"VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT\") ==\n              0); // VK_EXT_full_screen_exclusive\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_THREAD_IDLE_KHR), \"VK_THREAD_IDLE_KHR\") ==\n              0); // VK_KHR_deferred_host_operations\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_THREAD_DONE_KHR), \"VK_THREAD_DONE_KHR\") ==\n              0); // VK_KHR_deferred_host_operations\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_OPERATION_DEFERRED_KHR),\n                     \"VK_OPERATION_DEFERRED_KHR\") == 0); // VK_KHR_deferred_host_operations\n  EXPECT_TRUE(strcmp(ivkGetVulkanResultString(VK_OPERATION_NOT_DEFERRED_KHR),\n                     \"VK_OPERATION_NOT_DEFERRED_KHR\") == 0); // VK_KHR_deferred_host_operations\n}\n\n// ivkGetWriteDescriptorSetImageInfo *******************************\nclass GetWriteDescriptorSetImageInfoTest\n  : public ::testing::TestWithParam<std::tuple<uint32_t, VkDescriptorType, uint32_t>> {};\n\nTEST_P(GetWriteDescriptorSetImageInfoTest, GetWriteDescriptorSet_ImageInfo) {\n  constexpr VkDescriptorSet descSet = VK_NULL_HANDLE;\n  const uint32_t dstBinding = std::get<0>(GetParam());\n  const VkDescriptorType descType = std::get<1>(GetParam());\n  const uint32_t numDescs = std::get<2>(GetParam());\n\n  const std::array<VkDescriptorImageInfo, 2> pImageInfo = {\n      VkDescriptorImageInfo{.sampler = VK_NULL_HANDLE,\n                            .imageView = VK_NULL_HANDLE,\n                            .imageLayout = VK_IMAGE_LAYOUT_UNDEFINED},\n      VkDescriptorImageInfo{.sampler = VK_NULL_HANDLE,\n                            .imageView = VK_NULL_HANDLE,\n                            .imageLayout = VK_IMAGE_LAYOUT_UNDEFINED}};\n\n  const VkWriteDescriptorSet imageDescSet =\n      ivkGetWriteDescriptorSetImageInfo(descSet, dstBinding, descType, numDescs, pImageInfo.data());\n\n  EXPECT_EQ(imageDescSet.sType, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET);\n  EXPECT_EQ(imageDescSet.pNext, nullptr);\n  EXPECT_EQ(imageDescSet.dstSet, descSet);\n  EXPECT_EQ(imageDescSet.dstBinding, dstBinding);\n  EXPECT_EQ(imageDescSet.dstArrayElement, 0);\n  EXPECT_EQ(imageDescSet.descriptorCount, numDescs);\n  EXPECT_EQ(imageDescSet.descriptorType, descType);\n  EXPECT_EQ(imageDescSet.pImageInfo, pImageInfo.data());\n  EXPECT_EQ(imageDescSet.pBufferInfo, nullptr);\n  EXPECT_EQ(imageDescSet.pTexelBufferView, nullptr);\n}\n\nINSTANTIATE_TEST_SUITE_P(\n    AllCombinations,\n    GetWriteDescriptorSetImageInfoTest,\n    ::testing::Combine(::testing::Values(0, 1),\n                       ::testing::Values(VK_DESCRIPTOR_TYPE_SAMPLER,\n                                         VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE),\n                       ::testing::Values(1, 2)),\n    [](const testing::TestParamInfo<GetWriteDescriptorSetImageInfoTest::ParamType>& info) {\n      const std::string name = std::to_string(std::get<0>(info.param)) + \"_\" +\n                               std::to_string(std::get<1>(info.param)) + \"_\" +\n                               std::to_string(std::get<2>(info.param));\n      return name;\n    });\n\n// ivkGetWriteDescriptorSetBufferInfo *******************************\nclass GetWriteDescriptorSetBufferInfoTest\n  : public ::testing::TestWithParam<std::tuple<uint32_t, VkDescriptorType, uint32_t>> {};\n\nTEST_P(GetWriteDescriptorSetBufferInfoTest, GetWriteDescriptorSet_BufferInfo) {\n  constexpr VkDescriptorSet descSet = VK_NULL_HANDLE;\n  const uint32_t dstBinding = std::get<0>(GetParam());\n  const VkDescriptorType descType = std::get<1>(GetParam());\n  const uint32_t numDescs = std::get<2>(GetParam());\n\n  const std::array<VkDescriptorBufferInfo, 2> pBufferInfo = {\n      VkDescriptorBufferInfo{.buffer = VK_NULL_HANDLE, .offset = 0, .range = VK_WHOLE_SIZE},\n      VkDescriptorBufferInfo{.buffer = VK_NULL_HANDLE, .offset = 0, .range = VK_WHOLE_SIZE}};\n\n  const VkWriteDescriptorSet bufferDescSet = ivkGetWriteDescriptorSetBufferInfo(\n      descSet, dstBinding, descType, numDescs, pBufferInfo.data());\n\n  EXPECT_EQ(bufferDescSet.sType, VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET);\n  EXPECT_EQ(bufferDescSet.pNext, nullptr);\n  EXPECT_EQ(bufferDescSet.dstSet, descSet);\n  EXPECT_EQ(bufferDescSet.dstBinding, dstBinding);\n  EXPECT_EQ(bufferDescSet.dstArrayElement, 0);\n  EXPECT_EQ(bufferDescSet.descriptorCount, numDescs);\n  EXPECT_EQ(bufferDescSet.descriptorType, descType);\n  EXPECT_EQ(bufferDescSet.pImageInfo, nullptr);\n  EXPECT_EQ(bufferDescSet.pBufferInfo, pBufferInfo.data());\n  EXPECT_EQ(bufferDescSet.pTexelBufferView, nullptr);\n}\n\nINSTANTIATE_TEST_SUITE_P(\n    AllCombinations,\n    GetWriteDescriptorSetBufferInfoTest,\n    ::testing::Combine(::testing::Values(0, 1),\n                       ::testing::Values(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,\n                                         VK_DESCRIPTOR_TYPE_STORAGE_BUFFER),\n                       ::testing::Values(1, 2)),\n    [](const testing::TestParamInfo<GetWriteDescriptorSetBufferInfoTest::ParamType>& info) {\n      const std::string name = std::to_string(std::get<0>(info.param)) + \"_\" +\n                               std::to_string(std::get<1>(info.param)) + \"_\" +\n                               std::to_string(std::get<2>(info.param));\n      return name;\n    });\n\n// ivkGetVertexInputBindingDescription *******************************\nclass GetVertexInputBindingDescriptionTest\n  : public ::testing::TestWithParam<std::tuple<uint32_t, uint32_t, VkVertexInputRate>> {};\n\nTEST_P(GetVertexInputBindingDescriptionTest, GetVertexInputBindingDescription) {\n  const auto binding = std::get<0>(GetParam());\n  const auto stride = std::get<1>(GetParam());\n  const auto inputRate = std::get<2>(GetParam());\n\n  const VkVertexInputBindingDescription vtxInputBindingDesc =\n      ivkGetVertexInputBindingDescription(binding, stride, inputRate);\n\n  EXPECT_EQ(vtxInputBindingDesc.binding, binding);\n  EXPECT_EQ(vtxInputBindingDesc.stride, stride);\n  EXPECT_EQ(vtxInputBindingDesc.inputRate, inputRate);\n}\n\nINSTANTIATE_TEST_SUITE_P(\n    AllCombinations,\n    GetVertexInputBindingDescriptionTest,\n    ::testing::Combine(::testing::Values(0, 1),\n                       ::testing::Values(0, 16),\n                       ::testing::Values(VK_VERTEX_INPUT_RATE_VERTEX,\n                                         VK_VERTEX_INPUT_RATE_INSTANCE)),\n    [](const testing::TestParamInfo<GetVertexInputBindingDescriptionTest::ParamType>& info) {\n      const std::string name = std::to_string(std::get<0>(info.param)) + \"_\" +\n                               std::to_string(std::get<1>(info.param)) + \"_\" +\n                               std::to_string(std::get<2>(info.param));\n      return name;\n    });\n\n// ivkGetVertexInputAttributeDescription *******************************\nclass GetVertexInputAttributeDescriptionTest\n  : public ::testing::TestWithParam<std::tuple<uint32_t, uint32_t, VkFormat, uint32_t>> {};\n\nTEST_P(GetVertexInputAttributeDescriptionTest, GetVertexInputAttributeDescription) {\n  const auto location = std::get<0>(GetParam());\n  const auto binding = std::get<1>(GetParam());\n  const auto format = std::get<2>(GetParam());\n  const auto offset = std::get<3>(GetParam());\n\n  const VkVertexInputAttributeDescription vtxInputAttrDesc =\n      ivkGetVertexInputAttributeDescription(location, binding, format, offset);\n\n  EXPECT_EQ(vtxInputAttrDesc.location, location);\n  EXPECT_EQ(vtxInputAttrDesc.binding, binding);\n  EXPECT_EQ(vtxInputAttrDesc.format, format);\n  EXPECT_EQ(vtxInputAttrDesc.offset, offset);\n}\n\nINSTANTIATE_TEST_SUITE_P(\n    AllCombinations,\n    GetVertexInputAttributeDescriptionTest,\n    ::testing::Combine(::testing::Values(0, 1),\n                       ::testing::Values(0, 1),\n                       ::testing::Values(VK_FORMAT_R8G8B8_UNORM, VK_FORMAT_R8G8B8_SNORM),\n                       ::testing::Values(0, 16)),\n    [](const testing::TestParamInfo<GetVertexInputAttributeDescriptionTest::ParamType>& info) {\n      const std::string name = std::to_string(std::get<0>(info.param)) + \"_\" +\n                               std::to_string(std::get<1>(info.param)) + \"_\" +\n                               std::to_string(std::get<2>(info.param)) + \"_\" +\n                               std::to_string(std::get<3>(info.param));\n      return name;\n    });\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanImageTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanImage.h>\n\n#include <cstddef>\n#include <memory>\n#include <igl/Common.h>\n#include <igl/tests/util/device/TestDevice.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nnamespace {\nconstexpr uint32_t kWidth = 1024;\nconstexpr uint32_t kHeight = 1024;\nconstexpr VkFormat kFormat = VK_FORMAT_R8G8B8A8_UNORM;\n} // namespace\n\n//\n// VulkanImageTest\n//\n// Unit tests for igl::vulkan::VulkanImage.\n//\nclass VulkanImageTest : public ::testing::Test {\n public:\n  // Set up common resources.\n  void SetUp() override {\n    // Turn off debug break so unit tests can run\n    igl::setDebugBreakEnabled(false);\n\n    device_ = igl::tests::util::device::createTestDevice(igl::BackendType::Vulkan);\n    ASSERT_TRUE(device_ != nullptr);\n    auto& device = static_cast<igl::vulkan::Device&>(*device_);\n    context_ = &device.getVulkanContext();\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  vulkan::VulkanContext* context_ = nullptr;\n};\n\nTEST_F(VulkanImageTest, CreateImageWithExportedMemory) {\n  auto vulkanImage = igl::vulkan::VulkanImage::createWithExportMemory(\n      *context_,\n      VkExtent3D{.width = kWidth, .height = kHeight, .depth = 1},\n      VK_IMAGE_TYPE_2D,\n      kFormat,\n      1, /* mipLevels */\n      1, /* arrayLayers */\n      VK_IMAGE_TILING_OPTIMAL,\n      VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,\n      0, /* createFlags */\n      VK_SAMPLE_COUNT_1_BIT,\n      \"Image: vulkan export memory\");\n  ASSERT_NE(vulkanImage.valid(), false);\n  EXPECT_TRUE(vulkanImage.isExported_);\n#if IGL_PLATFORM_WINDOWS\n  EXPECT_NE(vulkanImage.exportedMemoryHandle_, nullptr);\n  EXPECT_NE(vulkanImage.getVkImage(), static_cast<VkImage_T*>(VK_NULL_HANDLE));\n#elif IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n  EXPECT_NE(vulkanImage.exportedFd_, -1);\n  EXPECT_NE(vulkanImage.getVkImage(), VK_NULL_HANDLE);\n#endif\n}\n\n#if IGL_PLATFORM_WINDOWS\nTEST_F(VulkanImageTest, CreateImageWithImportedMemoryWin32) {\n  auto exportedImage = igl::vulkan::VulkanImage::createWithExportMemory(\n      *context_,\n      VkExtent3D{.width = kWidth, .height = kHeight, .depth = 1},\n      VK_IMAGE_TYPE_2D,\n      kFormat,\n      1, /* mipLevels */\n      1, /* arrayLayers */\n      VK_IMAGE_TILING_OPTIMAL,\n      VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,\n      0, /* createFlags */\n      VK_SAMPLE_COUNT_1_BIT,\n      \"Image: vulkan export memory\");\n  ASSERT_NE(exportedImage.valid(), false);\n  EXPECT_NE(exportedImage.exportedMemoryHandle_, nullptr);\n\n  auto importedImage =\n      igl::vulkan::VulkanImage(*context_,\n                               exportedImage.exportedMemoryHandle_,\n                               VkExtent3D{.width = kWidth, .height = kHeight, .depth = 1},\n                               VK_IMAGE_TYPE_2D,\n                               kFormat,\n                               1, /* mipLevels */\n                               1, /* arrayLayers */\n                               VK_IMAGE_TILING_OPTIMAL,\n                               VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT,\n                               0, /* createFlags */\n                               VK_SAMPLE_COUNT_1_BIT,\n                               \"Image: vulkan import memory\");\n  EXPECT_TRUE(importedImage.isImported_);\n  EXPECT_NE(importedImage.getVkImage(), static_cast<VkImage_T*>(VK_NULL_HANDLE));\n}\n#endif // IGL_PLATFORM_WINDOWS\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanImageViewTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanImageView.h>\n\n#include <igl/Common.h>\n#include <igl/tests/util/device/TestDevice.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nnamespace {\nconstexpr uint32_t kWidth = 64;\nconstexpr uint32_t kHeight = 64;\nconstexpr VkFormat kFormat = VK_FORMAT_R8G8B8A8_UNORM;\n} // namespace\n\nclass VulkanImageViewTest : public ::testing::Test {\n public:\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n\n    device_ = igl::tests::util::device::createTestDevice(igl::BackendType::Vulkan);\n    ASSERT_TRUE(device_ != nullptr);\n    auto& device = static_cast<igl::vulkan::Device&>(*device_);\n    context_ = &device.getVulkanContext();\n    ASSERT_TRUE(context_ != nullptr);\n  }\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  vulkan::VulkanContext* context_ = nullptr;\n};\n\nTEST_F(VulkanImageViewTest, ImageViewCreateInfoDefaultValues) {\n  vulkan::VulkanImageViewCreateInfo ci;\n\n  EXPECT_EQ(ci.image, VK_NULL_HANDLE);\n  EXPECT_EQ(ci.viewType, VK_IMAGE_VIEW_TYPE_2D);\n  EXPECT_EQ(ci.format, VK_FORMAT_UNDEFINED);\n  EXPECT_EQ(ci.components.r, VK_COMPONENT_SWIZZLE_IDENTITY);\n  EXPECT_EQ(ci.components.g, VK_COMPONENT_SWIZZLE_IDENTITY);\n  EXPECT_EQ(ci.components.b, VK_COMPONENT_SWIZZLE_IDENTITY);\n  EXPECT_EQ(ci.components.a, VK_COMPONENT_SWIZZLE_IDENTITY);\n  EXPECT_EQ(ci.subresourceRange.aspectMask, VK_IMAGE_ASPECT_COLOR_BIT);\n  EXPECT_EQ(ci.subresourceRange.baseMipLevel, 0u);\n  EXPECT_EQ(ci.subresourceRange.levelCount, 1u);\n  EXPECT_EQ(ci.subresourceRange.baseArrayLayer, 0u);\n  EXPECT_EQ(ci.subresourceRange.layerCount, 1u);\n}\n\nTEST_F(VulkanImageViewTest, CreateImageViewWithCreateInfo) {\n  vulkan::VulkanImage image(*context_,\n                            VkExtent3D{.width = kWidth, .height = kHeight, .depth = 1},\n                            VK_IMAGE_TYPE_2D,\n                            kFormat,\n                            1, /* mipLevels */\n                            1, /* arrayLayers */\n                            VK_IMAGE_TILING_OPTIMAL,\n                            VK_IMAGE_USAGE_SAMPLED_BIT,\n                            VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, /* memFlags */\n                            0, /* createFlags */\n                            VK_SAMPLE_COUNT_1_BIT,\n                            \"Test Image\");\n  ASSERT_TRUE(image.valid());\n\n  vulkan::VulkanImageViewCreateInfo ci;\n  ci.image = image.getVkImage();\n  ci.viewType = VK_IMAGE_VIEW_TYPE_2D;\n  ci.format = kFormat;\n  ci.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;\n  ci.subresourceRange.baseMipLevel = 0;\n  ci.subresourceRange.levelCount = 1;\n  ci.subresourceRange.baseArrayLayer = 0;\n  ci.subresourceRange.layerCount = 1;\n\n  vulkan::VulkanImageView imageView(*context_, ci, \"Test ImageView\");\n\n  EXPECT_TRUE(imageView.valid());\n  EXPECT_NE(imageView.getVkImageView(), VK_NULL_HANDLE);\n  EXPECT_EQ(imageView.getVkImageAspectFlags(), VK_IMAGE_ASPECT_COLOR_BIT);\n}\n\nTEST_F(VulkanImageViewTest, CreateImageViewWithVkCreateInfo) {\n  vulkan::VulkanImage image(*context_,\n                            VkExtent3D{.width = kWidth, .height = kHeight, .depth = 1},\n                            VK_IMAGE_TYPE_2D,\n                            kFormat,\n                            1, /* mipLevels */\n                            1, /* arrayLayers */\n                            VK_IMAGE_TILING_OPTIMAL,\n                            VK_IMAGE_USAGE_SAMPLED_BIT,\n                            VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, /* memFlags */\n                            0, /* createFlags */\n                            VK_SAMPLE_COUNT_1_BIT,\n                            \"Test Image\");\n  ASSERT_TRUE(image.valid());\n\n  VkImageViewCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,\n      .pNext = nullptr,\n      .flags = 0,\n      .image = image.getVkImage(),\n      .viewType = VK_IMAGE_VIEW_TYPE_2D,\n      .format = kFormat,\n      .components =\n          {\n              .r = VK_COMPONENT_SWIZZLE_IDENTITY,\n              .g = VK_COMPONENT_SWIZZLE_IDENTITY,\n              .b = VK_COMPONENT_SWIZZLE_IDENTITY,\n              .a = VK_COMPONENT_SWIZZLE_IDENTITY,\n          },\n      .subresourceRange =\n          {\n              .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,\n              .baseMipLevel = 0,\n              .levelCount = 1,\n              .baseArrayLayer = 0,\n              .layerCount = 1,\n          },\n  };\n\n  vulkan::VulkanImageView imageView(*context_, ci, \"Test ImageView\");\n\n  EXPECT_TRUE(imageView.valid());\n  EXPECT_NE(imageView.getVkImageView(), VK_NULL_HANDLE);\n  EXPECT_EQ(imageView.getVkImageAspectFlags(), VK_IMAGE_ASPECT_COLOR_BIT);\n}\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanImmediateCommandsTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanImmediateCommands.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <set>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass VulkanImmediateCommandsTest : public ::testing::Test {\n public:\n  VulkanImmediateCommandsTest() = default;\n  ~VulkanImmediateCommandsTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(VulkanImmediateCommandsTest, AcquireCommandBuffer) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.immediate_, nullptr);\n\n  const auto& wrapper = ctx.immediate_->acquire();\n  EXPECT_TRUE(wrapper.cmdBuf != VK_NULL_HANDLE);\n  EXPECT_TRUE(wrapper.isEncoding);\n  ctx.immediate_->submit(wrapper);\n}\n\nTEST_F(VulkanImmediateCommandsTest, SubmitAndWait) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.immediate_, nullptr);\n\n  const auto& wrapper = ctx.immediate_->acquire();\n  ASSERT_TRUE(wrapper.cmdBuf != VK_NULL_HANDLE);\n\n  auto handle = ctx.immediate_->submit(wrapper);\n  EXPECT_FALSE(handle.empty());\n\n  VkResult result = ctx.immediate_->wait(handle);\n  EXPECT_EQ(result, VK_SUCCESS);\n  EXPECT_TRUE(ctx.immediate_->isReady(handle));\n}\n\nTEST_F(VulkanImmediateCommandsTest, MultipleSubmitsGetUniqueHandles) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.immediate_, nullptr);\n\n  std::set<uint32_t> submitIds;\n\n  for (int i = 0; i < 3; ++i) {\n    const auto& wrapper = ctx.immediate_->acquire();\n    auto handle = ctx.immediate_->submit(wrapper);\n    EXPECT_FALSE(handle.empty());\n    submitIds.insert(handle.submitId);\n  }\n\n  EXPECT_EQ(submitIds.size(), 3u);\n}\n\nTEST_F(VulkanImmediateCommandsTest, CommandBufferRecycling) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.immediate_, nullptr);\n\n  std::vector<igl::vulkan::VulkanImmediateCommands::SubmitHandle> handles;\n\n  for (int i = 0; i < 4; ++i) {\n    const auto& wrapper = ctx.immediate_->acquire();\n    auto handle = ctx.immediate_->submit(wrapper);\n    handles.push_back(handle);\n  }\n\n  for (auto& h : handles) {\n    ctx.immediate_->wait(h);\n  }\n\n  const auto& wrapper = ctx.immediate_->acquire();\n  EXPECT_TRUE(wrapper.cmdBuf != VK_NULL_HANDLE);\n  EXPECT_TRUE(wrapper.isEncoding);\n  ctx.immediate_->submit(wrapper);\n}\n\nTEST_F(VulkanImmediateCommandsTest, GetLastSubmitHandle) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.immediate_, nullptr);\n\n  const auto& wrapper1 = ctx.immediate_->acquire();\n  ctx.immediate_->submit(wrapper1);\n\n  const auto& wrapper2 = ctx.immediate_->acquire();\n  auto handle2 = ctx.immediate_->submit(wrapper2);\n\n  auto lastHandle = ctx.immediate_->getLastSubmitHandle();\n  EXPECT_EQ(lastHandle.submitId, handle2.submitId);\n  EXPECT_EQ(lastHandle.bufferIndex, handle2.bufferIndex);\n}\n\nTEST_F(VulkanImmediateCommandsTest, IsReadyOnEmptyHandle) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.immediate_, nullptr);\n\n  igl::vulkan::VulkanImmediateCommands::SubmitHandle emptyHandle;\n  EXPECT_TRUE(emptyHandle.empty());\n  EXPECT_TRUE(ctx.immediate_->isReady(emptyHandle));\n}\n\nTEST_F(VulkanImmediateCommandsTest, WaitAllCommandBuffers) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.immediate_, nullptr);\n\n  std::vector<igl::vulkan::VulkanImmediateCommands::SubmitHandle> handles;\n\n  for (int i = 0; i < 4; ++i) {\n    const auto& wrapper = ctx.immediate_->acquire();\n    auto handle = ctx.immediate_->submit(wrapper);\n    handles.push_back(handle);\n  }\n\n  ctx.immediate_->waitAll();\n\n  for (auto& h : handles) {\n    EXPECT_TRUE(ctx.immediate_->isReady(h));\n  }\n}\n\nTEST_F(VulkanImmediateCommandsTest, GetNextSubmitHandle) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.immediate_, nullptr);\n\n  // Submit one buffer first so getNextSubmitHandle has a valid state\n  const auto& wrapper = ctx.immediate_->acquire();\n  ctx.immediate_->submit(wrapper);\n\n  auto nextHandle = ctx.immediate_->getNextSubmitHandle();\n  EXPECT_GT(nextHandle.submitId, 0u);\n}\n\nTEST_F(VulkanImmediateCommandsTest, SubmitHandleComparison) {\n  igl::vulkan::VulkanImmediateCommands::SubmitHandle h1;\n  h1.bufferIndex = 0;\n  h1.submitId = 1;\n\n  igl::vulkan::VulkanImmediateCommands::SubmitHandle h2;\n  h2.bufferIndex = 0;\n  h2.submitId = 1;\n\n  EXPECT_EQ(h1, h2);\n\n  h2.submitId = 2;\n  EXPECT_NE(h1, h2);\n}\n\nTEST_F(VulkanImmediateCommandsTest, SubmitHandleRoundTrip) {\n  igl::vulkan::VulkanImmediateCommands::SubmitHandle original;\n  original.bufferIndex = 5;\n  original.submitId = 42;\n\n  uint64_t packed = original.handle();\n\n  igl::vulkan::VulkanImmediateCommands::SubmitHandle restored(packed);\n  EXPECT_EQ(restored.bufferIndex, original.bufferIndex);\n  EXPECT_EQ(restored.submitId, original.submitId);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanPipelineBuilderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanPipelineBuilder.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass VulkanPipelineBuilderTest : public ::testing::Test {\n public:\n  VulkanPipelineBuilderTest() = default;\n  ~VulkanPipelineBuilderTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(VulkanPipelineBuilderTest, DepthBiasEnable) {\n  igl::vulkan::VulkanPipelineBuilder builder;\n  auto& result = builder.depthBiasEnable(true);\n  EXPECT_EQ(&result, &builder);\n}\n\nTEST_F(VulkanPipelineBuilderTest, StencilStateOps) {\n  igl::vulkan::VulkanPipelineBuilder builder;\n  auto& result = builder.stencilStateOps(VK_STENCIL_FACE_FRONT_BIT,\n                                         VK_STENCIL_OP_KEEP,\n                                         VK_STENCIL_OP_REPLACE,\n                                         VK_STENCIL_OP_INCREMENT_AND_CLAMP,\n                                         VK_COMPARE_OP_ALWAYS);\n  EXPECT_EQ(&result, &builder);\n}\n\nTEST_F(VulkanPipelineBuilderTest, CullModeVariants) {\n  igl::vulkan::VulkanPipelineBuilder builder1;\n  auto& r1 = builder1.cullMode(VK_CULL_MODE_NONE);\n  EXPECT_EQ(&r1, &builder1);\n\n  igl::vulkan::VulkanPipelineBuilder builder2;\n  auto& r2 = builder2.cullMode(VK_CULL_MODE_FRONT_BIT);\n  EXPECT_EQ(&r2, &builder2);\n\n  igl::vulkan::VulkanPipelineBuilder builder3;\n  auto& r3 = builder3.cullMode(VK_CULL_MODE_BACK_BIT);\n  EXPECT_EQ(&r3, &builder3);\n\n  igl::vulkan::VulkanPipelineBuilder builder4;\n  auto& r4 = builder4.cullMode(VK_CULL_MODE_FRONT_AND_BACK);\n  EXPECT_EQ(&r4, &builder4);\n}\n\nTEST_F(VulkanPipelineBuilderTest, PolygonModeLine) {\n  igl::vulkan::VulkanPipelineBuilder builder;\n  auto& result = builder.polygonMode(VK_POLYGON_MODE_LINE);\n  EXPECT_EQ(&result, &builder);\n}\n\nTEST_F(VulkanPipelineBuilderTest, MultipleColorBlendAttachments) {\n  igl::vulkan::VulkanPipelineBuilder builder;\n\n  std::vector<VkPipelineColorBlendAttachmentState> blendStates(3);\n  for (auto& state : blendStates) {\n    state = {};\n    state.blendEnable = VK_TRUE;\n    state.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;\n    state.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;\n    state.colorBlendOp = VK_BLEND_OP_ADD;\n    state.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;\n    state.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO;\n    state.alphaBlendOp = VK_BLEND_OP_ADD;\n    state.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT |\n                           VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;\n  }\n\n  auto& result = builder.colorBlendAttachmentStates(blendStates);\n  EXPECT_EQ(&result, &builder);\n}\n\nTEST_F(VulkanPipelineBuilderTest, PrimitiveTopologyVariants) {\n  igl::vulkan::VulkanPipelineBuilder builder;\n  auto& result = builder.primitiveTopology(VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP);\n  EXPECT_EQ(&result, &builder);\n}\n\nTEST_F(VulkanPipelineBuilderTest, DynamicStates) {\n  igl::vulkan::VulkanPipelineBuilder builder;\n  std::vector<VkDynamicState> states = {\n      VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR, VK_DYNAMIC_STATE_DEPTH_BIAS};\n  auto& result = builder.dynamicStates(states);\n  EXPECT_EQ(&result, &builder);\n}\n\nTEST_F(VulkanPipelineBuilderTest, DepthCompareOp) {\n  igl::vulkan::VulkanPipelineBuilder builder;\n  auto& result = builder.depthCompareOp(VK_COMPARE_OP_LESS_OR_EQUAL, true);\n  EXPECT_EQ(&result, &builder);\n}\n\nTEST_F(VulkanPipelineBuilderTest, ComputePipelineBasic) {\n  igl::vulkan::VulkanComputePipelineBuilder builder{};\n  (void)builder; // Verify construction succeeds\n  EXPECT_GE(igl::vulkan::VulkanComputePipelineBuilder::getNumPipelinesCreated(), 0u);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanQueuePool.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanQueuePool.h>\n\n#include <igl/Macros.h>\n\nnamespace igl::vulkan {\nIGL_MAYBE_UNUSED static std::ostream& operator<<(std::ostream& os,\n                                                 const VulkanQueueDescriptor& queue) {\n  return os << \"VulkanQueueDescriptor\" << \"\\n\\tQueue Index        : \" << queue.queueIndex\n            << \"\\n\\tQueue Family Index : \" << queue.familyIndex;\n}\n} // namespace igl::vulkan\n\nnamespace igl::tests {\n\nusing namespace vulkan;\n\nTEST(VulkanQueuePoolTest, ReturnDedicatedComputeQueueWhenComputeQueueIsRequested) {\n  // Given a dedicated compute queue\n  const VulkanQueueDescriptor computeQueueDescriptor{\n      .queueFlags = VK_QUEUE_COMPUTE_BIT, .queueIndex = 0, .familyIndex = 1};\n  const VulkanQueuePool queuePool({computeQueueDescriptor});\n\n  // When compute queue is requested\n  auto queueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_COMPUTE_BIT);\n\n  // Then return compute queue\n  ASSERT_TRUE(queueDescriptor.isValid());\n  EXPECT_EQ(queueDescriptor, computeQueueDescriptor);\n}\n\nTEST(VulkanQueuePoolTest, ReturnDedicatedTransferQueueWhenTransferQueueIsRequested) {\n  // Given a dedicated transfer queue\n  const VulkanQueueDescriptor transferQueueDescriptor{\n      .queueFlags = VK_QUEUE_TRANSFER_BIT, .queueIndex = 0, .familyIndex = 1};\n  const VulkanQueuePool queuePool({transferQueueDescriptor});\n\n  // When transfer queue is requested\n  auto queueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_TRANSFER_BIT);\n\n  // Then return transfer queue\n  ASSERT_TRUE(queueDescriptor.isValid());\n  EXPECT_EQ(queueDescriptor, transferQueueDescriptor);\n}\n\nTEST(VulkanQueuePoolTest, ReturnAllInOneQueueWhenComputeQueueIsRequested) {\n  // Given an all in one queue\n  const VulkanQueueDescriptor allInOneQueueDescriptor{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT,\n      .queueIndex = 0,\n      .familyIndex = 1};\n  const VulkanQueuePool queuePool({allInOneQueueDescriptor});\n\n  // When compute queue is requested\n  auto queueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_COMPUTE_BIT);\n\n  // Then return all in one queue\n  ASSERT_TRUE(queueDescriptor.isValid());\n  EXPECT_EQ(queueDescriptor, allInOneQueueDescriptor);\n}\n\nTEST(VulkanQueuePoolTest, ReturnAllInOneQueueWhenTransferQueueIsRequested) {\n  // Given an all in one queue\n  const VulkanQueueDescriptor allInOneQueueDescriptor{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT,\n      .queueIndex = 0,\n      .familyIndex = 1};\n  const VulkanQueuePool queuePool({allInOneQueueDescriptor});\n\n  // When transfer queue is requested\n  auto queueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_TRANSFER_BIT);\n\n  // Then return all in one queue\n  ASSERT_TRUE(queueDescriptor.isValid());\n  EXPECT_EQ(queueDescriptor, allInOneQueueDescriptor);\n}\n\nTEST(VulkanQueuePoolTest, PreferDedicatedComputeQueueOverAllInOneQueue) {\n  // Given a dedicated compute queue and an all in one queue\n  const VulkanQueueDescriptor computeQueueDescriptor{\n      .queueFlags = VK_QUEUE_COMPUTE_BIT, .queueIndex = 0, .familyIndex = 1};\n  const VulkanQueueDescriptor allInOneQueueDescriptor{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT,\n      .queueIndex = 0,\n      .familyIndex = 2};\n  const VulkanQueuePool queuePool({allInOneQueueDescriptor, computeQueueDescriptor});\n\n  // When compute queue is requested\n  auto queueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_COMPUTE_BIT);\n\n  // Then return dedicated compute queue\n  ASSERT_TRUE(queueDescriptor.isValid());\n  EXPECT_EQ(queueDescriptor, computeQueueDescriptor);\n}\n\nTEST(VulkanQueuePoolTest, PreferDedicatedTransferQueueOverAllInOneQueue) {\n  // Given a dedicated transfer queue and an all in one queue\n  const VulkanQueueDescriptor transferQueueDescriptor{\n      .queueFlags = VK_QUEUE_TRANSFER_BIT, .queueIndex = 0, .familyIndex = 1};\n  const VulkanQueueDescriptor allInOneQueueDescriptor{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT,\n      .queueIndex = 0,\n      .familyIndex = 2};\n  const VulkanQueuePool queuePool({allInOneQueueDescriptor, transferQueueDescriptor});\n\n  // When transfer queue is requested\n  auto queueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_TRANSFER_BIT);\n\n  // Then return dedicated transfer queue\n  ASSERT_TRUE(queueDescriptor.isValid());\n  EXPECT_EQ(queueDescriptor, transferQueueDescriptor);\n}\n\nTEST(VulkanQueuePoolTest, IfUnreservedUseSameQueueForQueueRequests) {\n  // Given 2 all in one queues\n  const VulkanQueueDescriptor allInOneQueueDescriptor1{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT,\n      .queueIndex = 0,\n      .familyIndex = 1};\n  const VulkanQueueDescriptor allInOneQueueDescriptor2{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT,\n      .queueIndex = 0,\n      .familyIndex = 2};\n  const VulkanQueuePool queuePool({allInOneQueueDescriptor1, allInOneQueueDescriptor2});\n\n  // When graphics queue and compute queue are requested\n  auto graphicsQueueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_GRAPHICS_BIT);\n  auto computeQueueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_COMPUTE_BIT);\n\n  // Then return same all in one queue\n  ASSERT_TRUE(graphicsQueueDescriptor.isValid());\n  ASSERT_TRUE(computeQueueDescriptor.isValid());\n  EXPECT_EQ(graphicsQueueDescriptor, allInOneQueueDescriptor1);\n  EXPECT_EQ(computeQueueDescriptor, allInOneQueueDescriptor1);\n}\n\nTEST(VulkanQueuePoolTest, DoNotUseReservedQueuesForFurtherQueueRequests) {\n  // Given a 2 all in one queues\n  const VulkanQueueDescriptor allInOneQueueDescriptor1{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT,\n      .queueIndex = 0,\n      .familyIndex = 1};\n  const VulkanQueueDescriptor allInOneQueueDescriptor2{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_TRANSFER_BIT,\n      .queueIndex = 0,\n      .familyIndex = 2};\n  VulkanQueuePool queuePool({allInOneQueueDescriptor1, allInOneQueueDescriptor2});\n\n  // When the first queue is reserved\n  auto graphicsQueueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_GRAPHICS_BIT);\n  ASSERT_TRUE(graphicsQueueDescriptor.isValid());\n  EXPECT_EQ(graphicsQueueDescriptor, allInOneQueueDescriptor1);\n  queuePool.reserveQueue(graphicsQueueDescriptor);\n  auto computeQueueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_COMPUTE_BIT);\n\n  // Then return an unreserved queue for further requests\n  ASSERT_TRUE(computeQueueDescriptor.isValid());\n  EXPECT_EQ(computeQueueDescriptor, allInOneQueueDescriptor2);\n}\n\nTEST(VulkanQueuePoolTest, DoNotReturnQueueCreationInfosIfNothingIsReserved) {\n  // Given a queue\n  const VulkanQueueDescriptor graphicsDescriptor{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT, .queueIndex = 0, .familyIndex = 1};\n  const VulkanQueuePool queuePool({graphicsDescriptor});\n\n  // When a queue is requested but not reserved\n  auto queueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_GRAPHICS_BIT);\n  ASSERT_TRUE(queueDescriptor.isValid());\n\n  // Then do not return any creation infos\n  auto qcis = queuePool.getQueueCreationInfos();\n  ASSERT_TRUE(qcis.empty());\n}\n\nTEST(VulkanQueuePoolTest, ReturnQueueCreationInfoIfAnyQueueIsReserved) {\n  // Given a queue\n  const VulkanQueueDescriptor graphicsQueueDescriptor{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT, .queueIndex = 0, .familyIndex = 1};\n  VulkanQueuePool queuePool({graphicsQueueDescriptor});\n\n  // When a queue is requested and reserved\n  auto queueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_GRAPHICS_BIT);\n  ASSERT_TRUE(queueDescriptor.isValid());\n  queuePool.reserveQueue(queueDescriptor);\n\n  // Then return reserved queue creation info\n  auto qcis = queuePool.getQueueCreationInfos();\n  ASSERT_EQ(qcis.size(), 1);\n  EXPECT_EQ(qcis[0].sType, VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO);\n  EXPECT_EQ(qcis[0].queueFamilyIndex, graphicsQueueDescriptor.familyIndex);\n  EXPECT_EQ(qcis[0].queueCount, 1);\n  EXPECT_EQ(*qcis[0].pQueuePriorities, 1.0);\n}\n\nTEST(VulkanQueuePoolTest, ReturnSingleQueueCreationInfoForSameQueueFamily) {\n  // Given 2 queues from same family\n  const VulkanQueueDescriptor graphicsQueueDescriptor1{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT, .queueIndex = 0, .familyIndex = 1};\n  const VulkanQueueDescriptor graphicsQueueDescriptor2{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT, .queueIndex = 1, .familyIndex = 1};\n  VulkanQueuePool queuePool({graphicsQueueDescriptor1, graphicsQueueDescriptor2});\n\n  // When 2 queues are requested and reserved\n  auto queueDescriptor1 = queuePool.findQueueDescriptor(VK_QUEUE_GRAPHICS_BIT);\n  ASSERT_TRUE(queueDescriptor1.isValid());\n  queuePool.reserveQueue(queueDescriptor1);\n  auto queueDescriptor2 = queuePool.findQueueDescriptor(VK_QUEUE_GRAPHICS_BIT);\n  ASSERT_TRUE(queueDescriptor2.isValid());\n  queuePool.reserveQueue(queueDescriptor2);\n\n  // Then return a single queue creation info with queue count 2\n  auto qcis = queuePool.getQueueCreationInfos();\n  ASSERT_EQ(qcis.size(), 1);\n  EXPECT_EQ(qcis[0].queueFamilyIndex, graphicsQueueDescriptor1.familyIndex);\n  EXPECT_EQ(qcis[0].queueCount, 2);\n}\n\nTEST(VulkanQueuePoolTest, ReturnMultipleQueueCreationInfosForDifferentQueueFamilies) {\n  // Given 2 queues from different families\n  const VulkanQueueDescriptor graphicsQueueDescriptor1{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT, .queueIndex = 0, .familyIndex = 1};\n  const VulkanQueueDescriptor graphicsQueueDescriptor2{\n      .queueFlags = VK_QUEUE_GRAPHICS_BIT, .queueIndex = 0, .familyIndex = 2};\n  VulkanQueuePool queuePool({graphicsQueueDescriptor1, graphicsQueueDescriptor2});\n\n  // When 2 queues are requested and reserved\n  auto queueDescriptor1 = queuePool.findQueueDescriptor(VK_QUEUE_GRAPHICS_BIT);\n  ASSERT_TRUE(queueDescriptor1.isValid());\n  queuePool.reserveQueue(queueDescriptor1);\n  auto queueDescriptor2 = queuePool.findQueueDescriptor(VK_QUEUE_GRAPHICS_BIT);\n  ASSERT_TRUE(queueDescriptor2.isValid());\n  queuePool.reserveQueue(queueDescriptor2);\n\n  // Then return 2 queue creation infos with queue count 1\n  auto qcis = queuePool.getQueueCreationInfos();\n  ASSERT_EQ(qcis.size(), 2);\n  EXPECT_EQ(qcis[0].queueFamilyIndex, queueDescriptor1.familyIndex);\n  EXPECT_EQ(qcis[0].queueCount, 1);\n  EXPECT_EQ(qcis[1].queueFamilyIndex, queueDescriptor2.familyIndex);\n  EXPECT_EQ(qcis[1].queueCount, 1);\n}\n\n} // namespace igl::tests\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanRenderPassBuilderTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanRenderPassBuilder.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass VulkanRenderPassBuilderTest : public ::testing::Test {\n public:\n  VulkanRenderPassBuilderTest() = default;\n  ~VulkanRenderPassBuilderTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(VulkanRenderPassBuilderTest, SingleColorAttachment) {\n  auto& ctx = getVulkanContext();\n\n  igl::vulkan::VulkanRenderPassBuilder builder;\n  builder.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n\n  auto rp = ctx.findRenderPass(builder);\n  EXPECT_NE(rp.pass, VK_NULL_HANDLE);\n}\n\nTEST_F(VulkanRenderPassBuilderTest, ColorWithDepthStencil) {\n  auto& ctx = getVulkanContext();\n\n  igl::vulkan::VulkanRenderPassBuilder builder;\n  builder.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n  builder.addDepthStencil(\n      VK_FORMAT_D24_UNORM_S8_UINT, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n\n  auto rp = ctx.findRenderPass(builder);\n  EXPECT_NE(rp.pass, VK_NULL_HANDLE);\n}\n\nTEST_F(VulkanRenderPassBuilderTest, MultipleColorAttachments) {\n  auto& ctx = getVulkanContext();\n\n  igl::vulkan::VulkanRenderPassBuilder builder;\n  builder.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n  builder.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_LOAD, VK_ATTACHMENT_STORE_OP_STORE);\n\n  auto rp = ctx.findRenderPass(builder);\n  EXPECT_NE(rp.pass, VK_NULL_HANDLE);\n}\n\nTEST_F(VulkanRenderPassBuilderTest, WithResolveAttachment) {\n  auto& ctx = getVulkanContext();\n\n  igl::vulkan::VulkanRenderPassBuilder builder;\n  builder.addColor(VK_FORMAT_R8G8B8A8_UNORM,\n                   VK_ATTACHMENT_LOAD_OP_CLEAR,\n                   VK_ATTACHMENT_STORE_OP_STORE,\n                   VK_IMAGE_LAYOUT_UNDEFINED,\n                   VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,\n                   VK_SAMPLE_COUNT_4_BIT);\n  builder.addColorResolve(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_DONT_CARE, VK_ATTACHMENT_STORE_OP_STORE);\n\n  auto rp = ctx.findRenderPass(builder);\n  EXPECT_NE(rp.pass, VK_NULL_HANDLE);\n}\n\nTEST_F(VulkanRenderPassBuilderTest, MultiviewRenderPass) {\n  auto& ctx = getVulkanContext();\n\n  igl::vulkan::VulkanRenderPassBuilder builder;\n  builder.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n  builder.setMultiviewMasks(0x3, 0x3);\n\n  auto rp = ctx.findRenderPass(builder);\n  EXPECT_NE(rp.pass, VK_NULL_HANDLE);\n}\n\nTEST_F(VulkanRenderPassBuilderTest, HashEquality) {\n  igl::vulkan::VulkanRenderPassBuilder builder1;\n  builder1.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n\n  igl::vulkan::VulkanRenderPassBuilder builder2;\n  builder2.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n\n  igl::vulkan::VulkanRenderPassBuilder::HashFunction hasher;\n  EXPECT_EQ(hasher(builder1), hasher(builder2));\n}\n\nTEST_F(VulkanRenderPassBuilderTest, HashInequality) {\n  igl::vulkan::VulkanRenderPassBuilder builder1;\n  builder1.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n\n  igl::vulkan::VulkanRenderPassBuilder builder2;\n  builder2.addColor(\n      VK_FORMAT_B8G8R8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n\n  igl::vulkan::VulkanRenderPassBuilder::HashFunction hasher;\n  EXPECT_NE(hasher(builder1), hasher(builder2));\n}\n\nTEST_F(VulkanRenderPassBuilderTest, EqualityOperator) {\n  igl::vulkan::VulkanRenderPassBuilder builder1;\n  builder1.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n\n  igl::vulkan::VulkanRenderPassBuilder builder2;\n  builder2.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_CLEAR, VK_ATTACHMENT_STORE_OP_STORE);\n\n  EXPECT_TRUE(builder1 == builder2);\n\n  igl::vulkan::VulkanRenderPassBuilder builder3;\n  builder3.addColor(\n      VK_FORMAT_R8G8B8A8_UNORM, VK_ATTACHMENT_LOAD_OP_LOAD, VK_ATTACHMENT_STORE_OP_STORE);\n\n  EXPECT_FALSE(builder1 == builder3);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanSemaphoreExtendedTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanSemaphore.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass VulkanSemaphoreExtendedTest : public ::testing::Test {\n public:\n  VulkanSemaphoreExtendedTest() = default;\n  ~VulkanSemaphoreExtendedTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(VulkanSemaphoreExtendedTest, BinaryCreation) {\n  auto& ctx = getVulkanContext();\n\n  auto semaphore = std::make_unique<igl::vulkan::VulkanSemaphore>(\n      ctx.vf_, ctx.getVkDevice(), false, \"testBinarySemaphore\");\n\n  ASSERT_NE(semaphore, nullptr);\n  EXPECT_NE(semaphore->getVkSemaphore(), VK_NULL_HANDLE);\n  EXPECT_FALSE(semaphore->exportable_);\n  EXPECT_EQ(semaphore->getFileDescriptor(), -1);\n}\n\nTEST_F(VulkanSemaphoreExtendedTest, TimelineCreation) {\n  auto& ctx = getVulkanContext();\n\n  auto semaphore = std::make_unique<igl::vulkan::VulkanSemaphore>(\n      ctx.vf_, ctx.getVkDevice(), 0, false, \"testTimelineSemaphore\");\n\n  ASSERT_NE(semaphore, nullptr);\n  EXPECT_NE(semaphore->getVkSemaphore(), VK_NULL_HANDLE);\n  EXPECT_FALSE(semaphore->exportable_);\n  EXPECT_EQ(semaphore->getFileDescriptor(), -1);\n}\n\nTEST_F(VulkanSemaphoreExtendedTest, ExportableSemaphore) {\n#if IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n  auto& ctx = getVulkanContext();\n\n  auto semaphore = std::make_unique<igl::vulkan::VulkanSemaphore>(\n      ctx.vf_, ctx.getVkDevice(), true, \"testExportableSemaphore\");\n\n  ASSERT_NE(semaphore, nullptr);\n  EXPECT_NE(semaphore->getVkSemaphore(), VK_NULL_HANDLE);\n  EXPECT_TRUE(semaphore->exportable_);\n#else\n  GTEST_SKIP() << \"Exportable semaphores may not be supported on this platform.\";\n#endif\n}\n\nTEST_F(VulkanSemaphoreExtendedTest, MoveConstruction) {\n  auto& ctx = getVulkanContext();\n\n  igl::vulkan::VulkanSemaphore original(ctx.vf_, ctx.getVkDevice(), false, \"testMoveCtor\");\n  VkSemaphore originalHandle = original.getVkSemaphore();\n  ASSERT_NE(originalHandle, VK_NULL_HANDLE);\n\n  igl::vulkan::VulkanSemaphore moved(std::move(original));\n  EXPECT_EQ(moved.getVkSemaphore(), originalHandle);\n  // After move, original is in a valid but unspecified state - don't access it\n}\n\nTEST_F(VulkanSemaphoreExtendedTest, MoveAssignment) {\n  auto& ctx = getVulkanContext();\n\n  igl::vulkan::VulkanSemaphore original(ctx.vf_, ctx.getVkDevice(), false, \"testMoveAssign1\");\n  igl::vulkan::VulkanSemaphore target(ctx.vf_, ctx.getVkDevice(), false, \"testMoveAssign2\");\n\n  VkSemaphore originalHandle = original.getVkSemaphore();\n  ASSERT_NE(originalHandle, VK_NULL_HANDLE);\n\n  target = std::move(original);\n  EXPECT_EQ(target.getVkSemaphore(), originalHandle);\n  // After move, original is in a valid but unspecified state - don't access it\n}\n\nTEST_F(VulkanSemaphoreExtendedTest, TimelineWithInitialValue) {\n  auto& ctx = getVulkanContext();\n\n  auto semaphore = std::make_unique<igl::vulkan::VulkanSemaphore>(\n      ctx.vf_, ctx.getVkDevice(), 42, false, \"testTimelineInitial\");\n\n  ASSERT_NE(semaphore, nullptr);\n  EXPECT_NE(semaphore->getVkSemaphore(), VK_NULL_HANDLE);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanStagingDeviceTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <gtest/gtest.h>\n\n#include <igl/vulkan/VulkanStagingDevice.h>\n\n#include \"../util/TestDevice.h\"\n\n#include <cstring>\n#include <vector>\n#include <igl/Buffer.h>\n#include <igl/CommandBuffer.h>\n#include <igl/Framebuffer.h>\n#include <igl/Texture.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n\nnamespace igl::tests {\n\nclass VulkanStagingDeviceTest : public ::testing::Test {\n public:\n  VulkanStagingDeviceTest() = default;\n  ~VulkanStagingDeviceTest() override = default;\n\n  void SetUp() override {\n    igl::setDebugBreakEnabled(false);\n    iglDev_ = util::createTestDevice();\n    ASSERT_NE(iglDev_, nullptr);\n    ASSERT_EQ(iglDev_->getBackendType(), BackendType::Vulkan) << \"Test requires Vulkan backend\";\n  }\n\n  void TearDown() override {}\n\n protected:\n  std::shared_ptr<IDevice> iglDev_;\n\n  igl::vulkan::VulkanContext& getVulkanContext() {\n    auto& device = static_cast<igl::vulkan::Device&>(*iglDev_);\n    return device.getVulkanContext();\n  }\n};\n\nTEST_F(VulkanStagingDeviceTest, BufferSubDataSmallUpload) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.stagingDevice_, nullptr);\n\n  Result ret;\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Storage,\n      .length = 256,\n      .storage = ResourceStorage::Private,\n  };\n  auto buffer = iglDev_->createBuffer(bufferDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  std::vector<uint8_t> srcData(256);\n  for (size_t i = 0; i < srcData.size(); ++i) {\n    srcData[i] = static_cast<uint8_t>(i & 0xFF);\n  }\n\n  ret = buffer->upload(srcData.data(), BufferRange(256, 0));\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  const auto* downloadedData = static_cast<uint8_t*>(buffer->map(BufferRange(256, 0), &ret));\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  for (size_t i = 0; i < 256; ++i) {\n    EXPECT_EQ(downloadedData[i], srcData[i]);\n  }\n\n  buffer->unmap();\n}\n\nTEST_F(VulkanStagingDeviceTest, BufferSubDataLargerThanStaging) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.stagingDevice_, nullptr);\n\n  const VkDeviceSize maxStagingSize = ctx.stagingDevice_->getMaxStagingBufferSize();\n\n  size_t maxBufferLength = 0;\n  iglDev_->getFeatureLimits(DeviceFeatureLimits::MaxStorageBufferBytes, maxBufferLength);\n\n  const VkDeviceSize desiredSize = std::min<VkDeviceSize>(maxStagingSize * 2, maxBufferLength);\n\n  if (desiredSize < maxStagingSize) {\n    GTEST_SKIP() << \"Max buffer size is smaller than staging buffer, cannot test chunked upload.\";\n  }\n\n  Result ret;\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Storage,\n      .length = static_cast<size_t>(desiredSize),\n      .storage = ResourceStorage::Private,\n  };\n  auto buffer = iglDev_->createBuffer(bufferDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  std::vector<uint16_t> srcData(desiredSize / 2);\n  for (size_t i = 0; i < srcData.size(); ++i) {\n    srcData[i] = static_cast<uint16_t>(i & 0xFFFF);\n  }\n\n  ret = buffer->upload(srcData.data(), BufferRange(desiredSize, 0));\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  const auto* downloadedData =\n      static_cast<uint16_t*>(buffer->map(BufferRange(desiredSize, 0), &ret));\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  for (size_t i = 0; i < srcData.size(); ++i) {\n    ASSERT_EQ(downloadedData[i], srcData[i]) << \"Mismatch at index \" << i;\n  }\n\n  buffer->unmap();\n}\n\nTEST_F(VulkanStagingDeviceTest, ImageDataUpload) {\n  Result ret;\n\n  TextureDesc texDesc =\n      TextureDesc::new2D(TextureFormat::RGBA_UNorm8, 4, 4, TextureDesc::TextureUsageBits::Sampled);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  const size_t dataSize = 4 * 4 * 4;\n  std::vector<uint8_t> pixelData(dataSize);\n  for (size_t i = 0; i < dataSize; ++i) {\n    pixelData[i] = static_cast<uint8_t>(i % 256);\n  }\n\n  ret = texture->upload(texture->getFullRange(0), pixelData.data());\n  EXPECT_TRUE(ret.isOk()) << ret.message.c_str();\n}\n\nTEST_F(VulkanStagingDeviceTest, GetImageData2D) {\n  Result ret;\n\n  TextureDesc texDesc = TextureDesc::new2D(TextureFormat::RGBA_UNorm8,\n                                           2,\n                                           2,\n                                           TextureDesc::TextureUsageBits::Sampled |\n                                               TextureDesc::TextureUsageBits::Attachment);\n  auto texture = iglDev_->createTexture(texDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(texture, nullptr);\n\n  constexpr uint32_t kColor = 0xAABBCCDD;\n  const std::array<uint32_t, 4> srcData = {kColor, kColor, kColor, kColor};\n\n  ret = texture->upload(texture->getFullRange(0), srcData.data());\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  CommandQueueDesc queueDesc{};\n  auto cmdQueue = iglDev_->createCommandQueue(queueDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  auto cmdBuf = cmdQueue->createCommandBuffer(CommandBufferDesc(), &ret);\n  ASSERT_TRUE(ret.isOk());\n  cmdQueue->submit(*cmdBuf);\n\n  std::array<uint32_t, 4> downloadedData = {};\n  auto fbDesc = FramebufferDesc();\n  fbDesc.colorAttachments[0].texture = texture;\n  auto fb = iglDev_->createFramebuffer(fbDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  fb->copyBytesColorAttachment(*cmdQueue, 0, downloadedData.data(), texture->getFullRange(0));\n\n  for (size_t i = 0; i < 4; ++i) {\n    EXPECT_EQ(downloadedData[i], kColor);\n  }\n}\n\nTEST_F(VulkanStagingDeviceTest, PartialBufferUpdate) {\n  Result ret;\n\n  const BufferDesc bufferDesc{\n      .type = BufferDesc::BufferTypeBits::Storage,\n      .length = 256,\n      .storage = ResourceStorage::Private,\n  };\n  auto buffer = iglDev_->createBuffer(bufferDesc, &ret);\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n  ASSERT_NE(buffer, nullptr);\n\n  std::vector<uint8_t> zeros(256, 0);\n  ret = buffer->upload(zeros.data(), BufferRange(256, 0));\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  std::vector<uint8_t> partialData(64, 0xAB);\n  const size_t offset = 64;\n  ret = buffer->upload(partialData.data(), BufferRange(64, offset));\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  const auto* downloadedData = static_cast<uint8_t*>(buffer->map(BufferRange(256, 0), &ret));\n  ASSERT_TRUE(ret.isOk()) << ret.message.c_str();\n\n  for (size_t i = 0; i < offset; ++i) {\n    EXPECT_EQ(downloadedData[i], 0) << \"Non-zero before offset at index \" << i;\n  }\n  for (size_t i = offset; i < offset + 64; ++i) {\n    EXPECT_EQ(downloadedData[i], 0xAB) << \"Mismatch in partial update region at index \" << i;\n  }\n\n  buffer->unmap();\n}\n\nTEST_F(VulkanStagingDeviceTest, MaxStagingBufferSizePositive) {\n  auto& ctx = getVulkanContext();\n  ASSERT_NE(ctx.stagingDevice_, nullptr);\n\n  EXPECT_GT(ctx.stagingDevice_->getMaxStagingBufferSize(), 0u);\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_MACOSX || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanSwapchainExtendedTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/Common.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n\n#include <gtest/gtest.h>\n\n#include <cstddef>\n#include <memory>\n#include <igl/tests/util/device/vulkan/TestDevice.h> // IWYU pragma: export\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanSwapchain.h> // IWYU pragma: keep\n\nnamespace igl::tests {\n\nnamespace {\n[[maybe_unused]] constexpr uint32_t kWidth = 512;\n[[maybe_unused]] constexpr uint32_t kHeight = 512;\n} // namespace\n\nclass VulkanSwapchainExtendedTest : public ::testing::Test {\n public:\n  void SetUp() override {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID\n    GTEST_SKIP() << \"Headless surface not supported on this platform.\";\n#else\n    igl::setDebugBreakEnabled(false);\n\n    igl::vulkan::VulkanContextConfig config = util::device::vulkan::getContextConfig(true);\n    config.headless = true;\n\n    device_ = igl::tests::util::device::vulkan::createTestDevice(config);\n    ASSERT_TRUE(device_ != nullptr);\n    auto& device = static_cast<igl::vulkan::Device&>(*device_);\n    context_ = &device.getVulkanContext();\n    ASSERT_TRUE(context_ != nullptr);\n#endif\n  }\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  vulkan::VulkanContext* context_ = nullptr;\n};\n\nTEST_F(VulkanSwapchainExtendedTest, SwapchainFormat) {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID\n  GTEST_SKIP() << \"Headless surface not supported on this platform.\";\n#else\n  auto swapchain = std::make_unique<igl::vulkan::VulkanSwapchain>(*context_, kWidth, kHeight);\n  ASSERT_NE(swapchain, nullptr);\n\n  VkFormat format = swapchain->getFormatColor();\n  EXPECT_NE(format, VK_FORMAT_UNDEFINED);\n\n  EXPECT_TRUE(format == VK_FORMAT_R8G8B8A8_UNORM || format == VK_FORMAT_B8G8R8A8_UNORM ||\n              format == VK_FORMAT_R8G8B8A8_SRGB || format == VK_FORMAT_B8G8R8A8_SRGB ||\n              format == VK_FORMAT_A2B10G10R10_UNORM_PACK32 ||\n              format == VK_FORMAT_R16G16B16A16_SFLOAT);\n#endif\n}\n\nTEST_F(VulkanSwapchainExtendedTest, ImageCount) {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID\n  GTEST_SKIP() << \"Headless surface not supported on this platform.\";\n#else\n  auto swapchain = std::make_unique<igl::vulkan::VulkanSwapchain>(*context_, kWidth, kHeight);\n  ASSERT_NE(swapchain, nullptr);\n\n  uint32_t imageCount = swapchain->getNumSwapchainImages();\n  EXPECT_GT(imageCount, 0u);\n  EXPECT_LE(imageCount, 8u);\n#endif\n}\n\nTEST_F(VulkanSwapchainExtendedTest, InitialState) {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID\n  GTEST_SKIP() << \"Headless surface not supported on this platform.\";\n#else\n  auto swapchain = std::make_unique<igl::vulkan::VulkanSwapchain>(*context_, kWidth, kHeight);\n  ASSERT_NE(swapchain, nullptr);\n\n  EXPECT_EQ(swapchain->getWidth(), kWidth);\n  EXPECT_EQ(swapchain->getHeight(), kHeight);\n\n  const VkExtent2D extent = swapchain->getExtent();\n  EXPECT_EQ(extent.width, kWidth);\n  EXPECT_EQ(extent.height, kHeight);\n\n  EXPECT_EQ(swapchain->getCurrentImageIndex(), 0u);\n\n  const uint32_t numImages = swapchain->getNumSwapchainImages();\n  EXPECT_EQ(swapchain->getFrameNumber(), numImages);\n  EXPECT_EQ(swapchain->acquireSemaphores.size(), numImages);\n  EXPECT_EQ(swapchain->timelineWaitValues.size(), numImages);\n\n  EXPECT_NE(swapchain->getSemaphore(), VK_NULL_HANDLE);\n#endif\n}\n\nTEST_F(VulkanSwapchainExtendedTest, CurrentVulkanTexture) {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID\n  GTEST_SKIP() << \"Headless surface not supported on this platform.\";\n#else\n  auto swapchain = std::make_unique<igl::vulkan::VulkanSwapchain>(*context_, kWidth, kHeight);\n  ASSERT_NE(swapchain, nullptr);\n\n  auto texture = swapchain->getCurrentVulkanTexture();\n  ASSERT_NE(texture, nullptr);\n\n  EXPECT_EQ(texture->image_.getVkImage(), swapchain->getCurrentVkImage());\n  EXPECT_EQ(texture->imageView_.getVkImageView(), swapchain->getCurrentVkImageView());\n#endif\n}\n\nTEST_F(VulkanSwapchainExtendedTest, DepthBufferLazyAllocation) {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID\n  GTEST_SKIP() << \"Headless surface not supported on this platform.\";\n#else\n  auto swapchain = std::make_unique<igl::vulkan::VulkanSwapchain>(*context_, kWidth, kHeight);\n  ASSERT_NE(swapchain, nullptr);\n\n  auto depthTexture = swapchain->getCurrentDepthTexture();\n  ASSERT_NE(depthTexture, nullptr);\n\n  EXPECT_EQ(depthTexture->image_.getVkImage(), swapchain->getDepthVkImage());\n  EXPECT_EQ(depthTexture->imageView_.getVkImageView(), swapchain->getDepthVkImageView());\n\n  auto depthTextureAgain = swapchain->getCurrentDepthTexture();\n  EXPECT_EQ(depthTexture, depthTextureAgain);\n#endif\n}\n\nTEST_F(VulkanSwapchainExtendedTest, AcquireNextImage) {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID\n  GTEST_SKIP() << \"Headless surface not supported on this platform.\";\n#else\n  auto swapchain = std::make_unique<igl::vulkan::VulkanSwapchain>(*context_, kWidth, kHeight);\n  ASSERT_NE(swapchain, nullptr);\n\n  igl::Result result = swapchain->acquireNextImage();\n  EXPECT_TRUE(result.isOk()) << result.message.c_str();\n#endif\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/tests/vulkan/VulkanSwapchainTest.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/Common.h>\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n#include <gtest/gtest.h>\n\n#include <cstddef>\n#include <memory>\n#include <igl/tests/util/device/vulkan/TestDevice.h> // IWYU pragma: export\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanSwapchain.h>\n\nnamespace igl::tests {\n\nnamespace {\n[[maybe_unused]] constexpr uint32_t kWidth = 1024;\n[[maybe_unused]] constexpr uint32_t kHeight = 1024;\n} // namespace\n\n//\n// VulkanSwapchainTest\n//\n// Unit tests for igl::vulkan::VulkanSwapchain\n//\nclass VulkanSwapchainTest : public ::testing::Test {\n public:\n  // Set up common resources.\n  void SetUp() override {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID\n    // @fb-only\n    GTEST_SKIP() << \"Fix these tests on Windows and Android, no headless surface support there.\";\n#else\n    igl::setDebugBreakEnabled(false);\n\n    // Add headless config for creating swapchains without a window\n    igl::vulkan::VulkanContextConfig config = util::device::vulkan::getContextConfig(true);\n    config.headless = true;\n\n    device_ = igl::tests::util::device::vulkan::createTestDevice(config);\n    ASSERT_TRUE(device_ != nullptr);\n    auto& device = static_cast<igl::vulkan::Device&>(*device_);\n    context_ = &device.getVulkanContext();\n    ASSERT_TRUE(context_ != nullptr);\n#endif\n  }\n\n protected:\n  std::shared_ptr<IDevice> device_;\n  vulkan::VulkanContext* context_ = nullptr;\n};\n\nTEST_F(VulkanSwapchainTest, CreateVulkanSwapchain) {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID\n  // @fb-only\n  GTEST_SKIP() << \"Fix these tests on Windows and Android, no headless surface support there.\";\n#else\n  auto swapchain = std::make_unique<igl::vulkan::VulkanSwapchain>(*context_, kWidth, kHeight);\n  ASSERT_NE(swapchain, nullptr);\n\n  ASSERT_EQ(swapchain->getWidth(), kWidth);\n  ASSERT_EQ(swapchain->getHeight(), kHeight);\n\n  const VkExtent2D extent = swapchain->getExtent();\n  ASSERT_EQ(extent.width, kWidth);\n  ASSERT_EQ(extent.height, kHeight);\n\n  ASSERT_NE(swapchain->getFormatColor(), VK_FORMAT_UNDEFINED);\n\n  ASSERT_GT(swapchain->getNumSwapchainImages(), 0);\n\n  ASSERT_EQ(swapchain->getCurrentImageIndex(), 0);\n#endif\n}\n\n} // namespace igl::tests\n\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_ANDROID || IGL_PLATFORM_LINUX\n"
  },
  {
    "path": "src/igl/vulkan/Buffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/Buffer.h>\n\n#include <cstring>\n#include <memory>\n#include <igl/IGLSafeC.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanBuffer.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanStagingDevice.h>\n\nnamespace igl::vulkan {\n\nBuffer::Buffer(const igl::vulkan::Device& device) : device_(device) {}\n\nResult Buffer::create(const BufferDesc& desc) {\n  desc_ = desc;\n\n  if (desc_.storage == igl::ResourceStorage::Invalid) {\n    desc_.storage = igl::ResourceStorage::Private;\n  }\n\n  const VulkanContext& ctx = device_.getVulkanContext();\n\n  if (!ctx.useStagingForBuffers_ && (desc_.storage == ResourceStorage::Private)) {\n    desc_.storage = ResourceStorage::Shared;\n  }\n\n  /* Use staging device to transfer data into the buffer when the storage is private to the device\n   */\n  VkBufferUsageFlags usageFlags =\n      (desc_.storage == ResourceStorage::Private)\n          ? VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT\n          : 0;\n\n  const VkBufferUsageFlags optionalBDA = ctx.features().has_VK_KHR_buffer_device_address\n                                             ? VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR\n                                             : 0;\n\n  if (desc_.type == 0) {\n    return Result(Result::Code::InvalidOperation, \"Invalid buffer type\");\n  }\n\n  if (desc_.type & BufferDesc::BufferTypeBits::Index) {\n    usageFlags |= VK_BUFFER_USAGE_INDEX_BUFFER_BIT;\n  }\n  if (desc_.type & BufferDesc::BufferTypeBits::Vertex) {\n    usageFlags |= VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;\n  }\n  if (desc_.type & BufferDesc::BufferTypeBits::Uniform) {\n    usageFlags |= VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | optionalBDA;\n  }\n\n  if (desc_.type & BufferDesc::BufferTypeBits::Storage) {\n    usageFlags |=\n        VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | optionalBDA;\n  }\n\n  if (desc_.type & BufferDesc::BufferTypeBits::Indirect) {\n    usageFlags |= VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT | optionalBDA;\n  }\n\n  const VkMemoryPropertyFlags memFlags = resourceStorageToVkMemoryPropertyFlags(desc_.storage);\n\n  // Store the flag that determines if this buffer contains sub-allocations (i.e. is a ring-buffer)\n  isRingBuffer_ = ((desc_.hint & BufferDesc::BufferAPIHintBits::Ring) != 0);\n\n  bufferCount_ = isRingBuffer_ ? device_.getVulkanContext().config_.maxResourceCount : 1u;\n\n  buffers_ = std::make_unique<std::unique_ptr<VulkanBuffer>[]>(bufferCount_);\n  bufferPatches_ = std::make_unique<BufferRange[]>(bufferCount_);\n\n  // This is used to generate a unique number for unnamed buffers\n  static uint32_t bufferId = 0;\n  Result result;\n  for (size_t bufferIndex = 0; bufferIndex < bufferCount_; ++bufferIndex) {\n    const std::string subBufferName =\n        bufferCount_ > 1 ? \" - sub-buffer \" + std::to_string(bufferIndex) : \"\";\n    const std::string bufferName = !desc_.debugName.empty()\n                                       ? IGL_FORMAT(\"Buffer: {}\", desc_.debugName + subBufferName)\n                                       : IGL_FORMAT(\"Buffer {}{}\", bufferId, subBufferName);\n    buffers_[bufferIndex] =\n        ctx.createBuffer(desc_.length, usageFlags, memFlags, &result, bufferName.c_str());\n    IGL_DEBUG_ASSERT(result.isOk());\n  }\n  if (desc_.debugName.empty()) {\n    ++bufferId;\n  }\n\n  // allocate local data for ring-buffer only if Vulkan Buffers are not mapped to the CPU\n  if (isRingBuffer_ && !buffers_[0]->isMapped()) {\n    // Resize the local copy of the data\n    localData_ = std::make_unique<uint8_t[]>(desc_.length);\n  }\n\n  return result;\n}\n\nconst std::unique_ptr<VulkanBuffer>& Buffer::currentVulkanBuffer() const {\n  IGL_DEBUG_ASSERT(buffers_, \"There are no sub-allocations available for this buffer\");\n  return buffers_[isRingBuffer_ ? device_.getVulkanContext().currentSyncIndex() : 0u];\n}\n\nBufferRange Buffer::getUpdateRange() const {\n  size_t start = std::numeric_limits<size_t>::max();\n  size_t end = 0;\n\n  for (uint32_t i = 0; i < bufferCount_; ++i) {\n    const auto& bufferPatch = bufferPatches_[i];\n    // skip this buffer, if update size is zero\n    if (bufferPatch.size == 0) {\n      continue;\n    }\n    end = std::max(end, bufferPatch.offset + bufferPatch.size);\n    start = std::min(start, bufferPatch.offset);\n  }\n\n  // If there is no new data, return an empty range to indicate that no data is available\n  if (start == std::numeric_limits<size_t>::max()) {\n    return {};\n  }\n\n  return {end - start, start};\n}\n\nvoid Buffer::extendUpdateRange(uint32_t ringBufferIndex, const BufferRange& range) {\n  auto& bufferPatch = bufferPatches_[ringBufferIndex];\n  const size_t start = std::min(bufferPatch.offset, range.offset);\n  const size_t end = std::max(bufferPatch.offset + bufferPatch.size, range.size + range.offset);\n\n  bufferPatch.offset = start;\n  bufferPatch.size = end - start;\n}\n\nvoid Buffer::resetUpdateRange(uint32_t ringBufferIndex, const BufferRange& range) {\n  bufferPatches_[ringBufferIndex] = range;\n}\n\nResult Buffer::upload(const void* data, const BufferRange& range) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(data)) {\n    return Result();\n  }\n\n  if (!IGL_DEBUG_VERIFY(range.offset + range.size <= desc_.length)) {\n    return Result(Result::Code::ArgumentOutOfRange, \"Out of range\");\n  }\n\n  // To handle an upload to a ring-buffer, we update the local copy first and upload the entire\n  // local data to the device below\n  const VulkanContext& ctx = device_.getVulkanContext();\n  if (isRingBuffer_) {\n    // get the current ring buffer index\n    const uint32_t currentBufferIndex = device_.getVulkanContext().currentSyncIndex();\n    uint8_t* prevDataPtr = nullptr; // pointer to the previous local copy of the data\n    BufferRange currentUpdateRange = range;\n    if (currentBufferIndex != previousBufferIndex_) {\n      prevDataPtr = previousBufferIndex_ < bufferCount_\n                        ? buffers_[previousBufferIndex_]->getMappedPtr()\n                        : nullptr;\n      // if the index has changed update the index\n      previousBufferIndex_ = currentBufferIndex;\n      // reset update range at the current index, using input range\n      resetUpdateRange(currentBufferIndex, range);\n      // get full update range for this index, based on updates made in all the other buffers\n      currentUpdateRange = getUpdateRange();\n    } else {\n      // increase buffer update range at the current index, based on new range\n      extendUpdateRange(currentBufferIndex, range);\n    }\n\n    // If ring buffer's Vulkan Buffers are CPU mapped\n    if (buffers_[0]->isMapped()) { // if the buffer is mapped\n      // if current updated range differs from the input range, copy data outside of the input range\n      // from previous buffer\n      if ((currentUpdateRange.offset != range.offset || currentUpdateRange.size != range.size) &&\n          prevDataPtr) {\n        uint8_t* currDataPtr = currentVulkanBuffer()->getMappedPtr();\n        // this block is not required for non-mapped buffers, because in that case localData_ always\n        // contains the latest data; and staging device is used to copy data from localData_ to the\n        // device.\n\n        // this block is needed for mapped buffer, because device buffer data will be updated based\n        // on CPU accessible portion of the currentVulkanBuffer (which is in currDataPtr). And so\n        // data changes outside the input range will be copied from the previous buffer.\n\n        // this should never happen, but check just in case\n        IGL_DEBUG_ASSERT(currentUpdateRange.offset <= range.offset);\n\n        // copy data from starting of current update range to range offset\n        const auto frontCopySize = range.offset - currentUpdateRange.offset;\n        if (frontCopySize > 0) {\n          checked_memcpy(currDataPtr + currentUpdateRange.offset,\n                         getSizeInBytes() - currentUpdateRange.offset,\n                         prevDataPtr + currentUpdateRange.offset,\n                         frontCopySize);\n        }\n\n        // copy data from range end to current update range end\n        const auto rangeEnd = range.offset + range.size;\n        const auto currentUpdateRangeEnd = currentUpdateRange.offset + currentUpdateRange.size;\n\n        // this should never happen, but check just in case\n        IGL_DEBUG_ASSERT(currentUpdateRangeEnd >= rangeEnd);\n\n        const auto backCopySize = currentUpdateRangeEnd - rangeEnd;\n        if (backCopySize > 0) {\n          checked_memcpy(currDataPtr + rangeEnd,\n                         getSizeInBytes() - rangeEnd,\n                         prevDataPtr + rangeEnd,\n                         backCopySize);\n        }\n      }\n      currentVulkanBuffer()->bufferSubData(range.offset, range.size, data);\n    } else {\n      // update local data copy\n      checked_memcpy(localData_.get() + range.offset, range.size, (void*)data, range.size);\n      // use staging to upload data to device-local buffers\n      ctx.stagingDevice_->bufferSubData(*currentVulkanBuffer(),\n                                        currentUpdateRange.offset,\n                                        currentUpdateRange.size,\n                                        localData_.get() + currentUpdateRange.offset);\n    }\n  } else {\n    // use staging to upload data to device-local buffers\n    ctx.stagingDevice_->bufferSubData(*currentVulkanBuffer(), range.offset, range.size, data);\n  }\n  return Result();\n}\n\nsize_t Buffer::getSizeInBytes() const {\n  return desc_.length;\n}\n\nuint64_t Buffer::gpuAddress(size_t offset) const {\n  IGL_DEBUG_ASSERT((offset & 7) == 0,\n                   \"Buffer offset must be 8 bytes aligned as per GLSL_EXT_buffer_reference spec.\");\n\n  return (uint64_t)currentVulkanBuffer()->getVkDeviceAddress() + offset;\n}\n\nVkBuffer Buffer::getVkBuffer() const {\n  return currentVulkanBuffer()->getVkBuffer();\n}\n\nVkBufferUsageFlags Buffer::getBufferUsageFlags() const {\n  return currentVulkanBuffer()->getBufferUsageFlags();\n}\n\nvoid* Buffer::map(const BufferRange& range, Result* outResult) {\n  IGL_DEBUG_ASSERT(!isRingBuffer_, \"Buffer::map() operation not supported for ring buffer\");\n\n  // Sanity check\n  if ((range.size > desc_.length) || (range.offset > desc_.length - range.size)) {\n    Result::setResult(outResult, Result::Code::ArgumentOutOfRange, \"Range exceeds buffer length\");\n    // @fb-only\n    // @lint-ignore CLANGTIDY\n    return nullptr;\n  }\n\n  // If the buffer is currently mapped, then unmap it first\n  if (mappedRange_.size &&\n      (mappedRange_.size != range.size || mappedRange_.offset != range.offset)) {\n    IGL_DEBUG_ABORT(\"Buffer::map() is called more than once without Buffer::unmap()\");\n    unmap();\n  }\n\n  mappedRange_ = range;\n\n  Result::setOk(outResult);\n\n  const auto& buffer = currentVulkanBuffer();\n  if (!buffer->isMapped()) {\n    // handle DEVICE_LOCAL buffers\n    tmpBuffer_.resize(range.size);\n    const VulkanContext& ctx = device_.getVulkanContext();\n    ctx.stagingDevice_->getBufferSubData(*buffer, range.offset, range.size, tmpBuffer_.data());\n    return tmpBuffer_.data();\n  }\n\n  return buffer->getMappedPtr() + range.offset;\n}\n\nvoid Buffer::unmap() {\n  IGL_DEBUG_ASSERT(!isRingBuffer_, \"Buffer::unmap() operation not supported for ring buffer\");\n  IGL_DEBUG_ASSERT(mappedRange_.size, \"Called Buffer::unmap() without Buffer::map()\");\n\n  const auto& buffer = currentVulkanBuffer();\n  const BufferRange range(tmpBuffer_.size(), mappedRange_.offset);\n  if (!buffer->isMapped()) {\n    // handle DEVICE_LOCAL buffers\n    upload(tmpBuffer_.data(), range);\n  } else if (!buffer->isCoherentMemory()) {\n    buffer->flushMappedMemory(range.offset, range.size);\n  }\n  mappedRange_.size = 0;\n}\n\nBufferDesc::BufferAPIHint Buffer::requestedApiHints() const noexcept {\n  return desc_.hint;\n}\n\nBufferDesc::BufferAPIHint Buffer::acceptedApiHints() const noexcept {\n  if (desc_.type & BufferDesc::BufferTypeBits::Uniform) {\n    return BufferDesc::BufferAPIHintBits::UniformBlock;\n  }\n\n  return 0;\n}\n\nResourceStorage Buffer::storage() const noexcept {\n  return desc_.storage;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/Buffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h>\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nclass Device;\nclass VulkanBuffer;\n\n/// @brief Implements the igl::IBuffer interface for Vulkan. Contains one or more VulkanBuffers,\n/// depending on the type of buffer this class represents. If this class represents a ring buffer,\n/// then there will be multiple VulkanBuffers, each with its own index. Otherwise it contains only\n/// one VulkanBuffer object.\nclass Buffer final : public IBuffer {\n  friend class Device;\n\n public:\n  explicit Buffer(const igl::vulkan::Device& device);\n  ~Buffer() override = default;\n\n  Result upload(const void* data, const BufferRange& range) override;\n\n  void* map(const BufferRange& range, Result* outResult) override;\n\n  void unmap() override;\n\n  [[nodiscard]] BufferDesc::BufferAPIHint requestedApiHints() const noexcept override;\n  [[nodiscard]] BufferDesc::BufferAPIHint acceptedApiHints() const noexcept override;\n  [[nodiscard]] ResourceStorage storage() const noexcept override;\n\n  [[nodiscard]] size_t getSizeInBytes() const override;\n  [[nodiscard]] uint64_t gpuAddress(size_t offset) const override;\n\n  [[nodiscard]] BufferDesc::BufferType getBufferType() const override {\n    return desc_.type;\n  }\n\n  [[nodiscard]] VkBuffer getVkBuffer() const;\n  [[nodiscard]] VkBufferUsageFlags getBufferUsageFlags() const;\n\n  /// @brief Returns the current active VulkanBuffer object managed by this class. Since this class\n  /// may be used as a Ring Buffer, the active buffer is the buffer currently being accessed.\n  [[nodiscard]] const std::unique_ptr<VulkanBuffer>& currentVulkanBuffer() const;\n\n private:\n  const igl::vulkan::Device& device_;\n  BufferDesc desc_;\n  bool isRingBuffer_ = false;\n  uint32_t previousBufferIndex_ = UINT32_MAX;\n  std::unique_ptr<std::unique_ptr<VulkanBuffer>[]> buffers_;\n  std::unique_ptr<uint8_t[]> localData_;\n  std::unique_ptr<BufferRange[]> bufferPatches_;\n  uint32_t bufferCount_ = 0;\n\n  Result create(const BufferDesc& desc);\n\n  // Function determines smallest starting and largest ending offset by iterating over all\n  // bufferPatches_, and returns it in the form of buffer range\n  [[nodiscard]] BufferRange getUpdateRange() const;\n  void extendUpdateRange(uint32_t ringBufferIndex, const BufferRange& range);\n  void resetUpdateRange(uint32_t ringBufferIndex, const BufferRange& range);\n\n  // Used for map/unmap API for DEVICE_LOCAL buffers\n  std::vector<uint8_t> tmpBuffer_;\n  BufferRange mappedRange_ = {};\n  BufferDesc::BufferAPIHint requestedApiHints_ = 0;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/CMakeLists.txt",
    "content": "# Copyright (c) Meta Platforms, Inc. and affiliates.\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# CMake 3.16 can load Vulkan SDK\ncmake_minimum_required(VERSION 3.19)\n\nproject(IGLVulkan CXX C)\n\nfile(GLOB SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp *.c util/*.cpp)\nfile(GLOB HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h util/*.h)\n\nif(APPLE)\n  file(GLOB APPLE_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} moltenvk/*.mm)\n  file(GLOB APPLE_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} moltenvk/*.h)\n  list(APPEND SRC_FILES ${APPLE_SRC_FILES})\n  list(APPEND HEADER_FILES ${APPLE_HEADER_FILES})\nendif()\n\nif(ANDROID)\n  file(GLOB ANDROID_SRC_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} android/*.cpp)\n  file(GLOB ANDROID_HEADER_FILES LIST_DIRECTORIES false RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} android/*.h)\n  list(APPEND SRC_FILES ${ANDROID_SRC_FILES})\n  list(APPEND HEADER_FILES ${ANDROID_HEADER_FILES})\nendif()\n\nadd_library(IGLVulkan ${SRC_FILES} ${HEADER_FILES})\n\ntarget_link_libraries(IGLVulkan PRIVATE IGLLibrary IGLGlslang)\n\nigl_set_cxxstd(IGLVulkan 20)\nigl_set_folder(IGLVulkan \"IGL\")\n\nfind_package(Vulkan REQUIRED)\n\ntarget_link_libraries(IGLVulkan PUBLIC Vulkan::Vulkan)\ntarget_link_libraries(IGLVulkan PUBLIC fmt)\n\ntarget_include_directories(IGLVulkan PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/fmt/include\")\ntarget_include_directories(IGLVulkan PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/volk\")\ntarget_include_directories(IGLVulkan PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/vma/include\")\ntarget_include_directories(IGLVulkan PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/SPIRV-Headers/include\")\ntarget_include_directories(IGLVulkan PUBLIC \"${IGL_ROOT_DIR}/third-party/deps/src/glslang\")\n\nif(WIN32)\n  add_definitions(\"-DVK_USE_PLATFORM_WIN32_KHR=1\")\n  add_definitions(\"-DNOMINMAX\")\nendif()\n\nif(UNIX AND NOT APPLE AND NOT ANDROID)\n  add_definitions(\"-DVK_USE_PLATFORM_XLIB_KHR=1\")\nendif()\n\nif(ANDROID)\n  add_definitions(\"-DVK_USE_PLATFORM_ANDROID_KHR=1\")\nendif()\n\nif(APPLE)\n  add_definitions(\"-DVK_USE_PLATFORM_METAL_EXT=1\")\n  target_link_libraries(IGLVulkan PRIVATE \"-framework QuartzCore\")\n  target_link_libraries(IGLVulkan PRIVATE \"-framework Metal\")\n  if(MACOSX)\n    target_link_libraries(IGLVulkan PRIVATE \"-framework Cocoa\")\n  endif()\n  if(IOS)\n    target_link_libraries(IGLVulkan PRIVATE \"-framework UIKit\")\n  endif()\nendif()\n\nif(CMAKE_CXX_COMPILER_ID MATCHES \"Clang\")\n  target_compile_options(IGLVulkan PRIVATE \"-Wno-nullability-completeness\")\nendif()\n"
  },
  {
    "path": "src/igl/vulkan/CommandBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/CommandBuffer.h>\n\n#include <igl/Framebuffer.h>\n#include <igl/vulkan/Buffer.h>\n#include <igl/vulkan/ComputeCommandEncoder.h>\n#include <igl/vulkan/RenderCommandEncoder.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanTexture.h>\n\nnamespace igl::vulkan {\n\nCommandBuffer::CommandBuffer(VulkanContext& ctx, CommandBufferDesc desc) :\n  ICommandBuffer(std::move(desc)), ctx_(ctx), wrapper_(ctx_.immediate_->acquire()) {\n  IGL_DEBUG_ASSERT(wrapper_.cmdBuf != VK_NULL_HANDLE);\n}\n\nstd::unique_ptr<IComputeCommandEncoder> CommandBuffer::createComputeCommandEncoder() {\n  return std::make_unique<ComputeCommandEncoder>(shared_from_this(), ctx_);\n}\n\nstd::unique_ptr<IRenderCommandEncoder> CommandBuffer::createRenderCommandEncoder(\n    const RenderPassDesc& renderPass,\n    const std::shared_ptr<IFramebuffer>& framebuffer,\n    const Dependencies& dependencies,\n    Result* outResult) {\n  IGL_PROFILER_FUNCTION();\n  IGL_DEBUG_ASSERT(framebuffer);\n\n  framebuffer_ = framebuffer;\n\n  // prepare all the color attachments\n  for (const auto i : framebuffer->getColorAttachmentIndices()) {\n    ITexture* colorTex = framebuffer->getColorAttachment(i).get();\n    transitionToColorAttachment(wrapper_.cmdBuf, colorTex);\n    // handle MSAA\n    ITexture* colorResolveTex = framebuffer->getResolveColorAttachment(i).get();\n    transitionToColorAttachment(wrapper_.cmdBuf, colorResolveTex);\n  }\n\n  // prepare depth attachment\n  const auto depthTex = framebuffer->getDepthAttachment();\n  if (depthTex) {\n    const auto& vkDepthTex = static_cast<Texture&>(*depthTex);\n    const igl::vulkan::VulkanImage& depthImg = vkDepthTex.getVulkanTexture().image_;\n    IGL_DEBUG_ASSERT(depthImg.imageFormat_ != VK_FORMAT_UNDEFINED,\n                     \"Invalid depth attachment format\");\n    const VkImageAspectFlags flags = vkDepthTex.getVulkanTexture().image_.getImageAspectFlags();\n    depthImg.transitionLayout(\n        wrapper_.cmdBuf,\n        VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,\n        VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,\n        VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,\n        VkImageSubresourceRange{flags, 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS});\n  }\n\n  auto encoder = RenderCommandEncoder::create(\n      shared_from_this(), ctx_, renderPass, framebuffer, dependencies, outResult);\n\n  return encoder;\n}\n\nvoid CommandBuffer::present(const std::shared_ptr<ITexture>& surface) const {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_DEBUG_ASSERT(surface);\n\n  presentedSurface_ = surface;\n\n  const auto& vkTex = static_cast<Texture&>(*surface);\n  const VulkanTexture& tex = vkTex.getVulkanTexture();\n  const VulkanImage& img = tex.image_;\n\n  // prepare image for presentation\n  if (vkTex.isSwapchainTexture()) {\n    isFromSwapchain_ = true;\n    // the image might be coming from a compute shader\n    const VkPipelineStageFlagBits srcStage = (img.imageLayout_ == VK_IMAGE_LAYOUT_GENERAL)\n                                                 ? VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT\n                                                 : VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;\n    img.transitionLayout(\n        wrapper_.cmdBuf,\n        VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,\n        srcStage,\n        VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // wait for all subsequent operations\n        VkImageSubresourceRange{\n            VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS});\n    return;\n  }\n\n  isFromSwapchain_ = false;\n\n  // transition only non-multisampled images - MSAA images cannot be accessed from shaders\n  if (img.samples_ == VK_SAMPLE_COUNT_1_BIT) {\n    const VkImageAspectFlags flags = vkTex.getVulkanTexture().image_.getImageAspectFlags();\n    const VkPipelineStageFlags srcStage = vkTex.getProperties().isDepthOrStencil()\n                                              ? VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT\n                                              : VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;\n    // set the result of the previous render pass\n    img.transitionLayout(\n        wrapper_.cmdBuf,\n        VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,\n        srcStage,\n        VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |\n            VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, // wait for subsequent fragment/compute shaders\n        VkImageSubresourceRange{flags, 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS});\n  }\n}\n\nvoid CommandBuffer::pushDebugGroupLabel(const char* label, const igl::Color& color) const {\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  ivkCmdBeginDebugUtilsLabel(&ctx_.vf_, wrapper_.cmdBuf, label, color.toFloatPtr());\n}\n\nvoid CommandBuffer::popDebugGroupLabel() const {\n  ivkCmdEndDebugUtilsLabel(&ctx_.vf_, wrapper_.cmdBuf);\n}\n\nvoid CommandBuffer::copyBuffer(IBuffer& src,\n                               IBuffer& dst,\n                               uint64_t srcOffset,\n                               uint64_t dstOffset,\n                               uint64_t size) {\n  IGL_PROFILER_FUNCTION();\n\n  auto& bufSrc = static_cast<Buffer&>(src);\n  auto& bufDst = static_cast<Buffer&>(dst);\n\n  ivkBufferBarrier(&ctx_.vf_,\n                   wrapper_.cmdBuf,\n                   bufSrc.getVkBuffer(),\n                   bufSrc.getBufferUsageFlags(),\n                   VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n                   VK_PIPELINE_STAGE_TRANSFER_BIT);\n  ivkBufferBarrier(&ctx_.vf_,\n                   wrapper_.cmdBuf,\n                   bufDst.getVkBuffer(),\n                   bufDst.getBufferUsageFlags(),\n                   VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n                   VK_PIPELINE_STAGE_TRANSFER_BIT);\n\n  const VkBufferCopy region = {\n      .srcOffset = srcOffset,\n      .dstOffset = dstOffset,\n      .size = size,\n  };\n\n  ctx_.vf_.vkCmdCopyBuffer(wrapper_.cmdBuf, bufSrc.getVkBuffer(), bufDst.getVkBuffer(), 1, &region);\n\n  ivkBufferBarrier(&ctx_.vf_,\n                   wrapper_.cmdBuf,\n                   bufSrc.getVkBuffer(),\n                   bufSrc.getBufferUsageFlags(),\n                   VK_PIPELINE_STAGE_TRANSFER_BIT,\n                   VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);\n  ivkBufferBarrier(&ctx_.vf_,\n                   wrapper_.cmdBuf,\n                   bufDst.getVkBuffer(),\n                   bufDst.getBufferUsageFlags(),\n                   VK_PIPELINE_STAGE_TRANSFER_BIT,\n                   VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);\n}\n\nvoid CommandBuffer::copyTextureToBuffer(ITexture& src,\n                                        IBuffer& dst,\n                                        uint64_t dstOffset,\n                                        uint32_t level,\n                                        uint32_t layer) {\n  auto& texSrc = static_cast<Texture&>(src);\n  auto& bufDst = static_cast<Buffer&>(dst);\n\n  VulkanImage& image = texSrc.getVulkanTexture().image_;\n\n  const VkImageLayout oldLayout = image.imageLayout_;\n\n  IGL_DEBUG_ASSERT(oldLayout != VK_IMAGE_LAYOUT_UNDEFINED);\n\n  ivkBufferBarrier(&ctx_.vf_,\n                   wrapper_.cmdBuf,\n                   bufDst.getVkBuffer(),\n                   bufDst.getBufferUsageFlags(),\n                   VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n                   VK_PIPELINE_STAGE_TRANSFER_BIT);\n\n  const VkImageAspectFlags aspectMask =\n      image.isDepthFormat_\n          ? VK_IMAGE_ASPECT_DEPTH_BIT\n          : (image.isStencilFormat_ ? VK_IMAGE_ASPECT_STENCIL_BIT : VK_IMAGE_ASPECT_COLOR_BIT);\n\n  const VkImageSubresourceRange range = {\n      .aspectMask = aspectMask,\n      .baseMipLevel = level,\n      .levelCount = 1u,\n      .baseArrayLayer = layer,\n      .layerCount = texSrc.getNumFaces() == 6 ? 6u : 1u,\n  };\n\n  image.transitionLayout(wrapper_.cmdBuf,\n                         VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n                         VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n                         VK_PIPELINE_STAGE_TRANSFER_BIT,\n                         range);\n\n  const VkBufferImageCopy region = {\n      .bufferOffset = dstOffset,\n      .bufferRowLength = 0,\n      .bufferImageHeight = 0,\n      .imageSubresource =\n          {\n              .aspectMask = aspectMask,\n              .mipLevel = level,\n              .baseArrayLayer = layer,\n              .layerCount = texSrc.getNumFaces() == 6 ? 6u : 1u,\n          },\n      .imageOffset = {},\n      .imageExtent = image.extent_,\n  };\n\n  ctx_.vf_.vkCmdCopyImageToBuffer(wrapper_.cmdBuf,\n                                  texSrc.getVkImage(),\n                                  VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n                                  bufDst.getVkBuffer(),\n                                  1u,\n                                  &region);\n\n  ivkBufferBarrier(&ctx_.vf_,\n                   wrapper_.cmdBuf,\n                   bufDst.getVkBuffer(),\n                   bufDst.getBufferUsageFlags(),\n                   VK_PIPELINE_STAGE_TRANSFER_BIT,\n                   VK_PIPELINE_STAGE_ALL_COMMANDS_BIT);\n\n  image.transitionLayout(wrapper_.cmdBuf,\n                         oldLayout,\n                         VK_PIPELINE_STAGE_TRANSFER_BIT,\n                         VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n                         range);\n}\n\nvoid CommandBuffer::waitUntilCompleted() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_WAIT);\n\n  ctx_.immediate_->wait(lastSubmitHandle_, ctx_.config_.fenceTimeoutNanoseconds);\n\n  lastSubmitHandle_ = VulkanImmediateCommands::SubmitHandle();\n}\n\nvoid CommandBuffer::waitUntilScheduled() {}\n\nconst std::shared_ptr<IFramebuffer>& CommandBuffer::getFramebuffer() const {\n  return framebuffer_;\n}\n\nconst std::shared_ptr<ITexture>& CommandBuffer::getPresentedSurface() const {\n  return presentedSurface_;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/CommandBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandBuffer.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanImmediateCommands.h>\n\nnamespace igl::vulkan {\n\nclass VulkanContext;\n\n/// @brief This class implements the igl::ICommandBuffer interface for Vulkan\nclass CommandBuffer final : public ICommandBuffer,\n                            public std::enable_shared_from_this<CommandBuffer> {\n public:\n  /// @brief Constructs a CommandBuffer object, acquires a\n  /// `VulkanImmediateCommands::CommandBufferWrapper` from the context's VulkanImmediateCommands\n  /// object, and stores the CommandBufferDesc structure used to construct the underlying command\n  /// buffer.\n  CommandBuffer(VulkanContext& ctx, CommandBufferDesc desc);\n\n  /// @brief Creates a ComputeCommandEncoder\n  std::unique_ptr<IComputeCommandEncoder> createComputeCommandEncoder() override;\n\n  /** @brief Creates a RenderCommandEncoder\n   * Before creating a RenderCommandEncoder, this function transitions all images referenced by the\n   * `dependencies` parameter to a shader read only layout. It also transitions all images\n   * referenced by the `framebuffer` parameter to their optimal layout: color and resolve\n   * attachments are transitioned to color attachment optimal layouts; the depth/stencil is\n   * transitioned to depth/stencil attachment optimal layout. Returns\n   * a RenderCommandEncoder object.\n   */\n  std::unique_ptr<IRenderCommandEncoder> createRenderCommandEncoder(\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      const Dependencies& dependencies,\n      Result* outResult) override;\n\n  /** @brief Caches the texture passed in to the function for presentation later. If the texture\n   * belongs to a swapchain, this function\n   * transitions the texture to VK_IMAGE_LAYOUT_PRESENT_SRC_KHR layout. Otherwise it transitions the\n   * texture to the VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL layout if the texture's samples is\n   * equal to 1 (it's non multi-sampled).\n   */\n  void present(const std::shared_ptr<ITexture>& surface) const override;\n\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n\n  void popDebugGroupLabel() const override;\n\n  void copyBuffer(IBuffer& src,\n                  IBuffer& dst,\n                  uint64_t srcOffset,\n                  uint64_t dstOffset,\n                  uint64_t size) override;\n  void copyTextureToBuffer(ITexture& src,\n                           IBuffer& dst,\n                           uint64_t dstOffset,\n                           uint32_t level,\n                           uint32_t layer) override;\n\n  /// @brief Waits until the command bufer has been executed by the device.\n  void waitUntilCompleted() override;\n\n  /// @brief Not implemented\n  void waitUntilScheduled() override;\n\n  VkCommandBuffer getVkCommandBuffer() const {\n    return wrapper_.cmdBuf;\n  }\n\n  VulkanImmediateCommands::SubmitHandle getNextSubmitHandle() const {\n    return wrapper_.handle;\n  }\n\n  bool isFromSwapchain() const {\n    return isFromSwapchain_;\n  }\n\n  const std::shared_ptr<IFramebuffer>& getFramebuffer() const;\n\n  const std::shared_ptr<ITexture>& getPresentedSurface() const;\n\n private:\n  friend class CommandQueue;\n\n  VulkanContext& ctx_;\n  const VulkanImmediateCommands::CommandBufferWrapper& wrapper_;\n  // was present() called with a swapchain image?\n  mutable bool isFromSwapchain_ = false;\n\n  std::shared_ptr<IFramebuffer> framebuffer_;\n  mutable std::shared_ptr<ITexture> presentedSurface_;\n\n  VulkanImmediateCommands::SubmitHandle lastSubmitHandle_ = {};\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/CommandQueue.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/CommandQueue.h>\n\n#include <igl/vulkan/CommandBuffer.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanSwapchain.h>\n\n#define IGL_COMMAND_QUEUE_DEBUG_FENCES (IGL_DEBUG && 0)\n\n#if IGL_COMMAND_QUEUE_DEBUG_FENCES\n#include <cinttypes> // PRIx3\n#include <igl/vulkan/VulkanFence.h>\n#endif // IGL_COMMAND_QUEUE_DEBUG_FENCES\n\nnamespace igl::vulkan {\n\nCommandQueue::CommandQueue(Device& device, const CommandQueueDesc& /*desc*/) : device_(device) {}\n\nstd::shared_ptr<ICommandBuffer> CommandQueue::createCommandBuffer(const CommandBufferDesc& desc,\n                                                                  Result* /*outResult*/) {\n  IGL_PROFILER_FUNCTION();\n\n  ++numBuffersLeftToSubmit_;\n\n  return std::make_shared<CommandBuffer>(device_.getVulkanContext(), desc);\n}\n\nSubmitHandle CommandQueue::submit(const ICommandBuffer& cmdBuffer, bool /* endOfFrame */) {\n  IGL_PROFILER_FUNCTION();\n  VulkanContext& ctx = device_.getVulkanContext();\n\n  incrementDrawCount(cmdBuffer.getCurrentDrawCount());\n\n  --numBuffersLeftToSubmit_;\n\n  auto* vkCmdBuffer =\n      const_cast<CommandBuffer*>(static_cast<const vulkan::CommandBuffer*>(&cmdBuffer));\n\n#if IGL_COMMAND_QUEUE_DEBUG_FENCES\n  // Create label with Fence handle and Fence FD, if available\n  // A string such as \"Submit command buffer (hex: 0x149b90a10, fd: 12345)\" has 55 characters\n  char labelName[60];\n  if (vkCmdBuffer->wrapper_.fence_.exportable()) {\n    std::snprintf(labelName,\n                  sizeof(labelName),\n                  \"Submit command buffer (hex: %#\" PRIx64 \", fd: %d)\",\n                  reinterpret_cast<uint64_t>(vkCmdBuffer->wrapper_.fence_.vkFence_),\n                  ctx.immediate_->cachedFDFromSubmitHandle(vkCmdBuffer->wrapper_.handle_));\n  } else {\n    std::snprintf(labelName,\n                  sizeof(labelName),\n                  \"Submit command buffer (hex: %#\" PRIx64 \")\",\n                  reinterpret_cast<uint64_t>(vkCmdBuffer->wrapper_.fence_.vkFence_));\n  }\n\n  ivkCmdInsertDebugUtilsLabel(&ctx.vf_,\n                              vkCmdBuffer->getVkCommandBuffer(),\n                              labelName,\n                              K_COLOR_COMMAND_BUFFER_SUBMISSION_WITH_FENCE.toFloatPtr());\n#endif // IGL_COMMAND_QUEUE_DEBUG_FENCES\n\n  auto submitHandle = endCommandBuffer(ctx, vkCmdBuffer, true);\n\n  return submitHandle;\n}\n\nSubmitHandle CommandQueue::endCommandBuffer(VulkanContext& ctx,\n                                            CommandBuffer* cmdBuffer,\n                                            bool present) {\n  IGL_PROFILER_FUNCTION();\n\n  // Submit to the graphics queue.\n  const bool shouldPresent = ctx.hasSwapchain() && cmdBuffer->isFromSwapchain() && present;\n  if (shouldPresent) {\n    if (ctx.timelineSemaphore_) {\n      // if we are presenting a swapchain image, signal our timeline semaphore\n      const uint64_t signalValue =\n          ctx.swapchain_->getFrameNumber() + ctx.swapchain_->getNumSwapchainImages();\n      // we wait for this value next time we want to acquire this swapchain image\n      ctx.swapchain_->timelineWaitValues[ctx.swapchain_->getCurrentImageIndex()] = signalValue;\n      ctx.immediate_->signalSemaphore(ctx.timelineSemaphore_->getVkSemaphore(), signalValue);\n    } else {\n      // this can be removed once we switch to timeline semaphores\n      ctx.immediate_->waitSemaphore(ctx.swapchain_->getSemaphore());\n    }\n  }\n\n  cmdBuffer->lastSubmitHandle_ = ctx.immediate_->submit(cmdBuffer->wrapper_);\n\n  if (shouldPresent) {\n    ctx.present();\n  }\n  ctx.syncMarkSubmitted(cmdBuffer->lastSubmitHandle_);\n  ctx.processDeferredTasks();\n  ctx.stagingDevice_->mergeRegionsAndFreeBuffers();\n\n  return cmdBuffer->lastSubmitHandle_.handle();\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/CommandQueue.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/CommandQueue.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/Device.h>\n\nnamespace igl::vulkan {\n\nclass CommandBuffer;\n\n/** @brief Implements the igl::ICommandQueue interface for Vulkan. Currently, this class only\n * supports one command buffer active at a time, tracked by an internal flag set to true in\n * `createCommandBuffer()` and reset in `endCommandBuffer()` (automatically called from `submit()`).\n */\nclass CommandQueue final : public ICommandQueue {\n public:\n  CommandQueue(Device& device, const CommandQueueDesc& desc);\n\n  ~CommandQueue() override {\n    IGL_DEBUG_ASSERT(numBuffersLeftToSubmit_ == 0);\n  }\n\n  CommandQueue(const CommandQueue&) = delete;\n  CommandQueue& operator=(const CommandQueue&) = delete;\n  CommandQueue(CommandQueue&&) = delete;\n  CommandQueue& operator=(CommandQueue&&) = delete;\n\n  /// @brief Create a new command buffer. Sets the internal flag that tracks an active command\n  /// buffer has been created.\n  std::shared_ptr<ICommandBuffer> createCommandBuffer(const CommandBufferDesc& desc,\n                                                      Result* outResult) override;\n\n  /// @brief Submits the `commandBuffer` for execution on the GPU.\n  /// @param cmdBuffer The command buffer to be submitted.\n  /// @param endOfFrame Not used\n  SubmitHandle submit(const ICommandBuffer& cmdBuffer, bool endOfFrame = false) override;\n\n  /** @brief Ends the current command buffer and resets the internal flag tracking an active command\n   * buffer. Determines if an image should be presented by (1) checking if this instance belongs to\n   * a graphics queue, (2) the context has a swapchain object, (3) the command buffer is from a\n   * swapchain (please refer to CommandBuffer::present), and (4) the present parameter is true. If\n   * so, this function waits for the swapchain semaphore before submitting the command buffer for\n   * execution. After the command buffer is submitted, this function calls VulkanContext::present()\n   * if an image should be presented. Finally, it signals the context to process deferred tasks (for\n   * more details about deferred tasks, please refer to the igl::vulkan::VulkanContext class).\n   */\n  SubmitHandle endCommandBuffer(VulkanContext& ctx, CommandBuffer* cmdBuffer, bool present);\n\n private:\n  Device& device_;\n\n  /// @brief Counter indicating whether or not there is an active command buffer. C\n  int numBuffersLeftToSubmit_ = 0;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/Common.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"Common.h\"\n\n#include <array>\n#include <cstdlib>\n\n// clang-format off\n// NOLINTBEGIN(facebook-unused-include-check)\n#if defined(VK_USE_PLATFORM_WIN32_KHR)\n  #ifndef WIN32_LEAN_AND_MEAN\n    #define WIN32_LEAN_AND_MEAN\n  #endif\n  #include <windows.h>\n#else\n  #include <dlfcn.h>\n#endif\n// NOLINTEND(facebook-unused-include-check)\n// clang-format on\n\n#include <igl/vulkan/ShaderModule.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanShaderModule.h>\n#include <igl/vulkan/VulkanTexture.h>\n#include <igl/vulkan/util/SpvReflection.h>\n#include <igl/vulkan/util/TextureFormat.h>\n\nnamespace igl::vulkan {\n\nResult getResultFromVkResult(VkResult result) {\n  if (result == VK_SUCCESS) {\n    return Result();\n  }\n\n  Result res(Result::Code::RuntimeError, ivkGetVulkanResultString(result));\n\n  switch (result) {\n  case VK_ERROR_LAYER_NOT_PRESENT:\n  case VK_ERROR_EXTENSION_NOT_PRESENT:\n  case VK_ERROR_FEATURE_NOT_PRESENT:\n    res.code = Result::Code::Unimplemented;\n    return res;\n  case VK_ERROR_INCOMPATIBLE_DRIVER:\n  case VK_ERROR_FORMAT_NOT_SUPPORTED:\n    res.code = Result::Code::Unsupported;\n    return res;\n  case VK_ERROR_OUT_OF_HOST_MEMORY:\n  case VK_ERROR_OUT_OF_DEVICE_MEMORY:\n  case VK_ERROR_OUT_OF_POOL_MEMORY:\n  case VK_ERROR_TOO_MANY_OBJECTS:\n    res.code = Result::Code::ArgumentOutOfRange;\n    return res;\n  default:;\n    // skip other Vulkan error codes\n  }\n  return res;\n}\n\nvoid setResultFrom(Result* outResult, VkResult result) {\n  if (!outResult) {\n    return;\n  }\n\n  *outResult = getResultFromVkResult(result);\n}\n\nVkFormat invertRedAndBlue(VkFormat format) {\n  switch (format) {\n  case VK_FORMAT_B8G8R8A8_UNORM:\n    return VK_FORMAT_R8G8B8A8_UNORM;\n  case VK_FORMAT_R8G8B8A8_UNORM:\n    return VK_FORMAT_B8G8R8A8_UNORM;\n  case VK_FORMAT_R8G8B8A8_SRGB:\n    return VK_FORMAT_B8G8R8A8_SRGB;\n  case VK_FORMAT_B8G8R8A8_SRGB:\n    return VK_FORMAT_R8G8B8A8_SRGB;\n  case VK_FORMAT_A2R10G10B10_UNORM_PACK32:\n    return VK_FORMAT_A2B10G10R10_UNORM_PACK32;\n  case VK_FORMAT_A2B10G10R10_UNORM_PACK32:\n    return VK_FORMAT_A2R10G10B10_UNORM_PACK32;\n  default:\n    IGL_UNREACHABLE_RETURN(format);\n  }\n}\n\nVkStencilOp stencilOperationToVkStencilOp(StencilOperation op) {\n  switch (op) {\n  case igl::StencilOperation::Keep:\n    return VK_STENCIL_OP_KEEP;\n  case igl::StencilOperation::Zero:\n    return VK_STENCIL_OP_ZERO;\n  case igl::StencilOperation::Replace:\n    return VK_STENCIL_OP_REPLACE;\n  case igl::StencilOperation::IncrementClamp:\n    return VK_STENCIL_OP_INCREMENT_AND_CLAMP;\n  case igl::StencilOperation::DecrementClamp:\n    return VK_STENCIL_OP_DECREMENT_AND_CLAMP;\n  case igl::StencilOperation::Invert:\n    return VK_STENCIL_OP_INVERT;\n  case igl::StencilOperation::IncrementWrap:\n    return VK_STENCIL_OP_INCREMENT_AND_WRAP;\n  case igl::StencilOperation::DecrementWrap:\n    return VK_STENCIL_OP_DECREMENT_AND_WRAP;\n  }\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n  return VK_STENCIL_OP_KEEP;\n}\n\nVkFormat textureFormatToVkFormat(TextureFormat format) {\n  using TextureFormat = TextureFormat;\n  switch (format) {\n  case TextureFormat::Invalid:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::A_UNorm8:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::L_UNorm8:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::R_UNorm8:\n    return VK_FORMAT_R8_UNORM;\n  case TextureFormat::R_UNorm16:\n    return VK_FORMAT_R16_UNORM;\n  case TextureFormat::R_F16:\n    return VK_FORMAT_R16_SFLOAT;\n  case TextureFormat::R_UInt16:\n    return VK_FORMAT_R16_UINT;\n  case TextureFormat::B5G5R5A1_UNorm:\n    return VK_FORMAT_B5G5R5A1_UNORM_PACK16;\n  case TextureFormat::B5G6R5_UNorm:\n    return VK_FORMAT_B5G6R5_UNORM_PACK16;\n  case TextureFormat::ABGR_UNorm4:\n    return VK_FORMAT_B4G4R4A4_UNORM_PACK16;\n  case TextureFormat::LA_UNorm8:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::RG_UNorm8:\n    return VK_FORMAT_R8G8_UNORM;\n  case TextureFormat::RG_UNorm16:\n    return VK_FORMAT_R16G16_UNORM;\n  case TextureFormat::RGBA_UNorm16:\n    return VK_FORMAT_R16G16B16A16_UNORM;\n  case TextureFormat::R4G2B2_UNorm_Apple:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::R4G2B2_UNorm_Rev_Apple:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::R5G5B5A1_UNorm:\n    return VK_FORMAT_R5G5B5A1_UNORM_PACK16;\n  case TextureFormat::BGRA_UNorm8:\n    return VK_FORMAT_B8G8R8A8_UNORM;\n  case TextureFormat::BGRA_UNorm8_Rev:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::RGBA_UNorm8:\n  case TextureFormat::RGBX_UNorm8:\n    return VK_FORMAT_R8G8B8A8_UNORM;\n  case TextureFormat::RGBA_SRGB:\n    return VK_FORMAT_R8G8B8A8_SRGB;\n  case TextureFormat::BGRA_SRGB:\n    return VK_FORMAT_B8G8R8A8_SRGB;\n  case TextureFormat::RG_F16:\n    return VK_FORMAT_R16G16_SFLOAT;\n  case TextureFormat::RG_UInt16:\n    return VK_FORMAT_R16G16_UINT;\n  case TextureFormat::RGB10_A2_UNorm_Rev:\n    return VK_FORMAT_A2R10G10B10_UNORM_PACK32;\n  case TextureFormat::RGB10_A2_Uint_Rev:\n    return VK_FORMAT_A2R10G10B10_UINT_PACK32;\n  case TextureFormat::BGR10_A2_Unorm:\n    return VK_FORMAT_A2B10G10R10_UNORM_PACK32;\n  case TextureFormat::R_F32:\n    return VK_FORMAT_R32_SFLOAT;\n  case TextureFormat::R_UInt32:\n    return VK_FORMAT_R32_UINT;\n  case TextureFormat::RG_F32:\n    return VK_FORMAT_R32G32_SFLOAT;\n  case TextureFormat::RGB_F16:\n    return VK_FORMAT_R16G16B16_SFLOAT;\n  case TextureFormat::RGBA_F16:\n    return VK_FORMAT_R16G16B16A16_SFLOAT;\n  case TextureFormat::RGB_F32:\n    return VK_FORMAT_R32G32B32_SFLOAT;\n  case TextureFormat::RGBA_UInt32:\n    return VK_FORMAT_R32G32B32A32_UINT;\n  case TextureFormat::RGBA_F32:\n    return VK_FORMAT_R32G32B32A32_SFLOAT;\n  case TextureFormat::RGBA_ASTC_4x4:\n    return VK_FORMAT_ASTC_4x4_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_4x4:\n    return VK_FORMAT_ASTC_4x4_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_5x4:\n    return VK_FORMAT_ASTC_5x4_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_5x4:\n    return VK_FORMAT_ASTC_5x4_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_5x5:\n    return VK_FORMAT_ASTC_5x5_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_5x5:\n    return VK_FORMAT_ASTC_5x5_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_6x5:\n    return VK_FORMAT_ASTC_6x5_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_6x5:\n    return VK_FORMAT_ASTC_6x5_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_6x6:\n    return VK_FORMAT_ASTC_6x6_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_6x6:\n    return VK_FORMAT_ASTC_6x6_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_8x5:\n    return VK_FORMAT_ASTC_8x5_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_8x5:\n    return VK_FORMAT_ASTC_8x5_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_8x6:\n    return VK_FORMAT_ASTC_8x6_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_8x6:\n    return VK_FORMAT_ASTC_8x6_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_8x8:\n    return VK_FORMAT_ASTC_8x8_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_8x8:\n    return VK_FORMAT_ASTC_8x8_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_10x5:\n    return VK_FORMAT_ASTC_10x5_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_10x5:\n    return VK_FORMAT_ASTC_10x5_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_10x6:\n    return VK_FORMAT_ASTC_10x6_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_10x6:\n    return VK_FORMAT_ASTC_10x6_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_10x8:\n    return VK_FORMAT_ASTC_10x8_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_10x8:\n    return VK_FORMAT_ASTC_10x8_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_10x10:\n    return VK_FORMAT_ASTC_10x10_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_10x10:\n    return VK_FORMAT_ASTC_10x10_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_12x10:\n    return VK_FORMAT_ASTC_12x10_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_12x10:\n    return VK_FORMAT_ASTC_12x10_SRGB_BLOCK;\n  case TextureFormat::RGBA_ASTC_12x12:\n    return VK_FORMAT_ASTC_12x12_UNORM_BLOCK;\n  case TextureFormat::SRGB8_A8_ASTC_12x12:\n    return VK_FORMAT_ASTC_12x12_SRGB_BLOCK;\n  case TextureFormat::RGBA_PVRTC_2BPPV1:\n    return VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  case TextureFormat::RGB_PVRTC_2BPPV1:\n    return VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG;\n  case TextureFormat::RGBA_PVRTC_4BPPV1:\n    return VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG;\n  case TextureFormat::RGB_PVRTC_4BPPV1:\n    return VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG;\n  case TextureFormat::RGB8_ETC1:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::RGB8_ETC2:\n    return VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK;\n  case TextureFormat::SRGB8_ETC2:\n    return VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK;\n  case TextureFormat::RGB8_Punchthrough_A1_ETC2:\n    return VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK;\n  case TextureFormat::SRGB8_Punchthrough_A1_ETC2:\n    return VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK;\n  case TextureFormat::RGBA8_EAC_ETC2:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::SRGB8_A8_EAC_ETC2:\n    return VK_FORMAT_UNDEFINED;\n  case TextureFormat::RG_EAC_UNorm:\n    return VK_FORMAT_EAC_R11G11_UNORM_BLOCK;\n  case TextureFormat::RG_EAC_SNorm:\n    return VK_FORMAT_EAC_R11G11_SNORM_BLOCK;\n  case TextureFormat::R_EAC_UNorm:\n    return VK_FORMAT_EAC_R11_UNORM_BLOCK;\n  case TextureFormat::R_EAC_SNorm:\n    return VK_FORMAT_EAC_R11_SNORM_BLOCK;\n  case TextureFormat::RGBA_BC7_UNORM_4x4:\n    return VK_FORMAT_BC7_UNORM_BLOCK;\n  case TextureFormat::RGBA_BC7_SRGB_4x4:\n    return VK_FORMAT_BC7_SRGB_BLOCK;\n  case TextureFormat::Z_UNorm16:\n    return VK_FORMAT_D16_UNORM;\n  case TextureFormat::Z_UNorm24:\n    return VK_FORMAT_D24_UNORM_S8_UINT;\n  case TextureFormat::Z_UNorm32:\n    return VK_FORMAT_D32_SFLOAT;\n  case TextureFormat::S8_UInt_Z24_UNorm:\n    return VK_FORMAT_D24_UNORM_S8_UINT;\n  case TextureFormat::S8_UInt_Z32_UNorm:\n    return VK_FORMAT_D32_SFLOAT_S8_UINT;\n  case TextureFormat::S_UInt8:\n    return VK_FORMAT_S8_UINT;\n  case TextureFormat::YUV_NV12:\n    return VK_FORMAT_G8_B8R8_2PLANE_420_UNORM;\n  case TextureFormat::YUV_420p:\n    return VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM;\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n    // @fb-only\n  }\n  IGL_UNREACHABLE_RETURN(VK_FORMAT_UNDEFINED)\n}\n\nbool isTextureFormatRGB(VkFormat format) {\n  return format == VK_FORMAT_R8G8B8A8_UNORM || format == VK_FORMAT_R8G8B8A8_SRGB ||\n         format == VK_FORMAT_A2R10G10B10_UNORM_PACK32;\n}\n\nbool isTextureFormatBGR(VkFormat format) {\n  return format == VK_FORMAT_B8G8R8A8_UNORM || format == VK_FORMAT_B8G8R8A8_SRGB ||\n         format == VK_FORMAT_A2B10G10R10_UNORM_PACK32;\n}\n\nTextureFormat vkFormatToTextureFormat(VkFormat format) {\n  return util::vkTextureFormatToTextureFormat(static_cast<int32_t>(format));\n}\n\nVkMemoryPropertyFlags resourceStorageToVkMemoryPropertyFlags(\n    ResourceStorage resourceStorage,\n    const VkPhysicalDeviceMemoryProperties* IGL_NULLABLE memProperties) {\n  VkMemoryPropertyFlags memFlags{0};\n\n  switch (resourceStorage) {\n  case ResourceStorage::Invalid:\n    IGL_DEBUG_ABORT(\"Invalid storage type\");\n    break;\n  case ResourceStorage::Private:\n    memFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;\n    break;\n  case ResourceStorage::Shared:\n    memFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;\n    break;\n  case ResourceStorage::Managed:\n    memFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;\n    break;\n  case ResourceStorage::Memoryless: {\n    memFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;\n    if (!memProperties) {\n      break;\n    }\n    constexpr VkMemoryPropertyFlags targetFlags =\n        VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;\n    const auto* const memoryTypesEnd = memProperties->memoryTypes + memProperties->memoryTypeCount;\n    if (std::find_if(\n            memProperties->memoryTypes, memoryTypesEnd, [](const VkMemoryType& memoryType) {\n              return (memoryType.propertyFlags & targetFlags) == targetFlags;\n            }) != memoryTypesEnd) {\n      memFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;\n    }\n\n    break;\n  }\n  }\n\n  return memFlags;\n}\n\nVkCompareOp compareFunctionToVkCompareOp(CompareFunction func) {\n  switch (func) {\n  case igl::CompareFunction::Never:\n    return VK_COMPARE_OP_NEVER;\n  case igl::CompareFunction::Less:\n    return VK_COMPARE_OP_LESS;\n  case igl::CompareFunction::Equal:\n    return VK_COMPARE_OP_EQUAL;\n  case igl::CompareFunction::LessEqual:\n    return VK_COMPARE_OP_LESS_OR_EQUAL;\n  case igl::CompareFunction::Greater:\n    return VK_COMPARE_OP_GREATER;\n  case igl::CompareFunction::NotEqual:\n    return VK_COMPARE_OP_NOT_EQUAL;\n  case igl::CompareFunction::GreaterEqual:\n    return VK_COMPARE_OP_GREATER_OR_EQUAL;\n  case igl::CompareFunction::AlwaysPass:\n    return VK_COMPARE_OP_ALWAYS;\n  }\n  IGL_DEBUG_ABORT(\"CompareFunction value not handled: %d\", (int)func);\n  return VK_COMPARE_OP_ALWAYS;\n}\n\nVkColorSpaceKHR colorSpaceToVkColorSpace(ColorSpace colorSpace) {\n  switch (colorSpace) {\n  case ColorSpace::SRGB_LINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_BT709_LINEAR_EXT; // closest thing to linear srgb\n  case ColorSpace::SRGB_NONLINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_SRGB_NONLINEAR_KHR;\n  case ColorSpace::DISPLAY_P3_NONLINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT;\n  case ColorSpace::DISPLAY_P3_LINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT;\n  case ColorSpace::EXTENDED_SRGB_LINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT;\n  case ColorSpace::DCI_P3_NONLINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT;\n  case ColorSpace::BT709_LINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_BT709_LINEAR_EXT;\n  case ColorSpace::BT709_NONLINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_BT709_NONLINEAR_EXT;\n  case ColorSpace::BT2020_LINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_BT2020_LINEAR_EXT;\n  case ColorSpace::HDR10_ST2084:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_HDR10_ST2084_EXT;\n  case ColorSpace::DOLBYVISION:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_DOLBYVISION_EXT;\n  case ColorSpace::HDR10_HLG:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_HDR10_HLG_EXT;\n  case ColorSpace::ADOBERGB_LINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT;\n  case ColorSpace::ADOBERGB_NONLINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT;\n  case ColorSpace::PASS_THROUGH:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_PASS_THROUGH_EXT;\n  case ColorSpace::EXTENDED_SRGB_NONLINEAR:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT;\n  case ColorSpace::DISPLAY_NATIVE_AMD:\n    return VkColorSpaceKHR::VK_COLOR_SPACE_DISPLAY_NATIVE_AMD;\n  case ColorSpace::BT2020_NONLINEAR:\n  case ColorSpace::BT601_NONLINEAR:\n  case ColorSpace::BT2100_HLG_NONLINEAR:\n  case ColorSpace::BT2100_PQ_NONLINEAR:\n    IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n    return VkColorSpaceKHR::VK_COLOR_SPACE_BT709_NONLINEAR_EXT;\n  }\n  IGL_UNREACHABLE_RETURN(VK_COLOR_SPACE_BT709_NONLINEAR_EXT);\n}\n\nColorSpace vkColorSpaceToColorSpace(VkColorSpaceKHR colorSpace) {\n  switch (colorSpace) {\n  case VK_COLOR_SPACE_SRGB_NONLINEAR_KHR:\n    return ColorSpace::SRGB_NONLINEAR;\n  case VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT:\n    return ColorSpace::DISPLAY_P3_NONLINEAR;\n  case VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT:\n    return ColorSpace::EXTENDED_SRGB_LINEAR;\n  case VK_COLOR_SPACE_DISPLAY_P3_LINEAR_EXT:\n    return ColorSpace::DISPLAY_P3_LINEAR;\n  case VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT:\n    return ColorSpace::DCI_P3_NONLINEAR;\n  case VK_COLOR_SPACE_BT709_LINEAR_EXT:\n    return ColorSpace::BT709_LINEAR;\n  case VK_COLOR_SPACE_BT709_NONLINEAR_EXT:\n    return ColorSpace::BT709_NONLINEAR;\n  case VK_COLOR_SPACE_BT2020_LINEAR_EXT:\n    return ColorSpace::BT2020_LINEAR;\n  case VK_COLOR_SPACE_HDR10_ST2084_EXT:\n    return ColorSpace::HDR10_ST2084;\n  case VK_COLOR_SPACE_DOLBYVISION_EXT:\n    return ColorSpace::DOLBYVISION;\n  case VK_COLOR_SPACE_HDR10_HLG_EXT:\n    return ColorSpace::HDR10_HLG;\n  case VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT:\n    return ColorSpace::ADOBERGB_LINEAR;\n  case VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT:\n    return ColorSpace::ADOBERGB_NONLINEAR;\n  case VK_COLOR_SPACE_PASS_THROUGH_EXT:\n    return ColorSpace::PASS_THROUGH;\n  case VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT:\n    return ColorSpace::EXTENDED_SRGB_NONLINEAR;\n  case VK_COLOR_SPACE_DISPLAY_NATIVE_AMD:\n    return ColorSpace::DISPLAY_NATIVE_AMD;\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return ColorSpace::SRGB_NONLINEAR;\n  }\n}\n\nVkSampleCountFlagBits getVulkanSampleCountFlags(size_t numSamples) {\n  if (numSamples <= 1) {\n    return VK_SAMPLE_COUNT_1_BIT;\n  }\n  if (numSamples <= 2) {\n    return VK_SAMPLE_COUNT_2_BIT;\n  }\n  if (numSamples <= 4) {\n    return VK_SAMPLE_COUNT_4_BIT;\n  }\n  if (numSamples <= 8) {\n    return VK_SAMPLE_COUNT_8_BIT;\n  }\n  if (numSamples <= 16) {\n    return VK_SAMPLE_COUNT_16_BIT;\n  }\n  if (numSamples <= 32) {\n    return VK_SAMPLE_COUNT_32_BIT;\n  }\n  return VK_SAMPLE_COUNT_64_BIT;\n}\n\nuint32_t getVkLayer(TextureType type, uint32_t face, uint32_t layer) {\n  return type == TextureType::Cube ? face : layer;\n}\n\nTextureRangeDesc atVkLayer(TextureType type, const TextureRangeDesc& range, uint32_t vkLayer) {\n  return type == TextureType::Cube ? range.atFace(vkLayer) : range.atLayer(vkLayer);\n}\n\nvoid transitionToGeneral(VkCommandBuffer cmdBuf, ITexture* texture) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_TRANSITION);\n\n  if (!texture) {\n    return;\n  }\n\n  const vulkan::Texture& tex = static_cast<Texture&>(*texture);\n  const vulkan::VulkanImage& img = tex.getVulkanTexture().image_;\n  const vulkan::VulkanImageView& imgView = tex.getVulkanTexture().imageView_;\n\n  if (!img.isStorageImage()) {\n    IGL_DEBUG_ABORT(\"Did you forget to specify TextureUsageBits::Storage on your texture?\");\n    return;\n  }\n\n  // \"frame graph\" heuristics: if we are already in VK_IMAGE_LAYOUT_GENERAL, wait for the previous\n  // compute shader, otherwise wait for previous attachment writes\n  const VkPipelineStageFlags srcStage =\n      (img.imageLayout_ == VK_IMAGE_LAYOUT_GENERAL) ? VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT\n      : img.isDepthOrStencilFormat_                 ? VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT\n                                                    : VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;\n  img.transitionLayout(cmdBuf,\n                       VK_IMAGE_LAYOUT_GENERAL,\n                       srcStage,\n                       VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,\n                       VkImageSubresourceRange{imgView.getVkImageAspectFlags(),\n                                               0,\n                                               VK_REMAINING_MIP_LEVELS,\n                                               0,\n                                               VK_REMAINING_ARRAY_LAYERS});\n}\n\nvoid transitionToColorAttachment(VkCommandBuffer cmdBuf, ITexture* colorTex) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_TRANSITION);\n\n  if (!colorTex) {\n    return;\n  }\n\n  const auto& vkTex = static_cast<Texture&>(*colorTex);\n  const igl::vulkan::VulkanImage& img = vkTex.getVulkanTexture().image_;\n  if (IGL_DEBUG_VERIFY_NOT(img.isDepthFormat_ || img.isStencilFormat_)) {\n    IGL_DEBUG_ABORT(\"Color attachments cannot have depth/stencil formats\");\n    IGL_LOG_ERROR(\"Color attachments cannot have depth/stencil formats\");\n    return;\n  }\n  IGL_DEBUG_ASSERT(img.imageFormat_ != VK_FORMAT_UNDEFINED || vkTex.getVkExtendedFormat() != 0,\n                   \"Invalid color attachment format\");\n  if (!IGL_DEBUG_VERIFY((img.usageFlags_ & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) != 0)) {\n    IGL_DEBUG_ABORT(\"Did you forget to specify TextureUsageBit::Attachment usage bit?\");\n    IGL_LOG_ERROR(\"Did you forget to specify TextureUsageBit::Attachment usage bit?\");\n  }\n  if (img.usageFlags_ & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) {\n    // transition to VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL\n    img.transitionLayout(\n        cmdBuf,\n        VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,\n        VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |\n            VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, // wait for all subsequent fragment/compute\n                                                  // shaders\n        VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,\n        VkImageSubresourceRange{\n            VK_IMAGE_ASPECT_COLOR_BIT, 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS});\n  }\n}\n\nvoid transitionToDepthStencilAttachment(VkCommandBuffer cmdBuf, ITexture* depthStencilTex) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_TRANSITION);\n\n  if (!depthStencilTex) {\n    return;\n  }\n\n  const auto& vkTex = static_cast<Texture&>(*depthStencilTex);\n  const igl::vulkan::VulkanImage& img = vkTex.getVulkanTexture().image_;\n  if (IGL_DEBUG_VERIFY_NOT(!img.isDepthFormat_ && !img.isStencilFormat_)) {\n    IGL_DEBUG_ABORT(\"Only depth/stencil formats are accepted\");\n    IGL_LOG_ERROR(\"Only depth/stencil formats are accepted\");\n    return;\n  }\n  IGL_DEBUG_ASSERT(img.imageFormat_ != VK_FORMAT_UNDEFINED, \"Invalid color attachment format\");\n  if (!IGL_DEBUG_VERIFY((img.usageFlags_ & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0)) {\n    IGL_DEBUG_ABORT(\"Did you forget to specify TextureUsageBit::Attachment usage bit?\");\n    IGL_LOG_ERROR(\"Did you forget to specify TextureUsageBit::Attachment usage bit?\");\n  }\n  if (img.usageFlags_ & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {\n    // transition to VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL\n    VkImageAspectFlags aspectFlags = 0;\n    if (img.isDepthFormat_) {\n      aspectFlags |= VK_IMAGE_ASPECT_DEPTH_BIT;\n    }\n    if (img.isStencilFormat_) {\n      aspectFlags |= VK_IMAGE_ASPECT_STENCIL_BIT;\n    }\n    img.transitionLayout(\n        cmdBuf,\n        VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,\n        VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |\n            VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, // wait for all subsequent fragment/compute\n                                                  // shaders\n        VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,\n        VkImageSubresourceRange{\n            aspectFlags, 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS});\n  }\n}\n\nvoid transitionToShaderReadOnly(VkCommandBuffer cmdBuf, ITexture* texture) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_TRANSITION);\n\n  if (!texture) {\n    return;\n  }\n\n  const vulkan::Texture& tex = static_cast<Texture&>(*texture);\n  const vulkan::VulkanImage& img = tex.getVulkanTexture().image_;\n  const igl::vulkan::VulkanImageView& imgView = tex.getVulkanTexture().imageView_;\n\n  const bool isColor = (imgView.getVkImageAspectFlags() & VK_IMAGE_ASPECT_COLOR_BIT) > 0;\n\n  if (img.usageFlags_ & VK_IMAGE_USAGE_SAMPLED_BIT) {\n    // transition sampled images to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL\n    img.transitionLayout(\n        cmdBuf,\n        VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,\n        isColor ? VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT\n                : VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,\n        VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |\n            VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, // wait for subsequent\n                                                  // fragment/compute shaders\n        VkImageSubresourceRange{\n            img.getImageAspectFlags(), 0, VK_REMAINING_MIP_LEVELS, 0, VK_REMAINING_ARRAY_LAYERS});\n  }\n}\n\nvoid overrideImageLayout(ITexture* texture, VkImageLayout layout) {\n  if (!texture) {\n    return;\n  }\n  const vulkan::Texture* tex = static_cast<Texture*>(texture);\n  tex->getVulkanTexture().image_.imageLayout_ = layout;\n}\n\nvoid ensureShaderModule(IShaderModule* sm) {\n  IGL_DEBUG_ASSERT(sm);\n\n  const igl::vulkan::util::SpvModuleInfo& info =\n      static_cast<ShaderModule*>(sm)->getVulkanShaderModule().getSpvModuleInfo();\n\n  for (const auto& t : info.textures) {\n    if (!IGL_DEBUG_VERIFY(t.descriptorSet == kBindPoint_CombinedImageSamplers)) {\n      IGL_LOG_ERROR(\n          \"Missing descriptor set id for textures: the shader should contain \\\"layout(set = \"\n          \"%u, ...)\\\"\",\n          kBindPoint_CombinedImageSamplers);\n      continue;\n    }\n  }\n  for (const auto& b : info.buffers) {\n    if (!IGL_DEBUG_VERIFY(b.descriptorSet == kBindPoint_Buffers)) {\n      IGL_LOG_ERROR(\n          \"Missing descriptor set id for buffers: the shader should contain \\\"layout(set = \"\n          \"%u, ...)\\\"\",\n          kBindPoint_Buffers);\n      continue;\n    }\n  }\n  for (const auto& i : info.images) {\n    if (!IGL_DEBUG_VERIFY(i.descriptorSet == kBindPoint_StorageImages)) {\n      IGL_LOG_ERROR(\n          \"Missing descriptor set id for storage images: the shader should contain \\\"layout(set = \"\n          \"%u, ...)\\\"\",\n          kBindPoint_StorageImages);\n      continue;\n    }\n  }\n}\n\nVkComponentMapping componentMappingToVkComponentMapping(const ComponentMapping& mapping) {\n  auto swizzleToVkSwizzle = [](Swizzle swizzle) -> VkComponentSwizzle {\n    switch (swizzle) {\n    case Swizzle_Default:\n      return VK_COMPONENT_SWIZZLE_IDENTITY;\n    case Swizzle_0:\n      return VK_COMPONENT_SWIZZLE_ZERO;\n    case Swizzle_1:\n      return VK_COMPONENT_SWIZZLE_ONE;\n    case Swizzle_R:\n      return VK_COMPONENT_SWIZZLE_R;\n    case Swizzle_G:\n      return VK_COMPONENT_SWIZZLE_G;\n    case Swizzle_B:\n      return VK_COMPONENT_SWIZZLE_B;\n    case Swizzle_A:\n      return VK_COMPONENT_SWIZZLE_A;\n    default:\n      IGL_DEBUG_ASSERT_NOT_REACHED();\n      return VK_COMPONENT_SWIZZLE_IDENTITY;\n    }\n  };\n\n  return VkComponentMapping{\n      .r = swizzleToVkSwizzle(mapping.r),\n      .g = swizzleToVkSwizzle(mapping.g),\n      .b = swizzleToVkSwizzle(mapping.b),\n      .a = swizzleToVkSwizzle(mapping.a),\n  };\n}\n\nuint32_t getNumImagePlanes(VkFormat format) {\n  switch (format) {\n  case VK_FORMAT_UNDEFINED:\n    return 0;\n  case VK_FORMAT_G8_B8R8_2PLANE_420_UNORM:\n    return 2;\n  case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:\n    return 3;\n  default:\n    return 1;\n  }\n}\n\nbool hasDepth(VkFormat format) {\n  return (format == VK_FORMAT_D16_UNORM) || (format == VK_FORMAT_X8_D24_UNORM_PACK32) ||\n         (format == VK_FORMAT_D32_SFLOAT) || (format == VK_FORMAT_D16_UNORM_S8_UINT) ||\n         (format == VK_FORMAT_D24_UNORM_S8_UINT) || (format == VK_FORMAT_D32_SFLOAT_S8_UINT);\n}\n\nbool hasStencil(VkFormat format) {\n  return (format == VK_FORMAT_S8_UINT) || (format == VK_FORMAT_D16_UNORM_S8_UINT) ||\n         (format == VK_FORMAT_D24_UNORM_S8_UINT) || (format == VK_FORMAT_D32_SFLOAT_S8_UINT);\n}\n\n} // namespace igl::vulkan\n\nnamespace igl::vulkan::functions {\n\nnamespace {\nPFN_vkGetInstanceProcAddr getVkGetInstanceProcAddr() {\n#if defined(FORCE_USE_STATIC_VULKAN_LOADER) && !defined(FORCE_USE_STATIC_VULKAN_LOADER_DISABLED)\n  return nullptr;\n#elif defined(_WIN32)\n  HMODULE lib = LoadLibraryA(\"vulkan-1.dll\");\n  if (!lib) {\n    DWORD dw = GetLastError();\n    LPVOID lpMsgBuf = nullptr;\n\n    if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM |\n                          FORMAT_MESSAGE_IGNORE_INSERTS,\n                      NULL,\n                      dw,\n                      MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),\n                      (LPTSTR)&lpMsgBuf,\n                      0,\n                      NULL) != 0) {\n      IGL_LOG_ERROR(\"Failed to open vulkan-1.dll: %s\\n\", (LPCTSTR)lpMsgBuf);\n      LocalFree(lpMsgBuf);\n    } else {\n      IGL_LOG_ERROR(\"Failed to open vulkan-1.dll\");\n    }\n\n    return nullptr;\n  }\n  return (PFN_vkGetInstanceProcAddr)GetProcAddress(lib, \"vkGetInstanceProcAddr\");\n#elif defined(__APPLE__)\n  void* lib = dlopen(\"libvulkan.dylib\", RTLD_NOW | RTLD_LOCAL);\n  IGL_LOG_INFO(\"Loading libvulkan.dylib\\n\");\n  if (!lib) {\n    IGL_LOG_INFO(\"Opening libvulkan.dylib failed: %s. Loading libvulkan.1.dylib instead\\n\",\n                 dlerror());\n    lib = dlopen(\"libvulkan.1.dylib\", RTLD_NOW | RTLD_LOCAL);\n  }\n  if (!lib) {\n    IGL_LOG_INFO(\"Opening libvulkan.1.dylib failed: %s. Loading libMoltenVK.dylib instead\\n\",\n                 dlerror());\n    lib = dlopen(\"libMoltenVK.dylib\", RTLD_NOW | RTLD_LOCAL);\n  }\n  if (!lib) {\n    IGL_LOG_ERROR(\"Failed to open libMoltenVK.dylib: %s\\n\", dlerror());\n    return nullptr;\n  }\n  return (PFN_vkGetInstanceProcAddr)dlsym(lib, \"vkGetInstanceProcAddr\");\n#else\n  // Preload libraries that Vulkan ICD drivers commonly depend on.\n  // This ensures they're available when the Vulkan loader dlopens() ICD drivers.\n  // Libraries must be preloaded in dependency order (leaf dependencies first).\n  // This is required because Buck2 uses a custom dynamic linker that doesn't search\n  // standard system library paths (/lib64, /usr/lib64). We cannot use LD_LIBRARY_PATH\n  // or RPATH because they would interfere with Buck2's hermetic build environment.\n#if IGL_PLATFORM_LINUX && !defined(IGL_CMAKE_BUILD)\n  const std::array<const char*, 25> kPreloadLibs = {\n      // Base system libraries (leaf dependencies)\n      \"/lib64/libtinfo.so.6\", // Required by libedit\n      \"/lib64/liblzma.so.5\", // Required by libxml2\n      \"/lib64/libz.so.1\", // Required by libLLVM, libxml2, Intel drivers\n      \"/usr/lib64/libzstd.so.1\", // Required by libLLVM, Intel drivers\n      \"/usr/lib64/libffi.so.8\", // Required by libLLVM\n      \"/lib64/libelf.so.1\", // Required by Radeon driver\n      // Mid-level dependencies\n      \"/lib64/libedit.so.0\", // Required by libLLVM (depends on libtinfo)\n      \"/lib64/libxml2.so.2\", // Required by libLLVM (depends on liblzma, libz)\n      \"/lib64/libexpat.so.1\", // Required by Mesa drivers\n      \"/lib64/libXau.so.6\", // Required by libxcb\n      // X11/XCB libraries (for Intel and other hardware drivers)\n      \"/lib64/libxcb.so.1\", // Required by Mesa drivers (depends on libXau)\n      \"/lib64/libxcb-randr.so.0\", // Required by Lavapipe and all drivers\n      \"/lib64/libxcb-present.so.0\", // Required by all Mesa Vulkan drivers\n      \"/lib64/libxcb-sync.so.1\", // Required by Mesa drivers\n      \"/lib64/libxcb-xfixes.so.0\", // Required by Mesa drivers\n      \"/lib64/libxcb-shm.so.0\", // Required by Mesa drivers\n      \"/lib64/libX11-xcb.so.1\", // Required by Intel drivers\n      \"/lib64/libxshmfence.so.1\", // Required by Intel drivers\n      \"/lib64/libwayland-client.so.0\", // Required by Intel drivers\n      // DRM libraries\n      \"/lib64/libdrm.so.2\", // Required by all hardware drivers\n      \"/usr/lib64/libdrm_amdgpu.so.1\", // Required by Radeon driver\n      // High-level dependencies\n      \"/lib64/libLLVM.so.20.1\", // Required by Lavapipe and Radeon drivers\n      \"/lib64/libSPIRV-Tools.so\", // Required by Lavapipe\n      \"/lib64/libSPIRV-Tools-opt.so\", // Required by libVkLayer_khronos_validation\n      // Additional X11 libraries for Intel drivers\n      \"/lib64/libxcb-dri3.so.0\", // Required by Intel drivers\n  };\n  for (const char* preload : kPreloadLibs) {\n    // First try loading just the library name (allows LD_LIBRARY_PATH to work)\n    const char* libName = strrchr(preload, '/');\n    libName = libName ? libName + 1 : preload;\n\n    const void* handle = dlopen(libName, RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE);\n    if (handle) {\n      IGL_LOG_DEBUG(\"IGL/Vulkan: preloaded `%s` (via library name).\\n\", libName);\n    } else {\n      // Fall back to full path if library name didn't work\n      handle = dlopen(preload, RTLD_NOW | RTLD_GLOBAL | RTLD_NODELETE);\n      if (handle) {\n        IGL_LOG_DEBUG(\"IGL/Vulkan: preloaded `%s` (via full path).\\n\", preload);\n      } else {\n        // Log but continue - not all systems will have all drivers\n        IGL_LOG_DEBUG(\n            \"IGL/Vulkan: failed to preload `%s`: %s (not critical).\\n\", preload, dlerror());\n      }\n    }\n  }\n#endif // IGL_PLATFORM_LINUX && !defined(IGL_CMAKE_BUILD)\n  const std::array<const char*, 4> libs = {\n      \"libvulkan.so.1\",\n      \"libvulkan.so\",\n      \"/lib64/libvulkan.so.1\",\n      \"/lib64/libvulkan.so\",\n  };\n  void* lib = nullptr;\n  for (const char* name : libs) {\n    lib = dlopen(name, RTLD_NOW | RTLD_LOCAL);\n    if (lib) {\n      break;\n    }\n    IGL_LOG_INFO(\"IGL/Vulkan: opening `%s` failed: %s.\\n\", name, dlerror());\n  }\n\n  if (!lib) {\n    IGL_LOG_ERROR(\"IGL/Vulkan: no Vulkan library was found.\\n\");\n    return nullptr;\n  }\n  return (PFN_vkGetInstanceProcAddr)dlsym(lib, \"vkGetInstanceProcAddr\");\n#endif\n}\n} // namespace\n\nvoid initialize(VulkanFunctionTable& table) {\n  table.vkGetInstanceProcAddr = getVkGetInstanceProcAddr();\n\n  if (!loadVulkanLoaderFunctions(&table, table.vkGetInstanceProcAddr)) {\n    IGL_LOG_ERROR(\"Failed to load Vulkan loader functions\");\n    abort();\n  }\n}\n\nvoid loadInstanceFunctions(VulkanFunctionTable& table,\n                           VkInstance instance,\n                           bool enableExtDebugUtils) {\n  IGL_DEBUG_ASSERT(table.vkGetInstanceProcAddr != nullptr);\n  loadVulkanInstanceFunctions(\n      &table, instance, table.vkGetInstanceProcAddr, enableExtDebugUtils ? VK_TRUE : VK_FALSE);\n}\n\nvoid loadDeviceFunctions(VulkanFunctionTable& table, VkDevice device) {\n  IGL_DEBUG_ASSERT(table.vkGetDeviceProcAddr != nullptr);\n  loadVulkanDeviceFunctions(&table, device, table.vkGetDeviceProcAddr);\n}\n\n} // namespace igl::vulkan::functions\n"
  },
  {
    "path": "src/igl/vulkan/Common.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#ifndef IGL_VULKAN_COMMON_H\n#define IGL_VULKAN_COMMON_H\n\n#include <cassert> // IWYU pragma: export\n#include <utility> // IWYU pragma: export\n\n// set to 1 to see very verbose debug console logs with Vulkan commands\n#define IGL_VULKAN_PRINT_COMMANDS 0\n\n#include <igl/Macros.h> // IWYU pragma: export\n#include <igl/vulkan/VulkanFunctionTable.h> // IWYU pragma: export\n#if IGL_PLATFORM_MACOSX\n#include <vulkan/vulkan_metal.h> // IWYU pragma: export\n#endif\n\n#include <igl/ColorSpace.h> // IWYU pragma: export\n#include <igl/Common.h> // IWYU pragma: export\n#include <igl/DepthStencilState.h> // IWYU pragma: export\n#include <igl/Format.h> // IWYU pragma: export\n#include <igl/Texture.h> // IWYU pragma: export\n#include <igl/VertexInputState.h> // IWYU pragma: export\n#include <igl/vulkan/VulkanHelpers.h> // IWYU pragma: export\n\n// Enable to use VulkanMemoryAllocator (VMA)\n#define IGL_VULKAN_USE_VMA 1\n\n// Macro that encapsulates a function call and check its return value against VK_SUCCESS. Prints\n// location of failure when the result is not VK_SUCCESS, along with a stringified version of the\n// result value. Asserts at the end of the code block. Expands to void function calls when build\n// mode is not DEBUG\n#define VK_ASSERT(func)                                            \\\n  {                                                                \\\n    const VkResult vk_assert_result = func;                        \\\n    if (vk_assert_result != VK_SUCCESS) {                          \\\n      IGL_DEBUG_ABORT(\"Vulkan API call failed: %s\\n  %s\\n\",        \\\n                      #func,                                       \\\n                      ivkGetVulkanResultString(vk_assert_result)); \\\n    }                                                              \\\n  }\n\n// Macro that encapsulates a function call and check its return value against VK_SUCCESS. Prints\n// location of failure when the result is not VK_SUCCESS, along with a stringified version of the\n// result value. Asserts at the end of the code block. The check remains even in build modes other\n// than DEBUG\n#if IGL_DEBUG_ABORT_ENABLED\n// When IGL_DEBUG_ABORT_ENABLED is 1, VK_ASSERT may assert but will always log so use the existing\n// macro.\n#define VK_ASSERT_FORCE_LOG(func) VK_ASSERT(func)\n#else\n// When IGL_DEBUG_ABORT_ENABLED is 0, VK_ASSERT will neither log nor assert so need a separate\n// definition that will explicitly log the result\n#define VK_ASSERT_FORCE_LOG(func)                           \\\n  {                                                         \\\n    const VkResult vk_assert_result = func;                 \\\n    if (vk_assert_result != VK_SUCCESS) {                   \\\n      IGLLog(IGLLogError,                                   \\\n             \"Vulkan API call failed: %s:%i\\n  %s\\n  %s\\n\", \\\n             __FILE__,                                      \\\n             __LINE__,                                      \\\n             #func,                                         \\\n             ivkGetVulkanResultString(vk_assert_result));   \\\n    }                                                       \\\n  }\n#endif // IGL_DEBUG_ABORT_ENABLED\n\n// Macro that encapsulates a function call and check its return value against VK_SUCCESS. Prints\n// location of failure when the result is not VK_SUCCESS, along with a stringified version of the\n// result value. Asserts at the end of the code block. The check remains even in build modes other\n// than DEBUG. Returns the value passed as a parameter\n#define VK_ASSERT_RETURN_VALUE(func, value)                        \\\n  {                                                                \\\n    const VkResult vk_assert_result = func;                        \\\n    if (vk_assert_result != VK_SUCCESS) {                          \\\n      IGL_DEBUG_ABORT(\"Vulkan API call failed: %s\\n  %s\\n\",        \\\n                      #func,                                       \\\n                      ivkGetVulkanResultString(vk_assert_result)); \\\n      return value;                                                \\\n    }                                                              \\\n  }\n\n// Calls the function provided as `func`, checks the return value from the function call against\n// VK_SUCCESS and converts the return value from VkResult to an igl::Result and returns it\n#define VK_ASSERT_RETURN(func) VK_ASSERT_RETURN_VALUE(func, getResultFromVkResult(vk_assert_result))\n\n// Calls the function provided as `func`, checks the return value from the function call against\n// VK_SUCCESS and returns VK_NULL_HANDLE\n#define VK_ASSERT_RETURN_NULL_HANDLE(func) VK_ASSERT_RETURN_VALUE(func, VK_NULL_HANDLE)\n\n#define IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx) (ctx)->ensureCurrentContextThread()\n\nnamespace igl::vulkan {\n\n// The color definitions below are used by debugging utility functions, such as the ones provided by\n// VK_EXT_debug_utils\n#define K_COLOR_GENERATE_MIPMAPS igl::Color(1.f, 0.75f, 0.f)\n#define K_COLOR_UPLOAD_IMAGE igl::Color(1.f, 0.2f, 0.78f)\n#define K_COLOR_COMMAND_BUFFER_SUBMISSION_WITH_FENCE igl::Color(0.878f, 0.69f, 1.0f) // Mauve\n\n// The VulkanContextConfig provides a way to override some of the the default behaviors of the\n// VulkanContext\nstruct VulkanContextConfig {\n  bool terminateOnValidationError = false; // invoke std::terminate() on any validation error\n\n  bool enableConcurrentVkDevicesSupport = false;\n\n  bool enableValidation = true;\n  bool enableGPUAssistedValidation = true;\n  bool enableExtraLogs = true;\n  bool enableDescriptorIndexing = false;\n  bool enableShaderInt16 = true;\n  bool enableShaderDrawParameters = true;\n  bool enableStorageBuffer16BitAccess = true;\n  bool enableDualSrcBlend = true;\n  bool enableGfxReconstruct = false;\n  bool enableMultiviewPerViewViewports = false;\n\n  ColorSpace swapChainColorSpace = igl::ColorSpace::SRGB_NONLINEAR;\n  TextureFormat requestedSwapChainTextureFormat = igl::TextureFormat::RGBA_UNorm8;\n\n  // the number of resources to support BufferAPIHintBits::Ring\n  uint32_t maxResourceCount = 3u;\n\n  // owned by the application - should be alive until initContext() returns\n  const void* pipelineCacheData = nullptr;\n  size_t pipelineCacheDataSize = 0;\n\n  // This enables fences generated at the end of submission to be exported to the client.\n  // The client can then use the SubmitHandle to wait for the completion of the GPU work.\n  bool exportableFences = false;\n\n  // Use VK_EXT_headless_surface to create a headless swapchain\n  bool headless = false;\n\n  // Size for VulkanMemoryAllocator's default pool block size parameter.\n  // Only relevant if VMA is used for memory allocation.\n  // Passing 0 will prompt VMA to a large default value (currently 256 MB).\n  // Using a smaller heap size would increase the chance of memory deallocation and result in less\n  // memory wastage.\n  size_t vmaPreferredLargeHeapBlockSize = 0;\n\n  // Specifies a default fence timeout value.\n  uint64_t fenceTimeoutNanoseconds = UINT64_MAX;\n\n  size_t numExtraInstanceExtensions = 0;\n  const char* IGL_NULLABLE* IGL_NULLABLE extraInstanceExtensions = nullptr;\n\n  const char* engineName = \"IGL/Vulkan\";\n  const char* applicationName = \"IGL/Vulkan\";\n};\n\n/**\n * @brief Encapsulates a handle to a VkSampler. The struct also stores the sampler id, which is used\n * for bindless rendering (see the ResourcesBinder and VulkanContext classes for more information)\n */\nstruct VulkanSampler final {\n  VkSampler vkSampler = VK_NULL_HANDLE;\n  /**\n   * @brief The index into VulkanContext::samplers_. This index is intended to be used with bindless\n   * rendering. Its value is set by the context when the resource is created and added to the vector\n   * of samplers maintained by the VulkanContext.\n   */\n  uint32_t samplerId = 0;\n};\n\n// The functions below are convenience functions used to convert to and from Vulkan values to IGL\n// values\n\nResult getResultFromVkResult(VkResult result);\nvoid setResultFrom(Result* outResult, VkResult result);\nVkFormat textureFormatToVkFormat(TextureFormat format);\nTextureFormat vkFormatToTextureFormat(VkFormat format);\nVkFormat invertRedAndBlue(VkFormat format);\nbool isTextureFormatRGB(VkFormat format);\nbool isTextureFormatBGR(VkFormat format);\nbool hasDepth(VkFormat format);\nbool hasStencil(VkFormat format);\nuint32_t getNumImagePlanes(VkFormat format);\nVkMemoryPropertyFlags resourceStorageToVkMemoryPropertyFlags(\n    ResourceStorage resourceStorage,\n    const VkPhysicalDeviceMemoryProperties* IGL_NULLABLE memProperties = nullptr);\nVkCompareOp compareFunctionToVkCompareOp(CompareFunction func);\nVkStencilOp stencilOperationToVkStencilOp(StencilOperation op);\nVkSampleCountFlagBits getVulkanSampleCountFlags(size_t numSamples);\nVkSurfaceFormatKHR colorSpaceToVkSurfaceFormat(ColorSpace colorSpace, bool isBGR);\nuint32_t getVkLayer(TextureType type, uint32_t face, uint32_t layer);\nTextureRangeDesc atVkLayer(TextureType type, const TextureRangeDesc& range, uint32_t vkLayer);\nVkColorSpaceKHR colorSpaceToVkColorSpace(ColorSpace colorSpace);\nColorSpace vkColorSpaceToColorSpace(VkColorSpaceKHR colorSpace);\nVkComponentMapping componentMappingToVkComponentMapping(const ComponentMapping& mapping);\n\n/// @brief Transition from the current layout to VK_IMAGE_LAYOUT_GENERAL\nvoid transitionToGeneral(VkCommandBuffer cmdBuf, ITexture* texture);\n\n/// @brief Transition from the current layout to VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL\nvoid transitionToColorAttachment(VkCommandBuffer cmdBuf, ITexture* colorTex);\n\n/// @brief Transition from the current layout to VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL\nvoid transitionToDepthStencilAttachment(VkCommandBuffer cmdBuf, ITexture* depthStencilTex);\n\n/// @brief Transition from the current layout to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL\nvoid transitionToShaderReadOnly(VkCommandBuffer cmdBuf, ITexture* texture);\n\n/// @brief Overrides the layout stored in the `texture` with the one in `layout`. This function does\n/// not perform a transition, it only updates the texture's member variable that stores its current\n/// layout\nvoid overrideImageLayout(ITexture* texture, VkImageLayout layout);\n\n/// @brief Ensures that all shader bindings are bound by checking the SPIR-V reflection. If the\n/// function doesn't assert at some point, the shader bindings are correct. Only for debugging.\nvoid ensureShaderModule(IShaderModule* sm);\n\n/// @brief Implements the igl::IDepthStencilState interface\nstruct DepthStencilState final : public IDepthStencilState {\n  explicit DepthStencilState(DepthStencilStateDesc desc) : desc(std::move(desc)) {}\n  const DepthStencilStateDesc desc;\n};\n\n/// @brief Implements the igl::IVertexInputState interface\nstruct VertexInputState final : public IVertexInputState {\n public:\n  explicit VertexInputState(VertexInputStateDesc desc) : desc(std::move(desc)) {}\n  const VertexInputStateDesc desc;\n};\n\n} // namespace igl::vulkan\n\nnamespace igl::vulkan::functions {\n\nvoid initialize(VulkanFunctionTable& table);\nvoid loadInstanceFunctions(VulkanFunctionTable& table,\n                           VkInstance instance,\n                           bool enableExtDebugUtils);\nvoid loadDeviceFunctions(VulkanFunctionTable& table, VkDevice device);\n\n} // namespace igl::vulkan::functions\n\n#endif // IGL_VULKAN_COMMON_H\n"
  },
  {
    "path": "src/igl/vulkan/ComputeCommandEncoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/ComputeCommandEncoder.h>\n\n#include <igl/vulkan/Buffer.h>\n#include <igl/vulkan/ComputePipelineState.h>\n#include <igl/vulkan/SamplerState.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanHelpers.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanTexture.h>\n\nnamespace igl::vulkan {\n\nComputeCommandEncoder::ComputeCommandEncoder(const std::shared_ptr<CommandBuffer>& commandBuffer,\n                                             VulkanContext& ctx) :\n  ctx_(ctx),\n  cmdBuffer_(commandBuffer ? commandBuffer->getVkCommandBuffer() : VK_NULL_HANDLE),\n  binder_(commandBuffer.get(), ctx_, VK_PIPELINE_BIND_POINT_COMPUTE) {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_DEBUG_ASSERT(commandBuffer);\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(&ctx_);\n\n  ctx_.checkAndUpdateDescriptorSets();\n\n  isEncoding_ = true;\n}\n\nvoid ComputeCommandEncoder::endEncoding() {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(&ctx_);\n\n  if (!isEncoding_) {\n    return;\n  }\n\n  isEncoding_ = false;\n\n  for (size_t i = 0; i < numRestoreLayouts_; ++i) {\n    const VulkanImage* img = restoreLayout_[i];\n    if (img->isSampledImage()) {\n      // only sampled images can be transitioned to VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL\n      img->transitionLayout(cmdBuffer_,\n                            VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,\n                            VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,\n                            VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |\n                                VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,\n                            VkImageSubresourceRange{\n                                .aspectMask = restoreLayoutAspectFlags_[i],\n                                .baseMipLevel = 0,\n                                .levelCount = VK_REMAINING_MIP_LEVELS,\n                                .baseArrayLayer = 0,\n                                .layerCount = VK_REMAINING_ARRAY_LAYERS,\n                            });\n    }\n  }\n  numRestoreLayouts_ = 0;\n}\n\nvoid ComputeCommandEncoder::bindComputePipelineState(\n    const std::shared_ptr<IComputePipelineState>& pipelineState) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(pipelineState)) {\n    return;\n  }\n\n  cps_ = static_cast<ComputePipelineState*>(pipelineState.get());\n\n  binder_.bindPipeline(cps_->getVkPipeline(), &cps_->getSpvModuleInfo());\n\n  if (ctx_.config_.enableDescriptorIndexing) {\n    VkDescriptorSet dset = ctx_.getBindlessVkDescriptorSet();\n\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkCmdBindDescriptorSets(COMPUTE) - bindless\\n\", cmdBuffer_);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    ctx_.vf_.vkCmdBindDescriptorSets(cmdBuffer_,\n                                     VK_PIPELINE_BIND_POINT_COMPUTE,\n                                     cps_->getVkPipelineLayout(),\n                                     kBindPoint_Bindless,\n                                     1,\n                                     &dset,\n                                     0,\n                                     nullptr);\n  }\n}\n\nvoid ComputeCommandEncoder::processDependencies(const Dependencies& dependencies) {\n  // 1. Process all textures\n  {\n    const Dependencies* deps = &dependencies;\n\n    while (deps) {\n      for (ITexture* tex : deps->textures) {\n        if (!tex) {\n          break;\n        }\n        igl::vulkan::transitionToGeneral(cmdBuffer_, tex);\n      }\n      deps = deps->next;\n    }\n  }\n\n  // 2. Process all buffers\n  {\n    const Dependencies* deps = &dependencies;\n\n    while (deps) {\n      for (IBuffer* buf : deps->buffers) {\n        if (!buf) {\n          break;\n        }\n        const auto* vkBuf = static_cast<Buffer*>(buf);\n        ivkBufferBarrier(&ctx_.vf_,\n                         cmdBuffer_,\n                         vkBuf->getVkBuffer(),\n                         vkBuf->getBufferUsageFlags(),\n                         VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |\n                             VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |\n                             VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,\n                         VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT);\n      }\n      deps = deps->next;\n    }\n  }\n}\n\nvoid ComputeCommandEncoder::dispatchThreadGroups(const Dimensions& threadgroupCount,\n                                                 const Dimensions& /*threadgroupSize*/,\n                                                 const Dependencies& dependencies) {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(&ctx_);\n\n  if (!cps_) {\n    IGL_DEBUG_ABORT(\"Did you forget to call bindComputePipelineState()?\");\n    return;\n  }\n\n  processDependencies(dependencies);\n\n  binder_.updateBindings(cps_->getVkPipelineLayout(), *cps_);\n  // threadgroupSize is controlled inside compute shaders\n  ctx_.vf_.vkCmdDispatch(\n      cmdBuffer_, threadgroupCount.width, threadgroupCount.height, threadgroupCount.depth);\n}\n\nvoid ComputeCommandEncoder::pushDebugGroupLabel(const char* label, const igl::Color& color) const {\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  ivkCmdBeginDebugUtilsLabel(&ctx_.vf_, cmdBuffer_, label, color.toFloatPtr());\n}\n\nvoid ComputeCommandEncoder::insertDebugEventLabel(const char* label,\n                                                  const igl::Color& color) const {\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  ivkCmdInsertDebugUtilsLabel(&ctx_.vf_, cmdBuffer_, label, color.toFloatPtr());\n}\n\nvoid ComputeCommandEncoder::popDebugGroupLabel() const {\n  ivkCmdEndDebugUtilsLabel(&ctx_.vf_, cmdBuffer_);\n}\n\nvoid ComputeCommandEncoder::bindUniform(const UniformDesc& /*uniformDesc*/, const void* /*data*/) {\n  // DO NOT IMPLEMENT!\n  // This is only for backends that MUST use single uniforms in some situations.\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid ComputeCommandEncoder::bindTexture(uint32_t index, ITexture* texture) {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_DEBUG_ASSERT(texture);\n\n  const igl::vulkan::Texture* tex = static_cast<Texture*>(texture);\n  const igl::vulkan::VulkanTexture& vkTex = tex->getVulkanTexture();\n  const igl::vulkan::VulkanImage* vkImage = &vkTex.image_;\n\n  IGL_DEBUG_ASSERT(vkImage);\n\n  if (vkImage->isStorageImage()) {\n    igl::vulkan::transitionToGeneral(cmdBuffer_, texture);\n  } else if (vkImage->isSampledImage()) {\n    igl::vulkan::transitionToShaderReadOnly(cmdBuffer_, texture);\n  } else {\n    IGL_DEBUG_ASSERT(false, \"A texture should be Sampled or Storage\");\n  }\n\n  IGL_DEBUG_ASSERT(numRestoreLayouts_ < IGL_TEXTURE_SAMPLERS_MAX);\n  restoreLayout_[numRestoreLayouts_] = vkImage;\n  restoreLayoutAspectFlags_[numRestoreLayouts_] = vkTex.imageView_.getVkImageAspectFlags();\n  numRestoreLayouts_++;\n\n  binder_.bindTexture(index, static_cast<Texture*>(texture));\n}\n\nvoid ComputeCommandEncoder::bindImageTexture(uint32_t index,\n                                             ITexture* texture,\n                                             TextureFormat format) {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_DEBUG_ASSERT(texture);\n\n  (void)format;\n\n  auto* tex = static_cast<Texture*>(texture);\n  const VulkanImage* vkImage = tex ? &tex->getVulkanTexture().image_ : nullptr;\n\n  IGL_DEBUG_ASSERT(vkImage);\n\n  if (!vkImage || !vkImage->isStorageImage()) {\n    IGL_DEBUG_ABORT(\"A texture should be Storage\");\n    return;\n  }\n\n  igl::vulkan::transitionToGeneral(cmdBuffer_, texture);\n\n  IGL_DEBUG_ASSERT(numRestoreLayouts_ < IGL_TEXTURE_SAMPLERS_MAX);\n  restoreLayout_[numRestoreLayouts_] = vkImage;\n  restoreLayoutAspectFlags_[numRestoreLayouts_] =\n      tex ? tex->getVulkanTexture().imageView_.getVkImageAspectFlags() : VK_IMAGE_ASPECT_NONE;\n  numRestoreLayouts_++;\n\n  binder_.bindStorageImage(index, tex);\n}\n\nvoid ComputeCommandEncoder::bindSamplerState(uint32_t index, ISamplerState* samplerState) {\n  IGL_PROFILER_FUNCTION();\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"%p  bindSamplerState(%u)\\n\", cmdBuffer_, index);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n\n  binder_.bindSamplerState(index, static_cast<SamplerState*>(samplerState));\n}\n\nvoid ComputeCommandEncoder::bindBuffer(uint32_t index,\n                                       IBuffer* buffer,\n                                       size_t offset,\n                                       size_t bufferSize) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(buffer != nullptr)) {\n    return;\n  }\n\n  auto* buf = static_cast<Buffer*>(buffer);\n\n  const bool isUniformBuffer = (buf->getBufferType() & BufferDesc::BufferTypeBits::Uniform) > 0;\n  const bool isStorageBuffer = (buf->getBufferType() & BufferDesc::BufferTypeBits::Storage) > 0;\n  const bool isUniformOrStorageBuffer = isUniformBuffer || isStorageBuffer;\n\n  if (!IGL_DEBUG_VERIFY(isUniformOrStorageBuffer,\n                        \"Did you forget to specify igl::BufferDesc::BufferTypeBits::Storage or \"\n                        \"BufferDesc::BufferTypeBits::Uniform on your buffer?\")) {\n    return;\n  }\n\n  binder_.bindBuffer(index, buf, offset, bufferSize);\n}\n\nvoid ComputeCommandEncoder::bindBytes(uint32_t /*index*/, const void* /*data*/, size_t /*length*/) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid ComputeCommandEncoder::bindPushConstants(const void* data, size_t length, size_t offset) {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_DEBUG_ASSERT(length % 4 == 0); // VUID-vkCmdPushConstants-size-00369: size must be a multiple\n                                     // of 4\n\n  IGL_DEBUG_ASSERT(cps_, \"Did you forget to call bindComputePipelineState()?\");\n  IGL_DEBUG_ASSERT(cps_->pushConstantRange.size,\n                   \"Currently bound compute pipeline state has no push constants\");\n  IGL_DEBUG_ASSERT(offset + length <= cps_->pushConstantRange.offset + cps_->pushConstantRange.size,\n                   \"Push constants size exceeded\");\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"%p vkCmdPushConstants(%u) - COMPUTE\\n\", cmdBuffer_, length);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n  ctx_.vf_.vkCmdPushConstants(cmdBuffer_,\n                              cps_->getVkPipelineLayout(),\n                              VK_SHADER_STAGE_COMPUTE_BIT,\n                              (uint32_t)offset,\n                              (uint32_t)length,\n                              data);\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/ComputeCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <array>\n#include <igl/Common.h>\n#include <igl/ComputeCommandEncoder.h>\n#include <igl/vulkan/CommandBuffer.h>\n#include <igl/vulkan/ResourcesBinder.h>\n#include <igl/vulkan/util/SpvReflection.h>\n\nnamespace igl {\n\nclass IComputePipelineState;\nclass ISamplerState;\n\nnamespace vulkan {\n\nclass ComputePipelineState;\nclass VulkanImage;\n\n/// @brief Implements the igl::IComputeCommandEncoder interface for Vulkan\nclass ComputeCommandEncoder : public IComputeCommandEncoder {\n public:\n  ComputeCommandEncoder(const std::shared_ptr<CommandBuffer>& commandBuffer, VulkanContext& ctx);\n  ~ComputeCommandEncoder() override {\n    IGL_DEBUG_ASSERT(!isEncoding_); // did you forget to call endEncoding()?\n    endEncoding();\n  }\n  ComputeCommandEncoder(const ComputeCommandEncoder&) = delete;\n  ComputeCommandEncoder& operator=(const ComputeCommandEncoder&) = delete;\n  ComputeCommandEncoder(ComputeCommandEncoder&&) = delete;\n  ComputeCommandEncoder& operator=(ComputeCommandEncoder&&) = delete;\n\n  void bindComputePipelineState(\n      const std::shared_ptr<IComputePipelineState>& pipelineState) override;\n  void dispatchThreadGroups(const Dimensions& threadgroupCount,\n                            const Dimensions& threadgroupSize,\n                            const Dependencies& dependencies) override;\n\n  /// @brief Ends encoding for compute commands and transitions all images bound to this encoder\n  /// back to `VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL`\n  void endEncoding() override;\n\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n  void insertDebugEventLabel(const char* label, const igl::Color& color) const override;\n  void popDebugGroupLabel() const override;\n\n  /// @brief This is only for backends that MUST use single uniforms in some situations. Do not\n  /// implement!\n  void bindUniform(const UniformDesc& uniformDesc, const void* data) override;\n\n  /// @brief Binds a texture and transitions it to `VK_IMAGE_LAYOUT_GENERAL`. If the texture is not\n  /// a storage texture, this function is a no-op\n  void bindTexture(uint32_t index, ITexture* texture) override;\n  /// @brief Binds an image texture and transitions it to `VK_IMAGE_LAYOUT_GENERAL`. If the texture\n  /// is not a storage texture, this function will assert.\n  void bindImageTexture(uint32_t index, ITexture* texture, TextureFormat format) override;\n\n  void bindSamplerState(uint32_t index, ISamplerState* samplerState) override;\n\n  /// @brief Binds a buffer. If the buffer is not a storage buffer, this function is a no-op\n  void bindBuffer(uint32_t index, IBuffer* buffer, size_t offset, size_t bufferSize) override;\n\n  /// @brief Not implemented\n  void bindBytes(uint32_t index, const void* data, size_t length) override;\n\n  /// @brief Binds push constants pointed by `data` with `length` bytes starting at `offset`.\n  /// `length` must be a multiple of 4.\n  void bindPushConstants(const void* data, size_t length, size_t offset) override;\n\n  /// @brief Returns the underlying Vulkan command buffer handle\n  [[nodiscard]] VkCommandBuffer getVkCommandBuffer() const {\n    return cmdBuffer_;\n  }\n\n private:\n  void processDependencies(const Dependencies& dependencies);\n\n private:\n  VulkanContext& ctx_;\n  VkCommandBuffer cmdBuffer_ = VK_NULL_HANDLE;\n  bool isEncoding_ = false;\n\n  ResourcesBinder binder_;\n\n  std::array<const igl::vulkan::VulkanImage*, IGL_TEXTURE_SAMPLERS_MAX> restoreLayout_{};\n  std::array<VkImageAspectFlags, IGL_TEXTURE_SAMPLERS_MAX> restoreLayoutAspectFlags_{};\n  uint32_t numRestoreLayouts_ = 0;\n\n  const igl::vulkan::ComputePipelineState* cps_ = nullptr;\n};\n\n} // namespace vulkan\n} // namespace igl\n"
  },
  {
    "path": "src/igl/vulkan/ComputePipelineState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/ComputePipelineState.h>\n\n#include <utility>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/ShaderModule.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanDescriptorSetLayout.h>\n#include <igl/vulkan/VulkanPipelineBuilder.h>\n\nnamespace igl::vulkan {\n\nComputePipelineState::ComputePipelineState(const igl::vulkan::Device& device,\n                                           ComputePipelineDesc desc) :\n  PipelineState(device.getVulkanContext(),\n                desc.shaderStages.get(),\n                nullptr,\n                0,\n                desc.debugName.c_str()),\n  device_(device),\n  desc_(std::move(desc)) {}\n\nComputePipelineState ::~ComputePipelineState() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n\n  if (pipeline_ != VK_NULL_HANDLE) {\n    const auto& ctx = device_.getVulkanContext();\n    ctx.deferredTask(std::packaged_task<void()>(\n        [vf = &ctx.vf_, device = device_.getVulkanContext().getVkDevice(), pipeline = pipeline_]() {\n          vf->vkDestroyPipeline(device, pipeline, nullptr);\n        }));\n  }\n  if (pipelineLayout != VK_NULL_HANDLE) {\n    const auto& ctx = device_.getVulkanContext();\n    ctx.deferredTask(std::packaged_task<void()>(\n        [vf = &ctx.vf_, device = ctx.getVkDevice(), layout = pipelineLayout]() {\n          vf->vkDestroyPipelineLayout(device, layout, nullptr);\n        }));\n  }\n}\n\nVkPipeline ComputePipelineState::getVkPipeline() const {\n  const VulkanContext& ctx = device_.getVulkanContext();\n\n  if (ctx.config_.enableDescriptorIndexing) {\n    // the bindless descriptor set layout can be changed in VulkanContext when the number of\n    // existing textures increases\n    if (lastBindlessVkDescriptorSetLayout != ctx.getBindlessVkDescriptorSetLayout()) {\n      // there's a new descriptor set layout - drop the previous Vulkan pipeline\n      VkDevice device = ctx.getVkDevice();\n      if (pipeline_ != VK_NULL_HANDLE) {\n        ctx.deferredTask(std::packaged_task<void()>(\n            [vf = &ctx.vf_, device, pipeline = pipeline_, layout = pipelineLayout]() {\n              vf->vkDestroyPipeline(device, pipeline, nullptr);\n              vf->vkDestroyPipelineLayout(device, layout, nullptr);\n            }));\n      }\n      pipeline_ = VK_NULL_HANDLE;\n      pipelineLayout = VK_NULL_HANDLE;\n      lastBindlessVkDescriptorSetLayout = ctx.getBindlessVkDescriptorSetLayout();\n    }\n  }\n\n  if (pipeline_ != VK_NULL_HANDLE) {\n    return pipeline_;\n  }\n\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  // NOLINTBEGIN(readability-identifier-naming)\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  const VkDescriptorSetLayout DSLs[] = {\n      dslCombinedImageSamplers->getVkDescriptorSetLayout(),\n      dslBuffers->getVkDescriptorSetLayout(),\n      dslStorageImages->getVkDescriptorSetLayout(),\n      ctx.getBindlessVkDescriptorSetLayout(),\n  };\n  // NOLINTEND(readability-identifier-naming)\n\n  const VkPipelineLayoutCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,\n      .setLayoutCount = static_cast<uint32_t>(ctx.config_.enableDescriptorIndexing\n                                                  ? IGL_ARRAY_NUM_ELEMENTS(DSLs)\n                                                  : IGL_ARRAY_NUM_ELEMENTS(DSLs) - 1u),\n      .pSetLayouts = DSLs,\n      .pushConstantRangeCount = info.hasPushConstants ? 1u : 0u,\n      .pPushConstantRanges = info.hasPushConstants ? &pushConstantRange : nullptr,\n  };\n\n  VkDevice device = ctx.getVkDevice();\n  VK_ASSERT(ctx.vf_.vkCreatePipelineLayout(device, &ci, nullptr, &pipelineLayout));\n  VK_ASSERT(\n      ivkSetDebugObjectName(&ctx.vf_,\n                            device,\n                            VK_OBJECT_TYPE_PIPELINE_LAYOUT,\n                            (uint64_t)pipelineLayout,\n                            IGL_FORMAT(\"Pipeline Layout: {}\", desc_.debugName.c_str()).c_str()));\n\n  const auto& shaderModule = desc_.shaderStages->getComputeModule();\n\n  VulkanComputePipelineBuilder()\n      .shaderStage(VkPipelineShaderStageCreateInfo{\n          .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,\n          .stage = VK_SHADER_STAGE_COMPUTE_BIT,\n          .module = igl::vulkan::ShaderModule::getVkShaderModule(shaderModule),\n          .pName = shaderModule->info().entryPoint.c_str(),\n      })\n      .build(\n          ctx.vf_, device, ctx.pipelineCache_, pipelineLayout, &pipeline_, desc_.debugName.c_str());\n\n  return pipeline_;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/ComputePipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/ComputePipelineState.h>\n#include <igl/vulkan/PipelineState.h>\n#include <igl/vulkan/VulkanFunctionTable.h>\n\nnamespace igl::vulkan {\n\nclass Device;\n\nclass ComputePipelineState final : public IComputePipelineState, public PipelineState {\n public:\n  ComputePipelineState(const igl::vulkan::Device& device, ComputePipelineDesc desc);\n  ~ComputePipelineState() override;\n  ComputePipelineState(const ComputePipelineState&) = delete;\n  ComputePipelineState& operator=(const ComputePipelineState&) = delete;\n  ComputePipelineState(ComputePipelineState&&) = delete;\n  ComputePipelineState& operator=(ComputePipelineState&&) = delete;\n  std::shared_ptr<IComputePipelineReflection> computePipelineReflection() override {\n    return nullptr;\n  }\n\n  VkPipeline getVkPipeline() const;\n\n  const ComputePipelineDesc& getComputePipelineDesc() const {\n    return desc_;\n  }\n\n private:\n  const igl::vulkan::Device& device_;\n  ComputePipelineDesc desc_;\n\n  // a Vulkan pipeline owned by this ComputePipelineState object\n  mutable VkPipeline pipeline_ = VK_NULL_HANDLE;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/Device.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/Device.h>\n\n#include <cstring>\n#include <igl/FramebufferWrapper.h>\n#include <igl/glslang/GlslCompiler.h>\n#include <igl/glslang/GlslangHelpers.h>\n#include <igl/vulkan/Buffer.h>\n#include <igl/vulkan/CommandQueue.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/ComputePipelineState.h>\n#include <igl/vulkan/Framebuffer.h>\n#include <igl/vulkan/PlatformDevice.h>\n#include <igl/vulkan/RenderPipelineState.h>\n#include <igl/vulkan/SamplerState.h>\n#include <igl/vulkan/ShaderModule.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanBuffer.h>\n#include <igl/vulkan/VulkanShaderModule.h>\n\n// Writes the shader code to disk for debugging. Used in `Device::createShaderModule()`\n#if IGL_SHADER_DUMP && IGL_DEBUG\n#include <filesystem>\n#include <fstream>\n#endif // IGL_SHADER_DUMP && IGL_DEBUG\n\nnamespace {\n\n#if IGL_SHADER_DUMP && IGL_DEBUG\nstd::string sanitizeFileName(const std::string& fileName) {\n  std::string result;\n  for (const char c : fileName) {\n    if (std::isalnum(c) || c == '.' || c == '_' || c == '-') {\n      result += c;\n    } else {\n      result += '_';\n    }\n  }\n  return result;\n}\n#endif // IGL_SHADER_DUMP && IGL_DEBUG\n\nbool supportsFormat(const VulkanFunctionTable& vf,\n                    VkPhysicalDevice physicalDevice,\n                    VkFormat format) {\n  VkFormatProperties properties;\n  vf.vkGetPhysicalDeviceFormatProperties(physicalDevice, format, &properties);\n  return properties.bufferFeatures != 0 || properties.linearTilingFeatures != 0 ||\n         properties.optimalTilingFeatures != 0;\n}\n\nVkShaderStageFlagBits shaderStageToVkShaderStage(igl::ShaderStage stage) {\n  switch (stage) {\n  case igl::ShaderStage::Vertex:\n    return VK_SHADER_STAGE_VERTEX_BIT;\n  case igl::ShaderStage::Fragment:\n    return VK_SHADER_STAGE_FRAGMENT_BIT;\n  case igl::ShaderStage::Compute:\n    return VK_SHADER_STAGE_COMPUTE_BIT;\n  case igl::ShaderStage::Task:\n    return VK_SHADER_STAGE_TASK_BIT_EXT;\n  case igl::ShaderStage::Mesh:\n    return VK_SHADER_STAGE_MESH_BIT_EXT;\n  };\n  return VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM;\n}\n\n} // namespace\n\nnamespace igl::vulkan {\n\nDevice::Device(std::unique_ptr<VulkanContext> ctx) : ctx_(std::move(ctx)), platformDevice_(*this) {}\n\nstd::shared_ptr<ICommandQueue> Device::createCommandQueueInternal(const CommandQueueDesc& desc,\n                                                                  Result* IGL_NULLABLE outResult) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  Result::setOk(outResult);\n  auto resource = std::make_shared<CommandQueue>(*this, desc);\n  return resource;\n}\n\nstd::unique_ptr<IBuffer> Device::createBufferInternal( // NOLINT(bugprone-exception-escape)\n    const BufferDesc& desc,\n    Result* IGL_NULLABLE outResult) const noexcept {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  auto buffer = std::make_unique<Buffer>(*this);\n\n  const auto result = buffer->create(desc);\n\n  if (!IGL_DEBUG_VERIFY(result.isOk())) {\n    return nullptr;\n  }\n\n  if (!desc.data) {\n    return buffer;\n  }\n\n  const auto uploadResult = buffer->upload(desc.data, BufferRange(desc.length, 0u));\n  IGL_DEBUG_ASSERT(uploadResult.isOk());\n  Result::setResult(outResult, uploadResult);\n\n  if (hasResourceTracker()) {\n    buffer->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n\n  return buffer;\n}\n\nstd::shared_ptr<IDepthStencilState> Device::createDepthStencilStateInternal(\n    const DepthStencilStateDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  Result::setOk(outResult);\n  return std::make_shared<DepthStencilState>(desc);\n}\n\nstd::unique_ptr<IShaderStages> Device::createShaderStagesInternal(const ShaderStagesDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  auto shaderStages = std::make_unique<ShaderStages>(desc);\n  if (shaderStages == nullptr) {\n    Result::setResult(\n        outResult, Result::Code::RuntimeError, \"Could not instantiate shader stages.\");\n  } else if (!shaderStages->isValid()) {\n    Result::setResult(\n        outResult, Result::Code::ArgumentInvalid, \"Missing required shader module(s).\");\n  } else {\n    Result::setOk(outResult);\n  }\n\n  if (hasResourceTracker()) {\n    shaderStages->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n\n  return shaderStages;\n}\n\nstd::shared_ptr<ISamplerState> Device::createSamplerStateInternal(const SamplerStateDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  auto samplerState = std::make_shared<SamplerState>(const_cast<Device&>(*this));\n\n  Result::setResult(outResult, samplerState->create(desc));\n\n  if (hasResourceTracker()) {\n    samplerState->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n\n  return samplerState;\n}\n\nstd::shared_ptr<ITexture> Device::createTextureInternal( // NOLINT(bugprone-exception-escape)\n    const TextureDesc& desc,\n    Result* IGL_NULLABLE outResult) const noexcept {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  const auto sanitized = sanitize(desc);\n\n  auto texture = std::make_shared<Texture>(const_cast<Device&>(*this), desc.format);\n\n  const Result res = texture->create(sanitized);\n\n  if (hasResourceTracker()) {\n    texture->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n\n  Result::setResult(outResult, res);\n\n  return res.isOk() ? texture : nullptr;\n}\n\nstd::shared_ptr<ITexture> Device::createTextureView( // NOLINT(bugprone-exception-escape)\n    std::shared_ptr<ITexture> texture,\n    const TextureViewDesc& desc,\n    Result* IGL_NULLABLE outResult) const noexcept {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  if (!IGL_DEBUG_VERIFY(texture)) {\n    Result::setResult(outResult,\n                      Result(Result::Code::ArgumentInvalid, \"A base texture should be specified\"));\n    return {};\n  }\n\n  const Texture& baseTexture = static_cast<Texture&>(*texture);\n\n  auto newTexture = std::make_shared<Texture>(\n      const_cast<Device&>(*this),\n      desc.format == TextureFormat::Invalid ? baseTexture.getFormat() : desc.format);\n\n  const Result res = newTexture->createView(baseTexture, desc);\n\n  if (hasResourceTracker()) {\n    newTexture->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n\n  Result::setResult(outResult, res);\n\n  return res.isOk() ? newTexture : nullptr;\n}\n\nstd::shared_ptr<IVertexInputState> Device::createVertexInputStateInternal(\n    const VertexInputStateDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  // VertexInputState is compiled into the RenderPipelineState at a later stage. For now, we just\n  // have to store the description.\n  Result::setOk(outResult);\n\n  return std::make_shared<VertexInputState>(desc);\n}\n\nstd::shared_ptr<IComputePipelineState> Device::createComputePipelineInternal(\n    const ComputePipelineDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  if (IGL_DEBUG_VERIFY_NOT(desc.shaderStages == nullptr)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Missing shader stages\");\n    return nullptr;\n  }\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages->getType() == ShaderStagesType::Compute)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Shader stages not for compute\");\n    return nullptr;\n  }\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages->getComputeModule())) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Missing compute shader\");\n    return nullptr;\n  }\n\n  Result::setOk(outResult);\n  return std::make_shared<ComputePipelineState>(*this, desc);\n}\n\nstd::shared_ptr<IRenderPipelineState> Device::createRenderPipelineInternal(\n    const RenderPipelineDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  if (IGL_DEBUG_VERIFY_NOT(desc.shaderStages == nullptr)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Missing shader stages\");\n    return nullptr;\n  }\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages->getType() == ShaderStagesType::Render ||\n                        desc.shaderStages->getType() == ShaderStagesType::RenderMeshShader)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Shader stages not for render\");\n    return nullptr;\n  }\n\n  const bool hasColorAttachments = !desc.targetDesc.colorAttachments.empty();\n  const bool hasDepthAttachment = desc.targetDesc.depthAttachmentFormat != TextureFormat::Invalid;\n  const bool hasAnyAttachments = hasColorAttachments || hasDepthAttachment;\n  if (!IGL_DEBUG_VERIFY(hasAnyAttachments)) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Need at least one attachment\");\n    return nullptr;\n  }\n\n  if (desc.shaderStages->getType() == ShaderStagesType::Render &&\n      !IGL_DEBUG_VERIFY(desc.shaderStages->getVertexModule())) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Missing vertex shader\");\n    return nullptr;\n  }\n\n  if (desc.shaderStages->getType() == ShaderStagesType::RenderMeshShader &&\n      !IGL_DEBUG_VERIFY(desc.shaderStages->getMeshModule())) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Missing mesh shader\");\n    return nullptr;\n  }\n\n  if (!IGL_DEBUG_VERIFY(desc.shaderStages->getFragmentModule())) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid, \"Missing fragment shader\");\n    return nullptr;\n  }\n\n  return std::make_shared<RenderPipelineState>(*this, desc);\n}\n\nstd::shared_ptr<IShaderModule> Device::createShaderModuleInternal(const ShaderModuleDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  std::shared_ptr<VulkanShaderModule> vulkanShaderModule;\n  Result result;\n  if (desc.input.type == ShaderInputType::Binary) {\n    vulkanShaderModule =\n        createShaderModule(desc.input.data, desc.input.length, desc.debugName, &result);\n  } else {\n    vulkanShaderModule =\n        createShaderModule(desc.info.stage, desc.input.source, desc.debugName, &result);\n  }\n\n  if (!result.isOk()) {\n    Result::setResult(outResult, std::move(result));\n    return nullptr;\n  }\n  Result::setResult(outResult, std::move(result));\n  auto shaderModule = std::make_shared<ShaderModule>(desc.info, std::move(vulkanShaderModule));\n\n  if (hasResourceTracker()) {\n    shaderModule->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n\n  return shaderModule;\n}\n\nstd::shared_ptr<VulkanShaderModule> Device::createShaderModule(const void* IGL_NULLABLE data,\n                                                               size_t length,\n                                                               const std::string& debugName,\n                                                               Result* IGL_NULLABLE\n                                                                   outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n#if IGL_SHADER_DUMP && IGL_DEBUG\n  uint64_t hash = 0;\n  IGL_DEBUG_ASSERT(length % sizeof(uint32_t) == 0);\n  auto words = reinterpret_cast<const uint32_t*>(data);\n  for (int i = 0; i < (length / sizeof(uint32_t)); i++) {\n    hash ^= std::hash<uint32_t>()(words[i]);\n  }\n  const std::string filename = IGL_FORMAT(\n      \"{}{}{}.spv\", IGL_SHADER_DUMP_PATH, sanitizeFileName(debugName), std::to_string(hash));\n  IGL_LOG_INFO(\"Dumping shader to: %s\", filename.c_str());\n  if (!std::filesystem::exists(filename)) {\n    std::ofstream spirvFile;\n    spirvFile.open(filename, std::ios::out | std::ios::binary);\n    for (int i = 0; i < length / (int)sizeof(uint32_t); i++) {\n      spirvFile.write(reinterpret_cast<const char*>(&words[i]), sizeof(uint32_t));\n    }\n    spirvFile.close();\n  }\n#endif // IGL_SHADER_DUMP && IGL_DEBUG\n\n  VkShaderModule vkShaderModule = VK_NULL_HANDLE;\n  const VkShaderModuleCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,\n      .codeSize = length,\n      .pCode = static_cast<const uint32_t*>(data),\n  };\n  const VkResult result =\n      ctx_->vf_.vkCreateShaderModule(ctx_->getVkDevice(), &ci, nullptr, &vkShaderModule);\n\n  setResultFrom(outResult, result);\n\n  if (result != VK_SUCCESS) {\n    return nullptr;\n  }\n\n  if (!debugName.empty()) {\n    // set debug name\n    VK_ASSERT(ivkSetDebugObjectName(&ctx_->vf_,\n                                    ctx_->getVkDevice(),\n                                    VK_OBJECT_TYPE_SHADER_MODULE,\n                                    (uint64_t)vkShaderModule,\n                                    debugName.c_str()));\n  }\n\n  IGL_DEBUG_ASSERT(vkShaderModule != VK_NULL_HANDLE);\n  return std::make_shared<VulkanShaderModule>(\n      ctx_->vf_,\n      ctx_->getVkDevice(),\n      vkShaderModule,\n      util::getReflectionData(reinterpret_cast<const uint32_t*>(data), length));\n}\n\nstd::shared_ptr<VulkanShaderModule> Device::createShaderModule(ShaderStage stage,\n                                                               const char* IGL_NULLABLE source,\n                                                               const std::string& debugName,\n                                                               Result* IGL_NULLABLE\n                                                                   outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  const VkShaderStageFlagBits vkStage = shaderStageToVkShaderStage(stage);\n  IGL_DEBUG_ASSERT(vkStage != VK_SHADER_STAGE_FLAG_BITS_MAX_ENUM);\n  IGL_DEBUG_ASSERT(source);\n\n  std::string sourcePatched;\n\n  if (!source || !*source) {\n    Result::setResult(outResult, Result::Code::ArgumentNull, \"Shader source is empty\");\n    return nullptr;\n  }\n\n  if (strstr(source, \"#version \") == nullptr) {\n    std::string extraExtensions = ctx_->config_.enableDescriptorIndexing\n                                      ? \"#extension GL_EXT_nonuniform_qualifier : require\\n\"\n                                      : \"\";\n\n    // GL_EXT_debug_printf extension\n    if (ctx_->features_.has_VK_KHR_shader_non_semantic_info) {\n      extraExtensions += \"#extension GL_EXT_debug_printf : enable\\n\";\n    }\n\n    if (ctx_->features_.featuresShaderFloat16Int8.shaderFloat16 == VK_TRUE) {\n      extraExtensions += \"#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require\\n\";\n    }\n\n    if (ctx_->features_.has_VK_KHR_buffer_device_address) {\n      extraExtensions += \"#extension GL_EXT_buffer_reference : require\\n\";\n      extraExtensions += \"#extension GL_EXT_buffer_reference_uvec2 : require\\n\";\n    }\n\n    const std::string bindlessTexturesSource = ctx_->config_.enableDescriptorIndexing ?\n                                                                                      R\"(\n      // everything - indexed by global texture/sampler id\n      layout (set = 3, binding = 0) uniform texture2D kTextures2D[];\n      layout (set = 3, binding = 1) uniform texture2DArray kTextures2DArray[];\n      layout (set = 3, binding = 2) uniform texture3D kTextures3D[];\n      layout (set = 3, binding = 3) uniform textureCube kTexturesCube[];\n      layout (set = 3, binding = 4) uniform sampler kSamplers[];\n      layout (set = 3, binding = 5) uniform samplerShadow kSamplersShadow[];\n      // binding #6 is reserved for STORAGE_IMAGEs: check VulkanContext.cpp\n      )\"\n                                                                                      : \"\";\n\n    // there's no header provided in the shader source, let's insert our own header\n    if (vkStage == VK_SHADER_STAGE_VERTEX_BIT || vkStage == VK_SHADER_STAGE_COMPUTE_BIT) {\n      sourcePatched += R\"(\n      #version 460\n      )\" + extraExtensions;\n    }\n    if (vkStage == VK_SHADER_STAGE_FRAGMENT_BIT) {\n      sourcePatched += R\"(\n      #version 460\n      )\" + extraExtensions +\n                       bindlessTexturesSource;\n    }\n    sourcePatched += source;\n    source = sourcePatched.c_str();\n  }\n\n  glslang_resource_t glslangResource = {};\n  glslangGetDefaultResource(&glslangResource);\n  ivkUpdateGlslangResource(&glslangResource,\n                           &ctx_->getVkPhysicalDeviceProperties(),\n                           &ctx_->getvkPhysicalDeviceMeshShaderPropertiesEXT());\n\n  std::vector<uint32_t> spirv;\n  const Result result = glslang::compileShader(stage, source, spirv, &glslangResource);\n\n  VkShaderModule vkShaderModule = VK_NULL_HANDLE;\n  const VkShaderModuleCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO,\n      .codeSize = spirv.size() * sizeof(uint32_t),\n      .pCode = spirv.data(),\n  };\n  VK_ASSERT(ctx_->vf_.vkCreateShaderModule(ctx_->getVkDevice(), &ci, nullptr, &vkShaderModule));\n\n  Result::setResult(outResult, result);\n\n  if (!result.isOk()) {\n    return nullptr;\n  }\n  IGL_DEBUG_ASSERT(vkShaderModule != VK_NULL_HANDLE);\n\n  if (!debugName.empty()) {\n    // set debug name\n    VK_ASSERT(ivkSetDebugObjectName(&ctx_->vf_,\n                                    ctx_->getVkDevice(),\n                                    VK_OBJECT_TYPE_SHADER_MODULE,\n                                    (uint64_t)vkShaderModule,\n                                    debugName.c_str()));\n  }\n\n  return std::make_shared<VulkanShaderModule>(\n      ctx_->vf_,\n      ctx_->getVkDevice(),\n      vkShaderModule,\n      util::getReflectionData(spirv.data(), spirv.size() * sizeof(uint32_t)));\n}\n\nstd::shared_ptr<IFramebuffer> Device::createFramebufferInternal(const FramebufferDesc& desc,\n                                                                Result* IGL_NULLABLE outResult) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  auto resource = std::make_shared<Framebuffer>(*this, desc);\n  Result::setOk(outResult);\n\n  if (hasResourceTracker()) {\n    resource->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n\n  return resource;\n}\n\nbase::IFramebufferInterop* IGL_NULLABLE\nDevice::createFramebufferInterop(const base::FramebufferInteropDesc& desc) {\n  auto framebuffer = createFramebufferFromBaseDesc(desc);\n  if (!framebuffer) {\n    return nullptr;\n  }\n  return new (std::nothrow) FramebufferWrapper(std::move(framebuffer));\n}\n\nconst PlatformDevice& Device::getPlatformDeviceInternal() const noexcept {\n  return platformDevice_;\n}\n\nsize_t Device::getCurrentDrawCountInternal() const {\n  return ctx_->drawCallCount_;\n}\n\nsize_t Device::getShaderCompilationCountInternal() const {\n  return ctx_->shaderCompilationCount_;\n}\n\nstd::unique_ptr<IShaderLibrary> Device::createShaderLibraryInternal(const ShaderLibraryDesc& desc,\n                                                                    Result* IGL_NULLABLE\n                                                                        outResult) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  ctx_->shaderCompilationCount_++;\n\n  if (IGL_DEBUG_VERIFY_NOT(desc.moduleInfo.empty())) {\n    Result::setResult(outResult, Result::Code::ArgumentInvalid);\n    return nullptr;\n  }\n  Result result;\n  std::shared_ptr<VulkanShaderModule> vulkanShaderModule;\n  if (desc.input.type == ShaderInputType::Binary) {\n    vulkanShaderModule =\n        createShaderModule(desc.input.data, desc.input.length, desc.debugName, &result);\n  } else {\n    if (desc.moduleInfo.size() > 1) {\n      IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n      Result::setResult(outResult, Result::Code::Unsupported);\n      return nullptr;\n    }\n    vulkanShaderModule = createShaderModule(\n        desc.moduleInfo.front().stage, desc.input.source, desc.debugName, &result);\n  }\n\n  if (!result.isOk()) {\n    Result::setResult(outResult, std::move(result));\n    return nullptr;\n  }\n\n  std::vector<std::shared_ptr<IShaderModule>> modules;\n  modules.reserve(desc.moduleInfo.size());\n  for (const auto& info : desc.moduleInfo) {\n    modules.emplace_back(std::make_shared<ShaderModule>(info, vulkanShaderModule));\n  }\n\n  Result::setResult(outResult, std::move(result));\n  auto shaderLibrary = std::make_unique<ShaderLibrary>(std::move(modules));\n\n  if (hasResourceTracker()) {\n    shaderLibrary->initResourceTracker(getResourceTracker(), desc.debugName);\n  }\n\n  return shaderLibrary;\n}\n\nbool Device::hasFeatureInternal(DeviceFeatures feature) const {\n  IGL_PROFILER_FUNCTION();\n\n  VkPhysicalDevice physicalDevice = ctx_->vkPhysicalDevice_;\n  IGL_DEBUG_ASSERT(physicalDevice != VK_NULL_HANDLE);\n  const VkPhysicalDeviceProperties& deviceProperties = ctx_->getVkPhysicalDeviceProperties();\n\n  switch (feature) {\n  case DeviceFeatures::MultiSample:\n  case DeviceFeatures::MultiSampleResolve:\n    return deviceProperties.limits.framebufferColorSampleCounts > VK_SAMPLE_COUNT_1_BIT;\n  case DeviceFeatures::TextureFilterAnisotropic:\n    return deviceProperties.limits.maxSamplerAnisotropy > 1;\n  case DeviceFeatures::MapBufferRange:\n    return true;\n  case DeviceFeatures::MeshShaders:\n    return ctx_->features_.has_VK_EXT_mesh_shader;\n  case DeviceFeatures::MultipleRenderTargets:\n    return deviceProperties.limits.maxColorAttachments > 1;\n  case DeviceFeatures::StandardDerivative:\n    return true;\n  case DeviceFeatures::StandardDerivativeExt:\n    return false;\n  case DeviceFeatures::TextureFormatRG:\n    return supportsFormat(ctx_->vf_, physicalDevice, VK_FORMAT_R8G8_UNORM);\n  case DeviceFeatures::TextureFormatRGB:\n    return supportsFormat(ctx_->vf_, physicalDevice, VK_FORMAT_R8G8B8_SRGB);\n  case DeviceFeatures::ReadWriteFramebuffer:\n    return true;\n  case DeviceFeatures::TextureNotPot:\n    return true;\n  case DeviceFeatures::UniformBlocks:\n    return true;\n  case DeviceFeatures::TextureHalfFloat:\n    return supportsFormat(ctx_->vf_, physicalDevice, VK_FORMAT_R16G16B16A16_SFLOAT) ||\n           supportsFormat(ctx_->vf_, physicalDevice, VK_FORMAT_R16_SFLOAT);\n  case DeviceFeatures::TextureFloat:\n    return supportsFormat(ctx_->vf_, physicalDevice, VK_FORMAT_R32G32B32A32_SFLOAT) ||\n           supportsFormat(ctx_->vf_, physicalDevice, VK_FORMAT_R32_SFLOAT);\n  case DeviceFeatures::Texture2DArray:\n  case DeviceFeatures::Texture3D:\n    return true;\n  case DeviceFeatures::StorageBuffers:\n    return true;\n  case DeviceFeatures::ShaderTextureLod:\n    return true;\n  case DeviceFeatures::ShaderTextureLodExt:\n    return false;\n  case DeviceFeatures::DepthShaderRead:\n    return true;\n  case DeviceFeatures::DepthCompare:\n    return true;\n  case DeviceFeatures::MinMaxBlend:\n    return true;\n  case DeviceFeatures::TextureExternalImage:\n    return false;\n  case DeviceFeatures::Compute:\n    return true;\n  case DeviceFeatures::CopyBuffer:\n    return true;\n  case DeviceFeatures::ExplicitBinding:\n    return true;\n  case DeviceFeatures::ExplicitBindingExt:\n    return false;\n  case DeviceFeatures::ExternalMemoryObjects:\n    return true;\n  case DeviceFeatures::TextureBindless:\n    return ctx_->vkPhysicalDeviceDescriptorIndexingProperties_\n               .shaderSampledImageArrayNonUniformIndexingNative == VK_TRUE;\n  case DeviceFeatures::PushConstants:\n    return true;\n  case DeviceFeatures::BufferDeviceAddress:\n    return true;\n  case DeviceFeatures::Multiview:\n    return ctx_->features().featuresMultiview.multiview == VK_TRUE;\n  case DeviceFeatures::MultiViewMultisample:\n    return ctx_->features().featuresMultiview.multiview == VK_TRUE &&\n           deviceProperties.limits.framebufferColorSampleCounts > VK_SAMPLE_COUNT_1_BIT;\n  case DeviceFeatures::BindUniform:\n    return false;\n  case DeviceFeatures::TexturePartialMipChain:\n    return true;\n  case DeviceFeatures::BufferRing:\n    return false;\n  case DeviceFeatures::BufferNoCopy:\n    return false;\n  case DeviceFeatures::ShaderLibrary:\n    return true;\n  case DeviceFeatures::BindBytes:\n    return false;\n  case DeviceFeatures::TextureArrayExt:\n    return false;\n  case DeviceFeatures::SRGB:\n    return true;\n  case DeviceFeatures::SRGBSwapchain:\n    return true;\n  // on Metal and Vulkan, the framebuffer pixel format dictates sRGB control.\n  case DeviceFeatures::SRGBWriteControl:\n    return false;\n  case DeviceFeatures::SamplerMinMaxLod:\n    return true;\n  case DeviceFeatures::DrawFirstIndexFirstVertex:\n    return true;\n  case DeviceFeatures::DrawIndexedIndirect:\n    return true;\n  case DeviceFeatures::DrawInstanced:\n    return true;\n  case DeviceFeatures::Indices8Bit:\n    return ctx_->features_.has_VK_EXT_index_type_uint8;\n  case DeviceFeatures::ValidationLayersEnabled:\n    return ctx_->areValidationLayersEnabled();\n  case DeviceFeatures::TextureViews:\n    return true;\n  case DeviceFeatures::Timers:\n    return false;\n  case DeviceFeatures::TimestampQueries:\n    return false;\n  }\n\n  IGL_DEBUG_ABORT(\"DeviceFeatures value not handled: %d\", (int)feature);\n\n  return false;\n}\n\nbool Device::hasRequirementInternal(DeviceRequirement requirement) const {\n  IGL_PROFILER_FUNCTION();\n\n  switch (requirement) {\n  case DeviceRequirement::ExplicitBindingExtReq:\n  case DeviceRequirement::StandardDerivativeExtReq:\n  case DeviceRequirement::TextureArrayExtReq:\n  case DeviceRequirement::TextureFormatRGExtReq:\n  case DeviceRequirement::ShaderTextureLodExtReq:\n    return false;\n  };\n\n  assert(false);\n\n  return false;\n}\n\nbool Device::getFeatureLimitsInternal(DeviceFeatureLimits featureLimits, size_t& result) const {\n  IGL_PROFILER_FUNCTION();\n\n  const VkPhysicalDeviceLimits& limits = ctx_->getVkPhysicalDeviceProperties().limits;\n\n  switch (featureLimits) {\n  case DeviceFeatureLimits::MaxTextureDimension1D2D:\n    result = std::min(limits.maxImageDimension1D, limits.maxImageDimension2D);\n    return true;\n  case DeviceFeatureLimits::MaxCubeMapDimension:\n    result = limits.maxImageDimensionCube;\n    return true;\n  case DeviceFeatureLimits::MaxStorageBufferBytes:\n    result = limits.maxStorageBufferRange;\n    return true;\n  case DeviceFeatureLimits::MaxVertexUniformVectors:\n  case DeviceFeatureLimits::MaxFragmentUniformVectors:\n  case DeviceFeatureLimits::MaxUniformBufferBytes:\n    result = limits.maxUniformBufferRange;\n    return true;\n  case DeviceFeatureLimits::MaxPushConstantBytes:\n    result = limits.maxPushConstantsSize;\n    return true;\n  case DeviceFeatureLimits::MaxMultisampleCount: {\n    const VkSampleCountFlags sampleCounts = limits.framebufferColorSampleCounts;\n    if ((sampleCounts & VK_SAMPLE_COUNT_64_BIT) != 0) {\n      result = 64;\n    } else if ((sampleCounts & VK_SAMPLE_COUNT_32_BIT) != 0) {\n      result = 32;\n    } else if ((sampleCounts & VK_SAMPLE_COUNT_16_BIT) != 0) {\n      result = 16;\n    } else if ((sampleCounts & VK_SAMPLE_COUNT_8_BIT) != 0) {\n      result = 8;\n    } else if ((sampleCounts & VK_SAMPLE_COUNT_4_BIT) != 0) {\n      result = 4;\n    } else if ((sampleCounts & VK_SAMPLE_COUNT_2_BIT) != 0) {\n      result = 2;\n    } else {\n      result = 1;\n    }\n    return true;\n  }\n  case DeviceFeatureLimits::PushConstantsAlignment:\n    result = 4;\n    return true;\n  case DeviceFeatureLimits::ShaderStorageBufferOffsetAlignment:\n    result = limits.minStorageBufferOffsetAlignment;\n    return true;\n  case DeviceFeatureLimits::BufferAlignment:\n    result = limits.minUniformBufferOffsetAlignment;\n    return true;\n  case DeviceFeatureLimits::BufferNoCopyAlignment:\n    result = 0;\n    return true;\n  case DeviceFeatureLimits::MaxBindBytesBytes:\n    result = 0;\n    return true;\n  case DeviceFeatureLimits::MaxTextureDimension3D:\n    result = limits.maxImageDimension3D;\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeX:\n    result = limits.maxComputeWorkGroupSize[0];\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeY:\n    result = limits.maxComputeWorkGroupSize[1];\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupSizeZ:\n    result = limits.maxComputeWorkGroupSize[2];\n    return true;\n  case DeviceFeatureLimits::MaxComputeWorkGroupInvocations:\n    result = limits.maxComputeWorkGroupInvocations;\n    return true;\n  case DeviceFeatureLimits::MaxVertexInputAttributes:\n    result = limits.maxVertexInputAttributes;\n    return true;\n  case DeviceFeatureLimits::MaxColorAttachments:\n    result = limits.maxColorAttachments;\n    return true;\n  // D3D12-specific descriptor heap limits - not applicable to Vulkan\n  case DeviceFeatureLimits::MaxDescriptorHeapCbvSrvUav:\n  case DeviceFeatureLimits::MaxDescriptorHeapSamplers:\n  case DeviceFeatureLimits::MaxDescriptorHeapRtvs:\n  case DeviceFeatureLimits::MaxDescriptorHeapDsvs:\n    result = 0;\n    return false;\n  }\n\n  IGL_DEBUG_ABORT(\"DeviceFeatureLimits value not handled: %d\", (int)featureLimits);\n  result = 0;\n  return false;\n}\n\nICapabilities::TextureFormatCapabilities Device::getTextureFormatCapabilitiesInternal(\n    TextureFormat format) const {\n  IGL_PROFILER_FUNCTION();\n\n  const VkFormat vkFormat = igl::vulkan::textureFormatToVkFormat(format);\n\n  if (vkFormat == VK_FORMAT_UNDEFINED) {\n    return TextureFormatCapabilityBits::Unsupported;\n  }\n\n  if (vkFormat == VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG ||\n      vkFormat == VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG ||\n      vkFormat == VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG ||\n      vkFormat == VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG ||\n      vkFormat == VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG ||\n      vkFormat == VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG ||\n      vkFormat == VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG ||\n      vkFormat == VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG) {\n    // Deprecated without replacement\n    // https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_IMG_format_pvrtc.html\n    return TextureFormatCapabilityBits::Unsupported;\n  }\n\n  VkFormatProperties properties;\n  ctx_->vf_.vkGetPhysicalDeviceFormatProperties(ctx_->vkPhysicalDevice_, vkFormat, &properties);\n\n  const VkFormatFeatureFlags features = properties.optimalTilingFeatures;\n\n  TextureFormatCapabilities caps = TextureFormatCapabilityBits::Unsupported;\n\n  if (features & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) {\n    caps |= TextureFormatCapabilityBits::Sampled;\n  }\n  if (features & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) {\n    caps |= TextureFormatCapabilityBits::Storage;\n  }\n  if (features & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT) {\n    caps |= TextureFormatCapabilityBits::SampledFiltered;\n  }\n  if (features & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) {\n    caps |= TextureFormatCapabilityBits::Attachment;\n  }\n  if (features & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) {\n    caps |= TextureFormatCapabilityBits::Attachment;\n  }\n\n  // Special handling for when a format can be sampled AND used as an attachment\n  if (contains(caps, TextureFormatCapabilityBits::Sampled) &&\n      contains(caps, TextureFormatCapabilityBits::Attachment)) {\n    caps |= TextureFormatCapabilityBits::SampledAttachment;\n  }\n\n  return caps;\n}\n\nShaderVersion Device::getShaderVersionInternal() const {\n  return {.family = ShaderFamily::SpirV, .majorVersion = 1, .minorVersion = 5, .extra = 0};\n}\n\nBackendVersion Device::getBackendVersionInternal() const {\n  const uint32_t apiVersion = ctx_->vkPhysicalDeviceProperties2_.properties.apiVersion;\n  return {\n      .flavor = BackendFlavor::Vulkan,\n      .majorVersion = static_cast<uint8_t>(VK_API_VERSION_MAJOR(apiVersion)),\n      .minorVersion = static_cast<uint8_t>(VK_API_VERSION_MINOR(apiVersion)),\n  };\n}\n\nHolder<BindGroupTextureHandle> Device::createBindGroupInternal(\n    const igl::BindGroupTextureDesc& desc,\n    const IRenderPipelineState* IGL_NULLABLE compatiblePipeline,\n    Result* IGL_NULLABLE outResult) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n  IGL_DEBUG_ASSERT(ctx_);\n  IGL_DEBUG_ASSERT(!desc.debugName.empty(), \"Each bind group should have a debug name\");\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  return {this, ctx_->createBindGroup(desc, compatiblePipeline, outResult)};\n}\n\nHolder<BindGroupBufferHandle> Device::createBindGroupInternal(const igl::BindGroupBufferDesc& desc,\n                                                              Result* IGL_NULLABLE outResult) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n  IGL_DEBUG_ASSERT(ctx_);\n  IGL_DEBUG_ASSERT(!desc.debugName.empty(), \"Each bind group should have a debug name\");\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  return {this, ctx_->createBindGroup(desc, outResult)};\n}\n\nstd::shared_ptr<ITimer> Device::createTimer(Result* IGL_NULLABLE outResult) const noexcept {\n  if (outResult) {\n    *outResult = Result(Result::Code::Unsupported, \"Timer is not supported on Vulkan\");\n  }\n  return nullptr;\n}\n\nvoid Device::destroyInternal(BindGroupTextureHandle handle) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n  IGL_DEBUG_ASSERT(ctx_);\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  ctx_->destroy(handle);\n}\n\nvoid Device::destroyInternal(BindGroupBufferHandle handle) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n  IGL_DEBUG_ASSERT(ctx_);\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  ctx_->destroy(handle);\n}\n\nvoid Device::destroyInternal(SamplerHandle handle) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n  IGL_DEBUG_ASSERT(ctx_);\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  ctx_->destroy(handle);\n}\n\nvoid Device::setCurrentThreadInternal() {\n  IGL_PROFILER_FUNCTION();\n  IGL_DEBUG_ASSERT(ctx_);\n\n  ctx_->setCurrentContextThread();\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/Device.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/Buffer.h>\n#include <igl/Device.h>\n#include <igl/Shader.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/PlatformDevice.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanSemaphore.h>\n\nnamespace igl::vulkan {\n\nclass VulkanShaderModule;\n\n/// @brief Implements the igl::IDevice interface for Vulkan\nclass Device final : public IDevice {\n public:\n  explicit Device(std::unique_ptr<VulkanContext> ctx);\n  ~Device() override = default;\n\n  [[nodiscard]] Holder<BindGroupTextureHandle> createBindGroup(\n      const BindGroupTextureDesc& desc,\n      const IRenderPipelineState* IGL_NULLABLE compatiblePipeline,\n      Result* IGL_NULLABLE outResult) override;\n  [[nodiscard]] Holder<BindGroupBufferHandle> createBindGroup(const BindGroupBufferDesc& desc,\n                                                              Result* IGL_NULLABLE\n                                                                  outResult) override;\n  void destroy(BindGroupTextureHandle handle) override;\n  void destroy(BindGroupBufferHandle handle) override;\n  void destroy(SamplerHandle handle) override;\n\n  // Command Queue\n  [[nodiscard]] std::shared_ptr<ICommandQueue> createCommandQueue(const CommandQueueDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) noexcept override;\n  // Resources\n  [[nodiscard]] std::unique_ptr<IBuffer> createBuffer(const BufferDesc& desc,\n                                                      Result* IGL_NULLABLE\n                                                          outResult) const noexcept override;\n\n  [[nodiscard]] std::shared_ptr<IDepthStencilState> createDepthStencilState(\n      const DepthStencilStateDesc& desc,\n      Result* IGL_NULLABLE outResult) const override;\n\n  [[nodiscard]] std::unique_ptr<IShaderStages> createShaderStages(const ShaderStagesDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const override;\n\n  [[nodiscard]] std::shared_ptr<ISamplerState> createSamplerState(const SamplerStateDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const override;\n  [[nodiscard]] std::shared_ptr<ITexture> createTexture(const TextureDesc& desc,\n                                                        Result* IGL_NULLABLE\n                                                            outResult) const noexcept override;\n  [[nodiscard]] std::shared_ptr<ITexture> createTextureView(std::shared_ptr<ITexture> texture,\n                                                            const TextureViewDesc& desc,\n                                                            Result* IGL_NULLABLE\n                                                                outResult) const noexcept override;\n\n  std::shared_ptr<ITimer> createTimer(Result* IGL_NULLABLE outResult) const noexcept override;\n\n  [[nodiscard]] std::shared_ptr<IVertexInputState> createVertexInputState(\n      const VertexInputStateDesc& desc,\n      Result* IGL_NULLABLE outResult) const override;\n\n  // Pipelines\n  [[nodiscard]] std::shared_ptr<IComputePipelineState> createComputePipeline(\n      const ComputePipelineDesc& desc,\n      Result* IGL_NULLABLE outResult) const override;\n  [[nodiscard]] std::shared_ptr<IRenderPipelineState> createRenderPipeline(\n      const RenderPipelineDesc& desc,\n      Result* IGL_NULLABLE outResult) const override;\n\n  // Shaders\n  [[nodiscard]] std::unique_ptr<IShaderLibrary> createShaderLibrary(const ShaderLibraryDesc& desc,\n                                                                    Result* IGL_NULLABLE\n                                                                        outResult) const override;\n\n  [[nodiscard]] std::shared_ptr<IShaderModule> createShaderModule(const ShaderModuleDesc& desc,\n                                                                  Result* IGL_NULLABLE\n                                                                      outResult) const override;\n\n  [[nodiscard]] std::shared_ptr<IFramebuffer> createFramebuffer(const FramebufferDesc& desc,\n                                                                Result* IGL_NULLABLE\n                                                                    outResult) override;\n\n  // base::IDeviceBase\n  [[nodiscard]] base::IFramebufferInterop* IGL_NULLABLE\n  createFramebufferInterop(const base::FramebufferInteropDesc& desc) override;\n\n  // Platform-specific extensions\n  [[nodiscard]] const PlatformDevice& getPlatformDevice() const noexcept override;\n\n  // ICapabilities\n  [[nodiscard]] bool hasFeature(DeviceFeatures feature) const override;\n  [[nodiscard]] bool hasRequirement(DeviceRequirement requirement) const override;\n  bool getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const override;\n  [[nodiscard]] TextureFormatCapabilities getTextureFormatCapabilities(\n      TextureFormat format) const override;\n  [[nodiscard]] ShaderVersion getShaderVersion() const override;\n  [[nodiscard]] BackendVersion getBackendVersion() const override;\n\n  [[nodiscard]] BackendType getBackendType() const override;\n  [[nodiscard]] size_t getCurrentDrawCount() const override;\n  [[nodiscard]] size_t getShaderCompilationCount() const override;\n\n  void setCurrentThread() override;\n\n  VulkanContext& getVulkanContext() {\n    return *ctx_;\n  }\n  [[nodiscard]] const VulkanContext& getVulkanContext() const {\n    return *ctx_;\n  }\n\n  [[nodiscard]] void* IGL_NULLABLE getNativeDevice() const override {\n    return ctx_->getVkDevice();\n  }\n\n private:\n  std::shared_ptr<VulkanShaderModule> createShaderModule(const void* IGL_NULLABLE data,\n                                                         size_t length,\n                                                         const std::string& debugName,\n                                                         Result* IGL_NULLABLE outResult) const;\n  std::shared_ptr<VulkanShaderModule> createShaderModule(ShaderStage stage,\n                                                         const char* IGL_NULLABLE source,\n                                                         const std::string& debugName,\n                                                         Result* IGL_NULLABLE outResult) const;\n\n  [[nodiscard]] Holder<BindGroupTextureHandle> createBindGroupInternal(\n      const BindGroupTextureDesc& desc,\n      const IRenderPipelineState* IGL_NULLABLE compatiblePipeline,\n      Result* IGL_NULLABLE outResult);\n  [[nodiscard]] Holder<BindGroupBufferHandle> createBindGroupInternal(\n      const BindGroupBufferDesc& desc,\n      Result* IGL_NULLABLE outResult);\n  void destroyInternal(BindGroupTextureHandle handle);\n  void destroyInternal(BindGroupBufferHandle handle);\n  void destroyInternal(SamplerHandle handle);\n\n  // Command Queue\n  std::shared_ptr<ICommandQueue> createCommandQueueInternal(const CommandQueueDesc& desc,\n                                                            Result* IGL_NULLABLE outResult);\n  // Resources\n  std::unique_ptr<IBuffer> createBufferInternal(const BufferDesc& desc,\n                                                Result* IGL_NULLABLE outResult) const noexcept;\n\n  std::shared_ptr<IDepthStencilState> createDepthStencilStateInternal(\n      const DepthStencilStateDesc& desc,\n      Result* IGL_NULLABLE outResult) const;\n\n  std::unique_ptr<IShaderStages> createShaderStagesInternal(const ShaderStagesDesc& desc,\n                                                            Result* IGL_NULLABLE outResult) const;\n\n  std::shared_ptr<ISamplerState> createSamplerStateInternal(const SamplerStateDesc& desc,\n                                                            Result* IGL_NULLABLE outResult) const;\n  std::shared_ptr<ITexture> createTextureInternal(const TextureDesc& desc,\n                                                  Result* IGL_NULLABLE outResult) const noexcept;\n\n  std::shared_ptr<IVertexInputState> createVertexInputStateInternal(\n      const VertexInputStateDesc& desc,\n      Result* IGL_NULLABLE outResult) const;\n\n  // Pipelines\n  std::shared_ptr<IComputePipelineState> createComputePipelineInternal(\n      const ComputePipelineDesc& desc,\n      Result* IGL_NULLABLE outResult) const;\n  std::shared_ptr<IRenderPipelineState> createRenderPipelineInternal(const RenderPipelineDesc& desc,\n                                                                     Result* IGL_NULLABLE\n                                                                         outResult) const;\n\n  // Shaders\n  std::unique_ptr<IShaderLibrary> createShaderLibraryInternal(const ShaderLibraryDesc& desc,\n                                                              Result* IGL_NULLABLE outResult) const;\n\n  std::shared_ptr<IShaderModule> createShaderModuleInternal(const ShaderModuleDesc& desc,\n                                                            Result* IGL_NULLABLE outResult) const;\n\n  std::shared_ptr<IFramebuffer> createFramebufferInternal(const FramebufferDesc& desc,\n                                                          Result* IGL_NULLABLE outResult);\n\n  // Platform-specific extensions\n  [[nodiscard]] const PlatformDevice& getPlatformDeviceInternal() const noexcept;\n\n  // ICapabilities\n  [[nodiscard]] bool hasFeatureInternal(DeviceFeatures feature) const;\n  [[nodiscard]] bool hasRequirementInternal(DeviceRequirement requirement) const;\n  bool getFeatureLimitsInternal(DeviceFeatureLimits featureLimits, size_t& result) const;\n  [[nodiscard]] TextureFormatCapabilities getTextureFormatCapabilitiesInternal(\n      TextureFormat format) const;\n  [[nodiscard]] ShaderVersion getShaderVersionInternal() const;\n  [[nodiscard]] BackendVersion getBackendVersionInternal() const;\n\n  [[nodiscard]] size_t getCurrentDrawCountInternal() const;\n  [[nodiscard]] size_t getShaderCompilationCountInternal() const;\n\n  void setCurrentThreadInternal();\n\n  std::unique_ptr<VulkanContext> ctx_;\n\n  PlatformDevice platformDevice_;\n};\n\n/// Inline, passthrough implementations of virtual methods to work around mixing rtti and no-rtti\n/// targets on iOS and Android\n\n[[nodiscard]] inline Holder<BindGroupTextureHandle> Device::createBindGroup(\n    const BindGroupTextureDesc& desc,\n    const IRenderPipelineState* IGL_NULLABLE compatiblePipeline,\n    Result* IGL_NULLABLE outResult) {\n  return createBindGroupInternal(desc, compatiblePipeline, outResult);\n}\n\n[[nodiscard]] inline Holder<BindGroupBufferHandle> Device::createBindGroup(\n    const BindGroupBufferDesc& desc,\n    Result* IGL_NULLABLE outResult) {\n  return createBindGroupInternal(desc, outResult);\n}\n\nvoid inline Device::destroy(BindGroupTextureHandle handle) {\n  destroyInternal(handle);\n}\n\nvoid inline Device::destroy(BindGroupBufferHandle handle) {\n  destroyInternal(handle);\n}\n\nvoid inline Device::destroy(SamplerHandle handle) {\n  destroyInternal(handle);\n}\n\n[[nodiscard]] inline std::shared_ptr<ICommandQueue> Device::createCommandQueue(\n    const CommandQueueDesc& desc,\n    Result* IGL_NULLABLE outResult) noexcept {\n  return createCommandQueueInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::unique_ptr<IBuffer> Device::createBuffer(const BufferDesc& desc,\n                                                                   Result* IGL_NULLABLE\n                                                                       outResult) const noexcept {\n  return createBufferInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::shared_ptr<IDepthStencilState> Device::createDepthStencilState(\n    const DepthStencilStateDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  return createDepthStencilStateInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::unique_ptr<IShaderStages> Device::createShaderStages(\n    const ShaderStagesDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  return createShaderStagesInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::shared_ptr<ISamplerState> Device::createSamplerState(\n    const SamplerStateDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  return createSamplerStateInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::shared_ptr<ITexture> Device::createTexture(const TextureDesc& desc,\n                                                                     Result* IGL_NULLABLE\n                                                                         outResult) const noexcept {\n  return createTextureInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::shared_ptr<IVertexInputState> Device::createVertexInputState(\n    const VertexInputStateDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  return createVertexInputStateInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::shared_ptr<IComputePipelineState> Device::createComputePipeline(\n    const ComputePipelineDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  return createComputePipelineInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::shared_ptr<IRenderPipelineState> Device::createRenderPipeline(\n    const RenderPipelineDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  return createRenderPipelineInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::unique_ptr<IShaderLibrary> Device::createShaderLibrary(\n    const ShaderLibraryDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  return createShaderLibraryInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::shared_ptr<IShaderModule> Device::createShaderModule(\n    const ShaderModuleDesc& desc,\n    Result* IGL_NULLABLE outResult) const {\n  return createShaderModuleInternal(desc, outResult);\n}\n\n[[nodiscard]] inline std::shared_ptr<IFramebuffer> Device::createFramebuffer(\n    const FramebufferDesc& desc,\n    Result* IGL_NULLABLE outResult) {\n  return createFramebufferInternal(desc, outResult);\n}\n\n// Platform-specific extensions\n[[nodiscard]] inline const PlatformDevice& Device::getPlatformDevice() const noexcept {\n  return getPlatformDeviceInternal();\n}\n\n[[nodiscard]] inline bool Device::hasFeature(DeviceFeatures feature) const {\n  return hasFeatureInternal(feature);\n}\n\n[[nodiscard]] inline bool Device::hasRequirement(DeviceRequirement requirement) const {\n  return hasRequirementInternal(requirement);\n}\n\ninline bool Device::getFeatureLimits(DeviceFeatureLimits featureLimits, size_t& result) const {\n  return getFeatureLimitsInternal(featureLimits, result);\n}\n\n[[nodiscard]] inline ICapabilities::TextureFormatCapabilities Device::getTextureFormatCapabilities(\n    TextureFormat format) const {\n  return getTextureFormatCapabilitiesInternal(format);\n}\n\n[[nodiscard]] inline ShaderVersion Device::getShaderVersion() const {\n  return getShaderVersionInternal();\n}\n\n[[nodiscard]] inline BackendVersion Device::getBackendVersion() const {\n  return getBackendVersionInternal();\n}\n\n[[nodiscard]] inline BackendType Device::getBackendType() const {\n  return BackendType::Vulkan;\n}\n\n[[nodiscard]] inline size_t Device::getCurrentDrawCount() const {\n  return getCurrentDrawCountInternal();\n}\n\n[[nodiscard]] inline size_t Device::getShaderCompilationCount() const {\n  return getShaderCompilationCountInternal();\n}\n\ninline void Device::setCurrentThread() {\n  setCurrentThreadInternal();\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/Framebuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"Framebuffer.h\"\n\n#include <igl/CommandBuffer.h>\n#include <igl/CommandQueue.h>\n#include <igl/vulkan/CommandBuffer.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanFramebuffer.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanStagingDevice.h>\n#include <igl/vulkan/VulkanTexture.h>\n\nnamespace igl::vulkan {\n\nstd::vector<size_t> Framebuffer::getColorAttachmentIndices() const {\n  std::vector<size_t> indices;\n\n  indices.reserve(IGL_COLOR_ATTACHMENTS_MAX);\n\n  for (size_t i = 0; i != IGL_COLOR_ATTACHMENTS_MAX; i++) {\n    if (desc_.colorAttachments[i].texture || desc_.colorAttachments[i].resolveTexture) {\n      indices.push_back(i);\n    }\n  }\n\n  return indices;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getColorAttachment(size_t index) const {\n  IGL_DEBUG_ASSERT(index < IGL_COLOR_ATTACHMENTS_MAX);\n  return desc_.colorAttachments[index].texture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getResolveColorAttachment(size_t index) const {\n  IGL_DEBUG_ASSERT(index < IGL_COLOR_ATTACHMENTS_MAX);\n  return desc_.colorAttachments[index].resolveTexture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getDepthAttachment() const {\n  return desc_.depthAttachment.texture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getResolveDepthAttachment() const {\n  return desc_.depthAttachment.resolveTexture;\n}\n\nstd::shared_ptr<ITexture> Framebuffer::getStencilAttachment() const {\n  return desc_.stencilAttachment.texture;\n}\n\nvoid Framebuffer::copyBytesColorAttachment(ICommandQueue& /* Not Used */,\n                                           size_t index,\n                                           void* pixelBytes,\n                                           const TextureRangeDesc& range,\n                                           size_t bytesPerRow) const {\n  IGL_DEBUG_ASSERT(range.numFaces == 1, \"range.numFaces MUST be 1\");\n  IGL_DEBUG_ASSERT(range.numLayers == 1, \"range.numLayers MUST be 1\");\n  IGL_DEBUG_ASSERT(range.numMipLevels == 1, \"range.numMipLevels MUST be 1\");\n  IGL_PROFILER_FUNCTION();\n  if (!IGL_DEBUG_VERIFY(pixelBytes)) {\n    return;\n  }\n\n  const auto& itexture = getColorAttachment(index);\n  if (!IGL_DEBUG_VERIFY(itexture)) {\n    return;\n  }\n\n  // If we're doing MSAA, we should be using the resolve color attachment\n  const auto& vkTex = static_cast<Texture&>(\n      itexture->getSamples() == 1 ? *itexture : *getResolveColorAttachment(index));\n  const VkRect2D imageRegion = {\n      .offset = {.x = static_cast<int32_t>(range.x), .y = static_cast<int32_t>(range.y)},\n      .extent = {.width = range.width, .height = range.height},\n  };\n\n  if (bytesPerRow == 0) {\n    bytesPerRow = itexture->getProperties().getBytesPerRow(range);\n  }\n  // Vulkan uses array layer to represent either cube face or array layer. IGL's TextureRangeDesc\n  // represents these separately. This gets the correct vulkan array layer for the either the\n  // range's cube face or array layer.\n  const auto layer = getVkLayer(itexture->getType(), range.face, range.layer);\n\n  const VulkanContext& ctx = device_.getVulkanContext();\n  ctx.stagingDevice_->getImageData2D(vkTex.getVkImage(),\n                                     range.mipLevel,\n                                     layer, // Layer is either cube face or array layer\n                                     imageRegion,\n                                     vkTex.getProperties(),\n                                     VK_FORMAT_R8G8B8A8_UNORM,\n                                     vkTex.getVulkanTexture().image_.imageLayout_,\n                                     vkTex.getVulkanTexture().imageView_.getVkImageAspectFlags(),\n                                     pixelBytes,\n                                     static_cast<uint32_t>(bytesPerRow),\n                                     true); // Flip the image vertically\n}\n\nvoid Framebuffer::copyBytesDepthAttachment(ICommandQueue& /*cmdQueue*/,\n                                           void* /*pixelBytes*/,\n                                           const TextureRangeDesc& /*range*/,\n                                           size_t /*bytesPerRow*/) const {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid Framebuffer::copyBytesStencilAttachment(ICommandQueue& /*cmdQueue*/,\n                                             void* /*pixelBytes*/,\n                                             const TextureRangeDesc& /*range*/,\n                                             size_t /*bytesPerRow*/) const {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid Framebuffer::copyTextureColorAttachment(ICommandQueue& cmdQueue,\n                                             size_t index,\n                                             std::shared_ptr<ITexture> destTexture,\n                                             const TextureRangeDesc& range) const {\n  IGL_PROFILER_FUNCTION();\n  // Currently doesn't support mipmaps\n  if (!IGL_DEBUG_VERIFY(range.mipLevel == 0 && range.numMipLevels == 1)) {\n    return;\n  }\n\n  const auto& ctx = device_.getVulkanContext();\n\n  // Extract the underlying VkCommandBuffer\n  const CommandBufferDesc cbDesc;\n  const std::shared_ptr<ICommandBuffer> buffer = cmdQueue.createCommandBuffer(cbDesc, nullptr);\n  const auto& vulkanBuffer = static_cast<CommandBuffer&>(*buffer);\n  VkCommandBuffer cmdBuf = vulkanBuffer.getVkCommandBuffer();\n\n  const std::shared_ptr<ITexture>& srcTexture = getColorAttachment(index);\n  if (!IGL_DEBUG_VERIFY(srcTexture)) {\n    return;\n  }\n  // If we're doing MSAA, we should be using the resolve color attachment\n  const igl::vulkan::Texture& srcVkTex = static_cast<Texture&>(\n      srcTexture->getSamples() == 1 ? *srcTexture : *getResolveColorAttachment(index));\n\n  if (!IGL_DEBUG_VERIFY(destTexture)) {\n    return;\n  }\n  const igl::vulkan::Texture& dstVkTex = static_cast<Texture&>(*destTexture);\n\n  // 1. Transition dst into TRANSFER_DST_OPTIMAL\n  ivkImageMemoryBarrier(&ctx.vf_,\n                        cmdBuf,\n                        dstVkTex.getVkImage(),\n                        0, // srcAccessMask\n                        VK_ACCESS_TRANSFER_WRITE_BIT, // dstAccessMask\n                        VK_IMAGE_LAYOUT_UNDEFINED, // Discard content since we are writing\n                        VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                        VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // Don't wait for anything\n                        VK_PIPELINE_STAGE_TRANSFER_BIT,\n                        VkImageSubresourceRange{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});\n\n  // 2. Transition src into TRANSFER_SRC_OPTIMAL\n  srcVkTex.getVulkanTexture().image_.transitionLayout(\n      cmdBuf,\n      VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n      VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, // Wait for all previous operation to\n                                            // be done\n      VK_PIPELINE_STAGE_TRANSFER_BIT,\n      VkImageSubresourceRange{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});\n  // 3. Copy Image\n  const VkImageCopy copy = {\n      .srcSubresource = VkImageSubresourceLayers{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1},\n      .srcOffset = {.x = static_cast<int32_t>(range.x), .y = static_cast<int32_t>(range.y), .z = 0},\n      .dstSubresource = VkImageSubresourceLayers{VK_IMAGE_ASPECT_COLOR_BIT, 0, 0, 1},\n      .dstOffset = {.x = static_cast<int32_t>(range.x), .y = static_cast<int32_t>(range.y), .z = 0},\n      .extent = {.width = range.width, .height = range.height, .depth = 1u},\n  };\n\n  ctx.vf_.vkCmdCopyImage(cmdBuf,\n                         srcVkTex.getVkImage(),\n                         VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n                         dstVkTex.getVkImage(),\n                         VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                         1,\n                         &copy);\n\n  // 4. Transition images back\n  srcVkTex.getVulkanTexture().image_.transitionLayout(\n      cmdBuf,\n      VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,\n      VK_PIPELINE_STAGE_TRANSFER_BIT, // Wait for Copy to be done\n      VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // Don't start anything until Copy is\n                                         // done\n      VkImageSubresourceRange{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});\n  dstVkTex.getVulkanTexture().image_.transitionLayout(\n      cmdBuf,\n      dstVkTex.isSwapchainTexture() ? VK_IMAGE_LAYOUT_PRESENT_SRC_KHR\n                                    : VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,\n      VK_PIPELINE_STAGE_TRANSFER_BIT, // Wait for vkCmdCopyImage()\n      VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // Don't start anything until Copy is\n                                         // done\n      VkImageSubresourceRange{VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1});\n\n  cmdQueue.submit(*buffer);\n}\n\nvoid Framebuffer::updateDrawable(std::shared_ptr<ITexture> texture) {\n  updateDrawableInternal({.color = std::move(texture), .depth = nullptr}, false);\n}\n\nvoid Framebuffer::updateDrawable(SurfaceTextures surfaceTextures) {\n  updateDrawableInternal(std::move(surfaceTextures), true);\n}\n\nvoid Framebuffer::updateResolveAttachment(std::shared_ptr<ITexture> texture) {\n  if (getColorAttachment(0) && getResolveColorAttachment(0) != texture) {\n    desc_.colorAttachments[0].resolveTexture = std::move(texture);\n    validateAttachments();\n  }\n}\n\nvoid Framebuffer::updateDrawableInternal(SurfaceTextures surfaceTextures, bool updateDepthStencil) {\n  IGL_PROFILER_FUNCTION();\n\n  bool updated = false;\n  if (getColorAttachment(0) != surfaceTextures.color) {\n    if (!surfaceTextures.color) {\n      desc_.colorAttachments[0] = {};\n    } else {\n      desc_.colorAttachments[0].texture = std::move(surfaceTextures.color);\n    }\n    updated = true;\n  }\n\n  if (updateDepthStencil) {\n    if (surfaceTextures.depth && surfaceTextures.depth->getProperties().hasStencil()) {\n      if (getStencilAttachment() != surfaceTextures.depth) {\n        desc_.stencilAttachment.texture = surfaceTextures.depth;\n        updated = true;\n      }\n    } else {\n      desc_.stencilAttachment.texture = nullptr;\n      updated = true;\n    }\n    if (getDepthAttachment() != surfaceTextures.depth) {\n      desc_.depthAttachment.texture = std::move(surfaceTextures.depth);\n      updated = true;\n    }\n  }\n  if (updated) {\n    validateAttachments();\n  }\n}\n\nFramebuffer::Framebuffer(const Device& device, FramebufferDesc desc) :\n  device_(device), desc_(std::move(desc)) {\n  validateAttachments();\n}\n\nvoid Framebuffer::validateAttachments() {\n  width_ = 0u;\n  height_ = 0u;\n\n  IGL_PROFILER_FUNCTION();\n  auto ensureSize = [this](const vulkan::Texture& tex) {\n    const uint32_t attachmentWidth = tex.getDimensions().width;\n    const uint32_t attachmentHeight = tex.getDimensions().height;\n\n    IGL_DEBUG_ASSERT(attachmentWidth);\n    IGL_DEBUG_ASSERT(attachmentHeight);\n\n    // Initialize width/height\n    if (!width_ || !height_) {\n      width_ = attachmentWidth;\n      height_ = attachmentHeight;\n    } else {\n      // We expect all subsequent color attachments to have the same size.\n      IGL_DEBUG_ASSERT(width_ == attachmentWidth);\n      IGL_DEBUG_ASSERT(height_ == attachmentHeight);\n    }\n\n    IGL_DEBUG_ASSERT(tex.getVkFormat() != VK_FORMAT_UNDEFINED || tex.getVkExtendedFormat() != 0,\n                     \"Invalid texture format: %d\",\n                     static_cast<int>(tex.getVkFormat()));\n  };\n\n  for (const auto& attachment : desc_.colorAttachments) {\n    if (!attachment.texture) {\n      continue;\n    }\n    const auto& colorTexture = static_cast<Texture&>(*attachment.texture);\n    ensureSize(colorTexture);\n    IGL_DEBUG_ASSERT(\n        (colorTexture.getUsage() & TextureDesc::TextureUsageBits::Attachment) != 0,\n        \"Did you forget to specify TextureUsageBits::Attachment on your color texture?\");\n  }\n\n  const auto* depthTexture = static_cast<Texture*>(desc_.depthAttachment.texture.get());\n\n  if (depthTexture) {\n    ensureSize(*depthTexture);\n    IGL_DEBUG_ASSERT(\n        (depthTexture->getUsage() & TextureDesc::TextureUsageBits::Attachment) != 0,\n        \"Did you forget to specify TextureUsageBits::Attachment on your depth texture?\");\n  }\n\n  IGL_DEBUG_ASSERT(width_);\n  IGL_DEBUG_ASSERT(height_);\n}\n\nVkFramebuffer Framebuffer::getVkFramebuffer(uint32_t mipLevel,\n                                            uint32_t layer,\n                                            VkRenderPass pass) const {\n  IGL_PROFILER_FUNCTION();\n  // Because Vulkan framebuffers are immutable and we have a method updateDrawable() which can\n  // change an attachment, we have to maintain a collection of attachments and map it into a\n  // VulkanFramebuffer via unordered_map. The vector of attachments is a key in the hash table.\n  Attachments attachments;\n\n  for (const auto& colorAttachment : desc_.colorAttachments) {\n    // skip invalid attachments\n    if (!colorAttachment.texture) {\n      continue;\n    }\n    IGL_DEBUG_ASSERT(colorAttachment.texture);\n\n    const auto& colorTexture = static_cast<Texture&>(*colorAttachment.texture);\n    attachments.attachments.push_back(\n        colorTexture.getVkImageViewForFramebuffer(mipLevel, layer, desc_.mode));\n    // handle color MSAA\n    if (colorAttachment.resolveTexture) {\n      IGL_DEBUG_ASSERT(mipLevel == 0);\n      const auto& colorResolveTexture = static_cast<Texture&>(*colorAttachment.resolveTexture);\n      attachments.attachments.push_back(\n          colorResolveTexture.getVkImageViewForFramebuffer(0, layer, desc_.mode));\n    }\n  }\n  // depth\n  {\n    const auto* depthTexture = static_cast<Texture*>(desc_.depthAttachment.texture.get());\n    if (depthTexture) {\n      attachments.attachments.push_back(\n          depthTexture->getVkImageViewForFramebuffer(mipLevel, layer, desc_.mode));\n    }\n  }\n  // handle depth MSAA\n  {\n    const auto* depthResolveTexture =\n        static_cast<Texture*>(desc_.depthAttachment.resolveTexture.get());\n    if (depthResolveTexture) {\n      attachments.attachments.push_back(\n          depthResolveTexture->getVkImageViewForFramebuffer(mipLevel, layer, desc_.mode));\n    }\n  }\n\n  // now we can find a corresponding framebuffer\n  auto it = framebuffers_.find(attachments);\n\n  if (it != framebuffers_.end()) {\n    return it->second->getVkFramebuffer();\n  }\n\n  const VulkanContext& ctx = device_.getVulkanContext();\n\n  const uint32_t fbWidth = std::max(width_ >> mipLevel, 1u);\n  const uint32_t fbHeight = std::max(height_ >> mipLevel, 1u);\n\n  auto fb = std::make_shared<VulkanFramebuffer>(ctx,\n                                                ctx.getVkDevice(),\n                                                fbWidth,\n                                                fbHeight,\n                                                pass,\n                                                (uint32_t)attachments.attachments.size(),\n                                                attachments.attachments.data(),\n                                                desc_.debugName.c_str());\n\n  framebuffers_[attachments] = fb;\n\n  return fb->getVkFramebuffer();\n}\n\nuint64_t Framebuffer::HashFunction::operator()(const Attachments& attachments) const {\n  uint64_t hash = 0;\n\n  for (const auto& a : attachments.attachments) {\n    hash ^= std::hash<VkImageView>()(a);\n  }\n\n  return hash;\n}\n\nVkRenderPassBeginInfo Framebuffer::getRenderPassBeginInfo(VkRenderPass renderPass,\n                                                          uint32_t mipLevel,\n                                                          uint32_t layer,\n                                                          uint32_t numClearValues,\n                                                          const VkClearValue* clearValues) const {\n  IGL_PROFILER_FUNCTION();\n\n  return VkRenderPassBeginInfo{\n      .sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,\n      .renderPass = renderPass,\n      .framebuffer = getVkFramebuffer(mipLevel, layer, renderPass),\n      .renderArea =\n          {\n              .offset = {.x = 0, .y = 0},\n              .extent = {.width = std::max(width_ >> mipLevel, 1u),\n                         .height = std::max(height_ >> mipLevel, 1u)},\n          },\n      .clearValueCount = numClearValues,\n      .pClearValues = clearValues,\n  };\n}\n\nFramebufferMode Framebuffer::getMode() const {\n  return desc_.mode;\n}\n\nbool Framebuffer::isSwapchainBound() const {\n  if (auto tex = getColorAttachment(0)) {\n    return tex->isSwapchainTexture();\n  }\n  return false;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/Framebuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <unordered_map>\n#include <igl/Framebuffer.h>\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nclass Device;\nclass VulkanFramebuffer;\n\n/// @brief Implements the igl::IFramebuffer interface for Vulkan\n/// Vulkan framebuffers are immutable and are made of one or more image views. This class keeps\n/// track of all framebuffers for each combination of mip level, layer, and render pass in an\n/// unordered map. Framebuffers are lazily created when requested with `getVkFramebuffer()`\nclass Framebuffer final : public IFramebuffer {\n public:\n  Framebuffer(const Device& device, FramebufferDesc desc);\n  ~Framebuffer() override = default;\n\n  // Accessors\n  std::vector<size_t> getColorAttachmentIndices() const override;\n  std::shared_ptr<ITexture> getColorAttachment(size_t index) const override;\n  std::shared_ptr<ITexture> getResolveColorAttachment(size_t index) const override;\n  std::shared_ptr<ITexture> getDepthAttachment() const override;\n  std::shared_ptr<ITexture> getResolveDepthAttachment() const override;\n  std::shared_ptr<ITexture> getStencilAttachment() const override;\n  [[nodiscard]] FramebufferMode getMode() const override;\n  [[nodiscard]] bool isSwapchainBound() const override;\n\n  /// @brief Copies color attachment to location pointed by `pixelBytes`. This function only\n  /// supports copying one face, one layer, and one mip level at a time. This function is\n  /// synchronous and the data is expected to be available at `pixelBytes` location upon return.\n  void copyBytesColorAttachment(ICommandQueue& /* Not Used */,\n                                size_t index,\n                                void* pixelBytes,\n                                const TextureRangeDesc& range,\n                                size_t bytesPerRow = 0) const override;\n\n  /// @brief Not implemented.\n  void copyBytesDepthAttachment(ICommandQueue& cmdQueue,\n                                void* pixelBytes,\n                                const TextureRangeDesc& range,\n                                size_t bytesPerRow = 0) const override;\n\n  /// @brief Not implemented.\n  void copyBytesStencilAttachment(ICommandQueue& cmdQueue,\n                                  void* pixelBytes,\n                                  const TextureRangeDesc& range,\n                                  size_t bytesPerRow = 0) const override;\n\n  ///  @brief Copies a range of the color attachment at `index` to destination texture. This\n  ///  function is asynchronous and the data may or may not be available at the destination texture\n  ///  upon return.\n  void copyTextureColorAttachment(ICommandQueue& cmdQueue,\n                                  size_t index,\n                                  std::shared_ptr<ITexture> destTexture,\n                                  const TextureRangeDesc& range) const override;\n\n  /// @brief Updates the framebuffer's color attachment at index 0 with the texture passed in as a\n  /// parameter\n  void updateDrawable(std::shared_ptr<ITexture> texture) override;\n\n  /// @brief Updates the framebuffer's color attachment at index 0 and the depth/stencil attachment\n  /// with the contents of SurfaceTextures passed in as a parameter. If a stencil texture is not\n  /// provided, the stencil attachment is set to null.\n  void updateDrawable(SurfaceTextures surfaceTextures) override;\n\n  /// @brief Updates the color attachment's resolve texture at index 0 with the texture passed in as\n  /// a parameter\n  void updateResolveAttachment(std::shared_ptr<ITexture> texture) override;\n\n  /** @brief Returns the underlying Vulkan framebuffer handle for the given mip level, layer, and\n   * render pass. Vulkan framebuffers are immutable and are made of one or more image views. This\n   * class keeps track of all framebuffers for each combination of mip level, layer, and render\n   * pass. When requesting a framebuffer for a mip level, layer, or render pass, this function\n   * looks for an existing framebuffer and returns it, if it exists. Otherwise, it creates a new\n   * framebuffer and stores it in the cache.\n   */\n  VkFramebuffer getVkFramebuffer(uint32_t mipLevel, uint32_t layer, VkRenderPass pass) const;\n\n  uint32_t getWidth() const {\n    return width_;\n  }\n  uint32_t getHeight() const {\n    return height_;\n  }\n\n  IGL_INLINE const FramebufferDesc& getDesc() const {\n    return desc_;\n  }\n\n  VkRenderPassBeginInfo getRenderPassBeginInfo(VkRenderPass renderPass,\n                                               uint32_t mipLevel,\n                                               uint32_t layer,\n                                               uint32_t numClearValues,\n                                               const VkClearValue* clearValues) const;\n\n  /// @brief Structure used as key for unordered map based on all framebuffer attachments\n  struct Attachments {\n    std::vector<VkImageView> attachments;\n    bool operator==(const Attachments& other) const {\n      return attachments == other.attachments;\n    }\n  };\n\n  struct HashFunction {\n    uint64_t operator()(const Attachments& attachments) const;\n  };\n\n private:\n  void validateAttachments();\n  void updateDrawableInternal(SurfaceTextures surfaceTextures, bool updateDepthStencil);\n\n  const igl::vulkan::Device& device_;\n  FramebufferDesc desc_; // attachments\n\n  uint32_t width_ = 0;\n  uint32_t height_ = 0;\n\n  /// @brief Cache of framebuffers created from the same set of attachments\n  mutable std::unordered_map<Attachments, std::shared_ptr<VulkanFramebuffer>, HashFunction>\n      framebuffers_;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/HWDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"HWDevice.h\"\n\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\nnamespace igl::vulkan {\n\nstd::unique_ptr<VulkanContext> HWDevice::createContext(const VulkanContextConfig& config,\n                                                       void* IGL_NULLABLE window,\n                                                       void* IGL_NULLABLE display) {\n  // @fb-only\n  // @lint-ignore CLANGTIDY\n  return std::make_unique<VulkanContext>(config, window, display);\n}\n\nstd::vector<HWDeviceDesc> HWDevice::queryDevices(VulkanContext& ctx,\n                                                 const HWDeviceQueryDesc& desc,\n                                                 Result* IGL_NULLABLE outResult) {\n  std::vector<HWDeviceDesc> outDevices;\n\n  Result::setResult(outResult, ctx.queryDevices(desc, outDevices));\n\n  return outDevices;\n}\n\nstd::unique_ptr<Device> HWDevice::create(std::unique_ptr<VulkanContext> ctx,\n                                         const HWDeviceDesc& desc,\n                                         uint32_t width,\n                                         uint32_t height,\n                                         size_t numExtraDeviceExtensions,\n                                         const char* IGL_NULLABLE* IGL_NULLABLE\n                                             extraDeviceExtensions,\n                                         const igl::vulkan::VulkanFeatures* IGL_NULLABLE features,\n                                         const char* IGL_NULLABLE debugName,\n                                         Result* IGL_NULLABLE outResult) {\n  IGL_DEBUG_ASSERT(ctx);\n\n  auto result =\n      ctx->initContext(desc, numExtraDeviceExtensions, extraDeviceExtensions, features, debugName);\n\n  Result::setResult(outResult, result);\n\n  if (!result.isOk()) {\n    return nullptr;\n  }\n\n  if (width > 0 && height > 0) {\n    result = ctx->initSwapchain(width, height);\n\n    Result::setResult(outResult, result);\n  }\n\n  return result.isOk() ? std::make_unique<Device>(std::move(ctx)) : nullptr;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/HWDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <vector>\n#include <igl/HWDevice.h>\n#include <igl/vulkan/Device.h>\n\nnamespace igl::vulkan {\n\n/// @brief This class provides convenience functions to query, and create devices, as well as to\n/// create a VulkanContext object.\nclass HWDevice final {\n public:\n  /** @brief Creates a VulkanContext object with the specified configuration and the extensions\n   * provided in the array pointed by `extraInstanceExtensions`.\n   * @param config is the configuration used to create the VulkanContext object\n   * @param window is a pointer to a native window handle. For windows, it should be a pointer to\n   * the Win32 HINSTANCE for the window to associate the surface with. For Android, it should be a\n   * pointer to the ANativeWindow. For Xlib, it should be an Xlib Window.\n   * @param numExtraInstanceExtensions is the number of additional instance extensions to enable.\n   * @param extraInstanceExtensions is a pointer to an array of strings containing the names of the\n   * extensions to enable for the context.\n   * @param display is a pointer to an Xlib Display connection to the X server. Used only when\n   * `VK_USE_PLATFORM_XLIB_KHR` is defined.\n   */\n  static std::unique_ptr<VulkanContext> createContext(const VulkanContextConfig& config,\n                                                      void* IGL_NULLABLE window,\n                                                      void* IGL_NULLABLE display = nullptr);\n\n  static std::vector<HWDeviceDesc> queryDevices(VulkanContext& ctx,\n                                                const HWDeviceQueryDesc& desc,\n                                                Result* IGL_NULLABLE outResult = nullptr);\n\n  /*\n   * @brief Create a new vulkan::Device\n   *        Only 1 device can be created for Vulkan. The new device will take ownership of\n   * VulkanContext. If the process fails, the provided VulkanContext is destroyed. If the width and\n   * height are greater than 0, this functions also initializes the swapchain.\n   */\n\n  static std::unique_ptr<Device> create(\n      std::unique_ptr<VulkanContext> ctx,\n      const HWDeviceDesc& desc,\n      uint32_t width,\n      uint32_t height,\n      size_t numExtraDeviceExtensions = 0,\n      const char* IGL_NULLABLE* IGL_NULLABLE extraDeviceExtensions = nullptr,\n      const igl::vulkan::VulkanFeatures* IGL_NULLABLE features = nullptr,\n      const char* IGL_NULLABLE debugName = nullptr,\n      Result* IGL_NULLABLE outResult = nullptr);\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/PipelineState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"PipelineState.h\"\n\n#include <igl/vulkan/SamplerState.h>\n#include <igl/vulkan/ShaderModule.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanDescriptorSetLayout.h>\n#include <igl/vulkan/VulkanShaderModule.h>\n\nnamespace igl::vulkan {\n\nvoid PipelineState::initializeSpvModuleInfoFromShaderStages(const VulkanContext& ctx,\n                                                            IShaderStages* stages) {\n  const ShaderStagesType shaderStagesType = stages->getType();\n\n  VkShaderStageFlags pushConstantMask = 0;\n\n  switch (shaderStagesType) {\n  case igl::ShaderStagesType::Compute: {\n    // compute\n    auto* smComp = static_cast<ShaderModule*>(stages->getComputeModule().get());\n\n    ensureShaderModule(smComp);\n\n    info = smComp->getVulkanShaderModule().getSpvModuleInfo();\n\n    if (info.hasPushConstants) {\n      pushConstantMask |= VK_SHADER_STAGE_COMPUTE_BIT;\n    }\n\n    stageFlags = VK_SHADER_STAGE_COMPUTE_BIT;\n  } break;\n  case igl::ShaderStagesType::Render: {\n    auto* smVert = static_cast<ShaderModule*>(stages->getVertexModule().get());\n    auto* smFrag = static_cast<ShaderModule*>(stages->getFragmentModule().get());\n\n    // vertex/fragment\n    ensureShaderModule(smVert);\n    ensureShaderModule(smFrag);\n\n    const util::SpvModuleInfo& infoVert = smVert->getVulkanShaderModule().getSpvModuleInfo();\n    const util::SpvModuleInfo& infoFrag = smFrag->getVulkanShaderModule().getSpvModuleInfo();\n\n    if (infoVert.hasPushConstants) {\n      pushConstantMask |= VK_SHADER_STAGE_VERTEX_BIT;\n    }\n    if (infoFrag.hasPushConstants) {\n      pushConstantMask |= VK_SHADER_STAGE_FRAGMENT_BIT;\n    }\n\n    info = util::mergeReflectionData(infoVert, infoFrag);\n\n    stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;\n  } break;\n  case igl::ShaderStagesType::RenderMeshShader: {\n    auto* smTask = static_cast<ShaderModule*>(stages->getTaskModule().get());\n    auto* smMesh = static_cast<ShaderModule*>(stages->getMeshModule().get());\n    auto* smFrag = static_cast<ShaderModule*>(stages->getFragmentModule().get());\n\n    ensureShaderModule(smMesh);\n    ensureShaderModule(smFrag);\n\n    const util::SpvModuleInfo& infoMesh = smMesh->getVulkanShaderModule().getSpvModuleInfo();\n    const util::SpvModuleInfo& infoFrag = smFrag->getVulkanShaderModule().getSpvModuleInfo();\n\n    if (infoMesh.hasPushConstants) {\n      pushConstantMask |= VK_SHADER_STAGE_MESH_BIT_EXT;\n    }\n    if (infoFrag.hasPushConstants) {\n      pushConstantMask |= VK_SHADER_STAGE_FRAGMENT_BIT;\n    }\n\n    info = util::mergeReflectionData(infoMesh, infoFrag);\n\n    stageFlags = VK_SHADER_STAGE_MESH_BIT_EXT | VK_SHADER_STAGE_FRAGMENT_BIT;\n\n    if (smTask) {\n      ensureShaderModule(smTask);\n\n      const util::SpvModuleInfo& infoTask = smTask->getVulkanShaderModule().getSpvModuleInfo();\n\n      if (infoTask.hasPushConstants) {\n        pushConstantMask |= VK_SHADER_STAGE_TASK_BIT_EXT;\n      }\n\n      info = util::mergeReflectionData(info, infoTask);\n\n      stageFlags |= VK_SHADER_STAGE_TASK_BIT_EXT;\n    }\n  } break;\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    break;\n  };\n\n  if (pushConstantMask) {\n    const VkPhysicalDeviceLimits& limits = ctx.getVkPhysicalDeviceProperties().limits;\n\n    constexpr uint32_t kPushConstantsSize = 128;\n\n    if (!IGL_DEBUG_VERIFY(kPushConstantsSize <= limits.maxPushConstantsSize)) {\n      IGL_LOG_ERROR(\"Push constants size exceeded %u (max %u bytes)\",\n                    kPushConstantsSize,\n                    limits.maxPushConstantsSize);\n    }\n\n    pushConstantRange = VkPushConstantRange{\n        .stageFlags = pushConstantMask,\n        .offset = 0u,\n        .size = kPushConstantsSize,\n    };\n  }\n}\n\nPipelineState::PipelineState(\n    const VulkanContext& ctx,\n    IShaderStages* stages,\n    std::shared_ptr<ISamplerState> immutableSamplers[IGL_TEXTURE_SAMPLERS_MAX],\n    uint32_t isDynamicBufferMask,\n    const char* debugName) {\n  IGL_DEBUG_ASSERT(stages);\n\n  initializeSpvModuleInfoFromShaderStages(ctx, stages);\n\n  // Create all Vulkan descriptor set layouts for this pipeline\n\n  // 0. Combined image samplers\n  {\n    std::vector<VkDescriptorSetLayoutBinding> bindings;\n    bindings.reserve(info.textures.size());\n    for (const auto& t : info.textures) {\n      const uint32_t loc = t.bindingLocation;\n      bindings.emplace_back(VkDescriptorSetLayoutBinding{\n          .binding = loc,\n          .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,\n          .descriptorCount = 1,\n          .stageFlags = stageFlags,\n      });\n      if (loc < IGL_TEXTURE_SAMPLERS_MAX && immutableSamplers && immutableSamplers[loc]) {\n        auto* sampler = static_cast<SamplerState*>(immutableSamplers[loc].get());\n        bindings.back().pImmutableSamplers = &ctx.samplers_.get(sampler->sampler_)->vkSampler;\n      }\n    }\n    std::vector<VkDescriptorBindingFlags> bindingFlags(bindings.size());\n    dslCombinedImageSamplers = std::make_unique<VulkanDescriptorSetLayout>(\n        ctx,\n        VkDescriptorSetLayoutCreateFlags{},\n        static_cast<uint32_t>(bindings.size()),\n        bindings.data(),\n        bindingFlags.data(),\n        IGL_FORMAT(\"Descriptor Set Layout (COMBINED_IMAGE_SAMPLER): {}\", debugName).c_str());\n  }\n  // 1. Buffers\n  {\n    std::vector<VkDescriptorSetLayoutBinding> bindings;\n    bindings.reserve(info.buffers.size());\n    for (const auto& b : info.buffers) {\n      const bool isDynamic = (isDynamicBufferMask & (1ul << b.bindingLocation)) != 0;\n      const VkDescriptorType type = b.isStorage\n                                        ? (isDynamic ? VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC\n                                                     : VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)\n                                        : (isDynamic ? VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC\n                                                     : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER);\n      bindings.emplace_back(VkDescriptorSetLayoutBinding{\n          .binding = b.bindingLocation,\n          .descriptorType = type,\n          .descriptorCount = 1,\n          .stageFlags = stageFlags,\n      });\n    }\n    std::vector<VkDescriptorBindingFlags> bindingFlags(bindings.size());\n    dslBuffers = std::make_unique<VulkanDescriptorSetLayout>(\n        ctx,\n        VkDescriptorSetLayoutCreateFlags{},\n        static_cast<uint32_t>(bindings.size()),\n        bindings.data(),\n        bindingFlags.data(),\n        IGL_FORMAT(\"Descriptor Set Layout (BUFFERS): {}\", debugName).c_str());\n  }\n  // 2. Bindless descriptors are managed in VulkanContext\n\n  // 3. Storage images\n  {\n    std::vector<VkDescriptorSetLayoutBinding> bindings;\n    bindings.reserve(info.images.size());\n    for (const auto& t : info.images) {\n      const uint32_t loc = t.bindingLocation;\n      bindings.emplace_back(VkDescriptorSetLayoutBinding{\n          .binding = loc,\n          .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,\n          .descriptorCount = 1,\n          .stageFlags = stageFlags,\n      });\n    }\n    std::vector<VkDescriptorBindingFlags> bindingFlags(bindings.size());\n    dslStorageImages = std::make_unique<VulkanDescriptorSetLayout>(\n        ctx,\n        VkDescriptorSetLayoutCreateFlags{},\n        static_cast<uint32_t>(bindings.size()),\n        bindings.data(),\n        bindingFlags.data(),\n        IGL_FORMAT(\"Descriptor Set Layout (STORAGE_IMAGE): {}\", debugName).c_str());\n  }\n}\n\nVkPipelineLayout PipelineState::getVkPipelineLayout() const {\n  IGL_DEBUG_ASSERT(pipelineLayout);\n\n  return pipelineLayout;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/PipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/util/SpvReflection.h>\n\nnamespace igl {\nclass IShaderStages;\n} // namespace igl\n\nnamespace igl::vulkan {\n\nclass VulkanContext;\nclass VulkanDescriptorSetLayout;\n\nclass PipelineState {\n public:\n  PipelineState(const VulkanContext& ctx,\n                IShaderStages* stages,\n                std::shared_ptr<ISamplerState> immutableSamplers[IGL_TEXTURE_SAMPLERS_MAX],\n                uint32_t isDynamicBufferMask,\n                const char* debugName);\n  virtual ~PipelineState() = default;\n\n  PipelineState(const PipelineState&) = delete;\n  PipelineState(PipelineState&&) = delete;\n  PipelineState& operator=(const PipelineState&) = delete;\n  PipelineState& operator=(PipelineState&&) = delete;\n\n  VkPipelineLayout getVkPipelineLayout() const;\n\n  const util::SpvModuleInfo& getSpvModuleInfo() const {\n    return info;\n  }\n\n private:\n  void initializeSpvModuleInfoFromShaderStages(const VulkanContext& ctx, IShaderStages* stages);\n\n public:\n  igl::vulkan::util::SpvModuleInfo info;\n\n  VkPushConstantRange pushConstantRange = {};\n  VkShaderStageFlags stageFlags = 0;\n\n  mutable VkPipelineLayout pipelineLayout = VK_NULL_HANDLE;\n\n  // the last seen VkDescriptorSetLayout from VulkanContext::dslBindless_\n  mutable VkDescriptorSetLayout lastBindlessVkDescriptorSetLayout = VK_NULL_HANDLE;\n\n  std::unique_ptr<VulkanDescriptorSetLayout> dslCombinedImageSamplers;\n  std::unique_ptr<VulkanDescriptorSetLayout> dslBuffers;\n  std::unique_ptr<VulkanDescriptorSetLayout> dslStorageImages;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/PlatformDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/PlatformDevice.h>\n\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanSwapchain.h>\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n#include <android/hardware_buffer.h>\n#include <igl/vulkan/android/NativeHWBuffer.h>\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\nnamespace igl::vulkan {\n\nPlatformDevice::PlatformDevice(Device& device) : device_(device) {}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDepth(uint32_t width,\n                                                                       uint32_t height,\n                                                                       Result* outResult) {\n  IGL_PROFILER_FUNCTION();\n\n  const auto& ctx = device_.getVulkanContext();\n  const auto& swapChain = ctx.swapchain_;\n\n  if (!ctx.hasSwapchain()) {\n    nativeDepthTexture_ = nullptr;\n    Result::setResult(outResult, Result::Code::Ok);\n    return nullptr;\n  };\n\n  std::shared_ptr<VulkanTexture> vkTex = swapChain->getCurrentDepthTexture();\n\n  if (!IGL_DEBUG_VERIFY(vkTex != nullptr)) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"Swapchain has no valid texture\");\n    return nullptr;\n  }\n\n  IGL_DEBUG_ASSERT(vkTex->image_.imageFormat_ != VK_FORMAT_UNDEFINED, \"Invalid image format\");\n\n  const auto iglFormat = vkFormatToTextureFormat(vkTex->image_.imageFormat_);\n  if (!IGL_DEBUG_VERIFY(iglFormat != igl::TextureFormat::Invalid)) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Invalid surface depth format\");\n    return nullptr;\n  }\n\n  // allocate new drawable textures if its null or mismatches in size or format\n  if (!nativeDepthTexture_ || width != nativeDepthTexture_->getDimensions().width ||\n      height != nativeDepthTexture_->getDimensions().height ||\n      iglFormat != nativeDepthTexture_->getFormat()) {\n    const TextureDesc desc = TextureDesc::new2D(iglFormat,\n                                                width,\n                                                height,\n                                                TextureDesc::TextureUsageBits::Attachment |\n                                                    TextureDesc::TextureUsageBits::Sampled,\n                                                \"SwapChain Texture\");\n    nativeDepthTexture_ = std::make_shared<Texture>(device_, std::move(vkTex), desc);\n  }\n\n  Result::setResult(outResult, Result::Code::Ok);\n\n  return nativeDepthTexture_;\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureFromNativeDrawable(Result* outResult) {\n  IGL_PROFILER_FUNCTION();\n\n  const auto& ctx = device_.getVulkanContext();\n\n  if (!ctx.hasSwapchain()) {\n    nativeDrawableTextures_.clear();\n    Result::setResult(outResult, Result::Code::Ok);\n    return nullptr;\n  };\n\n  const auto& swapChain = ctx.swapchain_;\n\n  auto vkTex = swapChain->getCurrentVulkanTexture();\n\n  if (!IGL_DEBUG_VERIFY(vkTex != nullptr)) {\n    Result::setResult(outResult, Result::Code::InvalidOperation, \"Swapchain has no valid texture\");\n    return nullptr;\n  }\n\n  IGL_DEBUG_ASSERT(vkTex->image_.imageFormat_ != VK_FORMAT_UNDEFINED, \"Invalid image format\");\n\n  const igl::TextureFormat iglFormat = vkFormatToTextureFormat(vkTex->image_.imageFormat_);\n  if (!IGL_DEBUG_VERIFY(iglFormat != igl::TextureFormat::Invalid)) {\n    Result::setResult(outResult, Result::Code::RuntimeError, \"Invalid surface color format\");\n    return nullptr;\n  }\n\n  const auto width = (size_t)swapChain->getWidth();\n  const auto height = (size_t)swapChain->getHeight();\n  const auto currentImageIndex = swapChain->getCurrentImageIndex();\n\n  // resize nativeDrawableTextures_ pushing null pointers\n  // null pointers will be allocated later as needed\n  if (currentImageIndex >= nativeDrawableTextures_.size()) {\n    nativeDrawableTextures_.resize((size_t)currentImageIndex + 1, nullptr);\n  }\n\n  const auto result = nativeDrawableTextures_[currentImageIndex];\n\n  // allocate new drawable textures if its null or mismatches in size or format\n  if (!result || width != result->getDimensions().width ||\n      height != result->getDimensions().height || iglFormat != result->getFormat()) {\n    const TextureDesc desc = TextureDesc::new2D(\n        iglFormat, width, height, TextureDesc::TextureUsageBits::Attachment, \"SwapChain Texture\");\n    nativeDrawableTextures_[currentImageIndex] =\n        std::make_shared<Texture>(device_, std::move(vkTex), desc);\n  }\n\n  Result::setResult(outResult, Result::Code::Ok);\n\n  return nativeDrawableTextures_[currentImageIndex];\n}\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n/// returns a android::NativeHWTextureBuffer on platforms supporting it\n/// this texture allows CPU and GPU to both read/write memory\nstd::shared_ptr<ITexture> PlatformDevice::createTextureWithSharedMemory(const TextureDesc& desc,\n                                                                        Result* outResult) const {\n  Result subResult;\n\n  auto texture =\n      std::make_shared<igl::vulkan::android::NativeHWTextureBuffer>(device_, desc.format);\n  subResult = texture->createHWBuffer(desc, false, false);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n\n  return std::move(texture);\n}\n\nstd::shared_ptr<ITexture> PlatformDevice::createTextureWithSharedMemory(\n    struct AHardwareBuffer* buffer,\n    Result* outResult) const {\n  Result subResult;\n\n  AHardwareBuffer_Desc hwbDesc;\n  AHardwareBuffer_describe(buffer, &hwbDesc);\n\n  auto texture = std::make_shared<igl::vulkan::android::NativeHWTextureBuffer>(\n      device_, igl::android::getIglFormat(hwbDesc.format));\n  subResult = texture->createWithHWBuffer(buffer);\n  Result::setResult(outResult, subResult.code, subResult.message);\n  if (!subResult.isOk()) {\n    return nullptr;\n  }\n\n  return std::move(texture);\n}\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\nVkFence PlatformDevice::getVkFenceFromSubmitHandle(SubmitHandle handle) const {\n  return device_.getVulkanContext().getVkFenceFromSubmitHandle(handle);\n}\n\nbool PlatformDevice::waitOnSubmitHandle(SubmitHandle handle, uint64_t timeoutNanoseconds) const {\n  if (handle == 0) {\n    IGL_LOG_ERROR(\"Invalid submit handle passed to waitOnSubmitHandle\");\n    return false;\n  }\n\n  const auto& ctx = device_.getVulkanContext();\n  const auto& immediateCommands = ctx.immediate_;\n\n  return immediateCommands->wait(VulkanImmediateCommands::SubmitHandle(handle),\n                                 timeoutNanoseconds) != VK_TIMEOUT;\n}\n\nvoid PlatformDevice::deferredTask(std::packaged_task<void()>&& task, SubmitHandle handle) const {\n  if (!handle) {\n    IGL_LOG_ERROR(\"Invalid submit handle passed to PlatformDevice::deferredTask()\");\n    return;\n  }\n\n  device_.getVulkanContext().deferredTask(std::move(task),\n                                          VulkanImmediateCommands::SubmitHandle(handle));\n}\n\nint PlatformDevice::getFenceFdFromSubmitHandle(SubmitHandle handle) const {\n  return device_.getVulkanContext().getFenceFdFromSubmitHandle(handle);\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/PlatformDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <future>\n#include <igl/PlatformDevice.h>\n#include <igl/Texture.h>\n#include <igl/vulkan/Common.h>\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\nstruct AHardwareBuffer;\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\nnamespace igl::vulkan {\n\nclass Device;\n\n/// @brief Implements the igl::IPlatformDevice interface\nclass PlatformDevice : public IPlatformDevice {\n public:\n  static constexpr igl::PlatformDeviceType kType = igl::PlatformDeviceType::Vulkan;\n\n  explicit PlatformDevice(Device& device);\n  ~PlatformDevice() override = default;\n\n  /// Creates a Depth Texture through the underlying VulkanSwapChain\n  /// This currently is for development purposes only and will be removed in\n  /// the future;\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::shared_ptr<ITexture> createTextureFromNativeDepth(uint32_t width,\n                                                         uint32_t height,\n                                                         Result* outResult);\n\n  /// Creates a texture from a native drawable surface\n  /// @param outResult optional result\n  /// @return pointer to generated Texture or nullptr\n  std::shared_ptr<ITexture> createTextureFromNativeDrawable(Result* outResult);\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n  std::shared_ptr<ITexture> createTextureWithSharedMemory(const TextureDesc& desc,\n                                                          Result* outResult) const;\n  std::shared_ptr<ITexture> createTextureWithSharedMemory(AHardwareBuffer* buffer,\n                                                          Result* outResult) const;\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n  /// @param handle The handle to the GPU Fence\n  /// @return The Vulkan fence associated with the handle\n  [[nodiscard]] VkFence getVkFenceFromSubmitHandle(SubmitHandle handle) const;\n\n  /// Waits on the GPU Fence associated with the handle\n  /// @param handle The handle to the GPU Fence\n  /// @return 'true' when ready or 'false' on time out (can be ignored)\n  // NOLINTNEXTLINE(modernize-use-nodiscard)\n  bool waitOnSubmitHandle(SubmitHandle handle, uint64_t timeoutNanoseconds = UINT64_MAX) const;\n\n  /// Invoke a task when a SubmitHandle is ready\n  void deferredTask(std::packaged_task<void()>&& task, SubmitHandle handle) const;\n\n  /// Android only for now - Creates the file descriptor for the underlying VkFence\n  /// @param handle The handle to the GPU Fence\n  /// @return The fd for the Vulkan Fence associated with the handle\n#if defined(IGL_PLATFORM_ANDROID) && defined(VK_KHR_external_fence_fd)\n  [[nodiscard]] int getFenceFdFromSubmitHandle(SubmitHandle handle) const;\n#endif\n\n  /// Clear the cached textures\n  void clear() {\n    nativeDrawableTextures_.clear();\n    nativeDepthTexture_ = nullptr;\n  }\n\n protected:\n  [[nodiscard]] bool isType(PlatformDeviceType t) const noexcept override {\n    return t == kType;\n  }\n\n private:\n  Device& device_;\n  std::vector<std::shared_ptr<ITexture>> nativeDrawableTextures_;\n  std::shared_ptr<ITexture> nativeDepthTexture_;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/RenderCommandEncoder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/RenderCommandEncoder.h>\n\n#include <algorithm>\n#include <array>\n#include <igl/IGLSafeC.h>\n#include <igl/RenderPass.h>\n#include <igl/vulkan/Buffer.h>\n#include <igl/vulkan/CommandBuffer.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/Framebuffer.h>\n#include <igl/vulkan/RenderPipelineState.h>\n#include <igl/vulkan/SamplerState.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanRenderPassBuilder.h>\n#include <igl/vulkan/VulkanTexture.h>\n#include <igl/vulkan/util/SpvReflection.h>\n\nnamespace {\n\nVkAttachmentLoadOp loadActionToVkAttachmentLoadOp(igl::LoadAction a) {\n  using igl::LoadAction;\n  switch (a) {\n  case LoadAction::DontCare:\n    return VK_ATTACHMENT_LOAD_OP_DONT_CARE;\n  case LoadAction::Load:\n    return VK_ATTACHMENT_LOAD_OP_LOAD;\n  case LoadAction::Clear:\n    return VK_ATTACHMENT_LOAD_OP_CLEAR;\n  }\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n  return VK_ATTACHMENT_LOAD_OP_DONT_CARE;\n}\n\nVkAttachmentStoreOp storeActionToVkAttachmentStoreOp(igl::StoreAction a) {\n  using igl::StoreAction;\n  switch (a) {\n  case StoreAction::DontCare:\n    return VK_ATTACHMENT_STORE_OP_DONT_CARE;\n  case StoreAction::Store:\n    return VK_ATTACHMENT_STORE_OP_STORE;\n  case StoreAction::MsaaResolve:\n    // for MSAA resolve, we have to store data into a special \"resolve\" attachment\n    return VK_ATTACHMENT_STORE_OP_DONT_CARE;\n  }\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n  return VK_ATTACHMENT_STORE_OP_DONT_CARE;\n}\n\n} // namespace\n\nnamespace igl::vulkan {\n\nRenderCommandEncoder::RenderCommandEncoder(const std::shared_ptr<CommandBuffer>& commandBuffer,\n                                           VulkanContext& ctx) :\n  IRenderCommandEncoder::IRenderCommandEncoder(commandBuffer),\n  ctx_(ctx),\n  cmdBuffer_(commandBuffer ? commandBuffer->getVkCommandBuffer() : VK_NULL_HANDLE),\n  binder_(commandBuffer.get(), ctx, VK_PIPELINE_BIND_POINT_GRAPHICS) {\n  IGL_PROFILER_FUNCTION();\n  IGL_DEBUG_ASSERT(commandBuffer);\n  IGL_DEBUG_ASSERT(cmdBuffer_ != VK_NULL_HANDLE);\n}\n\nvoid RenderCommandEncoder::initialize(const RenderPassDesc& renderPass,\n                                      const std::shared_ptr<IFramebuffer>& framebuffer,\n                                      const Dependencies& dependencies,\n                                      Result& outResult) {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(&ctx_);\n\n  if (!IGL_DEBUG_VERIFY(cmdBuffer_)) {\n    Result::setResult(&outResult, Result::Code::ArgumentNull);\n    return;\n  }\n\n  processDependencies(dependencies);\n\n  framebuffer_ = framebuffer;\n  dependencies_ = dependencies;\n\n  Result::setOk(&outResult);\n\n  if (!IGL_DEBUG_VERIFY(framebuffer)) {\n    Result::setResult(&outResult, Result::Code::ArgumentNull);\n    return;\n  }\n\n  const FramebufferDesc& desc = static_cast<const Framebuffer&>((*framebuffer)).getDesc();\n\n  std::array<VkClearValue, 2 * IGL_COLOR_ATTACHMENTS_MAX + 2> clearValues;\n  uint32_t numClearValues = 0;\n  uint32_t mipLevel = 0;\n  uint32_t layer = 0;\n\n  VulkanRenderPassBuilder builder;\n\n  if (desc.mode != FramebufferMode::Mono) {\n    if (desc.mode == FramebufferMode::Stereo) {\n      builder.setMultiviewMasks(0x00000003, 0x00000003);\n    } else {\n      IGL_DEBUG_ABORT(\"FramebufferMode::Multiview is not implemented.\");\n    }\n  }\n\n  for (size_t i = 0; i != IGL_COLOR_ATTACHMENTS_MAX; i++) {\n    const auto& attachment = desc.colorAttachments[i];\n    if (!attachment.texture) {\n      continue;\n    }\n\n    const auto& colorTexture = static_cast<Texture&>(*attachment.texture);\n\n    // Specifically using renderPass.colorAttachments.size() in case we somehow\n    // get into this loop even when renderPass.colorAttachments.empty() == true\n    if (i >= renderPass.colorAttachments.size()) {\n      Result::setResult(\n          &outResult,\n          Result::Code::ArgumentInvalid,\n          \"Framebuffer color attachment count larger than renderPass color attachment count\");\n      IGL_DEBUG_ABORT(outResult.message.c_str());\n      return;\n    }\n\n    const auto& descColor = renderPass.colorAttachments[i];\n    clearValues[numClearValues++] = VkClearValue{.color = {.float32 = {\n                                                               descColor.clearColor.r,\n                                                               descColor.clearColor.g,\n                                                               descColor.clearColor.b,\n                                                               descColor.clearColor.a,\n                                                           }}};\n    const auto colorLayer = getVkLayer(colorTexture.getType(), descColor.face, descColor.layer);\n    if (mipLevel) {\n      IGL_DEBUG_ASSERT(descColor.mipLevel == mipLevel,\n                       \"All color attachments should have the same mip-level\");\n    }\n    if (layer) {\n      IGL_DEBUG_ASSERT(colorLayer == layer,\n                       \"All color attachments should have the same face or layer\");\n    }\n    mipLevel = descColor.mipLevel;\n    layer = colorLayer;\n    const auto initialLayout = descColor.loadAction == igl::LoadAction::Load\n                                   ? colorTexture.getVulkanTexture().image_.imageLayout_\n                                   : VK_IMAGE_LAYOUT_UNDEFINED;\n    builder.addColor(textureFormatToVkFormat(colorTexture.getFormat()),\n                     loadActionToVkAttachmentLoadOp(descColor.loadAction),\n                     storeActionToVkAttachmentStoreOp(descColor.storeAction),\n                     initialLayout,\n                     VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,\n                     colorTexture.getVulkanTexture().image_.samples_);\n    // handle MSAA\n    if (descColor.storeAction == StoreAction::MsaaResolve) {\n      IGL_DEBUG_ASSERT(attachment.resolveTexture,\n                       \"Framebuffer attachment should contain a resolve texture\");\n      const auto& colorResolveTexture = static_cast<Texture&>(*attachment.resolveTexture);\n      builder.addColorResolve(textureFormatToVkFormat(colorResolveTexture.getFormat()),\n                              VK_ATTACHMENT_LOAD_OP_DONT_CARE,\n                              VK_ATTACHMENT_STORE_OP_STORE);\n      clearValues[numClearValues++] = VkClearValue{.color = {.float32 = {\n                                                                 descColor.clearColor.r,\n                                                                 descColor.clearColor.g,\n                                                                 descColor.clearColor.b,\n                                                                 descColor.clearColor.a,\n                                                             }}};\n    }\n  }\n\n  // Process depth attachment\n  const RenderPassDesc::AttachmentDesc descDepth = renderPass.depthAttachment;\n  const RenderPassDesc::AttachmentDesc descStencil = renderPass.stencilAttachment;\n  hasDepthAttachment_ = false;\n\n  if (framebuffer->getDepthAttachment()) {\n    const auto& depthTexture = static_cast<Texture&>(*(framebuffer->getDepthAttachment()));\n    hasDepthAttachment_ = true;\n    IGL_DEBUG_ASSERT(descDepth.mipLevel == mipLevel,\n                     \"Depth attachment should have the same mip-level as color attachments\");\n    IGL_DEBUG_ASSERT(getVkLayer(depthTexture.getType(), descDepth.face, descDepth.layer) == layer,\n                     \"Depth attachment should have the same face or layer as color attachments\");\n    clearValues[numClearValues++] = VkClearValue{.depthStencil = {\n                                                     .depth = descDepth.clearDepth,\n                                                     .stencil = descStencil.clearStencil,\n                                                 }};\n    const auto initialLayout = descDepth.loadAction == igl::LoadAction::Load\n                                   ? depthTexture.getVulkanTexture().image_.imageLayout_\n                                   : VK_IMAGE_LAYOUT_UNDEFINED;\n    builder.addDepthStencil(depthTexture.getVkFormat(),\n                            loadActionToVkAttachmentLoadOp(descDepth.loadAction),\n                            storeActionToVkAttachmentStoreOp(descDepth.storeAction),\n                            loadActionToVkAttachmentLoadOp(descStencil.loadAction),\n                            storeActionToVkAttachmentStoreOp(descStencil.storeAction),\n                            initialLayout,\n                            VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,\n                            depthTexture.getVulkanTexture().image_.samples_);\n\n    // handle MSAA\n    if (renderPass.depthAttachment.storeAction == StoreAction::MsaaResolve) {\n      IGL_DEBUG_ASSERT(framebuffer->getResolveDepthAttachment(),\n                       \"Framebuffer attachment should contain a resolve depth texture\");\n      const auto& depthResolveTexture =\n          static_cast<Texture&>(*framebuffer->getResolveDepthAttachment());\n      builder.addDepthStencilResolve(depthResolveTexture.getVkFormat(),\n                                     VK_ATTACHMENT_LOAD_OP_DONT_CARE,\n                                     VK_ATTACHMENT_STORE_OP_STORE,\n                                     VK_ATTACHMENT_LOAD_OP_DONT_CARE,\n                                     VK_ATTACHMENT_STORE_OP_STORE,\n                                     initialLayout,\n                                     VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);\n      clearValues[numClearValues++] = VkClearValue{.depthStencil = {\n                                                       .depth = descDepth.clearDepth,\n                                                       .stencil = descStencil.clearStencil,\n                                                   }};\n    }\n  }\n\n  const auto& fb = static_cast<Framebuffer&>(*framebuffer);\n\n  auto renderPassHandle = ctx_.findRenderPass(builder);\n\n  dynamicState_.renderPassIndex = renderPassHandle.index;\n  dynamicState_.depthBiasEnable = false;\n\n  const VkRenderPassBeginInfo bi = fb.getRenderPassBeginInfo(\n      renderPassHandle.pass, mipLevel, layer, numClearValues, clearValues.data());\n\n  const uint32_t width = std::max(fb.getWidth() >> mipLevel, 1u);\n  const uint32_t height = std::max(fb.getHeight() >> mipLevel, 1u);\n  const igl::Viewport viewport = {.x = 0.0f,\n                                  .y = 0.0f,\n                                  .width = (float)width,\n                                  .height = (float)height,\n                                  .minDepth = 0.0f,\n                                  .maxDepth = +1.0f};\n  const igl::ScissorRect scissor = {.x = 0, .y = 0, .width = width, .height = height};\n\n  bindViewport(viewport);\n  bindScissorRect(scissor);\n\n  const VkResult vkResult = ctx_.checkAndUpdateDescriptorSets();\n  if (vkResult != VK_SUCCESS) {\n    IGL_LOG_ERROR(\"checkAndUpdateDescriptorSets returned a non-successful result: %d\", vkResult);\n    Result::setResult(&outResult, Result::Code::RuntimeError, \"Failed to update descriptor sets\");\n    return;\n  }\n\n  ctx_.vf_.vkCmdBeginRenderPass(cmdBuffer_, &bi, VK_SUBPASS_CONTENTS_INLINE);\n\n  isEncoding_ = true;\n\n  Result::setOk(&outResult);\n}\n\nstd::unique_ptr<RenderCommandEncoder> RenderCommandEncoder::create(\n    const std::shared_ptr<CommandBuffer>& commandBuffer,\n    VulkanContext& ctx,\n    const RenderPassDesc& renderPass,\n    const std::shared_ptr<IFramebuffer>& framebuffer,\n    const Dependencies& dependencies,\n    Result* outResult) {\n  IGL_PROFILER_FUNCTION();\n\n  Result ret;\n\n  // NOLINTNEXTLINE(clang-analyzer-cplusplus.NewDeleteLeaks)\n  std::unique_ptr<RenderCommandEncoder> encoder(new RenderCommandEncoder(commandBuffer, ctx));\n  encoder->initialize(renderPass, framebuffer, dependencies, ret);\n\n  Result::setResult(outResult, ret);\n  return ret.isOk() ? std::move(encoder) : nullptr;\n}\n\nvoid RenderCommandEncoder::endEncoding() {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(&ctx_);\n\n  if (!isEncoding_) {\n    return;\n  }\n\n  isEncoding_ = false;\n\n  ctx_.vf_.vkCmdEndRenderPass(cmdBuffer_);\n\n  for (ITexture* IGL_NULLABLE tex : dependencies_.textures) {\n    // TODO: at some point we might want to know in which layout a dependent texture wants to be. We\n    // can implement that by adding a notion of image layouts to IGL.\n    if (!tex) {\n      continue;\n    }\n\n    // Retrieve the VulkanImage to check its usage\n    const auto& vkTex = static_cast<Texture&>(*tex);\n    const igl::vulkan::VulkanImage& img = vkTex.getVulkanTexture().image_;\n\n    if (tex->getProperties().isDepthOrStencil()) {\n      // If the texture has not been marked as a depth/stencil attachment\n      // (TextureDesc::TextureUsageBits::Attachment), don't transition it to a depth/stencil\n      // attchment\n      if (img.usageFlags_ & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) {\n        transitionToDepthStencilAttachment(cmdBuffer_, tex);\n      }\n    } else {\n      // If the texture has not been marked as a color attachment\n      // (TextureDesc::TextureUsageBits::Attachment), don't transition it to a color attchment\n      if (img.usageFlags_ & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) {\n        transitionToColorAttachment(cmdBuffer_, tex);\n      }\n    }\n  }\n  dependencies_ = {};\n\n  // set image layouts after the render pass\n  const FramebufferDesc& desc = static_cast<const Framebuffer&>((*framebuffer_)).getDesc();\n\n  for (const auto& attachment : desc.colorAttachments) {\n    // the image layouts of color attachments must match the final layout of the render pass, which\n    // is always VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL (check VulkanRenderPassBuilder.cpp)\n    overrideImageLayout(attachment.texture.get(), VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);\n    overrideImageLayout(attachment.resolveTexture.get(), VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);\n    transitionToShaderReadOnly(cmdBuffer_, attachment.texture.get());\n    transitionToShaderReadOnly(cmdBuffer_, attachment.resolveTexture.get());\n  }\n\n  // this must match the final layout of the render pass, which is always\n  // VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL (check VulkanRenderPassBuilder.cpp)\n  overrideImageLayout(desc.depthAttachment.texture.get(),\n                      VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);\n  transitionToShaderReadOnly(cmdBuffer_, desc.depthAttachment.texture.get());\n\n#if defined(IGL_WITH_TRACY_GPU)\n  TracyVkCollect(ctx_.tracyCtx_, cmdBuffer_);\n#endif\n}\n\nvoid RenderCommandEncoder::pushDebugGroupLabel(const char* label, const igl::Color& color) const {\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  ivkCmdBeginDebugUtilsLabel(&ctx_.vf_, cmdBuffer_, label, color.toFloatPtr());\n}\n\nvoid RenderCommandEncoder::insertDebugEventLabel(const char* label, const igl::Color& color) const {\n  IGL_DEBUG_ASSERT(label != nullptr && *label);\n  ivkCmdInsertDebugUtilsLabel(&ctx_.vf_, cmdBuffer_, label, color.toFloatPtr());\n}\n\nvoid RenderCommandEncoder::popDebugGroupLabel() const {\n  ivkCmdEndDebugUtilsLabel(&ctx_.vf_, cmdBuffer_);\n}\n\nvoid RenderCommandEncoder::bindViewport(const Viewport& viewport) {\n  IGL_PROFILER_FUNCTION();\n  IGL_PROFILER_ZONE_GPU_VK(\"bindViewport()\", ctx_.tracyCtx_, cmdBuffer_);\n\n  /**\n    Using the negative viewport height Vulkan feature, we make the Vulkan \"top-left\" coordinate\n  system to be \"bottom-left\" as in OpenGL. This way VK_FRONT_FACE_COUNTER_CLOCKWISE and\n  VK_FRONT_FACE_CLOCKWISE use the same winding as in OpenGL. Part of VK_KHR_maintenance1 which is\n  promoted to Vulkan 1.1.\n\n  More details: https://www.saschawillems.de/blog/2019/03/29/flipping-the-vulkan-viewport/\n  **/\n  const VkViewport vp = {\n      .x = viewport.x,\n      .y = viewport.height - viewport.y,\n      .width = viewport.width,\n      .height = -viewport.height,\n      .minDepth = viewport.minDepth,\n      .maxDepth = viewport.maxDepth,\n  };\n  ctx_.vf_.vkCmdSetViewport(cmdBuffer_, 0, 1, &vp);\n}\n\nvoid RenderCommandEncoder::bindScissorRect(const ScissorRect& rect) {\n  const VkRect2D scissor = {\n      .offset = {.x = static_cast<int32_t>(rect.x), .y = static_cast<int32_t>(rect.y)},\n      .extent = {.width = rect.width, .height = rect.height},\n  };\n  ctx_.vf_.vkCmdSetScissor(cmdBuffer_, 0, 1, &scissor);\n}\n\nvoid RenderCommandEncoder::bindRenderPipelineState(\n    const std::shared_ptr<IRenderPipelineState>& pipelineState) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(pipelineState != nullptr)) {\n    return;\n  }\n\n  rps_ = static_cast<RenderPipelineState*>(pipelineState.get());\n\n  IGL_DEBUG_ASSERT(rps_);\n\n  const RenderPipelineDesc& desc = rps_->getRenderPipelineDesc();\n\n  if (desc.shaderStages->getType() == igl::ShaderStagesType::Render) {\n    ensureShaderModule(desc.shaderStages->getVertexModule().get());\n  } else if (desc.shaderStages->getType() == igl::ShaderStagesType::RenderMeshShader) {\n    ensureShaderModule(desc.shaderStages->getMeshModule().get());\n  }\n  ensureShaderModule(desc.shaderStages->getFragmentModule().get());\n\n  const bool hasDepthAttachment = desc.targetDesc.depthAttachmentFormat != TextureFormat::Invalid;\n\n  if (IGL_DEBUG_VERIFY_NOT(hasDepthAttachment != hasDepthAttachment_)) {\n    IGL_LOG_ERROR(\n        \"Make sure your render pass and render pipeline both have matching depth attachments\");\n  }\n\n  binder_.bindPipeline(VK_NULL_HANDLE, nullptr);\n}\n\nvoid RenderCommandEncoder::bindDepthStencilState(\n    const std::shared_ptr<IDepthStencilState>& depthStencilState) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(depthStencilState != nullptr)) {\n    return;\n  }\n  const igl::vulkan::DepthStencilState* state =\n      static_cast<DepthStencilState*>(depthStencilState.get());\n\n  const igl::DepthStencilStateDesc& desc = state->desc;\n\n  dynamicState_.depthWriteEnable = desc.isDepthWriteEnabled;\n  dynamicState_.setDepthCompareOp(compareFunctionToVkCompareOp(desc.compareFunction));\n\n  auto setStencilState = [this](VkStencilFaceFlagBits faceMask, const igl::StencilStateDesc& desc) {\n    dynamicState_.setStencilStateOps(faceMask == VK_STENCIL_FACE_FRONT_BIT,\n                                     stencilOperationToVkStencilOp(desc.stencilFailureOperation),\n                                     stencilOperationToVkStencilOp(desc.depthStencilPassOperation),\n                                     stencilOperationToVkStencilOp(desc.depthFailureOperation),\n                                     compareFunctionToVkCompareOp(desc.stencilCompareFunction));\n    ctx_.vf_.vkCmdSetStencilCompareMask(cmdBuffer_, faceMask, desc.readMask);\n    ctx_.vf_.vkCmdSetStencilWriteMask(cmdBuffer_, faceMask, desc.writeMask);\n  };\n\n  setStencilState(VK_STENCIL_FACE_FRONT_BIT, desc.frontFaceStencil);\n  setStencilState(VK_STENCIL_FACE_BACK_BIT, desc.backFaceStencil);\n}\n\nvoid RenderCommandEncoder::bindBuffer(uint32_t index,\n                                      uint8_t target,\n                                      IBuffer* buffer,\n                                      size_t bufferOffset,\n                                      size_t bufferSize) {\n  (void)target;\n  bindBuffer(index, buffer, bufferOffset, bufferSize);\n}\n\nvoid RenderCommandEncoder::bindBuffer(uint32_t index,\n                                      IBuffer* buffer,\n                                      size_t bufferOffset,\n                                      size_t bufferSize) {\n  IGL_PROFILER_FUNCTION();\n  IGL_PROFILER_ZONE_GPU_VK(\"bindBuffer()\", ctx_.tracyCtx_, cmdBuffer_);\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"%p  bindBuffer(%u, %u)\\n\", cmdBuffer_, index, (uint32_t)bufferOffset);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n\n  if (!IGL_DEBUG_VERIFY(buffer != nullptr)) {\n    return;\n  }\n\n  auto* buf = static_cast<Buffer*>(buffer);\n\n  const bool isUniformBuffer = (buf->getBufferType() & BufferDesc::BufferTypeBits::Uniform) > 0;\n  const bool isStorageBuffer = (buf->getBufferType() & BufferDesc::BufferTypeBits::Storage) > 0;\n  const bool isUniformOrStorageBuffer = isUniformBuffer || isStorageBuffer;\n\n  if (!IGL_DEBUG_VERIFY(isUniformOrStorageBuffer, \"Must be a uniform or a storage buffer\")) {\n    return;\n  }\n  binder_.bindBuffer(index, buf, bufferOffset, bufferSize);\n}\n\nvoid RenderCommandEncoder::bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) {\n  IGL_PROFILER_FUNCTION();\n  IGL_PROFILER_ZONE_GPU_VK(\"bindVertexBuffer()\", ctx_.tracyCtx_, cmdBuffer_);\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\n      \"%p  bindVertexBuffer(%u, %p, %u)\\n\", cmdBuffer_, index, &buffer, (uint32_t)bufferOffset);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n\n  const bool isVertexBuffer = (buffer.getBufferType() & BufferDesc::BufferTypeBits::Vertex) != 0;\n\n  if (!IGL_DEBUG_VERIFY(isVertexBuffer)) {\n    return;\n  }\n\n  if (IGL_DEBUG_VERIFY(index < IGL_ARRAY_NUM_ELEMENTS(isVertexBufferBound_))) {\n    isVertexBufferBound_[index] = true;\n  }\n  VkBuffer vkBuf = static_cast<Buffer&>(buffer).getVkBuffer();\n  const VkDeviceSize offset = bufferOffset;\n  ctx_.vf_.vkCmdBindVertexBuffers(cmdBuffer_, index, 1, &vkBuf, &offset);\n}\n\nvoid RenderCommandEncoder::bindIndexBuffer(IBuffer& buffer,\n                                           IndexFormat format,\n                                           size_t bufferOffset) {\n  const auto& buf = static_cast<Buffer&>(buffer);\n\n  IGL_DEBUG_ASSERT(buf.getBufferUsageFlags() & VK_BUFFER_USAGE_INDEX_BUFFER_BIT,\n                   \"Did you forget to specify BufferTypeBits::Index on your buffer?\");\n\n  auto indexFormatToVkIndexType = [](IndexFormat fmt, bool has8BitIndices) -> VkIndexType {\n    switch (fmt) {\n    case igl::IndexFormat::UInt8:\n      return IGL_DEBUG_VERIFY(has8BitIndices) ? VK_INDEX_TYPE_UINT8_EXT : VK_INDEX_TYPE_UINT16;\n    case igl::IndexFormat::UInt16:\n      return VK_INDEX_TYPE_UINT16;\n    case igl::IndexFormat::UInt32:\n      return VK_INDEX_TYPE_UINT32;\n    };\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return VK_INDEX_TYPE_UINT16;\n  };\n\n  const VkIndexType type =\n      indexFormatToVkIndexType(format, ctx_.features_.has_VK_EXT_index_type_uint8);\n\n  ctx_.vf_.vkCmdBindIndexBuffer(cmdBuffer_, buf.getVkBuffer(), bufferOffset, type);\n}\n\nvoid RenderCommandEncoder::bindBytes(size_t /*index*/,\n                                     uint8_t /*target*/,\n                                     const void* /*data*/,\n                                     size_t /*length*/) {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid RenderCommandEncoder::bindPushConstants(const void* data, size_t length, size_t offset) {\n  IGL_PROFILER_FUNCTION();\n  IGL_PROFILER_ZONE_GPU_VK(\"bindPushConstants()\", ctx_.tracyCtx_, cmdBuffer_);\n\n  IGL_DEBUG_ASSERT(length % 4 == 0); // VUID-vkCmdPushConstants-size-00369: size must be a multiple\n                                     // of 4\n\n  IGL_DEBUG_ASSERT(rps_, \"Did you forget to call bindRenderPipelineState()?\");\n  IGL_DEBUG_ASSERT(rps_->pushConstantRange.size,\n                   \"Currently bound render pipeline state has no push constants\");\n  IGL_DEBUG_ASSERT(offset + length <= rps_->pushConstantRange.offset + rps_->pushConstantRange.size,\n                   \"Push constants size exceeded\");\n\n  if (!rps_->pipelineLayout) {\n    // bring a pipeline layout into existence - we don't really care about the dynamic state here\n    (void)rps_->getVkPipeline(dynamicState_);\n  }\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"%p vkCmdPushConstants(%u) - GRAPHICS\\n\", cmdBuffer_, length);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n  ctx_.vf_.vkCmdPushConstants(cmdBuffer_,\n                              rps_->getVkPipelineLayout(),\n                              rps_->pushConstantRange.stageFlags,\n                              (uint32_t)offset,\n                              (uint32_t)length,\n                              data);\n}\n\nvoid RenderCommandEncoder::bindSamplerState(size_t index,\n                                            uint8_t target,\n                                            ISamplerState* samplerState) {\n  IGL_PROFILER_FUNCTION();\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"%p  bindSamplerState(%u, %u)\\n\", cmdBuffer_, (uint32_t)index, (uint32_t)target);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n\n  if (!IGL_DEBUG_VERIFY(target == igl::BindTarget::kFragment ||\n                            target == igl::BindTarget::kVertex ||\n                            target == igl::BindTarget::kAllGraphics,\n                        \"Invalid sampler target\")) {\n    return;\n  }\n\n  binder_.bindSamplerState(index, static_cast<SamplerState*>(samplerState));\n}\n\nvoid RenderCommandEncoder::bindTexture(size_t index, uint8_t target, ITexture* texture) {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_DEBUG_ASSERT(pendingBindGroupTexture_.empty(),\n                   \"A texture BindGroup was already bound to this command encoder. You can bind \"\n                   \"individual textures again only after a draw call.\");\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"%p  bindTexture(%u, %u)\\n\", cmdBuffer_, (uint32_t)index, (uint32_t)target);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n\n  if (!IGL_DEBUG_VERIFY(target == igl::BindTarget::kFragment ||\n                            target == igl::BindTarget::kVertex ||\n                            target == igl::BindTarget::kAllGraphics,\n                        \"Invalid texture target\")) {\n    return;\n  }\n\n  binder_.bindTexture(index, static_cast<Texture*>(texture));\n}\n\nvoid RenderCommandEncoder::bindTexture(size_t index, ITexture* texture) {\n  bindTexture(index, igl::BindTarget::kFragment, texture);\n}\n\nvoid RenderCommandEncoder::bindUniform(const UniformDesc& /*uniformDesc*/, const void* /*data*/) {\n  // DO NOT IMPLEMENT!\n  // This is only for backends that MUST use single uniforms in some situations.\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n}\n\nvoid RenderCommandEncoder::draw(size_t vertexCount,\n                                uint32_t instanceCount,\n                                uint32_t firstVertex,\n                                uint32_t baseInstance) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DRAW);\n  IGL_PROFILER_ZONE_GPU_COLOR_VK(\"draw()\", ctx_.tracyCtx_, cmdBuffer_, IGL_PROFILER_COLOR_DRAW);\n\n  ctx_.drawCallCount_ += drawCallCountEnabled_;\n\n  if (vertexCount == 0) {\n    // IGL/OpenGL tests rely on this behavior due to how state caching is organized over there.\n    // If we do not return here, Validation Layers will complain.\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(rps_, \"Did you forget to call bindRenderPipelineState()?\");\n\n  ensureVertexBuffers();\n\n  flushDynamicState();\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"%p vkCmdDraw(%u, %u, %u, %u)\\n\",\n               cmdBuffer_,\n               (uint32_t)vertexCount,\n               instanceCount,\n               firstVertex,\n               baseInstance);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n\n  ctx_.vf_.vkCmdDraw(cmdBuffer_, (uint32_t)vertexCount, instanceCount, firstVertex, baseInstance);\n}\n\nvoid RenderCommandEncoder::drawIndexed(size_t indexCount,\n                                       uint32_t instanceCount,\n                                       uint32_t firstIndex,\n                                       int32_t vertexOffset,\n                                       uint32_t baseInstance) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DRAW);\n  IGL_PROFILER_ZONE_GPU_COLOR_VK(\n      \"drawIndexed()\", ctx_.tracyCtx_, cmdBuffer_, IGL_PROFILER_COLOR_DRAW);\n\n  ctx_.drawCallCount_ += drawCallCountEnabled_;\n\n  if (indexCount == 0) {\n    // IGL/OpenGL tests rely on this behavior due to how state caching is organized over there.\n    // If we do not return here, Validation Layers will complain.\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(rps_, \"Did you forget to call bindRenderPipelineState()?\");\n\n  ensureVertexBuffers();\n\n  flushDynamicState();\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"%p vkCmdDrawIndexed(%u, %u, %u, %i, %u)\\n\",\n               cmdBuffer_,\n               (uint32_t)indexCount,\n               instanceCount,\n               firstIndex,\n               vertexOffset,\n               baseInstance);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n  ctx_.vf_.vkCmdDrawIndexed(\n      cmdBuffer_, (uint32_t)indexCount, instanceCount, firstIndex, vertexOffset, baseInstance);\n}\n\nvoid RenderCommandEncoder::drawMeshTasks(const Dimensions& threadgroupsPerGrid,\n                                         const Dimensions& /*threadsPerTaskThreadgroup*/,\n                                         const Dimensions& /*threadsPerMeshThreadgroup*/) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DRAW);\n  IGL_PROFILER_ZONE_GPU_COLOR_VK(\n      \"drawMeshTasks()\", ctx_.tracyCtx_, cmdBuffer_, IGL_PROFILER_COLOR_DRAW);\n\n  if (!ctx_.features().has_VK_EXT_mesh_shader) {\n    IGL_DEBUG_ASSERT(false, \"Mesh shaders require VK_EXT_mesh_shader extension.\");\n    return;\n  }\n\n  ctx_.drawCallCount_ += drawCallCountEnabled_;\n\n  IGL_DEBUG_ASSERT(rps_, \"Did you forget to call bindRenderPipelineState()?\");\n\n  flushDynamicState();\n\n  ctx_.vf_.vkCmdDrawMeshTasksEXT(\n      cmdBuffer_, threadgroupsPerGrid.width, threadgroupsPerGrid.height, threadgroupsPerGrid.depth);\n}\n\nvoid RenderCommandEncoder::multiDrawIndirect(IBuffer& indirectBuffer,\n                                             size_t indirectBufferOffset,\n                                             uint32_t drawCount,\n                                             uint32_t stride) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DRAW);\n  IGL_PROFILER_ZONE_GPU_COLOR_VK(\n      \"multiDrawIndirect()\", ctx_.tracyCtx_, cmdBuffer_, IGL_PROFILER_COLOR_DRAW);\n\n  IGL_DEBUG_ASSERT(rps_, \"Did you forget to call bindRenderPipelineState()?\");\n\n  ensureVertexBuffers();\n\n  flushDynamicState();\n\n  ctx_.drawCallCount_ += drawCallCountEnabled_;\n\n  const igl::vulkan::Buffer* bufIndirect = static_cast<Buffer*>(&indirectBuffer);\n\n  ctx_.vf_.vkCmdDrawIndirect(cmdBuffer_,\n                             bufIndirect->getVkBuffer(),\n                             indirectBufferOffset,\n                             drawCount,\n                             stride ? stride : sizeof(VkDrawIndirectCommand));\n}\n\nvoid RenderCommandEncoder::multiDrawIndexedIndirect(IBuffer& indirectBuffer,\n                                                    size_t indirectBufferOffset,\n                                                    uint32_t drawCount,\n                                                    uint32_t stride) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DRAW);\n  IGL_PROFILER_ZONE_GPU_COLOR_VK(\n      \"multiDrawIndexedIndirect()\", ctx_.tracyCtx_, cmdBuffer_, IGL_PROFILER_COLOR_DRAW);\n\n  IGL_DEBUG_ASSERT(rps_, \"Did you forget to call bindRenderPipelineState()?\");\n\n  ensureVertexBuffers();\n\n  flushDynamicState();\n\n  ctx_.drawCallCount_ += drawCallCountEnabled_;\n\n  const igl::vulkan::Buffer* bufIndirect = static_cast<Buffer*>(&indirectBuffer);\n\n  ctx_.vf_.vkCmdDrawIndexedIndirect(cmdBuffer_,\n                                    bufIndirect->getVkBuffer(),\n                                    indirectBufferOffset,\n                                    drawCount,\n                                    stride ? stride : sizeof(VkDrawIndexedIndirectCommand));\n}\n\nvoid RenderCommandEncoder::setStencilReferenceValue(uint32_t value) {\n  IGL_PROFILER_FUNCTION();\n\n  ctx_.vf_.vkCmdSetStencilReference(\n      cmdBuffer_, VK_STENCIL_FACE_FRONT_BIT | VK_STENCIL_FACE_BACK_BIT, value);\n}\n\nvoid RenderCommandEncoder::setBlendColor(const Color& color) {\n  IGL_PROFILER_FUNCTION();\n\n  ctx_.vf_.vkCmdSetBlendConstants(cmdBuffer_, color.toFloatPtr());\n}\n\nvoid RenderCommandEncoder::setDepthBias(float depthBias, float slopeScale, float clamp) {\n  IGL_PROFILER_FUNCTION();\n\n  dynamicState_.depthBiasEnable = true;\n  ctx_.vf_.vkCmdSetDepthBias(cmdBuffer_, depthBias, clamp, slopeScale);\n}\n\nbool RenderCommandEncoder::setDrawCallCountEnabled(bool value) {\n  IGL_PROFILER_FUNCTION();\n\n  const auto returnVal = drawCallCountEnabled_ > 0;\n  drawCallCountEnabled_ = static_cast<uint32_t>(value);\n  return returnVal;\n}\n\nvoid RenderCommandEncoder::flushDynamicState() {\n  IGL_PROFILER_FUNCTION();\n\n  binder_.bindPipeline(rps_->getVkPipeline(dynamicState_), &rps_->getSpvModuleInfo());\n\n  const VkPipelineBindPoint bindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;\n\n  if (!pendingBindGroupTexture_.empty()) {\n    VkDescriptorSet dset = ctx_.getBindGroupDescriptorSet(pendingBindGroupTexture_);\n    VkPipelineLayout layout = rps_->getVkPipelineLayout();\n\n    const uint32_t usageMaskPipeline = rps_->getSpvModuleInfo().usageMaskTextures;\n    const uint32_t usageMaskBindGroup = ctx_.getBindGroupUsageMask(pendingBindGroupTexture_);\n\n    if (!IGL_DEBUG_VERIFY(usageMaskPipeline == usageMaskBindGroup)) {\n      IGL_LOG_ERROR(\n          \"Texture bind group is not compatible with the current IRenderPipelineState '%s'\\n\",\n          rps_->getRenderPipelineDesc().debugName.c_str());\n      IGL_LOG_INFO(IGL_FORMAT(\"Bind group textures mask: {:b}\\n\", usageMaskBindGroup).c_str());\n      IGL_LOG_INFO(IGL_FORMAT(\"Pipeline expects        : {:b}\\n\", usageMaskPipeline).c_str());\n      return;\n    }\n\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkCmdBindDescriptorSets(%u) - textures bind group\\n\", cmdBuffer_);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    ctx_.vf_.vkCmdBindDescriptorSets(\n        cmdBuffer_, bindPoint, layout, kBindPoint_CombinedImageSamplers, 1, &dset, 0, nullptr);\n    // This is necessary to support a mix of BindGroups and bindTexture() calls in the same command\n    // encoder. A typical use case for that is running ImGui rendering etc.\n    binder_.isDirtyFlags_ &= ~igl::vulkan::ResourcesBinder::DirtyFlagBits_Textures;\n    pendingBindGroupTexture_ = {}; // reset\n  }\n\n  if (!pendingBindGroupBuffer_.empty()) {\n    VkDescriptorSet dset = ctx_.getBindGroupDescriptorSet(pendingBindGroupBuffer_);\n    VkPipelineLayout layout = rps_->getVkPipelineLayout();\n\n    const uint32_t usageMaskPipeline = rps_->getSpvModuleInfo().usageMaskBuffers;\n    const uint32_t usageMaskBindGroup = ctx_.getBindGroupUsageMask(pendingBindGroupBuffer_);\n\n    if (!IGL_DEBUG_VERIFY(usageMaskPipeline == usageMaskBindGroup)) {\n      IGL_LOG_ERROR(\n          \"Buffer bind group is not compatible with the current IRenderPipelineState '%s'\\n\",\n          rps_->getRenderPipelineDesc().debugName.c_str());\n      IGL_LOG_INFO(IGL_FORMAT(\"Bind group buffers mask: {:b}\\n\", usageMaskBindGroup).c_str());\n      IGL_LOG_INFO(IGL_FORMAT(\"Pipeline expects       : {:b}\\n\", usageMaskPipeline).c_str());\n      return;\n    }\n\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkCmdBindDescriptorSets(%u) - buffers bind group\\n\", cmdBuffer_);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    ctx_.vf_.vkCmdBindDescriptorSets(cmdBuffer_,\n                                     bindPoint,\n                                     layout,\n                                     kBindPoint_Buffers,\n                                     1,\n                                     &dset,\n                                     numDynamicOffsets_,\n                                     dynamicOffsets_);\n    // This is necessary to support a mix of BindGroups and bindBuffer() calls in the same command\n    // encoder.\n    binder_.isDirtyFlags_ &= ~igl::vulkan::ResourcesBinder::DirtyFlagBits_Buffers;\n    pendingBindGroupBuffer_ = {}; // reset\n  }\n\n  binder_.updateBindings(rps_->getVkPipelineLayout(), *rps_);\n\n  if (ctx_.config_.enableDescriptorIndexing) {\n    VkDescriptorSet dset = ctx_.getBindlessVkDescriptorSet();\n\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkCmdBindDescriptorSets(GRAPHICS) - bindless\\n\", cmdBuffer_);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    ctx_.vf_.vkCmdBindDescriptorSets(cmdBuffer_,\n                                     VK_PIPELINE_BIND_POINT_GRAPHICS,\n                                     rps_->getVkPipelineLayout(),\n                                     kBindPoint_Bindless,\n                                     1,\n                                     &dset,\n                                     0,\n                                     nullptr);\n  }\n}\n\nvoid RenderCommandEncoder::ensureVertexBuffers() {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(rps_)) {\n    return;\n  }\n\n  const igl::vulkan::VertexInputState* vi =\n      static_cast<VertexInputState*>(rps_->getRenderPipelineDesc().vertexInputState.get());\n\n  if (!vi) {\n    // no vertex input is perfectly valid\n    return;\n  }\n\n  const VertexInputStateDesc& desc = vi->desc;\n\n  IGL_DEBUG_ASSERT(desc.numInputBindings <= IGL_ARRAY_NUM_ELEMENTS(isVertexBufferBound_));\n\n  for (size_t i = 0; i != desc.numAttributes; i++) {\n    [[maybe_unused]] const size_t index = desc.attributes[i].bufferIndex;\n    IGL_DEBUG_ASSERT(index < IGL_ARRAY_NUM_ELEMENTS(isVertexBufferBound_));\n    if (!isVertexBufferBound_[index]) {\n      // TODO: fix client apps and uncomment\n      // IGL_DEBUG_ABORT(\n      //                \"Did you forget to call bindBuffer() for one of your vertex input\n      //                buffers?\");\n      IGL_LOG_ERROR_ONCE(\n          \"Did you forget to call bindBuffer() for one of your vertex input buffers?\");\n    }\n  }\n}\n\nvoid RenderCommandEncoder::blitColorImage(const igl::vulkan::VulkanImage& srcImage,\n                                          const igl::vulkan::VulkanImage& destImage,\n                                          const igl::TextureRangeDesc& srcRange,\n                                          const igl::TextureRangeDesc& destRange) {\n  const VkImageSubresourceRange srcResourceRange = {\n      .aspectMask = srcImage.getImageAspectFlags(),\n      .baseMipLevel = srcRange.mipLevel,\n      .levelCount = srcRange.numMipLevels,\n      .baseArrayLayer = srcRange.layer,\n      .layerCount = srcRange.numLayers,\n  };\n  const VkImageSubresourceRange destSubresourceRange = {\n      .aspectMask = destImage.getImageAspectFlags(),\n      .baseMipLevel = destRange.mipLevel,\n      .levelCount = destRange.numMipLevels,\n      .baseArrayLayer = destRange.layer,\n      .layerCount = destRange.numLayers,\n  };\n  srcImage.transitionLayout(cmdBuffer_,\n                            VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n                            VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,\n                            VK_PIPELINE_STAGE_TRANSFER_BIT,\n                            srcResourceRange);\n\n  destImage.transitionLayout(cmdBuffer_,\n                             VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                             VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT,\n                             VK_PIPELINE_STAGE_TRANSFER_BIT,\n                             destSubresourceRange);\n\n  const std::array<VkOffset3D, 2> srcOffsets = {{\n      {.x = static_cast<int32_t>(srcRange.x), .y = static_cast<int32_t>(srcRange.y), .z = 0},\n      {.x = static_cast<int32_t>(srcRange.width + srcRange.x),\n       .y = static_cast<int32_t>(srcRange.height + srcRange.y),\n       .z = 1},\n  }};\n  const std::array<VkOffset3D, 2> dstOffsets = {{\n      {.x = static_cast<int32_t>(destRange.x), .y = static_cast<int32_t>(destRange.y), .z = 0},\n      {.x = static_cast<int32_t>(destRange.width + destRange.x),\n       .y = static_cast<int32_t>(destRange.height + destRange.y),\n       .z = 1},\n  }};\n  ivkCmdBlitImage(&ctx_.vf_,\n                  cmdBuffer_,\n                  srcImage.getVkImage(),\n                  destImage.getVkImage(),\n                  VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n                  VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                  srcOffsets.data(),\n                  dstOffsets.data(),\n                  VkImageSubresourceLayers{\n                      .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,\n                      .mipLevel = srcRange.mipLevel,\n                      .baseArrayLayer = 0,\n                      .layerCount = 1,\n                  },\n                  VkImageSubresourceLayers{\n                      .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,\n                      .mipLevel = 0,\n                      .baseArrayLayer = 0,\n                      .layerCount = 1,\n                  },\n                  VK_FILTER_LINEAR);\n\n  const bool isSampled = (destImage.getVkImageUsageFlags() & VK_IMAGE_USAGE_SAMPLED_BIT) != 0;\n  const bool isStorage = (destImage.getVkImageUsageFlags() & VK_IMAGE_USAGE_STORAGE_BIT) != 0;\n  const bool isColorAttachment =\n      (destImage.getVkImageUsageFlags() & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) != 0;\n  const bool isDepthStencilAttachment =\n      (destImage.getVkImageUsageFlags() & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0;\n\n  // a ternary cascade...\n  const VkImageLayout targetLayout =\n      isSampled ? VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL\n                : (isStorage ? VK_IMAGE_LAYOUT_GENERAL\n                             : (isColorAttachment\n                                    ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL\n                                    : (isDepthStencilAttachment\n                                           ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL\n                                           : VK_IMAGE_LAYOUT_UNDEFINED)));\n\n  IGL_DEBUG_ASSERT(targetLayout != VK_IMAGE_LAYOUT_UNDEFINED, \"Missing usage flags\");\n\n  // 3. Transition TRANSFER_DST_OPTIMAL into `targetLayout`\n  destImage.transitionLayout(cmdBuffer_,\n                             targetLayout,\n                             VK_PIPELINE_STAGE_TRANSFER_BIT,\n                             VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n                             destSubresourceRange);\n\n  destImage.imageLayout_ = targetLayout;\n}\n\nvoid RenderCommandEncoder::processDependencies(const Dependencies& dependencies) {\n  // 1. Process all textures\n  {\n    const Dependencies* deps = &dependencies;\n\n    while (deps) {\n      for (ITexture* IGL_NULLABLE tex : deps->textures) {\n        if (!tex) {\n          break;\n        }\n        transitionToShaderReadOnly(cmdBuffer_, tex);\n      }\n      deps = deps->next;\n    }\n  }\n\n  // 2. Process all buffers\n  {\n    const Dependencies* deps = &dependencies;\n\n    while (deps) {\n      for (IBuffer* IGL_NULLABLE buf : deps->buffers) {\n        if (!buf) {\n          break;\n        }\n        VkPipelineStageFlags dstStageFlags =\n            VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;\n        const auto* vkBuf = static_cast<const igl::vulkan::Buffer*>(buf);\n        const VkBufferUsageFlags flags = vkBuf->getBufferUsageFlags();\n        if ((flags & VK_BUFFER_USAGE_INDEX_BUFFER_BIT) ||\n            (flags & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)) {\n          dstStageFlags |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT;\n        }\n        if (flags & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT) {\n          dstStageFlags |= VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;\n        }\n        // compute-to-graphics barrier\n        ivkBufferBarrier(&ctx_.vf_,\n                         cmdBuffer_,\n                         vkBuf->getVkBuffer(),\n                         vkBuf->getBufferUsageFlags(),\n                         VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,\n                         dstStageFlags);\n      }\n      deps = deps->next;\n    }\n  }\n}\n\nvoid RenderCommandEncoder::bindBindGroup(BindGroupTextureHandle handle) {\n  IGL_DEBUG_ASSERT(!handle.empty());\n\n  pendingBindGroupTexture_ = handle;\n}\n\nvoid RenderCommandEncoder::bindBindGroup(BindGroupBufferHandle handle,\n                                         uint32_t numDynamicOffsets,\n                                         const uint32_t* dynamicOffsets) {\n  IGL_DEBUG_ASSERT(!handle.empty());\n\n  pendingBindGroupBuffer_ = handle;\n  numDynamicOffsets_ = numDynamicOffsets;\n\n  if (numDynamicOffsets) {\n    IGL_DEBUG_ASSERT(dynamicOffsets);\n    IGL_DEBUG_ASSERT(numDynamicOffsets <= IGL_UNIFORM_BLOCKS_BINDING_MAX);\n\n    checked_memcpy(dynamicOffsets_,\n                   sizeof(dynamicOffsets_),\n                   dynamicOffsets,\n                   numDynamicOffsets * sizeof(uint32_t));\n  }\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/RenderCommandEncoder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Buffer.h>\n#include <igl/CommandEncoder.h>\n#include <igl/Common.h>\n#include <igl/Framebuffer.h>\n#include <igl/RenderCommandEncoder.h>\n#include <igl/vulkan/CommandBuffer.h>\n#include <igl/vulkan/RenderPipelineState.h>\n#include <igl/vulkan/ResourcesBinder.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanImmediateCommands.h>\n\nnamespace igl::vulkan {\n\n/// @brief This class implements the igl::IRenderCommandEncoder interface for Vulkan\nclass RenderCommandEncoder : public IRenderCommandEncoder {\n public:\n  static std::unique_ptr<RenderCommandEncoder> create(\n      const std::shared_ptr<CommandBuffer>& commandBuffer,\n      VulkanContext& ctx,\n      const RenderPassDesc& renderPass,\n      const std::shared_ptr<IFramebuffer>& framebuffer,\n      const Dependencies& dependencies,\n      Result* outResult);\n\n  ~RenderCommandEncoder() override {\n    IGL_DEBUG_ASSERT(!isEncoding_); // did you forget to call endEncoding()?\n    endEncoding();\n  }\n\n  /// @brief Ends encoding for render commands and transitions the layouts of all images bound to\n  /// this encoder back to `VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL`. Also transitions all\n  /// dependent textures to `VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL`\n  void endEncoding() override;\n\n  void pushDebugGroupLabel(const char* label, const igl::Color& color) const override;\n  void insertDebugEventLabel(const char* label, const igl::Color& color) const override;\n  void popDebugGroupLabel() const override;\n\n  /// @brief Sets the viewport size specified in `viewport`. This function flips the viewport in the\n  /// y-direction but retains the same winding as in OpenGL\n  void bindViewport(const Viewport& viewport) override;\n  void bindScissorRect(const ScissorRect& rect) override;\n\n  void bindRenderPipelineState(const std::shared_ptr<IRenderPipelineState>& pipelineState) override;\n  void bindDepthStencilState(const std::shared_ptr<IDepthStencilState>& depthStencilState) override;\n\n  void bindBuffer(uint32_t index,\n                  uint8_t target,\n                  IBuffer* buffer,\n                  size_t bufferOffset,\n                  size_t bufferSize) override;\n  void bindBuffer(uint32_t index, IBuffer* buffer, size_t bufferOffset, size_t bufferSize) override;\n  void bindVertexBuffer(uint32_t index, IBuffer& buffer, size_t bufferOffset) override;\n  void bindIndexBuffer(IBuffer& buffer, IndexFormat format, size_t bufferOffset) override;\n\n  /// @brief Not implemented\n  void bindBytes(size_t index, uint8_t target, const void* data, size_t length) override;\n\n  /// @brief Binds push constants pointed by `data` with `length` bytes starting at `offset`.\n  /// `length` must be a multiple of 4.\n  void bindPushConstants(const void* data, size_t length, size_t offset) override;\n  void bindSamplerState(size_t index, uint8_t target, ISamplerState* samplerState) override;\n\n  void bindTexture(size_t index, uint8_t target, ITexture* texture) override;\n  void bindTexture(size_t index, ITexture* texture) override;\n\n  /// @brief This is only for backends that MUST use single uniforms in some situations. Do not\n  /// implement!\n  void bindUniform(const UniformDesc& uniformDesc, const void* data) override;\n\n  void bindBindGroup(BindGroupTextureHandle handle) override;\n  void bindBindGroup(BindGroupBufferHandle handle,\n                     uint32_t numDynamicOffsets = 0,\n                     const uint32_t* dynamicOffsets = nullptr) override;\n\n  void draw(size_t vertexCount,\n            uint32_t instanceCount,\n            uint32_t firstVertex,\n            uint32_t baseInstance) override;\n  void drawIndexed(size_t indexCount,\n                   uint32_t instanceCount,\n                   uint32_t firstIndex,\n                   int32_t vertexOffset,\n                   uint32_t baseInstance) override;\n  void drawMeshTasks(const Dimensions& threadgroupsPerGrid,\n                     const Dimensions& threadsPerTaskThreadgroup,\n                     const Dimensions& threadsPerMeshThreadgroup) override;\n  void multiDrawIndirect(IBuffer& indirectBuffer,\n                         size_t indirectBufferOffset,\n                         uint32_t drawCount,\n                         uint32_t stride = 0) override;\n  void multiDrawIndexedIndirect(IBuffer& indirectBuffer,\n                                size_t indirectBufferOffset,\n                                uint32_t drawCount,\n                                uint32_t stride = 0) override;\n\n  void setStencilReferenceValue(uint32_t value) override;\n  void setBlendColor(const Color& color) override;\n  void setDepthBias(float depthBias, float slopeScale, float clamp) override;\n\n  [[nodiscard]] VkCommandBuffer getVkCommandBuffer() const {\n    return cmdBuffer_;\n  }\n\n  ResourcesBinder& binder() {\n    return binder_;\n  }\n\n  /// @brief Enables or disables the draw call count. If enabled, it will increment the draw call,\n  /// otherwise it won't. This is used to disable the draw call count when we are doing auxiliary\n  /// draw calls.\n  bool setDrawCallCountEnabled(bool value);\n\n  void blitColorImage(const igl::vulkan::VulkanImage& srcImage,\n                      const igl::vulkan::VulkanImage& destImage,\n                      const igl::TextureRangeDesc& srcRange,\n                      const igl::TextureRangeDesc& destRange);\n\n private:\n  RenderCommandEncoder(const std::shared_ptr<CommandBuffer>& commandBuffer, VulkanContext& ctx);\n\n  /// @brief Ensures that the vertex buffers are bound by performing checks. If the function doesn't\n  /// assert at some point, the vertex buffer(s) is bound correctly.\n  void ensureVertexBuffers();\n  void flushDynamicState();\n\n  void initialize(const RenderPassDesc& renderPass,\n                  const std::shared_ptr<IFramebuffer>& framebuffer,\n                  const Dependencies& dependencies,\n                  Result& outResult);\n  void processDependencies(const Dependencies& dependencies);\n\n private:\n  VulkanContext& ctx_;\n  VkCommandBuffer cmdBuffer_ = VK_NULL_HANDLE;\n  bool isEncoding_ = false;\n  bool hasDepthAttachment_ = false;\n  std::shared_ptr<IFramebuffer> framebuffer_;\n\n  ResourcesBinder binder_;\n\n  RenderPipelineDynamicState dynamicState_;\n\n  /* Used to increment the draw call count. Should either be 0 or 1\n   *  0: When draw call count is disabled during auxiliary draw calls\n   *  1: All other times */\n  uint32_t drawCallCountEnabled_ = 1u;\n\n  bool isVertexBufferBound_[IGL_BUFFER_BINDINGS_MAX] = {};\n\n  Dependencies dependencies_ = {};\n\n  const igl::vulkan::RenderPipelineState* rps_ = nullptr;\n  BindGroupTextureHandle pendingBindGroupTexture_ = {};\n  BindGroupBufferHandle pendingBindGroupBuffer_ = {};\n  uint32_t numDynamicOffsets_ = 0;\n  uint32_t dynamicOffsets_[IGL_UNIFORM_BLOCKS_BINDING_MAX] = {};\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/RenderPipelineReflection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"RenderPipelineReflection.h\"\n\n#include <cstring>\n\nnamespace igl::vulkan {\n\nRenderPipelineReflection::RenderPipelineReflection() = default;\n\nRenderPipelineReflection::RenderPipelineReflection(std::vector<BufferArgDesc> bufferArguments,\n                                                   std::vector<SamplerArgDesc> samplerArguments,\n                                                   std::vector<TextureArgDesc> textureArguments) :\n  bufferArguments_(std::move(bufferArguments)),\n  samplerArguments_(std::move(samplerArguments)),\n  textureArguments_(std::move(textureArguments)) {}\n\nRenderPipelineReflection::~RenderPipelineReflection() = default;\n\nconst std::vector<BufferArgDesc>& RenderPipelineReflection::allUniformBuffers() const {\n  return bufferArguments_;\n}\n\nconst std::vector<SamplerArgDesc>& RenderPipelineReflection::allSamplers() const {\n  return samplerArguments_;\n}\n\nconst std::vector<TextureArgDesc>& RenderPipelineReflection::allTextures() const {\n  return textureArguments_;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/RenderPipelineReflection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/RenderPipelineReflection.h>\n\nnamespace igl::vulkan {\n\n/// @brief This is an empty class for now since Vulkan doesn't have a built-in reflection system. It\n/// implements the igl::IRenderPipelineReflection interface\nclass RenderPipelineReflection final : public IRenderPipelineReflection {\n public:\n  [[nodiscard]] const std::vector<BufferArgDesc>& allUniformBuffers() const override;\n  [[nodiscard]] const std::vector<SamplerArgDesc>& allSamplers() const override;\n  [[nodiscard]] const std::vector<TextureArgDesc>& allTextures() const override;\n\n  RenderPipelineReflection();\n  RenderPipelineReflection(std::vector<BufferArgDesc> bufferArguments,\n                           std::vector<SamplerArgDesc> samplerArguments,\n                           std::vector<TextureArgDesc> textureArguments);\n  ~RenderPipelineReflection() override;\n\n private:\n  std::vector<BufferArgDesc> bufferArguments_;\n  std::vector<SamplerArgDesc> samplerArguments_;\n  std::vector<TextureArgDesc> textureArguments_;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/RenderPipelineState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/RenderPipelineState.h>\n\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/ShaderModule.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanDescriptorSetLayout.h>\n#include <igl/vulkan/VulkanPipelineBuilder.h>\n\nnamespace {\n\nVkPrimitiveTopology primitiveTypeToVkPrimitiveTopology(igl::PrimitiveType t) {\n  switch (t) {\n  case igl::PrimitiveType::Point:\n    return VK_PRIMITIVE_TOPOLOGY_POINT_LIST;\n  case igl::PrimitiveType::Line:\n    return VK_PRIMITIVE_TOPOLOGY_LINE_LIST;\n  case igl::PrimitiveType::LineStrip:\n    return VK_PRIMITIVE_TOPOLOGY_LINE_STRIP;\n  case igl::PrimitiveType::Triangle:\n    return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;\n  case igl::PrimitiveType::TriangleStrip:\n    return VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP;\n  }\n  IGL_DEBUG_ABORT(\"Implement PrimitiveType = %u\", (uint32_t)t);\n  return VK_PRIMITIVE_TOPOLOGY_MAX_ENUM;\n}\n\nVkPolygonMode polygonFillModeToVkPolygonMode(igl::PolygonFillMode mode) {\n  switch (mode) {\n  case igl::PolygonFillMode::Fill:\n    return VK_POLYGON_MODE_FILL;\n  case igl::PolygonFillMode::Line:\n    return VK_POLYGON_MODE_LINE;\n  }\n  IGL_DEBUG_ABORT(\"Implement a missing polygon fill mode\");\n  return VK_POLYGON_MODE_FILL;\n}\n\nVkCullModeFlags cullModeToVkCullMode(igl::CullMode mode) {\n  switch (mode) {\n  case igl::CullMode::Disabled:\n    return VK_CULL_MODE_NONE;\n  case igl::CullMode::Front:\n    return VK_CULL_MODE_FRONT_BIT;\n  case igl::CullMode::Back:\n    return VK_CULL_MODE_BACK_BIT;\n  }\n  IGL_DEBUG_ABORT(\"Implement a missing cull mode\");\n  return VK_CULL_MODE_NONE;\n}\n\nVkFrontFace windingModeToVkFrontFace(igl::WindingMode mode) {\n  switch (mode) {\n  case igl::WindingMode::Clockwise:\n    return VK_FRONT_FACE_CLOCKWISE;\n  case igl::WindingMode::CounterClockwise:\n    return VK_FRONT_FACE_COUNTER_CLOCKWISE;\n  }\n  IGL_DEBUG_ABORT(\"Wrong winding order (cannot be more than 2)\");\n  return VK_FRONT_FACE_CLOCKWISE;\n}\n\nVkFormat vertexAttributeFormatToVkFormat(igl::VertexAttributeFormat fmt) {\n  using igl::VertexAttributeFormat;\n  switch (fmt) {\n  case VertexAttributeFormat::Float1:\n    return VK_FORMAT_R32_SFLOAT;\n  case VertexAttributeFormat::Float2:\n    return VK_FORMAT_R32G32_SFLOAT;\n  case VertexAttributeFormat::Float3:\n    return VK_FORMAT_R32G32B32_SFLOAT;\n  case VertexAttributeFormat::Float4:\n    return VK_FORMAT_R32G32B32A32_SFLOAT;\n  case VertexAttributeFormat::Byte1:\n    return VK_FORMAT_R8_SINT;\n  case VertexAttributeFormat::Byte2:\n    return VK_FORMAT_R8G8_SINT;\n  case VertexAttributeFormat::Byte3:\n    return VK_FORMAT_R8G8B8_SINT;\n  case VertexAttributeFormat::Byte4:\n    return VK_FORMAT_R8G8B8A8_SINT;\n  case VertexAttributeFormat::UByte1:\n    return VK_FORMAT_R8_UINT;\n  case VertexAttributeFormat::UByte2:\n    return VK_FORMAT_R8G8_UINT;\n  case VertexAttributeFormat::UByte3:\n    return VK_FORMAT_R8G8B8_UINT;\n  case VertexAttributeFormat::UByte4:\n    return VK_FORMAT_R8G8B8A8_UINT;\n  case VertexAttributeFormat::Short1:\n    return VK_FORMAT_R16_SINT;\n  case VertexAttributeFormat::Short2:\n    return VK_FORMAT_R16G16_SINT;\n  case VertexAttributeFormat::Short3:\n    return VK_FORMAT_R16G16B16_SINT;\n  case VertexAttributeFormat::Short4:\n    return VK_FORMAT_R16G16B16A16_SINT;\n  case VertexAttributeFormat::UShort1:\n    return VK_FORMAT_R16_UINT;\n  case VertexAttributeFormat::UShort2:\n    return VK_FORMAT_R16G16_UINT;\n  case VertexAttributeFormat::UShort3:\n    return VK_FORMAT_R16G16B16_UINT;\n  case VertexAttributeFormat::UShort4:\n    return VK_FORMAT_R16G16B16A16_UINT;\n    // Normalized variants\n  case VertexAttributeFormat::Byte1Norm:\n    return VK_FORMAT_R8_SNORM;\n  case VertexAttributeFormat::Byte2Norm:\n    return VK_FORMAT_R8G8_SNORM;\n  case VertexAttributeFormat::Byte3Norm:\n    return VK_FORMAT_R8G8B8_SNORM;\n  case VertexAttributeFormat::Byte4Norm:\n    return VK_FORMAT_R8G8B8A8_SNORM;\n  case VertexAttributeFormat::UByte1Norm:\n    return VK_FORMAT_R8_UNORM;\n  case VertexAttributeFormat::UByte2Norm:\n    return VK_FORMAT_R8G8_UNORM;\n  case VertexAttributeFormat::UByte3Norm:\n    return VK_FORMAT_R8G8B8_UNORM;\n  case VertexAttributeFormat::UByte4Norm:\n    return VK_FORMAT_R8G8B8A8_UNORM;\n  case VertexAttributeFormat::Short1Norm:\n    return VK_FORMAT_R16_SNORM;\n  case VertexAttributeFormat::Short2Norm:\n    return VK_FORMAT_R16G16_SNORM;\n  case VertexAttributeFormat::Short3Norm:\n    return VK_FORMAT_R16G16B16_SNORM;\n  case VertexAttributeFormat::Short4Norm:\n    return VK_FORMAT_R16G16B16A16_SNORM;\n  case VertexAttributeFormat::UShort1Norm:\n    return VK_FORMAT_R16_UNORM;\n  case VertexAttributeFormat::UShort2Norm:\n    return VK_FORMAT_R16G16_UNORM;\n  case VertexAttributeFormat::UShort3Norm:\n    return VK_FORMAT_R16G16B16_UNORM;\n  case VertexAttributeFormat::UShort4Norm:\n    return VK_FORMAT_R16G16B16A16_UNORM;\n  // Integer formats\n  case VertexAttributeFormat::Int1:\n    return VK_FORMAT_R32_SINT;\n  case VertexAttributeFormat::Int2:\n    return VK_FORMAT_R32G32_SINT;\n  case VertexAttributeFormat::Int3:\n    return VK_FORMAT_R32G32B32_SINT;\n  case VertexAttributeFormat::Int4:\n    return VK_FORMAT_R32G32B32A32_SINT;\n  case VertexAttributeFormat::UInt1:\n    return VK_FORMAT_R32_UINT;\n  case VertexAttributeFormat::UInt2:\n    return VK_FORMAT_R32G32_UINT;\n  case VertexAttributeFormat::UInt3:\n    return VK_FORMAT_R32G32B32_UINT;\n  case VertexAttributeFormat::UInt4:\n    return VK_FORMAT_R32G32B32A32_UINT;\n  // Half-float\n  case VertexAttributeFormat::HalfFloat1:\n    return VK_FORMAT_R16_SFLOAT;\n  case VertexAttributeFormat::HalfFloat2:\n    return VK_FORMAT_R16G16_SFLOAT;\n  case VertexAttributeFormat::HalfFloat3:\n    return VK_FORMAT_R16G16B16_SFLOAT;\n  case VertexAttributeFormat::HalfFloat4:\n    return VK_FORMAT_R16G16B16A16_SFLOAT;\n  case VertexAttributeFormat::Int_2_10_10_10_REV:\n    return VK_FORMAT_A2B10G10R10_SNORM_PACK32;\n  }\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n  return VK_FORMAT_UNDEFINED;\n}\n\nVkBlendOp blendOpToVkBlendOp(igl::BlendOp value) {\n  using igl::BlendOp;\n  switch (value) {\n  case BlendOp::Add:\n    return VK_BLEND_OP_ADD;\n  case BlendOp::Subtract:\n    return VK_BLEND_OP_SUBTRACT;\n  case BlendOp::ReverseSubtract:\n    return VK_BLEND_OP_REVERSE_SUBTRACT;\n  case BlendOp::Min:\n    return VK_BLEND_OP_MIN;\n  case BlendOp::Max:\n    return VK_BLEND_OP_MAX;\n  }\n\n  IGL_DEBUG_ASSERT_NOT_REACHED();\n  return VK_BLEND_OP_ADD;\n}\n\nVkBool32 checkDualSrcBlendFactor(igl::BlendFactor value, VkBool32 dualSrcBlendSupported) {\n  if (!dualSrcBlendSupported) {\n    switch (value) {\n    case igl::BlendFactor::Src1Color:\n    case igl::BlendFactor::OneMinusSrc1Color:\n    case igl::BlendFactor::Src1Alpha:\n    case igl::BlendFactor::OneMinusSrc1Alpha:\n      IGL_DEBUG_ASSERT_NOT_REACHED();\n      return VK_FALSE;\n    default:\n      return VK_TRUE;\n    }\n  }\n  return VK_TRUE;\n}\n\nVkBlendFactor blendFactorToVkBlendFactor(igl::BlendFactor value) {\n  using igl::BlendFactor;\n  switch (value) {\n  case BlendFactor::Zero:\n    return VK_BLEND_FACTOR_ZERO;\n  case BlendFactor::One:\n    return VK_BLEND_FACTOR_ONE;\n  case BlendFactor::SrcColor:\n    return VK_BLEND_FACTOR_SRC_COLOR;\n  case BlendFactor::OneMinusSrcColor:\n    return VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR;\n  case BlendFactor::DstColor:\n    return VK_BLEND_FACTOR_DST_COLOR;\n  case BlendFactor::OneMinusDstColor:\n    return VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR;\n  case BlendFactor::SrcAlpha:\n    return VK_BLEND_FACTOR_SRC_ALPHA;\n  case BlendFactor::OneMinusSrcAlpha:\n    return VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;\n  case BlendFactor::DstAlpha:\n    return VK_BLEND_FACTOR_DST_ALPHA;\n  case BlendFactor::OneMinusDstAlpha:\n    return VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA;\n  case BlendFactor::BlendColor:\n    return VK_BLEND_FACTOR_CONSTANT_COLOR;\n  case BlendFactor::OneMinusBlendColor:\n    return VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR;\n  case BlendFactor::BlendAlpha:\n    return VK_BLEND_FACTOR_CONSTANT_ALPHA;\n  case BlendFactor::OneMinusBlendAlpha:\n    return VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA;\n  case BlendFactor::SrcAlphaSaturated:\n    return VK_BLEND_FACTOR_SRC_ALPHA_SATURATE;\n  case BlendFactor::Src1Color:\n    return VK_BLEND_FACTOR_SRC1_COLOR;\n  case BlendFactor::OneMinusSrc1Color:\n    return VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR;\n  case BlendFactor::Src1Alpha:\n    return VK_BLEND_FACTOR_SRC1_ALPHA;\n  case BlendFactor::OneMinusSrc1Alpha:\n    return VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA;\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return VK_BLEND_FACTOR_ONE; // default for unsupported values\n  }\n}\n\nVkColorComponentFlags colorWriteMaskToVkColorComponentFlags(igl::ColorWriteMask value) {\n  VkColorComponentFlags result = 0;\n  if (value & igl::kColorWriteBitsRed) {\n    result |= VK_COLOR_COMPONENT_R_BIT;\n  }\n  if (value & igl::kColorWriteBitsGreen) {\n    result |= VK_COLOR_COMPONENT_G_BIT;\n  }\n  if (value & igl::kColorWriteBitsBlue) {\n    result |= VK_COLOR_COMPONENT_B_BIT;\n  }\n  if (value & igl::kColorWriteBitsAlpha) {\n    result |= VK_COLOR_COMPONENT_A_BIT;\n  }\n  return result;\n}\n\n} // namespace\n\nnamespace igl::vulkan {\n\nRenderPipelineState::RenderPipelineState(const igl::vulkan::Device& device,\n                                         RenderPipelineDesc desc) :\n  IRenderPipelineState(desc),\n  PipelineState(device.getVulkanContext(),\n                desc.shaderStages.get(),\n                desc.immutableSamplers,\n                desc.isDynamicBufferMask,\n                desc.debugName.c_str()),\n  device_(device),\n  reflection_(std::make_shared<RenderPipelineReflection>()) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  // Iterate and cache vertex input bindings and attributes\n  const igl::vulkan::VertexInputState* vstate =\n      static_cast<VertexInputState*>(desc_.vertexInputState.get());\n\n  vertexInputStateCreateInfo_ = {.sType =\n                                     VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO};\n\n  if (vstate) {\n    std::array<bool, IGL_BUFFER_BINDINGS_MAX> bufferAlreadyBound{};\n    vkBindings_.reserve(vstate->desc.numInputBindings);\n\n    for (size_t i = 0; i != vstate->desc.numAttributes; i++) {\n      const VertexAttribute& attr = vstate->desc.attributes[i];\n      const VkFormat format = vertexAttributeFormatToVkFormat(attr.format);\n      const size_t bufferIndex = attr.bufferIndex;\n\n      vkAttributes_[i] = VkVertexInputAttributeDescription{\n          .location = (uint32_t)attr.location,\n          .binding = (uint32_t)bufferIndex,\n          .format = format,\n          .offset = (uint32_t)attr.offset,\n      };\n\n      if (!bufferAlreadyBound[bufferIndex]) {\n        bufferAlreadyBound[bufferIndex] = true;\n\n        const VertexInputBinding& binding = vstate->desc.inputBindings[bufferIndex];\n        const VkVertexInputRate rate = (binding.sampleFunction == VertexSampleFunction::PerVertex)\n                                           ? VK_VERTEX_INPUT_RATE_VERTEX\n                                           : VK_VERTEX_INPUT_RATE_INSTANCE;\n        vkBindings_.emplace_back(VkVertexInputBindingDescription{\n            .binding = (uint32_t)bufferIndex,\n            .stride = (uint32_t)binding.stride,\n            .inputRate = rate,\n        });\n      }\n    }\n\n    vertexInputStateCreateInfo_.vertexBindingDescriptionCount =\n        static_cast<uint32_t>(vstate->desc.numInputBindings);\n    vertexInputStateCreateInfo_.pVertexBindingDescriptions = vkBindings_.data();\n    vertexInputStateCreateInfo_.vertexAttributeDescriptionCount =\n        static_cast<uint32_t>(vstate->desc.numAttributes);\n    vertexInputStateCreateInfo_.pVertexAttributeDescriptions = vkAttributes_.data();\n  }\n}\n\nRenderPipelineState::~RenderPipelineState() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n\n  const VulkanContext& ctx = device_.getVulkanContext();\n  VkDevice device = ctx.getVkDevice();\n\n  for (const auto& p : pipelines_) {\n    if (p.second != VK_NULL_HANDLE) {\n      device_.getVulkanContext().deferredTask(\n          std::packaged_task<void()>([vf = &ctx.vf_, device, pipeline = p.second]() {\n            vf->vkDestroyPipeline(device, pipeline, nullptr);\n          }));\n    }\n  }\n  if (pipelineLayout) {\n    ctx.deferredTask(std::packaged_task<void()>(\n        [vf = &ctx.vf_, device = ctx.getVkDevice(), layout = pipelineLayout]() {\n          vf->vkDestroyPipelineLayout(device, layout, nullptr);\n        }));\n  }\n}\n\nVkPipeline RenderPipelineState::getVkPipeline(\n    const RenderPipelineDynamicState& dynamicState) const {\n  const VulkanContext& ctx = device_.getVulkanContext();\n\n  if (ctx.config_.enableDescriptorIndexing) {\n    // the bindless descriptor set layout can be changed in VulkanContext when the number of\n    // existing textures increases\n    if (lastBindlessVkDescriptorSetLayout != ctx.getBindlessVkDescriptorSetLayout()) {\n      // there's a new descriptor set layout - drop the previous Vulkan pipeline\n      VkDevice device = ctx.getVkDevice();\n      for (const auto& p : pipelines_) {\n        if (p.second != VK_NULL_HANDLE) {\n          ctx.deferredTask(\n              std::packaged_task<void()>([vf = &ctx.vf_, device, pipeline = p.second]() {\n                vf->vkDestroyPipeline(device, pipeline, nullptr);\n              }));\n        }\n      }\n      if (pipelineLayout) {\n        ctx.deferredTask(std::packaged_task<void()>(\n            [vf = &ctx.vf_, device = ctx.getVkDevice(), layout = pipelineLayout]() {\n              vf->vkDestroyPipelineLayout(device, layout, nullptr);\n            }));\n      }\n      pipelines_.clear();\n      pipelineLayout = VK_NULL_HANDLE;\n      lastBindlessVkDescriptorSetLayout = ctx.getBindlessVkDescriptorSetLayout();\n    }\n  }\n\n  const auto it = pipelines_.find(dynamicState);\n\n  if (it != pipelines_.end()) {\n    return it->second;\n  }\n\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  if (!pipelineLayout) {\n    // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n    const VkDescriptorSetLayout dsls[] = {\n        dslCombinedImageSamplers->getVkDescriptorSetLayout(),\n        dslBuffers->getVkDescriptorSetLayout(),\n        dslStorageImages->getVkDescriptorSetLayout(),\n        ctx.getBindlessVkDescriptorSetLayout(),\n    };\n\n    const VkPipelineLayoutCreateInfo ci = {\n        .sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO,\n        .setLayoutCount = static_cast<uint32_t>(ctx.config_.enableDescriptorIndexing\n                                                    ? IGL_ARRAY_NUM_ELEMENTS(dsls)\n                                                    : IGL_ARRAY_NUM_ELEMENTS(dsls) - 1u),\n        .pSetLayouts = dsls,\n        .pushConstantRangeCount = info.hasPushConstants ? 1u : 0u,\n        .pPushConstantRanges = info.hasPushConstants ? &pushConstantRange : nullptr,\n    };\n\n    VkDevice device = ctx.getVkDevice();\n    VK_ASSERT(ctx.vf_.vkCreatePipelineLayout(device, &ci, nullptr, &pipelineLayout));\n    VK_ASSERT(\n        ivkSetDebugObjectName(&ctx.vf_,\n                              device,\n                              VK_OBJECT_TYPE_PIPELINE_LAYOUT,\n                              (uint64_t)pipelineLayout,\n                              IGL_FORMAT(\"Pipeline Layout: {}\", desc_.debugName.c_str()).c_str()));\n  }\n\n  const auto& deviceFeatures = ctx.features();\n  const VkBool32 dualSrcBlendSupported =\n      deviceFeatures.vkPhysicalDeviceFeatures2.features.dualSrcBlend;\n\n  // build a new Vulkan pipeline\n  VkRenderPass renderPass = ctx.getRenderPass(dynamicState.renderPassIndex).pass;\n\n  VkPipeline pipeline = VK_NULL_HANDLE;\n\n  // Not all attachments are valid. We need to create color blend attachments only for active\n  // attachments\n  std::vector<VkPipelineColorBlendAttachmentState> colorBlendAttachmentStates;\n  colorBlendAttachmentStates.reserve(desc_.targetDesc.colorAttachments.size());\n  std::for_each(\n      desc_.targetDesc.colorAttachments.begin(),\n      desc_.targetDesc.colorAttachments.end(),\n      [&colorBlendAttachmentStates,\n       dualSrcBlendSupported = dualSrcBlendSupported](auto attachment) mutable {\n        if (attachment.textureFormat != TextureFormat::Invalid) {\n          // In Vulkan color write bits are part of blending.\n          if (!attachment.blendEnabled && attachment.colorWriteMask == igl::kColorWriteBitsAll) {\n            colorBlendAttachmentStates.push_back(VkPipelineColorBlendAttachmentState{\n                .srcColorBlendFactor = VK_BLEND_FACTOR_ONE,\n                .dstColorBlendFactor = VK_BLEND_FACTOR_ZERO,\n                .colorBlendOp = VK_BLEND_OP_ADD,\n                .srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE,\n                .dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO,\n                .alphaBlendOp = VK_BLEND_OP_ADD,\n                .colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT |\n                                  VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT,\n            });\n          } else {\n            checkDualSrcBlendFactor(attachment.srcRGBBlendFactor, dualSrcBlendSupported);\n            checkDualSrcBlendFactor(attachment.dstRGBBlendFactor, dualSrcBlendSupported);\n            checkDualSrcBlendFactor(attachment.srcAlphaBlendFactor, dualSrcBlendSupported);\n            checkDualSrcBlendFactor(attachment.dstAlphaBlendFactor, dualSrcBlendSupported);\n\n            colorBlendAttachmentStates.push_back(VkPipelineColorBlendAttachmentState{\n                .blendEnable = VK_TRUE,\n                .srcColorBlendFactor = blendFactorToVkBlendFactor(attachment.srcRGBBlendFactor),\n                .dstColorBlendFactor = blendFactorToVkBlendFactor(attachment.dstRGBBlendFactor),\n                .colorBlendOp = blendOpToVkBlendOp(attachment.rgbBlendOp),\n                .srcAlphaBlendFactor = blendFactorToVkBlendFactor(attachment.srcAlphaBlendFactor),\n                .dstAlphaBlendFactor = blendFactorToVkBlendFactor(attachment.dstAlphaBlendFactor),\n                .alphaBlendOp = blendOpToVkBlendOp(attachment.alphaBlendOp),\n                .colorWriteMask = colorWriteMaskToVkColorComponentFlags(attachment.colorWriteMask),\n            });\n          }\n        }\n      });\n\n  std::vector<VkPipelineShaderStageCreateInfo> stages;\n\n  if (desc_.shaderStages->getType() == igl::ShaderStagesType::Render) {\n    const auto& vertexModule = desc_.shaderStages->getVertexModule();\n    stages.emplace_back(VkPipelineShaderStageCreateInfo{\n        .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,\n        .stage = VK_SHADER_STAGE_VERTEX_BIT,\n        .module = igl::vulkan::ShaderModule::getVkShaderModule(vertexModule),\n        .pName = vertexModule->info().entryPoint.c_str(),\n    });\n  } else {\n    const auto& taskModule = desc_.shaderStages->getTaskModule();\n    if (taskModule) {\n      stages.emplace_back(VkPipelineShaderStageCreateInfo{\n          .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,\n          .stage = VK_SHADER_STAGE_TASK_BIT_EXT,\n          .module = igl::vulkan::ShaderModule::getVkShaderModule(taskModule),\n          .pName = taskModule->info().entryPoint.c_str(),\n      });\n    }\n\n    const auto& meshModule = desc_.shaderStages->getMeshModule();\n    stages.emplace_back(VkPipelineShaderStageCreateInfo{\n        .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,\n        .stage = VK_SHADER_STAGE_MESH_BIT_EXT,\n        .module = igl::vulkan::ShaderModule::getVkShaderModule(meshModule),\n        .pName = meshModule->info().entryPoint.c_str(),\n    });\n  }\n\n  const auto& fragmentModule = desc_.shaderStages->getFragmentModule();\n  stages.emplace_back(VkPipelineShaderStageCreateInfo{\n      .sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,\n      .stage = VK_SHADER_STAGE_FRAGMENT_BIT,\n      .module = igl::vulkan::ShaderModule::getVkShaderModule(fragmentModule),\n      .pName = fragmentModule->info().entryPoint.c_str(),\n  });\n\n  VK_ASSERT_RETURN_NULL_HANDLE(\n      igl::vulkan::VulkanPipelineBuilder()\n          .dynamicStates({\n              // from Vulkan 1.0\n              VK_DYNAMIC_STATE_VIEWPORT,\n              VK_DYNAMIC_STATE_SCISSOR,\n              VK_DYNAMIC_STATE_DEPTH_BIAS,\n              VK_DYNAMIC_STATE_BLEND_CONSTANTS,\n              VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,\n              VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,\n              VK_DYNAMIC_STATE_STENCIL_REFERENCE,\n          })\n          .primitiveTopology(primitiveTypeToVkPrimitiveTopology(desc_.topology))\n          .depthBiasEnable(dynamicState.depthBiasEnable)\n          .depthCompareOp(dynamicState.getDepthCompareOp(), dynamicState.depthWriteEnable)\n          .depthWriteEnable(dynamicState.depthWriteEnable)\n          .rasterizationSamples(getVulkanSampleCountFlags(desc_.sampleCount))\n          .polygonMode(polygonFillModeToVkPolygonMode(desc_.polygonFillMode))\n          .stencilStateOps(VK_STENCIL_FACE_FRONT_BIT,\n                           dynamicState.getStencilStateFailOp(true),\n                           dynamicState.getStencilStatePassOp(true),\n                           dynamicState.getStencilStateDepthFailOp(true),\n                           dynamicState.getStencilStateCompareOp(true))\n          .stencilStateOps(VK_STENCIL_FACE_BACK_BIT,\n                           dynamicState.getStencilStateFailOp(false),\n                           dynamicState.getStencilStatePassOp(false),\n                           dynamicState.getStencilStateDepthFailOp(false),\n                           dynamicState.getStencilStateCompareOp(false))\n          .shaderStages(stages)\n          .cullMode(cullModeToVkCullMode(desc_.cullMode))\n          .frontFace(windingModeToVkFrontFace(desc_.frontFaceWinding))\n          .vertexInputState(vertexInputStateCreateInfo_)\n          .colorBlendAttachmentStates(colorBlendAttachmentStates)\n          .build(ctx.vf_,\n                 ctx.getVkDevice(),\n                 ctx.pipelineCache_,\n                 pipelineLayout,\n                 renderPass,\n                 &pipeline,\n                 desc_.debugName.c_str()));\n\n  IGL_DEBUG_ASSERT(pipeline != VK_NULL_HANDLE);\n\n  pipelines_[dynamicState] = pipeline;\n\n  // @fb-only\n  // @lint-ignore CLANGTIDY\n  return pipeline;\n}\n\nint RenderPipelineState::getIndexByName(const igl::NameHandle& name, ShaderStage stage) const {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  (void)name;\n  (void)stage;\n  return 0;\n}\n\nint RenderPipelineState::getIndexByName(const std::string& name, ShaderStage stage) const {\n  IGL_DEBUG_ASSERT_NOT_IMPLEMENTED();\n  (void)name;\n  (void)stage;\n  return 0;\n}\n\nstd::shared_ptr<IRenderPipelineReflection> RenderPipelineState::renderPipelineReflection() {\n  return reflection_;\n}\n\nvoid RenderPipelineState::setRenderPipelineReflection(\n    const IRenderPipelineReflection& renderPipelineReflection) {\n  const auto& vulkanReflection =\n      static_cast<const RenderPipelineReflection&>(renderPipelineReflection);\n  auto copy = RenderPipelineReflection(vulkanReflection);\n\n  reflection_ = std::make_shared<RenderPipelineReflection>(std::move(copy));\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/RenderPipelineState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <unordered_map>\n#include <igl/RenderPipelineState.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/PipelineState.h>\n#include <igl/vulkan/RenderPipelineReflection.h>\n\nnamespace igl::vulkan {\n\nclass Device;\n\n/// @brief This class stores all mutable pipeline parameters as member variables and serves as a\n/// hash key for the `RenderPipelineState` class\nclass alignas(sizeof(uint64_t)) RenderPipelineDynamicState {\n  uint32_t depthCompareOp_ : 3;\n\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t stencilFrontFailOp_ : 3;\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t stencilFrontPassOp_ : 3;\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t stencilFrontDepthFailOp_ : 3;\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t stencilFrontCompareOp_ : 3;\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t stencilBackFailOp_ : 3;\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t stencilBackPassOp_ : 3;\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t stencilBackDepthFailOp_ : 3;\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t stencilBackCompareOp_ : 3;\n\n public:\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t renderPassIndex : 8;\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t depthBiasEnable : 1;\n  // Ignore modernize-use-default-member-init\n  // @lint-ignore CLANGTIDY\n  uint32_t depthWriteEnable : 1;\n\n  RenderPipelineDynamicState() {\n    // memset makes sure all padding bits are zero\n    std::memset(this, 0, sizeof(*this));\n    // depth and stencil default state values should be based on DepthStencilStateDesc and\n    // StencilStateDesc in graphics/igl/src/igl/DepthStencilState.h\n    depthCompareOp_ = VK_COMPARE_OP_ALWAYS;\n    stencilFrontFailOp_ = VK_STENCIL_OP_KEEP;\n    stencilFrontPassOp_ = VK_STENCIL_OP_KEEP;\n    stencilFrontDepthFailOp_ = VK_STENCIL_OP_KEEP;\n    stencilFrontCompareOp_ = VK_COMPARE_OP_ALWAYS;\n    stencilBackFailOp_ = VK_STENCIL_OP_KEEP;\n    stencilBackPassOp_ = VK_STENCIL_OP_KEEP;\n    stencilBackDepthFailOp_ = VK_STENCIL_OP_KEEP;\n    stencilBackCompareOp_ = VK_COMPARE_OP_ALWAYS;\n    renderPassIndex = 0;\n    depthBiasEnable = false;\n    depthWriteEnable = false;\n  }\n\n  [[nodiscard]] VkCompareOp getDepthCompareOp() const {\n    return static_cast<VkCompareOp>(depthCompareOp_);\n  }\n\n  void setDepthCompareOp(VkCompareOp depthCompareOp) {\n    IGL_DEBUG_ASSERT((depthCompareOp & 0x7) == depthCompareOp, \"Invalid VkCompareOp for depth.\");\n    depthCompareOp_ = depthCompareOp & 0x7;\n  }\n\n  [[nodiscard]] VkStencilOp getStencilStateFailOp(bool front) const {\n    return static_cast<VkStencilOp>(front ? stencilFrontFailOp_ : stencilBackFailOp_);\n  }\n\n  [[nodiscard]] VkStencilOp getStencilStatePassOp(bool front) const {\n    return static_cast<VkStencilOp>(front ? stencilFrontPassOp_ : stencilBackPassOp_);\n  }\n\n  [[nodiscard]] VkStencilOp getStencilStateDepthFailOp(bool front) const {\n    return static_cast<VkStencilOp>(front ? stencilFrontDepthFailOp_ : stencilBackDepthFailOp_);\n  }\n\n  [[nodiscard]] VkCompareOp getStencilStateCompareOp(bool front) const {\n    return static_cast<VkCompareOp>(front ? stencilFrontCompareOp_ : stencilBackCompareOp_);\n  }\n\n  void setStencilStateOps(bool front,\n                          VkStencilOp failOp,\n                          VkStencilOp passOp,\n                          VkStencilOp depthFailOp,\n                          VkCompareOp compareOp) {\n    IGL_DEBUG_ASSERT((failOp & 0x7) == failOp, \"Invalid VkStencilOp for stencil fail.\");\n    IGL_DEBUG_ASSERT((passOp & 0x7) == passOp, \"Invalid VkStencilOp for stencil pass.\");\n    IGL_DEBUG_ASSERT((depthFailOp & 0x7) == depthFailOp, \"Invalid VkStencilOp for depth fail.\");\n    IGL_DEBUG_ASSERT((compareOp & 0x7) == compareOp, \"Invalid VkCompareOp for stencil compare.\");\n\n    if (front) {\n      stencilFrontFailOp_ = failOp & 0x7;\n      stencilFrontPassOp_ = passOp & 0x7;\n      stencilFrontDepthFailOp_ = depthFailOp & 0x7;\n      stencilFrontCompareOp_ = compareOp & 0x7;\n    } else {\n      stencilBackFailOp_ = failOp & 0x7;\n      stencilBackPassOp_ = passOp & 0x7;\n      stencilBackDepthFailOp_ = depthFailOp & 0x7;\n      stencilBackCompareOp_ = compareOp & 0x7;\n    }\n  }\n\n  // comparison operator and hash function for std::unordered_map<>\n  bool operator==(const RenderPipelineDynamicState& other) const {\n    return *(uint64_t*)this == *(uint64_t*)&other;\n  }\n\n  struct HashFunction {\n    uint64_t operator()(const RenderPipelineDynamicState& s) const {\n      return *(const uint64_t*)&s;\n    }\n  };\n};\n\nstatic_assert(sizeof(RenderPipelineDynamicState) == sizeof(uint64_t));\nstatic_assert(alignof(RenderPipelineDynamicState) == sizeof(uint64_t));\n\n/** @brief Implements the igl::IRenderPipelineState interface. In Vulkan, certain render parameters\n * belong to a pipeline, which is immutable, and changing parameters is not possible once a\n * pipeline has been created. IGL, on the other hand, allows some pipeline parameters to be changed.\n * This class manages a hash map internally that automatically tracks all pipeline's instances that\n * are created based on the original parameters provided during the instantiation of the class. A\n * Vulkan pipeline object can be retrieved with the `getVkPipeline()` method by providing its\n * mutable parameters. If a pipeline doesn't exist with those parameters, one is created and\n * returned. Otherwise an existing pipeline with those settings is returned. This class also tracks\n * the pipeline layout in the context. If a pipeline layout change is detected, this class purges\n * all the pipelines that have been created so far.\n */\nclass RenderPipelineState final : public IRenderPipelineState, public PipelineState {\n public:\n  /** @brief Caches the render pipeline parameters passed in `desc` for later use. A pipeline isn't\n   * realized until `getVkPipeline()` is called and all mutable parameters are provided.\n   */\n  RenderPipelineState(const igl::vulkan::Device& device, RenderPipelineDesc desc);\n  ~RenderPipelineState() override;\n\n  /** @brief Creates a pipeline with the base parameters provided during construction and all\n   * mutable ones provided in the `dynamicState` parameter. If a pipeline layout change is detected,\n   * all cached pipelines are discarded.\n   */\n  VkPipeline getVkPipeline(const RenderPipelineDynamicState& dynamicState) const;\n\n private:\n  friend class Device;\n\n  int getIndexByName(const igl::NameHandle& name, ShaderStage stage) const override;\n  int getIndexByName(const std::string& name, ShaderStage stage) const override;\n\n  std::shared_ptr<IRenderPipelineReflection> renderPipelineReflection() override;\n  void setRenderPipelineReflection(\n      const IRenderPipelineReflection& renderPipelineReflection) override;\n\n private:\n  const igl::vulkan::Device& device_;\n\n  VkPipelineVertexInputStateCreateInfo vertexInputStateCreateInfo_{};\n\n  std::vector<VkVertexInputBindingDescription> vkBindings_;\n  std::array<VkVertexInputAttributeDescription, IGL_VERTEX_ATTRIBUTES_MAX> vkAttributes_{};\n\n  // This is empty for now.\n  std::shared_ptr<RenderPipelineReflection> reflection_;\n\n  mutable std::unordered_map<RenderPipelineDynamicState,\n                             VkPipeline,\n                             RenderPipelineDynamicState::HashFunction>\n      pipelines_;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/ResourcesBinder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/ResourcesBinder.h>\n\n#include <igl/vulkan/Buffer.h>\n#include <igl/vulkan/PipelineState.h>\n#include <igl/vulkan/SamplerState.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanBuffer.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanTexture.h>\n\nnamespace igl::vulkan {\n\nResourcesBinder::ResourcesBinder(const CommandBuffer* commandBuffer,\n                                 VulkanContext& ctx,\n                                 VkPipelineBindPoint bindPoint) :\n  ctx_(ctx),\n  cmdBuffer_(commandBuffer ? commandBuffer->getVkCommandBuffer() : VK_NULL_HANDLE),\n  bindPoint_(bindPoint),\n  nextSubmitHandle_(commandBuffer ? commandBuffer->getNextSubmitHandle()\n                                  : VulkanImmediateCommands::SubmitHandle{}) {}\n\nvoid ResourcesBinder::bindBuffer(uint32_t index,\n                                 Buffer* buffer,\n                                 size_t bufferOffset,\n                                 size_t bufferSize) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(index < IGL_UNIFORM_BLOCKS_BINDING_MAX)) {\n    IGL_DEBUG_ABORT(\"Buffer index should not exceed kMaxBindingSlots\");\n    return;\n  }\n\n  const bool isUniformBuffer =\n      ((buffer->getBufferType() & BufferDesc::BufferTypeBits::Uniform) != 0);\n\n  IGL_DEBUG_ASSERT(isUniformBuffer ||\n                       ((buffer->getBufferType() & BufferDesc::BufferTypeBits::Storage) != 0),\n                   \"The buffer must be a uniform or storage buffer\");\n  if (bufferOffset) {\n    const auto& limits = ctx_.getVkPhysicalDeviceProperties().limits;\n    const uint32_t alignment =\n        static_cast<uint32_t>(isUniformBuffer ? limits.minUniformBufferOffsetAlignment\n                                              : limits.minStorageBufferOffsetAlignment);\n    if (!IGL_DEBUG_VERIFY((alignment == 0) || (bufferOffset % alignment == 0))) {\n      IGL_LOG_ERROR(\"`bufferOffset = %u` must be a multiple of `VkPhysicalDeviceLimits::%s = %u`\",\n                    static_cast<uint32_t>(bufferOffset),\n                    isUniformBuffer ? \"minUniformBufferOffsetAlignment\"\n                                    : \"minStorageBufferOffsetAlignment\",\n                    alignment);\n      return;\n    }\n  }\n\n  VkBuffer buf = buffer ? buffer->getVkBuffer() : ctx_.dummyUniformBuffer_->getVkBuffer();\n  VkDescriptorBufferInfo& slot = bindingsBuffers_.buffers[index];\n\n  if (slot.buffer != buf || slot.offset != bufferOffset) {\n    slot = {\n        .buffer = buf,\n        .offset = bufferOffset,\n        .range = bufferSize ? bufferSize : VK_WHOLE_SIZE,\n    };\n    isDirtyFlags_ |= DirtyFlagBits_Buffers;\n  }\n}\n\nvoid ResourcesBinder::bindSamplerState(uint32_t index, SamplerState* samplerState) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(index < IGL_TEXTURE_SAMPLERS_MAX)) {\n    IGL_DEBUG_ABORT(\"Invalid sampler index\");\n    return;\n  }\n\n  VulkanSampler* newSampler = samplerState ? ctx_.samplers_.get(samplerState->sampler_) : nullptr;\n\n  VkSampler sampler = newSampler ? newSampler->vkSampler : VK_NULL_HANDLE;\n\n  if (bindingsTextures_.samplers[index] != sampler) {\n    bindingsTextures_.samplers[index] = sampler;\n    isDirtyFlags_ |= DirtyFlagBits_Textures;\n  }\n}\n\nvoid ResourcesBinder::bindTexture(uint32_t index, Texture* tex) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(index < IGL_TEXTURE_SAMPLERS_MAX)) {\n    IGL_DEBUG_ABORT(\"Invalid texture index\");\n    return;\n  }\n\n  if (tex) {\n    const bool isSampled = tex ? (tex->getUsage() & TextureDesc::TextureUsageBits::Sampled) > 0\n                               : false;\n    const bool isStorage = tex ? (tex->getUsage() & TextureDesc::TextureUsageBits::Storage) > 0\n                               : false;\n\n    if (!IGL_DEBUG_VERIFY(isSampled || isStorage)) {\n      IGL_DEBUG_ABORT(\n          \"Did you forget to specify TextureUsageBits::Sampled or \"\n          \"TextureUsageBits::Storage on your texture? `Sampled` is used for sampling; \"\n          \"`Storage` is used for load/store operations\");\n    }\n  }\n\n  VulkanTexture* newTexture = tex ? &tex->getVulkanTexture() : nullptr;\n\n#if IGL_DEBUG_ABORT_ENABLED\n  if (newTexture) {\n    const igl::vulkan::VulkanImage& img = newTexture->image_;\n    IGL_DEBUG_ASSERT(img.samples_ == VK_SAMPLE_COUNT_1_BIT,\n                     \"Multisampled images cannot be sampled in shaders\");\n    if (bindPoint_ == VK_PIPELINE_BIND_POINT_GRAPHICS) {\n      // If you trip this assert, then you are likely using an IGL texture\n      // that was not rendered to by IGL. If that's the case, then make sure\n      // the underlying image is transitioned to\n      // VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL\n      IGL_DEBUG_ASSERT(img.imageLayout_ == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);\n    } else {\n      IGL_DEBUG_ASSERT(img.imageLayout_ == VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL ||\n                       img.imageLayout_ == VK_IMAGE_LAYOUT_GENERAL);\n    }\n  }\n#endif // IGL_DEBUG_ABORT_ENABLED\n\n  // multisampled images cannot be directly accessed from shaders\n  const bool isTextureAvailable =\n      (newTexture != nullptr) &&\n      ((newTexture->image_.samples_ & VK_SAMPLE_COUNT_1_BIT) == VK_SAMPLE_COUNT_1_BIT);\n  const bool isSampledImage = isTextureAvailable && newTexture->image_.isSampledImage();\n\n  VkImageView imageView = isSampledImage ? newTexture->imageView_.vkImageView : VK_NULL_HANDLE;\n\n  if (bindingsTextures_.textures[index] != imageView) {\n    bindingsTextures_.textures[index] = imageView;\n    isDirtyFlags_ |= DirtyFlagBits_Textures;\n  }\n}\n\nvoid ResourcesBinder::bindStorageImage(uint32_t index, Texture* tex) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!IGL_DEBUG_VERIFY(index < IGL_TEXTURE_SAMPLERS_MAX)) {\n    IGL_DEBUG_ABORT(\"Invalid texture index\");\n    return;\n  }\n\n  const bool isStorage = tex ? (tex->getUsage() & TextureDesc::TextureUsageBits::Storage) > 0\n                             : false;\n\n  if (tex) {\n    if (!IGL_DEBUG_VERIFY(isStorage)) {\n      IGL_DEBUG_ABORT(\"Did you forget to specify TextureUsageBits::Storage on your texture?\");\n    }\n  }\n\n  VulkanTexture* newTexture = tex ? &tex->getVulkanTexture() : nullptr;\n\n#if IGL_DEBUG_ABORT_ENABLED\n  if (newTexture) {\n    const igl::vulkan::VulkanImage& img = newTexture->image_;\n    IGL_DEBUG_ASSERT(img.samples_ == VK_SAMPLE_COUNT_1_BIT,\n                     \"Multisampled images cannot be sampled in shaders\");\n    // If you trip this assert, then you are likely using an IGL texture\n    // that was not rendered to by IGL. If that's the case, then make sure\n    // the underlying image is transitioned to\n    // VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL\n    IGL_DEBUG_ASSERT(img.imageLayout_ == VK_IMAGE_LAYOUT_GENERAL);\n  }\n#endif // IGL_DEBUG_ABORT_ENABLED\n\n  // multisampled images cannot be directly accessed from shaders\n  const bool isTextureAvailable =\n      (newTexture != nullptr) &&\n      ((newTexture->image_.samples_ & VK_SAMPLE_COUNT_1_BIT) == VK_SAMPLE_COUNT_1_BIT);\n  const bool isStorageImage = isTextureAvailable && newTexture->image_.isStorageImage();\n\n  VkImageView imageView = isStorageImage ? newTexture->imageView_.vkImageView : VK_NULL_HANDLE;\n\n  if (bindingsStorageImages_.images[index] != imageView) {\n    bindingsStorageImages_.images[index] = imageView;\n    isDirtyFlags_ |= DirtyFlagBits_StorageImages;\n  }\n}\n\nvoid ResourcesBinder::updateBindings(VkPipelineLayout layout, const vulkan::PipelineState& state) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_UPDATE);\n\n  IGL_DEBUG_ASSERT(layout != VK_NULL_HANDLE);\n\n  if (isDirtyFlags_ & DirtyFlagBits_Textures) {\n    ctx_.updateBindingsTextures(cmdBuffer_,\n                                layout,\n                                bindPoint_,\n                                nextSubmitHandle_,\n                                bindingsTextures_,\n                                *state.dslCombinedImageSamplers,\n                                state.info);\n  }\n  if (isDirtyFlags_ & DirtyFlagBits_Buffers) {\n    ctx_.updateBindingsBuffers(cmdBuffer_,\n                               layout,\n                               bindPoint_,\n                               nextSubmitHandle_,\n                               bindingsBuffers_,\n                               *state.dslBuffers,\n                               state.info);\n  }\n  if (isDirtyFlags_ & DirtyFlagBits_StorageImages) {\n    ctx_.updateBindingsStorageImages(cmdBuffer_,\n                                     layout,\n                                     bindPoint_,\n                                     nextSubmitHandle_,\n                                     bindingsStorageImages_,\n                                     *state.dslStorageImages,\n                                     state.info);\n  }\n\n  isDirtyFlags_ = 0;\n}\n\nvoid ResourcesBinder::bindPipeline(VkPipeline pipeline, const util::SpvModuleInfo* info) {\n  IGL_PROFILER_FUNCTION();\n\n  if (lastPipelineBound_ == pipeline) {\n    return;\n  }\n\n  if (info) {\n    // a new pipeline might want a new descriptors configuration\n    if (!info->buffers.empty()) {\n      isDirtyFlags_ |= DirtyFlagBits_Buffers;\n    }\n    if (!info->textures.empty()) {\n      isDirtyFlags_ |= DirtyFlagBits_Textures;\n    }\n    if (!info->images.empty()) {\n      isDirtyFlags_ |= DirtyFlagBits_StorageImages;\n    }\n  }\n\n  lastPipelineBound_ = pipeline;\n\n  if (pipeline != VK_NULL_HANDLE) {\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkCmdBindPipeline(%s, %p)\\n\",\n                 cmdBuffer_,\n                 bindPoint_ == VK_PIPELINE_BIND_POINT_GRAPHICS ? \"GRAPHICS\" : \"COMPUTE\",\n                 pipeline);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    ctx_.vf_.vkCmdBindPipeline(cmdBuffer_, bindPoint_, pipeline);\n  }\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/ResourcesBinder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n#include <igl/Texture.h>\n#include <igl/vulkan/CommandBuffer.h>\n#include <igl/vulkan/VulkanImmediateCommands.h>\n\nnamespace igl::vulkan {\n\nnamespace util {\nstruct SpvModuleInfo;\n} // namespace util\n\nclass Buffer;\nclass PipelineState;\nclass SamplerState;\nclass Texture;\n\nstruct BindingsBuffers {\n  VkDescriptorBufferInfo buffers[IGL_UNIFORM_BLOCKS_BINDING_MAX] = {};\n};\n\nstruct BindingsTextures {\n  VkImageView textures[IGL_TEXTURE_SAMPLERS_MAX] = {};\n  VkSampler samplers[IGL_TEXTURE_SAMPLERS_MAX] = {};\n};\n\nstruct BindingsStorageImages {\n  VkImageView images[IGL_TEXTURE_SAMPLERS_MAX] = {};\n};\n\n/** @brief Stores uniform and storage buffer bindings, as well as bindings for textures and sampler\n * states for Vulkan. This class maintains vectors for each type of shader resource available in IGL\n * and records the association between binding locations (indices) and the Vulkan objects, while\n * performing specific checks for each type of resource when they are bound. The associations\n * between indices and resources is kept locally and does not affect the GPU until\n * `updateBindings()` is called. This class also records which resource types need to be updated\n * when `updateBindings()` is called and provides a convenience function to update the descriptor\n * sets on the context for all resource types. It only performs the update for a resource type that\n * has been modified after the last call to update the bindings. An instance of this class is bound\n * to one bind point only (VkPipelineBindPoint), which is VK_PIPELINE_BIND_POINT_GRAPHICS by\n * default.\n */\nclass ResourcesBinder final {\n public:\n  ResourcesBinder(const CommandBuffer* commandBuffer,\n                  VulkanContext& ctx,\n                  VkPipelineBindPoint bindPoint);\n\n  /// @brief Binds a uniform buffer with an offset to index equal to `index`\n  void bindBuffer(uint32_t index, Buffer* buffer, size_t bufferOffset, size_t bufferSize);\n\n  /// @brief Binds a sampler state to index equal to `index`\n  void bindSamplerState(uint32_t index, SamplerState* samplerState);\n\n  /// @brief Binds a texture to index equal to `index`\n  void bindTexture(uint32_t index, Texture* tex);\n  void bindStorageImage(uint32_t index, Texture* tex);\n\n  /// @brief Convenience function that updates all bindings in the context for all resource types\n  /// that have been modified since the last time this function was called\n  void updateBindings(VkPipelineLayout layout, const vulkan::PipelineState& state);\n\n  /// @brief If the pipeline passed in as a parameter is different than the last pipeline bound\n  /// through this class, binds it and cache it as the last pipeline bound. Does nothing otherwise\n  void bindPipeline(VkPipeline pipeline, const util::SpvModuleInfo* info);\n\n private:\n  friend class VulkanContext;\n  friend class RenderCommandEncoder;\n\n  [[nodiscard]] bool isGraphics() const {\n    return bindPoint_ == VK_PIPELINE_BIND_POINT_GRAPHICS;\n  }\n\n  /*\n   * @brief Bitwise flags for dirty descriptor sets (per each supported resource type)\n   */\n  enum DirtyFlagBits : uint8_t { // NOLINT\n    DirtyFlagBits_Textures = 1 << 0, // NOLINT\n    DirtyFlagBits_Buffers = 1 << 1, // NOLINT\n    DirtyFlagBits_StorageImages = 1 << 2, // NOLINT\n  };\n\n private:\n  VulkanContext& ctx_;\n  VkCommandBuffer cmdBuffer_ = VK_NULL_HANDLE;\n  VkPipeline lastPipelineBound_ = VK_NULL_HANDLE;\n  uint32_t isDirtyFlags_ =\n      DirtyFlagBits_Textures | DirtyFlagBits_Buffers | DirtyFlagBits_StorageImages;\n  BindingsTextures bindingsTextures_;\n  BindingsBuffers bindingsBuffers_;\n  BindingsStorageImages bindingsStorageImages_;\n  VkPipelineBindPoint bindPoint_ = VK_PIPELINE_BIND_POINT_GRAPHICS;\n  VulkanImmediateCommands::SubmitHandle nextSubmitHandle_ = {};\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/SamplerState.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/SamplerState.h>\n\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n\nnamespace {\nVkFilter samplerMinMagFilterToVkFilter(igl::SamplerMinMagFilter filter) {\n  switch (filter) {\n  case igl::SamplerMinMagFilter::Nearest:\n    return VK_FILTER_NEAREST;\n  case igl::SamplerMinMagFilter::Linear:\n    return VK_FILTER_LINEAR;\n  }\n  IGL_DEBUG_ABORT(\"SamplerMinMagFilter value not handled: %d\", (int)filter);\n  return VK_FILTER_LINEAR;\n}\n\nVkSamplerMipmapMode samplerMipFilterToVkSamplerMipmapMode(igl::SamplerMipFilter filter) {\n  switch (filter) {\n  case igl::SamplerMipFilter::Disabled:\n  case igl::SamplerMipFilter::Nearest:\n    return VK_SAMPLER_MIPMAP_MODE_NEAREST;\n  case igl::SamplerMipFilter::Linear:\n    return VK_SAMPLER_MIPMAP_MODE_LINEAR;\n  }\n  IGL_DEBUG_ABORT(\"SamplerMipFilter value not handled: %d\", (int)filter);\n  return VK_SAMPLER_MIPMAP_MODE_NEAREST;\n}\n\nVkSamplerAddressMode samplerAddressModeToVkSamplerAddressMode(igl::SamplerAddressMode mode) {\n  switch (mode) {\n  case igl::SamplerAddressMode::Repeat:\n    return VK_SAMPLER_ADDRESS_MODE_REPEAT;\n  case igl::SamplerAddressMode::Clamp:\n    return VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;\n  case igl::SamplerAddressMode::MirrorRepeat:\n    return VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT;\n  }\n  IGL_DEBUG_ABORT(\"SamplerAddressMode value not handled: %d\", (int)mode);\n  return VK_SAMPLER_ADDRESS_MODE_REPEAT;\n}\n\nVkSamplerCreateInfo samplerStateDescToVkSamplerCreateInfo(const igl::SamplerStateDesc& desc,\n                                                          const VkPhysicalDeviceLimits& limits) {\n  IGL_DEBUG_ASSERT(desc.mipLodMax >= desc.mipLodMin,\n                   \"mipLodMax (%d) must be greater than or equal to mipLodMin (%d)\",\n                   (int)desc.mipLodMax,\n                   (int)desc.mipLodMin);\n\n  VkSamplerCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,\n      .pNext = nullptr,\n      .flags = 0,\n      .magFilter = samplerMinMagFilterToVkFilter(desc.magFilter),\n      .minFilter = samplerMinMagFilterToVkFilter(desc.minFilter),\n      .mipmapMode = samplerMipFilterToVkSamplerMipmapMode(desc.mipFilter),\n      .addressModeU = samplerAddressModeToVkSamplerAddressMode(desc.addressModeU),\n      .addressModeV = samplerAddressModeToVkSamplerAddressMode(desc.addressModeV),\n      .addressModeW = samplerAddressModeToVkSamplerAddressMode(desc.addressModeW),\n      .mipLodBias = 0.0f,\n      .anisotropyEnable = VK_FALSE,\n      .maxAnisotropy = 0.0f,\n      .compareEnable = desc.depthCompareEnabled ? VK_TRUE : VK_FALSE,\n      .compareOp = desc.depthCompareEnabled\n                       ? igl::vulkan::compareFunctionToVkCompareOp(desc.depthCompareFunction)\n                       : VK_COMPARE_OP_ALWAYS,\n      .minLod = static_cast<float>(desc.mipLodMin),\n      .maxLod = desc.mipFilter == igl::SamplerMipFilter::Disabled\n                    ? 0.0f\n                    : static_cast<float>(desc.mipLodMax),\n      .borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK,\n      .unnormalizedCoordinates = VK_FALSE,\n  };\n\n  if (desc.maxAnisotropic > 1) {\n    const bool isAnisotropicFilteringSupported = limits.maxSamplerAnisotropy > 1;\n    IGL_DEBUG_ASSERT(isAnisotropicFilteringSupported,\n                     \"Anisotropic filtering is not supported by the device.\");\n    ci.anisotropyEnable = isAnisotropicFilteringSupported ? VK_TRUE : VK_FALSE;\n\n    if (limits.maxSamplerAnisotropy < desc.maxAnisotropic) {\n      IGL_LOG_INFO(\n          \"Supplied sampler anisotropic value greater than max supported by the device, setting to \"\n          \"%.0f\",\n          static_cast<double>(limits.maxSamplerAnisotropy));\n    }\n    ci.maxAnisotropy = std::min((float)limits.maxSamplerAnisotropy, (float)desc.maxAnisotropic);\n  }\n\n  return ci;\n}\n\n} // namespace\n\nnamespace igl::vulkan {\n\nSamplerState::SamplerState(Device& device) : device_(device) {}\n\nResult SamplerState::create(const SamplerStateDesc& desc) {\n  IGL_PROFILER_FUNCTION();\n\n  desc_ = desc;\n\n  const VulkanContext& ctx = device_.getVulkanContext();\n\n  Result result;\n  sampler_ =\n      Holder<SamplerHandle>(&device_,\n                            ctx.createSampler(samplerStateDescToVkSamplerCreateInfo(\n                                                  desc, ctx.getVkPhysicalDeviceProperties().limits),\n                                              textureFormatToVkFormat(desc.yuvFormat),\n                                              &result,\n                                              desc_.debugName.c_str()));\n\n  if (!IGL_DEBUG_VERIFY(result.isOk())) {\n    return result;\n  }\n\n  return sampler_.valid() ? Result()\n                          : Result(Result::Code::InvalidOperation, \"Cannot create VulkanSampler\");\n}\n\nuint32_t SamplerState::getSamplerId() const {\n  const VulkanSampler* sampler = device_.getVulkanContext().samplers_.get(sampler_);\n  return sampler ? sampler->samplerId : 0;\n}\n\nbool SamplerState::isYUV() const noexcept {\n  return desc_.yuvFormat != igl::TextureFormat::Invalid;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/SamplerState.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/Common.h>\n#include <igl/SamplerState.h>\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nclass Device;\n\n/**\n * @brief Encapsulates a VulkanSampler class and its descriptor, along with a vulkan::Device for\n * creating the resource. It's a friend of the Device, which calls the private create() method when\n * realizing the resource\n */\nclass SamplerState final : public ISamplerState {\n  friend class Device;\n\n public:\n  /**\n   * @brief Instantiates an object of the class, but doesn't create the resources on the device.\n   * After instantiation, the object contains a reference to the device for creating the resource,\n   * which can be done by calling the create() method with the desired configuration\n   */\n  explicit SamplerState(Device& device);\n  ~SamplerState() override = default;\n\n  SamplerState(const SamplerState&) = delete;\n  SamplerState& operator=(const SamplerState&) = delete;\n  SamplerState(SamplerState&&) = delete;\n  SamplerState& operator=(SamplerState&&) = delete;\n\n  /**\n   * @brief Returns the ID of the sampler. Its ID is the index of the sampler into the vector of\n   * samplers stored in VulkanContext. The ID is set by the context when the sampler is created and\n   * as soon as the sampler is stored in the vector of samplers maintained there.\n   * This ID is intended for bindless rendering. See the ResourcesBinder and VulkanContext classes\n   * for more information\n   */\n  [[nodiscard]] uint32_t getSamplerId() const;\n\n  /**\n   * @brief Returns true if this sampler is a YUV sampler.\n   */\n  [[nodiscard]] bool isYUV() const noexcept override;\n\n private:\n  /**\n   * @brief Creates the internal object instances based on the descriptor passed in as a parameter\n   */\n  Result create(const SamplerStateDesc& desc);\n\n private:\n  friend class PipelineState;\n  friend class ResourcesBinder;\n  friend class VulkanContext;\n\n  /** @brief The device used to create the resource */\n  Device& device_;\n  /** @brief The texture sampling configuration for accessing a texture */\n  SamplerStateDesc desc_;\n  /** @brief The VulkanSampler instance associated with this sampler */\n  Holder<SamplerHandle> sampler_;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/ShaderModule.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/ShaderModule.h>\n\n#include <igl/Shader.h>\n#include <igl/vulkan/VulkanShaderModule.h>\n\nnamespace igl::vulkan {\n\nShaderModule::ShaderModule(ShaderModuleInfo info,\n                           std::shared_ptr<VulkanShaderModule> shaderModule) :\n  IShaderModule(std::move(info)), module_(std::move(shaderModule)) {\n  IGL_DEBUG_ASSERT(module_);\n}\n\nVkShaderModule ShaderModule::getVkShaderModule(const std::shared_ptr<IShaderModule>& shaderModule) {\n  const ShaderModule* sm = static_cast<ShaderModule*>(shaderModule.get());\n\n  // @fb-only\n  // @lint-ignore CLANGTIDY\n  return sm ? sm->module_->getVkShaderModule() : VK_NULL_HANDLE;\n}\n\nShaderStages::ShaderStages(ShaderStagesDesc desc) : IShaderStages(std::move(desc)) {}\n\nShaderLibrary::ShaderLibrary(std::vector<std::shared_ptr<IShaderModule>> modules) :\n  IShaderLibrary(std::move(modules)) {}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/ShaderModule.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/Shader.h>\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nclass VulkanShaderModule;\n\n/// @brief Implements the igl::IShaderModule interface\nclass ShaderModule final : public IShaderModule {\n public:\n  ShaderModule(ShaderModuleInfo info, std::shared_ptr<VulkanShaderModule> shaderModule);\n  ~ShaderModule() override = default;\n\n  [[nodiscard]] const VulkanShaderModule& getVulkanShaderModule() const {\n    return *module_;\n  }\n\n  static VkShaderModule getVkShaderModule(const std::shared_ptr<IShaderModule>& shaderModule);\n\n private:\n  std::shared_ptr<VulkanShaderModule> module_;\n};\n\n/// @brief Implements the igl::IShaderStages interface\nclass ShaderStages final : public IShaderStages {\n public:\n  explicit ShaderStages(ShaderStagesDesc desc);\n  ~ShaderStages() override = default;\n};\n\n/// @brief Implements the igl::IShaderLibrary interface\nclass ShaderLibrary : public IShaderLibrary {\n public:\n  explicit ShaderLibrary(std::vector<std::shared_ptr<IShaderModule>> modules);\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/Texture.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/Texture.h>\n\n#include <igl/IGLSafeC.h>\n#include <igl/vulkan/CommandBuffer.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanImageView.h>\n#include <igl/vulkan/VulkanStagingDevice.h>\n#include <igl/vulkan/VulkanTexture.h>\n\nnamespace igl::vulkan {\n\nTexture::Texture(Device& device, TextureFormat format) : ITexture(format), device_(device) {\n  IGL_DEBUG_ASSERT(format != TextureFormat::Invalid);\n}\n\nResult Texture::create(const TextureDesc& desc) {\n  desc_ = desc;\n\n  const VulkanContext& ctx = device_.getVulkanContext();\n\n  const VkFormat vkFormat = getProperties().isDepthOrStencil()\n                                ? ctx.getClosestDepthStencilFormat(desc_.format)\n                                : textureFormatToVkFormat(desc_.format);\n\n  const igl::TextureType type = desc_.type;\n  if (!IGL_DEBUG_VERIFY(type == TextureType::TwoD || type == TextureType::TwoDArray ||\n                        type == TextureType::Cube || type == TextureType::ThreeD)) {\n    IGL_DEBUG_ABORT(\"Only 1D, 1D array, 2D, 2D array, 3D and cubemap textures are supported\");\n    return Result(Result::Code::Unimplemented);\n  }\n\n  if (desc_.numMipLevels == 0) {\n    IGL_DEBUG_ABORT(\"The number of mip levels specified must be greater than 0\");\n    desc_.numMipLevels = 1;\n  }\n\n  if (desc.numSamples > 1 && desc_.numMipLevels != 1) {\n    IGL_DEBUG_ABORT(\"The number of mip levels for multisampled images should be 1\");\n    return Result(Result::Code::ArgumentOutOfRange,\n                  \"The number of mip levels for multisampled images should be 1\");\n  }\n\n  if (desc.numSamples > 1 && type == TextureType::ThreeD) {\n    IGL_DEBUG_ABORT(\"Multisampled 3D images are not supported\");\n    return Result(Result::Code::ArgumentOutOfRange, \"Multisampled 3D images are not supported\");\n  }\n\n  if (desc.numLayers > 1 && desc.type != TextureType::TwoDArray) {\n    return Result{Result::Code::Unsupported,\n                  \"Array textures are only supported when type is TwoDArray.\"};\n  }\n\n  if (!IGL_DEBUG_VERIFY(desc_.numMipLevels <=\n                        TextureDesc::calcNumMipLevels(desc_.width, desc_.height, desc_.height))) {\n    return Result(Result::Code::ArgumentOutOfRange,\n                  \"The number of specified mip levels is greater than the maximum possible \"\n                  \"number of mip levels.\");\n  }\n\n  if (desc_.usage == 0) {\n    IGL_DEBUG_ABORT(\"Texture usage flags are not set\");\n    desc_.usage = TextureDesc::TextureUsageBits::Sampled;\n  }\n  // a simple heuristic to determine proper storage as the storage type is almost never provided by\n  // existing IGL clients\n  if (desc_.storage == ResourceStorage::Invalid) {\n    desc_.storage = ResourceStorage::Private;\n  }\n\n  /* Use staging device to transfer data into the image when the storage is private to the device */\n  VkImageUsageFlags usageFlags =\n      (desc_.storage == ResourceStorage::Private) ? VK_IMAGE_USAGE_TRANSFER_DST_BIT : 0;\n\n  // On M1 Macs, depth texture has to be ResourceStorage::Private.\n  // On Intel Macs, multisample does not work with shared or managed storage modes\n  if (!ctx.useStagingForBuffers_ && desc_.storage == ResourceStorage::Private &&\n      !getProperties().isDepthOrStencil() && desc.numSamples == 1) {\n    desc_.storage = ResourceStorage::Shared;\n  }\n\n  if (desc_.usage & TextureDesc::TextureUsageBits::Sampled) {\n    usageFlags |= VK_IMAGE_USAGE_SAMPLED_BIT;\n  }\n  if (desc_.usage & TextureDesc::TextureUsageBits::Storage) {\n    IGL_DEBUG_ASSERT(desc_.numSamples <= 1, \"Storage images cannot be multisampled\");\n    usageFlags |= VK_IMAGE_USAGE_STORAGE_BIT;\n  }\n  if (desc_.usage & TextureDesc::TextureUsageBits::Attachment) {\n    usageFlags |= getProperties().isDepthOrStencil() ? VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT\n                                                     : VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;\n\n    if (desc_.storage == igl::ResourceStorage::Memoryless) {\n      usageFlags |= VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT;\n    }\n  }\n\n  // For now, always set this flag so we can read it back\n  if (desc_.storage != igl::ResourceStorage::Memoryless) {\n    // not supported on transient attachments\n    usageFlags |= VK_IMAGE_USAGE_TRANSFER_SRC_BIT;\n  }\n\n  IGL_DEBUG_ASSERT(usageFlags != 0, \"Invalid usage flags\");\n\n  const VkMemoryPropertyFlags memFlags =\n      resourceStorageToVkMemoryPropertyFlags(desc_.storage, &ctx.memoryProperties);\n\n  const std::string debugNameImage =\n      !desc_.debugName.empty() ? IGL_FORMAT(\"Image: {}\", desc_.debugName.c_str()) : \"\";\n  const std::string debugNameImageView =\n      !desc_.debugName.empty() ? IGL_FORMAT(\"Image View: {}\", desc_.debugName.c_str()) : \"\";\n\n  VkImageCreateFlags createFlags = 0;\n  uint32_t arrayLayerCount = desc_.numLayers;\n  VkImageViewType imageViewType = VK_IMAGE_VIEW_TYPE_MAX_ENUM;\n  VkImageType imageType = VK_IMAGE_TYPE_2D;\n  VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT;\n  switch (desc_.type) {\n  case TextureType::TwoD:\n    imageViewType = VK_IMAGE_VIEW_TYPE_2D;\n    samples = getVulkanSampleCountFlags(desc_.numSamples);\n    break;\n  case TextureType::ThreeD:\n    imageViewType = VK_IMAGE_VIEW_TYPE_3D;\n    imageType = VK_IMAGE_TYPE_3D;\n    break;\n  case TextureType::Cube:\n    imageViewType = VK_IMAGE_VIEW_TYPE_CUBE;\n    arrayLayerCount *= 6;\n    createFlags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;\n    break;\n  case TextureType::TwoDArray:\n    imageViewType = VK_IMAGE_VIEW_TYPE_2D_ARRAY;\n    samples = getVulkanSampleCountFlags(desc_.numSamples);\n    break;\n  default:\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return Result(Result::Code::Unimplemented, \"Unimplemented or unsupported texture type.\");\n  }\n\n  const VkImageTiling tiling = desc.tiling == TextureDesc::TextureTiling::Optimal\n                                   ? VK_IMAGE_TILING_OPTIMAL\n                                   : VK_IMAGE_TILING_LINEAR;\n\n  if (getProperties().numPlanes > 1) {\n    // some constraints for multiplanar image formats\n    IGL_DEBUG_ASSERT(imageType == VK_IMAGE_TYPE_2D);\n    IGL_DEBUG_ASSERT(samples == VK_SAMPLE_COUNT_1_BIT);\n    IGL_DEBUG_ASSERT(tiling == VK_IMAGE_TILING_OPTIMAL);\n    IGL_DEBUG_ASSERT(desc.numLayers == 1);\n    IGL_DEBUG_ASSERT(desc.numMipLevels == 1);\n    createFlags |= VK_IMAGE_CREATE_DISJOINT_BIT | VK_IMAGE_CREATE_ALIAS_BIT |\n                   VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT;\n  }\n\n  Result result;\n  VulkanImage image;\n\n  if (desc_.exportability == TextureDesc::TextureExportability::NoExport) {\n    image = ctx.createImage(\n        imageType,\n        VkExtent3D{(uint32_t)desc_.width, (uint32_t)desc_.height, (uint32_t)desc_.depth},\n        vkFormat,\n        (uint32_t)desc_.numMipLevels,\n        arrayLayerCount,\n        tiling,\n        usageFlags,\n        memFlags,\n        createFlags,\n        samples,\n        &result,\n        debugNameImage.c_str());\n    if (!IGL_DEBUG_VERIFY(result.isOk())) {\n      return result;\n    }\n  } else if (desc_.exportability == TextureDesc::TextureExportability::Exportable) {\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n\n    image = igl::vulkan::VulkanImage::createWithExportMemory(\n        ctx,\n        VkExtent3D{.width = (uint32_t)desc_.width,\n                   .height = (uint32_t)desc_.height,\n                   .depth = (uint32_t)desc_.depth},\n        imageType,\n        vkFormat,\n        (uint32_t)desc_.numMipLevels,\n        arrayLayerCount,\n        tiling,\n        usageFlags,\n        createFlags,\n        samples,\n        \"vulkan export memory image\");\n\n#else // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n    // Currently only Mac is not supported.\n    return Result(Result::Code::Unimplemented,\n                  \"Exportable textures are not supported on this platform.\");\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n  }\n\n  if (!IGL_DEBUG_VERIFY(image.valid())) {\n    return Result(Result::Code::InvalidOperation, \"Cannot create VulkanImage\");\n  }\n\n  VkImageAspectFlags aspect = 0;\n  if (image.isDepthOrStencilFormat_) {\n    if (image.isDepthFormat_) {\n      aspect |= VK_IMAGE_ASPECT_DEPTH_BIT;\n    } else if (image.isStencilFormat_) {\n      aspect |= VK_IMAGE_ASPECT_STENCIL_BIT;\n    }\n  } else {\n    aspect = VK_IMAGE_ASPECT_COLOR_BIT;\n  }\n\n  VulkanImageView imageView = image.createImageView(imageViewType,\n                                                    vkFormat,\n                                                    aspect,\n                                                    0,\n                                                    VK_REMAINING_MIP_LEVELS,\n                                                    0,\n                                                    arrayLayerCount,\n                                                    debugNameImageView.c_str());\n\n  if (!IGL_DEBUG_VERIFY(imageView.valid())) {\n    return Result(Result::Code::InvalidOperation, \"Cannot create VulkanImageView\");\n  }\n\n  texture_ = ctx.createTexture(std::move(image), std::move(imageView), desc.debugName.c_str());\n\n  if (aspect == VK_IMAGE_ASPECT_COLOR_BIT && samples == VK_SAMPLE_COUNT_1_BIT &&\n      (usageFlags & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) != 0 &&\n      (usageFlags & VK_IMAGE_USAGE_TRANSFER_DST_BIT) != 0) {\n    // always clear color attachments by default\n    clearColorTexture({0, 0, 0, 0});\n  }\n\n  return Result();\n}\n\nResult Texture::createView(const Texture& baseTexture, const TextureViewDesc& desc) {\n  if (!IGL_DEBUG_VERIFY(baseTexture.texture_)) {\n    return Result(Result::Code::InvalidOperation, \"Cannot create a view from an empty texture\");\n  }\n\n  const VulkanTexture& vulkanTexture = *baseTexture.texture_;\n\n  desc_ = baseTexture.desc_;\n  desc_.numLayers = desc.numLayers;\n  desc_.numMipLevels = desc.numMipLevels;\n\n  const igl::TextureType type = desc_.type;\n  if (!IGL_DEBUG_VERIFY(type == TextureType::TwoD || type == TextureType::TwoDArray ||\n                        type == TextureType::Cube || type == TextureType::ThreeD)) {\n    IGL_DEBUG_ABORT(\"Only 2D, 2D array, 3D and cubemap base textures are supported\");\n    return Result(Result::Code::Unimplemented);\n  }\n  if (!IGL_DEBUG_VERIFY(desc.type == TextureType::TwoD || desc.type == TextureType::ThreeD)) {\n    IGL_DEBUG_ABORT(\"Only 2D and 3D texture views are supported\");\n    return Result(Result::Code::Unimplemented);\n  }\n\n  if (!desc_.numMipLevels) {\n    IGL_DEBUG_ABORT(\"The number of mip levels specified must be greater than 0\");\n    desc_.numMipLevels = 1;\n  }\n\n  const std::string debugNameImageView =\n      !desc_.debugName.empty() ? IGL_FORMAT(\"Image View: {}\", desc.debugName.c_str()) : \"\";\n\n  // make a non-owning copy\n  VulkanImage image(vulkanTexture.image_);\n  image.isExternallyManaged_ = true;\n\n  auto aspectToVkAspectFlags = [](VkImageAspectFlags baseAspectFlags,\n                                  ImageAspectFlags flags) -> VkImageAspectFlags {\n    if (flags == ImageAspectBits_Invalid) {\n      // use the original flags from the base texture\n      return baseAspectFlags;\n    }\n    if (flags == ImageAspectBits_None) {\n      IGL_SOFT_ERROR(\n          \"Image aspect None is not supported in this Vulkan version (requires Vulkan 1.3)\");\n      return VK_IMAGE_ASPECT_NONE;\n    }\n    VkImageAspectFlags aspect = 0;\n    if (flags & ImageAspectBits_Color) {\n      aspect |= VK_IMAGE_ASPECT_COLOR_BIT;\n    }\n    if (flags & ImageAspectBits_Depth) {\n      aspect |= VK_IMAGE_ASPECT_DEPTH_BIT;\n    }\n    if (flags & ImageAspectBits_Stencil) {\n      aspect |= VK_IMAGE_ASPECT_STENCIL_BIT;\n    }\n    if (flags & ImageAspectBits_Plane_0) {\n      aspect |= VK_IMAGE_ASPECT_PLANE_0_BIT;\n    }\n    if (flags & ImageAspectBits_Plane_1) {\n      aspect |= VK_IMAGE_ASPECT_PLANE_1_BIT;\n    }\n    if (flags & ImageAspectBits_Plane_2) {\n      aspect |= VK_IMAGE_ASPECT_PLANE_2_BIT;\n    }\n    return aspect;\n  };\n\n  auto textureTypeToVkImageViewType = [](TextureType type) -> VkImageViewType {\n    switch (type) {\n    case TextureType::TwoD:\n      return VK_IMAGE_VIEW_TYPE_2D;\n    case TextureType::ThreeD:\n      return VK_IMAGE_VIEW_TYPE_3D;\n    case TextureType::Cube:\n      return VK_IMAGE_VIEW_TYPE_CUBE;\n    case TextureType::TwoDArray:\n      return VK_IMAGE_VIEW_TYPE_2D_ARRAY;\n    default:\n      IGL_DEBUG_ASSERT_NOT_REACHED();\n      return VK_IMAGE_VIEW_TYPE_MAX_ENUM;\n    }\n  };\n\n  VulkanImageView imageView = image.createImageView(\n      VulkanImageViewCreateInfo{\n          .viewType = textureTypeToVkImageViewType(desc.type),\n          .format = desc.format == TextureFormat::Invalid ? image.imageFormat_\n                                                          : textureFormatToVkFormat(desc.format),\n          .components = componentMappingToVkComponentMapping(desc.swizzle),\n          .subresourceRange = {.aspectMask = aspectToVkAspectFlags(\n                                   vulkanTexture.imageView_.aspectMask, desc.aspect),\n                               .baseMipLevel = desc.mipLevel,\n                               .levelCount = desc.numMipLevels,\n                               .baseArrayLayer = desc.layer,\n                               .layerCount = desc.numLayers},\n      },\n      debugNameImageView.c_str());\n\n  if (!IGL_DEBUG_VERIFY(imageView.valid())) {\n    return Result(Result::Code::InvalidOperation, \"Cannot create VulkanImageView\");\n  }\n\n  const VulkanContext& ctx = device_.getVulkanContext();\n\n  texture_ = ctx.createTexture(std::move(image), std::move(imageView), desc.debugName.c_str());\n\n  return Result();\n}\n\nbool Texture::needsRepacking(const TextureRangeDesc& /*range*/, size_t bytesPerRow) const {\n  // Vulkan textures MUST be aligned to a multiple of the texel size or, for compressed textures,\n  // the texel block size.\n  return bytesPerRow != 0 && bytesPerRow % getProperties().bytesPerBlock != 0;\n}\n\nResult Texture::uploadInternal(TextureType /*type*/,\n                               const TextureRangeDesc& range,\n                               const void* data,\n                               size_t bytesPerRow,\n                               const uint32_t* IGL_NULLABLE /*mipLevelBytes*/) const {\n  if (!data) {\n    return Result{};\n  }\n\n  const igl::vulkan::VulkanImage& vulkanImage = texture_->image_;\n  if (vulkanImage.isMappedPtrAccessible()) {\n    checked_memcpy(\n        vulkanImage.mappedPtr_, vulkanImage.allocatedSize, data, bytesPerRow * range.width);\n    vulkanImage.flushMappedMemory();\n    return Result();\n  }\n\n  const VulkanContext& ctx = device_.getVulkanContext();\n\n  const VkImageAspectFlags imageAspectFlags = texture_->imageView_.getVkImageAspectFlags();\n  ctx.stagingDevice_->imageData(\n      vulkanImage, desc_.type, range, getProperties(), bytesPerRow, imageAspectFlags, data);\n\n  // Generate mipmaps if requested by the user\n  if (desc_.mipmapGeneration == TextureDesc::TextureMipmapGeneration::AutoGenerateOnUpload) {\n    if (range.mipLevel != 0) {\n      return Result{Result::Code::InvalidOperation,\n                    \"AutoGenerateOnUpload requires mipLevel to be uploaded to be 0\"};\n    }\n\n    Result result;\n    const auto cq = device_.createCommandQueue({}, &result);\n    if (!result.isOk()) {\n      return result;\n    }\n\n    generateMipmap(*cq, nullptr);\n\n    mipmapsAreAvailableAndUploaded_ = true;\n  }\n\n  return Result();\n}\n\nDimensions Texture::getDimensions() const {\n  return Dimensions{desc_.width, desc_.height, desc_.depth};\n}\n\nVkFormat Texture::getVkFormat() const {\n  IGL_DEBUG_ASSERT(texture_);\n  return texture_ ? texture_->image_.imageFormat_ : VK_FORMAT_UNDEFINED;\n}\n\nVkImageUsageFlags Texture::getVkUsageFlags() const {\n  IGL_DEBUG_ASSERT(texture_);\n  return texture_ ? texture_->image_.getVkImageUsageFlags() : 0;\n}\n\nuint32_t Texture::getVkExtendedFormat() const {\n  IGL_DEBUG_ASSERT(texture_);\n  return texture_ ? texture_->image_.extendedFormat_ : 0;\n}\n\nuint32_t Texture::getNumLayers() const {\n  return desc_.numLayers;\n}\n\nTextureType Texture::getType() const {\n  return desc_.type;\n}\n\nTextureDesc::TextureUsage Texture::getUsage() const {\n  return desc_.usage;\n}\n\nuint32_t Texture::getSamples() const {\n  return desc_.numSamples;\n}\n\nuint32_t Texture::getNumMipLevels() const {\n  return desc_.numMipLevels;\n}\n\nvoid Texture::generateMipmap(ICommandQueue& /* unused */,\n                             const TextureRangeDesc* IGL_NULLABLE range) const {\n  IGL_DEBUG_ASSERT(texture_);\n\n  if (texture_ && desc_.numMipLevels > 1) {\n    const auto& ctx = device_.getVulkanContext();\n    const auto& wrapper = ctx.immediate_->acquire();\n    texture_->image_.generateMipmap(wrapper.cmdBuf, range ? *range : desc_.asRange());\n    ctx.immediate_->submit(wrapper);\n  }\n}\n\nvoid Texture::generateMipmap(ICommandBuffer& cmdBuffer, const TextureRangeDesc* range) const {\n  IGL_DEBUG_ASSERT(texture_);\n\n  auto& vkCmdBuffer = static_cast<CommandBuffer&>(cmdBuffer);\n  texture_->image_.generateMipmap(vkCmdBuffer.getVkCommandBuffer(),\n                                  range ? *range : desc_.asRange());\n}\n\nbool Texture::isRequiredGenerateMipmap() const {\n  if (mipmapsAreAvailableAndUploaded_) {\n    return false;\n  }\n\n  if (!texture_ || desc_.numMipLevels <= 1) {\n    return false;\n  }\n\n  return texture_->image_.imageLayout_ != VK_IMAGE_LAYOUT_UNDEFINED;\n}\n\nuint64_t Texture::getTextureId() const {\n  const auto& config = device_.getVulkanContext().config_;\n  IGL_DEBUG_ASSERT(config.enableDescriptorIndexing,\n                   \"Make sure config.enableDescriptorIndexing is enabled.\");\n  return texture_ && config.enableDescriptorIndexing ? texture_->textureId_ : 0;\n}\n\nVkImageView Texture::getVkImageView() const {\n  return texture_ ? texture_->imageView_.vkImageView : VK_NULL_HANDLE;\n}\n\nVkImageView Texture::getVkImageViewForFramebuffer(uint32_t mipLevel,\n                                                  uint32_t layer,\n                                                  FramebufferMode mode) const {\n  const bool isStereo = mode == FramebufferMode::Stereo;\n  const auto index = mipLevel * getNumVkLayers() + layer;\n  std::vector<VulkanImageView>& imageViews = isStereo ? imageViewsForFramebufferStereo_\n                                                      : imageViewsForFramebufferMono_;\n\n  if (index < imageViews.size() && imageViews[index].valid()) {\n    return imageViews[index].getVkImageView();\n  }\n\n  if (index >= imageViews.size()) {\n    imageViews.resize(index + 1);\n  }\n\n  const VkFormat vkFormat =\n      getProperties().isDepthOrStencil()\n          ? device_.getVulkanContext().getClosestDepthStencilFormat(desc_.format)\n          : textureFormatToVkFormat(desc_.format);\n\n  const VkImageAspectFlags flags = texture_->image_.getImageAspectFlags();\n  imageViews[index] = texture_->image_.createImageView(\n      isStereo ? VK_IMAGE_VIEW_TYPE_2D_ARRAY : VK_IMAGE_VIEW_TYPE_2D,\n      vkFormat,\n      flags,\n      mipLevel,\n      1u,\n      layer,\n      isStereo ? VK_REMAINING_ARRAY_LAYERS : 1u,\n      \"Image View: igl/vulkan/Texture.cpp: Texture::getVkImageViewForFramebuffer()\");\n\n  return imageViews[index].vkImageView;\n}\n\nVkImage Texture::getVkImage() const {\n  return texture_ ? texture_->image_.vkImage_ : VK_NULL_HANDLE;\n}\n\nVulkanTexture& Texture::getVulkanTexture() const {\n  IGL_DEBUG_ASSERT(texture_);\n  return *texture_;\n}\n\nbool Texture::isSwapchainTexture() const {\n  return texture_ ? texture_->image_.isExternallyManaged_ : false;\n}\n\nTextureDesc::TextureMipmapGeneration Texture::getMipmapGeneration() const {\n  return desc_.mipmapGeneration;\n}\n\nuint32_t Texture::getNumVkLayers() const {\n  return desc_.type == TextureType::Cube ? 6u : desc_.numLayers;\n}\n\nvoid Texture::clearColorTexture(const igl::Color& rgba) {\n  if (!texture_) {\n    return;\n  }\n\n  const igl::vulkan::VulkanImage& img = texture_->image_;\n  IGL_DEBUG_ASSERT(img.valid());\n\n  const auto& wrapper = img.ctx_->stagingDevice_->immediate->acquire();\n\n  // There is a memory barrier inserted in clearColorImage().\n  // The memory barrier is necessary to ensure synchronized access.\n  img.clearColorImage(wrapper.cmdBuf, rgba);\n\n  img.ctx_->stagingDevice_->immediate->submit(wrapper);\n}\n\n// IAttachmentInterop interface implementation\nvoid* Texture::getNativeImage() const {\n  return reinterpret_cast<void*>(getVkImage());\n}\n\nvoid* Texture::getNativeImageView() const {\n  return reinterpret_cast<void*>(getVkImageView());\n}\n\nconst base::AttachmentInteropDesc& Texture::getDesc() const {\n  // Update cached attachment descriptor from IGL TextureDesc\n  attachmentDesc_.width = desc_.width;\n  attachmentDesc_.height = desc_.height;\n  attachmentDesc_.depth = desc_.depth;\n  attachmentDesc_.numLayers = desc_.numLayers;\n  attachmentDesc_.numSamples = desc_.numSamples;\n  attachmentDesc_.numMipLevels = desc_.numMipLevels;\n  attachmentDesc_.type = desc_.type;\n  attachmentDesc_.format = desc_.format;\n  attachmentDesc_.isSampled = (desc_.usage & TextureDesc::TextureUsageBits::Sampled) != 0;\n  return attachmentDesc_;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/Texture.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/Common.h>\n#include <igl/Framebuffer.h>\n#include <igl/Texture.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanImageView.h>\n\nnamespace igl::vulkan {\n\nclass Device;\nclass VulkanTexture;\nclass PlatformDevice;\n\n/// @brief Implements the igl::ITexture interface\nclass Texture : public ITexture {\n  friend class Device;\n  friend class PlatformDevice;\n\n public:\n  /// @brief Initializes an instance of the class, but does not create the resource on the device\n  /// until `create()` is called\n  Texture(Device& device, TextureFormat format);\n\n  /// @brief Initializes an instance of the class with an existing VulkanTexture object.\n  Texture(Device& device, std::shared_ptr<VulkanTexture> vkTexture, TextureDesc desc) :\n    Texture(device, desc.format) {\n    texture_ = std::move(vkTexture);\n    desc_ = std::move(desc);\n  }\n\n  // Accessors\n  Dimensions getDimensions() const override;\n  uint32_t getNumLayers() const override;\n  TextureType getType() const override;\n  TextureDesc::TextureUsage getUsage() const override;\n  uint32_t getSamples() const override;\n  uint32_t getNumMipLevels() const override;\n  void generateMipmap(ICommandQueue& cmdQueue,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n  void generateMipmap(ICommandBuffer& cmdBuffer,\n                      const TextureRangeDesc* IGL_NULLABLE range = nullptr) const override;\n  bool isRequiredGenerateMipmap() const override;\n  uint64_t getTextureId() const override;\n  bool isSwapchainTexture() const override;\n  TextureDesc::TextureMipmapGeneration getMipmapGeneration() const;\n  VkFormat getVkFormat() const;\n  uint32_t getVkExtendedFormat() const;\n  VkImageUsageFlags getVkUsageFlags() const;\n\n  VkImageView getVkImageView() const;\n\n  // IAttachmentInterop interface\n  [[nodiscard]] void* IGL_NULLABLE getNativeImage() const override;\n  [[nodiscard]] void* IGL_NULLABLE getNativeImageView() const override;\n  [[nodiscard]] const base::AttachmentInteropDesc& getDesc() const override;\n\n  /// @brief Specialization of `getVkImageView()` that returns an image view specific to a mip level\n  /// and layer of an image. Used to retrieve image views to be used with framebuffers\n  VkImageView getVkImageViewForFramebuffer(uint32_t mipLevel,\n                                           uint32_t layer,\n                                           FramebufferMode mode) const; // framebuffers can render\n                                                                        // only into 1 mip-level\n  VkImage getVkImage() const;\n  VulkanTexture& getVulkanTexture() const;\n\n  uint32_t getNumVkLayers() const;\n\n private:\n  [[nodiscard]] bool needsRepacking(const TextureRangeDesc& range, size_t bytesPerRow) const final;\n\n  /// @brief Uploads the texture's data to the device using the staging device in the context. This\n  /// function is not synchronous and the data may or may not be available to the GPU upon return.\n  Result uploadInternal(TextureType type,\n                        const TextureRangeDesc& range,\n                        const void* data,\n                        size_t bytesPerRow,\n                        const uint32_t* IGL_NULLABLE mipLevelBytes) const final;\n\n  void clearColorTexture(const igl::Color& rgba);\n\n protected:\n  Device& device_;\n  TextureDesc desc_;\n  mutable base::AttachmentInteropDesc attachmentDesc_; // Cached for IAttachmentInterop::getDesc()\n\n  std::shared_ptr<VulkanTexture> texture_;\n  mutable std::vector<VulkanImageView> imageViewsForFramebufferMono_;\n  mutable std::vector<VulkanImageView> imageViewsForFramebufferStereo_;\n\n  /// @brief Creates the resource on the device given the properties in `desc`. This function should\n  /// only be called by the `Device` class, from its `vulkan::Device::createTexture()`\n  virtual Result create(const TextureDesc& desc);\n  virtual Result createView(const Texture& baseTexture, const TextureViewDesc& desc);\n\n  /// @brief To record whether mipmaps are available and uploaded to the GPU. This is used by the\n  /// `isRequiredGenerateMipmap()` function\n  mutable bool mipmapsAreAvailableAndUploaded_ = false;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanBuffer.h\"\n\n#include <igl/IGLSafeC.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanContext.h>\n\nnamespace igl::vulkan {\n\nVulkanBuffer::VulkanBuffer(const VulkanContext& ctx,\n                           VkDevice device,\n                           VkDeviceSize bufferSize,\n                           VkBufferUsageFlags usageFlags,\n                           VkMemoryPropertyFlags memFlags,\n                           const char* debugName) :\n  ctx_(ctx),\n  device_(device),\n  bufferSize_(bufferSize),\n  usageFlags_(usageFlags),\n  memFlags_(memFlags) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_DEBUG_ASSERT(bufferSize > 0);\n\n  // Initialize Buffer Info\n  const VkBufferCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,\n      .size = bufferSize,\n      .usage = usageFlags,\n      .sharingMode = VK_SHARING_MODE_EXCLUSIVE,\n  };\n\n  if (IGL_VULKAN_USE_VMA) {\n    VmaAllocationCreateInfo ciAlloc = {\n        .usage = VMA_MEMORY_USAGE_AUTO,\n    };\n\n    // Initialize VmaAllocation Info\n    if (memFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {\n      ciAlloc.requiredFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;\n      ciAlloc.preferredFlags =\n          VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;\n      ciAlloc.flags =\n          VMA_ALLOCATION_CREATE_MAPPED_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT;\n\n      // Check if coherent buffer is available.\n      VK_ASSERT(ctx_.vf_.vkCreateBuffer(device_, &ci, nullptr, &vkBuffer_));\n      VkMemoryRequirements requirements = {};\n      ctx_.vf_.vkGetBufferMemoryRequirements(device_, vkBuffer_, &requirements);\n      ctx_.vf_.vkDestroyBuffer(device, vkBuffer_, nullptr);\n      vkBuffer_ = VK_NULL_HANDLE;\n\n      if (requirements.memoryTypeBits & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) {\n        ciAlloc.requiredFlags |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;\n        isCoherentMemory_ = true;\n      }\n    }\n\n    const VkResult result = vmaCreateBuffer(\n        (VmaAllocator)ctx_.getVmaAllocator(), &ci, &ciAlloc, &vkBuffer_, &vmaAllocation_, nullptr);\n\n    if (result != VK_SUCCESS || vmaAllocation_ == nullptr) {\n      // Allocation failed - possibly due to memory pressure from deferred tasks not being\n      // processed. Drain deferred tasks queue to free memory.\n      const_cast<VulkanContext&>(ctx_).waitDeferredTasks();\n      VK_ASSERT(vmaCreateBuffer((VmaAllocator)ctx_.getVmaAllocator(),\n                                &ci,\n                                &ciAlloc,\n                                &vkBuffer_,\n                                &vmaAllocation_,\n                                nullptr));\n    }\n\n    IGL_DEBUG_ASSERT(vmaAllocation_ != nullptr);\n\n    if (vmaAllocation_) {\n      vmaSetAllocationName((VmaAllocator)ctx_.getVmaAllocator(),\n                           vmaAllocation_,\n                           IGL_FORMAT(\"VMA Allocation: {}\", debugName).c_str());\n\n      // handle memory-mapped buffers\n      if (memFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {\n        vmaMapMemory((VmaAllocator)ctx_.getVmaAllocator(), vmaAllocation_, &mappedPtr_);\n      }\n    }\n  } else {\n    // create buffer\n    VK_ASSERT(ctx_.vf_.vkCreateBuffer(device_, &ci, nullptr, &vkBuffer_));\n\n    // back the buffer with some memory\n    {\n      VkMemoryRequirements requirements = {};\n      ctx_.vf_.vkGetBufferMemoryRequirements(device_, vkBuffer_, &requirements);\n      if (requirements.memoryTypeBits & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) {\n        isCoherentMemory_ = true;\n      }\n\n      VK_ASSERT(ivkAllocateMemory(&ctx_.vf_,\n                                  ctx_.getVkPhysicalDevice(),\n                                  device_,\n                                  &requirements,\n                                  memFlags,\n                                  ctx.features().has_VK_KHR_buffer_device_address,\n                                  &vkMemory_));\n      VK_ASSERT(ctx_.vf_.vkBindBufferMemory(device_, vkBuffer_, vkMemory_, 0));\n\n      VK_ASSERT(ivkSetDebugObjectName(&ctx_.vf_,\n                                      device_,\n                                      VK_OBJECT_TYPE_DEVICE_MEMORY,\n                                      (uint64_t)vkMemory_,\n                                      IGL_FORMAT(\"Buffer memory: {}\", debugName).c_str()));\n    }\n\n    // handle memory-mapped buffers\n    if (memFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {\n      VK_ASSERT(ctx_.vf_.vkMapMemory(device_, vkMemory_, 0, bufferSize_, 0, &mappedPtr_));\n    }\n  }\n\n  IGL_DEBUG_ASSERT(vkBuffer_ != VK_NULL_HANDLE);\n\n  // set debug name\n  VK_ASSERT(ivkSetDebugObjectName(\n      &ctx_.vf_, device_, VK_OBJECT_TYPE_BUFFER, (uint64_t)vkBuffer_, debugName));\n\n  // handle shader access\n  if (usageFlags & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_KHR) {\n    const VkBufferDeviceAddressInfo ai = {\n        .sType = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR,\n        .buffer = vkBuffer_,\n    };\n    vkDeviceAddress_ = ctx_.vf_.vkGetBufferDeviceAddressKHR(device_, &ai);\n    IGL_DEBUG_ASSERT(vkDeviceAddress_);\n  }\n}\n\nVulkanBuffer::~VulkanBuffer() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(&ctx_);\n\n  if (IGL_VULKAN_USE_VMA) {\n    if (mappedPtr_) {\n      vmaUnmapMemory((VmaAllocator)ctx_.getVmaAllocator(), vmaAllocation_);\n    }\n    ctx_.deferredTask(std::packaged_task<void()>(\n        [vma = ctx_.getVmaAllocator(), buffer = vkBuffer_, allocation = vmaAllocation_]() {\n          vmaDestroyBuffer((VmaAllocator)vma, buffer, allocation);\n        }));\n  } else {\n    if (mappedPtr_) {\n      ctx_.vf_.vkUnmapMemory(device_, vkMemory_);\n    }\n    ctx_.deferredTask(std::packaged_task<void()>(\n        [vf = &ctx_.vf_, device = device_, buffer = vkBuffer_, memory = vkMemory_]() {\n          vf->vkDestroyBuffer(device, buffer, nullptr);\n          vf->vkFreeMemory(device, memory, nullptr);\n        }));\n  }\n}\n\nvoid VulkanBuffer::flushMappedMemory(VkDeviceSize offset, VkDeviceSize size) const {\n  if (!IGL_DEBUG_VERIFY(isMapped())) {\n    return;\n  }\n\n  if (IGL_VULKAN_USE_VMA) {\n    vmaFlushAllocation((VmaAllocator)ctx_.getVmaAllocator(), vmaAllocation_, offset, size);\n  } else {\n    const VkMappedMemoryRange memoryRange = {\n        .sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,\n        .memory = vkMemory_,\n        .offset = offset,\n        .size = size,\n    };\n    ctx_.vf_.vkFlushMappedMemoryRanges(device_, 1, &memoryRange);\n  }\n}\n\nvoid VulkanBuffer::invalidateMappedMemory(VkDeviceSize offset, VkDeviceSize size) const {\n  if (!IGL_DEBUG_VERIFY(isMapped())) {\n    return;\n  }\n\n  if (IGL_VULKAN_USE_VMA) {\n    vmaInvalidateAllocation(\n        static_cast<VmaAllocator>(ctx_.getVmaAllocator()), vmaAllocation_, offset, size);\n  } else {\n    const VkMappedMemoryRange memoryRange = {\n        .sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,\n        .memory = vkMemory_,\n        .offset = offset,\n        .size = size,\n    };\n    ctx_.vf_.vkInvalidateMappedMemoryRanges(device_, 1, &memoryRange);\n  }\n}\n\nvoid VulkanBuffer::getBufferSubData(size_t offset, size_t size, void* data) const {\n  IGL_PROFILER_FUNCTION();\n\n  // Only mapped host-visible buffers can be downloaded this way. All other\n  // GPU buffers should use a temporary staging buffer\n\n  IGL_DEBUG_ASSERT(mappedPtr_);\n\n  if (!mappedPtr_) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(offset + size <= bufferSize_);\n\n  if (!isCoherentMemory_) {\n    invalidateMappedMemory(offset, size);\n  }\n\n  const uint8_t* src = static_cast<uint8_t*>(mappedPtr_) + offset;\n  checked_memcpy(data, size, src, size);\n}\n\nvoid VulkanBuffer::bufferSubData(size_t offset, size_t size, const void* data) {\n  IGL_PROFILER_FUNCTION();\n\n  // Only mapped host-visible buffers can be uploaded this way. All other GPU buffers should use a\n  // temporary staging buffer\n\n  IGL_DEBUG_ASSERT(mappedPtr_);\n\n  if (!mappedPtr_) {\n    return;\n  }\n\n  IGL_DEBUG_ASSERT(offset + size <= bufferSize_);\n\n  if (data) {\n    checked_memcpy((uint8_t*)mappedPtr_ + offset, bufferSize_ - offset, data, size);\n  } else {\n    memset((uint8_t*)mappedPtr_ + offset, 0, size);\n  }\n  if (!isCoherentMemory_) {\n    flushMappedMemory(offset, size);\n  }\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nclass VulkanContext;\n\n/// @brief A wrapper around a Vulkan Buffer object that provides convenience functions for\n/// uploading/downloading data to/from the GPU.\nclass VulkanBuffer {\n public:\n  /** @brief Creates a new VulkanBuffer with a given size, usage flags, memory property flags, and\n   * an optional debug name. Uses VMA if IGL is built with VMA support. If memory flags specify\n   * that the buffer is visible by the host (the CPU), then the buffer's memory will be mapped into\n   * the application's address space and can be accessed directly.\n   */\n  VulkanBuffer(const VulkanContext& ctx,\n               VkDevice device,\n               VkDeviceSize bufferSize,\n               VkBufferUsageFlags usageFlags,\n               VkMemoryPropertyFlags memFlags,\n               const char* debugName = nullptr);\n  ~VulkanBuffer();\n\n  VulkanBuffer(const VulkanBuffer&) = delete;\n  VulkanBuffer& operator=(const VulkanBuffer&) = delete;\n  VulkanBuffer(VulkanBuffer&&) = delete;\n  VulkanBuffer& operator=(VulkanBuffer&&) = delete;\n\n  /** @brief Uploads the data located at `data` into the buffer on the device with the provided\n   * `offset`. Only mapped host-visible buffers can be uploaded this way. All other GPU buffers\n   * should use a temporary staging buffer. If the buffer's data has not been mapped, this function\n   * is a no-op. This function is synchronous and the data is expected to be available when the\n   * function returns\n   */\n  void bufferSubData(size_t offset, size_t size, const void* data);\n\n  /** @brief Downloads the data located at `offset` from the buffer on the device to the location\n   * pointed by `data`. Only mapped host-visible buffers can be downloaded this way. All other GPU\n   * buffers should use a temporary staging buffer. If the buffer's data has not been mapped, this\n   * function is a no-op. This function is synchronous and the data is expected to be available\n   * when the function returns.\n   */\n  void getBufferSubData(size_t offset, size_t size, void* data) const;\n  [[nodiscard]] uint8_t* getMappedPtr() const {\n    return static_cast<uint8_t*>(mappedPtr_);\n  }\n\n  /// @brief Whether the buffer's memory has been mapped.\n  [[nodiscard]] bool isMapped() const {\n    return mappedPtr_ != nullptr;\n  }\n\n  /// @brief Flushes the mapped memory range to make it visible to the GPU.\n  void flushMappedMemory(VkDeviceSize offset, VkDeviceSize size) const;\n\n  /// @brief Invalidates the mapped memory range to make it visible to the CPU.\n  void invalidateMappedMemory(VkDeviceSize offset, VkDeviceSize size) const;\n\n  [[nodiscard]] VkBuffer getVkBuffer() const {\n    return vkBuffer_;\n  }\n  [[nodiscard]] VkDeviceAddress getVkDeviceAddress() const {\n    IGL_DEBUG_ASSERT(vkDeviceAddress_, \"Make sure config.enableBufferDeviceAddress is enabled\");\n    return vkDeviceAddress_;\n  }\n  [[nodiscard]] VkDeviceSize getSize() const {\n    return bufferSize_;\n  }\n  [[nodiscard]] VkMemoryPropertyFlags getMemoryPropertyFlags() const {\n    return memFlags_;\n  }\n  [[nodiscard]] VkBufferUsageFlags getBufferUsageFlags() const {\n    return usageFlags_;\n  }\n  [[nodiscard]] bool isCoherentMemory() const {\n    return isCoherentMemory_;\n  }\n\n private:\n  const VulkanContext& ctx_;\n  VkDevice device_ = VK_NULL_HANDLE;\n  VkBuffer vkBuffer_ = VK_NULL_HANDLE;\n  VkDeviceMemory vkMemory_ = VK_NULL_HANDLE;\n  VmaAllocation vmaAllocation_ = VK_NULL_HANDLE;\n  VkDeviceAddress vkDeviceAddress_ = 0;\n  VkDeviceSize bufferSize_ = 0;\n  VkBufferUsageFlags usageFlags_ = 0;\n  VkMemoryPropertyFlags memFlags_ = 0;\n  void* mappedPtr_ = nullptr;\n  bool isCoherentMemory_ = false;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanContext.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <array>\n#include <cstring>\n#include <memory>\n#include <thread>\n#include <utility>\n#include <vector>\n\n// For vk_mem_alloc.h, define this before including VulkanContext.h in exactly\n// one CPP file\n#if defined(IGL_CMAKE_BUILD)\n#define VMA_IMPLEMENTATION\n#endif // IGL_CMAKE_BUILD\n\n// For volk.h, define this before including volk.h in exactly one CPP file.\n// @fb-only\n#if defined(IGL_CMAKE_BUILD)\n#define VOLK_IMPLEMENTATION\n#endif // IGL_CMAKE_BUILD\n\n#include <igl/SamplerState.h>\n#include <igl/glslang/GlslCompiler.h>\n#include <igl/vulkan/Buffer.h>\n#include <igl/vulkan/RenderPipelineState.h>\n#include <igl/vulkan/ResourcesBinder.h>\n#include <igl/vulkan/SamplerState.h>\n#include <igl/vulkan/Texture.h>\n#include <igl/vulkan/VulkanBuffer.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanDescriptorSetLayout.h>\n#include <igl/vulkan/VulkanFeatures.h>\n#include <igl/vulkan/VulkanImageView.h>\n#include <igl/vulkan/VulkanPipelineBuilder.h>\n#include <igl/vulkan/VulkanSwapchain.h>\n#include <igl/vulkan/VulkanTexture.h>\n#include <igl/vulkan/VulkanVma.h>\n#include <igl/vulkan/util/SpvReflection.h>\n\n#if IGL_PLATFORM_APPLE\n#include <igl/vulkan/moltenvk/MoltenVkHelpers.h>\n#endif\n\nnamespace {\n\n[[maybe_unused]] const char* kValidationLayerName = \"VK_LAYER_KHRONOS_validation\";\nconst char* kGfxReconstructLayerName = \"VK_LAYER_LUNARG_gfxreconstruct\";\n\n/*\n BINDLESS ONLY: these bindings should match GLSL declarations injected into shaders in\n Device::compileShaderModule(). Same with SparkSL.\n */\n// NOLINTBEGIN(readability-identifier-naming)\nconst uint32_t kBinding_Texture2D = 0;\nconst uint32_t kBinding_Texture2DArray = 1;\nconst uint32_t kBinding_Texture3D = 2;\nconst uint32_t kBinding_TextureCube = 3;\nconst uint32_t kBinding_Sampler = 4;\nconst uint32_t kBinding_SamplerShadow = 5;\nconst uint32_t kBinding_StorageImages = 6;\n// NOLINTEND(readability-identifier-naming)\n\n#if !IGL_PLATFORM_APPLE\nVKAPI_ATTR VkBool32 VKAPI_CALL\nvulkanDebugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT msgSeverity,\n                    [[maybe_unused]] VkDebugUtilsMessageTypeFlagsEXT msgType,\n                    const VkDebugUtilsMessengerCallbackDataEXT* cbData,\n                    void* userData) {\n  if (msgSeverity < VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) {\n    return VK_FALSE;\n  }\n\n  const bool isError = (msgSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) != 0;\n\n  auto* ctx = static_cast<igl::vulkan::VulkanContext*>(userData);\n\n#if IGL_LOGGING_ENABLED\n  std::array<char, 128> errorName = {};\n  int object = 0;\n  void* handle = nullptr;\n  std::array<char, 128> typeName = {};\n  void* messageID = nullptr;\n\n  if (sscanf(cbData->pMessage,\n             \"Validation Error : [ %127s ] Object %i: handle = %p, type = %127s | MessageID = %p\",\n             errorName.data(),\n             &object,\n             &handle,\n             typeName.data(),\n             &messageID) >= 2) {\n    const char* message = strrchr(cbData->pMessage, '|') + 1;\n    IGL_LOG_INFO(\n        \"%sValidation layer:\\n Validation Error: %s \\n Object %i: handle = %p, type = %s\\n \"\n        \"MessageID = %p \\n%s \\n\",\n        isError ? \"\\nERROR:\\n\" : \"\",\n        errorName.data(),\n        object,\n        handle,\n        typeName.data(),\n        messageID,\n        message);\n#if IGL_VULKAN_VALIDATION_LAYER_ERROR_SUMMARY\n    ctx.validationErrorsSummary_[errorName.data()]++;\n#endif\n  } else {\n    const bool isWarning = (msgSeverity & VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) != 0;\n\n    if (isError || isWarning || ctx->config_.enableExtraLogs) {\n      IGL_LOG_INFO(\"%sValidation layer:\\n%s\\n\", isError ? \"\\nERROR:\\n\" : \"\", cbData->pMessage);\n    }\n  }\n#endif\n\n  if (ctx->config_.terminateOnValidationError) {\n    if (IGL_DEBUG_VERIFY_NOT(isError)) {\n      std::terminate();\n    }\n  }\n\n  return VK_FALSE;\n}\n#endif // !IGL_PLATFORM_ANDROID\n\nstd::vector<VkFormat> getCompatibleDepthStencilFormats(igl::TextureFormat format) {\n  switch (format) {\n  case igl::TextureFormat::Z_UNorm16:\n    return {VK_FORMAT_D16_UNORM,\n            VK_FORMAT_D16_UNORM_S8_UINT,\n            VK_FORMAT_D24_UNORM_S8_UINT,\n            VK_FORMAT_D32_SFLOAT};\n  case igl::TextureFormat::Z_UNorm24:\n    return {VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT, VK_FORMAT_D16_UNORM_S8_UINT};\n  case igl::TextureFormat::Z_UNorm32:\n    return {VK_FORMAT_D32_SFLOAT, VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT};\n  case igl::TextureFormat::S8_UInt_Z24_UNorm:\n    return {VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT};\n  case igl::TextureFormat::S8_UInt_Z32_UNorm:\n    return {VK_FORMAT_D32_SFLOAT_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT};\n  case igl::TextureFormat::S_UInt8:\n    return {VK_FORMAT_S8_UINT, VK_FORMAT_D16_UNORM_S8_UINT, VK_FORMAT_D24_UNORM_S8_UINT};\n    // default\n  default:\n    return {VK_FORMAT_D24_UNORM_S8_UINT, VK_FORMAT_D32_SFLOAT};\n  }\n}\n\nbool validateImageLimits(VkImageType imageType,\n                         VkSampleCountFlagBits samples,\n                         const VkExtent3D& extent,\n                         const VkPhysicalDeviceLimits& limits,\n                         igl::Result* IGL_NULLABLE outResult) {\n  using igl::Result;\n\n  if (samples != VK_SAMPLE_COUNT_1_BIT && !IGL_DEBUG_VERIFY(imageType == VK_IMAGE_TYPE_2D)) {\n    Result::setResult(\n        outResult,\n        Result(Result::Code::InvalidOperation, \"Multisampling is supported only for 2D images\"));\n    return false;\n  }\n\n  if (imageType == VK_IMAGE_TYPE_1D &&\n      !IGL_DEBUG_VERIFY(extent.width <= limits.maxImageDimension1D)) {\n    Result::setResult(outResult,\n                      Result(Result::Code::InvalidOperation, \"1D texture size exceeded\"));\n    return false;\n  } else if (imageType == VK_IMAGE_TYPE_2D &&\n             !IGL_DEBUG_VERIFY(extent.width <= limits.maxImageDimension2D &&\n                               extent.height <= limits.maxImageDimension2D)) {\n    Result::setResult(outResult,\n                      Result(Result::Code::InvalidOperation, \"2D texture size exceeded\"));\n    return false;\n  } else if (imageType == VK_IMAGE_TYPE_3D &&\n             !IGL_DEBUG_VERIFY(extent.width <= limits.maxImageDimension3D &&\n                               extent.height <= limits.maxImageDimension3D &&\n                               extent.depth <= limits.maxImageDimension3D)) {\n    Result::setResult(outResult,\n                      Result(Result::Code::InvalidOperation, \"3D texture size exceeded\"));\n    return false;\n  }\n\n  Result::setOk(outResult);\n\n  return true;\n}\n\n} // namespace\n\nnamespace igl::vulkan {\n\n// @fb-only\nclass DescriptorPoolsArena final {\n public:\n  DescriptorPoolsArena(const VulkanContext& ctx,\n                       VkDescriptorType type,\n                       VkDescriptorSetLayout dsl,\n                       uint32_t numDescriptorsPerDSet,\n                       const char* IGL_NULLABLE debugName) :\n    ctx_(ctx),\n    device_(ctx.getVkDevice()),\n    numTypes_(1),\n    types_{type},\n    numDescriptorsPerDSet_(numDescriptorsPerDSet),\n    dsl_(dsl) {\n    IGL_DEBUG_ASSERT(debugName);\n    dpDebugName_ = IGL_FORMAT(\"Descriptor Pool: {}\", debugName ? debugName : \"\");\n  }\n  DescriptorPoolsArena(const VulkanContext& ctx,\n                       VkDescriptorType type0,\n                       VkDescriptorType type1,\n                       VkDescriptorSetLayout dsl,\n                       uint32_t numDescriptorsPerDSet,\n                       const char* debugName) :\n    ctx_(ctx),\n    device_(ctx.getVkDevice()),\n    numTypes_(2),\n    types_{type0, type1},\n    numDescriptorsPerDSet_(numDescriptorsPerDSet),\n    dsl_(dsl) {\n    IGL_DEBUG_ASSERT(debugName);\n    dpDebugName_ = IGL_FORMAT(\"Descriptor Pool: {}\", debugName ? debugName : \"\");\n  }\n  DescriptorPoolsArena(const DescriptorPoolsArena&) = delete;\n  DescriptorPoolsArena& operator=(const DescriptorPoolsArena&) = delete;\n  DescriptorPoolsArena(DescriptorPoolsArena&&) = delete;\n  DescriptorPoolsArena& operator=(DescriptorPoolsArena&&) = delete;\n  ~DescriptorPoolsArena() {\n    extinct_.push_back({pool_, {}});\n    ctx_.deferredTask(std::packaged_task<void()>(\n        [extinct = std::move(extinct_), vf = ctx_.vf_, device = device_]() {\n          for (const auto& p : extinct) {\n            vf.vkDestroyDescriptorPool(device, p.pool, nullptr);\n          }\n        }));\n  }\n  [[nodiscard]] VkDescriptorSetLayout getVkDescriptorSetLayout() const {\n    return dsl_;\n  }\n  [[nodiscard]] VkDescriptorSet getNextDescriptorSet(\n      VulkanImmediateCommands& ic,\n      VulkanImmediateCommands::SubmitHandle nextSubmitHandle) {\n    IGL_DEBUG_ASSERT(!nextSubmitHandle.empty());\n\n    VkDescriptorSet dset = VK_NULL_HANDLE;\n    if (!numRemainingDSetsInPool_) {\n      switchToNewDescriptorPool(ic, nextSubmitHandle);\n    }\n    VK_ASSERT(ivkAllocateDescriptorSet(&ctx_.vf_, device_, pool_, dsl_, &dset));\n    numRemainingDSetsInPool_--;\n    return dset;\n  }\n\n private:\n  void switchToNewDescriptorPool(VulkanImmediateCommands& ic,\n                                 VulkanImmediateCommands::SubmitHandle nextSubmitHandle) {\n    numRemainingDSetsInPool_ = kNumDSetsPerPool;\n\n    if (pool_ != VK_NULL_HANDLE) {\n      extinct_.push_back({pool_, nextSubmitHandle});\n    }\n    // first, let's try to reuse the oldest extinct pool (never reuse pools that are tagged with the\n    // same SubmitHandle because they have not yet been submitted)\n    if (extinct_.size() > 1 && extinct_.front().handle != nextSubmitHandle) {\n      const ExtinctDescriptorPool p = extinct_.front();\n      if (ic.isReady(p.handle)) {\n        pool_ = p.pool;\n        extinct_.pop_front();\n        VK_ASSERT(ctx_.vf_.vkResetDescriptorPool(device_, pool_, VkDescriptorPoolResetFlags{}));\n        return;\n      }\n    }\n    // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n    VkDescriptorPoolSize poolSizes[IGL_ARRAY_NUM_ELEMENTS(types_)];\n    for (uint32_t i = 0; i != numTypes_; i++) {\n      poolSizes[i] = VkDescriptorPoolSize{\n          types_[i], numDescriptorsPerDSet_ ? kNumDSetsPerPool * numDescriptorsPerDSet_ : 1u};\n    }\n    VK_ASSERT(ivkCreateDescriptorPool(&ctx_.vf_,\n                                      device_,\n                                      VkDescriptorPoolCreateFlags{},\n                                      kNumDSetsPerPool,\n                                      numTypes_,\n                                      poolSizes,\n                                      &pool_));\n    VK_ASSERT(ivkSetDebugObjectName(\n        &ctx_.vf_, device_, VK_OBJECT_TYPE_DESCRIPTOR_POOL, (uint64_t)pool_, dpDebugName_.c_str()));\n  }\n\n private:\n  static constexpr uint32_t kNumDSetsPerPool = 64;\n\n  const VulkanContext& ctx_;\n  VkDevice device_ = VK_NULL_HANDLE;\n  VkDescriptorPool pool_ = VK_NULL_HANDLE;\n  const uint32_t numTypes_ = 0;\n  VkDescriptorType types_[2] = {VK_DESCRIPTOR_TYPE_MAX_ENUM, VK_DESCRIPTOR_TYPE_MAX_ENUM};\n  const uint32_t numDescriptorsPerDSet_ = 0;\n  uint32_t numRemainingDSetsInPool_ = 0;\n  std::string dpDebugName_;\n\n  VkDescriptorSetLayout dsl_ = VK_NULL_HANDLE; // owned elsewhere\n\n  struct ExtinctDescriptorPool {\n    VkDescriptorPool pool = VK_NULL_HANDLE;\n    VulkanImmediateCommands::SubmitHandle handle = {};\n  };\n\n  std::deque<ExtinctDescriptorPool> extinct_;\n};\n\nnamespace {\n\nstruct BindGroupMetadataTextures {\n  // cold\n  BindGroupTextureDesc desc = {};\n  VkDescriptorPool pool = VK_NULL_HANDLE;\n  // hot\n  VkDescriptorSet dset = VK_NULL_HANDLE;\n  uint32_t usageMask = 0;\n};\n\nstruct BindGroupMetadataBuffers {\n  // cold\n  BindGroupBufferDesc desc = {};\n  VkDescriptorPool pool = VK_NULL_HANDLE;\n  // hot\n  VkDescriptorSet dset = VK_NULL_HANDLE;\n  uint32_t usageMask = 0;\n};\n\n} // namespace\n\nstruct VulkanContextImpl final {\n  std::thread::id contextThread = std::this_thread::get_id();\n\n  // Vulkan Memory Allocator\n  VmaAllocator vma = VK_NULL_HANDLE;\n  // :)\n  std::unordered_map<VkDescriptorSetLayout, std::unique_ptr<DescriptorPoolsArena>>\n      arenaCombinedImageSamplers;\n  std::unordered_map<VkDescriptorSetLayout, std::unique_ptr<DescriptorPoolsArena>> arenaBuffers;\n  std::unordered_map<VkDescriptorSetLayout, std::unique_ptr<DescriptorPoolsArena>>\n      arenaStorageImages;\n  std::unique_ptr<VulkanDescriptorSetLayout> dslBindless; // everything\n  VkDescriptorPool dpBindless = VK_NULL_HANDLE;\n  VkDescriptorSet dsBindless = VK_NULL_HANDLE;\n  uint32_t currentMaxBindlessTextures = 8;\n  uint32_t currentMaxBindlessSamplers = 8;\n\n  Pool<BindGroupBufferTag, BindGroupMetadataBuffers> bindGroupBuffersPool;\n  Pool<BindGroupTextureTag, BindGroupMetadataTextures> bindGroupTexturesPool;\n\n  SamplerHandle dummySampler = {};\n  TextureHandle dummyTexture = {};\n\n  // NOLINTBEGIN(readability-identifier-naming)\n  DescriptorPoolsArena& getOrCreateArena_CombinedImageSamplers(const VulkanContext& ctx,\n                                                               VkDescriptorSetLayout dsl,\n                                                               uint32_t numBindings)\n  // NOLINTEND(readability-identifier-naming)\n  {\n    auto it = arenaCombinedImageSamplers.find(dsl);\n    if (it != arenaCombinedImageSamplers.end()) {\n      return *it->second;\n    }\n    arenaCombinedImageSamplers[dsl] =\n        std::make_unique<DescriptorPoolsArena>(ctx,\n                                               VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,\n                                               dsl,\n                                               numBindings,\n                                               \"arenaCombinedImageSamplers_\");\n    return *arenaCombinedImageSamplers[dsl].get();\n  }\n  // NOLINTBEGIN(readability-identifier-naming)\n  DescriptorPoolsArena& getOrCreateArena_StorageImages(const VulkanContext& ctx,\n                                                       VkDescriptorSetLayout dsl,\n                                                       uint32_t numBindings)\n  // NOLINTEND(readability-identifier-naming)\n  {\n    auto it = arenaStorageImages.find(dsl);\n    if (it != arenaStorageImages.end()) {\n      return *it->second;\n    }\n    arenaStorageImages[dsl] = std::make_unique<DescriptorPoolsArena>(\n        ctx, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, dsl, numBindings, \"arenaStorageImages_\");\n    return *arenaStorageImages[dsl].get();\n  }\n  // NOLINTBEGIN(readability-identifier-naming)\n  DescriptorPoolsArena& getOrCreateArena_Buffers(const VulkanContext& ctx,\n                                                 VkDescriptorSetLayout dsl,\n                                                 uint32_t numBindings)\n  // NOLINTEND(readability-identifier-naming)\n  {\n    auto it = arenaBuffers.find(dsl);\n    if (it != arenaBuffers.end()) {\n      return *it->second;\n    }\n    arenaBuffers[dsl] = std::make_unique<DescriptorPoolsArena>(ctx,\n                                                               VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,\n                                                               VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,\n                                                               dsl,\n                                                               numBindings,\n                                                               \"arenaBuffers_\");\n    return *arenaBuffers[dsl].get();\n  }\n};\n\nVulkanContext::VulkanContext(VulkanContextConfig config,\n                             void* IGL_NULLABLE window,\n                             void* IGL_NULLABLE display) :\n  tableImpl_(std::make_unique<VulkanFunctionTable>()),\n  // NOLINTBEGIN(clang-diagnostic-missing-designated-field-initializers)\n  vkPhysicalDeviceDescriptorIndexingProperties_({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT,\n      .pNext = nullptr,\n  }),\n  vkPhysicalDeviceDriverProperties_({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR,\n      .pNext = &vkPhysicalDeviceDescriptorIndexingProperties_,\n  }),\n  vkPhysicalDeviceProperties2_({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2,\n      .pNext = &vkPhysicalDeviceDriverProperties_,\n  }),\n  vkPhysicalDeviceMeshShaderPropertiesEXT_({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_EXT,\n      .pNext = nullptr,\n  }),\n  // NOLINTEND(clang-diagnostic-missing-designated-field-initializers)\n  features_(config),\n  vf_(*tableImpl_),\n  config_(config) {\n  IGL_PROFILER_THREAD(\"MainThread\");\n\n  pimpl_ = std::make_unique<VulkanContextImpl>();\n\n#if defined(IGL_CMAKE_BUILD)\n  const auto result = volkInitialize();\n\n  // Do not remove for backward compatibility with projects using global functions.\n  if (result != VK_SUCCESS) {\n    IGL_LOG_ERROR(\"volkInitialize() failed with error code %d\\n\", static_cast<int>(result));\n    abort();\n  };\n#endif // IGL_CMAKE_BUILD\n  vulkan::functions::initialize(*tableImpl_);\n\n  glslang::initializeCompiler();\n\n  createInstance();\n\n  if (config_.headless) {\n    IGL_DEBUG_ASSERT(features_.has_VK_EXT_headless_surface,\n                     \"VK_EXT_headless_surface extension is not supported\");\n    createHeadlessSurface();\n  } else if (window || display) {\n    createSurface(window, display);\n  }\n}\n\nVulkanContext::~VulkanContext() {\n  IGL_PROFILER_FUNCTION();\n\n  if (vkDevice_) {\n    waitIdle();\n  }\n\n#if defined(IGL_WITH_TRACY_GPU)\n  if (tracyCtx_) {\n    TracyVkDestroy(tracyCtx_);\n    vf_.vkDestroyCommandPool(vkDevice_, profilingCommandPool_, nullptr);\n  }\n#endif\n\n  dummyStorageBuffer_.reset();\n  dummyUniformBuffer_.reset();\n\n#if IGL_DEBUG_ABORT_ENABLED\n  for (const auto& t : pimpl_->bindGroupTexturesPool.objects_) {\n    if (t.obj_.dset != VK_NULL_HANDLE) {\n      IGL_DEBUG_ABORT(\"Leaked texture bind group detected! %s\", t.obj_.desc.debugName.c_str());\n    }\n  }\n  for (const auto& t : pimpl_->bindGroupBuffersPool.objects_) {\n    if (t.obj_.dset != VK_NULL_HANDLE) {\n      IGL_DEBUG_ABORT(\"Leaked buffer bind group detected! %s\", t.obj_.desc.debugName.c_str());\n    }\n  }\n#endif // IGL_DEBUG_ABORT_ENABLED\n\n  // BindGroups can hold shared pointers to textures/samplers/buffers. Release them here.\n  pimpl_->bindGroupTexturesPool.clear();\n  pimpl_->bindGroupBuffersPool.clear();\n\n  destroy(pimpl_->dummySampler);\n  destroy(pimpl_->dummyTexture);\n\n  pruneTextures();\n\n#if IGL_LOGGING_ENABLED\n  if (textures_.numObjects()) {\n    IGL_LOG_ERROR(\"Leaked %u textures\\n\", textures_.numObjects());\n  }\n  if (samplers_.numObjects()) {\n    IGL_LOG_ERROR(\"Leaked %u samplers\\n\", samplers_.numObjects());\n  }\n#endif // IGL_LOGGING_ENABLED\n  textures_.clear();\n  samplers_.clear();\n\n  // This will free an internal buffer that was allocated by VMA\n  stagingDevice_.reset(nullptr);\n\n  if (vkDevice_) {\n    for (auto r : renderPasses_) {\n      vf_.vkDestroyRenderPass(vkDevice_, r, nullptr);\n    }\n  }\n\n  pimpl_->dslBindless.reset(nullptr);\n\n  swapchain_.reset(nullptr); // Swapchain has to be destroyed prior to Surface\n\n  waitDeferredTasks();\n\n  immediate_.reset(nullptr);\n  timelineSemaphore_.reset(nullptr);\n\n  if (vkDevice_) {\n    if (pimpl_->dpBindless != VK_NULL_HANDLE) {\n      vf_.vkDestroyDescriptorPool(vkDevice_, pimpl_->dpBindless, nullptr);\n    }\n    for (auto& p : ycbcrConversionInfos_) {\n      if (p.second.conversion != VK_NULL_HANDLE) {\n        vf_.vkDestroySamplerYcbcrConversion(vkDevice_, p.second.conversion, nullptr);\n      }\n    }\n    pimpl_->arenaCombinedImageSamplers.clear();\n    pimpl_->arenaStorageImages.clear();\n    pimpl_->arenaBuffers.clear();\n    vf_.vkDestroyPipelineCache(vkDevice_, pipelineCache_, nullptr);\n  }\n\n  if (vkSurface_ != VK_NULL_HANDLE) {\n    vf_.vkDestroySurfaceKHR(vkInstance_, vkSurface_, nullptr);\n  }\n\n  // Clean up VMA\n  if (IGL_VULKAN_USE_VMA) {\n    vmaDestroyAllocator(pimpl_->vma);\n  }\n\n  if (vkDevice_) {\n    vf_.vkDestroyDevice(vkDevice_, nullptr); // Device has to be destroyed prior to Instance\n  }\n#if !IGL_PLATFORM_ANDROID\n  if (vf_.vkDestroyDebugUtilsMessengerEXT != nullptr) {\n    vf_.vkDestroyDebugUtilsMessengerEXT(vkInstance_, vkDebugUtilsMessenger_, nullptr);\n  }\n#endif // !IGL_PLATFORM_ANDROID\n  if (vf_.vkDestroyInstance != nullptr) {\n    vf_.vkDestroyInstance(vkInstance_, nullptr);\n  }\n\n  glslang::finalizeCompiler();\n\n#if IGL_LOGGING_ENABLED\n  if (config_.enableExtraLogs) {\n    IGL_LOG_INFO(\"Vulkan graphics pipelines created: %u\\n\",\n                 VulkanPipelineBuilder::getNumPipelinesCreated());\n    IGL_LOG_INFO(\"Vulkan compute pipelines created: %u\\n\",\n                 VulkanComputePipelineBuilder::getNumPipelinesCreated());\n  }\n#endif // IGL_LOGGING_ENABLED\n\n#if defined(IGL_CMAKE_BUILD)\n  volkFinalize();\n#endif\n\n#if IGL_VULKAN_VALIDATION_LAYER_ERROR_SUMMARY\n  if (!validationErrorsSummary_.empty()) {\n    IGL_LOG_INFO(\"Vulkan Validation Layer errors found: %u\\n\", validationErrorsSummary_.size());\n    for (const auto& error : validationErrorsSummary_) {\n      IGL_LOG_ERROR(\"\\t%s: %u\\n\", error.first.c_str(), error.second);\n    }\n  }\n#endif\n}\n\nvoid VulkanContext::createInstance() {\n  IGL_DEBUG_ASSERT(vkInstance_ == VK_NULL_HANDLE, \"createInstance() is not reentrant\");\n\n  // Enumerate all instance extensions\n  features_.enumerate(vf_);\n  // NOLINTBEGIN(readability-identifier-naming)\n  features_.enableCommonInstanceExtensions(config_);\n  for (size_t index = 0; index < config_.numExtraInstanceExtensions; ++index) {\n    features_.enable(config_.extraInstanceExtensions[index],\n                     VulkanFeatures::ExtensionType::Instance);\n  }\n  // NOLINTEND(readability-identifier-naming)\n  auto instanceExtensions = features_.allEnabled(VulkanFeatures::ExtensionType::Instance);\n\n  std::vector<const char*> layers;\n  // @fb-only\n#if !IGL_PLATFORM_ANDROID && !IGL_PLATFORM_MACOSX\n  if (config_.enableValidation) {\n    layers.emplace_back(kValidationLayerName);\n  }\n#endif\n  if (config_.enableGfxReconstruct) {\n    layers.emplace_back(kGfxReconstructLayerName);\n  }\n\n  // Validation Features not available on most Android devices\n#if !IGL_PLATFORM_ANDROID && !IGL_PLATFORM_MACOSX\n  std::vector<VkValidationFeatureEnableEXT> valFeatures;\n  if (config_.enableGPUAssistedValidation) {\n    valFeatures.push_back(VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT);\n  }\n  const VkValidationFeaturesEXT features = {\n      .sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT,\n      .enabledValidationFeatureCount = (uint32_t)valFeatures.size(),\n      .pEnabledValidationFeatures = valFeatures.empty() ? nullptr : valFeatures.data(),\n  };\n#endif // !IGL_PLATFORM_ANDROID\n\n  const VkApplicationInfo appInfo = {\n      .sType = VK_STRUCTURE_TYPE_APPLICATION_INFO,\n      .pApplicationName = config_.applicationName,\n      .applicationVersion = VK_MAKE_VERSION(1, 0, 0),\n      .pEngineName = config_.engineName,\n      .engineVersion = VK_MAKE_VERSION(1, 0, 0),\n      .apiVersion = VK_API_VERSION_1_2,\n  };\n\n  const VkInstanceCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO,\n#if !IGL_PLATFORM_ANDROID && !IGL_PLATFORM_MACOSX\n      .pNext = config_.enableValidation ? &features : nullptr,\n#endif\n      .flags = features_.has_VK_KHR_portability_enumeration\n                   ? VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR\n                   : (VkInstanceCreateFlags)0,\n      .pApplicationInfo = &appInfo,\n      .enabledLayerCount = static_cast<uint32_t>(layers.size()),\n      .ppEnabledLayerNames = !layers.empty() ? layers.data() : nullptr,\n      .enabledExtensionCount = (uint32_t)instanceExtensions.size(),\n      .ppEnabledExtensionNames = instanceExtensions.data(),\n  };\n\n  {\n    // Prints information about available instance layers\n    uint32_t count = 0;\n    vf_.vkEnumerateInstanceLayerProperties(&count, nullptr);\n    std::vector<VkLayerProperties> layerProperties(count);\n    vf_.vkEnumerateInstanceLayerProperties(&count, layerProperties.data());\n\n    IGL_LOG_INFO(\"Found %u Vulkan instance layers\\n\", count);\n    for ([[maybe_unused]] const auto& layer : layerProperties) {\n      IGL_LOG_INFO(\"\\t%s - %u.%u.%u.%u, %u\\n\",\n                   layer.layerName,\n                   VK_API_VERSION_MAJOR(layer.specVersion),\n                   VK_API_VERSION_MINOR(layer.specVersion),\n                   VK_API_VERSION_VARIANT(layer.specVersion),\n                   VK_API_VERSION_PATCH(layer.specVersion),\n                   layer.implementationVersion);\n    }\n  }\n\n  const VkResult result = vf_.vkCreateInstance(&ci, nullptr, &vkInstance_);\n\n  IGL_DEBUG_ASSERT(result != VK_ERROR_LAYER_NOT_PRESENT,\n                   \"vkCreateInstance() failed. Did you forget to install the Vulkan SDK?\");\n\n  VK_ASSERT(result);\n\n#if defined(IGL_CMAKE_BUILD)\n  // Do not remove for backward compatibility with projects using global functions.\n  volkLoadInstance(vkInstance_);\n#endif\n  const bool enableExtDebugUtils =\n      features_.enable(VK_EXT_DEBUG_UTILS_EXTENSION_NAME, VulkanFeatures::ExtensionType::Instance);\n  vulkan::functions::loadInstanceFunctions(*tableImpl_, vkInstance_, enableExtDebugUtils);\n\n#if !IGL_PLATFORM_APPLE\n  if (features_.enabled(VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) {\n    VK_ASSERT(ivkCreateDebugUtilsMessenger(\n        &vf_, vkInstance_, &vulkanDebugCallback, this, &vkDebugUtilsMessenger_));\n  }\n#endif // !IGL_PLATFORM_APPLE\n\n#if IGL_LOGGING_ENABLED\n  if (config_.enableExtraLogs) {\n    // log available instance extensions\n    IGL_LOG_INFO(\"Vulkan instance extensions:\\n\");\n    for (const auto& extension :\n         features_.allAvailableExtensions(VulkanFeatures::ExtensionType::Instance)) {\n      IGL_LOG_INFO(\"  %s\\n\", extension.c_str());\n    }\n  }\n#endif\n}\n\nvoid VulkanContext::createHeadlessSurface() {\n  const VkHeadlessSurfaceCreateInfoEXT ci = {\n      .sType = VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT,\n      .pNext = nullptr,\n      .flags = 0,\n  };\n\n  VK_ASSERT(vf_.vkCreateHeadlessSurfaceEXT(vkInstance_, &ci, nullptr, &vkSurface_));\n}\n\nvoid VulkanContext::createSurface(void* IGL_NULLABLE window, void* IGL_NULLABLE display) {\n  [[maybe_unused]] void* layer = nullptr;\n#if IGL_PLATFORM_APPLE\n  layer = igl::vulkan::getCAMetalLayer(window);\n#endif\n  VK_ASSERT(ivkCreateSurface(&vf_, vkInstance_, window, display, layer, &vkSurface_));\n}\n\nResult VulkanContext::queryDevices(const HWDeviceQueryDesc& desc,\n                                   std::vector<HWDeviceDesc>& outDevices) {\n  outDevices.clear();\n\n  // Physical devices\n  uint32_t deviceCount = 0;\n\n  if (vf_.vkEnumeratePhysicalDevices == nullptr) {\n    return Result(Result::Code::Unsupported, \"Vulkan functions are not loaded\");\n  }\n\n  VK_ASSERT_RETURN(vf_.vkEnumeratePhysicalDevices(vkInstance_, &deviceCount, nullptr));\n  std::vector<VkPhysicalDevice> vkDevices(deviceCount);\n  VK_ASSERT_RETURN(vf_.vkEnumeratePhysicalDevices(vkInstance_, &deviceCount, vkDevices.data()));\n\n  auto convertVulkanDeviceTypeToIGL = [](VkPhysicalDeviceType vkDeviceType) -> HWDeviceType {\n    switch (vkDeviceType) {\n    case VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU:\n      return HWDeviceType::IntegratedGpu;\n    case VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU:\n      return HWDeviceType::DiscreteGpu;\n    case VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU:\n      return HWDeviceType::ExternalGpu;\n    case VK_PHYSICAL_DEVICE_TYPE_CPU:\n      return HWDeviceType::SoftwareGpu;\n    default:\n      return HWDeviceType::Unknown;\n    }\n  };\n\n  const HWDeviceType desiredDeviceType = desc.hardwareType;\n\n  for (uint32_t i = 0; i < deviceCount; ++i) {\n    VkPhysicalDevice physicalDevice = vkDevices[i];\n    VkPhysicalDeviceProperties deviceProperties;\n    vf_.vkGetPhysicalDeviceProperties(physicalDevice, &deviceProperties);\n\n    const HWDeviceType deviceType = convertVulkanDeviceTypeToIGL(deviceProperties.deviceType);\n\n    // filter non-suitable hardware devices\n    if (desiredDeviceType != HWDeviceType::Unknown && deviceType != desiredDeviceType) {\n      continue;\n    }\n\n    outDevices.emplace_back((uintptr_t)vkDevices[i],\n                            deviceType,\n                            deviceProperties.vendorID,\n                            deviceProperties.deviceName,\n                            std::to_string(deviceProperties.vendorID));\n  }\n\n  if (outDevices.empty()) {\n    return Result(Result::Code::Unsupported, \"No Vulkan devices matching your criteria\");\n  }\n\n  return Result();\n}\n\nResult VulkanContext::initContext(const HWDeviceDesc& desc,\n                                  size_t numExtraDeviceExtensions,\n                                  const char* IGL_NULLABLE* IGL_NULLABLE extraDeviceExtensions,\n                                  const VulkanFeatures* IGL_NULLABLE requestedFeatures,\n                                  const char* IGL_NULLABLE debugName) {\n  IGL_DEBUG_ASSERT(vkDevice_ == VK_NULL_HANDLE);\n\n  if (desc.guid == 0UL) {\n    IGL_LOG_ERROR(\"Invalid hardwareGuid(%lu)\", desc.guid);\n    return Result(Result::Code::Unsupported, \"Vulkan is not supported\");\n  }\n\n  vkPhysicalDevice_ = (VkPhysicalDevice)desc.guid; // NOLINT(performance-no-int-to-ptr)\n\n  // Caches the memory types\n  vf_.vkGetPhysicalDeviceMemoryProperties(vkPhysicalDevice_, &memoryProperties);\n\n  useStagingForBuffers_ = !ivkIsHostVisibleSingleHeapMemory(&memoryProperties);\n\n  // Get the available physical device features\n  VulkanFeatures availableFeatures(config_);\n  availableFeatures.populateWithAvailablePhysicalDeviceFeatures(*this, vkPhysicalDevice_);\n\n  // Use the requested features passed to the function (if any) or use the default features\n  if (requestedFeatures) {\n    features_ = *requestedFeatures;\n  }\n\n  features_.populateWithAvailablePhysicalDeviceFeatures(*this, vkPhysicalDevice_);\n\n  // ... and check whether they are available in the physical device (they should be)\n  {\n    auto featureCheckResult = features_.checkSelectedFeatures(availableFeatures);\n    if (!featureCheckResult.isOk()) {\n      return featureCheckResult;\n    }\n  }\n\n  vf_.vkGetPhysicalDeviceProperties2(vkPhysicalDevice_, &vkPhysicalDeviceProperties2_);\n\n  const uint32_t apiVersion = vkPhysicalDeviceProperties2_.properties.apiVersion;\n\n  if (config_.enableExtraLogs) {\n    IGL_LOG_INFO(\"Device: %s\\n\", debugName ? debugName : \"igl/vulkan/VulkanContext.cpp\");\n    IGL_LOG_INFO(\"Vulkan physical device: %s\\n\",\n                 vkPhysicalDeviceProperties2_.properties.deviceName);\n    IGL_LOG_INFO(\"           API version: %i.%i.%i.%i\\n\",\n                 VK_API_VERSION_MAJOR(apiVersion),\n                 VK_API_VERSION_MINOR(apiVersion),\n                 VK_API_VERSION_PATCH(apiVersion),\n                 VK_API_VERSION_VARIANT(apiVersion));\n    IGL_LOG_INFO(\"           Driver info: %s %s\\n\",\n                 vkPhysicalDeviceDriverProperties_.driverName,\n                 vkPhysicalDeviceDriverProperties_.driverInfo);\n  }\n\n  features_.enumerate(vf_, vkPhysicalDevice_);\n\n#if IGL_LOGGING_ENABLED\n  if (config_.enableExtraLogs) {\n    IGL_LOG_INFO(\"Vulkan physical device extensions:\\n\");\n    // log available physical device extensions\n    for (const auto& extension :\n         features_.allAvailableExtensions(VulkanFeatures::ExtensionType::Device)) {\n      IGL_LOG_INFO(\"  %s\\n\", extension.c_str());\n    }\n  }\n#endif\n\n  features_.enableCommonDeviceExtensions(config_);\n  // Enable extra device extensions\n  for (size_t i = 0; i < numExtraDeviceExtensions; i++) {\n    features_.enable(extraDeviceExtensions[i], VulkanFeatures::ExtensionType::Device);\n  }\n\n  if (features_.available(VK_EXT_MESH_SHADER_EXTENSION_NAME,\n                          VulkanFeatures::ExtensionType::Device)) {\n    vkPhysicalDeviceDescriptorIndexingProperties_.pNext = &vkPhysicalDeviceMeshShaderPropertiesEXT_;\n    vf_.vkGetPhysicalDeviceProperties2(vkPhysicalDevice_, &vkPhysicalDeviceProperties2_);\n  }\n\n  VulkanQueuePool queuePool(vf_, vkPhysicalDevice_);\n\n  // Reserve IGL Vulkan queues\n  auto graphicsQueueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_GRAPHICS_BIT);\n  auto computeQueueDescriptor = queuePool.findQueueDescriptor(VK_QUEUE_COMPUTE_BIT);\n\n  if (!graphicsQueueDescriptor.isValid()) {\n    IGL_LOG_ERROR(\"VK_QUEUE_GRAPHICS_BIT is not supported\");\n    return Result(Result::Code::Unsupported, \"VK_QUEUE_GRAPHICS_BIT is not supported\");\n  }\n\n  if (!computeQueueDescriptor.isValid()) {\n    IGL_LOG_ERROR(\"VK_QUEUE_COMPUTE_BIT is not supported\");\n    return Result(Result::Code::Unsupported, \"VK_QUEUE_COMPUTE_BIT is not supported\");\n  }\n\n  deviceQueues_.graphicsQueueFamilyIndex = graphicsQueueDescriptor.familyIndex;\n  deviceQueues_.computeQueueFamilyIndex = computeQueueDescriptor.familyIndex;\n\n  queuePool.reserveQueue(graphicsQueueDescriptor);\n  queuePool.reserveQueue(computeQueueDescriptor);\n\n  const auto qcis = queuePool.getQueueCreationInfos();\n\n  auto deviceExtensions = features_.allEnabled(VulkanFeatures::ExtensionType::Device);\n\n  VkDevice device = nullptr;\n  VK_ASSERT_RETURN(ivkCreateDevice(&vf_,\n                                   vkPhysicalDevice_,\n                                   qcis.size(),\n                                   qcis.data(),\n                                   deviceExtensions.size(),\n                                   deviceExtensions.data(),\n                                   &features_.vkPhysicalDeviceFeatures2,\n                                   &device));\n\n  // Check that device is not null before proceeding\n  if (device == VK_NULL_HANDLE) {\n    return Result(Result::Code::InvalidOperation, \"Failed to create Vulkan device\");\n  }\n#if defined(IGL_CMAKE_BUILD)\n  if (!config_.enableConcurrentVkDevicesSupport) {\n    // Do not remove for backward compatibility with projects using global functions.\n    volkLoadDevice(device);\n  }\n#endif\n\n  // Table functions are always bound to a device. Project using enableConcurrentVkDevicesSupport\n  // should use own copy of function table bound to a device.\n  vulkan::functions::loadDeviceFunctions(*tableImpl_, device);\n\n  if (features_.has_VK_KHR_buffer_device_address && vf_.vkGetBufferDeviceAddressKHR == nullptr) {\n    return Result(Result::Code::InvalidOperation, \"Cannot initialize VK_KHR_buffer_device_address\");\n  }\n\n  vf_.vkGetDeviceQueue(\n      device, deviceQueues_.graphicsQueueFamilyIndex, 0, &deviceQueues_.graphicsQueue);\n  vf_.vkGetDeviceQueue(\n      device, deviceQueues_.computeQueueFamilyIndex, 0, &deviceQueues_.computeQueue);\n\n  vkDevice_ = device;\n\n  VK_ASSERT(ivkSetDebugObjectName(&vf_,\n                                  vkDevice_,\n                                  VK_OBJECT_TYPE_DEVICE,\n                                  (uint64_t)vkDevice_,\n                                  IGL_FORMAT(\"Device: VulkanContext::device_ {}\",\n                                             debugName ? debugName : \"igl/vulkan/VulkanContext.cpp\")\n                                      .c_str()));\n\n  VK_ASSERT(ivkSetDebugObjectName(\n      &vf_,\n      vkDevice_,\n      VK_OBJECT_TYPE_QUEUE,\n      (uint64_t)deviceQueues_.graphicsQueue,\n      IGL_FORMAT(\"Graphics{} queue: {}\",\n                 deviceQueues_.graphicsQueue == deviceQueues_.computeQueue ? \"/compute\" : \"\",\n                 debugName ? debugName : \"igl/vulkan/VulkanContext.cpp\")\n          .c_str()));\n  if (deviceQueues_.graphicsQueue != deviceQueues_.computeQueue) {\n    VK_ASSERT(ivkSetDebugObjectName(\n        &vf_,\n        vkDevice_,\n        VK_OBJECT_TYPE_QUEUE,\n        (uint64_t)deviceQueues_.computeQueue,\n        IGL_FORMAT(\"Compute queue: {}\", debugName ? debugName : \"igl/vulkan/VulkanContext.cpp\")\n            .c_str()));\n  }\n\n  immediate_ = std::make_unique<VulkanImmediateCommands>(vf_,\n                                                         device,\n                                                         deviceQueues_.graphicsQueueFamilyIndex,\n                                                         config_.exportableFences,\n                                                         features_.has_VK_KHR_timeline_semaphore &&\n                                                             features_.has_VK_KHR_synchronization2,\n                                                         \"VulkanContext::immediate_\");\n  IGL_DEBUG_ASSERT(config_.maxResourceCount > 0,\n                   \"Max resource count needs to be greater than zero\");\n  syncSubmitHandles.resize(config_.maxResourceCount);\n\n  // create Vulkan pipeline cache\n  {\n    const VkPipelineCacheCreateInfo ci = {\n        .sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO,\n        .flags = VkPipelineCacheCreateFlags(0),\n        .initialDataSize = config_.pipelineCacheDataSize,\n        .pInitialData = config_.pipelineCacheData,\n    };\n    vf_.vkCreatePipelineCache(device, &ci, nullptr, &pipelineCache_);\n  }\n\n  // Create Vulkan Memory Allocator\n  if (IGL_VULKAN_USE_VMA) {\n    VK_ASSERT_RETURN(\n        ivkVmaCreateAllocator(&vf_,\n                              vkPhysicalDevice_,\n                              vkDevice_,\n                              vkInstance_,\n                              apiVersion > VK_API_VERSION_1_3 ? VK_API_VERSION_1_3 : apiVersion,\n                              features_.has_VK_KHR_buffer_device_address,\n                              (VkDeviceSize)config_.vmaPreferredLargeHeapBlockSize,\n                              &pimpl_->vma));\n  }\n\n  // Caches the memory types\n  vf_.vkGetPhysicalDeviceMemoryProperties(vkPhysicalDevice_, &memoryProperties);\n\n  // The staging device will use VMA to allocate a buffer, so this needs\n  // to happen after VMA has been initialized.\n  stagingDevice_ = std::make_unique<VulkanStagingDevice>(*this);\n\n  // Unextended Vulkan 1.1 does not allow sparse (VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT)\n  // bindings. Our descriptor set layout emulates OpenGL binding slots but we cannot put\n  // VK_NULL_HANDLE into empty slots. We use dummy buffers to stick them into those empty slots.\n  dummyUniformBuffer_ = createBuffer(256,\n                                     VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT,\n                                     VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,\n                                     nullptr,\n                                     \"Buffer: dummy uniform\");\n  dummyStorageBuffer_ = createBuffer(256,\n                                     VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,\n                                     VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,\n                                     nullptr,\n                                     \"Buffer: dummy storage\");\n\n  // default texture\n  {\n    const VkFormat dummyTextureFormat = VK_FORMAT_R8G8B8A8_UNORM;\n    Result result;\n    auto image = createImage(VK_IMAGE_TYPE_2D,\n                             VkExtent3D{1, 1, 1},\n                             dummyTextureFormat,\n                             1,\n                             1,\n                             VK_IMAGE_TILING_OPTIMAL,\n                             VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT |\n                                 VK_IMAGE_USAGE_STORAGE_BIT,\n                             VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,\n                             0,\n                             VK_SAMPLE_COUNT_1_BIT,\n                             &result,\n                             \"Image: dummy 1x1\");\n    if (!IGL_DEBUG_VERIFY(result.isOk())) {\n      return result;\n    }\n    if (!IGL_DEBUG_VERIFY(image.valid())) {\n      return Result(Result::Code::InvalidOperation, \"Cannot create VulkanImage\");\n    }\n    auto imageView = image.createImageView(VK_IMAGE_VIEW_TYPE_2D,\n                                           dummyTextureFormat,\n                                           VK_IMAGE_ASPECT_COLOR_BIT,\n                                           0,\n                                           VK_REMAINING_MIP_LEVELS,\n                                           0,\n                                           1,\n                                           \"Image View: dummy 1x1\");\n    if (!IGL_DEBUG_VERIFY(imageView.valid())) {\n      return Result(Result::Code::InvalidOperation, \"Cannot create VulkanImageView\");\n    }\n    pimpl_->dummyTexture =\n        textures_.create(std::make_shared<VulkanTexture>(std::move(image), std::move(imageView)));\n    IGL_DEBUG_ASSERT(textures_.numObjects() == 1);\n    const uint32_t pixel = 0xFF000000;\n\n    const VkImageAspectFlags imageAspectFlags =\n        (*textures_.get(pimpl_->dummyTexture))->imageView_.getVkImageAspectFlags();\n    stagingDevice_->imageData(\n        (*textures_.get(pimpl_->dummyTexture))->image_,\n        TextureType::TwoD,\n        TextureRangeDesc::new2D(0, 0, 1, 1),\n        TextureFormatProperties::fromTextureFormat(TextureFormat::RGBA_UNorm8),\n        0,\n        imageAspectFlags,\n        &pixel);\n  }\n\n  // default sampler\n  pimpl_->dummySampler = createSampler(\n      {\n          .sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO,\n          .pNext = nullptr,\n          .flags = 0,\n          .magFilter = VK_FILTER_LINEAR,\n          .minFilter = VK_FILTER_LINEAR,\n          .mipmapMode = VK_SAMPLER_MIPMAP_MODE_NEAREST,\n          .addressModeU = VK_SAMPLER_ADDRESS_MODE_REPEAT,\n          .addressModeV = VK_SAMPLER_ADDRESS_MODE_REPEAT,\n          .addressModeW = VK_SAMPLER_ADDRESS_MODE_REPEAT,\n          .mipLodBias = 0.0f,\n          .anisotropyEnable = VK_FALSE,\n          .maxAnisotropy = 0.0f,\n          .compareEnable = VK_FALSE,\n          .compareOp = VK_COMPARE_OP_ALWAYS,\n          .minLod = 0.0f,\n          .maxLod = 0.0f,\n          .borderColor = VK_BORDER_COLOR_INT_OPAQUE_BLACK,\n          .unnormalizedCoordinates = VK_FALSE,\n      },\n      VK_FORMAT_UNDEFINED,\n      nullptr,\n      \"Sampler: default\");\n  IGL_DEBUG_ASSERT(samplers_.numObjects() == 1);\n\n  growBindlessDescriptorPool(pimpl_->currentMaxBindlessTextures,\n                             pimpl_->currentMaxBindlessSamplers);\n\n  querySurfaceCapabilities();\n\n#if defined(IGL_WITH_TRACY_GPU)\n  VK_ASSERT(ivkCreateCommandPool(&vf_,\n                                 vkDevice_,\n                                 VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |\n                                     VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,\n                                 deviceQueues_.graphicsQueueFamilyIndex,\n                                 &profilingCommandPool_));\n\n  ivkSetDebugObjectName(&vf_,\n                        vkDevice_,\n                        VK_OBJECT_TYPE_COMMAND_POOL,\n                        (uint64_t)profilingCommandPool_,\n                        \"VulkanContext::profilingCommandPool_ (Tracy)\");\n\n  profilingCommandBuffer_ = VK_NULL_HANDLE;\n  VK_ASSERT(\n      ivkAllocateCommandBuffer(&vf_, vkDevice_, profilingCommandPool_, &profilingCommandBuffer_));\n\n#if defined(VK_EXT_calibrated_timestamps)\n  if (features_.enabled(VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME)) {\n    tracyCtx_ = TracyVkContextCalibrated(vkInstance_,\n                                         getVkPhysicalDevice(),\n                                         getVkDevice(),\n                                         deviceQueues_.graphicsQueue,\n                                         profilingCommandBuffer_,\n                                         tableImpl_->vkGetInstanceProcAddr,\n                                         tableImpl_->vkGetDeviceProcAddr);\n  }\n#endif // VK_EXT_calibrated_timestamps\n  // If VK_EXT_calibrated_timestamps is not available or it has not been enabled, use the\n  // uncalibrated Tracy context\n  if (!tracyCtx_) {\n    tracyCtx_ = TracyVkContext(vkInstance_,\n                               getVkPhysicalDevice(),\n                               getVkDevice(),\n                               deviceQueues_.graphicsQueue,\n                               profilingCommandBuffer_,\n                               tableImpl_->vkGetInstanceProcAddr,\n                               tableImpl_->vkGetDeviceProcAddr);\n  }\n\n  IGL_DEBUG_ASSERT(tracyCtx_, \"Failed to create Tracy GPU profiling context\");\n#endif // IGL_WITH_TRACY_GPU\n\n  return Result();\n}\n\nvoid VulkanContext::growBindlessDescriptorPool(uint32_t newMaxTextures, uint32_t newMaxSamplers) {\n  // only do allocations if actually enabled\n  if (!config_.enableDescriptorIndexing) {\n    return;\n  }\n\n  IGL_PROFILER_FUNCTION();\n\n  pimpl_->currentMaxBindlessTextures = newMaxTextures;\n  pimpl_->currentMaxBindlessSamplers = newMaxSamplers;\n\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"growBindlessDescriptorPool(%u, %u)\\n\", newMaxTextures, newMaxSamplers);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n\n  // macOS: MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS is required when using this with MoltenVK\n  IGL_DEBUG_ASSERT(\n      newMaxTextures <= vkPhysicalDeviceDescriptorIndexingProperties_\n                            .maxDescriptorSetUpdateAfterBindSampledImages,\n      \"Max Textures exceeded: %u (hardware max %u)\",\n      newMaxTextures,\n      vkPhysicalDeviceDescriptorIndexingProperties_.maxDescriptorSetUpdateAfterBindSampledImages);\n\n  // macOS: MVK_CONFIG_USE_METAL_ARGUMENT_BUFFERS is required when using this with MoltenVK\n  IGL_DEBUG_ASSERT(\n      newMaxSamplers <=\n          vkPhysicalDeviceDescriptorIndexingProperties_.maxDescriptorSetUpdateAfterBindSamplers,\n      \"Max Samplers exceeded %u (hardware max %u)\",\n      newMaxSamplers,\n      vkPhysicalDeviceDescriptorIndexingProperties_.maxDescriptorSetUpdateAfterBindSamplers);\n\n  VkDevice device = getVkDevice();\n\n  if (pimpl_->dpBindless != VK_NULL_HANDLE) {\n    deferredTask(std::packaged_task<void()>([vf = &vf_, device, dp = pimpl_->dpBindless]() {\n      vf->vkDestroyDescriptorPool(device, dp, nullptr);\n    }));\n  }\n\n  // create default descriptor set layout which is going to be shared by graphics pipelines\n  constexpr uint32_t kNumBindings = 7;\n  constexpr VkShaderStageFlags stageFlags =\n      VK_SHADER_STAGE_FRAGMENT_BIT | VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_COMPUTE_BIT;\n  const std::array<VkDescriptorSetLayoutBinding, kNumBindings> bindings = {\n      VkDescriptorSetLayoutBinding{\n          .binding = kBinding_Texture2D,\n          .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,\n          .descriptorCount = pimpl_->currentMaxBindlessTextures,\n          .stageFlags = stageFlags,\n      },\n      VkDescriptorSetLayoutBinding{\n          .binding = kBinding_Texture2DArray,\n          .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,\n          .descriptorCount = pimpl_->currentMaxBindlessTextures,\n          .stageFlags = stageFlags,\n      },\n      VkDescriptorSetLayoutBinding{\n          .binding = kBinding_Texture3D,\n          .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,\n          .descriptorCount = pimpl_->currentMaxBindlessTextures,\n          .stageFlags = stageFlags,\n      },\n      VkDescriptorSetLayoutBinding{\n          .binding = kBinding_TextureCube,\n          .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,\n          .descriptorCount = pimpl_->currentMaxBindlessTextures,\n          .stageFlags = stageFlags,\n      },\n      VkDescriptorSetLayoutBinding{\n          .binding = kBinding_Sampler,\n          .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER,\n          .descriptorCount = pimpl_->currentMaxBindlessSamplers,\n          .stageFlags = stageFlags,\n      },\n      VkDescriptorSetLayoutBinding{\n          .binding = kBinding_SamplerShadow,\n          .descriptorType = VK_DESCRIPTOR_TYPE_SAMPLER,\n          .descriptorCount = pimpl_->currentMaxBindlessSamplers,\n          .stageFlags = stageFlags,\n      },\n      VkDescriptorSetLayoutBinding{\n          .binding = kBinding_StorageImages,\n          .descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,\n          .descriptorCount = pimpl_->currentMaxBindlessTextures,\n          .stageFlags = stageFlags,\n      },\n  };\n  const uint32_t flags = VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT |\n                         VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT |\n                         VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT;\n  const std::array<VkDescriptorBindingFlags, kNumBindings> bindingFlags = {\n      flags, flags, flags, flags, flags, flags, flags};\n  IGL_DEBUG_ASSERT(bindingFlags.back() == flags);\n  pimpl_->dslBindless = std::make_unique<VulkanDescriptorSetLayout>(\n      *this,\n      VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT,\n      kNumBindings,\n      bindings.data(),\n      bindingFlags.data(),\n      \"Descriptor Set Layout: VulkanContext::dslBindless_\");\n  // create default descriptor pool and allocate 1 descriptor set\n  const std::array<VkDescriptorPoolSize, kNumBindings> poolSizes = {\n      VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, pimpl_->currentMaxBindlessTextures},\n      VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, pimpl_->currentMaxBindlessTextures},\n      VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, pimpl_->currentMaxBindlessTextures},\n      VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, pimpl_->currentMaxBindlessTextures},\n      VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLER, pimpl_->currentMaxBindlessSamplers},\n      VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_SAMPLER, pimpl_->currentMaxBindlessSamplers},\n      VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, pimpl_->currentMaxBindlessTextures},\n  };\n  VK_ASSERT(ivkCreateDescriptorPool(&vf_,\n                                    device,\n                                    VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT,\n                                    1,\n                                    static_cast<uint32_t>(poolSizes.size()),\n                                    poolSizes.data(),\n                                    &pimpl_->dpBindless));\n  VK_ASSERT(ivkSetDebugObjectName(&vf_,\n                                  device,\n                                  VK_OBJECT_TYPE_DESCRIPTOR_POOL,\n                                  (uint64_t)pimpl_->dpBindless,\n                                  \"Descriptor Pool: dpBindless_\"));\n  VK_ASSERT(ivkAllocateDescriptorSet(&vf_,\n                                     device,\n                                     pimpl_->dpBindless,\n                                     pimpl_->dslBindless->getVkDescriptorSetLayout(),\n                                     &pimpl_->dsBindless));\n  VK_ASSERT(ivkSetDebugObjectName(&vf_,\n                                  device,\n                                  VK_OBJECT_TYPE_DESCRIPTOR_SET,\n                                  (uint64_t)pimpl_->dsBindless,\n                                  \"Descriptor Set: dsBindless_\"));\n}\n\nResult VulkanContext::initSwapchain(uint32_t width, uint32_t height) {\n  IGL_PROFILER_FUNCTION();\n\n  if (!vkDevice_ || !immediate_) {\n    IGL_LOG_ERROR(\"Call initContext() first\");\n    return Result(Result::Code::Unsupported, \"Call initContext() first\");\n  }\n\n  if (swapchain_) {\n    vf_.vkDeviceWaitIdle(vkDevice_);\n    swapchain_ = nullptr; // Destroy old swapchain first\n  }\n\n  if (!width || !height) {\n    return Result();\n  }\n\n  swapchain_ = std::make_unique<VulkanSwapchain>(*this, width, height);\n\n  if (features_.has_VK_KHR_timeline_semaphore && features_.has_VK_KHR_synchronization2) {\n    timelineSemaphore_ = std::make_unique<VulkanSemaphore>(\n        vf_, getVkDevice(), 0, false, \"Semaphore: VulkanContext::timelineSemaphore_\");\n  }\n\n  return swapchain_ ? Result() : Result(Result::Code::RuntimeError, \"Failed to create Swapchain\");\n}\n\nVkExtent2D VulkanContext::getSwapchainExtent() const {\n  return hasSwapchain() ? swapchain_->getExtent() : VkExtent2D{0, 0};\n}\n\nResult VulkanContext::waitIdle() const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_WAIT);\n\n  for (auto queue : {deviceQueues_.graphicsQueue, deviceQueues_.computeQueue}) {\n    VK_ASSERT_RETURN(vf_.vkQueueWaitIdle(queue));\n  }\n\n  return getResultFromVkResult(VK_SUCCESS);\n}\n\nResult VulkanContext::present() const {\n  if (!hasSwapchain()) {\n    return Result(Result::Code::InvalidOperation, \"No swapchain available\");\n  }\n\n  return swapchain_->present(immediate_->acquireLastSubmitSemaphore());\n}\n\nstd::unique_ptr<VulkanBuffer> VulkanContext::createBuffer(VkDeviceSize bufferSize,\n                                                          VkBufferUsageFlags usageFlags,\n                                                          VkMemoryPropertyFlags memFlags,\n                                                          Result* IGL_NULLABLE outResult,\n                                                          const char* IGL_NULLABLE\n                                                              debugName) const {\n  IGL_PROFILER_FUNCTION();\n\n#define ENSURE_BUFFER_SIZE(flag, maxSize)                                                      \\\n  if (usageFlags & flag) {                                                                     \\\n    if (!IGL_DEBUG_VERIFY(bufferSize <= maxSize)) {                                            \\\n      IGL_LOG_INFO(\"Max size of buffer exceeded \" #flag \": %llu > %llu\", bufferSize, maxSize); \\\n      Result::setResult(outResult,                                                             \\\n                        Result(Result::Code::InvalidOperation, \"Buffer size exceeded\" #flag)); \\\n      return nullptr;                                                                          \\\n    }                                                                                          \\\n  }\n\n  const VkPhysicalDeviceLimits& limits = getVkPhysicalDeviceProperties().limits;\n\n  ENSURE_BUFFER_SIZE(VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, limits.maxUniformBufferRange);\n  // any buffer\n  ENSURE_BUFFER_SIZE(VK_BUFFER_USAGE_FLAG_BITS_MAX_ENUM, limits.maxStorageBufferRange);\n#undef ENSURE_BUFFER_SIZE\n\n  Result::setOk(outResult);\n  return std::make_unique<VulkanBuffer>(\n      *this, vkDevice_, bufferSize, usageFlags, memFlags, debugName);\n}\n\nVulkanImage VulkanContext::createImage(VkImageType imageType,\n                                       VkExtent3D extent,\n                                       VkFormat format,\n                                       uint32_t mipLevels,\n                                       uint32_t arrayLayers,\n                                       VkImageTiling tiling,\n                                       VkImageUsageFlags usageFlags,\n                                       VkMemoryPropertyFlags memFlags,\n                                       VkImageCreateFlags flags,\n                                       VkSampleCountFlagBits samples,\n                                       Result* IGL_NULLABLE outResult,\n                                       const char* IGL_NULLABLE debugName) const {\n  IGL_PROFILER_FUNCTION();\n\n  if (!validateImageLimits(\n          imageType, samples, extent, getVkPhysicalDeviceProperties().limits, outResult)) {\n    return VulkanImage();\n  }\n\n  return {*this,\n          extent,\n          imageType,\n          format,\n          mipLevels,\n          arrayLayers,\n          tiling,\n          usageFlags,\n          memFlags,\n          flags,\n          samples,\n          debugName};\n}\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\nstd::unique_ptr<VulkanImage> VulkanContext::createImageFromAndroidHardwareBuffer(\n    AHardwareBuffer* androidHardwareBuffer,\n    uint64_t memoryAllocationSize,\n    VkImageType imageType,\n    VkExtent3D extent,\n    VkFormat format,\n    uint32_t mipLevels,\n    uint32_t arrayLayers,\n    VkImageTiling tiling,\n    VkImageUsageFlags usageFlags,\n    VkImageCreateFlags flags,\n    VkSampleCountFlagBits samples,\n    igl::Result* IGL_NULLABLE outResult,\n    const char* IGL_NULLABLE debugName) const {\n  if (!validateImageLimits(\n          imageType, samples, extent, getVkPhysicalDeviceProperties().limits, outResult)) {\n    return nullptr;\n  }\n  return std::make_unique<VulkanImage>(*this,\n                                       androidHardwareBuffer,\n                                       memoryAllocationSize,\n                                       extent,\n                                       imageType,\n                                       format,\n                                       mipLevels,\n                                       arrayLayers,\n                                       tiling,\n                                       usageFlags,\n                                       flags,\n                                       samples,\n                                       debugName);\n}\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\nstd::unique_ptr<VulkanImage> VulkanContext::createImageFromFileDescriptor(\n    int32_t fileDescriptor,\n    uint64_t memoryAllocationSize,\n    VkImageType imageType,\n    VkExtent3D extent,\n    VkFormat format,\n    uint32_t mipLevels,\n    uint32_t arrayLayers,\n    VkImageTiling tiling,\n    VkImageUsageFlags usageFlags,\n    VkImageCreateFlags flags,\n    VkSampleCountFlagBits samples,\n    Result* IGL_NULLABLE outResult,\n    const char* IGL_NULLABLE debugName) const {\n  if (!validateImageLimits(\n          imageType, samples, extent, getVkPhysicalDeviceProperties().limits, outResult)) {\n    return nullptr;\n  }\n\n  return std::make_unique<VulkanImage>(*this,\n                                       fileDescriptor,\n                                       memoryAllocationSize,\n                                       extent,\n                                       imageType,\n                                       format,\n                                       mipLevels,\n                                       arrayLayers,\n                                       tiling,\n                                       usageFlags,\n                                       flags,\n                                       samples,\n                                       debugName);\n}\n\nvoid VulkanContext::pruneTextures() {\n  // here we remove deleted textures - everything which has only 1 reference is owned by this\n  // context and can be released safely\n\n  // textures\n  {\n    for (uint32_t i = 1; i < (uint32_t)textures_.objects_.size(); i++) {\n      if (textures_.objects_[i].obj_ && textures_.objects_[i].obj_.use_count() == 1) {\n        textures_.destroy(i);\n      }\n    }\n  }\n}\n\nVkResult VulkanContext::checkAndUpdateDescriptorSets() {\n  if (!awaitingCreation_) {\n    // nothing to update here\n    return VK_SUCCESS;\n  }\n\n  // newly created resources can be used immediately - make sure they are put into descriptor sets\n  IGL_PROFILER_FUNCTION();\n\n  pruneTextures();\n\n  // update Vulkan bindless descriptor sets here\n  if (!config_.enableDescriptorIndexing) {\n    return VK_SUCCESS;\n  }\n\n  uint32_t newMaxTextures = pimpl_->currentMaxBindlessTextures;\n  uint32_t newMaxSamplers = pimpl_->currentMaxBindlessSamplers;\n\n  while (textures_.objects_.size() > newMaxTextures) {\n    newMaxTextures *= 2;\n  }\n  while (samplers_.objects_.size() > newMaxSamplers) {\n    newMaxSamplers *= 2;\n  }\n  if (newMaxTextures != pimpl_->currentMaxBindlessTextures ||\n      newMaxSamplers != pimpl_->currentMaxBindlessSamplers) {\n    growBindlessDescriptorPool(newMaxTextures, newMaxSamplers);\n  }\n\n  // make sure the guard values are always there\n  IGL_DEBUG_ASSERT(!textures_.objects_.empty());\n  IGL_DEBUG_ASSERT(!samplers_.objects_.empty());\n\n  // 1. Sampled and storage images\n  std::vector<VkDescriptorImageInfo> infoSampledImages;\n  std::vector<VkDescriptorImageInfo> infoStorageImages;\n  infoSampledImages.reserve(textures_.objects_.size());\n  infoStorageImages.reserve(textures_.objects_.size());\n\n  // use the dummy texture/sampler to avoid sparse array\n  VkImageView dummyImageView = textures_.objects_[0].obj_->imageView_.getVkImageView();\n  VkSampler dummySampler = samplers_.objects_[0].obj_.vkSampler;\n\n  for (const auto& entry : textures_.objects_) {\n    const VulkanTexture* texture = entry.obj_.get();\n    if (texture) {\n      // multisampled images cannot be directly accessed from shaders\n      const bool isTextureAvailable =\n          (texture->image_.samples_ & VK_SAMPLE_COUNT_1_BIT) == VK_SAMPLE_COUNT_1_BIT;\n      const bool isSampledImage = isTextureAvailable && texture->image_.isSampledImage();\n      const bool isStorageImage = isTextureAvailable && texture->image_.isStorageImage();\n      infoSampledImages.push_back(\n          {dummySampler,\n           isSampledImage ? texture->imageView_.getVkImageView() : dummyImageView,\n           VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL});\n      infoStorageImages.push_back(VkDescriptorImageInfo{\n          VK_NULL_HANDLE,\n          isStorageImage ? texture->imageView_.getVkImageView() : dummyImageView,\n          VK_IMAGE_LAYOUT_GENERAL});\n    } else {\n      infoSampledImages.push_back(\n          {dummySampler, dummyImageView, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL});\n      infoStorageImages.push_back(\n          VkDescriptorImageInfo{VK_NULL_HANDLE, dummyImageView, VK_IMAGE_LAYOUT_GENERAL});\n    }\n    IGL_DEBUG_ASSERT(infoSampledImages.back().imageView != VK_NULL_HANDLE);\n    IGL_DEBUG_ASSERT(infoStorageImages.back().imageView != VK_NULL_HANDLE);\n  }\n\n  // 2. Samplers\n  std::vector<VkDescriptorImageInfo> infoSamplers;\n  infoSamplers.reserve(samplers_.objects_.size());\n\n  for (const auto& entry : samplers_.objects_) {\n    const VulkanSampler* sampler = &entry.obj_;\n    infoSamplers.push_back(\n        {sampler ? sampler->vkSampler : dummySampler, VK_NULL_HANDLE, VK_IMAGE_LAYOUT_UNDEFINED});\n  }\n\n  std::vector<VkWriteDescriptorSet> write;\n\n  if (!infoSampledImages.empty()) {\n    // use the same indexing for every texture type\n    for (uint32_t i = kBinding_Texture2D; i != kBinding_TextureCube + 1; i++) {\n      write.push_back(ivkGetWriteDescriptorSetImageInfo(pimpl_->dsBindless,\n                                                        i,\n                                                        VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,\n                                                        (uint32_t)infoSampledImages.size(),\n                                                        infoSampledImages.data()));\n    }\n  };\n\n  if (!infoSamplers.empty()) {\n    for (uint32_t i = kBinding_Sampler; i != kBinding_SamplerShadow + 1; i++) {\n      write.push_back(ivkGetWriteDescriptorSetImageInfo(pimpl_->dsBindless,\n                                                        i,\n                                                        VK_DESCRIPTOR_TYPE_SAMPLER,\n                                                        (uint32_t)infoSamplers.size(),\n                                                        infoSamplers.data()));\n    }\n  }\n\n  if (!infoStorageImages.empty()) {\n    write.push_back(ivkGetWriteDescriptorSetImageInfo(pimpl_->dsBindless,\n                                                      kBinding_StorageImages,\n                                                      VK_DESCRIPTOR_TYPE_STORAGE_IMAGE,\n                                                      (uint32_t)infoStorageImages.size(),\n                                                      infoStorageImages.data()));\n  };\n\n  // do not switch to the next descriptor set if there is nothing to update\n  if (!write.empty()) {\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"Updating descriptor set dsBindless_\\n\");\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    VK_ASSERT(immediate_->wait(immediate_->getLastSubmitHandle()));\n    vf_.vkUpdateDescriptorSets(\n        vkDevice_, static_cast<uint32_t>(write.size()), write.data(), 0, nullptr);\n  }\n\n  awaitingCreation_ = false;\n  return VK_SUCCESS;\n}\n\nstd::shared_ptr<VulkanTexture> VulkanContext::createTexture(\n    VulkanImage&& image,\n    VulkanImageView&& imageView,\n    [[maybe_unused]] const char* IGL_NULLABLE debugName) const {\n  IGL_PROFILER_FUNCTION();\n\n  const TextureHandle handle =\n      textures_.create(std::make_shared<VulkanTexture>(std::move(image), std::move(imageView)));\n\n  auto texture = *textures_.get(handle);\n\n  if (!IGL_DEBUG_VERIFY(texture)) {\n    return nullptr;\n  }\n\n  texture->textureId_ = handle.index();\n\n  awaitingCreation_ = true;\n\n  return texture;\n}\n\nstd::shared_ptr<VulkanTexture> VulkanContext::createTextureFromVkImage(\n    VkImage vkImage,\n    VulkanImageCreateInfo imageCreateInfo,\n    VulkanImageViewCreateInfo imageViewCreateInfo,\n    const char* IGL_NULLABLE debugName) const {\n  auto iglImage = VulkanImage(*this, vkImage, imageCreateInfo, debugName);\n  auto imageView = iglImage.createImageView(imageViewCreateInfo, debugName);\n  return createTexture(std::move(iglImage), std::move(imageView), debugName);\n}\n\nSamplerHandle VulkanContext::createSampler(const VkSamplerCreateInfo& ci,\n                                           VkFormat yuvVkFormat,\n                                           Result* IGL_NULLABLE outResult,\n                                           const char* IGL_NULLABLE debugName) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  VkSamplerCreateInfo cInfo = ci;\n  VkSamplerYcbcrConversionInfo conversionInfo{};\n\n  if (yuvVkFormat != VK_FORMAT_UNDEFINED) {\n    conversionInfo = getOrCreateYcbcrConversionInfo(yuvVkFormat);\n    cInfo.pNext = &conversionInfo;\n    // must be CLAMP_TO_EDGE\n    // https://vulkan.lunarg.com/doc/view/1.3.268.0/windows/1.3-extensions/vkspec.html#VUID-VkSamplerCreateInfo-addressModeU-01646\n    cInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;\n    cInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;\n    cInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;\n    cInfo.anisotropyEnable = VK_FALSE;\n    cInfo.unnormalizedCoordinates = VK_FALSE;\n  }\n\n  VkDevice device = getVkDevice();\n  VulkanSampler sampler;\n  VK_ASSERT(vf_.vkCreateSampler(device, &cInfo, nullptr, &sampler.vkSampler));\n  VK_ASSERT(ivkSetDebugObjectName(\n      &vf_, device, VK_OBJECT_TYPE_SAMPLER, (uint64_t)sampler.vkSampler, debugName));\n  const SamplerHandle handle = samplers_.create(static_cast<VulkanSampler&&>(sampler));\n\n  samplers_.get(handle)->samplerId = handle.index();\n\n  awaitingCreation_ = true;\n\n  return handle;\n}\n\nvoid VulkanContext::querySurfaceCapabilities() {\n  // This is not an exhaustive list. It's only formats that we are using.\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  const VkFormat depthFormats[] = {VK_FORMAT_D32_SFLOAT_S8_UINT,\n                                   VK_FORMAT_D24_UNORM_S8_UINT,\n                                   VK_FORMAT_D16_UNORM_S8_UINT,\n                                   VK_FORMAT_D32_SFLOAT,\n                                   VK_FORMAT_D16_UNORM,\n                                   VK_FORMAT_S8_UINT};\n  deviceDepthFormats_.reserve(IGL_ARRAY_NUM_ELEMENTS(depthFormats));\n  for (const auto& depthFormat : depthFormats) {\n    VkFormatProperties formatProps;\n    vf_.vkGetPhysicalDeviceFormatProperties(vkPhysicalDevice_, depthFormat, &formatProps);\n\n    if (formatProps.optimalTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT ||\n        formatProps.bufferFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT ||\n        formatProps.linearTilingFeatures & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) {\n      deviceDepthFormats_.push_back(depthFormat);\n    }\n  }\n\n  if (vkSurface_ != VK_NULL_HANDLE) {\n    vf_.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(\n        vkPhysicalDevice_, vkSurface_, &deviceSurfaceCaps_);\n\n    uint32_t formatCount = 0;\n    vf_.vkGetPhysicalDeviceSurfaceFormatsKHR(vkPhysicalDevice_, vkSurface_, &formatCount, nullptr);\n\n    if (formatCount) {\n      deviceSurfaceFormats_.resize(formatCount);\n      vf_.vkGetPhysicalDeviceSurfaceFormatsKHR(\n          vkPhysicalDevice_, vkSurface_, &formatCount, deviceSurfaceFormats_.data());\n    }\n\n    uint32_t presentModeCount = 0;\n    vf_.vkGetPhysicalDeviceSurfacePresentModesKHR(\n        vkPhysicalDevice_, vkSurface_, &presentModeCount, nullptr);\n\n    if (presentModeCount) {\n      devicePresentModes_.resize(presentModeCount);\n      vf_.vkGetPhysicalDeviceSurfacePresentModesKHR(\n          vkPhysicalDevice_, vkSurface_, &presentModeCount, devicePresentModes_.data());\n    }\n  }\n}\n\nVkFormat VulkanContext::getClosestDepthStencilFormat(TextureFormat desiredFormat) const {\n  IGL_DEBUG_ASSERT(!deviceDepthFormats_.empty());\n  // get a list of compatible depth formats for a given desired format\n  // The list will contain depth format that are ordered from most to least closest\n  const std::vector<VkFormat> compatibleDepthStencilFormatList =\n      getCompatibleDepthStencilFormats(desiredFormat);\n\n  // check if any of the format in compatible list is supported\n  for (auto depthStencilFormat : compatibleDepthStencilFormatList) {\n    if (std::find(deviceDepthFormats_.begin(), deviceDepthFormats_.end(), depthStencilFormat) !=\n        deviceDepthFormats_.end()) {\n      return depthStencilFormat;\n    }\n  }\n\n  // no matching found, choose the first supported format\n  return !deviceDepthFormats_.empty() ? deviceDepthFormats_[0] : VK_FORMAT_D24_UNORM_S8_UINT;\n}\n\nVulkanContext::RenderPassHandle VulkanContext::getRenderPass(uint8_t index) const {\n  return RenderPassHandle{.pass = renderPasses_[index], .index = index};\n}\n\nVulkanContext::RenderPassHandle VulkanContext::findRenderPass(\n    const VulkanRenderPassBuilder& builder) const {\n  IGL_PROFILER_FUNCTION();\n\n  auto it = renderPassesHash_.find(builder);\n\n  if (it != renderPassesHash_.end()) {\n    return RenderPassHandle{.pass = renderPasses_[it->second], .index = it->second};\n  }\n\n  VkRenderPass pass = VK_NULL_HANDLE;\n  builder.build(vf_, vkDevice_, &pass);\n\n  const size_t index = renderPasses_.size();\n\n  IGL_DEBUG_ASSERT(index <= 255);\n\n  renderPassesHash_[builder] = uint8_t(index);\n  // @fb-only\n  // @lint-ignore CLANGTIDY\n  renderPasses_.push_back(pass);\n\n  return RenderPassHandle{.pass = pass, .index = uint8_t(index)};\n}\n\nstd::vector<uint8_t> VulkanContext::getPipelineCacheData() const {\n  size_t size = 0;\n  vf_.vkGetPipelineCacheData(vkDevice_, pipelineCache_, &size, nullptr);\n\n  std::vector<uint8_t> data(size);\n\n  if (size) {\n    vf_.vkGetPipelineCacheData(vkDevice_, pipelineCache_, &size, data.data());\n  }\n\n  return data;\n}\n\nuint64_t VulkanContext::getFrameNumber() const {\n  return swapchain_ ? swapchain_->getFrameNumber() : 0u;\n}\n\nvoid VulkanContext::updateBindingsTextures(VkCommandBuffer IGL_NONNULL cmdBuf,\n                                           VkPipelineLayout layout,\n                                           VkPipelineBindPoint bindPoint,\n                                           VulkanImmediateCommands::SubmitHandle nextSubmitHandle,\n                                           const BindingsTextures& data,\n                                           const VulkanDescriptorSetLayout& dsl,\n                                           const util::SpvModuleInfo& info) const {\n  IGL_PROFILER_FUNCTION();\n\n  DescriptorPoolsArena& arena = pimpl_->getOrCreateArena_CombinedImageSamplers(\n      *this, dsl.getVkDescriptorSetLayout(), dsl.numBindings);\n\n  VkDescriptorSet dset = arena.getNextDescriptorSet(*immediate_, nextSubmitHandle);\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkDescriptorImageInfo infoSampledImages[IGL_TEXTURE_SAMPLERS_MAX]; // uninitialized\n  uint32_t numImages = 0;\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkWriteDescriptorSet writes[IGL_TEXTURE_SAMPLERS_MAX]; // uninitialized\n  uint32_t numWrites = 0;\n\n  // make sure the guard value is always there\n  IGL_DEBUG_ASSERT(!textures_.objects_.empty());\n  IGL_DEBUG_ASSERT(!samplers_.objects_.empty());\n\n  // use the dummy texture/sampler to avoid sparse array\n  VkImageView dummyImageView = textures_.objects_[0].obj_->imageView_.getVkImageView();\n  VkSampler dummySampler = samplers_.objects_[0].obj_.vkSampler;\n\n  const bool isGraphics = bindPoint == VK_PIPELINE_BIND_POINT_GRAPHICS;\n\n  for (const util::TextureDescription& d : info.textures) {\n    IGL_DEBUG_ASSERT(d.descriptorSet == kBindPoint_CombinedImageSamplers);\n    const uint32_t loc = d.bindingLocation;\n    IGL_DEBUG_ASSERT(loc < IGL_TEXTURE_SAMPLERS_MAX);\n    VkImageView texture = data.textures[loc];\n    const bool hasTexture = texture != VK_NULL_HANDLE;\n    if (hasTexture && isGraphics) {\n      IGL_DEBUG_ASSERT(data.samplers[loc], \"A sampler should be bound to every bound texture slot\");\n    }\n    VkSampler sampler = data.samplers[loc] ? data.samplers[loc] : dummySampler;\n    writes[numWrites++] = ivkGetWriteDescriptorSetImageInfo(\n        dset, loc, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &infoSampledImages[numImages]);\n    infoSampledImages[numImages++] = VkDescriptorImageInfo{\n        .sampler = hasTexture ? sampler : dummySampler,\n        .imageView = hasTexture ? texture : dummyImageView,\n        .imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,\n    };\n  }\n\n  if (numWrites) {\n    IGL_PROFILER_ZONE(\"vkUpdateDescriptorSets()\", IGL_PROFILER_COLOR_UPDATE);\n    vf_.vkUpdateDescriptorSets(vkDevice_, numWrites, writes, 0, nullptr);\n    IGL_PROFILER_ZONE_END();\n\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkCmdBindDescriptorSets(%u) - textures\\n\", cmdBuf, bindPoint);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    vf_.vkCmdBindDescriptorSets(\n        cmdBuf, bindPoint, layout, kBindPoint_CombinedImageSamplers, 1, &dset, 0, nullptr);\n  }\n}\n\nvoid VulkanContext::updateBindingsStorageImages(\n    VkCommandBuffer IGL_NONNULL cmdBuf,\n    VkPipelineLayout layout,\n    VkPipelineBindPoint bindPoint,\n    VulkanImmediateCommands::SubmitHandle nextSubmitHandle,\n    const BindingsStorageImages& data,\n    const VulkanDescriptorSetLayout& dsl,\n    const util::SpvModuleInfo& info) const {\n  IGL_PROFILER_FUNCTION();\n\n  DescriptorPoolsArena& arena = pimpl_->getOrCreateArena_StorageImages(\n      *this, dsl.getVkDescriptorSetLayout(), dsl.numBindings);\n\n  VkDescriptorSet dset = arena.getNextDescriptorSet(*immediate_, nextSubmitHandle);\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkDescriptorImageInfo infoStorageImages[IGL_TEXTURE_SAMPLERS_MAX]; // uninitialized\n  uint32_t numStorageImages = 0;\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkWriteDescriptorSet writes[IGL_TEXTURE_SAMPLERS_MAX]; // uninitialized\n  uint32_t numWrites = 0;\n\n  // make sure the guard value is always there\n  IGL_DEBUG_ASSERT(!textures_.objects_.empty());\n\n  // use the dummy texture to avoid sparse array\n  VkImageView dummyImageView = textures_.objects_[0].obj_->imageView_.getVkImageView();\n\n  for (const util::ImageDescription& d : info.images) {\n    IGL_DEBUG_ASSERT(d.descriptorSet == kBindPoint_StorageImages);\n    const uint32_t loc = d.bindingLocation;\n    IGL_DEBUG_ASSERT(loc < IGL_TEXTURE_SAMPLERS_MAX);\n    VkImageView imageView = data.images[loc];\n    writes[numWrites++] = ivkGetWriteDescriptorSetImageInfo(\n        dset, loc, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE, 1, &infoStorageImages[numStorageImages]);\n    infoStorageImages[numStorageImages++] = VkDescriptorImageInfo{\n        .sampler = VK_NULL_HANDLE,\n        .imageView = imageView ? imageView : dummyImageView,\n        .imageLayout = VK_IMAGE_LAYOUT_GENERAL,\n    };\n  }\n\n  if (numWrites) {\n    IGL_PROFILER_ZONE(\"vkUpdateDescriptorSets()\", IGL_PROFILER_COLOR_UPDATE);\n    vf_.vkUpdateDescriptorSets(vkDevice_, numWrites, writes, 0, nullptr);\n    IGL_PROFILER_ZONE_END();\n\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkCmdBindDescriptorSets(%u) - storage images\\n\", cmdBuf, bindPoint);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    vf_.vkCmdBindDescriptorSets(\n        cmdBuf, bindPoint, layout, kBindPoint_StorageImages, 1, &dset, 0, nullptr);\n  }\n}\n\nvoid VulkanContext::updateBindingsBuffers(VkCommandBuffer IGL_NONNULL cmdBuf,\n                                          VkPipelineLayout layout,\n                                          VkPipelineBindPoint bindPoint,\n                                          VulkanImmediateCommands::SubmitHandle nextSubmitHandle,\n                                          BindingsBuffers& data,\n                                          const VulkanDescriptorSetLayout& dsl,\n                                          const util::SpvModuleInfo& info) const {\n  IGL_PROFILER_FUNCTION();\n\n  DescriptorPoolsArena& arena =\n      pimpl_->getOrCreateArena_Buffers(*this, dsl.getVkDescriptorSetLayout(), dsl.numBindings);\n\n  VkDescriptorSet dset = arena.getNextDescriptorSet(*immediate_, nextSubmitHandle);\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkWriteDescriptorSet writes[IGL_UNIFORM_BLOCKS_BINDING_MAX]; // uninitialized\n  uint32_t numWrites = 0;\n\n  for (const util::BufferDescription& b : info.buffers) {\n    IGL_DEBUG_ASSERT(b.descriptorSet == kBindPoint_Buffers);\n    IGL_DEBUG_ASSERT(\n        data.buffers[b.bindingLocation].buffer != VK_NULL_HANDLE,\n        IGL_FORMAT(\"Did you forget to call bindBuffer() for a buffer at the binding location {}?\",\n                   b.bindingLocation)\n            .c_str());\n    writes[numWrites++] = ivkGetWriteDescriptorSetBufferInfo(\n        dset,\n        b.bindingLocation,\n        b.isStorage ? VK_DESCRIPTOR_TYPE_STORAGE_BUFFER : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,\n        1,\n        &data.buffers[b.bindingLocation]);\n  }\n\n  if (numWrites) {\n    IGL_PROFILER_ZONE(\"vkUpdateDescriptorSets()\", IGL_PROFILER_COLOR_UPDATE);\n    vf_.vkUpdateDescriptorSets(vkDevice_, numWrites, writes, 0, nullptr);\n    IGL_PROFILER_ZONE_END();\n\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkCmdBindDescriptorSets(%u) - buffers\\n\", cmdBuf, bindPoint);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    vf_.vkCmdBindDescriptorSets(\n        cmdBuf, bindPoint, layout, kBindPoint_Buffers, 1, &dset, 0, nullptr);\n  }\n}\n\nvoid VulkanContext::deferredTask(std::packaged_task<void()>&& task, SubmitHandle handle) const {\n  if (handle.empty()) {\n    handle = immediate_->getNextSubmitHandle();\n  }\n  deferredTasks.emplace_back(std::move(task), handle);\n  deferredTasks.back().frameId = this->getFrameNumber();\n}\n\nbool VulkanContext::areValidationLayersEnabled() const {\n  return config_.enableValidation;\n}\n\nvoid* IGL_NULLABLE VulkanContext::getVmaAllocator() const {\n  return pimpl_->vma;\n}\n\nvoid VulkanContext::processDeferredTasks() const {\n  IGL_PROFILER_FUNCTION();\n\n  const uint64_t frameId = getFrameNumber();\n  constexpr uint64_t kNumWaitFrames = 3u;\n\n  while (!deferredTasks.empty() && immediate_->isReady(deferredTasks.front().handle)) {\n    if (frameId && frameId <= deferredTasks.front().frameId + kNumWaitFrames) {\n      // do not check anything if it is not yet older than kNumWaitFrames\n      break;\n    }\n    deferredTasks.front().task();\n    deferredTasks.pop_front();\n  }\n}\n\nvoid VulkanContext::waitDeferredTasks() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_WAIT);\n\n  for (auto& task : deferredTasks) {\n    immediate_->wait(task.handle, config_.fenceTimeoutNanoseconds);\n    task.task();\n  }\n  deferredTasks.clear();\n}\n\n// @fb-only\nVkFence VulkanContext::getVkFenceFromSubmitHandle(igl::SubmitHandle handle) const noexcept {\n  if (handle == 0) {\n    IGL_LOG_ERROR(\"Invalid submit handle passed to getVkFenceFromSubmitHandle\");\n    return VK_NULL_HANDLE;\n  }\n\n  VkFence vkFence =\n      immediate_->getVkFenceFromSubmitHandle(VulkanImmediateCommands::SubmitHandle(handle));\n\n  return vkFence;\n}\n\n// @fb-only\nint VulkanContext::getFenceFdFromSubmitHandle(igl::SubmitHandle handle) const noexcept {\n  int fenceFd = -1;\n#if defined(IGL_PLATFORM_ANDROID) && defined(VK_KHR_external_fence_fd)\n  if (handle == 0) {\n    IGL_LOG_ERROR(\"Invalid submit handle passed to getFenceFDFromSubmitHandle\");\n    return -1;\n  }\n\n  const VkFence vkFence = getVkFenceFromSubmitHandle(handle);\n  IGL_DEBUG_ASSERT(vkFence != VK_NULL_HANDLE);\n\n  const VkFenceGetFdInfoKHR getFdInfo = {\n      .sType = VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR,\n      .fence = vkFence,\n      .handleType = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT,\n  };\n\n  const VkResult result = vf_.vkGetFenceFdKHR(vkDevice_, &getFdInfo, &fenceFd);\n  if (result != VK_SUCCESS) {\n    IGL_LOG_ERROR(\"Unable to get fence fd from submit handle: %lu\", handle);\n  }\n  immediate_->storeFDInSubmitHandle(VulkanImmediateCommands::SubmitHandle(handle), fenceFd);\n#endif // defined(IGL_PLATFORM_ANDROID)\n  return fenceFd;\n}\n\nVkDescriptorSetLayout VulkanContext::getBindlessVkDescriptorSetLayout() const {\n  return config_.enableDescriptorIndexing ? pimpl_->dslBindless->getVkDescriptorSetLayout()\n                                          : VK_NULL_HANDLE;\n}\n\nVkDescriptorSet VulkanContext::getBindlessVkDescriptorSet() const {\n  return config_.enableDescriptorIndexing ? pimpl_->dsBindless : VK_NULL_HANDLE;\n}\n\nVkSamplerYcbcrConversionInfo VulkanContext::getOrCreateYcbcrConversionInfo(VkFormat format) const {\n  auto it = ycbcrConversionInfos_.find(format);\n\n  if (it != ycbcrConversionInfos_.end()) {\n    return it->second;\n  }\n\n  if (!IGL_DEBUG_VERIFY(features_.featuresSamplerYcbcrConversion.samplerYcbcrConversion)) {\n    IGL_DEBUG_ABORT(\"Ycbcr samplers are not supported\");\n    return {};\n  }\n\n  VkFormatProperties props;\n  vf_.vkGetPhysicalDeviceFormatProperties(getVkPhysicalDevice(), format, &props);\n\n  const bool cosited =\n      (props.optimalTilingFeatures & VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT) != 0;\n  const bool midpoint =\n      (props.optimalTilingFeatures & VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT) != 0;\n\n  if (!IGL_DEBUG_VERIFY(cosited || midpoint)) {\n    IGL_DEBUG_ASSERT(cosited || midpoint, \"Unsupported Ycbcr feature\");\n    return {};\n  }\n\n  const VkSamplerYcbcrConversionCreateInfo ciYcbcr = {\n      .sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO,\n      .format = format,\n      .ycbcrModel = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709,\n      .ycbcrRange = VK_SAMPLER_YCBCR_RANGE_ITU_FULL,\n      .components =\n          {\n              VK_COMPONENT_SWIZZLE_IDENTITY,\n              VK_COMPONENT_SWIZZLE_IDENTITY,\n              VK_COMPONENT_SWIZZLE_IDENTITY,\n              VK_COMPONENT_SWIZZLE_IDENTITY,\n          },\n      .xChromaOffset = midpoint ? VK_CHROMA_LOCATION_MIDPOINT : VK_CHROMA_LOCATION_COSITED_EVEN,\n      .yChromaOffset = midpoint ? VK_CHROMA_LOCATION_MIDPOINT : VK_CHROMA_LOCATION_COSITED_EVEN,\n      .chromaFilter = VK_FILTER_LINEAR,\n      .forceExplicitReconstruction = VK_FALSE,\n  };\n\n  VkSamplerYcbcrConversionInfo info = {\n      .sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO,\n      .conversion = VK_NULL_HANDLE,\n  };\n  vf_.vkCreateSamplerYcbcrConversion(getVkDevice(), &ciYcbcr, nullptr, &info.conversion);\n\n  // check properties\n  VkSamplerYcbcrConversionImageFormatProperties samplerYcbcrConversionImageFormatProps = {\n      .sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES,\n      .combinedImageSamplerDescriptorCount = 0,\n  };\n  VkImageFormatProperties2 imageFormatProps = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2,\n      .pNext = &samplerYcbcrConversionImageFormatProps,\n      .imageFormatProperties = {},\n  };\n  const VkPhysicalDeviceImageFormatInfo2 imageFormatInfo = {\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,\n      .format = format,\n      .type = VK_IMAGE_TYPE_2D,\n      .tiling = VK_IMAGE_TILING_OPTIMAL,\n      .usage = VK_IMAGE_USAGE_SAMPLED_BIT,\n      .flags = VK_IMAGE_CREATE_DISJOINT_BIT,\n  };\n  vf_.vkGetPhysicalDeviceImageFormatProperties2(\n      getVkPhysicalDevice(), &imageFormatInfo, &imageFormatProps);\n\n  IGL_DEBUG_ASSERT(samplerYcbcrConversionImageFormatProps.combinedImageSamplerDescriptorCount <= 3);\n\n  ycbcrConversionInfos_[format] = info;\n\n  return info;\n}\n\nvoid VulkanContext::freeResourcesForDescriptorSetLayout(VkDescriptorSetLayout dsl) const {\n  pimpl_->arenaBuffers.erase(dsl);\n  pimpl_->arenaCombinedImageSamplers.erase(dsl);\n  pimpl_->arenaStorageImages.erase(dsl);\n}\n\nBindGroupTextureHandle VulkanContext::createBindGroup(const BindGroupTextureDesc& desc,\n                                                      const IRenderPipelineState* IGL_NULLABLE\n                                                          compatiblePipeline,\n                                                      Result* IGL_NULLABLE outResult) {\n  VkDevice device = getVkDevice();\n\n  BindGroupMetadataTextures metadata{.desc = desc};\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkDescriptorSetLayoutBinding bindings[IGL_TEXTURE_SAMPLERS_MAX]; // uninitialized\n  uint32_t numBindings = 0;\n\n  const VkShaderStageFlags stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;\n\n  const uint32_t usageMaskPipeline =\n      compatiblePipeline ? static_cast<const igl::vulkan::RenderPipelineState&>(*compatiblePipeline)\n                               .getSpvModuleInfo()\n                               .usageMaskTextures\n                         : 0ul;\n\n  for (uint32_t loc = 0; loc != IGL_ARRAY_NUM_ELEMENTS(desc.textures); loc++) {\n    const bool isInPipeline = (usageMaskPipeline & (1ul << loc)) != 0;\n    if (compatiblePipeline ? isInPipeline : desc.samplers[loc] != nullptr) {\n      IGL_DEBUG_ASSERT(compatiblePipeline || desc.samplers[loc]);\n      bindings[numBindings++] = VkDescriptorSetLayoutBinding{\n          .binding = loc,\n          .descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,\n          .descriptorCount = 1,\n          .stageFlags = stageFlags,\n      };\n      metadata.usageMask |= 1ul << loc;\n    }\n  }\n\n  VkDescriptorSetLayout dsl = VK_NULL_HANDLE;\n\n  {\n    // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n    const VkDescriptorBindingFlags bindingFlags[IGL_TEXTURE_SAMPLERS_MAX] = {};\n\n    VK_ASSERT(ivkCreateDescriptorSetLayout(&vf_,\n                                           device,\n                                           VkDescriptorSetLayoutCreateFlags{},\n                                           numBindings,\n                                           bindings,\n                                           bindingFlags,\n                                           &dsl));\n    VK_ASSERT(ivkSetDebugObjectName(\n        &vf_,\n        device,\n        VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,\n        (uint64_t)dsl,\n        IGL_FORMAT(\"Descriptor Set Layout (COMBINED_IMAGE_SAMPLER): BindGroup = {}\", desc.debugName)\n            .c_str()));\n\n    const VkDescriptorPoolSize poolSize =\n        VkDescriptorPoolSize{VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, numBindings};\n\n    VK_ASSERT(ivkCreateDescriptorPool(\n        &vf_, device, VkDescriptorPoolCreateFlags{}, 1u, 1u, &poolSize, &metadata.pool));\n    VK_ASSERT(ivkSetDebugObjectName(\n        &vf_,\n        device,\n        VK_OBJECT_TYPE_DESCRIPTOR_POOL,\n        (uint64_t)metadata.pool,\n        IGL_FORMAT(\"Descriptor Pool (COMBINED_IMAGE_SAMPLER): BindGroup = {}\", desc.debugName)\n            .c_str()));\n\n    VK_ASSERT(ivkAllocateDescriptorSet(&vf_, device, metadata.pool, dsl, &metadata.dset));\n  }\n\n  // make sure the guard values are always there\n  IGL_DEBUG_ASSERT(!textures_.objects_.empty());\n  IGL_DEBUG_ASSERT(!samplers_.objects_.empty());\n  // use the dummy texture to ensure pipeline compatibility\n  VkImageView dummyImageView = textures_.objects_[0].obj_->imageView_.getVkImageView();\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkDescriptorImageInfo images[IGL_TEXTURE_SAMPLERS_MAX]; // uninitialized\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkWriteDescriptorSet writes[IGL_TEXTURE_SAMPLERS_MAX]; // uninitialized\n  uint32_t numWrites = 0;\n\n  for (uint32_t loc = 0; loc != IGL_ARRAY_NUM_ELEMENTS(desc.textures); loc++) {\n    if (compatiblePipeline ? (usageMaskPipeline & (1ul << loc)) == 0\n                           : desc.textures[loc] == nullptr) {\n      continue;\n    }\n    const igl::vulkan::VulkanTexture& texture =\n        desc.textures[loc] ? static_cast<Texture*>(desc.textures[loc].get())->getVulkanTexture()\n                           : *textures_.objects_[0].obj_; // use a dummy texture when necessary\n    const igl::vulkan::VulkanSampler& sampler =\n        desc.samplers[loc]\n            ? *samplers_.get(static_cast<SamplerState&>(*desc.samplers[loc]).sampler_)\n            : samplers_.objects_[0].obj_; // use a dummy sampler when necessary\n\n    // multisampled images cannot be directly accessed from shaders\n    const bool isTextureAvailable =\n        (texture.image_.samples_ & VK_SAMPLE_COUNT_1_BIT) == VK_SAMPLE_COUNT_1_BIT;\n    const bool isSampledImage = isTextureAvailable && texture.image_.isSampledImage();\n\n    if (!IGL_DEBUG_VERIFY(isSampledImage)) {\n      IGL_LOG_ERROR(\"Each bound texture should have TextureUsageBits::Sampled (slot = %u)\", loc);\n      continue;\n    }\n\n    writes[numWrites] = ivkGetWriteDescriptorSetImageInfo(\n        metadata.dset, loc, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 1, &images[numWrites]);\n    images[numWrites++] = {\n        .sampler = sampler.vkSampler,\n        .imageView = isSampledImage ? texture.imageView_.getVkImageView() : dummyImageView,\n        .imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL,\n    };\n  }\n\n  if (!IGL_DEBUG_VERIFY(numWrites)) {\n    IGL_LOG_ERROR(\"Cannot create an empty bind group\");\n    Result::setResult(outResult,\n                      Result(Result::Code::RuntimeError, \"Cannot create an empty bind group\"));\n    return {};\n  }\n\n  IGL_PROFILER_ZONE(\"vkUpdateDescriptorSets() - textures bind group\", IGL_PROFILER_COLOR_UPDATE);\n  vf_.vkUpdateDescriptorSets(vkDevice_, numWrites, writes, 0, nullptr);\n  IGL_PROFILER_ZONE_END();\n\n  // once a descriptor set has been updated, destroy the DSL\n  vf_.vkDestroyDescriptorSetLayout(device, dsl, nullptr);\n\n  Result::setOk(outResult);\n\n  return pimpl_->bindGroupTexturesPool.create(std::move(metadata));\n}\n\nBindGroupBufferHandle VulkanContext::createBindGroup(const BindGroupBufferDesc& desc,\n                                                     Result* outResult) {\n  VkDevice device = getVkDevice();\n\n  BindGroupMetadataBuffers metadata{.desc = desc};\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkDescriptorSetLayoutBinding bindings[IGL_UNIFORM_BLOCKS_BINDING_MAX]; // uninitialized\n  uint32_t numBindings = 0;\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkDescriptorPoolSize poolSizes[] = {\n      {.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC, .descriptorCount = 0},\n      {.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, .descriptorCount = 0},\n      {.type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, .descriptorCount = 0},\n      {.type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, .descriptorCount = 0},\n  };\n\n  const VkShaderStageFlags stageFlags = VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT;\n\n  for (uint32_t loc = 0; loc != IGL_ARRAY_NUM_ELEMENTS(desc.buffers); loc++) {\n    if (!desc.buffers[loc]) {\n      continue;\n    }\n    auto* buf = static_cast<Buffer*>(desc.buffers[loc].get());\n    const bool isDynamic = (desc.isDynamicBufferMask & (1ul << loc)) != 0;\n    const bool isUniform = ((buf->getBufferType() & BufferDesc::BufferTypeBits::Uniform) != 0);\n    const VkDescriptorType type =\n        isUniform\n            ? (isDynamic\n                   ? (poolSizes[0].descriptorCount++, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)\n                   : (poolSizes[1].descriptorCount++, VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER))\n            : (isDynamic\n                   ? (poolSizes[2].descriptorCount++, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)\n                   : (poolSizes[3].descriptorCount++, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER));\n    if (isDynamic && !desc.size[loc]) {\n      IGL_LOG_ERROR(\n          \"A buffer at the binding location '%u' is marked as dynamic but the corresponding size \"\n          \"value is 0. You have to specify the binding size for all dynamic buffers.\",\n          loc);\n    }\n    if (desc.offset[loc]) {\n      const auto& limits = getVkPhysicalDeviceProperties().limits;\n      const uint32_t alignment =\n          static_cast<uint32_t>(isUniform ? limits.minUniformBufferOffsetAlignment\n                                          : limits.minStorageBufferOffsetAlignment);\n      if (!IGL_DEBUG_VERIFY((alignment == 0) || (desc.offset[loc] % alignment == 0))) {\n        IGL_LOG_ERROR(\n            \"`desc.offset[loc] = %u` must be a multiple of `VkPhysicalDeviceLimits::%s = %u`\",\n            static_cast<uint32_t>(desc.offset[loc]),\n            isUniform ? \"minUniformBufferOffsetAlignment\" : \"minStorageBufferOffsetAlignment\",\n            alignment);\n      }\n    }\n    bindings[numBindings++] = VkDescriptorSetLayoutBinding{\n        .binding = loc,\n        .descriptorType = type,\n        .descriptorCount = 1,\n        .stageFlags = stageFlags,\n    };\n    metadata.usageMask |= 1ul << loc;\n  }\n\n  // construct a dense array of non-zero VkDescriptorPoolSize elements\n  qsort(poolSizes,\n        IGL_ARRAY_NUM_ELEMENTS(poolSizes),\n        sizeof(VkDescriptorPoolSize),\n        [](const void* a, const void* b) {\n          return ((VkDescriptorPoolSize*)a)->descriptorCount <\n                         ((VkDescriptorPoolSize*)b)->descriptorCount\n                     ? 1\n                     : 0;\n        });\n  uint32_t numPoolSizes = 0;\n  while (numPoolSizes < IGL_ARRAY_NUM_ELEMENTS(poolSizes) &&\n         poolSizes[numPoolSizes].descriptorCount > 0) {\n    numPoolSizes++;\n  }\n  IGL_DEBUG_ASSERT(numPoolSizes);\n\n  VkDescriptorSetLayout dsl = VK_NULL_HANDLE;\n\n  {\n    // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n    const VkDescriptorBindingFlags bindingFlags[IGL_UNIFORM_BLOCKS_BINDING_MAX] = {};\n\n    VK_ASSERT(ivkCreateDescriptorSetLayout(&vf_,\n                                           device,\n                                           VkDescriptorSetLayoutCreateFlags{},\n                                           numBindings,\n                                           bindings,\n                                           bindingFlags,\n                                           &dsl));\n    VK_ASSERT(ivkSetDebugObjectName(\n        &vf_,\n        device,\n        VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,\n        (uint64_t)dsl,\n        IGL_FORMAT(\"Descriptor Set Layout (BUFFERS): BindGroup = {}\", desc.debugName).c_str()));\n\n    VK_ASSERT(ivkCreateDescriptorPool(\n        &vf_, device, VkDescriptorPoolCreateFlags{}, 1u, numPoolSizes, poolSizes, &metadata.pool));\n    VK_ASSERT(ivkSetDebugObjectName(\n        &vf_,\n        device,\n        VK_OBJECT_TYPE_DESCRIPTOR_POOL,\n        (uint64_t)metadata.pool,\n        IGL_FORMAT(\"Descriptor Pool (BUFFERS): BindGroup = {}\", desc.debugName).c_str()));\n\n    VK_ASSERT(ivkAllocateDescriptorSet(&vf_, device, metadata.pool, dsl, &metadata.dset));\n  }\n\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkDescriptorBufferInfo buffers[IGL_UNIFORM_BLOCKS_BINDING_MAX]; // uninitialized\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkWriteDescriptorSet writes[IGL_UNIFORM_BLOCKS_BINDING_MAX]; // uninitialized\n  uint32_t numWrites = 0;\n\n  for (uint32_t loc = 0; loc != IGL_ARRAY_NUM_ELEMENTS(desc.buffers); loc++) {\n    if (!desc.buffers[loc]) {\n      continue;\n    }\n    auto* buf = static_cast<Buffer*>(desc.buffers[loc].get());\n    const bool isDynamic = (desc.isDynamicBufferMask & (1ul << loc)) != 0;\n    const bool isUniform = ((buf->getBufferType() & BufferDesc::BufferTypeBits::Uniform) != 0);\n    const VkDescriptorType type = isUniform ? (isDynamic ? VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC\n                                                         : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)\n                                            : (isDynamic ? VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC\n                                                         : VK_DESCRIPTOR_TYPE_STORAGE_BUFFER);\n    writes[numWrites] =\n        ivkGetWriteDescriptorSetBufferInfo(metadata.dset, loc, type, 1, &buffers[numWrites]);\n    buffers[numWrites++] = VkDescriptorBufferInfo{\n        buf->getVkBuffer(),\n        desc.offset[loc],\n        desc.size[loc] ? desc.size[loc] : VK_WHOLE_SIZE,\n    };\n  }\n\n  if (!IGL_DEBUG_VERIFY(numWrites)) {\n    IGL_LOG_ERROR(\"Cannot create an empty bind group\");\n    Result::setResult(outResult,\n                      Result(Result::Code::RuntimeError, \"Cannot create an empty bind group\"));\n    return {};\n  }\n\n  IGL_PROFILER_ZONE(\"vkUpdateDescriptorSets() - textures bind group\", IGL_PROFILER_COLOR_UPDATE);\n  vf_.vkUpdateDescriptorSets(vkDevice_, numWrites, writes, 0, nullptr);\n  IGL_PROFILER_ZONE_END();\n\n  // once a descriptor set has been updated, destroy the DSL\n  vf_.vkDestroyDescriptorSetLayout(vkDevice_, dsl, nullptr);\n\n  Result::setOk(outResult);\n\n  return pimpl_->bindGroupBuffersPool.create(std::move(metadata));\n}\n\nvoid VulkanContext::destroy(BindGroupTextureHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n\n  deferredTask(std::packaged_task<void()>(\n      [vf = &vf_, device = getVkDevice(), pool = pimpl_->bindGroupTexturesPool.get(handle)->pool] {\n        vf->vkDestroyDescriptorPool(device, pool, nullptr);\n      }));\n\n  pimpl_->bindGroupTexturesPool.destroy(handle);\n}\n\nvoid VulkanContext::destroy(BindGroupBufferHandle handle) {\n  if (handle.empty()) {\n    return;\n  }\n\n  deferredTask(std::packaged_task<void()>(\n      [vf = &vf_, device = getVkDevice(), pool = pimpl_->bindGroupBuffersPool.get(handle)->pool] {\n        vf->vkDestroyDescriptorPool(device, pool, nullptr);\n      }));\n\n  pimpl_->bindGroupBuffersPool.destroy(handle);\n}\n\nvoid VulkanContext::destroy(SamplerHandle handle) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n\n  if (handle.empty()) {\n    return;\n  }\n\n  deferredTask(std::packaged_task<void()>(\n      [vf = &vf_, device = getVkDevice(), sampler = samplers_.get(handle)->vkSampler]() {\n        vf->vkDestroySampler(device, sampler, nullptr);\n      }));\n\n  samplers_.destroy(handle);\n}\n\nvoid VulkanContext::destroy(TextureHandle handle) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n\n  if (handle.empty()) {\n    return;\n  }\n\n  textures_.destroy(handle);\n}\n\nVkDescriptorSet VulkanContext::getBindGroupDescriptorSet(BindGroupTextureHandle handle) const {\n  return handle.valid() ? pimpl_->bindGroupTexturesPool.get(handle)->dset : VK_NULL_HANDLE;\n}\n\nuint32_t VulkanContext::getBindGroupUsageMask(BindGroupTextureHandle handle) const {\n  return handle.valid() ? pimpl_->bindGroupTexturesPool.get(handle)->usageMask : 0;\n}\n\nVkDescriptorSet VulkanContext::getBindGroupDescriptorSet(BindGroupBufferHandle handle) const {\n  return handle.valid() ? pimpl_->bindGroupBuffersPool.get(handle)->dset : VK_NULL_HANDLE;\n}\n\nuint32_t VulkanContext::getBindGroupUsageMask(BindGroupBufferHandle handle) const {\n  return handle.valid() ? pimpl_->bindGroupBuffersPool.get(handle)->usageMask : 0;\n}\n\nconst VulkanFeatures& VulkanContext::features() const noexcept {\n  return features_;\n}\n\nvoid VulkanContext::syncAcquireNext() noexcept {\n  IGL_PROFILER_FUNCTION();\n\n  syncCurrentIndex = (syncCurrentIndex + 1) % config_.maxResourceCount;\n\n  // Wait for the current buffer to become available\n  immediate_->wait(syncSubmitHandles[syncCurrentIndex], config_.fenceTimeoutNanoseconds);\n}\n\nvoid VulkanContext::syncMarkSubmitted(VulkanImmediateCommands::SubmitHandle handle) noexcept {\n  IGL_PROFILER_FUNCTION();\n\n  syncSubmitHandles[syncCurrentIndex] = handle;\n\n  syncAcquireNext();\n}\n\nvoid VulkanContext::ensureCurrentContextThread() const {\n  IGL_DEBUG_ASSERT(\n      pimpl_->contextThread == std::this_thread::get_id(),\n      \"IGL/Vulkan functions can only be accessed by 1 thread at a time. Call \"\n      \"`setCurrentContextThread()` to mark the current thread as the `owning` thread.\");\n}\n\nvoid VulkanContext::setCurrentContextThread() {\n  pimpl_->contextThread = std::this_thread::get_id();\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanContext.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <atomic>\n#include <deque>\n#include <future>\n#include <memory>\n#include <unordered_map>\n#include <igl/CommandEncoder.h>\n#include <igl/HWDevice.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanFeatures.h>\n#include <igl/vulkan/VulkanHelpers.h>\n#include <igl/vulkan/VulkanImmediateCommands.h>\n#include <igl/vulkan/VulkanQueuePool.h>\n#include <igl/vulkan/VulkanRenderPassBuilder.h>\n#include <igl/vulkan/VulkanStagingDevice.h>\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\nstruct AHardwareBuffer;\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n#if defined(IGL_WITH_TRACY_GPU)\n#include \"tracy/TracyVulkan.hpp\"\n#endif\n\n#define IGL_VULKAN_VALIDATION_LAYER_ERROR_SUMMARY 0\n\nnamespace igl::vulkan {\nnamespace util {\nstruct SpvModuleInfo;\n} // namespace util\n\nclass CommandQueue;\nclass ComputeCommandEncoder;\nclass RenderCommandEncoder;\nclass VulkanBuffer;\nclass VulkanDescriptorSetLayout;\nclass VulkanImage;\nclass VulkanImageView;\nclass VulkanSwapchain;\nclass VulkanTexture;\n\nstruct BindingsBuffers;\nstruct BindingsTextures;\nstruct BindingsStorageImages;\nstruct VulkanContextImpl;\nstruct VulkanImageCreateInfo;\nstruct VulkanImageViewCreateInfo;\n\n/*\n * Descriptor sets:\n *  0 - combined image samplers\n *  1 - uniform/storage buffers\n *  2 - storage images\n *  3 - bindless textures/samplers  <--  optional\n */\n// NOLINTBEGIN(readability-identifier-naming)\nenum {\n  kBindPoint_CombinedImageSamplers = 0,\n  kBindPoint_Buffers = 1,\n  kBindPoint_StorageImages = 2,\n  kBindPoint_Bindless = 3,\n};\n// NOLINTEND(readability-identifier-naming)\n\nstruct DeviceQueues {\n  static constexpr uint32_t kInvalid = 0xFFFFFFFF;\n  uint32_t graphicsQueueFamilyIndex = kInvalid;\n  uint32_t computeQueueFamilyIndex = kInvalid;\n\n  VkQueue IGL_NULLABLE graphicsQueue = VK_NULL_HANDLE;\n  VkQueue IGL_NULLABLE computeQueue = VK_NULL_HANDLE;\n};\n\nclass VulkanContext final {\n public:\n  VulkanContext(VulkanContextConfig config,\n                void* IGL_NULLABLE window,\n                void* IGL_NULLABLE display = nullptr);\n  ~VulkanContext();\n  VulkanContext(const VulkanContext&) = delete;\n  VulkanContext(VulkanContext&&) = delete;\n  VulkanContext& operator=(const VulkanContext&) = delete;\n  VulkanContext& operator=(VulkanContext&&) = delete;\n\n  Result queryDevices(const HWDeviceQueryDesc& desc, std::vector<HWDeviceDesc>& outDevices);\n  Result initContext(const HWDeviceDesc& desc,\n                     size_t numExtraDeviceExtensions = 0,\n                     const char* IGL_NULLABLE* IGL_NULLABLE extraDeviceExtensions = nullptr,\n                     const VulkanFeatures* IGL_NULLABLE requestedFeatures = nullptr,\n                     const char* IGL_NULLABLE debugName = nullptr);\n\n  Result initSwapchain(uint32_t width, uint32_t height);\n  VkExtent2D getSwapchainExtent() const;\n\n  VulkanImage createImage(VkImageType imageType,\n                          VkExtent3D extent,\n                          VkFormat format,\n                          uint32_t mipLevels,\n                          uint32_t arrayLayers,\n                          VkImageTiling tiling,\n                          VkImageUsageFlags usageFlags,\n                          VkMemoryPropertyFlags memFlags,\n                          VkImageCreateFlags flags,\n                          VkSampleCountFlagBits samples,\n                          Result* IGL_NULLABLE outResult,\n                          const char* IGL_NULLABLE debugName = nullptr) const;\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n  std::unique_ptr<VulkanImage> createImageFromAndroidHardwareBuffer(\n      AHardwareBuffer* androidHardwareBuffer,\n      uint64_t memoryAllocationSize,\n      VkImageType imageType,\n      VkExtent3D extent,\n      VkFormat format,\n      uint32_t mipLevels,\n      uint32_t arrayLayers,\n      VkImageTiling tiling,\n      VkImageUsageFlags usageFlags,\n      VkImageCreateFlags flags,\n      VkSampleCountFlagBits samples,\n      igl::Result* IGL_NULLABLE outResult,\n      const char* IGL_NULLABLE debugName = nullptr) const;\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n  std::unique_ptr<VulkanImage> createImageFromFileDescriptor(\n      int32_t fileDescriptor,\n      uint64_t memoryAllocationSize,\n      VkImageType imageType,\n      VkExtent3D extent,\n      VkFormat format,\n      uint32_t mipLevels,\n      uint32_t arrayLayers,\n      VkImageTiling tiling,\n      VkImageUsageFlags usageFlags,\n      VkImageCreateFlags flags,\n      VkSampleCountFlagBits samples,\n      Result* IGL_NULLABLE outResult,\n      const char* IGL_NULLABLE debugName = nullptr) const;\n  std::unique_ptr<VulkanBuffer> createBuffer(VkDeviceSize bufferSize,\n                                             VkBufferUsageFlags usageFlags,\n                                             VkMemoryPropertyFlags memFlags,\n                                             Result* IGL_NULLABLE outResult,\n                                             const char* IGL_NULLABLE debugName = nullptr) const;\n  std::shared_ptr<VulkanTexture> createTexture(VulkanImage&& image,\n                                               VulkanImageView&& imageView,\n                                               const char* IGL_NULLABLE debugName) const;\n  std::shared_ptr<VulkanTexture> createTextureFromVkImage(\n      VkImage vkImage,\n      VulkanImageCreateInfo imageCreateInfo,\n      VulkanImageViewCreateInfo imageViewCreateInfo,\n      const char* IGL_NULLABLE debugName) const;\n\n  SamplerHandle createSampler(const VkSamplerCreateInfo& ci,\n                              VkFormat yuvVkFormat,\n                              Result* IGL_NULLABLE outResult,\n                              const char* IGL_NULLABLE debugName = nullptr) const;\n\n  void createSurface(void* IGL_NULLABLE window, void* IGL_NULLABLE display);\n  void createHeadlessSurface();\n\n  bool hasSwapchain() const noexcept {\n    return swapchain_ != nullptr;\n  }\n\n  Result waitIdle() const;\n  Result present() const;\n\n  /// @brief Returns the index of the current resource being used.\n  ///        Its range is [0, config.maxResourceCount).\n  [[nodiscard]] uint32_t currentSyncIndex() const noexcept {\n    return syncCurrentIndex;\n  }\n  void syncAcquireNext() noexcept;\n  void syncMarkSubmitted(VulkanImmediateCommands::SubmitHandle handle) noexcept;\n\n  const VkPhysicalDeviceProperties& getVkPhysicalDeviceProperties() const {\n    return vkPhysicalDeviceProperties2_.properties;\n  }\n\n  const VkPhysicalDeviceMeshShaderPropertiesEXT& getvkPhysicalDeviceMeshShaderPropertiesEXT()\n      const {\n    return vkPhysicalDeviceMeshShaderPropertiesEXT_;\n  }\n\n  VkFormat getClosestDepthStencilFormat(TextureFormat desiredFormat) const;\n\n  struct RenderPassHandle {\n    VkRenderPass pass = VK_NULL_HANDLE;\n    uint8_t index = 0;\n  };\n\n  // render passes are owned and managed by the context\n  RenderPassHandle findRenderPass(const VulkanRenderPassBuilder& builder) const;\n  RenderPassHandle getRenderPass(uint8_t index) const;\n\n  // OpenXR needs Vulkan instance to find physical device\n  VkInstance IGL_NULLABLE getVkInstance() const {\n    return vkInstance_;\n  }\n  VkDevice IGL_NULLABLE getVkDevice() const {\n    return vkDevice_;\n  }\n  VkPhysicalDevice IGL_NULLABLE getVkPhysicalDevice() const {\n    return vkPhysicalDevice_;\n  }\n  VkDescriptorSetLayout getBindlessVkDescriptorSetLayout() const;\n  VkDescriptorSet getBindlessVkDescriptorSet() const;\n\n  std::vector<uint8_t> getPipelineCacheData() const;\n\n  uint64_t getFrameNumber() const;\n\n  using SubmitHandle = VulkanImmediateCommands::SubmitHandle;\n\n  // execute a task some time in the future after the submit handle finished processing\n  void deferredTask(std::packaged_task<void()>&& task, SubmitHandle handle = SubmitHandle()) const;\n\n  bool areValidationLayersEnabled() const;\n\n  void* IGL_NULLABLE getVmaAllocator() const;\n\n  VkSamplerYcbcrConversionInfo getOrCreateYcbcrConversionInfo(VkFormat format) const;\n\n  void freeResourcesForDescriptorSetLayout(VkDescriptorSetLayout dsl) const;\n\n  const VulkanFeatures& features() const noexcept;\n\n  [[nodiscard]] const VkSurfaceCapabilitiesKHR& getSurfaceCapabilities() const noexcept {\n    return deviceSurfaceCaps_;\n  }\n\n  void ensureCurrentContextThread() const;\n  void setCurrentContextThread();\n\n#if defined(IGL_WITH_TRACY_GPU)\n  TracyVkCtx tracyCtx_ = nullptr;\n  VkCommandPool profilingCommandPool_ = VK_NULL_HANDLE;\n  VkCommandBuffer profilingCommandBuffer_ = VK_NULL_HANDLE;\n#endif\n\n  void waitDeferredTasks();\n\n  /// @param handle The handle to the GPU Fence\n  /// @return The Vulkan fence associated with the handle\n  [[nodiscard]] VkFence getVkFenceFromSubmitHandle(igl::SubmitHandle handle) const noexcept;\n\n  /// Android only for now - Creates the file descriptor for the underlying VkFence\n  /// @param handle The handle to the GPU Fence\n  /// @return The fd for the Vulkan Fence associated with the handleint\n  [[nodiscard]] int getFenceFdFromSubmitHandle(igl::SubmitHandle handle) const noexcept;\n\n private:\n  void createInstance();\n  VkResult checkAndUpdateDescriptorSets();\n  void pruneTextures();\n  void querySurfaceCapabilities();\n  void processDeferredTasks() const;\n  void growBindlessDescriptorPool(uint32_t newMaxTextures, uint32_t newMaxSamplers);\n  BindGroupTextureHandle createBindGroup(const BindGroupTextureDesc& desc,\n                                         const IRenderPipelineState* IGL_NULLABLE\n                                             compatiblePipeline,\n                                         Result* IGL_NULLABLE outResult);\n  BindGroupBufferHandle createBindGroup(const BindGroupBufferDesc& desc,\n                                        Result* IGL_NULLABLE outResult);\n  void destroy(BindGroupTextureHandle handle);\n  void destroy(BindGroupBufferHandle handle);\n  void destroy(SamplerHandle handle);\n  void destroy(TextureHandle handle);\n  VkDescriptorSet getBindGroupDescriptorSet(BindGroupTextureHandle handle) const;\n  VkDescriptorSet getBindGroupDescriptorSet(BindGroupBufferHandle handle) const;\n  uint32_t getBindGroupUsageMask(BindGroupTextureHandle handle) const;\n  uint32_t getBindGroupUsageMask(BindGroupBufferHandle handle) const;\n\n private:\n  friend class Device;\n  friend class VulkanStagingDevice;\n  friend class VulkanSwapchain;\n  friend class CommandQueue;\n  friend class ComputeCommandEncoder;\n  friend class RenderCommandEncoder;\n\n  // should be kept on the heap, otherwise global Vulkan functions can cause arbitrary crashes.\n  std::unique_ptr<VulkanFunctionTable> tableImpl_;\n\n  VkInstance IGL_NULLABLE vkInstance_ = VK_NULL_HANDLE;\n  VkDebugUtilsMessengerEXT vkDebugUtilsMessenger_ = VK_NULL_HANDLE;\n  VkSurfaceKHR vkSurface_ = VK_NULL_HANDLE;\n  VkPhysicalDevice IGL_NULLABLE vkPhysicalDevice_ = VK_NULL_HANDLE;\n  VkPhysicalDeviceDescriptorIndexingPropertiesEXT vkPhysicalDeviceDescriptorIndexingProperties_{};\n  // Provided by VK_KHR_driver_properties\n  VkPhysicalDeviceDriverPropertiesKHR vkPhysicalDeviceDriverProperties_{};\n  // Provided by VK_VERSION_1_1\n  VkPhysicalDeviceProperties2 vkPhysicalDeviceProperties2_{};\n  // Provided by VK_EXT_mesh_shader\n  VkPhysicalDeviceMeshShaderPropertiesEXT vkPhysicalDeviceMeshShaderPropertiesEXT_{};\n\n  std::vector<VkFormat> deviceDepthFormats_;\n  std::vector<VkSurfaceFormatKHR> deviceSurfaceFormats_;\n  VkSurfaceCapabilitiesKHR deviceSurfaceCaps_{};\n  std::vector<VkPresentModeKHR> devicePresentModes_;\n\n  VulkanFeatures features_;\n\n public:\n  // NOLINTBEGIN(readability-identifier-naming)\n  const VulkanFunctionTable& vf_;\n  DeviceQueues deviceQueues_;\n  VkDevice vkDevice_ = VK_NULL_HANDLE;\n  std::unique_ptr<VulkanSwapchain> swapchain_;\n  std::unique_ptr<VulkanSemaphore> timelineSemaphore_;\n  std::unique_ptr<VulkanImmediateCommands> immediate_;\n  std::unique_ptr<VulkanStagingDevice> stagingDevice_;\n\n  std::unique_ptr<VulkanBuffer> dummyUniformBuffer_;\n  std::unique_ptr<VulkanBuffer> dummyStorageBuffer_;\n  // don't use staging on devices with device-local host-visible memory\n  bool useStagingForBuffers_ = true;\n\n  std::unique_ptr<VulkanContextImpl> pimpl_;\n\n  VkPipelineCache pipelineCache_ = VK_NULL_HANDLE;\n\n  mutable std::unordered_map<VkFormat, VkSamplerYcbcrConversionInfo> ycbcrConversionInfos_;\n\n  // 1. Textures can be safely deleted once they are not in use by GPU, hence our Vulkan context\n  // owns all allocated textures (images+image views). The IGL interface vulkan::Texture does not\n  // delete the underlying VulkanTexture but instead informs the context that it should be\n  // deallocated. The context deallocates textures in a deferred way when it is safe to do so.\n  // 2. Descriptor sets can be updated when they are not in use.\n  mutable Pool<TextureTag, std::shared_ptr<VulkanTexture>> textures_;\n  mutable Pool<SamplerTag, VulkanSampler> samplers_;\n  // a texture/sampler was created since the last descriptor set update\n  mutable bool awaitingCreation_ = false;\n\n  mutable std::atomic<size_t> drawCallCount_{0};\n  mutable std::atomic<size_t> shaderCompilationCount_{0};\n\n  // stores an index into renderPasses_\n  mutable std::\n      unordered_map<VulkanRenderPassBuilder, uint8_t, VulkanRenderPassBuilder::HashFunction>\n          renderPassesHash_;\n  mutable std::vector<VkRenderPass> renderPasses_;\n\n  VulkanContextConfig config_;\n\n  // NOLINTEND(readability-identifier-naming)\n\n  void updateBindingsTextures(VkCommandBuffer IGL_NONNULL cmdBuf,\n                              VkPipelineLayout layout,\n                              VkPipelineBindPoint bindPoint,\n                              VulkanImmediateCommands::SubmitHandle nextSubmitHandle,\n                              const BindingsTextures& data,\n                              const VulkanDescriptorSetLayout& dsl,\n                              const util::SpvModuleInfo& info) const;\n  void updateBindingsBuffers(VkCommandBuffer IGL_NONNULL cmdBuf,\n                             VkPipelineLayout layout,\n                             VkPipelineBindPoint bindPoint,\n                             VulkanImmediateCommands::SubmitHandle nextSubmitHandle,\n                             BindingsBuffers& data,\n                             const VulkanDescriptorSetLayout& dsl,\n                             const util::SpvModuleInfo& info) const;\n  void updateBindingsStorageImages(VkCommandBuffer IGL_NONNULL cmdBuf,\n                                   VkPipelineLayout layout,\n                                   VkPipelineBindPoint bindPoint,\n                                   VulkanImmediateCommands::SubmitHandle nextSubmitHandle,\n                                   const BindingsStorageImages& data,\n                                   const VulkanDescriptorSetLayout& dsl,\n                                   const util::SpvModuleInfo& info) const;\n\n  struct DeferredTask {\n    DeferredTask(std::packaged_task<void()>&& task, SubmitHandle handle) :\n      task(std::move(task)), handle(handle) {}\n    std::packaged_task<void()> task;\n    SubmitHandle handle;\n    uint64_t frameId = 0;\n  };\n\n  mutable std::deque<DeferredTask> deferredTasks;\n\n  // sync resources\n  uint32_t syncCurrentIndex = 0u;\n  std::vector<SubmitHandle> syncSubmitHandles;\n\n  VkPhysicalDeviceMemoryProperties memoryProperties{};\n\n#if IGL_VULKAN_VALIDATION_LAYER_ERROR_SUMMARY\n  std::unordered_map<std::string, uint32_t> validationErrorsSummary_;\n#endif\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanDescriptorSetLayout.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanDescriptorSetLayout.h\"\n\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nVulkanDescriptorSetLayout::VulkanDescriptorSetLayout(const VulkanContext& ctx,\n                                                     VkDescriptorSetLayoutCreateFlags flags,\n                                                     uint32_t numBindings,\n                                                     const VkDescriptorSetLayoutBinding* bindings,\n                                                     const VkDescriptorBindingFlags* bindingFlags,\n                                                     const char* debugName) :\n  ctx(ctx), numBindings(numBindings) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  VK_ASSERT(ivkCreateDescriptorSetLayout(&ctx.vf_,\n                                         ctx.getVkDevice(),\n                                         flags,\n                                         numBindings,\n                                         bindings,\n                                         bindingFlags,\n                                         &vkDescriptorSetLayout));\n  VK_ASSERT(ivkSetDebugObjectName(&ctx.vf_,\n                                  ctx.getVkDevice(),\n                                  VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,\n                                  (uint64_t)vkDescriptorSetLayout,\n                                  debugName));\n}\n\nVulkanDescriptorSetLayout::~VulkanDescriptorSetLayout() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n  ctx.freeResourcesForDescriptorSetLayout(vkDescriptorSetLayout);\n  ctx.deferredTask(std::packaged_task<void()>(\n      [vf = &ctx.vf_, device = ctx.getVkDevice(), layout = vkDescriptorSetLayout] {\n        vf->vkDestroyDescriptorSetLayout(device, layout, nullptr);\n      }));\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanDescriptorSetLayout.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanHelpers.h>\n\nnamespace igl::vulkan {\n\n/// @brief A wrapper around a VkDescriptorSetLayout\nclass VulkanDescriptorSetLayout final {\n public:\n  /** @brief Construct a new VulkanDescriptorSetLayout object with the given context,\n   * descriptor set layout create info, and optional debug name. `bindings` is a pointer to an\n   * array of VkDescriptorSetLayoutBinding and `bindingFlags` is a pointer to an array of\n   * VkDescriptorBindingFlags. The number of elements in each array must be equal to `numBindings`.\n   */\n  VulkanDescriptorSetLayout(const VulkanContext& ctx,\n                            VkDescriptorSetLayoutCreateFlags flags,\n                            uint32_t numBindings,\n                            const VkDescriptorSetLayoutBinding* bindings,\n                            const VkDescriptorBindingFlags* bindingFlags,\n                            const char* debugName = nullptr);\n  ~VulkanDescriptorSetLayout();\n\n  VulkanDescriptorSetLayout(const VulkanDescriptorSetLayout&) = delete;\n  VulkanDescriptorSetLayout& operator=(const VulkanDescriptorSetLayout&) = delete;\n  VulkanDescriptorSetLayout(VulkanDescriptorSetLayout&&) = delete;\n  VulkanDescriptorSetLayout& operator=(VulkanDescriptorSetLayout&&) = delete;\n\n  [[nodiscard]] VkDescriptorSetLayout getVkDescriptorSetLayout() const {\n    return vkDescriptorSetLayout;\n  }\n\n public:\n  const VulkanContext& ctx;\n  VkDescriptorSetLayout vkDescriptorSetLayout = VK_NULL_HANDLE;\n  uint32_t numBindings = 0;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanFeatures.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/VulkanFeatures.h>\n\n#include <igl/vulkan/VulkanContext.h>\n\nnamespace igl::vulkan {\n\nVulkanFeatures::VulkanFeatures(VulkanContextConfig config) noexcept :\n  // Vulkan 1.1\n  vkPhysicalDeviceFeatures2({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2,\n      .features =\n          {\n              .dualSrcBlend = config.enableDualSrcBlend ? VK_TRUE : VK_FALSE,\n              .multiDrawIndirect = VK_TRUE,\n              .drawIndirectFirstInstance = VK_TRUE,\n              .depthBiasClamp = VK_TRUE,\n#ifdef IGL_PLATFORM_ANDROID\n              .fillModeNonSolid = VK_FALSE, // not well supported on Android\n#else\n              .fillModeNonSolid = VK_TRUE,\n#endif\n              .shaderInt16 = config.enableShaderInt16 ? VK_TRUE : VK_FALSE,\n          },\n  }),\n  featuresSamplerYcbcrConversion({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES,\n      .samplerYcbcrConversion = VK_TRUE,\n  }),\n  featuresShaderDrawParameters({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,\n      .shaderDrawParameters = config.enableShaderDrawParameters ? VK_TRUE : VK_FALSE,\n  }),\n  featuresMultiview({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,\n      .multiview = VK_TRUE,\n      .multiviewGeometryShader = VK_FALSE,\n      .multiviewTessellationShader = VK_FALSE,\n  }),\n  featuresBufferDeviceAddress({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR,\n      .bufferDeviceAddress = VK_TRUE,\n      .bufferDeviceAddressCaptureReplay = VK_FALSE,\n      .bufferDeviceAddressMultiDevice = VK_FALSE,\n  }),\n  featuresDescriptorIndexing({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT,\n      .shaderInputAttachmentArrayDynamicIndexing = VK_FALSE,\n      .shaderUniformTexelBufferArrayDynamicIndexing = VK_FALSE,\n      .shaderStorageTexelBufferArrayDynamicIndexing = VK_FALSE,\n      .shaderUniformBufferArrayNonUniformIndexing = VK_FALSE,\n      .shaderSampledImageArrayNonUniformIndexing = VK_TRUE,\n      .shaderStorageBufferArrayNonUniformIndexing = VK_FALSE,\n      .shaderStorageImageArrayNonUniformIndexing = VK_FALSE,\n      .shaderInputAttachmentArrayNonUniformIndexing = VK_FALSE,\n      .shaderUniformTexelBufferArrayNonUniformIndexing = VK_FALSE,\n      .shaderStorageTexelBufferArrayNonUniformIndexing = VK_FALSE,\n      .descriptorBindingUniformBufferUpdateAfterBind = VK_TRUE,\n      .descriptorBindingSampledImageUpdateAfterBind = VK_TRUE,\n      .descriptorBindingStorageImageUpdateAfterBind = VK_TRUE,\n      .descriptorBindingStorageBufferUpdateAfterBind = VK_TRUE,\n      .descriptorBindingUniformTexelBufferUpdateAfterBind = VK_FALSE,\n      .descriptorBindingStorageTexelBufferUpdateAfterBind = VK_FALSE,\n      .descriptorBindingUpdateUnusedWhilePending = VK_TRUE,\n      .descriptorBindingPartiallyBound = VK_TRUE,\n      .descriptorBindingVariableDescriptorCount = VK_FALSE,\n      .runtimeDescriptorArray = VK_TRUE,\n  }),\n  features16BitStorage({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES,\n      .storageBuffer16BitAccess = config.enableStorageBuffer16BitAccess ? VK_TRUE : VK_FALSE,\n      .uniformAndStorageBuffer16BitAccess = VK_FALSE,\n      .storagePushConstant16 = VK_FALSE,\n      .storageInputOutput16 = VK_FALSE,\n  }),\n  // Vulkan 1.2\n  featuresShaderFloat16Int8({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR,\n      .shaderFloat16 = VK_FALSE,\n      .shaderInt8 = VK_FALSE,\n  }),\n  featuresIndexTypeUint8({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT,\n      .indexTypeUint8 = VK_FALSE,\n  }),\n  featuresSynchronization2({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR,\n      .synchronization2 = VK_TRUE,\n  }),\n  featuresTimelineSemaphore({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR,\n      .timelineSemaphore = VK_TRUE,\n  }),\n  featuresFragmentDensityMap({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT,\n      .fragmentDensityMap = VK_TRUE,\n  }),\n  featuresVulkanMemoryModel({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR,\n      .vulkanMemoryModel = VK_TRUE,\n  }),\n  features8BitStorage({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR,\n      .storageBuffer8BitAccess = VK_TRUE,\n      .uniformAndStorageBuffer8BitAccess = VK_FALSE,\n      .storagePushConstant8 = VK_FALSE,\n  }),\n  featuresUniformBufferStandardLayout({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR,\n      .uniformBufferStandardLayout = VK_TRUE,\n  }),\n  featuresMultiviewPerViewViewports({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_VIEWPORTS_FEATURES_QCOM,\n      .multiviewPerViewViewports = VK_TRUE,\n  }),\n  featuresMeshShader({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_EXT,\n      .taskShader = VK_TRUE,\n      .meshShader = VK_TRUE,\n  }),\n  featuresFragmentShadingRate({\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR,\n      .pipelineFragmentShadingRate = VK_FALSE,\n      .primitiveFragmentShadingRate = VK_FALSE,\n      .attachmentFragmentShadingRate = VK_FALSE,\n  }),\n  config(config) {\n  extensions_.resize(kNumberOfExtensionTypes);\n  enabledExtensions_.resize(kNumberOfExtensionTypes);\n\n  // All the above get assembled into a feature chain\n  assembleFeatureChain(config);\n}\n\nvoid VulkanFeatures::populateWithAvailablePhysicalDeviceFeatures(\n    const VulkanContext& context,\n    VkPhysicalDevice physicalDevice) noexcept { // NOLINT(bugprone-exception-escape)\n  IGL_DEBUG_ASSERT(context.vf_.vkGetPhysicalDeviceFeatures2 != nullptr,\n                   \"Pointer to function vkGetPhysicalDeviceFeatures2() is nullptr\");\n  uint32_t numExtensions = 0;\n  context.vf_.vkEnumerateDeviceExtensionProperties(\n      physicalDevice, nullptr, &numExtensions, nullptr);\n  extensionProps_.resize(numExtensions);\n  context.vf_.vkEnumerateDeviceExtensionProperties(\n      physicalDevice, nullptr, &numExtensions, extensionProps_.data());\n  assembleFeatureChain(context.config_);\n  context.vf_.vkGetPhysicalDeviceFeatures2(physicalDevice, &vkPhysicalDeviceFeatures2);\n}\n\nbool VulkanFeatures::hasExtension(const char* ext) const {\n  for (const VkExtensionProperties& props : extensionProps_) {\n    if (strcmp(ext, props.extensionName) == 0) {\n      return true;\n    }\n  }\n  return false;\n}\n\nResult VulkanFeatures::checkSelectedFeatures(\n    const VulkanFeatures& availableFeatures) const noexcept { // NOLINT(bugprone-exception-escape)\n  // Stores missing features\n  std::string missingFeatures;\n\n  // Macros for checking whether a requested feature is present. The macro logs an error if the\n  // feature is requested and not available Based on\n  // https://github.com/corporateshark/lightweightvk/blob/6b5ba5512f0e1ba7b20f4b37d7ec100eb25287c1/lvk/vulkan/VulkanClasses.cpp#L4702\n#define ENABLE_VULKAN_FEATURE(requestedFeatureStruct, availableFeatureStruct, feature, version) \\\n  if ((requestedFeatureStruct.feature == VK_TRUE) &&                                            \\\n      (availableFeatureStruct.feature == VK_FALSE)) {                                           \\\n    missingFeatures.append(\"\\n   \" version \" \" #requestedFeatureStruct \".\" #feature);           \\\n  }\n\n#define ENABLE_FEATURE_1_1(availableFeatureStruct, feature)                        \\\n  ENABLE_VULKAN_FEATURE(vkPhysicalDeviceFeatures2.features,                        \\\n                        availableFeatureStruct.vkPhysicalDeviceFeatures2.features, \\\n                        feature,                                                   \\\n                        \"1.1\")\n  ENABLE_FEATURE_1_1(availableFeatures, dualSrcBlend)\n  ENABLE_FEATURE_1_1(availableFeatures, shaderInt16)\n  ENABLE_FEATURE_1_1(availableFeatures, multiDrawIndirect)\n  ENABLE_FEATURE_1_1(availableFeatures, drawIndirectFirstInstance)\n  ENABLE_FEATURE_1_1(availableFeatures, depthBiasClamp)\n  ENABLE_FEATURE_1_1(availableFeatures, fillModeNonSolid)\n#undef ENABLE_FEATURE_1_1\n\n#define ENABLE_FEATURE_1_1_EXT(requestedFeatureStruct, availableFeatureStruct, feature) \\\n  ENABLE_VULKAN_FEATURE(requestedFeatureStruct, availableFeatureStruct, feature, \"1.1 EXT\")\n  if (config.enableDescriptorIndexing) {\n    ENABLE_FEATURE_1_1_EXT(featuresDescriptorIndexing,\n                           availableFeatures.featuresDescriptorIndexing,\n                           shaderSampledImageArrayNonUniformIndexing)\n    ENABLE_FEATURE_1_1_EXT(featuresDescriptorIndexing,\n                           availableFeatures.featuresDescriptorIndexing,\n                           descriptorBindingUniformBufferUpdateAfterBind)\n    ENABLE_FEATURE_1_1_EXT(featuresDescriptorIndexing,\n                           availableFeatures.featuresDescriptorIndexing,\n                           descriptorBindingSampledImageUpdateAfterBind)\n    ENABLE_FEATURE_1_1_EXT(featuresDescriptorIndexing,\n                           availableFeatures.featuresDescriptorIndexing,\n                           descriptorBindingStorageImageUpdateAfterBind)\n    ENABLE_FEATURE_1_1_EXT(featuresDescriptorIndexing,\n                           availableFeatures.featuresDescriptorIndexing,\n                           descriptorBindingStorageBufferUpdateAfterBind)\n    ENABLE_FEATURE_1_1_EXT(featuresDescriptorIndexing,\n                           availableFeatures.featuresDescriptorIndexing,\n                           descriptorBindingUpdateUnusedWhilePending)\n    ENABLE_FEATURE_1_1_EXT(featuresDescriptorIndexing,\n                           availableFeatures.featuresDescriptorIndexing,\n                           descriptorBindingPartiallyBound)\n    ENABLE_FEATURE_1_1_EXT(featuresDescriptorIndexing,\n                           availableFeatures.featuresDescriptorIndexing,\n                           runtimeDescriptorArray)\n  }\n  ENABLE_FEATURE_1_1_EXT(\n      features16BitStorage, availableFeatures.features16BitStorage, storageBuffer16BitAccess)\n  if (has_VK_KHR_buffer_device_address) {\n    ENABLE_FEATURE_1_1_EXT(featuresBufferDeviceAddress,\n                           availableFeatures.featuresBufferDeviceAddress,\n                           bufferDeviceAddress)\n  }\n  ENABLE_FEATURE_1_1_EXT(featuresMultiview, availableFeatures.featuresMultiview, multiview)\n  ENABLE_FEATURE_1_1_EXT(featuresSamplerYcbcrConversion,\n                         availableFeatures.featuresSamplerYcbcrConversion,\n                         samplerYcbcrConversion)\n  ENABLE_FEATURE_1_1_EXT(featuresShaderDrawParameters,\n                         availableFeatures.featuresShaderDrawParameters,\n                         shaderDrawParameters)\n#undef ENABLE_FEATURE_1_1_EXT\n\n#define ENABLE_FEATURE_1_2_EXT(requestedFeatureStruct, availableFeatureStruct, feature) \\\n  ENABLE_VULKAN_FEATURE(requestedFeatureStruct, availableFeatureStruct, feature, \"1.2\")\n  ENABLE_FEATURE_1_2_EXT(\n      featuresShaderFloat16Int8, availableFeatures.featuresShaderFloat16Int8, shaderFloat16)\n#undef ENABLE_FEATURE_1_2_EXT\n\n#undef ENABLE_VULKAN_FEATURE\n\n  if (!missingFeatures.empty()) {\n#if !IGL_PLATFORM_APPLE\n    IGL_DEBUG_ABORT(\"Missing Vulkan features: %s\\n\", missingFeatures.c_str());\n    return Result(Result::Code::RuntimeError);\n#else\n    IGL_LOG_INFO(\"Missing Vulkan features: %s\\n\", missingFeatures.c_str());\n    // For Vulkan 1.3 and MoltenVK, don't return an error as some 1.3 features are available\n    // via extensions\n#endif\n  }\n\n  // Return the value 'Ok'\n  return Result{};\n}\n\nvoid VulkanFeatures::assembleFeatureChain(const VulkanContextConfig& contextConfig) noexcept {\n  // Versions 1.0 and 1.1 are always present\n\n  // Reset all pNext pointers. We might be copying the chain from another VulkanFeatures object,\n  // so we need to reset the pNext pointers to avoid dangling pointers. Some of the extensions'\n  // pointers are guarded by #ifdefs below\n  vkPhysicalDeviceFeatures2.pNext = nullptr;\n  featuresSamplerYcbcrConversion.pNext = nullptr;\n  featuresShaderDrawParameters.pNext = nullptr;\n  featuresMultiview.pNext = nullptr;\n  featuresIndexTypeUint8.pNext = nullptr;\n  featuresSynchronization2.pNext = nullptr;\n  featuresTimelineSemaphore.pNext = nullptr;\n  featuresVulkanMemoryModel.pNext = nullptr;\n  featuresShaderFloat16Int8.pNext = nullptr;\n  features16BitStorage.pNext = nullptr;\n  featuresBufferDeviceAddress.pNext = nullptr;\n  featuresDescriptorIndexing.pNext = nullptr;\n  featuresMultiviewPerViewViewports.pNext = nullptr;\n  featuresFragmentDensityMap.pNext = nullptr;\n  features8BitStorage.pNext = nullptr;\n  featuresUniformBufferStandardLayout.pNext = nullptr;\n  featuresMeshShader.pNext = nullptr;\n  featuresFragmentShadingRate.pNext = nullptr;\n\n  // Add the required and optional features to the VkPhysicalDeviceFetaures2_\n  ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresSamplerYcbcrConversion);\n  ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresShaderDrawParameters);\n  ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresMultiview);\n  if (hasExtension(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresShaderFloat16Int8);\n  }\n  if (hasExtension(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresBufferDeviceAddress);\n  }\n  if (hasExtension(VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresVulkanMemoryModel);\n  }\n  if (hasExtension(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresDescriptorIndexing);\n  }\n  ivkAddNext(&vkPhysicalDeviceFeatures2, &features16BitStorage);\n\n  if (hasExtension(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresIndexTypeUint8);\n  }\n  if (hasExtension(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresSynchronization2);\n  }\n  if (hasExtension(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresTimelineSemaphore);\n  }\n  if (hasExtension(VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresFragmentDensityMap);\n  }\n  if (hasExtension(VK_KHR_8BIT_STORAGE_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &features8BitStorage);\n  }\n  if (hasExtension(VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresUniformBufferStandardLayout);\n  }\n  if (contextConfig.enableMultiviewPerViewViewports) {\n    if (hasExtension(VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_EXTENSION_NAME)) {\n      ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresMultiviewPerViewViewports);\n    } else {\n      IGL_LOG_ERROR(\"VK_QCOM_multiview_per_view_viewports extension not supported\\n\");\n    }\n  }\n  // Fragment shading rate must be added before mesh shader to ensure the dependency is properly\n  // handled when primitiveFragmentShadingRateMeshShader requires primitiveFragmentShadingRate\n  if (hasExtension(VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresFragmentShadingRate);\n  }\n  if (hasExtension(VK_EXT_MESH_SHADER_EXTENSION_NAME)) {\n    ivkAddNext(&vkPhysicalDeviceFeatures2, &featuresMeshShader);\n  }\n}\n\nVulkanFeatures& VulkanFeatures::operator=(const VulkanFeatures& other) noexcept {\n  if (this == &other) {\n    return *this;\n  }\n\n  const bool sameConfiguration =\n      config.enableDescriptorIndexing == other.config.enableDescriptorIndexing;\n  if (!sameConfiguration) {\n    return *this;\n  }\n\n  vkPhysicalDeviceFeatures2 = other.vkPhysicalDeviceFeatures2;\n\n  featuresSamplerYcbcrConversion = other.featuresSamplerYcbcrConversion;\n  featuresShaderDrawParameters = other.featuresShaderDrawParameters;\n  featuresMultiview = other.featuresMultiview;\n  featuresBufferDeviceAddress = other.featuresBufferDeviceAddress;\n  featuresDescriptorIndexing = other.featuresDescriptorIndexing;\n  features16BitStorage = other.features16BitStorage;\n\n  // Vulkan 1.2\n  featuresVulkanMemoryModel = other.featuresVulkanMemoryModel;\n  featuresShaderFloat16Int8 = other.featuresShaderFloat16Int8;\n  featuresIndexTypeUint8 = other.featuresIndexTypeUint8;\n  featuresSynchronization2 = other.featuresSynchronization2;\n  featuresTimelineSemaphore = other.featuresTimelineSemaphore;\n  featuresFragmentDensityMap = other.featuresFragmentDensityMap;\n  features8BitStorage = other.features8BitStorage;\n  featuresUniformBufferStandardLayout = other.featuresUniformBufferStandardLayout;\n  featuresMultiviewPerViewViewports = other.featuresMultiviewPerViewViewports;\n  featuresMeshShader = other.featuresMeshShader;\n  featuresFragmentShadingRate = other.featuresFragmentShadingRate;\n\n  extensions_ = other.extensions_;\n  enabledExtensions_ = other.enabledExtensions_;\n  extensionProps_ = other.extensionProps_;\n\n  assembleFeatureChain(config);\n\n  return *this;\n}\n\nvoid VulkanFeatures::enumerate(const VulkanFunctionTable& vf) {\n  uint32_t count = 0;\n  VK_ASSERT(vf.vkEnumerateInstanceExtensionProperties(nullptr, &count, nullptr));\n\n  std::vector<VkExtensionProperties> allExtensions(count);\n\n  VK_ASSERT(vf.vkEnumerateInstanceExtensionProperties(nullptr, &count, allExtensions.data()));\n\n  constexpr size_t vectorIndex = (size_t)ExtensionType::Instance;\n  std::transform(allExtensions.cbegin(),\n                 allExtensions.cend(),\n                 std::back_inserter(extensions_[vectorIndex]),\n                 [](const VkExtensionProperties& extensionProperties) {\n                   return extensionProperties.extensionName;\n                 });\n}\n\nvoid VulkanFeatures::enumerate(const VulkanFunctionTable& vf, VkPhysicalDevice device) {\n  uint32_t count = 0;\n  VK_ASSERT(vf.vkEnumerateDeviceExtensionProperties(device, nullptr, &count, nullptr));\n\n  std::vector<VkExtensionProperties> allExtensions(count);\n\n  VK_ASSERT(vf.vkEnumerateDeviceExtensionProperties(device, nullptr, &count, allExtensions.data()));\n\n  constexpr size_t vectorIndex = (size_t)ExtensionType::Device;\n  std::transform(allExtensions.cbegin(),\n                 allExtensions.cend(),\n                 std::back_inserter(extensions_[vectorIndex]),\n                 [](const VkExtensionProperties& extensionProperties) {\n                   return extensionProperties.extensionName;\n                 });\n}\n\nconst std::vector<std::string>& VulkanFeatures::allAvailableExtensions(\n    ExtensionType extensionType) const {\n  const size_t vectorIndex = (size_t)extensionType;\n  return extensions_[vectorIndex];\n}\n\nbool VulkanFeatures::available(const char* extensionName, ExtensionType extensionType) const {\n  const size_t vectorIndex = (size_t)extensionType;\n  const std::string extensionNameStr(extensionName);\n  auto result = std::find_if(\n      extensions_[vectorIndex].begin(),\n      extensions_[vectorIndex].end(),\n      [&extensionNameStr](const std::string& extension) { return extension == extensionNameStr; });\n\n  return result != extensions_[vectorIndex].end();\n}\n\nbool VulkanFeatures::enable(const char* extensionName, ExtensionType extensionType) {\n  const size_t vectorIndex = (size_t)extensionType;\n  if (available(extensionName, extensionType)) {\n    enabledExtensions_[vectorIndex].insert(extensionName);\n    return true;\n  }\n  return false;\n}\n\nvoid VulkanFeatures::enableCommonInstanceExtensions(const VulkanContextConfig& contextConfig) {\n  enable(VK_KHR_SURFACE_EXTENSION_NAME, ExtensionType::Instance);\n  enable(VK_EXT_DEBUG_UTILS_EXTENSION_NAME, ExtensionType::Instance);\n#if IGL_PLATFORM_WINDOWS\n  enable(VK_KHR_WIN32_SURFACE_EXTENSION_NAME, ExtensionType::Instance);\n#elif IGL_PLATFORM_ANDROID\n  enable(VK_KHR_ANDROID_SURFACE_EXTENSION_NAME, ExtensionType::Instance);\n#elif IGL_PLATFORM_LINUX\n  enable(\"VK_KHR_xlib_surface\", ExtensionType::Instance);\n#elif IGL_PLATFORM_MACOSX\n  enable(VK_EXT_METAL_SURFACE_EXTENSION_NAME, ExtensionType::Instance);\n#endif\n\n  // https://vulkan.lunarg.com/doc/sdk/1.3.216.0/mac/getting_started.html\n  has_VK_KHR_portability_enumeration =\n      enable(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, ExtensionType::Instance);\n\n#if !IGL_PLATFORM_ANDROID\n  if (contextConfig.enableValidation) {\n    enable(VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME, ExtensionType::Instance);\n  }\n#endif // !IGL_PLATFORM_ANDROID\n\n  has_VK_KHR_get_surface_capabilities2 =\n      enable(VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME, ExtensionType::Instance);\n\n  has_VK_EXT_headless_surface =\n      enable(VK_EXT_HEADLESS_SURFACE_EXTENSION_NAME, ExtensionType::Instance);\n\n  if (contextConfig.headless) {\n    if (!has_VK_EXT_headless_surface) {\n      IGL_LOG_ERROR(\"VK_EXT_headless_surface extension not supported\\n\");\n    }\n  }\n  if (contextConfig.swapChainColorSpace != igl::ColorSpace::SRGB_NONLINEAR) {\n    const bool enabledExtension =\n        enable(VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME, ExtensionType::Instance);\n    if (!enabledExtension) {\n      IGL_LOG_ERROR(\"VK_EXT_swapchain_colorspace extension not supported\\n\");\n    }\n  }\n}\n\nvoid VulkanFeatures::enableCommonDeviceExtensions(const VulkanContextConfig& contextConfig) {\n  enable(VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME, ExtensionType::Device);\n  enable(VK_KHR_SHADER_FLOAT16_INT8_EXTENSION_NAME, ExtensionType::Device);\n  enable(VK_KHR_SWAPCHAIN_EXTENSION_NAME, ExtensionType::Device);\n\n#if IGL_PLATFORM_ANDROID\n  enable(VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME, ExtensionType::Device);\n  enable(VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, ExtensionType::Device);\n  enable(VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME, ExtensionType::Device);\n  enable(VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME, ExtensionType::Device);\n#endif // IGL_PLATFORM_ANDROID\n\n#if !IGL_DEBUG\n  has_VK_KHR_shader_non_semantic_info =\n      enable(VK_KHR_SHADER_NON_SEMANTIC_INFO_EXTENSION_NAME, ExtensionType::Device);\n#endif // !IGL_DEBUG\n\n  // Enable the Portability Subset extension when available (e.g. MoltenVK).\n  // Reset the flag if the extension is not available.\n  if (has_VK_KHR_portability_enumeration) {\n    has_VK_KHR_portability_enumeration = enable(\"VK_KHR_portability_subset\", ExtensionType::Device);\n  }\n\n#if IGL_PLATFORM_WINDOWS\n  enable(VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME, ExtensionType::Device);\n#endif // IGL_PLATFORM_WINDOWS\n\n#if IGL_PLATFORM_LINUX\n  enable(VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME, ExtensionType::Device);\n  enable(VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME, ExtensionType::Device);\n#endif // IGL_PLATFORM_LINUX\n\n#if defined(IGL_WITH_TRACY_GPU)\n  enable(VK_EXT_CALIBRATED_TIMESTAMPS_EXTENSION_NAME, ExtensionType::Device);\n#endif // IGL_WITH_TRACY_GPU\n\n  has_VK_EXT_index_type_uint8 =\n      enable(VK_EXT_INDEX_TYPE_UINT8_EXTENSION_NAME, ExtensionType::Device);\n  has_VK_EXT_queue_family_foreign =\n      enable(VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME, ExtensionType::Device);\n\n  has_VK_KHR_timeline_semaphore =\n      enable(VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME, ExtensionType::Device);\n\n  has_VK_KHR_uniform_buffer_standard_layout =\n      enable(VK_KHR_UNIFORM_BUFFER_STANDARD_LAYOUT_EXTENSION_NAME, ExtensionType::Device);\n\n  has_VK_KHR_synchronization2 =\n      enable(VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME, ExtensionType::Device);\n\n  has_VK_KHR_8bit_storage = enable(VK_KHR_8BIT_STORAGE_EXTENSION_NAME, ExtensionType::Device);\n\n  has_VK_KHR_buffer_device_address =\n      enable(VK_KHR_BUFFER_DEVICE_ADDRESS_EXTENSION_NAME, ExtensionType::Device);\n\n  has_VK_KHR_vulkan_memory_model =\n      enable(VK_KHR_VULKAN_MEMORY_MODEL_EXTENSION_NAME, ExtensionType::Device);\n\n  has_VK_EXT_descriptor_indexing =\n      enable(VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME, ExtensionType::Device);\n\n  has_VK_EXT_fragment_density_map =\n      enable(VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME, ExtensionType::Device);\n\n  if (contextConfig.enableMultiviewPerViewViewports) {\n    has_VK_QCOM_multiview_per_view_viewports =\n        enable(VK_QCOM_MULTIVIEW_PER_VIEW_VIEWPORTS_EXTENSION_NAME, ExtensionType::Device);\n    IGL_SOFT_ASSERT(has_VK_QCOM_multiview_per_view_viewports,\n                    \"VK_QCOM_multiview_per_view_viewports is not supported\");\n  }\n\n  has_VK_EXT_mesh_shader = enable(VK_EXT_MESH_SHADER_EXTENSION_NAME, ExtensionType::Device);\n\n  // Enable fragment shading rate extension (required when primitiveFragmentShadingRateMeshShader is\n  // used)\n  enable(VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME, ExtensionType::Device);\n}\n\nbool VulkanFeatures::enabled(const char* extensionName) const {\n  return (enabledExtensions_[(size_t)ExtensionType::Instance].count(extensionName) > 0) ||\n         (enabledExtensions_[(size_t)ExtensionType::Device].count(extensionName) > 0);\n}\n\nstd::vector<const char*> VulkanFeatures::allEnabled(ExtensionType extensionType) const {\n  const size_t vectorIndex = (size_t)extensionType;\n  std::vector<const char*> returnList;\n  for (const auto& extension : enabledExtensions_[vectorIndex]) {\n    returnList.emplace_back(extension.c_str());\n  }\n  return returnList;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanFeatures.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <unordered_set>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanHelpers.h>\n\nnamespace igl::vulkan {\n\nclass VulkanContext;\n\n/// @brief Creates and maintains a list of feature structures for checking feature availability and\n/// feature selection. This class provides a way to quickly enable the default and required\n/// features. This class also manages instance and device extensions in Vulkan by enumerating all\n/// extensions available for either object and storing the names of the available ones as\n/// std::strings. A call to either `enumerate()` or `enumerate(VkPhysicalDevice)` must be performed\n/// before the class can be used. After enumeration, this class allows users to enable an object's\n/// extension by name by first checking them against all available extensions of that type. Only\n/// available extensions are stored as enabled internally. The class also provides helper functions\n/// to return all available extensions of a type, checking whether an extension is available without\n/// modifying the internal storage of the object, checking if an extension has been enabled for an\n/// object and, finally, a method to return a list of all enabled extensions of a type as `const\n/// char *`, which is accepted by the Vulkan API\nclass VulkanFeatures final {\n public:\n  /// @brief Helper enumeration to determine which extension is being used. It's converted to a\n  /// size_t internally to help access the right list of enumerations\n  enum class ExtensionType { Instance = 0, Device };\n\n  explicit VulkanFeatures(VulkanContextConfig config) noexcept;\n\n  /// @brief Populates the VkPhysicalDeviceFeatures2 and its pNext chain for a Vulkan context\n  void populateWithAvailablePhysicalDeviceFeatures(const VulkanContext& context,\n                                                   VkPhysicalDevice physicalDevice) noexcept;\n\n  /// @brief Checks the features enabled in this class against the ones passed\n  /// in as a parameter in 'availableFeatures'. If a requested feature is not present, the class\n  /// logs the message and returns a failure\n  [[nodiscard]] Result checkSelectedFeatures(\n      const VulkanFeatures& availableFeatures) const noexcept;\n\n  VkPhysicalDeviceFeatures2 vkPhysicalDeviceFeatures2{};\n\n  // Vulkan 1.1\n  VkPhysicalDeviceSamplerYcbcrConversionFeatures featuresSamplerYcbcrConversion{};\n  VkPhysicalDeviceShaderDrawParametersFeatures featuresShaderDrawParameters{};\n  VkPhysicalDeviceMultiviewFeatures featuresMultiview{};\n\n  VkPhysicalDeviceBufferDeviceAddressFeaturesKHR featuresBufferDeviceAddress{};\n  VkPhysicalDeviceDescriptorIndexingFeaturesEXT featuresDescriptorIndexing{};\n  VkPhysicalDevice16BitStorageFeatures features16BitStorage{};\n\n  // Vulkan 1.2\n  VkPhysicalDeviceShaderFloat16Int8Features featuresShaderFloat16Int8{};\n  VkPhysicalDeviceIndexTypeUint8FeaturesEXT featuresIndexTypeUint8{};\n  VkPhysicalDeviceSynchronization2FeaturesKHR featuresSynchronization2{};\n  VkPhysicalDeviceTimelineSemaphoreFeaturesKHR featuresTimelineSemaphore{};\n  VkPhysicalDeviceFragmentDensityMapFeaturesEXT featuresFragmentDensityMap{};\n  VkPhysicalDeviceVulkanMemoryModelFeaturesKHR featuresVulkanMemoryModel{};\n  VkPhysicalDevice8BitStorageFeaturesKHR features8BitStorage{};\n  VkPhysicalDeviceUniformBufferStandardLayoutFeaturesKHR featuresUniformBufferStandardLayout{};\n  VkPhysicalDeviceMultiviewPerViewViewportsFeaturesQCOM featuresMultiviewPerViewViewports{};\n  VkPhysicalDeviceMeshShaderFeaturesEXT featuresMeshShader{};\n  VkPhysicalDeviceFragmentShadingRateFeaturesKHR featuresFragmentShadingRate{};\n\n  // We need to reassemble the feature chain because of the pNext pointers\n  VulkanFeatures& operator=(const VulkanFeatures& other) noexcept;\n\n  /// @brief Enumerates all instance extensions and stores their names internally in a vector of\n  /// std::strings\n  void enumerate(const VulkanFunctionTable& vf);\n\n  /// @brief Enumerates all physical device extensions and stores their names internally in a vector\n  /// of std::strings\n  /// @param The physical device to use as a reference for the enumeration\n  void enumerate(const VulkanFunctionTable& vf, VkPhysicalDevice device);\n\n  /// @brief Returns all available extensions of a type\n  /// @param extensionType The type of the extensions\n  [[nodiscard]] const std::vector<std::string>& allAvailableExtensions(\n      ExtensionType extensionType) const;\n\n  /// @brief Returns true if the extension with name equal to `extensionName` of the type\n  /// `extensionType` is available and false otherwise\n  /// @param extensionName The name of the extension\n  /// @param extensionType The type of the extensions to return\n  bool available(const char* extensionName, ExtensionType extensionType) const;\n\n  /// @brief Enables the common instance extensions used in IGL.\n  /// @param contextConfig The VulkanContextConfig used to create the VulkanContext\n  void enableCommonInstanceExtensions(const VulkanContextConfig& contextConfig);\n\n  /// @brief Enables the common device extensions used in IGL.\n  /// @param contextConfig The VulkanContextConfig used to create the VulkanContext\n  void enableCommonDeviceExtensions(const VulkanContextConfig& contextConfig);\n\n public:\n  friend class Device;\n  friend class VulkanContext;\n\n  // A copy of the config used by the VulkanContext\n  VulkanContextConfig config{};\n\n  // NOLINTBEGIN(readability-identifier-naming)\n  bool has_VK_EXT_descriptor_indexing = false; // promoted to Vulkan 1.2\n  bool has_VK_EXT_fragment_density_map = false;\n  bool has_VK_EXT_headless_surface = false;\n  bool has_VK_EXT_index_type_uint8 = false; // promoted to Vulkan 1.4\n  bool has_VK_EXT_mesh_shader = false;\n  bool has_VK_EXT_queue_family_foreign = false;\n  bool has_VK_KHR_8bit_storage = false; // promoted to Vulkan 1.2\n  bool has_VK_KHR_buffer_device_address = false; // promoted to Vulkan 1.2\n  bool has_VK_KHR_get_surface_capabilities2 = false;\n  bool has_VK_KHR_portability_enumeration = false;\n  bool has_VK_KHR_shader_non_semantic_info = false; // promoted to Vulkan 1.3\n  bool has_VK_KHR_synchronization2 = false; // promoted to Vulkan 1.3\n  bool has_VK_KHR_timeline_semaphore = false; // promoted to Vulkan 1.2\n  bool has_VK_KHR_uniform_buffer_standard_layout = false; // promoted to Vulkan 1.2\n  bool has_VK_KHR_vulkan_memory_model = false; // promoted to Vulkan 1.2\n  bool has_VK_QCOM_multiview_per_view_viewports = false;\n  // NOLINTEND(readability-identifier-naming)\n\n private:\n  static constexpr size_t kNumberOfExtensionTypes = 2;\n  /// @brief a Vector of a vector of strings. The outer vector stores two vectors, one for each\n  /// object type (instance and physical device). The inner vector is the list of all available\n  /// extensions for the type\n  std::vector<std::vector<std::string>> extensions_;\n\n  /// @brief a Vector of unordered_sets of string. The outer vector stores two sets, one for each\n  /// object type (instance and device). The inner set is the list of all extensions enabled for the\n  /// type\n  std::vector<std::unordered_set<std::string>> enabledExtensions_;\n\n  /// @brief Assembles the feature chain for the VkPhysicalDeviceFeatures2 structure by connecting\n  /// the existing/required feature structures and their pNext chain.\n  void assembleFeatureChain(const VulkanContextConfig& contextConfig) noexcept;\n  bool hasExtension(const char* ext) const;\n\n  /// @brief Enables the extension with name `extensionName` of the type `extensionType` if the\n  /// extension is available. If an instance or physical device deoesn't support the\n  /// extension, this method is a no-op\n  /// @param extensionName The name of the extension\n  /// @param extensionType The type of the extension\n  /// @return True if the extension is available, false otherwise\n  bool enable(const char* extensionName, ExtensionType extensionType);\n\n  /// @brief Returns true if an extension with name `extensionName` is enabled and false otherwise.\n  /// This method will check the extension against the list of enabled ones for the\n  /// instance and the physical device\n  /// @param extensionName The name of the extension\n  /// @return True if the extension has been enabled, false otherwise\n  [[nodiscard]] bool enabled(const char* extensionName) const;\n\n  /// @brief Returns a vector of `const char *` of all enabled extensions for an instance or phyical\n  /// device. This method is particularly useful because Vulkan expects an\n  /// array of `const char *` with the names of the extensions to enable\n  /// @param extensionType The type of the extensions\n  /// @return A vector of `const char *` with all enabled extensions of type `extensionType`. The\n  /// return value must not outlive the instance of this class, as the pointers in the returned\n  /// vector point to the strings stored internally in this class\n  [[nodiscard]] std::vector<const char*> allEnabled(ExtensionType extensionType) const;\n\n  std::vector<VkExtensionProperties> extensionProps_;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanFence.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanFence.h\"\n\n#include <utility> // std::swap\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nVulkanFence::VulkanFence(const VulkanFunctionTable& vf,\n                         VkDevice device,\n                         VkFlags flags,\n                         bool exportable,\n                         const char* debugName) :\n  vf_(&vf), device_(device), exportable_(exportable) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  const VkExportFenceCreateInfo exportInfo = {\n      .sType = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO,\n      .handleTypes = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT,\n  };\n\n  const VkFenceCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO,\n      .pNext = exportable ? &exportInfo : nullptr,\n      .flags = flags,\n  };\n  VK_ASSERT(vf_->vkCreateFence(device_, &ci, nullptr, &vkFence_));\n\n  VK_ASSERT(\n      ivkSetDebugObjectName(vf_, device_, VK_OBJECT_TYPE_FENCE, (uint64_t)vkFence_, debugName));\n}\n\nVulkanFence ::~VulkanFence() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n\n  if (device_ != VK_NULL_HANDLE) {\n    // lifetimes of all VkFence objects are managed explicitly\n    // we do not use deferredTask() for them\n    vf_->vkDestroyFence(device_, vkFence_, nullptr);\n  }\n}\n\nVulkanFence::VulkanFence(VulkanFence&& other) noexcept {\n  std::swap(vf_, other.vf_);\n  std::swap(device_, other.device_);\n  std::swap(vkFence_, other.vkFence_);\n  std::swap(exportable_, other.exportable_);\n}\n\nVulkanFence& VulkanFence::operator=(VulkanFence&& other) noexcept {\n  VulkanFence tmp(std::move(other));\n  std::swap(vf_, tmp.vf_);\n  std::swap(device_, tmp.device_);\n  std::swap(vkFence_, tmp.vkFence_);\n  std::swap(exportable_, tmp.exportable_);\n  return *this;\n}\n\nbool VulkanFence::reset() noexcept {\n  const VkResult result = vf_->vkResetFences(device_, 1, &vkFence_);\n  return result == VK_SUCCESS;\n}\n\nbool VulkanFence::wait(uint64_t timeoutNs) noexcept {\n  const VkResult result = vf_->vkWaitForFences(device_, 1, &vkFence_, VK_TRUE, timeoutNs);\n  return result == VK_SUCCESS;\n}\n\nbool VulkanFence::signal(VkQueue queue) {\n  if (queue == VK_NULL_HANDLE) {\n    // protected against invalid submit\n    return false;\n  }\n\n  const VkResult result = vf_->vkQueueSubmit(queue, 0, nullptr, vkFence_);\n  return result == VK_SUCCESS;\n}\n\nbool VulkanFence::exportable() const noexcept {\n  return exportable_;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanFence.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanHelpers.h>\n\nnamespace igl::vulkan {\n\n/**\n * @brief Fences are used to synchronize CPU-GPU tasks. The VulkanFence class encapsulates the\n * creation and destruction of a vulkan fence object (VkFence). It stores an opaque handle for a\n * newly created fence object and for a device object.\n */\nclass VulkanFence final {\n public:\n  VulkanFence(const VulkanFunctionTable& vf,\n              VkDevice device,\n              VkFlags flags,\n              bool exportable = false,\n              const char* debugName = nullptr);\n  ~VulkanFence();\n\n  VulkanFence(VulkanFence&& other) noexcept;\n  VulkanFence& operator=(VulkanFence&& other) noexcept;\n\n  VulkanFence(const VulkanFence&) = delete;\n  VulkanFence operator=(const VulkanFence&) = delete;\n\n  bool reset() noexcept;\n  bool wait(uint64_t timeoutNs = UINT64_MAX) noexcept;\n\n  /** @brief Signals the fence on the provided queue.\n   *\n   * This does not wait for completion of the signal, it merely\n   * executes the vkQueueSubmit with the fence and no actual workload\n   * so that the fence is signaled as soon as the queue workload executes\n   * on the GPU.\n   */\n  bool signal(VkQueue queue);\n\n  [[nodiscard]] bool exportable() const noexcept;\n\n public:\n  // NOLINTBEGIN(readability-identifier-naming)\n  const VulkanFunctionTable* vf_{};\n  VkDevice device_ = VK_NULL_HANDLE;\n  VkFence vkFence_ = VK_NULL_HANDLE;\n  bool exportable_ = false;\n  // NOLINTEND(readability-identifier-naming)\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanFramebuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanFramebuffer.h\"\n\n#include \"VulkanContext.h\"\n\nnamespace igl::vulkan {\nVulkanFramebuffer::VulkanFramebuffer(const VulkanContext& ctx,\n                                     VkDevice device,\n                                     uint32_t width,\n                                     uint32_t height,\n                                     VkRenderPass renderPass,\n                                     size_t numAttachments,\n                                     const VkImageView* attachments,\n                                     const char* debugName) :\n  ctx(ctx), vkDevice(device) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  if (!IGL_DEBUG_VERIFY(renderPass != VK_NULL_HANDLE)) {\n    return;\n  }\n  if (!IGL_DEBUG_VERIFY(attachments)) {\n    return;\n  }\n\n  VK_ASSERT(ivkCreateFramebuffer(\n      &ctx.vf_, vkDevice, width, height, renderPass, numAttachments, attachments, &vkFramebuffer));\n  VK_ASSERT(ivkSetDebugObjectName(\n      &ctx.vf_, vkDevice, VK_OBJECT_TYPE_FRAMEBUFFER, (uint64_t)vkFramebuffer, debugName));\n}\n\nVulkanFramebuffer::~VulkanFramebuffer() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n\n  ctx.deferredTask(\n      std::packaged_task<void()>([vf = &ctx.vf_, device = vkDevice, framebuffer = vkFramebuffer]() {\n        vf->vkDestroyFramebuffer(device, framebuffer, nullptr);\n      }));\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanFramebuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n#include <igl/vulkan/VulkanHelpers.h>\n\nnamespace igl::vulkan {\n\nclass VulkanContext;\n\n/// @brief A wrapper around a Vulkan Framebuffer object\nclass VulkanFramebuffer final {\n public:\n  /// @brief Constructs a VulkanFramebuffer object with the parameters provided and an optional\n  /// debug name\n  VulkanFramebuffer(const VulkanContext& ctx,\n                    VkDevice device,\n                    uint32_t width,\n                    uint32_t height,\n                    VkRenderPass renderPass,\n                    size_t numAttachments,\n                    const VkImageView* attachments,\n                    const char* debugName = nullptr);\n\n  /// @brief Queues the destruction of the framebuffer on the Vulkan context via a deferred task.\n  /// For more details about deferred tasks, please refer to the igl::vulkan::VulkanContext class\n  ~VulkanFramebuffer();\n\n  VulkanFramebuffer(const VulkanFramebuffer&) = delete;\n  VulkanFramebuffer& operator=(const VulkanFramebuffer&) = delete;\n  VulkanFramebuffer(VulkanFramebuffer&&) = delete;\n  VulkanFramebuffer& operator=(VulkanFramebuffer&&) = delete;\n\n  [[nodiscard]] VkFramebuffer getVkFramebuffer() const {\n    return vkFramebuffer;\n  }\n\n public:\n  const VulkanContext& ctx;\n  VkDevice vkDevice = VK_NULL_HANDLE;\n  VkFramebuffer vkFramebuffer = VK_NULL_HANDLE;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanFunctionTable.c",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanFunctionTable.h\"\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n#if defined(FORCE_USE_STATIC_VULKAN_LOADER) && !defined(FORCE_USE_STATIC_VULKAN_LOADER_DISABLED)\nextern PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* pName);\n#endif\n\nint loadVulkanLoaderFunctions(struct VulkanFunctionTable* table, PFN_vkGetInstanceProcAddr load) {\n  /* IGL_GENERATE_LOAD_LOADER_TABLE */\n\n#if defined(FORCE_USE_STATIC_VULKAN_LOADER) && !defined(FORCE_USE_STATIC_VULKAN_LOADER_DISABLED)\n  if (table->vkGetInstanceProcAddr == NULL) {\n    table->vkGetInstanceProcAddr = &vkGetInstanceProcAddr;\n    load = table->vkGetInstanceProcAddr;\n  }\n#endif\n\n  if (!load) {\n    return 0;\n  }\n  // VK_VERSION_1_0\n  table->vkCreateInstance = (PFN_vkCreateInstance)load(NULL, \"vkCreateInstance\");\n  table->vkEnumerateInstanceExtensionProperties = (PFN_vkEnumerateInstanceExtensionProperties)load(\n      NULL, \"vkEnumerateInstanceExtensionProperties\");\n  table->vkEnumerateInstanceLayerProperties =\n      (PFN_vkEnumerateInstanceLayerProperties)load(NULL, \"vkEnumerateInstanceLayerProperties\");\n  // VK_VERSION_1_1\n  table->vkEnumerateInstanceVersion =\n      (PFN_vkEnumerateInstanceVersion)load(NULL, \"vkEnumerateInstanceVersion\");\n  /* IGL_GENERATE_LOAD_LOADER_TABLE */\n  return 1;\n}\n\nvoid loadVulkanInstanceFunctions(struct VulkanFunctionTable* table,\n                                 VkInstance context,\n                                 PFN_vkGetInstanceProcAddr load,\n                                 VkBool32 enableExtDebugUtils) {\n  /* IGL_GENERATE_LOAD_INSTANCE_TABLE */\n  // VK_VERSION_1_0\n  table->vkCreateDevice = (PFN_vkCreateDevice)load(context, \"vkCreateDevice\");\n  table->vkDestroyInstance = (PFN_vkDestroyInstance)load(context, \"vkDestroyInstance\");\n  table->vkEnumerateDeviceExtensionProperties = (PFN_vkEnumerateDeviceExtensionProperties)load(\n      context, \"vkEnumerateDeviceExtensionProperties\");\n  table->vkEnumerateDeviceLayerProperties =\n      (PFN_vkEnumerateDeviceLayerProperties)load(context, \"vkEnumerateDeviceLayerProperties\");\n  table->vkEnumeratePhysicalDevices =\n      (PFN_vkEnumeratePhysicalDevices)load(context, \"vkEnumeratePhysicalDevices\");\n  table->vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)load(context, \"vkGetDeviceProcAddr\");\n  table->vkGetPhysicalDeviceFeatures =\n      (PFN_vkGetPhysicalDeviceFeatures)load(context, \"vkGetPhysicalDeviceFeatures\");\n  table->vkGetPhysicalDeviceFormatProperties =\n      (PFN_vkGetPhysicalDeviceFormatProperties)load(context, \"vkGetPhysicalDeviceFormatProperties\");\n  table->vkGetPhysicalDeviceImageFormatProperties =\n      (PFN_vkGetPhysicalDeviceImageFormatProperties)load(\n          context, \"vkGetPhysicalDeviceImageFormatProperties\");\n  table->vkGetPhysicalDeviceMemoryProperties =\n      (PFN_vkGetPhysicalDeviceMemoryProperties)load(context, \"vkGetPhysicalDeviceMemoryProperties\");\n  table->vkGetPhysicalDeviceProperties =\n      (PFN_vkGetPhysicalDeviceProperties)load(context, \"vkGetPhysicalDeviceProperties\");\n  table->vkGetPhysicalDeviceQueueFamilyProperties =\n      (PFN_vkGetPhysicalDeviceQueueFamilyProperties)load(\n          context, \"vkGetPhysicalDeviceQueueFamilyProperties\");\n  table->vkGetPhysicalDeviceSparseImageFormatProperties =\n      (PFN_vkGetPhysicalDeviceSparseImageFormatProperties)load(\n          context, \"vkGetPhysicalDeviceSparseImageFormatProperties\");\n  // VK_VERSION_1_1\n  table->vkEnumeratePhysicalDeviceGroups =\n      (PFN_vkEnumeratePhysicalDeviceGroups)load(context, \"vkEnumeratePhysicalDeviceGroups\");\n  table->vkGetPhysicalDeviceExternalBufferProperties =\n      (PFN_vkGetPhysicalDeviceExternalBufferProperties)load(\n          context, \"vkGetPhysicalDeviceExternalBufferProperties\");\n  table->vkGetPhysicalDeviceExternalFenceProperties =\n      (PFN_vkGetPhysicalDeviceExternalFenceProperties)load(\n          context, \"vkGetPhysicalDeviceExternalFenceProperties\");\n  table->vkGetPhysicalDeviceExternalSemaphoreProperties =\n      (PFN_vkGetPhysicalDeviceExternalSemaphoreProperties)load(\n          context, \"vkGetPhysicalDeviceExternalSemaphoreProperties\");\n  table->vkGetPhysicalDeviceFeatures2 =\n      (PFN_vkGetPhysicalDeviceFeatures2)load(context, \"vkGetPhysicalDeviceFeatures2\");\n  table->vkGetPhysicalDeviceFormatProperties2 = (PFN_vkGetPhysicalDeviceFormatProperties2)load(\n      context, \"vkGetPhysicalDeviceFormatProperties2\");\n  table->vkGetPhysicalDeviceImageFormatProperties2 =\n      (PFN_vkGetPhysicalDeviceImageFormatProperties2)load(\n          context, \"vkGetPhysicalDeviceImageFormatProperties2\");\n  table->vkGetPhysicalDeviceMemoryProperties2 = (PFN_vkGetPhysicalDeviceMemoryProperties2)load(\n      context, \"vkGetPhysicalDeviceMemoryProperties2\");\n  table->vkGetPhysicalDeviceProperties2 =\n      (PFN_vkGetPhysicalDeviceProperties2)load(context, \"vkGetPhysicalDeviceProperties2\");\n  table->vkGetPhysicalDeviceQueueFamilyProperties2 =\n      (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)load(\n          context, \"vkGetPhysicalDeviceQueueFamilyProperties2\");\n  table->vkGetPhysicalDeviceSparseImageFormatProperties2 =\n      (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)load(\n          context, \"vkGetPhysicalDeviceSparseImageFormatProperties2\");\n#if defined(VK_VERSION_1_3)\n  table->vkGetPhysicalDeviceToolProperties =\n      (PFN_vkGetPhysicalDeviceToolProperties)load(context, \"vkGetPhysicalDeviceToolProperties\");\n#endif /* defined(VK_VERSION_1_3) */\n#if defined(VK_EXT_acquire_drm_display)\n  table->vkAcquireDrmDisplayEXT =\n      (PFN_vkAcquireDrmDisplayEXT)load(context, \"vkAcquireDrmDisplayEXT\");\n  table->vkGetDrmDisplayEXT = (PFN_vkGetDrmDisplayEXT)load(context, \"vkGetDrmDisplayEXT\");\n#endif /* defined(VK_EXT_acquire_drm_display) */\n#if defined(VK_EXT_acquire_xlib_display)\n  table->vkAcquireXlibDisplayEXT =\n      (PFN_vkAcquireXlibDisplayEXT)load(context, \"vkAcquireXlibDisplayEXT\");\n  table->vkGetRandROutputDisplayEXT =\n      (PFN_vkGetRandROutputDisplayEXT)load(context, \"vkGetRandROutputDisplayEXT\");\n#endif /* defined(VK_EXT_acquire_xlib_display) */\n#if defined(VK_EXT_calibrated_timestamps)\n  table->vkGetPhysicalDeviceCalibrateableTimeDomainsEXT =\n      (PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT)load(\n          context, \"vkGetPhysicalDeviceCalibrateableTimeDomainsEXT\");\n#endif /* defined(VK_EXT_calibrated_timestamps) */\n#if defined(VK_EXT_debug_report)\n  table->vkCreateDebugReportCallbackEXT =\n      (PFN_vkCreateDebugReportCallbackEXT)load(context, \"vkCreateDebugReportCallbackEXT\");\n  table->vkDebugReportMessageEXT =\n      (PFN_vkDebugReportMessageEXT)load(context, \"vkDebugReportMessageEXT\");\n  table->vkDestroyDebugReportCallbackEXT =\n      (PFN_vkDestroyDebugReportCallbackEXT)load(context, \"vkDestroyDebugReportCallbackEXT\");\n#endif /* defined(VK_EXT_debug_report) */\n#if defined(VK_EXT_debug_utils)\n  if (enableExtDebugUtils) {\n    table->vkCmdBeginDebugUtilsLabelEXT =\n        (PFN_vkCmdBeginDebugUtilsLabelEXT)load(context, \"vkCmdBeginDebugUtilsLabelEXT\");\n    table->vkCmdEndDebugUtilsLabelEXT =\n        (PFN_vkCmdEndDebugUtilsLabelEXT)load(context, \"vkCmdEndDebugUtilsLabelEXT\");\n    table->vkCmdInsertDebugUtilsLabelEXT =\n        (PFN_vkCmdInsertDebugUtilsLabelEXT)load(context, \"vkCmdInsertDebugUtilsLabelEXT\");\n    table->vkCreateDebugUtilsMessengerEXT =\n        (PFN_vkCreateDebugUtilsMessengerEXT)load(context, \"vkCreateDebugUtilsMessengerEXT\");\n    table->vkDestroyDebugUtilsMessengerEXT =\n        (PFN_vkDestroyDebugUtilsMessengerEXT)load(context, \"vkDestroyDebugUtilsMessengerEXT\");\n    table->vkQueueBeginDebugUtilsLabelEXT =\n        (PFN_vkQueueBeginDebugUtilsLabelEXT)load(context, \"vkQueueBeginDebugUtilsLabelEXT\");\n    table->vkQueueEndDebugUtilsLabelEXT =\n        (PFN_vkQueueEndDebugUtilsLabelEXT)load(context, \"vkQueueEndDebugUtilsLabelEXT\");\n    table->vkQueueInsertDebugUtilsLabelEXT =\n        (PFN_vkQueueInsertDebugUtilsLabelEXT)load(context, \"vkQueueInsertDebugUtilsLabelEXT\");\n    table->vkSetDebugUtilsObjectNameEXT =\n        (PFN_vkSetDebugUtilsObjectNameEXT)load(context, \"vkSetDebugUtilsObjectNameEXT\");\n    table->vkSetDebugUtilsObjectTagEXT =\n        (PFN_vkSetDebugUtilsObjectTagEXT)load(context, \"vkSetDebugUtilsObjectTagEXT\");\n    table->vkSubmitDebugUtilsMessageEXT =\n        (PFN_vkSubmitDebugUtilsMessageEXT)load(context, \"vkSubmitDebugUtilsMessageEXT\");\n  }\n#endif /* defined(VK_EXT_debug_utils) */\n#if defined(VK_EXT_direct_mode_display)\n  table->vkReleaseDisplayEXT = (PFN_vkReleaseDisplayEXT)load(context, \"vkReleaseDisplayEXT\");\n#endif /* defined(VK_EXT_direct_mode_display) */\n#if defined(VK_EXT_directfb_surface)\n  table->vkCreateDirectFBSurfaceEXT =\n      (PFN_vkCreateDirectFBSurfaceEXT)load(context, \"vkCreateDirectFBSurfaceEXT\");\n  table->vkGetPhysicalDeviceDirectFBPresentationSupportEXT =\n      (PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT)load(\n          context, \"vkGetPhysicalDeviceDirectFBPresentationSupportEXT\");\n#endif /* defined(VK_EXT_directfb_surface) */\n#if defined(VK_EXT_display_surface_counter)\n  table->vkGetPhysicalDeviceSurfaceCapabilities2EXT =\n      (PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT)load(\n          context, \"vkGetPhysicalDeviceSurfaceCapabilities2EXT\");\n#endif /* defined(VK_EXT_display_surface_counter) */\n#if defined(VK_EXT_full_screen_exclusive)\n  table->vkGetPhysicalDeviceSurfacePresentModes2EXT =\n      (PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT)load(\n          context, \"vkGetPhysicalDeviceSurfacePresentModes2EXT\");\n#endif /* defined(VK_EXT_full_screen_exclusive) */\n#if defined(VK_EXT_headless_surface)\n  table->vkCreateHeadlessSurfaceEXT =\n      (PFN_vkCreateHeadlessSurfaceEXT)load(context, \"vkCreateHeadlessSurfaceEXT\");\n#endif /* defined(VK_EXT_headless_surface) */\n#if defined(VK_EXT_metal_surface)\n  table->vkCreateMetalSurfaceEXT =\n      (PFN_vkCreateMetalSurfaceEXT)load(context, \"vkCreateMetalSurfaceEXT\");\n#endif /* defined(VK_EXT_metal_surface) */\n#if defined(VK_EXT_sample_locations)\n  table->vkGetPhysicalDeviceMultisamplePropertiesEXT =\n      (PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT)load(\n          context, \"vkGetPhysicalDeviceMultisamplePropertiesEXT\");\n#endif /* defined(VK_EXT_sample_locations) */\n#if defined(VK_EXT_tooling_info)\n  table->vkGetPhysicalDeviceToolPropertiesEXT = (PFN_vkGetPhysicalDeviceToolPropertiesEXT)load(\n      context, \"vkGetPhysicalDeviceToolPropertiesEXT\");\n#endif /* defined(VK_EXT_tooling_info) */\n#if defined(VK_FUCHSIA_imagepipe_surface)\n  table->vkCreateImagePipeSurfaceFUCHSIA =\n      (PFN_vkCreateImagePipeSurfaceFUCHSIA)load(context, \"vkCreateImagePipeSurfaceFUCHSIA\");\n#endif /* defined(VK_FUCHSIA_imagepipe_surface) */\n#if defined(VK_GGP_stream_descriptor_surface)\n  table->vkCreateStreamDescriptorSurfaceGGP =\n      (PFN_vkCreateStreamDescriptorSurfaceGGP)load(context, \"vkCreateStreamDescriptorSurfaceGGP\");\n#endif /* defined(VK_GGP_stream_descriptor_surface) */\n#if defined(VK_KHR_android_surface)\n  table->vkCreateAndroidSurfaceKHR =\n      (PFN_vkCreateAndroidSurfaceKHR)load(context, \"vkCreateAndroidSurfaceKHR\");\n#endif /* defined(VK_KHR_android_surface) */\n#if defined(VK_KHR_device_group_creation)\n  table->vkEnumeratePhysicalDeviceGroupsKHR =\n      (PFN_vkEnumeratePhysicalDeviceGroupsKHR)load(context, \"vkEnumeratePhysicalDeviceGroupsKHR\");\n#endif /* defined(VK_KHR_device_group_creation) */\n#if defined(VK_KHR_display)\n  table->vkCreateDisplayModeKHR =\n      (PFN_vkCreateDisplayModeKHR)load(context, \"vkCreateDisplayModeKHR\");\n  table->vkCreateDisplayPlaneSurfaceKHR =\n      (PFN_vkCreateDisplayPlaneSurfaceKHR)load(context, \"vkCreateDisplayPlaneSurfaceKHR\");\n  table->vkGetDisplayModePropertiesKHR =\n      (PFN_vkGetDisplayModePropertiesKHR)load(context, \"vkGetDisplayModePropertiesKHR\");\n  table->vkGetDisplayPlaneCapabilitiesKHR =\n      (PFN_vkGetDisplayPlaneCapabilitiesKHR)load(context, \"vkGetDisplayPlaneCapabilitiesKHR\");\n  table->vkGetDisplayPlaneSupportedDisplaysKHR = (PFN_vkGetDisplayPlaneSupportedDisplaysKHR)load(\n      context, \"vkGetDisplayPlaneSupportedDisplaysKHR\");\n  table->vkGetPhysicalDeviceDisplayPlanePropertiesKHR =\n      (PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR)load(\n          context, \"vkGetPhysicalDeviceDisplayPlanePropertiesKHR\");\n  table->vkGetPhysicalDeviceDisplayPropertiesKHR =\n      (PFN_vkGetPhysicalDeviceDisplayPropertiesKHR)load(context,\n                                                        \"vkGetPhysicalDeviceDisplayPropertiesKHR\");\n#endif /* defined(VK_KHR_display) */\n#if defined(VK_KHR_external_fence_capabilities)\n  table->vkGetPhysicalDeviceExternalFencePropertiesKHR =\n      (PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR)load(\n          context, \"vkGetPhysicalDeviceExternalFencePropertiesKHR\");\n#endif /* defined(VK_KHR_external_fence_capabilities) */\n#if defined(VK_KHR_external_memory_capabilities)\n  table->vkGetPhysicalDeviceExternalBufferPropertiesKHR =\n      (PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR)load(\n          context, \"vkGetPhysicalDeviceExternalBufferPropertiesKHR\");\n#endif /* defined(VK_KHR_external_memory_capabilities) */\n#if defined(VK_KHR_external_semaphore_capabilities)\n  table->vkGetPhysicalDeviceExternalSemaphorePropertiesKHR =\n      (PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR)load(\n          context, \"vkGetPhysicalDeviceExternalSemaphorePropertiesKHR\");\n#endif /* defined(VK_KHR_external_semaphore_capabilities) */\n#if defined(VK_KHR_fragment_shading_rate)\n  table->vkGetPhysicalDeviceFragmentShadingRatesKHR =\n      (PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR)load(\n          context, \"vkGetPhysicalDeviceFragmentShadingRatesKHR\");\n#endif /* defined(VK_KHR_fragment_shading_rate) */\n#if defined(VK_KHR_get_display_properties2)\n  table->vkGetDisplayModeProperties2KHR =\n      (PFN_vkGetDisplayModeProperties2KHR)load(context, \"vkGetDisplayModeProperties2KHR\");\n  table->vkGetDisplayPlaneCapabilities2KHR =\n      (PFN_vkGetDisplayPlaneCapabilities2KHR)load(context, \"vkGetDisplayPlaneCapabilities2KHR\");\n  table->vkGetPhysicalDeviceDisplayPlaneProperties2KHR =\n      (PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR)load(\n          context, \"vkGetPhysicalDeviceDisplayPlaneProperties2KHR\");\n  table->vkGetPhysicalDeviceDisplayProperties2KHR =\n      (PFN_vkGetPhysicalDeviceDisplayProperties2KHR)load(\n          context, \"vkGetPhysicalDeviceDisplayProperties2KHR\");\n#endif /* defined(VK_KHR_get_display_properties2) */\n#if defined(VK_KHR_get_physical_device_properties2)\n  table->vkGetPhysicalDeviceFeatures2KHR =\n      (PFN_vkGetPhysicalDeviceFeatures2KHR)load(context, \"vkGetPhysicalDeviceFeatures2KHR\");\n  table->vkGetPhysicalDeviceFormatProperties2KHR =\n      (PFN_vkGetPhysicalDeviceFormatProperties2KHR)load(context,\n                                                        \"vkGetPhysicalDeviceFormatProperties2KHR\");\n  table->vkGetPhysicalDeviceImageFormatProperties2KHR =\n      (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)load(\n          context, \"vkGetPhysicalDeviceImageFormatProperties2KHR\");\n  table->vkGetPhysicalDeviceMemoryProperties2KHR =\n      (PFN_vkGetPhysicalDeviceMemoryProperties2KHR)load(context,\n                                                        \"vkGetPhysicalDeviceMemoryProperties2KHR\");\n  table->vkGetPhysicalDeviceProperties2KHR =\n      (PFN_vkGetPhysicalDeviceProperties2KHR)load(context, \"vkGetPhysicalDeviceProperties2KHR\");\n  table->vkGetPhysicalDeviceQueueFamilyProperties2KHR =\n      (PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR)load(\n          context, \"vkGetPhysicalDeviceQueueFamilyProperties2KHR\");\n  table->vkGetPhysicalDeviceSparseImageFormatProperties2KHR =\n      (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR)load(\n          context, \"vkGetPhysicalDeviceSparseImageFormatProperties2KHR\");\n#endif /* defined(VK_KHR_get_physical_device_properties2) */\n#if defined(VK_KHR_get_surface_capabilities2)\n  table->vkGetPhysicalDeviceSurfaceCapabilities2KHR =\n      (PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR)load(\n          context, \"vkGetPhysicalDeviceSurfaceCapabilities2KHR\");\n  table->vkGetPhysicalDeviceSurfaceFormats2KHR = (PFN_vkGetPhysicalDeviceSurfaceFormats2KHR)load(\n      context, \"vkGetPhysicalDeviceSurfaceFormats2KHR\");\n#endif /* defined(VK_KHR_get_surface_capabilities2) */\n#if defined(VK_KHR_performance_query)\n  table->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR =\n      (PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR)load(\n          context, \"vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR\");\n  table->vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR =\n      (PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR)load(\n          context, \"vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR\");\n#endif /* defined(VK_KHR_performance_query) */\n#if defined(VK_KHR_surface)\n  table->vkDestroySurfaceKHR = (PFN_vkDestroySurfaceKHR)load(context, \"vkDestroySurfaceKHR\");\n  table->vkGetPhysicalDeviceSurfaceCapabilitiesKHR =\n      (PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR)load(\n          context, \"vkGetPhysicalDeviceSurfaceCapabilitiesKHR\");\n  table->vkGetPhysicalDeviceSurfaceFormatsKHR = (PFN_vkGetPhysicalDeviceSurfaceFormatsKHR)load(\n      context, \"vkGetPhysicalDeviceSurfaceFormatsKHR\");\n  table->vkGetPhysicalDeviceSurfacePresentModesKHR =\n      (PFN_vkGetPhysicalDeviceSurfacePresentModesKHR)load(\n          context, \"vkGetPhysicalDeviceSurfacePresentModesKHR\");\n  table->vkGetPhysicalDeviceSurfaceSupportKHR = (PFN_vkGetPhysicalDeviceSurfaceSupportKHR)load(\n      context, \"vkGetPhysicalDeviceSurfaceSupportKHR\");\n#endif /* defined(VK_KHR_surface) */\n#if defined(VK_KHR_video_queue)\n  table->vkGetPhysicalDeviceVideoCapabilitiesKHR =\n      (PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR)load(context,\n                                                        \"vkGetPhysicalDeviceVideoCapabilitiesKHR\");\n  table->vkGetPhysicalDeviceVideoFormatPropertiesKHR =\n      (PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR)load(\n          context, \"vkGetPhysicalDeviceVideoFormatPropertiesKHR\");\n#endif /* defined(VK_KHR_video_queue) */\n#if defined(VK_KHR_wayland_surface)\n  table->vkCreateWaylandSurfaceKHR =\n      (PFN_vkCreateWaylandSurfaceKHR)load(context, \"vkCreateWaylandSurfaceKHR\");\n  table->vkGetPhysicalDeviceWaylandPresentationSupportKHR =\n      (PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR)load(\n          context, \"vkGetPhysicalDeviceWaylandPresentationSupportKHR\");\n#endif /* defined(VK_KHR_wayland_surface) */\n#if defined(VK_KHR_win32_surface)\n  table->vkCreateWin32SurfaceKHR =\n      (PFN_vkCreateWin32SurfaceKHR)load(context, \"vkCreateWin32SurfaceKHR\");\n  table->vkGetPhysicalDeviceWin32PresentationSupportKHR =\n      (PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR)load(\n          context, \"vkGetPhysicalDeviceWin32PresentationSupportKHR\");\n#endif /* defined(VK_KHR_win32_surface) */\n#if defined(VK_KHR_xcb_surface)\n  table->vkCreateXcbSurfaceKHR = (PFN_vkCreateXcbSurfaceKHR)load(context, \"vkCreateXcbSurfaceKHR\");\n  table->vkGetPhysicalDeviceXcbPresentationSupportKHR =\n      (PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)load(\n          context, \"vkGetPhysicalDeviceXcbPresentationSupportKHR\");\n#endif /* defined(VK_KHR_xcb_surface) */\n#if defined(VK_KHR_xlib_surface)\n  table->vkCreateXlibSurfaceKHR =\n      (PFN_vkCreateXlibSurfaceKHR)load(context, \"vkCreateXlibSurfaceKHR\");\n  table->vkGetPhysicalDeviceXlibPresentationSupportKHR =\n      (PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)load(\n          context, \"vkGetPhysicalDeviceXlibPresentationSupportKHR\");\n#endif /* defined(VK_KHR_xlib_surface) */\n#if defined(VK_MVK_ios_surface)\n  table->vkCreateIOSSurfaceMVK = (PFN_vkCreateIOSSurfaceMVK)load(context, \"vkCreateIOSSurfaceMVK\");\n#endif /* defined(VK_MVK_ios_surface) */\n#if defined(VK_MVK_macos_surface)\n  table->vkCreateMacOSSurfaceMVK =\n      (PFN_vkCreateMacOSSurfaceMVK)load(context, \"vkCreateMacOSSurfaceMVK\");\n#endif /* defined(VK_MVK_macos_surface) */\n#if defined(VK_NN_vi_surface)\n  table->vkCreateViSurfaceNN = (PFN_vkCreateViSurfaceNN)load(context, \"vkCreateViSurfaceNN\");\n#endif /* defined(VK_NN_vi_surface) */\n#if defined(VK_NV_acquire_winrt_display)\n  table->vkAcquireWinrtDisplayNV =\n      (PFN_vkAcquireWinrtDisplayNV)load(context, \"vkAcquireWinrtDisplayNV\");\n  table->vkGetWinrtDisplayNV = (PFN_vkGetWinrtDisplayNV)load(context, \"vkGetWinrtDisplayNV\");\n#endif /* defined(VK_NV_acquire_winrt_display) */\n#if defined(VK_NV_cooperative_matrix)\n  table->vkGetPhysicalDeviceCooperativeMatrixPropertiesNV =\n      (PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV)load(\n          context, \"vkGetPhysicalDeviceCooperativeMatrixPropertiesNV\");\n#endif /* defined(VK_NV_cooperative_matrix) */\n#if defined(VK_NV_coverage_reduction_mode)\n  table->vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV =\n      (PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV)load(\n          context, \"vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV\");\n#endif /* defined(VK_NV_coverage_reduction_mode) */\n#if defined(VK_NV_external_memory_capabilities)\n  table->vkGetPhysicalDeviceExternalImageFormatPropertiesNV =\n      (PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV)load(\n          context, \"vkGetPhysicalDeviceExternalImageFormatPropertiesNV\");\n#endif /* defined(VK_NV_external_memory_capabilities) */\n#if defined(VK_QNX_screen_surface)\n  table->vkCreateScreenSurfaceQNX =\n      (PFN_vkCreateScreenSurfaceQNX)load(context, \"vkCreateScreenSurfaceQNX\");\n  table->vkGetPhysicalDeviceScreenPresentationSupportQNX =\n      (PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX)load(\n          context, \"vkGetPhysicalDeviceScreenPresentationSupportQNX\");\n#endif /* defined(VK_QNX_screen_surface) */\n#if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || \\\n    (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1))\n  table->vkGetPhysicalDevicePresentRectanglesKHR =\n      (PFN_vkGetPhysicalDevicePresentRectanglesKHR)load(context,\n                                                        \"vkGetPhysicalDevicePresentRectanglesKHR\");\n#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) \\\n          && defined(VK_VERSION_1_1)) */\n  /* IGL_GENERATE_LOAD_INSTANCE_TABLE */\n}\n\nvoid loadVulkanDeviceFunctions(struct VulkanFunctionTable* table,\n                               VkDevice context,\n                               PFN_vkGetDeviceProcAddr load) {\n  /* IGL_GENERATE_LOAD_DEVICE_TABLE */\n  // VK_VERSION_1_0\n  table->vkAllocateCommandBuffers =\n      (PFN_vkAllocateCommandBuffers)load(context, \"vkAllocateCommandBuffers\");\n  table->vkAllocateDescriptorSets =\n      (PFN_vkAllocateDescriptorSets)load(context, \"vkAllocateDescriptorSets\");\n  table->vkAllocateMemory = (PFN_vkAllocateMemory)load(context, \"vkAllocateMemory\");\n  table->vkBeginCommandBuffer = (PFN_vkBeginCommandBuffer)load(context, \"vkBeginCommandBuffer\");\n  table->vkBindBufferMemory = (PFN_vkBindBufferMemory)load(context, \"vkBindBufferMemory\");\n  table->vkBindImageMemory = (PFN_vkBindImageMemory)load(context, \"vkBindImageMemory\");\n  table->vkCmdBeginQuery = (PFN_vkCmdBeginQuery)load(context, \"vkCmdBeginQuery\");\n  table->vkCmdBeginRenderPass = (PFN_vkCmdBeginRenderPass)load(context, \"vkCmdBeginRenderPass\");\n  table->vkCmdBindDescriptorSets =\n      (PFN_vkCmdBindDescriptorSets)load(context, \"vkCmdBindDescriptorSets\");\n  table->vkCmdBindIndexBuffer = (PFN_vkCmdBindIndexBuffer)load(context, \"vkCmdBindIndexBuffer\");\n  table->vkCmdBindPipeline = (PFN_vkCmdBindPipeline)load(context, \"vkCmdBindPipeline\");\n  table->vkCmdBindVertexBuffers =\n      (PFN_vkCmdBindVertexBuffers)load(context, \"vkCmdBindVertexBuffers\");\n  table->vkCmdBlitImage = (PFN_vkCmdBlitImage)load(context, \"vkCmdBlitImage\");\n  table->vkCmdClearAttachments = (PFN_vkCmdClearAttachments)load(context, \"vkCmdClearAttachments\");\n  table->vkCmdClearColorImage = (PFN_vkCmdClearColorImage)load(context, \"vkCmdClearColorImage\");\n  table->vkCmdClearDepthStencilImage =\n      (PFN_vkCmdClearDepthStencilImage)load(context, \"vkCmdClearDepthStencilImage\");\n  table->vkCmdCopyBuffer = (PFN_vkCmdCopyBuffer)load(context, \"vkCmdCopyBuffer\");\n  table->vkCmdCopyBufferToImage =\n      (PFN_vkCmdCopyBufferToImage)load(context, \"vkCmdCopyBufferToImage\");\n  table->vkCmdCopyImage = (PFN_vkCmdCopyImage)load(context, \"vkCmdCopyImage\");\n  table->vkCmdCopyImageToBuffer =\n      (PFN_vkCmdCopyImageToBuffer)load(context, \"vkCmdCopyImageToBuffer\");\n  table->vkCmdCopyQueryPoolResults =\n      (PFN_vkCmdCopyQueryPoolResults)load(context, \"vkCmdCopyQueryPoolResults\");\n  table->vkCmdDispatch = (PFN_vkCmdDispatch)load(context, \"vkCmdDispatch\");\n  table->vkCmdDispatchIndirect = (PFN_vkCmdDispatchIndirect)load(context, \"vkCmdDispatchIndirect\");\n  table->vkCmdDraw = (PFN_vkCmdDraw)load(context, \"vkCmdDraw\");\n  table->vkCmdDrawIndexed = (PFN_vkCmdDrawIndexed)load(context, \"vkCmdDrawIndexed\");\n  table->vkCmdDrawIndexedIndirect =\n      (PFN_vkCmdDrawIndexedIndirect)load(context, \"vkCmdDrawIndexedIndirect\");\n  table->vkCmdDrawIndirect = (PFN_vkCmdDrawIndirect)load(context, \"vkCmdDrawIndirect\");\n  table->vkCmdDrawMeshTasksEXT = (PFN_vkCmdDrawMeshTasksEXT)load(context, \"vkCmdDrawMeshTasksEXT\");\n  table->vkCmdEndQuery = (PFN_vkCmdEndQuery)load(context, \"vkCmdEndQuery\");\n  table->vkCmdEndRenderPass = (PFN_vkCmdEndRenderPass)load(context, \"vkCmdEndRenderPass\");\n  table->vkCmdExecuteCommands = (PFN_vkCmdExecuteCommands)load(context, \"vkCmdExecuteCommands\");\n  table->vkCmdFillBuffer = (PFN_vkCmdFillBuffer)load(context, \"vkCmdFillBuffer\");\n  table->vkCmdNextSubpass = (PFN_vkCmdNextSubpass)load(context, \"vkCmdNextSubpass\");\n  table->vkCmdPipelineBarrier = (PFN_vkCmdPipelineBarrier)load(context, \"vkCmdPipelineBarrier\");\n  table->vkCmdPushConstants = (PFN_vkCmdPushConstants)load(context, \"vkCmdPushConstants\");\n  table->vkCmdResetEvent = (PFN_vkCmdResetEvent)load(context, \"vkCmdResetEvent\");\n  table->vkCmdResetQueryPool = (PFN_vkCmdResetQueryPool)load(context, \"vkCmdResetQueryPool\");\n  table->vkCmdResolveImage = (PFN_vkCmdResolveImage)load(context, \"vkCmdResolveImage\");\n  table->vkCmdSetBlendConstants =\n      (PFN_vkCmdSetBlendConstants)load(context, \"vkCmdSetBlendConstants\");\n  table->vkCmdSetDepthBias = (PFN_vkCmdSetDepthBias)load(context, \"vkCmdSetDepthBias\");\n  table->vkCmdSetDepthBounds = (PFN_vkCmdSetDepthBounds)load(context, \"vkCmdSetDepthBounds\");\n  table->vkCmdSetEvent = (PFN_vkCmdSetEvent)load(context, \"vkCmdSetEvent\");\n  table->vkCmdSetLineWidth = (PFN_vkCmdSetLineWidth)load(context, \"vkCmdSetLineWidth\");\n  table->vkCmdSetScissor = (PFN_vkCmdSetScissor)load(context, \"vkCmdSetScissor\");\n  table->vkCmdSetStencilCompareMask =\n      (PFN_vkCmdSetStencilCompareMask)load(context, \"vkCmdSetStencilCompareMask\");\n  table->vkCmdSetStencilReference =\n      (PFN_vkCmdSetStencilReference)load(context, \"vkCmdSetStencilReference\");\n  table->vkCmdSetStencilWriteMask =\n      (PFN_vkCmdSetStencilWriteMask)load(context, \"vkCmdSetStencilWriteMask\");\n  table->vkCmdSetViewport = (PFN_vkCmdSetViewport)load(context, \"vkCmdSetViewport\");\n  table->vkCmdUpdateBuffer = (PFN_vkCmdUpdateBuffer)load(context, \"vkCmdUpdateBuffer\");\n  table->vkCmdWaitEvents = (PFN_vkCmdWaitEvents)load(context, \"vkCmdWaitEvents\");\n  table->vkCmdWriteTimestamp = (PFN_vkCmdWriteTimestamp)load(context, \"vkCmdWriteTimestamp\");\n  table->vkCreateBuffer = (PFN_vkCreateBuffer)load(context, \"vkCreateBuffer\");\n  table->vkCreateBufferView = (PFN_vkCreateBufferView)load(context, \"vkCreateBufferView\");\n  table->vkCreateCommandPool = (PFN_vkCreateCommandPool)load(context, \"vkCreateCommandPool\");\n  table->vkCreateComputePipelines =\n      (PFN_vkCreateComputePipelines)load(context, \"vkCreateComputePipelines\");\n  table->vkCreateDescriptorPool =\n      (PFN_vkCreateDescriptorPool)load(context, \"vkCreateDescriptorPool\");\n  table->vkCreateDescriptorSetLayout =\n      (PFN_vkCreateDescriptorSetLayout)load(context, \"vkCreateDescriptorSetLayout\");\n  table->vkCreateEvent = (PFN_vkCreateEvent)load(context, \"vkCreateEvent\");\n  table->vkCreateFence = (PFN_vkCreateFence)load(context, \"vkCreateFence\");\n  table->vkCreateFramebuffer = (PFN_vkCreateFramebuffer)load(context, \"vkCreateFramebuffer\");\n  table->vkCreateGraphicsPipelines =\n      (PFN_vkCreateGraphicsPipelines)load(context, \"vkCreateGraphicsPipelines\");\n  table->vkCreateImage = (PFN_vkCreateImage)load(context, \"vkCreateImage\");\n  table->vkCreateImageView = (PFN_vkCreateImageView)load(context, \"vkCreateImageView\");\n  table->vkCreatePipelineCache = (PFN_vkCreatePipelineCache)load(context, \"vkCreatePipelineCache\");\n  table->vkCreatePipelineLayout =\n      (PFN_vkCreatePipelineLayout)load(context, \"vkCreatePipelineLayout\");\n  table->vkCreateQueryPool = (PFN_vkCreateQueryPool)load(context, \"vkCreateQueryPool\");\n  table->vkCreateRenderPass = (PFN_vkCreateRenderPass)load(context, \"vkCreateRenderPass\");\n  table->vkCreateSampler = (PFN_vkCreateSampler)load(context, \"vkCreateSampler\");\n  table->vkCreateSemaphore = (PFN_vkCreateSemaphore)load(context, \"vkCreateSemaphore\");\n  table->vkCreateShaderModule = (PFN_vkCreateShaderModule)load(context, \"vkCreateShaderModule\");\n  table->vkDestroyBuffer = (PFN_vkDestroyBuffer)load(context, \"vkDestroyBuffer\");\n  table->vkDestroyBufferView = (PFN_vkDestroyBufferView)load(context, \"vkDestroyBufferView\");\n  table->vkDestroyCommandPool = (PFN_vkDestroyCommandPool)load(context, \"vkDestroyCommandPool\");\n  table->vkDestroyDescriptorPool =\n      (PFN_vkDestroyDescriptorPool)load(context, \"vkDestroyDescriptorPool\");\n  table->vkDestroyDescriptorSetLayout =\n      (PFN_vkDestroyDescriptorSetLayout)load(context, \"vkDestroyDescriptorSetLayout\");\n  table->vkDestroyDevice = (PFN_vkDestroyDevice)load(context, \"vkDestroyDevice\");\n  table->vkDestroyEvent = (PFN_vkDestroyEvent)load(context, \"vkDestroyEvent\");\n  table->vkDestroyFence = (PFN_vkDestroyFence)load(context, \"vkDestroyFence\");\n  table->vkDestroyFramebuffer = (PFN_vkDestroyFramebuffer)load(context, \"vkDestroyFramebuffer\");\n  table->vkDestroyImage = (PFN_vkDestroyImage)load(context, \"vkDestroyImage\");\n  table->vkDestroyImageView = (PFN_vkDestroyImageView)load(context, \"vkDestroyImageView\");\n  table->vkDestroyPipeline = (PFN_vkDestroyPipeline)load(context, \"vkDestroyPipeline\");\n  table->vkDestroyPipelineCache =\n      (PFN_vkDestroyPipelineCache)load(context, \"vkDestroyPipelineCache\");\n  table->vkDestroyPipelineLayout =\n      (PFN_vkDestroyPipelineLayout)load(context, \"vkDestroyPipelineLayout\");\n  table->vkDestroyQueryPool = (PFN_vkDestroyQueryPool)load(context, \"vkDestroyQueryPool\");\n  table->vkDestroyRenderPass = (PFN_vkDestroyRenderPass)load(context, \"vkDestroyRenderPass\");\n  table->vkDestroySampler = (PFN_vkDestroySampler)load(context, \"vkDestroySampler\");\n  table->vkDestroySemaphore = (PFN_vkDestroySemaphore)load(context, \"vkDestroySemaphore\");\n  table->vkDestroyShaderModule = (PFN_vkDestroyShaderModule)load(context, \"vkDestroyShaderModule\");\n  table->vkDeviceWaitIdle = (PFN_vkDeviceWaitIdle)load(context, \"vkDeviceWaitIdle\");\n  table->vkEndCommandBuffer = (PFN_vkEndCommandBuffer)load(context, \"vkEndCommandBuffer\");\n  table->vkFlushMappedMemoryRanges =\n      (PFN_vkFlushMappedMemoryRanges)load(context, \"vkFlushMappedMemoryRanges\");\n  table->vkFreeCommandBuffers = (PFN_vkFreeCommandBuffers)load(context, \"vkFreeCommandBuffers\");\n  table->vkFreeDescriptorSets = (PFN_vkFreeDescriptorSets)load(context, \"vkFreeDescriptorSets\");\n  table->vkFreeMemory = (PFN_vkFreeMemory)load(context, \"vkFreeMemory\");\n  table->vkGetBufferMemoryRequirements =\n      (PFN_vkGetBufferMemoryRequirements)load(context, \"vkGetBufferMemoryRequirements\");\n  table->vkGetDeviceMemoryCommitment =\n      (PFN_vkGetDeviceMemoryCommitment)load(context, \"vkGetDeviceMemoryCommitment\");\n  table->vkGetDeviceQueue = (PFN_vkGetDeviceQueue)load(context, \"vkGetDeviceQueue\");\n  table->vkGetEventStatus = (PFN_vkGetEventStatus)load(context, \"vkGetEventStatus\");\n  table->vkGetFenceStatus = (PFN_vkGetFenceStatus)load(context, \"vkGetFenceStatus\");\n  table->vkGetImageMemoryRequirements =\n      (PFN_vkGetImageMemoryRequirements)load(context, \"vkGetImageMemoryRequirements\");\n  table->vkGetImageSparseMemoryRequirements =\n      (PFN_vkGetImageSparseMemoryRequirements)load(context, \"vkGetImageSparseMemoryRequirements\");\n  table->vkGetImageSubresourceLayout =\n      (PFN_vkGetImageSubresourceLayout)load(context, \"vkGetImageSubresourceLayout\");\n  table->vkGetPipelineCacheData =\n      (PFN_vkGetPipelineCacheData)load(context, \"vkGetPipelineCacheData\");\n  table->vkGetQueryPoolResults = (PFN_vkGetQueryPoolResults)load(context, \"vkGetQueryPoolResults\");\n  table->vkGetRenderAreaGranularity =\n      (PFN_vkGetRenderAreaGranularity)load(context, \"vkGetRenderAreaGranularity\");\n  table->vkInvalidateMappedMemoryRanges =\n      (PFN_vkInvalidateMappedMemoryRanges)load(context, \"vkInvalidateMappedMemoryRanges\");\n  table->vkMapMemory = (PFN_vkMapMemory)load(context, \"vkMapMemory\");\n  table->vkMergePipelineCaches = (PFN_vkMergePipelineCaches)load(context, \"vkMergePipelineCaches\");\n  table->vkQueueBindSparse = (PFN_vkQueueBindSparse)load(context, \"vkQueueBindSparse\");\n  table->vkQueueSubmit = (PFN_vkQueueSubmit)load(context, \"vkQueueSubmit\");\n  table->vkQueueWaitIdle = (PFN_vkQueueWaitIdle)load(context, \"vkQueueWaitIdle\");\n  table->vkResetCommandBuffer = (PFN_vkResetCommandBuffer)load(context, \"vkResetCommandBuffer\");\n  table->vkResetCommandPool = (PFN_vkResetCommandPool)load(context, \"vkResetCommandPool\");\n  table->vkResetDescriptorPool = (PFN_vkResetDescriptorPool)load(context, \"vkResetDescriptorPool\");\n  table->vkResetEvent = (PFN_vkResetEvent)load(context, \"vkResetEvent\");\n  table->vkResetFences = (PFN_vkResetFences)load(context, \"vkResetFences\");\n  table->vkSetEvent = (PFN_vkSetEvent)load(context, \"vkSetEvent\");\n  table->vkUnmapMemory = (PFN_vkUnmapMemory)load(context, \"vkUnmapMemory\");\n  table->vkUpdateDescriptorSets =\n      (PFN_vkUpdateDescriptorSets)load(context, \"vkUpdateDescriptorSets\");\n  table->vkWaitForFences = (PFN_vkWaitForFences)load(context, \"vkWaitForFences\");\n  // VK_VERSION_1_1\n  table->vkBindBufferMemory2 = (PFN_vkBindBufferMemory2)load(context, \"vkBindBufferMemory2\");\n  table->vkBindImageMemory2 = (PFN_vkBindImageMemory2)load(context, \"vkBindImageMemory2\");\n  table->vkCmdDispatchBase = (PFN_vkCmdDispatchBase)load(context, \"vkCmdDispatchBase\");\n  table->vkCmdSetDeviceMask = (PFN_vkCmdSetDeviceMask)load(context, \"vkCmdSetDeviceMask\");\n  table->vkCreateDescriptorUpdateTemplate =\n      (PFN_vkCreateDescriptorUpdateTemplate)load(context, \"vkCreateDescriptorUpdateTemplate\");\n  table->vkCreateSamplerYcbcrConversion =\n      (PFN_vkCreateSamplerYcbcrConversion)load(context, \"vkCreateSamplerYcbcrConversion\");\n  table->vkDestroyDescriptorUpdateTemplate =\n      (PFN_vkDestroyDescriptorUpdateTemplate)load(context, \"vkDestroyDescriptorUpdateTemplate\");\n  table->vkDestroySamplerYcbcrConversion =\n      (PFN_vkDestroySamplerYcbcrConversion)load(context, \"vkDestroySamplerYcbcrConversion\");\n  table->vkGetBufferMemoryRequirements2 =\n      (PFN_vkGetBufferMemoryRequirements2)load(context, \"vkGetBufferMemoryRequirements2\");\n  table->vkGetDescriptorSetLayoutSupport =\n      (PFN_vkGetDescriptorSetLayoutSupport)load(context, \"vkGetDescriptorSetLayoutSupport\");\n  table->vkGetDeviceGroupPeerMemoryFeatures =\n      (PFN_vkGetDeviceGroupPeerMemoryFeatures)load(context, \"vkGetDeviceGroupPeerMemoryFeatures\");\n  table->vkGetDeviceQueue2 = (PFN_vkGetDeviceQueue2)load(context, \"vkGetDeviceQueue2\");\n  table->vkGetImageMemoryRequirements2 =\n      (PFN_vkGetImageMemoryRequirements2)load(context, \"vkGetImageMemoryRequirements2\");\n  table->vkGetImageSparseMemoryRequirements2 =\n      (PFN_vkGetImageSparseMemoryRequirements2)load(context, \"vkGetImageSparseMemoryRequirements2\");\n  table->vkTrimCommandPool = (PFN_vkTrimCommandPool)load(context, \"vkTrimCommandPool\");\n  table->vkUpdateDescriptorSetWithTemplate =\n      (PFN_vkUpdateDescriptorSetWithTemplate)load(context, \"vkUpdateDescriptorSetWithTemplate\");\n  // VK_VERSION_1_2\n  table->vkCmdBeginRenderPass2 = (PFN_vkCmdBeginRenderPass2)load(context, \"vkCmdBeginRenderPass2\");\n  table->vkCmdDrawIndexedIndirectCount =\n      (PFN_vkCmdDrawIndexedIndirectCount)load(context, \"vkCmdDrawIndexedIndirectCount\");\n  table->vkCmdDrawIndirectCount =\n      (PFN_vkCmdDrawIndirectCount)load(context, \"vkCmdDrawIndirectCount\");\n  table->vkCmdEndRenderPass2 = (PFN_vkCmdEndRenderPass2)load(context, \"vkCmdEndRenderPass2\");\n  table->vkCmdNextSubpass2 = (PFN_vkCmdNextSubpass2)load(context, \"vkCmdNextSubpass2\");\n  table->vkCreateRenderPass2 = (PFN_vkCreateRenderPass2)load(context, \"vkCreateRenderPass2\");\n  table->vkGetBufferDeviceAddress =\n      (PFN_vkGetBufferDeviceAddress)load(context, \"vkGetBufferDeviceAddress\");\n  table->vkGetBufferOpaqueCaptureAddress =\n      (PFN_vkGetBufferOpaqueCaptureAddress)load(context, \"vkGetBufferOpaqueCaptureAddress\");\n  table->vkGetDeviceMemoryOpaqueCaptureAddress = (PFN_vkGetDeviceMemoryOpaqueCaptureAddress)load(\n      context, \"vkGetDeviceMemoryOpaqueCaptureAddress\");\n  table->vkGetSemaphoreCounterValue =\n      (PFN_vkGetSemaphoreCounterValue)load(context, \"vkGetSemaphoreCounterValue\");\n  table->vkResetQueryPool = (PFN_vkResetQueryPool)load(context, \"vkResetQueryPool\");\n  table->vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, \"vkSignalSemaphore\");\n  table->vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, \"vkWaitSemaphores\");\n#if defined(VK_VERSION_1_3)\n  table->vkCmdBeginRendering = (PFN_vkCmdBeginRendering)load(context, \"vkCmdBeginRendering\");\n  table->vkCmdBindVertexBuffers2 =\n      (PFN_vkCmdBindVertexBuffers2)load(context, \"vkCmdBindVertexBuffers2\");\n  table->vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)load(context, \"vkCmdBlitImage2\");\n  table->vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)load(context, \"vkCmdCopyBuffer2\");\n  table->vkCmdCopyBufferToImage2 =\n      (PFN_vkCmdCopyBufferToImage2)load(context, \"vkCmdCopyBufferToImage2\");\n  table->vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)load(context, \"vkCmdCopyImage2\");\n  table->vkCmdCopyImageToBuffer2 =\n      (PFN_vkCmdCopyImageToBuffer2)load(context, \"vkCmdCopyImageToBuffer2\");\n  table->vkCmdEndRendering = (PFN_vkCmdEndRendering)load(context, \"vkCmdEndRendering\");\n  table->vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)load(context, \"vkCmdPipelineBarrier2\");\n  table->vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)load(context, \"vkCmdResetEvent2\");\n  table->vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)load(context, \"vkCmdResolveImage2\");\n  table->vkCmdSetCullMode = (PFN_vkCmdSetCullMode)load(context, \"vkCmdSetCullMode\");\n  table->vkCmdSetDepthBiasEnable =\n      (PFN_vkCmdSetDepthBiasEnable)load(context, \"vkCmdSetDepthBiasEnable\");\n  table->vkCmdSetDepthBoundsTestEnable =\n      (PFN_vkCmdSetDepthBoundsTestEnable)load(context, \"vkCmdSetDepthBoundsTestEnable\");\n  table->vkCmdSetDepthCompareOp =\n      (PFN_vkCmdSetDepthCompareOp)load(context, \"vkCmdSetDepthCompareOp\");\n  table->vkCmdSetDepthTestEnable =\n      (PFN_vkCmdSetDepthTestEnable)load(context, \"vkCmdSetDepthTestEnable\");\n  table->vkCmdSetDepthWriteEnable =\n      (PFN_vkCmdSetDepthWriteEnable)load(context, \"vkCmdSetDepthWriteEnable\");\n  table->vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)load(context, \"vkCmdSetEvent2\");\n  table->vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)load(context, \"vkCmdSetFrontFace\");\n  table->vkCmdSetPrimitiveRestartEnable =\n      (PFN_vkCmdSetPrimitiveRestartEnable)load(context, \"vkCmdSetPrimitiveRestartEnable\");\n  table->vkCmdSetPrimitiveTopology =\n      (PFN_vkCmdSetPrimitiveTopology)load(context, \"vkCmdSetPrimitiveTopology\");\n  table->vkCmdSetRasterizerDiscardEnable =\n      (PFN_vkCmdSetRasterizerDiscardEnable)load(context, \"vkCmdSetRasterizerDiscardEnable\");\n  table->vkCmdSetScissorWithCount =\n      (PFN_vkCmdSetScissorWithCount)load(context, \"vkCmdSetScissorWithCount\");\n  table->vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)load(context, \"vkCmdSetStencilOp\");\n  table->vkCmdSetStencilTestEnable =\n      (PFN_vkCmdSetStencilTestEnable)load(context, \"vkCmdSetStencilTestEnable\");\n  table->vkCmdSetViewportWithCount =\n      (PFN_vkCmdSetViewportWithCount)load(context, \"vkCmdSetViewportWithCount\");\n  table->vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)load(context, \"vkCmdWaitEvents2\");\n  table->vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)load(context, \"vkCmdWriteTimestamp2\");\n  table->vkCreatePrivateDataSlot =\n      (PFN_vkCreatePrivateDataSlot)load(context, \"vkCreatePrivateDataSlot\");\n  table->vkDestroyPrivateDataSlot =\n      (PFN_vkDestroyPrivateDataSlot)load(context, \"vkDestroyPrivateDataSlot\");\n  table->vkGetDeviceBufferMemoryRequirements =\n      (PFN_vkGetDeviceBufferMemoryRequirements)load(context, \"vkGetDeviceBufferMemoryRequirements\");\n  table->vkGetDeviceImageMemoryRequirements =\n      (PFN_vkGetDeviceImageMemoryRequirements)load(context, \"vkGetDeviceImageMemoryRequirements\");\n  table->vkGetDeviceImageSparseMemoryRequirements =\n      (PFN_vkGetDeviceImageSparseMemoryRequirements)load(\n          context, \"vkGetDeviceImageSparseMemoryRequirements\");\n  table->vkGetPrivateData = (PFN_vkGetPrivateData)load(context, \"vkGetPrivateData\");\n  table->vkQueueSubmit2 = (PFN_vkQueueSubmit2)load(context, \"vkQueueSubmit2\");\n  table->vkSetPrivateData = (PFN_vkSetPrivateData)load(context, \"vkSetPrivateData\");\n#endif /* defined(VK_VERSION_1_3) */\n#if defined(VK_AMD_buffer_marker)\n  table->vkCmdWriteBufferMarkerAMD =\n      (PFN_vkCmdWriteBufferMarkerAMD)load(context, \"vkCmdWriteBufferMarkerAMD\");\n#endif /* defined(VK_AMD_buffer_marker) */\n#if defined(VK_AMD_display_native_hdr)\n  table->vkSetLocalDimmingAMD = (PFN_vkSetLocalDimmingAMD)load(context, \"vkSetLocalDimmingAMD\");\n#endif /* defined(VK_AMD_display_native_hdr) */\n#if defined(VK_AMD_draw_indirect_count)\n  table->vkCmdDrawIndexedIndirectCountAMD =\n      (PFN_vkCmdDrawIndexedIndirectCountAMD)load(context, \"vkCmdDrawIndexedIndirectCountAMD\");\n  table->vkCmdDrawIndirectCountAMD =\n      (PFN_vkCmdDrawIndirectCountAMD)load(context, \"vkCmdDrawIndirectCountAMD\");\n#endif /* defined(VK_AMD_draw_indirect_count) */\n#if defined(VK_AMD_shader_info)\n  table->vkGetShaderInfoAMD = (PFN_vkGetShaderInfoAMD)load(context, \"vkGetShaderInfoAMD\");\n#endif /* defined(VK_AMD_shader_info) */\n#if defined(VK_ANDROID_external_memory_android_hardware_buffer)\n  table->vkGetAndroidHardwareBufferPropertiesANDROID =\n      (PFN_vkGetAndroidHardwareBufferPropertiesANDROID)load(\n          context, \"vkGetAndroidHardwareBufferPropertiesANDROID\");\n  table->vkGetMemoryAndroidHardwareBufferANDROID =\n      (PFN_vkGetMemoryAndroidHardwareBufferANDROID)load(context,\n                                                        \"vkGetMemoryAndroidHardwareBufferANDROID\");\n#endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */\n#if defined(VK_EXT_buffer_device_address)\n  table->vkGetBufferDeviceAddressEXT =\n      (PFN_vkGetBufferDeviceAddressEXT)load(context, \"vkGetBufferDeviceAddressEXT\");\n#endif /* defined(VK_EXT_buffer_device_address) */\n#if defined(VK_EXT_calibrated_timestamps)\n  table->vkGetCalibratedTimestampsEXT =\n      (PFN_vkGetCalibratedTimestampsEXT)load(context, \"vkGetCalibratedTimestampsEXT\");\n#endif /* defined(VK_EXT_calibrated_timestamps) */\n#if defined(VK_EXT_color_write_enable)\n  table->vkCmdSetColorWriteEnableEXT =\n      (PFN_vkCmdSetColorWriteEnableEXT)load(context, \"vkCmdSetColorWriteEnableEXT\");\n#endif /* defined(VK_EXT_color_write_enable) */\n#if defined(VK_EXT_conditional_rendering)\n  table->vkCmdBeginConditionalRenderingEXT =\n      (PFN_vkCmdBeginConditionalRenderingEXT)load(context, \"vkCmdBeginConditionalRenderingEXT\");\n  table->vkCmdEndConditionalRenderingEXT =\n      (PFN_vkCmdEndConditionalRenderingEXT)load(context, \"vkCmdEndConditionalRenderingEXT\");\n#endif /* defined(VK_EXT_conditional_rendering) */\n#if defined(VK_EXT_debug_marker)\n  table->vkCmdDebugMarkerBeginEXT =\n      (PFN_vkCmdDebugMarkerBeginEXT)load(context, \"vkCmdDebugMarkerBeginEXT\");\n  table->vkCmdDebugMarkerEndEXT =\n      (PFN_vkCmdDebugMarkerEndEXT)load(context, \"vkCmdDebugMarkerEndEXT\");\n  table->vkCmdDebugMarkerInsertEXT =\n      (PFN_vkCmdDebugMarkerInsertEXT)load(context, \"vkCmdDebugMarkerInsertEXT\");\n  table->vkDebugMarkerSetObjectNameEXT =\n      (PFN_vkDebugMarkerSetObjectNameEXT)load(context, \"vkDebugMarkerSetObjectNameEXT\");\n  table->vkDebugMarkerSetObjectTagEXT =\n      (PFN_vkDebugMarkerSetObjectTagEXT)load(context, \"vkDebugMarkerSetObjectTagEXT\");\n#endif /* defined(VK_EXT_debug_marker) */\n#if defined(VK_EXT_discard_rectangles)\n  table->vkCmdSetDiscardRectangleEXT =\n      (PFN_vkCmdSetDiscardRectangleEXT)load(context, \"vkCmdSetDiscardRectangleEXT\");\n#endif /* defined(VK_EXT_discard_rectangles) */\n#if defined(VK_EXT_display_control)\n  table->vkDisplayPowerControlEXT =\n      (PFN_vkDisplayPowerControlEXT)load(context, \"vkDisplayPowerControlEXT\");\n  table->vkGetSwapchainCounterEXT =\n      (PFN_vkGetSwapchainCounterEXT)load(context, \"vkGetSwapchainCounterEXT\");\n  table->vkRegisterDeviceEventEXT =\n      (PFN_vkRegisterDeviceEventEXT)load(context, \"vkRegisterDeviceEventEXT\");\n  table->vkRegisterDisplayEventEXT =\n      (PFN_vkRegisterDisplayEventEXT)load(context, \"vkRegisterDisplayEventEXT\");\n#endif /* defined(VK_EXT_display_control) */\n#if defined(VK_EXT_extended_dynamic_state)\n  table->vkCmdBindVertexBuffers2EXT =\n      (PFN_vkCmdBindVertexBuffers2EXT)load(context, \"vkCmdBindVertexBuffers2EXT\");\n  table->vkCmdSetCullModeEXT = (PFN_vkCmdSetCullModeEXT)load(context, \"vkCmdSetCullModeEXT\");\n  table->vkCmdSetDepthBoundsTestEnableEXT =\n      (PFN_vkCmdSetDepthBoundsTestEnableEXT)load(context, \"vkCmdSetDepthBoundsTestEnableEXT\");\n  table->vkCmdSetDepthCompareOpEXT =\n      (PFN_vkCmdSetDepthCompareOpEXT)load(context, \"vkCmdSetDepthCompareOpEXT\");\n  table->vkCmdSetDepthTestEnableEXT =\n      (PFN_vkCmdSetDepthTestEnableEXT)load(context, \"vkCmdSetDepthTestEnableEXT\");\n  table->vkCmdSetDepthWriteEnableEXT =\n      (PFN_vkCmdSetDepthWriteEnableEXT)load(context, \"vkCmdSetDepthWriteEnableEXT\");\n  table->vkCmdSetFrontFaceEXT = (PFN_vkCmdSetFrontFaceEXT)load(context, \"vkCmdSetFrontFaceEXT\");\n  table->vkCmdSetPrimitiveTopologyEXT =\n      (PFN_vkCmdSetPrimitiveTopologyEXT)load(context, \"vkCmdSetPrimitiveTopologyEXT\");\n  table->vkCmdSetScissorWithCountEXT =\n      (PFN_vkCmdSetScissorWithCountEXT)load(context, \"vkCmdSetScissorWithCountEXT\");\n  table->vkCmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT)load(context, \"vkCmdSetStencilOpEXT\");\n  table->vkCmdSetStencilTestEnableEXT =\n      (PFN_vkCmdSetStencilTestEnableEXT)load(context, \"vkCmdSetStencilTestEnableEXT\");\n  table->vkCmdSetViewportWithCountEXT =\n      (PFN_vkCmdSetViewportWithCountEXT)load(context, \"vkCmdSetViewportWithCountEXT\");\n#endif /* defined(VK_EXT_extended_dynamic_state) */\n#if defined(VK_EXT_extended_dynamic_state2)\n  table->vkCmdSetDepthBiasEnableEXT =\n      (PFN_vkCmdSetDepthBiasEnableEXT)load(context, \"vkCmdSetDepthBiasEnableEXT\");\n  table->vkCmdSetLogicOpEXT = (PFN_vkCmdSetLogicOpEXT)load(context, \"vkCmdSetLogicOpEXT\");\n  table->vkCmdSetPatchControlPointsEXT =\n      (PFN_vkCmdSetPatchControlPointsEXT)load(context, \"vkCmdSetPatchControlPointsEXT\");\n  table->vkCmdSetPrimitiveRestartEnableEXT =\n      (PFN_vkCmdSetPrimitiveRestartEnableEXT)load(context, \"vkCmdSetPrimitiveRestartEnableEXT\");\n  table->vkCmdSetRasterizerDiscardEnableEXT =\n      (PFN_vkCmdSetRasterizerDiscardEnableEXT)load(context, \"vkCmdSetRasterizerDiscardEnableEXT\");\n#endif /* defined(VK_EXT_extended_dynamic_state2) */\n#if defined(VK_EXT_external_memory_host)\n  table->vkGetMemoryHostPointerPropertiesEXT =\n      (PFN_vkGetMemoryHostPointerPropertiesEXT)load(context, \"vkGetMemoryHostPointerPropertiesEXT\");\n#endif /* defined(VK_EXT_external_memory_host) */\n#if defined(VK_EXT_full_screen_exclusive)\n  table->vkAcquireFullScreenExclusiveModeEXT =\n      (PFN_vkAcquireFullScreenExclusiveModeEXT)load(context, \"vkAcquireFullScreenExclusiveModeEXT\");\n  table->vkReleaseFullScreenExclusiveModeEXT =\n      (PFN_vkReleaseFullScreenExclusiveModeEXT)load(context, \"vkReleaseFullScreenExclusiveModeEXT\");\n#endif /* defined(VK_EXT_full_screen_exclusive) */\n#if defined(VK_EXT_hdr_metadata)\n  table->vkSetHdrMetadataEXT = (PFN_vkSetHdrMetadataEXT)load(context, \"vkSetHdrMetadataEXT\");\n#endif /* defined(VK_EXT_hdr_metadata) */\n#if defined(VK_EXT_host_query_reset)\n  table->vkResetQueryPoolEXT = (PFN_vkResetQueryPoolEXT)load(context, \"vkResetQueryPoolEXT\");\n#endif /* defined(VK_EXT_host_query_reset) */\n#if defined(VK_EXT_image_drm_format_modifier)\n  table->vkGetImageDrmFormatModifierPropertiesEXT =\n      (PFN_vkGetImageDrmFormatModifierPropertiesEXT)load(\n          context, \"vkGetImageDrmFormatModifierPropertiesEXT\");\n#endif /* defined(VK_EXT_image_drm_format_modifier) */\n#if defined(VK_EXT_line_rasterization)\n  table->vkCmdSetLineStippleEXT =\n      (PFN_vkCmdSetLineStippleEXT)load(context, \"vkCmdSetLineStippleEXT\");\n#endif /* defined(VK_EXT_line_rasterization) */\n#if defined(VK_EXT_multi_draw)\n  table->vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)load(context, \"vkCmdDrawMultiEXT\");\n  table->vkCmdDrawMultiIndexedEXT =\n      (PFN_vkCmdDrawMultiIndexedEXT)load(context, \"vkCmdDrawMultiIndexedEXT\");\n#endif /* defined(VK_EXT_multi_draw) */\n#if defined(VK_EXT_pageable_device_local_memory)\n  table->vkSetDeviceMemoryPriorityEXT =\n      (PFN_vkSetDeviceMemoryPriorityEXT)load(context, \"vkSetDeviceMemoryPriorityEXT\");\n#endif /* defined(VK_EXT_pageable_device_local_memory) */\n#if defined(VK_EXT_private_data)\n  table->vkCreatePrivateDataSlotEXT =\n      (PFN_vkCreatePrivateDataSlotEXT)load(context, \"vkCreatePrivateDataSlotEXT\");\n  table->vkDestroyPrivateDataSlotEXT =\n      (PFN_vkDestroyPrivateDataSlotEXT)load(context, \"vkDestroyPrivateDataSlotEXT\");\n  table->vkGetPrivateDataEXT = (PFN_vkGetPrivateDataEXT)load(context, \"vkGetPrivateDataEXT\");\n  table->vkSetPrivateDataEXT = (PFN_vkSetPrivateDataEXT)load(context, \"vkSetPrivateDataEXT\");\n#endif /* defined(VK_EXT_private_data) */\n#if defined(VK_EXT_sample_locations)\n  table->vkCmdSetSampleLocationsEXT =\n      (PFN_vkCmdSetSampleLocationsEXT)load(context, \"vkCmdSetSampleLocationsEXT\");\n#endif /* defined(VK_EXT_sample_locations) */\n#if defined(VK_EXT_transform_feedback)\n  table->vkCmdBeginQueryIndexedEXT =\n      (PFN_vkCmdBeginQueryIndexedEXT)load(context, \"vkCmdBeginQueryIndexedEXT\");\n  table->vkCmdBeginTransformFeedbackEXT =\n      (PFN_vkCmdBeginTransformFeedbackEXT)load(context, \"vkCmdBeginTransformFeedbackEXT\");\n  table->vkCmdBindTransformFeedbackBuffersEXT = (PFN_vkCmdBindTransformFeedbackBuffersEXT)load(\n      context, \"vkCmdBindTransformFeedbackBuffersEXT\");\n  table->vkCmdDrawIndirectByteCountEXT =\n      (PFN_vkCmdDrawIndirectByteCountEXT)load(context, \"vkCmdDrawIndirectByteCountEXT\");\n  table->vkCmdEndQueryIndexedEXT =\n      (PFN_vkCmdEndQueryIndexedEXT)load(context, \"vkCmdEndQueryIndexedEXT\");\n  table->vkCmdEndTransformFeedbackEXT =\n      (PFN_vkCmdEndTransformFeedbackEXT)load(context, \"vkCmdEndTransformFeedbackEXT\");\n#endif /* defined(VK_EXT_transform_feedback) */\n#if defined(VK_EXT_validation_cache)\n  table->vkCreateValidationCacheEXT =\n      (PFN_vkCreateValidationCacheEXT)load(context, \"vkCreateValidationCacheEXT\");\n  table->vkDestroyValidationCacheEXT =\n      (PFN_vkDestroyValidationCacheEXT)load(context, \"vkDestroyValidationCacheEXT\");\n  table->vkGetValidationCacheDataEXT =\n      (PFN_vkGetValidationCacheDataEXT)load(context, \"vkGetValidationCacheDataEXT\");\n  table->vkMergeValidationCachesEXT =\n      (PFN_vkMergeValidationCachesEXT)load(context, \"vkMergeValidationCachesEXT\");\n#endif /* defined(VK_EXT_validation_cache) */\n#if defined(VK_EXT_vertex_input_dynamic_state)\n  table->vkCmdSetVertexInputEXT =\n      (PFN_vkCmdSetVertexInputEXT)load(context, \"vkCmdSetVertexInputEXT\");\n#endif /* defined(VK_EXT_vertex_input_dynamic_state) */\n#if defined(VK_FUCHSIA_buffer_collection)\n  table->vkCreateBufferCollectionFUCHSIA =\n      (PFN_vkCreateBufferCollectionFUCHSIA)load(context, \"vkCreateBufferCollectionFUCHSIA\");\n  table->vkDestroyBufferCollectionFUCHSIA =\n      (PFN_vkDestroyBufferCollectionFUCHSIA)load(context, \"vkDestroyBufferCollectionFUCHSIA\");\n  table->vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)load(\n      context, \"vkGetBufferCollectionPropertiesFUCHSIA\");\n  table->vkSetBufferCollectionBufferConstraintsFUCHSIA =\n      (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)load(\n          context, \"vkSetBufferCollectionBufferConstraintsFUCHSIA\");\n  table->vkSetBufferCollectionImageConstraintsFUCHSIA =\n      (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)load(\n          context, \"vkSetBufferCollectionImageConstraintsFUCHSIA\");\n#endif /* defined(VK_FUCHSIA_buffer_collection) */\n#if defined(VK_FUCHSIA_external_memory)\n  table->vkGetMemoryZirconHandleFUCHSIA =\n      (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, \"vkGetMemoryZirconHandleFUCHSIA\");\n  table->vkGetMemoryZirconHandlePropertiesFUCHSIA =\n      (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(\n          context, \"vkGetMemoryZirconHandlePropertiesFUCHSIA\");\n#endif /* defined(VK_FUCHSIA_external_memory) */\n#if defined(VK_FUCHSIA_external_semaphore)\n  table->vkGetSemaphoreZirconHandleFUCHSIA =\n      (PFN_vkGetSemaphoreZirconHandleFUCHSIA)load(context, \"vkGetSemaphoreZirconHandleFUCHSIA\");\n  table->vkImportSemaphoreZirconHandleFUCHSIA = (PFN_vkImportSemaphoreZirconHandleFUCHSIA)load(\n      context, \"vkImportSemaphoreZirconHandleFUCHSIA\");\n#endif /* defined(VK_FUCHSIA_external_semaphore) */\n#if defined(VK_GOOGLE_display_timing)\n  table->vkGetPastPresentationTimingGOOGLE =\n      (PFN_vkGetPastPresentationTimingGOOGLE)load(context, \"vkGetPastPresentationTimingGOOGLE\");\n  table->vkGetRefreshCycleDurationGOOGLE =\n      (PFN_vkGetRefreshCycleDurationGOOGLE)load(context, \"vkGetRefreshCycleDurationGOOGLE\");\n#endif /* defined(VK_GOOGLE_display_timing) */\n#if defined(VK_HUAWEI_invocation_mask)\n  table->vkCmdBindInvocationMaskHUAWEI =\n      (PFN_vkCmdBindInvocationMaskHUAWEI)load(context, \"vkCmdBindInvocationMaskHUAWEI\");\n#endif /* defined(VK_HUAWEI_invocation_mask) */\n#if defined(VK_HUAWEI_subpass_shading)\n  table->vkCmdSubpassShadingHUAWEI =\n      (PFN_vkCmdSubpassShadingHUAWEI)load(context, \"vkCmdSubpassShadingHUAWEI\");\n  table->vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI =\n      (PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI)load(\n          context, \"vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI\");\n#endif /* defined(VK_HUAWEI_subpass_shading) */\n#if defined(VK_INTEL_performance_query)\n  table->vkAcquirePerformanceConfigurationINTEL = (PFN_vkAcquirePerformanceConfigurationINTEL)load(\n      context, \"vkAcquirePerformanceConfigurationINTEL\");\n  table->vkCmdSetPerformanceMarkerINTEL =\n      (PFN_vkCmdSetPerformanceMarkerINTEL)load(context, \"vkCmdSetPerformanceMarkerINTEL\");\n  table->vkCmdSetPerformanceOverrideINTEL =\n      (PFN_vkCmdSetPerformanceOverrideINTEL)load(context, \"vkCmdSetPerformanceOverrideINTEL\");\n  table->vkCmdSetPerformanceStreamMarkerINTEL = (PFN_vkCmdSetPerformanceStreamMarkerINTEL)load(\n      context, \"vkCmdSetPerformanceStreamMarkerINTEL\");\n  table->vkGetPerformanceParameterINTEL =\n      (PFN_vkGetPerformanceParameterINTEL)load(context, \"vkGetPerformanceParameterINTEL\");\n  table->vkInitializePerformanceApiINTEL =\n      (PFN_vkInitializePerformanceApiINTEL)load(context, \"vkInitializePerformanceApiINTEL\");\n  table->vkQueueSetPerformanceConfigurationINTEL =\n      (PFN_vkQueueSetPerformanceConfigurationINTEL)load(context,\n                                                        \"vkQueueSetPerformanceConfigurationINTEL\");\n  table->vkReleasePerformanceConfigurationINTEL = (PFN_vkReleasePerformanceConfigurationINTEL)load(\n      context, \"vkReleasePerformanceConfigurationINTEL\");\n  table->vkUninitializePerformanceApiINTEL =\n      (PFN_vkUninitializePerformanceApiINTEL)load(context, \"vkUninitializePerformanceApiINTEL\");\n#endif /* defined(VK_INTEL_performance_query) */\n#if defined(VK_KHR_acceleration_structure)\n  table->vkBuildAccelerationStructuresKHR =\n      (PFN_vkBuildAccelerationStructuresKHR)load(context, \"vkBuildAccelerationStructuresKHR\");\n  table->vkCmdBuildAccelerationStructuresIndirectKHR =\n      (PFN_vkCmdBuildAccelerationStructuresIndirectKHR)load(\n          context, \"vkCmdBuildAccelerationStructuresIndirectKHR\");\n  table->vkCmdBuildAccelerationStructuresKHR =\n      (PFN_vkCmdBuildAccelerationStructuresKHR)load(context, \"vkCmdBuildAccelerationStructuresKHR\");\n  table->vkCmdCopyAccelerationStructureKHR =\n      (PFN_vkCmdCopyAccelerationStructureKHR)load(context, \"vkCmdCopyAccelerationStructureKHR\");\n  table->vkCmdCopyAccelerationStructureToMemoryKHR =\n      (PFN_vkCmdCopyAccelerationStructureToMemoryKHR)load(\n          context, \"vkCmdCopyAccelerationStructureToMemoryKHR\");\n  table->vkCmdCopyMemoryToAccelerationStructureKHR =\n      (PFN_vkCmdCopyMemoryToAccelerationStructureKHR)load(\n          context, \"vkCmdCopyMemoryToAccelerationStructureKHR\");\n  table->vkCmdWriteAccelerationStructuresPropertiesKHR =\n      (PFN_vkCmdWriteAccelerationStructuresPropertiesKHR)load(\n          context, \"vkCmdWriteAccelerationStructuresPropertiesKHR\");\n  table->vkCopyAccelerationStructureKHR =\n      (PFN_vkCopyAccelerationStructureKHR)load(context, \"vkCopyAccelerationStructureKHR\");\n  table->vkCopyAccelerationStructureToMemoryKHR = (PFN_vkCopyAccelerationStructureToMemoryKHR)load(\n      context, \"vkCopyAccelerationStructureToMemoryKHR\");\n  table->vkCopyMemoryToAccelerationStructureKHR = (PFN_vkCopyMemoryToAccelerationStructureKHR)load(\n      context, \"vkCopyMemoryToAccelerationStructureKHR\");\n  table->vkCreateAccelerationStructureKHR =\n      (PFN_vkCreateAccelerationStructureKHR)load(context, \"vkCreateAccelerationStructureKHR\");\n  table->vkDestroyAccelerationStructureKHR =\n      (PFN_vkDestroyAccelerationStructureKHR)load(context, \"vkDestroyAccelerationStructureKHR\");\n  table->vkGetAccelerationStructureBuildSizesKHR =\n      (PFN_vkGetAccelerationStructureBuildSizesKHR)load(context,\n                                                        \"vkGetAccelerationStructureBuildSizesKHR\");\n  table->vkGetAccelerationStructureDeviceAddressKHR =\n      (PFN_vkGetAccelerationStructureDeviceAddressKHR)load(\n          context, \"vkGetAccelerationStructureDeviceAddressKHR\");\n  table->vkGetDeviceAccelerationStructureCompatibilityKHR =\n      (PFN_vkGetDeviceAccelerationStructureCompatibilityKHR)load(\n          context, \"vkGetDeviceAccelerationStructureCompatibilityKHR\");\n  table->vkWriteAccelerationStructuresPropertiesKHR =\n      (PFN_vkWriteAccelerationStructuresPropertiesKHR)load(\n          context, \"vkWriteAccelerationStructuresPropertiesKHR\");\n#endif /* defined(VK_KHR_acceleration_structure) */\n#if defined(VK_KHR_bind_memory2)\n  table->vkBindBufferMemory2KHR =\n      (PFN_vkBindBufferMemory2KHR)load(context, \"vkBindBufferMemory2KHR\");\n  table->vkBindImageMemory2KHR = (PFN_vkBindImageMemory2KHR)load(context, \"vkBindImageMemory2KHR\");\n#endif /* defined(VK_KHR_bind_memory2) */\n#if defined(VK_KHR_buffer_device_address)\n  table->vkGetBufferDeviceAddressKHR =\n      (PFN_vkGetBufferDeviceAddressKHR)load(context, \"vkGetBufferDeviceAddressKHR\");\n  table->vkGetBufferOpaqueCaptureAddressKHR =\n      (PFN_vkGetBufferOpaqueCaptureAddressKHR)load(context, \"vkGetBufferOpaqueCaptureAddressKHR\");\n  table->vkGetDeviceMemoryOpaqueCaptureAddressKHR =\n      (PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR)load(\n          context, \"vkGetDeviceMemoryOpaqueCaptureAddressKHR\");\n#endif /* defined(VK_KHR_buffer_device_address) */\n#if defined(VK_KHR_copy_commands2)\n  table->vkCmdBlitImage2KHR = (PFN_vkCmdBlitImage2KHR)load(context, \"vkCmdBlitImage2KHR\");\n  table->vkCmdCopyBuffer2KHR = (PFN_vkCmdCopyBuffer2KHR)load(context, \"vkCmdCopyBuffer2KHR\");\n  table->vkCmdCopyBufferToImage2KHR =\n      (PFN_vkCmdCopyBufferToImage2KHR)load(context, \"vkCmdCopyBufferToImage2KHR\");\n  table->vkCmdCopyImage2KHR = (PFN_vkCmdCopyImage2KHR)load(context, \"vkCmdCopyImage2KHR\");\n  table->vkCmdCopyImageToBuffer2KHR =\n      (PFN_vkCmdCopyImageToBuffer2KHR)load(context, \"vkCmdCopyImageToBuffer2KHR\");\n  table->vkCmdResolveImage2KHR = (PFN_vkCmdResolveImage2KHR)load(context, \"vkCmdResolveImage2KHR\");\n#endif /* defined(VK_KHR_copy_commands2) */\n#if defined(VK_KHR_create_renderpass2)\n  table->vkCmdBeginRenderPass2KHR =\n      (PFN_vkCmdBeginRenderPass2KHR)load(context, \"vkCmdBeginRenderPass2KHR\");\n  table->vkCmdEndRenderPass2KHR =\n      (PFN_vkCmdEndRenderPass2KHR)load(context, \"vkCmdEndRenderPass2KHR\");\n  table->vkCmdNextSubpass2KHR = (PFN_vkCmdNextSubpass2KHR)load(context, \"vkCmdNextSubpass2KHR\");\n  table->vkCreateRenderPass2KHR =\n      (PFN_vkCreateRenderPass2KHR)load(context, \"vkCreateRenderPass2KHR\");\n#endif /* defined(VK_KHR_create_renderpass2) */\n#if defined(VK_KHR_deferred_host_operations)\n  table->vkCreateDeferredOperationKHR =\n      (PFN_vkCreateDeferredOperationKHR)load(context, \"vkCreateDeferredOperationKHR\");\n  table->vkDeferredOperationJoinKHR =\n      (PFN_vkDeferredOperationJoinKHR)load(context, \"vkDeferredOperationJoinKHR\");\n  table->vkDestroyDeferredOperationKHR =\n      (PFN_vkDestroyDeferredOperationKHR)load(context, \"vkDestroyDeferredOperationKHR\");\n  table->vkGetDeferredOperationMaxConcurrencyKHR =\n      (PFN_vkGetDeferredOperationMaxConcurrencyKHR)load(context,\n                                                        \"vkGetDeferredOperationMaxConcurrencyKHR\");\n  table->vkGetDeferredOperationResultKHR =\n      (PFN_vkGetDeferredOperationResultKHR)load(context, \"vkGetDeferredOperationResultKHR\");\n#endif /* defined(VK_KHR_deferred_host_operations) */\n#if defined(VK_KHR_descriptor_update_template)\n  table->vkCreateDescriptorUpdateTemplateKHR =\n      (PFN_vkCreateDescriptorUpdateTemplateKHR)load(context, \"vkCreateDescriptorUpdateTemplateKHR\");\n  table->vkDestroyDescriptorUpdateTemplateKHR = (PFN_vkDestroyDescriptorUpdateTemplateKHR)load(\n      context, \"vkDestroyDescriptorUpdateTemplateKHR\");\n  table->vkUpdateDescriptorSetWithTemplateKHR = (PFN_vkUpdateDescriptorSetWithTemplateKHR)load(\n      context, \"vkUpdateDescriptorSetWithTemplateKHR\");\n#endif /* defined(VK_KHR_descriptor_update_template) */\n#if defined(VK_KHR_device_group)\n  table->vkCmdDispatchBaseKHR = (PFN_vkCmdDispatchBaseKHR)load(context, \"vkCmdDispatchBaseKHR\");\n  table->vkCmdSetDeviceMaskKHR = (PFN_vkCmdSetDeviceMaskKHR)load(context, \"vkCmdSetDeviceMaskKHR\");\n  table->vkGetDeviceGroupPeerMemoryFeaturesKHR = (PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR)load(\n      context, \"vkGetDeviceGroupPeerMemoryFeaturesKHR\");\n#endif /* defined(VK_KHR_device_group) */\n#if defined(VK_KHR_display_swapchain)\n  table->vkCreateSharedSwapchainsKHR =\n      (PFN_vkCreateSharedSwapchainsKHR)load(context, \"vkCreateSharedSwapchainsKHR\");\n#endif /* defined(VK_KHR_display_swapchain) */\n#if defined(VK_KHR_draw_indirect_count)\n  table->vkCmdDrawIndexedIndirectCountKHR =\n      (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, \"vkCmdDrawIndexedIndirectCountKHR\");\n  table->vkCmdDrawIndirectCountKHR =\n      (PFN_vkCmdDrawIndirectCountKHR)load(context, \"vkCmdDrawIndirectCountKHR\");\n#endif /* defined(VK_KHR_draw_indirect_count) */\n#if defined(VK_KHR_dynamic_rendering)\n  table->vkCmdBeginRenderingKHR =\n      (PFN_vkCmdBeginRenderingKHR)load(context, \"vkCmdBeginRenderingKHR\");\n  table->vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)load(context, \"vkCmdEndRenderingKHR\");\n#endif /* defined(VK_KHR_dynamic_rendering) */\n#if defined(VK_KHR_external_fence_fd)\n  table->vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, \"vkGetFenceFdKHR\");\n  table->vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, \"vkImportFenceFdKHR\");\n#endif /* defined(VK_KHR_external_fence_fd) */\n#if defined(VK_KHR_external_fence_win32)\n  table->vkGetFenceWin32HandleKHR =\n      (PFN_vkGetFenceWin32HandleKHR)load(context, \"vkGetFenceWin32HandleKHR\");\n  table->vkImportFenceWin32HandleKHR =\n      (PFN_vkImportFenceWin32HandleKHR)load(context, \"vkImportFenceWin32HandleKHR\");\n#endif /* defined(VK_KHR_external_fence_win32) */\n#if defined(VK_KHR_external_memory_fd)\n  table->vkGetMemoryFdKHR = (PFN_vkGetMemoryFdKHR)load(context, \"vkGetMemoryFdKHR\");\n  table->vkGetMemoryFdPropertiesKHR =\n      (PFN_vkGetMemoryFdPropertiesKHR)load(context, \"vkGetMemoryFdPropertiesKHR\");\n#endif /* defined(VK_KHR_external_memory_fd) */\n#if defined(VK_KHR_external_memory_win32)\n  table->vkGetMemoryWin32HandleKHR =\n      (PFN_vkGetMemoryWin32HandleKHR)load(context, \"vkGetMemoryWin32HandleKHR\");\n  table->vkGetMemoryWin32HandlePropertiesKHR =\n      (PFN_vkGetMemoryWin32HandlePropertiesKHR)load(context, \"vkGetMemoryWin32HandlePropertiesKHR\");\n#endif /* defined(VK_KHR_external_memory_win32) */\n#if defined(VK_KHR_external_semaphore_fd)\n  table->vkGetSemaphoreFdKHR = (PFN_vkGetSemaphoreFdKHR)load(context, \"vkGetSemaphoreFdKHR\");\n  table->vkImportSemaphoreFdKHR =\n      (PFN_vkImportSemaphoreFdKHR)load(context, \"vkImportSemaphoreFdKHR\");\n#endif /* defined(VK_KHR_external_semaphore_fd) */\n#if defined(VK_KHR_external_semaphore_win32)\n  table->vkGetSemaphoreWin32HandleKHR =\n      (PFN_vkGetSemaphoreWin32HandleKHR)load(context, \"vkGetSemaphoreWin32HandleKHR\");\n  table->vkImportSemaphoreWin32HandleKHR =\n      (PFN_vkImportSemaphoreWin32HandleKHR)load(context, \"vkImportSemaphoreWin32HandleKHR\");\n#endif /* defined(VK_KHR_external_semaphore_win32) */\n#if defined(VK_KHR_fragment_shading_rate)\n  table->vkCmdSetFragmentShadingRateKHR =\n      (PFN_vkCmdSetFragmentShadingRateKHR)load(context, \"vkCmdSetFragmentShadingRateKHR\");\n#endif /* defined(VK_KHR_fragment_shading_rate) */\n#if defined(VK_KHR_get_memory_requirements2)\n  table->vkGetBufferMemoryRequirements2KHR =\n      (PFN_vkGetBufferMemoryRequirements2KHR)load(context, \"vkGetBufferMemoryRequirements2KHR\");\n  table->vkGetImageMemoryRequirements2KHR =\n      (PFN_vkGetImageMemoryRequirements2KHR)load(context, \"vkGetImageMemoryRequirements2KHR\");\n  table->vkGetImageSparseMemoryRequirements2KHR = (PFN_vkGetImageSparseMemoryRequirements2KHR)load(\n      context, \"vkGetImageSparseMemoryRequirements2KHR\");\n#endif /* defined(VK_KHR_get_memory_requirements2) */\n#if defined(VK_KHR_maintenance1)\n  table->vkTrimCommandPoolKHR = (PFN_vkTrimCommandPoolKHR)load(context, \"vkTrimCommandPoolKHR\");\n#endif /* defined(VK_KHR_maintenance1) */\n#if defined(VK_KHR_maintenance3)\n  table->vkGetDescriptorSetLayoutSupportKHR =\n      (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, \"vkGetDescriptorSetLayoutSupportKHR\");\n#endif /* defined(VK_KHR_maintenance3) */\n#if defined(VK_KHR_maintenance4)\n  table->vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)load(\n      context, \"vkGetDeviceBufferMemoryRequirementsKHR\");\n  table->vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)load(\n      context, \"vkGetDeviceImageMemoryRequirementsKHR\");\n  table->vkGetDeviceImageSparseMemoryRequirementsKHR =\n      (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)load(\n          context, \"vkGetDeviceImageSparseMemoryRequirementsKHR\");\n#endif /* defined(VK_KHR_maintenance4) */\n#if defined(VK_KHR_performance_query)\n  table->vkAcquireProfilingLockKHR =\n      (PFN_vkAcquireProfilingLockKHR)load(context, \"vkAcquireProfilingLockKHR\");\n  table->vkReleaseProfilingLockKHR =\n      (PFN_vkReleaseProfilingLockKHR)load(context, \"vkReleaseProfilingLockKHR\");\n#endif /* defined(VK_KHR_performance_query) */\n#if defined(VK_KHR_pipeline_executable_properties)\n  table->vkGetPipelineExecutableInternalRepresentationsKHR =\n      (PFN_vkGetPipelineExecutableInternalRepresentationsKHR)load(\n          context, \"vkGetPipelineExecutableInternalRepresentationsKHR\");\n  table->vkGetPipelineExecutablePropertiesKHR = (PFN_vkGetPipelineExecutablePropertiesKHR)load(\n      context, \"vkGetPipelineExecutablePropertiesKHR\");\n  table->vkGetPipelineExecutableStatisticsKHR = (PFN_vkGetPipelineExecutableStatisticsKHR)load(\n      context, \"vkGetPipelineExecutableStatisticsKHR\");\n#endif /* defined(VK_KHR_pipeline_executable_properties) */\n#if defined(VK_KHR_present_wait)\n  table->vkWaitForPresentKHR = (PFN_vkWaitForPresentKHR)load(context, \"vkWaitForPresentKHR\");\n#endif /* defined(VK_KHR_present_wait) */\n#if defined(VK_KHR_push_descriptor)\n  table->vkCmdPushDescriptorSetKHR =\n      (PFN_vkCmdPushDescriptorSetKHR)load(context, \"vkCmdPushDescriptorSetKHR\");\n#endif /* defined(VK_KHR_push_descriptor) */\n#if defined(VK_KHR_ray_tracing_pipeline)\n  table->vkCmdSetRayTracingPipelineStackSizeKHR = (PFN_vkCmdSetRayTracingPipelineStackSizeKHR)load(\n      context, \"vkCmdSetRayTracingPipelineStackSizeKHR\");\n  table->vkCmdTraceRaysIndirectKHR =\n      (PFN_vkCmdTraceRaysIndirectKHR)load(context, \"vkCmdTraceRaysIndirectKHR\");\n  table->vkCmdTraceRaysKHR = (PFN_vkCmdTraceRaysKHR)load(context, \"vkCmdTraceRaysKHR\");\n  table->vkCreateRayTracingPipelinesKHR =\n      (PFN_vkCreateRayTracingPipelinesKHR)load(context, \"vkCreateRayTracingPipelinesKHR\");\n  table->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR =\n      (PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR)load(\n          context, \"vkGetRayTracingCaptureReplayShaderGroupHandlesKHR\");\n  table->vkGetRayTracingShaderGroupHandlesKHR = (PFN_vkGetRayTracingShaderGroupHandlesKHR)load(\n      context, \"vkGetRayTracingShaderGroupHandlesKHR\");\n  table->vkGetRayTracingShaderGroupStackSizeKHR = (PFN_vkGetRayTracingShaderGroupStackSizeKHR)load(\n      context, \"vkGetRayTracingShaderGroupStackSizeKHR\");\n#endif /* defined(VK_KHR_ray_tracing_pipeline) */\n#if defined(VK_KHR_sampler_ycbcr_conversion)\n  table->vkCreateSamplerYcbcrConversionKHR =\n      (PFN_vkCreateSamplerYcbcrConversionKHR)load(context, \"vkCreateSamplerYcbcrConversionKHR\");\n  table->vkDestroySamplerYcbcrConversionKHR =\n      (PFN_vkDestroySamplerYcbcrConversionKHR)load(context, \"vkDestroySamplerYcbcrConversionKHR\");\n#endif /* defined(VK_KHR_sampler_ycbcr_conversion) */\n#if defined(VK_KHR_shared_presentable_image)\n  table->vkGetSwapchainStatusKHR =\n      (PFN_vkGetSwapchainStatusKHR)load(context, \"vkGetSwapchainStatusKHR\");\n#endif /* defined(VK_KHR_shared_presentable_image) */\n#if defined(VK_KHR_swapchain)\n  table->vkAcquireNextImageKHR = (PFN_vkAcquireNextImageKHR)load(context, \"vkAcquireNextImageKHR\");\n  table->vkCreateSwapchainKHR = (PFN_vkCreateSwapchainKHR)load(context, \"vkCreateSwapchainKHR\");\n  table->vkDestroySwapchainKHR = (PFN_vkDestroySwapchainKHR)load(context, \"vkDestroySwapchainKHR\");\n  table->vkGetSwapchainImagesKHR =\n      (PFN_vkGetSwapchainImagesKHR)load(context, \"vkGetSwapchainImagesKHR\");\n  table->vkQueuePresentKHR = (PFN_vkQueuePresentKHR)load(context, \"vkQueuePresentKHR\");\n#endif /* defined(VK_KHR_swapchain) */\n#if defined(VK_KHR_synchronization2)\n  table->vkCmdPipelineBarrier2KHR =\n      (PFN_vkCmdPipelineBarrier2KHR)load(context, \"vkCmdPipelineBarrier2KHR\");\n  table->vkCmdResetEvent2KHR = (PFN_vkCmdResetEvent2KHR)load(context, \"vkCmdResetEvent2KHR\");\n  table->vkCmdSetEvent2KHR = (PFN_vkCmdSetEvent2KHR)load(context, \"vkCmdSetEvent2KHR\");\n  table->vkCmdWaitEvents2KHR = (PFN_vkCmdWaitEvents2KHR)load(context, \"vkCmdWaitEvents2KHR\");\n  table->vkCmdWriteTimestamp2KHR =\n      (PFN_vkCmdWriteTimestamp2KHR)load(context, \"vkCmdWriteTimestamp2KHR\");\n  table->vkQueueSubmit2KHR = (PFN_vkQueueSubmit2KHR)load(context, \"vkQueueSubmit2KHR\");\n#endif /* defined(VK_KHR_synchronization2) */\n#if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker)\n  table->vkCmdWriteBufferMarker2AMD =\n      (PFN_vkCmdWriteBufferMarker2AMD)load(context, \"vkCmdWriteBufferMarker2AMD\");\n#endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */\n#if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints)\n  table->vkGetQueueCheckpointData2NV =\n      (PFN_vkGetQueueCheckpointData2NV)load(context, \"vkGetQueueCheckpointData2NV\");\n#endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */\n#if defined(VK_KHR_timeline_semaphore)\n  table->vkGetSemaphoreCounterValueKHR =\n      (PFN_vkGetSemaphoreCounterValueKHR)load(context, \"vkGetSemaphoreCounterValueKHR\");\n  table->vkSignalSemaphoreKHR = (PFN_vkSignalSemaphoreKHR)load(context, \"vkSignalSemaphoreKHR\");\n  table->vkWaitSemaphoresKHR = (PFN_vkWaitSemaphoresKHR)load(context, \"vkWaitSemaphoresKHR\");\n#endif /* defined(VK_KHR_timeline_semaphore) */\n#if defined(VK_KHR_video_decode_queue)\n  table->vkCmdDecodeVideoKHR = (PFN_vkCmdDecodeVideoKHR)load(context, \"vkCmdDecodeVideoKHR\");\n#endif /* defined(VK_KHR_video_decode_queue) */\n#if defined(VK_KHR_video_encode_queue)\n  table->vkCmdEncodeVideoKHR = (PFN_vkCmdEncodeVideoKHR)load(context, \"vkCmdEncodeVideoKHR\");\n#endif /* defined(VK_KHR_video_encode_queue) */\n#if defined(VK_KHR_video_queue)\n  table->vkBindVideoSessionMemoryKHR =\n      (PFN_vkBindVideoSessionMemoryKHR)load(context, \"vkBindVideoSessionMemoryKHR\");\n  table->vkCmdBeginVideoCodingKHR =\n      (PFN_vkCmdBeginVideoCodingKHR)load(context, \"vkCmdBeginVideoCodingKHR\");\n  table->vkCmdControlVideoCodingKHR =\n      (PFN_vkCmdControlVideoCodingKHR)load(context, \"vkCmdControlVideoCodingKHR\");\n  table->vkCmdEndVideoCodingKHR =\n      (PFN_vkCmdEndVideoCodingKHR)load(context, \"vkCmdEndVideoCodingKHR\");\n  table->vkCreateVideoSessionKHR =\n      (PFN_vkCreateVideoSessionKHR)load(context, \"vkCreateVideoSessionKHR\");\n  table->vkCreateVideoSessionParametersKHR =\n      (PFN_vkCreateVideoSessionParametersKHR)load(context, \"vkCreateVideoSessionParametersKHR\");\n  table->vkDestroyVideoSessionKHR =\n      (PFN_vkDestroyVideoSessionKHR)load(context, \"vkDestroyVideoSessionKHR\");\n  table->vkDestroyVideoSessionParametersKHR =\n      (PFN_vkDestroyVideoSessionParametersKHR)load(context, \"vkDestroyVideoSessionParametersKHR\");\n  table->vkGetVideoSessionMemoryRequirementsKHR = (PFN_vkGetVideoSessionMemoryRequirementsKHR)load(\n      context, \"vkGetVideoSessionMemoryRequirementsKHR\");\n  table->vkUpdateVideoSessionParametersKHR =\n      (PFN_vkUpdateVideoSessionParametersKHR)load(context, \"vkUpdateVideoSessionParametersKHR\");\n#endif /* defined(VK_KHR_video_queue) */\n#if defined(VK_NVX_binary_import)\n  table->vkCmdCuLaunchKernelNVX =\n      (PFN_vkCmdCuLaunchKernelNVX)load(context, \"vkCmdCuLaunchKernelNVX\");\n  table->vkCreateCuFunctionNVX = (PFN_vkCreateCuFunctionNVX)load(context, \"vkCreateCuFunctionNVX\");\n  table->vkCreateCuModuleNVX = (PFN_vkCreateCuModuleNVX)load(context, \"vkCreateCuModuleNVX\");\n  table->vkDestroyCuFunctionNVX =\n      (PFN_vkDestroyCuFunctionNVX)load(context, \"vkDestroyCuFunctionNVX\");\n  table->vkDestroyCuModuleNVX = (PFN_vkDestroyCuModuleNVX)load(context, \"vkDestroyCuModuleNVX\");\n#endif /* defined(VK_NVX_binary_import) */\n#if defined(VK_NVX_image_view_handle)\n  table->vkGetImageViewAddressNVX =\n      (PFN_vkGetImageViewAddressNVX)load(context, \"vkGetImageViewAddressNVX\");\n  table->vkGetImageViewHandleNVX =\n      (PFN_vkGetImageViewHandleNVX)load(context, \"vkGetImageViewHandleNVX\");\n#endif /* defined(VK_NVX_image_view_handle) */\n#if defined(VK_NV_clip_space_w_scaling)\n  table->vkCmdSetViewportWScalingNV =\n      (PFN_vkCmdSetViewportWScalingNV)load(context, \"vkCmdSetViewportWScalingNV\");\n#endif /* defined(VK_NV_clip_space_w_scaling) */\n#if defined(VK_NV_device_diagnostic_checkpoints)\n  table->vkCmdSetCheckpointNV = (PFN_vkCmdSetCheckpointNV)load(context, \"vkCmdSetCheckpointNV\");\n  table->vkGetQueueCheckpointDataNV =\n      (PFN_vkGetQueueCheckpointDataNV)load(context, \"vkGetQueueCheckpointDataNV\");\n#endif /* defined(VK_NV_device_diagnostic_checkpoints) */\n#if defined(VK_NV_device_generated_commands)\n  table->vkCmdBindPipelineShaderGroupNV =\n      (PFN_vkCmdBindPipelineShaderGroupNV)load(context, \"vkCmdBindPipelineShaderGroupNV\");\n  table->vkCmdExecuteGeneratedCommandsNV =\n      (PFN_vkCmdExecuteGeneratedCommandsNV)load(context, \"vkCmdExecuteGeneratedCommandsNV\");\n  table->vkCmdPreprocessGeneratedCommandsNV =\n      (PFN_vkCmdPreprocessGeneratedCommandsNV)load(context, \"vkCmdPreprocessGeneratedCommandsNV\");\n  table->vkCreateIndirectCommandsLayoutNV =\n      (PFN_vkCreateIndirectCommandsLayoutNV)load(context, \"vkCreateIndirectCommandsLayoutNV\");\n  table->vkDestroyIndirectCommandsLayoutNV =\n      (PFN_vkDestroyIndirectCommandsLayoutNV)load(context, \"vkDestroyIndirectCommandsLayoutNV\");\n  table->vkGetGeneratedCommandsMemoryRequirementsNV =\n      (PFN_vkGetGeneratedCommandsMemoryRequirementsNV)load(\n          context, \"vkGetGeneratedCommandsMemoryRequirementsNV\");\n#endif /* defined(VK_NV_device_generated_commands) */\n#if defined(VK_NV_external_memory_rdma)\n  table->vkGetMemoryRemoteAddressNV =\n      (PFN_vkGetMemoryRemoteAddressNV)load(context, \"vkGetMemoryRemoteAddressNV\");\n#endif /* defined(VK_NV_external_memory_rdma) */\n#if defined(VK_NV_external_memory_win32)\n  table->vkGetMemoryWin32HandleNV =\n      (PFN_vkGetMemoryWin32HandleNV)load(context, \"vkGetMemoryWin32HandleNV\");\n#endif /* defined(VK_NV_external_memory_win32) */\n#if defined(VK_NV_fragment_shading_rate_enums)\n  table->vkCmdSetFragmentShadingRateEnumNV =\n      (PFN_vkCmdSetFragmentShadingRateEnumNV)load(context, \"vkCmdSetFragmentShadingRateEnumNV\");\n#endif /* defined(VK_NV_fragment_shading_rate_enums) */\n#if defined(VK_NV_mesh_shader)\n  table->vkCmdDrawMeshTasksIndirectCountNV =\n      (PFN_vkCmdDrawMeshTasksIndirectCountNV)load(context, \"vkCmdDrawMeshTasksIndirectCountNV\");\n  table->vkCmdDrawMeshTasksIndirectNV =\n      (PFN_vkCmdDrawMeshTasksIndirectNV)load(context, \"vkCmdDrawMeshTasksIndirectNV\");\n  table->vkCmdDrawMeshTasksNV = (PFN_vkCmdDrawMeshTasksNV)load(context, \"vkCmdDrawMeshTasksNV\");\n#endif /* defined(VK_NV_mesh_shader) */\n#if defined(VK_NV_ray_tracing)\n  table->vkBindAccelerationStructureMemoryNV =\n      (PFN_vkBindAccelerationStructureMemoryNV)load(context, \"vkBindAccelerationStructureMemoryNV\");\n  table->vkCmdBuildAccelerationStructureNV =\n      (PFN_vkCmdBuildAccelerationStructureNV)load(context, \"vkCmdBuildAccelerationStructureNV\");\n  table->vkCmdCopyAccelerationStructureNV =\n      (PFN_vkCmdCopyAccelerationStructureNV)load(context, \"vkCmdCopyAccelerationStructureNV\");\n  table->vkCmdTraceRaysNV = (PFN_vkCmdTraceRaysNV)load(context, \"vkCmdTraceRaysNV\");\n  table->vkCmdWriteAccelerationStructuresPropertiesNV =\n      (PFN_vkCmdWriteAccelerationStructuresPropertiesNV)load(\n          context, \"vkCmdWriteAccelerationStructuresPropertiesNV\");\n  table->vkCompileDeferredNV = (PFN_vkCompileDeferredNV)load(context, \"vkCompileDeferredNV\");\n  table->vkCreateAccelerationStructureNV =\n      (PFN_vkCreateAccelerationStructureNV)load(context, \"vkCreateAccelerationStructureNV\");\n  table->vkCreateRayTracingPipelinesNV =\n      (PFN_vkCreateRayTracingPipelinesNV)load(context, \"vkCreateRayTracingPipelinesNV\");\n  table->vkDestroyAccelerationStructureNV =\n      (PFN_vkDestroyAccelerationStructureNV)load(context, \"vkDestroyAccelerationStructureNV\");\n  table->vkGetAccelerationStructureHandleNV =\n      (PFN_vkGetAccelerationStructureHandleNV)load(context, \"vkGetAccelerationStructureHandleNV\");\n  table->vkGetAccelerationStructureMemoryRequirementsNV =\n      (PFN_vkGetAccelerationStructureMemoryRequirementsNV)load(\n          context, \"vkGetAccelerationStructureMemoryRequirementsNV\");\n  table->vkGetRayTracingShaderGroupHandlesNV =\n      (PFN_vkGetRayTracingShaderGroupHandlesNV)load(context, \"vkGetRayTracingShaderGroupHandlesNV\");\n#endif /* defined(VK_NV_ray_tracing) */\n#if defined(VK_NV_scissor_exclusive)\n  table->vkCmdSetExclusiveScissorNV =\n      (PFN_vkCmdSetExclusiveScissorNV)load(context, \"vkCmdSetExclusiveScissorNV\");\n#endif /* defined(VK_NV_scissor_exclusive) */\n#if defined(VK_NV_shading_rate_image)\n  table->vkCmdBindShadingRateImageNV =\n      (PFN_vkCmdBindShadingRateImageNV)load(context, \"vkCmdBindShadingRateImageNV\");\n  table->vkCmdSetCoarseSampleOrderNV =\n      (PFN_vkCmdSetCoarseSampleOrderNV)load(context, \"vkCmdSetCoarseSampleOrderNV\");\n  table->vkCmdSetViewportShadingRatePaletteNV = (PFN_vkCmdSetViewportShadingRatePaletteNV)load(\n      context, \"vkCmdSetViewportShadingRatePaletteNV\");\n#endif /* defined(VK_NV_shading_rate_image) */\n#if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || \\\n    (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1))\n  table->vkGetDeviceGroupSurfacePresentModes2EXT =\n      (PFN_vkGetDeviceGroupSurfacePresentModes2EXT)load(context,\n                                                        \"vkGetDeviceGroupSurfacePresentModes2EXT\");\n#endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || \\\n          (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */\n#if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || \\\n    (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) ||                    \\\n    (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template))\n  table->vkCmdPushDescriptorSetWithTemplateKHR = (PFN_vkCmdPushDescriptorSetWithTemplateKHR)load(\n      context, \"vkCmdPushDescriptorSetWithTemplateKHR\");\n#endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || \\\n          (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) ||                    \\\n          (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */\n#if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || \\\n    (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1))\n  table->vkGetDeviceGroupPresentCapabilitiesKHR = (PFN_vkGetDeviceGroupPresentCapabilitiesKHR)load(\n      context, \"vkGetDeviceGroupPresentCapabilitiesKHR\");\n  table->vkGetDeviceGroupSurfacePresentModesKHR = (PFN_vkGetDeviceGroupSurfacePresentModesKHR)load(\n      context, \"vkGetDeviceGroupSurfacePresentModesKHR\");\n#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) \\\n          && defined(VK_VERSION_1_1)) */\n#if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || \\\n    (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1))\n  table->vkAcquireNextImage2KHR =\n      (PFN_vkAcquireNextImage2KHR)load(context, \"vkAcquireNextImage2KHR\");\n#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || \\\n          (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */\n  /* IGL_GENERATE_LOAD_DEVICE_TABLE */\n}\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "src/igl/vulkan/VulkanFunctionTable.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// Vulkan functions tables, supplementary for volk.\n\n#pragma once\n\n#if !defined(VK_NO_PROTOTYPES)\n#define VK_NO_PROTOTYPES\n#endif // !defined(VK_NO_PROTOTYPES)\n\n#if defined(IGL_CMAKE_BUILD)\n#include <volk.h>\n#else\n#if defined(VK_USE_PLATFORM_WIN32_KHR)\n\n#include <vulkan/vk_platform.h>\n#include <vulkan/vulkan_core.h>\n\n/* When VK_USE_PLATFORM_WIN32_KHR is defined, instead of including vulkan.h directly, we include\n * individual parts of the SDK This is necessary to avoid including <windows.h> which is very\n * heavy\n * - it takes 200ms to parse without WIN32_LEAN_AND_MEAN and 100ms to parse with it.\n * vulkan_win32.h only needs a few symbols that are easy to redefine ourselves.\n */\ntypedef unsigned long DWORD;\ntypedef const wchar_t* LPCWSTR;\ntypedef void* HANDLE;\ntypedef struct HINSTANCE__* HINSTANCE;\ntypedef struct HWND__* HWND;\ntypedef struct HMONITOR__* HMONITOR;\ntypedef struct _SECURITY_ATTRIBUTES SECURITY_ATTRIBUTES;\n\n#include <vulkan/vulkan_win32.h>\n\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n#include <vulkan/vulkan_beta.h>\n#endif\n#else\n#include <vulkan/vulkan.h> // NOLINT(facebook-unused-include-check)\n#endif\n#endif\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/** @brief Vulkan function table. On some systems, multiple Vulkan loaders can be executed, which\n * may cause a different set of functions to be loaded or unloaded after a Vulkan context has been\n * created. This structure stores one set of functions that can be used to call Vulkan functions\n * for one session. It is populated by the `loadVulkanLoaderFunctions()` function declared in this\n * file.\n */\nstruct VulkanFunctionTable {\n  /* IGL_GENERATE_FUNCTION_TABLE */\n  // VK_VERSION_1_0\n  PFN_vkAllocateCommandBuffers vkAllocateCommandBuffers;\n  PFN_vkAllocateDescriptorSets vkAllocateDescriptorSets;\n  PFN_vkAllocateMemory vkAllocateMemory;\n  PFN_vkBeginCommandBuffer vkBeginCommandBuffer;\n  PFN_vkBindBufferMemory vkBindBufferMemory;\n  PFN_vkBindImageMemory vkBindImageMemory;\n  PFN_vkCmdBeginQuery vkCmdBeginQuery;\n  PFN_vkCmdBeginRenderPass vkCmdBeginRenderPass;\n  PFN_vkCmdBindDescriptorSets vkCmdBindDescriptorSets;\n  PFN_vkCmdBindIndexBuffer vkCmdBindIndexBuffer;\n  PFN_vkCmdBindPipeline vkCmdBindPipeline;\n  PFN_vkCmdBindVertexBuffers vkCmdBindVertexBuffers;\n  PFN_vkCmdBlitImage vkCmdBlitImage;\n  PFN_vkCmdClearAttachments vkCmdClearAttachments;\n  PFN_vkCmdClearColorImage vkCmdClearColorImage;\n  PFN_vkCmdClearDepthStencilImage vkCmdClearDepthStencilImage;\n  PFN_vkCmdCopyBuffer vkCmdCopyBuffer;\n  PFN_vkCmdCopyBufferToImage vkCmdCopyBufferToImage;\n  PFN_vkCmdCopyImage vkCmdCopyImage;\n  PFN_vkCmdCopyImageToBuffer vkCmdCopyImageToBuffer;\n  PFN_vkCmdCopyQueryPoolResults vkCmdCopyQueryPoolResults;\n  PFN_vkCmdDispatch vkCmdDispatch;\n  PFN_vkCmdDispatchIndirect vkCmdDispatchIndirect;\n  PFN_vkCmdDraw vkCmdDraw;\n  PFN_vkCmdDrawIndexed vkCmdDrawIndexed;\n  PFN_vkCmdDrawIndexedIndirect vkCmdDrawIndexedIndirect;\n  PFN_vkCmdDrawIndirect vkCmdDrawIndirect;\n  PFN_vkCmdDrawMeshTasksEXT vkCmdDrawMeshTasksEXT;\n  PFN_vkCmdEndQuery vkCmdEndQuery;\n  PFN_vkCmdEndRenderPass vkCmdEndRenderPass;\n  PFN_vkCmdExecuteCommands vkCmdExecuteCommands;\n  PFN_vkCmdFillBuffer vkCmdFillBuffer;\n  PFN_vkCmdNextSubpass vkCmdNextSubpass;\n  PFN_vkCmdPipelineBarrier vkCmdPipelineBarrier;\n  PFN_vkCmdPushConstants vkCmdPushConstants;\n  PFN_vkCmdResetEvent vkCmdResetEvent;\n  PFN_vkCmdResetQueryPool vkCmdResetQueryPool;\n  PFN_vkCmdResolveImage vkCmdResolveImage;\n  PFN_vkCmdSetBlendConstants vkCmdSetBlendConstants;\n  PFN_vkCmdSetDepthBias vkCmdSetDepthBias;\n  PFN_vkCmdSetDepthBounds vkCmdSetDepthBounds;\n  PFN_vkCmdSetEvent vkCmdSetEvent;\n  PFN_vkCmdSetLineWidth vkCmdSetLineWidth;\n  PFN_vkCmdSetScissor vkCmdSetScissor;\n  PFN_vkCmdSetStencilCompareMask vkCmdSetStencilCompareMask;\n  PFN_vkCmdSetStencilReference vkCmdSetStencilReference;\n  PFN_vkCmdSetStencilWriteMask vkCmdSetStencilWriteMask;\n  PFN_vkCmdSetViewport vkCmdSetViewport;\n  PFN_vkCmdUpdateBuffer vkCmdUpdateBuffer;\n  PFN_vkCmdWaitEvents vkCmdWaitEvents;\n  PFN_vkCmdWriteTimestamp vkCmdWriteTimestamp;\n  PFN_vkCreateBuffer vkCreateBuffer;\n  PFN_vkCreateBufferView vkCreateBufferView;\n  PFN_vkCreateCommandPool vkCreateCommandPool;\n  PFN_vkCreateComputePipelines vkCreateComputePipelines;\n  PFN_vkCreateDescriptorPool vkCreateDescriptorPool;\n  PFN_vkCreateDescriptorSetLayout vkCreateDescriptorSetLayout;\n  PFN_vkCreateDevice vkCreateDevice;\n  PFN_vkCreateEvent vkCreateEvent;\n  PFN_vkCreateFence vkCreateFence;\n  PFN_vkCreateFramebuffer vkCreateFramebuffer;\n  PFN_vkCreateGraphicsPipelines vkCreateGraphicsPipelines;\n  PFN_vkCreateImage vkCreateImage;\n  PFN_vkCreateImageView vkCreateImageView;\n  PFN_vkCreateInstance vkCreateInstance;\n  PFN_vkCreatePipelineCache vkCreatePipelineCache;\n  PFN_vkCreatePipelineLayout vkCreatePipelineLayout;\n  PFN_vkCreateQueryPool vkCreateQueryPool;\n  PFN_vkCreateRenderPass vkCreateRenderPass;\n  PFN_vkCreateSampler vkCreateSampler;\n  PFN_vkCreateSemaphore vkCreateSemaphore;\n  PFN_vkCreateShaderModule vkCreateShaderModule;\n  PFN_vkDestroyBuffer vkDestroyBuffer;\n  PFN_vkDestroyBufferView vkDestroyBufferView;\n  PFN_vkDestroyCommandPool vkDestroyCommandPool;\n  PFN_vkDestroyDescriptorPool vkDestroyDescriptorPool;\n  PFN_vkDestroyDescriptorSetLayout vkDestroyDescriptorSetLayout;\n  PFN_vkDestroyDevice vkDestroyDevice;\n  PFN_vkDestroyEvent vkDestroyEvent;\n  PFN_vkDestroyFence vkDestroyFence;\n  PFN_vkDestroyFramebuffer vkDestroyFramebuffer;\n  PFN_vkDestroyImage vkDestroyImage;\n  PFN_vkDestroyImageView vkDestroyImageView;\n  PFN_vkDestroyInstance vkDestroyInstance;\n  PFN_vkDestroyPipeline vkDestroyPipeline;\n  PFN_vkDestroyPipelineCache vkDestroyPipelineCache;\n  PFN_vkDestroyPipelineLayout vkDestroyPipelineLayout;\n  PFN_vkDestroyQueryPool vkDestroyQueryPool;\n  PFN_vkDestroyRenderPass vkDestroyRenderPass;\n  PFN_vkDestroySampler vkDestroySampler;\n  PFN_vkDestroySemaphore vkDestroySemaphore;\n  PFN_vkDestroyShaderModule vkDestroyShaderModule;\n  PFN_vkDeviceWaitIdle vkDeviceWaitIdle;\n  PFN_vkEndCommandBuffer vkEndCommandBuffer;\n  PFN_vkEnumerateDeviceExtensionProperties vkEnumerateDeviceExtensionProperties;\n  PFN_vkEnumerateDeviceLayerProperties vkEnumerateDeviceLayerProperties;\n  PFN_vkEnumerateInstanceExtensionProperties vkEnumerateInstanceExtensionProperties;\n  PFN_vkEnumerateInstanceLayerProperties vkEnumerateInstanceLayerProperties;\n  PFN_vkEnumeratePhysicalDevices vkEnumeratePhysicalDevices;\n  PFN_vkFlushMappedMemoryRanges vkFlushMappedMemoryRanges;\n  PFN_vkFreeCommandBuffers vkFreeCommandBuffers;\n  PFN_vkFreeDescriptorSets vkFreeDescriptorSets;\n  PFN_vkFreeMemory vkFreeMemory;\n  PFN_vkGetBufferMemoryRequirements vkGetBufferMemoryRequirements;\n  PFN_vkGetDeviceMemoryCommitment vkGetDeviceMemoryCommitment;\n  PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;\n  PFN_vkGetDeviceQueue vkGetDeviceQueue;\n  PFN_vkGetEventStatus vkGetEventStatus;\n  PFN_vkGetFenceStatus vkGetFenceStatus;\n  PFN_vkGetImageMemoryRequirements vkGetImageMemoryRequirements;\n  PFN_vkGetImageSparseMemoryRequirements vkGetImageSparseMemoryRequirements;\n  PFN_vkGetImageSubresourceLayout vkGetImageSubresourceLayout;\n  PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;\n  PFN_vkGetPhysicalDeviceFeatures vkGetPhysicalDeviceFeatures;\n  PFN_vkGetPhysicalDeviceFormatProperties vkGetPhysicalDeviceFormatProperties;\n  PFN_vkGetPhysicalDeviceImageFormatProperties vkGetPhysicalDeviceImageFormatProperties;\n  PFN_vkGetPhysicalDeviceMemoryProperties vkGetPhysicalDeviceMemoryProperties;\n  PFN_vkGetPhysicalDeviceProperties vkGetPhysicalDeviceProperties;\n  PFN_vkGetPhysicalDeviceQueueFamilyProperties vkGetPhysicalDeviceQueueFamilyProperties;\n  PFN_vkGetPhysicalDeviceSparseImageFormatProperties vkGetPhysicalDeviceSparseImageFormatProperties;\n  PFN_vkGetPipelineCacheData vkGetPipelineCacheData;\n  PFN_vkGetQueryPoolResults vkGetQueryPoolResults;\n  PFN_vkGetRenderAreaGranularity vkGetRenderAreaGranularity;\n  PFN_vkInvalidateMappedMemoryRanges vkInvalidateMappedMemoryRanges;\n  PFN_vkMapMemory vkMapMemory;\n  PFN_vkMergePipelineCaches vkMergePipelineCaches;\n  PFN_vkQueueBindSparse vkQueueBindSparse;\n  PFN_vkQueueSubmit vkQueueSubmit;\n  PFN_vkQueueWaitIdle vkQueueWaitIdle;\n  PFN_vkResetCommandBuffer vkResetCommandBuffer;\n  PFN_vkResetCommandPool vkResetCommandPool;\n  PFN_vkResetDescriptorPool vkResetDescriptorPool;\n  PFN_vkResetEvent vkResetEvent;\n  PFN_vkResetFences vkResetFences;\n  PFN_vkSetEvent vkSetEvent;\n  PFN_vkUnmapMemory vkUnmapMemory;\n  PFN_vkUpdateDescriptorSets vkUpdateDescriptorSets;\n  PFN_vkWaitForFences vkWaitForFences;\n  // VK_VERSION_1_1\n  PFN_vkBindBufferMemory2 vkBindBufferMemory2;\n  PFN_vkBindImageMemory2 vkBindImageMemory2;\n  PFN_vkCmdDispatchBase vkCmdDispatchBase;\n  PFN_vkCmdSetDeviceMask vkCmdSetDeviceMask;\n  PFN_vkCreateDescriptorUpdateTemplate vkCreateDescriptorUpdateTemplate;\n  PFN_vkCreateSamplerYcbcrConversion vkCreateSamplerYcbcrConversion;\n  PFN_vkDestroyDescriptorUpdateTemplate vkDestroyDescriptorUpdateTemplate;\n  PFN_vkDestroySamplerYcbcrConversion vkDestroySamplerYcbcrConversion;\n  PFN_vkEnumerateInstanceVersion vkEnumerateInstanceVersion;\n  PFN_vkEnumeratePhysicalDeviceGroups vkEnumeratePhysicalDeviceGroups;\n  PFN_vkGetBufferMemoryRequirements2 vkGetBufferMemoryRequirements2;\n  PFN_vkGetDescriptorSetLayoutSupport vkGetDescriptorSetLayoutSupport;\n  PFN_vkGetDeviceGroupPeerMemoryFeatures vkGetDeviceGroupPeerMemoryFeatures;\n  PFN_vkGetDeviceQueue2 vkGetDeviceQueue2;\n  PFN_vkGetImageMemoryRequirements2 vkGetImageMemoryRequirements2;\n  PFN_vkGetImageSparseMemoryRequirements2 vkGetImageSparseMemoryRequirements2;\n  PFN_vkGetPhysicalDeviceExternalBufferProperties vkGetPhysicalDeviceExternalBufferProperties;\n  PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties;\n  PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties;\n  PFN_vkGetPhysicalDeviceFeatures2 vkGetPhysicalDeviceFeatures2;\n  PFN_vkGetPhysicalDeviceFormatProperties2 vkGetPhysicalDeviceFormatProperties2;\n  PFN_vkGetPhysicalDeviceImageFormatProperties2 vkGetPhysicalDeviceImageFormatProperties2;\n  PFN_vkGetPhysicalDeviceMemoryProperties2 vkGetPhysicalDeviceMemoryProperties2;\n  PFN_vkGetPhysicalDeviceProperties2 vkGetPhysicalDeviceProperties2;\n  PFN_vkGetPhysicalDeviceQueueFamilyProperties2 vkGetPhysicalDeviceQueueFamilyProperties2;\n  PFN_vkGetPhysicalDeviceSparseImageFormatProperties2\n      vkGetPhysicalDeviceSparseImageFormatProperties2;\n  PFN_vkTrimCommandPool vkTrimCommandPool;\n  PFN_vkUpdateDescriptorSetWithTemplate vkUpdateDescriptorSetWithTemplate;\n  // VK_VERSION_1_2\n  PFN_vkCmdBeginRenderPass2 vkCmdBeginRenderPass2;\n  PFN_vkCmdDrawIndexedIndirectCount vkCmdDrawIndexedIndirectCount;\n  PFN_vkCmdDrawIndirectCount vkCmdDrawIndirectCount;\n  PFN_vkCmdEndRenderPass2 vkCmdEndRenderPass2;\n  PFN_vkCmdNextSubpass2 vkCmdNextSubpass2;\n  PFN_vkCreateRenderPass2 vkCreateRenderPass2;\n  PFN_vkGetBufferDeviceAddress vkGetBufferDeviceAddress;\n  PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress;\n  PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress;\n  PFN_vkGetSemaphoreCounterValue vkGetSemaphoreCounterValue;\n  PFN_vkResetQueryPool vkResetQueryPool;\n  PFN_vkSignalSemaphore vkSignalSemaphore;\n  PFN_vkWaitSemaphores vkWaitSemaphores;\n#if defined(VK_VERSION_1_3)\n  PFN_vkCmdBeginRendering vkCmdBeginRendering;\n  PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;\n  PFN_vkCmdBlitImage2 vkCmdBlitImage2;\n  PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;\n  PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;\n  PFN_vkCmdCopyImage2 vkCmdCopyImage2;\n  PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;\n  PFN_vkCmdEndRendering vkCmdEndRendering;\n  PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;\n  PFN_vkCmdResetEvent2 vkCmdResetEvent2;\n  PFN_vkCmdResolveImage2 vkCmdResolveImage2;\n  PFN_vkCmdSetCullMode vkCmdSetCullMode;\n  PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;\n  PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;\n  PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;\n  PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;\n  PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;\n  PFN_vkCmdSetEvent2 vkCmdSetEvent2;\n  PFN_vkCmdSetFrontFace vkCmdSetFrontFace;\n  PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;\n  PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;\n  PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;\n  PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;\n  PFN_vkCmdSetStencilOp vkCmdSetStencilOp;\n  PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;\n  PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;\n  PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;\n  PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;\n  PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;\n  PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;\n  PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;\n  PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;\n  PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;\n  PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties;\n  PFN_vkGetPrivateData vkGetPrivateData;\n  PFN_vkQueueSubmit2 vkQueueSubmit2;\n  PFN_vkSetPrivateData vkSetPrivateData;\n#else\n  PFN_vkVoidFunction ignoreAlignment4[37];\n#endif /* defined(VK_VERSION_1_3) */\n#if defined(VK_AMD_buffer_marker)\n  PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;\n#else\n  PFN_vkVoidFunction ignoreAlignment5;\n#endif /* defined(VK_AMD_buffer_marker) */\n#if defined(VK_AMD_display_native_hdr)\n  PFN_vkSetLocalDimmingAMD vkSetLocalDimmingAMD;\n#else\n  PFN_vkVoidFunction ignoreAlignment6;\n#endif /* defined(VK_AMD_display_native_hdr) */\n#if defined(VK_AMD_draw_indirect_count)\n  PFN_vkCmdDrawIndexedIndirectCountAMD vkCmdDrawIndexedIndirectCountAMD;\n  PFN_vkCmdDrawIndirectCountAMD vkCmdDrawIndirectCountAMD;\n#else\n  PFN_vkVoidFunction ignoreAlignment7[2];\n#endif /* defined(VK_AMD_draw_indirect_count) */\n#if defined(VK_AMD_shader_info)\n  PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD;\n#else\n  PFN_vkVoidFunction ignoreAlignment8;\n#endif /* defined(VK_AMD_shader_info) */\n#if defined(VK_ANDROID_external_memory_android_hardware_buffer)\n  PFN_vkGetAndroidHardwareBufferPropertiesANDROID vkGetAndroidHardwareBufferPropertiesANDROID;\n  PFN_vkGetMemoryAndroidHardwareBufferANDROID vkGetMemoryAndroidHardwareBufferANDROID;\n#else\n  PFN_vkVoidFunction ignoreAlignment9[2];\n#endif /* defined(VK_ANDROID_external_memory_android_hardware_buffer) */\n#if defined(VK_EXT_acquire_drm_display)\n  PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT;\n  PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment10[2];\n#endif /* defined(VK_EXT_acquire_drm_display) */\n#if defined(VK_EXT_acquire_xlib_display)\n  PFN_vkAcquireXlibDisplayEXT vkAcquireXlibDisplayEXT;\n  PFN_vkGetRandROutputDisplayEXT vkGetRandROutputDisplayEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment11[2];\n#endif /* defined(VK_EXT_acquire_xlib_display) */\n#if defined(VK_EXT_buffer_device_address)\n  PFN_vkGetBufferDeviceAddressEXT vkGetBufferDeviceAddressEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment12;\n#endif /* defined(VK_EXT_buffer_device_address) */\n#if defined(VK_EXT_calibrated_timestamps)\n  PFN_vkGetCalibratedTimestampsEXT vkGetCalibratedTimestampsEXT;\n  PFN_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT vkGetPhysicalDeviceCalibrateableTimeDomainsEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment13[2];\n#endif /* defined(VK_EXT_calibrated_timestamps) */\n#if defined(VK_EXT_color_write_enable)\n  PFN_vkCmdSetColorWriteEnableEXT vkCmdSetColorWriteEnableEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment14;\n#endif /* defined(VK_EXT_color_write_enable) */\n#if defined(VK_EXT_conditional_rendering)\n  PFN_vkCmdBeginConditionalRenderingEXT vkCmdBeginConditionalRenderingEXT;\n  PFN_vkCmdEndConditionalRenderingEXT vkCmdEndConditionalRenderingEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment15[2];\n#endif /* defined(VK_EXT_conditional_rendering) */\n#if defined(VK_EXT_debug_marker)\n  PFN_vkCmdDebugMarkerBeginEXT vkCmdDebugMarkerBeginEXT;\n  PFN_vkCmdDebugMarkerEndEXT vkCmdDebugMarkerEndEXT;\n  PFN_vkCmdDebugMarkerInsertEXT vkCmdDebugMarkerInsertEXT;\n  PFN_vkDebugMarkerSetObjectNameEXT vkDebugMarkerSetObjectNameEXT;\n  PFN_vkDebugMarkerSetObjectTagEXT vkDebugMarkerSetObjectTagEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment16[5];\n#endif /* defined(VK_EXT_debug_marker) */\n#if defined(VK_EXT_debug_report)\n  PFN_vkCreateDebugReportCallbackEXT vkCreateDebugReportCallbackEXT;\n  PFN_vkDebugReportMessageEXT vkDebugReportMessageEXT;\n  PFN_vkDestroyDebugReportCallbackEXT vkDestroyDebugReportCallbackEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment17[3];\n#endif /* defined(VK_EXT_debug_report) */\n#if defined(VK_EXT_debug_utils)\n  PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabelEXT;\n  PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabelEXT;\n  PFN_vkCmdInsertDebugUtilsLabelEXT vkCmdInsertDebugUtilsLabelEXT;\n  PFN_vkCreateDebugUtilsMessengerEXT vkCreateDebugUtilsMessengerEXT;\n  PFN_vkDestroyDebugUtilsMessengerEXT vkDestroyDebugUtilsMessengerEXT;\n  PFN_vkQueueBeginDebugUtilsLabelEXT vkQueueBeginDebugUtilsLabelEXT;\n  PFN_vkQueueEndDebugUtilsLabelEXT vkQueueEndDebugUtilsLabelEXT;\n  PFN_vkQueueInsertDebugUtilsLabelEXT vkQueueInsertDebugUtilsLabelEXT;\n  PFN_vkSetDebugUtilsObjectNameEXT vkSetDebugUtilsObjectNameEXT;\n  PFN_vkSetDebugUtilsObjectTagEXT vkSetDebugUtilsObjectTagEXT;\n  PFN_vkSubmitDebugUtilsMessageEXT vkSubmitDebugUtilsMessageEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment18[11];\n#endif /* defined(VK_EXT_debug_utils) */\n#if defined(VK_EXT_direct_mode_display)\n  PFN_vkReleaseDisplayEXT vkReleaseDisplayEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment19;\n#endif /* defined(VK_EXT_direct_mode_display) */\n#if defined(VK_EXT_directfb_surface)\n  PFN_vkCreateDirectFBSurfaceEXT vkCreateDirectFBSurfaceEXT;\n  PFN_vkGetPhysicalDeviceDirectFBPresentationSupportEXT\n      vkGetPhysicalDeviceDirectFBPresentationSupportEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment20[2];\n#endif /* defined(VK_EXT_directfb_surface) */\n#if defined(VK_EXT_discard_rectangles)\n  PFN_vkCmdSetDiscardRectangleEXT vkCmdSetDiscardRectangleEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment21;\n#endif /* defined(VK_EXT_discard_rectangles) */\n#if defined(VK_EXT_display_control)\n  PFN_vkDisplayPowerControlEXT vkDisplayPowerControlEXT;\n  PFN_vkGetSwapchainCounterEXT vkGetSwapchainCounterEXT;\n  PFN_vkRegisterDeviceEventEXT vkRegisterDeviceEventEXT;\n  PFN_vkRegisterDisplayEventEXT vkRegisterDisplayEventEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment22[4];\n#endif /* defined(VK_EXT_display_control) */\n#if defined(VK_EXT_display_surface_counter)\n  PFN_vkGetPhysicalDeviceSurfaceCapabilities2EXT vkGetPhysicalDeviceSurfaceCapabilities2EXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment23;\n#endif /* defined(VK_EXT_display_surface_counter) */\n#if defined(VK_EXT_extended_dynamic_state)\n  PFN_vkCmdBindVertexBuffers2EXT vkCmdBindVertexBuffers2EXT;\n  PFN_vkCmdSetCullModeEXT vkCmdSetCullModeEXT;\n  PFN_vkCmdSetDepthBoundsTestEnableEXT vkCmdSetDepthBoundsTestEnableEXT;\n  PFN_vkCmdSetDepthCompareOpEXT vkCmdSetDepthCompareOpEXT;\n  PFN_vkCmdSetDepthTestEnableEXT vkCmdSetDepthTestEnableEXT;\n  PFN_vkCmdSetDepthWriteEnableEXT vkCmdSetDepthWriteEnableEXT;\n  PFN_vkCmdSetFrontFaceEXT vkCmdSetFrontFaceEXT;\n  PFN_vkCmdSetPrimitiveTopologyEXT vkCmdSetPrimitiveTopologyEXT;\n  PFN_vkCmdSetScissorWithCountEXT vkCmdSetScissorWithCountEXT;\n  PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT;\n  PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT;\n  PFN_vkCmdSetViewportWithCountEXT vkCmdSetViewportWithCountEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment24[12];\n#endif /* defined(VK_EXT_extended_dynamic_state) */\n#if defined(VK_EXT_extended_dynamic_state2)\n  PFN_vkCmdSetDepthBiasEnableEXT vkCmdSetDepthBiasEnableEXT;\n  PFN_vkCmdSetLogicOpEXT vkCmdSetLogicOpEXT;\n  PFN_vkCmdSetPatchControlPointsEXT vkCmdSetPatchControlPointsEXT;\n  PFN_vkCmdSetPrimitiveRestartEnableEXT vkCmdSetPrimitiveRestartEnableEXT;\n  PFN_vkCmdSetRasterizerDiscardEnableEXT vkCmdSetRasterizerDiscardEnableEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment25[5];\n#endif /* defined(VK_EXT_extended_dynamic_state2) */\n#if defined(VK_EXT_external_memory_host)\n  PFN_vkGetMemoryHostPointerPropertiesEXT vkGetMemoryHostPointerPropertiesEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment26;\n#endif /* defined(VK_EXT_external_memory_host) */\n#if defined(VK_EXT_full_screen_exclusive)\n  PFN_vkAcquireFullScreenExclusiveModeEXT vkAcquireFullScreenExclusiveModeEXT;\n  PFN_vkGetPhysicalDeviceSurfacePresentModes2EXT vkGetPhysicalDeviceSurfacePresentModes2EXT;\n  PFN_vkReleaseFullScreenExclusiveModeEXT vkReleaseFullScreenExclusiveModeEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment27[3];\n#endif /* defined(VK_EXT_full_screen_exclusive) */\n#if defined(VK_EXT_hdr_metadata)\n  PFN_vkSetHdrMetadataEXT vkSetHdrMetadataEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment28;\n#endif /* defined(VK_EXT_hdr_metadata) */\n#if defined(VK_EXT_headless_surface)\n  PFN_vkCreateHeadlessSurfaceEXT vkCreateHeadlessSurfaceEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment29;\n#endif /* defined(VK_EXT_headless_surface) */\n#if defined(VK_EXT_host_query_reset)\n  PFN_vkResetQueryPoolEXT vkResetQueryPoolEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment30;\n#endif /* defined(VK_EXT_host_query_reset) */\n#if defined(VK_EXT_image_drm_format_modifier)\n  PFN_vkGetImageDrmFormatModifierPropertiesEXT vkGetImageDrmFormatModifierPropertiesEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment31;\n#endif /* defined(VK_EXT_image_drm_format_modifier) */\n#if defined(VK_EXT_line_rasterization)\n  PFN_vkCmdSetLineStippleEXT vkCmdSetLineStippleEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment32;\n#endif /* defined(VK_EXT_line_rasterization) */\n#if defined(VK_EXT_metal_surface)\n  PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment33;\n#endif /* defined(VK_EXT_metal_surface) */\n#if defined(VK_EXT_multi_draw)\n  PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;\n  PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment34[2];\n#endif /* defined(VK_EXT_multi_draw) */\n#if defined(VK_EXT_pageable_device_local_memory)\n  PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment35;\n#endif /* defined(VK_EXT_pageable_device_local_memory) */\n#if defined(VK_EXT_private_data)\n  PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;\n  PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;\n  PFN_vkGetPrivateDataEXT vkGetPrivateDataEXT;\n  PFN_vkSetPrivateDataEXT vkSetPrivateDataEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment36[4];\n#endif /* defined(VK_EXT_private_data) */\n#if defined(VK_EXT_sample_locations)\n  PFN_vkCmdSetSampleLocationsEXT vkCmdSetSampleLocationsEXT;\n  PFN_vkGetPhysicalDeviceMultisamplePropertiesEXT vkGetPhysicalDeviceMultisamplePropertiesEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment37[2];\n#endif /* defined(VK_EXT_sample_locations) */\n#if defined(VK_EXT_tooling_info)\n  PFN_vkGetPhysicalDeviceToolPropertiesEXT vkGetPhysicalDeviceToolPropertiesEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment38;\n#endif /* defined(VK_EXT_tooling_info) */\n#if defined(VK_EXT_transform_feedback)\n  PFN_vkCmdBeginQueryIndexedEXT vkCmdBeginQueryIndexedEXT;\n  PFN_vkCmdBeginTransformFeedbackEXT vkCmdBeginTransformFeedbackEXT;\n  PFN_vkCmdBindTransformFeedbackBuffersEXT vkCmdBindTransformFeedbackBuffersEXT;\n  PFN_vkCmdDrawIndirectByteCountEXT vkCmdDrawIndirectByteCountEXT;\n  PFN_vkCmdEndQueryIndexedEXT vkCmdEndQueryIndexedEXT;\n  PFN_vkCmdEndTransformFeedbackEXT vkCmdEndTransformFeedbackEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment39[6];\n#endif /* defined(VK_EXT_transform_feedback) */\n#if defined(VK_EXT_validation_cache)\n  PFN_vkCreateValidationCacheEXT vkCreateValidationCacheEXT;\n  PFN_vkDestroyValidationCacheEXT vkDestroyValidationCacheEXT;\n  PFN_vkGetValidationCacheDataEXT vkGetValidationCacheDataEXT;\n  PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment40[4];\n#endif /* defined(VK_EXT_validation_cache) */\n#if defined(VK_EXT_vertex_input_dynamic_state)\n  PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment41;\n#endif /* defined(VK_EXT_vertex_input_dynamic_state) */\n#if defined(VK_FUCHSIA_buffer_collection)\n  PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;\n  PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;\n  PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;\n  PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;\n  PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;\n#else\n  PFN_vkVoidFunction ignoreAlignment42[5];\n#endif /* defined(VK_FUCHSIA_buffer_collection) */\n#if defined(VK_FUCHSIA_external_memory)\n  PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;\n  PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;\n#else\n  PFN_vkVoidFunction ignoreAlignment43[2];\n#endif /* defined(VK_FUCHSIA_external_memory) */\n#if defined(VK_FUCHSIA_external_semaphore)\n  PFN_vkGetSemaphoreZirconHandleFUCHSIA vkGetSemaphoreZirconHandleFUCHSIA;\n  PFN_vkImportSemaphoreZirconHandleFUCHSIA vkImportSemaphoreZirconHandleFUCHSIA;\n#else\n  PFN_vkVoidFunction ignoreAlignment44[2];\n#endif /* defined(VK_FUCHSIA_external_semaphore) */\n#if defined(VK_FUCHSIA_imagepipe_surface)\n  PFN_vkCreateImagePipeSurfaceFUCHSIA vkCreateImagePipeSurfaceFUCHSIA;\n#else\n  PFN_vkVoidFunction ignoreAlignment45;\n#endif /* defined(VK_FUCHSIA_imagepipe_surface) */\n#if defined(VK_GGP_stream_descriptor_surface)\n  PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP;\n#else\n  PFN_vkVoidFunction ignoreAlignment46;\n#endif /* defined(VK_GGP_stream_descriptor_surface) */\n#if defined(VK_GOOGLE_display_timing)\n  PFN_vkGetPastPresentationTimingGOOGLE vkGetPastPresentationTimingGOOGLE;\n  PFN_vkGetRefreshCycleDurationGOOGLE vkGetRefreshCycleDurationGOOGLE;\n#else\n  PFN_vkVoidFunction ignoreAlignment47[2];\n#endif /* defined(VK_GOOGLE_display_timing) */\n#if defined(VK_HUAWEI_invocation_mask)\n  PFN_vkCmdBindInvocationMaskHUAWEI vkCmdBindInvocationMaskHUAWEI;\n#else\n  PFN_vkVoidFunction ignoreAlignment48;\n#endif /* defined(VK_HUAWEI_invocation_mask) */\n#if defined(VK_HUAWEI_subpass_shading)\n  PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI;\n  PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI\n      vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI;\n#else\n  PFN_vkVoidFunction ignoreAlignment49[2];\n#endif /* defined(VK_HUAWEI_subpass_shading) */\n#if defined(VK_INTEL_performance_query)\n  PFN_vkAcquirePerformanceConfigurationINTEL vkAcquirePerformanceConfigurationINTEL;\n  PFN_vkCmdSetPerformanceMarkerINTEL vkCmdSetPerformanceMarkerINTEL;\n  PFN_vkCmdSetPerformanceOverrideINTEL vkCmdSetPerformanceOverrideINTEL;\n  PFN_vkCmdSetPerformanceStreamMarkerINTEL vkCmdSetPerformanceStreamMarkerINTEL;\n  PFN_vkGetPerformanceParameterINTEL vkGetPerformanceParameterINTEL;\n  PFN_vkInitializePerformanceApiINTEL vkInitializePerformanceApiINTEL;\n  PFN_vkQueueSetPerformanceConfigurationINTEL vkQueueSetPerformanceConfigurationINTEL;\n  PFN_vkReleasePerformanceConfigurationINTEL vkReleasePerformanceConfigurationINTEL;\n  PFN_vkUninitializePerformanceApiINTEL vkUninitializePerformanceApiINTEL;\n#else\n  PFN_vkVoidFunction ignoreAlignment50[9];\n#endif /* defined(VK_INTEL_performance_query) */\n#if defined(VK_KHR_acceleration_structure)\n  PFN_vkBuildAccelerationStructuresKHR vkBuildAccelerationStructuresKHR;\n  PFN_vkCmdBuildAccelerationStructuresIndirectKHR vkCmdBuildAccelerationStructuresIndirectKHR;\n  PFN_vkCmdBuildAccelerationStructuresKHR vkCmdBuildAccelerationStructuresKHR;\n  PFN_vkCmdCopyAccelerationStructureKHR vkCmdCopyAccelerationStructureKHR;\n  PFN_vkCmdCopyAccelerationStructureToMemoryKHR vkCmdCopyAccelerationStructureToMemoryKHR;\n  PFN_vkCmdCopyMemoryToAccelerationStructureKHR vkCmdCopyMemoryToAccelerationStructureKHR;\n  PFN_vkCmdWriteAccelerationStructuresPropertiesKHR vkCmdWriteAccelerationStructuresPropertiesKHR;\n  PFN_vkCopyAccelerationStructureKHR vkCopyAccelerationStructureKHR;\n  PFN_vkCopyAccelerationStructureToMemoryKHR vkCopyAccelerationStructureToMemoryKHR;\n  PFN_vkCopyMemoryToAccelerationStructureKHR vkCopyMemoryToAccelerationStructureKHR;\n  PFN_vkCreateAccelerationStructureKHR vkCreateAccelerationStructureKHR;\n  PFN_vkDestroyAccelerationStructureKHR vkDestroyAccelerationStructureKHR;\n  PFN_vkGetAccelerationStructureBuildSizesKHR vkGetAccelerationStructureBuildSizesKHR;\n  PFN_vkGetAccelerationStructureDeviceAddressKHR vkGetAccelerationStructureDeviceAddressKHR;\n  PFN_vkGetDeviceAccelerationStructureCompatibilityKHR\n      vkGetDeviceAccelerationStructureCompatibilityKHR;\n  PFN_vkWriteAccelerationStructuresPropertiesKHR vkWriteAccelerationStructuresPropertiesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment51[16];\n#endif /* defined(VK_KHR_acceleration_structure) */\n#if defined(VK_KHR_android_surface)\n  PFN_vkCreateAndroidSurfaceKHR vkCreateAndroidSurfaceKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment52;\n#endif /* defined(VK_KHR_android_surface) */\n#if defined(VK_KHR_bind_memory2)\n  PFN_vkBindBufferMemory2KHR vkBindBufferMemory2KHR;\n  PFN_vkBindImageMemory2KHR vkBindImageMemory2KHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment53[2];\n#endif /* defined(VK_KHR_bind_memory2) */\n#if defined(VK_KHR_buffer_device_address)\n  PFN_vkGetBufferDeviceAddressKHR vkGetBufferDeviceAddressKHR;\n  PFN_vkGetBufferOpaqueCaptureAddressKHR vkGetBufferOpaqueCaptureAddressKHR;\n  PFN_vkGetDeviceMemoryOpaqueCaptureAddressKHR vkGetDeviceMemoryOpaqueCaptureAddressKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment54[3];\n#endif /* defined(VK_KHR_buffer_device_address) */\n#if defined(VK_KHR_copy_commands2)\n  PFN_vkCmdBlitImage2KHR vkCmdBlitImage2KHR;\n  PFN_vkCmdCopyBuffer2KHR vkCmdCopyBuffer2KHR;\n  PFN_vkCmdCopyBufferToImage2KHR vkCmdCopyBufferToImage2KHR;\n  PFN_vkCmdCopyImage2KHR vkCmdCopyImage2KHR;\n  PFN_vkCmdCopyImageToBuffer2KHR vkCmdCopyImageToBuffer2KHR;\n  PFN_vkCmdResolveImage2KHR vkCmdResolveImage2KHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment55[6];\n#endif /* defined(VK_KHR_copy_commands2) */\n#if defined(VK_KHR_create_renderpass2)\n  PFN_vkCmdBeginRenderPass2KHR vkCmdBeginRenderPass2KHR;\n  PFN_vkCmdEndRenderPass2KHR vkCmdEndRenderPass2KHR;\n  PFN_vkCmdNextSubpass2KHR vkCmdNextSubpass2KHR;\n  PFN_vkCreateRenderPass2KHR vkCreateRenderPass2KHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment56[4];\n#endif /* defined(VK_KHR_create_renderpass2) */\n#if defined(VK_KHR_deferred_host_operations)\n  PFN_vkCreateDeferredOperationKHR vkCreateDeferredOperationKHR;\n  PFN_vkDeferredOperationJoinKHR vkDeferredOperationJoinKHR;\n  PFN_vkDestroyDeferredOperationKHR vkDestroyDeferredOperationKHR;\n  PFN_vkGetDeferredOperationMaxConcurrencyKHR vkGetDeferredOperationMaxConcurrencyKHR;\n  PFN_vkGetDeferredOperationResultKHR vkGetDeferredOperationResultKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment57[5];\n#endif /* defined(VK_KHR_deferred_host_operations) */\n#if defined(VK_KHR_descriptor_update_template)\n  PFN_vkCreateDescriptorUpdateTemplateKHR vkCreateDescriptorUpdateTemplateKHR;\n  PFN_vkDestroyDescriptorUpdateTemplateKHR vkDestroyDescriptorUpdateTemplateKHR;\n  PFN_vkUpdateDescriptorSetWithTemplateKHR vkUpdateDescriptorSetWithTemplateKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment58[3];\n#endif /* defined(VK_KHR_descriptor_update_template) */\n#if defined(VK_KHR_device_group)\n  PFN_vkCmdDispatchBaseKHR vkCmdDispatchBaseKHR;\n  PFN_vkCmdSetDeviceMaskKHR vkCmdSetDeviceMaskKHR;\n  PFN_vkGetDeviceGroupPeerMemoryFeaturesKHR vkGetDeviceGroupPeerMemoryFeaturesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment59[3];\n#endif /* defined(VK_KHR_device_group) */\n#if defined(VK_KHR_device_group_creation)\n  PFN_vkEnumeratePhysicalDeviceGroupsKHR vkEnumeratePhysicalDeviceGroupsKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment60;\n#endif /* defined(VK_KHR_device_group_creation) */\n#if defined(VK_KHR_display)\n  PFN_vkCreateDisplayModeKHR vkCreateDisplayModeKHR;\n  PFN_vkCreateDisplayPlaneSurfaceKHR vkCreateDisplayPlaneSurfaceKHR;\n  PFN_vkGetDisplayModePropertiesKHR vkGetDisplayModePropertiesKHR;\n  PFN_vkGetDisplayPlaneCapabilitiesKHR vkGetDisplayPlaneCapabilitiesKHR;\n  PFN_vkGetDisplayPlaneSupportedDisplaysKHR vkGetDisplayPlaneSupportedDisplaysKHR;\n  PFN_vkGetPhysicalDeviceDisplayPlanePropertiesKHR vkGetPhysicalDeviceDisplayPlanePropertiesKHR;\n  PFN_vkGetPhysicalDeviceDisplayPropertiesKHR vkGetPhysicalDeviceDisplayPropertiesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment61[7];\n#endif /* defined(VK_KHR_display) */\n#if defined(VK_KHR_display_swapchain)\n  PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment62;\n#endif /* defined(VK_KHR_display_swapchain) */\n#if defined(VK_KHR_draw_indirect_count)\n  PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;\n  PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment63[2];\n#endif /* defined(VK_KHR_draw_indirect_count) */\n#if defined(VK_KHR_dynamic_rendering)\n  PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;\n  PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment64[2];\n#endif /* defined(VK_KHR_dynamic_rendering) */\n#if defined(VK_KHR_external_fence_capabilities)\n  PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment65;\n#endif /* defined(VK_KHR_external_fence_capabilities) */\n#if defined(VK_KHR_external_fence_fd)\n  PFN_vkGetFenceFdKHR vkGetFenceFdKHR;\n  PFN_vkImportFenceFdKHR vkImportFenceFdKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment66[2];\n#endif /* defined(VK_KHR_external_fence_fd) */\n#if defined(VK_KHR_external_fence_win32)\n  PFN_vkGetFenceWin32HandleKHR vkGetFenceWin32HandleKHR;\n  PFN_vkImportFenceWin32HandleKHR vkImportFenceWin32HandleKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment67[2];\n#endif /* defined(VK_KHR_external_fence_win32) */\n#if defined(VK_KHR_external_memory_capabilities)\n  PFN_vkGetPhysicalDeviceExternalBufferPropertiesKHR vkGetPhysicalDeviceExternalBufferPropertiesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment68;\n#endif /* defined(VK_KHR_external_memory_capabilities) */\n#if defined(VK_KHR_external_memory_fd)\n  PFN_vkGetMemoryFdKHR vkGetMemoryFdKHR;\n  PFN_vkGetMemoryFdPropertiesKHR vkGetMemoryFdPropertiesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment69[2];\n#endif /* defined(VK_KHR_external_memory_fd) */\n#if defined(VK_KHR_external_memory_win32)\n  PFN_vkGetMemoryWin32HandleKHR vkGetMemoryWin32HandleKHR;\n  PFN_vkGetMemoryWin32HandlePropertiesKHR vkGetMemoryWin32HandlePropertiesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment70[2];\n#endif /* defined(VK_KHR_external_memory_win32) */\n#if defined(VK_KHR_external_semaphore_capabilities)\n  PFN_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR\n      vkGetPhysicalDeviceExternalSemaphorePropertiesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment71;\n#endif /* defined(VK_KHR_external_semaphore_capabilities) */\n#if defined(VK_KHR_external_semaphore_fd)\n  PFN_vkGetSemaphoreFdKHR vkGetSemaphoreFdKHR;\n  PFN_vkImportSemaphoreFdKHR vkImportSemaphoreFdKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment72[2];\n#endif /* defined(VK_KHR_external_semaphore_fd) */\n#if defined(VK_KHR_external_semaphore_win32)\n  PFN_vkGetSemaphoreWin32HandleKHR vkGetSemaphoreWin32HandleKHR;\n  PFN_vkImportSemaphoreWin32HandleKHR vkImportSemaphoreWin32HandleKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment73[2];\n#endif /* defined(VK_KHR_external_semaphore_win32) */\n#if defined(VK_KHR_fragment_shading_rate)\n  PFN_vkCmdSetFragmentShadingRateKHR vkCmdSetFragmentShadingRateKHR;\n  PFN_vkGetPhysicalDeviceFragmentShadingRatesKHR vkGetPhysicalDeviceFragmentShadingRatesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment74[2];\n#endif /* defined(VK_KHR_fragment_shading_rate) */\n#if defined(VK_KHR_get_display_properties2)\n  PFN_vkGetDisplayModeProperties2KHR vkGetDisplayModeProperties2KHR;\n  PFN_vkGetDisplayPlaneCapabilities2KHR vkGetDisplayPlaneCapabilities2KHR;\n  PFN_vkGetPhysicalDeviceDisplayPlaneProperties2KHR vkGetPhysicalDeviceDisplayPlaneProperties2KHR;\n  PFN_vkGetPhysicalDeviceDisplayProperties2KHR vkGetPhysicalDeviceDisplayProperties2KHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment75[4];\n#endif /* defined(VK_KHR_get_display_properties2) */\n#if defined(VK_KHR_get_memory_requirements2)\n  PFN_vkGetBufferMemoryRequirements2KHR vkGetBufferMemoryRequirements2KHR;\n  PFN_vkGetImageMemoryRequirements2KHR vkGetImageMemoryRequirements2KHR;\n  PFN_vkGetImageSparseMemoryRequirements2KHR vkGetImageSparseMemoryRequirements2KHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment76[3];\n#endif /* defined(VK_KHR_get_memory_requirements2) */\n#if defined(VK_KHR_get_physical_device_properties2)\n  PFN_vkGetPhysicalDeviceFeatures2KHR vkGetPhysicalDeviceFeatures2KHR;\n  PFN_vkGetPhysicalDeviceFormatProperties2KHR vkGetPhysicalDeviceFormatProperties2KHR;\n  PFN_vkGetPhysicalDeviceImageFormatProperties2KHR vkGetPhysicalDeviceImageFormatProperties2KHR;\n  PFN_vkGetPhysicalDeviceMemoryProperties2KHR vkGetPhysicalDeviceMemoryProperties2KHR;\n  PFN_vkGetPhysicalDeviceProperties2KHR vkGetPhysicalDeviceProperties2KHR;\n  PFN_vkGetPhysicalDeviceQueueFamilyProperties2KHR vkGetPhysicalDeviceQueueFamilyProperties2KHR;\n  PFN_vkGetPhysicalDeviceSparseImageFormatProperties2KHR\n      vkGetPhysicalDeviceSparseImageFormatProperties2KHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment77[7];\n#endif /* defined(VK_KHR_get_physical_device_properties2) */\n#if defined(VK_KHR_get_surface_capabilities2)\n  PFN_vkGetPhysicalDeviceSurfaceCapabilities2KHR vkGetPhysicalDeviceSurfaceCapabilities2KHR;\n  PFN_vkGetPhysicalDeviceSurfaceFormats2KHR vkGetPhysicalDeviceSurfaceFormats2KHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment78[2];\n#endif /* defined(VK_KHR_get_surface_capabilities2) */\n#if defined(VK_KHR_maintenance1)\n  PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment79;\n#endif /* defined(VK_KHR_maintenance1) */\n#if defined(VK_KHR_maintenance3)\n  PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment80;\n#endif /* defined(VK_KHR_maintenance3) */\n#if defined(VK_KHR_maintenance4)\n  PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;\n  PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;\n  PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment81[3];\n#endif /* defined(VK_KHR_maintenance4) */\n#if defined(VK_KHR_performance_query)\n  PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;\n  PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR\n      vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;\n  PFN_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR\n      vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR;\n  PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment82[4];\n#endif /* defined(VK_KHR_performance_query) */\n#if defined(VK_KHR_pipeline_executable_properties)\n  PFN_vkGetPipelineExecutableInternalRepresentationsKHR\n      vkGetPipelineExecutableInternalRepresentationsKHR;\n  PFN_vkGetPipelineExecutablePropertiesKHR vkGetPipelineExecutablePropertiesKHR;\n  PFN_vkGetPipelineExecutableStatisticsKHR vkGetPipelineExecutableStatisticsKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment83[3];\n#endif /* defined(VK_KHR_pipeline_executable_properties) */\n#if defined(VK_KHR_present_wait)\n  PFN_vkWaitForPresentKHR vkWaitForPresentKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment84;\n#endif /* defined(VK_KHR_present_wait) */\n#if defined(VK_KHR_push_descriptor)\n  PFN_vkCmdPushDescriptorSetKHR vkCmdPushDescriptorSetKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment85;\n#endif /* defined(VK_KHR_push_descriptor) */\n#if defined(VK_KHR_ray_tracing_pipeline)\n  PFN_vkCmdSetRayTracingPipelineStackSizeKHR vkCmdSetRayTracingPipelineStackSizeKHR;\n  PFN_vkCmdTraceRaysIndirectKHR vkCmdTraceRaysIndirectKHR;\n  PFN_vkCmdTraceRaysKHR vkCmdTraceRaysKHR;\n  PFN_vkCreateRayTracingPipelinesKHR vkCreateRayTracingPipelinesKHR;\n  PFN_vkGetRayTracingCaptureReplayShaderGroupHandlesKHR\n      vkGetRayTracingCaptureReplayShaderGroupHandlesKHR;\n  PFN_vkGetRayTracingShaderGroupHandlesKHR vkGetRayTracingShaderGroupHandlesKHR;\n  PFN_vkGetRayTracingShaderGroupStackSizeKHR vkGetRayTracingShaderGroupStackSizeKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment86[7];\n#endif /* defined(VK_KHR_ray_tracing_pipeline) */\n#if defined(VK_KHR_sampler_ycbcr_conversion)\n  PFN_vkCreateSamplerYcbcrConversionKHR vkCreateSamplerYcbcrConversionKHR;\n  PFN_vkDestroySamplerYcbcrConversionKHR vkDestroySamplerYcbcrConversionKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment87[2];\n#endif /* defined(VK_KHR_sampler_ycbcr_conversion) */\n#if defined(VK_KHR_shared_presentable_image)\n  PFN_vkGetSwapchainStatusKHR vkGetSwapchainStatusKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment88;\n#endif /* defined(VK_KHR_shared_presentable_image) */\n#if defined(VK_KHR_surface)\n  PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR;\n  PFN_vkGetPhysicalDeviceSurfaceCapabilitiesKHR vkGetPhysicalDeviceSurfaceCapabilitiesKHR;\n  PFN_vkGetPhysicalDeviceSurfaceFormatsKHR vkGetPhysicalDeviceSurfaceFormatsKHR;\n  PFN_vkGetPhysicalDeviceSurfacePresentModesKHR vkGetPhysicalDeviceSurfacePresentModesKHR;\n  PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment89[5];\n#endif /* defined(VK_KHR_surface) */\n#if defined(VK_KHR_swapchain)\n  PFN_vkAcquireNextImageKHR vkAcquireNextImageKHR;\n  PFN_vkCreateSwapchainKHR vkCreateSwapchainKHR;\n  PFN_vkDestroySwapchainKHR vkDestroySwapchainKHR;\n  PFN_vkGetSwapchainImagesKHR vkGetSwapchainImagesKHR;\n  PFN_vkQueuePresentKHR vkQueuePresentKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment90[5];\n#endif /* defined(VK_KHR_swapchain) */\n#if defined(VK_KHR_synchronization2)\n  PFN_vkCmdPipelineBarrier2KHR vkCmdPipelineBarrier2KHR;\n  PFN_vkCmdResetEvent2KHR vkCmdResetEvent2KHR;\n  PFN_vkCmdSetEvent2KHR vkCmdSetEvent2KHR;\n  PFN_vkCmdWaitEvents2KHR vkCmdWaitEvents2KHR;\n  PFN_vkCmdWriteTimestamp2KHR vkCmdWriteTimestamp2KHR;\n  PFN_vkQueueSubmit2KHR vkQueueSubmit2KHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment91[6];\n#endif /* defined(VK_KHR_synchronization2) */\n#if defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker)\n  PFN_vkCmdWriteBufferMarker2AMD vkCmdWriteBufferMarker2AMD;\n#else\n  PFN_vkVoidFunction ignoreAlignment92;\n#endif /* defined(VK_KHR_synchronization2) && defined(VK_AMD_buffer_marker) */\n#if defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints)\n  PFN_vkGetQueueCheckpointData2NV vkGetQueueCheckpointData2NV;\n#else\n  PFN_vkVoidFunction ignoreAlignment93;\n#endif /* defined(VK_KHR_synchronization2) && defined(VK_NV_device_diagnostic_checkpoints) */\n#if defined(VK_KHR_timeline_semaphore)\n  PFN_vkGetSemaphoreCounterValueKHR vkGetSemaphoreCounterValueKHR;\n  PFN_vkSignalSemaphoreKHR vkSignalSemaphoreKHR;\n  PFN_vkWaitSemaphoresKHR vkWaitSemaphoresKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment94[3];\n#endif /* defined(VK_KHR_timeline_semaphore) */\n#if defined(VK_KHR_video_decode_queue)\n  PFN_vkCmdDecodeVideoKHR vkCmdDecodeVideoKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment95;\n#endif /* defined(VK_KHR_video_decode_queue) */\n#if defined(VK_KHR_video_encode_queue)\n  PFN_vkCmdEncodeVideoKHR vkCmdEncodeVideoKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment96;\n#endif /* defined(VK_KHR_video_encode_queue) */\n#if defined(VK_KHR_video_queue)\n  PFN_vkBindVideoSessionMemoryKHR vkBindVideoSessionMemoryKHR;\n  PFN_vkCmdBeginVideoCodingKHR vkCmdBeginVideoCodingKHR;\n  PFN_vkCmdControlVideoCodingKHR vkCmdControlVideoCodingKHR;\n  PFN_vkCmdEndVideoCodingKHR vkCmdEndVideoCodingKHR;\n  PFN_vkCreateVideoSessionKHR vkCreateVideoSessionKHR;\n  PFN_vkCreateVideoSessionParametersKHR vkCreateVideoSessionParametersKHR;\n  PFN_vkDestroyVideoSessionKHR vkDestroyVideoSessionKHR;\n  PFN_vkDestroyVideoSessionParametersKHR vkDestroyVideoSessionParametersKHR;\n  PFN_vkGetPhysicalDeviceVideoCapabilitiesKHR vkGetPhysicalDeviceVideoCapabilitiesKHR;\n  PFN_vkGetPhysicalDeviceVideoFormatPropertiesKHR vkGetPhysicalDeviceVideoFormatPropertiesKHR;\n  PFN_vkGetVideoSessionMemoryRequirementsKHR vkGetVideoSessionMemoryRequirementsKHR;\n  PFN_vkUpdateVideoSessionParametersKHR vkUpdateVideoSessionParametersKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment97[12];\n#endif /* defined(VK_KHR_video_queue) */\n#if defined(VK_KHR_wayland_surface)\n  PFN_vkCreateWaylandSurfaceKHR vkCreateWaylandSurfaceKHR;\n  PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR\n      vkGetPhysicalDeviceWaylandPresentationSupportKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment98[2];\n#endif /* defined(VK_KHR_wayland_surface) */\n#if defined(VK_KHR_win32_surface)\n  PFN_vkCreateWin32SurfaceKHR vkCreateWin32SurfaceKHR;\n  PFN_vkGetPhysicalDeviceWin32PresentationSupportKHR vkGetPhysicalDeviceWin32PresentationSupportKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment99[2];\n#endif /* defined(VK_KHR_win32_surface) */\n#if defined(VK_KHR_xcb_surface)\n  PFN_vkCreateXcbSurfaceKHR vkCreateXcbSurfaceKHR;\n  PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR vkGetPhysicalDeviceXcbPresentationSupportKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment100[2];\n#endif /* defined(VK_KHR_xcb_surface) */\n#if defined(VK_KHR_xlib_surface)\n  PFN_vkCreateXlibSurfaceKHR vkCreateXlibSurfaceKHR;\n  PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR vkGetPhysicalDeviceXlibPresentationSupportKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment101[2];\n#endif /* defined(VK_KHR_xlib_surface) */\n#if defined(VK_MVK_ios_surface)\n  PFN_vkCreateIOSSurfaceMVK vkCreateIOSSurfaceMVK;\n#else\n  PFN_vkVoidFunction ignoreAlignment102;\n#endif /* defined(VK_MVK_ios_surface) */\n#if defined(VK_MVK_macos_surface)\n  PFN_vkCreateMacOSSurfaceMVK vkCreateMacOSSurfaceMVK;\n#else\n  PFN_vkVoidFunction ignoreAlignment103;\n#endif /* defined(VK_MVK_macos_surface) */\n#if defined(VK_NN_vi_surface)\n  PFN_vkCreateViSurfaceNN vkCreateViSurfaceNN;\n#else\n  PFN_vkVoidFunction ignoreAlignment104;\n#endif /* defined(VK_NN_vi_surface) */\n#if defined(VK_NVX_binary_import)\n  PFN_vkCmdCuLaunchKernelNVX vkCmdCuLaunchKernelNVX;\n  PFN_vkCreateCuFunctionNVX vkCreateCuFunctionNVX;\n  PFN_vkCreateCuModuleNVX vkCreateCuModuleNVX;\n  PFN_vkDestroyCuFunctionNVX vkDestroyCuFunctionNVX;\n  PFN_vkDestroyCuModuleNVX vkDestroyCuModuleNVX;\n#else\n  PFN_vkVoidFunction ignoreAlignment105[5];\n#endif /* defined(VK_NVX_binary_import) */\n#if defined(VK_NVX_image_view_handle)\n  PFN_vkGetImageViewAddressNVX vkGetImageViewAddressNVX;\n  PFN_vkGetImageViewHandleNVX vkGetImageViewHandleNVX;\n#else\n  PFN_vkVoidFunction ignoreAlignment106[2];\n#endif /* defined(VK_NVX_image_view_handle) */\n#if defined(VK_NV_acquire_winrt_display)\n  PFN_vkAcquireWinrtDisplayNV vkAcquireWinrtDisplayNV;\n  PFN_vkGetWinrtDisplayNV vkGetWinrtDisplayNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment107[2];\n#endif /* defined(VK_NV_acquire_winrt_display) */\n#if defined(VK_NV_clip_space_w_scaling)\n  PFN_vkCmdSetViewportWScalingNV vkCmdSetViewportWScalingNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment108;\n#endif /* defined(VK_NV_clip_space_w_scaling) */\n#if defined(VK_NV_cooperative_matrix)\n  PFN_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV\n      vkGetPhysicalDeviceCooperativeMatrixPropertiesNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment109;\n#endif /* defined(VK_NV_cooperative_matrix) */\n#if defined(VK_NV_coverage_reduction_mode)\n  PFN_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV\n      vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment110;\n#endif /* defined(VK_NV_coverage_reduction_mode) */\n#if defined(VK_NV_device_diagnostic_checkpoints)\n  PFN_vkCmdSetCheckpointNV vkCmdSetCheckpointNV;\n  PFN_vkGetQueueCheckpointDataNV vkGetQueueCheckpointDataNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment111[2];\n#endif /* defined(VK_NV_device_diagnostic_checkpoints) */\n#if defined(VK_NV_device_generated_commands)\n  PFN_vkCmdBindPipelineShaderGroupNV vkCmdBindPipelineShaderGroupNV;\n  PFN_vkCmdExecuteGeneratedCommandsNV vkCmdExecuteGeneratedCommandsNV;\n  PFN_vkCmdPreprocessGeneratedCommandsNV vkCmdPreprocessGeneratedCommandsNV;\n  PFN_vkCreateIndirectCommandsLayoutNV vkCreateIndirectCommandsLayoutNV;\n  PFN_vkDestroyIndirectCommandsLayoutNV vkDestroyIndirectCommandsLayoutNV;\n  PFN_vkGetGeneratedCommandsMemoryRequirementsNV vkGetGeneratedCommandsMemoryRequirementsNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment112[6];\n#endif /* defined(VK_NV_device_generated_commands) */\n#if defined(VK_NV_external_memory_capabilities)\n  PFN_vkGetPhysicalDeviceExternalImageFormatPropertiesNV\n      vkGetPhysicalDeviceExternalImageFormatPropertiesNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment113;\n#endif /* defined(VK_NV_external_memory_capabilities) */\n#if defined(VK_NV_external_memory_rdma)\n  PFN_vkGetMemoryRemoteAddressNV vkGetMemoryRemoteAddressNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment114;\n#endif /* defined(VK_NV_external_memory_rdma) */\n#if defined(VK_NV_external_memory_win32)\n  PFN_vkGetMemoryWin32HandleNV vkGetMemoryWin32HandleNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment115;\n#endif /* defined(VK_NV_external_memory_win32) */\n#if defined(VK_NV_fragment_shading_rate_enums)\n  PFN_vkCmdSetFragmentShadingRateEnumNV vkCmdSetFragmentShadingRateEnumNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment116;\n#endif /* defined(VK_NV_fragment_shading_rate_enums) */\n#if defined(VK_NV_mesh_shader)\n  PFN_vkCmdDrawMeshTasksIndirectCountNV vkCmdDrawMeshTasksIndirectCountNV;\n  PFN_vkCmdDrawMeshTasksIndirectNV vkCmdDrawMeshTasksIndirectNV;\n  PFN_vkCmdDrawMeshTasksNV vkCmdDrawMeshTasksNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment117[3];\n#endif /* defined(VK_NV_mesh_shader) */\n#if defined(VK_NV_ray_tracing)\n  PFN_vkBindAccelerationStructureMemoryNV vkBindAccelerationStructureMemoryNV;\n  PFN_vkCmdBuildAccelerationStructureNV vkCmdBuildAccelerationStructureNV;\n  PFN_vkCmdCopyAccelerationStructureNV vkCmdCopyAccelerationStructureNV;\n  PFN_vkCmdTraceRaysNV vkCmdTraceRaysNV;\n  PFN_vkCmdWriteAccelerationStructuresPropertiesNV vkCmdWriteAccelerationStructuresPropertiesNV;\n  PFN_vkCompileDeferredNV vkCompileDeferredNV;\n  PFN_vkCreateAccelerationStructureNV vkCreateAccelerationStructureNV;\n  PFN_vkCreateRayTracingPipelinesNV vkCreateRayTracingPipelinesNV;\n  PFN_vkDestroyAccelerationStructureNV vkDestroyAccelerationStructureNV;\n  PFN_vkGetAccelerationStructureHandleNV vkGetAccelerationStructureHandleNV;\n  PFN_vkGetAccelerationStructureMemoryRequirementsNV vkGetAccelerationStructureMemoryRequirementsNV;\n  PFN_vkGetRayTracingShaderGroupHandlesNV vkGetRayTracingShaderGroupHandlesNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment118[12];\n#endif /* defined(VK_NV_ray_tracing) */\n#if defined(VK_NV_scissor_exclusive)\n  PFN_vkCmdSetExclusiveScissorNV vkCmdSetExclusiveScissorNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment119;\n#endif /* defined(VK_NV_scissor_exclusive) */\n#if defined(VK_NV_shading_rate_image)\n  PFN_vkCmdBindShadingRateImageNV vkCmdBindShadingRateImageNV;\n  PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV;\n  PFN_vkCmdSetViewportShadingRatePaletteNV vkCmdSetViewportShadingRatePaletteNV;\n#else\n  PFN_vkVoidFunction ignoreAlignment120[3];\n#endif /* defined(VK_NV_shading_rate_image) */\n#if defined(VK_QNX_screen_surface)\n  PFN_vkCreateScreenSurfaceQNX vkCreateScreenSurfaceQNX;\n  PFN_vkGetPhysicalDeviceScreenPresentationSupportQNX\n      vkGetPhysicalDeviceScreenPresentationSupportQNX;\n#else\n  PFN_vkVoidFunction ignoreAlignment121[2];\n#endif /* defined(VK_QNX_screen_surface) */\n#if (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || \\\n    (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1))\n  PFN_vkGetDeviceGroupSurfacePresentModes2EXT vkGetDeviceGroupSurfacePresentModes2EXT;\n#else\n  PFN_vkVoidFunction ignoreAlignment122;\n#endif /* (defined(VK_EXT_full_screen_exclusive) && defined(VK_KHR_device_group)) || \\\n          (defined(VK_EXT_full_screen_exclusive) && defined(VK_VERSION_1_1)) */\n#if (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || \\\n    (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) ||                    \\\n    (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template))\n  PFN_vkCmdPushDescriptorSetWithTemplateKHR vkCmdPushDescriptorSetWithTemplateKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment123;\n#endif /* (defined(VK_KHR_descriptor_update_template) && defined(VK_KHR_push_descriptor)) || \\\n          (defined(VK_KHR_push_descriptor) && defined(VK_VERSION_1_1)) ||                    \\\n          (defined(VK_KHR_push_descriptor) && defined(VK_KHR_descriptor_update_template)) */\n#if (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || \\\n    (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1))\n  PFN_vkGetDeviceGroupPresentCapabilitiesKHR vkGetDeviceGroupPresentCapabilitiesKHR;\n  PFN_vkGetDeviceGroupSurfacePresentModesKHR vkGetDeviceGroupSurfacePresentModesKHR;\n  PFN_vkGetPhysicalDevicePresentRectanglesKHR vkGetPhysicalDevicePresentRectanglesKHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment124[3];\n#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_surface)) || (defined(VK_KHR_swapchain) \\\n          && defined(VK_VERSION_1_1)) */\n#if (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || \\\n    (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1))\n  PFN_vkAcquireNextImage2KHR vkAcquireNextImage2KHR;\n#else\n  PFN_vkVoidFunction ignoreAlignment125;\n#endif /* (defined(VK_KHR_device_group) && defined(VK_KHR_swapchain)) || \\\n          (defined(VK_KHR_swapchain) && defined(VK_VERSION_1_1)) */\n  /* IGL_GENERATE_FUNCTION_TABLE */\n};\n\n#ifdef __cplusplus\n/* IGL_GENERATE_SIZE_CHECK */\nstatic_assert(sizeof(VulkanFunctionTable) == 544 * sizeof(PFN_vkVoidFunction));\n/* IGL_GENERATE_SIZE_CHECK */\n#endif\n\n/// @brief Populates the `VulkanFunctionTable` structure. Requires a pointer to the\n/// vkGetInstanceProcAddr function, which is used to retrieve pointers to all non-instance and\n/// no-device functions defined in the `VulkanFunctionTable` structure.\nint loadVulkanLoaderFunctions(struct VulkanFunctionTable* table, PFN_vkGetInstanceProcAddr load);\n\n/// @brief Populates the instance function pointers in the `VulkanFunctionTable` structure. Requires\n/// a pointer to the vkGetInstanceProcAddr function, which is used to retrieve pointers to all\n/// instance functions defined in the `VulkanFunctionTable` structure.\nvoid loadVulkanInstanceFunctions(struct VulkanFunctionTable* table,\n                                 VkInstance context,\n                                 PFN_vkGetInstanceProcAddr load,\n                                 VkBool32 enableExtDebugUtils);\n\n/// @brief Populates the device function pointers in the `VulkanFunctionTable` structure. Requires a\n/// pointer to the vkGetInstanceProcAddr function, which is used to retrieve pointers to all device\n/// functions defined in the `VulkanFunctionTable` structure.\nvoid loadVulkanDeviceFunctions(struct VulkanFunctionTable* table,\n                               VkDevice context,\n                               PFN_vkGetDeviceProcAddr load);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "src/igl/vulkan/VulkanHelpers.c",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#if defined(VK_USE_PLATFORM_WIN32_KHR)\n#if !defined(WIN32_LEAN_AND_MEAN)\n#define WIN32_LEAN_AND_MEAN\n#endif\n#include <windows.h>\n#endif\n\n#include \"VulkanHelpers.h\"\n\n#include <assert.h>\n\nconst char* ivkGetVulkanResultString(VkResult result) {\n#define RESULT_CASE(res) \\\n  case res:              \\\n    return #res\n  switch (result) {\n    RESULT_CASE(VK_SUCCESS);\n    RESULT_CASE(VK_NOT_READY);\n    RESULT_CASE(VK_TIMEOUT);\n    RESULT_CASE(VK_EVENT_SET);\n    RESULT_CASE(VK_EVENT_RESET);\n    RESULT_CASE(VK_INCOMPLETE);\n    RESULT_CASE(VK_ERROR_OUT_OF_HOST_MEMORY);\n    RESULT_CASE(VK_ERROR_OUT_OF_DEVICE_MEMORY);\n    RESULT_CASE(VK_ERROR_INITIALIZATION_FAILED);\n    RESULT_CASE(VK_ERROR_DEVICE_LOST);\n    RESULT_CASE(VK_ERROR_MEMORY_MAP_FAILED);\n    RESULT_CASE(VK_ERROR_LAYER_NOT_PRESENT);\n    RESULT_CASE(VK_ERROR_EXTENSION_NOT_PRESENT);\n    RESULT_CASE(VK_ERROR_FEATURE_NOT_PRESENT);\n    RESULT_CASE(VK_ERROR_INCOMPATIBLE_DRIVER);\n    RESULT_CASE(VK_ERROR_TOO_MANY_OBJECTS);\n    RESULT_CASE(VK_ERROR_FORMAT_NOT_SUPPORTED);\n    RESULT_CASE(VK_ERROR_SURFACE_LOST_KHR);\n    RESULT_CASE(VK_ERROR_OUT_OF_DATE_KHR);\n    RESULT_CASE(VK_ERROR_INCOMPATIBLE_DISPLAY_KHR);\n    RESULT_CASE(VK_ERROR_NATIVE_WINDOW_IN_USE_KHR);\n    RESULT_CASE(VK_ERROR_VALIDATION_FAILED_EXT);\n    RESULT_CASE(VK_ERROR_FRAGMENTED_POOL);\n    RESULT_CASE(VK_ERROR_UNKNOWN);\n    // Provided by VK_VERSION_1_1\n    RESULT_CASE(VK_ERROR_OUT_OF_POOL_MEMORY);\n    // Provided by VK_VERSION_1_1\n    RESULT_CASE(VK_ERROR_INVALID_EXTERNAL_HANDLE);\n    // Provided by VK_VERSION_1_2\n    RESULT_CASE(VK_ERROR_FRAGMENTATION);\n    // Provided by VK_VERSION_1_2\n    RESULT_CASE(VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS);\n    // Provided by VK_KHR_swapchain\n    RESULT_CASE(VK_SUBOPTIMAL_KHR);\n    // Provided by VK_NV_glsl_shader\n    RESULT_CASE(VK_ERROR_INVALID_SHADER_NV);\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n    // Provided by VK_KHR_video_queue\n    RESULT_CASE(VK_ERROR_IMAGE_USAGE_NOT_SUPPORTED_KHR);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n    // Provided by VK_KHR_video_queue\n    RESULT_CASE(VK_ERROR_VIDEO_PICTURE_LAYOUT_NOT_SUPPORTED_KHR);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n    // Provided by VK_KHR_video_queue\n    RESULT_CASE(VK_ERROR_VIDEO_PROFILE_OPERATION_NOT_SUPPORTED_KHR);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n    // Provided by VK_KHR_video_queue\n    RESULT_CASE(VK_ERROR_VIDEO_PROFILE_FORMAT_NOT_SUPPORTED_KHR);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n    // Provided by VK_KHR_video_queue\n    RESULT_CASE(VK_ERROR_VIDEO_PROFILE_CODEC_NOT_SUPPORTED_KHR);\n#endif\n#ifdef VK_ENABLE_BETA_EXTENSIONS\n    // Provided by VK_KHR_video_queue\n    RESULT_CASE(VK_ERROR_VIDEO_STD_VERSION_NOT_SUPPORTED_KHR);\n#endif\n    // Provided by VK_EXT_image_drm_format_modifier\n    RESULT_CASE(VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT);\n    // Provided by VK_KHR_global_priority\n    RESULT_CASE(VK_ERROR_NOT_PERMITTED_KHR);\n    // Provided by VK_EXT_full_screen_exclusive\n    RESULT_CASE(VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT);\n    // Provided by VK_KHR_deferred_host_operations\n    RESULT_CASE(VK_THREAD_IDLE_KHR);\n    // Provided by VK_KHR_deferred_host_operations\n    RESULT_CASE(VK_THREAD_DONE_KHR);\n    // Provided by VK_KHR_deferred_host_operations\n    RESULT_CASE(VK_OPERATION_DEFERRED_KHR);\n    // Provided by VK_KHR_deferred_host_operations\n    RESULT_CASE(VK_OPERATION_NOT_DEFERRED_KHR);\n  default:\n    return \"Unknown VkResult Value\";\n  }\n#undef RESULT_CASE\n}\n\nVkResult ivkCreateCommandPool(const struct VulkanFunctionTable* vt,\n                              VkDevice device,\n                              VkCommandPoolCreateFlags flags,\n                              uint32_t queueFamilyIndex,\n                              VkCommandPool* outCommandPool) {\n  const VkCommandPoolCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO,\n      .pNext = NULL,\n      .flags = flags,\n      .queueFamilyIndex = queueFamilyIndex,\n  };\n\n  return vt->vkCreateCommandPool(device, &ci, NULL, outCommandPool);\n}\n\nVkResult ivkAllocateCommandBuffer(const struct VulkanFunctionTable* vt,\n                                  VkDevice device,\n                                  VkCommandPool commandPool,\n                                  VkCommandBuffer* outCommandBuffer) {\n  const VkCommandBufferAllocateInfo ai = {\n      .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,\n      .pNext = NULL,\n      .commandPool = commandPool,\n      .level = VK_COMMAND_BUFFER_LEVEL_PRIMARY,\n      .commandBufferCount = 1,\n  };\n\n  return vt->vkAllocateCommandBuffers(device, &ai, outCommandBuffer);\n}\n\nVkResult ivkAllocateMemory(const struct VulkanFunctionTable* vt,\n                           VkPhysicalDevice physDev,\n                           VkDevice device,\n                           const VkMemoryRequirements* memRequirements,\n                           VkMemoryPropertyFlags props,\n                           bool enableBufferDeviceAddress,\n                           VkDeviceMemory* outMemory) {\n  assert(memRequirements);\n\n  const VkMemoryAllocateFlagsInfo memoryAllocateFlagsInfo = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO,\n      .flags = enableBufferDeviceAddress ? VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR : 0,\n  };\n\n  VkPhysicalDeviceMemoryProperties memProperties;\n  vt->vkGetPhysicalDeviceMemoryProperties(physDev, &memProperties);\n\n  const VkMemoryAllocateInfo ai = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,\n      .pNext = &memoryAllocateFlagsInfo,\n      .allocationSize = memRequirements->size,\n      .memoryTypeIndex = ivkFindMemoryType(&memProperties, memRequirements->memoryTypeBits, props),\n  };\n\n  return vt->vkAllocateMemory(device, &ai, NULL, outMemory);\n}\n\nVkResult ivkAllocateMemory2(const struct VulkanFunctionTable* vt,\n                            VkPhysicalDevice physDev,\n                            VkDevice device,\n                            const VkMemoryRequirements2* memRequirements,\n                            VkMemoryPropertyFlags props,\n                            bool enableBufferDeviceAddress,\n                            VkDeviceMemory* outMemory) {\n  assert(memRequirements);\n\n  const VkMemoryAllocateFlagsInfo memoryAllocateFlagsInfo = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO,\n      .flags = enableBufferDeviceAddress ? VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR : 0,\n  };\n\n  VkPhysicalDeviceMemoryProperties memProperties;\n  vt->vkGetPhysicalDeviceMemoryProperties(physDev, &memProperties);\n\n  const VkMemoryAllocateInfo ai = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,\n      .pNext = &memoryAllocateFlagsInfo,\n      .allocationSize = memRequirements->memoryRequirements.size,\n      .memoryTypeIndex = ivkFindMemoryType(\n          &memProperties, memRequirements->memoryRequirements.memoryTypeBits, props),\n  };\n\n  return vt->vkAllocateMemory(device, &ai, NULL, outMemory);\n}\n\nbool ivkIsHostVisibleSingleHeapMemory(const VkPhysicalDeviceMemoryProperties* memProps) {\n  if (memProps->memoryHeapCount != 1) {\n    return false;\n  }\n\n  const uint32_t flag = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;\n\n  for (uint32_t i = 0; i < memProps->memoryTypeCount; i++) {\n    if ((memProps->memoryTypes[i].propertyFlags & flag) == flag) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nuint32_t ivkFindMemoryType(const VkPhysicalDeviceMemoryProperties* memProps,\n                           uint32_t memoryTypeBits,\n                           VkMemoryPropertyFlags flags) {\n  for (uint32_t i = 0; i < memProps->memoryTypeCount; i++) {\n    const bool hasProperties = (memProps->memoryTypes[i].propertyFlags & flags) == flags;\n    if ((memoryTypeBits & (1 << i)) && hasProperties) {\n      return i;\n    }\n  }\n\n  assert(false);\n\n  return 0;\n}\n\nvoid ivkAddNext(void* node, const void* next) {\n  if (!node || !next) {\n    return;\n  }\n\n  VkBaseInStructure* cur = (VkBaseInStructure*)node;\n\n  while (cur->pNext) {\n    cur = (VkBaseInStructure*)cur->pNext;\n  }\n\n  cur->pNext = next;\n}\n\nVkResult ivkCreateDevice(const struct VulkanFunctionTable* vt,\n                         VkPhysicalDevice physicalDevice,\n                         size_t numQueueCreateInfos,\n                         const VkDeviceQueueCreateInfo* queueCreateInfos,\n                         size_t numDeviceExtensions,\n                         const char** deviceExtensions,\n                         const VkPhysicalDeviceFeatures2* supported,\n                         VkDevice* outDevice) {\n  assert(numQueueCreateInfos >= 1);\n  const VkPhysicalDeviceFeatures deviceFeatures10 = {\n      .dualSrcBlend = supported ? supported->features.dualSrcBlend : VK_TRUE,\n      .multiDrawIndirect = supported ? supported->features.multiDrawIndirect : VK_TRUE,\n      .drawIndirectFirstInstance = supported ? supported->features.drawIndirectFirstInstance\n                                             : VK_TRUE,\n      .depthBiasClamp = supported ? supported->features.depthBiasClamp : VK_TRUE,\n      .fillModeNonSolid = supported ? supported->features.fillModeNonSolid : VK_TRUE,\n      .shaderInt16 = supported ? supported->features.shaderInt16 : VK_TRUE,\n      .samplerAnisotropy = supported ? supported->features.samplerAnisotropy : VK_TRUE,\n  };\n  VkDeviceCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,\n      .queueCreateInfoCount = (uint32_t)numQueueCreateInfos,\n      .pQueueCreateInfos = queueCreateInfos,\n      .enabledExtensionCount = (uint32_t)numDeviceExtensions,\n      .ppEnabledExtensionNames = deviceExtensions,\n      .pEnabledFeatures = &deviceFeatures10,\n  };\n\n  // Append all feature structs being requested for this device\n  ci.pNext = supported->pNext;\n\n  return vt->vkCreateDevice(physicalDevice, &ci, NULL, outDevice);\n}\n\n#if !IGL_PLATFORM_MACCATALYST\n#define VK_EXT_DEBUG_UTILS_SUPPORTED 1\n#else\n#define VK_EXT_DEBUG_UTILS_SUPPORTED 0\n#endif\n\n#if VK_EXT_DEBUG_UTILS_SUPPORTED\nVkResult ivkCreateDebugUtilsMessenger(const struct VulkanFunctionTable* vt,\n                                      VkInstance instance,\n                                      PFN_vkDebugUtilsMessengerCallbackEXT callback,\n                                      void* logUserData,\n                                      VkDebugUtilsMessengerEXT* outMessenger) {\n  // Some Android devices don't have the VK_EXT_debug_utils functions available, even though the\n  // extension is supported and has been enabled\n  if (vt->vkCreateDebugUtilsMessengerEXT == NULL) {\n    return VK_SUCCESS;\n  }\n\n  const VkDebugUtilsMessengerCreateInfoEXT ci = {\n      .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT,\n      .messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT |\n                         VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT |\n                         VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT |\n                         VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT,\n      .messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT |\n                     VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT |\n                     VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT,\n      .pfnUserCallback = callback,\n      .pUserData = logUserData,\n  };\n\n  return vt->vkCreateDebugUtilsMessengerEXT(instance, &ci, NULL, outMessenger);\n}\n#else // VK_EXT_DEBUG_UTILS_SUPPORTED\n// Stub version\nVkResult ivkCreateDebugUtilsMessenger(const struct VulkanFunctionTable* vt,\n                                      VkInstance instance,\n                                      PFN_vkDebugUtilsMessengerCallbackEXT callback,\n                                      void* logUserData,\n                                      VkDebugUtilsMessengerEXT* outMessenger) {\n  return VK_SUCCESS;\n}\n#endif // VK_EXT_DEBUG_UTILS_SUPPORTED\n\n#if defined(VK_EXT_debug_report)\nVkResult ivkCreateDebugReportMessenger(const struct VulkanFunctionTable* vt,\n                                       VkInstance instance,\n                                       PFN_vkDebugReportCallbackEXT callback,\n                                       void* logUserData,\n                                       VkDebugReportCallbackEXT* outMessenger) {\n  VkDebugReportCallbackCreateInfoEXT ci = {\n      .sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,\n      .flags = VK_DEBUG_REPORT_ERROR_BIT_EXT | VK_DEBUG_REPORT_WARNING_BIT_EXT |\n               VK_DEBUG_REPORT_DEBUG_BIT_EXT,\n      .pfnCallback = callback,\n      .pUserData = logUserData,\n  };\n\n  return vt->vkCreateDebugReportCallbackEXT(instance, &ci, NULL, outMessenger);\n}\n#else // defined(VK_EXT_debug_report)\n// Stub version\nVkResult ivkCreateDebugReportMessenger(VkInstance instance,\n                                       PFN_vkDebugReportCallbackEXT callback,\n                                       void* logUserData,\n                                       VkDebugReportCallbackEXT* outMessenger) {\n  return VK_SUCCESS;\n}\n#endif // defined(VK_EXT_debug_report)\n\nVkResult ivkCreateSurface(const struct VulkanFunctionTable* vt,\n                          VkInstance instance,\n                          void* window,\n                          void* display,\n                          void* layer,\n                          VkSurfaceKHR* outSurface) {\n#if !defined(VK_USE_PLATFORM_METAL_EXT)\n  (void)layer;\n#endif\n#if defined(VK_USE_PLATFORM_WIN32_KHR)\n  const VkWin32SurfaceCreateInfoKHR ci = {\n      .sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR,\n      .hinstance = GetModuleHandle(NULL),\n      .hwnd = (HWND)window,\n  };\n  return vt->vkCreateWin32SurfaceKHR(instance, &ci, NULL, outSurface);\n#elif defined(VK_USE_PLATFORM_ANDROID_KHR)\n  const VkAndroidSurfaceCreateInfoKHR ci = {\n      .sType = VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR,\n      .pNext = NULL,\n      .flags = 0,\n      .window = window,\n  };\n  return vt->vkCreateAndroidSurfaceKHR(instance, &ci, NULL, outSurface);\n#elif defined(VK_USE_PLATFORM_METAL_EXT)\n  const VkMetalSurfaceCreateInfoEXT ci = {\n      .sType = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT,\n      .pNext = NULL,\n      .flags = 0,\n      .pLayer = layer,\n  };\n  return vt->vkCreateMetalSurfaceEXT(instance, &ci, NULL, outSurface);\n#elif defined(VK_USE_PLATFORM_XLIB_KHR)\n  const VkXlibSurfaceCreateInfoKHR ci = {\n      .sType = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,\n      .pNext = NULL,\n      .flags = 0,\n      .dpy = (Display*)display,\n      .window = (Window)window,\n  };\n  return vt->vkCreateXlibSurfaceKHR(instance, &ci, NULL, outSurface);\n#else\n  (void)instance;\n  (void)window;\n  (void)outSurface;\n  // TODO: implement for other platforms\n  return VK_NOT_READY;\n#endif\n}\n\nVkResult ivkCreateSwapchain(const struct VulkanFunctionTable* vt,\n                            VkDevice device,\n                            VkSurfaceKHR surface,\n                            uint32_t minImageCount,\n                            VkSurfaceFormatKHR surfaceFormat,\n                            VkPresentModeKHR presentMode,\n                            const VkSurfaceCapabilitiesKHR* caps,\n                            VkImageUsageFlags imageUsage,\n                            uint32_t queueFamilyIndex,\n                            uint32_t width,\n                            uint32_t height,\n                            VkSwapchainKHR* outSwapchain) {\n  assert(caps);\n  const bool isCompositeAlphaOpaqueSupported =\n      (caps->supportedCompositeAlpha & VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR) != 0;\n  const VkSwapchainCreateInfoKHR ci = {\n      .sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,\n      .surface = surface,\n      .minImageCount = minImageCount,\n      .imageFormat = surfaceFormat.format,\n      .imageColorSpace = surfaceFormat.colorSpace,\n      .imageExtent = {.width = width, .height = height},\n      .imageArrayLayers = 1,\n      .imageUsage = imageUsage,\n      .imageSharingMode = VK_SHARING_MODE_EXCLUSIVE,\n      .queueFamilyIndexCount = 1,\n      .pQueueFamilyIndices = &queueFamilyIndex,\n      .preTransform = caps->currentTransform,\n      .compositeAlpha = isCompositeAlphaOpaqueSupported ? VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR\n                                                        : VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR,\n      .presentMode = presentMode,\n      .clipped = VK_TRUE,\n      .oldSwapchain = VK_NULL_HANDLE,\n  };\n  return vt->vkCreateSwapchainKHR(device, &ci, NULL, outSwapchain);\n}\n\nVkResult ivkCreateFramebuffer(const struct VulkanFunctionTable* vt,\n                              VkDevice device,\n                              uint32_t width,\n                              uint32_t height,\n                              VkRenderPass renderPass,\n                              size_t numAttachments,\n                              const VkImageView* attachments,\n                              VkFramebuffer* outFramebuffer) {\n  const VkFramebufferCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO,\n      .renderPass = renderPass,\n      .attachmentCount = (uint32_t)numAttachments,\n      .pAttachments = attachments,\n      .width = width,\n      .height = height,\n      .layers = 1,\n  };\n  return vt->vkCreateFramebuffer(device, &ci, NULL, outFramebuffer);\n}\n\nVkResult ivkCreateDescriptorSetLayout(const struct VulkanFunctionTable* vt,\n                                      VkDevice device,\n                                      VkDescriptorSetLayoutCreateFlags flags,\n                                      uint32_t numBindings,\n                                      const VkDescriptorSetLayoutBinding* bindings,\n                                      const VkDescriptorBindingFlags* bindingFlags,\n                                      VkDescriptorSetLayout* outLayout) {\n  // Do not enable VK_EXT_descriptor_indexing for Android until\n  // we fix the extension enumeration crash when the validation layer is enabled\n#if !IGL_PLATFORM_ANDROID\n  const VkDescriptorSetLayoutBindingFlagsCreateInfo setLayoutBindingFlagsCI = {\n      .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT,\n      .bindingCount = numBindings,\n      .pBindingFlags = bindingFlags,\n  };\n#endif // !IGL_PLATFORM_ANDROID\n\n  const VkDescriptorSetLayoutCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,\n#if !IGL_PLATFORM_ANDROID\n      .pNext = bindingFlags ? &setLayoutBindingFlagsCI : NULL,\n      .flags = flags,\n#endif\n      .bindingCount = numBindings,\n      .pBindings = bindings,\n  };\n  return vt->vkCreateDescriptorSetLayout(device, &ci, NULL, outLayout);\n}\n\nVkResult ivkAllocateDescriptorSet(const struct VulkanFunctionTable* vt,\n                                  VkDevice device,\n                                  VkDescriptorPool pool,\n                                  VkDescriptorSetLayout layout,\n                                  VkDescriptorSet* outDescriptorSet) {\n  const VkDescriptorSetAllocateInfo ai = {\n      .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,\n      .descriptorPool = pool,\n      .descriptorSetCount = 1,\n      .pSetLayouts = &layout,\n  };\n  return vt->vkAllocateDescriptorSets(device, &ai, outDescriptorSet);\n}\n\nVkResult ivkCreateDescriptorPool(const struct VulkanFunctionTable* vt,\n                                 VkDevice device,\n                                 VkDescriptorPoolCreateFlags flags,\n                                 uint32_t maxDescriptorSets,\n                                 uint32_t numPoolSizes,\n                                 const VkDescriptorPoolSize* poolSizes,\n                                 VkDescriptorPool* outDescriptorPool) {\n  const VkDescriptorPoolCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO,\n      .flags = flags,\n      .maxSets = maxDescriptorSets,\n      .poolSizeCount = numPoolSizes,\n      .pPoolSizes = poolSizes,\n  };\n  return vt->vkCreateDescriptorPool(device, &ci, NULL, outDescriptorPool);\n}\n\nVkSubmitInfo ivkGetSubmitInfo(const VkCommandBuffer* buffer,\n                              uint32_t numWaitSemaphores,\n                              const VkSemaphore* waitSemaphores,\n                              const VkPipelineStageFlags* waitStageMasks,\n                              const VkSemaphore* releaseSemaphore) {\n  const VkSubmitInfo si = {\n      .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO,\n      .waitSemaphoreCount = numWaitSemaphores,\n      .pWaitSemaphores = numWaitSemaphores ? waitSemaphores : NULL,\n      .pWaitDstStageMask = waitStageMasks,\n      .commandBufferCount = 1,\n      .pCommandBuffers = buffer,\n      .signalSemaphoreCount = releaseSemaphore ? 1 : 0,\n      .pSignalSemaphores = releaseSemaphore,\n  };\n  return si;\n}\n\nVkWriteDescriptorSet ivkGetWriteDescriptorSetImageInfo(VkDescriptorSet dstSet,\n                                                       uint32_t dstBinding,\n                                                       VkDescriptorType descriptorType,\n                                                       uint32_t numDescriptors,\n                                                       const VkDescriptorImageInfo* pImageInfo) {\n  const VkWriteDescriptorSet set = {\n      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,\n      .pNext = NULL,\n      .dstSet = dstSet,\n      .dstBinding = dstBinding,\n      .dstArrayElement = 0,\n      .descriptorCount = numDescriptors,\n      .descriptorType = descriptorType,\n      .pImageInfo = pImageInfo,\n      .pBufferInfo = NULL,\n      .pTexelBufferView = NULL,\n  };\n  return set;\n}\n\nVkWriteDescriptorSet ivkGetWriteDescriptorSetBufferInfo(VkDescriptorSet dstSet,\n                                                        uint32_t dstBinding,\n                                                        VkDescriptorType descriptorType,\n                                                        uint32_t numDescriptors,\n                                                        const VkDescriptorBufferInfo* pBufferInfo) {\n  const VkWriteDescriptorSet set = {\n      .sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET,\n      .pNext = NULL,\n      .dstSet = dstSet,\n      .dstBinding = dstBinding,\n      .dstArrayElement = 0,\n      .descriptorCount = numDescriptors,\n      .descriptorType = descriptorType,\n      .pImageInfo = NULL,\n      .pBufferInfo = pBufferInfo,\n      .pTexelBufferView = NULL,\n  };\n  return set;\n}\n\nVkResult ivkCreateGraphicsPipeline(const struct VulkanFunctionTable* vt,\n                                   VkDevice device,\n                                   VkPipelineCache pipelineCache,\n                                   uint32_t numShaderStages,\n                                   const VkPipelineShaderStageCreateInfo* shaderStages,\n                                   const VkPipelineVertexInputStateCreateInfo* vertexInputState,\n                                   const VkPipelineInputAssemblyStateCreateInfo* inputAssemblyState,\n                                   const VkPipelineTessellationStateCreateInfo* tessellationState,\n                                   const VkPipelineViewportStateCreateInfo* viewportState,\n                                   const VkPipelineRasterizationStateCreateInfo* rasterizationState,\n                                   const VkPipelineMultisampleStateCreateInfo* multisampleState,\n                                   const VkPipelineDepthStencilStateCreateInfo* depthStencilState,\n                                   const VkPipelineColorBlendStateCreateInfo* colorBlendState,\n                                   const VkPipelineDynamicStateCreateInfo* dynamicState,\n                                   VkPipelineLayout pipelineLayout,\n                                   VkRenderPass renderPass,\n                                   VkPipeline* outPipeline) {\n  const VkGraphicsPipelineCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO,\n      .pNext = NULL,\n      .flags = 0,\n      .stageCount = numShaderStages,\n      .pStages = shaderStages,\n      .pVertexInputState = vertexInputState,\n      .pInputAssemblyState = inputAssemblyState,\n      .pTessellationState = tessellationState,\n      .pViewportState = viewportState,\n      .pRasterizationState = rasterizationState,\n      .pMultisampleState = multisampleState,\n      .pDepthStencilState = depthStencilState,\n      .pColorBlendState = colorBlendState,\n      .pDynamicState = dynamicState,\n      .layout = pipelineLayout,\n      .renderPass = renderPass,\n      .subpass = 0,\n      .basePipelineHandle = VK_NULL_HANDLE,\n      .basePipelineIndex = -1,\n  };\n  return vt->vkCreateGraphicsPipelines(device, pipelineCache, 1, &ci, NULL, outPipeline);\n}\n\nVkResult ivkCreateComputePipeline(const struct VulkanFunctionTable* vt,\n                                  VkDevice device,\n                                  VkPipelineCache pipelineCache,\n                                  const VkPipelineShaderStageCreateInfo* shaderStage,\n                                  VkPipelineLayout pipelineLayout,\n                                  VkPipeline* outPipeline) {\n  const VkComputePipelineCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO,\n      .pNext = NULL,\n      .flags = 0,\n      .stage = *shaderStage,\n      .layout = pipelineLayout,\n      .basePipelineHandle = VK_NULL_HANDLE,\n      .basePipelineIndex = -1,\n  };\n  return vt->vkCreateComputePipelines(device, pipelineCache, 1, &ci, NULL, outPipeline);\n}\n\nvoid ivkImageMemoryBarrier(const struct VulkanFunctionTable* vt,\n                           VkCommandBuffer buffer,\n                           VkImage image,\n                           VkAccessFlags srcAccessMask,\n                           VkAccessFlags dstAccessMask,\n                           VkImageLayout oldImageLayout,\n                           VkImageLayout newImageLayout,\n                           VkPipelineStageFlags srcStageMask,\n                           VkPipelineStageFlags dstStageMask,\n                           VkImageSubresourceRange subresourceRange) {\n  const VkImageMemoryBarrier barrier = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,\n      .srcAccessMask = srcAccessMask,\n      .dstAccessMask = dstAccessMask,\n      .oldLayout = oldImageLayout,\n      .newLayout = newImageLayout,\n      .image = image,\n      .subresourceRange = subresourceRange,\n  };\n  vt->vkCmdPipelineBarrier(buffer, srcStageMask, dstStageMask, 0, 0, NULL, 0, NULL, 1, &barrier);\n}\n\nvoid ivkBufferBarrier(const struct VulkanFunctionTable* vt,\n                      VkCommandBuffer cmdBuffer,\n                      VkBuffer buffer,\n                      VkBufferUsageFlags usageFlags,\n                      VkPipelineStageFlags srcStageMask,\n                      VkPipelineStageFlags dstStageMask) {\n  VkBufferMemoryBarrier barrier = {\n      .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,\n      .srcAccessMask = 0,\n      .dstAccessMask = 0,\n      .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,\n      .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,\n      .buffer = buffer,\n      .offset = 0,\n      .size = VK_WHOLE_SIZE,\n  };\n\n  if (srcStageMask & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT) {\n    barrier.srcAccessMask |= VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;\n  }\n  if (srcStageMask & VK_PIPELINE_STAGE_TRANSFER_BIT) {\n    barrier.srcAccessMask |= VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT;\n  }\n  if (srcStageMask & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT) {\n    barrier.srcAccessMask |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;\n  }\n\n  if (dstStageMask & VK_PIPELINE_STAGE_TRANSFER_BIT) {\n    barrier.dstAccessMask |= VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT) {\n    barrier.dstAccessMask |= VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT) {\n    barrier.dstAccessMask |= VK_ACCESS_INDIRECT_COMMAND_READ_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT) {\n    barrier.dstAccessMask |= VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT;\n  }\n\n  if (usageFlags & VK_BUFFER_USAGE_INDEX_BUFFER_BIT) {\n    barrier.dstAccessMask |= VK_ACCESS_INDEX_READ_BIT;\n  }\n  if (usageFlags & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT) {\n    barrier.dstAccessMask |= VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT;\n  }\n\n  vt->vkCmdPipelineBarrier(cmdBuffer, srcStageMask, dstStageMask, 0, 0, NULL, 1, &barrier, 0, NULL);\n}\n\nvoid ivkBufferMemoryBarrier(const struct VulkanFunctionTable* vt,\n                            VkCommandBuffer cmdBuffer,\n                            VkBuffer buffer,\n                            VkAccessFlags srcAccessMask,\n                            VkAccessFlags dstAccessMask,\n                            VkDeviceSize offset,\n                            VkDeviceSize size,\n                            VkPipelineStageFlags srcStageMask,\n                            VkPipelineStageFlags dstStageMask) {\n  const VkBufferMemoryBarrier barrier = {\n      .sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,\n      .srcAccessMask = srcAccessMask,\n      .dstAccessMask = dstAccessMask,\n      .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,\n      .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,\n      .buffer = buffer,\n      .offset = offset,\n      .size = size,\n  };\n  vt->vkCmdPipelineBarrier(cmdBuffer, srcStageMask, dstStageMask, 0, 0, NULL, 1, &barrier, 0, NULL);\n}\n\nvoid ivkCmdBlitImage(const struct VulkanFunctionTable* vt,\n                     VkCommandBuffer buffer,\n                     VkImage srcImage,\n                     VkImage dstImage,\n                     VkImageLayout srcImageLayout,\n                     VkImageLayout dstImageLayout,\n                     const VkOffset3D* srcOffsets,\n                     const VkOffset3D* dstOffsets,\n                     VkImageSubresourceLayers srcSubresourceRange,\n                     VkImageSubresourceLayers dstSubresourceRange,\n                     VkFilter filter) {\n  const VkImageBlit blit = {\n      .srcSubresource = srcSubresourceRange,\n      .srcOffsets = {srcOffsets[0], srcOffsets[1]},\n      .dstSubresource = dstSubresourceRange,\n      .dstOffsets = {dstOffsets[0], dstOffsets[1]},\n  };\n  vt->vkCmdBlitImage(buffer, srcImage, srcImageLayout, dstImage, dstImageLayout, 1, &blit, filter);\n}\n\nVkResult ivkSetDebugObjectName(const struct VulkanFunctionTable* vt,\n                               VkDevice device,\n                               VkObjectType type,\n                               uint64_t handle,\n                               const char* name) {\n  // Some Android devices don't have the VK_EXT_debug_utils functions available, even though the\n  // extension is supported and has been enabled\n  if (!name || !*name || vt->vkSetDebugUtilsObjectNameEXT == NULL) {\n    return VK_SUCCESS;\n  }\n\n#if VK_EXT_DEBUG_UTILS_SUPPORTED\n  const VkDebugUtilsObjectNameInfoEXT ni = {\n      .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT,\n      .objectType = type,\n      .objectHandle = handle,\n      .pObjectName = name,\n  };\n\n  return vt->vkSetDebugUtilsObjectNameEXT(device, &ni);\n#else\n  return VK_SUCCESS;\n#endif // VK_EXT_DEBUG_UTILS_SUPPORTED\n}\n\nvoid ivkCmdBeginDebugUtilsLabel(const struct VulkanFunctionTable* vt,\n                                VkCommandBuffer buffer,\n                                const char* name,\n                                const float colorRGBA[4]) {\n#if VK_EXT_DEBUG_UTILS_SUPPORTED\n  // Some Android devices don't have the VK_EXT_debug_utils functions available, even though the\n  // extension is supported and has been enabled\n  if (!name || !*name || vt->vkCmdBeginDebugUtilsLabelEXT == NULL) {\n    return;\n  }\n\n  const VkDebugUtilsLabelEXT label = {\n      .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,\n      .pNext = NULL,\n      .pLabelName = name,\n      .color = {colorRGBA[0], colorRGBA[1], colorRGBA[2], colorRGBA[3]},\n  };\n  vt->vkCmdBeginDebugUtilsLabelEXT(buffer, &label);\n#endif // VK_EXT_DEBUG_UTILS_SUPPORTED\n}\n\nvoid ivkCmdInsertDebugUtilsLabel(const struct VulkanFunctionTable* vt,\n                                 VkCommandBuffer buffer,\n                                 const char* name,\n                                 const float colorRGBA[4]) {\n#if VK_EXT_DEBUG_UTILS_SUPPORTED\n  // Some Android devices don't have the VK_EXT_debug_utils functions available, even though the\n  // extension is supported and has been enabled\n  if (!name || !*name || vt->vkCmdInsertDebugUtilsLabelEXT == NULL) {\n    return;\n  }\n\n  const VkDebugUtilsLabelEXT label = {\n      .sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT,\n      .pNext = NULL,\n      .pLabelName = name,\n      .color = {colorRGBA[0], colorRGBA[1], colorRGBA[2], colorRGBA[3]},\n  };\n  vt->vkCmdInsertDebugUtilsLabelEXT(buffer, &label);\n#endif // VK_EXT_DEBUG_UTILS_SUPPORTED\n}\n\nvoid ivkCmdEndDebugUtilsLabel(const struct VulkanFunctionTable* vt, VkCommandBuffer buffer) {\n#if VK_EXT_DEBUG_UTILS_SUPPORTED\n  // Some Android devices don't have the VK_EXT_debug_utils functions available, even though the\n  // extension is supported and has been enabled\n  if (vt->vkCmdEndDebugUtilsLabelEXT != NULL) {\n    vt->vkCmdEndDebugUtilsLabelEXT(buffer);\n  }\n#endif // VK_EXT_DEBUG_UTILS_SUPPORTED\n}\n\nVkVertexInputBindingDescription ivkGetVertexInputBindingDescription(uint32_t binding,\n                                                                    uint32_t stride,\n                                                                    VkVertexInputRate inputRate) {\n  const VkVertexInputBindingDescription desc = {\n      .binding = binding,\n      .stride = stride,\n      .inputRate = inputRate,\n  };\n  return desc;\n}\n\nVkVertexInputAttributeDescription ivkGetVertexInputAttributeDescription(uint32_t location,\n                                                                        uint32_t binding,\n                                                                        VkFormat format,\n                                                                        uint32_t offset) {\n  const VkVertexInputAttributeDescription desc = {\n      .location = location,\n      .binding = binding,\n      .format = format,\n      .offset = offset,\n  };\n  return desc;\n}\n\nVkResult ivkVmaCreateAllocator(const struct VulkanFunctionTable* vt,\n                               VkPhysicalDevice physDev,\n                               VkDevice device,\n                               VkInstance instance,\n                               uint32_t apiVersion,\n                               bool enableBufferDeviceAddress,\n                               VkDeviceSize preferredLargeHeapBlockSize,\n                               VmaAllocator* outVma) {\n  const VmaVulkanFunctions funcs = {\n      .vkGetInstanceProcAddr = vt->vkGetInstanceProcAddr,\n      .vkGetDeviceProcAddr = vt->vkGetDeviceProcAddr,\n      .vkGetPhysicalDeviceProperties = vt->vkGetPhysicalDeviceProperties,\n      .vkGetPhysicalDeviceMemoryProperties = vt->vkGetPhysicalDeviceMemoryProperties,\n      .vkAllocateMemory = vt->vkAllocateMemory,\n      .vkFreeMemory = vt->vkFreeMemory,\n      .vkMapMemory = vt->vkMapMemory,\n      .vkUnmapMemory = vt->vkUnmapMemory,\n      .vkFlushMappedMemoryRanges = vt->vkFlushMappedMemoryRanges,\n      .vkInvalidateMappedMemoryRanges = vt->vkInvalidateMappedMemoryRanges,\n      .vkBindBufferMemory = vt->vkBindBufferMemory,\n      .vkBindImageMemory = vt->vkBindImageMemory,\n      .vkGetBufferMemoryRequirements = vt->vkGetBufferMemoryRequirements,\n      .vkGetImageMemoryRequirements = vt->vkGetImageMemoryRequirements,\n      .vkCreateBuffer = vt->vkCreateBuffer,\n      .vkDestroyBuffer = vt->vkDestroyBuffer,\n      .vkCreateImage = vt->vkCreateImage,\n      .vkDestroyImage = vt->vkDestroyImage,\n      .vkCmdCopyBuffer = vt->vkCmdCopyBuffer,\n\n#if VMA_VULKAN_VERSION >= 1001000\n      .vkGetBufferMemoryRequirements2KHR = vt->vkGetBufferMemoryRequirements2,\n      .vkGetImageMemoryRequirements2KHR = vt->vkGetImageMemoryRequirements2,\n      .vkBindBufferMemory2KHR = vt->vkBindBufferMemory2,\n      .vkBindImageMemory2KHR = vt->vkBindImageMemory2,\n      .vkGetPhysicalDeviceMemoryProperties2KHR = vt->vkGetPhysicalDeviceMemoryProperties2,\n#endif\n\n#if VMA_VULKAN_VERSION >= 1003000\n      .vkGetDeviceBufferMemoryRequirements = vt->vkGetDeviceBufferMemoryRequirements,\n      .vkGetDeviceImageMemoryRequirements = vt->vkGetDeviceImageMemoryRequirements,\n#endif\n  };\n\n  const VmaAllocatorCreateInfo ci = {\n      .flags = enableBufferDeviceAddress ? VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT : 0,\n      .physicalDevice = physDev,\n      .device = device,\n      .preferredLargeHeapBlockSize = preferredLargeHeapBlockSize,\n      .pAllocationCallbacks = NULL,\n      .pDeviceMemoryCallbacks = NULL,\n      .pHeapSizeLimit = NULL,\n      .pVulkanFunctions = &funcs,\n      .instance = instance,\n      .vulkanApiVersion = apiVersion,\n  };\n  return vmaCreateAllocator(&ci, outVma);\n}\n\nvoid ivkUpdateGlslangResource(glslang_resource_t* res,\n                              const VkPhysicalDeviceProperties* props,\n                              const VkPhysicalDeviceMeshShaderPropertiesEXT* meshShaderProps) {\n  const VkPhysicalDeviceLimits* limits = props ? &props->limits : NULL;\n  if (!limits || !res) {\n    return;\n  }\n\n  res->max_vertex_attribs = (int)limits->maxVertexInputAttributes;\n  res->max_clip_distances = (int)limits->maxClipDistances;\n  res->max_compute_work_group_count_x = (int)limits->maxComputeWorkGroupCount[0];\n  res->max_compute_work_group_count_y = (int)limits->maxComputeWorkGroupCount[1];\n  res->max_compute_work_group_count_z = (int)limits->maxComputeWorkGroupCount[2];\n  res->max_compute_work_group_size_x = (int)limits->maxComputeWorkGroupSize[0];\n  res->max_compute_work_group_size_y = (int)limits->maxComputeWorkGroupSize[1];\n  res->max_compute_work_group_size_z = (int)limits->maxComputeWorkGroupSize[2];\n  res->max_vertex_output_components = (int)limits->maxVertexOutputComponents;\n  res->max_geometry_input_components = (int)limits->maxGeometryInputComponents;\n  res->max_geometry_output_components = (int)limits->maxGeometryOutputComponents;\n  res->max_fragment_input_components = (int)limits->maxFragmentInputComponents;\n  res->max_geometry_output_vertices = (int)limits->maxGeometryOutputVertices;\n  res->max_geometry_total_output_components = (int)limits->maxGeometryTotalOutputComponents;\n  res->max_tess_control_input_components =\n      (int)limits->maxTessellationControlPerVertexInputComponents;\n  res->max_tess_control_output_components =\n      (int)limits->maxTessellationControlPerVertexOutputComponents;\n  res->max_tess_evaluation_input_components = (int)limits->maxTessellationEvaluationInputComponents;\n  res->max_tess_evaluation_output_components =\n      (int)limits->maxTessellationEvaluationOutputComponents;\n  res->max_viewports = (int)limits->maxViewports;\n  res->max_cull_distances = (int)limits->maxCullDistances;\n  res->max_combined_clip_and_cull_distances = (int)limits->maxCombinedClipAndCullDistances;\n\n  if (meshShaderProps) {\n    res->max_mesh_output_vertices_ext = meshShaderProps->maxMeshOutputVertices;\n    res->max_mesh_output_primitives_ext = meshShaderProps->maxMeshOutputPrimitives;\n    res->max_mesh_work_group_size_x_ext = meshShaderProps->maxMeshWorkGroupSize[0];\n    res->max_mesh_work_group_size_y_ext = meshShaderProps->maxMeshWorkGroupSize[1];\n    res->max_mesh_work_group_size_z_ext = meshShaderProps->maxMeshWorkGroupSize[2];\n    res->max_task_work_group_size_x_ext = meshShaderProps->maxTaskWorkGroupSize[0];\n    res->max_task_work_group_size_y_ext = meshShaderProps->maxTaskWorkGroupSize[1];\n    res->max_task_work_group_size_z_ext = meshShaderProps->maxTaskWorkGroupSize[2];\n    res->max_mesh_view_count_ext = meshShaderProps->maxMeshMultiviewViewCount;\n  }\n}\n"
  },
  {
    "path": "src/igl/vulkan/VulkanHelpers.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// This is a very low-level C wrapper of the Vulkan API to make it slightly less painful to use.\n\n#pragma once\n\n#include <glslang/Include/glslang_c_interface.h>\n#include <igl/Macros.h>\n#include <igl/vulkan/VulkanFunctionTable.h>\n#include <igl/vulkan/VulkanVma.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n/// @brief Adds a node to the linked list of next nodes\nvoid ivkAddNext(void* node, const void* next);\n\nconst char* ivkGetVulkanResultString(VkResult result);\n\n/// @brief Creates a Debug Utils Messenger if the VK_EXT_debug_utils extension is available and the\n/// platform is not Android or Mac Catalyst. Otherwise the function is defined as a no-op that\n/// always returns VK_SUCCESS\nVkResult ivkCreateDebugUtilsMessenger(const struct VulkanFunctionTable* vt,\n                                      VkInstance instance,\n                                      PFN_vkDebugUtilsMessengerCallbackEXT callback,\n                                      void* logUserData,\n                                      VkDebugUtilsMessengerEXT* outMessenger);\n\n// This function uses VK_EXT_debug_report extension, which is deprecated by VK_EXT_debug_utils.\n// However, it is available on some Android devices where VK_EXT_debug_utils is not available.\nVkResult ivkCreateDebugReportMessenger(const struct VulkanFunctionTable* vt,\n                                       VkInstance instance,\n                                       PFN_vkDebugReportCallbackEXT callback,\n                                       void* logUserData,\n                                       VkDebugReportCallbackEXT* outMessenger);\n\n/** @brief Creates a platform specific VkSurfaceKHR object. The surface creation functions\n * conditionally-compiled and guarded by their respective platform specific extension macros defined\n * by the Vulkan API. The current supported platforms, and their macros, are:\n * - Windows: VK_USE_PLATFORM_WIN32_KHR\n * - Linux: VK_USE_PLATFORM_XLIB_KHR\n * - MacOS: VK_USE_PLATFORM_METAL_EXT\n * - Android: VK_USE_PLATFORM_ANDROID_KHR\n */\nVkResult ivkCreateSurface(const struct VulkanFunctionTable* vt,\n                          VkInstance instance,\n                          void* window,\n                          void* display,\n                          void* layer,\n                          VkSurfaceKHR* outSurface);\n\n/** @brief Creates a Vulkan device from the given physical device. The physical device features\n * (VkPhysicalDeviceFeatures) conditionally enabled, based on the provided supported physical device\n * features, are `dualSrcBlend`, `multiDrawIndirect`, `drawIndirectFirstInstance`, `depthBiasClamp`,\n * `fillModeNonSolid`, and `shaderInt16`.\n * The validation layers enabled are defined in `kDefaultValidationLayers`\n * If descriptor indexing is enabled, then the following descriptor indexing features\n * (VkPhysicalDeviceDescriptorIndexingFeaturesEXT) are enabled:\n * `shaderSampledImageArrayNonUniformIndexing`, `descriptorBindingUniformBufferUpdateAfterBind`,\n * `descriptorBindingSampledImageUpdateAfterBind`, `descriptorBindingStorageImageUpdateAfterBind`,\n * `descriptorBindingStorageBufferUpdateAfterBind`, `descriptorBindingUpdateUnusedWhilePending`,\n * `descriptorBindingPartiallyBound`, `runtimeDescriptorArray`.\n * If 16-bit shader floats are enabled, then the following shader float 16 features are enabled:\n * VkPhysicalDevice16BitStorageFeatures::storageBuffer16BitAccess\n * VkPhysicalDeviceShaderFloat16Int8Features::shaderFloat16\n * If the `VK_KHR_buffer_device_address` extension is available, then\n * VkPhysicalDeviceBufferDeviceAddressFeaturesKHR::bufferDeviceAddress is enabled If multiview is\n * enabled, then VkPhysicalDeviceMultiviewFeatures::multiview is enabled\n */\nVkResult ivkCreateDevice(const struct VulkanFunctionTable* vt,\n                         VkPhysicalDevice physicalDevice,\n                         size_t numQueueCreateInfos,\n                         const VkDeviceQueueCreateInfo* queueCreateInfos,\n                         size_t numDeviceExtensions,\n                         const char** deviceExtensions,\n                         const VkPhysicalDeviceFeatures2* supported,\n                         VkDevice* outDevice);\n\nVkResult ivkCreateSwapchain(const struct VulkanFunctionTable* vt,\n                            VkDevice device,\n                            VkSurfaceKHR surface,\n                            uint32_t minImageCount,\n                            VkSurfaceFormatKHR surfaceFormat,\n                            VkPresentModeKHR presentMode,\n                            const VkSurfaceCapabilitiesKHR* caps,\n                            VkImageUsageFlags imageUsage,\n                            uint32_t queueFamilyIndex,\n                            uint32_t width,\n                            uint32_t height,\n                            VkSwapchainKHR* outSwapchain);\n\nVkResult ivkCreateFramebuffer(const struct VulkanFunctionTable* vt,\n                              VkDevice device,\n                              uint32_t width,\n                              uint32_t height,\n                              VkRenderPass renderPass,\n                              size_t numAttachments,\n                              const VkImageView* attachments,\n                              VkFramebuffer* outFramebuffer);\n\nVkResult ivkCreateCommandPool(const struct VulkanFunctionTable* vt,\n                              VkDevice device,\n                              VkCommandPoolCreateFlags flags,\n                              uint32_t queueFamilyIndex,\n                              VkCommandPool* outCommandPool);\n\nVkResult ivkAllocateCommandBuffer(const struct VulkanFunctionTable* vt,\n                                  VkDevice device,\n                                  VkCommandPool commandPool,\n                                  VkCommandBuffer* outCommandBuffer);\n\nVkResult ivkAllocateMemory(const struct VulkanFunctionTable* vt,\n                           VkPhysicalDevice physDev,\n                           VkDevice device,\n                           const VkMemoryRequirements* memRequirements,\n                           VkMemoryPropertyFlags props,\n                           bool enableBufferDeviceAddress,\n                           VkDeviceMemory* outMemory);\n\nVkResult ivkAllocateMemory2(const struct VulkanFunctionTable* vt,\n                            VkPhysicalDevice physDev,\n                            VkDevice device,\n                            const VkMemoryRequirements2* memRequirements,\n                            VkMemoryPropertyFlags props,\n                            bool enableBufferDeviceAddress,\n                            VkDeviceMemory* outMemory);\n\nbool ivkIsHostVisibleSingleHeapMemory(const VkPhysicalDeviceMemoryProperties* memProps);\n\nuint32_t ivkFindMemoryType(const VkPhysicalDeviceMemoryProperties* memProps,\n                           uint32_t memoryTypeBits,\n                           VkMemoryPropertyFlags flags);\n\nVkResult ivkCreateGraphicsPipeline(const struct VulkanFunctionTable* vt,\n                                   VkDevice device,\n                                   VkPipelineCache pipelineCache,\n                                   uint32_t numShaderStages,\n                                   const VkPipelineShaderStageCreateInfo* shaderStages,\n                                   const VkPipelineVertexInputStateCreateInfo* vertexInputState,\n                                   const VkPipelineInputAssemblyStateCreateInfo* inputAssemblyState,\n                                   const VkPipelineTessellationStateCreateInfo* tessellationState,\n                                   const VkPipelineViewportStateCreateInfo* viewportState,\n                                   const VkPipelineRasterizationStateCreateInfo* rasterizationState,\n                                   const VkPipelineMultisampleStateCreateInfo* multisampleState,\n                                   const VkPipelineDepthStencilStateCreateInfo* depthStencilState,\n                                   const VkPipelineColorBlendStateCreateInfo* colorBlendState,\n                                   const VkPipelineDynamicStateCreateInfo* dynamicState,\n                                   VkPipelineLayout pipelineLayout,\n                                   VkRenderPass renderPass,\n                                   VkPipeline* outPipeline);\n\nVkResult ivkCreateComputePipeline(const struct VulkanFunctionTable* vt,\n                                  VkDevice device,\n                                  VkPipelineCache pipelineCache,\n                                  const VkPipelineShaderStageCreateInfo* shaderStage,\n                                  VkPipelineLayout pipelineLayout,\n                                  VkPipeline* outPipeline);\n\nVkResult ivkCreateDescriptorSetLayout(const struct VulkanFunctionTable* vt,\n                                      VkDevice device,\n                                      VkDescriptorSetLayoutCreateFlags flags,\n                                      uint32_t numBindings,\n                                      const VkDescriptorSetLayoutBinding* bindings,\n                                      const VkDescriptorBindingFlags* bindingFlags,\n                                      VkDescriptorSetLayout* outLayout);\n\nVkResult ivkAllocateDescriptorSet(const struct VulkanFunctionTable* vt,\n                                  VkDevice device,\n                                  VkDescriptorPool pool,\n                                  VkDescriptorSetLayout layout,\n                                  VkDescriptorSet* outDescriptorSet);\n\nVkResult ivkCreateDescriptorPool(const struct VulkanFunctionTable* vt,\n                                 VkDevice device,\n                                 VkDescriptorPoolCreateFlags flags,\n                                 uint32_t maxDescriptorSets,\n                                 uint32_t numPoolSizes,\n                                 const VkDescriptorPoolSize* poolSizes,\n                                 VkDescriptorPool* outDescriptorPool);\n\n/// @brief Creates a VkSubmitInfo structure with an optional semaphore, used to signal when the\n/// command buffer for this batch have completed execution\nVkSubmitInfo ivkGetSubmitInfo(const VkCommandBuffer* buffer,\n                              uint32_t numWaitSemaphores,\n                              const VkSemaphore* waitSemaphores,\n                              const VkPipelineStageFlags* waitStageMasks,\n                              const VkSemaphore* releaseSemaphore);\n\nVkWriteDescriptorSet ivkGetWriteDescriptorSetImageInfo(VkDescriptorSet dstSet,\n                                                       uint32_t dstBinding,\n                                                       VkDescriptorType descriptorType,\n                                                       uint32_t numDescriptors,\n                                                       const VkDescriptorImageInfo* pImageInfo);\n\nVkWriteDescriptorSet ivkGetWriteDescriptorSetBufferInfo(VkDescriptorSet dstSet,\n                                                        uint32_t dstBinding,\n                                                        VkDescriptorType descriptorType,\n                                                        uint32_t numDescriptors,\n                                                        const VkDescriptorBufferInfo* pBufferInfo);\n\nvoid ivkImageMemoryBarrier(const struct VulkanFunctionTable* vt,\n                           VkCommandBuffer buffer,\n                           VkImage image,\n                           VkAccessFlags srcAccessMask,\n                           VkAccessFlags dstAccessMask,\n                           VkImageLayout oldImageLayout,\n                           VkImageLayout newImageLayout,\n                           VkPipelineStageFlags srcStageMask,\n                           VkPipelineStageFlags dstStageMask,\n                           VkImageSubresourceRange subresourceRange);\n\nvoid ivkBufferMemoryBarrier(const struct VulkanFunctionTable* vt,\n                            VkCommandBuffer cmdBuffer,\n                            VkBuffer buffer,\n                            VkAccessFlags srcAccessMask,\n                            VkAccessFlags dstAccessMask,\n                            VkDeviceSize offset,\n                            VkDeviceSize size,\n                            VkPipelineStageFlags srcStageMask,\n                            VkPipelineStageFlags dstStageMask);\n\nvoid ivkBufferBarrier(const struct VulkanFunctionTable* vt,\n                      VkCommandBuffer cmdBuffer,\n                      VkBuffer buffer,\n                      VkBufferUsageFlags usageFlags,\n                      VkPipelineStageFlags srcStageMask,\n                      VkPipelineStageFlags dstStageMask);\n\nvoid ivkCmdBlitImage(const struct VulkanFunctionTable* vt,\n                     VkCommandBuffer buffer,\n                     VkImage srcImage,\n                     VkImage dstImage,\n                     VkImageLayout srcImageLayout,\n                     VkImageLayout dstImageLayout,\n                     const VkOffset3D* srcOffsets,\n                     const VkOffset3D* dstOffsets,\n                     VkImageSubresourceLayers srcSubresourceRange,\n                     VkImageSubresourceLayers dstSubresourceRange,\n                     VkFilter filter);\n\n/// @brief Adds a name for the Vulkan object with handle equals to `handle` and type equals to\n/// `type`. This function is a no-op if `VK_EXT_DEBUG_UTILS_SUPPORTED` is not defined\nVkResult ivkSetDebugObjectName(const struct VulkanFunctionTable* vt,\n                               VkDevice device,\n                               VkObjectType type,\n                               uint64_t handle,\n                               const char* name);\n\n/// @brief Opens a command buffer debug region. This function is a no-op if\n/// `VK_EXT_DEBUG_UTILS_SUPPORTED` is not defined\nvoid ivkCmdBeginDebugUtilsLabel(const struct VulkanFunctionTable* vt,\n                                VkCommandBuffer buffer,\n                                const char* name,\n                                const float colorRGBA[4]);\n\n/// @brief Inserts a debug label into a command buffer. This function is a no-op if\n/// `VK_EXT_DEBUG_UTILS_SUPPORTED` is not defined\nvoid ivkCmdInsertDebugUtilsLabel(const struct VulkanFunctionTable* vt,\n                                 VkCommandBuffer buffer,\n                                 const char* name,\n                                 const float colorRGBA[4]);\n\n/// @brief Closes a command buffer debug region. This function is a no-op if\n/// `VK_EXT_DEBUG_UTILS_SUPPORTED` is not defined\nvoid ivkCmdEndDebugUtilsLabel(const struct VulkanFunctionTable* vt, VkCommandBuffer buffer);\n\nVkVertexInputBindingDescription ivkGetVertexInputBindingDescription(uint32_t binding,\n                                                                    uint32_t stride,\n                                                                    VkVertexInputRate inputRate);\nVkVertexInputAttributeDescription ivkGetVertexInputAttributeDescription(uint32_t location,\n                                                                        uint32_t binding,\n                                                                        VkFormat format,\n                                                                        uint32_t offset);\n\nVkResult ivkVmaCreateAllocator(const struct VulkanFunctionTable* vt,\n                               VkPhysicalDevice physDev,\n                               VkDevice device,\n                               VkInstance instance,\n                               uint32_t apiVersion,\n                               bool enableBufferDeviceAddress,\n                               VkDeviceSize preferredLargeHeapBlockSize,\n                               VmaAllocator* outVma);\n\nvoid ivkUpdateGlslangResource(glslang_resource_t* res,\n                              const VkPhysicalDeviceProperties* props,\n                              const VkPhysicalDeviceMeshShaderPropertiesEXT* meshShaderProps);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "src/igl/vulkan/VulkanImage.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanImage.h\"\n\n#include <array>\n#include <cinttypes>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImageView.h>\n\n#ifndef VK_USE_PLATFORM_WIN32_KHR\n#include <unistd.h>\n#endif\n\n// any image layout transition causes a full barrier\n#define IGL_DEBUG_ENFORCE_FULL_IMAGE_BARRIER 0\n\nnamespace {\nuint32_t ivkGetMemoryTypeIndex(const VkPhysicalDeviceMemoryProperties& memProps,\n                               const uint32_t typeBits,\n                               VkMemoryPropertyFlags requiredProperties) {\n  // Search memory types to find the index with the requested properties.\n  for (uint32_t type = 0; type < memProps.memoryTypeCount; type++) {\n    if ((typeBits & (1 << type)) != 0) {\n      // Test if this memory type has the required properties.\n      const VkFlags propertyFlags = memProps.memoryTypes[type].propertyFlags;\n      if ((propertyFlags & requiredProperties) == requiredProperties) {\n        return type;\n      }\n    }\n  }\n  if (requiredProperties & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) {\n    // there's no DEVICE_LOCAL memory heap here - look again\n    requiredProperties &= ~VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;\n    for (uint32_t type = 0; type < memProps.memoryTypeCount; type++) {\n      if ((typeBits & (1 << type)) != 0) {\n        // Test if this memory type has the required properties.\n        const VkFlags propertyFlags = memProps.memoryTypes[type].propertyFlags;\n        if ((propertyFlags & requiredProperties) == requiredProperties) {\n          return type;\n        }\n      }\n    }\n  }\n  IGL_LOG_ERROR(\"Memory type %d with properties %d not found.\", typeBits, requiredProperties);\n  return 0;\n}\n\n// VkImage export and import is only implemented on Windows, Linux and Android platforms.\n#if IGL_PLATFORM_WINDOWS\nconstexpr auto kHandleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT;\n#elif IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\nconstexpr auto kHandleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT;\n#endif\n\n} // namespace\n\nnamespace igl::vulkan {\n\nVulkanImage::VulkanImage(const VulkanContext& ctx,\n                         VkImage image,\n                         const char* debugName,\n                         VkImageUsageFlags usageFlags,\n                         bool isExternallyManaged,\n                         VkExtent3D extent,\n                         VkImageType type,\n                         VkFormat imageFormat,\n                         uint32_t mipLevels,\n                         uint32_t arrayLayers,\n                         VkSampleCountFlagBits samples,\n                         bool isImported) :\n  ctx_(&ctx),\n  physicalDevice_(ctx.getVkPhysicalDevice()),\n  device_(ctx.getVkDevice()),\n  vkImage_(image),\n  usageFlags_(usageFlags),\n  isExternallyManaged_(isExternallyManaged),\n  extent_(extent),\n  type_(type),\n  imageFormat_(imageFormat),\n  mipLevels_(mipLevels),\n  arrayLayers_(arrayLayers),\n  samples_(samples),\n  isDepthFormat_(hasDepth(imageFormat)), // NOLINT(readability-identifier-naming)\n  isStencilFormat_(hasStencil(imageFormat)), // NOLINT(readability-identifier-naming)\n  isDepthOrStencilFormat_(isDepthFormat_ || isStencilFormat_),\n  isImported_(isImported) {\n  setName(debugName);\n  VK_ASSERT(ivkSetDebugObjectName(\n      &ctx_->vf_, device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)vkImage_, debugName));\n  ctx_->vf_.vkGetPhysicalDeviceFormatProperties(physicalDevice_, imageFormat_, &formatProperties_);\n}\nVulkanImage::VulkanImage(const VulkanContext& ctx,\n                         VkImage image,\n                         const VulkanImageCreateInfo& createInfo,\n                         const char* debugName) :\n  VulkanImage(ctx,\n              image,\n              debugName,\n              createInfo.usageFlags,\n              createInfo.isExternallyManaged,\n              createInfo.extent,\n              createInfo.type,\n              createInfo.imageFormat,\n              createInfo.mipLevels,\n              createInfo.arrayLayers,\n              createInfo.samples,\n              createInfo.isImported) {}\n\nVulkanImage::VulkanImage(const VulkanContext& ctx,\n                         VkExtent3D extent,\n                         VkImageType type,\n                         VkFormat format,\n                         uint32_t mipLevels,\n                         uint32_t arrayLayers,\n                         VkImageTiling tiling,\n                         VkImageUsageFlags usageFlags,\n                         VkMemoryPropertyFlags memFlags,\n                         VkImageCreateFlags createFlags,\n                         VkSampleCountFlagBits samples,\n                         const char* debugName) :\n  ctx_(&ctx),\n  physicalDevice_(ctx.getVkPhysicalDevice()),\n  device_(ctx.getVkDevice()),\n  usageFlags_(usageFlags),\n  extent_(extent),\n  type_(type),\n  imageFormat_(format),\n  mipLevels_(mipLevels),\n  arrayLayers_(arrayLayers),\n  samples_(samples),\n  isDepthFormat_(hasDepth(format)), // NOLINT(readability-identifier-naming)\n  isStencilFormat_(hasStencil(format)), // NOLINT(readability-identifier-naming)\n  isDepthOrStencilFormat_(isDepthFormat_ || isStencilFormat_),\n  isCubemap_((createFlags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) != 0),\n  tiling_(tiling) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_DEBUG_ASSERT(mipLevels_ > 0, \"The image must contain at least one mip level\");\n  IGL_DEBUG_ASSERT(arrayLayers_ > 0, \"The image must contain at least one layer\");\n  IGL_DEBUG_ASSERT(imageFormat_ != VK_FORMAT_UNDEFINED, \"Invalid VkFormat value\");\n  IGL_DEBUG_ASSERT(samples_ > 0, \"The image must contain at least one sample\");\n\n  setName(debugName);\n\n  const bool isDisjoint = (createFlags & VK_IMAGE_CREATE_DISJOINT_BIT) != 0;\n\n  const VkImageCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,\n      .flags = createFlags,\n      .imageType = type,\n      .format = imageFormat_,\n      .extent = extent_,\n      .mipLevels = mipLevels_,\n      .arrayLayers = arrayLayers_,\n      .samples = samples,\n      .tiling = tiling,\n      .usage = usageFlags,\n      .sharingMode = VK_SHARING_MODE_EXCLUSIVE,\n      .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,\n  };\n\n  if (IGL_VULKAN_USE_VMA && !isDisjoint) {\n    const bool isHostVisible = (memFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0;\n    const bool isLazilyAllocated = (memFlags & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) != 0;\n    const VmaAllocationCreateInfo ciAlloc = {\n        .flags = 0,\n        .usage = isHostVisible ? VMA_MEMORY_USAGE_CPU_TO_GPU : VMA_MEMORY_USAGE_AUTO,\n        // For lazily allocated (memoryless) images, require the flag so VMA picks GMEM-backed\n        // memory on TBDR GPUs. For other non-host-visible cases, pass memFlags as a preference\n        // to guide VMA without causing hard allocation failures.\n        .requiredFlags = isLazilyAllocated ? memFlags : static_cast<VkMemoryPropertyFlags>(0),\n        .preferredFlags = (!isHostVisible && !isLazilyAllocated)\n                              ? memFlags\n                              : static_cast<VkMemoryPropertyFlags>(0),\n    };\n\n    const VkResult result = vmaCreateImage(\n        (VmaAllocator)ctx_->getVmaAllocator(), &ci, &ciAlloc, &vkImage_, &vmaAllocation_, nullptr);\n\n    if (result != VK_SUCCESS || vmaAllocation_ == nullptr) {\n      IGL_LOG_INFO(\n          \"vmaCreateImage failed: error result: %d, memflags: %d, imageformat: %d. Retrying after \"\n          \"draining deferred tasks.\\n\",\n          result,\n          memFlags,\n          imageFormat_);\n      // Allocation failed - possibly due to memory pressure from deferred tasks not being\n      // processed. Drain deferred tasks queue to free memory and retry.\n      const_cast<VulkanContext&>(*ctx_).waitDeferredTasks();\n\n      const VkResult retryResult = vmaCreateImage((VmaAllocator)ctx_->getVmaAllocator(),\n                                                  &ci,\n                                                  &ciAlloc,\n                                                  &vkImage_,\n                                                  &vmaAllocation_,\n                                                  nullptr);\n\n      if (retryResult != VK_SUCCESS || vmaAllocation_ == nullptr) {\n        IGL_LOG_INFO(\n            \"vmaCreateImage retry failed: error result: %d, memflags: %d, imageformat: %d. \"\n            \"Continuing with null allocation.\\n\",\n            retryResult,\n            memFlags,\n            imageFormat_);\n      } else {\n        IGL_LOG_INFO(\n            \"vmaCreateImage retry succeeded: memflags: %d, imageformat: %d after draining \"\n            \"deferred tasks.\\n\",\n            memFlags,\n            imageFormat_);\n      }\n    }\n\n    if (vmaAllocation_) {\n      VkMemoryRequirements memRequirements;\n      ctx_->vf_.vkGetImageMemoryRequirements(device_, vkImage_, &memRequirements);\n\n      // handle memory-mapped buffers\n      if (memFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {\n        vmaMapMemory((VmaAllocator)ctx_->getVmaAllocator(), vmaAllocation_, &mappedPtr_);\n        if (memRequirements.memoryTypeBits & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) {\n          isCoherentMemory_ = true;\n        }\n      }\n\n      vmaSetAllocationName((VmaAllocator)ctx_->getVmaAllocator(),\n                           vmaAllocation_,\n                           IGL_FORMAT(\"VMA Allocation: {}\", debugName).c_str());\n\n      VmaAllocationInfo allocationInfo;\n      vmaGetAllocationInfo((VmaAllocator)ctx_->getVmaAllocator(), vmaAllocation_, &allocationInfo);\n      allocatedSize = allocationInfo.size;\n    }\n  } else {\n    // create a disjoint image - TODO: merge it with the VMA code path above\n    VK_ASSERT(ctx_->vf_.vkCreateImage(device_, &ci, nullptr, &vkImage_));\n\n    VkMemoryRequirements2 memRequirements[3] = {\n        {.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2},\n        {.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2},\n        {.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2},\n    };\n\n    // back the image with some memory\n    {\n      const uint32_t numPlanes = igl::vulkan::getNumImagePlanes(format);\n      IGL_DEBUG_ASSERT(numPlanes > 0 && numPlanes <= kMaxImagePlanes);\n      // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n      const VkImagePlaneMemoryRequirementsInfo planes[kMaxImagePlanes] = {\n          {.sType = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,\n           .planeAspect = VK_IMAGE_ASPECT_PLANE_0_BIT},\n          {.sType = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,\n           .planeAspect = VK_IMAGE_ASPECT_PLANE_1_BIT},\n          {.sType = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,\n           .planeAspect = VK_IMAGE_ASPECT_PLANE_2_BIT},\n      };\n      // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n      const VkImageMemoryRequirementsInfo2 imgRequirements[kMaxImagePlanes] = {\n          {.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,\n           .pNext = isDisjoint && numPlanes > 0 ? &planes[0] : nullptr,\n           .image = vkImage_},\n          {.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,\n           .pNext = isDisjoint && numPlanes > 1 ? &planes[1] : nullptr,\n           .image = vkImage_},\n          {.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,\n           .pNext = isDisjoint && numPlanes > 2 ? &planes[2] : nullptr,\n           .image = vkImage_},\n      };\n      for (uint32_t p = 0; p != numPlanes; p++) {\n        ctx_->vf_.vkGetImageMemoryRequirements2(device_, &imgRequirements[p], &memRequirements[p]);\n        VK_ASSERT(ivkAllocateMemory2(&ctx_->vf_,\n                                     physicalDevice_,\n                                     device_,\n                                     &memRequirements[p],\n                                     memFlags,\n                                     false,\n                                     &vkMemory_[p]));\n\n        VK_ASSERT(ivkSetDebugObjectName(&ctx_->vf_,\n                                        device_,\n                                        VK_OBJECT_TYPE_DEVICE_MEMORY,\n                                        (uint64_t)vkMemory_[p],\n                                        IGL_FORMAT(\"Memory [{}]: {}\", p, debugName).c_str()));\n      }\n      // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n      const VkBindImagePlaneMemoryInfo bindImagePlaneMemoryInfo[kMaxImagePlanes] = {\n          {.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,\n           .planeAspect = VK_IMAGE_ASPECT_PLANE_0_BIT},\n          {.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,\n           .planeAspect = VK_IMAGE_ASPECT_PLANE_1_BIT},\n          {.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,\n           .planeAspect = VK_IMAGE_ASPECT_PLANE_2_BIT},\n      };\n      // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n      const VkBindImageMemoryInfo bindInfo[kMaxImagePlanes] = {\n          {.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,\n           .pNext = isDisjoint ? &bindImagePlaneMemoryInfo[0] : nullptr,\n           .image = vkImage_,\n           .memory = vkMemory_[0]},\n          {.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,\n           .pNext = &bindImagePlaneMemoryInfo[1],\n           .image = vkImage_,\n           .memory = vkMemory_[1]},\n          {.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,\n           .pNext = &bindImagePlaneMemoryInfo[2],\n           .image = vkImage_,\n           .memory = vkMemory_[2]},\n      };\n      VK_ASSERT(ctx_->vf_.vkBindImageMemory2(device_, numPlanes, bindInfo));\n\n      allocatedSize = memRequirements[0].memoryRequirements.size +\n                      memRequirements[1].memoryRequirements.size +\n                      memRequirements[2].memoryRequirements.size;\n    }\n\n    // handle memory-mapped images\n    if (memFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) {\n      // map only the first image plane\n      VK_ASSERT(ctx_->vf_.vkMapMemory(device_, vkMemory_[0], 0, VK_WHOLE_SIZE, 0, &mappedPtr_));\n      const uint32_t memoryTypeBits = memRequirements[0].memoryRequirements.memoryTypeBits;\n      if (memoryTypeBits & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) {\n        isCoherentMemory_ = true;\n      }\n    }\n  }\n\n  VK_ASSERT(ivkSetDebugObjectName(\n      &ctx_->vf_, device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)vkImage_, debugName));\n\n  // Get physical device's properties for the image's format\n  ctx_->vf_.vkGetPhysicalDeviceFormatProperties(physicalDevice_, imageFormat_, &formatProperties_);\n}\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\nVulkanImage::VulkanImage(const VulkanContext& ctx,\n                         AHardwareBuffer* hwBuffer,\n                         uint64_t memoryAllocationSize,\n                         VkExtent3D extent,\n                         VkImageType type,\n                         VkFormat format,\n                         uint32_t mipLevels,\n                         uint32_t arrayLayers,\n                         VkImageTiling tiling,\n                         VkImageUsageFlags usageFlags,\n                         VkImageCreateFlags createFlags,\n                         VkSampleCountFlagBits samples,\n                         const char* debugName) :\n  ctx_(&ctx),\n  physicalDevice_(ctx.getVkPhysicalDevice()),\n  device_(ctx.getVkDevice()),\n  usageFlags_(usageFlags),\n  extent_(extent),\n  type_(type),\n  imageFormat_(format),\n  mipLevels_(mipLevels),\n  arrayLayers_(arrayLayers),\n  samples_(samples),\n  isDepthFormat_(hasDepth(format)),\n  isStencilFormat_(hasStencil(format)),\n  isDepthOrStencilFormat_(isDepthFormat_ || isStencilFormat_),\n  isImported_(true),\n  tiling_(tiling) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_DEBUG_ASSERT(hwBuffer != nullptr);\n  IGL_DEBUG_ASSERT(mipLevels_ > 0, \"The image must contain at least one mip level\");\n  IGL_DEBUG_ASSERT(arrayLayers_ > 0, \"The image must contain at least one layer\");\n  IGL_DEBUG_ASSERT(imageFormat_ != VK_FORMAT_UNDEFINED, \"Invalid VkFormat value\");\n  IGL_DEBUG_ASSERT(samples_ > 0, \"The image must contain at least one sample\");\n\n  setName(debugName);\n\n  const VkExternalMemoryImageCreateInfo extImgMem = {\n      .sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,\n      .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID};\n\n  const VkImageCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,\n      .pNext = &extImgMem,\n      .flags = createFlags,\n      .imageType = type,\n      .format = imageFormat_,\n      .extent = extent_,\n      .mipLevels = mipLevels_,\n      .arrayLayers = arrayLayers_,\n      .samples = samples,\n      .tiling = tiling,\n      .usage = usageFlags,\n      .sharingMode = VK_SHARING_MODE_EXCLUSIVE,\n      .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,\n  };\n\n  VK_ASSERT(ctx_->vf_.vkCreateImage(device_, &ci, nullptr, &vkImage_));\n  VK_ASSERT(ivkSetDebugObjectName(\n      &ctx_->vf_, device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)vkImage_, debugName));\n\n  // NOTE: Importing a hardware buffer causes Vulkan to acquire a reference to\n  // the hardware buffer, which it releases when the allocated memory is freed.\n\n  const VkImportAndroidHardwareBufferInfoANDROID hwBufferInfo = {\n      .sType = VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID,\n      .buffer = hwBuffer,\n  };\n\n  VkMemoryDedicatedAllocateInfo dedicatedAllocateInfo = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,\n      .pNext = &hwBufferInfo,\n      .image = vkImage_,\n      .buffer = VK_NULL_HANDLE,\n  };\n\n  VkAndroidHardwareBufferPropertiesANDROID hwBufferProperties{\n      .sType = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID,\n  };\n  VK_ASSERT(ctx_->vf_.vkGetAndroidHardwareBufferPropertiesANDROID(\n      device_, hwBuffer, &hwBufferProperties));\n\n  const VkMemoryAllocateInfo memoryAllocateInfo = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,\n      .pNext = &dedicatedAllocateInfo,\n      .allocationSize = hwBufferProperties.allocationSize,\n      .memoryTypeIndex = ivkGetMemoryTypeIndex(ctx_->memoryProperties,\n                                               hwBufferProperties.memoryTypeBits,\n                                               VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)};\n\n  IGL_LOG_INFO(\"Imported texture has requirements %d, ends up index %d\",\n               hwBufferProperties.memoryTypeBits,\n               memoryAllocateInfo.memoryTypeIndex);\n\n  VK_ASSERT(ctx_->vf_.vkAllocateMemory(device_, &memoryAllocateInfo, nullptr, &vkMemory_[0]));\n  VK_ASSERT(ctx_->vf_.vkBindImageMemory(device_, vkImage_, vkMemory_[0], 0));\n\n  ctx_->vf_.vkGetPhysicalDeviceFormatProperties(physicalDevice_, imageFormat_, &formatProperties_);\n}\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\nVulkanImage::VulkanImage(const VulkanContext& ctx,\n                         int32_t undupedFileDescriptor,\n                         uint64_t memoryAllocationSize,\n                         VkExtent3D extent,\n                         VkImageType type,\n                         VkFormat format,\n                         uint32_t mipLevels,\n                         uint32_t arrayLayers,\n                         VkImageTiling tiling,\n                         VkImageUsageFlags usageFlags,\n                         VkImageCreateFlags createFlags,\n                         VkSampleCountFlagBits samples,\n                         const char* debugName) :\n  ctx_(&ctx),\n  physicalDevice_(ctx.getVkPhysicalDevice()),\n  device_(ctx.getVkDevice()),\n  usageFlags_(usageFlags),\n  extent_(extent),\n  type_(type),\n  imageFormat_(format),\n  mipLevels_(mipLevels),\n  arrayLayers_(arrayLayers),\n  samples_(samples),\n  isDepthFormat_(hasDepth(format)), // NOLINT(readability-identifier-naming)\n  isStencilFormat_(hasStencil(format)), // NOLINT(readability-identifier-naming)\n  isDepthOrStencilFormat_(isDepthFormat_ || isStencilFormat_),\n  isImported_(true),\n  tiling_(tiling) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_DEBUG_ASSERT(mipLevels_ > 0, \"The image must contain at least one mip level\");\n  IGL_DEBUG_ASSERT(arrayLayers_ > 0, \"The image must contain at least one layer\");\n  IGL_DEBUG_ASSERT(imageFormat_ != VK_FORMAT_UNDEFINED, \"Invalid VkFormat value\");\n  IGL_DEBUG_ASSERT(samples_ > 0, \"The image must contain at least one sample\");\n\n#ifdef VK_USE_PLATFORM_WIN32_KHR\n  IGL_DEBUG_ABORT(\"You can only import a VulkanImage on non-windows environments\");\n#endif\n\n  setName(debugName);\n\n  VkExternalMemoryImageCreateInfo extImgMem = {\n      .sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,\n      .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,\n  };\n\n  const VkImageCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,\n      .pNext = &extImgMem,\n      .flags = createFlags,\n      .imageType = type,\n      .format = imageFormat_,\n      .extent = extent_,\n      .mipLevels = mipLevels_,\n      .arrayLayers = arrayLayers_,\n      .samples = samples,\n      .tiling = tiling,\n      .usage = usageFlags,\n      .sharingMode = VK_SHARING_MODE_EXCLUSIVE,\n      .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,\n  };\n\n  // create image.. importing external memory cannot use VMA\n  VK_ASSERT(ctx_->vf_.vkCreateImage(device_, &ci, nullptr, &vkImage_));\n  VK_ASSERT(ivkSetDebugObjectName(\n      &ctx_->vf_, device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)vkImage_, debugName));\n\n  int importedFd = -1;\n#ifndef VK_USE_PLATFORM_WIN32_KHR\n  importedFd = dup(undupedFileDescriptor);\n#endif\n  IGL_DEBUG_ASSERT(importedFd >= 0);\n\n  // NOTE: Importing memory from a file descriptor transfers ownership of the fd from the\n  // app to the Vk implementation. The app must not perform any operations on the fd after\n  // a successful import.\n  // Vulkan implementation is responsible for closing the fds\n  //\n  // Apps can import the same underlying memory into:\n  //  - multiple instances of vk\n  //  - same instance from which it was exported\n  //  - multiple times into a given vk instance.\n  // in all cases, each import operation must create a distinct VkDeviceMemory object\n\n  const VkImageMemoryRequirementsInfo2 memoryRequirementInfo = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,\n      .image = vkImage_,\n  };\n  VkMemoryRequirements2 memoryRequirements = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2,\n  };\n  ctx_->vf_.vkGetImageMemoryRequirements2(device_, &memoryRequirementInfo, &memoryRequirements);\n\n  // TODO_VULKAN: Verify the following from the spec:\n  // the memory from which fd was exported must have been created on the same physical device\n  // as device.\n  VkImportMemoryFdInfoKHR fdInfo = {\n      .sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR,\n      .handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,\n      .fd = importedFd,\n  };\n\n  const VkMemoryAllocateInfo memoryAllocateInfo = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,\n      .pNext = &fdInfo,\n      .allocationSize = memoryAllocationSize,\n      .memoryTypeIndex = ivkGetMemoryTypeIndex(ctx_->memoryProperties,\n                                               memoryRequirements.memoryRequirements.memoryTypeBits,\n                                               VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT),\n  };\n\n  IGL_LOG_INFO(\"Imported texture has requirements %d, ends up index %d\",\n               memoryRequirements.memoryRequirements.memoryTypeBits,\n               memoryAllocateInfo.memoryTypeIndex);\n\n  // @fb-only\n  // @fb-only\n// @fb-only\n  // @fb-only\n      // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n  // @fb-only\n// @fb-only\n  VK_ASSERT(ctx_->vf_.vkAllocateMemory(device_, &memoryAllocateInfo, nullptr, &vkMemory_[0]));\n  VK_ASSERT(ctx_->vf_.vkBindImageMemory(device_, vkImage_, vkMemory_[0], 0));\n// @fb-only\n\n  VK_ASSERT(ivkSetDebugObjectName(&ctx_->vf_,\n                                  device_,\n                                  VK_OBJECT_TYPE_DEVICE_MEMORY,\n                                  (uint64_t)vkMemory_[0],\n                                  IGL_FORMAT(\"Memory: {}\", debugName).c_str()));\n\n  ctx_->vf_.vkGetPhysicalDeviceFormatProperties(physicalDevice_, imageFormat_, &formatProperties_);\n}\n\n#if IGL_PLATFORM_WINDOWS\nVulkanImage::VulkanImage(const VulkanContext& ctx,\n                         void* windowsHandle,\n                         VkExtent3D extent,\n                         VkImageType type,\n                         VkFormat format,\n                         uint32_t mipLevels,\n                         uint32_t arrayLayers,\n                         VkImageTiling tiling,\n                         VkImageUsageFlags usageFlags,\n                         VkImageCreateFlags createFlags,\n                         VkSampleCountFlagBits samples,\n                         const char* debugName) :\n  ctx_(&ctx),\n  physicalDevice_(ctx.getVkPhysicalDevice()),\n  device_(ctx.getVkDevice()),\n  usageFlags_(usageFlags),\n  extent_(extent),\n  type_(type),\n  imageFormat_(format),\n  mipLevels_(mipLevels),\n  arrayLayers_(arrayLayers),\n  samples_(samples),\n  isDepthFormat_(hasDepth(format)),\n  isStencilFormat_(hasStencil(format)),\n  isDepthOrStencilFormat_(isDepthFormat_ || isStencilFormat_),\n  isImported_(true),\n  tiling_(tiling) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_DEBUG_ASSERT(mipLevels_ > 0, \"The image must contain at least one mip level\");\n  IGL_DEBUG_ASSERT(arrayLayers_ > 0, \"The image must contain at least one layer\");\n  IGL_DEBUG_ASSERT(imageFormat_ != VK_FORMAT_UNDEFINED, \"Invalid VkFormat value\");\n  IGL_DEBUG_ASSERT(samples_ > 0, \"The image must contain at least one sample\");\n\n  const VkExternalMemoryImageCreateInfo extImgMem = {\n      .sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,\n      .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,\n  };\n\n  const VkImageCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,\n      .pNext = &extImgMem,\n      .flags = createFlags,\n      .imageType = type,\n      .format = imageFormat_,\n      .extent = extent_,\n      .mipLevels = mipLevels_,\n      .arrayLayers = arrayLayers_,\n      .samples = samples,\n      .tiling = tiling,\n      .usage = usageFlags,\n      .sharingMode = VK_SHARING_MODE_EXCLUSIVE,\n      .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,\n  };\n\n  // create image. importing external memory cannot use VMA\n  VK_ASSERT(ctx_->vf_.vkCreateImage(device_, &ci, nullptr, &vkImage_));\n  VK_ASSERT(ivkSetDebugObjectName(\n      &ctx_->vf_, device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)vkImage_, debugName));\n\n  const VkImageMemoryRequirementsInfo2 memoryRequirementInfo = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,\n      .image = vkImage_,\n  };\n\n  VkMemoryRequirements2 memoryRequirements = {.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2};\n  ctx_->vf_.vkGetImageMemoryRequirements2(device_, &memoryRequirementInfo, &memoryRequirements);\n\n  const VkImportMemoryWin32HandleInfoKHR handleInfo = {\n      .sType = VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR,\n      .handleType = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT,\n      .handle = windowsHandle,\n  };\n\n  const VkMemoryAllocateInfo memoryAllocateInfo = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,\n      .pNext = &handleInfo,\n      .allocationSize = memoryRequirements.memoryRequirements.size,\n      .memoryTypeIndex = ivkGetMemoryTypeIndex(ctx_->memoryProperties,\n                                               memoryRequirements.memoryRequirements.memoryTypeBits,\n                                               VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT),\n  };\n\n  IGL_LOG_INFO(\"Imported texture has memoryAllocationSize %\" PRIu64\n               \", requirements 0x%08X, ends up index 0x%08X\",\n               memoryRequirements.memoryRequirements.size,\n               memoryRequirements.memoryRequirements.memoryTypeBits,\n               memoryAllocateInfo.memoryTypeIndex);\n\n  VK_ASSERT(ctx_->vf_.vkAllocateMemory(device_, &memoryAllocateInfo, nullptr, &vkMemory_[0]));\n  VK_ASSERT(ctx_->vf_.vkBindImageMemory(device_, vkImage_, vkMemory_[0], 0));\n\n  VK_ASSERT(ivkSetDebugObjectName(&ctx_->vf_,\n                                  device_,\n                                  VK_OBJECT_TYPE_DEVICE_MEMORY,\n                                  (uint64_t)vkMemory_[0],\n                                  IGL_FORMAT(\"Memory: {}\", debugName).c_str()));\n\n  ctx_->vf_.vkGetPhysicalDeviceFormatProperties(physicalDevice_, imageFormat_, &formatProperties_);\n}\n#endif // IGL_PLATFORM_WINDOWS\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\nVulkanImage VulkanImage::createWithExportMemory(const VulkanContext& ctx,\n                                                VkExtent3D extent,\n                                                VkImageType type,\n                                                VkFormat format,\n                                                uint32_t mipLevels,\n                                                uint32_t arrayLayers,\n                                                VkImageTiling tiling,\n                                                VkImageUsageFlags usageFlags,\n                                                VkImageCreateFlags createFlags,\n                                                VkSampleCountFlagBits samples,\n                                                const char* debugName) {\n  const VkPhysicalDeviceExternalImageFormatInfo externaInfo = {\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO,\n      .handleType = kHandleType,\n  };\n  const VkPhysicalDeviceImageFormatInfo2 formatInfo2 = {\n      .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2,\n      .pNext = &externaInfo,\n      .format = format,\n      .type = VK_IMAGE_TYPE_2D,\n      .tiling = tiling,\n      .usage = usageFlags,\n      .flags = createFlags,\n  };\n\n  VkExternalImageFormatProperties externalImageFormatProperties = {\n      .sType = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES,\n  };\n  VkImageFormatProperties2 imageFormatProperties2 = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2,\n      .pNext = &externalImageFormatProperties,\n  };\n  const auto result = ctx.vf_.vkGetPhysicalDeviceImageFormatProperties2(\n      ctx.getVkPhysicalDevice(), &formatInfo2, &imageFormatProperties2);\n  if (result != VK_SUCCESS) {\n    IGL_LOG_ERROR(\n        \"External memory is not supported. format: %d image_tiling: %d usage: %d flags: %d\",\n        format,\n        tiling,\n        usageFlags,\n        createFlags);\n    return VulkanImage();\n  }\n  const auto& externalFormatProperties = externalImageFormatProperties.externalMemoryProperties;\n  if (!(externalFormatProperties.externalMemoryFeatures &\n        VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)) {\n    IGL_LOG_ERROR(\n        \"External memory cannot be exported. format: %d image_tiling: %d usage: %d flags: %d\",\n        format,\n        tiling,\n        usageFlags,\n        createFlags);\n    return VulkanImage();\n  }\n\n  VkExternalMemoryHandleTypeFlags compatibleHandleTypes =\n      VK_EXTERNAL_MEMORY_HANDLE_TYPE_FLAG_BITS_MAX_ENUM;\n\n  IGL_DEBUG_ASSERT(externalFormatProperties.compatibleHandleTypes & kHandleType);\n  compatibleHandleTypes = kHandleType;\n\n  return {ctx,\n          extent,\n          type,\n          format,\n          mipLevels,\n          arrayLayers,\n          tiling,\n          usageFlags,\n          VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,\n          createFlags,\n          samples,\n          compatibleHandleTypes,\n          debugName};\n}\n\nVulkanImage::VulkanImage(const VulkanContext& ctx,\n                         VkExtent3D extent,\n                         VkImageType type,\n                         VkFormat format,\n                         uint32_t mipLevels,\n                         uint32_t arrayLayers,\n                         VkImageTiling tiling,\n                         VkImageUsageFlags usageFlags,\n                         VkMemoryPropertyFlags memFlags,\n                         VkImageCreateFlags createFlags,\n                         VkSampleCountFlagBits samples,\n                         VkExternalMemoryHandleTypeFlags compatibleHandleTypes,\n                         const char* debugName) :\n  ctx_(&ctx),\n  physicalDevice_(ctx.getVkPhysicalDevice()),\n  device_(ctx.getVkDevice()),\n  usageFlags_(usageFlags),\n  extent_(extent),\n  type_(type),\n  imageFormat_(format),\n  mipLevels_(mipLevels),\n  arrayLayers_(arrayLayers),\n  samples_(samples),\n  isDepthFormat_(hasDepth(format)), // NOLINT(readability-identifier-naming)\n  isStencilFormat_(hasStencil(format)), // NOLINT(readability-identifier-naming)\n  isDepthOrStencilFormat_(isDepthFormat_ || isStencilFormat_),\n  isExported_(true),\n  tiling_(tiling) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_DEBUG_ASSERT(mipLevels_ > 0, \"The image must contain at least one mip level\");\n  IGL_DEBUG_ASSERT(arrayLayers_ > 0, \"The image must contain at least one layer\");\n  IGL_DEBUG_ASSERT(imageFormat_ != VK_FORMAT_UNDEFINED, \"Invalid VkFormat value\");\n  IGL_DEBUG_ASSERT(samples_ > 0, \"The image must contain at least one sample\");\n\n  const VkExternalMemoryImageCreateInfo externalImageCreateInfo = {\n      .sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,\n      .handleTypes = compatibleHandleTypes,\n  };\n\n  const VkImageCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,\n      .pNext = &externalImageCreateInfo,\n      .flags = createFlags,\n      .imageType = type,\n      .format = imageFormat_,\n      .extent = extent_,\n      .mipLevels = mipLevels_,\n      .arrayLayers = arrayLayers_,\n      .samples = samples,\n      .tiling = tiling,\n      .usage = usageFlags,\n      .sharingMode = VK_SHARING_MODE_EXCLUSIVE,\n      .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,\n  };\n\n  // create VkImage importing external memory cannot use VMA\n  VK_ASSERT(ctx_->vf_.vkCreateImage(device_, &ci, nullptr, &vkImage_));\n  VK_ASSERT(ivkSetDebugObjectName(\n      &ctx_->vf_, device_, VK_OBJECT_TYPE_IMAGE, (uint64_t)vkImage_, debugName));\n\n  // For Android we need a dedicated allocation for exporting the image, otherwise\n  // the exported handle is not generated properly.\n#if IGL_PLATFORM_ANDROID\n  VkMemoryDedicatedAllocateInfo dedicatedAllocateInfo = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,\n      .pNext = nullptr,\n      .image = vkImage_,\n      .buffer = VK_NULL_HANDLE,\n  };\n#endif // IGL_PLATFORM_ANDROID\n\n  const VkExportMemoryAllocateInfo externalMemoryAllocateInfo = {\n      .sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO,\n#if IGL_PLATFORM_ANDROID\n      .pNext = &dedicatedAllocateInfo,\n#endif // IGL_PLATFORM_ANDROID\n      .handleTypes = compatibleHandleTypes,\n  };\n\n  std::array<VkBindImagePlaneMemoryInfo, kMaxImagePlanes> bindImagePlaneMemoryInfo{};\n  std::array<VkBindImageMemoryInfo, kMaxImagePlanes> bindInfo{};\n  const uint32_t numPlanes = igl::vulkan::getNumImagePlanes(format);\n  IGL_DEBUG_ASSERT(numPlanes > 0 && numPlanes <= kMaxImagePlanes);\n  for (uint32_t p = 0; p != numPlanes; p++) {\n    auto imagePlaneMemoryRequirementsInfo = VkImagePlaneMemoryRequirementsInfo{\n        .sType = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO,\n        .planeAspect = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_PLANE_0_BIT << p),\n    };\n\n    const VkImageMemoryRequirementsInfo2 imageMemoryRequirementInfo = {\n        .sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,\n        .pNext = numPlanes > 1 ? &imagePlaneMemoryRequirementsInfo : nullptr,\n        .image = vkImage_,\n    };\n\n    VkMemoryRequirements2 memoryRequirements = {.sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2};\n    ctx_->vf_.vkGetImageMemoryRequirements2(\n        device_, &imageMemoryRequirementInfo, &memoryRequirements);\n\n    const VkMemoryAllocateInfo memoryAllocateInfo = {\n        .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,\n        .pNext = &externalMemoryAllocateInfo,\n        .allocationSize = memoryRequirements.memoryRequirements.size,\n        .memoryTypeIndex = ivkGetMemoryTypeIndex(\n            ctx_->memoryProperties, memoryRequirements.memoryRequirements.memoryTypeBits, memFlags),\n    };\n\n    IGL_LOG_INFO(\"Creating image to be exported with memoryAllocationSize %\" PRIu64\n                 \", requirements 0x%08X, ends up index 0x%08X\",\n                 memoryRequirements.memoryRequirements.size,\n                 memoryRequirements.memoryRequirements.memoryTypeBits,\n                 memoryAllocateInfo.memoryTypeIndex);\n\n    VK_ASSERT(ctx_->vf_.vkAllocateMemory(device_, &memoryAllocateInfo, nullptr, &vkMemory_[p]));\n\n    VK_ASSERT(ivkSetDebugObjectName(&ctx_->vf_,\n                                    device_,\n                                    VK_OBJECT_TYPE_DEVICE_MEMORY,\n                                    (uint64_t)vkMemory_[p],\n                                    IGL_FORMAT(\"Memory [{}]: {}\", p, debugName).c_str()));\n\n    bindImagePlaneMemoryInfo[p] = VkBindImagePlaneMemoryInfo{\n        .sType = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO,\n        .planeAspect = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_PLANE_0_BIT << p),\n    };\n    bindInfo[p] = VkBindImageMemoryInfo{\n        .sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO,\n        .pNext = numPlanes > 1 ? &bindImagePlaneMemoryInfo[p] : nullptr,\n        .image = vkImage_,\n        .memory = vkMemory_[p],\n    };\n  }\n  VK_ASSERT(ctx_->vf_.vkBindImageMemory2(device_, numPlanes, bindInfo.data()));\n\n#if IGL_PLATFORM_WINDOWS\n  const VkMemoryGetWin32HandleInfoKHR getHandleInfo{\n      .sType = VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR,\n      .memory = vkMemory_[0],\n      .handleType = kHandleType,\n  };\n  VK_ASSERT(ctx_->vf_.vkGetMemoryWin32HandleKHR(device_, &getHandleInfo, &exportedMemoryHandle_));\n#else\n\n  const VkMemoryGetFdInfoKHR getFdInfo{\n      .sType = VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR,\n      .memory = vkMemory_[0],\n      .handleType = kHandleType,\n  };\n  VK_ASSERT(ctx_->vf_.vkGetMemoryFdKHR(device_, &getFdInfo, &exportedFd_));\n\n#endif\n}\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n\nVulkanImage::~VulkanImage() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n  destroy();\n}\n\nvoid VulkanImage::destroy() {\n  if (!valid()) {\n    return;\n  }\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx_);\n\n  if (!isExternallyManaged_) {\n    if (vkMemory_[1] == VK_NULL_HANDLE) {\n      if (vmaAllocation_) {\n        if (mappedPtr_) {\n          vmaUnmapMemory((VmaAllocator)ctx_->getVmaAllocator(), vmaAllocation_);\n        }\n        ctx_->deferredTask(std::packaged_task<void()>(\n            [vma = ctx_->getVmaAllocator(), image = vkImage_, allocation = vmaAllocation_]() {\n              vmaDestroyImage((VmaAllocator)vma, image, allocation);\n            }));\n      } else {\n        if (mappedPtr_) {\n          ctx_->vf_.vkUnmapMemory(device_, vkMemory_[0]);\n        }\n        ctx_->deferredTask(std::packaged_task<void()>(\n            [vf = &ctx_->vf_, device = device_, image = vkImage_, memory = vkMemory_[0]]() {\n              vf->vkDestroyImage(device, image, nullptr);\n              if (memory != VK_NULL_HANDLE) {\n                vf->vkFreeMemory(device, memory, nullptr);\n              }\n            }));\n      }\n    } else {\n      // this never uses VMA\n      if (mappedPtr_) {\n        ctx_->vf_.vkUnmapMemory(device_, vkMemory_[0]);\n      }\n      ctx_->deferredTask(std::packaged_task<void()>([vf = &ctx_->vf_,\n                                                     device = device_,\n                                                     image = vkImage_,\n                                                     memory0 = vkMemory_[0],\n                                                     memory1 = vkMemory_[1],\n                                                     memory2 = vkMemory_[2]]() {\n        vf->vkDestroyImage(device, image, nullptr);\n        vf->vkFreeMemory(device, memory0, nullptr);\n        vf->vkFreeMemory(device, memory1, nullptr);\n        vf->vkFreeMemory(device, memory2, nullptr);\n      }));\n    }\n  }\n\n  ctx_ = nullptr;\n  vkImage_ = VK_NULL_HANDLE;\n}\n\nVulkanImageView VulkanImage::createImageView(VkImageViewType type,\n                                             VkFormat format,\n                                             VkImageAspectFlags aspectMask,\n                                             uint32_t baseLevel,\n                                             uint32_t numLevels,\n                                             uint32_t baseLayer,\n                                             uint32_t numLayers,\n                                             const char* debugName) const {\n  const VulkanImageViewCreateInfo ci = {\n      .image = vkImage_,\n      .viewType = type,\n      .format = format,\n      .subresourceRange = VkImageSubresourceRange{.aspectMask = aspectMask,\n                                                  .baseMipLevel = baseLevel,\n                                                  .levelCount = numLevels,\n                                                  .baseArrayLayer = baseLayer,\n                                                  .layerCount = numLayers},\n  };\n\n  return VulkanImageView{*ctx_, ci, debugName};\n}\n\nVulkanImageView VulkanImage::createImageView(VulkanImageViewCreateInfo createInfo,\n                                             const char* debugName) const {\n  createInfo.image = vkImage_;\n  return VulkanImageView{*ctx_, createInfo, debugName};\n}\n\nvoid VulkanImage::transitionLayout(VkCommandBuffer cmdBuf,\n                                   VkImageLayout newImageLayout,\n                                   VkPipelineStageFlags srcStageMask,\n                                   VkPipelineStageFlags dstStageMask,\n                                   const VkImageSubresourceRange& subresourceRange) const {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_TRANSITION);\n\n  VkAccessFlags srcAccessMask = 0;\n  VkAccessFlags dstAccessMask = 0;\n\n  if (imageLayout_ == VK_IMAGE_LAYOUT_UNDEFINED) {\n    // we do not need to wait for any previous operations in this case\n    srcStageMask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;\n  }\n\n  const VkPipelineStageFlags doNotRequireAccessMask =\n      VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT | VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |\n      VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;\n  VkPipelineStageFlags srcRemainingMask = srcStageMask & ~doNotRequireAccessMask;\n  VkPipelineStageFlags dstRemainingMask = dstStageMask & ~doNotRequireAccessMask;\n\n  if (srcStageMask & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT) {\n    srcAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;\n    srcRemainingMask &= ~VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;\n  }\n  if (srcStageMask & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) {\n    srcAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;\n    srcRemainingMask &= ~VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;\n  }\n  if (srcStageMask & VK_PIPELINE_STAGE_TRANSFER_BIT) {\n    srcAccessMask |= VK_ACCESS_TRANSFER_WRITE_BIT;\n    srcRemainingMask &= ~VK_PIPELINE_STAGE_TRANSFER_BIT;\n  }\n  if (srcStageMask & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT) {\n    srcAccessMask |= VK_ACCESS_SHADER_READ_BIT;\n    srcAccessMask |= VK_ACCESS_SHADER_WRITE_BIT;\n    srcRemainingMask &= ~VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;\n  }\n  if (srcStageMask & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT) {\n    srcAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT;\n    srcAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;\n    srcRemainingMask &= ~VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT;\n  }\n  if (srcStageMask & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT) {\n    srcAccessMask |= VK_ACCESS_SHADER_READ_BIT;\n    srcRemainingMask &= ~VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;\n  }\n\n  (void)srcRemainingMask;\n  IGL_DEBUG_ASSERT(\n      srcRemainingMask == 0,\n      \"Automatic access mask deduction is not implemented (yet) for this srcStageMask = %u\",\n      srcRemainingMask);\n\n  if (dstStageMask & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT) {\n    dstAccessMask |= VK_ACCESS_SHADER_READ_BIT;\n    dstAccessMask |= VK_ACCESS_SHADER_WRITE_BIT;\n    dstRemainingMask &= ~VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT) {\n    dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;\n    dstRemainingMask &= ~VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT) {\n    dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT;\n    dstAccessMask |= VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;\n    dstRemainingMask &= ~VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT) {\n    dstAccessMask |= VK_ACCESS_SHADER_READ_BIT;\n    dstRemainingMask &= ~VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT) {\n    dstAccessMask |= VK_ACCESS_SHADER_READ_BIT;\n    dstRemainingMask &= ~VK_PIPELINE_STAGE_VERTEX_SHADER_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT) {\n    dstAccessMask |= VK_ACCESS_INDEX_READ_BIT;\n    dstAccessMask |= VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT;\n    dstRemainingMask &= ~VK_PIPELINE_STAGE_VERTEX_INPUT_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT) {\n    dstAccessMask |= VK_ACCESS_INDIRECT_COMMAND_READ_BIT;\n    dstRemainingMask &= ~VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) {\n    dstAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_READ_BIT;\n    dstAccessMask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;\n    dstRemainingMask &= ~VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;\n  }\n  if (dstStageMask & VK_PIPELINE_STAGE_TRANSFER_BIT) {\n    dstAccessMask |= VK_ACCESS_TRANSFER_READ_BIT;\n    dstAccessMask |= VK_ACCESS_TRANSFER_WRITE_BIT;\n    dstRemainingMask &= ~VK_PIPELINE_STAGE_TRANSFER_BIT;\n  }\n\n  (void)dstRemainingMask;\n  IGL_DEBUG_ASSERT(\n      dstRemainingMask == 0,\n      \"Automatic access mask deduction is not implemented (yet) for this dstStageMask = %u\",\n      dstRemainingMask);\n\n#if IGL_DEBUG_ENFORCE_FULL_IMAGE_BARRIER\n  // full image barrier\n  srcAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;\n  dstAccessMask = VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT;\n\n  srcStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;\n  dstStageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT;\n#endif // IGL_DEBUG_ENFORCE_FULL_IMAGE_BARRIER\n\n  ivkImageMemoryBarrier(&ctx_->vf_,\n                        cmdBuf,\n                        vkImage_,\n                        srcAccessMask,\n                        dstAccessMask,\n                        imageLayout_,\n                        newImageLayout,\n                        srcStageMask,\n                        dstStageMask,\n                        subresourceRange);\n\n  imageLayout_ = newImageLayout;\n}\n\nvoid VulkanImage::clearColorImage(VkCommandBuffer commandBuffer,\n                                  const igl::Color& rgba,\n                                  const VkImageSubresourceRange* subresourceRange) const {\n  IGL_DEBUG_ASSERT(usageFlags_ & VK_IMAGE_USAGE_TRANSFER_DST_BIT);\n  IGL_DEBUG_ASSERT(samples_ == VK_SAMPLE_COUNT_1_BIT);\n  IGL_DEBUG_ASSERT(!isDepthOrStencilFormat_);\n\n  const VkImageLayout oldLayout = imageLayout_;\n\n  VkClearColorValue value;\n  value.float32[0] = rgba.r;\n  value.float32[1] = rgba.g;\n  value.float32[2] = rgba.b;\n  value.float32[3] = rgba.a;\n\n  const VkImageSubresourceRange defaultRange{\n      .aspectMask = getImageAspectFlags(),\n      .baseMipLevel = 0,\n      .levelCount = VK_REMAINING_MIP_LEVELS,\n      .baseArrayLayer = 0,\n      .layerCount = VK_REMAINING_ARRAY_LAYERS,\n  };\n\n  transitionLayout(commandBuffer,\n                   VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                   VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n                   VK_PIPELINE_STAGE_TRANSFER_BIT,\n                   subresourceRange ? *subresourceRange : defaultRange);\n\n  ctx_->vf_.vkCmdClearColorImage(commandBuffer,\n                                 getVkImage(),\n                                 VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                                 &value,\n                                 1,\n                                 subresourceRange ? subresourceRange : &defaultRange);\n\n  const VkImageLayout newLayout =\n      oldLayout == VK_IMAGE_LAYOUT_UNDEFINED\n          ? (usageFlags_ & VK_IMAGE_USAGE_SAMPLED_BIT ? VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL\n                                                      : VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)\n          : oldLayout;\n\n  transitionLayout(commandBuffer,\n                   newLayout,\n                   VK_PIPELINE_STAGE_TRANSFER_BIT,\n                   VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n                   subresourceRange ? *subresourceRange : defaultRange);\n}\n\nVkImageAspectFlags VulkanImage::getImageAspectFlags() const {\n  VkImageAspectFlags flags = 0;\n\n  if (isDepthFormat_) {\n    flags |= VK_IMAGE_ASPECT_DEPTH_BIT;\n  }\n  if (isStencilFormat_) {\n    flags |= VK_IMAGE_ASPECT_STENCIL_BIT;\n  }\n  if (!isDepthOrStencilFormat_) {\n    flags |= VK_IMAGE_ASPECT_COLOR_BIT;\n  }\n\n  return flags;\n}\n\nvoid VulkanImage::generateMipmap(VkCommandBuffer commandBuffer,\n                                 const TextureRangeDesc& range) const {\n  IGL_PROFILER_FUNCTION();\n\n  // Check if device supports downscaling for color or depth/stencil buffer based on image format\n  {\n    const uint32_t formatFeatureMask =\n        (VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT);\n\n    const bool hardwareDownscalingSupported =\n        ((formatProperties_.optimalTilingFeatures & formatFeatureMask) == formatFeatureMask);\n\n    if (!IGL_DEBUG_VERIFY(hardwareDownscalingSupported)) {\n      IGL_DEBUG_ABORT(IGL_FORMAT(\"Doesn't support hardware downscaling of this image format: {}\",\n                                 uint32_t(imageFormat_))\n                          .c_str());\n      return;\n    }\n  }\n\n  // Choose linear filter for color formats if supported by the device, else use nearest filter\n  // Choose nearest filter by default for depth/stencil formats\n  const VkFilter blitFilter =\n      [](bool isDepthOrStencilFormat, bool imageFilterLinear) {\n        if (isDepthOrStencilFormat) {\n          return VK_FILTER_NEAREST;\n        }\n        if (imageFilterLinear) {\n          return VK_FILTER_LINEAR;\n        }\n        return VK_FILTER_NEAREST;\n      }(isDepthOrStencilFormat_,\n        (formatProperties_.optimalTilingFeatures &\n         VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT) != 0u);\n\n  const VkImageAspectFlags imageAspectFlags = getImageAspectFlags();\n\n  ivkCmdBeginDebugUtilsLabel(\n      &ctx_->vf_, commandBuffer, \"Generate mipmaps\", K_COLOR_GENERATE_MIPMAPS.toFloatPtr());\n\n  IGL_SCOPE_EXIT {\n    ivkCmdEndDebugUtilsLabel(&ctx_->vf_, commandBuffer);\n  };\n\n  const VkImageLayout originalImageLayout = imageLayout_;\n\n  IGL_DEBUG_ASSERT(originalImageLayout != VK_IMAGE_LAYOUT_UNDEFINED);\n\n  IGL_DEBUG_ASSERT(!isCubemap_ || arrayLayers_ % 6u == 0,\n                   \"Cubemaps must have a multiple of 6 array layers!\");\n  const uint32_t multiplier = isCubemap_ ? arrayLayers_ / 6u : 1u;\n\n  // 0: Transition the first mip-level - all layers - to VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL\n  transitionLayout(\n      commandBuffer,\n      VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n      VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n      VK_PIPELINE_STAGE_TRANSFER_BIT,\n      VkImageSubresourceRange{\n          imageAspectFlags, range.mipLevel, range.numMipLevels, 0, VK_REMAINING_ARRAY_LAYERS});\n\n  for (uint32_t arrayLayer = range.layer; arrayLayer < (range.layer + range.numLayers);\n       ++arrayLayer) {\n    for (uint32_t face = range.face; face < (range.face + range.numFaces); ++face) {\n      const uint32_t layer = arrayLayer * multiplier + face;\n      int32_t mipWidth = extent_.width > 1 ? (int32_t)extent_.width >> (range.mipLevel) : 1;\n      int32_t mipHeight = extent_.height > 1 ? (int32_t)extent_.height >> (range.mipLevel) : 1;\n\n      for (uint32_t i = (range.mipLevel + 1); i < (range.mipLevel + range.numMipLevels); ++i) {\n        // 1: Transition the i-th level to VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL\n        //    It will be copied into from the (i-1)-th layer\n        ivkImageMemoryBarrier(&ctx_->vf_,\n                              commandBuffer,\n                              vkImage_,\n                              0, /* srcAccessMask */\n                              VK_ACCESS_TRANSFER_WRITE_BIT, /* dstAccessMask */\n                              VK_IMAGE_LAYOUT_UNDEFINED, /* oldImageLayout */\n                              VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, /* newImageLayout */\n                              VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, /* srcStageMask */\n                              VK_PIPELINE_STAGE_TRANSFER_BIT, /* dstStageMask */\n                              VkImageSubresourceRange{imageAspectFlags, i, 1, layer, 1});\n\n        const int32_t nextLevelWidth = mipWidth > 1 ? mipWidth / 2 : 1;\n        const int32_t nextLevelHeight = mipHeight > 1 ? mipHeight / 2 : 1;\n\n        const std::array<VkOffset3D, 2> srcOffsets = {\n            VkOffset3D{0, 0, 0},\n            VkOffset3D{mipWidth, mipHeight, 1},\n        };\n        const std::array<VkOffset3D, 2> dstOffsets = {\n            VkOffset3D{0, 0, 0},\n            VkOffset3D{nextLevelWidth, nextLevelHeight, 1},\n        };\n\n        // 2: Blit the image from the prev mip-level (i-1) (VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)\n        // to the current mip level (i) (VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)\n#if IGL_VULKAN_PRINT_COMMANDS\n        IGL_LOG_INFO(\"%p vkCmdBlitImage()\\n\", commandBuffer);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n        ivkCmdBlitImage(&ctx_->vf_,\n                        commandBuffer,\n                        vkImage_,\n                        vkImage_,\n                        VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n                        VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                        srcOffsets.data(),\n                        dstOffsets.data(),\n                        VkImageSubresourceLayers{imageAspectFlags, i - 1, layer, 1},\n                        VkImageSubresourceLayers{imageAspectFlags, i, layer, 1},\n                        blitFilter);\n\n        // 3: Transition i-th level to VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL as it will be read\n        // from in the next iteration\n        ivkImageMemoryBarrier(&ctx_->vf_,\n                              commandBuffer,\n                              vkImage_,\n                              VK_ACCESS_TRANSFER_WRITE_BIT, /* srcAccessMask */\n                              VK_ACCESS_TRANSFER_READ_BIT, /* dstAccessMask */\n                              VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, /* oldImageLayout */\n                              VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, /* newImageLayout */\n                              VK_PIPELINE_STAGE_TRANSFER_BIT, /* srcStageMask */\n                              VK_PIPELINE_STAGE_TRANSFER_BIT /* dstStageMask */,\n                              VkImageSubresourceRange{imageAspectFlags, i, 1, layer, 1});\n\n        // Compute the size of the next mip-level\n        mipWidth = nextLevelWidth;\n        mipHeight = nextLevelHeight;\n      }\n    }\n  }\n\n  // 4: Transition all levels and layers/faces to their final layout\n  ivkImageMemoryBarrier(\n      &ctx_->vf_,\n      commandBuffer,\n      vkImage_,\n      VK_ACCESS_TRANSFER_WRITE_BIT, // srcAccessMask\n      0, // dstAccessMask\n      VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // oldImageLayout\n      originalImageLayout, // newImageLayout\n      VK_PIPELINE_STAGE_TRANSFER_BIT, // srcStageMask\n      VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, // dstStageMask\n      VkImageSubresourceRange{\n          imageAspectFlags, range.mipLevel, range.numMipLevels, 0, VK_REMAINING_ARRAY_LAYERS});\n\n  imageLayout_ = originalImageLayout;\n}\n\nvoid VulkanImage::setName(std::string name) noexcept { // NOLINT(bugprone-exception-escape)\n#if IGL_DEBUG\n  name_ = std::move(name);\n#else\n  (void)name;\n#endif\n}\n\nbool VulkanImage::valid() const {\n  return ctx_ != nullptr;\n}\n\nVulkanImage& VulkanImage::operator=(VulkanImage&& other) noexcept {\n  destroy();\n  ctx_ = other.ctx_;\n  physicalDevice_ = other.physicalDevice_;\n  device_ = other.device_;\n  vkImage_ = other.vkImage_;\n  usageFlags_ = other.usageFlags_;\n  vmaAllocation_ = other.vmaAllocation_;\n  formatProperties_ = other.formatProperties_;\n  mappedPtr_ = other.mappedPtr_;\n  isExternallyManaged_ = other.isExternallyManaged_;\n  extent_ = other.extent_;\n  type_ = other.type_;\n  imageFormat_ = other.imageFormat_;\n  mipLevels_ = other.mipLevels_;\n  arrayLayers_ = other.arrayLayers_;\n  samples_ = other.samples_;\n  isDepthFormat_ = other.isDepthFormat_;\n  isStencilFormat_ = other.isStencilFormat_;\n  isDepthOrStencilFormat_ = other.isDepthOrStencilFormat_;\n  allocatedSize = other.allocatedSize;\n  imageLayout_ = other.imageLayout_;\n  isImported_ = other.isImported_;\n  isCubemap_ = other.isCubemap_;\n  isExported_ = other.isExported_;\n  exportedMemoryHandle_ = other.exportedMemoryHandle_;\n  exportedFd_ = other.exportedFd_;\n#if IGL_DEBUG\n  name_ = std::move(other.name_);\n#endif\n  tiling_ = other.tiling_;\n  isCoherentMemory_ = other.isCoherentMemory_;\n  extendedFormat_ = other.extendedFormat_;\n  samplerYcbcrConversionCreateInfo_ = other.samplerYcbcrConversionCreateInfo_;\n  for (size_t i = 0; i != IGL_ARRAY_NUM_ELEMENTS(vkMemory_); i++) {\n    vkMemory_[i] = other.vkMemory_[i];\n  }\n\n  other.ctx_ = nullptr;\n  other.vkImage_ = VK_NULL_HANDLE;\n\n  return *this;\n}\n\nvoid VulkanImage::flushMappedMemory() const {\n  if (!isMappedPtrAccessible() || isCoherentMemory()) {\n    return;\n  }\n\n  if (vmaAllocation_) {\n    vmaFlushAllocation((VmaAllocator)ctx_->getVmaAllocator(), vmaAllocation_, 0, VK_WHOLE_SIZE);\n  } else {\n    const VkMappedMemoryRange memoryRange = {\n        .sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE,\n        .memory = vkMemory_[0],\n        .offset = 0,\n        .size = VK_WHOLE_SIZE,\n    };\n    ctx_->vf_.vkFlushMappedMemoryRanges(device_, 1, &memoryRange);\n  }\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanImage.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanHelpers.h>\n#include <igl/vulkan/VulkanImageView.h>\n\nstruct AHardwareBuffer;\n\nnamespace igl::vulkan {\n\nclass VulkanContext;\n\nstruct VulkanImageCreateInfo {\n  VkImageUsageFlags usageFlags = 0;\n  bool isExternallyManaged = true;\n  VkExtent3D extent = VkExtent3D{0, 0, 0};\n  VkImageType type = VK_IMAGE_TYPE_MAX_ENUM;\n  VkFormat imageFormat = VK_FORMAT_UNDEFINED;\n  uint32_t mipLevels = 1;\n  uint32_t arrayLayers = 1;\n  VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT;\n  bool isImported = false;\n};\n\n/**\n * @brief Encapsulates a Vulkan Image object (`VkImage`) along with some of its properties\n */\nclass VulkanImage final {\n public:\n  explicit VulkanImage() = default;\n  /**\n   * @brief Constructs a `VulkanImage` object from a `VkImage` object. If a debug name is provided,\n   * the constructor will assign it to the `VkImage` object. No other Vulkan functions are called\n   */\n  VulkanImage(const VulkanContext& ctx,\n              VkImage image,\n              const char* debugName = nullptr,\n              VkImageUsageFlags usageFlags = 0,\n              bool isExternallyManaged = true,\n              VkExtent3D extent = VkExtent3D{0, 0, 0},\n              VkImageType type = VK_IMAGE_TYPE_MAX_ENUM,\n              VkFormat imageFormat = VK_FORMAT_UNDEFINED,\n              uint32_t mipLevels = 1,\n              uint32_t arrayLayers = 1,\n              VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT,\n              bool isImported = false);\n\n  /**\n   * @brief Constructs a `VulkanImage` object from a `VkImage` object. If a debug name is provided,\n   * the constructor will assign it to the `VkImage` object. No other Vulkan functions are called\n   */\n  VulkanImage(const VulkanContext& ctx,\n              VkImage image,\n              const VulkanImageCreateInfo& createInfo,\n              const char* debugName = nullptr);\n\n  /**\n   * @brief Constructs a `VulkanImage` object and a `VkImage` object. Except for the debug name, all\n   * other parameters are required. The debug name, if provided, is associated with the newly\n   * created `VkImage` object.\n   *\n   * The image must contain at least one mip level, one array layer and one sample\n   * (`VK_SAMPLE_COUNT_1_BIT`). The format cannot be undefined (`VK_FORMAT_UNDEFINED`).\n   *\n   * If the image is host-visible (`memFlags` contains `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`), then\n   * it is memory mapped until the object's destruction.\n   */\n  VulkanImage(const VulkanContext& ctx,\n              VkExtent3D extent,\n              VkImageType type,\n              VkFormat format,\n              uint32_t mipLevels,\n              uint32_t arrayLayers,\n              VkImageTiling tiling,\n              VkImageUsageFlags usageFlags,\n              VkMemoryPropertyFlags memFlags,\n              VkImageCreateFlags createFlags,\n              VkSampleCountFlagBits samples,\n              const char* debugName = nullptr);\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n  /**\n   * @brief Constructs a `VulkanImage` object and a `VkImage` object from an `AHardwareBuffer`. The\n   * `VkImage` object is backed by external memory.\n   *\n   * This constructor does not support VMA.\n   *\n   * Except for the debug name, all other parameters are required. The debug name, if provided, is\n   * associated with the newly created `VkImage` object.\n   *\n   * The image must contain at least one mip-level, one array layer and one sample\n   * (`VK_SAMPLE_COUNT_1_BIT`). The format cannot be undefined (`VK_FORMAT_UNDEFINED`).\n   *\n   * If the image is host-visible (`memFlags` contains `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`), then\n   * it is memory mapped until the object's destruction.\n   *\n   * This constructor is only supported on Android environments.\n   *\n   * NOTE: Importing a hardware buffer causes Vulkan to acquire a reference to the hardware buffer,\n   * which it releases when the allocated memory is freed. Destroying a VulkanImage does not\n   * necessarily guarantee that the underlying hardware buffer is also freed, as the application may\n   * retain additional references to the hardware buffer.\n   */\n  VulkanImage(const VulkanContext& ctx,\n              AHardwareBuffer* ahb,\n              uint64_t memoryAllocationSize,\n              VkExtent3D extent,\n              VkImageType type,\n              VkFormat format,\n              uint32_t mipLevels,\n              uint32_t arrayLayers,\n              VkImageTiling tiling,\n              VkImageUsageFlags usageFlags,\n              VkImageCreateFlags createFlags,\n              VkSampleCountFlagBits samples,\n              const char* debugName = nullptr);\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n  /**\n   * @brief Constructs a `VulkanImage` object and a `VkImage` object from a file descriptor. The\n   * `VkImage` object is backed by external memory. The handle type of the external memory used is\n   * `VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR`.\n   *\n   * This constructor does not support VMA.\n   *\n   * Except for the debug name, all other parameters are required. The debug name, if provided, is\n   * associated with the newly created VkImage object.\n   *\n   * The image must contain at least one mip level, one array layer and one sample\n   * (`VK_SAMPLE_COUNT_1_BIT`). The format cannot be undefined (`VK_FORMAT_UNDEFINED`).\n   *\n   * If the image is host-visible (`memFlags` contains `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`), then\n   * it is memory mapped until the object's destruction.\n   *\n   * This constructor is only supported on non-Windows environments.\n   *\n   * NOTE: Importing memory from a file descriptor transfers ownership of the descriptor from the\n   * application to the Vulkan implementation. The application must not perform any operations on\n   * the file descriptor after a successful import. The file descriptors are closed on object's\n   * destruction automatically.\n   */\n  VulkanImage(const VulkanContext& ctx,\n              int32_t undupedFileDescriptor,\n              uint64_t memoryAllocationSize,\n              VkExtent3D extent,\n              VkImageType type,\n              VkFormat format,\n              uint32_t mipLevels,\n              uint32_t arrayLayers,\n              VkImageTiling tiling,\n              VkImageUsageFlags usageFlags,\n              VkImageCreateFlags createFlags,\n              VkSampleCountFlagBits samples,\n              const char* debugName = nullptr);\n\n#if IGL_PLATFORM_WINDOWS\n  /**\n   * @brief Creates a `VulkanImage` with memory imported from a Windows handle.\n   * NOTE:\n   * 1. This should only be called on Windows and will crash on other platforms.\n   * 2. The implementation currently only supports handleType\n   * `VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT`, which means the handle must be created\n   * by Vulkan API, not other graphics API.\n   */\n  VulkanImage(const VulkanContext& ctx,\n              void* windowsHandle,\n              VkExtent3D extent,\n              VkImageType type,\n              VkFormat format,\n              uint32_t mipLevels,\n              uint32_t arrayLayers,\n              VkImageTiling tiling,\n              VkImageUsageFlags usageFlags,\n              VkImageCreateFlags createFlags,\n              VkSampleCountFlagBits samples,\n              const char* debugName = nullptr);\n#endif // IGL_PLATFORM_WINDOWS\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n  /**\n   * @brief Creates a `VulkanImage` object whose memory can be exported externally.\n   * On Windows, the exported `HANDLE` will be stored in `exportedMemoryHandle_`.\n   * On Linux/Android, the exported file descriptor will be stored in `exportedFd_`.\n   */\n  static VulkanImage createWithExportMemory(const VulkanContext& ctx,\n                                            VkExtent3D extent,\n                                            VkImageType type,\n                                            VkFormat format,\n                                            uint32_t mipLevels,\n                                            uint32_t arrayLayers,\n                                            VkImageTiling tiling,\n                                            VkImageUsageFlags usageFlags,\n                                            VkImageCreateFlags createFlags,\n                                            VkSampleCountFlagBits samples,\n                                            const char* debugName = nullptr);\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n\n  ~VulkanImage();\n\n  VulkanImage(const VulkanImage&) = default;\n  VulkanImage& operator=(const VulkanImage&) = delete;\n\n  VulkanImage(VulkanImage&& other) noexcept {\n    *this = std::move(other);\n  }\n  VulkanImage& operator=(VulkanImage&& other) noexcept;\n\n  VkImage getVkImage() const {\n    return vkImage_;\n  }\n\n  /**\n   * @brief Returns true if the object is valid\n   */\n  bool valid() const;\n\n  VkImageUsageFlags getVkImageUsageFlags() const {\n    return usageFlags_;\n  }\n\n  bool isSampledImage() const {\n    return (usageFlags_ & VK_IMAGE_USAGE_SAMPLED_BIT) > 0;\n  }\n\n  bool isStorageImage() const {\n    return (usageFlags_ & VK_IMAGE_USAGE_STORAGE_BIT) > 0;\n  }\n\n  /**\n   * @brief Creates a `VkImageView` object from the `VkImage` stored in the object.\n   *\n   * Setting `numLevels` to a non-zero value will override `mipLevels_` value from the original\n   * vulkan image, and can be used to create image views with different number of levels\n   */\n  VulkanImageView createImageView(VkImageViewType type,\n                                  VkFormat format,\n                                  VkImageAspectFlags aspectMask,\n                                  uint32_t baseLevel,\n                                  uint32_t numLevels = VK_REMAINING_MIP_LEVELS,\n                                  uint32_t baseLayer = 0,\n                                  uint32_t numLayers = 1,\n                                  const char* debugName = nullptr) const;\n  VulkanImageView createImageView(VulkanImageViewCreateInfo createInfo,\n                                  const char* debugName = nullptr) const;\n  void generateMipmap(VkCommandBuffer commandBuffer, const TextureRangeDesc& range) const;\n\n  /**\n   * @brief Transitions the `VkImage`'s layout from the current layout (stored in the object) to the\n   * `newImageLayout` by recording an Image Memory Barrier into the commandBuffer.\n   *\n   * The source and destination access masks for the transition are automatically deduced based on\n   * the `srcStageMask` and the `dstStageMask` parameters. Not not all `VkPipelineStageFlags` are\n   * supported.\n   */\n  void transitionLayout(VkCommandBuffer cmdBuf,\n                        VkImageLayout newImageLayout,\n                        VkPipelineStageFlags srcStageMask,\n                        VkPipelineStageFlags dstStageMask,\n                        const VkImageSubresourceRange& subresourceRange) const;\n  void clearColorImage(VkCommandBuffer commandBuffer,\n                       const igl::Color& rgba,\n                       const VkImageSubresourceRange* subresourceRange = nullptr) const;\n\n  VkImageAspectFlags getImageAspectFlags() const;\n\n  bool isMappedPtrAccessible() const {\n    return (mappedPtr_ != nullptr) && ((tiling_ & VK_IMAGE_TILING_LINEAR) != 0);\n  }\n\n  bool isCoherentMemory() const {\n    return isCoherentMemory_;\n  }\n\n  void flushMappedMemory() const;\n\n public:\n  // Vulkan as for v1.3.210 supports max 3 planes for multi-plane images.\n  static constexpr uint8_t kMaxImagePlanes = 3;\n\n  const VulkanContext* ctx_ = nullptr;\n  VkPhysicalDevice physicalDevice_ = VK_NULL_HANDLE;\n  VkDevice device_ = VK_NULL_HANDLE;\n  VkImage vkImage_ = VK_NULL_HANDLE;\n  VkImageUsageFlags usageFlags_ = 0;\n  // Separate VkDeviceMemory objects to support disjoint multiplanar images\n  // NOLINTNEXTLINE(modernize-avoid-c-arrays)\n  VkDeviceMemory vkMemory_[kMaxImagePlanes] = {VK_NULL_HANDLE, VK_NULL_HANDLE, VK_NULL_HANDLE};\n  VmaAllocation vmaAllocation_ = VK_NULL_HANDLE;\n  VkFormatProperties formatProperties_{};\n  void* mappedPtr_ = nullptr;\n  bool isExternallyManaged_ = false;\n  VkExtent3D extent_ = {0, 0, 0};\n  VkImageType type_ = VK_IMAGE_TYPE_MAX_ENUM;\n  VkFormat imageFormat_ = VK_FORMAT_UNDEFINED;\n  uint32_t mipLevels_ = 1;\n  uint32_t arrayLayers_ = 1;\n  VkSampleCountFlagBits samples_ = VK_SAMPLE_COUNT_1_BIT;\n  bool isDepthFormat_ = false;\n  bool isStencilFormat_ = false;\n  bool isDepthOrStencilFormat_ = false;\n  VkDeviceSize allocatedSize = 0;\n  mutable VkImageLayout imageLayout_ = VK_IMAGE_LAYOUT_UNDEFINED; // current image layout\n  bool isImported_ = false;\n  bool isExported_ = false;\n  bool isCubemap_ = false;\n  void* exportedMemoryHandle_ = nullptr; // windows handle\n  int exportedFd_ = -1; // linux fd\n  uint32_t extendedFormat_ = 0; // defined by VkAndroidHardwareBufferFormatPropertiesANDROID\n  VkSamplerYcbcrConversionCreateInfo samplerYcbcrConversionCreateInfo_ = {};\n#if IGL_DEBUG\n  std::string name_;\n#endif\n\n private:\n  VkImageTiling tiling_ = VK_IMAGE_TILING_OPTIMAL;\n  bool isCoherentMemory_ = false;\n\n#if IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n  /**\n   * @brief Constructs a `VulkanImage` object and a `VkImage` object. Except for the debug name, all\n   * other parameters are required. The debug name, if provided, is associated with the newly\n   * created `VkImage` object.\n   *\n   * This version is only supported on Windows, Linux and Android environments and accepts both\n   * `VkExternalMemoryImageCreateInfoKHR` and `VkExportMemoryAllocateInfoKHR` pre-filled structures.\n   *\n   * On Windows, the external memory handle is stored in `exportedMemoryHandle_`. On Linux and\n   * Android the external memory handle is stored in `exportedFd_`.\n   *\n   * The image must contain at least one mip level, one array layer and one sample\n   * (`VK_SAMPLE_COUNT_1_BIT`). The format cannot be undefined (`VK_FORMAT_UNDEFINED`).\n   *\n   * If the image is host-visible (`memFlags` contains `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`), then\n   * it is memory mapped until the object's destruction.\n   */\n  VulkanImage(const VulkanContext& ctx,\n              VkExtent3D extent,\n              VkImageType type,\n              VkFormat format,\n              uint32_t mipLevels,\n              uint32_t arrayLayers,\n              VkImageTiling tiling,\n              VkImageUsageFlags usageFlags,\n              VkMemoryPropertyFlags memFlags,\n              VkImageCreateFlags createFlags,\n              VkSampleCountFlagBits samples,\n              VkExternalMemoryHandleTypeFlags compatibleHandleTypes,\n              const char* debugName);\n#endif // IGL_PLATFORM_WINDOWS || IGL_PLATFORM_LINUX || IGL_PLATFORM_ANDROID\n\n  // No-op in all builds except DEBUG\n  void setName(std::string name) noexcept;\n\n  void destroy();\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanImageView.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanImageView.h\"\n\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanContext.h>\n\nnamespace igl::vulkan {\n\nVulkanImageView::VulkanImageView(const VulkanContext& ctx,\n                                 const VulkanImageViewCreateInfo& ci,\n                                 const char* debugName) :\n  VulkanImageView(ctx,\n                  VkImageViewCreateInfo{\n                      .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,\n                      .pNext = nullptr,\n                      .flags = 0,\n                      .image = ci.image,\n                      .viewType = ci.viewType,\n                      .format = ci.format,\n                      .components = ci.components,\n                      .subresourceRange = ci.subresourceRange,\n                  },\n                  debugName) {}\n\nVulkanImageView::~VulkanImageView() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n  destroy();\n}\n\nVulkanImageView::VulkanImageView(const VulkanContext& ctx,\n                                 const VkImageViewCreateInfo& ci,\n                                 const char* debugName) :\n  ctx(&ctx), aspectMask(ci.subresourceRange.aspectMask) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  VkImageViewCreateInfo ciCopy(ci);\n\n  VkSamplerYcbcrConversionInfo info{};\n\n  if (!ci.pNext && igl::vulkan::getNumImagePlanes(ci.format) > 1) {\n    info = ctx.getOrCreateYcbcrConversionInfo(ci.format);\n    ciCopy.pNext = &info;\n  }\n\n  VkDevice device = this->ctx->getVkDevice();\n  VK_ASSERT(this->ctx->vf_.vkCreateImageView(device, &ci, nullptr, &vkImageView));\n\n  VK_ASSERT(ivkSetDebugObjectName(\n      &this->ctx->vf_, device, VK_OBJECT_TYPE_IMAGE_VIEW, (uint64_t)vkImageView, debugName));\n}\n\nVulkanImageView& VulkanImageView::operator=(VulkanImageView&& other) noexcept {\n  destroy();\n  ctx = other.ctx;\n  vkImageView = other.vkImageView;\n  aspectMask = other.aspectMask;\n  other.ctx = nullptr;\n  other.vkImageView = VK_NULL_HANDLE;\n  other.aspectMask = 0;\n  return *this;\n}\n\n[[nodiscard]] bool VulkanImageView::valid() const {\n  return ctx != nullptr;\n}\n\nvoid VulkanImageView::destroy() {\n  if (!valid()) {\n    return;\n  }\n\n  IGL_ENSURE_VULKAN_CONTEXT_THREAD(ctx);\n\n  ctx->deferredTask(std::packaged_task<void()>(\n      [vf = &ctx->vf_, device = ctx->getVkDevice(), imageView = vkImageView]() {\n        vf->vkDestroyImageView(device, imageView, nullptr);\n      }));\n\n  vkImageView = VK_NULL_HANDLE;\n  ctx = nullptr;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanImageView.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanHelpers.h>\n\nnamespace igl::vulkan {\n\nclass VulkanContext;\n\nstruct VulkanImageViewCreateInfo {\n  VkImage image = VK_NULL_HANDLE;\n  VkImageViewType viewType = VK_IMAGE_VIEW_TYPE_2D;\n  VkFormat format = VK_FORMAT_UNDEFINED;\n  VkComponentMapping components = {\n      .r = VK_COMPONENT_SWIZZLE_IDENTITY,\n      .g = VK_COMPONENT_SWIZZLE_IDENTITY,\n      .b = VK_COMPONENT_SWIZZLE_IDENTITY,\n      .a = VK_COMPONENT_SWIZZLE_IDENTITY,\n  };\n  VkImageSubresourceRange subresourceRange = {\n      .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,\n      .baseMipLevel = 0,\n      .levelCount = 1,\n      .baseArrayLayer = 0,\n      .layerCount = 1,\n  };\n};\n\n/**\n * @brief VulkanImageView is a RAII wrapper for VkImageView.\n * The device member is not managed by this class (it is used to destroy the imageView).\n */\nclass VulkanImageView final {\n public:\n  explicit VulkanImageView() = default;\n  /**\n   * @brief Creates the VulkanImageView object which stores a handle to a newly created VkImageView.\n   * The imageView is created from the device, image, and other parameters with a name that can be\n   * used for debugging.\n   */\n  VulkanImageView(const VulkanContext& ctx,\n                  const VulkanImageViewCreateInfo& ci,\n                  const char* debugName = nullptr);\n\n  VulkanImageView(const VulkanContext& ctx,\n                  const VkImageViewCreateInfo& ci,\n                  const char* debugName = nullptr);\n\n  ~VulkanImageView();\n\n  VulkanImageView(const VulkanImageView&) = delete;\n  VulkanImageView& operator=(const VulkanImageView&) = delete;\n\n  VulkanImageView(VulkanImageView&& other) noexcept {\n    *this = std::move(other);\n  }\n  VulkanImageView& operator=(VulkanImageView&& other) noexcept;\n\n  /**\n   * @brief Returns Vulkan's opaque handle to the imageView object\n   */\n  [[nodiscard]] VkImageView getVkImageView() const {\n    return vkImageView;\n  }\n  /**\n   * @brief Returns true if the object is valid\n   */\n  [[nodiscard]] bool valid() const;\n  /**\n   * @brief Returns the VkImageAspectFlags used to create the imageView\n   */\n  [[nodiscard]] VkImageAspectFlags getVkImageAspectFlags() const {\n    return aspectMask;\n  }\n\n public:\n  const VulkanContext* ctx = nullptr;\n  VkImageView vkImageView = VK_NULL_HANDLE;\n  VkImageAspectFlags aspectMask = 0;\n\n private:\n  void destroy();\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanImmediateCommands.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanImmediateCommands.h\"\n\n#include <utility>\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nVulkanImmediateCommands::VulkanImmediateCommands(const VulkanFunctionTable& vf,\n                                                 VkDevice device,\n                                                 uint32_t queueFamilyIndex,\n                                                 bool exportableFences,\n                                                 bool useTimelineSemaphoreAndSynchronization2,\n                                                 const char* debugName) :\n  vf_(vf),\n  device_(device),\n  debugName_(debugName),\n  lastSubmitSemaphore_({\n      .sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO,\n      .semaphore = VK_NULL_HANDLE,\n      .value = 0ull,\n      .stageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n      .deviceIndex = 0ul,\n  }),\n  waitSemaphore_({\n      .sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO,\n      .semaphore = VK_NULL_HANDLE,\n      .value = 0ull,\n      .stageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n      .deviceIndex = 0ul,\n  }),\n  signalSemaphore_({\n      .sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO,\n      .semaphore = VK_NULL_HANDLE,\n      .value = 0ull,\n      .stageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n      .deviceIndex = 0ul,\n  }),\n  useTimelineSemaphoreAndSynchronization2_(useTimelineSemaphoreAndSynchronization2) {\n  IGL_PROFILER_FUNCTION();\n\n  vf_.vkGetDeviceQueue(device_, queueFamilyIndex, 0, &queue_);\n\n  VK_ASSERT(ivkCreateCommandPool(&vf_,\n                                 device_,\n                                 VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |\n                                     VK_COMMAND_POOL_CREATE_TRANSIENT_BIT,\n                                 queueFamilyIndex,\n                                 &commandPool_));\n\n  ivkSetDebugObjectName(&vf_,\n                        device,\n                        VK_OBJECT_TYPE_COMMAND_POOL,\n                        (uint64_t)commandPool_,\n                        IGL_FORMAT(\"Command Pool: {}\", debugName).c_str());\n\n  buffers_.reserve(kMaxCommandBuffers);\n\n  for (uint32_t i = 0; i != kMaxCommandBuffers; i++) {\n    buffers_.emplace_back(\n        VulkanFence(vf_,\n                    device_,\n                    VkFenceCreateFlagBits{},\n                    exportableFences,\n                    IGL_FORMAT(\"Fence: commandBuffer #{}\", i).c_str()),\n        VulkanSemaphore(\n            vf_, device_, false, IGL_FORMAT(\"Semaphore: {} ({})\", debugName, i).c_str()));\n    VK_ASSERT(ivkAllocateCommandBuffer(&vf_, device_, commandPool_, &buffers_[i].cmdBufAllocated));\n    buffers_[i].handle.bufferIndex = i;\n  }\n}\n\nVulkanImmediateCommands::~VulkanImmediateCommands() {\n  waitAll();\n\n  vf_.vkDestroyCommandPool(device_, commandPool_, nullptr);\n}\n\nvoid VulkanImmediateCommands::purge() {\n  IGL_PROFILER_FUNCTION();\n\n  for (auto& buf : buffers_) {\n    if (buf.cmdBuf == VK_NULL_HANDLE || buf.isEncoding) {\n      continue;\n    }\n\n    const VkResult result = vf_.vkWaitForFences(device_, 1, &buf.fence.vkFence_, VK_TRUE, 0);\n\n    if (result == VK_SUCCESS) {\n      VK_ASSERT(vf_.vkResetCommandBuffer(buf.cmdBuf, VkCommandBufferResetFlags{0}));\n      VK_ASSERT(vf_.vkResetFences(device_, 1, &buf.fence.vkFence_));\n      buf.cmdBuf = VK_NULL_HANDLE;\n      numAvailableCommandBuffers_++;\n    } else {\n      if (result != VK_TIMEOUT) {\n        VK_ASSERT(result);\n      }\n    }\n  }\n}\n\nconst VulkanImmediateCommands::CommandBufferWrapper& VulkanImmediateCommands::acquire() {\n  IGL_PROFILER_FUNCTION();\n  if (!numAvailableCommandBuffers_) {\n    purge();\n  }\n\n  while (!numAvailableCommandBuffers_) {\n    IGL_LOG_INFO(\"Waiting for command buffers...\\n\");\n    IGL_PROFILER_ZONE(\"Waiting for command buffers...\", IGL_PROFILER_COLOR_WAIT);\n    purge();\n    IGL_PROFILER_ZONE_END();\n  }\n\n  VulkanImmediateCommands::CommandBufferWrapper* current = nullptr;\n\n  // we are ok with any available buffer\n  for (auto& buf : buffers_) {\n    if (buf.cmdBuf == VK_NULL_HANDLE) {\n      current = &buf;\n      break;\n    }\n  }\n\n  // make clang happy\n  assert(current);\n\n  IGL_DEBUG_ASSERT(numAvailableCommandBuffers_, \"No available command buffers\");\n  IGL_DEBUG_ASSERT(current, \"No available command buffers\");\n  IGL_DEBUG_ASSERT(current->cmdBufAllocated != VK_NULL_HANDLE);\n\n  current->handle.submitId = submitCounter_;\n  numAvailableCommandBuffers_--;\n\n  current->cmdBuf = current->cmdBufAllocated;\n  current->isEncoding = true;\n  current->fd = -1;\n\n  const VkCommandBufferBeginInfo bi = {\n      .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,\n      .flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,\n  };\n  VK_ASSERT(vf_.vkBeginCommandBuffer(current->cmdBuf, &bi));\n\n  nextSubmitHandle_ = current->handle;\n  return *current;\n}\n\nVkResult VulkanImmediateCommands::wait(const SubmitHandle handle, uint64_t timeoutNanoseconds) {\n  if (isReady(handle)) {\n    return VK_SUCCESS;\n  }\n\n  if (!IGL_DEBUG_VERIFY(!buffers_[handle.bufferIndex].isEncoding)) {\n    // we are waiting for a buffer which has not been submitted - this is probably a logic error\n    // somewhere in the calling code\n    return VK_ERROR_UNKNOWN;\n  }\n\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_WAIT);\n\n  const VkResult fenceResult = vf_.vkWaitForFences(\n      device_, 1, &buffers_[handle.bufferIndex].fence.vkFence_, VK_TRUE, timeoutNanoseconds);\n\n  if (fenceResult == VK_TIMEOUT) {\n    return VK_TIMEOUT;\n  }\n\n  if (fenceResult != VK_SUCCESS) {\n    IGL_LOG_ERROR_ONCE(\n        \"VulkanImmediateCommands::wait - Waiting for command buffer fence failed with error %i\",\n        int(fenceResult));\n    // Intentional fallthrough: we must purge so that we can release command buffers.\n  }\n\n  purge();\n\n  return fenceResult;\n}\n\nvoid VulkanImmediateCommands::waitAll() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_WAIT);\n\n  // @lint-ignore CLANGTIDY\n  VkFence fences[kMaxCommandBuffers];\n\n  uint32_t numFences = 0;\n\n  for (const auto& buf : buffers_) {\n    if (buf.cmdBuf != VK_NULL_HANDLE && !buf.isEncoding) {\n      fences[numFences++] = buf.fence.vkFence_;\n    }\n  }\n\n  if (numFences) {\n    VK_ASSERT(vf_.vkWaitForFences(device_, numFences, fences, VK_TRUE, UINT64_MAX));\n  }\n\n  purge();\n}\n\nbool VulkanImmediateCommands::isRecycled(SubmitHandle handle) const {\n  IGL_DEBUG_ASSERT(handle.bufferIndex < kMaxCommandBuffers);\n\n  if (handle.empty()) {\n    // a null handle\n    return true;\n  }\n\n  // already recycled and reused by another command buffer\n  return buffers_[handle.bufferIndex].handle.submitId != handle.submitId;\n}\n\nbool VulkanImmediateCommands::isReady(const SubmitHandle handle) const {\n  IGL_DEBUG_ASSERT(handle.bufferIndex < kMaxCommandBuffers);\n\n  if (handle.empty()) {\n    // a null handle\n    return true;\n  }\n\n  const CommandBufferWrapper& buf = buffers_[handle.bufferIndex];\n\n  if (buf.cmdBuf == VK_NULL_HANDLE) {\n    // already recycled and not yet reused\n    return true;\n  }\n\n  if (buf.handle.submitId != handle.submitId) {\n    // already recycled and reused by another command buffer\n    return true;\n  }\n\n  return vf_.vkWaitForFences(device_, 1, &buf.fence.vkFence_, VK_TRUE, 0) == VK_SUCCESS;\n}\n\nVulkanImmediateCommands::SubmitHandle VulkanImmediateCommands::submit(\n    const CommandBufferWrapper& wrapper) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_SUBMIT);\n\n  IGL_DEBUG_ASSERT(wrapper.isEncoding);\n  VK_ASSERT(vf_.vkEndCommandBuffer(wrapper.cmdBuf));\n\n  if (useTimelineSemaphoreAndSynchronization2_) {\n    // @lint-ignore CLANGTIDY\n    VkSemaphoreSubmitInfo waitSemaphores[] = {{}, {}};\n    uint32_t numWaitSemaphores = 0;\n    if (waitSemaphore_.semaphore) {\n      waitSemaphores[numWaitSemaphores++] = waitSemaphore_;\n    }\n    if (lastSubmitSemaphore_.semaphore) {\n      waitSemaphores[numWaitSemaphores++] = lastSubmitSemaphore_;\n    }\n    // @lint-ignore CLANGTIDY\n    const VkSemaphoreSubmitInfo signalSemaphores[] = {\n        VkSemaphoreSubmitInfo{\n            .sType = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO,\n            .semaphore = wrapper.semaphore.getVkSemaphore(),\n            .stageMask = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n        },\n        signalSemaphore_,\n    };\n\n    const VkCommandBufferSubmitInfo bufferSI = {\n        .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO,\n        .commandBuffer = wrapper.cmdBuf,\n    };\n    const VkSubmitInfo2 si = {\n        .sType = VK_STRUCTURE_TYPE_SUBMIT_INFO_2,\n        .waitSemaphoreInfoCount = numWaitSemaphores,\n        .pWaitSemaphoreInfos = waitSemaphores,\n        .commandBufferInfoCount = 1u,\n        .pCommandBufferInfos = &bufferSI,\n        .signalSemaphoreInfoCount = signalSemaphore_.semaphore ? 2u : 1u,\n        .pSignalSemaphoreInfos = signalSemaphores,\n    };\n\n    IGL_PROFILER_ZONE(\"vkQueueSubmit2KHR()\", IGL_PROFILER_COLOR_SUBMIT);\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkQueueSubmit2KHR()\\n\\n\", wrapper.cmdBuf);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    VK_ASSERT(vf_.vkQueueSubmit2KHR(queue_, 1u, &si, wrapper.fence.vkFence_));\n    IGL_PROFILER_ZONE_END();\n  } else {\n    // @lint-ignore CLANGTIDY\n    const VkPipelineStageFlags waitStageMasks[] = {VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,\n                                                   VK_PIPELINE_STAGE_ALL_COMMANDS_BIT};\n    // @lint-ignore CLANGTIDY\n    VkSemaphore waitSemaphores[] = {VK_NULL_HANDLE, VK_NULL_HANDLE};\n    uint32_t numWaitSemaphores = 0;\n    if (waitSemaphore_.semaphore) {\n      waitSemaphores[numWaitSemaphores++] = waitSemaphore_.semaphore;\n    }\n    if (lastSubmitSemaphore_.semaphore) {\n      waitSemaphores[numWaitSemaphores++] = lastSubmitSemaphore_.semaphore;\n    }\n\n    const VkSubmitInfo si = ivkGetSubmitInfo(&wrapper.cmdBuf,\n                                             numWaitSemaphores,\n                                             waitSemaphores,\n                                             waitStageMasks,\n                                             &wrapper.semaphore.vkSemaphore_);\n    // @lint-ignore CLANGTIDY\n    const VkFence vkFence = wrapper.fence.vkFence_;\n    IGL_PROFILER_ZONE(\"vkQueueSubmit()\", IGL_PROFILER_COLOR_SUBMIT);\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkQueueSubmit()\\n\\n\", wrapper.cmdBuf);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    VK_ASSERT(vf_.vkQueueSubmit(queue_, 1u, &si, vkFence));\n    IGL_PROFILER_ZONE_END();\n  }\n\n  lastSubmitSemaphore_.semaphore = wrapper.semaphore.vkSemaphore_;\n  lastSubmitHandle_ = wrapper.handle;\n  waitSemaphore_.semaphore = VK_NULL_HANDLE;\n  signalSemaphore_.semaphore = VK_NULL_HANDLE;\n\n  // reset\n  const_cast<CommandBufferWrapper&>(wrapper).isEncoding = false;\n  submitCounter_++;\n\n  if (!submitCounter_) {\n    // skip the 0 value - when uint32_t wraps around (null SubmitHandle)\n    submitCounter_++;\n  }\n\n  nextSubmitHandle_ = {};\n\n  return lastSubmitHandle_;\n}\n\nvoid VulkanImmediateCommands::waitSemaphore(VkSemaphore semaphore) {\n  IGL_DEBUG_ASSERT(waitSemaphore_.semaphore == VK_NULL_HANDLE);\n\n  waitSemaphore_.semaphore = semaphore;\n}\n\nvoid VulkanImmediateCommands::signalSemaphore(VkSemaphore semaphore, uint64_t signalValue) {\n  IGL_DEBUG_ASSERT(signalSemaphore_.semaphore == VK_NULL_HANDLE);\n  signalSemaphore_.semaphore = semaphore;\n  signalSemaphore_.value = signalValue;\n}\n\nVkSemaphore VulkanImmediateCommands::acquireLastSubmitSemaphore() {\n  return std::exchange(lastSubmitSemaphore_.semaphore, VK_NULL_HANDLE);\n}\n\nVulkanImmediateCommands::SubmitHandle VulkanImmediateCommands::getLastSubmitHandle() const {\n  return lastSubmitHandle_;\n}\n\nVulkanImmediateCommands::SubmitHandle VulkanImmediateCommands::getNextSubmitHandle() const {\n  return nextSubmitHandle_.empty() ? lastSubmitHandle_ : nextSubmitHandle_;\n}\n\nVkFence VulkanImmediateCommands::getVkFenceFromSubmitHandle(SubmitHandle handle) {\n  IGL_DEBUG_ASSERT(handle.bufferIndex < buffers_.size());\n\n  if (isRecycled(handle)) {\n    return VK_NULL_HANDLE;\n  }\n\n  return buffers_[handle.bufferIndex].fence.vkFence_;\n}\n\nvoid VulkanImmediateCommands::storeFDInSubmitHandle(SubmitHandle handle, int fd) noexcept {\n  IGL_DEBUG_ASSERT(handle.bufferIndex < buffers_.size());\n  buffers_[handle.bufferIndex].fd = fd;\n}\n\nint VulkanImmediateCommands::cachedFDFromSubmitHandle(SubmitHandle handle) const noexcept {\n  IGL_DEBUG_ASSERT(handle.bufferIndex < buffers_.size());\n  return buffers_[handle.bufferIndex].fd;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanImmediateCommands.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanFence.h>\n#include <igl/vulkan/VulkanHelpers.h>\n#include <igl/vulkan/VulkanSemaphore.h>\n\nnamespace igl::vulkan {\n\n/// @brief This class provides a simplified interface for obtaining and submitting Command Buffers,\n/// while providing features to help manage their synchronization.\nclass VulkanImmediateCommands final {\n public:\n  // The maximum number of command buffers which can simultaneously exist in the system; when we run\n  // out of buffers, we stall and wait until an existing buffer becomes available\n  static constexpr uint32_t kMaxCommandBuffers = 32;\n\n  /** @brief Creates an instance of the class for a specific queue family and whether the fences\n   * created for each command buffer are exportable (see VulkanFence for more details about the\n   * exportable flag). The optional `debugName` parameter can be used to name the resource to make\n   * it easier for debugging\n   * The constructor initializes the vector of `CommandBufferWrapper` structures with\n   * a total of `kMaxCommandBuffers`\n   */\n  VulkanImmediateCommands(const VulkanFunctionTable& vf,\n                          VkDevice device,\n                          uint32_t queueFamilyIndex,\n                          bool exportableFences,\n                          bool useTimelineSemaphoreAndSynchronization2,\n                          const char* debugName);\n  ~VulkanImmediateCommands();\n  VulkanImmediateCommands(const VulkanImmediateCommands&) = delete;\n  VulkanImmediateCommands& operator=(const VulkanImmediateCommands&) = delete;\n\n  /** @brief A structure that encapsulates synchronization information about command buffers and\n   * that is used by the `VulkanImmediateCommands` class to manage command buffer acquisition and\n   * reuse.\n   * A `SubmitHandle` is composed of two 32-bit integers, a buffer index (`bufferIndex_`) and a\n   * submit id (`submitId_`). The buffer index is associated with the location of the command buffer\n   * in the vector in which they are stored in `VulkanImmediateCommands` class. The submit id is a\n   * monotonically increasing index that is incremented every time we `submit()` a command buffer\n   * for execution (any command buffer). A handle is a combination of those two values into a 64-bit\n   * integer: the submit id is shifted and occupies the 32 most significant bits of the handle,\n   * while the buffer index occupies the least significant 32 bits\n   */\n  struct SubmitHandle {\n    uint32_t bufferIndex = 0;\n    uint32_t submitId = 0;\n    SubmitHandle() = default;\n\n    /// @brief Creates a SubmitHandle object from an existing handle\n    explicit SubmitHandle(uint64_t handle) :\n      bufferIndex(uint32_t(handle & 0xffffffff)), submitId(uint32_t(handle >> 32)) {\n      IGL_DEBUG_ASSERT(submitId);\n    }\n\n    /// @brief Checks whether the structure is empty and has not been associates with a command\n    /// buffer submission yet\n    [[nodiscard]] bool empty() const {\n      return submitId == 0;\n    }\n\n    /// @brief Returns a unique identifiable handle, which is made of the `submitId_` and the\n    /// `bufferIndex_` member variables\n    [[nodiscard]] uint64_t handle() const {\n      return (uint64_t(submitId) << 32) + bufferIndex;\n    }\n\n    [[nodiscard]] bool operator==(const SubmitHandle& rhs) const {\n      return bufferIndex == rhs.bufferIndex && submitId == rhs.submitId;\n    }\n    [[nodiscard]] bool operator!=(const SubmitHandle& rhs) const {\n      return !(*this == rhs);\n    }\n  };\n\n  /// Ensures that the `SubmitHandle` structure size is not larger than a `uint64_t`\n  static_assert(sizeof(SubmitHandle) == sizeof(uint64_t));\n\n  /// @brief The CommandBufferWrapper structure encapsulates all the information needed to manage\n  /// the synchronization of a command buffer along with a command buffer\n  struct CommandBufferWrapper {\n    CommandBufferWrapper(VulkanFence&& fence, VulkanSemaphore&& semaphore) :\n      fence(std::move(fence)), semaphore(std::move(semaphore)) {}\n\n    /// @brief The command buffer handle. It is initialied to VK_NULL_HANDLE. The command buffer\n    /// handle stored in `cmdBufAllocated_` is copied into `cmdBuf_` when the command buffer is\n    /// acquired for recording\n    VkCommandBuffer cmdBuf = VK_NULL_HANDLE;\n    /// @brief Stores the command buffer handle allocated during initialization\n    VkCommandBuffer cmdBufAllocated = VK_NULL_HANDLE;\n    /// @brief the SubmitHandle object used to synchronize this command buffer\n    SubmitHandle handle = {};\n    /// @brief A VulkanFence object that is associated with the submission of the command buffer. It\n    /// is used to check whether a command buffer is still executing or for waiting the command\n    /// buffer to finish execution by the GPU\n    VulkanFence fence;\n    /// @brief A VulkanSemaphore object associated with the submission of the command buffer for\n    /// execution.\n    VulkanSemaphore semaphore;\n    bool isEncoding = false;\n    /// @brief The file descriptor for the underlying VkFence. It's only populated if an FD is set\n    /// explicitly using VulkanImmediateCommands::storeFDInSubmitHandle(). It's reset in `acquire()`\n    int fd = -1;\n  };\n\n  /// @brief Returns a `CommandBufferWrapper` object with the current command buffer (creates one if\n  /// it does not exist) and its associated synchronization objects\n  const CommandBufferWrapper& acquire();\n\n  /** @brief Submits a command buffer (stored in a `CommandBufferWrapper` object) for submission and\n   * returns the `SubmitHandle` associated with the command buffer. Caches the semaphore associated\n   * with the command buffer bineg submitted as the last submitted semaphore\n   * (`lastSubmitSemaphore_`). Caches the SubmitHandle associated with the command buffer being\n   * submitted for execution in `lastSubmitHandle_`. Resets the current wait semaphore member\n   * variable (`waitSemaphore_`).\n   *  Submitting a command buffer also marks the `CommandBufferWrapper::encoding_` variable to\n   * `false`\n   */\n  SubmitHandle submit(const CommandBufferWrapper& wrapper);\n\n  /// @brief Stores the semaphore as the current wait semaphore (`waitSemaphore_`)\n  void waitSemaphore(VkSemaphore semaphore);\n  /// @brief Inject one timeline semaphore to be signalled (`signalSemaphore_`)\n  void signalSemaphore(VkSemaphore semaphore, uint64_t signalValue);\n\n  /// @brief Returns the last semaphore (`lastSubmitSemaphore_`) and reset the member variable to\n  /// `VK_NULL_HANDLE`\n  VkSemaphore acquireLastSubmitSemaphore();\n\n  /// @brief Returns the last SubmitHandle, which was submitted when `submit()` was last called\n  [[nodiscard]] SubmitHandle getLastSubmitHandle() const;\n  [[nodiscard]] SubmitHandle getNextSubmitHandle() const;\n\n  /** @brief Checks whether a SubmitHandle is ready. A SubmitHandle is ready if it is recycled or\n   * empty. If it has not been recycled and is not empty, a SubmitHandle is ready if the fence\n   * associated with the command buffer referred by the SubmitHandle structure has been signaled.\n   *  Note that this function does not wait for a fence to be signaled if it has not been signaled.\n   * It merely checks the fence status\n   */\n  [[nodiscard]] bool isReady(SubmitHandle handle) const;\n\n  /// @brief If the SubmitHandle is not ready, this function waits for the fence associated with the\n  /// command buffer referred by the handle to become signaled. The default wait time is\n  /// `UINT64_MAX` nanoseconds. Returns a result code if the wait was successful or not.\n  VkResult wait(SubmitHandle handle, uint64_t timeoutNanoseconds = UINT64_MAX);\n\n  /// @brief Wait for _all_ fences for all command buffers stored in `VulkanImmediateCommands` to\n  /// become signaled. The maximum wait time is `UINT64_MAX` nanoseconds\n  void waitAll();\n\n  /// @brief Returns the fence associated with the handle if the handle has not been recycled.\n  /// Returns `VK_NULL_HANDLE` otherwise.\n  VkFence getVkFenceFromSubmitHandle(SubmitHandle handle);\n\n  /// @brief Stores the file descriptor in the `CommandBufferWrapper` object associated with the\n  /// handle. Chceks for bounds, but does not check for validity.\n  void storeFDInSubmitHandle(SubmitHandle handle, int fd) noexcept;\n\n  /// @brief Returns the file descriptor associated with the handle and its underlying VkFence. If\n  /// the FD has not been explicitly set with `storeFDInSubmitHandle()`, it returns -1. This\n  /// function DOES NOT retrieve the FD from the Vulkan implementation\n  [[nodiscard]] int cachedFDFromSubmitHandle(SubmitHandle handle) const noexcept;\n\n private:\n  /// @brief Resets all commands buffers and their associated fences that are valid, are not being\n  /// encoded, and have completed execution by the GPU (their fences have been signaled). Resets the\n  /// number of available command buffers.\n  void purge();\n  /// @brief Checks whether the SubmitHandle is recycled. A recycled SubmitHandle is a handle that\n  /// has a submit id greater than the submit id associated with the same command buffer stored\n  /// internally in `VulkanImmediateCommands`. A SubmitHandle handle is also recycled if it's empty\n  [[nodiscard]] bool isRecycled(SubmitHandle handle) const;\n\n private:\n  const VulkanFunctionTable& vf_;\n  VkDevice device_ = VK_NULL_HANDLE;\n  VkQueue queue_ = VK_NULL_HANDLE;\n  VkCommandPool commandPool_ = VK_NULL_HANDLE;\n  std::string debugName_;\n  std::vector<CommandBufferWrapper> buffers_;\n\n  /// @brief The last submitted handle. Updated on `submit()`\n  SubmitHandle lastSubmitHandle_ = SubmitHandle();\n  SubmitHandle nextSubmitHandle_ = SubmitHandle();\n\n  /// @brief The semaphore submitted with the last command buffer. Updated on `submit()`\n  VkSemaphoreSubmitInfo lastSubmitSemaphore_{};\n  /// @brief A semaphore to be associated with the next command buffer to be submitted. Can be used\n  /// with command buffers that present swapchain images.\n  VkSemaphoreSubmitInfo waitSemaphore_{};\n  // an extra \"signal\" timeline semaphore\n  VkSemaphoreSubmitInfo signalSemaphore_{};\n\n  uint32_t numAvailableCommandBuffers_ = kMaxCommandBuffers;\n\n  // @brief The submission counter. Incremented on `submit()`\n  uint32_t submitCounter_ = 1;\n\n  bool useTimelineSemaphoreAndSynchronization2_ = false;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanPipelineBuilder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanPipelineBuilder.h\"\n\nnamespace igl::vulkan {\n\nuint32_t VulkanPipelineBuilder::numPipelinesCreated = 0;\nuint32_t VulkanComputePipelineBuilder::numPipelinesCreated = 0;\n\nVulkanPipelineBuilder::VulkanPipelineBuilder() :\n  vertexInputState_({.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO}),\n  inputAssembly_({\n      .sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO,\n      .topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,\n      .primitiveRestartEnable = VK_FALSE,\n  }),\n  rasterizationState_({\n      .sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO,\n      .polygonMode = VK_POLYGON_MODE_FILL,\n      .cullMode = VK_CULL_MODE_NONE,\n      .frontFace = VK_FRONT_FACE_COUNTER_CLOCKWISE,\n      .lineWidth = 1.0f,\n  }),\n  multisampleState_({\n      .sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO,\n      .rasterizationSamples = VK_SAMPLE_COUNT_1_BIT,\n      .minSampleShading = 1.0f,\n  }),\n  depthStencilState_({\n      .sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO,\n      .depthCompareOp = VK_COMPARE_OP_LESS,\n      .front =\n          {\n              .failOp = VK_STENCIL_OP_KEEP,\n              .passOp = VK_STENCIL_OP_KEEP,\n              .depthFailOp = VK_STENCIL_OP_KEEP,\n              .compareOp = VK_COMPARE_OP_NEVER,\n          },\n      .back =\n          {\n              .failOp = VK_STENCIL_OP_KEEP,\n              .passOp = VK_STENCIL_OP_KEEP,\n              .depthFailOp = VK_STENCIL_OP_KEEP,\n              .compareOp = VK_COMPARE_OP_NEVER,\n          },\n      .maxDepthBounds = 1.0f,\n  }) {}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::depthBiasEnable(bool enable) {\n  rasterizationState_.depthBiasEnable = enable ? VK_TRUE : VK_FALSE;\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::depthWriteEnable(bool enable) {\n  depthStencilState_.depthWriteEnable = enable ? VK_TRUE : VK_FALSE;\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::depthCompareOp(VkCompareOp compareOp,\n                                                             bool writeDepthEnable) {\n  depthStencilState_.depthTestEnable =\n      static_cast<VkBool32>(compareOp != VK_COMPARE_OP_ALWAYS || writeDepthEnable);\n  depthStencilState_.depthCompareOp = compareOp;\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::dynamicState(VkDynamicState state) {\n  dynamicStates_.push_back(state);\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::dynamicStates(\n    const std::vector<VkDynamicState>& states) {\n  dynamicStates_.insert(std::end(dynamicStates_), std::begin(states), std::end(states));\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::primitiveTopology(VkPrimitiveTopology topology) {\n  inputAssembly_.topology = topology;\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::rasterizationSamples(VkSampleCountFlagBits samples) {\n  multisampleState_.rasterizationSamples = samples;\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::cullMode(VkCullModeFlags mode) {\n  rasterizationState_.cullMode = mode;\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::frontFace(VkFrontFace mode) {\n  rasterizationState_.frontFace = mode;\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::polygonMode(VkPolygonMode mode) {\n  rasterizationState_.polygonMode = mode;\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::vertexInputState(\n    const VkPipelineVertexInputStateCreateInfo& state) {\n  vertexInputState_ = state;\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::colorBlendAttachmentStates(\n    std::vector<VkPipelineColorBlendAttachmentState>& states) {\n  colorBlendAttachmentStates_ = std::move(states);\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::shaderStage(VkPipelineShaderStageCreateInfo stage) {\n  shaderStages_.push_back(stage);\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::shaderStages(\n    const std::vector<VkPipelineShaderStageCreateInfo>& stages) {\n  shaderStages_.insert(std::end(shaderStages_), std::begin(stages), std::end(stages));\n  return *this;\n}\n\nVulkanPipelineBuilder& VulkanPipelineBuilder::stencilStateOps(VkStencilFaceFlags faceMask,\n                                                              VkStencilOp failOp,\n                                                              VkStencilOp passOp,\n                                                              VkStencilOp depthFailOp,\n                                                              VkCompareOp compareOp) {\n  depthStencilState_.stencilTestEnable =\n      static_cast<VkBool32>(static_cast<bool>(depthStencilState_.stencilTestEnable) ||\n                            failOp != VK_STENCIL_OP_KEEP || passOp != VK_STENCIL_OP_KEEP ||\n                            depthFailOp != VK_STENCIL_OP_KEEP || compareOp != VK_COMPARE_OP_ALWAYS);\n\n  if (faceMask & VK_STENCIL_FACE_FRONT_BIT) {\n    VkStencilOpState& front = depthStencilState_.front;\n    front.failOp = failOp;\n    front.passOp = passOp;\n    front.depthFailOp = depthFailOp;\n    front.compareOp = compareOp;\n  }\n  if (faceMask & VK_STENCIL_FACE_BACK_BIT) {\n    VkStencilOpState& back = depthStencilState_.back;\n    back.failOp = failOp;\n    back.passOp = passOp;\n    back.depthFailOp = depthFailOp;\n    back.compareOp = compareOp;\n  }\n  return *this;\n}\n\nVkResult VulkanPipelineBuilder::build(const VulkanFunctionTable& vf,\n                                      VkDevice device,\n                                      VkPipelineCache pipelineCache,\n                                      VkPipelineLayout pipelineLayout,\n                                      VkRenderPass renderPass,\n                                      VkPipeline* outPipeline,\n                                      const char* debugName) noexcept {\n  const VkPipelineDynamicStateCreateInfo dynamicState = {\n      .sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO,\n      .dynamicStateCount = (uint32_t)dynamicStates_.size(),\n      .pDynamicStates = dynamicStates_.data(),\n  };\n  // viewport and scissor are always dynamic\n  const VkPipelineViewportStateCreateInfo viewportState = {\n      .sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO,\n      .viewportCount = 1,\n      .scissorCount = 1,\n  };\n  const VkPipelineColorBlendStateCreateInfo colorBlendState = {\n      .sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO,\n      .attachmentCount = uint32_t(colorBlendAttachmentStates_.size()),\n      .pAttachments = colorBlendAttachmentStates_.data(),\n  };\n\n  const auto result = ivkCreateGraphicsPipeline(&vf,\n                                                device,\n                                                pipelineCache,\n                                                (uint32_t)shaderStages_.size(),\n                                                shaderStages_.data(),\n                                                &vertexInputState_,\n                                                &inputAssembly_,\n                                                nullptr,\n                                                &viewportState,\n                                                &rasterizationState_,\n                                                &multisampleState_,\n                                                &depthStencilState_,\n                                                &colorBlendState,\n                                                &dynamicState,\n                                                pipelineLayout,\n                                                renderPass,\n                                                outPipeline);\n\n  if (!IGL_DEBUG_VERIFY(result == VK_SUCCESS)) {\n    return result;\n  }\n\n  numPipelinesCreated++;\n\n  // set debug name\n  return ivkSetDebugObjectName(\n      &vf, device, VK_OBJECT_TYPE_PIPELINE, (uint64_t)*outPipeline, debugName);\n}\n\nVulkanComputePipelineBuilder& VulkanComputePipelineBuilder::shaderStage(\n    VkPipelineShaderStageCreateInfo stage) {\n  shaderStage_ = stage;\n  return *this;\n}\n\nVkResult VulkanComputePipelineBuilder::build(const VulkanFunctionTable& vf,\n                                             VkDevice device,\n                                             VkPipelineCache pipelineCache,\n                                             VkPipelineLayout pipelineLayout,\n                                             VkPipeline* outPipeline,\n                                             const char* debugName) noexcept {\n  const VkResult result = ivkCreateComputePipeline(\n      &vf, device, pipelineCache, &shaderStage_, pipelineLayout, outPipeline);\n\n  if (!IGL_DEBUG_VERIFY(result == VK_SUCCESS)) {\n    return result;\n  }\n\n  numPipelinesCreated++;\n\n  // set debug name\n  return ivkSetDebugObjectName(\n      &vf, device, VK_OBJECT_TYPE_PIPELINE, (uint64_t)*outPipeline, debugName);\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanPipelineBuilder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanHelpers.h>\n\nnamespace igl::vulkan {\n\nclass VulkanPipelineBuilder final {\n public:\n  VulkanPipelineBuilder();\n  ~VulkanPipelineBuilder() = default;\n\n  VulkanPipelineBuilder& depthBiasEnable(bool enable);\n  VulkanPipelineBuilder& depthWriteEnable(bool enable);\n  VulkanPipelineBuilder& depthCompareOp(VkCompareOp compareOp, bool writeDepthEnable);\n  VulkanPipelineBuilder& dynamicState(VkDynamicState state);\n  VulkanPipelineBuilder& dynamicStates(const std::vector<VkDynamicState>& states);\n  VulkanPipelineBuilder& primitiveTopology(VkPrimitiveTopology topology);\n  VulkanPipelineBuilder& rasterizationSamples(VkSampleCountFlagBits samples);\n  VulkanPipelineBuilder& shaderStage(VkPipelineShaderStageCreateInfo stage);\n  VulkanPipelineBuilder& shaderStages(const std::vector<VkPipelineShaderStageCreateInfo>& stages);\n  VulkanPipelineBuilder& stencilStateOps(VkStencilFaceFlags faceMask,\n                                         VkStencilOp failOp,\n                                         VkStencilOp passOp,\n                                         VkStencilOp depthFailOp,\n                                         VkCompareOp compareOp);\n  VulkanPipelineBuilder& cullMode(VkCullModeFlags mode);\n  VulkanPipelineBuilder& frontFace(VkFrontFace mode);\n  VulkanPipelineBuilder& polygonMode(VkPolygonMode mode);\n  VulkanPipelineBuilder& vertexInputState(const VkPipelineVertexInputStateCreateInfo& state);\n  VulkanPipelineBuilder& colorBlendAttachmentStates(\n      std::vector<VkPipelineColorBlendAttachmentState>& states);\n\n  [[nodiscard]] VkResult build(const VulkanFunctionTable& vf,\n                               VkDevice device,\n                               VkPipelineCache pipelineCache,\n                               VkPipelineLayout pipelineLayout,\n                               VkRenderPass renderPass,\n                               VkPipeline* outPipeline,\n                               const char* debugName = nullptr) noexcept;\n\n  static uint32_t getNumPipelinesCreated() {\n    return numPipelinesCreated;\n  }\n\n private:\n  std::vector<VkDynamicState> dynamicStates_;\n  std::vector<VkPipelineShaderStageCreateInfo> shaderStages_;\n  VkPipelineVertexInputStateCreateInfo vertexInputState_;\n  VkPipelineInputAssemblyStateCreateInfo inputAssembly_;\n  VkPipelineRasterizationStateCreateInfo rasterizationState_;\n  VkPipelineMultisampleStateCreateInfo multisampleState_;\n  VkPipelineDepthStencilStateCreateInfo depthStencilState_;\n  std::vector<VkPipelineColorBlendAttachmentState> colorBlendAttachmentStates_;\n  static uint32_t numPipelinesCreated;\n};\n\nclass VulkanComputePipelineBuilder final {\n public:\n  VulkanComputePipelineBuilder() = default;\n  ~VulkanComputePipelineBuilder() = default;\n\n  VulkanComputePipelineBuilder& shaderStage(VkPipelineShaderStageCreateInfo stage);\n\n  VkResult build(const VulkanFunctionTable& vf,\n                 VkDevice device,\n                 VkPipelineCache pipelineCache,\n                 VkPipelineLayout pipelineLayout,\n                 VkPipeline* outPipeline,\n                 const char* debugName = nullptr) noexcept;\n\n  static uint32_t getNumPipelinesCreated() {\n    return numPipelinesCreated;\n  }\n\n private:\n  VkPipelineShaderStageCreateInfo shaderStage_;\n  static uint32_t numPipelinesCreated;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanQueuePool.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanQueuePool.h\"\n\n#include <map>\n\nnamespace igl::vulkan {\nnamespace {\n\nstd::set<VulkanQueueDescriptor> enumerateQueues(const VulkanFunctionTable& vf,\n                                                VkPhysicalDevice physicalDevice) {\n  uint32_t queueFamilyCount = 0;\n  vf.vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyCount, nullptr);\n  std::vector<VkQueueFamilyProperties> properties(queueFamilyCount);\n  vf.vkGetPhysicalDeviceQueueFamilyProperties(physicalDevice, &queueFamilyCount, properties.data());\n\n  std::set<VulkanQueueDescriptor> descriptors;\n  for (uint32_t i = 0; i != properties.size(); i++) {\n    for (uint32_t j = 0; j != properties[i].queueCount; j++) {\n      const VulkanQueueDescriptor descriptor = {\n          .queueFlags = properties[i].queueFlags,\n          .queueIndex = j,\n          .familyIndex = i,\n      };\n      descriptors.insert(descriptor);\n    }\n  }\n  return descriptors;\n}\n\n} // namespace\n\nVulkanQueuePool::VulkanQueuePool(const VulkanFunctionTable& vf, VkPhysicalDevice physicalDevice) :\n  VulkanQueuePool(enumerateQueues(vf, physicalDevice)) {}\n\nVulkanQueuePool::VulkanQueuePool(std::set<VulkanQueueDescriptor> availableDescriptors) :\n  availableDescriptors_(std::move(availableDescriptors)) {}\n\nVulkanQueueDescriptor VulkanQueuePool::findQueueDescriptor(VkQueueFlags flags) const {\n  auto findDedicatedQueue = [&](VkQueueFlags required,\n                                VkQueueFlags avoid) -> VulkanQueueDescriptor {\n    if (flags & required) {\n      for (const auto& queueDescriptor : availableDescriptors_) {\n        const bool isSuitable = (queueDescriptor.queueFlags & flags) != 0;\n        const bool isDedicated = (queueDescriptor.queueFlags & avoid) == 0;\n        if (isSuitable && isDedicated) {\n          return queueDescriptor;\n        }\n      }\n    }\n    return {};\n  };\n\n  VulkanQueueDescriptor queueDescriptor;\n\n  // try to find a dedicated queue for compute\n  queueDescriptor = findDedicatedQueue(VK_QUEUE_COMPUTE_BIT, VK_QUEUE_GRAPHICS_BIT);\n  if (queueDescriptor.isValid()) {\n    return queueDescriptor;\n  }\n  // try to find a dedicated queue for transfer operations\n  queueDescriptor = findDedicatedQueue(VK_QUEUE_TRANSFER_BIT, VK_QUEUE_GRAPHICS_BIT);\n  if (queueDescriptor.isValid()) {\n    return queueDescriptor;\n  }\n  // any suitable queue\n  queueDescriptor = findDedicatedQueue(flags, 0);\n  if (queueDescriptor.isValid()) {\n    return queueDescriptor;\n  }\n\n  // Compute and graphics queues support transfer operations, and it is optional to report\n  // VK_QUEUE_TRANSFER_BIT on those. So let's check them if no result is found\n  if (flags & VK_QUEUE_TRANSFER_BIT) {\n    const VkQueueFlags clearFlags = flags & ~VK_QUEUE_TRANSFER_BIT;\n    queueDescriptor = findDedicatedQueue(clearFlags | VK_QUEUE_COMPUTE_BIT, 0);\n    if (queueDescriptor.isValid()) {\n      return queueDescriptor;\n    }\n\n    queueDescriptor = findDedicatedQueue(clearFlags | VK_QUEUE_GRAPHICS_BIT, 0);\n    if (queueDescriptor.isValid()) {\n      return queueDescriptor;\n    }\n  }\n\n  IGL_LOG_ERROR(\"No suitable queue found\");\n\n  return {};\n}\n\nvoid VulkanQueuePool::reserveQueue(const VulkanQueueDescriptor& queueDescriptor) {\n  if (availableDescriptors_.erase(queueDescriptor) != 0) {\n    reservedDescriptors_.insert(queueDescriptor);\n  }\n}\n\nstd::vector<VkDeviceQueueCreateInfo> VulkanQueuePool::getQueueCreationInfos() const {\n  std::map<uint32_t, std::vector<VulkanQueueDescriptor>> queues;\n  for (const auto& queue : reservedDescriptors_) {\n    queues[queue.familyIndex].push_back(queue);\n  }\n\n  static constexpr float kQueuePriority = 1.0f;\n  std::vector<VkDeviceQueueCreateInfo> qcis;\n  qcis.reserve(queues.size());\n  for (const auto& [family, descriptors] : queues) {\n    qcis.emplace_back(VkDeviceQueueCreateInfo{\n        .sType = VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,\n        .queueFamilyIndex = family,\n        .queueCount = static_cast<uint32_t>(descriptors.size()),\n        .pQueuePriorities = &kQueuePriority,\n    });\n  }\n  return qcis;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanQueuePool.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <set>\n#include <vector>\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nstruct VulkanQueueDescriptor {\n  constexpr static uint32_t kInvalid = 0xFFFFFFFF;\n\n  VkQueueFlags queueFlags = 0;\n  uint32_t queueIndex = kInvalid;\n  uint32_t familyIndex = kInvalid;\n\n  [[nodiscard]] bool isValid() const {\n    return queueIndex != kInvalid && familyIndex != kInvalid;\n  }\n\n  /* familyIndex and queueIndex are sufficient to uniquely identify a VulkanQueueDescriptor. */\n  bool operator==(const VulkanQueueDescriptor& other) const {\n    return (familyIndex == other.familyIndex && queueIndex == other.queueIndex);\n  }\n\n  bool operator<(const VulkanQueueDescriptor& other) const {\n    if (familyIndex == other.familyIndex) {\n      return queueIndex < other.queueIndex;\n    }\n    return familyIndex < other.familyIndex;\n  }\n};\n\nclass VulkanQueuePool final {\n public:\n  VulkanQueuePool(const VulkanFunctionTable& vf, VkPhysicalDevice physicalDevice);\n  explicit VulkanQueuePool(std::set<VulkanQueueDescriptor> availableDescriptors);\n\n  /* Find a queue descriptor that conforms to give queue flags. */\n  [[nodiscard]] VulkanQueueDescriptor findQueueDescriptor(VkQueueFlags flags) const;\n\n  /* Reserve the given queue. Reserved queues will not be visible in future\n   * find requests and they will participate in resulting queue creation infos.\n   */\n  void reserveQueue(const VulkanQueueDescriptor& queueDescriptor);\n\n  /* Create the queue creation infos for reserved queues. */\n  [[nodiscard]] std::vector<VkDeviceQueueCreateInfo> getQueueCreationInfos() const;\n\n private:\n  std::set<VulkanQueueDescriptor> availableDescriptors_;\n  std::set<VulkanQueueDescriptor> reservedDescriptors_;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanRenderPassBuilder.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanRenderPassBuilder.h\"\n\n// this cannot be put into namespace\n#define CMP(field) (a.field == b.field)\nbool operator==(const VkAttachmentDescription2& a, const VkAttachmentDescription2& b) {\n  return CMP(sType) && CMP(pNext) && CMP(flags) && CMP(format) && CMP(samples) && CMP(loadOp) &&\n         CMP(storeOp) && CMP(stencilLoadOp) && CMP(stencilStoreOp) && CMP(initialLayout) &&\n         CMP(finalLayout);\n}\n\nbool operator==(const VkAttachmentReference2& a, const VkAttachmentReference2& b) {\n  return CMP(sType) && CMP(pNext) && CMP(attachment) && CMP(layout) && CMP(aspectMask);\n}\n#undef CMP\n\nnamespace igl::vulkan {\n\nVkResult VulkanRenderPassBuilder::build(const VulkanFunctionTable& vf,\n                                        VkDevice device,\n                                        VkRenderPass* outRenderPass,\n                                        const char* debugName) const noexcept {\n  IGL_DEBUG_ASSERT(\n      refsColorResolve2_.empty() || (refsColorResolve2_.size() == refsColor2_.size()),\n      \"If resolve attachments are used, there should be one color resolve attachment for each \"\n      \"color attachment\");\n\n  const bool hasDepthStencilAttachment = refDepth2_.layout != VK_IMAGE_LAYOUT_UNDEFINED;\n\n#if IGL_VULKAN_HAS_LEGACY_RENDERPASS\n  const VkSubpassDescription subpass = {\n      .flags = 0,\n      .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,\n      .colorAttachmentCount = (uint32_t)refsColor_.size(),\n      .pColorAttachments = refsColor_.data(),\n      .pResolveAttachments = refsColorResolve_.data(),\n      .pDepthStencilAttachment = hasDepthStencilAttachment ? &refDepth_ : nullptr,\n  };\n\n  const VkSubpassDependency dep = {\n      .srcSubpass = 0,\n      .dstSubpass = VK_SUBPASS_EXTERNAL,\n      .srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,\n      .dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,\n      .srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,\n      .dstAccessMask = VK_ACCESS_SHADER_READ_BIT,\n  };\n\n  const VkRenderPassMultiviewCreateInfo renderPassMultiview = {\n      .sType = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,\n      .subpassCount = 1,\n      .pViewMasks = &viewMask_,\n      .correlationMaskCount = 1,\n      .pCorrelationMasks = &correlationMask_,\n  };\n\n  const VkRenderPassCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO,\n      .pNext = viewMask_ ? &renderPassMultiview : nullptr,\n      .attachmentCount = (uint32_t)attachments_.size(),\n      .pAttachments = attachments_.data(),\n      .subpassCount = 1,\n      .pSubpasses = &subpass,\n      .dependencyCount = 1,\n      .pDependencies = &dep,\n  };\n#endif // IGL_VULKAN_HAS_LEGACY_RENDERPASS\n\n  const bool hasDepthStencilResolve = refDepthResolve2_.layout != VK_IMAGE_LAYOUT_UNDEFINED;\n\n  const VkSubpassDescriptionDepthStencilResolve depthStencilResolve = {\n      .sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE,\n      .pNext = nullptr,\n      .depthResolveMode = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,\n      .stencilResolveMode = VK_RESOLVE_MODE_SAMPLE_ZERO_BIT,\n      .pDepthStencilResolveAttachment = hasDepthStencilResolve ? &refDepthResolve2_ : nullptr,\n  };\n\n  const VkSubpassDescription2 subpass2 = {\n      .sType = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2,\n      .pNext = hasDepthStencilResolve ? &depthStencilResolve : nullptr,\n      .flags = 0,\n      .pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS,\n      .viewMask = viewMask_,\n      .colorAttachmentCount = (uint32_t)refsColor2_.size(),\n      .pColorAttachments = refsColor2_.data(),\n      .pResolveAttachments = refsColorResolve2_.data(),\n      .pDepthStencilAttachment = hasDepthStencilAttachment ? &refDepth2_ : nullptr,\n  };\n\n  const VkSubpassDependency2 dep2 = {\n      .sType = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2,\n      .srcSubpass = 0,\n      .dstSubpass = VK_SUBPASS_EXTERNAL,\n      .srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,\n      .dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,\n      .srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,\n      .dstAccessMask = VK_ACCESS_SHADER_READ_BIT,\n      .dependencyFlags = 0,\n      .viewOffset = 0,\n  };\n\n  const VkRenderPassCreateInfo2 ci2 = {\n      .sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2,\n      .flags = 0,\n      .attachmentCount = (uint32_t)attachments2_.size(),\n      .pAttachments = attachments2_.data(),\n      .subpassCount = 1,\n      .pSubpasses = &subpass2,\n      .dependencyCount = 1,\n      .pDependencies = &dep2,\n      .correlatedViewMaskCount = viewMask_ ? 1u : 0u,\n      .pCorrelatedViewMasks = viewMask_ ? &correlationMask_ : nullptr,\n  };\n  const VkResult result =\n\n#if IGL_VULKAN_HAS_LEGACY_RENDERPASS\n      vf.vkCreateRenderPass2 ? vf.vkCreateRenderPass2(device, &ci2, nullptr, outRenderPass)\n                             : vf.vkCreateRenderPass(device, &ci, nullptr, outRenderPass);\n#else\n      vf.vkCreateRenderPass2(device, &ci2, nullptr, outRenderPass);\n#endif // IGL_VULKAN_HAS_LEGACY_RENDERPASS\n\n  if (!IGL_DEBUG_VERIFY(result == VK_SUCCESS)) {\n    return result;\n  }\n\n  // set debug name\n  return ivkSetDebugObjectName(\n      &vf, device, VK_OBJECT_TYPE_RENDER_PASS, (uint64_t)*outRenderPass, debugName);\n}\n\nVulkanRenderPassBuilder& VulkanRenderPassBuilder::addColor(VkFormat format,\n                                                           VkAttachmentLoadOp loadOp,\n                                                           VkAttachmentStoreOp storeOp,\n                                                           VkImageLayout initialLayout,\n                                                           VkImageLayout finalLayout,\n                                                           VkSampleCountFlagBits samples) {\n  IGL_DEBUG_ASSERT(format != VK_FORMAT_UNDEFINED, \"Invalid color attachment format\");\n  if (!refsColor2_.empty()) {\n    IGL_DEBUG_ASSERT(attachments2_[refsColor2_.back().attachment].samples == samples,\n                     \"All non-resolve attachments should have the sample number of samples\");\n  }\n\n#if IGL_VULKAN_HAS_LEGACY_RENDERPASS\n  refsColor_.push_back(VkAttachmentReference{\n      .attachment = (uint32_t)attachments_.size(),\n      .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,\n  });\n  attachments_.push_back(VkAttachmentDescription{\n      .flags = 0,\n      .format = format,\n      .samples = samples,\n      .loadOp = loadOp,\n      .storeOp = storeOp,\n      .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,\n      .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,\n      .initialLayout = initialLayout,\n      .finalLayout = finalLayout,\n  });\n#endif // IGL_VULKAN_HAS_LEGACY_RENDERPASS\n  refsColor2_.push_back(VkAttachmentReference2{\n      .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,\n      .attachment = (uint32_t)attachments2_.size(),\n      .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,\n      .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,\n  });\n\n  attachments2_.push_back(VkAttachmentDescription2{\n      .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,\n      .flags = 0,\n      .format = format,\n      .samples = samples,\n      .loadOp = loadOp,\n      .storeOp = storeOp,\n      .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,\n      .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,\n      .initialLayout = initialLayout,\n      .finalLayout = finalLayout,\n  });\n\n  return *this;\n}\n\nVulkanRenderPassBuilder& VulkanRenderPassBuilder::addColorResolve(VkFormat format,\n                                                                  VkAttachmentLoadOp loadOp,\n                                                                  VkAttachmentStoreOp storeOp,\n                                                                  VkImageLayout initialLayout,\n                                                                  VkImageLayout finalLayout) {\n  IGL_DEBUG_ASSERT(format != VK_FORMAT_UNDEFINED, \"Invalid color resolve attachment format\");\n\n#if IGL_VULKAN_HAS_LEGACY_RENDERPASS\n  refsColorResolve_.push_back(VkAttachmentReference{\n      .attachment = (uint32_t)attachments_.size(),\n      .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,\n  });\n  attachments_.push_back(VkAttachmentDescription{\n      .flags = 0,\n      .format = format,\n      .samples = VK_SAMPLE_COUNT_1_BIT,\n      .loadOp = loadOp,\n      .storeOp = storeOp,\n      .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,\n      .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,\n      .initialLayout = initialLayout,\n      .finalLayout = finalLayout,\n  });\n#endif // IGL_VULKAN_HAS_LEGACY_RENDERPASS\n\n  refsColorResolve2_.push_back(VkAttachmentReference2{\n      .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,\n      .attachment = (uint32_t)attachments2_.size(),\n      .layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,\n      .aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,\n  });\n\n  attachments2_.push_back(VkAttachmentDescription2{\n      .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,\n      .flags = 0,\n      .format = format,\n      .samples = VK_SAMPLE_COUNT_1_BIT,\n      .loadOp = loadOp,\n      .storeOp = storeOp,\n      .stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,\n      .stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,\n      .initialLayout = initialLayout,\n      .finalLayout = finalLayout,\n  });\n\n  return *this;\n}\n\nVulkanRenderPassBuilder& VulkanRenderPassBuilder::addDepthStencil(\n    VkFormat format,\n    VkAttachmentLoadOp loadOp,\n    VkAttachmentStoreOp storeOp,\n    VkAttachmentLoadOp stencilLoadOp,\n    VkAttachmentStoreOp stencilStoreOp,\n    VkImageLayout initialLayout,\n    VkImageLayout finalLayout,\n    VkSampleCountFlagBits samples) {\n  IGL_DEBUG_ASSERT(refDepth2_.layout == VK_IMAGE_LAYOUT_UNDEFINED,\n                   \"Can have only 1 depth attachment\");\n  IGL_DEBUG_ASSERT(format != VK_FORMAT_UNDEFINED, \"Invalid depth attachment format\");\n  if (!refsColor2_.empty()) {\n    IGL_DEBUG_ASSERT(attachments2_[refsColor2_.back().attachment].samples == samples,\n                     \"All non-resolve attachments should have the sample number of samples \"\n                     \"(including a depth attachment)\");\n  }\n\n#if IGL_VULKAN_HAS_LEGACY_RENDERPASS\n  refDepth_ = VkAttachmentReference{\n      .attachment = (uint32_t)attachments_.size(),\n      .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,\n  };\n\n  attachments_.push_back(VkAttachmentDescription{\n      .flags = 0,\n      .format = format,\n      .samples = samples,\n      .loadOp = loadOp,\n      .storeOp = storeOp,\n      .stencilLoadOp = stencilLoadOp,\n      .stencilStoreOp = stencilStoreOp,\n      .initialLayout = initialLayout,\n      .finalLayout = finalLayout,\n  });\n#endif // IGL_VULKAN_HAS_LEGACY_RENDERPASS\n\n  refDepth2_ = VkAttachmentReference2{\n      .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,\n      .attachment = (uint32_t)attachments2_.size(),\n      .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,\n      .aspectMask = (hasDepth(format) ? VK_IMAGE_ASPECT_DEPTH_BIT : VkImageAspectFlags(0)) |\n                    (hasStencil(format) ? VK_IMAGE_ASPECT_STENCIL_BIT : VkImageAspectFlags(0)),\n  };\n\n  attachments2_.push_back(VkAttachmentDescription2{\n      .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,\n      .flags = 0,\n      .format = format,\n      .samples = samples,\n      .loadOp = loadOp,\n      .storeOp = storeOp,\n      .stencilLoadOp = stencilLoadOp,\n      .stencilStoreOp = stencilStoreOp,\n      .initialLayout = initialLayout,\n      .finalLayout = finalLayout,\n  });\n\n  return *this;\n}\n\nVulkanRenderPassBuilder& VulkanRenderPassBuilder::addDepthStencilResolve(\n    VkFormat format,\n    VkAttachmentLoadOp loadOp,\n    VkAttachmentStoreOp storeOp,\n    VkAttachmentLoadOp stencilLoadOp,\n    VkAttachmentStoreOp stencilStoreOp,\n    VkImageLayout initialLayout,\n    VkImageLayout finalLayout) {\n  IGL_DEBUG_ASSERT(refDepthResolve2_.layout == VK_IMAGE_LAYOUT_UNDEFINED,\n                   \"Can have only 1 depth resolve attachment\");\n  IGL_DEBUG_ASSERT(format != VK_FORMAT_UNDEFINED, \"Invalid depth resolve attachment format\");\n#if IGL_VULKAN_HAS_LEGACY_RENDERPASS\n  refDepthResolve_ = VkAttachmentReference{\n      .attachment = (uint32_t)attachments_.size(),\n      .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,\n  };\n\n  attachments_.push_back(VkAttachmentDescription{\n      .flags = 0,\n      .format = format,\n      .samples = VK_SAMPLE_COUNT_1_BIT,\n      .loadOp = loadOp,\n      .storeOp = storeOp,\n      .stencilLoadOp = stencilLoadOp,\n      .stencilStoreOp = stencilStoreOp,\n      .initialLayout = initialLayout,\n      .finalLayout = finalLayout,\n  });\n#endif // IGL_VULKAN_HAS_LEGACY_RENDERPASS\n\n  refDepthResolve2_ = VkAttachmentReference2{\n      .sType = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2,\n      .attachment = (uint32_t)attachments2_.size(),\n      .layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,\n      .aspectMask = (hasDepth(format) ? VK_IMAGE_ASPECT_DEPTH_BIT : VkImageAspectFlags(0)) |\n                    (hasStencil(format) ? VK_IMAGE_ASPECT_STENCIL_BIT : VkImageAspectFlags(0)),\n  };\n\n  attachments2_.push_back(VkAttachmentDescription2{\n      .sType = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2,\n      .flags = 0,\n      .format = format,\n      .samples = VK_SAMPLE_COUNT_1_BIT,\n      .loadOp = loadOp,\n      .storeOp = storeOp,\n      .stencilLoadOp = stencilLoadOp,\n      .stencilStoreOp = stencilStoreOp,\n      .initialLayout = initialLayout,\n      .finalLayout = finalLayout,\n  });\n\n  return *this;\n}\n\nVulkanRenderPassBuilder& VulkanRenderPassBuilder::setMultiviewMasks(\n    const uint32_t viewMask,\n    const uint32_t correlationMask) {\n  viewMask_ = viewMask;\n  correlationMask_ = correlationMask;\n  return *this;\n}\n\nbool VulkanRenderPassBuilder::operator==(const VulkanRenderPassBuilder& other) const {\n  return attachments2_ == other.attachments2_ && refsColor2_ == other.refsColor2_ &&\n         refsColorResolve2_ == other.refsColorResolve2_ && refDepth2_ == other.refDepth2_ &&\n         refDepthResolve2_ == other.refDepthResolve2_ && viewMask_ == other.viewMask_ &&\n         correlationMask_ == other.correlationMask_;\n}\n\nuint64_t VulkanRenderPassBuilder::HashFunction::operator()(\n    const VulkanRenderPassBuilder& builder) const {\n  uint64_t hash = 0;\n  for (const auto& a : builder.attachments2_) {\n    hash ^= std::hash<uint32_t>()(a.flags);\n    hash ^= std::hash<uint32_t>()(a.format);\n    hash ^= std::hash<uint32_t>()(a.samples);\n    hash ^= std::hash<uint32_t>()(a.loadOp);\n    hash ^= std::hash<uint32_t>()(a.storeOp);\n    hash ^= std::hash<uint32_t>()(a.stencilLoadOp);\n    hash ^= std::hash<uint32_t>()(a.stencilStoreOp);\n    hash ^= std::hash<uint32_t>()(a.initialLayout);\n    hash ^= std::hash<uint32_t>()(a.finalLayout);\n  }\n  for (const auto& r : builder.refsColor2_) {\n    hash ^= std::hash<uint32_t>()(r.attachment);\n    hash ^= std::hash<uint32_t>()(r.layout);\n    hash ^= std::hash<uint32_t>()(r.aspectMask);\n  }\n  for (const auto& r : builder.refsColorResolve2_) {\n    hash ^= std::hash<uint32_t>()(r.attachment);\n    hash ^= std::hash<uint32_t>()(r.layout);\n    hash ^= std::hash<uint32_t>()(r.aspectMask);\n  }\n  hash ^= std::hash<uint32_t>()(builder.refDepth2_.attachment);\n  hash ^= std::hash<uint32_t>()(builder.refDepth2_.layout);\n  hash ^= std::hash<uint32_t>()(builder.refDepth2_.aspectMask);\n  hash ^= std::hash<uint32_t>()(builder.refDepthResolve2_.attachment);\n  hash ^= std::hash<uint32_t>()(builder.refDepthResolve2_.layout);\n  hash ^= std::hash<uint32_t>()(builder.refDepthResolve2_.aspectMask);\n  hash ^= std::hash<uint32_t>()(builder.viewMask_);\n  hash ^= std::hash<uint32_t>()(builder.correlationMask_);\n  return hash;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanRenderPassBuilder.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#define IGL_VULKAN_HAS_LEGACY_RENDERPASS 1\n\n#include <vector>\n#include <igl/vulkan/Common.h>\n\nbool operator==(const VkAttachmentDescription2& a, const VkAttachmentDescription2& b);\nbool operator==(const VkAttachmentReference2& a, const VkAttachmentReference2& b);\n\nnamespace igl::vulkan {\n\n/// @brief A helper class to build VkRenderPass objects.\nclass VulkanRenderPassBuilder final {\n public:\n  VulkanRenderPassBuilder() = default;\n  ~VulkanRenderPassBuilder() = default;\n\n  VulkanRenderPassBuilder& addColor(\n      VkFormat format,\n      VkAttachmentLoadOp loadOp,\n      VkAttachmentStoreOp storeOp,\n      VkImageLayout initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,\n      VkImageLayout finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,\n      VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT);\n  VulkanRenderPassBuilder& addColorResolve(\n      VkFormat format,\n      VkAttachmentLoadOp loadOp,\n      VkAttachmentStoreOp storeOp,\n      VkImageLayout initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,\n      VkImageLayout finalLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);\n  VulkanRenderPassBuilder& addDepthStencil(\n      VkFormat format,\n      VkAttachmentLoadOp loadOp,\n      VkAttachmentStoreOp storeOp,\n      VkAttachmentLoadOp stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,\n      VkAttachmentStoreOp stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,\n      VkImageLayout initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,\n      VkImageLayout finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,\n      VkSampleCountFlagBits samples = VK_SAMPLE_COUNT_1_BIT);\n  VulkanRenderPassBuilder& addDepthStencilResolve(\n      VkFormat format,\n      VkAttachmentLoadOp loadOp,\n      VkAttachmentStoreOp storeOp,\n      VkAttachmentLoadOp stencilLoadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE,\n      VkAttachmentStoreOp stencilStoreOp = VK_ATTACHMENT_STORE_OP_DONT_CARE,\n      VkImageLayout initialLayout = VK_IMAGE_LAYOUT_UNDEFINED,\n      VkImageLayout finalLayout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);\n  VulkanRenderPassBuilder& setMultiviewMasks(uint32_t viewMask, uint32_t correlationMask);\n\n  // comparison operator and a hash function for std::unordered_map<>\n  bool operator==(const VulkanRenderPassBuilder& other) const;\n\n  struct HashFunction {\n    uint64_t operator()(const VulkanRenderPassBuilder& builder) const;\n  };\n\n private:\n  // Only VulkanContext is allowed to create actual render passes. Use\n  // VulkanContext::findRenderPass()\n  friend class VulkanContext;\n  VkResult build(const VulkanFunctionTable& vf,\n                 VkDevice device,\n                 VkRenderPass* outRenderPass,\n                 const char* debugName = nullptr) const noexcept;\n\n private:\n#if IGL_VULKAN_HAS_LEGACY_RENDERPASS\n  // old code path for vkCreateRenderPass() - to be removed later\n  std::vector<VkAttachmentDescription> attachments_;\n  std::vector<VkAttachmentReference> refsColor_;\n  std::vector<VkAttachmentReference> refsColorResolve_;\n  VkAttachmentReference refDepth_ = {};\n  VkAttachmentReference refDepthResolve_ = {};\n#endif // IGL_VULKAN_HAS_LEGACY_RENDERPASS\n  // new code path for vkCreateRenderPass2()\n  std::vector<VkAttachmentDescription2> attachments2_;\n  std::vector<VkAttachmentReference2> refsColor2_;\n  std::vector<VkAttachmentReference2> refsColorResolve2_;\n  VkAttachmentReference2 refDepth2_ = {};\n  VkAttachmentReference2 refDepthResolve2_ = {};\n  uint32_t viewMask_ = 0;\n  uint32_t correlationMask_ = 0;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanSemaphore.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanSemaphore.h\"\n\n#include <igl/vulkan/Common.h>\n\nnamespace igl::vulkan {\n\nVulkanSemaphore::VulkanSemaphore(const VulkanFunctionTable& vf,\n                                 VkDevice device,\n                                 bool exportable,\n                                 const char* debugName) :\n  vf_(&vf), device_(device), exportable_(exportable) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  const VkExportSemaphoreCreateInfo exportInfo = {\n      .sType = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO,\n      .handleTypes = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,\n  };\n  const VkSemaphoreCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,\n      .pNext = exportable ? &exportInfo : nullptr,\n      .flags = 0,\n  };\n  VK_ASSERT(vf_->vkCreateSemaphore(device_, &ci, nullptr, &vkSemaphore_));\n  VK_ASSERT(ivkSetDebugObjectName(\n      vf_, device_, VK_OBJECT_TYPE_SEMAPHORE, (uint64_t)vkSemaphore_, debugName));\n}\n\nVulkanSemaphore::VulkanSemaphore(const VulkanFunctionTable& vf,\n                                 VkDevice device,\n                                 uint64_t initialValue,\n                                 bool exportable,\n                                 const char* debugName) :\n  vf_(&vf), device_(device), exportable_(exportable) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  const VkExportSemaphoreCreateInfo exportInfo = {\n      .sType = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO,\n      .handleTypes = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,\n  };\n  const VkSemaphoreTypeCreateInfo semaphoreTypeCreateInfo = {\n      .sType = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO,\n      .pNext = exportable ? &exportInfo : nullptr,\n      .semaphoreType = VK_SEMAPHORE_TYPE_TIMELINE,\n      .initialValue = initialValue,\n  };\n  const VkSemaphoreCreateInfo ci = {\n      .sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO,\n      .pNext = &semaphoreTypeCreateInfo,\n      .flags = 0,\n  };\n  VK_ASSERT(vf_->vkCreateSemaphore(device_, &ci, nullptr, &vkSemaphore_));\n  VK_ASSERT(ivkSetDebugObjectName(\n      vf_, device_, VK_OBJECT_TYPE_SEMAPHORE, (uint64_t)vkSemaphore_, debugName));\n}\n\nVulkanSemaphore ::~VulkanSemaphore() {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_DESTROY);\n\n  if (device_ != VK_NULL_HANDLE) {\n    // lifetimes of all VkSemaphore objects are managed explicitly\n    // we do not use deferredTask() for them\n    vf_->vkDestroySemaphore(device_, vkSemaphore_, nullptr);\n  }\n}\n\nVulkanSemaphore::VulkanSemaphore(VulkanSemaphore&& other) noexcept {\n  std::swap(vf_, other.vf_);\n  std::swap(device_, other.device_);\n  std::swap(vkSemaphore_, other.vkSemaphore_);\n  std::swap(exportable_, other.exportable_);\n}\n\nVulkanSemaphore& VulkanSemaphore::operator=(VulkanSemaphore&& other) noexcept {\n  VulkanSemaphore tmp(std::move(other));\n  std::swap(vf_, tmp.vf_);\n  std::swap(device_, tmp.device_);\n  std::swap(vkSemaphore_, tmp.vkSemaphore_);\n  std::swap(exportable_, other.exportable_);\n  return *this;\n}\n\nVkSemaphore VulkanSemaphore::getVkSemaphore() const noexcept {\n  return vkSemaphore_;\n}\n\n// Exportable semaphores are not used right now, so exclude from coverage\n// FIXME_DEPRECATED_COVERAGE_EXCLUDE_START\nint VulkanSemaphore::getFileDescriptor() const noexcept {\n  if (!exportable_) {\n    return -1;\n  }\n  const VkSemaphoreGetFdInfoKHR fdInfo = {\n      .sType = VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR,\n      .pNext = nullptr,\n      .semaphore = vkSemaphore_,\n      .handleType = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT,\n  };\n  int fd = -1;\n  const VkResult ok = vf_->vkGetSemaphoreFdKHR(device_, &fdInfo, &fd);\n  if (ok == VK_SUCCESS) {\n    return fd;\n  }\n  return -1;\n}\n// FIXME_DEPRECATED_COVERAGE_EXCLUDE_END\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanSemaphore.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanHelpers.h>\n\nnamespace igl::vulkan {\n\n/**\n * @brief Semaphores are used to synchronize GPU-GPU tasks. The VulkanSemaphore class encapsulates\n * the creation and destruction of a vulkan semaphore object (VkSemaphore). It stores an opaque\n * handle for a newly created semaphore object and for a device object.\n */\nclass VulkanSemaphore final {\n public:\n  explicit VulkanSemaphore(const VulkanFunctionTable& vf,\n                           VkDevice device,\n                           bool exportable = false,\n                           const char* debugName = nullptr);\n  /// Create a timeline semaphore\n  explicit VulkanSemaphore(const VulkanFunctionTable& vf,\n                           VkDevice device,\n                           uint64_t initialValue,\n                           bool exportable = false,\n                           const char* debugName = nullptr);\n  ~VulkanSemaphore();\n\n  VulkanSemaphore(VulkanSemaphore&& other) noexcept;\n  VulkanSemaphore& operator=(VulkanSemaphore&& other) noexcept;\n\n  VulkanSemaphore(const VulkanSemaphore&) = delete;\n  VulkanSemaphore& operator=(const VulkanSemaphore&) = delete;\n\n  [[nodiscard]] VkSemaphore getVkSemaphore() const noexcept;\n\n  // Exportable semaphores are not used right now, so exclude from coverage\n  // FIXME_DEPRECATED_COVERAGE_EXCLUDE_START\n  [[nodiscard]] int getFileDescriptor() const noexcept;\n  // FIXME_DEPRECATED_COVERAGE_EXCLUDE_END\n\n public:\n  // NOLINTBEGIN(readability-identifier-naming)\n  const VulkanFunctionTable* vf_{};\n  VkDevice device_ = VK_NULL_HANDLE;\n  VkSemaphore vkSemaphore_ = VK_NULL_HANDLE;\n  bool exportable_ = false;\n  // NOLINTEND(readability-identifier-naming)\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanShaderModule.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/VulkanShaderModule.h>\n\nnamespace igl::vulkan {\n\nVulkanShaderModule::VulkanShaderModule(const VulkanFunctionTable& vf,\n                                       VkDevice device,\n                                       VkShaderModule shaderModule,\n                                       util::SpvModuleInfo&& moduleInfo) :\n  vf_(vf), device_(device), vkShaderModule_(shaderModule), moduleInfo_(std::move(moduleInfo)) {}\n\nVulkanShaderModule::~VulkanShaderModule() {\n  vf_.vkDestroyShaderModule(device_, vkShaderModule_, nullptr);\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanShaderModule.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <memory>\n#include <vector>\n#include <igl/vulkan/VulkanFunctionTable.h>\n#include <igl/vulkan/util/SpvReflection.h>\n\nnamespace igl::vulkan {\n\n/**\n * @brief RAII wrapper for a Vulkan shader module.\n */\nclass VulkanShaderModule final {\n public:\n  /** @brief Instantiates a shader module wrapper with the module and the device that owns it */\n  VulkanShaderModule(const VulkanFunctionTable& vf,\n                     VkDevice device,\n                     VkShaderModule shaderModule,\n                     util::SpvModuleInfo&& moduleInfo);\n  ~VulkanShaderModule();\n  VulkanShaderModule(const VulkanShaderModule&) = delete;\n  VulkanShaderModule& operator=(const VulkanShaderModule&) = delete;\n  VulkanShaderModule(VulkanShaderModule&&) = delete;\n  VulkanShaderModule& operator=(VulkanShaderModule&&) = delete;\n\n  /** @brief Returns the underlying Vulkan shader module */\n  [[nodiscard]] VkShaderModule getVkShaderModule() const {\n    return vkShaderModule_;\n  }\n\n  [[nodiscard]] const util::SpvModuleInfo& getSpvModuleInfo() const {\n    return moduleInfo_;\n  }\n\n private:\n  const VulkanFunctionTable& vf_;\n  VkDevice device_ = VK_NULL_HANDLE;\n  VkShaderModule vkShaderModule_ = VK_NULL_HANDLE;\n  util::SpvModuleInfo moduleInfo_ = {};\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanStagingDevice.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/VulkanStagingDevice.h>\n\n#include <igl/IGLSafeC.h>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanBuffer.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanImmediateCommands.h>\n\n#define IGL_VULKAN_DEBUG_STAGING_DEVICE 0\n\nusing VulkanSubmitHandle = igl::vulkan::VulkanImmediateCommands::SubmitHandle;\n\nconstexpr VkDeviceSize kMinStagingBufferSize = static_cast<const VkDeviceSize>(1024u) * 1024u;\n\nnamespace igl::vulkan {\n\nVulkanStagingDevice::VulkanStagingDevice(VulkanContext& ctx) : ctx_(ctx) {\n  IGL_PROFILER_FUNCTION();\n\n  const auto& limits = ctx_.getVkPhysicalDeviceProperties().limits;\n\n  // Use value of 256MB (limited by some architectures), and clamp it to the max limits\n  maxStagingBufferSize_ = std::min(limits.maxStorageBufferRange, 256u * 1024u * 1024u);\n\n  immediate = std::make_unique<VulkanImmediateCommands>(\n      ctx_.vf_,\n      ctx_.getVkDevice(),\n      ctx_.deviceQueues_.graphicsQueueFamilyIndex,\n      ctx_.config_.exportableFences,\n      ctx_.features_.has_VK_KHR_timeline_semaphore && ctx_.features_.has_VK_KHR_synchronization2,\n      \"VulkanStagingDevice::immediate_\");\n  IGL_DEBUG_ASSERT(immediate.get());\n}\n\nvoid VulkanStagingDevice::bufferSubData(VulkanBuffer& buffer,\n                                        size_t dstOffset,\n                                        size_t size,\n                                        const void* data) {\n  IGL_PROFILER_FUNCTION();\n  if (buffer.isMapped()) {\n    buffer.bufferSubData(dstOffset, size, data);\n    return;\n  }\n\n  uint32_t chunkDstOffset = dstOffset;\n  void* copyData = const_cast<void*>(data);\n\n#if IGL_VULKAN_DEBUG_STAGING_DEVICE\n  IGL_LOG_INFO(\"Upload requested for data with %u bytes\\n\", size);\n#endif\n\n  while (size) {\n    // finds a free memory block to store the data in the staging buffer\n    MemoryRegion memoryChunk = nextFreeBlock(size, false);\n    const VkDeviceSize copySize = std::min(static_cast<VkDeviceSize>(size), memoryChunk.size);\n\n#if IGL_VULKAN_DEBUG_STAGING_DEVICE\n    IGL_LOG_INFO(\"\\tUploading %u bytes\\n\", copySize);\n#endif\n\n    auto& stagingBuffer = stagingBuffers_[memoryChunk.stagingBufferIndex];\n\n    // copy data into the staging buffer\n    stagingBuffer->bufferSubData(memoryChunk.offset, copySize, copyData);\n\n    // do the transfer\n    const VkBufferCopy copy = {\n        .srcOffset = memoryChunk.offset,\n        .dstOffset = chunkDstOffset,\n        .size = copySize,\n    };\n\n    const auto& wrapper = immediate->acquire();\n    ctx_.vf_.vkCmdCopyBuffer(\n        wrapper.cmdBuf, stagingBuffer->getVkBuffer(), buffer.getVkBuffer(), 1, &copy);\n    memoryChunk.handle = immediate->submit(wrapper); // store the submit handle with the allocation\n    regions_.push_back(memoryChunk);\n\n    size -= copySize;\n    copyData = (uint8_t*)copyData + copySize;\n    chunkDstOffset += copySize;\n  }\n}\n\nvoid VulkanStagingDevice::mergeRegionsAndFreeBuffers() {\n  uint32_t regionIndex = 0;\n  while (regionIndex < regions_.size() && immediate->isReady(regions_[regionIndex].handle)) {\n    auto& currRegion = regions_[regionIndex];\n\n    // set empty handle for a region, if it has finished processing\n    // so handle.empty() check can be done later\n    if (!currRegion.handle.empty() && immediate->isReady(currRegion.handle)) {\n      currRegion.handle = VulkanImmediateCommands::SubmitHandle();\n      freeStagingBufferSize_ += currRegion.size;\n    }\n\n    // if a next region exist and is not busy\n    if ((regionIndex + 1) < regions_.size() && regions_[regionIndex + 1].handle.empty()) {\n      auto& nextRegion = regions_[regionIndex + 1];\n      // if current and next region are parts of the same buffer\n      if (currRegion.stagingBufferIndex == nextRegion.stagingBufferIndex) {\n        // if current and next region are adjacent memory blocks, merge them into one\n        const bool adjacentRegions = (currRegion.size + currRegion.offset) == nextRegion.offset ||\n                                     (nextRegion.size + nextRegion.offset) == currRegion.offset;\n\n        if (adjacentRegions) {\n          const MemoryRegion newRegion = {\n              .offset = std::min(currRegion.offset, nextRegion.offset),\n              .size = currRegion.size + nextRegion.size,\n              .alignedSize = currRegion.alignedSize,\n              .handle = VulkanImmediateCommands::SubmitHandle(),\n              .stagingBufferIndex = currRegion.stagingBufferIndex,\n          };\n          nextRegion = newRegion;\n          regions_.erase(regions_.begin() + regionIndex);\n          continue;\n        }\n      } else {\n        // if current and next region are not parts of the same buffer\n        // move region with smaller staging buffer index first, so regions would eventually line up\n        // if they have been split\n        if (currRegion.stagingBufferIndex > nextRegion.stagingBufferIndex) {\n          std::swap(currRegion, nextRegion);\n        }\n      }\n    }\n\n    // if a staging buffer is completely recovered\n    if (currRegion.size == currRegion.alignedSize) {\n      freeStagingBufferSize_ -= currRegion.size;\n      // free the staging buffer\n      stagingBuffers_[currRegion.stagingBufferIndex].reset();\n      // remove the region\n      regions_.erase(regions_.begin() + regionIndex);\n\n      // remove trailing empty staging buffers\n      while (!stagingBuffers_.empty() && stagingBuffers_.back().get() == nullptr) {\n        stagingBuffers_.pop_back();\n      }\n      continue;\n    }\n\n    regionIndex++;\n  }\n\n#if IGL_VULKAN_DEBUG_STAGING_DEVICE\n  IGL_LOG_INFO(\"Regions: %d Staging buffers: %d Free space: %d\\n\",\n               regions_.size(),\n               stagingBuffers_.size(),\n               freeStagingBufferSize_);\n#endif\n}\n\nVulkanStagingDevice::MemoryRegion VulkanStagingDevice::nextFreeBlock(VkDeviceSize size,\n                                                                     bool contiguous) {\n  IGL_PROFILER_FUNCTION();\n\n  const VkDeviceSize requestedAlignedSize = getAlignedSize(size);\n\n  if (shouldAllocateStagingBuffer(requestedAlignedSize, contiguous)) {\n    allocateStagingBuffer(nextSize(requestedAlignedSize));\n  }\n\n  IGL_DEBUG_ASSERT(!regions_.empty());\n\n#if IGL_VULKAN_DEBUG_STAGING_DEVICE\n  IGL_LOG_INFO(\"nextFreeBlock() with %u bytes, aligned %u bytes\\n\", size, requestedAlignedSize);\n#endif\n\n  VkDeviceSize allocatedSize = 0;\n  // at this point, there should be a free region that can fit the requested size\n  auto regionItr = regions_.begin();\n  while (regionItr != regions_.end()) {\n    // if requested size is available or if contiguous memory is not requested\n    if ((regionItr->size >= requestedAlignedSize || !contiguous) &&\n        (immediate->isReady(regionItr->handle))) {\n      allocatedSize = std::min(regionItr->size, requestedAlignedSize);\n      break;\n    }\n    regionItr++;\n  }\n\n  IGL_DEBUG_ASSERT(allocatedSize);\n\n  if (allocatedSize) {\n    const uint32_t newSize = regionItr->size - allocatedSize;\n    const uint32_t newOffset = regionItr->offset + allocatedSize;\n    const uint32_t stagingBufferIndex = regionItr->stagingBufferIndex;\n\n    const MemoryRegion allocatedRegion = {\n        .offset = regionItr->offset,\n        .size = allocatedSize,\n        .alignedSize = regionItr->alignedSize,\n        .handle = VulkanImmediateCommands::SubmitHandle(),\n        .stagingBufferIndex = stagingBufferIndex,\n    };\n\n    // Return this region and add the remaining unused size to the regions_ deque\n    IGL_SCOPE_EXIT {\n      if (newSize > 0) {\n        *regionItr = {\n            .offset = newOffset,\n            .size = newSize,\n            .alignedSize = regionItr->alignedSize,\n            .handle = VulkanImmediateCommands::SubmitHandle(),\n            .stagingBufferIndex = stagingBufferIndex,\n        };\n      } else {\n        regions_.erase(regionItr);\n      }\n    };\n\n    freeStagingBufferSize_ -= allocatedSize;\n    return allocatedRegion;\n  }\n\n#if IGL_VULKAN_DEBUG_STAGING_DEVICE\n  IGL_LOG_INFO(\n      \"Could not find an available block. Waiting for the staging device to become fully \"\n      \"available\\n\");\n#endif\n\n  // Nothing was available. Let's wait for the entire staging buffer to become free\n  waitAndReset();\n\n  // try to allocate a new staging buffer\n  allocateStagingBuffer(nextSize(requestedAlignedSize));\n  IGL_DEBUG_ASSERT(!regions_.empty());\n\n  if (!regions_.empty()) { // if a valid region is available, return it\n    freeStagingBufferSize_ -= requestedAlignedSize;\n    return regions_.front();\n  }\n  return {};\n}\n\nvoid VulkanStagingDevice::getBufferSubData(const VulkanBuffer& buffer,\n                                           size_t srcOffset,\n                                           size_t size,\n                                           void* data) {\n  IGL_PROFILER_FUNCTION();\n  if (buffer.isMapped()) {\n    buffer.getBufferSubData(srcOffset, size, data);\n    return;\n  }\n\n#if IGL_VULKAN_DEBUG_STAGING_DEVICE\n  IGL_LOG_INFO(\"Download requested for data with %u bytes\\n\", size);\n#endif\n\n  size_t chunkSrcOffset = srcOffset;\n  auto* dstData = static_cast<uint8_t*>(data);\n  const size_t bufferSize = size;\n\n  while (size) {\n    const MemoryRegion memoryChunk = nextFreeBlock(size, false);\n    const VkDeviceSize copySize = std::min(static_cast<VkDeviceSize>(size), memoryChunk.size);\n\n    // do the transfer\n    const VkBufferCopy copy = {\n        .srcOffset = chunkSrcOffset,\n        .dstOffset = memoryChunk.offset,\n        .size = copySize,\n    };\n\n    const auto& wrapper = immediate->acquire();\n\n    auto& stagingBuffer = stagingBuffers_[memoryChunk.stagingBufferIndex];\n\n    ctx_.vf_.vkCmdCopyBuffer(\n        wrapper.cmdBuf, buffer.getVkBuffer(), stagingBuffer->getVkBuffer(), 1, &copy);\n\n    // Wait for command to finish\n    immediate->wait(immediate->submit(wrapper), ctx_.config_.fenceTimeoutNanoseconds);\n\n    // Copy data into data\n    const uint8_t* src = stagingBuffer->getMappedPtr() + memoryChunk.offset;\n    checked_memcpy(dstData, bufferSize - chunkSrcOffset, src, copySize);\n\n    size -= copySize;\n    dstData = (uint8_t*)dstData + copySize;\n    chunkSrcOffset += copySize;\n\n    regions_.push_back(memoryChunk);\n  }\n}\n\nvoid VulkanStagingDevice::imageData(const VulkanImage& image,\n                                    TextureType type,\n                                    const TextureRangeDesc& range,\n                                    const TextureFormatProperties& properties,\n                                    uint32_t bytesPerRow,\n                                    VkImageAspectFlags aspectFlags,\n                                    const void* data) {\n  IGL_PROFILER_FUNCTION();\n\n  const bool is420 = (image.imageFormat_ == VK_FORMAT_G8_B8R8_2PLANE_420_UNORM) ||\n                     (image.imageFormat_ == VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM);\n\n  const uint32_t storageSize =\n      is420 ? image.extent_.width * image.extent_.height * 3u / 2u\n            : static_cast<uint32_t>(properties.getBytesPerRange(range, bytesPerRow));\n\n  IGL_DEBUG_ASSERT(storageSize);\n\n  // We don't support uploading image data in small chunks. If the total upload size exceeds the\n  // the maximum allowed staging buffer size, we can't upload it\n  IGL_DEBUG_ASSERT(storageSize <= maxStagingBufferSize_,\n                   \"Image size exceeds maximum size of staging buffer\");\n\n#if IGL_VULKAN_DEBUG_STAGING_DEVICE\n  IGL_LOG_INFO(\"Image upload requested for data with %u bytes\\n\", storageSize);\n#endif\n\n  // get next staging buffer free offset\n  MemoryRegion memoryChunk = nextFreeBlock(storageSize, true);\n\n  IGL_DEBUG_ASSERT(memoryChunk.size >= storageSize);\n  auto& stagingBuffer = stagingBuffers_[memoryChunk.stagingBufferIndex];\n\n  // 1. Copy the pixel data into the host visible staging buffer\n  stagingBuffer->bufferSubData(memoryChunk.offset, storageSize, data);\n\n  const auto& wrapper = immediate->acquire();\n  const uint32_t initialLayer = getVkLayer(type, range.face, range.layer);\n  const uint32_t numLayers = getVkLayer(type, range.numFaces, range.numLayers);\n\n  std::vector<VkBufferImageCopy> copyRegions;\n  copyRegions.reserve(range.numMipLevels);\n\n  if (is420) {\n    // this is a prototype support implemented for a couple of multiplanar image formats\n    IGL_DEBUG_ASSERT(range.face == 0 && range.layer == 0 && range.mipLevel == 0);\n    IGL_DEBUG_ASSERT(range.numFaces == 1 && range.numLayers == 1 && range.numMipLevels == 1);\n    IGL_DEBUG_ASSERT(range.x == 0 && range.y == 0 && range.z == 0);\n    IGL_DEBUG_ASSERT(image.type_ == VK_IMAGE_TYPE_2D);\n    IGL_DEBUG_ASSERT(image.extent_.width == range.width && image.extent_.height == range.height);\n    const uint32_t w = image.extent_.width;\n    const uint32_t h = image.extent_.height;\n    ivkCmdBeginDebugUtilsLabel(&ctx_.vf_,\n                               wrapper.cmdBuf,\n                               \"VulkanStagingDevice::imageData (upload YUV image data)\",\n                               K_COLOR_UPLOAD_IMAGE.toFloatPtr());\n    VkImageAspectFlags imageAspect = VK_IMAGE_ASPECT_PLANE_0_BIT;\n\n    // Luminance (1 plane)\n    copyRegions.emplace_back(VkBufferImageCopy{\n        .bufferOffset = memoryChunk.offset,\n        .imageSubresource =\n            VkImageSubresourceLayers{\n                .aspectMask = VK_IMAGE_ASPECT_PLANE_0_BIT,\n                .mipLevel = 0,\n                .baseArrayLayer = 0,\n                .layerCount = 1,\n            },\n        .imageOffset = {0, 0, 0},\n        .imageExtent = {w, h, 1u},\n    });\n    // Chrominance (in 1 or 2 planes, 420 subsampled)\n    const VkDeviceSize planeSize0 = static_cast<VkDeviceSize>(w) * static_cast<VkDeviceSize>(h);\n    const VkDeviceSize planeSize1 = planeSize0 / 4; // subsampled\n    if (image.imageFormat_ == VK_FORMAT_G8_B8R8_2PLANE_420_UNORM) {\n      imageAspect |= VK_IMAGE_ASPECT_PLANE_1_BIT;\n      copyRegions.emplace_back(VkBufferImageCopy{\n          .bufferOffset = memoryChunk.offset + planeSize0,\n          .imageSubresource =\n              VkImageSubresourceLayers{\n                  .aspectMask = VK_IMAGE_ASPECT_PLANE_1_BIT,\n                  .mipLevel = 0,\n                  .baseArrayLayer = 0,\n                  .layerCount = 1,\n              },\n          .imageOffset = {0, 0, 0},\n          .imageExtent = {w / 2, h / 2, 1u},\n      });\n    } else if (image.imageFormat_ == VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM) {\n      imageAspect |= VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT;\n      copyRegions.emplace_back(VkBufferImageCopy{\n          .bufferOffset = memoryChunk.offset + planeSize0,\n          .imageSubresource =\n              VkImageSubresourceLayers{\n                  .aspectMask = VK_IMAGE_ASPECT_PLANE_1_BIT,\n                  .mipLevel = 0,\n                  .baseArrayLayer = 0,\n                  .layerCount = 1,\n              },\n          .imageOffset = {0, 0, 0},\n          .imageExtent = {w / 2, h / 2, 1u},\n      });\n      copyRegions.emplace_back(VkBufferImageCopy{\n          .bufferOffset = memoryChunk.offset + planeSize0 + planeSize1,\n          .imageSubresource =\n              VkImageSubresourceLayers{\n                  .aspectMask = VK_IMAGE_ASPECT_PLANE_2_BIT,\n                  .mipLevel = 0,\n                  .baseArrayLayer = 0,\n                  .layerCount = 1,\n              },\n          .imageOffset = {0, 0, 0},\n          .imageExtent = {w / 2, h / 2, 1u},\n      });\n\n    } else {\n      IGL_DEBUG_ABORT(\"Unimplemented multiplanar image format\");\n      return;\n    }\n\n    const VkImageSubresourceRange subresourceRange = {\n        .aspectMask = imageAspect,\n        .baseMipLevel = 0,\n        .levelCount = VK_REMAINING_MIP_LEVELS,\n        .baseArrayLayer = 0,\n        .layerCount = VK_REMAINING_ARRAY_LAYERS,\n    };\n    // 1. Transition initial image layout into TRANSFER_DST_OPTIMAL\n    ivkImageMemoryBarrier(&ctx_.vf_,\n                          wrapper.cmdBuf,\n                          image.getVkImage(),\n                          0,\n                          VK_ACCESS_TRANSFER_WRITE_BIT,\n                          VK_IMAGE_LAYOUT_UNDEFINED,\n                          VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                          VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,\n                          VK_PIPELINE_STAGE_TRANSFER_BIT,\n                          subresourceRange);\n\n    // 2. Copy the pixel data from the staging buffer into the image\n#if IGL_VULKAN_PRINT_COMMANDS\n    IGL_LOG_INFO(\"%p vkCmdCopyBufferToImage()\\n\", wrapper.cmdBuf);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n    ctx_.vf_.vkCmdCopyBufferToImage(wrapper.cmdBuf,\n                                    stagingBuffer->getVkBuffer(),\n                                    image.getVkImage(),\n                                    VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                                    static_cast<uint32_t>(copyRegions.size()),\n                                    copyRegions.data());\n\n    const VkImageLayout targetLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;\n\n    // 3. Transition TRANSFER_DST_OPTIMAL into `targetLayout`\n    ivkImageMemoryBarrier(&ctx_.vf_,\n                          wrapper.cmdBuf,\n                          image.getVkImage(),\n                          VK_ACCESS_TRANSFER_WRITE_BIT,\n                          VK_ACCESS_SHADER_READ_BIT,\n                          VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                          targetLayout,\n                          VK_PIPELINE_STAGE_TRANSFER_BIT,\n                          VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |\n                              VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |\n                              VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT,\n                          subresourceRange);\n\n    image.imageLayout_ = targetLayout;\n\n    ivkCmdEndDebugUtilsLabel(&ctx_.vf_, wrapper.cmdBuf);\n\n    // Store the allocated block with the SubmitHandle at the end of the deque\n    memoryChunk.handle = immediate->submit(wrapper);\n    regions_.push_back(memoryChunk);\n\n    return;\n\n    // end of VK_FORMAT_G8_B8R8_2PLANE_420_UNORM code path\n  }\n\n  // vkCmdCopyBufferToImage() can have only one single bit set for image aspect flags (IGL has no\n  // way to distinguish between Depth and Stencil for combined depth/stencil image formats)\n  const VkImageAspectFlags aspectMask =\n      image.isDepthFormat_ ? VK_IMAGE_ASPECT_DEPTH_BIT\n                           : (image.isStencilFormat_ ? VK_IMAGE_ASPECT_STENCIL_BIT : aspectFlags);\n\n  ivkCmdBeginDebugUtilsLabel(&ctx_.vf_,\n                             wrapper.cmdBuf,\n                             \"VulkanStagingDevice::imageData (upload image data)\",\n                             K_COLOR_UPLOAD_IMAGE.toFloatPtr());\n\n  for (auto mipLevel = range.mipLevel; mipLevel < range.mipLevel + range.numMipLevels; ++mipLevel) {\n    const auto mipRange = range.atMipLevel(mipLevel);\n    const uint32_t offset =\n        static_cast<uint32_t>(properties.getSubRangeByteOffset(range, mipRange, bytesPerRow));\n    const uint32_t texelsPerRow = bytesPerRow / static_cast<uint32_t>(properties.bytesPerBlock);\n\n    if (image.type_ == VK_IMAGE_TYPE_2D) {\n      copyRegions.emplace_back(VkBufferImageCopy{\n          .bufferOffset = memoryChunk.offset + offset,\n          .bufferRowLength = texelsPerRow,\n          .imageSubresource =\n              VkImageSubresourceLayers{\n                  .aspectMask = aspectMask,\n                  .mipLevel = static_cast<uint32_t>(mipLevel),\n                  .baseArrayLayer = initialLayer,\n                  .layerCount = numLayers,\n              },\n          .imageOffset = {static_cast<int32_t>(mipRange.x), static_cast<int32_t>(mipRange.y), 0},\n          .imageExtent = {static_cast<uint32_t>(mipRange.width),\n                          static_cast<uint32_t>(mipRange.height),\n                          1u},\n      });\n    } else {\n      copyRegions.emplace_back(\n          VkBufferImageCopy{.bufferOffset = memoryChunk.offset + offset,\n                            .bufferRowLength = texelsPerRow,\n                            .bufferImageHeight = 0,\n                            .imageSubresource =\n                                VkImageSubresourceLayers{\n                                    .aspectMask = aspectMask,\n                                    .mipLevel = static_cast<uint32_t>(mipLevel),\n                                    .baseArrayLayer = initialLayer,\n                                    .layerCount = numLayers,\n                                },\n                            .imageOffset = VkOffset3D{static_cast<int32_t>(mipRange.x),\n                                                      static_cast<int32_t>(mipRange.y),\n                                                      static_cast<int32_t>(mipRange.z)},\n                            .imageExtent = VkExtent3D{static_cast<uint32_t>(mipRange.width),\n                                                      static_cast<uint32_t>(mipRange.height),\n                                                      static_cast<uint32_t>(mipRange.depth)}});\n    }\n  }\n\n  // image memory barriers should have combined image aspect flags (depth/stencil)\n  const VkImageSubresourceRange subresourceRange = {\n      .aspectMask = aspectFlags,\n      .baseMipLevel = 0,\n      .levelCount = VK_REMAINING_MIP_LEVELS,\n      .baseArrayLayer = initialLayer,\n      .layerCount = numLayers,\n  };\n  // 1. Transition initial image layout into TRANSFER_DST_OPTIMAL\n  ivkImageMemoryBarrier(&ctx_.vf_,\n                        wrapper.cmdBuf,\n                        image.getVkImage(),\n                        0,\n                        VK_ACCESS_TRANSFER_WRITE_BIT,\n                        VK_IMAGE_LAYOUT_UNDEFINED,\n                        VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                        VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,\n                        VK_PIPELINE_STAGE_TRANSFER_BIT,\n                        subresourceRange);\n\n  // 2. Copy the pixel data from the staging buffer into the image\n#if IGL_VULKAN_PRINT_COMMANDS\n  IGL_LOG_INFO(\"%p vkCmdCopyBufferToImage()\\n\", wrapper.cmdBuf);\n#endif // IGL_VULKAN_PRINT_COMMANDS\n  ctx_.vf_.vkCmdCopyBufferToImage(wrapper.cmdBuf,\n                                  stagingBuffer->getVkBuffer(),\n                                  image.getVkImage(),\n                                  VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                                  static_cast<uint32_t>(copyRegions.size()),\n                                  copyRegions.data());\n\n  const bool isSampled = (image.getVkImageUsageFlags() & VK_IMAGE_USAGE_SAMPLED_BIT) != 0;\n  const bool isStorage = (image.getVkImageUsageFlags() & VK_IMAGE_USAGE_STORAGE_BIT) != 0;\n  const bool isColorAttachment =\n      (image.getVkImageUsageFlags() & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) != 0;\n  const bool isDepthStencilAttachment =\n      (image.getVkImageUsageFlags() & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) != 0;\n\n  // a ternary cascade...\n  const VkImageLayout targetLayout =\n      isSampled ? VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL\n                : (isStorage ? VK_IMAGE_LAYOUT_GENERAL\n                             : (isColorAttachment\n                                    ? VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL\n                                    : (isDepthStencilAttachment\n                                           ? VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL\n                                           : VK_IMAGE_LAYOUT_UNDEFINED)));\n\n  IGL_DEBUG_ASSERT(targetLayout != VK_IMAGE_LAYOUT_UNDEFINED, \"Missing usage flags\");\n\n  const VkAccessFlags dstAccessMask =\n      isSampled\n          ? VK_ACCESS_SHADER_READ_BIT\n          : (isStorage ? VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT\n                       : (isColorAttachment ? VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT\n                                            : (isDepthStencilAttachment\n                                                   ? VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT\n                                                   : 0)));\n\n  // Priority ordering mirrors the targetLayout/dstAccessMask cascades above: when multiple usage\n  // bits are set (e.g. SAMPLED | STORAGE), isSampled wins and the layout becomes\n  // SHADER_READ_ONLY_OPTIMAL. The image will require a subsequent transition before use as an\n  // attachment or storage, so covering only the shader stages is correct for the post-upload case.\n  const VkPipelineStageFlags dstStageMask =\n      isSampled\n          ? VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |\n                VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT\n          : (isStorage\n                 ? VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT\n                 : (isColorAttachment\n                        ? VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT\n                        : (isDepthStencilAttachment ? VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |\n                                                          VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT\n                                                    : VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)));\n\n  // 3. Transition TRANSFER_DST_OPTIMAL into `targetLayout`\n  ivkImageMemoryBarrier(&ctx_.vf_,\n                        wrapper.cmdBuf,\n                        image.getVkImage(),\n                        VK_ACCESS_TRANSFER_WRITE_BIT,\n                        dstAccessMask,\n                        VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,\n                        targetLayout,\n                        VK_PIPELINE_STAGE_TRANSFER_BIT,\n                        dstStageMask,\n                        subresourceRange);\n\n  image.imageLayout_ = targetLayout;\n\n  ivkCmdEndDebugUtilsLabel(&ctx_.vf_, wrapper.cmdBuf);\n\n  // Store the allocated block with the SubmitHandle at the end of the deque\n  memoryChunk.handle = immediate->submit(wrapper);\n  regions_.push_back(memoryChunk);\n}\n\nvoid VulkanStagingDevice::getImageData2D(VkImage srcImage,\n                                         const uint32_t level,\n                                         const uint32_t layer,\n                                         const VkRect2D& imageRegion,\n                                         TextureFormatProperties properties,\n                                         VkFormat /*format*/,\n                                         VkImageLayout layout,\n                                         VkImageAspectFlags aspectFlags,\n                                         void* data,\n                                         uint32_t bytesPerRow,\n                                         bool flipImageVertical) {\n  IGL_PROFILER_FUNCTION();\n  IGL_DEBUG_ASSERT(layout != VK_IMAGE_LAYOUT_UNDEFINED);\n\n  const bool mustRepack = bytesPerRow != 0 && bytesPerRow % properties.bytesPerBlock != 0;\n\n  const auto range =\n      TextureRangeDesc::new2D(0, 0, imageRegion.extent.width, imageRegion.extent.height);\n  const uint32_t storageSize = static_cast<uint32_t>(\n      properties.getBytesPerRange(range.atMipLevel(0), mustRepack ? 0 : bytesPerRow));\n\n  // We don't support uploading image data in small chunks. If the total upload size exceeds the\n  // the maximum allowed staging buffer size, we can't upload it\n  IGL_DEBUG_ASSERT(storageSize <= maxStagingBufferSize_,\n                   \"Image size exceeds maximum size of staging buffer\");\n\n#if IGL_VULKAN_DEBUG_STAGING_DEVICE\n  IGL_LOG_INFO(\"Image download requested for data with %u bytes\\n\", storageSize);\n#endif\n\n  // get next staging buffer free offset\n  const MemoryRegion memoryChunk = nextFreeBlock(storageSize, true);\n\n  IGL_DEBUG_ASSERT(memoryChunk.size >= storageSize);\n  const auto& wrapper1 = immediate->acquire();\n\n  // 1. Transition to VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL\n  ivkImageMemoryBarrier(&ctx_.vf_,\n                        wrapper1.cmdBuf,\n                        srcImage,\n                        0, // srcAccessMask\n                        VK_ACCESS_TRANSFER_READ_BIT, // dstAccessMask\n                        layout,\n                        VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n                        VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT, // wait for any previous operation\n                        VK_PIPELINE_STAGE_TRANSFER_BIT, // dstStageMask\n                        VkImageSubresourceRange{\n                            .aspectMask = aspectFlags,\n                            .baseMipLevel = level,\n                            .levelCount = 1,\n                            .baseArrayLayer = layer,\n                            .layerCount = 1,\n                        });\n\n  auto& stagingBuffer = stagingBuffers_[memoryChunk.stagingBufferIndex];\n\n  // 2.  Copy the pixel data from the image into the staging buffer\n  const VkBufferImageCopy copy = {\n      .bufferOffset = memoryChunk.offset,\n      .bufferRowLength = mustRepack ? 0\n                                    : bytesPerRow / static_cast<uint32_t>(properties.bytesPerBlock),\n      .imageSubresource =\n          VkImageSubresourceLayers{\n              .aspectMask = aspectFlags,\n              .mipLevel = level,\n              .baseArrayLayer = layer,\n              .layerCount = 1,\n          },\n      .imageOffset = {imageRegion.offset.x, imageRegion.offset.y, 0},\n      .imageExtent = {imageRegion.extent.width, imageRegion.extent.height, 1u},\n  };\n  ctx_.vf_.vkCmdCopyImageToBuffer(wrapper1.cmdBuf,\n                                  srcImage,\n                                  VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n                                  stagingBuffer->getVkBuffer(),\n                                  1,\n                                  &copy);\n\n  // Wait for command to finish\n  immediate->wait(immediate->submit(wrapper1), ctx_.config_.fenceTimeoutNanoseconds);\n\n  // 3. Copy data from staging buffer into data\n  if (!IGL_DEBUG_VERIFY(stagingBuffer->getMappedPtr())) {\n    return;\n  }\n\n  const uint8_t* src = stagingBuffer->getMappedPtr() + memoryChunk.offset;\n  uint8_t* dst = static_cast<uint8_t*>(data);\n\n  // Vulkan only handles cases where row lengths are multiples of texel block size.\n  // Must repack the data if the output data does not conform to this.\n  if (mustRepack) {\n    // Must repack the data.\n    ITexture::repackData(properties, range, src, 0, dst, bytesPerRow, flipImageVertical);\n  } else {\n    if (flipImageVertical) {\n      ITexture::repackData(properties, range, src, bytesPerRow, dst, bytesPerRow, true);\n    } else {\n      checked_memcpy(dst, storageSize, src, storageSize);\n    }\n  }\n\n  // 4. Transition back to the initial image layout\n  const auto& wrapper2 = immediate->acquire();\n\n  ivkImageMemoryBarrier(&ctx_.vf_,\n                        wrapper2.cmdBuf,\n                        srcImage,\n                        VK_ACCESS_TRANSFER_READ_BIT, // srcAccessMask\n                        0, // dstAccessMask\n                        VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,\n                        layout,\n                        VK_PIPELINE_STAGE_TRANSFER_BIT, // srcStageMask\n                        VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // dstStageMask\n                        VkImageSubresourceRange{\n                            .aspectMask = aspectFlags,\n                            .baseMipLevel = level,\n                            .levelCount = 1,\n                            .baseArrayLayer = layer,\n                            .layerCount = 1,\n                        });\n\n  // the data should be available as we get out of this function\n  immediate->wait(immediate->submit(wrapper2), ctx_.config_.fenceTimeoutNanoseconds);\n\n  regions_.push_back(memoryChunk);\n  freeStagingBufferSize_ += memoryChunk.size;\n}\n\nVkDeviceSize VulkanStagingDevice::getAlignedSize(VkDeviceSize size) const {\n  constexpr VkDeviceSize kStagingBufferAlignment = 16; // updated to support BC7 compressed image\n  return (size + kStagingBufferAlignment - 1) & ~(kStagingBufferAlignment - 1);\n}\n\nvoid VulkanStagingDevice::waitAndReset() {\n  IGL_PROFILER_FUNCTION();\n\n  for (const auto region : regions_) {\n    immediate->wait(region.handle, ctx_.config_.fenceTimeoutNanoseconds);\n  }\n\n  regions_.clear();\n  stagingBuffers_.clear();\n  freeStagingBufferSize_ = 0;\n}\n\nbool VulkanStagingDevice::shouldAllocateStagingBuffer(VkDeviceSize sizeNeeded,\n                                                      bool contiguous) const noexcept {\n  if (regions_.empty()) {\n    return true;\n  }\n\n  // if contiguous memory is not requested\n  if (!contiguous) {\n    // return true if there is no free space\n    return freeStagingBufferSize_ == 0;\n  }\n\n  // if contiguous memory is requested and we have enough free space\n  if (sizeNeeded <= freeStagingBufferSize_) {\n    // loop over empty regions to find a block that is large enough\n    auto regionItr = regions_.begin();\n    while (regionItr != regions_.end()) {\n      if (regionItr->size >= sizeNeeded && regionItr->handle.empty()) {\n        return false;\n      }\n      regionItr++;\n    }\n  }\n\n  // return true if no single block can hold the requested size\n  return true;\n}\n\nVkDeviceSize VulkanStagingDevice::nextSize(VkDeviceSize requestedSize) const {\n  return std::min(std::max(getAlignedSize(requestedSize), kMinStagingBufferSize),\n                  maxStagingBufferSize_);\n}\n\nvoid VulkanStagingDevice::allocateStagingBuffer(VkDeviceSize minimumSize) {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_DEBUG_ASSERT(minimumSize <= maxStagingBufferSize_);\n\n#if IGL_VULKAN_DEBUG_STAGING_DEVICE\n  IGL_LOG_INFO(\"Allocating a new staging buffer of size %u bytes\\n\", minimumSize);\n#endif\n\n  const auto stagingBufferSize = minimumSize;\n\n  // Increment the id used for naming the staging buffer\n  ++stagingBufferCounter_;\n\n  // Create a new staging buffer with the new size\n  stagingBuffers_.emplace_back(std::make_unique<VulkanBuffer>(\n      ctx_,\n      ctx_.getVkDevice(),\n      stagingBufferSize,\n      VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT,\n      VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT,\n      IGL_FORMAT(\"Buffer: staging buffer #{} with {}B\", stagingBufferCounter_, stagingBufferSize)\n          .c_str()));\n  IGL_DEBUG_ASSERT(stagingBuffers_.back().get());\n\n  // Add region that represents the entire buffer\n  regions_.push_front({\n      .offset = 0,\n      .size = stagingBufferSize,\n      .alignedSize = stagingBufferSize,\n      .handle = VulkanImmediateCommands::SubmitHandle(),\n      .stagingBufferIndex = static_cast<uint32_t>(stagingBuffers_.size()) - 1,\n  });\n\n  freeStagingBufferSize_ += stagingBufferSize;\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanStagingDevice.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <deque>\n#include <memory>\n#include <vector>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanHelpers.h>\n#include <igl/vulkan/VulkanImmediateCommands.h>\n\nnamespace igl::vulkan {\n\nclass VulkanBuffer;\nclass VulkanContext;\nclass VulkanImage;\n\n/** @brief Manages data transfers between the CPU and the GPU.\n * This class automatically allocates and uses a staging buffer when transferring data between the\n * CPU and device-local resources. Transfers between the CPU and host-visible resources are copied\n * directly to the device, without the intermediary copy to the staging buffer. The staging buffer\n * is lazily allocated and grows as needed when the uploaded data cannot be transferred in small\n * chunks and is larger than the current staging buffer's size. The maximum size of the buffer is\n * determined at runtime and is the minimum between VkPhysicalDeviceLimits::VkPhysicalDeviceLimits\n * and 256 MB. Some architectures limit the size of staging buffers to 256MB (buffers that are both\n * host and device visible).\n */\nclass VulkanStagingDevice final {\n public:\n  explicit VulkanStagingDevice(VulkanContext& ctx);\n  ~VulkanStagingDevice() = default;\n\n  VulkanStagingDevice(const VulkanStagingDevice&) = delete;\n  VulkanStagingDevice& operator=(const VulkanStagingDevice&) = delete;\n\n  std::unique_ptr<VulkanImmediateCommands> immediate;\n\n  /** @brief Uploads the data at location `data` with the provided size (in bytes) to the\n   * VulkanBuffer object on the device at offset `dstOffset`. The upload operation is asynchronous\n   * and the data may or may not be available to the GPU when the function returns\n   */\n  void bufferSubData(VulkanBuffer& buffer, size_t dstOffset, size_t size, const void* data);\n\n  /** @brief Downloads the data with the provided size (in bytes) from the VulkanBuffer object on\n   * the device, and at the offset provided, to the location referenced by the pointer `data`. The\n   * function is synchronous and the data donwloaded from the device is expected to be available in\n   * the location pointed by `data` upon return\n   */\n  void getBufferSubData(const VulkanBuffer& buffer, size_t srcOffset, size_t size, void* data);\n\n  /// @brief Uploads the texture data pointed by `data` to the VulkanImage object on the device. The\n  /// data may span the entire texture or just part of it. The upload operation is asynchronous and\n  /// the data may or may not be available to the GPU when the function returns\n  void imageData(const VulkanImage& image,\n                 TextureType type,\n                 const TextureRangeDesc& range,\n                 const TextureFormatProperties& properties,\n                 uint32_t bytesPerRow,\n                 VkImageAspectFlags aspectFlags,\n                 const void* data);\n\n  /** @brief Downloads the texture data from the VulkanImage object on the device to the location\n   * pointed by `data`. The data requested may span the entire texture or just part of it. The\n   * download operation is synchronous and the data is expected to be available at location `data`\n   * upon return\n   */\n  void getImageData2D(VkImage srcImage,\n                      uint32_t level,\n                      uint32_t layer,\n                      const VkRect2D& imageRegion,\n                      TextureFormatProperties properties,\n                      VkFormat format,\n                      VkImageLayout layout,\n                      VkImageAspectFlags aspectFlags,\n                      void* data,\n                      uint32_t bytesPerRow,\n                      bool flipImageVertical);\n\n  /// @brief Returns the size of staging buffer available for use\n  [[nodiscard]] VkDeviceSize getFreeStagingBufferSize() const {\n    return freeStagingBufferSize_;\n  }\n\n  /// @brief Returns the maximum possible size of the staging buffer in bytes\n  [[nodiscard]] VkDeviceSize getMaxStagingBufferSize() const {\n    return maxStagingBufferSize_;\n  }\n\n  /// @brief Function to merge regions of the staging buffer that are contiguous, and deallocate\n  /// unused staging buffers.\n  void mergeRegionsAndFreeBuffers();\n\n private:\n  struct MemoryRegion {\n    VkDeviceSize offset = 0u;\n    VkDeviceSize size = 0u;\n    VkDeviceSize alignedSize = 0u;\n    VulkanImmediateCommands::SubmitHandle handle;\n    uint32_t stagingBufferIndex = 0u;\n  };\n\n  /**\n   * @brief Searches for an available block in the staging buffer that is as large as the size\n   * requested. If the only contiguous block of memory available is smaller than the requested size,\n   * the function returns the amount of memory it was able to find.\n   *\n   * @param contiguous\n   * if true, the function will return a region big enough to accommodate full requested size.\n   * if false, the function may return a region smaller than the requested size.\n   * @return The offset of the free memory block on the staging buffer and the size of the block\n   * found.\n   */\n  [[nodiscard]] MemoryRegion nextFreeBlock(VkDeviceSize size, bool contiguous);\n\n  [[nodiscard]] VkDeviceSize getAlignedSize(VkDeviceSize size) const;\n\n  /// @brief Waits for all memory blocks to become available and resets the staging device's\n  /// internal state\n  void waitAndReset();\n\n  /**\n   * @brief Returns true if the staging buffer cannot store the size requested\n   * @param sizeNeeded the size of the memory block requested\n   * @param contiguous if true, the function returns true if a contiguous block of memory cannot\n   * accommodate sizeNeeded\n   **/\n  [[nodiscard]] bool shouldAllocateStagingBuffer(VkDeviceSize sizeNeeded,\n                                                 bool contiguous) const noexcept;\n\n  /// @brief Returns the next size to allocate for the staging buffer given the requested size\n  [[nodiscard]] VkDeviceSize nextSize(VkDeviceSize requestedSize) const;\n\n  /// @brief Allocates a new staging buffer to a size that is at least as large as the requested\n  /// size\n  void allocateStagingBuffer(VkDeviceSize minimumSize);\n\n private:\n  VulkanContext& ctx_;\n  std::vector<std::unique_ptr<VulkanBuffer>> stagingBuffers_;\n\n  /// @brief available free memory in staging buffer\n  VkDeviceSize freeStagingBufferSize_ = 0;\n  /// @brief Maximum staging buffer size, limited by some architectures\n  VkDeviceSize maxStagingBufferSize_ = 0;\n  /// @brief Used to track the current staging buffer's id. Updated every time the staging buffer\n  /// grows, it is used as the debug name for the staging buffer for easily tracking it during\n  /// debugging\n  uint32_t stagingBufferCounter_ = 0;\n\n  /**\n   * @brief Stores the used and unused blocks of memory in the staging buffer. There is no\n   * distinction between used and unused blocks in the deque, as we always `wait` on each block\n   * before using them. Older blocks are stored at the front of the deque, while used/busy\n   * ones are stored at the end. Older blocks have a higher chance of being unused (not waiting for\n   * the associated command buffer to finish)\n   */\n  std::deque<MemoryRegion> regions_;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanSwapchain.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanSwapchain.h\"\n\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanSemaphore.h>\n#include <igl/vulkan/VulkanTexture.h>\n\nnamespace {\n\nstruct SwapchainCapabilities {\n  VkSurfaceCapabilitiesKHR caps = {};\n  std::vector<VkSurfaceFormatKHR> formats;\n  std::vector<VkPresentModeKHR> modes;\n};\n\nuint32_t chooseSwapImageCount(const VkSurfaceCapabilitiesKHR& caps) {\n  const uint32_t desired = caps.minImageCount + 1;\n  const bool exceeded = caps.maxImageCount > 0 && desired > caps.maxImageCount;\n  return exceeded ? caps.maxImageCount : desired;\n}\n\nbool isNativeSwapChainBGR(const std::vector<VkSurfaceFormatKHR>& formats) {\n  for (const auto& format : formats) {\n    // The preferred format should be the one which is closer to the beginning of the formats\n    // container. If BGR is encountered earlier, it should be picked as the format of choice. If RGB\n    // happens to be earlier, take it.\n    if (igl::vulkan::isTextureFormatRGB(format.format)) {\n      return false;\n    }\n    if (igl::vulkan::isTextureFormatBGR(format.format)) {\n      return true;\n    }\n  }\n  return false;\n}\n\nVkSurfaceFormatKHR chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& formats,\n                                           igl::TextureFormat textureFormat,\n                                           igl::ColorSpace colorSpace) {\n  IGL_DEBUG_ASSERT(!formats.empty());\n\n  const bool isNativeSwapchainBGR = isNativeSwapChainBGR(formats);\n  auto vulkanTextureFormat = igl::vulkan::textureFormatToVkFormat(textureFormat);\n  const bool isRequestedFormatBGR = igl::vulkan::isTextureFormatBGR(vulkanTextureFormat);\n  if (isNativeSwapchainBGR != isRequestedFormatBGR) {\n    vulkanTextureFormat = igl::vulkan::invertRedAndBlue(vulkanTextureFormat);\n  }\n  const auto preferred =\n      VkSurfaceFormatKHR{vulkanTextureFormat, igl::vulkan::colorSpaceToVkColorSpace(colorSpace)};\n\n  for (const auto& curFormat : formats) {\n    if (curFormat.format == preferred.format && curFormat.colorSpace == preferred.colorSpace) {\n      return curFormat;\n    }\n  }\n\n  // if we can't find a matching format and color space, fallback on matching only format\n  for (const auto& curFormat : formats) {\n    if (curFormat.format == preferred.format) {\n      return curFormat;\n    }\n  }\n\n  IGL_LOG_INFO(\n      \"The system could not find a native swap chain format that matched our designed swapchain \"\n      \"format. Defaulting to first supported format.\\n\");\n  // fall back to first supported device color format. On Quest 2 it'll be VK_FORMAT_R8G8B8A8_UNORM\n  return formats[0];\n}\n\nVkPresentModeKHR chooseSwapPresentMode(const std::vector<VkPresentModeKHR>& modes) {\n  if (std::find(modes.cbegin(), modes.cend(), VK_PRESENT_MODE_IMMEDIATE_KHR) != modes.cend()) {\n    return VK_PRESENT_MODE_IMMEDIATE_KHR;\n  }\n  // On Android (Quest 2), FIFO prevents VK_ERROR_OUT_OF_DATE_KHR\n#if !IGL_PLATFORM_ANDROID\n  if (std::find(modes.cbegin(), modes.cend(), VK_PRESENT_MODE_MAILBOX_KHR) != modes.cend()) {\n    return VK_PRESENT_MODE_MAILBOX_KHR;\n  }\n#endif // !IGL_PLATFORM_ANDROID\n  return VK_PRESENT_MODE_FIFO_KHR;\n}\n\nVkImageUsageFlags chooseUsageFlags(const VulkanFunctionTable& vf,\n                                   VkPhysicalDevice pd,\n                                   VkSurfaceKHR surface,\n                                   VkFormat format,\n                                   VkSurfaceCapabilitiesKHR& caps) {\n  VkImageUsageFlags usageFlags = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |\n                                 VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT;\n  VK_ASSERT(vf.vkGetPhysicalDeviceSurfaceCapabilitiesKHR(pd, surface, &caps));\n\n  const bool isStorageSupported = (caps.supportedUsageFlags & VK_IMAGE_USAGE_STORAGE_BIT) > 0;\n\n  VkFormatProperties props = {};\n  vf.vkGetPhysicalDeviceFormatProperties(pd, format, &props);\n\n  const bool isTilingOptimalSupported =\n      (props.optimalTilingFeatures & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) > 0;\n\n  if (isStorageSupported && isTilingOptimalSupported) {\n    usageFlags |= VK_IMAGE_USAGE_STORAGE_BIT;\n  }\n\n  return usageFlags;\n}\n\n} // namespace\n\nnamespace igl::vulkan {\n\nVulkanSwapchain::VulkanSwapchain(VulkanContext& ctx, uint32_t width, uint32_t height) :\n  ctx_(ctx), graphicsQueue_(ctx.deviceQueues_.graphicsQueue), width_(width), height_(height) {\n  surfaceFormat_ = chooseSwapSurfaceFormat(ctx.deviceSurfaceFormats_,\n                                           ctx.config_.requestedSwapChainTextureFormat,\n                                           ctx.config_.swapChainColorSpace);\n  IGL_LOG_DEBUG(\n      \"Swapchain format: %s; colorSpace: %s\\n\",\n      TextureFormatProperties::fromTextureFormat(vkFormatToTextureFormat(surfaceFormat_.format))\n          .name,\n      colorSpaceToString(vkColorSpaceToColorSpace(surfaceFormat_.colorSpace)));\n\n  IGL_DEBUG_ASSERT(\n      ctx.vkSurface_ != VK_NULL_HANDLE,\n      \"You are trying to create a swapchain but your OS surface is empty. Did you want to \"\n      \"create an offscreen rendering context? If so, set 'width' and 'height' to 0 when you \"\n      \"create your igl::IDevice\");\n\n  VkBool32 queueFamilySupportsPresentation = VK_FALSE;\n  VK_ASSERT(\n      ctx_.vf_.vkGetPhysicalDeviceSurfaceSupportKHR(ctx.getVkPhysicalDevice(),\n                                                    ctx.deviceQueues_.graphicsQueueFamilyIndex,\n                                                    ctx.vkSurface_,\n                                                    &queueFamilySupportsPresentation));\n  IGL_DEBUG_ASSERT(queueFamilySupportsPresentation == VK_TRUE,\n                   \"The queue family used with the swapchain does not support presentation\");\n\n  const VkImageUsageFlags usageFlags = chooseUsageFlags(ctx.vf_,\n                                                        ctx.getVkPhysicalDevice(),\n                                                        ctx.vkSurface_,\n                                                        surfaceFormat_.format,\n                                                        ctx.deviceSurfaceCaps_);\n\n  {\n    const uint32_t requestedSwapchainImageCount = chooseSwapImageCount(ctx.deviceSurfaceCaps_);\n\n    VK_ASSERT(ivkCreateSwapchain(&ctx_.vf_,\n                                 ctx.getVkDevice(),\n                                 ctx.vkSurface_,\n                                 requestedSwapchainImageCount,\n                                 surfaceFormat_,\n                                 chooseSwapPresentMode(ctx.devicePresentModes_),\n                                 &ctx.deviceSurfaceCaps_,\n                                 usageFlags,\n                                 ctx.deviceQueues_.graphicsQueueFamilyIndex,\n                                 width,\n                                 height,\n                                 &swapchain_));\n  }\n  VK_ASSERT(ctx.vf_.vkGetSwapchainImagesKHR(\n      ctx.getVkDevice(), swapchain_, &numSwapchainImages_, nullptr));\n  std::vector<VkImage> swapchainImages(numSwapchainImages_);\n  swapchainImages.resize(numSwapchainImages_);\n  VK_ASSERT(ctx.vf_.vkGetSwapchainImagesKHR(\n      ctx.getVkDevice(), swapchain_, &numSwapchainImages_, swapchainImages.data()));\n\n  IGL_DEBUG_ASSERT(numSwapchainImages_ > 0);\n\n  // Prevent underflow when doing (frameNumber_ - numSwapchainImages_).\n  // Every resource submitted in the frame (frameNumber_ - numSwapchainImages_) or earlier is\n  // guaranteed to be processed by the GPU in the frame (frameNumber_).\n  frameNumber_ = numSwapchainImages_;\n\n  // create images, image views and framebuffers\n  swapchainTextures_ = std::make_unique<std::shared_ptr<VulkanTexture>[]>(numSwapchainImages_);\n  for (uint32_t i = 0; i < numSwapchainImages_; i++) {\n    auto image =\n        VulkanImage(ctx_, swapchainImages[i], IGL_FORMAT(\"Image: swapchain #{}\", i).c_str());\n    image.extent_ = {.width = width, .height = height, .depth = 1};\n    // set usage flags for retrieved images\n    image.usageFlags_ = usageFlags;\n    image.imageFormat_ = surfaceFormat_.format;\n\n    auto imageView = image.createImageView(VK_IMAGE_VIEW_TYPE_2D,\n                                           surfaceFormat_.format,\n                                           VK_IMAGE_ASPECT_COLOR_BIT,\n                                           0,\n                                           VK_REMAINING_MIP_LEVELS,\n                                           0,\n                                           1,\n                                           IGL_FORMAT(\"Image View: swapchain #{}\", i).c_str());\n    swapchainTextures_[i] = std::make_shared<VulkanTexture>(std::move(image), std::move(imageView));\n  }\n\n  // create semaphores and fences for swapchain images\n  for (uint32_t i = 0; i < numSwapchainImages_; ++i) {\n    timelineWaitValues.emplace_back(0);\n    acquireSemaphores.emplace_back(ctx_.vf_,\n                                   ctx_.getVkDevice(),\n                                   false,\n                                   IGL_FORMAT(\"Semaphore: swapchain-acquire #{}\", i).c_str());\n    if (!ctx_.timelineSemaphore_) {\n      // this can be removed once we switch to timeline semaphores\n      acquireFences.emplace_back(ctx_.vf_,\n                                 ctx_.getVkDevice(),\n                                 VK_FENCE_CREATE_SIGNALED_BIT,\n                                 false,\n                                 IGL_FORMAT(\"Fence: swapchain-acquire #{}\", i).c_str());\n    }\n  }\n}\n\nVkImage VulkanSwapchain::getDepthVkImage() const {\n  if (!depthTexture_) {\n    lazyAllocateDepthBuffer();\n  }\n  return depthTexture_->image_.getVkImage();\n}\n\nVkImageView VulkanSwapchain::getDepthVkImageView() const {\n  if (!depthTexture_) {\n    lazyAllocateDepthBuffer();\n  }\n  return depthTexture_->imageView_.getVkImageView();\n}\n\nvoid VulkanSwapchain::lazyAllocateDepthBuffer() const {\n  IGL_DEBUG_ASSERT(!depthTexture_);\n\n  const VkFormat depthFormat =\n#if IGL_PLATFORM_APPLE\n      VK_FORMAT_D32_SFLOAT;\n#else\n      VK_FORMAT_D24_UNORM_S8_UINT;\n#endif\n  const VkImageAspectFlags aspectMask =\n#if IGL_PLATFORM_APPLE\n      VK_IMAGE_ASPECT_DEPTH_BIT;\n#else\n      VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT;\n#endif\n\n  auto depthImage = VulkanImage(ctx_,\n                                VkExtent3D{width_, height_, 1},\n                                VK_IMAGE_TYPE_2D,\n                                depthFormat,\n                                1,\n                                1,\n                                VK_IMAGE_TILING_OPTIMAL,\n                                VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT,\n                                VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT,\n                                0,\n                                VK_SAMPLE_COUNT_1_BIT,\n                                \"Image: swapchain depth\");\n  auto depthImageView = depthImage.createImageView(\n      VK_IMAGE_VIEW_TYPE_2D, depthFormat, aspectMask, 0, 1, 0, 1, \"Image View: swapchain depth\");\n\n  depthTexture_ = std::make_shared<VulkanTexture>(std::move(depthImage), std::move(depthImageView));\n}\n\nVkSemaphore VulkanSwapchain::getSemaphore() const noexcept {\n  return acquireSemaphores[currentSemaphoreIndex_].vkSemaphore_;\n}\n\nVulkanSwapchain::~VulkanSwapchain() {\n  for (auto& fence : acquireFences) {\n    // this can be removed once we switch to timeline semaphores\n    fence.wait();\n  }\n  ctx_.vf_.vkDestroySwapchainKHR(ctx_.getVkDevice(), swapchain_, nullptr);\n}\n\nResult VulkanSwapchain::acquireNextImage() {\n  IGL_PROFILER_FUNCTION();\n\n  VkResult acquireResult = VK_SUCCESS;\n\n  if (ctx_.timelineSemaphore_) {\n    const VkSemaphoreWaitInfo waitInfo = {\n        .sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,\n        .semaphoreCount = 1,\n        .pSemaphores = &ctx_.timelineSemaphore_->vkSemaphore_,\n        .pValues = &timelineWaitValues[currentImageIndex_],\n    };\n    VK_ASSERT(ctx_.vf_.vkWaitSemaphoresKHR(ctx_.getVkDevice(), &waitInfo, UINT64_MAX));\n\n    VkSemaphore acquireSemaphore = acquireSemaphores[currentImageIndex_].getVkSemaphore();\n    // when timeout is set to UINT64_MAX, we wait until the next image has been acquired\n    acquireResult = ctx_.vf_.vkAcquireNextImageKHR(ctx_.getVkDevice(),\n                                                   swapchain_,\n                                                   UINT64_MAX,\n                                                   acquireSemaphore,\n                                                   VK_NULL_HANDLE,\n                                                   &currentImageIndex_);\n\n    currentSemaphoreIndex_ =\n        currentImageIndex_; // remove `currentSemaphoreIndex_` once we switch to timeline semaphores\n                            // (use `currentImageIndex_` instead)\n\n    getNextImage_ = false;\n\n    ctx_.immediate_->waitSemaphore(acquireSemaphore);\n  } else {\n    // this entire branch can be removed once we switch to timeline semaphores\n\n    // Check whether the semaphore can be used for acquiring by waiting on the acquireFence_\n    //   If semaphore is not VK_NULL_HANDLE it must not have any uncompleted signal or wait\n    //   operations pending\n    //   (https://vulkan.lunarg.com/doc/view/1.3.275.0/windows/1.3-extensions/vkspec.html#VUID-vkAcquireNextImageKHR-semaphore-01779)\n    acquireFences[currentImageIndex_].wait();\n    acquireFences[currentImageIndex_].reset();\n\n    currentSemaphoreIndex_ = currentImageIndex_;\n\n    // when timeout is set to UINT64_MAX, we wait until the next image has been acquired\n    acquireResult =\n        ctx_.vf_.vkAcquireNextImageKHR(ctx_.getVkDevice(),\n                                       swapchain_,\n                                       UINT64_MAX,\n                                       acquireSemaphores[currentImageIndex_].vkSemaphore_,\n                                       acquireFences[currentImageIndex_].vkFence_,\n                                       &currentImageIndex_);\n  }\n\n  if (acquireResult == VK_SUBOPTIMAL_KHR) {\n    IGL_LOG_INFO_ONCE(\n        \"vkAcquireNextImageKHR returned VK_SUBOPTIMAL_KHR. The Vulkan swapchain is no longer \"\n        \"compatible with the surface\");\n  } else {\n    VK_ASSERT_RETURN(acquireResult);\n  }\n\n  return Result();\n}\n\nResult VulkanSwapchain::present(VkSemaphore waitSemaphore) {\n  IGL_PROFILER_FUNCTION();\n\n  IGL_PROFILER_ZONE(\"vkQueuePresentKHR()\", IGL_PROFILER_COLOR_PRESENT);\n  const VkPresentInfoKHR pi = {\n      .sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,\n      .waitSemaphoreCount = 1u,\n      .pWaitSemaphores = &waitSemaphore,\n      .swapchainCount = 1u,\n      .pSwapchains = &swapchain_,\n      .pImageIndices = &currentImageIndex_,\n  };\n  const VkResult presentResult = ctx_.vf_.vkQueuePresentKHR(graphicsQueue_, &pi);\n\n  if (presentResult == VK_SUBOPTIMAL_KHR) {\n    IGL_LOG_INFO_ONCE(\n        \"vkQueuePresentKHR() returned VK_SUBOPTIMAL_KHR. The Vulkan swapchain is no longer \"\n        \"compatible with the surface\");\n  } else {\n    VK_ASSERT_RETURN(presentResult);\n  }\n  IGL_PROFILER_ZONE_END();\n\n  // Ready to call acquireNextImage() on the next getCurrentVulkanTexture();\n  getNextImage_ = true;\n  frameNumber_++;\n\n  IGL_PROFILER_FRAME(nullptr);\n\n  return Result();\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanSwapchain.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <vector>\n#include <igl/vulkan/Common.h>\n#include <igl/vulkan/VulkanFence.h>\n#include <igl/vulkan/VulkanFramebuffer.h>\n#include <igl/vulkan/VulkanHelpers.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanImageView.h>\n#include <igl/vulkan/VulkanTexture.h>\n\nnamespace igl::vulkan {\n\nclass VulkanContext;\nclass VulkanSemaphore;\n\nclass VulkanSwapchain final {\n public:\n  VulkanSwapchain(VulkanContext& ctx, uint32_t width, uint32_t height);\n  ~VulkanSwapchain();\n  VulkanSwapchain(const VulkanSwapchain&) = delete;\n  VulkanSwapchain& operator=(const VulkanSwapchain&) = delete;\n  VulkanSwapchain(VulkanSwapchain&&) = delete;\n  VulkanSwapchain& operator=(VulkanSwapchain&&) = delete;\n\n  Result acquireNextImage();\n  Result present(VkSemaphore waitSemaphore);\n  VkImage getCurrentVkImage() const {\n    if (IGL_DEBUG_VERIFY(currentImageIndex_ < numSwapchainImages_)) {\n      return swapchainTextures_[currentImageIndex_]->image_.getVkImage();\n    }\n    return VK_NULL_HANDLE;\n  }\n  VkImageView getCurrentVkImageView() const {\n    if (IGL_DEBUG_VERIFY(currentImageIndex_ < numSwapchainImages_)) {\n      return swapchainTextures_[currentImageIndex_]->imageView_.getVkImageView();\n    }\n    return VK_NULL_HANDLE;\n  }\n\n  std::shared_ptr<VulkanTexture> getCurrentDepthTexture() {\n    if (!depthTexture_) {\n      lazyAllocateDepthBuffer();\n    }\n\n    return depthTexture_;\n  }\n\n  std::shared_ptr<VulkanTexture> getCurrentVulkanTexture() {\n    if (getNextImage_) {\n      acquireNextImage();\n      getNextImage_ = false;\n    }\n\n    if (IGL_DEBUG_VERIFY(currentImageIndex_ < numSwapchainImages_)) {\n      return swapchainTextures_[currentImageIndex_];\n    }\n\n    return nullptr;\n  }\n\n  VkImage getDepthVkImage() const;\n  VkImageView getDepthVkImageView() const;\n  uint32_t getWidth() const {\n    return width_;\n  }\n  uint32_t getHeight() const {\n    return height_;\n  }\n  VkExtent2D getExtent() const {\n    return VkExtent2D{width_, height_};\n  }\n\n  VkFormat getFormatColor() const {\n    return surfaceFormat_.format;\n  }\n\n  uint32_t getNumSwapchainImages() const {\n    return numSwapchainImages_;\n  }\n\n  uint32_t getCurrentImageIndex() const {\n    return currentImageIndex_;\n  }\n\n  [[nodiscard]] VkSemaphore getSemaphore() const noexcept;\n\n  uint64_t getFrameNumber() const {\n    return frameNumber_;\n  }\n\n private:\n  void lazyAllocateDepthBuffer() const;\n\n public:\n  std::vector<VulkanSemaphore> acquireSemaphores;\n  // Used to check whether the acquire semaphore can be used for acquiring\n  // Based on\n  // https://github.com/corporateshark/lightweightvk/blob/36597fae5c79ad6b310e4ed8c00e8acfa38b5aca/lvk/vulkan/VulkanClasses.h#L146\n  std::vector<VulkanFence> acquireFences; // this can be removed once we switch to timeline\n                                          // semaphores\n  std::vector<uint64_t> timelineWaitValues;\n\n private:\n  const VulkanContext& ctx_;\n  VkQueue graphicsQueue_;\n  uint32_t width_ = 0;\n  uint32_t height_ = 0;\n  uint32_t numSwapchainImages_ = 0;\n  uint32_t currentImageIndex_ = 0;\n  // Because the next acquired image's index is obtained _after_ requesting it (along with\n  // semaphores and fences), the index of the semaphore and fence used to synchronize the current\n  // swapchain image is different than the `currentImageIndex_`\n  uint32_t currentSemaphoreIndex_ = 0;\n  uint64_t frameNumber_ = 0; // increasing continuously without bound\n  bool getNextImage_ = true;\n  VkSwapchainKHR swapchain_{};\n  std::unique_ptr<std::shared_ptr<VulkanTexture>[]> swapchainTextures_;\n  mutable std::shared_ptr<VulkanTexture> depthTexture_;\n  VkSurfaceFormatKHR surfaceFormat_{};\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanTexture.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include \"VulkanTexture.h\"\n\nnamespace igl::vulkan {\n\nVulkanTexture::VulkanTexture(VulkanImage&& image, VulkanImageView&& imageView) :\n  image_(std::move(image)), imageView_(std::move(imageView)) {\n  IGL_PROFILER_FUNCTION_COLOR(IGL_PROFILER_COLOR_CREATE);\n\n  IGL_DEBUG_ASSERT(image_.valid());\n  IGL_DEBUG_ASSERT(imageView_.valid());\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanTexture.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanImageView.h>\n\nnamespace igl::vulkan {\n\nclass VulkanTexture final {\n public:\n  VulkanTexture(VulkanImage&& image, VulkanImageView&& imageView);\n  ~VulkanTexture() = default;\n\n  VulkanTexture(const VulkanTexture&) = delete;\n  VulkanTexture& operator=(const VulkanTexture&) = delete;\n  VulkanTexture(VulkanTexture&&) noexcept = default;\n  VulkanTexture& operator=(VulkanTexture&&) noexcept = default;\n\n public:\n  VulkanImage image_;\n  VulkanImageView imageView_;\n  // an index into VulkanContext::textures_\n  uint32_t textureId_ = 0;\n};\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/VulkanVma.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n/* The following defines tell VMA to load Vulkan functions dynamically\n * For this to work, we need to provide pointers to vkGetInstanceProcAddr and vkGetDeviceProcAddr to\n * VMA using the functions VmaVulkanFunctions::vkGetInstanceProcAddr and\n * VmaVulkanFunctions::vkGetDeviceProcAddr\n */\n#undef VMA_STATIC_VULKAN_FUNCTIONS\n#undef VMA_DYNAMIC_VULKAN_FUNCTIONS\n#define VMA_STATIC_VULKAN_FUNCTIONS 0\n#define VMA_DYNAMIC_VULKAN_FUNCTIONS 1\n\n/* Do not load Vulkan function prototypes, as we are loading the functions dynamically using Volk */\n#if !defined(VK_NO_PROTOTYPES)\n#define VK_NO_PROTOTYPES\n#endif // !defined(VK_NO_PROTOTYPES)\n#if defined(IGL_CMAKE_BUILD)\n\n/* Configuration defines for vk_mem_alloc.h */\n#define VMA_VULKAN_VERSION 1003000\n\n#include <vk_mem_alloc.h>\n#else\n#include <vk_mem_alloc_instantiated.h>\n#endif // IGL_CMAKE_BUILD\n"
  },
  {
    "path": "src/igl/vulkan/android/NativeHWBuffer.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n// @fb-only\n\n#include \"NativeHWBuffer.h\"\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n#include <android/hardware_buffer.h>\n#include <vulkan/vulkan_android.h>\n#include <igl/vulkan/Device.h>\n#include <igl/vulkan/VulkanContext.h>\n#include <igl/vulkan/VulkanImage.h>\n#include <igl/vulkan/VulkanTexture.h>\n\nnamespace igl::vulkan::android {\n\nnamespace {\nuint32_t ivkGetMemoryTypeIndex(const VkPhysicalDeviceMemoryProperties& memProps,\n                               const uint32_t typeBits,\n                               const VkMemoryPropertyFlags requiredProperties) {\n  // Search memory types to find the index with the requested properties.\n  for (uint32_t type = 0; type < memProps.memoryTypeCount; type++) {\n    if ((typeBits & (1 << type)) != 0) {\n      // Test if this memory type has the required properties.\n      const VkFlags propertyFlags = memProps.memoryTypes[type].propertyFlags;\n      if ((propertyFlags & requiredProperties) == requiredProperties) {\n        return type;\n      }\n    }\n  }\n  return 0;\n}\n} // namespace\n\nNativeHWTextureBuffer::NativeHWTextureBuffer(igl::vulkan::Device& device, TextureFormat format) :\n  Super(device, format) {}\n\nNativeHWTextureBuffer::~NativeHWTextureBuffer() {}\n\nResult NativeHWTextureBuffer::create(const TextureDesc& desc) {\n  return createHWBuffer(desc, false, false);\n}\n\nResult NativeHWTextureBuffer::createTextureInternal(AHardwareBuffer* hwBuffer) {\n  if (hwBuffer == nullptr) {\n    return Result(Result::Code::RuntimeError, \"null buffer passed to create texture\");\n  }\n  AHardwareBuffer_Desc hwbDesc;\n  AHardwareBuffer_describe(hwBuffer, &hwbDesc);\n\n  auto& ctx = device_.getVulkanContext();\n  auto device = device_.getVulkanContext().getVkDevice();\n  VkImageCreateFlags create_flags = 0;\n  if (hwbDesc.usage & AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT) {\n    create_flags |= VK_IMAGE_CREATE_PROTECTED_BIT;\n  }\n  VkImageUsageFlags usage_flags = 0;\n  if (hwbDesc.usage & AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE) {\n    usage_flags |= VK_IMAGE_USAGE_SAMPLED_BIT;\n  }\n  if (hwbDesc.usage & AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT) {\n    usage_flags |= VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;\n  }\n  if (hwbDesc.usage & AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER) {\n    usage_flags |= VK_IMAGE_USAGE_STORAGE_BIT;\n  }\n\n  VkAndroidHardwareBufferFormatPropertiesANDROID ahb_format_props = {\n      .sType = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID,\n      .pNext = nullptr,\n  };\n  VkAndroidHardwareBufferPropertiesANDROID ahb_props = {\n      .sType = VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID,\n      .pNext = &ahb_format_props,\n  };\n\n  VK_ASSERT(ctx.vf_.vkGetAndroidHardwareBufferPropertiesANDROID(device, hwBuffer, &ahb_props));\n\n  VkExternalFormatANDROID external_format = {\n      .sType = VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID,\n  };\n\n  if (ahb_format_props.format == VK_FORMAT_UNDEFINED) {\n    external_format.externalFormat = ahb_format_props.externalFormat;\n  }\n\n  VkExternalMemoryImageCreateInfo external_memory_image_info = {\n      .sType = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO,\n      .pNext = &external_format,\n      .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,\n  };\n\n  auto desc = TextureDesc::newNativeHWBufferImage(\n      igl::vulkan::vkFormatToTextureFormat(ahb_format_props.format),\n      igl::android::getIglBufferUsage(hwbDesc.usage),\n      hwbDesc.width,\n      hwbDesc.height);\n\n  VkImage vk_image;\n\n  VkImageCreateInfo vk_image_info = {.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO,\n                                     .pNext = &external_memory_image_info,\n                                     .flags = create_flags,\n                                     .imageType = VK_IMAGE_TYPE_2D,\n                                     .format = ahb_format_props.format,\n                                     .extent =\n                                         VkExtent3D{(uint32_t)desc.width, (uint32_t)desc.height, 1},\n                                     .mipLevels = 1,\n                                     .arrayLayers = 1,\n                                     .samples = VK_SAMPLE_COUNT_1_BIT,\n                                     .tiling = VK_IMAGE_TILING_OPTIMAL,\n                                     .usage = usage_flags,\n                                     .sharingMode = VK_SHARING_MODE_EXCLUSIVE,\n                                     .queueFamilyIndexCount = 0,\n                                     .pQueueFamilyIndices = nullptr,\n                                     .initialLayout = VK_IMAGE_LAYOUT_UNDEFINED};\n  // Create Vk Image.\n  VK_ASSERT(ctx.vf_.vkCreateImage(device, &vk_image_info, nullptr, &vk_image));\n\n  if (vk_image == VK_NULL_HANDLE) {\n    IGL_LOG_ERROR(\"failed to create image view format is %d and external format is %d\",\n                  vk_image_info.format,\n                  external_format.externalFormat);\n    return Result(Result::Code::RuntimeError, \"Failed to create vulkan image\");\n  }\n\n  // To import memory created outside of the current Vulkan instance from an\n  // Android hardware buffer, add a VkImportAndroidHardwareBufferInfoANDROID\n  // structure to the pNext chain of the VkMemoryAllocateInfo structure.\n  VkImportAndroidHardwareBufferInfoANDROID ahb_import_info = {\n      .sType = VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID,\n      .pNext = nullptr,\n      .buffer = hwBuffer};\n\n  // If the VkMemoryAllocateInfo pNext chain includes a\n  // VkMemoryDedicatedAllocateInfo structure, then that structure includes a\n  // handle of the sole buffer or image resource that the memory can be bound\n  // to.\n  VkMemoryDedicatedAllocateInfo dedicated_alloc_info = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,\n      .pNext = &ahb_import_info,\n      .image = vk_image,\n      .buffer = VK_NULL_HANDLE};\n\n  // Find the memory type that supports the required properties.\n  uint32_t memory_type_bits = ahb_props.memoryTypeBits;\n\n  uint32_t type_index = ivkGetMemoryTypeIndex(\n      ctx.memoryProperties, memory_type_bits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);\n\n  // An instance of the VkMemoryAllocateInfo structure defines a memory import\n  // operation.\n  VkMemoryAllocateInfo mem_alloc_info = {\n      .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,\n      .pNext = &dedicated_alloc_info,\n      // If the parameters define an import operation and the external handle type\n      // is VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,\n      // allocationSize must be the size returned by\n      // vkGetAndroidHardwareBufferPropertiesANDROID for the Android hardware\n      // buffer.\n      .allocationSize = ahb_props.allocationSize,\n      .memoryTypeIndex = type_index};\n\n  // A Vulkan device operates on data in device memory via memory objects that\n  // are represented in the API by a VkDeviceMemory handle.\n  // Allocate memory.\n  VkDeviceMemory vk_device_memory;\n  VK_ASSERT(ctx.vf_.vkAllocateMemory(device, &mem_alloc_info, nullptr, &vk_device_memory));\n\n  // Attach memory to the image object.\n  VK_ASSERT(ctx.vf_.vkBindImageMemory(device, vk_image, vk_device_memory, 0));\n\n  auto vulkanImage = VulkanImage(ctx,\n                                 vk_image,\n                                 \"Image: videoTexture\",\n                                 usage_flags,\n                                 false,\n                                 vk_image_info.extent,\n                                 vk_image_info.imageType,\n                                 vk_image_info.format,\n                                 vk_image_info.mipLevels,\n                                 vk_image_info.arrayLayers,\n                                 VK_SAMPLE_COUNT_1_BIT,\n                                 true);\n  vulkanImage.vkMemory_[0] = vk_device_memory;\n  vulkanImage.extendedFormat_ = external_format.externalFormat;\n\n  VkImageViewCreateInfo viewInfo = {\n      .sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO,\n      .image = vk_image,\n      .viewType = VK_IMAGE_VIEW_TYPE_2D,\n      .format = vk_image_info.format,\n      .components =\n          {\n              .r = VK_COMPONENT_SWIZZLE_IDENTITY,\n              .g = VK_COMPONENT_SWIZZLE_IDENTITY,\n              .b = VK_COMPONENT_SWIZZLE_IDENTITY,\n              .a = VK_COMPONENT_SWIZZLE_IDENTITY,\n          },\n      .subresourceRange = {.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,\n                           .baseMipLevel = 0,\n                           .levelCount = vk_image_info.mipLevels,\n                           .baseArrayLayer = 0,\n                           .layerCount = 1},\n  };\n\n  viewInfo.pNext = nullptr;\n  VkSamplerYcbcrConversionInfo conversionInfo = {\n      .sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO,\n      .pNext = nullptr,\n      .conversion = VK_NULL_HANDLE,\n  };\n\n  if (ahb_format_props.format == VK_FORMAT_UNDEFINED && external_format.externalFormat) {\n    viewInfo.pNext = &conversionInfo;\n    vulkanImage.samplerYcbcrConversionCreateInfo_ = {\n        .sType = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO,\n        .pNext = &external_format,\n        .format = ahb_format_props.format,\n        .ycbcrModel = ahb_format_props.suggestedYcbcrModel,\n        .ycbcrRange = ahb_format_props.suggestedYcbcrRange,\n        .components =\n            {\n                VK_COMPONENT_SWIZZLE_IDENTITY,\n                VK_COMPONENT_SWIZZLE_IDENTITY,\n                VK_COMPONENT_SWIZZLE_IDENTITY,\n                VK_COMPONENT_SWIZZLE_IDENTITY,\n            },\n        .xChromaOffset = ahb_format_props.suggestedXChromaOffset,\n        .yChromaOffset = ahb_format_props.suggestedYChromaOffset,\n        .chromaFilter = VK_FILTER_LINEAR,\n        .forceExplicitReconstruction = VK_FALSE};\n\n    ctx.vf_.vkCreateSamplerYcbcrConversion(device,\n                                           &vulkanImage.samplerYcbcrConversionCreateInfo_,\n                                           nullptr,\n                                           &conversionInfo.conversion);\n    IGL_LOG_DEBUG(\"created sampler ycbcr conversion at %x with %d %d %d and %d\",\n                  conversionInfo.conversion,\n                  ahb_format_props.suggestedYcbcrModel,\n                  ahb_format_props.suggestedYcbcrRange,\n                  ahb_format_props.suggestedXChromaOffset,\n                  ahb_format_props.suggestedYChromaOffset);\n  } else if (igl::vulkan::getNumImagePlanes(ahb_format_props.format) > 1) {\n    auto createInfo = ctx.getOrCreateYcbcrConversionInfo(VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM);\n    conversionInfo.conversion = createInfo.conversion;\n  }\n\n  VulkanImageView vulkanImageView(ctx, viewInfo, \"Image View: videoTexture\");\n\n  auto vkTexture = device_.getVulkanContext().createTexture(\n      std::move(vulkanImage), std::move(vulkanImageView), \"SurfaceTexture\");\n\n  if (!vkTexture) {\n    return Result(Result::Code::RuntimeError, \"Failed to create vulkan texture\");\n  }\n\n  desc_ = desc; // Field within the Texture class\n  textureDesc_ = desc; // Field within the NativeHWTextureBuffer class\n  texture_ = std::move(vkTexture);\n\n  return Result{Result::Code::Ok};\n}\n\n} // namespace igl::vulkan::android\n\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n"
  },
  {
    "path": "src/igl/vulkan/android/NativeHWBuffer.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @fb-only\n// @fb-only\n\n#pragma once\n\n#include <igl/android/NativeHWBuffer.h>\n\n#if defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n\n#include <igl/vulkan/Texture.h>\n\nstruct AHardwareBuffer;\n\nnamespace igl::vulkan::android {\n\ntypedef void AHardwareBufferHelper;\n\n// TextureBuffer encapsulates Vulkan textures\nclass NativeHWTextureBuffer : public igl::android::INativeHWTextureBuffer, public Texture {\n  friend class igl::vulkan::PlatformDevice;\n  using Super = Texture;\n\n public:\n  NativeHWTextureBuffer(igl::vulkan::Device& device, TextureFormat format);\n  ~NativeHWTextureBuffer() override;\n\n protected:\n  // Texture overrides\n  Result create(const TextureDesc& desc) override;\n\n  Result createTextureInternal(AHardwareBuffer* buffer) override;\n};\n\n} // namespace igl::vulkan::android\n\n#endif // defined(IGL_ANDROID_HWBUFFER_SUPPORTED)\n"
  },
  {
    "path": "src/igl/vulkan/moltenvk/MoltenVkHelpers.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\nnamespace igl::vulkan {\n\nvoid* getCAMetalLayer(void* nsWindow);\nvoid setupMoltenVKEnvironment();\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/moltenvk/MoltenVkHelpers.mm",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n// @MARK:COVERAGE_EXCLUDE_FILE\n\n#include <TargetConditionals.h>\n#if TARGET_OS_OSX\n#import <Cocoa/Cocoa.h>\n#elif TARGET_OS_IPHONE\n// NOLINTNEXTLINE(facebook-unused-include-check)\n#import <UIKit/UIView.h>\n#endif\n#import <Foundation/Foundation.h>\n#import <Metal/Metal.h>\n#import <QuartzCore/CAMetalLayer.h>\n#include <igl/Common.h>\n#include <igl/vulkan/moltenvk/MoltenVkHelpers.h>\n\n// We store ICD files and the Frameworks in the app bundle for apps and the test bundle for XCTests.\n// Meanwhile Vulkan Loader uses `CFBundleGetMainBundle` to locate those ICD files\n// (in Vulkan-Loader/loader/loader.c). This works good with bundled Mac apps and even auxiliary\n// binaries in the app bundle. However for XCTest instances - the main bundle would be the bundle of\n// the test runner but not the actual bundle with test code. Hence we need to add this dummy\n// Objective-C class here in order to use `+[NSBundle bundleForClass:]` to locate the test bundle\n// packaged with Vulkan's manifest files, and then provide paths to the Vulkan loader by ENVs.\n@interface IGLVulkanBundleAccessor : NSObject\n@end\n@implementation IGLVulkanBundleAccessor\n@end\n\nnamespace igl::vulkan {\nnamespace {\n\n// These constants are defined in Vulkan-Loader/loader/vk_loader_platform.h\nconstexpr const char* kVulkanResourcesDirectoryName = \"vulkan\";\nconstexpr const char* kVulkanAdditionalDriverFilesEnvKey = \"VK_ADD_DRIVER_FILES\";\nconstexpr const char* kVulkanAdditionalLayerFilesEnvKey = \"VK_ADD_LAYER_PATH\";\nconstexpr const char* kVulkanDriverConfigFileDirectoryName = \"icd.d\";\nconstexpr const char* kVulkanLayerConfigFileDirectoryName = \"explicit_layer.d\";\n\nenum class VulkanConfigFileType {\n  Driver,\n  Layer,\n};\n\nauto getAdditionalConfigFileDirectoryEnvKey(VulkanConfigFileType configFileType) {\n  switch (configFileType) {\n  case VulkanConfigFileType::Driver:\n    return kVulkanAdditionalDriverFilesEnvKey;\n  case VulkanConfigFileType::Layer:\n    return kVulkanAdditionalLayerFilesEnvKey;\n  }\n}\n\nauto getConfigFileDirectoryName(VulkanConfigFileType configFileType) {\n  switch (configFileType) {\n  case VulkanConfigFileType::Driver:\n    return kVulkanDriverConfigFileDirectoryName;\n  case VulkanConfigFileType::Layer:\n    return kVulkanLayerConfigFileDirectoryName;\n  }\n}\n\nNSString* _Nullable getVulkanConfigFileDirectoryPath(NSBundle* _Nonnull bundle,\n                                                     VulkanConfigFileType configFileType) {\n  return [bundle pathForResource:@(getConfigFileDirectoryName(configFileType))\n                          ofType:nil\n                     inDirectory:@(kVulkanResourcesDirectoryName)];\n}\n\nvoid setEnvForAdditionalVulkanConfigFileDirectory(NSBundle* _Nonnull bundle,\n                                                  VulkanConfigFileType configFileType) {\n  NSString* directoryPath = getVulkanConfigFileDirectoryPath(bundle, configFileType);\n  if (!directoryPath) {\n    return;\n  }\n  const auto* envKey = getAdditionalConfigFileDirectoryEnvKey(configFileType);\n  const auto* envValue = directoryPath.UTF8String;\n  ::setenv(envKey, envValue, 0 /* override */);\n}\n\n} // namespace\n\nvoid* getCAMetalLayer(void* window) {\n#if TARGET_OS_OSX\n  auto* object = (__bridge NSObject*)window;\n\n  if ([object isKindOfClass:[CAMetalLayer class]]) {\n    return window;\n  }\n  auto layer = [CAMetalLayer layer];\n\n  NSView* view = nil;\n  if ([object isKindOfClass:[NSView class]]) {\n    view = (NSView*)object;\n  } else if ([object isKindOfClass:[NSWindow class]]) {\n    auto* nsWindow = (__bridge NSWindow*)window;\n    auto contentView = nsWindow.contentView;\n    layer.delegate = contentView;\n    view = nsWindow.contentView;\n  } else {\n    IGL_DEBUG_ASSERT_NOT_REACHED();\n    return window;\n  }\n  view.layer = layer;\n  view.wantsLayer = YES;\n\n  NSScreen* screen = [NSScreen mainScreen];\n  CGFloat factor = [screen backingScaleFactor];\n  layer.contentsScale = factor;\n\n  return (__bridge void*)layer;\n#elif TARGET_OS_IPHONE\n  auto* uiView = (__bridge UIView*)window;\n  return (__bridge void*)uiView.layer;\n#endif\n}\n\nvoid setupMoltenVKEnvironment() {\n  @autoreleasepool {\n    NSBundle* bundle = [NSBundle bundleForClass:IGLVulkanBundleAccessor.class];\n    setEnvForAdditionalVulkanConfigFileDirectory(bundle, VulkanConfigFileType::Driver);\n    setEnvForAdditionalVulkanConfigFileDirectory(bundle, VulkanConfigFileType::Layer);\n  }\n}\n\n} // namespace igl::vulkan\n"
  },
  {
    "path": "src/igl/vulkan/util/SpvConstantSpecialization.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/util/SpvConstantSpecialization.h>\n\n#include <spirv/unified1/spirv.h>\n\n#define IGL_COMMON_SKIP_CHECK\n#include <cstddef>\n#include <cstdint>\n#include <vector>\n#include <igl/Assert.h>\n\nnamespace igl::vulkan::util {\nnamespace {\nuint32_t makeOpCode(uint32_t opCode, uint32_t wordCount) {\n  return opCode | (wordCount << SpvWordCountShift);\n}\n} // namespace\n\nvoid specializeConstants(uint32_t* spirv, size_t numBytes, const std::vector<uint32_t>& values) {\n  const uint32_t bound = spirv[3];\n  const size_t size = numBytes / sizeof(uint32_t);\n\n  if (!IGL_DEBUG_VERIFY(bound < 1024 * 1024)) {\n    return;\n  }\n\n  if (!IGL_DEBUG_VERIFY(spirv[0] == SpvMagicNumber)) {\n    return;\n  }\n\n  std::vector<uint32_t> idToValue(bound, kNoValue);\n\n  uint32_t* instruction = spirv + 5;\n  while (instruction < spirv + size) {\n    const uint16_t instructionSize = static_cast<uint16_t>(instruction[0] >> SpvWordCountShift);\n    const uint16_t opCode = static_cast<uint16_t>(instruction[0] & SpvOpCodeMask);\n\n    switch (opCode) {\n    case SpvOpDecorate: {\n      constexpr uint32_t kOpDecorateTargetId = 1;\n      constexpr uint32_t kOpDecorateDecoration = 2;\n      constexpr uint32_t kOpDecorateOperandIds = 3;\n\n      IGL_DEBUG_ASSERT(instruction + kOpDecorateDecoration <= spirv + size,\n                       \"OpDecorate out of bounds\");\n\n      const uint32_t decoration = instruction[kOpDecorateDecoration];\n      const uint32_t targetId = instruction[kOpDecorateTargetId];\n      IGL_DEBUG_ASSERT(targetId < bound);\n\n      switch (decoration) {\n      case SpvDecorationSpecId: {\n        IGL_DEBUG_ASSERT(instruction + kOpDecorateOperandIds <= spirv + size,\n                         \"OpDecorate out of bounds\");\n        const uint32_t specId = instruction[kOpDecorateOperandIds];\n        idToValue[targetId] = values.size() > specId ? values[specId] : kNoValue;\n        break;\n      }\n      default:\n        break;\n      }\n\n      break;\n    }\n    case SpvOpSpecConstantFalse:\n    case SpvOpSpecConstantTrue: {\n      constexpr uint32_t kOpSpecConstantTrueResultId = 2;\n\n      const uint32_t resultId = instruction[kOpSpecConstantTrueResultId];\n      const uint32_t specializedValue = idToValue[resultId];\n      if (specializedValue == kNoValue) {\n        break;\n      }\n      instruction[0] =\n          makeOpCode(specializedValue ? SpvOpConstantTrue : SpvOpConstantFalse, instructionSize);\n      break;\n    }\n\n    case SpvOpSpecConstant: {\n      constexpr uint32_t kOpSpecConstantResultId = 2;\n      constexpr uint32_t kOpSpecConstantValue = 3;\n\n      const uint32_t resultId = instruction[kOpSpecConstantResultId];\n      const uint32_t specializedValue = idToValue[resultId];\n      if (specializedValue == kNoValue) {\n        break;\n      }\n      instruction[0] = makeOpCode(SpvOpConstant, instructionSize);\n      instruction[kOpSpecConstantValue] = specializedValue;\n      break;\n    }\n\n    default:\n      break;\n    }\n\n    IGL_DEBUG_ASSERT(instruction + instructionSize <= spirv + size);\n    instruction += instructionSize;\n  }\n}\n\n} // namespace igl::vulkan::util\n"
  },
  {
    "path": "src/igl/vulkan/util/SpvConstantSpecialization.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstddef>\n#include <cstdint>\n#include <variant>\n#include <vector>\n\nnamespace igl::vulkan::util {\n\nconstexpr uint32_t kNoValue = 0xffffffff;\n\n// Specializes integer, float and boolean constants in-place in the given SPIR-V binary. The value\n// at the given index corrosponds the specialization constants constantId. Note that while we can't\n// specialize OpSpecConstantOp, we could specialize OpSpecConstantComposite, but we would need\n// support for variable size spec-constant values.\nvoid specializeConstants(uint32_t* spirv, size_t numBytes, const std::vector<uint32_t>& values);\n\n} // namespace igl::vulkan::util\n"
  },
  {
    "path": "src/igl/vulkan/util/SpvReflection.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/util/SpvReflection.h>\n\n#include <spirv/unified1/spirv.h>\n\n#define IGL_COMMON_SKIP_CHECK\n#include <igl/Macros.h>\n\nnamespace igl::vulkan::util {\nnamespace {\n\nstruct SpirvId {\n  uint32_t opCode = 0;\n  uint32_t typeId = 0;\n  uint32_t storageClass = 0;\n  uint32_t binding = kNoBindingLocation;\n  uint32_t dset = kNoDescriptorSet;\n  TextureType type = TextureType::Invalid;\n  bool isStorageImage = false;\n  uint32_t imageFormat = SpvImageFormatUnknown;\n};\n\nstruct ImageDimensionality {\n  enum : uint32_t {\n    kDim1d = 0,\n    kDim2d = 1,\n    kDim3d = 2,\n    kDimCube = 3,\n    kDimRect = 4,\n    kDim2dExternal = 666, // Doesn't exist in SPIR-V, but needed for Android.\n    kDim2dExternalYuv = 667, // Doesn't exist in SPIR-V, but needed for Android.\n  };\n};\n\nTextureType getIGLTextureType(uint32_t dim, bool isArrayed) {\n  switch (dim) {\n  case ImageDimensionality::kDim2d:\n    return isArrayed ? TextureType::TwoDArray : TextureType::TwoD;\n  case ImageDimensionality::kDim3d:\n    return TextureType::ThreeD;\n  case ImageDimensionality::kDimCube:\n    return TextureType::Cube;\n  case ImageDimensionality::kDim2dExternal:\n  case ImageDimensionality::kDim2dExternalYuv:\n    return TextureType::ExternalImage;\n\n  case ImageDimensionality::kDimRect:\n  case ImageDimensionality::kDim1d:\n  default:\n    return TextureType::Invalid;\n  }\n}\n\n} // namespace\n\nSpvModuleInfo getReflectionData(const uint32_t* spirv, size_t numBytes) {\n  if (!IGL_DEBUG_VERIFY(spirv)) {\n    return {};\n  }\n\n  // go from bytes to SPIR-V words\n  const size_t size = numBytes / sizeof(uint32_t);\n\n  constexpr uint32_t kSpvBoundOffset = 3;\n  constexpr uint32_t kSpvHeaderSize = 5;\n\n  // initial pre-checks\n  {\n    if (size <= kSpvHeaderSize) {\n      return {};\n    }\n\n    if (spirv[0] != SpvMagicNumber) {\n      IGL_DEBUG_ABORT(\"Invalid SPIR-V magic word\");\n      return {};\n    }\n  }\n\n  // SPIR-V spec: \"all <id>s in this module are guaranteed to satisfy: 0 < id < kBound\"\n  const uint32_t kBound = spirv[kSpvBoundOffset];\n\n  // some reasonable upper bound so that we don't try to allocate a lot of memory in case the SPIR-V\n  // header is broken\n  if (!IGL_DEBUG_VERIFY(kBound < 1024 * 1024)) {\n    return {};\n  }\n\n  std::vector<SpirvId> ids(kBound);\n\n  SpvModuleInfo info = {};\n\n  const uint32_t* words = spirv + kSpvHeaderSize;\n\n  while (words < spirv + size) {\n    const uint16_t instructionSize = uint16_t(words[0] >> SpvWordCountShift);\n    const uint16_t opCode = uint16_t(words[0] & SpvOpCodeMask);\n\n    switch (opCode) {\n    case SpvOpDecorate: {\n      constexpr uint32_t kOpDecorateTargetId = 1;\n      constexpr uint32_t kOpDecorateDecoration = 2;\n      constexpr uint32_t kOpDecorateOperandIds = 3;\n\n      IGL_DEBUG_ASSERT(words + kOpDecorateDecoration <= spirv + size, \"OpDecorate out of bounds\");\n\n      const uint32_t decoration = words[kOpDecorateDecoration];\n      const uint32_t targetId = words[kOpDecorateTargetId];\n      IGL_DEBUG_ASSERT(targetId < kBound);\n\n      switch (decoration) {\n      case SpvDecorationBinding: {\n        IGL_DEBUG_ASSERT(words + kOpDecorateOperandIds <= spirv + size, \"OpDecorate out of bounds\");\n        ids[targetId].binding = words[kOpDecorateOperandIds];\n        break;\n      }\n      case SpvDecorationDescriptorSet: {\n        IGL_DEBUG_ASSERT(words + kOpDecorateOperandIds <= spirv + size, \"OpDecorate out of bounds\");\n        ids[targetId].dset = words[kOpDecorateOperandIds];\n        break;\n      }\n      default:\n        break;\n      }\n      break;\n    }\n    case SpvOpTypeStruct:\n    case SpvOpTypeImage:\n    case SpvOpTypeSampler:\n    case SpvOpTypeSampledImage: {\n      constexpr uint32_t kOpTypeResultId = 1;\n      IGL_DEBUG_ASSERT(words + kOpTypeResultId <= spirv + size, \"OpTypeImage out of bounds\");\n      const uint32_t targetId = words[kOpTypeResultId];\n      IGL_DEBUG_ASSERT(targetId < kBound);\n      IGL_DEBUG_ASSERT(ids[targetId].opCode == 0);\n      ids[targetId].opCode = opCode;\n      if (opCode == SpvOpTypeSampledImage) {\n        constexpr uint32_t kOpTypeSampledImageImageTypeId = 2;\n        ids[targetId].typeId = words[kOpTypeSampledImageImageTypeId];\n      } else if (opCode == SpvOpTypeImage) {\n        constexpr uint32_t kOpTypeImageTypeId = 1;\n        constexpr uint32_t kOpTypeImageDim = 3;\n        constexpr uint32_t kOpTypeImageArrayed = 5;\n        IGL_DEBUG_ASSERT(words + kOpTypeImageArrayed <= spirv + size, \"OpTypeImage out of bounds\");\n        const uint32_t imageTypeId = words[kOpTypeImageTypeId];\n        const uint32_t dim = words[kOpTypeImageDim];\n        const bool isArray = words[kOpTypeImageArrayed] == 1u;\n        const TextureType textureType = getIGLTextureType(dim, isArray);\n        ids[imageTypeId].type = textureType;\n        // The spec: https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#OpTypeImage\n        constexpr uint32_t kOpTypeImageSampledField = 7;\n        constexpr uint32_t kOpTypeImageFormatField = 8;\n        const uint32_t sampledValue = (instructionSize > kOpTypeImageSampledField)\n                                          ? words[kOpTypeImageSampledField]\n                                          : 0; // default if missing\n        // If sampledValue == 2, this is a storage image\n        ids[targetId].isStorageImage = sampledValue == 2;\n        if (instructionSize > kOpTypeImageFormatField) {\n          ids[targetId].imageFormat = words[kOpTypeImageFormatField];\n        } else {\n          ids[targetId].imageFormat = SpvImageFormatUnknown;\n        }\n      }\n      break;\n    }\n    case SpvOpTypePointer: {\n      constexpr uint32_t kOpTypePointerTargetId = 1;\n      constexpr uint32_t kOpTypePointerStorageClassId = 2;\n      constexpr uint32_t kOpTypePointerObjectTypeId = 3;\n      IGL_DEBUG_ASSERT(words + kOpTypePointerObjectTypeId <= spirv + size,\n                       \"OpTypePointer out of bounds\");\n      const uint32_t targetId = words[kOpTypePointerTargetId];\n      IGL_DEBUG_ASSERT(targetId < kBound);\n      IGL_DEBUG_ASSERT(ids[targetId].opCode == 0);\n      ids[targetId].opCode = opCode;\n      ids[targetId].typeId = words[kOpTypePointerObjectTypeId];\n      ids[targetId].storageClass = words[kOpTypePointerStorageClassId];\n      break;\n    }\n    case SpvOpConstant: {\n      constexpr uint32_t kOpConstantTypeId = 1;\n      constexpr uint32_t kOpConstantTargetId = 2;\n      IGL_DEBUG_ASSERT(words + kOpConstantTargetId <= spirv + size, \"OpTypePointer out of bounds\");\n      const uint32_t targetId = words[kOpConstantTargetId];\n      IGL_DEBUG_ASSERT(targetId < kBound);\n      IGL_DEBUG_ASSERT(ids[targetId].opCode == 0);\n      ids[targetId].opCode = opCode;\n      ids[targetId].typeId = words[kOpConstantTypeId];\n      break;\n    }\n    case SpvOpVariable: {\n      constexpr uint32_t kOpVariableTypeId = 1;\n      constexpr uint32_t kOpVariableTargetId = 2;\n      constexpr uint32_t kOpVariableStorageClass = 3;\n      IGL_DEBUG_ASSERT(words + kOpVariableStorageClass <= spirv + size, \"OpVariable out of bounds\");\n      const uint32_t targetId = words[kOpVariableTargetId];\n      IGL_DEBUG_ASSERT(targetId < kBound);\n      IGL_DEBUG_ASSERT(ids[targetId].opCode == 0);\n      ids[targetId].opCode = opCode;\n      ids[targetId].typeId = words[kOpVariableTypeId];\n      ids[targetId].storageClass = words[kOpVariableStorageClass];\n      break;\n    }\n    default:\n      break;\n    }\n\n    IGL_DEBUG_ASSERT(words + instructionSize <= spirv + size);\n    words += instructionSize;\n  }\n\n  for (auto& id : ids) {\n    const bool isStorage = id.storageClass == SpvStorageClassStorageBuffer;\n    const bool isUniform = id.storageClass == SpvStorageClassUniform ||\n                           id.storageClass == SpvStorageClassUniformConstant;\n    if (id.opCode == SpvOpVariable && (isStorage || isUniform)) {\n      IGL_DEBUG_ASSERT(ids[id.typeId].opCode == SpvOpTypePointer);\n      IGL_DEBUG_ASSERT(ids[id.typeId].typeId < kBound);\n\n      const uint32_t opCode = ids[ids[id.typeId].typeId].opCode;\n\n      switch (SpvOp(opCode)) {\n      case SpvOpTypeStruct:\n        info.buffers.push_back({id.binding, id.dset, isStorage});\n        break;\n      case SpvOpTypeImage: {\n        const TextureType tt = ids[ids[id.typeId].typeId].type; // dimension\n        IGL_DEBUG_ASSERT(tt != TextureType::Invalid);\n        const bool isStorageImage = ids[ids[id.typeId].typeId].isStorageImage;\n        if (isStorageImage) {\n          uint32_t imgFmt = ids[ids[id.typeId].typeId].imageFormat;\n          info.images.push_back({id.binding, id.dset, tt, imgFmt});\n        } else {\n          info.textures.push_back({id.binding, id.dset, tt});\n        }\n        break;\n      }\n      case SpvOpTypeSampler:\n        break;\n      case SpvOpTypeSampledImage: {\n        IGL_DEBUG_ASSERT(ids[ids[id.typeId].typeId].typeId < kBound);\n        IGL_DEBUG_ASSERT(ids[ids[ids[id.typeId].typeId].typeId].opCode == SpvOpTypeImage);\n        const TextureType tt = ids[ids[ids[id.typeId].typeId].typeId].type;\n        IGL_DEBUG_ASSERT(tt != TextureType::Invalid);\n        info.textures.push_back({id.binding, id.dset, tt});\n        break;\n      }\n      default:\n        break;\n      }\n    }\n    if (id.opCode == SpvOpVariable && id.storageClass == SpvStorageClassPushConstant) {\n      info.hasPushConstants = true;\n    }\n  }\n\n  for (const auto& desc : info.buffers) {\n    if (desc.bindingLocation != kNoBindingLocation) {\n      info.usageMaskBuffers |= 1ul << desc.bindingLocation;\n    }\n  }\n  for (const auto& desc : info.textures) {\n    if (desc.bindingLocation != kNoBindingLocation) {\n      info.usageMaskTextures |= 1ul << desc.bindingLocation;\n    }\n  }\n\n  return info;\n}\n\nnamespace {\n\ntemplate<typename T>\nvoid combineDescriptions(std::vector<T>& out, const std::vector<T>& c1, const std::vector<T>& c2) {\n  out = c1;\n\n  for (const auto& desc : c2) {\n    auto it = std::find_if(out.begin(), out.end(), [loc = desc.bindingLocation](const auto& d) {\n      return d.bindingLocation == loc;\n    });\n    if (it == out.end()) {\n      out.emplace_back(desc);\n    } else {\n      IGL_DEBUG_ASSERT(desc.descriptorSet == it->descriptorSet);\n    }\n  }\n}\n\n} // namespace\n\nSpvModuleInfo mergeReflectionData(const SpvModuleInfo& info1, const SpvModuleInfo& info2) {\n  SpvModuleInfo result;\n\n  combineDescriptions(result.buffers, info1.buffers, info2.buffers);\n  combineDescriptions(result.textures, info1.textures, info2.textures);\n\n  result.hasPushConstants = info1.hasPushConstants || info2.hasPushConstants;\n  result.usageMaskBuffers = info1.usageMaskBuffers | info2.usageMaskBuffers;\n  result.usageMaskTextures = info1.usageMaskTextures | info2.usageMaskTextures;\n\n  return result;\n}\n\n} // namespace igl::vulkan::util\n"
  },
  {
    "path": "src/igl/vulkan/util/SpvReflection.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstddef>\n#include <cstdint>\n#include <vector>\n#include <igl/Texture.h>\n\nnamespace igl::vulkan::util {\n\nconstexpr uint32_t kNoBindingLocation = 0xffffffff;\nconstexpr uint32_t kNoDescriptorSet = 0xffffffff;\n\nstruct TextureDescription {\n  uint32_t bindingLocation = kNoBindingLocation;\n  uint32_t descriptorSet = kNoDescriptorSet;\n  TextureType type = TextureType::Invalid;\n};\n\nstruct ImageDescription {\n  uint32_t bindingLocation = kNoBindingLocation;\n  uint32_t descriptorSet = kNoDescriptorSet;\n  TextureType type = TextureType::Invalid;\n  uint32_t imageFormat = 0;\n};\n\nstruct BufferDescription {\n  uint32_t bindingLocation = kNoBindingLocation;\n  uint32_t descriptorSet = kNoDescriptorSet;\n  bool isStorage = false;\n};\n\nstruct SpvModuleInfo {\n  std::vector<BufferDescription> buffers;\n  std::vector<TextureDescription> textures;\n  std::vector<ImageDescription> images;\n  bool hasPushConstants = false;\n  uint32_t usageMaskBuffers = 0;\n  uint32_t usageMaskTextures = 0;\n};\n\nSpvModuleInfo getReflectionData(const uint32_t* spirv, size_t numBytes);\nSpvModuleInfo mergeReflectionData(const SpvModuleInfo& info1, const SpvModuleInfo& info2);\n\n} // namespace igl::vulkan::util\n"
  },
  {
    "path": "src/igl/vulkan/util/TextureFormat.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/vulkan/util/TextureFormat.h>\n\n#define IGL_COMMON_SKIP_CHECK\n\nnamespace igl::vulkan::util {\n\n// @fb-only\n// NOLINTBEGIN(readability-identifier-naming)\n// Vulkan Defines\n#define VK_FORMAT_UNDEFINED 0\n#define VK_FORMAT_R8_UNORM 9\n#define VK_FORMAT_R16_UNORM 70\n#define VK_FORMAT_R16_SFLOAT 76\n#define VK_FORMAT_R16_UINT 74\n#define VK_FORMAT_B5G5R5A1_UNORM_PACK16 7\n#define VK_FORMAT_B5G6R5_UNORM_PACK16 5\n#define VK_FORMAT_B4G4R4A4_UNORM_PACK16 3\n#define VK_FORMAT_R8G8_UNORM 16\n#define VK_FORMAT_R5G5B5A1_UNORM_PACK16 6\n#define VK_FORMAT_B8G8R8A8_UNORM 44\n#define VK_FORMAT_R8G8B8A8_UNORM 37\n#define VK_FORMAT_R8G8B8A8_SRGB 43\n#define VK_FORMAT_B8G8R8A8_SRGB 50\n#define VK_FORMAT_R16G16_UNORM 77\n#define VK_FORMAT_R16G16_SFLOAT 83\n#define VK_FORMAT_R16G16_UINT 81\n#define VK_FORMAT_R16G16B16A16_UNORM 91\n#define VK_FORMAT_A2R10G10B10_UNORM_PACK32 58\n#define VK_FORMAT_A2R10G10B10_UINT_PACK32 62\n#define VK_FORMAT_A2B10G10R10_UNORM_PACK32 64\n#define VK_FORMAT_R32_UINT 98\n#define VK_FORMAT_R32_SFLOAT 100\n#define VK_FORMAT_R32G32_SFLOAT 103\n#define VK_FORMAT_R16G16B16_SFLOAT 90\n#define VK_FORMAT_R16G16B16A16_SFLOAT 97\n#define VK_FORMAT_R32G32B32_SFLOAT 106\n#define VK_FORMAT_R32G32B32A32_UINT 107\n#define VK_FORMAT_R32G32B32A32_SFLOAT 109\n#define VK_FORMAT_ASTC_4x4_UNORM_BLOCK 157\n#define VK_FORMAT_ASTC_4x4_SRGB_BLOCK 158\n#define VK_FORMAT_ASTC_5x4_UNORM_BLOCK 159\n#define VK_FORMAT_ASTC_5x4_SRGB_BLOCK 160\n#define VK_FORMAT_ASTC_5x5_UNORM_BLOCK 161\n#define VK_FORMAT_ASTC_5x5_SRGB_BLOCK 162\n#define VK_FORMAT_ASTC_6x5_UNORM_BLOCK 163\n#define VK_FORMAT_ASTC_6x5_SRGB_BLOCK 164\n#define VK_FORMAT_ASTC_6x6_UNORM_BLOCK 165\n#define VK_FORMAT_ASTC_6x6_SRGB_BLOCK 166\n#define VK_FORMAT_ASTC_8x5_UNORM_BLOCK 167\n#define VK_FORMAT_ASTC_8x5_SRGB_BLOCK 168\n#define VK_FORMAT_ASTC_8x6_UNORM_BLOCK 169\n#define VK_FORMAT_ASTC_8x6_SRGB_BLOCK 170\n#define VK_FORMAT_ASTC_8x8_UNORM_BLOCK 171\n#define VK_FORMAT_ASTC_8x8_SRGB_BLOCK 172\n#define VK_FORMAT_ASTC_10x5_UNORM_BLOCK 173\n#define VK_FORMAT_ASTC_10x5_SRGB_BLOCK 174\n#define VK_FORMAT_ASTC_10x6_UNORM_BLOCK 175\n#define VK_FORMAT_ASTC_10x6_SRGB_BLOCK 176\n#define VK_FORMAT_ASTC_10x8_UNORM_BLOCK 177\n#define VK_FORMAT_ASTC_10x8_SRGB_BLOCK 178\n#define VK_FORMAT_ASTC_10x10_UNORM_BLOCK 179\n#define VK_FORMAT_ASTC_10x10_SRGB_BLOCK 180\n#define VK_FORMAT_ASTC_12x10_UNORM_BLOCK 181\n#define VK_FORMAT_ASTC_12x10_SRGB_BLOCK 182\n#define VK_FORMAT_ASTC_12x12_UNORM_BLOCK 183\n#define VK_FORMAT_ASTC_12x12_SRGB_BLOCK 184\n#define VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG 1000054000\n#define VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG 1000054001\n#define VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG 1000054002\n#define VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG 1000054003\n#define VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG 1000054004\n#define VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG 1000054005\n#define VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG 1000054006\n#define VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG 1000054007\n#define VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK 147\n#define VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK 148\n#define VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK 149\n#define VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK 150\n#define VK_FORMAT_EAC_R11G11_UNORM_BLOCK 155\n#define VK_FORMAT_EAC_R11G11_SNORM_BLOCK 156\n#define VK_FORMAT_EAC_R11_UNORM_BLOCK 153\n#define VK_FORMAT_EAC_R11_SNORM_BLOCK 154\n#define VK_FORMAT_D16_UNORM 124\n#define VK_FORMAT_BC7_UNORM_BLOCK 145\n#define VK_FORMAT_BC7_SRGB_BLOCK 146\n#define VK_FORMAT_X8_D24_UNORM_PACK32 125\n#define VK_FORMAT_D24_UNORM_S8_UINT 129\n#define VK_FORMAT_S8_UINT 127\n#define VK_FORMAT_D32_SFLOAT_S8_UINT 130\n#define VK_FORMAT_D32_SFLOAT 126\n// NOLINTEND(readability-identifier-naming)\n\nTextureFormat vkTextureFormatToTextureFormat(int32_t vkFormat) {\n  switch (vkFormat) {\n  case VK_FORMAT_UNDEFINED:\n    return TextureFormat::Invalid;\n  case VK_FORMAT_R8_UNORM:\n    return TextureFormat::R_UNorm8;\n  case VK_FORMAT_R16_UNORM:\n    return TextureFormat::R_UNorm16;\n  case VK_FORMAT_R16_SFLOAT:\n    return TextureFormat::R_F16;\n  case VK_FORMAT_R16_UINT:\n    return TextureFormat::R_UInt16;\n  case VK_FORMAT_B5G5R5A1_UNORM_PACK16:\n    return TextureFormat::B5G5R5A1_UNorm;\n  case VK_FORMAT_B5G6R5_UNORM_PACK16:\n    return TextureFormat::B5G6R5_UNorm;\n  case VK_FORMAT_B4G4R4A4_UNORM_PACK16:\n    return TextureFormat::ABGR_UNorm4;\n  case VK_FORMAT_R8G8_UNORM:\n    return TextureFormat::RG_UNorm8;\n  case VK_FORMAT_R5G5B5A1_UNORM_PACK16:\n    return TextureFormat::R5G5B5A1_UNorm;\n  case VK_FORMAT_B8G8R8A8_UNORM:\n    return TextureFormat::BGRA_UNorm8;\n  case VK_FORMAT_R8G8B8A8_UNORM:\n    return TextureFormat::RGBA_UNorm8;\n  case VK_FORMAT_R8G8B8A8_SRGB:\n    return TextureFormat::RGBA_SRGB;\n  case VK_FORMAT_B8G8R8A8_SRGB:\n    return TextureFormat::BGRA_SRGB;\n  case VK_FORMAT_R16G16_UNORM:\n    return TextureFormat::RG_UNorm16;\n  case VK_FORMAT_R16G16_SFLOAT:\n    return TextureFormat::RG_F16;\n  case VK_FORMAT_R16G16_UINT:\n    return TextureFormat::RG_UInt16;\n  case VK_FORMAT_R16G16B16A16_UNORM:\n    return TextureFormat::RGBA_UNorm16;\n  case VK_FORMAT_A2R10G10B10_UNORM_PACK32:\n    return TextureFormat::RGB10_A2_UNorm_Rev;\n  case VK_FORMAT_A2R10G10B10_UINT_PACK32:\n    return TextureFormat::RGB10_A2_Uint_Rev;\n  case VK_FORMAT_A2B10G10R10_UNORM_PACK32:\n    return TextureFormat::BGR10_A2_Unorm;\n  case VK_FORMAT_R32_SFLOAT:\n    return TextureFormat::R_F32;\n  case VK_FORMAT_R32_UINT:\n    return TextureFormat::R_UInt32;\n  case VK_FORMAT_R32G32_SFLOAT:\n    return TextureFormat::RG_F32;\n  case VK_FORMAT_R16G16B16_SFLOAT:\n    return TextureFormat::RGB_F16;\n  case VK_FORMAT_R16G16B16A16_SFLOAT:\n    return TextureFormat::RGBA_F16;\n  case VK_FORMAT_R32G32B32_SFLOAT:\n    return TextureFormat::RGB_F32;\n  case VK_FORMAT_R32G32B32A32_UINT:\n    return TextureFormat::RGBA_UInt32;\n  case VK_FORMAT_R32G32B32A32_SFLOAT:\n    return TextureFormat::RGBA_F32;\n  case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_4x4;\n  case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_4x4;\n  case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_5x4;\n  case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_5x4;\n  case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_5x5;\n  case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_5x5;\n  case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_6x5;\n  case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_6x5;\n  case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_6x6;\n  case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_6x6;\n  case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_8x5;\n  case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_8x5;\n  case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_8x6;\n  case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_8x6;\n  case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_8x8;\n  case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_8x8;\n  case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_10x5;\n  case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_10x5;\n  case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_10x6;\n  case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_10x6;\n  case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_10x8;\n  case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_10x8;\n  case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_10x10;\n  case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_10x10;\n  case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_12x10;\n  case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_12x10;\n  case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:\n    return TextureFormat::RGBA_ASTC_12x12;\n  case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:\n    return TextureFormat::SRGB8_A8_ASTC_12x12;\n  case VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG:\n    return TextureFormat::RGBA_PVRTC_2BPPV1;\n  case VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG:\n    return TextureFormat::RGBA_PVRTC_4BPPV1;\n  case VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK:\n    return TextureFormat::RGB8_ETC2;\n  case VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK:\n    return TextureFormat::SRGB8_ETC2;\n  case VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK:\n    return TextureFormat::RGB8_Punchthrough_A1_ETC2;\n  case VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK:\n    return TextureFormat::SRGB8_Punchthrough_A1_ETC2;\n  case VK_FORMAT_EAC_R11G11_UNORM_BLOCK:\n    return TextureFormat::RG_EAC_UNorm;\n  case VK_FORMAT_EAC_R11G11_SNORM_BLOCK:\n    return TextureFormat::RG_EAC_SNorm;\n  case VK_FORMAT_EAC_R11_UNORM_BLOCK:\n    return TextureFormat::R_EAC_UNorm;\n  case VK_FORMAT_EAC_R11_SNORM_BLOCK:\n    return TextureFormat::R_EAC_SNorm;\n  case VK_FORMAT_D16_UNORM:\n    return TextureFormat::Z_UNorm16;\n  case VK_FORMAT_BC7_UNORM_BLOCK:\n    return TextureFormat::RGBA_BC7_UNORM_4x4;\n  case VK_FORMAT_BC7_SRGB_BLOCK:\n    return TextureFormat::RGBA_BC7_SRGB_4x4;\n  case VK_FORMAT_X8_D24_UNORM_PACK32:\n    return TextureFormat::Z_UNorm24;\n  case VK_FORMAT_D24_UNORM_S8_UINT:\n    return TextureFormat::S8_UInt_Z24_UNorm;\n  case VK_FORMAT_S8_UINT:\n    return TextureFormat::S_UInt8;\n  case VK_FORMAT_D32_SFLOAT_S8_UINT:\n    return TextureFormat::S8_UInt_Z32_UNorm;\n  case VK_FORMAT_D32_SFLOAT:\n    return TextureFormat::Z_UNorm32;\n  default:\n    IGL_DEBUG_ABORT(\"VkFormat value not handled: %d\", (int)vkFormat);\n  }\n\n  return TextureFormat::Invalid;\n}\n\n} // namespace igl::vulkan::util\n"
  },
  {
    "path": "src/igl/vulkan/util/TextureFormat.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdint>\n#include <igl/TextureFormat.h>\n\nnamespace igl::vulkan::util {\n\n/// Converts Vulkan texture format to an IGL TextureFormat.\n/// @return The corresponding IGL format if known; otherwise returns TextureFormat::Invalid.\nTextureFormat vkTextureFormatToTextureFormat(int32_t vkFormat);\n\n} // namespace igl::vulkan::util\n"
  },
  {
    "path": "src/igl/win/LogDefault.cpp",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#include <igl/win/LogDefault.h>\n\n#if !IGL_PLATFORM_WINDOWS\n#error This file should only be compiled on Windows targets\n#endif // !IGL_PLATFORM_WINDOWS\n\n#include <stdio.h>\n#include <string.h>\n\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif\n#include <windows.h>\n\nIGL_API int IGLWinLogDefaultHandler(IGLLogLevel logLevel,\n                                    const char* IGL_RESTRICT format,\n                                    va_list ap) {\n  if (IsDebuggerPresent()) {\n    char str[10240];\n    const size_t kStrSize = sizeof(str) / sizeof(str[0]);\n    int result = vsnprintf(str, kStrSize, format, ap);\n\n    OutputDebugStringA(str);\n\n    if (result >= kStrSize) {\n      OutputDebugStringA(\"(...message truncated.)\" IGL_NEWLINE);\n    }\n  }\n\n  // Log to non-debugger console\n  return IGLLogDefaultHandler(logLevel, format, ap);\n}\n"
  },
  {
    "path": "src/igl/win/LogDefault.h",
    "content": "/*\n * Copyright (c) Meta Platforms, Inc. and affiliates.\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\n#pragma once\n\n#include <cstdarg>\n#include <igl/Common.h>\n\n#ifdef __cplusplus\nextern \"C\" {\n#endif\n\n// At startup, install a Win-specific log handler, so logging shows up in Visual Studio debugger:\n// ```\n// IGLLogSetHandler(IGLWinLogDefaultHandler);\n// ```\nIGL_API int IGLWinLogDefaultHandler(IGLLogLevel logLevel,\n                                    const char* IGL_RESTRICT format,\n                                    va_list ap);\n\n#ifdef __cplusplus\n}\n#endif\n"
  },
  {
    "path": "third-party/.gitignore",
    "content": "content/\r\ndeps/\r\n.bootstrap-content.json\r\n.bootstrap-deps.json\r\n"
  },
  {
    "path": "third-party/bootstrap-content.json",
    "content": "[\r\n{\r\n    \"name\": \"bistro/PropTextures\",\r\n    \"source\": {\r\n        \"type\": \"archive\",\r\n        \"url\": \"https://casual-effects.com/g3d/data10/research/model/bistro/PropTextures\",\r\n        \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"bistro/OtherTextures\",\r\n    \"source\": {\r\n        \"type\": \"archive\",\r\n        \"url\": \"https://casual-effects.com/g3d/data10/research/model/bistro/OtherTextures\",\r\n        \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"bistro/BuildingTextures\",\r\n    \"source\": {\r\n        \"type\": \"archive\",\r\n        \"url\": \"https://casual-effects.com/g3d/data10/research/model/bistro/BuildingTextures\",\r\n        \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"bistro/Interior\",\r\n    \"source\": {\r\n        \"type\": \"archive\",\r\n        \"url\": \"https://casual-effects.com/g3d/data10/research/model/bistro/Interior.zip\",\r\n        \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"bistro/Exterior\",\r\n    \"source\": {\r\n        \"type\": \"archive\",\r\n        \"url\": \"https://casual-effects.com/g3d/data10/research/model/bistro/Exterior.zip\",\r\n        \"user-agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"skybox_hdr\",\r\n    \"source\": {\r\n        \"type\": \"sourcefile\",\r\n        \"url\": \"https://github.com/PacktPublishing/3D-Graphics-Rendering-Cookbook/raw/master/data/immenstadter_horn_2k.hdr\",\r\n        \"user-agent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"glTF-Sample-Models\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/KhronosGroup/glTF-Sample-Models.git\",\r\n        \"revision\": \"db9ff67c1116cfe28eb36320916bccd8c4127cc1\"\r\n    }\r\n}\r\n]\r\n"
  },
  {
    "path": "third-party/bootstrap-deps.json",
    "content": "[\r\n{\r\n    \"name\": \"meshoptimizer\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/zeux/meshoptimizer.git\",\r\n        \"revision\": \"v1.0\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"glslang\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/KhronosGroup/glslang.git\",\r\n        \"revision\": \"15.3.0\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"SPIRV-Headers\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/KhronosGroup/SPIRV-Headers.git\",\r\n        \"revision\": \"cca08c63cefa129d082abca0302adcb81610b465\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"tinyobjloader\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/tinyobjloader/tinyobjloader.git\",\r\n        \"revision\": \"3bb554cf74428d7db13418b4aca1b9752a1d2be8\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"glfw\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/glfw/glfw.git\",\r\n        \"revision\": \"3.3.8\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"glew\",\r\n    \"source\": {\r\n        \"type\": \"archive\",\r\n        \"url\": \"https://github.com/nigels-com/glew/releases/download/glew-2.2.0/glew-2.2.0.zip\",\r\n        \"sha1\": \"f1d3f046e44a4cb62d09547cf8f053d5b16b516f\"\r\n    },\r\n     \"postprocess\": {\r\n        \"type\": \"script\",\r\n        \"file\": \"glew.py\"\r\n     }\r\n},\r\n{\r\n    \"name\": \"stb\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/nothings/stb.git\",\r\n        \"revision\": \"8b5f1f37b5b75829fc72d38e7b5d4bcbf8a26d55\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"3D-Graphics-Rendering-Cookbook\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/PacktPublishing/3D-Graphics-Rendering-Cookbook.git\",\r\n        \"revision\": \"9b44e0b5dc0328e635bd30edc8f4f2ba1e79be38\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"bc7enc\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/richgel999/bc7enc.git\",\r\n        \"revision\": \"f66c2e489b07138f2673a2fb3d27c1aa1d565c48\"\r\n     },\r\n     \"postprocess\": {\r\n        \"type\": \"script\",\r\n        \"file\": \"bc7enc.py\"\r\n     }\r\n},\r\n{\r\n    \"name\": \"glm\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/g-truc/glm.git\",\r\n        \"revision\": \"0.9.9.8\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"taskflow\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/taskflow/taskflow.git\",\r\n        \"revision\": \"v3.10.0\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"fmt\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/fmtlib/fmt.git\",\r\n        \"revision\": \"10.2.1\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"imgui\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/ocornut/imgui.git\",\r\n        \"revision\": \"v1.91.7\"\r\n    }\r\n},\r\n{\n    \"name\": \"volk\",\n    \"source\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/zeux/volk\",\n        \"revision\": \"1.4.304\"\n    }\n},\n{\n    \"name\": \"DirectX-Headers\",\n    \"source\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/microsoft/DirectX-Headers.git\",\n        \"revision\": \"v1.614.0\"\n    }\n},\n{\n    \"name\": \"vma\",\n    \"source\": {\n        \"type\": \"git\",\n        \"url\": \"https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator.git\",\n        \"revision\": \"v3.2.0\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"tracy\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/wolfpld/tracy.git\",\r\n        \"revision\": \"v0.12.2\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"gtest\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/google/googletest.git\",\r\n        \"revision\": \"v1.14.0\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"EGL\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/McNopper/EGL.git\",\r\n        \"revision\": \"f20cdac3745a0d45ce8a8358ea40389278ae91e5\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"ios-cmake\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/leetal/ios-cmake.git\",\r\n        \"revision\": \"04d91f6675dabb3c97df346a32f6184b0a7ef845\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"spark-sl\",\r\n    \"source\": {\r\n        \"type\": \"archive\",\r\n        \"url\": \"https://github.com/facebook/igl/releases/download/SparkSL/SparkSL_Compiler-v0.0.1.zip\",\r\n        \"sha1\": \"d636517b5fd3103f7aeca2ed6d4c9ad3e2e97964\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"ktx-software\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/KhronosGroup/KTX-Software.git\",\r\n        \"revision\": \"v4.3.1\",\r\n        \"recursive\": false\r\n    }\r\n},\r\n{\r\n    \"name\": \"openxr-sdk\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/KhronosGroup/OpenXR-SDK.git\",\r\n        \"sha1\": \"be392bf6949adeeabad5082aa79d12aacbda781f\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"SPIRV-Cross\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/KhronosGroup/SPIRV-Cross.git\",\r\n        \"revision\": \"vulkan-sdk-1.4.321.0\"\r\n    }\r\n},\r\n{\r\n    \"name\": \"gfxreconstruct\",\r\n    \"source\": {\r\n        \"type\": \"git\",\r\n        \"url\": \"https://github.com/facebook/gfxreconstruct.git\",\r\n        \"revision\": \"99a2ac03e7386c9773804c7b25a3712fd867f458\"\r\n    }\r\n}\r\n]\r\n"
  },
  {
    "path": "third-party/bootstrap.py",
    "content": "#!/usr/bin/python3\r\n\r\n#\r\n# https://github.com/corporateshark/bootstrapping.git\r\n# sk@linderdaum.com\r\n#\r\n# The MIT License (MIT)\r\n# Copyright (c) 2016-2025, Sergey Kosarevsky\r\n#\r\n# ---\r\n# Based on https://bitbucket.org/blippar/bootstrapping-external-libs\r\n#\r\n# The MIT License (MIT)\r\n# Copyright (c) 2016 Blippar.com Ltd\r\n#\r\n# Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\r\n#\r\n# The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\r\n#\r\n# THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n\r\nfrom __future__ import print_function\r\nimport platform\r\nimport os\r\nimport sys\r\nimport io\r\nimport shutil\r\nimport subprocess\r\nimport zipfile\r\nimport tarfile\r\nimport hashlib\r\nimport json\r\nimport getopt\r\nimport traceback\r\nimport urllib\r\nimport ssl\r\nimport ctypes\r\n\r\nssl._create_default_https_context = ssl._create_unverified_context\r\n\r\ntry:\r\n    from urllib.request import urlparse\r\n    from urllib.request import urlunparse\r\n    from urllib.request import quote\r\nexcept ImportError:\r\n    from urlparse import urlparse\r\n    from urlparse import urlunparse\r\n    from urllib import URLopener\r\n    from urllib import quote\r\n\r\ntry:\r\n    import paramiko\r\n    import scp\r\n    scp_available = True\r\nexcept:\r\n    scp_available = False\r\n    print(\"WARNING: Please install the Python packages [paramiko, scp] for full script operation.\")\r\n\r\ntry:\r\n    import lzma\r\n    lzma_available = True\r\nexcept:\r\n    print(\"WARNING: Python lzma library not available; extraction of .tar.xz files may not be supported.\")\r\n    print(\"Installation on Ubuntu:\")\r\n    print(\"> apt-get install python-lzma\")\r\n    print(\"Installation on Mac OS X:\")\r\n    print(\"> brew install xz\")\r\n    print(\"> pip install pyliblzma\")\r\n    lzma_available = False\r\n\r\nBOOTSTRAP_VERSION = \"1.0.7 (2025)\"\r\n\r\nclass Colors:\r\n    GREEN = '\\033[92m'\r\n    WARNING = '\\033[91m'\r\n    NORMAL = '\\033[0m'\r\n\r\nSRC_DIR_BASE = \"src\"\r\nARCHIVE_DIR_BASE = \"archives\"\r\nSNAPSHOT_DIR_BASE = \"snapshots\"\r\n\r\nBASE_DIR = os.getcwd()\r\nSRC_DIR = os.path.join(BASE_DIR, SRC_DIR_BASE)\r\nARCHIVE_DIR = os.path.join(BASE_DIR, ARCHIVE_DIR_BASE)\r\nSNAPSHOT_DIR = os.path.join(BASE_DIR, SNAPSHOT_DIR_BASE)\r\n\r\nDEFAULT_PNUM = 3\r\nDEBUG_OUTPUT = False\r\nFALLBACK_URL = \"\"\r\n\r\nUSE_TAR = False\r\nUSE_UNZIP = False\r\n\r\nTOOL_COMMAND_PYTHON = sys.executable if not \" \" in sys.executable else '\"{}\"'.format(sys.executable)\r\nTOOL_COMMAND_GIT = \"git\"\r\nTOOL_COMMAND_HG = \"hg\"\r\nTOOL_COMMAND_SVN = \"svn\"\r\nTOOL_COMMAND_PATCH = \"patch\"\r\nTOOL_COMMAND_TAR = \"tar\"\r\nTOOL_COMMAND_UNZIP = \"unzip\"\r\n\r\nansi_console = True\r\n\r\nif platform.system() == \"Windows\":\r\n    os.environ['CYGWIN'] = \"nodosfilewarning\"\r\n    ansi_console = False\r\n    if sys.getwindowsversion().major >= 10:\r\n        ansi_console = True\r\n        kernel32 = ctypes.windll.kernel32\r\n        handle = kernel32.GetStdHandle(-11)\r\n        mode = ctypes.c_uint32()\r\n        kernel32.GetConsoleMode(handle, ctypes.byref(mode))\r\n        kernel32.SetConsoleMode(handle, mode.value | 0x0004)\r\n\r\nif not sys.version_info[0] >= 3:\r\n    raise ValueError(\"I require Python 3.0 or a later version\")\r\n\r\ndef log(string):\r\n    print(\"--- \" + string)\r\n\r\ndef warning(string):\r\n    if ansi_console:\r\n      print(Colors.WARNING, \"--- \" + string, Colors.NORMAL)\r\n    else:\r\n      print(\"--- \" + string)\r\n\r\ndef dlog(string):\r\n    if DEBUG_OUTPUT:\r\n        print(\"*** \" + string)\r\n\r\ndef executeCommand(command, printCommand = False, quiet = False):\r\n\r\n    printCommand = printCommand or DEBUG_OUTPUT\r\n    out = None\r\n    err = None\r\n\r\n    if quiet:\r\n        out = open(os.devnull, 'w')\r\n        err = subprocess.STDOUT\r\n\r\n    if printCommand:\r\n        if DEBUG_OUTPUT:\r\n            dlog(\">>> \" + command)\r\n        else:\r\n            log(\">>> \" + command)\r\n\r\n    return subprocess.call(command, shell = True, stdout=out, stderr=err);\r\n\r\n\r\ndef dieIfNonZero(res):\r\n    if res != 0:\r\n        raise ValueError(\"Command returned non-zero status: \" + str(res));\r\n\r\ndef escapifyPath(path):\r\n    if path.find(\" \") == -1:\r\n        return path\r\n    if platform.system() == \"Windows\":\r\n        return \"\\\"\" + path + \"\\\"\"\r\n    return path.replace(\"\\\\ \", \" \")\r\n\r\ndef cloneRepository(type, url, target_name, revision, try_only_local_operations = False, recursive = True):\r\n    target_dir = escapifyPath(os.path.join(SRC_DIR, target_name))\r\n    target_dir_exists = os.path.exists(target_dir)\r\n    log(\"Cloning \" + url + \" to \" + target_dir)\r\n\r\n    if type == \"hg\":\r\n        repo_exists = os.path.exists(os.path.join(target_dir, \".hg\"))\r\n\r\n        if not repo_exists:\r\n            if try_only_local_operations:\r\n                raise RuntimeError(\"Repository for \" + target_name + \" not found; cannot execute local operations only\")\r\n            if target_dir_exists:\r\n                dlog(\"Removing directory \" + target_dir + \" before cloning\")\r\n                shutil.rmtree(target_dir)\r\n            dieIfNonZero(executeCommand(TOOL_COMMAND_HG + \" clone \" + url + \" \" + target_dir))\r\n        elif not try_only_local_operations:\r\n            log(\"Repository \" + target_dir + \" already exists; pulling instead of cloning\")\r\n            dieIfNonZero(executeCommand(TOOL_COMMAND_HG + \" pull -R \" + target_dir))\r\n\r\n        if revision is None:\r\n            revision = \"\"\r\n        dieIfNonZero(executeCommand(TOOL_COMMAND_HG + \" update -R \" + target_dir + \" -C \" + revision))\r\n        dieIfNonZero(executeCommand(TOOL_COMMAND_HG + \" purge -R \" + target_dir + \" --config extensions.purge=\"))\r\n\r\n    elif type == \"git\":\r\n        repo_exists = os.path.exists(os.path.join(target_dir, \".git\"))\r\n\r\n        if not repo_exists:\r\n            if try_only_local_operations:\r\n                raise RuntimeError(\"Repository for \" + target_name + \" not found; cannot execute local operations only\")\r\n            if target_dir_exists:\r\n                dlog(\"Removing directory \" + target_dir + \" before cloning\")\r\n                shutil.rmtree(target_dir)\r\n            if recursive:\r\n                dieIfNonZero(executeCommand(TOOL_COMMAND_GIT + \" clone --recursive \" + url + \" \" + target_dir))\r\n            else:\r\n                dieIfNonZero(executeCommand(TOOL_COMMAND_GIT + \" clone \" + url + \" \" + target_dir))\r\n        elif not try_only_local_operations:\r\n            log(\"Repository \" + target_dir + \" already exists; fetching instead of cloning\")\r\n            if recursive:\r\n                dieIfNonZero(executeCommand(TOOL_COMMAND_GIT + \" -C \" + target_dir + \" fetch --recurse-submodules\"))\r\n            else:\r\n                dieIfNonZero(executeCommand(TOOL_COMMAND_GIT + \" -C \" + target_dir + \" fetch\"))\r\n\r\n        if revision is None:\r\n            revision = \"HEAD\"\r\n        dieIfNonZero(executeCommand(TOOL_COMMAND_GIT + \" -C \" + target_dir + \" reset --hard \" + revision))\r\n        dieIfNonZero(executeCommand(TOOL_COMMAND_GIT + \" -C \" + target_dir + \" clean -fxd\"))\r\n\r\n    elif type == \"svn\":\r\n        if not try_only_local_operations: # we can't do much without a server connection when dealing with SVN\r\n            if target_dir_exists:\r\n                dlog(\"Removing directory \" + target_dir + \" before cloning\")\r\n                shutil.rmtree(target_dir)\r\n            dieIfNonZero(executeCommand(TOOL_COMMAND_SVN + \" checkout \" + url + \" \" + target_dir))\r\n\r\n        if revision is not None and revision != \"\":\r\n            raise RuntimeError(\"Updating to revision not implemented for SVN.\")\r\n\r\n    else:\r\n        raise ValueError(\"Cloning \" + type + \" repositories not implemented.\")\r\n\r\n\r\ndef decompressTarXZFile(src_filename, dst_filename):\r\n    if not lzma_available:\r\n        raise RuntimeError(\"lzma extraction not available; please install package lzma (pyliblzma) and try again\")\r\n\r\n    try:\r\n        fs = open(src_filename, \"rb\")\r\n        if not fs:\r\n            raise RuntimeError(\"Opening file \" + src_filename + \" failed\")\r\n        fd = open(dst_filename, \"wb\")\r\n        if not fd:\r\n            raise RuntimeError(\"Opening file \" + dst_filename + \" failed\")\r\n\r\n        decompressed = lzma.decompress(fs.read())\r\n        fd.write(decompressed)\r\n    finally:\r\n        fs.close()\r\n        fd.close()\r\n\r\n\r\n\r\ndef extractFile(filename, target_dir):\r\n    if os.path.exists(target_dir):\r\n        shutil.rmtree(target_dir)\r\n\r\n    log(\"Extracting file \" + filename)\r\n    stem, extension = os.path.splitext(os.path.basename(filename))\r\n\r\n    if extension == \".zip\" or extension == \"\":\r\n        zfile = None\r\n        try:\r\n            zfile = zipfile.ZipFile(filename)\r\n        except zipfile.BadZipFile:\r\n            warning(\"WARNING: Invalid ZIP file '\" + filename + \"'\")\r\n            if os.path.exists(filename) and os.path.getsize(filename) == 0:\r\n                warning(\"WARNING: Zero-sized file was deleted. Run the script again.\")\r\n                os.remove(filename)\r\n            else:\r\n                warning(\"WARNING: Try deleting the cached file and run the script again.\")\r\n            raise RuntimeError(\"Invalid ZIP file '\" + filename + \"'\") from None\r\n        extract_dir = os.path.commonprefix(zfile.namelist())\r\n        hasFolder = False\r\n        for fname in zfile.namelist():\r\n            if fname.find('/') != -1:\r\n                hasFolder = True\r\n        extract_dir_local = \"\"\r\n        if not hasFolder: # special case, there are no folders in the archive\r\n            extract_dir = \"\"\r\n        if extract_dir == \"\":  # deal with stupid zip files that don't contain a base directory\r\n            extract_dir, extension2 = os.path.splitext(os.path.basename(filename))\r\n            extract_dir_local = extract_dir\r\n        extract_dir_abs = os.path.join(SRC_DIR, extract_dir_local)\r\n\r\n        try:\r\n            os.mkdirs(extract_dir_abs)\r\n        except:\r\n            pass\r\n\r\n        if not USE_UNZIP:\r\n            zfile.extractall(extract_dir_abs)\r\n            zfile.close()\r\n        else:\r\n            zfile.close()\r\n            dieIfNonZero(executeCommand(TOOL_COMMAND_UNZIP + \" \" + filename + \" -d \" + extract_dir_abs))\r\n\r\n    elif extension == \".tar\" or extension == \".gz\" or extension == \".bz2\" or extension == \".xz\":\r\n\r\n        if extension == \".xz\":# and not lzma_available:\r\n            stem2, extension2 = os.path.splitext(os.path.basename(stem))\r\n            if extension2 == \".tar\":\r\n                # we extract the .tar.xz file to a .tar file before we uncompress that\r\n                tar_filename = os.path.join(os.path.dirname(filename), stem)\r\n                decompressTarXZFile(filename, tar_filename)\r\n                filename = tar_filename\r\n            else:\r\n                raise RuntimeError(\"Unable to extract .xz file that is not a .tar.xz file.\")\r\n\r\n        tfile = tarfile.open(filename)\r\n        extract_dir = os.path.commonprefix(tfile.getnames())\r\n        extract_dir_local = \"\"\r\n        if extract_dir == \"\":  # deal with stupid tar files that don't contain a base directory\r\n            extract_dir, extension2 = os.path.splitext(os.path.basename(filename))\r\n            extract_dir_local = extract_dir\r\n        extract_dir_abs = os.path.join(SRC_DIR, extract_dir_local)\r\n\r\n        try:\r\n            os.mkdirs(extract_dir_abs)\r\n        except:\r\n            pass\r\n\r\n        if not USE_TAR:\r\n            tfile.extractall(extract_dir_abs)\r\n            tfile.close()\r\n        else:\r\n            tfile.close()\r\n            dieIfNonZero(executeCommand(TOOL_COMMAND_TAR + \" -x -f \" + filename + \" -C \" + extract_dir_abs))\r\n\r\n    else:\r\n        raise RuntimeError(\"Unknown compressed file format \" + extension)\r\n\r\n    if platform.system() == \"Windows\":\r\n        extract_dir = extract_dir.replace( '/', '\\\\' )\r\n        target_dir = target_dir.replace( '/', '\\\\' )\r\n        if extract_dir[-1::] == '\\\\':\r\n            extract_dir = extract_dir[:-1]\r\n\r\n    # rename extracted folder to target_dir\r\n    extract_dir_abs = os.path.join(SRC_DIR, extract_dir)\r\n\r\n    needRename = True\r\n\r\n    if platform.system() == \"Windows\":\r\n       needRename = extract_dir_abs.lower() != target_dir.lower()\r\n\r\n    if needRename: os.rename(extract_dir_abs, target_dir)\r\n\r\n\r\ndef createArchiveFromDirectory(src_dir_name, archive_name, delete_existing_archive = False):\r\n    if delete_existing_archive and os.path.exists(archive_name):\r\n        dlog(\"Removing snapshot file \" + archive_name + \" before creating new one\")\r\n        os.remove(archive_name)\r\n\r\n    archive_dir = os.path.dirname(archive_name)\r\n    if not os.path.isdir(archive_dir):\r\n        os.mkdir(archive_dir)\r\n\r\n    with tarfile.open(archive_name, \"w:gz\") as tar:\r\n        tar.add(src_dir_name, arcname = os.path.basename(src_dir_name))\r\n\r\n\r\ndef downloadSCP(hostname, username, path, target_dir):\r\n    if not scp_available:\r\n        warning(\"ERROR: missing Python packages [paramiko, scp]; cannot continue.\")\r\n        raise RuntimeError(\"Missing Python packages [paramiko, scp]; cannot continue.\")\r\n    ssh = paramiko.SSHClient()\r\n    ssh.load_system_host_keys()\r\n    ssh.connect(hostname = hostname, username = username)\r\n    scpc = scp.SCPClient(ssh.get_transport())\r\n    scpc.get(path, local_path = target_dir);\r\n\r\ndef downloadProgress(cur_size, total_size):\r\n    percent = int((cur_size / total_size)*100)\r\n    print(\"[\", end = \"\")\r\n    for i in range(int(percent/2)):\r\n        print(\"*\", end = \"\")\r\n    for i in range(int(percent/2), 50):\r\n        print(\".\", end = \"\")\r\n    print(\"] \" + str(percent) + \"% --- \", end = \"\")\r\n    print(\"%.2f\" % (cur_size / (1024*1024)), \"Mb\", end = \"\\r\")\r\n\r\ndef computeFileHash(filename):\r\n    blocksize = 65536\r\n    hasher = hashlib.sha1()\r\n    with open(filename, 'rb') as afile:\r\n        buf = afile.read(blocksize)\r\n        while len(buf) > 0:\r\n            hasher.update(buf)\r\n            buf = afile.read(blocksize)\r\n    return hasher.hexdigest()\r\n\r\ndef downloadFile(url, download_dir, target_dir_name, sha1_hash = None, force_download = False, user_agent = None):\r\n    if not os.path.isdir(download_dir):\r\n        os.mkdir(download_dir)\r\n\r\n    p = urlparse(url)\r\n    url = urlunparse([p[0], p[1], quote(p[2]), p[3], p[4], p[5]]) # replace special characters in the URL path\r\n\r\n    filename_rel = os.path.split(p.path)[1] # get original filename\r\n    target_filename = os.path.join(download_dir, filename_rel)\r\n\r\n    # check SHA1 hash, if file already exists\r\n    if os.path.exists(target_filename) and sha1_hash is not None and sha1_hash != \"\":\r\n        hash_file = computeFileHash(target_filename)\r\n        if hash_file != sha1_hash:\r\n            log(\"Hash of \" + target_filename + \" (\" + hash_file + \") does not match expected hash (\" + sha1_hash + \"); forcing download\")\r\n            force_download = True\r\n\r\n    # download file\r\n    if (not os.path.exists(target_filename)) or force_download:\r\n        log(\"Downloading \" + url + \" to \" + target_filename)\r\n        if p.scheme == \"ssh\":\r\n            downloadSCP(p.hostname, p.username, p.path, download_dir)\r\n        else:\r\n            opener = urllib.request.build_opener()\r\n            if user_agent is not None:\r\n                opener.addheaders = [('User-agent', user_agent)]\r\n            f = open(target_filename, 'wb')\r\n            with opener.open(url) as response:\r\n                Length = response.getheader('content-length')\r\n                BlockSize = 128*1024 # default value\r\n                if Length:\r\n                    Length = int(Length)\r\n                    BlockSize = max(BlockSize, Length // 1000)\r\n                    Size = 0\r\n                    while True:\r\n                        Buffer = response.read(BlockSize)\r\n                        if not Buffer:\r\n                            break\r\n                        f.write(Buffer)\r\n                        Size += len(Buffer)\r\n                        downloadProgress(Size, Length)\r\n                    print();\r\n                else:\r\n                    f.write(response.read())\r\n            f.close()\r\n    else:\r\n        log(\"Skipping download of \" + url + \"; already downloaded\")\r\n\r\n    # check SHA1 hash\r\n    if sha1_hash is not None and sha1_hash != \"\":\r\n        hash_file = computeFileHash(target_filename)\r\n        if hash_file != sha1_hash:\r\n            errorStr = \"Hash of \" + target_filename + \" (\" + hash_file + \") differs from expected hash (\" + sha1_hash + \")\"\r\n            log(errorStr)\r\n            raise RuntimeError(errorStr)\r\n\r\n    return target_filename\r\n\r\n\r\ndef downloadAndExtractFile(url, download_dir, target_dir_name, sha1_hash = None, force_download = False, user_agent = None):\r\n    target_filename = downloadFile(url, download_dir, target_dir_name, sha1_hash, force_download, user_agent)\r\n    extractFile(target_filename, os.path.join(SRC_DIR, target_dir_name))\r\n\r\n\r\ndef applyPatchFile(patch_name, dir_name, pnum):\r\n    # we're assuming the patch was applied like in this example:\r\n    # diff --exclude=\".git\" --exclude=\".hg\" -rupN ./src/AGAST/ ./src/AGAST_patched/ > ./patches/agast.patch\r\n    # where the first given location is the unpatched directory, and the second location is the patched directory.\r\n    log(\"Applying patch to \" + dir_name)\r\n    patch_dir = os.path.join(BASE_DIR, \"patches\")\r\n    arguments = \"-d \" + os.path.join(SRC_DIR, dir_name) + \" -p\" + str(pnum) + \" < \" + os.path.join(patch_dir, patch_name)\r\n    argumentsBinary = \"-d \" + os.path.join(SRC_DIR, dir_name) + \" -p\" + str(pnum) + \" --binary < \" + os.path.join(patch_dir, patch_name)\r\n    res = executeCommand(TOOL_COMMAND_PATCH + \" --dry-run \" + arguments, quiet = True)\r\n    if res != 0:\r\n        arguments = argumentsBinary\r\n        res = executeCommand(TOOL_COMMAND_PATCH + \" --dry-run \" + arguments, quiet = True)\r\n    if res != 0:\r\n        warning(\"ERROR: patch application failure; has this patch already been applied?\")\r\n        executeCommand(TOOL_COMMAND_PATCH + \" --dry-run \" + arguments, printCommand = True)\r\n        exit(255)\r\n    else:\r\n        dieIfNonZero(executeCommand(TOOL_COMMAND_PATCH + \" \" + arguments, quiet = True))\r\n\r\n\r\ndef runPythonScript(script_name):\r\n    log(\"Running Python script \" + script_name)\r\n    patch_dir = os.path.join(BASE_DIR, \"patches\")\r\n    filename = os.path.join(patch_dir, script_name)\r\n    dieIfNonZero(executeCommand(TOOL_COMMAND_PYTHON + \" \" + escapifyPath(filename), False));\r\n\r\n\r\ndef findToolCommand(command, paths_to_search, required = False):\r\n    command_res = command\r\n    found = False\r\n\r\n    for path in paths_to_search:\r\n        command_abs = os.path.join(path, command)\r\n        if os.path.exists(command_abs):\r\n            command_res = command_abs\r\n            found = True\r\n            break;\r\n\r\n    if required and not found:\r\n        warning(\"WARNING: command \" + command + \" not found, but required by script\")\r\n\r\n    dlog(\"Found '\" + command + \"' as \" + command_res)\r\n    return command_res\r\n\r\n\r\ndef readJSONData(filename):\r\n    try:\r\n        json_data = open(filename).read()\r\n    except:\r\n        warning(\"ERROR: Could not read JSON file: \" + filename)\r\n        return None\r\n\r\n    try:\r\n        data = json.loads(json_data)\r\n    except json.JSONDecodeError as e:\r\n        warning(\"ERROR: Could not parse JSON document: {}\\n    {} (line {}:{})\\n\".format(filename, e.msg, e.lineno, e.colno))\r\n        return None\r\n    except:\r\n        warning(\"ERROR: Could not parse JSON document: \" + filename)\r\n        return None\r\n\r\n    return data\r\n\r\n\r\ndef writeJSONData(data, filename):\r\n    with open(filename, 'w') as outfile:\r\n        json.dump(data, outfile)\r\n\r\n\r\ndef listLibraries(data):\r\n    for library in data:\r\n        name = library.get('name', None)\r\n        if name is not None:\r\n            print(name)\r\n\r\n\r\ndef printOptions():\r\n        print(\"--------------------------------------------------------------------------------\")\r\n        print(BOOTSTRAP_VERSION)\r\n        print(\"--------------------------------------------------------------------------------\")\r\n        print(\"Downloads external libraries, and applies patches or scripts if necessary.\")\r\n        print(\"If the --name argument is not provided, all available libraries will be\")\r\n        print(\"downloaded.\")\r\n        print(\"\")\r\n        print(\"Options:\")\r\n        print(\"  --list, -l              List all available libraries\")\r\n        print(\"  --name, -n              Specifies the name of a single library to be\")\r\n        print(\"                          downloaded\")\r\n        print(\"  --name-file, -N         Specifies a file that contains a (sub)set of libraries\")\r\n        print(\"                          to be downloaded. One library name per line; lines\")\r\n        print(\"                          starting with '#' are considered comments.\")\r\n        print(\"  --skip                  Specifies a name of a single library to be skipped\")\r\n        print(\"  --clean, -c             Remove library directory before obtaining library\")\r\n        print(\"  --clean-all, -C         Implies --clean, and also forces re-download of cached\")\r\n        print(\"                          archive files\")\r\n        print(\"  --base-dir, -b          Base directory, if script is called from outside of\")\r\n        print(\"                          its directory\")\r\n        print(\"  --bootstrap-file        Specifies the file containing the canonical bootstrap\")\r\n        print(\"                          JSON data (default: bootstrap.json)\")\r\n        print(\"  --local-bootstrap-file  Specifies the file containing local bootstrap JSON\")\r\n        print(\"                          data (e.g. for a particular project). The data in this\")\r\n        print(\"                          file will have higher precedence than the data from\")\r\n        print(\"                          the canonical bootstrap file.\")\r\n        print(\"  --use-tar               Use 'tar' command instead of Python standard library\")\r\n        print(\"                          to extract tar archives\")\r\n        print(\"  --use-unzip             Use 'unzip' command instead of Python standard library\")\r\n        print(\"                          to extract zip archives\")\r\n        print(\"  --repo-snapshots        Create a snapshot archive of a repository when its\")\r\n        print(\"                          state changes, e.g. on a fallback location\")\r\n        print(\"  --fallback-url          Fallback URL that points to an existing and already\")\r\n        print(\"                          bootstrapped `external` repository that may be used to\")\r\n        print(\"                          retrieve otherwise unobtainable archives or\")\r\n        print(\"                          repositories. The --repo-snapshots option must be\")\r\n        print(\"                          active on the fallback server. Allowed URL schemes are\")\r\n        print(\"                          file://, ssh://, http://, https://, ftp://.\")\r\n        print(\"  --force-fallback        Force using the fallback URL instead of the original\")\r\n        print(\"                          sources\")\r\n        print(\"  --debug-output          Enables extra debugging output\")\r\n        print(\"  --break-on-first-error  Terminate script once the first error is encountered\")\r\n        print(\"  --version               Print the script version\")\r\n        print(\"--------------------------------------------------------------------------------\")\r\n\r\n\r\ndef main(argv):\r\n    global BASE_DIR, SRC_DIR, ARCHIVE_DIR, DEBUG_OUTPUT, FALLBACK_URL, USE_TAR, USE_UNZIP\r\n    global TOOL_COMMAND_PYTHON, TOOL_COMMAND_GIT, TOOL_COMMAND_HG, TOOL_COMMAND_SVN, TOOL_COMMAND_PATCH, TOOL_COMMAND_TAR, TOOL_COMMAND_UNZIP\r\n\r\n    try:\r\n        opts, args = getopt.getopt(\r\n            argv,\r\n            \"ln:N:cCb:h\",\r\n            [\"list\", \"name=\", \"name-file=\", \"skip=\", \"clean\", \"clean-all\", \"base-dir\", \"bootstrap-file=\",\r\n             \"local-bootstrap-file=\", \"use-tar\", \"use-unzip\", \"repo-snapshots\", \"fallback-url=\",\r\n             \"force-fallback\", \"debug-output\", \"help\", \"break-on-first-error\", \"version\"])\r\n    except getopt.GetoptError:\r\n        printOptions()\r\n        return 0\r\n\r\n    opt_names = []\r\n    name_files = []\r\n    skip_libs = []\r\n    opt_clean = False\r\n    opt_clean_archives = False\r\n    list_libraries = False\r\n\r\n    default_bootstrap_filename = \"bootstrap.json\"\r\n    bootstrap_filename = os.path.abspath(os.path.join(BASE_DIR, default_bootstrap_filename))\r\n    local_bootstrap_filename = \"\"\r\n    create_repo_snapshots = False\r\n    force_fallback = False\r\n    break_on_first_error = False\r\n\r\n    base_dir_path = \"\"\r\n\r\n    for opt, arg in opts:\r\n        if opt in (\"-h\", \"--help\"):\r\n            printOptions()\r\n            return 0\r\n        if opt in (\"--version\"):\r\n            print(BOOTSTRAP_VERSION)\r\n            return 0\r\n        if opt in (\"-l\", \"--list\"):\r\n            list_libraries = True\r\n        if opt in (\"-n\", \"--name\"):\r\n            opt_names.append(arg)\r\n        if opt in (\"-N\", \"--name-file\"):\r\n            name_files.append(os.path.abspath(arg))\r\n        if opt in (\"--skip\",):\r\n            skip_libs.append(arg)\r\n        if opt in (\"-c\", \"--clean\"):\r\n            opt_clean = True\r\n        if opt in (\"-C\", \"--clean-all\"):\r\n            opt_clean = True\r\n            opt_clean_archives = True\r\n        if opt in (\"-b\", \"--base-dir\"):\r\n            base_dir_path = os.path.abspath(arg)\r\n            BASE_DIR = base_dir_path\r\n            SRC_DIR = os.path.join(BASE_DIR, SRC_DIR_BASE)\r\n            ARCHIVE_DIR = os.path.join(BASE_DIR, ARCHIVE_DIR_BASE)\r\n            bootstrap_filename = os.path.join(BASE_DIR, default_bootstrap_filename)\r\n            log(\"Using \" + arg + \" as base directory\")\r\n        if opt in (\"--bootstrap-file\",):\r\n            bootstrap_filename = os.path.abspath(arg)\r\n            log(\"Using main bootstrap file \" + bootstrap_filename)\r\n        if opt in (\"--local-bootstrap-file\",):\r\n            local_bootstrap_filename = os.path.abspath(arg)\r\n            log(\"Using local bootstrap file \" + local_bootstrap_filename)\r\n        if opt in (\"--use-tar\",):\r\n            USE_TAR = True\r\n        if opt in (\"--use-unzip\",):\r\n            USE_UNZIP = True\r\n        if opt in (\"--repo-snapshots\",):\r\n            create_repo_snapshots = True\r\n            log(\"Will create repository snapshots\")\r\n        if opt in (\"--fallback-url\",):\r\n            FALLBACK_URL = arg\r\n        if opt in (\"--force-fallback\",):\r\n            force_fallback = True\r\n            log(\"Using fallback URL to fetch all libraries\")\r\n        if opt in (\"--break-on-first-error\",):\r\n            break_on_first_error = True\r\n        if opt in (\"--debug-output\",):\r\n            DEBUG_OUTPUT = True\r\n\r\n    if platform.system() != \"Windows\":\r\n        # Unfortunately some IDEs do not have a proper PATH environment variable set,\r\n        # so we search manually for the required tools in some obvious locations.\r\n        paths_to_search = os.environ[\"PATH\"].split(\":\") + [\"/usr/local/bin\", \"/opt/local/bin\", \"/usr/bin\"]\r\n        TOOL_COMMAND_PYTHON = findToolCommand(TOOL_COMMAND_PYTHON, paths_to_search, required = True)\r\n        TOOL_COMMAND_GIT = findToolCommand(TOOL_COMMAND_GIT, paths_to_search, required = True)\r\n        TOOL_COMMAND_HG = findToolCommand(TOOL_COMMAND_HG, paths_to_search, required = True)\r\n        TOOL_COMMAND_SVN = findToolCommand(TOOL_COMMAND_SVN, paths_to_search, required = True)\r\n        TOOL_COMMAND_PATCH = findToolCommand(TOOL_COMMAND_PATCH, paths_to_search, required = True)\r\n        TOOL_COMMAND_TAR = findToolCommand(TOOL_COMMAND_TAR, paths_to_search, required = USE_TAR)\r\n        TOOL_COMMAND_UNZIP = findToolCommand(TOOL_COMMAND_UNZIP, paths_to_search, required = USE_UNZIP)\r\n\r\n    if base_dir_path:\r\n        os.chdir(base_dir_path)\r\n\r\n    if name_files:\r\n        for name_file in name_files:\r\n            try:\r\n                with open(name_file) as f:\r\n                    opt_names_local = [l for l in (line.strip() for line in f) if l]\r\n                    opt_names_local = [l for l in opt_names_local if l[0] != '#']\r\n                    opt_names += opt_names_local\r\n                    dlog(\"Name file contains: \" + \", \".join(opt_names_local))\r\n            except:\r\n                warning(\"ERROR: cannot parse name file '\" + name_file + \"'\")\r\n                return -1\r\n\r\n    if force_fallback and not FALLBACK_URL:\r\n        warning(\"Error: cannot force usage of the fallback location without specifying a fallback URL\")\r\n        return -1;\r\n\r\n    state_filename = os.path.join(os.path.dirname(os.path.splitext(bootstrap_filename)[0]), \\\r\n                                  \".\" + os.path.basename(os.path.splitext(bootstrap_filename)[0])) \\\r\n                     + os.path.splitext(bootstrap_filename)[1]\r\n\r\n    dlog(\"bootstrap_filename = \" + bootstrap_filename)\r\n    dlog(\"state_filename     = \" + state_filename)\r\n\r\n    # read canonical libraries data\r\n    data = readJSONData(bootstrap_filename)\r\n    if data is None:\r\n        return -1;\r\n\r\n    # some sanity checking\r\n    for library in data:\r\n        if library.get('name', None) is None:\r\n            warning(\"ERROR: Invalid schema: library object does not have a 'name'\")\r\n            return -1\r\n\r\n    # read local libraries data, if available\r\n    local_data = None\r\n    if local_bootstrap_filename:\r\n        local_data = readJSONData(local_bootstrap_filename)\r\n\r\n        if local_data is None:\r\n            return -1;\r\n\r\n        # some sanity checking\r\n        for local_library in local_data:\r\n            if local_library.get('name', None) is None:\r\n                warning(\"ERROR: Invalid schema: local library object does not have a 'name'\")\r\n                return -1\r\n\r\n    # merge canonical and local library data, if applicable; local libraries take precedence\r\n    if local_data is not None:\r\n        for local_library in local_data:\r\n            local_name = local_library.get('name', None)\r\n            found_canonical_library = False\r\n            for n, library in enumerate(data):\r\n                name = library.get('name', None)\r\n                if local_name == name:\r\n                    data[n] = local_library # overwrite library\r\n                    found_canonical_library = True\r\n            if not found_canonical_library:\r\n                data.append(local_library)\r\n\r\n    if list_libraries:\r\n        listLibraries(data)\r\n        return 0\r\n\r\n    sdata = []\r\n    if os.path.exists(state_filename):\r\n        sdata = readJSONData(state_filename)\r\n\r\n    # create source directory\r\n    if not os.path.isdir(SRC_DIR):\r\n        log(\"Creating directory \" + SRC_DIR)\r\n        os.mkdir(SRC_DIR)\r\n\r\n    # create archive files directory\r\n    if not os.path.isdir(ARCHIVE_DIR):\r\n        log(\"Creating directory \" + ARCHIVE_DIR)\r\n        os.mkdir(ARCHIVE_DIR)\r\n\r\n    failed_libraries = []\r\n\r\n    for library in data:\r\n        name = library.get('name', None)\r\n        source = library.get('source', None)\r\n        post = library.get('postprocess', None)\r\n        predicate = library.get('predicate', None)\r\n\r\n        if (skip_libs) and (name in skip_libs):\r\n            continue\r\n\r\n        if (opt_names) and (not name in opt_names):\r\n            continue\r\n\r\n        if predicate is not None:\r\n            log(\"Running predicate code for '\" + name + \"'\")\r\n            if eval(predicate) is not True:\r\n                log(\"Predicate is not True for '\" + name + \"'; skipping library\")\r\n                continue\r\n\r\n        lib_dir = os.path.join(SRC_DIR, name)\r\n        lib_dir = lib_dir.replace(os.path.sep, '/')\r\n\r\n        dlog(\"********** LIBRARY \" + name + \" **********\")\r\n        dlog(\"lib_dir = \" + lib_dir + \")\")\r\n\r\n        # compare against cached state\r\n        cached_state_ok = False\r\n        if not opt_clean:\r\n            for slibrary in sdata:\r\n                sname = slibrary.get('name', None)\r\n                if sname is not None and sname == name and slibrary == library and os.path.exists(lib_dir):\r\n                    cached_state_ok = True\r\n                    break\r\n\r\n        if cached_state_ok:\r\n            log(\"Cached state for '\" + name + \"' equals expected state; skipping library\")\r\n            continue\r\n        else:\r\n            # remove cached state for library\r\n            sdata[:] = [s for s in sdata if not (lambda s, name : s.get('name', None) is not None and s['name'] == name)(s, name)]\r\n\r\n        # create library directory, if necessary\r\n        if opt_clean:\r\n            log(\"Cleaning directory for \" + name)\r\n            if os.path.exists(lib_dir):\r\n                shutil.rmtree(lib_dir)\r\n        if not os.path.exists(lib_dir):\r\n            os.makedirs(lib_dir)\r\n\r\n        try:\r\n            # download source\r\n            if source is not None:\r\n                if 'type' not in source:\r\n                    warning(\"ERROR: Invalid schema for '\" + name + \"': 'source' object must have a 'type'\")\r\n                    return -1\r\n                if 'url' not in source:\r\n                    warning(\"ERROR: Invalid schema for '\" + name + \"': 'source' object must have a 'url'\")\r\n                    return -1\r\n                src_type = source['type']\r\n                src_url = source['url']\r\n\r\n                if src_type == \"sourcefile\":\r\n                    sha1 = source.get('sha1', None)\r\n                    user_agent = source.get('user-agent', None)\r\n                    try:\r\n                        if force_fallback:\r\n                            raise RuntimeError\r\n                        downloadFile(src_url, ARCHIVE_DIR, name, sha1, force_download = opt_clean_archives, user_agent = user_agent)\r\n                        filename_rel = os.path.basename(src_url)\r\n                        shutil.copyfile( os.path.join(ARCHIVE_DIR, filename_rel), os.path.join(lib_dir, filename_rel) )\r\n                    except:\r\n                        if FALLBACK_URL:\r\n                            if not force_fallback:\r\n                                log(\"WARNING: Downloading of file \" + src_url + \" failed; trying fallback\")\r\n\r\n                            p = urlparse(src_url)\r\n                            filename_rel = os.path.split(p.path)[1] # get original filename\r\n                            p = urlparse(FALLBACK_URL)\r\n                            fallback_src_url = urlunparse([p[0], p[1], p[2] + \"/\" + ARCHIVE_DIR_BASE + \"/\" + filename_rel, p[3], p[4], p[5]])\r\n                            downloadFile(fallback_src_url, ARCHIVE_DIR, name, sha1, force_download = True)\r\n                            shutil.copyfile( os.path.join(ARCHIVE_DIR, filename_rel), os.path.join(lib_dir, filename_rel) )\r\n                        else:\r\n                            shutil.rmtree(lib_dir)\r\n                            raise\r\n                elif src_type == \"archive\":\r\n                    sha1 = source.get('sha1', None)\r\n                    user_agent = source.get('user-agent', None)\r\n                    try:\r\n                        if force_fallback:\r\n                            raise RuntimeError\r\n                        downloadAndExtractFile(src_url, ARCHIVE_DIR, name, sha1, force_download = opt_clean_archives, user_agent = user_agent)\r\n                    except:\r\n                        if FALLBACK_URL:\r\n                            if not force_fallback:\r\n                                log(\"WARNING: Downloading of file \" + src_url + \" failed; trying fallback\")\r\n\r\n                            p = urlparse(src_url)\r\n                            filename_rel = os.path.split(p.path)[1] # get original filename\r\n                            p = urlparse(FALLBACK_URL)\r\n                            fallback_src_url = urlunparse([p[0], p[1], p[2] + \"/\" + ARCHIVE_DIR_BASE + \"/\" + filename_rel, p[3], p[4], p[5]])\r\n                            downloadAndExtractFile(fallback_src_url, ARCHIVE_DIR, name, sha1, force_download = True)\r\n                        else:\r\n                            raise\r\n\r\n                else:\r\n                    revision = source.get('revision', None)\r\n                    recursive = source.get('recursive', True)\r\n\r\n                    archive_name = name + \".tar.gz\" # for reading or writing of snapshot archives\r\n                    if revision is not None:\r\n                        archive_name = name + \"_\" + revision + \".tar.gz\"\r\n\r\n                    try:\r\n                        if force_fallback:\r\n                            raise RuntimeError\r\n                        cloneRepository(src_type, src_url, name, revision, False, recursive)\r\n\r\n                        if create_repo_snapshots:\r\n                            log(\"Creating snapshot of library repository '\" + name + \"'\")\r\n                            repo_dir = os.path.join(SRC_DIR, name)\r\n                            archive_filename = os.path.join(SNAPSHOT_DIR, archive_name)\r\n\r\n                            dlog(\"Snapshot will be saved as \" + archive_filename)\r\n                            createArchiveFromDirectory(repo_dir, archive_filename, revision is None)\r\n\r\n                    except:\r\n                        if FALLBACK_URL:\r\n                            if not force_fallback:\r\n                                log(\"WARNING: Cloning of repository \" + src_url + \" failed; trying fallback\")\r\n\r\n                            # copy archived snapshot from fallback location\r\n                            p = urlparse(FALLBACK_URL)\r\n                            fallback_src_url = urlunparse([p[0], p[1], p[2] + \"/\" + SNAPSHOT_DIR_BASE + \"/\" + archive_name, p[3], p[4], p[5]])\r\n                            dlog(\"Looking for snapshot \" + fallback_src_url + \" of library repository \" + name)\r\n\r\n                            # create snapshots files directory\r\n                            downloadAndExtractFile(fallback_src_url, SNAPSHOT_DIR, name, force_download = True)\r\n\r\n                            # reset repository state to particular revision (only using local operations inside the function)\r\n                            cloneRepository(src_type, src_url, name, revision, True, True)\r\n                        else:\r\n                            raise\r\n            else:\r\n                # set up clean directory for potential patch application\r\n                shutil.rmtree(lib_dir)\r\n                os.mkdir(lib_dir)\r\n\r\n            # post-processing\r\n            if post is not None:\r\n                if 'type' not in post:\r\n                    warning(\"ERROR: Invalid schema for '\" + name + \"': 'postprocess' object must have a 'type'\")\r\n                    return -1\r\n                if 'file' not in post:\r\n                    warning(\"ERROR: Invalid schema for '\" + name + \"': 'postprocess' object must have a 'file'\")\r\n                    return -1\r\n                post_type = post['type']\r\n                post_file = post['file']\r\n\r\n                if post_type == \"patch\":\r\n                    applyPatchFile(post_file, name, post.get('pnum', DEFAULT_PNUM))\r\n                elif post_type == \"script\":\r\n                    runPythonScript(post_file)\r\n                else:\r\n                    warning(\"ERROR: Unknown post-processing type '\" + post_type + \"' for \" + name)\r\n                    return -1\r\n\r\n            # add to cached state\r\n            sdata.append(library)\r\n\r\n            # write out cached state\r\n            writeJSONData(sdata, state_filename)\r\n        except urllib.error.URLError as e:\r\n            warning(\"ERROR: Failure to bootstrap library '\" + name + \"' (urllib.error.URLError: reason \" + str(e.reason) + \")\")\r\n            if break_on_first_error:\r\n                exit(-1)\r\n            traceback.print_exc()\r\n            failed_libraries.append(name)\r\n        except:\r\n            warning(\"ERROR: Failure to bootstrap library '\" + name + \"' (reason: \" + str(sys.exc_info()[0]) + \")\")\r\n            if break_on_first_error:\r\n                exit(-1)\r\n            traceback.print_exc()\r\n            failed_libraries.append(name)\r\n\r\n    if failed_libraries:\r\n        warning(\"***************************************\")\r\n        warning(\"FAILURE to bootstrap the following libraries:\")\r\n        warning(', '.join(failed_libraries))\r\n        warning(\"***************************************\")\r\n        return -1\r\n\r\n    log(\"Finished\")\r\n\r\n    # touch the state cache file\r\n    os.utime(state_filename, None);\r\n\r\n    return 0\r\n\r\nif __name__ == \"__main__\":\r\n    sys.exit(main(sys.argv[1:]))\r\n"
  }
]